<?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>48287</bug_id>
          
          <creation_ts>2010-10-25 21:40:13 -0700</creation_ts>
          <short_desc>Refactoring: Spellchecking related static functions could form a class</short_desc>
          <delta_ts>2010-11-01 18:54:51 -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>HTML Editing</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>All</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="Hajime Morrita">morrita</reporter>
          <assigned_to name="Hajime Morrita">morrita</assigned_to>
          <cc>darin</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>jiapu.mail</cc>
    
    <cc>mrowe</cc>
    
    <cc>rniwa</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>299271</commentid>
    <comment_count>0</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2010-10-25 21:40:13 -0700</bug_when>
    <thetext>In Editor.cpp, there are many static functions for spellchecking. They can form a class, namely RangeMarkerController.
This change will extract that class.

This is a preparation for Bug 41423. I&apos;ll start the bugfix after this cleanup.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>299383</commentid>
    <comment_count>1</comment_count>
      <attachid>71864</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2010-10-26 04:16:21 -0700</bug_when>
    <thetext>Created attachment 71864
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>299384</commentid>
    <comment_count>2</comment_count>
      <attachid>71865</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2010-10-26 04:18:17 -0700</bug_when>
    <thetext>Created attachment 71865
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>299386</commentid>
    <comment_count>3</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2010-10-26 04:21:33 -0700</bug_when>
    <thetext>For safety, this change is rather mechanical: Just moving functions to the method of the class.

But this should be just a starting point. I&apos;d like to do more cleanup after this patch land:
extracting similar code between functions to new method, move some parameter to instance variables, 
etc.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>299387</commentid>
    <comment_count>4</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2010-10-26 04:36:07 -0700</bug_when>
    <thetext>Attachment 71865 did not build on qt:
Build output: http://queues.webkit.org/results/4745019</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>299399</commentid>
    <comment_count>5</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-10-26 06:17:09 -0700</bug_when>
    <thetext>Attachment 71865 did not build on mac:
Build output: http://queues.webkit.org/results/4836017</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>299400</commentid>
    <comment_count>6</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-10-26 06:21:00 -0700</bug_when>
    <thetext>Attachment 71865 did not build on chromium:
Build output: http://queues.webkit.org/results/4747020</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>299515</commentid>
    <comment_count>7</comment_count>
    <who name="Jia Pu">jiapu.mail</who>
    <bug_when>2010-10-26 09:24:54 -0700</bug_when>
    <thetext>(In reply to comment #0)
&gt; In Editor.cpp, there are many static functions for spellchecking. They can form a class, namely RangeMarkerController.

This class seems do much more than just marker management like DocumentMarkerController does. Maybe we should consider a name that hints more at grammar and spelling checking.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>299570</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-10-26 10:36:55 -0700</bug_when>
    <thetext>Attachment 71865 did not build on chromium:
Build output: http://queues.webkit.org/results/4768019</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>299965</commentid>
    <comment_count>9</comment_count>
      <attachid>71978</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2010-10-26 21:25:46 -0700</bug_when>
    <thetext>Created attachment 71978
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>299967</commentid>
    <comment_count>10</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2010-10-26 21:29:05 -0700</bug_when>
    <thetext>Hi Jia, thank you for your feedback!

&gt; &gt; In Editor.cpp, there are many static functions for spellchecking. They can form a class, namely RangeMarkerController.
&gt; 
&gt; This class seems do much more than just marker management like DocumentMarkerController does. Maybe we should consider a name that hints more at grammar and spelling checking.

This makes sense. I renamed it to TextCheckingHelper in updated patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>299973</commentid>
    <comment_count>11</comment_count>
      <attachid>71978</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-10-26 21:38:23 -0700</bug_when>
    <thetext>Comment on attachment 71978
Patch

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

&gt; WebCore/editing/TextCheckingHelper.cpp:438
&gt; +Vector&lt;String&gt; TextCheckingHelper::guessesForMisspelledOrUngrammaticalRange(bool checkGrammar, bool&amp; misspelled, bool&amp; ungrammatical) const
&gt; +{

Will it be possible to split this function into two one that checks grammar and another that doesn&apos;t check grammar?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>300968</commentid>
    <comment_count>12</comment_count>
      <attachid>71978</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2010-10-28 03:14:58 -0700</bug_when>
    <thetext>Comment on attachment 71978
Patch

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

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

Do not delete this line.  You need the latest Xcode to avoid the deletion.

&gt; WebCore/editing/Editor.cpp:1661
&gt; +    TextCheckingHelper checking(client(), spellingSearchRange);

The name &quot;checking&quot; looks curious to me.  Should it be &quot;checkingHelper&quot; or &quot;checker&quot;?

&gt; WebCore/editing/Editor.cpp:2092
&gt; +    TextCheckingHelper checking(client(), searchRange);

ditto.

&gt; WebCore/editing/Editor.cpp:2177
&gt; +    TextCheckingHelper checking(client(), grammarRange);

ditto.

&gt;&gt; WebCore/editing/TextCheckingHelper.cpp:438
&gt;&gt; +{
&gt; 
&gt; Will it be possible to split this function into two one that checks grammar and another that doesn&apos;t check grammar?

I think it will be done in the next step.

&gt; WebCore/editing/TextCheckingHelper.h:38
&gt; +    int findFirstGrammarDetail(const Vector&lt;GrammarDetail&gt;&amp; grammarDetails, int badGrammarPhraseLocation, int /*badGrammarPhraseLength*/, int startOffset, int endOffset, bool markAll);

No need to comment out the argument name.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>301009</commentid>
    <comment_count>13</comment_count>
      <attachid>72175</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2010-10-28 05:52:08 -0700</bug_when>
    <thetext>Created attachment 72175
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>301012</commentid>
    <comment_count>14</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2010-10-28 05:54:49 -0700</bug_when>
    <thetext>Niwa-san, Kent-san, thank you for taking a look!

(In reply to comment #12)
&gt; (From update of attachment 71978 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=71978&amp;action=review
&gt; 
&gt; &gt; WebCore/WebCore.xcodeproj/project.pbxproj:-21238
&gt; &gt; -			developmentRegion = English;
&gt; 
&gt; Do not delete this line.  You need the latest Xcode to avoid the deletion.
Recovered. And installed latest XCode...

&gt; 
&gt; &gt; WebCore/editing/Editor.cpp:1661
&gt; &gt; +    TextCheckingHelper checking(client(), spellingSearchRange);
&gt; 
&gt; The name &quot;checking&quot; looks curious to me.  Should it be &quot;checkingHelper&quot; or &quot;checker&quot;?
&gt; 
Agreed, renamed to checker

&gt; &gt;&gt; WebCore/editing/TextCheckingHelper.cpp:438
&gt; &gt;&gt; +{
&gt; &gt; 
&gt; &gt; Will it be possible to split this function into two one that checks grammar and another that doesn&apos;t check grammar?
&gt; 
&gt; I think it will be done in the next step.
+1 for Kent-san, there is a good number of refactoring ideas around.

&gt; 
&gt; &gt; WebCore/editing/TextCheckingHelper.h:38
&gt; &gt; +    int findFirstGrammarDetail(const Vector&lt;GrammarDetail&gt;&amp; grammarDetails, int badGrammarPhraseLocation, int /*badGrammarPhraseLength*/, int startOffset, int endOffset, bool markAll);
&gt; 
&gt; No need to comment out the argument name.
Removed the comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>301311</commentid>
    <comment_count>15</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-10-28 13:46:29 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; &gt; &gt;&gt; WebCore/editing/TextCheckingHelper.cpp:438
&gt; &gt; &gt;&gt; +{
&gt; &gt; &gt; 
&gt; &gt; &gt; Will it be possible to split this function into two one that checks grammar and another that doesn&apos;t check grammar?
&gt; &gt; 
&gt; &gt; I think it will be done in the next step.
&gt; +1 for Kent-san, there is a good number of refactoring ideas around.

Ok. SGTM.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>301602</commentid>
    <comment_count>16</comment_count>
      <attachid>72175</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2010-10-28 23:34:49 -0700</bug_when>
    <thetext>Comment on attachment 72175
Patch

ok</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>301610</commentid>
    <comment_count>17</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2010-10-28 23:59:07 -0700</bug_when>
    <thetext>Committed r70847: &lt;http://trac.webkit.org/changeset/70847&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>302243</commentid>
    <comment_count>18</comment_count>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2010-10-29 20:07:25 -0700</bug_when>
    <thetext>This has introduced crashes in tip of tree that appear to occur whenever typing in a text field.  See bug 48708.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>302251</commentid>
    <comment_count>19</comment_count>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2010-10-29 20:42:57 -0700</bug_when>
    <thetext>I rolled this out in r70970.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>302519</commentid>
    <comment_count>20</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2010-10-31 18:39:11 -0700</bug_when>
    <thetext>&gt; I rolled this out in r70970.
Thanks you for taking care and I&apos;m sorry for my absence...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>302562</commentid>
    <comment_count>21</comment_count>
      <attachid>72485</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2010-10-31 23:06:36 -0700</bug_when>
    <thetext>Created attachment 72485
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>302564</commentid>
    <comment_count>22</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2010-10-31 23:11:09 -0700</bug_when>
    <thetext>The original patch misplaced some parameters when replacing wit TextSpellingHelper
(on Editor::advanceToNextMisspelling()) and the latest patch fixed it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>302565</commentid>
    <comment_count>23</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2010-10-31 23:17:27 -0700</bug_when>
    <thetext>The original patch misplaced some parameters when replacing wit TextSpellingHelper
(on Editor::advanceToNextMisspelling()) and the latest patch fixed it.

Unfortunately, the crash isn&apos;t reproduceable on current release of Mac OS X because
it only happens in conjunction with &quot;autocorrection panel&quot; feature.
It might be OK just to re-land and watch what happens.
But a quick check by Apple folks for Bug 48708 would be preferable, of course.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>302568</commentid>
    <comment_count>24</comment_count>
      <attachid>72486</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2010-10-31 23:22:04 -0700</bug_when>
    <thetext>Created attachment 72486
Added an AllInOne entry for windows build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>302570</commentid>
    <comment_count>25</comment_count>
      <attachid>72486</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2010-10-31 23:29:59 -0700</bug_when>
    <thetext>Comment on attachment 72486
Added an AllInOne entry for windows build.

ok, please check if this patch works manually :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>302572</commentid>
    <comment_count>26</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2010-10-31 23:36:18 -0700</bug_when>
    <thetext>Committed r71009: &lt;http://trac.webkit.org/changeset/71009&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>302765</commentid>
    <comment_count>27</comment_count>
    <who name="Jia Pu">jiapu.mail</who>
    <bug_when>2010-11-01 10:25:45 -0700</bug_when>
    <thetext>
&gt; Unfortunately, the crash isn&apos;t reproduceable on current release of Mac OS X because
&gt; it only happens in conjunction with &quot;autocorrection panel&quot; feature.
&gt; It might be OK just to re-land and watch what happens.
&gt; But a quick check by Apple folks for Bug 48708 would be preferable, of course.

I got undefined symbols when trying to build r71009 on the Mac OS X with autocorrection panel feature.

Undefined symbols:
  &quot;__ZN7WebCore12SpellChecker18requestCheckingForEPNS_4NodeE&quot;, referenced from:
      __ZN7WebCore6Editor28replaceSelectionWithFragmentEN3WTF10PassRefPtrINS_16DocumentFragmentEEEbbb in Editor.o
  &quot;__ZNK7WebCore12SpellChecker22canCheckAsynchronouslyEPNS_4NodeE&quot;, referenced from:
      __ZN7WebCore6Editor28replaceSelectionWithFragmentEN3WTF10PassRefPtrINS_16DocumentFragmentEEEbbb in Editor.o
  &quot;__ZN7WebCore12SpellCheckerC1EPNS_12EditorClientE&quot;, referenced from:
      __ZN7WebCore6EditorC2EPNS_5FrameE in Editor.o
  &quot;__ZN7WebCore12SpellChecker8didCheckEiRKN3WTF6VectorINS_19SpellCheckingResultELm0EEE&quot;, referenced from:
     -exported_symbol[s_list] command line option
  &quot;__ZN7WebCore12SpellCheckerD1Ev&quot;, referenced from:
      __ZN7WebCore6EditorD2Ev in Editor.o
ld: symbol(s) not found
collect2: ld returned 1 exit status</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>303154</commentid>
    <comment_count>28</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2010-11-01 18:54:51 -0700</bug_when>
    <thetext>Hi Jia, thank you for trying this.
&gt; I got undefined symbols when trying to build r71009 on the Mac OS X with autocorrection panel feature.
I suspect that you have a patch on Bug 40092 applied, which introduces WebCore::SpellChecker class.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>71864</attachid>
            <date>2010-10-26 04:16:21 -0700</date>
            <delta_ts>2010-10-26 04:18:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-48287-20101026201619.patch</filename>
            <type>text/plain</type>
            <size>74201</size>
            <attacher name="Hajime Morrita">morrita</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9XZWJDb3JlL0NNYWtlTGlzdHMu
dHh0CmluZGV4IDU4YjA3MjA4NGZkZDc4NGU2NzUxODIxZmYxMTk4ZDc1OWQ2ODEzODAuLmJkYThj
NGY2ODhjMDQzMmI0OWY1MWY4MGE5NGViYzQwZmM5OGI5M2UgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
Q01ha2VMaXN0cy50eHQKKysrIGIvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAtOTEyLDYgKzkx
Miw3IEBAIFNFVChXZWJDb3JlX1NPVVJDRVMKICAgICBlZGl0aW5nL01lcmdlSWRlbnRpY2FsRWxl
bWVudHNDb21tYW5kLmNwcAogICAgIGVkaXRpbmcvTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmNw
cAogICAgIGVkaXRpbmcvTW92ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCisgICAgZWRpdGluZy9SYW5n
ZU1hcmtlckNvbnRyb2xsZXIuY3BwCiAgICAgZWRpdGluZy9SZW1vdmVDU1NQcm9wZXJ0eUNvbW1h
bmQuY3BwCiAgICAgZWRpdGluZy9SZW1vdmVGb3JtYXRDb21tYW5kLmNwcAogICAgIGVkaXRpbmcv
UmVtb3ZlTm9kZUNvbW1hbmQuY3BwCmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dl
YkNvcmUvQ2hhbmdlTG9nCmluZGV4IDM0ODM2NDE0MjgzZjNkM2ZmOGU2MjQxNWI1ZmFlM2I2NDIz
ODFiYTkuLmFiMjRhNWZkNzM5MzY3YTI2NWI1NjQzMGZlY2MyNTJkNjE4OTNkZjMgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
NDQgQEAKKzIwMTAtMTAtMjUgIE1PUklUQSBIYWppbWUgIDxtb3JyaXRhQGdvb2dsZS5jb20+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVmYWN0b3Jp
bmc6IFNwZWxsY2hlY2tpbmcgcmVsYXRlZCBzdGF0aWMgZnVuY3Rpb25zIGNvdWxkIGZvcm0gYSBj
bGFzcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDgy
ODcKKworICAgICAgICBObyBuZXcgdGVzdHMuIEp1c3QgYSByZWZhY3RvcmluZy4KKworICAgICAg
ICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOgorICAgICAgICAq
IFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAgKiBXZWJDb3Jl
LnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgICogZWRpdGluZy9FZGl0b3IuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RWRpdG9yOjphZHZhbmNlVG9OZXh0TWlzc3BlbGxpbmcpOgorICAgICAgICAoV2ViQ29y
ZTo6RWRpdG9yOjppc1NlbGVjdGlvblVuZ3JhbW1hdGljYWwpOgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjpndWVzc2VzRm9yVW5ncmFtbWF0aWNhbFNlbGVjdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpFZGl0b3I6Omd1ZXNzZXNGb3JNaXNzcGVsbGVkT3JVbmdyYW1tYXRpY2FsU2VsZWN0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5n
VG9Qb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3NP
ckJhZEdyYW1tYXIpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjptYXJrTWlzc3BlbGxpbmdz
KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bWFya0JhZEdyYW1tYXIpOgorICAgICAgICAo
V2ViQ29yZTo6RWRpdG9yOjptYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2Vz
KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y2hhbmdlQmFja1RvUmVwbGFjZWRTdHJpbmcp
OgorICAgICAgICAqIGVkaXRpbmcvRWRpdG9yLmg6CisgICAgICAgICogZWRpdGluZy9SYW5nZU1h
cmtlckNvbnRyb2xsZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlTWFya2Vy
Q29udHJvbGxlcjo6UmFuZ2VNYXJrZXJDb250cm9sbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJh
bmdlTWFya2VyQ29udHJvbGxlcjo6flJhbmdlTWFya2VyQ29udHJvbGxlcik6CisgICAgICAgIChX
ZWJDb3JlOjpSYW5nZU1hcmtlckNvbnRyb2xsZXI6OnBhcmFncmFwaEFsaWduZWRSYW5nZUZvclJh
bmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlTWFya2VyQ29udHJvbGxlcjo6ZmluZEZpcnN0
TWlzc3BlbGxpbmdJblJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlTWFya2VyQ29udHJv
bGxlcjo6ZmluZEZpcnN0TWlzc3BlbGxpbmdPckJhZEdyYW1tYXJJblJhbmdlKToKKyAgICAgICAg
KFdlYkNvcmU6OlJhbmdlTWFya2VyQ29udHJvbGxlcjo6ZmluZEZpcnN0R3JhbW1hckRldGFpbElu
UmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2VNYXJrZXJDb250cm9sbGVyOjpmaW5kRmly
c3RCYWRHcmFtbWFySW5SYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpSYW5nZU1hcmtlckNvbnRy
b2xsZXI6OmlzUmFuZ2VVbmdyYW1tYXRpY2FsKToKKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlTWFy
a2VyQ29udHJvbGxlcjo6Z3Vlc3Nlc0Zvck1pc3NwZWxsZWRPclVuZ3JhbW1hdGljYWxSYW5nZSk6
CisgICAgICAgIChXZWJDb3JlOjpSYW5nZU1hcmtlckNvbnRyb2xsZXI6Om1hcmtBbGxNaXNzcGVs
bGluZ3NJblJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlTWFya2VyQ29udHJvbGxlcjo6
bWFya0FsbEJhZEdyYW1tYXJJblJhbmdlKToKKyAgICAgICAgKiBlZGl0aW5nL1JhbmdlTWFya2Vy
Q29udHJvbGxlci5oOiBBZGRlZC4KKwogMjAxMC0xMC0yNiAgWGFuIExvcGV6ICA8eGxvcGV6QGln
YWxpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTWFydGluIFJvYmluc29uLgpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbSBiL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KaW5k
ZXggOGMyMDRhYTFhZjgyMWMwYjkyMGI3ODk4NzQ5MTU1NmExMjhiZWZmYS4uMjhiZWRkZjIxZTIw
ZTgyMDQ5NGU4MWIwODg2YzZlZTU2MDE5NjI4OSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9HTlVtYWtl
ZmlsZS5hbQorKysgYi9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCkBAIC0xMzI1LDcgKzEzMjUsOSBA
QCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvZWRpdGluZy9Nb2RpZnlTZWxlY3Rpb25M
aXN0TGV2ZWwuY3BwIFwKIAlXZWJDb3JlL2VkaXRpbmcvTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVs
LmggXAogCVdlYkNvcmUvZWRpdGluZy9Nb3ZlU2VsZWN0aW9uQ29tbWFuZC5jcHAgXAotCVdlYkNv
cmUvZWRpdGluZy9Nb3ZlU2VsZWN0aW9uQ29tbWFuZC5oIFwKKwlXZWJDb3JlL3dlZGl0aW5nL01v
dmVTZWxlY3Rpb25Db21tYW5kLmggXAorCVdlYkNvcmUvZWRpdGluZy9SYW5nZU1hcmtlckNvbnRy
b2xsZXIuY3BwIFwKKwlXZWJDb3JlL2VkaXRpbmcvUmFuZ2VNYXJrZXJDb250cm9sbGVyLmggXAog
CVdlYkNvcmUvZWRpdGluZy9SZW1vdmVDU1NQcm9wZXJ0eUNvbW1hbmQuY3BwIFwKIAlXZWJDb3Jl
L2VkaXRpbmcvUmVtb3ZlQ1NTUHJvcGVydHlDb21tYW5kLmggXAogCVdlYkNvcmUvZWRpdGluZy9S
ZW1vdmVGb3JtYXRDb21tYW5kLmNwcCBcCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUuZ3lw
aSBiL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDFiOGNhYmVmZWEwNjk2ZGYyOWY4NzBhZDQz
YjNiZWJkYTg4MTA5OTIuLjY5NzhkYzg3ZDNjY2VjZGI1ZmI4NGM3YTYzZDE5ZmY0MjMxNGNiNGYg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1dlYkNvcmUvV2ViQ29yZS5n
eXBpCkBAIC0xNDA3LDYgKzE0MDcsOCBAQAogICAgICAgICAgICAgJ2VkaXRpbmcvTW9kaWZ5U2Vs
ZWN0aW9uTGlzdExldmVsLmgnLAogICAgICAgICAgICAgJ2VkaXRpbmcvTW92ZVNlbGVjdGlvbkNv
bW1hbmQuY3BwJywKICAgICAgICAgICAgICdlZGl0aW5nL01vdmVTZWxlY3Rpb25Db21tYW5kLmgn
LAorICAgICAgICAgICAgJ2VkaXRpbmcvUmFuZ2VNYXJrZXJDb250cm9sbGVyLmNwcCcsCisgICAg
ICAgICAgICAnZWRpdGluZy9SYW5nZU1hcmtlckNvbnRyb2xsZXIuaCcsCiAgICAgICAgICAgICAn
ZWRpdGluZy9SZW1vdmVDU1NQcm9wZXJ0eUNvbW1hbmQuY3BwJywKICAgICAgICAgICAgICdlZGl0
aW5nL1JlbW92ZUNTU1Byb3BlcnR5Q29tbWFuZC5oJywKICAgICAgICAgICAgICdlZGl0aW5nL1Jl
bW92ZUZvcm1hdENvbW1hbmQuY3BwJywKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5wcm8g
Yi9XZWJDb3JlL1dlYkNvcmUucHJvCmluZGV4IDlmYjJmZGRkMDJjZWU0NjI3MWYzNjc4OTg0NTIz
YzJkYWJhYmFiNDEuLjQ4OTAxNWRjNDFkOTZmNmI5YzhhNTBlMzAwMzVlMDY1ZGRhYzZhYTQgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5wcm8KKysrIGIvV2ViQ29yZS9XZWJDb3JlLnBybwpA
QCAtODAyLDYgKzgwMiw3IEBAIFNPVVJDRVMgKz0gXAogICAgIGVkaXRpbmcvTWVyZ2VJZGVudGlj
YWxFbGVtZW50c0NvbW1hbmQuY3BwIFwKICAgICBlZGl0aW5nL01vZGlmeVNlbGVjdGlvbkxpc3RM
ZXZlbC5jcHAgXAogICAgIGVkaXRpbmcvTW92ZVNlbGVjdGlvbkNvbW1hbmQuY3BwIFwKKyAgICBl
ZGl0aW5nL1JhbmdlTWFya2VyQ29udHJvbGxlci5jcHAgXAogICAgIGVkaXRpbmcvUmVtb3ZlQ1NT
UHJvcGVydHlDb21tYW5kLmNwcCBcCiAgICAgZWRpdGluZy9SZW1vdmVGb3JtYXRDb21tYW5kLmNw
cCBcCiAgICAgZWRpdGluZy9SZW1vdmVOb2RlQ29tbWFuZC5jcHAgXApkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvaiBiL1dlYkNvcmUvV2ViQ29yZS52Y3By
b2ovV2ViQ29yZS52Y3Byb2oKaW5kZXggZGM3ZDJkMDRhYzE4N2ZmNjY0ZGE2MTZhZTk3ZjE2ZGQ3
OTJhZTE3Zi4uNTRhNmJiYzM2YjBmMzQzMzM4NjFmNmE3NDQ4OWVjODAwOTY4YjM2ZSAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagorKysgYi9XZWJDb3Jl
L1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCkBAIC00Njg2Nyw2ICs0Njg2Nyw2MiBAQAog
CQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxlZGl0
aW5nXFJhbmdlTWFya2VyQ29udHJvbGxlci5jcHAiDQorCQkJCT4NCisJCQkJPEZpbGVDb25maWd1
cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCisJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxk
PSJ0cnVlIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJU
b29sIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25m
aWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KKwkJCQkJRXhjbHVkZWRGcm9t
QnVpbGQ9InRydWUiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21w
aWxlclRvb2wiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8Rmls
ZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnX0ludGVybmFsfFdpbjMyIg0KKwkJCQkJ
RXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5h
bWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9u
Pg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnX0NhaXJvfFdpbjMy
Ig0KKwkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0K
KwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25m
aWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2Vf
Q2Fpcm98V2luMzIiDQorCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSINCisJCQkJCT4NCisJ
CQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCS8+DQorCQkJ
CTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFt
ZT0iRGVidWdfQWxsfFdpbjMyIg0KKwkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiDQorCQkJ
CQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkv
Pg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXGVkaXRpbmdcUmFuZ2VNYXJrZXJDb250cm9sbGVyLmgiDQorCQkJ
CT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxlZGl0aW5n
XFJlbW92ZUNTU1Byb3BlcnR5Q29tbWFuZC5jcHAiDQogCQkJCT4NCiAJCQkJPEZpbGVDb25maWd1
cmF0aW9uDQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2ogYi9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAz
MzZjNzg2MTVhMGE4YWJmNGI2Yzg2ODg1YzdiYmZiOWI1MDEzMDRjLi5iMzQwNDg4MjE4ZGZmNjMy
ZGIyNTRhZWQ0NTQ2MDkwNDE0MDA0ZjdiIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagpAQCAtMzA1Miw2ICszMDUyLDggQEAKIAkJQTdEM0M1MjQwQjU3NkI0QjAw
MkNBNDUwIC8qIFBhc3RlYm9hcmRIZWxwZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEE3RDNDNTIzMEI1NzZCNEIwMDJDQTQ1MCAvKiBQYXN0ZWJvYXJk
SGVscGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJQTdENkIzNDkwRjYxMTA0NTAwQjc5RkQxIC8qIFdvcmtlclNjcmlwdExvYWRlci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdENkIzNDcwRjYxMTA0
NTAwQjc5RkQxIC8qIFdvcmtlclNjcmlwdExvYWRlci5oICovOyB9OwogCQlBN0Q2QjM0QTBGNjEx
MDQ1MDBCNzlGRDEgLyogV29ya2VyU2NyaXB0TG9hZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3RDZCMzQ4MEY2MTEwNDUwMEI3OUZEMSAvKiBX
b3JrZXJTY3JpcHRMb2FkZXIuY3BwICovOyB9OworCQlBN0RCRjhERDEyNzY5MTlDMDA2QjYwMDgg
LyogUmFuZ2VNYXJrZXJDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEE3REJGOERCMTI3NjkxOUMwMDZCNjAwOCAvKiBSYW5nZU1hcmtl
ckNvbnRyb2xsZXIuY3BwICovOyB9OworCQlBN0RCRjhERTEyNzY5MTlDMDA2QjYwMDggLyogUmFu
Z2VNYXJrZXJDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBN0RCRjhEQzEyNzY5MTlDMDA2QjYwMDggLyogUmFuZ2VNYXJrZXJDb250cm9s
bGVyLmggKi87IH07CiAJCUE3RjMzOEEzMTFDMEVGQ0EwMEEzMjBBNyAvKiBTaGFkb3dFbGVtZW50
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3RjMz
OEExMTFDMEVGQ0EwMEEzMjBBNyAvKiBTaGFkb3dFbGVtZW50LmNwcCAqLzsgfTsKIAkJQTdGMzM4
QTQxMUMwRUZDQTAwQTMyMEE3IC8qIFNoYWRvd0VsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3RjMzOEEyMTFDMEVGQ0EwMEEzMjBBNyAvKiBT
aGFkb3dFbGVtZW50LmggKi87IH07CiAJCUE4MDlGMTQ3MEI3Mzc5M0EwMDJFNEQ3RiAvKiBSZW5k
ZXJTVkdHcmFkaWVudFN0b3AuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEE4MDlGMTQ1MEI3Mzc5M0EwMDJFNEQ3RiAvKiBSZW5kZXJTVkdHcmFkaWVudFN0
b3AuaCAqLzsgfTsKQEAgLTkxMjEsNiArOTEyMyw4IEBACiAJCUE3RDNDNTIzMEI1NzZCNEIwMDJD
QTQ1MCAvKiBQYXN0ZWJvYXJkSGVscGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFBhc3RlYm9hcmRIZWxwZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTdE
NkIzNDcwRjYxMTA0NTAwQjc5RkQxIC8qIFdvcmtlclNjcmlwdExvYWRlci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBXb3JrZXJTY3JpcHRMb2FkZXIuaDsgcGF0aCA9IHdvcmtl
cnMvV29ya2VyU2NyaXB0TG9hZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3
RDZCMzQ4MEY2MTEwNDUwMEI3OUZEMSAvKiBXb3JrZXJTY3JpcHRMb2FkZXIuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV29ya2VyU2NyaXB0TG9hZGVyLmNwcDsgcGF0
aCA9IHdvcmtlcnMvV29ya2VyU2NyaXB0TG9hZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJQTdEQkY4REIxMjc2OTE5QzAwNkI2MDA4IC8qIFJhbmdlTWFya2VyQ29udHJvbGxl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSYW5nZU1hcmtlckNv
bnRyb2xsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBN0RCRjhEQzEyNzY5
MTlDMDA2QjYwMDggLyogUmFuZ2VNYXJrZXJDb250cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFJhbmdlTWFya2VyQ29udHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlBN0YzMzhBMTExQzBFRkNBMDBBMzIwQTcgLyogU2hhZG93RWxlbWVudC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTaGFkb3dFbGVtZW50LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTdGMzM4QTIxMUMwRUZDQTAwQTMyMEE3
IC8qIFNoYWRvd0VsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2hh
ZG93RWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBODA5RjE0NTBCNzM3
OTNBMDAyRTREN0YgLyogUmVuZGVyU1ZHR3JhZGllbnRTdG9wLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFJlbmRlclNWR0dyYWRpZW50U3RvcC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtMTQ0ODUsNiArMTQ0ODksOCBAQAogCQkJCUM2RDc0QUQzMDlBQTI4MkUw
MDBCMEE1MiAvKiBNb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuaCAqLywKIAkJCQk5MzMwOURBQzA5
OUU2NDkxMDA1NkU1ODEgLyogTW92ZVNlbGVjdGlvbkNvbW1hbmQuY3BwICovLAogCQkJCTkzMzA5
REFEMDk5RTY0OTEwMDU2RTU4MSAvKiBNb3ZlU2VsZWN0aW9uQ29tbWFuZC5oICovLAorCQkJCUE3
REJGOERCMTI3NjkxOUMwMDZCNjAwOCAvKiBSYW5nZU1hcmtlckNvbnRyb2xsZXIuY3BwICovLAor
CQkJCUE3REJGOERDMTI3NjkxOUMwMDZCNjAwOCAvKiBSYW5nZU1hcmtlckNvbnRyb2xsZXIuaCAq
LywKIAkJCQk5MzMwOURCMTA5OUU2NDkxMDA1NkU1ODEgLyogUmVtb3ZlQ1NTUHJvcGVydHlDb21t
YW5kLmNwcCAqLywKIAkJCQk5MzMwOURCMjA5OUU2NDkxMDA1NkU1ODEgLyogUmVtb3ZlQ1NTUHJv
cGVydHlDb21tYW5kLmggKi8sCiAJCQkJRDA2QzBEOEUwQ0ZEMTE0NjAwNjVGNDNGIC8qIFJlbW92
ZUZvcm1hdENvbW1hbmQuY3BwICovLApAQCAtMjA0MzYsNiArMjA0NDIsNyBAQAogCQkJCUY1NUIz
RENDMTI1MUYxMkQwMDNFRjI2OSAvKiBSYWRpb0lucHV0VHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJOTNGMTk5MTgwODI0NUU1OTAwMUU5QUJDIC8qIFJhbmdlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk5M0Q5RDUzQzBEQTI3RTE4MDA3NzIxNkMgLyogUmFuZ2VCb3VuZGFyeVBvaW50LmggaW4gSGVh
ZGVycyAqLywKKwkJCQlBN0RCRjhERTEyNzY5MTlDMDA2QjYwMDggLyogUmFuZ2VNYXJrZXJDb250
cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlEMjNDQTU2QzBBQjBFQjhEMDA1MTA4QTUgLyog
UmFuZ2VFeGNlcHRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUY1NUIzRENFMTI1MUYxMkQwMDNF
RjI2OSAvKiBSYW5nZUlucHV0VHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTg0RDgyN0MxMUQz
MzNFRDAwOTcyOTkwIC8qIFJhd0RhdGFEb2N1bWVudFBhcnNlci5oIGluIEhlYWRlcnMgKi8sCkBA
IC0yMTIzNSw3ICsyMTI0Miw2IEBACiAJCQlpc2EgPSBQQlhQcm9qZWN0OwogCQkJYnVpbGRDb25m
aWd1cmF0aW9uTGlzdCA9IDE0OUMyODQzMDg5MDJCMTEwMDhBOUVGQyAvKiBCdWlsZCBjb25maWd1
cmF0aW9uIGxpc3QgZm9yIFBCWFByb2plY3QgIldlYkNvcmUiICovOwogCQkJY29tcGF0aWJpbGl0
eVZlcnNpb24gPSAiWGNvZGUgMi40IjsKLQkJCWRldmVsb3BtZW50UmVnaW9uID0gRW5nbGlzaDsK
IAkJCWhhc1NjYW5uZWRGb3JFbmNvZGluZ3MgPSAxOwogCQkJa25vd25SZWdpb25zID0gKAogCQkJ
CUVuZ2xpc2gsCkBAIC0yMzA3Niw2ICsyMzA4Miw3IEBACiAJCQkJNTUwQTBCQzkwODVGNjAzOTAw
NzM1M0Q2IC8qIFF1YWxpZmllZE5hbWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRjU1QjNEQ0Ix
MjUxRjEyRDAwM0VGMjY5IC8qIFJhZGlvSW5wdXRUeXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTkzRjE5QUI5MDgyNDVFNTkwMDFFOUFCQyAvKiBSYW5nZS5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQlBN0RCRjhERDEyNzY5MTlDMDA2QjYwMDggLyogUmFuZ2VNYXJrZXJDb250cm9sbGVyLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUY1NUIzRENEMTI1MUYxMkQwMDNFRjI2OSAvKiBSYW5nZUlucHV0
VHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NTAzMUI0QjBBNDRFRkM3MDBGOTkyRTAgLyog
UmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjJDM0RBMkMw
RDAwNkMxRDAwRUY2RjI2IC8qIFJlZ3VsYXJFeHByZXNzaW9uLmNwcCBpbiBTb3VyY2VzICovLApk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAgYi9XZWJDb3JlL2VkaXRpbmcv
RWRpdG9yLmNwcAppbmRleCA0ZDZkMjU4MzA3YWEwYjAwMzZiMWI5ZWRjZGYwYWY0YTM0NzJkMmZm
Li4xYzgwYmI2YTAzNTRkMjRkZGUxMDBkYzFlZjgwNGQ0MGYzNGExYWM5IDEwMDY0NAotLS0gYS9X
ZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAorKysgYi9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNw
cApAQCAtNjIsNiArNjIsNyBAQAogI2luY2x1ZGUgIk5vZGVMaXN0LmgiCiAjaW5jbHVkZSAiUGFn
ZS5oIgogI2luY2x1ZGUgIlBhc3RlYm9hcmQuaCIKKyNpbmNsdWRlICJSYW5nZU1hcmtlckNvbnRy
b2xsZXIuaCIKICNpbmNsdWRlICJSZW1vdmVGb3JtYXRDb21tYW5kLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyQmxvY2suaCIKICNpbmNsdWRlICJSZW5kZXJQYXJ0LmgiCkBAIC0xNjQxLDMyOCArMTY0Miw2
IEBAIHZvaWQgRWRpdG9yOjpsZWFyblNwZWxsaW5nKCkKICAgICBjbGllbnQoKS0+bGVhcm5Xb3Jk
KHRleHQpOwogfQogCi1zdGF0aWMgU3RyaW5nIGZpbmRGaXJzdE1pc3NwZWxsaW5nSW5SYW5nZShF
ZGl0b3JDbGllbnQqIGNsaWVudCwgUmFuZ2UqIHNlYXJjaFJhbmdlLCBpbnQmIGZpcnN0TWlzc3Bl
bGxpbmdPZmZzZXQsIGJvb2wgbWFya0FsbCwgUmVmUHRyPFJhbmdlPiYgZmlyc3RNaXNzcGVsbGlu
Z1JhbmdlKQotewotICAgIEFTU0VSVF9BUkcoY2xpZW50LCBjbGllbnQpOwotICAgIEFTU0VSVF9B
Ukcoc2VhcmNoUmFuZ2UsIHNlYXJjaFJhbmdlKTsKLSAgICAKLSAgICBXb3JkQXdhcmVJdGVyYXRv
ciBpdChzZWFyY2hSYW5nZSk7Ci0gICAgZmlyc3RNaXNzcGVsbGluZ09mZnNldCA9IDA7Ci0gICAg
Ci0gICAgU3RyaW5nIGZpcnN0TWlzc3BlbGxpbmc7Ci0gICAgaW50IGN1cnJlbnRDaHVua09mZnNl
dCA9IDA7Ci0KLSAgICB3aGlsZSAoIWl0LmF0RW5kKCkpIHsKLSAgICAgICAgY29uc3QgVUNoYXIq
IGNoYXJzID0gaXQuY2hhcmFjdGVycygpOwotICAgICAgICBpbnQgbGVuID0gaXQubGVuZ3RoKCk7
Ci0gICAgICAgIAotICAgICAgICAvLyBTa2lwIHNvbWUgd29yayBmb3Igb25lLXNwYWNlLWNoYXIg
aHVua3MKLSAgICAgICAgaWYgKCEobGVuID09IDEgJiYgY2hhcnNbMF0gPT0gJyAnKSkgewotICAg
ICAgICAgICAgCi0gICAgICAgICAgICBpbnQgbWlzc3BlbGxpbmdMb2NhdGlvbiA9IC0xOwotICAg
ICAgICAgICAgaW50IG1pc3NwZWxsaW5nTGVuZ3RoID0gMDsKLSAgICAgICAgICAgIGNsaWVudC0+
Y2hlY2tTcGVsbGluZ09mU3RyaW5nKGNoYXJzLCBsZW4sICZtaXNzcGVsbGluZ0xvY2F0aW9uLCAm
bWlzc3BlbGxpbmdMZW5ndGgpOwotCi0gICAgICAgICAgICAvLyA1NDkwNjI3IHNob3dzIHRoYXQg
dGhlcmUgd2FzIHNvbWUgY29kZSBwYXRoIGhlcmUgd2hlcmUgdGhlIFN0cmluZyBjb25zdHJ1Y3Rv
ciBiZWxvdyBjcmFzaGVzLgotICAgICAgICAgICAgLy8gV2UgZG9uJ3Qga25vdyBleGFjdGx5IHdo
YXQgY29tYmluYXRpb24gb2YgYmFkIGlucHV0IGNhdXNlZCB0aGlzLCBzbyB3ZSdyZSBtYWtpbmcg
dGhpcyBtdWNoCi0gICAgICAgICAgICAvLyBtb3JlIHJvYnVzdCBhZ2FpbnN0IGJhZCBpbnB1dCBv
biByZWxlYXNlIGJ1aWxkcy4KLSAgICAgICAgICAgIEFTU0VSVChtaXNzcGVsbGluZ0xlbmd0aCA+
PSAwKTsKLSAgICAgICAgICAgIEFTU0VSVChtaXNzcGVsbGluZ0xvY2F0aW9uID49IC0xKTsKLSAg
ICAgICAgICAgIEFTU0VSVCghbWlzc3BlbGxpbmdMZW5ndGggfHwgbWlzc3BlbGxpbmdMb2NhdGlv
biA+PSAwKTsKLSAgICAgICAgICAgIEFTU0VSVChtaXNzcGVsbGluZ0xvY2F0aW9uIDwgbGVuKTsK
LSAgICAgICAgICAgIEFTU0VSVChtaXNzcGVsbGluZ0xlbmd0aCA8PSBsZW4pOwotICAgICAgICAg
ICAgQVNTRVJUKG1pc3NwZWxsaW5nTG9jYXRpb24gKyBtaXNzcGVsbGluZ0xlbmd0aCA8PSBsZW4p
OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAobWlzc3BlbGxpbmdMb2NhdGlvbiA+PSAw
ICYmIG1pc3NwZWxsaW5nTGVuZ3RoID4gMCAmJiBtaXNzcGVsbGluZ0xvY2F0aW9uIDwgbGVuICYm
IG1pc3NwZWxsaW5nTGVuZ3RoIDw9IGxlbiAmJiBtaXNzcGVsbGluZ0xvY2F0aW9uICsgbWlzc3Bl
bGxpbmdMZW5ndGggPD0gbGVuKSB7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
Ly8gQ29tcHV0ZSByYW5nZSBvZiBtaXNzcGVsbGVkIHdvcmQKLSAgICAgICAgICAgICAgICBSZWZQ
dHI8UmFuZ2U+IG1pc3NwZWxsaW5nUmFuZ2UgPSBUZXh0SXRlcmF0b3I6OnN1YnJhbmdlKHNlYXJj
aFJhbmdlLCBjdXJyZW50Q2h1bmtPZmZzZXQgKyBtaXNzcGVsbGluZ0xvY2F0aW9uLCBtaXNzcGVs
bGluZ0xlbmd0aCk7Ci0KLSAgICAgICAgICAgICAgICAvLyBSZW1lbWJlciBmaXJzdC1lbmNvdW50
ZXJlZCBtaXNzcGVsbGluZyBhbmQgaXRzIG9mZnNldC4KLSAgICAgICAgICAgICAgICBpZiAoIWZp
cnN0TWlzc3BlbGxpbmcpIHsKLSAgICAgICAgICAgICAgICAgICAgZmlyc3RNaXNzcGVsbGluZ09m
ZnNldCA9IGN1cnJlbnRDaHVua09mZnNldCArIG1pc3NwZWxsaW5nTG9jYXRpb247Ci0gICAgICAg
ICAgICAgICAgICAgIGZpcnN0TWlzc3BlbGxpbmcgPSBTdHJpbmcoY2hhcnMgKyBtaXNzcGVsbGlu
Z0xvY2F0aW9uLCBtaXNzcGVsbGluZ0xlbmd0aCk7Ci0gICAgICAgICAgICAgICAgICAgIGZpcnN0
TWlzc3BlbGxpbmdSYW5nZSA9IG1pc3NwZWxsaW5nUmFuZ2U7Ci0gICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgLy8gU3RvcmUgbWFya2VyIGZvciBtaXNzcGVsbGVkIHdvcmQuCi0g
ICAgICAgICAgICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgICAgICAgICAgICAgbWlz
c3BlbGxpbmdSYW5nZS0+c3RhcnRDb250YWluZXIoZWMpLT5kb2N1bWVudCgpLT5tYXJrZXJzKCkt
PmFkZE1hcmtlcihtaXNzcGVsbGluZ1JhbmdlLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxp
bmcpOwotICAgICAgICAgICAgICAgIEFTU0VSVCghZWMpOwotCi0gICAgICAgICAgICAgICAgLy8g
QmFpbCBvdXQgaWYgd2UncmUgbWFya2luZyBvbmx5IHRoZSBmaXJzdCBtaXNzcGVsbGluZywgYW5k
IG5vdCBhbGwgaW5zdGFuY2VzLgotICAgICAgICAgICAgICAgIGlmICghbWFya0FsbCkKLSAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAg
Ci0gICAgICAgIGN1cnJlbnRDaHVua09mZnNldCArPSBsZW47Ci0gICAgICAgIGl0LmFkdmFuY2Uo
KTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGZpcnN0TWlzc3BlbGxpbmc7Ci19Ci0KLSNpZm5k
ZWYgQlVJTERJTkdfT05fVElHRVIKLQotc3RhdGljIFBhc3NSZWZQdHI8UmFuZ2U+IHBhcmFncmFw
aEFsaWduZWRSYW5nZUZvclJhbmdlKFJhbmdlKiBhcmJpdHJhcnlSYW5nZSwgaW50JiBvZmZzZXRJ
bnRvUGFyYWdyYXBoQWxpZ25lZFJhbmdlLCBTdHJpbmcmIHBhcmFncmFwaFN0cmluZykKLXsKLSAg
ICBBU1NFUlRfQVJHKGFyYml0cmFyeVJhbmdlLCBhcmJpdHJhcnlSYW5nZSk7Ci0gICAgCi0gICAg
RXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgCi0gICAgLy8gRXhwYW5kIHJhbmdlIHRvIHBhcmFn
cmFwaCBib3VuZGFyaWVzCi0gICAgUmVmUHRyPFJhbmdlPiBwYXJhZ3JhcGhSYW5nZSA9IGFyYml0
cmFyeVJhbmdlLT5jbG9uZVJhbmdlKGVjKTsKLSAgICBzZXRTdGFydChwYXJhZ3JhcGhSYW5nZS5n
ZXQoKSwgc3RhcnRPZlBhcmFncmFwaChhcmJpdHJhcnlSYW5nZS0+c3RhcnRQb3NpdGlvbigpKSk7
Ci0gICAgc2V0RW5kKHBhcmFncmFwaFJhbmdlLmdldCgpLCBlbmRPZlBhcmFncmFwaChhcmJpdHJh
cnlSYW5nZS0+ZW5kUG9zaXRpb24oKSkpOwotICAgIAotICAgIC8vIENvbXB1dGUgb2Zmc2V0IGZy
b20gc3RhcnQgb2YgZXhwYW5kZWQgcmFuZ2UgdG8gc3RhcnQgb2Ygb3JpZ2luYWwgcmFuZ2UKLSAg
ICBSZWZQdHI8UmFuZ2U+IG9mZnNldEFzUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKHBhcmFncmFwaFJh
bmdlLT5zdGFydENvbnRhaW5lcihlYyktPmRvY3VtZW50KCksIHBhcmFncmFwaFJhbmdlLT5zdGFy
dFBvc2l0aW9uKCksIGFyYml0cmFyeVJhbmdlLT5zdGFydFBvc2l0aW9uKCkpOwotICAgIG9mZnNl
dEludG9QYXJhZ3JhcGhBbGlnbmVkUmFuZ2UgPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKG9m
ZnNldEFzUmFuZ2UuZ2V0KCkpOwotICAgIAotICAgIC8vIEZpbGwgaW4gb3V0IHBhcmFtZXRlciB3
aXRoIHN0cmluZyByZXByZXNlbnRpbmcgZW50aXJlIHBhcmFncmFwaCByYW5nZS4KLSAgICAvLyBT
b21lZGF5IHdlIG1pZ2h0IGhhdmUgYSBjYWxsZXIgdGhhdCBkb2Vzbid0IHVzZSB0aGlzLCBidXQg
Zm9yIG5vdyBhbGwgY2FsbGVycyBkby4KLSAgICBwYXJhZ3JhcGhTdHJpbmcgPSBwbGFpblRleHQo
cGFyYWdyYXBoUmFuZ2UuZ2V0KCkpOwotCi0gICAgcmV0dXJuIHBhcmFncmFwaFJhbmdlOwotfQot
Ci1zdGF0aWMgaW50IGZpbmRGaXJzdEdyYW1tYXJEZXRhaWxJblJhbmdlKGNvbnN0IFZlY3RvcjxH
cmFtbWFyRGV0YWlsPiYgZ3JhbW1hckRldGFpbHMsIGludCBiYWRHcmFtbWFyUGhyYXNlTG9jYXRp
b24sIGludCAvKmJhZEdyYW1tYXJQaHJhc2VMZW5ndGgqLywgUmFuZ2UgKnNlYXJjaFJhbmdlLCBp
bnQgc3RhcnRPZmZzZXQsIGludCBlbmRPZmZzZXQsIGJvb2wgbWFya0FsbCkKLXsKLSAgICAvLyBG
b3VuZCBzb21lIGJhZCBncmFtbWFyLiBGaW5kIHRoZSBlYXJsaWVzdCBkZXRhaWwgcmFuZ2UgdGhh
dCBzdGFydHMgaW4gb3VyIHNlYXJjaCByYW5nZSAoaWYgYW55KS4KLSAgICAvLyBPcHRpb25hbGx5
IGFkZCBhIERvY3VtZW50TWFya2VyIGZvciBlYWNoIGRldGFpbCBpbiB0aGUgcmFuZ2UuCi0gICAg
aW50IGVhcmxpZXN0RGV0YWlsTG9jYXRpb25Tb0ZhciA9IC0xOwotICAgIGludCBlYXJsaWVzdERl
dGFpbEluZGV4ID0gLTE7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGdyYW1tYXJEZXRh
aWxzLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIGNvbnN0IEdyYW1tYXJEZXRhaWwqIGRldGFpbCA9
ICZncmFtbWFyRGV0YWlsc1tpXTsKLSAgICAgICAgQVNTRVJUKGRldGFpbC0+bGVuZ3RoID4gMCAm
JiBkZXRhaWwtPmxvY2F0aW9uID49IDApOwotICAgICAgICAKLSAgICAgICAgaW50IGRldGFpbFN0
YXJ0T2Zmc2V0SW5QYXJhZ3JhcGggPSBiYWRHcmFtbWFyUGhyYXNlTG9jYXRpb24gKyBkZXRhaWwt
PmxvY2F0aW9uOwotICAgICAgICAKLSAgICAgICAgLy8gU2tpcCB0aGlzIGRldGFpbCBpZiBpdCBz
dGFydHMgYmVmb3JlIHRoZSBvcmlnaW5hbCBzZWFyY2ggcmFuZ2UKLSAgICAgICAgaWYgKGRldGFp
bFN0YXJ0T2Zmc2V0SW5QYXJhZ3JhcGggPCBzdGFydE9mZnNldCkKLSAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICAKLSAgICAgICAgLy8gU2tpcCB0aGlzIGRldGFpbCBpZiBpdCBzdGFydHMg
YWZ0ZXIgdGhlIG9yaWdpbmFsIHNlYXJjaCByYW5nZQotICAgICAgICBpZiAoZGV0YWlsU3RhcnRP
ZmZzZXRJblBhcmFncmFwaCA+PSBlbmRPZmZzZXQpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgCi0gICAgICAgIGlmIChtYXJrQWxsKSB7Ci0gICAgICAgICAgICBSZWZQdHI8UmFuZ2U+
IGJhZEdyYW1tYXJSYW5nZSA9IFRleHRJdGVyYXRvcjo6c3VicmFuZ2Uoc2VhcmNoUmFuZ2UsIGJh
ZEdyYW1tYXJQaHJhc2VMb2NhdGlvbiAtIHN0YXJ0T2Zmc2V0ICsgZGV0YWlsLT5sb2NhdGlvbiwg
ZGV0YWlsLT5sZW5ndGgpOwotICAgICAgICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAg
ICAgICAgICBiYWRHcmFtbWFyUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKGVjKS0+ZG9jdW1lbnQoKS0+
bWFya2VycygpLT5hZGRNYXJrZXIoYmFkR3JhbW1hclJhbmdlLmdldCgpLCBEb2N1bWVudE1hcmtl
cjo6R3JhbW1hciwgZGV0YWlsLT51c2VyRGVzY3JpcHRpb24pOwotICAgICAgICAgICAgQVNTRVJU
KCFlYyk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vIFJlbWVtYmVyIHRoaXMgZGV0
YWlsIG9ubHkgaWYgaXQncyBlYXJsaWVyIHRoYW4gb3VyIGN1cnJlbnQgY2FuZGlkYXRlICh0aGUg
ZGV0YWlscyBhcmVuJ3QgaW4gYSBndWFyYW50ZWVkIG9yZGVyKQotICAgICAgICBpZiAoZWFybGll
c3REZXRhaWxJbmRleCA8IDAgfHwgZWFybGllc3REZXRhaWxMb2NhdGlvblNvRmFyID4gZGV0YWls
LT5sb2NhdGlvbikgewotICAgICAgICAgICAgZWFybGllc3REZXRhaWxJbmRleCA9IGk7Ci0gICAg
ICAgICAgICBlYXJsaWVzdERldGFpbExvY2F0aW9uU29GYXIgPSBkZXRhaWwtPmxvY2F0aW9uOwot
ICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIHJldHVybiBlYXJsaWVzdERldGFpbEluZGV4Owot
fQotICAgIAotc3RhdGljIFN0cmluZyBmaW5kRmlyc3RCYWRHcmFtbWFySW5SYW5nZShFZGl0b3JD
bGllbnQqIGNsaWVudCwgUmFuZ2UqIHNlYXJjaFJhbmdlLCBHcmFtbWFyRGV0YWlsJiBvdXRHcmFt
bWFyRGV0YWlsLCBpbnQmIG91dEdyYW1tYXJQaHJhc2VPZmZzZXQsIGJvb2wgbWFya0FsbCkKLXsK
LSAgICBBU1NFUlRfQVJHKGNsaWVudCwgY2xpZW50KTsKLSAgICBBU1NFUlRfQVJHKHNlYXJjaFJh
bmdlLCBzZWFyY2hSYW5nZSk7Ci0gICAgCi0gICAgLy8gSW5pdGlhbGl6ZSBvdXQgcGFyYW1ldGVy
czsgdGhlc2Ugd2lsbCBiZSB1cGRhdGVkIGlmIHdlIGZpbmQgc29tZXRoaW5nIHRvIHJldHVybi4K
LSAgICBvdXRHcmFtbWFyRGV0YWlsLmxvY2F0aW9uID0gLTE7Ci0gICAgb3V0R3JhbW1hckRldGFp
bC5sZW5ndGggPSAwOwotICAgIG91dEdyYW1tYXJEZXRhaWwuZ3Vlc3Nlcy5jbGVhcigpOwotICAg
IG91dEdyYW1tYXJEZXRhaWwudXNlckRlc2NyaXB0aW9uID0gIiI7Ci0gICAgb3V0R3JhbW1hclBo
cmFzZU9mZnNldCA9IDA7Ci0gICAgCi0gICAgU3RyaW5nIGZpcnN0QmFkR3JhbW1hclBocmFzZTsK
LQotICAgIC8vIEV4cGFuZCB0aGUgc2VhcmNoIHJhbmdlIHRvIGVuY29tcGFzcyBlbnRpcmUgcGFy
YWdyYXBocywgc2luY2UgZ3JhbW1hciBjaGVja2luZyBuZWVkcyB0aGF0IG11Y2ggY29udGV4dC4K
LSAgICAvLyBEZXRlcm1pbmUgdGhlIGNoYXJhY3RlciBvZmZzZXQgZnJvbSB0aGUgc3RhcnQgb2Yg
dGhlIHBhcmFncmFwaCB0byB0aGUgc3RhcnQgb2YgdGhlIG9yaWdpbmFsIHNlYXJjaCByYW5nZSwK
LSAgICAvLyBzaW5jZSB3ZSB3aWxsIHdhbnQgdG8gaWdub3JlIHJlc3VsdHMgaW4gdGhpcyBhcmVh
LgotICAgIGludCBzZWFyY2hSYW5nZVN0YXJ0T2Zmc2V0OwotICAgIFN0cmluZyBwYXJhZ3JhcGhT
dHJpbmc7Ci0gICAgUmVmUHRyPFJhbmdlPiBwYXJhZ3JhcGhSYW5nZSA9IHBhcmFncmFwaEFsaWdu
ZWRSYW5nZUZvclJhbmdlKHNlYXJjaFJhbmdlLCBzZWFyY2hSYW5nZVN0YXJ0T2Zmc2V0LCBwYXJh
Z3JhcGhTdHJpbmcpOwotICAgICAgICAKLSAgICAvLyBEZXRlcm1pbmUgdGhlIGNoYXJhY3RlciBv
ZmZzZXQgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIHBhcmFncmFwaCB0byB0aGUgZW5kIG9mIHRoZSBv
cmlnaW5hbCBzZWFyY2ggcmFuZ2UsIAotICAgIC8vIHNpbmNlIHdlIHdpbGwgd2FudCB0byBpZ25v
cmUgcmVzdWx0cyBpbiB0aGlzIGFyZWEgYWxzby4KLSAgICBpbnQgc2VhcmNoUmFuZ2VFbmRPZmZz
ZXQgPSBzZWFyY2hSYW5nZVN0YXJ0T2Zmc2V0ICsgVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChz
ZWFyY2hSYW5nZSk7Ci0gICAgICAgIAotICAgIC8vIFN0YXJ0IGNoZWNraW5nIGZyb20gYmVnaW5u
aW5nIG9mIHBhcmFncmFwaCwgYnV0IHNraXAgcGFzdCByZXN1bHRzIHRoYXQgb2NjdXIgYmVmb3Jl
IHRoZSBzdGFydCBvZiB0aGUgb3JpZ2luYWwgc2VhcmNoIHJhbmdlLgotICAgIGludCBzdGFydE9m
ZnNldCA9IDA7Ci0gICAgd2hpbGUgKHN0YXJ0T2Zmc2V0IDwgc2VhcmNoUmFuZ2VFbmRPZmZzZXQp
IHsKLSAgICAgICAgVmVjdG9yPEdyYW1tYXJEZXRhaWw+IGdyYW1tYXJEZXRhaWxzOwotICAgICAg
ICBpbnQgYmFkR3JhbW1hclBocmFzZUxvY2F0aW9uID0gLTE7Ci0gICAgICAgIGludCBiYWRHcmFt
bWFyUGhyYXNlTGVuZ3RoID0gMDsKLSAgICAgICAgY2xpZW50LT5jaGVja0dyYW1tYXJPZlN0cmlu
ZyhwYXJhZ3JhcGhTdHJpbmcuY2hhcmFjdGVycygpICsgc3RhcnRPZmZzZXQsIHBhcmFncmFwaFN0
cmluZy5sZW5ndGgoKSAtIHN0YXJ0T2Zmc2V0LCBncmFtbWFyRGV0YWlscywgJmJhZEdyYW1tYXJQ
aHJhc2VMb2NhdGlvbiwgJmJhZEdyYW1tYXJQaHJhc2VMZW5ndGgpOwotICAgICAgICAKLSAgICAg
ICAgaWYgKCFiYWRHcmFtbWFyUGhyYXNlTGVuZ3RoKSB7Ci0gICAgICAgICAgICBBU1NFUlQoYmFk
R3JhbW1hclBocmFzZUxvY2F0aW9uID09IC0xKTsKLSAgICAgICAgICAgIHJldHVybiBTdHJpbmco
KTsKLSAgICAgICAgfQotCi0gICAgICAgIEFTU0VSVChiYWRHcmFtbWFyUGhyYXNlTG9jYXRpb24g
Pj0gMCk7Ci0gICAgICAgIGJhZEdyYW1tYXJQaHJhc2VMb2NhdGlvbiArPSBzdGFydE9mZnNldDsK
LQotICAgICAgICAKLSAgICAgICAgLy8gRm91bmQgc29tZSBiYWQgZ3JhbW1hci4gRmluZCB0aGUg
ZWFybGllc3QgZGV0YWlsIHJhbmdlIHRoYXQgc3RhcnRzIGluIG91ciBzZWFyY2ggcmFuZ2UgKGlm
IGFueSkuCi0gICAgICAgIGludCBiYWRHcmFtbWFySW5kZXggPSBmaW5kRmlyc3RHcmFtbWFyRGV0
YWlsSW5SYW5nZShncmFtbWFyRGV0YWlscywgYmFkR3JhbW1hclBocmFzZUxvY2F0aW9uLCBiYWRH
cmFtbWFyUGhyYXNlTGVuZ3RoLCBzZWFyY2hSYW5nZSwgc2VhcmNoUmFuZ2VTdGFydE9mZnNldCwg
c2VhcmNoUmFuZ2VFbmRPZmZzZXQsIG1hcmtBbGwpOwotICAgICAgICBpZiAoYmFkR3JhbW1hcklu
ZGV4ID49IDApIHsKLSAgICAgICAgICAgIEFTU0VSVChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oYmFk
R3JhbW1hckluZGV4KSA8IGdyYW1tYXJEZXRhaWxzLnNpemUoKSk7Ci0gICAgICAgICAgICBvdXRH
cmFtbWFyRGV0YWlsID0gZ3JhbW1hckRldGFpbHNbYmFkR3JhbW1hckluZGV4XTsKLSAgICAgICAg
fQotCi0gICAgICAgIC8vIElmIHdlIGZvdW5kIGEgZGV0YWlsIGluIHJhbmdlLCB0aGVuIHdlIGhh
dmUgZm91bmQgdGhlIGZpcnN0IGJhZCBwaHJhc2UgKHVubGVzcyB3ZSBmb3VuZCBvbmUgZWFybGll
ciBidXQKLSAgICAgICAgLy8ga2VwdCBnb2luZyBzbyB3ZSBjb3VsZCBtYXJrIGFsbCBpbnN0YW5j
ZXMpLgotICAgICAgICBpZiAoYmFkR3JhbW1hckluZGV4ID49IDAgJiYgZmlyc3RCYWRHcmFtbWFy
UGhyYXNlLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgb3V0R3JhbW1hclBocmFzZU9mZnNldCA9
IGJhZEdyYW1tYXJQaHJhc2VMb2NhdGlvbiAtIHNlYXJjaFJhbmdlU3RhcnRPZmZzZXQ7Ci0gICAg
ICAgICAgICBmaXJzdEJhZEdyYW1tYXJQaHJhc2UgPSBwYXJhZ3JhcGhTdHJpbmcuc3Vic3RyaW5n
KGJhZEdyYW1tYXJQaHJhc2VMb2NhdGlvbiwgYmFkR3JhbW1hclBocmFzZUxlbmd0aCk7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIC8vIEZvdW5kIG9uZS4gV2UncmUgZG9uZSBub3csIHVubGVz
cyB3ZSdyZSBtYXJraW5nIGVhY2ggaW5zdGFuY2UuCi0gICAgICAgICAgICBpZiAoIW1hcmtBbGwp
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBUaGVzZSBy
ZXN1bHRzIHdlcmUgYWxsIGJldHdlZW4gdGhlIHN0YXJ0IG9mIHRoZSBwYXJhZ3JhcGggYW5kIHRo
ZSBzdGFydCBvZiB0aGUgc2VhcmNoIHJhbmdlOyBsb29rCi0gICAgICAgIC8vIGJleW9uZCB0aGlz
IHBocmFzZS4KLSAgICAgICAgc3RhcnRPZmZzZXQgPSBiYWRHcmFtbWFyUGhyYXNlTG9jYXRpb24g
KyBiYWRHcmFtbWFyUGhyYXNlTGVuZ3RoOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gZmlyc3RC
YWRHcmFtbWFyUGhyYXNlOwotfQotICAgIAotI2VuZGlmIC8qIG5vdCBCVUlMRElOR19PTl9USUdF
UiAqLwotCi0jaWYgUExBVEZPUk0oTUFDKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikg
JiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkKLQotc3RhdGljIFN0cmluZyBmaW5kRmly
c3RNaXNzcGVsbGluZ09yQmFkR3JhbW1hckluUmFuZ2UoRWRpdG9yQ2xpZW50KiBjbGllbnQsIFJh
bmdlKiBzZWFyY2hSYW5nZSwgYm9vbCBjaGVja0dyYW1tYXIsIGJvb2wmIG91dElzU3BlbGxpbmcs
IGludCYgb3V0Rmlyc3RGb3VuZE9mZnNldCwgR3JhbW1hckRldGFpbCYgb3V0R3JhbW1hckRldGFp
bCkKLXsKLSAgICBBU1NFUlRfQVJHKGNsaWVudCwgY2xpZW50KTsKLSAgICBBU1NFUlRfQVJHKHNl
YXJjaFJhbmdlLCBzZWFyY2hSYW5nZSk7Ci0gICAgCi0gICAgU3RyaW5nIGZpcnN0Rm91bmRJdGVt
OwotICAgIFN0cmluZyBtaXNzcGVsbGVkV29yZDsKLSAgICBTdHJpbmcgYmFkR3JhbW1hclBocmFz
ZTsKLSAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICAKLSAgICAvLyBJbml0aWFsaXplIG91
dCBwYXJhbWV0ZXJzOyB0aGVzZSB3aWxsIGJlIHVwZGF0ZWQgaWYgd2UgZmluZCBzb21ldGhpbmcg
dG8gcmV0dXJuLgotICAgIG91dElzU3BlbGxpbmcgPSB0cnVlOwotICAgIG91dEZpcnN0Rm91bmRP
ZmZzZXQgPSAwOwotICAgIG91dEdyYW1tYXJEZXRhaWwubG9jYXRpb24gPSAtMTsKLSAgICBvdXRH
cmFtbWFyRGV0YWlsLmxlbmd0aCA9IDA7Ci0gICAgb3V0R3JhbW1hckRldGFpbC5ndWVzc2VzLmNs
ZWFyKCk7Ci0gICAgb3V0R3JhbW1hckRldGFpbC51c2VyRGVzY3JpcHRpb24gPSAiIjsKLSAgICAK
LSAgICAvLyBFeHBhbmQgdGhlIHNlYXJjaCByYW5nZSB0byBlbmNvbXBhc3MgZW50aXJlIHBhcmFn
cmFwaHMsIHNpbmNlIHRleHQgY2hlY2tpbmcgbmVlZHMgdGhhdCBtdWNoIGNvbnRleHQuCi0gICAg
Ly8gRGV0ZXJtaW5lIHRoZSBjaGFyYWN0ZXIgb2Zmc2V0IGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBw
YXJhZ3JhcGggdG8gdGhlIHN0YXJ0IG9mIHRoZSBvcmlnaW5hbCBzZWFyY2ggcmFuZ2UsCi0gICAg
Ly8gc2luY2Ugd2Ugd2lsbCB3YW50IHRvIGlnbm9yZSByZXN1bHRzIGluIHRoaXMgYXJlYS4KLSAg
ICBSZWZQdHI8UmFuZ2U+IHBhcmFncmFwaFJhbmdlID0gc2VhcmNoUmFuZ2UtPmNsb25lUmFuZ2Uo
ZWMpOwotICAgIHNldFN0YXJ0KHBhcmFncmFwaFJhbmdlLmdldCgpLCBzdGFydE9mUGFyYWdyYXBo
KHNlYXJjaFJhbmdlLT5zdGFydFBvc2l0aW9uKCkpKTsKLSAgICBpbnQgdG90YWxSYW5nZUxlbmd0
aCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgocGFyYWdyYXBoUmFuZ2UuZ2V0KCkpOwotICAg
IHNldEVuZChwYXJhZ3JhcGhSYW5nZS5nZXQoKSwgZW5kT2ZQYXJhZ3JhcGgoc2VhcmNoUmFuZ2Ut
PnN0YXJ0UG9zaXRpb24oKSkpOwotICAgIAotICAgIFJlZlB0cjxSYW5nZT4gb2Zmc2V0QXNSYW5n
ZSA9IFJhbmdlOjpjcmVhdGUocGFyYWdyYXBoUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKGVjKS0+ZG9j
dW1lbnQoKSwgcGFyYWdyYXBoUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSwgc2VhcmNoUmFuZ2UtPnN0
YXJ0UG9zaXRpb24oKSk7Ci0gICAgaW50IHNlYXJjaFJhbmdlU3RhcnRPZmZzZXQgPSBUZXh0SXRl
cmF0b3I6OnJhbmdlTGVuZ3RoKG9mZnNldEFzUmFuZ2UuZ2V0KCkpOwotICAgIGludCB0b3RhbExl
bmd0aFByb2Nlc3NlZCA9IDA7Ci0gICAgCi0gICAgYm9vbCBmaXJzdEl0ZXJhdGlvbiA9IHRydWU7
Ci0gICAgYm9vbCBsYXN0SXRlcmF0aW9uID0gZmFsc2U7Ci0gICAgd2hpbGUgKHRvdGFsTGVuZ3Ro
UHJvY2Vzc2VkIDwgdG90YWxSYW5nZUxlbmd0aCkgewotICAgICAgICAvLyBJdGVyYXRlIHRocm91
Z2ggdGhlIHNlYXJjaCByYW5nZSBieSBwYXJhZ3JhcGhzLCBjaGVja2luZyBlYWNoIG9uZSBmb3Ig
c3BlbGxpbmcgYW5kIGdyYW1tYXIuCi0gICAgICAgIGludCBjdXJyZW50TGVuZ3RoID0gVGV4dEl0
ZXJhdG9yOjpyYW5nZUxlbmd0aChwYXJhZ3JhcGhSYW5nZS5nZXQoKSk7Ci0gICAgICAgIGludCBj
dXJyZW50U3RhcnRPZmZzZXQgPSBmaXJzdEl0ZXJhdGlvbiA/IHNlYXJjaFJhbmdlU3RhcnRPZmZz
ZXQgOiAwOwotICAgICAgICBpbnQgY3VycmVudEVuZE9mZnNldCA9IGN1cnJlbnRMZW5ndGg7Ci0g
ICAgICAgIGlmIChpblNhbWVQYXJhZ3JhcGgocGFyYWdyYXBoUmFuZ2UtPnN0YXJ0UG9zaXRpb24o
KSwgc2VhcmNoUmFuZ2UtPmVuZFBvc2l0aW9uKCkpKSB7Ci0gICAgICAgICAgICAvLyBEZXRlcm1p
bmUgdGhlIGNoYXJhY3RlciBvZmZzZXQgZnJvbSB0aGUgZW5kIG9mIHRoZSBvcmlnaW5hbCBzZWFy
Y2ggcmFuZ2UgdG8gdGhlIGVuZCBvZiB0aGUgcGFyYWdyYXBoLAotICAgICAgICAgICAgLy8gc2lu
Y2Ugd2Ugd2lsbCB3YW50IHRvIGlnbm9yZSByZXN1bHRzIGluIHRoaXMgYXJlYS4KLSAgICAgICAg
ICAgIFJlZlB0cjxSYW5nZT4gZW5kT2Zmc2V0QXNSYW5nZSA9IFJhbmdlOjpjcmVhdGUocGFyYWdy
YXBoUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKGVjKS0+ZG9jdW1lbnQoKSwgcGFyYWdyYXBoUmFuZ2Ut
PnN0YXJ0UG9zaXRpb24oKSwgc2VhcmNoUmFuZ2UtPmVuZFBvc2l0aW9uKCkpOwotICAgICAgICAg
ICAgY3VycmVudEVuZE9mZnNldCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgoZW5kT2Zmc2V0
QXNSYW5nZS5nZXQoKSk7Ci0gICAgICAgICAgICBsYXN0SXRlcmF0aW9uID0gdHJ1ZTsKLSAgICAg
ICAgfQotICAgICAgICBpZiAoY3VycmVudFN0YXJ0T2Zmc2V0IDwgY3VycmVudEVuZE9mZnNldCkg
ewotICAgICAgICAgICAgU3RyaW5nIHBhcmFncmFwaFN0cmluZyA9IHBsYWluVGV4dChwYXJhZ3Jh
cGhSYW5nZS5nZXQoKSk7Ci0gICAgICAgICAgICBpZiAocGFyYWdyYXBoU3RyaW5nLmxlbmd0aCgp
ID4gMCkgewotICAgICAgICAgICAgICAgIGJvb2wgZm91bmRHcmFtbWFyID0gZmFsc2U7Ci0gICAg
ICAgICAgICAgICAgaW50IHNwZWxsaW5nTG9jYXRpb24gPSAwOwotICAgICAgICAgICAgICAgIGlu
dCBncmFtbWFyUGhyYXNlTG9jYXRpb24gPSAwOwotICAgICAgICAgICAgICAgIGludCBncmFtbWFy
RGV0YWlsTG9jYXRpb24gPSAwOwotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGdyYW1tYXJEZXRh
aWxJbmRleCA9IDA7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgVmVjdG9yPFRl
eHRDaGVja2luZ1Jlc3VsdD4gcmVzdWx0czsKLSAgICAgICAgICAgICAgICB1aW50NjRfdCBjaGVj
a2luZ1R5cGVzID0gY2hlY2tHcmFtbWFyID8gKFRleHRDaGVja2luZ1R5cGVTcGVsbGluZyB8IFRl
eHRDaGVja2luZ1R5cGVHcmFtbWFyKSA6IFRleHRDaGVja2luZ1R5cGVTcGVsbGluZzsKLSAgICAg
ICAgICAgICAgICBjbGllbnQtPmNoZWNrVGV4dE9mUGFyYWdyYXBoKHBhcmFncmFwaFN0cmluZy5j
aGFyYWN0ZXJzKCksIHBhcmFncmFwaFN0cmluZy5sZW5ndGgoKSwgY2hlY2tpbmdUeXBlcywgcmVz
dWx0cyk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IHJlc3VsdHMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgY29u
c3QgVGV4dENoZWNraW5nUmVzdWx0KiByZXN1bHQgPSAmcmVzdWx0c1tpXTsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKHJlc3VsdC0+dHlwZSA9PSBUZXh0Q2hlY2tpbmdUeXBlU3BlbGxpbmcgJiYg
cmVzdWx0LT5sb2NhdGlvbiA+PSBjdXJyZW50U3RhcnRPZmZzZXQgJiYgcmVzdWx0LT5sb2NhdGlv
biArIHJlc3VsdC0+bGVuZ3RoIDw9IGN1cnJlbnRFbmRPZmZzZXQpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIEFTU0VSVChyZXN1bHQtPmxlbmd0aCA+IDAgJiYgcmVzdWx0LT5sb2NhdGlvbiA+
PSAwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNwZWxsaW5nTG9jYXRpb24gPSByZXN1bHQt
PmxvY2F0aW9uOwotICAgICAgICAgICAgICAgICAgICAgICAgbWlzc3BlbGxlZFdvcmQgPSBwYXJh
Z3JhcGhTdHJpbmcuc3Vic3RyaW5nKHJlc3VsdC0+bG9jYXRpb24sIHJlc3VsdC0+bGVuZ3RoKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChtaXNzcGVsbGVkV29yZC5sZW5ndGgoKSk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgICAgICBpZiAoY2hlY2tHcmFtbWFyICYmIHJlc3VsdC0+dHlwZSA9PSBU
ZXh0Q2hlY2tpbmdUeXBlR3JhbW1hciAmJiByZXN1bHQtPmxvY2F0aW9uIDwgY3VycmVudEVuZE9m
ZnNldCAmJiByZXN1bHQtPmxvY2F0aW9uICsgcmVzdWx0LT5sZW5ndGggPiBjdXJyZW50U3RhcnRP
ZmZzZXQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChyZXN1bHQtPmxlbmd0aCA+
IDAgJiYgcmVzdWx0LT5sb2NhdGlvbiA+PSAwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8v
IFdlIGNhbid0IHN0b3AgYWZ0ZXIgdGhlIGZpcnN0IGdyYW1tYXIgcmVzdWx0LCBzaW5jZSB0aGVy
ZSBtaWdodCBzdGlsbCBiZSBhIHNwZWxsaW5nIHJlc3VsdCBhZnRlcgotICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gaXQgYmVnaW5zIGJ1dCBiZWZvcmUgdGhlIGZpcnN0IGRldGFpbCBpbiBpdCwg
YnV0IHdlIGNhbiBzdG9wIGlmIHdlIGZpbmQgYSBzZWNvbmQgZ3JhbW1hciByZXN1bHQuCi0gICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoZm91bmRHcmFtbWFyKQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBq
ID0gMDsgaiA8IHJlc3VsdC0+ZGV0YWlscy5zaXplKCk7IGorKykgewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IEdyYW1tYXJEZXRhaWwqIGRldGFpbCA9ICZyZXN1bHQtPmRldGFp
bHNbal07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGRldGFpbC0+bGVuZ3Ro
ID4gMCAmJiBkZXRhaWwtPmxvY2F0aW9uID49IDApOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChyZXN1bHQtPmxvY2F0aW9uICsgZGV0YWlsLT5sb2NhdGlvbiA+PSBjdXJyZW50U3Rh
cnRPZmZzZXQgJiYgcmVzdWx0LT5sb2NhdGlvbiArIGRldGFpbC0+bG9jYXRpb24gKyBkZXRhaWwt
Pmxlbmd0aCA8PSBjdXJyZW50RW5kT2Zmc2V0ICYmICghZm91bmRHcmFtbWFyIHx8IHJlc3VsdC0+
bG9jYXRpb24gKyBkZXRhaWwtPmxvY2F0aW9uIDwgZ3JhbW1hckRldGFpbExvY2F0aW9uKSkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncmFtbWFyRGV0YWlsSW5kZXggPSBqOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncmFtbWFyRGV0YWlsTG9jYXRpb24gPSBy
ZXN1bHQtPmxvY2F0aW9uICsgZGV0YWlsLT5sb2NhdGlvbjsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZm91bmRHcmFtbWFyID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoZm91bmRHcmFtbWFyKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JhbW1h
clBocmFzZUxvY2F0aW9uID0gcmVzdWx0LT5sb2NhdGlvbjsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBvdXRHcmFtbWFyRGV0YWlsID0gcmVzdWx0LT5kZXRhaWxzW2dyYW1tYXJEZXRhaWxJ
bmRleF07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFkR3JhbW1hclBocmFzZSA9IHBh
cmFncmFwaFN0cmluZy5zdWJzdHJpbmcocmVzdWx0LT5sb2NhdGlvbiwgcmVzdWx0LT5sZW5ndGgp
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChiYWRHcmFtbWFyUGhyYXNlLmxl
bmd0aCgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICghbWlzc3BlbGxlZFdv
cmQuaXNFbXB0eSgpICYmICghY2hlY2tHcmFtbWFyIHx8IGJhZEdyYW1tYXJQaHJhc2UuaXNFbXB0
eSgpIHx8IHNwZWxsaW5nTG9jYXRpb24gPD0gZ3JhbW1hckRldGFpbExvY2F0aW9uKSkgewotICAg
ICAgICAgICAgICAgICAgICBpbnQgc3BlbGxpbmdPZmZzZXQgPSBzcGVsbGluZ0xvY2F0aW9uIC0g
Y3VycmVudFN0YXJ0T2Zmc2V0OwotICAgICAgICAgICAgICAgICAgICBpZiAoIWZpcnN0SXRlcmF0
aW9uKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBSZWZQdHI8UmFuZ2U+IHBhcmFncmFwaE9m
ZnNldEFzUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKHBhcmFncmFwaFJhbmdlLT5zdGFydENvbnRhaW5l
cihlYyktPmRvY3VtZW50KCksIHNlYXJjaFJhbmdlLT5zdGFydFBvc2l0aW9uKCksIHBhcmFncmFw
aFJhbmdlLT5zdGFydFBvc2l0aW9uKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgc3BlbGxp
bmdPZmZzZXQgKz0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChwYXJhZ3JhcGhPZmZzZXRBc1Jh
bmdlLmdldCgpKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBv
dXRJc1NwZWxsaW5nID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgb3V0Rmlyc3RGb3VuZE9m
ZnNldCA9IHNwZWxsaW5nT2Zmc2V0OwotICAgICAgICAgICAgICAgICAgICBmaXJzdEZvdW5kSXRl
bSA9IG1pc3NwZWxsZWRXb3JkOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKGNoZWNrR3JhbW1hciAmJiAhYmFkR3JhbW1h
clBocmFzZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaW50IGdyYW1tYXJQaHJh
c2VPZmZzZXQgPSBncmFtbWFyUGhyYXNlTG9jYXRpb24gLSBjdXJyZW50U3RhcnRPZmZzZXQ7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmICghZmlyc3RJdGVyYXRpb24pIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIFJlZlB0cjxSYW5nZT4gcGFyYWdyYXBoT2Zmc2V0QXNSYW5nZSA9IFJhbmdlOjpj
cmVhdGUocGFyYWdyYXBoUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKGVjKS0+ZG9jdW1lbnQoKSwgc2Vh
cmNoUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSwgcGFyYWdyYXBoUmFuZ2UtPnN0YXJ0UG9zaXRpb24o
KSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBncmFtbWFyUGhyYXNlT2Zmc2V0ICs9IFRleHRJ
dGVyYXRvcjo6cmFuZ2VMZW5ndGgocGFyYWdyYXBoT2Zmc2V0QXNSYW5nZS5nZXQoKSk7Ci0gICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgb3V0SXNTcGVsbGluZyA9IGZh
bHNlOwotICAgICAgICAgICAgICAgICAgICBvdXRGaXJzdEZvdW5kT2Zmc2V0ID0gZ3JhbW1hclBo
cmFzZU9mZnNldDsKLSAgICAgICAgICAgICAgICAgICAgZmlyc3RGb3VuZEl0ZW0gPSBiYWRHcmFt
bWFyUGhyYXNlOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGxhc3RJdGVyYXRpb24gfHwg
dG90YWxMZW5ndGhQcm9jZXNzZWQgKyBjdXJyZW50TGVuZ3RoID49IHRvdGFsUmFuZ2VMZW5ndGgp
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgVmlzaWJsZVBvc2l0aW9uIG5ld1BhcmFncmFw
aFN0YXJ0ID0gc3RhcnRPZk5leHRQYXJhZ3JhcGgocGFyYWdyYXBoUmFuZ2UtPmVuZFBvc2l0aW9u
KCkpOwotICAgICAgICBzZXRTdGFydChwYXJhZ3JhcGhSYW5nZS5nZXQoKSwgbmV3UGFyYWdyYXBo
U3RhcnQpOwotICAgICAgICBzZXRFbmQocGFyYWdyYXBoUmFuZ2UuZ2V0KCksIGVuZE9mUGFyYWdy
YXBoKG5ld1BhcmFncmFwaFN0YXJ0KSk7Ci0gICAgICAgIGZpcnN0SXRlcmF0aW9uID0gZmFsc2U7
Ci0gICAgICAgIHRvdGFsTGVuZ3RoUHJvY2Vzc2VkICs9IGN1cnJlbnRMZW5ndGg7Ci0gICAgfQot
ICAgIHJldHVybiBmaXJzdEZvdW5kSXRlbTsKLX0KLQotI2VuZGlmCi0KIHZvaWQgRWRpdG9yOjph
ZHZhbmNlVG9OZXh0TWlzc3BlbGxpbmcoYm9vbCBzdGFydEJlZm9yZVNlbGVjdGlvbikKIHsKICAg
ICBFeGNlcHRpb25Db2RlIGVjID0gMDsKQEAgLTE5NzQsNiArMTY1Myw4IEBAIHZvaWQgRWRpdG9y
OjphZHZhbmNlVG9OZXh0TWlzc3BlbGxpbmcoYm9vbCBzdGFydEJlZm9yZVNlbGVjdGlvbikKICAg
ICAvLyByZXBlYXRlZCAiY2hlY2sgc3BlbGxpbmciIGNvbW1hbmRzIHdvcmsuCiAgICAgVmlzaWJs
ZVNlbGVjdGlvbiBzZWxlY3Rpb24oZnJhbWUoKS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpKTsK
ICAgICBSZWZQdHI8UmFuZ2U+IHNwZWxsaW5nU2VhcmNoUmFuZ2UocmFuZ2VPZkNvbnRlbnRzKGZy
YW1lKCktPmRvY3VtZW50KCkpKTsKKyAgICBSYW5nZU1hcmtlckNvbnRyb2xsZXIgbWFyayhjbGll
bnQoKSwgc3BlbGxpbmdTZWFyY2hSYW5nZSk7CisKICAgICBib29sIHN0YXJ0ZWRXaXRoU2VsZWN0
aW9uID0gZmFsc2U7CiAgICAgaWYgKHNlbGVjdGlvbi5zdGFydCgpLm5vZGUoKSkgewogICAgICAg
ICBzdGFydGVkV2l0aFNlbGVjdGlvbiA9IHRydWU7CkBAIC0yMDM5LDcgKzE3MjAsNyBAQCB2b2lk
IEVkaXRvcjo6YWR2YW5jZVRvTmV4dE1pc3NwZWxsaW5nKGJvb2wgc3RhcnRCZWZvcmVTZWxlY3Rp
b24pCiAgICAgYm9vbCBpc1NwZWxsaW5nID0gdHJ1ZTsKICAgICBpbnQgZm91bmRPZmZzZXQgPSAw
OwogICAgIEdyYW1tYXJEZXRhaWwgZ3JhbW1hckRldGFpbDsKLSAgICBTdHJpbmcgZm91bmRJdGVt
ID0gZmluZEZpcnN0TWlzc3BlbGxpbmdPckJhZEdyYW1tYXJJblJhbmdlKGNsaWVudCgpLCBzcGVs
bGluZ1NlYXJjaFJhbmdlLmdldCgpLCBpc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQoKSwgaXNTcGVs
bGluZywgZm91bmRPZmZzZXQsIGdyYW1tYXJEZXRhaWwpOworICAgIFN0cmluZyBmb3VuZEl0ZW0g
PSBtYXJrLmZpbmRGaXJzdE1pc3NwZWxsaW5nT3JCYWRHcmFtbWFyKGlzR3JhbW1hckNoZWNraW5n
RW5hYmxlZCgpLCBpc1NwZWxsaW5nLCBmb3VuZE9mZnNldCwgZ3JhbW1hckRldGFpbCk7CiAgICAg
aWYgKGlzU3BlbGxpbmcpIHsKICAgICAgICAgbWlzc3BlbGxlZFdvcmQgPSBmb3VuZEl0ZW07CiAg
ICAgICAgIG1pc3NwZWxsaW5nT2Zmc2V0ID0gZm91bmRPZmZzZXQ7CkBAIC0yMDQ5LDcgKzE3MzAs
NyBAQCB2b2lkIEVkaXRvcjo6YWR2YW5jZVRvTmV4dE1pc3NwZWxsaW5nKGJvb2wgc3RhcnRCZWZv
cmVTZWxlY3Rpb24pCiAgICAgfQogI2Vsc2UKICAgICBSZWZQdHI8UmFuZ2U+IGZpcnN0TWlzc3Bl
bGxpbmdSYW5nZTsKLSAgICBTdHJpbmcgbWlzc3BlbGxlZFdvcmQgPSBmaW5kRmlyc3RNaXNzcGVs
bGluZ0luUmFuZ2UoY2xpZW50KCksIHNwZWxsaW5nU2VhcmNoUmFuZ2UuZ2V0KCksIG1pc3NwZWxs
aW5nT2Zmc2V0LCBmYWxzZSwgZmlyc3RNaXNzcGVsbGluZ1JhbmdlKTsKKyAgICBTdHJpbmcgbWlz
c3BlbGxlZFdvcmQgPSBtYXJrLmZpbmRGaXJzdE1pc3NwZWxsaW5nKG1pc3NwZWxsaW5nT2Zmc2V0
LCBmYWxzZSwgZmlyc3RNaXNzcGVsbGluZ1JhbmdlKTsKICAgICBTdHJpbmcgYmFkR3JhbW1hclBo
cmFzZTsKIAogI2lmbmRlZiBCVUlMRElOR19PTl9USUdFUgpAQCAtMjA2Niw3ICsxNzQ3LDcgQEAg
dm9pZCBFZGl0b3I6OmFkdmFuY2VUb05leHRNaXNzcGVsbGluZyhib29sIHN0YXJ0QmVmb3JlU2Vs
ZWN0aW9uKQogICAgIH0KICAgICAKICAgICBpZiAoaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKCkp
Ci0gICAgICAgIGJhZEdyYW1tYXJQaHJhc2UgPSBmaW5kRmlyc3RCYWRHcmFtbWFySW5SYW5nZShj
bGllbnQoKSwgZ3JhbW1hclNlYXJjaFJhbmdlLmdldCgpLCBncmFtbWFyRGV0YWlsLCBncmFtbWFy
UGhyYXNlT2Zmc2V0LCBmYWxzZSk7CisgICAgICAgIGJhZEdyYW1tYXJQaHJhc2UgPSBtYXJrLmZp
bmRGaXJzdEJhZEdyYW1tYXIoZ3JhbW1hckRldGFpbCwgZ3JhbW1hclBocmFzZU9mZnNldCwgZmFs
c2UpOwogI2VuZGlmCiAjZW5kaWYKICAgICAKQEAgLTIwNzksNyArMTc2MCw3IEBAIHZvaWQgRWRp
dG9yOjphZHZhbmNlVG9OZXh0TWlzc3BlbGxpbmcoYm9vbCBzdGFydEJlZm9yZVNlbGVjdGlvbikK
ICAgICAgICAgCiAjaWYgUExBVEZPUk0oTUFDKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdF
UikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkKICAgICAgICAgZ3JhbW1hclNlYXJj
aFJhbmdlID0gc3BlbGxpbmdTZWFyY2hSYW5nZS0+Y2xvbmVSYW5nZShlYyk7Ci0gICAgICAgIGZv
dW5kSXRlbSA9IGZpbmRGaXJzdE1pc3NwZWxsaW5nT3JCYWRHcmFtbWFySW5SYW5nZShjbGllbnQo
KSwgc3BlbGxpbmdTZWFyY2hSYW5nZS5nZXQoKSwgaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKCks
IGlzU3BlbGxpbmcsIGZvdW5kT2Zmc2V0LCBncmFtbWFyRGV0YWlsKTsKKyAgICAgICAgZm91bmRJ
dGVtID0gbWFyay5maW5kRmlyc3RNaXNzcGVsbGluZ09yQmFkR3JhbW1hcihpc0dyYW1tYXJDaGVj
a2luZ0VuYWJsZWQoKSwgaXNTcGVsbGluZywgZm91bmRPZmZzZXQsIGdyYW1tYXJEZXRhaWwpOwog
ICAgICAgICBpZiAoaXNTcGVsbGluZykgewogICAgICAgICAgICAgbWlzc3BlbGxlZFdvcmQgPSBm
b3VuZEl0ZW07CiAgICAgICAgICAgICBtaXNzcGVsbGluZ09mZnNldCA9IGZvdW5kT2Zmc2V0OwpA
QCAtMjA4OCw3ICsxNzY5LDcgQEAgdm9pZCBFZGl0b3I6OmFkdmFuY2VUb05leHRNaXNzcGVsbGlu
Zyhib29sIHN0YXJ0QmVmb3JlU2VsZWN0aW9uKQogICAgICAgICAgICAgZ3JhbW1hclBocmFzZU9m
ZnNldCA9IGZvdW5kT2Zmc2V0OwogICAgICAgICB9CiAjZWxzZQotICAgICAgICBtaXNzcGVsbGVk
V29yZCA9IGZpbmRGaXJzdE1pc3NwZWxsaW5nSW5SYW5nZShjbGllbnQoKSwgc3BlbGxpbmdTZWFy
Y2hSYW5nZS5nZXQoKSwgbWlzc3BlbGxpbmdPZmZzZXQsIGZhbHNlLCBmaXJzdE1pc3NwZWxsaW5n
UmFuZ2UpOworICAgICAgICBtaXNzcGVsbGVkV29yZCA9IG1hcmsuZmluZEZpcnN0TWlzc3BlbGxp
bmcobWlzc3BlbGxpbmdPZmZzZXQsIGZhbHNlLCBmaXJzdE1pc3NwZWxsaW5nUmFuZ2UpOwogCiAj
aWZuZGVmIEJVSUxESU5HX09OX1RJR0VSCiAgICAgICAgIGdyYW1tYXJTZWFyY2hSYW5nZSA9IHNw
ZWxsaW5nU2VhcmNoUmFuZ2UtPmNsb25lUmFuZ2UoZWMpOwpAQCAtMjA5OSw3ICsxNzgwLDcgQEAg
dm9pZCBFZGl0b3I6OmFkdmFuY2VUb05leHRNaXNzcGVsbGluZyhib29sIHN0YXJ0QmVmb3JlU2Vs
ZWN0aW9uKQogICAgICAgICAgICAgZ3JhbW1hclNlYXJjaFJhbmdlLT5zZXRFbmQoY2hhcnMucmFu
Z2UoKS0+c3RhcnRDb250YWluZXIoZWMpLCBjaGFycy5yYW5nZSgpLT5zdGFydE9mZnNldChlYyks
IGVjKTsKICAgICAgICAgfQogICAgICAgICBpZiAoaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKCkp
Ci0gICAgICAgICAgICBiYWRHcmFtbWFyUGhyYXNlID0gZmluZEZpcnN0QmFkR3JhbW1hckluUmFu
Z2UoY2xpZW50KCksIGdyYW1tYXJTZWFyY2hSYW5nZS5nZXQoKSwgZ3JhbW1hckRldGFpbCwgZ3Jh
bW1hclBocmFzZU9mZnNldCwgZmFsc2UpOworICAgICAgICAgICAgYmFkR3JhbW1hclBocmFzZSA9
IG1hcmsuZmluZEZpcnN0QmFkR3JhbW1hcihncmFtbWFyRGV0YWlsLCBncmFtbWFyUGhyYXNlT2Zm
c2V0LCBmYWxzZSk7CiAjZW5kaWYKICNlbmRpZgogICAgIH0KQEAgLTIxNjMsNjAgKzE4NDQsMTMg
QEAgYm9vbCBFZGl0b3I6OmlzU2VsZWN0aW9uTWlzc3BlbGxlZCgpCiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKLSNpZm5kZWYgQlVJTERJTkdfT05fVElHRVIKLXN0YXRpYyBib29sIGlzUmFuZ2VVbmdy
YW1tYXRpY2FsKEVkaXRvckNsaWVudCogY2xpZW50LCBSYW5nZSAqcmFuZ2UsIFZlY3RvcjxTdHJp
bmc+JiBndWVzc2VzVmVjdG9yKQotewotICAgIGlmICghY2xpZW50KQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBFeGNlcHRpb25Db2RlIGVjOwotICAgIGlmICghcmFuZ2UgfHwgcmFuZ2Ut
PmNvbGxhcHNlZChlYykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICAvLyBSZXR1
cm5zIHRydWUgb25seSBpZiB0aGUgcGFzc2VkIHJhbmdlIGV4YWN0bHkgY29ycmVzcG9uZHMgdG8g
YSBiYWQgZ3JhbW1hciBkZXRhaWwgcmFuZ2UuIFRoaXMgaXMgYW5hbG9nb3VzCi0gICAgLy8gdG8g
aXNTZWxlY3Rpb25NaXNzcGVsbGVkLiBJdCdzIG5vdCBnb29kIGVub3VnaCBmb3IgdGhlcmUgdG8g
YmUgc29tZSBiYWQgZ3JhbW1hciBzb21ld2hlcmUgaW4gdGhlIHJhbmdlLAotICAgIC8vIG9yIG92
ZXJsYXBwaW5nIHRoZSByYW5nZTsgdGhlIHJhbmdlcyBtdXN0IGV4YWN0bHkgbWF0Y2guCi0gICAg
Z3Vlc3Nlc1ZlY3Rvci5jbGVhcigpOwotICAgIGludCBncmFtbWFyUGhyYXNlT2Zmc2V0OwotICAg
IAotICAgIEdyYW1tYXJEZXRhaWwgZ3JhbW1hckRldGFpbDsKLSAgICBTdHJpbmcgYmFkR3JhbW1h
clBocmFzZSA9IGZpbmRGaXJzdEJhZEdyYW1tYXJJblJhbmdlKGNsaWVudCwgcmFuZ2UsIGdyYW1t
YXJEZXRhaWwsIGdyYW1tYXJQaHJhc2VPZmZzZXQsIGZhbHNlKTsgICAgCi0gICAgCi0gICAgLy8g
Tm8gYmFkIGdyYW1tYXIgaW4gdGhlc2UgcGFydHMgYXQgYWxsLgotICAgIGlmIChiYWRHcmFtbWFy
UGhyYXNlLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIC8vIEJh
ZCBncmFtbWFyLCBidXQgcGhyYXNlIChlLmcuIHNlbnRlbmNlKSBzdGFydHMgYmV5b25kIHN0YXJ0
IG9mIHJhbmdlLgotICAgIGlmIChncmFtbWFyUGhyYXNlT2Zmc2V0ID4gMCkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIAotICAgIEFTU0VSVChncmFtbWFyRGV0YWlsLmxvY2F0aW9uID49IDAg
JiYgZ3JhbW1hckRldGFpbC5sZW5ndGggPiAwKTsKLSAgICAKLSAgICAvLyBCYWQgZ3JhbW1hciwg
YnV0IHN0YXJ0IG9mIGRldGFpbCAoZS5nLiB1bmdyYW1tYXRpY2FsIHdvcmQpIGRvZXNuJ3QgbWF0
Y2ggc3RhcnQgb2YgcmFuZ2UKLSAgICBpZiAoZ3JhbW1hckRldGFpbC5sb2NhdGlvbiArIGdyYW1t
YXJQaHJhc2VPZmZzZXQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICAvLyBCYWQg
Z3JhbW1hciBhdCBzdGFydCBvZiByYW5nZSwgYnV0IGVuZCBvZiBiYWQgZ3JhbW1hciBpcyBiZWZv
cmUgb3IgYWZ0ZXIgZW5kIG9mIHJhbmdlCi0gICAgaWYgKGdyYW1tYXJEZXRhaWwubGVuZ3RoICE9
IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgocmFuZ2UpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgCi0gICAgLy8gVXBkYXRlIHRoZSBzcGVsbGluZyBwYW5lbCB0byBiZSBkaXNwbGF5aW5n
IHRoaXMgZXJyb3IgKHdoZXRoZXIgb3Igbm90IHRoZSBzcGVsbGluZyBwYW5lbCBpcyBvbiBzY3Jl
ZW4pLgotICAgIC8vIFRoaXMgaXMgbmVjZXNzYXJ5IHRvIG1ha2UgYSBzdWJzZXF1ZW50IGNhbGwg
dG8gW05TU3BlbGxDaGVja2VyIGlnbm9yZVdvcmQ6aW5TcGVsbERvY3VtZW50V2l0aFRhZzpdIHdv
cmsKLSAgICAvLyBjb3JyZWN0bHk7IHRoYXQgY2FsbCBiZWhhdmVzIGRpZmZlcmVudGx5IGJhc2Vk
IG9uIHdoZXRoZXIgdGhlIHNwZWxsaW5nIHBhbmVsIGlzIGRpc3BsYXlpbmcgYSBtaXNzcGVsbGlu
ZwotICAgIC8vIG9yIGEgZ3JhbW1hciBlcnJvci4KLSAgICBjbGllbnQtPnVwZGF0ZVNwZWxsaW5n
VUlXaXRoR3JhbW1hclN0cmluZyhiYWRHcmFtbWFyUGhyYXNlLCBncmFtbWFyRGV0YWlsKTsKLSAg
ICAKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLSNlbmRpZgotCiBib29sIEVkaXRvcjo6aXNTZWxlY3Rp
b25VbmdyYW1tYXRpY2FsKCkKIHsKICNpZmRlZiBCVUlMRElOR19PTl9USUdFUgogICAgIHJldHVy
biBmYWxzZTsKICNlbHNlCiAgICAgVmVjdG9yPFN0cmluZz4gaWdub3JlZEd1ZXNzZXM7Ci0gICAg
cmV0dXJuIGlzUmFuZ2VVbmdyYW1tYXRpY2FsKGNsaWVudCgpLCBmcmFtZSgpLT5zZWxlY3Rpb24o
KS0+dG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSwgaWdub3JlZEd1ZXNzZXMpOworICAgIHJldHVy
biBSYW5nZU1hcmtlckNvbnRyb2xsZXIoY2xpZW50KCksIGZyYW1lKCktPnNlbGVjdGlvbigpLT50
b05vcm1hbGl6ZWRSYW5nZSgpKS5pc1VuZ3JhbW1hdGljYWwoaWdub3JlZEd1ZXNzZXMpOwogI2Vu
ZGlmCiB9CiAKQEAgLTIyMjYsOCArMTg2MCw4IEBAIFZlY3RvcjxTdHJpbmc+IEVkaXRvcjo6Z3Vl
c3Nlc0ZvclVuZ3JhbW1hdGljYWxTZWxlY3Rpb24oKQogICAgIHJldHVybiBWZWN0b3I8U3RyaW5n
PigpOwogI2Vsc2UKICAgICBWZWN0b3I8U3RyaW5nPiBndWVzc2VzOwotICAgIC8vIElnbm9yZSB0
aGUgcmVzdWx0IG9mIGlzUmFuZ2VVbmdyYW1tYXRpY2FsOyB3ZSBqdXN0IHdhbnQgdGhlIGd1ZXNz
ZXMsIHdoZXRoZXIgb3Igbm90IHRoZXJlIGFyZSBhbnkKLSAgICBpc1JhbmdlVW5ncmFtbWF0aWNh
bChjbGllbnQoKSwgZnJhbWUoKS0+c2VsZWN0aW9uKCktPnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0
KCksIGd1ZXNzZXMpOworICAgIC8vIElnbm9yZSB0aGUgcmVzdWx0IG9mIGlzVW5ncmFtbWF0aWNh
bDsgd2UganVzdCB3YW50IHRoZSBndWVzc2VzLCB3aGV0aGVyIG9yIG5vdCB0aGVyZSBhcmUgYW55
CisgICAgUmFuZ2VNYXJrZXJDb250cm9sbGVyKGNsaWVudCgpLCBmcmFtZSgpLT5zZWxlY3Rpb24o
KS0+dG9Ob3JtYWxpemVkUmFuZ2UoKSkuaXNVbmdyYW1tYXRpY2FsKGd1ZXNzZXMpOwogICAgIHJl
dHVybiBndWVzc2VzOwogI2VuZGlmCiB9CkBAIC0yMjQzLDcyICsxODc3LDEwIEBAIFZlY3RvcjxT
dHJpbmc+IEVkaXRvcjo6Z3Vlc3Nlc0Zvck1pc3NwZWxsZWRTZWxlY3Rpb24oKQogICAgIHJldHVy
biBndWVzc2VzOwogfQogCi0jaWYgUExBVEZPUk0oTUFDKSAmJiAhZGVmaW5lZChCVUlMRElOR19P
Tl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkKLQotc3RhdGljIFZlY3Rv
cjxTdHJpbmc+IGd1ZXNzZXNGb3JNaXNzcGVsbGVkT3JVbmdyYW1tYXRpY2FsUmFuZ2UoRWRpdG9y
Q2xpZW50KiBjbGllbnQsIFJhbmdlICpyYW5nZSwgYm9vbCBjaGVja0dyYW1tYXIsIGJvb2wmIG1p
c3NwZWxsZWQsIGJvb2wmIHVuZ3JhbW1hdGljYWwpCi17Ci0gICAgVmVjdG9yPFN0cmluZz4gZ3Vl
c3NlczsKLSAgICBFeGNlcHRpb25Db2RlIGVjOwotICAgIG1pc3NwZWxsZWQgPSBmYWxzZTsKLSAg
ICB1bmdyYW1tYXRpY2FsID0gZmFsc2U7Ci0gICAgCi0gICAgaWYgKCFjbGllbnQgfHwgIXJhbmdl
IHx8IHJhbmdlLT5jb2xsYXBzZWQoZWMpKQotICAgICAgICByZXR1cm4gZ3Vlc3NlczsKLQotICAg
IC8vIEV4cGFuZCB0aGUgcmFuZ2UgdG8gZW5jb21wYXNzIGVudGlyZSBwYXJhZ3JhcGhzLCBzaW5j
ZSB0ZXh0IGNoZWNraW5nIG5lZWRzIHRoYXQgbXVjaCBjb250ZXh0LgotICAgIGludCByYW5nZVN0
YXJ0T2Zmc2V0OwotICAgIFN0cmluZyBwYXJhZ3JhcGhTdHJpbmc7Ci0gICAgUmVmUHRyPFJhbmdl
PiBwYXJhZ3JhcGhSYW5nZSA9IHBhcmFncmFwaEFsaWduZWRSYW5nZUZvclJhbmdlKHJhbmdlLCBy
YW5nZVN0YXJ0T2Zmc2V0LCBwYXJhZ3JhcGhTdHJpbmcpOwotICAgIGludCByYW5nZUxlbmd0aCA9
IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgocmFuZ2UpOwotICAgIGlmICghcmFuZ2VMZW5ndGgg
fHwgIXBhcmFncmFwaFN0cmluZy5sZW5ndGgoKSkKLSAgICAgICAgcmV0dXJuIGd1ZXNzZXM7Ci0K
LSAgICBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiByZXN1bHRzOwotICAgIHVpbnQ2NF90IGNo
ZWNraW5nVHlwZXMgPSBjaGVja0dyYW1tYXIgPyAoVGV4dENoZWNraW5nVHlwZVNwZWxsaW5nIHwg
VGV4dENoZWNraW5nVHlwZUdyYW1tYXIpIDogVGV4dENoZWNraW5nVHlwZVNwZWxsaW5nOwotICAg
IGNsaWVudC0+Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgocGFyYWdyYXBoU3RyaW5nLmNoYXJhY3RlcnMo
KSwgcGFyYWdyYXBoU3RyaW5nLmxlbmd0aCgpLCBjaGVja2luZ1R5cGVzLCByZXN1bHRzKTsKLSAg
ICAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVzdWx0cy5zaXplKCk7IGkrKykgewot
ICAgICAgICBjb25zdCBUZXh0Q2hlY2tpbmdSZXN1bHQqIHJlc3VsdCA9ICZyZXN1bHRzW2ldOwot
ICAgICAgICBpZiAocmVzdWx0LT50eXBlID09IFRleHRDaGVja2luZ1R5cGVTcGVsbGluZyAmJiBy
ZXN1bHQtPmxvY2F0aW9uID09IHJhbmdlU3RhcnRPZmZzZXQgJiYgcmVzdWx0LT5sZW5ndGggPT0g
cmFuZ2VMZW5ndGgpIHsKLSAgICAgICAgICAgIFN0cmluZyBtaXNzcGVsbGVkV29yZCA9IHBhcmFn
cmFwaFN0cmluZy5zdWJzdHJpbmcocmFuZ2VTdGFydE9mZnNldCwgcmFuZ2VMZW5ndGgpOwotICAg
ICAgICAgICAgQVNTRVJUKG1pc3NwZWxsZWRXb3JkLmxlbmd0aCgpKTsKLSAgICAgICAgICAgIGNs
aWVudC0+Z2V0R3Vlc3Nlc0ZvcldvcmQobWlzc3BlbGxlZFdvcmQsIGd1ZXNzZXMpOwotICAgICAg
ICAgICAgY2xpZW50LT51cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKG1pc3NwZWxs
ZWRXb3JkKTsKLSAgICAgICAgICAgIG1pc3NwZWxsZWQgPSB0cnVlOwotICAgICAgICAgICAgcmV0
dXJuIGd1ZXNzZXM7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgaWYgKCFjaGVja0dyYW1t
YXIpCi0gICAgICAgIHJldHVybiBndWVzc2VzOwotICAgICAgICAKLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgcmVzdWx0cy5zaXplKCk7IGkrKykgewotICAgICAgICBjb25zdCBUZXh0Q2hl
Y2tpbmdSZXN1bHQqIHJlc3VsdCA9ICZyZXN1bHRzW2ldOwotICAgICAgICBpZiAocmVzdWx0LT50
eXBlID09IFRleHRDaGVja2luZ1R5cGVHcmFtbWFyICYmIHJlc3VsdC0+bG9jYXRpb24gPD0gcmFu
Z2VTdGFydE9mZnNldCAmJiByZXN1bHQtPmxvY2F0aW9uICsgcmVzdWx0LT5sZW5ndGggPj0gcmFu
Z2VTdGFydE9mZnNldCArIHJhbmdlTGVuZ3RoKSB7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGogPSAwOyBqIDwgcmVzdWx0LT5kZXRhaWxzLnNpemUoKTsgaisrKSB7Ci0gICAgICAgICAgICAg
ICAgY29uc3QgR3JhbW1hckRldGFpbCogZGV0YWlsID0gJnJlc3VsdC0+ZGV0YWlsc1tqXTsKLSAg
ICAgICAgICAgICAgICBBU1NFUlQoZGV0YWlsLT5sZW5ndGggPiAwICYmIGRldGFpbC0+bG9jYXRp
b24gPj0gMCk7Ci0gICAgICAgICAgICAgICAgaWYgKHJlc3VsdC0+bG9jYXRpb24gKyBkZXRhaWwt
PmxvY2F0aW9uID09IHJhbmdlU3RhcnRPZmZzZXQgJiYgZGV0YWlsLT5sZW5ndGggPT0gcmFuZ2VM
ZW5ndGgpIHsKLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGJhZEdyYW1tYXJQaHJhc2UgPSBw
YXJhZ3JhcGhTdHJpbmcuc3Vic3RyaW5nKHJlc3VsdC0+bG9jYXRpb24sIHJlc3VsdC0+bGVuZ3Ro
KTsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGJhZEdyYW1tYXJQaHJhc2UubGVuZ3RoKCkp
OwotICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGsgPSAwOyBrIDwgZGV0YWlsLT5n
dWVzc2VzLnNpemUoKTsgaysrKQotICAgICAgICAgICAgICAgICAgICAgICAgZ3Vlc3Nlcy5hcHBl
bmQoZGV0YWlsLT5ndWVzc2VzW2tdKTsKLSAgICAgICAgICAgICAgICAgICAgY2xpZW50LT51cGRh
dGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcoYmFkR3JhbW1hclBocmFzZSwgKmRldGFpbCk7
Ci0gICAgICAgICAgICAgICAgICAgIHVuZ3JhbW1hdGljYWwgPSB0cnVlOwotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZ3Vlc3NlczsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGd1ZXNzZXM7Ci19Ci0KLSNlbmRpZgotCiBW
ZWN0b3I8U3RyaW5nPiBFZGl0b3I6Omd1ZXNzZXNGb3JNaXNzcGVsbGVkT3JVbmdyYW1tYXRpY2Fs
U2VsZWN0aW9uKGJvb2wmIG1pc3NwZWxsZWQsIGJvb2wmIHVuZ3JhbW1hdGljYWwpCiB7CiAjaWYg
UExBVEZPUk0oTUFDKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQo
QlVJTERJTkdfT05fTEVPUEFSRCkKLSAgICByZXR1cm4gZ3Vlc3Nlc0Zvck1pc3NwZWxsZWRPclVu
Z3JhbW1hdGljYWxSYW5nZShjbGllbnQoKSwgZnJhbWUoKS0+c2VsZWN0aW9uKCktPnRvTm9ybWFs
aXplZFJhbmdlKCkuZ2V0KCksIGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCgpLCBtaXNzcGVsbGVk
LCB1bmdyYW1tYXRpY2FsKTsKKyAgICByZXR1cm4gUmFuZ2VNYXJrZXJDb250cm9sbGVyKGNsaWVu
dCgpLCBmcmFtZSgpLT5zZWxlY3Rpb24oKS0+dG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ3Vlc3Nlc0Zv
ck1pc3NwZWxsZWRPclVuZ3JhbW1hdGljYWxSYW5nZShpc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQo
KSwgbWlzc3BlbGxlZCwgdW5ncmFtbWF0aWNhbCk7CiAjZWxzZQogICAgIG1pc3NwZWxsZWQgPSBp
c1NlbGVjdGlvbk1pc3NwZWxsZWQoKTsKICAgICBpZiAobWlzc3BlbGxlZCkgewpAQCAtMjQ4NSwz
NCArMjA1NywxNSBAQCB2b2lkIEVkaXRvcjo6bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nVG9Q
b3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24gJnApCiAgICAgbWFya0JhZEdyYW1tYXIoVmlz
aWJsZVNlbGVjdGlvbihzdGFydE9mU2VudGVuY2UocCksIGVuZE9mU2VudGVuY2UocCkpKTsKICNl
bmRpZgogfQotCi1zdGF0aWMgdm9pZCBtYXJrQWxsTWlzc3BlbGxpbmdzSW5SYW5nZShFZGl0b3JD
bGllbnQqIGNsaWVudCwgUmFuZ2UqIHNlYXJjaFJhbmdlLCBSZWZQdHI8UmFuZ2U+JiBmaXJzdE1p
c3NwZWxsaW5nUmFuZ2UpCi17Ci0gICAgLy8gVXNlIHRoZSAibWFya0FsbCIgZmVhdHVyZSBvZiBm
aW5kRmlyc3RNaXNzcGVsbGluZ0luUmFuZ2UuIElnbm9yZSB0aGUgcmV0dXJuIHZhbHVlIGFuZCB0
aGUgIm91dCBwYXJhbWV0ZXIiOwotICAgIC8vIGFsbCB3ZSBuZWVkIHRvIGRvIGlzIG1hcmsgZXZl
cnkgaW5zdGFuY2UuCi0gICAgaW50IGlnbm9yZWRPZmZzZXQ7Ci0gICAgZmluZEZpcnN0TWlzc3Bl
bGxpbmdJblJhbmdlKGNsaWVudCwgc2VhcmNoUmFuZ2UsIGlnbm9yZWRPZmZzZXQsIHRydWUsIGZp
cnN0TWlzc3BlbGxpbmdSYW5nZSk7Ci19Ci0KLSNpZm5kZWYgQlVJTERJTkdfT05fVElHRVIKLXN0
YXRpYyB2b2lkIG1hcmtBbGxCYWRHcmFtbWFySW5SYW5nZShFZGl0b3JDbGllbnQqIGNsaWVudCwg
UmFuZ2UqIHNlYXJjaFJhbmdlKQotewotICAgIC8vIFVzZSB0aGUgIm1hcmtBbGwiIGZlYXR1cmUg
b2YgZmluZEZpcnN0QmFkR3JhbW1hckluUmFuZ2UuIElnbm9yZSB0aGUgcmV0dXJuIHZhbHVlIGFu
ZCAib3V0IHBhcmFtZXRlcnMiOyBhbGwgd2UgbmVlZCB0bwotICAgIC8vIGRvIGlzIG1hcmsgZXZl
cnkgaW5zdGFuY2UuCi0gICAgR3JhbW1hckRldGFpbCBpZ25vcmVkR3JhbW1hckRldGFpbDsKLSAg
ICBpbnQgaWdub3JlZE9mZnNldDsKLSAgICBmaW5kRmlyc3RCYWRHcmFtbWFySW5SYW5nZShjbGll
bnQsIHNlYXJjaFJhbmdlLCBpZ25vcmVkR3JhbW1hckRldGFpbCwgaWdub3JlZE9mZnNldCwgdHJ1
ZSk7Ci19Ci0jZW5kaWYKICAgICAKLXN0YXRpYyB2b2lkIG1hcmtNaXNzcGVsbGluZ3NPckJhZEdy
YW1tYXIoRWRpdG9yKiBlZGl0b3IsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiwg
Ym9vbCBjaGVja1NwZWxsaW5nLCBSZWZQdHI8UmFuZ2U+JiBmaXJzdE1pc3NwZWxsaW5nUmFuZ2Up
Cit2b2lkIEVkaXRvcjo6bWFya01pc3NwZWxsaW5nc09yQmFkR3JhbW1hcihjb25zdCBWaXNpYmxl
U2VsZWN0aW9uJiBzZWxlY3Rpb24sIGJvb2wgY2hlY2tTcGVsbGluZywgUmVmUHRyPFJhbmdlPiYg
Zmlyc3RNaXNzcGVsbGluZ1JhbmdlKQogewogICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVk
IHdpdGggYSBzZWxlY3Rpb24gYWxyZWFkeSBleHBhbmRlZCB0byB3b3JkIGJvdW5kYXJpZXMuCiAg
ICAgLy8gTWlnaHQgYmUgbmljZSB0byBhc3NlcnQgdGhhdCBoZXJlLgogICAgIAogICAgIC8vIFRo
aXMgZnVuY3Rpb24gaXMgdXNlZCBvbmx5IGZvciBhcy15b3UtdHlwZSBjaGVja2luZywgc28gaWYg
dGhhdCdzIG9mZiB3ZSBkbyBub3RoaW5nLiBOb3RlIHRoYXQKICAgICAvLyBncmFtbWFyIGNoZWNr
aW5nIGNhbiBvbmx5IGJlIG9uIGlmIHNwZWxsIGNoZWNraW5nIGlzIGFsc28gb24uCi0gICAgaWYg
KCFlZGl0b3ItPmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCkpCisgICAgaWYgKCFp
c0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCgpKQogICAgICAgICByZXR1cm47CiAgICAg
CiAgICAgUmVmUHRyPFJhbmdlPiBzZWFyY2hSYW5nZShzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFu
Z2UoKSk7CkBAIC0yNTI0LDIxICsyMDc3LDIyIEBAIHN0YXRpYyB2b2lkIG1hcmtNaXNzcGVsbGlu
Z3NPckJhZEdyYW1tYXIoRWRpdG9yKiBlZGl0b3IsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mCiAg
ICAgaWYgKCFlZGl0YWJsZU5vZGUgfHwgIWVkaXRhYmxlTm9kZS0+aXNDb250ZW50RWRpdGFibGUo
KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCFlZGl0b3ItPnNwZWxsQ2hlY2tpbmdFbmFi
bGVkSW5Gb2N1c2VkTm9kZSgpKQorICAgIGlmICghc3BlbGxDaGVja2luZ0VuYWJsZWRJbkZvY3Vz
ZWROb2RlKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIEdldCB0aGUgc3BlbGwgY2hlY2tl
ciBpZiBpdCBpcyBhdmFpbGFibGUKLSAgICBpZiAoIWVkaXRvci0+Y2xpZW50KCkpCisgICAgaWYg
KCFjbGllbnQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIAorICAgIFJhbmdlTWFya2VyQ29udHJv
bGxlciBtYXJrKGNsaWVudCgpLCBzZWFyY2hSYW5nZSk7CiAgICAgaWYgKGNoZWNrU3BlbGxpbmcp
Ci0gICAgICAgIG1hcmtBbGxNaXNzcGVsbGluZ3NJblJhbmdlKGVkaXRvci0+Y2xpZW50KCksIHNl
YXJjaFJhbmdlLmdldCgpLCBmaXJzdE1pc3NwZWxsaW5nUmFuZ2UpOworICAgICAgICBtYXJrLm1h
cmtBbGxNaXNzcGVsbGluZ3MoZmlyc3RNaXNzcGVsbGluZ1JhbmdlKTsKICAgICBlbHNlIHsKICNp
ZmRlZiBCVUlMRElOR19PTl9USUdFUgogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICNl
bHNlCi0gICAgICAgIGlmIChlZGl0b3ItPmlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCgpKQotICAg
ICAgICAgICAgbWFya0FsbEJhZEdyYW1tYXJJblJhbmdlKGVkaXRvci0+Y2xpZW50KCksIHNlYXJj
aFJhbmdlLmdldCgpKTsKKyAgICAgICAgaWYgKGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCgpKQor
ICAgICAgICAgICAgbWFyay5tYXJrQWxsQmFkR3JhbW1hcigpOwogI2VuZGlmCiAgICAgfSAgICAK
IH0KQEAgLTI1NjMsMTQgKzIxMTcsMTQgQEAgYm9vbCBFZGl0b3I6OnNwZWxsQ2hlY2tpbmdFbmFi
bGVkSW5Gb2N1c2VkTm9kZSgpIGNvbnN0CiAKIHZvaWQgRWRpdG9yOjptYXJrTWlzc3BlbGxpbmdz
KGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiwgUmVmUHRyPFJhbmdlPiYgZmlyc3RN
aXNzcGVsbGluZ1JhbmdlKQogewotICAgIG1hcmtNaXNzcGVsbGluZ3NPckJhZEdyYW1tYXIodGhp
cywgc2VsZWN0aW9uLCB0cnVlLCBmaXJzdE1pc3NwZWxsaW5nUmFuZ2UpOworICAgIG1hcmtNaXNz
cGVsbGluZ3NPckJhZEdyYW1tYXIoc2VsZWN0aW9uLCB0cnVlLCBmaXJzdE1pc3NwZWxsaW5nUmFu
Z2UpOwogfQogICAgIAogdm9pZCBFZGl0b3I6Om1hcmtCYWRHcmFtbWFyKGNvbnN0IFZpc2libGVT
ZWxlY3Rpb24mIHNlbGVjdGlvbikKIHsKICNpZm5kZWYgQlVJTERJTkdfT05fVElHRVIKICAgICBS
ZWZQdHI8UmFuZ2U+IGZpcnN0TWlzc3BlbGxpbmdSYW5nZTsKLSAgICBtYXJrTWlzc3BlbGxpbmdz
T3JCYWRHcmFtbWFyKHRoaXMsIHNlbGVjdGlvbiwgZmFsc2UsIGZpcnN0TWlzc3BlbGxpbmdSYW5n
ZSk7CisgICAgbWFya01pc3NwZWxsaW5nc09yQmFkR3JhbW1hcihzZWxlY3Rpb24sIGZhbHNlLCBm
aXJzdE1pc3NwZWxsaW5nUmFuZ2UpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oc2VsZWN0aW9u
KTsKICNlbmRpZgpAQCAtMjYyMCwxNSArMjE3NCwxNiBAQCB2b2lkIEVkaXRvcjo6bWFya0FsbE1p
c3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyhUZXh0Q2hlY2tpbmdPcHRpb25zIHRleHRD
aAogICAgIGJvb2wgYWRqdXN0U2VsZWN0aW9uRm9yUGFyYWdyYXBoQm91bmRhcmllcyA9IGZhbHNl
OwogICAgIFN0cmluZyBwYXJhZ3JhcGhTdHJpbmc7CiAgICAgUmVmUHRyPFJhbmdlPiBwYXJhZ3Jh
cGhSYW5nZTsKKyAgICBSYW5nZU1hcmtlckNvbnRyb2xsZXIgbWFyayhjbGllbnQoKSwgZ3JhbW1h
clJhbmdlKTsKIAogICAgIGlmIChzaG91bGRNYXJrR3JhbW1hcikgewogICAgICAgICAvLyBUaGUg
c3BlbGxpbmcgcmFuZ2Ugc2hvdWxkIGJlIGNvbnRhaW5lZCBpbiB0aGUgcGFyYWdyYXBoLWFsaWdu
ZWQgZXh0ZW5zaW9uIG9mIHRoZSBncmFtbWFyIHJhbmdlLgotICAgICAgICBwYXJhZ3JhcGhSYW5n
ZSA9IHBhcmFncmFwaEFsaWduZWRSYW5nZUZvclJhbmdlKGdyYW1tYXJSYW5nZSwgZ3JhbW1hclJh
bmdlU3RhcnRPZmZzZXQsIHBhcmFncmFwaFN0cmluZyk7CisgICAgICAgIHBhcmFncmFwaFJhbmdl
ID0gbWFyay5wYXJhZ3JhcGhBbGlnbmVkUmFuZ2UoZ3JhbW1hclJhbmdlU3RhcnRPZmZzZXQsIHBh
cmFncmFwaFN0cmluZyk7CiAgICAgICAgIFJlZlB0cjxSYW5nZT4gb2Zmc2V0QXNSYW5nZSA9IFJh
bmdlOjpjcmVhdGUocGFyYWdyYXBoUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKGVjKS0+ZG9jdW1lbnQo
KSwgcGFyYWdyYXBoUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSwgc3BlbGxpbmdSYW5nZS0+c3RhcnRQ
b3NpdGlvbigpKTsKICAgICAgICAgc3BlbGxpbmdSYW5nZVN0YXJ0T2Zmc2V0ID0gVGV4dEl0ZXJh
dG9yOjpyYW5nZUxlbmd0aChvZmZzZXRBc1JhbmdlLmdldCgpKTsKICAgICAgICAgZ3JhbW1hclJh
bmdlRW5kT2Zmc2V0ID0gZ3JhbW1hclJhbmdlU3RhcnRPZmZzZXQgKyBUZXh0SXRlcmF0b3I6OnJh
bmdlTGVuZ3RoKGdyYW1tYXJSYW5nZSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgcGFyYWdyYXBo
UmFuZ2UgPSBwYXJhZ3JhcGhBbGlnbmVkUmFuZ2VGb3JSYW5nZShzcGVsbGluZ1JhbmdlLCBzcGVs
bGluZ1JhbmdlU3RhcnRPZmZzZXQsIHBhcmFncmFwaFN0cmluZyk7CisgICAgICAgIHBhcmFncmFw
aFJhbmdlID0gbWFyay5wYXJhZ3JhcGhBbGlnbmVkUmFuZ2Uoc3BlbGxpbmdSYW5nZVN0YXJ0T2Zm
c2V0LCBwYXJhZ3JhcGhTdHJpbmcpOwogICAgIH0KICAgICBzcGVsbGluZ1JhbmdlRW5kT2Zmc2V0
ID0gc3BlbGxpbmdSYW5nZVN0YXJ0T2Zmc2V0ICsgVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChz
cGVsbGluZ1JhbmdlKTsKICAgICBwYXJhZ3JhcGhMZW5ndGggPSBwYXJhZ3JhcGhTdHJpbmcubGVu
Z3RoKCk7CkBAIC0yODE4LDEwICsyMzczLDEwIEBAIHZvaWQgRWRpdG9yOjpjaGFuZ2VCYWNrVG9S
ZXBsYWNlZFN0cmluZyhjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nKQogICAgIFJlZlB0cjxS
YW5nZT4gc2VsZWN0aW9uID0gc2VsZWN0ZWRSYW5nZSgpOwogICAgIGlmICghc2hvdWxkSW5zZXJ0
VGV4dChyZXBsYWNlZFN0cmluZywgc2VsZWN0aW9uLmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb25Q
YXN0ZWQpKQogICAgICAgICByZXR1cm47Ci0gICAgICAgIAorICAgIAogICAgIFN0cmluZyBwYXJh
Z3JhcGhTdHJpbmc7CiAgICAgaW50IHNlbGVjdGlvbk9mZnNldDsKLSAgICBSZWZQdHI8UmFuZ2U+
IHBhcmFncmFwaFJhbmdlID0gcGFyYWdyYXBoQWxpZ25lZFJhbmdlRm9yUmFuZ2Uoc2VsZWN0aW9u
LmdldCgpLCBzZWxlY3Rpb25PZmZzZXQsIHBhcmFncmFwaFN0cmluZyk7CisgICAgUmVmUHRyPFJh
bmdlPiBwYXJhZ3JhcGhSYW5nZSA9IFJhbmdlTWFya2VyQ29udHJvbGxlcihjbGllbnQoKSwgc2Vs
ZWN0aW9uKS5wYXJhZ3JhcGhBbGlnbmVkUmFuZ2Uoc2VsZWN0aW9uT2Zmc2V0LCBwYXJhZ3JhcGhT
dHJpbmcpOwogICAgIHJlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dChyZXBsYWNlZFN0cmluZywgZmFs
c2UsIGZhbHNlKTsKICAgICBSZWZQdHI8UmFuZ2U+IGNoYW5nZWRSYW5nZSA9IFRleHRJdGVyYXRv
cjo6c3VicmFuZ2UocGFyYWdyYXBoUmFuZ2UuZ2V0KCksIHNlbGVjdGlvbk9mZnNldCwgcmVwbGFj
ZWRTdHJpbmcubGVuZ3RoKCkpOwogICAgIGNoYW5nZWRSYW5nZS0+c3RhcnRDb250YWluZXIoKS0+
ZG9jdW1lbnQoKS0+bWFya2VycygpLT5hZGRNYXJrZXIoY2hhbmdlZFJhbmdlLmdldCgpLCBEb2N1
bWVudE1hcmtlcjo6UmVwbGFjZW1lbnQsIFN0cmluZygpKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
ZWRpdGluZy9FZGl0b3IuaCBiL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaAppbmRleCBkZjJlOTQ3
MzFhY2QyNTkyNzNiNmQ0ZjFlODMzZmFmYzYxN2RkYjAxLi5hNTFmNjIyM2JkNWJkYjE0NTA2NjJl
OTAyNDFjMGJlOTI4NTgxOTM0IDEwMDY0NAotLS0gYS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgK
KysrIGIvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCkBAIC0zOTIsNiArMzkyLDcgQEAgcHJpdmF0
ZToKICAgICB2b2lkIHJlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dChjb25zdCBTdHJpbmcmLCBib29s
IHNlbGVjdFJlcGxhY2VtZW50LCBib29sIHNtYXJ0UmVwbGFjZSk7CiAgICAgdm9pZCB3cml0ZVNl
bGVjdGlvblRvUGFzdGVib2FyZChQYXN0ZWJvYXJkKik7CiAgICAgdm9pZCByZXZlYWxTZWxlY3Rp
b25BZnRlckVkaXRpbmdPcGVyYXRpb24oKTsKKyAgICB2b2lkIG1hcmtNaXNzcGVsbGluZ3NPckJh
ZEdyYW1tYXIoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYsIGJvb2wgY2hlY2tTcGVsbGluZywgUmVm
UHRyPFJhbmdlPiYgZmlyc3RNaXNzcGVsbGluZ1JhbmdlKTsKIAogICAgIHZvaWQgc2VsZWN0Q29t
cG9zaXRpb24oKTsKICAgICB2b2lkIGNvbmZpcm1Db21wb3NpdGlvbihjb25zdCBTdHJpbmcmLCBi
b29sIHByZXNlcnZlU2VsZWN0aW9uKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZWRpdGluZy9SYW5n
ZU1hcmtlckNvbnRyb2xsZXIuY3BwIGIvV2ViQ29yZS9lZGl0aW5nL1JhbmdlTWFya2VyQ29udHJv
bGxlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uY2ViMmQxYTI2MjdlNTFhYzI3MTQ0MmE3NDg3NDgwOGY2NjVk
ZGQyYgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvZWRpdGluZy9SYW5nZU1hcmtlckNvbnRy
b2xsZXIuY3BwCkBAIC0wLDAgKzEsNTI0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAy
MDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAw
OCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJhbmdlTWFya2VyQ29udHJvbGxlci5oIgor
CisjaW5jbHVkZSAiUmFuZ2UuaCIKKyNpbmNsdWRlICJUZXh0SXRlcmF0b3IuaCIKKyNpbmNsdWRl
ICJWaXNpYmxlUG9zaXRpb24uaCIKKyNpbmNsdWRlICJ2aXNpYmxlX3VuaXRzLmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworUmFuZ2VNYXJrZXJDb250cm9sbGVyOjpSYW5nZU1hcmtlckNvbnRy
b2xsZXIoRWRpdG9yQ2xpZW50KiBjbGllbnQsIFBhc3NSZWZQdHI8UmFuZ2U+IHJhbmdlKQorICAg
IDogbV9jbGllbnQoY2xpZW50KQorICAgICwgbV9yYW5nZShyYW5nZSkKK3sKKyAgICBBU1NFUlRf
QVJHKG1fY2xpZW50LCBtX2NsaWVudCk7CisgICAgQVNTRVJUX0FSRyhtX3JhbmdlLCBtX3Jhbmdl
KTsKK30KKworUmFuZ2VNYXJrZXJDb250cm9sbGVyOjp+UmFuZ2VNYXJrZXJDb250cm9sbGVyKCkK
K3sKK30KKworUGFzc1JlZlB0cjxSYW5nZT4gUmFuZ2VNYXJrZXJDb250cm9sbGVyOjpwYXJhZ3Jh
cGhBbGlnbmVkUmFuZ2UoaW50JiBvZmZzZXRJbnRvUGFyYWdyYXBoQWxpZ25lZFJhbmdlLCBTdHJp
bmcmIHBhcmFncmFwaFN0cmluZykgY29uc3QKK3sKKyNpZm5kZWYgQlVJTERJTkdfT05fVElHRVIK
KyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICAKKyAgICAvLyBFeHBhbmQgcmFuZ2UgdG8g
cGFyYWdyYXBoIGJvdW5kYXJpZXMKKyAgICBSZWZQdHI8UmFuZ2U+IHBhcmFncmFwaFJhbmdlID0g
bV9yYW5nZS0+Y2xvbmVSYW5nZShlYyk7CisgICAgc2V0U3RhcnQocGFyYWdyYXBoUmFuZ2UuZ2V0
KCksIHN0YXJ0T2ZQYXJhZ3JhcGgobV9yYW5nZS0+c3RhcnRQb3NpdGlvbigpKSk7CisgICAgc2V0
RW5kKHBhcmFncmFwaFJhbmdlLmdldCgpLCBlbmRPZlBhcmFncmFwaChtX3JhbmdlLT5lbmRQb3Np
dGlvbigpKSk7CisgICAgCisgICAgLy8gQ29tcHV0ZSBvZmZzZXQgZnJvbSBzdGFydCBvZiBleHBh
bmRlZCByYW5nZSB0byBzdGFydCBvZiBvcmlnaW5hbCByYW5nZQorICAgIFJlZlB0cjxSYW5nZT4g
b2Zmc2V0QXNSYW5nZSA9IFJhbmdlOjpjcmVhdGUocGFyYWdyYXBoUmFuZ2UtPnN0YXJ0Q29udGFp
bmVyKGVjKS0+ZG9jdW1lbnQoKSwgcGFyYWdyYXBoUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSwgbV9y
YW5nZS0+c3RhcnRQb3NpdGlvbigpKTsKKyAgICBvZmZzZXRJbnRvUGFyYWdyYXBoQWxpZ25lZFJh
bmdlID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChvZmZzZXRBc1JhbmdlLmdldCgpKTsKKyAg
ICAKKyAgICAvLyBGaWxsIGluIG91dCBwYXJhbWV0ZXIgd2l0aCBzdHJpbmcgcmVwcmVzZW50aW5n
IGVudGlyZSBwYXJhZ3JhcGggcmFuZ2UuCisgICAgLy8gU29tZWRheSB3ZSBtaWdodCBoYXZlIGEg
Y2FsbGVyIHRoYXQgZG9lc24ndCB1c2UgdGhpcywgYnV0IGZvciBub3cgYWxsIGNhbGxlcnMgZG8u
CisgICAgcGFyYWdyYXBoU3RyaW5nID0gcGxhaW5UZXh0KHBhcmFncmFwaFJhbmdlLmdldCgpKTsK
KworICAgIHJldHVybiBwYXJhZ3JhcGhSYW5nZTsKKyNlbHNlCisgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgVU5VU0VEX1BBUkFNKG9mZnNldEludG9QYXJhZ3JhcGhBbGlnbmVkUmFuZ2Up
OworICAgIFVOVVNFRF9QQVJBTShwYXJhZ3JhcGhTdHJpbmcpOworICAgIHJldHVybiBQYXNzUmVm
UHRyPFJhbmdlPigwKTsKKyNlbmRpZgorfQorCitTdHJpbmcgUmFuZ2VNYXJrZXJDb250cm9sbGVy
OjpmaW5kRmlyc3RNaXNzcGVsbGluZyhpbnQmIGZpcnN0TWlzc3BlbGxpbmdPZmZzZXQsIGJvb2wg
bWFya0FsbCwgUmVmUHRyPFJhbmdlPiYgZmlyc3RNaXNzcGVsbGluZ1JhbmdlKQoreworICAgIFdv
cmRBd2FyZUl0ZXJhdG9yIGl0KG1fcmFuZ2UuZ2V0KCkpOworICAgIGZpcnN0TWlzc3BlbGxpbmdP
ZmZzZXQgPSAwOworICAgIAorICAgIFN0cmluZyBmaXJzdE1pc3NwZWxsaW5nOworICAgIGludCBj
dXJyZW50Q2h1bmtPZmZzZXQgPSAwOworCisgICAgd2hpbGUgKCFpdC5hdEVuZCgpKSB7CisgICAg
ICAgIGNvbnN0IFVDaGFyKiBjaGFycyA9IGl0LmNoYXJhY3RlcnMoKTsKKyAgICAgICAgaW50IGxl
biA9IGl0Lmxlbmd0aCgpOworICAgICAgICAKKyAgICAgICAgLy8gU2tpcCBzb21lIHdvcmsgZm9y
IG9uZS1zcGFjZS1jaGFyIGh1bmtzCisgICAgICAgIGlmICghKGxlbiA9PSAxICYmIGNoYXJzWzBd
ID09ICcgJykpIHsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaW50IG1pc3NwZWxsaW5nTG9j
YXRpb24gPSAtMTsKKyAgICAgICAgICAgIGludCBtaXNzcGVsbGluZ0xlbmd0aCA9IDA7CisgICAg
ICAgICAgICBtX2NsaWVudC0+Y2hlY2tTcGVsbGluZ09mU3RyaW5nKGNoYXJzLCBsZW4sICZtaXNz
cGVsbGluZ0xvY2F0aW9uLCAmbWlzc3BlbGxpbmdMZW5ndGgpOworCisgICAgICAgICAgICAvLyA1
NDkwNjI3IHNob3dzIHRoYXQgdGhlcmUgd2FzIHNvbWUgY29kZSBwYXRoIGhlcmUgd2hlcmUgdGhl
IFN0cmluZyBjb25zdHJ1Y3RvciBiZWxvdyBjcmFzaGVzLgorICAgICAgICAgICAgLy8gV2UgZG9u
J3Qga25vdyBleGFjdGx5IHdoYXQgY29tYmluYXRpb24gb2YgYmFkIGlucHV0IGNhdXNlZCB0aGlz
LCBzbyB3ZSdyZSBtYWtpbmcgdGhpcyBtdWNoCisgICAgICAgICAgICAvLyBtb3JlIHJvYnVzdCBh
Z2FpbnN0IGJhZCBpbnB1dCBvbiByZWxlYXNlIGJ1aWxkcy4KKyAgICAgICAgICAgIEFTU0VSVCht
aXNzcGVsbGluZ0xlbmd0aCA+PSAwKTsKKyAgICAgICAgICAgIEFTU0VSVChtaXNzcGVsbGluZ0xv
Y2F0aW9uID49IC0xKTsKKyAgICAgICAgICAgIEFTU0VSVCghbWlzc3BlbGxpbmdMZW5ndGggfHwg
bWlzc3BlbGxpbmdMb2NhdGlvbiA+PSAwKTsKKyAgICAgICAgICAgIEFTU0VSVChtaXNzcGVsbGlu
Z0xvY2F0aW9uIDwgbGVuKTsKKyAgICAgICAgICAgIEFTU0VSVChtaXNzcGVsbGluZ0xlbmd0aCA8
PSBsZW4pOworICAgICAgICAgICAgQVNTRVJUKG1pc3NwZWxsaW5nTG9jYXRpb24gKyBtaXNzcGVs
bGluZ0xlbmd0aCA8PSBsZW4pOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAobWlzc3Bl
bGxpbmdMb2NhdGlvbiA+PSAwICYmIG1pc3NwZWxsaW5nTGVuZ3RoID4gMCAmJiBtaXNzcGVsbGlu
Z0xvY2F0aW9uIDwgbGVuICYmIG1pc3NwZWxsaW5nTGVuZ3RoIDw9IGxlbiAmJiBtaXNzcGVsbGlu
Z0xvY2F0aW9uICsgbWlzc3BlbGxpbmdMZW5ndGggPD0gbGVuKSB7CisgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgLy8gQ29tcHV0ZSByYW5nZSBvZiBtaXNzcGVsbGVkIHdvcmQKKyAg
ICAgICAgICAgICAgICBSZWZQdHI8UmFuZ2U+IG1pc3NwZWxsaW5nUmFuZ2UgPSBUZXh0SXRlcmF0
b3I6OnN1YnJhbmdlKG1fcmFuZ2UuZ2V0KCksIGN1cnJlbnRDaHVua09mZnNldCArIG1pc3NwZWxs
aW5nTG9jYXRpb24sIG1pc3NwZWxsaW5nTGVuZ3RoKTsKKworICAgICAgICAgICAgICAgIC8vIFJl
bWVtYmVyIGZpcnN0LWVuY291bnRlcmVkIG1pc3NwZWxsaW5nIGFuZCBpdHMgb2Zmc2V0LgorICAg
ICAgICAgICAgICAgIGlmICghZmlyc3RNaXNzcGVsbGluZykgeworICAgICAgICAgICAgICAgICAg
ICBmaXJzdE1pc3NwZWxsaW5nT2Zmc2V0ID0gY3VycmVudENodW5rT2Zmc2V0ICsgbWlzc3BlbGxp
bmdMb2NhdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgZmlyc3RNaXNzcGVsbGluZyA9IFN0cmlu
ZyhjaGFycyArIG1pc3NwZWxsaW5nTG9jYXRpb24sIG1pc3NwZWxsaW5nTGVuZ3RoKTsKKyAgICAg
ICAgICAgICAgICAgICAgZmlyc3RNaXNzcGVsbGluZ1JhbmdlID0gbWlzc3BlbGxpbmdSYW5nZTsK
KyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBTdG9yZSBtYXJrZXIgZm9y
IG1pc3NwZWxsZWQgd29yZC4KKyAgICAgICAgICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsK
KyAgICAgICAgICAgICAgICBtaXNzcGVsbGluZ1JhbmdlLT5zdGFydENvbnRhaW5lcihlYyktPmRv
Y3VtZW50KCktPm1hcmtlcnMoKS0+YWRkTWFya2VyKG1pc3NwZWxsaW5nUmFuZ2UuZ2V0KCksIERv
Y3VtZW50TWFya2VyOjpTcGVsbGluZyk7CisgICAgICAgICAgICAgICAgQVNTRVJUKCFlYyk7CisK
KyAgICAgICAgICAgICAgICAvLyBCYWlsIG91dCBpZiB3ZSdyZSBtYXJraW5nIG9ubHkgdGhlIGZp
cnN0IG1pc3NwZWxsaW5nLCBhbmQgbm90IGFsbCBpbnN0YW5jZXMuCisgICAgICAgICAgICAgICAg
aWYgKCFtYXJrQWxsKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgY3VycmVudENodW5rT2Zmc2V0ICs9IGxlbjsK
KyAgICAgICAgaXQuYWR2YW5jZSgpOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gZmlyc3RNaXNz
cGVsbGluZzsKK30KKworU3RyaW5nIFJhbmdlTWFya2VyQ29udHJvbGxlcjo6ZmluZEZpcnN0TWlz
c3BlbGxpbmdPckJhZEdyYW1tYXIoYm9vbCBjaGVja0dyYW1tYXIsIGJvb2wmIG91dElzU3BlbGxp
bmcsIGludCYgb3V0Rmlyc3RGb3VuZE9mZnNldCwgR3JhbW1hckRldGFpbCYgb3V0R3JhbW1hckRl
dGFpbCkKK3sKKyNpZiBQTEFURk9STShNQUMpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VS
KSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKQorICAgIFN0cmluZyBmaXJzdEZvdW5k
SXRlbTsKKyAgICBTdHJpbmcgbWlzc3BlbGxlZFdvcmQ7CisgICAgU3RyaW5nIGJhZEdyYW1tYXJQ
aHJhc2U7CisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgCisgICAgLy8gSW5pdGlhbGl6
ZSBvdXQgcGFyYW1ldGVyczsgdGhlc2Ugd2lsbCBiZSB1cGRhdGVkIGlmIHdlIGZpbmQgc29tZXRo
aW5nIHRvIHJldHVybi4KKyAgICBvdXRJc1NwZWxsaW5nID0gdHJ1ZTsKKyAgICBvdXRGaXJzdEZv
dW5kT2Zmc2V0ID0gMDsKKyAgICBvdXRHcmFtbWFyRGV0YWlsLmxvY2F0aW9uID0gLTE7CisgICAg
b3V0R3JhbW1hckRldGFpbC5sZW5ndGggPSAwOworICAgIG91dEdyYW1tYXJEZXRhaWwuZ3Vlc3Nl
cy5jbGVhcigpOworICAgIG91dEdyYW1tYXJEZXRhaWwudXNlckRlc2NyaXB0aW9uID0gIiI7Cisg
ICAgCisgICAgLy8gRXhwYW5kIHRoZSBzZWFyY2ggcmFuZ2UgdG8gZW5jb21wYXNzIGVudGlyZSBw
YXJhZ3JhcGhzLCBzaW5jZSB0ZXh0IGNoZWNraW5nIG5lZWRzIHRoYXQgbXVjaCBjb250ZXh0Lgor
ICAgIC8vIERldGVybWluZSB0aGUgY2hhcmFjdGVyIG9mZnNldCBmcm9tIHRoZSBzdGFydCBvZiB0
aGUgcGFyYWdyYXBoIHRvIHRoZSBzdGFydCBvZiB0aGUgb3JpZ2luYWwgc2VhcmNoIHJhbmdlLAor
ICAgIC8vIHNpbmNlIHdlIHdpbGwgd2FudCB0byBpZ25vcmUgcmVzdWx0cyBpbiB0aGlzIGFyZWEu
CisgICAgUmVmUHRyPFJhbmdlPiBwYXJhZ3JhcGhSYW5nZSA9IG1fcmFuZ2UtPmNsb25lUmFuZ2Uo
ZWMpOworICAgIHNldFN0YXJ0KHBhcmFncmFwaFJhbmdlLmdldCgpLCBzdGFydE9mUGFyYWdyYXBo
KG1fcmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSkpOworICAgIGludCB0b3RhbFJhbmdlTGVuZ3RoID0g
VGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChwYXJhZ3JhcGhSYW5nZS5nZXQoKSk7CisgICAgc2V0
RW5kKHBhcmFncmFwaFJhbmdlLmdldCgpLCBlbmRPZlBhcmFncmFwaChtX3JhbmdlLT5zdGFydFBv
c2l0aW9uKCkpKTsKKyAgICAKKyAgICBSZWZQdHI8UmFuZ2U+IG9mZnNldEFzUmFuZ2UgPSBSYW5n
ZTo6Y3JlYXRlKHBhcmFncmFwaFJhbmdlLT5zdGFydENvbnRhaW5lcihlYyktPmRvY3VtZW50KCks
IHBhcmFncmFwaFJhbmdlLT5zdGFydFBvc2l0aW9uKCksIG1fcmFuZ2UtPnN0YXJ0UG9zaXRpb24o
KSk7CisgICAgaW50IHJhbmdlU3RhcnRPZmZzZXQgPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3Ro
KG9mZnNldEFzUmFuZ2UuZ2V0KCkpOworICAgIGludCB0b3RhbExlbmd0aFByb2Nlc3NlZCA9IDA7
CisgICAgCisgICAgYm9vbCBmaXJzdEl0ZXJhdGlvbiA9IHRydWU7CisgICAgYm9vbCBsYXN0SXRl
cmF0aW9uID0gZmFsc2U7CisgICAgd2hpbGUgKHRvdGFsTGVuZ3RoUHJvY2Vzc2VkIDwgdG90YWxS
YW5nZUxlbmd0aCkgeworICAgICAgICAvLyBJdGVyYXRlIHRocm91Z2ggdGhlIHNlYXJjaCByYW5n
ZSBieSBwYXJhZ3JhcGhzLCBjaGVja2luZyBlYWNoIG9uZSBmb3Igc3BlbGxpbmcgYW5kIGdyYW1t
YXIuCisgICAgICAgIGludCBjdXJyZW50TGVuZ3RoID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0
aChwYXJhZ3JhcGhSYW5nZS5nZXQoKSk7CisgICAgICAgIGludCBjdXJyZW50U3RhcnRPZmZzZXQg
PSBmaXJzdEl0ZXJhdGlvbiA/IHJhbmdlU3RhcnRPZmZzZXQgOiAwOworICAgICAgICBpbnQgY3Vy
cmVudEVuZE9mZnNldCA9IGN1cnJlbnRMZW5ndGg7CisgICAgICAgIGlmIChpblNhbWVQYXJhZ3Jh
cGgocGFyYWdyYXBoUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSwgbV9yYW5nZS0+ZW5kUG9zaXRpb24o
KSkpIHsKKyAgICAgICAgICAgIC8vIERldGVybWluZSB0aGUgY2hhcmFjdGVyIG9mZnNldCBmcm9t
IHRoZSBlbmQgb2YgdGhlIG9yaWdpbmFsIHNlYXJjaCByYW5nZSB0byB0aGUgZW5kIG9mIHRoZSBw
YXJhZ3JhcGgsCisgICAgICAgICAgICAvLyBzaW5jZSB3ZSB3aWxsIHdhbnQgdG8gaWdub3JlIHJl
c3VsdHMgaW4gdGhpcyBhcmVhLgorICAgICAgICAgICAgUmVmUHRyPFJhbmdlPiBlbmRPZmZzZXRB
c1JhbmdlID0gUmFuZ2U6OmNyZWF0ZShwYXJhZ3JhcGhSYW5nZS0+c3RhcnRDb250YWluZXIoZWMp
LT5kb2N1bWVudCgpLCBwYXJhZ3JhcGhSYW5nZS0+c3RhcnRQb3NpdGlvbigpLCBtX3JhbmdlLT5l
bmRQb3NpdGlvbigpKTsKKyAgICAgICAgICAgIGN1cnJlbnRFbmRPZmZzZXQgPSBUZXh0SXRlcmF0
b3I6OnJhbmdlTGVuZ3RoKGVuZE9mZnNldEFzUmFuZ2UuZ2V0KCkpOworICAgICAgICAgICAgbGFz
dEl0ZXJhdGlvbiA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGN1cnJlbnRTdGFydE9m
ZnNldCA8IGN1cnJlbnRFbmRPZmZzZXQpIHsKKyAgICAgICAgICAgIFN0cmluZyBwYXJhZ3JhcGhT
dHJpbmcgPSBwbGFpblRleHQocGFyYWdyYXBoUmFuZ2UuZ2V0KCkpOworICAgICAgICAgICAgaWYg
KHBhcmFncmFwaFN0cmluZy5sZW5ndGgoKSA+IDApIHsKKyAgICAgICAgICAgICAgICBib29sIGZv
dW5kR3JhbW1hciA9IGZhbHNlOworICAgICAgICAgICAgICAgIGludCBzcGVsbGluZ0xvY2F0aW9u
ID0gMDsKKyAgICAgICAgICAgICAgICBpbnQgZ3JhbW1hclBocmFzZUxvY2F0aW9uID0gMDsKKyAg
ICAgICAgICAgICAgICBpbnQgZ3JhbW1hckRldGFpbExvY2F0aW9uID0gMDsKKyAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBncmFtbWFyRGV0YWlsSW5kZXggPSAwOworICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IHJlc3VsdHM7CisgICAg
ICAgICAgICAgICAgdWludDY0X3QgY2hlY2tpbmdUeXBlcyA9IGNoZWNrR3JhbW1hciA/IChUZXh0
Q2hlY2tpbmdUeXBlU3BlbGxpbmcgfCBUZXh0Q2hlY2tpbmdUeXBlR3JhbW1hcikgOiBUZXh0Q2hl
Y2tpbmdUeXBlU3BlbGxpbmc7CisgICAgICAgICAgICAgICAgbV9jbGllbnQtPmNoZWNrVGV4dE9m
UGFyYWdyYXBoKHBhcmFncmFwaFN0cmluZy5jaGFyYWN0ZXJzKCksIHBhcmFncmFwaFN0cmluZy5s
ZW5ndGgoKSwgY2hlY2tpbmdUeXBlcywgcmVzdWx0cyk7CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlc3VsdHMuc2l6ZSgpOyBpKysp
IHsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgVGV4dENoZWNraW5nUmVzdWx0KiByZXN1bHQg
PSAmcmVzdWx0c1tpXTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC0+dHlwZSA9PSBU
ZXh0Q2hlY2tpbmdUeXBlU3BlbGxpbmcgJiYgcmVzdWx0LT5sb2NhdGlvbiA+PSBjdXJyZW50U3Rh
cnRPZmZzZXQgJiYgcmVzdWx0LT5sb2NhdGlvbiArIHJlc3VsdC0+bGVuZ3RoIDw9IGN1cnJlbnRF
bmRPZmZzZXQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChyZXN1bHQtPmxlbmd0
aCA+IDAgJiYgcmVzdWx0LT5sb2NhdGlvbiA+PSAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHNwZWxsaW5nTG9jYXRpb24gPSByZXN1bHQtPmxvY2F0aW9uOworICAgICAgICAgICAgICAgICAg
ICAgICAgbWlzc3BlbGxlZFdvcmQgPSBwYXJhZ3JhcGhTdHJpbmcuc3Vic3RyaW5nKHJlc3VsdC0+
bG9jYXRpb24sIHJlc3VsdC0+bGVuZ3RoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VS
VChtaXNzcGVsbGVkV29yZC5sZW5ndGgoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAoY2hlY2tH
cmFtbWFyICYmIHJlc3VsdC0+dHlwZSA9PSBUZXh0Q2hlY2tpbmdUeXBlR3JhbW1hciAmJiByZXN1
bHQtPmxvY2F0aW9uIDwgY3VycmVudEVuZE9mZnNldCAmJiByZXN1bHQtPmxvY2F0aW9uICsgcmVz
dWx0LT5sZW5ndGggPiBjdXJyZW50U3RhcnRPZmZzZXQpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIEFTU0VSVChyZXN1bHQtPmxlbmd0aCA+IDAgJiYgcmVzdWx0LT5sb2NhdGlvbiA+PSAwKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIGNhbid0IHN0b3AgYWZ0ZXIgdGhlIGZpcnN0
IGdyYW1tYXIgcmVzdWx0LCBzaW5jZSB0aGVyZSBtaWdodCBzdGlsbCBiZSBhIHNwZWxsaW5nIHJl
c3VsdCBhZnRlcgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gaXQgYmVnaW5zIGJ1dCBiZWZv
cmUgdGhlIGZpcnN0IGRldGFpbCBpbiBpdCwgYnV0IHdlIGNhbiBzdG9wIGlmIHdlIGZpbmQgYSBz
ZWNvbmQgZ3JhbW1hciByZXN1bHQuCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm91bmRH
cmFtbWFyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IHJlc3VsdC0+ZGV0YWlscy5zaXpl
KCk7IGorKykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdyYW1tYXJEZXRh
aWwqIGRldGFpbCA9ICZyZXN1bHQtPmRldGFpbHNbal07CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQVNTRVJUKGRldGFpbC0+bGVuZ3RoID4gMCAmJiBkZXRhaWwtPmxvY2F0aW9uID49IDAp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQtPmxvY2F0aW9uICsgZGV0
YWlsLT5sb2NhdGlvbiA+PSBjdXJyZW50U3RhcnRPZmZzZXQgJiYgcmVzdWx0LT5sb2NhdGlvbiAr
IGRldGFpbC0+bG9jYXRpb24gKyBkZXRhaWwtPmxlbmd0aCA8PSBjdXJyZW50RW5kT2Zmc2V0ICYm
ICghZm91bmRHcmFtbWFyIHx8IHJlc3VsdC0+bG9jYXRpb24gKyBkZXRhaWwtPmxvY2F0aW9uIDwg
Z3JhbW1hckRldGFpbExvY2F0aW9uKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBncmFtbWFyRGV0YWlsSW5kZXggPSBqOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBncmFtbWFyRGV0YWlsTG9jYXRpb24gPSByZXN1bHQtPmxvY2F0aW9uICsgZGV0YWlsLT5sb2Nh
dGlvbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRHcmFtbWFyID0gdHJ1
ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm91bmRHcmFtbWFyKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZ3JhbW1hclBocmFzZUxvY2F0aW9uID0gcmVzdWx0LT5sb2Nh
dGlvbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRHcmFtbWFyRGV0YWlsID0gcmVz
dWx0LT5kZXRhaWxzW2dyYW1tYXJEZXRhaWxJbmRleF07CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYmFkR3JhbW1hclBocmFzZSA9IHBhcmFncmFwaFN0cmluZy5zdWJzdHJpbmcocmVzdWx0
LT5sb2NhdGlvbiwgcmVzdWx0LT5sZW5ndGgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEFTU0VSVChiYWRHcmFtbWFyUGhyYXNlLmxlbmd0aCgpKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgIGlmICghbWlzc3BlbGxlZFdvcmQuaXNFbXB0eSgpICYmICghY2hlY2tHcmFtbWFy
IHx8IGJhZEdyYW1tYXJQaHJhc2UuaXNFbXB0eSgpIHx8IHNwZWxsaW5nTG9jYXRpb24gPD0gZ3Jh
bW1hckRldGFpbExvY2F0aW9uKSkgeworICAgICAgICAgICAgICAgICAgICBpbnQgc3BlbGxpbmdP
ZmZzZXQgPSBzcGVsbGluZ0xvY2F0aW9uIC0gY3VycmVudFN0YXJ0T2Zmc2V0OworICAgICAgICAg
ICAgICAgICAgICBpZiAoIWZpcnN0SXRlcmF0aW9uKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBSZWZQdHI8UmFuZ2U+IHBhcmFncmFwaE9mZnNldEFzUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKHBh
cmFncmFwaFJhbmdlLT5zdGFydENvbnRhaW5lcihlYyktPmRvY3VtZW50KCksIG1fcmFuZ2UtPnN0
YXJ0UG9zaXRpb24oKSwgcGFyYWdyYXBoUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBzcGVsbGluZ09mZnNldCArPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVu
Z3RoKHBhcmFncmFwaE9mZnNldEFzUmFuZ2UuZ2V0KCkpOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIG91dElzU3BlbGxpbmcgPSB0cnVlOworICAgICAgICAgICAg
ICAgICAgICBvdXRGaXJzdEZvdW5kT2Zmc2V0ID0gc3BlbGxpbmdPZmZzZXQ7CisgICAgICAgICAg
ICAgICAgICAgIGZpcnN0Rm91bmRJdGVtID0gbWlzc3BlbGxlZFdvcmQ7CisgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoY2hl
Y2tHcmFtbWFyICYmICFiYWRHcmFtbWFyUGhyYXNlLmlzRW1wdHkoKSkgeworICAgICAgICAgICAg
ICAgICAgICBpbnQgZ3JhbW1hclBocmFzZU9mZnNldCA9IGdyYW1tYXJQaHJhc2VMb2NhdGlvbiAt
IGN1cnJlbnRTdGFydE9mZnNldDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFmaXJzdEl0ZXJh
dGlvbikgeworICAgICAgICAgICAgICAgICAgICAgICAgUmVmUHRyPFJhbmdlPiBwYXJhZ3JhcGhP
ZmZzZXRBc1JhbmdlID0gUmFuZ2U6OmNyZWF0ZShwYXJhZ3JhcGhSYW5nZS0+c3RhcnRDb250YWlu
ZXIoZWMpLT5kb2N1bWVudCgpLCBtX3JhbmdlLT5zdGFydFBvc2l0aW9uKCksIHBhcmFncmFwaFJh
bmdlLT5zdGFydFBvc2l0aW9uKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgZ3JhbW1hclBo
cmFzZU9mZnNldCArPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKHBhcmFncmFwaE9mZnNldEFz
UmFuZ2UuZ2V0KCkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IG91dElzU3BlbGxpbmcgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgb3V0Rmlyc3RGb3Vu
ZE9mZnNldCA9IGdyYW1tYXJQaHJhc2VPZmZzZXQ7CisgICAgICAgICAgICAgICAgICAgIGZpcnN0
Rm91bmRJdGVtID0gYmFkR3JhbW1hclBocmFzZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlm
IChsYXN0SXRlcmF0aW9uIHx8IHRvdGFsTGVuZ3RoUHJvY2Vzc2VkICsgY3VycmVudExlbmd0aCA+
PSB0b3RhbFJhbmdlTGVuZ3RoKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIFZpc2libGVQ
b3NpdGlvbiBuZXdQYXJhZ3JhcGhTdGFydCA9IHN0YXJ0T2ZOZXh0UGFyYWdyYXBoKHBhcmFncmFw
aFJhbmdlLT5lbmRQb3NpdGlvbigpKTsKKyAgICAgICAgc2V0U3RhcnQocGFyYWdyYXBoUmFuZ2Uu
Z2V0KCksIG5ld1BhcmFncmFwaFN0YXJ0KTsKKyAgICAgICAgc2V0RW5kKHBhcmFncmFwaFJhbmdl
LmdldCgpLCBlbmRPZlBhcmFncmFwaChuZXdQYXJhZ3JhcGhTdGFydCkpOworICAgICAgICBmaXJz
dEl0ZXJhdGlvbiA9IGZhbHNlOworICAgICAgICB0b3RhbExlbmd0aFByb2Nlc3NlZCArPSBjdXJy
ZW50TGVuZ3RoOworICAgIH0KKyAgICByZXR1cm4gZmlyc3RGb3VuZEl0ZW07CisjZWxzZQorICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIFVOVVNFRF9QQVJBTShmaXJzdE1pc3NwZWxsaW5n
T2Zmc2V0KTsKKyAgICBVTlVTRURfUEFSQU0obWFya0FsbCk7CisgICAgVU5VU0VEX1BBUkFNKGZp
cnN0TWlzc3BlbGxpbmdSYW5nZSk7CisgICAgcmV0dXJuICIiOworI2VuZGlmCit9CisKK2ludCBS
YW5nZU1hcmtlckNvbnRyb2xsZXI6OmZpbmRGaXJzdEdyYW1tYXJEZXRhaWwoY29uc3QgVmVjdG9y
PEdyYW1tYXJEZXRhaWw+JiBncmFtbWFyRGV0YWlscywgaW50IGJhZEdyYW1tYXJQaHJhc2VMb2Nh
dGlvbiwgaW50IC8qYmFkR3JhbW1hclBocmFzZUxlbmd0aCovLCBpbnQgc3RhcnRPZmZzZXQsIGlu
dCBlbmRPZmZzZXQsIGJvb2wgbWFya0FsbCkKK3sKKyNpZm5kZWYgQlVJTERJTkdfT05fVElHRVIK
KyAgICAvLyBGb3VuZCBzb21lIGJhZCBncmFtbWFyLiBGaW5kIHRoZSBlYXJsaWVzdCBkZXRhaWwg
cmFuZ2UgdGhhdCBzdGFydHMgaW4gb3VyIHNlYXJjaCByYW5nZSAoaWYgYW55KS4KKyAgICAvLyBP
cHRpb25hbGx5IGFkZCBhIERvY3VtZW50TWFya2VyIGZvciBlYWNoIGRldGFpbCBpbiB0aGUgcmFu
Z2UuCisgICAgaW50IGVhcmxpZXN0RGV0YWlsTG9jYXRpb25Tb0ZhciA9IC0xOworICAgIGludCBl
YXJsaWVzdERldGFpbEluZGV4ID0gLTE7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGdy
YW1tYXJEZXRhaWxzLnNpemUoKTsgaSsrKSB7CisgICAgICAgIGNvbnN0IEdyYW1tYXJEZXRhaWwq
IGRldGFpbCA9ICZncmFtbWFyRGV0YWlsc1tpXTsKKyAgICAgICAgQVNTRVJUKGRldGFpbC0+bGVu
Z3RoID4gMCAmJiBkZXRhaWwtPmxvY2F0aW9uID49IDApOworICAgICAgICAKKyAgICAgICAgaW50
IGRldGFpbFN0YXJ0T2Zmc2V0SW5QYXJhZ3JhcGggPSBiYWRHcmFtbWFyUGhyYXNlTG9jYXRpb24g
KyBkZXRhaWwtPmxvY2F0aW9uOworICAgICAgICAKKyAgICAgICAgLy8gU2tpcCB0aGlzIGRldGFp
bCBpZiBpdCBzdGFydHMgYmVmb3JlIHRoZSBvcmlnaW5hbCBzZWFyY2ggcmFuZ2UKKyAgICAgICAg
aWYgKGRldGFpbFN0YXJ0T2Zmc2V0SW5QYXJhZ3JhcGggPCBzdGFydE9mZnNldCkKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAKKyAgICAgICAgLy8gU2tpcCB0aGlzIGRldGFpbCBpZiBp
dCBzdGFydHMgYWZ0ZXIgdGhlIG9yaWdpbmFsIHNlYXJjaCByYW5nZQorICAgICAgICBpZiAoZGV0
YWlsU3RhcnRPZmZzZXRJblBhcmFncmFwaCA+PSBlbmRPZmZzZXQpCisgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgCisgICAgICAgIGlmIChtYXJrQWxsKSB7CisgICAgICAgICAgICBSZWZQ
dHI8UmFuZ2U+IGJhZEdyYW1tYXJSYW5nZSA9IFRleHRJdGVyYXRvcjo6c3VicmFuZ2UobV9yYW5n
ZS5nZXQoKSwgYmFkR3JhbW1hclBocmFzZUxvY2F0aW9uIC0gc3RhcnRPZmZzZXQgKyBkZXRhaWwt
PmxvY2F0aW9uLCBkZXRhaWwtPmxlbmd0aCk7CisgICAgICAgICAgICBFeGNlcHRpb25Db2RlIGVj
ID0gMDsKKyAgICAgICAgICAgIGJhZEdyYW1tYXJSYW5nZS0+c3RhcnRDb250YWluZXIoZWMpLT5k
b2N1bWVudCgpLT5tYXJrZXJzKCktPmFkZE1hcmtlcihiYWRHcmFtbWFyUmFuZ2UuZ2V0KCksIERv
Y3VtZW50TWFya2VyOjpHcmFtbWFyLCBkZXRhaWwtPnVzZXJEZXNjcmlwdGlvbik7CisgICAgICAg
ICAgICBBU1NFUlQoIWVjKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gUmVtZW1i
ZXIgdGhpcyBkZXRhaWwgb25seSBpZiBpdCdzIGVhcmxpZXIgdGhhbiBvdXIgY3VycmVudCBjYW5k
aWRhdGUgKHRoZSBkZXRhaWxzIGFyZW4ndCBpbiBhIGd1YXJhbnRlZWQgb3JkZXIpCisgICAgICAg
IGlmIChlYXJsaWVzdERldGFpbEluZGV4IDwgMCB8fCBlYXJsaWVzdERldGFpbExvY2F0aW9uU29G
YXIgPiBkZXRhaWwtPmxvY2F0aW9uKSB7CisgICAgICAgICAgICBlYXJsaWVzdERldGFpbEluZGV4
ID0gaTsKKyAgICAgICAgICAgIGVhcmxpZXN0RGV0YWlsTG9jYXRpb25Tb0ZhciA9IGRldGFpbC0+
bG9jYXRpb247CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgcmV0dXJuIGVhcmxpZXN0RGV0
YWlsSW5kZXg7CisjZWxzZQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIFVOVVNFRF9Q
QVJBTShncmFtbWFyRGV0YWlscyk7CisgICAgVU5VU0VEX1BBUkFNKGJhZEdyYW1tYXJQaHJhc2VM
b2NhdGlvbik7CisgICAgVU5VU0VEX1BBUkFNKHN0YXJ0T2Zmc2V0KTsKKyAgICBVTlVTRURfUEFS
QU0oZW5kT2Zmc2V0KTsKKyAgICBVTlVTRURfUEFSQU0obWFya0FsbCk7CisgICAgcmV0dXJuIDA7
CisjZW5kaWYKK30KKworU3RyaW5nIFJhbmdlTWFya2VyQ29udHJvbGxlcjo6ZmluZEZpcnN0QmFk
R3JhbW1hcihHcmFtbWFyRGV0YWlsJiBvdXRHcmFtbWFyRGV0YWlsLCBpbnQmIG91dEdyYW1tYXJQ
aHJhc2VPZmZzZXQsIGJvb2wgbWFya0FsbCkKK3sKKyNpZm5kZWYgQlVJTERJTkdfT05fVElHRVIK
KyAgICAvLyBJbml0aWFsaXplIG91dCBwYXJhbWV0ZXJzOyB0aGVzZSB3aWxsIGJlIHVwZGF0ZWQg
aWYgd2UgZmluZCBzb21ldGhpbmcgdG8gcmV0dXJuLgorICAgIG91dEdyYW1tYXJEZXRhaWwubG9j
YXRpb24gPSAtMTsKKyAgICBvdXRHcmFtbWFyRGV0YWlsLmxlbmd0aCA9IDA7CisgICAgb3V0R3Jh
bW1hckRldGFpbC5ndWVzc2VzLmNsZWFyKCk7CisgICAgb3V0R3JhbW1hckRldGFpbC51c2VyRGVz
Y3JpcHRpb24gPSAiIjsKKyAgICBvdXRHcmFtbWFyUGhyYXNlT2Zmc2V0ID0gMDsKKyAgICAKKyAg
ICBTdHJpbmcgZmlyc3RCYWRHcmFtbWFyUGhyYXNlOworCisgICAgLy8gRXhwYW5kIHRoZSBzZWFy
Y2ggcmFuZ2UgdG8gZW5jb21wYXNzIGVudGlyZSBwYXJhZ3JhcGhzLCBzaW5jZSBncmFtbWFyIGNo
ZWNraW5nIG5lZWRzIHRoYXQgbXVjaCBjb250ZXh0LgorICAgIC8vIERldGVybWluZSB0aGUgY2hh
cmFjdGVyIG9mZnNldCBmcm9tIHRoZSBzdGFydCBvZiB0aGUgcGFyYWdyYXBoIHRvIHRoZSBzdGFy
dCBvZiB0aGUgb3JpZ2luYWwgc2VhcmNoIHJhbmdlLAorICAgIC8vIHNpbmNlIHdlIHdpbGwgd2Fu
dCB0byBpZ25vcmUgcmVzdWx0cyBpbiB0aGlzIGFyZWEuCisgICAgaW50IHNlYXJjaFJhbmdlU3Rh
cnRPZmZzZXQ7CisgICAgU3RyaW5nIHBhcmFncmFwaFN0cmluZzsKKyAgICBSZWZQdHI8UmFuZ2U+
IHBhcmFncmFwaFJhbmdlID0gcGFyYWdyYXBoQWxpZ25lZFJhbmdlKHNlYXJjaFJhbmdlU3RhcnRP
ZmZzZXQsIHBhcmFncmFwaFN0cmluZyk7CisgICAgICAgIAorICAgIC8vIERldGVybWluZSB0aGUg
Y2hhcmFjdGVyIG9mZnNldCBmcm9tIHRoZSBzdGFydCBvZiB0aGUgcGFyYWdyYXBoIHRvIHRoZSBl
bmQgb2YgdGhlIG9yaWdpbmFsIHNlYXJjaCByYW5nZSwgCisgICAgLy8gc2luY2Ugd2Ugd2lsbCB3
YW50IHRvIGlnbm9yZSByZXN1bHRzIGluIHRoaXMgYXJlYSBhbHNvLgorICAgIGludCBzZWFyY2hS
YW5nZUVuZE9mZnNldCA9IHNlYXJjaFJhbmdlU3RhcnRPZmZzZXQgKyBUZXh0SXRlcmF0b3I6OnJh
bmdlTGVuZ3RoKG1fcmFuZ2UuZ2V0KCkpOworICAgICAgICAKKyAgICAvLyBTdGFydCBjaGVja2lu
ZyBmcm9tIGJlZ2lubmluZyBvZiBwYXJhZ3JhcGgsIGJ1dCBza2lwIHBhc3QgcmVzdWx0cyB0aGF0
IG9jY3VyIGJlZm9yZSB0aGUgc3RhcnQgb2YgdGhlIG9yaWdpbmFsIHNlYXJjaCByYW5nZS4KKyAg
ICBpbnQgc3RhcnRPZmZzZXQgPSAwOworICAgIHdoaWxlIChzdGFydE9mZnNldCA8IHNlYXJjaFJh
bmdlRW5kT2Zmc2V0KSB7CisgICAgICAgIFZlY3RvcjxHcmFtbWFyRGV0YWlsPiBncmFtbWFyRGV0
YWlsczsKKyAgICAgICAgaW50IGJhZEdyYW1tYXJQaHJhc2VMb2NhdGlvbiA9IC0xOworICAgICAg
ICBpbnQgYmFkR3JhbW1hclBocmFzZUxlbmd0aCA9IDA7CisgICAgICAgIG1fY2xpZW50LT5jaGVj
a0dyYW1tYXJPZlN0cmluZyhwYXJhZ3JhcGhTdHJpbmcuY2hhcmFjdGVycygpICsgc3RhcnRPZmZz
ZXQsIHBhcmFncmFwaFN0cmluZy5sZW5ndGgoKSAtIHN0YXJ0T2Zmc2V0LCBncmFtbWFyRGV0YWls
cywgJmJhZEdyYW1tYXJQaHJhc2VMb2NhdGlvbiwgJmJhZEdyYW1tYXJQaHJhc2VMZW5ndGgpOwor
ICAgICAgICAKKyAgICAgICAgaWYgKCFiYWRHcmFtbWFyUGhyYXNlTGVuZ3RoKSB7CisgICAgICAg
ICAgICBBU1NFUlQoYmFkR3JhbW1hclBocmFzZUxvY2F0aW9uID09IC0xKTsKKyAgICAgICAgICAg
IHJldHVybiBTdHJpbmcoKTsKKyAgICAgICAgfQorCisgICAgICAgIEFTU0VSVChiYWRHcmFtbWFy
UGhyYXNlTG9jYXRpb24gPj0gMCk7CisgICAgICAgIGJhZEdyYW1tYXJQaHJhc2VMb2NhdGlvbiAr
PSBzdGFydE9mZnNldDsKKworICAgICAgICAKKyAgICAgICAgLy8gRm91bmQgc29tZSBiYWQgZ3Jh
bW1hci4gRmluZCB0aGUgZWFybGllc3QgZGV0YWlsIHJhbmdlIHRoYXQgc3RhcnRzIGluIG91ciBz
ZWFyY2ggcmFuZ2UgKGlmIGFueSkuCisgICAgICAgIGludCBiYWRHcmFtbWFySW5kZXggPSBmaW5k
Rmlyc3RHcmFtbWFyRGV0YWlsKGdyYW1tYXJEZXRhaWxzLCBiYWRHcmFtbWFyUGhyYXNlTG9jYXRp
b24sIGJhZEdyYW1tYXJQaHJhc2VMZW5ndGgsIHNlYXJjaFJhbmdlU3RhcnRPZmZzZXQsIHNlYXJj
aFJhbmdlRW5kT2Zmc2V0LCBtYXJrQWxsKTsKKyAgICAgICAgaWYgKGJhZEdyYW1tYXJJbmRleCA+
PSAwKSB7CisgICAgICAgICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGJhZEdyYW1t
YXJJbmRleCkgPCBncmFtbWFyRGV0YWlscy5zaXplKCkpOworICAgICAgICAgICAgb3V0R3JhbW1h
ckRldGFpbCA9IGdyYW1tYXJEZXRhaWxzW2JhZEdyYW1tYXJJbmRleF07CisgICAgICAgIH0KKwor
ICAgICAgICAvLyBJZiB3ZSBmb3VuZCBhIGRldGFpbCBpbiByYW5nZSwgdGhlbiB3ZSBoYXZlIGZv
dW5kIHRoZSBmaXJzdCBiYWQgcGhyYXNlICh1bmxlc3Mgd2UgZm91bmQgb25lIGVhcmxpZXIgYnV0
CisgICAgICAgIC8vIGtlcHQgZ29pbmcgc28gd2UgY291bGQgbWFyayBhbGwgaW5zdGFuY2VzKS4K
KyAgICAgICAgaWYgKGJhZEdyYW1tYXJJbmRleCA+PSAwICYmIGZpcnN0QmFkR3JhbW1hclBocmFz
ZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIG91dEdyYW1tYXJQaHJhc2VPZmZzZXQgPSBiYWRH
cmFtbWFyUGhyYXNlTG9jYXRpb24gLSBzZWFyY2hSYW5nZVN0YXJ0T2Zmc2V0OworICAgICAgICAg
ICAgZmlyc3RCYWRHcmFtbWFyUGhyYXNlID0gcGFyYWdyYXBoU3RyaW5nLnN1YnN0cmluZyhiYWRH
cmFtbWFyUGhyYXNlTG9jYXRpb24sIGJhZEdyYW1tYXJQaHJhc2VMZW5ndGgpOworICAgICAgICAg
ICAgCisgICAgICAgICAgICAvLyBGb3VuZCBvbmUuIFdlJ3JlIGRvbmUgbm93LCB1bmxlc3Mgd2Un
cmUgbWFya2luZyBlYWNoIGluc3RhbmNlLgorICAgICAgICAgICAgaWYgKCFtYXJrQWxsKQorICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgLy8gVGhlc2UgcmVzdWx0
cyB3ZXJlIGFsbCBiZXR3ZWVuIHRoZSBzdGFydCBvZiB0aGUgcGFyYWdyYXBoIGFuZCB0aGUgc3Rh
cnQgb2YgdGhlIHNlYXJjaCByYW5nZTsgbG9vaworICAgICAgICAvLyBiZXlvbmQgdGhpcyBwaHJh
c2UuCisgICAgICAgIHN0YXJ0T2Zmc2V0ID0gYmFkR3JhbW1hclBocmFzZUxvY2F0aW9uICsgYmFk
R3JhbW1hclBocmFzZUxlbmd0aDsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIGZpcnN0QmFkR3Jh
bW1hclBocmFzZTsKKyNlbHNlCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgVU5VU0VE
X1BBUkFNKG91dEdyYW1tYXJEZXRhaWwpOworICAgIFVOVVNFRF9QQVJBTShvdXRHcmFtbWFyUGhy
YXNlT2Zmc2V0KTsKKyAgICBVTlVTRURfUEFSQU0obWFya0FsbCk7CisjZW5kaWYKK30KKworCiti
b29sIFJhbmdlTWFya2VyQ29udHJvbGxlcjo6aXNVbmdyYW1tYXRpY2FsKFZlY3RvcjxTdHJpbmc+
JiBndWVzc2VzVmVjdG9yKSBjb25zdAoreworI2lmbmRlZiBCVUlMRElOR19PTl9USUdFUgorICAg
IGlmICghbV9jbGllbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEV4Y2VwdGlvbkNv
ZGUgZWM7CisgICAgaWYgKCFtX3JhbmdlIHx8IG1fcmFuZ2UtPmNvbGxhcHNlZChlYykpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICAvLyBSZXR1cm5zIHRydWUgb25seSBpZiB0aGUg
cGFzc2VkIHJhbmdlIGV4YWN0bHkgY29ycmVzcG9uZHMgdG8gYSBiYWQgZ3JhbW1hciBkZXRhaWwg
cmFuZ2UuIFRoaXMgaXMgYW5hbG9nb3VzCisgICAgLy8gdG8gaXNTZWxlY3Rpb25NaXNzcGVsbGVk
LiBJdCdzIG5vdCBnb29kIGVub3VnaCBmb3IgdGhlcmUgdG8gYmUgc29tZSBiYWQgZ3JhbW1hciBz
b21ld2hlcmUgaW4gdGhlIHJhbmdlLAorICAgIC8vIG9yIG92ZXJsYXBwaW5nIHRoZSByYW5nZTsg
dGhlIHJhbmdlcyBtdXN0IGV4YWN0bHkgbWF0Y2guCisgICAgZ3Vlc3Nlc1ZlY3Rvci5jbGVhcigp
OworICAgIGludCBncmFtbWFyUGhyYXNlT2Zmc2V0OworICAgIAorICAgIEdyYW1tYXJEZXRhaWwg
Z3JhbW1hckRldGFpbDsKKyAgICBTdHJpbmcgYmFkR3JhbW1hclBocmFzZSA9IGNvbnN0X2Nhc3Q8
UmFuZ2VNYXJrZXJDb250cm9sbGVyKj4odGhpcyktPmZpbmRGaXJzdEJhZEdyYW1tYXIoZ3JhbW1h
ckRldGFpbCwgZ3JhbW1hclBocmFzZU9mZnNldCwgZmFsc2UpOyAgICAKKyAgICAKKyAgICAvLyBO
byBiYWQgZ3JhbW1hciBpbiB0aGVzZSBwYXJ0cyBhdCBhbGwuCisgICAgaWYgKGJhZEdyYW1tYXJQ
aHJhc2UuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgLy8gQmFk
IGdyYW1tYXIsIGJ1dCBwaHJhc2UgKGUuZy4gc2VudGVuY2UpIHN0YXJ0cyBiZXlvbmQgc3RhcnQg
b2YgcmFuZ2UuCisgICAgaWYgKGdyYW1tYXJQaHJhc2VPZmZzZXQgPiAwKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgCisgICAgQVNTRVJUKGdyYW1tYXJEZXRhaWwubG9jYXRpb24gPj0gMCAm
JiBncmFtbWFyRGV0YWlsLmxlbmd0aCA+IDApOworICAgIAorICAgIC8vIEJhZCBncmFtbWFyLCBi
dXQgc3RhcnQgb2YgZGV0YWlsIChlLmcuIHVuZ3JhbW1hdGljYWwgd29yZCkgZG9lc24ndCBtYXRj
aCBzdGFydCBvZiByYW5nZQorICAgIGlmIChncmFtbWFyRGV0YWlsLmxvY2F0aW9uICsgZ3JhbW1h
clBocmFzZU9mZnNldCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIC8vIEJhZCBn
cmFtbWFyIGF0IHN0YXJ0IG9mIHJhbmdlLCBidXQgZW5kIG9mIGJhZCBncmFtbWFyIGlzIGJlZm9y
ZSBvciBhZnRlciBlbmQgb2YgcmFuZ2UKKyAgICBpZiAoZ3JhbW1hckRldGFpbC5sZW5ndGggIT0g
VGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChtX3JhbmdlLmdldCgpKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIAorICAgIC8vIFVwZGF0ZSB0aGUgc3BlbGxpbmcgcGFuZWwgdG8gYmUgZGlz
cGxheWluZyB0aGlzIGVycm9yICh3aGV0aGVyIG9yIG5vdCB0aGUgc3BlbGxpbmcgcGFuZWwgaXMg
b24gc2NyZWVuKS4KKyAgICAvLyBUaGlzIGlzIG5lY2Vzc2FyeSB0byBtYWtlIGEgc3Vic2VxdWVu
dCBjYWxsIHRvIFtOU1NwZWxsQ2hlY2tlciBpZ25vcmVXb3JkOmluU3BlbGxEb2N1bWVudFdpdGhU
YWc6XSB3b3JrCisgICAgLy8gY29ycmVjdGx5OyB0aGF0IGNhbGwgYmVoYXZlcyBkaWZmZXJlbnRs
eSBiYXNlZCBvbiB3aGV0aGVyIHRoZSBzcGVsbGluZyBwYW5lbCBpcyBkaXNwbGF5aW5nIGEgbWlz
c3BlbGxpbmcKKyAgICAvLyBvciBhIGdyYW1tYXIgZXJyb3IuCisgICAgbV9jbGllbnQtPnVwZGF0
ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0cmluZyhiYWRHcmFtbWFyUGhyYXNlLCBncmFtbWFyRGV0
YWlsKTsKKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKKyNlbHNlCisgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgVU5VU0VEX1BBUkFNKGd1ZXNzZXNWZWN0b3IpOworICAgIHJldHVybiB0cnVl
OworI2VuZGlmCit9CisKK1ZlY3RvcjxTdHJpbmc+IFJhbmdlTWFya2VyQ29udHJvbGxlcjo6Z3Vl
c3Nlc0Zvck1pc3NwZWxsZWRPclVuZ3JhbW1hdGljYWxSYW5nZShib29sIGNoZWNrR3JhbW1hciwg
Ym9vbCYgbWlzc3BlbGxlZCwgYm9vbCYgdW5ncmFtbWF0aWNhbCkgY29uc3QKK3sKKyNpZiBQTEFU
Rk9STShNQUMpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlM
RElOR19PTl9MRU9QQVJEKQorICAgIFZlY3RvcjxTdHJpbmc+IGd1ZXNzZXM7CisgICAgRXhjZXB0
aW9uQ29kZSBlYzsKKyAgICBtaXNzcGVsbGVkID0gZmFsc2U7CisgICAgdW5ncmFtbWF0aWNhbCA9
IGZhbHNlOworICAgIAorICAgIGlmICghbV9jbGllbnQgfHwgIW1fcmFuZ2UgfHwgbV9yYW5nZS0+
Y29sbGFwc2VkKGVjKSkKKyAgICAgICAgcmV0dXJuIGd1ZXNzZXM7CisKKyAgICAvLyBFeHBhbmQg
dGhlIHJhbmdlIHRvIGVuY29tcGFzcyBlbnRpcmUgcGFyYWdyYXBocywgc2luY2UgdGV4dCBjaGVj
a2luZyBuZWVkcyB0aGF0IG11Y2ggY29udGV4dC4KKyAgICBpbnQgcmFuZ2VTdGFydE9mZnNldDsK
KyAgICBTdHJpbmcgcGFyYWdyYXBoU3RyaW5nOworICAgIFJlZlB0cjxSYW5nZT4gcGFyYWdyYXBo
UmFuZ2UgPSBwYXJhZ3JhcGhBbGlnbmVkUmFuZ2UocmFuZ2VTdGFydE9mZnNldCwgcGFyYWdyYXBo
U3RyaW5nKTsKKyAgICBpbnQgcmFuZ2VMZW5ndGggPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3Ro
KG1fcmFuZ2UuZ2V0KCkpOworICAgIGlmICghcmFuZ2VMZW5ndGggfHwgIXBhcmFncmFwaFN0cmlu
Zy5sZW5ndGgoKSkKKyAgICAgICAgcmV0dXJuIGd1ZXNzZXM7CisKKyAgICBWZWN0b3I8VGV4dENo
ZWNraW5nUmVzdWx0PiByZXN1bHRzOworICAgIHVpbnQ2NF90IGNoZWNraW5nVHlwZXMgPSBjaGVj
a0dyYW1tYXIgPyAoVGV4dENoZWNraW5nVHlwZVNwZWxsaW5nIHwgVGV4dENoZWNraW5nVHlwZUdy
YW1tYXIpIDogVGV4dENoZWNraW5nVHlwZVNwZWxsaW5nOworICAgIG1fY2xpZW50LT5jaGVja1Rl
eHRPZlBhcmFncmFwaChwYXJhZ3JhcGhTdHJpbmcuY2hhcmFjdGVycygpLCBwYXJhZ3JhcGhTdHJp
bmcubGVuZ3RoKCksIGNoZWNraW5nVHlwZXMsIHJlc3VsdHMpOworICAgIAorICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCByZXN1bHRzLnNpemUoKTsgaSsrKSB7CisgICAgICAgIGNvbnN0IFRl
eHRDaGVja2luZ1Jlc3VsdCogcmVzdWx0ID0gJnJlc3VsdHNbaV07CisgICAgICAgIGlmIChyZXN1
bHQtPnR5cGUgPT0gVGV4dENoZWNraW5nVHlwZVNwZWxsaW5nICYmIHJlc3VsdC0+bG9jYXRpb24g
PT0gcmFuZ2VTdGFydE9mZnNldCAmJiByZXN1bHQtPmxlbmd0aCA9PSByYW5nZUxlbmd0aCkgewor
ICAgICAgICAgICAgU3RyaW5nIG1pc3NwZWxsZWRXb3JkID0gcGFyYWdyYXBoU3RyaW5nLnN1YnN0
cmluZyhyYW5nZVN0YXJ0T2Zmc2V0LCByYW5nZUxlbmd0aCk7CisgICAgICAgICAgICBBU1NFUlQo
bWlzc3BlbGxlZFdvcmQubGVuZ3RoKCkpOworICAgICAgICAgICAgbV9jbGllbnQtPmdldEd1ZXNz
ZXNGb3JXb3JkKG1pc3NwZWxsZWRXb3JkLCBndWVzc2VzKTsKKyAgICAgICAgICAgIG1fY2xpZW50
LT51cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKG1pc3NwZWxsZWRXb3JkKTsKKyAg
ICAgICAgICAgIG1pc3NwZWxsZWQgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIGd1ZXNzZXM7
CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgaWYgKCFjaGVja0dyYW1tYXIpCisgICAgICAg
IHJldHVybiBndWVzc2VzOworICAgICAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
cmVzdWx0cy5zaXplKCk7IGkrKykgeworICAgICAgICBjb25zdCBUZXh0Q2hlY2tpbmdSZXN1bHQq
IHJlc3VsdCA9ICZyZXN1bHRzW2ldOworICAgICAgICBpZiAocmVzdWx0LT50eXBlID09IFRleHRD
aGVja2luZ1R5cGVHcmFtbWFyICYmIHJlc3VsdC0+bG9jYXRpb24gPD0gcmFuZ2VTdGFydE9mZnNl
dCAmJiByZXN1bHQtPmxvY2F0aW9uICsgcmVzdWx0LT5sZW5ndGggPj0gcmFuZ2VTdGFydE9mZnNl
dCArIHJhbmdlTGVuZ3RoKSB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwg
cmVzdWx0LT5kZXRhaWxzLnNpemUoKTsgaisrKSB7CisgICAgICAgICAgICAgICAgY29uc3QgR3Jh
bW1hckRldGFpbCogZGV0YWlsID0gJnJlc3VsdC0+ZGV0YWlsc1tqXTsKKyAgICAgICAgICAgICAg
ICBBU1NFUlQoZGV0YWlsLT5sZW5ndGggPiAwICYmIGRldGFpbC0+bG9jYXRpb24gPj0gMCk7Cisg
ICAgICAgICAgICAgICAgaWYgKHJlc3VsdC0+bG9jYXRpb24gKyBkZXRhaWwtPmxvY2F0aW9uID09
IHJhbmdlU3RhcnRPZmZzZXQgJiYgZGV0YWlsLT5sZW5ndGggPT0gcmFuZ2VMZW5ndGgpIHsKKyAg
ICAgICAgICAgICAgICAgICAgU3RyaW5nIGJhZEdyYW1tYXJQaHJhc2UgPSBwYXJhZ3JhcGhTdHJp
bmcuc3Vic3RyaW5nKHJlc3VsdC0+bG9jYXRpb24sIHJlc3VsdC0+bGVuZ3RoKTsKKyAgICAgICAg
ICAgICAgICAgICAgQVNTRVJUKGJhZEdyYW1tYXJQaHJhc2UubGVuZ3RoKCkpOworICAgICAgICAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGsgPSAwOyBrIDwgZGV0YWlsLT5ndWVzc2VzLnNpemUo
KTsgaysrKQorICAgICAgICAgICAgICAgICAgICAgICAgZ3Vlc3Nlcy5hcHBlbmQoZGV0YWlsLT5n
dWVzc2VzW2tdKTsKKyAgICAgICAgICAgICAgICAgICAgbV9jbGllbnQtPnVwZGF0ZVNwZWxsaW5n
VUlXaXRoR3JhbW1hclN0cmluZyhiYWRHcmFtbWFyUGhyYXNlLCAqZGV0YWlsKTsKKyAgICAgICAg
ICAgICAgICAgICAgdW5ncmFtbWF0aWNhbCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBndWVzc2VzOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KKyAgICByZXR1cm4gZ3Vlc3NlczsKKyNlbHNlCisgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgVU5VU0VEX1BBUkFNKGNoZWNrR3JhbW1hcik7CisgICAgVU5VU0VEX1BBUkFN
KG1pc3NwZWxsZWQpOworICAgIFVOVVNFRF9QQVJBTSh1bmdyYW1tYXRpY2FsKTsKKyAgICByZXR1
cm4gVmVjdG9yPFN0cmluZz4oKTsKKyNlbmRpZgorfQorCisKK3ZvaWQgUmFuZ2VNYXJrZXJDb250
cm9sbGVyOjptYXJrQWxsTWlzc3BlbGxpbmdzKFJlZlB0cjxSYW5nZT4mIGZpcnN0TWlzc3BlbGxp
bmdSYW5nZSkKK3sKKyAgICAvLyBVc2UgdGhlICJtYXJrQWxsIiBmZWF0dXJlIG9mIGZpbmRGaXJz
dE1pc3NwZWxsaW5nLiBJZ25vcmUgdGhlIHJldHVybiB2YWx1ZSBhbmQgdGhlICJvdXQgcGFyYW1l
dGVyIjsKKyAgICAvLyBhbGwgd2UgbmVlZCB0byBkbyBpcyBtYXJrIGV2ZXJ5IGluc3RhbmNlLgor
ICAgIGludCBpZ25vcmVkT2Zmc2V0OworICAgIGZpbmRGaXJzdE1pc3NwZWxsaW5nKGlnbm9yZWRP
ZmZzZXQsIHRydWUsIGZpcnN0TWlzc3BlbGxpbmdSYW5nZSk7Cit9CisKK3ZvaWQgUmFuZ2VNYXJr
ZXJDb250cm9sbGVyOjptYXJrQWxsQmFkR3JhbW1hcigpCit7CisjaWZuZGVmIEJVSUxESU5HX09O
X1RJR0VSCisgICAgLy8gVXNlIHRoZSAibWFya0FsbCIgZmVhdHVyZSBvZiBmaW5kRmlyc3RCYWRH
cmFtbWFyLiBJZ25vcmUgdGhlIHJldHVybiB2YWx1ZSBhbmQgIm91dCBwYXJhbWV0ZXJzIjsgYWxs
IHdlIG5lZWQgdG8KKyAgICAvLyBkbyBpcyBtYXJrIGV2ZXJ5IGluc3RhbmNlLgorICAgIEdyYW1t
YXJEZXRhaWwgaWdub3JlZEdyYW1tYXJEZXRhaWw7CisgICAgaW50IGlnbm9yZWRPZmZzZXQ7Cisg
ICAgZmluZEZpcnN0QmFkR3JhbW1hcihpZ25vcmVkR3JhbW1hckRldGFpbCwgaWdub3JlZE9mZnNl
dCwgdHJ1ZSk7CisjZWxzZQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworI2VuZGlmCit9CisK
K30KZGlmZiAtLWdpdCBhL1dlYkNvcmUvZWRpdGluZy9SYW5nZU1hcmtlckNvbnRyb2xsZXIuaCBi
L1dlYkNvcmUvZWRpdGluZy9SYW5nZU1hcmtlckNvbnRyb2xsZXIuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xMWVl
YjIyMmFhZDBiZmM3YmZlMWJmMGUwMGMwYzg0NjIxMjRiOTE0Ci0tLSAvZGV2L251bGwKKysrIGIv
V2ViQ29yZS9lZGl0aW5nL1JhbmdlTWFya2VyQ29udHJvbGxlci5oCkBAIC0wLDAgKzEsNTMgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBvcmF0aW9uIGFu
ZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICogQ29weXJpZ2h0IChjKSAyMDEwIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgUmFuZ2VNYXJrZXJDb250cm9sbGVyX2gK
KyNkZWZpbmUgUmFuZ2VNYXJrZXJDb250cm9sbGVyX2gKKworI2luY2x1ZGUgIkVkaXRvckNsaWVu
dC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFJhbmdlOworCitjbGFzcyBSYW5n
ZU1hcmtlckNvbnRyb2xsZXIgOiBwdWJsaWMgTm9uY29weWFibGUgeworcHVibGljOgorICAgIFJh
bmdlTWFya2VyQ29udHJvbGxlcihFZGl0b3JDbGllbnQqLCBQYXNzUmVmUHRyPFJhbmdlPik7Cisg
ICAgflJhbmdlTWFya2VyQ29udHJvbGxlcigpOworCisgICAgU3RyaW5nIGZpbmRGaXJzdE1pc3Nw
ZWxsaW5nKGludCYgZmlyc3RNaXNzcGVsbGluZ09mZnNldCwgYm9vbCBtYXJrQWxsLCBSZWZQdHI8
UmFuZ2U+JiBmaXJzdE1pc3NwZWxsaW5nUmFuZ2UpOworICAgIFN0cmluZyBmaW5kRmlyc3RNaXNz
cGVsbGluZ09yQmFkR3JhbW1hcihib29sIGNoZWNrR3JhbW1hciwgYm9vbCYgb3V0SXNTcGVsbGlu
ZywgaW50JiBvdXRGaXJzdEZvdW5kT2Zmc2V0LCBHcmFtbWFyRGV0YWlsJiBvdXRHcmFtbWFyRGV0
YWlsKTsKKyAgICBTdHJpbmcgZmluZEZpcnN0QmFkR3JhbW1hcihHcmFtbWFyRGV0YWlsJiBvdXRH
cmFtbWFyRGV0YWlsLCBpbnQmIG91dEdyYW1tYXJQaHJhc2VPZmZzZXQsIGJvb2wgbWFya0FsbCk7
CisgICAgaW50IGZpbmRGaXJzdEdyYW1tYXJEZXRhaWwoY29uc3QgVmVjdG9yPEdyYW1tYXJEZXRh
aWw+JiBncmFtbWFyRGV0YWlscywgaW50IGJhZEdyYW1tYXJQaHJhc2VMb2NhdGlvbiwgaW50IC8q
YmFkR3JhbW1hclBocmFzZUxlbmd0aCovLCBpbnQgc3RhcnRPZmZzZXQsIGludCBlbmRPZmZzZXQs
IGJvb2wgbWFya0FsbCk7CisgICAgdm9pZCBtYXJrQWxsTWlzc3BlbGxpbmdzKFJlZlB0cjxSYW5n
ZT4mIGZpcnN0TWlzc3BlbGxpbmdSYW5nZSk7CisgICAgdm9pZCBtYXJrQWxsQmFkR3JhbW1hcigp
OworCisgICAgYm9vbCBpc1VuZ3JhbW1hdGljYWwoVmVjdG9yPFN0cmluZz4mIGd1ZXNzZXNWZWN0
b3IpIGNvbnN0OworICAgIFZlY3RvcjxTdHJpbmc+IGd1ZXNzZXNGb3JNaXNzcGVsbGVkT3JVbmdy
YW1tYXRpY2FsUmFuZ2UoYm9vbCBjaGVja0dyYW1tYXIsIGJvb2wmIG1pc3NwZWxsZWQsIGJvb2wm
IHVuZ3JhbW1hdGljYWwpIGNvbnN0OworICAgIFBhc3NSZWZQdHI8UmFuZ2U+IHBhcmFncmFwaEFs
aWduZWRSYW5nZShpbnQmIG9mZnNldEludG9QYXJhZ3JhcGhBbGlnbmVkUmFuZ2UsIFN0cmluZyYg
cGFyYWdyYXBoU3RyaW5nKSBjb25zdDsKK3ByaXZhdGU6CisgICAgRWRpdG9yQ2xpZW50KiBtX2Ns
aWVudDsKKyAgICBSZWZQdHI8UmFuZ2U+IG1fcmFuZ2U7Cit9OworCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBSYW5nZU1hcmtlckNvbnRyb2xsZXJfaAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>71865</attachid>
            <date>2010-10-26 04:18:17 -0700</date>
            <delta_ts>2010-10-26 21:25:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-48287-20101026201815.patch</filename>
            <type>text/plain</type>
            <size>74355</size>
            <attacher name="Hajime Morrita">morrita</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9XZWJDb3JlL0NNYWtlTGlzdHMu
dHh0CmluZGV4IDU4YjA3MjA4NGZkZDc4NGU2NzUxODIxZmYxMTk4ZDc1OWQ2ODEzODAuLmJkYThj
NGY2ODhjMDQzMmI0OWY1MWY4MGE5NGViYzQwZmM5OGI5M2UgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
Q01ha2VMaXN0cy50eHQKKysrIGIvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAtOTEyLDYgKzkx
Miw3IEBAIFNFVChXZWJDb3JlX1NPVVJDRVMKICAgICBlZGl0aW5nL01lcmdlSWRlbnRpY2FsRWxl
bWVudHNDb21tYW5kLmNwcAogICAgIGVkaXRpbmcvTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmNw
cAogICAgIGVkaXRpbmcvTW92ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCisgICAgZWRpdGluZy9SYW5n
ZU1hcmtlckNvbnRyb2xsZXIuY3BwCiAgICAgZWRpdGluZy9SZW1vdmVDU1NQcm9wZXJ0eUNvbW1h
bmQuY3BwCiAgICAgZWRpdGluZy9SZW1vdmVGb3JtYXRDb21tYW5kLmNwcAogICAgIGVkaXRpbmcv
UmVtb3ZlTm9kZUNvbW1hbmQuY3BwCmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dl
YkNvcmUvQ2hhbmdlTG9nCmluZGV4IDM0ODM2NDE0MjgzZjNkM2ZmOGU2MjQxNWI1ZmFlM2I2NDIz
ODFiYTkuLmUzMjkzMTQzMjg3NTFmNjI1ZDVmNTU4ODU1YTdlMTQyYTI4ZmI2OWMgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
NDcgQEAKKzIwMTAtMTAtMjUgIE1PUklUQSBIYWppbWUgIDxtb3JyaXRhQGdvb2dsZS5jb20+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVmYWN0b3Jp
bmc6IFNwZWxsY2hlY2tpbmcgcmVsYXRlZCBzdGF0aWMgZnVuY3Rpb25zIGNvdWxkIGZvcm0gYSBj
bGFzcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDgy
ODcKKworICAgICAgICBFeHRyYWN0ZWQgc3BlbGxjaGVjayByZWxhdGVkIHN0YXRpYyBmdW5jdGlv
bnMgdG8gUmFuZ2VNYXJrZXJDb250cm9sbGVyIGNsYXNzLAorICAgICAgICB3aGljaCBoYXMgRWRp
dG9yQ2xpZW50IGFuZCBSYW5nZSBhcyBpdHMgbWVtYmVyLgorICAgICAgICAKKyAgICAgICAgTm8g
bmV3IHRlc3RzLiBKdXN0IGEgcmVmYWN0b3JpbmcuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4
dDoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6Cisg
ICAgICAgICogV2ViQ29yZS5wcm86CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52
Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAg
ICAgICAqIGVkaXRpbmcvRWRpdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6YWR2
YW5jZVRvTmV4dE1pc3NwZWxsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6aXNTZWxl
Y3Rpb25VbmdyYW1tYXRpY2FsKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Z3Vlc3Nlc0Zv
clVuZ3JhbW1hdGljYWxTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpndWVz
c2VzRm9yTWlzc3BlbGxlZE9yVW5ncmFtbWF0aWNhbFNlbGVjdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpFZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZ1RvUG9zaXRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6RWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzT3JCYWRHcmFtbWFyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bWFya01pc3NwZWxsaW5ncyk6CisgICAgICAgIChXZWJD
b3JlOjpFZGl0b3I6Om1hcmtCYWRHcmFtbWFyKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6
bWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyk6CisgICAgICAgIChXZWJD
b3JlOjpFZGl0b3I6OmNoYW5nZUJhY2tUb1JlcGxhY2VkU3RyaW5nKToKKyAgICAgICAgKiBlZGl0
aW5nL0VkaXRvci5oOgorICAgICAgICAqIGVkaXRpbmcvUmFuZ2VNYXJrZXJDb250cm9sbGVyLmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSYW5nZU1hcmtlckNvbnRyb2xsZXI6OlJhbmdl
TWFya2VyQ29udHJvbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpSYW5nZU1hcmtlckNvbnRyb2xs
ZXI6On5SYW5nZU1hcmtlckNvbnRyb2xsZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2VNYXJr
ZXJDb250cm9sbGVyOjpwYXJhZ3JhcGhBbGlnbmVkUmFuZ2VGb3JSYW5nZSk6CisgICAgICAgIChX
ZWJDb3JlOjpSYW5nZU1hcmtlckNvbnRyb2xsZXI6OmZpbmRGaXJzdE1pc3NwZWxsaW5nSW5SYW5n
ZSk6CisgICAgICAgIChXZWJDb3JlOjpSYW5nZU1hcmtlckNvbnRyb2xsZXI6OmZpbmRGaXJzdE1p
c3NwZWxsaW5nT3JCYWRHcmFtbWFySW5SYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpSYW5nZU1h
cmtlckNvbnRyb2xsZXI6OmZpbmRGaXJzdEdyYW1tYXJEZXRhaWxJblJhbmdlKToKKyAgICAgICAg
KFdlYkNvcmU6OlJhbmdlTWFya2VyQ29udHJvbGxlcjo6ZmluZEZpcnN0QmFkR3JhbW1hckluUmFu
Z2UpOgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2VNYXJrZXJDb250cm9sbGVyOjppc1JhbmdlVW5n
cmFtbWF0aWNhbCk6CisgICAgICAgIChXZWJDb3JlOjpSYW5nZU1hcmtlckNvbnRyb2xsZXI6Omd1
ZXNzZXNGb3JNaXNzcGVsbGVkT3JVbmdyYW1tYXRpY2FsUmFuZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6UmFuZ2VNYXJrZXJDb250cm9sbGVyOjptYXJrQWxsTWlzc3BlbGxpbmdzSW5SYW5nZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSYW5nZU1hcmtlckNvbnRyb2xsZXI6Om1hcmtBbGxCYWRHcmFtbWFy
SW5SYW5nZSk6CisgICAgICAgICogZWRpdGluZy9SYW5nZU1hcmtlckNvbnRyb2xsZXIuaDogQWRk
ZWQuCisKIDIwMTAtMTAtMjYgIFhhbiBMb3BleiAgPHhsb3BlekBpZ2FsaWEuY29tPgogCiAgICAg
ICAgIFJldmlld2VkIGJ5IE1hcnRpbiBSb2JpbnNvbi4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvR05V
bWFrZWZpbGUuYW0gYi9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCmluZGV4IDhjMjA0YWExYWY4MjFj
MGI5MjBiNzg5ODc0OTE1NTZhMTI4YmVmZmEuLjI4YmVkZGYyMWUyMGU4MjA0OTRlODFiMDg4NmM2
ZWU1NjAxOTYyODkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KKysrIGIvV2Vi
Q29yZS9HTlVtYWtlZmlsZS5hbQpAQCAtMTMyNSw3ICsxMzI1LDkgQEAgd2ViY29yZV9zb3VyY2Vz
ICs9IFwKIAlXZWJDb3JlL2VkaXRpbmcvTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmNwcCBcCiAJ
V2ViQ29yZS9lZGl0aW5nL01vZGlmeVNlbGVjdGlvbkxpc3RMZXZlbC5oIFwKIAlXZWJDb3JlL2Vk
aXRpbmcvTW92ZVNlbGVjdGlvbkNvbW1hbmQuY3BwIFwKLQlXZWJDb3JlL2VkaXRpbmcvTW92ZVNl
bGVjdGlvbkNvbW1hbmQuaCBcCisJV2ViQ29yZS93ZWRpdGluZy9Nb3ZlU2VsZWN0aW9uQ29tbWFu
ZC5oIFwKKwlXZWJDb3JlL2VkaXRpbmcvUmFuZ2VNYXJrZXJDb250cm9sbGVyLmNwcCBcCisJV2Vi
Q29yZS9lZGl0aW5nL1JhbmdlTWFya2VyQ29udHJvbGxlci5oIFwKIAlXZWJDb3JlL2VkaXRpbmcv
UmVtb3ZlQ1NTUHJvcGVydHlDb21tYW5kLmNwcCBcCiAJV2ViQ29yZS9lZGl0aW5nL1JlbW92ZUNT
U1Byb3BlcnR5Q29tbWFuZC5oIFwKIAlXZWJDb3JlL2VkaXRpbmcvUmVtb3ZlRm9ybWF0Q29tbWFu
ZC5jcHAgXApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9XZWJDb3JlL1dlYkNv
cmUuZ3lwaQppbmRleCAxYjhjYWJlZmVhMDY5NmRmMjlmODcwYWQ0M2IzYmViZGE4ODEwOTkyLi42
OTc4ZGM4N2QzY2NlY2RiNWZiODRjN2E2M2QxOWZmNDIzMTRjYjRmIDEwMDY0NAotLS0gYS9XZWJD
b3JlL1dlYkNvcmUuZ3lwaQorKysgYi9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMTQwNyw2ICsx
NDA3LDggQEAKICAgICAgICAgICAgICdlZGl0aW5nL01vZGlmeVNlbGVjdGlvbkxpc3RMZXZlbC5o
JywKICAgICAgICAgICAgICdlZGl0aW5nL01vdmVTZWxlY3Rpb25Db21tYW5kLmNwcCcsCiAgICAg
ICAgICAgICAnZWRpdGluZy9Nb3ZlU2VsZWN0aW9uQ29tbWFuZC5oJywKKyAgICAgICAgICAgICdl
ZGl0aW5nL1JhbmdlTWFya2VyQ29udHJvbGxlci5jcHAnLAorICAgICAgICAgICAgJ2VkaXRpbmcv
UmFuZ2VNYXJrZXJDb250cm9sbGVyLmgnLAogICAgICAgICAgICAgJ2VkaXRpbmcvUmVtb3ZlQ1NT
UHJvcGVydHlDb21tYW5kLmNwcCcsCiAgICAgICAgICAgICAnZWRpdGluZy9SZW1vdmVDU1NQcm9w
ZXJ0eUNvbW1hbmQuaCcsCiAgICAgICAgICAgICAnZWRpdGluZy9SZW1vdmVGb3JtYXRDb21tYW5k
LmNwcCcsCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUucHJvIGIvV2ViQ29yZS9XZWJDb3Jl
LnBybwppbmRleCA5ZmIyZmRkZDAyY2VlNDYyNzFmMzY3ODk4NDUyM2MyZGFiYWJhYjQxLi40ODkw
MTVkYzQxZDk2ZjZiOWM4YTUwZTMwMDM1ZTA2NWRkYWM2YWE0IDEwMDY0NAotLS0gYS9XZWJDb3Jl
L1dlYkNvcmUucHJvCisrKyBiL1dlYkNvcmUvV2ViQ29yZS5wcm8KQEAgLTgwMiw2ICs4MDIsNyBA
QCBTT1VSQ0VTICs9IFwKICAgICBlZGl0aW5nL01lcmdlSWRlbnRpY2FsRWxlbWVudHNDb21tYW5k
LmNwcCBcCiAgICAgZWRpdGluZy9Nb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuY3BwIFwKICAgICBl
ZGl0aW5nL01vdmVTZWxlY3Rpb25Db21tYW5kLmNwcCBcCisgICAgZWRpdGluZy9SYW5nZU1hcmtl
ckNvbnRyb2xsZXIuY3BwIFwKICAgICBlZGl0aW5nL1JlbW92ZUNTU1Byb3BlcnR5Q29tbWFuZC5j
cHAgXAogICAgIGVkaXRpbmcvUmVtb3ZlRm9ybWF0Q29tbWFuZC5jcHAgXAogICAgIGVkaXRpbmcv
UmVtb3ZlTm9kZUNvbW1hbmQuY3BwIFwKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS52Y3By
b2ovV2ViQ29yZS52Y3Byb2ogYi9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9q
CmluZGV4IGRjN2QyZDA0YWMxODdmZjY2NGRhNjE2YWU5N2YxNmRkNzkyYWUxN2YuLjU0YTZiYmMz
NmIwZjM0MzMzODYxZjZhNzQ0ODllYzgwMDk2OGIzNmUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2Vi
Q29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKKysrIGIvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9X
ZWJDb3JlLnZjcHJvagpAQCAtNDY4NjcsNiArNDY4NjcsNjIgQEAKIAkJCQk+DQogCQkJPC9GaWxl
Pg0KIAkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cZWRpdGluZ1xSYW5nZU1hcmtlckNv
bnRyb2xsZXIuY3BwIg0KKwkJCQk+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFt
ZT0iRGVidWd8V2luMzIiDQorCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSINCisJCQkJCT4N
CisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCS8+DQor
CQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJ
TmFtZT0iUmVsZWFzZXxXaW4zMiINCisJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIg0KKwkJ
CQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJ
Lz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQor
CQkJCQlOYW1lPSJEZWJ1Z19JbnRlcm5hbHxXaW4zMiINCisJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxk
PSJ0cnVlIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJU
b29sIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25m
aWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1Z19DYWlyb3xXaW4zMiINCisJCQkJCUV4Y2x1ZGVk
RnJvbUJ1aWxkPSJ0cnVlIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NM
Q29tcGlsZXJUb29sIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJ
PEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlX0NhaXJvfFdpbjMyIg0KKwkJ
CQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJ
CU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0
aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnX0FsbHxXaW4z
MiINCisJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wN
CisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29u
ZmlndXJhdGlvbj4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIu
LlxlZGl0aW5nXFJhbmdlTWFya2VyQ29udHJvbGxlci5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0K
KwkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cZWRpdGluZ1xSZW1vdmVDU1NQcm9wZXJ0
eUNvbW1hbmQuY3BwIg0KIAkJCQk+DQogCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KZGlmZiAtLWdp
dCBhL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMzM2Yzc4NjE1YTBhOGFiZjRi
NmM4Njg4NWM3YmJmYjliNTAxMzA0Yy4uYjM0MDQ4ODIxOGRmZjYzMmRiMjU0YWVkNDU0NjA5MDQx
NDAwNGY3YiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKKysrIGIvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAg
LTMwNTIsNiArMzA1Miw4IEBACiAJCUE3RDNDNTI0MEI1NzZCNEIwMDJDQTQ1MCAvKiBQYXN0ZWJv
YXJkSGVscGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBN0QzQzUyMzBCNTc2QjRCMDAyQ0E0NTAgLyogUGFzdGVib2FyZEhlbHBlci5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE3RDZCMzQ5MEY2MTEw
NDUwMEI3OUZEMSAvKiBXb3JrZXJTY3JpcHRMb2FkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3RDZCMzQ3MEY2MTEwNDUwMEI3OUZEMSAvKiBXb3Jr
ZXJTY3JpcHRMb2FkZXIuaCAqLzsgfTsKIAkJQTdENkIzNEEwRjYxMTA0NTAwQjc5RkQxIC8qIFdv
cmtlclNjcmlwdExvYWRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBN0Q2QjM0ODBGNjExMDQ1MDBCNzlGRDEgLyogV29ya2VyU2NyaXB0TG9hZGVy
LmNwcCAqLzsgfTsKKwkJQTdEQkY4REQxMjc2OTE5QzAwNkI2MDA4IC8qIFJhbmdlTWFya2VyQ29u
dHJvbGxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBN0RCRjhEQjEyNzY5MTlDMDA2QjYwMDggLyogUmFuZ2VNYXJrZXJDb250cm9sbGVyLmNwcCAq
LzsgfTsKKwkJQTdEQkY4REUxMjc2OTE5QzAwNkI2MDA4IC8qIFJhbmdlTWFya2VyQ29udHJvbGxl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdEQkY4
REMxMjc2OTE5QzAwNkI2MDA4IC8qIFJhbmdlTWFya2VyQ29udHJvbGxlci5oICovOyB9OwogCQlB
N0YzMzhBMzExQzBFRkNBMDBBMzIwQTcgLyogU2hhZG93RWxlbWVudC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0YzMzhBMTExQzBFRkNBMDBBMzIw
QTcgLyogU2hhZG93RWxlbWVudC5jcHAgKi87IH07CiAJCUE3RjMzOEE0MTFDMEVGQ0EwMEEzMjBB
NyAvKiBTaGFkb3dFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBN0YzMzhBMjExQzBFRkNBMDBBMzIwQTcgLyogU2hhZG93RWxlbWVudC5oICov
OyB9OwogCQlBODA5RjE0NzBCNzM3OTNBMDAyRTREN0YgLyogUmVuZGVyU1ZHR3JhZGllbnRTdG9w
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODA5RjE0
NTBCNzM3OTNBMDAyRTREN0YgLyogUmVuZGVyU1ZHR3JhZGllbnRTdG9wLmggKi87IH07CkBAIC05
MTIxLDYgKzkxMjMsOCBAQAogCQlBN0QzQzUyMzBCNTc2QjRCMDAyQ0E0NTAgLyogUGFzdGVib2Fy
ZEhlbHBlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQYXN0ZWJvYXJkSGVs
cGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3RDZCMzQ3MEY2MTEwNDUwMEI3
OUZEMSAvKiBXb3JrZXJTY3JpcHRMb2FkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gV29ya2VyU2NyaXB0TG9hZGVyLmg7IHBhdGggPSB3b3JrZXJzL1dvcmtlclNjcmlwdExv
YWRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBN0Q2QjM0ODBGNjExMDQ1MDBC
NzlGRDEgLyogV29ya2VyU2NyaXB0TG9hZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgbmFtZSA9IFdvcmtlclNjcmlwdExvYWRlci5jcHA7IHBhdGggPSB3b3JrZXJzL1dvcmtl
clNjcmlwdExvYWRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE3REJGOERC
MTI3NjkxOUMwMDZCNjAwOCAvKiBSYW5nZU1hcmtlckNvbnRyb2xsZXIuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmFuZ2VNYXJrZXJDb250cm9sbGVyLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTdEQkY4REMxMjc2OTE5QzAwNkI2MDA4IC8qIFJh
bmdlTWFya2VyQ29udHJvbGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBS
YW5nZU1hcmtlckNvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTdG
MzM4QTExMUMwRUZDQTAwQTMyMEE3IC8qIFNoYWRvd0VsZW1lbnQuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2hhZG93RWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUE3RjMzOEEyMTFDMEVGQ0EwMEEzMjBBNyAvKiBTaGFkb3dFbGVtZW50
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNoYWRvd0VsZW1lbnQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTgwOUYxNDUwQjczNzkzQTAwMkU0RDdGIC8qIFJl
bmRlclNWR0dyYWRpZW50U3RvcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBS
ZW5kZXJTVkdHcmFkaWVudFN0b3AuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE0
NDg1LDYgKzE0NDg5LDggQEAKIAkJCQlDNkQ3NEFEMzA5QUEyODJFMDAwQjBBNTIgLyogTW9kaWZ5
U2VsZWN0aW9uTGlzdExldmVsLmggKi8sCiAJCQkJOTMzMDlEQUMwOTlFNjQ5MTAwNTZFNTgxIC8q
IE1vdmVTZWxlY3Rpb25Db21tYW5kLmNwcCAqLywKIAkJCQk5MzMwOURBRDA5OUU2NDkxMDA1NkU1
ODEgLyogTW92ZVNlbGVjdGlvbkNvbW1hbmQuaCAqLywKKwkJCQlBN0RCRjhEQjEyNzY5MTlDMDA2
QjYwMDggLyogUmFuZ2VNYXJrZXJDb250cm9sbGVyLmNwcCAqLywKKwkJCQlBN0RCRjhEQzEyNzY5
MTlDMDA2QjYwMDggLyogUmFuZ2VNYXJrZXJDb250cm9sbGVyLmggKi8sCiAJCQkJOTMzMDlEQjEw
OTlFNjQ5MTAwNTZFNTgxIC8qIFJlbW92ZUNTU1Byb3BlcnR5Q29tbWFuZC5jcHAgKi8sCiAJCQkJ
OTMzMDlEQjIwOTlFNjQ5MTAwNTZFNTgxIC8qIFJlbW92ZUNTU1Byb3BlcnR5Q29tbWFuZC5oICov
LAogCQkJCUQwNkMwRDhFMENGRDExNDYwMDY1RjQzRiAvKiBSZW1vdmVGb3JtYXRDb21tYW5kLmNw
cCAqLywKQEAgLTIwNDM2LDYgKzIwNDQyLDcgQEAKIAkJCQlGNTVCM0RDQzEyNTFGMTJEMDAzRUYy
NjkgLyogUmFkaW9JbnB1dFR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzRjE5OTE4MDgyNDVF
NTkwMDFFOUFCQyAvKiBSYW5nZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTNEOUQ1M0MwREEyN0Ux
ODAwNzcyMTZDIC8qIFJhbmdlQm91bmRhcnlQb2ludC5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTdE
QkY4REUxMjc2OTE5QzAwNkI2MDA4IC8qIFJhbmdlTWFya2VyQ29udHJvbGxlci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJRDIzQ0E1NkMwQUIwRUI4RDAwNTEwOEE1IC8qIFJhbmdlRXhjZXB0aW9uLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlGNTVCM0RDRTEyNTFGMTJEMDAzRUYyNjkgLyogUmFuZ2VJbnB1
dFR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4NEQ4MjdDMTFEMzMzRUQwMDk3Mjk5MCAvKiBS
YXdEYXRhRG9jdW1lbnRQYXJzZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMjEyMzUsNyArMjEyNDIs
NiBAQAogCQkJaXNhID0gUEJYUHJvamVjdDsKIAkJCWJ1aWxkQ29uZmlndXJhdGlvbkxpc3QgPSAx
NDlDMjg0MzA4OTAyQjExMDA4QTlFRkMgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQ
QlhQcm9qZWN0ICJXZWJDb3JlIiAqLzsKIAkJCWNvbXBhdGliaWxpdHlWZXJzaW9uID0gIlhjb2Rl
IDIuNCI7Ci0JCQlkZXZlbG9wbWVudFJlZ2lvbiA9IEVuZ2xpc2g7CiAJCQloYXNTY2FubmVkRm9y
RW5jb2RpbmdzID0gMTsKIAkJCWtub3duUmVnaW9ucyA9ICgKIAkJCQlFbmdsaXNoLApAQCAtMjMw
NzYsNiArMjMwODIsNyBAQAogCQkJCTU1MEEwQkM5MDg1RjYwMzkwMDczNTNENiAvKiBRdWFsaWZp
ZWROYW1lLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUY1NUIzRENCMTI1MUYxMkQwMDNFRjI2OSAv
KiBSYWRpb0lucHV0VHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5M0YxOUFCOTA4MjQ1RTU5
MDAxRTlBQkMgLyogUmFuZ2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTdEQkY4REQxMjc2OTE5
QzAwNkI2MDA4IC8qIFJhbmdlTWFya2VyQ29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlGNTVCM0RDRDEyNTFGMTJEMDAzRUYyNjkgLyogUmFuZ2VJbnB1dFR5cGUuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJODUwMzFCNEIwQTQ0RUZDNzAwRjk5MkUwIC8qIFJlZ2lzdGVyZWRFdmVudExp
c3RlbmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyQzNEQTJDMEQwMDZDMUQwMEVGNkYyNiAv
KiBSZWd1bGFyRXhwcmVzc2lvbi5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvZWRpdGluZy9FZGl0b3IuY3BwIGIvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKaW5kZXgg
NGQ2ZDI1ODMwN2FhMGIwMDM2YjFiOWVkY2RmMGFmNGEzNDcyZDJmZi4uMWM4MGJiNmEwMzU0ZDI0
ZGRlMTAwZGMxZWY4MDRkNDBmMzRhMWFjOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9lZGl0aW5nL0Vk
aXRvci5jcHAKKysrIGIvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKQEAgLTYyLDYgKzYyLDcg
QEAKICNpbmNsdWRlICJOb2RlTGlzdC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQ
YXN0ZWJvYXJkLmgiCisjaW5jbHVkZSAiUmFuZ2VNYXJrZXJDb250cm9sbGVyLmgiCiAjaW5jbHVk
ZSAiUmVtb3ZlRm9ybWF0Q29tbWFuZC5oIgogI2luY2x1ZGUgIlJlbmRlckJsb2NrLmgiCiAjaW5j
bHVkZSAiUmVuZGVyUGFydC5oIgpAQCAtMTY0MSwzMjggKzE2NDIsNiBAQCB2b2lkIEVkaXRvcjo6
bGVhcm5TcGVsbGluZygpCiAgICAgY2xpZW50KCktPmxlYXJuV29yZCh0ZXh0KTsKIH0KIAotc3Rh
dGljIFN0cmluZyBmaW5kRmlyc3RNaXNzcGVsbGluZ0luUmFuZ2UoRWRpdG9yQ2xpZW50KiBjbGll
bnQsIFJhbmdlKiBzZWFyY2hSYW5nZSwgaW50JiBmaXJzdE1pc3NwZWxsaW5nT2Zmc2V0LCBib29s
IG1hcmtBbGwsIFJlZlB0cjxSYW5nZT4mIGZpcnN0TWlzc3BlbGxpbmdSYW5nZSkKLXsKLSAgICBB
U1NFUlRfQVJHKGNsaWVudCwgY2xpZW50KTsKLSAgICBBU1NFUlRfQVJHKHNlYXJjaFJhbmdlLCBz
ZWFyY2hSYW5nZSk7Ci0gICAgCi0gICAgV29yZEF3YXJlSXRlcmF0b3IgaXQoc2VhcmNoUmFuZ2Up
OwotICAgIGZpcnN0TWlzc3BlbGxpbmdPZmZzZXQgPSAwOwotICAgIAotICAgIFN0cmluZyBmaXJz
dE1pc3NwZWxsaW5nOwotICAgIGludCBjdXJyZW50Q2h1bmtPZmZzZXQgPSAwOwotCi0gICAgd2hp
bGUgKCFpdC5hdEVuZCgpKSB7Ci0gICAgICAgIGNvbnN0IFVDaGFyKiBjaGFycyA9IGl0LmNoYXJh
Y3RlcnMoKTsKLSAgICAgICAgaW50IGxlbiA9IGl0Lmxlbmd0aCgpOwotICAgICAgICAKLSAgICAg
ICAgLy8gU2tpcCBzb21lIHdvcmsgZm9yIG9uZS1zcGFjZS1jaGFyIGh1bmtzCi0gICAgICAgIGlm
ICghKGxlbiA9PSAxICYmIGNoYXJzWzBdID09ICcgJykpIHsKLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgaW50IG1pc3NwZWxsaW5nTG9jYXRpb24gPSAtMTsKLSAgICAgICAgICAgIGludCBtaXNz
cGVsbGluZ0xlbmd0aCA9IDA7Ci0gICAgICAgICAgICBjbGllbnQtPmNoZWNrU3BlbGxpbmdPZlN0
cmluZyhjaGFycywgbGVuLCAmbWlzc3BlbGxpbmdMb2NhdGlvbiwgJm1pc3NwZWxsaW5nTGVuZ3Ro
KTsKLQotICAgICAgICAgICAgLy8gNTQ5MDYyNyBzaG93cyB0aGF0IHRoZXJlIHdhcyBzb21lIGNv
ZGUgcGF0aCBoZXJlIHdoZXJlIHRoZSBTdHJpbmcgY29uc3RydWN0b3IgYmVsb3cgY3Jhc2hlcy4K
LSAgICAgICAgICAgIC8vIFdlIGRvbid0IGtub3cgZXhhY3RseSB3aGF0IGNvbWJpbmF0aW9uIG9m
IGJhZCBpbnB1dCBjYXVzZWQgdGhpcywgc28gd2UncmUgbWFraW5nIHRoaXMgbXVjaAotICAgICAg
ICAgICAgLy8gbW9yZSByb2J1c3QgYWdhaW5zdCBiYWQgaW5wdXQgb24gcmVsZWFzZSBidWlsZHMu
Ci0gICAgICAgICAgICBBU1NFUlQobWlzc3BlbGxpbmdMZW5ndGggPj0gMCk7Ci0gICAgICAgICAg
ICBBU1NFUlQobWlzc3BlbGxpbmdMb2NhdGlvbiA+PSAtMSk7Ci0gICAgICAgICAgICBBU1NFUlQo
IW1pc3NwZWxsaW5nTGVuZ3RoIHx8IG1pc3NwZWxsaW5nTG9jYXRpb24gPj0gMCk7Ci0gICAgICAg
ICAgICBBU1NFUlQobWlzc3BlbGxpbmdMb2NhdGlvbiA8IGxlbik7Ci0gICAgICAgICAgICBBU1NF
UlQobWlzc3BlbGxpbmdMZW5ndGggPD0gbGVuKTsKLSAgICAgICAgICAgIEFTU0VSVChtaXNzcGVs
bGluZ0xvY2F0aW9uICsgbWlzc3BlbGxpbmdMZW5ndGggPD0gbGVuKTsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgaWYgKG1pc3NwZWxsaW5nTG9jYXRpb24gPj0gMCAmJiBtaXNzcGVsbGluZ0xl
bmd0aCA+IDAgJiYgbWlzc3BlbGxpbmdMb2NhdGlvbiA8IGxlbiAmJiBtaXNzcGVsbGluZ0xlbmd0
aCA8PSBsZW4gJiYgbWlzc3BlbGxpbmdMb2NhdGlvbiArIG1pc3NwZWxsaW5nTGVuZ3RoIDw9IGxl
bikgewotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIC8vIENvbXB1dGUgcmFuZ2Ug
b2YgbWlzc3BlbGxlZCB3b3JkCi0gICAgICAgICAgICAgICAgUmVmUHRyPFJhbmdlPiBtaXNzcGVs
bGluZ1JhbmdlID0gVGV4dEl0ZXJhdG9yOjpzdWJyYW5nZShzZWFyY2hSYW5nZSwgY3VycmVudENo
dW5rT2Zmc2V0ICsgbWlzc3BlbGxpbmdMb2NhdGlvbiwgbWlzc3BlbGxpbmdMZW5ndGgpOwotCi0g
ICAgICAgICAgICAgICAgLy8gUmVtZW1iZXIgZmlyc3QtZW5jb3VudGVyZWQgbWlzc3BlbGxpbmcg
YW5kIGl0cyBvZmZzZXQuCi0gICAgICAgICAgICAgICAgaWYgKCFmaXJzdE1pc3NwZWxsaW5nKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGZpcnN0TWlzc3BlbGxpbmdPZmZzZXQgPSBjdXJyZW50Q2h1
bmtPZmZzZXQgKyBtaXNzcGVsbGluZ0xvY2F0aW9uOwotICAgICAgICAgICAgICAgICAgICBmaXJz
dE1pc3NwZWxsaW5nID0gU3RyaW5nKGNoYXJzICsgbWlzc3BlbGxpbmdMb2NhdGlvbiwgbWlzc3Bl
bGxpbmdMZW5ndGgpOwotICAgICAgICAgICAgICAgICAgICBmaXJzdE1pc3NwZWxsaW5nUmFuZ2Ug
PSBtaXNzcGVsbGluZ1JhbmdlOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAg
IC8vIFN0b3JlIG1hcmtlciBmb3IgbWlzc3BlbGxlZCB3b3JkLgotICAgICAgICAgICAgICAgIEV4
Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgICAgICAgICAgICAgIG1pc3NwZWxsaW5nUmFuZ2UtPnN0
YXJ0Q29udGFpbmVyKGVjKS0+ZG9jdW1lbnQoKS0+bWFya2VycygpLT5hZGRNYXJrZXIobWlzc3Bl
bGxpbmdSYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nKTsKLSAgICAgICAgICAg
ICAgICBBU1NFUlQoIWVjKTsKLQotICAgICAgICAgICAgICAgIC8vIEJhaWwgb3V0IGlmIHdlJ3Jl
IG1hcmtpbmcgb25seSB0aGUgZmlyc3QgbWlzc3BlbGxpbmcsIGFuZCBub3QgYWxsIGluc3RhbmNl
cy4KLSAgICAgICAgICAgICAgICBpZiAoIW1hcmtBbGwpCi0gICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBjdXJyZW50
Q2h1bmtPZmZzZXQgKz0gbGVuOwotICAgICAgICBpdC5hZHZhbmNlKCk7Ci0gICAgfQotICAgIAot
ICAgIHJldHVybiBmaXJzdE1pc3NwZWxsaW5nOwotfQotCi0jaWZuZGVmIEJVSUxESU5HX09OX1RJ
R0VSCi0KLXN0YXRpYyBQYXNzUmVmUHRyPFJhbmdlPiBwYXJhZ3JhcGhBbGlnbmVkUmFuZ2VGb3JS
YW5nZShSYW5nZSogYXJiaXRyYXJ5UmFuZ2UsIGludCYgb2Zmc2V0SW50b1BhcmFncmFwaEFsaWdu
ZWRSYW5nZSwgU3RyaW5nJiBwYXJhZ3JhcGhTdHJpbmcpCi17Ci0gICAgQVNTRVJUX0FSRyhhcmJp
dHJhcnlSYW5nZSwgYXJiaXRyYXJ5UmFuZ2UpOwotICAgIAotICAgIEV4Y2VwdGlvbkNvZGUgZWMg
PSAwOwotICAgIAotICAgIC8vIEV4cGFuZCByYW5nZSB0byBwYXJhZ3JhcGggYm91bmRhcmllcwot
ICAgIFJlZlB0cjxSYW5nZT4gcGFyYWdyYXBoUmFuZ2UgPSBhcmJpdHJhcnlSYW5nZS0+Y2xvbmVS
YW5nZShlYyk7Ci0gICAgc2V0U3RhcnQocGFyYWdyYXBoUmFuZ2UuZ2V0KCksIHN0YXJ0T2ZQYXJh
Z3JhcGgoYXJiaXRyYXJ5UmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSkpOwotICAgIHNldEVuZChwYXJh
Z3JhcGhSYW5nZS5nZXQoKSwgZW5kT2ZQYXJhZ3JhcGgoYXJiaXRyYXJ5UmFuZ2UtPmVuZFBvc2l0
aW9uKCkpKTsKLSAgICAKLSAgICAvLyBDb21wdXRlIG9mZnNldCBmcm9tIHN0YXJ0IG9mIGV4cGFu
ZGVkIHJhbmdlIHRvIHN0YXJ0IG9mIG9yaWdpbmFsIHJhbmdlCi0gICAgUmVmUHRyPFJhbmdlPiBv
ZmZzZXRBc1JhbmdlID0gUmFuZ2U6OmNyZWF0ZShwYXJhZ3JhcGhSYW5nZS0+c3RhcnRDb250YWlu
ZXIoZWMpLT5kb2N1bWVudCgpLCBwYXJhZ3JhcGhSYW5nZS0+c3RhcnRQb3NpdGlvbigpLCBhcmJp
dHJhcnlSYW5nZS0+c3RhcnRQb3NpdGlvbigpKTsKLSAgICBvZmZzZXRJbnRvUGFyYWdyYXBoQWxp
Z25lZFJhbmdlID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChvZmZzZXRBc1JhbmdlLmdldCgp
KTsKLSAgICAKLSAgICAvLyBGaWxsIGluIG91dCBwYXJhbWV0ZXIgd2l0aCBzdHJpbmcgcmVwcmVz
ZW50aW5nIGVudGlyZSBwYXJhZ3JhcGggcmFuZ2UuCi0gICAgLy8gU29tZWRheSB3ZSBtaWdodCBo
YXZlIGEgY2FsbGVyIHRoYXQgZG9lc24ndCB1c2UgdGhpcywgYnV0IGZvciBub3cgYWxsIGNhbGxl
cnMgZG8uCi0gICAgcGFyYWdyYXBoU3RyaW5nID0gcGxhaW5UZXh0KHBhcmFncmFwaFJhbmdlLmdl
dCgpKTsKLQotICAgIHJldHVybiBwYXJhZ3JhcGhSYW5nZTsKLX0KLQotc3RhdGljIGludCBmaW5k
Rmlyc3RHcmFtbWFyRGV0YWlsSW5SYW5nZShjb25zdCBWZWN0b3I8R3JhbW1hckRldGFpbD4mIGdy
YW1tYXJEZXRhaWxzLCBpbnQgYmFkR3JhbW1hclBocmFzZUxvY2F0aW9uLCBpbnQgLypiYWRHcmFt
bWFyUGhyYXNlTGVuZ3RoKi8sIFJhbmdlICpzZWFyY2hSYW5nZSwgaW50IHN0YXJ0T2Zmc2V0LCBp
bnQgZW5kT2Zmc2V0LCBib29sIG1hcmtBbGwpCi17Ci0gICAgLy8gRm91bmQgc29tZSBiYWQgZ3Jh
bW1hci4gRmluZCB0aGUgZWFybGllc3QgZGV0YWlsIHJhbmdlIHRoYXQgc3RhcnRzIGluIG91ciBz
ZWFyY2ggcmFuZ2UgKGlmIGFueSkuCi0gICAgLy8gT3B0aW9uYWxseSBhZGQgYSBEb2N1bWVudE1h
cmtlciBmb3IgZWFjaCBkZXRhaWwgaW4gdGhlIHJhbmdlLgotICAgIGludCBlYXJsaWVzdERldGFp
bExvY2F0aW9uU29GYXIgPSAtMTsKLSAgICBpbnQgZWFybGllc3REZXRhaWxJbmRleCA9IC0xOwot
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBncmFtbWFyRGV0YWlscy5zaXplKCk7IGkrKykg
ewotICAgICAgICBjb25zdCBHcmFtbWFyRGV0YWlsKiBkZXRhaWwgPSAmZ3JhbW1hckRldGFpbHNb
aV07Ci0gICAgICAgIEFTU0VSVChkZXRhaWwtPmxlbmd0aCA+IDAgJiYgZGV0YWlsLT5sb2NhdGlv
biA+PSAwKTsKLSAgICAgICAgCi0gICAgICAgIGludCBkZXRhaWxTdGFydE9mZnNldEluUGFyYWdy
YXBoID0gYmFkR3JhbW1hclBocmFzZUxvY2F0aW9uICsgZGV0YWlsLT5sb2NhdGlvbjsKLSAgICAg
ICAgCi0gICAgICAgIC8vIFNraXAgdGhpcyBkZXRhaWwgaWYgaXQgc3RhcnRzIGJlZm9yZSB0aGUg
b3JpZ2luYWwgc2VhcmNoIHJhbmdlCi0gICAgICAgIGlmIChkZXRhaWxTdGFydE9mZnNldEluUGFy
YWdyYXBoIDwgc3RhcnRPZmZzZXQpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgCi0g
ICAgICAgIC8vIFNraXAgdGhpcyBkZXRhaWwgaWYgaXQgc3RhcnRzIGFmdGVyIHRoZSBvcmlnaW5h
bCBzZWFyY2ggcmFuZ2UKLSAgICAgICAgaWYgKGRldGFpbFN0YXJ0T2Zmc2V0SW5QYXJhZ3JhcGgg
Pj0gZW5kT2Zmc2V0KQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIAotICAgICAgICBp
ZiAobWFya0FsbCkgewotICAgICAgICAgICAgUmVmUHRyPFJhbmdlPiBiYWRHcmFtbWFyUmFuZ2Ug
PSBUZXh0SXRlcmF0b3I6OnN1YnJhbmdlKHNlYXJjaFJhbmdlLCBiYWRHcmFtbWFyUGhyYXNlTG9j
YXRpb24gLSBzdGFydE9mZnNldCArIGRldGFpbC0+bG9jYXRpb24sIGRldGFpbC0+bGVuZ3RoKTsK
LSAgICAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgICAgICAgICAgYmFkR3JhbW1h
clJhbmdlLT5zdGFydENvbnRhaW5lcihlYyktPmRvY3VtZW50KCktPm1hcmtlcnMoKS0+YWRkTWFy
a2VyKGJhZEdyYW1tYXJSYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OkdyYW1tYXIsIGRldGFp
bC0+dXNlckRlc2NyaXB0aW9uKTsKLSAgICAgICAgICAgIEFTU0VSVCghZWMpOwotICAgICAgICB9
Ci0gICAgICAgIAotICAgICAgICAvLyBSZW1lbWJlciB0aGlzIGRldGFpbCBvbmx5IGlmIGl0J3Mg
ZWFybGllciB0aGFuIG91ciBjdXJyZW50IGNhbmRpZGF0ZSAodGhlIGRldGFpbHMgYXJlbid0IGlu
IGEgZ3VhcmFudGVlZCBvcmRlcikKLSAgICAgICAgaWYgKGVhcmxpZXN0RGV0YWlsSW5kZXggPCAw
IHx8IGVhcmxpZXN0RGV0YWlsTG9jYXRpb25Tb0ZhciA+IGRldGFpbC0+bG9jYXRpb24pIHsKLSAg
ICAgICAgICAgIGVhcmxpZXN0RGV0YWlsSW5kZXggPSBpOwotICAgICAgICAgICAgZWFybGllc3RE
ZXRhaWxMb2NhdGlvblNvRmFyID0gZGV0YWlsLT5sb2NhdGlvbjsKLSAgICAgICAgfQotICAgIH0K
LSAgICAKLSAgICByZXR1cm4gZWFybGllc3REZXRhaWxJbmRleDsKLX0KLSAgICAKLXN0YXRpYyBT
dHJpbmcgZmluZEZpcnN0QmFkR3JhbW1hckluUmFuZ2UoRWRpdG9yQ2xpZW50KiBjbGllbnQsIFJh
bmdlKiBzZWFyY2hSYW5nZSwgR3JhbW1hckRldGFpbCYgb3V0R3JhbW1hckRldGFpbCwgaW50JiBv
dXRHcmFtbWFyUGhyYXNlT2Zmc2V0LCBib29sIG1hcmtBbGwpCi17Ci0gICAgQVNTRVJUX0FSRyhj
bGllbnQsIGNsaWVudCk7Ci0gICAgQVNTRVJUX0FSRyhzZWFyY2hSYW5nZSwgc2VhcmNoUmFuZ2Up
OwotICAgIAotICAgIC8vIEluaXRpYWxpemUgb3V0IHBhcmFtZXRlcnM7IHRoZXNlIHdpbGwgYmUg
dXBkYXRlZCBpZiB3ZSBmaW5kIHNvbWV0aGluZyB0byByZXR1cm4uCi0gICAgb3V0R3JhbW1hckRl
dGFpbC5sb2NhdGlvbiA9IC0xOwotICAgIG91dEdyYW1tYXJEZXRhaWwubGVuZ3RoID0gMDsKLSAg
ICBvdXRHcmFtbWFyRGV0YWlsLmd1ZXNzZXMuY2xlYXIoKTsKLSAgICBvdXRHcmFtbWFyRGV0YWls
LnVzZXJEZXNjcmlwdGlvbiA9ICIiOwotICAgIG91dEdyYW1tYXJQaHJhc2VPZmZzZXQgPSAwOwot
ICAgIAotICAgIFN0cmluZyBmaXJzdEJhZEdyYW1tYXJQaHJhc2U7Ci0KLSAgICAvLyBFeHBhbmQg
dGhlIHNlYXJjaCByYW5nZSB0byBlbmNvbXBhc3MgZW50aXJlIHBhcmFncmFwaHMsIHNpbmNlIGdy
YW1tYXIgY2hlY2tpbmcgbmVlZHMgdGhhdCBtdWNoIGNvbnRleHQuCi0gICAgLy8gRGV0ZXJtaW5l
IHRoZSBjaGFyYWN0ZXIgb2Zmc2V0IGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBwYXJhZ3JhcGggdG8g
dGhlIHN0YXJ0IG9mIHRoZSBvcmlnaW5hbCBzZWFyY2ggcmFuZ2UsCi0gICAgLy8gc2luY2Ugd2Ug
d2lsbCB3YW50IHRvIGlnbm9yZSByZXN1bHRzIGluIHRoaXMgYXJlYS4KLSAgICBpbnQgc2VhcmNo
UmFuZ2VTdGFydE9mZnNldDsKLSAgICBTdHJpbmcgcGFyYWdyYXBoU3RyaW5nOwotICAgIFJlZlB0
cjxSYW5nZT4gcGFyYWdyYXBoUmFuZ2UgPSBwYXJhZ3JhcGhBbGlnbmVkUmFuZ2VGb3JSYW5nZShz
ZWFyY2hSYW5nZSwgc2VhcmNoUmFuZ2VTdGFydE9mZnNldCwgcGFyYWdyYXBoU3RyaW5nKTsKLSAg
ICAgICAgCi0gICAgLy8gRGV0ZXJtaW5lIHRoZSBjaGFyYWN0ZXIgb2Zmc2V0IGZyb20gdGhlIHN0
YXJ0IG9mIHRoZSBwYXJhZ3JhcGggdG8gdGhlIGVuZCBvZiB0aGUgb3JpZ2luYWwgc2VhcmNoIHJh
bmdlLCAKLSAgICAvLyBzaW5jZSB3ZSB3aWxsIHdhbnQgdG8gaWdub3JlIHJlc3VsdHMgaW4gdGhp
cyBhcmVhIGFsc28uCi0gICAgaW50IHNlYXJjaFJhbmdlRW5kT2Zmc2V0ID0gc2VhcmNoUmFuZ2VT
dGFydE9mZnNldCArIFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgoc2VhcmNoUmFuZ2UpOwotICAg
ICAgICAKLSAgICAvLyBTdGFydCBjaGVja2luZyBmcm9tIGJlZ2lubmluZyBvZiBwYXJhZ3JhcGgs
IGJ1dCBza2lwIHBhc3QgcmVzdWx0cyB0aGF0IG9jY3VyIGJlZm9yZSB0aGUgc3RhcnQgb2YgdGhl
IG9yaWdpbmFsIHNlYXJjaCByYW5nZS4KLSAgICBpbnQgc3RhcnRPZmZzZXQgPSAwOwotICAgIHdo
aWxlIChzdGFydE9mZnNldCA8IHNlYXJjaFJhbmdlRW5kT2Zmc2V0KSB7Ci0gICAgICAgIFZlY3Rv
cjxHcmFtbWFyRGV0YWlsPiBncmFtbWFyRGV0YWlsczsKLSAgICAgICAgaW50IGJhZEdyYW1tYXJQ
aHJhc2VMb2NhdGlvbiA9IC0xOwotICAgICAgICBpbnQgYmFkR3JhbW1hclBocmFzZUxlbmd0aCA9
IDA7Ci0gICAgICAgIGNsaWVudC0+Y2hlY2tHcmFtbWFyT2ZTdHJpbmcocGFyYWdyYXBoU3RyaW5n
LmNoYXJhY3RlcnMoKSArIHN0YXJ0T2Zmc2V0LCBwYXJhZ3JhcGhTdHJpbmcubGVuZ3RoKCkgLSBz
dGFydE9mZnNldCwgZ3JhbW1hckRldGFpbHMsICZiYWRHcmFtbWFyUGhyYXNlTG9jYXRpb24sICZi
YWRHcmFtbWFyUGhyYXNlTGVuZ3RoKTsKLSAgICAgICAgCi0gICAgICAgIGlmICghYmFkR3JhbW1h
clBocmFzZUxlbmd0aCkgewotICAgICAgICAgICAgQVNTRVJUKGJhZEdyYW1tYXJQaHJhc2VMb2Nh
dGlvbiA9PSAtMSk7Ci0gICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBBU1NFUlQoYmFkR3JhbW1hclBocmFzZUxvY2F0aW9uID49IDApOwotICAgICAgICBi
YWRHcmFtbWFyUGhyYXNlTG9jYXRpb24gKz0gc3RhcnRPZmZzZXQ7Ci0KLSAgICAgICAgCi0gICAg
ICAgIC8vIEZvdW5kIHNvbWUgYmFkIGdyYW1tYXIuIEZpbmQgdGhlIGVhcmxpZXN0IGRldGFpbCBy
YW5nZSB0aGF0IHN0YXJ0cyBpbiBvdXIgc2VhcmNoIHJhbmdlIChpZiBhbnkpLgotICAgICAgICBp
bnQgYmFkR3JhbW1hckluZGV4ID0gZmluZEZpcnN0R3JhbW1hckRldGFpbEluUmFuZ2UoZ3JhbW1h
ckRldGFpbHMsIGJhZEdyYW1tYXJQaHJhc2VMb2NhdGlvbiwgYmFkR3JhbW1hclBocmFzZUxlbmd0
aCwgc2VhcmNoUmFuZ2UsIHNlYXJjaFJhbmdlU3RhcnRPZmZzZXQsIHNlYXJjaFJhbmdlRW5kT2Zm
c2V0LCBtYXJrQWxsKTsKLSAgICAgICAgaWYgKGJhZEdyYW1tYXJJbmRleCA+PSAwKSB7Ci0gICAg
ICAgICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGJhZEdyYW1tYXJJbmRleCkgPCBn
cmFtbWFyRGV0YWlscy5zaXplKCkpOwotICAgICAgICAgICAgb3V0R3JhbW1hckRldGFpbCA9IGdy
YW1tYXJEZXRhaWxzW2JhZEdyYW1tYXJJbmRleF07Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBJ
ZiB3ZSBmb3VuZCBhIGRldGFpbCBpbiByYW5nZSwgdGhlbiB3ZSBoYXZlIGZvdW5kIHRoZSBmaXJz
dCBiYWQgcGhyYXNlICh1bmxlc3Mgd2UgZm91bmQgb25lIGVhcmxpZXIgYnV0Ci0gICAgICAgIC8v
IGtlcHQgZ29pbmcgc28gd2UgY291bGQgbWFyayBhbGwgaW5zdGFuY2VzKS4KLSAgICAgICAgaWYg
KGJhZEdyYW1tYXJJbmRleCA+PSAwICYmIGZpcnN0QmFkR3JhbW1hclBocmFzZS5pc0VtcHR5KCkp
IHsKLSAgICAgICAgICAgIG91dEdyYW1tYXJQaHJhc2VPZmZzZXQgPSBiYWRHcmFtbWFyUGhyYXNl
TG9jYXRpb24gLSBzZWFyY2hSYW5nZVN0YXJ0T2Zmc2V0OwotICAgICAgICAgICAgZmlyc3RCYWRH
cmFtbWFyUGhyYXNlID0gcGFyYWdyYXBoU3RyaW5nLnN1YnN0cmluZyhiYWRHcmFtbWFyUGhyYXNl
TG9jYXRpb24sIGJhZEdyYW1tYXJQaHJhc2VMZW5ndGgpOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICAvLyBGb3VuZCBvbmUuIFdlJ3JlIGRvbmUgbm93LCB1bmxlc3Mgd2UncmUgbWFya2luZyBl
YWNoIGluc3RhbmNlLgotICAgICAgICAgICAgaWYgKCFtYXJrQWxsKQotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gVGhlc2UgcmVzdWx0cyB3ZXJlIGFsbCBi
ZXR3ZWVuIHRoZSBzdGFydCBvZiB0aGUgcGFyYWdyYXBoIGFuZCB0aGUgc3RhcnQgb2YgdGhlIHNl
YXJjaCByYW5nZTsgbG9vawotICAgICAgICAvLyBiZXlvbmQgdGhpcyBwaHJhc2UuCi0gICAgICAg
IHN0YXJ0T2Zmc2V0ID0gYmFkR3JhbW1hclBocmFzZUxvY2F0aW9uICsgYmFkR3JhbW1hclBocmFz
ZUxlbmd0aDsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGZpcnN0QmFkR3JhbW1hclBocmFzZTsK
LX0KLSAgICAKLSNlbmRpZiAvKiBub3QgQlVJTERJTkdfT05fVElHRVIgKi8KLQotI2lmIFBMQVRG
T1JNKE1BQykgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxE
SU5HX09OX0xFT1BBUkQpCi0KLXN0YXRpYyBTdHJpbmcgZmluZEZpcnN0TWlzc3BlbGxpbmdPckJh
ZEdyYW1tYXJJblJhbmdlKEVkaXRvckNsaWVudCogY2xpZW50LCBSYW5nZSogc2VhcmNoUmFuZ2Us
IGJvb2wgY2hlY2tHcmFtbWFyLCBib29sJiBvdXRJc1NwZWxsaW5nLCBpbnQmIG91dEZpcnN0Rm91
bmRPZmZzZXQsIEdyYW1tYXJEZXRhaWwmIG91dEdyYW1tYXJEZXRhaWwpCi17Ci0gICAgQVNTRVJU
X0FSRyhjbGllbnQsIGNsaWVudCk7Ci0gICAgQVNTRVJUX0FSRyhzZWFyY2hSYW5nZSwgc2VhcmNo
UmFuZ2UpOwotICAgIAotICAgIFN0cmluZyBmaXJzdEZvdW5kSXRlbTsKLSAgICBTdHJpbmcgbWlz
c3BlbGxlZFdvcmQ7Ci0gICAgU3RyaW5nIGJhZEdyYW1tYXJQaHJhc2U7Ci0gICAgRXhjZXB0aW9u
Q29kZSBlYyA9IDA7Ci0gICAgCi0gICAgLy8gSW5pdGlhbGl6ZSBvdXQgcGFyYW1ldGVyczsgdGhl
c2Ugd2lsbCBiZSB1cGRhdGVkIGlmIHdlIGZpbmQgc29tZXRoaW5nIHRvIHJldHVybi4KLSAgICBv
dXRJc1NwZWxsaW5nID0gdHJ1ZTsKLSAgICBvdXRGaXJzdEZvdW5kT2Zmc2V0ID0gMDsKLSAgICBv
dXRHcmFtbWFyRGV0YWlsLmxvY2F0aW9uID0gLTE7Ci0gICAgb3V0R3JhbW1hckRldGFpbC5sZW5n
dGggPSAwOwotICAgIG91dEdyYW1tYXJEZXRhaWwuZ3Vlc3Nlcy5jbGVhcigpOwotICAgIG91dEdy
YW1tYXJEZXRhaWwudXNlckRlc2NyaXB0aW9uID0gIiI7Ci0gICAgCi0gICAgLy8gRXhwYW5kIHRo
ZSBzZWFyY2ggcmFuZ2UgdG8gZW5jb21wYXNzIGVudGlyZSBwYXJhZ3JhcGhzLCBzaW5jZSB0ZXh0
IGNoZWNraW5nIG5lZWRzIHRoYXQgbXVjaCBjb250ZXh0LgotICAgIC8vIERldGVybWluZSB0aGUg
Y2hhcmFjdGVyIG9mZnNldCBmcm9tIHRoZSBzdGFydCBvZiB0aGUgcGFyYWdyYXBoIHRvIHRoZSBz
dGFydCBvZiB0aGUgb3JpZ2luYWwgc2VhcmNoIHJhbmdlLAotICAgIC8vIHNpbmNlIHdlIHdpbGwg
d2FudCB0byBpZ25vcmUgcmVzdWx0cyBpbiB0aGlzIGFyZWEuCi0gICAgUmVmUHRyPFJhbmdlPiBw
YXJhZ3JhcGhSYW5nZSA9IHNlYXJjaFJhbmdlLT5jbG9uZVJhbmdlKGVjKTsKLSAgICBzZXRTdGFy
dChwYXJhZ3JhcGhSYW5nZS5nZXQoKSwgc3RhcnRPZlBhcmFncmFwaChzZWFyY2hSYW5nZS0+c3Rh
cnRQb3NpdGlvbigpKSk7Ci0gICAgaW50IHRvdGFsUmFuZ2VMZW5ndGggPSBUZXh0SXRlcmF0b3I6
OnJhbmdlTGVuZ3RoKHBhcmFncmFwaFJhbmdlLmdldCgpKTsKLSAgICBzZXRFbmQocGFyYWdyYXBo
UmFuZ2UuZ2V0KCksIGVuZE9mUGFyYWdyYXBoKHNlYXJjaFJhbmdlLT5zdGFydFBvc2l0aW9uKCkp
KTsKLSAgICAKLSAgICBSZWZQdHI8UmFuZ2U+IG9mZnNldEFzUmFuZ2UgPSBSYW5nZTo6Y3JlYXRl
KHBhcmFncmFwaFJhbmdlLT5zdGFydENvbnRhaW5lcihlYyktPmRvY3VtZW50KCksIHBhcmFncmFw
aFJhbmdlLT5zdGFydFBvc2l0aW9uKCksIHNlYXJjaFJhbmdlLT5zdGFydFBvc2l0aW9uKCkpOwot
ICAgIGludCBzZWFyY2hSYW5nZVN0YXJ0T2Zmc2V0ID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0
aChvZmZzZXRBc1JhbmdlLmdldCgpKTsKLSAgICBpbnQgdG90YWxMZW5ndGhQcm9jZXNzZWQgPSAw
OwotICAgIAotICAgIGJvb2wgZmlyc3RJdGVyYXRpb24gPSB0cnVlOwotICAgIGJvb2wgbGFzdEl0
ZXJhdGlvbiA9IGZhbHNlOwotICAgIHdoaWxlICh0b3RhbExlbmd0aFByb2Nlc3NlZCA8IHRvdGFs
UmFuZ2VMZW5ndGgpIHsKLSAgICAgICAgLy8gSXRlcmF0ZSB0aHJvdWdoIHRoZSBzZWFyY2ggcmFu
Z2UgYnkgcGFyYWdyYXBocywgY2hlY2tpbmcgZWFjaCBvbmUgZm9yIHNwZWxsaW5nIGFuZCBncmFt
bWFyLgotICAgICAgICBpbnQgY3VycmVudExlbmd0aCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5n
dGgocGFyYWdyYXBoUmFuZ2UuZ2V0KCkpOwotICAgICAgICBpbnQgY3VycmVudFN0YXJ0T2Zmc2V0
ID0gZmlyc3RJdGVyYXRpb24gPyBzZWFyY2hSYW5nZVN0YXJ0T2Zmc2V0IDogMDsKLSAgICAgICAg
aW50IGN1cnJlbnRFbmRPZmZzZXQgPSBjdXJyZW50TGVuZ3RoOwotICAgICAgICBpZiAoaW5TYW1l
UGFyYWdyYXBoKHBhcmFncmFwaFJhbmdlLT5zdGFydFBvc2l0aW9uKCksIHNlYXJjaFJhbmdlLT5l
bmRQb3NpdGlvbigpKSkgewotICAgICAgICAgICAgLy8gRGV0ZXJtaW5lIHRoZSBjaGFyYWN0ZXIg
b2Zmc2V0IGZyb20gdGhlIGVuZCBvZiB0aGUgb3JpZ2luYWwgc2VhcmNoIHJhbmdlIHRvIHRoZSBl
bmQgb2YgdGhlIHBhcmFncmFwaCwKLSAgICAgICAgICAgIC8vIHNpbmNlIHdlIHdpbGwgd2FudCB0
byBpZ25vcmUgcmVzdWx0cyBpbiB0aGlzIGFyZWEuCi0gICAgICAgICAgICBSZWZQdHI8UmFuZ2U+
IGVuZE9mZnNldEFzUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKHBhcmFncmFwaFJhbmdlLT5zdGFydENv
bnRhaW5lcihlYyktPmRvY3VtZW50KCksIHBhcmFncmFwaFJhbmdlLT5zdGFydFBvc2l0aW9uKCks
IHNlYXJjaFJhbmdlLT5lbmRQb3NpdGlvbigpKTsKLSAgICAgICAgICAgIGN1cnJlbnRFbmRPZmZz
ZXQgPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKGVuZE9mZnNldEFzUmFuZ2UuZ2V0KCkpOwot
ICAgICAgICAgICAgbGFzdEl0ZXJhdGlvbiA9IHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYg
KGN1cnJlbnRTdGFydE9mZnNldCA8IGN1cnJlbnRFbmRPZmZzZXQpIHsKLSAgICAgICAgICAgIFN0
cmluZyBwYXJhZ3JhcGhTdHJpbmcgPSBwbGFpblRleHQocGFyYWdyYXBoUmFuZ2UuZ2V0KCkpOwot
ICAgICAgICAgICAgaWYgKHBhcmFncmFwaFN0cmluZy5sZW5ndGgoKSA+IDApIHsKLSAgICAgICAg
ICAgICAgICBib29sIGZvdW5kR3JhbW1hciA9IGZhbHNlOwotICAgICAgICAgICAgICAgIGludCBz
cGVsbGluZ0xvY2F0aW9uID0gMDsKLSAgICAgICAgICAgICAgICBpbnQgZ3JhbW1hclBocmFzZUxv
Y2F0aW9uID0gMDsKLSAgICAgICAgICAgICAgICBpbnQgZ3JhbW1hckRldGFpbExvY2F0aW9uID0g
MDsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBncmFtbWFyRGV0YWlsSW5kZXggPSAwOwotICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+
IHJlc3VsdHM7Ci0gICAgICAgICAgICAgICAgdWludDY0X3QgY2hlY2tpbmdUeXBlcyA9IGNoZWNr
R3JhbW1hciA/IChUZXh0Q2hlY2tpbmdUeXBlU3BlbGxpbmcgfCBUZXh0Q2hlY2tpbmdUeXBlR3Jh
bW1hcikgOiBUZXh0Q2hlY2tpbmdUeXBlU3BlbGxpbmc7Ci0gICAgICAgICAgICAgICAgY2xpZW50
LT5jaGVja1RleHRPZlBhcmFncmFwaChwYXJhZ3JhcGhTdHJpbmcuY2hhcmFjdGVycygpLCBwYXJh
Z3JhcGhTdHJpbmcubGVuZ3RoKCksIGNoZWNraW5nVHlwZXMsIHJlc3VsdHMpOwotICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZXN1bHRz
LnNpemUoKTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0IFRleHRDaGVja2luZ1Jl
c3VsdCogcmVzdWx0ID0gJnJlc3VsdHNbaV07Ci0gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1
bHQtPnR5cGUgPT0gVGV4dENoZWNraW5nVHlwZVNwZWxsaW5nICYmIHJlc3VsdC0+bG9jYXRpb24g
Pj0gY3VycmVudFN0YXJ0T2Zmc2V0ICYmIHJlc3VsdC0+bG9jYXRpb24gKyByZXN1bHQtPmxlbmd0
aCA8PSBjdXJyZW50RW5kT2Zmc2V0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQo
cmVzdWx0LT5sZW5ndGggPiAwICYmIHJlc3VsdC0+bG9jYXRpb24gPj0gMCk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBzcGVsbGluZ0xvY2F0aW9uID0gcmVzdWx0LT5sb2NhdGlvbjsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIG1pc3NwZWxsZWRXb3JkID0gcGFyYWdyYXBoU3RyaW5nLnN1YnN0
cmluZyhyZXN1bHQtPmxvY2F0aW9uLCByZXN1bHQtPmxlbmd0aCk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBBU1NFUlQobWlzc3BlbGxlZFdvcmQubGVuZ3RoKCkpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgaWYgKGNoZWNrR3JhbW1hciAmJiByZXN1bHQtPnR5cGUgPT0gVGV4dENoZWNraW5nVHlwZUdy
YW1tYXIgJiYgcmVzdWx0LT5sb2NhdGlvbiA8IGN1cnJlbnRFbmRPZmZzZXQgJiYgcmVzdWx0LT5s
b2NhdGlvbiArIHJlc3VsdC0+bGVuZ3RoID4gY3VycmVudFN0YXJ0T2Zmc2V0KSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBBU1NFUlQocmVzdWx0LT5sZW5ndGggPiAwICYmIHJlc3VsdC0+bG9j
YXRpb24gPj0gMCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBjYW4ndCBzdG9wIGFm
dGVyIHRoZSBmaXJzdCBncmFtbWFyIHJlc3VsdCwgc2luY2UgdGhlcmUgbWlnaHQgc3RpbGwgYmUg
YSBzcGVsbGluZyByZXN1bHQgYWZ0ZXIKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGl0IGJl
Z2lucyBidXQgYmVmb3JlIHRoZSBmaXJzdCBkZXRhaWwgaW4gaXQsIGJ1dCB3ZSBjYW4gc3RvcCBp
ZiB3ZSBmaW5kIGEgc2Vjb25kIGdyYW1tYXIgcmVzdWx0LgotICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKGZvdW5kR3JhbW1hcikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCByZXN1bHQt
PmRldGFpbHMuc2l6ZSgpOyBqKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBHcmFtbWFyRGV0YWlsKiBkZXRhaWwgPSAmcmVzdWx0LT5kZXRhaWxzW2pdOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEFTU0VSVChkZXRhaWwtPmxlbmd0aCA+IDAgJiYgZGV0YWlsLT5s
b2NhdGlvbiA+PSAwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LT5s
b2NhdGlvbiArIGRldGFpbC0+bG9jYXRpb24gPj0gY3VycmVudFN0YXJ0T2Zmc2V0ICYmIHJlc3Vs
dC0+bG9jYXRpb24gKyBkZXRhaWwtPmxvY2F0aW9uICsgZGV0YWlsLT5sZW5ndGggPD0gY3VycmVu
dEVuZE9mZnNldCAmJiAoIWZvdW5kR3JhbW1hciB8fCByZXN1bHQtPmxvY2F0aW9uICsgZGV0YWls
LT5sb2NhdGlvbiA8IGdyYW1tYXJEZXRhaWxMb2NhdGlvbikpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZ3JhbW1hckRldGFpbEluZGV4ID0gajsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZ3JhbW1hckRldGFpbExvY2F0aW9uID0gcmVzdWx0LT5sb2NhdGlvbiAr
IGRldGFpbC0+bG9jYXRpb247Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5k
R3JhbW1hciA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvdW5kR3JhbW1h
cikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyYW1tYXJQaHJhc2VMb2NhdGlvbiA9
IHJlc3VsdC0+bG9jYXRpb247Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0R3JhbW1h
ckRldGFpbCA9IHJlc3VsdC0+ZGV0YWlsc1tncmFtbWFyRGV0YWlsSW5kZXhdOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJhZEdyYW1tYXJQaHJhc2UgPSBwYXJhZ3JhcGhTdHJpbmcuc3Vi
c3RyaW5nKHJlc3VsdC0+bG9jYXRpb24sIHJlc3VsdC0+bGVuZ3RoKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBBU1NFUlQoYmFkR3JhbW1hclBocmFzZS5sZW5ndGgoKSk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoIW1pc3NwZWxsZWRXb3JkLmlzRW1wdHkoKSAmJiAo
IWNoZWNrR3JhbW1hciB8fCBiYWRHcmFtbWFyUGhyYXNlLmlzRW1wdHkoKSB8fCBzcGVsbGluZ0xv
Y2F0aW9uIDw9IGdyYW1tYXJEZXRhaWxMb2NhdGlvbikpIHsKLSAgICAgICAgICAgICAgICAgICAg
aW50IHNwZWxsaW5nT2Zmc2V0ID0gc3BlbGxpbmdMb2NhdGlvbiAtIGN1cnJlbnRTdGFydE9mZnNl
dDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFmaXJzdEl0ZXJhdGlvbikgewotICAgICAgICAg
ICAgICAgICAgICAgICAgUmVmUHRyPFJhbmdlPiBwYXJhZ3JhcGhPZmZzZXRBc1JhbmdlID0gUmFu
Z2U6OmNyZWF0ZShwYXJhZ3JhcGhSYW5nZS0+c3RhcnRDb250YWluZXIoZWMpLT5kb2N1bWVudCgp
LCBzZWFyY2hSYW5nZS0+c3RhcnRQb3NpdGlvbigpLCBwYXJhZ3JhcGhSYW5nZS0+c3RhcnRQb3Np
dGlvbigpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNwZWxsaW5nT2Zmc2V0ICs9IFRleHRJ
dGVyYXRvcjo6cmFuZ2VMZW5ndGgocGFyYWdyYXBoT2Zmc2V0QXNSYW5nZS5nZXQoKSk7Ci0gICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgb3V0SXNTcGVsbGluZyA9IHRy
dWU7Ci0gICAgICAgICAgICAgICAgICAgIG91dEZpcnN0Rm91bmRPZmZzZXQgPSBzcGVsbGluZ09m
ZnNldDsKLSAgICAgICAgICAgICAgICAgICAgZmlyc3RGb3VuZEl0ZW0gPSBtaXNzcGVsbGVkV29y
ZDsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIGlmIChjaGVja0dyYW1tYXIgJiYgIWJhZEdyYW1tYXJQaHJhc2UuaXNFbXB0eSgp
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGludCBncmFtbWFyUGhyYXNlT2Zmc2V0ID0gZ3JhbW1h
clBocmFzZUxvY2F0aW9uIC0gY3VycmVudFN0YXJ0T2Zmc2V0OwotICAgICAgICAgICAgICAgICAg
ICBpZiAoIWZpcnN0SXRlcmF0aW9uKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBSZWZQdHI8
UmFuZ2U+IHBhcmFncmFwaE9mZnNldEFzUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKHBhcmFncmFwaFJh
bmdlLT5zdGFydENvbnRhaW5lcihlYyktPmRvY3VtZW50KCksIHNlYXJjaFJhbmdlLT5zdGFydFBv
c2l0aW9uKCksIHBhcmFncmFwaFJhbmdlLT5zdGFydFBvc2l0aW9uKCkpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgZ3JhbW1hclBocmFzZU9mZnNldCArPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVu
Z3RoKHBhcmFncmFwaE9mZnNldEFzUmFuZ2UuZ2V0KCkpOwotICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgIG91dElzU3BlbGxpbmcgPSBmYWxzZTsKLSAgICAgICAgICAg
ICAgICAgICAgb3V0Rmlyc3RGb3VuZE9mZnNldCA9IGdyYW1tYXJQaHJhc2VPZmZzZXQ7Ci0gICAg
ICAgICAgICAgICAgICAgIGZpcnN0Rm91bmRJdGVtID0gYmFkR3JhbW1hclBocmFzZTsKLSAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgICAgIGlmIChsYXN0SXRlcmF0aW9uIHx8IHRvdGFsTGVuZ3RoUHJvY2Vz
c2VkICsgY3VycmVudExlbmd0aCA+PSB0b3RhbFJhbmdlTGVuZ3RoKQotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIFZpc2libGVQb3NpdGlvbiBuZXdQYXJhZ3JhcGhTdGFydCA9IHN0YXJ0T2ZO
ZXh0UGFyYWdyYXBoKHBhcmFncmFwaFJhbmdlLT5lbmRQb3NpdGlvbigpKTsKLSAgICAgICAgc2V0
U3RhcnQocGFyYWdyYXBoUmFuZ2UuZ2V0KCksIG5ld1BhcmFncmFwaFN0YXJ0KTsKLSAgICAgICAg
c2V0RW5kKHBhcmFncmFwaFJhbmdlLmdldCgpLCBlbmRPZlBhcmFncmFwaChuZXdQYXJhZ3JhcGhT
dGFydCkpOwotICAgICAgICBmaXJzdEl0ZXJhdGlvbiA9IGZhbHNlOwotICAgICAgICB0b3RhbExl
bmd0aFByb2Nlc3NlZCArPSBjdXJyZW50TGVuZ3RoOwotICAgIH0KLSAgICByZXR1cm4gZmlyc3RG
b3VuZEl0ZW07Ci19Ci0KLSNlbmRpZgotCiB2b2lkIEVkaXRvcjo6YWR2YW5jZVRvTmV4dE1pc3Nw
ZWxsaW5nKGJvb2wgc3RhcnRCZWZvcmVTZWxlY3Rpb24pCiB7CiAgICAgRXhjZXB0aW9uQ29kZSBl
YyA9IDA7CkBAIC0xOTc0LDYgKzE2NTMsOCBAQCB2b2lkIEVkaXRvcjo6YWR2YW5jZVRvTmV4dE1p
c3NwZWxsaW5nKGJvb2wgc3RhcnRCZWZvcmVTZWxlY3Rpb24pCiAgICAgLy8gcmVwZWF0ZWQgImNo
ZWNrIHNwZWxsaW5nIiBjb21tYW5kcyB3b3JrLgogICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0
aW9uKGZyYW1lKCktPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKSk7CiAgICAgUmVmUHRyPFJhbmdl
PiBzcGVsbGluZ1NlYXJjaFJhbmdlKHJhbmdlT2ZDb250ZW50cyhmcmFtZSgpLT5kb2N1bWVudCgp
KSk7CisgICAgUmFuZ2VNYXJrZXJDb250cm9sbGVyIG1hcmsoY2xpZW50KCksIHNwZWxsaW5nU2Vh
cmNoUmFuZ2UpOworCiAgICAgYm9vbCBzdGFydGVkV2l0aFNlbGVjdGlvbiA9IGZhbHNlOwogICAg
IGlmIChzZWxlY3Rpb24uc3RhcnQoKS5ub2RlKCkpIHsKICAgICAgICAgc3RhcnRlZFdpdGhTZWxl
Y3Rpb24gPSB0cnVlOwpAQCAtMjAzOSw3ICsxNzIwLDcgQEAgdm9pZCBFZGl0b3I6OmFkdmFuY2VU
b05leHRNaXNzcGVsbGluZyhib29sIHN0YXJ0QmVmb3JlU2VsZWN0aW9uKQogICAgIGJvb2wgaXNT
cGVsbGluZyA9IHRydWU7CiAgICAgaW50IGZvdW5kT2Zmc2V0ID0gMDsKICAgICBHcmFtbWFyRGV0
YWlsIGdyYW1tYXJEZXRhaWw7Ci0gICAgU3RyaW5nIGZvdW5kSXRlbSA9IGZpbmRGaXJzdE1pc3Nw
ZWxsaW5nT3JCYWRHcmFtbWFySW5SYW5nZShjbGllbnQoKSwgc3BlbGxpbmdTZWFyY2hSYW5nZS5n
ZXQoKSwgaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKCksIGlzU3BlbGxpbmcsIGZvdW5kT2Zmc2V0
LCBncmFtbWFyRGV0YWlsKTsKKyAgICBTdHJpbmcgZm91bmRJdGVtID0gbWFyay5maW5kRmlyc3RN
aXNzcGVsbGluZ09yQmFkR3JhbW1hcihpc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQoKSwgaXNTcGVs
bGluZywgZm91bmRPZmZzZXQsIGdyYW1tYXJEZXRhaWwpOwogICAgIGlmIChpc1NwZWxsaW5nKSB7
CiAgICAgICAgIG1pc3NwZWxsZWRXb3JkID0gZm91bmRJdGVtOwogICAgICAgICBtaXNzcGVsbGlu
Z09mZnNldCA9IGZvdW5kT2Zmc2V0OwpAQCAtMjA0OSw3ICsxNzMwLDcgQEAgdm9pZCBFZGl0b3I6
OmFkdmFuY2VUb05leHRNaXNzcGVsbGluZyhib29sIHN0YXJ0QmVmb3JlU2VsZWN0aW9uKQogICAg
IH0KICNlbHNlCiAgICAgUmVmUHRyPFJhbmdlPiBmaXJzdE1pc3NwZWxsaW5nUmFuZ2U7Ci0gICAg
U3RyaW5nIG1pc3NwZWxsZWRXb3JkID0gZmluZEZpcnN0TWlzc3BlbGxpbmdJblJhbmdlKGNsaWVu
dCgpLCBzcGVsbGluZ1NlYXJjaFJhbmdlLmdldCgpLCBtaXNzcGVsbGluZ09mZnNldCwgZmFsc2Us
IGZpcnN0TWlzc3BlbGxpbmdSYW5nZSk7CisgICAgU3RyaW5nIG1pc3NwZWxsZWRXb3JkID0gbWFy
ay5maW5kRmlyc3RNaXNzcGVsbGluZyhtaXNzcGVsbGluZ09mZnNldCwgZmFsc2UsIGZpcnN0TWlz
c3BlbGxpbmdSYW5nZSk7CiAgICAgU3RyaW5nIGJhZEdyYW1tYXJQaHJhc2U7CiAKICNpZm5kZWYg
QlVJTERJTkdfT05fVElHRVIKQEAgLTIwNjYsNyArMTc0Nyw3IEBAIHZvaWQgRWRpdG9yOjphZHZh
bmNlVG9OZXh0TWlzc3BlbGxpbmcoYm9vbCBzdGFydEJlZm9yZVNlbGVjdGlvbikKICAgICB9CiAg
ICAgCiAgICAgaWYgKGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCgpKQotICAgICAgICBiYWRHcmFt
bWFyUGhyYXNlID0gZmluZEZpcnN0QmFkR3JhbW1hckluUmFuZ2UoY2xpZW50KCksIGdyYW1tYXJT
ZWFyY2hSYW5nZS5nZXQoKSwgZ3JhbW1hckRldGFpbCwgZ3JhbW1hclBocmFzZU9mZnNldCwgZmFs
c2UpOworICAgICAgICBiYWRHcmFtbWFyUGhyYXNlID0gbWFyay5maW5kRmlyc3RCYWRHcmFtbWFy
KGdyYW1tYXJEZXRhaWwsIGdyYW1tYXJQaHJhc2VPZmZzZXQsIGZhbHNlKTsKICNlbmRpZgogI2Vu
ZGlmCiAgICAgCkBAIC0yMDc5LDcgKzE3NjAsNyBAQCB2b2lkIEVkaXRvcjo6YWR2YW5jZVRvTmV4
dE1pc3NwZWxsaW5nKGJvb2wgc3RhcnRCZWZvcmVTZWxlY3Rpb24pCiAgICAgICAgIAogI2lmIFBM
QVRGT1JNKE1BQykgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJV
SUxESU5HX09OX0xFT1BBUkQpCiAgICAgICAgIGdyYW1tYXJTZWFyY2hSYW5nZSA9IHNwZWxsaW5n
U2VhcmNoUmFuZ2UtPmNsb25lUmFuZ2UoZWMpOwotICAgICAgICBmb3VuZEl0ZW0gPSBmaW5kRmly
c3RNaXNzcGVsbGluZ09yQmFkR3JhbW1hckluUmFuZ2UoY2xpZW50KCksIHNwZWxsaW5nU2VhcmNo
UmFuZ2UuZ2V0KCksIGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCgpLCBpc1NwZWxsaW5nLCBmb3Vu
ZE9mZnNldCwgZ3JhbW1hckRldGFpbCk7CisgICAgICAgIGZvdW5kSXRlbSA9IG1hcmsuZmluZEZp
cnN0TWlzc3BlbGxpbmdPckJhZEdyYW1tYXIoaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKCksIGlz
U3BlbGxpbmcsIGZvdW5kT2Zmc2V0LCBncmFtbWFyRGV0YWlsKTsKICAgICAgICAgaWYgKGlzU3Bl
bGxpbmcpIHsKICAgICAgICAgICAgIG1pc3NwZWxsZWRXb3JkID0gZm91bmRJdGVtOwogICAgICAg
ICAgICAgbWlzc3BlbGxpbmdPZmZzZXQgPSBmb3VuZE9mZnNldDsKQEAgLTIwODgsNyArMTc2OSw3
IEBAIHZvaWQgRWRpdG9yOjphZHZhbmNlVG9OZXh0TWlzc3BlbGxpbmcoYm9vbCBzdGFydEJlZm9y
ZVNlbGVjdGlvbikKICAgICAgICAgICAgIGdyYW1tYXJQaHJhc2VPZmZzZXQgPSBmb3VuZE9mZnNl
dDsKICAgICAgICAgfQogI2Vsc2UKLSAgICAgICAgbWlzc3BlbGxlZFdvcmQgPSBmaW5kRmlyc3RN
aXNzcGVsbGluZ0luUmFuZ2UoY2xpZW50KCksIHNwZWxsaW5nU2VhcmNoUmFuZ2UuZ2V0KCksIG1p
c3NwZWxsaW5nT2Zmc2V0LCBmYWxzZSwgZmlyc3RNaXNzcGVsbGluZ1JhbmdlKTsKKyAgICAgICAg
bWlzc3BlbGxlZFdvcmQgPSBtYXJrLmZpbmRGaXJzdE1pc3NwZWxsaW5nKG1pc3NwZWxsaW5nT2Zm
c2V0LCBmYWxzZSwgZmlyc3RNaXNzcGVsbGluZ1JhbmdlKTsKIAogI2lmbmRlZiBCVUlMRElOR19P
Tl9USUdFUgogICAgICAgICBncmFtbWFyU2VhcmNoUmFuZ2UgPSBzcGVsbGluZ1NlYXJjaFJhbmdl
LT5jbG9uZVJhbmdlKGVjKTsKQEAgLTIwOTksNyArMTc4MCw3IEBAIHZvaWQgRWRpdG9yOjphZHZh
bmNlVG9OZXh0TWlzc3BlbGxpbmcoYm9vbCBzdGFydEJlZm9yZVNlbGVjdGlvbikKICAgICAgICAg
ICAgIGdyYW1tYXJTZWFyY2hSYW5nZS0+c2V0RW5kKGNoYXJzLnJhbmdlKCktPnN0YXJ0Q29udGFp
bmVyKGVjKSwgY2hhcnMucmFuZ2UoKS0+c3RhcnRPZmZzZXQoZWMpLCBlYyk7CiAgICAgICAgIH0K
ICAgICAgICAgaWYgKGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCgpKQotICAgICAgICAgICAgYmFk
R3JhbW1hclBocmFzZSA9IGZpbmRGaXJzdEJhZEdyYW1tYXJJblJhbmdlKGNsaWVudCgpLCBncmFt
bWFyU2VhcmNoUmFuZ2UuZ2V0KCksIGdyYW1tYXJEZXRhaWwsIGdyYW1tYXJQaHJhc2VPZmZzZXQs
IGZhbHNlKTsKKyAgICAgICAgICAgIGJhZEdyYW1tYXJQaHJhc2UgPSBtYXJrLmZpbmRGaXJzdEJh
ZEdyYW1tYXIoZ3JhbW1hckRldGFpbCwgZ3JhbW1hclBocmFzZU9mZnNldCwgZmFsc2UpOwogI2Vu
ZGlmCiAjZW5kaWYKICAgICB9CkBAIC0yMTYzLDYwICsxODQ0LDEzIEBAIGJvb2wgRWRpdG9yOjpp
c1NlbGVjdGlvbk1pc3NwZWxsZWQoKQogICAgIHJldHVybiB0cnVlOwogfQogCi0jaWZuZGVmIEJV
SUxESU5HX09OX1RJR0VSCi1zdGF0aWMgYm9vbCBpc1JhbmdlVW5ncmFtbWF0aWNhbChFZGl0b3JD
bGllbnQqIGNsaWVudCwgUmFuZ2UgKnJhbmdlLCBWZWN0b3I8U3RyaW5nPiYgZ3Vlc3Nlc1ZlY3Rv
cikKLXsKLSAgICBpZiAoIWNsaWVudCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgRXhj
ZXB0aW9uQ29kZSBlYzsKLSAgICBpZiAoIXJhbmdlIHx8IHJhbmdlLT5jb2xsYXBzZWQoZWMpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgLy8gUmV0dXJucyB0cnVlIG9ubHkgaWYg
dGhlIHBhc3NlZCByYW5nZSBleGFjdGx5IGNvcnJlc3BvbmRzIHRvIGEgYmFkIGdyYW1tYXIgZGV0
YWlsIHJhbmdlLiBUaGlzIGlzIGFuYWxvZ291cwotICAgIC8vIHRvIGlzU2VsZWN0aW9uTWlzc3Bl
bGxlZC4gSXQncyBub3QgZ29vZCBlbm91Z2ggZm9yIHRoZXJlIHRvIGJlIHNvbWUgYmFkIGdyYW1t
YXIgc29tZXdoZXJlIGluIHRoZSByYW5nZSwKLSAgICAvLyBvciBvdmVybGFwcGluZyB0aGUgcmFu
Z2U7IHRoZSByYW5nZXMgbXVzdCBleGFjdGx5IG1hdGNoLgotICAgIGd1ZXNzZXNWZWN0b3IuY2xl
YXIoKTsKLSAgICBpbnQgZ3JhbW1hclBocmFzZU9mZnNldDsKLSAgICAKLSAgICBHcmFtbWFyRGV0
YWlsIGdyYW1tYXJEZXRhaWw7Ci0gICAgU3RyaW5nIGJhZEdyYW1tYXJQaHJhc2UgPSBmaW5kRmly
c3RCYWRHcmFtbWFySW5SYW5nZShjbGllbnQsIHJhbmdlLCBncmFtbWFyRGV0YWlsLCBncmFtbWFy
UGhyYXNlT2Zmc2V0LCBmYWxzZSk7ICAgIAotICAgIAotICAgIC8vIE5vIGJhZCBncmFtbWFyIGlu
IHRoZXNlIHBhcnRzIGF0IGFsbC4KLSAgICBpZiAoYmFkR3JhbW1hclBocmFzZS5pc0VtcHR5KCkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICAvLyBCYWQgZ3JhbW1hciwgYnV0IHBo
cmFzZSAoZS5nLiBzZW50ZW5jZSkgc3RhcnRzIGJleW9uZCBzdGFydCBvZiByYW5nZS4KLSAgICBp
ZiAoZ3JhbW1hclBocmFzZU9mZnNldCA+IDApCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAK
LSAgICBBU1NFUlQoZ3JhbW1hckRldGFpbC5sb2NhdGlvbiA+PSAwICYmIGdyYW1tYXJEZXRhaWwu
bGVuZ3RoID4gMCk7Ci0gICAgCi0gICAgLy8gQmFkIGdyYW1tYXIsIGJ1dCBzdGFydCBvZiBkZXRh
aWwgKGUuZy4gdW5ncmFtbWF0aWNhbCB3b3JkKSBkb2Vzbid0IG1hdGNoIHN0YXJ0IG9mIHJhbmdl
Ci0gICAgaWYgKGdyYW1tYXJEZXRhaWwubG9jYXRpb24gKyBncmFtbWFyUGhyYXNlT2Zmc2V0KQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgLy8gQmFkIGdyYW1tYXIgYXQgc3RhcnQg
b2YgcmFuZ2UsIGJ1dCBlbmQgb2YgYmFkIGdyYW1tYXIgaXMgYmVmb3JlIG9yIGFmdGVyIGVuZCBv
ZiByYW5nZQotICAgIGlmIChncmFtbWFyRGV0YWlsLmxlbmd0aCAhPSBUZXh0SXRlcmF0b3I6OnJh
bmdlTGVuZ3RoKHJhbmdlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIC8vIFVw
ZGF0ZSB0aGUgc3BlbGxpbmcgcGFuZWwgdG8gYmUgZGlzcGxheWluZyB0aGlzIGVycm9yICh3aGV0
aGVyIG9yIG5vdCB0aGUgc3BlbGxpbmcgcGFuZWwgaXMgb24gc2NyZWVuKS4KLSAgICAvLyBUaGlz
IGlzIG5lY2Vzc2FyeSB0byBtYWtlIGEgc3Vic2VxdWVudCBjYWxsIHRvIFtOU1NwZWxsQ2hlY2tl
ciBpZ25vcmVXb3JkOmluU3BlbGxEb2N1bWVudFdpdGhUYWc6XSB3b3JrCi0gICAgLy8gY29ycmVj
dGx5OyB0aGF0IGNhbGwgYmVoYXZlcyBkaWZmZXJlbnRseSBiYXNlZCBvbiB3aGV0aGVyIHRoZSBz
cGVsbGluZyBwYW5lbCBpcyBkaXNwbGF5aW5nIGEgbWlzc3BlbGxpbmcKLSAgICAvLyBvciBhIGdy
YW1tYXIgZXJyb3IuCi0gICAgY2xpZW50LT51cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJp
bmcoYmFkR3JhbW1hclBocmFzZSwgZ3JhbW1hckRldGFpbCk7Ci0gICAgCi0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0jZW5kaWYKLQogYm9vbCBFZGl0b3I6OmlzU2VsZWN0aW9uVW5ncmFtbWF0aWNhbCgp
CiB7CiAjaWZkZWYgQlVJTERJTkdfT05fVElHRVIKICAgICByZXR1cm4gZmFsc2U7CiAjZWxzZQog
ICAgIFZlY3RvcjxTdHJpbmc+IGlnbm9yZWRHdWVzc2VzOwotICAgIHJldHVybiBpc1JhbmdlVW5n
cmFtbWF0aWNhbChjbGllbnQoKSwgZnJhbWUoKS0+c2VsZWN0aW9uKCktPnRvTm9ybWFsaXplZFJh
bmdlKCkuZ2V0KCksIGlnbm9yZWRHdWVzc2VzKTsKKyAgICByZXR1cm4gUmFuZ2VNYXJrZXJDb250
cm9sbGVyKGNsaWVudCgpLCBmcmFtZSgpLT5zZWxlY3Rpb24oKS0+dG9Ob3JtYWxpemVkUmFuZ2Uo
KSkuaXNVbmdyYW1tYXRpY2FsKGlnbm9yZWRHdWVzc2VzKTsKICNlbmRpZgogfQogCkBAIC0yMjI2
LDggKzE4NjAsOCBAQCBWZWN0b3I8U3RyaW5nPiBFZGl0b3I6Omd1ZXNzZXNGb3JVbmdyYW1tYXRp
Y2FsU2VsZWN0aW9uKCkKICAgICByZXR1cm4gVmVjdG9yPFN0cmluZz4oKTsKICNlbHNlCiAgICAg
VmVjdG9yPFN0cmluZz4gZ3Vlc3NlczsKLSAgICAvLyBJZ25vcmUgdGhlIHJlc3VsdCBvZiBpc1Jh
bmdlVW5ncmFtbWF0aWNhbDsgd2UganVzdCB3YW50IHRoZSBndWVzc2VzLCB3aGV0aGVyIG9yIG5v
dCB0aGVyZSBhcmUgYW55Ci0gICAgaXNSYW5nZVVuZ3JhbW1hdGljYWwoY2xpZW50KCksIGZyYW1l
KCktPnNlbGVjdGlvbigpLT50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBndWVzc2VzKTsKKyAg
ICAvLyBJZ25vcmUgdGhlIHJlc3VsdCBvZiBpc1VuZ3JhbW1hdGljYWw7IHdlIGp1c3Qgd2FudCB0
aGUgZ3Vlc3Nlcywgd2hldGhlciBvciBub3QgdGhlcmUgYXJlIGFueQorICAgIFJhbmdlTWFya2Vy
Q29udHJvbGxlcihjbGllbnQoKSwgZnJhbWUoKS0+c2VsZWN0aW9uKCktPnRvTm9ybWFsaXplZFJh
bmdlKCkpLmlzVW5ncmFtbWF0aWNhbChndWVzc2VzKTsKICAgICByZXR1cm4gZ3Vlc3NlczsKICNl
bmRpZgogfQpAQCAtMjI0Myw3MiArMTg3NywxMCBAQCBWZWN0b3I8U3RyaW5nPiBFZGl0b3I6Omd1
ZXNzZXNGb3JNaXNzcGVsbGVkU2VsZWN0aW9uKCkKICAgICByZXR1cm4gZ3Vlc3NlczsKIH0KIAot
I2lmIFBMQVRGT1JNKE1BQykgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZp
bmVkKEJVSUxESU5HX09OX0xFT1BBUkQpCi0KLXN0YXRpYyBWZWN0b3I8U3RyaW5nPiBndWVzc2Vz
Rm9yTWlzc3BlbGxlZE9yVW5ncmFtbWF0aWNhbFJhbmdlKEVkaXRvckNsaWVudCogY2xpZW50LCBS
YW5nZSAqcmFuZ2UsIGJvb2wgY2hlY2tHcmFtbWFyLCBib29sJiBtaXNzcGVsbGVkLCBib29sJiB1
bmdyYW1tYXRpY2FsKQotewotICAgIFZlY3RvcjxTdHJpbmc+IGd1ZXNzZXM7Ci0gICAgRXhjZXB0
aW9uQ29kZSBlYzsKLSAgICBtaXNzcGVsbGVkID0gZmFsc2U7Ci0gICAgdW5ncmFtbWF0aWNhbCA9
IGZhbHNlOwotICAgIAotICAgIGlmICghY2xpZW50IHx8ICFyYW5nZSB8fCByYW5nZS0+Y29sbGFw
c2VkKGVjKSkKLSAgICAgICAgcmV0dXJuIGd1ZXNzZXM7Ci0KLSAgICAvLyBFeHBhbmQgdGhlIHJh
bmdlIHRvIGVuY29tcGFzcyBlbnRpcmUgcGFyYWdyYXBocywgc2luY2UgdGV4dCBjaGVja2luZyBu
ZWVkcyB0aGF0IG11Y2ggY29udGV4dC4KLSAgICBpbnQgcmFuZ2VTdGFydE9mZnNldDsKLSAgICBT
dHJpbmcgcGFyYWdyYXBoU3RyaW5nOwotICAgIFJlZlB0cjxSYW5nZT4gcGFyYWdyYXBoUmFuZ2Ug
PSBwYXJhZ3JhcGhBbGlnbmVkUmFuZ2VGb3JSYW5nZShyYW5nZSwgcmFuZ2VTdGFydE9mZnNldCwg
cGFyYWdyYXBoU3RyaW5nKTsKLSAgICBpbnQgcmFuZ2VMZW5ndGggPSBUZXh0SXRlcmF0b3I6OnJh
bmdlTGVuZ3RoKHJhbmdlKTsKLSAgICBpZiAoIXJhbmdlTGVuZ3RoIHx8ICFwYXJhZ3JhcGhTdHJp
bmcubGVuZ3RoKCkpCi0gICAgICAgIHJldHVybiBndWVzc2VzOwotCi0gICAgVmVjdG9yPFRleHRD
aGVja2luZ1Jlc3VsdD4gcmVzdWx0czsKLSAgICB1aW50NjRfdCBjaGVja2luZ1R5cGVzID0gY2hl
Y2tHcmFtbWFyID8gKFRleHRDaGVja2luZ1R5cGVTcGVsbGluZyB8IFRleHRDaGVja2luZ1R5cGVH
cmFtbWFyKSA6IFRleHRDaGVja2luZ1R5cGVTcGVsbGluZzsKLSAgICBjbGllbnQtPmNoZWNrVGV4
dE9mUGFyYWdyYXBoKHBhcmFncmFwaFN0cmluZy5jaGFyYWN0ZXJzKCksIHBhcmFncmFwaFN0cmlu
Zy5sZW5ndGgoKSwgY2hlY2tpbmdUeXBlcywgcmVzdWx0cyk7Ci0gICAgCi0gICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHJlc3VsdHMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgY29uc3QgVGV4
dENoZWNraW5nUmVzdWx0KiByZXN1bHQgPSAmcmVzdWx0c1tpXTsKLSAgICAgICAgaWYgKHJlc3Vs
dC0+dHlwZSA9PSBUZXh0Q2hlY2tpbmdUeXBlU3BlbGxpbmcgJiYgcmVzdWx0LT5sb2NhdGlvbiA9
PSByYW5nZVN0YXJ0T2Zmc2V0ICYmIHJlc3VsdC0+bGVuZ3RoID09IHJhbmdlTGVuZ3RoKSB7Ci0g
ICAgICAgICAgICBTdHJpbmcgbWlzc3BlbGxlZFdvcmQgPSBwYXJhZ3JhcGhTdHJpbmcuc3Vic3Ry
aW5nKHJhbmdlU3RhcnRPZmZzZXQsIHJhbmdlTGVuZ3RoKTsKLSAgICAgICAgICAgIEFTU0VSVCht
aXNzcGVsbGVkV29yZC5sZW5ndGgoKSk7Ci0gICAgICAgICAgICBjbGllbnQtPmdldEd1ZXNzZXNG
b3JXb3JkKG1pc3NwZWxsZWRXb3JkLCBndWVzc2VzKTsKLSAgICAgICAgICAgIGNsaWVudC0+dXBk
YXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVkV29yZChtaXNzcGVsbGVkV29yZCk7Ci0gICAgICAg
ICAgICBtaXNzcGVsbGVkID0gdHJ1ZTsKLSAgICAgICAgICAgIHJldHVybiBndWVzc2VzOwotICAg
ICAgICB9Ci0gICAgfQotICAgIAotICAgIGlmICghY2hlY2tHcmFtbWFyKQotICAgICAgICByZXR1
cm4gZ3Vlc3NlczsKLSAgICAgICAgCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlc3Vs
dHMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgY29uc3QgVGV4dENoZWNraW5nUmVzdWx0KiByZXN1
bHQgPSAmcmVzdWx0c1tpXTsKLSAgICAgICAgaWYgKHJlc3VsdC0+dHlwZSA9PSBUZXh0Q2hlY2tp
bmdUeXBlR3JhbW1hciAmJiByZXN1bHQtPmxvY2F0aW9uIDw9IHJhbmdlU3RhcnRPZmZzZXQgJiYg
cmVzdWx0LT5sb2NhdGlvbiArIHJlc3VsdC0+bGVuZ3RoID49IHJhbmdlU3RhcnRPZmZzZXQgKyBy
YW5nZUxlbmd0aCkgewotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IHJlc3Vs
dC0+ZGV0YWlscy5zaXplKCk7IGorKykgewotICAgICAgICAgICAgICAgIGNvbnN0IEdyYW1tYXJE
ZXRhaWwqIGRldGFpbCA9ICZyZXN1bHQtPmRldGFpbHNbal07Ci0gICAgICAgICAgICAgICAgQVNT
RVJUKGRldGFpbC0+bGVuZ3RoID4gMCAmJiBkZXRhaWwtPmxvY2F0aW9uID49IDApOwotICAgICAg
ICAgICAgICAgIGlmIChyZXN1bHQtPmxvY2F0aW9uICsgZGV0YWlsLT5sb2NhdGlvbiA9PSByYW5n
ZVN0YXJ0T2Zmc2V0ICYmIGRldGFpbC0+bGVuZ3RoID09IHJhbmdlTGVuZ3RoKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIFN0cmluZyBiYWRHcmFtbWFyUGhyYXNlID0gcGFyYWdyYXBoU3RyaW5nLnN1
YnN0cmluZyhyZXN1bHQtPmxvY2F0aW9uLCByZXN1bHQtPmxlbmd0aCk7Ci0gICAgICAgICAgICAg
ICAgICAgIEFTU0VSVChiYWRHcmFtbWFyUGhyYXNlLmxlbmd0aCgpKTsKLSAgICAgICAgICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBrID0gMDsgayA8IGRldGFpbC0+Z3Vlc3Nlcy5zaXplKCk7IGsr
KykKLSAgICAgICAgICAgICAgICAgICAgICAgIGd1ZXNzZXMuYXBwZW5kKGRldGFpbC0+Z3Vlc3Nl
c1trXSk7Ci0gICAgICAgICAgICAgICAgICAgIGNsaWVudC0+dXBkYXRlU3BlbGxpbmdVSVdpdGhH
cmFtbWFyU3RyaW5nKGJhZEdyYW1tYXJQaHJhc2UsICpkZXRhaWwpOwotICAgICAgICAgICAgICAg
ICAgICB1bmdyYW1tYXRpY2FsID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGd1
ZXNzZXM7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
fQotICAgIHJldHVybiBndWVzc2VzOwotfQotCi0jZW5kaWYKLQogVmVjdG9yPFN0cmluZz4gRWRp
dG9yOjpndWVzc2VzRm9yTWlzc3BlbGxlZE9yVW5ncmFtbWF0aWNhbFNlbGVjdGlvbihib29sJiBt
aXNzcGVsbGVkLCBib29sJiB1bmdyYW1tYXRpY2FsKQogewogI2lmIFBMQVRGT1JNKE1BQykgJiYg
IWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BB
UkQpCi0gICAgcmV0dXJuIGd1ZXNzZXNGb3JNaXNzcGVsbGVkT3JVbmdyYW1tYXRpY2FsUmFuZ2Uo
Y2xpZW50KCksIGZyYW1lKCktPnNlbGVjdGlvbigpLT50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgp
LCBpc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQoKSwgbWlzc3BlbGxlZCwgdW5ncmFtbWF0aWNhbCk7
CisgICAgcmV0dXJuIFJhbmdlTWFya2VyQ29udHJvbGxlcihjbGllbnQoKSwgZnJhbWUoKS0+c2Vs
ZWN0aW9uKCktPnRvTm9ybWFsaXplZFJhbmdlKCkpLmd1ZXNzZXNGb3JNaXNzcGVsbGVkT3JVbmdy
YW1tYXRpY2FsUmFuZ2UoaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKCksIG1pc3NwZWxsZWQsIHVu
Z3JhbW1hdGljYWwpOwogI2Vsc2UKICAgICBtaXNzcGVsbGVkID0gaXNTZWxlY3Rpb25NaXNzcGVs
bGVkKCk7CiAgICAgaWYgKG1pc3NwZWxsZWQpIHsKQEAgLTI0ODUsMzQgKzIwNTcsMTUgQEAgdm9p
ZCBFZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZ1RvUG9zaXRpb24oY29uc3QgVmlz
aWJsZVBvc2l0aW9uICZwKQogICAgIG1hcmtCYWRHcmFtbWFyKFZpc2libGVTZWxlY3Rpb24oc3Rh
cnRPZlNlbnRlbmNlKHApLCBlbmRPZlNlbnRlbmNlKHApKSk7CiAjZW5kaWYKIH0KLQotc3RhdGlj
IHZvaWQgbWFya0FsbE1pc3NwZWxsaW5nc0luUmFuZ2UoRWRpdG9yQ2xpZW50KiBjbGllbnQsIFJh
bmdlKiBzZWFyY2hSYW5nZSwgUmVmUHRyPFJhbmdlPiYgZmlyc3RNaXNzcGVsbGluZ1JhbmdlKQot
ewotICAgIC8vIFVzZSB0aGUgIm1hcmtBbGwiIGZlYXR1cmUgb2YgZmluZEZpcnN0TWlzc3BlbGxp
bmdJblJhbmdlLiBJZ25vcmUgdGhlIHJldHVybiB2YWx1ZSBhbmQgdGhlICJvdXQgcGFyYW1ldGVy
IjsKLSAgICAvLyBhbGwgd2UgbmVlZCB0byBkbyBpcyBtYXJrIGV2ZXJ5IGluc3RhbmNlLgotICAg
IGludCBpZ25vcmVkT2Zmc2V0OwotICAgIGZpbmRGaXJzdE1pc3NwZWxsaW5nSW5SYW5nZShjbGll
bnQsIHNlYXJjaFJhbmdlLCBpZ25vcmVkT2Zmc2V0LCB0cnVlLCBmaXJzdE1pc3NwZWxsaW5nUmFu
Z2UpOwotfQotCi0jaWZuZGVmIEJVSUxESU5HX09OX1RJR0VSCi1zdGF0aWMgdm9pZCBtYXJrQWxs
QmFkR3JhbW1hckluUmFuZ2UoRWRpdG9yQ2xpZW50KiBjbGllbnQsIFJhbmdlKiBzZWFyY2hSYW5n
ZSkKLXsKLSAgICAvLyBVc2UgdGhlICJtYXJrQWxsIiBmZWF0dXJlIG9mIGZpbmRGaXJzdEJhZEdy
YW1tYXJJblJhbmdlLiBJZ25vcmUgdGhlIHJldHVybiB2YWx1ZSBhbmQgIm91dCBwYXJhbWV0ZXJz
IjsgYWxsIHdlIG5lZWQgdG8KLSAgICAvLyBkbyBpcyBtYXJrIGV2ZXJ5IGluc3RhbmNlLgotICAg
IEdyYW1tYXJEZXRhaWwgaWdub3JlZEdyYW1tYXJEZXRhaWw7Ci0gICAgaW50IGlnbm9yZWRPZmZz
ZXQ7Ci0gICAgZmluZEZpcnN0QmFkR3JhbW1hckluUmFuZ2UoY2xpZW50LCBzZWFyY2hSYW5nZSwg
aWdub3JlZEdyYW1tYXJEZXRhaWwsIGlnbm9yZWRPZmZzZXQsIHRydWUpOwotfQotI2VuZGlmCiAg
ICAgCi1zdGF0aWMgdm9pZCBtYXJrTWlzc3BlbGxpbmdzT3JCYWRHcmFtbWFyKEVkaXRvciogZWRp
dG9yLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24sIGJvb2wgY2hlY2tTcGVsbGlu
ZywgUmVmUHRyPFJhbmdlPiYgZmlyc3RNaXNzcGVsbGluZ1JhbmdlKQordm9pZCBFZGl0b3I6Om1h
cmtNaXNzcGVsbGluZ3NPckJhZEdyYW1tYXIoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0
aW9uLCBib29sIGNoZWNrU3BlbGxpbmcsIFJlZlB0cjxSYW5nZT4mIGZpcnN0TWlzc3BlbGxpbmdS
YW5nZSkKIHsKICAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIGEgc2VsZWN0aW9u
IGFscmVhZHkgZXhwYW5kZWQgdG8gd29yZCBib3VuZGFyaWVzLgogICAgIC8vIE1pZ2h0IGJlIG5p
Y2UgdG8gYXNzZXJ0IHRoYXQgaGVyZS4KICAgICAKICAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIHVz
ZWQgb25seSBmb3IgYXMteW91LXR5cGUgY2hlY2tpbmcsIHNvIGlmIHRoYXQncyBvZmYgd2UgZG8g
bm90aGluZy4gTm90ZSB0aGF0CiAgICAgLy8gZ3JhbW1hciBjaGVja2luZyBjYW4gb25seSBiZSBv
biBpZiBzcGVsbCBjaGVja2luZyBpcyBhbHNvIG9uLgotICAgIGlmICghZWRpdG9yLT5pc0NvbnRp
bnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCgpKQorICAgIGlmICghaXNDb250aW51b3VzU3BlbGxD
aGVja2luZ0VuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIFJlZlB0cjxSYW5n
ZT4gc2VhcmNoUmFuZ2Uoc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkpOwpAQCAtMjUyNCwy
MSArMjA3NywyMiBAQCBzdGF0aWMgdm9pZCBtYXJrTWlzc3BlbGxpbmdzT3JCYWRHcmFtbWFyKEVk
aXRvciogZWRpdG9yLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJgogICAgIGlmICghZWRpdGFibGVO
b2RlIHx8ICFlZGl0YWJsZU5vZGUtPmlzQ29udGVudEVkaXRhYmxlKCkpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIGlmICghZWRpdG9yLT5zcGVsbENoZWNraW5nRW5hYmxlZEluRm9jdXNlZE5vZGUo
KSkKKyAgICBpZiAoIXNwZWxsQ2hlY2tpbmdFbmFibGVkSW5Gb2N1c2VkTm9kZSgpKQogICAgICAg
ICByZXR1cm47CiAKICAgICAvLyBHZXQgdGhlIHNwZWxsIGNoZWNrZXIgaWYgaXQgaXMgYXZhaWxh
YmxlCi0gICAgaWYgKCFlZGl0b3ItPmNsaWVudCgpKQorICAgIGlmICghY2xpZW50KCkpCiAgICAg
ICAgIHJldHVybjsKICAgICAKKyAgICBSYW5nZU1hcmtlckNvbnRyb2xsZXIgbWFyayhjbGllbnQo
KSwgc2VhcmNoUmFuZ2UpOwogICAgIGlmIChjaGVja1NwZWxsaW5nKQotICAgICAgICBtYXJrQWxs
TWlzc3BlbGxpbmdzSW5SYW5nZShlZGl0b3ItPmNsaWVudCgpLCBzZWFyY2hSYW5nZS5nZXQoKSwg
Zmlyc3RNaXNzcGVsbGluZ1JhbmdlKTsKKyAgICAgICAgbWFyay5tYXJrQWxsTWlzc3BlbGxpbmdz
KGZpcnN0TWlzc3BlbGxpbmdSYW5nZSk7CiAgICAgZWxzZSB7CiAjaWZkZWYgQlVJTERJTkdfT05f
VElHRVIKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAjZWxzZQotICAgICAgICBpZiAo
ZWRpdG9yLT5pc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQoKSkKLSAgICAgICAgICAgIG1hcmtBbGxC
YWRHcmFtbWFySW5SYW5nZShlZGl0b3ItPmNsaWVudCgpLCBzZWFyY2hSYW5nZS5nZXQoKSk7Cisg
ICAgICAgIGlmIChpc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQoKSkKKyAgICAgICAgICAgIG1hcmsu
bWFya0FsbEJhZEdyYW1tYXIoKTsKICNlbmRpZgogICAgIH0gICAgCiB9CkBAIC0yNTYzLDE0ICsy
MTE3LDE0IEBAIGJvb2wgRWRpdG9yOjpzcGVsbENoZWNraW5nRW5hYmxlZEluRm9jdXNlZE5vZGUo
KSBjb25zdAogCiB2b2lkIEVkaXRvcjo6bWFya01pc3NwZWxsaW5ncyhjb25zdCBWaXNpYmxlU2Vs
ZWN0aW9uJiBzZWxlY3Rpb24sIFJlZlB0cjxSYW5nZT4mIGZpcnN0TWlzc3BlbGxpbmdSYW5nZSkK
IHsKLSAgICBtYXJrTWlzc3BlbGxpbmdzT3JCYWRHcmFtbWFyKHRoaXMsIHNlbGVjdGlvbiwgdHJ1
ZSwgZmlyc3RNaXNzcGVsbGluZ1JhbmdlKTsKKyAgICBtYXJrTWlzc3BlbGxpbmdzT3JCYWRHcmFt
bWFyKHNlbGVjdGlvbiwgdHJ1ZSwgZmlyc3RNaXNzcGVsbGluZ1JhbmdlKTsKIH0KICAgICAKIHZv
aWQgRWRpdG9yOjptYXJrQmFkR3JhbW1hcihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rp
b24pCiB7CiAjaWZuZGVmIEJVSUxESU5HX09OX1RJR0VSCiAgICAgUmVmUHRyPFJhbmdlPiBmaXJz
dE1pc3NwZWxsaW5nUmFuZ2U7Ci0gICAgbWFya01pc3NwZWxsaW5nc09yQmFkR3JhbW1hcih0aGlz
LCBzZWxlY3Rpb24sIGZhbHNlLCBmaXJzdE1pc3NwZWxsaW5nUmFuZ2UpOworICAgIG1hcmtNaXNz
cGVsbGluZ3NPckJhZEdyYW1tYXIoc2VsZWN0aW9uLCBmYWxzZSwgZmlyc3RNaXNzcGVsbGluZ1Jh
bmdlKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKHNlbGVjdGlvbik7CiAjZW5kaWYKQEAgLTI2
MjAsMTUgKzIxNzQsMTYgQEAgdm9pZCBFZGl0b3I6Om1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRH
cmFtbWFySW5SYW5nZXMoVGV4dENoZWNraW5nT3B0aW9ucyB0ZXh0Q2gKICAgICBib29sIGFkanVz
dFNlbGVjdGlvbkZvclBhcmFncmFwaEJvdW5kYXJpZXMgPSBmYWxzZTsKICAgICBTdHJpbmcgcGFy
YWdyYXBoU3RyaW5nOwogICAgIFJlZlB0cjxSYW5nZT4gcGFyYWdyYXBoUmFuZ2U7CisgICAgUmFu
Z2VNYXJrZXJDb250cm9sbGVyIG1hcmsoY2xpZW50KCksIGdyYW1tYXJSYW5nZSk7CiAKICAgICBp
ZiAoc2hvdWxkTWFya0dyYW1tYXIpIHsKICAgICAgICAgLy8gVGhlIHNwZWxsaW5nIHJhbmdlIHNo
b3VsZCBiZSBjb250YWluZWQgaW4gdGhlIHBhcmFncmFwaC1hbGlnbmVkIGV4dGVuc2lvbiBvZiB0
aGUgZ3JhbW1hciByYW5nZS4KLSAgICAgICAgcGFyYWdyYXBoUmFuZ2UgPSBwYXJhZ3JhcGhBbGln
bmVkUmFuZ2VGb3JSYW5nZShncmFtbWFyUmFuZ2UsIGdyYW1tYXJSYW5nZVN0YXJ0T2Zmc2V0LCBw
YXJhZ3JhcGhTdHJpbmcpOworICAgICAgICBwYXJhZ3JhcGhSYW5nZSA9IG1hcmsucGFyYWdyYXBo
QWxpZ25lZFJhbmdlKGdyYW1tYXJSYW5nZVN0YXJ0T2Zmc2V0LCBwYXJhZ3JhcGhTdHJpbmcpOwog
ICAgICAgICBSZWZQdHI8UmFuZ2U+IG9mZnNldEFzUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKHBhcmFn
cmFwaFJhbmdlLT5zdGFydENvbnRhaW5lcihlYyktPmRvY3VtZW50KCksIHBhcmFncmFwaFJhbmdl
LT5zdGFydFBvc2l0aW9uKCksIHNwZWxsaW5nUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSk7CiAgICAg
ICAgIHNwZWxsaW5nUmFuZ2VTdGFydE9mZnNldCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgo
b2Zmc2V0QXNSYW5nZS5nZXQoKSk7CiAgICAgICAgIGdyYW1tYXJSYW5nZUVuZE9mZnNldCA9IGdy
YW1tYXJSYW5nZVN0YXJ0T2Zmc2V0ICsgVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChncmFtbWFy
UmFuZ2UpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIHBhcmFncmFwaFJhbmdlID0gcGFyYWdyYXBo
QWxpZ25lZFJhbmdlRm9yUmFuZ2Uoc3BlbGxpbmdSYW5nZSwgc3BlbGxpbmdSYW5nZVN0YXJ0T2Zm
c2V0LCBwYXJhZ3JhcGhTdHJpbmcpOworICAgICAgICBwYXJhZ3JhcGhSYW5nZSA9IG1hcmsucGFy
YWdyYXBoQWxpZ25lZFJhbmdlKHNwZWxsaW5nUmFuZ2VTdGFydE9mZnNldCwgcGFyYWdyYXBoU3Ry
aW5nKTsKICAgICB9CiAgICAgc3BlbGxpbmdSYW5nZUVuZE9mZnNldCA9IHNwZWxsaW5nUmFuZ2VT
dGFydE9mZnNldCArIFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgoc3BlbGxpbmdSYW5nZSk7CiAg
ICAgcGFyYWdyYXBoTGVuZ3RoID0gcGFyYWdyYXBoU3RyaW5nLmxlbmd0aCgpOwpAQCAtMjgxOCwx
MCArMjM3MywxMCBAQCB2b2lkIEVkaXRvcjo6Y2hhbmdlQmFja1RvUmVwbGFjZWRTdHJpbmcoY29u
c3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZykKICAgICBSZWZQdHI8UmFuZ2U+IHNlbGVjdGlvbiA9
IHNlbGVjdGVkUmFuZ2UoKTsKICAgICBpZiAoIXNob3VsZEluc2VydFRleHQocmVwbGFjZWRTdHJp
bmcsIHNlbGVjdGlvbi5nZXQoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uUGFzdGVkKSkKICAgICAgICAg
cmV0dXJuOwotICAgICAgICAKKyAgICAKICAgICBTdHJpbmcgcGFyYWdyYXBoU3RyaW5nOwogICAg
IGludCBzZWxlY3Rpb25PZmZzZXQ7Ci0gICAgUmVmUHRyPFJhbmdlPiBwYXJhZ3JhcGhSYW5nZSA9
IHBhcmFncmFwaEFsaWduZWRSYW5nZUZvclJhbmdlKHNlbGVjdGlvbi5nZXQoKSwgc2VsZWN0aW9u
T2Zmc2V0LCBwYXJhZ3JhcGhTdHJpbmcpOworICAgIFJlZlB0cjxSYW5nZT4gcGFyYWdyYXBoUmFu
Z2UgPSBSYW5nZU1hcmtlckNvbnRyb2xsZXIoY2xpZW50KCksIHNlbGVjdGlvbikucGFyYWdyYXBo
QWxpZ25lZFJhbmdlKHNlbGVjdGlvbk9mZnNldCwgcGFyYWdyYXBoU3RyaW5nKTsKICAgICByZXBs
YWNlU2VsZWN0aW9uV2l0aFRleHQocmVwbGFjZWRTdHJpbmcsIGZhbHNlLCBmYWxzZSk7CiAgICAg
UmVmUHRyPFJhbmdlPiBjaGFuZ2VkUmFuZ2UgPSBUZXh0SXRlcmF0b3I6OnN1YnJhbmdlKHBhcmFn
cmFwaFJhbmdlLmdldCgpLCBzZWxlY3Rpb25PZmZzZXQsIHJlcGxhY2VkU3RyaW5nLmxlbmd0aCgp
KTsKICAgICBjaGFuZ2VkUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCktPmRvY3VtZW50KCktPm1hcmtl
cnMoKS0+YWRkTWFya2VyKGNoYW5nZWRSYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlJlcGxh
Y2VtZW50LCBTdHJpbmcoKSk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgg
Yi9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgKaW5kZXggZGYyZTk0NzMxYWNkMjU5MjczYjZkNGYx
ZTgzM2ZhZmM2MTdkZGIwMS4uYTUxZjYyMjNiZDViZGIxNDUwNjYyZTkwMjQxYzBiZTkyODU4MTkz
NCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCisrKyBiL1dlYkNvcmUvZWRp
dGluZy9FZGl0b3IuaApAQCAtMzkyLDYgKzM5Miw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCByZXBs
YWNlU2VsZWN0aW9uV2l0aFRleHQoY29uc3QgU3RyaW5nJiwgYm9vbCBzZWxlY3RSZXBsYWNlbWVu
dCwgYm9vbCBzbWFydFJlcGxhY2UpOwogICAgIHZvaWQgd3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9h
cmQoUGFzdGVib2FyZCopOwogICAgIHZvaWQgcmV2ZWFsU2VsZWN0aW9uQWZ0ZXJFZGl0aW5nT3Bl
cmF0aW9uKCk7CisgICAgdm9pZCBtYXJrTWlzc3BlbGxpbmdzT3JCYWRHcmFtbWFyKGNvbnN0IFZp
c2libGVTZWxlY3Rpb24mLCBib29sIGNoZWNrU3BlbGxpbmcsIFJlZlB0cjxSYW5nZT4mIGZpcnN0
TWlzc3BlbGxpbmdSYW5nZSk7CiAKICAgICB2b2lkIHNlbGVjdENvbXBvc2l0aW9uKCk7CiAgICAg
dm9pZCBjb25maXJtQ29tcG9zaXRpb24oY29uc3QgU3RyaW5nJiwgYm9vbCBwcmVzZXJ2ZVNlbGVj
dGlvbik7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2VkaXRpbmcvUmFuZ2VNYXJrZXJDb250cm9sbGVy
LmNwcCBiL1dlYkNvcmUvZWRpdGluZy9SYW5nZU1hcmtlckNvbnRyb2xsZXIuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmNlYjJkMWEyNjI3ZTUxYWMyNzE0NDJhNzQ4NzQ4MDhmNjY1ZGRkMmIKLS0tIC9kZXYvbnVs
bAorKysgYi9XZWJDb3JlL2VkaXRpbmcvUmFuZ2VNYXJrZXJDb250cm9sbGVyLmNwcApAQCAtMCww
ICsxLDUyNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRp
b24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJSYW5nZU1hcmtlckNvbnRyb2xsZXIuaCIKKworI2luY2x1ZGUgIlJhbmdl
LmgiCisjaW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgiCisjaW5jbHVkZSAiVmlzaWJsZVBvc2l0aW9u
LmgiCisjaW5jbHVkZSAidmlzaWJsZV91bml0cy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K1JhbmdlTWFya2VyQ29udHJvbGxlcjo6UmFuZ2VNYXJrZXJDb250cm9sbGVyKEVkaXRvckNsaWVu
dCogY2xpZW50LCBQYXNzUmVmUHRyPFJhbmdlPiByYW5nZSkKKyAgICA6IG1fY2xpZW50KGNsaWVu
dCkKKyAgICAsIG1fcmFuZ2UocmFuZ2UpCit7CisgICAgQVNTRVJUX0FSRyhtX2NsaWVudCwgbV9j
bGllbnQpOworICAgIEFTU0VSVF9BUkcobV9yYW5nZSwgbV9yYW5nZSk7Cit9CisKK1JhbmdlTWFy
a2VyQ29udHJvbGxlcjo6flJhbmdlTWFya2VyQ29udHJvbGxlcigpCit7Cit9CisKK1Bhc3NSZWZQ
dHI8UmFuZ2U+IFJhbmdlTWFya2VyQ29udHJvbGxlcjo6cGFyYWdyYXBoQWxpZ25lZFJhbmdlKGlu
dCYgb2Zmc2V0SW50b1BhcmFncmFwaEFsaWduZWRSYW5nZSwgU3RyaW5nJiBwYXJhZ3JhcGhTdHJp
bmcpIGNvbnN0Cit7CisjaWZuZGVmIEJVSUxESU5HX09OX1RJR0VSCisgICAgRXhjZXB0aW9uQ29k
ZSBlYyA9IDA7CisgICAgCisgICAgLy8gRXhwYW5kIHJhbmdlIHRvIHBhcmFncmFwaCBib3VuZGFy
aWVzCisgICAgUmVmUHRyPFJhbmdlPiBwYXJhZ3JhcGhSYW5nZSA9IG1fcmFuZ2UtPmNsb25lUmFu
Z2UoZWMpOworICAgIHNldFN0YXJ0KHBhcmFncmFwaFJhbmdlLmdldCgpLCBzdGFydE9mUGFyYWdy
YXBoKG1fcmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSkpOworICAgIHNldEVuZChwYXJhZ3JhcGhSYW5n
ZS5nZXQoKSwgZW5kT2ZQYXJhZ3JhcGgobV9yYW5nZS0+ZW5kUG9zaXRpb24oKSkpOworICAgIAor
ICAgIC8vIENvbXB1dGUgb2Zmc2V0IGZyb20gc3RhcnQgb2YgZXhwYW5kZWQgcmFuZ2UgdG8gc3Rh
cnQgb2Ygb3JpZ2luYWwgcmFuZ2UKKyAgICBSZWZQdHI8UmFuZ2U+IG9mZnNldEFzUmFuZ2UgPSBS
YW5nZTo6Y3JlYXRlKHBhcmFncmFwaFJhbmdlLT5zdGFydENvbnRhaW5lcihlYyktPmRvY3VtZW50
KCksIHBhcmFncmFwaFJhbmdlLT5zdGFydFBvc2l0aW9uKCksIG1fcmFuZ2UtPnN0YXJ0UG9zaXRp
b24oKSk7CisgICAgb2Zmc2V0SW50b1BhcmFncmFwaEFsaWduZWRSYW5nZSA9IFRleHRJdGVyYXRv
cjo6cmFuZ2VMZW5ndGgob2Zmc2V0QXNSYW5nZS5nZXQoKSk7CisgICAgCisgICAgLy8gRmlsbCBp
biBvdXQgcGFyYW1ldGVyIHdpdGggc3RyaW5nIHJlcHJlc2VudGluZyBlbnRpcmUgcGFyYWdyYXBo
IHJhbmdlLgorICAgIC8vIFNvbWVkYXkgd2UgbWlnaHQgaGF2ZSBhIGNhbGxlciB0aGF0IGRvZXNu
J3QgdXNlIHRoaXMsIGJ1dCBmb3Igbm93IGFsbCBjYWxsZXJzIGRvLgorICAgIHBhcmFncmFwaFN0
cmluZyA9IHBsYWluVGV4dChwYXJhZ3JhcGhSYW5nZS5nZXQoKSk7CisKKyAgICByZXR1cm4gcGFy
YWdyYXBoUmFuZ2U7CisjZWxzZQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIFVOVVNF
RF9QQVJBTShvZmZzZXRJbnRvUGFyYWdyYXBoQWxpZ25lZFJhbmdlKTsKKyAgICBVTlVTRURfUEFS
QU0ocGFyYWdyYXBoU3RyaW5nKTsKKyAgICByZXR1cm4gUGFzc1JlZlB0cjxSYW5nZT4oMCk7Cisj
ZW5kaWYKK30KKworU3RyaW5nIFJhbmdlTWFya2VyQ29udHJvbGxlcjo6ZmluZEZpcnN0TWlzc3Bl
bGxpbmcoaW50JiBmaXJzdE1pc3NwZWxsaW5nT2Zmc2V0LCBib29sIG1hcmtBbGwsIFJlZlB0cjxS
YW5nZT4mIGZpcnN0TWlzc3BlbGxpbmdSYW5nZSkKK3sKKyAgICBXb3JkQXdhcmVJdGVyYXRvciBp
dChtX3JhbmdlLmdldCgpKTsKKyAgICBmaXJzdE1pc3NwZWxsaW5nT2Zmc2V0ID0gMDsKKyAgICAK
KyAgICBTdHJpbmcgZmlyc3RNaXNzcGVsbGluZzsKKyAgICBpbnQgY3VycmVudENodW5rT2Zmc2V0
ID0gMDsKKworICAgIHdoaWxlICghaXQuYXRFbmQoKSkgeworICAgICAgICBjb25zdCBVQ2hhciog
Y2hhcnMgPSBpdC5jaGFyYWN0ZXJzKCk7CisgICAgICAgIGludCBsZW4gPSBpdC5sZW5ndGgoKTsK
KyAgICAgICAgCisgICAgICAgIC8vIFNraXAgc29tZSB3b3JrIGZvciBvbmUtc3BhY2UtY2hhciBo
dW5rcworICAgICAgICBpZiAoIShsZW4gPT0gMSAmJiBjaGFyc1swXSA9PSAnICcpKSB7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIGludCBtaXNzcGVsbGluZ0xvY2F0aW9uID0gLTE7CisgICAg
ICAgICAgICBpbnQgbWlzc3BlbGxpbmdMZW5ndGggPSAwOworICAgICAgICAgICAgbV9jbGllbnQt
PmNoZWNrU3BlbGxpbmdPZlN0cmluZyhjaGFycywgbGVuLCAmbWlzc3BlbGxpbmdMb2NhdGlvbiwg
Jm1pc3NwZWxsaW5nTGVuZ3RoKTsKKworICAgICAgICAgICAgLy8gNTQ5MDYyNyBzaG93cyB0aGF0
IHRoZXJlIHdhcyBzb21lIGNvZGUgcGF0aCBoZXJlIHdoZXJlIHRoZSBTdHJpbmcgY29uc3RydWN0
b3IgYmVsb3cgY3Jhc2hlcy4KKyAgICAgICAgICAgIC8vIFdlIGRvbid0IGtub3cgZXhhY3RseSB3
aGF0IGNvbWJpbmF0aW9uIG9mIGJhZCBpbnB1dCBjYXVzZWQgdGhpcywgc28gd2UncmUgbWFraW5n
IHRoaXMgbXVjaAorICAgICAgICAgICAgLy8gbW9yZSByb2J1c3QgYWdhaW5zdCBiYWQgaW5wdXQg
b24gcmVsZWFzZSBidWlsZHMuCisgICAgICAgICAgICBBU1NFUlQobWlzc3BlbGxpbmdMZW5ndGgg
Pj0gMCk7CisgICAgICAgICAgICBBU1NFUlQobWlzc3BlbGxpbmdMb2NhdGlvbiA+PSAtMSk7Cisg
ICAgICAgICAgICBBU1NFUlQoIW1pc3NwZWxsaW5nTGVuZ3RoIHx8IG1pc3NwZWxsaW5nTG9jYXRp
b24gPj0gMCk7CisgICAgICAgICAgICBBU1NFUlQobWlzc3BlbGxpbmdMb2NhdGlvbiA8IGxlbik7
CisgICAgICAgICAgICBBU1NFUlQobWlzc3BlbGxpbmdMZW5ndGggPD0gbGVuKTsKKyAgICAgICAg
ICAgIEFTU0VSVChtaXNzcGVsbGluZ0xvY2F0aW9uICsgbWlzc3BlbGxpbmdMZW5ndGggPD0gbGVu
KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKG1pc3NwZWxsaW5nTG9jYXRpb24gPj0g
MCAmJiBtaXNzcGVsbGluZ0xlbmd0aCA+IDAgJiYgbWlzc3BlbGxpbmdMb2NhdGlvbiA8IGxlbiAm
JiBtaXNzcGVsbGluZ0xlbmd0aCA8PSBsZW4gJiYgbWlzc3BlbGxpbmdMb2NhdGlvbiArIG1pc3Nw
ZWxsaW5nTGVuZ3RoIDw9IGxlbikgeworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IC8vIENvbXB1dGUgcmFuZ2Ugb2YgbWlzc3BlbGxlZCB3b3JkCisgICAgICAgICAgICAgICAgUmVm
UHRyPFJhbmdlPiBtaXNzcGVsbGluZ1JhbmdlID0gVGV4dEl0ZXJhdG9yOjpzdWJyYW5nZShtX3Jh
bmdlLmdldCgpLCBjdXJyZW50Q2h1bmtPZmZzZXQgKyBtaXNzcGVsbGluZ0xvY2F0aW9uLCBtaXNz
cGVsbGluZ0xlbmd0aCk7CisKKyAgICAgICAgICAgICAgICAvLyBSZW1lbWJlciBmaXJzdC1lbmNv
dW50ZXJlZCBtaXNzcGVsbGluZyBhbmQgaXRzIG9mZnNldC4KKyAgICAgICAgICAgICAgICBpZiAo
IWZpcnN0TWlzc3BlbGxpbmcpIHsKKyAgICAgICAgICAgICAgICAgICAgZmlyc3RNaXNzcGVsbGlu
Z09mZnNldCA9IGN1cnJlbnRDaHVua09mZnNldCArIG1pc3NwZWxsaW5nTG9jYXRpb247CisgICAg
ICAgICAgICAgICAgICAgIGZpcnN0TWlzc3BlbGxpbmcgPSBTdHJpbmcoY2hhcnMgKyBtaXNzcGVs
bGluZ0xvY2F0aW9uLCBtaXNzcGVsbGluZ0xlbmd0aCk7CisgICAgICAgICAgICAgICAgICAgIGZp
cnN0TWlzc3BlbGxpbmdSYW5nZSA9IG1pc3NwZWxsaW5nUmFuZ2U7CisgICAgICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAgICAgLy8gU3RvcmUgbWFya2VyIGZvciBtaXNzcGVsbGVkIHdvcmQu
CisgICAgICAgICAgICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgICAgICAgICAgICAg
bWlzc3BlbGxpbmdSYW5nZS0+c3RhcnRDb250YWluZXIoZWMpLT5kb2N1bWVudCgpLT5tYXJrZXJz
KCktPmFkZE1hcmtlcihtaXNzcGVsbGluZ1JhbmdlLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6U3Bl
bGxpbmcpOworICAgICAgICAgICAgICAgIEFTU0VSVCghZWMpOworCisgICAgICAgICAgICAgICAg
Ly8gQmFpbCBvdXQgaWYgd2UncmUgbWFya2luZyBvbmx5IHRoZSBmaXJzdCBtaXNzcGVsbGluZywg
YW5kIG5vdCBhbGwgaW5zdGFuY2VzLgorICAgICAgICAgICAgICAgIGlmICghbWFya0FsbCkKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIGN1cnJlbnRDaHVua09mZnNldCArPSBsZW47CisgICAgICAgIGl0LmFkdmFu
Y2UoKTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIGZpcnN0TWlzc3BlbGxpbmc7Cit9CisKK1N0
cmluZyBSYW5nZU1hcmtlckNvbnRyb2xsZXI6OmZpbmRGaXJzdE1pc3NwZWxsaW5nT3JCYWRHcmFt
bWFyKGJvb2wgY2hlY2tHcmFtbWFyLCBib29sJiBvdXRJc1NwZWxsaW5nLCBpbnQmIG91dEZpcnN0
Rm91bmRPZmZzZXQsIEdyYW1tYXJEZXRhaWwmIG91dEdyYW1tYXJEZXRhaWwpCit7CisjaWYgUExB
VEZPUk0oTUFDKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJ
TERJTkdfT05fTEVPUEFSRCkKKyAgICBTdHJpbmcgZmlyc3RGb3VuZEl0ZW07CisgICAgU3RyaW5n
IG1pc3NwZWxsZWRXb3JkOworICAgIFN0cmluZyBiYWRHcmFtbWFyUGhyYXNlOworICAgIEV4Y2Vw
dGlvbkNvZGUgZWMgPSAwOworICAgIAorICAgIC8vIEluaXRpYWxpemUgb3V0IHBhcmFtZXRlcnM7
IHRoZXNlIHdpbGwgYmUgdXBkYXRlZCBpZiB3ZSBmaW5kIHNvbWV0aGluZyB0byByZXR1cm4uCisg
ICAgb3V0SXNTcGVsbGluZyA9IHRydWU7CisgICAgb3V0Rmlyc3RGb3VuZE9mZnNldCA9IDA7Cisg
ICAgb3V0R3JhbW1hckRldGFpbC5sb2NhdGlvbiA9IC0xOworICAgIG91dEdyYW1tYXJEZXRhaWwu
bGVuZ3RoID0gMDsKKyAgICBvdXRHcmFtbWFyRGV0YWlsLmd1ZXNzZXMuY2xlYXIoKTsKKyAgICBv
dXRHcmFtbWFyRGV0YWlsLnVzZXJEZXNjcmlwdGlvbiA9ICIiOworICAgIAorICAgIC8vIEV4cGFu
ZCB0aGUgc2VhcmNoIHJhbmdlIHRvIGVuY29tcGFzcyBlbnRpcmUgcGFyYWdyYXBocywgc2luY2Ug
dGV4dCBjaGVja2luZyBuZWVkcyB0aGF0IG11Y2ggY29udGV4dC4KKyAgICAvLyBEZXRlcm1pbmUg
dGhlIGNoYXJhY3RlciBvZmZzZXQgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIHBhcmFncmFwaCB0byB0
aGUgc3RhcnQgb2YgdGhlIG9yaWdpbmFsIHNlYXJjaCByYW5nZSwKKyAgICAvLyBzaW5jZSB3ZSB3
aWxsIHdhbnQgdG8gaWdub3JlIHJlc3VsdHMgaW4gdGhpcyBhcmVhLgorICAgIFJlZlB0cjxSYW5n
ZT4gcGFyYWdyYXBoUmFuZ2UgPSBtX3JhbmdlLT5jbG9uZVJhbmdlKGVjKTsKKyAgICBzZXRTdGFy
dChwYXJhZ3JhcGhSYW5nZS5nZXQoKSwgc3RhcnRPZlBhcmFncmFwaChtX3JhbmdlLT5zdGFydFBv
c2l0aW9uKCkpKTsKKyAgICBpbnQgdG90YWxSYW5nZUxlbmd0aCA9IFRleHRJdGVyYXRvcjo6cmFu
Z2VMZW5ndGgocGFyYWdyYXBoUmFuZ2UuZ2V0KCkpOworICAgIHNldEVuZChwYXJhZ3JhcGhSYW5n
ZS5nZXQoKSwgZW5kT2ZQYXJhZ3JhcGgobV9yYW5nZS0+c3RhcnRQb3NpdGlvbigpKSk7CisgICAg
CisgICAgUmVmUHRyPFJhbmdlPiBvZmZzZXRBc1JhbmdlID0gUmFuZ2U6OmNyZWF0ZShwYXJhZ3Jh
cGhSYW5nZS0+c3RhcnRDb250YWluZXIoZWMpLT5kb2N1bWVudCgpLCBwYXJhZ3JhcGhSYW5nZS0+
c3RhcnRQb3NpdGlvbigpLCBtX3JhbmdlLT5zdGFydFBvc2l0aW9uKCkpOworICAgIGludCByYW5n
ZVN0YXJ0T2Zmc2V0ID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChvZmZzZXRBc1JhbmdlLmdl
dCgpKTsKKyAgICBpbnQgdG90YWxMZW5ndGhQcm9jZXNzZWQgPSAwOworICAgIAorICAgIGJvb2wg
Zmlyc3RJdGVyYXRpb24gPSB0cnVlOworICAgIGJvb2wgbGFzdEl0ZXJhdGlvbiA9IGZhbHNlOwor
ICAgIHdoaWxlICh0b3RhbExlbmd0aFByb2Nlc3NlZCA8IHRvdGFsUmFuZ2VMZW5ndGgpIHsKKyAg
ICAgICAgLy8gSXRlcmF0ZSB0aHJvdWdoIHRoZSBzZWFyY2ggcmFuZ2UgYnkgcGFyYWdyYXBocywg
Y2hlY2tpbmcgZWFjaCBvbmUgZm9yIHNwZWxsaW5nIGFuZCBncmFtbWFyLgorICAgICAgICBpbnQg
Y3VycmVudExlbmd0aCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgocGFyYWdyYXBoUmFuZ2Uu
Z2V0KCkpOworICAgICAgICBpbnQgY3VycmVudFN0YXJ0T2Zmc2V0ID0gZmlyc3RJdGVyYXRpb24g
PyByYW5nZVN0YXJ0T2Zmc2V0IDogMDsKKyAgICAgICAgaW50IGN1cnJlbnRFbmRPZmZzZXQgPSBj
dXJyZW50TGVuZ3RoOworICAgICAgICBpZiAoaW5TYW1lUGFyYWdyYXBoKHBhcmFncmFwaFJhbmdl
LT5zdGFydFBvc2l0aW9uKCksIG1fcmFuZ2UtPmVuZFBvc2l0aW9uKCkpKSB7CisgICAgICAgICAg
ICAvLyBEZXRlcm1pbmUgdGhlIGNoYXJhY3RlciBvZmZzZXQgZnJvbSB0aGUgZW5kIG9mIHRoZSBv
cmlnaW5hbCBzZWFyY2ggcmFuZ2UgdG8gdGhlIGVuZCBvZiB0aGUgcGFyYWdyYXBoLAorICAgICAg
ICAgICAgLy8gc2luY2Ugd2Ugd2lsbCB3YW50IHRvIGlnbm9yZSByZXN1bHRzIGluIHRoaXMgYXJl
YS4KKyAgICAgICAgICAgIFJlZlB0cjxSYW5nZT4gZW5kT2Zmc2V0QXNSYW5nZSA9IFJhbmdlOjpj
cmVhdGUocGFyYWdyYXBoUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKGVjKS0+ZG9jdW1lbnQoKSwgcGFy
YWdyYXBoUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSwgbV9yYW5nZS0+ZW5kUG9zaXRpb24oKSk7Cisg
ICAgICAgICAgICBjdXJyZW50RW5kT2Zmc2V0ID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChl
bmRPZmZzZXRBc1JhbmdlLmdldCgpKTsKKyAgICAgICAgICAgIGxhc3RJdGVyYXRpb24gPSB0cnVl
OworICAgICAgICB9CisgICAgICAgIGlmIChjdXJyZW50U3RhcnRPZmZzZXQgPCBjdXJyZW50RW5k
T2Zmc2V0KSB7CisgICAgICAgICAgICBTdHJpbmcgcGFyYWdyYXBoU3RyaW5nID0gcGxhaW5UZXh0
KHBhcmFncmFwaFJhbmdlLmdldCgpKTsKKyAgICAgICAgICAgIGlmIChwYXJhZ3JhcGhTdHJpbmcu
bGVuZ3RoKCkgPiAwKSB7CisgICAgICAgICAgICAgICAgYm9vbCBmb3VuZEdyYW1tYXIgPSBmYWxz
ZTsKKyAgICAgICAgICAgICAgICBpbnQgc3BlbGxpbmdMb2NhdGlvbiA9IDA7CisgICAgICAgICAg
ICAgICAgaW50IGdyYW1tYXJQaHJhc2VMb2NhdGlvbiA9IDA7CisgICAgICAgICAgICAgICAgaW50
IGdyYW1tYXJEZXRhaWxMb2NhdGlvbiA9IDA7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgZ3Jh
bW1hckRldGFpbEluZGV4ID0gMDsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBW
ZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiByZXN1bHRzOworICAgICAgICAgICAgICAgIHVpbnQ2
NF90IGNoZWNraW5nVHlwZXMgPSBjaGVja0dyYW1tYXIgPyAoVGV4dENoZWNraW5nVHlwZVNwZWxs
aW5nIHwgVGV4dENoZWNraW5nVHlwZUdyYW1tYXIpIDogVGV4dENoZWNraW5nVHlwZVNwZWxsaW5n
OworICAgICAgICAgICAgICAgIG1fY2xpZW50LT5jaGVja1RleHRPZlBhcmFncmFwaChwYXJhZ3Jh
cGhTdHJpbmcuY2hhcmFjdGVycygpLCBwYXJhZ3JhcGhTdHJpbmcubGVuZ3RoKCksIGNoZWNraW5n
VHlwZXMsIHJlc3VsdHMpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCByZXN1bHRzLnNpemUoKTsgaSsrKSB7CisgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFRleHRDaGVja2luZ1Jlc3VsdCogcmVzdWx0ID0gJnJlc3VsdHNbaV07Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQtPnR5cGUgPT0gVGV4dENoZWNraW5nVHlwZVNw
ZWxsaW5nICYmIHJlc3VsdC0+bG9jYXRpb24gPj0gY3VycmVudFN0YXJ0T2Zmc2V0ICYmIHJlc3Vs
dC0+bG9jYXRpb24gKyByZXN1bHQtPmxlbmd0aCA8PSBjdXJyZW50RW5kT2Zmc2V0KSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBBU1NFUlQocmVzdWx0LT5sZW5ndGggPiAwICYmIHJlc3VsdC0+
bG9jYXRpb24gPj0gMCk7CisgICAgICAgICAgICAgICAgICAgICAgICBzcGVsbGluZ0xvY2F0aW9u
ID0gcmVzdWx0LT5sb2NhdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1pc3NwZWxsZWRX
b3JkID0gcGFyYWdyYXBoU3RyaW5nLnN1YnN0cmluZyhyZXN1bHQtPmxvY2F0aW9uLCByZXN1bHQt
Pmxlbmd0aCk7CisgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQobWlzc3BlbGxlZFdvcmQu
bGVuZ3RoKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKGNoZWNrR3JhbW1hciAmJiByZXN1bHQt
PnR5cGUgPT0gVGV4dENoZWNraW5nVHlwZUdyYW1tYXIgJiYgcmVzdWx0LT5sb2NhdGlvbiA8IGN1
cnJlbnRFbmRPZmZzZXQgJiYgcmVzdWx0LT5sb2NhdGlvbiArIHJlc3VsdC0+bGVuZ3RoID4gY3Vy
cmVudFN0YXJ0T2Zmc2V0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQocmVzdWx0
LT5sZW5ndGggPiAwICYmIHJlc3VsdC0+bG9jYXRpb24gPj0gMCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBXZSBjYW4ndCBzdG9wIGFmdGVyIHRoZSBmaXJzdCBncmFtbWFyIHJlc3VsdCwg
c2luY2UgdGhlcmUgbWlnaHQgc3RpbGwgYmUgYSBzcGVsbGluZyByZXN1bHQgYWZ0ZXIKKyAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIGl0IGJlZ2lucyBidXQgYmVmb3JlIHRoZSBmaXJzdCBkZXRh
aWwgaW4gaXQsIGJ1dCB3ZSBjYW4gc3RvcCBpZiB3ZSBmaW5kIGEgc2Vjb25kIGdyYW1tYXIgcmVz
dWx0LgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvdW5kR3JhbW1hcikKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaiA9IDA7IGogPCByZXN1bHQtPmRldGFpbHMuc2l6ZSgpOyBqKyspIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBHcmFtbWFyRGV0YWlsKiBkZXRhaWwgPSAmcmVz
dWx0LT5kZXRhaWxzW2pdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChkZXRh
aWwtPmxlbmd0aCA+IDAgJiYgZGV0YWlsLT5sb2NhdGlvbiA+PSAwKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAocmVzdWx0LT5sb2NhdGlvbiArIGRldGFpbC0+bG9jYXRpb24gPj0g
Y3VycmVudFN0YXJ0T2Zmc2V0ICYmIHJlc3VsdC0+bG9jYXRpb24gKyBkZXRhaWwtPmxvY2F0aW9u
ICsgZGV0YWlsLT5sZW5ndGggPD0gY3VycmVudEVuZE9mZnNldCAmJiAoIWZvdW5kR3JhbW1hciB8
fCByZXN1bHQtPmxvY2F0aW9uICsgZGV0YWlsLT5sb2NhdGlvbiA8IGdyYW1tYXJEZXRhaWxMb2Nh
dGlvbikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JhbW1hckRldGFpbElu
ZGV4ID0gajsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JhbW1hckRldGFpbExv
Y2F0aW9uID0gcmVzdWx0LT5sb2NhdGlvbiArIGRldGFpbC0+bG9jYXRpb247CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZvdW5kR3JhbW1hciA9IHRydWU7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKGZvdW5kR3JhbW1hcikgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGdyYW1tYXJQaHJhc2VMb2NhdGlvbiA9IHJlc3VsdC0+bG9jYXRpb247CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgb3V0R3JhbW1hckRldGFpbCA9IHJlc3VsdC0+ZGV0YWlsc1tncmFt
bWFyRGV0YWlsSW5kZXhdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhZEdyYW1tYXJQ
aHJhc2UgPSBwYXJhZ3JhcGhTdHJpbmcuc3Vic3RyaW5nKHJlc3VsdC0+bG9jYXRpb24sIHJlc3Vs
dC0+bGVuZ3RoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoYmFkR3JhbW1h
clBocmFzZS5sZW5ndGgoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoIW1p
c3NwZWxsZWRXb3JkLmlzRW1wdHkoKSAmJiAoIWNoZWNrR3JhbW1hciB8fCBiYWRHcmFtbWFyUGhy
YXNlLmlzRW1wdHkoKSB8fCBzcGVsbGluZ0xvY2F0aW9uIDw9IGdyYW1tYXJEZXRhaWxMb2NhdGlv
bikpIHsKKyAgICAgICAgICAgICAgICAgICAgaW50IHNwZWxsaW5nT2Zmc2V0ID0gc3BlbGxpbmdM
b2NhdGlvbiAtIGN1cnJlbnRTdGFydE9mZnNldDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFm
aXJzdEl0ZXJhdGlvbikgeworICAgICAgICAgICAgICAgICAgICAgICAgUmVmUHRyPFJhbmdlPiBw
YXJhZ3JhcGhPZmZzZXRBc1JhbmdlID0gUmFuZ2U6OmNyZWF0ZShwYXJhZ3JhcGhSYW5nZS0+c3Rh
cnRDb250YWluZXIoZWMpLT5kb2N1bWVudCgpLCBtX3JhbmdlLT5zdGFydFBvc2l0aW9uKCksIHBh
cmFncmFwaFJhbmdlLT5zdGFydFBvc2l0aW9uKCkpOworICAgICAgICAgICAgICAgICAgICAgICAg
c3BlbGxpbmdPZmZzZXQgKz0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChwYXJhZ3JhcGhPZmZz
ZXRBc1JhbmdlLmdldCgpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICBvdXRJc1NwZWxsaW5nID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgb3V0Rmlyc3RG
b3VuZE9mZnNldCA9IHNwZWxsaW5nT2Zmc2V0OworICAgICAgICAgICAgICAgICAgICBmaXJzdEZv
dW5kSXRlbSA9IG1pc3NwZWxsZWRXb3JkOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGNoZWNrR3JhbW1hciAmJiAhYmFk
R3JhbW1hclBocmFzZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaW50IGdyYW1t
YXJQaHJhc2VPZmZzZXQgPSBncmFtbWFyUGhyYXNlTG9jYXRpb24gLSBjdXJyZW50U3RhcnRPZmZz
ZXQ7CisgICAgICAgICAgICAgICAgICAgIGlmICghZmlyc3RJdGVyYXRpb24pIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIFJlZlB0cjxSYW5nZT4gcGFyYWdyYXBoT2Zmc2V0QXNSYW5nZSA9IFJh
bmdlOjpjcmVhdGUocGFyYWdyYXBoUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKGVjKS0+ZG9jdW1lbnQo
KSwgbV9yYW5nZS0+c3RhcnRQb3NpdGlvbigpLCBwYXJhZ3JhcGhSYW5nZS0+c3RhcnRQb3NpdGlv
bigpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdyYW1tYXJQaHJhc2VPZmZzZXQgKz0gVGV4
dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChwYXJhZ3JhcGhPZmZzZXRBc1JhbmdlLmdldCgpKTsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBvdXRJc1NwZWxsaW5nID0g
ZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIG91dEZpcnN0Rm91bmRPZmZzZXQgPSBncmFtbWFy
UGhyYXNlT2Zmc2V0OworICAgICAgICAgICAgICAgICAgICBmaXJzdEZvdW5kSXRlbSA9IGJhZEdy
YW1tYXJQaHJhc2U7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAobGFzdEl0ZXJhdGlvbiB8
fCB0b3RhbExlbmd0aFByb2Nlc3NlZCArIGN1cnJlbnRMZW5ndGggPj0gdG90YWxSYW5nZUxlbmd0
aCkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBWaXNpYmxlUG9zaXRpb24gbmV3UGFyYWdy
YXBoU3RhcnQgPSBzdGFydE9mTmV4dFBhcmFncmFwaChwYXJhZ3JhcGhSYW5nZS0+ZW5kUG9zaXRp
b24oKSk7CisgICAgICAgIHNldFN0YXJ0KHBhcmFncmFwaFJhbmdlLmdldCgpLCBuZXdQYXJhZ3Jh
cGhTdGFydCk7CisgICAgICAgIHNldEVuZChwYXJhZ3JhcGhSYW5nZS5nZXQoKSwgZW5kT2ZQYXJh
Z3JhcGgobmV3UGFyYWdyYXBoU3RhcnQpKTsKKyAgICAgICAgZmlyc3RJdGVyYXRpb24gPSBmYWxz
ZTsKKyAgICAgICAgdG90YWxMZW5ndGhQcm9jZXNzZWQgKz0gY3VycmVudExlbmd0aDsKKyAgICB9
CisgICAgcmV0dXJuIGZpcnN0Rm91bmRJdGVtOworI2Vsc2UKKyAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICBVTlVTRURfUEFSQU0oZmlyc3RNaXNzcGVsbGluZ09mZnNldCk7CisgICAgVU5V
U0VEX1BBUkFNKG1hcmtBbGwpOworICAgIFVOVVNFRF9QQVJBTShmaXJzdE1pc3NwZWxsaW5nUmFu
Z2UpOworICAgIHJldHVybiAiIjsKKyNlbmRpZgorfQorCitpbnQgUmFuZ2VNYXJrZXJDb250cm9s
bGVyOjpmaW5kRmlyc3RHcmFtbWFyRGV0YWlsKGNvbnN0IFZlY3RvcjxHcmFtbWFyRGV0YWlsPiYg
Z3JhbW1hckRldGFpbHMsIGludCBiYWRHcmFtbWFyUGhyYXNlTG9jYXRpb24sIGludCAvKmJhZEdy
YW1tYXJQaHJhc2VMZW5ndGgqLywgaW50IHN0YXJ0T2Zmc2V0LCBpbnQgZW5kT2Zmc2V0LCBib29s
IG1hcmtBbGwpCit7CisjaWZuZGVmIEJVSUxESU5HX09OX1RJR0VSCisgICAgLy8gRm91bmQgc29t
ZSBiYWQgZ3JhbW1hci4gRmluZCB0aGUgZWFybGllc3QgZGV0YWlsIHJhbmdlIHRoYXQgc3RhcnRz
IGluIG91ciBzZWFyY2ggcmFuZ2UgKGlmIGFueSkuCisgICAgLy8gT3B0aW9uYWxseSBhZGQgYSBE
b2N1bWVudE1hcmtlciBmb3IgZWFjaCBkZXRhaWwgaW4gdGhlIHJhbmdlLgorICAgIGludCBlYXJs
aWVzdERldGFpbExvY2F0aW9uU29GYXIgPSAtMTsKKyAgICBpbnQgZWFybGllc3REZXRhaWxJbmRl
eCA9IC0xOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBncmFtbWFyRGV0YWlscy5zaXpl
KCk7IGkrKykgeworICAgICAgICBjb25zdCBHcmFtbWFyRGV0YWlsKiBkZXRhaWwgPSAmZ3JhbW1h
ckRldGFpbHNbaV07CisgICAgICAgIEFTU0VSVChkZXRhaWwtPmxlbmd0aCA+IDAgJiYgZGV0YWls
LT5sb2NhdGlvbiA+PSAwKTsKKyAgICAgICAgCisgICAgICAgIGludCBkZXRhaWxTdGFydE9mZnNl
dEluUGFyYWdyYXBoID0gYmFkR3JhbW1hclBocmFzZUxvY2F0aW9uICsgZGV0YWlsLT5sb2NhdGlv
bjsKKyAgICAgICAgCisgICAgICAgIC8vIFNraXAgdGhpcyBkZXRhaWwgaWYgaXQgc3RhcnRzIGJl
Zm9yZSB0aGUgb3JpZ2luYWwgc2VhcmNoIHJhbmdlCisgICAgICAgIGlmIChkZXRhaWxTdGFydE9m
ZnNldEluUGFyYWdyYXBoIDwgc3RhcnRPZmZzZXQpCisgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgCisgICAgICAgIC8vIFNraXAgdGhpcyBkZXRhaWwgaWYgaXQgc3RhcnRzIGFmdGVyIHRo
ZSBvcmlnaW5hbCBzZWFyY2ggcmFuZ2UKKyAgICAgICAgaWYgKGRldGFpbFN0YXJ0T2Zmc2V0SW5Q
YXJhZ3JhcGggPj0gZW5kT2Zmc2V0KQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIAor
ICAgICAgICBpZiAobWFya0FsbCkgeworICAgICAgICAgICAgUmVmUHRyPFJhbmdlPiBiYWRHcmFt
bWFyUmFuZ2UgPSBUZXh0SXRlcmF0b3I6OnN1YnJhbmdlKG1fcmFuZ2UuZ2V0KCksIGJhZEdyYW1t
YXJQaHJhc2VMb2NhdGlvbiAtIHN0YXJ0T2Zmc2V0ICsgZGV0YWlsLT5sb2NhdGlvbiwgZGV0YWls
LT5sZW5ndGgpOworICAgICAgICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgICAgICAg
ICBiYWRHcmFtbWFyUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKGVjKS0+ZG9jdW1lbnQoKS0+bWFya2Vy
cygpLT5hZGRNYXJrZXIoYmFkR3JhbW1hclJhbmdlLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6R3Jh
bW1hciwgZGV0YWlsLT51c2VyRGVzY3JpcHRpb24pOworICAgICAgICAgICAgQVNTRVJUKCFlYyk7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIFJlbWVtYmVyIHRoaXMgZGV0YWlsIG9u
bHkgaWYgaXQncyBlYXJsaWVyIHRoYW4gb3VyIGN1cnJlbnQgY2FuZGlkYXRlICh0aGUgZGV0YWls
cyBhcmVuJ3QgaW4gYSBndWFyYW50ZWVkIG9yZGVyKQorICAgICAgICBpZiAoZWFybGllc3REZXRh
aWxJbmRleCA8IDAgfHwgZWFybGllc3REZXRhaWxMb2NhdGlvblNvRmFyID4gZGV0YWlsLT5sb2Nh
dGlvbikgeworICAgICAgICAgICAgZWFybGllc3REZXRhaWxJbmRleCA9IGk7CisgICAgICAgICAg
ICBlYXJsaWVzdERldGFpbExvY2F0aW9uU29GYXIgPSBkZXRhaWwtPmxvY2F0aW9uOworICAgICAg
ICB9CisgICAgfQorICAgIAorICAgIHJldHVybiBlYXJsaWVzdERldGFpbEluZGV4OworI2Vsc2UK
KyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBVTlVTRURfUEFSQU0oZ3JhbW1hckRldGFp
bHMpOworICAgIFVOVVNFRF9QQVJBTShiYWRHcmFtbWFyUGhyYXNlTG9jYXRpb24pOworICAgIFVO
VVNFRF9QQVJBTShzdGFydE9mZnNldCk7CisgICAgVU5VU0VEX1BBUkFNKGVuZE9mZnNldCk7Cisg
ICAgVU5VU0VEX1BBUkFNKG1hcmtBbGwpOworICAgIHJldHVybiAwOworI2VuZGlmCit9CisKK1N0
cmluZyBSYW5nZU1hcmtlckNvbnRyb2xsZXI6OmZpbmRGaXJzdEJhZEdyYW1tYXIoR3JhbW1hckRl
dGFpbCYgb3V0R3JhbW1hckRldGFpbCwgaW50JiBvdXRHcmFtbWFyUGhyYXNlT2Zmc2V0LCBib29s
IG1hcmtBbGwpCit7CisjaWZuZGVmIEJVSUxESU5HX09OX1RJR0VSCisgICAgLy8gSW5pdGlhbGl6
ZSBvdXQgcGFyYW1ldGVyczsgdGhlc2Ugd2lsbCBiZSB1cGRhdGVkIGlmIHdlIGZpbmQgc29tZXRo
aW5nIHRvIHJldHVybi4KKyAgICBvdXRHcmFtbWFyRGV0YWlsLmxvY2F0aW9uID0gLTE7CisgICAg
b3V0R3JhbW1hckRldGFpbC5sZW5ndGggPSAwOworICAgIG91dEdyYW1tYXJEZXRhaWwuZ3Vlc3Nl
cy5jbGVhcigpOworICAgIG91dEdyYW1tYXJEZXRhaWwudXNlckRlc2NyaXB0aW9uID0gIiI7Cisg
ICAgb3V0R3JhbW1hclBocmFzZU9mZnNldCA9IDA7CisgICAgCisgICAgU3RyaW5nIGZpcnN0QmFk
R3JhbW1hclBocmFzZTsKKworICAgIC8vIEV4cGFuZCB0aGUgc2VhcmNoIHJhbmdlIHRvIGVuY29t
cGFzcyBlbnRpcmUgcGFyYWdyYXBocywgc2luY2UgZ3JhbW1hciBjaGVja2luZyBuZWVkcyB0aGF0
IG11Y2ggY29udGV4dC4KKyAgICAvLyBEZXRlcm1pbmUgdGhlIGNoYXJhY3RlciBvZmZzZXQgZnJv
bSB0aGUgc3RhcnQgb2YgdGhlIHBhcmFncmFwaCB0byB0aGUgc3RhcnQgb2YgdGhlIG9yaWdpbmFs
IHNlYXJjaCByYW5nZSwKKyAgICAvLyBzaW5jZSB3ZSB3aWxsIHdhbnQgdG8gaWdub3JlIHJlc3Vs
dHMgaW4gdGhpcyBhcmVhLgorICAgIGludCBzZWFyY2hSYW5nZVN0YXJ0T2Zmc2V0OworICAgIFN0
cmluZyBwYXJhZ3JhcGhTdHJpbmc7CisgICAgUmVmUHRyPFJhbmdlPiBwYXJhZ3JhcGhSYW5nZSA9
IHBhcmFncmFwaEFsaWduZWRSYW5nZShzZWFyY2hSYW5nZVN0YXJ0T2Zmc2V0LCBwYXJhZ3JhcGhT
dHJpbmcpOworICAgICAgICAKKyAgICAvLyBEZXRlcm1pbmUgdGhlIGNoYXJhY3RlciBvZmZzZXQg
ZnJvbSB0aGUgc3RhcnQgb2YgdGhlIHBhcmFncmFwaCB0byB0aGUgZW5kIG9mIHRoZSBvcmlnaW5h
bCBzZWFyY2ggcmFuZ2UsIAorICAgIC8vIHNpbmNlIHdlIHdpbGwgd2FudCB0byBpZ25vcmUgcmVz
dWx0cyBpbiB0aGlzIGFyZWEgYWxzby4KKyAgICBpbnQgc2VhcmNoUmFuZ2VFbmRPZmZzZXQgPSBz
ZWFyY2hSYW5nZVN0YXJ0T2Zmc2V0ICsgVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChtX3Jhbmdl
LmdldCgpKTsKKyAgICAgICAgCisgICAgLy8gU3RhcnQgY2hlY2tpbmcgZnJvbSBiZWdpbm5pbmcg
b2YgcGFyYWdyYXBoLCBidXQgc2tpcCBwYXN0IHJlc3VsdHMgdGhhdCBvY2N1ciBiZWZvcmUgdGhl
IHN0YXJ0IG9mIHRoZSBvcmlnaW5hbCBzZWFyY2ggcmFuZ2UuCisgICAgaW50IHN0YXJ0T2Zmc2V0
ID0gMDsKKyAgICB3aGlsZSAoc3RhcnRPZmZzZXQgPCBzZWFyY2hSYW5nZUVuZE9mZnNldCkgewor
ICAgICAgICBWZWN0b3I8R3JhbW1hckRldGFpbD4gZ3JhbW1hckRldGFpbHM7CisgICAgICAgIGlu
dCBiYWRHcmFtbWFyUGhyYXNlTG9jYXRpb24gPSAtMTsKKyAgICAgICAgaW50IGJhZEdyYW1tYXJQ
aHJhc2VMZW5ndGggPSAwOworICAgICAgICBtX2NsaWVudC0+Y2hlY2tHcmFtbWFyT2ZTdHJpbmco
cGFyYWdyYXBoU3RyaW5nLmNoYXJhY3RlcnMoKSArIHN0YXJ0T2Zmc2V0LCBwYXJhZ3JhcGhTdHJp
bmcubGVuZ3RoKCkgLSBzdGFydE9mZnNldCwgZ3JhbW1hckRldGFpbHMsICZiYWRHcmFtbWFyUGhy
YXNlTG9jYXRpb24sICZiYWRHcmFtbWFyUGhyYXNlTGVuZ3RoKTsKKyAgICAgICAgCisgICAgICAg
IGlmICghYmFkR3JhbW1hclBocmFzZUxlbmd0aCkgeworICAgICAgICAgICAgQVNTRVJUKGJhZEdy
YW1tYXJQaHJhc2VMb2NhdGlvbiA9PSAtMSk7CisgICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7
CisgICAgICAgIH0KKworICAgICAgICBBU1NFUlQoYmFkR3JhbW1hclBocmFzZUxvY2F0aW9uID49
IDApOworICAgICAgICBiYWRHcmFtbWFyUGhyYXNlTG9jYXRpb24gKz0gc3RhcnRPZmZzZXQ7CisK
KyAgICAgICAgCisgICAgICAgIC8vIEZvdW5kIHNvbWUgYmFkIGdyYW1tYXIuIEZpbmQgdGhlIGVh
cmxpZXN0IGRldGFpbCByYW5nZSB0aGF0IHN0YXJ0cyBpbiBvdXIgc2VhcmNoIHJhbmdlIChpZiBh
bnkpLgorICAgICAgICBpbnQgYmFkR3JhbW1hckluZGV4ID0gZmluZEZpcnN0R3JhbW1hckRldGFp
bChncmFtbWFyRGV0YWlscywgYmFkR3JhbW1hclBocmFzZUxvY2F0aW9uLCBiYWRHcmFtbWFyUGhy
YXNlTGVuZ3RoLCBzZWFyY2hSYW5nZVN0YXJ0T2Zmc2V0LCBzZWFyY2hSYW5nZUVuZE9mZnNldCwg
bWFya0FsbCk7CisgICAgICAgIGlmIChiYWRHcmFtbWFySW5kZXggPj0gMCkgeworICAgICAgICAg
ICAgQVNTRVJUKHN0YXRpY19jYXN0PHVuc2lnbmVkPihiYWRHcmFtbWFySW5kZXgpIDwgZ3JhbW1h
ckRldGFpbHMuc2l6ZSgpKTsKKyAgICAgICAgICAgIG91dEdyYW1tYXJEZXRhaWwgPSBncmFtbWFy
RGV0YWlsc1tiYWRHcmFtbWFySW5kZXhdOworICAgICAgICB9CisKKyAgICAgICAgLy8gSWYgd2Ug
Zm91bmQgYSBkZXRhaWwgaW4gcmFuZ2UsIHRoZW4gd2UgaGF2ZSBmb3VuZCB0aGUgZmlyc3QgYmFk
IHBocmFzZSAodW5sZXNzIHdlIGZvdW5kIG9uZSBlYXJsaWVyIGJ1dAorICAgICAgICAvLyBrZXB0
IGdvaW5nIHNvIHdlIGNvdWxkIG1hcmsgYWxsIGluc3RhbmNlcykuCisgICAgICAgIGlmIChiYWRH
cmFtbWFySW5kZXggPj0gMCAmJiBmaXJzdEJhZEdyYW1tYXJQaHJhc2UuaXNFbXB0eSgpKSB7Cisg
ICAgICAgICAgICBvdXRHcmFtbWFyUGhyYXNlT2Zmc2V0ID0gYmFkR3JhbW1hclBocmFzZUxvY2F0
aW9uIC0gc2VhcmNoUmFuZ2VTdGFydE9mZnNldDsKKyAgICAgICAgICAgIGZpcnN0QmFkR3JhbW1h
clBocmFzZSA9IHBhcmFncmFwaFN0cmluZy5zdWJzdHJpbmcoYmFkR3JhbW1hclBocmFzZUxvY2F0
aW9uLCBiYWRHcmFtbWFyUGhyYXNlTGVuZ3RoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
Ly8gRm91bmQgb25lLiBXZSdyZSBkb25lIG5vdywgdW5sZXNzIHdlJ3JlIG1hcmtpbmcgZWFjaCBp
bnN0YW5jZS4KKyAgICAgICAgICAgIGlmICghbWFya0FsbCkKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFRoZXNlIHJlc3VsdHMgd2VyZSBhbGwgYmV0d2Vl
biB0aGUgc3RhcnQgb2YgdGhlIHBhcmFncmFwaCBhbmQgdGhlIHN0YXJ0IG9mIHRoZSBzZWFyY2gg
cmFuZ2U7IGxvb2sKKyAgICAgICAgLy8gYmV5b25kIHRoaXMgcGhyYXNlLgorICAgICAgICBzdGFy
dE9mZnNldCA9IGJhZEdyYW1tYXJQaHJhc2VMb2NhdGlvbiArIGJhZEdyYW1tYXJQaHJhc2VMZW5n
dGg7CisgICAgfQorICAgIAorICAgIHJldHVybiBmaXJzdEJhZEdyYW1tYXJQaHJhc2U7CisjZWxz
ZQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIFVOVVNFRF9QQVJBTShvdXRHcmFtbWFy
RGV0YWlsKTsKKyAgICBVTlVTRURfUEFSQU0ob3V0R3JhbW1hclBocmFzZU9mZnNldCk7CisgICAg
VU5VU0VEX1BBUkFNKG1hcmtBbGwpOworI2VuZGlmCit9CisKKworYm9vbCBSYW5nZU1hcmtlckNv
bnRyb2xsZXI6OmlzVW5ncmFtbWF0aWNhbChWZWN0b3I8U3RyaW5nPiYgZ3Vlc3Nlc1ZlY3Rvcikg
Y29uc3QKK3sKKyNpZm5kZWYgQlVJTERJTkdfT05fVElHRVIKKyAgICBpZiAoIW1fY2xpZW50KQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBFeGNlcHRpb25Db2RlIGVjOworICAgIGlmICgh
bV9yYW5nZSB8fCBtX3JhbmdlLT5jb2xsYXBzZWQoZWMpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgCisgICAgLy8gUmV0dXJucyB0cnVlIG9ubHkgaWYgdGhlIHBhc3NlZCByYW5nZSBleGFj
dGx5IGNvcnJlc3BvbmRzIHRvIGEgYmFkIGdyYW1tYXIgZGV0YWlsIHJhbmdlLiBUaGlzIGlzIGFu
YWxvZ291cworICAgIC8vIHRvIGlzU2VsZWN0aW9uTWlzc3BlbGxlZC4gSXQncyBub3QgZ29vZCBl
bm91Z2ggZm9yIHRoZXJlIHRvIGJlIHNvbWUgYmFkIGdyYW1tYXIgc29tZXdoZXJlIGluIHRoZSBy
YW5nZSwKKyAgICAvLyBvciBvdmVybGFwcGluZyB0aGUgcmFuZ2U7IHRoZSByYW5nZXMgbXVzdCBl
eGFjdGx5IG1hdGNoLgorICAgIGd1ZXNzZXNWZWN0b3IuY2xlYXIoKTsKKyAgICBpbnQgZ3JhbW1h
clBocmFzZU9mZnNldDsKKyAgICAKKyAgICBHcmFtbWFyRGV0YWlsIGdyYW1tYXJEZXRhaWw7Cisg
ICAgU3RyaW5nIGJhZEdyYW1tYXJQaHJhc2UgPSBjb25zdF9jYXN0PFJhbmdlTWFya2VyQ29udHJv
bGxlcio+KHRoaXMpLT5maW5kRmlyc3RCYWRHcmFtbWFyKGdyYW1tYXJEZXRhaWwsIGdyYW1tYXJQ
aHJhc2VPZmZzZXQsIGZhbHNlKTsgICAgCisgICAgCisgICAgLy8gTm8gYmFkIGdyYW1tYXIgaW4g
dGhlc2UgcGFydHMgYXQgYWxsLgorICAgIGlmIChiYWRHcmFtbWFyUGhyYXNlLmlzRW1wdHkoKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIC8vIEJhZCBncmFtbWFyLCBidXQgcGhy
YXNlIChlLmcuIHNlbnRlbmNlKSBzdGFydHMgYmV5b25kIHN0YXJ0IG9mIHJhbmdlLgorICAgIGlm
IChncmFtbWFyUGhyYXNlT2Zmc2V0ID4gMCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAor
ICAgIEFTU0VSVChncmFtbWFyRGV0YWlsLmxvY2F0aW9uID49IDAgJiYgZ3JhbW1hckRldGFpbC5s
ZW5ndGggPiAwKTsKKyAgICAKKyAgICAvLyBCYWQgZ3JhbW1hciwgYnV0IHN0YXJ0IG9mIGRldGFp
bCAoZS5nLiB1bmdyYW1tYXRpY2FsIHdvcmQpIGRvZXNuJ3QgbWF0Y2ggc3RhcnQgb2YgcmFuZ2UK
KyAgICBpZiAoZ3JhbW1hckRldGFpbC5sb2NhdGlvbiArIGdyYW1tYXJQaHJhc2VPZmZzZXQpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICAvLyBCYWQgZ3JhbW1hciBhdCBzdGFydCBv
ZiByYW5nZSwgYnV0IGVuZCBvZiBiYWQgZ3JhbW1hciBpcyBiZWZvcmUgb3IgYWZ0ZXIgZW5kIG9m
IHJhbmdlCisgICAgaWYgKGdyYW1tYXJEZXRhaWwubGVuZ3RoICE9IFRleHRJdGVyYXRvcjo6cmFu
Z2VMZW5ndGgobV9yYW5nZS5nZXQoKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAg
ICAvLyBVcGRhdGUgdGhlIHNwZWxsaW5nIHBhbmVsIHRvIGJlIGRpc3BsYXlpbmcgdGhpcyBlcnJv
ciAod2hldGhlciBvciBub3QgdGhlIHNwZWxsaW5nIHBhbmVsIGlzIG9uIHNjcmVlbikuCisgICAg
Ly8gVGhpcyBpcyBuZWNlc3NhcnkgdG8gbWFrZSBhIHN1YnNlcXVlbnQgY2FsbCB0byBbTlNTcGVs
bENoZWNrZXIgaWdub3JlV29yZDppblNwZWxsRG9jdW1lbnRXaXRoVGFnOl0gd29yaworICAgIC8v
IGNvcnJlY3RseTsgdGhhdCBjYWxsIGJlaGF2ZXMgZGlmZmVyZW50bHkgYmFzZWQgb24gd2hldGhl
ciB0aGUgc3BlbGxpbmcgcGFuZWwgaXMgZGlzcGxheWluZyBhIG1pc3NwZWxsaW5nCisgICAgLy8g
b3IgYSBncmFtbWFyIGVycm9yLgorICAgIG1fY2xpZW50LT51cGRhdGVTcGVsbGluZ1VJV2l0aEdy
YW1tYXJTdHJpbmcoYmFkR3JhbW1hclBocmFzZSwgZ3JhbW1hckRldGFpbCk7CisgICAgCisgICAg
cmV0dXJuIHRydWU7CisjZWxzZQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIFVOVVNF
RF9QQVJBTShndWVzc2VzVmVjdG9yKTsKKyAgICByZXR1cm4gdHJ1ZTsKKyNlbmRpZgorfQorCitW
ZWN0b3I8U3RyaW5nPiBSYW5nZU1hcmtlckNvbnRyb2xsZXI6Omd1ZXNzZXNGb3JNaXNzcGVsbGVk
T3JVbmdyYW1tYXRpY2FsUmFuZ2UoYm9vbCBjaGVja0dyYW1tYXIsIGJvb2wmIG1pc3NwZWxsZWQs
IGJvb2wmIHVuZ3JhbW1hdGljYWwpIGNvbnN0Cit7CisjaWYgUExBVEZPUk0oTUFDKSAmJiAhZGVm
aW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkK
KyAgICBWZWN0b3I8U3RyaW5nPiBndWVzc2VzOworICAgIEV4Y2VwdGlvbkNvZGUgZWM7CisgICAg
bWlzc3BlbGxlZCA9IGZhbHNlOworICAgIHVuZ3JhbW1hdGljYWwgPSBmYWxzZTsKKyAgICAKKyAg
ICBpZiAoIW1fY2xpZW50IHx8ICFtX3JhbmdlIHx8IG1fcmFuZ2UtPmNvbGxhcHNlZChlYykpCisg
ICAgICAgIHJldHVybiBndWVzc2VzOworCisgICAgLy8gRXhwYW5kIHRoZSByYW5nZSB0byBlbmNv
bXBhc3MgZW50aXJlIHBhcmFncmFwaHMsIHNpbmNlIHRleHQgY2hlY2tpbmcgbmVlZHMgdGhhdCBt
dWNoIGNvbnRleHQuCisgICAgaW50IHJhbmdlU3RhcnRPZmZzZXQ7CisgICAgU3RyaW5nIHBhcmFn
cmFwaFN0cmluZzsKKyAgICBSZWZQdHI8UmFuZ2U+IHBhcmFncmFwaFJhbmdlID0gcGFyYWdyYXBo
QWxpZ25lZFJhbmdlKHJhbmdlU3RhcnRPZmZzZXQsIHBhcmFncmFwaFN0cmluZyk7CisgICAgaW50
IHJhbmdlTGVuZ3RoID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChtX3JhbmdlLmdldCgpKTsK
KyAgICBpZiAoIXJhbmdlTGVuZ3RoIHx8ICFwYXJhZ3JhcGhTdHJpbmcubGVuZ3RoKCkpCisgICAg
ICAgIHJldHVybiBndWVzc2VzOworCisgICAgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gcmVz
dWx0czsKKyAgICB1aW50NjRfdCBjaGVja2luZ1R5cGVzID0gY2hlY2tHcmFtbWFyID8gKFRleHRD
aGVja2luZ1R5cGVTcGVsbGluZyB8IFRleHRDaGVja2luZ1R5cGVHcmFtbWFyKSA6IFRleHRDaGVj
a2luZ1R5cGVTcGVsbGluZzsKKyAgICBtX2NsaWVudC0+Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgocGFy
YWdyYXBoU3RyaW5nLmNoYXJhY3RlcnMoKSwgcGFyYWdyYXBoU3RyaW5nLmxlbmd0aCgpLCBjaGVj
a2luZ1R5cGVzLCByZXN1bHRzKTsKKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
cmVzdWx0cy5zaXplKCk7IGkrKykgeworICAgICAgICBjb25zdCBUZXh0Q2hlY2tpbmdSZXN1bHQq
IHJlc3VsdCA9ICZyZXN1bHRzW2ldOworICAgICAgICBpZiAocmVzdWx0LT50eXBlID09IFRleHRD
aGVja2luZ1R5cGVTcGVsbGluZyAmJiByZXN1bHQtPmxvY2F0aW9uID09IHJhbmdlU3RhcnRPZmZz
ZXQgJiYgcmVzdWx0LT5sZW5ndGggPT0gcmFuZ2VMZW5ndGgpIHsKKyAgICAgICAgICAgIFN0cmlu
ZyBtaXNzcGVsbGVkV29yZCA9IHBhcmFncmFwaFN0cmluZy5zdWJzdHJpbmcocmFuZ2VTdGFydE9m
ZnNldCwgcmFuZ2VMZW5ndGgpOworICAgICAgICAgICAgQVNTRVJUKG1pc3NwZWxsZWRXb3JkLmxl
bmd0aCgpKTsKKyAgICAgICAgICAgIG1fY2xpZW50LT5nZXRHdWVzc2VzRm9yV29yZChtaXNzcGVs
bGVkV29yZCwgZ3Vlc3Nlcyk7CisgICAgICAgICAgICBtX2NsaWVudC0+dXBkYXRlU3BlbGxpbmdV
SVdpdGhNaXNzcGVsbGVkV29yZChtaXNzcGVsbGVkV29yZCk7CisgICAgICAgICAgICBtaXNzcGVs
bGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiBndWVzc2VzOworICAgICAgICB9CisgICAg
fQorICAgIAorICAgIGlmICghY2hlY2tHcmFtbWFyKQorICAgICAgICByZXR1cm4gZ3Vlc3NlczsK
KyAgICAgICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlc3VsdHMuc2l6ZSgpOyBp
KyspIHsKKyAgICAgICAgY29uc3QgVGV4dENoZWNraW5nUmVzdWx0KiByZXN1bHQgPSAmcmVzdWx0
c1tpXTsKKyAgICAgICAgaWYgKHJlc3VsdC0+dHlwZSA9PSBUZXh0Q2hlY2tpbmdUeXBlR3JhbW1h
ciAmJiByZXN1bHQtPmxvY2F0aW9uIDw9IHJhbmdlU3RhcnRPZmZzZXQgJiYgcmVzdWx0LT5sb2Nh
dGlvbiArIHJlc3VsdC0+bGVuZ3RoID49IHJhbmdlU3RhcnRPZmZzZXQgKyByYW5nZUxlbmd0aCkg
eworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IHJlc3VsdC0+ZGV0YWlscy5z
aXplKCk7IGorKykgeworICAgICAgICAgICAgICAgIGNvbnN0IEdyYW1tYXJEZXRhaWwqIGRldGFp
bCA9ICZyZXN1bHQtPmRldGFpbHNbal07CisgICAgICAgICAgICAgICAgQVNTRVJUKGRldGFpbC0+
bGVuZ3RoID4gMCAmJiBkZXRhaWwtPmxvY2F0aW9uID49IDApOworICAgICAgICAgICAgICAgIGlm
IChyZXN1bHQtPmxvY2F0aW9uICsgZGV0YWlsLT5sb2NhdGlvbiA9PSByYW5nZVN0YXJ0T2Zmc2V0
ICYmIGRldGFpbC0+bGVuZ3RoID09IHJhbmdlTGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgICAg
IFN0cmluZyBiYWRHcmFtbWFyUGhyYXNlID0gcGFyYWdyYXBoU3RyaW5nLnN1YnN0cmluZyhyZXN1
bHQtPmxvY2F0aW9uLCByZXN1bHQtPmxlbmd0aCk7CisgICAgICAgICAgICAgICAgICAgIEFTU0VS
VChiYWRHcmFtbWFyUGhyYXNlLmxlbmd0aCgpKTsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBrID0gMDsgayA8IGRldGFpbC0+Z3Vlc3Nlcy5zaXplKCk7IGsrKykKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGd1ZXNzZXMuYXBwZW5kKGRldGFpbC0+Z3Vlc3Nlc1trXSk7CisgICAg
ICAgICAgICAgICAgICAgIG1fY2xpZW50LT51cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJp
bmcoYmFkR3JhbW1hclBocmFzZSwgKmRldGFpbCk7CisgICAgICAgICAgICAgICAgICAgIHVuZ3Jh
bW1hdGljYWwgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ3Vlc3NlczsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0
dXJuIGd1ZXNzZXM7CisjZWxzZQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIFVOVVNF
RF9QQVJBTShjaGVja0dyYW1tYXIpOworICAgIFVOVVNFRF9QQVJBTShtaXNzcGVsbGVkKTsKKyAg
ICBVTlVTRURfUEFSQU0odW5ncmFtbWF0aWNhbCk7CisgICAgcmV0dXJuIFZlY3RvcjxTdHJpbmc+
KCk7CisjZW5kaWYKK30KKworCit2b2lkIFJhbmdlTWFya2VyQ29udHJvbGxlcjo6bWFya0FsbE1p
c3NwZWxsaW5ncyhSZWZQdHI8UmFuZ2U+JiBmaXJzdE1pc3NwZWxsaW5nUmFuZ2UpCit7CisgICAg
Ly8gVXNlIHRoZSAibWFya0FsbCIgZmVhdHVyZSBvZiBmaW5kRmlyc3RNaXNzcGVsbGluZy4gSWdu
b3JlIHRoZSByZXR1cm4gdmFsdWUgYW5kIHRoZSAib3V0IHBhcmFtZXRlciI7CisgICAgLy8gYWxs
IHdlIG5lZWQgdG8gZG8gaXMgbWFyayBldmVyeSBpbnN0YW5jZS4KKyAgICBpbnQgaWdub3JlZE9m
ZnNldDsKKyAgICBmaW5kRmlyc3RNaXNzcGVsbGluZyhpZ25vcmVkT2Zmc2V0LCB0cnVlLCBmaXJz
dE1pc3NwZWxsaW5nUmFuZ2UpOworfQorCit2b2lkIFJhbmdlTWFya2VyQ29udHJvbGxlcjo6bWFy
a0FsbEJhZEdyYW1tYXIoKQoreworI2lmbmRlZiBCVUlMRElOR19PTl9USUdFUgorICAgIC8vIFVz
ZSB0aGUgIm1hcmtBbGwiIGZlYXR1cmUgb2YgZmluZEZpcnN0QmFkR3JhbW1hci4gSWdub3JlIHRo
ZSByZXR1cm4gdmFsdWUgYW5kICJvdXQgcGFyYW1ldGVycyI7IGFsbCB3ZSBuZWVkIHRvCisgICAg
Ly8gZG8gaXMgbWFyayBldmVyeSBpbnN0YW5jZS4KKyAgICBHcmFtbWFyRGV0YWlsIGlnbm9yZWRH
cmFtbWFyRGV0YWlsOworICAgIGludCBpZ25vcmVkT2Zmc2V0OworICAgIGZpbmRGaXJzdEJhZEdy
YW1tYXIoaWdub3JlZEdyYW1tYXJEZXRhaWwsIGlnbm9yZWRPZmZzZXQsIHRydWUpOworI2Vsc2UK
KyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyNlbmRpZgorfQorCit9CmRpZmYgLS1naXQgYS9X
ZWJDb3JlL2VkaXRpbmcvUmFuZ2VNYXJrZXJDb250cm9sbGVyLmggYi9XZWJDb3JlL2VkaXRpbmcv
UmFuZ2VNYXJrZXJDb250cm9sbGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTFlZWIyMjJhYWQwYmZjN2JmZTFi
ZjBlMDBjMGM4NDYyMTI0YjkxNAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvZWRpdGluZy9S
YW5nZU1hcmtlckNvbnRyb2xsZXIuaApAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlh
cnkoLWllcykKKyAqIENvcHlyaWdodCAoYykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqLworCisjaWZuZGVmIFJhbmdlTWFya2VyQ29udHJvbGxlcl9oCisjZGVmaW5lIFJhbmdlTWFy
a2VyQ29udHJvbGxlcl9oCisKKyNpbmNsdWRlICJFZGl0b3JDbGllbnQuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjbGFzcyBSYW5nZTsKKworY2xhc3MgUmFuZ2VNYXJrZXJDb250cm9sbGVy
IDogcHVibGljIE5vbmNvcHlhYmxlIHsKK3B1YmxpYzoKKyAgICBSYW5nZU1hcmtlckNvbnRyb2xs
ZXIoRWRpdG9yQ2xpZW50KiwgUGFzc1JlZlB0cjxSYW5nZT4pOworICAgIH5SYW5nZU1hcmtlckNv
bnRyb2xsZXIoKTsKKworICAgIFN0cmluZyBmaW5kRmlyc3RNaXNzcGVsbGluZyhpbnQmIGZpcnN0
TWlzc3BlbGxpbmdPZmZzZXQsIGJvb2wgbWFya0FsbCwgUmVmUHRyPFJhbmdlPiYgZmlyc3RNaXNz
cGVsbGluZ1JhbmdlKTsKKyAgICBTdHJpbmcgZmluZEZpcnN0TWlzc3BlbGxpbmdPckJhZEdyYW1t
YXIoYm9vbCBjaGVja0dyYW1tYXIsIGJvb2wmIG91dElzU3BlbGxpbmcsIGludCYgb3V0Rmlyc3RG
b3VuZE9mZnNldCwgR3JhbW1hckRldGFpbCYgb3V0R3JhbW1hckRldGFpbCk7CisgICAgU3RyaW5n
IGZpbmRGaXJzdEJhZEdyYW1tYXIoR3JhbW1hckRldGFpbCYgb3V0R3JhbW1hckRldGFpbCwgaW50
JiBvdXRHcmFtbWFyUGhyYXNlT2Zmc2V0LCBib29sIG1hcmtBbGwpOworICAgIGludCBmaW5kRmly
c3RHcmFtbWFyRGV0YWlsKGNvbnN0IFZlY3RvcjxHcmFtbWFyRGV0YWlsPiYgZ3JhbW1hckRldGFp
bHMsIGludCBiYWRHcmFtbWFyUGhyYXNlTG9jYXRpb24sIGludCAvKmJhZEdyYW1tYXJQaHJhc2VM
ZW5ndGgqLywgaW50IHN0YXJ0T2Zmc2V0LCBpbnQgZW5kT2Zmc2V0LCBib29sIG1hcmtBbGwpOwor
ICAgIHZvaWQgbWFya0FsbE1pc3NwZWxsaW5ncyhSZWZQdHI8UmFuZ2U+JiBmaXJzdE1pc3NwZWxs
aW5nUmFuZ2UpOworICAgIHZvaWQgbWFya0FsbEJhZEdyYW1tYXIoKTsKKworICAgIGJvb2wgaXNV
bmdyYW1tYXRpY2FsKFZlY3RvcjxTdHJpbmc+JiBndWVzc2VzVmVjdG9yKSBjb25zdDsKKyAgICBW
ZWN0b3I8U3RyaW5nPiBndWVzc2VzRm9yTWlzc3BlbGxlZE9yVW5ncmFtbWF0aWNhbFJhbmdlKGJv
b2wgY2hlY2tHcmFtbWFyLCBib29sJiBtaXNzcGVsbGVkLCBib29sJiB1bmdyYW1tYXRpY2FsKSBj
b25zdDsKKyAgICBQYXNzUmVmUHRyPFJhbmdlPiBwYXJhZ3JhcGhBbGlnbmVkUmFuZ2UoaW50JiBv
ZmZzZXRJbnRvUGFyYWdyYXBoQWxpZ25lZFJhbmdlLCBTdHJpbmcmIHBhcmFncmFwaFN0cmluZykg
Y29uc3Q7Citwcml2YXRlOgorICAgIEVkaXRvckNsaWVudCogbV9jbGllbnQ7CisgICAgUmVmUHRy
PFJhbmdlPiBtX3JhbmdlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gUmFuZ2VNYXJrZXJDb250cm9sbGVyX2gK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>71978</attachid>
            <date>2010-10-26 21:25:46 -0700</date>
            <delta_ts>2010-10-28 05:52:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-48287-20101027132543.patch</filename>
            <type>text/plain</type>
            <size>73944</size>
            <attacher name="Hajime Morrita">morrita</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9XZWJDb3JlL0NNYWtlTGlzdHMu
dHh0CmluZGV4IDU4YjA3MjA4NGZkZDc4NGU2NzUxODIxZmYxMTk4ZDc1OWQ2ODEzODAuLjA2OGJk
NWRkYjY5MTY4MmUzY2NmZjhmOWY2ODY2NDE1OWFjZTIzMWMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
Q01ha2VMaXN0cy50eHQKKysrIGIvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAtOTI0LDYgKzky
NCw3IEBAIFNFVChXZWJDb3JlX1NPVVJDRVMKICAgICBlZGl0aW5nL1NwbGl0RWxlbWVudENvbW1h
bmQuY3BwCiAgICAgZWRpdGluZy9TcGxpdFRleHROb2RlQ29tbWFuZC5jcHAKICAgICBlZGl0aW5n
L1NwbGl0VGV4dE5vZGVDb250YWluaW5nRWxlbWVudENvbW1hbmQuY3BwCisgICAgZWRpdGluZy9U
ZXh0Q2hlY2tpbmdIZWxwZXIuY3BwCiAgICAgZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwCiAgICAg
ZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcAogICAgIGVkaXRpbmcvVW5saW5rQ29tbWFuZC5jcHAK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MmYxNzY3YTQ3OTBmNmMxYzBhNGQ5NWQzYzI5YTJmZDNmOTA1ZDkyNS4uZTE2MDk3ZTA3ZTU1M2E2
YmQ4NjE4ZDVkYmEzZjdmMWU5M2VlNDE5ZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0NyBAQAorMjAxMC0xMC0yNiAgTU9S
SVRBIEhhamltZSAgPG1vcnJpdGFAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZWZhY3RvcmluZzogU3BlbGxjaGVja2luZyByZWxh
dGVkIHN0YXRpYyBmdW5jdGlvbnMgY291bGQgZm9ybSBhIGNsYXNzCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00ODI4NworCisgICAgICAgIEV4dHJhY3Rl
ZCBzcGVsbGNoZWNrIHJlbGF0ZWQgc3RhdGljIGZ1bmN0aW9ucyB0byBUZXh0Q2hlY2tpbmdIZWxw
ZXIgY2xhc3MsCisgICAgICAgIHdoaWNoIGhhcyBFZGl0b3JDbGllbnQgYW5kIFJhbmdlIGFzIGl0
cyBtZW1iZXIuCisgICAgICAgIAorICAgICAgICBObyBuZXcgdGVzdHMuIEp1c3QgYSByZWZhY3Rv
cmluZy4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEdOVW1ha2VmaWxl
LmFtOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAg
ICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogZWRpdGluZy9FZGl0b3IuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjphZHZhbmNlVG9OZXh0TWlzc3BlbGxpbmcpOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjppc1NlbGVjdGlvblVuZ3JhbW1hdGljYWwpOgorICAg
ICAgICAoV2ViQ29yZTo6RWRpdG9yOjpndWVzc2VzRm9yVW5ncmFtbWF0aWNhbFNlbGVjdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Omd1ZXNzZXNGb3JNaXNzcGVsbGVkT3JVbmdyYW1t
YXRpY2FsU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bWFya01pc3NwZWxs
aW5nc0FmdGVyVHlwaW5nVG9Qb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Om1h
cmtNaXNzcGVsbGluZ3NPckJhZEdyYW1tYXIpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpt
YXJrTWlzc3BlbGxpbmdzKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bWFya0JhZEdyYW1t
YXIpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjptYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFk
R3JhbW1hckluUmFuZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y2hhbmdlQmFja1Rv
UmVwbGFjZWRTdHJpbmcpOgorICAgICAgICAqIGVkaXRpbmcvRWRpdG9yLmg6CisgICAgICAgICog
ZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OlRleHRDaGVja2luZ0hlbHBlcjo6VGV4dENoZWNraW5nSGVscGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OlRleHRDaGVja2luZ0hlbHBlcjo6flRleHRDaGVja2luZ0hlbHBlcik6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0Q2hlY2tpbmdIZWxwZXI6OnBhcmFncmFwaEFsaWduZWRSYW5nZSk6CisgICAg
ICAgIChXZWJDb3JlOjpUZXh0Q2hlY2tpbmdIZWxwZXI6OmZpbmRGaXJzdE1pc3NwZWxsaW5nKToK
KyAgICAgICAgKFdlYkNvcmU6OlRleHRDaGVja2luZ0hlbHBlcjo6ZmluZEZpcnN0TWlzc3BlbGxp
bmdPckJhZEdyYW1tYXIpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENoZWNraW5nSGVscGVyOjpm
aW5kRmlyc3RHcmFtbWFyRGV0YWlsKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDaGVja2luZ0hl
bHBlcjo6ZmluZEZpcnN0QmFkR3JhbW1hcik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Q2hlY2tp
bmdIZWxwZXI6OmlzVW5ncmFtbWF0aWNhbCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Q2hlY2tp
bmdIZWxwZXI6Omd1ZXNzZXNGb3JNaXNzcGVsbGVkT3JVbmdyYW1tYXRpY2FsUmFuZ2UpOgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dENoZWNraW5nSGVscGVyOjptYXJrQWxsTWlzc3BlbGxpbmdzKToK
KyAgICAgICAgKFdlYkNvcmU6OlRleHRDaGVja2luZ0hlbHBlcjo6bWFya0FsbEJhZEdyYW1tYXIp
OgorICAgICAgICAqIGVkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmg6IEFkZGVkLgorCiAyMDEw
LTEwLTI2ICBDaHJpcyBSb2dlcnMgIDxjcm9nZXJzQGdvb2dsZS5jb20+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgS2VubmV0aCBSdXNzZWxsLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9HTlVtYWtlZmls
ZS5hbSBiL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KaW5kZXggOGMyMDRhYTFhZjgyMWMwYjkyMGI3
ODk4NzQ5MTU1NmExMjhiZWZmYS4uMTZkOWQ0MjNiZWYwZTRlZGMyNDgzZGNjMDI0OTQ3YTljODQ5
MDU4ZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQorKysgYi9XZWJDb3JlL0dO
VW1ha2VmaWxlLmFtCkBAIC0xMzUyLDYgKzEzNTIsOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAog
CVdlYkNvcmUvZWRpdGluZy9TcGxpdFRleHROb2RlQ29udGFpbmluZ0VsZW1lbnRDb21tYW5kLmNw
cCBcCiAJV2ViQ29yZS9lZGl0aW5nL1NwbGl0VGV4dE5vZGVDb250YWluaW5nRWxlbWVudENvbW1h
bmQuaCBcCiAJV2ViQ29yZS9lZGl0aW5nL1RleHRBZmZpbml0eS5oIFwKKwlXZWJDb3JlL2VkaXRp
bmcvVGV4dENoZWNraW5nSGVscGVyLmNwcCBcCisJV2ViQ29yZS9lZGl0aW5nL1RleHRDaGVja2lu
Z0hlbHBlci5oIFwKIAlXZWJDb3JlL2VkaXRpbmcvVGV4dEdyYW51bGFyaXR5LmggXAogCVdlYkNv
cmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwIFwKIAlXZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJh
dG9yLmggXApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9XZWJDb3JlL1dlYkNv
cmUuZ3lwaQppbmRleCBmNTI2ZDA3NzhkMzAyMjQ3NjM2ZmUyMzhkZTdkOTA4MGE5NDhlZWFmLi43
OTRmMTY5ZDY0MWY3OGE0ZjY0Y2IwZTBjNWYxMGI4ZGE0MDU5NDI1IDEwMDY0NAotLS0gYS9XZWJD
b3JlL1dlYkNvcmUuZ3lwaQorKysgYi9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMTQzNCw2ICsx
NDM0LDggQEAKICAgICAgICAgICAgICdlZGl0aW5nL1NwbGl0VGV4dE5vZGVDb250YWluaW5nRWxl
bWVudENvbW1hbmQuY3BwJywKICAgICAgICAgICAgICdlZGl0aW5nL1NwbGl0VGV4dE5vZGVDb250
YWluaW5nRWxlbWVudENvbW1hbmQuaCcsCiAgICAgICAgICAgICAnZWRpdGluZy9UZXh0QWZmaW5p
dHkuaCcsCisgICAgICAgICAgICAnZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuY3BwJywKKyAg
ICAgICAgICAgICdlZGl0aW5nL1RleHRDaGVja2luZ0hlbHBlci5oJywKICAgICAgICAgICAgICdl
ZGl0aW5nL1RleHRHcmFudWxhcml0eS5oJywKICAgICAgICAgICAgICdlZGl0aW5nL1RleHRJdGVy
YXRvci5jcHAnLAogICAgICAgICAgICAgJ2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmgnLApkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9XZWJDb3JlLnBybyBiL1dlYkNvcmUvV2ViQ29yZS5wcm8KaW5kZXggOWZi
MmZkZGQwMmNlZTQ2MjcxZjM2Nzg5ODQ1MjNjMmRhYmFiYWI0MS4uOGRiNzc1NDA3MWIzNjk4Mzk5
ZTgyZDg5NDU0ZDVmYjk5Y2ExZWQxOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnBybwor
KysgYi9XZWJDb3JlL1dlYkNvcmUucHJvCkBAIC04MTQsNiArODE0LDcgQEAgU09VUkNFUyArPSBc
CiAgICAgZWRpdGluZy9TcGxpdEVsZW1lbnRDb21tYW5kLmNwcCBcCiAgICAgZWRpdGluZy9TcGxp
dFRleHROb2RlQ29tbWFuZC5jcHAgXAogICAgIGVkaXRpbmcvU3BsaXRUZXh0Tm9kZUNvbnRhaW5p
bmdFbGVtZW50Q29tbWFuZC5jcHAgXAorICAgIGVkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmNw
cCBcCiAgICAgZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwIFwKICAgICBlZGl0aW5nL1R5cGluZ0Nv
bW1hbmQuY3BwIFwKICAgICBlZGl0aW5nL1VubGlua0NvbW1hbmQuY3BwIFwKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2ogYi9XZWJDb3JlL1dlYkNvcmUu
dmNwcm9qL1dlYkNvcmUudmNwcm9qCmluZGV4IDM0YjhjMjAyMTM5ZjhlNzhhYzE4YTA1OGU4NmE4
OWI3OThkMmJjMzIuLmQzNWM1OTRjZTU0MWQ5NDdlNDkyNDFiNDBmYTIzM2RmNTIxYTFhY2QgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKKysrIGIvV2Vi
Q29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagpAQCAtNDc4ODAsNiArNDc4ODAsNjIg
QEAKIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5c
ZWRpdGluZ1xUZXh0Q2hlY2tpbmdIZWxwZXIuY3BwIg0KKwkJCQk+DQorCQkJCTxGaWxlQ29uZmln
dXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWd8V2luMzIiDQorCQkJCQlFeGNsdWRlZEZyb21CdWls
ZD0idHJ1ZSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVy
VG9vbCINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29u
ZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCisJCQkJCUV4Y2x1ZGVkRnJv
bUJ1aWxkPSJ0cnVlIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29t
cGlsZXJUb29sIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZp
bGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1Z19JbnRlcm5hbHxXaW4zMiINCisJCQkJ
CUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlO
YW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlv
bj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1Z19DYWlyb3xXaW4z
MiINCisJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wN
CisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29u
ZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNl
X0NhaXJvfFdpbjMyIg0KKwkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiDQorCQkJCQk+DQor
CQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkvPg0KKwkJ
CQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5h
bWU9IkRlYnVnX0FsbHxXaW4zMiINCisJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIg0KKwkJ
CQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJ
Lz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJ
CQkJUmVsYXRpdmVQYXRoPSIuLlxlZGl0aW5nXFRleHRDaGVja2luZ0hlbHBlci5oIg0KKwkJCQk+
DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cZWRpdGluZ1xU
ZXh0R3JhbnVsYXJpdHkuaCINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCmRpZmYgLS1naXQgYS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDMzNmM3ODYxNWEwYThhYmY0YjZjODY4ODVj
N2JiZmI5YjUwMTMwNGMuLmVhNDMyZDYwMDQwZGZjZDFhZWU1OThhNTViMzAwMDE1Mjk0NWJiZWYg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisr
KyBiL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0zMDUyLDYg
KzMwNTIsOCBAQAogCQlBN0QzQzUyNDBCNTc2QjRCMDAyQ0E0NTAgLyogUGFzdGVib2FyZEhlbHBl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdEM0M1
MjMwQjU3NkI0QjAwMkNBNDUwIC8qIFBhc3RlYm9hcmRIZWxwZXIuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBN0Q2QjM0OTBGNjExMDQ1MDBCNzlG
RDEgLyogV29ya2VyU2NyaXB0TG9hZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBN0Q2QjM0NzBGNjExMDQ1MDBCNzlGRDEgLyogV29ya2VyU2NyaXB0
TG9hZGVyLmggKi87IH07CiAJCUE3RDZCMzRBMEY2MTEwNDUwMEI3OUZEMSAvKiBXb3JrZXJTY3Jp
cHRMb2FkZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQTdENkIzNDgwRjYxMTA0NTAwQjc5RkQxIC8qIFdvcmtlclNjcmlwdExvYWRlci5jcHAgKi87
IH07CisJCUE3REJGOEREMTI3NjkxOUMwMDZCNjAwOCAvKiBUZXh0Q2hlY2tpbmdIZWxwZXIuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdEQkY4REIx
Mjc2OTE5QzAwNkI2MDA4IC8qIFRleHRDaGVja2luZ0hlbHBlci5jcHAgKi87IH07CisJCUE3REJG
OERFMTI3NjkxOUMwMDZCNjAwOCAvKiBUZXh0Q2hlY2tpbmdIZWxwZXIuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3REJGOERDMTI3NjkxOUMwMDZCNjAw
OCAvKiBUZXh0Q2hlY2tpbmdIZWxwZXIuaCAqLzsgfTsKIAkJQTdGMzM4QTMxMUMwRUZDQTAwQTMy
MEE3IC8qIFNoYWRvd0VsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTdGMzM4QTExMUMwRUZDQTAwQTMyMEE3IC8qIFNoYWRvd0VsZW1lbnQu
Y3BwICovOyB9OwogCQlBN0YzMzhBNDExQzBFRkNBMDBBMzIwQTcgLyogU2hhZG93RWxlbWVudC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdGMzM4QTIx
MUMwRUZDQTAwQTMyMEE3IC8qIFNoYWRvd0VsZW1lbnQuaCAqLzsgfTsKIAkJQTgwOUYxNDcwQjcz
NzkzQTAwMkU0RDdGIC8qIFJlbmRlclNWR0dyYWRpZW50U3RvcC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTgwOUYxNDUwQjczNzkzQTAwMkU0RDdGIC8q
IFJlbmRlclNWR0dyYWRpZW50U3RvcC5oICovOyB9OwpAQCAtOTEyMSw2ICs5MTIzLDggQEAKIAkJ
QTdEM0M1MjMwQjU3NkI0QjAwMkNBNDUwIC8qIFBhc3RlYm9hcmRIZWxwZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGFzdGVib2FyZEhlbHBlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlBN0Q2QjM0NzBGNjExMDQ1MDBCNzlGRDEgLyogV29ya2VyU2NyaXB0
TG9hZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdvcmtlclNjcmlwdExv
YWRlci5oOyBwYXRoID0gd29ya2Vycy9Xb3JrZXJTY3JpcHRMb2FkZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQTdENkIzNDgwRjYxMTA0NTAwQjc5RkQxIC8qIFdvcmtlclNjcmlw
dExvYWRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXb3JrZXJT
Y3JpcHRMb2FkZXIuY3BwOyBwYXRoID0gd29ya2Vycy9Xb3JrZXJTY3JpcHRMb2FkZXIuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBN0RCRjhEQjEyNzY5MTlDMDA2QjYwMDggLyog
VGV4dENoZWNraW5nSGVscGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFRleHRDaGVja2luZ0hlbHBlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUE3REJGOERDMTI3NjkxOUMwMDZCNjAwOCAvKiBUZXh0Q2hlY2tpbmdIZWxwZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGV4dENoZWNraW5nSGVscGVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3RjMzOEExMTFDMEVGQ0EwMEEzMjBBNyAvKiBTaGFkb3dF
bGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNoYWRvd0Vs
ZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBN0YzMzhBMjExQzBFRkNB
MDBBMzIwQTcgLyogU2hhZG93RWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBTaGFkb3dFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4MDlG
MTQ1MEI3Mzc5M0EwMDJFNEQ3RiAvKiBSZW5kZXJTVkdHcmFkaWVudFN0b3AuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyU1ZHR3JhZGllbnRTdG9wLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNDUxMiw2ICsxNDUxNiw4IEBACiAJCQkJOTMzMDlEQzcw
OTlFNjQ5MTAwNTZFNTgxIC8qIFNwbGl0VGV4dE5vZGVDb250YWluaW5nRWxlbWVudENvbW1hbmQu
aCAqLywKIAkJCQk5MzMwOURDODA5OUU2NDkxMDA1NkU1ODEgLyogVGV4dEFmZmluaXR5LmggKi8s
CiAJCQkJOTMzMDlEQzkwOTlFNjQ5MTAwNTZFNTgxIC8qIFRleHRHcmFudWxhcml0eS5oICovLAor
CQkJCUE3REJGOERCMTI3NjkxOUMwMDZCNjAwOCAvKiBUZXh0Q2hlY2tpbmdIZWxwZXIuY3BwICov
LAorCQkJCUE3REJGOERDMTI3NjkxOUMwMDZCNjAwOCAvKiBUZXh0Q2hlY2tpbmdIZWxwZXIuaCAq
LywKIAkJCQk5MzMwOURDQzA5OUU2NDkxMDA1NkU1ODEgLyogVGV4dEl0ZXJhdG9yLmNwcCAqLywK
IAkJCQk5MzMwOURDRDA5OUU2NDkxMDA1NkU1ODEgLyogVGV4dEl0ZXJhdG9yLmggKi8sCiAJCQkJ
OTMzMDlEQ0EwOTlFNjQ5MTAwNTZFNTgxIC8qIFR5cGluZ0NvbW1hbmQuY3BwICovLApAQCAtMjA5
MzQsNiArMjA5NDAsNyBAQAogCQkJCUIyQzNEQTM0MEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0Qm91
bmRhcmllcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJDM0RBMzYwRDAwNkMxRDAwRUY2RjI2IC8q
IFRleHRCcmVha0l0ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMkMzREEzODBEMDA2QzFE
MDBFRjZGMjYgLyogVGV4dEJyZWFrSXRlcmF0b3JJbnRlcm5hbElDVS5oIGluIEhlYWRlcnMgKi8s
CisJCQkJQTdEQkY4REUxMjc2OTE5QzAwNkI2MDA4IC8qIFRleHRDaGVja2luZ0hlbHBlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQjJDM0RBM0EwRDAwNkMxRDAwRUY2RjI2IC8qIFRleHRDb2RlYy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQjJDM0RBM0MwRDAwNkMxRDAwRUY2RjI2IC8qIFRleHRDb2Rl
Y0lDVS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJDM0RBM0UwRDAwNkMxRDAwRUY2RjI2IC8qIFRl
eHRDb2RlY0xhdGluMS5oIGluIEhlYWRlcnMgKi8sCkBAIC0yMTIzNSw3ICsyMTI0Miw2IEBACiAJ
CQlpc2EgPSBQQlhQcm9qZWN0OwogCQkJYnVpbGRDb25maWd1cmF0aW9uTGlzdCA9IDE0OUMyODQz
MDg5MDJCMTEwMDhBOUVGQyAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWFByb2pl
Y3QgIldlYkNvcmUiICovOwogCQkJY29tcGF0aWJpbGl0eVZlcnNpb24gPSAiWGNvZGUgMi40IjsK
LQkJCWRldmVsb3BtZW50UmVnaW9uID0gRW5nbGlzaDsKIAkJCWhhc1NjYW5uZWRGb3JFbmNvZGlu
Z3MgPSAxOwogCQkJa25vd25SZWdpb25zID0gKAogCQkJCUVuZ2xpc2gsCkBAIC0yMzU0MCw2ICsy
MzU0Niw3IEBACiAJCQkJQjJBRkZDOTcwRDAwQTVERjAwMzAwNzREIC8qIFRleHRCb3VuZGFyaWVz
Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQjJDM0RBMzcwRDAwNkMxRDAwRUY2RjI2IC8qIFRleHRC
cmVha0l0ZXJhdG9ySUNVLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyQUZGQzk4MEQwMEE1REYw
MDMwMDc0RCAvKiBUZXh0QnJlYWtJdGVyYXRvckludGVybmFsSUNVTWFjLm1tIGluIFNvdXJjZXMg
Ki8sCisJCQkJQTdEQkY4REQxMjc2OTE5QzAwNkI2MDA4IC8qIFRleHRDaGVja2luZ0hlbHBlci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlCMkMzREEzOTBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dENv
ZGVjLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyQzNEQTNCMEQwMDZDMUQwMEVGNkYyNiAvKiBU
ZXh0Q29kZWNJQ1UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjJDM0RBM0QwRDAwNkMxRDAwRUY2
RjI2IC8qIFRleHRDb2RlY0xhdGluMS5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwIGIvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKaW5k
ZXggMmU1ODM4OWE0YjU5OWZmMzFjNWM1ODQ4YjQ4OGRiOWU2MTIxYTBjOC4uMjJjZDdiYTliMTU5
ZThkYWFhNWE5NjRiYzI1NGIyNmU3ODRlMWVkNCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9lZGl0aW5n
L0VkaXRvci5jcHAKKysrIGIvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKQEAgLTYyLDYgKzYy
LDcgQEAKICNpbmNsdWRlICJOb2RlTGlzdC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRl
ICJQYXN0ZWJvYXJkLmgiCisjaW5jbHVkZSAiVGV4dENoZWNraW5nSGVscGVyLmgiCiAjaW5jbHVk
ZSAiUmVtb3ZlRm9ybWF0Q29tbWFuZC5oIgogI2luY2x1ZGUgIlJlbmRlckJsb2NrLmgiCiAjaW5j
bHVkZSAiUmVuZGVyUGFydC5oIgpAQCAtMTY0NiwzMjggKzE2NDcsNiBAQCB2b2lkIEVkaXRvcjo6
bGVhcm5TcGVsbGluZygpCiAgICAgY2xpZW50KCktPmxlYXJuV29yZCh0ZXh0KTsKIH0KIAotc3Rh
dGljIFN0cmluZyBmaW5kRmlyc3RNaXNzcGVsbGluZ0luUmFuZ2UoRWRpdG9yQ2xpZW50KiBjbGll
bnQsIFJhbmdlKiBzZWFyY2hSYW5nZSwgaW50JiBmaXJzdE1pc3NwZWxsaW5nT2Zmc2V0LCBib29s
IG1hcmtBbGwsIFJlZlB0cjxSYW5nZT4mIGZpcnN0TWlzc3BlbGxpbmdSYW5nZSkKLXsKLSAgICBB
U1NFUlRfQVJHKGNsaWVudCwgY2xpZW50KTsKLSAgICBBU1NFUlRfQVJHKHNlYXJjaFJhbmdlLCBz
ZWFyY2hSYW5nZSk7Ci0gICAgCi0gICAgV29yZEF3YXJlSXRlcmF0b3IgaXQoc2VhcmNoUmFuZ2Up
OwotICAgIGZpcnN0TWlzc3BlbGxpbmdPZmZzZXQgPSAwOwotICAgIAotICAgIFN0cmluZyBmaXJz
dE1pc3NwZWxsaW5nOwotICAgIGludCBjdXJyZW50Q2h1bmtPZmZzZXQgPSAwOwotCi0gICAgd2hp
bGUgKCFpdC5hdEVuZCgpKSB7Ci0gICAgICAgIGNvbnN0IFVDaGFyKiBjaGFycyA9IGl0LmNoYXJh
Y3RlcnMoKTsKLSAgICAgICAgaW50IGxlbiA9IGl0Lmxlbmd0aCgpOwotICAgICAgICAKLSAgICAg
ICAgLy8gU2tpcCBzb21lIHdvcmsgZm9yIG9uZS1zcGFjZS1jaGFyIGh1bmtzCi0gICAgICAgIGlm
ICghKGxlbiA9PSAxICYmIGNoYXJzWzBdID09ICcgJykpIHsKLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgaW50IG1pc3NwZWxsaW5nTG9jYXRpb24gPSAtMTsKLSAgICAgICAgICAgIGludCBtaXNz
cGVsbGluZ0xlbmd0aCA9IDA7Ci0gICAgICAgICAgICBjbGllbnQtPmNoZWNrU3BlbGxpbmdPZlN0
cmluZyhjaGFycywgbGVuLCAmbWlzc3BlbGxpbmdMb2NhdGlvbiwgJm1pc3NwZWxsaW5nTGVuZ3Ro
KTsKLQotICAgICAgICAgICAgLy8gNTQ5MDYyNyBzaG93cyB0aGF0IHRoZXJlIHdhcyBzb21lIGNv
ZGUgcGF0aCBoZXJlIHdoZXJlIHRoZSBTdHJpbmcgY29uc3RydWN0b3IgYmVsb3cgY3Jhc2hlcy4K
LSAgICAgICAgICAgIC8vIFdlIGRvbid0IGtub3cgZXhhY3RseSB3aGF0IGNvbWJpbmF0aW9uIG9m
IGJhZCBpbnB1dCBjYXVzZWQgdGhpcywgc28gd2UncmUgbWFraW5nIHRoaXMgbXVjaAotICAgICAg
ICAgICAgLy8gbW9yZSByb2J1c3QgYWdhaW5zdCBiYWQgaW5wdXQgb24gcmVsZWFzZSBidWlsZHMu
Ci0gICAgICAgICAgICBBU1NFUlQobWlzc3BlbGxpbmdMZW5ndGggPj0gMCk7Ci0gICAgICAgICAg
ICBBU1NFUlQobWlzc3BlbGxpbmdMb2NhdGlvbiA+PSAtMSk7Ci0gICAgICAgICAgICBBU1NFUlQo
IW1pc3NwZWxsaW5nTGVuZ3RoIHx8IG1pc3NwZWxsaW5nTG9jYXRpb24gPj0gMCk7Ci0gICAgICAg
ICAgICBBU1NFUlQobWlzc3BlbGxpbmdMb2NhdGlvbiA8IGxlbik7Ci0gICAgICAgICAgICBBU1NF
UlQobWlzc3BlbGxpbmdMZW5ndGggPD0gbGVuKTsKLSAgICAgICAgICAgIEFTU0VSVChtaXNzcGVs
bGluZ0xvY2F0aW9uICsgbWlzc3BlbGxpbmdMZW5ndGggPD0gbGVuKTsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgaWYgKG1pc3NwZWxsaW5nTG9jYXRpb24gPj0gMCAmJiBtaXNzcGVsbGluZ0xl
bmd0aCA+IDAgJiYgbWlzc3BlbGxpbmdMb2NhdGlvbiA8IGxlbiAmJiBtaXNzcGVsbGluZ0xlbmd0
aCA8PSBsZW4gJiYgbWlzc3BlbGxpbmdMb2NhdGlvbiArIG1pc3NwZWxsaW5nTGVuZ3RoIDw9IGxl
bikgewotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIC8vIENvbXB1dGUgcmFuZ2Ug
b2YgbWlzc3BlbGxlZCB3b3JkCi0gICAgICAgICAgICAgICAgUmVmUHRyPFJhbmdlPiBtaXNzcGVs
bGluZ1JhbmdlID0gVGV4dEl0ZXJhdG9yOjpzdWJyYW5nZShzZWFyY2hSYW5nZSwgY3VycmVudENo
dW5rT2Zmc2V0ICsgbWlzc3BlbGxpbmdMb2NhdGlvbiwgbWlzc3BlbGxpbmdMZW5ndGgpOwotCi0g
ICAgICAgICAgICAgICAgLy8gUmVtZW1iZXIgZmlyc3QtZW5jb3VudGVyZWQgbWlzc3BlbGxpbmcg
YW5kIGl0cyBvZmZzZXQuCi0gICAgICAgICAgICAgICAgaWYgKCFmaXJzdE1pc3NwZWxsaW5nKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGZpcnN0TWlzc3BlbGxpbmdPZmZzZXQgPSBjdXJyZW50Q2h1
bmtPZmZzZXQgKyBtaXNzcGVsbGluZ0xvY2F0aW9uOwotICAgICAgICAgICAgICAgICAgICBmaXJz
dE1pc3NwZWxsaW5nID0gU3RyaW5nKGNoYXJzICsgbWlzc3BlbGxpbmdMb2NhdGlvbiwgbWlzc3Bl
bGxpbmdMZW5ndGgpOwotICAgICAgICAgICAgICAgICAgICBmaXJzdE1pc3NwZWxsaW5nUmFuZ2Ug
PSBtaXNzcGVsbGluZ1JhbmdlOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAg
IC8vIFN0b3JlIG1hcmtlciBmb3IgbWlzc3BlbGxlZCB3b3JkLgotICAgICAgICAgICAgICAgIEV4
Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgICAgICAgICAgICAgIG1pc3NwZWxsaW5nUmFuZ2UtPnN0
YXJ0Q29udGFpbmVyKGVjKS0+ZG9jdW1lbnQoKS0+bWFya2VycygpLT5hZGRNYXJrZXIobWlzc3Bl
bGxpbmdSYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nKTsKLSAgICAgICAgICAg
ICAgICBBU1NFUlQoIWVjKTsKLQotICAgICAgICAgICAgICAgIC8vIEJhaWwgb3V0IGlmIHdlJ3Jl
IG1hcmtpbmcgb25seSB0aGUgZmlyc3QgbWlzc3BlbGxpbmcsIGFuZCBub3QgYWxsIGluc3RhbmNl
cy4KLSAgICAgICAgICAgICAgICBpZiAoIW1hcmtBbGwpCi0gICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBjdXJyZW50
Q2h1bmtPZmZzZXQgKz0gbGVuOwotICAgICAgICBpdC5hZHZhbmNlKCk7Ci0gICAgfQotICAgIAot
ICAgIHJldHVybiBmaXJzdE1pc3NwZWxsaW5nOwotfQotCi0jaWZuZGVmIEJVSUxESU5HX09OX1RJ
R0VSCi0KLXN0YXRpYyBQYXNzUmVmUHRyPFJhbmdlPiBwYXJhZ3JhcGhBbGlnbmVkUmFuZ2VGb3JS
YW5nZShSYW5nZSogYXJiaXRyYXJ5UmFuZ2UsIGludCYgb2Zmc2V0SW50b1BhcmFncmFwaEFsaWdu
ZWRSYW5nZSwgU3RyaW5nJiBwYXJhZ3JhcGhTdHJpbmcpCi17Ci0gICAgQVNTRVJUX0FSRyhhcmJp
dHJhcnlSYW5nZSwgYXJiaXRyYXJ5UmFuZ2UpOwotICAgIAotICAgIEV4Y2VwdGlvbkNvZGUgZWMg
PSAwOwotICAgIAotICAgIC8vIEV4cGFuZCByYW5nZSB0byBwYXJhZ3JhcGggYm91bmRhcmllcwot
ICAgIFJlZlB0cjxSYW5nZT4gcGFyYWdyYXBoUmFuZ2UgPSBhcmJpdHJhcnlSYW5nZS0+Y2xvbmVS
YW5nZShlYyk7Ci0gICAgc2V0U3RhcnQocGFyYWdyYXBoUmFuZ2UuZ2V0KCksIHN0YXJ0T2ZQYXJh
Z3JhcGgoYXJiaXRyYXJ5UmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSkpOwotICAgIHNldEVuZChwYXJh
Z3JhcGhSYW5nZS5nZXQoKSwgZW5kT2ZQYXJhZ3JhcGgoYXJiaXRyYXJ5UmFuZ2UtPmVuZFBvc2l0
aW9uKCkpKTsKLSAgICAKLSAgICAvLyBDb21wdXRlIG9mZnNldCBmcm9tIHN0YXJ0IG9mIGV4cGFu
ZGVkIHJhbmdlIHRvIHN0YXJ0IG9mIG9yaWdpbmFsIHJhbmdlCi0gICAgUmVmUHRyPFJhbmdlPiBv
ZmZzZXRBc1JhbmdlID0gUmFuZ2U6OmNyZWF0ZShwYXJhZ3JhcGhSYW5nZS0+c3RhcnRDb250YWlu
ZXIoZWMpLT5kb2N1bWVudCgpLCBwYXJhZ3JhcGhSYW5nZS0+c3RhcnRQb3NpdGlvbigpLCBhcmJp
dHJhcnlSYW5nZS0+c3RhcnRQb3NpdGlvbigpKTsKLSAgICBvZmZzZXRJbnRvUGFyYWdyYXBoQWxp
Z25lZFJhbmdlID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChvZmZzZXRBc1JhbmdlLmdldCgp
KTsKLSAgICAKLSAgICAvLyBGaWxsIGluIG91dCBwYXJhbWV0ZXIgd2l0aCBzdHJpbmcgcmVwcmVz
ZW50aW5nIGVudGlyZSBwYXJhZ3JhcGggcmFuZ2UuCi0gICAgLy8gU29tZWRheSB3ZSBtaWdodCBo
YXZlIGEgY2FsbGVyIHRoYXQgZG9lc24ndCB1c2UgdGhpcywgYnV0IGZvciBub3cgYWxsIGNhbGxl
cnMgZG8uCi0gICAgcGFyYWdyYXBoU3RyaW5nID0gcGxhaW5UZXh0KHBhcmFncmFwaFJhbmdlLmdl
dCgpKTsKLQotICAgIHJldHVybiBwYXJhZ3JhcGhSYW5nZTsKLX0KLQotc3RhdGljIGludCBmaW5k
Rmlyc3RHcmFtbWFyRGV0YWlsSW5SYW5nZShjb25zdCBWZWN0b3I8R3JhbW1hckRldGFpbD4mIGdy
YW1tYXJEZXRhaWxzLCBpbnQgYmFkR3JhbW1hclBocmFzZUxvY2F0aW9uLCBpbnQgLypiYWRHcmFt
bWFyUGhyYXNlTGVuZ3RoKi8sIFJhbmdlICpzZWFyY2hSYW5nZSwgaW50IHN0YXJ0T2Zmc2V0LCBp
bnQgZW5kT2Zmc2V0LCBib29sIG1hcmtBbGwpCi17Ci0gICAgLy8gRm91bmQgc29tZSBiYWQgZ3Jh
bW1hci4gRmluZCB0aGUgZWFybGllc3QgZGV0YWlsIHJhbmdlIHRoYXQgc3RhcnRzIGluIG91ciBz
ZWFyY2ggcmFuZ2UgKGlmIGFueSkuCi0gICAgLy8gT3B0aW9uYWxseSBhZGQgYSBEb2N1bWVudE1h
cmtlciBmb3IgZWFjaCBkZXRhaWwgaW4gdGhlIHJhbmdlLgotICAgIGludCBlYXJsaWVzdERldGFp
bExvY2F0aW9uU29GYXIgPSAtMTsKLSAgICBpbnQgZWFybGllc3REZXRhaWxJbmRleCA9IC0xOwot
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBncmFtbWFyRGV0YWlscy5zaXplKCk7IGkrKykg
ewotICAgICAgICBjb25zdCBHcmFtbWFyRGV0YWlsKiBkZXRhaWwgPSAmZ3JhbW1hckRldGFpbHNb
aV07Ci0gICAgICAgIEFTU0VSVChkZXRhaWwtPmxlbmd0aCA+IDAgJiYgZGV0YWlsLT5sb2NhdGlv
biA+PSAwKTsKLSAgICAgICAgCi0gICAgICAgIGludCBkZXRhaWxTdGFydE9mZnNldEluUGFyYWdy
YXBoID0gYmFkR3JhbW1hclBocmFzZUxvY2F0aW9uICsgZGV0YWlsLT5sb2NhdGlvbjsKLSAgICAg
ICAgCi0gICAgICAgIC8vIFNraXAgdGhpcyBkZXRhaWwgaWYgaXQgc3RhcnRzIGJlZm9yZSB0aGUg
b3JpZ2luYWwgc2VhcmNoIHJhbmdlCi0gICAgICAgIGlmIChkZXRhaWxTdGFydE9mZnNldEluUGFy
YWdyYXBoIDwgc3RhcnRPZmZzZXQpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgCi0g
ICAgICAgIC8vIFNraXAgdGhpcyBkZXRhaWwgaWYgaXQgc3RhcnRzIGFmdGVyIHRoZSBvcmlnaW5h
bCBzZWFyY2ggcmFuZ2UKLSAgICAgICAgaWYgKGRldGFpbFN0YXJ0T2Zmc2V0SW5QYXJhZ3JhcGgg
Pj0gZW5kT2Zmc2V0KQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIAotICAgICAgICBp
ZiAobWFya0FsbCkgewotICAgICAgICAgICAgUmVmUHRyPFJhbmdlPiBiYWRHcmFtbWFyUmFuZ2Ug
PSBUZXh0SXRlcmF0b3I6OnN1YnJhbmdlKHNlYXJjaFJhbmdlLCBiYWRHcmFtbWFyUGhyYXNlTG9j
YXRpb24gLSBzdGFydE9mZnNldCArIGRldGFpbC0+bG9jYXRpb24sIGRldGFpbC0+bGVuZ3RoKTsK
LSAgICAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgICAgICAgICAgYmFkR3JhbW1h
clJhbmdlLT5zdGFydENvbnRhaW5lcihlYyktPmRvY3VtZW50KCktPm1hcmtlcnMoKS0+YWRkTWFy
a2VyKGJhZEdyYW1tYXJSYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OkdyYW1tYXIsIGRldGFp
bC0+dXNlckRlc2NyaXB0aW9uKTsKLSAgICAgICAgICAgIEFTU0VSVCghZWMpOwotICAgICAgICB9
Ci0gICAgICAgIAotICAgICAgICAvLyBSZW1lbWJlciB0aGlzIGRldGFpbCBvbmx5IGlmIGl0J3Mg
ZWFybGllciB0aGFuIG91ciBjdXJyZW50IGNhbmRpZGF0ZSAodGhlIGRldGFpbHMgYXJlbid0IGlu
IGEgZ3VhcmFudGVlZCBvcmRlcikKLSAgICAgICAgaWYgKGVhcmxpZXN0RGV0YWlsSW5kZXggPCAw
IHx8IGVhcmxpZXN0RGV0YWlsTG9jYXRpb25Tb0ZhciA+IGRldGFpbC0+bG9jYXRpb24pIHsKLSAg
ICAgICAgICAgIGVhcmxpZXN0RGV0YWlsSW5kZXggPSBpOwotICAgICAgICAgICAgZWFybGllc3RE
ZXRhaWxMb2NhdGlvblNvRmFyID0gZGV0YWlsLT5sb2NhdGlvbjsKLSAgICAgICAgfQotICAgIH0K
LSAgICAKLSAgICByZXR1cm4gZWFybGllc3REZXRhaWxJbmRleDsKLX0KLSAgICAKLXN0YXRpYyBT
dHJpbmcgZmluZEZpcnN0QmFkR3JhbW1hckluUmFuZ2UoRWRpdG9yQ2xpZW50KiBjbGllbnQsIFJh
bmdlKiBzZWFyY2hSYW5nZSwgR3JhbW1hckRldGFpbCYgb3V0R3JhbW1hckRldGFpbCwgaW50JiBv
dXRHcmFtbWFyUGhyYXNlT2Zmc2V0LCBib29sIG1hcmtBbGwpCi17Ci0gICAgQVNTRVJUX0FSRyhj
bGllbnQsIGNsaWVudCk7Ci0gICAgQVNTRVJUX0FSRyhzZWFyY2hSYW5nZSwgc2VhcmNoUmFuZ2Up
OwotICAgIAotICAgIC8vIEluaXRpYWxpemUgb3V0IHBhcmFtZXRlcnM7IHRoZXNlIHdpbGwgYmUg
dXBkYXRlZCBpZiB3ZSBmaW5kIHNvbWV0aGluZyB0byByZXR1cm4uCi0gICAgb3V0R3JhbW1hckRl
dGFpbC5sb2NhdGlvbiA9IC0xOwotICAgIG91dEdyYW1tYXJEZXRhaWwubGVuZ3RoID0gMDsKLSAg
ICBvdXRHcmFtbWFyRGV0YWlsLmd1ZXNzZXMuY2xlYXIoKTsKLSAgICBvdXRHcmFtbWFyRGV0YWls
LnVzZXJEZXNjcmlwdGlvbiA9ICIiOwotICAgIG91dEdyYW1tYXJQaHJhc2VPZmZzZXQgPSAwOwot
ICAgIAotICAgIFN0cmluZyBmaXJzdEJhZEdyYW1tYXJQaHJhc2U7Ci0KLSAgICAvLyBFeHBhbmQg
dGhlIHNlYXJjaCByYW5nZSB0byBlbmNvbXBhc3MgZW50aXJlIHBhcmFncmFwaHMsIHNpbmNlIGdy
YW1tYXIgY2hlY2tpbmcgbmVlZHMgdGhhdCBtdWNoIGNvbnRleHQuCi0gICAgLy8gRGV0ZXJtaW5l
IHRoZSBjaGFyYWN0ZXIgb2Zmc2V0IGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBwYXJhZ3JhcGggdG8g
dGhlIHN0YXJ0IG9mIHRoZSBvcmlnaW5hbCBzZWFyY2ggcmFuZ2UsCi0gICAgLy8gc2luY2Ugd2Ug
d2lsbCB3YW50IHRvIGlnbm9yZSByZXN1bHRzIGluIHRoaXMgYXJlYS4KLSAgICBpbnQgc2VhcmNo
UmFuZ2VTdGFydE9mZnNldDsKLSAgICBTdHJpbmcgcGFyYWdyYXBoU3RyaW5nOwotICAgIFJlZlB0
cjxSYW5nZT4gcGFyYWdyYXBoUmFuZ2UgPSBwYXJhZ3JhcGhBbGlnbmVkUmFuZ2VGb3JSYW5nZShz
ZWFyY2hSYW5nZSwgc2VhcmNoUmFuZ2VTdGFydE9mZnNldCwgcGFyYWdyYXBoU3RyaW5nKTsKLSAg
ICAgICAgCi0gICAgLy8gRGV0ZXJtaW5lIHRoZSBjaGFyYWN0ZXIgb2Zmc2V0IGZyb20gdGhlIHN0
YXJ0IG9mIHRoZSBwYXJhZ3JhcGggdG8gdGhlIGVuZCBvZiB0aGUgb3JpZ2luYWwgc2VhcmNoIHJh
bmdlLCAKLSAgICAvLyBzaW5jZSB3ZSB3aWxsIHdhbnQgdG8gaWdub3JlIHJlc3VsdHMgaW4gdGhp
cyBhcmVhIGFsc28uCi0gICAgaW50IHNlYXJjaFJhbmdlRW5kT2Zmc2V0ID0gc2VhcmNoUmFuZ2VT
dGFydE9mZnNldCArIFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgoc2VhcmNoUmFuZ2UpOwotICAg
ICAgICAKLSAgICAvLyBTdGFydCBjaGVja2luZyBmcm9tIGJlZ2lubmluZyBvZiBwYXJhZ3JhcGgs
IGJ1dCBza2lwIHBhc3QgcmVzdWx0cyB0aGF0IG9jY3VyIGJlZm9yZSB0aGUgc3RhcnQgb2YgdGhl
IG9yaWdpbmFsIHNlYXJjaCByYW5nZS4KLSAgICBpbnQgc3RhcnRPZmZzZXQgPSAwOwotICAgIHdo
aWxlIChzdGFydE9mZnNldCA8IHNlYXJjaFJhbmdlRW5kT2Zmc2V0KSB7Ci0gICAgICAgIFZlY3Rv
cjxHcmFtbWFyRGV0YWlsPiBncmFtbWFyRGV0YWlsczsKLSAgICAgICAgaW50IGJhZEdyYW1tYXJQ
aHJhc2VMb2NhdGlvbiA9IC0xOwotICAgICAgICBpbnQgYmFkR3JhbW1hclBocmFzZUxlbmd0aCA9
IDA7Ci0gICAgICAgIGNsaWVudC0+Y2hlY2tHcmFtbWFyT2ZTdHJpbmcocGFyYWdyYXBoU3RyaW5n
LmNoYXJhY3RlcnMoKSArIHN0YXJ0T2Zmc2V0LCBwYXJhZ3JhcGhTdHJpbmcubGVuZ3RoKCkgLSBz
dGFydE9mZnNldCwgZ3JhbW1hckRldGFpbHMsICZiYWRHcmFtbWFyUGhyYXNlTG9jYXRpb24sICZi
YWRHcmFtbWFyUGhyYXNlTGVuZ3RoKTsKLSAgICAgICAgCi0gICAgICAgIGlmICghYmFkR3JhbW1h
clBocmFzZUxlbmd0aCkgewotICAgICAgICAgICAgQVNTRVJUKGJhZEdyYW1tYXJQaHJhc2VMb2Nh
dGlvbiA9PSAtMSk7Ci0gICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBBU1NFUlQoYmFkR3JhbW1hclBocmFzZUxvY2F0aW9uID49IDApOwotICAgICAgICBi
YWRHcmFtbWFyUGhyYXNlTG9jYXRpb24gKz0gc3RhcnRPZmZzZXQ7Ci0KLSAgICAgICAgCi0gICAg
ICAgIC8vIEZvdW5kIHNvbWUgYmFkIGdyYW1tYXIuIEZpbmQgdGhlIGVhcmxpZXN0IGRldGFpbCBy
YW5nZSB0aGF0IHN0YXJ0cyBpbiBvdXIgc2VhcmNoIHJhbmdlIChpZiBhbnkpLgotICAgICAgICBp
bnQgYmFkR3JhbW1hckluZGV4ID0gZmluZEZpcnN0R3JhbW1hckRldGFpbEluUmFuZ2UoZ3JhbW1h
ckRldGFpbHMsIGJhZEdyYW1tYXJQaHJhc2VMb2NhdGlvbiwgYmFkR3JhbW1hclBocmFzZUxlbmd0
aCwgc2VhcmNoUmFuZ2UsIHNlYXJjaFJhbmdlU3RhcnRPZmZzZXQsIHNlYXJjaFJhbmdlRW5kT2Zm
c2V0LCBtYXJrQWxsKTsKLSAgICAgICAgaWYgKGJhZEdyYW1tYXJJbmRleCA+PSAwKSB7Ci0gICAg
ICAgICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGJhZEdyYW1tYXJJbmRleCkgPCBn
cmFtbWFyRGV0YWlscy5zaXplKCkpOwotICAgICAgICAgICAgb3V0R3JhbW1hckRldGFpbCA9IGdy
YW1tYXJEZXRhaWxzW2JhZEdyYW1tYXJJbmRleF07Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBJ
ZiB3ZSBmb3VuZCBhIGRldGFpbCBpbiByYW5nZSwgdGhlbiB3ZSBoYXZlIGZvdW5kIHRoZSBmaXJz
dCBiYWQgcGhyYXNlICh1bmxlc3Mgd2UgZm91bmQgb25lIGVhcmxpZXIgYnV0Ci0gICAgICAgIC8v
IGtlcHQgZ29pbmcgc28gd2UgY291bGQgbWFyayBhbGwgaW5zdGFuY2VzKS4KLSAgICAgICAgaWYg
KGJhZEdyYW1tYXJJbmRleCA+PSAwICYmIGZpcnN0QmFkR3JhbW1hclBocmFzZS5pc0VtcHR5KCkp
IHsKLSAgICAgICAgICAgIG91dEdyYW1tYXJQaHJhc2VPZmZzZXQgPSBiYWRHcmFtbWFyUGhyYXNl
TG9jYXRpb24gLSBzZWFyY2hSYW5nZVN0YXJ0T2Zmc2V0OwotICAgICAgICAgICAgZmlyc3RCYWRH
cmFtbWFyUGhyYXNlID0gcGFyYWdyYXBoU3RyaW5nLnN1YnN0cmluZyhiYWRHcmFtbWFyUGhyYXNl
TG9jYXRpb24sIGJhZEdyYW1tYXJQaHJhc2VMZW5ndGgpOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICAvLyBGb3VuZCBvbmUuIFdlJ3JlIGRvbmUgbm93LCB1bmxlc3Mgd2UncmUgbWFya2luZyBl
YWNoIGluc3RhbmNlLgotICAgICAgICAgICAgaWYgKCFtYXJrQWxsKQotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gVGhlc2UgcmVzdWx0cyB3ZXJlIGFsbCBi
ZXR3ZWVuIHRoZSBzdGFydCBvZiB0aGUgcGFyYWdyYXBoIGFuZCB0aGUgc3RhcnQgb2YgdGhlIHNl
YXJjaCByYW5nZTsgbG9vawotICAgICAgICAvLyBiZXlvbmQgdGhpcyBwaHJhc2UuCi0gICAgICAg
IHN0YXJ0T2Zmc2V0ID0gYmFkR3JhbW1hclBocmFzZUxvY2F0aW9uICsgYmFkR3JhbW1hclBocmFz
ZUxlbmd0aDsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGZpcnN0QmFkR3JhbW1hclBocmFzZTsK
LX0KLSAgICAKLSNlbmRpZiAvKiBub3QgQlVJTERJTkdfT05fVElHRVIgKi8KLQotI2lmIFBMQVRG
T1JNKE1BQykgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxE
SU5HX09OX0xFT1BBUkQpCi0KLXN0YXRpYyBTdHJpbmcgZmluZEZpcnN0TWlzc3BlbGxpbmdPckJh
ZEdyYW1tYXJJblJhbmdlKEVkaXRvckNsaWVudCogY2xpZW50LCBSYW5nZSogc2VhcmNoUmFuZ2Us
IGJvb2wgY2hlY2tHcmFtbWFyLCBib29sJiBvdXRJc1NwZWxsaW5nLCBpbnQmIG91dEZpcnN0Rm91
bmRPZmZzZXQsIEdyYW1tYXJEZXRhaWwmIG91dEdyYW1tYXJEZXRhaWwpCi17Ci0gICAgQVNTRVJU
X0FSRyhjbGllbnQsIGNsaWVudCk7Ci0gICAgQVNTRVJUX0FSRyhzZWFyY2hSYW5nZSwgc2VhcmNo
UmFuZ2UpOwotICAgIAotICAgIFN0cmluZyBmaXJzdEZvdW5kSXRlbTsKLSAgICBTdHJpbmcgbWlz
c3BlbGxlZFdvcmQ7Ci0gICAgU3RyaW5nIGJhZEdyYW1tYXJQaHJhc2U7Ci0gICAgRXhjZXB0aW9u
Q29kZSBlYyA9IDA7Ci0gICAgCi0gICAgLy8gSW5pdGlhbGl6ZSBvdXQgcGFyYW1ldGVyczsgdGhl
c2Ugd2lsbCBiZSB1cGRhdGVkIGlmIHdlIGZpbmQgc29tZXRoaW5nIHRvIHJldHVybi4KLSAgICBv
dXRJc1NwZWxsaW5nID0gdHJ1ZTsKLSAgICBvdXRGaXJzdEZvdW5kT2Zmc2V0ID0gMDsKLSAgICBv
dXRHcmFtbWFyRGV0YWlsLmxvY2F0aW9uID0gLTE7Ci0gICAgb3V0R3JhbW1hckRldGFpbC5sZW5n
dGggPSAwOwotICAgIG91dEdyYW1tYXJEZXRhaWwuZ3Vlc3Nlcy5jbGVhcigpOwotICAgIG91dEdy
YW1tYXJEZXRhaWwudXNlckRlc2NyaXB0aW9uID0gIiI7Ci0gICAgCi0gICAgLy8gRXhwYW5kIHRo
ZSBzZWFyY2ggcmFuZ2UgdG8gZW5jb21wYXNzIGVudGlyZSBwYXJhZ3JhcGhzLCBzaW5jZSB0ZXh0
IGNoZWNraW5nIG5lZWRzIHRoYXQgbXVjaCBjb250ZXh0LgotICAgIC8vIERldGVybWluZSB0aGUg
Y2hhcmFjdGVyIG9mZnNldCBmcm9tIHRoZSBzdGFydCBvZiB0aGUgcGFyYWdyYXBoIHRvIHRoZSBz
dGFydCBvZiB0aGUgb3JpZ2luYWwgc2VhcmNoIHJhbmdlLAotICAgIC8vIHNpbmNlIHdlIHdpbGwg
d2FudCB0byBpZ25vcmUgcmVzdWx0cyBpbiB0aGlzIGFyZWEuCi0gICAgUmVmUHRyPFJhbmdlPiBw
YXJhZ3JhcGhSYW5nZSA9IHNlYXJjaFJhbmdlLT5jbG9uZVJhbmdlKGVjKTsKLSAgICBzZXRTdGFy
dChwYXJhZ3JhcGhSYW5nZS5nZXQoKSwgc3RhcnRPZlBhcmFncmFwaChzZWFyY2hSYW5nZS0+c3Rh
cnRQb3NpdGlvbigpKSk7Ci0gICAgaW50IHRvdGFsUmFuZ2VMZW5ndGggPSBUZXh0SXRlcmF0b3I6
OnJhbmdlTGVuZ3RoKHBhcmFncmFwaFJhbmdlLmdldCgpKTsKLSAgICBzZXRFbmQocGFyYWdyYXBo
UmFuZ2UuZ2V0KCksIGVuZE9mUGFyYWdyYXBoKHNlYXJjaFJhbmdlLT5zdGFydFBvc2l0aW9uKCkp
KTsKLSAgICAKLSAgICBSZWZQdHI8UmFuZ2U+IG9mZnNldEFzUmFuZ2UgPSBSYW5nZTo6Y3JlYXRl
KHBhcmFncmFwaFJhbmdlLT5zdGFydENvbnRhaW5lcihlYyktPmRvY3VtZW50KCksIHBhcmFncmFw
aFJhbmdlLT5zdGFydFBvc2l0aW9uKCksIHNlYXJjaFJhbmdlLT5zdGFydFBvc2l0aW9uKCkpOwot
ICAgIGludCBzZWFyY2hSYW5nZVN0YXJ0T2Zmc2V0ID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0
aChvZmZzZXRBc1JhbmdlLmdldCgpKTsKLSAgICBpbnQgdG90YWxMZW5ndGhQcm9jZXNzZWQgPSAw
OwotICAgIAotICAgIGJvb2wgZmlyc3RJdGVyYXRpb24gPSB0cnVlOwotICAgIGJvb2wgbGFzdEl0
ZXJhdGlvbiA9IGZhbHNlOwotICAgIHdoaWxlICh0b3RhbExlbmd0aFByb2Nlc3NlZCA8IHRvdGFs
UmFuZ2VMZW5ndGgpIHsKLSAgICAgICAgLy8gSXRlcmF0ZSB0aHJvdWdoIHRoZSBzZWFyY2ggcmFu
Z2UgYnkgcGFyYWdyYXBocywgY2hlY2tpbmcgZWFjaCBvbmUgZm9yIHNwZWxsaW5nIGFuZCBncmFt
bWFyLgotICAgICAgICBpbnQgY3VycmVudExlbmd0aCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5n
dGgocGFyYWdyYXBoUmFuZ2UuZ2V0KCkpOwotICAgICAgICBpbnQgY3VycmVudFN0YXJ0T2Zmc2V0
ID0gZmlyc3RJdGVyYXRpb24gPyBzZWFyY2hSYW5nZVN0YXJ0T2Zmc2V0IDogMDsKLSAgICAgICAg
aW50IGN1cnJlbnRFbmRPZmZzZXQgPSBjdXJyZW50TGVuZ3RoOwotICAgICAgICBpZiAoaW5TYW1l
UGFyYWdyYXBoKHBhcmFncmFwaFJhbmdlLT5zdGFydFBvc2l0aW9uKCksIHNlYXJjaFJhbmdlLT5l
bmRQb3NpdGlvbigpKSkgewotICAgICAgICAgICAgLy8gRGV0ZXJtaW5lIHRoZSBjaGFyYWN0ZXIg
b2Zmc2V0IGZyb20gdGhlIGVuZCBvZiB0aGUgb3JpZ2luYWwgc2VhcmNoIHJhbmdlIHRvIHRoZSBl
bmQgb2YgdGhlIHBhcmFncmFwaCwKLSAgICAgICAgICAgIC8vIHNpbmNlIHdlIHdpbGwgd2FudCB0
byBpZ25vcmUgcmVzdWx0cyBpbiB0aGlzIGFyZWEuCi0gICAgICAgICAgICBSZWZQdHI8UmFuZ2U+
IGVuZE9mZnNldEFzUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKHBhcmFncmFwaFJhbmdlLT5zdGFydENv
bnRhaW5lcihlYyktPmRvY3VtZW50KCksIHBhcmFncmFwaFJhbmdlLT5zdGFydFBvc2l0aW9uKCks
IHNlYXJjaFJhbmdlLT5lbmRQb3NpdGlvbigpKTsKLSAgICAgICAgICAgIGN1cnJlbnRFbmRPZmZz
ZXQgPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKGVuZE9mZnNldEFzUmFuZ2UuZ2V0KCkpOwot
ICAgICAgICAgICAgbGFzdEl0ZXJhdGlvbiA9IHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYg
KGN1cnJlbnRTdGFydE9mZnNldCA8IGN1cnJlbnRFbmRPZmZzZXQpIHsKLSAgICAgICAgICAgIFN0
cmluZyBwYXJhZ3JhcGhTdHJpbmcgPSBwbGFpblRleHQocGFyYWdyYXBoUmFuZ2UuZ2V0KCkpOwot
ICAgICAgICAgICAgaWYgKHBhcmFncmFwaFN0cmluZy5sZW5ndGgoKSA+IDApIHsKLSAgICAgICAg
ICAgICAgICBib29sIGZvdW5kR3JhbW1hciA9IGZhbHNlOwotICAgICAgICAgICAgICAgIGludCBz
cGVsbGluZ0xvY2F0aW9uID0gMDsKLSAgICAgICAgICAgICAgICBpbnQgZ3JhbW1hclBocmFzZUxv
Y2F0aW9uID0gMDsKLSAgICAgICAgICAgICAgICBpbnQgZ3JhbW1hckRldGFpbExvY2F0aW9uID0g
MDsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBncmFtbWFyRGV0YWlsSW5kZXggPSAwOwotICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+
IHJlc3VsdHM7Ci0gICAgICAgICAgICAgICAgdWludDY0X3QgY2hlY2tpbmdUeXBlcyA9IGNoZWNr
R3JhbW1hciA/IChUZXh0Q2hlY2tpbmdUeXBlU3BlbGxpbmcgfCBUZXh0Q2hlY2tpbmdUeXBlR3Jh
bW1hcikgOiBUZXh0Q2hlY2tpbmdUeXBlU3BlbGxpbmc7Ci0gICAgICAgICAgICAgICAgY2xpZW50
LT5jaGVja1RleHRPZlBhcmFncmFwaChwYXJhZ3JhcGhTdHJpbmcuY2hhcmFjdGVycygpLCBwYXJh
Z3JhcGhTdHJpbmcubGVuZ3RoKCksIGNoZWNraW5nVHlwZXMsIHJlc3VsdHMpOwotICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZXN1bHRz
LnNpemUoKTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0IFRleHRDaGVja2luZ1Jl
c3VsdCogcmVzdWx0ID0gJnJlc3VsdHNbaV07Ci0gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1
bHQtPnR5cGUgPT0gVGV4dENoZWNraW5nVHlwZVNwZWxsaW5nICYmIHJlc3VsdC0+bG9jYXRpb24g
Pj0gY3VycmVudFN0YXJ0T2Zmc2V0ICYmIHJlc3VsdC0+bG9jYXRpb24gKyByZXN1bHQtPmxlbmd0
aCA8PSBjdXJyZW50RW5kT2Zmc2V0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQo
cmVzdWx0LT5sZW5ndGggPiAwICYmIHJlc3VsdC0+bG9jYXRpb24gPj0gMCk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBzcGVsbGluZ0xvY2F0aW9uID0gcmVzdWx0LT5sb2NhdGlvbjsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIG1pc3NwZWxsZWRXb3JkID0gcGFyYWdyYXBoU3RyaW5nLnN1YnN0
cmluZyhyZXN1bHQtPmxvY2F0aW9uLCByZXN1bHQtPmxlbmd0aCk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBBU1NFUlQobWlzc3BlbGxlZFdvcmQubGVuZ3RoKCkpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgaWYgKGNoZWNrR3JhbW1hciAmJiByZXN1bHQtPnR5cGUgPT0gVGV4dENoZWNraW5nVHlwZUdy
YW1tYXIgJiYgcmVzdWx0LT5sb2NhdGlvbiA8IGN1cnJlbnRFbmRPZmZzZXQgJiYgcmVzdWx0LT5s
b2NhdGlvbiArIHJlc3VsdC0+bGVuZ3RoID4gY3VycmVudFN0YXJ0T2Zmc2V0KSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBBU1NFUlQocmVzdWx0LT5sZW5ndGggPiAwICYmIHJlc3VsdC0+bG9j
YXRpb24gPj0gMCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBjYW4ndCBzdG9wIGFm
dGVyIHRoZSBmaXJzdCBncmFtbWFyIHJlc3VsdCwgc2luY2UgdGhlcmUgbWlnaHQgc3RpbGwgYmUg
YSBzcGVsbGluZyByZXN1bHQgYWZ0ZXIKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGl0IGJl
Z2lucyBidXQgYmVmb3JlIHRoZSBmaXJzdCBkZXRhaWwgaW4gaXQsIGJ1dCB3ZSBjYW4gc3RvcCBp
ZiB3ZSBmaW5kIGEgc2Vjb25kIGdyYW1tYXIgcmVzdWx0LgotICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKGZvdW5kR3JhbW1hcikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCByZXN1bHQt
PmRldGFpbHMuc2l6ZSgpOyBqKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBHcmFtbWFyRGV0YWlsKiBkZXRhaWwgPSAmcmVzdWx0LT5kZXRhaWxzW2pdOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEFTU0VSVChkZXRhaWwtPmxlbmd0aCA+IDAgJiYgZGV0YWlsLT5s
b2NhdGlvbiA+PSAwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LT5s
b2NhdGlvbiArIGRldGFpbC0+bG9jYXRpb24gPj0gY3VycmVudFN0YXJ0T2Zmc2V0ICYmIHJlc3Vs
dC0+bG9jYXRpb24gKyBkZXRhaWwtPmxvY2F0aW9uICsgZGV0YWlsLT5sZW5ndGggPD0gY3VycmVu
dEVuZE9mZnNldCAmJiAoIWZvdW5kR3JhbW1hciB8fCByZXN1bHQtPmxvY2F0aW9uICsgZGV0YWls
LT5sb2NhdGlvbiA8IGdyYW1tYXJEZXRhaWxMb2NhdGlvbikpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZ3JhbW1hckRldGFpbEluZGV4ID0gajsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZ3JhbW1hckRldGFpbExvY2F0aW9uID0gcmVzdWx0LT5sb2NhdGlvbiAr
IGRldGFpbC0+bG9jYXRpb247Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5k
R3JhbW1hciA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvdW5kR3JhbW1h
cikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyYW1tYXJQaHJhc2VMb2NhdGlvbiA9
IHJlc3VsdC0+bG9jYXRpb247Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0R3JhbW1h
ckRldGFpbCA9IHJlc3VsdC0+ZGV0YWlsc1tncmFtbWFyRGV0YWlsSW5kZXhdOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJhZEdyYW1tYXJQaHJhc2UgPSBwYXJhZ3JhcGhTdHJpbmcuc3Vi
c3RyaW5nKHJlc3VsdC0+bG9jYXRpb24sIHJlc3VsdC0+bGVuZ3RoKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBBU1NFUlQoYmFkR3JhbW1hclBocmFzZS5sZW5ndGgoKSk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoIW1pc3NwZWxsZWRXb3JkLmlzRW1wdHkoKSAmJiAo
IWNoZWNrR3JhbW1hciB8fCBiYWRHcmFtbWFyUGhyYXNlLmlzRW1wdHkoKSB8fCBzcGVsbGluZ0xv
Y2F0aW9uIDw9IGdyYW1tYXJEZXRhaWxMb2NhdGlvbikpIHsKLSAgICAgICAgICAgICAgICAgICAg
aW50IHNwZWxsaW5nT2Zmc2V0ID0gc3BlbGxpbmdMb2NhdGlvbiAtIGN1cnJlbnRTdGFydE9mZnNl
dDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFmaXJzdEl0ZXJhdGlvbikgewotICAgICAgICAg
ICAgICAgICAgICAgICAgUmVmUHRyPFJhbmdlPiBwYXJhZ3JhcGhPZmZzZXRBc1JhbmdlID0gUmFu
Z2U6OmNyZWF0ZShwYXJhZ3JhcGhSYW5nZS0+c3RhcnRDb250YWluZXIoZWMpLT5kb2N1bWVudCgp
LCBzZWFyY2hSYW5nZS0+c3RhcnRQb3NpdGlvbigpLCBwYXJhZ3JhcGhSYW5nZS0+c3RhcnRQb3Np
dGlvbigpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNwZWxsaW5nT2Zmc2V0ICs9IFRleHRJ
dGVyYXRvcjo6cmFuZ2VMZW5ndGgocGFyYWdyYXBoT2Zmc2V0QXNSYW5nZS5nZXQoKSk7Ci0gICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgb3V0SXNTcGVsbGluZyA9IHRy
dWU7Ci0gICAgICAgICAgICAgICAgICAgIG91dEZpcnN0Rm91bmRPZmZzZXQgPSBzcGVsbGluZ09m
ZnNldDsKLSAgICAgICAgICAgICAgICAgICAgZmlyc3RGb3VuZEl0ZW0gPSBtaXNzcGVsbGVkV29y
ZDsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIGlmIChjaGVja0dyYW1tYXIgJiYgIWJhZEdyYW1tYXJQaHJhc2UuaXNFbXB0eSgp
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGludCBncmFtbWFyUGhyYXNlT2Zmc2V0ID0gZ3JhbW1h
clBocmFzZUxvY2F0aW9uIC0gY3VycmVudFN0YXJ0T2Zmc2V0OwotICAgICAgICAgICAgICAgICAg
ICBpZiAoIWZpcnN0SXRlcmF0aW9uKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBSZWZQdHI8
UmFuZ2U+IHBhcmFncmFwaE9mZnNldEFzUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKHBhcmFncmFwaFJh
bmdlLT5zdGFydENvbnRhaW5lcihlYyktPmRvY3VtZW50KCksIHNlYXJjaFJhbmdlLT5zdGFydFBv
c2l0aW9uKCksIHBhcmFncmFwaFJhbmdlLT5zdGFydFBvc2l0aW9uKCkpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgZ3JhbW1hclBocmFzZU9mZnNldCArPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVu
Z3RoKHBhcmFncmFwaE9mZnNldEFzUmFuZ2UuZ2V0KCkpOwotICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgIG91dElzU3BlbGxpbmcgPSBmYWxzZTsKLSAgICAgICAgICAg
ICAgICAgICAgb3V0Rmlyc3RGb3VuZE9mZnNldCA9IGdyYW1tYXJQaHJhc2VPZmZzZXQ7Ci0gICAg
ICAgICAgICAgICAgICAgIGZpcnN0Rm91bmRJdGVtID0gYmFkR3JhbW1hclBocmFzZTsKLSAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgICAgIGlmIChsYXN0SXRlcmF0aW9uIHx8IHRvdGFsTGVuZ3RoUHJvY2Vz
c2VkICsgY3VycmVudExlbmd0aCA+PSB0b3RhbFJhbmdlTGVuZ3RoKQotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIFZpc2libGVQb3NpdGlvbiBuZXdQYXJhZ3JhcGhTdGFydCA9IHN0YXJ0T2ZO
ZXh0UGFyYWdyYXBoKHBhcmFncmFwaFJhbmdlLT5lbmRQb3NpdGlvbigpKTsKLSAgICAgICAgc2V0
U3RhcnQocGFyYWdyYXBoUmFuZ2UuZ2V0KCksIG5ld1BhcmFncmFwaFN0YXJ0KTsKLSAgICAgICAg
c2V0RW5kKHBhcmFncmFwaFJhbmdlLmdldCgpLCBlbmRPZlBhcmFncmFwaChuZXdQYXJhZ3JhcGhT
dGFydCkpOwotICAgICAgICBmaXJzdEl0ZXJhdGlvbiA9IGZhbHNlOwotICAgICAgICB0b3RhbExl
bmd0aFByb2Nlc3NlZCArPSBjdXJyZW50TGVuZ3RoOwotICAgIH0KLSAgICByZXR1cm4gZmlyc3RG
b3VuZEl0ZW07Ci19Ci0KLSNlbmRpZgotCiB2b2lkIEVkaXRvcjo6YWR2YW5jZVRvTmV4dE1pc3Nw
ZWxsaW5nKGJvb2wgc3RhcnRCZWZvcmVTZWxlY3Rpb24pCiB7CiAgICAgRXhjZXB0aW9uQ29kZSBl
YyA9IDA7CkBAIC0xOTc5LDYgKzE2NTgsOCBAQCB2b2lkIEVkaXRvcjo6YWR2YW5jZVRvTmV4dE1p
c3NwZWxsaW5nKGJvb2wgc3RhcnRCZWZvcmVTZWxlY3Rpb24pCiAgICAgLy8gcmVwZWF0ZWQgImNo
ZWNrIHNwZWxsaW5nIiBjb21tYW5kcyB3b3JrLgogICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0
aW9uKGZyYW1lKCktPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKSk7CiAgICAgUmVmUHRyPFJhbmdl
PiBzcGVsbGluZ1NlYXJjaFJhbmdlKHJhbmdlT2ZDb250ZW50cyhmcmFtZSgpLT5kb2N1bWVudCgp
KSk7CisgICAgVGV4dENoZWNraW5nSGVscGVyIGNoZWNraW5nKGNsaWVudCgpLCBzcGVsbGluZ1Nl
YXJjaFJhbmdlKTsKKwogICAgIGJvb2wgc3RhcnRlZFdpdGhTZWxlY3Rpb24gPSBmYWxzZTsKICAg
ICBpZiAoc2VsZWN0aW9uLnN0YXJ0KCkubm9kZSgpKSB7CiAgICAgICAgIHN0YXJ0ZWRXaXRoU2Vs
ZWN0aW9uID0gdHJ1ZTsKQEAgLTIwNDQsNyArMTcyNSw3IEBAIHZvaWQgRWRpdG9yOjphZHZhbmNl
VG9OZXh0TWlzc3BlbGxpbmcoYm9vbCBzdGFydEJlZm9yZVNlbGVjdGlvbikKICAgICBib29sIGlz
U3BlbGxpbmcgPSB0cnVlOwogICAgIGludCBmb3VuZE9mZnNldCA9IDA7CiAgICAgR3JhbW1hckRl
dGFpbCBncmFtbWFyRGV0YWlsOwotICAgIFN0cmluZyBmb3VuZEl0ZW0gPSBmaW5kRmlyc3RNaXNz
cGVsbGluZ09yQmFkR3JhbW1hckluUmFuZ2UoY2xpZW50KCksIHNwZWxsaW5nU2VhcmNoUmFuZ2Uu
Z2V0KCksIGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCgpLCBpc1NwZWxsaW5nLCBmb3VuZE9mZnNl
dCwgZ3JhbW1hckRldGFpbCk7CisgICAgU3RyaW5nIGZvdW5kSXRlbSA9IGNoZWNraW5nLmZpbmRG
aXJzdE1pc3NwZWxsaW5nT3JCYWRHcmFtbWFyKGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCgpLCBp
c1NwZWxsaW5nLCBmb3VuZE9mZnNldCwgZ3JhbW1hckRldGFpbCk7CiAgICAgaWYgKGlzU3BlbGxp
bmcpIHsKICAgICAgICAgbWlzc3BlbGxlZFdvcmQgPSBmb3VuZEl0ZW07CiAgICAgICAgIG1pc3Nw
ZWxsaW5nT2Zmc2V0ID0gZm91bmRPZmZzZXQ7CkBAIC0yMDU0LDcgKzE3MzUsNyBAQCB2b2lkIEVk
aXRvcjo6YWR2YW5jZVRvTmV4dE1pc3NwZWxsaW5nKGJvb2wgc3RhcnRCZWZvcmVTZWxlY3Rpb24p
CiAgICAgfQogI2Vsc2UKICAgICBSZWZQdHI8UmFuZ2U+IGZpcnN0TWlzc3BlbGxpbmdSYW5nZTsK
LSAgICBTdHJpbmcgbWlzc3BlbGxlZFdvcmQgPSBmaW5kRmlyc3RNaXNzcGVsbGluZ0luUmFuZ2Uo
Y2xpZW50KCksIHNwZWxsaW5nU2VhcmNoUmFuZ2UuZ2V0KCksIG1pc3NwZWxsaW5nT2Zmc2V0LCBm
YWxzZSwgZmlyc3RNaXNzcGVsbGluZ1JhbmdlKTsKKyAgICBTdHJpbmcgbWlzc3BlbGxlZFdvcmQg
PSBjaGVja2luZy5maW5kRmlyc3RNaXNzcGVsbGluZyhtaXNzcGVsbGluZ09mZnNldCwgZmFsc2Us
IGZpcnN0TWlzc3BlbGxpbmdSYW5nZSk7CiAgICAgU3RyaW5nIGJhZEdyYW1tYXJQaHJhc2U7CiAK
ICNpZm5kZWYgQlVJTERJTkdfT05fVElHRVIKQEAgLTIwNzEsNyArMTc1Miw3IEBAIHZvaWQgRWRp
dG9yOjphZHZhbmNlVG9OZXh0TWlzc3BlbGxpbmcoYm9vbCBzdGFydEJlZm9yZVNlbGVjdGlvbikK
ICAgICB9CiAgICAgCiAgICAgaWYgKGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCgpKQotICAgICAg
ICBiYWRHcmFtbWFyUGhyYXNlID0gZmluZEZpcnN0QmFkR3JhbW1hckluUmFuZ2UoY2xpZW50KCks
IGdyYW1tYXJTZWFyY2hSYW5nZS5nZXQoKSwgZ3JhbW1hckRldGFpbCwgZ3JhbW1hclBocmFzZU9m
ZnNldCwgZmFsc2UpOworICAgICAgICBiYWRHcmFtbWFyUGhyYXNlID0gY2hlY2tpbmcuZmluZEZp
cnN0QmFkR3JhbW1hcihncmFtbWFyRGV0YWlsLCBncmFtbWFyUGhyYXNlT2Zmc2V0LCBmYWxzZSk7
CiAjZW5kaWYKICNlbmRpZgogICAgIApAQCAtMjA4NCw3ICsxNzY1LDcgQEAgdm9pZCBFZGl0b3I6
OmFkdmFuY2VUb05leHRNaXNzcGVsbGluZyhib29sIHN0YXJ0QmVmb3JlU2VsZWN0aW9uKQogICAg
ICAgICAKICNpZiBQTEFURk9STShNQUMpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAm
JiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKQogICAgICAgICBncmFtbWFyU2VhcmNoUmFu
Z2UgPSBzcGVsbGluZ1NlYXJjaFJhbmdlLT5jbG9uZVJhbmdlKGVjKTsKLSAgICAgICAgZm91bmRJ
dGVtID0gZmluZEZpcnN0TWlzc3BlbGxpbmdPckJhZEdyYW1tYXJJblJhbmdlKGNsaWVudCgpLCBz
cGVsbGluZ1NlYXJjaFJhbmdlLmdldCgpLCBpc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQoKSwgaXNT
cGVsbGluZywgZm91bmRPZmZzZXQsIGdyYW1tYXJEZXRhaWwpOworICAgICAgICBmb3VuZEl0ZW0g
PSBjaGVja2luZy5maW5kRmlyc3RNaXNzcGVsbGluZ09yQmFkR3JhbW1hcihpc0dyYW1tYXJDaGVj
a2luZ0VuYWJsZWQoKSwgaXNTcGVsbGluZywgZm91bmRPZmZzZXQsIGdyYW1tYXJEZXRhaWwpOwog
ICAgICAgICBpZiAoaXNTcGVsbGluZykgewogICAgICAgICAgICAgbWlzc3BlbGxlZFdvcmQgPSBm
b3VuZEl0ZW07CiAgICAgICAgICAgICBtaXNzcGVsbGluZ09mZnNldCA9IGZvdW5kT2Zmc2V0OwpA
QCAtMjA5Myw3ICsxNzc0LDcgQEAgdm9pZCBFZGl0b3I6OmFkdmFuY2VUb05leHRNaXNzcGVsbGlu
Zyhib29sIHN0YXJ0QmVmb3JlU2VsZWN0aW9uKQogICAgICAgICAgICAgZ3JhbW1hclBocmFzZU9m
ZnNldCA9IGZvdW5kT2Zmc2V0OwogICAgICAgICB9CiAjZWxzZQotICAgICAgICBtaXNzcGVsbGVk
V29yZCA9IGZpbmRGaXJzdE1pc3NwZWxsaW5nSW5SYW5nZShjbGllbnQoKSwgc3BlbGxpbmdTZWFy
Y2hSYW5nZS5nZXQoKSwgbWlzc3BlbGxpbmdPZmZzZXQsIGZhbHNlLCBmaXJzdE1pc3NwZWxsaW5n
UmFuZ2UpOworICAgICAgICBtaXNzcGVsbGVkV29yZCA9IGNoZWNraW5nLmZpbmRGaXJzdE1pc3Nw
ZWxsaW5nKG1pc3NwZWxsaW5nT2Zmc2V0LCBmYWxzZSwgZmlyc3RNaXNzcGVsbGluZ1JhbmdlKTsK
IAogI2lmbmRlZiBCVUlMRElOR19PTl9USUdFUgogICAgICAgICBncmFtbWFyU2VhcmNoUmFuZ2Ug
PSBzcGVsbGluZ1NlYXJjaFJhbmdlLT5jbG9uZVJhbmdlKGVjKTsKQEAgLTIxMDQsNyArMTc4NSw3
IEBAIHZvaWQgRWRpdG9yOjphZHZhbmNlVG9OZXh0TWlzc3BlbGxpbmcoYm9vbCBzdGFydEJlZm9y
ZVNlbGVjdGlvbikKICAgICAgICAgICAgIGdyYW1tYXJTZWFyY2hSYW5nZS0+c2V0RW5kKGNoYXJz
LnJhbmdlKCktPnN0YXJ0Q29udGFpbmVyKGVjKSwgY2hhcnMucmFuZ2UoKS0+c3RhcnRPZmZzZXQo
ZWMpLCBlYyk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGlzR3JhbW1hckNoZWNraW5nRW5hYmxl
ZCgpKQotICAgICAgICAgICAgYmFkR3JhbW1hclBocmFzZSA9IGZpbmRGaXJzdEJhZEdyYW1tYXJJ
blJhbmdlKGNsaWVudCgpLCBncmFtbWFyU2VhcmNoUmFuZ2UuZ2V0KCksIGdyYW1tYXJEZXRhaWws
IGdyYW1tYXJQaHJhc2VPZmZzZXQsIGZhbHNlKTsKKyAgICAgICAgICAgIGJhZEdyYW1tYXJQaHJh
c2UgPSBjaGVja2luZy5maW5kRmlyc3RCYWRHcmFtbWFyKGdyYW1tYXJEZXRhaWwsIGdyYW1tYXJQ
aHJhc2VPZmZzZXQsIGZhbHNlKTsKICNlbmRpZgogI2VuZGlmCiAgICAgfQpAQCAtMjE2OCw2MCAr
MTg0OSwxMyBAQCBib29sIEVkaXRvcjo6aXNTZWxlY3Rpb25NaXNzcGVsbGVkKCkKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAotI2lmbmRlZiBCVUlMRElOR19PTl9USUdFUgotc3RhdGljIGJvb2wgaXNS
YW5nZVVuZ3JhbW1hdGljYWwoRWRpdG9yQ2xpZW50KiBjbGllbnQsIFJhbmdlICpyYW5nZSwgVmVj
dG9yPFN0cmluZz4mIGd1ZXNzZXNWZWN0b3IpCi17Ci0gICAgaWYgKCFjbGllbnQpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIEV4Y2VwdGlvbkNvZGUgZWM7Ci0gICAgaWYgKCFyYW5nZSB8
fCByYW5nZS0+Y29sbGFwc2VkKGVjKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAg
IC8vIFJldHVybnMgdHJ1ZSBvbmx5IGlmIHRoZSBwYXNzZWQgcmFuZ2UgZXhhY3RseSBjb3JyZXNw
b25kcyB0byBhIGJhZCBncmFtbWFyIGRldGFpbCByYW5nZS4gVGhpcyBpcyBhbmFsb2dvdXMKLSAg
ICAvLyB0byBpc1NlbGVjdGlvbk1pc3NwZWxsZWQuIEl0J3Mgbm90IGdvb2QgZW5vdWdoIGZvciB0
aGVyZSB0byBiZSBzb21lIGJhZCBncmFtbWFyIHNvbWV3aGVyZSBpbiB0aGUgcmFuZ2UsCi0gICAg
Ly8gb3Igb3ZlcmxhcHBpbmcgdGhlIHJhbmdlOyB0aGUgcmFuZ2VzIG11c3QgZXhhY3RseSBtYXRj
aC4KLSAgICBndWVzc2VzVmVjdG9yLmNsZWFyKCk7Ci0gICAgaW50IGdyYW1tYXJQaHJhc2VPZmZz
ZXQ7Ci0gICAgCi0gICAgR3JhbW1hckRldGFpbCBncmFtbWFyRGV0YWlsOwotICAgIFN0cmluZyBi
YWRHcmFtbWFyUGhyYXNlID0gZmluZEZpcnN0QmFkR3JhbW1hckluUmFuZ2UoY2xpZW50LCByYW5n
ZSwgZ3JhbW1hckRldGFpbCwgZ3JhbW1hclBocmFzZU9mZnNldCwgZmFsc2UpOyAgICAKLSAgICAK
LSAgICAvLyBObyBiYWQgZ3JhbW1hciBpbiB0aGVzZSBwYXJ0cyBhdCBhbGwuCi0gICAgaWYgKGJh
ZEdyYW1tYXJQaHJhc2UuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0g
ICAgLy8gQmFkIGdyYW1tYXIsIGJ1dCBwaHJhc2UgKGUuZy4gc2VudGVuY2UpIHN0YXJ0cyBiZXlv
bmQgc3RhcnQgb2YgcmFuZ2UuCi0gICAgaWYgKGdyYW1tYXJQaHJhc2VPZmZzZXQgPiAwKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgQVNTRVJUKGdyYW1tYXJEZXRhaWwubG9jYXRp
b24gPj0gMCAmJiBncmFtbWFyRGV0YWlsLmxlbmd0aCA+IDApOwotICAgIAotICAgIC8vIEJhZCBn
cmFtbWFyLCBidXQgc3RhcnQgb2YgZGV0YWlsIChlLmcuIHVuZ3JhbW1hdGljYWwgd29yZCkgZG9l
c24ndCBtYXRjaCBzdGFydCBvZiByYW5nZQotICAgIGlmIChncmFtbWFyRGV0YWlsLmxvY2F0aW9u
ICsgZ3JhbW1hclBocmFzZU9mZnNldCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAg
IC8vIEJhZCBncmFtbWFyIGF0IHN0YXJ0IG9mIHJhbmdlLCBidXQgZW5kIG9mIGJhZCBncmFtbWFy
IGlzIGJlZm9yZSBvciBhZnRlciBlbmQgb2YgcmFuZ2UKLSAgICBpZiAoZ3JhbW1hckRldGFpbC5s
ZW5ndGggIT0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChyYW5nZSkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAKLSAgICAvLyBVcGRhdGUgdGhlIHNwZWxsaW5nIHBhbmVsIHRvIGJlIGRp
c3BsYXlpbmcgdGhpcyBlcnJvciAod2hldGhlciBvciBub3QgdGhlIHNwZWxsaW5nIHBhbmVsIGlz
IG9uIHNjcmVlbikuCi0gICAgLy8gVGhpcyBpcyBuZWNlc3NhcnkgdG8gbWFrZSBhIHN1YnNlcXVl
bnQgY2FsbCB0byBbTlNTcGVsbENoZWNrZXIgaWdub3JlV29yZDppblNwZWxsRG9jdW1lbnRXaXRo
VGFnOl0gd29yawotICAgIC8vIGNvcnJlY3RseTsgdGhhdCBjYWxsIGJlaGF2ZXMgZGlmZmVyZW50
bHkgYmFzZWQgb24gd2hldGhlciB0aGUgc3BlbGxpbmcgcGFuZWwgaXMgZGlzcGxheWluZyBhIG1p
c3NwZWxsaW5nCi0gICAgLy8gb3IgYSBncmFtbWFyIGVycm9yLgotICAgIGNsaWVudC0+dXBkYXRl
U3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKGJhZEdyYW1tYXJQaHJhc2UsIGdyYW1tYXJEZXRh
aWwpOwotICAgIAotICAgIHJldHVybiB0cnVlOwotfQotI2VuZGlmCi0KIGJvb2wgRWRpdG9yOjpp
c1NlbGVjdGlvblVuZ3JhbW1hdGljYWwoKQogewogI2lmZGVmIEJVSUxESU5HX09OX1RJR0VSCiAg
ICAgcmV0dXJuIGZhbHNlOwogI2Vsc2UKICAgICBWZWN0b3I8U3RyaW5nPiBpZ25vcmVkR3Vlc3Nl
czsKLSAgICByZXR1cm4gaXNSYW5nZVVuZ3JhbW1hdGljYWwoY2xpZW50KCksIGZyYW1lKCktPnNl
bGVjdGlvbigpLT50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBpZ25vcmVkR3Vlc3Nlcyk7Cisg
ICAgcmV0dXJuIFRleHRDaGVja2luZ0hlbHBlcihjbGllbnQoKSwgZnJhbWUoKS0+c2VsZWN0aW9u
KCktPnRvTm9ybWFsaXplZFJhbmdlKCkpLmlzVW5ncmFtbWF0aWNhbChpZ25vcmVkR3Vlc3Nlcyk7
CiAjZW5kaWYKIH0KIApAQCAtMjIzMSw4ICsxODY1LDggQEAgVmVjdG9yPFN0cmluZz4gRWRpdG9y
OjpndWVzc2VzRm9yVW5ncmFtbWF0aWNhbFNlbGVjdGlvbigpCiAgICAgcmV0dXJuIFZlY3RvcjxT
dHJpbmc+KCk7CiAjZWxzZQogICAgIFZlY3RvcjxTdHJpbmc+IGd1ZXNzZXM7Ci0gICAgLy8gSWdu
b3JlIHRoZSByZXN1bHQgb2YgaXNSYW5nZVVuZ3JhbW1hdGljYWw7IHdlIGp1c3Qgd2FudCB0aGUg
Z3Vlc3Nlcywgd2hldGhlciBvciBub3QgdGhlcmUgYXJlIGFueQotICAgIGlzUmFuZ2VVbmdyYW1t
YXRpY2FsKGNsaWVudCgpLCBmcmFtZSgpLT5zZWxlY3Rpb24oKS0+dG9Ob3JtYWxpemVkUmFuZ2Uo
KS5nZXQoKSwgZ3Vlc3Nlcyk7CisgICAgLy8gSWdub3JlIHRoZSByZXN1bHQgb2YgaXNVbmdyYW1t
YXRpY2FsOyB3ZSBqdXN0IHdhbnQgdGhlIGd1ZXNzZXMsIHdoZXRoZXIgb3Igbm90IHRoZXJlIGFy
ZSBhbnkKKyAgICBUZXh0Q2hlY2tpbmdIZWxwZXIoY2xpZW50KCksIGZyYW1lKCktPnNlbGVjdGlv
bigpLT50b05vcm1hbGl6ZWRSYW5nZSgpKS5pc1VuZ3JhbW1hdGljYWwoZ3Vlc3Nlcyk7CiAgICAg
cmV0dXJuIGd1ZXNzZXM7CiAjZW5kaWYKIH0KQEAgLTIyNDgsNzIgKzE4ODIsMTAgQEAgVmVjdG9y
PFN0cmluZz4gRWRpdG9yOjpndWVzc2VzRm9yTWlzc3BlbGxlZFNlbGVjdGlvbigpCiAgICAgcmV0
dXJuIGd1ZXNzZXM7CiB9CiAKLSNpZiBQTEFURk9STShNQUMpICYmICFkZWZpbmVkKEJVSUxESU5H
X09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKQotCi1zdGF0aWMgVmVj
dG9yPFN0cmluZz4gZ3Vlc3Nlc0Zvck1pc3NwZWxsZWRPclVuZ3JhbW1hdGljYWxSYW5nZShFZGl0
b3JDbGllbnQqIGNsaWVudCwgUmFuZ2UgKnJhbmdlLCBib29sIGNoZWNrR3JhbW1hciwgYm9vbCYg
bWlzc3BlbGxlZCwgYm9vbCYgdW5ncmFtbWF0aWNhbCkKLXsKLSAgICBWZWN0b3I8U3RyaW5nPiBn
dWVzc2VzOwotICAgIEV4Y2VwdGlvbkNvZGUgZWM7Ci0gICAgbWlzc3BlbGxlZCA9IGZhbHNlOwot
ICAgIHVuZ3JhbW1hdGljYWwgPSBmYWxzZTsKLSAgICAKLSAgICBpZiAoIWNsaWVudCB8fCAhcmFu
Z2UgfHwgcmFuZ2UtPmNvbGxhcHNlZChlYykpCi0gICAgICAgIHJldHVybiBndWVzc2VzOwotCi0g
ICAgLy8gRXhwYW5kIHRoZSByYW5nZSB0byBlbmNvbXBhc3MgZW50aXJlIHBhcmFncmFwaHMsIHNp
bmNlIHRleHQgY2hlY2tpbmcgbmVlZHMgdGhhdCBtdWNoIGNvbnRleHQuCi0gICAgaW50IHJhbmdl
U3RhcnRPZmZzZXQ7Ci0gICAgU3RyaW5nIHBhcmFncmFwaFN0cmluZzsKLSAgICBSZWZQdHI8UmFu
Z2U+IHBhcmFncmFwaFJhbmdlID0gcGFyYWdyYXBoQWxpZ25lZFJhbmdlRm9yUmFuZ2UocmFuZ2Us
IHJhbmdlU3RhcnRPZmZzZXQsIHBhcmFncmFwaFN0cmluZyk7Ci0gICAgaW50IHJhbmdlTGVuZ3Ro
ID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChyYW5nZSk7Ci0gICAgaWYgKCFyYW5nZUxlbmd0
aCB8fCAhcGFyYWdyYXBoU3RyaW5nLmxlbmd0aCgpKQotICAgICAgICByZXR1cm4gZ3Vlc3NlczsK
LQotICAgIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IHJlc3VsdHM7Ci0gICAgdWludDY0X3Qg
Y2hlY2tpbmdUeXBlcyA9IGNoZWNrR3JhbW1hciA/IChUZXh0Q2hlY2tpbmdUeXBlU3BlbGxpbmcg
fCBUZXh0Q2hlY2tpbmdUeXBlR3JhbW1hcikgOiBUZXh0Q2hlY2tpbmdUeXBlU3BlbGxpbmc7Ci0g
ICAgY2xpZW50LT5jaGVja1RleHRPZlBhcmFncmFwaChwYXJhZ3JhcGhTdHJpbmcuY2hhcmFjdGVy
cygpLCBwYXJhZ3JhcGhTdHJpbmcubGVuZ3RoKCksIGNoZWNraW5nVHlwZXMsIHJlc3VsdHMpOwot
ICAgIAotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZXN1bHRzLnNpemUoKTsgaSsrKSB7
Ci0gICAgICAgIGNvbnN0IFRleHRDaGVja2luZ1Jlc3VsdCogcmVzdWx0ID0gJnJlc3VsdHNbaV07
Ci0gICAgICAgIGlmIChyZXN1bHQtPnR5cGUgPT0gVGV4dENoZWNraW5nVHlwZVNwZWxsaW5nICYm
IHJlc3VsdC0+bG9jYXRpb24gPT0gcmFuZ2VTdGFydE9mZnNldCAmJiByZXN1bHQtPmxlbmd0aCA9
PSByYW5nZUxlbmd0aCkgewotICAgICAgICAgICAgU3RyaW5nIG1pc3NwZWxsZWRXb3JkID0gcGFy
YWdyYXBoU3RyaW5nLnN1YnN0cmluZyhyYW5nZVN0YXJ0T2Zmc2V0LCByYW5nZUxlbmd0aCk7Ci0g
ICAgICAgICAgICBBU1NFUlQobWlzc3BlbGxlZFdvcmQubGVuZ3RoKCkpOwotICAgICAgICAgICAg
Y2xpZW50LT5nZXRHdWVzc2VzRm9yV29yZChtaXNzcGVsbGVkV29yZCwgZ3Vlc3Nlcyk7Ci0gICAg
ICAgICAgICBjbGllbnQtPnVwZGF0ZVNwZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQobWlzc3Bl
bGxlZFdvcmQpOwotICAgICAgICAgICAgbWlzc3BlbGxlZCA9IHRydWU7Ci0gICAgICAgICAgICBy
ZXR1cm4gZ3Vlc3NlczsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICBpZiAoIWNoZWNrR3Jh
bW1hcikKLSAgICAgICAgcmV0dXJuIGd1ZXNzZXM7Ci0gICAgICAgIAotICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCByZXN1bHRzLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIGNvbnN0IFRleHRD
aGVja2luZ1Jlc3VsdCogcmVzdWx0ID0gJnJlc3VsdHNbaV07Ci0gICAgICAgIGlmIChyZXN1bHQt
PnR5cGUgPT0gVGV4dENoZWNraW5nVHlwZUdyYW1tYXIgJiYgcmVzdWx0LT5sb2NhdGlvbiA8PSBy
YW5nZVN0YXJ0T2Zmc2V0ICYmIHJlc3VsdC0+bG9jYXRpb24gKyByZXN1bHQtPmxlbmd0aCA+PSBy
YW5nZVN0YXJ0T2Zmc2V0ICsgcmFuZ2VMZW5ndGgpIHsKLSAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaiA9IDA7IGogPCByZXN1bHQtPmRldGFpbHMuc2l6ZSgpOyBqKyspIHsKLSAgICAgICAgICAg
ICAgICBjb25zdCBHcmFtbWFyRGV0YWlsKiBkZXRhaWwgPSAmcmVzdWx0LT5kZXRhaWxzW2pdOwot
ICAgICAgICAgICAgICAgIEFTU0VSVChkZXRhaWwtPmxlbmd0aCA+IDAgJiYgZGV0YWlsLT5sb2Nh
dGlvbiA+PSAwKTsKLSAgICAgICAgICAgICAgICBpZiAocmVzdWx0LT5sb2NhdGlvbiArIGRldGFp
bC0+bG9jYXRpb24gPT0gcmFuZ2VTdGFydE9mZnNldCAmJiBkZXRhaWwtPmxlbmd0aCA9PSByYW5n
ZUxlbmd0aCkgewotICAgICAgICAgICAgICAgICAgICBTdHJpbmcgYmFkR3JhbW1hclBocmFzZSA9
IHBhcmFncmFwaFN0cmluZy5zdWJzdHJpbmcocmVzdWx0LT5sb2NhdGlvbiwgcmVzdWx0LT5sZW5n
dGgpOwotICAgICAgICAgICAgICAgICAgICBBU1NFUlQoYmFkR3JhbW1hclBocmFzZS5sZW5ndGgo
KSk7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgayA9IDA7IGsgPCBkZXRhaWwt
Pmd1ZXNzZXMuc2l6ZSgpOyBrKyspCi0gICAgICAgICAgICAgICAgICAgICAgICBndWVzc2VzLmFw
cGVuZChkZXRhaWwtPmd1ZXNzZXNba10pOwotICAgICAgICAgICAgICAgICAgICBjbGllbnQtPnVw
ZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0cmluZyhiYWRHcmFtbWFyUGhyYXNlLCAqZGV0YWls
KTsKLSAgICAgICAgICAgICAgICAgICAgdW5ncmFtbWF0aWNhbCA9IHRydWU7Ci0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiBndWVzc2VzOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gZ3Vlc3NlczsKLX0KLQotI2VuZGlmCi0K
IFZlY3RvcjxTdHJpbmc+IEVkaXRvcjo6Z3Vlc3Nlc0Zvck1pc3NwZWxsZWRPclVuZ3JhbW1hdGlj
YWxTZWxlY3Rpb24oYm9vbCYgbWlzc3BlbGxlZCwgYm9vbCYgdW5ncmFtbWF0aWNhbCkKIHsKICNp
ZiBQTEFURk9STShNQUMpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5l
ZChCVUlMRElOR19PTl9MRU9QQVJEKQotICAgIHJldHVybiBndWVzc2VzRm9yTWlzc3BlbGxlZE9y
VW5ncmFtbWF0aWNhbFJhbmdlKGNsaWVudCgpLCBmcmFtZSgpLT5zZWxlY3Rpb24oKS0+dG9Ob3Jt
YWxpemVkUmFuZ2UoKS5nZXQoKSwgaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKCksIG1pc3NwZWxs
ZWQsIHVuZ3JhbW1hdGljYWwpOworICAgIHJldHVybiBUZXh0Q2hlY2tpbmdIZWxwZXIoY2xpZW50
KCksIGZyYW1lKCktPnNlbGVjdGlvbigpLT50b05vcm1hbGl6ZWRSYW5nZSgpKS5ndWVzc2VzRm9y
TWlzc3BlbGxlZE9yVW5ncmFtbWF0aWNhbFJhbmdlKGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCgp
LCBtaXNzcGVsbGVkLCB1bmdyYW1tYXRpY2FsKTsKICNlbHNlCiAgICAgbWlzc3BlbGxlZCA9IGlz
U2VsZWN0aW9uTWlzc3BlbGxlZCgpOwogICAgIGlmIChtaXNzcGVsbGVkKSB7CkBAIC0yNDkwLDM0
ICsyMDYyLDE1IEBAIHZvaWQgRWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmdUb1Bv
c2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiAmcCkKICAgICBtYXJrQmFkR3JhbW1hcihWaXNp
YmxlU2VsZWN0aW9uKHN0YXJ0T2ZTZW50ZW5jZShwKSwgZW5kT2ZTZW50ZW5jZShwKSkpOwogI2Vu
ZGlmCiB9Ci0KLXN0YXRpYyB2b2lkIG1hcmtBbGxNaXNzcGVsbGluZ3NJblJhbmdlKEVkaXRvckNs
aWVudCogY2xpZW50LCBSYW5nZSogc2VhcmNoUmFuZ2UsIFJlZlB0cjxSYW5nZT4mIGZpcnN0TWlz
c3BlbGxpbmdSYW5nZSkKLXsKLSAgICAvLyBVc2UgdGhlICJtYXJrQWxsIiBmZWF0dXJlIG9mIGZp
bmRGaXJzdE1pc3NwZWxsaW5nSW5SYW5nZS4gSWdub3JlIHRoZSByZXR1cm4gdmFsdWUgYW5kIHRo
ZSAib3V0IHBhcmFtZXRlciI7Ci0gICAgLy8gYWxsIHdlIG5lZWQgdG8gZG8gaXMgbWFyayBldmVy
eSBpbnN0YW5jZS4KLSAgICBpbnQgaWdub3JlZE9mZnNldDsKLSAgICBmaW5kRmlyc3RNaXNzcGVs
bGluZ0luUmFuZ2UoY2xpZW50LCBzZWFyY2hSYW5nZSwgaWdub3JlZE9mZnNldCwgdHJ1ZSwgZmly
c3RNaXNzcGVsbGluZ1JhbmdlKTsKLX0KLQotI2lmbmRlZiBCVUlMRElOR19PTl9USUdFUgotc3Rh
dGljIHZvaWQgbWFya0FsbEJhZEdyYW1tYXJJblJhbmdlKEVkaXRvckNsaWVudCogY2xpZW50LCBS
YW5nZSogc2VhcmNoUmFuZ2UpCi17Ci0gICAgLy8gVXNlIHRoZSAibWFya0FsbCIgZmVhdHVyZSBv
ZiBmaW5kRmlyc3RCYWRHcmFtbWFySW5SYW5nZS4gSWdub3JlIHRoZSByZXR1cm4gdmFsdWUgYW5k
ICJvdXQgcGFyYW1ldGVycyI7IGFsbCB3ZSBuZWVkIHRvCi0gICAgLy8gZG8gaXMgbWFyayBldmVy
eSBpbnN0YW5jZS4KLSAgICBHcmFtbWFyRGV0YWlsIGlnbm9yZWRHcmFtbWFyRGV0YWlsOwotICAg
IGludCBpZ25vcmVkT2Zmc2V0OwotICAgIGZpbmRGaXJzdEJhZEdyYW1tYXJJblJhbmdlKGNsaWVu
dCwgc2VhcmNoUmFuZ2UsIGlnbm9yZWRHcmFtbWFyRGV0YWlsLCBpZ25vcmVkT2Zmc2V0LCB0cnVl
KTsKLX0KLSNlbmRpZgogICAgIAotc3RhdGljIHZvaWQgbWFya01pc3NwZWxsaW5nc09yQmFkR3Jh
bW1hcihFZGl0b3IqIGVkaXRvciwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uLCBi
b29sIGNoZWNrU3BlbGxpbmcsIFJlZlB0cjxSYW5nZT4mIGZpcnN0TWlzc3BlbGxpbmdSYW5nZSkK
K3ZvaWQgRWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzT3JCYWRHcmFtbWFyKGNvbnN0IFZpc2libGVT
ZWxlY3Rpb24mIHNlbGVjdGlvbiwgYm9vbCBjaGVja1NwZWxsaW5nLCBSZWZQdHI8UmFuZ2U+JiBm
aXJzdE1pc3NwZWxsaW5nUmFuZ2UpCiB7CiAgICAgLy8gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQg
d2l0aCBhIHNlbGVjdGlvbiBhbHJlYWR5IGV4cGFuZGVkIHRvIHdvcmQgYm91bmRhcmllcy4KICAg
ICAvLyBNaWdodCBiZSBuaWNlIHRvIGFzc2VydCB0aGF0IGhlcmUuCiAgICAgCiAgICAgLy8gVGhp
cyBmdW5jdGlvbiBpcyB1c2VkIG9ubHkgZm9yIGFzLXlvdS10eXBlIGNoZWNraW5nLCBzbyBpZiB0
aGF0J3Mgb2ZmIHdlIGRvIG5vdGhpbmcuIE5vdGUgdGhhdAogICAgIC8vIGdyYW1tYXIgY2hlY2tp
bmcgY2FuIG9ubHkgYmUgb24gaWYgc3BlbGwgY2hlY2tpbmcgaXMgYWxzbyBvbi4KLSAgICBpZiAo
IWVkaXRvci0+aXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKSkKKyAgICBpZiAoIWlz
Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCkpCiAgICAgICAgIHJldHVybjsKICAgICAK
ICAgICBSZWZQdHI8UmFuZ2U+IHNlYXJjaFJhbmdlKHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5n
ZSgpKTsKQEAgLTI1MjksMjEgKzIwODIsMjIgQEAgc3RhdGljIHZvaWQgbWFya01pc3NwZWxsaW5n
c09yQmFkR3JhbW1hcihFZGl0b3IqIGVkaXRvciwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYKICAg
ICBpZiAoIWVkaXRhYmxlTm9kZSB8fCAhZWRpdGFibGVOb2RlLT5pc0NvbnRlbnRFZGl0YWJsZSgp
KQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoIWVkaXRvci0+aXNTcGVsbENoZWNraW5nRW5h
YmxlZEluRm9jdXNlZE5vZGUoKSkKKyAgICBpZiAoIWlzU3BlbGxDaGVja2luZ0VuYWJsZWRJbkZv
Y3VzZWROb2RlKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIEdldCB0aGUgc3BlbGwgY2hl
Y2tlciBpZiBpdCBpcyBhdmFpbGFibGUKLSAgICBpZiAoIWVkaXRvci0+Y2xpZW50KCkpCisgICAg
aWYgKCFjbGllbnQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIAorICAgIFRleHRDaGVja2luZ0hl
bHBlciBjaGVja2luZyhjbGllbnQoKSwgc2VhcmNoUmFuZ2UpOwogICAgIGlmIChjaGVja1NwZWxs
aW5nKQotICAgICAgICBtYXJrQWxsTWlzc3BlbGxpbmdzSW5SYW5nZShlZGl0b3ItPmNsaWVudCgp
LCBzZWFyY2hSYW5nZS5nZXQoKSwgZmlyc3RNaXNzcGVsbGluZ1JhbmdlKTsKKyAgICAgICAgY2hl
Y2tpbmcubWFya0FsbE1pc3NwZWxsaW5ncyhmaXJzdE1pc3NwZWxsaW5nUmFuZ2UpOwogICAgIGVs
c2UgewogI2lmZGVmIEJVSUxESU5HX09OX1RJR0VSCiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogI2Vsc2UKLSAgICAgICAgaWYgKGVkaXRvci0+aXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVk
KCkpCi0gICAgICAgICAgICBtYXJrQWxsQmFkR3JhbW1hckluUmFuZ2UoZWRpdG9yLT5jbGllbnQo
KSwgc2VhcmNoUmFuZ2UuZ2V0KCkpOworICAgICAgICBpZiAoaXNHcmFtbWFyQ2hlY2tpbmdFbmFi
bGVkKCkpCisgICAgICAgICAgICBjaGVja2luZy5tYXJrQWxsQmFkR3JhbW1hcigpOwogI2VuZGlm
CiAgICAgfSAgICAKIH0KQEAgLTI1NjMsMTQgKzIxMTcsMTQgQEAgYm9vbCBFZGl0b3I6OmlzU3Bl
bGxDaGVja2luZ0VuYWJsZWRJbkZvY3VzZWROb2RlKCkgY29uc3QKIAogdm9pZCBFZGl0b3I6Om1h
cmtNaXNzcGVsbGluZ3MoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uLCBSZWZQdHI8
UmFuZ2U+JiBmaXJzdE1pc3NwZWxsaW5nUmFuZ2UpCiB7Ci0gICAgbWFya01pc3NwZWxsaW5nc09y
QmFkR3JhbW1hcih0aGlzLCBzZWxlY3Rpb24sIHRydWUsIGZpcnN0TWlzc3BlbGxpbmdSYW5nZSk7
CisgICAgbWFya01pc3NwZWxsaW5nc09yQmFkR3JhbW1hcihzZWxlY3Rpb24sIHRydWUsIGZpcnN0
TWlzc3BlbGxpbmdSYW5nZSk7CiB9CiAgICAgCiB2b2lkIEVkaXRvcjo6bWFya0JhZEdyYW1tYXIo
Y29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uKQogewogI2lmbmRlZiBCVUlMRElOR19P
Tl9USUdFUgogICAgIFJlZlB0cjxSYW5nZT4gZmlyc3RNaXNzcGVsbGluZ1JhbmdlOwotICAgIG1h
cmtNaXNzcGVsbGluZ3NPckJhZEdyYW1tYXIodGhpcywgc2VsZWN0aW9uLCBmYWxzZSwgZmlyc3RN
aXNzcGVsbGluZ1JhbmdlKTsKKyAgICBtYXJrTWlzc3BlbGxpbmdzT3JCYWRHcmFtbWFyKHNlbGVj
dGlvbiwgZmFsc2UsIGZpcnN0TWlzc3BlbGxpbmdSYW5nZSk7CiAjZWxzZQogICAgIFVOVVNFRF9Q
QVJBTShzZWxlY3Rpb24pOwogI2VuZGlmCkBAIC0yNjIwLDE1ICsyMTc0LDE2IEBAIHZvaWQgRWRp
dG9yOjptYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKFRleHRDaGVja2lu
Z09wdGlvbnMgdGV4dENoCiAgICAgYm9vbCBhZGp1c3RTZWxlY3Rpb25Gb3JQYXJhZ3JhcGhCb3Vu
ZGFyaWVzID0gZmFsc2U7CiAgICAgU3RyaW5nIHBhcmFncmFwaFN0cmluZzsKICAgICBSZWZQdHI8
UmFuZ2U+IHBhcmFncmFwaFJhbmdlOworICAgIFRleHRDaGVja2luZ0hlbHBlciBjaGVja2luZyhj
bGllbnQoKSwgZ3JhbW1hclJhbmdlKTsKIAogICAgIGlmIChzaG91bGRNYXJrR3JhbW1hcikgewog
ICAgICAgICAvLyBUaGUgc3BlbGxpbmcgcmFuZ2Ugc2hvdWxkIGJlIGNvbnRhaW5lZCBpbiB0aGUg
cGFyYWdyYXBoLWFsaWduZWQgZXh0ZW5zaW9uIG9mIHRoZSBncmFtbWFyIHJhbmdlLgotICAgICAg
ICBwYXJhZ3JhcGhSYW5nZSA9IHBhcmFncmFwaEFsaWduZWRSYW5nZUZvclJhbmdlKGdyYW1tYXJS
YW5nZSwgZ3JhbW1hclJhbmdlU3RhcnRPZmZzZXQsIHBhcmFncmFwaFN0cmluZyk7CisgICAgICAg
IHBhcmFncmFwaFJhbmdlID0gY2hlY2tpbmcucGFyYWdyYXBoQWxpZ25lZFJhbmdlKGdyYW1tYXJS
YW5nZVN0YXJ0T2Zmc2V0LCBwYXJhZ3JhcGhTdHJpbmcpOwogICAgICAgICBSZWZQdHI8UmFuZ2U+
IG9mZnNldEFzUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKHBhcmFncmFwaFJhbmdlLT5zdGFydENvbnRh
aW5lcihlYyktPmRvY3VtZW50KCksIHBhcmFncmFwaFJhbmdlLT5zdGFydFBvc2l0aW9uKCksIHNw
ZWxsaW5nUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSk7CiAgICAgICAgIHNwZWxsaW5nUmFuZ2VTdGFy
dE9mZnNldCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgob2Zmc2V0QXNSYW5nZS5nZXQoKSk7
CiAgICAgICAgIGdyYW1tYXJSYW5nZUVuZE9mZnNldCA9IGdyYW1tYXJSYW5nZVN0YXJ0T2Zmc2V0
ICsgVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChncmFtbWFyUmFuZ2UpOwogICAgIH0gZWxzZSB7
Ci0gICAgICAgIHBhcmFncmFwaFJhbmdlID0gcGFyYWdyYXBoQWxpZ25lZFJhbmdlRm9yUmFuZ2Uo
c3BlbGxpbmdSYW5nZSwgc3BlbGxpbmdSYW5nZVN0YXJ0T2Zmc2V0LCBwYXJhZ3JhcGhTdHJpbmcp
OworICAgICAgICBwYXJhZ3JhcGhSYW5nZSA9IGNoZWNraW5nLnBhcmFncmFwaEFsaWduZWRSYW5n
ZShzcGVsbGluZ1JhbmdlU3RhcnRPZmZzZXQsIHBhcmFncmFwaFN0cmluZyk7CiAgICAgfQogICAg
IHNwZWxsaW5nUmFuZ2VFbmRPZmZzZXQgPSBzcGVsbGluZ1JhbmdlU3RhcnRPZmZzZXQgKyBUZXh0
SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKHNwZWxsaW5nUmFuZ2UpOwogICAgIHBhcmFncmFwaExlbmd0
aCA9IHBhcmFncmFwaFN0cmluZy5sZW5ndGgoKTsKQEAgLTI4MTgsMTAgKzIzNzMsMTAgQEAgdm9p
ZCBFZGl0b3I6OmNoYW5nZUJhY2tUb1JlcGxhY2VkU3RyaW5nKGNvbnN0IFN0cmluZyYgcmVwbGFj
ZWRTdHJpbmcpCiAgICAgUmVmUHRyPFJhbmdlPiBzZWxlY3Rpb24gPSBzZWxlY3RlZFJhbmdlKCk7
CiAgICAgaWYgKCFzaG91bGRJbnNlcnRUZXh0KHJlcGxhY2VkU3RyaW5nLCBzZWxlY3Rpb24uZ2V0
KCksIEVkaXRvckluc2VydEFjdGlvblBhc3RlZCkpCiAgICAgICAgIHJldHVybjsKLSAgICAgICAg
CisgICAgCiAgICAgU3RyaW5nIHBhcmFncmFwaFN0cmluZzsKICAgICBpbnQgc2VsZWN0aW9uT2Zm
c2V0OwotICAgIFJlZlB0cjxSYW5nZT4gcGFyYWdyYXBoUmFuZ2UgPSBwYXJhZ3JhcGhBbGlnbmVk
UmFuZ2VGb3JSYW5nZShzZWxlY3Rpb24uZ2V0KCksIHNlbGVjdGlvbk9mZnNldCwgcGFyYWdyYXBo
U3RyaW5nKTsKKyAgICBSZWZQdHI8UmFuZ2U+IHBhcmFncmFwaFJhbmdlID0gVGV4dENoZWNraW5n
SGVscGVyKGNsaWVudCgpLCBzZWxlY3Rpb24pLnBhcmFncmFwaEFsaWduZWRSYW5nZShzZWxlY3Rp
b25PZmZzZXQsIHBhcmFncmFwaFN0cmluZyk7CiAgICAgcmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0
KHJlcGxhY2VkU3RyaW5nLCBmYWxzZSwgZmFsc2UpOwogICAgIFJlZlB0cjxSYW5nZT4gY2hhbmdl
ZFJhbmdlID0gVGV4dEl0ZXJhdG9yOjpzdWJyYW5nZShwYXJhZ3JhcGhSYW5nZS5nZXQoKSwgc2Vs
ZWN0aW9uT2Zmc2V0LCByZXBsYWNlZFN0cmluZy5sZW5ndGgoKSk7CiAgICAgY2hhbmdlZFJhbmdl
LT5zdGFydENvbnRhaW5lcigpLT5kb2N1bWVudCgpLT5tYXJrZXJzKCktPmFkZE1hcmtlcihjaGFu
Z2VkUmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpSZXBsYWNlbWVudCwgU3RyaW5nKCkpOwpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oIGIvV2ViQ29yZS9lZGl0aW5nL0Vk
aXRvci5oCmluZGV4IDBhZDQ3Mzc4MmQzYTRmNWI0ZTdjMTRkM2NlNzUwZGRiNGUzMjk1MmUuLjRm
MmZkZGY3ZDRkOTNkYTRhOWE0ZGRiYmI0OWM5ZWExNjVjZDk2ZTAgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvZWRpdGluZy9FZGl0b3IuaAorKysgYi9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgKQEAgLTM5
Miw2ICszOTIsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgcmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0
KGNvbnN0IFN0cmluZyYsIGJvb2wgc2VsZWN0UmVwbGFjZW1lbnQsIGJvb2wgc21hcnRSZXBsYWNl
KTsKICAgICB2b2lkIHdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKFBhc3RlYm9hcmQqKTsKICAg
ICB2b2lkIHJldmVhbFNlbGVjdGlvbkFmdGVyRWRpdGluZ09wZXJhdGlvbigpOworICAgIHZvaWQg
bWFya01pc3NwZWxsaW5nc09yQmFkR3JhbW1hcihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiwgYm9v
bCBjaGVja1NwZWxsaW5nLCBSZWZQdHI8UmFuZ2U+JiBmaXJzdE1pc3NwZWxsaW5nUmFuZ2UpOwog
CiAgICAgdm9pZCBzZWxlY3RDb21wb3NpdGlvbigpOwogICAgIHZvaWQgY29uZmlybUNvbXBvc2l0
aW9uKGNvbnN0IFN0cmluZyYsIGJvb2wgcHJlc2VydmVTZWxlY3Rpb24pOwpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9lZGl0aW5nL1RleHRDaGVja2luZ0hlbHBlci5jcHAgYi9XZWJDb3JlL2VkaXRpbmcv
VGV4dENoZWNraW5nSGVscGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40OTY3NGZmYzI4ZjM1OGM0YjQxNzcx
MmY4NmQ4NDI2YjVkNTJmYzNhCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9lZGl0aW5nL1Rl
eHRDaGVja2luZ0hlbHBlci5jcHAKQEAgLTAsMCArMSw1MjUgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDA4IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVz
KQorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09N
UFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGV4dENoZWNraW5nSGVs
cGVyLmgiCisKKyNpbmNsdWRlICJSYW5nZS5oIgorI2luY2x1ZGUgIlRleHRJdGVyYXRvci5oIgor
I2luY2x1ZGUgIlZpc2libGVQb3NpdGlvbi5oIgorI2luY2x1ZGUgInZpc2libGVfdW5pdHMuaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitUZXh0Q2hlY2tpbmdIZWxwZXI6OlRleHRDaGVja2lu
Z0hlbHBlcihFZGl0b3JDbGllbnQqIGNsaWVudCwgUGFzc1JlZlB0cjxSYW5nZT4gcmFuZ2UpCisg
ICAgOiBtX2NsaWVudChjbGllbnQpCisgICAgLCBtX3JhbmdlKHJhbmdlKQoreworICAgIEFTU0VS
VF9BUkcobV9jbGllbnQsIG1fY2xpZW50KTsKKyAgICBBU1NFUlRfQVJHKG1fcmFuZ2UsIG1fcmFu
Z2UpOworfQorCitUZXh0Q2hlY2tpbmdIZWxwZXI6On5UZXh0Q2hlY2tpbmdIZWxwZXIoKQorewor
fQorCitQYXNzUmVmUHRyPFJhbmdlPiBUZXh0Q2hlY2tpbmdIZWxwZXI6OnBhcmFncmFwaEFsaWdu
ZWRSYW5nZShpbnQmIG9mZnNldEludG9QYXJhZ3JhcGhBbGlnbmVkUmFuZ2UsIFN0cmluZyYgcGFy
YWdyYXBoU3RyaW5nKSBjb25zdAoreworI2lmbmRlZiBCVUlMRElOR19PTl9USUdFUgorICAgIEV4
Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIAorICAgIC8vIEV4cGFuZCByYW5nZSB0byBwYXJhZ3Jh
cGggYm91bmRhcmllcworICAgIFJlZlB0cjxSYW5nZT4gcGFyYWdyYXBoUmFuZ2UgPSBtX3Jhbmdl
LT5jbG9uZVJhbmdlKGVjKTsKKyAgICBzZXRTdGFydChwYXJhZ3JhcGhSYW5nZS5nZXQoKSwgc3Rh
cnRPZlBhcmFncmFwaChtX3JhbmdlLT5zdGFydFBvc2l0aW9uKCkpKTsKKyAgICBzZXRFbmQocGFy
YWdyYXBoUmFuZ2UuZ2V0KCksIGVuZE9mUGFyYWdyYXBoKG1fcmFuZ2UtPmVuZFBvc2l0aW9uKCkp
KTsKKyAgICAKKyAgICAvLyBDb21wdXRlIG9mZnNldCBmcm9tIHN0YXJ0IG9mIGV4cGFuZGVkIHJh
bmdlIHRvIHN0YXJ0IG9mIG9yaWdpbmFsIHJhbmdlCisgICAgUmVmUHRyPFJhbmdlPiBvZmZzZXRB
c1JhbmdlID0gUmFuZ2U6OmNyZWF0ZShwYXJhZ3JhcGhSYW5nZS0+c3RhcnRDb250YWluZXIoZWMp
LT5kb2N1bWVudCgpLCBwYXJhZ3JhcGhSYW5nZS0+c3RhcnRQb3NpdGlvbigpLCBtX3JhbmdlLT5z
dGFydFBvc2l0aW9uKCkpOworICAgIG9mZnNldEludG9QYXJhZ3JhcGhBbGlnbmVkUmFuZ2UgPSBU
ZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKG9mZnNldEFzUmFuZ2UuZ2V0KCkpOworICAgIAorICAg
IC8vIEZpbGwgaW4gb3V0IHBhcmFtZXRlciB3aXRoIHN0cmluZyByZXByZXNlbnRpbmcgZW50aXJl
IHBhcmFncmFwaCByYW5nZS4KKyAgICAvLyBTb21lZGF5IHdlIG1pZ2h0IGhhdmUgYSBjYWxsZXIg
dGhhdCBkb2Vzbid0IHVzZSB0aGlzLCBidXQgZm9yIG5vdyBhbGwgY2FsbGVycyBkby4KKyAgICBw
YXJhZ3JhcGhTdHJpbmcgPSBwbGFpblRleHQocGFyYWdyYXBoUmFuZ2UuZ2V0KCkpOworCisgICAg
cmV0dXJuIHBhcmFncmFwaFJhbmdlOworI2Vsc2UKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICBVTlVTRURfUEFSQU0ob2Zmc2V0SW50b1BhcmFncmFwaEFsaWduZWRSYW5nZSk7CisgICAg
VU5VU0VEX1BBUkFNKHBhcmFncmFwaFN0cmluZyk7CisgICAgcmV0dXJuIFBhc3NSZWZQdHI8UmFu
Z2U+KDApOworI2VuZGlmCit9CisKK1N0cmluZyBUZXh0Q2hlY2tpbmdIZWxwZXI6OmZpbmRGaXJz
dE1pc3NwZWxsaW5nKGludCYgZmlyc3RNaXNzcGVsbGluZ09mZnNldCwgYm9vbCBtYXJrQWxsLCBS
ZWZQdHI8UmFuZ2U+JiBmaXJzdE1pc3NwZWxsaW5nUmFuZ2UpCit7CisgICAgV29yZEF3YXJlSXRl
cmF0b3IgaXQobV9yYW5nZS5nZXQoKSk7CisgICAgZmlyc3RNaXNzcGVsbGluZ09mZnNldCA9IDA7
CisgICAgCisgICAgU3RyaW5nIGZpcnN0TWlzc3BlbGxpbmc7CisgICAgaW50IGN1cnJlbnRDaHVu
a09mZnNldCA9IDA7CisKKyAgICB3aGlsZSAoIWl0LmF0RW5kKCkpIHsKKyAgICAgICAgY29uc3Qg
VUNoYXIqIGNoYXJzID0gaXQuY2hhcmFjdGVycygpOworICAgICAgICBpbnQgbGVuID0gaXQubGVu
Z3RoKCk7CisgICAgICAgIAorICAgICAgICAvLyBTa2lwIHNvbWUgd29yayBmb3Igb25lLXNwYWNl
LWNoYXIgaHVua3MKKyAgICAgICAgaWYgKCEobGVuID09IDEgJiYgY2hhcnNbMF0gPT0gJyAnKSkg
eworICAgICAgICAgICAgCisgICAgICAgICAgICBpbnQgbWlzc3BlbGxpbmdMb2NhdGlvbiA9IC0x
OworICAgICAgICAgICAgaW50IG1pc3NwZWxsaW5nTGVuZ3RoID0gMDsKKyAgICAgICAgICAgIG1f
Y2xpZW50LT5jaGVja1NwZWxsaW5nT2ZTdHJpbmcoY2hhcnMsIGxlbiwgJm1pc3NwZWxsaW5nTG9j
YXRpb24sICZtaXNzcGVsbGluZ0xlbmd0aCk7CisKKyAgICAgICAgICAgIC8vIDU0OTA2Mjcgc2hv
d3MgdGhhdCB0aGVyZSB3YXMgc29tZSBjb2RlIHBhdGggaGVyZSB3aGVyZSB0aGUgU3RyaW5nIGNv
bnN0cnVjdG9yIGJlbG93IGNyYXNoZXMuCisgICAgICAgICAgICAvLyBXZSBkb24ndCBrbm93IGV4
YWN0bHkgd2hhdCBjb21iaW5hdGlvbiBvZiBiYWQgaW5wdXQgY2F1c2VkIHRoaXMsIHNvIHdlJ3Jl
IG1ha2luZyB0aGlzIG11Y2gKKyAgICAgICAgICAgIC8vIG1vcmUgcm9idXN0IGFnYWluc3QgYmFk
IGlucHV0IG9uIHJlbGVhc2UgYnVpbGRzLgorICAgICAgICAgICAgQVNTRVJUKG1pc3NwZWxsaW5n
TGVuZ3RoID49IDApOworICAgICAgICAgICAgQVNTRVJUKG1pc3NwZWxsaW5nTG9jYXRpb24gPj0g
LTEpOworICAgICAgICAgICAgQVNTRVJUKCFtaXNzcGVsbGluZ0xlbmd0aCB8fCBtaXNzcGVsbGlu
Z0xvY2F0aW9uID49IDApOworICAgICAgICAgICAgQVNTRVJUKG1pc3NwZWxsaW5nTG9jYXRpb24g
PCBsZW4pOworICAgICAgICAgICAgQVNTRVJUKG1pc3NwZWxsaW5nTGVuZ3RoIDw9IGxlbik7Cisg
ICAgICAgICAgICBBU1NFUlQobWlzc3BlbGxpbmdMb2NhdGlvbiArIG1pc3NwZWxsaW5nTGVuZ3Ro
IDw9IGxlbik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChtaXNzcGVsbGluZ0xvY2F0
aW9uID49IDAgJiYgbWlzc3BlbGxpbmdMZW5ndGggPiAwICYmIG1pc3NwZWxsaW5nTG9jYXRpb24g
PCBsZW4gJiYgbWlzc3BlbGxpbmdMZW5ndGggPD0gbGVuICYmIG1pc3NwZWxsaW5nTG9jYXRpb24g
KyBtaXNzcGVsbGluZ0xlbmd0aCA8PSBsZW4pIHsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICAvLyBDb21wdXRlIHJhbmdlIG9mIG1pc3NwZWxsZWQgd29yZAorICAgICAgICAgICAg
ICAgIFJlZlB0cjxSYW5nZT4gbWlzc3BlbGxpbmdSYW5nZSA9IFRleHRJdGVyYXRvcjo6c3VicmFu
Z2UobV9yYW5nZS5nZXQoKSwgY3VycmVudENodW5rT2Zmc2V0ICsgbWlzc3BlbGxpbmdMb2NhdGlv
biwgbWlzc3BlbGxpbmdMZW5ndGgpOworCisgICAgICAgICAgICAgICAgLy8gUmVtZW1iZXIgZmly
c3QtZW5jb3VudGVyZWQgbWlzc3BlbGxpbmcgYW5kIGl0cyBvZmZzZXQuCisgICAgICAgICAgICAg
ICAgaWYgKCFmaXJzdE1pc3NwZWxsaW5nKSB7CisgICAgICAgICAgICAgICAgICAgIGZpcnN0TWlz
c3BlbGxpbmdPZmZzZXQgPSBjdXJyZW50Q2h1bmtPZmZzZXQgKyBtaXNzcGVsbGluZ0xvY2F0aW9u
OworICAgICAgICAgICAgICAgICAgICBmaXJzdE1pc3NwZWxsaW5nID0gU3RyaW5nKGNoYXJzICsg
bWlzc3BlbGxpbmdMb2NhdGlvbiwgbWlzc3BlbGxpbmdMZW5ndGgpOworICAgICAgICAgICAgICAg
ICAgICBmaXJzdE1pc3NwZWxsaW5nUmFuZ2UgPSBtaXNzcGVsbGluZ1JhbmdlOworICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIFN0b3JlIG1hcmtlciBmb3IgbWlzc3BlbGxl
ZCB3b3JkLgorICAgICAgICAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgICAgICAg
ICAgICAgIG1pc3NwZWxsaW5nUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKGVjKS0+ZG9jdW1lbnQoKS0+
bWFya2VycygpLT5hZGRNYXJrZXIobWlzc3BlbGxpbmdSYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJr
ZXI6OlNwZWxsaW5nKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoIWVjKTsKKworICAgICAgICAg
ICAgICAgIC8vIEJhaWwgb3V0IGlmIHdlJ3JlIG1hcmtpbmcgb25seSB0aGUgZmlyc3QgbWlzc3Bl
bGxpbmcsIGFuZCBub3QgYWxsIGluc3RhbmNlcy4KKyAgICAgICAgICAgICAgICBpZiAoIW1hcmtB
bGwpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBjdXJyZW50Q2h1bmtPZmZzZXQgKz0gbGVuOworICAgICAgICBp
dC5hZHZhbmNlKCk7CisgICAgfQorICAgIAorICAgIHJldHVybiBmaXJzdE1pc3NwZWxsaW5nOwor
fQorCitTdHJpbmcgVGV4dENoZWNraW5nSGVscGVyOjpmaW5kRmlyc3RNaXNzcGVsbGluZ09yQmFk
R3JhbW1hcihib29sIGNoZWNrR3JhbW1hciwgYm9vbCYgb3V0SXNTcGVsbGluZywgaW50JiBvdXRG
aXJzdEZvdW5kT2Zmc2V0LCBHcmFtbWFyRGV0YWlsJiBvdXRHcmFtbWFyRGV0YWlsKQoreworI2lm
IFBMQVRGT1JNKE1BQykgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVk
KEJVSUxESU5HX09OX0xFT1BBUkQpCisgICAgU3RyaW5nIGZpcnN0Rm91bmRJdGVtOworICAgIFN0
cmluZyBtaXNzcGVsbGVkV29yZDsKKyAgICBTdHJpbmcgYmFkR3JhbW1hclBocmFzZTsKKyAgICBF
eGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICAKKyAgICAvLyBJbml0aWFsaXplIG91dCBwYXJhbWV0
ZXJzOyB0aGVzZSB3aWxsIGJlIHVwZGF0ZWQgaWYgd2UgZmluZCBzb21ldGhpbmcgdG8gcmV0dXJu
LgorICAgIG91dElzU3BlbGxpbmcgPSB0cnVlOworICAgIG91dEZpcnN0Rm91bmRPZmZzZXQgPSAw
OworICAgIG91dEdyYW1tYXJEZXRhaWwubG9jYXRpb24gPSAtMTsKKyAgICBvdXRHcmFtbWFyRGV0
YWlsLmxlbmd0aCA9IDA7CisgICAgb3V0R3JhbW1hckRldGFpbC5ndWVzc2VzLmNsZWFyKCk7Cisg
ICAgb3V0R3JhbW1hckRldGFpbC51c2VyRGVzY3JpcHRpb24gPSAiIjsKKyAgICAKKyAgICAvLyBF
eHBhbmQgdGhlIHNlYXJjaCByYW5nZSB0byBlbmNvbXBhc3MgZW50aXJlIHBhcmFncmFwaHMsIHNp
bmNlIHRleHQgY2hlY2tpbmcgbmVlZHMgdGhhdCBtdWNoIGNvbnRleHQuCisgICAgLy8gRGV0ZXJt
aW5lIHRoZSBjaGFyYWN0ZXIgb2Zmc2V0IGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBwYXJhZ3JhcGgg
dG8gdGhlIHN0YXJ0IG9mIHRoZSBvcmlnaW5hbCBzZWFyY2ggcmFuZ2UsCisgICAgLy8gc2luY2Ug
d2Ugd2lsbCB3YW50IHRvIGlnbm9yZSByZXN1bHRzIGluIHRoaXMgYXJlYS4KKyAgICBSZWZQdHI8
UmFuZ2U+IHBhcmFncmFwaFJhbmdlID0gbV9yYW5nZS0+Y2xvbmVSYW5nZShlYyk7CisgICAgc2V0
U3RhcnQocGFyYWdyYXBoUmFuZ2UuZ2V0KCksIHN0YXJ0T2ZQYXJhZ3JhcGgobV9yYW5nZS0+c3Rh
cnRQb3NpdGlvbigpKSk7CisgICAgaW50IHRvdGFsUmFuZ2VMZW5ndGggPSBUZXh0SXRlcmF0b3I6
OnJhbmdlTGVuZ3RoKHBhcmFncmFwaFJhbmdlLmdldCgpKTsKKyAgICBzZXRFbmQocGFyYWdyYXBo
UmFuZ2UuZ2V0KCksIGVuZE9mUGFyYWdyYXBoKG1fcmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSkpOwor
ICAgIAorICAgIFJlZlB0cjxSYW5nZT4gb2Zmc2V0QXNSYW5nZSA9IFJhbmdlOjpjcmVhdGUocGFy
YWdyYXBoUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKGVjKS0+ZG9jdW1lbnQoKSwgcGFyYWdyYXBoUmFu
Z2UtPnN0YXJ0UG9zaXRpb24oKSwgbV9yYW5nZS0+c3RhcnRQb3NpdGlvbigpKTsKKyAgICBpbnQg
cmFuZ2VTdGFydE9mZnNldCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgob2Zmc2V0QXNSYW5n
ZS5nZXQoKSk7CisgICAgaW50IHRvdGFsTGVuZ3RoUHJvY2Vzc2VkID0gMDsKKyAgICAKKyAgICBi
b29sIGZpcnN0SXRlcmF0aW9uID0gdHJ1ZTsKKyAgICBib29sIGxhc3RJdGVyYXRpb24gPSBmYWxz
ZTsKKyAgICB3aGlsZSAodG90YWxMZW5ndGhQcm9jZXNzZWQgPCB0b3RhbFJhbmdlTGVuZ3RoKSB7
CisgICAgICAgIC8vIEl0ZXJhdGUgdGhyb3VnaCB0aGUgc2VhcmNoIHJhbmdlIGJ5IHBhcmFncmFw
aHMsIGNoZWNraW5nIGVhY2ggb25lIGZvciBzcGVsbGluZyBhbmQgZ3JhbW1hci4KKyAgICAgICAg
aW50IGN1cnJlbnRMZW5ndGggPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKHBhcmFncmFwaFJh
bmdlLmdldCgpKTsKKyAgICAgICAgaW50IGN1cnJlbnRTdGFydE9mZnNldCA9IGZpcnN0SXRlcmF0
aW9uID8gcmFuZ2VTdGFydE9mZnNldCA6IDA7CisgICAgICAgIGludCBjdXJyZW50RW5kT2Zmc2V0
ID0gY3VycmVudExlbmd0aDsKKyAgICAgICAgaWYgKGluU2FtZVBhcmFncmFwaChwYXJhZ3JhcGhS
YW5nZS0+c3RhcnRQb3NpdGlvbigpLCBtX3JhbmdlLT5lbmRQb3NpdGlvbigpKSkgeworICAgICAg
ICAgICAgLy8gRGV0ZXJtaW5lIHRoZSBjaGFyYWN0ZXIgb2Zmc2V0IGZyb20gdGhlIGVuZCBvZiB0
aGUgb3JpZ2luYWwgc2VhcmNoIHJhbmdlIHRvIHRoZSBlbmQgb2YgdGhlIHBhcmFncmFwaCwKKyAg
ICAgICAgICAgIC8vIHNpbmNlIHdlIHdpbGwgd2FudCB0byBpZ25vcmUgcmVzdWx0cyBpbiB0aGlz
IGFyZWEuCisgICAgICAgICAgICBSZWZQdHI8UmFuZ2U+IGVuZE9mZnNldEFzUmFuZ2UgPSBSYW5n
ZTo6Y3JlYXRlKHBhcmFncmFwaFJhbmdlLT5zdGFydENvbnRhaW5lcihlYyktPmRvY3VtZW50KCks
IHBhcmFncmFwaFJhbmdlLT5zdGFydFBvc2l0aW9uKCksIG1fcmFuZ2UtPmVuZFBvc2l0aW9uKCkp
OworICAgICAgICAgICAgY3VycmVudEVuZE9mZnNldCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5n
dGgoZW5kT2Zmc2V0QXNSYW5nZS5nZXQoKSk7CisgICAgICAgICAgICBsYXN0SXRlcmF0aW9uID0g
dHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoY3VycmVudFN0YXJ0T2Zmc2V0IDwgY3VycmVu
dEVuZE9mZnNldCkgeworICAgICAgICAgICAgU3RyaW5nIHBhcmFncmFwaFN0cmluZyA9IHBsYWlu
VGV4dChwYXJhZ3JhcGhSYW5nZS5nZXQoKSk7CisgICAgICAgICAgICBpZiAocGFyYWdyYXBoU3Ry
aW5nLmxlbmd0aCgpID4gMCkgeworICAgICAgICAgICAgICAgIGJvb2wgZm91bmRHcmFtbWFyID0g
ZmFsc2U7CisgICAgICAgICAgICAgICAgaW50IHNwZWxsaW5nTG9jYXRpb24gPSAwOworICAgICAg
ICAgICAgICAgIGludCBncmFtbWFyUGhyYXNlTG9jYXRpb24gPSAwOworICAgICAgICAgICAgICAg
IGludCBncmFtbWFyRGV0YWlsTG9jYXRpb24gPSAwOworICAgICAgICAgICAgICAgIHVuc2lnbmVk
IGdyYW1tYXJEZXRhaWxJbmRleCA9IDA7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gcmVzdWx0czsKKyAgICAgICAgICAgICAgICB1
aW50NjRfdCBjaGVja2luZ1R5cGVzID0gY2hlY2tHcmFtbWFyID8gKFRleHRDaGVja2luZ1R5cGVT
cGVsbGluZyB8IFRleHRDaGVja2luZ1R5cGVHcmFtbWFyKSA6IFRleHRDaGVja2luZ1R5cGVTcGVs
bGluZzsKKyAgICAgICAgICAgICAgICBtX2NsaWVudC0+Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgocGFy
YWdyYXBoU3RyaW5nLmNoYXJhY3RlcnMoKSwgcGFyYWdyYXBoU3RyaW5nLmxlbmd0aCgpLCBjaGVj
a2luZ1R5cGVzLCByZXN1bHRzKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVzdWx0cy5zaXplKCk7IGkrKykgeworICAgICAgICAg
ICAgICAgICAgICBjb25zdCBUZXh0Q2hlY2tpbmdSZXN1bHQqIHJlc3VsdCA9ICZyZXN1bHRzW2ld
OworICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LT50eXBlID09IFRleHRDaGVja2luZ1R5
cGVTcGVsbGluZyAmJiByZXN1bHQtPmxvY2F0aW9uID49IGN1cnJlbnRTdGFydE9mZnNldCAmJiBy
ZXN1bHQtPmxvY2F0aW9uICsgcmVzdWx0LT5sZW5ndGggPD0gY3VycmVudEVuZE9mZnNldCkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHJlc3VsdC0+bGVuZ3RoID4gMCAmJiByZXN1
bHQtPmxvY2F0aW9uID49IDApOworICAgICAgICAgICAgICAgICAgICAgICAgc3BlbGxpbmdMb2Nh
dGlvbiA9IHJlc3VsdC0+bG9jYXRpb247CisgICAgICAgICAgICAgICAgICAgICAgICBtaXNzcGVs
bGVkV29yZCA9IHBhcmFncmFwaFN0cmluZy5zdWJzdHJpbmcocmVzdWx0LT5sb2NhdGlvbiwgcmVz
dWx0LT5sZW5ndGgpOworICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG1pc3NwZWxsZWRX
b3JkLmxlbmd0aCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmIChjaGVja0dyYW1tYXIgJiYgcmVz
dWx0LT50eXBlID09IFRleHRDaGVja2luZ1R5cGVHcmFtbWFyICYmIHJlc3VsdC0+bG9jYXRpb24g
PCBjdXJyZW50RW5kT2Zmc2V0ICYmIHJlc3VsdC0+bG9jYXRpb24gKyByZXN1bHQtPmxlbmd0aCA+
IGN1cnJlbnRTdGFydE9mZnNldCkgeworICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHJl
c3VsdC0+bGVuZ3RoID4gMCAmJiByZXN1bHQtPmxvY2F0aW9uID49IDApOworICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gV2UgY2FuJ3Qgc3RvcCBhZnRlciB0aGUgZmlyc3QgZ3JhbW1hciByZXN1
bHQsIHNpbmNlIHRoZXJlIG1pZ2h0IHN0aWxsIGJlIGEgc3BlbGxpbmcgcmVzdWx0IGFmdGVyCisg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBpdCBiZWdpbnMgYnV0IGJlZm9yZSB0aGUgZmlyc3Qg
ZGV0YWlsIGluIGl0LCBidXQgd2UgY2FuIHN0b3AgaWYgd2UgZmluZCBhIHNlY29uZCBncmFtbWFy
IHJlc3VsdC4KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmb3VuZEdyYW1tYXIpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgcmVzdWx0LT5kZXRhaWxzLnNpemUoKTsgaisrKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgR3JhbW1hckRldGFpbCogZGV0YWlsID0g
JnJlc3VsdC0+ZGV0YWlsc1tqXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQo
ZGV0YWlsLT5sZW5ndGggPiAwICYmIGRldGFpbC0+bG9jYXRpb24gPj0gMCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC0+bG9jYXRpb24gKyBkZXRhaWwtPmxvY2F0aW9u
ID49IGN1cnJlbnRTdGFydE9mZnNldCAmJiByZXN1bHQtPmxvY2F0aW9uICsgZGV0YWlsLT5sb2Nh
dGlvbiArIGRldGFpbC0+bGVuZ3RoIDw9IGN1cnJlbnRFbmRPZmZzZXQgJiYgKCFmb3VuZEdyYW1t
YXIgfHwgcmVzdWx0LT5sb2NhdGlvbiArIGRldGFpbC0+bG9jYXRpb24gPCBncmFtbWFyRGV0YWls
TG9jYXRpb24pKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyYW1tYXJEZXRh
aWxJbmRleCA9IGo7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyYW1tYXJEZXRh
aWxMb2NhdGlvbiA9IHJlc3VsdC0+bG9jYXRpb24gKyBkZXRhaWwtPmxvY2F0aW9uOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZEdyYW1tYXIgPSB0cnVlOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChmb3VuZEdyYW1tYXIpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBncmFtbWFyUGhyYXNlTG9jYXRpb24gPSByZXN1bHQtPmxvY2F0aW9uOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG91dEdyYW1tYXJEZXRhaWwgPSByZXN1bHQtPmRldGFpbHNb
Z3JhbW1hckRldGFpbEluZGV4XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWRHcmFt
bWFyUGhyYXNlID0gcGFyYWdyYXBoU3RyaW5nLnN1YnN0cmluZyhyZXN1bHQtPmxvY2F0aW9uLCBy
ZXN1bHQtPmxlbmd0aCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGJhZEdy
YW1tYXJQaHJhc2UubGVuZ3RoKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYg
KCFtaXNzcGVsbGVkV29yZC5pc0VtcHR5KCkgJiYgKCFjaGVja0dyYW1tYXIgfHwgYmFkR3JhbW1h
clBocmFzZS5pc0VtcHR5KCkgfHwgc3BlbGxpbmdMb2NhdGlvbiA8PSBncmFtbWFyRGV0YWlsTG9j
YXRpb24pKSB7CisgICAgICAgICAgICAgICAgICAgIGludCBzcGVsbGluZ09mZnNldCA9IHNwZWxs
aW5nTG9jYXRpb24gLSBjdXJyZW50U3RhcnRPZmZzZXQ7CisgICAgICAgICAgICAgICAgICAgIGlm
ICghZmlyc3RJdGVyYXRpb24pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJlZlB0cjxSYW5n
ZT4gcGFyYWdyYXBoT2Zmc2V0QXNSYW5nZSA9IFJhbmdlOjpjcmVhdGUocGFyYWdyYXBoUmFuZ2Ut
PnN0YXJ0Q29udGFpbmVyKGVjKS0+ZG9jdW1lbnQoKSwgbV9yYW5nZS0+c3RhcnRQb3NpdGlvbigp
LCBwYXJhZ3JhcGhSYW5nZS0+c3RhcnRQb3NpdGlvbigpKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHNwZWxsaW5nT2Zmc2V0ICs9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgocGFyYWdyYXBo
T2Zmc2V0QXNSYW5nZS5nZXQoKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgb3V0SXNTcGVsbGluZyA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIG91dEZp
cnN0Rm91bmRPZmZzZXQgPSBzcGVsbGluZ09mZnNldDsKKyAgICAgICAgICAgICAgICAgICAgZmly
c3RGb3VuZEl0ZW0gPSBtaXNzcGVsbGVkV29yZDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChjaGVja0dyYW1tYXIgJiYg
IWJhZEdyYW1tYXJQaHJhc2UuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgICAgIGludCBn
cmFtbWFyUGhyYXNlT2Zmc2V0ID0gZ3JhbW1hclBocmFzZUxvY2F0aW9uIC0gY3VycmVudFN0YXJ0
T2Zmc2V0OworICAgICAgICAgICAgICAgICAgICBpZiAoIWZpcnN0SXRlcmF0aW9uKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBSZWZQdHI8UmFuZ2U+IHBhcmFncmFwaE9mZnNldEFzUmFuZ2Ug
PSBSYW5nZTo6Y3JlYXRlKHBhcmFncmFwaFJhbmdlLT5zdGFydENvbnRhaW5lcihlYyktPmRvY3Vt
ZW50KCksIG1fcmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSwgcGFyYWdyYXBoUmFuZ2UtPnN0YXJ0UG9z
aXRpb24oKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBncmFtbWFyUGhyYXNlT2Zmc2V0ICs9
IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgocGFyYWdyYXBoT2Zmc2V0QXNSYW5nZS5nZXQoKSk7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgb3V0SXNTcGVsbGlu
ZyA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBvdXRGaXJzdEZvdW5kT2Zmc2V0ID0gZ3Jh
bW1hclBocmFzZU9mZnNldDsKKyAgICAgICAgICAgICAgICAgICAgZmlyc3RGb3VuZEl0ZW0gPSBi
YWRHcmFtbWFyUGhyYXNlOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGxhc3RJdGVyYXRp
b24gfHwgdG90YWxMZW5ndGhQcm9jZXNzZWQgKyBjdXJyZW50TGVuZ3RoID49IHRvdGFsUmFuZ2VM
ZW5ndGgpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgVmlzaWJsZVBvc2l0aW9uIG5ld1Bh
cmFncmFwaFN0YXJ0ID0gc3RhcnRPZk5leHRQYXJhZ3JhcGgocGFyYWdyYXBoUmFuZ2UtPmVuZFBv
c2l0aW9uKCkpOworICAgICAgICBzZXRTdGFydChwYXJhZ3JhcGhSYW5nZS5nZXQoKSwgbmV3UGFy
YWdyYXBoU3RhcnQpOworICAgICAgICBzZXRFbmQocGFyYWdyYXBoUmFuZ2UuZ2V0KCksIGVuZE9m
UGFyYWdyYXBoKG5ld1BhcmFncmFwaFN0YXJ0KSk7CisgICAgICAgIGZpcnN0SXRlcmF0aW9uID0g
ZmFsc2U7CisgICAgICAgIHRvdGFsTGVuZ3RoUHJvY2Vzc2VkICs9IGN1cnJlbnRMZW5ndGg7Cisg
ICAgfQorICAgIHJldHVybiBmaXJzdEZvdW5kSXRlbTsKKyNlbHNlCisgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgVU5VU0VEX1BBUkFNKGNoZWNrR3JhbW1hcik7CisgICAgVU5VU0VEX1BB
UkFNKG91dElzU3BlbGxpbmcpOworICAgIFVOVVNFRF9QQVJBTShvdXRGaXJzdEZvdW5kT2Zmc2V0
KTsKKyAgICBVTlVTRURfUEFSQU0ob3V0R3JhbW1hckRldGFpbCk7CisgICAgcmV0dXJuICIiOwor
I2VuZGlmCit9CisKK2ludCBUZXh0Q2hlY2tpbmdIZWxwZXI6OmZpbmRGaXJzdEdyYW1tYXJEZXRh
aWwoY29uc3QgVmVjdG9yPEdyYW1tYXJEZXRhaWw+JiBncmFtbWFyRGV0YWlscywgaW50IGJhZEdy
YW1tYXJQaHJhc2VMb2NhdGlvbiwgaW50IC8qYmFkR3JhbW1hclBocmFzZUxlbmd0aCovLCBpbnQg
c3RhcnRPZmZzZXQsIGludCBlbmRPZmZzZXQsIGJvb2wgbWFya0FsbCkKK3sKKyNpZm5kZWYgQlVJ
TERJTkdfT05fVElHRVIKKyAgICAvLyBGb3VuZCBzb21lIGJhZCBncmFtbWFyLiBGaW5kIHRoZSBl
YXJsaWVzdCBkZXRhaWwgcmFuZ2UgdGhhdCBzdGFydHMgaW4gb3VyIHNlYXJjaCByYW5nZSAoaWYg
YW55KS4KKyAgICAvLyBPcHRpb25hbGx5IGFkZCBhIERvY3VtZW50TWFya2VyIGZvciBlYWNoIGRl
dGFpbCBpbiB0aGUgcmFuZ2UuCisgICAgaW50IGVhcmxpZXN0RGV0YWlsTG9jYXRpb25Tb0ZhciA9
IC0xOworICAgIGludCBlYXJsaWVzdERldGFpbEluZGV4ID0gLTE7CisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGdyYW1tYXJEZXRhaWxzLnNpemUoKTsgaSsrKSB7CisgICAgICAgIGNvbnN0
IEdyYW1tYXJEZXRhaWwqIGRldGFpbCA9ICZncmFtbWFyRGV0YWlsc1tpXTsKKyAgICAgICAgQVNT
RVJUKGRldGFpbC0+bGVuZ3RoID4gMCAmJiBkZXRhaWwtPmxvY2F0aW9uID49IDApOworICAgICAg
ICAKKyAgICAgICAgaW50IGRldGFpbFN0YXJ0T2Zmc2V0SW5QYXJhZ3JhcGggPSBiYWRHcmFtbWFy
UGhyYXNlTG9jYXRpb24gKyBkZXRhaWwtPmxvY2F0aW9uOworICAgICAgICAKKyAgICAgICAgLy8g
U2tpcCB0aGlzIGRldGFpbCBpZiBpdCBzdGFydHMgYmVmb3JlIHRoZSBvcmlnaW5hbCBzZWFyY2gg
cmFuZ2UKKyAgICAgICAgaWYgKGRldGFpbFN0YXJ0T2Zmc2V0SW5QYXJhZ3JhcGggPCBzdGFydE9m
ZnNldCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAKKyAgICAgICAgLy8gU2tpcCB0
aGlzIGRldGFpbCBpZiBpdCBzdGFydHMgYWZ0ZXIgdGhlIG9yaWdpbmFsIHNlYXJjaCByYW5nZQor
ICAgICAgICBpZiAoZGV0YWlsU3RhcnRPZmZzZXRJblBhcmFncmFwaCA+PSBlbmRPZmZzZXQpCisg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgCisgICAgICAgIGlmIChtYXJrQWxsKSB7Cisg
ICAgICAgICAgICBSZWZQdHI8UmFuZ2U+IGJhZEdyYW1tYXJSYW5nZSA9IFRleHRJdGVyYXRvcjo6
c3VicmFuZ2UobV9yYW5nZS5nZXQoKSwgYmFkR3JhbW1hclBocmFzZUxvY2F0aW9uIC0gc3RhcnRP
ZmZzZXQgKyBkZXRhaWwtPmxvY2F0aW9uLCBkZXRhaWwtPmxlbmd0aCk7CisgICAgICAgICAgICBF
eGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICAgICAgICAgIGJhZEdyYW1tYXJSYW5nZS0+c3RhcnRD
b250YWluZXIoZWMpLT5kb2N1bWVudCgpLT5tYXJrZXJzKCktPmFkZE1hcmtlcihiYWRHcmFtbWFy
UmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpHcmFtbWFyLCBkZXRhaWwtPnVzZXJEZXNjcmlw
dGlvbik7CisgICAgICAgICAgICBBU1NFUlQoIWVjKTsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgLy8gUmVtZW1iZXIgdGhpcyBkZXRhaWwgb25seSBpZiBpdCdzIGVhcmxpZXIgdGhhbiBv
dXIgY3VycmVudCBjYW5kaWRhdGUgKHRoZSBkZXRhaWxzIGFyZW4ndCBpbiBhIGd1YXJhbnRlZWQg
b3JkZXIpCisgICAgICAgIGlmIChlYXJsaWVzdERldGFpbEluZGV4IDwgMCB8fCBlYXJsaWVzdERl
dGFpbExvY2F0aW9uU29GYXIgPiBkZXRhaWwtPmxvY2F0aW9uKSB7CisgICAgICAgICAgICBlYXJs
aWVzdERldGFpbEluZGV4ID0gaTsKKyAgICAgICAgICAgIGVhcmxpZXN0RGV0YWlsTG9jYXRpb25T
b0ZhciA9IGRldGFpbC0+bG9jYXRpb247CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgcmV0
dXJuIGVhcmxpZXN0RGV0YWlsSW5kZXg7CisjZWxzZQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgIFVOVVNFRF9QQVJBTShncmFtbWFyRGV0YWlscyk7CisgICAgVU5VU0VEX1BBUkFNKGJh
ZEdyYW1tYXJQaHJhc2VMb2NhdGlvbik7CisgICAgVU5VU0VEX1BBUkFNKHN0YXJ0T2Zmc2V0KTsK
KyAgICBVTlVTRURfUEFSQU0oZW5kT2Zmc2V0KTsKKyAgICBVTlVTRURfUEFSQU0obWFya0FsbCk7
CisgICAgcmV0dXJuIDA7CisjZW5kaWYKK30KKworU3RyaW5nIFRleHRDaGVja2luZ0hlbHBlcjo6
ZmluZEZpcnN0QmFkR3JhbW1hcihHcmFtbWFyRGV0YWlsJiBvdXRHcmFtbWFyRGV0YWlsLCBpbnQm
IG91dEdyYW1tYXJQaHJhc2VPZmZzZXQsIGJvb2wgbWFya0FsbCkKK3sKKyNpZm5kZWYgQlVJTERJ
TkdfT05fVElHRVIKKyAgICAvLyBJbml0aWFsaXplIG91dCBwYXJhbWV0ZXJzOyB0aGVzZSB3aWxs
IGJlIHVwZGF0ZWQgaWYgd2UgZmluZCBzb21ldGhpbmcgdG8gcmV0dXJuLgorICAgIG91dEdyYW1t
YXJEZXRhaWwubG9jYXRpb24gPSAtMTsKKyAgICBvdXRHcmFtbWFyRGV0YWlsLmxlbmd0aCA9IDA7
CisgICAgb3V0R3JhbW1hckRldGFpbC5ndWVzc2VzLmNsZWFyKCk7CisgICAgb3V0R3JhbW1hckRl
dGFpbC51c2VyRGVzY3JpcHRpb24gPSAiIjsKKyAgICBvdXRHcmFtbWFyUGhyYXNlT2Zmc2V0ID0g
MDsKKyAgICAKKyAgICBTdHJpbmcgZmlyc3RCYWRHcmFtbWFyUGhyYXNlOworCisgICAgLy8gRXhw
YW5kIHRoZSBzZWFyY2ggcmFuZ2UgdG8gZW5jb21wYXNzIGVudGlyZSBwYXJhZ3JhcGhzLCBzaW5j
ZSBncmFtbWFyIGNoZWNraW5nIG5lZWRzIHRoYXQgbXVjaCBjb250ZXh0LgorICAgIC8vIERldGVy
bWluZSB0aGUgY2hhcmFjdGVyIG9mZnNldCBmcm9tIHRoZSBzdGFydCBvZiB0aGUgcGFyYWdyYXBo
IHRvIHRoZSBzdGFydCBvZiB0aGUgb3JpZ2luYWwgc2VhcmNoIHJhbmdlLAorICAgIC8vIHNpbmNl
IHdlIHdpbGwgd2FudCB0byBpZ25vcmUgcmVzdWx0cyBpbiB0aGlzIGFyZWEuCisgICAgaW50IHNl
YXJjaFJhbmdlU3RhcnRPZmZzZXQ7CisgICAgU3RyaW5nIHBhcmFncmFwaFN0cmluZzsKKyAgICBS
ZWZQdHI8UmFuZ2U+IHBhcmFncmFwaFJhbmdlID0gcGFyYWdyYXBoQWxpZ25lZFJhbmdlKHNlYXJj
aFJhbmdlU3RhcnRPZmZzZXQsIHBhcmFncmFwaFN0cmluZyk7CisgICAgICAgIAorICAgIC8vIERl
dGVybWluZSB0aGUgY2hhcmFjdGVyIG9mZnNldCBmcm9tIHRoZSBzdGFydCBvZiB0aGUgcGFyYWdy
YXBoIHRvIHRoZSBlbmQgb2YgdGhlIG9yaWdpbmFsIHNlYXJjaCByYW5nZSwgCisgICAgLy8gc2lu
Y2Ugd2Ugd2lsbCB3YW50IHRvIGlnbm9yZSByZXN1bHRzIGluIHRoaXMgYXJlYSBhbHNvLgorICAg
IGludCBzZWFyY2hSYW5nZUVuZE9mZnNldCA9IHNlYXJjaFJhbmdlU3RhcnRPZmZzZXQgKyBUZXh0
SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKG1fcmFuZ2UuZ2V0KCkpOworICAgICAgICAKKyAgICAvLyBT
dGFydCBjaGVja2luZyBmcm9tIGJlZ2lubmluZyBvZiBwYXJhZ3JhcGgsIGJ1dCBza2lwIHBhc3Qg
cmVzdWx0cyB0aGF0IG9jY3VyIGJlZm9yZSB0aGUgc3RhcnQgb2YgdGhlIG9yaWdpbmFsIHNlYXJj
aCByYW5nZS4KKyAgICBpbnQgc3RhcnRPZmZzZXQgPSAwOworICAgIHdoaWxlIChzdGFydE9mZnNl
dCA8IHNlYXJjaFJhbmdlRW5kT2Zmc2V0KSB7CisgICAgICAgIFZlY3RvcjxHcmFtbWFyRGV0YWls
PiBncmFtbWFyRGV0YWlsczsKKyAgICAgICAgaW50IGJhZEdyYW1tYXJQaHJhc2VMb2NhdGlvbiA9
IC0xOworICAgICAgICBpbnQgYmFkR3JhbW1hclBocmFzZUxlbmd0aCA9IDA7CisgICAgICAgIG1f
Y2xpZW50LT5jaGVja0dyYW1tYXJPZlN0cmluZyhwYXJhZ3JhcGhTdHJpbmcuY2hhcmFjdGVycygp
ICsgc3RhcnRPZmZzZXQsIHBhcmFncmFwaFN0cmluZy5sZW5ndGgoKSAtIHN0YXJ0T2Zmc2V0LCBn
cmFtbWFyRGV0YWlscywgJmJhZEdyYW1tYXJQaHJhc2VMb2NhdGlvbiwgJmJhZEdyYW1tYXJQaHJh
c2VMZW5ndGgpOworICAgICAgICAKKyAgICAgICAgaWYgKCFiYWRHcmFtbWFyUGhyYXNlTGVuZ3Ro
KSB7CisgICAgICAgICAgICBBU1NFUlQoYmFkR3JhbW1hclBocmFzZUxvY2F0aW9uID09IC0xKTsK
KyAgICAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICAgICAgfQorCisgICAgICAgIEFTU0VS
VChiYWRHcmFtbWFyUGhyYXNlTG9jYXRpb24gPj0gMCk7CisgICAgICAgIGJhZEdyYW1tYXJQaHJh
c2VMb2NhdGlvbiArPSBzdGFydE9mZnNldDsKKworICAgICAgICAKKyAgICAgICAgLy8gRm91bmQg
c29tZSBiYWQgZ3JhbW1hci4gRmluZCB0aGUgZWFybGllc3QgZGV0YWlsIHJhbmdlIHRoYXQgc3Rh
cnRzIGluIG91ciBzZWFyY2ggcmFuZ2UgKGlmIGFueSkuCisgICAgICAgIGludCBiYWRHcmFtbWFy
SW5kZXggPSBmaW5kRmlyc3RHcmFtbWFyRGV0YWlsKGdyYW1tYXJEZXRhaWxzLCBiYWRHcmFtbWFy
UGhyYXNlTG9jYXRpb24sIGJhZEdyYW1tYXJQaHJhc2VMZW5ndGgsIHNlYXJjaFJhbmdlU3RhcnRP
ZmZzZXQsIHNlYXJjaFJhbmdlRW5kT2Zmc2V0LCBtYXJrQWxsKTsKKyAgICAgICAgaWYgKGJhZEdy
YW1tYXJJbmRleCA+PSAwKSB7CisgICAgICAgICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KGJhZEdyYW1tYXJJbmRleCkgPCBncmFtbWFyRGV0YWlscy5zaXplKCkpOworICAgICAgICAg
ICAgb3V0R3JhbW1hckRldGFpbCA9IGdyYW1tYXJEZXRhaWxzW2JhZEdyYW1tYXJJbmRleF07Cisg
ICAgICAgIH0KKworICAgICAgICAvLyBJZiB3ZSBmb3VuZCBhIGRldGFpbCBpbiByYW5nZSwgdGhl
biB3ZSBoYXZlIGZvdW5kIHRoZSBmaXJzdCBiYWQgcGhyYXNlICh1bmxlc3Mgd2UgZm91bmQgb25l
IGVhcmxpZXIgYnV0CisgICAgICAgIC8vIGtlcHQgZ29pbmcgc28gd2UgY291bGQgbWFyayBhbGwg
aW5zdGFuY2VzKS4KKyAgICAgICAgaWYgKGJhZEdyYW1tYXJJbmRleCA+PSAwICYmIGZpcnN0QmFk
R3JhbW1hclBocmFzZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIG91dEdyYW1tYXJQaHJhc2VP
ZmZzZXQgPSBiYWRHcmFtbWFyUGhyYXNlTG9jYXRpb24gLSBzZWFyY2hSYW5nZVN0YXJ0T2Zmc2V0
OworICAgICAgICAgICAgZmlyc3RCYWRHcmFtbWFyUGhyYXNlID0gcGFyYWdyYXBoU3RyaW5nLnN1
YnN0cmluZyhiYWRHcmFtbWFyUGhyYXNlTG9jYXRpb24sIGJhZEdyYW1tYXJQaHJhc2VMZW5ndGgp
OworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBGb3VuZCBvbmUuIFdlJ3JlIGRvbmUgbm93
LCB1bmxlc3Mgd2UncmUgbWFya2luZyBlYWNoIGluc3RhbmNlLgorICAgICAgICAgICAgaWYgKCFt
YXJrQWxsKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgLy8g
VGhlc2UgcmVzdWx0cyB3ZXJlIGFsbCBiZXR3ZWVuIHRoZSBzdGFydCBvZiB0aGUgcGFyYWdyYXBo
IGFuZCB0aGUgc3RhcnQgb2YgdGhlIHNlYXJjaCByYW5nZTsgbG9vaworICAgICAgICAvLyBiZXlv
bmQgdGhpcyBwaHJhc2UuCisgICAgICAgIHN0YXJ0T2Zmc2V0ID0gYmFkR3JhbW1hclBocmFzZUxv
Y2F0aW9uICsgYmFkR3JhbW1hclBocmFzZUxlbmd0aDsKKyAgICB9CisgICAgCisgICAgcmV0dXJu
IGZpcnN0QmFkR3JhbW1hclBocmFzZTsKKyNlbHNlCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgVU5VU0VEX1BBUkFNKG91dEdyYW1tYXJEZXRhaWwpOworICAgIFVOVVNFRF9QQVJBTShv
dXRHcmFtbWFyUGhyYXNlT2Zmc2V0KTsKKyAgICBVTlVTRURfUEFSQU0obWFya0FsbCk7CisjZW5k
aWYKK30KKworCitib29sIFRleHRDaGVja2luZ0hlbHBlcjo6aXNVbmdyYW1tYXRpY2FsKFZlY3Rv
cjxTdHJpbmc+JiBndWVzc2VzVmVjdG9yKSBjb25zdAoreworI2lmbmRlZiBCVUlMRElOR19PTl9U
SUdFUgorICAgIGlmICghbV9jbGllbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEV4
Y2VwdGlvbkNvZGUgZWM7CisgICAgaWYgKCFtX3JhbmdlIHx8IG1fcmFuZ2UtPmNvbGxhcHNlZChl
YykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICAvLyBSZXR1cm5zIHRydWUgb25s
eSBpZiB0aGUgcGFzc2VkIHJhbmdlIGV4YWN0bHkgY29ycmVzcG9uZHMgdG8gYSBiYWQgZ3JhbW1h
ciBkZXRhaWwgcmFuZ2UuIFRoaXMgaXMgYW5hbG9nb3VzCisgICAgLy8gdG8gaXNTZWxlY3Rpb25N
aXNzcGVsbGVkLiBJdCdzIG5vdCBnb29kIGVub3VnaCBmb3IgdGhlcmUgdG8gYmUgc29tZSBiYWQg
Z3JhbW1hciBzb21ld2hlcmUgaW4gdGhlIHJhbmdlLAorICAgIC8vIG9yIG92ZXJsYXBwaW5nIHRo
ZSByYW5nZTsgdGhlIHJhbmdlcyBtdXN0IGV4YWN0bHkgbWF0Y2guCisgICAgZ3Vlc3Nlc1ZlY3Rv
ci5jbGVhcigpOworICAgIGludCBncmFtbWFyUGhyYXNlT2Zmc2V0OworICAgIAorICAgIEdyYW1t
YXJEZXRhaWwgZ3JhbW1hckRldGFpbDsKKyAgICBTdHJpbmcgYmFkR3JhbW1hclBocmFzZSA9IGNv
bnN0X2Nhc3Q8VGV4dENoZWNraW5nSGVscGVyKj4odGhpcyktPmZpbmRGaXJzdEJhZEdyYW1tYXIo
Z3JhbW1hckRldGFpbCwgZ3JhbW1hclBocmFzZU9mZnNldCwgZmFsc2UpOyAgICAKKyAgICAKKyAg
ICAvLyBObyBiYWQgZ3JhbW1hciBpbiB0aGVzZSBwYXJ0cyBhdCBhbGwuCisgICAgaWYgKGJhZEdy
YW1tYXJQaHJhc2UuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAg
Ly8gQmFkIGdyYW1tYXIsIGJ1dCBwaHJhc2UgKGUuZy4gc2VudGVuY2UpIHN0YXJ0cyBiZXlvbmQg
c3RhcnQgb2YgcmFuZ2UuCisgICAgaWYgKGdyYW1tYXJQaHJhc2VPZmZzZXQgPiAwKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgQVNTRVJUKGdyYW1tYXJEZXRhaWwubG9jYXRpb24g
Pj0gMCAmJiBncmFtbWFyRGV0YWlsLmxlbmd0aCA+IDApOworICAgIAorICAgIC8vIEJhZCBncmFt
bWFyLCBidXQgc3RhcnQgb2YgZGV0YWlsIChlLmcuIHVuZ3JhbW1hdGljYWwgd29yZCkgZG9lc24n
dCBtYXRjaCBzdGFydCBvZiByYW5nZQorICAgIGlmIChncmFtbWFyRGV0YWlsLmxvY2F0aW9uICsg
Z3JhbW1hclBocmFzZU9mZnNldCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIC8v
IEJhZCBncmFtbWFyIGF0IHN0YXJ0IG9mIHJhbmdlLCBidXQgZW5kIG9mIGJhZCBncmFtbWFyIGlz
IGJlZm9yZSBvciBhZnRlciBlbmQgb2YgcmFuZ2UKKyAgICBpZiAoZ3JhbW1hckRldGFpbC5sZW5n
dGggIT0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChtX3JhbmdlLmdldCgpKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIAorICAgIC8vIFVwZGF0ZSB0aGUgc3BlbGxpbmcgcGFuZWwgdG8g
YmUgZGlzcGxheWluZyB0aGlzIGVycm9yICh3aGV0aGVyIG9yIG5vdCB0aGUgc3BlbGxpbmcgcGFu
ZWwgaXMgb24gc2NyZWVuKS4KKyAgICAvLyBUaGlzIGlzIG5lY2Vzc2FyeSB0byBtYWtlIGEgc3Vi
c2VxdWVudCBjYWxsIHRvIFtOU1NwZWxsQ2hlY2tlciBpZ25vcmVXb3JkOmluU3BlbGxEb2N1bWVu
dFdpdGhUYWc6XSB3b3JrCisgICAgLy8gY29ycmVjdGx5OyB0aGF0IGNhbGwgYmVoYXZlcyBkaWZm
ZXJlbnRseSBiYXNlZCBvbiB3aGV0aGVyIHRoZSBzcGVsbGluZyBwYW5lbCBpcyBkaXNwbGF5aW5n
IGEgbWlzc3BlbGxpbmcKKyAgICAvLyBvciBhIGdyYW1tYXIgZXJyb3IuCisgICAgbV9jbGllbnQt
PnVwZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0cmluZyhiYWRHcmFtbWFyUGhyYXNlLCBncmFt
bWFyRGV0YWlsKTsKKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKKyNlbHNlCisgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgVU5VU0VEX1BBUkFNKGd1ZXNzZXNWZWN0b3IpOworICAgIHJldHVy
biB0cnVlOworI2VuZGlmCit9CisKK1ZlY3RvcjxTdHJpbmc+IFRleHRDaGVja2luZ0hlbHBlcjo6
Z3Vlc3Nlc0Zvck1pc3NwZWxsZWRPclVuZ3JhbW1hdGljYWxSYW5nZShib29sIGNoZWNrR3JhbW1h
ciwgYm9vbCYgbWlzc3BlbGxlZCwgYm9vbCYgdW5ncmFtbWF0aWNhbCkgY29uc3QKK3sKKyNpZiBQ
TEFURk9STShNQUMpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChC
VUlMRElOR19PTl9MRU9QQVJEKQorICAgIFZlY3RvcjxTdHJpbmc+IGd1ZXNzZXM7CisgICAgRXhj
ZXB0aW9uQ29kZSBlYzsKKyAgICBtaXNzcGVsbGVkID0gZmFsc2U7CisgICAgdW5ncmFtbWF0aWNh
bCA9IGZhbHNlOworICAgIAorICAgIGlmICghbV9jbGllbnQgfHwgIW1fcmFuZ2UgfHwgbV9yYW5n
ZS0+Y29sbGFwc2VkKGVjKSkKKyAgICAgICAgcmV0dXJuIGd1ZXNzZXM7CisKKyAgICAvLyBFeHBh
bmQgdGhlIHJhbmdlIHRvIGVuY29tcGFzcyBlbnRpcmUgcGFyYWdyYXBocywgc2luY2UgdGV4dCBj
aGVja2luZyBuZWVkcyB0aGF0IG11Y2ggY29udGV4dC4KKyAgICBpbnQgcmFuZ2VTdGFydE9mZnNl
dDsKKyAgICBTdHJpbmcgcGFyYWdyYXBoU3RyaW5nOworICAgIFJlZlB0cjxSYW5nZT4gcGFyYWdy
YXBoUmFuZ2UgPSBwYXJhZ3JhcGhBbGlnbmVkUmFuZ2UocmFuZ2VTdGFydE9mZnNldCwgcGFyYWdy
YXBoU3RyaW5nKTsKKyAgICBpbnQgcmFuZ2VMZW5ndGggPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVu
Z3RoKG1fcmFuZ2UuZ2V0KCkpOworICAgIGlmICghcmFuZ2VMZW5ndGggfHwgIXBhcmFncmFwaFN0
cmluZy5sZW5ndGgoKSkKKyAgICAgICAgcmV0dXJuIGd1ZXNzZXM7CisKKyAgICBWZWN0b3I8VGV4
dENoZWNraW5nUmVzdWx0PiByZXN1bHRzOworICAgIHVpbnQ2NF90IGNoZWNraW5nVHlwZXMgPSBj
aGVja0dyYW1tYXIgPyAoVGV4dENoZWNraW5nVHlwZVNwZWxsaW5nIHwgVGV4dENoZWNraW5nVHlw
ZUdyYW1tYXIpIDogVGV4dENoZWNraW5nVHlwZVNwZWxsaW5nOworICAgIG1fY2xpZW50LT5jaGVj
a1RleHRPZlBhcmFncmFwaChwYXJhZ3JhcGhTdHJpbmcuY2hhcmFjdGVycygpLCBwYXJhZ3JhcGhT
dHJpbmcubGVuZ3RoKCksIGNoZWNraW5nVHlwZXMsIHJlc3VsdHMpOworICAgIAorICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCByZXN1bHRzLnNpemUoKTsgaSsrKSB7CisgICAgICAgIGNvbnN0
IFRleHRDaGVja2luZ1Jlc3VsdCogcmVzdWx0ID0gJnJlc3VsdHNbaV07CisgICAgICAgIGlmIChy
ZXN1bHQtPnR5cGUgPT0gVGV4dENoZWNraW5nVHlwZVNwZWxsaW5nICYmIHJlc3VsdC0+bG9jYXRp
b24gPT0gcmFuZ2VTdGFydE9mZnNldCAmJiByZXN1bHQtPmxlbmd0aCA9PSByYW5nZUxlbmd0aCkg
eworICAgICAgICAgICAgU3RyaW5nIG1pc3NwZWxsZWRXb3JkID0gcGFyYWdyYXBoU3RyaW5nLnN1
YnN0cmluZyhyYW5nZVN0YXJ0T2Zmc2V0LCByYW5nZUxlbmd0aCk7CisgICAgICAgICAgICBBU1NF
UlQobWlzc3BlbGxlZFdvcmQubGVuZ3RoKCkpOworICAgICAgICAgICAgbV9jbGllbnQtPmdldEd1
ZXNzZXNGb3JXb3JkKG1pc3NwZWxsZWRXb3JkLCBndWVzc2VzKTsKKyAgICAgICAgICAgIG1fY2xp
ZW50LT51cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKG1pc3NwZWxsZWRXb3JkKTsK
KyAgICAgICAgICAgIG1pc3NwZWxsZWQgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIGd1ZXNz
ZXM7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgaWYgKCFjaGVja0dyYW1tYXIpCisgICAg
ICAgIHJldHVybiBndWVzc2VzOworICAgICAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgcmVzdWx0cy5zaXplKCk7IGkrKykgeworICAgICAgICBjb25zdCBUZXh0Q2hlY2tpbmdSZXN1
bHQqIHJlc3VsdCA9ICZyZXN1bHRzW2ldOworICAgICAgICBpZiAocmVzdWx0LT50eXBlID09IFRl
eHRDaGVja2luZ1R5cGVHcmFtbWFyICYmIHJlc3VsdC0+bG9jYXRpb24gPD0gcmFuZ2VTdGFydE9m
ZnNldCAmJiByZXN1bHQtPmxvY2F0aW9uICsgcmVzdWx0LT5sZW5ndGggPj0gcmFuZ2VTdGFydE9m
ZnNldCArIHJhbmdlTGVuZ3RoKSB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBq
IDwgcmVzdWx0LT5kZXRhaWxzLnNpemUoKTsgaisrKSB7CisgICAgICAgICAgICAgICAgY29uc3Qg
R3JhbW1hckRldGFpbCogZGV0YWlsID0gJnJlc3VsdC0+ZGV0YWlsc1tqXTsKKyAgICAgICAgICAg
ICAgICBBU1NFUlQoZGV0YWlsLT5sZW5ndGggPiAwICYmIGRldGFpbC0+bG9jYXRpb24gPj0gMCk7
CisgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC0+bG9jYXRpb24gKyBkZXRhaWwtPmxvY2F0aW9u
ID09IHJhbmdlU3RhcnRPZmZzZXQgJiYgZGV0YWlsLT5sZW5ndGggPT0gcmFuZ2VMZW5ndGgpIHsK
KyAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGJhZEdyYW1tYXJQaHJhc2UgPSBwYXJhZ3JhcGhT
dHJpbmcuc3Vic3RyaW5nKHJlc3VsdC0+bG9jYXRpb24sIHJlc3VsdC0+bGVuZ3RoKTsKKyAgICAg
ICAgICAgICAgICAgICAgQVNTRVJUKGJhZEdyYW1tYXJQaHJhc2UubGVuZ3RoKCkpOworICAgICAg
ICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGsgPSAwOyBrIDwgZGV0YWlsLT5ndWVzc2VzLnNp
emUoKTsgaysrKQorICAgICAgICAgICAgICAgICAgICAgICAgZ3Vlc3Nlcy5hcHBlbmQoZGV0YWls
LT5ndWVzc2VzW2tdKTsKKyAgICAgICAgICAgICAgICAgICAgbV9jbGllbnQtPnVwZGF0ZVNwZWxs
aW5nVUlXaXRoR3JhbW1hclN0cmluZyhiYWRHcmFtbWFyUGhyYXNlLCAqZGV0YWlsKTsKKyAgICAg
ICAgICAgICAgICAgICAgdW5ncmFtbWF0aWNhbCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBndWVzc2VzOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH0KKyAgICByZXR1cm4gZ3Vlc3NlczsKKyNlbHNlCisgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgVU5VU0VEX1BBUkFNKGNoZWNrR3JhbW1hcik7CisgICAgVU5VU0VEX1BB
UkFNKG1pc3NwZWxsZWQpOworICAgIFVOVVNFRF9QQVJBTSh1bmdyYW1tYXRpY2FsKTsKKyAgICBy
ZXR1cm4gVmVjdG9yPFN0cmluZz4oKTsKKyNlbmRpZgorfQorCisKK3ZvaWQgVGV4dENoZWNraW5n
SGVscGVyOjptYXJrQWxsTWlzc3BlbGxpbmdzKFJlZlB0cjxSYW5nZT4mIGZpcnN0TWlzc3BlbGxp
bmdSYW5nZSkKK3sKKyAgICAvLyBVc2UgdGhlICJtYXJrQWxsIiBmZWF0dXJlIG9mIGZpbmRGaXJz
dE1pc3NwZWxsaW5nLiBJZ25vcmUgdGhlIHJldHVybiB2YWx1ZSBhbmQgdGhlICJvdXQgcGFyYW1l
dGVyIjsKKyAgICAvLyBhbGwgd2UgbmVlZCB0byBkbyBpcyBtYXJrIGV2ZXJ5IGluc3RhbmNlLgor
ICAgIGludCBpZ25vcmVkT2Zmc2V0OworICAgIGZpbmRGaXJzdE1pc3NwZWxsaW5nKGlnbm9yZWRP
ZmZzZXQsIHRydWUsIGZpcnN0TWlzc3BlbGxpbmdSYW5nZSk7Cit9CisKK3ZvaWQgVGV4dENoZWNr
aW5nSGVscGVyOjptYXJrQWxsQmFkR3JhbW1hcigpCit7CisjaWZuZGVmIEJVSUxESU5HX09OX1RJ
R0VSCisgICAgLy8gVXNlIHRoZSAibWFya0FsbCIgZmVhdHVyZSBvZiBmaW5kRmlyc3RCYWRHcmFt
bWFyLiBJZ25vcmUgdGhlIHJldHVybiB2YWx1ZSBhbmQgIm91dCBwYXJhbWV0ZXJzIjsgYWxsIHdl
IG5lZWQgdG8KKyAgICAvLyBkbyBpcyBtYXJrIGV2ZXJ5IGluc3RhbmNlLgorICAgIEdyYW1tYXJE
ZXRhaWwgaWdub3JlZEdyYW1tYXJEZXRhaWw7CisgICAgaW50IGlnbm9yZWRPZmZzZXQ7CisgICAg
ZmluZEZpcnN0QmFkR3JhbW1hcihpZ25vcmVkR3JhbW1hckRldGFpbCwgaWdub3JlZE9mZnNldCwg
dHJ1ZSk7CisjZWxzZQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworI2VuZGlmCit9CisKK30K
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuaCBiL1dlYkNv
cmUvZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iOTE4YWU4MmZmZjZl
NTgwMjYyZDJkYWFiM2Y3ZDA1NmM0YTQxN2U1Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9l
ZGl0aW5nL1RleHRDaGVja2luZ0hlbHBlci5oCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vi
c2lkaWFyeSgtaWVzKQorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqLworCisjaWZuZGVmIFRleHRDaGVja2luZ0hlbHBlcl9oCisjZGVmaW5lIFRleHRD
aGVja2luZ0hlbHBlcl9oCisKKyNpbmNsdWRlICJFZGl0b3JDbGllbnQuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjbGFzcyBSYW5nZTsKKworY2xhc3MgVGV4dENoZWNraW5nSGVscGVyIDog
cHVibGljIE5vbmNvcHlhYmxlIHsKK3B1YmxpYzoKKyAgICBUZXh0Q2hlY2tpbmdIZWxwZXIoRWRp
dG9yQ2xpZW50KiwgUGFzc1JlZlB0cjxSYW5nZT4pOworICAgIH5UZXh0Q2hlY2tpbmdIZWxwZXIo
KTsKKworICAgIFN0cmluZyBmaW5kRmlyc3RNaXNzcGVsbGluZyhpbnQmIGZpcnN0TWlzc3BlbGxp
bmdPZmZzZXQsIGJvb2wgbWFya0FsbCwgUmVmUHRyPFJhbmdlPiYgZmlyc3RNaXNzcGVsbGluZ1Jh
bmdlKTsKKyAgICBTdHJpbmcgZmluZEZpcnN0TWlzc3BlbGxpbmdPckJhZEdyYW1tYXIoYm9vbCBj
aGVja0dyYW1tYXIsIGJvb2wmIG91dElzU3BlbGxpbmcsIGludCYgb3V0Rmlyc3RGb3VuZE9mZnNl
dCwgR3JhbW1hckRldGFpbCYgb3V0R3JhbW1hckRldGFpbCk7CisgICAgU3RyaW5nIGZpbmRGaXJz
dEJhZEdyYW1tYXIoR3JhbW1hckRldGFpbCYgb3V0R3JhbW1hckRldGFpbCwgaW50JiBvdXRHcmFt
bWFyUGhyYXNlT2Zmc2V0LCBib29sIG1hcmtBbGwpOworICAgIGludCBmaW5kRmlyc3RHcmFtbWFy
RGV0YWlsKGNvbnN0IFZlY3RvcjxHcmFtbWFyRGV0YWlsPiYgZ3JhbW1hckRldGFpbHMsIGludCBi
YWRHcmFtbWFyUGhyYXNlTG9jYXRpb24sIGludCAvKmJhZEdyYW1tYXJQaHJhc2VMZW5ndGgqLywg
aW50IHN0YXJ0T2Zmc2V0LCBpbnQgZW5kT2Zmc2V0LCBib29sIG1hcmtBbGwpOworICAgIHZvaWQg
bWFya0FsbE1pc3NwZWxsaW5ncyhSZWZQdHI8UmFuZ2U+JiBmaXJzdE1pc3NwZWxsaW5nUmFuZ2Up
OworICAgIHZvaWQgbWFya0FsbEJhZEdyYW1tYXIoKTsKKworICAgIGJvb2wgaXNVbmdyYW1tYXRp
Y2FsKFZlY3RvcjxTdHJpbmc+JiBndWVzc2VzVmVjdG9yKSBjb25zdDsKKyAgICBWZWN0b3I8U3Ry
aW5nPiBndWVzc2VzRm9yTWlzc3BlbGxlZE9yVW5ncmFtbWF0aWNhbFJhbmdlKGJvb2wgY2hlY2tH
cmFtbWFyLCBib29sJiBtaXNzcGVsbGVkLCBib29sJiB1bmdyYW1tYXRpY2FsKSBjb25zdDsKKyAg
ICBQYXNzUmVmUHRyPFJhbmdlPiBwYXJhZ3JhcGhBbGlnbmVkUmFuZ2UoaW50JiBvZmZzZXRJbnRv
UGFyYWdyYXBoQWxpZ25lZFJhbmdlLCBTdHJpbmcmIHBhcmFncmFwaFN0cmluZykgY29uc3Q7Citw
cml2YXRlOgorICAgIEVkaXRvckNsaWVudCogbV9jbGllbnQ7CisgICAgUmVmUHRyPFJhbmdlPiBt
X3JhbmdlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVGV4dENo
ZWNraW5nSGVscGVyX2gK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>72175</attachid>
            <date>2010-10-28 05:52:08 -0700</date>
            <delta_ts>2010-10-31 23:06:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-48287-20101028215205.patch</filename>
            <type>text/plain</type>
            <size>73627</size>
            <attacher name="Hajime Morrita">morrita</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9XZWJDb3JlL0NNYWtlTGlzdHMu
dHh0CmluZGV4IDU4YjA3MjA4NGZkZDc4NGU2NzUxODIxZmYxMTk4ZDc1OWQ2ODEzODAuLjA2OGJk
NWRkYjY5MTY4MmUzY2NmZjhmOWY2ODY2NDE1OWFjZTIzMWMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
Q01ha2VMaXN0cy50eHQKKysrIGIvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAtOTI0LDYgKzky
NCw3IEBAIFNFVChXZWJDb3JlX1NPVVJDRVMKICAgICBlZGl0aW5nL1NwbGl0RWxlbWVudENvbW1h
bmQuY3BwCiAgICAgZWRpdGluZy9TcGxpdFRleHROb2RlQ29tbWFuZC5jcHAKICAgICBlZGl0aW5n
L1NwbGl0VGV4dE5vZGVDb250YWluaW5nRWxlbWVudENvbW1hbmQuY3BwCisgICAgZWRpdGluZy9U
ZXh0Q2hlY2tpbmdIZWxwZXIuY3BwCiAgICAgZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwCiAgICAg
ZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcAogICAgIGVkaXRpbmcvVW5saW5rQ29tbWFuZC5jcHAK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ODk0YjgzMmEzNDdlZjJiZTFjZmM1OThjNjE4Y2I1YjM1ZDcxZGJiNi4uYTQxMDRjZjhlOGNmZTY2
MzI4YTI0ODJlYjlhNjI0YjFlNDlmMzAxYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0NyBAQAorMjAxMC0xMC0yNiAgTU9S
SVRBIEhhamltZSAgPG1vcnJpdGFAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZWZhY3RvcmluZzogU3BlbGxjaGVja2luZyByZWxh
dGVkIHN0YXRpYyBmdW5jdGlvbnMgY291bGQgZm9ybSBhIGNsYXNzCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00ODI4NworCisgICAgICAgIEV4dHJhY3Rl
ZCBzcGVsbGNoZWNrIHJlbGF0ZWQgc3RhdGljIGZ1bmN0aW9ucyB0byBUZXh0Q2hlY2tpbmdIZWxw
ZXIgY2xhc3MsCisgICAgICAgIHdoaWNoIGhhcyBFZGl0b3JDbGllbnQgYW5kIFJhbmdlIGFzIGl0
cyBtZW1iZXIuCisgICAgICAgIAorICAgICAgICBObyBuZXcgdGVzdHMuIEp1c3QgYSByZWZhY3Rv
cmluZy4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEdOVW1ha2VmaWxl
LmFtOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAg
ICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogZWRpdGluZy9FZGl0b3IuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjphZHZhbmNlVG9OZXh0TWlzc3BlbGxpbmcpOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjppc1NlbGVjdGlvblVuZ3JhbW1hdGljYWwpOgorICAg
ICAgICAoV2ViQ29yZTo6RWRpdG9yOjpndWVzc2VzRm9yVW5ncmFtbWF0aWNhbFNlbGVjdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Omd1ZXNzZXNGb3JNaXNzcGVsbGVkT3JVbmdyYW1t
YXRpY2FsU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bWFya01pc3NwZWxs
aW5nc0FmdGVyVHlwaW5nVG9Qb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Om1h
cmtNaXNzcGVsbGluZ3NPckJhZEdyYW1tYXIpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpt
YXJrTWlzc3BlbGxpbmdzKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bWFya0JhZEdyYW1t
YXIpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjptYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFk
R3JhbW1hckluUmFuZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y2hhbmdlQmFja1Rv
UmVwbGFjZWRTdHJpbmcpOgorICAgICAgICAqIGVkaXRpbmcvRWRpdG9yLmg6CisgICAgICAgICog
ZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OlRleHRDaGVja2luZ0hlbHBlcjo6VGV4dENoZWNraW5nSGVscGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OlRleHRDaGVja2luZ0hlbHBlcjo6flRleHRDaGVja2luZ0hlbHBlcik6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0Q2hlY2tpbmdIZWxwZXI6OnBhcmFncmFwaEFsaWduZWRSYW5nZSk6CisgICAg
ICAgIChXZWJDb3JlOjpUZXh0Q2hlY2tpbmdIZWxwZXI6OmZpbmRGaXJzdE1pc3NwZWxsaW5nKToK
KyAgICAgICAgKFdlYkNvcmU6OlRleHRDaGVja2luZ0hlbHBlcjo6ZmluZEZpcnN0TWlzc3BlbGxp
bmdPckJhZEdyYW1tYXIpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENoZWNraW5nSGVscGVyOjpm
aW5kRmlyc3RHcmFtbWFyRGV0YWlsKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDaGVja2luZ0hl
bHBlcjo6ZmluZEZpcnN0QmFkR3JhbW1hcik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Q2hlY2tp
bmdIZWxwZXI6OmlzVW5ncmFtbWF0aWNhbCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Q2hlY2tp
bmdIZWxwZXI6Omd1ZXNzZXNGb3JNaXNzcGVsbGVkT3JVbmdyYW1tYXRpY2FsUmFuZ2UpOgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dENoZWNraW5nSGVscGVyOjptYXJrQWxsTWlzc3BlbGxpbmdzKToK
KyAgICAgICAgKFdlYkNvcmU6OlRleHRDaGVja2luZ0hlbHBlcjo6bWFya0FsbEJhZEdyYW1tYXIp
OgorICAgICAgICAqIGVkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmg6IEFkZGVkLgorCiAyMDEw
LTEwLTI3ICBNT1JJVEEgSGFqaW1lICA8bW9ycml0YUBnb29nbGUuY29tPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IEtlbnQgVGFtdXJhLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9HTlVtYWtlZmlsZS5h
bSBiL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KaW5kZXggOWRlYWNmNDgzZTgxNWNhMDgyYzU1ZjEw
ODE1NmYyNTVkMTQ1Mzg5Zi4uYWQ2ZjRhMmQyYjBiODE4OWE4NzFlOTk0YzI0ZTQ1YWUwNGIyZTk0
ZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQorKysgYi9XZWJDb3JlL0dOVW1h
a2VmaWxlLmFtCkBAIC0xMzUyLDYgKzEzNTIsOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdl
YkNvcmUvZWRpdGluZy9TcGxpdFRleHROb2RlQ29udGFpbmluZ0VsZW1lbnRDb21tYW5kLmNwcCBc
CiAJV2ViQ29yZS9lZGl0aW5nL1NwbGl0VGV4dE5vZGVDb250YWluaW5nRWxlbWVudENvbW1hbmQu
aCBcCiAJV2ViQ29yZS9lZGl0aW5nL1RleHRBZmZpbml0eS5oIFwKKwlXZWJDb3JlL2VkaXRpbmcv
VGV4dENoZWNraW5nSGVscGVyLmNwcCBcCisJV2ViQ29yZS9lZGl0aW5nL1RleHRDaGVja2luZ0hl
bHBlci5oIFwKIAlXZWJDb3JlL2VkaXRpbmcvVGV4dEdyYW51bGFyaXR5LmggXAogCVdlYkNvcmUv
ZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwIFwKIAlXZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9y
LmggXApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9XZWJDb3JlL1dlYkNvcmUu
Z3lwaQppbmRleCBjN2RjZjE4MmU2NDdlNjM4OTg0YjdlMTc4YmY1Njg1YWE1ZjM1OWEzLi4yOTFk
NTUyOGIzYzE2NzFkNjE5NTgyZWFjZjA3Zjg2Y2JhYzlmZDQ0IDEwMDY0NAotLS0gYS9XZWJDb3Jl
L1dlYkNvcmUuZ3lwaQorKysgYi9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMTQzNCw2ICsxNDM0
LDggQEAKICAgICAgICAgICAgICdlZGl0aW5nL1NwbGl0VGV4dE5vZGVDb250YWluaW5nRWxlbWVu
dENvbW1hbmQuY3BwJywKICAgICAgICAgICAgICdlZGl0aW5nL1NwbGl0VGV4dE5vZGVDb250YWlu
aW5nRWxlbWVudENvbW1hbmQuaCcsCiAgICAgICAgICAgICAnZWRpdGluZy9UZXh0QWZmaW5pdHku
aCcsCisgICAgICAgICAgICAnZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuY3BwJywKKyAgICAg
ICAgICAgICdlZGl0aW5nL1RleHRDaGVja2luZ0hlbHBlci5oJywKICAgICAgICAgICAgICdlZGl0
aW5nL1RleHRHcmFudWxhcml0eS5oJywKICAgICAgICAgICAgICdlZGl0aW5nL1RleHRJdGVyYXRv
ci5jcHAnLAogICAgICAgICAgICAgJ2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmgnLApkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9XZWJDb3JlLnBybyBiL1dlYkNvcmUvV2ViQ29yZS5wcm8KaW5kZXggZDYxODEx
YmIxMWQ0MmI3NWE2YmFlM2UzNzkzN2M5OGUwOTQwNzdkMC4uMTQ2NmVmMjA2ODNiMzNkYzFlOWQz
YzQ1ZjQ4NDRlMTc4MTExNDUyMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnBybworKysg
Yi9XZWJDb3JlL1dlYkNvcmUucHJvCkBAIC04MTQsNiArODE0LDcgQEAgU09VUkNFUyArPSBcCiAg
ICAgZWRpdGluZy9TcGxpdEVsZW1lbnRDb21tYW5kLmNwcCBcCiAgICAgZWRpdGluZy9TcGxpdFRl
eHROb2RlQ29tbWFuZC5jcHAgXAogICAgIGVkaXRpbmcvU3BsaXRUZXh0Tm9kZUNvbnRhaW5pbmdF
bGVtZW50Q29tbWFuZC5jcHAgXAorICAgIGVkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmNwcCBc
CiAgICAgZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwIFwKICAgICBlZGl0aW5nL1R5cGluZ0NvbW1h
bmQuY3BwIFwKICAgICBlZGl0aW5nL1VubGlua0NvbW1hbmQuY3BwIFwKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2ogYi9XZWJDb3JlL1dlYkNvcmUudmNw
cm9qL1dlYkNvcmUudmNwcm9qCmluZGV4IDRlMjk1YWU3OGFmYTIwYjhkZDU3ZTBkYWYyMjlmMDg1
ZjJhMTZkM2QuLjNkMWYxYzliYzE4ZWUyNzEyMWIxMGRlMDBlYjFkYWU3NDA1ZjEyNDcgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKKysrIGIvV2ViQ29y
ZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagpAQCAtNDc4ODQsNiArNDc4ODQsNjIgQEAK
IAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cZWRp
dGluZ1xUZXh0Q2hlY2tpbmdIZWxwZXIuY3BwIg0KKwkJCQk+DQorCQkJCTxGaWxlQ29uZmlndXJh
dGlvbg0KKwkJCQkJTmFtZT0iRGVidWd8V2luMzIiDQorCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0i
dHJ1ZSINCisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9v
bCINCisJCQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmln
dXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCisJCQkJCUV4Y2x1ZGVkRnJvbUJ1
aWxkPSJ0cnVlIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGls
ZXJUb29sIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVD
b25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1Z19JbnRlcm5hbHxXaW4zMiINCisJCQkJCUV4
Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1l
PSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4N
CisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1Z19DYWlyb3xXaW4zMiIN
CisJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJ
CQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmln
dXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlX0Nh
aXJvfFdpbjMyIg0KKwkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiDQorCQkJCQk+DQorCQkJ
CQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkvPg0KKwkJCQk8
L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9
IkRlYnVnX0FsbHxXaW4zMiINCisJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIg0KKwkJCQkJ
Pg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJLz4N
CisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJ
UmVsYXRpdmVQYXRoPSIuLlxlZGl0aW5nXFRleHRDaGVja2luZ0hlbHBlci5oIg0KKwkJCQk+DQor
CQkJPC9GaWxlPg0KKwkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cZWRpdGluZ1xUZXh0
R3JhbnVsYXJpdHkuaCINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDZjZjAyNjNhMWVmNmE5MGNmMDE5N2Y0MWFlODU5
NzZmYWE0MWYyZWMuLmI5ZWFlM2ZlYzg1NGU0YmE4ODVmZjUwNzlhZmY1MzQyMWM2ZDZmNjEgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBi
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0zMDU0LDYgKzMw
NTQsOCBAQAogCQlBN0QzQzUyNDBCNTc2QjRCMDAyQ0E0NTAgLyogUGFzdGVib2FyZEhlbHBlci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdEM0M1MjMw
QjU3NkI0QjAwMkNBNDUwIC8qIFBhc3RlYm9hcmRIZWxwZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBN0Q2QjM0OTBGNjExMDQ1MDBCNzlGRDEg
LyogV29ya2VyU2NyaXB0TG9hZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBN0Q2QjM0NzBGNjExMDQ1MDBCNzlGRDEgLyogV29ya2VyU2NyaXB0TG9h
ZGVyLmggKi87IH07CiAJCUE3RDZCMzRBMEY2MTEwNDUwMEI3OUZEMSAvKiBXb3JrZXJTY3JpcHRM
b2FkZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QTdENkIzNDgwRjYxMTA0NTAwQjc5RkQxIC8qIFdvcmtlclNjcmlwdExvYWRlci5jcHAgKi87IH07
CisJCUE3REJGOEREMTI3NjkxOUMwMDZCNjAwOCAvKiBUZXh0Q2hlY2tpbmdIZWxwZXIuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdEQkY4REIxMjc2
OTE5QzAwNkI2MDA4IC8qIFRleHRDaGVja2luZ0hlbHBlci5jcHAgKi87IH07CisJCUE3REJGOERF
MTI3NjkxOUMwMDZCNjAwOCAvKiBUZXh0Q2hlY2tpbmdIZWxwZXIuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3REJGOERDMTI3NjkxOUMwMDZCNjAwOCAv
KiBUZXh0Q2hlY2tpbmdIZWxwZXIuaCAqLzsgfTsKIAkJQTdGMzM4QTMxMUMwRUZDQTAwQTMyMEE3
IC8qIFNoYWRvd0VsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTdGMzM4QTExMUMwRUZDQTAwQTMyMEE3IC8qIFNoYWRvd0VsZW1lbnQuY3Bw
ICovOyB9OwogCQlBN0YzMzhBNDExQzBFRkNBMDBBMzIwQTcgLyogU2hhZG93RWxlbWVudC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdGMzM4QTIxMUMw
RUZDQTAwQTMyMEE3IC8qIFNoYWRvd0VsZW1lbnQuaCAqLzsgfTsKIAkJQTgwOUYxNDcwQjczNzkz
QTAwMkU0RDdGIC8qIFJlbmRlclNWR0dyYWRpZW50U3RvcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTgwOUYxNDUwQjczNzkzQTAwMkU0RDdGIC8qIFJl
bmRlclNWR0dyYWRpZW50U3RvcC5oICovOyB9OwpAQCAtOTEyNSw2ICs5MTI3LDggQEAKIAkJQTdE
M0M1MjMwQjU3NkI0QjAwMkNBNDUwIC8qIFBhc3RlYm9hcmRIZWxwZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gUGFzdGVib2FyZEhlbHBlci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlBN0Q2QjM0NzBGNjExMDQ1MDBCNzlGRDEgLyogV29ya2VyU2NyaXB0TG9h
ZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdvcmtlclNjcmlwdExvYWRl
ci5oOyBwYXRoID0gd29ya2Vycy9Xb3JrZXJTY3JpcHRMb2FkZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQTdENkIzNDgwRjYxMTA0NTAwQjc5RkQxIC8qIFdvcmtlclNjcmlwdExv
YWRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXb3JrZXJTY3Jp
cHRMb2FkZXIuY3BwOyBwYXRoID0gd29ya2Vycy9Xb3JrZXJTY3JpcHRMb2FkZXIuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBN0RCRjhEQjEyNzY5MTlDMDA2QjYwMDggLyogVGV4
dENoZWNraW5nSGVscGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFRleHRDaGVja2luZ0hlbHBlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE3
REJGOERDMTI3NjkxOUMwMDZCNjAwOCAvKiBUZXh0Q2hlY2tpbmdIZWxwZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGV4dENoZWNraW5nSGVscGVyLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUE3RjMzOEExMTFDMEVGQ0EwMEEzMjBBNyAvKiBTaGFkb3dFbGVt
ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNoYWRvd0VsZW1l
bnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBN0YzMzhBMjExQzBFRkNBMDBB
MzIwQTcgLyogU2hhZG93RWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBTaGFkb3dFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4MDlGMTQ1
MEI3Mzc5M0EwMDJFNEQ3RiAvKiBSZW5kZXJTVkdHcmFkaWVudFN0b3AuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyU1ZHR3JhZGllbnRTdG9wLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0xNDUxNiw2ICsxNDUyMCw4IEBACiAJCQkJOTMzMDlEQzcwOTlF
NjQ5MTAwNTZFNTgxIC8qIFNwbGl0VGV4dE5vZGVDb250YWluaW5nRWxlbWVudENvbW1hbmQuaCAq
LywKIAkJCQk5MzMwOURDODA5OUU2NDkxMDA1NkU1ODEgLyogVGV4dEFmZmluaXR5LmggKi8sCiAJ
CQkJOTMzMDlEQzkwOTlFNjQ5MTAwNTZFNTgxIC8qIFRleHRHcmFudWxhcml0eS5oICovLAorCQkJ
CUE3REJGOERCMTI3NjkxOUMwMDZCNjAwOCAvKiBUZXh0Q2hlY2tpbmdIZWxwZXIuY3BwICovLAor
CQkJCUE3REJGOERDMTI3NjkxOUMwMDZCNjAwOCAvKiBUZXh0Q2hlY2tpbmdIZWxwZXIuaCAqLywK
IAkJCQk5MzMwOURDQzA5OUU2NDkxMDA1NkU1ODEgLyogVGV4dEl0ZXJhdG9yLmNwcCAqLywKIAkJ
CQk5MzMwOURDRDA5OUU2NDkxMDA1NkU1ODEgLyogVGV4dEl0ZXJhdG9yLmggKi8sCiAJCQkJOTMz
MDlEQ0EwOTlFNjQ5MTAwNTZFNTgxIC8qIFR5cGluZ0NvbW1hbmQuY3BwICovLApAQCAtMjA5NDAs
NiArMjA5NDYsNyBAQAogCQkJCUIyQzNEQTM0MEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0Qm91bmRh
cmllcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJDM0RBMzYwRDAwNkMxRDAwRUY2RjI2IC8qIFRl
eHRCcmVha0l0ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMkMzREEzODBEMDA2QzFEMDBF
RjZGMjYgLyogVGV4dEJyZWFrSXRlcmF0b3JJbnRlcm5hbElDVS5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJQTdEQkY4REUxMjc2OTE5QzAwNkI2MDA4IC8qIFRleHRDaGVja2luZ0hlbHBlci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQjJDM0RBM0EwRDAwNkMxRDAwRUY2RjI2IC8qIFRleHRDb2RlYy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQjJDM0RBM0MwRDAwNkMxRDAwRUY2RjI2IC8qIFRleHRDb2RlY0lD
VS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJDM0RBM0UwRDAwNkMxRDAwRUY2RjI2IC8qIFRleHRD
b2RlY0xhdGluMS5oIGluIEhlYWRlcnMgKi8sCkBAIC0yMzU0OCw2ICsyMzU1NSw3IEBACiAJCQkJ
QjJBRkZDOTcwRDAwQTVERjAwMzAwNzREIC8qIFRleHRCb3VuZGFyaWVzLm1tIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQjJDM0RBMzcwRDAwNkMxRDAwRUY2RjI2IC8qIFRleHRCcmVha0l0ZXJhdG9ySUNV
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyQUZGQzk4MEQwMEE1REYwMDMwMDc0RCAvKiBUZXh0
QnJlYWtJdGVyYXRvckludGVybmFsSUNVTWFjLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJQTdEQkY4
REQxMjc2OTE5QzAwNkI2MDA4IC8qIFRleHRDaGVja2luZ0hlbHBlci5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlCMkMzREEzOTBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dENvZGVjLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUIyQzNEQTNCMEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0Q29kZWNJQ1UuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQjJDM0RBM0QwRDAwNkMxRDAwRUY2RjI2IC8qIFRleHRDb2Rl
Y0xhdGluMS5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZWRpdGluZy9F
ZGl0b3IuY3BwIGIvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKaW5kZXggMmU1ODM4OWE0YjU5
OWZmMzFjNWM1ODQ4YjQ4OGRiOWU2MTIxYTBjOC4uNGQzMTQwNjY3YmE2NDEyZDBjOTZhZjM3ZTI4
YWQ4YzcwYzg1MGE3NSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKKysr
IGIvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKQEAgLTYyLDYgKzYyLDcgQEAKICNpbmNsdWRl
ICJOb2RlTGlzdC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQYXN0ZWJvYXJkLmgi
CisjaW5jbHVkZSAiVGV4dENoZWNraW5nSGVscGVyLmgiCiAjaW5jbHVkZSAiUmVtb3ZlRm9ybWF0
Q29tbWFuZC5oIgogI2luY2x1ZGUgIlJlbmRlckJsb2NrLmgiCiAjaW5jbHVkZSAiUmVuZGVyUGFy
dC5oIgpAQCAtMTY0NiwzMjggKzE2NDcsNiBAQCB2b2lkIEVkaXRvcjo6bGVhcm5TcGVsbGluZygp
CiAgICAgY2xpZW50KCktPmxlYXJuV29yZCh0ZXh0KTsKIH0KIAotc3RhdGljIFN0cmluZyBmaW5k
Rmlyc3RNaXNzcGVsbGluZ0luUmFuZ2UoRWRpdG9yQ2xpZW50KiBjbGllbnQsIFJhbmdlKiBzZWFy
Y2hSYW5nZSwgaW50JiBmaXJzdE1pc3NwZWxsaW5nT2Zmc2V0LCBib29sIG1hcmtBbGwsIFJlZlB0
cjxSYW5nZT4mIGZpcnN0TWlzc3BlbGxpbmdSYW5nZSkKLXsKLSAgICBBU1NFUlRfQVJHKGNsaWVu
dCwgY2xpZW50KTsKLSAgICBBU1NFUlRfQVJHKHNlYXJjaFJhbmdlLCBzZWFyY2hSYW5nZSk7Ci0g
ICAgCi0gICAgV29yZEF3YXJlSXRlcmF0b3IgaXQoc2VhcmNoUmFuZ2UpOwotICAgIGZpcnN0TWlz
c3BlbGxpbmdPZmZzZXQgPSAwOwotICAgIAotICAgIFN0cmluZyBmaXJzdE1pc3NwZWxsaW5nOwot
ICAgIGludCBjdXJyZW50Q2h1bmtPZmZzZXQgPSAwOwotCi0gICAgd2hpbGUgKCFpdC5hdEVuZCgp
KSB7Ci0gICAgICAgIGNvbnN0IFVDaGFyKiBjaGFycyA9IGl0LmNoYXJhY3RlcnMoKTsKLSAgICAg
ICAgaW50IGxlbiA9IGl0Lmxlbmd0aCgpOwotICAgICAgICAKLSAgICAgICAgLy8gU2tpcCBzb21l
IHdvcmsgZm9yIG9uZS1zcGFjZS1jaGFyIGh1bmtzCi0gICAgICAgIGlmICghKGxlbiA9PSAxICYm
IGNoYXJzWzBdID09ICcgJykpIHsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaW50IG1pc3Nw
ZWxsaW5nTG9jYXRpb24gPSAtMTsKLSAgICAgICAgICAgIGludCBtaXNzcGVsbGluZ0xlbmd0aCA9
IDA7Ci0gICAgICAgICAgICBjbGllbnQtPmNoZWNrU3BlbGxpbmdPZlN0cmluZyhjaGFycywgbGVu
LCAmbWlzc3BlbGxpbmdMb2NhdGlvbiwgJm1pc3NwZWxsaW5nTGVuZ3RoKTsKLQotICAgICAgICAg
ICAgLy8gNTQ5MDYyNyBzaG93cyB0aGF0IHRoZXJlIHdhcyBzb21lIGNvZGUgcGF0aCBoZXJlIHdo
ZXJlIHRoZSBTdHJpbmcgY29uc3RydWN0b3IgYmVsb3cgY3Jhc2hlcy4KLSAgICAgICAgICAgIC8v
IFdlIGRvbid0IGtub3cgZXhhY3RseSB3aGF0IGNvbWJpbmF0aW9uIG9mIGJhZCBpbnB1dCBjYXVz
ZWQgdGhpcywgc28gd2UncmUgbWFraW5nIHRoaXMgbXVjaAotICAgICAgICAgICAgLy8gbW9yZSBy
b2J1c3QgYWdhaW5zdCBiYWQgaW5wdXQgb24gcmVsZWFzZSBidWlsZHMuCi0gICAgICAgICAgICBB
U1NFUlQobWlzc3BlbGxpbmdMZW5ndGggPj0gMCk7Ci0gICAgICAgICAgICBBU1NFUlQobWlzc3Bl
bGxpbmdMb2NhdGlvbiA+PSAtMSk7Ci0gICAgICAgICAgICBBU1NFUlQoIW1pc3NwZWxsaW5nTGVu
Z3RoIHx8IG1pc3NwZWxsaW5nTG9jYXRpb24gPj0gMCk7Ci0gICAgICAgICAgICBBU1NFUlQobWlz
c3BlbGxpbmdMb2NhdGlvbiA8IGxlbik7Ci0gICAgICAgICAgICBBU1NFUlQobWlzc3BlbGxpbmdM
ZW5ndGggPD0gbGVuKTsKLSAgICAgICAgICAgIEFTU0VSVChtaXNzcGVsbGluZ0xvY2F0aW9uICsg
bWlzc3BlbGxpbmdMZW5ndGggPD0gbGVuKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYg
KG1pc3NwZWxsaW5nTG9jYXRpb24gPj0gMCAmJiBtaXNzcGVsbGluZ0xlbmd0aCA+IDAgJiYgbWlz
c3BlbGxpbmdMb2NhdGlvbiA8IGxlbiAmJiBtaXNzcGVsbGluZ0xlbmd0aCA8PSBsZW4gJiYgbWlz
c3BlbGxpbmdMb2NhdGlvbiArIG1pc3NwZWxsaW5nTGVuZ3RoIDw9IGxlbikgewotICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgICAgIC8vIENvbXB1dGUgcmFuZ2Ugb2YgbWlzc3BlbGxlZCB3
b3JkCi0gICAgICAgICAgICAgICAgUmVmUHRyPFJhbmdlPiBtaXNzcGVsbGluZ1JhbmdlID0gVGV4
dEl0ZXJhdG9yOjpzdWJyYW5nZShzZWFyY2hSYW5nZSwgY3VycmVudENodW5rT2Zmc2V0ICsgbWlz
c3BlbGxpbmdMb2NhdGlvbiwgbWlzc3BlbGxpbmdMZW5ndGgpOwotCi0gICAgICAgICAgICAgICAg
Ly8gUmVtZW1iZXIgZmlyc3QtZW5jb3VudGVyZWQgbWlzc3BlbGxpbmcgYW5kIGl0cyBvZmZzZXQu
Ci0gICAgICAgICAgICAgICAgaWYgKCFmaXJzdE1pc3NwZWxsaW5nKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGZpcnN0TWlzc3BlbGxpbmdPZmZzZXQgPSBjdXJyZW50Q2h1bmtPZmZzZXQgKyBtaXNz
cGVsbGluZ0xvY2F0aW9uOwotICAgICAgICAgICAgICAgICAgICBmaXJzdE1pc3NwZWxsaW5nID0g
U3RyaW5nKGNoYXJzICsgbWlzc3BlbGxpbmdMb2NhdGlvbiwgbWlzc3BlbGxpbmdMZW5ndGgpOwot
ICAgICAgICAgICAgICAgICAgICBmaXJzdE1pc3NwZWxsaW5nUmFuZ2UgPSBtaXNzcGVsbGluZ1Jh
bmdlOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIFN0b3JlIG1hcmtl
ciBmb3IgbWlzc3BlbGxlZCB3b3JkLgotICAgICAgICAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMg
PSAwOwotICAgICAgICAgICAgICAgIG1pc3NwZWxsaW5nUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKGVj
KS0+ZG9jdW1lbnQoKS0+bWFya2VycygpLT5hZGRNYXJrZXIobWlzc3BlbGxpbmdSYW5nZS5nZXQo
KSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nKTsKLSAgICAgICAgICAgICAgICBBU1NFUlQoIWVj
KTsKLQotICAgICAgICAgICAgICAgIC8vIEJhaWwgb3V0IGlmIHdlJ3JlIG1hcmtpbmcgb25seSB0
aGUgZmlyc3QgbWlzc3BlbGxpbmcsIGFuZCBub3QgYWxsIGluc3RhbmNlcy4KLSAgICAgICAgICAg
ICAgICBpZiAoIW1hcmtBbGwpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBjdXJyZW50Q2h1bmtPZmZzZXQgKz0g
bGVuOwotICAgICAgICBpdC5hZHZhbmNlKCk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBmaXJz
dE1pc3NwZWxsaW5nOwotfQotCi0jaWZuZGVmIEJVSUxESU5HX09OX1RJR0VSCi0KLXN0YXRpYyBQ
YXNzUmVmUHRyPFJhbmdlPiBwYXJhZ3JhcGhBbGlnbmVkUmFuZ2VGb3JSYW5nZShSYW5nZSogYXJi
aXRyYXJ5UmFuZ2UsIGludCYgb2Zmc2V0SW50b1BhcmFncmFwaEFsaWduZWRSYW5nZSwgU3RyaW5n
JiBwYXJhZ3JhcGhTdHJpbmcpCi17Ci0gICAgQVNTRVJUX0FSRyhhcmJpdHJhcnlSYW5nZSwgYXJi
aXRyYXJ5UmFuZ2UpOwotICAgIAotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIAotICAg
IC8vIEV4cGFuZCByYW5nZSB0byBwYXJhZ3JhcGggYm91bmRhcmllcwotICAgIFJlZlB0cjxSYW5n
ZT4gcGFyYWdyYXBoUmFuZ2UgPSBhcmJpdHJhcnlSYW5nZS0+Y2xvbmVSYW5nZShlYyk7Ci0gICAg
c2V0U3RhcnQocGFyYWdyYXBoUmFuZ2UuZ2V0KCksIHN0YXJ0T2ZQYXJhZ3JhcGgoYXJiaXRyYXJ5
UmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSkpOwotICAgIHNldEVuZChwYXJhZ3JhcGhSYW5nZS5nZXQo
KSwgZW5kT2ZQYXJhZ3JhcGgoYXJiaXRyYXJ5UmFuZ2UtPmVuZFBvc2l0aW9uKCkpKTsKLSAgICAK
LSAgICAvLyBDb21wdXRlIG9mZnNldCBmcm9tIHN0YXJ0IG9mIGV4cGFuZGVkIHJhbmdlIHRvIHN0
YXJ0IG9mIG9yaWdpbmFsIHJhbmdlCi0gICAgUmVmUHRyPFJhbmdlPiBvZmZzZXRBc1JhbmdlID0g
UmFuZ2U6OmNyZWF0ZShwYXJhZ3JhcGhSYW5nZS0+c3RhcnRDb250YWluZXIoZWMpLT5kb2N1bWVu
dCgpLCBwYXJhZ3JhcGhSYW5nZS0+c3RhcnRQb3NpdGlvbigpLCBhcmJpdHJhcnlSYW5nZS0+c3Rh
cnRQb3NpdGlvbigpKTsKLSAgICBvZmZzZXRJbnRvUGFyYWdyYXBoQWxpZ25lZFJhbmdlID0gVGV4
dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChvZmZzZXRBc1JhbmdlLmdldCgpKTsKLSAgICAKLSAgICAv
LyBGaWxsIGluIG91dCBwYXJhbWV0ZXIgd2l0aCBzdHJpbmcgcmVwcmVzZW50aW5nIGVudGlyZSBw
YXJhZ3JhcGggcmFuZ2UuCi0gICAgLy8gU29tZWRheSB3ZSBtaWdodCBoYXZlIGEgY2FsbGVyIHRo
YXQgZG9lc24ndCB1c2UgdGhpcywgYnV0IGZvciBub3cgYWxsIGNhbGxlcnMgZG8uCi0gICAgcGFy
YWdyYXBoU3RyaW5nID0gcGxhaW5UZXh0KHBhcmFncmFwaFJhbmdlLmdldCgpKTsKLQotICAgIHJl
dHVybiBwYXJhZ3JhcGhSYW5nZTsKLX0KLQotc3RhdGljIGludCBmaW5kRmlyc3RHcmFtbWFyRGV0
YWlsSW5SYW5nZShjb25zdCBWZWN0b3I8R3JhbW1hckRldGFpbD4mIGdyYW1tYXJEZXRhaWxzLCBp
bnQgYmFkR3JhbW1hclBocmFzZUxvY2F0aW9uLCBpbnQgLypiYWRHcmFtbWFyUGhyYXNlTGVuZ3Ro
Ki8sIFJhbmdlICpzZWFyY2hSYW5nZSwgaW50IHN0YXJ0T2Zmc2V0LCBpbnQgZW5kT2Zmc2V0LCBi
b29sIG1hcmtBbGwpCi17Ci0gICAgLy8gRm91bmQgc29tZSBiYWQgZ3JhbW1hci4gRmluZCB0aGUg
ZWFybGllc3QgZGV0YWlsIHJhbmdlIHRoYXQgc3RhcnRzIGluIG91ciBzZWFyY2ggcmFuZ2UgKGlm
IGFueSkuCi0gICAgLy8gT3B0aW9uYWxseSBhZGQgYSBEb2N1bWVudE1hcmtlciBmb3IgZWFjaCBk
ZXRhaWwgaW4gdGhlIHJhbmdlLgotICAgIGludCBlYXJsaWVzdERldGFpbExvY2F0aW9uU29GYXIg
PSAtMTsKLSAgICBpbnQgZWFybGllc3REZXRhaWxJbmRleCA9IC0xOwotICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBncmFtbWFyRGV0YWlscy5zaXplKCk7IGkrKykgewotICAgICAgICBjb25z
dCBHcmFtbWFyRGV0YWlsKiBkZXRhaWwgPSAmZ3JhbW1hckRldGFpbHNbaV07Ci0gICAgICAgIEFT
U0VSVChkZXRhaWwtPmxlbmd0aCA+IDAgJiYgZGV0YWlsLT5sb2NhdGlvbiA+PSAwKTsKLSAgICAg
ICAgCi0gICAgICAgIGludCBkZXRhaWxTdGFydE9mZnNldEluUGFyYWdyYXBoID0gYmFkR3JhbW1h
clBocmFzZUxvY2F0aW9uICsgZGV0YWlsLT5sb2NhdGlvbjsKLSAgICAgICAgCi0gICAgICAgIC8v
IFNraXAgdGhpcyBkZXRhaWwgaWYgaXQgc3RhcnRzIGJlZm9yZSB0aGUgb3JpZ2luYWwgc2VhcmNo
IHJhbmdlCi0gICAgICAgIGlmIChkZXRhaWxTdGFydE9mZnNldEluUGFyYWdyYXBoIDwgc3RhcnRP
ZmZzZXQpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgCi0gICAgICAgIC8vIFNraXAg
dGhpcyBkZXRhaWwgaWYgaXQgc3RhcnRzIGFmdGVyIHRoZSBvcmlnaW5hbCBzZWFyY2ggcmFuZ2UK
LSAgICAgICAgaWYgKGRldGFpbFN0YXJ0T2Zmc2V0SW5QYXJhZ3JhcGggPj0gZW5kT2Zmc2V0KQot
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIAotICAgICAgICBpZiAobWFya0FsbCkgewot
ICAgICAgICAgICAgUmVmUHRyPFJhbmdlPiBiYWRHcmFtbWFyUmFuZ2UgPSBUZXh0SXRlcmF0b3I6
OnN1YnJhbmdlKHNlYXJjaFJhbmdlLCBiYWRHcmFtbWFyUGhyYXNlTG9jYXRpb24gLSBzdGFydE9m
ZnNldCArIGRldGFpbC0+bG9jYXRpb24sIGRldGFpbC0+bGVuZ3RoKTsKLSAgICAgICAgICAgIEV4
Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgICAgICAgICAgYmFkR3JhbW1hclJhbmdlLT5zdGFydENv
bnRhaW5lcihlYyktPmRvY3VtZW50KCktPm1hcmtlcnMoKS0+YWRkTWFya2VyKGJhZEdyYW1tYXJS
YW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OkdyYW1tYXIsIGRldGFpbC0+dXNlckRlc2NyaXB0
aW9uKTsKLSAgICAgICAgICAgIEFTU0VSVCghZWMpOwotICAgICAgICB9Ci0gICAgICAgIAotICAg
ICAgICAvLyBSZW1lbWJlciB0aGlzIGRldGFpbCBvbmx5IGlmIGl0J3MgZWFybGllciB0aGFuIG91
ciBjdXJyZW50IGNhbmRpZGF0ZSAodGhlIGRldGFpbHMgYXJlbid0IGluIGEgZ3VhcmFudGVlZCBv
cmRlcikKLSAgICAgICAgaWYgKGVhcmxpZXN0RGV0YWlsSW5kZXggPCAwIHx8IGVhcmxpZXN0RGV0
YWlsTG9jYXRpb25Tb0ZhciA+IGRldGFpbC0+bG9jYXRpb24pIHsKLSAgICAgICAgICAgIGVhcmxp
ZXN0RGV0YWlsSW5kZXggPSBpOwotICAgICAgICAgICAgZWFybGllc3REZXRhaWxMb2NhdGlvblNv
RmFyID0gZGV0YWlsLT5sb2NhdGlvbjsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICByZXR1
cm4gZWFybGllc3REZXRhaWxJbmRleDsKLX0KLSAgICAKLXN0YXRpYyBTdHJpbmcgZmluZEZpcnN0
QmFkR3JhbW1hckluUmFuZ2UoRWRpdG9yQ2xpZW50KiBjbGllbnQsIFJhbmdlKiBzZWFyY2hSYW5n
ZSwgR3JhbW1hckRldGFpbCYgb3V0R3JhbW1hckRldGFpbCwgaW50JiBvdXRHcmFtbWFyUGhyYXNl
T2Zmc2V0LCBib29sIG1hcmtBbGwpCi17Ci0gICAgQVNTRVJUX0FSRyhjbGllbnQsIGNsaWVudCk7
Ci0gICAgQVNTRVJUX0FSRyhzZWFyY2hSYW5nZSwgc2VhcmNoUmFuZ2UpOwotICAgIAotICAgIC8v
IEluaXRpYWxpemUgb3V0IHBhcmFtZXRlcnM7IHRoZXNlIHdpbGwgYmUgdXBkYXRlZCBpZiB3ZSBm
aW5kIHNvbWV0aGluZyB0byByZXR1cm4uCi0gICAgb3V0R3JhbW1hckRldGFpbC5sb2NhdGlvbiA9
IC0xOwotICAgIG91dEdyYW1tYXJEZXRhaWwubGVuZ3RoID0gMDsKLSAgICBvdXRHcmFtbWFyRGV0
YWlsLmd1ZXNzZXMuY2xlYXIoKTsKLSAgICBvdXRHcmFtbWFyRGV0YWlsLnVzZXJEZXNjcmlwdGlv
biA9ICIiOwotICAgIG91dEdyYW1tYXJQaHJhc2VPZmZzZXQgPSAwOwotICAgIAotICAgIFN0cmlu
ZyBmaXJzdEJhZEdyYW1tYXJQaHJhc2U7Ci0KLSAgICAvLyBFeHBhbmQgdGhlIHNlYXJjaCByYW5n
ZSB0byBlbmNvbXBhc3MgZW50aXJlIHBhcmFncmFwaHMsIHNpbmNlIGdyYW1tYXIgY2hlY2tpbmcg
bmVlZHMgdGhhdCBtdWNoIGNvbnRleHQuCi0gICAgLy8gRGV0ZXJtaW5lIHRoZSBjaGFyYWN0ZXIg
b2Zmc2V0IGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBwYXJhZ3JhcGggdG8gdGhlIHN0YXJ0IG9mIHRo
ZSBvcmlnaW5hbCBzZWFyY2ggcmFuZ2UsCi0gICAgLy8gc2luY2Ugd2Ugd2lsbCB3YW50IHRvIGln
bm9yZSByZXN1bHRzIGluIHRoaXMgYXJlYS4KLSAgICBpbnQgc2VhcmNoUmFuZ2VTdGFydE9mZnNl
dDsKLSAgICBTdHJpbmcgcGFyYWdyYXBoU3RyaW5nOwotICAgIFJlZlB0cjxSYW5nZT4gcGFyYWdy
YXBoUmFuZ2UgPSBwYXJhZ3JhcGhBbGlnbmVkUmFuZ2VGb3JSYW5nZShzZWFyY2hSYW5nZSwgc2Vh
cmNoUmFuZ2VTdGFydE9mZnNldCwgcGFyYWdyYXBoU3RyaW5nKTsKLSAgICAgICAgCi0gICAgLy8g
RGV0ZXJtaW5lIHRoZSBjaGFyYWN0ZXIgb2Zmc2V0IGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBwYXJh
Z3JhcGggdG8gdGhlIGVuZCBvZiB0aGUgb3JpZ2luYWwgc2VhcmNoIHJhbmdlLCAKLSAgICAvLyBz
aW5jZSB3ZSB3aWxsIHdhbnQgdG8gaWdub3JlIHJlc3VsdHMgaW4gdGhpcyBhcmVhIGFsc28uCi0g
ICAgaW50IHNlYXJjaFJhbmdlRW5kT2Zmc2V0ID0gc2VhcmNoUmFuZ2VTdGFydE9mZnNldCArIFRl
eHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgoc2VhcmNoUmFuZ2UpOwotICAgICAgICAKLSAgICAvLyBT
dGFydCBjaGVja2luZyBmcm9tIGJlZ2lubmluZyBvZiBwYXJhZ3JhcGgsIGJ1dCBza2lwIHBhc3Qg
cmVzdWx0cyB0aGF0IG9jY3VyIGJlZm9yZSB0aGUgc3RhcnQgb2YgdGhlIG9yaWdpbmFsIHNlYXJj
aCByYW5nZS4KLSAgICBpbnQgc3RhcnRPZmZzZXQgPSAwOwotICAgIHdoaWxlIChzdGFydE9mZnNl
dCA8IHNlYXJjaFJhbmdlRW5kT2Zmc2V0KSB7Ci0gICAgICAgIFZlY3RvcjxHcmFtbWFyRGV0YWls
PiBncmFtbWFyRGV0YWlsczsKLSAgICAgICAgaW50IGJhZEdyYW1tYXJQaHJhc2VMb2NhdGlvbiA9
IC0xOwotICAgICAgICBpbnQgYmFkR3JhbW1hclBocmFzZUxlbmd0aCA9IDA7Ci0gICAgICAgIGNs
aWVudC0+Y2hlY2tHcmFtbWFyT2ZTdHJpbmcocGFyYWdyYXBoU3RyaW5nLmNoYXJhY3RlcnMoKSAr
IHN0YXJ0T2Zmc2V0LCBwYXJhZ3JhcGhTdHJpbmcubGVuZ3RoKCkgLSBzdGFydE9mZnNldCwgZ3Jh
bW1hckRldGFpbHMsICZiYWRHcmFtbWFyUGhyYXNlTG9jYXRpb24sICZiYWRHcmFtbWFyUGhyYXNl
TGVuZ3RoKTsKLSAgICAgICAgCi0gICAgICAgIGlmICghYmFkR3JhbW1hclBocmFzZUxlbmd0aCkg
ewotICAgICAgICAgICAgQVNTRVJUKGJhZEdyYW1tYXJQaHJhc2VMb2NhdGlvbiA9PSAtMSk7Ci0g
ICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBBU1NFUlQo
YmFkR3JhbW1hclBocmFzZUxvY2F0aW9uID49IDApOwotICAgICAgICBiYWRHcmFtbWFyUGhyYXNl
TG9jYXRpb24gKz0gc3RhcnRPZmZzZXQ7Ci0KLSAgICAgICAgCi0gICAgICAgIC8vIEZvdW5kIHNv
bWUgYmFkIGdyYW1tYXIuIEZpbmQgdGhlIGVhcmxpZXN0IGRldGFpbCByYW5nZSB0aGF0IHN0YXJ0
cyBpbiBvdXIgc2VhcmNoIHJhbmdlIChpZiBhbnkpLgotICAgICAgICBpbnQgYmFkR3JhbW1hcklu
ZGV4ID0gZmluZEZpcnN0R3JhbW1hckRldGFpbEluUmFuZ2UoZ3JhbW1hckRldGFpbHMsIGJhZEdy
YW1tYXJQaHJhc2VMb2NhdGlvbiwgYmFkR3JhbW1hclBocmFzZUxlbmd0aCwgc2VhcmNoUmFuZ2Us
IHNlYXJjaFJhbmdlU3RhcnRPZmZzZXQsIHNlYXJjaFJhbmdlRW5kT2Zmc2V0LCBtYXJrQWxsKTsK
LSAgICAgICAgaWYgKGJhZEdyYW1tYXJJbmRleCA+PSAwKSB7Ci0gICAgICAgICAgICBBU1NFUlQo
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGJhZEdyYW1tYXJJbmRleCkgPCBncmFtbWFyRGV0YWlscy5z
aXplKCkpOwotICAgICAgICAgICAgb3V0R3JhbW1hckRldGFpbCA9IGdyYW1tYXJEZXRhaWxzW2Jh
ZEdyYW1tYXJJbmRleF07Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBJZiB3ZSBmb3VuZCBhIGRl
dGFpbCBpbiByYW5nZSwgdGhlbiB3ZSBoYXZlIGZvdW5kIHRoZSBmaXJzdCBiYWQgcGhyYXNlICh1
bmxlc3Mgd2UgZm91bmQgb25lIGVhcmxpZXIgYnV0Ci0gICAgICAgIC8vIGtlcHQgZ29pbmcgc28g
d2UgY291bGQgbWFyayBhbGwgaW5zdGFuY2VzKS4KLSAgICAgICAgaWYgKGJhZEdyYW1tYXJJbmRl
eCA+PSAwICYmIGZpcnN0QmFkR3JhbW1hclBocmFzZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAg
IG91dEdyYW1tYXJQaHJhc2VPZmZzZXQgPSBiYWRHcmFtbWFyUGhyYXNlTG9jYXRpb24gLSBzZWFy
Y2hSYW5nZVN0YXJ0T2Zmc2V0OwotICAgICAgICAgICAgZmlyc3RCYWRHcmFtbWFyUGhyYXNlID0g
cGFyYWdyYXBoU3RyaW5nLnN1YnN0cmluZyhiYWRHcmFtbWFyUGhyYXNlTG9jYXRpb24sIGJhZEdy
YW1tYXJQaHJhc2VMZW5ndGgpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBGb3VuZCBv
bmUuIFdlJ3JlIGRvbmUgbm93LCB1bmxlc3Mgd2UncmUgbWFya2luZyBlYWNoIGluc3RhbmNlLgot
ICAgICAgICAgICAgaWYgKCFtYXJrQWxsKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0KLSAgICAgICAgLy8gVGhlc2UgcmVzdWx0cyB3ZXJlIGFsbCBiZXR3ZWVuIHRoZSBzdGFy
dCBvZiB0aGUgcGFyYWdyYXBoIGFuZCB0aGUgc3RhcnQgb2YgdGhlIHNlYXJjaCByYW5nZTsgbG9v
awotICAgICAgICAvLyBiZXlvbmQgdGhpcyBwaHJhc2UuCi0gICAgICAgIHN0YXJ0T2Zmc2V0ID0g
YmFkR3JhbW1hclBocmFzZUxvY2F0aW9uICsgYmFkR3JhbW1hclBocmFzZUxlbmd0aDsKLSAgICB9
Ci0gICAgCi0gICAgcmV0dXJuIGZpcnN0QmFkR3JhbW1hclBocmFzZTsKLX0KLSAgICAKLSNlbmRp
ZiAvKiBub3QgQlVJTERJTkdfT05fVElHRVIgKi8KLQotI2lmIFBMQVRGT1JNKE1BQykgJiYgIWRl
ZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQp
Ci0KLXN0YXRpYyBTdHJpbmcgZmluZEZpcnN0TWlzc3BlbGxpbmdPckJhZEdyYW1tYXJJblJhbmdl
KEVkaXRvckNsaWVudCogY2xpZW50LCBSYW5nZSogc2VhcmNoUmFuZ2UsIGJvb2wgY2hlY2tHcmFt
bWFyLCBib29sJiBvdXRJc1NwZWxsaW5nLCBpbnQmIG91dEZpcnN0Rm91bmRPZmZzZXQsIEdyYW1t
YXJEZXRhaWwmIG91dEdyYW1tYXJEZXRhaWwpCi17Ci0gICAgQVNTRVJUX0FSRyhjbGllbnQsIGNs
aWVudCk7Ci0gICAgQVNTRVJUX0FSRyhzZWFyY2hSYW5nZSwgc2VhcmNoUmFuZ2UpOwotICAgIAot
ICAgIFN0cmluZyBmaXJzdEZvdW5kSXRlbTsKLSAgICBTdHJpbmcgbWlzc3BlbGxlZFdvcmQ7Ci0g
ICAgU3RyaW5nIGJhZEdyYW1tYXJQaHJhc2U7Ci0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0g
ICAgCi0gICAgLy8gSW5pdGlhbGl6ZSBvdXQgcGFyYW1ldGVyczsgdGhlc2Ugd2lsbCBiZSB1cGRh
dGVkIGlmIHdlIGZpbmQgc29tZXRoaW5nIHRvIHJldHVybi4KLSAgICBvdXRJc1NwZWxsaW5nID0g
dHJ1ZTsKLSAgICBvdXRGaXJzdEZvdW5kT2Zmc2V0ID0gMDsKLSAgICBvdXRHcmFtbWFyRGV0YWls
LmxvY2F0aW9uID0gLTE7Ci0gICAgb3V0R3JhbW1hckRldGFpbC5sZW5ndGggPSAwOwotICAgIG91
dEdyYW1tYXJEZXRhaWwuZ3Vlc3Nlcy5jbGVhcigpOwotICAgIG91dEdyYW1tYXJEZXRhaWwudXNl
ckRlc2NyaXB0aW9uID0gIiI7Ci0gICAgCi0gICAgLy8gRXhwYW5kIHRoZSBzZWFyY2ggcmFuZ2Ug
dG8gZW5jb21wYXNzIGVudGlyZSBwYXJhZ3JhcGhzLCBzaW5jZSB0ZXh0IGNoZWNraW5nIG5lZWRz
IHRoYXQgbXVjaCBjb250ZXh0LgotICAgIC8vIERldGVybWluZSB0aGUgY2hhcmFjdGVyIG9mZnNl
dCBmcm9tIHRoZSBzdGFydCBvZiB0aGUgcGFyYWdyYXBoIHRvIHRoZSBzdGFydCBvZiB0aGUgb3Jp
Z2luYWwgc2VhcmNoIHJhbmdlLAotICAgIC8vIHNpbmNlIHdlIHdpbGwgd2FudCB0byBpZ25vcmUg
cmVzdWx0cyBpbiB0aGlzIGFyZWEuCi0gICAgUmVmUHRyPFJhbmdlPiBwYXJhZ3JhcGhSYW5nZSA9
IHNlYXJjaFJhbmdlLT5jbG9uZVJhbmdlKGVjKTsKLSAgICBzZXRTdGFydChwYXJhZ3JhcGhSYW5n
ZS5nZXQoKSwgc3RhcnRPZlBhcmFncmFwaChzZWFyY2hSYW5nZS0+c3RhcnRQb3NpdGlvbigpKSk7
Ci0gICAgaW50IHRvdGFsUmFuZ2VMZW5ndGggPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKHBh
cmFncmFwaFJhbmdlLmdldCgpKTsKLSAgICBzZXRFbmQocGFyYWdyYXBoUmFuZ2UuZ2V0KCksIGVu
ZE9mUGFyYWdyYXBoKHNlYXJjaFJhbmdlLT5zdGFydFBvc2l0aW9uKCkpKTsKLSAgICAKLSAgICBS
ZWZQdHI8UmFuZ2U+IG9mZnNldEFzUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKHBhcmFncmFwaFJhbmdl
LT5zdGFydENvbnRhaW5lcihlYyktPmRvY3VtZW50KCksIHBhcmFncmFwaFJhbmdlLT5zdGFydFBv
c2l0aW9uKCksIHNlYXJjaFJhbmdlLT5zdGFydFBvc2l0aW9uKCkpOwotICAgIGludCBzZWFyY2hS
YW5nZVN0YXJ0T2Zmc2V0ID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChvZmZzZXRBc1Jhbmdl
LmdldCgpKTsKLSAgICBpbnQgdG90YWxMZW5ndGhQcm9jZXNzZWQgPSAwOwotICAgIAotICAgIGJv
b2wgZmlyc3RJdGVyYXRpb24gPSB0cnVlOwotICAgIGJvb2wgbGFzdEl0ZXJhdGlvbiA9IGZhbHNl
OwotICAgIHdoaWxlICh0b3RhbExlbmd0aFByb2Nlc3NlZCA8IHRvdGFsUmFuZ2VMZW5ndGgpIHsK
LSAgICAgICAgLy8gSXRlcmF0ZSB0aHJvdWdoIHRoZSBzZWFyY2ggcmFuZ2UgYnkgcGFyYWdyYXBo
cywgY2hlY2tpbmcgZWFjaCBvbmUgZm9yIHNwZWxsaW5nIGFuZCBncmFtbWFyLgotICAgICAgICBp
bnQgY3VycmVudExlbmd0aCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgocGFyYWdyYXBoUmFu
Z2UuZ2V0KCkpOwotICAgICAgICBpbnQgY3VycmVudFN0YXJ0T2Zmc2V0ID0gZmlyc3RJdGVyYXRp
b24gPyBzZWFyY2hSYW5nZVN0YXJ0T2Zmc2V0IDogMDsKLSAgICAgICAgaW50IGN1cnJlbnRFbmRP
ZmZzZXQgPSBjdXJyZW50TGVuZ3RoOwotICAgICAgICBpZiAoaW5TYW1lUGFyYWdyYXBoKHBhcmFn
cmFwaFJhbmdlLT5zdGFydFBvc2l0aW9uKCksIHNlYXJjaFJhbmdlLT5lbmRQb3NpdGlvbigpKSkg
ewotICAgICAgICAgICAgLy8gRGV0ZXJtaW5lIHRoZSBjaGFyYWN0ZXIgb2Zmc2V0IGZyb20gdGhl
IGVuZCBvZiB0aGUgb3JpZ2luYWwgc2VhcmNoIHJhbmdlIHRvIHRoZSBlbmQgb2YgdGhlIHBhcmFn
cmFwaCwKLSAgICAgICAgICAgIC8vIHNpbmNlIHdlIHdpbGwgd2FudCB0byBpZ25vcmUgcmVzdWx0
cyBpbiB0aGlzIGFyZWEuCi0gICAgICAgICAgICBSZWZQdHI8UmFuZ2U+IGVuZE9mZnNldEFzUmFu
Z2UgPSBSYW5nZTo6Y3JlYXRlKHBhcmFncmFwaFJhbmdlLT5zdGFydENvbnRhaW5lcihlYyktPmRv
Y3VtZW50KCksIHBhcmFncmFwaFJhbmdlLT5zdGFydFBvc2l0aW9uKCksIHNlYXJjaFJhbmdlLT5l
bmRQb3NpdGlvbigpKTsKLSAgICAgICAgICAgIGN1cnJlbnRFbmRPZmZzZXQgPSBUZXh0SXRlcmF0
b3I6OnJhbmdlTGVuZ3RoKGVuZE9mZnNldEFzUmFuZ2UuZ2V0KCkpOwotICAgICAgICAgICAgbGFz
dEl0ZXJhdGlvbiA9IHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGN1cnJlbnRTdGFydE9m
ZnNldCA8IGN1cnJlbnRFbmRPZmZzZXQpIHsKLSAgICAgICAgICAgIFN0cmluZyBwYXJhZ3JhcGhT
dHJpbmcgPSBwbGFpblRleHQocGFyYWdyYXBoUmFuZ2UuZ2V0KCkpOwotICAgICAgICAgICAgaWYg
KHBhcmFncmFwaFN0cmluZy5sZW5ndGgoKSA+IDApIHsKLSAgICAgICAgICAgICAgICBib29sIGZv
dW5kR3JhbW1hciA9IGZhbHNlOwotICAgICAgICAgICAgICAgIGludCBzcGVsbGluZ0xvY2F0aW9u
ID0gMDsKLSAgICAgICAgICAgICAgICBpbnQgZ3JhbW1hclBocmFzZUxvY2F0aW9uID0gMDsKLSAg
ICAgICAgICAgICAgICBpbnQgZ3JhbW1hckRldGFpbExvY2F0aW9uID0gMDsKLSAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBncmFtbWFyRGV0YWlsSW5kZXggPSAwOwotICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IHJlc3VsdHM7Ci0gICAg
ICAgICAgICAgICAgdWludDY0X3QgY2hlY2tpbmdUeXBlcyA9IGNoZWNrR3JhbW1hciA/IChUZXh0
Q2hlY2tpbmdUeXBlU3BlbGxpbmcgfCBUZXh0Q2hlY2tpbmdUeXBlR3JhbW1hcikgOiBUZXh0Q2hl
Y2tpbmdUeXBlU3BlbGxpbmc7Ci0gICAgICAgICAgICAgICAgY2xpZW50LT5jaGVja1RleHRPZlBh
cmFncmFwaChwYXJhZ3JhcGhTdHJpbmcuY2hhcmFjdGVycygpLCBwYXJhZ3JhcGhTdHJpbmcubGVu
Z3RoKCksIGNoZWNraW5nVHlwZXMsIHJlc3VsdHMpOwotICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZXN1bHRzLnNpemUoKTsgaSsrKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0IFRleHRDaGVja2luZ1Jlc3VsdCogcmVzdWx0ID0g
JnJlc3VsdHNbaV07Ci0gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQtPnR5cGUgPT0gVGV4
dENoZWNraW5nVHlwZVNwZWxsaW5nICYmIHJlc3VsdC0+bG9jYXRpb24gPj0gY3VycmVudFN0YXJ0
T2Zmc2V0ICYmIHJlc3VsdC0+bG9jYXRpb24gKyByZXN1bHQtPmxlbmd0aCA8PSBjdXJyZW50RW5k
T2Zmc2V0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQocmVzdWx0LT5sZW5ndGgg
PiAwICYmIHJlc3VsdC0+bG9jYXRpb24gPj0gMCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBz
cGVsbGluZ0xvY2F0aW9uID0gcmVzdWx0LT5sb2NhdGlvbjsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIG1pc3NwZWxsZWRXb3JkID0gcGFyYWdyYXBoU3RyaW5nLnN1YnN0cmluZyhyZXN1bHQtPmxv
Y2F0aW9uLCByZXN1bHQtPmxlbmd0aCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQo
bWlzc3BlbGxlZFdvcmQubGVuZ3RoKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGNoZWNrR3Jh
bW1hciAmJiByZXN1bHQtPnR5cGUgPT0gVGV4dENoZWNraW5nVHlwZUdyYW1tYXIgJiYgcmVzdWx0
LT5sb2NhdGlvbiA8IGN1cnJlbnRFbmRPZmZzZXQgJiYgcmVzdWx0LT5sb2NhdGlvbiArIHJlc3Vs
dC0+bGVuZ3RoID4gY3VycmVudFN0YXJ0T2Zmc2V0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBBU1NFUlQocmVzdWx0LT5sZW5ndGggPiAwICYmIHJlc3VsdC0+bG9jYXRpb24gPj0gMCk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBjYW4ndCBzdG9wIGFmdGVyIHRoZSBmaXJzdCBn
cmFtbWFyIHJlc3VsdCwgc2luY2UgdGhlcmUgbWlnaHQgc3RpbGwgYmUgYSBzcGVsbGluZyByZXN1
bHQgYWZ0ZXIKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGl0IGJlZ2lucyBidXQgYmVmb3Jl
IHRoZSBmaXJzdCBkZXRhaWwgaW4gaXQsIGJ1dCB3ZSBjYW4gc3RvcCBpZiB3ZSBmaW5kIGEgc2Vj
b25kIGdyYW1tYXIgcmVzdWx0LgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvdW5kR3Jh
bW1hcikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCByZXN1bHQtPmRldGFpbHMuc2l6ZSgp
OyBqKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBHcmFtbWFyRGV0YWls
KiBkZXRhaWwgPSAmcmVzdWx0LT5kZXRhaWxzW2pdOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEFTU0VSVChkZXRhaWwtPmxlbmd0aCA+IDAgJiYgZGV0YWlsLT5sb2NhdGlvbiA+PSAwKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LT5sb2NhdGlvbiArIGRldGFp
bC0+bG9jYXRpb24gPj0gY3VycmVudFN0YXJ0T2Zmc2V0ICYmIHJlc3VsdC0+bG9jYXRpb24gKyBk
ZXRhaWwtPmxvY2F0aW9uICsgZGV0YWlsLT5sZW5ndGggPD0gY3VycmVudEVuZE9mZnNldCAmJiAo
IWZvdW5kR3JhbW1hciB8fCByZXN1bHQtPmxvY2F0aW9uICsgZGV0YWlsLT5sb2NhdGlvbiA8IGdy
YW1tYXJEZXRhaWxMb2NhdGlvbikpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Z3JhbW1hckRldGFpbEluZGV4ID0gajsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Z3JhbW1hckRldGFpbExvY2F0aW9uID0gcmVzdWx0LT5sb2NhdGlvbiArIGRldGFpbC0+bG9jYXRp
b247Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kR3JhbW1hciA9IHRydWU7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvdW5kR3JhbW1hcikgewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGdyYW1tYXJQaHJhc2VMb2NhdGlvbiA9IHJlc3VsdC0+bG9jYXRp
b247Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0R3JhbW1hckRldGFpbCA9IHJlc3Vs
dC0+ZGV0YWlsc1tncmFtbWFyRGV0YWlsSW5kZXhdOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJhZEdyYW1tYXJQaHJhc2UgPSBwYXJhZ3JhcGhTdHJpbmcuc3Vic3RyaW5nKHJlc3VsdC0+
bG9jYXRpb24sIHJlc3VsdC0+bGVuZ3RoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBB
U1NFUlQoYmFkR3JhbW1hclBocmFzZS5sZW5ndGgoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgICAgICBpZiAoIW1pc3NwZWxsZWRXb3JkLmlzRW1wdHkoKSAmJiAoIWNoZWNrR3JhbW1hciB8
fCBiYWRHcmFtbWFyUGhyYXNlLmlzRW1wdHkoKSB8fCBzcGVsbGluZ0xvY2F0aW9uIDw9IGdyYW1t
YXJEZXRhaWxMb2NhdGlvbikpIHsKLSAgICAgICAgICAgICAgICAgICAgaW50IHNwZWxsaW5nT2Zm
c2V0ID0gc3BlbGxpbmdMb2NhdGlvbiAtIGN1cnJlbnRTdGFydE9mZnNldDsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKCFmaXJzdEl0ZXJhdGlvbikgewotICAgICAgICAgICAgICAgICAgICAgICAg
UmVmUHRyPFJhbmdlPiBwYXJhZ3JhcGhPZmZzZXRBc1JhbmdlID0gUmFuZ2U6OmNyZWF0ZShwYXJh
Z3JhcGhSYW5nZS0+c3RhcnRDb250YWluZXIoZWMpLT5kb2N1bWVudCgpLCBzZWFyY2hSYW5nZS0+
c3RhcnRQb3NpdGlvbigpLCBwYXJhZ3JhcGhSYW5nZS0+c3RhcnRQb3NpdGlvbigpKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHNwZWxsaW5nT2Zmc2V0ICs9IFRleHRJdGVyYXRvcjo6cmFuZ2VM
ZW5ndGgocGFyYWdyYXBoT2Zmc2V0QXNSYW5nZS5nZXQoKSk7Ci0gICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgb3V0SXNTcGVsbGluZyA9IHRydWU7Ci0gICAgICAgICAg
ICAgICAgICAgIG91dEZpcnN0Rm91bmRPZmZzZXQgPSBzcGVsbGluZ09mZnNldDsKLSAgICAgICAg
ICAgICAgICAgICAgZmlyc3RGb3VuZEl0ZW0gPSBtaXNzcGVsbGVkV29yZDsKLSAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChj
aGVja0dyYW1tYXIgJiYgIWJhZEdyYW1tYXJQaHJhc2UuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGludCBncmFtbWFyUGhyYXNlT2Zmc2V0ID0gZ3JhbW1hclBocmFzZUxvY2F0aW9u
IC0gY3VycmVudFN0YXJ0T2Zmc2V0OwotICAgICAgICAgICAgICAgICAgICBpZiAoIWZpcnN0SXRl
cmF0aW9uKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBSZWZQdHI8UmFuZ2U+IHBhcmFncmFw
aE9mZnNldEFzUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKHBhcmFncmFwaFJhbmdlLT5zdGFydENvbnRh
aW5lcihlYyktPmRvY3VtZW50KCksIHNlYXJjaFJhbmdlLT5zdGFydFBvc2l0aW9uKCksIHBhcmFn
cmFwaFJhbmdlLT5zdGFydFBvc2l0aW9uKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgZ3Jh
bW1hclBocmFzZU9mZnNldCArPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKHBhcmFncmFwaE9m
ZnNldEFzUmFuZ2UuZ2V0KCkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgIG91dElzU3BlbGxpbmcgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgb3V0Rmly
c3RGb3VuZE9mZnNldCA9IGdyYW1tYXJQaHJhc2VPZmZzZXQ7Ci0gICAgICAgICAgICAgICAgICAg
IGZpcnN0Rm91bmRJdGVtID0gYmFkR3JhbW1hclBocmFzZTsKLSAgICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
ICAgIGlmIChsYXN0SXRlcmF0aW9uIHx8IHRvdGFsTGVuZ3RoUHJvY2Vzc2VkICsgY3VycmVudExl
bmd0aCA+PSB0b3RhbFJhbmdlTGVuZ3RoKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIFZp
c2libGVQb3NpdGlvbiBuZXdQYXJhZ3JhcGhTdGFydCA9IHN0YXJ0T2ZOZXh0UGFyYWdyYXBoKHBh
cmFncmFwaFJhbmdlLT5lbmRQb3NpdGlvbigpKTsKLSAgICAgICAgc2V0U3RhcnQocGFyYWdyYXBo
UmFuZ2UuZ2V0KCksIG5ld1BhcmFncmFwaFN0YXJ0KTsKLSAgICAgICAgc2V0RW5kKHBhcmFncmFw
aFJhbmdlLmdldCgpLCBlbmRPZlBhcmFncmFwaChuZXdQYXJhZ3JhcGhTdGFydCkpOwotICAgICAg
ICBmaXJzdEl0ZXJhdGlvbiA9IGZhbHNlOwotICAgICAgICB0b3RhbExlbmd0aFByb2Nlc3NlZCAr
PSBjdXJyZW50TGVuZ3RoOwotICAgIH0KLSAgICByZXR1cm4gZmlyc3RGb3VuZEl0ZW07Ci19Ci0K
LSNlbmRpZgotCiB2b2lkIEVkaXRvcjo6YWR2YW5jZVRvTmV4dE1pc3NwZWxsaW5nKGJvb2wgc3Rh
cnRCZWZvcmVTZWxlY3Rpb24pCiB7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CkBAIC0xOTc5
LDYgKzE2NTgsOCBAQCB2b2lkIEVkaXRvcjo6YWR2YW5jZVRvTmV4dE1pc3NwZWxsaW5nKGJvb2wg
c3RhcnRCZWZvcmVTZWxlY3Rpb24pCiAgICAgLy8gcmVwZWF0ZWQgImNoZWNrIHNwZWxsaW5nIiBj
b21tYW5kcyB3b3JrLgogICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uKGZyYW1lKCktPnNl
bGVjdGlvbigpLT5zZWxlY3Rpb24oKSk7CiAgICAgUmVmUHRyPFJhbmdlPiBzcGVsbGluZ1NlYXJj
aFJhbmdlKHJhbmdlT2ZDb250ZW50cyhmcmFtZSgpLT5kb2N1bWVudCgpKSk7CisgICAgVGV4dENo
ZWNraW5nSGVscGVyIGNoZWNrZXIoY2xpZW50KCksIHNwZWxsaW5nU2VhcmNoUmFuZ2UpOworCiAg
ICAgYm9vbCBzdGFydGVkV2l0aFNlbGVjdGlvbiA9IGZhbHNlOwogICAgIGlmIChzZWxlY3Rpb24u
c3RhcnQoKS5ub2RlKCkpIHsKICAgICAgICAgc3RhcnRlZFdpdGhTZWxlY3Rpb24gPSB0cnVlOwpA
QCAtMjA0NCw3ICsxNzI1LDcgQEAgdm9pZCBFZGl0b3I6OmFkdmFuY2VUb05leHRNaXNzcGVsbGlu
Zyhib29sIHN0YXJ0QmVmb3JlU2VsZWN0aW9uKQogICAgIGJvb2wgaXNTcGVsbGluZyA9IHRydWU7
CiAgICAgaW50IGZvdW5kT2Zmc2V0ID0gMDsKICAgICBHcmFtbWFyRGV0YWlsIGdyYW1tYXJEZXRh
aWw7Ci0gICAgU3RyaW5nIGZvdW5kSXRlbSA9IGZpbmRGaXJzdE1pc3NwZWxsaW5nT3JCYWRHcmFt
bWFySW5SYW5nZShjbGllbnQoKSwgc3BlbGxpbmdTZWFyY2hSYW5nZS5nZXQoKSwgaXNHcmFtbWFy
Q2hlY2tpbmdFbmFibGVkKCksIGlzU3BlbGxpbmcsIGZvdW5kT2Zmc2V0LCBncmFtbWFyRGV0YWls
KTsKKyAgICBTdHJpbmcgZm91bmRJdGVtID0gY2hlY2tlci5maW5kRmlyc3RNaXNzcGVsbGluZ09y
QmFkR3JhbW1hcihpc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQoKSwgaXNTcGVsbGluZywgZm91bmRP
ZmZzZXQsIGdyYW1tYXJEZXRhaWwpOwogICAgIGlmIChpc1NwZWxsaW5nKSB7CiAgICAgICAgIG1p
c3NwZWxsZWRXb3JkID0gZm91bmRJdGVtOwogICAgICAgICBtaXNzcGVsbGluZ09mZnNldCA9IGZv
dW5kT2Zmc2V0OwpAQCAtMjA1NCw3ICsxNzM1LDcgQEAgdm9pZCBFZGl0b3I6OmFkdmFuY2VUb05l
eHRNaXNzcGVsbGluZyhib29sIHN0YXJ0QmVmb3JlU2VsZWN0aW9uKQogICAgIH0KICNlbHNlCiAg
ICAgUmVmUHRyPFJhbmdlPiBmaXJzdE1pc3NwZWxsaW5nUmFuZ2U7Ci0gICAgU3RyaW5nIG1pc3Nw
ZWxsZWRXb3JkID0gZmluZEZpcnN0TWlzc3BlbGxpbmdJblJhbmdlKGNsaWVudCgpLCBzcGVsbGlu
Z1NlYXJjaFJhbmdlLmdldCgpLCBtaXNzcGVsbGluZ09mZnNldCwgZmFsc2UsIGZpcnN0TWlzc3Bl
bGxpbmdSYW5nZSk7CisgICAgU3RyaW5nIG1pc3NwZWxsZWRXb3JkID0gY2hlY2tlci5maW5kRmly
c3RNaXNzcGVsbGluZyhtaXNzcGVsbGluZ09mZnNldCwgZmFsc2UsIGZpcnN0TWlzc3BlbGxpbmdS
YW5nZSk7CiAgICAgU3RyaW5nIGJhZEdyYW1tYXJQaHJhc2U7CiAKICNpZm5kZWYgQlVJTERJTkdf
T05fVElHRVIKQEAgLTIwNzEsNyArMTc1Miw3IEBAIHZvaWQgRWRpdG9yOjphZHZhbmNlVG9OZXh0
TWlzc3BlbGxpbmcoYm9vbCBzdGFydEJlZm9yZVNlbGVjdGlvbikKICAgICB9CiAgICAgCiAgICAg
aWYgKGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCgpKQotICAgICAgICBiYWRHcmFtbWFyUGhyYXNl
ID0gZmluZEZpcnN0QmFkR3JhbW1hckluUmFuZ2UoY2xpZW50KCksIGdyYW1tYXJTZWFyY2hSYW5n
ZS5nZXQoKSwgZ3JhbW1hckRldGFpbCwgZ3JhbW1hclBocmFzZU9mZnNldCwgZmFsc2UpOworICAg
ICAgICBiYWRHcmFtbWFyUGhyYXNlID0gY2hlY2tlci5maW5kRmlyc3RCYWRHcmFtbWFyKGdyYW1t
YXJEZXRhaWwsIGdyYW1tYXJQaHJhc2VPZmZzZXQsIGZhbHNlKTsKICNlbmRpZgogI2VuZGlmCiAg
ICAgCkBAIC0yMDg0LDcgKzE3NjUsNyBAQCB2b2lkIEVkaXRvcjo6YWR2YW5jZVRvTmV4dE1pc3Nw
ZWxsaW5nKGJvb2wgc3RhcnRCZWZvcmVTZWxlY3Rpb24pCiAgICAgICAgIAogI2lmIFBMQVRGT1JN
KE1BQykgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5H
X09OX0xFT1BBUkQpCiAgICAgICAgIGdyYW1tYXJTZWFyY2hSYW5nZSA9IHNwZWxsaW5nU2VhcmNo
UmFuZ2UtPmNsb25lUmFuZ2UoZWMpOwotICAgICAgICBmb3VuZEl0ZW0gPSBmaW5kRmlyc3RNaXNz
cGVsbGluZ09yQmFkR3JhbW1hckluUmFuZ2UoY2xpZW50KCksIHNwZWxsaW5nU2VhcmNoUmFuZ2Uu
Z2V0KCksIGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCgpLCBpc1NwZWxsaW5nLCBmb3VuZE9mZnNl
dCwgZ3JhbW1hckRldGFpbCk7CisgICAgICAgIGZvdW5kSXRlbSA9IGNoZWNrZXIuZmluZEZpcnN0
TWlzc3BlbGxpbmdPckJhZEdyYW1tYXIoaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKCksIGlzU3Bl
bGxpbmcsIGZvdW5kT2Zmc2V0LCBncmFtbWFyRGV0YWlsKTsKICAgICAgICAgaWYgKGlzU3BlbGxp
bmcpIHsKICAgICAgICAgICAgIG1pc3NwZWxsZWRXb3JkID0gZm91bmRJdGVtOwogICAgICAgICAg
ICAgbWlzc3BlbGxpbmdPZmZzZXQgPSBmb3VuZE9mZnNldDsKQEAgLTIwOTMsNyArMTc3NCw3IEBA
IHZvaWQgRWRpdG9yOjphZHZhbmNlVG9OZXh0TWlzc3BlbGxpbmcoYm9vbCBzdGFydEJlZm9yZVNl
bGVjdGlvbikKICAgICAgICAgICAgIGdyYW1tYXJQaHJhc2VPZmZzZXQgPSBmb3VuZE9mZnNldDsK
ICAgICAgICAgfQogI2Vsc2UKLSAgICAgICAgbWlzc3BlbGxlZFdvcmQgPSBmaW5kRmlyc3RNaXNz
cGVsbGluZ0luUmFuZ2UoY2xpZW50KCksIHNwZWxsaW5nU2VhcmNoUmFuZ2UuZ2V0KCksIG1pc3Nw
ZWxsaW5nT2Zmc2V0LCBmYWxzZSwgZmlyc3RNaXNzcGVsbGluZ1JhbmdlKTsKKyAgICAgICAgbWlz
c3BlbGxlZFdvcmQgPSBjaGVja2VyLmZpbmRGaXJzdE1pc3NwZWxsaW5nKG1pc3NwZWxsaW5nT2Zm
c2V0LCBmYWxzZSwgZmlyc3RNaXNzcGVsbGluZ1JhbmdlKTsKIAogI2lmbmRlZiBCVUlMRElOR19P
Tl9USUdFUgogICAgICAgICBncmFtbWFyU2VhcmNoUmFuZ2UgPSBzcGVsbGluZ1NlYXJjaFJhbmdl
LT5jbG9uZVJhbmdlKGVjKTsKQEAgLTIxMDQsNyArMTc4NSw3IEBAIHZvaWQgRWRpdG9yOjphZHZh
bmNlVG9OZXh0TWlzc3BlbGxpbmcoYm9vbCBzdGFydEJlZm9yZVNlbGVjdGlvbikKICAgICAgICAg
ICAgIGdyYW1tYXJTZWFyY2hSYW5nZS0+c2V0RW5kKGNoYXJzLnJhbmdlKCktPnN0YXJ0Q29udGFp
bmVyKGVjKSwgY2hhcnMucmFuZ2UoKS0+c3RhcnRPZmZzZXQoZWMpLCBlYyk7CiAgICAgICAgIH0K
ICAgICAgICAgaWYgKGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCgpKQotICAgICAgICAgICAgYmFk
R3JhbW1hclBocmFzZSA9IGZpbmRGaXJzdEJhZEdyYW1tYXJJblJhbmdlKGNsaWVudCgpLCBncmFt
bWFyU2VhcmNoUmFuZ2UuZ2V0KCksIGdyYW1tYXJEZXRhaWwsIGdyYW1tYXJQaHJhc2VPZmZzZXQs
IGZhbHNlKTsKKyAgICAgICAgICAgIGJhZEdyYW1tYXJQaHJhc2UgPSBjaGVja2VyLmZpbmRGaXJz
dEJhZEdyYW1tYXIoZ3JhbW1hckRldGFpbCwgZ3JhbW1hclBocmFzZU9mZnNldCwgZmFsc2UpOwog
I2VuZGlmCiAjZW5kaWYKICAgICB9CkBAIC0yMTY4LDYwICsxODQ5LDEzIEBAIGJvb2wgRWRpdG9y
Ojppc1NlbGVjdGlvbk1pc3NwZWxsZWQoKQogICAgIHJldHVybiB0cnVlOwogfQogCi0jaWZuZGVm
IEJVSUxESU5HX09OX1RJR0VSCi1zdGF0aWMgYm9vbCBpc1JhbmdlVW5ncmFtbWF0aWNhbChFZGl0
b3JDbGllbnQqIGNsaWVudCwgUmFuZ2UgKnJhbmdlLCBWZWN0b3I8U3RyaW5nPiYgZ3Vlc3Nlc1Zl
Y3RvcikKLXsKLSAgICBpZiAoIWNsaWVudCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
RXhjZXB0aW9uQ29kZSBlYzsKLSAgICBpZiAoIXJhbmdlIHx8IHJhbmdlLT5jb2xsYXBzZWQoZWMp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgLy8gUmV0dXJucyB0cnVlIG9ubHkg
aWYgdGhlIHBhc3NlZCByYW5nZSBleGFjdGx5IGNvcnJlc3BvbmRzIHRvIGEgYmFkIGdyYW1tYXIg
ZGV0YWlsIHJhbmdlLiBUaGlzIGlzIGFuYWxvZ291cwotICAgIC8vIHRvIGlzU2VsZWN0aW9uTWlz
c3BlbGxlZC4gSXQncyBub3QgZ29vZCBlbm91Z2ggZm9yIHRoZXJlIHRvIGJlIHNvbWUgYmFkIGdy
YW1tYXIgc29tZXdoZXJlIGluIHRoZSByYW5nZSwKLSAgICAvLyBvciBvdmVybGFwcGluZyB0aGUg
cmFuZ2U7IHRoZSByYW5nZXMgbXVzdCBleGFjdGx5IG1hdGNoLgotICAgIGd1ZXNzZXNWZWN0b3Iu
Y2xlYXIoKTsKLSAgICBpbnQgZ3JhbW1hclBocmFzZU9mZnNldDsKLSAgICAKLSAgICBHcmFtbWFy
RGV0YWlsIGdyYW1tYXJEZXRhaWw7Ci0gICAgU3RyaW5nIGJhZEdyYW1tYXJQaHJhc2UgPSBmaW5k
Rmlyc3RCYWRHcmFtbWFySW5SYW5nZShjbGllbnQsIHJhbmdlLCBncmFtbWFyRGV0YWlsLCBncmFt
bWFyUGhyYXNlT2Zmc2V0LCBmYWxzZSk7ICAgIAotICAgIAotICAgIC8vIE5vIGJhZCBncmFtbWFy
IGluIHRoZXNlIHBhcnRzIGF0IGFsbC4KLSAgICBpZiAoYmFkR3JhbW1hclBocmFzZS5pc0VtcHR5
KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICAvLyBCYWQgZ3JhbW1hciwgYnV0
IHBocmFzZSAoZS5nLiBzZW50ZW5jZSkgc3RhcnRzIGJleW9uZCBzdGFydCBvZiByYW5nZS4KLSAg
ICBpZiAoZ3JhbW1hclBocmFzZU9mZnNldCA+IDApCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAKLSAgICBBU1NFUlQoZ3JhbW1hckRldGFpbC5sb2NhdGlvbiA+PSAwICYmIGdyYW1tYXJEZXRh
aWwubGVuZ3RoID4gMCk7Ci0gICAgCi0gICAgLy8gQmFkIGdyYW1tYXIsIGJ1dCBzdGFydCBvZiBk
ZXRhaWwgKGUuZy4gdW5ncmFtbWF0aWNhbCB3b3JkKSBkb2Vzbid0IG1hdGNoIHN0YXJ0IG9mIHJh
bmdlCi0gICAgaWYgKGdyYW1tYXJEZXRhaWwubG9jYXRpb24gKyBncmFtbWFyUGhyYXNlT2Zmc2V0
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgLy8gQmFkIGdyYW1tYXIgYXQgc3Rh
cnQgb2YgcmFuZ2UsIGJ1dCBlbmQgb2YgYmFkIGdyYW1tYXIgaXMgYmVmb3JlIG9yIGFmdGVyIGVu
ZCBvZiByYW5nZQotICAgIGlmIChncmFtbWFyRGV0YWlsLmxlbmd0aCAhPSBUZXh0SXRlcmF0b3I6
OnJhbmdlTGVuZ3RoKHJhbmdlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIC8v
IFVwZGF0ZSB0aGUgc3BlbGxpbmcgcGFuZWwgdG8gYmUgZGlzcGxheWluZyB0aGlzIGVycm9yICh3
aGV0aGVyIG9yIG5vdCB0aGUgc3BlbGxpbmcgcGFuZWwgaXMgb24gc2NyZWVuKS4KLSAgICAvLyBU
aGlzIGlzIG5lY2Vzc2FyeSB0byBtYWtlIGEgc3Vic2VxdWVudCBjYWxsIHRvIFtOU1NwZWxsQ2hl
Y2tlciBpZ25vcmVXb3JkOmluU3BlbGxEb2N1bWVudFdpdGhUYWc6XSB3b3JrCi0gICAgLy8gY29y
cmVjdGx5OyB0aGF0IGNhbGwgYmVoYXZlcyBkaWZmZXJlbnRseSBiYXNlZCBvbiB3aGV0aGVyIHRo
ZSBzcGVsbGluZyBwYW5lbCBpcyBkaXNwbGF5aW5nIGEgbWlzc3BlbGxpbmcKLSAgICAvLyBvciBh
IGdyYW1tYXIgZXJyb3IuCi0gICAgY2xpZW50LT51cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJT
dHJpbmcoYmFkR3JhbW1hclBocmFzZSwgZ3JhbW1hckRldGFpbCk7Ci0gICAgCi0gICAgcmV0dXJu
IHRydWU7Ci19Ci0jZW5kaWYKLQogYm9vbCBFZGl0b3I6OmlzU2VsZWN0aW9uVW5ncmFtbWF0aWNh
bCgpCiB7CiAjaWZkZWYgQlVJTERJTkdfT05fVElHRVIKICAgICByZXR1cm4gZmFsc2U7CiAjZWxz
ZQogICAgIFZlY3RvcjxTdHJpbmc+IGlnbm9yZWRHdWVzc2VzOwotICAgIHJldHVybiBpc1Jhbmdl
VW5ncmFtbWF0aWNhbChjbGllbnQoKSwgZnJhbWUoKS0+c2VsZWN0aW9uKCktPnRvTm9ybWFsaXpl
ZFJhbmdlKCkuZ2V0KCksIGlnbm9yZWRHdWVzc2VzKTsKKyAgICByZXR1cm4gVGV4dENoZWNraW5n
SGVscGVyKGNsaWVudCgpLCBmcmFtZSgpLT5zZWxlY3Rpb24oKS0+dG9Ob3JtYWxpemVkUmFuZ2Uo
KSkuaXNVbmdyYW1tYXRpY2FsKGlnbm9yZWRHdWVzc2VzKTsKICNlbmRpZgogfQogCkBAIC0yMjMx
LDggKzE4NjUsOCBAQCBWZWN0b3I8U3RyaW5nPiBFZGl0b3I6Omd1ZXNzZXNGb3JVbmdyYW1tYXRp
Y2FsU2VsZWN0aW9uKCkKICAgICByZXR1cm4gVmVjdG9yPFN0cmluZz4oKTsKICNlbHNlCiAgICAg
VmVjdG9yPFN0cmluZz4gZ3Vlc3NlczsKLSAgICAvLyBJZ25vcmUgdGhlIHJlc3VsdCBvZiBpc1Jh
bmdlVW5ncmFtbWF0aWNhbDsgd2UganVzdCB3YW50IHRoZSBndWVzc2VzLCB3aGV0aGVyIG9yIG5v
dCB0aGVyZSBhcmUgYW55Ci0gICAgaXNSYW5nZVVuZ3JhbW1hdGljYWwoY2xpZW50KCksIGZyYW1l
KCktPnNlbGVjdGlvbigpLT50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBndWVzc2VzKTsKKyAg
ICAvLyBJZ25vcmUgdGhlIHJlc3VsdCBvZiBpc1VuZ3JhbW1hdGljYWw7IHdlIGp1c3Qgd2FudCB0
aGUgZ3Vlc3Nlcywgd2hldGhlciBvciBub3QgdGhlcmUgYXJlIGFueQorICAgIFRleHRDaGVja2lu
Z0hlbHBlcihjbGllbnQoKSwgZnJhbWUoKS0+c2VsZWN0aW9uKCktPnRvTm9ybWFsaXplZFJhbmdl
KCkpLmlzVW5ncmFtbWF0aWNhbChndWVzc2VzKTsKICAgICByZXR1cm4gZ3Vlc3NlczsKICNlbmRp
ZgogfQpAQCAtMjI0OCw3MiArMTg4MiwxMCBAQCBWZWN0b3I8U3RyaW5nPiBFZGl0b3I6Omd1ZXNz
ZXNGb3JNaXNzcGVsbGVkU2VsZWN0aW9uKCkKICAgICByZXR1cm4gZ3Vlc3NlczsKIH0KIAotI2lm
IFBMQVRGT1JNKE1BQykgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVk
KEJVSUxESU5HX09OX0xFT1BBUkQpCi0KLXN0YXRpYyBWZWN0b3I8U3RyaW5nPiBndWVzc2VzRm9y
TWlzc3BlbGxlZE9yVW5ncmFtbWF0aWNhbFJhbmdlKEVkaXRvckNsaWVudCogY2xpZW50LCBSYW5n
ZSAqcmFuZ2UsIGJvb2wgY2hlY2tHcmFtbWFyLCBib29sJiBtaXNzcGVsbGVkLCBib29sJiB1bmdy
YW1tYXRpY2FsKQotewotICAgIFZlY3RvcjxTdHJpbmc+IGd1ZXNzZXM7Ci0gICAgRXhjZXB0aW9u
Q29kZSBlYzsKLSAgICBtaXNzcGVsbGVkID0gZmFsc2U7Ci0gICAgdW5ncmFtbWF0aWNhbCA9IGZh
bHNlOwotICAgIAotICAgIGlmICghY2xpZW50IHx8ICFyYW5nZSB8fCByYW5nZS0+Y29sbGFwc2Vk
KGVjKSkKLSAgICAgICAgcmV0dXJuIGd1ZXNzZXM7Ci0KLSAgICAvLyBFeHBhbmQgdGhlIHJhbmdl
IHRvIGVuY29tcGFzcyBlbnRpcmUgcGFyYWdyYXBocywgc2luY2UgdGV4dCBjaGVja2luZyBuZWVk
cyB0aGF0IG11Y2ggY29udGV4dC4KLSAgICBpbnQgcmFuZ2VTdGFydE9mZnNldDsKLSAgICBTdHJp
bmcgcGFyYWdyYXBoU3RyaW5nOwotICAgIFJlZlB0cjxSYW5nZT4gcGFyYWdyYXBoUmFuZ2UgPSBw
YXJhZ3JhcGhBbGlnbmVkUmFuZ2VGb3JSYW5nZShyYW5nZSwgcmFuZ2VTdGFydE9mZnNldCwgcGFy
YWdyYXBoU3RyaW5nKTsKLSAgICBpbnQgcmFuZ2VMZW5ndGggPSBUZXh0SXRlcmF0b3I6OnJhbmdl
TGVuZ3RoKHJhbmdlKTsKLSAgICBpZiAoIXJhbmdlTGVuZ3RoIHx8ICFwYXJhZ3JhcGhTdHJpbmcu
bGVuZ3RoKCkpCi0gICAgICAgIHJldHVybiBndWVzc2VzOwotCi0gICAgVmVjdG9yPFRleHRDaGVj
a2luZ1Jlc3VsdD4gcmVzdWx0czsKLSAgICB1aW50NjRfdCBjaGVja2luZ1R5cGVzID0gY2hlY2tH
cmFtbWFyID8gKFRleHRDaGVja2luZ1R5cGVTcGVsbGluZyB8IFRleHRDaGVja2luZ1R5cGVHcmFt
bWFyKSA6IFRleHRDaGVja2luZ1R5cGVTcGVsbGluZzsKLSAgICBjbGllbnQtPmNoZWNrVGV4dE9m
UGFyYWdyYXBoKHBhcmFncmFwaFN0cmluZy5jaGFyYWN0ZXJzKCksIHBhcmFncmFwaFN0cmluZy5s
ZW5ndGgoKSwgY2hlY2tpbmdUeXBlcywgcmVzdWx0cyk7Ci0gICAgCi0gICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHJlc3VsdHMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgY29uc3QgVGV4dENo
ZWNraW5nUmVzdWx0KiByZXN1bHQgPSAmcmVzdWx0c1tpXTsKLSAgICAgICAgaWYgKHJlc3VsdC0+
dHlwZSA9PSBUZXh0Q2hlY2tpbmdUeXBlU3BlbGxpbmcgJiYgcmVzdWx0LT5sb2NhdGlvbiA9PSBy
YW5nZVN0YXJ0T2Zmc2V0ICYmIHJlc3VsdC0+bGVuZ3RoID09IHJhbmdlTGVuZ3RoKSB7Ci0gICAg
ICAgICAgICBTdHJpbmcgbWlzc3BlbGxlZFdvcmQgPSBwYXJhZ3JhcGhTdHJpbmcuc3Vic3RyaW5n
KHJhbmdlU3RhcnRPZmZzZXQsIHJhbmdlTGVuZ3RoKTsKLSAgICAgICAgICAgIEFTU0VSVChtaXNz
cGVsbGVkV29yZC5sZW5ndGgoKSk7Ci0gICAgICAgICAgICBjbGllbnQtPmdldEd1ZXNzZXNGb3JX
b3JkKG1pc3NwZWxsZWRXb3JkLCBndWVzc2VzKTsKLSAgICAgICAgICAgIGNsaWVudC0+dXBkYXRl
U3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVkV29yZChtaXNzcGVsbGVkV29yZCk7Ci0gICAgICAgICAg
ICBtaXNzcGVsbGVkID0gdHJ1ZTsKLSAgICAgICAgICAgIHJldHVybiBndWVzc2VzOwotICAgICAg
ICB9Ci0gICAgfQotICAgIAotICAgIGlmICghY2hlY2tHcmFtbWFyKQotICAgICAgICByZXR1cm4g
Z3Vlc3NlczsKLSAgICAgICAgCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlc3VsdHMu
c2l6ZSgpOyBpKyspIHsKLSAgICAgICAgY29uc3QgVGV4dENoZWNraW5nUmVzdWx0KiByZXN1bHQg
PSAmcmVzdWx0c1tpXTsKLSAgICAgICAgaWYgKHJlc3VsdC0+dHlwZSA9PSBUZXh0Q2hlY2tpbmdU
eXBlR3JhbW1hciAmJiByZXN1bHQtPmxvY2F0aW9uIDw9IHJhbmdlU3RhcnRPZmZzZXQgJiYgcmVz
dWx0LT5sb2NhdGlvbiArIHJlc3VsdC0+bGVuZ3RoID49IHJhbmdlU3RhcnRPZmZzZXQgKyByYW5n
ZUxlbmd0aCkgewotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IHJlc3VsdC0+
ZGV0YWlscy5zaXplKCk7IGorKykgewotICAgICAgICAgICAgICAgIGNvbnN0IEdyYW1tYXJEZXRh
aWwqIGRldGFpbCA9ICZyZXN1bHQtPmRldGFpbHNbal07Ci0gICAgICAgICAgICAgICAgQVNTRVJU
KGRldGFpbC0+bGVuZ3RoID4gMCAmJiBkZXRhaWwtPmxvY2F0aW9uID49IDApOwotICAgICAgICAg
ICAgICAgIGlmIChyZXN1bHQtPmxvY2F0aW9uICsgZGV0YWlsLT5sb2NhdGlvbiA9PSByYW5nZVN0
YXJ0T2Zmc2V0ICYmIGRldGFpbC0+bGVuZ3RoID09IHJhbmdlTGVuZ3RoKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIFN0cmluZyBiYWRHcmFtbWFyUGhyYXNlID0gcGFyYWdyYXBoU3RyaW5nLnN1YnN0
cmluZyhyZXN1bHQtPmxvY2F0aW9uLCByZXN1bHQtPmxlbmd0aCk7Ci0gICAgICAgICAgICAgICAg
ICAgIEFTU0VSVChiYWRHcmFtbWFyUGhyYXNlLmxlbmd0aCgpKTsKLSAgICAgICAgICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBrID0gMDsgayA8IGRldGFpbC0+Z3Vlc3Nlcy5zaXplKCk7IGsrKykK
LSAgICAgICAgICAgICAgICAgICAgICAgIGd1ZXNzZXMuYXBwZW5kKGRldGFpbC0+Z3Vlc3Nlc1tr
XSk7Ci0gICAgICAgICAgICAgICAgICAgIGNsaWVudC0+dXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFt
bWFyU3RyaW5nKGJhZEdyYW1tYXJQaHJhc2UsICpkZXRhaWwpOwotICAgICAgICAgICAgICAgICAg
ICB1bmdyYW1tYXRpY2FsID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGd1ZXNz
ZXM7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQot
ICAgIHJldHVybiBndWVzc2VzOwotfQotCi0jZW5kaWYKLQogVmVjdG9yPFN0cmluZz4gRWRpdG9y
OjpndWVzc2VzRm9yTWlzc3BlbGxlZE9yVW5ncmFtbWF0aWNhbFNlbGVjdGlvbihib29sJiBtaXNz
cGVsbGVkLCBib29sJiB1bmdyYW1tYXRpY2FsKQogewogI2lmIFBMQVRGT1JNKE1BQykgJiYgIWRl
ZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQp
Ci0gICAgcmV0dXJuIGd1ZXNzZXNGb3JNaXNzcGVsbGVkT3JVbmdyYW1tYXRpY2FsUmFuZ2UoY2xp
ZW50KCksIGZyYW1lKCktPnNlbGVjdGlvbigpLT50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBp
c0dyYW1tYXJDaGVja2luZ0VuYWJsZWQoKSwgbWlzc3BlbGxlZCwgdW5ncmFtbWF0aWNhbCk7Cisg
ICAgcmV0dXJuIFRleHRDaGVja2luZ0hlbHBlcihjbGllbnQoKSwgZnJhbWUoKS0+c2VsZWN0aW9u
KCktPnRvTm9ybWFsaXplZFJhbmdlKCkpLmd1ZXNzZXNGb3JNaXNzcGVsbGVkT3JVbmdyYW1tYXRp
Y2FsUmFuZ2UoaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKCksIG1pc3NwZWxsZWQsIHVuZ3JhbW1h
dGljYWwpOwogI2Vsc2UKICAgICBtaXNzcGVsbGVkID0gaXNTZWxlY3Rpb25NaXNzcGVsbGVkKCk7
CiAgICAgaWYgKG1pc3NwZWxsZWQpIHsKQEAgLTI0OTAsMzQgKzIwNjIsMTUgQEAgdm9pZCBFZGl0
b3I6Om1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZ1RvUG9zaXRpb24oY29uc3QgVmlzaWJsZVBv
c2l0aW9uICZwKQogICAgIG1hcmtCYWRHcmFtbWFyKFZpc2libGVTZWxlY3Rpb24oc3RhcnRPZlNl
bnRlbmNlKHApLCBlbmRPZlNlbnRlbmNlKHApKSk7CiAjZW5kaWYKIH0KLQotc3RhdGljIHZvaWQg
bWFya0FsbE1pc3NwZWxsaW5nc0luUmFuZ2UoRWRpdG9yQ2xpZW50KiBjbGllbnQsIFJhbmdlKiBz
ZWFyY2hSYW5nZSwgUmVmUHRyPFJhbmdlPiYgZmlyc3RNaXNzcGVsbGluZ1JhbmdlKQotewotICAg
IC8vIFVzZSB0aGUgIm1hcmtBbGwiIGZlYXR1cmUgb2YgZmluZEZpcnN0TWlzc3BlbGxpbmdJblJh
bmdlLiBJZ25vcmUgdGhlIHJldHVybiB2YWx1ZSBhbmQgdGhlICJvdXQgcGFyYW1ldGVyIjsKLSAg
ICAvLyBhbGwgd2UgbmVlZCB0byBkbyBpcyBtYXJrIGV2ZXJ5IGluc3RhbmNlLgotICAgIGludCBp
Z25vcmVkT2Zmc2V0OwotICAgIGZpbmRGaXJzdE1pc3NwZWxsaW5nSW5SYW5nZShjbGllbnQsIHNl
YXJjaFJhbmdlLCBpZ25vcmVkT2Zmc2V0LCB0cnVlLCBmaXJzdE1pc3NwZWxsaW5nUmFuZ2UpOwot
fQotCi0jaWZuZGVmIEJVSUxESU5HX09OX1RJR0VSCi1zdGF0aWMgdm9pZCBtYXJrQWxsQmFkR3Jh
bW1hckluUmFuZ2UoRWRpdG9yQ2xpZW50KiBjbGllbnQsIFJhbmdlKiBzZWFyY2hSYW5nZSkKLXsK
LSAgICAvLyBVc2UgdGhlICJtYXJrQWxsIiBmZWF0dXJlIG9mIGZpbmRGaXJzdEJhZEdyYW1tYXJJ
blJhbmdlLiBJZ25vcmUgdGhlIHJldHVybiB2YWx1ZSBhbmQgIm91dCBwYXJhbWV0ZXJzIjsgYWxs
IHdlIG5lZWQgdG8KLSAgICAvLyBkbyBpcyBtYXJrIGV2ZXJ5IGluc3RhbmNlLgotICAgIEdyYW1t
YXJEZXRhaWwgaWdub3JlZEdyYW1tYXJEZXRhaWw7Ci0gICAgaW50IGlnbm9yZWRPZmZzZXQ7Ci0g
ICAgZmluZEZpcnN0QmFkR3JhbW1hckluUmFuZ2UoY2xpZW50LCBzZWFyY2hSYW5nZSwgaWdub3Jl
ZEdyYW1tYXJEZXRhaWwsIGlnbm9yZWRPZmZzZXQsIHRydWUpOwotfQotI2VuZGlmCiAgICAgCi1z
dGF0aWMgdm9pZCBtYXJrTWlzc3BlbGxpbmdzT3JCYWRHcmFtbWFyKEVkaXRvciogZWRpdG9yLCBj
b25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24sIGJvb2wgY2hlY2tTcGVsbGluZywgUmVm
UHRyPFJhbmdlPiYgZmlyc3RNaXNzcGVsbGluZ1JhbmdlKQordm9pZCBFZGl0b3I6Om1hcmtNaXNz
cGVsbGluZ3NPckJhZEdyYW1tYXIoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uLCBi
b29sIGNoZWNrU3BlbGxpbmcsIFJlZlB0cjxSYW5nZT4mIGZpcnN0TWlzc3BlbGxpbmdSYW5nZSkK
IHsKICAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIGEgc2VsZWN0aW9uIGFscmVh
ZHkgZXhwYW5kZWQgdG8gd29yZCBib3VuZGFyaWVzLgogICAgIC8vIE1pZ2h0IGJlIG5pY2UgdG8g
YXNzZXJ0IHRoYXQgaGVyZS4KICAgICAKICAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgb25s
eSBmb3IgYXMteW91LXR5cGUgY2hlY2tpbmcsIHNvIGlmIHRoYXQncyBvZmYgd2UgZG8gbm90aGlu
Zy4gTm90ZSB0aGF0CiAgICAgLy8gZ3JhbW1hciBjaGVja2luZyBjYW4gb25seSBiZSBvbiBpZiBz
cGVsbCBjaGVja2luZyBpcyBhbHNvIG9uLgotICAgIGlmICghZWRpdG9yLT5pc0NvbnRpbnVvdXNT
cGVsbENoZWNraW5nRW5hYmxlZCgpKQorICAgIGlmICghaXNDb250aW51b3VzU3BlbGxDaGVja2lu
Z0VuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIFJlZlB0cjxSYW5nZT4gc2Vh
cmNoUmFuZ2Uoc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkpOwpAQCAtMjUyOSwyMSArMjA4
MiwyMiBAQCBzdGF0aWMgdm9pZCBtYXJrTWlzc3BlbGxpbmdzT3JCYWRHcmFtbWFyKEVkaXRvciog
ZWRpdG9yLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJgogICAgIGlmICghZWRpdGFibGVOb2RlIHx8
ICFlZGl0YWJsZU5vZGUtPmlzQ29udGVudEVkaXRhYmxlKCkpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIGlmICghZWRpdG9yLT5pc1NwZWxsQ2hlY2tpbmdFbmFibGVkSW5Gb2N1c2VkTm9kZSgpKQor
ICAgIGlmICghaXNTcGVsbENoZWNraW5nRW5hYmxlZEluRm9jdXNlZE5vZGUoKSkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgLy8gR2V0IHRoZSBzcGVsbCBjaGVja2VyIGlmIGl0IGlzIGF2YWlsYWJs
ZQotICAgIGlmICghZWRpdG9yLT5jbGllbnQoKSkKKyAgICBpZiAoIWNsaWVudCgpKQogICAgICAg
ICByZXR1cm47CiAgICAgCisgICAgVGV4dENoZWNraW5nSGVscGVyIGNoZWNrZXIoY2xpZW50KCks
IHNlYXJjaFJhbmdlKTsKICAgICBpZiAoY2hlY2tTcGVsbGluZykKLSAgICAgICAgbWFya0FsbE1p
c3NwZWxsaW5nc0luUmFuZ2UoZWRpdG9yLT5jbGllbnQoKSwgc2VhcmNoUmFuZ2UuZ2V0KCksIGZp
cnN0TWlzc3BlbGxpbmdSYW5nZSk7CisgICAgICAgIGNoZWNrZXIubWFya0FsbE1pc3NwZWxsaW5n
cyhmaXJzdE1pc3NwZWxsaW5nUmFuZ2UpOwogICAgIGVsc2UgewogI2lmZGVmIEJVSUxESU5HX09O
X1RJR0VSCiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogI2Vsc2UKLSAgICAgICAgaWYg
KGVkaXRvci0+aXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKCkpCi0gICAgICAgICAgICBtYXJrQWxs
QmFkR3JhbW1hckluUmFuZ2UoZWRpdG9yLT5jbGllbnQoKSwgc2VhcmNoUmFuZ2UuZ2V0KCkpOwor
ICAgICAgICBpZiAoaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKCkpCisgICAgICAgICAgICBjaGVj
a2VyLm1hcmtBbGxCYWRHcmFtbWFyKCk7CiAjZW5kaWYKICAgICB9ICAgIAogfQpAQCAtMjU2Mywx
NCArMjExNywxNCBAQCBib29sIEVkaXRvcjo6aXNTcGVsbENoZWNraW5nRW5hYmxlZEluRm9jdXNl
ZE5vZGUoKSBjb25zdAogCiB2b2lkIEVkaXRvcjo6bWFya01pc3NwZWxsaW5ncyhjb25zdCBWaXNp
YmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24sIFJlZlB0cjxSYW5nZT4mIGZpcnN0TWlzc3BlbGxpbmdS
YW5nZSkKIHsKLSAgICBtYXJrTWlzc3BlbGxpbmdzT3JCYWRHcmFtbWFyKHRoaXMsIHNlbGVjdGlv
biwgdHJ1ZSwgZmlyc3RNaXNzcGVsbGluZ1JhbmdlKTsKKyAgICBtYXJrTWlzc3BlbGxpbmdzT3JC
YWRHcmFtbWFyKHNlbGVjdGlvbiwgdHJ1ZSwgZmlyc3RNaXNzcGVsbGluZ1JhbmdlKTsKIH0KICAg
ICAKIHZvaWQgRWRpdG9yOjptYXJrQmFkR3JhbW1hcihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBz
ZWxlY3Rpb24pCiB7CiAjaWZuZGVmIEJVSUxESU5HX09OX1RJR0VSCiAgICAgUmVmUHRyPFJhbmdl
PiBmaXJzdE1pc3NwZWxsaW5nUmFuZ2U7Ci0gICAgbWFya01pc3NwZWxsaW5nc09yQmFkR3JhbW1h
cih0aGlzLCBzZWxlY3Rpb24sIGZhbHNlLCBmaXJzdE1pc3NwZWxsaW5nUmFuZ2UpOworICAgIG1h
cmtNaXNzcGVsbGluZ3NPckJhZEdyYW1tYXIoc2VsZWN0aW9uLCBmYWxzZSwgZmlyc3RNaXNzcGVs
bGluZ1JhbmdlKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKHNlbGVjdGlvbik7CiAjZW5kaWYK
QEAgLTI2MjAsMTUgKzIxNzQsMTYgQEAgdm9pZCBFZGl0b3I6Om1hcmtBbGxNaXNzcGVsbGluZ3NB
bmRCYWRHcmFtbWFySW5SYW5nZXMoVGV4dENoZWNraW5nT3B0aW9ucyB0ZXh0Q2gKICAgICBib29s
IGFkanVzdFNlbGVjdGlvbkZvclBhcmFncmFwaEJvdW5kYXJpZXMgPSBmYWxzZTsKICAgICBTdHJp
bmcgcGFyYWdyYXBoU3RyaW5nOwogICAgIFJlZlB0cjxSYW5nZT4gcGFyYWdyYXBoUmFuZ2U7Cisg
ICAgVGV4dENoZWNraW5nSGVscGVyIGNoZWNrZXIoY2xpZW50KCksIGdyYW1tYXJSYW5nZSk7CiAK
ICAgICBpZiAoc2hvdWxkTWFya0dyYW1tYXIpIHsKICAgICAgICAgLy8gVGhlIHNwZWxsaW5nIHJh
bmdlIHNob3VsZCBiZSBjb250YWluZWQgaW4gdGhlIHBhcmFncmFwaC1hbGlnbmVkIGV4dGVuc2lv
biBvZiB0aGUgZ3JhbW1hciByYW5nZS4KLSAgICAgICAgcGFyYWdyYXBoUmFuZ2UgPSBwYXJhZ3Jh
cGhBbGlnbmVkUmFuZ2VGb3JSYW5nZShncmFtbWFyUmFuZ2UsIGdyYW1tYXJSYW5nZVN0YXJ0T2Zm
c2V0LCBwYXJhZ3JhcGhTdHJpbmcpOworICAgICAgICBwYXJhZ3JhcGhSYW5nZSA9IGNoZWNrZXIu
cGFyYWdyYXBoQWxpZ25lZFJhbmdlKGdyYW1tYXJSYW5nZVN0YXJ0T2Zmc2V0LCBwYXJhZ3JhcGhT
dHJpbmcpOwogICAgICAgICBSZWZQdHI8UmFuZ2U+IG9mZnNldEFzUmFuZ2UgPSBSYW5nZTo6Y3Jl
YXRlKHBhcmFncmFwaFJhbmdlLT5zdGFydENvbnRhaW5lcihlYyktPmRvY3VtZW50KCksIHBhcmFn
cmFwaFJhbmdlLT5zdGFydFBvc2l0aW9uKCksIHNwZWxsaW5nUmFuZ2UtPnN0YXJ0UG9zaXRpb24o
KSk7CiAgICAgICAgIHNwZWxsaW5nUmFuZ2VTdGFydE9mZnNldCA9IFRleHRJdGVyYXRvcjo6cmFu
Z2VMZW5ndGgob2Zmc2V0QXNSYW5nZS5nZXQoKSk7CiAgICAgICAgIGdyYW1tYXJSYW5nZUVuZE9m
ZnNldCA9IGdyYW1tYXJSYW5nZVN0YXJ0T2Zmc2V0ICsgVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0
aChncmFtbWFyUmFuZ2UpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIHBhcmFncmFwaFJhbmdlID0g
cGFyYWdyYXBoQWxpZ25lZFJhbmdlRm9yUmFuZ2Uoc3BlbGxpbmdSYW5nZSwgc3BlbGxpbmdSYW5n
ZVN0YXJ0T2Zmc2V0LCBwYXJhZ3JhcGhTdHJpbmcpOworICAgICAgICBwYXJhZ3JhcGhSYW5nZSA9
IGNoZWNrZXIucGFyYWdyYXBoQWxpZ25lZFJhbmdlKHNwZWxsaW5nUmFuZ2VTdGFydE9mZnNldCwg
cGFyYWdyYXBoU3RyaW5nKTsKICAgICB9CiAgICAgc3BlbGxpbmdSYW5nZUVuZE9mZnNldCA9IHNw
ZWxsaW5nUmFuZ2VTdGFydE9mZnNldCArIFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgoc3BlbGxp
bmdSYW5nZSk7CiAgICAgcGFyYWdyYXBoTGVuZ3RoID0gcGFyYWdyYXBoU3RyaW5nLmxlbmd0aCgp
OwpAQCAtMjgxOCwxMCArMjM3MywxMCBAQCB2b2lkIEVkaXRvcjo6Y2hhbmdlQmFja1RvUmVwbGFj
ZWRTdHJpbmcoY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZykKICAgICBSZWZQdHI8UmFuZ2U+
IHNlbGVjdGlvbiA9IHNlbGVjdGVkUmFuZ2UoKTsKICAgICBpZiAoIXNob3VsZEluc2VydFRleHQo
cmVwbGFjZWRTdHJpbmcsIHNlbGVjdGlvbi5nZXQoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uUGFzdGVk
KSkKICAgICAgICAgcmV0dXJuOwotICAgICAgICAKKyAgICAKICAgICBTdHJpbmcgcGFyYWdyYXBo
U3RyaW5nOwogICAgIGludCBzZWxlY3Rpb25PZmZzZXQ7Ci0gICAgUmVmUHRyPFJhbmdlPiBwYXJh
Z3JhcGhSYW5nZSA9IHBhcmFncmFwaEFsaWduZWRSYW5nZUZvclJhbmdlKHNlbGVjdGlvbi5nZXQo
KSwgc2VsZWN0aW9uT2Zmc2V0LCBwYXJhZ3JhcGhTdHJpbmcpOworICAgIFJlZlB0cjxSYW5nZT4g
cGFyYWdyYXBoUmFuZ2UgPSBUZXh0Q2hlY2tpbmdIZWxwZXIoY2xpZW50KCksIHNlbGVjdGlvbiku
cGFyYWdyYXBoQWxpZ25lZFJhbmdlKHNlbGVjdGlvbk9mZnNldCwgcGFyYWdyYXBoU3RyaW5nKTsK
ICAgICByZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQocmVwbGFjZWRTdHJpbmcsIGZhbHNlLCBmYWxz
ZSk7CiAgICAgUmVmUHRyPFJhbmdlPiBjaGFuZ2VkUmFuZ2UgPSBUZXh0SXRlcmF0b3I6OnN1YnJh
bmdlKHBhcmFncmFwaFJhbmdlLmdldCgpLCBzZWxlY3Rpb25PZmZzZXQsIHJlcGxhY2VkU3RyaW5n
Lmxlbmd0aCgpKTsKICAgICBjaGFuZ2VkUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCktPmRvY3VtZW50
KCktPm1hcmtlcnMoKS0+YWRkTWFya2VyKGNoYW5nZWRSYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJr
ZXI6OlJlcGxhY2VtZW50LCBTdHJpbmcoKSk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2VkaXRpbmcv
RWRpdG9yLmggYi9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgKaW5kZXggMGFkNDczNzgyZDNhNGY1
YjRlN2MxNGQzY2U3NTBkZGI0ZTMyOTUyZS4uNGYyZmRkZjdkNGQ5M2RhNGE5YTRkZGJiYjQ5Yzll
YTE2NWNkOTZlMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCisrKyBiL1dl
YkNvcmUvZWRpdGluZy9FZGl0b3IuaApAQCAtMzkyLDYgKzM5Miw3IEBAIHByaXZhdGU6CiAgICAg
dm9pZCByZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQoY29uc3QgU3RyaW5nJiwgYm9vbCBzZWxlY3RS
ZXBsYWNlbWVudCwgYm9vbCBzbWFydFJlcGxhY2UpOwogICAgIHZvaWQgd3JpdGVTZWxlY3Rpb25U
b1Bhc3RlYm9hcmQoUGFzdGVib2FyZCopOwogICAgIHZvaWQgcmV2ZWFsU2VsZWN0aW9uQWZ0ZXJF
ZGl0aW5nT3BlcmF0aW9uKCk7CisgICAgdm9pZCBtYXJrTWlzc3BlbGxpbmdzT3JCYWRHcmFtbWFy
KGNvbnN0IFZpc2libGVTZWxlY3Rpb24mLCBib29sIGNoZWNrU3BlbGxpbmcsIFJlZlB0cjxSYW5n
ZT4mIGZpcnN0TWlzc3BlbGxpbmdSYW5nZSk7CiAKICAgICB2b2lkIHNlbGVjdENvbXBvc2l0aW9u
KCk7CiAgICAgdm9pZCBjb25maXJtQ29tcG9zaXRpb24oY29uc3QgU3RyaW5nJiwgYm9vbCBwcmVz
ZXJ2ZVNlbGVjdGlvbik7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2VkaXRpbmcvVGV4dENoZWNraW5n
SGVscGVyLmNwcCBiL1dlYkNvcmUvZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjQ5Njc0ZmZjMjhmMzU4YzRiNDE3NzEyZjg2ZDg0MjZiNWQ1MmZjM2EKLS0tIC9kZXYv
bnVsbAorKysgYi9XZWJDb3JlL2VkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmNwcApAQCAtMCww
ICsxLDUyNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRp
b24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJUZXh0Q2hlY2tpbmdIZWxwZXIuaCIKKworI2luY2x1ZGUgIlJhbmdlLmgi
CisjaW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgiCisjaW5jbHVkZSAiVmlzaWJsZVBvc2l0aW9uLmgi
CisjaW5jbHVkZSAidmlzaWJsZV91bml0cy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Rl
eHRDaGVja2luZ0hlbHBlcjo6VGV4dENoZWNraW5nSGVscGVyKEVkaXRvckNsaWVudCogY2xpZW50
LCBQYXNzUmVmUHRyPFJhbmdlPiByYW5nZSkKKyAgICA6IG1fY2xpZW50KGNsaWVudCkKKyAgICAs
IG1fcmFuZ2UocmFuZ2UpCit7CisgICAgQVNTRVJUX0FSRyhtX2NsaWVudCwgbV9jbGllbnQpOwor
ICAgIEFTU0VSVF9BUkcobV9yYW5nZSwgbV9yYW5nZSk7Cit9CisKK1RleHRDaGVja2luZ0hlbHBl
cjo6flRleHRDaGVja2luZ0hlbHBlcigpCit7Cit9CisKK1Bhc3NSZWZQdHI8UmFuZ2U+IFRleHRD
aGVja2luZ0hlbHBlcjo6cGFyYWdyYXBoQWxpZ25lZFJhbmdlKGludCYgb2Zmc2V0SW50b1BhcmFn
cmFwaEFsaWduZWRSYW5nZSwgU3RyaW5nJiBwYXJhZ3JhcGhTdHJpbmcpIGNvbnN0Cit7CisjaWZu
ZGVmIEJVSUxESU5HX09OX1RJR0VSCisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgCisg
ICAgLy8gRXhwYW5kIHJhbmdlIHRvIHBhcmFncmFwaCBib3VuZGFyaWVzCisgICAgUmVmUHRyPFJh
bmdlPiBwYXJhZ3JhcGhSYW5nZSA9IG1fcmFuZ2UtPmNsb25lUmFuZ2UoZWMpOworICAgIHNldFN0
YXJ0KHBhcmFncmFwaFJhbmdlLmdldCgpLCBzdGFydE9mUGFyYWdyYXBoKG1fcmFuZ2UtPnN0YXJ0
UG9zaXRpb24oKSkpOworICAgIHNldEVuZChwYXJhZ3JhcGhSYW5nZS5nZXQoKSwgZW5kT2ZQYXJh
Z3JhcGgobV9yYW5nZS0+ZW5kUG9zaXRpb24oKSkpOworICAgIAorICAgIC8vIENvbXB1dGUgb2Zm
c2V0IGZyb20gc3RhcnQgb2YgZXhwYW5kZWQgcmFuZ2UgdG8gc3RhcnQgb2Ygb3JpZ2luYWwgcmFu
Z2UKKyAgICBSZWZQdHI8UmFuZ2U+IG9mZnNldEFzUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKHBhcmFn
cmFwaFJhbmdlLT5zdGFydENvbnRhaW5lcihlYyktPmRvY3VtZW50KCksIHBhcmFncmFwaFJhbmdl
LT5zdGFydFBvc2l0aW9uKCksIG1fcmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSk7CisgICAgb2Zmc2V0
SW50b1BhcmFncmFwaEFsaWduZWRSYW5nZSA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgob2Zm
c2V0QXNSYW5nZS5nZXQoKSk7CisgICAgCisgICAgLy8gRmlsbCBpbiBvdXQgcGFyYW1ldGVyIHdp
dGggc3RyaW5nIHJlcHJlc2VudGluZyBlbnRpcmUgcGFyYWdyYXBoIHJhbmdlLgorICAgIC8vIFNv
bWVkYXkgd2UgbWlnaHQgaGF2ZSBhIGNhbGxlciB0aGF0IGRvZXNuJ3QgdXNlIHRoaXMsIGJ1dCBm
b3Igbm93IGFsbCBjYWxsZXJzIGRvLgorICAgIHBhcmFncmFwaFN0cmluZyA9IHBsYWluVGV4dChw
YXJhZ3JhcGhSYW5nZS5nZXQoKSk7CisKKyAgICByZXR1cm4gcGFyYWdyYXBoUmFuZ2U7CisjZWxz
ZQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIFVOVVNFRF9QQVJBTShvZmZzZXRJbnRv
UGFyYWdyYXBoQWxpZ25lZFJhbmdlKTsKKyAgICBVTlVTRURfUEFSQU0ocGFyYWdyYXBoU3RyaW5n
KTsKKyAgICByZXR1cm4gUGFzc1JlZlB0cjxSYW5nZT4oMCk7CisjZW5kaWYKK30KKworU3RyaW5n
IFRleHRDaGVja2luZ0hlbHBlcjo6ZmluZEZpcnN0TWlzc3BlbGxpbmcoaW50JiBmaXJzdE1pc3Nw
ZWxsaW5nT2Zmc2V0LCBib29sIG1hcmtBbGwsIFJlZlB0cjxSYW5nZT4mIGZpcnN0TWlzc3BlbGxp
bmdSYW5nZSkKK3sKKyAgICBXb3JkQXdhcmVJdGVyYXRvciBpdChtX3JhbmdlLmdldCgpKTsKKyAg
ICBmaXJzdE1pc3NwZWxsaW5nT2Zmc2V0ID0gMDsKKyAgICAKKyAgICBTdHJpbmcgZmlyc3RNaXNz
cGVsbGluZzsKKyAgICBpbnQgY3VycmVudENodW5rT2Zmc2V0ID0gMDsKKworICAgIHdoaWxlICgh
aXQuYXRFbmQoKSkgeworICAgICAgICBjb25zdCBVQ2hhciogY2hhcnMgPSBpdC5jaGFyYWN0ZXJz
KCk7CisgICAgICAgIGludCBsZW4gPSBpdC5sZW5ndGgoKTsKKyAgICAgICAgCisgICAgICAgIC8v
IFNraXAgc29tZSB3b3JrIGZvciBvbmUtc3BhY2UtY2hhciBodW5rcworICAgICAgICBpZiAoIShs
ZW4gPT0gMSAmJiBjaGFyc1swXSA9PSAnICcpKSB7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IGludCBtaXNzcGVsbGluZ0xvY2F0aW9uID0gLTE7CisgICAgICAgICAgICBpbnQgbWlzc3BlbGxp
bmdMZW5ndGggPSAwOworICAgICAgICAgICAgbV9jbGllbnQtPmNoZWNrU3BlbGxpbmdPZlN0cmlu
ZyhjaGFycywgbGVuLCAmbWlzc3BlbGxpbmdMb2NhdGlvbiwgJm1pc3NwZWxsaW5nTGVuZ3RoKTsK
KworICAgICAgICAgICAgLy8gNTQ5MDYyNyBzaG93cyB0aGF0IHRoZXJlIHdhcyBzb21lIGNvZGUg
cGF0aCBoZXJlIHdoZXJlIHRoZSBTdHJpbmcgY29uc3RydWN0b3IgYmVsb3cgY3Jhc2hlcy4KKyAg
ICAgICAgICAgIC8vIFdlIGRvbid0IGtub3cgZXhhY3RseSB3aGF0IGNvbWJpbmF0aW9uIG9mIGJh
ZCBpbnB1dCBjYXVzZWQgdGhpcywgc28gd2UncmUgbWFraW5nIHRoaXMgbXVjaAorICAgICAgICAg
ICAgLy8gbW9yZSByb2J1c3QgYWdhaW5zdCBiYWQgaW5wdXQgb24gcmVsZWFzZSBidWlsZHMuCisg
ICAgICAgICAgICBBU1NFUlQobWlzc3BlbGxpbmdMZW5ndGggPj0gMCk7CisgICAgICAgICAgICBB
U1NFUlQobWlzc3BlbGxpbmdMb2NhdGlvbiA+PSAtMSk7CisgICAgICAgICAgICBBU1NFUlQoIW1p
c3NwZWxsaW5nTGVuZ3RoIHx8IG1pc3NwZWxsaW5nTG9jYXRpb24gPj0gMCk7CisgICAgICAgICAg
ICBBU1NFUlQobWlzc3BlbGxpbmdMb2NhdGlvbiA8IGxlbik7CisgICAgICAgICAgICBBU1NFUlQo
bWlzc3BlbGxpbmdMZW5ndGggPD0gbGVuKTsKKyAgICAgICAgICAgIEFTU0VSVChtaXNzcGVsbGlu
Z0xvY2F0aW9uICsgbWlzc3BlbGxpbmdMZW5ndGggPD0gbGVuKTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgaWYgKG1pc3NwZWxsaW5nTG9jYXRpb24gPj0gMCAmJiBtaXNzcGVsbGluZ0xlbmd0
aCA+IDAgJiYgbWlzc3BlbGxpbmdMb2NhdGlvbiA8IGxlbiAmJiBtaXNzcGVsbGluZ0xlbmd0aCA8
PSBsZW4gJiYgbWlzc3BlbGxpbmdMb2NhdGlvbiArIG1pc3NwZWxsaW5nTGVuZ3RoIDw9IGxlbikg
eworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIENvbXB1dGUgcmFuZ2Ugb2Yg
bWlzc3BlbGxlZCB3b3JkCisgICAgICAgICAgICAgICAgUmVmUHRyPFJhbmdlPiBtaXNzcGVsbGlu
Z1JhbmdlID0gVGV4dEl0ZXJhdG9yOjpzdWJyYW5nZShtX3JhbmdlLmdldCgpLCBjdXJyZW50Q2h1
bmtPZmZzZXQgKyBtaXNzcGVsbGluZ0xvY2F0aW9uLCBtaXNzcGVsbGluZ0xlbmd0aCk7CisKKyAg
ICAgICAgICAgICAgICAvLyBSZW1lbWJlciBmaXJzdC1lbmNvdW50ZXJlZCBtaXNzcGVsbGluZyBh
bmQgaXRzIG9mZnNldC4KKyAgICAgICAgICAgICAgICBpZiAoIWZpcnN0TWlzc3BlbGxpbmcpIHsK
KyAgICAgICAgICAgICAgICAgICAgZmlyc3RNaXNzcGVsbGluZ09mZnNldCA9IGN1cnJlbnRDaHVu
a09mZnNldCArIG1pc3NwZWxsaW5nTG9jYXRpb247CisgICAgICAgICAgICAgICAgICAgIGZpcnN0
TWlzc3BlbGxpbmcgPSBTdHJpbmcoY2hhcnMgKyBtaXNzcGVsbGluZ0xvY2F0aW9uLCBtaXNzcGVs
bGluZ0xlbmd0aCk7CisgICAgICAgICAgICAgICAgICAgIGZpcnN0TWlzc3BlbGxpbmdSYW5nZSA9
IG1pc3NwZWxsaW5nUmFuZ2U7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
Ly8gU3RvcmUgbWFya2VyIGZvciBtaXNzcGVsbGVkIHdvcmQuCisgICAgICAgICAgICAgICAgRXhj
ZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgICAgICAgICAgICAgbWlzc3BlbGxpbmdSYW5nZS0+c3Rh
cnRDb250YWluZXIoZWMpLT5kb2N1bWVudCgpLT5tYXJrZXJzKCktPmFkZE1hcmtlcihtaXNzcGVs
bGluZ1JhbmdlLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcpOworICAgICAgICAgICAg
ICAgIEFTU0VSVCghZWMpOworCisgICAgICAgICAgICAgICAgLy8gQmFpbCBvdXQgaWYgd2UncmUg
bWFya2luZyBvbmx5IHRoZSBmaXJzdCBtaXNzcGVsbGluZywgYW5kIG5vdCBhbGwgaW5zdGFuY2Vz
LgorICAgICAgICAgICAgICAgIGlmICghbWFya0FsbCkKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGN1cnJlbnRD
aHVua09mZnNldCArPSBsZW47CisgICAgICAgIGl0LmFkdmFuY2UoKTsKKyAgICB9CisgICAgCisg
ICAgcmV0dXJuIGZpcnN0TWlzc3BlbGxpbmc7Cit9CisKK1N0cmluZyBUZXh0Q2hlY2tpbmdIZWxw
ZXI6OmZpbmRGaXJzdE1pc3NwZWxsaW5nT3JCYWRHcmFtbWFyKGJvb2wgY2hlY2tHcmFtbWFyLCBi
b29sJiBvdXRJc1NwZWxsaW5nLCBpbnQmIG91dEZpcnN0Rm91bmRPZmZzZXQsIEdyYW1tYXJEZXRh
aWwmIG91dEdyYW1tYXJEZXRhaWwpCit7CisjaWYgUExBVEZPUk0oTUFDKSAmJiAhZGVmaW5lZChC
VUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkKKyAgICBT
dHJpbmcgZmlyc3RGb3VuZEl0ZW07CisgICAgU3RyaW5nIG1pc3NwZWxsZWRXb3JkOworICAgIFN0
cmluZyBiYWRHcmFtbWFyUGhyYXNlOworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIAor
ICAgIC8vIEluaXRpYWxpemUgb3V0IHBhcmFtZXRlcnM7IHRoZXNlIHdpbGwgYmUgdXBkYXRlZCBp
ZiB3ZSBmaW5kIHNvbWV0aGluZyB0byByZXR1cm4uCisgICAgb3V0SXNTcGVsbGluZyA9IHRydWU7
CisgICAgb3V0Rmlyc3RGb3VuZE9mZnNldCA9IDA7CisgICAgb3V0R3JhbW1hckRldGFpbC5sb2Nh
dGlvbiA9IC0xOworICAgIG91dEdyYW1tYXJEZXRhaWwubGVuZ3RoID0gMDsKKyAgICBvdXRHcmFt
bWFyRGV0YWlsLmd1ZXNzZXMuY2xlYXIoKTsKKyAgICBvdXRHcmFtbWFyRGV0YWlsLnVzZXJEZXNj
cmlwdGlvbiA9ICIiOworICAgIAorICAgIC8vIEV4cGFuZCB0aGUgc2VhcmNoIHJhbmdlIHRvIGVu
Y29tcGFzcyBlbnRpcmUgcGFyYWdyYXBocywgc2luY2UgdGV4dCBjaGVja2luZyBuZWVkcyB0aGF0
IG11Y2ggY29udGV4dC4KKyAgICAvLyBEZXRlcm1pbmUgdGhlIGNoYXJhY3RlciBvZmZzZXQgZnJv
bSB0aGUgc3RhcnQgb2YgdGhlIHBhcmFncmFwaCB0byB0aGUgc3RhcnQgb2YgdGhlIG9yaWdpbmFs
IHNlYXJjaCByYW5nZSwKKyAgICAvLyBzaW5jZSB3ZSB3aWxsIHdhbnQgdG8gaWdub3JlIHJlc3Vs
dHMgaW4gdGhpcyBhcmVhLgorICAgIFJlZlB0cjxSYW5nZT4gcGFyYWdyYXBoUmFuZ2UgPSBtX3Jh
bmdlLT5jbG9uZVJhbmdlKGVjKTsKKyAgICBzZXRTdGFydChwYXJhZ3JhcGhSYW5nZS5nZXQoKSwg
c3RhcnRPZlBhcmFncmFwaChtX3JhbmdlLT5zdGFydFBvc2l0aW9uKCkpKTsKKyAgICBpbnQgdG90
YWxSYW5nZUxlbmd0aCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgocGFyYWdyYXBoUmFuZ2Uu
Z2V0KCkpOworICAgIHNldEVuZChwYXJhZ3JhcGhSYW5nZS5nZXQoKSwgZW5kT2ZQYXJhZ3JhcGgo
bV9yYW5nZS0+c3RhcnRQb3NpdGlvbigpKSk7CisgICAgCisgICAgUmVmUHRyPFJhbmdlPiBvZmZz
ZXRBc1JhbmdlID0gUmFuZ2U6OmNyZWF0ZShwYXJhZ3JhcGhSYW5nZS0+c3RhcnRDb250YWluZXIo
ZWMpLT5kb2N1bWVudCgpLCBwYXJhZ3JhcGhSYW5nZS0+c3RhcnRQb3NpdGlvbigpLCBtX3Jhbmdl
LT5zdGFydFBvc2l0aW9uKCkpOworICAgIGludCByYW5nZVN0YXJ0T2Zmc2V0ID0gVGV4dEl0ZXJh
dG9yOjpyYW5nZUxlbmd0aChvZmZzZXRBc1JhbmdlLmdldCgpKTsKKyAgICBpbnQgdG90YWxMZW5n
dGhQcm9jZXNzZWQgPSAwOworICAgIAorICAgIGJvb2wgZmlyc3RJdGVyYXRpb24gPSB0cnVlOwor
ICAgIGJvb2wgbGFzdEl0ZXJhdGlvbiA9IGZhbHNlOworICAgIHdoaWxlICh0b3RhbExlbmd0aFBy
b2Nlc3NlZCA8IHRvdGFsUmFuZ2VMZW5ndGgpIHsKKyAgICAgICAgLy8gSXRlcmF0ZSB0aHJvdWdo
IHRoZSBzZWFyY2ggcmFuZ2UgYnkgcGFyYWdyYXBocywgY2hlY2tpbmcgZWFjaCBvbmUgZm9yIHNw
ZWxsaW5nIGFuZCBncmFtbWFyLgorICAgICAgICBpbnQgY3VycmVudExlbmd0aCA9IFRleHRJdGVy
YXRvcjo6cmFuZ2VMZW5ndGgocGFyYWdyYXBoUmFuZ2UuZ2V0KCkpOworICAgICAgICBpbnQgY3Vy
cmVudFN0YXJ0T2Zmc2V0ID0gZmlyc3RJdGVyYXRpb24gPyByYW5nZVN0YXJ0T2Zmc2V0IDogMDsK
KyAgICAgICAgaW50IGN1cnJlbnRFbmRPZmZzZXQgPSBjdXJyZW50TGVuZ3RoOworICAgICAgICBp
ZiAoaW5TYW1lUGFyYWdyYXBoKHBhcmFncmFwaFJhbmdlLT5zdGFydFBvc2l0aW9uKCksIG1fcmFu
Z2UtPmVuZFBvc2l0aW9uKCkpKSB7CisgICAgICAgICAgICAvLyBEZXRlcm1pbmUgdGhlIGNoYXJh
Y3RlciBvZmZzZXQgZnJvbSB0aGUgZW5kIG9mIHRoZSBvcmlnaW5hbCBzZWFyY2ggcmFuZ2UgdG8g
dGhlIGVuZCBvZiB0aGUgcGFyYWdyYXBoLAorICAgICAgICAgICAgLy8gc2luY2Ugd2Ugd2lsbCB3
YW50IHRvIGlnbm9yZSByZXN1bHRzIGluIHRoaXMgYXJlYS4KKyAgICAgICAgICAgIFJlZlB0cjxS
YW5nZT4gZW5kT2Zmc2V0QXNSYW5nZSA9IFJhbmdlOjpjcmVhdGUocGFyYWdyYXBoUmFuZ2UtPnN0
YXJ0Q29udGFpbmVyKGVjKS0+ZG9jdW1lbnQoKSwgcGFyYWdyYXBoUmFuZ2UtPnN0YXJ0UG9zaXRp
b24oKSwgbV9yYW5nZS0+ZW5kUG9zaXRpb24oKSk7CisgICAgICAgICAgICBjdXJyZW50RW5kT2Zm
c2V0ID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChlbmRPZmZzZXRBc1JhbmdlLmdldCgpKTsK
KyAgICAgICAgICAgIGxhc3RJdGVyYXRpb24gPSB0cnVlOworICAgICAgICB9CisgICAgICAgIGlm
IChjdXJyZW50U3RhcnRPZmZzZXQgPCBjdXJyZW50RW5kT2Zmc2V0KSB7CisgICAgICAgICAgICBT
dHJpbmcgcGFyYWdyYXBoU3RyaW5nID0gcGxhaW5UZXh0KHBhcmFncmFwaFJhbmdlLmdldCgpKTsK
KyAgICAgICAgICAgIGlmIChwYXJhZ3JhcGhTdHJpbmcubGVuZ3RoKCkgPiAwKSB7CisgICAgICAg
ICAgICAgICAgYm9vbCBmb3VuZEdyYW1tYXIgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBpbnQg
c3BlbGxpbmdMb2NhdGlvbiA9IDA7CisgICAgICAgICAgICAgICAgaW50IGdyYW1tYXJQaHJhc2VM
b2NhdGlvbiA9IDA7CisgICAgICAgICAgICAgICAgaW50IGdyYW1tYXJEZXRhaWxMb2NhdGlvbiA9
IDA7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgZ3JhbW1hckRldGFpbEluZGV4ID0gMDsKKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0
PiByZXN1bHRzOworICAgICAgICAgICAgICAgIHVpbnQ2NF90IGNoZWNraW5nVHlwZXMgPSBjaGVj
a0dyYW1tYXIgPyAoVGV4dENoZWNraW5nVHlwZVNwZWxsaW5nIHwgVGV4dENoZWNraW5nVHlwZUdy
YW1tYXIpIDogVGV4dENoZWNraW5nVHlwZVNwZWxsaW5nOworICAgICAgICAgICAgICAgIG1fY2xp
ZW50LT5jaGVja1RleHRPZlBhcmFncmFwaChwYXJhZ3JhcGhTdHJpbmcuY2hhcmFjdGVycygpLCBw
YXJhZ3JhcGhTdHJpbmcubGVuZ3RoKCksIGNoZWNraW5nVHlwZXMsIHJlc3VsdHMpOworICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZXN1
bHRzLnNpemUoKTsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRleHRDaGVja2lu
Z1Jlc3VsdCogcmVzdWx0ID0gJnJlc3VsdHNbaV07CisgICAgICAgICAgICAgICAgICAgIGlmIChy
ZXN1bHQtPnR5cGUgPT0gVGV4dENoZWNraW5nVHlwZVNwZWxsaW5nICYmIHJlc3VsdC0+bG9jYXRp
b24gPj0gY3VycmVudFN0YXJ0T2Zmc2V0ICYmIHJlc3VsdC0+bG9jYXRpb24gKyByZXN1bHQtPmxl
bmd0aCA8PSBjdXJyZW50RW5kT2Zmc2V0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBBU1NF
UlQocmVzdWx0LT5sZW5ndGggPiAwICYmIHJlc3VsdC0+bG9jYXRpb24gPj0gMCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBzcGVsbGluZ0xvY2F0aW9uID0gcmVzdWx0LT5sb2NhdGlvbjsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG1pc3NwZWxsZWRXb3JkID0gcGFyYWdyYXBoU3RyaW5nLnN1
YnN0cmluZyhyZXN1bHQtPmxvY2F0aW9uLCByZXN1bHQtPmxlbmd0aCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBBU1NFUlQobWlzc3BlbGxlZFdvcmQubGVuZ3RoKCkpOworICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgaWYgKGNoZWNrR3JhbW1hciAmJiByZXN1bHQtPnR5cGUgPT0gVGV4dENoZWNraW5nVHlw
ZUdyYW1tYXIgJiYgcmVzdWx0LT5sb2NhdGlvbiA8IGN1cnJlbnRFbmRPZmZzZXQgJiYgcmVzdWx0
LT5sb2NhdGlvbiArIHJlc3VsdC0+bGVuZ3RoID4gY3VycmVudFN0YXJ0T2Zmc2V0KSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBBU1NFUlQocmVzdWx0LT5sZW5ndGggPiAwICYmIHJlc3VsdC0+
bG9jYXRpb24gPj0gMCk7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBjYW4ndCBzdG9w
IGFmdGVyIHRoZSBmaXJzdCBncmFtbWFyIHJlc3VsdCwgc2luY2UgdGhlcmUgbWlnaHQgc3RpbGwg
YmUgYSBzcGVsbGluZyByZXN1bHQgYWZ0ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGl0
IGJlZ2lucyBidXQgYmVmb3JlIHRoZSBmaXJzdCBkZXRhaWwgaW4gaXQsIGJ1dCB3ZSBjYW4gc3Rv
cCBpZiB3ZSBmaW5kIGEgc2Vjb25kIGdyYW1tYXIgcmVzdWx0LgorICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGZvdW5kR3JhbW1hcikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCByZXN1
bHQtPmRldGFpbHMuc2l6ZSgpOyBqKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBHcmFtbWFyRGV0YWlsKiBkZXRhaWwgPSAmcmVzdWx0LT5kZXRhaWxzW2pdOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChkZXRhaWwtPmxlbmd0aCA+IDAgJiYgZGV0YWls
LT5sb2NhdGlvbiA+PSAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0
LT5sb2NhdGlvbiArIGRldGFpbC0+bG9jYXRpb24gPj0gY3VycmVudFN0YXJ0T2Zmc2V0ICYmIHJl
c3VsdC0+bG9jYXRpb24gKyBkZXRhaWwtPmxvY2F0aW9uICsgZGV0YWlsLT5sZW5ndGggPD0gY3Vy
cmVudEVuZE9mZnNldCAmJiAoIWZvdW5kR3JhbW1hciB8fCByZXN1bHQtPmxvY2F0aW9uICsgZGV0
YWlsLT5sb2NhdGlvbiA8IGdyYW1tYXJEZXRhaWxMb2NhdGlvbikpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZ3JhbW1hckRldGFpbEluZGV4ID0gajsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZ3JhbW1hckRldGFpbExvY2F0aW9uID0gcmVzdWx0LT5sb2NhdGlv
biArIGRldGFpbC0+bG9jYXRpb247CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZv
dW5kR3JhbW1hciA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvdW5kR3Jh
bW1hcikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyYW1tYXJQaHJhc2VMb2NhdGlv
biA9IHJlc3VsdC0+bG9jYXRpb247CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0R3Jh
bW1hckRldGFpbCA9IHJlc3VsdC0+ZGV0YWlsc1tncmFtbWFyRGV0YWlsSW5kZXhdOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJhZEdyYW1tYXJQaHJhc2UgPSBwYXJhZ3JhcGhTdHJpbmcu
c3Vic3RyaW5nKHJlc3VsdC0+bG9jYXRpb24sIHJlc3VsdC0+bGVuZ3RoKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBBU1NFUlQoYmFkR3JhbW1hclBocmFzZS5sZW5ndGgoKSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoIW1pc3NwZWxsZWRXb3JkLmlzRW1wdHkoKSAm
JiAoIWNoZWNrR3JhbW1hciB8fCBiYWRHcmFtbWFyUGhyYXNlLmlzRW1wdHkoKSB8fCBzcGVsbGlu
Z0xvY2F0aW9uIDw9IGdyYW1tYXJEZXRhaWxMb2NhdGlvbikpIHsKKyAgICAgICAgICAgICAgICAg
ICAgaW50IHNwZWxsaW5nT2Zmc2V0ID0gc3BlbGxpbmdMb2NhdGlvbiAtIGN1cnJlbnRTdGFydE9m
ZnNldDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFmaXJzdEl0ZXJhdGlvbikgeworICAgICAg
ICAgICAgICAgICAgICAgICAgUmVmUHRyPFJhbmdlPiBwYXJhZ3JhcGhPZmZzZXRBc1JhbmdlID0g
UmFuZ2U6OmNyZWF0ZShwYXJhZ3JhcGhSYW5nZS0+c3RhcnRDb250YWluZXIoZWMpLT5kb2N1bWVu
dCgpLCBtX3JhbmdlLT5zdGFydFBvc2l0aW9uKCksIHBhcmFncmFwaFJhbmdlLT5zdGFydFBvc2l0
aW9uKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgc3BlbGxpbmdPZmZzZXQgKz0gVGV4dEl0
ZXJhdG9yOjpyYW5nZUxlbmd0aChwYXJhZ3JhcGhPZmZzZXRBc1JhbmdlLmdldCgpKTsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBvdXRJc1NwZWxsaW5nID0gdHJ1
ZTsKKyAgICAgICAgICAgICAgICAgICAgb3V0Rmlyc3RGb3VuZE9mZnNldCA9IHNwZWxsaW5nT2Zm
c2V0OworICAgICAgICAgICAgICAgICAgICBmaXJzdEZvdW5kSXRlbSA9IG1pc3NwZWxsZWRXb3Jk
OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgaWYgKGNoZWNrR3JhbW1hciAmJiAhYmFkR3JhbW1hclBocmFzZS5pc0VtcHR5KCkp
IHsKKyAgICAgICAgICAgICAgICAgICAgaW50IGdyYW1tYXJQaHJhc2VPZmZzZXQgPSBncmFtbWFy
UGhyYXNlTG9jYXRpb24gLSBjdXJyZW50U3RhcnRPZmZzZXQ7CisgICAgICAgICAgICAgICAgICAg
IGlmICghZmlyc3RJdGVyYXRpb24pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJlZlB0cjxS
YW5nZT4gcGFyYWdyYXBoT2Zmc2V0QXNSYW5nZSA9IFJhbmdlOjpjcmVhdGUocGFyYWdyYXBoUmFu
Z2UtPnN0YXJ0Q29udGFpbmVyKGVjKS0+ZG9jdW1lbnQoKSwgbV9yYW5nZS0+c3RhcnRQb3NpdGlv
bigpLCBwYXJhZ3JhcGhSYW5nZS0+c3RhcnRQb3NpdGlvbigpKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGdyYW1tYXJQaHJhc2VPZmZzZXQgKz0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChw
YXJhZ3JhcGhPZmZzZXRBc1JhbmdlLmdldCgpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICBvdXRJc1NwZWxsaW5nID0gZmFsc2U7CisgICAgICAgICAgICAgICAg
ICAgIG91dEZpcnN0Rm91bmRPZmZzZXQgPSBncmFtbWFyUGhyYXNlT2Zmc2V0OworICAgICAgICAg
ICAgICAgICAgICBmaXJzdEZvdW5kSXRlbSA9IGJhZEdyYW1tYXJQaHJhc2U7CisgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICBpZiAobGFzdEl0ZXJhdGlvbiB8fCB0b3RhbExlbmd0aFByb2Nlc3NlZCAr
IGN1cnJlbnRMZW5ndGggPj0gdG90YWxSYW5nZUxlbmd0aCkKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBWaXNpYmxlUG9zaXRpb24gbmV3UGFyYWdyYXBoU3RhcnQgPSBzdGFydE9mTmV4dFBh
cmFncmFwaChwYXJhZ3JhcGhSYW5nZS0+ZW5kUG9zaXRpb24oKSk7CisgICAgICAgIHNldFN0YXJ0
KHBhcmFncmFwaFJhbmdlLmdldCgpLCBuZXdQYXJhZ3JhcGhTdGFydCk7CisgICAgICAgIHNldEVu
ZChwYXJhZ3JhcGhSYW5nZS5nZXQoKSwgZW5kT2ZQYXJhZ3JhcGgobmV3UGFyYWdyYXBoU3RhcnQp
KTsKKyAgICAgICAgZmlyc3RJdGVyYXRpb24gPSBmYWxzZTsKKyAgICAgICAgdG90YWxMZW5ndGhQ
cm9jZXNzZWQgKz0gY3VycmVudExlbmd0aDsKKyAgICB9CisgICAgcmV0dXJuIGZpcnN0Rm91bmRJ
dGVtOworI2Vsc2UKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBVTlVTRURfUEFSQU0o
Y2hlY2tHcmFtbWFyKTsKKyAgICBVTlVTRURfUEFSQU0ob3V0SXNTcGVsbGluZyk7CisgICAgVU5V
U0VEX1BBUkFNKG91dEZpcnN0Rm91bmRPZmZzZXQpOworICAgIFVOVVNFRF9QQVJBTShvdXRHcmFt
bWFyRGV0YWlsKTsKKyAgICByZXR1cm4gIiI7CisjZW5kaWYKK30KKworaW50IFRleHRDaGVja2lu
Z0hlbHBlcjo6ZmluZEZpcnN0R3JhbW1hckRldGFpbChjb25zdCBWZWN0b3I8R3JhbW1hckRldGFp
bD4mIGdyYW1tYXJEZXRhaWxzLCBpbnQgYmFkR3JhbW1hclBocmFzZUxvY2F0aW9uLCBpbnQgLypi
YWRHcmFtbWFyUGhyYXNlTGVuZ3RoKi8sIGludCBzdGFydE9mZnNldCwgaW50IGVuZE9mZnNldCwg
Ym9vbCBtYXJrQWxsKQoreworI2lmbmRlZiBCVUlMRElOR19PTl9USUdFUgorICAgIC8vIEZvdW5k
IHNvbWUgYmFkIGdyYW1tYXIuIEZpbmQgdGhlIGVhcmxpZXN0IGRldGFpbCByYW5nZSB0aGF0IHN0
YXJ0cyBpbiBvdXIgc2VhcmNoIHJhbmdlIChpZiBhbnkpLgorICAgIC8vIE9wdGlvbmFsbHkgYWRk
IGEgRG9jdW1lbnRNYXJrZXIgZm9yIGVhY2ggZGV0YWlsIGluIHRoZSByYW5nZS4KKyAgICBpbnQg
ZWFybGllc3REZXRhaWxMb2NhdGlvblNvRmFyID0gLTE7CisgICAgaW50IGVhcmxpZXN0RGV0YWls
SW5kZXggPSAtMTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZ3JhbW1hckRldGFpbHMu
c2l6ZSgpOyBpKyspIHsKKyAgICAgICAgY29uc3QgR3JhbW1hckRldGFpbCogZGV0YWlsID0gJmdy
YW1tYXJEZXRhaWxzW2ldOworICAgICAgICBBU1NFUlQoZGV0YWlsLT5sZW5ndGggPiAwICYmIGRl
dGFpbC0+bG9jYXRpb24gPj0gMCk7CisgICAgICAgIAorICAgICAgICBpbnQgZGV0YWlsU3RhcnRP
ZmZzZXRJblBhcmFncmFwaCA9IGJhZEdyYW1tYXJQaHJhc2VMb2NhdGlvbiArIGRldGFpbC0+bG9j
YXRpb247CisgICAgICAgIAorICAgICAgICAvLyBTa2lwIHRoaXMgZGV0YWlsIGlmIGl0IHN0YXJ0
cyBiZWZvcmUgdGhlIG9yaWdpbmFsIHNlYXJjaCByYW5nZQorICAgICAgICBpZiAoZGV0YWlsU3Rh
cnRPZmZzZXRJblBhcmFncmFwaCA8IHN0YXJ0T2Zmc2V0KQorICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIAorICAgICAgICAvLyBTa2lwIHRoaXMgZGV0YWlsIGlmIGl0IHN0YXJ0cyBhZnRl
ciB0aGUgb3JpZ2luYWwgc2VhcmNoIHJhbmdlCisgICAgICAgIGlmIChkZXRhaWxTdGFydE9mZnNl
dEluUGFyYWdyYXBoID49IGVuZE9mZnNldCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAKKyAgICAgICAgaWYgKG1hcmtBbGwpIHsKKyAgICAgICAgICAgIFJlZlB0cjxSYW5nZT4gYmFk
R3JhbW1hclJhbmdlID0gVGV4dEl0ZXJhdG9yOjpzdWJyYW5nZShtX3JhbmdlLmdldCgpLCBiYWRH
cmFtbWFyUGhyYXNlTG9jYXRpb24gLSBzdGFydE9mZnNldCArIGRldGFpbC0+bG9jYXRpb24sIGRl
dGFpbC0+bGVuZ3RoKTsKKyAgICAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgICAg
ICAgICAgYmFkR3JhbW1hclJhbmdlLT5zdGFydENvbnRhaW5lcihlYyktPmRvY3VtZW50KCktPm1h
cmtlcnMoKS0+YWRkTWFya2VyKGJhZEdyYW1tYXJSYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6
OkdyYW1tYXIsIGRldGFpbC0+dXNlckRlc2NyaXB0aW9uKTsKKyAgICAgICAgICAgIEFTU0VSVCgh
ZWMpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBSZW1lbWJlciB0aGlzIGRldGFp
bCBvbmx5IGlmIGl0J3MgZWFybGllciB0aGFuIG91ciBjdXJyZW50IGNhbmRpZGF0ZSAodGhlIGRl
dGFpbHMgYXJlbid0IGluIGEgZ3VhcmFudGVlZCBvcmRlcikKKyAgICAgICAgaWYgKGVhcmxpZXN0
RGV0YWlsSW5kZXggPCAwIHx8IGVhcmxpZXN0RGV0YWlsTG9jYXRpb25Tb0ZhciA+IGRldGFpbC0+
bG9jYXRpb24pIHsKKyAgICAgICAgICAgIGVhcmxpZXN0RGV0YWlsSW5kZXggPSBpOworICAgICAg
ICAgICAgZWFybGllc3REZXRhaWxMb2NhdGlvblNvRmFyID0gZGV0YWlsLT5sb2NhdGlvbjsKKyAg
ICAgICAgfQorICAgIH0KKyAgICAKKyAgICByZXR1cm4gZWFybGllc3REZXRhaWxJbmRleDsKKyNl
bHNlCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgVU5VU0VEX1BBUkFNKGdyYW1tYXJE
ZXRhaWxzKTsKKyAgICBVTlVTRURfUEFSQU0oYmFkR3JhbW1hclBocmFzZUxvY2F0aW9uKTsKKyAg
ICBVTlVTRURfUEFSQU0oc3RhcnRPZmZzZXQpOworICAgIFVOVVNFRF9QQVJBTShlbmRPZmZzZXQp
OworICAgIFVOVVNFRF9QQVJBTShtYXJrQWxsKTsKKyAgICByZXR1cm4gMDsKKyNlbmRpZgorfQor
CitTdHJpbmcgVGV4dENoZWNraW5nSGVscGVyOjpmaW5kRmlyc3RCYWRHcmFtbWFyKEdyYW1tYXJE
ZXRhaWwmIG91dEdyYW1tYXJEZXRhaWwsIGludCYgb3V0R3JhbW1hclBocmFzZU9mZnNldCwgYm9v
bCBtYXJrQWxsKQoreworI2lmbmRlZiBCVUlMRElOR19PTl9USUdFUgorICAgIC8vIEluaXRpYWxp
emUgb3V0IHBhcmFtZXRlcnM7IHRoZXNlIHdpbGwgYmUgdXBkYXRlZCBpZiB3ZSBmaW5kIHNvbWV0
aGluZyB0byByZXR1cm4uCisgICAgb3V0R3JhbW1hckRldGFpbC5sb2NhdGlvbiA9IC0xOworICAg
IG91dEdyYW1tYXJEZXRhaWwubGVuZ3RoID0gMDsKKyAgICBvdXRHcmFtbWFyRGV0YWlsLmd1ZXNz
ZXMuY2xlYXIoKTsKKyAgICBvdXRHcmFtbWFyRGV0YWlsLnVzZXJEZXNjcmlwdGlvbiA9ICIiOwor
ICAgIG91dEdyYW1tYXJQaHJhc2VPZmZzZXQgPSAwOworICAgIAorICAgIFN0cmluZyBmaXJzdEJh
ZEdyYW1tYXJQaHJhc2U7CisKKyAgICAvLyBFeHBhbmQgdGhlIHNlYXJjaCByYW5nZSB0byBlbmNv
bXBhc3MgZW50aXJlIHBhcmFncmFwaHMsIHNpbmNlIGdyYW1tYXIgY2hlY2tpbmcgbmVlZHMgdGhh
dCBtdWNoIGNvbnRleHQuCisgICAgLy8gRGV0ZXJtaW5lIHRoZSBjaGFyYWN0ZXIgb2Zmc2V0IGZy
b20gdGhlIHN0YXJ0IG9mIHRoZSBwYXJhZ3JhcGggdG8gdGhlIHN0YXJ0IG9mIHRoZSBvcmlnaW5h
bCBzZWFyY2ggcmFuZ2UsCisgICAgLy8gc2luY2Ugd2Ugd2lsbCB3YW50IHRvIGlnbm9yZSByZXN1
bHRzIGluIHRoaXMgYXJlYS4KKyAgICBpbnQgc2VhcmNoUmFuZ2VTdGFydE9mZnNldDsKKyAgICBT
dHJpbmcgcGFyYWdyYXBoU3RyaW5nOworICAgIFJlZlB0cjxSYW5nZT4gcGFyYWdyYXBoUmFuZ2Ug
PSBwYXJhZ3JhcGhBbGlnbmVkUmFuZ2Uoc2VhcmNoUmFuZ2VTdGFydE9mZnNldCwgcGFyYWdyYXBo
U3RyaW5nKTsKKyAgICAgICAgCisgICAgLy8gRGV0ZXJtaW5lIHRoZSBjaGFyYWN0ZXIgb2Zmc2V0
IGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBwYXJhZ3JhcGggdG8gdGhlIGVuZCBvZiB0aGUgb3JpZ2lu
YWwgc2VhcmNoIHJhbmdlLCAKKyAgICAvLyBzaW5jZSB3ZSB3aWxsIHdhbnQgdG8gaWdub3JlIHJl
c3VsdHMgaW4gdGhpcyBhcmVhIGFsc28uCisgICAgaW50IHNlYXJjaFJhbmdlRW5kT2Zmc2V0ID0g
c2VhcmNoUmFuZ2VTdGFydE9mZnNldCArIFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgobV9yYW5n
ZS5nZXQoKSk7CisgICAgICAgIAorICAgIC8vIFN0YXJ0IGNoZWNraW5nIGZyb20gYmVnaW5uaW5n
IG9mIHBhcmFncmFwaCwgYnV0IHNraXAgcGFzdCByZXN1bHRzIHRoYXQgb2NjdXIgYmVmb3JlIHRo
ZSBzdGFydCBvZiB0aGUgb3JpZ2luYWwgc2VhcmNoIHJhbmdlLgorICAgIGludCBzdGFydE9mZnNl
dCA9IDA7CisgICAgd2hpbGUgKHN0YXJ0T2Zmc2V0IDwgc2VhcmNoUmFuZ2VFbmRPZmZzZXQpIHsK
KyAgICAgICAgVmVjdG9yPEdyYW1tYXJEZXRhaWw+IGdyYW1tYXJEZXRhaWxzOworICAgICAgICBp
bnQgYmFkR3JhbW1hclBocmFzZUxvY2F0aW9uID0gLTE7CisgICAgICAgIGludCBiYWRHcmFtbWFy
UGhyYXNlTGVuZ3RoID0gMDsKKyAgICAgICAgbV9jbGllbnQtPmNoZWNrR3JhbW1hck9mU3RyaW5n
KHBhcmFncmFwaFN0cmluZy5jaGFyYWN0ZXJzKCkgKyBzdGFydE9mZnNldCwgcGFyYWdyYXBoU3Ry
aW5nLmxlbmd0aCgpIC0gc3RhcnRPZmZzZXQsIGdyYW1tYXJEZXRhaWxzLCAmYmFkR3JhbW1hclBo
cmFzZUxvY2F0aW9uLCAmYmFkR3JhbW1hclBocmFzZUxlbmd0aCk7CisgICAgICAgIAorICAgICAg
ICBpZiAoIWJhZEdyYW1tYXJQaHJhc2VMZW5ndGgpIHsKKyAgICAgICAgICAgIEFTU0VSVChiYWRH
cmFtbWFyUGhyYXNlTG9jYXRpb24gPT0gLTEpOworICAgICAgICAgICAgcmV0dXJuIFN0cmluZygp
OworICAgICAgICB9CisKKyAgICAgICAgQVNTRVJUKGJhZEdyYW1tYXJQaHJhc2VMb2NhdGlvbiA+
PSAwKTsKKyAgICAgICAgYmFkR3JhbW1hclBocmFzZUxvY2F0aW9uICs9IHN0YXJ0T2Zmc2V0Owor
CisgICAgICAgIAorICAgICAgICAvLyBGb3VuZCBzb21lIGJhZCBncmFtbWFyLiBGaW5kIHRoZSBl
YXJsaWVzdCBkZXRhaWwgcmFuZ2UgdGhhdCBzdGFydHMgaW4gb3VyIHNlYXJjaCByYW5nZSAoaWYg
YW55KS4KKyAgICAgICAgaW50IGJhZEdyYW1tYXJJbmRleCA9IGZpbmRGaXJzdEdyYW1tYXJEZXRh
aWwoZ3JhbW1hckRldGFpbHMsIGJhZEdyYW1tYXJQaHJhc2VMb2NhdGlvbiwgYmFkR3JhbW1hclBo
cmFzZUxlbmd0aCwgc2VhcmNoUmFuZ2VTdGFydE9mZnNldCwgc2VhcmNoUmFuZ2VFbmRPZmZzZXQs
IG1hcmtBbGwpOworICAgICAgICBpZiAoYmFkR3JhbW1hckluZGV4ID49IDApIHsKKyAgICAgICAg
ICAgIEFTU0VSVChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oYmFkR3JhbW1hckluZGV4KSA8IGdyYW1t
YXJEZXRhaWxzLnNpemUoKSk7CisgICAgICAgICAgICBvdXRHcmFtbWFyRGV0YWlsID0gZ3JhbW1h
ckRldGFpbHNbYmFkR3JhbW1hckluZGV4XTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIElmIHdl
IGZvdW5kIGEgZGV0YWlsIGluIHJhbmdlLCB0aGVuIHdlIGhhdmUgZm91bmQgdGhlIGZpcnN0IGJh
ZCBwaHJhc2UgKHVubGVzcyB3ZSBmb3VuZCBvbmUgZWFybGllciBidXQKKyAgICAgICAgLy8ga2Vw
dCBnb2luZyBzbyB3ZSBjb3VsZCBtYXJrIGFsbCBpbnN0YW5jZXMpLgorICAgICAgICBpZiAoYmFk
R3JhbW1hckluZGV4ID49IDAgJiYgZmlyc3RCYWRHcmFtbWFyUGhyYXNlLmlzRW1wdHkoKSkgewor
ICAgICAgICAgICAgb3V0R3JhbW1hclBocmFzZU9mZnNldCA9IGJhZEdyYW1tYXJQaHJhc2VMb2Nh
dGlvbiAtIHNlYXJjaFJhbmdlU3RhcnRPZmZzZXQ7CisgICAgICAgICAgICBmaXJzdEJhZEdyYW1t
YXJQaHJhc2UgPSBwYXJhZ3JhcGhTdHJpbmcuc3Vic3RyaW5nKGJhZEdyYW1tYXJQaHJhc2VMb2Nh
dGlvbiwgYmFkR3JhbW1hclBocmFzZUxlbmd0aCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IC8vIEZvdW5kIG9uZS4gV2UncmUgZG9uZSBub3csIHVubGVzcyB3ZSdyZSBtYXJraW5nIGVhY2gg
aW5zdGFuY2UuCisgICAgICAgICAgICBpZiAoIW1hcmtBbGwpCisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKworICAgICAgICAvLyBUaGVzZSByZXN1bHRzIHdlcmUgYWxsIGJldHdl
ZW4gdGhlIHN0YXJ0IG9mIHRoZSBwYXJhZ3JhcGggYW5kIHRoZSBzdGFydCBvZiB0aGUgc2VhcmNo
IHJhbmdlOyBsb29rCisgICAgICAgIC8vIGJleW9uZCB0aGlzIHBocmFzZS4KKyAgICAgICAgc3Rh
cnRPZmZzZXQgPSBiYWRHcmFtbWFyUGhyYXNlTG9jYXRpb24gKyBiYWRHcmFtbWFyUGhyYXNlTGVu
Z3RoOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gZmlyc3RCYWRHcmFtbWFyUGhyYXNlOworI2Vs
c2UKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBVTlVTRURfUEFSQU0ob3V0R3JhbW1h
ckRldGFpbCk7CisgICAgVU5VU0VEX1BBUkFNKG91dEdyYW1tYXJQaHJhc2VPZmZzZXQpOworICAg
IFVOVVNFRF9QQVJBTShtYXJrQWxsKTsKKyNlbmRpZgorfQorCisKK2Jvb2wgVGV4dENoZWNraW5n
SGVscGVyOjppc1VuZ3JhbW1hdGljYWwoVmVjdG9yPFN0cmluZz4mIGd1ZXNzZXNWZWN0b3IpIGNv
bnN0Cit7CisjaWZuZGVmIEJVSUxESU5HX09OX1RJR0VSCisgICAgaWYgKCFtX2NsaWVudCkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgRXhjZXB0aW9uQ29kZSBlYzsKKyAgICBpZiAoIW1f
cmFuZ2UgfHwgbV9yYW5nZS0+Y29sbGFwc2VkKGVjKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIAorICAgIC8vIFJldHVybnMgdHJ1ZSBvbmx5IGlmIHRoZSBwYXNzZWQgcmFuZ2UgZXhhY3Rs
eSBjb3JyZXNwb25kcyB0byBhIGJhZCBncmFtbWFyIGRldGFpbCByYW5nZS4gVGhpcyBpcyBhbmFs
b2dvdXMKKyAgICAvLyB0byBpc1NlbGVjdGlvbk1pc3NwZWxsZWQuIEl0J3Mgbm90IGdvb2QgZW5v
dWdoIGZvciB0aGVyZSB0byBiZSBzb21lIGJhZCBncmFtbWFyIHNvbWV3aGVyZSBpbiB0aGUgcmFu
Z2UsCisgICAgLy8gb3Igb3ZlcmxhcHBpbmcgdGhlIHJhbmdlOyB0aGUgcmFuZ2VzIG11c3QgZXhh
Y3RseSBtYXRjaC4KKyAgICBndWVzc2VzVmVjdG9yLmNsZWFyKCk7CisgICAgaW50IGdyYW1tYXJQ
aHJhc2VPZmZzZXQ7CisgICAgCisgICAgR3JhbW1hckRldGFpbCBncmFtbWFyRGV0YWlsOworICAg
IFN0cmluZyBiYWRHcmFtbWFyUGhyYXNlID0gY29uc3RfY2FzdDxUZXh0Q2hlY2tpbmdIZWxwZXIq
Pih0aGlzKS0+ZmluZEZpcnN0QmFkR3JhbW1hcihncmFtbWFyRGV0YWlsLCBncmFtbWFyUGhyYXNl
T2Zmc2V0LCBmYWxzZSk7ICAgIAorICAgIAorICAgIC8vIE5vIGJhZCBncmFtbWFyIGluIHRoZXNl
IHBhcnRzIGF0IGFsbC4KKyAgICBpZiAoYmFkR3JhbW1hclBocmFzZS5pc0VtcHR5KCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICAvLyBCYWQgZ3JhbW1hciwgYnV0IHBocmFzZSAo
ZS5nLiBzZW50ZW5jZSkgc3RhcnRzIGJleW9uZCBzdGFydCBvZiByYW5nZS4KKyAgICBpZiAoZ3Jh
bW1hclBocmFzZU9mZnNldCA+IDApCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBB
U1NFUlQoZ3JhbW1hckRldGFpbC5sb2NhdGlvbiA+PSAwICYmIGdyYW1tYXJEZXRhaWwubGVuZ3Ro
ID4gMCk7CisgICAgCisgICAgLy8gQmFkIGdyYW1tYXIsIGJ1dCBzdGFydCBvZiBkZXRhaWwgKGUu
Zy4gdW5ncmFtbWF0aWNhbCB3b3JkKSBkb2Vzbid0IG1hdGNoIHN0YXJ0IG9mIHJhbmdlCisgICAg
aWYgKGdyYW1tYXJEZXRhaWwubG9jYXRpb24gKyBncmFtbWFyUGhyYXNlT2Zmc2V0KQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgLy8gQmFkIGdyYW1tYXIgYXQgc3RhcnQgb2YgcmFu
Z2UsIGJ1dCBlbmQgb2YgYmFkIGdyYW1tYXIgaXMgYmVmb3JlIG9yIGFmdGVyIGVuZCBvZiByYW5n
ZQorICAgIGlmIChncmFtbWFyRGV0YWlsLmxlbmd0aCAhPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVu
Z3RoKG1fcmFuZ2UuZ2V0KCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgLy8g
VXBkYXRlIHRoZSBzcGVsbGluZyBwYW5lbCB0byBiZSBkaXNwbGF5aW5nIHRoaXMgZXJyb3IgKHdo
ZXRoZXIgb3Igbm90IHRoZSBzcGVsbGluZyBwYW5lbCBpcyBvbiBzY3JlZW4pLgorICAgIC8vIFRo
aXMgaXMgbmVjZXNzYXJ5IHRvIG1ha2UgYSBzdWJzZXF1ZW50IGNhbGwgdG8gW05TU3BlbGxDaGVj
a2VyIGlnbm9yZVdvcmQ6aW5TcGVsbERvY3VtZW50V2l0aFRhZzpdIHdvcmsKKyAgICAvLyBjb3Jy
ZWN0bHk7IHRoYXQgY2FsbCBiZWhhdmVzIGRpZmZlcmVudGx5IGJhc2VkIG9uIHdoZXRoZXIgdGhl
IHNwZWxsaW5nIHBhbmVsIGlzIGRpc3BsYXlpbmcgYSBtaXNzcGVsbGluZworICAgIC8vIG9yIGEg
Z3JhbW1hciBlcnJvci4KKyAgICBtX2NsaWVudC0+dXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFy
U3RyaW5nKGJhZEdyYW1tYXJQaHJhc2UsIGdyYW1tYXJEZXRhaWwpOworICAgIAorICAgIHJldHVy
biB0cnVlOworI2Vsc2UKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBVTlVTRURfUEFS
QU0oZ3Vlc3Nlc1ZlY3Rvcik7CisgICAgcmV0dXJuIHRydWU7CisjZW5kaWYKK30KKworVmVjdG9y
PFN0cmluZz4gVGV4dENoZWNraW5nSGVscGVyOjpndWVzc2VzRm9yTWlzc3BlbGxlZE9yVW5ncmFt
bWF0aWNhbFJhbmdlKGJvb2wgY2hlY2tHcmFtbWFyLCBib29sJiBtaXNzcGVsbGVkLCBib29sJiB1
bmdyYW1tYXRpY2FsKSBjb25zdAoreworI2lmIFBMQVRGT1JNKE1BQykgJiYgIWRlZmluZWQoQlVJ
TERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpCisgICAgVmVj
dG9yPFN0cmluZz4gZ3Vlc3NlczsKKyAgICBFeGNlcHRpb25Db2RlIGVjOworICAgIG1pc3NwZWxs
ZWQgPSBmYWxzZTsKKyAgICB1bmdyYW1tYXRpY2FsID0gZmFsc2U7CisgICAgCisgICAgaWYgKCFt
X2NsaWVudCB8fCAhbV9yYW5nZSB8fCBtX3JhbmdlLT5jb2xsYXBzZWQoZWMpKQorICAgICAgICBy
ZXR1cm4gZ3Vlc3NlczsKKworICAgIC8vIEV4cGFuZCB0aGUgcmFuZ2UgdG8gZW5jb21wYXNzIGVu
dGlyZSBwYXJhZ3JhcGhzLCBzaW5jZSB0ZXh0IGNoZWNraW5nIG5lZWRzIHRoYXQgbXVjaCBjb250
ZXh0LgorICAgIGludCByYW5nZVN0YXJ0T2Zmc2V0OworICAgIFN0cmluZyBwYXJhZ3JhcGhTdHJp
bmc7CisgICAgUmVmUHRyPFJhbmdlPiBwYXJhZ3JhcGhSYW5nZSA9IHBhcmFncmFwaEFsaWduZWRS
YW5nZShyYW5nZVN0YXJ0T2Zmc2V0LCBwYXJhZ3JhcGhTdHJpbmcpOworICAgIGludCByYW5nZUxl
bmd0aCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgobV9yYW5nZS5nZXQoKSk7CisgICAgaWYg
KCFyYW5nZUxlbmd0aCB8fCAhcGFyYWdyYXBoU3RyaW5nLmxlbmd0aCgpKQorICAgICAgICByZXR1
cm4gZ3Vlc3NlczsKKworICAgIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IHJlc3VsdHM7Cisg
ICAgdWludDY0X3QgY2hlY2tpbmdUeXBlcyA9IGNoZWNrR3JhbW1hciA/IChUZXh0Q2hlY2tpbmdU
eXBlU3BlbGxpbmcgfCBUZXh0Q2hlY2tpbmdUeXBlR3JhbW1hcikgOiBUZXh0Q2hlY2tpbmdUeXBl
U3BlbGxpbmc7CisgICAgbV9jbGllbnQtPmNoZWNrVGV4dE9mUGFyYWdyYXBoKHBhcmFncmFwaFN0
cmluZy5jaGFyYWN0ZXJzKCksIHBhcmFncmFwaFN0cmluZy5sZW5ndGgoKSwgY2hlY2tpbmdUeXBl
cywgcmVzdWx0cyk7CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlc3VsdHMu
c2l6ZSgpOyBpKyspIHsKKyAgICAgICAgY29uc3QgVGV4dENoZWNraW5nUmVzdWx0KiByZXN1bHQg
PSAmcmVzdWx0c1tpXTsKKyAgICAgICAgaWYgKHJlc3VsdC0+dHlwZSA9PSBUZXh0Q2hlY2tpbmdU
eXBlU3BlbGxpbmcgJiYgcmVzdWx0LT5sb2NhdGlvbiA9PSByYW5nZVN0YXJ0T2Zmc2V0ICYmIHJl
c3VsdC0+bGVuZ3RoID09IHJhbmdlTGVuZ3RoKSB7CisgICAgICAgICAgICBTdHJpbmcgbWlzc3Bl
bGxlZFdvcmQgPSBwYXJhZ3JhcGhTdHJpbmcuc3Vic3RyaW5nKHJhbmdlU3RhcnRPZmZzZXQsIHJh
bmdlTGVuZ3RoKTsKKyAgICAgICAgICAgIEFTU0VSVChtaXNzcGVsbGVkV29yZC5sZW5ndGgoKSk7
CisgICAgICAgICAgICBtX2NsaWVudC0+Z2V0R3Vlc3Nlc0ZvcldvcmQobWlzc3BlbGxlZFdvcmQs
IGd1ZXNzZXMpOworICAgICAgICAgICAgbV9jbGllbnQtPnVwZGF0ZVNwZWxsaW5nVUlXaXRoTWlz
c3BlbGxlZFdvcmQobWlzc3BlbGxlZFdvcmQpOworICAgICAgICAgICAgbWlzc3BlbGxlZCA9IHRy
dWU7CisgICAgICAgICAgICByZXR1cm4gZ3Vlc3NlczsKKyAgICAgICAgfQorICAgIH0KKyAgICAK
KyAgICBpZiAoIWNoZWNrR3JhbW1hcikKKyAgICAgICAgcmV0dXJuIGd1ZXNzZXM7CisgICAgICAg
IAorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZXN1bHRzLnNpemUoKTsgaSsrKSB7Cisg
ICAgICAgIGNvbnN0IFRleHRDaGVja2luZ1Jlc3VsdCogcmVzdWx0ID0gJnJlc3VsdHNbaV07Cisg
ICAgICAgIGlmIChyZXN1bHQtPnR5cGUgPT0gVGV4dENoZWNraW5nVHlwZUdyYW1tYXIgJiYgcmVz
dWx0LT5sb2NhdGlvbiA8PSByYW5nZVN0YXJ0T2Zmc2V0ICYmIHJlc3VsdC0+bG9jYXRpb24gKyBy
ZXN1bHQtPmxlbmd0aCA+PSByYW5nZVN0YXJ0T2Zmc2V0ICsgcmFuZ2VMZW5ndGgpIHsKKyAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCByZXN1bHQtPmRldGFpbHMuc2l6ZSgpOyBq
KyspIHsKKyAgICAgICAgICAgICAgICBjb25zdCBHcmFtbWFyRGV0YWlsKiBkZXRhaWwgPSAmcmVz
dWx0LT5kZXRhaWxzW2pdOworICAgICAgICAgICAgICAgIEFTU0VSVChkZXRhaWwtPmxlbmd0aCA+
IDAgJiYgZGV0YWlsLT5sb2NhdGlvbiA+PSAwKTsKKyAgICAgICAgICAgICAgICBpZiAocmVzdWx0
LT5sb2NhdGlvbiArIGRldGFpbC0+bG9jYXRpb24gPT0gcmFuZ2VTdGFydE9mZnNldCAmJiBkZXRh
aWwtPmxlbmd0aCA9PSByYW5nZUxlbmd0aCkgeworICAgICAgICAgICAgICAgICAgICBTdHJpbmcg
YmFkR3JhbW1hclBocmFzZSA9IHBhcmFncmFwaFN0cmluZy5zdWJzdHJpbmcocmVzdWx0LT5sb2Nh
dGlvbiwgcmVzdWx0LT5sZW5ndGgpOworICAgICAgICAgICAgICAgICAgICBBU1NFUlQoYmFkR3Jh
bW1hclBocmFzZS5sZW5ndGgoKSk7CisgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQg
ayA9IDA7IGsgPCBkZXRhaWwtPmd1ZXNzZXMuc2l6ZSgpOyBrKyspCisgICAgICAgICAgICAgICAg
ICAgICAgICBndWVzc2VzLmFwcGVuZChkZXRhaWwtPmd1ZXNzZXNba10pOworICAgICAgICAgICAg
ICAgICAgICBtX2NsaWVudC0+dXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKGJhZEdy
YW1tYXJQaHJhc2UsICpkZXRhaWwpOworICAgICAgICAgICAgICAgICAgICB1bmdyYW1tYXRpY2Fs
ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGd1ZXNzZXM7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBndWVz
c2VzOworI2Vsc2UKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBVTlVTRURfUEFSQU0o
Y2hlY2tHcmFtbWFyKTsKKyAgICBVTlVTRURfUEFSQU0obWlzc3BlbGxlZCk7CisgICAgVU5VU0VE
X1BBUkFNKHVuZ3JhbW1hdGljYWwpOworICAgIHJldHVybiBWZWN0b3I8U3RyaW5nPigpOworI2Vu
ZGlmCit9CisKKwordm9pZCBUZXh0Q2hlY2tpbmdIZWxwZXI6Om1hcmtBbGxNaXNzcGVsbGluZ3Mo
UmVmUHRyPFJhbmdlPiYgZmlyc3RNaXNzcGVsbGluZ1JhbmdlKQoreworICAgIC8vIFVzZSB0aGUg
Im1hcmtBbGwiIGZlYXR1cmUgb2YgZmluZEZpcnN0TWlzc3BlbGxpbmcuIElnbm9yZSB0aGUgcmV0
dXJuIHZhbHVlIGFuZCB0aGUgIm91dCBwYXJhbWV0ZXIiOworICAgIC8vIGFsbCB3ZSBuZWVkIHRv
IGRvIGlzIG1hcmsgZXZlcnkgaW5zdGFuY2UuCisgICAgaW50IGlnbm9yZWRPZmZzZXQ7CisgICAg
ZmluZEZpcnN0TWlzc3BlbGxpbmcoaWdub3JlZE9mZnNldCwgdHJ1ZSwgZmlyc3RNaXNzcGVsbGlu
Z1JhbmdlKTsKK30KKwordm9pZCBUZXh0Q2hlY2tpbmdIZWxwZXI6Om1hcmtBbGxCYWRHcmFtbWFy
KCkKK3sKKyNpZm5kZWYgQlVJTERJTkdfT05fVElHRVIKKyAgICAvLyBVc2UgdGhlICJtYXJrQWxs
IiBmZWF0dXJlIG9mIGZpbmRGaXJzdEJhZEdyYW1tYXIuIElnbm9yZSB0aGUgcmV0dXJuIHZhbHVl
IGFuZCAib3V0IHBhcmFtZXRlcnMiOyBhbGwgd2UgbmVlZCB0bworICAgIC8vIGRvIGlzIG1hcmsg
ZXZlcnkgaW5zdGFuY2UuCisgICAgR3JhbW1hckRldGFpbCBpZ25vcmVkR3JhbW1hckRldGFpbDsK
KyAgICBpbnQgaWdub3JlZE9mZnNldDsKKyAgICBmaW5kRmlyc3RCYWRHcmFtbWFyKGlnbm9yZWRH
cmFtbWFyRGV0YWlsLCBpZ25vcmVkT2Zmc2V0LCB0cnVlKTsKKyNlbHNlCisgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisjZW5kaWYKK30KKworfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9lZGl0aW5n
L1RleHRDaGVja2luZ0hlbHBlci5oIGIvV2ViQ29yZS9lZGl0aW5nL1RleHRDaGVja2luZ0hlbHBl
ci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjFkZDNiM2Q1YzEyN2YyNmVjNzRkMWUzNDI2ZTVhNjc2ZWM0MzQxYzMK
LS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2VkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmgK
QEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggTm9r
aWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgVGV4dENo
ZWNraW5nSGVscGVyX2gKKyNkZWZpbmUgVGV4dENoZWNraW5nSGVscGVyX2gKKworI2luY2x1ZGUg
IkVkaXRvckNsaWVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFJhbmdlOwor
CitjbGFzcyBUZXh0Q2hlY2tpbmdIZWxwZXIgOiBwdWJsaWMgTm9uY29weWFibGUgeworcHVibGlj
OgorICAgIFRleHRDaGVja2luZ0hlbHBlcihFZGl0b3JDbGllbnQqLCBQYXNzUmVmUHRyPFJhbmdl
Pik7CisgICAgflRleHRDaGVja2luZ0hlbHBlcigpOworCisgICAgU3RyaW5nIGZpbmRGaXJzdE1p
c3NwZWxsaW5nKGludCYgZmlyc3RNaXNzcGVsbGluZ09mZnNldCwgYm9vbCBtYXJrQWxsLCBSZWZQ
dHI8UmFuZ2U+JiBmaXJzdE1pc3NwZWxsaW5nUmFuZ2UpOworICAgIFN0cmluZyBmaW5kRmlyc3RN
aXNzcGVsbGluZ09yQmFkR3JhbW1hcihib29sIGNoZWNrR3JhbW1hciwgYm9vbCYgb3V0SXNTcGVs
bGluZywgaW50JiBvdXRGaXJzdEZvdW5kT2Zmc2V0LCBHcmFtbWFyRGV0YWlsJiBvdXRHcmFtbWFy
RGV0YWlsKTsKKyAgICBTdHJpbmcgZmluZEZpcnN0QmFkR3JhbW1hcihHcmFtbWFyRGV0YWlsJiBv
dXRHcmFtbWFyRGV0YWlsLCBpbnQmIG91dEdyYW1tYXJQaHJhc2VPZmZzZXQsIGJvb2wgbWFya0Fs
bCk7CisgICAgaW50IGZpbmRGaXJzdEdyYW1tYXJEZXRhaWwoY29uc3QgVmVjdG9yPEdyYW1tYXJE
ZXRhaWw+JiBncmFtbWFyRGV0YWlscywgaW50IGJhZEdyYW1tYXJQaHJhc2VMb2NhdGlvbiwgaW50
IGJhZEdyYW1tYXJQaHJhc2VMZW5ndGgsIGludCBzdGFydE9mZnNldCwgaW50IGVuZE9mZnNldCwg
Ym9vbCBtYXJrQWxsKTsKKyAgICB2b2lkIG1hcmtBbGxNaXNzcGVsbGluZ3MoUmVmUHRyPFJhbmdl
PiYgZmlyc3RNaXNzcGVsbGluZ1JhbmdlKTsKKyAgICB2b2lkIG1hcmtBbGxCYWRHcmFtbWFyKCk7
CisKKyAgICBib29sIGlzVW5ncmFtbWF0aWNhbChWZWN0b3I8U3RyaW5nPiYgZ3Vlc3Nlc1ZlY3Rv
cikgY29uc3Q7CisgICAgVmVjdG9yPFN0cmluZz4gZ3Vlc3Nlc0Zvck1pc3NwZWxsZWRPclVuZ3Jh
bW1hdGljYWxSYW5nZShib29sIGNoZWNrR3JhbW1hciwgYm9vbCYgbWlzc3BlbGxlZCwgYm9vbCYg
dW5ncmFtbWF0aWNhbCkgY29uc3Q7CisgICAgUGFzc1JlZlB0cjxSYW5nZT4gcGFyYWdyYXBoQWxp
Z25lZFJhbmdlKGludCYgb2Zmc2V0SW50b1BhcmFncmFwaEFsaWduZWRSYW5nZSwgU3RyaW5nJiBw
YXJhZ3JhcGhTdHJpbmcpIGNvbnN0OworcHJpdmF0ZToKKyAgICBFZGl0b3JDbGllbnQqIG1fY2xp
ZW50OworICAgIFJlZlB0cjxSYW5nZT4gbV9yYW5nZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmIC8vIFRleHRDaGVja2luZ0hlbHBlcl9oCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>72485</attachid>
            <date>2010-10-31 23:06:36 -0700</date>
            <delta_ts>2010-10-31 23:21:56 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-48287-20101101150634.patch</filename>
            <type>text/plain</type>
            <size>73749</size>
            <attacher name="Hajime Morrita">morrita</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9XZWJDb3JlL0NNYWtlTGlzdHMu
dHh0CmluZGV4IGMxYThlMTE2YmMxZjcyMmVmNzIwMmE0YmQyZDBiOWY4Mjc3ZDU5NjIuLjRiMDU0
NzdiMmYwZjAxYjQ1ODAzY2ZkZjVkMzAxMzNiNTMwYmI3YWMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
Q01ha2VMaXN0cy50eHQKKysrIGIvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAtOTI2LDYgKzky
Niw3IEBAIFNFVChXZWJDb3JlX1NPVVJDRVMKICAgICBlZGl0aW5nL1NwbGl0RWxlbWVudENvbW1h
bmQuY3BwCiAgICAgZWRpdGluZy9TcGxpdFRleHROb2RlQ29tbWFuZC5jcHAKICAgICBlZGl0aW5n
L1NwbGl0VGV4dE5vZGVDb250YWluaW5nRWxlbWVudENvbW1hbmQuY3BwCisgICAgZWRpdGluZy9U
ZXh0Q2hlY2tpbmdIZWxwZXIuY3BwCiAgICAgZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwCiAgICAg
ZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcAogICAgIGVkaXRpbmcvVW5saW5rQ29tbWFuZC5jcHAK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
OTBkZjg1ZGM0NmE4MDdmMGVkMzcyN2RmMzRkNDBjNGUyY2FkY2Y5OS4uYTgzNzYyMTA0MTM4ZDM1
NTI3MDUwMjRlNGE1MmJhZjI3OTZkMTRmMiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0NyBAQAorMjAxMC0xMC0yNiAgTU9S
SVRBIEhhamltZSAgPG1vcnJpdGFAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBL
ZW50IFRhbXVyYS4KKworICAgICAgICBSZWZhY3RvcmluZzogU3BlbGxjaGVja2luZyByZWxhdGVk
IHN0YXRpYyBmdW5jdGlvbnMgY291bGQgZm9ybSBhIGNsYXNzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00ODI4NworCisgICAgICAgIEV4dHJhY3RlZCBz
cGVsbGNoZWNrIHJlbGF0ZWQgc3RhdGljIGZ1bmN0aW9ucyB0byBUZXh0Q2hlY2tpbmdIZWxwZXIg
Y2xhc3MsCisgICAgICAgIHdoaWNoIGhhcyBFZGl0b3JDbGllbnQgYW5kIFJhbmdlIGFzIGl0cyBt
ZW1iZXIuCisgICAgICAgIAorICAgICAgICBObyBuZXcgdGVzdHMuIEp1c3QgYSByZWZhY3Rvcmlu
Zy4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEdOVW1ha2VmaWxlLmFt
OgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAgICAg
ICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogZWRpdGluZy9FZGl0b3IuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjphZHZhbmNlVG9OZXh0TWlzc3BlbGxpbmcpOgorICAg
ICAgICAoV2ViQ29yZTo6RWRpdG9yOjppc1NlbGVjdGlvblVuZ3JhbW1hdGljYWwpOgorICAgICAg
ICAoV2ViQ29yZTo6RWRpdG9yOjpndWVzc2VzRm9yVW5ncmFtbWF0aWNhbFNlbGVjdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Omd1ZXNzZXNGb3JNaXNzcGVsbGVkT3JVbmdyYW1tYXRp
Y2FsU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bWFya01pc3NwZWxsaW5n
c0FmdGVyVHlwaW5nVG9Qb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Om1hcmtN
aXNzcGVsbGluZ3NPckJhZEdyYW1tYXIpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjptYXJr
TWlzc3BlbGxpbmdzKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bWFya0JhZEdyYW1tYXIp
OgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjptYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3Jh
bW1hckluUmFuZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y2hhbmdlQmFja1RvUmVw
bGFjZWRTdHJpbmcpOgorICAgICAgICAqIGVkaXRpbmcvRWRpdG9yLmg6CisgICAgICAgICogZWRp
dGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRl
eHRDaGVja2luZ0hlbHBlcjo6VGV4dENoZWNraW5nSGVscGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OlRleHRDaGVja2luZ0hlbHBlcjo6flRleHRDaGVja2luZ0hlbHBlcik6CisgICAgICAgIChXZWJD
b3JlOjpUZXh0Q2hlY2tpbmdIZWxwZXI6OnBhcmFncmFwaEFsaWduZWRSYW5nZSk6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0Q2hlY2tpbmdIZWxwZXI6OmZpbmRGaXJzdE1pc3NwZWxsaW5nKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHRDaGVja2luZ0hlbHBlcjo6ZmluZEZpcnN0TWlzc3BlbGxpbmdP
ckJhZEdyYW1tYXIpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENoZWNraW5nSGVscGVyOjpmaW5k
Rmlyc3RHcmFtbWFyRGV0YWlsKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDaGVja2luZ0hlbHBl
cjo6ZmluZEZpcnN0QmFkR3JhbW1hcik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Q2hlY2tpbmdI
ZWxwZXI6OmlzVW5ncmFtbWF0aWNhbCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Q2hlY2tpbmdI
ZWxwZXI6Omd1ZXNzZXNGb3JNaXNzcGVsbGVkT3JVbmdyYW1tYXRpY2FsUmFuZ2UpOgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dENoZWNraW5nSGVscGVyOjptYXJrQWxsTWlzc3BlbGxpbmdzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHRDaGVja2luZ0hlbHBlcjo6bWFya0FsbEJhZEdyYW1tYXIpOgor
ICAgICAgICAqIGVkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmg6IEFkZGVkLgorCiAyMDEwLTEw
LTMxICBYYW4gTG9wZXogIDx4bG9wZXpAaWdhbGlhLmNvbT4KIAogICAgICAgICBUcnkgdG8gZml4
IHRoZSBHVEsrIGJ1aWxkLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbSBiL1dl
YkNvcmUvR05VbWFrZWZpbGUuYW0KaW5kZXggZjcyMTYwODg3ZDlkOThhM2U0ZDEyZDRmYmFhZjNj
OTUwOWZhMDc3Yi4uN2ZlMWRhYzdmMzg1MzFhODI3NDFmM2UwYjg0NDQzYzdjOGI1NmQxMCAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQorKysgYi9XZWJDb3JlL0dOVW1ha2VmaWxl
LmFtCkBAIC0xMzU1LDYgKzEzNTUsOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUv
ZWRpdGluZy9TcGxpdFRleHROb2RlQ29udGFpbmluZ0VsZW1lbnRDb21tYW5kLmNwcCBcCiAJV2Vi
Q29yZS9lZGl0aW5nL1NwbGl0VGV4dE5vZGVDb250YWluaW5nRWxlbWVudENvbW1hbmQuaCBcCiAJ
V2ViQ29yZS9lZGl0aW5nL1RleHRBZmZpbml0eS5oIFwKKwlXZWJDb3JlL2VkaXRpbmcvVGV4dENo
ZWNraW5nSGVscGVyLmNwcCBcCisJV2ViQ29yZS9lZGl0aW5nL1RleHRDaGVja2luZ0hlbHBlci5o
IFwKIAlXZWJDb3JlL2VkaXRpbmcvVGV4dEdyYW51bGFyaXR5LmggXAogCVdlYkNvcmUvZWRpdGlu
Zy9UZXh0SXRlcmF0b3IuY3BwIFwKIAlXZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmggXApk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpp
bmRleCBhMGMzZDUyN2Y0YTRhYTkxYjYxYTg0OWVlM2I4ZWYwNmRjOGI5N2Y2Li5kOWM1ZTM5YWUy
OTljZmU2NTBiNTBlN2E5ZmE1ZWZmZWI2NzdjMjk5IDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNv
cmUuZ3lwaQorKysgYi9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMTQzNyw2ICsxNDM3LDggQEAK
ICAgICAgICAgICAgICdlZGl0aW5nL1NwbGl0VGV4dE5vZGVDb250YWluaW5nRWxlbWVudENvbW1h
bmQuY3BwJywKICAgICAgICAgICAgICdlZGl0aW5nL1NwbGl0VGV4dE5vZGVDb250YWluaW5nRWxl
bWVudENvbW1hbmQuaCcsCiAgICAgICAgICAgICAnZWRpdGluZy9UZXh0QWZmaW5pdHkuaCcsCisg
ICAgICAgICAgICAnZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuY3BwJywKKyAgICAgICAgICAg
ICdlZGl0aW5nL1RleHRDaGVja2luZ0hlbHBlci5oJywKICAgICAgICAgICAgICdlZGl0aW5nL1Rl
eHRHcmFudWxhcml0eS5oJywKICAgICAgICAgICAgICdlZGl0aW5nL1RleHRJdGVyYXRvci5jcHAn
LAogICAgICAgICAgICAgJ2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmgnLApkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9XZWJDb3JlLnBybyBiL1dlYkNvcmUvV2ViQ29yZS5wcm8KaW5kZXggMzQ2OTdkZjI4MDFj
MDc5MjYyYzU3OWQwMjUyYWQyNWFlNzgzZTYzNy4uNGYzZWNjMDVlZTY2NTgwYzE2ZTlkZTg0Yjc1
NmZiNWIwMDI2ZTgxZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnBybworKysgYi9XZWJD
b3JlL1dlYkNvcmUucHJvCkBAIC04MTcsNiArODE3LDcgQEAgU09VUkNFUyArPSBcCiAgICAgZWRp
dGluZy9TcGxpdEVsZW1lbnRDb21tYW5kLmNwcCBcCiAgICAgZWRpdGluZy9TcGxpdFRleHROb2Rl
Q29tbWFuZC5jcHAgXAogICAgIGVkaXRpbmcvU3BsaXRUZXh0Tm9kZUNvbnRhaW5pbmdFbGVtZW50
Q29tbWFuZC5jcHAgXAorICAgIGVkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmNwcCBcCiAgICAg
ZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwIFwKICAgICBlZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3Bw
IFwKICAgICBlZGl0aW5nL1VubGlua0NvbW1hbmQuY3BwIFwKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
V2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2ogYi9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dl
YkNvcmUudmNwcm9qCmluZGV4IDc0MzIyOGIxMzM0ZDE1Zjg4YmJmNTk2OWIzYzk2ODQ4MjlkOTRh
MzMuLjY1MDU2Zjc4MmRlY2NkN2UxZDk1MTgxYzk2Yjg3NTMyMDgzMjhiMzEgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKKysrIGIvV2ViQ29yZS9XZWJD
b3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagpAQCAtNDc5NDAsNiArNDc5NDAsNjIgQEAKIAkJCQk+
DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cZWRpdGluZ1xU
ZXh0Q2hlY2tpbmdIZWxwZXIuY3BwIg0KKwkJCQk+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0K
KwkJCQkJTmFtZT0iRGVidWd8V2luMzIiDQorCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIN
CisJCQkJCT4NCisJCQkJCTxUb29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJ
CQkJCS8+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlv
bg0KKwkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCisJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0
cnVlIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29s
Ig0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1
cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1Z19JbnRlcm5hbHxXaW4zMiINCisJCQkJCUV4Y2x1ZGVk
RnJvbUJ1aWxkPSJ0cnVlIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NM
Q29tcGlsZXJUb29sIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJ
PEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJEZWJ1Z19DYWlyb3xXaW4zMiINCisJCQkJ
CUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlO
YW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlv
bj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlX0NhaXJvfFdp
bjMyIg0KKwkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiDQorCQkJCQk+DQorCQkJCQk8VG9v
bA0KKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVD
b25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVn
X0FsbHxXaW4zMiINCisJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIg0KKwkJCQkJPg0KKwkJ
CQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJLz4NCisJCQkJ
PC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRp
dmVQYXRoPSIuLlxlZGl0aW5nXFRleHRDaGVja2luZ0hlbHBlci5oIg0KKwkJCQk+DQorCQkJPC9G
aWxlPg0KKwkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cZWRpdGluZ1xUZXh0R3JhbnVs
YXJpdHkuaCINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCmluZGV4IDE1ZGZkNjJlNzZiZGZkMGYzODI4ZTRjNzRlZmFhMWFhMDFk
ZWIwODMuLmMxYmYyM2IzMjZjYWRmMjU3MTEwYjk2NzkxYzI5YTYwNDA1ZDRhMzcgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0zMDY5LDYgKzMwNjksOCBA
QAogCQlBN0QzQzUyNDBCNTc2QjRCMDAyQ0E0NTAgLyogUGFzdGVib2FyZEhlbHBlci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdEM0M1MjMwQjU3NkI0
QjAwMkNBNDUwIC8qIFBhc3RlYm9hcmRIZWxwZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBN0Q2QjM0OTBGNjExMDQ1MDBCNzlGRDEgLyogV29y
a2VyU2NyaXB0TG9hZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBBN0Q2QjM0NzBGNjExMDQ1MDBCNzlGRDEgLyogV29ya2VyU2NyaXB0TG9hZGVyLmgg
Ki87IH07CiAJCUE3RDZCMzRBMEY2MTEwNDUwMEI3OUZEMSAvKiBXb3JrZXJTY3JpcHRMb2FkZXIu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdENkIz
NDgwRjYxMTA0NTAwQjc5RkQxIC8qIFdvcmtlclNjcmlwdExvYWRlci5jcHAgKi87IH07CisJCUE3
REJGOEREMTI3NjkxOUMwMDZCNjAwOCAvKiBUZXh0Q2hlY2tpbmdIZWxwZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdEQkY4REIxMjc2OTE5QzAw
NkI2MDA4IC8qIFRleHRDaGVja2luZ0hlbHBlci5jcHAgKi87IH07CisJCUE3REJGOERFMTI3Njkx
OUMwMDZCNjAwOCAvKiBUZXh0Q2hlY2tpbmdIZWxwZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3REJGOERDMTI3NjkxOUMwMDZCNjAwOCAvKiBUZXh0
Q2hlY2tpbmdIZWxwZXIuaCAqLzsgfTsKIAkJQTdGMzM4QTMxMUMwRUZDQTAwQTMyMEE3IC8qIFNo
YWRvd0VsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQTdGMzM4QTExMUMwRUZDQTAwQTMyMEE3IC8qIFNoYWRvd0VsZW1lbnQuY3BwICovOyB9
OwogCQlBN0YzMzhBNDExQzBFRkNBMDBBMzIwQTcgLyogU2hhZG93RWxlbWVudC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdGMzM4QTIxMUMwRUZDQTAw
QTMyMEE3IC8qIFNoYWRvd0VsZW1lbnQuaCAqLzsgfTsKIAkJQTgwOUYxNDcwQjczNzkzQTAwMkU0
RDdGIC8qIFJlbmRlclNWR0dyYWRpZW50U3RvcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQTgwOUYxNDUwQjczNzkzQTAwMkU0RDdGIC8qIFJlbmRlclNW
R0dyYWRpZW50U3RvcC5oICovOyB9OwpAQCAtOTE1Niw2ICs5MTU4LDggQEAKIAkJQTdEM0M1MjMw
QjU3NkI0QjAwMkNBNDUwIC8qIFBhc3RlYm9hcmRIZWxwZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUGFzdGVib2FyZEhlbHBlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlBN0Q2QjM0NzBGNjExMDQ1MDBCNzlGRDEgLyogV29ya2VyU2NyaXB0TG9hZGVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdvcmtlclNjcmlwdExvYWRlci5oOyBw
YXRoID0gd29ya2Vycy9Xb3JrZXJTY3JpcHRMb2FkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQTdENkIzNDgwRjYxMTA0NTAwQjc5RkQxIC8qIFdvcmtlclNjcmlwdExvYWRlci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXb3JrZXJTY3JpcHRMb2Fk
ZXIuY3BwOyBwYXRoID0gd29ya2Vycy9Xb3JrZXJTY3JpcHRMb2FkZXIuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlBN0RCRjhEQjEyNzY5MTlDMDA2QjYwMDggLyogVGV4dENoZWNr
aW5nSGVscGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRleHRD
aGVja2luZ0hlbHBlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE3REJGOERD
MTI3NjkxOUMwMDZCNjAwOCAvKiBUZXh0Q2hlY2tpbmdIZWxwZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gVGV4dENoZWNraW5nSGVscGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUE3RjMzOEExMTFDMEVGQ0EwMEEzMjBBNyAvKiBTaGFkb3dFbGVtZW50LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNoYWRvd0VsZW1lbnQuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBN0YzMzhBMjExQzBFRkNBMDBBMzIwQTcg
LyogU2hhZG93RWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTaGFk
b3dFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4MDlGMTQ1MEI3Mzc5
M0EwMDJFNEQ3RiAvKiBSZW5kZXJTVkdHcmFkaWVudFN0b3AuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUmVuZGVyU1ZHR3JhZGllbnRTdG9wLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0xNDU0Niw2ICsxNDU1MCw4IEBACiAJCQkJOTMzMDlEQzcwOTlFNjQ5MTAw
NTZFNTgxIC8qIFNwbGl0VGV4dE5vZGVDb250YWluaW5nRWxlbWVudENvbW1hbmQuaCAqLywKIAkJ
CQk5MzMwOURDODA5OUU2NDkxMDA1NkU1ODEgLyogVGV4dEFmZmluaXR5LmggKi8sCiAJCQkJOTMz
MDlEQzkwOTlFNjQ5MTAwNTZFNTgxIC8qIFRleHRHcmFudWxhcml0eS5oICovLAorCQkJCUE3REJG
OERCMTI3NjkxOUMwMDZCNjAwOCAvKiBUZXh0Q2hlY2tpbmdIZWxwZXIuY3BwICovLAorCQkJCUE3
REJGOERDMTI3NjkxOUMwMDZCNjAwOCAvKiBUZXh0Q2hlY2tpbmdIZWxwZXIuaCAqLywKIAkJCQk5
MzMwOURDQzA5OUU2NDkxMDA1NkU1ODEgLyogVGV4dEl0ZXJhdG9yLmNwcCAqLywKIAkJCQk5MzMw
OURDRDA5OUU2NDkxMDA1NkU1ODEgLyogVGV4dEl0ZXJhdG9yLmggKi8sCiAJCQkJOTMzMDlEQ0Ew
OTlFNjQ5MTAwNTZFNTgxIC8qIFR5cGluZ0NvbW1hbmQuY3BwICovLApAQCAtMjEwMTIsNiArMjEw
MTgsNyBAQAogCQkJCUIyQzNEQTM0MEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0Qm91bmRhcmllcy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQjJDM0RBMzYwRDAwNkMxRDAwRUY2RjI2IC8qIFRleHRCcmVh
a0l0ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMkMzREEzODBEMDA2QzFEMDBFRjZGMjYg
LyogVGV4dEJyZWFrSXRlcmF0b3JJbnRlcm5hbElDVS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTdE
QkY4REUxMjc2OTE5QzAwNkI2MDA4IC8qIFRleHRDaGVja2luZ0hlbHBlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQjJDM0RBM0EwRDAwNkMxRDAwRUY2RjI2IC8qIFRleHRDb2RlYy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQjJDM0RBM0MwRDAwNkMxRDAwRUY2RjI2IC8qIFRleHRDb2RlY0lDVS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQjJDM0RBM0UwRDAwNkMxRDAwRUY2RjI2IC8qIFRleHRDb2RlY0xh
dGluMS5oIGluIEhlYWRlcnMgKi8sCkBAIC0yMzYxMyw2ICsyMzYyMCw3IEBACiAJCQkJQjJBRkZD
OTcwRDAwQTVERjAwMzAwNzREIC8qIFRleHRCb3VuZGFyaWVzLm1tIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQjJDM0RBMzcwRDAwNkMxRDAwRUY2RjI2IC8qIFRleHRCcmVha0l0ZXJhdG9ySUNVLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUIyQUZGQzk4MEQwMEE1REYwMDMwMDc0RCAvKiBUZXh0QnJlYWtJ
dGVyYXRvckludGVybmFsSUNVTWFjLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJQTdEQkY4REQxMjc2
OTE5QzAwNkI2MDA4IC8qIFRleHRDaGVja2luZ0hlbHBlci5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlCMkMzREEzOTBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dENvZGVjLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUIyQzNEQTNCMEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0Q29kZWNJQ1UuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQjJDM0RBM0QwRDAwNkMxRDAwRUY2RjI2IC8qIFRleHRDb2RlY0xhdGlu
MS5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZWRpdGluZy9FZGl0b3Iu
Y3BwIGIvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKaW5kZXggMTY5Yjc2NWY0MzVhNzAyYzlm
MWQyODQ2MDdmMzUyYWQ1ODEzNDAxNC4uOGE0ZWY1OTk0OGVhNzRjZTgxNzg2MTJmMGY5YzA2Mjlh
Mzg0YTUzZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKKysrIGIvV2Vi
Q29yZS9lZGl0aW5nL0VkaXRvci5jcHAKQEAgLTYyLDYgKzYyLDcgQEAKICNpbmNsdWRlICJOb2Rl
TGlzdC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQYXN0ZWJvYXJkLmgiCisjaW5j
bHVkZSAiVGV4dENoZWNraW5nSGVscGVyLmgiCiAjaW5jbHVkZSAiUmVtb3ZlRm9ybWF0Q29tbWFu
ZC5oIgogI2luY2x1ZGUgIlJlbmRlckJsb2NrLmgiCiAjaW5jbHVkZSAiUmVuZGVyUGFydC5oIgpA
QCAtMTY1OSwzMjggKzE2NjAsNiBAQCB2b2lkIEVkaXRvcjo6bGVhcm5TcGVsbGluZygpCiAgICAg
Y2xpZW50KCktPmxlYXJuV29yZCh0ZXh0KTsKIH0KIAotc3RhdGljIFN0cmluZyBmaW5kRmlyc3RN
aXNzcGVsbGluZ0luUmFuZ2UoRWRpdG9yQ2xpZW50KiBjbGllbnQsIFJhbmdlKiBzZWFyY2hSYW5n
ZSwgaW50JiBmaXJzdE1pc3NwZWxsaW5nT2Zmc2V0LCBib29sIG1hcmtBbGwsIFJlZlB0cjxSYW5n
ZT4mIGZpcnN0TWlzc3BlbGxpbmdSYW5nZSkKLXsKLSAgICBBU1NFUlRfQVJHKGNsaWVudCwgY2xp
ZW50KTsKLSAgICBBU1NFUlRfQVJHKHNlYXJjaFJhbmdlLCBzZWFyY2hSYW5nZSk7Ci0gICAgCi0g
ICAgV29yZEF3YXJlSXRlcmF0b3IgaXQoc2VhcmNoUmFuZ2UpOwotICAgIGZpcnN0TWlzc3BlbGxp
bmdPZmZzZXQgPSAwOwotICAgIAotICAgIFN0cmluZyBmaXJzdE1pc3NwZWxsaW5nOwotICAgIGlu
dCBjdXJyZW50Q2h1bmtPZmZzZXQgPSAwOwotCi0gICAgd2hpbGUgKCFpdC5hdEVuZCgpKSB7Ci0g
ICAgICAgIGNvbnN0IFVDaGFyKiBjaGFycyA9IGl0LmNoYXJhY3RlcnMoKTsKLSAgICAgICAgaW50
IGxlbiA9IGl0Lmxlbmd0aCgpOwotICAgICAgICAKLSAgICAgICAgLy8gU2tpcCBzb21lIHdvcmsg
Zm9yIG9uZS1zcGFjZS1jaGFyIGh1bmtzCi0gICAgICAgIGlmICghKGxlbiA9PSAxICYmIGNoYXJz
WzBdID09ICcgJykpIHsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaW50IG1pc3NwZWxsaW5n
TG9jYXRpb24gPSAtMTsKLSAgICAgICAgICAgIGludCBtaXNzcGVsbGluZ0xlbmd0aCA9IDA7Ci0g
ICAgICAgICAgICBjbGllbnQtPmNoZWNrU3BlbGxpbmdPZlN0cmluZyhjaGFycywgbGVuLCAmbWlz
c3BlbGxpbmdMb2NhdGlvbiwgJm1pc3NwZWxsaW5nTGVuZ3RoKTsKLQotICAgICAgICAgICAgLy8g
NTQ5MDYyNyBzaG93cyB0aGF0IHRoZXJlIHdhcyBzb21lIGNvZGUgcGF0aCBoZXJlIHdoZXJlIHRo
ZSBTdHJpbmcgY29uc3RydWN0b3IgYmVsb3cgY3Jhc2hlcy4KLSAgICAgICAgICAgIC8vIFdlIGRv
bid0IGtub3cgZXhhY3RseSB3aGF0IGNvbWJpbmF0aW9uIG9mIGJhZCBpbnB1dCBjYXVzZWQgdGhp
cywgc28gd2UncmUgbWFraW5nIHRoaXMgbXVjaAotICAgICAgICAgICAgLy8gbW9yZSByb2J1c3Qg
YWdhaW5zdCBiYWQgaW5wdXQgb24gcmVsZWFzZSBidWlsZHMuCi0gICAgICAgICAgICBBU1NFUlQo
bWlzc3BlbGxpbmdMZW5ndGggPj0gMCk7Ci0gICAgICAgICAgICBBU1NFUlQobWlzc3BlbGxpbmdM
b2NhdGlvbiA+PSAtMSk7Ci0gICAgICAgICAgICBBU1NFUlQoIW1pc3NwZWxsaW5nTGVuZ3RoIHx8
IG1pc3NwZWxsaW5nTG9jYXRpb24gPj0gMCk7Ci0gICAgICAgICAgICBBU1NFUlQobWlzc3BlbGxp
bmdMb2NhdGlvbiA8IGxlbik7Ci0gICAgICAgICAgICBBU1NFUlQobWlzc3BlbGxpbmdMZW5ndGgg
PD0gbGVuKTsKLSAgICAgICAgICAgIEFTU0VSVChtaXNzcGVsbGluZ0xvY2F0aW9uICsgbWlzc3Bl
bGxpbmdMZW5ndGggPD0gbGVuKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKG1pc3Nw
ZWxsaW5nTG9jYXRpb24gPj0gMCAmJiBtaXNzcGVsbGluZ0xlbmd0aCA+IDAgJiYgbWlzc3BlbGxp
bmdMb2NhdGlvbiA8IGxlbiAmJiBtaXNzcGVsbGluZ0xlbmd0aCA8PSBsZW4gJiYgbWlzc3BlbGxp
bmdMb2NhdGlvbiArIG1pc3NwZWxsaW5nTGVuZ3RoIDw9IGxlbikgewotICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgIC8vIENvbXB1dGUgcmFuZ2Ugb2YgbWlzc3BlbGxlZCB3b3JkCi0g
ICAgICAgICAgICAgICAgUmVmUHRyPFJhbmdlPiBtaXNzcGVsbGluZ1JhbmdlID0gVGV4dEl0ZXJh
dG9yOjpzdWJyYW5nZShzZWFyY2hSYW5nZSwgY3VycmVudENodW5rT2Zmc2V0ICsgbWlzc3BlbGxp
bmdMb2NhdGlvbiwgbWlzc3BlbGxpbmdMZW5ndGgpOwotCi0gICAgICAgICAgICAgICAgLy8gUmVt
ZW1iZXIgZmlyc3QtZW5jb3VudGVyZWQgbWlzc3BlbGxpbmcgYW5kIGl0cyBvZmZzZXQuCi0gICAg
ICAgICAgICAgICAgaWYgKCFmaXJzdE1pc3NwZWxsaW5nKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGZpcnN0TWlzc3BlbGxpbmdPZmZzZXQgPSBjdXJyZW50Q2h1bmtPZmZzZXQgKyBtaXNzcGVsbGlu
Z0xvY2F0aW9uOwotICAgICAgICAgICAgICAgICAgICBmaXJzdE1pc3NwZWxsaW5nID0gU3RyaW5n
KGNoYXJzICsgbWlzc3BlbGxpbmdMb2NhdGlvbiwgbWlzc3BlbGxpbmdMZW5ndGgpOwotICAgICAg
ICAgICAgICAgICAgICBmaXJzdE1pc3NwZWxsaW5nUmFuZ2UgPSBtaXNzcGVsbGluZ1JhbmdlOwot
ICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIFN0b3JlIG1hcmtlciBmb3Ig
bWlzc3BlbGxlZCB3b3JkLgotICAgICAgICAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwot
ICAgICAgICAgICAgICAgIG1pc3NwZWxsaW5nUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKGVjKS0+ZG9j
dW1lbnQoKS0+bWFya2VycygpLT5hZGRNYXJrZXIobWlzc3BlbGxpbmdSYW5nZS5nZXQoKSwgRG9j
dW1lbnRNYXJrZXI6OlNwZWxsaW5nKTsKLSAgICAgICAgICAgICAgICBBU1NFUlQoIWVjKTsKLQot
ICAgICAgICAgICAgICAgIC8vIEJhaWwgb3V0IGlmIHdlJ3JlIG1hcmtpbmcgb25seSB0aGUgZmly
c3QgbWlzc3BlbGxpbmcsIGFuZCBub3QgYWxsIGluc3RhbmNlcy4KLSAgICAgICAgICAgICAgICBp
ZiAoIW1hcmtBbGwpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBjdXJyZW50Q2h1bmtPZmZzZXQgKz0gbGVuOwot
ICAgICAgICBpdC5hZHZhbmNlKCk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBmaXJzdE1pc3Nw
ZWxsaW5nOwotfQotCi0jaWZuZGVmIEJVSUxESU5HX09OX1RJR0VSCi0KLXN0YXRpYyBQYXNzUmVm
UHRyPFJhbmdlPiBwYXJhZ3JhcGhBbGlnbmVkUmFuZ2VGb3JSYW5nZShSYW5nZSogYXJiaXRyYXJ5
UmFuZ2UsIGludCYgb2Zmc2V0SW50b1BhcmFncmFwaEFsaWduZWRSYW5nZSwgU3RyaW5nJiBwYXJh
Z3JhcGhTdHJpbmcpCi17Ci0gICAgQVNTRVJUX0FSRyhhcmJpdHJhcnlSYW5nZSwgYXJiaXRyYXJ5
UmFuZ2UpOwotICAgIAotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIAotICAgIC8vIEV4
cGFuZCByYW5nZSB0byBwYXJhZ3JhcGggYm91bmRhcmllcwotICAgIFJlZlB0cjxSYW5nZT4gcGFy
YWdyYXBoUmFuZ2UgPSBhcmJpdHJhcnlSYW5nZS0+Y2xvbmVSYW5nZShlYyk7Ci0gICAgc2V0U3Rh
cnQocGFyYWdyYXBoUmFuZ2UuZ2V0KCksIHN0YXJ0T2ZQYXJhZ3JhcGgoYXJiaXRyYXJ5UmFuZ2Ut
PnN0YXJ0UG9zaXRpb24oKSkpOwotICAgIHNldEVuZChwYXJhZ3JhcGhSYW5nZS5nZXQoKSwgZW5k
T2ZQYXJhZ3JhcGgoYXJiaXRyYXJ5UmFuZ2UtPmVuZFBvc2l0aW9uKCkpKTsKLSAgICAKLSAgICAv
LyBDb21wdXRlIG9mZnNldCBmcm9tIHN0YXJ0IG9mIGV4cGFuZGVkIHJhbmdlIHRvIHN0YXJ0IG9m
IG9yaWdpbmFsIHJhbmdlCi0gICAgUmVmUHRyPFJhbmdlPiBvZmZzZXRBc1JhbmdlID0gUmFuZ2U6
OmNyZWF0ZShwYXJhZ3JhcGhSYW5nZS0+c3RhcnRDb250YWluZXIoZWMpLT5kb2N1bWVudCgpLCBw
YXJhZ3JhcGhSYW5nZS0+c3RhcnRQb3NpdGlvbigpLCBhcmJpdHJhcnlSYW5nZS0+c3RhcnRQb3Np
dGlvbigpKTsKLSAgICBvZmZzZXRJbnRvUGFyYWdyYXBoQWxpZ25lZFJhbmdlID0gVGV4dEl0ZXJh
dG9yOjpyYW5nZUxlbmd0aChvZmZzZXRBc1JhbmdlLmdldCgpKTsKLSAgICAKLSAgICAvLyBGaWxs
IGluIG91dCBwYXJhbWV0ZXIgd2l0aCBzdHJpbmcgcmVwcmVzZW50aW5nIGVudGlyZSBwYXJhZ3Jh
cGggcmFuZ2UuCi0gICAgLy8gU29tZWRheSB3ZSBtaWdodCBoYXZlIGEgY2FsbGVyIHRoYXQgZG9l
c24ndCB1c2UgdGhpcywgYnV0IGZvciBub3cgYWxsIGNhbGxlcnMgZG8uCi0gICAgcGFyYWdyYXBo
U3RyaW5nID0gcGxhaW5UZXh0KHBhcmFncmFwaFJhbmdlLmdldCgpKTsKLQotICAgIHJldHVybiBw
YXJhZ3JhcGhSYW5nZTsKLX0KLQotc3RhdGljIGludCBmaW5kRmlyc3RHcmFtbWFyRGV0YWlsSW5S
YW5nZShjb25zdCBWZWN0b3I8R3JhbW1hckRldGFpbD4mIGdyYW1tYXJEZXRhaWxzLCBpbnQgYmFk
R3JhbW1hclBocmFzZUxvY2F0aW9uLCBpbnQgLypiYWRHcmFtbWFyUGhyYXNlTGVuZ3RoKi8sIFJh
bmdlICpzZWFyY2hSYW5nZSwgaW50IHN0YXJ0T2Zmc2V0LCBpbnQgZW5kT2Zmc2V0LCBib29sIG1h
cmtBbGwpCi17Ci0gICAgLy8gRm91bmQgc29tZSBiYWQgZ3JhbW1hci4gRmluZCB0aGUgZWFybGll
c3QgZGV0YWlsIHJhbmdlIHRoYXQgc3RhcnRzIGluIG91ciBzZWFyY2ggcmFuZ2UgKGlmIGFueSku
Ci0gICAgLy8gT3B0aW9uYWxseSBhZGQgYSBEb2N1bWVudE1hcmtlciBmb3IgZWFjaCBkZXRhaWwg
aW4gdGhlIHJhbmdlLgotICAgIGludCBlYXJsaWVzdERldGFpbExvY2F0aW9uU29GYXIgPSAtMTsK
LSAgICBpbnQgZWFybGllc3REZXRhaWxJbmRleCA9IC0xOwotICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBncmFtbWFyRGV0YWlscy5zaXplKCk7IGkrKykgewotICAgICAgICBjb25zdCBHcmFt
bWFyRGV0YWlsKiBkZXRhaWwgPSAmZ3JhbW1hckRldGFpbHNbaV07Ci0gICAgICAgIEFTU0VSVChk
ZXRhaWwtPmxlbmd0aCA+IDAgJiYgZGV0YWlsLT5sb2NhdGlvbiA+PSAwKTsKLSAgICAgICAgCi0g
ICAgICAgIGludCBkZXRhaWxTdGFydE9mZnNldEluUGFyYWdyYXBoID0gYmFkR3JhbW1hclBocmFz
ZUxvY2F0aW9uICsgZGV0YWlsLT5sb2NhdGlvbjsKLSAgICAgICAgCi0gICAgICAgIC8vIFNraXAg
dGhpcyBkZXRhaWwgaWYgaXQgc3RhcnRzIGJlZm9yZSB0aGUgb3JpZ2luYWwgc2VhcmNoIHJhbmdl
Ci0gICAgICAgIGlmIChkZXRhaWxTdGFydE9mZnNldEluUGFyYWdyYXBoIDwgc3RhcnRPZmZzZXQp
Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgCi0gICAgICAgIC8vIFNraXAgdGhpcyBk
ZXRhaWwgaWYgaXQgc3RhcnRzIGFmdGVyIHRoZSBvcmlnaW5hbCBzZWFyY2ggcmFuZ2UKLSAgICAg
ICAgaWYgKGRldGFpbFN0YXJ0T2Zmc2V0SW5QYXJhZ3JhcGggPj0gZW5kT2Zmc2V0KQotICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgIAotICAgICAgICBpZiAobWFya0FsbCkgewotICAgICAg
ICAgICAgUmVmUHRyPFJhbmdlPiBiYWRHcmFtbWFyUmFuZ2UgPSBUZXh0SXRlcmF0b3I6OnN1YnJh
bmdlKHNlYXJjaFJhbmdlLCBiYWRHcmFtbWFyUGhyYXNlTG9jYXRpb24gLSBzdGFydE9mZnNldCAr
IGRldGFpbC0+bG9jYXRpb24sIGRldGFpbC0+bGVuZ3RoKTsKLSAgICAgICAgICAgIEV4Y2VwdGlv
bkNvZGUgZWMgPSAwOwotICAgICAgICAgICAgYmFkR3JhbW1hclJhbmdlLT5zdGFydENvbnRhaW5l
cihlYyktPmRvY3VtZW50KCktPm1hcmtlcnMoKS0+YWRkTWFya2VyKGJhZEdyYW1tYXJSYW5nZS5n
ZXQoKSwgRG9jdW1lbnRNYXJrZXI6OkdyYW1tYXIsIGRldGFpbC0+dXNlckRlc2NyaXB0aW9uKTsK
LSAgICAgICAgICAgIEFTU0VSVCghZWMpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAv
LyBSZW1lbWJlciB0aGlzIGRldGFpbCBvbmx5IGlmIGl0J3MgZWFybGllciB0aGFuIG91ciBjdXJy
ZW50IGNhbmRpZGF0ZSAodGhlIGRldGFpbHMgYXJlbid0IGluIGEgZ3VhcmFudGVlZCBvcmRlcikK
LSAgICAgICAgaWYgKGVhcmxpZXN0RGV0YWlsSW5kZXggPCAwIHx8IGVhcmxpZXN0RGV0YWlsTG9j
YXRpb25Tb0ZhciA+IGRldGFpbC0+bG9jYXRpb24pIHsKLSAgICAgICAgICAgIGVhcmxpZXN0RGV0
YWlsSW5kZXggPSBpOwotICAgICAgICAgICAgZWFybGllc3REZXRhaWxMb2NhdGlvblNvRmFyID0g
ZGV0YWlsLT5sb2NhdGlvbjsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICByZXR1cm4gZWFy
bGllc3REZXRhaWxJbmRleDsKLX0KLSAgICAKLXN0YXRpYyBTdHJpbmcgZmluZEZpcnN0QmFkR3Jh
bW1hckluUmFuZ2UoRWRpdG9yQ2xpZW50KiBjbGllbnQsIFJhbmdlKiBzZWFyY2hSYW5nZSwgR3Jh
bW1hckRldGFpbCYgb3V0R3JhbW1hckRldGFpbCwgaW50JiBvdXRHcmFtbWFyUGhyYXNlT2Zmc2V0
LCBib29sIG1hcmtBbGwpCi17Ci0gICAgQVNTRVJUX0FSRyhjbGllbnQsIGNsaWVudCk7Ci0gICAg
QVNTRVJUX0FSRyhzZWFyY2hSYW5nZSwgc2VhcmNoUmFuZ2UpOwotICAgIAotICAgIC8vIEluaXRp
YWxpemUgb3V0IHBhcmFtZXRlcnM7IHRoZXNlIHdpbGwgYmUgdXBkYXRlZCBpZiB3ZSBmaW5kIHNv
bWV0aGluZyB0byByZXR1cm4uCi0gICAgb3V0R3JhbW1hckRldGFpbC5sb2NhdGlvbiA9IC0xOwot
ICAgIG91dEdyYW1tYXJEZXRhaWwubGVuZ3RoID0gMDsKLSAgICBvdXRHcmFtbWFyRGV0YWlsLmd1
ZXNzZXMuY2xlYXIoKTsKLSAgICBvdXRHcmFtbWFyRGV0YWlsLnVzZXJEZXNjcmlwdGlvbiA9ICIi
OwotICAgIG91dEdyYW1tYXJQaHJhc2VPZmZzZXQgPSAwOwotICAgIAotICAgIFN0cmluZyBmaXJz
dEJhZEdyYW1tYXJQaHJhc2U7Ci0KLSAgICAvLyBFeHBhbmQgdGhlIHNlYXJjaCByYW5nZSB0byBl
bmNvbXBhc3MgZW50aXJlIHBhcmFncmFwaHMsIHNpbmNlIGdyYW1tYXIgY2hlY2tpbmcgbmVlZHMg
dGhhdCBtdWNoIGNvbnRleHQuCi0gICAgLy8gRGV0ZXJtaW5lIHRoZSBjaGFyYWN0ZXIgb2Zmc2V0
IGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBwYXJhZ3JhcGggdG8gdGhlIHN0YXJ0IG9mIHRoZSBvcmln
aW5hbCBzZWFyY2ggcmFuZ2UsCi0gICAgLy8gc2luY2Ugd2Ugd2lsbCB3YW50IHRvIGlnbm9yZSBy
ZXN1bHRzIGluIHRoaXMgYXJlYS4KLSAgICBpbnQgc2VhcmNoUmFuZ2VTdGFydE9mZnNldDsKLSAg
ICBTdHJpbmcgcGFyYWdyYXBoU3RyaW5nOwotICAgIFJlZlB0cjxSYW5nZT4gcGFyYWdyYXBoUmFu
Z2UgPSBwYXJhZ3JhcGhBbGlnbmVkUmFuZ2VGb3JSYW5nZShzZWFyY2hSYW5nZSwgc2VhcmNoUmFu
Z2VTdGFydE9mZnNldCwgcGFyYWdyYXBoU3RyaW5nKTsKLSAgICAgICAgCi0gICAgLy8gRGV0ZXJt
aW5lIHRoZSBjaGFyYWN0ZXIgb2Zmc2V0IGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBwYXJhZ3JhcGgg
dG8gdGhlIGVuZCBvZiB0aGUgb3JpZ2luYWwgc2VhcmNoIHJhbmdlLCAKLSAgICAvLyBzaW5jZSB3
ZSB3aWxsIHdhbnQgdG8gaWdub3JlIHJlc3VsdHMgaW4gdGhpcyBhcmVhIGFsc28uCi0gICAgaW50
IHNlYXJjaFJhbmdlRW5kT2Zmc2V0ID0gc2VhcmNoUmFuZ2VTdGFydE9mZnNldCArIFRleHRJdGVy
YXRvcjo6cmFuZ2VMZW5ndGgoc2VhcmNoUmFuZ2UpOwotICAgICAgICAKLSAgICAvLyBTdGFydCBj
aGVja2luZyBmcm9tIGJlZ2lubmluZyBvZiBwYXJhZ3JhcGgsIGJ1dCBza2lwIHBhc3QgcmVzdWx0
cyB0aGF0IG9jY3VyIGJlZm9yZSB0aGUgc3RhcnQgb2YgdGhlIG9yaWdpbmFsIHNlYXJjaCByYW5n
ZS4KLSAgICBpbnQgc3RhcnRPZmZzZXQgPSAwOwotICAgIHdoaWxlIChzdGFydE9mZnNldCA8IHNl
YXJjaFJhbmdlRW5kT2Zmc2V0KSB7Ci0gICAgICAgIFZlY3RvcjxHcmFtbWFyRGV0YWlsPiBncmFt
bWFyRGV0YWlsczsKLSAgICAgICAgaW50IGJhZEdyYW1tYXJQaHJhc2VMb2NhdGlvbiA9IC0xOwot
ICAgICAgICBpbnQgYmFkR3JhbW1hclBocmFzZUxlbmd0aCA9IDA7Ci0gICAgICAgIGNsaWVudC0+
Y2hlY2tHcmFtbWFyT2ZTdHJpbmcocGFyYWdyYXBoU3RyaW5nLmNoYXJhY3RlcnMoKSArIHN0YXJ0
T2Zmc2V0LCBwYXJhZ3JhcGhTdHJpbmcubGVuZ3RoKCkgLSBzdGFydE9mZnNldCwgZ3JhbW1hckRl
dGFpbHMsICZiYWRHcmFtbWFyUGhyYXNlTG9jYXRpb24sICZiYWRHcmFtbWFyUGhyYXNlTGVuZ3Ro
KTsKLSAgICAgICAgCi0gICAgICAgIGlmICghYmFkR3JhbW1hclBocmFzZUxlbmd0aCkgewotICAg
ICAgICAgICAgQVNTRVJUKGJhZEdyYW1tYXJQaHJhc2VMb2NhdGlvbiA9PSAtMSk7Ci0gICAgICAg
ICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBBU1NFUlQoYmFkR3Jh
bW1hclBocmFzZUxvY2F0aW9uID49IDApOwotICAgICAgICBiYWRHcmFtbWFyUGhyYXNlTG9jYXRp
b24gKz0gc3RhcnRPZmZzZXQ7Ci0KLSAgICAgICAgCi0gICAgICAgIC8vIEZvdW5kIHNvbWUgYmFk
IGdyYW1tYXIuIEZpbmQgdGhlIGVhcmxpZXN0IGRldGFpbCByYW5nZSB0aGF0IHN0YXJ0cyBpbiBv
dXIgc2VhcmNoIHJhbmdlIChpZiBhbnkpLgotICAgICAgICBpbnQgYmFkR3JhbW1hckluZGV4ID0g
ZmluZEZpcnN0R3JhbW1hckRldGFpbEluUmFuZ2UoZ3JhbW1hckRldGFpbHMsIGJhZEdyYW1tYXJQ
aHJhc2VMb2NhdGlvbiwgYmFkR3JhbW1hclBocmFzZUxlbmd0aCwgc2VhcmNoUmFuZ2UsIHNlYXJj
aFJhbmdlU3RhcnRPZmZzZXQsIHNlYXJjaFJhbmdlRW5kT2Zmc2V0LCBtYXJrQWxsKTsKLSAgICAg
ICAgaWYgKGJhZEdyYW1tYXJJbmRleCA+PSAwKSB7Ci0gICAgICAgICAgICBBU1NFUlQoc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KGJhZEdyYW1tYXJJbmRleCkgPCBncmFtbWFyRGV0YWlscy5zaXplKCkp
OwotICAgICAgICAgICAgb3V0R3JhbW1hckRldGFpbCA9IGdyYW1tYXJEZXRhaWxzW2JhZEdyYW1t
YXJJbmRleF07Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBJZiB3ZSBmb3VuZCBhIGRldGFpbCBp
biByYW5nZSwgdGhlbiB3ZSBoYXZlIGZvdW5kIHRoZSBmaXJzdCBiYWQgcGhyYXNlICh1bmxlc3Mg
d2UgZm91bmQgb25lIGVhcmxpZXIgYnV0Ci0gICAgICAgIC8vIGtlcHQgZ29pbmcgc28gd2UgY291
bGQgbWFyayBhbGwgaW5zdGFuY2VzKS4KLSAgICAgICAgaWYgKGJhZEdyYW1tYXJJbmRleCA+PSAw
ICYmIGZpcnN0QmFkR3JhbW1hclBocmFzZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIG91dEdy
YW1tYXJQaHJhc2VPZmZzZXQgPSBiYWRHcmFtbWFyUGhyYXNlTG9jYXRpb24gLSBzZWFyY2hSYW5n
ZVN0YXJ0T2Zmc2V0OwotICAgICAgICAgICAgZmlyc3RCYWRHcmFtbWFyUGhyYXNlID0gcGFyYWdy
YXBoU3RyaW5nLnN1YnN0cmluZyhiYWRHcmFtbWFyUGhyYXNlTG9jYXRpb24sIGJhZEdyYW1tYXJQ
aHJhc2VMZW5ndGgpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBGb3VuZCBvbmUuIFdl
J3JlIGRvbmUgbm93LCB1bmxlc3Mgd2UncmUgbWFya2luZyBlYWNoIGluc3RhbmNlLgotICAgICAg
ICAgICAgaWYgKCFtYXJrQWxsKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0K
LSAgICAgICAgLy8gVGhlc2UgcmVzdWx0cyB3ZXJlIGFsbCBiZXR3ZWVuIHRoZSBzdGFydCBvZiB0
aGUgcGFyYWdyYXBoIGFuZCB0aGUgc3RhcnQgb2YgdGhlIHNlYXJjaCByYW5nZTsgbG9vawotICAg
ICAgICAvLyBiZXlvbmQgdGhpcyBwaHJhc2UuCi0gICAgICAgIHN0YXJ0T2Zmc2V0ID0gYmFkR3Jh
bW1hclBocmFzZUxvY2F0aW9uICsgYmFkR3JhbW1hclBocmFzZUxlbmd0aDsKLSAgICB9Ci0gICAg
Ci0gICAgcmV0dXJuIGZpcnN0QmFkR3JhbW1hclBocmFzZTsKLX0KLSAgICAKLSNlbmRpZiAvKiBu
b3QgQlVJTERJTkdfT05fVElHRVIgKi8KLQotI2lmIFBMQVRGT1JNKE1BQykgJiYgIWRlZmluZWQo
QlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpCi0KLXN0
YXRpYyBTdHJpbmcgZmluZEZpcnN0TWlzc3BlbGxpbmdPckJhZEdyYW1tYXJJblJhbmdlKEVkaXRv
ckNsaWVudCogY2xpZW50LCBSYW5nZSogc2VhcmNoUmFuZ2UsIGJvb2wgY2hlY2tHcmFtbWFyLCBi
b29sJiBvdXRJc1NwZWxsaW5nLCBpbnQmIG91dEZpcnN0Rm91bmRPZmZzZXQsIEdyYW1tYXJEZXRh
aWwmIG91dEdyYW1tYXJEZXRhaWwpCi17Ci0gICAgQVNTRVJUX0FSRyhjbGllbnQsIGNsaWVudCk7
Ci0gICAgQVNTRVJUX0FSRyhzZWFyY2hSYW5nZSwgc2VhcmNoUmFuZ2UpOwotICAgIAotICAgIFN0
cmluZyBmaXJzdEZvdW5kSXRlbTsKLSAgICBTdHJpbmcgbWlzc3BlbGxlZFdvcmQ7Ci0gICAgU3Ry
aW5nIGJhZEdyYW1tYXJQaHJhc2U7Ci0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgCi0g
ICAgLy8gSW5pdGlhbGl6ZSBvdXQgcGFyYW1ldGVyczsgdGhlc2Ugd2lsbCBiZSB1cGRhdGVkIGlm
IHdlIGZpbmQgc29tZXRoaW5nIHRvIHJldHVybi4KLSAgICBvdXRJc1NwZWxsaW5nID0gdHJ1ZTsK
LSAgICBvdXRGaXJzdEZvdW5kT2Zmc2V0ID0gMDsKLSAgICBvdXRHcmFtbWFyRGV0YWlsLmxvY2F0
aW9uID0gLTE7Ci0gICAgb3V0R3JhbW1hckRldGFpbC5sZW5ndGggPSAwOwotICAgIG91dEdyYW1t
YXJEZXRhaWwuZ3Vlc3Nlcy5jbGVhcigpOwotICAgIG91dEdyYW1tYXJEZXRhaWwudXNlckRlc2Ny
aXB0aW9uID0gIiI7Ci0gICAgCi0gICAgLy8gRXhwYW5kIHRoZSBzZWFyY2ggcmFuZ2UgdG8gZW5j
b21wYXNzIGVudGlyZSBwYXJhZ3JhcGhzLCBzaW5jZSB0ZXh0IGNoZWNraW5nIG5lZWRzIHRoYXQg
bXVjaCBjb250ZXh0LgotICAgIC8vIERldGVybWluZSB0aGUgY2hhcmFjdGVyIG9mZnNldCBmcm9t
IHRoZSBzdGFydCBvZiB0aGUgcGFyYWdyYXBoIHRvIHRoZSBzdGFydCBvZiB0aGUgb3JpZ2luYWwg
c2VhcmNoIHJhbmdlLAotICAgIC8vIHNpbmNlIHdlIHdpbGwgd2FudCB0byBpZ25vcmUgcmVzdWx0
cyBpbiB0aGlzIGFyZWEuCi0gICAgUmVmUHRyPFJhbmdlPiBwYXJhZ3JhcGhSYW5nZSA9IHNlYXJj
aFJhbmdlLT5jbG9uZVJhbmdlKGVjKTsKLSAgICBzZXRTdGFydChwYXJhZ3JhcGhSYW5nZS5nZXQo
KSwgc3RhcnRPZlBhcmFncmFwaChzZWFyY2hSYW5nZS0+c3RhcnRQb3NpdGlvbigpKSk7Ci0gICAg
aW50IHRvdGFsUmFuZ2VMZW5ndGggPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKHBhcmFncmFw
aFJhbmdlLmdldCgpKTsKLSAgICBzZXRFbmQocGFyYWdyYXBoUmFuZ2UuZ2V0KCksIGVuZE9mUGFy
YWdyYXBoKHNlYXJjaFJhbmdlLT5zdGFydFBvc2l0aW9uKCkpKTsKLSAgICAKLSAgICBSZWZQdHI8
UmFuZ2U+IG9mZnNldEFzUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKHBhcmFncmFwaFJhbmdlLT5zdGFy
dENvbnRhaW5lcihlYyktPmRvY3VtZW50KCksIHBhcmFncmFwaFJhbmdlLT5zdGFydFBvc2l0aW9u
KCksIHNlYXJjaFJhbmdlLT5zdGFydFBvc2l0aW9uKCkpOwotICAgIGludCBzZWFyY2hSYW5nZVN0
YXJ0T2Zmc2V0ID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChvZmZzZXRBc1JhbmdlLmdldCgp
KTsKLSAgICBpbnQgdG90YWxMZW5ndGhQcm9jZXNzZWQgPSAwOwotICAgIAotICAgIGJvb2wgZmly
c3RJdGVyYXRpb24gPSB0cnVlOwotICAgIGJvb2wgbGFzdEl0ZXJhdGlvbiA9IGZhbHNlOwotICAg
IHdoaWxlICh0b3RhbExlbmd0aFByb2Nlc3NlZCA8IHRvdGFsUmFuZ2VMZW5ndGgpIHsKLSAgICAg
ICAgLy8gSXRlcmF0ZSB0aHJvdWdoIHRoZSBzZWFyY2ggcmFuZ2UgYnkgcGFyYWdyYXBocywgY2hl
Y2tpbmcgZWFjaCBvbmUgZm9yIHNwZWxsaW5nIGFuZCBncmFtbWFyLgotICAgICAgICBpbnQgY3Vy
cmVudExlbmd0aCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgocGFyYWdyYXBoUmFuZ2UuZ2V0
KCkpOwotICAgICAgICBpbnQgY3VycmVudFN0YXJ0T2Zmc2V0ID0gZmlyc3RJdGVyYXRpb24gPyBz
ZWFyY2hSYW5nZVN0YXJ0T2Zmc2V0IDogMDsKLSAgICAgICAgaW50IGN1cnJlbnRFbmRPZmZzZXQg
PSBjdXJyZW50TGVuZ3RoOwotICAgICAgICBpZiAoaW5TYW1lUGFyYWdyYXBoKHBhcmFncmFwaFJh
bmdlLT5zdGFydFBvc2l0aW9uKCksIHNlYXJjaFJhbmdlLT5lbmRQb3NpdGlvbigpKSkgewotICAg
ICAgICAgICAgLy8gRGV0ZXJtaW5lIHRoZSBjaGFyYWN0ZXIgb2Zmc2V0IGZyb20gdGhlIGVuZCBv
ZiB0aGUgb3JpZ2luYWwgc2VhcmNoIHJhbmdlIHRvIHRoZSBlbmQgb2YgdGhlIHBhcmFncmFwaCwK
LSAgICAgICAgICAgIC8vIHNpbmNlIHdlIHdpbGwgd2FudCB0byBpZ25vcmUgcmVzdWx0cyBpbiB0
aGlzIGFyZWEuCi0gICAgICAgICAgICBSZWZQdHI8UmFuZ2U+IGVuZE9mZnNldEFzUmFuZ2UgPSBS
YW5nZTo6Y3JlYXRlKHBhcmFncmFwaFJhbmdlLT5zdGFydENvbnRhaW5lcihlYyktPmRvY3VtZW50
KCksIHBhcmFncmFwaFJhbmdlLT5zdGFydFBvc2l0aW9uKCksIHNlYXJjaFJhbmdlLT5lbmRQb3Np
dGlvbigpKTsKLSAgICAgICAgICAgIGN1cnJlbnRFbmRPZmZzZXQgPSBUZXh0SXRlcmF0b3I6OnJh
bmdlTGVuZ3RoKGVuZE9mZnNldEFzUmFuZ2UuZ2V0KCkpOwotICAgICAgICAgICAgbGFzdEl0ZXJh
dGlvbiA9IHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGN1cnJlbnRTdGFydE9mZnNldCA8
IGN1cnJlbnRFbmRPZmZzZXQpIHsKLSAgICAgICAgICAgIFN0cmluZyBwYXJhZ3JhcGhTdHJpbmcg
PSBwbGFpblRleHQocGFyYWdyYXBoUmFuZ2UuZ2V0KCkpOwotICAgICAgICAgICAgaWYgKHBhcmFn
cmFwaFN0cmluZy5sZW5ndGgoKSA+IDApIHsKLSAgICAgICAgICAgICAgICBib29sIGZvdW5kR3Jh
bW1hciA9IGZhbHNlOwotICAgICAgICAgICAgICAgIGludCBzcGVsbGluZ0xvY2F0aW9uID0gMDsK
LSAgICAgICAgICAgICAgICBpbnQgZ3JhbW1hclBocmFzZUxvY2F0aW9uID0gMDsKLSAgICAgICAg
ICAgICAgICBpbnQgZ3JhbW1hckRldGFpbExvY2F0aW9uID0gMDsKLSAgICAgICAgICAgICAgICB1
bnNpZ25lZCBncmFtbWFyRGV0YWlsSW5kZXggPSAwOwotICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgICAgIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IHJlc3VsdHM7Ci0gICAgICAgICAg
ICAgICAgdWludDY0X3QgY2hlY2tpbmdUeXBlcyA9IGNoZWNrR3JhbW1hciA/IChUZXh0Q2hlY2tp
bmdUeXBlU3BlbGxpbmcgfCBUZXh0Q2hlY2tpbmdUeXBlR3JhbW1hcikgOiBUZXh0Q2hlY2tpbmdU
eXBlU3BlbGxpbmc7Ci0gICAgICAgICAgICAgICAgY2xpZW50LT5jaGVja1RleHRPZlBhcmFncmFw
aChwYXJhZ3JhcGhTdHJpbmcuY2hhcmFjdGVycygpLCBwYXJhZ3JhcGhTdHJpbmcubGVuZ3RoKCks
IGNoZWNraW5nVHlwZXMsIHJlc3VsdHMpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZXN1bHRzLnNpemUoKTsgaSsrKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFRleHRDaGVja2luZ1Jlc3VsdCogcmVzdWx0ID0gJnJlc3Vs
dHNbaV07Ci0gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQtPnR5cGUgPT0gVGV4dENoZWNr
aW5nVHlwZVNwZWxsaW5nICYmIHJlc3VsdC0+bG9jYXRpb24gPj0gY3VycmVudFN0YXJ0T2Zmc2V0
ICYmIHJlc3VsdC0+bG9jYXRpb24gKyByZXN1bHQtPmxlbmd0aCA8PSBjdXJyZW50RW5kT2Zmc2V0
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQocmVzdWx0LT5sZW5ndGggPiAwICYm
IHJlc3VsdC0+bG9jYXRpb24gPj0gMCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzcGVsbGlu
Z0xvY2F0aW9uID0gcmVzdWx0LT5sb2NhdGlvbjsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1p
c3NwZWxsZWRXb3JkID0gcGFyYWdyYXBoU3RyaW5nLnN1YnN0cmluZyhyZXN1bHQtPmxvY2F0aW9u
LCByZXN1bHQtPmxlbmd0aCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQobWlzc3Bl
bGxlZFdvcmQubGVuZ3RoKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGNoZWNrR3JhbW1hciAm
JiByZXN1bHQtPnR5cGUgPT0gVGV4dENoZWNraW5nVHlwZUdyYW1tYXIgJiYgcmVzdWx0LT5sb2Nh
dGlvbiA8IGN1cnJlbnRFbmRPZmZzZXQgJiYgcmVzdWx0LT5sb2NhdGlvbiArIHJlc3VsdC0+bGVu
Z3RoID4gY3VycmVudFN0YXJ0T2Zmc2V0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBBU1NF
UlQocmVzdWx0LT5sZW5ndGggPiAwICYmIHJlc3VsdC0+bG9jYXRpb24gPj0gMCk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAvLyBXZSBjYW4ndCBzdG9wIGFmdGVyIHRoZSBmaXJzdCBncmFtbWFy
IHJlc3VsdCwgc2luY2UgdGhlcmUgbWlnaHQgc3RpbGwgYmUgYSBzcGVsbGluZyByZXN1bHQgYWZ0
ZXIKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGl0IGJlZ2lucyBidXQgYmVmb3JlIHRoZSBm
aXJzdCBkZXRhaWwgaW4gaXQsIGJ1dCB3ZSBjYW4gc3RvcCBpZiB3ZSBmaW5kIGEgc2Vjb25kIGdy
YW1tYXIgcmVzdWx0LgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvdW5kR3JhbW1hcikK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCByZXN1bHQtPmRldGFpbHMuc2l6ZSgpOyBqKysp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBHcmFtbWFyRGV0YWlsKiBkZXRh
aWwgPSAmcmVzdWx0LT5kZXRhaWxzW2pdOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFT
U0VSVChkZXRhaWwtPmxlbmd0aCA+IDAgJiYgZGV0YWlsLT5sb2NhdGlvbiA+PSAwKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LT5sb2NhdGlvbiArIGRldGFpbC0+bG9j
YXRpb24gPj0gY3VycmVudFN0YXJ0T2Zmc2V0ICYmIHJlc3VsdC0+bG9jYXRpb24gKyBkZXRhaWwt
PmxvY2F0aW9uICsgZGV0YWlsLT5sZW5ndGggPD0gY3VycmVudEVuZE9mZnNldCAmJiAoIWZvdW5k
R3JhbW1hciB8fCByZXN1bHQtPmxvY2F0aW9uICsgZGV0YWlsLT5sb2NhdGlvbiA8IGdyYW1tYXJE
ZXRhaWxMb2NhdGlvbikpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JhbW1h
ckRldGFpbEluZGV4ID0gajsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JhbW1h
ckRldGFpbExvY2F0aW9uID0gcmVzdWx0LT5sb2NhdGlvbiArIGRldGFpbC0+bG9jYXRpb247Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kR3JhbW1hciA9IHRydWU7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKGZvdW5kR3JhbW1hcikgewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdyYW1tYXJQaHJhc2VMb2NhdGlvbiA9IHJlc3VsdC0+bG9jYXRpb247Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0R3JhbW1hckRldGFpbCA9IHJlc3VsdC0+ZGV0
YWlsc1tncmFtbWFyRGV0YWlsSW5kZXhdOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJh
ZEdyYW1tYXJQaHJhc2UgPSBwYXJhZ3JhcGhTdHJpbmcuc3Vic3RyaW5nKHJlc3VsdC0+bG9jYXRp
b24sIHJlc3VsdC0+bGVuZ3RoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQo
YmFkR3JhbW1hclBocmFzZS5sZW5ndGgoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAg
ICBpZiAoIW1pc3NwZWxsZWRXb3JkLmlzRW1wdHkoKSAmJiAoIWNoZWNrR3JhbW1hciB8fCBiYWRH
cmFtbWFyUGhyYXNlLmlzRW1wdHkoKSB8fCBzcGVsbGluZ0xvY2F0aW9uIDw9IGdyYW1tYXJEZXRh
aWxMb2NhdGlvbikpIHsKLSAgICAgICAgICAgICAgICAgICAgaW50IHNwZWxsaW5nT2Zmc2V0ID0g
c3BlbGxpbmdMb2NhdGlvbiAtIGN1cnJlbnRTdGFydE9mZnNldDsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKCFmaXJzdEl0ZXJhdGlvbikgewotICAgICAgICAgICAgICAgICAgICAgICAgUmVmUHRy
PFJhbmdlPiBwYXJhZ3JhcGhPZmZzZXRBc1JhbmdlID0gUmFuZ2U6OmNyZWF0ZShwYXJhZ3JhcGhS
YW5nZS0+c3RhcnRDb250YWluZXIoZWMpLT5kb2N1bWVudCgpLCBzZWFyY2hSYW5nZS0+c3RhcnRQ
b3NpdGlvbigpLCBwYXJhZ3JhcGhSYW5nZS0+c3RhcnRQb3NpdGlvbigpKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHNwZWxsaW5nT2Zmc2V0ICs9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgo
cGFyYWdyYXBoT2Zmc2V0QXNSYW5nZS5nZXQoKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgb3V0SXNTcGVsbGluZyA9IHRydWU7Ci0gICAgICAgICAgICAgICAg
ICAgIG91dEZpcnN0Rm91bmRPZmZzZXQgPSBzcGVsbGluZ09mZnNldDsKLSAgICAgICAgICAgICAg
ICAgICAgZmlyc3RGb3VuZEl0ZW0gPSBtaXNzcGVsbGVkV29yZDsKLSAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChjaGVja0dy
YW1tYXIgJiYgIWJhZEdyYW1tYXJQaHJhc2UuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGludCBncmFtbWFyUGhyYXNlT2Zmc2V0ID0gZ3JhbW1hclBocmFzZUxvY2F0aW9uIC0gY3Vy
cmVudFN0YXJ0T2Zmc2V0OwotICAgICAgICAgICAgICAgICAgICBpZiAoIWZpcnN0SXRlcmF0aW9u
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBSZWZQdHI8UmFuZ2U+IHBhcmFncmFwaE9mZnNl
dEFzUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKHBhcmFncmFwaFJhbmdlLT5zdGFydENvbnRhaW5lcihl
YyktPmRvY3VtZW50KCksIHNlYXJjaFJhbmdlLT5zdGFydFBvc2l0aW9uKCksIHBhcmFncmFwaFJh
bmdlLT5zdGFydFBvc2l0aW9uKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgZ3JhbW1hclBo
cmFzZU9mZnNldCArPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKHBhcmFncmFwaE9mZnNldEFz
UmFuZ2UuZ2V0KCkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
IG91dElzU3BlbGxpbmcgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgb3V0Rmlyc3RGb3Vu
ZE9mZnNldCA9IGdyYW1tYXJQaHJhc2VPZmZzZXQ7Ci0gICAgICAgICAgICAgICAgICAgIGZpcnN0
Rm91bmRJdGVtID0gYmFkR3JhbW1hclBocmFzZTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlm
IChsYXN0SXRlcmF0aW9uIHx8IHRvdGFsTGVuZ3RoUHJvY2Vzc2VkICsgY3VycmVudExlbmd0aCA+
PSB0b3RhbFJhbmdlTGVuZ3RoKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIFZpc2libGVQ
b3NpdGlvbiBuZXdQYXJhZ3JhcGhTdGFydCA9IHN0YXJ0T2ZOZXh0UGFyYWdyYXBoKHBhcmFncmFw
aFJhbmdlLT5lbmRQb3NpdGlvbigpKTsKLSAgICAgICAgc2V0U3RhcnQocGFyYWdyYXBoUmFuZ2Uu
Z2V0KCksIG5ld1BhcmFncmFwaFN0YXJ0KTsKLSAgICAgICAgc2V0RW5kKHBhcmFncmFwaFJhbmdl
LmdldCgpLCBlbmRPZlBhcmFncmFwaChuZXdQYXJhZ3JhcGhTdGFydCkpOwotICAgICAgICBmaXJz
dEl0ZXJhdGlvbiA9IGZhbHNlOwotICAgICAgICB0b3RhbExlbmd0aFByb2Nlc3NlZCArPSBjdXJy
ZW50TGVuZ3RoOwotICAgIH0KLSAgICByZXR1cm4gZmlyc3RGb3VuZEl0ZW07Ci19Ci0KLSNlbmRp
ZgotCiB2b2lkIEVkaXRvcjo6YWR2YW5jZVRvTmV4dE1pc3NwZWxsaW5nKGJvb2wgc3RhcnRCZWZv
cmVTZWxlY3Rpb24pCiB7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CkBAIC0xOTkyLDYgKzE2
NzEsNyBAQCB2b2lkIEVkaXRvcjo6YWR2YW5jZVRvTmV4dE1pc3NwZWxsaW5nKGJvb2wgc3RhcnRC
ZWZvcmVTZWxlY3Rpb24pCiAgICAgLy8gcmVwZWF0ZWQgImNoZWNrIHNwZWxsaW5nIiBjb21tYW5k
cyB3b3JrLgogICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uKGZyYW1lKCktPnNlbGVjdGlv
bigpLT5zZWxlY3Rpb24oKSk7CiAgICAgUmVmUHRyPFJhbmdlPiBzcGVsbGluZ1NlYXJjaFJhbmdl
KHJhbmdlT2ZDb250ZW50cyhmcmFtZSgpLT5kb2N1bWVudCgpKSk7CisKICAgICBib29sIHN0YXJ0
ZWRXaXRoU2VsZWN0aW9uID0gZmFsc2U7CiAgICAgaWYgKHNlbGVjdGlvbi5zdGFydCgpLm5vZGUo
KSkgewogICAgICAgICBzdGFydGVkV2l0aFNlbGVjdGlvbiA9IHRydWU7CkBAIC0yMDU3LDcgKzE3
MzcsNyBAQCB2b2lkIEVkaXRvcjo6YWR2YW5jZVRvTmV4dE1pc3NwZWxsaW5nKGJvb2wgc3RhcnRC
ZWZvcmVTZWxlY3Rpb24pCiAgICAgYm9vbCBpc1NwZWxsaW5nID0gdHJ1ZTsKICAgICBpbnQgZm91
bmRPZmZzZXQgPSAwOwogICAgIEdyYW1tYXJEZXRhaWwgZ3JhbW1hckRldGFpbDsKLSAgICBTdHJp
bmcgZm91bmRJdGVtID0gZmluZEZpcnN0TWlzc3BlbGxpbmdPckJhZEdyYW1tYXJJblJhbmdlKGNs
aWVudCgpLCBzcGVsbGluZ1NlYXJjaFJhbmdlLmdldCgpLCBpc0dyYW1tYXJDaGVja2luZ0VuYWJs
ZWQoKSwgaXNTcGVsbGluZywgZm91bmRPZmZzZXQsIGdyYW1tYXJEZXRhaWwpOworICAgIFN0cmlu
ZyBmb3VuZEl0ZW0gPSBUZXh0Q2hlY2tpbmdIZWxwZXIoY2xpZW50KCksIHNwZWxsaW5nU2VhcmNo
UmFuZ2UpLmZpbmRGaXJzdE1pc3NwZWxsaW5nT3JCYWRHcmFtbWFyKGlzR3JhbW1hckNoZWNraW5n
RW5hYmxlZCgpLCBpc1NwZWxsaW5nLCBmb3VuZE9mZnNldCwgZ3JhbW1hckRldGFpbCk7CiAgICAg
aWYgKGlzU3BlbGxpbmcpIHsKICAgICAgICAgbWlzc3BlbGxlZFdvcmQgPSBmb3VuZEl0ZW07CiAg
ICAgICAgIG1pc3NwZWxsaW5nT2Zmc2V0ID0gZm91bmRPZmZzZXQ7CkBAIC0yMDY3LDcgKzE3NDcs
NyBAQCB2b2lkIEVkaXRvcjo6YWR2YW5jZVRvTmV4dE1pc3NwZWxsaW5nKGJvb2wgc3RhcnRCZWZv
cmVTZWxlY3Rpb24pCiAgICAgfQogI2Vsc2UKICAgICBSZWZQdHI8UmFuZ2U+IGZpcnN0TWlzc3Bl
bGxpbmdSYW5nZTsKLSAgICBTdHJpbmcgbWlzc3BlbGxlZFdvcmQgPSBmaW5kRmlyc3RNaXNzcGVs
bGluZ0luUmFuZ2UoY2xpZW50KCksIHNwZWxsaW5nU2VhcmNoUmFuZ2UuZ2V0KCksIG1pc3NwZWxs
aW5nT2Zmc2V0LCBmYWxzZSwgZmlyc3RNaXNzcGVsbGluZ1JhbmdlKTsKKyAgICBTdHJpbmcgbWlz
c3BlbGxlZFdvcmQgPSBUZXh0Q2hlY2tpbmdIZWxwZXIoY2xpZW50KCksIHNwZWxsaW5nU2VhcmNo
UmFuZ2UpLmZpbmRGaXJzdE1pc3NwZWxsaW5nKG1pc3NwZWxsaW5nT2Zmc2V0LCBmYWxzZSwgZmly
c3RNaXNzcGVsbGluZ1JhbmdlKTsKICAgICBTdHJpbmcgYmFkR3JhbW1hclBocmFzZTsKIAogI2lm
bmRlZiBCVUlMRElOR19PTl9USUdFUgpAQCAtMjA4NCw3ICsxNzY0LDcgQEAgdm9pZCBFZGl0b3I6
OmFkdmFuY2VUb05leHRNaXNzcGVsbGluZyhib29sIHN0YXJ0QmVmb3JlU2VsZWN0aW9uKQogICAg
IH0KICAgICAKICAgICBpZiAoaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKCkpCi0gICAgICAgIGJh
ZEdyYW1tYXJQaHJhc2UgPSBmaW5kRmlyc3RCYWRHcmFtbWFySW5SYW5nZShjbGllbnQoKSwgZ3Jh
bW1hclNlYXJjaFJhbmdlLmdldCgpLCBncmFtbWFyRGV0YWlsLCBncmFtbWFyUGhyYXNlT2Zmc2V0
LCBmYWxzZSk7CisgICAgICAgIGJhZEdyYW1tYXJQaHJhc2UgPSBUZXh0Q2hlY2tpbmdIZWxwZXIo
Y2xpZW50KCksIGdyYW1tYXJTZWFyY2hSYW5nZSkuZmluZEZpcnN0QmFkR3JhbW1hcihncmFtbWFy
RGV0YWlsLCBncmFtbWFyUGhyYXNlT2Zmc2V0LCBmYWxzZSk7CiAjZW5kaWYKICNlbmRpZgogICAg
IApAQCAtMjA5Nyw3ICsxNzc3LDcgQEAgdm9pZCBFZGl0b3I6OmFkdmFuY2VUb05leHRNaXNzcGVs
bGluZyhib29sIHN0YXJ0QmVmb3JlU2VsZWN0aW9uKQogICAgICAgICAKICNpZiBQTEFURk9STShN
QUMpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19P
Tl9MRU9QQVJEKQogICAgICAgICBncmFtbWFyU2VhcmNoUmFuZ2UgPSBzcGVsbGluZ1NlYXJjaFJh
bmdlLT5jbG9uZVJhbmdlKGVjKTsKLSAgICAgICAgZm91bmRJdGVtID0gZmluZEZpcnN0TWlzc3Bl
bGxpbmdPckJhZEdyYW1tYXJJblJhbmdlKGNsaWVudCgpLCBzcGVsbGluZ1NlYXJjaFJhbmdlLmdl
dCgpLCBpc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQoKSwgaXNTcGVsbGluZywgZm91bmRPZmZzZXQs
IGdyYW1tYXJEZXRhaWwpOworICAgICAgICBmb3VuZEl0ZW0gPSBUZXh0Q2hlY2tpbmdIZWxwZXIo
Y2xpZW50KCksIHNwZWxsaW5nU2VhcmNoUmFuZ2UpLmZpbmRGaXJzdE1pc3NwZWxsaW5nT3JCYWRH
cmFtbWFyKGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCgpLCBpc1NwZWxsaW5nLCBmb3VuZE9mZnNl
dCwgZ3JhbW1hckRldGFpbCk7CiAgICAgICAgIGlmIChpc1NwZWxsaW5nKSB7CiAgICAgICAgICAg
ICBtaXNzcGVsbGVkV29yZCA9IGZvdW5kSXRlbTsKICAgICAgICAgICAgIG1pc3NwZWxsaW5nT2Zm
c2V0ID0gZm91bmRPZmZzZXQ7CkBAIC0yMTA2LDcgKzE3ODYsNyBAQCB2b2lkIEVkaXRvcjo6YWR2
YW5jZVRvTmV4dE1pc3NwZWxsaW5nKGJvb2wgc3RhcnRCZWZvcmVTZWxlY3Rpb24pCiAgICAgICAg
ICAgICBncmFtbWFyUGhyYXNlT2Zmc2V0ID0gZm91bmRPZmZzZXQ7CiAgICAgICAgIH0KICNlbHNl
Ci0gICAgICAgIG1pc3NwZWxsZWRXb3JkID0gZmluZEZpcnN0TWlzc3BlbGxpbmdJblJhbmdlKGNs
aWVudCgpLCBzcGVsbGluZ1NlYXJjaFJhbmdlLmdldCgpLCBtaXNzcGVsbGluZ09mZnNldCwgZmFs
c2UsIGZpcnN0TWlzc3BlbGxpbmdSYW5nZSk7CisgICAgICAgIG1pc3NwZWxsZWRXb3JkID0gVGV4
dENoZWNraW5nSGVscGVyKGNsaWVudCgpLCBzcGVsbGluZ1NlYXJjaFJhbmdlKS5maW5kRmlyc3RN
aXNzcGVsbGluZyhtaXNzcGVsbGluZ09mZnNldCwgZmFsc2UsIGZpcnN0TWlzc3BlbGxpbmdSYW5n
ZSk7CiAKICNpZm5kZWYgQlVJTERJTkdfT05fVElHRVIKICAgICAgICAgZ3JhbW1hclNlYXJjaFJh
bmdlID0gc3BlbGxpbmdTZWFyY2hSYW5nZS0+Y2xvbmVSYW5nZShlYyk7CkBAIC0yMTE2LDggKzE3
OTYsOSBAQCB2b2lkIEVkaXRvcjo6YWR2YW5jZVRvTmV4dE1pc3NwZWxsaW5nKGJvb2wgc3RhcnRC
ZWZvcmVTZWxlY3Rpb24pCiAgICAgICAgICAgICBjaGFycy5hZHZhbmNlKG1pc3NwZWxsaW5nT2Zm
c2V0KTsKICAgICAgICAgICAgIGdyYW1tYXJTZWFyY2hSYW5nZS0+c2V0RW5kKGNoYXJzLnJhbmdl
KCktPnN0YXJ0Q29udGFpbmVyKGVjKSwgY2hhcnMucmFuZ2UoKS0+c3RhcnRPZmZzZXQoZWMpLCBl
Yyk7CiAgICAgICAgIH0KKwogICAgICAgICBpZiAoaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKCkp
Ci0gICAgICAgICAgICBiYWRHcmFtbWFyUGhyYXNlID0gZmluZEZpcnN0QmFkR3JhbW1hckluUmFu
Z2UoY2xpZW50KCksIGdyYW1tYXJTZWFyY2hSYW5nZS5nZXQoKSwgZ3JhbW1hckRldGFpbCwgZ3Jh
bW1hclBocmFzZU9mZnNldCwgZmFsc2UpOworICAgICAgICAgICAgYmFkR3JhbW1hclBocmFzZSA9
IFRleHRDaGVja2luZ0hlbHBlcihjbGllbnQoKSwgZ3JhbW1hclNlYXJjaFJhbmdlKS5maW5kRmly
c3RCYWRHcmFtbWFyKGdyYW1tYXJEZXRhaWwsIGdyYW1tYXJQaHJhc2VPZmZzZXQsIGZhbHNlKTsK
ICNlbmRpZgogI2VuZGlmCiAgICAgfQpAQCAtMjE4MSw2MCArMTg2MiwxMyBAQCBib29sIEVkaXRv
cjo6aXNTZWxlY3Rpb25NaXNzcGVsbGVkKCkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotI2lmbmRl
ZiBCVUlMRElOR19PTl9USUdFUgotc3RhdGljIGJvb2wgaXNSYW5nZVVuZ3JhbW1hdGljYWwoRWRp
dG9yQ2xpZW50KiBjbGllbnQsIFJhbmdlICpyYW5nZSwgVmVjdG9yPFN0cmluZz4mIGd1ZXNzZXNW
ZWN0b3IpCi17Ci0gICAgaWYgKCFjbGllbnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IEV4Y2VwdGlvbkNvZGUgZWM7Ci0gICAgaWYgKCFyYW5nZSB8fCByYW5nZS0+Y29sbGFwc2VkKGVj
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIC8vIFJldHVybnMgdHJ1ZSBvbmx5
IGlmIHRoZSBwYXNzZWQgcmFuZ2UgZXhhY3RseSBjb3JyZXNwb25kcyB0byBhIGJhZCBncmFtbWFy
IGRldGFpbCByYW5nZS4gVGhpcyBpcyBhbmFsb2dvdXMKLSAgICAvLyB0byBpc1NlbGVjdGlvbk1p
c3NwZWxsZWQuIEl0J3Mgbm90IGdvb2QgZW5vdWdoIGZvciB0aGVyZSB0byBiZSBzb21lIGJhZCBn
cmFtbWFyIHNvbWV3aGVyZSBpbiB0aGUgcmFuZ2UsCi0gICAgLy8gb3Igb3ZlcmxhcHBpbmcgdGhl
IHJhbmdlOyB0aGUgcmFuZ2VzIG11c3QgZXhhY3RseSBtYXRjaC4KLSAgICBndWVzc2VzVmVjdG9y
LmNsZWFyKCk7Ci0gICAgaW50IGdyYW1tYXJQaHJhc2VPZmZzZXQ7Ci0gICAgCi0gICAgR3JhbW1h
ckRldGFpbCBncmFtbWFyRGV0YWlsOwotICAgIFN0cmluZyBiYWRHcmFtbWFyUGhyYXNlID0gZmlu
ZEZpcnN0QmFkR3JhbW1hckluUmFuZ2UoY2xpZW50LCByYW5nZSwgZ3JhbW1hckRldGFpbCwgZ3Jh
bW1hclBocmFzZU9mZnNldCwgZmFsc2UpOyAgICAKLSAgICAKLSAgICAvLyBObyBiYWQgZ3JhbW1h
ciBpbiB0aGVzZSBwYXJ0cyBhdCBhbGwuCi0gICAgaWYgKGJhZEdyYW1tYXJQaHJhc2UuaXNFbXB0
eSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgLy8gQmFkIGdyYW1tYXIsIGJ1
dCBwaHJhc2UgKGUuZy4gc2VudGVuY2UpIHN0YXJ0cyBiZXlvbmQgc3RhcnQgb2YgcmFuZ2UuCi0g
ICAgaWYgKGdyYW1tYXJQaHJhc2VPZmZzZXQgPiAwKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgCi0gICAgQVNTRVJUKGdyYW1tYXJEZXRhaWwubG9jYXRpb24gPj0gMCAmJiBncmFtbWFyRGV0
YWlsLmxlbmd0aCA+IDApOwotICAgIAotICAgIC8vIEJhZCBncmFtbWFyLCBidXQgc3RhcnQgb2Yg
ZGV0YWlsIChlLmcuIHVuZ3JhbW1hdGljYWwgd29yZCkgZG9lc24ndCBtYXRjaCBzdGFydCBvZiBy
YW5nZQotICAgIGlmIChncmFtbWFyRGV0YWlsLmxvY2F0aW9uICsgZ3JhbW1hclBocmFzZU9mZnNl
dCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIC8vIEJhZCBncmFtbWFyIGF0IHN0
YXJ0IG9mIHJhbmdlLCBidXQgZW5kIG9mIGJhZCBncmFtbWFyIGlzIGJlZm9yZSBvciBhZnRlciBl
bmQgb2YgcmFuZ2UKLSAgICBpZiAoZ3JhbW1hckRldGFpbC5sZW5ndGggIT0gVGV4dEl0ZXJhdG9y
OjpyYW5nZUxlbmd0aChyYW5nZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICAv
LyBVcGRhdGUgdGhlIHNwZWxsaW5nIHBhbmVsIHRvIGJlIGRpc3BsYXlpbmcgdGhpcyBlcnJvciAo
d2hldGhlciBvciBub3QgdGhlIHNwZWxsaW5nIHBhbmVsIGlzIG9uIHNjcmVlbikuCi0gICAgLy8g
VGhpcyBpcyBuZWNlc3NhcnkgdG8gbWFrZSBhIHN1YnNlcXVlbnQgY2FsbCB0byBbTlNTcGVsbENo
ZWNrZXIgaWdub3JlV29yZDppblNwZWxsRG9jdW1lbnRXaXRoVGFnOl0gd29yawotICAgIC8vIGNv
cnJlY3RseTsgdGhhdCBjYWxsIGJlaGF2ZXMgZGlmZmVyZW50bHkgYmFzZWQgb24gd2hldGhlciB0
aGUgc3BlbGxpbmcgcGFuZWwgaXMgZGlzcGxheWluZyBhIG1pc3NwZWxsaW5nCi0gICAgLy8gb3Ig
YSBncmFtbWFyIGVycm9yLgotICAgIGNsaWVudC0+dXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFy
U3RyaW5nKGJhZEdyYW1tYXJQaHJhc2UsIGdyYW1tYXJEZXRhaWwpOwotICAgIAotICAgIHJldHVy
biB0cnVlOwotfQotI2VuZGlmCi0KIGJvb2wgRWRpdG9yOjppc1NlbGVjdGlvblVuZ3JhbW1hdGlj
YWwoKQogewogI2lmZGVmIEJVSUxESU5HX09OX1RJR0VSCiAgICAgcmV0dXJuIGZhbHNlOwogI2Vs
c2UKICAgICBWZWN0b3I8U3RyaW5nPiBpZ25vcmVkR3Vlc3NlczsKLSAgICByZXR1cm4gaXNSYW5n
ZVVuZ3JhbW1hdGljYWwoY2xpZW50KCksIGZyYW1lKCktPnNlbGVjdGlvbigpLT50b05vcm1hbGl6
ZWRSYW5nZSgpLmdldCgpLCBpZ25vcmVkR3Vlc3Nlcyk7CisgICAgcmV0dXJuIFRleHRDaGVja2lu
Z0hlbHBlcihjbGllbnQoKSwgZnJhbWUoKS0+c2VsZWN0aW9uKCktPnRvTm9ybWFsaXplZFJhbmdl
KCkpLmlzVW5ncmFtbWF0aWNhbChpZ25vcmVkR3Vlc3Nlcyk7CiAjZW5kaWYKIH0KIApAQCAtMjI0
NCw4ICsxODc4LDggQEAgVmVjdG9yPFN0cmluZz4gRWRpdG9yOjpndWVzc2VzRm9yVW5ncmFtbWF0
aWNhbFNlbGVjdGlvbigpCiAgICAgcmV0dXJuIFZlY3RvcjxTdHJpbmc+KCk7CiAjZWxzZQogICAg
IFZlY3RvcjxTdHJpbmc+IGd1ZXNzZXM7Ci0gICAgLy8gSWdub3JlIHRoZSByZXN1bHQgb2YgaXNS
YW5nZVVuZ3JhbW1hdGljYWw7IHdlIGp1c3Qgd2FudCB0aGUgZ3Vlc3Nlcywgd2hldGhlciBvciBu
b3QgdGhlcmUgYXJlIGFueQotICAgIGlzUmFuZ2VVbmdyYW1tYXRpY2FsKGNsaWVudCgpLCBmcmFt
ZSgpLT5zZWxlY3Rpb24oKS0+dG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSwgZ3Vlc3Nlcyk7Cisg
ICAgLy8gSWdub3JlIHRoZSByZXN1bHQgb2YgaXNVbmdyYW1tYXRpY2FsOyB3ZSBqdXN0IHdhbnQg
dGhlIGd1ZXNzZXMsIHdoZXRoZXIgb3Igbm90IHRoZXJlIGFyZSBhbnkKKyAgICBUZXh0Q2hlY2tp
bmdIZWxwZXIoY2xpZW50KCksIGZyYW1lKCktPnNlbGVjdGlvbigpLT50b05vcm1hbGl6ZWRSYW5n
ZSgpKS5pc1VuZ3JhbW1hdGljYWwoZ3Vlc3Nlcyk7CiAgICAgcmV0dXJuIGd1ZXNzZXM7CiAjZW5k
aWYKIH0KQEAgLTIyNjEsNzIgKzE4OTUsMTAgQEAgVmVjdG9yPFN0cmluZz4gRWRpdG9yOjpndWVz
c2VzRm9yTWlzc3BlbGxlZFNlbGVjdGlvbigpCiAgICAgcmV0dXJuIGd1ZXNzZXM7CiB9CiAKLSNp
ZiBQTEFURk9STShNQUMpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5l
ZChCVUlMRElOR19PTl9MRU9QQVJEKQotCi1zdGF0aWMgVmVjdG9yPFN0cmluZz4gZ3Vlc3Nlc0Zv
ck1pc3NwZWxsZWRPclVuZ3JhbW1hdGljYWxSYW5nZShFZGl0b3JDbGllbnQqIGNsaWVudCwgUmFu
Z2UgKnJhbmdlLCBib29sIGNoZWNrR3JhbW1hciwgYm9vbCYgbWlzc3BlbGxlZCwgYm9vbCYgdW5n
cmFtbWF0aWNhbCkKLXsKLSAgICBWZWN0b3I8U3RyaW5nPiBndWVzc2VzOwotICAgIEV4Y2VwdGlv
bkNvZGUgZWM7Ci0gICAgbWlzc3BlbGxlZCA9IGZhbHNlOwotICAgIHVuZ3JhbW1hdGljYWwgPSBm
YWxzZTsKLSAgICAKLSAgICBpZiAoIWNsaWVudCB8fCAhcmFuZ2UgfHwgcmFuZ2UtPmNvbGxhcHNl
ZChlYykpCi0gICAgICAgIHJldHVybiBndWVzc2VzOwotCi0gICAgLy8gRXhwYW5kIHRoZSByYW5n
ZSB0byBlbmNvbXBhc3MgZW50aXJlIHBhcmFncmFwaHMsIHNpbmNlIHRleHQgY2hlY2tpbmcgbmVl
ZHMgdGhhdCBtdWNoIGNvbnRleHQuCi0gICAgaW50IHJhbmdlU3RhcnRPZmZzZXQ7Ci0gICAgU3Ry
aW5nIHBhcmFncmFwaFN0cmluZzsKLSAgICBSZWZQdHI8UmFuZ2U+IHBhcmFncmFwaFJhbmdlID0g
cGFyYWdyYXBoQWxpZ25lZFJhbmdlRm9yUmFuZ2UocmFuZ2UsIHJhbmdlU3RhcnRPZmZzZXQsIHBh
cmFncmFwaFN0cmluZyk7Ci0gICAgaW50IHJhbmdlTGVuZ3RoID0gVGV4dEl0ZXJhdG9yOjpyYW5n
ZUxlbmd0aChyYW5nZSk7Ci0gICAgaWYgKCFyYW5nZUxlbmd0aCB8fCAhcGFyYWdyYXBoU3RyaW5n
Lmxlbmd0aCgpKQotICAgICAgICByZXR1cm4gZ3Vlc3NlczsKLQotICAgIFZlY3RvcjxUZXh0Q2hl
Y2tpbmdSZXN1bHQ+IHJlc3VsdHM7Ci0gICAgdWludDY0X3QgY2hlY2tpbmdUeXBlcyA9IGNoZWNr
R3JhbW1hciA/IChUZXh0Q2hlY2tpbmdUeXBlU3BlbGxpbmcgfCBUZXh0Q2hlY2tpbmdUeXBlR3Jh
bW1hcikgOiBUZXh0Q2hlY2tpbmdUeXBlU3BlbGxpbmc7Ci0gICAgY2xpZW50LT5jaGVja1RleHRP
ZlBhcmFncmFwaChwYXJhZ3JhcGhTdHJpbmcuY2hhcmFjdGVycygpLCBwYXJhZ3JhcGhTdHJpbmcu
bGVuZ3RoKCksIGNoZWNraW5nVHlwZXMsIHJlc3VsdHMpOwotICAgIAotICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCByZXN1bHRzLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIGNvbnN0IFRleHRD
aGVja2luZ1Jlc3VsdCogcmVzdWx0ID0gJnJlc3VsdHNbaV07Ci0gICAgICAgIGlmIChyZXN1bHQt
PnR5cGUgPT0gVGV4dENoZWNraW5nVHlwZVNwZWxsaW5nICYmIHJlc3VsdC0+bG9jYXRpb24gPT0g
cmFuZ2VTdGFydE9mZnNldCAmJiByZXN1bHQtPmxlbmd0aCA9PSByYW5nZUxlbmd0aCkgewotICAg
ICAgICAgICAgU3RyaW5nIG1pc3NwZWxsZWRXb3JkID0gcGFyYWdyYXBoU3RyaW5nLnN1YnN0cmlu
ZyhyYW5nZVN0YXJ0T2Zmc2V0LCByYW5nZUxlbmd0aCk7Ci0gICAgICAgICAgICBBU1NFUlQobWlz
c3BlbGxlZFdvcmQubGVuZ3RoKCkpOwotICAgICAgICAgICAgY2xpZW50LT5nZXRHdWVzc2VzRm9y
V29yZChtaXNzcGVsbGVkV29yZCwgZ3Vlc3Nlcyk7Ci0gICAgICAgICAgICBjbGllbnQtPnVwZGF0
ZVNwZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQobWlzc3BlbGxlZFdvcmQpOwotICAgICAgICAg
ICAgbWlzc3BlbGxlZCA9IHRydWU7Ci0gICAgICAgICAgICByZXR1cm4gZ3Vlc3NlczsKLSAgICAg
ICAgfQotICAgIH0KLSAgICAKLSAgICBpZiAoIWNoZWNrR3JhbW1hcikKLSAgICAgICAgcmV0dXJu
IGd1ZXNzZXM7Ci0gICAgICAgIAotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZXN1bHRz
LnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIGNvbnN0IFRleHRDaGVja2luZ1Jlc3VsdCogcmVzdWx0
ID0gJnJlc3VsdHNbaV07Ci0gICAgICAgIGlmIChyZXN1bHQtPnR5cGUgPT0gVGV4dENoZWNraW5n
VHlwZUdyYW1tYXIgJiYgcmVzdWx0LT5sb2NhdGlvbiA8PSByYW5nZVN0YXJ0T2Zmc2V0ICYmIHJl
c3VsdC0+bG9jYXRpb24gKyByZXN1bHQtPmxlbmd0aCA+PSByYW5nZVN0YXJ0T2Zmc2V0ICsgcmFu
Z2VMZW5ndGgpIHsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCByZXN1bHQt
PmRldGFpbHMuc2l6ZSgpOyBqKyspIHsKLSAgICAgICAgICAgICAgICBjb25zdCBHcmFtbWFyRGV0
YWlsKiBkZXRhaWwgPSAmcmVzdWx0LT5kZXRhaWxzW2pdOwotICAgICAgICAgICAgICAgIEFTU0VS
VChkZXRhaWwtPmxlbmd0aCA+IDAgJiYgZGV0YWlsLT5sb2NhdGlvbiA+PSAwKTsKLSAgICAgICAg
ICAgICAgICBpZiAocmVzdWx0LT5sb2NhdGlvbiArIGRldGFpbC0+bG9jYXRpb24gPT0gcmFuZ2VT
dGFydE9mZnNldCAmJiBkZXRhaWwtPmxlbmd0aCA9PSByYW5nZUxlbmd0aCkgewotICAgICAgICAg
ICAgICAgICAgICBTdHJpbmcgYmFkR3JhbW1hclBocmFzZSA9IHBhcmFncmFwaFN0cmluZy5zdWJz
dHJpbmcocmVzdWx0LT5sb2NhdGlvbiwgcmVzdWx0LT5sZW5ndGgpOwotICAgICAgICAgICAgICAg
ICAgICBBU1NFUlQoYmFkR3JhbW1hclBocmFzZS5sZW5ndGgoKSk7Ci0gICAgICAgICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgayA9IDA7IGsgPCBkZXRhaWwtPmd1ZXNzZXMuc2l6ZSgpOyBrKysp
Ci0gICAgICAgICAgICAgICAgICAgICAgICBndWVzc2VzLmFwcGVuZChkZXRhaWwtPmd1ZXNzZXNb
a10pOwotICAgICAgICAgICAgICAgICAgICBjbGllbnQtPnVwZGF0ZVNwZWxsaW5nVUlXaXRoR3Jh
bW1hclN0cmluZyhiYWRHcmFtbWFyUGhyYXNlLCAqZGV0YWlsKTsKLSAgICAgICAgICAgICAgICAg
ICAgdW5ncmFtbWF0aWNhbCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBndWVz
c2VzOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0K
LSAgICByZXR1cm4gZ3Vlc3NlczsKLX0KLQotI2VuZGlmCi0KIFZlY3RvcjxTdHJpbmc+IEVkaXRv
cjo6Z3Vlc3Nlc0Zvck1pc3NwZWxsZWRPclVuZ3JhbW1hdGljYWxTZWxlY3Rpb24oYm9vbCYgbWlz
c3BlbGxlZCwgYm9vbCYgdW5ncmFtbWF0aWNhbCkKIHsKICNpZiBQTEFURk9STShNQUMpICYmICFk
ZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJE
KQotICAgIHJldHVybiBndWVzc2VzRm9yTWlzc3BlbGxlZE9yVW5ncmFtbWF0aWNhbFJhbmdlKGNs
aWVudCgpLCBmcmFtZSgpLT5zZWxlY3Rpb24oKS0+dG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSwg
aXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKCksIG1pc3NwZWxsZWQsIHVuZ3JhbW1hdGljYWwpOwor
ICAgIHJldHVybiBUZXh0Q2hlY2tpbmdIZWxwZXIoY2xpZW50KCksIGZyYW1lKCktPnNlbGVjdGlv
bigpLT50b05vcm1hbGl6ZWRSYW5nZSgpKS5ndWVzc2VzRm9yTWlzc3BlbGxlZE9yVW5ncmFtbWF0
aWNhbFJhbmdlKGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCgpLCBtaXNzcGVsbGVkLCB1bmdyYW1t
YXRpY2FsKTsKICNlbHNlCiAgICAgbWlzc3BlbGxlZCA9IGlzU2VsZWN0aW9uTWlzc3BlbGxlZCgp
OwogICAgIGlmIChtaXNzcGVsbGVkKSB7CkBAIC0yNTAzLDM0ICsyMDc1LDE1IEBAIHZvaWQgRWRp
dG9yOjptYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmdUb1Bvc2l0aW9uKGNvbnN0IFZpc2libGVQ
b3NpdGlvbiAmcCkKICAgICBtYXJrQmFkR3JhbW1hcihWaXNpYmxlU2VsZWN0aW9uKHN0YXJ0T2ZT
ZW50ZW5jZShwKSwgZW5kT2ZTZW50ZW5jZShwKSkpOwogI2VuZGlmCiB9Ci0KLXN0YXRpYyB2b2lk
IG1hcmtBbGxNaXNzcGVsbGluZ3NJblJhbmdlKEVkaXRvckNsaWVudCogY2xpZW50LCBSYW5nZSog
c2VhcmNoUmFuZ2UsIFJlZlB0cjxSYW5nZT4mIGZpcnN0TWlzc3BlbGxpbmdSYW5nZSkKLXsKLSAg
ICAvLyBVc2UgdGhlICJtYXJrQWxsIiBmZWF0dXJlIG9mIGZpbmRGaXJzdE1pc3NwZWxsaW5nSW5S
YW5nZS4gSWdub3JlIHRoZSByZXR1cm4gdmFsdWUgYW5kIHRoZSAib3V0IHBhcmFtZXRlciI7Ci0g
ICAgLy8gYWxsIHdlIG5lZWQgdG8gZG8gaXMgbWFyayBldmVyeSBpbnN0YW5jZS4KLSAgICBpbnQg
aWdub3JlZE9mZnNldDsKLSAgICBmaW5kRmlyc3RNaXNzcGVsbGluZ0luUmFuZ2UoY2xpZW50LCBz
ZWFyY2hSYW5nZSwgaWdub3JlZE9mZnNldCwgdHJ1ZSwgZmlyc3RNaXNzcGVsbGluZ1JhbmdlKTsK
LX0KLQotI2lmbmRlZiBCVUlMRElOR19PTl9USUdFUgotc3RhdGljIHZvaWQgbWFya0FsbEJhZEdy
YW1tYXJJblJhbmdlKEVkaXRvckNsaWVudCogY2xpZW50LCBSYW5nZSogc2VhcmNoUmFuZ2UpCi17
Ci0gICAgLy8gVXNlIHRoZSAibWFya0FsbCIgZmVhdHVyZSBvZiBmaW5kRmlyc3RCYWRHcmFtbWFy
SW5SYW5nZS4gSWdub3JlIHRoZSByZXR1cm4gdmFsdWUgYW5kICJvdXQgcGFyYW1ldGVycyI7IGFs
bCB3ZSBuZWVkIHRvCi0gICAgLy8gZG8gaXMgbWFyayBldmVyeSBpbnN0YW5jZS4KLSAgICBHcmFt
bWFyRGV0YWlsIGlnbm9yZWRHcmFtbWFyRGV0YWlsOwotICAgIGludCBpZ25vcmVkT2Zmc2V0Owot
ICAgIGZpbmRGaXJzdEJhZEdyYW1tYXJJblJhbmdlKGNsaWVudCwgc2VhcmNoUmFuZ2UsIGlnbm9y
ZWRHcmFtbWFyRGV0YWlsLCBpZ25vcmVkT2Zmc2V0LCB0cnVlKTsKLX0KLSNlbmRpZgogICAgIAot
c3RhdGljIHZvaWQgbWFya01pc3NwZWxsaW5nc09yQmFkR3JhbW1hcihFZGl0b3IqIGVkaXRvciwg
Y29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uLCBib29sIGNoZWNrU3BlbGxpbmcsIFJl
ZlB0cjxSYW5nZT4mIGZpcnN0TWlzc3BlbGxpbmdSYW5nZSkKK3ZvaWQgRWRpdG9yOjptYXJrTWlz
c3BlbGxpbmdzT3JCYWRHcmFtbWFyKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiwg
Ym9vbCBjaGVja1NwZWxsaW5nLCBSZWZQdHI8UmFuZ2U+JiBmaXJzdE1pc3NwZWxsaW5nUmFuZ2Up
CiB7CiAgICAgLy8gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCBhIHNlbGVjdGlvbiBhbHJl
YWR5IGV4cGFuZGVkIHRvIHdvcmQgYm91bmRhcmllcy4KICAgICAvLyBNaWdodCBiZSBuaWNlIHRv
IGFzc2VydCB0aGF0IGhlcmUuCiAgICAgCiAgICAgLy8gVGhpcyBmdW5jdGlvbiBpcyB1c2VkIG9u
bHkgZm9yIGFzLXlvdS10eXBlIGNoZWNraW5nLCBzbyBpZiB0aGF0J3Mgb2ZmIHdlIGRvIG5vdGhp
bmcuIE5vdGUgdGhhdAogICAgIC8vIGdyYW1tYXIgY2hlY2tpbmcgY2FuIG9ubHkgYmUgb24gaWYg
c3BlbGwgY2hlY2tpbmcgaXMgYWxzbyBvbi4KLSAgICBpZiAoIWVkaXRvci0+aXNDb250aW51b3Vz
U3BlbGxDaGVja2luZ0VuYWJsZWQoKSkKKyAgICBpZiAoIWlzQ29udGludW91c1NwZWxsQ2hlY2tp
bmdFbmFibGVkKCkpCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBSZWZQdHI8UmFuZ2U+IHNl
YXJjaFJhbmdlKHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpKTsKQEAgLTI1NDIsMjEgKzIw
OTUsMjIgQEAgc3RhdGljIHZvaWQgbWFya01pc3NwZWxsaW5nc09yQmFkR3JhbW1hcihFZGl0b3Iq
IGVkaXRvciwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYKICAgICBpZiAoIWVkaXRhYmxlTm9kZSB8
fCAhZWRpdGFibGVOb2RlLT5pc0NvbnRlbnRFZGl0YWJsZSgpKQogICAgICAgICByZXR1cm47CiAK
LSAgICBpZiAoIWVkaXRvci0+aXNTcGVsbENoZWNraW5nRW5hYmxlZEluRm9jdXNlZE5vZGUoKSkK
KyAgICBpZiAoIWlzU3BlbGxDaGVja2luZ0VuYWJsZWRJbkZvY3VzZWROb2RlKCkpCiAgICAgICAg
IHJldHVybjsKIAogICAgIC8vIEdldCB0aGUgc3BlbGwgY2hlY2tlciBpZiBpdCBpcyBhdmFpbGFi
bGUKLSAgICBpZiAoIWVkaXRvci0+Y2xpZW50KCkpCisgICAgaWYgKCFjbGllbnQoKSkKICAgICAg
ICAgcmV0dXJuOwogICAgIAorICAgIFRleHRDaGVja2luZ0hlbHBlciBjaGVja2VyKGNsaWVudCgp
LCBzZWFyY2hSYW5nZSk7CiAgICAgaWYgKGNoZWNrU3BlbGxpbmcpCi0gICAgICAgIG1hcmtBbGxN
aXNzcGVsbGluZ3NJblJhbmdlKGVkaXRvci0+Y2xpZW50KCksIHNlYXJjaFJhbmdlLmdldCgpLCBm
aXJzdE1pc3NwZWxsaW5nUmFuZ2UpOworICAgICAgICBjaGVja2VyLm1hcmtBbGxNaXNzcGVsbGlu
Z3MoZmlyc3RNaXNzcGVsbGluZ1JhbmdlKTsKICAgICBlbHNlIHsKICNpZmRlZiBCVUlMRElOR19P
Tl9USUdFUgogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICNlbHNlCi0gICAgICAgIGlm
IChlZGl0b3ItPmlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCgpKQotICAgICAgICAgICAgbWFya0Fs
bEJhZEdyYW1tYXJJblJhbmdlKGVkaXRvci0+Y2xpZW50KCksIHNlYXJjaFJhbmdlLmdldCgpKTsK
KyAgICAgICAgaWYgKGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCgpKQorICAgICAgICAgICAgY2hl
Y2tlci5tYXJrQWxsQmFkR3JhbW1hcigpOwogI2VuZGlmCiAgICAgfSAgICAKIH0KQEAgLTI1NzYs
MTQgKzIxMzAsMTQgQEAgYm9vbCBFZGl0b3I6OmlzU3BlbGxDaGVja2luZ0VuYWJsZWRJbkZvY3Vz
ZWROb2RlKCkgY29uc3QKIAogdm9pZCBFZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3MoY29uc3QgVmlz
aWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uLCBSZWZQdHI8UmFuZ2U+JiBmaXJzdE1pc3NwZWxsaW5n
UmFuZ2UpCiB7Ci0gICAgbWFya01pc3NwZWxsaW5nc09yQmFkR3JhbW1hcih0aGlzLCBzZWxlY3Rp
b24sIHRydWUsIGZpcnN0TWlzc3BlbGxpbmdSYW5nZSk7CisgICAgbWFya01pc3NwZWxsaW5nc09y
QmFkR3JhbW1hcihzZWxlY3Rpb24sIHRydWUsIGZpcnN0TWlzc3BlbGxpbmdSYW5nZSk7CiB9CiAg
ICAgCiB2b2lkIEVkaXRvcjo6bWFya0JhZEdyYW1tYXIoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYg
c2VsZWN0aW9uKQogewogI2lmbmRlZiBCVUlMRElOR19PTl9USUdFUgogICAgIFJlZlB0cjxSYW5n
ZT4gZmlyc3RNaXNzcGVsbGluZ1JhbmdlOwotICAgIG1hcmtNaXNzcGVsbGluZ3NPckJhZEdyYW1t
YXIodGhpcywgc2VsZWN0aW9uLCBmYWxzZSwgZmlyc3RNaXNzcGVsbGluZ1JhbmdlKTsKKyAgICBt
YXJrTWlzc3BlbGxpbmdzT3JCYWRHcmFtbWFyKHNlbGVjdGlvbiwgZmFsc2UsIGZpcnN0TWlzc3Bl
bGxpbmdSYW5nZSk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShzZWxlY3Rpb24pOwogI2VuZGlm
CkBAIC0yNjM2LDEyICsyMTkwLDEyIEBAIHZvaWQgRWRpdG9yOjptYXJrQWxsTWlzc3BlbGxpbmdz
QW5kQmFkR3JhbW1hckluUmFuZ2VzKFRleHRDaGVja2luZ09wdGlvbnMgdGV4dENoCiAKICAgICBp
ZiAoc2hvdWxkTWFya0dyYW1tYXIpIHsKICAgICAgICAgLy8gVGhlIHNwZWxsaW5nIHJhbmdlIHNo
b3VsZCBiZSBjb250YWluZWQgaW4gdGhlIHBhcmFncmFwaC1hbGlnbmVkIGV4dGVuc2lvbiBvZiB0
aGUgZ3JhbW1hciByYW5nZS4KLSAgICAgICAgcGFyYWdyYXBoUmFuZ2UgPSBwYXJhZ3JhcGhBbGln
bmVkUmFuZ2VGb3JSYW5nZShncmFtbWFyUmFuZ2UsIGdyYW1tYXJSYW5nZVN0YXJ0T2Zmc2V0LCBw
YXJhZ3JhcGhTdHJpbmcpOworICAgICAgICBwYXJhZ3JhcGhSYW5nZSA9IFRleHRDaGVja2luZ0hl
bHBlcihjbGllbnQoKSwgZ3JhbW1hclJhbmdlKS5wYXJhZ3JhcGhBbGlnbmVkUmFuZ2UoZ3JhbW1h
clJhbmdlU3RhcnRPZmZzZXQsIHBhcmFncmFwaFN0cmluZyk7CiAgICAgICAgIFJlZlB0cjxSYW5n
ZT4gb2Zmc2V0QXNSYW5nZSA9IFJhbmdlOjpjcmVhdGUocGFyYWdyYXBoUmFuZ2UtPnN0YXJ0Q29u
dGFpbmVyKGVjKS0+ZG9jdW1lbnQoKSwgcGFyYWdyYXBoUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSwg
c3BlbGxpbmdSYW5nZS0+c3RhcnRQb3NpdGlvbigpKTsKICAgICAgICAgc3BlbGxpbmdSYW5nZVN0
YXJ0T2Zmc2V0ID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChvZmZzZXRBc1JhbmdlLmdldCgp
KTsKICAgICAgICAgZ3JhbW1hclJhbmdlRW5kT2Zmc2V0ID0gZ3JhbW1hclJhbmdlU3RhcnRPZmZz
ZXQgKyBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKGdyYW1tYXJSYW5nZSk7CiAgICAgfSBlbHNl
IHsKLSAgICAgICAgcGFyYWdyYXBoUmFuZ2UgPSBwYXJhZ3JhcGhBbGlnbmVkUmFuZ2VGb3JSYW5n
ZShzcGVsbGluZ1JhbmdlLCBzcGVsbGluZ1JhbmdlU3RhcnRPZmZzZXQsIHBhcmFncmFwaFN0cmlu
Zyk7CisgICAgICAgIHBhcmFncmFwaFJhbmdlID0gVGV4dENoZWNraW5nSGVscGVyKGNsaWVudCgp
LCBzcGVsbGluZ1JhbmdlKS5wYXJhZ3JhcGhBbGlnbmVkUmFuZ2Uoc3BlbGxpbmdSYW5nZVN0YXJ0
T2Zmc2V0LCBwYXJhZ3JhcGhTdHJpbmcpOwogICAgIH0KICAgICBzcGVsbGluZ1JhbmdlRW5kT2Zm
c2V0ID0gc3BlbGxpbmdSYW5nZVN0YXJ0T2Zmc2V0ICsgVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0
aChzcGVsbGluZ1JhbmdlKTsKICAgICBwYXJhZ3JhcGhMZW5ndGggPSBwYXJhZ3JhcGhTdHJpbmcu
bGVuZ3RoKCk7CkBAIC0yODMxLDEwICsyMzg1LDEwIEBAIHZvaWQgRWRpdG9yOjpjaGFuZ2VCYWNr
VG9SZXBsYWNlZFN0cmluZyhjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nKQogICAgIFJlZlB0
cjxSYW5nZT4gc2VsZWN0aW9uID0gc2VsZWN0ZWRSYW5nZSgpOwogICAgIGlmICghc2hvdWxkSW5z
ZXJ0VGV4dChyZXBsYWNlZFN0cmluZywgc2VsZWN0aW9uLmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rp
b25QYXN0ZWQpKQogICAgICAgICByZXR1cm47Ci0gICAgICAgIAorICAgIAogICAgIFN0cmluZyBw
YXJhZ3JhcGhTdHJpbmc7CiAgICAgaW50IHNlbGVjdGlvbk9mZnNldDsKLSAgICBSZWZQdHI8UmFu
Z2U+IHBhcmFncmFwaFJhbmdlID0gcGFyYWdyYXBoQWxpZ25lZFJhbmdlRm9yUmFuZ2Uoc2VsZWN0
aW9uLmdldCgpLCBzZWxlY3Rpb25PZmZzZXQsIHBhcmFncmFwaFN0cmluZyk7CisgICAgUmVmUHRy
PFJhbmdlPiBwYXJhZ3JhcGhSYW5nZSA9IFRleHRDaGVja2luZ0hlbHBlcihjbGllbnQoKSwgc2Vs
ZWN0aW9uKS5wYXJhZ3JhcGhBbGlnbmVkUmFuZ2Uoc2VsZWN0aW9uT2Zmc2V0LCBwYXJhZ3JhcGhT
dHJpbmcpOwogICAgIHJlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dChyZXBsYWNlZFN0cmluZywgZmFs
c2UsIGZhbHNlKTsKICAgICBSZWZQdHI8UmFuZ2U+IGNoYW5nZWRSYW5nZSA9IFRleHRJdGVyYXRv
cjo6c3VicmFuZ2UocGFyYWdyYXBoUmFuZ2UuZ2V0KCksIHNlbGVjdGlvbk9mZnNldCwgcmVwbGFj
ZWRTdHJpbmcubGVuZ3RoKCkpOwogICAgIGNoYW5nZWRSYW5nZS0+c3RhcnRDb250YWluZXIoKS0+
ZG9jdW1lbnQoKS0+bWFya2VycygpLT5hZGRNYXJrZXIoY2hhbmdlZFJhbmdlLmdldCgpLCBEb2N1
bWVudE1hcmtlcjo6UmVwbGFjZW1lbnQsIFN0cmluZygpKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
ZWRpdGluZy9FZGl0b3IuaCBiL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaAppbmRleCBlOTQyNTYw
ZGE1ZjEzNjJmMWM3MjFmN2JkMmNkMzgyMDNjMTEzMjhkLi4xMTBlM2Y5YThmMTgzMjUxN2IyZGQ5
YTI3NDdiYTU0NmYwZmEwYWRmIDEwMDY0NAotLS0gYS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgK
KysrIGIvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCkBAIC00MDQsNiArNDA0LDcgQEAgcHJpdmF0
ZToKICAgICB2b2lkIHJlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dChjb25zdCBTdHJpbmcmLCBib29s
IHNlbGVjdFJlcGxhY2VtZW50LCBib29sIHNtYXJ0UmVwbGFjZSk7CiAgICAgdm9pZCB3cml0ZVNl
bGVjdGlvblRvUGFzdGVib2FyZChQYXN0ZWJvYXJkKik7CiAgICAgdm9pZCByZXZlYWxTZWxlY3Rp
b25BZnRlckVkaXRpbmdPcGVyYXRpb24oKTsKKyAgICB2b2lkIG1hcmtNaXNzcGVsbGluZ3NPckJh
ZEdyYW1tYXIoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYsIGJvb2wgY2hlY2tTcGVsbGluZywgUmVm
UHRyPFJhbmdlPiYgZmlyc3RNaXNzcGVsbGluZ1JhbmdlKTsKIAogICAgIHZvaWQgc2VsZWN0Q29t
cG9zaXRpb24oKTsKICAgICB2b2lkIGNvbmZpcm1Db21wb3NpdGlvbihjb25zdCBTdHJpbmcmLCBi
b29sIHByZXNlcnZlU2VsZWN0aW9uKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZWRpdGluZy9UZXh0
Q2hlY2tpbmdIZWxwZXIuY3BwIGIvV2ViQ29yZS9lZGl0aW5nL1RleHRDaGVja2luZ0hlbHBlci5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uNDk2NzRmZmMyOGYzNThjNGI0MTc3MTJmODZkODQyNmI1ZDUyZmMzYQot
LS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuY3Bw
CkBAIC0wLDAgKzEsNTI1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBD
b3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIlRleHRDaGVja2luZ0hlbHBlci5oIgorCisjaW5jbHVkZSAi
UmFuZ2UuaCIKKyNpbmNsdWRlICJUZXh0SXRlcmF0b3IuaCIKKyNpbmNsdWRlICJWaXNpYmxlUG9z
aXRpb24uaCIKKyNpbmNsdWRlICJ2aXNpYmxlX3VuaXRzLmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworVGV4dENoZWNraW5nSGVscGVyOjpUZXh0Q2hlY2tpbmdIZWxwZXIoRWRpdG9yQ2xpZW50
KiBjbGllbnQsIFBhc3NSZWZQdHI8UmFuZ2U+IHJhbmdlKQorICAgIDogbV9jbGllbnQoY2xpZW50
KQorICAgICwgbV9yYW5nZShyYW5nZSkKK3sKKyAgICBBU1NFUlRfQVJHKG1fY2xpZW50LCBtX2Ns
aWVudCk7CisgICAgQVNTRVJUX0FSRyhtX3JhbmdlLCBtX3JhbmdlKTsKK30KKworVGV4dENoZWNr
aW5nSGVscGVyOjp+VGV4dENoZWNraW5nSGVscGVyKCkKK3sKK30KKworUGFzc1JlZlB0cjxSYW5n
ZT4gVGV4dENoZWNraW5nSGVscGVyOjpwYXJhZ3JhcGhBbGlnbmVkUmFuZ2UoaW50JiBvZmZzZXRJ
bnRvUGFyYWdyYXBoQWxpZ25lZFJhbmdlLCBTdHJpbmcmIHBhcmFncmFwaFN0cmluZykgY29uc3QK
K3sKKyNpZm5kZWYgQlVJTERJTkdfT05fVElHRVIKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsK
KyAgICAKKyAgICAvLyBFeHBhbmQgcmFuZ2UgdG8gcGFyYWdyYXBoIGJvdW5kYXJpZXMKKyAgICBS
ZWZQdHI8UmFuZ2U+IHBhcmFncmFwaFJhbmdlID0gbV9yYW5nZS0+Y2xvbmVSYW5nZShlYyk7Cisg
ICAgc2V0U3RhcnQocGFyYWdyYXBoUmFuZ2UuZ2V0KCksIHN0YXJ0T2ZQYXJhZ3JhcGgobV9yYW5n
ZS0+c3RhcnRQb3NpdGlvbigpKSk7CisgICAgc2V0RW5kKHBhcmFncmFwaFJhbmdlLmdldCgpLCBl
bmRPZlBhcmFncmFwaChtX3JhbmdlLT5lbmRQb3NpdGlvbigpKSk7CisgICAgCisgICAgLy8gQ29t
cHV0ZSBvZmZzZXQgZnJvbSBzdGFydCBvZiBleHBhbmRlZCByYW5nZSB0byBzdGFydCBvZiBvcmln
aW5hbCByYW5nZQorICAgIFJlZlB0cjxSYW5nZT4gb2Zmc2V0QXNSYW5nZSA9IFJhbmdlOjpjcmVh
dGUocGFyYWdyYXBoUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKGVjKS0+ZG9jdW1lbnQoKSwgcGFyYWdy
YXBoUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSwgbV9yYW5nZS0+c3RhcnRQb3NpdGlvbigpKTsKKyAg
ICBvZmZzZXRJbnRvUGFyYWdyYXBoQWxpZ25lZFJhbmdlID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxl
bmd0aChvZmZzZXRBc1JhbmdlLmdldCgpKTsKKyAgICAKKyAgICAvLyBGaWxsIGluIG91dCBwYXJh
bWV0ZXIgd2l0aCBzdHJpbmcgcmVwcmVzZW50aW5nIGVudGlyZSBwYXJhZ3JhcGggcmFuZ2UuCisg
ICAgLy8gU29tZWRheSB3ZSBtaWdodCBoYXZlIGEgY2FsbGVyIHRoYXQgZG9lc24ndCB1c2UgdGhp
cywgYnV0IGZvciBub3cgYWxsIGNhbGxlcnMgZG8uCisgICAgcGFyYWdyYXBoU3RyaW5nID0gcGxh
aW5UZXh0KHBhcmFncmFwaFJhbmdlLmdldCgpKTsKKworICAgIHJldHVybiBwYXJhZ3JhcGhSYW5n
ZTsKKyNlbHNlCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgVU5VU0VEX1BBUkFNKG9m
ZnNldEludG9QYXJhZ3JhcGhBbGlnbmVkUmFuZ2UpOworICAgIFVOVVNFRF9QQVJBTShwYXJhZ3Jh
cGhTdHJpbmcpOworICAgIHJldHVybiBQYXNzUmVmUHRyPFJhbmdlPigwKTsKKyNlbmRpZgorfQor
CitTdHJpbmcgVGV4dENoZWNraW5nSGVscGVyOjpmaW5kRmlyc3RNaXNzcGVsbGluZyhpbnQmIGZp
cnN0TWlzc3BlbGxpbmdPZmZzZXQsIGJvb2wgbWFya0FsbCwgUmVmUHRyPFJhbmdlPiYgZmlyc3RN
aXNzcGVsbGluZ1JhbmdlKQoreworICAgIFdvcmRBd2FyZUl0ZXJhdG9yIGl0KG1fcmFuZ2UuZ2V0
KCkpOworICAgIGZpcnN0TWlzc3BlbGxpbmdPZmZzZXQgPSAwOworICAgIAorICAgIFN0cmluZyBm
aXJzdE1pc3NwZWxsaW5nOworICAgIGludCBjdXJyZW50Q2h1bmtPZmZzZXQgPSAwOworCisgICAg
d2hpbGUgKCFpdC5hdEVuZCgpKSB7CisgICAgICAgIGNvbnN0IFVDaGFyKiBjaGFycyA9IGl0LmNo
YXJhY3RlcnMoKTsKKyAgICAgICAgaW50IGxlbiA9IGl0Lmxlbmd0aCgpOworICAgICAgICAKKyAg
ICAgICAgLy8gU2tpcCBzb21lIHdvcmsgZm9yIG9uZS1zcGFjZS1jaGFyIGh1bmtzCisgICAgICAg
IGlmICghKGxlbiA9PSAxICYmIGNoYXJzWzBdID09ICcgJykpIHsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgaW50IG1pc3NwZWxsaW5nTG9jYXRpb24gPSAtMTsKKyAgICAgICAgICAgIGludCBt
aXNzcGVsbGluZ0xlbmd0aCA9IDA7CisgICAgICAgICAgICBtX2NsaWVudC0+Y2hlY2tTcGVsbGlu
Z09mU3RyaW5nKGNoYXJzLCBsZW4sICZtaXNzcGVsbGluZ0xvY2F0aW9uLCAmbWlzc3BlbGxpbmdM
ZW5ndGgpOworCisgICAgICAgICAgICAvLyA1NDkwNjI3IHNob3dzIHRoYXQgdGhlcmUgd2FzIHNv
bWUgY29kZSBwYXRoIGhlcmUgd2hlcmUgdGhlIFN0cmluZyBjb25zdHJ1Y3RvciBiZWxvdyBjcmFz
aGVzLgorICAgICAgICAgICAgLy8gV2UgZG9uJ3Qga25vdyBleGFjdGx5IHdoYXQgY29tYmluYXRp
b24gb2YgYmFkIGlucHV0IGNhdXNlZCB0aGlzLCBzbyB3ZSdyZSBtYWtpbmcgdGhpcyBtdWNoCisg
ICAgICAgICAgICAvLyBtb3JlIHJvYnVzdCBhZ2FpbnN0IGJhZCBpbnB1dCBvbiByZWxlYXNlIGJ1
aWxkcy4KKyAgICAgICAgICAgIEFTU0VSVChtaXNzcGVsbGluZ0xlbmd0aCA+PSAwKTsKKyAgICAg
ICAgICAgIEFTU0VSVChtaXNzcGVsbGluZ0xvY2F0aW9uID49IC0xKTsKKyAgICAgICAgICAgIEFT
U0VSVCghbWlzc3BlbGxpbmdMZW5ndGggfHwgbWlzc3BlbGxpbmdMb2NhdGlvbiA+PSAwKTsKKyAg
ICAgICAgICAgIEFTU0VSVChtaXNzcGVsbGluZ0xvY2F0aW9uIDwgbGVuKTsKKyAgICAgICAgICAg
IEFTU0VSVChtaXNzcGVsbGluZ0xlbmd0aCA8PSBsZW4pOworICAgICAgICAgICAgQVNTRVJUKG1p
c3NwZWxsaW5nTG9jYXRpb24gKyBtaXNzcGVsbGluZ0xlbmd0aCA8PSBsZW4pOworICAgICAgICAg
ICAgCisgICAgICAgICAgICBpZiAobWlzc3BlbGxpbmdMb2NhdGlvbiA+PSAwICYmIG1pc3NwZWxs
aW5nTGVuZ3RoID4gMCAmJiBtaXNzcGVsbGluZ0xvY2F0aW9uIDwgbGVuICYmIG1pc3NwZWxsaW5n
TGVuZ3RoIDw9IGxlbiAmJiBtaXNzcGVsbGluZ0xvY2F0aW9uICsgbWlzc3BlbGxpbmdMZW5ndGgg
PD0gbGVuKSB7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gQ29tcHV0ZSBy
YW5nZSBvZiBtaXNzcGVsbGVkIHdvcmQKKyAgICAgICAgICAgICAgICBSZWZQdHI8UmFuZ2U+IG1p
c3NwZWxsaW5nUmFuZ2UgPSBUZXh0SXRlcmF0b3I6OnN1YnJhbmdlKG1fcmFuZ2UuZ2V0KCksIGN1
cnJlbnRDaHVua09mZnNldCArIG1pc3NwZWxsaW5nTG9jYXRpb24sIG1pc3NwZWxsaW5nTGVuZ3Ro
KTsKKworICAgICAgICAgICAgICAgIC8vIFJlbWVtYmVyIGZpcnN0LWVuY291bnRlcmVkIG1pc3Nw
ZWxsaW5nIGFuZCBpdHMgb2Zmc2V0LgorICAgICAgICAgICAgICAgIGlmICghZmlyc3RNaXNzcGVs
bGluZykgeworICAgICAgICAgICAgICAgICAgICBmaXJzdE1pc3NwZWxsaW5nT2Zmc2V0ID0gY3Vy
cmVudENodW5rT2Zmc2V0ICsgbWlzc3BlbGxpbmdMb2NhdGlvbjsKKyAgICAgICAgICAgICAgICAg
ICAgZmlyc3RNaXNzcGVsbGluZyA9IFN0cmluZyhjaGFycyArIG1pc3NwZWxsaW5nTG9jYXRpb24s
IG1pc3NwZWxsaW5nTGVuZ3RoKTsKKyAgICAgICAgICAgICAgICAgICAgZmlyc3RNaXNzcGVsbGlu
Z1JhbmdlID0gbWlzc3BlbGxpbmdSYW5nZTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICAvLyBTdG9yZSBtYXJrZXIgZm9yIG1pc3NwZWxsZWQgd29yZC4KKyAgICAgICAgICAg
ICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICAgICAgICAgICAgICBtaXNzcGVsbGluZ1Jh
bmdlLT5zdGFydENvbnRhaW5lcihlYyktPmRvY3VtZW50KCktPm1hcmtlcnMoKS0+YWRkTWFya2Vy
KG1pc3NwZWxsaW5nUmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpTcGVsbGluZyk7CisgICAg
ICAgICAgICAgICAgQVNTRVJUKCFlYyk7CisKKyAgICAgICAgICAgICAgICAvLyBCYWlsIG91dCBp
ZiB3ZSdyZSBtYXJraW5nIG9ubHkgdGhlIGZpcnN0IG1pc3NwZWxsaW5nLCBhbmQgbm90IGFsbCBp
bnN0YW5jZXMuCisgICAgICAgICAgICAgICAgaWYgKCFtYXJrQWxsKQorICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
Y3VycmVudENodW5rT2Zmc2V0ICs9IGxlbjsKKyAgICAgICAgaXQuYWR2YW5jZSgpOworICAgIH0K
KyAgICAKKyAgICByZXR1cm4gZmlyc3RNaXNzcGVsbGluZzsKK30KKworU3RyaW5nIFRleHRDaGVj
a2luZ0hlbHBlcjo6ZmluZEZpcnN0TWlzc3BlbGxpbmdPckJhZEdyYW1tYXIoYm9vbCBjaGVja0dy
YW1tYXIsIGJvb2wmIG91dElzU3BlbGxpbmcsIGludCYgb3V0Rmlyc3RGb3VuZE9mZnNldCwgR3Jh
bW1hckRldGFpbCYgb3V0R3JhbW1hckRldGFpbCkKK3sKKyNpZiBQTEFURk9STShNQUMpICYmICFk
ZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJE
KQorICAgIFN0cmluZyBmaXJzdEZvdW5kSXRlbTsKKyAgICBTdHJpbmcgbWlzc3BlbGxlZFdvcmQ7
CisgICAgU3RyaW5nIGJhZEdyYW1tYXJQaHJhc2U7CisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7
CisgICAgCisgICAgLy8gSW5pdGlhbGl6ZSBvdXQgcGFyYW1ldGVyczsgdGhlc2Ugd2lsbCBiZSB1
cGRhdGVkIGlmIHdlIGZpbmQgc29tZXRoaW5nIHRvIHJldHVybi4KKyAgICBvdXRJc1NwZWxsaW5n
ID0gdHJ1ZTsKKyAgICBvdXRGaXJzdEZvdW5kT2Zmc2V0ID0gMDsKKyAgICBvdXRHcmFtbWFyRGV0
YWlsLmxvY2F0aW9uID0gLTE7CisgICAgb3V0R3JhbW1hckRldGFpbC5sZW5ndGggPSAwOworICAg
IG91dEdyYW1tYXJEZXRhaWwuZ3Vlc3Nlcy5jbGVhcigpOworICAgIG91dEdyYW1tYXJEZXRhaWwu
dXNlckRlc2NyaXB0aW9uID0gIiI7CisgICAgCisgICAgLy8gRXhwYW5kIHRoZSBzZWFyY2ggcmFu
Z2UgdG8gZW5jb21wYXNzIGVudGlyZSBwYXJhZ3JhcGhzLCBzaW5jZSB0ZXh0IGNoZWNraW5nIG5l
ZWRzIHRoYXQgbXVjaCBjb250ZXh0LgorICAgIC8vIERldGVybWluZSB0aGUgY2hhcmFjdGVyIG9m
ZnNldCBmcm9tIHRoZSBzdGFydCBvZiB0aGUgcGFyYWdyYXBoIHRvIHRoZSBzdGFydCBvZiB0aGUg
b3JpZ2luYWwgc2VhcmNoIHJhbmdlLAorICAgIC8vIHNpbmNlIHdlIHdpbGwgd2FudCB0byBpZ25v
cmUgcmVzdWx0cyBpbiB0aGlzIGFyZWEuCisgICAgUmVmUHRyPFJhbmdlPiBwYXJhZ3JhcGhSYW5n
ZSA9IG1fcmFuZ2UtPmNsb25lUmFuZ2UoZWMpOworICAgIHNldFN0YXJ0KHBhcmFncmFwaFJhbmdl
LmdldCgpLCBzdGFydE9mUGFyYWdyYXBoKG1fcmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSkpOworICAg
IGludCB0b3RhbFJhbmdlTGVuZ3RoID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChwYXJhZ3Jh
cGhSYW5nZS5nZXQoKSk7CisgICAgc2V0RW5kKHBhcmFncmFwaFJhbmdlLmdldCgpLCBlbmRPZlBh
cmFncmFwaChtX3JhbmdlLT5zdGFydFBvc2l0aW9uKCkpKTsKKyAgICAKKyAgICBSZWZQdHI8UmFu
Z2U+IG9mZnNldEFzUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKHBhcmFncmFwaFJhbmdlLT5zdGFydENv
bnRhaW5lcihlYyktPmRvY3VtZW50KCksIHBhcmFncmFwaFJhbmdlLT5zdGFydFBvc2l0aW9uKCks
IG1fcmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSk7CisgICAgaW50IHJhbmdlU3RhcnRPZmZzZXQgPSBU
ZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKG9mZnNldEFzUmFuZ2UuZ2V0KCkpOworICAgIGludCB0
b3RhbExlbmd0aFByb2Nlc3NlZCA9IDA7CisgICAgCisgICAgYm9vbCBmaXJzdEl0ZXJhdGlvbiA9
IHRydWU7CisgICAgYm9vbCBsYXN0SXRlcmF0aW9uID0gZmFsc2U7CisgICAgd2hpbGUgKHRvdGFs
TGVuZ3RoUHJvY2Vzc2VkIDwgdG90YWxSYW5nZUxlbmd0aCkgeworICAgICAgICAvLyBJdGVyYXRl
IHRocm91Z2ggdGhlIHNlYXJjaCByYW5nZSBieSBwYXJhZ3JhcGhzLCBjaGVja2luZyBlYWNoIG9u
ZSBmb3Igc3BlbGxpbmcgYW5kIGdyYW1tYXIuCisgICAgICAgIGludCBjdXJyZW50TGVuZ3RoID0g
VGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChwYXJhZ3JhcGhSYW5nZS5nZXQoKSk7CisgICAgICAg
IGludCBjdXJyZW50U3RhcnRPZmZzZXQgPSBmaXJzdEl0ZXJhdGlvbiA/IHJhbmdlU3RhcnRPZmZz
ZXQgOiAwOworICAgICAgICBpbnQgY3VycmVudEVuZE9mZnNldCA9IGN1cnJlbnRMZW5ndGg7Cisg
ICAgICAgIGlmIChpblNhbWVQYXJhZ3JhcGgocGFyYWdyYXBoUmFuZ2UtPnN0YXJ0UG9zaXRpb24o
KSwgbV9yYW5nZS0+ZW5kUG9zaXRpb24oKSkpIHsKKyAgICAgICAgICAgIC8vIERldGVybWluZSB0
aGUgY2hhcmFjdGVyIG9mZnNldCBmcm9tIHRoZSBlbmQgb2YgdGhlIG9yaWdpbmFsIHNlYXJjaCBy
YW5nZSB0byB0aGUgZW5kIG9mIHRoZSBwYXJhZ3JhcGgsCisgICAgICAgICAgICAvLyBzaW5jZSB3
ZSB3aWxsIHdhbnQgdG8gaWdub3JlIHJlc3VsdHMgaW4gdGhpcyBhcmVhLgorICAgICAgICAgICAg
UmVmUHRyPFJhbmdlPiBlbmRPZmZzZXRBc1JhbmdlID0gUmFuZ2U6OmNyZWF0ZShwYXJhZ3JhcGhS
YW5nZS0+c3RhcnRDb250YWluZXIoZWMpLT5kb2N1bWVudCgpLCBwYXJhZ3JhcGhSYW5nZS0+c3Rh
cnRQb3NpdGlvbigpLCBtX3JhbmdlLT5lbmRQb3NpdGlvbigpKTsKKyAgICAgICAgICAgIGN1cnJl
bnRFbmRPZmZzZXQgPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKGVuZE9mZnNldEFzUmFuZ2Uu
Z2V0KCkpOworICAgICAgICAgICAgbGFzdEl0ZXJhdGlvbiA9IHRydWU7CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKGN1cnJlbnRTdGFydE9mZnNldCA8IGN1cnJlbnRFbmRPZmZzZXQpIHsKKyAgICAg
ICAgICAgIFN0cmluZyBwYXJhZ3JhcGhTdHJpbmcgPSBwbGFpblRleHQocGFyYWdyYXBoUmFuZ2Uu
Z2V0KCkpOworICAgICAgICAgICAgaWYgKHBhcmFncmFwaFN0cmluZy5sZW5ndGgoKSA+IDApIHsK
KyAgICAgICAgICAgICAgICBib29sIGZvdW5kR3JhbW1hciA9IGZhbHNlOworICAgICAgICAgICAg
ICAgIGludCBzcGVsbGluZ0xvY2F0aW9uID0gMDsKKyAgICAgICAgICAgICAgICBpbnQgZ3JhbW1h
clBocmFzZUxvY2F0aW9uID0gMDsKKyAgICAgICAgICAgICAgICBpbnQgZ3JhbW1hckRldGFpbExv
Y2F0aW9uID0gMDsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBncmFtbWFyRGV0YWlsSW5kZXgg
PSAwOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIFZlY3RvcjxUZXh0Q2hlY2tp
bmdSZXN1bHQ+IHJlc3VsdHM7CisgICAgICAgICAgICAgICAgdWludDY0X3QgY2hlY2tpbmdUeXBl
cyA9IGNoZWNrR3JhbW1hciA/IChUZXh0Q2hlY2tpbmdUeXBlU3BlbGxpbmcgfCBUZXh0Q2hlY2tp
bmdUeXBlR3JhbW1hcikgOiBUZXh0Q2hlY2tpbmdUeXBlU3BlbGxpbmc7CisgICAgICAgICAgICAg
ICAgbV9jbGllbnQtPmNoZWNrVGV4dE9mUGFyYWdyYXBoKHBhcmFncmFwaFN0cmluZy5jaGFyYWN0
ZXJzKCksIHBhcmFncmFwaFN0cmluZy5sZW5ndGgoKSwgY2hlY2tpbmdUeXBlcywgcmVzdWx0cyk7
CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHJlc3VsdHMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgVGV4
dENoZWNraW5nUmVzdWx0KiByZXN1bHQgPSAmcmVzdWx0c1tpXTsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKHJlc3VsdC0+dHlwZSA9PSBUZXh0Q2hlY2tpbmdUeXBlU3BlbGxpbmcgJiYgcmVzdWx0
LT5sb2NhdGlvbiA+PSBjdXJyZW50U3RhcnRPZmZzZXQgJiYgcmVzdWx0LT5sb2NhdGlvbiArIHJl
c3VsdC0+bGVuZ3RoIDw9IGN1cnJlbnRFbmRPZmZzZXQpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIEFTU0VSVChyZXN1bHQtPmxlbmd0aCA+IDAgJiYgcmVzdWx0LT5sb2NhdGlvbiA+PSAwKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHNwZWxsaW5nTG9jYXRpb24gPSByZXN1bHQtPmxvY2F0
aW9uOworICAgICAgICAgICAgICAgICAgICAgICAgbWlzc3BlbGxlZFdvcmQgPSBwYXJhZ3JhcGhT
dHJpbmcuc3Vic3RyaW5nKHJlc3VsdC0+bG9jYXRpb24sIHJlc3VsdC0+bGVuZ3RoKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIEFTU0VSVChtaXNzcGVsbGVkV29yZC5sZW5ndGgoKSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICBpZiAoY2hlY2tHcmFtbWFyICYmIHJlc3VsdC0+dHlwZSA9PSBUZXh0Q2hl
Y2tpbmdUeXBlR3JhbW1hciAmJiByZXN1bHQtPmxvY2F0aW9uIDwgY3VycmVudEVuZE9mZnNldCAm
JiByZXN1bHQtPmxvY2F0aW9uICsgcmVzdWx0LT5sZW5ndGggPiBjdXJyZW50U3RhcnRPZmZzZXQp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChyZXN1bHQtPmxlbmd0aCA+IDAgJiYg
cmVzdWx0LT5sb2NhdGlvbiA+PSAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIGNh
bid0IHN0b3AgYWZ0ZXIgdGhlIGZpcnN0IGdyYW1tYXIgcmVzdWx0LCBzaW5jZSB0aGVyZSBtaWdo
dCBzdGlsbCBiZSBhIHNwZWxsaW5nIHJlc3VsdCBhZnRlcgorICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gaXQgYmVnaW5zIGJ1dCBiZWZvcmUgdGhlIGZpcnN0IGRldGFpbCBpbiBpdCwgYnV0IHdl
IGNhbiBzdG9wIGlmIHdlIGZpbmQgYSBzZWNvbmQgZ3JhbW1hciByZXN1bHQuCisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoZm91bmRHcmFtbWFyKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsg
aiA8IHJlc3VsdC0+ZGV0YWlscy5zaXplKCk7IGorKykgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IEdyYW1tYXJEZXRhaWwqIGRldGFpbCA9ICZyZXN1bHQtPmRldGFpbHNbal07
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGRldGFpbC0+bGVuZ3RoID4gMCAm
JiBkZXRhaWwtPmxvY2F0aW9uID49IDApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChyZXN1bHQtPmxvY2F0aW9uICsgZGV0YWlsLT5sb2NhdGlvbiA+PSBjdXJyZW50U3RhcnRPZmZz
ZXQgJiYgcmVzdWx0LT5sb2NhdGlvbiArIGRldGFpbC0+bG9jYXRpb24gKyBkZXRhaWwtPmxlbmd0
aCA8PSBjdXJyZW50RW5kT2Zmc2V0ICYmICghZm91bmRHcmFtbWFyIHx8IHJlc3VsdC0+bG9jYXRp
b24gKyBkZXRhaWwtPmxvY2F0aW9uIDwgZ3JhbW1hckRldGFpbExvY2F0aW9uKSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBncmFtbWFyRGV0YWlsSW5kZXggPSBqOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBncmFtbWFyRGV0YWlsTG9jYXRpb24gPSByZXN1bHQt
PmxvY2F0aW9uICsgZGV0YWlsLT5sb2NhdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZm91bmRHcmFtbWFyID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
Zm91bmRHcmFtbWFyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JhbW1hclBocmFz
ZUxvY2F0aW9uID0gcmVzdWx0LT5sb2NhdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBvdXRHcmFtbWFyRGV0YWlsID0gcmVzdWx0LT5kZXRhaWxzW2dyYW1tYXJEZXRhaWxJbmRleF07
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFkR3JhbW1hclBocmFzZSA9IHBhcmFncmFw
aFN0cmluZy5zdWJzdHJpbmcocmVzdWx0LT5sb2NhdGlvbiwgcmVzdWx0LT5sZW5ndGgpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChiYWRHcmFtbWFyUGhyYXNlLmxlbmd0aCgp
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmICghbWlzc3BlbGxlZFdvcmQuaXNF
bXB0eSgpICYmICghY2hlY2tHcmFtbWFyIHx8IGJhZEdyYW1tYXJQaHJhc2UuaXNFbXB0eSgpIHx8
IHNwZWxsaW5nTG9jYXRpb24gPD0gZ3JhbW1hckRldGFpbExvY2F0aW9uKSkgeworICAgICAgICAg
ICAgICAgICAgICBpbnQgc3BlbGxpbmdPZmZzZXQgPSBzcGVsbGluZ0xvY2F0aW9uIC0gY3VycmVu
dFN0YXJ0T2Zmc2V0OworICAgICAgICAgICAgICAgICAgICBpZiAoIWZpcnN0SXRlcmF0aW9uKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBSZWZQdHI8UmFuZ2U+IHBhcmFncmFwaE9mZnNldEFz
UmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKHBhcmFncmFwaFJhbmdlLT5zdGFydENvbnRhaW5lcihlYykt
PmRvY3VtZW50KCksIG1fcmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSwgcGFyYWdyYXBoUmFuZ2UtPnN0
YXJ0UG9zaXRpb24oKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBzcGVsbGluZ09mZnNldCAr
PSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKHBhcmFncmFwaE9mZnNldEFzUmFuZ2UuZ2V0KCkp
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIG91dElzU3BlbGxp
bmcgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBvdXRGaXJzdEZvdW5kT2Zmc2V0ID0gc3Bl
bGxpbmdPZmZzZXQ7CisgICAgICAgICAgICAgICAgICAgIGZpcnN0Rm91bmRJdGVtID0gbWlzc3Bl
bGxlZFdvcmQ7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBpZiAoY2hlY2tHcmFtbWFyICYmICFiYWRHcmFtbWFyUGhyYXNlLmlz
RW1wdHkoKSkgeworICAgICAgICAgICAgICAgICAgICBpbnQgZ3JhbW1hclBocmFzZU9mZnNldCA9
IGdyYW1tYXJQaHJhc2VMb2NhdGlvbiAtIGN1cnJlbnRTdGFydE9mZnNldDsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKCFmaXJzdEl0ZXJhdGlvbikgeworICAgICAgICAgICAgICAgICAgICAgICAg
UmVmUHRyPFJhbmdlPiBwYXJhZ3JhcGhPZmZzZXRBc1JhbmdlID0gUmFuZ2U6OmNyZWF0ZShwYXJh
Z3JhcGhSYW5nZS0+c3RhcnRDb250YWluZXIoZWMpLT5kb2N1bWVudCgpLCBtX3JhbmdlLT5zdGFy
dFBvc2l0aW9uKCksIHBhcmFncmFwaFJhbmdlLT5zdGFydFBvc2l0aW9uKCkpOworICAgICAgICAg
ICAgICAgICAgICAgICAgZ3JhbW1hclBocmFzZU9mZnNldCArPSBUZXh0SXRlcmF0b3I6OnJhbmdl
TGVuZ3RoKHBhcmFncmFwaE9mZnNldEFzUmFuZ2UuZ2V0KCkpOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgIG91dElzU3BlbGxpbmcgPSBmYWxzZTsKKyAgICAgICAg
ICAgICAgICAgICAgb3V0Rmlyc3RGb3VuZE9mZnNldCA9IGdyYW1tYXJQaHJhc2VPZmZzZXQ7Cisg
ICAgICAgICAgICAgICAgICAgIGZpcnN0Rm91bmRJdGVtID0gYmFkR3JhbW1hclBocmFzZTsKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIGlmIChsYXN0SXRlcmF0aW9uIHx8IHRvdGFsTGVuZ3RoUHJv
Y2Vzc2VkICsgY3VycmVudExlbmd0aCA+PSB0b3RhbFJhbmdlTGVuZ3RoKQorICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIFZpc2libGVQb3NpdGlvbiBuZXdQYXJhZ3JhcGhTdGFydCA9IHN0YXJ0
T2ZOZXh0UGFyYWdyYXBoKHBhcmFncmFwaFJhbmdlLT5lbmRQb3NpdGlvbigpKTsKKyAgICAgICAg
c2V0U3RhcnQocGFyYWdyYXBoUmFuZ2UuZ2V0KCksIG5ld1BhcmFncmFwaFN0YXJ0KTsKKyAgICAg
ICAgc2V0RW5kKHBhcmFncmFwaFJhbmdlLmdldCgpLCBlbmRPZlBhcmFncmFwaChuZXdQYXJhZ3Jh
cGhTdGFydCkpOworICAgICAgICBmaXJzdEl0ZXJhdGlvbiA9IGZhbHNlOworICAgICAgICB0b3Rh
bExlbmd0aFByb2Nlc3NlZCArPSBjdXJyZW50TGVuZ3RoOworICAgIH0KKyAgICByZXR1cm4gZmly
c3RGb3VuZEl0ZW07CisjZWxzZQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIFVOVVNF
RF9QQVJBTShjaGVja0dyYW1tYXIpOworICAgIFVOVVNFRF9QQVJBTShvdXRJc1NwZWxsaW5nKTsK
KyAgICBVTlVTRURfUEFSQU0ob3V0Rmlyc3RGb3VuZE9mZnNldCk7CisgICAgVU5VU0VEX1BBUkFN
KG91dEdyYW1tYXJEZXRhaWwpOworICAgIHJldHVybiAiIjsKKyNlbmRpZgorfQorCitpbnQgVGV4
dENoZWNraW5nSGVscGVyOjpmaW5kRmlyc3RHcmFtbWFyRGV0YWlsKGNvbnN0IFZlY3RvcjxHcmFt
bWFyRGV0YWlsPiYgZ3JhbW1hckRldGFpbHMsIGludCBiYWRHcmFtbWFyUGhyYXNlTG9jYXRpb24s
IGludCAvKmJhZEdyYW1tYXJQaHJhc2VMZW5ndGgqLywgaW50IHN0YXJ0T2Zmc2V0LCBpbnQgZW5k
T2Zmc2V0LCBib29sIG1hcmtBbGwpCit7CisjaWZuZGVmIEJVSUxESU5HX09OX1RJR0VSCisgICAg
Ly8gRm91bmQgc29tZSBiYWQgZ3JhbW1hci4gRmluZCB0aGUgZWFybGllc3QgZGV0YWlsIHJhbmdl
IHRoYXQgc3RhcnRzIGluIG91ciBzZWFyY2ggcmFuZ2UgKGlmIGFueSkuCisgICAgLy8gT3B0aW9u
YWxseSBhZGQgYSBEb2N1bWVudE1hcmtlciBmb3IgZWFjaCBkZXRhaWwgaW4gdGhlIHJhbmdlLgor
ICAgIGludCBlYXJsaWVzdERldGFpbExvY2F0aW9uU29GYXIgPSAtMTsKKyAgICBpbnQgZWFybGll
c3REZXRhaWxJbmRleCA9IC0xOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBncmFtbWFy
RGV0YWlscy5zaXplKCk7IGkrKykgeworICAgICAgICBjb25zdCBHcmFtbWFyRGV0YWlsKiBkZXRh
aWwgPSAmZ3JhbW1hckRldGFpbHNbaV07CisgICAgICAgIEFTU0VSVChkZXRhaWwtPmxlbmd0aCA+
IDAgJiYgZGV0YWlsLT5sb2NhdGlvbiA+PSAwKTsKKyAgICAgICAgCisgICAgICAgIGludCBkZXRh
aWxTdGFydE9mZnNldEluUGFyYWdyYXBoID0gYmFkR3JhbW1hclBocmFzZUxvY2F0aW9uICsgZGV0
YWlsLT5sb2NhdGlvbjsKKyAgICAgICAgCisgICAgICAgIC8vIFNraXAgdGhpcyBkZXRhaWwgaWYg
aXQgc3RhcnRzIGJlZm9yZSB0aGUgb3JpZ2luYWwgc2VhcmNoIHJhbmdlCisgICAgICAgIGlmIChk
ZXRhaWxTdGFydE9mZnNldEluUGFyYWdyYXBoIDwgc3RhcnRPZmZzZXQpCisgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgCisgICAgICAgIC8vIFNraXAgdGhpcyBkZXRhaWwgaWYgaXQgc3Rh
cnRzIGFmdGVyIHRoZSBvcmlnaW5hbCBzZWFyY2ggcmFuZ2UKKyAgICAgICAgaWYgKGRldGFpbFN0
YXJ0T2Zmc2V0SW5QYXJhZ3JhcGggPj0gZW5kT2Zmc2V0KQorICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIAorICAgICAgICBpZiAobWFya0FsbCkgeworICAgICAgICAgICAgUmVmUHRyPFJh
bmdlPiBiYWRHcmFtbWFyUmFuZ2UgPSBUZXh0SXRlcmF0b3I6OnN1YnJhbmdlKG1fcmFuZ2UuZ2V0
KCksIGJhZEdyYW1tYXJQaHJhc2VMb2NhdGlvbiAtIHN0YXJ0T2Zmc2V0ICsgZGV0YWlsLT5sb2Nh
dGlvbiwgZGV0YWlsLT5sZW5ndGgpOworICAgICAgICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7
CisgICAgICAgICAgICBiYWRHcmFtbWFyUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKGVjKS0+ZG9jdW1l
bnQoKS0+bWFya2VycygpLT5hZGRNYXJrZXIoYmFkR3JhbW1hclJhbmdlLmdldCgpLCBEb2N1bWVu
dE1hcmtlcjo6R3JhbW1hciwgZGV0YWlsLT51c2VyRGVzY3JpcHRpb24pOworICAgICAgICAgICAg
QVNTRVJUKCFlYyk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIFJlbWVtYmVyIHRo
aXMgZGV0YWlsIG9ubHkgaWYgaXQncyBlYXJsaWVyIHRoYW4gb3VyIGN1cnJlbnQgY2FuZGlkYXRl
ICh0aGUgZGV0YWlscyBhcmVuJ3QgaW4gYSBndWFyYW50ZWVkIG9yZGVyKQorICAgICAgICBpZiAo
ZWFybGllc3REZXRhaWxJbmRleCA8IDAgfHwgZWFybGllc3REZXRhaWxMb2NhdGlvblNvRmFyID4g
ZGV0YWlsLT5sb2NhdGlvbikgeworICAgICAgICAgICAgZWFybGllc3REZXRhaWxJbmRleCA9IGk7
CisgICAgICAgICAgICBlYXJsaWVzdERldGFpbExvY2F0aW9uU29GYXIgPSBkZXRhaWwtPmxvY2F0
aW9uOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHJldHVybiBlYXJsaWVzdERldGFpbElu
ZGV4OworI2Vsc2UKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBVTlVTRURfUEFSQU0o
Z3JhbW1hckRldGFpbHMpOworICAgIFVOVVNFRF9QQVJBTShiYWRHcmFtbWFyUGhyYXNlTG9jYXRp
b24pOworICAgIFVOVVNFRF9QQVJBTShzdGFydE9mZnNldCk7CisgICAgVU5VU0VEX1BBUkFNKGVu
ZE9mZnNldCk7CisgICAgVU5VU0VEX1BBUkFNKG1hcmtBbGwpOworICAgIHJldHVybiAwOworI2Vu
ZGlmCit9CisKK1N0cmluZyBUZXh0Q2hlY2tpbmdIZWxwZXI6OmZpbmRGaXJzdEJhZEdyYW1tYXIo
R3JhbW1hckRldGFpbCYgb3V0R3JhbW1hckRldGFpbCwgaW50JiBvdXRHcmFtbWFyUGhyYXNlT2Zm
c2V0LCBib29sIG1hcmtBbGwpCit7CisjaWZuZGVmIEJVSUxESU5HX09OX1RJR0VSCisgICAgLy8g
SW5pdGlhbGl6ZSBvdXQgcGFyYW1ldGVyczsgdGhlc2Ugd2lsbCBiZSB1cGRhdGVkIGlmIHdlIGZp
bmQgc29tZXRoaW5nIHRvIHJldHVybi4KKyAgICBvdXRHcmFtbWFyRGV0YWlsLmxvY2F0aW9uID0g
LTE7CisgICAgb3V0R3JhbW1hckRldGFpbC5sZW5ndGggPSAwOworICAgIG91dEdyYW1tYXJEZXRh
aWwuZ3Vlc3Nlcy5jbGVhcigpOworICAgIG91dEdyYW1tYXJEZXRhaWwudXNlckRlc2NyaXB0aW9u
ID0gIiI7CisgICAgb3V0R3JhbW1hclBocmFzZU9mZnNldCA9IDA7CisgICAgCisgICAgU3RyaW5n
IGZpcnN0QmFkR3JhbW1hclBocmFzZTsKKworICAgIC8vIEV4cGFuZCB0aGUgc2VhcmNoIHJhbmdl
IHRvIGVuY29tcGFzcyBlbnRpcmUgcGFyYWdyYXBocywgc2luY2UgZ3JhbW1hciBjaGVja2luZyBu
ZWVkcyB0aGF0IG11Y2ggY29udGV4dC4KKyAgICAvLyBEZXRlcm1pbmUgdGhlIGNoYXJhY3RlciBv
ZmZzZXQgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIHBhcmFncmFwaCB0byB0aGUgc3RhcnQgb2YgdGhl
IG9yaWdpbmFsIHNlYXJjaCByYW5nZSwKKyAgICAvLyBzaW5jZSB3ZSB3aWxsIHdhbnQgdG8gaWdu
b3JlIHJlc3VsdHMgaW4gdGhpcyBhcmVhLgorICAgIGludCBzZWFyY2hSYW5nZVN0YXJ0T2Zmc2V0
OworICAgIFN0cmluZyBwYXJhZ3JhcGhTdHJpbmc7CisgICAgUmVmUHRyPFJhbmdlPiBwYXJhZ3Jh
cGhSYW5nZSA9IHBhcmFncmFwaEFsaWduZWRSYW5nZShzZWFyY2hSYW5nZVN0YXJ0T2Zmc2V0LCBw
YXJhZ3JhcGhTdHJpbmcpOworICAgICAgICAKKyAgICAvLyBEZXRlcm1pbmUgdGhlIGNoYXJhY3Rl
ciBvZmZzZXQgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIHBhcmFncmFwaCB0byB0aGUgZW5kIG9mIHRo
ZSBvcmlnaW5hbCBzZWFyY2ggcmFuZ2UsIAorICAgIC8vIHNpbmNlIHdlIHdpbGwgd2FudCB0byBp
Z25vcmUgcmVzdWx0cyBpbiB0aGlzIGFyZWEgYWxzby4KKyAgICBpbnQgc2VhcmNoUmFuZ2VFbmRP
ZmZzZXQgPSBzZWFyY2hSYW5nZVN0YXJ0T2Zmc2V0ICsgVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0
aChtX3JhbmdlLmdldCgpKTsKKyAgICAgICAgCisgICAgLy8gU3RhcnQgY2hlY2tpbmcgZnJvbSBi
ZWdpbm5pbmcgb2YgcGFyYWdyYXBoLCBidXQgc2tpcCBwYXN0IHJlc3VsdHMgdGhhdCBvY2N1ciBi
ZWZvcmUgdGhlIHN0YXJ0IG9mIHRoZSBvcmlnaW5hbCBzZWFyY2ggcmFuZ2UuCisgICAgaW50IHN0
YXJ0T2Zmc2V0ID0gMDsKKyAgICB3aGlsZSAoc3RhcnRPZmZzZXQgPCBzZWFyY2hSYW5nZUVuZE9m
ZnNldCkgeworICAgICAgICBWZWN0b3I8R3JhbW1hckRldGFpbD4gZ3JhbW1hckRldGFpbHM7Cisg
ICAgICAgIGludCBiYWRHcmFtbWFyUGhyYXNlTG9jYXRpb24gPSAtMTsKKyAgICAgICAgaW50IGJh
ZEdyYW1tYXJQaHJhc2VMZW5ndGggPSAwOworICAgICAgICBtX2NsaWVudC0+Y2hlY2tHcmFtbWFy
T2ZTdHJpbmcocGFyYWdyYXBoU3RyaW5nLmNoYXJhY3RlcnMoKSArIHN0YXJ0T2Zmc2V0LCBwYXJh
Z3JhcGhTdHJpbmcubGVuZ3RoKCkgLSBzdGFydE9mZnNldCwgZ3JhbW1hckRldGFpbHMsICZiYWRH
cmFtbWFyUGhyYXNlTG9jYXRpb24sICZiYWRHcmFtbWFyUGhyYXNlTGVuZ3RoKTsKKyAgICAgICAg
CisgICAgICAgIGlmICghYmFkR3JhbW1hclBocmFzZUxlbmd0aCkgeworICAgICAgICAgICAgQVNT
RVJUKGJhZEdyYW1tYXJQaHJhc2VMb2NhdGlvbiA9PSAtMSk7CisgICAgICAgICAgICByZXR1cm4g
U3RyaW5nKCk7CisgICAgICAgIH0KKworICAgICAgICBBU1NFUlQoYmFkR3JhbW1hclBocmFzZUxv
Y2F0aW9uID49IDApOworICAgICAgICBiYWRHcmFtbWFyUGhyYXNlTG9jYXRpb24gKz0gc3RhcnRP
ZmZzZXQ7CisKKyAgICAgICAgCisgICAgICAgIC8vIEZvdW5kIHNvbWUgYmFkIGdyYW1tYXIuIEZp
bmQgdGhlIGVhcmxpZXN0IGRldGFpbCByYW5nZSB0aGF0IHN0YXJ0cyBpbiBvdXIgc2VhcmNoIHJh
bmdlIChpZiBhbnkpLgorICAgICAgICBpbnQgYmFkR3JhbW1hckluZGV4ID0gZmluZEZpcnN0R3Jh
bW1hckRldGFpbChncmFtbWFyRGV0YWlscywgYmFkR3JhbW1hclBocmFzZUxvY2F0aW9uLCBiYWRH
cmFtbWFyUGhyYXNlTGVuZ3RoLCBzZWFyY2hSYW5nZVN0YXJ0T2Zmc2V0LCBzZWFyY2hSYW5nZUVu
ZE9mZnNldCwgbWFya0FsbCk7CisgICAgICAgIGlmIChiYWRHcmFtbWFySW5kZXggPj0gMCkgewor
ICAgICAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PHVuc2lnbmVkPihiYWRHcmFtbWFySW5kZXgp
IDwgZ3JhbW1hckRldGFpbHMuc2l6ZSgpKTsKKyAgICAgICAgICAgIG91dEdyYW1tYXJEZXRhaWwg
PSBncmFtbWFyRGV0YWlsc1tiYWRHcmFtbWFySW5kZXhdOworICAgICAgICB9CisKKyAgICAgICAg
Ly8gSWYgd2UgZm91bmQgYSBkZXRhaWwgaW4gcmFuZ2UsIHRoZW4gd2UgaGF2ZSBmb3VuZCB0aGUg
Zmlyc3QgYmFkIHBocmFzZSAodW5sZXNzIHdlIGZvdW5kIG9uZSBlYXJsaWVyIGJ1dAorICAgICAg
ICAvLyBrZXB0IGdvaW5nIHNvIHdlIGNvdWxkIG1hcmsgYWxsIGluc3RhbmNlcykuCisgICAgICAg
IGlmIChiYWRHcmFtbWFySW5kZXggPj0gMCAmJiBmaXJzdEJhZEdyYW1tYXJQaHJhc2UuaXNFbXB0
eSgpKSB7CisgICAgICAgICAgICBvdXRHcmFtbWFyUGhyYXNlT2Zmc2V0ID0gYmFkR3JhbW1hclBo
cmFzZUxvY2F0aW9uIC0gc2VhcmNoUmFuZ2VTdGFydE9mZnNldDsKKyAgICAgICAgICAgIGZpcnN0
QmFkR3JhbW1hclBocmFzZSA9IHBhcmFncmFwaFN0cmluZy5zdWJzdHJpbmcoYmFkR3JhbW1hclBo
cmFzZUxvY2F0aW9uLCBiYWRHcmFtbWFyUGhyYXNlTGVuZ3RoKTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgLy8gRm91bmQgb25lLiBXZSdyZSBkb25lIG5vdywgdW5sZXNzIHdlJ3JlIG1hcmtp
bmcgZWFjaCBpbnN0YW5jZS4KKyAgICAgICAgICAgIGlmICghbWFya0FsbCkKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFRoZXNlIHJlc3VsdHMgd2VyZSBh
bGwgYmV0d2VlbiB0aGUgc3RhcnQgb2YgdGhlIHBhcmFncmFwaCBhbmQgdGhlIHN0YXJ0IG9mIHRo
ZSBzZWFyY2ggcmFuZ2U7IGxvb2sKKyAgICAgICAgLy8gYmV5b25kIHRoaXMgcGhyYXNlLgorICAg
ICAgICBzdGFydE9mZnNldCA9IGJhZEdyYW1tYXJQaHJhc2VMb2NhdGlvbiArIGJhZEdyYW1tYXJQ
aHJhc2VMZW5ndGg7CisgICAgfQorICAgIAorICAgIHJldHVybiBmaXJzdEJhZEdyYW1tYXJQaHJh
c2U7CisjZWxzZQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIFVOVVNFRF9QQVJBTShv
dXRHcmFtbWFyRGV0YWlsKTsKKyAgICBVTlVTRURfUEFSQU0ob3V0R3JhbW1hclBocmFzZU9mZnNl
dCk7CisgICAgVU5VU0VEX1BBUkFNKG1hcmtBbGwpOworI2VuZGlmCit9CisKKworYm9vbCBUZXh0
Q2hlY2tpbmdIZWxwZXI6OmlzVW5ncmFtbWF0aWNhbChWZWN0b3I8U3RyaW5nPiYgZ3Vlc3Nlc1Zl
Y3RvcikgY29uc3QKK3sKKyNpZm5kZWYgQlVJTERJTkdfT05fVElHRVIKKyAgICBpZiAoIW1fY2xp
ZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBFeGNlcHRpb25Db2RlIGVjOworICAg
IGlmICghbV9yYW5nZSB8fCBtX3JhbmdlLT5jb2xsYXBzZWQoZWMpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgCisgICAgLy8gUmV0dXJucyB0cnVlIG9ubHkgaWYgdGhlIHBhc3NlZCByYW5n
ZSBleGFjdGx5IGNvcnJlc3BvbmRzIHRvIGEgYmFkIGdyYW1tYXIgZGV0YWlsIHJhbmdlLiBUaGlz
IGlzIGFuYWxvZ291cworICAgIC8vIHRvIGlzU2VsZWN0aW9uTWlzc3BlbGxlZC4gSXQncyBub3Qg
Z29vZCBlbm91Z2ggZm9yIHRoZXJlIHRvIGJlIHNvbWUgYmFkIGdyYW1tYXIgc29tZXdoZXJlIGlu
IHRoZSByYW5nZSwKKyAgICAvLyBvciBvdmVybGFwcGluZyB0aGUgcmFuZ2U7IHRoZSByYW5nZXMg
bXVzdCBleGFjdGx5IG1hdGNoLgorICAgIGd1ZXNzZXNWZWN0b3IuY2xlYXIoKTsKKyAgICBpbnQg
Z3JhbW1hclBocmFzZU9mZnNldDsKKyAgICAKKyAgICBHcmFtbWFyRGV0YWlsIGdyYW1tYXJEZXRh
aWw7CisgICAgU3RyaW5nIGJhZEdyYW1tYXJQaHJhc2UgPSBjb25zdF9jYXN0PFRleHRDaGVja2lu
Z0hlbHBlcio+KHRoaXMpLT5maW5kRmlyc3RCYWRHcmFtbWFyKGdyYW1tYXJEZXRhaWwsIGdyYW1t
YXJQaHJhc2VPZmZzZXQsIGZhbHNlKTsgICAgCisgICAgCisgICAgLy8gTm8gYmFkIGdyYW1tYXIg
aW4gdGhlc2UgcGFydHMgYXQgYWxsLgorICAgIGlmIChiYWRHcmFtbWFyUGhyYXNlLmlzRW1wdHko
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIC8vIEJhZCBncmFtbWFyLCBidXQg
cGhyYXNlIChlLmcuIHNlbnRlbmNlKSBzdGFydHMgYmV5b25kIHN0YXJ0IG9mIHJhbmdlLgorICAg
IGlmIChncmFtbWFyUGhyYXNlT2Zmc2V0ID4gMCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IAorICAgIEFTU0VSVChncmFtbWFyRGV0YWlsLmxvY2F0aW9uID49IDAgJiYgZ3JhbW1hckRldGFp
bC5sZW5ndGggPiAwKTsKKyAgICAKKyAgICAvLyBCYWQgZ3JhbW1hciwgYnV0IHN0YXJ0IG9mIGRl
dGFpbCAoZS5nLiB1bmdyYW1tYXRpY2FsIHdvcmQpIGRvZXNuJ3QgbWF0Y2ggc3RhcnQgb2YgcmFu
Z2UKKyAgICBpZiAoZ3JhbW1hckRldGFpbC5sb2NhdGlvbiArIGdyYW1tYXJQaHJhc2VPZmZzZXQp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICAvLyBCYWQgZ3JhbW1hciBhdCBzdGFy
dCBvZiByYW5nZSwgYnV0IGVuZCBvZiBiYWQgZ3JhbW1hciBpcyBiZWZvcmUgb3IgYWZ0ZXIgZW5k
IG9mIHJhbmdlCisgICAgaWYgKGdyYW1tYXJEZXRhaWwubGVuZ3RoICE9IFRleHRJdGVyYXRvcjo6
cmFuZ2VMZW5ndGgobV9yYW5nZS5nZXQoKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAK
KyAgICAvLyBVcGRhdGUgdGhlIHNwZWxsaW5nIHBhbmVsIHRvIGJlIGRpc3BsYXlpbmcgdGhpcyBl
cnJvciAod2hldGhlciBvciBub3QgdGhlIHNwZWxsaW5nIHBhbmVsIGlzIG9uIHNjcmVlbikuCisg
ICAgLy8gVGhpcyBpcyBuZWNlc3NhcnkgdG8gbWFrZSBhIHN1YnNlcXVlbnQgY2FsbCB0byBbTlNT
cGVsbENoZWNrZXIgaWdub3JlV29yZDppblNwZWxsRG9jdW1lbnRXaXRoVGFnOl0gd29yaworICAg
IC8vIGNvcnJlY3RseTsgdGhhdCBjYWxsIGJlaGF2ZXMgZGlmZmVyZW50bHkgYmFzZWQgb24gd2hl
dGhlciB0aGUgc3BlbGxpbmcgcGFuZWwgaXMgZGlzcGxheWluZyBhIG1pc3NwZWxsaW5nCisgICAg
Ly8gb3IgYSBncmFtbWFyIGVycm9yLgorICAgIG1fY2xpZW50LT51cGRhdGVTcGVsbGluZ1VJV2l0
aEdyYW1tYXJTdHJpbmcoYmFkR3JhbW1hclBocmFzZSwgZ3JhbW1hckRldGFpbCk7CisgICAgCisg
ICAgcmV0dXJuIHRydWU7CisjZWxzZQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIFVO
VVNFRF9QQVJBTShndWVzc2VzVmVjdG9yKTsKKyAgICByZXR1cm4gdHJ1ZTsKKyNlbmRpZgorfQor
CitWZWN0b3I8U3RyaW5nPiBUZXh0Q2hlY2tpbmdIZWxwZXI6Omd1ZXNzZXNGb3JNaXNzcGVsbGVk
T3JVbmdyYW1tYXRpY2FsUmFuZ2UoYm9vbCBjaGVja0dyYW1tYXIsIGJvb2wmIG1pc3NwZWxsZWQs
IGJvb2wmIHVuZ3JhbW1hdGljYWwpIGNvbnN0Cit7CisjaWYgUExBVEZPUk0oTUFDKSAmJiAhZGVm
aW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkK
KyAgICBWZWN0b3I8U3RyaW5nPiBndWVzc2VzOworICAgIEV4Y2VwdGlvbkNvZGUgZWM7CisgICAg
bWlzc3BlbGxlZCA9IGZhbHNlOworICAgIHVuZ3JhbW1hdGljYWwgPSBmYWxzZTsKKyAgICAKKyAg
ICBpZiAoIW1fY2xpZW50IHx8ICFtX3JhbmdlIHx8IG1fcmFuZ2UtPmNvbGxhcHNlZChlYykpCisg
ICAgICAgIHJldHVybiBndWVzc2VzOworCisgICAgLy8gRXhwYW5kIHRoZSByYW5nZSB0byBlbmNv
bXBhc3MgZW50aXJlIHBhcmFncmFwaHMsIHNpbmNlIHRleHQgY2hlY2tpbmcgbmVlZHMgdGhhdCBt
dWNoIGNvbnRleHQuCisgICAgaW50IHJhbmdlU3RhcnRPZmZzZXQ7CisgICAgU3RyaW5nIHBhcmFn
cmFwaFN0cmluZzsKKyAgICBSZWZQdHI8UmFuZ2U+IHBhcmFncmFwaFJhbmdlID0gcGFyYWdyYXBo
QWxpZ25lZFJhbmdlKHJhbmdlU3RhcnRPZmZzZXQsIHBhcmFncmFwaFN0cmluZyk7CisgICAgaW50
IHJhbmdlTGVuZ3RoID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChtX3JhbmdlLmdldCgpKTsK
KyAgICBpZiAoIXJhbmdlTGVuZ3RoIHx8ICFwYXJhZ3JhcGhTdHJpbmcubGVuZ3RoKCkpCisgICAg
ICAgIHJldHVybiBndWVzc2VzOworCisgICAgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gcmVz
dWx0czsKKyAgICB1aW50NjRfdCBjaGVja2luZ1R5cGVzID0gY2hlY2tHcmFtbWFyID8gKFRleHRD
aGVja2luZ1R5cGVTcGVsbGluZyB8IFRleHRDaGVja2luZ1R5cGVHcmFtbWFyKSA6IFRleHRDaGVj
a2luZ1R5cGVTcGVsbGluZzsKKyAgICBtX2NsaWVudC0+Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgocGFy
YWdyYXBoU3RyaW5nLmNoYXJhY3RlcnMoKSwgcGFyYWdyYXBoU3RyaW5nLmxlbmd0aCgpLCBjaGVj
a2luZ1R5cGVzLCByZXN1bHRzKTsKKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
cmVzdWx0cy5zaXplKCk7IGkrKykgeworICAgICAgICBjb25zdCBUZXh0Q2hlY2tpbmdSZXN1bHQq
IHJlc3VsdCA9ICZyZXN1bHRzW2ldOworICAgICAgICBpZiAocmVzdWx0LT50eXBlID09IFRleHRD
aGVja2luZ1R5cGVTcGVsbGluZyAmJiByZXN1bHQtPmxvY2F0aW9uID09IHJhbmdlU3RhcnRPZmZz
ZXQgJiYgcmVzdWx0LT5sZW5ndGggPT0gcmFuZ2VMZW5ndGgpIHsKKyAgICAgICAgICAgIFN0cmlu
ZyBtaXNzcGVsbGVkV29yZCA9IHBhcmFncmFwaFN0cmluZy5zdWJzdHJpbmcocmFuZ2VTdGFydE9m
ZnNldCwgcmFuZ2VMZW5ndGgpOworICAgICAgICAgICAgQVNTRVJUKG1pc3NwZWxsZWRXb3JkLmxl
bmd0aCgpKTsKKyAgICAgICAgICAgIG1fY2xpZW50LT5nZXRHdWVzc2VzRm9yV29yZChtaXNzcGVs
bGVkV29yZCwgZ3Vlc3Nlcyk7CisgICAgICAgICAgICBtX2NsaWVudC0+dXBkYXRlU3BlbGxpbmdV
SVdpdGhNaXNzcGVsbGVkV29yZChtaXNzcGVsbGVkV29yZCk7CisgICAgICAgICAgICBtaXNzcGVs
bGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiBndWVzc2VzOworICAgICAgICB9CisgICAg
fQorICAgIAorICAgIGlmICghY2hlY2tHcmFtbWFyKQorICAgICAgICByZXR1cm4gZ3Vlc3NlczsK
KyAgICAgICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlc3VsdHMuc2l6ZSgpOyBp
KyspIHsKKyAgICAgICAgY29uc3QgVGV4dENoZWNraW5nUmVzdWx0KiByZXN1bHQgPSAmcmVzdWx0
c1tpXTsKKyAgICAgICAgaWYgKHJlc3VsdC0+dHlwZSA9PSBUZXh0Q2hlY2tpbmdUeXBlR3JhbW1h
ciAmJiByZXN1bHQtPmxvY2F0aW9uIDw9IHJhbmdlU3RhcnRPZmZzZXQgJiYgcmVzdWx0LT5sb2Nh
dGlvbiArIHJlc3VsdC0+bGVuZ3RoID49IHJhbmdlU3RhcnRPZmZzZXQgKyByYW5nZUxlbmd0aCkg
eworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IHJlc3VsdC0+ZGV0YWlscy5z
aXplKCk7IGorKykgeworICAgICAgICAgICAgICAgIGNvbnN0IEdyYW1tYXJEZXRhaWwqIGRldGFp
bCA9ICZyZXN1bHQtPmRldGFpbHNbal07CisgICAgICAgICAgICAgICAgQVNTRVJUKGRldGFpbC0+
bGVuZ3RoID4gMCAmJiBkZXRhaWwtPmxvY2F0aW9uID49IDApOworICAgICAgICAgICAgICAgIGlm
IChyZXN1bHQtPmxvY2F0aW9uICsgZGV0YWlsLT5sb2NhdGlvbiA9PSByYW5nZVN0YXJ0T2Zmc2V0
ICYmIGRldGFpbC0+bGVuZ3RoID09IHJhbmdlTGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgICAg
IFN0cmluZyBiYWRHcmFtbWFyUGhyYXNlID0gcGFyYWdyYXBoU3RyaW5nLnN1YnN0cmluZyhyZXN1
bHQtPmxvY2F0aW9uLCByZXN1bHQtPmxlbmd0aCk7CisgICAgICAgICAgICAgICAgICAgIEFTU0VS
VChiYWRHcmFtbWFyUGhyYXNlLmxlbmd0aCgpKTsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBrID0gMDsgayA8IGRldGFpbC0+Z3Vlc3Nlcy5zaXplKCk7IGsrKykKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGd1ZXNzZXMuYXBwZW5kKGRldGFpbC0+Z3Vlc3Nlc1trXSk7CisgICAg
ICAgICAgICAgICAgICAgIG1fY2xpZW50LT51cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJp
bmcoYmFkR3JhbW1hclBocmFzZSwgKmRldGFpbCk7CisgICAgICAgICAgICAgICAgICAgIHVuZ3Jh
bW1hdGljYWwgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ3Vlc3NlczsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0
dXJuIGd1ZXNzZXM7CisjZWxzZQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIFVOVVNF
RF9QQVJBTShjaGVja0dyYW1tYXIpOworICAgIFVOVVNFRF9QQVJBTShtaXNzcGVsbGVkKTsKKyAg
ICBVTlVTRURfUEFSQU0odW5ncmFtbWF0aWNhbCk7CisgICAgcmV0dXJuIFZlY3RvcjxTdHJpbmc+
KCk7CisjZW5kaWYKK30KKworCit2b2lkIFRleHRDaGVja2luZ0hlbHBlcjo6bWFya0FsbE1pc3Nw
ZWxsaW5ncyhSZWZQdHI8UmFuZ2U+JiBmaXJzdE1pc3NwZWxsaW5nUmFuZ2UpCit7CisgICAgLy8g
VXNlIHRoZSAibWFya0FsbCIgZmVhdHVyZSBvZiBmaW5kRmlyc3RNaXNzcGVsbGluZy4gSWdub3Jl
IHRoZSByZXR1cm4gdmFsdWUgYW5kIHRoZSAib3V0IHBhcmFtZXRlciI7CisgICAgLy8gYWxsIHdl
IG5lZWQgdG8gZG8gaXMgbWFyayBldmVyeSBpbnN0YW5jZS4KKyAgICBpbnQgaWdub3JlZE9mZnNl
dDsKKyAgICBmaW5kRmlyc3RNaXNzcGVsbGluZyhpZ25vcmVkT2Zmc2V0LCB0cnVlLCBmaXJzdE1p
c3NwZWxsaW5nUmFuZ2UpOworfQorCit2b2lkIFRleHRDaGVja2luZ0hlbHBlcjo6bWFya0FsbEJh
ZEdyYW1tYXIoKQoreworI2lmbmRlZiBCVUlMRElOR19PTl9USUdFUgorICAgIC8vIFVzZSB0aGUg
Im1hcmtBbGwiIGZlYXR1cmUgb2YgZmluZEZpcnN0QmFkR3JhbW1hci4gSWdub3JlIHRoZSByZXR1
cm4gdmFsdWUgYW5kICJvdXQgcGFyYW1ldGVycyI7IGFsbCB3ZSBuZWVkIHRvCisgICAgLy8gZG8g
aXMgbWFyayBldmVyeSBpbnN0YW5jZS4KKyAgICBHcmFtbWFyRGV0YWlsIGlnbm9yZWRHcmFtbWFy
RGV0YWlsOworICAgIGludCBpZ25vcmVkT2Zmc2V0OworICAgIGZpbmRGaXJzdEJhZEdyYW1tYXIo
aWdub3JlZEdyYW1tYXJEZXRhaWwsIGlnbm9yZWRPZmZzZXQsIHRydWUpOworI2Vsc2UKKyAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyNlbmRpZgorfQorCit9CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2VkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmggYi9XZWJDb3JlL2VkaXRpbmcvVGV4dENoZWNr
aW5nSGVscGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWRkM2IzZDVjMTI3ZjI2ZWM3NGQxZTM0MjZlNWE2NzZl
YzQzNDFjMwotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvZWRpdGluZy9UZXh0Q2hlY2tpbmdI
ZWxwZXIuaApAQCAtMCwwICsxLDUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3
LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAwOCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRl
ZiBUZXh0Q2hlY2tpbmdIZWxwZXJfaAorI2RlZmluZSBUZXh0Q2hlY2tpbmdIZWxwZXJfaAorCisj
aW5jbHVkZSAiRWRpdG9yQ2xpZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
UmFuZ2U7CisKK2NsYXNzIFRleHRDaGVja2luZ0hlbHBlciA6IHB1YmxpYyBOb25jb3B5YWJsZSB7
CitwdWJsaWM6CisgICAgVGV4dENoZWNraW5nSGVscGVyKEVkaXRvckNsaWVudCosIFBhc3NSZWZQ
dHI8UmFuZ2U+KTsKKyAgICB+VGV4dENoZWNraW5nSGVscGVyKCk7CisKKyAgICBTdHJpbmcgZmlu
ZEZpcnN0TWlzc3BlbGxpbmcoaW50JiBmaXJzdE1pc3NwZWxsaW5nT2Zmc2V0LCBib29sIG1hcmtB
bGwsIFJlZlB0cjxSYW5nZT4mIGZpcnN0TWlzc3BlbGxpbmdSYW5nZSk7CisgICAgU3RyaW5nIGZp
bmRGaXJzdE1pc3NwZWxsaW5nT3JCYWRHcmFtbWFyKGJvb2wgY2hlY2tHcmFtbWFyLCBib29sJiBv
dXRJc1NwZWxsaW5nLCBpbnQmIG91dEZpcnN0Rm91bmRPZmZzZXQsIEdyYW1tYXJEZXRhaWwmIG91
dEdyYW1tYXJEZXRhaWwpOworICAgIFN0cmluZyBmaW5kRmlyc3RCYWRHcmFtbWFyKEdyYW1tYXJE
ZXRhaWwmIG91dEdyYW1tYXJEZXRhaWwsIGludCYgb3V0R3JhbW1hclBocmFzZU9mZnNldCwgYm9v
bCBtYXJrQWxsKTsKKyAgICBpbnQgZmluZEZpcnN0R3JhbW1hckRldGFpbChjb25zdCBWZWN0b3I8
R3JhbW1hckRldGFpbD4mIGdyYW1tYXJEZXRhaWxzLCBpbnQgYmFkR3JhbW1hclBocmFzZUxvY2F0
aW9uLCBpbnQgYmFkR3JhbW1hclBocmFzZUxlbmd0aCwgaW50IHN0YXJ0T2Zmc2V0LCBpbnQgZW5k
T2Zmc2V0LCBib29sIG1hcmtBbGwpOworICAgIHZvaWQgbWFya0FsbE1pc3NwZWxsaW5ncyhSZWZQ
dHI8UmFuZ2U+JiBmaXJzdE1pc3NwZWxsaW5nUmFuZ2UpOworICAgIHZvaWQgbWFya0FsbEJhZEdy
YW1tYXIoKTsKKworICAgIGJvb2wgaXNVbmdyYW1tYXRpY2FsKFZlY3RvcjxTdHJpbmc+JiBndWVz
c2VzVmVjdG9yKSBjb25zdDsKKyAgICBWZWN0b3I8U3RyaW5nPiBndWVzc2VzRm9yTWlzc3BlbGxl
ZE9yVW5ncmFtbWF0aWNhbFJhbmdlKGJvb2wgY2hlY2tHcmFtbWFyLCBib29sJiBtaXNzcGVsbGVk
LCBib29sJiB1bmdyYW1tYXRpY2FsKSBjb25zdDsKKyAgICBQYXNzUmVmUHRyPFJhbmdlPiBwYXJh
Z3JhcGhBbGlnbmVkUmFuZ2UoaW50JiBvZmZzZXRJbnRvUGFyYWdyYXBoQWxpZ25lZFJhbmdlLCBT
dHJpbmcmIHBhcmFncmFwaFN0cmluZykgY29uc3Q7Citwcml2YXRlOgorICAgIEVkaXRvckNsaWVu
dCogbV9jbGllbnQ7CisgICAgUmVmUHRyPFJhbmdlPiBtX3JhbmdlOworfTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVGV4dENoZWNraW5nSGVscGVyX2gK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>72486</attachid>
            <date>2010-10-31 23:22:04 -0700</date>
            <delta_ts>2010-10-31 23:29:59 -0700</delta_ts>
            <desc>Added an AllInOne entry for windows build.</desc>
            <filename>bug-48287-20101101152201.patch</filename>
            <type>text/plain</type>
            <size>74324</size>
            <attacher name="Hajime Morrita">morrita</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9XZWJDb3JlL0NNYWtlTGlzdHMu
dHh0CmluZGV4IGMxYThlMTE2YmMxZjcyMmVmNzIwMmE0YmQyZDBiOWY4Mjc3ZDU5NjIuLjRiMDU0
NzdiMmYwZjAxYjQ1ODAzY2ZkZjVkMzAxMzNiNTMwYmI3YWMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
Q01ha2VMaXN0cy50eHQKKysrIGIvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAtOTI2LDYgKzky
Niw3IEBAIFNFVChXZWJDb3JlX1NPVVJDRVMKICAgICBlZGl0aW5nL1NwbGl0RWxlbWVudENvbW1h
bmQuY3BwCiAgICAgZWRpdGluZy9TcGxpdFRleHROb2RlQ29tbWFuZC5jcHAKICAgICBlZGl0aW5n
L1NwbGl0VGV4dE5vZGVDb250YWluaW5nRWxlbWVudENvbW1hbmQuY3BwCisgICAgZWRpdGluZy9U
ZXh0Q2hlY2tpbmdIZWxwZXIuY3BwCiAgICAgZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwCiAgICAg
ZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcAogICAgIGVkaXRpbmcvVW5saW5rQ29tbWFuZC5jcHAK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
OTBkZjg1ZGM0NmE4MDdmMGVkMzcyN2RmMzRkNDBjNGUyY2FkY2Y5OS4uYWY3NmMxMGY1MjMxZjg2
NGY3MzExYjU4NzY5MTEyMjkxODRjYmM3MSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0OCBAQAorMjAxMC0xMC0yNiAgTU9S
SVRBIEhhamltZSAgPG1vcnJpdGFAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBL
ZW50IFRhbXVyYS4KKworICAgICAgICBSZWZhY3RvcmluZzogU3BlbGxjaGVja2luZyByZWxhdGVk
IHN0YXRpYyBmdW5jdGlvbnMgY291bGQgZm9ybSBhIGNsYXNzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00ODI4NworCisgICAgICAgIEV4dHJhY3RlZCBz
cGVsbGNoZWNrIHJlbGF0ZWQgc3RhdGljIGZ1bmN0aW9ucyB0byBUZXh0Q2hlY2tpbmdIZWxwZXIg
Y2xhc3MsCisgICAgICAgIHdoaWNoIGhhcyBFZGl0b3JDbGllbnQgYW5kIFJhbmdlIGFzIGl0cyBt
ZW1iZXIuCisgICAgICAgIAorICAgICAgICBObyBuZXcgdGVzdHMuIEp1c3QgYSByZWZhY3Rvcmlu
Zy4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEdOVW1ha2VmaWxlLmFt
OgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAgICAg
ICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogZWRpdGluZy9FZGl0aW5nQWxsSW5P
bmUuY3BwCisgICAgICAgICogZWRpdGluZy9FZGl0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjphZHZhbmNlVG9OZXh0TWlzc3BlbGxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RWRp
dG9yOjppc1NlbGVjdGlvblVuZ3JhbW1hdGljYWwpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9y
OjpndWVzc2VzRm9yVW5ncmFtbWF0aWNhbFNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpF
ZGl0b3I6Omd1ZXNzZXNGb3JNaXNzcGVsbGVkT3JVbmdyYW1tYXRpY2FsU2VsZWN0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nVG9Qb3Np
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3NPckJhZEdy
YW1tYXIpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bWFya0JhZEdyYW1tYXIpOgorICAgICAgICAoV2ViQ29y
ZTo6RWRpdG9yOjptYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y2hhbmdlQmFja1RvUmVwbGFjZWRTdHJpbmcpOgorICAg
ICAgICAqIGVkaXRpbmcvRWRpdG9yLmg6CisgICAgICAgICogZWRpdGluZy9UZXh0Q2hlY2tpbmdI
ZWxwZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRDaGVja2luZ0hlbHBlcjo6
VGV4dENoZWNraW5nSGVscGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDaGVja2luZ0hlbHBl
cjo6flRleHRDaGVja2luZ0hlbHBlcik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Q2hlY2tpbmdI
ZWxwZXI6OnBhcmFncmFwaEFsaWduZWRSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Q2hl
Y2tpbmdIZWxwZXI6OmZpbmRGaXJzdE1pc3NwZWxsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlRl
eHRDaGVja2luZ0hlbHBlcjo6ZmluZEZpcnN0TWlzc3BlbGxpbmdPckJhZEdyYW1tYXIpOgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dENoZWNraW5nSGVscGVyOjpmaW5kRmlyc3RHcmFtbWFyRGV0YWls
KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDaGVja2luZ0hlbHBlcjo6ZmluZEZpcnN0QmFkR3Jh
bW1hcik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Q2hlY2tpbmdIZWxwZXI6OmlzVW5ncmFtbWF0
aWNhbCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Q2hlY2tpbmdIZWxwZXI6Omd1ZXNzZXNGb3JN
aXNzcGVsbGVkT3JVbmdyYW1tYXRpY2FsUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENo
ZWNraW5nSGVscGVyOjptYXJrQWxsTWlzc3BlbGxpbmdzKToKKyAgICAgICAgKFdlYkNvcmU6OlRl
eHRDaGVja2luZ0hlbHBlcjo6bWFya0FsbEJhZEdyYW1tYXIpOgorICAgICAgICAqIGVkaXRpbmcv
VGV4dENoZWNraW5nSGVscGVyLmg6IEFkZGVkLgorCiAyMDEwLTEwLTMxICBYYW4gTG9wZXogIDx4
bG9wZXpAaWdhbGlhLmNvbT4KIAogICAgICAgICBUcnkgdG8gZml4IHRoZSBHVEsrIGJ1aWxkLgpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbSBiL1dlYkNvcmUvR05VbWFrZWZpbGUu
YW0KaW5kZXggZjcyMTYwODg3ZDlkOThhM2U0ZDEyZDRmYmFhZjNjOTUwOWZhMDc3Yi4uN2ZlMWRh
YzdmMzg1MzFhODI3NDFmM2UwYjg0NDQzYzdjOGI1NmQxMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9H
TlVtYWtlZmlsZS5hbQorKysgYi9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCkBAIC0xMzU1LDYgKzEz
NTUsOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvZWRpdGluZy9TcGxpdFRleHRO
b2RlQ29udGFpbmluZ0VsZW1lbnRDb21tYW5kLmNwcCBcCiAJV2ViQ29yZS9lZGl0aW5nL1NwbGl0
VGV4dE5vZGVDb250YWluaW5nRWxlbWVudENvbW1hbmQuaCBcCiAJV2ViQ29yZS9lZGl0aW5nL1Rl
eHRBZmZpbml0eS5oIFwKKwlXZWJDb3JlL2VkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmNwcCBc
CisJV2ViQ29yZS9lZGl0aW5nL1RleHRDaGVja2luZ0hlbHBlci5oIFwKIAlXZWJDb3JlL2VkaXRp
bmcvVGV4dEdyYW51bGFyaXR5LmggXAogCVdlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3Bw
IFwKIAlXZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmggXApkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9XZWJDb3JlLmd5cGkgYi9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCBhMGMzZDUyN2Y0YTRh
YTkxYjYxYTg0OWVlM2I4ZWYwNmRjOGI5N2Y2Li5kOWM1ZTM5YWUyOTljZmU2NTBiNTBlN2E5ZmE1
ZWZmZWI2NzdjMjk5IDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9XZWJD
b3JlL1dlYkNvcmUuZ3lwaQpAQCAtMTQzNyw2ICsxNDM3LDggQEAKICAgICAgICAgICAgICdlZGl0
aW5nL1NwbGl0VGV4dE5vZGVDb250YWluaW5nRWxlbWVudENvbW1hbmQuY3BwJywKICAgICAgICAg
ICAgICdlZGl0aW5nL1NwbGl0VGV4dE5vZGVDb250YWluaW5nRWxlbWVudENvbW1hbmQuaCcsCiAg
ICAgICAgICAgICAnZWRpdGluZy9UZXh0QWZmaW5pdHkuaCcsCisgICAgICAgICAgICAnZWRpdGlu
Zy9UZXh0Q2hlY2tpbmdIZWxwZXIuY3BwJywKKyAgICAgICAgICAgICdlZGl0aW5nL1RleHRDaGVj
a2luZ0hlbHBlci5oJywKICAgICAgICAgICAgICdlZGl0aW5nL1RleHRHcmFudWxhcml0eS5oJywK
ICAgICAgICAgICAgICdlZGl0aW5nL1RleHRJdGVyYXRvci5jcHAnLAogICAgICAgICAgICAgJ2Vk
aXRpbmcvVGV4dEl0ZXJhdG9yLmgnLApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnBybyBi
L1dlYkNvcmUvV2ViQ29yZS5wcm8KaW5kZXggMzQ2OTdkZjI4MDFjMDc5MjYyYzU3OWQwMjUyYWQy
NWFlNzgzZTYzNy4uNGYzZWNjMDVlZTY2NTgwYzE2ZTlkZTg0Yjc1NmZiNWIwMDI2ZTgxZSAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnBybworKysgYi9XZWJDb3JlL1dlYkNvcmUucHJvCkBA
IC04MTcsNiArODE3LDcgQEAgU09VUkNFUyArPSBcCiAgICAgZWRpdGluZy9TcGxpdEVsZW1lbnRD
b21tYW5kLmNwcCBcCiAgICAgZWRpdGluZy9TcGxpdFRleHROb2RlQ29tbWFuZC5jcHAgXAogICAg
IGVkaXRpbmcvU3BsaXRUZXh0Tm9kZUNvbnRhaW5pbmdFbGVtZW50Q29tbWFuZC5jcHAgXAorICAg
IGVkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmNwcCBcCiAgICAgZWRpdGluZy9UZXh0SXRlcmF0
b3IuY3BwIFwKICAgICBlZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwIFwKICAgICBlZGl0aW5nL1Vu
bGlua0NvbW1hbmQuY3BwIFwKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2Vi
Q29yZS52Y3Byb2ogYi9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCmluZGV4
IDc0MzIyOGIxMzM0ZDE1Zjg4YmJmNTk2OWIzYzk2ODQ4MjlkOTRhMzMuLjY1MDU2Zjc4MmRlY2Nk
N2UxZDk1MTgxYzk2Yjg3NTMyMDgzMjhiMzEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS52
Y3Byb2ovV2ViQ29yZS52Y3Byb2oKKysrIGIvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3Jl
LnZjcHJvagpAQCAtNDc5NDAsNiArNDc5NDAsNjIgQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJ
CTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cZWRpdGluZ1xUZXh0Q2hlY2tpbmdIZWxwZXIu
Y3BwIg0KKwkJCQk+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iRGVidWd8
V2luMzIiDQorCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSINCisJCQkJCT4NCisJCQkJCTxU
b29sDQorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCS8+DQorCQkJCTwvRmls
ZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVs
ZWFzZXxXaW4zMiINCisJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIg0KKwkJCQkJPg0KKwkJ
CQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJLz4NCisJCQkJ
PC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1l
PSJEZWJ1Z19JbnRlcm5hbHxXaW4zMiINCisJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIg0K
KwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJ
CQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9u
DQorCQkJCQlOYW1lPSJEZWJ1Z19DYWlyb3xXaW4zMiINCisJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxk
PSJ0cnVlIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJU
b29sIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25m
aWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlX0NhaXJvfFdpbjMyIg0KKwkJCQkJRXhjbHVk
ZWRGcm9tQnVpbGQ9InRydWUiDQorCQkJCQk+DQorCQkJCQk8VG9vbA0KKwkJCQkJCU5hbWU9IlZD
Q0xDb21waWxlclRvb2wiDQorCQkJCQkvPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJ
CQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IkRlYnVnX0FsbHxXaW4zMiINCisJCQkJ
CUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIg0KKwkJCQkJPg0KKwkJCQkJPFRvb2wNCisJCQkJCQlO
YW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJLz4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlv
bj4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxlZGl0aW5n
XFRleHRDaGVja2luZ0hlbHBlci5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQog
CQkJCVJlbGF0aXZlUGF0aD0iLi5cZWRpdGluZ1xUZXh0R3JhbnVsYXJpdHkuaCINCiAJCQkJPg0K
IAkJCTwvRmlsZT4NCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvaiBiL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmlu
ZGV4IDE1ZGZkNjJlNzZiZGZkMGYzODI4ZTRjNzRlZmFhMWFhMDFkZWIwODMuLmMxYmYyM2IzMjZj
YWRmMjU3MTEwYjk2NzkxYzI5YTYwNDA1ZDRhMzcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCkBAIC0zMDY5LDYgKzMwNjksOCBAQAogCQlBN0QzQzUyNDBCNTc2
QjRCMDAyQ0E0NTAgLyogUGFzdGVib2FyZEhlbHBlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdEM0M1MjMwQjU3NkI0QjAwMkNBNDUwIC8qIFBhc3Rl
Ym9hcmRIZWxwZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQlBN0Q2QjM0OTBGNjExMDQ1MDBCNzlGRDEgLyogV29ya2VyU2NyaXB0TG9hZGVyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0Q2QjM0NzBG
NjExMDQ1MDBCNzlGRDEgLyogV29ya2VyU2NyaXB0TG9hZGVyLmggKi87IH07CiAJCUE3RDZCMzRB
MEY2MTEwNDUwMEI3OUZEMSAvKiBXb3JrZXJTY3JpcHRMb2FkZXIuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdENkIzNDgwRjYxMTA0NTAwQjc5RkQx
IC8qIFdvcmtlclNjcmlwdExvYWRlci5jcHAgKi87IH07CisJCUE3REJGOEREMTI3NjkxOUMwMDZC
NjAwOCAvKiBUZXh0Q2hlY2tpbmdIZWxwZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQTdEQkY4REIxMjc2OTE5QzAwNkI2MDA4IC8qIFRleHRDaGVj
a2luZ0hlbHBlci5jcHAgKi87IH07CisJCUE3REJGOERFMTI3NjkxOUMwMDZCNjAwOCAvKiBUZXh0
Q2hlY2tpbmdIZWxwZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEE3REJGOERDMTI3NjkxOUMwMDZCNjAwOCAvKiBUZXh0Q2hlY2tpbmdIZWxwZXIuaCAq
LzsgfTsKIAkJQTdGMzM4QTMxMUMwRUZDQTAwQTMyMEE3IC8qIFNoYWRvd0VsZW1lbnQuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdGMzM4QTExMUMw
RUZDQTAwQTMyMEE3IC8qIFNoYWRvd0VsZW1lbnQuY3BwICovOyB9OwogCQlBN0YzMzhBNDExQzBF
RkNBMDBBMzIwQTcgLyogU2hhZG93RWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQTdGMzM4QTIxMUMwRUZDQTAwQTMyMEE3IC8qIFNoYWRvd0Vs
ZW1lbnQuaCAqLzsgfTsKIAkJQTgwOUYxNDcwQjczNzkzQTAwMkU0RDdGIC8qIFJlbmRlclNWR0dy
YWRpZW50U3RvcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQTgwOUYxNDUwQjczNzkzQTAwMkU0RDdGIC8qIFJlbmRlclNWR0dyYWRpZW50U3RvcC5oICov
OyB9OwpAQCAtOTE1Niw2ICs5MTU4LDggQEAKIAkJQTdEM0M1MjMwQjU3NkI0QjAwMkNBNDUwIC8q
IFBhc3RlYm9hcmRIZWxwZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGFz
dGVib2FyZEhlbHBlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBN0Q2QjM0NzBG
NjExMDQ1MDBCNzlGRDEgLyogV29ya2VyU2NyaXB0TG9hZGVyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IFdvcmtlclNjcmlwdExvYWRlci5oOyBwYXRoID0gd29ya2Vycy9Xb3Jr
ZXJTY3JpcHRMb2FkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTdENkIzNDgw
RjYxMTA0NTAwQjc5RkQxIC8qIFdvcmtlclNjcmlwdExvYWRlci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXb3JrZXJTY3JpcHRMb2FkZXIuY3BwOyBwYXRoID0gd29y
a2Vycy9Xb3JrZXJTY3JpcHRMb2FkZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlBN0RCRjhEQjEyNzY5MTlDMDA2QjYwMDggLyogVGV4dENoZWNraW5nSGVscGVyLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRleHRDaGVja2luZ0hlbHBlci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE3REJGOERDMTI3NjkxOUMwMDZCNjAwOCAv
KiBUZXh0Q2hlY2tpbmdIZWxwZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
VGV4dENoZWNraW5nSGVscGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3RjMz
OEExMTFDMEVGQ0EwMEEzMjBBNyAvKiBTaGFkb3dFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNoYWRvd0VsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlBN0YzMzhBMjExQzBFRkNBMDBBMzIwQTcgLyogU2hhZG93RWxlbWVudC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTaGFkb3dFbGVtZW50Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4MDlGMTQ1MEI3Mzc5M0EwMDJFNEQ3RiAvKiBSZW5k
ZXJTVkdHcmFkaWVudFN0b3AuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVu
ZGVyU1ZHR3JhZGllbnRTdG9wLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNDU0
Niw2ICsxNDU1MCw4IEBACiAJCQkJOTMzMDlEQzcwOTlFNjQ5MTAwNTZFNTgxIC8qIFNwbGl0VGV4
dE5vZGVDb250YWluaW5nRWxlbWVudENvbW1hbmQuaCAqLywKIAkJCQk5MzMwOURDODA5OUU2NDkx
MDA1NkU1ODEgLyogVGV4dEFmZmluaXR5LmggKi8sCiAJCQkJOTMzMDlEQzkwOTlFNjQ5MTAwNTZF
NTgxIC8qIFRleHRHcmFudWxhcml0eS5oICovLAorCQkJCUE3REJGOERCMTI3NjkxOUMwMDZCNjAw
OCAvKiBUZXh0Q2hlY2tpbmdIZWxwZXIuY3BwICovLAorCQkJCUE3REJGOERDMTI3NjkxOUMwMDZC
NjAwOCAvKiBUZXh0Q2hlY2tpbmdIZWxwZXIuaCAqLywKIAkJCQk5MzMwOURDQzA5OUU2NDkxMDA1
NkU1ODEgLyogVGV4dEl0ZXJhdG9yLmNwcCAqLywKIAkJCQk5MzMwOURDRDA5OUU2NDkxMDA1NkU1
ODEgLyogVGV4dEl0ZXJhdG9yLmggKi8sCiAJCQkJOTMzMDlEQ0EwOTlFNjQ5MTAwNTZFNTgxIC8q
IFR5cGluZ0NvbW1hbmQuY3BwICovLApAQCAtMjEwMTIsNiArMjEwMTgsNyBAQAogCQkJCUIyQzNE
QTM0MEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0Qm91bmRhcmllcy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQjJDM0RBMzYwRDAwNkMxRDAwRUY2RjI2IC8qIFRleHRCcmVha0l0ZXJhdG9yLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCMkMzREEzODBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dEJyZWFrSXRlcmF0
b3JJbnRlcm5hbElDVS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTdEQkY4REUxMjc2OTE5QzAwNkI2
MDA4IC8qIFRleHRDaGVja2luZ0hlbHBlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJDM0RBM0Ew
RDAwNkMxRDAwRUY2RjI2IC8qIFRleHRDb2RlYy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJDM0RB
M0MwRDAwNkMxRDAwRUY2RjI2IC8qIFRleHRDb2RlY0lDVS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QjJDM0RBM0UwRDAwNkMxRDAwRUY2RjI2IC8qIFRleHRDb2RlY0xhdGluMS5oIGluIEhlYWRlcnMg
Ki8sCkBAIC0yMzYxMyw2ICsyMzYyMCw3IEBACiAJCQkJQjJBRkZDOTcwRDAwQTVERjAwMzAwNzRE
IC8qIFRleHRCb3VuZGFyaWVzLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQjJDM0RBMzcwRDAwNkMx
RDAwRUY2RjI2IC8qIFRleHRCcmVha0l0ZXJhdG9ySUNVLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUIyQUZGQzk4MEQwMEE1REYwMDMwMDc0RCAvKiBUZXh0QnJlYWtJdGVyYXRvckludGVybmFsSUNV
TWFjLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJQTdEQkY4REQxMjc2OTE5QzAwNkI2MDA4IC8qIFRl
eHRDaGVja2luZ0hlbHBlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMkMzREEzOTBEMDA2QzFE
MDBFRjZGMjYgLyogVGV4dENvZGVjLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyQzNEQTNCMEQw
MDZDMUQwMEVGNkYyNiAvKiBUZXh0Q29kZWNJQ1UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjJD
M0RBM0QwRDAwNkMxRDAwRUY2RjI2IC8qIFRleHRDb2RlY0xhdGluMS5jcHAgaW4gU291cmNlcyAq
LywKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nQWxsSW5PbmUuY3BwIGIvV2Vi
Q29yZS9lZGl0aW5nL0VkaXRpbmdBbGxJbk9uZS5jcHAKaW5kZXggYmE0ODRiZTAyZTdkZWE1ODI2
OTA4YjMwZjJlNTQ2YThlNWQ4NWQ3NS4uODE0ODNmODE0YWNlMzQzYWIwYzNmNWVjNGIxNjU5NzU3
YzcyMWFiOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdBbGxJbk9uZS5jcHAK
KysrIGIvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdBbGxJbk9uZS5jcHAKQEAgLTY1LDYgKzY1LDcg
QEAKICNpbmNsdWRlIDxTcGxpdEVsZW1lbnRDb21tYW5kLmNwcD4KICNpbmNsdWRlIDxTcGxpdFRl
eHROb2RlQ29tbWFuZC5jcHA+CiAjaW5jbHVkZSA8U3BsaXRUZXh0Tm9kZUNvbnRhaW5pbmdFbGVt
ZW50Q29tbWFuZC5jcHA+CisjaW5jbHVkZSA8VGV4dENoZWNraW5nSGVscGVyLmNwcD4KICNpbmNs
dWRlIDxUZXh0SXRlcmF0b3IuY3BwPgogI2luY2x1ZGUgPFR5cGluZ0NvbW1hbmQuY3BwPgogI2lu
Y2x1ZGUgPFVubGlua0NvbW1hbmQuY3BwPgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9lZGl0aW5nL0Vk
aXRvci5jcHAgYi9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAppbmRleCAxNjliNzY1ZjQzNWE3
MDJjOWYxZDI4NDYwN2YzNTJhZDU4MTM0MDE0Li44YTRlZjU5OTQ4ZWE3NGNlODE3ODYxMmYwZjlj
MDYyOWEzODRhNTNkIDEwMDY0NAotLS0gYS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAorKysg
Yi9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcApAQCAtNjIsNiArNjIsNyBAQAogI2luY2x1ZGUg
Ik5vZGVMaXN0LmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlBhc3RlYm9hcmQuaCIK
KyNpbmNsdWRlICJUZXh0Q2hlY2tpbmdIZWxwZXIuaCIKICNpbmNsdWRlICJSZW1vdmVGb3JtYXRD
b21tYW5kLmgiCiAjaW5jbHVkZSAiUmVuZGVyQmxvY2suaCIKICNpbmNsdWRlICJSZW5kZXJQYXJ0
LmgiCkBAIC0xNjU5LDMyOCArMTY2MCw2IEBAIHZvaWQgRWRpdG9yOjpsZWFyblNwZWxsaW5nKCkK
ICAgICBjbGllbnQoKS0+bGVhcm5Xb3JkKHRleHQpOwogfQogCi1zdGF0aWMgU3RyaW5nIGZpbmRG
aXJzdE1pc3NwZWxsaW5nSW5SYW5nZShFZGl0b3JDbGllbnQqIGNsaWVudCwgUmFuZ2UqIHNlYXJj
aFJhbmdlLCBpbnQmIGZpcnN0TWlzc3BlbGxpbmdPZmZzZXQsIGJvb2wgbWFya0FsbCwgUmVmUHRy
PFJhbmdlPiYgZmlyc3RNaXNzcGVsbGluZ1JhbmdlKQotewotICAgIEFTU0VSVF9BUkcoY2xpZW50
LCBjbGllbnQpOwotICAgIEFTU0VSVF9BUkcoc2VhcmNoUmFuZ2UsIHNlYXJjaFJhbmdlKTsKLSAg
ICAKLSAgICBXb3JkQXdhcmVJdGVyYXRvciBpdChzZWFyY2hSYW5nZSk7Ci0gICAgZmlyc3RNaXNz
cGVsbGluZ09mZnNldCA9IDA7Ci0gICAgCi0gICAgU3RyaW5nIGZpcnN0TWlzc3BlbGxpbmc7Ci0g
ICAgaW50IGN1cnJlbnRDaHVua09mZnNldCA9IDA7Ci0KLSAgICB3aGlsZSAoIWl0LmF0RW5kKCkp
IHsKLSAgICAgICAgY29uc3QgVUNoYXIqIGNoYXJzID0gaXQuY2hhcmFjdGVycygpOwotICAgICAg
ICBpbnQgbGVuID0gaXQubGVuZ3RoKCk7Ci0gICAgICAgIAotICAgICAgICAvLyBTa2lwIHNvbWUg
d29yayBmb3Igb25lLXNwYWNlLWNoYXIgaHVua3MKLSAgICAgICAgaWYgKCEobGVuID09IDEgJiYg
Y2hhcnNbMF0gPT0gJyAnKSkgewotICAgICAgICAgICAgCi0gICAgICAgICAgICBpbnQgbWlzc3Bl
bGxpbmdMb2NhdGlvbiA9IC0xOwotICAgICAgICAgICAgaW50IG1pc3NwZWxsaW5nTGVuZ3RoID0g
MDsKLSAgICAgICAgICAgIGNsaWVudC0+Y2hlY2tTcGVsbGluZ09mU3RyaW5nKGNoYXJzLCBsZW4s
ICZtaXNzcGVsbGluZ0xvY2F0aW9uLCAmbWlzc3BlbGxpbmdMZW5ndGgpOwotCi0gICAgICAgICAg
ICAvLyA1NDkwNjI3IHNob3dzIHRoYXQgdGhlcmUgd2FzIHNvbWUgY29kZSBwYXRoIGhlcmUgd2hl
cmUgdGhlIFN0cmluZyBjb25zdHJ1Y3RvciBiZWxvdyBjcmFzaGVzLgotICAgICAgICAgICAgLy8g
V2UgZG9uJ3Qga25vdyBleGFjdGx5IHdoYXQgY29tYmluYXRpb24gb2YgYmFkIGlucHV0IGNhdXNl
ZCB0aGlzLCBzbyB3ZSdyZSBtYWtpbmcgdGhpcyBtdWNoCi0gICAgICAgICAgICAvLyBtb3JlIHJv
YnVzdCBhZ2FpbnN0IGJhZCBpbnB1dCBvbiByZWxlYXNlIGJ1aWxkcy4KLSAgICAgICAgICAgIEFT
U0VSVChtaXNzcGVsbGluZ0xlbmd0aCA+PSAwKTsKLSAgICAgICAgICAgIEFTU0VSVChtaXNzcGVs
bGluZ0xvY2F0aW9uID49IC0xKTsKLSAgICAgICAgICAgIEFTU0VSVCghbWlzc3BlbGxpbmdMZW5n
dGggfHwgbWlzc3BlbGxpbmdMb2NhdGlvbiA+PSAwKTsKLSAgICAgICAgICAgIEFTU0VSVChtaXNz
cGVsbGluZ0xvY2F0aW9uIDwgbGVuKTsKLSAgICAgICAgICAgIEFTU0VSVChtaXNzcGVsbGluZ0xl
bmd0aCA8PSBsZW4pOwotICAgICAgICAgICAgQVNTRVJUKG1pc3NwZWxsaW5nTG9jYXRpb24gKyBt
aXNzcGVsbGluZ0xlbmd0aCA8PSBsZW4pOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAo
bWlzc3BlbGxpbmdMb2NhdGlvbiA+PSAwICYmIG1pc3NwZWxsaW5nTGVuZ3RoID4gMCAmJiBtaXNz
cGVsbGluZ0xvY2F0aW9uIDwgbGVuICYmIG1pc3NwZWxsaW5nTGVuZ3RoIDw9IGxlbiAmJiBtaXNz
cGVsbGluZ0xvY2F0aW9uICsgbWlzc3BlbGxpbmdMZW5ndGggPD0gbGVuKSB7Ci0gICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgLy8gQ29tcHV0ZSByYW5nZSBvZiBtaXNzcGVsbGVkIHdv
cmQKLSAgICAgICAgICAgICAgICBSZWZQdHI8UmFuZ2U+IG1pc3NwZWxsaW5nUmFuZ2UgPSBUZXh0
SXRlcmF0b3I6OnN1YnJhbmdlKHNlYXJjaFJhbmdlLCBjdXJyZW50Q2h1bmtPZmZzZXQgKyBtaXNz
cGVsbGluZ0xvY2F0aW9uLCBtaXNzcGVsbGluZ0xlbmd0aCk7Ci0KLSAgICAgICAgICAgICAgICAv
LyBSZW1lbWJlciBmaXJzdC1lbmNvdW50ZXJlZCBtaXNzcGVsbGluZyBhbmQgaXRzIG9mZnNldC4K
LSAgICAgICAgICAgICAgICBpZiAoIWZpcnN0TWlzc3BlbGxpbmcpIHsKLSAgICAgICAgICAgICAg
ICAgICAgZmlyc3RNaXNzcGVsbGluZ09mZnNldCA9IGN1cnJlbnRDaHVua09mZnNldCArIG1pc3Nw
ZWxsaW5nTG9jYXRpb247Ci0gICAgICAgICAgICAgICAgICAgIGZpcnN0TWlzc3BlbGxpbmcgPSBT
dHJpbmcoY2hhcnMgKyBtaXNzcGVsbGluZ0xvY2F0aW9uLCBtaXNzcGVsbGluZ0xlbmd0aCk7Ci0g
ICAgICAgICAgICAgICAgICAgIGZpcnN0TWlzc3BlbGxpbmdSYW5nZSA9IG1pc3NwZWxsaW5nUmFu
Z2U7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gU3RvcmUgbWFya2Vy
IGZvciBtaXNzcGVsbGVkIHdvcmQuCi0gICAgICAgICAgICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9
IDA7Ci0gICAgICAgICAgICAgICAgbWlzc3BlbGxpbmdSYW5nZS0+c3RhcnRDb250YWluZXIoZWMp
LT5kb2N1bWVudCgpLT5tYXJrZXJzKCktPmFkZE1hcmtlcihtaXNzcGVsbGluZ1JhbmdlLmdldCgp
LCBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcpOwotICAgICAgICAgICAgICAgIEFTU0VSVCghZWMp
OwotCi0gICAgICAgICAgICAgICAgLy8gQmFpbCBvdXQgaWYgd2UncmUgbWFya2luZyBvbmx5IHRo
ZSBmaXJzdCBtaXNzcGVsbGluZywgYW5kIG5vdCBhbGwgaW5zdGFuY2VzLgotICAgICAgICAgICAg
ICAgIGlmICghbWFya0FsbCkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGN1cnJlbnRDaHVua09mZnNldCArPSBs
ZW47Ci0gICAgICAgIGl0LmFkdmFuY2UoKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGZpcnN0
TWlzc3BlbGxpbmc7Ci19Ci0KLSNpZm5kZWYgQlVJTERJTkdfT05fVElHRVIKLQotc3RhdGljIFBh
c3NSZWZQdHI8UmFuZ2U+IHBhcmFncmFwaEFsaWduZWRSYW5nZUZvclJhbmdlKFJhbmdlKiBhcmJp
dHJhcnlSYW5nZSwgaW50JiBvZmZzZXRJbnRvUGFyYWdyYXBoQWxpZ25lZFJhbmdlLCBTdHJpbmcm
IHBhcmFncmFwaFN0cmluZykKLXsKLSAgICBBU1NFUlRfQVJHKGFyYml0cmFyeVJhbmdlLCBhcmJp
dHJhcnlSYW5nZSk7Ci0gICAgCi0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgCi0gICAg
Ly8gRXhwYW5kIHJhbmdlIHRvIHBhcmFncmFwaCBib3VuZGFyaWVzCi0gICAgUmVmUHRyPFJhbmdl
PiBwYXJhZ3JhcGhSYW5nZSA9IGFyYml0cmFyeVJhbmdlLT5jbG9uZVJhbmdlKGVjKTsKLSAgICBz
ZXRTdGFydChwYXJhZ3JhcGhSYW5nZS5nZXQoKSwgc3RhcnRPZlBhcmFncmFwaChhcmJpdHJhcnlS
YW5nZS0+c3RhcnRQb3NpdGlvbigpKSk7Ci0gICAgc2V0RW5kKHBhcmFncmFwaFJhbmdlLmdldCgp
LCBlbmRPZlBhcmFncmFwaChhcmJpdHJhcnlSYW5nZS0+ZW5kUG9zaXRpb24oKSkpOwotICAgIAot
ICAgIC8vIENvbXB1dGUgb2Zmc2V0IGZyb20gc3RhcnQgb2YgZXhwYW5kZWQgcmFuZ2UgdG8gc3Rh
cnQgb2Ygb3JpZ2luYWwgcmFuZ2UKLSAgICBSZWZQdHI8UmFuZ2U+IG9mZnNldEFzUmFuZ2UgPSBS
YW5nZTo6Y3JlYXRlKHBhcmFncmFwaFJhbmdlLT5zdGFydENvbnRhaW5lcihlYyktPmRvY3VtZW50
KCksIHBhcmFncmFwaFJhbmdlLT5zdGFydFBvc2l0aW9uKCksIGFyYml0cmFyeVJhbmdlLT5zdGFy
dFBvc2l0aW9uKCkpOwotICAgIG9mZnNldEludG9QYXJhZ3JhcGhBbGlnbmVkUmFuZ2UgPSBUZXh0
SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKG9mZnNldEFzUmFuZ2UuZ2V0KCkpOwotICAgIAotICAgIC8v
IEZpbGwgaW4gb3V0IHBhcmFtZXRlciB3aXRoIHN0cmluZyByZXByZXNlbnRpbmcgZW50aXJlIHBh
cmFncmFwaCByYW5nZS4KLSAgICAvLyBTb21lZGF5IHdlIG1pZ2h0IGhhdmUgYSBjYWxsZXIgdGhh
dCBkb2Vzbid0IHVzZSB0aGlzLCBidXQgZm9yIG5vdyBhbGwgY2FsbGVycyBkby4KLSAgICBwYXJh
Z3JhcGhTdHJpbmcgPSBwbGFpblRleHQocGFyYWdyYXBoUmFuZ2UuZ2V0KCkpOwotCi0gICAgcmV0
dXJuIHBhcmFncmFwaFJhbmdlOwotfQotCi1zdGF0aWMgaW50IGZpbmRGaXJzdEdyYW1tYXJEZXRh
aWxJblJhbmdlKGNvbnN0IFZlY3RvcjxHcmFtbWFyRGV0YWlsPiYgZ3JhbW1hckRldGFpbHMsIGlu
dCBiYWRHcmFtbWFyUGhyYXNlTG9jYXRpb24sIGludCAvKmJhZEdyYW1tYXJQaHJhc2VMZW5ndGgq
LywgUmFuZ2UgKnNlYXJjaFJhbmdlLCBpbnQgc3RhcnRPZmZzZXQsIGludCBlbmRPZmZzZXQsIGJv
b2wgbWFya0FsbCkKLXsKLSAgICAvLyBGb3VuZCBzb21lIGJhZCBncmFtbWFyLiBGaW5kIHRoZSBl
YXJsaWVzdCBkZXRhaWwgcmFuZ2UgdGhhdCBzdGFydHMgaW4gb3VyIHNlYXJjaCByYW5nZSAoaWYg
YW55KS4KLSAgICAvLyBPcHRpb25hbGx5IGFkZCBhIERvY3VtZW50TWFya2VyIGZvciBlYWNoIGRl
dGFpbCBpbiB0aGUgcmFuZ2UuCi0gICAgaW50IGVhcmxpZXN0RGV0YWlsTG9jYXRpb25Tb0ZhciA9
IC0xOwotICAgIGludCBlYXJsaWVzdERldGFpbEluZGV4ID0gLTE7Ci0gICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGdyYW1tYXJEZXRhaWxzLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIGNvbnN0
IEdyYW1tYXJEZXRhaWwqIGRldGFpbCA9ICZncmFtbWFyRGV0YWlsc1tpXTsKLSAgICAgICAgQVNT
RVJUKGRldGFpbC0+bGVuZ3RoID4gMCAmJiBkZXRhaWwtPmxvY2F0aW9uID49IDApOwotICAgICAg
ICAKLSAgICAgICAgaW50IGRldGFpbFN0YXJ0T2Zmc2V0SW5QYXJhZ3JhcGggPSBiYWRHcmFtbWFy
UGhyYXNlTG9jYXRpb24gKyBkZXRhaWwtPmxvY2F0aW9uOwotICAgICAgICAKLSAgICAgICAgLy8g
U2tpcCB0aGlzIGRldGFpbCBpZiBpdCBzdGFydHMgYmVmb3JlIHRoZSBvcmlnaW5hbCBzZWFyY2gg
cmFuZ2UKLSAgICAgICAgaWYgKGRldGFpbFN0YXJ0T2Zmc2V0SW5QYXJhZ3JhcGggPCBzdGFydE9m
ZnNldCkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAKLSAgICAgICAgLy8gU2tpcCB0
aGlzIGRldGFpbCBpZiBpdCBzdGFydHMgYWZ0ZXIgdGhlIG9yaWdpbmFsIHNlYXJjaCByYW5nZQot
ICAgICAgICBpZiAoZGV0YWlsU3RhcnRPZmZzZXRJblBhcmFncmFwaCA+PSBlbmRPZmZzZXQpCi0g
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgCi0gICAgICAgIGlmIChtYXJrQWxsKSB7Ci0g
ICAgICAgICAgICBSZWZQdHI8UmFuZ2U+IGJhZEdyYW1tYXJSYW5nZSA9IFRleHRJdGVyYXRvcjo6
c3VicmFuZ2Uoc2VhcmNoUmFuZ2UsIGJhZEdyYW1tYXJQaHJhc2VMb2NhdGlvbiAtIHN0YXJ0T2Zm
c2V0ICsgZGV0YWlsLT5sb2NhdGlvbiwgZGV0YWlsLT5sZW5ndGgpOwotICAgICAgICAgICAgRXhj
ZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgICAgICAgICBiYWRHcmFtbWFyUmFuZ2UtPnN0YXJ0Q29u
dGFpbmVyKGVjKS0+ZG9jdW1lbnQoKS0+bWFya2VycygpLT5hZGRNYXJrZXIoYmFkR3JhbW1hclJh
bmdlLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6R3JhbW1hciwgZGV0YWlsLT51c2VyRGVzY3JpcHRp
b24pOwotICAgICAgICAgICAgQVNTRVJUKCFlYyk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAg
ICAgIC8vIFJlbWVtYmVyIHRoaXMgZGV0YWlsIG9ubHkgaWYgaXQncyBlYXJsaWVyIHRoYW4gb3Vy
IGN1cnJlbnQgY2FuZGlkYXRlICh0aGUgZGV0YWlscyBhcmVuJ3QgaW4gYSBndWFyYW50ZWVkIG9y
ZGVyKQotICAgICAgICBpZiAoZWFybGllc3REZXRhaWxJbmRleCA8IDAgfHwgZWFybGllc3REZXRh
aWxMb2NhdGlvblNvRmFyID4gZGV0YWlsLT5sb2NhdGlvbikgewotICAgICAgICAgICAgZWFybGll
c3REZXRhaWxJbmRleCA9IGk7Ci0gICAgICAgICAgICBlYXJsaWVzdERldGFpbExvY2F0aW9uU29G
YXIgPSBkZXRhaWwtPmxvY2F0aW9uOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIHJldHVy
biBlYXJsaWVzdERldGFpbEluZGV4OwotfQotICAgIAotc3RhdGljIFN0cmluZyBmaW5kRmlyc3RC
YWRHcmFtbWFySW5SYW5nZShFZGl0b3JDbGllbnQqIGNsaWVudCwgUmFuZ2UqIHNlYXJjaFJhbmdl
LCBHcmFtbWFyRGV0YWlsJiBvdXRHcmFtbWFyRGV0YWlsLCBpbnQmIG91dEdyYW1tYXJQaHJhc2VP
ZmZzZXQsIGJvb2wgbWFya0FsbCkKLXsKLSAgICBBU1NFUlRfQVJHKGNsaWVudCwgY2xpZW50KTsK
LSAgICBBU1NFUlRfQVJHKHNlYXJjaFJhbmdlLCBzZWFyY2hSYW5nZSk7Ci0gICAgCi0gICAgLy8g
SW5pdGlhbGl6ZSBvdXQgcGFyYW1ldGVyczsgdGhlc2Ugd2lsbCBiZSB1cGRhdGVkIGlmIHdlIGZp
bmQgc29tZXRoaW5nIHRvIHJldHVybi4KLSAgICBvdXRHcmFtbWFyRGV0YWlsLmxvY2F0aW9uID0g
LTE7Ci0gICAgb3V0R3JhbW1hckRldGFpbC5sZW5ndGggPSAwOwotICAgIG91dEdyYW1tYXJEZXRh
aWwuZ3Vlc3Nlcy5jbGVhcigpOwotICAgIG91dEdyYW1tYXJEZXRhaWwudXNlckRlc2NyaXB0aW9u
ID0gIiI7Ci0gICAgb3V0R3JhbW1hclBocmFzZU9mZnNldCA9IDA7Ci0gICAgCi0gICAgU3RyaW5n
IGZpcnN0QmFkR3JhbW1hclBocmFzZTsKLQotICAgIC8vIEV4cGFuZCB0aGUgc2VhcmNoIHJhbmdl
IHRvIGVuY29tcGFzcyBlbnRpcmUgcGFyYWdyYXBocywgc2luY2UgZ3JhbW1hciBjaGVja2luZyBu
ZWVkcyB0aGF0IG11Y2ggY29udGV4dC4KLSAgICAvLyBEZXRlcm1pbmUgdGhlIGNoYXJhY3RlciBv
ZmZzZXQgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIHBhcmFncmFwaCB0byB0aGUgc3RhcnQgb2YgdGhl
IG9yaWdpbmFsIHNlYXJjaCByYW5nZSwKLSAgICAvLyBzaW5jZSB3ZSB3aWxsIHdhbnQgdG8gaWdu
b3JlIHJlc3VsdHMgaW4gdGhpcyBhcmVhLgotICAgIGludCBzZWFyY2hSYW5nZVN0YXJ0T2Zmc2V0
OwotICAgIFN0cmluZyBwYXJhZ3JhcGhTdHJpbmc7Ci0gICAgUmVmUHRyPFJhbmdlPiBwYXJhZ3Jh
cGhSYW5nZSA9IHBhcmFncmFwaEFsaWduZWRSYW5nZUZvclJhbmdlKHNlYXJjaFJhbmdlLCBzZWFy
Y2hSYW5nZVN0YXJ0T2Zmc2V0LCBwYXJhZ3JhcGhTdHJpbmcpOwotICAgICAgICAKLSAgICAvLyBE
ZXRlcm1pbmUgdGhlIGNoYXJhY3RlciBvZmZzZXQgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIHBhcmFn
cmFwaCB0byB0aGUgZW5kIG9mIHRoZSBvcmlnaW5hbCBzZWFyY2ggcmFuZ2UsIAotICAgIC8vIHNp
bmNlIHdlIHdpbGwgd2FudCB0byBpZ25vcmUgcmVzdWx0cyBpbiB0aGlzIGFyZWEgYWxzby4KLSAg
ICBpbnQgc2VhcmNoUmFuZ2VFbmRPZmZzZXQgPSBzZWFyY2hSYW5nZVN0YXJ0T2Zmc2V0ICsgVGV4
dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChzZWFyY2hSYW5nZSk7Ci0gICAgICAgIAotICAgIC8vIFN0
YXJ0IGNoZWNraW5nIGZyb20gYmVnaW5uaW5nIG9mIHBhcmFncmFwaCwgYnV0IHNraXAgcGFzdCBy
ZXN1bHRzIHRoYXQgb2NjdXIgYmVmb3JlIHRoZSBzdGFydCBvZiB0aGUgb3JpZ2luYWwgc2VhcmNo
IHJhbmdlLgotICAgIGludCBzdGFydE9mZnNldCA9IDA7Ci0gICAgd2hpbGUgKHN0YXJ0T2Zmc2V0
IDwgc2VhcmNoUmFuZ2VFbmRPZmZzZXQpIHsKLSAgICAgICAgVmVjdG9yPEdyYW1tYXJEZXRhaWw+
IGdyYW1tYXJEZXRhaWxzOwotICAgICAgICBpbnQgYmFkR3JhbW1hclBocmFzZUxvY2F0aW9uID0g
LTE7Ci0gICAgICAgIGludCBiYWRHcmFtbWFyUGhyYXNlTGVuZ3RoID0gMDsKLSAgICAgICAgY2xp
ZW50LT5jaGVja0dyYW1tYXJPZlN0cmluZyhwYXJhZ3JhcGhTdHJpbmcuY2hhcmFjdGVycygpICsg
c3RhcnRPZmZzZXQsIHBhcmFncmFwaFN0cmluZy5sZW5ndGgoKSAtIHN0YXJ0T2Zmc2V0LCBncmFt
bWFyRGV0YWlscywgJmJhZEdyYW1tYXJQaHJhc2VMb2NhdGlvbiwgJmJhZEdyYW1tYXJQaHJhc2VM
ZW5ndGgpOwotICAgICAgICAKLSAgICAgICAgaWYgKCFiYWRHcmFtbWFyUGhyYXNlTGVuZ3RoKSB7
Ci0gICAgICAgICAgICBBU1NFUlQoYmFkR3JhbW1hclBocmFzZUxvY2F0aW9uID09IC0xKTsKLSAg
ICAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICAgICAgfQotCi0gICAgICAgIEFTU0VSVChi
YWRHcmFtbWFyUGhyYXNlTG9jYXRpb24gPj0gMCk7Ci0gICAgICAgIGJhZEdyYW1tYXJQaHJhc2VM
b2NhdGlvbiArPSBzdGFydE9mZnNldDsKLQotICAgICAgICAKLSAgICAgICAgLy8gRm91bmQgc29t
ZSBiYWQgZ3JhbW1hci4gRmluZCB0aGUgZWFybGllc3QgZGV0YWlsIHJhbmdlIHRoYXQgc3RhcnRz
IGluIG91ciBzZWFyY2ggcmFuZ2UgKGlmIGFueSkuCi0gICAgICAgIGludCBiYWRHcmFtbWFySW5k
ZXggPSBmaW5kRmlyc3RHcmFtbWFyRGV0YWlsSW5SYW5nZShncmFtbWFyRGV0YWlscywgYmFkR3Jh
bW1hclBocmFzZUxvY2F0aW9uLCBiYWRHcmFtbWFyUGhyYXNlTGVuZ3RoLCBzZWFyY2hSYW5nZSwg
c2VhcmNoUmFuZ2VTdGFydE9mZnNldCwgc2VhcmNoUmFuZ2VFbmRPZmZzZXQsIG1hcmtBbGwpOwot
ICAgICAgICBpZiAoYmFkR3JhbW1hckluZGV4ID49IDApIHsKLSAgICAgICAgICAgIEFTU0VSVChz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oYmFkR3JhbW1hckluZGV4KSA8IGdyYW1tYXJEZXRhaWxzLnNp
emUoKSk7Ci0gICAgICAgICAgICBvdXRHcmFtbWFyRGV0YWlsID0gZ3JhbW1hckRldGFpbHNbYmFk
R3JhbW1hckluZGV4XTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIElmIHdlIGZvdW5kIGEgZGV0
YWlsIGluIHJhbmdlLCB0aGVuIHdlIGhhdmUgZm91bmQgdGhlIGZpcnN0IGJhZCBwaHJhc2UgKHVu
bGVzcyB3ZSBmb3VuZCBvbmUgZWFybGllciBidXQKLSAgICAgICAgLy8ga2VwdCBnb2luZyBzbyB3
ZSBjb3VsZCBtYXJrIGFsbCBpbnN0YW5jZXMpLgotICAgICAgICBpZiAoYmFkR3JhbW1hckluZGV4
ID49IDAgJiYgZmlyc3RCYWRHcmFtbWFyUGhyYXNlLmlzRW1wdHkoKSkgewotICAgICAgICAgICAg
b3V0R3JhbW1hclBocmFzZU9mZnNldCA9IGJhZEdyYW1tYXJQaHJhc2VMb2NhdGlvbiAtIHNlYXJj
aFJhbmdlU3RhcnRPZmZzZXQ7Ci0gICAgICAgICAgICBmaXJzdEJhZEdyYW1tYXJQaHJhc2UgPSBw
YXJhZ3JhcGhTdHJpbmcuc3Vic3RyaW5nKGJhZEdyYW1tYXJQaHJhc2VMb2NhdGlvbiwgYmFkR3Jh
bW1hclBocmFzZUxlbmd0aCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIEZvdW5kIG9u
ZS4gV2UncmUgZG9uZSBub3csIHVubGVzcyB3ZSdyZSBtYXJraW5nIGVhY2ggaW5zdGFuY2UuCi0g
ICAgICAgICAgICBpZiAoIW1hcmtBbGwpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLQotICAgICAgICAvLyBUaGVzZSByZXN1bHRzIHdlcmUgYWxsIGJldHdlZW4gdGhlIHN0YXJ0
IG9mIHRoZSBwYXJhZ3JhcGggYW5kIHRoZSBzdGFydCBvZiB0aGUgc2VhcmNoIHJhbmdlOyBsb29r
Ci0gICAgICAgIC8vIGJleW9uZCB0aGlzIHBocmFzZS4KLSAgICAgICAgc3RhcnRPZmZzZXQgPSBi
YWRHcmFtbWFyUGhyYXNlTG9jYXRpb24gKyBiYWRHcmFtbWFyUGhyYXNlTGVuZ3RoOwotICAgIH0K
LSAgICAKLSAgICByZXR1cm4gZmlyc3RCYWRHcmFtbWFyUGhyYXNlOwotfQotICAgIAotI2VuZGlm
IC8qIG5vdCBCVUlMRElOR19PTl9USUdFUiAqLwotCi0jaWYgUExBVEZPUk0oTUFDKSAmJiAhZGVm
aW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fTEVPUEFSRCkK
LQotc3RhdGljIFN0cmluZyBmaW5kRmlyc3RNaXNzcGVsbGluZ09yQmFkR3JhbW1hckluUmFuZ2Uo
RWRpdG9yQ2xpZW50KiBjbGllbnQsIFJhbmdlKiBzZWFyY2hSYW5nZSwgYm9vbCBjaGVja0dyYW1t
YXIsIGJvb2wmIG91dElzU3BlbGxpbmcsIGludCYgb3V0Rmlyc3RGb3VuZE9mZnNldCwgR3JhbW1h
ckRldGFpbCYgb3V0R3JhbW1hckRldGFpbCkKLXsKLSAgICBBU1NFUlRfQVJHKGNsaWVudCwgY2xp
ZW50KTsKLSAgICBBU1NFUlRfQVJHKHNlYXJjaFJhbmdlLCBzZWFyY2hSYW5nZSk7Ci0gICAgCi0g
ICAgU3RyaW5nIGZpcnN0Rm91bmRJdGVtOwotICAgIFN0cmluZyBtaXNzcGVsbGVkV29yZDsKLSAg
ICBTdHJpbmcgYmFkR3JhbW1hclBocmFzZTsKLSAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAg
ICAKLSAgICAvLyBJbml0aWFsaXplIG91dCBwYXJhbWV0ZXJzOyB0aGVzZSB3aWxsIGJlIHVwZGF0
ZWQgaWYgd2UgZmluZCBzb21ldGhpbmcgdG8gcmV0dXJuLgotICAgIG91dElzU3BlbGxpbmcgPSB0
cnVlOwotICAgIG91dEZpcnN0Rm91bmRPZmZzZXQgPSAwOwotICAgIG91dEdyYW1tYXJEZXRhaWwu
bG9jYXRpb24gPSAtMTsKLSAgICBvdXRHcmFtbWFyRGV0YWlsLmxlbmd0aCA9IDA7Ci0gICAgb3V0
R3JhbW1hckRldGFpbC5ndWVzc2VzLmNsZWFyKCk7Ci0gICAgb3V0R3JhbW1hckRldGFpbC51c2Vy
RGVzY3JpcHRpb24gPSAiIjsKLSAgICAKLSAgICAvLyBFeHBhbmQgdGhlIHNlYXJjaCByYW5nZSB0
byBlbmNvbXBhc3MgZW50aXJlIHBhcmFncmFwaHMsIHNpbmNlIHRleHQgY2hlY2tpbmcgbmVlZHMg
dGhhdCBtdWNoIGNvbnRleHQuCi0gICAgLy8gRGV0ZXJtaW5lIHRoZSBjaGFyYWN0ZXIgb2Zmc2V0
IGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBwYXJhZ3JhcGggdG8gdGhlIHN0YXJ0IG9mIHRoZSBvcmln
aW5hbCBzZWFyY2ggcmFuZ2UsCi0gICAgLy8gc2luY2Ugd2Ugd2lsbCB3YW50IHRvIGlnbm9yZSBy
ZXN1bHRzIGluIHRoaXMgYXJlYS4KLSAgICBSZWZQdHI8UmFuZ2U+IHBhcmFncmFwaFJhbmdlID0g
c2VhcmNoUmFuZ2UtPmNsb25lUmFuZ2UoZWMpOwotICAgIHNldFN0YXJ0KHBhcmFncmFwaFJhbmdl
LmdldCgpLCBzdGFydE9mUGFyYWdyYXBoKHNlYXJjaFJhbmdlLT5zdGFydFBvc2l0aW9uKCkpKTsK
LSAgICBpbnQgdG90YWxSYW5nZUxlbmd0aCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgocGFy
YWdyYXBoUmFuZ2UuZ2V0KCkpOwotICAgIHNldEVuZChwYXJhZ3JhcGhSYW5nZS5nZXQoKSwgZW5k
T2ZQYXJhZ3JhcGgoc2VhcmNoUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSkpOwotICAgIAotICAgIFJl
ZlB0cjxSYW5nZT4gb2Zmc2V0QXNSYW5nZSA9IFJhbmdlOjpjcmVhdGUocGFyYWdyYXBoUmFuZ2Ut
PnN0YXJ0Q29udGFpbmVyKGVjKS0+ZG9jdW1lbnQoKSwgcGFyYWdyYXBoUmFuZ2UtPnN0YXJ0UG9z
aXRpb24oKSwgc2VhcmNoUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSk7Ci0gICAgaW50IHNlYXJjaFJh
bmdlU3RhcnRPZmZzZXQgPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKG9mZnNldEFzUmFuZ2Uu
Z2V0KCkpOwotICAgIGludCB0b3RhbExlbmd0aFByb2Nlc3NlZCA9IDA7Ci0gICAgCi0gICAgYm9v
bCBmaXJzdEl0ZXJhdGlvbiA9IHRydWU7Ci0gICAgYm9vbCBsYXN0SXRlcmF0aW9uID0gZmFsc2U7
Ci0gICAgd2hpbGUgKHRvdGFsTGVuZ3RoUHJvY2Vzc2VkIDwgdG90YWxSYW5nZUxlbmd0aCkgewot
ICAgICAgICAvLyBJdGVyYXRlIHRocm91Z2ggdGhlIHNlYXJjaCByYW5nZSBieSBwYXJhZ3JhcGhz
LCBjaGVja2luZyBlYWNoIG9uZSBmb3Igc3BlbGxpbmcgYW5kIGdyYW1tYXIuCi0gICAgICAgIGlu
dCBjdXJyZW50TGVuZ3RoID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxlbmd0aChwYXJhZ3JhcGhSYW5n
ZS5nZXQoKSk7Ci0gICAgICAgIGludCBjdXJyZW50U3RhcnRPZmZzZXQgPSBmaXJzdEl0ZXJhdGlv
biA/IHNlYXJjaFJhbmdlU3RhcnRPZmZzZXQgOiAwOwotICAgICAgICBpbnQgY3VycmVudEVuZE9m
ZnNldCA9IGN1cnJlbnRMZW5ndGg7Ci0gICAgICAgIGlmIChpblNhbWVQYXJhZ3JhcGgocGFyYWdy
YXBoUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSwgc2VhcmNoUmFuZ2UtPmVuZFBvc2l0aW9uKCkpKSB7
Ci0gICAgICAgICAgICAvLyBEZXRlcm1pbmUgdGhlIGNoYXJhY3RlciBvZmZzZXQgZnJvbSB0aGUg
ZW5kIG9mIHRoZSBvcmlnaW5hbCBzZWFyY2ggcmFuZ2UgdG8gdGhlIGVuZCBvZiB0aGUgcGFyYWdy
YXBoLAotICAgICAgICAgICAgLy8gc2luY2Ugd2Ugd2lsbCB3YW50IHRvIGlnbm9yZSByZXN1bHRz
IGluIHRoaXMgYXJlYS4KLSAgICAgICAgICAgIFJlZlB0cjxSYW5nZT4gZW5kT2Zmc2V0QXNSYW5n
ZSA9IFJhbmdlOjpjcmVhdGUocGFyYWdyYXBoUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKGVjKS0+ZG9j
dW1lbnQoKSwgcGFyYWdyYXBoUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSwgc2VhcmNoUmFuZ2UtPmVu
ZFBvc2l0aW9uKCkpOwotICAgICAgICAgICAgY3VycmVudEVuZE9mZnNldCA9IFRleHRJdGVyYXRv
cjo6cmFuZ2VMZW5ndGgoZW5kT2Zmc2V0QXNSYW5nZS5nZXQoKSk7Ci0gICAgICAgICAgICBsYXN0
SXRlcmF0aW9uID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAoY3VycmVudFN0YXJ0T2Zm
c2V0IDwgY3VycmVudEVuZE9mZnNldCkgewotICAgICAgICAgICAgU3RyaW5nIHBhcmFncmFwaFN0
cmluZyA9IHBsYWluVGV4dChwYXJhZ3JhcGhSYW5nZS5nZXQoKSk7Ci0gICAgICAgICAgICBpZiAo
cGFyYWdyYXBoU3RyaW5nLmxlbmd0aCgpID4gMCkgewotICAgICAgICAgICAgICAgIGJvb2wgZm91
bmRHcmFtbWFyID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgaW50IHNwZWxsaW5nTG9jYXRpb24g
PSAwOwotICAgICAgICAgICAgICAgIGludCBncmFtbWFyUGhyYXNlTG9jYXRpb24gPSAwOwotICAg
ICAgICAgICAgICAgIGludCBncmFtbWFyRGV0YWlsTG9jYXRpb24gPSAwOwotICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIGdyYW1tYXJEZXRhaWxJbmRleCA9IDA7Ci0gICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gcmVzdWx0czsKLSAgICAg
ICAgICAgICAgICB1aW50NjRfdCBjaGVja2luZ1R5cGVzID0gY2hlY2tHcmFtbWFyID8gKFRleHRD
aGVja2luZ1R5cGVTcGVsbGluZyB8IFRleHRDaGVja2luZ1R5cGVHcmFtbWFyKSA6IFRleHRDaGVj
a2luZ1R5cGVTcGVsbGluZzsKLSAgICAgICAgICAgICAgICBjbGllbnQtPmNoZWNrVGV4dE9mUGFy
YWdyYXBoKHBhcmFncmFwaFN0cmluZy5jaGFyYWN0ZXJzKCksIHBhcmFncmFwaFN0cmluZy5sZW5n
dGgoKSwgY2hlY2tpbmdUeXBlcywgcmVzdWx0cyk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlc3VsdHMuc2l6ZSgpOyBpKyspIHsK
LSAgICAgICAgICAgICAgICAgICAgY29uc3QgVGV4dENoZWNraW5nUmVzdWx0KiByZXN1bHQgPSAm
cmVzdWx0c1tpXTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC0+dHlwZSA9PSBUZXh0
Q2hlY2tpbmdUeXBlU3BlbGxpbmcgJiYgcmVzdWx0LT5sb2NhdGlvbiA+PSBjdXJyZW50U3RhcnRP
ZmZzZXQgJiYgcmVzdWx0LT5sb2NhdGlvbiArIHJlc3VsdC0+bGVuZ3RoIDw9IGN1cnJlbnRFbmRP
ZmZzZXQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChyZXN1bHQtPmxlbmd0aCA+
IDAgJiYgcmVzdWx0LT5sb2NhdGlvbiA+PSAwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNw
ZWxsaW5nTG9jYXRpb24gPSByZXN1bHQtPmxvY2F0aW9uOwotICAgICAgICAgICAgICAgICAgICAg
ICAgbWlzc3BlbGxlZFdvcmQgPSBwYXJhZ3JhcGhTdHJpbmcuc3Vic3RyaW5nKHJlc3VsdC0+bG9j
YXRpb24sIHJlc3VsdC0+bGVuZ3RoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCht
aXNzcGVsbGVkV29yZC5sZW5ndGgoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAoY2hlY2tHcmFt
bWFyICYmIHJlc3VsdC0+dHlwZSA9PSBUZXh0Q2hlY2tpbmdUeXBlR3JhbW1hciAmJiByZXN1bHQt
PmxvY2F0aW9uIDwgY3VycmVudEVuZE9mZnNldCAmJiByZXN1bHQtPmxvY2F0aW9uICsgcmVzdWx0
LT5sZW5ndGggPiBjdXJyZW50U3RhcnRPZmZzZXQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IEFTU0VSVChyZXN1bHQtPmxlbmd0aCA+IDAgJiYgcmVzdWx0LT5sb2NhdGlvbiA+PSAwKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIGNhbid0IHN0b3AgYWZ0ZXIgdGhlIGZpcnN0IGdy
YW1tYXIgcmVzdWx0LCBzaW5jZSB0aGVyZSBtaWdodCBzdGlsbCBiZSBhIHNwZWxsaW5nIHJlc3Vs
dCBhZnRlcgotICAgICAgICAgICAgICAgICAgICAgICAgLy8gaXQgYmVnaW5zIGJ1dCBiZWZvcmUg
dGhlIGZpcnN0IGRldGFpbCBpbiBpdCwgYnV0IHdlIGNhbiBzdG9wIGlmIHdlIGZpbmQgYSBzZWNv
bmQgZ3JhbW1hciByZXN1bHQuCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm91bmRHcmFt
bWFyKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IHJlc3VsdC0+ZGV0YWlscy5zaXplKCk7
IGorKykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdyYW1tYXJEZXRhaWwq
IGRldGFpbCA9ICZyZXN1bHQtPmRldGFpbHNbal07Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQVNTRVJUKGRldGFpbC0+bGVuZ3RoID4gMCAmJiBkZXRhaWwtPmxvY2F0aW9uID49IDApOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQtPmxvY2F0aW9uICsgZGV0YWls
LT5sb2NhdGlvbiA+PSBjdXJyZW50U3RhcnRPZmZzZXQgJiYgcmVzdWx0LT5sb2NhdGlvbiArIGRl
dGFpbC0+bG9jYXRpb24gKyBkZXRhaWwtPmxlbmd0aCA8PSBjdXJyZW50RW5kT2Zmc2V0ICYmICgh
Zm91bmRHcmFtbWFyIHx8IHJlc3VsdC0+bG9jYXRpb24gKyBkZXRhaWwtPmxvY2F0aW9uIDwgZ3Jh
bW1hckRldGFpbExvY2F0aW9uKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBn
cmFtbWFyRGV0YWlsSW5kZXggPSBqOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBn
cmFtbWFyRGV0YWlsTG9jYXRpb24gPSByZXN1bHQtPmxvY2F0aW9uICsgZGV0YWlsLT5sb2NhdGlv
bjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRHcmFtbWFyID0gdHJ1ZTsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm91bmRHcmFtbWFyKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZ3JhbW1hclBocmFzZUxvY2F0aW9uID0gcmVzdWx0LT5sb2NhdGlv
bjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRHcmFtbWFyRGV0YWlsID0gcmVzdWx0
LT5kZXRhaWxzW2dyYW1tYXJEZXRhaWxJbmRleF07Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYmFkR3JhbW1hclBocmFzZSA9IHBhcmFncmFwaFN0cmluZy5zdWJzdHJpbmcocmVzdWx0LT5s
b2NhdGlvbiwgcmVzdWx0LT5sZW5ndGgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFT
U0VSVChiYWRHcmFtbWFyUGhyYXNlLmxlbmd0aCgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgICAgIGlmICghbWlzc3BlbGxlZFdvcmQuaXNFbXB0eSgpICYmICghY2hlY2tHcmFtbWFyIHx8
IGJhZEdyYW1tYXJQaHJhc2UuaXNFbXB0eSgpIHx8IHNwZWxsaW5nTG9jYXRpb24gPD0gZ3JhbW1h
ckRldGFpbExvY2F0aW9uKSkgewotICAgICAgICAgICAgICAgICAgICBpbnQgc3BlbGxpbmdPZmZz
ZXQgPSBzcGVsbGluZ0xvY2F0aW9uIC0gY3VycmVudFN0YXJ0T2Zmc2V0OwotICAgICAgICAgICAg
ICAgICAgICBpZiAoIWZpcnN0SXRlcmF0aW9uKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBS
ZWZQdHI8UmFuZ2U+IHBhcmFncmFwaE9mZnNldEFzUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKHBhcmFn
cmFwaFJhbmdlLT5zdGFydENvbnRhaW5lcihlYyktPmRvY3VtZW50KCksIHNlYXJjaFJhbmdlLT5z
dGFydFBvc2l0aW9uKCksIHBhcmFncmFwaFJhbmdlLT5zdGFydFBvc2l0aW9uKCkpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgc3BlbGxpbmdPZmZzZXQgKz0gVGV4dEl0ZXJhdG9yOjpyYW5nZUxl
bmd0aChwYXJhZ3JhcGhPZmZzZXRBc1JhbmdlLmdldCgpKTsKLSAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICBvdXRJc1NwZWxsaW5nID0gdHJ1ZTsKLSAgICAgICAgICAg
ICAgICAgICAgb3V0Rmlyc3RGb3VuZE9mZnNldCA9IHNwZWxsaW5nT2Zmc2V0OwotICAgICAgICAg
ICAgICAgICAgICBmaXJzdEZvdW5kSXRlbSA9IG1pc3NwZWxsZWRXb3JkOwotICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKGNo
ZWNrR3JhbW1hciAmJiAhYmFkR3JhbW1hclBocmFzZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAg
ICAgICAgICAgaW50IGdyYW1tYXJQaHJhc2VPZmZzZXQgPSBncmFtbWFyUGhyYXNlTG9jYXRpb24g
LSBjdXJyZW50U3RhcnRPZmZzZXQ7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghZmlyc3RJdGVy
YXRpb24pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFJlZlB0cjxSYW5nZT4gcGFyYWdyYXBo
T2Zmc2V0QXNSYW5nZSA9IFJhbmdlOjpjcmVhdGUocGFyYWdyYXBoUmFuZ2UtPnN0YXJ0Q29udGFp
bmVyKGVjKS0+ZG9jdW1lbnQoKSwgc2VhcmNoUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSwgcGFyYWdy
YXBoUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBncmFt
bWFyUGhyYXNlT2Zmc2V0ICs9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgocGFyYWdyYXBoT2Zm
c2V0QXNSYW5nZS5nZXQoKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgICAgb3V0SXNTcGVsbGluZyA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICBvdXRGaXJz
dEZvdW5kT2Zmc2V0ID0gZ3JhbW1hclBocmFzZU9mZnNldDsKLSAgICAgICAgICAgICAgICAgICAg
Zmlyc3RGb3VuZEl0ZW0gPSBiYWRHcmFtbWFyUGhyYXNlOwotICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAg
ICAgaWYgKGxhc3RJdGVyYXRpb24gfHwgdG90YWxMZW5ndGhQcm9jZXNzZWQgKyBjdXJyZW50TGVu
Z3RoID49IHRvdGFsUmFuZ2VMZW5ndGgpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgVmlz
aWJsZVBvc2l0aW9uIG5ld1BhcmFncmFwaFN0YXJ0ID0gc3RhcnRPZk5leHRQYXJhZ3JhcGgocGFy
YWdyYXBoUmFuZ2UtPmVuZFBvc2l0aW9uKCkpOwotICAgICAgICBzZXRTdGFydChwYXJhZ3JhcGhS
YW5nZS5nZXQoKSwgbmV3UGFyYWdyYXBoU3RhcnQpOwotICAgICAgICBzZXRFbmQocGFyYWdyYXBo
UmFuZ2UuZ2V0KCksIGVuZE9mUGFyYWdyYXBoKG5ld1BhcmFncmFwaFN0YXJ0KSk7Ci0gICAgICAg
IGZpcnN0SXRlcmF0aW9uID0gZmFsc2U7Ci0gICAgICAgIHRvdGFsTGVuZ3RoUHJvY2Vzc2VkICs9
IGN1cnJlbnRMZW5ndGg7Ci0gICAgfQotICAgIHJldHVybiBmaXJzdEZvdW5kSXRlbTsKLX0KLQot
I2VuZGlmCi0KIHZvaWQgRWRpdG9yOjphZHZhbmNlVG9OZXh0TWlzc3BlbGxpbmcoYm9vbCBzdGFy
dEJlZm9yZVNlbGVjdGlvbikKIHsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKQEAgLTE5OTIs
NiArMTY3MSw3IEBAIHZvaWQgRWRpdG9yOjphZHZhbmNlVG9OZXh0TWlzc3BlbGxpbmcoYm9vbCBz
dGFydEJlZm9yZVNlbGVjdGlvbikKICAgICAvLyByZXBlYXRlZCAiY2hlY2sgc3BlbGxpbmciIGNv
bW1hbmRzIHdvcmsuCiAgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24oZnJhbWUoKS0+c2Vs
ZWN0aW9uKCktPnNlbGVjdGlvbigpKTsKICAgICBSZWZQdHI8UmFuZ2U+IHNwZWxsaW5nU2VhcmNo
UmFuZ2UocmFuZ2VPZkNvbnRlbnRzKGZyYW1lKCktPmRvY3VtZW50KCkpKTsKKwogICAgIGJvb2wg
c3RhcnRlZFdpdGhTZWxlY3Rpb24gPSBmYWxzZTsKICAgICBpZiAoc2VsZWN0aW9uLnN0YXJ0KCku
bm9kZSgpKSB7CiAgICAgICAgIHN0YXJ0ZWRXaXRoU2VsZWN0aW9uID0gdHJ1ZTsKQEAgLTIwNTcs
NyArMTczNyw3IEBAIHZvaWQgRWRpdG9yOjphZHZhbmNlVG9OZXh0TWlzc3BlbGxpbmcoYm9vbCBz
dGFydEJlZm9yZVNlbGVjdGlvbikKICAgICBib29sIGlzU3BlbGxpbmcgPSB0cnVlOwogICAgIGlu
dCBmb3VuZE9mZnNldCA9IDA7CiAgICAgR3JhbW1hckRldGFpbCBncmFtbWFyRGV0YWlsOwotICAg
IFN0cmluZyBmb3VuZEl0ZW0gPSBmaW5kRmlyc3RNaXNzcGVsbGluZ09yQmFkR3JhbW1hckluUmFu
Z2UoY2xpZW50KCksIHNwZWxsaW5nU2VhcmNoUmFuZ2UuZ2V0KCksIGlzR3JhbW1hckNoZWNraW5n
RW5hYmxlZCgpLCBpc1NwZWxsaW5nLCBmb3VuZE9mZnNldCwgZ3JhbW1hckRldGFpbCk7CisgICAg
U3RyaW5nIGZvdW5kSXRlbSA9IFRleHRDaGVja2luZ0hlbHBlcihjbGllbnQoKSwgc3BlbGxpbmdT
ZWFyY2hSYW5nZSkuZmluZEZpcnN0TWlzc3BlbGxpbmdPckJhZEdyYW1tYXIoaXNHcmFtbWFyQ2hl
Y2tpbmdFbmFibGVkKCksIGlzU3BlbGxpbmcsIGZvdW5kT2Zmc2V0LCBncmFtbWFyRGV0YWlsKTsK
ICAgICBpZiAoaXNTcGVsbGluZykgewogICAgICAgICBtaXNzcGVsbGVkV29yZCA9IGZvdW5kSXRl
bTsKICAgICAgICAgbWlzc3BlbGxpbmdPZmZzZXQgPSBmb3VuZE9mZnNldDsKQEAgLTIwNjcsNyAr
MTc0Nyw3IEBAIHZvaWQgRWRpdG9yOjphZHZhbmNlVG9OZXh0TWlzc3BlbGxpbmcoYm9vbCBzdGFy
dEJlZm9yZVNlbGVjdGlvbikKICAgICB9CiAjZWxzZQogICAgIFJlZlB0cjxSYW5nZT4gZmlyc3RN
aXNzcGVsbGluZ1JhbmdlOwotICAgIFN0cmluZyBtaXNzcGVsbGVkV29yZCA9IGZpbmRGaXJzdE1p
c3NwZWxsaW5nSW5SYW5nZShjbGllbnQoKSwgc3BlbGxpbmdTZWFyY2hSYW5nZS5nZXQoKSwgbWlz
c3BlbGxpbmdPZmZzZXQsIGZhbHNlLCBmaXJzdE1pc3NwZWxsaW5nUmFuZ2UpOworICAgIFN0cmlu
ZyBtaXNzcGVsbGVkV29yZCA9IFRleHRDaGVja2luZ0hlbHBlcihjbGllbnQoKSwgc3BlbGxpbmdT
ZWFyY2hSYW5nZSkuZmluZEZpcnN0TWlzc3BlbGxpbmcobWlzc3BlbGxpbmdPZmZzZXQsIGZhbHNl
LCBmaXJzdE1pc3NwZWxsaW5nUmFuZ2UpOwogICAgIFN0cmluZyBiYWRHcmFtbWFyUGhyYXNlOwog
CiAjaWZuZGVmIEJVSUxESU5HX09OX1RJR0VSCkBAIC0yMDg0LDcgKzE3NjQsNyBAQCB2b2lkIEVk
aXRvcjo6YWR2YW5jZVRvTmV4dE1pc3NwZWxsaW5nKGJvb2wgc3RhcnRCZWZvcmVTZWxlY3Rpb24p
CiAgICAgfQogICAgIAogICAgIGlmIChpc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQoKSkKLSAgICAg
ICAgYmFkR3JhbW1hclBocmFzZSA9IGZpbmRGaXJzdEJhZEdyYW1tYXJJblJhbmdlKGNsaWVudCgp
LCBncmFtbWFyU2VhcmNoUmFuZ2UuZ2V0KCksIGdyYW1tYXJEZXRhaWwsIGdyYW1tYXJQaHJhc2VP
ZmZzZXQsIGZhbHNlKTsKKyAgICAgICAgYmFkR3JhbW1hclBocmFzZSA9IFRleHRDaGVja2luZ0hl
bHBlcihjbGllbnQoKSwgZ3JhbW1hclNlYXJjaFJhbmdlKS5maW5kRmlyc3RCYWRHcmFtbWFyKGdy
YW1tYXJEZXRhaWwsIGdyYW1tYXJQaHJhc2VPZmZzZXQsIGZhbHNlKTsKICNlbmRpZgogI2VuZGlm
CiAgICAgCkBAIC0yMDk3LDcgKzE3NzcsNyBAQCB2b2lkIEVkaXRvcjo6YWR2YW5jZVRvTmV4dE1p
c3NwZWxsaW5nKGJvb2wgc3RhcnRCZWZvcmVTZWxlY3Rpb24pCiAgICAgICAgIAogI2lmIFBMQVRG
T1JNKE1BQykgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxE
SU5HX09OX0xFT1BBUkQpCiAgICAgICAgIGdyYW1tYXJTZWFyY2hSYW5nZSA9IHNwZWxsaW5nU2Vh
cmNoUmFuZ2UtPmNsb25lUmFuZ2UoZWMpOwotICAgICAgICBmb3VuZEl0ZW0gPSBmaW5kRmlyc3RN
aXNzcGVsbGluZ09yQmFkR3JhbW1hckluUmFuZ2UoY2xpZW50KCksIHNwZWxsaW5nU2VhcmNoUmFu
Z2UuZ2V0KCksIGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCgpLCBpc1NwZWxsaW5nLCBmb3VuZE9m
ZnNldCwgZ3JhbW1hckRldGFpbCk7CisgICAgICAgIGZvdW5kSXRlbSA9IFRleHRDaGVja2luZ0hl
bHBlcihjbGllbnQoKSwgc3BlbGxpbmdTZWFyY2hSYW5nZSkuZmluZEZpcnN0TWlzc3BlbGxpbmdP
ckJhZEdyYW1tYXIoaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKCksIGlzU3BlbGxpbmcsIGZvdW5k
T2Zmc2V0LCBncmFtbWFyRGV0YWlsKTsKICAgICAgICAgaWYgKGlzU3BlbGxpbmcpIHsKICAgICAg
ICAgICAgIG1pc3NwZWxsZWRXb3JkID0gZm91bmRJdGVtOwogICAgICAgICAgICAgbWlzc3BlbGxp
bmdPZmZzZXQgPSBmb3VuZE9mZnNldDsKQEAgLTIxMDYsNyArMTc4Niw3IEBAIHZvaWQgRWRpdG9y
OjphZHZhbmNlVG9OZXh0TWlzc3BlbGxpbmcoYm9vbCBzdGFydEJlZm9yZVNlbGVjdGlvbikKICAg
ICAgICAgICAgIGdyYW1tYXJQaHJhc2VPZmZzZXQgPSBmb3VuZE9mZnNldDsKICAgICAgICAgfQog
I2Vsc2UKLSAgICAgICAgbWlzc3BlbGxlZFdvcmQgPSBmaW5kRmlyc3RNaXNzcGVsbGluZ0luUmFu
Z2UoY2xpZW50KCksIHNwZWxsaW5nU2VhcmNoUmFuZ2UuZ2V0KCksIG1pc3NwZWxsaW5nT2Zmc2V0
LCBmYWxzZSwgZmlyc3RNaXNzcGVsbGluZ1JhbmdlKTsKKyAgICAgICAgbWlzc3BlbGxlZFdvcmQg
PSBUZXh0Q2hlY2tpbmdIZWxwZXIoY2xpZW50KCksIHNwZWxsaW5nU2VhcmNoUmFuZ2UpLmZpbmRG
aXJzdE1pc3NwZWxsaW5nKG1pc3NwZWxsaW5nT2Zmc2V0LCBmYWxzZSwgZmlyc3RNaXNzcGVsbGlu
Z1JhbmdlKTsKIAogI2lmbmRlZiBCVUlMRElOR19PTl9USUdFUgogICAgICAgICBncmFtbWFyU2Vh
cmNoUmFuZ2UgPSBzcGVsbGluZ1NlYXJjaFJhbmdlLT5jbG9uZVJhbmdlKGVjKTsKQEAgLTIxMTYs
OCArMTc5Niw5IEBAIHZvaWQgRWRpdG9yOjphZHZhbmNlVG9OZXh0TWlzc3BlbGxpbmcoYm9vbCBz
dGFydEJlZm9yZVNlbGVjdGlvbikKICAgICAgICAgICAgIGNoYXJzLmFkdmFuY2UobWlzc3BlbGxp
bmdPZmZzZXQpOwogICAgICAgICAgICAgZ3JhbW1hclNlYXJjaFJhbmdlLT5zZXRFbmQoY2hhcnMu
cmFuZ2UoKS0+c3RhcnRDb250YWluZXIoZWMpLCBjaGFycy5yYW5nZSgpLT5zdGFydE9mZnNldChl
YyksIGVjKTsKICAgICAgICAgfQorCiAgICAgICAgIGlmIChpc0dyYW1tYXJDaGVja2luZ0VuYWJs
ZWQoKSkKLSAgICAgICAgICAgIGJhZEdyYW1tYXJQaHJhc2UgPSBmaW5kRmlyc3RCYWRHcmFtbWFy
SW5SYW5nZShjbGllbnQoKSwgZ3JhbW1hclNlYXJjaFJhbmdlLmdldCgpLCBncmFtbWFyRGV0YWls
LCBncmFtbWFyUGhyYXNlT2Zmc2V0LCBmYWxzZSk7CisgICAgICAgICAgICBiYWRHcmFtbWFyUGhy
YXNlID0gVGV4dENoZWNraW5nSGVscGVyKGNsaWVudCgpLCBncmFtbWFyU2VhcmNoUmFuZ2UpLmZp
bmRGaXJzdEJhZEdyYW1tYXIoZ3JhbW1hckRldGFpbCwgZ3JhbW1hclBocmFzZU9mZnNldCwgZmFs
c2UpOwogI2VuZGlmCiAjZW5kaWYKICAgICB9CkBAIC0yMTgxLDYwICsxODYyLDEzIEBAIGJvb2wg
RWRpdG9yOjppc1NlbGVjdGlvbk1pc3NwZWxsZWQoKQogICAgIHJldHVybiB0cnVlOwogfQogCi0j
aWZuZGVmIEJVSUxESU5HX09OX1RJR0VSCi1zdGF0aWMgYm9vbCBpc1JhbmdlVW5ncmFtbWF0aWNh
bChFZGl0b3JDbGllbnQqIGNsaWVudCwgUmFuZ2UgKnJhbmdlLCBWZWN0b3I8U3RyaW5nPiYgZ3Vl
c3Nlc1ZlY3RvcikKLXsKLSAgICBpZiAoIWNsaWVudCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgRXhjZXB0aW9uQ29kZSBlYzsKLSAgICBpZiAoIXJhbmdlIHx8IHJhbmdlLT5jb2xsYXBz
ZWQoZWMpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgLy8gUmV0dXJucyB0cnVl
IG9ubHkgaWYgdGhlIHBhc3NlZCByYW5nZSBleGFjdGx5IGNvcnJlc3BvbmRzIHRvIGEgYmFkIGdy
YW1tYXIgZGV0YWlsIHJhbmdlLiBUaGlzIGlzIGFuYWxvZ291cwotICAgIC8vIHRvIGlzU2VsZWN0
aW9uTWlzc3BlbGxlZC4gSXQncyBub3QgZ29vZCBlbm91Z2ggZm9yIHRoZXJlIHRvIGJlIHNvbWUg
YmFkIGdyYW1tYXIgc29tZXdoZXJlIGluIHRoZSByYW5nZSwKLSAgICAvLyBvciBvdmVybGFwcGlu
ZyB0aGUgcmFuZ2U7IHRoZSByYW5nZXMgbXVzdCBleGFjdGx5IG1hdGNoLgotICAgIGd1ZXNzZXNW
ZWN0b3IuY2xlYXIoKTsKLSAgICBpbnQgZ3JhbW1hclBocmFzZU9mZnNldDsKLSAgICAKLSAgICBH
cmFtbWFyRGV0YWlsIGdyYW1tYXJEZXRhaWw7Ci0gICAgU3RyaW5nIGJhZEdyYW1tYXJQaHJhc2Ug
PSBmaW5kRmlyc3RCYWRHcmFtbWFySW5SYW5nZShjbGllbnQsIHJhbmdlLCBncmFtbWFyRGV0YWls
LCBncmFtbWFyUGhyYXNlT2Zmc2V0LCBmYWxzZSk7ICAgIAotICAgIAotICAgIC8vIE5vIGJhZCBn
cmFtbWFyIGluIHRoZXNlIHBhcnRzIGF0IGFsbC4KLSAgICBpZiAoYmFkR3JhbW1hclBocmFzZS5p
c0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICAvLyBCYWQgZ3JhbW1h
ciwgYnV0IHBocmFzZSAoZS5nLiBzZW50ZW5jZSkgc3RhcnRzIGJleW9uZCBzdGFydCBvZiByYW5n
ZS4KLSAgICBpZiAoZ3JhbW1hclBocmFzZU9mZnNldCA+IDApCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAKLSAgICBBU1NFUlQoZ3JhbW1hckRldGFpbC5sb2NhdGlvbiA+PSAwICYmIGdyYW1t
YXJEZXRhaWwubGVuZ3RoID4gMCk7Ci0gICAgCi0gICAgLy8gQmFkIGdyYW1tYXIsIGJ1dCBzdGFy
dCBvZiBkZXRhaWwgKGUuZy4gdW5ncmFtbWF0aWNhbCB3b3JkKSBkb2Vzbid0IG1hdGNoIHN0YXJ0
IG9mIHJhbmdlCi0gICAgaWYgKGdyYW1tYXJEZXRhaWwubG9jYXRpb24gKyBncmFtbWFyUGhyYXNl
T2Zmc2V0KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgLy8gQmFkIGdyYW1tYXIg
YXQgc3RhcnQgb2YgcmFuZ2UsIGJ1dCBlbmQgb2YgYmFkIGdyYW1tYXIgaXMgYmVmb3JlIG9yIGFm
dGVyIGVuZCBvZiByYW5nZQotICAgIGlmIChncmFtbWFyRGV0YWlsLmxlbmd0aCAhPSBUZXh0SXRl
cmF0b3I6OnJhbmdlTGVuZ3RoKHJhbmdlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAot
ICAgIC8vIFVwZGF0ZSB0aGUgc3BlbGxpbmcgcGFuZWwgdG8gYmUgZGlzcGxheWluZyB0aGlzIGVy
cm9yICh3aGV0aGVyIG9yIG5vdCB0aGUgc3BlbGxpbmcgcGFuZWwgaXMgb24gc2NyZWVuKS4KLSAg
ICAvLyBUaGlzIGlzIG5lY2Vzc2FyeSB0byBtYWtlIGEgc3Vic2VxdWVudCBjYWxsIHRvIFtOU1Nw
ZWxsQ2hlY2tlciBpZ25vcmVXb3JkOmluU3BlbGxEb2N1bWVudFdpdGhUYWc6XSB3b3JrCi0gICAg
Ly8gY29ycmVjdGx5OyB0aGF0IGNhbGwgYmVoYXZlcyBkaWZmZXJlbnRseSBiYXNlZCBvbiB3aGV0
aGVyIHRoZSBzcGVsbGluZyBwYW5lbCBpcyBkaXNwbGF5aW5nIGEgbWlzc3BlbGxpbmcKLSAgICAv
LyBvciBhIGdyYW1tYXIgZXJyb3IuCi0gICAgY2xpZW50LT51cGRhdGVTcGVsbGluZ1VJV2l0aEdy
YW1tYXJTdHJpbmcoYmFkR3JhbW1hclBocmFzZSwgZ3JhbW1hckRldGFpbCk7Ci0gICAgCi0gICAg
cmV0dXJuIHRydWU7Ci19Ci0jZW5kaWYKLQogYm9vbCBFZGl0b3I6OmlzU2VsZWN0aW9uVW5ncmFt
bWF0aWNhbCgpCiB7CiAjaWZkZWYgQlVJTERJTkdfT05fVElHRVIKICAgICByZXR1cm4gZmFsc2U7
CiAjZWxzZQogICAgIFZlY3RvcjxTdHJpbmc+IGlnbm9yZWRHdWVzc2VzOwotICAgIHJldHVybiBp
c1JhbmdlVW5ncmFtbWF0aWNhbChjbGllbnQoKSwgZnJhbWUoKS0+c2VsZWN0aW9uKCktPnRvTm9y
bWFsaXplZFJhbmdlKCkuZ2V0KCksIGlnbm9yZWRHdWVzc2VzKTsKKyAgICByZXR1cm4gVGV4dENo
ZWNraW5nSGVscGVyKGNsaWVudCgpLCBmcmFtZSgpLT5zZWxlY3Rpb24oKS0+dG9Ob3JtYWxpemVk
UmFuZ2UoKSkuaXNVbmdyYW1tYXRpY2FsKGlnbm9yZWRHdWVzc2VzKTsKICNlbmRpZgogfQogCkBA
IC0yMjQ0LDggKzE4NzgsOCBAQCBWZWN0b3I8U3RyaW5nPiBFZGl0b3I6Omd1ZXNzZXNGb3JVbmdy
YW1tYXRpY2FsU2VsZWN0aW9uKCkKICAgICByZXR1cm4gVmVjdG9yPFN0cmluZz4oKTsKICNlbHNl
CiAgICAgVmVjdG9yPFN0cmluZz4gZ3Vlc3NlczsKLSAgICAvLyBJZ25vcmUgdGhlIHJlc3VsdCBv
ZiBpc1JhbmdlVW5ncmFtbWF0aWNhbDsgd2UganVzdCB3YW50IHRoZSBndWVzc2VzLCB3aGV0aGVy
IG9yIG5vdCB0aGVyZSBhcmUgYW55Ci0gICAgaXNSYW5nZVVuZ3JhbW1hdGljYWwoY2xpZW50KCks
IGZyYW1lKCktPnNlbGVjdGlvbigpLT50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBndWVzc2Vz
KTsKKyAgICAvLyBJZ25vcmUgdGhlIHJlc3VsdCBvZiBpc1VuZ3JhbW1hdGljYWw7IHdlIGp1c3Qg
d2FudCB0aGUgZ3Vlc3Nlcywgd2hldGhlciBvciBub3QgdGhlcmUgYXJlIGFueQorICAgIFRleHRD
aGVja2luZ0hlbHBlcihjbGllbnQoKSwgZnJhbWUoKS0+c2VsZWN0aW9uKCktPnRvTm9ybWFsaXpl
ZFJhbmdlKCkpLmlzVW5ncmFtbWF0aWNhbChndWVzc2VzKTsKICAgICByZXR1cm4gZ3Vlc3NlczsK
ICNlbmRpZgogfQpAQCAtMjI2MSw3MiArMTg5NSwxMCBAQCBWZWN0b3I8U3RyaW5nPiBFZGl0b3I6
Omd1ZXNzZXNGb3JNaXNzcGVsbGVkU2VsZWN0aW9uKCkKICAgICByZXR1cm4gZ3Vlc3NlczsKIH0K
IAotI2lmIFBMQVRGT1JNKE1BQykgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFk
ZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpCi0KLXN0YXRpYyBWZWN0b3I8U3RyaW5nPiBndWVz
c2VzRm9yTWlzc3BlbGxlZE9yVW5ncmFtbWF0aWNhbFJhbmdlKEVkaXRvckNsaWVudCogY2xpZW50
LCBSYW5nZSAqcmFuZ2UsIGJvb2wgY2hlY2tHcmFtbWFyLCBib29sJiBtaXNzcGVsbGVkLCBib29s
JiB1bmdyYW1tYXRpY2FsKQotewotICAgIFZlY3RvcjxTdHJpbmc+IGd1ZXNzZXM7Ci0gICAgRXhj
ZXB0aW9uQ29kZSBlYzsKLSAgICBtaXNzcGVsbGVkID0gZmFsc2U7Ci0gICAgdW5ncmFtbWF0aWNh
bCA9IGZhbHNlOwotICAgIAotICAgIGlmICghY2xpZW50IHx8ICFyYW5nZSB8fCByYW5nZS0+Y29s
bGFwc2VkKGVjKSkKLSAgICAgICAgcmV0dXJuIGd1ZXNzZXM7Ci0KLSAgICAvLyBFeHBhbmQgdGhl
IHJhbmdlIHRvIGVuY29tcGFzcyBlbnRpcmUgcGFyYWdyYXBocywgc2luY2UgdGV4dCBjaGVja2lu
ZyBuZWVkcyB0aGF0IG11Y2ggY29udGV4dC4KLSAgICBpbnQgcmFuZ2VTdGFydE9mZnNldDsKLSAg
ICBTdHJpbmcgcGFyYWdyYXBoU3RyaW5nOwotICAgIFJlZlB0cjxSYW5nZT4gcGFyYWdyYXBoUmFu
Z2UgPSBwYXJhZ3JhcGhBbGlnbmVkUmFuZ2VGb3JSYW5nZShyYW5nZSwgcmFuZ2VTdGFydE9mZnNl
dCwgcGFyYWdyYXBoU3RyaW5nKTsKLSAgICBpbnQgcmFuZ2VMZW5ndGggPSBUZXh0SXRlcmF0b3I6
OnJhbmdlTGVuZ3RoKHJhbmdlKTsKLSAgICBpZiAoIXJhbmdlTGVuZ3RoIHx8ICFwYXJhZ3JhcGhT
dHJpbmcubGVuZ3RoKCkpCi0gICAgICAgIHJldHVybiBndWVzc2VzOwotCi0gICAgVmVjdG9yPFRl
eHRDaGVja2luZ1Jlc3VsdD4gcmVzdWx0czsKLSAgICB1aW50NjRfdCBjaGVja2luZ1R5cGVzID0g
Y2hlY2tHcmFtbWFyID8gKFRleHRDaGVja2luZ1R5cGVTcGVsbGluZyB8IFRleHRDaGVja2luZ1R5
cGVHcmFtbWFyKSA6IFRleHRDaGVja2luZ1R5cGVTcGVsbGluZzsKLSAgICBjbGllbnQtPmNoZWNr
VGV4dE9mUGFyYWdyYXBoKHBhcmFncmFwaFN0cmluZy5jaGFyYWN0ZXJzKCksIHBhcmFncmFwaFN0
cmluZy5sZW5ndGgoKSwgY2hlY2tpbmdUeXBlcywgcmVzdWx0cyk7Ci0gICAgCi0gICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHJlc3VsdHMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgY29uc3Qg
VGV4dENoZWNraW5nUmVzdWx0KiByZXN1bHQgPSAmcmVzdWx0c1tpXTsKLSAgICAgICAgaWYgKHJl
c3VsdC0+dHlwZSA9PSBUZXh0Q2hlY2tpbmdUeXBlU3BlbGxpbmcgJiYgcmVzdWx0LT5sb2NhdGlv
biA9PSByYW5nZVN0YXJ0T2Zmc2V0ICYmIHJlc3VsdC0+bGVuZ3RoID09IHJhbmdlTGVuZ3RoKSB7
Ci0gICAgICAgICAgICBTdHJpbmcgbWlzc3BlbGxlZFdvcmQgPSBwYXJhZ3JhcGhTdHJpbmcuc3Vi
c3RyaW5nKHJhbmdlU3RhcnRPZmZzZXQsIHJhbmdlTGVuZ3RoKTsKLSAgICAgICAgICAgIEFTU0VS
VChtaXNzcGVsbGVkV29yZC5sZW5ndGgoKSk7Ci0gICAgICAgICAgICBjbGllbnQtPmdldEd1ZXNz
ZXNGb3JXb3JkKG1pc3NwZWxsZWRXb3JkLCBndWVzc2VzKTsKLSAgICAgICAgICAgIGNsaWVudC0+
dXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVkV29yZChtaXNzcGVsbGVkV29yZCk7Ci0gICAg
ICAgICAgICBtaXNzcGVsbGVkID0gdHJ1ZTsKLSAgICAgICAgICAgIHJldHVybiBndWVzc2VzOwot
ICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIGlmICghY2hlY2tHcmFtbWFyKQotICAgICAgICBy
ZXR1cm4gZ3Vlc3NlczsKLSAgICAgICAgCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJl
c3VsdHMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgY29uc3QgVGV4dENoZWNraW5nUmVzdWx0KiBy
ZXN1bHQgPSAmcmVzdWx0c1tpXTsKLSAgICAgICAgaWYgKHJlc3VsdC0+dHlwZSA9PSBUZXh0Q2hl
Y2tpbmdUeXBlR3JhbW1hciAmJiByZXN1bHQtPmxvY2F0aW9uIDw9IHJhbmdlU3RhcnRPZmZzZXQg
JiYgcmVzdWx0LT5sb2NhdGlvbiArIHJlc3VsdC0+bGVuZ3RoID49IHJhbmdlU3RhcnRPZmZzZXQg
KyByYW5nZUxlbmd0aCkgewotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IHJl
c3VsdC0+ZGV0YWlscy5zaXplKCk7IGorKykgewotICAgICAgICAgICAgICAgIGNvbnN0IEdyYW1t
YXJEZXRhaWwqIGRldGFpbCA9ICZyZXN1bHQtPmRldGFpbHNbal07Ci0gICAgICAgICAgICAgICAg
QVNTRVJUKGRldGFpbC0+bGVuZ3RoID4gMCAmJiBkZXRhaWwtPmxvY2F0aW9uID49IDApOwotICAg
ICAgICAgICAgICAgIGlmIChyZXN1bHQtPmxvY2F0aW9uICsgZGV0YWlsLT5sb2NhdGlvbiA9PSBy
YW5nZVN0YXJ0T2Zmc2V0ICYmIGRldGFpbC0+bGVuZ3RoID09IHJhbmdlTGVuZ3RoKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIFN0cmluZyBiYWRHcmFtbWFyUGhyYXNlID0gcGFyYWdyYXBoU3RyaW5n
LnN1YnN0cmluZyhyZXN1bHQtPmxvY2F0aW9uLCByZXN1bHQtPmxlbmd0aCk7Ci0gICAgICAgICAg
ICAgICAgICAgIEFTU0VSVChiYWRHcmFtbWFyUGhyYXNlLmxlbmd0aCgpKTsKLSAgICAgICAgICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBrID0gMDsgayA8IGRldGFpbC0+Z3Vlc3Nlcy5zaXplKCk7
IGsrKykKLSAgICAgICAgICAgICAgICAgICAgICAgIGd1ZXNzZXMuYXBwZW5kKGRldGFpbC0+Z3Vl
c3Nlc1trXSk7Ci0gICAgICAgICAgICAgICAgICAgIGNsaWVudC0+dXBkYXRlU3BlbGxpbmdVSVdp
dGhHcmFtbWFyU3RyaW5nKGJhZEdyYW1tYXJQaHJhc2UsICpkZXRhaWwpOwotICAgICAgICAgICAg
ICAgICAgICB1bmdyYW1tYXRpY2FsID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGd1ZXNzZXM7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgfQotICAgIHJldHVybiBndWVzc2VzOwotfQotCi0jZW5kaWYKLQogVmVjdG9yPFN0cmluZz4g
RWRpdG9yOjpndWVzc2VzRm9yTWlzc3BlbGxlZE9yVW5ncmFtbWF0aWNhbFNlbGVjdGlvbihib29s
JiBtaXNzcGVsbGVkLCBib29sJiB1bmdyYW1tYXRpY2FsKQogewogI2lmIFBMQVRGT1JNKE1BQykg
JiYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xF
T1BBUkQpCi0gICAgcmV0dXJuIGd1ZXNzZXNGb3JNaXNzcGVsbGVkT3JVbmdyYW1tYXRpY2FsUmFu
Z2UoY2xpZW50KCksIGZyYW1lKCktPnNlbGVjdGlvbigpLT50b05vcm1hbGl6ZWRSYW5nZSgpLmdl
dCgpLCBpc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQoKSwgbWlzc3BlbGxlZCwgdW5ncmFtbWF0aWNh
bCk7CisgICAgcmV0dXJuIFRleHRDaGVja2luZ0hlbHBlcihjbGllbnQoKSwgZnJhbWUoKS0+c2Vs
ZWN0aW9uKCktPnRvTm9ybWFsaXplZFJhbmdlKCkpLmd1ZXNzZXNGb3JNaXNzcGVsbGVkT3JVbmdy
YW1tYXRpY2FsUmFuZ2UoaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKCksIG1pc3NwZWxsZWQsIHVu
Z3JhbW1hdGljYWwpOwogI2Vsc2UKICAgICBtaXNzcGVsbGVkID0gaXNTZWxlY3Rpb25NaXNzcGVs
bGVkKCk7CiAgICAgaWYgKG1pc3NwZWxsZWQpIHsKQEAgLTI1MDMsMzQgKzIwNzUsMTUgQEAgdm9p
ZCBFZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZ1RvUG9zaXRpb24oY29uc3QgVmlz
aWJsZVBvc2l0aW9uICZwKQogICAgIG1hcmtCYWRHcmFtbWFyKFZpc2libGVTZWxlY3Rpb24oc3Rh
cnRPZlNlbnRlbmNlKHApLCBlbmRPZlNlbnRlbmNlKHApKSk7CiAjZW5kaWYKIH0KLQotc3RhdGlj
IHZvaWQgbWFya0FsbE1pc3NwZWxsaW5nc0luUmFuZ2UoRWRpdG9yQ2xpZW50KiBjbGllbnQsIFJh
bmdlKiBzZWFyY2hSYW5nZSwgUmVmUHRyPFJhbmdlPiYgZmlyc3RNaXNzcGVsbGluZ1JhbmdlKQot
ewotICAgIC8vIFVzZSB0aGUgIm1hcmtBbGwiIGZlYXR1cmUgb2YgZmluZEZpcnN0TWlzc3BlbGxp
bmdJblJhbmdlLiBJZ25vcmUgdGhlIHJldHVybiB2YWx1ZSBhbmQgdGhlICJvdXQgcGFyYW1ldGVy
IjsKLSAgICAvLyBhbGwgd2UgbmVlZCB0byBkbyBpcyBtYXJrIGV2ZXJ5IGluc3RhbmNlLgotICAg
IGludCBpZ25vcmVkT2Zmc2V0OwotICAgIGZpbmRGaXJzdE1pc3NwZWxsaW5nSW5SYW5nZShjbGll
bnQsIHNlYXJjaFJhbmdlLCBpZ25vcmVkT2Zmc2V0LCB0cnVlLCBmaXJzdE1pc3NwZWxsaW5nUmFu
Z2UpOwotfQotCi0jaWZuZGVmIEJVSUxESU5HX09OX1RJR0VSCi1zdGF0aWMgdm9pZCBtYXJrQWxs
QmFkR3JhbW1hckluUmFuZ2UoRWRpdG9yQ2xpZW50KiBjbGllbnQsIFJhbmdlKiBzZWFyY2hSYW5n
ZSkKLXsKLSAgICAvLyBVc2UgdGhlICJtYXJrQWxsIiBmZWF0dXJlIG9mIGZpbmRGaXJzdEJhZEdy
YW1tYXJJblJhbmdlLiBJZ25vcmUgdGhlIHJldHVybiB2YWx1ZSBhbmQgIm91dCBwYXJhbWV0ZXJz
IjsgYWxsIHdlIG5lZWQgdG8KLSAgICAvLyBkbyBpcyBtYXJrIGV2ZXJ5IGluc3RhbmNlLgotICAg
IEdyYW1tYXJEZXRhaWwgaWdub3JlZEdyYW1tYXJEZXRhaWw7Ci0gICAgaW50IGlnbm9yZWRPZmZz
ZXQ7Ci0gICAgZmluZEZpcnN0QmFkR3JhbW1hckluUmFuZ2UoY2xpZW50LCBzZWFyY2hSYW5nZSwg
aWdub3JlZEdyYW1tYXJEZXRhaWwsIGlnbm9yZWRPZmZzZXQsIHRydWUpOwotfQotI2VuZGlmCiAg
ICAgCi1zdGF0aWMgdm9pZCBtYXJrTWlzc3BlbGxpbmdzT3JCYWRHcmFtbWFyKEVkaXRvciogZWRp
dG9yLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24sIGJvb2wgY2hlY2tTcGVsbGlu
ZywgUmVmUHRyPFJhbmdlPiYgZmlyc3RNaXNzcGVsbGluZ1JhbmdlKQordm9pZCBFZGl0b3I6Om1h
cmtNaXNzcGVsbGluZ3NPckJhZEdyYW1tYXIoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0
aW9uLCBib29sIGNoZWNrU3BlbGxpbmcsIFJlZlB0cjxSYW5nZT4mIGZpcnN0TWlzc3BlbGxpbmdS
YW5nZSkKIHsKICAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIGEgc2VsZWN0aW9u
IGFscmVhZHkgZXhwYW5kZWQgdG8gd29yZCBib3VuZGFyaWVzLgogICAgIC8vIE1pZ2h0IGJlIG5p
Y2UgdG8gYXNzZXJ0IHRoYXQgaGVyZS4KICAgICAKICAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIHVz
ZWQgb25seSBmb3IgYXMteW91LXR5cGUgY2hlY2tpbmcsIHNvIGlmIHRoYXQncyBvZmYgd2UgZG8g
bm90aGluZy4gTm90ZSB0aGF0CiAgICAgLy8gZ3JhbW1hciBjaGVja2luZyBjYW4gb25seSBiZSBv
biBpZiBzcGVsbCBjaGVja2luZyBpcyBhbHNvIG9uLgotICAgIGlmICghZWRpdG9yLT5pc0NvbnRp
bnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCgpKQorICAgIGlmICghaXNDb250aW51b3VzU3BlbGxD
aGVja2luZ0VuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIFJlZlB0cjxSYW5n
ZT4gc2VhcmNoUmFuZ2Uoc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkpOwpAQCAtMjU0Miwy
MSArMjA5NSwyMiBAQCBzdGF0aWMgdm9pZCBtYXJrTWlzc3BlbGxpbmdzT3JCYWRHcmFtbWFyKEVk
aXRvciogZWRpdG9yLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJgogICAgIGlmICghZWRpdGFibGVO
b2RlIHx8ICFlZGl0YWJsZU5vZGUtPmlzQ29udGVudEVkaXRhYmxlKCkpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIGlmICghZWRpdG9yLT5pc1NwZWxsQ2hlY2tpbmdFbmFibGVkSW5Gb2N1c2VkTm9k
ZSgpKQorICAgIGlmICghaXNTcGVsbENoZWNraW5nRW5hYmxlZEluRm9jdXNlZE5vZGUoKSkKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgLy8gR2V0IHRoZSBzcGVsbCBjaGVja2VyIGlmIGl0IGlzIGF2
YWlsYWJsZQotICAgIGlmICghZWRpdG9yLT5jbGllbnQoKSkKKyAgICBpZiAoIWNsaWVudCgpKQog
ICAgICAgICByZXR1cm47CiAgICAgCisgICAgVGV4dENoZWNraW5nSGVscGVyIGNoZWNrZXIoY2xp
ZW50KCksIHNlYXJjaFJhbmdlKTsKICAgICBpZiAoY2hlY2tTcGVsbGluZykKLSAgICAgICAgbWFy
a0FsbE1pc3NwZWxsaW5nc0luUmFuZ2UoZWRpdG9yLT5jbGllbnQoKSwgc2VhcmNoUmFuZ2UuZ2V0
KCksIGZpcnN0TWlzc3BlbGxpbmdSYW5nZSk7CisgICAgICAgIGNoZWNrZXIubWFya0FsbE1pc3Nw
ZWxsaW5ncyhmaXJzdE1pc3NwZWxsaW5nUmFuZ2UpOwogICAgIGVsc2UgewogI2lmZGVmIEJVSUxE
SU5HX09OX1RJR0VSCiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogI2Vsc2UKLSAgICAg
ICAgaWYgKGVkaXRvci0+aXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKCkpCi0gICAgICAgICAgICBt
YXJrQWxsQmFkR3JhbW1hckluUmFuZ2UoZWRpdG9yLT5jbGllbnQoKSwgc2VhcmNoUmFuZ2UuZ2V0
KCkpOworICAgICAgICBpZiAoaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKCkpCisgICAgICAgICAg
ICBjaGVja2VyLm1hcmtBbGxCYWRHcmFtbWFyKCk7CiAjZW5kaWYKICAgICB9ICAgIAogfQpAQCAt
MjU3NiwxNCArMjEzMCwxNCBAQCBib29sIEVkaXRvcjo6aXNTcGVsbENoZWNraW5nRW5hYmxlZElu
Rm9jdXNlZE5vZGUoKSBjb25zdAogCiB2b2lkIEVkaXRvcjo6bWFya01pc3NwZWxsaW5ncyhjb25z
dCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24sIFJlZlB0cjxSYW5nZT4mIGZpcnN0TWlzc3Bl
bGxpbmdSYW5nZSkKIHsKLSAgICBtYXJrTWlzc3BlbGxpbmdzT3JCYWRHcmFtbWFyKHRoaXMsIHNl
bGVjdGlvbiwgdHJ1ZSwgZmlyc3RNaXNzcGVsbGluZ1JhbmdlKTsKKyAgICBtYXJrTWlzc3BlbGxp
bmdzT3JCYWRHcmFtbWFyKHNlbGVjdGlvbiwgdHJ1ZSwgZmlyc3RNaXNzcGVsbGluZ1JhbmdlKTsK
IH0KICAgICAKIHZvaWQgRWRpdG9yOjptYXJrQmFkR3JhbW1hcihjb25zdCBWaXNpYmxlU2VsZWN0
aW9uJiBzZWxlY3Rpb24pCiB7CiAjaWZuZGVmIEJVSUxESU5HX09OX1RJR0VSCiAgICAgUmVmUHRy
PFJhbmdlPiBmaXJzdE1pc3NwZWxsaW5nUmFuZ2U7Ci0gICAgbWFya01pc3NwZWxsaW5nc09yQmFk
R3JhbW1hcih0aGlzLCBzZWxlY3Rpb24sIGZhbHNlLCBmaXJzdE1pc3NwZWxsaW5nUmFuZ2UpOwor
ICAgIG1hcmtNaXNzcGVsbGluZ3NPckJhZEdyYW1tYXIoc2VsZWN0aW9uLCBmYWxzZSwgZmlyc3RN
aXNzcGVsbGluZ1JhbmdlKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKHNlbGVjdGlvbik7CiAj
ZW5kaWYKQEAgLTI2MzYsMTIgKzIxOTAsMTIgQEAgdm9pZCBFZGl0b3I6Om1hcmtBbGxNaXNzcGVs
bGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXMoVGV4dENoZWNraW5nT3B0aW9ucyB0ZXh0Q2gKIAog
ICAgIGlmIChzaG91bGRNYXJrR3JhbW1hcikgewogICAgICAgICAvLyBUaGUgc3BlbGxpbmcgcmFu
Z2Ugc2hvdWxkIGJlIGNvbnRhaW5lZCBpbiB0aGUgcGFyYWdyYXBoLWFsaWduZWQgZXh0ZW5zaW9u
IG9mIHRoZSBncmFtbWFyIHJhbmdlLgotICAgICAgICBwYXJhZ3JhcGhSYW5nZSA9IHBhcmFncmFw
aEFsaWduZWRSYW5nZUZvclJhbmdlKGdyYW1tYXJSYW5nZSwgZ3JhbW1hclJhbmdlU3RhcnRPZmZz
ZXQsIHBhcmFncmFwaFN0cmluZyk7CisgICAgICAgIHBhcmFncmFwaFJhbmdlID0gVGV4dENoZWNr
aW5nSGVscGVyKGNsaWVudCgpLCBncmFtbWFyUmFuZ2UpLnBhcmFncmFwaEFsaWduZWRSYW5nZShn
cmFtbWFyUmFuZ2VTdGFydE9mZnNldCwgcGFyYWdyYXBoU3RyaW5nKTsKICAgICAgICAgUmVmUHRy
PFJhbmdlPiBvZmZzZXRBc1JhbmdlID0gUmFuZ2U6OmNyZWF0ZShwYXJhZ3JhcGhSYW5nZS0+c3Rh
cnRDb250YWluZXIoZWMpLT5kb2N1bWVudCgpLCBwYXJhZ3JhcGhSYW5nZS0+c3RhcnRQb3NpdGlv
bigpLCBzcGVsbGluZ1JhbmdlLT5zdGFydFBvc2l0aW9uKCkpOwogICAgICAgICBzcGVsbGluZ1Jh
bmdlU3RhcnRPZmZzZXQgPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKG9mZnNldEFzUmFuZ2Uu
Z2V0KCkpOwogICAgICAgICBncmFtbWFyUmFuZ2VFbmRPZmZzZXQgPSBncmFtbWFyUmFuZ2VTdGFy
dE9mZnNldCArIFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgoZ3JhbW1hclJhbmdlKTsKICAgICB9
IGVsc2UgewotICAgICAgICBwYXJhZ3JhcGhSYW5nZSA9IHBhcmFncmFwaEFsaWduZWRSYW5nZUZv
clJhbmdlKHNwZWxsaW5nUmFuZ2UsIHNwZWxsaW5nUmFuZ2VTdGFydE9mZnNldCwgcGFyYWdyYXBo
U3RyaW5nKTsKKyAgICAgICAgcGFyYWdyYXBoUmFuZ2UgPSBUZXh0Q2hlY2tpbmdIZWxwZXIoY2xp
ZW50KCksIHNwZWxsaW5nUmFuZ2UpLnBhcmFncmFwaEFsaWduZWRSYW5nZShzcGVsbGluZ1Jhbmdl
U3RhcnRPZmZzZXQsIHBhcmFncmFwaFN0cmluZyk7CiAgICAgfQogICAgIHNwZWxsaW5nUmFuZ2VF
bmRPZmZzZXQgPSBzcGVsbGluZ1JhbmdlU3RhcnRPZmZzZXQgKyBUZXh0SXRlcmF0b3I6OnJhbmdl
TGVuZ3RoKHNwZWxsaW5nUmFuZ2UpOwogICAgIHBhcmFncmFwaExlbmd0aCA9IHBhcmFncmFwaFN0
cmluZy5sZW5ndGgoKTsKQEAgLTI4MzEsMTAgKzIzODUsMTAgQEAgdm9pZCBFZGl0b3I6OmNoYW5n
ZUJhY2tUb1JlcGxhY2VkU3RyaW5nKGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcpCiAgICAg
UmVmUHRyPFJhbmdlPiBzZWxlY3Rpb24gPSBzZWxlY3RlZFJhbmdlKCk7CiAgICAgaWYgKCFzaG91
bGRJbnNlcnRUZXh0KHJlcGxhY2VkU3RyaW5nLCBzZWxlY3Rpb24uZ2V0KCksIEVkaXRvckluc2Vy
dEFjdGlvblBhc3RlZCkpCiAgICAgICAgIHJldHVybjsKLSAgICAgICAgCisgICAgCiAgICAgU3Ry
aW5nIHBhcmFncmFwaFN0cmluZzsKICAgICBpbnQgc2VsZWN0aW9uT2Zmc2V0OwotICAgIFJlZlB0
cjxSYW5nZT4gcGFyYWdyYXBoUmFuZ2UgPSBwYXJhZ3JhcGhBbGlnbmVkUmFuZ2VGb3JSYW5nZShz
ZWxlY3Rpb24uZ2V0KCksIHNlbGVjdGlvbk9mZnNldCwgcGFyYWdyYXBoU3RyaW5nKTsKKyAgICBS
ZWZQdHI8UmFuZ2U+IHBhcmFncmFwaFJhbmdlID0gVGV4dENoZWNraW5nSGVscGVyKGNsaWVudCgp
LCBzZWxlY3Rpb24pLnBhcmFncmFwaEFsaWduZWRSYW5nZShzZWxlY3Rpb25PZmZzZXQsIHBhcmFn
cmFwaFN0cmluZyk7CiAgICAgcmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0KHJlcGxhY2VkU3RyaW5n
LCBmYWxzZSwgZmFsc2UpOwogICAgIFJlZlB0cjxSYW5nZT4gY2hhbmdlZFJhbmdlID0gVGV4dEl0
ZXJhdG9yOjpzdWJyYW5nZShwYXJhZ3JhcGhSYW5nZS5nZXQoKSwgc2VsZWN0aW9uT2Zmc2V0LCBy
ZXBsYWNlZFN0cmluZy5sZW5ndGgoKSk7CiAgICAgY2hhbmdlZFJhbmdlLT5zdGFydENvbnRhaW5l
cigpLT5kb2N1bWVudCgpLT5tYXJrZXJzKCktPmFkZE1hcmtlcihjaGFuZ2VkUmFuZ2UuZ2V0KCks
IERvY3VtZW50TWFya2VyOjpSZXBsYWNlbWVudCwgU3RyaW5nKCkpOwpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9lZGl0aW5nL0VkaXRvci5oIGIvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCmluZGV4IGU5
NDI1NjBkYTVmMTM2MmYxYzcyMWY3YmQyY2QzODIwM2MxMTMyOGQuLjExMGUzZjlhOGYxODMyNTE3
YjJkZDlhMjc0N2JhNTQ2ZjBmYTBhZGYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZWRpdGluZy9FZGl0
b3IuaAorKysgYi9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgKQEAgLTQwNCw2ICs0MDQsNyBAQCBw
cml2YXRlOgogICAgIHZvaWQgcmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0KGNvbnN0IFN0cmluZyYs
IGJvb2wgc2VsZWN0UmVwbGFjZW1lbnQsIGJvb2wgc21hcnRSZXBsYWNlKTsKICAgICB2b2lkIHdy
aXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKFBhc3RlYm9hcmQqKTsKICAgICB2b2lkIHJldmVhbFNl
bGVjdGlvbkFmdGVyRWRpdGluZ09wZXJhdGlvbigpOworICAgIHZvaWQgbWFya01pc3NwZWxsaW5n
c09yQmFkR3JhbW1hcihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiwgYm9vbCBjaGVja1NwZWxsaW5n
LCBSZWZQdHI8UmFuZ2U+JiBmaXJzdE1pc3NwZWxsaW5nUmFuZ2UpOwogCiAgICAgdm9pZCBzZWxl
Y3RDb21wb3NpdGlvbigpOwogICAgIHZvaWQgY29uZmlybUNvbXBvc2l0aW9uKGNvbnN0IFN0cmlu
ZyYsIGJvb2wgcHJlc2VydmVTZWxlY3Rpb24pOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9lZGl0aW5n
L1RleHRDaGVja2luZ0hlbHBlci5jcHAgYi9XZWJDb3JlL2VkaXRpbmcvVGV4dENoZWNraW5nSGVs
cGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi40OTY3NGZmYzI4ZjM1OGM0YjQxNzcxMmY4NmQ4NDI2YjVkNTJm
YzNhCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9lZGl0aW5nL1RleHRDaGVja2luZ0hlbHBl
ci5jcHAKQEAgLTAsMCArMSw1MjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IE5v
a2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGV4dENoZWNraW5nSGVscGVyLmgiCisKKyNpbmNs
dWRlICJSYW5nZS5oIgorI2luY2x1ZGUgIlRleHRJdGVyYXRvci5oIgorI2luY2x1ZGUgIlZpc2li
bGVQb3NpdGlvbi5oIgorI2luY2x1ZGUgInZpc2libGVfdW5pdHMuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitUZXh0Q2hlY2tpbmdIZWxwZXI6OlRleHRDaGVja2luZ0hlbHBlcihFZGl0b3JD
bGllbnQqIGNsaWVudCwgUGFzc1JlZlB0cjxSYW5nZT4gcmFuZ2UpCisgICAgOiBtX2NsaWVudChj
bGllbnQpCisgICAgLCBtX3JhbmdlKHJhbmdlKQoreworICAgIEFTU0VSVF9BUkcobV9jbGllbnQs
IG1fY2xpZW50KTsKKyAgICBBU1NFUlRfQVJHKG1fcmFuZ2UsIG1fcmFuZ2UpOworfQorCitUZXh0
Q2hlY2tpbmdIZWxwZXI6On5UZXh0Q2hlY2tpbmdIZWxwZXIoKQoreworfQorCitQYXNzUmVmUHRy
PFJhbmdlPiBUZXh0Q2hlY2tpbmdIZWxwZXI6OnBhcmFncmFwaEFsaWduZWRSYW5nZShpbnQmIG9m
ZnNldEludG9QYXJhZ3JhcGhBbGlnbmVkUmFuZ2UsIFN0cmluZyYgcGFyYWdyYXBoU3RyaW5nKSBj
b25zdAoreworI2lmbmRlZiBCVUlMRElOR19PTl9USUdFUgorICAgIEV4Y2VwdGlvbkNvZGUgZWMg
PSAwOworICAgIAorICAgIC8vIEV4cGFuZCByYW5nZSB0byBwYXJhZ3JhcGggYm91bmRhcmllcwor
ICAgIFJlZlB0cjxSYW5nZT4gcGFyYWdyYXBoUmFuZ2UgPSBtX3JhbmdlLT5jbG9uZVJhbmdlKGVj
KTsKKyAgICBzZXRTdGFydChwYXJhZ3JhcGhSYW5nZS5nZXQoKSwgc3RhcnRPZlBhcmFncmFwaCht
X3JhbmdlLT5zdGFydFBvc2l0aW9uKCkpKTsKKyAgICBzZXRFbmQocGFyYWdyYXBoUmFuZ2UuZ2V0
KCksIGVuZE9mUGFyYWdyYXBoKG1fcmFuZ2UtPmVuZFBvc2l0aW9uKCkpKTsKKyAgICAKKyAgICAv
LyBDb21wdXRlIG9mZnNldCBmcm9tIHN0YXJ0IG9mIGV4cGFuZGVkIHJhbmdlIHRvIHN0YXJ0IG9m
IG9yaWdpbmFsIHJhbmdlCisgICAgUmVmUHRyPFJhbmdlPiBvZmZzZXRBc1JhbmdlID0gUmFuZ2U6
OmNyZWF0ZShwYXJhZ3JhcGhSYW5nZS0+c3RhcnRDb250YWluZXIoZWMpLT5kb2N1bWVudCgpLCBw
YXJhZ3JhcGhSYW5nZS0+c3RhcnRQb3NpdGlvbigpLCBtX3JhbmdlLT5zdGFydFBvc2l0aW9uKCkp
OworICAgIG9mZnNldEludG9QYXJhZ3JhcGhBbGlnbmVkUmFuZ2UgPSBUZXh0SXRlcmF0b3I6OnJh
bmdlTGVuZ3RoKG9mZnNldEFzUmFuZ2UuZ2V0KCkpOworICAgIAorICAgIC8vIEZpbGwgaW4gb3V0
IHBhcmFtZXRlciB3aXRoIHN0cmluZyByZXByZXNlbnRpbmcgZW50aXJlIHBhcmFncmFwaCByYW5n
ZS4KKyAgICAvLyBTb21lZGF5IHdlIG1pZ2h0IGhhdmUgYSBjYWxsZXIgdGhhdCBkb2Vzbid0IHVz
ZSB0aGlzLCBidXQgZm9yIG5vdyBhbGwgY2FsbGVycyBkby4KKyAgICBwYXJhZ3JhcGhTdHJpbmcg
PSBwbGFpblRleHQocGFyYWdyYXBoUmFuZ2UuZ2V0KCkpOworCisgICAgcmV0dXJuIHBhcmFncmFw
aFJhbmdlOworI2Vsc2UKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBVTlVTRURfUEFS
QU0ob2Zmc2V0SW50b1BhcmFncmFwaEFsaWduZWRSYW5nZSk7CisgICAgVU5VU0VEX1BBUkFNKHBh
cmFncmFwaFN0cmluZyk7CisgICAgcmV0dXJuIFBhc3NSZWZQdHI8UmFuZ2U+KDApOworI2VuZGlm
Cit9CisKK1N0cmluZyBUZXh0Q2hlY2tpbmdIZWxwZXI6OmZpbmRGaXJzdE1pc3NwZWxsaW5nKGlu
dCYgZmlyc3RNaXNzcGVsbGluZ09mZnNldCwgYm9vbCBtYXJrQWxsLCBSZWZQdHI8UmFuZ2U+JiBm
aXJzdE1pc3NwZWxsaW5nUmFuZ2UpCit7CisgICAgV29yZEF3YXJlSXRlcmF0b3IgaXQobV9yYW5n
ZS5nZXQoKSk7CisgICAgZmlyc3RNaXNzcGVsbGluZ09mZnNldCA9IDA7CisgICAgCisgICAgU3Ry
aW5nIGZpcnN0TWlzc3BlbGxpbmc7CisgICAgaW50IGN1cnJlbnRDaHVua09mZnNldCA9IDA7CisK
KyAgICB3aGlsZSAoIWl0LmF0RW5kKCkpIHsKKyAgICAgICAgY29uc3QgVUNoYXIqIGNoYXJzID0g
aXQuY2hhcmFjdGVycygpOworICAgICAgICBpbnQgbGVuID0gaXQubGVuZ3RoKCk7CisgICAgICAg
IAorICAgICAgICAvLyBTa2lwIHNvbWUgd29yayBmb3Igb25lLXNwYWNlLWNoYXIgaHVua3MKKyAg
ICAgICAgaWYgKCEobGVuID09IDEgJiYgY2hhcnNbMF0gPT0gJyAnKSkgeworICAgICAgICAgICAg
CisgICAgICAgICAgICBpbnQgbWlzc3BlbGxpbmdMb2NhdGlvbiA9IC0xOworICAgICAgICAgICAg
aW50IG1pc3NwZWxsaW5nTGVuZ3RoID0gMDsKKyAgICAgICAgICAgIG1fY2xpZW50LT5jaGVja1Nw
ZWxsaW5nT2ZTdHJpbmcoY2hhcnMsIGxlbiwgJm1pc3NwZWxsaW5nTG9jYXRpb24sICZtaXNzcGVs
bGluZ0xlbmd0aCk7CisKKyAgICAgICAgICAgIC8vIDU0OTA2Mjcgc2hvd3MgdGhhdCB0aGVyZSB3
YXMgc29tZSBjb2RlIHBhdGggaGVyZSB3aGVyZSB0aGUgU3RyaW5nIGNvbnN0cnVjdG9yIGJlbG93
IGNyYXNoZXMuCisgICAgICAgICAgICAvLyBXZSBkb24ndCBrbm93IGV4YWN0bHkgd2hhdCBjb21i
aW5hdGlvbiBvZiBiYWQgaW5wdXQgY2F1c2VkIHRoaXMsIHNvIHdlJ3JlIG1ha2luZyB0aGlzIG11
Y2gKKyAgICAgICAgICAgIC8vIG1vcmUgcm9idXN0IGFnYWluc3QgYmFkIGlucHV0IG9uIHJlbGVh
c2UgYnVpbGRzLgorICAgICAgICAgICAgQVNTRVJUKG1pc3NwZWxsaW5nTGVuZ3RoID49IDApOwor
ICAgICAgICAgICAgQVNTRVJUKG1pc3NwZWxsaW5nTG9jYXRpb24gPj0gLTEpOworICAgICAgICAg
ICAgQVNTRVJUKCFtaXNzcGVsbGluZ0xlbmd0aCB8fCBtaXNzcGVsbGluZ0xvY2F0aW9uID49IDAp
OworICAgICAgICAgICAgQVNTRVJUKG1pc3NwZWxsaW5nTG9jYXRpb24gPCBsZW4pOworICAgICAg
ICAgICAgQVNTRVJUKG1pc3NwZWxsaW5nTGVuZ3RoIDw9IGxlbik7CisgICAgICAgICAgICBBU1NF
UlQobWlzc3BlbGxpbmdMb2NhdGlvbiArIG1pc3NwZWxsaW5nTGVuZ3RoIDw9IGxlbik7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIGlmIChtaXNzcGVsbGluZ0xvY2F0aW9uID49IDAgJiYgbWlz
c3BlbGxpbmdMZW5ndGggPiAwICYmIG1pc3NwZWxsaW5nTG9jYXRpb24gPCBsZW4gJiYgbWlzc3Bl
bGxpbmdMZW5ndGggPD0gbGVuICYmIG1pc3NwZWxsaW5nTG9jYXRpb24gKyBtaXNzcGVsbGluZ0xl
bmd0aCA8PSBsZW4pIHsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBDb21w
dXRlIHJhbmdlIG9mIG1pc3NwZWxsZWQgd29yZAorICAgICAgICAgICAgICAgIFJlZlB0cjxSYW5n
ZT4gbWlzc3BlbGxpbmdSYW5nZSA9IFRleHRJdGVyYXRvcjo6c3VicmFuZ2UobV9yYW5nZS5nZXQo
KSwgY3VycmVudENodW5rT2Zmc2V0ICsgbWlzc3BlbGxpbmdMb2NhdGlvbiwgbWlzc3BlbGxpbmdM
ZW5ndGgpOworCisgICAgICAgICAgICAgICAgLy8gUmVtZW1iZXIgZmlyc3QtZW5jb3VudGVyZWQg
bWlzc3BlbGxpbmcgYW5kIGl0cyBvZmZzZXQuCisgICAgICAgICAgICAgICAgaWYgKCFmaXJzdE1p
c3NwZWxsaW5nKSB7CisgICAgICAgICAgICAgICAgICAgIGZpcnN0TWlzc3BlbGxpbmdPZmZzZXQg
PSBjdXJyZW50Q2h1bmtPZmZzZXQgKyBtaXNzcGVsbGluZ0xvY2F0aW9uOworICAgICAgICAgICAg
ICAgICAgICBmaXJzdE1pc3NwZWxsaW5nID0gU3RyaW5nKGNoYXJzICsgbWlzc3BlbGxpbmdMb2Nh
dGlvbiwgbWlzc3BlbGxpbmdMZW5ndGgpOworICAgICAgICAgICAgICAgICAgICBmaXJzdE1pc3Nw
ZWxsaW5nUmFuZ2UgPSBtaXNzcGVsbGluZ1JhbmdlOworICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgIC8vIFN0b3JlIG1hcmtlciBmb3IgbWlzc3BlbGxlZCB3b3JkLgorICAgICAg
ICAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgICAgICAgICAgICAgIG1pc3NwZWxs
aW5nUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKGVjKS0+ZG9jdW1lbnQoKS0+bWFya2VycygpLT5hZGRN
YXJrZXIobWlzc3BlbGxpbmdSYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nKTsK
KyAgICAgICAgICAgICAgICBBU1NFUlQoIWVjKTsKKworICAgICAgICAgICAgICAgIC8vIEJhaWwg
b3V0IGlmIHdlJ3JlIG1hcmtpbmcgb25seSB0aGUgZmlyc3QgbWlzc3BlbGxpbmcsIGFuZCBub3Qg
YWxsIGluc3RhbmNlcy4KKyAgICAgICAgICAgICAgICBpZiAoIW1hcmtBbGwpCisgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICBjdXJyZW50Q2h1bmtPZmZzZXQgKz0gbGVuOworICAgICAgICBpdC5hZHZhbmNlKCk7Cisg
ICAgfQorICAgIAorICAgIHJldHVybiBmaXJzdE1pc3NwZWxsaW5nOworfQorCitTdHJpbmcgVGV4
dENoZWNraW5nSGVscGVyOjpmaW5kRmlyc3RNaXNzcGVsbGluZ09yQmFkR3JhbW1hcihib29sIGNo
ZWNrR3JhbW1hciwgYm9vbCYgb3V0SXNTcGVsbGluZywgaW50JiBvdXRGaXJzdEZvdW5kT2Zmc2V0
LCBHcmFtbWFyRGV0YWlsJiBvdXRHcmFtbWFyRGV0YWlsKQoreworI2lmIFBMQVRGT1JNKE1BQykg
JiYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xF
T1BBUkQpCisgICAgU3RyaW5nIGZpcnN0Rm91bmRJdGVtOworICAgIFN0cmluZyBtaXNzcGVsbGVk
V29yZDsKKyAgICBTdHJpbmcgYmFkR3JhbW1hclBocmFzZTsKKyAgICBFeGNlcHRpb25Db2RlIGVj
ID0gMDsKKyAgICAKKyAgICAvLyBJbml0aWFsaXplIG91dCBwYXJhbWV0ZXJzOyB0aGVzZSB3aWxs
IGJlIHVwZGF0ZWQgaWYgd2UgZmluZCBzb21ldGhpbmcgdG8gcmV0dXJuLgorICAgIG91dElzU3Bl
bGxpbmcgPSB0cnVlOworICAgIG91dEZpcnN0Rm91bmRPZmZzZXQgPSAwOworICAgIG91dEdyYW1t
YXJEZXRhaWwubG9jYXRpb24gPSAtMTsKKyAgICBvdXRHcmFtbWFyRGV0YWlsLmxlbmd0aCA9IDA7
CisgICAgb3V0R3JhbW1hckRldGFpbC5ndWVzc2VzLmNsZWFyKCk7CisgICAgb3V0R3JhbW1hckRl
dGFpbC51c2VyRGVzY3JpcHRpb24gPSAiIjsKKyAgICAKKyAgICAvLyBFeHBhbmQgdGhlIHNlYXJj
aCByYW5nZSB0byBlbmNvbXBhc3MgZW50aXJlIHBhcmFncmFwaHMsIHNpbmNlIHRleHQgY2hlY2tp
bmcgbmVlZHMgdGhhdCBtdWNoIGNvbnRleHQuCisgICAgLy8gRGV0ZXJtaW5lIHRoZSBjaGFyYWN0
ZXIgb2Zmc2V0IGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBwYXJhZ3JhcGggdG8gdGhlIHN0YXJ0IG9m
IHRoZSBvcmlnaW5hbCBzZWFyY2ggcmFuZ2UsCisgICAgLy8gc2luY2Ugd2Ugd2lsbCB3YW50IHRv
IGlnbm9yZSByZXN1bHRzIGluIHRoaXMgYXJlYS4KKyAgICBSZWZQdHI8UmFuZ2U+IHBhcmFncmFw
aFJhbmdlID0gbV9yYW5nZS0+Y2xvbmVSYW5nZShlYyk7CisgICAgc2V0U3RhcnQocGFyYWdyYXBo
UmFuZ2UuZ2V0KCksIHN0YXJ0T2ZQYXJhZ3JhcGgobV9yYW5nZS0+c3RhcnRQb3NpdGlvbigpKSk7
CisgICAgaW50IHRvdGFsUmFuZ2VMZW5ndGggPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKHBh
cmFncmFwaFJhbmdlLmdldCgpKTsKKyAgICBzZXRFbmQocGFyYWdyYXBoUmFuZ2UuZ2V0KCksIGVu
ZE9mUGFyYWdyYXBoKG1fcmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSkpOworICAgIAorICAgIFJlZlB0
cjxSYW5nZT4gb2Zmc2V0QXNSYW5nZSA9IFJhbmdlOjpjcmVhdGUocGFyYWdyYXBoUmFuZ2UtPnN0
YXJ0Q29udGFpbmVyKGVjKS0+ZG9jdW1lbnQoKSwgcGFyYWdyYXBoUmFuZ2UtPnN0YXJ0UG9zaXRp
b24oKSwgbV9yYW5nZS0+c3RhcnRQb3NpdGlvbigpKTsKKyAgICBpbnQgcmFuZ2VTdGFydE9mZnNl
dCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgob2Zmc2V0QXNSYW5nZS5nZXQoKSk7CisgICAg
aW50IHRvdGFsTGVuZ3RoUHJvY2Vzc2VkID0gMDsKKyAgICAKKyAgICBib29sIGZpcnN0SXRlcmF0
aW9uID0gdHJ1ZTsKKyAgICBib29sIGxhc3RJdGVyYXRpb24gPSBmYWxzZTsKKyAgICB3aGlsZSAo
dG90YWxMZW5ndGhQcm9jZXNzZWQgPCB0b3RhbFJhbmdlTGVuZ3RoKSB7CisgICAgICAgIC8vIEl0
ZXJhdGUgdGhyb3VnaCB0aGUgc2VhcmNoIHJhbmdlIGJ5IHBhcmFncmFwaHMsIGNoZWNraW5nIGVh
Y2ggb25lIGZvciBzcGVsbGluZyBhbmQgZ3JhbW1hci4KKyAgICAgICAgaW50IGN1cnJlbnRMZW5n
dGggPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKHBhcmFncmFwaFJhbmdlLmdldCgpKTsKKyAg
ICAgICAgaW50IGN1cnJlbnRTdGFydE9mZnNldCA9IGZpcnN0SXRlcmF0aW9uID8gcmFuZ2VTdGFy
dE9mZnNldCA6IDA7CisgICAgICAgIGludCBjdXJyZW50RW5kT2Zmc2V0ID0gY3VycmVudExlbmd0
aDsKKyAgICAgICAgaWYgKGluU2FtZVBhcmFncmFwaChwYXJhZ3JhcGhSYW5nZS0+c3RhcnRQb3Np
dGlvbigpLCBtX3JhbmdlLT5lbmRQb3NpdGlvbigpKSkgeworICAgICAgICAgICAgLy8gRGV0ZXJt
aW5lIHRoZSBjaGFyYWN0ZXIgb2Zmc2V0IGZyb20gdGhlIGVuZCBvZiB0aGUgb3JpZ2luYWwgc2Vh
cmNoIHJhbmdlIHRvIHRoZSBlbmQgb2YgdGhlIHBhcmFncmFwaCwKKyAgICAgICAgICAgIC8vIHNp
bmNlIHdlIHdpbGwgd2FudCB0byBpZ25vcmUgcmVzdWx0cyBpbiB0aGlzIGFyZWEuCisgICAgICAg
ICAgICBSZWZQdHI8UmFuZ2U+IGVuZE9mZnNldEFzUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKHBhcmFn
cmFwaFJhbmdlLT5zdGFydENvbnRhaW5lcihlYyktPmRvY3VtZW50KCksIHBhcmFncmFwaFJhbmdl
LT5zdGFydFBvc2l0aW9uKCksIG1fcmFuZ2UtPmVuZFBvc2l0aW9uKCkpOworICAgICAgICAgICAg
Y3VycmVudEVuZE9mZnNldCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgoZW5kT2Zmc2V0QXNS
YW5nZS5nZXQoKSk7CisgICAgICAgICAgICBsYXN0SXRlcmF0aW9uID0gdHJ1ZTsKKyAgICAgICAg
fQorICAgICAgICBpZiAoY3VycmVudFN0YXJ0T2Zmc2V0IDwgY3VycmVudEVuZE9mZnNldCkgewor
ICAgICAgICAgICAgU3RyaW5nIHBhcmFncmFwaFN0cmluZyA9IHBsYWluVGV4dChwYXJhZ3JhcGhS
YW5nZS5nZXQoKSk7CisgICAgICAgICAgICBpZiAocGFyYWdyYXBoU3RyaW5nLmxlbmd0aCgpID4g
MCkgeworICAgICAgICAgICAgICAgIGJvb2wgZm91bmRHcmFtbWFyID0gZmFsc2U7CisgICAgICAg
ICAgICAgICAgaW50IHNwZWxsaW5nTG9jYXRpb24gPSAwOworICAgICAgICAgICAgICAgIGludCBn
cmFtbWFyUGhyYXNlTG9jYXRpb24gPSAwOworICAgICAgICAgICAgICAgIGludCBncmFtbWFyRGV0
YWlsTG9jYXRpb24gPSAwOworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGdyYW1tYXJEZXRhaWxJ
bmRleCA9IDA7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgVmVjdG9yPFRleHRD
aGVja2luZ1Jlc3VsdD4gcmVzdWx0czsKKyAgICAgICAgICAgICAgICB1aW50NjRfdCBjaGVja2lu
Z1R5cGVzID0gY2hlY2tHcmFtbWFyID8gKFRleHRDaGVja2luZ1R5cGVTcGVsbGluZyB8IFRleHRD
aGVja2luZ1R5cGVHcmFtbWFyKSA6IFRleHRDaGVja2luZ1R5cGVTcGVsbGluZzsKKyAgICAgICAg
ICAgICAgICBtX2NsaWVudC0+Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgocGFyYWdyYXBoU3RyaW5nLmNo
YXJhY3RlcnMoKSwgcGFyYWdyYXBoU3RyaW5nLmxlbmd0aCgpLCBjaGVja2luZ1R5cGVzLCByZXN1
bHRzKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgcmVzdWx0cy5zaXplKCk7IGkrKykgeworICAgICAgICAgICAgICAgICAgICBjb25z
dCBUZXh0Q2hlY2tpbmdSZXN1bHQqIHJlc3VsdCA9ICZyZXN1bHRzW2ldOworICAgICAgICAgICAg
ICAgICAgICBpZiAocmVzdWx0LT50eXBlID09IFRleHRDaGVja2luZ1R5cGVTcGVsbGluZyAmJiBy
ZXN1bHQtPmxvY2F0aW9uID49IGN1cnJlbnRTdGFydE9mZnNldCAmJiByZXN1bHQtPmxvY2F0aW9u
ICsgcmVzdWx0LT5sZW5ndGggPD0gY3VycmVudEVuZE9mZnNldCkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgQVNTRVJUKHJlc3VsdC0+bGVuZ3RoID4gMCAmJiByZXN1bHQtPmxvY2F0aW9uID49
IDApOworICAgICAgICAgICAgICAgICAgICAgICAgc3BlbGxpbmdMb2NhdGlvbiA9IHJlc3VsdC0+
bG9jYXRpb247CisgICAgICAgICAgICAgICAgICAgICAgICBtaXNzcGVsbGVkV29yZCA9IHBhcmFn
cmFwaFN0cmluZy5zdWJzdHJpbmcocmVzdWx0LT5sb2NhdGlvbiwgcmVzdWx0LT5sZW5ndGgpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG1pc3NwZWxsZWRXb3JkLmxlbmd0aCgpKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChjaGVja0dyYW1tYXIgJiYgcmVzdWx0LT50eXBlID09IFRl
eHRDaGVja2luZ1R5cGVHcmFtbWFyICYmIHJlc3VsdC0+bG9jYXRpb24gPCBjdXJyZW50RW5kT2Zm
c2V0ICYmIHJlc3VsdC0+bG9jYXRpb24gKyByZXN1bHQtPmxlbmd0aCA+IGN1cnJlbnRTdGFydE9m
ZnNldCkgeworICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHJlc3VsdC0+bGVuZ3RoID4g
MCAmJiByZXN1bHQtPmxvY2F0aW9uID49IDApOworICAgICAgICAgICAgICAgICAgICAgICAgLy8g
V2UgY2FuJ3Qgc3RvcCBhZnRlciB0aGUgZmlyc3QgZ3JhbW1hciByZXN1bHQsIHNpbmNlIHRoZXJl
IG1pZ2h0IHN0aWxsIGJlIGEgc3BlbGxpbmcgcmVzdWx0IGFmdGVyCisgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBpdCBiZWdpbnMgYnV0IGJlZm9yZSB0aGUgZmlyc3QgZGV0YWlsIGluIGl0LCBi
dXQgd2UgY2FuIHN0b3AgaWYgd2UgZmluZCBhIHNlY29uZCBncmFtbWFyIHJlc3VsdC4KKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChmb3VuZEdyYW1tYXIpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGog
PSAwOyBqIDwgcmVzdWx0LT5kZXRhaWxzLnNpemUoKTsgaisrKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgR3JhbW1hckRldGFpbCogZGV0YWlsID0gJnJlc3VsdC0+ZGV0YWls
c1tqXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoZGV0YWlsLT5sZW5ndGgg
PiAwICYmIGRldGFpbC0+bG9jYXRpb24gPj0gMCk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKHJlc3VsdC0+bG9jYXRpb24gKyBkZXRhaWwtPmxvY2F0aW9uID49IGN1cnJlbnRTdGFy
dE9mZnNldCAmJiByZXN1bHQtPmxvY2F0aW9uICsgZGV0YWlsLT5sb2NhdGlvbiArIGRldGFpbC0+
bGVuZ3RoIDw9IGN1cnJlbnRFbmRPZmZzZXQgJiYgKCFmb3VuZEdyYW1tYXIgfHwgcmVzdWx0LT5s
b2NhdGlvbiArIGRldGFpbC0+bG9jYXRpb24gPCBncmFtbWFyRGV0YWlsTG9jYXRpb24pKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyYW1tYXJEZXRhaWxJbmRleCA9IGo7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyYW1tYXJEZXRhaWxMb2NhdGlvbiA9IHJl
c3VsdC0+bG9jYXRpb24gKyBkZXRhaWwtPmxvY2F0aW9uOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmb3VuZEdyYW1tYXIgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChmb3VuZEdyYW1tYXIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBncmFtbWFy
UGhyYXNlTG9jYXRpb24gPSByZXN1bHQtPmxvY2F0aW9uOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG91dEdyYW1tYXJEZXRhaWwgPSByZXN1bHQtPmRldGFpbHNbZ3JhbW1hckRldGFpbElu
ZGV4XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWRHcmFtbWFyUGhyYXNlID0gcGFy
YWdyYXBoU3RyaW5nLnN1YnN0cmluZyhyZXN1bHQtPmxvY2F0aW9uLCByZXN1bHQtPmxlbmd0aCk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGJhZEdyYW1tYXJQaHJhc2UubGVu
Z3RoKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKCFtaXNzcGVsbGVkV29y
ZC5pc0VtcHR5KCkgJiYgKCFjaGVja0dyYW1tYXIgfHwgYmFkR3JhbW1hclBocmFzZS5pc0VtcHR5
KCkgfHwgc3BlbGxpbmdMb2NhdGlvbiA8PSBncmFtbWFyRGV0YWlsTG9jYXRpb24pKSB7CisgICAg
ICAgICAgICAgICAgICAgIGludCBzcGVsbGluZ09mZnNldCA9IHNwZWxsaW5nTG9jYXRpb24gLSBj
dXJyZW50U3RhcnRPZmZzZXQ7CisgICAgICAgICAgICAgICAgICAgIGlmICghZmlyc3RJdGVyYXRp
b24pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJlZlB0cjxSYW5nZT4gcGFyYWdyYXBoT2Zm
c2V0QXNSYW5nZSA9IFJhbmdlOjpjcmVhdGUocGFyYWdyYXBoUmFuZ2UtPnN0YXJ0Q29udGFpbmVy
KGVjKS0+ZG9jdW1lbnQoKSwgbV9yYW5nZS0+c3RhcnRQb3NpdGlvbigpLCBwYXJhZ3JhcGhSYW5n
ZS0+c3RhcnRQb3NpdGlvbigpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNwZWxsaW5nT2Zm
c2V0ICs9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgocGFyYWdyYXBoT2Zmc2V0QXNSYW5nZS5n
ZXQoKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgb3V0SXNT
cGVsbGluZyA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIG91dEZpcnN0Rm91bmRPZmZzZXQg
PSBzcGVsbGluZ09mZnNldDsKKyAgICAgICAgICAgICAgICAgICAgZmlyc3RGb3VuZEl0ZW0gPSBt
aXNzcGVsbGVkV29yZDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGlmIChjaGVja0dyYW1tYXIgJiYgIWJhZEdyYW1tYXJQaHJh
c2UuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgICAgIGludCBncmFtbWFyUGhyYXNlT2Zm
c2V0ID0gZ3JhbW1hclBocmFzZUxvY2F0aW9uIC0gY3VycmVudFN0YXJ0T2Zmc2V0OworICAgICAg
ICAgICAgICAgICAgICBpZiAoIWZpcnN0SXRlcmF0aW9uKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBSZWZQdHI8UmFuZ2U+IHBhcmFncmFwaE9mZnNldEFzUmFuZ2UgPSBSYW5nZTo6Y3JlYXRl
KHBhcmFncmFwaFJhbmdlLT5zdGFydENvbnRhaW5lcihlYyktPmRvY3VtZW50KCksIG1fcmFuZ2Ut
PnN0YXJ0UG9zaXRpb24oKSwgcGFyYWdyYXBoUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBncmFtbWFyUGhyYXNlT2Zmc2V0ICs9IFRleHRJdGVyYXRvcjo6
cmFuZ2VMZW5ndGgocGFyYWdyYXBoT2Zmc2V0QXNSYW5nZS5nZXQoKSk7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgb3V0SXNTcGVsbGluZyA9IGZhbHNlOworICAg
ICAgICAgICAgICAgICAgICBvdXRGaXJzdEZvdW5kT2Zmc2V0ID0gZ3JhbW1hclBocmFzZU9mZnNl
dDsKKyAgICAgICAgICAgICAgICAgICAgZmlyc3RGb3VuZEl0ZW0gPSBiYWRHcmFtbWFyUGhyYXNl
OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGxhc3RJdGVyYXRpb24gfHwgdG90YWxMZW5n
dGhQcm9jZXNzZWQgKyBjdXJyZW50TGVuZ3RoID49IHRvdGFsUmFuZ2VMZW5ndGgpCisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgVmlzaWJsZVBvc2l0aW9uIG5ld1BhcmFncmFwaFN0YXJ0ID0g
c3RhcnRPZk5leHRQYXJhZ3JhcGgocGFyYWdyYXBoUmFuZ2UtPmVuZFBvc2l0aW9uKCkpOworICAg
ICAgICBzZXRTdGFydChwYXJhZ3JhcGhSYW5nZS5nZXQoKSwgbmV3UGFyYWdyYXBoU3RhcnQpOwor
ICAgICAgICBzZXRFbmQocGFyYWdyYXBoUmFuZ2UuZ2V0KCksIGVuZE9mUGFyYWdyYXBoKG5ld1Bh
cmFncmFwaFN0YXJ0KSk7CisgICAgICAgIGZpcnN0SXRlcmF0aW9uID0gZmFsc2U7CisgICAgICAg
IHRvdGFsTGVuZ3RoUHJvY2Vzc2VkICs9IGN1cnJlbnRMZW5ndGg7CisgICAgfQorICAgIHJldHVy
biBmaXJzdEZvdW5kSXRlbTsKKyNlbHNlCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
VU5VU0VEX1BBUkFNKGNoZWNrR3JhbW1hcik7CisgICAgVU5VU0VEX1BBUkFNKG91dElzU3BlbGxp
bmcpOworICAgIFVOVVNFRF9QQVJBTShvdXRGaXJzdEZvdW5kT2Zmc2V0KTsKKyAgICBVTlVTRURf
UEFSQU0ob3V0R3JhbW1hckRldGFpbCk7CisgICAgcmV0dXJuICIiOworI2VuZGlmCit9CisKK2lu
dCBUZXh0Q2hlY2tpbmdIZWxwZXI6OmZpbmRGaXJzdEdyYW1tYXJEZXRhaWwoY29uc3QgVmVjdG9y
PEdyYW1tYXJEZXRhaWw+JiBncmFtbWFyRGV0YWlscywgaW50IGJhZEdyYW1tYXJQaHJhc2VMb2Nh
dGlvbiwgaW50IC8qYmFkR3JhbW1hclBocmFzZUxlbmd0aCovLCBpbnQgc3RhcnRPZmZzZXQsIGlu
dCBlbmRPZmZzZXQsIGJvb2wgbWFya0FsbCkKK3sKKyNpZm5kZWYgQlVJTERJTkdfT05fVElHRVIK
KyAgICAvLyBGb3VuZCBzb21lIGJhZCBncmFtbWFyLiBGaW5kIHRoZSBlYXJsaWVzdCBkZXRhaWwg
cmFuZ2UgdGhhdCBzdGFydHMgaW4gb3VyIHNlYXJjaCByYW5nZSAoaWYgYW55KS4KKyAgICAvLyBP
cHRpb25hbGx5IGFkZCBhIERvY3VtZW50TWFya2VyIGZvciBlYWNoIGRldGFpbCBpbiB0aGUgcmFu
Z2UuCisgICAgaW50IGVhcmxpZXN0RGV0YWlsTG9jYXRpb25Tb0ZhciA9IC0xOworICAgIGludCBl
YXJsaWVzdERldGFpbEluZGV4ID0gLTE7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGdy
YW1tYXJEZXRhaWxzLnNpemUoKTsgaSsrKSB7CisgICAgICAgIGNvbnN0IEdyYW1tYXJEZXRhaWwq
IGRldGFpbCA9ICZncmFtbWFyRGV0YWlsc1tpXTsKKyAgICAgICAgQVNTRVJUKGRldGFpbC0+bGVu
Z3RoID4gMCAmJiBkZXRhaWwtPmxvY2F0aW9uID49IDApOworICAgICAgICAKKyAgICAgICAgaW50
IGRldGFpbFN0YXJ0T2Zmc2V0SW5QYXJhZ3JhcGggPSBiYWRHcmFtbWFyUGhyYXNlTG9jYXRpb24g
KyBkZXRhaWwtPmxvY2F0aW9uOworICAgICAgICAKKyAgICAgICAgLy8gU2tpcCB0aGlzIGRldGFp
bCBpZiBpdCBzdGFydHMgYmVmb3JlIHRoZSBvcmlnaW5hbCBzZWFyY2ggcmFuZ2UKKyAgICAgICAg
aWYgKGRldGFpbFN0YXJ0T2Zmc2V0SW5QYXJhZ3JhcGggPCBzdGFydE9mZnNldCkKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAKKyAgICAgICAgLy8gU2tpcCB0aGlzIGRldGFpbCBpZiBp
dCBzdGFydHMgYWZ0ZXIgdGhlIG9yaWdpbmFsIHNlYXJjaCByYW5nZQorICAgICAgICBpZiAoZGV0
YWlsU3RhcnRPZmZzZXRJblBhcmFncmFwaCA+PSBlbmRPZmZzZXQpCisgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgCisgICAgICAgIGlmIChtYXJrQWxsKSB7CisgICAgICAgICAgICBSZWZQ
dHI8UmFuZ2U+IGJhZEdyYW1tYXJSYW5nZSA9IFRleHRJdGVyYXRvcjo6c3VicmFuZ2UobV9yYW5n
ZS5nZXQoKSwgYmFkR3JhbW1hclBocmFzZUxvY2F0aW9uIC0gc3RhcnRPZmZzZXQgKyBkZXRhaWwt
PmxvY2F0aW9uLCBkZXRhaWwtPmxlbmd0aCk7CisgICAgICAgICAgICBFeGNlcHRpb25Db2RlIGVj
ID0gMDsKKyAgICAgICAgICAgIGJhZEdyYW1tYXJSYW5nZS0+c3RhcnRDb250YWluZXIoZWMpLT5k
b2N1bWVudCgpLT5tYXJrZXJzKCktPmFkZE1hcmtlcihiYWRHcmFtbWFyUmFuZ2UuZ2V0KCksIERv
Y3VtZW50TWFya2VyOjpHcmFtbWFyLCBkZXRhaWwtPnVzZXJEZXNjcmlwdGlvbik7CisgICAgICAg
ICAgICBBU1NFUlQoIWVjKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gUmVtZW1i
ZXIgdGhpcyBkZXRhaWwgb25seSBpZiBpdCdzIGVhcmxpZXIgdGhhbiBvdXIgY3VycmVudCBjYW5k
aWRhdGUgKHRoZSBkZXRhaWxzIGFyZW4ndCBpbiBhIGd1YXJhbnRlZWQgb3JkZXIpCisgICAgICAg
IGlmIChlYXJsaWVzdERldGFpbEluZGV4IDwgMCB8fCBlYXJsaWVzdERldGFpbExvY2F0aW9uU29G
YXIgPiBkZXRhaWwtPmxvY2F0aW9uKSB7CisgICAgICAgICAgICBlYXJsaWVzdERldGFpbEluZGV4
ID0gaTsKKyAgICAgICAgICAgIGVhcmxpZXN0RGV0YWlsTG9jYXRpb25Tb0ZhciA9IGRldGFpbC0+
bG9jYXRpb247CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgcmV0dXJuIGVhcmxpZXN0RGV0
YWlsSW5kZXg7CisjZWxzZQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIFVOVVNFRF9Q
QVJBTShncmFtbWFyRGV0YWlscyk7CisgICAgVU5VU0VEX1BBUkFNKGJhZEdyYW1tYXJQaHJhc2VM
b2NhdGlvbik7CisgICAgVU5VU0VEX1BBUkFNKHN0YXJ0T2Zmc2V0KTsKKyAgICBVTlVTRURfUEFS
QU0oZW5kT2Zmc2V0KTsKKyAgICBVTlVTRURfUEFSQU0obWFya0FsbCk7CisgICAgcmV0dXJuIDA7
CisjZW5kaWYKK30KKworU3RyaW5nIFRleHRDaGVja2luZ0hlbHBlcjo6ZmluZEZpcnN0QmFkR3Jh
bW1hcihHcmFtbWFyRGV0YWlsJiBvdXRHcmFtbWFyRGV0YWlsLCBpbnQmIG91dEdyYW1tYXJQaHJh
c2VPZmZzZXQsIGJvb2wgbWFya0FsbCkKK3sKKyNpZm5kZWYgQlVJTERJTkdfT05fVElHRVIKKyAg
ICAvLyBJbml0aWFsaXplIG91dCBwYXJhbWV0ZXJzOyB0aGVzZSB3aWxsIGJlIHVwZGF0ZWQgaWYg
d2UgZmluZCBzb21ldGhpbmcgdG8gcmV0dXJuLgorICAgIG91dEdyYW1tYXJEZXRhaWwubG9jYXRp
b24gPSAtMTsKKyAgICBvdXRHcmFtbWFyRGV0YWlsLmxlbmd0aCA9IDA7CisgICAgb3V0R3JhbW1h
ckRldGFpbC5ndWVzc2VzLmNsZWFyKCk7CisgICAgb3V0R3JhbW1hckRldGFpbC51c2VyRGVzY3Jp
cHRpb24gPSAiIjsKKyAgICBvdXRHcmFtbWFyUGhyYXNlT2Zmc2V0ID0gMDsKKyAgICAKKyAgICBT
dHJpbmcgZmlyc3RCYWRHcmFtbWFyUGhyYXNlOworCisgICAgLy8gRXhwYW5kIHRoZSBzZWFyY2gg
cmFuZ2UgdG8gZW5jb21wYXNzIGVudGlyZSBwYXJhZ3JhcGhzLCBzaW5jZSBncmFtbWFyIGNoZWNr
aW5nIG5lZWRzIHRoYXQgbXVjaCBjb250ZXh0LgorICAgIC8vIERldGVybWluZSB0aGUgY2hhcmFj
dGVyIG9mZnNldCBmcm9tIHRoZSBzdGFydCBvZiB0aGUgcGFyYWdyYXBoIHRvIHRoZSBzdGFydCBv
ZiB0aGUgb3JpZ2luYWwgc2VhcmNoIHJhbmdlLAorICAgIC8vIHNpbmNlIHdlIHdpbGwgd2FudCB0
byBpZ25vcmUgcmVzdWx0cyBpbiB0aGlzIGFyZWEuCisgICAgaW50IHNlYXJjaFJhbmdlU3RhcnRP
ZmZzZXQ7CisgICAgU3RyaW5nIHBhcmFncmFwaFN0cmluZzsKKyAgICBSZWZQdHI8UmFuZ2U+IHBh
cmFncmFwaFJhbmdlID0gcGFyYWdyYXBoQWxpZ25lZFJhbmdlKHNlYXJjaFJhbmdlU3RhcnRPZmZz
ZXQsIHBhcmFncmFwaFN0cmluZyk7CisgICAgICAgIAorICAgIC8vIERldGVybWluZSB0aGUgY2hh
cmFjdGVyIG9mZnNldCBmcm9tIHRoZSBzdGFydCBvZiB0aGUgcGFyYWdyYXBoIHRvIHRoZSBlbmQg
b2YgdGhlIG9yaWdpbmFsIHNlYXJjaCByYW5nZSwgCisgICAgLy8gc2luY2Ugd2Ugd2lsbCB3YW50
IHRvIGlnbm9yZSByZXN1bHRzIGluIHRoaXMgYXJlYSBhbHNvLgorICAgIGludCBzZWFyY2hSYW5n
ZUVuZE9mZnNldCA9IHNlYXJjaFJhbmdlU3RhcnRPZmZzZXQgKyBUZXh0SXRlcmF0b3I6OnJhbmdl
TGVuZ3RoKG1fcmFuZ2UuZ2V0KCkpOworICAgICAgICAKKyAgICAvLyBTdGFydCBjaGVja2luZyBm
cm9tIGJlZ2lubmluZyBvZiBwYXJhZ3JhcGgsIGJ1dCBza2lwIHBhc3QgcmVzdWx0cyB0aGF0IG9j
Y3VyIGJlZm9yZSB0aGUgc3RhcnQgb2YgdGhlIG9yaWdpbmFsIHNlYXJjaCByYW5nZS4KKyAgICBp
bnQgc3RhcnRPZmZzZXQgPSAwOworICAgIHdoaWxlIChzdGFydE9mZnNldCA8IHNlYXJjaFJhbmdl
RW5kT2Zmc2V0KSB7CisgICAgICAgIFZlY3RvcjxHcmFtbWFyRGV0YWlsPiBncmFtbWFyRGV0YWls
czsKKyAgICAgICAgaW50IGJhZEdyYW1tYXJQaHJhc2VMb2NhdGlvbiA9IC0xOworICAgICAgICBp
bnQgYmFkR3JhbW1hclBocmFzZUxlbmd0aCA9IDA7CisgICAgICAgIG1fY2xpZW50LT5jaGVja0dy
YW1tYXJPZlN0cmluZyhwYXJhZ3JhcGhTdHJpbmcuY2hhcmFjdGVycygpICsgc3RhcnRPZmZzZXQs
IHBhcmFncmFwaFN0cmluZy5sZW5ndGgoKSAtIHN0YXJ0T2Zmc2V0LCBncmFtbWFyRGV0YWlscywg
JmJhZEdyYW1tYXJQaHJhc2VMb2NhdGlvbiwgJmJhZEdyYW1tYXJQaHJhc2VMZW5ndGgpOworICAg
ICAgICAKKyAgICAgICAgaWYgKCFiYWRHcmFtbWFyUGhyYXNlTGVuZ3RoKSB7CisgICAgICAgICAg
ICBBU1NFUlQoYmFkR3JhbW1hclBocmFzZUxvY2F0aW9uID09IC0xKTsKKyAgICAgICAgICAgIHJl
dHVybiBTdHJpbmcoKTsKKyAgICAgICAgfQorCisgICAgICAgIEFTU0VSVChiYWRHcmFtbWFyUGhy
YXNlTG9jYXRpb24gPj0gMCk7CisgICAgICAgIGJhZEdyYW1tYXJQaHJhc2VMb2NhdGlvbiArPSBz
dGFydE9mZnNldDsKKworICAgICAgICAKKyAgICAgICAgLy8gRm91bmQgc29tZSBiYWQgZ3JhbW1h
ci4gRmluZCB0aGUgZWFybGllc3QgZGV0YWlsIHJhbmdlIHRoYXQgc3RhcnRzIGluIG91ciBzZWFy
Y2ggcmFuZ2UgKGlmIGFueSkuCisgICAgICAgIGludCBiYWRHcmFtbWFySW5kZXggPSBmaW5kRmly
c3RHcmFtbWFyRGV0YWlsKGdyYW1tYXJEZXRhaWxzLCBiYWRHcmFtbWFyUGhyYXNlTG9jYXRpb24s
IGJhZEdyYW1tYXJQaHJhc2VMZW5ndGgsIHNlYXJjaFJhbmdlU3RhcnRPZmZzZXQsIHNlYXJjaFJh
bmdlRW5kT2Zmc2V0LCBtYXJrQWxsKTsKKyAgICAgICAgaWYgKGJhZEdyYW1tYXJJbmRleCA+PSAw
KSB7CisgICAgICAgICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGJhZEdyYW1tYXJJ
bmRleCkgPCBncmFtbWFyRGV0YWlscy5zaXplKCkpOworICAgICAgICAgICAgb3V0R3JhbW1hckRl
dGFpbCA9IGdyYW1tYXJEZXRhaWxzW2JhZEdyYW1tYXJJbmRleF07CisgICAgICAgIH0KKworICAg
ICAgICAvLyBJZiB3ZSBmb3VuZCBhIGRldGFpbCBpbiByYW5nZSwgdGhlbiB3ZSBoYXZlIGZvdW5k
IHRoZSBmaXJzdCBiYWQgcGhyYXNlICh1bmxlc3Mgd2UgZm91bmQgb25lIGVhcmxpZXIgYnV0Cisg
ICAgICAgIC8vIGtlcHQgZ29pbmcgc28gd2UgY291bGQgbWFyayBhbGwgaW5zdGFuY2VzKS4KKyAg
ICAgICAgaWYgKGJhZEdyYW1tYXJJbmRleCA+PSAwICYmIGZpcnN0QmFkR3JhbW1hclBocmFzZS5p
c0VtcHR5KCkpIHsKKyAgICAgICAgICAgIG91dEdyYW1tYXJQaHJhc2VPZmZzZXQgPSBiYWRHcmFt
bWFyUGhyYXNlTG9jYXRpb24gLSBzZWFyY2hSYW5nZVN0YXJ0T2Zmc2V0OworICAgICAgICAgICAg
Zmlyc3RCYWRHcmFtbWFyUGhyYXNlID0gcGFyYWdyYXBoU3RyaW5nLnN1YnN0cmluZyhiYWRHcmFt
bWFyUGhyYXNlTG9jYXRpb24sIGJhZEdyYW1tYXJQaHJhc2VMZW5ndGgpOworICAgICAgICAgICAg
CisgICAgICAgICAgICAvLyBGb3VuZCBvbmUuIFdlJ3JlIGRvbmUgbm93LCB1bmxlc3Mgd2UncmUg
bWFya2luZyBlYWNoIGluc3RhbmNlLgorICAgICAgICAgICAgaWYgKCFtYXJrQWxsKQorICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgLy8gVGhlc2UgcmVzdWx0cyB3
ZXJlIGFsbCBiZXR3ZWVuIHRoZSBzdGFydCBvZiB0aGUgcGFyYWdyYXBoIGFuZCB0aGUgc3RhcnQg
b2YgdGhlIHNlYXJjaCByYW5nZTsgbG9vaworICAgICAgICAvLyBiZXlvbmQgdGhpcyBwaHJhc2Uu
CisgICAgICAgIHN0YXJ0T2Zmc2V0ID0gYmFkR3JhbW1hclBocmFzZUxvY2F0aW9uICsgYmFkR3Jh
bW1hclBocmFzZUxlbmd0aDsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIGZpcnN0QmFkR3JhbW1h
clBocmFzZTsKKyNlbHNlCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgVU5VU0VEX1BB
UkFNKG91dEdyYW1tYXJEZXRhaWwpOworICAgIFVOVVNFRF9QQVJBTShvdXRHcmFtbWFyUGhyYXNl
T2Zmc2V0KTsKKyAgICBVTlVTRURfUEFSQU0obWFya0FsbCk7CisjZW5kaWYKK30KKworCitib29s
IFRleHRDaGVja2luZ0hlbHBlcjo6aXNVbmdyYW1tYXRpY2FsKFZlY3RvcjxTdHJpbmc+JiBndWVz
c2VzVmVjdG9yKSBjb25zdAoreworI2lmbmRlZiBCVUlMRElOR19PTl9USUdFUgorICAgIGlmICgh
bV9jbGllbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEV4Y2VwdGlvbkNvZGUgZWM7
CisgICAgaWYgKCFtX3JhbmdlIHx8IG1fcmFuZ2UtPmNvbGxhcHNlZChlYykpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAKKyAgICAvLyBSZXR1cm5zIHRydWUgb25seSBpZiB0aGUgcGFzc2Vk
IHJhbmdlIGV4YWN0bHkgY29ycmVzcG9uZHMgdG8gYSBiYWQgZ3JhbW1hciBkZXRhaWwgcmFuZ2Uu
IFRoaXMgaXMgYW5hbG9nb3VzCisgICAgLy8gdG8gaXNTZWxlY3Rpb25NaXNzcGVsbGVkLiBJdCdz
IG5vdCBnb29kIGVub3VnaCBmb3IgdGhlcmUgdG8gYmUgc29tZSBiYWQgZ3JhbW1hciBzb21ld2hl
cmUgaW4gdGhlIHJhbmdlLAorICAgIC8vIG9yIG92ZXJsYXBwaW5nIHRoZSByYW5nZTsgdGhlIHJh
bmdlcyBtdXN0IGV4YWN0bHkgbWF0Y2guCisgICAgZ3Vlc3Nlc1ZlY3Rvci5jbGVhcigpOworICAg
IGludCBncmFtbWFyUGhyYXNlT2Zmc2V0OworICAgIAorICAgIEdyYW1tYXJEZXRhaWwgZ3JhbW1h
ckRldGFpbDsKKyAgICBTdHJpbmcgYmFkR3JhbW1hclBocmFzZSA9IGNvbnN0X2Nhc3Q8VGV4dENo
ZWNraW5nSGVscGVyKj4odGhpcyktPmZpbmRGaXJzdEJhZEdyYW1tYXIoZ3JhbW1hckRldGFpbCwg
Z3JhbW1hclBocmFzZU9mZnNldCwgZmFsc2UpOyAgICAKKyAgICAKKyAgICAvLyBObyBiYWQgZ3Jh
bW1hciBpbiB0aGVzZSBwYXJ0cyBhdCBhbGwuCisgICAgaWYgKGJhZEdyYW1tYXJQaHJhc2UuaXNF
bXB0eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgLy8gQmFkIGdyYW1tYXIs
IGJ1dCBwaHJhc2UgKGUuZy4gc2VudGVuY2UpIHN0YXJ0cyBiZXlvbmQgc3RhcnQgb2YgcmFuZ2Uu
CisgICAgaWYgKGdyYW1tYXJQaHJhc2VPZmZzZXQgPiAwKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgCisgICAgQVNTRVJUKGdyYW1tYXJEZXRhaWwubG9jYXRpb24gPj0gMCAmJiBncmFtbWFy
RGV0YWlsLmxlbmd0aCA+IDApOworICAgIAorICAgIC8vIEJhZCBncmFtbWFyLCBidXQgc3RhcnQg
b2YgZGV0YWlsIChlLmcuIHVuZ3JhbW1hdGljYWwgd29yZCkgZG9lc24ndCBtYXRjaCBzdGFydCBv
ZiByYW5nZQorICAgIGlmIChncmFtbWFyRGV0YWlsLmxvY2F0aW9uICsgZ3JhbW1hclBocmFzZU9m
ZnNldCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIC8vIEJhZCBncmFtbWFyIGF0
IHN0YXJ0IG9mIHJhbmdlLCBidXQgZW5kIG9mIGJhZCBncmFtbWFyIGlzIGJlZm9yZSBvciBhZnRl
ciBlbmQgb2YgcmFuZ2UKKyAgICBpZiAoZ3JhbW1hckRldGFpbC5sZW5ndGggIT0gVGV4dEl0ZXJh
dG9yOjpyYW5nZUxlbmd0aChtX3JhbmdlLmdldCgpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIAorICAgIC8vIFVwZGF0ZSB0aGUgc3BlbGxpbmcgcGFuZWwgdG8gYmUgZGlzcGxheWluZyB0
aGlzIGVycm9yICh3aGV0aGVyIG9yIG5vdCB0aGUgc3BlbGxpbmcgcGFuZWwgaXMgb24gc2NyZWVu
KS4KKyAgICAvLyBUaGlzIGlzIG5lY2Vzc2FyeSB0byBtYWtlIGEgc3Vic2VxdWVudCBjYWxsIHRv
IFtOU1NwZWxsQ2hlY2tlciBpZ25vcmVXb3JkOmluU3BlbGxEb2N1bWVudFdpdGhUYWc6XSB3b3Jr
CisgICAgLy8gY29ycmVjdGx5OyB0aGF0IGNhbGwgYmVoYXZlcyBkaWZmZXJlbnRseSBiYXNlZCBv
biB3aGV0aGVyIHRoZSBzcGVsbGluZyBwYW5lbCBpcyBkaXNwbGF5aW5nIGEgbWlzc3BlbGxpbmcK
KyAgICAvLyBvciBhIGdyYW1tYXIgZXJyb3IuCisgICAgbV9jbGllbnQtPnVwZGF0ZVNwZWxsaW5n
VUlXaXRoR3JhbW1hclN0cmluZyhiYWRHcmFtbWFyUGhyYXNlLCBncmFtbWFyRGV0YWlsKTsKKyAg
ICAKKyAgICByZXR1cm4gdHJ1ZTsKKyNlbHNlCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgVU5VU0VEX1BBUkFNKGd1ZXNzZXNWZWN0b3IpOworICAgIHJldHVybiB0cnVlOworI2VuZGlm
Cit9CisKK1ZlY3RvcjxTdHJpbmc+IFRleHRDaGVja2luZ0hlbHBlcjo6Z3Vlc3Nlc0Zvck1pc3Nw
ZWxsZWRPclVuZ3JhbW1hdGljYWxSYW5nZShib29sIGNoZWNrR3JhbW1hciwgYm9vbCYgbWlzc3Bl
bGxlZCwgYm9vbCYgdW5ncmFtbWF0aWNhbCkgY29uc3QKK3sKKyNpZiBQTEFURk9STShNQUMpICYm
ICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9Q
QVJEKQorICAgIFZlY3RvcjxTdHJpbmc+IGd1ZXNzZXM7CisgICAgRXhjZXB0aW9uQ29kZSBlYzsK
KyAgICBtaXNzcGVsbGVkID0gZmFsc2U7CisgICAgdW5ncmFtbWF0aWNhbCA9IGZhbHNlOworICAg
IAorICAgIGlmICghbV9jbGllbnQgfHwgIW1fcmFuZ2UgfHwgbV9yYW5nZS0+Y29sbGFwc2VkKGVj
KSkKKyAgICAgICAgcmV0dXJuIGd1ZXNzZXM7CisKKyAgICAvLyBFeHBhbmQgdGhlIHJhbmdlIHRv
IGVuY29tcGFzcyBlbnRpcmUgcGFyYWdyYXBocywgc2luY2UgdGV4dCBjaGVja2luZyBuZWVkcyB0
aGF0IG11Y2ggY29udGV4dC4KKyAgICBpbnQgcmFuZ2VTdGFydE9mZnNldDsKKyAgICBTdHJpbmcg
cGFyYWdyYXBoU3RyaW5nOworICAgIFJlZlB0cjxSYW5nZT4gcGFyYWdyYXBoUmFuZ2UgPSBwYXJh
Z3JhcGhBbGlnbmVkUmFuZ2UocmFuZ2VTdGFydE9mZnNldCwgcGFyYWdyYXBoU3RyaW5nKTsKKyAg
ICBpbnQgcmFuZ2VMZW5ndGggPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKG1fcmFuZ2UuZ2V0
KCkpOworICAgIGlmICghcmFuZ2VMZW5ndGggfHwgIXBhcmFncmFwaFN0cmluZy5sZW5ndGgoKSkK
KyAgICAgICAgcmV0dXJuIGd1ZXNzZXM7CisKKyAgICBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0
PiByZXN1bHRzOworICAgIHVpbnQ2NF90IGNoZWNraW5nVHlwZXMgPSBjaGVja0dyYW1tYXIgPyAo
VGV4dENoZWNraW5nVHlwZVNwZWxsaW5nIHwgVGV4dENoZWNraW5nVHlwZUdyYW1tYXIpIDogVGV4
dENoZWNraW5nVHlwZVNwZWxsaW5nOworICAgIG1fY2xpZW50LT5jaGVja1RleHRPZlBhcmFncmFw
aChwYXJhZ3JhcGhTdHJpbmcuY2hhcmFjdGVycygpLCBwYXJhZ3JhcGhTdHJpbmcubGVuZ3RoKCks
IGNoZWNraW5nVHlwZXMsIHJlc3VsdHMpOworICAgIAorICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCByZXN1bHRzLnNpemUoKTsgaSsrKSB7CisgICAgICAgIGNvbnN0IFRleHRDaGVja2luZ1Jl
c3VsdCogcmVzdWx0ID0gJnJlc3VsdHNbaV07CisgICAgICAgIGlmIChyZXN1bHQtPnR5cGUgPT0g
VGV4dENoZWNraW5nVHlwZVNwZWxsaW5nICYmIHJlc3VsdC0+bG9jYXRpb24gPT0gcmFuZ2VTdGFy
dE9mZnNldCAmJiByZXN1bHQtPmxlbmd0aCA9PSByYW5nZUxlbmd0aCkgeworICAgICAgICAgICAg
U3RyaW5nIG1pc3NwZWxsZWRXb3JkID0gcGFyYWdyYXBoU3RyaW5nLnN1YnN0cmluZyhyYW5nZVN0
YXJ0T2Zmc2V0LCByYW5nZUxlbmd0aCk7CisgICAgICAgICAgICBBU1NFUlQobWlzc3BlbGxlZFdv
cmQubGVuZ3RoKCkpOworICAgICAgICAgICAgbV9jbGllbnQtPmdldEd1ZXNzZXNGb3JXb3JkKG1p
c3NwZWxsZWRXb3JkLCBndWVzc2VzKTsKKyAgICAgICAgICAgIG1fY2xpZW50LT51cGRhdGVTcGVs
bGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKG1pc3NwZWxsZWRXb3JkKTsKKyAgICAgICAgICAgIG1p
c3NwZWxsZWQgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIGd1ZXNzZXM7CisgICAgICAgIH0K
KyAgICB9CisgICAgCisgICAgaWYgKCFjaGVja0dyYW1tYXIpCisgICAgICAgIHJldHVybiBndWVz
c2VzOworICAgICAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVzdWx0cy5zaXpl
KCk7IGkrKykgeworICAgICAgICBjb25zdCBUZXh0Q2hlY2tpbmdSZXN1bHQqIHJlc3VsdCA9ICZy
ZXN1bHRzW2ldOworICAgICAgICBpZiAocmVzdWx0LT50eXBlID09IFRleHRDaGVja2luZ1R5cGVH
cmFtbWFyICYmIHJlc3VsdC0+bG9jYXRpb24gPD0gcmFuZ2VTdGFydE9mZnNldCAmJiByZXN1bHQt
PmxvY2F0aW9uICsgcmVzdWx0LT5sZW5ndGggPj0gcmFuZ2VTdGFydE9mZnNldCArIHJhbmdlTGVu
Z3RoKSB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgcmVzdWx0LT5kZXRh
aWxzLnNpemUoKTsgaisrKSB7CisgICAgICAgICAgICAgICAgY29uc3QgR3JhbW1hckRldGFpbCog
ZGV0YWlsID0gJnJlc3VsdC0+ZGV0YWlsc1tqXTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoZGV0
YWlsLT5sZW5ndGggPiAwICYmIGRldGFpbC0+bG9jYXRpb24gPj0gMCk7CisgICAgICAgICAgICAg
ICAgaWYgKHJlc3VsdC0+bG9jYXRpb24gKyBkZXRhaWwtPmxvY2F0aW9uID09IHJhbmdlU3RhcnRP
ZmZzZXQgJiYgZGV0YWlsLT5sZW5ndGggPT0gcmFuZ2VMZW5ndGgpIHsKKyAgICAgICAgICAgICAg
ICAgICAgU3RyaW5nIGJhZEdyYW1tYXJQaHJhc2UgPSBwYXJhZ3JhcGhTdHJpbmcuc3Vic3RyaW5n
KHJlc3VsdC0+bG9jYXRpb24sIHJlc3VsdC0+bGVuZ3RoKTsKKyAgICAgICAgICAgICAgICAgICAg
QVNTRVJUKGJhZEdyYW1tYXJQaHJhc2UubGVuZ3RoKCkpOworICAgICAgICAgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGsgPSAwOyBrIDwgZGV0YWlsLT5ndWVzc2VzLnNpemUoKTsgaysrKQorICAg
ICAgICAgICAgICAgICAgICAgICAgZ3Vlc3Nlcy5hcHBlbmQoZGV0YWlsLT5ndWVzc2VzW2tdKTsK
KyAgICAgICAgICAgICAgICAgICAgbV9jbGllbnQtPnVwZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1h
clN0cmluZyhiYWRHcmFtbWFyUGhyYXNlLCAqZGV0YWlsKTsKKyAgICAgICAgICAgICAgICAgICAg
dW5ncmFtbWF0aWNhbCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBndWVzc2Vz
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAg
ICByZXR1cm4gZ3Vlc3NlczsKKyNlbHNlCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
VU5VU0VEX1BBUkFNKGNoZWNrR3JhbW1hcik7CisgICAgVU5VU0VEX1BBUkFNKG1pc3NwZWxsZWQp
OworICAgIFVOVVNFRF9QQVJBTSh1bmdyYW1tYXRpY2FsKTsKKyAgICByZXR1cm4gVmVjdG9yPFN0
cmluZz4oKTsKKyNlbmRpZgorfQorCisKK3ZvaWQgVGV4dENoZWNraW5nSGVscGVyOjptYXJrQWxs
TWlzc3BlbGxpbmdzKFJlZlB0cjxSYW5nZT4mIGZpcnN0TWlzc3BlbGxpbmdSYW5nZSkKK3sKKyAg
ICAvLyBVc2UgdGhlICJtYXJrQWxsIiBmZWF0dXJlIG9mIGZpbmRGaXJzdE1pc3NwZWxsaW5nLiBJ
Z25vcmUgdGhlIHJldHVybiB2YWx1ZSBhbmQgdGhlICJvdXQgcGFyYW1ldGVyIjsKKyAgICAvLyBh
bGwgd2UgbmVlZCB0byBkbyBpcyBtYXJrIGV2ZXJ5IGluc3RhbmNlLgorICAgIGludCBpZ25vcmVk
T2Zmc2V0OworICAgIGZpbmRGaXJzdE1pc3NwZWxsaW5nKGlnbm9yZWRPZmZzZXQsIHRydWUsIGZp
cnN0TWlzc3BlbGxpbmdSYW5nZSk7Cit9CisKK3ZvaWQgVGV4dENoZWNraW5nSGVscGVyOjptYXJr
QWxsQmFkR3JhbW1hcigpCit7CisjaWZuZGVmIEJVSUxESU5HX09OX1RJR0VSCisgICAgLy8gVXNl
IHRoZSAibWFya0FsbCIgZmVhdHVyZSBvZiBmaW5kRmlyc3RCYWRHcmFtbWFyLiBJZ25vcmUgdGhl
IHJldHVybiB2YWx1ZSBhbmQgIm91dCBwYXJhbWV0ZXJzIjsgYWxsIHdlIG5lZWQgdG8KKyAgICAv
LyBkbyBpcyBtYXJrIGV2ZXJ5IGluc3RhbmNlLgorICAgIEdyYW1tYXJEZXRhaWwgaWdub3JlZEdy
YW1tYXJEZXRhaWw7CisgICAgaW50IGlnbm9yZWRPZmZzZXQ7CisgICAgZmluZEZpcnN0QmFkR3Jh
bW1hcihpZ25vcmVkR3JhbW1hckRldGFpbCwgaWdub3JlZE9mZnNldCwgdHJ1ZSk7CisjZWxzZQor
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworI2VuZGlmCit9CisKK30KZGlmZiAtLWdpdCBhL1dl
YkNvcmUvZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuaCBiL1dlYkNvcmUvZWRpdGluZy9UZXh0
Q2hlY2tpbmdIZWxwZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xZGQzYjNkNWMxMjdmMjZlYzc0ZDFlMzQyNmU1
YTY3NmVjNDM0MWMzCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9lZGl0aW5nL1RleHRDaGVj
a2luZ0hlbHBlci5oCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYs
IDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDA4IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisj
aWZuZGVmIFRleHRDaGVja2luZ0hlbHBlcl9oCisjZGVmaW5lIFRleHRDaGVja2luZ0hlbHBlcl9o
CisKKyNpbmNsdWRlICJFZGl0b3JDbGllbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBSYW5nZTsKKworY2xhc3MgVGV4dENoZWNraW5nSGVscGVyIDogcHVibGljIE5vbmNvcHlh
YmxlIHsKK3B1YmxpYzoKKyAgICBUZXh0Q2hlY2tpbmdIZWxwZXIoRWRpdG9yQ2xpZW50KiwgUGFz
c1JlZlB0cjxSYW5nZT4pOworICAgIH5UZXh0Q2hlY2tpbmdIZWxwZXIoKTsKKworICAgIFN0cmlu
ZyBmaW5kRmlyc3RNaXNzcGVsbGluZyhpbnQmIGZpcnN0TWlzc3BlbGxpbmdPZmZzZXQsIGJvb2wg
bWFya0FsbCwgUmVmUHRyPFJhbmdlPiYgZmlyc3RNaXNzcGVsbGluZ1JhbmdlKTsKKyAgICBTdHJp
bmcgZmluZEZpcnN0TWlzc3BlbGxpbmdPckJhZEdyYW1tYXIoYm9vbCBjaGVja0dyYW1tYXIsIGJv
b2wmIG91dElzU3BlbGxpbmcsIGludCYgb3V0Rmlyc3RGb3VuZE9mZnNldCwgR3JhbW1hckRldGFp
bCYgb3V0R3JhbW1hckRldGFpbCk7CisgICAgU3RyaW5nIGZpbmRGaXJzdEJhZEdyYW1tYXIoR3Jh
bW1hckRldGFpbCYgb3V0R3JhbW1hckRldGFpbCwgaW50JiBvdXRHcmFtbWFyUGhyYXNlT2Zmc2V0
LCBib29sIG1hcmtBbGwpOworICAgIGludCBmaW5kRmlyc3RHcmFtbWFyRGV0YWlsKGNvbnN0IFZl
Y3RvcjxHcmFtbWFyRGV0YWlsPiYgZ3JhbW1hckRldGFpbHMsIGludCBiYWRHcmFtbWFyUGhyYXNl
TG9jYXRpb24sIGludCBiYWRHcmFtbWFyUGhyYXNlTGVuZ3RoLCBpbnQgc3RhcnRPZmZzZXQsIGlu
dCBlbmRPZmZzZXQsIGJvb2wgbWFya0FsbCk7CisgICAgdm9pZCBtYXJrQWxsTWlzc3BlbGxpbmdz
KFJlZlB0cjxSYW5nZT4mIGZpcnN0TWlzc3BlbGxpbmdSYW5nZSk7CisgICAgdm9pZCBtYXJrQWxs
QmFkR3JhbW1hcigpOworCisgICAgYm9vbCBpc1VuZ3JhbW1hdGljYWwoVmVjdG9yPFN0cmluZz4m
IGd1ZXNzZXNWZWN0b3IpIGNvbnN0OworICAgIFZlY3RvcjxTdHJpbmc+IGd1ZXNzZXNGb3JNaXNz
cGVsbGVkT3JVbmdyYW1tYXRpY2FsUmFuZ2UoYm9vbCBjaGVja0dyYW1tYXIsIGJvb2wmIG1pc3Nw
ZWxsZWQsIGJvb2wmIHVuZ3JhbW1hdGljYWwpIGNvbnN0OworICAgIFBhc3NSZWZQdHI8UmFuZ2U+
IHBhcmFncmFwaEFsaWduZWRSYW5nZShpbnQmIG9mZnNldEludG9QYXJhZ3JhcGhBbGlnbmVkUmFu
Z2UsIFN0cmluZyYgcGFyYWdyYXBoU3RyaW5nKSBjb25zdDsKK3ByaXZhdGU6CisgICAgRWRpdG9y
Q2xpZW50KiBtX2NsaWVudDsKKyAgICBSZWZQdHI8UmFuZ2U+IG1fcmFuZ2U7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBUZXh0Q2hlY2tpbmdIZWxwZXJfaAo=
</data>
<flag name="review"
          id="62746"
          type_id="1"
          status="+"
          setter="tkent"
    />
          </attachment>
      

    </bug>

</bugzilla>