<?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>162699</bug_id>
          
          <creation_ts>2016-09-28 13:25:00 -0700</creation_ts>
          <short_desc>Air should have a way of expressing additional instruction flags</short_desc>
          <delta_ts>2016-10-10 19:55:06 -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>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=162692</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>162751</blocked>
    
    <blocked>162689</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1234517</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-09-28 13:25:00 -0700</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1234518</commentid>
    <comment_count>1</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-09-28 13:25:19 -0700</bug_when>
    <thetext>This is like https://bugs.webkit.org/show_bug.cgi?id=162692, but it&apos;s not clear that we should do it the same way as in B3.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1235011</commentid>
    <comment_count>2</comment_count>
      <attachid>290255</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-09-29 15:30:21 -0700</bug_when>
    <thetext>Created attachment 290255
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1235247</commentid>
    <comment_count>3</comment_count>
      <attachid>290255</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2016-09-30 09:41:07 -0700</bug_when>
    <thetext>Comment on attachment 290255
the patch

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

r=me with comments

&gt; Source/JavaScriptCore/b3/air/AirInst.h:85
&gt; +    

Please remove empty space.

&gt; Source/JavaScriptCore/b3/air/AirKind.h:67
&gt; +        return static_cast&lt;unsigned&gt;(opcode) + static_cast&lt;unsigned&gt;(traps);

Wouldn&apos;t this make it likely to have hash collisions between adjacent opcodes when flags are in use?  How about: &quot;static_cast&lt;unsigned&gt;(opcode) + static_cast&lt;unsigned&gt;(traps) &lt;&lt; 16&quot; since sizeof Opcode is 16 bits?  Or is there a reason why collision doesn&apos;t matter?

&gt; Source/JavaScriptCore/b3/air/opcode_generator.rb:1008
&gt; +    outp.puts &quot;if (kind.traps)&quot;
&gt; +    outp.puts &quot;return true;&quot;

Wish we could output pretty (indented) code. =(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1235253</commentid>
    <comment_count>4</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-09-30 09:48:31 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; Comment on attachment 290255 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=290255&amp;action=review
&gt; 
&gt; r=me with comments
&gt; 
&gt; &gt; Source/JavaScriptCore/b3/air/AirInst.h:85
&gt; &gt; +    
&gt; 
&gt; Please remove empty space.

Done.

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/air/AirKind.h:67
&gt; &gt; +        return static_cast&lt;unsigned&gt;(opcode) + static_cast&lt;unsigned&gt;(traps);
&gt; 
&gt; Wouldn&apos;t this make it likely to have hash collisions between adjacent
&gt; opcodes when flags are in use?  How about: &quot;static_cast&lt;unsigned&gt;(opcode) +
&gt; static_cast&lt;unsigned&gt;(traps) &lt;&lt; 16&quot; since sizeof Opcode is 16 bits?  Or is
&gt; there a reason why collision doesn&apos;t matter?

Hashing the opcode or kind is super rare.  Currently the only client is B3::lowerToAir()&apos;s HashMap that maps opcode/argument combinations to Specials.  I believe that this HashMap has at most 5 things in it ever!

But anyway your hash function is better, I&apos;ll use that.

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/air/opcode_generator.rb:1008
&gt; &gt; +    outp.puts &quot;if (kind.traps)&quot;
&gt; &gt; +    outp.puts &quot;return true;&quot;
&gt; 
&gt; Wish we could output pretty (indented) code. =(

I decided to uniformly give up on this because the generator emits recursively nested code, so it quickly loses track of how deep it is.  Instead, I print the code left-justified but in such a way that Emacs&apos;s indent-region makes the code look WebKit-style-approved.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1235255</commentid>
    <comment_count>5</comment_count>
      <attachid>290340</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-09-30 09:49:44 -0700</bug_when>
    <thetext>Created attachment 290340
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1235259</commentid>
    <comment_count>6</comment_count>
      <attachid>290342</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-09-30 09:53:01 -0700</bug_when>
    <thetext>Created attachment 290342
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1235266</commentid>
    <comment_count>7</comment_count>
      <attachid>290342</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2016-09-30 09:58:43 -0700</bug_when>
    <thetext>Comment on attachment 290342
the patch

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

r=me with fix.

&gt; Websites/webkit.org/docs/b3/assembly-intermediate-representation.html:276
&gt; +      ability to answer such questions. Fortunately, Air does not have much need to moving memory

/to moving/to move/.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1235267</commentid>
    <comment_count>8</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-09-30 09:59:19 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; Comment on attachment 290342 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=290342&amp;action=review
&gt; 
&gt; r=me with fix.
&gt; 
&gt; &gt; Websites/webkit.org/docs/b3/assembly-intermediate-representation.html:276
&gt; &gt; +      ability to answer such questions. Fortunately, Air does not have much need to moving memory
&gt; 
&gt; /to moving/to move/.

Thanks, fixed!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1238699</commentid>
    <comment_count>9</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-10-10 19:55:06 -0700</bug_when>
    <thetext>Landed in https://trac.webkit.org/changeset/206640</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>290255</attachid>
            <date>2016-09-29 15:30:21 -0700</date>
            <delta_ts>2016-09-30 09:49:44 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>49797</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjA2NjE5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk0IEBA
CisyMDE2LTA5LTI5ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
QWlyIHNob3VsZCBoYXZlIGEgd2F5IG9mIGV4cHJlc3NpbmcgYWRkaXRpb25hbCBpbnN0cnVjdGlv
biBmbGFncworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTYyNjk5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAor
ICAgICAgICBUaGlzIGZvbGxvd3MgYSBzaW1pbGFyIGNoYW5nZSBpbiBCMyAocjIwNjU5NSkgYW5k
IHJlcGxhY2VzIEFpcjo6T3Bjb2RlIHdpdGggQWlyOjpLaW5kLAorICAgICAgICB3aGljaCBob2xk
cyBvbnRvIHRoZSBvcGNvZGUgYW5kIHNvbWUgYWRkaXRpb25hbCBmbGFncy4gQmVjYXVzZSBBaXIg
aXMgYW4gb3J0aG9nb25hbCBJU0EKKyAgICAgICAgKHRoZSBvcGNvZGUgdGVsbHMgeW91IHdoYXQg
dGhlIG9wZXJhdGlvbiBkb2VzIGJ1dCBlYWNoIG9wZXJhbmQgaXMgYWxsb3dlZCB0byBhbHNvIGNv
bnRhaW4KKyAgICAgICAgZWZmZWN0aXZlbHkgaW5zdHJ1Y3Rpb25zIGZvciB3aGF0IHRvIGRvIHRv
IHJlYWQgb3Igd3JpdGUgdGhhdCBvcGVyYW5kKSwgdGhlIGZsYWdzIGFyZQorICAgICAgICBtZWFu
dCB0byBiZSBvcnRob2dvbmFsIHRvIG9wY29kZS4gVGhpcyBhbGxvd3MgdXMgdG8gc2F5IHRoaW5n
cyBsaWtlIEFkZDMyPFRyYXA+LCB3aGljaAorICAgICAgICBtYWtlcyBzZW5zZSBpZiBhbnkgb2Yg
dGhlIG9wZXJhbmRzIHRvIHRoZSBBZGQzMiBhcmUgYWRkcmVzc2VzLgorICAgICAgICAKKyAgICAg
ICAgVG8gZGVtb25zdHJhdGUgdGhlIGZsYWdzIGZhY2lsaXR5IHRoaXMgcGFydGx5IGFkZHMgYSB0
cmFwIGZsYWcgdG8gQWlyLiBCMyBkb2Vzbid0IHVzZSBpdAorICAgICAgICB5ZXQsIGJ1dCBJIG1h
ZGUgc3VyZSB0aGF0IEFpciByZXNwZWN0cyBpdC4gQmFzaWNhbGx5IHRoYXQgbWVhbnMgYmxvY2tp
bmcgRENFIHdoZW4gdGhlIGZsYWcKKyAgICAgICAgaXMgc2V0LCBieSBtYWtpbmcgaXQgaW1wbHkg
aGFzTm9uQXJnTm9uQ29udHJvbEVmZmVjdHMuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoK
KyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAg
ICAgICAqIGIzL0IzQ2hlY2tTcGVjaWFsLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6bnVt
QjNBcmdzKToKKyAgICAgICAgKEpTQzo6QjM6OkNoZWNrU3BlY2lhbDo6S2V5OjpLZXkpOgorICAg
ICAgICAoSlNDOjpCMzo6Q2hlY2tTcGVjaWFsOjpLZXk6OmR1bXApOgorICAgICAgICAoSlNDOjpC
Mzo6Q2hlY2tTcGVjaWFsOjpDaGVja1NwZWNpYWwpOgorICAgICAgICAoSlNDOjpCMzo6Q2hlY2tT
cGVjaWFsOjpoaWRkZW5CcmFuY2gpOgorICAgICAgICAoSlNDOjpCMzo6Q2hlY2tTcGVjaWFsOjpm
b3JFYWNoQXJnKToKKyAgICAgICAgKEpTQzo6QjM6OkNoZWNrU3BlY2lhbDo6Z2VuZXJhdGUpOgor
ICAgICAgICAoSlNDOjpCMzo6Q2hlY2tTcGVjaWFsOjpkdW1wSW1wbCk6CisgICAgICAgIChKU0M6
OkIzOjpDaGVja1NwZWNpYWw6OmRlZXBEdW1wSW1wbCk6CisgICAgICAgICogYjMvQjNDaGVja1Nw
ZWNpYWwuaDoKKyAgICAgICAgKEpTQzo6QjM6OkNoZWNrU3BlY2lhbDo6S2V5OjpLZXkpOgorICAg
ICAgICAoSlNDOjpCMzo6Q2hlY2tTcGVjaWFsOjpLZXk6Om9wZXJhdG9yPT0pOgorICAgICAgICAo
SlNDOjpCMzo6Q2hlY2tTcGVjaWFsOjpLZXk6OmtpbmQpOgorICAgICAgICAoSlNDOjpCMzo6Q2hl
Y2tTcGVjaWFsOjpLZXk6Omhhc2gpOgorICAgICAgICAoSlNDOjpCMzo6Q2hlY2tTcGVjaWFsOjpL
ZXk6Om9wY29kZSk6IERlbGV0ZWQuCisgICAgICAgICogYjMvQjNLaW5kLmNwcDoKKyAgICAgICAg
KEpTQzo6QjM6OktpbmQ6OmR1bXApOgorICAgICAgICAqIGIzL2Fpci9BaXJEdW1wQXNKUy5jcHA6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OmR1bXBBc0pTKToKKyAgICAgICAgKiBiMy9haXIvQWly
Rml4T2J2aW91c1NwaWxscy5jcHA6CisgICAgICAgICogYjMvYWlyL0FpckZpeFBhcnRpYWxSZWdp
c3RlclN0YWxscy5jcHA6CisgICAgICAgICogYjMvYWlyL0FpckdlbmVyYXRlLmNwcDoKKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6Z2VuZXJhdGUpOgorICAgICAgICAqIGIzL2Fpci9BaXJIYW5kbGVD
YWxsZWVTYXZlcy5jcHA6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OmhhbmRsZUNhbGxlZVNhdmVz
KToKKyAgICAgICAgKiBiMy9haXIvQWlySW5zdC5jcHA6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
Okluc3Q6OmpzSGFzaCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okluc3Q6OmR1bXApOgorICAg
ICAgICAqIGIzL2Fpci9BaXJJbnN0Lmg6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okluc3Q6Oklu
c3QpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpJbnN0OjpraW5kKToKKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6SW5zdDo6b3BlcmF0b3IgYm9vbCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Oklu
c3Q6Om9wY29kZSk6IERlbGV0ZWQuCisgICAgICAgICogYjMvYWlyL0Fpckluc3RJbmxpbmVzLmg6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okluc3Q6OmV4dHJhQ2xvYmJlcmVkUmVncyk6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6Okluc3Q6OmV4dHJhRWFybHlDbG9iYmVyZWRSZWdzKToKKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6SW5zdDo6Zm9yRWFjaERlZldpdGhFeHRyYUNsb2JiZXJlZFJlZ3Mp
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpJbnN0OjpyZXBvcnRVc2VkUmVnaXN0ZXJzKToKKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6SW5zdDo6c2hvdWxkVHJ5QWxpYXNpbmdEZWYpOgorICAgICAg
ICAqIGIzL2Fpci9BaXJJdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZy5jcHA6CisgICAgICAgICog
YjMvYWlyL0FpcktpbmQuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6S2luZDo6
ZHVtcCk6CisgICAgICAgICogYjMvYWlyL0FpcktpbmQuaDogQWRkZWQuCisgICAgICAgIChKU0M6
OkIzOjpBaXI6OktpbmQ6OktpbmQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpLaW5kOjpvcGVy
YXRvcj09KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6S2luZDo6b3BlcmF0b3IhPSk6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6OktpbmQ6Omhhc2gpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpL
aW5kOjpvcGVyYXRvciBib29sKToKKyAgICAgICAgKiBiMy9haXIvQWlyTG93ZXJBZnRlclJlZ0Fs
bG9jLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6bG93ZXJBZnRlclJlZ0FsbG9jKToKKyAg
ICAgICAgKiBiMy9haXIvQWlyTG93ZXJFbnRyeVN3aXRjaC5jcHA6CisgICAgICAgIChKU0M6OkIz
OjpBaXI6Omxvd2VyRW50cnlTd2l0Y2gpOgorICAgICAgICAqIGIzL2Fpci9BaXJMb3dlck1hY3Jv
cy5jcHA6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Omxvd2VyTWFjcm9zKToKKyAgICAgICAgKiBi
My9haXIvQWlyT3B0aW1pemVCbG9ja09yZGVyLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
b3B0aW1pemVCbG9ja09yZGVyKToKKyAgICAgICAgKiBiMy9haXIvQWlyUmVwb3J0VXNlZFJlZ2lz
dGVycy5jcHA6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OnJlcG9ydFVzZWRSZWdpc3RlcnMpOgor
ICAgICAgICAqIGIzL2Fpci9BaXJTaW1wbGlmeUNGRy5jcHA6CisgICAgICAgIChKU0M6OkIzOjpB
aXI6OnNpbXBsaWZ5Q0ZHKToKKyAgICAgICAgKiBiMy9haXIvQWlyVG1wV2lkdGguY3BwOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpUbXBXaWR0aDo6cmVjb21wdXRlKToKKyAgICAgICAgKiBiMy9h
aXIvQWlyVXNlQ291bnRzLmg6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlVzZUNvdW50czo6VXNl
Q291bnRzKToKKyAgICAgICAgKiBiMy9haXIvQWlyVmFsaWRhdGUuY3BwOgorICAgICAgICAqIGIz
L2Fpci9vcGNvZGVfZ2VuZXJhdG9yLnJiOgorICAgICAgICAqIGIzL3Rlc3RiMy5jcHA6CisgICAg
ICAgIChKU0M6OkIzOjp0ZXN0VGVybmFyeVN1Ykluc3RydWN0aW9uU2VsZWN0aW9uKToKKyAgICAg
ICAgKEpTQzo6QjM6OnRlc3RCcmFuY2hCaXRBbmRJbW1GdXNpb24pOgorCiAyMDE2LTA5LTI5ICBK
b3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CiAKICAgICAgICAgQXJyb3cgZnVu
Y3Rpb25zIGRvIG5vdCBpbmZlciBuYW1lIGZyb20gY29tcHV0ZWQgcHJvcGVydHkgYnV0IG5vcm1h
bCBmdW5jdGlvbnMgZG8KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4
dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJl
dmlzaW9uIDIwNjYxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAko
d29ya2luZyBjb3B5KQpAQCAtODgsNiArODgsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09VUkNF
UwogICAgIGIzL2Fpci9BaXJJbnNlcnRpb25TZXQuY3BwCiAgICAgYjMvYWlyL0Fpckluc3QuY3Bw
CiAgICAgYjMvYWlyL0Fpckl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nLmNwcAorICAgIGIzL2Fp
ci9BaXJLaW5kLmNwcAogICAgIGIzL2Fpci9BaXJMb2dSZWdpc3RlclByZXNzdXJlLmNwcAogICAg
IGIzL2Fpci9BaXJMb3dlckFmdGVyUmVnQWxsb2MuY3BwCiAgICAgYjMvYWlyL0Fpckxvd2VyRW50
cnlTd2l0Y2guY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24g
MjA2NjEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTcyOCw2ICs3MjgsOCBAQAogCQkw
RkREQkZCNjE2NjZFRURBMDBDNTVGRUYgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEREJGQjMxNjY2
RUVENTAwQzU1RkVGIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuaCAqLzsgfTsKIAkJMEZE
RjY3RDIxRDlDNkQyNzAwMUI5ODI1IC8qIEIzS2luZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZERjY3RDExRDlDNjA4NjAwMUI5ODI1IC8qIEIzS2lu
ZC5oICovOyB9OwogCQkwRkRGNjdEMzFEOUM2RDJBMDAxQjk4MjUgLyogQjNLaW5kLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGREY2N0QwMUQ5QzYw
ODYwMDFCOTgyNSAvKiBCM0tpbmQuY3BwICovOyB9OworCQkwRkRGNjdENjFEOURDNDQwMDAxQjk4
MjUgLyogQWlyS2luZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkRGNjdENDFEOURDNDNFMDAxQjk4MjUgLyogQWlyS2luZC5jcHAgKi87IH07CisJ
CTBGREY2N0Q3MUQ5REM0NDIwMDFCOTgyNSAvKiBBaXJLaW5kLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkRGNjdENTFEOURDNDNFMDAxQjk4MjUgLyog
QWlyS2luZC5oICovOyB9OwogCQkwRkRGNzA4NTFEM0YyQzIyMDA5Mjc0NDkgLyogQWlyTG93ZXJF
bnRyeVN3aXRjaC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkRGNzA4MzFEM0YyQzFGMDA5Mjc0NDkgLyogQWlyTG93ZXJFbnRyeVN3aXRjaC5jcHAg
Ki87IH07CiAJCTBGREY3MDg2MUQzRjJDMjUwMDkyNzQ0OSAvKiBBaXJMb3dlckVudHJ5U3dpdGNo
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkRGNzA4
NDFEM0YyQzFGMDA5Mjc0NDkgLyogQWlyTG93ZXJFbnRyeVN3aXRjaC5oICovOyB9OwogCQkwRkUw
NTAxNDFBQTkwOTExMDBEMzNCMzMgLyogQXJndW1lbnRzTW9kZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFMDUwMEMxQUE5MDkxMTAwRDMzQjMzIC8q
IEFyZ3VtZW50c01vZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwpAQCAtMjk4Nyw2ICsyOTg5LDggQEAKIAkJMEZEREJGQjMxNjY2RUVENTAwQzU1RkVG
IC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oOyBwYXRoID0gZGZnL0RGR1Zhcmlh
YmxlQWNjZXNzRGF0YUR1bXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZERjY3
RDAxRDlDNjA4NjAwMUI5ODI1IC8qIEIzS2luZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBCM0tpbmQuY3BwOyBwYXRoID0gYjMvQjNLaW5kLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZERjY3RDExRDlDNjA4NjAwMUI5ODI1IC8qIEIzS2luZC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0tpbmQuaDsgcGF0aCA9IGIzL0Iz
S2luZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkRGNjdENDFEOURDNDNFMDAx
Qjk4MjUgLyogQWlyS2luZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBBaXJLaW5kLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJLaW5kLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEZERjY3RDUxRDlEQzQzRTAwMUI5ODI1IC8qIEFpcktpbmQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyS2luZC5oOyBwYXRoID0gYjMvYWlyL0Fp
cktpbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZERjcwODMxRDNGMkMxRjAw
OTI3NDQ5IC8qIEFpckxvd2VyRW50cnlTd2l0Y2guY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gQWlyTG93ZXJFbnRyeVN3aXRjaC5jcHA7IHBhdGggPSBiMy9haXIvQWly
TG93ZXJFbnRyeVN3aXRjaC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGREY3
MDg0MUQzRjJDMUYwMDkyNzQ0OSAvKiBBaXJMb3dlckVudHJ5U3dpdGNoLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckxvd2VyRW50cnlTd2l0Y2guaDsgcGF0aCA9IGIzL2Fp
ci9BaXJMb3dlckVudHJ5U3dpdGNoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
RTA1MDBDMUFBOTA5MTEwMEQzM0IzMyAvKiBBcmd1bWVudHNNb2RlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEFyZ3VtZW50c01vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTUwMTMsNiArNTAxNyw4IEBACiAJCQkJMEZFQzg1NUMxQkRBQ0RDNzAwODBGRjc0
IC8qIEFpckluc3RJbmxpbmVzLmggKi8sCiAJCQkJMjY3MThCQTIxQkU5OUY3ODAwNTIwMTdCIC8q
IEFpckl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nLmNwcCAqLywKIAkJCQkyNjcxOEJBMzFCRTk5
Rjc4MDA1MjAxN0IgLyogQWlySXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmcuaCAqLywKKwkJCQkw
RkRGNjdENDFEOURDNDNFMDAxQjk4MjUgLyogQWlyS2luZC5jcHAgKi8sCisJCQkJMEZERjY3RDUx
RDlEQzQzRTAwMUI5ODI1IC8qIEFpcktpbmQuaCAqLywKIAkJCQkyNjg0RDQzNzFDMDAxNjFDMDA4
MUQ2NjMgLyogQWlyTGl2ZW5lc3MuaCAqLywKIAkJCQkwRkUzNEMxNzFDNEIzOUFFMDAwM0E1MTIg
LyogQWlyTG9nUmVnaXN0ZXJQcmVzc3VyZS5jcHAgKi8sCiAJCQkJMEZFMzRDMTgxQzRCMzlBRTAw
MDNBNTEyIC8qIEFpckxvZ1JlZ2lzdGVyUHJlc3N1cmUuaCAqLywKQEAgLTc1NTksNiArNzU2NSw3
IEBACiAJCQkJQTdEODlDRkUxN0EwQjhDQzAwNzczQUQ4IC8qIERGR09TUkF2YWlsYWJpbGl0eUFu
YWx5c2lzUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRDgyRTU3MTQxREFGMTAwMDE3OUM5
NCAvKiBERkdPU1JFbnRyeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY0MEU0QTcxQzQ5N0Y3NDAw
QTU3N0ZBIC8qIEFpck9wY29kZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZERjY3RDcxRDlEQzQ0
MjAwMUI5ODI1IC8qIEFpcktpbmQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRDhBMzI2MTdENTFG
NTcwMENBMkM0MCAvKiBERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEZDMDk3NkExNDY4QTZGNzAwQ0YyNDQyIC8qIERGR09TUkV4aXQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGMjM1QkVDMTcxNzhFNzMwMDY5MEM3RiAvKiBERkdPU1JFeGl0QmFzZS5o
IGluIEhlYWRlcnMgKi8sCkBAIC04OTI4LDYgKzg5MzUsNyBAQAogCQkJCTBGNDU3MDM4MUJFNDRD
OTEwMDYyQTYyOSAvKiBBaXJFbGltaW5hdGVEZWFkQ29kZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk0M0FCMjZDNzFDMUE1MzVDMDBEODJBRTYgLyogQjNNYXRoRXh0cmFzLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGRUM4NTc4MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJHZW5lcmF0ZS5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQkwRkRGNjdENjFEOURDNDQwMDAxQjk4MjUgLyogQWlyS2luZC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRkVDODU5MzFCREIxRTEwMDA4MEZGNzQgLyogQWlyR2VuZXJh
dGVkLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUzNDg2QkJCMUMxOEU4NDUwMEY2RjNBRiAvKiBK
U1R5cGVkQXJyYXkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFQzg1N0IxQkRBQ0RDNzAwODBG
Rjc0IC8qIEFpckhhbmRsZUNhbGxlZVNhdmVzLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tTcGVjaWFsLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1NwZWNpYWwuY3BwCShyZXZpc2lvbiAyMDY2
MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1NwZWNpYWwuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MCw5ICs0MCw5IEBAIHVzaW5nIG5hbWVzcGFjZSBBaXI7CiAKIG5hbWVz
cGFjZSB7CiAKLXVuc2lnbmVkIG51bUIzQXJncyhCMzo6T3Bjb2RlIG9wY29kZSkKK3Vuc2lnbmVk
IG51bUIzQXJncyhCMzo6S2luZCBraW5kKQogewotICAgIHN3aXRjaCAob3Bjb2RlKSB7CisgICAg
c3dpdGNoIChraW5kLm9wY29kZSgpKSB7CiAgICAgY2FzZSBDaGVja0FkZDoKICAgICBjYXNlIENo
ZWNrU3ViOgogICAgIGNhc2UgQ2hlY2tNdWw6CkBAIC01Nyw3ICs1Nyw3IEBAIHVuc2lnbmVkIG51
bUIzQXJncyhCMzo6T3Bjb2RlIG9wY29kZSkKIAogdW5zaWduZWQgbnVtQjNBcmdzKFZhbHVlKiB2
YWx1ZSkKIHsKLSAgICByZXR1cm4gbnVtQjNBcmdzKHZhbHVlLT5vcGNvZGUoKSk7CisgICAgcmV0
dXJuIG51bUIzQXJncyh2YWx1ZS0+a2luZCgpKTsKIH0KIAogdW5zaWduZWQgbnVtQjNBcmdzKElu
c3QmIGluc3QpCkBAIC02OSwyNiArNjksMjYgQEAgdW5zaWduZWQgbnVtQjNBcmdzKEluc3QmIGlu
c3QpCiAKIENoZWNrU3BlY2lhbDo6S2V5OjpLZXkoY29uc3QgSW5zdCYgaW5zdCkKIHsKLSAgICBt
X29wY29kZSA9IGluc3Qub3Bjb2RlOworICAgIG1fa2luZCA9IGluc3Qua2luZDsKICAgICBtX251
bUFyZ3MgPSBpbnN0LmFyZ3Muc2l6ZSgpOwogICAgIG1fc3RhY2ttYXBSb2xlID0gU2FtZUFzUmVw
OwogfQogCiB2b2lkIENoZWNrU3BlY2lhbDo6S2V5OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNv
bnN0CiB7Ci0gICAgb3V0LnByaW50KG1fb3Bjb2RlLCAiKCIsIG1fbnVtQXJncywgIiwiLCBtX3N0
YWNrbWFwUm9sZSwgIikiKTsKKyAgICBvdXQucHJpbnQobV9raW5kLCAiKCIsIG1fbnVtQXJncywg
IiwiLCBtX3N0YWNrbWFwUm9sZSwgIikiKTsKIH0KIAotQ2hlY2tTcGVjaWFsOjpDaGVja1NwZWNp
YWwoQWlyOjpPcGNvZGUgb3Bjb2RlLCB1bnNpZ25lZCBudW1BcmdzLCBSb2xlTW9kZSBzdGFja21h
cFJvbGUpCi0gICAgOiBtX2NoZWNrT3Bjb2RlKG9wY29kZSkKK0NoZWNrU3BlY2lhbDo6Q2hlY2tT
cGVjaWFsKEFpcjo6S2luZCBraW5kLCB1bnNpZ25lZCBudW1BcmdzLCBSb2xlTW9kZSBzdGFja21h
cFJvbGUpCisgICAgOiBtX2NoZWNrS2luZChraW5kKQogICAgICwgbV9zdGFja21hcFJvbGUoc3Rh
Y2ttYXBSb2xlKQogICAgICwgbV9udW1DaGVja0FyZ3MobnVtQXJncykKIHsKLSAgICBBU1NFUlQo
aXNEZWZpbml0ZWx5VGVybWluYWwob3Bjb2RlKSk7CisgICAgQVNTRVJUKGlzRGVmaW5pdGVseVRl
cm1pbmFsKGtpbmQub3Bjb2RlKSk7CiB9CiAKIENoZWNrU3BlY2lhbDo6Q2hlY2tTcGVjaWFsKGNv
bnN0IENoZWNrU3BlY2lhbDo6S2V5JiBrZXkpCi0gICAgOiBDaGVja1NwZWNpYWwoa2V5Lm9wY29k
ZSgpLCBrZXkubnVtQXJncygpLCBrZXkuc3RhY2ttYXBSb2xlKCkpCisgICAgOiBDaGVja1NwZWNp
YWwoa2V5LmtpbmQoKSwga2V5Lm51bUFyZ3MoKSwga2V5LnN0YWNrbWFwUm9sZSgpKQogewogfQog
CkBAIC05OCw3ICs5OCw3IEBAIENoZWNrU3BlY2lhbDo6fkNoZWNrU3BlY2lhbCgpCiAKIEluc3Qg
Q2hlY2tTcGVjaWFsOjpoaWRkZW5CcmFuY2goY29uc3QgSW5zdCYgaW5zdCkgY29uc3QKIHsKLSAg
ICBJbnN0IGhpZGRlbkJyYW5jaChtX2NoZWNrT3Bjb2RlLCBpbnN0Lm9yaWdpbik7CisgICAgSW5z
dCBoaWRkZW5CcmFuY2gobV9jaGVja0tpbmQsIGluc3Qub3JpZ2luKTsKICAgICBoaWRkZW5CcmFu
Y2guYXJncy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fbnVtQ2hlY2tBcmdzKTsKICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9udW1DaGVja0FyZ3M7ICsraSkKICAgICAgICAgaGlkZGVu
QnJhbmNoLmFyZ3MuYXBwZW5kKGluc3QuYXJnc1tpICsgMV0pOwpAQCAtMTE2LDcgKzExNiw3IEBA
IHZvaWQgQ2hlY2tTcGVjaWFsOjpmb3JFYWNoQXJnKEluc3QmIGluc3QKICAgICAgICAgfSk7CiAK
ICAgICBPcHRpb25hbDx1bnNpZ25lZD4gZmlyc3RSZWNvdmVyYWJsZUluZGV4OwotICAgIGlmICht
X2NoZWNrT3Bjb2RlID09IEJyYW5jaEFkZDMyIHx8IG1fY2hlY2tPcGNvZGUgPT0gQnJhbmNoQWRk
NjQpCisgICAgaWYgKG1fY2hlY2tLaW5kLm9wY29kZSA9PSBCcmFuY2hBZGQzMiB8fCBtX2NoZWNr
S2luZC5vcGNvZGUgPT0gQnJhbmNoQWRkNjQpCiAgICAgICAgIGZpcnN0UmVjb3ZlcmFibGVJbmRl
eCA9IDE7CiAgICAgZm9yRWFjaEFyZ0ltcGwobnVtQjNBcmdzKGluc3QpLCBtX251bUNoZWNrQXJn
cyArIDEsIGluc3QsIG1fc3RhY2ttYXBSb2xlLCBmaXJzdFJlY292ZXJhYmxlSW5kZXgsIGNhbGxi
YWNrKTsKIH0KQEAgLTE2NCw3ICsxNjQsNyBAQCBDQ2FsbEhlbHBlcnM6Okp1bXAgQ2hlY2tTcGVj
aWFsOjpnZW5lcmF0CiAgICAgICAgICAgICAgICAgZmFpbC5saW5rKCZqaXQpOwogCiAgICAgICAg
ICAgICAgICAgLy8gSWYgbmVjZXNzYXJ5LCB1bmRvIHRoZSBvcGVyYXRpb24uCi0gICAgICAgICAg
ICAgICAgc3dpdGNoIChtX2NoZWNrT3Bjb2RlKSB7CisgICAgICAgICAgICAgICAgc3dpdGNoICht
X2NoZWNrS2luZC5vcGNvZGUpIHsKICAgICAgICAgICAgICAgICBjYXNlIEJyYW5jaEFkZDMyOgog
ICAgICAgICAgICAgICAgICAgICBpZiAoKG1fbnVtQ2hlY2tBcmdzID09IDQgJiYgYXJnc1sxXSA9
PSBhcmdzWzJdICYmIGFyZ3NbMl0gPT0gYXJnc1szXSkKICAgICAgICAgICAgICAgICAgICAgICAg
IHx8IChtX251bUNoZWNrQXJncyA9PSAzICYmIGFyZ3NbMV0gPT0gYXJnc1syXSkpIHsKQEAgLTIz
NSwxMiArMjM1LDEyIEBAIENDYWxsSGVscGVyczo6SnVtcCBDaGVja1NwZWNpYWw6OmdlbmVyYXQK
IAogdm9pZCBDaGVja1NwZWNpYWw6OmR1bXBJbXBsKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7
Ci0gICAgb3V0LnByaW50KG1fY2hlY2tPcGNvZGUsICIoIiwgbV9udW1DaGVja0FyZ3MsICIsIiwg
bV9zdGFja21hcFJvbGUsICIpIik7CisgICAgb3V0LnByaW50KG1fY2hlY2tLaW5kLCAiKCIsIG1f
bnVtQ2hlY2tBcmdzLCAiLCIsIG1fc3RhY2ttYXBSb2xlLCAiKSIpOwogfQogCiB2b2lkIENoZWNr
U3BlY2lhbDo6ZGVlcER1bXBJbXBsKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7Ci0gICAgb3V0
LnByaW50KCJCMzo6Q2hlY2tWYWx1ZSBsb3dlcmVkIHRvICIsIG1fY2hlY2tPcGNvZGUsICIgd2l0
aCAiLCBtX251bUNoZWNrQXJncywgIiBhcmdzLiIpOworICAgIG91dC5wcmludCgiQjM6OkNoZWNr
VmFsdWUgbG93ZXJlZCB0byAiLCBtX2NoZWNrS2luZCwgIiB3aXRoICIsIG1fbnVtQ2hlY2tBcmdz
LCAiIGFyZ3MuIik7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tTcGVjaWFsLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tTcGVjaWFsLmgJKHJldmlzaW9uIDIwNjYxMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrU3BlY2lhbC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTI4LDcgKzI4LDcgQEAKICNpZiBFTkFCTEUoQjNfSklUKQogCiAjaW5jbHVkZSAiQWlyQXJnLmgi
Ci0jaW5jbHVkZSAiQWlyT3Bjb2RlLmgiCisjaW5jbHVkZSAiQWlyS2luZC5oIgogI2luY2x1ZGUg
IkIzU3RhY2ttYXBTcGVjaWFsLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KIApAQCAtNTUs
MTQgKzU1LDEzIEBAIHB1YmxpYzoKICAgICBjbGFzcyBLZXkgewogICAgIHB1YmxpYzoKICAgICAg
ICAgS2V5KCkKLSAgICAgICAgICAgIDogbV9vcGNvZGUoQWlyOjpOb3ApCi0gICAgICAgICAgICAs
IG1fc3RhY2ttYXBSb2xlKFNhbWVBc1JlcCkKKyAgICAgICAgICAgIDogbV9zdGFja21hcFJvbGUo
U2FtZUFzUmVwKQogICAgICAgICAgICAgLCBtX251bUFyZ3MoMCkKICAgICAgICAgewogICAgICAg
ICB9CiAgICAgICAgIAotICAgICAgICBLZXkoQWlyOjpPcGNvZGUgb3Bjb2RlLCB1bnNpZ25lZCBu
dW1BcmdzLCBSb2xlTW9kZSBzdGFja21hcFJvbGUgPSBTYW1lQXNSZXApCi0gICAgICAgICAgICA6
IG1fb3Bjb2RlKG9wY29kZSkKKyAgICAgICAgS2V5KEFpcjo6S2luZCBraW5kLCB1bnNpZ25lZCBu
dW1BcmdzLCBSb2xlTW9kZSBzdGFja21hcFJvbGUgPSBTYW1lQXNSZXApCisgICAgICAgICAgICA6
IG1fa2luZChraW5kKQogICAgICAgICAgICAgLCBtX3N0YWNrbWFwUm9sZShzdGFja21hcFJvbGUp
CiAgICAgICAgICAgICAsIG1fbnVtQXJncyhudW1BcmdzKQogICAgICAgICB7CkBAIC03Miw3ICs3
MSw3IEBAIHB1YmxpYzoKIAogICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgS2V5JiBvdGhl
cikgY29uc3QKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1fb3Bjb2RlID09IG90aGVy
Lm1fb3Bjb2RlCisgICAgICAgICAgICByZXR1cm4gbV9raW5kID09IG90aGVyLm1fa2luZAogICAg
ICAgICAgICAgICAgICYmIG1fbnVtQXJncyA9PSBvdGhlci5tX251bUFyZ3MKICAgICAgICAgICAg
ICAgICAmJiBtX3N0YWNrbWFwUm9sZSA9PSBvdGhlci5tX3N0YWNrbWFwUm9sZTsKICAgICAgICAg
fQpAQCAtODQsMTUgKzgzLDE0IEBAIHB1YmxpYzoKIAogICAgICAgICBleHBsaWNpdCBvcGVyYXRv
ciBib29sKCkgY29uc3QgeyByZXR1cm4gKnRoaXMgIT0gS2V5KCk7IH0KIAotICAgICAgICBBaXI6
Ok9wY29kZSBvcGNvZGUoKSBjb25zdCB7IHJldHVybiBtX29wY29kZTsgfQorICAgICAgICBBaXI6
OktpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQogICAgICAgICB1bnNpZ25lZCBu
dW1BcmdzKCkgY29uc3QgeyByZXR1cm4gbV9udW1BcmdzOyB9CiAgICAgICAgIFJvbGVNb2RlIHN0
YWNrbWFwUm9sZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhY2ttYXBSb2xlOyB9CiAKICAgICAgICAg
dm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OwogCiAgICAgICAgIEtleShXVEY6Okhh
c2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpCi0gICAgICAgICAgICA6IG1fb3Bjb2RlKEFpcjo6Tm9w
KQotICAgICAgICAgICAgLCBtX3N0YWNrbWFwUm9sZShTYW1lQXNSZXApCisgICAgICAgICAgICA6
IG1fc3RhY2ttYXBSb2xlKFNhbWVBc1JlcCkKICAgICAgICAgICAgICwgbV9udW1BcmdzKDEpCiAg
ICAgICAgIHsKICAgICAgICAgfQpAQCAtMTA1LDE2ICsxMDMsMTYgQEAgcHVibGljOgogICAgICAg
ICB1bnNpZ25lZCBoYXNoKCkgY29uc3QKICAgICAgICAgewogICAgICAgICAgICAgLy8gU2VyaW91
c2x5LCB3ZSBkb24ndCBuZWVkIHRvIGJlIHNtYXJ0IGhlcmUuIEl0IGp1c3QgZG9lc24ndCBtYXR0
ZXIuCi0gICAgICAgICAgICByZXR1cm4gbV9vcGNvZGUgKyBtX251bUFyZ3MgKyBtX3N0YWNrbWFw
Um9sZTsKKyAgICAgICAgICAgIHJldHVybiBtX2tpbmQuaGFzaCgpICsgbV9udW1BcmdzICsgbV9z
dGFja21hcFJvbGU7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgcHJpdmF0ZToKLSAgICAgICAg
QWlyOjpPcGNvZGUgbV9vcGNvZGU7CisgICAgICAgIEFpcjo6S2luZCBtX2tpbmQ7CiAgICAgICAg
IFJvbGVNb2RlIG1fc3RhY2ttYXBSb2xlOwogICAgICAgICB1bnNpZ25lZCBtX251bUFyZ3M7CiAg
ICAgfTsKICAgICAKLSAgICBDaGVja1NwZWNpYWwoQWlyOjpPcGNvZGUsIHVuc2lnbmVkIG51bUFy
Z3MsIFJvbGVNb2RlIHN0YWNrbWFwUm9sZSA9IFNhbWVBc1JlcCk7CisgICAgQ2hlY2tTcGVjaWFs
KEFpcjo6S2luZCwgdW5zaWduZWQgbnVtQXJncywgUm9sZU1vZGUgc3RhY2ttYXBSb2xlID0gU2Ft
ZUFzUmVwKTsKICAgICBDaGVja1NwZWNpYWwoY29uc3QgS2V5Jik7CiAgICAgfkNoZWNrU3BlY2lh
bCgpOwogCkBAIC0xMzYsNyArMTM0LDcgQEAgcHJvdGVjdGVkOgogICAgIHZvaWQgZGVlcER1bXBJ
bXBsKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CiAKIHByaXZhdGU6Ci0gICAgQWlyOjpP
cGNvZGUgbV9jaGVja09wY29kZTsKKyAgICBBaXI6OktpbmQgbV9jaGVja0tpbmQ7CiAgICAgUm9s
ZU1vZGUgbV9zdGFja21hcFJvbGU7CiAgICAgdW5zaWduZWQgbV9udW1DaGVja0FyZ3M7CiB9OwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzS2luZC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzS2luZC5jcHAJKHJldmlzaW9uIDIwNjYxMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0tpbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
NSwxNCArMzUsMTIgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CiB2b2lkIEtpbmQ6
OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKIHsKICAgICBvdXQucHJpbnQobV9vcGNvZGUp
OwotICAgIGlmICghaGFzRXh0cmFCaXRzKCkpCi0gICAgICAgIHJldHVybjsKICAgICAKLSAgICBD
b21tYVByaW50ZXIgY29tbWE7Ci0gICAgb3V0LnByaW50KCI8Iik7CisgICAgQ29tbWFQcmludGVy
IGNvbW1hKCIsICIsICI8Iik7CiAgICAgaWYgKGlzQ2hpbGwoKSkKICAgICAgICAgb3V0LnByaW50
KGNvbW1hLCAiQ2hpbGwiKTsKLSAgICBvdXQucHJpbnQoIj4iKTsKKyAgICBpZiAoY29tbWEuZGlk
UHJpbnQoKSkKKyAgICAgICAgb3V0LnByaW50KCI+Iik7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpCMwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAJKHJldmlzaW9uIDIw
NjYxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMjE3LDcgKzIyMTcsNyBAQCB2b2lkIHRlc3RUZXJuYXJ5U3ViSW5zdHJ1Y3Rpb25T
ZWxlY3Rpb24oCiAgICAgYXV0byBibG9jayA9IHByb2MuY29kZSgpWzBdOwogICAgIHVuc2lnbmVk
IG51bWJlck9mU3ViSW5zdHJ1Y3Rpb25zID0gMDsKICAgICBmb3IgKGF1dG8gaW5zdHJ1Y3Rpb24g
OiAqYmxvY2spIHsKLSAgICAgICAgaWYgKGluc3RydWN0aW9uLm9wY29kZSA9PSBleHBlY3RlZE9w
Y29kZSkgeworICAgICAgICBpZiAoaW5zdHJ1Y3Rpb24ua2luZC5vcGNvZGUgPT0gZXhwZWN0ZWRP
cGNvZGUpIHsKICAgICAgICAgICAgIENIRUNLX0VRKGluc3RydWN0aW9uLmFyZ3Muc2l6ZSgpLCAz
dWwpOwogICAgICAgICAgICAgQ0hFQ0tfRVEoaW5zdHJ1Y3Rpb24uYXJnc1swXS5raW5kKCksIEFp
cjo6QXJnOjpUbXApOwogICAgICAgICAgICAgQ0hFQ0tfRVEoaW5zdHJ1Y3Rpb24uYXJnc1sxXS5r
aW5kKCksIEFpcjo6QXJnOjpUbXApOwpAQCAtMTI5NzIsNyArMTI5NzIsNyBAQCB2b2lkIHRlc3RC
cmFuY2hCaXRBbmRJbW1GdXNpb24oCiAKICAgICAvLyBUaGUgZmlyc3QgYmFzaWMgYmxvY2sgbXVz
dCBlbmQgaW4gYSBCcmFuY2hUZXN0NjQocmVzQ29uZCwgdG1wLCBiaXRJbW0pLgogICAgIEFpcjo6
SW5zdCB0ZXJtaW5hbCA9IHByb2MuY29kZSgpWzBdLT5sYXN0KCk7Ci0gICAgQ0hFQ0tfRVEodGVy
bWluYWwub3Bjb2RlLCBleHBlY3RlZE9wY29kZSk7CisgICAgQ0hFQ0tfRVEodGVybWluYWwua2lu
ZC5vcGNvZGUsIGV4cGVjdGVkT3Bjb2RlKTsKICAgICBDSEVDS19FUSh0ZXJtaW5hbC5hcmdzWzBd
LmtpbmQoKSwgQWlyOjpBcmc6OlJlc0NvbmQpOwogICAgIENIRUNLX0VRKHRlcm1pbmFsLmFyZ3Nb
MV0ua2luZCgpLCBmaXJzdEtpbmQpOwogICAgIENIRUNLKHRlcm1pbmFsLmFyZ3NbMl0ua2luZCgp
ID09IEFpcjo6QXJnOjpCaXRJbW0gfHwgdGVybWluYWwuYXJnc1syXS5raW5kKCkgPT0gQWlyOjpB
cmc6OkJpdEltbTY0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRHVt
cEFzSlMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
RHVtcEFzSlMuY3BwCShyZXZpc2lvbiAyMDY2MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpckR1bXBBc0pTLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE4LDcgKzExOCw5IEBA
IHZvaWQgZHVtcEFzSlMoQ29kZSYgY29kZSwgUHJpbnRTdHJlYW0mIG8KICAgICAgICAgICAgIG91
dC5wcmludGxuKHZhck5hbWUoYmxvY2spLCAiLnByZWRlY2Vzc29ycy5wdXNoKCIsIHZhck5hbWUo
cHJlZGVjZXNzb3IpLCAiKTsiKTsKICAgICAgICAgCiAgICAgICAgIGZvciAoSW5zdCYgaW5zdCA6
ICpibG9jaykgewotICAgICAgICAgICAgb3V0LnByaW50bG4oImluc3QgPSBuZXcgSW5zdCgiLCBp
bnN0Lm9wY29kZSwgIik7Iik7CisgICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgZG8g
c29tZXRoaW5nIGZvciBmbGFncy4KKyAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNjI3NTEKKyAgICAgICAgICAgIG91dC5wcmludGxuKCJpbnN0
ID0gbmV3IEluc3QoIiwgaW5zdC5raW5kLm9wY29kZSwgIik7Iik7CiAgICAgICAgICAgICAKICAg
ICAgICAgICAgIGluc3QuZm9yRWFjaEFyZygKICAgICAgICAgICAgICAgICBbJl0gKEFyZyYgYXJn
LCBBcmc6OlJvbGUsIEFyZzo6VHlwZSwgQXJnOjpXaWR0aCkgewpAQCAtMTk3LDcgKzE5OSw3IEBA
IHZvaWQgZHVtcEFzSlMoQ29kZSYgY29kZSwgUHJpbnRTdHJlYW0mIG8KICAgICAgICAgICAgICAg
ICAgICAgb3V0LnByaW50bG4oImluc3QuYXJncy5wdXNoKGFyZyk7Iik7CiAgICAgICAgICAgICAg
ICAgfSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChpbnN0Lm9wY29kZSA9PSBQYXRj
aCkgeworICAgICAgICAgICAgaWYgKGluc3Qua2luZC5vcGNvZGUgPT0gUGF0Y2gpIHsKICAgICAg
ICAgICAgICAgICBpZiAoaW5zdC5oYXNOb25BcmdFZmZlY3RzKCkpCiAgICAgICAgICAgICAgICAg
ICAgIG91dC5wcmludGxuKCJpbnN0LnBhdGNoSGFzTm9uQXJnRWZmZWN0cyA9IHRydWU7Iik7CiAg
ICAgICAgICAgICAgICAgCkBAIC0yMjEsNyArMjIzLDcgQEAgdm9pZCBkdW1wQXNKUyhDb2RlJiBj
b2RlLCBQcmludFN0cmVhbSYgbwogICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGluc3Qub3Bjb2RlID09IENDYWxsIHx8
IGluc3Qub3Bjb2RlID09IENvbGRDQ2FsbCkgeworICAgICAgICAgICAgaWYgKGluc3Qua2luZC5v
cGNvZGUgPT0gQ0NhbGwgfHwgaW5zdC5raW5kLm9wY29kZSA9PSBDb2xkQ0NhbGwpIHsKICAgICAg
ICAgICAgICAgICBvdXQucHJpbnRsbigiaW5zdC5jQ2FsbFR5cGUgPSAiLCBpbnN0Lm9yaWdpbi0+
dHlwZSgpKTsKICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiaW5zdC5jQ2FsbEFyZ1R5cGVz
ID0gW107Iik7CiAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IGluc3Qu
b3JpZ2luLT5udW1DaGlsZHJlbigpOyArK2kpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpckZpeE9idmlvdXNTcGlsbHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyRml4T2J2aW91c1NwaWxscy5jcHAJKHJldmlzaW9uIDIwNjYx
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRml4T2J2aW91c1NwaWxscy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMSw3ICsxMjEsNyBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgICAgIG1fc3RhdGUuY2xvYmJlcihhcmcpOwogICAgICAgICAgICAgfSk7CiAKLSAgICAgICAg
c3dpdGNoIChpbnN0Lm9wY29kZSkgeworICAgICAgICBzd2l0Y2ggKGluc3Qua2luZC5vcGNvZGUp
IHsKICAgICAgICAgY2FzZSBNb3ZlOgogICAgICAgICAgICAgaWYgKGluc3QuYXJnc1swXS5pc1Nv
bWVJbW0oKSkgewogICAgICAgICAgICAgICAgIGlmIChpbnN0LmFyZ3NbMV0uaXNSZWcoKSkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRml4UGFydGlhbFJlZ2lzdGVyU3Rh
bGxzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckZp
eFBhcnRpYWxSZWdpc3RlclN0YWxscy5jcHAJKHJldmlzaW9uIDIwNjYxMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRml4UGFydGlhbFJlZ2lzdGVyU3RhbGxzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNyBAQCBuYW1lc3BhY2UgewogCiBib29sIGhhc1BhcnRp
YWxYbW1SZWdVcGRhdGUoY29uc3QgSW5zdCYgaW5zdCkKIHsKLSAgICBzd2l0Y2ggKGluc3Qub3Bj
b2RlKSB7CisgICAgc3dpdGNoIChpbnN0LmtpbmQub3Bjb2RlKSB7CiAgICAgY2FzZSBDb252ZXJ0
RG91YmxlVG9GbG9hdDoKICAgICBjYXNlIENvbnZlcnRGbG9hdFRvRG91YmxlOgogICAgIGNhc2Ug
Q29udmVydEludDMyVG9Eb3VibGU6CkBAIC02OCw3ICs2OCw3IEBAIGJvb2wgaGFzUGFydGlhbFht
bVJlZ1VwZGF0ZShjb25zdCBJbnN0JiAKIGJvb2wgaXNEZXBlbmRlbmN5QnJlYWtpbmcoY29uc3Qg
SW5zdCYgaW5zdCkKIHsKICAgICAvLyAieG9ycHMgcmVnLCByZWciIGlzIHVzZWQgYnkgdGhlIGZy
b250ZW5kIHRvIHJlbW92ZSB0aGUgZGVwZW5kZW5jeSBvbiBpdHMgYXJndW1lbnQuCi0gICAgcmV0
dXJuIGluc3Qub3Bjb2RlID09IE1vdmVaZXJvVG9Eb3VibGU7CisgICAgcmV0dXJuIGluc3Qua2lu
ZC5vcGNvZGUgPT0gTW92ZVplcm9Ub0RvdWJsZTsKIH0KIAogLy8gRklYTUU6IGZpbmQgYSBnb29k
IGRpc3RhbmNlIHBlciBhcmNoaXRlY3R1cmUgZXhwZXJpbWVudGFsbHkuCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmNwcAkocmV2aXNpb24gMjA2NjEw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0ZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIyNywxMyArMjI3LDEzIEBAIHZvaWQgZ2VuZXJhdGUoQ29kZSYgY29kZSwg
Q0NhbGxIZWxwZXJzJiAKIAogICAgICAgICBjb250ZXh0LmluZGV4SW5CbG9jayA9IGJsb2NrLT5z
aXplKCkgLSAxOwogICAgICAgICAKLSAgICAgICAgaWYgKGJsb2NrLT5sYXN0KCkub3Bjb2RlID09
IEp1bXAKKyAgICAgICAgaWYgKGJsb2NrLT5sYXN0KCkua2luZC5vcGNvZGUgPT0gSnVtcAogICAg
ICAgICAgICAgJiYgYmxvY2stPnN1Y2Nlc3NvckJsb2NrKDApID09IGNvZGUuZmluZE5leHRCbG9j
ayhibG9jaykpCiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICBhZGRJdGVtKGJsb2Nr
LT5sYXN0KCkpOwogCi0gICAgICAgIGlmIChpc1JldHVybihibG9jay0+bGFzdCgpLm9wY29kZSkp
IHsKKyAgICAgICAgaWYgKGlzUmV0dXJuKGJsb2NrLT5sYXN0KCkua2luZC5vcGNvZGUpKSB7CiAg
ICAgICAgICAgICAvLyBXZSBjdXJyZW50bHkgZG9uJ3QgcmVwcmVzZW50IHRoZSBmdWxsIHByb2xv
Z3VlL2VwaWxvZ3VlIGluIEFpciwgc28gd2UgbmVlZCB0bwogICAgICAgICAgICAgLy8gaGF2ZSB0
aGlzIG92ZXJyaWRlLgogICAgICAgICAgICAgaWYgKGNvZGUuZnJhbWVTaXplKCkpIHsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySGFuZGxlQ2FsbGVlU2F2ZXMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySGFuZGxlQ2FsbGVl
U2F2ZXMuY3BwCShyZXZpc2lvbiAyMDY2MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpckhhbmRsZUNhbGxlZVNhdmVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgs
NyBAQCB2b2lkIGhhbmRsZUNhbGxlZVNhdmVzKENvZGUmIGNvZGUpCiAgICAgICAgICAgICAgICAg
ICAgIHVzZWRDYWxsZWVTYXZlcy5zZXQodG1wLnJlZygpKTsKICAgICAgICAgICAgICAgICB9KTsK
IAotICAgICAgICAgICAgaWYgKGluc3Qub3Bjb2RlID09IFBhdGNoKQorICAgICAgICAgICAgaWYg
KGluc3Qua2luZC5vcGNvZGUgPT0gUGF0Y2gpCiAgICAgICAgICAgICAgICAgdXNlZENhbGxlZVNh
dmVzLm1lcmdlKGluc3QuZXh0cmFDbG9iYmVyZWRSZWdzKCkpOwogICAgICAgICB9CiAgICAgfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3QuY3BwCShyZXZpc2lvbiAy
MDY2MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3QuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw5IEBAIGJvb2wgSW5zdDo6aGFzQXJnRWZmZWN0cygpCiAK
IHVuc2lnbmVkIEluc3Q6OmpzSGFzaCgpIGNvbnN0CiB7Ci0gICAgdW5zaWduZWQgcmVzdWx0ID0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG9wY29kZSk7CisgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxk
IGRvIHNvbWV0aGluZyBmb3IgZmxhZ3MuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE2Mjc1MQorICAgIHVuc2lnbmVkIHJlc3VsdCA9IHN0YXRpY19jYXN0
PHVuc2lnbmVkPihraW5kLm9wY29kZSk7CiAgICAgCiAgICAgZm9yIChjb25zdCBBcmcmIGFyZyA6
IGFyZ3MpCiAgICAgICAgIHJlc3VsdCArPSBhcmcuanNIYXNoKCk7CkBAIC01Nyw3ICs1OSw3IEBA
IHVuc2lnbmVkIEluc3Q6OmpzSGFzaCgpIGNvbnN0CiAKIHZvaWQgSW5zdDo6ZHVtcChQcmludFN0
cmVhbSYgb3V0KSBjb25zdAogewotICAgIG91dC5wcmludChvcGNvZGUsICIgIiwgbGlzdER1bXAo
YXJncykpOworICAgIG91dC5wcmludChraW5kLCAiICIsIGxpc3REdW1wKGFyZ3MpKTsKICAgICBp
ZiAob3JpZ2luKSB7CiAgICAgICAgIGlmIChhcmdzLnNpemUoKSkKICAgICAgICAgICAgIG91dC5w
cmludCgiLCAiKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdC5oCShy
ZXZpc2lvbiAyMDY2MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3Qu
aAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNyBAQAogI2lmIEVOQUJMRShCM19KSVQpCiAK
ICNpbmNsdWRlICJBaXJBcmcuaCIKLSNpbmNsdWRlICJBaXJPcGNvZGUuaCIKKyNpbmNsdWRlICJB
aXJLaW5kLmgiCiAjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCiAKIG5hbWVzcGFjZSBKU0MgewpA
QCAtNTAsNDAgKzUwLDM5IEBAIHB1YmxpYzoKIAogICAgIEluc3QoKQogICAgICAgICA6IG9yaWdp
bihudWxscHRyKQotICAgICAgICAsIG9wY29kZShOb3ApCiAgICAgewogICAgIH0KICAgICAKLSAg
ICBJbnN0KE9wY29kZSBvcGNvZGUsIFZhbHVlKiBvcmlnaW4pCisgICAgSW5zdChLaW5kIGtpbmQs
IFZhbHVlKiBvcmlnaW4pCiAgICAgICAgIDogb3JpZ2luKG9yaWdpbikKLSAgICAgICAgLCBvcGNv
ZGUob3Bjb2RlKQorICAgICAgICAsIGtpbmQoa2luZCkKICAgICB7CiAgICAgfQogICAgIAogICAg
IHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KLSAgICBJbnN0KE9wY29kZSBvcGNvZGUs
IFZhbHVlKiBvcmlnaW4sIEFyZyBhcmcsIEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCisgICAgSW5z
dChLaW5kIGtpbmQsIFZhbHVlKiBvcmlnaW4sIEFyZyBhcmcsIEFyZ3VtZW50cy4uLiBhcmd1bWVu
dHMpCiAgICAgICAgIDogYXJnc3sgYXJnLCBhcmd1bWVudHMuLi4gfQogICAgICAgICAsIG9yaWdp
bihvcmlnaW4pCi0gICAgICAgICwgb3Bjb2RlKG9wY29kZSkKKyAgICAgICAgLCBraW5kKGtpbmQp
CiAgICAgewogICAgIH0KIAotICAgIEluc3QoT3Bjb2RlIG9wY29kZSwgVmFsdWUqIG9yaWdpbiwg
Y29uc3QgQXJnTGlzdCYgYXJndW1lbnRzKQorICAgIEluc3QoS2luZCBraW5kLCBWYWx1ZSogb3Jp
Z2luLCBjb25zdCBBcmdMaXN0JiBhcmd1bWVudHMpCiAgICAgICAgIDogYXJncyhhcmd1bWVudHMp
CiAgICAgICAgICwgb3JpZ2luKG9yaWdpbikKLSAgICAgICAgLCBvcGNvZGUob3Bjb2RlKQorICAg
ICAgICAsIGtpbmQoa2luZCkKICAgICB7CiAgICAgfQogCi0gICAgSW5zdChPcGNvZGUgb3Bjb2Rl
LCBWYWx1ZSogb3JpZ2luLCBBcmdMaXN0JiYgYXJndW1lbnRzKQorICAgIEluc3QoS2luZCBraW5k
LCBWYWx1ZSogb3JpZ2luLCBBcmdMaXN0JiYgYXJndW1lbnRzKQogICAgICAgICA6IGFyZ3MoV1RG
TW92ZShhcmd1bWVudHMpKQogICAgICAgICAsIG9yaWdpbihvcmlnaW4pCi0gICAgICAgICwgb3Bj
b2RlKG9wY29kZSkKKyAgICAgICAgLCBraW5kKGtpbmQpCiAgICAgewogICAgIH0KIAotICAgIGV4
cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBvcmlnaW4gfHwgb3Bjb2RlICE9
IE5vcCB8fCBhcmdzLnNpemUoKTsgfQotCisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNv
bnN0IHsgcmV0dXJuIG9yaWdpbiB8fCBraW5kIHx8IGFyZ3Muc2l6ZSgpOyB9CisgICAgCiAgICAg
dm9pZCBhcHBlbmQoKSB7IH0KICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVu
dHM+CkBAIC0yMDAsNyArMTk5LDcgQEAgcHVibGljOgogCiAgICAgQXJnTGlzdCBhcmdzOwogICAg
IFZhbHVlKiBvcmlnaW47IC8vIFRoZSBCMzo6VmFsdWUgdGhhdCB0aGlzIG9yaWdpbmF0ZWQgZnJv
bS4KLSAgICBPcGNvZGUgb3Bjb2RlOworICAgIEtpbmQga2luZDsKIH07CiAKIH0gfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkIzOjpBaXIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlySW5zdElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0Fpckluc3RJbmxpbmVzLmgJKHJldmlzaW9uIDIwNjYxMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlySW5zdElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsMTMg
KzQ2LDEzIEBAIHZvaWQgSW5zdDo6Zm9yRWFjaChjb25zdCBGdW5jdG9yJiBmdW5jdG8KIAogaW5s
aW5lIGNvbnN0IFJlZ2lzdGVyU2V0JiBJbnN0OjpleHRyYUNsb2JiZXJlZFJlZ3MoKQogewotICAg
IEFTU0VSVChvcGNvZGUgPT0gUGF0Y2gpOworICAgIEFTU0VSVChraW5kLm9wY29kZSA9PSBQYXRj
aCk7CiAgICAgcmV0dXJuIGFyZ3NbMF0uc3BlY2lhbCgpLT5leHRyYUNsb2JiZXJlZFJlZ3MoKnRo
aXMpOwogfQogCiBpbmxpbmUgY29uc3QgUmVnaXN0ZXJTZXQmIEluc3Q6OmV4dHJhRWFybHlDbG9i
YmVyZWRSZWdzKCkKIHsKLSAgICBBU1NFUlQob3Bjb2RlID09IFBhdGNoKTsKKyAgICBBU1NFUlQo
a2luZC5vcGNvZGUgPT0gUGF0Y2gpOwogICAgIHJldHVybiBhcmdzWzBdLnNwZWNpYWwoKS0+ZXh0
cmFFYXJseUNsb2JiZXJlZFJlZ3MoKnRoaXMpOwogfQogCkBAIC04OSwxMiArODksMTIgQEAgaW5s
aW5lIHZvaWQgSW5zdDo6Zm9yRWFjaERlZldpdGhFeHRyYUNsbwogICAgICAgICBmdW5jdG9yKFRo
aW5nKHJlZyksIHJlZ0RlZlJvbGUsIHR5cGUsIEFyZzo6Y29uc2VydmF0aXZlV2lkdGgodHlwZSkp
OwogICAgIH07CiAKLSAgICBpZiAocHJldkluc3QgJiYgcHJldkluc3QtPm9wY29kZSA9PSBQYXRj
aCkgeworICAgIGlmIChwcmV2SW5zdCAmJiBwcmV2SW5zdC0+a2luZC5vcGNvZGUgPT0gUGF0Y2gp
IHsKICAgICAgICAgcmVnRGVmUm9sZSA9IEFyZzo6RGVmOwogICAgICAgICBwcmV2SW5zdC0+ZXh0
cmFDbG9iYmVyZWRSZWdzKCkuZm9yRWFjaChyZXBvcnRSZWcpOwogICAgIH0KIAotICAgIGlmIChu
ZXh0SW5zdCAmJiBuZXh0SW5zdC0+b3Bjb2RlID09IFBhdGNoKSB7CisgICAgaWYgKG5leHRJbnN0
ICYmIG5leHRJbnN0LT5raW5kLm9wY29kZSA9PSBQYXRjaCkgewogICAgICAgICByZWdEZWZSb2xl
ID0gQXJnOjpFYXJseURlZjsKICAgICAgICAgbmV4dEluc3QtPmV4dHJhRWFybHlDbG9iYmVyZWRS
ZWdzKCkuZm9yRWFjaChyZXBvcnRSZWcpOwogICAgIH0KQEAgLTEwMiw3ICsxMDIsNyBAQCBpbmxp
bmUgdm9pZCBJbnN0Ojpmb3JFYWNoRGVmV2l0aEV4dHJhQ2xvCiAKIGlubGluZSB2b2lkIEluc3Q6
OnJlcG9ydFVzZWRSZWdpc3RlcnMoY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMpCiB7
Ci0gICAgQVNTRVJUKG9wY29kZSA9PSBQYXRjaCk7CisgICAgQVNTRVJUKGtpbmQub3Bjb2RlID09
IFBhdGNoKTsKICAgICBhcmdzWzBdLnNwZWNpYWwoKS0+cmVwb3J0VXNlZFJlZ2lzdGVycygqdGhp
cywgdXNlZFJlZ2lzdGVycyk7CiB9CiAKQEAgLTExNiw3ICsxMTYsNyBAQCBpbmxpbmUgT3B0aW9u
YWw8dW5zaWduZWQ+IEluc3Q6OnNob3VsZFRyCiAgICAgaWYgKCFpc1g4NigpKQogICAgICAgICBy
ZXR1cm4gTnVsbG9wdDsKIAotICAgIHN3aXRjaCAob3Bjb2RlKSB7CisgICAgc3dpdGNoIChraW5k
Lm9wY29kZSkgewogICAgIGNhc2UgQWRkMzI6CiAgICAgY2FzZSBBZGQ2NDoKICAgICBjYXNlIEFu
ZDMyOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJdGVyYXRlZFJlZ2lz
dGVyQ29hbGVzY2luZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJJdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZy5jcHAJKHJldmlzaW9uIDIwNjYxMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySXRlcmF0ZWRSZWdpc3RlckNvYWxl
c2NpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQwLDcgKzEwNDAsNyBAQCBwcml2YXRlOgog
ICAgIHsKICAgICAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAgICAgIGNhc2UgQXJnOjpHUDoKLSAg
ICAgICAgICAgIHN3aXRjaCAoaW5zdC5vcGNvZGUpIHsKKyAgICAgICAgICAgIHN3aXRjaCAoaW5z
dC5raW5kLm9wY29kZSkgewogICAgICAgICAgICAgY2FzZSBNb3ZlOgogICAgICAgICAgICAgY2Fz
ZSBNb3ZlMzI6CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0xMDQ5LDcgKzEwNDksNyBAQCBw
cml2YXRlOgogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2Ug
QXJnOjpGUDoKLSAgICAgICAgICAgIHN3aXRjaCAoaW5zdC5vcGNvZGUpIHsKKyAgICAgICAgICAg
IHN3aXRjaCAoaW5zdC5raW5kLm9wY29kZSkgewogICAgICAgICAgICAgY2FzZSBNb3ZlRmxvYXQ6
CiAgICAgICAgICAgICBjYXNlIE1vdmVEb3VibGU6CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBA
IC0xMDc0LDcgKzEwNzQsNyBAQCBwcml2YXRlOgogICAgICAgICAvLyBOb3RlIHRoYXQgdGhlIGlu
cHV0IHByb3BlcnR5IHJlcXVpcmVzIGFuIGFuYWx5c2lzIG92ZXIgWkRlZidzLCBzbyBpdCdzIG9u
bHkgdmFsaWQgc28gbG9uZwogICAgICAgICAvLyBhcyB0aGUgaW5wdXQgZ2V0cyBhIHJlZ2lzdGVy
LiBXZSBkb24ndCBrbm93IGlmIHRoZSBpbnB1dCBnZXRzIGEgcmVnaXN0ZXIsIGJ1dCB3ZSBkbyBr
bm93CiAgICAgICAgIC8vIHRoYXQgaWYgaXQgZG9lc24ndCBnZXQgYSByZWdpc3RlciB0aGVuIHdl
IHdpbGwgc3RpbGwgZW1pdCB0aGlzIE1vdmUzMi4KLSAgICAgICAgaWYgKGluc3Qub3Bjb2RlID09
IE1vdmUzMikgeworICAgICAgICBpZiAoaW5zdC5raW5kLm9wY29kZSA9PSBNb3ZlMzIpIHsKICAg
ICAgICAgICAgIGlmICghdG1wV2lkdGgpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CkBAIC0xMzgyLDExICsxMzgyLDExIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgLy8gZXF1
aXZhbGVudCBpZiB0aGUgZGVzdGluYXRpb24ncyBoaWdoIGJpdHMgYXJlIG5vdCBvYnNlcnZhYmxl
IG9yIGlmIHRoZSBzb3VyY2UncyBoaWdoCiAgICAgICAgICAgICAgICAgLy8gYml0cyBhcmUgYWxs
IHplcm8uIE5vdGUgdGhhdCB3ZSBkb24ndCBoYXZlIHRoZSBvcHBvc2l0ZSBvcHRpbWl6YXRpb24g
Zm9yIG90aGVyCiAgICAgICAgICAgICAgICAgLy8gYXJjaGl0ZWN0dXJlcywgd2hpY2ggbWF5IHBy
ZWZlciBNb3ZlIG92ZXIgTW92ZTMyLCBiZWNhdXNlIE1vdmUgaXMgY2Fub25pY2FsIGFscmVhZHku
Ci0gICAgICAgICAgICAgICAgaWYgKHR5cGUgPT0gQXJnOjpHUCAmJiBpbnN0Lm9wY29kZSA9PSBN
b3ZlCisgICAgICAgICAgICAgICAgaWYgKHR5cGUgPT0gQXJnOjpHUCAmJiBpbnN0LmtpbmQub3Bj
b2RlID09IE1vdmUKICAgICAgICAgICAgICAgICAgICAgJiYgaW5zdC5hcmdzWzBdLmlzVG1wKCkg
JiYgaW5zdC5hcmdzWzFdLmlzVG1wKCkpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKG1fdG1w
V2lkdGgudXNlV2lkdGgoaW5zdC5hcmdzWzFdLnRtcCgpKSA8PSBBcmc6OldpZHRoMzIKICAgICAg
ICAgICAgICAgICAgICAgICAgIHx8IG1fdG1wV2lkdGguZGVmV2lkdGgoaW5zdC5hcmdzWzBdLnRt
cCgpKSA8PSBBcmc6OldpZHRoMzIpCi0gICAgICAgICAgICAgICAgICAgICAgICBpbnN0Lm9wY29k
ZSA9IE1vdmUzMjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGluc3Qua2luZC5vcGNvZGUgPSBN
b3ZlMzI7CiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgaW5zdC5mb3JFYWNo
VG1wRmFzdChbJl0gKFRtcCYgdG1wKSB7CkBAIC0xNDUzLDcgKzE0NTMsNyBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgICAgIC8vIE1vdmUgaXMgdGhlIGNhbm9uaWNhbCB3YXkgdG8gbW92ZSBkYXRh
IGJldHdlZW4gR1BScy4KICAgICAgICAgICAgICAgICBib29sIGNhblVzZU1vdmUzMklmRGlkU3Bp
bGwgPSBmYWxzZTsKICAgICAgICAgICAgICAgICBib29sIGRpZFNwaWxsID0gZmFsc2U7Ci0gICAg
ICAgICAgICAgICAgaWYgKHR5cGUgPT0gQXJnOjpHUCAmJiBpbnN0Lm9wY29kZSA9PSBNb3ZlKSB7
CisgICAgICAgICAgICAgICAgaWYgKHR5cGUgPT0gQXJnOjpHUCAmJiBpbnN0LmtpbmQub3Bjb2Rl
ID09IE1vdmUpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKChpbnN0LmFyZ3NbMF0uaXNUbXAo
KSAmJiBtX3RtcFdpZHRoLndpZHRoKGluc3QuYXJnc1swXS50bXAoKSkgPD0gQXJnOjpXaWR0aDMy
KQogICAgICAgICAgICAgICAgICAgICAgICAgfHwgKGluc3QuYXJnc1sxXS5pc1RtcCgpICYmIG1f
dG1wV2lkdGgud2lkdGgoaW5zdC5hcmdzWzFdLnRtcCgpKSA8PSBBcmc6OldpZHRoMzIpKQogICAg
ICAgICAgICAgICAgICAgICAgICAgY2FuVXNlTW92ZTMySWZEaWRTcGlsbCA9IHRydWU7CkBAIC0x
NDg4LDcgKzE0ODgsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgQXJnOjpX
aWR0aCBzcGlsbFdpZHRoID0gbV90bXBXaWR0aC5yZXF1aXJlZFdpZHRoKGFyZy50bXAoKSk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0FueURlZihyb2xlKSAmJiB3aWR0aCA8
IHNwaWxsV2lkdGgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICAgICAgICAgICAgICAgICAgQVNTRVJUKGluc3Qub3Bjb2RlID09IE1vdmUgfHwgIShBcmc6Omlz
QW55VXNlKHJvbGUpICYmIHdpZHRoID4gc3BpbGxXaWR0aCkpOworICAgICAgICAgICAgICAgICAg
ICAgICAgQVNTRVJUKGluc3Qua2luZC5vcGNvZGUgPT0gTW92ZSB8fCAhKEFyZzo6aXNBbnlVc2Uo
cm9sZSkgJiYgd2lkdGggPiBzcGlsbFdpZHRoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzcGlsbFdpZHRoICE9IEFyZzo6V2lkdGgzMikK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW5Vc2VNb3ZlMzJJZkRpZFNwaWxsID0gZmFs
c2U7CkBAIC0xNTAwLDcgKzE1MDAsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICB9
KTsKIAogICAgICAgICAgICAgICAgIGlmIChkaWRTcGlsbCAmJiBjYW5Vc2VNb3ZlMzJJZkRpZFNw
aWxsKQotICAgICAgICAgICAgICAgICAgICBpbnN0Lm9wY29kZSA9IE1vdmUzMjsKKyAgICAgICAg
ICAgICAgICAgICAgaW5zdC5raW5kLm9wY29kZSA9IE1vdmUzMjsKIAogICAgICAgICAgICAgICAg
IC8vIEZvciBldmVyeSBvdGhlciBjYXNlLCBhZGQgTG9hZC9TdG9yZSBhcyBuZWVkZWQuCiAgICAg
ICAgICAgICAgICAgaW5zdC5mb3JFYWNoVG1wKFsmXSAoVG1wJiB0bXAsIEFyZzo6Um9sZSByb2xl
LCBBcmc6OlR5cGUgYXJnVHlwZSwgQXJnOjpXaWR0aCkgewpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJLaW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpcktpbmQuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyS2luZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0OSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlyS2luZC5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkK
KworI2luY2x1ZGUgPHd0Zi9Db21tYVByaW50ZXIuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCit2b2lkIEtpbmQ6OmR1bXAoUHJpbnRTdHJlYW0m
IG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQob3Bjb2RlKTsKKyAgICAKKyAgICBDb21tYVBy
aW50ZXIgY29tbWEoIiwgIiwgIjwiKTsKKyAgICBpZiAodHJhcHMpCisgICAgICAgIG91dC5wcmlu
dChjb21tYSwgIlRyYXBzIik7CisgICAgaWYgKGNvbW1hLmRpZFByaW50KCkpCisgICAgICAgIG91
dC5wcmludCgiPiIpOworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNl
bmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpcktpbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpcktpbmQuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpcktpbmQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDk3IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyS2luZF9oCisjZGVm
aW5lIEFpcktpbmRfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpck9wY29k
ZS5oIgorI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKKy8vIEFpciBvcGNvZGVzIGFyZSBhbHdheXMg
Y2FycmllZCBhcm91bmQgd2l0aCBzb21lIGZsYWdzLiBUaGVzZSBmbGFncyBhcmUgdW5kZXJzdG9v
ZCBhcyBoYXZpbmcgbm8KKy8vIG1lYW5pbmcgaWYgdGhleSBhcmUgc2V0IGZvciBhbiBvcGNvZGUg
dG8gd2hpY2ggdGhleSBkbyBub3QgYXBwbHkuIFRoaXMgbWFrZXMgc2Vuc2UsIHNpbmNlIEFpcgor
Ly8gaXMgYSBjb21wbGV4IGluc3RydWN0aW9uIHNldCBhbmQgbW9zdCBvZiB0aGVzZSBmbGFncyBj
YW4gYXBwbHkgdG8gYmFzaWNhbGx5IGFueSBvcGNvZGUuIEluCisvLyBmYWN0LCBpdCdzIHJlY29t
bWVuZGVkIHRvIG9ubHkgcmVwcmVzZW50IHNvbWV0aGluZyBhcyBhIGZsYWcgaWYgeW91IGJlbGll
dmUgdGhhdCBpdCBpcyBsYXJnZWx5CisvLyBvcGNvZGUtYWdub3N0aWMuCisKK3N0cnVjdCBLaW5k
IHsKKyAgICBLaW5kKE9wY29kZSBvcGNvZGUpCisgICAgICAgIDogb3Bjb2RlKG9wY29kZSkKKyAg
ICAgICAgLCB0cmFwcyhmYWxzZSkKKyAgICB7CisgICAgfQorICAgIAorICAgIEtpbmQoKQorICAg
ICAgICA6IEtpbmQoTm9wKQorICAgIHsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IEtpbmQmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG9wY29kZSA9
PSBvdGhlci5vcGNvZGUKKyAgICAgICAgICAgICYmIHRyYXBzID09IG90aGVyLnRyYXBzOworICAg
IH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgS2luZCYgb3RoZXIpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgfQorICAgIAorICAg
IHVuc2lnbmVkIGhhc2goKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PHVuc2lnbmVkPihvcGNvZGUpICsgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHRyYXBzKTsKKyAgICB9
CisgICAgCisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gKnRoaXMgIT0gS2luZCgpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGR1bXAoUHJp
bnRTdHJlYW0mKSBjb25zdDsKKyAgICAKKyAgICBPcGNvZGUgb3Bjb2RlOworICAgIAorICAgIC8v
IFRoaXMgaXMgYW4gb3Bjb2RlLWFnbm9zdGljIGZsYWcgdGhhdCBpbmRpY2F0ZXMgdGhhdCB3ZSBl
eHBlY3QgdGhhdCB0aGlzIGluc3RydWN0aW9uIHdpbGwKKyAgICAvLyB0cmFwLiBUaGlzIGNhdXNl
cyB0aGUgY29tcGlsZXIgdG8gYXNzdW1lIHRoYXQgdGhpcyBzaWRlLWV4aXRzIGFuZCB0aGVyZWZv
cmUgaGFzIG5vbi1jb250cm9sCisgICAgLy8gbm9uLWFyZyBlZmZlY3RzLiBUaGlzIGFsc28gY2F1
c2VzIHRoZSBjb21waWxlciB0byB0ZWxsIHlvdSBhYm91dCBhbGwgb2YgdGhlc2UgaW5zdHJ1Y3Rp
b25zLgorICAgIC8vIE5vdGUgdGhhdCB0aGlzIGlzIGp1c3Qgb25lIG9mIHNldmVyYWwgd2F5cyBv
ZiBzdXBwb3J0aW5nIHRyYXBwaW5nIGluIEFpciwgYW5kIGl0J3MgdGhlIGxlc3MKKyAgICAvLyBw
cmVjaXNlIHZhcmlhbnQgYmVjYXVzZSBpdCdzIG9yaWdpbi1iYXNlZC4gVGhpcyBtZWFucyB0aGF0
IGlmIGFuIGluc3RydWN0aW9uIHdhcyBmdXNlZCBvdXQKKyAgICAvLyBvZiBCMyB2YWx1ZXMgdGhh
dCBoYWQgZGlmZmVyZW50IG9yaWdpbnMsIHRoZW4gdGhlIG9yaWdpbiBhdCB3aGljaCB5b3UnbGwg
YXBwZWFyIHRvIHRyYXAKKyAgICAvLyB3aWxsIGJlIHNvbWV3aGF0IHJhbmRvbS4gVGhlIHVwc2lk
ZSBvZiB0aGlzIGFwcHJvYWNoIGlzIHRoYXQgaXQgaW1wb3NlcyBieSBmYXIgdGhlIGxlYXN0Cisg
ICAgLy8gb3ZlcmhlYWQgb24gdGhlIGNvbXBpbGVyLgorICAgIC8vIEZJWE1FOiBNYWtlIHRoaXMg
Y29tcGxldGVseSB3b3JrLgorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNjI2ODkKKyAgICBib29sIHRyYXBzIDogMTsKK307CisKK30gfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAv
LyBBaXJLaW5kX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMb3dl
ckFmdGVyUmVnQWxsb2MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyTG93ZXJBZnRlclJlZ0FsbG9jLmNwcAkocmV2aXNpb24gMjA2NjEwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMb3dlckFmdGVyUmVnQWxsb2MuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02OCw3ICs2OCw3IEBAIHZvaWQgbG93ZXJBZnRlclJlZ0FsbG9jKENvZGUm
IGNvZGUpCiAgICAgICAgICAgICAKICAgICAgICAgICAgIFJlZ2lzdGVyU2V0IHNldDsKIAotICAg
ICAgICAgICAgYm9vbCBpc1JlbGV2YW50ID0gaW5zdC5vcGNvZGUgPT0gU2h1ZmZsZSB8fCBpbnN0
Lm9wY29kZSA9PSBDb2xkQ0NhbGw7CisgICAgICAgICAgICBib29sIGlzUmVsZXZhbnQgPSBpbnN0
LmtpbmQub3Bjb2RlID09IFNodWZmbGUgfHwgaW5zdC5raW5kLm9wY29kZSA9PSBDb2xkQ0NhbGw7
CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChpc1JlbGV2YW50KSB7CiAgICAgICAgICAg
ICAgICAgZm9yIChSZWcgcmVnIDogbG9jYWxDYWxjLmxpdmUoKSkKQEAgLTExMCw3ICsxMTAsNyBA
QCB2b2lkIGxvd2VyQWZ0ZXJSZWdBbGxvYyhDb2RlJiBjb2RlKQogICAgICAgICBmb3IgKHVuc2ln
bmVkIGluc3RJbmRleCA9IDA7IGluc3RJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsraW5zdEluZGV4
KSB7CiAgICAgICAgICAgICBJbnN0JiBpbnN0ID0gYmxvY2stPmF0KGluc3RJbmRleCk7CiAKLSAg
ICAgICAgICAgIHN3aXRjaCAoaW5zdC5vcGNvZGUpIHsKKyAgICAgICAgICAgIHN3aXRjaCAoaW5z
dC5raW5kLm9wY29kZSkgewogICAgICAgICAgICAgY2FzZSBTaHVmZmxlOiB7CiAgICAgICAgICAg
ICAgICAgUmVnaXN0ZXJTZXQgc2V0ID0gdXNlZFJlZ2lzdGVycy5nZXQoJmluc3QpOwogICAgICAg
ICAgICAgICAgIFZlY3RvcjxTaHVmZmxlUGFpcj4gcGFpcnM7CkBAIC0xNDEsNiArMTQxLDcgQEAg
dm9pZCBsb3dlckFmdGVyUmVnQWxsb2MoQ29kZSYgY29kZSkKIAogICAgICAgICAgICAgY2FzZSBD
b2xkQ0NhbGw6IHsKICAgICAgICAgICAgICAgICBDQ2FsbFZhbHVlKiB2YWx1ZSA9IGluc3Qub3Jp
Z2luLT5hczxDQ2FsbFZhbHVlPigpOworICAgICAgICAgICAgICAgIEtpbmQgb2xkS2luZCA9IGlu
c3Qua2luZDsKIAogICAgICAgICAgICAgICAgIFJlZ2lzdGVyU2V0IGxpdmVSZWdzID0gdXNlZFJl
Z2lzdGVycy5nZXQoJmluc3QpOwogICAgICAgICAgICAgICAgIFJlZ2lzdGVyU2V0IHJlZ3NUb1Nh
dmUgPSBsaXZlUmVnczsKQEAgLTE5NSw2ICsxOTYsOCBAQCB2b2lkIGxvd2VyQWZ0ZXJSZWdBbGxv
YyhDb2RlJiBjb2RlKQogICAgICAgICAgICAgICAgICAgICBpbnN0SW5kZXgsIGVtaXRTaHVmZmxl
KHBhaXJzLCBncFNjcmF0Y2gsIGZwU2NyYXRjaCwgaW5zdC5vcmlnaW4pKTsKIAogICAgICAgICAg
ICAgICAgIGluc3QgPSBidWlsZENDYWxsKGNvZGUsIGluc3Qub3JpZ2luLCBkZXN0aW5hdGlvbnMp
OworICAgICAgICAgICAgICAgIGlmIChvbGRLaW5kLnRyYXBzKQorICAgICAgICAgICAgICAgICAg
ICBpbnN0LmtpbmQudHJhcHMgPSB0cnVlOwogCiAgICAgICAgICAgICAgICAgLy8gTm93IHdlIG5l
ZWQgdG8gZW1pdCBjb2RlIHRvIHJlc3RvcmUgcmVnaXN0ZXJzLgogICAgICAgICAgICAgICAgIHBh
aXJzLnJlc2l6ZSgwKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTG93
ZXJFbnRyeVN3aXRjaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJMb3dlckVudHJ5U3dpdGNoLmNwcAkocmV2aXNpb24gMjA2NjEwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMb3dlckVudHJ5U3dpdGNoLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDMsNyArNDMsNyBAQCB2b2lkIGxvd2VyRW50cnlTd2l0Y2goQ29kZSYgY29kZSkK
ICAgICAvLyBGaWd1cmUgb3V0IHRoZSBzZXQgb2YgYmxvY2tzIHRoYXQgc2hvdWxkIGJlIGR1cGxp
Y2F0ZWQuCiAgICAgQmxvY2tXb3JrbGlzdCB3b3JrbGlzdDsKICAgICBmb3IgKEJhc2ljQmxvY2sq
IGJsb2NrIDogY29kZSkgewotICAgICAgICBpZiAoYmxvY2stPmxhc3QoKS5vcGNvZGUgPT0gRW50
cnlTd2l0Y2gpCisgICAgICAgIGlmIChibG9jay0+bGFzdCgpLmtpbmQub3Bjb2RlID09IEVudHJ5
U3dpdGNoKQogICAgICAgICAgICAgd29ya2xpc3QucHVzaChibG9jayk7CiAgICAgfQogICAgIApA
QCAtNjEsNyArNjEsNyBAQCB2b2lkIGxvd2VyRW50cnlTd2l0Y2goQ29kZSYgY29kZSkKICAgICAK
ICAgICBWZWN0b3I8RnJlcXVlbmN5Q2xhc3M+IGVudHJ5cG9pbnRGcmVxdWVuY2llcyhjb2RlLnBy
b2MoKS5udW1FbnRyeXBvaW50cygpLCBGcmVxdWVuY3lDbGFzczo6UmFyZSk7CiAgICAgZm9yIChC
YXNpY0Jsb2NrKiBibG9jayA6IGNvZGUpIHsKLSAgICAgICAgaWYgKGJsb2NrLT5sYXN0KCkub3Bj
b2RlICE9IEVudHJ5U3dpdGNoKQorICAgICAgICBpZiAoYmxvY2stPmxhc3QoKS5raW5kLm9wY29k
ZSAhPSBFbnRyeVN3aXRjaCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBmb3IgKHVu
c2lnbmVkIGVudHJ5cG9pbnRJbmRleCA9IGNvZGUucHJvYygpLm51bUVudHJ5cG9pbnRzKCk7IGVu
dHJ5cG9pbnRJbmRleC0tOykgewogICAgICAgICAgICAgZW50cnlwb2ludEZyZXF1ZW5jaWVzW2Vu
dHJ5cG9pbnRJbmRleF0gPSBtYXhGcmVxdWVuY3koCkBAIC03MSwxMCArNzEsMTAgQEAgdm9pZCBs
b3dlckVudHJ5U3dpdGNoKENvZGUmIGNvZGUpCiAgICAgfQogICAgIAogICAgIGF1dG8gZml4RW50
cnlTd2l0Y2ggPSBbJl0gKEJhc2ljQmxvY2sqIGJsb2NrLCB1bnNpZ25lZCBlbnRyeXBvaW50SW5k
ZXgpIHsKLSAgICAgICAgaWYgKGJsb2NrLT5sYXN0KCkub3Bjb2RlICE9IEVudHJ5U3dpdGNoKQor
ICAgICAgICBpZiAoYmxvY2stPmxhc3QoKS5raW5kLm9wY29kZSAhPSBFbnRyeVN3aXRjaCkKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgRnJlcXVlbnRlZEJsb2NrIHRhcmdldCA9IGJsb2Nr
LT5zdWNjZXNzb3IoZW50cnlwb2ludEluZGV4KTsKLSAgICAgICAgYmxvY2stPmxhc3QoKS5vcGNv
ZGUgPSBKdW1wOworICAgICAgICBibG9jay0+bGFzdCgpLmtpbmQub3Bjb2RlID0gSnVtcDsKICAg
ICAgICAgYmxvY2stPnN1Y2Nlc3NvcnMoKS5yZXNpemUoMSk7CiAgICAgICAgIGJsb2NrLT5zdWNj
ZXNzb3IoMCkgPSB0YXJnZXQ7CiAgICAgfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyTG93ZXJNYWNyb3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyTG93ZXJNYWNyb3MuY3BwCShyZXZpc2lvbiAyMDY2MTApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckxvd2VyTWFjcm9zLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDcsOSArNDcsMTAgQEAgdm9pZCBsb3dlck1hY3JvcyhDb2RlJiBjb2RlKQogICAgICAg
ICBmb3IgKHVuc2lnbmVkIGluc3RJbmRleCA9IDA7IGluc3RJbmRleCA8IGJsb2NrLT5zaXplKCk7
ICsraW5zdEluZGV4KSB7CiAgICAgICAgICAgICBJbnN0JiBpbnN0ID0gYmxvY2stPmF0KGluc3RJ
bmRleCk7CiAKLSAgICAgICAgICAgIHN3aXRjaCAoaW5zdC5vcGNvZGUpIHsKKyAgICAgICAgICAg
IHN3aXRjaCAoaW5zdC5raW5kLm9wY29kZSkgewogICAgICAgICAgICAgY2FzZSBDQ2FsbDogewog
ICAgICAgICAgICAgICAgIENDYWxsVmFsdWUqIHZhbHVlID0gaW5zdC5vcmlnaW4tPmFzPENDYWxs
VmFsdWU+KCk7CisgICAgICAgICAgICAgICAgS2luZCBvbGRLaW5kID0gaW5zdC5raW5kOwogCiAg
ICAgICAgICAgICAgICAgVmVjdG9yPEFyZz4gZGVzdGluYXRpb25zID0gY29tcHV0ZUNDYWxsaW5n
Q29udmVudGlvbihjb2RlLCB2YWx1ZSk7CiAKQEAgLTcwLDYgKzcxLDggQEAgdm9pZCBsb3dlck1h
Y3JvcyhDb2RlJiBjb2RlKQogICAgICAgICAgICAgICAgIEFyZyByZXN1bHREc3QgPSB2YWx1ZS0+
dHlwZSgpID09IFZvaWQgPyBBcmcoKSA6IGluc3QuYXJnc1sxXTsKICAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgICAgICBpbnN0ID0gYnVpbGRDQ2FsbChjb2RlLCBpbnN0Lm9yaWdpbiwgZGVz
dGluYXRpb25zKTsKKyAgICAgICAgICAgICAgICBpZiAob2xkS2luZC50cmFwcykKKyAgICAgICAg
ICAgICAgICAgICAgaW5zdC5raW5kLnRyYXBzID0gdHJ1ZTsKIAogICAgICAgICAgICAgICAgIFRt
cCByZXN1bHQgPSBjQ2FsbFJlc3VsdCh2YWx1ZS0+dHlwZSgpKTsKICAgICAgICAgICAgICAgICBz
d2l0Y2ggKHZhbHVlLT50eXBlKCkpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyT3B0aW1pemVCbG9ja09yZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0Fpck9wdGltaXplQmxvY2tPcmRlci5jcHAJKHJldmlzaW9uIDIwNjYx
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3B0aW1pemVCbG9ja09yZGVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYwLDcgKzE2MCw3IEBAIHZvaWQgb3B0aW1pemVCbG9j
a09yZGVyKENvZGUmIGNvZGUpCiAgICAgICAgIC8vIG9wdGltaXphdGlvbi4gIFlvdSdsbCBwcm9i
YWJseSByZWFsaXplIHRoYXQgYXMgc29vbiBhcyB5b3UgbG9vayBhdCB0aGUgZGlzYXNzZW1ibHks
IGFuZCBpdAogICAgICAgICAvLyBjZXJ0YWlubHkgd29uJ3QgY2F1c2UgYW55IGNvcnJlY3RuZXNz
IGlzc3Vlcy4KICAgICAgICAgCi0gICAgICAgIHN3aXRjaCAoYnJhbmNoLm9wY29kZSkgeworICAg
ICAgICBzd2l0Y2ggKGJyYW5jaC5raW5kLm9wY29kZSkgewogICAgICAgICBjYXNlIEJyYW5jaDg6
CiAgICAgICAgIGNhc2UgQnJhbmNoMzI6CiAgICAgICAgIGNhc2UgQnJhbmNoNjQ6CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclJlcG9ydFVzZWRSZWdpc3RlcnMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyUmVwb3J0VXNlZFJl
Z2lzdGVycy5jcHAJKHJldmlzaW9uIDIwNjYxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyUmVwb3J0VXNlZFJlZ2lzdGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczLDcg
KzczLDcgQEAgdm9pZCByZXBvcnRVc2VkUmVnaXN0ZXJzKENvZGUmIGNvZGUpCiAgICAgICAgICAg
ICAgICAgICAgIGluc3QgPSBJbnN0KCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAg
ICAgICAgICAgIGlmIChpbnN0Lm9wY29kZSA9PSBQYXRjaCkgeworICAgICAgICAgICAgaWYgKGlu
c3Qua2luZC5vcGNvZGUgPT0gUGF0Y2gpIHsKICAgICAgICAgICAgICAgICBSZWdpc3RlclNldCBy
ZWdpc3RlclNldDsKICAgICAgICAgICAgICAgICBmb3IgKFJlZyByZWcgOiBsb2NhbENhbGMubGl2
ZSgpKQogICAgICAgICAgICAgICAgICAgICByZWdpc3RlclNldC5zZXQocmVnKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU2ltcGxpZnlDRkcuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU2ltcGxpZnlDRkcuY3BwCShyZXZp
c2lvbiAyMDY2MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNpbXBsaWZ5
Q0ZHLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzgsNyArNzgsNyBAQCBib29sIHNpbXBsaWZ5Q0ZH
KENvZGUmIGNvZGUpCiAgICAgICAgICAgICBmb3IgKEJhc2ljQmxvY2sqJiBzdWNjZXNzb3IgOiBi
bG9jay0+c3VjY2Vzc29yQmxvY2tzKCkpIHsKICAgICAgICAgICAgICAgICBpZiAoc3VjY2Vzc29y
ICE9IGJsb2NrCiAgICAgICAgICAgICAgICAgICAgICYmIHN1Y2Nlc3Nvci0+c2l6ZSgpID09IDEK
LSAgICAgICAgICAgICAgICAgICAgJiYgc3VjY2Vzc29yLT5sYXN0KCkub3Bjb2RlID09IEp1bXAp
IHsKKyAgICAgICAgICAgICAgICAgICAgJiYgc3VjY2Vzc29yLT5sYXN0KCkua2luZC5vcGNvZGUg
PT0gSnVtcCkgewogICAgICAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBuZXdTdWNjZXNzb3Ig
PSBzdWNjZXNzb3ItPnN1Y2Nlc3NvckJsb2NrKDApOwogICAgICAgICAgICAgICAgICAgICBpZiAo
bmV3U3VjY2Vzc29yICE9IHN1Y2Nlc3NvcikgewogICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KHZlcmJvc2UpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wV2lk
dGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVG1w
V2lkdGguY3BwCShyZXZpc2lvbiAyMDY2MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpclRtcFdpZHRoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODgsNyArODgsNyBAQCB2b2lk
IFRtcFdpZHRoOjpyZWNvbXB1dGUoQ29kZSYgY29kZSkKICAgICBWZWN0b3I8SW5zdCo+IG1vdmVz
OwogICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBjb2RlKSB7CiAgICAgICAgIGZvciAoSW5z
dCYgaW5zdCA6ICpibG9jaykgewotICAgICAgICAgICAgaWYgKGluc3Qub3Bjb2RlID09IE1vdmUg
JiYgaW5zdC5hcmdzWzFdLmlzVG1wKCkpIHsKKyAgICAgICAgICAgIGlmIChpbnN0LmtpbmQub3Bj
b2RlID09IE1vdmUgJiYgaW5zdC5hcmdzWzFdLmlzVG1wKCkpIHsKICAgICAgICAgICAgICAgICBp
ZiAoaW5zdC5hcmdzWzBdLmlzVG1wKCkpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gTWFrZSBz
dXJlIHRoYXQgYm90aCBzaWRlcyBvZiB0aGUgTW92ZSBoYXZlIGEgd2lkdGggYWxyZWFkeSBpbml0
aWFsaXplZC4gVGhlCiAgICAgICAgICAgICAgICAgICAgIC8vIGZpeHBvaW50IGJlbG93IGFzc3Vt
ZXMgdGhhdCBpdCBuZXZlciBoYXMgdG8gYWRkIHRoaW5ncyB0byB0aGUgSGFzaE1hcC4KQEAgLTEz
NSw3ICsxMzUsNyBAQCB2b2lkIFRtcFdpZHRoOjpyZWNvbXB1dGUoQ29kZSYgY29kZSkKICAgICB3
aGlsZSAoY2hhbmdlZCkgewogICAgICAgICBjaGFuZ2VkID0gZmFsc2U7CiAgICAgICAgIGZvciAo
SW5zdCogbW92ZSA6IG1vdmVzKSB7Ci0gICAgICAgICAgICBBU1NFUlQobW92ZS0+b3Bjb2RlID09
IE1vdmUpOworICAgICAgICAgICAgQVNTRVJUKG1vdmUtPmtpbmQub3Bjb2RlID09IE1vdmUpOwog
ICAgICAgICAgICAgQVNTRVJUKG1vdmUtPmFyZ3NbMF0uaXNUbXAoKSk7CiAgICAgICAgICAgICBB
U1NFUlQobW92ZS0+YXJnc1sxXS5pc1RtcCgpKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJVc2VDb3VudHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpclVzZUNvdW50cy5oCShyZXZpc2lvbiAyMDY2MTApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclVzZUNvdW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC04
OCw3ICs4OCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudHMu
bnVtRGVmcyArPSBmcmVxdWVuY3k7CiAgICAgICAgICAgICAgICAgICAgIH0pOwogCi0gICAgICAg
ICAgICAgICAgaWYgKChpbnN0Lm9wY29kZSA9PSBNb3ZlIHx8IGluc3Qub3Bjb2RlID09IE1vdmUz
MikKKyAgICAgICAgICAgICAgICBpZiAoKGluc3Qua2luZC5vcGNvZGUgPT0gTW92ZSB8fCBpbnN0
LmtpbmQub3Bjb2RlID09IE1vdmUzMikKICAgICAgICAgICAgICAgICAgICAgJiYgaW5zdC5hcmdz
WzBdLmlzU29tZUltbSgpCiAgICAgICAgICAgICAgICAgICAgICYmIGluc3QuYXJnc1sxXS5pczxU
aGluZz4oKSkKICAgICAgICAgICAgICAgICAgICAgbV9jb3VudHMuYWRkKGluc3QuYXJnc1sxXS5h
czxUaGluZz4oKSwgQ291bnRzKCkpLml0ZXJhdG9yLT52YWx1ZS5udW1Db25zdERlZnMrKzsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVmFsaWRhdGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVmFsaWRhdGUuY3BwCShyZXZp
c2lvbiAyMDY2MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclZhbGlkYXRl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTUsMTAgKzk1LDE1IEBAIHB1YmxpYzoKICAgICAgICAg
ICAgICAgICAgICAgICAgIFZBTElEQVRFKCZhcmcgPD0gJmluc3QuYXJncy5sYXN0KCksICgiQXQg
IiwgYXJnLCAiIGluICIsIGluc3QsICIgaW4gIiwgKmJsb2NrKSk7CiAgICAgICAgICAgICAgICAg
ICAgIH0pOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIHN3aXRjaCAoaW5zdC5v
cGNvZGUpIHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKGluc3Qua2luZC5vcGNvZGUpIHsKICAg
ICAgICAgICAgICAgICBjYXNlIEVudHJ5U3dpdGNoOgogICAgICAgICAgICAgICAgICAgICBWQUxJ
REFURShibG9jay0+bnVtU3VjY2Vzc29ycygpID09IG1fY29kZS5wcm9jKCkubnVtRW50cnlwb2lu
dHMoKSwgKCJBdCAiLCBpbnN0LCAiIGluICIsICpibG9jaykpOwogICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFNodWZmbGU6CisgICAgICAgICAgICAgICAg
ICAgIC8vIFdlIGNhbid0IGhhbmRsZSB0cmFwcGluZyBzaHVmZmxlcyBiZWNhdXNlIG9mIGhvdyB3
ZSBsb3dlciB0aGVtLiBUaGF0IGNvdWxkCisgICAgICAgICAgICAgICAgICAgIC8vIGJlIGZpeGVk
IHRob3VnaC4KKyAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoIWluc3Qua2luZC50cmFwcywg
KCJBdCAiLCBpbnN0LCAiIGluICIsICpibG9jaykpOworICAgICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL29w
Y29kZV9nZW5lcmF0b3IucmIKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9vcGNvZGVfZ2VuZXJhdG9yLnJiCShyZXZpc2lvbiAyMDY2MTApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL29wY29kZV9nZW5lcmF0b3IucmIJKHdvcmtpbmcgY29weSkKQEAg
LTU0NSw3ICs1NDUsNyBAQCBkZWYgbWF0Y2hGb3JtcyhvdXRwLCBzcGVlZCwgZm9ybXMsIGNvbHVt
CiBlbmQKIAogZGVmIG1hdGNoSW5zdE92ZXJsb2FkKG91dHAsIHNwZWVkLCBpbnN0KQotICAgIG91
dHAucHV0cyAic3dpdGNoICgje2luc3R9LT5vcGNvZGUpIHsiCisgICAgb3V0cC5wdXRzICJzd2l0
Y2ggKCN7aW5zdH0tPmtpbmQub3Bjb2RlKSB7IgogICAgICRvcGNvZGVzLnZhbHVlcy5lYWNoIHsK
ICAgICAgICAgfCBvcGNvZGUgfAogICAgICAgICBvdXRwLnB1dHMgImNhc2UgI3tvcGNvZGUubmFt
ZX06IgpAQCAtODM2LDcgKzgzNiw3IEBAIHdyaXRlSCgiT3Bjb2RlR2VuZXJhdGVkIikgewogCiAg
ICAgb3V0cC5wdXRzICJib29sIEluc3Q6OmFkbWl0c1N0YWNrKHVuc2lnbmVkIGFyZ0luZGV4KSIK
ICAgICBvdXRwLnB1dHMgInsiCi0gICAgb3V0cC5wdXRzICJzd2l0Y2ggKG9wY29kZSkgeyIKKyAg
ICBvdXRwLnB1dHMgInN3aXRjaCAoa2luZC5vcGNvZGUpIHsiCiAgICAgJG9wY29kZXMudmFsdWVz
LmVhY2ggewogICAgICAgICB8IG9wY29kZSB8CiAgICAgICAgIG91dHAucHV0cyAiY2FzZSAje29w
Y29kZS5uYW1lfToiCkBAIC05NzgsNyArOTc4LDcgQEAgd3JpdGVIKCJPcGNvZGVHZW5lcmF0ZWQi
KSB7CiAKICAgICBvdXRwLnB1dHMgImJvb2wgSW5zdDo6aXNUZXJtaW5hbCgpIgogICAgIG91dHAu
cHV0cyAieyIKLSAgICBvdXRwLnB1dHMgInN3aXRjaCAob3Bjb2RlKSB7IgorICAgIG91dHAucHV0
cyAic3dpdGNoIChraW5kLm9wY29kZSkgeyIKICAgICBmb3VuZFRydWUgPSBmYWxzZQogICAgICRv
cGNvZGVzLnZhbHVlcy5lYWNoIHsKICAgICAgICAgfCBvcGNvZGUgfApAQCAtMTAwNCw3ICsxMDA0
LDkgQEAgd3JpdGVIKCJPcGNvZGVHZW5lcmF0ZWQiKSB7CiAgICAgCiAgICAgb3V0cC5wdXRzICJi
b29sIEluc3Q6Omhhc05vbkFyZ05vbkNvbnRyb2xFZmZlY3RzKCkiCiAgICAgb3V0cC5wdXRzICJ7
IgotICAgIG91dHAucHV0cyAic3dpdGNoIChvcGNvZGUpIHsiCisgICAgb3V0cC5wdXRzICJpZiAo
a2luZC50cmFwcykiCisgICAgb3V0cC5wdXRzICJyZXR1cm4gdHJ1ZTsiCisgICAgb3V0cC5wdXRz
ICJzd2l0Y2ggKGtpbmQub3Bjb2RlKSB7IgogICAgIGZvdW5kVHJ1ZSA9IGZhbHNlCiAgICAgJG9w
Y29kZXMudmFsdWVzLmVhY2ggewogICAgICAgICB8IG9wY29kZSB8CkBAIC0xMDMwLDcgKzEwMzIs
OSBAQCB3cml0ZUgoIk9wY29kZUdlbmVyYXRlZCIpIHsKICAgICAKICAgICBvdXRwLnB1dHMgImJv
b2wgSW5zdDo6aGFzTm9uQXJnRWZmZWN0cygpIgogICAgIG91dHAucHV0cyAieyIKLSAgICBvdXRw
LnB1dHMgInN3aXRjaCAob3Bjb2RlKSB7IgorICAgIG91dHAucHV0cyAiaWYgKGtpbmQudHJhcHMp
IgorICAgIG91dHAucHV0cyAicmV0dXJuIHRydWU7IgorICAgIG91dHAucHV0cyAic3dpdGNoIChr
aW5kLm9wY29kZSkgeyIKICAgICBmb3VuZFRydWUgPSBmYWxzZQogICAgICRvcGNvZGVzLnZhbHVl
cy5lYWNoIHsKICAgICAgICAgfCBvcGNvZGUgfApJbmRleDogU291cmNlL1dURi9DaGFuZ2VMb2cK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNjYxMCkKKysr
IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIw
MTYtMDktMjkgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBBaXIg
c2hvdWxkIGhhdmUgYSB3YXkgb2YgZXhwcmVzc2luZyBhZGRpdGlvbmFsIGluc3RydWN0aW9uIGZs
YWdzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjI2
OTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHd0
Zi9Db21tYVByaW50ZXIuaDoKKyAgICAgICAgKFdURjo6Q29tbWFQcmludGVyOjpDb21tYVByaW50
ZXIpOgorICAgICAgICAoV1RGOjpDb21tYVByaW50ZXI6OmR1bXApOgorICAgICAgICAoV1RGOjpD
b21tYVByaW50ZXI6OmRpZFByaW50KToKKwogMjAxNi0wOS0yOSAgTWFyayBMYW0gIDxtYXJrLmxh
bUBhcHBsZS5jb20+CiAKICAgICAgICAgUmUtZW5hYmxlIFN0cmluZ1ZpZXcgbGlmZS1jeWNsZSBj
aGVja2luZy4KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0NvbW1hUHJpbnRlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XVEYvd3RmL0NvbW1hUHJpbnRlci5oCShyZXZpc2lvbiAyMDY2MTApCisrKyBT
b3VyY2UvV1RGL3d0Zi9Db21tYVByaW50ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzIsMjUgKzMyLDMw
IEBAIG5hbWVzcGFjZSBXVEYgewogCiBjbGFzcyBDb21tYVByaW50ZXIgewogcHVibGljOgotICAg
IENvbW1hUHJpbnRlcihjb25zdCBjaGFyKiBjb21tYSA9ICIsICIpCisgICAgQ29tbWFQcmludGVy
KGNvbnN0IGNoYXIqIGNvbW1hID0gIiwgIiwgY29uc3QgY2hhciogc3RhcnQgPSAiIikKICAgICAg
ICAgOiBtX2NvbW1hKGNvbW1hKQotICAgICAgICAsIG1faXNGaXJzdCh0cnVlKQorICAgICAgICAs
IG1fc3RhcnQoc3RhcnQpCisgICAgICAgICwgbV9kaWRQcmludChmYWxzZSkKICAgICB7CiAgICAg
fQogICAgIAogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogICAgIHsKLSAg
ICAgICAgaWYgKG1faXNGaXJzdCkgewotICAgICAgICAgICAgbV9pc0ZpcnN0ID0gZmFsc2U7Cisg
ICAgICAgIGlmICghbV9kaWRQcmludCkgeworICAgICAgICAgICAgb3V0LnByaW50KG1fc3RhcnQp
OworICAgICAgICAgICAgbV9kaWRQcmludCA9IHRydWU7CiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIG91dC5wcmludChtX2NvbW1hKTsKICAgICB9CiAg
ICAgCisgICAgYm9vbCBkaWRQcmludCgpIGNvbnN0IHsgcmV0dXJuIG1fZGlkUHJpbnQ7IH0KKyAg
ICAKIHByaXZhdGU6CiAgICAgY29uc3QgY2hhciogbV9jb21tYTsKLSAgICBtdXRhYmxlIGJvb2wg
bV9pc0ZpcnN0OworICAgIGNvbnN0IGNoYXIqIG1fc3RhcnQ7CisgICAgbXV0YWJsZSBib29sIG1f
ZGlkUHJpbnQ7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXVEYK
</data>
<flag name="review"
          id="313453"
          type_id="1"
          status="+"
          setter="mark.lam"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>290340</attachid>
            <date>2016-09-30 09:49:44 -0700</date>
            <delta_ts>2016-09-30 09:53:01 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>49756</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjA2NjE5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk0IEBA
CisyMDE2LTA5LTI5ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
QWlyIHNob3VsZCBoYXZlIGEgd2F5IG9mIGV4cHJlc3NpbmcgYWRkaXRpb25hbCBpbnN0cnVjdGlv
biBmbGFncworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTYyNjk5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTWFyayBMYW0uCisgICAgICAgIAorICAgICAg
ICBUaGlzIGZvbGxvd3MgYSBzaW1pbGFyIGNoYW5nZSBpbiBCMyAocjIwNjU5NSkgYW5kIHJlcGxh
Y2VzIEFpcjo6T3Bjb2RlIHdpdGggQWlyOjpLaW5kLAorICAgICAgICB3aGljaCBob2xkcyBvbnRv
IHRoZSBvcGNvZGUgYW5kIHNvbWUgYWRkaXRpb25hbCBmbGFncy4gQmVjYXVzZSBBaXIgaXMgYW4g
b3J0aG9nb25hbCBJU0EKKyAgICAgICAgKHRoZSBvcGNvZGUgdGVsbHMgeW91IHdoYXQgdGhlIG9w
ZXJhdGlvbiBkb2VzIGJ1dCBlYWNoIG9wZXJhbmQgaXMgYWxsb3dlZCB0byBhbHNvIGNvbnRhaW4K
KyAgICAgICAgZWZmZWN0aXZlbHkgaW5zdHJ1Y3Rpb25zIGZvciB3aGF0IHRvIGRvIHRvIHJlYWQg
b3Igd3JpdGUgdGhhdCBvcGVyYW5kKSwgdGhlIGZsYWdzIGFyZQorICAgICAgICBtZWFudCB0byBi
ZSBvcnRob2dvbmFsIHRvIG9wY29kZS4gVGhpcyBhbGxvd3MgdXMgdG8gc2F5IHRoaW5ncyBsaWtl
IEFkZDMyPFRyYXA+LCB3aGljaAorICAgICAgICBtYWtlcyBzZW5zZSBpZiBhbnkgb2YgdGhlIG9w
ZXJhbmRzIHRvIHRoZSBBZGQzMiBhcmUgYWRkcmVzc2VzLgorICAgICAgICAKKyAgICAgICAgVG8g
ZGVtb25zdHJhdGUgdGhlIGZsYWdzIGZhY2lsaXR5IHRoaXMgcGFydGx5IGFkZHMgYSB0cmFwIGZs
YWcgdG8gQWlyLiBCMyBkb2Vzbid0IHVzZSBpdAorICAgICAgICB5ZXQsIGJ1dCBJIG1hZGUgc3Vy
ZSB0aGF0IEFpciByZXNwZWN0cyBpdC4gQmFzaWNhbGx5IHRoYXQgbWVhbnMgYmxvY2tpbmcgRENF
IHdoZW4gdGhlIGZsYWcKKyAgICAgICAgaXMgc2V0LCBieSBtYWtpbmcgaXQgaW1wbHkgaGFzTm9u
QXJnTm9uQ29udHJvbEVmZmVjdHMuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAg
ICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAq
IGIzL0IzQ2hlY2tTcGVjaWFsLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6bnVtQjNBcmdz
KToKKyAgICAgICAgKEpTQzo6QjM6OkNoZWNrU3BlY2lhbDo6S2V5OjpLZXkpOgorICAgICAgICAo
SlNDOjpCMzo6Q2hlY2tTcGVjaWFsOjpLZXk6OmR1bXApOgorICAgICAgICAoSlNDOjpCMzo6Q2hl
Y2tTcGVjaWFsOjpDaGVja1NwZWNpYWwpOgorICAgICAgICAoSlNDOjpCMzo6Q2hlY2tTcGVjaWFs
OjpoaWRkZW5CcmFuY2gpOgorICAgICAgICAoSlNDOjpCMzo6Q2hlY2tTcGVjaWFsOjpmb3JFYWNo
QXJnKToKKyAgICAgICAgKEpTQzo6QjM6OkNoZWNrU3BlY2lhbDo6Z2VuZXJhdGUpOgorICAgICAg
ICAoSlNDOjpCMzo6Q2hlY2tTcGVjaWFsOjpkdW1wSW1wbCk6CisgICAgICAgIChKU0M6OkIzOjpD
aGVja1NwZWNpYWw6OmRlZXBEdW1wSW1wbCk6CisgICAgICAgICogYjMvQjNDaGVja1NwZWNpYWwu
aDoKKyAgICAgICAgKEpTQzo6QjM6OkNoZWNrU3BlY2lhbDo6S2V5OjpLZXkpOgorICAgICAgICAo
SlNDOjpCMzo6Q2hlY2tTcGVjaWFsOjpLZXk6Om9wZXJhdG9yPT0pOgorICAgICAgICAoSlNDOjpC
Mzo6Q2hlY2tTcGVjaWFsOjpLZXk6OmtpbmQpOgorICAgICAgICAoSlNDOjpCMzo6Q2hlY2tTcGVj
aWFsOjpLZXk6Omhhc2gpOgorICAgICAgICAoSlNDOjpCMzo6Q2hlY2tTcGVjaWFsOjpLZXk6Om9w
Y29kZSk6IERlbGV0ZWQuCisgICAgICAgICogYjMvQjNLaW5kLmNwcDoKKyAgICAgICAgKEpTQzo6
QjM6OktpbmQ6OmR1bXApOgorICAgICAgICAqIGIzL2Fpci9BaXJEdW1wQXNKUy5jcHA6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6OmR1bXBBc0pTKToKKyAgICAgICAgKiBiMy9haXIvQWlyRml4T2J2
aW91c1NwaWxscy5jcHA6CisgICAgICAgICogYjMvYWlyL0FpckZpeFBhcnRpYWxSZWdpc3RlclN0
YWxscy5jcHA6CisgICAgICAgICogYjMvYWlyL0FpckdlbmVyYXRlLmNwcDoKKyAgICAgICAgKEpT
Qzo6QjM6OkFpcjo6Z2VuZXJhdGUpOgorICAgICAgICAqIGIzL2Fpci9BaXJIYW5kbGVDYWxsZWVT
YXZlcy5jcHA6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OmhhbmRsZUNhbGxlZVNhdmVzKToKKyAg
ICAgICAgKiBiMy9haXIvQWlySW5zdC5jcHA6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okluc3Q6
OmpzSGFzaCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okluc3Q6OmR1bXApOgorICAgICAgICAq
IGIzL2Fpci9BaXJJbnN0Lmg6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okluc3Q6Okluc3QpOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpJbnN0OjpraW5kKToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6SW5zdDo6b3BlcmF0b3IgYm9vbCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okluc3Q6Om9w
Y29kZSk6IERlbGV0ZWQuCisgICAgICAgICogYjMvYWlyL0Fpckluc3RJbmxpbmVzLmg6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6Okluc3Q6OmV4dHJhQ2xvYmJlcmVkUmVncyk6CisgICAgICAgIChK
U0M6OkIzOjpBaXI6Okluc3Q6OmV4dHJhRWFybHlDbG9iYmVyZWRSZWdzKToKKyAgICAgICAgKEpT
Qzo6QjM6OkFpcjo6SW5zdDo6Zm9yRWFjaERlZldpdGhFeHRyYUNsb2JiZXJlZFJlZ3MpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpJbnN0OjpyZXBvcnRVc2VkUmVnaXN0ZXJzKToKKyAgICAgICAg
KEpTQzo6QjM6OkFpcjo6SW5zdDo6c2hvdWxkVHJ5QWxpYXNpbmdEZWYpOgorICAgICAgICAqIGIz
L2Fpci9BaXJJdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZy5jcHA6CisgICAgICAgICogYjMvYWly
L0FpcktpbmQuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6S2luZDo6ZHVtcCk6
CisgICAgICAgICogYjMvYWlyL0FpcktpbmQuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpB
aXI6OktpbmQ6OktpbmQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpLaW5kOjpvcGVyYXRvcj09
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6S2luZDo6b3BlcmF0b3IhPSk6CisgICAgICAgIChK
U0M6OkIzOjpBaXI6OktpbmQ6Omhhc2gpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpLaW5kOjpv
cGVyYXRvciBib29sKToKKyAgICAgICAgKiBiMy9haXIvQWlyTG93ZXJBZnRlclJlZ0FsbG9jLmNw
cDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6bG93ZXJBZnRlclJlZ0FsbG9jKToKKyAgICAgICAg
KiBiMy9haXIvQWlyTG93ZXJFbnRyeVN3aXRjaC5jcHA6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
Omxvd2VyRW50cnlTd2l0Y2gpOgorICAgICAgICAqIGIzL2Fpci9BaXJMb3dlck1hY3Jvcy5jcHA6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6Omxvd2VyTWFjcm9zKToKKyAgICAgICAgKiBiMy9haXIv
QWlyT3B0aW1pemVCbG9ja09yZGVyLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6b3B0aW1p
emVCbG9ja09yZGVyKToKKyAgICAgICAgKiBiMy9haXIvQWlyUmVwb3J0VXNlZFJlZ2lzdGVycy5j
cHA6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OnJlcG9ydFVzZWRSZWdpc3RlcnMpOgorICAgICAg
ICAqIGIzL2Fpci9BaXJTaW1wbGlmeUNGRy5jcHA6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OnNp
bXBsaWZ5Q0ZHKToKKyAgICAgICAgKiBiMy9haXIvQWlyVG1wV2lkdGguY3BwOgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpUbXBXaWR0aDo6cmVjb21wdXRlKToKKyAgICAgICAgKiBiMy9haXIvQWly
VXNlQ291bnRzLmg6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlVzZUNvdW50czo6VXNlQ291bnRz
KToKKyAgICAgICAgKiBiMy9haXIvQWlyVmFsaWRhdGUuY3BwOgorICAgICAgICAqIGIzL2Fpci9v
cGNvZGVfZ2VuZXJhdG9yLnJiOgorICAgICAgICAqIGIzL3Rlc3RiMy5jcHA6CisgICAgICAgIChK
U0M6OkIzOjp0ZXN0VGVybmFyeVN1Ykluc3RydWN0aW9uU2VsZWN0aW9uKToKKyAgICAgICAgKEpT
Qzo6QjM6OnRlc3RCcmFuY2hCaXRBbmRJbW1GdXNpb24pOgorCiAyMDE2LTA5LTI5ICBKb3NlcGgg
UGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CiAKICAgICAgICAgQXJyb3cgZnVuY3Rpb25z
IGRvIG5vdCBpbmZlciBuYW1lIGZyb20gY29tcHV0ZWQgcHJvcGVydHkgYnV0IG5vcm1hbCBmdW5j
dGlvbnMgZG8KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9u
IDIwNjYxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2lu
ZyBjb3B5KQpAQCAtODgsNiArODgsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAg
IGIzL2Fpci9BaXJJbnNlcnRpb25TZXQuY3BwCiAgICAgYjMvYWlyL0Fpckluc3QuY3BwCiAgICAg
YjMvYWlyL0Fpckl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nLmNwcAorICAgIGIzL2Fpci9BaXJL
aW5kLmNwcAogICAgIGIzL2Fpci9BaXJMb2dSZWdpc3RlclByZXNzdXJlLmNwcAogICAgIGIzL2Fp
ci9BaXJMb3dlckFmdGVyUmVnQWxsb2MuY3BwCiAgICAgYjMvYWlyL0Fpckxvd2VyRW50cnlTd2l0
Y2guY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjA2NjEw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTcyOCw2ICs3MjgsOCBAQAogCQkwRkREQkZC
NjE2NjZFRURBMDBDNTVGRUYgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEREJGQjMxNjY2RUVENTAw
QzU1RkVGIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuaCAqLzsgfTsKIAkJMEZERjY3RDIx
RDlDNkQyNzAwMUI5ODI1IC8qIEIzS2luZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZERjY3RDExRDlDNjA4NjAwMUI5ODI1IC8qIEIzS2luZC5oICov
OyB9OwogCQkwRkRGNjdEMzFEOUM2RDJBMDAxQjk4MjUgLyogQjNLaW5kLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGREY2N0QwMUQ5QzYwODYwMDFC
OTgyNSAvKiBCM0tpbmQuY3BwICovOyB9OworCQkwRkRGNjdENjFEOURDNDQwMDAxQjk4MjUgLyog
QWlyS2luZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkRGNjdENDFEOURDNDNFMDAxQjk4MjUgLyogQWlyS2luZC5jcHAgKi87IH07CisJCTBGREY2
N0Q3MUQ5REM0NDIwMDFCOTgyNSAvKiBBaXJLaW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkRGNjdENTFEOURDNDNFMDAxQjk4MjUgLyogQWlyS2lu
ZC5oICovOyB9OwogCQkwRkRGNzA4NTFEM0YyQzIyMDA5Mjc0NDkgLyogQWlyTG93ZXJFbnRyeVN3
aXRjaC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkRGNzA4MzFEM0YyQzFGMDA5Mjc0NDkgLyogQWlyTG93ZXJFbnRyeVN3aXRjaC5jcHAgKi87IH07
CiAJCTBGREY3MDg2MUQzRjJDMjUwMDkyNzQ0OSAvKiBBaXJMb3dlckVudHJ5U3dpdGNoLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkRGNzA4NDFEM0Yy
QzFGMDA5Mjc0NDkgLyogQWlyTG93ZXJFbnRyeVN3aXRjaC5oICovOyB9OwogCQkwRkUwNTAxNDFB
QTkwOTExMDBEMzNCMzMgLyogQXJndW1lbnRzTW9kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFMDUwMEMxQUE5MDkxMTAwRDMzQjMzIC8qIEFyZ3Vt
ZW50c01vZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwpAQCAtMjk4Nyw2ICsyOTg5LDggQEAKIAkJMEZEREJGQjMxNjY2RUVENTAwQzU1RkVGIC8qIERG
R1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oOyBwYXRoID0gZGZnL0RGR1ZhcmlhYmxlQWNj
ZXNzRGF0YUR1bXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZERjY3RDAxRDlD
NjA4NjAwMUI5ODI1IC8qIEIzS2luZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBCM0tpbmQuY3BwOyBwYXRoID0gYjMvQjNLaW5kLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEZERjY3RDExRDlDNjA4NjAwMUI5ODI1IC8qIEIzS2luZC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0tpbmQuaDsgcGF0aCA9IGIzL0IzS2luZC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkRGNjdENDFEOURDNDNFMDAxQjk4MjUg
LyogQWlyS2luZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJL
aW5kLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJLaW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEZERjY3RDUxRDlEQzQzRTAwMUI5ODI1IC8qIEFpcktpbmQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyS2luZC5oOyBwYXRoID0gYjMvYWlyL0FpcktpbmQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZERjcwODMxRDNGMkMxRjAwOTI3NDQ5
IC8qIEFpckxvd2VyRW50cnlTd2l0Y2guY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBuYW1lID0gQWlyTG93ZXJFbnRyeVN3aXRjaC5jcHA7IHBhdGggPSBiMy9haXIvQWlyTG93ZXJF
bnRyeVN3aXRjaC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGREY3MDg0MUQz
RjJDMUYwMDkyNzQ0OSAvKiBBaXJMb3dlckVudHJ5U3dpdGNoLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IEFpckxvd2VyRW50cnlTd2l0Y2guaDsgcGF0aCA9IGIzL2Fpci9BaXJM
b3dlckVudHJ5U3dpdGNoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRTA1MDBD
MUFBOTA5MTEwMEQzM0IzMyAvKiBBcmd1bWVudHNNb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEFyZ3VtZW50c01vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTUwMTMsNiArNTAxNyw4IEBACiAJCQkJMEZFQzg1NUMxQkRBQ0RDNzAwODBGRjc0IC8qIEFp
ckluc3RJbmxpbmVzLmggKi8sCiAJCQkJMjY3MThCQTIxQkU5OUY3ODAwNTIwMTdCIC8qIEFpckl0
ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nLmNwcCAqLywKIAkJCQkyNjcxOEJBMzFCRTk5Rjc4MDA1
MjAxN0IgLyogQWlySXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmcuaCAqLywKKwkJCQkwRkRGNjdE
NDFEOURDNDNFMDAxQjk4MjUgLyogQWlyS2luZC5jcHAgKi8sCisJCQkJMEZERjY3RDUxRDlEQzQz
RTAwMUI5ODI1IC8qIEFpcktpbmQuaCAqLywKIAkJCQkyNjg0RDQzNzFDMDAxNjFDMDA4MUQ2NjMg
LyogQWlyTGl2ZW5lc3MuaCAqLywKIAkJCQkwRkUzNEMxNzFDNEIzOUFFMDAwM0E1MTIgLyogQWly
TG9nUmVnaXN0ZXJQcmVzc3VyZS5jcHAgKi8sCiAJCQkJMEZFMzRDMTgxQzRCMzlBRTAwMDNBNTEy
IC8qIEFpckxvZ1JlZ2lzdGVyUHJlc3N1cmUuaCAqLywKQEAgLTc1NTksNiArNzU2NSw3IEBACiAJ
CQkJQTdEODlDRkUxN0EwQjhDQzAwNzczQUQ4IC8qIERGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lz
UGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRDgyRTU3MTQxREFGMTAwMDE3OUM5NCAvKiBE
RkdPU1JFbnRyeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY0MEU0QTcxQzQ5N0Y3NDAwQTU3N0ZB
IC8qIEFpck9wY29kZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZERjY3RDcxRDlEQzQ0MjAwMUI5
ODI1IC8qIEFpcktpbmQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRDhBMzI2MTdENTFGNTcwMENB
MkM0MCAvKiBERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEZDMDk3NkExNDY4QTZGNzAwQ0YyNDQyIC8qIERGR09TUkV4aXQuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGMjM1QkVDMTcxNzhFNzMwMDY5MEM3RiAvKiBERkdPU1JFeGl0QmFzZS5oIGluIEhl
YWRlcnMgKi8sCkBAIC04OTI4LDYgKzg5MzUsNyBAQAogCQkJCTBGNDU3MDM4MUJFNDRDOTEwMDYy
QTYyOSAvKiBBaXJFbGltaW5hdGVEZWFkQ29kZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0M0FC
MjZDNzFDMUE1MzVDMDBEODJBRTYgLyogQjNNYXRoRXh0cmFzLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGRUM4NTc4MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJHZW5lcmF0ZS5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQkwRkRGNjdENjFEOURDNDQwMDAxQjk4MjUgLyogQWlyS2luZC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRkVDODU5MzFCREIxRTEwMDA4MEZGNzQgLyogQWlyR2VuZXJhdGVkLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTUzNDg2QkJCMUMxOEU4NDUwMEY2RjNBRiAvKiBKU1R5cGVk
QXJyYXkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFQzg1N0IxQkRBQ0RDNzAwODBGRjc0IC8q
IEFpckhhbmRsZUNhbGxlZVNhdmVzLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tTcGVjaWFsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1NwZWNpYWwuY3BwCShyZXZpc2lvbiAyMDY2MTApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1NwZWNpYWwuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00MCw5ICs0MCw5IEBAIHVzaW5nIG5hbWVzcGFjZSBBaXI7CiAKIG5hbWVzcGFjZSB7
CiAKLXVuc2lnbmVkIG51bUIzQXJncyhCMzo6T3Bjb2RlIG9wY29kZSkKK3Vuc2lnbmVkIG51bUIz
QXJncyhCMzo6S2luZCBraW5kKQogewotICAgIHN3aXRjaCAob3Bjb2RlKSB7CisgICAgc3dpdGNo
IChraW5kLm9wY29kZSgpKSB7CiAgICAgY2FzZSBDaGVja0FkZDoKICAgICBjYXNlIENoZWNrU3Vi
OgogICAgIGNhc2UgQ2hlY2tNdWw6CkBAIC01Nyw3ICs1Nyw3IEBAIHVuc2lnbmVkIG51bUIzQXJn
cyhCMzo6T3Bjb2RlIG9wY29kZSkKIAogdW5zaWduZWQgbnVtQjNBcmdzKFZhbHVlKiB2YWx1ZSkK
IHsKLSAgICByZXR1cm4gbnVtQjNBcmdzKHZhbHVlLT5vcGNvZGUoKSk7CisgICAgcmV0dXJuIG51
bUIzQXJncyh2YWx1ZS0+a2luZCgpKTsKIH0KIAogdW5zaWduZWQgbnVtQjNBcmdzKEluc3QmIGlu
c3QpCkBAIC02OSwyNiArNjksMjYgQEAgdW5zaWduZWQgbnVtQjNBcmdzKEluc3QmIGluc3QpCiAK
IENoZWNrU3BlY2lhbDo6S2V5OjpLZXkoY29uc3QgSW5zdCYgaW5zdCkKIHsKLSAgICBtX29wY29k
ZSA9IGluc3Qub3Bjb2RlOworICAgIG1fa2luZCA9IGluc3Qua2luZDsKICAgICBtX251bUFyZ3Mg
PSBpbnN0LmFyZ3Muc2l6ZSgpOwogICAgIG1fc3RhY2ttYXBSb2xlID0gU2FtZUFzUmVwOwogfQog
CiB2b2lkIENoZWNrU3BlY2lhbDo6S2V5OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7
Ci0gICAgb3V0LnByaW50KG1fb3Bjb2RlLCAiKCIsIG1fbnVtQXJncywgIiwiLCBtX3N0YWNrbWFw
Um9sZSwgIikiKTsKKyAgICBvdXQucHJpbnQobV9raW5kLCAiKCIsIG1fbnVtQXJncywgIiwiLCBt
X3N0YWNrbWFwUm9sZSwgIikiKTsKIH0KIAotQ2hlY2tTcGVjaWFsOjpDaGVja1NwZWNpYWwoQWly
OjpPcGNvZGUgb3Bjb2RlLCB1bnNpZ25lZCBudW1BcmdzLCBSb2xlTW9kZSBzdGFja21hcFJvbGUp
Ci0gICAgOiBtX2NoZWNrT3Bjb2RlKG9wY29kZSkKK0NoZWNrU3BlY2lhbDo6Q2hlY2tTcGVjaWFs
KEFpcjo6S2luZCBraW5kLCB1bnNpZ25lZCBudW1BcmdzLCBSb2xlTW9kZSBzdGFja21hcFJvbGUp
CisgICAgOiBtX2NoZWNrS2luZChraW5kKQogICAgICwgbV9zdGFja21hcFJvbGUoc3RhY2ttYXBS
b2xlKQogICAgICwgbV9udW1DaGVja0FyZ3MobnVtQXJncykKIHsKLSAgICBBU1NFUlQoaXNEZWZp
bml0ZWx5VGVybWluYWwob3Bjb2RlKSk7CisgICAgQVNTRVJUKGlzRGVmaW5pdGVseVRlcm1pbmFs
KGtpbmQub3Bjb2RlKSk7CiB9CiAKIENoZWNrU3BlY2lhbDo6Q2hlY2tTcGVjaWFsKGNvbnN0IENo
ZWNrU3BlY2lhbDo6S2V5JiBrZXkpCi0gICAgOiBDaGVja1NwZWNpYWwoa2V5Lm9wY29kZSgpLCBr
ZXkubnVtQXJncygpLCBrZXkuc3RhY2ttYXBSb2xlKCkpCisgICAgOiBDaGVja1NwZWNpYWwoa2V5
LmtpbmQoKSwga2V5Lm51bUFyZ3MoKSwga2V5LnN0YWNrbWFwUm9sZSgpKQogewogfQogCkBAIC05
OCw3ICs5OCw3IEBAIENoZWNrU3BlY2lhbDo6fkNoZWNrU3BlY2lhbCgpCiAKIEluc3QgQ2hlY2tT
cGVjaWFsOjpoaWRkZW5CcmFuY2goY29uc3QgSW5zdCYgaW5zdCkgY29uc3QKIHsKLSAgICBJbnN0
IGhpZGRlbkJyYW5jaChtX2NoZWNrT3Bjb2RlLCBpbnN0Lm9yaWdpbik7CisgICAgSW5zdCBoaWRk
ZW5CcmFuY2gobV9jaGVja0tpbmQsIGluc3Qub3JpZ2luKTsKICAgICBoaWRkZW5CcmFuY2guYXJn
cy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fbnVtQ2hlY2tBcmdzKTsKICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbV9udW1DaGVja0FyZ3M7ICsraSkKICAgICAgICAgaGlkZGVuQnJhbmNo
LmFyZ3MuYXBwZW5kKGluc3QuYXJnc1tpICsgMV0pOwpAQCAtMTE2LDcgKzExNiw3IEBAIHZvaWQg
Q2hlY2tTcGVjaWFsOjpmb3JFYWNoQXJnKEluc3QmIGluc3QKICAgICAgICAgfSk7CiAKICAgICBP
cHRpb25hbDx1bnNpZ25lZD4gZmlyc3RSZWNvdmVyYWJsZUluZGV4OwotICAgIGlmIChtX2NoZWNr
T3Bjb2RlID09IEJyYW5jaEFkZDMyIHx8IG1fY2hlY2tPcGNvZGUgPT0gQnJhbmNoQWRkNjQpCisg
ICAgaWYgKG1fY2hlY2tLaW5kLm9wY29kZSA9PSBCcmFuY2hBZGQzMiB8fCBtX2NoZWNrS2luZC5v
cGNvZGUgPT0gQnJhbmNoQWRkNjQpCiAgICAgICAgIGZpcnN0UmVjb3ZlcmFibGVJbmRleCA9IDE7
CiAgICAgZm9yRWFjaEFyZ0ltcGwobnVtQjNBcmdzKGluc3QpLCBtX251bUNoZWNrQXJncyArIDEs
IGluc3QsIG1fc3RhY2ttYXBSb2xlLCBmaXJzdFJlY292ZXJhYmxlSW5kZXgsIGNhbGxiYWNrKTsK
IH0KQEAgLTE2NCw3ICsxNjQsNyBAQCBDQ2FsbEhlbHBlcnM6Okp1bXAgQ2hlY2tTcGVjaWFsOjpn
ZW5lcmF0CiAgICAgICAgICAgICAgICAgZmFpbC5saW5rKCZqaXQpOwogCiAgICAgICAgICAgICAg
ICAgLy8gSWYgbmVjZXNzYXJ5LCB1bmRvIHRoZSBvcGVyYXRpb24uCi0gICAgICAgICAgICAgICAg
c3dpdGNoIChtX2NoZWNrT3Bjb2RlKSB7CisgICAgICAgICAgICAgICAgc3dpdGNoIChtX2NoZWNr
S2luZC5vcGNvZGUpIHsKICAgICAgICAgICAgICAgICBjYXNlIEJyYW5jaEFkZDMyOgogICAgICAg
ICAgICAgICAgICAgICBpZiAoKG1fbnVtQ2hlY2tBcmdzID09IDQgJiYgYXJnc1sxXSA9PSBhcmdz
WzJdICYmIGFyZ3NbMl0gPT0gYXJnc1szXSkKICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICht
X251bUNoZWNrQXJncyA9PSAzICYmIGFyZ3NbMV0gPT0gYXJnc1syXSkpIHsKQEAgLTIzNSwxMiAr
MjM1LDEyIEBAIENDYWxsSGVscGVyczo6SnVtcCBDaGVja1NwZWNpYWw6OmdlbmVyYXQKIAogdm9p
ZCBDaGVja1NwZWNpYWw6OmR1bXBJbXBsKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7Ci0gICAg
b3V0LnByaW50KG1fY2hlY2tPcGNvZGUsICIoIiwgbV9udW1DaGVja0FyZ3MsICIsIiwgbV9zdGFj
a21hcFJvbGUsICIpIik7CisgICAgb3V0LnByaW50KG1fY2hlY2tLaW5kLCAiKCIsIG1fbnVtQ2hl
Y2tBcmdzLCAiLCIsIG1fc3RhY2ttYXBSb2xlLCAiKSIpOwogfQogCiB2b2lkIENoZWNrU3BlY2lh
bDo6ZGVlcER1bXBJbXBsKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7Ci0gICAgb3V0LnByaW50
KCJCMzo6Q2hlY2tWYWx1ZSBsb3dlcmVkIHRvICIsIG1fY2hlY2tPcGNvZGUsICIgd2l0aCAiLCBt
X251bUNoZWNrQXJncywgIiBhcmdzLiIpOworICAgIG91dC5wcmludCgiQjM6OkNoZWNrVmFsdWUg
bG93ZXJlZCB0byAiLCBtX2NoZWNrS2luZCwgIiB3aXRoICIsIG1fbnVtQ2hlY2tBcmdzLCAiIGFy
Z3MuIik7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzQ2hlY2tTcGVjaWFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzQ2hlY2tTcGVjaWFsLmgJKHJldmlzaW9uIDIwNjYxMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrU3BlY2lhbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDcg
KzI4LDcgQEAKICNpZiBFTkFCTEUoQjNfSklUKQogCiAjaW5jbHVkZSAiQWlyQXJnLmgiCi0jaW5j
bHVkZSAiQWlyT3Bjb2RlLmgiCisjaW5jbHVkZSAiQWlyS2luZC5oIgogI2luY2x1ZGUgIkIzU3Rh
Y2ttYXBTcGVjaWFsLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KIApAQCAtNTUsMTQgKzU1
LDEzIEBAIHB1YmxpYzoKICAgICBjbGFzcyBLZXkgewogICAgIHB1YmxpYzoKICAgICAgICAgS2V5
KCkKLSAgICAgICAgICAgIDogbV9vcGNvZGUoQWlyOjpOb3ApCi0gICAgICAgICAgICAsIG1fc3Rh
Y2ttYXBSb2xlKFNhbWVBc1JlcCkKKyAgICAgICAgICAgIDogbV9zdGFja21hcFJvbGUoU2FtZUFz
UmVwKQogICAgICAgICAgICAgLCBtX251bUFyZ3MoMCkKICAgICAgICAgewogICAgICAgICB9CiAg
ICAgICAgIAotICAgICAgICBLZXkoQWlyOjpPcGNvZGUgb3Bjb2RlLCB1bnNpZ25lZCBudW1Bcmdz
LCBSb2xlTW9kZSBzdGFja21hcFJvbGUgPSBTYW1lQXNSZXApCi0gICAgICAgICAgICA6IG1fb3Bj
b2RlKG9wY29kZSkKKyAgICAgICAgS2V5KEFpcjo6S2luZCBraW5kLCB1bnNpZ25lZCBudW1Bcmdz
LCBSb2xlTW9kZSBzdGFja21hcFJvbGUgPSBTYW1lQXNSZXApCisgICAgICAgICAgICA6IG1fa2lu
ZChraW5kKQogICAgICAgICAgICAgLCBtX3N0YWNrbWFwUm9sZShzdGFja21hcFJvbGUpCiAgICAg
ICAgICAgICAsIG1fbnVtQXJncyhudW1BcmdzKQogICAgICAgICB7CkBAIC03Miw3ICs3MSw3IEBA
IHB1YmxpYzoKIAogICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgS2V5JiBvdGhlcikgY29u
c3QKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1fb3Bjb2RlID09IG90aGVyLm1fb3Bj
b2RlCisgICAgICAgICAgICByZXR1cm4gbV9raW5kID09IG90aGVyLm1fa2luZAogICAgICAgICAg
ICAgICAgICYmIG1fbnVtQXJncyA9PSBvdGhlci5tX251bUFyZ3MKICAgICAgICAgICAgICAgICAm
JiBtX3N0YWNrbWFwUm9sZSA9PSBvdGhlci5tX3N0YWNrbWFwUm9sZTsKICAgICAgICAgfQpAQCAt
ODQsMTUgKzgzLDE0IEBAIHB1YmxpYzoKIAogICAgICAgICBleHBsaWNpdCBvcGVyYXRvciBib29s
KCkgY29uc3QgeyByZXR1cm4gKnRoaXMgIT0gS2V5KCk7IH0KIAotICAgICAgICBBaXI6Ok9wY29k
ZSBvcGNvZGUoKSBjb25zdCB7IHJldHVybiBtX29wY29kZTsgfQorICAgICAgICBBaXI6OktpbmQg
a2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQogICAgICAgICB1bnNpZ25lZCBudW1Bcmdz
KCkgY29uc3QgeyByZXR1cm4gbV9udW1BcmdzOyB9CiAgICAgICAgIFJvbGVNb2RlIHN0YWNrbWFw
Um9sZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhY2ttYXBSb2xlOyB9CiAKICAgICAgICAgdm9pZCBk
dW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OwogCiAgICAgICAgIEtleShXVEY6Okhhc2hUYWJs
ZURlbGV0ZWRWYWx1ZVR5cGUpCi0gICAgICAgICAgICA6IG1fb3Bjb2RlKEFpcjo6Tm9wKQotICAg
ICAgICAgICAgLCBtX3N0YWNrbWFwUm9sZShTYW1lQXNSZXApCisgICAgICAgICAgICA6IG1fc3Rh
Y2ttYXBSb2xlKFNhbWVBc1JlcCkKICAgICAgICAgICAgICwgbV9udW1BcmdzKDEpCiAgICAgICAg
IHsKICAgICAgICAgfQpAQCAtMTA1LDE2ICsxMDMsMTYgQEAgcHVibGljOgogICAgICAgICB1bnNp
Z25lZCBoYXNoKCkgY29uc3QKICAgICAgICAgewogICAgICAgICAgICAgLy8gU2VyaW91c2x5LCB3
ZSBkb24ndCBuZWVkIHRvIGJlIHNtYXJ0IGhlcmUuIEl0IGp1c3QgZG9lc24ndCBtYXR0ZXIuCi0g
ICAgICAgICAgICByZXR1cm4gbV9vcGNvZGUgKyBtX251bUFyZ3MgKyBtX3N0YWNrbWFwUm9sZTsK
KyAgICAgICAgICAgIHJldHVybiBtX2tpbmQuaGFzaCgpICsgbV9udW1BcmdzICsgbV9zdGFja21h
cFJvbGU7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgcHJpdmF0ZToKLSAgICAgICAgQWlyOjpP
cGNvZGUgbV9vcGNvZGU7CisgICAgICAgIEFpcjo6S2luZCBtX2tpbmQ7CiAgICAgICAgIFJvbGVN
b2RlIG1fc3RhY2ttYXBSb2xlOwogICAgICAgICB1bnNpZ25lZCBtX251bUFyZ3M7CiAgICAgfTsK
ICAgICAKLSAgICBDaGVja1NwZWNpYWwoQWlyOjpPcGNvZGUsIHVuc2lnbmVkIG51bUFyZ3MsIFJv
bGVNb2RlIHN0YWNrbWFwUm9sZSA9IFNhbWVBc1JlcCk7CisgICAgQ2hlY2tTcGVjaWFsKEFpcjo6
S2luZCwgdW5zaWduZWQgbnVtQXJncywgUm9sZU1vZGUgc3RhY2ttYXBSb2xlID0gU2FtZUFzUmVw
KTsKICAgICBDaGVja1NwZWNpYWwoY29uc3QgS2V5Jik7CiAgICAgfkNoZWNrU3BlY2lhbCgpOwog
CkBAIC0xMzYsNyArMTM0LDcgQEAgcHJvdGVjdGVkOgogICAgIHZvaWQgZGVlcER1bXBJbXBsKFBy
aW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CiAKIHByaXZhdGU6Ci0gICAgQWlyOjpPcGNvZGUg
bV9jaGVja09wY29kZTsKKyAgICBBaXI6OktpbmQgbV9jaGVja0tpbmQ7CiAgICAgUm9sZU1vZGUg
bV9zdGFja21hcFJvbGU7CiAgICAgdW5zaWduZWQgbV9udW1DaGVja0FyZ3M7CiB9OwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzS2luZC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzS2luZC5jcHAJKHJldmlzaW9uIDIwNjYxMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0tpbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxNCAr
MzUsMTIgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CiB2b2lkIEtpbmQ6OmR1bXAo
UHJpbnRTdHJlYW0mIG91dCkgY29uc3QKIHsKICAgICBvdXQucHJpbnQobV9vcGNvZGUpOwotICAg
IGlmICghaGFzRXh0cmFCaXRzKCkpCi0gICAgICAgIHJldHVybjsKICAgICAKLSAgICBDb21tYVBy
aW50ZXIgY29tbWE7Ci0gICAgb3V0LnByaW50KCI8Iik7CisgICAgQ29tbWFQcmludGVyIGNvbW1h
KCIsICIsICI8Iik7CiAgICAgaWYgKGlzQ2hpbGwoKSkKICAgICAgICAgb3V0LnByaW50KGNvbW1h
LCAiQ2hpbGwiKTsKLSAgICBvdXQucHJpbnQoIj4iKTsKKyAgICBpZiAoY29tbWEuZGlkUHJpbnQo
KSkKKyAgICAgICAgb3V0LnByaW50KCI+Iik7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpC
MwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAJKHJldmlzaW9uIDIwNjYxMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yMjE3LDcgKzIyMTcsNyBAQCB2b2lkIHRlc3RUZXJuYXJ5U3ViSW5zdHJ1Y3Rpb25TZWxlY3Rp
b24oCiAgICAgYXV0byBibG9jayA9IHByb2MuY29kZSgpWzBdOwogICAgIHVuc2lnbmVkIG51bWJl
ck9mU3ViSW5zdHJ1Y3Rpb25zID0gMDsKICAgICBmb3IgKGF1dG8gaW5zdHJ1Y3Rpb24gOiAqYmxv
Y2spIHsKLSAgICAgICAgaWYgKGluc3RydWN0aW9uLm9wY29kZSA9PSBleHBlY3RlZE9wY29kZSkg
eworICAgICAgICBpZiAoaW5zdHJ1Y3Rpb24ua2luZC5vcGNvZGUgPT0gZXhwZWN0ZWRPcGNvZGUp
IHsKICAgICAgICAgICAgIENIRUNLX0VRKGluc3RydWN0aW9uLmFyZ3Muc2l6ZSgpLCAzdWwpOwog
ICAgICAgICAgICAgQ0hFQ0tfRVEoaW5zdHJ1Y3Rpb24uYXJnc1swXS5raW5kKCksIEFpcjo6QXJn
OjpUbXApOwogICAgICAgICAgICAgQ0hFQ0tfRVEoaW5zdHJ1Y3Rpb24uYXJnc1sxXS5raW5kKCks
IEFpcjo6QXJnOjpUbXApOwpAQCAtMTI5NzIsNyArMTI5NzIsNyBAQCB2b2lkIHRlc3RCcmFuY2hC
aXRBbmRJbW1GdXNpb24oCiAKICAgICAvLyBUaGUgZmlyc3QgYmFzaWMgYmxvY2sgbXVzdCBlbmQg
aW4gYSBCcmFuY2hUZXN0NjQocmVzQ29uZCwgdG1wLCBiaXRJbW0pLgogICAgIEFpcjo6SW5zdCB0
ZXJtaW5hbCA9IHByb2MuY29kZSgpWzBdLT5sYXN0KCk7Ci0gICAgQ0hFQ0tfRVEodGVybWluYWwu
b3Bjb2RlLCBleHBlY3RlZE9wY29kZSk7CisgICAgQ0hFQ0tfRVEodGVybWluYWwua2luZC5vcGNv
ZGUsIGV4cGVjdGVkT3Bjb2RlKTsKICAgICBDSEVDS19FUSh0ZXJtaW5hbC5hcmdzWzBdLmtpbmQo
KSwgQWlyOjpBcmc6OlJlc0NvbmQpOwogICAgIENIRUNLX0VRKHRlcm1pbmFsLmFyZ3NbMV0ua2lu
ZCgpLCBmaXJzdEtpbmQpOwogICAgIENIRUNLKHRlcm1pbmFsLmFyZ3NbMl0ua2luZCgpID09IEFp
cjo6QXJnOjpCaXRJbW0gfHwgdGVybWluYWwuYXJnc1syXS5raW5kKCkgPT0gQWlyOjpBcmc6OkJp
dEltbTY0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRHVtcEFzSlMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRHVtcEFz
SlMuY3BwCShyZXZpc2lvbiAyMDY2MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpckR1bXBBc0pTLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE4LDcgKzExOCw5IEBAIHZvaWQg
ZHVtcEFzSlMoQ29kZSYgY29kZSwgUHJpbnRTdHJlYW0mIG8KICAgICAgICAgICAgIG91dC5wcmlu
dGxuKHZhck5hbWUoYmxvY2spLCAiLnByZWRlY2Vzc29ycy5wdXNoKCIsIHZhck5hbWUocHJlZGVj
ZXNzb3IpLCAiKTsiKTsKICAgICAgICAgCiAgICAgICAgIGZvciAoSW5zdCYgaW5zdCA6ICpibG9j
aykgewotICAgICAgICAgICAgb3V0LnByaW50bG4oImluc3QgPSBuZXcgSW5zdCgiLCBpbnN0Lm9w
Y29kZSwgIik7Iik7CisgICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgZG8gc29tZXRo
aW5nIGZvciBmbGFncy4KKyAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNjI3NTEKKyAgICAgICAgICAgIG91dC5wcmludGxuKCJpbnN0ID0gbmV3
IEluc3QoIiwgaW5zdC5raW5kLm9wY29kZSwgIik7Iik7CiAgICAgICAgICAgICAKICAgICAgICAg
ICAgIGluc3QuZm9yRWFjaEFyZygKICAgICAgICAgICAgICAgICBbJl0gKEFyZyYgYXJnLCBBcmc6
OlJvbGUsIEFyZzo6VHlwZSwgQXJnOjpXaWR0aCkgewpAQCAtMTk3LDcgKzE5OSw3IEBAIHZvaWQg
ZHVtcEFzSlMoQ29kZSYgY29kZSwgUHJpbnRTdHJlYW0mIG8KICAgICAgICAgICAgICAgICAgICAg
b3V0LnByaW50bG4oImluc3QuYXJncy5wdXNoKGFyZyk7Iik7CiAgICAgICAgICAgICAgICAgfSk7
CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChpbnN0Lm9wY29kZSA9PSBQYXRjaCkgewor
ICAgICAgICAgICAgaWYgKGluc3Qua2luZC5vcGNvZGUgPT0gUGF0Y2gpIHsKICAgICAgICAgICAg
ICAgICBpZiAoaW5zdC5oYXNOb25BcmdFZmZlY3RzKCkpCiAgICAgICAgICAgICAgICAgICAgIG91
dC5wcmludGxuKCJpbnN0LnBhdGNoSGFzTm9uQXJnRWZmZWN0cyA9IHRydWU7Iik7CiAgICAgICAg
ICAgICAgICAgCkBAIC0yMjEsNyArMjIzLDcgQEAgdm9pZCBkdW1wQXNKUyhDb2RlJiBjb2RlLCBQ
cmludFN0cmVhbSYgbwogICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGluc3Qub3Bjb2RlID09IENDYWxsIHx8IGluc3Qu
b3Bjb2RlID09IENvbGRDQ2FsbCkgeworICAgICAgICAgICAgaWYgKGluc3Qua2luZC5vcGNvZGUg
PT0gQ0NhbGwgfHwgaW5zdC5raW5kLm9wY29kZSA9PSBDb2xkQ0NhbGwpIHsKICAgICAgICAgICAg
ICAgICBvdXQucHJpbnRsbigiaW5zdC5jQ2FsbFR5cGUgPSAiLCBpbnN0Lm9yaWdpbi0+dHlwZSgp
KTsKICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiaW5zdC5jQ2FsbEFyZ1R5cGVzID0gW107
Iik7CiAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IGluc3Qub3JpZ2lu
LT5udW1DaGlsZHJlbigpOyArK2kpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpckZpeE9idmlvdXNTcGlsbHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyRml4T2J2aW91c1NwaWxscy5jcHAJKHJldmlzaW9uIDIwNjYxMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRml4T2J2aW91c1NwaWxscy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEyMSw3ICsxMjEsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAg
IG1fc3RhdGUuY2xvYmJlcihhcmcpOwogICAgICAgICAgICAgfSk7CiAKLSAgICAgICAgc3dpdGNo
IChpbnN0Lm9wY29kZSkgeworICAgICAgICBzd2l0Y2ggKGluc3Qua2luZC5vcGNvZGUpIHsKICAg
ICAgICAgY2FzZSBNb3ZlOgogICAgICAgICAgICAgaWYgKGluc3QuYXJnc1swXS5pc1NvbWVJbW0o
KSkgewogICAgICAgICAgICAgICAgIGlmIChpbnN0LmFyZ3NbMV0uaXNSZWcoKSkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRml4UGFydGlhbFJlZ2lzdGVyU3RhbGxzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckZpeFBhcnRp
YWxSZWdpc3RlclN0YWxscy5jcHAJKHJldmlzaW9uIDIwNjYxMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyRml4UGFydGlhbFJlZ2lzdGVyU3RhbGxzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDUsNyArNDUsNyBAQCBuYW1lc3BhY2UgewogCiBib29sIGhhc1BhcnRpYWxYbW1S
ZWdVcGRhdGUoY29uc3QgSW5zdCYgaW5zdCkKIHsKLSAgICBzd2l0Y2ggKGluc3Qub3Bjb2RlKSB7
CisgICAgc3dpdGNoIChpbnN0LmtpbmQub3Bjb2RlKSB7CiAgICAgY2FzZSBDb252ZXJ0RG91Ymxl
VG9GbG9hdDoKICAgICBjYXNlIENvbnZlcnRGbG9hdFRvRG91YmxlOgogICAgIGNhc2UgQ29udmVy
dEludDMyVG9Eb3VibGU6CkBAIC02OCw3ICs2OCw3IEBAIGJvb2wgaGFzUGFydGlhbFhtbVJlZ1Vw
ZGF0ZShjb25zdCBJbnN0JiAKIGJvb2wgaXNEZXBlbmRlbmN5QnJlYWtpbmcoY29uc3QgSW5zdCYg
aW5zdCkKIHsKICAgICAvLyAieG9ycHMgcmVnLCByZWciIGlzIHVzZWQgYnkgdGhlIGZyb250ZW5k
IHRvIHJlbW92ZSB0aGUgZGVwZW5kZW5jeSBvbiBpdHMgYXJndW1lbnQuCi0gICAgcmV0dXJuIGlu
c3Qub3Bjb2RlID09IE1vdmVaZXJvVG9Eb3VibGU7CisgICAgcmV0dXJuIGluc3Qua2luZC5vcGNv
ZGUgPT0gTW92ZVplcm9Ub0RvdWJsZTsKIH0KIAogLy8gRklYTUU6IGZpbmQgYSBnb29kIGRpc3Rh
bmNlIHBlciBhcmNoaXRlY3R1cmUgZXhwZXJpbWVudGFsbHkuCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmNwcAkocmV2aXNpb24gMjA2NjEwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0ZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIyNywxMyArMjI3LDEzIEBAIHZvaWQgZ2VuZXJhdGUoQ29kZSYgY29kZSwgQ0NhbGxI
ZWxwZXJzJiAKIAogICAgICAgICBjb250ZXh0LmluZGV4SW5CbG9jayA9IGJsb2NrLT5zaXplKCkg
LSAxOwogICAgICAgICAKLSAgICAgICAgaWYgKGJsb2NrLT5sYXN0KCkub3Bjb2RlID09IEp1bXAK
KyAgICAgICAgaWYgKGJsb2NrLT5sYXN0KCkua2luZC5vcGNvZGUgPT0gSnVtcAogICAgICAgICAg
ICAgJiYgYmxvY2stPnN1Y2Nlc3NvckJsb2NrKDApID09IGNvZGUuZmluZE5leHRCbG9jayhibG9j
aykpCiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICBhZGRJdGVtKGJsb2NrLT5sYXN0
KCkpOwogCi0gICAgICAgIGlmIChpc1JldHVybihibG9jay0+bGFzdCgpLm9wY29kZSkpIHsKKyAg
ICAgICAgaWYgKGlzUmV0dXJuKGJsb2NrLT5sYXN0KCkua2luZC5vcGNvZGUpKSB7CiAgICAgICAg
ICAgICAvLyBXZSBjdXJyZW50bHkgZG9uJ3QgcmVwcmVzZW50IHRoZSBmdWxsIHByb2xvZ3VlL2Vw
aWxvZ3VlIGluIEFpciwgc28gd2UgbmVlZCB0bwogICAgICAgICAgICAgLy8gaGF2ZSB0aGlzIG92
ZXJyaWRlLgogICAgICAgICAgICAgaWYgKGNvZGUuZnJhbWVTaXplKCkpIHsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySGFuZGxlQ2FsbGVlU2F2ZXMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySGFuZGxlQ2FsbGVlU2F2ZXMu
Y3BwCShyZXZpc2lvbiAyMDY2MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckhhbmRsZUNhbGxlZVNhdmVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgsNyBAQCB2
b2lkIGhhbmRsZUNhbGxlZVNhdmVzKENvZGUmIGNvZGUpCiAgICAgICAgICAgICAgICAgICAgIHVz
ZWRDYWxsZWVTYXZlcy5zZXQodG1wLnJlZygpKTsKICAgICAgICAgICAgICAgICB9KTsKIAotICAg
ICAgICAgICAgaWYgKGluc3Qub3Bjb2RlID09IFBhdGNoKQorICAgICAgICAgICAgaWYgKGluc3Qu
a2luZC5vcGNvZGUgPT0gUGF0Y2gpCiAgICAgICAgICAgICAgICAgdXNlZENhbGxlZVNhdmVzLm1l
cmdlKGluc3QuZXh0cmFDbG9iYmVyZWRSZWdzKCkpOwogICAgICAgICB9CiAgICAgfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3QuY3BwCShyZXZpc2lvbiAyMDY2MTAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3QuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00Nyw3ICs0Nyw5IEBAIGJvb2wgSW5zdDo6aGFzQXJnRWZmZWN0cygpCiAKIHVuc2ln
bmVkIEluc3Q6OmpzSGFzaCgpIGNvbnN0CiB7Ci0gICAgdW5zaWduZWQgcmVzdWx0ID0gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KG9wY29kZSk7CisgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGRvIHNv
bWV0aGluZyBmb3IgZmxhZ3MuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE2Mjc1MQorICAgIHVuc2lnbmVkIHJlc3VsdCA9IHN0YXRpY19jYXN0PHVuc2ln
bmVkPihraW5kLm9wY29kZSk7CiAgICAgCiAgICAgZm9yIChjb25zdCBBcmcmIGFyZyA6IGFyZ3Mp
CiAgICAgICAgIHJlc3VsdCArPSBhcmcuanNIYXNoKCk7CkBAIC01Nyw3ICs1OSw3IEBAIHVuc2ln
bmVkIEluc3Q6OmpzSGFzaCgpIGNvbnN0CiAKIHZvaWQgSW5zdDo6ZHVtcChQcmludFN0cmVhbSYg
b3V0KSBjb25zdAogewotICAgIG91dC5wcmludChvcGNvZGUsICIgIiwgbGlzdER1bXAoYXJncykp
OworICAgIG91dC5wcmludChraW5kLCAiICIsIGxpc3REdW1wKGFyZ3MpKTsKICAgICBpZiAob3Jp
Z2luKSB7CiAgICAgICAgIGlmIChhcmdzLnNpemUoKSkKICAgICAgICAgICAgIG91dC5wcmludCgi
LCAiKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdC5oCShyZXZpc2lv
biAyMDY2MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3QuaAkod29y
a2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNyBAQAogI2lmIEVOQUJMRShCM19KSVQpCiAKICNpbmNs
dWRlICJBaXJBcmcuaCIKLSNpbmNsdWRlICJBaXJPcGNvZGUuaCIKKyNpbmNsdWRlICJBaXJLaW5k
LmgiCiAjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtNTAs
MzkgKzUwLDM4IEBAIHB1YmxpYzoKIAogICAgIEluc3QoKQogICAgICAgICA6IG9yaWdpbihudWxs
cHRyKQotICAgICAgICAsIG9wY29kZShOb3ApCiAgICAgewogICAgIH0KICAgICAKLSAgICBJbnN0
KE9wY29kZSBvcGNvZGUsIFZhbHVlKiBvcmlnaW4pCisgICAgSW5zdChLaW5kIGtpbmQsIFZhbHVl
KiBvcmlnaW4pCiAgICAgICAgIDogb3JpZ2luKG9yaWdpbikKLSAgICAgICAgLCBvcGNvZGUob3Bj
b2RlKQorICAgICAgICAsIGtpbmQoa2luZCkKICAgICB7CiAgICAgfQogICAgIAogICAgIHRlbXBs
YXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KLSAgICBJbnN0KE9wY29kZSBvcGNvZGUsIFZhbHVl
KiBvcmlnaW4sIEFyZyBhcmcsIEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCisgICAgSW5zdChLaW5k
IGtpbmQsIFZhbHVlKiBvcmlnaW4sIEFyZyBhcmcsIEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCiAg
ICAgICAgIDogYXJnc3sgYXJnLCBhcmd1bWVudHMuLi4gfQogICAgICAgICAsIG9yaWdpbihvcmln
aW4pCi0gICAgICAgICwgb3Bjb2RlKG9wY29kZSkKKyAgICAgICAgLCBraW5kKGtpbmQpCiAgICAg
ewogICAgIH0KIAotICAgIEluc3QoT3Bjb2RlIG9wY29kZSwgVmFsdWUqIG9yaWdpbiwgY29uc3Qg
QXJnTGlzdCYgYXJndW1lbnRzKQorICAgIEluc3QoS2luZCBraW5kLCBWYWx1ZSogb3JpZ2luLCBj
b25zdCBBcmdMaXN0JiBhcmd1bWVudHMpCiAgICAgICAgIDogYXJncyhhcmd1bWVudHMpCiAgICAg
ICAgICwgb3JpZ2luKG9yaWdpbikKLSAgICAgICAgLCBvcGNvZGUob3Bjb2RlKQorICAgICAgICAs
IGtpbmQoa2luZCkKICAgICB7CiAgICAgfQogCi0gICAgSW5zdChPcGNvZGUgb3Bjb2RlLCBWYWx1
ZSogb3JpZ2luLCBBcmdMaXN0JiYgYXJndW1lbnRzKQorICAgIEluc3QoS2luZCBraW5kLCBWYWx1
ZSogb3JpZ2luLCBBcmdMaXN0JiYgYXJndW1lbnRzKQogICAgICAgICA6IGFyZ3MoV1RGTW92ZShh
cmd1bWVudHMpKQogICAgICAgICAsIG9yaWdpbihvcmlnaW4pCi0gICAgICAgICwgb3Bjb2RlKG9w
Y29kZSkKKyAgICAgICAgLCBraW5kKGtpbmQpCiAgICAgewogICAgIH0KIAotICAgIGV4cGxpY2l0
IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBvcmlnaW4gfHwgb3Bjb2RlICE9IE5vcCB8
fCBhcmdzLnNpemUoKTsgfQorICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJl
dHVybiBvcmlnaW4gfHwga2luZCB8fCBhcmdzLnNpemUoKTsgfQogCiAgICAgdm9pZCBhcHBlbmQo
KSB7IH0KICAgICAKQEAgLTIwMCw3ICsxOTksNyBAQCBwdWJsaWM6CiAKICAgICBBcmdMaXN0IGFy
Z3M7CiAgICAgVmFsdWUqIG9yaWdpbjsgLy8gVGhlIEIzOjpWYWx1ZSB0aGF0IHRoaXMgb3JpZ2lu
YXRlZCBmcm9tLgotICAgIE9wY29kZSBvcGNvZGU7CisgICAgS2luZCBraW5kOwogfTsKIAogfSB9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJJbnN0SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlySW5zdElubGluZXMuaAkocmV2aXNpb24gMjA2NjEwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC00NiwxMyArNDYsMTMgQEAgdm9pZCBJbnN0Ojpmb3JFYWNoKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0
bwogCiBpbmxpbmUgY29uc3QgUmVnaXN0ZXJTZXQmIEluc3Q6OmV4dHJhQ2xvYmJlcmVkUmVncygp
CiB7Ci0gICAgQVNTRVJUKG9wY29kZSA9PSBQYXRjaCk7CisgICAgQVNTRVJUKGtpbmQub3Bjb2Rl
ID09IFBhdGNoKTsKICAgICByZXR1cm4gYXJnc1swXS5zcGVjaWFsKCktPmV4dHJhQ2xvYmJlcmVk
UmVncygqdGhpcyk7CiB9CiAKIGlubGluZSBjb25zdCBSZWdpc3RlclNldCYgSW5zdDo6ZXh0cmFF
YXJseUNsb2JiZXJlZFJlZ3MoKQogewotICAgIEFTU0VSVChvcGNvZGUgPT0gUGF0Y2gpOworICAg
IEFTU0VSVChraW5kLm9wY29kZSA9PSBQYXRjaCk7CiAgICAgcmV0dXJuIGFyZ3NbMF0uc3BlY2lh
bCgpLT5leHRyYUVhcmx5Q2xvYmJlcmVkUmVncygqdGhpcyk7CiB9CiAKQEAgLTg5LDEyICs4OSwx
MiBAQCBpbmxpbmUgdm9pZCBJbnN0Ojpmb3JFYWNoRGVmV2l0aEV4dHJhQ2xvCiAgICAgICAgIGZ1
bmN0b3IoVGhpbmcocmVnKSwgcmVnRGVmUm9sZSwgdHlwZSwgQXJnOjpjb25zZXJ2YXRpdmVXaWR0
aCh0eXBlKSk7CiAgICAgfTsKIAotICAgIGlmIChwcmV2SW5zdCAmJiBwcmV2SW5zdC0+b3Bjb2Rl
ID09IFBhdGNoKSB7CisgICAgaWYgKHByZXZJbnN0ICYmIHByZXZJbnN0LT5raW5kLm9wY29kZSA9
PSBQYXRjaCkgewogICAgICAgICByZWdEZWZSb2xlID0gQXJnOjpEZWY7CiAgICAgICAgIHByZXZJ
bnN0LT5leHRyYUNsb2JiZXJlZFJlZ3MoKS5mb3JFYWNoKHJlcG9ydFJlZyk7CiAgICAgfQogCi0g
ICAgaWYgKG5leHRJbnN0ICYmIG5leHRJbnN0LT5vcGNvZGUgPT0gUGF0Y2gpIHsKKyAgICBpZiAo
bmV4dEluc3QgJiYgbmV4dEluc3QtPmtpbmQub3Bjb2RlID09IFBhdGNoKSB7CiAgICAgICAgIHJl
Z0RlZlJvbGUgPSBBcmc6OkVhcmx5RGVmOwogICAgICAgICBuZXh0SW5zdC0+ZXh0cmFFYXJseUNs
b2JiZXJlZFJlZ3MoKS5mb3JFYWNoKHJlcG9ydFJlZyk7CiAgICAgfQpAQCAtMTAyLDcgKzEwMiw3
IEBAIGlubGluZSB2b2lkIEluc3Q6OmZvckVhY2hEZWZXaXRoRXh0cmFDbG8KIAogaW5saW5lIHZv
aWQgSW5zdDo6cmVwb3J0VXNlZFJlZ2lzdGVycyhjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lz
dGVycykKIHsKLSAgICBBU1NFUlQob3Bjb2RlID09IFBhdGNoKTsKKyAgICBBU1NFUlQoa2luZC5v
cGNvZGUgPT0gUGF0Y2gpOwogICAgIGFyZ3NbMF0uc3BlY2lhbCgpLT5yZXBvcnRVc2VkUmVnaXN0
ZXJzKCp0aGlzLCB1c2VkUmVnaXN0ZXJzKTsKIH0KIApAQCAtMTE2LDcgKzExNiw3IEBAIGlubGlu
ZSBPcHRpb25hbDx1bnNpZ25lZD4gSW5zdDo6c2hvdWxkVHIKICAgICBpZiAoIWlzWDg2KCkpCiAg
ICAgICAgIHJldHVybiBOdWxsb3B0OwogCi0gICAgc3dpdGNoIChvcGNvZGUpIHsKKyAgICBzd2l0
Y2ggKGtpbmQub3Bjb2RlKSB7CiAgICAgY2FzZSBBZGQzMjoKICAgICBjYXNlIEFkZDY0OgogICAg
IGNhc2UgQW5kMzI6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckl0ZXJh
dGVkUmVnaXN0ZXJDb2FsZXNjaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0Fpckl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nLmNwcAkocmV2aXNpb24g
MjA2NjEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJdGVyYXRlZFJlZ2lz
dGVyQ29hbGVzY2luZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNDAsNyArMTA0MCw3IEBAIHBy
aXZhdGU6CiAgICAgewogICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICAgICAgY2FzZSBBcmc6
OkdQOgotICAgICAgICAgICAgc3dpdGNoIChpbnN0Lm9wY29kZSkgeworICAgICAgICAgICAgc3dp
dGNoIChpbnN0LmtpbmQub3Bjb2RlKSB7CiAgICAgICAgICAgICBjYXNlIE1vdmU6CiAgICAgICAg
ICAgICBjYXNlIE1vdmUzMjoKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTEwNDksNyArMTA0
OSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgY2FzZSBBcmc6OkZQOgotICAgICAgICAgICAgc3dpdGNoIChpbnN0Lm9wY29kZSkgeworICAg
ICAgICAgICAgc3dpdGNoIChpbnN0LmtpbmQub3Bjb2RlKSB7CiAgICAgICAgICAgICBjYXNlIE1v
dmVGbG9hdDoKICAgICAgICAgICAgIGNhc2UgTW92ZURvdWJsZToKICAgICAgICAgICAgICAgICBi
cmVhazsKQEAgLTEwNzQsNyArMTA3NCw3IEBAIHByaXZhdGU6CiAgICAgICAgIC8vIE5vdGUgdGhh
dCB0aGUgaW5wdXQgcHJvcGVydHkgcmVxdWlyZXMgYW4gYW5hbHlzaXMgb3ZlciBaRGVmJ3MsIHNv
IGl0J3Mgb25seSB2YWxpZCBzbyBsb25nCiAgICAgICAgIC8vIGFzIHRoZSBpbnB1dCBnZXRzIGEg
cmVnaXN0ZXIuIFdlIGRvbid0IGtub3cgaWYgdGhlIGlucHV0IGdldHMgYSByZWdpc3RlciwgYnV0
IHdlIGRvIGtub3cKICAgICAgICAgLy8gdGhhdCBpZiBpdCBkb2Vzbid0IGdldCBhIHJlZ2lzdGVy
IHRoZW4gd2Ugd2lsbCBzdGlsbCBlbWl0IHRoaXMgTW92ZTMyLgotICAgICAgICBpZiAoaW5zdC5v
cGNvZGUgPT0gTW92ZTMyKSB7CisgICAgICAgIGlmIChpbnN0LmtpbmQub3Bjb2RlID09IE1vdmUz
MikgewogICAgICAgICAgICAgaWYgKCF0bXBXaWR0aCkKICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKQEAgLTEzODIsMTEgKzEzODIsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAg
ICAvLyBlcXVpdmFsZW50IGlmIHRoZSBkZXN0aW5hdGlvbidzIGhpZ2ggYml0cyBhcmUgbm90IG9i
c2VydmFibGUgb3IgaWYgdGhlIHNvdXJjZSdzIGhpZ2gKICAgICAgICAgICAgICAgICAvLyBiaXRz
IGFyZSBhbGwgemVyby4gTm90ZSB0aGF0IHdlIGRvbid0IGhhdmUgdGhlIG9wcG9zaXRlIG9wdGlt
aXphdGlvbiBmb3Igb3RoZXIKICAgICAgICAgICAgICAgICAvLyBhcmNoaXRlY3R1cmVzLCB3aGlj
aCBtYXkgcHJlZmVyIE1vdmUgb3ZlciBNb3ZlMzIsIGJlY2F1c2UgTW92ZSBpcyBjYW5vbmljYWwg
YWxyZWFkeS4KLSAgICAgICAgICAgICAgICBpZiAodHlwZSA9PSBBcmc6OkdQICYmIGluc3Qub3Bj
b2RlID09IE1vdmUKKyAgICAgICAgICAgICAgICBpZiAodHlwZSA9PSBBcmc6OkdQICYmIGluc3Qu
a2luZC5vcGNvZGUgPT0gTW92ZQogICAgICAgICAgICAgICAgICAgICAmJiBpbnN0LmFyZ3NbMF0u
aXNUbXAoKSAmJiBpbnN0LmFyZ3NbMV0uaXNUbXAoKSkgewogICAgICAgICAgICAgICAgICAgICBp
ZiAobV90bXBXaWR0aC51c2VXaWR0aChpbnN0LmFyZ3NbMV0udG1wKCkpIDw9IEFyZzo6V2lkdGgz
MgogICAgICAgICAgICAgICAgICAgICAgICAgfHwgbV90bXBXaWR0aC5kZWZXaWR0aChpbnN0LmFy
Z3NbMF0udG1wKCkpIDw9IEFyZzo6V2lkdGgzMikKLSAgICAgICAgICAgICAgICAgICAgICAgIGlu
c3Qub3Bjb2RlID0gTW92ZTMyOworICAgICAgICAgICAgICAgICAgICAgICAgaW5zdC5raW5kLm9w
Y29kZSA9IE1vdmUzMjsKICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICBpbnN0
LmZvckVhY2hUbXBGYXN0KFsmXSAoVG1wJiB0bXApIHsKQEAgLTE0NTMsNyArMTQ1Myw3IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICAgICAgLy8gTW92ZSBpcyB0aGUgY2Fub25pY2FsIHdheSB0byBt
b3ZlIGRhdGEgYmV0d2VlbiBHUFJzLgogICAgICAgICAgICAgICAgIGJvb2wgY2FuVXNlTW92ZTMy
SWZEaWRTcGlsbCA9IGZhbHNlOwogICAgICAgICAgICAgICAgIGJvb2wgZGlkU3BpbGwgPSBmYWxz
ZTsKLSAgICAgICAgICAgICAgICBpZiAodHlwZSA9PSBBcmc6OkdQICYmIGluc3Qub3Bjb2RlID09
IE1vdmUpIHsKKyAgICAgICAgICAgICAgICBpZiAodHlwZSA9PSBBcmc6OkdQICYmIGluc3Qua2lu
ZC5vcGNvZGUgPT0gTW92ZSkgewogICAgICAgICAgICAgICAgICAgICBpZiAoKGluc3QuYXJnc1sw
XS5pc1RtcCgpICYmIG1fdG1wV2lkdGgud2lkdGgoaW5zdC5hcmdzWzBdLnRtcCgpKSA8PSBBcmc6
OldpZHRoMzIpCiAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoaW5zdC5hcmdzWzFdLmlzVG1w
KCkgJiYgbV90bXBXaWR0aC53aWR0aChpbnN0LmFyZ3NbMV0udG1wKCkpIDw9IEFyZzo6V2lkdGgz
MikpCiAgICAgICAgICAgICAgICAgICAgICAgICBjYW5Vc2VNb3ZlMzJJZkRpZFNwaWxsID0gdHJ1
ZTsKQEAgLTE0ODgsNyArMTQ4OCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAg
ICBBcmc6OldpZHRoIHNwaWxsV2lkdGggPSBtX3RtcFdpZHRoLnJlcXVpcmVkV2lkdGgoYXJnLnRt
cCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzQW55RGVmKHJvbGUpICYm
IHdpZHRoIDwgc3BpbGxXaWR0aCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoaW5zdC5vcGNvZGUgPT0gTW92ZSB8fCAh
KEFyZzo6aXNBbnlVc2Uocm9sZSkgJiYgd2lkdGggPiBzcGlsbFdpZHRoKSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBBU1NFUlQoaW5zdC5raW5kLm9wY29kZSA9PSBNb3ZlIHx8ICEoQXJnOjpp
c0FueVVzZShyb2xlKSAmJiB3aWR0aCA+IHNwaWxsV2lkdGgpKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNwaWxsV2lkdGggIT0gQXJnOjpX
aWR0aDMyKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhblVzZU1vdmUzMklmRGlkU3Bp
bGwgPSBmYWxzZTsKQEAgLTE1MDAsNyArMTUwMCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAg
ICAgICAgIH0pOwogCiAgICAgICAgICAgICAgICAgaWYgKGRpZFNwaWxsICYmIGNhblVzZU1vdmUz
MklmRGlkU3BpbGwpCi0gICAgICAgICAgICAgICAgICAgIGluc3Qub3Bjb2RlID0gTW92ZTMyOwor
ICAgICAgICAgICAgICAgICAgICBpbnN0LmtpbmQub3Bjb2RlID0gTW92ZTMyOwogCiAgICAgICAg
ICAgICAgICAgLy8gRm9yIGV2ZXJ5IG90aGVyIGNhc2UsIGFkZCBMb2FkL1N0b3JlIGFzIG5lZWRl
ZC4KICAgICAgICAgICAgICAgICBpbnN0LmZvckVhY2hUbXAoWyZdIChUbXAmIHRtcCwgQXJnOjpS
b2xlIHJvbGUsIEFyZzo6VHlwZSBhcmdUeXBlLCBBcmc6OldpZHRoKSB7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpcktpbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyS2luZC5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJLaW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJLaW5kLmgiCisKKyNpZiBFTkFCTEUo
QjNfSklUKQorCisjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK3ZvaWQgS2luZDo6ZHVtcChQcmlu
dFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChvcGNvZGUpOworICAgIAorICAg
IENvbW1hUHJpbnRlciBjb21tYSgiLCAiLCAiPCIpOworICAgIGlmICh0cmFwcykKKyAgICAgICAg
b3V0LnByaW50KGNvbW1hLCAiVHJhcHMiKTsKKyAgICBpZiAoY29tbWEuZGlkUHJpbnQoKSkKKyAg
ICAgICAgb3V0LnByaW50KCI+Iik7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpB
aXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyS2luZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyS2luZC5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyS2luZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTcgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJLaW5k
X2gKKyNkZWZpbmUgQWlyS2luZF9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAi
QWlyT3Bjb2RlLmgiCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworLy8gQWlyIG9wY29kZXMgYXJl
IGFsd2F5cyBjYXJyaWVkIGFyb3VuZCB3aXRoIHNvbWUgZmxhZ3MuIFRoZXNlIGZsYWdzIGFyZSB1
bmRlcnN0b29kIGFzIGhhdmluZyBubworLy8gbWVhbmluZyBpZiB0aGV5IGFyZSBzZXQgZm9yIGFu
IG9wY29kZSB0byB3aGljaCB0aGV5IGRvIG5vdCBhcHBseS4gVGhpcyBtYWtlcyBzZW5zZSwgc2lu
Y2UgQWlyCisvLyBpcyBhIGNvbXBsZXggaW5zdHJ1Y3Rpb24gc2V0IGFuZCBtb3N0IG9mIHRoZXNl
IGZsYWdzIGNhbiBhcHBseSB0byBiYXNpY2FsbHkgYW55IG9wY29kZS4gSW4KKy8vIGZhY3QsIGl0
J3MgcmVjb21tZW5kZWQgdG8gb25seSByZXByZXNlbnQgc29tZXRoaW5nIGFzIGEgZmxhZyBpZiB5
b3UgYmVsaWV2ZSB0aGF0IGl0IGlzIGxhcmdlbHkKKy8vIG9wY29kZS1hZ25vc3RpYy4KKworc3Ry
dWN0IEtpbmQgeworICAgIEtpbmQoT3Bjb2RlIG9wY29kZSkKKyAgICAgICAgOiBvcGNvZGUob3Bj
b2RlKQorICAgICAgICAsIHRyYXBzKGZhbHNlKQorICAgIHsKKyAgICB9CisgICAgCisgICAgS2lu
ZCgpCisgICAgICAgIDogS2luZChOb3ApCisgICAgeworICAgIH0KKyAgICAKKyAgICBib29sIG9w
ZXJhdG9yPT0oY29uc3QgS2luZCYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
b3Bjb2RlID09IG90aGVyLm9wY29kZQorICAgICAgICAgICAgJiYgdHJhcHMgPT0gb3RoZXIudHJh
cHM7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBLaW5kJiBvdGhlcikg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICB9Cisg
ICAgCisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KG9wY29kZSkgKyAoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHRyYXBz
KSA8PCAxNik7CisgICAgfQorICAgIAorICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuICp0aGlzICE9IEtpbmQoKTsKKyAgICB9CisgICAgCisg
ICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgCisgICAgT3Bjb2RlIG9wY29k
ZTsKKyAgICAKKyAgICAvLyBUaGlzIGlzIGFuIG9wY29kZS1hZ25vc3RpYyBmbGFnIHRoYXQgaW5k
aWNhdGVzIHRoYXQgd2UgZXhwZWN0IHRoYXQgdGhpcyBpbnN0cnVjdGlvbiB3aWxsCisgICAgLy8g
dHJhcC4gVGhpcyBjYXVzZXMgdGhlIGNvbXBpbGVyIHRvIGFzc3VtZSB0aGF0IHRoaXMgc2lkZS1l
eGl0cyBhbmQgdGhlcmVmb3JlIGhhcyBub24tY29udHJvbAorICAgIC8vIG5vbi1hcmcgZWZmZWN0
cy4gVGhpcyBhbHNvIGNhdXNlcyB0aGUgY29tcGlsZXIgdG8gdGVsbCB5b3UgYWJvdXQgYWxsIG9m
IHRoZXNlIGluc3RydWN0aW9ucy4KKyAgICAvLyBOb3RlIHRoYXQgdGhpcyBpcyBqdXN0IG9uZSBv
ZiBzZXZlcmFsIHdheXMgb2Ygc3VwcG9ydGluZyB0cmFwcGluZyBpbiBBaXIsIGFuZCBpdCdzIHRo
ZSBsZXNzCisgICAgLy8gcHJlY2lzZSB2YXJpYW50IGJlY2F1c2UgaXQncyBvcmlnaW4tYmFzZWQu
IFRoaXMgbWVhbnMgdGhhdCBpZiBhbiBpbnN0cnVjdGlvbiB3YXMgZnVzZWQgb3V0CisgICAgLy8g
b2YgQjMgdmFsdWVzIHRoYXQgaGFkIGRpZmZlcmVudCBvcmlnaW5zLCB0aGVuIHRoZSBvcmlnaW4g
YXQgd2hpY2ggeW91J2xsIGFwcGVhciB0byB0cmFwCisgICAgLy8gd2lsbCBiZSBzb21ld2hhdCBy
YW5kb20uIFRoZSB1cHNpZGUgb2YgdGhpcyBhcHByb2FjaCBpcyB0aGF0IGl0IGltcG9zZXMgYnkg
ZmFyIHRoZSBsZWFzdAorICAgIC8vIG92ZXJoZWFkIG9uIHRoZSBjb21waWxlci4KKyAgICAvLyBG
SVhNRTogTWFrZSB0aGlzIGNvbXBsZXRlbHkgd29yay4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYyNjg5CisgICAgYm9vbCB0cmFwcyA6IDE7Cit9Owor
Cit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNf
SklUKQorCisjZW5kaWYgLy8gQWlyS2luZF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyTG93ZXJBZnRlclJlZ0FsbG9jLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckxvd2VyQWZ0ZXJSZWdBbGxvYy5jcHAJKHJldmlzaW9u
IDIwNjYxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTG93ZXJBZnRlclJl
Z0FsbG9jLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjgsNyArNjgsNyBAQCB2b2lkIGxvd2VyQWZ0
ZXJSZWdBbGxvYyhDb2RlJiBjb2RlKQogICAgICAgICAgICAgCiAgICAgICAgICAgICBSZWdpc3Rl
clNldCBzZXQ7CiAKLSAgICAgICAgICAgIGJvb2wgaXNSZWxldmFudCA9IGluc3Qub3Bjb2RlID09
IFNodWZmbGUgfHwgaW5zdC5vcGNvZGUgPT0gQ29sZENDYWxsOworICAgICAgICAgICAgYm9vbCBp
c1JlbGV2YW50ID0gaW5zdC5raW5kLm9wY29kZSA9PSBTaHVmZmxlIHx8IGluc3Qua2luZC5vcGNv
ZGUgPT0gQ29sZENDYWxsOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAoaXNSZWxldmFu
dCkgewogICAgICAgICAgICAgICAgIGZvciAoUmVnIHJlZyA6IGxvY2FsQ2FsYy5saXZlKCkpCkBA
IC0xMTAsNyArMTEwLDcgQEAgdm9pZCBsb3dlckFmdGVyUmVnQWxsb2MoQ29kZSYgY29kZSkKICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpbnN0SW5kZXggPSAwOyBpbnN0SW5kZXggPCBibG9jay0+c2l6
ZSgpOyArK2luc3RJbmRleCkgewogICAgICAgICAgICAgSW5zdCYgaW5zdCA9IGJsb2NrLT5hdChp
bnN0SW5kZXgpOwogCi0gICAgICAgICAgICBzd2l0Y2ggKGluc3Qub3Bjb2RlKSB7CisgICAgICAg
ICAgICBzd2l0Y2ggKGluc3Qua2luZC5vcGNvZGUpIHsKICAgICAgICAgICAgIGNhc2UgU2h1ZmZs
ZTogewogICAgICAgICAgICAgICAgIFJlZ2lzdGVyU2V0IHNldCA9IHVzZWRSZWdpc3RlcnMuZ2V0
KCZpbnN0KTsKICAgICAgICAgICAgICAgICBWZWN0b3I8U2h1ZmZsZVBhaXI+IHBhaXJzOwpAQCAt
MTQxLDYgKzE0MSw3IEBAIHZvaWQgbG93ZXJBZnRlclJlZ0FsbG9jKENvZGUmIGNvZGUpCiAKICAg
ICAgICAgICAgIGNhc2UgQ29sZENDYWxsOiB7CiAgICAgICAgICAgICAgICAgQ0NhbGxWYWx1ZSog
dmFsdWUgPSBpbnN0Lm9yaWdpbi0+YXM8Q0NhbGxWYWx1ZT4oKTsKKyAgICAgICAgICAgICAgICBL
aW5kIG9sZEtpbmQgPSBpbnN0LmtpbmQ7CiAKICAgICAgICAgICAgICAgICBSZWdpc3RlclNldCBs
aXZlUmVncyA9IHVzZWRSZWdpc3RlcnMuZ2V0KCZpbnN0KTsKICAgICAgICAgICAgICAgICBSZWdp
c3RlclNldCByZWdzVG9TYXZlID0gbGl2ZVJlZ3M7CkBAIC0xOTUsNiArMTk2LDggQEAgdm9pZCBs
b3dlckFmdGVyUmVnQWxsb2MoQ29kZSYgY29kZSkKICAgICAgICAgICAgICAgICAgICAgaW5zdElu
ZGV4LCBlbWl0U2h1ZmZsZShwYWlycywgZ3BTY3JhdGNoLCBmcFNjcmF0Y2gsIGluc3Qub3JpZ2lu
KSk7CiAKICAgICAgICAgICAgICAgICBpbnN0ID0gYnVpbGRDQ2FsbChjb2RlLCBpbnN0Lm9yaWdp
biwgZGVzdGluYXRpb25zKTsKKyAgICAgICAgICAgICAgICBpZiAob2xkS2luZC50cmFwcykKKyAg
ICAgICAgICAgICAgICAgICAgaW5zdC5raW5kLnRyYXBzID0gdHJ1ZTsKIAogICAgICAgICAgICAg
ICAgIC8vIE5vdyB3ZSBuZWVkIHRvIGVtaXQgY29kZSB0byByZXN0b3JlIHJlZ2lzdGVycy4KICAg
ICAgICAgICAgICAgICBwYWlycy5yZXNpemUoMCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0Fpckxvd2VyRW50cnlTd2l0Y2guY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTG93ZXJFbnRyeVN3aXRjaC5jcHAJKHJldmlzaW9uIDIw
NjYxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTG93ZXJFbnRyeVN3aXRj
aC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDcgKzQzLDcgQEAgdm9pZCBsb3dlckVudHJ5U3dp
dGNoKENvZGUmIGNvZGUpCiAgICAgLy8gRmlndXJlIG91dCB0aGUgc2V0IG9mIGJsb2NrcyB0aGF0
IHNob3VsZCBiZSBkdXBsaWNhdGVkLgogICAgIEJsb2NrV29ya2xpc3Qgd29ya2xpc3Q7CiAgICAg
Zm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGNvZGUpIHsKLSAgICAgICAgaWYgKGJsb2NrLT5sYXN0
KCkub3Bjb2RlID09IEVudHJ5U3dpdGNoKQorICAgICAgICBpZiAoYmxvY2stPmxhc3QoKS5raW5k
Lm9wY29kZSA9PSBFbnRyeVN3aXRjaCkKICAgICAgICAgICAgIHdvcmtsaXN0LnB1c2goYmxvY2sp
OwogICAgIH0KICAgICAKQEAgLTYxLDcgKzYxLDcgQEAgdm9pZCBsb3dlckVudHJ5U3dpdGNoKENv
ZGUmIGNvZGUpCiAgICAgCiAgICAgVmVjdG9yPEZyZXF1ZW5jeUNsYXNzPiBlbnRyeXBvaW50RnJl
cXVlbmNpZXMoY29kZS5wcm9jKCkubnVtRW50cnlwb2ludHMoKSwgRnJlcXVlbmN5Q2xhc3M6OlJh
cmUpOwogICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBjb2RlKSB7Ci0gICAgICAgIGlmIChi
bG9jay0+bGFzdCgpLm9wY29kZSAhPSBFbnRyeVN3aXRjaCkKKyAgICAgICAgaWYgKGJsb2NrLT5s
YXN0KCkua2luZC5vcGNvZGUgIT0gRW50cnlTd2l0Y2gpCiAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgZm9yICh1bnNpZ25lZCBlbnRyeXBvaW50SW5kZXggPSBjb2RlLnByb2MoKS5udW1F
bnRyeXBvaW50cygpOyBlbnRyeXBvaW50SW5kZXgtLTspIHsKICAgICAgICAgICAgIGVudHJ5cG9p
bnRGcmVxdWVuY2llc1tlbnRyeXBvaW50SW5kZXhdID0gbWF4RnJlcXVlbmN5KApAQCAtNzEsMTAg
KzcxLDEwIEBAIHZvaWQgbG93ZXJFbnRyeVN3aXRjaChDb2RlJiBjb2RlKQogICAgIH0KICAgICAK
ICAgICBhdXRvIGZpeEVudHJ5U3dpdGNoID0gWyZdIChCYXNpY0Jsb2NrKiBibG9jaywgdW5zaWdu
ZWQgZW50cnlwb2ludEluZGV4KSB7Ci0gICAgICAgIGlmIChibG9jay0+bGFzdCgpLm9wY29kZSAh
PSBFbnRyeVN3aXRjaCkKKyAgICAgICAgaWYgKGJsb2NrLT5sYXN0KCkua2luZC5vcGNvZGUgIT0g
RW50cnlTd2l0Y2gpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIEZyZXF1ZW50ZWRCbG9j
ayB0YXJnZXQgPSBibG9jay0+c3VjY2Vzc29yKGVudHJ5cG9pbnRJbmRleCk7Ci0gICAgICAgIGJs
b2NrLT5sYXN0KCkub3Bjb2RlID0gSnVtcDsKKyAgICAgICAgYmxvY2stPmxhc3QoKS5raW5kLm9w
Y29kZSA9IEp1bXA7CiAgICAgICAgIGJsb2NrLT5zdWNjZXNzb3JzKCkucmVzaXplKDEpOwogICAg
ICAgICBibG9jay0+c3VjY2Vzc29yKDApID0gdGFyZ2V0OwogICAgIH07CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckxvd2VyTWFjcm9zLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckxvd2VyTWFjcm9zLmNwcAkocmV2aXNpb24g
MjA2NjEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMb3dlck1hY3Jvcy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDkgKzQ3LDEwIEBAIHZvaWQgbG93ZXJNYWNyb3MoQ29k
ZSYgY29kZSkKICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnN0SW5kZXggPSAwOyBpbnN0SW5kZXgg
PCBibG9jay0+c2l6ZSgpOyArK2luc3RJbmRleCkgewogICAgICAgICAgICAgSW5zdCYgaW5zdCA9
IGJsb2NrLT5hdChpbnN0SW5kZXgpOwogCi0gICAgICAgICAgICBzd2l0Y2ggKGluc3Qub3Bjb2Rl
KSB7CisgICAgICAgICAgICBzd2l0Y2ggKGluc3Qua2luZC5vcGNvZGUpIHsKICAgICAgICAgICAg
IGNhc2UgQ0NhbGw6IHsKICAgICAgICAgICAgICAgICBDQ2FsbFZhbHVlKiB2YWx1ZSA9IGluc3Qu
b3JpZ2luLT5hczxDQ2FsbFZhbHVlPigpOworICAgICAgICAgICAgICAgIEtpbmQgb2xkS2luZCA9
IGluc3Qua2luZDsKIAogICAgICAgICAgICAgICAgIFZlY3RvcjxBcmc+IGRlc3RpbmF0aW9ucyA9
IGNvbXB1dGVDQ2FsbGluZ0NvbnZlbnRpb24oY29kZSwgdmFsdWUpOwogCkBAIC03MCw2ICs3MSw4
IEBAIHZvaWQgbG93ZXJNYWNyb3MoQ29kZSYgY29kZSkKICAgICAgICAgICAgICAgICBBcmcgcmVz
dWx0RHN0ID0gdmFsdWUtPnR5cGUoKSA9PSBWb2lkID8gQXJnKCkgOiBpbnN0LmFyZ3NbMV07CiAg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaW5zdCA9IGJ1aWxkQ0NhbGwoY29kZSwg
aW5zdC5vcmlnaW4sIGRlc3RpbmF0aW9ucyk7CisgICAgICAgICAgICAgICAgaWYgKG9sZEtpbmQu
dHJhcHMpCisgICAgICAgICAgICAgICAgICAgIGluc3Qua2luZC50cmFwcyA9IHRydWU7CiAKICAg
ICAgICAgICAgICAgICBUbXAgcmVzdWx0ID0gY0NhbGxSZXN1bHQodmFsdWUtPnR5cGUoKSk7CiAg
ICAgICAgICAgICAgICAgc3dpdGNoICh2YWx1ZS0+dHlwZSgpKSB7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wdGltaXplQmxvY2tPcmRlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcHRpbWl6ZUJsb2NrT3JkZXIuY3Bw
CShyZXZpc2lvbiAyMDY2MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9w
dGltaXplQmxvY2tPcmRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2MCw3ICsxNjAsNyBAQCB2
b2lkIG9wdGltaXplQmxvY2tPcmRlcihDb2RlJiBjb2RlKQogICAgICAgICAvLyBvcHRpbWl6YXRp
b24uICBZb3UnbGwgcHJvYmFibHkgcmVhbGl6ZSB0aGF0IGFzIHNvb24gYXMgeW91IGxvb2sgYXQg
dGhlIGRpc2Fzc2VtYmx5LCBhbmQgaXQKICAgICAgICAgLy8gY2VydGFpbmx5IHdvbid0IGNhdXNl
IGFueSBjb3JyZWN0bmVzcyBpc3N1ZXMuCiAgICAgICAgIAotICAgICAgICBzd2l0Y2ggKGJyYW5j
aC5vcGNvZGUpIHsKKyAgICAgICAgc3dpdGNoIChicmFuY2gua2luZC5vcGNvZGUpIHsKICAgICAg
ICAgY2FzZSBCcmFuY2g4OgogICAgICAgICBjYXNlIEJyYW5jaDMyOgogICAgICAgICBjYXNlIEJy
YW5jaDY0OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJSZXBvcnRVc2Vk
UmVnaXN0ZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpclJlcG9ydFVzZWRSZWdpc3RlcnMuY3BwCShyZXZpc2lvbiAyMDY2MTApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclJlcG9ydFVzZWRSZWdpc3RlcnMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC03Myw3ICs3Myw3IEBAIHZvaWQgcmVwb3J0VXNlZFJlZ2lzdGVycyhDb2RlJiBj
b2RlKQogICAgICAgICAgICAgICAgICAgICBpbnN0ID0gSW5zdCgpOwogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoaW5zdC5vcGNvZGUgPT0gUGF0Y2gpIHsKKyAg
ICAgICAgICAgIGlmIChpbnN0LmtpbmQub3Bjb2RlID09IFBhdGNoKSB7CiAgICAgICAgICAgICAg
ICAgUmVnaXN0ZXJTZXQgcmVnaXN0ZXJTZXQ7CiAgICAgICAgICAgICAgICAgZm9yIChSZWcgcmVn
IDogbG9jYWxDYWxjLmxpdmUoKSkKICAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJTZXQuc2V0
KHJlZyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNpbXBsaWZ5Q0ZH
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNpbXBs
aWZ5Q0ZHLmNwcAkocmV2aXNpb24gMjA2NjEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJTaW1wbGlmeUNGRy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc4LDcgKzc4LDcgQEAg
Ym9vbCBzaW1wbGlmeUNGRyhDb2RlJiBjb2RlKQogICAgICAgICAgICAgZm9yIChCYXNpY0Jsb2Nr
KiYgc3VjY2Vzc29yIDogYmxvY2stPnN1Y2Nlc3NvckJsb2NrcygpKSB7CiAgICAgICAgICAgICAg
ICAgaWYgKHN1Y2Nlc3NvciAhPSBibG9jawogICAgICAgICAgICAgICAgICAgICAmJiBzdWNjZXNz
b3ItPnNpemUoKSA9PSAxCi0gICAgICAgICAgICAgICAgICAgICYmIHN1Y2Nlc3Nvci0+bGFzdCgp
Lm9wY29kZSA9PSBKdW1wKSB7CisgICAgICAgICAgICAgICAgICAgICYmIHN1Y2Nlc3Nvci0+bGFz
dCgpLmtpbmQub3Bjb2RlID09IEp1bXApIHsKICAgICAgICAgICAgICAgICAgICAgQmFzaWNCbG9j
ayogbmV3U3VjY2Vzc29yID0gc3VjY2Vzc29yLT5zdWNjZXNzb3JCbG9jaygwKTsKICAgICAgICAg
ICAgICAgICAgICAgaWYgKG5ld1N1Y2Nlc3NvciAhPSBzdWNjZXNzb3IpIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICh2ZXJib3NlKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpclRtcFdpZHRoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpclRtcFdpZHRoLmNwcAkocmV2aXNpb24gMjA2NjEwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJUbXBXaWR0aC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg4
LDcgKzg4LDcgQEAgdm9pZCBUbXBXaWR0aDo6cmVjb21wdXRlKENvZGUmIGNvZGUpCiAgICAgVmVj
dG9yPEluc3QqPiBtb3ZlczsKICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogY29kZSkgewog
ICAgICAgICBmb3IgKEluc3QmIGluc3QgOiAqYmxvY2spIHsKLSAgICAgICAgICAgIGlmIChpbnN0
Lm9wY29kZSA9PSBNb3ZlICYmIGluc3QuYXJnc1sxXS5pc1RtcCgpKSB7CisgICAgICAgICAgICBp
ZiAoaW5zdC5raW5kLm9wY29kZSA9PSBNb3ZlICYmIGluc3QuYXJnc1sxXS5pc1RtcCgpKSB7CiAg
ICAgICAgICAgICAgICAgaWYgKGluc3QuYXJnc1swXS5pc1RtcCgpKSB7CiAgICAgICAgICAgICAg
ICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IGJvdGggc2lkZXMgb2YgdGhlIE1vdmUgaGF2ZSBhIHdp
ZHRoIGFscmVhZHkgaW5pdGlhbGl6ZWQuIFRoZQogICAgICAgICAgICAgICAgICAgICAvLyBmaXhw
b2ludCBiZWxvdyBhc3N1bWVzIHRoYXQgaXQgbmV2ZXIgaGFzIHRvIGFkZCB0aGluZ3MgdG8gdGhl
IEhhc2hNYXAuCkBAIC0xMzUsNyArMTM1LDcgQEAgdm9pZCBUbXBXaWR0aDo6cmVjb21wdXRlKENv
ZGUmIGNvZGUpCiAgICAgd2hpbGUgKGNoYW5nZWQpIHsKICAgICAgICAgY2hhbmdlZCA9IGZhbHNl
OwogICAgICAgICBmb3IgKEluc3QqIG1vdmUgOiBtb3ZlcykgewotICAgICAgICAgICAgQVNTRVJU
KG1vdmUtPm9wY29kZSA9PSBNb3ZlKTsKKyAgICAgICAgICAgIEFTU0VSVChtb3ZlLT5raW5kLm9w
Y29kZSA9PSBNb3ZlKTsKICAgICAgICAgICAgIEFTU0VSVChtb3ZlLT5hcmdzWzBdLmlzVG1wKCkp
OwogICAgICAgICAgICAgQVNTRVJUKG1vdmUtPmFyZ3NbMV0uaXNUbXAoKSk7CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVXNlQ291bnRzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJVc2VDb3VudHMuaAkocmV2aXNpb24gMjA2
NjEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJVc2VDb3VudHMuaAkod29y
a2luZyBjb3B5KQpAQCAtODgsNyArODgsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY291bnRzLm51bURlZnMgKz0gZnJlcXVlbmN5OwogICAgICAgICAgICAgICAgICAg
ICB9KTsKIAotICAgICAgICAgICAgICAgIGlmICgoaW5zdC5vcGNvZGUgPT0gTW92ZSB8fCBpbnN0
Lm9wY29kZSA9PSBNb3ZlMzIpCisgICAgICAgICAgICAgICAgaWYgKChpbnN0LmtpbmQub3Bjb2Rl
ID09IE1vdmUgfHwgaW5zdC5raW5kLm9wY29kZSA9PSBNb3ZlMzIpCiAgICAgICAgICAgICAgICAg
ICAgICYmIGluc3QuYXJnc1swXS5pc1NvbWVJbW0oKQogICAgICAgICAgICAgICAgICAgICAmJiBp
bnN0LmFyZ3NbMV0uaXM8VGhpbmc+KCkpCiAgICAgICAgICAgICAgICAgICAgIG1fY291bnRzLmFk
ZChpbnN0LmFyZ3NbMV0uYXM8VGhpbmc+KCksIENvdW50cygpKS5pdGVyYXRvci0+dmFsdWUubnVt
Q29uc3REZWZzKys7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclZhbGlk
YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclZh
bGlkYXRlLmNwcAkocmV2aXNpb24gMjA2NjEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJWYWxpZGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk1LDEwICs5NSwxNSBAQCBw
dWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgmYXJnIDw9ICZpbnN0LmFy
Z3MubGFzdCgpLCAoIkF0ICIsIGFyZywgIiBpbiAiLCBpbnN0LCAiIGluICIsICpibG9jaykpOwog
ICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICBzd2l0Y2ggKGluc3Qub3Bjb2RlKSB7CisgICAgICAgICAgICAgICAgc3dpdGNoIChpbnN0Lmtp
bmQub3Bjb2RlKSB7CiAgICAgICAgICAgICAgICAgY2FzZSBFbnRyeVN3aXRjaDoKICAgICAgICAg
ICAgICAgICAgICAgVkFMSURBVEUoYmxvY2stPm51bVN1Y2Nlc3NvcnMoKSA9PSBtX2NvZGUucHJv
YygpLm51bUVudHJ5cG9pbnRzKCksICgiQXQgIiwgaW5zdCwgIiBpbiAiLCAqYmxvY2spKTsKICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBTaHVmZmxlOgor
ICAgICAgICAgICAgICAgICAgICAvLyBXZSBjYW4ndCBoYW5kbGUgdHJhcHBpbmcgc2h1ZmZsZXMg
YmVjYXVzZSBvZiBob3cgd2UgbG93ZXIgdGhlbS4gVGhhdCBjb3VsZAorICAgICAgICAgICAgICAg
ICAgICAvLyBiZSBmaXhlZCB0aG91Z2guCisgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKCFp
bnN0LmtpbmQudHJhcHMsICgiQXQgIiwgaW5zdCwgIiBpbiAiLCAqYmxvY2spKTsKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9vcGNvZGVfZ2VuZXJhdG9yLnJiCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvb3Bjb2RlX2dlbmVyYXRvci5yYgkocmV2aXNpb24gMjA2NjEw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9vcGNvZGVfZ2VuZXJhdG9yLnJiCSh3
b3JraW5nIGNvcHkpCkBAIC01NDUsNyArNTQ1LDcgQEAgZGVmIG1hdGNoRm9ybXMob3V0cCwgc3Bl
ZWQsIGZvcm1zLCBjb2x1bQogZW5kCiAKIGRlZiBtYXRjaEluc3RPdmVybG9hZChvdXRwLCBzcGVl
ZCwgaW5zdCkKLSAgICBvdXRwLnB1dHMgInN3aXRjaCAoI3tpbnN0fS0+b3Bjb2RlKSB7IgorICAg
IG91dHAucHV0cyAic3dpdGNoICgje2luc3R9LT5raW5kLm9wY29kZSkgeyIKICAgICAkb3Bjb2Rl
cy52YWx1ZXMuZWFjaCB7CiAgICAgICAgIHwgb3Bjb2RlIHwKICAgICAgICAgb3V0cC5wdXRzICJj
YXNlICN7b3Bjb2RlLm5hbWV9OiIKQEAgLTgzNiw3ICs4MzYsNyBAQCB3cml0ZUgoIk9wY29kZUdl
bmVyYXRlZCIpIHsKIAogICAgIG91dHAucHV0cyAiYm9vbCBJbnN0OjphZG1pdHNTdGFjayh1bnNp
Z25lZCBhcmdJbmRleCkiCiAgICAgb3V0cC5wdXRzICJ7IgotICAgIG91dHAucHV0cyAic3dpdGNo
IChvcGNvZGUpIHsiCisgICAgb3V0cC5wdXRzICJzd2l0Y2ggKGtpbmQub3Bjb2RlKSB7IgogICAg
ICRvcGNvZGVzLnZhbHVlcy5lYWNoIHsKICAgICAgICAgfCBvcGNvZGUgfAogICAgICAgICBvdXRw
LnB1dHMgImNhc2UgI3tvcGNvZGUubmFtZX06IgpAQCAtOTc4LDcgKzk3OCw3IEBAIHdyaXRlSCgi
T3Bjb2RlR2VuZXJhdGVkIikgewogCiAgICAgb3V0cC5wdXRzICJib29sIEluc3Q6OmlzVGVybWlu
YWwoKSIKICAgICBvdXRwLnB1dHMgInsiCi0gICAgb3V0cC5wdXRzICJzd2l0Y2ggKG9wY29kZSkg
eyIKKyAgICBvdXRwLnB1dHMgInN3aXRjaCAoa2luZC5vcGNvZGUpIHsiCiAgICAgZm91bmRUcnVl
ID0gZmFsc2UKICAgICAkb3Bjb2Rlcy52YWx1ZXMuZWFjaCB7CiAgICAgICAgIHwgb3Bjb2RlIHwK
QEAgLTEwMDQsNyArMTAwNCw5IEBAIHdyaXRlSCgiT3Bjb2RlR2VuZXJhdGVkIikgewogICAgIAog
ICAgIG91dHAucHV0cyAiYm9vbCBJbnN0OjpoYXNOb25BcmdOb25Db250cm9sRWZmZWN0cygpIgog
ICAgIG91dHAucHV0cyAieyIKLSAgICBvdXRwLnB1dHMgInN3aXRjaCAob3Bjb2RlKSB7IgorICAg
IG91dHAucHV0cyAiaWYgKGtpbmQudHJhcHMpIgorICAgIG91dHAucHV0cyAicmV0dXJuIHRydWU7
IgorICAgIG91dHAucHV0cyAic3dpdGNoIChraW5kLm9wY29kZSkgeyIKICAgICBmb3VuZFRydWUg
PSBmYWxzZQogICAgICRvcGNvZGVzLnZhbHVlcy5lYWNoIHsKICAgICAgICAgfCBvcGNvZGUgfApA
QCAtMTAzMCw3ICsxMDMyLDkgQEAgd3JpdGVIKCJPcGNvZGVHZW5lcmF0ZWQiKSB7CiAgICAgCiAg
ICAgb3V0cC5wdXRzICJib29sIEluc3Q6Omhhc05vbkFyZ0VmZmVjdHMoKSIKICAgICBvdXRwLnB1
dHMgInsiCi0gICAgb3V0cC5wdXRzICJzd2l0Y2ggKG9wY29kZSkgeyIKKyAgICBvdXRwLnB1dHMg
ImlmIChraW5kLnRyYXBzKSIKKyAgICBvdXRwLnB1dHMgInJldHVybiB0cnVlOyIKKyAgICBvdXRw
LnB1dHMgInN3aXRjaCAoa2luZC5vcGNvZGUpIHsiCiAgICAgZm91bmRUcnVlID0gZmFsc2UKICAg
ICAkb3Bjb2Rlcy52YWx1ZXMuZWFjaCB7CiAgICAgICAgIHwgb3Bjb2RlIHwKSW5kZXg6IFNvdXJj
ZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCShyZXZp
c2lvbiAyMDY2MTApCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDE1IEBACisyMDE2LTA5LTI5ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+
CisKKyAgICAgICAgQWlyIHNob3VsZCBoYXZlIGEgd2F5IG9mIGV4cHJlc3NpbmcgYWRkaXRpb25h
bCBpbnN0cnVjdGlvbiBmbGFncworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTYyNjk5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiB3dGYvQ29tbWFQcmludGVyLmg6CisgICAgICAgIChXVEY6OkNvbW1hUHJp
bnRlcjo6Q29tbWFQcmludGVyKToKKyAgICAgICAgKFdURjo6Q29tbWFQcmludGVyOjpkdW1wKToK
KyAgICAgICAgKFdURjo6Q29tbWFQcmludGVyOjpkaWRQcmludCk6CisKIDIwMTYtMDktMjkgIE1h
cmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgogCiAgICAgICAgIFJlLWVuYWJsZSBTdHJpbmdW
aWV3IGxpZmUtY3ljbGUgY2hlY2tpbmcuCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9Db21tYVByaW50
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9Db21tYVByaW50ZXIuaAkocmV2aXNp
b24gMjA2NjEwKQorKysgU291cmNlL1dURi93dGYvQ29tbWFQcmludGVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTMyLDI1ICszMiwzMCBAQCBuYW1lc3BhY2UgV1RGIHsKIAogY2xhc3MgQ29tbWFQcmludGVy
IHsKIHB1YmxpYzoKLSAgICBDb21tYVByaW50ZXIoY29uc3QgY2hhciogY29tbWEgPSAiLCAiKQor
ICAgIENvbW1hUHJpbnRlcihjb25zdCBjaGFyKiBjb21tYSA9ICIsICIsIGNvbnN0IGNoYXIqIHN0
YXJ0ID0gIiIpCiAgICAgICAgIDogbV9jb21tYShjb21tYSkKLSAgICAgICAgLCBtX2lzRmlyc3Qo
dHJ1ZSkKKyAgICAgICAgLCBtX3N0YXJ0KHN0YXJ0KQorICAgICAgICAsIG1fZGlkUHJpbnQoZmFs
c2UpCiAgICAgewogICAgIH0KICAgICAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkg
Y29uc3QKICAgICB7Ci0gICAgICAgIGlmIChtX2lzRmlyc3QpIHsKLSAgICAgICAgICAgIG1faXNG
aXJzdCA9IGZhbHNlOworICAgICAgICBpZiAoIW1fZGlkUHJpbnQpIHsKKyAgICAgICAgICAgIG91
dC5wcmludChtX3N0YXJ0KTsKKyAgICAgICAgICAgIG1fZGlkUHJpbnQgPSB0cnVlOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBvdXQucHJpbnQobV9j
b21tYSk7CiAgICAgfQogICAgIAorICAgIGJvb2wgZGlkUHJpbnQoKSBjb25zdCB7IHJldHVybiBt
X2RpZFByaW50OyB9CisgICAgCiBwcml2YXRlOgogICAgIGNvbnN0IGNoYXIqIG1fY29tbWE7Ci0g
ICAgbXV0YWJsZSBib29sIG1faXNGaXJzdDsKKyAgICBjb25zdCBjaGFyKiBtX3N0YXJ0OworICAg
IG11dGFibGUgYm9vbCBtX2RpZFByaW50OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV1RGCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>290342</attachid>
            <date>2016-09-30 09:53:01 -0700</date>
            <delta_ts>2016-09-30 09:58:43 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>53944</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjA2NjE5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk0IEBA
CisyMDE2LTA5LTI5ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
QWlyIHNob3VsZCBoYXZlIGEgd2F5IG9mIGV4cHJlc3NpbmcgYWRkaXRpb25hbCBpbnN0cnVjdGlv
biBmbGFncworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTYyNjk5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTWFyayBMYW0uCisgICAgICAgIAorICAgICAg
ICBUaGlzIGZvbGxvd3MgYSBzaW1pbGFyIGNoYW5nZSBpbiBCMyAocjIwNjU5NSkgYW5kIHJlcGxh
Y2VzIEFpcjo6T3Bjb2RlIHdpdGggQWlyOjpLaW5kLAorICAgICAgICB3aGljaCBob2xkcyBvbnRv
IHRoZSBvcGNvZGUgYW5kIHNvbWUgYWRkaXRpb25hbCBmbGFncy4gQmVjYXVzZSBBaXIgaXMgYW4g
b3J0aG9nb25hbCBJU0EKKyAgICAgICAgKHRoZSBvcGNvZGUgdGVsbHMgeW91IHdoYXQgdGhlIG9w
ZXJhdGlvbiBkb2VzIGJ1dCBlYWNoIG9wZXJhbmQgaXMgYWxsb3dlZCB0byBhbHNvIGNvbnRhaW4K
KyAgICAgICAgZWZmZWN0aXZlbHkgaW5zdHJ1Y3Rpb25zIGZvciB3aGF0IHRvIGRvIHRvIHJlYWQg
b3Igd3JpdGUgdGhhdCBvcGVyYW5kKSwgdGhlIGZsYWdzIGFyZQorICAgICAgICBtZWFudCB0byBi
ZSBvcnRob2dvbmFsIHRvIG9wY29kZS4gVGhpcyBhbGxvd3MgdXMgdG8gc2F5IHRoaW5ncyBsaWtl
IEFkZDMyPFRyYXA+LCB3aGljaAorICAgICAgICBtYWtlcyBzZW5zZSBpZiBhbnkgb2YgdGhlIG9w
ZXJhbmRzIHRvIHRoZSBBZGQzMiBhcmUgYWRkcmVzc2VzLgorICAgICAgICAKKyAgICAgICAgVG8g
ZGVtb25zdHJhdGUgdGhlIGZsYWdzIGZhY2lsaXR5IHRoaXMgcGFydGx5IGFkZHMgYSB0cmFwIGZs
YWcgdG8gQWlyLiBCMyBkb2Vzbid0IHVzZSBpdAorICAgICAgICB5ZXQsIGJ1dCBJIG1hZGUgc3Vy
ZSB0aGF0IEFpciByZXNwZWN0cyBpdC4gQmFzaWNhbGx5IHRoYXQgbWVhbnMgYmxvY2tpbmcgRENF
IHdoZW4gdGhlIGZsYWcKKyAgICAgICAgaXMgc2V0LCBieSBtYWtpbmcgaXQgaW1wbHkgaGFzTm9u
QXJnTm9uQ29udHJvbEVmZmVjdHMuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAg
ICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAq
IGIzL0IzQ2hlY2tTcGVjaWFsLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6bnVtQjNBcmdz
KToKKyAgICAgICAgKEpTQzo6QjM6OkNoZWNrU3BlY2lhbDo6S2V5OjpLZXkpOgorICAgICAgICAo
SlNDOjpCMzo6Q2hlY2tTcGVjaWFsOjpLZXk6OmR1bXApOgorICAgICAgICAoSlNDOjpCMzo6Q2hl
Y2tTcGVjaWFsOjpDaGVja1NwZWNpYWwpOgorICAgICAgICAoSlNDOjpCMzo6Q2hlY2tTcGVjaWFs
OjpoaWRkZW5CcmFuY2gpOgorICAgICAgICAoSlNDOjpCMzo6Q2hlY2tTcGVjaWFsOjpmb3JFYWNo
QXJnKToKKyAgICAgICAgKEpTQzo6QjM6OkNoZWNrU3BlY2lhbDo6Z2VuZXJhdGUpOgorICAgICAg
ICAoSlNDOjpCMzo6Q2hlY2tTcGVjaWFsOjpkdW1wSW1wbCk6CisgICAgICAgIChKU0M6OkIzOjpD
aGVja1NwZWNpYWw6OmRlZXBEdW1wSW1wbCk6CisgICAgICAgICogYjMvQjNDaGVja1NwZWNpYWwu
aDoKKyAgICAgICAgKEpTQzo6QjM6OkNoZWNrU3BlY2lhbDo6S2V5OjpLZXkpOgorICAgICAgICAo
SlNDOjpCMzo6Q2hlY2tTcGVjaWFsOjpLZXk6Om9wZXJhdG9yPT0pOgorICAgICAgICAoSlNDOjpC
Mzo6Q2hlY2tTcGVjaWFsOjpLZXk6OmtpbmQpOgorICAgICAgICAoSlNDOjpCMzo6Q2hlY2tTcGVj
aWFsOjpLZXk6Omhhc2gpOgorICAgICAgICAoSlNDOjpCMzo6Q2hlY2tTcGVjaWFsOjpLZXk6Om9w
Y29kZSk6IERlbGV0ZWQuCisgICAgICAgICogYjMvQjNLaW5kLmNwcDoKKyAgICAgICAgKEpTQzo6
QjM6OktpbmQ6OmR1bXApOgorICAgICAgICAqIGIzL2Fpci9BaXJEdW1wQXNKUy5jcHA6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6OmR1bXBBc0pTKToKKyAgICAgICAgKiBiMy9haXIvQWlyRml4T2J2
aW91c1NwaWxscy5jcHA6CisgICAgICAgICogYjMvYWlyL0FpckZpeFBhcnRpYWxSZWdpc3RlclN0
YWxscy5jcHA6CisgICAgICAgICogYjMvYWlyL0FpckdlbmVyYXRlLmNwcDoKKyAgICAgICAgKEpT
Qzo6QjM6OkFpcjo6Z2VuZXJhdGUpOgorICAgICAgICAqIGIzL2Fpci9BaXJIYW5kbGVDYWxsZWVT
YXZlcy5jcHA6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OmhhbmRsZUNhbGxlZVNhdmVzKToKKyAg
ICAgICAgKiBiMy9haXIvQWlySW5zdC5jcHA6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okluc3Q6
OmpzSGFzaCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okluc3Q6OmR1bXApOgorICAgICAgICAq
IGIzL2Fpci9BaXJJbnN0Lmg6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okluc3Q6Okluc3QpOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpJbnN0OjpraW5kKToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6SW5zdDo6b3BlcmF0b3IgYm9vbCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okluc3Q6Om9w
Y29kZSk6IERlbGV0ZWQuCisgICAgICAgICogYjMvYWlyL0Fpckluc3RJbmxpbmVzLmg6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6Okluc3Q6OmV4dHJhQ2xvYmJlcmVkUmVncyk6CisgICAgICAgIChK
U0M6OkIzOjpBaXI6Okluc3Q6OmV4dHJhRWFybHlDbG9iYmVyZWRSZWdzKToKKyAgICAgICAgKEpT
Qzo6QjM6OkFpcjo6SW5zdDo6Zm9yRWFjaERlZldpdGhFeHRyYUNsb2JiZXJlZFJlZ3MpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpJbnN0OjpyZXBvcnRVc2VkUmVnaXN0ZXJzKToKKyAgICAgICAg
KEpTQzo6QjM6OkFpcjo6SW5zdDo6c2hvdWxkVHJ5QWxpYXNpbmdEZWYpOgorICAgICAgICAqIGIz
L2Fpci9BaXJJdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZy5jcHA6CisgICAgICAgICogYjMvYWly
L0FpcktpbmQuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6S2luZDo6ZHVtcCk6
CisgICAgICAgICogYjMvYWlyL0FpcktpbmQuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpB
aXI6OktpbmQ6OktpbmQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpLaW5kOjpvcGVyYXRvcj09
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6S2luZDo6b3BlcmF0b3IhPSk6CisgICAgICAgIChK
U0M6OkIzOjpBaXI6OktpbmQ6Omhhc2gpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpLaW5kOjpv
cGVyYXRvciBib29sKToKKyAgICAgICAgKiBiMy9haXIvQWlyTG93ZXJBZnRlclJlZ0FsbG9jLmNw
cDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6bG93ZXJBZnRlclJlZ0FsbG9jKToKKyAgICAgICAg
KiBiMy9haXIvQWlyTG93ZXJFbnRyeVN3aXRjaC5jcHA6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
Omxvd2VyRW50cnlTd2l0Y2gpOgorICAgICAgICAqIGIzL2Fpci9BaXJMb3dlck1hY3Jvcy5jcHA6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6Omxvd2VyTWFjcm9zKToKKyAgICAgICAgKiBiMy9haXIv
QWlyT3B0aW1pemVCbG9ja09yZGVyLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6b3B0aW1p
emVCbG9ja09yZGVyKToKKyAgICAgICAgKiBiMy9haXIvQWlyUmVwb3J0VXNlZFJlZ2lzdGVycy5j
cHA6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OnJlcG9ydFVzZWRSZWdpc3RlcnMpOgorICAgICAg
ICAqIGIzL2Fpci9BaXJTaW1wbGlmeUNGRy5jcHA6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OnNp
bXBsaWZ5Q0ZHKToKKyAgICAgICAgKiBiMy9haXIvQWlyVG1wV2lkdGguY3BwOgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpUbXBXaWR0aDo6cmVjb21wdXRlKToKKyAgICAgICAgKiBiMy9haXIvQWly
VXNlQ291bnRzLmg6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlVzZUNvdW50czo6VXNlQ291bnRz
KToKKyAgICAgICAgKiBiMy9haXIvQWlyVmFsaWRhdGUuY3BwOgorICAgICAgICAqIGIzL2Fpci9v
cGNvZGVfZ2VuZXJhdG9yLnJiOgorICAgICAgICAqIGIzL3Rlc3RiMy5jcHA6CisgICAgICAgIChK
U0M6OkIzOjp0ZXN0VGVybmFyeVN1Ykluc3RydWN0aW9uU2VsZWN0aW9uKToKKyAgICAgICAgKEpT
Qzo6QjM6OnRlc3RCcmFuY2hCaXRBbmRJbW1GdXNpb24pOgorCiAyMDE2LTA5LTI5ICBKb3NlcGgg
UGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CiAKICAgICAgICAgQXJyb3cgZnVuY3Rpb25z
IGRvIG5vdCBpbmZlciBuYW1lIGZyb20gY29tcHV0ZWQgcHJvcGVydHkgYnV0IG5vcm1hbCBmdW5j
dGlvbnMgZG8KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9u
IDIwNjYxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2lu
ZyBjb3B5KQpAQCAtODgsNiArODgsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAg
IGIzL2Fpci9BaXJJbnNlcnRpb25TZXQuY3BwCiAgICAgYjMvYWlyL0Fpckluc3QuY3BwCiAgICAg
YjMvYWlyL0Fpckl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nLmNwcAorICAgIGIzL2Fpci9BaXJL
aW5kLmNwcAogICAgIGIzL2Fpci9BaXJMb2dSZWdpc3RlclByZXNzdXJlLmNwcAogICAgIGIzL2Fp
ci9BaXJMb3dlckFmdGVyUmVnQWxsb2MuY3BwCiAgICAgYjMvYWlyL0Fpckxvd2VyRW50cnlTd2l0
Y2guY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjA2NjEw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTcyOCw2ICs3MjgsOCBAQAogCQkwRkREQkZC
NjE2NjZFRURBMDBDNTVGRUYgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEREJGQjMxNjY2RUVENTAw
QzU1RkVGIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuaCAqLzsgfTsKIAkJMEZERjY3RDIx
RDlDNkQyNzAwMUI5ODI1IC8qIEIzS2luZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZERjY3RDExRDlDNjA4NjAwMUI5ODI1IC8qIEIzS2luZC5oICov
OyB9OwogCQkwRkRGNjdEMzFEOUM2RDJBMDAxQjk4MjUgLyogQjNLaW5kLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGREY2N0QwMUQ5QzYwODYwMDFC
OTgyNSAvKiBCM0tpbmQuY3BwICovOyB9OworCQkwRkRGNjdENjFEOURDNDQwMDAxQjk4MjUgLyog
QWlyS2luZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkRGNjdENDFEOURDNDNFMDAxQjk4MjUgLyogQWlyS2luZC5jcHAgKi87IH07CisJCTBGREY2
N0Q3MUQ5REM0NDIwMDFCOTgyNSAvKiBBaXJLaW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkRGNjdENTFEOURDNDNFMDAxQjk4MjUgLyogQWlyS2lu
ZC5oICovOyB9OwogCQkwRkRGNzA4NTFEM0YyQzIyMDA5Mjc0NDkgLyogQWlyTG93ZXJFbnRyeVN3
aXRjaC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkRGNzA4MzFEM0YyQzFGMDA5Mjc0NDkgLyogQWlyTG93ZXJFbnRyeVN3aXRjaC5jcHAgKi87IH07
CiAJCTBGREY3MDg2MUQzRjJDMjUwMDkyNzQ0OSAvKiBBaXJMb3dlckVudHJ5U3dpdGNoLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkRGNzA4NDFEM0Yy
QzFGMDA5Mjc0NDkgLyogQWlyTG93ZXJFbnRyeVN3aXRjaC5oICovOyB9OwogCQkwRkUwNTAxNDFB
QTkwOTExMDBEMzNCMzMgLyogQXJndW1lbnRzTW9kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFMDUwMEMxQUE5MDkxMTAwRDMzQjMzIC8qIEFyZ3Vt
ZW50c01vZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwpAQCAtMjk4Nyw2ICsyOTg5LDggQEAKIAkJMEZEREJGQjMxNjY2RUVENTAwQzU1RkVGIC8qIERG
R1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oOyBwYXRoID0gZGZnL0RGR1ZhcmlhYmxlQWNj
ZXNzRGF0YUR1bXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZERjY3RDAxRDlD
NjA4NjAwMUI5ODI1IC8qIEIzS2luZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBCM0tpbmQuY3BwOyBwYXRoID0gYjMvQjNLaW5kLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEZERjY3RDExRDlDNjA4NjAwMUI5ODI1IC8qIEIzS2luZC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0tpbmQuaDsgcGF0aCA9IGIzL0IzS2luZC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkRGNjdENDFEOURDNDNFMDAxQjk4MjUg
LyogQWlyS2luZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJL
aW5kLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJLaW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEZERjY3RDUxRDlEQzQzRTAwMUI5ODI1IC8qIEFpcktpbmQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyS2luZC5oOyBwYXRoID0gYjMvYWlyL0FpcktpbmQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZERjcwODMxRDNGMkMxRjAwOTI3NDQ5
IC8qIEFpckxvd2VyRW50cnlTd2l0Y2guY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBuYW1lID0gQWlyTG93ZXJFbnRyeVN3aXRjaC5jcHA7IHBhdGggPSBiMy9haXIvQWlyTG93ZXJF
bnRyeVN3aXRjaC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGREY3MDg0MUQz
RjJDMUYwMDkyNzQ0OSAvKiBBaXJMb3dlckVudHJ5U3dpdGNoLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IEFpckxvd2VyRW50cnlTd2l0Y2guaDsgcGF0aCA9IGIzL2Fpci9BaXJM
b3dlckVudHJ5U3dpdGNoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRTA1MDBD
MUFBOTA5MTEwMEQzM0IzMyAvKiBBcmd1bWVudHNNb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEFyZ3VtZW50c01vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTUwMTMsNiArNTAxNyw4IEBACiAJCQkJMEZFQzg1NUMxQkRBQ0RDNzAwODBGRjc0IC8qIEFp
ckluc3RJbmxpbmVzLmggKi8sCiAJCQkJMjY3MThCQTIxQkU5OUY3ODAwNTIwMTdCIC8qIEFpckl0
ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nLmNwcCAqLywKIAkJCQkyNjcxOEJBMzFCRTk5Rjc4MDA1
MjAxN0IgLyogQWlySXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmcuaCAqLywKKwkJCQkwRkRGNjdE
NDFEOURDNDNFMDAxQjk4MjUgLyogQWlyS2luZC5jcHAgKi8sCisJCQkJMEZERjY3RDUxRDlEQzQz
RTAwMUI5ODI1IC8qIEFpcktpbmQuaCAqLywKIAkJCQkyNjg0RDQzNzFDMDAxNjFDMDA4MUQ2NjMg
LyogQWlyTGl2ZW5lc3MuaCAqLywKIAkJCQkwRkUzNEMxNzFDNEIzOUFFMDAwM0E1MTIgLyogQWly
TG9nUmVnaXN0ZXJQcmVzc3VyZS5jcHAgKi8sCiAJCQkJMEZFMzRDMTgxQzRCMzlBRTAwMDNBNTEy
IC8qIEFpckxvZ1JlZ2lzdGVyUHJlc3N1cmUuaCAqLywKQEAgLTc1NTksNiArNzU2NSw3IEBACiAJ
CQkJQTdEODlDRkUxN0EwQjhDQzAwNzczQUQ4IC8qIERGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lz
UGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRDgyRTU3MTQxREFGMTAwMDE3OUM5NCAvKiBE
RkdPU1JFbnRyeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY0MEU0QTcxQzQ5N0Y3NDAwQTU3N0ZB
IC8qIEFpck9wY29kZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZERjY3RDcxRDlEQzQ0MjAwMUI5
ODI1IC8qIEFpcktpbmQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRDhBMzI2MTdENTFGNTcwMENB
MkM0MCAvKiBERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEZDMDk3NkExNDY4QTZGNzAwQ0YyNDQyIC8qIERGR09TUkV4aXQuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGMjM1QkVDMTcxNzhFNzMwMDY5MEM3RiAvKiBERkdPU1JFeGl0QmFzZS5oIGluIEhl
YWRlcnMgKi8sCkBAIC04OTI4LDYgKzg5MzUsNyBAQAogCQkJCTBGNDU3MDM4MUJFNDRDOTEwMDYy
QTYyOSAvKiBBaXJFbGltaW5hdGVEZWFkQ29kZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0M0FC
MjZDNzFDMUE1MzVDMDBEODJBRTYgLyogQjNNYXRoRXh0cmFzLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGRUM4NTc4MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJHZW5lcmF0ZS5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQkwRkRGNjdENjFEOURDNDQwMDAxQjk4MjUgLyogQWlyS2luZC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRkVDODU5MzFCREIxRTEwMDA4MEZGNzQgLyogQWlyR2VuZXJhdGVkLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTUzNDg2QkJCMUMxOEU4NDUwMEY2RjNBRiAvKiBKU1R5cGVk
QXJyYXkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFQzg1N0IxQkRBQ0RDNzAwODBGRjc0IC8q
IEFpckhhbmRsZUNhbGxlZVNhdmVzLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tTcGVjaWFsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1NwZWNpYWwuY3BwCShyZXZpc2lvbiAyMDY2MTApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1NwZWNpYWwuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00MCw5ICs0MCw5IEBAIHVzaW5nIG5hbWVzcGFjZSBBaXI7CiAKIG5hbWVzcGFjZSB7
CiAKLXVuc2lnbmVkIG51bUIzQXJncyhCMzo6T3Bjb2RlIG9wY29kZSkKK3Vuc2lnbmVkIG51bUIz
QXJncyhCMzo6S2luZCBraW5kKQogewotICAgIHN3aXRjaCAob3Bjb2RlKSB7CisgICAgc3dpdGNo
IChraW5kLm9wY29kZSgpKSB7CiAgICAgY2FzZSBDaGVja0FkZDoKICAgICBjYXNlIENoZWNrU3Vi
OgogICAgIGNhc2UgQ2hlY2tNdWw6CkBAIC01Nyw3ICs1Nyw3IEBAIHVuc2lnbmVkIG51bUIzQXJn
cyhCMzo6T3Bjb2RlIG9wY29kZSkKIAogdW5zaWduZWQgbnVtQjNBcmdzKFZhbHVlKiB2YWx1ZSkK
IHsKLSAgICByZXR1cm4gbnVtQjNBcmdzKHZhbHVlLT5vcGNvZGUoKSk7CisgICAgcmV0dXJuIG51
bUIzQXJncyh2YWx1ZS0+a2luZCgpKTsKIH0KIAogdW5zaWduZWQgbnVtQjNBcmdzKEluc3QmIGlu
c3QpCkBAIC02OSwyNiArNjksMjYgQEAgdW5zaWduZWQgbnVtQjNBcmdzKEluc3QmIGluc3QpCiAK
IENoZWNrU3BlY2lhbDo6S2V5OjpLZXkoY29uc3QgSW5zdCYgaW5zdCkKIHsKLSAgICBtX29wY29k
ZSA9IGluc3Qub3Bjb2RlOworICAgIG1fa2luZCA9IGluc3Qua2luZDsKICAgICBtX251bUFyZ3Mg
PSBpbnN0LmFyZ3Muc2l6ZSgpOwogICAgIG1fc3RhY2ttYXBSb2xlID0gU2FtZUFzUmVwOwogfQog
CiB2b2lkIENoZWNrU3BlY2lhbDo6S2V5OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7
Ci0gICAgb3V0LnByaW50KG1fb3Bjb2RlLCAiKCIsIG1fbnVtQXJncywgIiwiLCBtX3N0YWNrbWFw
Um9sZSwgIikiKTsKKyAgICBvdXQucHJpbnQobV9raW5kLCAiKCIsIG1fbnVtQXJncywgIiwiLCBt
X3N0YWNrbWFwUm9sZSwgIikiKTsKIH0KIAotQ2hlY2tTcGVjaWFsOjpDaGVja1NwZWNpYWwoQWly
OjpPcGNvZGUgb3Bjb2RlLCB1bnNpZ25lZCBudW1BcmdzLCBSb2xlTW9kZSBzdGFja21hcFJvbGUp
Ci0gICAgOiBtX2NoZWNrT3Bjb2RlKG9wY29kZSkKK0NoZWNrU3BlY2lhbDo6Q2hlY2tTcGVjaWFs
KEFpcjo6S2luZCBraW5kLCB1bnNpZ25lZCBudW1BcmdzLCBSb2xlTW9kZSBzdGFja21hcFJvbGUp
CisgICAgOiBtX2NoZWNrS2luZChraW5kKQogICAgICwgbV9zdGFja21hcFJvbGUoc3RhY2ttYXBS
b2xlKQogICAgICwgbV9udW1DaGVja0FyZ3MobnVtQXJncykKIHsKLSAgICBBU1NFUlQoaXNEZWZp
bml0ZWx5VGVybWluYWwob3Bjb2RlKSk7CisgICAgQVNTRVJUKGlzRGVmaW5pdGVseVRlcm1pbmFs
KGtpbmQub3Bjb2RlKSk7CiB9CiAKIENoZWNrU3BlY2lhbDo6Q2hlY2tTcGVjaWFsKGNvbnN0IENo
ZWNrU3BlY2lhbDo6S2V5JiBrZXkpCi0gICAgOiBDaGVja1NwZWNpYWwoa2V5Lm9wY29kZSgpLCBr
ZXkubnVtQXJncygpLCBrZXkuc3RhY2ttYXBSb2xlKCkpCisgICAgOiBDaGVja1NwZWNpYWwoa2V5
LmtpbmQoKSwga2V5Lm51bUFyZ3MoKSwga2V5LnN0YWNrbWFwUm9sZSgpKQogewogfQogCkBAIC05
OCw3ICs5OCw3IEBAIENoZWNrU3BlY2lhbDo6fkNoZWNrU3BlY2lhbCgpCiAKIEluc3QgQ2hlY2tT
cGVjaWFsOjpoaWRkZW5CcmFuY2goY29uc3QgSW5zdCYgaW5zdCkgY29uc3QKIHsKLSAgICBJbnN0
IGhpZGRlbkJyYW5jaChtX2NoZWNrT3Bjb2RlLCBpbnN0Lm9yaWdpbik7CisgICAgSW5zdCBoaWRk
ZW5CcmFuY2gobV9jaGVja0tpbmQsIGluc3Qub3JpZ2luKTsKICAgICBoaWRkZW5CcmFuY2guYXJn
cy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fbnVtQ2hlY2tBcmdzKTsKICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbV9udW1DaGVja0FyZ3M7ICsraSkKICAgICAgICAgaGlkZGVuQnJhbmNo
LmFyZ3MuYXBwZW5kKGluc3QuYXJnc1tpICsgMV0pOwpAQCAtMTE2LDcgKzExNiw3IEBAIHZvaWQg
Q2hlY2tTcGVjaWFsOjpmb3JFYWNoQXJnKEluc3QmIGluc3QKICAgICAgICAgfSk7CiAKICAgICBP
cHRpb25hbDx1bnNpZ25lZD4gZmlyc3RSZWNvdmVyYWJsZUluZGV4OwotICAgIGlmIChtX2NoZWNr
T3Bjb2RlID09IEJyYW5jaEFkZDMyIHx8IG1fY2hlY2tPcGNvZGUgPT0gQnJhbmNoQWRkNjQpCisg
ICAgaWYgKG1fY2hlY2tLaW5kLm9wY29kZSA9PSBCcmFuY2hBZGQzMiB8fCBtX2NoZWNrS2luZC5v
cGNvZGUgPT0gQnJhbmNoQWRkNjQpCiAgICAgICAgIGZpcnN0UmVjb3ZlcmFibGVJbmRleCA9IDE7
CiAgICAgZm9yRWFjaEFyZ0ltcGwobnVtQjNBcmdzKGluc3QpLCBtX251bUNoZWNrQXJncyArIDEs
IGluc3QsIG1fc3RhY2ttYXBSb2xlLCBmaXJzdFJlY292ZXJhYmxlSW5kZXgsIGNhbGxiYWNrKTsK
IH0KQEAgLTE2NCw3ICsxNjQsNyBAQCBDQ2FsbEhlbHBlcnM6Okp1bXAgQ2hlY2tTcGVjaWFsOjpn
ZW5lcmF0CiAgICAgICAgICAgICAgICAgZmFpbC5saW5rKCZqaXQpOwogCiAgICAgICAgICAgICAg
ICAgLy8gSWYgbmVjZXNzYXJ5LCB1bmRvIHRoZSBvcGVyYXRpb24uCi0gICAgICAgICAgICAgICAg
c3dpdGNoIChtX2NoZWNrT3Bjb2RlKSB7CisgICAgICAgICAgICAgICAgc3dpdGNoIChtX2NoZWNr
S2luZC5vcGNvZGUpIHsKICAgICAgICAgICAgICAgICBjYXNlIEJyYW5jaEFkZDMyOgogICAgICAg
ICAgICAgICAgICAgICBpZiAoKG1fbnVtQ2hlY2tBcmdzID09IDQgJiYgYXJnc1sxXSA9PSBhcmdz
WzJdICYmIGFyZ3NbMl0gPT0gYXJnc1szXSkKICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICht
X251bUNoZWNrQXJncyA9PSAzICYmIGFyZ3NbMV0gPT0gYXJnc1syXSkpIHsKQEAgLTIzNSwxMiAr
MjM1LDEyIEBAIENDYWxsSGVscGVyczo6SnVtcCBDaGVja1NwZWNpYWw6OmdlbmVyYXQKIAogdm9p
ZCBDaGVja1NwZWNpYWw6OmR1bXBJbXBsKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7Ci0gICAg
b3V0LnByaW50KG1fY2hlY2tPcGNvZGUsICIoIiwgbV9udW1DaGVja0FyZ3MsICIsIiwgbV9zdGFj
a21hcFJvbGUsICIpIik7CisgICAgb3V0LnByaW50KG1fY2hlY2tLaW5kLCAiKCIsIG1fbnVtQ2hl
Y2tBcmdzLCAiLCIsIG1fc3RhY2ttYXBSb2xlLCAiKSIpOwogfQogCiB2b2lkIENoZWNrU3BlY2lh
bDo6ZGVlcER1bXBJbXBsKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7Ci0gICAgb3V0LnByaW50
KCJCMzo6Q2hlY2tWYWx1ZSBsb3dlcmVkIHRvICIsIG1fY2hlY2tPcGNvZGUsICIgd2l0aCAiLCBt
X251bUNoZWNrQXJncywgIiBhcmdzLiIpOworICAgIG91dC5wcmludCgiQjM6OkNoZWNrVmFsdWUg
bG93ZXJlZCB0byAiLCBtX2NoZWNrS2luZCwgIiB3aXRoICIsIG1fbnVtQ2hlY2tBcmdzLCAiIGFy
Z3MuIik7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzQ2hlY2tTcGVjaWFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzQ2hlY2tTcGVjaWFsLmgJKHJldmlzaW9uIDIwNjYxMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrU3BlY2lhbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDcg
KzI4LDcgQEAKICNpZiBFTkFCTEUoQjNfSklUKQogCiAjaW5jbHVkZSAiQWlyQXJnLmgiCi0jaW5j
bHVkZSAiQWlyT3Bjb2RlLmgiCisjaW5jbHVkZSAiQWlyS2luZC5oIgogI2luY2x1ZGUgIkIzU3Rh
Y2ttYXBTcGVjaWFsLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KIApAQCAtNTUsMTQgKzU1
LDEzIEBAIHB1YmxpYzoKICAgICBjbGFzcyBLZXkgewogICAgIHB1YmxpYzoKICAgICAgICAgS2V5
KCkKLSAgICAgICAgICAgIDogbV9vcGNvZGUoQWlyOjpOb3ApCi0gICAgICAgICAgICAsIG1fc3Rh
Y2ttYXBSb2xlKFNhbWVBc1JlcCkKKyAgICAgICAgICAgIDogbV9zdGFja21hcFJvbGUoU2FtZUFz
UmVwKQogICAgICAgICAgICAgLCBtX251bUFyZ3MoMCkKICAgICAgICAgewogICAgICAgICB9CiAg
ICAgICAgIAotICAgICAgICBLZXkoQWlyOjpPcGNvZGUgb3Bjb2RlLCB1bnNpZ25lZCBudW1Bcmdz
LCBSb2xlTW9kZSBzdGFja21hcFJvbGUgPSBTYW1lQXNSZXApCi0gICAgICAgICAgICA6IG1fb3Bj
b2RlKG9wY29kZSkKKyAgICAgICAgS2V5KEFpcjo6S2luZCBraW5kLCB1bnNpZ25lZCBudW1Bcmdz
LCBSb2xlTW9kZSBzdGFja21hcFJvbGUgPSBTYW1lQXNSZXApCisgICAgICAgICAgICA6IG1fa2lu
ZChraW5kKQogICAgICAgICAgICAgLCBtX3N0YWNrbWFwUm9sZShzdGFja21hcFJvbGUpCiAgICAg
ICAgICAgICAsIG1fbnVtQXJncyhudW1BcmdzKQogICAgICAgICB7CkBAIC03Miw3ICs3MSw3IEBA
IHB1YmxpYzoKIAogICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgS2V5JiBvdGhlcikgY29u
c3QKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1fb3Bjb2RlID09IG90aGVyLm1fb3Bj
b2RlCisgICAgICAgICAgICByZXR1cm4gbV9raW5kID09IG90aGVyLm1fa2luZAogICAgICAgICAg
ICAgICAgICYmIG1fbnVtQXJncyA9PSBvdGhlci5tX251bUFyZ3MKICAgICAgICAgICAgICAgICAm
JiBtX3N0YWNrbWFwUm9sZSA9PSBvdGhlci5tX3N0YWNrbWFwUm9sZTsKICAgICAgICAgfQpAQCAt
ODQsMTUgKzgzLDE0IEBAIHB1YmxpYzoKIAogICAgICAgICBleHBsaWNpdCBvcGVyYXRvciBib29s
KCkgY29uc3QgeyByZXR1cm4gKnRoaXMgIT0gS2V5KCk7IH0KIAotICAgICAgICBBaXI6Ok9wY29k
ZSBvcGNvZGUoKSBjb25zdCB7IHJldHVybiBtX29wY29kZTsgfQorICAgICAgICBBaXI6OktpbmQg
a2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQogICAgICAgICB1bnNpZ25lZCBudW1Bcmdz
KCkgY29uc3QgeyByZXR1cm4gbV9udW1BcmdzOyB9CiAgICAgICAgIFJvbGVNb2RlIHN0YWNrbWFw
Um9sZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhY2ttYXBSb2xlOyB9CiAKICAgICAgICAgdm9pZCBk
dW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OwogCiAgICAgICAgIEtleShXVEY6Okhhc2hUYWJs
ZURlbGV0ZWRWYWx1ZVR5cGUpCi0gICAgICAgICAgICA6IG1fb3Bjb2RlKEFpcjo6Tm9wKQotICAg
ICAgICAgICAgLCBtX3N0YWNrbWFwUm9sZShTYW1lQXNSZXApCisgICAgICAgICAgICA6IG1fc3Rh
Y2ttYXBSb2xlKFNhbWVBc1JlcCkKICAgICAgICAgICAgICwgbV9udW1BcmdzKDEpCiAgICAgICAg
IHsKICAgICAgICAgfQpAQCAtMTA1LDE2ICsxMDMsMTYgQEAgcHVibGljOgogICAgICAgICB1bnNp
Z25lZCBoYXNoKCkgY29uc3QKICAgICAgICAgewogICAgICAgICAgICAgLy8gU2VyaW91c2x5LCB3
ZSBkb24ndCBuZWVkIHRvIGJlIHNtYXJ0IGhlcmUuIEl0IGp1c3QgZG9lc24ndCBtYXR0ZXIuCi0g
ICAgICAgICAgICByZXR1cm4gbV9vcGNvZGUgKyBtX251bUFyZ3MgKyBtX3N0YWNrbWFwUm9sZTsK
KyAgICAgICAgICAgIHJldHVybiBtX2tpbmQuaGFzaCgpICsgbV9udW1BcmdzICsgbV9zdGFja21h
cFJvbGU7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgcHJpdmF0ZToKLSAgICAgICAgQWlyOjpP
cGNvZGUgbV9vcGNvZGU7CisgICAgICAgIEFpcjo6S2luZCBtX2tpbmQ7CiAgICAgICAgIFJvbGVN
b2RlIG1fc3RhY2ttYXBSb2xlOwogICAgICAgICB1bnNpZ25lZCBtX251bUFyZ3M7CiAgICAgfTsK
ICAgICAKLSAgICBDaGVja1NwZWNpYWwoQWlyOjpPcGNvZGUsIHVuc2lnbmVkIG51bUFyZ3MsIFJv
bGVNb2RlIHN0YWNrbWFwUm9sZSA9IFNhbWVBc1JlcCk7CisgICAgQ2hlY2tTcGVjaWFsKEFpcjo6
S2luZCwgdW5zaWduZWQgbnVtQXJncywgUm9sZU1vZGUgc3RhY2ttYXBSb2xlID0gU2FtZUFzUmVw
KTsKICAgICBDaGVja1NwZWNpYWwoY29uc3QgS2V5Jik7CiAgICAgfkNoZWNrU3BlY2lhbCgpOwog
CkBAIC0xMzYsNyArMTM0LDcgQEAgcHJvdGVjdGVkOgogICAgIHZvaWQgZGVlcER1bXBJbXBsKFBy
aW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CiAKIHByaXZhdGU6Ci0gICAgQWlyOjpPcGNvZGUg
bV9jaGVja09wY29kZTsKKyAgICBBaXI6OktpbmQgbV9jaGVja0tpbmQ7CiAgICAgUm9sZU1vZGUg
bV9zdGFja21hcFJvbGU7CiAgICAgdW5zaWduZWQgbV9udW1DaGVja0FyZ3M7CiB9OwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzS2luZC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzS2luZC5jcHAJKHJldmlzaW9uIDIwNjYxMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0tpbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxNCAr
MzUsMTIgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CiB2b2lkIEtpbmQ6OmR1bXAo
UHJpbnRTdHJlYW0mIG91dCkgY29uc3QKIHsKICAgICBvdXQucHJpbnQobV9vcGNvZGUpOwotICAg
IGlmICghaGFzRXh0cmFCaXRzKCkpCi0gICAgICAgIHJldHVybjsKICAgICAKLSAgICBDb21tYVBy
aW50ZXIgY29tbWE7Ci0gICAgb3V0LnByaW50KCI8Iik7CisgICAgQ29tbWFQcmludGVyIGNvbW1h
KCIsICIsICI8Iik7CiAgICAgaWYgKGlzQ2hpbGwoKSkKICAgICAgICAgb3V0LnByaW50KGNvbW1h
LCAiQ2hpbGwiKTsKLSAgICBvdXQucHJpbnQoIj4iKTsKKyAgICBpZiAoY29tbWEuZGlkUHJpbnQo
KSkKKyAgICAgICAgb3V0LnByaW50KCI+Iik7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpC
MwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAJKHJldmlzaW9uIDIwNjYxMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yMjE3LDcgKzIyMTcsNyBAQCB2b2lkIHRlc3RUZXJuYXJ5U3ViSW5zdHJ1Y3Rpb25TZWxlY3Rp
b24oCiAgICAgYXV0byBibG9jayA9IHByb2MuY29kZSgpWzBdOwogICAgIHVuc2lnbmVkIG51bWJl
ck9mU3ViSW5zdHJ1Y3Rpb25zID0gMDsKICAgICBmb3IgKGF1dG8gaW5zdHJ1Y3Rpb24gOiAqYmxv
Y2spIHsKLSAgICAgICAgaWYgKGluc3RydWN0aW9uLm9wY29kZSA9PSBleHBlY3RlZE9wY29kZSkg
eworICAgICAgICBpZiAoaW5zdHJ1Y3Rpb24ua2luZC5vcGNvZGUgPT0gZXhwZWN0ZWRPcGNvZGUp
IHsKICAgICAgICAgICAgIENIRUNLX0VRKGluc3RydWN0aW9uLmFyZ3Muc2l6ZSgpLCAzdWwpOwog
ICAgICAgICAgICAgQ0hFQ0tfRVEoaW5zdHJ1Y3Rpb24uYXJnc1swXS5raW5kKCksIEFpcjo6QXJn
OjpUbXApOwogICAgICAgICAgICAgQ0hFQ0tfRVEoaW5zdHJ1Y3Rpb24uYXJnc1sxXS5raW5kKCks
IEFpcjo6QXJnOjpUbXApOwpAQCAtMTI5NzIsNyArMTI5NzIsNyBAQCB2b2lkIHRlc3RCcmFuY2hC
aXRBbmRJbW1GdXNpb24oCiAKICAgICAvLyBUaGUgZmlyc3QgYmFzaWMgYmxvY2sgbXVzdCBlbmQg
aW4gYSBCcmFuY2hUZXN0NjQocmVzQ29uZCwgdG1wLCBiaXRJbW0pLgogICAgIEFpcjo6SW5zdCB0
ZXJtaW5hbCA9IHByb2MuY29kZSgpWzBdLT5sYXN0KCk7Ci0gICAgQ0hFQ0tfRVEodGVybWluYWwu
b3Bjb2RlLCBleHBlY3RlZE9wY29kZSk7CisgICAgQ0hFQ0tfRVEodGVybWluYWwua2luZC5vcGNv
ZGUsIGV4cGVjdGVkT3Bjb2RlKTsKICAgICBDSEVDS19FUSh0ZXJtaW5hbC5hcmdzWzBdLmtpbmQo
KSwgQWlyOjpBcmc6OlJlc0NvbmQpOwogICAgIENIRUNLX0VRKHRlcm1pbmFsLmFyZ3NbMV0ua2lu
ZCgpLCBmaXJzdEtpbmQpOwogICAgIENIRUNLKHRlcm1pbmFsLmFyZ3NbMl0ua2luZCgpID09IEFp
cjo6QXJnOjpCaXRJbW0gfHwgdGVybWluYWwuYXJnc1syXS5raW5kKCkgPT0gQWlyOjpBcmc6OkJp
dEltbTY0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRHVtcEFzSlMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRHVtcEFz
SlMuY3BwCShyZXZpc2lvbiAyMDY2MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpckR1bXBBc0pTLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE4LDcgKzExOCw5IEBAIHZvaWQg
ZHVtcEFzSlMoQ29kZSYgY29kZSwgUHJpbnRTdHJlYW0mIG8KICAgICAgICAgICAgIG91dC5wcmlu
dGxuKHZhck5hbWUoYmxvY2spLCAiLnByZWRlY2Vzc29ycy5wdXNoKCIsIHZhck5hbWUocHJlZGVj
ZXNzb3IpLCAiKTsiKTsKICAgICAgICAgCiAgICAgICAgIGZvciAoSW5zdCYgaW5zdCA6ICpibG9j
aykgewotICAgICAgICAgICAgb3V0LnByaW50bG4oImluc3QgPSBuZXcgSW5zdCgiLCBpbnN0Lm9w
Y29kZSwgIik7Iik7CisgICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgZG8gc29tZXRo
aW5nIGZvciBmbGFncy4KKyAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNjI3NTEKKyAgICAgICAgICAgIG91dC5wcmludGxuKCJpbnN0ID0gbmV3
IEluc3QoIiwgaW5zdC5raW5kLm9wY29kZSwgIik7Iik7CiAgICAgICAgICAgICAKICAgICAgICAg
ICAgIGluc3QuZm9yRWFjaEFyZygKICAgICAgICAgICAgICAgICBbJl0gKEFyZyYgYXJnLCBBcmc6
OlJvbGUsIEFyZzo6VHlwZSwgQXJnOjpXaWR0aCkgewpAQCAtMTk3LDcgKzE5OSw3IEBAIHZvaWQg
ZHVtcEFzSlMoQ29kZSYgY29kZSwgUHJpbnRTdHJlYW0mIG8KICAgICAgICAgICAgICAgICAgICAg
b3V0LnByaW50bG4oImluc3QuYXJncy5wdXNoKGFyZyk7Iik7CiAgICAgICAgICAgICAgICAgfSk7
CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChpbnN0Lm9wY29kZSA9PSBQYXRjaCkgewor
ICAgICAgICAgICAgaWYgKGluc3Qua2luZC5vcGNvZGUgPT0gUGF0Y2gpIHsKICAgICAgICAgICAg
ICAgICBpZiAoaW5zdC5oYXNOb25BcmdFZmZlY3RzKCkpCiAgICAgICAgICAgICAgICAgICAgIG91
dC5wcmludGxuKCJpbnN0LnBhdGNoSGFzTm9uQXJnRWZmZWN0cyA9IHRydWU7Iik7CiAgICAgICAg
ICAgICAgICAgCkBAIC0yMjEsNyArMjIzLDcgQEAgdm9pZCBkdW1wQXNKUyhDb2RlJiBjb2RlLCBQ
cmludFN0cmVhbSYgbwogICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGluc3Qub3Bjb2RlID09IENDYWxsIHx8IGluc3Qu
b3Bjb2RlID09IENvbGRDQ2FsbCkgeworICAgICAgICAgICAgaWYgKGluc3Qua2luZC5vcGNvZGUg
PT0gQ0NhbGwgfHwgaW5zdC5raW5kLm9wY29kZSA9PSBDb2xkQ0NhbGwpIHsKICAgICAgICAgICAg
ICAgICBvdXQucHJpbnRsbigiaW5zdC5jQ2FsbFR5cGUgPSAiLCBpbnN0Lm9yaWdpbi0+dHlwZSgp
KTsKICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiaW5zdC5jQ2FsbEFyZ1R5cGVzID0gW107
Iik7CiAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IGluc3Qub3JpZ2lu
LT5udW1DaGlsZHJlbigpOyArK2kpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpckZpeE9idmlvdXNTcGlsbHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyRml4T2J2aW91c1NwaWxscy5jcHAJKHJldmlzaW9uIDIwNjYxMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRml4T2J2aW91c1NwaWxscy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEyMSw3ICsxMjEsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAg
IG1fc3RhdGUuY2xvYmJlcihhcmcpOwogICAgICAgICAgICAgfSk7CiAKLSAgICAgICAgc3dpdGNo
IChpbnN0Lm9wY29kZSkgeworICAgICAgICBzd2l0Y2ggKGluc3Qua2luZC5vcGNvZGUpIHsKICAg
ICAgICAgY2FzZSBNb3ZlOgogICAgICAgICAgICAgaWYgKGluc3QuYXJnc1swXS5pc1NvbWVJbW0o
KSkgewogICAgICAgICAgICAgICAgIGlmIChpbnN0LmFyZ3NbMV0uaXNSZWcoKSkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRml4UGFydGlhbFJlZ2lzdGVyU3RhbGxzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckZpeFBhcnRp
YWxSZWdpc3RlclN0YWxscy5jcHAJKHJldmlzaW9uIDIwNjYxMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyRml4UGFydGlhbFJlZ2lzdGVyU3RhbGxzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDUsNyArNDUsNyBAQCBuYW1lc3BhY2UgewogCiBib29sIGhhc1BhcnRpYWxYbW1S
ZWdVcGRhdGUoY29uc3QgSW5zdCYgaW5zdCkKIHsKLSAgICBzd2l0Y2ggKGluc3Qub3Bjb2RlKSB7
CisgICAgc3dpdGNoIChpbnN0LmtpbmQub3Bjb2RlKSB7CiAgICAgY2FzZSBDb252ZXJ0RG91Ymxl
VG9GbG9hdDoKICAgICBjYXNlIENvbnZlcnRGbG9hdFRvRG91YmxlOgogICAgIGNhc2UgQ29udmVy
dEludDMyVG9Eb3VibGU6CkBAIC02OCw3ICs2OCw3IEBAIGJvb2wgaGFzUGFydGlhbFhtbVJlZ1Vw
ZGF0ZShjb25zdCBJbnN0JiAKIGJvb2wgaXNEZXBlbmRlbmN5QnJlYWtpbmcoY29uc3QgSW5zdCYg
aW5zdCkKIHsKICAgICAvLyAieG9ycHMgcmVnLCByZWciIGlzIHVzZWQgYnkgdGhlIGZyb250ZW5k
IHRvIHJlbW92ZSB0aGUgZGVwZW5kZW5jeSBvbiBpdHMgYXJndW1lbnQuCi0gICAgcmV0dXJuIGlu
c3Qub3Bjb2RlID09IE1vdmVaZXJvVG9Eb3VibGU7CisgICAgcmV0dXJuIGluc3Qua2luZC5vcGNv
ZGUgPT0gTW92ZVplcm9Ub0RvdWJsZTsKIH0KIAogLy8gRklYTUU6IGZpbmQgYSBnb29kIGRpc3Rh
bmNlIHBlciBhcmNoaXRlY3R1cmUgZXhwZXJpbWVudGFsbHkuCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmNwcAkocmV2aXNpb24gMjA2NjEwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0ZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIyNywxMyArMjI3LDEzIEBAIHZvaWQgZ2VuZXJhdGUoQ29kZSYgY29kZSwgQ0NhbGxI
ZWxwZXJzJiAKIAogICAgICAgICBjb250ZXh0LmluZGV4SW5CbG9jayA9IGJsb2NrLT5zaXplKCkg
LSAxOwogICAgICAgICAKLSAgICAgICAgaWYgKGJsb2NrLT5sYXN0KCkub3Bjb2RlID09IEp1bXAK
KyAgICAgICAgaWYgKGJsb2NrLT5sYXN0KCkua2luZC5vcGNvZGUgPT0gSnVtcAogICAgICAgICAg
ICAgJiYgYmxvY2stPnN1Y2Nlc3NvckJsb2NrKDApID09IGNvZGUuZmluZE5leHRCbG9jayhibG9j
aykpCiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICBhZGRJdGVtKGJsb2NrLT5sYXN0
KCkpOwogCi0gICAgICAgIGlmIChpc1JldHVybihibG9jay0+bGFzdCgpLm9wY29kZSkpIHsKKyAg
ICAgICAgaWYgKGlzUmV0dXJuKGJsb2NrLT5sYXN0KCkua2luZC5vcGNvZGUpKSB7CiAgICAgICAg
ICAgICAvLyBXZSBjdXJyZW50bHkgZG9uJ3QgcmVwcmVzZW50IHRoZSBmdWxsIHByb2xvZ3VlL2Vw
aWxvZ3VlIGluIEFpciwgc28gd2UgbmVlZCB0bwogICAgICAgICAgICAgLy8gaGF2ZSB0aGlzIG92
ZXJyaWRlLgogICAgICAgICAgICAgaWYgKGNvZGUuZnJhbWVTaXplKCkpIHsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySGFuZGxlQ2FsbGVlU2F2ZXMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySGFuZGxlQ2FsbGVlU2F2ZXMu
Y3BwCShyZXZpc2lvbiAyMDY2MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckhhbmRsZUNhbGxlZVNhdmVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgsNyBAQCB2
b2lkIGhhbmRsZUNhbGxlZVNhdmVzKENvZGUmIGNvZGUpCiAgICAgICAgICAgICAgICAgICAgIHVz
ZWRDYWxsZWVTYXZlcy5zZXQodG1wLnJlZygpKTsKICAgICAgICAgICAgICAgICB9KTsKIAotICAg
ICAgICAgICAgaWYgKGluc3Qub3Bjb2RlID09IFBhdGNoKQorICAgICAgICAgICAgaWYgKGluc3Qu
a2luZC5vcGNvZGUgPT0gUGF0Y2gpCiAgICAgICAgICAgICAgICAgdXNlZENhbGxlZVNhdmVzLm1l
cmdlKGluc3QuZXh0cmFDbG9iYmVyZWRSZWdzKCkpOwogICAgICAgICB9CiAgICAgfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3QuY3BwCShyZXZpc2lvbiAyMDY2MTAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3QuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00Nyw3ICs0Nyw5IEBAIGJvb2wgSW5zdDo6aGFzQXJnRWZmZWN0cygpCiAKIHVuc2ln
bmVkIEluc3Q6OmpzSGFzaCgpIGNvbnN0CiB7Ci0gICAgdW5zaWduZWQgcmVzdWx0ID0gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KG9wY29kZSk7CisgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGRvIHNv
bWV0aGluZyBmb3IgZmxhZ3MuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE2Mjc1MQorICAgIHVuc2lnbmVkIHJlc3VsdCA9IHN0YXRpY19jYXN0PHVuc2ln
bmVkPihraW5kLm9wY29kZSk7CiAgICAgCiAgICAgZm9yIChjb25zdCBBcmcmIGFyZyA6IGFyZ3Mp
CiAgICAgICAgIHJlc3VsdCArPSBhcmcuanNIYXNoKCk7CkBAIC01Nyw3ICs1OSw3IEBAIHVuc2ln
bmVkIEluc3Q6OmpzSGFzaCgpIGNvbnN0CiAKIHZvaWQgSW5zdDo6ZHVtcChQcmludFN0cmVhbSYg
b3V0KSBjb25zdAogewotICAgIG91dC5wcmludChvcGNvZGUsICIgIiwgbGlzdER1bXAoYXJncykp
OworICAgIG91dC5wcmludChraW5kLCAiICIsIGxpc3REdW1wKGFyZ3MpKTsKICAgICBpZiAob3Jp
Z2luKSB7CiAgICAgICAgIGlmIChhcmdzLnNpemUoKSkKICAgICAgICAgICAgIG91dC5wcmludCgi
LCAiKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdC5oCShyZXZpc2lv
biAyMDY2MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3QuaAkod29y
a2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNyBAQAogI2lmIEVOQUJMRShCM19KSVQpCiAKICNpbmNs
dWRlICJBaXJBcmcuaCIKLSNpbmNsdWRlICJBaXJPcGNvZGUuaCIKKyNpbmNsdWRlICJBaXJLaW5k
LmgiCiAjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtNTAs
MzkgKzUwLDM4IEBAIHB1YmxpYzoKIAogICAgIEluc3QoKQogICAgICAgICA6IG9yaWdpbihudWxs
cHRyKQotICAgICAgICAsIG9wY29kZShOb3ApCiAgICAgewogICAgIH0KICAgICAKLSAgICBJbnN0
KE9wY29kZSBvcGNvZGUsIFZhbHVlKiBvcmlnaW4pCisgICAgSW5zdChLaW5kIGtpbmQsIFZhbHVl
KiBvcmlnaW4pCiAgICAgICAgIDogb3JpZ2luKG9yaWdpbikKLSAgICAgICAgLCBvcGNvZGUob3Bj
b2RlKQorICAgICAgICAsIGtpbmQoa2luZCkKICAgICB7CiAgICAgfQogICAgIAogICAgIHRlbXBs
YXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KLSAgICBJbnN0KE9wY29kZSBvcGNvZGUsIFZhbHVl
KiBvcmlnaW4sIEFyZyBhcmcsIEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCisgICAgSW5zdChLaW5k
IGtpbmQsIFZhbHVlKiBvcmlnaW4sIEFyZyBhcmcsIEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCiAg
ICAgICAgIDogYXJnc3sgYXJnLCBhcmd1bWVudHMuLi4gfQogICAgICAgICAsIG9yaWdpbihvcmln
aW4pCi0gICAgICAgICwgb3Bjb2RlKG9wY29kZSkKKyAgICAgICAgLCBraW5kKGtpbmQpCiAgICAg
ewogICAgIH0KIAotICAgIEluc3QoT3Bjb2RlIG9wY29kZSwgVmFsdWUqIG9yaWdpbiwgY29uc3Qg
QXJnTGlzdCYgYXJndW1lbnRzKQorICAgIEluc3QoS2luZCBraW5kLCBWYWx1ZSogb3JpZ2luLCBj
b25zdCBBcmdMaXN0JiBhcmd1bWVudHMpCiAgICAgICAgIDogYXJncyhhcmd1bWVudHMpCiAgICAg
ICAgICwgb3JpZ2luKG9yaWdpbikKLSAgICAgICAgLCBvcGNvZGUob3Bjb2RlKQorICAgICAgICAs
IGtpbmQoa2luZCkKICAgICB7CiAgICAgfQogCi0gICAgSW5zdChPcGNvZGUgb3Bjb2RlLCBWYWx1
ZSogb3JpZ2luLCBBcmdMaXN0JiYgYXJndW1lbnRzKQorICAgIEluc3QoS2luZCBraW5kLCBWYWx1
ZSogb3JpZ2luLCBBcmdMaXN0JiYgYXJndW1lbnRzKQogICAgICAgICA6IGFyZ3MoV1RGTW92ZShh
cmd1bWVudHMpKQogICAgICAgICAsIG9yaWdpbihvcmlnaW4pCi0gICAgICAgICwgb3Bjb2RlKG9w
Y29kZSkKKyAgICAgICAgLCBraW5kKGtpbmQpCiAgICAgewogICAgIH0KIAotICAgIGV4cGxpY2l0
IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBvcmlnaW4gfHwgb3Bjb2RlICE9IE5vcCB8
fCBhcmdzLnNpemUoKTsgfQorICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJl
dHVybiBvcmlnaW4gfHwga2luZCB8fCBhcmdzLnNpemUoKTsgfQogCiAgICAgdm9pZCBhcHBlbmQo
KSB7IH0KICAgICAKQEAgLTIwMCw3ICsxOTksNyBAQCBwdWJsaWM6CiAKICAgICBBcmdMaXN0IGFy
Z3M7CiAgICAgVmFsdWUqIG9yaWdpbjsgLy8gVGhlIEIzOjpWYWx1ZSB0aGF0IHRoaXMgb3JpZ2lu
YXRlZCBmcm9tLgotICAgIE9wY29kZSBvcGNvZGU7CisgICAgS2luZCBraW5kOwogfTsKIAogfSB9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJJbnN0SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlySW5zdElubGluZXMuaAkocmV2aXNpb24gMjA2NjEwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC00NiwxMyArNDYsMTMgQEAgdm9pZCBJbnN0Ojpmb3JFYWNoKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0
bwogCiBpbmxpbmUgY29uc3QgUmVnaXN0ZXJTZXQmIEluc3Q6OmV4dHJhQ2xvYmJlcmVkUmVncygp
CiB7Ci0gICAgQVNTRVJUKG9wY29kZSA9PSBQYXRjaCk7CisgICAgQVNTRVJUKGtpbmQub3Bjb2Rl
ID09IFBhdGNoKTsKICAgICByZXR1cm4gYXJnc1swXS5zcGVjaWFsKCktPmV4dHJhQ2xvYmJlcmVk
UmVncygqdGhpcyk7CiB9CiAKIGlubGluZSBjb25zdCBSZWdpc3RlclNldCYgSW5zdDo6ZXh0cmFF
YXJseUNsb2JiZXJlZFJlZ3MoKQogewotICAgIEFTU0VSVChvcGNvZGUgPT0gUGF0Y2gpOworICAg
IEFTU0VSVChraW5kLm9wY29kZSA9PSBQYXRjaCk7CiAgICAgcmV0dXJuIGFyZ3NbMF0uc3BlY2lh
bCgpLT5leHRyYUVhcmx5Q2xvYmJlcmVkUmVncygqdGhpcyk7CiB9CiAKQEAgLTg5LDEyICs4OSwx
MiBAQCBpbmxpbmUgdm9pZCBJbnN0Ojpmb3JFYWNoRGVmV2l0aEV4dHJhQ2xvCiAgICAgICAgIGZ1
bmN0b3IoVGhpbmcocmVnKSwgcmVnRGVmUm9sZSwgdHlwZSwgQXJnOjpjb25zZXJ2YXRpdmVXaWR0
aCh0eXBlKSk7CiAgICAgfTsKIAotICAgIGlmIChwcmV2SW5zdCAmJiBwcmV2SW5zdC0+b3Bjb2Rl
ID09IFBhdGNoKSB7CisgICAgaWYgKHByZXZJbnN0ICYmIHByZXZJbnN0LT5raW5kLm9wY29kZSA9
PSBQYXRjaCkgewogICAgICAgICByZWdEZWZSb2xlID0gQXJnOjpEZWY7CiAgICAgICAgIHByZXZJ
bnN0LT5leHRyYUNsb2JiZXJlZFJlZ3MoKS5mb3JFYWNoKHJlcG9ydFJlZyk7CiAgICAgfQogCi0g
ICAgaWYgKG5leHRJbnN0ICYmIG5leHRJbnN0LT5vcGNvZGUgPT0gUGF0Y2gpIHsKKyAgICBpZiAo
bmV4dEluc3QgJiYgbmV4dEluc3QtPmtpbmQub3Bjb2RlID09IFBhdGNoKSB7CiAgICAgICAgIHJl
Z0RlZlJvbGUgPSBBcmc6OkVhcmx5RGVmOwogICAgICAgICBuZXh0SW5zdC0+ZXh0cmFFYXJseUNs
b2JiZXJlZFJlZ3MoKS5mb3JFYWNoKHJlcG9ydFJlZyk7CiAgICAgfQpAQCAtMTAyLDcgKzEwMiw3
IEBAIGlubGluZSB2b2lkIEluc3Q6OmZvckVhY2hEZWZXaXRoRXh0cmFDbG8KIAogaW5saW5lIHZv
aWQgSW5zdDo6cmVwb3J0VXNlZFJlZ2lzdGVycyhjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lz
dGVycykKIHsKLSAgICBBU1NFUlQob3Bjb2RlID09IFBhdGNoKTsKKyAgICBBU1NFUlQoa2luZC5v
cGNvZGUgPT0gUGF0Y2gpOwogICAgIGFyZ3NbMF0uc3BlY2lhbCgpLT5yZXBvcnRVc2VkUmVnaXN0
ZXJzKCp0aGlzLCB1c2VkUmVnaXN0ZXJzKTsKIH0KIApAQCAtMTE2LDcgKzExNiw3IEBAIGlubGlu
ZSBPcHRpb25hbDx1bnNpZ25lZD4gSW5zdDo6c2hvdWxkVHIKICAgICBpZiAoIWlzWDg2KCkpCiAg
ICAgICAgIHJldHVybiBOdWxsb3B0OwogCi0gICAgc3dpdGNoIChvcGNvZGUpIHsKKyAgICBzd2l0
Y2ggKGtpbmQub3Bjb2RlKSB7CiAgICAgY2FzZSBBZGQzMjoKICAgICBjYXNlIEFkZDY0OgogICAg
IGNhc2UgQW5kMzI6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckl0ZXJh
dGVkUmVnaXN0ZXJDb2FsZXNjaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0Fpckl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nLmNwcAkocmV2aXNpb24g
MjA2NjEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJdGVyYXRlZFJlZ2lz
dGVyQ29hbGVzY2luZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNDAsNyArMTA0MCw3IEBAIHBy
aXZhdGU6CiAgICAgewogICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICAgICAgY2FzZSBBcmc6
OkdQOgotICAgICAgICAgICAgc3dpdGNoIChpbnN0Lm9wY29kZSkgeworICAgICAgICAgICAgc3dp
dGNoIChpbnN0LmtpbmQub3Bjb2RlKSB7CiAgICAgICAgICAgICBjYXNlIE1vdmU6CiAgICAgICAg
ICAgICBjYXNlIE1vdmUzMjoKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTEwNDksNyArMTA0
OSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgY2FzZSBBcmc6OkZQOgotICAgICAgICAgICAgc3dpdGNoIChpbnN0Lm9wY29kZSkgeworICAg
ICAgICAgICAgc3dpdGNoIChpbnN0LmtpbmQub3Bjb2RlKSB7CiAgICAgICAgICAgICBjYXNlIE1v
dmVGbG9hdDoKICAgICAgICAgICAgIGNhc2UgTW92ZURvdWJsZToKICAgICAgICAgICAgICAgICBi
cmVhazsKQEAgLTEwNzQsNyArMTA3NCw3IEBAIHByaXZhdGU6CiAgICAgICAgIC8vIE5vdGUgdGhh
dCB0aGUgaW5wdXQgcHJvcGVydHkgcmVxdWlyZXMgYW4gYW5hbHlzaXMgb3ZlciBaRGVmJ3MsIHNv
IGl0J3Mgb25seSB2YWxpZCBzbyBsb25nCiAgICAgICAgIC8vIGFzIHRoZSBpbnB1dCBnZXRzIGEg
cmVnaXN0ZXIuIFdlIGRvbid0IGtub3cgaWYgdGhlIGlucHV0IGdldHMgYSByZWdpc3RlciwgYnV0
IHdlIGRvIGtub3cKICAgICAgICAgLy8gdGhhdCBpZiBpdCBkb2Vzbid0IGdldCBhIHJlZ2lzdGVy
IHRoZW4gd2Ugd2lsbCBzdGlsbCBlbWl0IHRoaXMgTW92ZTMyLgotICAgICAgICBpZiAoaW5zdC5v
cGNvZGUgPT0gTW92ZTMyKSB7CisgICAgICAgIGlmIChpbnN0LmtpbmQub3Bjb2RlID09IE1vdmUz
MikgewogICAgICAgICAgICAgaWYgKCF0bXBXaWR0aCkKICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKQEAgLTEzODIsMTEgKzEzODIsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAg
ICAvLyBlcXVpdmFsZW50IGlmIHRoZSBkZXN0aW5hdGlvbidzIGhpZ2ggYml0cyBhcmUgbm90IG9i
c2VydmFibGUgb3IgaWYgdGhlIHNvdXJjZSdzIGhpZ2gKICAgICAgICAgICAgICAgICAvLyBiaXRz
IGFyZSBhbGwgemVyby4gTm90ZSB0aGF0IHdlIGRvbid0IGhhdmUgdGhlIG9wcG9zaXRlIG9wdGlt
aXphdGlvbiBmb3Igb3RoZXIKICAgICAgICAgICAgICAgICAvLyBhcmNoaXRlY3R1cmVzLCB3aGlj
aCBtYXkgcHJlZmVyIE1vdmUgb3ZlciBNb3ZlMzIsIGJlY2F1c2UgTW92ZSBpcyBjYW5vbmljYWwg
YWxyZWFkeS4KLSAgICAgICAgICAgICAgICBpZiAodHlwZSA9PSBBcmc6OkdQICYmIGluc3Qub3Bj
b2RlID09IE1vdmUKKyAgICAgICAgICAgICAgICBpZiAodHlwZSA9PSBBcmc6OkdQICYmIGluc3Qu
a2luZC5vcGNvZGUgPT0gTW92ZQogICAgICAgICAgICAgICAgICAgICAmJiBpbnN0LmFyZ3NbMF0u
aXNUbXAoKSAmJiBpbnN0LmFyZ3NbMV0uaXNUbXAoKSkgewogICAgICAgICAgICAgICAgICAgICBp
ZiAobV90bXBXaWR0aC51c2VXaWR0aChpbnN0LmFyZ3NbMV0udG1wKCkpIDw9IEFyZzo6V2lkdGgz
MgogICAgICAgICAgICAgICAgICAgICAgICAgfHwgbV90bXBXaWR0aC5kZWZXaWR0aChpbnN0LmFy
Z3NbMF0udG1wKCkpIDw9IEFyZzo6V2lkdGgzMikKLSAgICAgICAgICAgICAgICAgICAgICAgIGlu
c3Qub3Bjb2RlID0gTW92ZTMyOworICAgICAgICAgICAgICAgICAgICAgICAgaW5zdC5raW5kLm9w
Y29kZSA9IE1vdmUzMjsKICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICBpbnN0
LmZvckVhY2hUbXBGYXN0KFsmXSAoVG1wJiB0bXApIHsKQEAgLTE0NTMsNyArMTQ1Myw3IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICAgICAgLy8gTW92ZSBpcyB0aGUgY2Fub25pY2FsIHdheSB0byBt
b3ZlIGRhdGEgYmV0d2VlbiBHUFJzLgogICAgICAgICAgICAgICAgIGJvb2wgY2FuVXNlTW92ZTMy
SWZEaWRTcGlsbCA9IGZhbHNlOwogICAgICAgICAgICAgICAgIGJvb2wgZGlkU3BpbGwgPSBmYWxz
ZTsKLSAgICAgICAgICAgICAgICBpZiAodHlwZSA9PSBBcmc6OkdQICYmIGluc3Qub3Bjb2RlID09
IE1vdmUpIHsKKyAgICAgICAgICAgICAgICBpZiAodHlwZSA9PSBBcmc6OkdQICYmIGluc3Qua2lu
ZC5vcGNvZGUgPT0gTW92ZSkgewogICAgICAgICAgICAgICAgICAgICBpZiAoKGluc3QuYXJnc1sw
XS5pc1RtcCgpICYmIG1fdG1wV2lkdGgud2lkdGgoaW5zdC5hcmdzWzBdLnRtcCgpKSA8PSBBcmc6
OldpZHRoMzIpCiAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoaW5zdC5hcmdzWzFdLmlzVG1w
KCkgJiYgbV90bXBXaWR0aC53aWR0aChpbnN0LmFyZ3NbMV0udG1wKCkpIDw9IEFyZzo6V2lkdGgz
MikpCiAgICAgICAgICAgICAgICAgICAgICAgICBjYW5Vc2VNb3ZlMzJJZkRpZFNwaWxsID0gdHJ1
ZTsKQEAgLTE0ODgsNyArMTQ4OCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAg
ICBBcmc6OldpZHRoIHNwaWxsV2lkdGggPSBtX3RtcFdpZHRoLnJlcXVpcmVkV2lkdGgoYXJnLnRt
cCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzQW55RGVmKHJvbGUpICYm
IHdpZHRoIDwgc3BpbGxXaWR0aCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoaW5zdC5vcGNvZGUgPT0gTW92ZSB8fCAh
KEFyZzo6aXNBbnlVc2Uocm9sZSkgJiYgd2lkdGggPiBzcGlsbFdpZHRoKSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBBU1NFUlQoaW5zdC5raW5kLm9wY29kZSA9PSBNb3ZlIHx8ICEoQXJnOjpp
c0FueVVzZShyb2xlKSAmJiB3aWR0aCA+IHNwaWxsV2lkdGgpKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNwaWxsV2lkdGggIT0gQXJnOjpX
aWR0aDMyKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhblVzZU1vdmUzMklmRGlkU3Bp
bGwgPSBmYWxzZTsKQEAgLTE1MDAsNyArMTUwMCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAg
ICAgICAgIH0pOwogCiAgICAgICAgICAgICAgICAgaWYgKGRpZFNwaWxsICYmIGNhblVzZU1vdmUz
MklmRGlkU3BpbGwpCi0gICAgICAgICAgICAgICAgICAgIGluc3Qub3Bjb2RlID0gTW92ZTMyOwor
ICAgICAgICAgICAgICAgICAgICBpbnN0LmtpbmQub3Bjb2RlID0gTW92ZTMyOwogCiAgICAgICAg
ICAgICAgICAgLy8gRm9yIGV2ZXJ5IG90aGVyIGNhc2UsIGFkZCBMb2FkL1N0b3JlIGFzIG5lZWRl
ZC4KICAgICAgICAgICAgICAgICBpbnN0LmZvckVhY2hUbXAoWyZdIChUbXAmIHRtcCwgQXJnOjpS
b2xlIHJvbGUsIEFyZzo6VHlwZSBhcmdUeXBlLCBBcmc6OldpZHRoKSB7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpcktpbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyS2luZC5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJLaW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJLaW5kLmgiCisKKyNpZiBFTkFCTEUo
QjNfSklUKQorCisjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK3ZvaWQgS2luZDo6ZHVtcChQcmlu
dFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChvcGNvZGUpOworICAgIAorICAg
IENvbW1hUHJpbnRlciBjb21tYSgiLCAiLCAiPCIpOworICAgIGlmICh0cmFwcykKKyAgICAgICAg
b3V0LnByaW50KGNvbW1hLCAiVHJhcHMiKTsKKyAgICBpZiAoY29tbWEuZGlkUHJpbnQoKSkKKyAg
ICAgICAgb3V0LnByaW50KCI+Iik7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpB
aXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyS2luZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyS2luZC5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyS2luZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTcgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJLaW5k
X2gKKyNkZWZpbmUgQWlyS2luZF9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAi
QWlyT3Bjb2RlLmgiCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworLy8gQWlyIG9wY29kZXMgYXJl
IGFsd2F5cyBjYXJyaWVkIGFyb3VuZCB3aXRoIHNvbWUgZmxhZ3MuIFRoZXNlIGZsYWdzIGFyZSB1
bmRlcnN0b29kIGFzIGhhdmluZyBubworLy8gbWVhbmluZyBpZiB0aGV5IGFyZSBzZXQgZm9yIGFu
IG9wY29kZSB0byB3aGljaCB0aGV5IGRvIG5vdCBhcHBseS4gVGhpcyBtYWtlcyBzZW5zZSwgc2lu
Y2UgQWlyCisvLyBpcyBhIGNvbXBsZXggaW5zdHJ1Y3Rpb24gc2V0IGFuZCBtb3N0IG9mIHRoZXNl
IGZsYWdzIGNhbiBhcHBseSB0byBiYXNpY2FsbHkgYW55IG9wY29kZS4gSW4KKy8vIGZhY3QsIGl0
J3MgcmVjb21tZW5kZWQgdG8gb25seSByZXByZXNlbnQgc29tZXRoaW5nIGFzIGEgZmxhZyBpZiB5
b3UgYmVsaWV2ZSB0aGF0IGl0IGlzIGxhcmdlbHkKKy8vIG9wY29kZS1hZ25vc3RpYy4KKworc3Ry
dWN0IEtpbmQgeworICAgIEtpbmQoT3Bjb2RlIG9wY29kZSkKKyAgICAgICAgOiBvcGNvZGUob3Bj
b2RlKQorICAgICAgICAsIHRyYXBzKGZhbHNlKQorICAgIHsKKyAgICB9CisgICAgCisgICAgS2lu
ZCgpCisgICAgICAgIDogS2luZChOb3ApCisgICAgeworICAgIH0KKyAgICAKKyAgICBib29sIG9w
ZXJhdG9yPT0oY29uc3QgS2luZCYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
b3Bjb2RlID09IG90aGVyLm9wY29kZQorICAgICAgICAgICAgJiYgdHJhcHMgPT0gb3RoZXIudHJh
cHM7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBLaW5kJiBvdGhlcikg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICB9Cisg
ICAgCisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KG9wY29kZSkgKyAoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHRyYXBz
KSA8PCAxNik7CisgICAgfQorICAgIAorICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuICp0aGlzICE9IEtpbmQoKTsKKyAgICB9CisgICAgCisg
ICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgCisgICAgT3Bjb2RlIG9wY29k
ZTsKKyAgICAKKyAgICAvLyBUaGlzIGlzIGFuIG9wY29kZS1hZ25vc3RpYyBmbGFnIHRoYXQgaW5k
aWNhdGVzIHRoYXQgd2UgZXhwZWN0IHRoYXQgdGhpcyBpbnN0cnVjdGlvbiB3aWxsCisgICAgLy8g
dHJhcC4gVGhpcyBjYXVzZXMgdGhlIGNvbXBpbGVyIHRvIGFzc3VtZSB0aGF0IHRoaXMgc2lkZS1l
eGl0cyBhbmQgdGhlcmVmb3JlIGhhcyBub24tY29udHJvbAorICAgIC8vIG5vbi1hcmcgZWZmZWN0
cy4gVGhpcyBhbHNvIGNhdXNlcyB0aGUgY29tcGlsZXIgdG8gdGVsbCB5b3UgYWJvdXQgYWxsIG9m
IHRoZXNlIGluc3RydWN0aW9ucy4KKyAgICAvLyBOb3RlIHRoYXQgdGhpcyBpcyBqdXN0IG9uZSBv
ZiBzZXZlcmFsIHdheXMgb2Ygc3VwcG9ydGluZyB0cmFwcGluZyBpbiBBaXIsIGFuZCBpdCdzIHRo
ZSBsZXNzCisgICAgLy8gcHJlY2lzZSB2YXJpYW50IGJlY2F1c2UgaXQncyBvcmlnaW4tYmFzZWQu
IFRoaXMgbWVhbnMgdGhhdCBpZiBhbiBpbnN0cnVjdGlvbiB3YXMgZnVzZWQgb3V0CisgICAgLy8g
b2YgQjMgdmFsdWVzIHRoYXQgaGFkIGRpZmZlcmVudCBvcmlnaW5zLCB0aGVuIHRoZSBvcmlnaW4g
YXQgd2hpY2ggeW91J2xsIGFwcGVhciB0byB0cmFwCisgICAgLy8gd2lsbCBiZSBzb21ld2hhdCBy
YW5kb20uIFRoZSB1cHNpZGUgb2YgdGhpcyBhcHByb2FjaCBpcyB0aGF0IGl0IGltcG9zZXMgYnkg
ZmFyIHRoZSBsZWFzdAorICAgIC8vIG92ZXJoZWFkIG9uIHRoZSBjb21waWxlci4KKyAgICAvLyBG
SVhNRTogTWFrZSB0aGlzIGNvbXBsZXRlbHkgd29yay4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYyNjg5CisgICAgYm9vbCB0cmFwcyA6IDE7Cit9Owor
Cit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNf
SklUKQorCisjZW5kaWYgLy8gQWlyS2luZF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyTG93ZXJBZnRlclJlZ0FsbG9jLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckxvd2VyQWZ0ZXJSZWdBbGxvYy5jcHAJKHJldmlzaW9u
IDIwNjYxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTG93ZXJBZnRlclJl
Z0FsbG9jLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjgsNyArNjgsNyBAQCB2b2lkIGxvd2VyQWZ0
ZXJSZWdBbGxvYyhDb2RlJiBjb2RlKQogICAgICAgICAgICAgCiAgICAgICAgICAgICBSZWdpc3Rl
clNldCBzZXQ7CiAKLSAgICAgICAgICAgIGJvb2wgaXNSZWxldmFudCA9IGluc3Qub3Bjb2RlID09
IFNodWZmbGUgfHwgaW5zdC5vcGNvZGUgPT0gQ29sZENDYWxsOworICAgICAgICAgICAgYm9vbCBp
c1JlbGV2YW50ID0gaW5zdC5raW5kLm9wY29kZSA9PSBTaHVmZmxlIHx8IGluc3Qua2luZC5vcGNv
ZGUgPT0gQ29sZENDYWxsOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAoaXNSZWxldmFu
dCkgewogICAgICAgICAgICAgICAgIGZvciAoUmVnIHJlZyA6IGxvY2FsQ2FsYy5saXZlKCkpCkBA
IC0xMTAsNyArMTEwLDcgQEAgdm9pZCBsb3dlckFmdGVyUmVnQWxsb2MoQ29kZSYgY29kZSkKICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpbnN0SW5kZXggPSAwOyBpbnN0SW5kZXggPCBibG9jay0+c2l6
ZSgpOyArK2luc3RJbmRleCkgewogICAgICAgICAgICAgSW5zdCYgaW5zdCA9IGJsb2NrLT5hdChp
bnN0SW5kZXgpOwogCi0gICAgICAgICAgICBzd2l0Y2ggKGluc3Qub3Bjb2RlKSB7CisgICAgICAg
ICAgICBzd2l0Y2ggKGluc3Qua2luZC5vcGNvZGUpIHsKICAgICAgICAgICAgIGNhc2UgU2h1ZmZs
ZTogewogICAgICAgICAgICAgICAgIFJlZ2lzdGVyU2V0IHNldCA9IHVzZWRSZWdpc3RlcnMuZ2V0
KCZpbnN0KTsKICAgICAgICAgICAgICAgICBWZWN0b3I8U2h1ZmZsZVBhaXI+IHBhaXJzOwpAQCAt
MTQxLDYgKzE0MSw3IEBAIHZvaWQgbG93ZXJBZnRlclJlZ0FsbG9jKENvZGUmIGNvZGUpCiAKICAg
ICAgICAgICAgIGNhc2UgQ29sZENDYWxsOiB7CiAgICAgICAgICAgICAgICAgQ0NhbGxWYWx1ZSog
dmFsdWUgPSBpbnN0Lm9yaWdpbi0+YXM8Q0NhbGxWYWx1ZT4oKTsKKyAgICAgICAgICAgICAgICBL
aW5kIG9sZEtpbmQgPSBpbnN0LmtpbmQ7CiAKICAgICAgICAgICAgICAgICBSZWdpc3RlclNldCBs
aXZlUmVncyA9IHVzZWRSZWdpc3RlcnMuZ2V0KCZpbnN0KTsKICAgICAgICAgICAgICAgICBSZWdp
c3RlclNldCByZWdzVG9TYXZlID0gbGl2ZVJlZ3M7CkBAIC0xOTUsNiArMTk2LDggQEAgdm9pZCBs
b3dlckFmdGVyUmVnQWxsb2MoQ29kZSYgY29kZSkKICAgICAgICAgICAgICAgICAgICAgaW5zdElu
ZGV4LCBlbWl0U2h1ZmZsZShwYWlycywgZ3BTY3JhdGNoLCBmcFNjcmF0Y2gsIGluc3Qub3JpZ2lu
KSk7CiAKICAgICAgICAgICAgICAgICBpbnN0ID0gYnVpbGRDQ2FsbChjb2RlLCBpbnN0Lm9yaWdp
biwgZGVzdGluYXRpb25zKTsKKyAgICAgICAgICAgICAgICBpZiAob2xkS2luZC50cmFwcykKKyAg
ICAgICAgICAgICAgICAgICAgaW5zdC5raW5kLnRyYXBzID0gdHJ1ZTsKIAogICAgICAgICAgICAg
ICAgIC8vIE5vdyB3ZSBuZWVkIHRvIGVtaXQgY29kZSB0byByZXN0b3JlIHJlZ2lzdGVycy4KICAg
ICAgICAgICAgICAgICBwYWlycy5yZXNpemUoMCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0Fpckxvd2VyRW50cnlTd2l0Y2guY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTG93ZXJFbnRyeVN3aXRjaC5jcHAJKHJldmlzaW9uIDIw
NjYxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTG93ZXJFbnRyeVN3aXRj
aC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDcgKzQzLDcgQEAgdm9pZCBsb3dlckVudHJ5U3dp
dGNoKENvZGUmIGNvZGUpCiAgICAgLy8gRmlndXJlIG91dCB0aGUgc2V0IG9mIGJsb2NrcyB0aGF0
IHNob3VsZCBiZSBkdXBsaWNhdGVkLgogICAgIEJsb2NrV29ya2xpc3Qgd29ya2xpc3Q7CiAgICAg
Zm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGNvZGUpIHsKLSAgICAgICAgaWYgKGJsb2NrLT5sYXN0
KCkub3Bjb2RlID09IEVudHJ5U3dpdGNoKQorICAgICAgICBpZiAoYmxvY2stPmxhc3QoKS5raW5k
Lm9wY29kZSA9PSBFbnRyeVN3aXRjaCkKICAgICAgICAgICAgIHdvcmtsaXN0LnB1c2goYmxvY2sp
OwogICAgIH0KICAgICAKQEAgLTYxLDcgKzYxLDcgQEAgdm9pZCBsb3dlckVudHJ5U3dpdGNoKENv
ZGUmIGNvZGUpCiAgICAgCiAgICAgVmVjdG9yPEZyZXF1ZW5jeUNsYXNzPiBlbnRyeXBvaW50RnJl
cXVlbmNpZXMoY29kZS5wcm9jKCkubnVtRW50cnlwb2ludHMoKSwgRnJlcXVlbmN5Q2xhc3M6OlJh
cmUpOwogICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBjb2RlKSB7Ci0gICAgICAgIGlmIChi
bG9jay0+bGFzdCgpLm9wY29kZSAhPSBFbnRyeVN3aXRjaCkKKyAgICAgICAgaWYgKGJsb2NrLT5s
YXN0KCkua2luZC5vcGNvZGUgIT0gRW50cnlTd2l0Y2gpCiAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgZm9yICh1bnNpZ25lZCBlbnRyeXBvaW50SW5kZXggPSBjb2RlLnByb2MoKS5udW1F
bnRyeXBvaW50cygpOyBlbnRyeXBvaW50SW5kZXgtLTspIHsKICAgICAgICAgICAgIGVudHJ5cG9p
bnRGcmVxdWVuY2llc1tlbnRyeXBvaW50SW5kZXhdID0gbWF4RnJlcXVlbmN5KApAQCAtNzEsMTAg
KzcxLDEwIEBAIHZvaWQgbG93ZXJFbnRyeVN3aXRjaChDb2RlJiBjb2RlKQogICAgIH0KICAgICAK
ICAgICBhdXRvIGZpeEVudHJ5U3dpdGNoID0gWyZdIChCYXNpY0Jsb2NrKiBibG9jaywgdW5zaWdu
ZWQgZW50cnlwb2ludEluZGV4KSB7Ci0gICAgICAgIGlmIChibG9jay0+bGFzdCgpLm9wY29kZSAh
PSBFbnRyeVN3aXRjaCkKKyAgICAgICAgaWYgKGJsb2NrLT5sYXN0KCkua2luZC5vcGNvZGUgIT0g
RW50cnlTd2l0Y2gpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIEZyZXF1ZW50ZWRCbG9j
ayB0YXJnZXQgPSBibG9jay0+c3VjY2Vzc29yKGVudHJ5cG9pbnRJbmRleCk7Ci0gICAgICAgIGJs
b2NrLT5sYXN0KCkub3Bjb2RlID0gSnVtcDsKKyAgICAgICAgYmxvY2stPmxhc3QoKS5raW5kLm9w
Y29kZSA9IEp1bXA7CiAgICAgICAgIGJsb2NrLT5zdWNjZXNzb3JzKCkucmVzaXplKDEpOwogICAg
ICAgICBibG9jay0+c3VjY2Vzc29yKDApID0gdGFyZ2V0OwogICAgIH07CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckxvd2VyTWFjcm9zLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckxvd2VyTWFjcm9zLmNwcAkocmV2aXNpb24g
MjA2NjEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMb3dlck1hY3Jvcy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDkgKzQ3LDEwIEBAIHZvaWQgbG93ZXJNYWNyb3MoQ29k
ZSYgY29kZSkKICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnN0SW5kZXggPSAwOyBpbnN0SW5kZXgg
PCBibG9jay0+c2l6ZSgpOyArK2luc3RJbmRleCkgewogICAgICAgICAgICAgSW5zdCYgaW5zdCA9
IGJsb2NrLT5hdChpbnN0SW5kZXgpOwogCi0gICAgICAgICAgICBzd2l0Y2ggKGluc3Qub3Bjb2Rl
KSB7CisgICAgICAgICAgICBzd2l0Y2ggKGluc3Qua2luZC5vcGNvZGUpIHsKICAgICAgICAgICAg
IGNhc2UgQ0NhbGw6IHsKICAgICAgICAgICAgICAgICBDQ2FsbFZhbHVlKiB2YWx1ZSA9IGluc3Qu
b3JpZ2luLT5hczxDQ2FsbFZhbHVlPigpOworICAgICAgICAgICAgICAgIEtpbmQgb2xkS2luZCA9
IGluc3Qua2luZDsKIAogICAgICAgICAgICAgICAgIFZlY3RvcjxBcmc+IGRlc3RpbmF0aW9ucyA9
IGNvbXB1dGVDQ2FsbGluZ0NvbnZlbnRpb24oY29kZSwgdmFsdWUpOwogCkBAIC03MCw2ICs3MSw4
IEBAIHZvaWQgbG93ZXJNYWNyb3MoQ29kZSYgY29kZSkKICAgICAgICAgICAgICAgICBBcmcgcmVz
dWx0RHN0ID0gdmFsdWUtPnR5cGUoKSA9PSBWb2lkID8gQXJnKCkgOiBpbnN0LmFyZ3NbMV07CiAg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaW5zdCA9IGJ1aWxkQ0NhbGwoY29kZSwg
aW5zdC5vcmlnaW4sIGRlc3RpbmF0aW9ucyk7CisgICAgICAgICAgICAgICAgaWYgKG9sZEtpbmQu
dHJhcHMpCisgICAgICAgICAgICAgICAgICAgIGluc3Qua2luZC50cmFwcyA9IHRydWU7CiAKICAg
ICAgICAgICAgICAgICBUbXAgcmVzdWx0ID0gY0NhbGxSZXN1bHQodmFsdWUtPnR5cGUoKSk7CiAg
ICAgICAgICAgICAgICAgc3dpdGNoICh2YWx1ZS0+dHlwZSgpKSB7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wdGltaXplQmxvY2tPcmRlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcHRpbWl6ZUJsb2NrT3JkZXIuY3Bw
CShyZXZpc2lvbiAyMDY2MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9w
dGltaXplQmxvY2tPcmRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2MCw3ICsxNjAsNyBAQCB2
b2lkIG9wdGltaXplQmxvY2tPcmRlcihDb2RlJiBjb2RlKQogICAgICAgICAvLyBvcHRpbWl6YXRp
b24uICBZb3UnbGwgcHJvYmFibHkgcmVhbGl6ZSB0aGF0IGFzIHNvb24gYXMgeW91IGxvb2sgYXQg
dGhlIGRpc2Fzc2VtYmx5LCBhbmQgaXQKICAgICAgICAgLy8gY2VydGFpbmx5IHdvbid0IGNhdXNl
IGFueSBjb3JyZWN0bmVzcyBpc3N1ZXMuCiAgICAgICAgIAotICAgICAgICBzd2l0Y2ggKGJyYW5j
aC5vcGNvZGUpIHsKKyAgICAgICAgc3dpdGNoIChicmFuY2gua2luZC5vcGNvZGUpIHsKICAgICAg
ICAgY2FzZSBCcmFuY2g4OgogICAgICAgICBjYXNlIEJyYW5jaDMyOgogICAgICAgICBjYXNlIEJy
YW5jaDY0OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJSZXBvcnRVc2Vk
UmVnaXN0ZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpclJlcG9ydFVzZWRSZWdpc3RlcnMuY3BwCShyZXZpc2lvbiAyMDY2MTApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclJlcG9ydFVzZWRSZWdpc3RlcnMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC03Myw3ICs3Myw3IEBAIHZvaWQgcmVwb3J0VXNlZFJlZ2lzdGVycyhDb2RlJiBj
b2RlKQogICAgICAgICAgICAgICAgICAgICBpbnN0ID0gSW5zdCgpOwogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoaW5zdC5vcGNvZGUgPT0gUGF0Y2gpIHsKKyAg
ICAgICAgICAgIGlmIChpbnN0LmtpbmQub3Bjb2RlID09IFBhdGNoKSB7CiAgICAgICAgICAgICAg
ICAgUmVnaXN0ZXJTZXQgcmVnaXN0ZXJTZXQ7CiAgICAgICAgICAgICAgICAgZm9yIChSZWcgcmVn
IDogbG9jYWxDYWxjLmxpdmUoKSkKICAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJTZXQuc2V0
KHJlZyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNpbXBsaWZ5Q0ZH
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNpbXBs
aWZ5Q0ZHLmNwcAkocmV2aXNpb24gMjA2NjEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJTaW1wbGlmeUNGRy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc4LDcgKzc4LDcgQEAg
Ym9vbCBzaW1wbGlmeUNGRyhDb2RlJiBjb2RlKQogICAgICAgICAgICAgZm9yIChCYXNpY0Jsb2Nr
KiYgc3VjY2Vzc29yIDogYmxvY2stPnN1Y2Nlc3NvckJsb2NrcygpKSB7CiAgICAgICAgICAgICAg
ICAgaWYgKHN1Y2Nlc3NvciAhPSBibG9jawogICAgICAgICAgICAgICAgICAgICAmJiBzdWNjZXNz
b3ItPnNpemUoKSA9PSAxCi0gICAgICAgICAgICAgICAgICAgICYmIHN1Y2Nlc3Nvci0+bGFzdCgp
Lm9wY29kZSA9PSBKdW1wKSB7CisgICAgICAgICAgICAgICAgICAgICYmIHN1Y2Nlc3Nvci0+bGFz
dCgpLmtpbmQub3Bjb2RlID09IEp1bXApIHsKICAgICAgICAgICAgICAgICAgICAgQmFzaWNCbG9j
ayogbmV3U3VjY2Vzc29yID0gc3VjY2Vzc29yLT5zdWNjZXNzb3JCbG9jaygwKTsKICAgICAgICAg
ICAgICAgICAgICAgaWYgKG5ld1N1Y2Nlc3NvciAhPSBzdWNjZXNzb3IpIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICh2ZXJib3NlKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpclRtcFdpZHRoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpclRtcFdpZHRoLmNwcAkocmV2aXNpb24gMjA2NjEwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJUbXBXaWR0aC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg4
LDcgKzg4LDcgQEAgdm9pZCBUbXBXaWR0aDo6cmVjb21wdXRlKENvZGUmIGNvZGUpCiAgICAgVmVj
dG9yPEluc3QqPiBtb3ZlczsKICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogY29kZSkgewog
ICAgICAgICBmb3IgKEluc3QmIGluc3QgOiAqYmxvY2spIHsKLSAgICAgICAgICAgIGlmIChpbnN0
Lm9wY29kZSA9PSBNb3ZlICYmIGluc3QuYXJnc1sxXS5pc1RtcCgpKSB7CisgICAgICAgICAgICBp
ZiAoaW5zdC5raW5kLm9wY29kZSA9PSBNb3ZlICYmIGluc3QuYXJnc1sxXS5pc1RtcCgpKSB7CiAg
ICAgICAgICAgICAgICAgaWYgKGluc3QuYXJnc1swXS5pc1RtcCgpKSB7CiAgICAgICAgICAgICAg
ICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IGJvdGggc2lkZXMgb2YgdGhlIE1vdmUgaGF2ZSBhIHdp
ZHRoIGFscmVhZHkgaW5pdGlhbGl6ZWQuIFRoZQogICAgICAgICAgICAgICAgICAgICAvLyBmaXhw
b2ludCBiZWxvdyBhc3N1bWVzIHRoYXQgaXQgbmV2ZXIgaGFzIHRvIGFkZCB0aGluZ3MgdG8gdGhl
IEhhc2hNYXAuCkBAIC0xMzUsNyArMTM1LDcgQEAgdm9pZCBUbXBXaWR0aDo6cmVjb21wdXRlKENv
ZGUmIGNvZGUpCiAgICAgd2hpbGUgKGNoYW5nZWQpIHsKICAgICAgICAgY2hhbmdlZCA9IGZhbHNl
OwogICAgICAgICBmb3IgKEluc3QqIG1vdmUgOiBtb3ZlcykgewotICAgICAgICAgICAgQVNTRVJU
KG1vdmUtPm9wY29kZSA9PSBNb3ZlKTsKKyAgICAgICAgICAgIEFTU0VSVChtb3ZlLT5raW5kLm9w
Y29kZSA9PSBNb3ZlKTsKICAgICAgICAgICAgIEFTU0VSVChtb3ZlLT5hcmdzWzBdLmlzVG1wKCkp
OwogICAgICAgICAgICAgQVNTRVJUKG1vdmUtPmFyZ3NbMV0uaXNUbXAoKSk7CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVXNlQ291bnRzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJVc2VDb3VudHMuaAkocmV2aXNpb24gMjA2
NjEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJVc2VDb3VudHMuaAkod29y
a2luZyBjb3B5KQpAQCAtODgsNyArODgsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY291bnRzLm51bURlZnMgKz0gZnJlcXVlbmN5OwogICAgICAgICAgICAgICAgICAg
ICB9KTsKIAotICAgICAgICAgICAgICAgIGlmICgoaW5zdC5vcGNvZGUgPT0gTW92ZSB8fCBpbnN0
Lm9wY29kZSA9PSBNb3ZlMzIpCisgICAgICAgICAgICAgICAgaWYgKChpbnN0LmtpbmQub3Bjb2Rl
ID09IE1vdmUgfHwgaW5zdC5raW5kLm9wY29kZSA9PSBNb3ZlMzIpCiAgICAgICAgICAgICAgICAg
ICAgICYmIGluc3QuYXJnc1swXS5pc1NvbWVJbW0oKQogICAgICAgICAgICAgICAgICAgICAmJiBp
bnN0LmFyZ3NbMV0uaXM8VGhpbmc+KCkpCiAgICAgICAgICAgICAgICAgICAgIG1fY291bnRzLmFk
ZChpbnN0LmFyZ3NbMV0uYXM8VGhpbmc+KCksIENvdW50cygpKS5pdGVyYXRvci0+dmFsdWUubnVt
Q29uc3REZWZzKys7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclZhbGlk
YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclZh
bGlkYXRlLmNwcAkocmV2aXNpb24gMjA2NjEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJWYWxpZGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk1LDEwICs5NSwxNSBAQCBw
dWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgmYXJnIDw9ICZpbnN0LmFy
Z3MubGFzdCgpLCAoIkF0ICIsIGFyZywgIiBpbiAiLCBpbnN0LCAiIGluICIsICpibG9jaykpOwog
ICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICBzd2l0Y2ggKGluc3Qub3Bjb2RlKSB7CisgICAgICAgICAgICAgICAgc3dpdGNoIChpbnN0Lmtp
bmQub3Bjb2RlKSB7CiAgICAgICAgICAgICAgICAgY2FzZSBFbnRyeVN3aXRjaDoKICAgICAgICAg
ICAgICAgICAgICAgVkFMSURBVEUoYmxvY2stPm51bVN1Y2Nlc3NvcnMoKSA9PSBtX2NvZGUucHJv
YygpLm51bUVudHJ5cG9pbnRzKCksICgiQXQgIiwgaW5zdCwgIiBpbiAiLCAqYmxvY2spKTsKICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBTaHVmZmxlOgor
ICAgICAgICAgICAgICAgICAgICAvLyBXZSBjYW4ndCBoYW5kbGUgdHJhcHBpbmcgc2h1ZmZsZXMg
YmVjYXVzZSBvZiBob3cgd2UgbG93ZXIgdGhlbS4gVGhhdCBjb3VsZAorICAgICAgICAgICAgICAg
ICAgICAvLyBiZSBmaXhlZCB0aG91Z2guCisgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKCFp
bnN0LmtpbmQudHJhcHMsICgiQXQgIiwgaW5zdCwgIiBpbiAiLCAqYmxvY2spKTsKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9vcGNvZGVfZ2VuZXJhdG9yLnJiCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvb3Bjb2RlX2dlbmVyYXRvci5yYgkocmV2aXNpb24gMjA2NjEw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9vcGNvZGVfZ2VuZXJhdG9yLnJiCSh3
b3JraW5nIGNvcHkpCkBAIC01NDUsNyArNTQ1LDcgQEAgZGVmIG1hdGNoRm9ybXMob3V0cCwgc3Bl
ZWQsIGZvcm1zLCBjb2x1bQogZW5kCiAKIGRlZiBtYXRjaEluc3RPdmVybG9hZChvdXRwLCBzcGVl
ZCwgaW5zdCkKLSAgICBvdXRwLnB1dHMgInN3aXRjaCAoI3tpbnN0fS0+b3Bjb2RlKSB7IgorICAg
IG91dHAucHV0cyAic3dpdGNoICgje2luc3R9LT5raW5kLm9wY29kZSkgeyIKICAgICAkb3Bjb2Rl
cy52YWx1ZXMuZWFjaCB7CiAgICAgICAgIHwgb3Bjb2RlIHwKICAgICAgICAgb3V0cC5wdXRzICJj
YXNlICN7b3Bjb2RlLm5hbWV9OiIKQEAgLTgzNiw3ICs4MzYsNyBAQCB3cml0ZUgoIk9wY29kZUdl
bmVyYXRlZCIpIHsKIAogICAgIG91dHAucHV0cyAiYm9vbCBJbnN0OjphZG1pdHNTdGFjayh1bnNp
Z25lZCBhcmdJbmRleCkiCiAgICAgb3V0cC5wdXRzICJ7IgotICAgIG91dHAucHV0cyAic3dpdGNo
IChvcGNvZGUpIHsiCisgICAgb3V0cC5wdXRzICJzd2l0Y2ggKGtpbmQub3Bjb2RlKSB7IgogICAg
ICRvcGNvZGVzLnZhbHVlcy5lYWNoIHsKICAgICAgICAgfCBvcGNvZGUgfAogICAgICAgICBvdXRw
LnB1dHMgImNhc2UgI3tvcGNvZGUubmFtZX06IgpAQCAtOTc4LDcgKzk3OCw3IEBAIHdyaXRlSCgi
T3Bjb2RlR2VuZXJhdGVkIikgewogCiAgICAgb3V0cC5wdXRzICJib29sIEluc3Q6OmlzVGVybWlu
YWwoKSIKICAgICBvdXRwLnB1dHMgInsiCi0gICAgb3V0cC5wdXRzICJzd2l0Y2ggKG9wY29kZSkg
eyIKKyAgICBvdXRwLnB1dHMgInN3aXRjaCAoa2luZC5vcGNvZGUpIHsiCiAgICAgZm91bmRUcnVl
ID0gZmFsc2UKICAgICAkb3Bjb2Rlcy52YWx1ZXMuZWFjaCB7CiAgICAgICAgIHwgb3Bjb2RlIHwK
QEAgLTEwMDQsNyArMTAwNCw5IEBAIHdyaXRlSCgiT3Bjb2RlR2VuZXJhdGVkIikgewogICAgIAog
ICAgIG91dHAucHV0cyAiYm9vbCBJbnN0OjpoYXNOb25BcmdOb25Db250cm9sRWZmZWN0cygpIgog
ICAgIG91dHAucHV0cyAieyIKLSAgICBvdXRwLnB1dHMgInN3aXRjaCAob3Bjb2RlKSB7IgorICAg
IG91dHAucHV0cyAiaWYgKGtpbmQudHJhcHMpIgorICAgIG91dHAucHV0cyAicmV0dXJuIHRydWU7
IgorICAgIG91dHAucHV0cyAic3dpdGNoIChraW5kLm9wY29kZSkgeyIKICAgICBmb3VuZFRydWUg
PSBmYWxzZQogICAgICRvcGNvZGVzLnZhbHVlcy5lYWNoIHsKICAgICAgICAgfCBvcGNvZGUgfApA
QCAtMTAzMCw3ICsxMDMyLDkgQEAgd3JpdGVIKCJPcGNvZGVHZW5lcmF0ZWQiKSB7CiAgICAgCiAg
ICAgb3V0cC5wdXRzICJib29sIEluc3Q6Omhhc05vbkFyZ0VmZmVjdHMoKSIKICAgICBvdXRwLnB1
dHMgInsiCi0gICAgb3V0cC5wdXRzICJzd2l0Y2ggKG9wY29kZSkgeyIKKyAgICBvdXRwLnB1dHMg
ImlmIChraW5kLnRyYXBzKSIKKyAgICBvdXRwLnB1dHMgInJldHVybiB0cnVlOyIKKyAgICBvdXRw
LnB1dHMgInN3aXRjaCAoa2luZC5vcGNvZGUpIHsiCiAgICAgZm91bmRUcnVlID0gZmFsc2UKICAg
ICAkb3Bjb2Rlcy52YWx1ZXMuZWFjaCB7CiAgICAgICAgIHwgb3Bjb2RlIHwKSW5kZXg6IFNvdXJj
ZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCShyZXZp
c2lvbiAyMDY2MTApCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDE1IEBACisyMDE2LTA5LTI5ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+
CisKKyAgICAgICAgQWlyIHNob3VsZCBoYXZlIGEgd2F5IG9mIGV4cHJlc3NpbmcgYWRkaXRpb25h
bCBpbnN0cnVjdGlvbiBmbGFncworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTYyNjk5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiB3dGYvQ29tbWFQcmludGVyLmg6CisgICAgICAgIChXVEY6OkNvbW1hUHJp
bnRlcjo6Q29tbWFQcmludGVyKToKKyAgICAgICAgKFdURjo6Q29tbWFQcmludGVyOjpkdW1wKToK
KyAgICAgICAgKFdURjo6Q29tbWFQcmludGVyOjpkaWRQcmludCk6CisKIDIwMTYtMDktMjkgIE1h
cmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgogCiAgICAgICAgIFJlLWVuYWJsZSBTdHJpbmdW
aWV3IGxpZmUtY3ljbGUgY2hlY2tpbmcuCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9Db21tYVByaW50
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9Db21tYVByaW50ZXIuaAkocmV2aXNp
b24gMjA2NjEwKQorKysgU291cmNlL1dURi93dGYvQ29tbWFQcmludGVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTMyLDI1ICszMiwzMCBAQCBuYW1lc3BhY2UgV1RGIHsKIAogY2xhc3MgQ29tbWFQcmludGVy
IHsKIHB1YmxpYzoKLSAgICBDb21tYVByaW50ZXIoY29uc3QgY2hhciogY29tbWEgPSAiLCAiKQor
ICAgIENvbW1hUHJpbnRlcihjb25zdCBjaGFyKiBjb21tYSA9ICIsICIsIGNvbnN0IGNoYXIqIHN0
YXJ0ID0gIiIpCiAgICAgICAgIDogbV9jb21tYShjb21tYSkKLSAgICAgICAgLCBtX2lzRmlyc3Qo
dHJ1ZSkKKyAgICAgICAgLCBtX3N0YXJ0KHN0YXJ0KQorICAgICAgICAsIG1fZGlkUHJpbnQoZmFs
c2UpCiAgICAgewogICAgIH0KICAgICAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkg
Y29uc3QKICAgICB7Ci0gICAgICAgIGlmIChtX2lzRmlyc3QpIHsKLSAgICAgICAgICAgIG1faXNG
aXJzdCA9IGZhbHNlOworICAgICAgICBpZiAoIW1fZGlkUHJpbnQpIHsKKyAgICAgICAgICAgIG91
dC5wcmludChtX3N0YXJ0KTsKKyAgICAgICAgICAgIG1fZGlkUHJpbnQgPSB0cnVlOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBvdXQucHJpbnQobV9j
b21tYSk7CiAgICAgfQogICAgIAorICAgIGJvb2wgZGlkUHJpbnQoKSBjb25zdCB7IHJldHVybiBt
X2RpZFByaW50OyB9CisgICAgCiBwcml2YXRlOgogICAgIGNvbnN0IGNoYXIqIG1fY29tbWE7Ci0g
ICAgbXV0YWJsZSBib29sIG1faXNGaXJzdDsKKyAgICBjb25zdCBjaGFyKiBtX3N0YXJ0OworICAg
IG11dGFibGUgYm9vbCBtX2RpZFByaW50OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV1RGCkluZGV4
OiBXZWJzaXRlcy93ZWJraXQub3JnL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJzaXRlcy93
ZWJraXQub3JnL0NoYW5nZUxvZwkocmV2aXNpb24gMjA2NjM3KQorKysgV2Vic2l0ZXMvd2Via2l0
Lm9yZy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMiBAQAorMjAxNi0wOS0z
MCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIEFpciBzaG91bGQg
aGF2ZSBhIHdheSBvZiBleHByZXNzaW5nIGFkZGl0aW9uYWwgaW5zdHJ1Y3Rpb24gZmxhZ3MKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MjY5OQorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogZG9jcy9iMy9h
c3NlbWJseS1pbnRlcm1lZGlhdGUtcmVwcmVzZW50YXRpb24uaHRtbDoKKwogMjAxNi0wOS0yOCAg
RmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIEIzIG9wY29kZXMgc2hv
dWxkIGxlYXZlIHJvb20gZm9yIGZsYWdzCkluZGV4OiBXZWJzaXRlcy93ZWJraXQub3JnL2RvY3Mv
YjMvYXNzZW1ibHktaW50ZXJtZWRpYXRlLXJlcHJlc2VudGF0aW9uLmh0bWwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2Vic2l0ZXMvd2Via2l0Lm9yZy9kb2NzL2IzL2Fzc2VtYmx5LWludGVybWVkaWF0ZS1yZXBy
ZXNlbnRhdGlvbi5odG1sCShyZXZpc2lvbiAyMDY2MTApCisrKyBXZWJzaXRlcy93ZWJraXQub3Jn
L2RvY3MvYjMvYXNzZW1ibHktaW50ZXJtZWRpYXRlLXJlcHJlc2VudGF0aW9uLmh0bWwJKHdvcmtp
bmcgY29weSkKQEAgLTI4LDEwICsyOCwxMSBAQAogICAgICAgPGEgaHJlZj0iaHR0cDovL3RyYWMu
d2Via2l0Lm9yZy9icm93c2VyL3RydW5rL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
SW5zdC5oIj48Y29kZT5JbnN0PC9jb2RlPjwvYT5zLgogICAgICAgQWlyIGhhcyBhbiBleHBsaWNp
dCBjb250cm9sIGZsb3cgZ3JhcGg6IGVhY2ggYmFzaWMgYmxvY2sgaGFzIHByZWRlY2Vzc29yIGFu
ZCBzdWNjZXNzb3IgYmxvY2tzLgogICAgICAgRXhlY3V0aW9uIGFsd2F5cyBiZWdpbnMgYXQgdGhl
IGZpcnN0IGJhc2ljIGJsb2NrICg8Y29kZT5jb2RlWzBdPC9jb2RlPikuIFRoZSA8Y29kZT5JbnN0
PC9jb2RlPnMKLSAgICAgIGluIGVhY2ggYmxvY2sgYXJlIGV4ZWN1dGVkIGluIG9yZGVyLiBFYWNo
IDxjb2RlPkluc3Q8L2NvZGU+IGhhcyBhbiBvcGNvZGUsIGFuIGFycmF5IG9mCi0gICAgICBhcmd1
bWVudHMKKyAgICAgIGluIGVhY2ggYmxvY2sgYXJlIGV4ZWN1dGVkIGluIG9yZGVyLiBFYWNoIDxj
b2RlPkluc3Q8L2NvZGU+IGhhcyBhbiBvcGNvZGUsIHNvbWUgZmxhZ3MsIGFuCisgICAgICBhcnJh
eSBvZiBhcmd1bWVudHMKICAgICAgICg8YSBocmVmPSJodHRwOi8vdHJhYy53ZWJraXQub3JnL2Jy
b3dzZXIvdHJ1bmsvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuaCI+PGNvZGU+
QXJnPC9jb2RlPjwvYT5zKSwKLSAgICAgIGFuZCBhbiBvcmlnaW4uIFRoZSBvcmlnaW4gaXMgc2lt
cGx5IGEgQjMgSVIKKyAgICAgIGFuZCBhbiBvcmlnaW4uIFRoZSBvcGNvZGUgYW5kIGZsYWdzIGFy
ZSB3cmFwcGVkIGluIGEgPGNvZGU+S2luZDwvY29kZT4sIHRvIG1ha2UgaXQKKyAgICAgIGNvbnZl
bmllbnQgdG8gY2FycnkgdGhlbSBhcm91bmQgdG9nZXRoZXIuIFRoZSBvcmlnaW4gaXMgc2ltcGx5
IGEgQjMgSVIKICAgICAgIDxhIGhyZWY9Imh0dHA6Ly90cmFjLndlYmtpdC5vcmcvYnJvd3Nlci90
cnVuay9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5oIj48Y29kZT5WYWx1ZTwvY29k
ZT48L2E+LgogICAgICAgU29tZSBvcGNvZGVzIHVzZSB0aGUgb3JpZ2luIGZvciBhZGRpdGlvbmFs
IG1ldGEtZGF0YS4gVGhpcyB3b3JrcyBiZWNhdXNlIEFpciBjb2RlIGFsd2F5cwogICAgICAgY29l
eGlzdHMgd2l0aCB0aGUgQjMgcHJvY2VkdXJlIGZyb20gd2hpY2ggaXQgd2FzIGdlbmVyYXRlZC48
L3A+CkBAIC0yNTEsNiArMjUyLDMyIEBACiAgICAgICA8bGk+PGNvZGU+ZnVuYyglcmN4LCBVc2Va
RGVmLCBHUCwgV2lkdGgzMik8L2NvZGU+PC9saT4KICAgICA8L29sPgogICAgIAorICAgIDxwPkl0
J3MgaW1wb3J0YW50IHRvIHJlbWVtYmVyIHRoYXQgQWlyJ3Mgc3VtbWFyaWVzIG9mIHdoYXQgaW5z
dHJ1Y3Rpb25zIGRvIHRvIGFyZ3VtZW50cyBhcmUKKyAgICAgIG5vdCBtZWFudCB0byBiZSBleGhh
dXN0aXZlLiBGb3IgZXhhbXBsZSwgaWYgYW4gaW5zdHJ1Y3Rpb24gY2xhaW1zIHRvIHVzZSBhbiBh
ZGRyZXNzLCB0aGlzCisgICAgICB0ZWxscyB5b3UgdGhhdCB0aGUgaW5zdHJ1Y3Rpb24gd2lsbCBw
ZXJmb3JtIGEgbG9hZCBidXQgaXQgdGVsbHMgeW91IG5vdGhpbmcgYWJvdXQgaG93IHRoYXQKKyAg
ICAgIGxvYWQgd2lsbCBiZSBwZXJmb3JtZWQuIFRoaXMgbWVhbnMgdGhhdCB1bmxlc3MgeW91IGtu
b3cgZXhhY3RseSB3aGF0IGl0IG1lYW5zIHRvIHVzZS9kZWYgYW4KKyAgICAgIGFyZ3VtZW50LCB5
b3UgY2Fubm90IHBlcmZvcm0gdGhpcyB0cmFuc2Zvcm1hdGlvbjo8L3A+CisgICAgCisgICAgPHVs
PgorICAgICAgPGxpPkJlZm9yZToKKyAgICAgICAgPHByZT48Y29kZT5Gb28zMiAoJXJheCk8L2Nv
ZGU+PC9wcmU+PC9saT4KKyAgICAgIDxsaT5BZnRlcjoKKyAgICAgICAgPHByZT48Y29kZT5Nb3Zl
MzIgKCVyYXgpLCAldG1wCitGb28zMiAldG1wPC9jb2RlPjwvcHJlPjwvbGk+CisgICAgPC91bD4K
KyAgICAKKyAgICA8cD5FdmVuIGlmIHlvdSBrbm93IHRoYXQgRm9vMzIgb25seSB1c2VzIGl0cyBh
cmd1bWVudCwgeW91IGNhbm5vdCBkbyB0aGlzIGJlY2F1c2UgTW92ZTMyIG1heQorICAgICAgbm90
IGxvYWQgZnJvbSB0aGUgYWRkcmVzcyB1c2luZyBleGFjdGx5IHRoZSBzYW1lIGtpbmQgb2YgbG9h
ZCB0aGF0IEZvbzMyIHdvdWxkIGhhdmUgZG9uZS4KKyAgICAgIE1lbW9yeSBhY2Nlc3NlcyBoYXZl
IG1hbnkgZGltZW5zaW9ucyBvZiBvcHRpb25zOiBhbGlnbm1lbnQgc2VtYW50aWNzIChpZiB5b3Un
cmUgbHVja3kgdGhlbgorICAgICAgbWlzYWxpZ25lZCBhY2Nlc3NlcyBydW4gZmFzdCBidXQgc29t
ZXRpbWVzIHRoZXkgaWdub3JlIGxvdyBiaXRzLCB0cmFwIGlmIHVuYWxpZ25lZCwgb3IgcnVuCisg
ICAgICBzdXBlciBzbG93IHdoZW4gdW5hbGlnbmVkLCBhbmQgdGhpcyBiZWhhdmlvciBtYXkgZGVw
ZW5kIG9uIHRoZSBvcGNvZGUpLCB0ZW1wb3JhbGl0eSBhbmQKKyAgICAgIG1lbW9yeSBvcmRlcmlu
ZywgZGV0ZXJtaW5pc20gb2YgdHJhcHBpbmcsIGV0Yy4gSnVzdCBzZWVpbmcgdGhhdCBhbiBpbnN0
cnVjdGlvbiB1c2VzIGFuCisgICAgICBhZGRyZXNzIGRvZXMgbm90IHRlbGwgeW91IHdoYXQga2lu
ZCBvZiBsb2FkIHdpbGwgaGFwcGVuLCBhbmQgY3VycmVudGx5IEFpciBkb2VzIG5vdCBoYXZlIHRo
ZQorICAgICAgYWJpbGl0eSB0byBhbnN3ZXIgc3VjaCBxdWVzdGlvbnMuIEZvcnR1bmF0ZWx5LCBB
aXIgZG9lcyBub3QgaGF2ZSBtdWNoIG5lZWQgdG8gbW92aW5nIG1lbW9yeQorICAgICAgYWNjZXNz
ZXMgb3V0IG9mIGluc3RydWN0aW9ucy4gVXNlcyBhbmQgZGVmcyBvZiB0ZW1wb3JhcmllcywgcmVn
aXN0ZXJzLCBpbW1lZGlhdGVzLCBhbmQgc3BpbGwKKyAgICAgIHNsb3RzIGRvbid0IGhhdmUgdGhl
c2UgY2F2ZWF0cyBhbmQgc28gdGhvc2UgYXJndW1lbnRzIGNhbiBiZSBtb3ZlZCBmcm9tIG9uZSBp
bnN0cnVjdGlvbiB0bworICAgICAgYW5vdGhlciB3aXRob3V0IHdvcnJpZXMuPC9wPgorICAgIAog
ICAgIDxwPkFpcidzIGludHJvc3BlY3Rpb24gb2YgPGNvZGU+SW5zdDwvY29kZT5zIHRlbmRzIHRv
IGJlIHF1aXRlIGZhc3QgdGhhbmtzIHRvIHRoZSB1c2Ugb2YgdGVtcGxhdGUKICAgICAgIHNwZWNp
YWxpemF0aW9uIGFuZCBDKysgbGFtYmRhcy4gVGhlIDxjb2RlPmZvckVhY2hBcmcoKTwvY29kZT4g
dGVtcGxhdGUgbWV0aG9kIHVzZXMgYW4gZWZmaWNpZW50CiAgICAgICBhcnJhbmdlbWVudCBvZiBz
d2l0Y2ggc3RhdGVtZW50cyB0byBkZXRlcm1pbmUgdGhlIG9wY29kZSBhbmQgb3ZlcmxvYWQuIElm
IDxjb2RlPmZ1bmM8L2NvZGU+IGlzCg==
</data>
<flag name="review"
          id="313534"
          type_id="1"
          status="+"
          setter="mark.lam"
    />
          </attachment>
      

    </bug>

</bugzilla>