<?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>133105</bug_id>
          
          <creation_ts>2014-05-19 20:52:57 -0700</creation_ts>
          <short_desc>[ftlopt] DFG bytecode parser should turn GetById with nothing but a Getter stub as stuff+handleCall, and handleCall should be allowed to inline if it wants to</short_desc>
          <delta_ts>2014-05-20 17:45:56 -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>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>130756</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1010402</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-05-19 20:52:57 -0700</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1010404</commentid>
    <comment_count>1</comment_count>
      <attachid>231750</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-05-19 20:55:18 -0700</bug_when>
    <thetext>Created attachment 231750
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1010563</commentid>
    <comment_count>2</comment_count>
      <attachid>231776</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-05-20 10:46:49 -0700</bug_when>
    <thetext>Created attachment 231776
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1010582</commentid>
    <comment_count>3</comment_count>
      <attachid>231776</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2014-05-20 12:02:40 -0700</bug_when>
    <thetext>Comment on attachment 231776
the patch

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

r=me provided you address the two issues raised in GetByIdStatus::computeForStubInfo().

&gt; Source/JavaScriptCore/bytecode/GetByIdStatus.cpp:127
&gt; +    State takesSlowPath = TakesSlowPath;

The name takesSlowPath is confusing since it can have the value MakesCalls.

&gt; Source/JavaScriptCore/bytecode/GetByIdStatus.cpp:132
&gt; +        for (unsigned i = 0; i &lt; list-&gt;size(); ++i)
&gt; +            takesSlowPath = MakesCalls;

Why is this a loop?  Are you missing &quot;if (list-&gt;at(i).doesCalls())&quot;?

&gt; Source/JavaScriptCore/jit/JIT.h:245
&gt; +        

Extraneous space - delete</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1010583</commentid>
    <comment_count>4</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-05-20 12:07:48 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 231776 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=231776&amp;action=review
&gt; 
&gt; r=me provided you address the two issues raised in GetByIdStatus::computeForStubInfo().
&gt; 
&gt; &gt; Source/JavaScriptCore/bytecode/GetByIdStatus.cpp:127
&gt; &gt; +    State takesSlowPath = TakesSlowPath;
&gt; 
&gt; The name takesSlowPath is confusing since it can have the value MakesCalls.

Renamed to slowPathState.

&gt; 
&gt; &gt; Source/JavaScriptCore/bytecode/GetByIdStatus.cpp:132
&gt; &gt; +        for (unsigned i = 0; i &lt; list-&gt;size(); ++i)
&gt; &gt; +            takesSlowPath = MakesCalls;
&gt; 
&gt; Why is this a loop?  Are you missing &quot;if (list-&gt;at(i).doesCalls())&quot;?

Yes!  Thanks!

&gt; 
&gt; &gt; Source/JavaScriptCore/jit/JIT.h:245
&gt; &gt; +        
&gt; 
&gt; Extraneous space - delete

Removed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1010664</commentid>
    <comment_count>5</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-05-20 17:45:56 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/169143</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>231750</attachid>
            <date>2014-05-19 20:55:18 -0700</date>
            <delta_ts>2014-05-20 10:46:49 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>89249</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTY5MTAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwNSBA
QAorMjAxNC0wNS0xOSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IFtmdGxvcHRdIERGRyBieXRlY29kZSBwYXJzZXIgc2hvdWxkIHR1cm4gR2V0QnlJZCB3aXRoIG5v
dGhpbmcgYnV0IGEgR2V0dGVyIHN0dWIgYXMgc3R1ZmYraGFuZGxlQ2FsbCwgYW5kIGhhbmRsZUNh
bGwgc2hvdWxkIGJlIGFsbG93ZWQgdG8gaW5saW5lIGlmIGl0IHdhbnRzIHRvCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzMxMDUKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9j
ay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6cHJpbnRHZXRCeUlkQ2FjaGVTdGF0dXMp
OgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmZpbmRTdHViSW5mbyk6CisgICAgICAgICogYnl0
ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZU9yaWdpbi5jcHA6Cisg
ICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVPcmln
aW4uaDoKKyAgICAgICAgKEpTQzo6SW5saW5lQ2FsbEZyYW1lOjpzcGVjaWFsaXphdGlvbktpbmRG
b3IpOgorICAgICAgICAqIGJ5dGVjb2RlL0dldEJ5SWRTdGF0dXMuY3BwOgorICAgICAgICAoSlND
OjpHZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKToKKyAgICAgICAgKEpTQzo6R2V0QnlJZFN0YXR1
czo6Y29tcHV0ZUZvclN0dWJJbmZvKToKKyAgICAgICAgKEpTQzo6R2V0QnlJZFN0YXR1czo6bWFr
ZXNDYWxscyk6CisgICAgICAgIChKU0M6OkdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JDaGFpbik6
IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5oOgorICAgICAgICAo
SlNDOjpHZXRCeUlkU3RhdHVzOjptYWtlc0NhbGxzKTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRl
Y29kZS9HZXRCeUlkVmFyaWFudC5jcHA6CisgICAgICAgIChKU0M6OkdldEJ5SWRWYXJpYW50Ojp+
R2V0QnlJZFZhcmlhbnQpOgorICAgICAgICAoSlNDOjpHZXRCeUlkVmFyaWFudDo6R2V0QnlJZFZh
cmlhbnQpOgorICAgICAgICAoSlNDOjpHZXRCeUlkVmFyaWFudDo6b3BlcmF0b3I9KToKKyAgICAg
ICAgKEpTQzo6R2V0QnlJZFZhcmlhbnQ6OmR1bXBJbkNvbnRleHQpOgorICAgICAgICAqIGJ5dGVj
b2RlL0dldEJ5SWRWYXJpYW50Lmg6CisgICAgICAgIChKU0M6OkdldEJ5SWRWYXJpYW50OjpHZXRC
eUlkVmFyaWFudCk6CisgICAgICAgIChKU0M6OkdldEJ5SWRWYXJpYW50OjpjYWxsTGlua1N0YXR1
cyk6CisgICAgICAgICogYnl0ZWNvZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5jcHA6CisgICAg
ICAgIChKU0M6OkdldEJ5SWRBY2Nlc3M6OmZyb21TdHJ1Y3R1cmVTdHViSW5mbyk6CisgICAgICAg
IChKU0M6OlBvbHltb3JwaGljR2V0QnlJZExpc3Q6OmZyb20pOgorICAgICAgICAqIGJ5dGVjb2Rl
L1NwZWN1bGF0ZWRUeXBlLmg6CisgICAgICAgICogYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8u
Y3BwOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6ZGVyZWYpOgorICAgICAgICAo
SlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6dmlzaXRXZWFrUmVmZXJlbmNlcyk6CisgICAgICAgICog
Ynl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaDoKKyAgICAgICAgKEpTQzo6aXNHZXRCeUlkQWNj
ZXNzKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1YkluZm86OmluaXRHZXRCeUlkQ2hhaW4p
OiBEZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdEhlYXAuaDoKKyAgICAgICAgKiBk
ZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6REZHOjpB
YnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHMpOgor
ICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
Qnl0ZUNvZGVQYXJzZXI6OmFkZENhbGwpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFy
c2VyOjpoYW5kbGVDYWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFu
ZGxlSW5saW5pbmcpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVH
ZXRCeU9mZnNldCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUdl
dEJ5SWQpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpJbmxpbmVTdGFja0Vu
dHJ5OjpJbmxpbmVTdGFja0VudHJ5KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNl
cjo6cGFyc2UpOgorICAgICAgICAqIGRmZy9ERkdDU0VQaGFzZS5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6Q1NFUGhhc2U6OmdldEdldHRlclNldHRlckJ5T2Zmc2V0TG9hZEVsaW1pbmF0aW9uKToK
KyAgICAgICAgKEpTQzo6REZHOjpDU0VQaGFzZTo6Z2V0SW50ZXJuYWxGaWVsZExvYWRFbGltaW5h
dGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OnBlcmZvcm1Ob2RlQ1NFKToKKyAg
ICAgICAgKEpTQzo6REZHOjpDU0VQaGFzZTo6Z2V0VHlwZWRBcnJheUJ5dGVPZmZzZXRMb2FkRWxp
bWluYXRpb24pOiBEZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdDbG9iYmVyaXplLmg6CisgICAg
ICAgIChKU0M6OkRGRzo6Y2xvYmJlcml6ZSk6CisgICAgICAgICogZGZnL0RGR0ZpeHVwUGhhc2Uu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OmZpeHVwTm9kZSk6CisgICAgICAg
ICogZGZnL0RGR0pJVENvbXBpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxl
cjo6bGlua0Z1bmN0aW9uKToKKyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAoSlND
OjpERkc6Ok5vZGU6Omhhc1N0b3JhZ2VBY2Nlc3NEYXRhKToKKyAgICAgICAgKiBkZmcvREZHTm9k
ZVR5cGUuaDoKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpyZWlmeUlubGluZWRDYWxsRnJhbWVzKToKKyAgICAgICAgKiBkZmcv
REZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlBy
ZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlOjpwcm9wYWdhdGUpOgorICAgICAgICAqIGRmZy9ERkdT
YWZlVG9FeGVjdXRlLmg6CisgICAgICAgIChKU0M6OkRGRzo6c2FmZVRvRXhlY3V0ZSk6CisgICAg
ICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVK
SVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgor
ICAgICAgICAqIGZ0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmNwcDoKKyAgICAgICAgKiBm
dGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5oOgorICAgICAgICAqIGZ0bC9GVExDYXBhYmls
aXRpZXMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OmNhbkNvbXBpbGUpOgorICAgICAgICAqIGZ0
bC9GVExMaW5rLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpsaW5rKToKKyAgICAgICAgKiBmdGwv
RlRMTG93ZXJERkdUb0xMVk0uY3BwOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZN
Ojpjb21waWxlTm9kZSk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBp
bGVHZXRHZXR0ZXIpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxl
R2V0U2V0dGVyKToKKyAgICAgICAgKiBqaXQvQWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUuaDoK
KyAgICAgICAgKiBqaXQvSklULmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjphc3NlcnRTdGFja1Bv
aW50ZXJPZmZzZXQpOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlKToKKyAgICAg
ICAgKiBqaXQvSklULmg6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcDoKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9ieV9pZCk6CisgICAgICAgICogaml0L1RodW5r
R2VuZXJhdG9ycy5jcHA6CisgICAgICAgIChKU0M6OmFyaXR5Rml4dXBHZW5lcmF0b3IpOgorICAg
ICAgICAoSlNDOjpiYXNlbGluZUdldHRlclJldHVyblRodW5rR2VuZXJhdG9yKToKKyAgICAgICAg
KEpTQzo6YmFzZWxpbmVTZXR0ZXJSZXR1cm5UaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6
OmFyaXR5Rml4dXApOiBEZWxldGVkLgorICAgICAgICAqIGppdC9UaHVua0dlbmVyYXRvcnMuaDoK
KyAgICAgICAgKiBydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHA6CisgICAgICAgIChKU0M6OnNl
dHVwQXJpdHlDaGVja0RhdGEpOgorICAgICAgICAqIHRlc3RzL3N0cmVzcy9leGl0LWZyb20tZ2V0
dGVyLmpzOiBBZGRlZC4KKwogMjAxNC0wNS0xNyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUu
Y29tPgogCiAgICAgICAgIFtmdGxvcHRdIEZhY3RvciBvdXQgaG93IENhbGxMaW5rU3RhdHVzIHVz
ZXMgZXhpdCBzaXRlIGRhdGEKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAxNjkwMTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUyLDExICszNTIs
NiBAQCB2b2lkIENvZGVCbG9jazo6cHJpbnRHZXRCeUlkQ2FjaGVTdGF0dXMoCiAgICAgICAgICAg
ICAgICAgb3V0LnByaW50Zigic2VsZiIpOwogICAgICAgICAgICAgICAgIGJhc2VTdHJ1Y3R1cmUg
PSBzdHViSW5mby51LmdldEJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCk7CiAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfY2hh
aW46Ci0gICAgICAgICAgICAgICAgb3V0LnByaW50ZigiY2hhaW4iKTsKLSAgICAgICAgICAgICAg
ICBiYXNlU3RydWN0dXJlID0gc3R1YkluZm8udS5nZXRCeUlkQ2hhaW4uYmFzZU9iamVjdFN0cnVj
dHVyZS5nZXQoKTsKLSAgICAgICAgICAgICAgICBjaGFpbiA9IHN0dWJJbmZvLnUuZ2V0QnlJZENo
YWluLmNoYWluLmdldCgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2Fz
ZSBhY2Nlc3NfZ2V0X2J5X2lkX2xpc3Q6CiAgICAgICAgICAgICAgICAgb3V0LnByaW50ZigibGlz
dCIpOwogICAgICAgICAgICAgICAgIGxpc3QgPSBzdHViSW5mby51LmdldEJ5SWRMaXN0Lmxpc3Q7
CkBAIC0yMzQ0LDYgKzIzMzksMTUgQEAgU3RydWN0dXJlU3R1YkluZm8qIENvZGVCbG9jazo6YWRk
U3R1YkluZgogICAgIHJldHVybiBtX3N0dWJJbmZvcy5hZGQoKTsKIH0KIAorU3RydWN0dXJlU3R1
YkluZm8qIENvZGVCbG9jazo6ZmluZFN0dWJJbmZvKENvZGVPcmlnaW4gY29kZU9yaWdpbikKK3sK
KyAgICBmb3IgKFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA6IG1fc3R1YkluZm9zKSB7Cisg
ICAgICAgIGlmIChzdHViSW5mby0+Y29kZU9yaWdpbiA9PSBjb2RlT3JpZ2luKQorICAgICAgICAg
ICAgcmV0dXJuIHN0dWJJbmZvOworICAgIH0KKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwogQ2Fs
bExpbmtJbmZvKiBDb2RlQmxvY2s6OmFkZENhbGxMaW5rSW5mbygpCiB7CiAgICAgQ29uY3VycmVu
dEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDE2OTAxNCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMjAxLDYgKzIw
MSwxMCBAQCBwdWJsaWM6CiAgICAgU3RydWN0dXJlU3R1YkluZm8qIGFkZFN0dWJJbmZvKCk7CiAg
ICAgQmFnPFN0cnVjdHVyZVN0dWJJbmZvPjo6aXRlcmF0b3Igc3R1YkluZm9CZWdpbigpIHsgcmV0
dXJuIG1fc3R1YkluZm9zLmJlZ2luKCk7IH0KICAgICBCYWc8U3RydWN0dXJlU3R1YkluZm8+Ojpp
dGVyYXRvciBzdHViSW5mb0VuZCgpIHsgcmV0dXJuIG1fc3R1YkluZm9zLmVuZCgpOyB9CisgICAg
CisgICAgLy8gTyhuKSBvcGVyYXRpb24uIFVzZSBnZXRTdHViSW5mb01hcCgpIHVubGVzcyB5b3Ug
cmVhbGx5IG9ubHkgaW50ZW5kIHRvIGdldCBvbmUKKyAgICAvLyBzdHViIGluZm8uCisgICAgU3Ry
dWN0dXJlU3R1YkluZm8qIGZpbmRTdHViSW5mbyhDb2RlT3JpZ2luKTsKIAogICAgIHZvaWQgcmVz
ZXRTdHViKFN0cnVjdHVyZVN0dWJJbmZvJik7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uY3BwCShyZXZpc2lvbiAxNjkwMTQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIwNiw2ICsyMDYsMTIgQEAgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBv
dXQsIEpTQwogICAgIGNhc2UgSlNDOjpJbmxpbmVDYWxsRnJhbWU6OkNvbnN0cnVjdDoKICAgICAg
ICAgb3V0LnByaW50KCJDb25zdHJ1Y3QiKTsKICAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSlND
OjpJbmxpbmVDYWxsRnJhbWU6OkdldHRlckNhbGw6CisgICAgICAgIG91dC5wcmludCgiR2V0dGVy
Q2FsbCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBKU0M6OklubGluZUNhbGxGcmFtZTo6
U2V0dGVyQ2FsbDoKKyAgICAgICAgb3V0LnByaW50KCJTZXR0ZXJDYWxsIik7CisgICAgICAgIHJl
dHVybjsKICAgICB9CiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uaAkocmV2aXNpb24g
MTY5MDE0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uaAko
d29ya2luZyBjb3B5KQpAQCAtMTIxLDYgKzEyMSwxMSBAQCBzdHJ1Y3QgSW5saW5lQ2FsbEZyYW1l
IHsKICAgICBlbnVtIEtpbmQgewogICAgICAgICBDYWxsLAogICAgICAgICBDb25zdHJ1Y3QsCisg
ICAgICAgIAorICAgICAgICAvLyBGb3IgdGhlc2UsIHRoZSBzdGFja09mZnNldCBpbmNvcnBvcmF0
ZXMgdGhlIGFyZ3VtZW50IGNvdW50IHBsdXMgdGhlIHRydWUgcmV0dXJuIFBDCisgICAgICAgIC8v
IHNsb3QuCisgICAgICAgIEdldHRlckNhbGwsCisgICAgICAgIFNldHRlckNhbGwKICAgICB9Owog
ICAgIAogICAgIHN0YXRpYyBLaW5kIGtpbmRGb3IoQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5k
KQpAQCAtMTM5LDYgKzE0NCw4IEBAIHN0cnVjdCBJbmxpbmVDYWxsRnJhbWUgewogICAgIHsKICAg
ICAgICAgc3dpdGNoIChraW5kKSB7CiAgICAgICAgIGNhc2UgQ2FsbDoKKyAgICAgICAgY2FzZSBH
ZXR0ZXJDYWxsOgorICAgICAgICBjYXNlIFNldHRlckNhbGw6CiAgICAgICAgICAgICByZXR1cm4g
Q29kZUZvckNhbGw7CiAgICAgICAgIGNhc2UgQ29uc3RydWN0OgogICAgICAgICAgICAgcmV0dXJu
IENvZGVGb3JDb25zdHJ1Y3Q7CkBAIC0xNTMsNyArMTYwLDcgQEAgc3RydWN0IElubGluZUNhbGxG
cmFtZSB7CiAgICAgQ29kZU9yaWdpbiBjYWxsZXI7CiAgICAgQml0VmVjdG9yIGNhcHR1cmVkVmFy
czsgLy8gSW5kZXhlZCBieSB0aGUgbWFjaGluZSBjYWxsIGZyYW1lJ3MgdmFyaWFibGUgbnVtYmVy
aW5nLgogICAgIHNpZ25lZCBzdGFja09mZnNldCA6IDMwOwotICAgIEtpbmQga2luZCA6IDE7Cisg
ICAgS2luZCBraW5kIDogMjsKICAgICBib29sIGlzQ2xvc3VyZUNhbGwgOiAxOyAvLyBJZiBmYWxz
ZSB0aGVuIHdlIGtub3cgdGhhdCBjYWxsZWUvc2NvcGUgYXJlIGNvbnN0YW50cyBhbmQgdGhlIERG
RyB3b24ndCB0cmVhdCB0aGVtIGFzIHZhcmlhYmxlcywgaS5lLiB0aGV5IGhhdmUgdG8gYmUgcmVj
b3ZlcmVkIG1hbnVhbGx5LgogICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudHNSZWdpc3Rlcjsg
Ly8gVGhpcyBpcyBvbmx5IHNldCBpZiB0aGUgY29kZSB1c2VzIGFyZ3VtZW50cy4gVGhlIHVubW9k
aWZpZWQgYXJndW1lbnRzIHJlZ2lzdGVyIGZvbGxvd3MgdGhlIHVubW9kaWZpZWRBcmd1bWVudHNS
ZWdpc3RlcigpIGNvbnZlbnRpb24gKHNlZSBDb2RlQmxvY2suaCkuCiAgICAgCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRTdGF0dXMuY3BwCShyZXZp
c2lvbiAxNjkwMTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0
YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJHZXRCeUlkU3RhdHVzLmgiCiAKKyNpbmNsdWRlICJBY2Nlc3NvckNh
bGxKSVRTdHViUm91dGluZS5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkpT
Q0lubGluZXMuaCIKICNpbmNsdWRlICJKU1Njb3BlLmgiCkBAIC04OSw1NyArOTAsNiBAQCBHZXRC
eUlkU3RhdHVzIEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGcm9tCiAjZW5kaWYKIH0KIAotYm9vbCBH
ZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yQ2hhaW4oQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBT
dHJpbmdJbXBsKiB1aWQsIFBhc3NSZWZQdHI8SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbj4gcGFzc2Vk
Q2hhaW4pCi17Ci0jaWYgRU5BQkxFKEpJVCkKLSAgICBSZWZQdHI8SW50ZW5kZWRTdHJ1Y3R1cmVD
aGFpbj4gY2hhaW4gPSBwYXNzZWRDaGFpbjsKLSAgICAKLSAgICAvLyBWYWxpZGF0ZSB0aGUgY2hh
aW4uIElmIHRoZSBjaGFpbiBpcyBpbnZhbGlkLCB0aGVuIGN1cnJlbnRseSB0aGUgYmVzdCB0aGlu
ZwotICAgIC8vIHdlIGNhbiBkbyBpcyB0byBhc3N1bWUgdGhhdCBUYWtlc1Nsb3cgaXMgdHJ1ZS4g
SW4gdGhlIGZ1dHVyZSwgaXQgbWlnaHQgYmUKLSAgICAvLyB3b3J0aCBleHBsb3JpbmcgcmVpZnlp
bmcgdGhlIHN0cnVjdHVyZSBjaGFpbiBmcm9tIHRoZSBzdHJ1Y3R1cmUgd2UndmUgZ290Ci0gICAg
Ly8gaW5zdGVhZCBvZiB1c2luZyB0aGUgb25lIGZyb20gdGhlIGNhY2hlLCBzaW5jZSB0aGF0IHdp
bGwgZG8gdGhlIHJpZ2h0IHRoaW5ncwotICAgIC8vIGlmIHRoZSBzdHJ1Y3R1cmUgY2hhaW4gaGFz
IGNoYW5nZWQuIEJ1dCB0aGF0IG1heSBiZSBoYXJkZXIsIGJlY2F1c2Ugd2UgbWF5Ci0gICAgLy8g
dGhlbiBlbmQgdXAgaGF2aW5nIGEgZGlmZmVyZW50IHR5cGUgb2YgYWNjZXNzIGFsdG9nZXRoZXIu
IEFuZCBpdCBjdXJyZW50bHkKLSAgICAvLyBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgd29ydGggaXQg
dG8gZG8gc28gLS0gZWZmZWN0aXZlbHksIHRoZSBoZXVyaXN0aWMgd2UKLSAgICAvLyBoYXZlIG5v
dyBpcyB0aGF0IGlmIHRoZSBzdHJ1Y3R1cmUgY2hhaW4gaGFzIGNoYW5nZWQgYmV0d2VlbiB3aGVu
IGl0IHdhcwotICAgIC8vIGNhY2hlZCBvbiBpbiB0aGUgYmFzZWxpbmUgSklUIGFuZCB3aGVuIHRo
ZSBERkcgdHJpZWQgdG8gaW5saW5lIHRoZSBhY2Nlc3MsCi0gICAgLy8gdGhlbiB3ZSBmYWxsIGJh
Y2sgb24gYSBwb2x5bW9ycGhpYyBhY2Nlc3MuCi0gICAgaWYgKCFjaGFpbi0+aXNTdGlsbFZhbGlk
KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChjaGFpbi0+aGVhZCgpLT50YWtl
c1Nsb3dQYXRoSW5ERkdGb3JJbXB1cmVQcm9wZXJ0eSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgc2l6ZV90IGNoYWluU2l6ZSA9IGNoYWluLT5zaXplKCk7Ci0gICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBjaGFpblNpemU7IGkrKykgewotICAgICAgICBpZiAoY2hhaW4tPmF0KGkpLT50
YWtlc1Nsb3dQYXRoSW5ERkdGb3JJbXB1cmVQcm9wZXJ0eSgpKQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLQotICAgIEpTT2JqZWN0KiBjdXJyZW50T2JqZWN0ID0gY2hhaW4tPnRl
cm1pbmFsUHJvdG90eXBlKCk7Ci0gICAgU3RydWN0dXJlKiBjdXJyZW50U3RydWN0dXJlID0gY2hh
aW4tPmxhc3QoKTsKLSAgICAKLSAgICBBU1NFUlRfVU5VU0VEKGN1cnJlbnRPYmplY3QsIGN1cnJl
bnRPYmplY3QpOwotICAgIAotICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXNJZ25vcmVkOwotICAgIEpT
Q2VsbCogc3BlY2lmaWNWYWx1ZTsKLSAgICAKLSAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBj
dXJyZW50U3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkoCi0gICAgICAgICpwcm9maWxlZEJsb2Nr
LT52bSgpLCB1aWQsIGF0dHJpYnV0ZXNJZ25vcmVkLCBzcGVjaWZpY1ZhbHVlKTsKLSAgICBpZiAo
Y3VycmVudFN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpCi0gICAgICAgIHNwZWNpZmljVmFsdWUg
PSAwOwotICAgIGlmICghaXNWYWxpZE9mZnNldChvZmZzZXQpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgCi0gICAgcmV0dXJuIGFwcGVuZFZhcmlhbnQoR2V0QnlJZFZhcmlhbnQoU3RydWN0
dXJlU2V0KGNoYWluLT5oZWFkKCkpLCBvZmZzZXQsIHNwZWNpZmljVmFsdWUsIGNoYWluKSk7Ci0j
ZWxzZSAvLyBFTkFCTEUoSklUKQotICAgIFVOVVNFRF9QQVJBTShwcm9maWxlZEJsb2NrKTsKLSAg
ICBVTlVTRURfUEFSQU0odWlkKTsKLSAgICBVTlVTRURfUEFSQU0ocGFzc2VkQ2hhaW4pOwotICAg
IFVOUkVBQ0hBQkxFX0ZPUl9QTEFURk9STSgpOwotICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZiAv
LyBFTkFCTEUoSklUKQotfQotCiBHZXRCeUlkU3RhdHVzIEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVG
b3IoQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBTdHViSW5mb01hcCYgbWFwLCB1bnNpZ25lZCBi
eXRlY29kZUluZGV4LCBTdHJpbmdJbXBsKiB1aWQpCiB7CiAgICAgQ29uY3VycmVudEpJVExvY2tl
ciBsb2NrZXIocHJvZmlsZWRCbG9jay0+bV9sb2NrKTsKQEAgLTE0OCwxMiArOTgsMTMgQEAgR2V0
QnlJZFN0YXR1cyBHZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKAogCiAjaWYgRU5BQkxFKERGR19K
SVQpCiAgICAgcmVzdWx0ID0gY29tcHV0ZUZvclN0dWJJbmZvKAotICAgICAgICBsb2NrZXIsIHBy
b2ZpbGVkQmxvY2ssIG1hcC5nZXQoQ29kZU9yaWdpbihieXRlY29kZUluZGV4KSksIHVpZCk7Cisg
ICAgICAgIGxvY2tlciwgcHJvZmlsZWRCbG9jaywgbWFwLmdldChDb2RlT3JpZ2luKGJ5dGVjb2Rl
SW5kZXgpKSwgdWlkLAorICAgICAgICBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUV4aXRTaXRlRGF0
YShsb2NrZXIsIHByb2ZpbGVkQmxvY2ssIGJ5dGVjb2RlSW5kZXgpKTsKICAgICAKICAgICBpZiAo
IXJlc3VsdC50YWtlc1Nsb3dQYXRoKCkKICAgICAgICAgJiYgKGhhc0V4aXRTaXRlKGxvY2tlciwg
cHJvZmlsZWRCbG9jaywgYnl0ZWNvZGVJbmRleCkKICAgICAgICAgICAgIHx8IHByb2ZpbGVkQmxv
Y2stPmxpa2VseVRvVGFrZVNsb3dDYXNlKGJ5dGVjb2RlSW5kZXgpKSkKLSAgICAgICAgcmV0dXJu
IEdldEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCwgdHJ1ZSk7CisgICAgICAgIHJldHVybiBHZXRC
eUlkU3RhdHVzKHJlc3VsdC5tYWtlc0NhbGxzKCkgPyBNYWtlc0NhbGxzIDogVGFrZXNTbG93UGF0
aCwgdHJ1ZSk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShtYXApOwogI2VuZGlmCkBAIC0xNjYs
MjQgKzExNywyNCBAQCBHZXRCeUlkU3RhdHVzIEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoCiAK
ICNpZiBFTkFCTEUoSklUKQogR2V0QnlJZFN0YXR1cyBHZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9y
U3R1YkluZm8oCi0gICAgY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYsIENvZGVCbG9jayogcHJv
ZmlsZWRCbG9jaywgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLAotICAgIFN0cmluZ0ltcGwq
IHVpZCkKKyAgICBjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiBsb2NrZXIsIENvZGVCbG9jayog
cHJvZmlsZWRCbG9jaywgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLAorICAgIFN0cmluZ0lt
cGwqIHVpZCwgQ2FsbExpbmtTdGF0dXM6OkV4aXRTaXRlRGF0YSBjYWxsRXhpdFNpdGVEYXRhKQog
ewogICAgIGlmICghc3R1YkluZm8gfHwgIXN0dWJJbmZvLT5zZWVuKQogICAgICAgICByZXR1cm4g
R2V0QnlJZFN0YXR1cyhOb0luZm9ybWF0aW9uKTsKICAgICAKLSAgICBpZiAoc3R1YkluZm8tPnJl
c2V0QnlHQykKLSAgICAgICAgcmV0dXJuIEdldEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCwgdHJ1
ZSk7Ci0KICAgICBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KiBsaXN0ID0gMDsKKyAgICBTdGF0ZSB0
YWtlc1Nsb3dQYXRoID0gVGFrZXNTbG93UGF0aDsKICAgICBpZiAoc3R1YkluZm8tPmFjY2Vzc1R5
cGUgPT0gYWNjZXNzX2dldF9ieV9pZF9saXN0KSB7CiAgICAgICAgIGxpc3QgPSBzdHViSW5mby0+
dS5nZXRCeUlkTGlzdC5saXN0OwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGlz
dC0+c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGlmIChsaXN0LT5hdChpKS5kb2VzQ2FsbHMo
KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gR2V0QnlJZFN0YXR1cyhNYWtlc0NhbGxzLCB0cnVl
KTsKLSAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGxpc3QtPnNpemUoKTsgKytpKQorICAgICAgICAgICAgdGFrZXNTbG93UGF0aCA9IE1ha2VzQ2Fs
bHM7CiAgICAgfQogICAgIAorICAgIGlmIChzdHViSW5mby0+cmVzZXRCeUdDKQorICAgICAgICBy
ZXR1cm4gR2V0QnlJZFN0YXR1cyh0YWtlc1Nsb3dQYXRoLCB0cnVlKTsKKyAgICAKICAgICAvLyBG
aW5hbGx5IGZpZ3VyZSBvdXQgaWYgd2UgY2FuIGRlcml2ZSBhbiBhY2Nlc3Mgc3RyYXRlZ3kuCiAg
ICAgR2V0QnlJZFN0YXR1cyByZXN1bHQ7CiAgICAgcmVzdWx0Lm1fc3RhdGUgPSBTaW1wbGU7CkBA
IC0yMTUsOCArMTY2LDYgQEAgR2V0QnlJZFN0YXR1cyBHZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9y
UwogICAgICAgICAKICAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfbGlzdDogewogICAgICAgICBm
b3IgKHVuc2lnbmVkIGxpc3RJbmRleCA9IDA7IGxpc3RJbmRleCA8IGxpc3QtPnNpemUoKTsgKyts
aXN0SW5kZXgpIHsKLSAgICAgICAgICAgIEFTU0VSVCghbGlzdC0+YXQobGlzdEluZGV4KS5kb2Vz
Q2FsbHMoKSk7Ci0gICAgICAgICAgICAKICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJl
ID0gbGlzdC0+YXQobGlzdEluZGV4KS5zdHJ1Y3R1cmUoKTsKICAgICAgICAgICAgIAogICAgICAg
ICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBhc3NlcnQgdGhhdCB3ZSBuZXZlciBzZWUgYSBzdHJ1
Y3R1cmUgdGhhdApAQCAtMjI2LDcwICsxNzUsMTEwIEBAIEdldEJ5SWRTdGF0dXMgR2V0QnlJZFN0
YXR1czo6Y29tcHV0ZUZvclMKICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMzE4MTAKICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKHN0
cnVjdHVyZS0+dGFrZXNTbG93UGF0aEluREZHRm9ySW1wdXJlUHJvcGVydHkoKSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gR2V0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoLCB0cnVlKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gR2V0QnlJZFN0YXR1cyh0YWtlc1Nsb3dQYXRoLCB0cnVlKTsKICAg
ICAgICAgICAgIAorICAgICAgICAgICAgdW5zaWduZWQgYXR0cmlidXRlc0lnbm9yZWQ7CisgICAg
ICAgICAgICBKU0NlbGwqIHNwZWNpZmljVmFsdWU7CisgICAgICAgICAgICBQcm9wZXJ0eU9mZnNl
dCBteU9mZnNldDsKKyAgICAgICAgICAgIFJlZlB0cjxJbnRlbmRlZFN0cnVjdHVyZUNoYWluPiBj
aGFpbjsKKwogICAgICAgICAgICAgaWYgKGxpc3QtPmF0KGxpc3RJbmRleCkuY2hhaW4oKSkgewot
ICAgICAgICAgICAgICAgIFJlZlB0cjxJbnRlbmRlZFN0cnVjdHVyZUNoYWluPiBjaGFpbiA9IGFk
b3B0UmVmKG5ldyBJbnRlbmRlZFN0cnVjdHVyZUNoYWluKAorICAgICAgICAgICAgICAgIGNoYWlu
ID0gYWRvcHRSZWYobmV3IEludGVuZGVkU3RydWN0dXJlQ2hhaW4oCiAgICAgICAgICAgICAgICAg
ICAgIHByb2ZpbGVkQmxvY2ssIHN0cnVjdHVyZSwgbGlzdC0+YXQobGlzdEluZGV4KS5jaGFpbigp
LAogICAgICAgICAgICAgICAgICAgICBsaXN0LT5hdChsaXN0SW5kZXgpLmNoYWluQ291bnQoKSkp
OwotICAgICAgICAgICAgICAgIGlmICghcmVzdWx0LmNvbXB1dGVGb3JDaGFpbihwcm9maWxlZEJs
b2NrLCB1aWQsIGNoYWluKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdldEJ5SWRTdGF0
dXMoVGFrZXNTbG93UGF0aCwgdHJ1ZSk7Ci0gICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKCFjaGFpbi0+aXNTdGlsbFZhbGlkKCkp
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBHZXRCeUlkU3RhdHVzKHRha2VzU2xvd1BhdGgs
IHRydWUpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChjaGFpbi0+aGVh
ZCgpLT50YWtlc1Nsb3dQYXRoSW5ERkdGb3JJbXB1cmVQcm9wZXJ0eSgpKQorICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gR2V0QnlJZFN0YXR1cyh0YWtlc1Nsb3dQYXRoLCB0cnVlKTsKKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBzaXplX3QgY2hhaW5TaXplID0gY2hhaW4tPnNp
emUoKTsKKyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNoYWluU2l6ZTsg
aSsrKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChjaGFpbi0+YXQoaSktPnRha2VzU2xvd1Bh
dGhJbkRGR0ZvckltcHVyZVByb3BlcnR5KCkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gR2V0QnlJZFN0YXR1cyh0YWtlc1Nsb3dQYXRoLCB0cnVlKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgSlNPYmplY3QqIGN1cnJlbnRPYmpl
Y3QgPSBjaGFpbi0+dGVybWluYWxQcm90b3R5cGUoKTsKKyAgICAgICAgICAgICAgICBTdHJ1Y3R1
cmUqIGN1cnJlbnRTdHJ1Y3R1cmUgPSBjaGFpbi0+bGFzdCgpOworICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoY3VycmVudE9iamVjdCwgY3VycmVudE9iamVj
dCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgbXlPZmZzZXQgPSBjdXJyZW50
U3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkoCisgICAgICAgICAgICAgICAgICAgICpwcm9maWxl
ZEJsb2NrLT52bSgpLCB1aWQsIGF0dHJpYnV0ZXNJZ25vcmVkLCBzcGVjaWZpY1ZhbHVlKTsKKyAg
ICAgICAgICAgICAgICBpZiAoY3VycmVudFN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpCisgICAg
ICAgICAgICAgICAgICAgIHNwZWNpZmljVmFsdWUgPSAwOworICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICBteU9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KAor
ICAgICAgICAgICAgICAgICAgICAqcHJvZmlsZWRCbG9jay0+dm0oKSwgdWlkLCBhdHRyaWJ1dGVz
SWdub3JlZCwgc3BlY2lmaWNWYWx1ZSk7CisgICAgICAgICAgICAgICAgaWYgKHN0cnVjdHVyZS0+
aXNEaWN0aW9uYXJ5KCkpCisgICAgICAgICAgICAgICAgICAgIHNwZWNpZmljVmFsdWUgPSAwOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICB1bnNpZ25lZCBhdHRyaWJ1
dGVzSWdub3JlZDsKLSAgICAgICAgICAgIEpTQ2VsbCogc3BlY2lmaWNWYWx1ZTsKLSAgICAgICAg
ICAgIFByb3BlcnR5T2Zmc2V0IG15T2Zmc2V0ID0gc3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHko
Ci0gICAgICAgICAgICAgICAgKnByb2ZpbGVkQmxvY2stPnZtKCksIHVpZCwgYXR0cmlidXRlc0ln
bm9yZWQsIHNwZWNpZmljVmFsdWUpOwotICAgICAgICAgICAgaWYgKHN0cnVjdHVyZS0+aXNEaWN0
aW9uYXJ5KCkpCi0gICAgICAgICAgICAgICAgc3BlY2lmaWNWYWx1ZSA9IDA7Ci0gICAgICAgICAg
ICAKICAgICAgICAgICAgIGlmICghaXNWYWxpZE9mZnNldChteU9mZnNldCkpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIEdldEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCwgdHJ1ZSk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIEdldEJ5SWRTdGF0dXModGFrZXNTbG93UGF0aCwgdHJ1ZSk7CiAKLSAg
ICAgICAgICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQg
dmFyaWFudEluZGV4ID0gMDsgdmFyaWFudEluZGV4IDwgcmVzdWx0Lm1fdmFyaWFudHMuc2l6ZSgp
OyArK3ZhcmlhbnRJbmRleCkgewotICAgICAgICAgICAgICAgIEdldEJ5SWRWYXJpYW50JiB2YXJp
YW50ID0gcmVzdWx0Lm1fdmFyaWFudHNbdmFyaWFudEluZGV4XTsKLSAgICAgICAgICAgICAgICBp
ZiAodmFyaWFudC5tX2NoYWluKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgIGlmICghY2hhaW4gJiYgIWxpc3QtPmF0KGxpc3RJbmRleCkuZG9lc0NhbGxzKCkpIHsK
KyAgICAgICAgICAgICAgICAvLyBGb3Igbm9uLWNoYWluLCBub24tZ2V0dGVyIGFjY2Vzc2VzLCB3
ZSB0cnkgdG8gZG8gc29tZSBjb2FsZXNjaW5nLgorICAgICAgICAgICAgICAgIGJvb2wgZm91bmQg
PSBmYWxzZTsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHZhcmlhbnRJbmRleCA9IDA7
IHZhcmlhbnRJbmRleCA8IHJlc3VsdC5tX3ZhcmlhbnRzLnNpemUoKTsgKyt2YXJpYW50SW5kZXgp
IHsKKyAgICAgICAgICAgICAgICAgICAgR2V0QnlJZFZhcmlhbnQmIHZhcmlhbnQgPSByZXN1bHQu
bV92YXJpYW50c1t2YXJpYW50SW5kZXhdOworICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFu
dC5tX2NoYWluKQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKHZhcmlhbnQubV9vZmZzZXQgIT0gbXlPZmZzZXQp
Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICAgICAgZm91bmQg
PSB0cnVlOwotICAgICAgICAgICAgICAgIGlmICh2YXJpYW50Lm1fc3RydWN0dXJlU2V0LmNvbnRh
aW5zKHN0cnVjdHVyZSkpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgICAgICBpZiAodmFyaWFudC5tX29mZnNldCAhPSBteU9mZnNldCkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlm
ICh2YXJpYW50Lm1fc3BlY2lmaWNWYWx1ZSAhPSBKU1ZhbHVlKHNwZWNpZmljVmFsdWUpKQotICAg
ICAgICAgICAgICAgICAgICB2YXJpYW50Lm1fc3BlY2lmaWNWYWx1ZSA9IEpTVmFsdWUoKTsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhbnQuY2FsbExpbmtTdGF0dXMoKSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg
ICAgIHZhcmlhbnQubV9zdHJ1Y3R1cmVTZXQuYWRkKHN0cnVjdHVyZSk7Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKHZhcmlhbnQubV9zdHJ1Y3R1cmVTZXQuY29udGFpbnMoc3RydWN0dXJlKSkK
KyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgICAgICBpZiAodmFyaWFudC5tX3NwZWNpZmljVmFsdWUgIT0gSlNWYWx1ZShzcGVj
aWZpY1ZhbHVlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQubV9zcGVjaWZpY1Zh
bHVlID0gSlNWYWx1ZSgpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICB2
YXJpYW50Lm1fc3RydWN0dXJlU2V0LmFkZChzdHJ1Y3R1cmUpOworICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICBpZiAoZm91bmQpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoZm91bmQpCi0gICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IGNh
bGxMaW5rU3RhdHVzOworICAgICAgICAgICAgc3dpdGNoIChsaXN0LT5hdChsaXN0SW5kZXgpLnR5
cGUoKSkgeworICAgICAgICAgICAgY2FzZSBHZXRCeUlkQWNjZXNzOjpTaW1wbGVJbmxpbmU6Cisg
ICAgICAgICAgICBjYXNlIEdldEJ5SWRBY2Nlc3M6OlNpbXBsZVN0dWI6IHsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgR2V0QnlJZEFjY2Vz
czo6R2V0dGVyOiB7CisgICAgICAgICAgICAgICAgQWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUq
IHN0dWIgPSBzdGF0aWNfY2FzdDxBY2Nlc3NvckNhbGxKSVRTdHViUm91dGluZSo+KAorICAgICAg
ICAgICAgICAgICAgICBsaXN0LT5hdChsaXN0SW5kZXgpLnN0dWJSb3V0aW5lKCkpOworICAgICAg
ICAgICAgICAgIGNhbGxMaW5rU3RhdHVzID0gc3RkOjptYWtlX3VuaXF1ZTxDYWxsTGlua1N0YXR1
cz4oCisgICAgICAgICAgICAgICAgICAgIENhbGxMaW5rU3RhdHVzOjpjb21wdXRlRm9yKGxvY2tl
ciwgKnN0dWItPm1fY2FsbExpbmtJbmZvLCBjYWxsRXhpdFNpdGVEYXRhKSk7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIEdldEJ5SWRBY2Nl
c3M6OkN1c3RvbUdldHRlcjogeworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBJdCB3b3VsZCBi
ZSB0b3RhbGx5IHN3ZWV0IHRvIHN1cHBvcnQgdGhpcyBhdCBzb21lIHBvaW50IGluIHRoZSBmdXR1
cmUuCisgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTEzMzA1MgorICAgICAgICAgICAgICAgIHJldHVybiBHZXRCeUlkU3RhdHVzKHRha2Vz
U2xvd1BhdGgsIHRydWUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAg
fQogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoIXJlc3VsdC5hcHBlbmRWYXJpYW50KEdl
dEJ5SWRWYXJpYW50KFN0cnVjdHVyZVNldChzdHJ1Y3R1cmUpLCBteU9mZnNldCwgc3BlY2lmaWNW
YWx1ZSkpKQotICAgICAgICAgICAgICAgIHJldHVybiBHZXRCeUlkU3RhdHVzKFRha2VzU2xvd1Bh
dGgsIHRydWUpOworICAgICAgICAgICAgR2V0QnlJZFZhcmlhbnQgdmFyaWFudCgKKyAgICAgICAg
ICAgICAgICBTdHJ1Y3R1cmVTZXQoc3RydWN0dXJlKSwgbXlPZmZzZXQsIHNwZWNpZmljVmFsdWUs
IGNoYWluLAorICAgICAgICAgICAgICAgIHN0ZDo6bW92ZShjYWxsTGlua1N0YXR1cykpOworICAg
ICAgICAgICAgaWYgKCFyZXN1bHQuYXBwZW5kVmFyaWFudCh2YXJpYW50KSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gR2V0QnlJZFN0YXR1cyh0YWtlc1Nsb3dQYXRoLCB0cnVlKTsKICAgICAgICAg
fQogICAgICAgICAKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgICAgIAotICAg
IGNhc2UgYWNjZXNzX2dldF9ieV9pZF9jaGFpbjogewotICAgICAgICBpZiAoIXN0dWJJbmZvLT51
LmdldEJ5SWRDaGFpbi5pc0RpcmVjdCkKLSAgICAgICAgICAgIHJldHVybiBHZXRCeUlkU3RhdHVz
KE1ha2VzQ2FsbHMsIHRydWUpOwotICAgICAgICBSZWZQdHI8SW50ZW5kZWRTdHJ1Y3R1cmVDaGFp
bj4gY2hhaW4gPSBhZG9wdFJlZihuZXcgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbigKLSAgICAgICAg
ICAgIHByb2ZpbGVkQmxvY2ssCi0gICAgICAgICAgICBzdHViSW5mby0+dS5nZXRCeUlkQ2hhaW4u
YmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKSwKLSAgICAgICAgICAgIHN0dWJJbmZvLT51LmdldEJ5
SWRDaGFpbi5jaGFpbi5nZXQoKSwKLSAgICAgICAgICAgIHN0dWJJbmZvLT51LmdldEJ5SWRDaGFp
bi5jb3VudCkpOwotICAgICAgICBpZiAocmVzdWx0LmNvbXB1dGVGb3JDaGFpbihwcm9maWxlZEJs
b2NrLCB1aWQsIGNoYWluKSkKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIHJl
dHVybiBHZXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgsIHRydWUpOwotICAgIH0KLSAgICAgICAg
CiAgICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIEdldEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0
aCwgdHJ1ZSk7CiAgICAgfQpAQCAtMzA1LDEwICsyOTQsMTggQEAgR2V0QnlJZFN0YXR1cyBHZXRC
eUlkU3RhdHVzOjpjb21wdXRlRm9yKAogewogI2lmIEVOQUJMRShERkdfSklUKQogICAgIGlmIChk
ZmdCbG9jaykgeworICAgICAgICBDYWxsTGlua1N0YXR1czo6RXhpdFNpdGVEYXRhIGV4aXRTaXRl
RGF0YTsKKyAgICAgICAgeworICAgICAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIo
cHJvZmlsZWRCbG9jay0+bV9sb2NrKTsKKyAgICAgICAgICAgIGV4aXRTaXRlRGF0YSA9IENhbGxM
aW5rU3RhdHVzOjpjb21wdXRlRXhpdFNpdGVEYXRhKAorICAgICAgICAgICAgICAgIGxvY2tlciwg
cHJvZmlsZWRCbG9jaywgY29kZU9yaWdpbi5ieXRlY29kZUluZGV4LCBFeGl0RnJvbUZUTCk7Cisg
ICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIEdldEJ5SWRTdGF0dXMgcmVzdWx0OwogICAgICAg
ICB7CiAgICAgICAgICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihkZmdCbG9jay0+bV9s
b2NrKTsKLSAgICAgICAgICAgIHJlc3VsdCA9IGNvbXB1dGVGb3JTdHViSW5mbyhsb2NrZXIsIGRm
Z0Jsb2NrLCBkZmdNYXAuZ2V0KGNvZGVPcmlnaW4pLCB1aWQpOworICAgICAgICAgICAgcmVzdWx0
ID0gY29tcHV0ZUZvclN0dWJJbmZvKAorICAgICAgICAgICAgICAgIGxvY2tlciwgZGZnQmxvY2ss
IGRmZ01hcC5nZXQoY29kZU9yaWdpbiksIHVpZCwgZXhpdFNpdGVEYXRhKTsKICAgICAgICAgfQog
ICAgICAgICAKICAgICAgICAgaWYgKHJlc3VsdC50YWtlc1Nsb3dQYXRoKCkpCkBAIC0zNjEsNiAr
MzU4LDI0IEBAIEdldEJ5SWRTdGF0dXMgR2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKICAgICAg
ICAgU2ltcGxlLCBmYWxzZSwgR2V0QnlJZFZhcmlhbnQoU3RydWN0dXJlU2V0KHN0cnVjdHVyZSks
IG9mZnNldCwgc3BlY2lmaWNWYWx1ZSkpOwogfQogCitib29sIEdldEJ5SWRTdGF0dXM6Om1ha2Vz
Q2FsbHMoKSBjb25zdAoreworICAgIHN3aXRjaCAobV9zdGF0ZSkgeworICAgIGNhc2UgTm9JbmZv
cm1hdGlvbjoKKyAgICBjYXNlIFRha2VzU2xvd1BhdGg6CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICBjYXNlIFNpbXBsZToKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV92YXJpYW50cy5z
aXplKCk7IGktLTspIHsKKyAgICAgICAgICAgIGlmIChtX3ZhcmlhbnRzW2ldLmNhbGxMaW5rU3Rh
dHVzKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIGNhc2UgTWFrZXNDYWxsczoKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKIHZvaWQgR2V0
QnlJZFN0YXR1czo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogewogICAgIG91dC5wcmlu
dCgiKCIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRTdGF0
dXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJ
ZFN0YXR1cy5oCShyZXZpc2lvbiAxNjkwMTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvR2V0QnlJZFN0YXR1cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAj
aWZuZGVmIEdldEJ5SWRTdGF0dXNfaAogI2RlZmluZSBHZXRCeUlkU3RhdHVzX2gKIAorI2luY2x1
ZGUgIkNhbGxMaW5rU3RhdHVzLmgiCiAjaW5jbHVkZSAiQ29kZU9yaWdpbi5oIgogI2luY2x1ZGUg
IkNvbmN1cnJlbnRKSVRMb2NrLmgiCiAjaW5jbHVkZSAiRXhpdGluZ0pJVFR5cGUuaCIKQEAgLTgz
LDcgKzg0LDcgQEAgcHVibGljOgogICAgIGNvbnN0IEdldEJ5SWRWYXJpYW50JiBvcGVyYXRvcltd
KHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gYXQoaW5kZXgpOyB9CiAKICAgICBib29sIHRh
a2VzU2xvd1BhdGgoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlID09IFRha2VzU2xvd1BhdGggfHwg
bV9zdGF0ZSA9PSBNYWtlc0NhbGxzOyB9Ci0gICAgYm9vbCBtYWtlc0NhbGxzKCkgY29uc3QgeyBy
ZXR1cm4gbV9zdGF0ZSA9PSBNYWtlc0NhbGxzOyB9CisgICAgYm9vbCBtYWtlc0NhbGxzKCkgY29u
c3Q7CiAgICAgCiAgICAgYm9vbCB3YXNTZWVuSW5KSVQoKSBjb25zdCB7IHJldHVybiBtX3dhc1Nl
ZW5JbkpJVDsgfQogICAgIApAQCAtOTQsOSArOTUsMTAgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMg
Ym9vbCBoYXNFeGl0U2l0ZShjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiwgQ29kZUJsb2NrKiwg
dW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgRXhpdGluZ0pJVFR5cGUgPSBFeGl0RnJvbUFueXRoaW5n
KTsKICNlbmRpZgogI2lmIEVOQUJMRShKSVQpCi0gICAgc3RhdGljIEdldEJ5SWRTdGF0dXMgY29t
cHV0ZUZvclN0dWJJbmZvKGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImLCBDb2RlQmxvY2sqLCBT
dHJ1Y3R1cmVTdHViSW5mbyosIFN0cmluZ0ltcGwqIHVpZCk7CisgICAgc3RhdGljIEdldEJ5SWRT
dGF0dXMgY29tcHV0ZUZvclN0dWJJbmZvKAorICAgICAgICBjb25zdCBDb25jdXJyZW50SklUTG9j
a2VyJiwgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyosCisgICAg
ICAgIFN0cmluZ0ltcGwqIHVpZCwgQ2FsbExpbmtTdGF0dXM6OkV4aXRTaXRlRGF0YSk7CiAjZW5k
aWYKLSAgICBib29sIGNvbXB1dGVGb3JDaGFpbihDb2RlQmxvY2sqLCBTdHJpbmdJbXBsKiB1aWQs
IFBhc3NSZWZQdHI8SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbj4pOwogICAgIHN0YXRpYyBHZXRCeUlk
U3RhdHVzIGNvbXB1dGVGcm9tTExJbnQoQ29kZUJsb2NrKiwgdW5zaWduZWQgYnl0ZWNvZGVJbmRl
eCwgU3RyaW5nSW1wbCogdWlkKTsKICAgICAKICAgICBib29sIGFwcGVuZFZhcmlhbnQoY29uc3Qg
R2V0QnlJZFZhcmlhbnQmKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9H
ZXRCeUlkVmFyaWFudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0dldEJ5SWRWYXJpYW50LmNwcAkocmV2aXNpb24gMTY5MDE0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRWYXJpYW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjYsMTAgKzI2LDMxIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiR2V0QnlJ
ZFZhcmlhbnQuaCIKIAorI2luY2x1ZGUgIkNhbGxMaW5rU3RhdHVzLmgiCiAjaW5jbHVkZSAiSlND
SW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIAorR2V0QnlJZFZhcmlhbnQ6On5HZXRCeUlk
VmFyaWFudCgpIHsgfQorCitHZXRCeUlkVmFyaWFudDo6R2V0QnlJZFZhcmlhbnQoY29uc3QgR2V0
QnlJZFZhcmlhbnQmIG90aGVyKQoreworICAgICp0aGlzID0gb3RoZXI7Cit9CisKK0dldEJ5SWRW
YXJpYW50JiBHZXRCeUlkVmFyaWFudDo6b3BlcmF0b3I9KGNvbnN0IEdldEJ5SWRWYXJpYW50JiBv
dGhlcikKK3sKKyAgICBtX3N0cnVjdHVyZVNldCA9IG90aGVyLm1fc3RydWN0dXJlU2V0OworICAg
IG1fY2hhaW4gPSBvdGhlci5tX2NoYWluOworICAgIG1fc3BlY2lmaWNWYWx1ZSA9IG90aGVyLm1f
c3BlY2lmaWNWYWx1ZTsKKyAgICBtX29mZnNldCA9IG90aGVyLm1fb2Zmc2V0OworICAgIGlmIChv
dGhlci5tX2NhbGxMaW5rU3RhdHVzKQorICAgICAgICBtX2NhbGxMaW5rU3RhdHVzID0gc3RkOjpt
YWtlX3VuaXF1ZTxDYWxsTGlua1N0YXR1cz4oKm90aGVyLm1fY2FsbExpbmtTdGF0dXMpOworICAg
IGVsc2UKKyAgICAgICAgbV9jYWxsTGlua1N0YXR1cyA9IG51bGxwdHI7CisgICAgcmV0dXJuICp0
aGlzOworfQorCiB2b2lkIEdldEJ5SWRWYXJpYW50OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNv
bnN0CiB7CiAgICAgZHVtcEluQ29udGV4dChvdXQsIDApOwpAQCAtNDUsNyArNjYsMTAgQEAgdm9p
ZCBHZXRCeUlkVmFyaWFudDo6ZHVtcEluQ29udGV4dChQcmludAogICAgIG91dC5wcmludCgKICAg
ICAgICAgIjwiLCBpbkNvbnRleHQoc3RydWN0dXJlU2V0KCksIGNvbnRleHQpLCAiLCAiLAogICAg
ICAgICBwb2ludGVyRHVtcEluQ29udGV4dChjaGFpbigpLCBjb250ZXh0KSwgIiwgIiwKLSAgICAg
ICAgaW5Db250ZXh0KHNwZWNpZmljVmFsdWUoKSwgY29udGV4dCksICIsICIsIG9mZnNldCgpLCAi
PiIpOworICAgICAgICBpbkNvbnRleHQoc3BlY2lmaWNWYWx1ZSgpLCBjb250ZXh0KSwgIiwgIiwg
b2Zmc2V0KCkpOworICAgIGlmIChtX2NhbGxMaW5rU3RhdHVzKQorICAgICAgICBvdXQucHJpbnQo
ImNhbGw6ICIsICptX2NhbGxMaW5rU3RhdHVzKTsKKyAgICBvdXQucHJpbnQoIj4iKTsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
R2V0QnlJZFZhcmlhbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvR2V0QnlJZFZhcmlhbnQuaAkocmV2aXNpb24gMTY5MDE0KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRWYXJpYW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI2
LDYgKzI2LDcgQEAKICNpZm5kZWYgR2V0QnlJZFZhcmlhbnRfaAogI2RlZmluZSBHZXRCeUlkVmFy
aWFudF9oCiAKKyNpbmNsdWRlICJDYWxsTGlua1N0YXR1cy5oIgogI2luY2x1ZGUgIkludGVuZGVk
U3RydWN0dXJlQ2hhaW4uaCIKICNpbmNsdWRlICJKU0NKU1ZhbHVlLmgiCiAjaW5jbHVkZSAiUHJv
cGVydHlPZmZzZXQuaCIKQEAgLTMzLDYgKzM0LDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK2Ns
YXNzIENhbGxMaW5rU3RhdHVzOwogY2xhc3MgR2V0QnlJZFN0YXR1czsKIHN0cnVjdCBEdW1wQ29u
dGV4dDsKIApAQCAtNDEsMTEgKzQzLDEzIEBAIHB1YmxpYzoKICAgICBHZXRCeUlkVmFyaWFudCgK
ICAgICAgICAgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQgPSBTdHJ1Y3R1cmVTZXQo
KSwKICAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gaW52YWxpZE9mZnNldCwgSlNWYWx1
ZSBzcGVjaWZpY1ZhbHVlID0gSlNWYWx1ZSgpLAotICAgICAgICBQYXNzUmVmUHRyPEludGVuZGVk
U3RydWN0dXJlQ2hhaW4+IGNoYWluID0gbnVsbHB0cikKKyAgICAgICAgUGFzc1JlZlB0cjxJbnRl
bmRlZFN0cnVjdHVyZUNoYWluPiBjaGFpbiA9IG51bGxwdHIsCisgICAgICAgIHN0ZDo6dW5pcXVl
X3B0cjxDYWxsTGlua1N0YXR1cz4gY2FsbExpbmtTdGF0dXMgPSBudWxscHRyKQogICAgICAgICA6
IG1fc3RydWN0dXJlU2V0KHN0cnVjdHVyZVNldCkKICAgICAgICAgLCBtX2NoYWluKGNoYWluKQog
ICAgICAgICAsIG1fc3BlY2lmaWNWYWx1ZShzcGVjaWZpY1ZhbHVlKQogICAgICAgICAsIG1fb2Zm
c2V0KG9mZnNldCkKKyAgICAgICAgLCBtX2NhbGxMaW5rU3RhdHVzKHN0ZDo6bW92ZShjYWxsTGlu
a1N0YXR1cykpCiAgICAgewogICAgICAgICBpZiAoIXN0cnVjdHVyZVNldC5zaXplKCkpIHsKICAg
ICAgICAgICAgIEFTU0VSVChvZmZzZXQgPT0gaW52YWxpZE9mZnNldCk7CkBAIC01NCwxMiArNTgs
MTggQEAgcHVibGljOgogICAgICAgICB9CiAgICAgfQogICAgIAorICAgIH5HZXRCeUlkVmFyaWFu
dCgpOworICAgIAorICAgIEdldEJ5SWRWYXJpYW50KGNvbnN0IEdldEJ5SWRWYXJpYW50Jik7Cisg
ICAgR2V0QnlJZFZhcmlhbnQmIG9wZXJhdG9yPShjb25zdCBHZXRCeUlkVmFyaWFudCYpOworICAg
IAogICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7IHJldHVybiAhIW1fc3RydWN0dXJlU2V0LnNpemUo
KTsgfQogICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIWlzU2V0KCk7IH0KICAg
ICBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZVNldCgpIGNvbnN0IHsgcmV0dXJuIG1fc3Ry
dWN0dXJlU2V0OyB9CiAgICAgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbiogY2hhaW4oKSBjb25zdCB7
IHJldHVybiBjb25zdF9jYXN0PEludGVuZGVkU3RydWN0dXJlQ2hhaW4qPihtX2NoYWluLmdldCgp
KTsgfQogICAgIEpTVmFsdWUgc3BlY2lmaWNWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3BlY2lm
aWNWYWx1ZTsgfQogICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1f
b2Zmc2V0OyB9CisgICAgQ2FsbExpbmtTdGF0dXMqIGNhbGxMaW5rU3RhdHVzKCkgY29uc3QgeyBy
ZXR1cm4gbV9jYWxsTGlua1N0YXR1cy5nZXQoKTsgfQogICAgIAogICAgIHZvaWQgZHVtcChQcmlu
dFN0cmVhbSYpIGNvbnN0OwogICAgIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYsIER1
bXBDb250ZXh0KikgY29uc3Q7CkBAIC03MSw2ICs4MSw3IEBAIHByaXZhdGU6CiAgICAgUmVmUHRy
PEludGVuZGVkU3RydWN0dXJlQ2hhaW4+IG1fY2hhaW47CiAgICAgSlNWYWx1ZSBtX3NwZWNpZmlj
VmFsdWU7CiAgICAgUHJvcGVydHlPZmZzZXQgbV9vZmZzZXQ7CisgICAgc3RkOjp1bmlxdWVfcHRy
PENhbGxMaW5rU3RhdHVzPiBtX2NhbGxMaW5rU3RhdHVzOwogfTsKIAogfSAvLyBuYW1lc3BhY2Ug
SlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNHZXRC
eUlkTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1BvbHltb3JwaGljR2V0QnlJZExpc3QuY3BwCShyZXZpc2lvbiAxNjkwMTQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTU4LDI3ICs1OCwxMSBAQCBHZXRCeUlkQWNjZXNzIEdldEJ5SWRBY2Nlc3M6
OmZyb21TdHJ1Y3R1CiAgICAgCiAgICAgR2V0QnlJZEFjY2VzcyByZXN1bHQ7CiAgICAgCi0gICAg
c3dpdGNoIChzdHViSW5mby5hY2Nlc3NUeXBlKSB7Ci0gICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lk
X3NlbGY6Ci0gICAgICAgIHJlc3VsdC5tX3R5cGUgPSBTaW1wbGVJbmxpbmU7Ci0gICAgICAgIHJl
c3VsdC5tX3N0cnVjdHVyZS5jb3B5RnJvbShzdHViSW5mby51LmdldEJ5SWRTZWxmLmJhc2VPYmpl
Y3RTdHJ1Y3R1cmUpOwotICAgICAgICByZXN1bHQubV9zdHViUm91dGluZSA9IEpJVFN0dWJSb3V0
aW5lOjpjcmVhdGVTZWxmTWFuYWdlZFJvdXRpbmUoaW5pdGlhbFNsb3dQYXRoKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgICAgIAotICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9jaGFpbjoKLSAgICAg
ICAgcmVzdWx0Lm1fc3RydWN0dXJlLmNvcHlGcm9tKHN0dWJJbmZvLnUuZ2V0QnlJZENoYWluLmJh
c2VPYmplY3RTdHJ1Y3R1cmUpOwotICAgICAgICByZXN1bHQubV9jaGFpbi5jb3B5RnJvbShzdHVi
SW5mby51LmdldEJ5SWRDaGFpbi5jaGFpbik7Ci0gICAgICAgIHJlc3VsdC5tX2NoYWluQ291bnQg
PSBzdHViSW5mby51LmdldEJ5SWRDaGFpbi5jb3VudDsKLSAgICAgICAgcmVzdWx0Lm1fc3R1YlJv
dXRpbmUgPSBzdHViSW5mby5zdHViUm91dGluZTsKLSAgICAgICAgaWYgKHN0dWJJbmZvLnUuZ2V0
QnlJZENoYWluLmlzRGlyZWN0KQotICAgICAgICAgICAgcmVzdWx0Lm1fdHlwZSA9IFNpbXBsZVN0
dWI7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJlc3VsdC5tX3R5cGUgPSBHZXR0ZXI7Ci0g
ICAgICAgIGJyZWFrOwotICAgICAgICAKLSAgICBkZWZhdWx0OgotICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVChzdHViSW5mby5h
Y2Nlc3NUeXBlID09IGFjY2Vzc19nZXRfYnlfaWRfc2VsZik7CisgICAgCisgICAgcmVzdWx0Lm1f
dHlwZSA9IFNpbXBsZUlubGluZTsKKyAgICByZXN1bHQubV9zdHJ1Y3R1cmUuY29weUZyb20oc3R1
YkluZm8udS5nZXRCeUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlKTsKKyAgICByZXN1bHQubV9z
dHViUm91dGluZSA9IEpJVFN0dWJSb3V0aW5lOjpjcmVhdGVTZWxmTWFuYWdlZFJvdXRpbmUoaW5p
dGlhbFNsb3dQYXRoKTsKICAgICAKICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAtMTA5LDcgKzkz
LDYgQEAgUG9seW1vcnBoaWNHZXRCeUlkTGlzdCogUG9seW1vcnBoaWNHZXRCeQogICAgIAogICAg
IEFTU0VSVCgKICAgICAgICAgc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfZ2V0X2J5X2lk
X3NlbGYKLSAgICAgICAgfHwgc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfZ2V0X2J5X2lk
X2NoYWluCiAgICAgICAgIHx8IHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX3Vuc2V0KTsK
ICAgICAKICAgICBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KiByZXN1bHQgPSBuZXcgUG9seW1vcnBo
aWNHZXRCeUlkTGlzdChzdHViSW5mbyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvU3BlY3VsYXRlZFR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuaAkocmV2aXNpb24gMTY5MDE0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTU5LDcgKzU5LDcgQEAgc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNPYmplY3Qg
IAogc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNTdHJpbmdJZGVudCAgICAgICAgPSAw
eDAwMDEwMDAwOyAvLyBJdCdzIGRlZmluaXRlbHkgYSBKU1N0cmluZywgYW5kIGl0J3MgYW4gaWRl
bnRpZmllci4KIHN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjU3RyaW5nVmFyICAgICAg
ICAgID0gMHgwMDAyMDAwMDsgLy8gSXQncyBkZWZpbml0ZWx5IGEgSlNTdHJpbmcsIGFuZCBpdCdz
IG5vdCBhbiBpZGVudGlmaWVyLgogc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNTdHJp
bmcgICAgICAgICAgICAgPSAweDAwMDMwMDAwOyAvLyBJdCdzIGRlZmluaXRlbHkgYSBKU1N0cmlu
Zy4KLXN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjQ2VsbE90aGVyICAgICAgICAgID0g
MHgwMDA0MDAwMDsgLy8gSXQncyBkZWZpbml0ZWx5IGEgSlNDZWxsIGJ1dCBub3QgYSBzdWJjbGFz
cyBvZiBKU09iamVjdCBhbmQgZGVmaW5pdGVseSBub3QgYSBKU1N0cmluZy4KK3N0YXRpYyBjb25z
dCBTcGVjdWxhdGVkVHlwZSBTcGVjQ2VsbE90aGVyICAgICAgICAgID0gMHgwMDA0MDAwMDsgLy8g
SXQncyBkZWZpbml0ZWx5IGEgSlNDZWxsIGJ1dCBub3QgYSBzdWJjbGFzcyBvZiBKU09iamVjdCBh
bmQgZGVmaW5pdGVseSBub3QgYSBKU1N0cmluZy4gRklYTUU6IFRoaXMgc2hvdWxkbid0IGJlIHBh
cnQgb2YgaGVhcC10b3Agb3IgYnl0ZWNvZGUtdG9wLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTMzMDc4CiBzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0Nl
bGwgICAgICAgICAgICAgICA9IDB4MDAwN2ZmZmY7IC8vIEl0J3MgZGVmaW5pdGVseSBhIEpTQ2Vs
bC4KIHN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjSW50MzIgICAgICAgICAgICAgID0g
MHgwMDIwMDAwMDsgLy8gSXQncyBkZWZpbml0ZWx5IGFuIEludDMyLgogc3RhdGljIGNvbnN0IFNw
ZWN1bGF0ZWRUeXBlIFNwZWNJbnQ1MiAgICAgICAgICAgICAgPSAweDAwNDAwMDAwOyAvLyBJdCdz
IGRlZmluaXRlbHkgYW4gSW50NTIgYW5kIHdlIGludGVuZCBpdCB0byB1bmJveCBpdC4KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJ
bmZvLmNwcAkocmV2aXNpb24gMTY5MDE0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDksNyArNDksNiBA
QCB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjpkZXJlZigpCiAgICAgICAgIHJldHVybjsKICAgICB9
CiAgICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX3NlbGY6Ci0gICAgY2FzZSBhY2Nlc3NfZ2V0X2J5
X2lkX2NoYWluOgogICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9uX25vcm1hbDoK
ICAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfdHJhbnNpdGlvbl9kaXJlY3Q6CiAgICAgY2FzZSBh
Y2Nlc3NfcHV0X2J5X2lkX3JlcGxhY2U6CkBAIC02OCwxMSArNjcsNiBAQCBib29sIFN0cnVjdHVy
ZVN0dWJJbmZvOjp2aXNpdFdlYWtSZWZlcmVuCiAgICAgICAgIGlmICghSGVhcDo6aXNNYXJrZWQo
dS5nZXRCeUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgpKSkKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX2No
YWluOgotICAgICAgICBpZiAoIUhlYXA6OmlzTWFya2VkKHUuZ2V0QnlJZENoYWluLmJhc2VPYmpl
Y3RTdHJ1Y3R1cmUuZ2V0KCkpCi0gICAgICAgICAgICB8fCAhSGVhcDo6aXNNYXJrZWQodS5nZXRC
eUlkQ2hhaW4uY2hhaW4uZ2V0KCkpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICBicmVhazsKICAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfbGlzdDogewogICAgICAgICBpZiAo
IXUuZ2V0QnlJZExpc3QubGlzdC0+dmlzaXRXZWFrKHJlcGF0Y2hCdWZmZXIpKQogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0
cnVjdHVyZVN0dWJJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgJKHJldmlzaW9uIDE2OTAxNCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCSh3b3JraW5nIGNvcHkp
CkBAIC00Nyw3ICs0Nyw2IEBAIGNsYXNzIFBvbHltb3JwaGljUHV0QnlJZExpc3Q7CiAKIGVudW0g
QWNjZXNzVHlwZSB7CiAgICAgYWNjZXNzX2dldF9ieV9pZF9zZWxmLAotICAgIGFjY2Vzc19nZXRf
YnlfaWRfY2hhaW4sCiAgICAgYWNjZXNzX2dldF9ieV9pZF9saXN0LAogICAgIGFjY2Vzc19wdXRf
YnlfaWRfdHJhbnNpdGlvbl9ub3JtYWwsCiAgICAgYWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9u
X2RpcmVjdCwKQEAgLTYxLDcgKzYwLDYgQEAgaW5saW5lIGJvb2wgaXNHZXRCeUlkQWNjZXNzKEFj
Y2Vzc1R5cGUgYQogewogICAgIHN3aXRjaCAoYWNjZXNzVHlwZSkgewogICAgIGNhc2UgYWNjZXNz
X2dldF9ieV9pZF9zZWxmOgotICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9jaGFpbjoKICAgICBj
YXNlIGFjY2Vzc19nZXRfYnlfaWRfbGlzdDoKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgZGVm
YXVsdDoKQEAgLTEwNywxNiArMTA1LDYgQEAgc3RydWN0IFN0cnVjdHVyZVN0dWJJbmZvIHsKICAg
ICAgICAgdS5nZXRCeUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlLnNldCh2bSwgb3duZXIsIGJh
c2VPYmplY3RTdHJ1Y3R1cmUpOwogICAgIH0KIAotICAgIHZvaWQgaW5pdEdldEJ5SWRDaGFpbihW
TSYgdm0sIEpTQ2VsbCogb3duZXIsIFN0cnVjdHVyZSogYmFzZU9iamVjdFN0cnVjdHVyZSwgU3Ry
dWN0dXJlQ2hhaW4qIGNoYWluLCB1bnNpZ25lZCBjb3VudCwgYm9vbCBpc0RpcmVjdCkKLSAgICB7
Ci0gICAgICAgIGFjY2Vzc1R5cGUgPSBhY2Nlc3NfZ2V0X2J5X2lkX2NoYWluOwotCi0gICAgICAg
IHUuZ2V0QnlJZENoYWluLmJhc2VPYmplY3RTdHJ1Y3R1cmUuc2V0KHZtLCBvd25lciwgYmFzZU9i
amVjdFN0cnVjdHVyZSk7Ci0gICAgICAgIHUuZ2V0QnlJZENoYWluLmNoYWluLnNldCh2bSwgb3du
ZXIsIGNoYWluKTsKLSAgICAgICAgdS5nZXRCeUlkQ2hhaW4uY291bnQgPSBjb3VudDsKLSAgICAg
ICAgdS5nZXRCeUlkQ2hhaW4uaXNEaXJlY3QgPSBpc0RpcmVjdDsKLSAgICB9Ci0KICAgICB2b2lk
IGluaXRHZXRCeUlkTGlzdChQb2x5bW9ycGhpY0dldEJ5SWRMaXN0KiBsaXN0KQogICAgIHsKICAg
ICAgICAgYWNjZXNzVHlwZSA9IGFjY2Vzc19nZXRfYnlfaWRfbGlzdDsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RIZWFwLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEhlYXAuaAkocmV2aXNpb24gMTY5MDE0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEhlYXAuaAkod29ya2luZyBj
b3B5KQpAQCAtNTAsNiArNTAsOCBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAg
ICAgbWFjcm8oQnV0dGVyZmx5X2FycmF5QnVmZmVyKSBcCiAgICAgbWFjcm8oQnV0dGVyZmx5X3B1
YmxpY0xlbmd0aCkgXAogICAgIG1hY3JvKEJ1dHRlcmZseV92ZWN0b3JMZW5ndGgpIFwKKyAgICBt
YWNybyhHZXR0ZXJTZXR0ZXJfZ2V0dGVyKSBcCisgICAgbWFjcm8oR2V0dGVyU2V0dGVyX3NldHRl
cikgXAogICAgIG1hY3JvKEpTQXJyYXlCdWZmZXJWaWV3X2xlbmd0aCkgXAogICAgIG1hY3JvKEpT
QXJyYXlCdWZmZXJWaWV3X21vZGUpIFwKICAgICBtYWNybyhKU0FycmF5QnVmZmVyVmlld192ZWN0
b3IpIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnBy
ZXRlcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHJldmlzaW9uIDE2OTAxNCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkod29y
a2luZyBjb3B5KQpAQCAtMTQxNSw2ICsxNDE1LDggQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVy
PEFic3RyYWN0U3RhdGVUeQogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBHZXRD
YWxsZWU6CisgICAgY2FzZSBHZXRHZXR0ZXI6CisgICAgY2FzZSBHZXRTZXR0ZXI6CiAgICAgICAg
IGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjRnVuY3Rpb24pOwogICAgICAgICBicmVhazsKICAg
ICAgICAgCkBAIC0xNjQwLDYgKzE2NDIsMTEgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFi
c3RyYWN0U3RhdGVUeQogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAorICAgIGNhc2Ug
R2V0R2V0dGVyU2V0dGVyQnlPZmZzZXQ6IHsKKyAgICAgICAgZm9yTm9kZShub2RlKS5zZXQobV9n
cmFwaCwgbV9ncmFwaC5tX3ZtLmdldHRlclNldHRlclN0cnVjdHVyZS5nZXQoKSk7CisgICAgICAg
IGJyZWFrOworICAgIH0KKyAgICAgICAgCiAgICAgY2FzZSBNdWx0aUdldEJ5T2Zmc2V0OiB7CiAg
ICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7CiAg
ICAgICAgIEFTU0VSVCghKHZhbHVlLm1fdHlwZSAmIH5TcGVjQ2VsbCkpOyAvLyBFZGdlIGZpbHRl
cmluZyBzaG91bGQgaGF2ZSBhbHJlYWR5IGVuc3VyZWQgdGhpcy4KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAxNjkw
MTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTcxLDIxICsxNzEsMjEgQEAgcHJpdmF0ZToKICAgICBib29sIGhh
bmRsZU1pbk1heChpbnQgcmVzdWx0T3BlcmFuZCwgTm9kZVR5cGUgb3AsIGludCByZWdpc3Rlck9m
ZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKTsKICAgICAKICAgICAvLyBIYW5k
bGUgY2FsbHMuIFRoaXMgcmVzb2x2ZXMgaXNzdWVzIHN1cnJvdW5kaW5nIGlubGluaW5nIGFuZCBp
bnRyaW5zaWNzLgorICAgIHZvaWQgaGFuZGxlQ2FsbCgKKyAgICAgICAgaW50IHJlc3VsdCwgTm9k
ZVR5cGUgb3AsIElubGluZUNhbGxGcmFtZTo6S2luZCwgdW5zaWduZWQgaW5zdHJ1Y3Rpb25TaXpl
LAorICAgICAgICBOb2RlKiBjYWxsVGFyZ2V0LCBpbnQgYXJnQ291bnQsIGludCByZWdpc3Rlck9m
ZnNldCwgQ2FsbExpbmtTdGF0dXMpOwogICAgIHZvaWQgaGFuZGxlQ2FsbChpbnQgcmVzdWx0LCBO
b2RlVHlwZSBvcCwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCwgdW5zaWduZWQgaW5zdHJ1Y3Rpb25T
aXplLCBpbnQgY2FsbGVlLCBpbnQgYXJnQ291bnQsIGludCByZWdpc3Rlck9mZnNldCk7CiAgICAg
dm9pZCBoYW5kbGVDYWxsKEluc3RydWN0aW9uKiBwYywgTm9kZVR5cGUgb3AsIENvZGVTcGVjaWFs
aXphdGlvbktpbmQpOwogICAgIHZvaWQgZW1pdEZ1bmN0aW9uQ2hlY2tzKGNvbnN0IENhbGxMaW5r
U3RhdHVzJiwgTm9kZSogY2FsbFRhcmdldCwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBDb2RlU3BlY2lh
bGl6YXRpb25LaW5kKTsKICAgICB2b2lkIGVtaXRBcmd1bWVudFBoYW50b21zKGludCByZWdpc3Rl
ck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBDb2RlU3BlY2lhbGl6YXRp
b25LaW5kKTsKICAgICAvLyBIYW5kbGUgaW5saW5pbmcuIFJldHVybiB0cnVlIGlmIGl0IHN1Y2Nl
ZWRlZCwgZmFsc2UgaWYgd2UgbmVlZCB0byBwbGFudCBhIGNhbGwuCi0gICAgYm9vbCBoYW5kbGVJ
bmxpbmluZyhOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwgaW50IHJlc3VsdE9wZXJhbmQsIGNvbnN0IENh
bGxMaW5rU3RhdHVzJiwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMsIHVuc2lnbmVkIG5leHRPZmZzZXQsIENvZGVTcGVjaWFsaXphdGlvbktpbmQpOwor
ICAgIGJvb2wgaGFuZGxlSW5saW5pbmcoTm9kZSogY2FsbFRhcmdldE5vZGUsIGludCByZXN1bHRP
cGVyYW5kLCBjb25zdCBDYWxsTGlua1N0YXR1cyYsIGludCByZWdpc3Rlck9mZnNldCwgaW50IGFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCB1bnNpZ25lZCBuZXh0T2Zmc2V0LCBJbmxpbmVDYWxs
RnJhbWU6OktpbmQpOwogICAgIC8vIEhhbmRsZSBpbnRyaW5zaWMgZnVuY3Rpb25zLiBSZXR1cm4g
dHJ1ZSBpZiBpdCBzdWNjZWVkZWQsIGZhbHNlIGlmIHdlIG5lZWQgdG8gcGxhbnQgYSBjYWxsLgog
ICAgIGJvb2wgaGFuZGxlSW50cmluc2ljKGludCByZXN1bHRPcGVyYW5kLCBJbnRyaW5zaWMsIGlu
dCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBTcGVjdWxh
dGVkVHlwZSBwcmVkaWN0aW9uKTsKICAgICBib29sIGhhbmRsZVR5cGVkQXJyYXlDb25zdHJ1Y3Rv
cihpbnQgcmVzdWx0T3BlcmFuZCwgSW50ZXJuYWxGdW5jdGlvbiosIGludCByZWdpc3Rlck9mZnNl
dCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBUeXBlZEFycmF5VHlwZSk7CiAgICAg
Ym9vbCBoYW5kbGVDb25zdGFudEludGVybmFsRnVuY3Rpb24oaW50IHJlc3VsdE9wZXJhbmQsIElu
dGVybmFsRnVuY3Rpb24qLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcywgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiwgQ29kZVNwZWNpYWxpemF0aW9u
S2luZCk7CiAgICAgTm9kZSogaGFuZGxlUHV0QnlPZmZzZXQoTm9kZSogYmFzZSwgdW5zaWduZWQg
aWRlbnRpZmllciwgUHJvcGVydHlPZmZzZXQsIE5vZGUqIHZhbHVlKTsKLSAgICBOb2RlKiBoYW5k
bGVHZXRCeU9mZnNldChTcGVjdWxhdGVkVHlwZSwgTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRp
Zmllck51bWJlciwgUHJvcGVydHlPZmZzZXQpOwotICAgIHZvaWQgaGFuZGxlR2V0QnlPZmZzZXQo
Ci0gICAgICAgIGludCBkZXN0aW5hdGlvbk9wZXJhbmQsIFNwZWN1bGF0ZWRUeXBlLCBOb2RlKiBi
YXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLAotICAgICAgICBQcm9wZXJ0eU9mZnNldCk7
CisgICAgTm9kZSogaGFuZGxlR2V0QnlPZmZzZXQoU3BlY3VsYXRlZFR5cGUsIE5vZGUqIGJhc2Us
IHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFByb3BlcnR5T2Zmc2V0LCBOb2RlVHlwZSBvcCA9
IEdldEJ5T2Zmc2V0KTsKICAgICB2b2lkIGhhbmRsZUdldEJ5SWQoCiAgICAgICAgIGludCBkZXN0
aW5hdGlvbk9wZXJhbmQsIFNwZWN1bGF0ZWRUeXBlLCBOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVu
dGlmaWVyTnVtYmVyLAogICAgICAgICBjb25zdCBHZXRCeUlkU3RhdHVzJik7CkBAIC04MTEsMTEg
KzgxMSwxMSBAQCBwcml2YXRlOgogICAgICAgICBtX251bVBhc3NlZFZhckFyZ3MrKzsKICAgICB9
CiAgICAgCi0gICAgTm9kZSogYWRkQ2FsbChpbnQgcmVzdWx0LCBOb2RlVHlwZSBvcCwgaW50IGNh
bGxlZSwgaW50IGFyZ0NvdW50LCBpbnQgcmVnaXN0ZXJPZmZzZXQpCisgICAgTm9kZSogYWRkQ2Fs
bChpbnQgcmVzdWx0LCBOb2RlVHlwZSBvcCwgTm9kZSogY2FsbGVlLCBpbnQgYXJnQ291bnQsIGlu
dCByZWdpc3Rlck9mZnNldCkKICAgICB7CiAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rp
b24gPSBnZXRQcmVkaWN0aW9uKCk7CiAgICAgICAgIAotICAgICAgICBhZGRWYXJBcmdDaGlsZChn
ZXQoVmlydHVhbFJlZ2lzdGVyKGNhbGxlZSkpKTsKKyAgICAgICAgYWRkVmFyQXJnQ2hpbGQoY2Fs
bGVlKTsKICAgICAgICAgc2l6ZV90IHBhcmFtZXRlclNsb3RzID0gSlNTdGFjazo6Q2FsbEZyYW1l
SGVhZGVyU2l6ZSAtIEpTU3RhY2s6OkNhbGxlckZyYW1lQW5kUENTaXplICsgYXJnQ291bnQ7CiAg
ICAgICAgIGlmIChwYXJhbWV0ZXJTbG90cyA+IG1fcGFyYW1ldGVyU2xvdHMpCiAgICAgICAgICAg
ICBtX3BhcmFtZXRlclNsb3RzID0gcGFyYW1ldGVyU2xvdHM7CkBAIC0xMTIwLDcgKzExMjAsNyBA
QCBwcml2YXRlOgogICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJldHVyblZhbHVlVlIsCiAg
ICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgaW5saW5lQ2FsbEZyYW1lU3RhcnQsCiAgICAgICAg
ICAgICBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsCi0gICAgICAgICAgICBDb2RlU3Bl
Y2lhbGl6YXRpb25LaW5kKTsKKyAgICAgICAgICAgIElubGluZUNhbGxGcmFtZTo6S2luZCk7CiAg
ICAgICAgIAogICAgICAgICB+SW5saW5lU3RhY2tFbnRyeSgpCiAgICAgICAgIHsKQEAgLTEyMDMs
MjYgKzEyMDMsMzUgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlQ2FsbCgKICAgICBpbnQg
cmVzdWx0LCBOb2RlVHlwZSBvcCwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kLCB1bnNpZ25l
ZCBpbnN0cnVjdGlvblNpemUsCiAgICAgaW50IGNhbGxlZSwgaW50IGFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzLCBpbnQgcmVnaXN0ZXJPZmZzZXQpCiB7Ci0gICAgQVNTRVJUKHJlZ2lzdGVyT2Zm
c2V0IDw9IDApOwotICAgIAogICAgIE5vZGUqIGNhbGxUYXJnZXQgPSBnZXQoVmlydHVhbFJlZ2lz
dGVyKGNhbGxlZSkpOwogICAgIAotICAgIENhbGxMaW5rU3RhdHVzIGNhbGxMaW5rU3RhdHVzOwot
CisgICAgQ2FsbExpbmtTdGF0dXMgY2FsbExpbmtTdGF0dXMgPSBDYWxsTGlua1N0YXR1czo6Y29t
cHV0ZUZvcigKKyAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLCBjdXJy
ZW50Q29kZU9yaWdpbigpLAorICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX2NhbGxMaW5rSW5m
b3MsIG1fY2FsbENvbnRleHRNYXApOworICAgIAorICAgIGhhbmRsZUNhbGwoCisgICAgICAgIHJl
c3VsdCwgb3AsIElubGluZUNhbGxGcmFtZTo6a2luZEZvcihraW5kKSwgaW5zdHJ1Y3Rpb25TaXpl
LCBjYWxsVGFyZ2V0LAorICAgICAgICBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgcmVnaXN0
ZXJPZmZzZXQsIGNhbGxMaW5rU3RhdHVzKTsKK30KKyAgICAKK3ZvaWQgQnl0ZUNvZGVQYXJzZXI6
OmhhbmRsZUNhbGwoCisgICAgaW50IHJlc3VsdCwgTm9kZVR5cGUgb3AsIElubGluZUNhbGxGcmFt
ZTo6S2luZCBraW5kLCB1bnNpZ25lZCBpbnN0cnVjdGlvblNpemUsCisgICAgTm9kZSogY2FsbFRh
cmdldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBpbnQgcmVnaXN0ZXJPZmZzZXQs
CisgICAgQ2FsbExpbmtTdGF0dXMgY2FsbExpbmtTdGF0dXMpCit7CisgICAgQVNTRVJUKHJlZ2lz
dGVyT2Zmc2V0IDw9IDApOworICAgIENvZGVTcGVjaWFsaXphdGlvbktpbmQgc3BlY2lhbGl6YXRp
b25LaW5kID0gSW5saW5lQ2FsbEZyYW1lOjpzcGVjaWFsaXphdGlvbktpbmRGb3Ioa2luZCk7Cisg
ICAgCiAgICAgaWYgKG1fZ3JhcGguaXNDb25zdGFudChjYWxsVGFyZ2V0KSkgewogICAgICAgICBj
YWxsTGlua1N0YXR1cyA9IENhbGxMaW5rU3RhdHVzKAogICAgICAgICAgICAgbV9ncmFwaC52YWx1
ZU9mSlNDb25zdGFudChjYWxsVGFyZ2V0KSkuc2V0SXNQcm92ZWQodHJ1ZSk7Ci0gICAgfSBlbHNl
IHsKLSAgICAgICAgY2FsbExpbmtTdGF0dXMgPSBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUZvcigK
LSAgICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jaywgY3VycmVudENv
ZGVPcmlnaW4oKSwKLSAgICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fY2FsbExpbmtJbmZv
cywgbV9jYWxsQ29udGV4dE1hcCk7CiAgICAgfQogICAgIAogICAgIGlmICghY2FsbExpbmtTdGF0
dXMuY2FuT3B0aW1pemUoKSkgewogICAgICAgICAvLyBPZGRseSwgdGhpcyBjb25mbGF0ZXMgY2Fs
bHMgdGhhdCBoYXZlbid0IGV4ZWN1dGVkIHdpdGggY2FsbHMgdGhhdCBiZWhhdmVkIHN1ZmZpY2ll
bnRseSBwb2x5bW9ycGhpY2FsbHkKICAgICAgICAgLy8gdGhhdCB3ZSBjYW5ub3Qgb3B0aW1pemUg
dGhlbS4KICAgICAgICAgCi0gICAgICAgIGFkZENhbGwocmVzdWx0LCBvcCwgY2FsbGVlLCBhcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcywgcmVnaXN0ZXJPZmZzZXQpOworICAgICAgICBhZGRDYWxs
KHJlc3VsdCwgb3AsIGNhbGxUYXJnZXQsIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCByZWdp
c3Rlck9mZnNldCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCkBAIC0xMjMwLDI4ICsx
MjM5LDI4IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNhbGwoCiAgICAgU3BlY3VsYXRl
ZFR5cGUgcHJlZGljdGlvbiA9IGdldFByZWRpY3Rpb24oKTsKIAogICAgIGlmIChJbnRlcm5hbEZ1
bmN0aW9uKiBmdW5jdGlvbiA9IGNhbGxMaW5rU3RhdHVzLmludGVybmFsRnVuY3Rpb24oKSkgewot
ICAgICAgICBpZiAoaGFuZGxlQ29uc3RhbnRJbnRlcm5hbEZ1bmN0aW9uKHJlc3VsdCwgZnVuY3Rp
b24sIHJlZ2lzdGVyT2Zmc2V0LCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgcHJlZGljdGlv
biwga2luZCkpIHsKKyAgICAgICAgaWYgKGhhbmRsZUNvbnN0YW50SW50ZXJuYWxGdW5jdGlvbihy
ZXN1bHQsIGZ1bmN0aW9uLCByZWdpc3Rlck9mZnNldCwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMsIHByZWRpY3Rpb24sIHNwZWNpYWxpemF0aW9uS2luZCkpIHsKICAgICAgICAgICAgIC8vIFRo
aXMgcGhhbnRvbWluZyBoYXMgdG8gYmUgKmFmdGVyKiB0aGUgY29kZSBmb3IgdGhlIGludHJpbnNp
YywgdG8gc2lnbmlmeSB0aGF0CiAgICAgICAgICAgICAvLyB0aGUgaW5wdXRzIG11c3QgYmUga2Vw
dCBhbGl2ZSB3aGF0ZXZlciBleGl0cyB0aGUgaW50cmluc2ljIG1heSBkby4KICAgICAgICAgICAg
IGFkZFRvR3JhcGgoUGhhbnRvbSwgY2FsbFRhcmdldCk7Ci0gICAgICAgICAgICBlbWl0QXJndW1l
bnRQaGFudG9tcyhyZWdpc3Rlck9mZnNldCwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIGtp
bmQpOworICAgICAgICAgICAgZW1pdEFyZ3VtZW50UGhhbnRvbXMocmVnaXN0ZXJPZmZzZXQsIGFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBzcGVjaWFsaXphdGlvbktpbmQpOwogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICAvLyBDYW4gb25seSBoYW5k
bGUgdGhpcyB1c2luZyB0aGUgZ2VuZXJpYyBjYWxsIGhhbmRsZXIuCi0gICAgICAgIGFkZENhbGwo
cmVzdWx0LCBvcCwgY2FsbGVlLCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgcmVnaXN0ZXJP
ZmZzZXQpOworICAgICAgICBhZGRDYWxsKHJlc3VsdCwgb3AsIGNhbGxUYXJnZXQsIGFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzLCByZWdpc3Rlck9mZnNldCk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAgICAgICAgIAotICAgIEludHJpbnNpYyBpbnRyaW5zaWMgPSBjYWxsTGlua1N0YXR1cy5p
bnRyaW5zaWNGb3Ioa2luZCk7CisgICAgSW50cmluc2ljIGludHJpbnNpYyA9IGNhbGxMaW5rU3Rh
dHVzLmludHJpbnNpY0ZvcihzcGVjaWFsaXphdGlvbktpbmQpOwogICAgIGlmIChpbnRyaW5zaWMg
IT0gTm9JbnRyaW5zaWMpIHsKLSAgICAgICAgZW1pdEZ1bmN0aW9uQ2hlY2tzKGNhbGxMaW5rU3Rh
dHVzLCBjYWxsVGFyZ2V0LCByZWdpc3Rlck9mZnNldCwga2luZCk7CisgICAgICAgIGVtaXRGdW5j
dGlvbkNoZWNrcyhjYWxsTGlua1N0YXR1cywgY2FsbFRhcmdldCwgcmVnaXN0ZXJPZmZzZXQsIHNw
ZWNpYWxpemF0aW9uS2luZCk7CiAgICAgICAgICAgICAKICAgICAgICAgaWYgKGhhbmRsZUludHJp
bnNpYyhyZXN1bHQsIGludHJpbnNpYywgcmVnaXN0ZXJPZmZzZXQsIGFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzLCBwcmVkaWN0aW9uKSkgewogICAgICAgICAgICAgLy8gVGhpcyBwaGFudG9taW5n
IGhhcyB0byBiZSAqYWZ0ZXIqIHRoZSBjb2RlIGZvciB0aGUgaW50cmluc2ljLCB0byBzaWduaWZ5
IHRoYXQKICAgICAgICAgICAgIC8vIHRoZSBpbnB1dHMgbXVzdCBiZSBrZXB0IGFsaXZlIHdoYXRl
dmVyIGV4aXRzIHRoZSBpbnRyaW5zaWMgbWF5IGRvLgogICAgICAgICAgICAgYWRkVG9HcmFwaChQ
aGFudG9tLCBjYWxsVGFyZ2V0KTsKLSAgICAgICAgICAgIGVtaXRBcmd1bWVudFBoYW50b21zKHJl
Z2lzdGVyT2Zmc2V0LCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywga2luZCk7CisgICAgICAg
ICAgICBlbWl0QXJndW1lbnRQaGFudG9tcyhyZWdpc3Rlck9mZnNldCwgYXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMsIHNwZWNpYWxpemF0aW9uS2luZCk7CiAgICAgICAgICAgICBpZiAobV9ncmFw
aC5jb21waWxhdGlvbigpKQogICAgICAgICAgICAgICAgIG1fZ3JhcGguY29tcGlsYXRpb24oKS0+
bm90aWNlSW5saW5lZENhbGwoKTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTEyNjIsNyArMTI3
MSw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNhbGwoCiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAgICAgCi0gICAgYWRkQ2FsbChyZXN1bHQsIG9wLCBjYWxsZWUsIGFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzLCByZWdpc3Rlck9mZnNldCk7CisgICAgYWRkQ2FsbChyZXN1bHQsIG9w
LCBjYWxsVGFyZ2V0LCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgcmVnaXN0ZXJPZmZzZXQp
OwogfQogCiB2b2lkIEJ5dGVDb2RlUGFyc2VyOjplbWl0RnVuY3Rpb25DaGVja3MoY29uc3QgQ2Fs
bExpbmtTdGF0dXMmIGNhbGxMaW5rU3RhdHVzLCBOb2RlKiBjYWxsVGFyZ2V0LCBpbnQgcmVnaXN0
ZXJPZmZzZXQsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKQEAgLTEyOTcsMTAgKzEzMDYs
MTIgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6ZW1pdEFyZ3VtZW50UGhhbnRvbQogICAgICAgICBh
ZGRUb0dyYXBoKFBoYW50b20sIGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpLCByZWdp
c3Rlck9mZnNldCkpKTsKIH0KIAotYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmco
Tm9kZSogY2FsbFRhcmdldE5vZGUsIGludCByZXN1bHRPcGVyYW5kLCBjb25zdCBDYWxsTGlua1N0
YXR1cyYgY2FsbExpbmtTdGF0dXMsIGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzLCB1bnNpZ25lZCBuZXh0T2Zmc2V0LCBDb2RlU3BlY2lhbGl6YXRpb25L
aW5kIGtpbmQpCitib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZyhOb2RlKiBjYWxs
VGFyZ2V0Tm9kZSwgaW50IHJlc3VsdE9wZXJhbmQsIGNvbnN0IENhbGxMaW5rU3RhdHVzJiBjYWxs
TGlua1N0YXR1cywgaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMsIHVuc2lnbmVkIG5leHRPZmZzZXQsIElubGluZUNhbGxGcmFtZTo6S2luZCBraW5kKQog
ewogICAgIHN0YXRpYyBjb25zdCBib29sIHZlcmJvc2UgPSBmYWxzZTsKICAgICAKKyAgICBDb2Rl
U3BlY2lhbGl6YXRpb25LaW5kIHNwZWNpYWxpemF0aW9uS2luZCA9IElubGluZUNhbGxGcmFtZTo6
c3BlY2lhbGl6YXRpb25LaW5kRm9yKGtpbmQpOworICAgIAogICAgIGlmICh2ZXJib3NlKQogICAg
ICAgICBkYXRhTG9nKCJDb25zaWRlcmluZyBpbmxpbmluZyAiLCBjYWxsTGlua1N0YXR1cywgIiBp
bnRvICIsIGN1cnJlbnRDb2RlT3JpZ2luKCksICJcbiIpOwogICAgIApAQCAtMTMzMywxNCArMTM0
NCwxNCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZyhOb2RlCiAgICAgLy8g
aWYgd2UgaGFkIGEgc3RhdGljIHByb29mIG9mIHdoYXQgd2FzIGJlaW5nIGNhbGxlZDsgdGhpcyBt
aWdodCBoYXBwZW4gZm9yIGV4YW1wbGUgaWYgeW91IGNhbGwgYQogICAgIC8vIGdsb2JhbCBmdW5j
dGlvbiwgd2hlcmUgd2F0Y2hwb2ludGluZyBnaXZlcyB1cyBzdGF0aWMgaW5mb3JtYXRpb24uIE92
ZXJhbGwsIGl0J3MgYSByYXJlIGNhc2UKICAgICAvLyBiZWNhdXNlIHdlIGV4cGVjdCB0aGF0IGFu
eSBob3QgY2FsbGVlcyB3b3VsZCBoYXZlIGFscmVhZHkgYmVlbiBjb21waWxlZC4KLSAgICBDb2Rl
QmxvY2sqIGNvZGVCbG9jayA9IGV4ZWN1dGFibGUtPmJhc2VsaW5lQ29kZUJsb2NrRm9yKGtpbmQp
OworICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlY3V0YWJsZS0+YmFzZWxpbmVDb2RlQmxv
Y2tGb3Ioc3BlY2lhbGl6YXRpb25LaW5kKTsKICAgICBpZiAoIWNvZGVCbG9jaykgewogICAgICAg
ICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgIGRhdGFMb2coIiAgICBGYWlsaW5nIGJlY2F1c2Ug
bm8gY29kZSBibG9jayBhdmFpbGFibGUuXG4iKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IH0KICAgICBDYXBhYmlsaXR5TGV2ZWwgY2FwYWJpbGl0eUxldmVsID0gaW5saW5lRnVuY3Rpb25G
b3JDYXBhYmlsaXR5TGV2ZWwoCi0gICAgICAgIGNvZGVCbG9jaywga2luZCwgY2FsbExpbmtTdGF0
dXMuaXNDbG9zdXJlQ2FsbCgpKTsKKyAgICAgICAgY29kZUJsb2NrLCBzcGVjaWFsaXphdGlvbktp
bmQsIGNhbGxMaW5rU3RhdHVzLmlzQ2xvc3VyZUNhbGwoKSk7CiAgICAgaWYgKCFjYW5JbmxpbmUo
Y2FwYWJpbGl0eUxldmVsKSkgewogICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgIGRh
dGFMb2coIiAgICBGYWlsaW5nIGJlY2F1c2UgdGhlIGZ1bmN0aW9uIGlzIG5vdCBpbmxpbmVhYmxl
LlxuIik7CkBAIC0xMzkyLDcgKzE0MDMsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJ
bmxpbmluZyhOb2RlCiAgICAgLy8gTm93IHdlIGtub3cgd2l0aG91dCBhIGRvdWJ0IHRoYXQgd2Ug
YXJlIGNvbW1pdHRlZCB0byBpbmxpbmluZy4gU28gYmVnaW4gdGhlIHByb2Nlc3MKICAgICAvLyBi
eSBjaGVja2luZyB0aGUgY2FsbGVlIChpZiBuZWNlc3NhcnkpIGFuZCBtYWtpbmcgc3VyZSB0aGF0
IGFyZ3VtZW50cyBhbmQgdGhlIGNhbGxlZQogICAgIC8vIGFyZSBmbHVzaGVkLgotICAgIGVtaXRG
dW5jdGlvbkNoZWNrcyhjYWxsTGlua1N0YXR1cywgY2FsbFRhcmdldE5vZGUsIHJlZ2lzdGVyT2Zm
c2V0LCBraW5kKTsKKyAgICBlbWl0RnVuY3Rpb25DaGVja3MoY2FsbExpbmtTdGF0dXMsIGNhbGxU
YXJnZXROb2RlLCByZWdpc3Rlck9mZnNldCwgc3BlY2lhbGl6YXRpb25LaW5kKTsKICAgICAKICAg
ICAvLyBGSVhNRTogRG9uJ3QgZmx1c2ggY29uc3RhbnRzIQogICAgIApAQCAtMTQwNCw2ICsxNDE1
LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcoTm9kZQogICAgIAogICAg
IHNpemVfdCBhcmd1bWVudFBvc2l0aW9uU3RhcnQgPSBtX2dyYXBoLm1fYXJndW1lbnRQb3NpdGlv
bnMuc2l6ZSgpOwogCisgICAgZGF0YUxvZygia2luZCA9ICIsIGtpbmQsICJcbiIpOwogICAgIElu
bGluZVN0YWNrRW50cnkgaW5saW5lU3RhY2tFbnRyeSgKICAgICAgICAgdGhpcywgY29kZUJsb2Nr
LCBjb2RlQmxvY2ssIG1fZ3JhcGgubGFzdEJsb2NrKCksIGNhbGxMaW5rU3RhdHVzLmZ1bmN0aW9u
KCksCiAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZChWaXJ0dWFsUmVnaXN0
ZXIocmVzdWx0T3BlcmFuZCkpLApAQCAtMTg1MCwxNCArMTg2MiwxNCBAQCBib29sIEJ5dGVDb2Rl
UGFyc2VyOjpoYW5kbGVDb25zdGFudEludGVyCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1Ob2Rl
KiBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlPZmZzZXQoU3BlY3VsYXRlZFR5cGUgcHJlZGlj
dGlvbiwgTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgUHJvcGVydHlPZmZz
ZXQgb2Zmc2V0KQorTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5T2Zmc2V0KFNwZWN1
bGF0ZWRUeXBlIHByZWRpY3Rpb24sIE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1i
ZXIsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgTm9kZVR5cGUgb3ApCiB7CiAgICAgTm9kZSogcHJv
cGVydHlTdG9yYWdlOwogICAgIGlmIChpc0lubGluZU9mZnNldChvZmZzZXQpKQogICAgICAgICBw
cm9wZXJ0eVN0b3JhZ2UgPSBiYXNlOwogICAgIGVsc2UKICAgICAgICAgcHJvcGVydHlTdG9yYWdl
ID0gYWRkVG9HcmFwaChHZXRCdXR0ZXJmbHksIGJhc2UpOwotICAgIE5vZGUqIGdldEJ5T2Zmc2V0
ID0gYWRkVG9HcmFwaChHZXRCeU9mZnNldCwgT3BJbmZvKG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNz
RGF0YS5zaXplKCkpLCBPcEluZm8ocHJlZGljdGlvbiksIHByb3BlcnR5U3RvcmFnZSwgYmFzZSk7
CisgICAgTm9kZSogZ2V0QnlPZmZzZXQgPSBhZGRUb0dyYXBoKG9wLCBPcEluZm8obV9ncmFwaC5t
X3N0b3JhZ2VBY2Nlc3NEYXRhLnNpemUoKSksIE9wSW5mbyhwcmVkaWN0aW9uKSwgcHJvcGVydHlT
dG9yYWdlLCBiYXNlKTsKIAogICAgIFN0b3JhZ2VBY2Nlc3NEYXRhIHN0b3JhZ2VBY2Nlc3NEYXRh
OwogICAgIHN0b3JhZ2VBY2Nlc3NEYXRhLm9mZnNldCA9IG9mZnNldDsKQEAgLTE4NjcsMTMgKzE4
NzksNiBAQCBOb2RlKiBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlPZmZzZXQoCiAgICAgcmV0
dXJuIGdldEJ5T2Zmc2V0OwogfQogCi12b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRCeU9m
ZnNldCgKLSAgICBpbnQgZGVzdGluYXRpb25PcGVyYW5kLCBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0
aW9uLCBOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLAotICAgIFByb3BlcnR5
T2Zmc2V0IG9mZnNldCkKLXsKLSAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGRlc3RpbmF0aW9uT3Bl
cmFuZCksIGhhbmRsZUdldEJ5T2Zmc2V0KHByZWRpY3Rpb24sIGJhc2UsIGlkZW50aWZpZXJOdW1i
ZXIsIG9mZnNldCkpOwotfQotCiBOb2RlKiBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlPZmZz
ZXQoTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllciwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0
LCBOb2RlKiB2YWx1ZSkKIHsKICAgICBOb2RlKiBwcm9wZXJ0eVN0b3JhZ2U7CkBAIC0xOTEwLDE4
ICsxOTE1LDE5IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5SWQoCiAgICAgaW50
IGRlc3RpbmF0aW9uT3BlcmFuZCwgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiwgTm9kZSogYmFz
ZSwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwKICAgICBjb25zdCBHZXRCeUlkU3RhdHVzJiBn
ZXRCeUlkU3RhdHVzKQogeworICAgIE5vZGVUeXBlIGdldEJ5SWQgPSBnZXRCeUlkU3RhdHVzLm1h
a2VzQ2FsbHMoKSA/IEdldEJ5SWRGbHVzaCA6IEdldEJ5SWQ7CisgICAgCiAgICAgaWYgKCFnZXRC
eUlkU3RhdHVzLmlzU2ltcGxlKCkgfHwgIU9wdGlvbnM6OmVuYWJsZUFjY2Vzc0lubGluaW5nKCkp
IHsKICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihkZXN0aW5hdGlvbk9wZXJhbmQpLAotICAg
ICAgICAgICAgYWRkVG9HcmFwaCgKLSAgICAgICAgICAgICAgICBnZXRCeUlkU3RhdHVzLm1ha2Vz
Q2FsbHMoKSA/IEdldEJ5SWRGbHVzaCA6IEdldEJ5SWQsCi0gICAgICAgICAgICAgICAgT3BJbmZv
KGlkZW50aWZpZXJOdW1iZXIpLCBPcEluZm8ocHJlZGljdGlvbiksIGJhc2UpKTsKKyAgICAgICAg
ICAgIGFkZFRvR3JhcGgoZ2V0QnlJZCwgT3BJbmZvKGlkZW50aWZpZXJOdW1iZXIpLCBPcEluZm8o
cHJlZGljdGlvbiksIGJhc2UpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKICAgICBp
ZiAoZ2V0QnlJZFN0YXR1cy5udW1WYXJpYW50cygpID4gMSkgewotICAgICAgICBpZiAoIWlzRlRM
KG1fZ3JhcGgubV9wbGFuLm1vZGUpIHx8ICFPcHRpb25zOjplbmFibGVQb2x5bW9ycGhpY0FjY2Vz
c0lubGluaW5nKCkpIHsKKyAgICAgICAgaWYgKGdldEJ5SWRTdGF0dXMubWFrZXNDYWxscygpIHx8
ICFpc0ZUTChtX2dyYXBoLm1fcGxhbi5tb2RlKQorICAgICAgICAgICAgfHwgIU9wdGlvbnM6OmVu
YWJsZVBvbHltb3JwaGljQWNjZXNzSW5saW5pbmcoKSkgewogICAgICAgICAgICAgc2V0KFZpcnR1
YWxSZWdpc3RlcihkZXN0aW5hdGlvbk9wZXJhbmQpLAotICAgICAgICAgICAgICAgIGFkZFRvR3Jh
cGgoR2V0QnlJZCwgT3BJbmZvKGlkZW50aWZpZXJOdW1iZXIpLCBPcEluZm8ocHJlZGljdGlvbiks
IGJhc2UpKTsKKyAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKGdldEJ5SWQsIE9wSW5mbyhpZGVu
dGlmaWVyTnVtYmVyKSwgT3BJbmZvKHByZWRpY3Rpb24pLCBiYXNlKSk7CiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCkBAIC0xOTcyLDE1ICsxOTc4LDU2IEBAIHZvaWQg
Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5SWQoCiAgICAgaWYgKHZhcmlhbnQuc3BlY2lmaWNW
YWx1ZSgpIHx8IG9yaWdpbmFsQmFzZUZvckJhc2VsaW5lSklUICE9IGJhc2UpCiAgICAgICAgIGFk
ZFRvR3JhcGgoUGhhbnRvbSwgb3JpZ2luYWxCYXNlRm9yQmFzZWxpbmVKSVQpOwogICAgIAotICAg
IGlmICh2YXJpYW50LnNwZWNpZmljVmFsdWUoKSkgewotICAgICAgICBBU1NFUlQodmFyaWFudC5z
cGVjaWZpY1ZhbHVlKCkuaXNDZWxsKCkpOwotICAgICAgICAKLSAgICAgICAgc2V0KFZpcnR1YWxS
ZWdpc3RlcihkZXN0aW5hdGlvbk9wZXJhbmQpLCBjZWxsQ29uc3RhbnQodmFyaWFudC5zcGVjaWZp
Y1ZhbHVlKCkuYXNDZWxsKCkpKTsKKyAgICBOb2RlKiBsb2FkZWRWYWx1ZTsKKyAgICBpZiAodmFy
aWFudC5zcGVjaWZpY1ZhbHVlKCkpCisgICAgICAgIGxvYWRlZFZhbHVlID0gY2VsbENvbnN0YW50
KHZhcmlhbnQuc3BlY2lmaWNWYWx1ZSgpLmFzQ2VsbCgpKTsKKyAgICBlbHNlIHsKKyAgICAgICAg
bG9hZGVkVmFsdWUgPSBoYW5kbGVHZXRCeU9mZnNldCgKKyAgICAgICAgICAgIHByZWRpY3Rpb24s
IGJhc2UsIGlkZW50aWZpZXJOdW1iZXIsIHZhcmlhbnQub2Zmc2V0KCksCisgICAgICAgICAgICB2
YXJpYW50LmNhbGxMaW5rU3RhdHVzKCkgPyBHZXRHZXR0ZXJTZXR0ZXJCeU9mZnNldCA6IEdldEJ5
T2Zmc2V0KTsKKyAgICB9CisgICAgCisgICAgaWYgKCF2YXJpYW50LmNhbGxMaW5rU3RhdHVzKCkp
IHsKKyAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihkZXN0aW5hdGlvbk9wZXJhbmQpLCBsb2Fk
ZWRWYWx1ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAgaGFuZGxlR2V0QnlP
ZmZzZXQoCi0gICAgICAgIGRlc3RpbmF0aW9uT3BlcmFuZCwgcHJlZGljdGlvbiwgYmFzZSwgaWRl
bnRpZmllck51bWJlciwgdmFyaWFudC5vZmZzZXQoKSk7CisgICAgTm9kZSogZ2V0dGVyID0gYWRk
VG9HcmFwaChHZXRHZXR0ZXIsIGxvYWRlZFZhbHVlKTsKKyAgICAKKyAgICAvLyBNYWtlIGEgY2Fs
bC4gV2UgZG9uJ3QgdHJ5IHRvIGdldCBmYW5jeSB3aXRoIHVzaW5nIHRoZSBzbWFsbGVzdCBvcGVy
YW5kIG51bWJlciBiZWNhdXNlCisgICAgLy8gdGhlIHN0YWNrIGxheW91dCBwaGFzZSBzaG91bGQg
Y29tcHJlc3MgdGhlIHN0YWNrIGFueXdheS4KKyAgICAKKyAgICB1bnNpZ25lZCBudW1iZXJPZlBh
cmFtZXRlcnMgPSAwOworICAgIG51bWJlck9mUGFyYW1ldGVycysrOyAvLyBUaGUgJ3RoaXMnIGFy
Z3VtZW50LgorICAgIG51bWJlck9mUGFyYW1ldGVycysrOyAvLyBUcnVlIHJldHVybiBQQy4KKyAg
ICAKKyAgICAvLyBTdGFydCB3aXRoIGEgcmVnaXN0ZXIgb2Zmc2V0IHRoYXQgY29ycmVzcG9uZHMg
dG8gdGhlIGxhc3QgaW4tdXNlIHJlZ2lzdGVyLgorICAgIGludCByZWdpc3Rlck9mZnNldCA9IHZp
cnR1YWxSZWdpc3RlckZvckxvY2FsKAorICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2Zp
bGVkQmxvY2stPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzIC0gMSkub2Zmc2V0KCk7CisgICAgcmVnaXN0
ZXJPZmZzZXQgLT0gbnVtYmVyT2ZQYXJhbWV0ZXJzOworICAgIHJlZ2lzdGVyT2Zmc2V0IC09IEpT
U3RhY2s6OkNhbGxGcmFtZUhlYWRlclNpemU7CisgICAgCisgICAgLy8gR2V0IHRoZSBhbGlnbm1l
bnQgcmlnaHQuCisgICAgcmVnaXN0ZXJPZmZzZXQgPSAtV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9m
KAorICAgICAgICBzdGFja0FsaWdubWVudFJlZ2lzdGVycygpLAorICAgICAgICAtcmVnaXN0ZXJP
ZmZzZXQpOworICAgIAorICAgIGVuc3VyZUxvY2FscygKKyAgICAgICAgbV9pbmxpbmVTdGFja1Rv
cC0+cmVtYXBPcGVyYW5kKAorICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyKHJlZ2lzdGVyT2Zm
c2V0KSkudG9Mb2NhbCgpKTsKKyAgICAKKyAgICAvLyBJc3N1ZSBTZXRMb2NhbHMuIFRoaXMgaGFz
IHR3byBlZmZlY3RzOgorICAgIC8vIDEpIFRoYXQncyBob3cgaGFuZGxlQ2FsbCgpIHNlZXMgdGhl
IGFyZ3VtZW50cy4KKyAgICAvLyAyKSBJZiB3ZSBpbmxpbmUgdGhlbiB0aGlzIGVuc3VyZXMgdGhh
dCB0aGUgYXJndW1lbnRzIGFyZSBmbHVzaGVkIHNvIHRoYXQgaWYgeW91IHVzZQorICAgIC8vICAg
IHRoZSBkcmVhZGVkIGFyZ3VtZW50cyBvYmplY3Qgb24gdGhlIGdldHRlciwgdGhlIHJpZ2h0IHRo
aW5ncyBoYXBwZW4uIFdlbGwsIHNvcnQgb2YgLQorICAgIC8vICAgIHNpbmNlIHdlIG9ubHkgcmVh
bGx5IGNhcmUgYWJvdXQgJ3RoaXMnIGluIHRoaXMgY2FzZS4gQnV0IHdlJ3JlIG5vdCBnb2luZyB0
byB0YWtlIHRoYXQKKyAgICAvLyAgICBzaG9ydGN1dC4KKyAgICBpbnQgbmV4dFJlZ2lzdGVyID0g
cmVnaXN0ZXJPZmZzZXQgKyBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplOworICAgIHNldChW
aXJ0dWFsUmVnaXN0ZXIobmV4dFJlZ2lzdGVyKyspLCBiYXNlLCBJbW1lZGlhdGVOYWtlZFNldCk7
CisgICAgCisgICAgaGFuZGxlQ2FsbCgKKyAgICAgICAgZGVzdGluYXRpb25PcGVyYW5kLCBDYWxs
LCBJbmxpbmVDYWxsRnJhbWU6OkdldHRlckNhbGwsIE9QQ09ERV9MRU5HVEgob3BfZ2V0X2J5X2lk
KSwKKyAgICAgICAgZ2V0dGVyLCBudW1iZXJPZlBhcmFtZXRlcnMgLSAxLCByZWdpc3Rlck9mZnNl
dCwgKnZhcmlhbnQuY2FsbExpbmtTdGF0dXMoKSk7CiB9CiAKIHZvaWQgQnl0ZUNvZGVQYXJzZXI6
OmVtaXRQdXRCeUlkKApAQCAtMzM3Niw3ICszNDIzLDcgQEAgQnl0ZUNvZGVQYXJzZXI6OklubGlu
ZVN0YWNrRW50cnk6OklubGluZQogICAgIFZpcnR1YWxSZWdpc3RlciByZXR1cm5WYWx1ZVZSLAog
ICAgIFZpcnR1YWxSZWdpc3RlciBpbmxpbmVDYWxsRnJhbWVTdGFydCwKICAgICBpbnQgYXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMsCi0gICAgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQor
ICAgIElubGluZUNhbGxGcmFtZTo6S2luZCBraW5kKQogICAgIDogbV9ieXRlQ29kZVBhcnNlcihi
eXRlQ29kZVBhcnNlcikKICAgICAsIG1fY29kZUJsb2NrKGNvZGVCbG9jaykKICAgICAsIG1fcHJv
ZmlsZWRCbG9jayhwcm9maWxlZEJsb2NrKQpAQCAtMzQzNSw3ICszNDgyLDcgQEAgQnl0ZUNvZGVQ
YXJzZXI6OklubGluZVN0YWNrRW50cnk6OklubGluZQogICAgICAgICAgICAgbV9pbmxpbmVDYWxs
RnJhbWUtPmlzQ2xvc3VyZUNhbGwgPSB0cnVlOwogICAgICAgICBtX2lubGluZUNhbGxGcmFtZS0+
Y2FsbGVyID0gYnl0ZUNvZGVQYXJzZXItPmN1cnJlbnRDb2RlT3JpZ2luKCk7CiAgICAgICAgIG1f
aW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMucmVzaXplKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzKTsgLy8gU2V0IHRoZSBudW1iZXIgb2YgYXJndW1lbnRzIGluY2x1ZGluZyB0aGlzLCBidXQg
ZG9uJ3QgY29uZmlndXJlIHRoZSB2YWx1ZSByZWNvdmVyaWVzLCB5ZXQuCi0gICAgICAgIG1faW5s
aW5lQ2FsbEZyYW1lLT5raW5kID0gSW5saW5lQ2FsbEZyYW1lOjpraW5kRm9yKGtpbmQpOworICAg
ICAgICBtX2lubGluZUNhbGxGcmFtZS0+a2luZCA9IGtpbmQ7CiAgICAgICAgIAogICAgICAgICBp
ZiAobV9pbmxpbmVDYWxsRnJhbWUtPmNhbGxlci5pbmxpbmVDYWxsRnJhbWUpCiAgICAgICAgICAg
ICBtX2lubGluZUNhbGxGcmFtZS0+Y2FwdHVyZWRWYXJzID0gbV9pbmxpbmVDYWxsRnJhbWUtPmNh
bGxlci5pbmxpbmVDYWxsRnJhbWUtPmNhcHR1cmVkVmFyczsKQEAgLTM2NzQsNyArMzcyMSw3IEBA
IGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlKCkKICAgICAKICAgICBJbmxpbmVTdGFja0VudHJ5
IGlubGluZVN0YWNrRW50cnkoCiAgICAgICAgIHRoaXMsIG1fY29kZUJsb2NrLCBtX3Byb2ZpbGVk
QmxvY2ssIDAsIDAsIFZpcnR1YWxSZWdpc3RlcigpLCBWaXJ0dWFsUmVnaXN0ZXIoKSwKLSAgICAg
ICAgbV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgQ29kZUZvckNhbGwpOworICAgICAgICBt
X2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBJbmxpbmVDYWxsRnJhbWU6OkNhbGwpOwogICAg
IAogICAgIHBhcnNlQ29kZUJsb2NrKCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ1NFUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ1NFUGhhc2UuY3BwCShyZXZpc2lvbiAxNjkwMTQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjkwLDYgKzY5MCw0
MCBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgCisgICAgTm9kZSog
Z2V0R2V0dGVyU2V0dGVyQnlPZmZzZXRMb2FkRWxpbWluYXRpb24odW5zaWduZWQgaWRlbnRpZmll
ck51bWJlciwgTm9kZSogYmFzZSkKKyAgICB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1f
aW5kZXhJbkJsb2NrOyBpLS07KSB7CisgICAgICAgICAgICBOb2RlKiBub2RlID0gbV9jdXJyZW50
QmxvY2stPmF0KGkpOworICAgICAgICAgICAgaWYgKG5vZGUgPT0gYmFzZSkKKyAgICAgICAgICAg
ICAgICBicmVhazsKKworICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CisgICAgICAg
ICAgICBjYXNlIEdldEdldHRlclNldHRlckJ5T2Zmc2V0OgorICAgICAgICAgICAgICAgIGlmIChu
b2RlLT5jaGlsZDIoKSA9PSBiYXNlCisgICAgICAgICAgICAgICAgICAgICYmIG1fZ3JhcGgubV9z
dG9yYWdlQWNjZXNzRGF0YVtub2RlLT5zdG9yYWdlQWNjZXNzRGF0YUluZGV4KCldLmlkZW50aWZp
ZXJOdW1iZXIgPT0gaWRlbnRpZmllck51bWJlcikKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IG5vZGU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgY2FzZSBQdXRCeVZhbERpcmVjdDoKKyAgICAgICAgICAgIGNhc2UgUHV0QnlWYWw6
CisgICAgICAgICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6CisgICAgICAgICAgICAgICAgaWYgKG1f
Z3JhcGguYnlWYWxJc1B1cmUobm9kZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gSWYgUHV0
QnlWYWwgc3BlY3VsYXRlcyB0aGF0IGl0J3MgYWNjZXNzaW5nIGFuIGFycmF5IHdpdGggYW4KKyAg
ICAgICAgICAgICAgICAgICAgLy8gaW50ZWdlciBpbmRleCwgdGhlbiBpdCdzIGltcG9zc2libGUg
Zm9yIGl0IHRvIGNhdXNlIGEgc3RydWN0dXJlCisgICAgICAgICAgICAgICAgICAgIC8vIGNoYW5n
ZS4KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVyc1dvcmxkKG5vZGUpKQorICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgCiAgICAg
Tm9kZSogcHV0QnlPZmZzZXRTdG9yZUVsaW1pbmF0aW9uKHVuc2lnbmVkIGlkZW50aWZpZXJOdW1i
ZXIsIE5vZGUqIGNoaWxkMSkKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1faW5k
ZXhJbkJsb2NrOyBpLS07KSB7CkBAIC04NDUsMjUgKzg3OSwxOCBAQCBwcml2YXRlOgogICAgICAg
ICByZXR1cm4gMDsKICAgICB9CiAgICAgCi0gICAgTm9kZSogZ2V0VHlwZWRBcnJheUJ5dGVPZmZz
ZXRMb2FkRWxpbWluYXRpb24oTm9kZSogY2hpbGQxKQorICAgIE5vZGUqIGdldEludGVybmFsRmll
bGRMb2FkRWxpbWluYXRpb24oTm9kZVR5cGUgb3AsIE5vZGUqIGNoaWxkMSkKICAgICB7CiAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IG1faW5kZXhJbkJsb2NrOyBpLS07KSB7CiAgICAgICAgICAg
ICBOb2RlKiBub2RlID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOwogICAgICAgICAgICAgaWYgKG5v
ZGUgPT0gY2hpbGQxKSAKICAgICAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICAgICAgc3dp
dGNoIChub2RlLT5vcCgpKSB7Ci0gICAgICAgICAgICBjYXNlIEdldFR5cGVkQXJyYXlCeXRlT2Zm
c2V0OiB7Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpID09IGNoaWxkMSkKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBvcCAmJiBub2RlLT5j
aGlsZDEoKSA9PSBjaGlsZDEpCisgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7CiAKLSAgICAg
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGguY2xvYmJlcnNXb3Js
ZChub2RlKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVyc1dv
cmxkKG5vZGUpKQorICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9CiAgICAgICAg
IHJldHVybiAwOwogICAgIH0KQEAgLTE0MDEsMTAgKzE0MjgsMTIgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBHZXRU
eXBlZEFycmF5Qnl0ZU9mZnNldDogeworICAgICAgICBjYXNlIEdldFR5cGVkQXJyYXlCeXRlT2Zm
c2V0OgorICAgICAgICBjYXNlIEdldEdldHRlcjoKKyAgICAgICAgY2FzZSBHZXRTZXR0ZXI6IHsK
ICAgICAgICAgICAgIGlmIChjc2VNb2RlID09IFN0b3JlRWxpbWluYXRpb24pCiAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBzZXRSZXBsYWNlbWVudChnZXRUeXBlZEFycmF5Qnl0
ZU9mZnNldExvYWRFbGltaW5hdGlvbihub2RlLT5jaGlsZDEoKS5ub2RlKCkpKTsKKyAgICAgICAg
ICAgIHNldFJlcGxhY2VtZW50KGdldEludGVybmFsRmllbGRMb2FkRWxpbWluYXRpb24obm9kZS0+
b3AoKSwgbm9kZS0+Y2hpbGQxKCkubm9kZSgpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogCkBAIC0xNDIwLDYgKzE0NDksMTIgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHNldFJl
cGxhY2VtZW50KGdldEJ5T2Zmc2V0TG9hZEVsaW1pbmF0aW9uKG1fZ3JhcGgubV9zdG9yYWdlQWNj
ZXNzRGF0YVtub2RlLT5zdG9yYWdlQWNjZXNzRGF0YUluZGV4KCldLmlkZW50aWZpZXJOdW1iZXIs
IG5vZGUtPmNoaWxkMigpLm5vZGUoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAKKyAgICAgICAgY2FzZSBHZXRHZXR0ZXJTZXR0ZXJCeU9mZnNldDoKKyAgICAgICAgICAgIGlm
IChjc2VNb2RlID09IFN0b3JlRWxpbWluYXRpb24pCisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICBzZXRSZXBsYWNlbWVudChnZXRHZXR0ZXJTZXR0ZXJCeU9mZnNldExvYWRFbGlt
aW5hdGlvbihtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGFbbm9kZS0+c3RvcmFnZUFjY2Vzc0Rh
dGFJbmRleCgpXS5pZGVudGlmaWVyTnVtYmVyLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgTXVsdGlHZXRCeU9m
ZnNldDoKICAgICAgICAgICAgIGlmIChjc2VNb2RlID09IFN0b3JlRWxpbWluYXRpb24pCiAgICAg
ICAgICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Ns
b2JiZXJpemUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Ns
b2JiZXJpemUuaAkocmV2aXNpb24gMTY5MDE0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDbG9iYmVyaXplLmgJKHdvcmtpbmcgY29weSkKQEAgLTIxMyw2ICsyMTMsMTQgQEAgdm9p
ZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgICAgICB3cml0ZShXb3Js
ZCk7CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCisgICAgY2FzZSBHZXRHZXR0ZXI6CisgICAg
ICAgIHJlYWQoR2V0dGVyU2V0dGVyX2dldHRlcik7CisgICAgICAgIHJldHVybjsKKyAgICAgICAg
CisgICAgY2FzZSBHZXRTZXR0ZXI6CisgICAgICAgIHJlYWQoR2V0dGVyU2V0dGVyX3NldHRlcik7
CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCiAgICAgY2FzZSBHZXRDYWxsZWU6CiAgICAgICAg
IHJlYWQoQWJzdHJhY3RIZWFwKFZhcmlhYmxlcywgSlNTdGFjazo6Q2FsbGVlKSk7CiAgICAgICAg
IHJldHVybjsKQEAgLTQ4MSw2ICs0ODksNyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBo
LCBOb2RlKiBub2RlCiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBHZXRCeU9m
ZnNldDoKKyAgICBjYXNlIEdldEdldHRlclNldHRlckJ5T2Zmc2V0OgogICAgICAgICByZWFkKEFi
c3RyYWN0SGVhcChOYW1lZFByb3BlcnRpZXMsIGdyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGFbbm9k
ZS0+c3RvcmFnZUFjY2Vzc0RhdGFJbmRleCgpXS5pZGVudGlmaWVyTnVtYmVyKSk7CiAgICAgICAg
IHJldHVybjsKICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Zp
eHVwUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Rml4dXBQaGFzZS5jcHAJKHJldmlzaW9uIDE2OTAxNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg4NSw3ICs4ODUsOSBA
QCBwcml2YXRlOgogICAgICAgICBjYXNlIEdldENsb3N1cmVSZWdpc3RlcnM6CiAgICAgICAgIGNh
c2UgU2tpcFRvcFNjb3BlOgogICAgICAgICBjYXNlIFNraXBTY29wZToKLSAgICAgICAgY2FzZSBH
ZXRTY29wZTogeworICAgICAgICBjYXNlIEdldFNjb3BlOgorICAgICAgICBjYXNlIEdldEdldHRl
cjoKKyAgICAgICAgY2FzZSBHZXRTZXR0ZXI6IHsKICAgICAgICAgICAgIGZpeEVkZ2U8S25vd25D
ZWxsVXNlPihub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpA
QCAtOTQ1LDcgKzk0Nyw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgR2V0QnlPZmZzZXQ6IHsKKyAgICAgICAgY2Fz
ZSBHZXRCeU9mZnNldDoKKyAgICAgICAgY2FzZSBHZXRHZXR0ZXJTZXR0ZXJCeU9mZnNldDogewog
ICAgICAgICAgICAgaWYgKCFub2RlLT5jaGlsZDEoKS0+aGFzU3RvcmFnZVJlc3VsdCgpKQogICAg
ICAgICAgICAgICAgIGZpeEVkZ2U8S25vd25DZWxsVXNlPihub2RlLT5jaGlsZDEoKSk7CiAgICAg
ICAgICAgICBmaXhFZGdlPEtub3duQ2VsbFVzZT4obm9kZS0+Y2hpbGQyKCkpOwpAQCAtMTAzNCw2
ICsxMDM3LDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgIE5vZGUqIGdsb2JhbE9iamVjdE5vZGUg
PSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgIG1faW5kZXhJbkJs
b2NrLCBTcGVjTm9uZSwgV2Vha0pTQ29uc3RhbnQsIG5vZGUtPm9yaWdpbiwgCiAgICAgICAgICAg
ICAgICAgT3BJbmZvKG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRp
YykpKTsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIHByb2JhYmx5IHNob3VsZG4ndCBoYXZl
IGFuIHVuY29uZGl0aW9uYWwgYmFycmllci4KKyAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzMxMDQKICAgICAgICAgICAgIE5vZGUqIGJhcnJp
ZXJOb2RlID0gbV9ncmFwaC5hZGROb2RlKAogICAgICAgICAgICAgICAgIFNwZWNOb25lLCBTdG9y
ZUJhcnJpZXIsIG1fY3VycmVudE5vZGUtPm9yaWdpbiwgCiAgICAgICAgICAgICAgICAgRWRnZShn
bG9iYWxPYmplY3ROb2RlLCBLbm93bkNlbGxVc2UpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCShyZXZpc2lvbiAxNjkwMTQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDE3LDcgKzQxNyw3IEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmtGdW5jdGlvbigpCiAgICAg
bV9qaXRDb2RlLT5zaHJpbmtUb0ZpdCgpOwogICAgIGNvZGVCbG9jaygpLT5zaHJpbmtUb0ZpdChD
b2RlQmxvY2s6OkxhdGVTaHJpbmspOwogICAgIAotICAgIGxpbmtCdWZmZXItPmxpbmsobV9jYWxs
QXJpdHlGaXh1cCwgRnVuY3Rpb25QdHIoKG1fdm0tPmdldENUSVN0dWIoYXJpdHlGaXh1cCkpLmNv
ZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKSk7CisgICAgbGlua0J1ZmZlci0+bGluayhtX2NhbGxB
cml0eUZpeHVwLCBGdW5jdGlvblB0cigobV92bS0+Z2V0Q1RJU3R1Yihhcml0eUZpeHVwR2VuZXJh
dG9yKSkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKICAgICAKICAgICBkaXNhc3NlbWJs
ZSgqbGlua0J1ZmZlcik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9k
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCShy
ZXZpc2lvbiAxNjkwMTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMTE0Niw3ICsxMTQ2LDcgQEAgc3RydWN0IE5vZGUgewogICAgIAog
ICAgIGJvb2wgaGFzU3RvcmFnZUFjY2Vzc0RhdGEoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG9w
KCkgPT0gR2V0QnlPZmZzZXQgfHwgb3AoKSA9PSBQdXRCeU9mZnNldDsKKyAgICAgICAgcmV0dXJu
IG9wKCkgPT0gR2V0QnlPZmZzZXQgfHwgb3AoKSA9PSBHZXRHZXR0ZXJTZXR0ZXJCeU9mZnNldCB8
fCBvcCgpID09IFB1dEJ5T2Zmc2V0OwogICAgIH0KICAgICAKICAgICB1bnNpZ25lZCBzdG9yYWdl
QWNjZXNzRGF0YUluZGV4KCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9k
ZVR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVU
eXBlLmgJKHJldmlzaW9uIDE2OTAxNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Tm9kZVR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTc2LDcgKzE3NiwxMCBAQCBuYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAgbWFjcm8oR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFn
ZSwgTm9kZVJlc3VsdFN0b3JhZ2UpIFwKICAgICBtYWNybyhDb25zdGFudFN0b3JhZ2VQb2ludGVy
LCBOb2RlUmVzdWx0U3RvcmFnZSkgXAogICAgIG1hY3JvKFR5cGVkQXJyYXlXYXRjaHBvaW50LCBO
b2RlTXVzdEdlbmVyYXRlKSBcCisgICAgbWFjcm8oR2V0R2V0dGVyLCBOb2RlUmVzdWx0SlMpIFwK
KyAgICBtYWNybyhHZXRTZXR0ZXIsIE5vZGVSZXN1bHRKUykgXAogICAgIG1hY3JvKEdldEJ5T2Zm
c2V0LCBOb2RlUmVzdWx0SlMpIFwKKyAgICBtYWNybyhHZXRHZXR0ZXJTZXR0ZXJCeU9mZnNldCwg
Tm9kZVJlc3VsdEpTKSBcCiAgICAgbWFjcm8oTXVsdGlHZXRCeU9mZnNldCwgTm9kZVJlc3VsdEpT
KSBcCiAgICAgbWFjcm8oUHV0QnlPZmZzZXQsIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNy
byhNdWx0aVB1dEJ5T2Zmc2V0LCBOb2RlTXVzdEdlbmVyYXRlKSBcCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3Bw
CShyZXZpc2lvbiAxNjkwMTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4
aXRDb21waWxlckNvbW1vbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwOCwxMiArMTA4LDQ0IEBA
IHZvaWQgcmVpZnlJbmxpbmVkQ2FsbEZyYW1lcyhDQ2FsbEhlbHBlcnMKICAgICAgICAgSW5saW5l
Q2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZTsK
ICAgICAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IGppdC5iYXNlbGluZUNvZGVC
bG9ja0Zvcihjb2RlT3JpZ2luKTsKICAgICAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9j
a0ZvckNhbGxlciA9IGppdC5iYXNlbGluZUNvZGVCbG9ja0ZvcihpbmxpbmVDYWxsRnJhbWUtPmNh
bGxlcik7CisgICAgICAgIHZvaWQqIGp1bXBUYXJnZXQ7CisgICAgICAgIHZvaWQqIHRydWVSZXR1
cm5QQyA9IG51bGxwdHI7CisgICAgICAgIAogICAgICAgICB1bnNpZ25lZCBjYWxsQnl0ZWNvZGVJ
bmRleCA9IGlubGluZUNhbGxGcmFtZS0+Y2FsbGVyLmJ5dGVjb2RlSW5kZXg7Ci0gICAgICAgIENh
bGxMaW5rSW5mbyogY2FsbExpbmtJbmZvID0KLSAgICAgICAgICAgIGJhc2VsaW5lQ29kZUJsb2Nr
Rm9yQ2FsbGVyLT5nZXRDYWxsTGlua0luZm9Gb3JCeXRlY29kZUluZGV4KGNhbGxCeXRlY29kZUlu
ZGV4KTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2FsbExpbmtJbmZvKTsKICAgICAgICAgCi0g
ICAgICAgIHZvaWQqIGp1bXBUYXJnZXQgPSBjYWxsTGlua0luZm8tPmNhbGxSZXR1cm5Mb2NhdGlv
bi5leGVjdXRhYmxlQWRkcmVzcygpOworICAgICAgICBzd2l0Y2ggKGlubGluZUNhbGxGcmFtZS0+
a2luZCkgeworICAgICAgICBjYXNlIElubGluZUNhbGxGcmFtZTo6Q2FsbDoKKyAgICAgICAgY2Fz
ZSBJbmxpbmVDYWxsRnJhbWU6OkNvbnN0cnVjdDogeworICAgICAgICAgICAgQ2FsbExpbmtJbmZv
KiBjYWxsTGlua0luZm8gPQorICAgICAgICAgICAgICAgIGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2Fs
bGVyLT5nZXRDYWxsTGlua0luZm9Gb3JCeXRlY29kZUluZGV4KGNhbGxCeXRlY29kZUluZGV4KTsK
KyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxMaW5rSW5mbyk7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIGp1bXBUYXJnZXQgPSBjYWxsTGlua0luZm8tPmNhbGxSZXR1cm5Mb2NhdGlv
bi5leGVjdXRhYmxlQWRkcmVzcygpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgICAgIAorICAgICAgICBjYXNlIElubGluZUNhbGxGcmFtZTo6R2V0dGVyQ2FsbDoKKyAg
ICAgICAgY2FzZSBJbmxpbmVDYWxsRnJhbWU6OlNldHRlckNhbGw6IHsKKyAgICAgICAgICAgIFN0
cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9CisgICAgICAgICAgICAgICAgYmFzZWxpbmVDb2Rl
QmxvY2tGb3JDYWxsZXItPmZpbmRTdHViSW5mbyhDb2RlT3JpZ2luKGNhbGxCeXRlY29kZUluZGV4
KSk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzdHViSW5mbyk7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIHN3aXRjaCAoaW5saW5lQ2FsbEZyYW1lLT5raW5kKSB7CisgICAgICAgICAg
ICBjYXNlIElubGluZUNhbGxGcmFtZTo6R2V0dGVyQ2FsbDoKKyAgICAgICAgICAgICAgICBqdW1w
VGFyZ2V0ID0gaml0LnZtKCktPmdldENUSVN0dWIoYmFzZWxpbmVHZXR0ZXJSZXR1cm5UaHVua0dl
bmVyYXRvcikuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICBjYXNlIElubGluZUNhbGxGcmFtZTo6U2V0dGVyQ2FsbDoKKyAgICAg
ICAgICAgICAgICBqdW1wVGFyZ2V0ID0gaml0LnZtKCktPmdldENUSVN0dWIoYmFzZWxpbmVTZXR0
ZXJSZXR1cm5UaHVua0dlbmVyYXRvcikuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHRydWVSZXR1cm5QQyA9IHN0
dWJJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldCgKKyAgICAgICAgICAgICAg
ICBzdHViSW5mby0+cGF0Y2guZGVsdGFDYWxsVG9Eb25lKS5leGVjdXRhYmxlQWRkcmVzcygpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0gfQogCiAgICAgICAgIEdQUlJlZyBjYWxsZXJG
cmFtZUdQUjsKICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+Y2FsbGVyLmlubGluZUNhbGxG
cmFtZSkgewpAQCAtMTIyLDEyICsxNTQsMTUgQEAgdm9pZCByZWlmeUlubGluZWRDYWxsRnJhbWVz
KENDYWxsSGVscGVycwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIGNhbGxlckZyYW1lR1BS
ID0gR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXI7CiAgICAgICAgIAorICAgICAgICBqaXQuc3Rv
cmVQdHIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGp1bXBUYXJnZXQpLCBBc3NlbWJs
eUhlbHBlcnM6OmFkZHJlc3NGb3JCeXRlT2Zmc2V0KGlubGluZUNhbGxGcmFtZS0+cmV0dXJuUENP
ZmZzZXQoKSkpOworICAgICAgICBpZiAodHJ1ZVJldHVyblBDKQorICAgICAgICAgICAgaml0LnN0
b3JlUHRyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbVB0cih0cnVlUmV0dXJuUEMpLCBBc3Nl
bWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIHZp
cnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUo
KSkub2Zmc2V0KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAKICNpZiBVU0UoSlNWQUxV
RTY0KQogICAgICAgICBqaXQuc3RvcmVQdHIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRy
KGJhc2VsaW5lQ29kZUJsb2NrKSwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFs
UmVnaXN0ZXIpKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBKU1N0YWNrOjpDb2RlQmxv
Y2spKSk7CiAgICAgICAgIGlmICghaW5saW5lQ2FsbEZyYW1lLT5pc0Nsb3N1cmVDYWxsKQogICAg
ICAgICAgICAgaml0LnN0b3JlNjQoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tNjQoSlNWYWx1
ZTo6ZW5jb2RlKEpTVmFsdWUoaW5saW5lQ2FsbEZyYW1lLT5jYWxsZWVDb25zdGFudCgpLT5zY29w
ZSgpKSkpLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcikoaW5s
aW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIEpTU3RhY2s6OlNjb3BlQ2hhaW4pKSk7CiAgICAg
ICAgIGppdC5zdG9yZTY0KGNhbGxlckZyYW1lR1BSLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NG
b3JCeXRlT2Zmc2V0KGlubGluZUNhbGxGcmFtZS0+Y2FsbGVyRnJhbWVPZmZzZXQoKSkpOwotICAg
ICAgICBqaXQuc3RvcmVQdHIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGp1bXBUYXJn
ZXQpLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3JCeXRlT2Zmc2V0KGlubGluZUNhbGxGcmFt
ZS0+cmV0dXJuUENPZmZzZXQoKSkpOwogICAgICAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBD
YWxsRnJhbWU6OkxvY2F0aW9uOjplbmNvZGVBc0J5dGVjb2RlT2Zmc2V0KGNvZGVPcmlnaW4uYnl0
ZWNvZGVJbmRleCk7CiAgICAgICAgIGppdC5zdG9yZTMyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3Rl
ZEltbTMyKGxvY2F0aW9uQml0cyksIEFzc2VtYmx5SGVscGVyczo6dGFnRm9yKChWaXJ0dWFsUmVn
aXN0ZXIpKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBKU1N0YWNrOjpBcmd1bWVudENv
dW50KSkpOwogICAgICAgICBqaXQuc3RvcmUzMihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0z
MihpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkpLCBBc3NlbWJseUhlbHBlcnM6OnBh
eWxvYWRGb3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCAr
IEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpKSk7CkBAIC0xNDMsNyArMTc4LDYgQEAgdm9pZCByZWlm
eUlubGluZWRDYWxsRnJhbWVzKENDYWxsSGVscGVycwogICAgICAgICBpZiAoIWlubGluZUNhbGxG
cmFtZS0+aXNDbG9zdXJlQ2FsbCkKICAgICAgICAgICAgIGppdC5zdG9yZVB0cihBc3NlbWJseUhl
bHBlcnM6OlRydXN0ZWRJbW1QdHIoaW5saW5lQ2FsbEZyYW1lLT5jYWxsZWVDb25zdGFudCgpLT5z
Y29wZSgpKSwgQXNzZW1ibHlIZWxwZXJzOjpwYXlsb2FkRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlu
bGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBKU1N0YWNrOjpTY29wZUNoYWluKSkpOwogICAg
ICAgICBqaXQuc3RvcmVQdHIoY2FsbGVyRnJhbWVHUFIsIEFzc2VtYmx5SGVscGVyczo6YWRkcmVz
c0ZvckJ5dGVPZmZzZXQoaW5saW5lQ2FsbEZyYW1lLT5jYWxsZXJGcmFtZU9mZnNldCgpKSk7Ci0g
ICAgICAgIGppdC5zdG9yZVB0cihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoanVtcFRh
cmdldCksIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvckJ5dGVPZmZzZXQoaW5saW5lQ2FsbEZy
YW1lLT5yZXR1cm5QQ09mZnNldCgpKSk7CiAgICAgICAgIEluc3RydWN0aW9uKiBpbnN0cnVjdGlv
biA9IGJhc2VsaW5lQ29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5iZWdpbigpICsgY29kZU9yaWdp
bi5ieXRlY29kZUluZGV4OwogICAgICAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsRnJh
bWU6OkxvY2F0aW9uOjplbmNvZGVBc0J5dGVjb2RlSW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rpb24pOwog
ICAgICAgICBqaXQuc3RvcmUzMihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihsb2NhdGlv
bkJpdHMpLCBBc3NlbWJseUhlbHBlcnM6OnRhZ0ZvcigoVmlydHVhbFJlZ2lzdGVyKShpbmxpbmVD
YWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgSlNTdGFjazo6QXJndW1lbnRDb3VudCkpKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlv
blByb3BhZ2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxNjkwMTQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTg4LDYgKzE4OCwyMCBAQCBwcml2YXRlOgogICAgICAgICAgICAgY2hhbmdlZCB8
PSBzZXRQcmVkaWN0aW9uKG5vZGUtPmdldEhlYXBQcmVkaWN0aW9uKCkpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEdldEdldHRlclNl
dHRlckJ5T2Zmc2V0OiB7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24oU3Bl
Y0NlbGxPdGhlcik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNh
c2UgR2V0R2V0dGVyOgorICAgICAgICBjYXNlIEdldFNldHRlcjoKKyAgICAgICAgY2FzZSBHZXRD
YWxsZWU6CisgICAgICAgIGNhc2UgTmV3RnVuY3Rpb25Ob0NoZWNrOgorICAgICAgICBjYXNlIE5l
d0Z1bmN0aW9uRXhwcmVzc2lvbjogeworICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0
aW9uKFNwZWNGdW5jdGlvbik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogCiAgICAg
ICAgIGNhc2UgU3RyaW5nQ2hhckNvZGVBdDogewogICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQ
cmVkaWN0aW9uKFNwZWNJbnQzMik7CkBAIC00MjMsMTEgKzQzNyw2IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgR2V0
Q2FsbGVlOiB7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24oU3BlY0Z1bmN0
aW9uKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgICAgICAKICAgICAg
ICAgY2FzZSBDcmVhdGVUaGlzOgogICAgICAgICBjYXNlIE5ld09iamVjdDogewogICAgICAgICAg
ICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0aW9uKFNwZWNGaW5hbE9iamVjdCk7CkBAIC00OTAsMTIg
KzQ5OSw2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAg
ICAgICAgCi0gICAgICAgIGNhc2UgTmV3RnVuY3Rpb25Ob0NoZWNrOgotICAgICAgICBjYXNlIE5l
d0Z1bmN0aW9uRXhwcmVzc2lvbjogewotICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0
aW9uKFNwZWNGdW5jdGlvbik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAg
ICAgICAgCiAgICAgICAgIGNhc2UgUHV0QnlWYWxBbGlhczoKICAgICAgICAgY2FzZSBHZXRBcnJh
eUxlbmd0aDoKICAgICAgICAgY2FzZSBHZXRUeXBlZEFycmF5Qnl0ZU9mZnNldDoKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCShyZXZpc2lvbiAx
NjkwMTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMjUzLDYgKzI1Myw4IEBAIGJvb2wgc2FmZVRvRXhlY3V0ZShBYnN0
cmFjdFN0YXRlVHlwZSYgc3QKICAgICBjYXNlIFZhbHVlUmVwOgogICAgIGNhc2UgRG91YmxlUmVw
OgogICAgIGNhc2UgSW50NTJSZXA6CisgICAgY2FzZSBHZXRHZXR0ZXI6CisgICAgY2FzZSBHZXRT
ZXR0ZXI6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAKICAgICBjYXNlIEdldEJ5VmFs
OgpAQCAtMjg1LDYgKzI4Nyw3IEBAIGJvb2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlw
ZSYgc3QKICAgICAgICAgICAgIFN0cnVjdHVyZVNldChub2RlLT5zdHJ1Y3R1cmVUcmFuc2l0aW9u
RGF0YSgpLnByZXZpb3VzU3RydWN0dXJlKSk7CiAgICAgICAgIAogICAgIGNhc2UgR2V0QnlPZmZz
ZXQ6CisgICAgY2FzZSBHZXRHZXR0ZXJTZXR0ZXJCeU9mZnNldDoKICAgICBjYXNlIFB1dEJ5T2Zm
c2V0OgogICAgICAgICByZXR1cm4gc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV9jdXJy
ZW50S25vd25TdHJ1Y3R1cmUuaXNWYWxpZE9mZnNldCgKICAgICAgICAgICAgIGdyYXBoLm1fc3Rv
cmFnZUFjY2Vzc0RhdGFbbm9kZS0+c3RvcmFnZUFjY2Vzc0RhdGFJbmRleCgpXS5vZmZzZXQpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklUMzJfNjQuY3BwCShyZXZpc2lvbiAxNjkwMTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICsz
NSw3IEBACiAjaW5jbHVkZSAiREZHT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkRGR1Nsb3dQYXRo
R2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiRGVidWdnZXIuaCIKKyNpbmNsdWRlICJHZXR0ZXJTZXR0
ZXIuaCIKICNpbmNsdWRlICJKU0FjdGl2YXRpb24uaCIKICNpbmNsdWRlICJPYmplY3RQcm90b3R5
cGUuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCkBAIC0zNzkyLDYgKzM3OTMsNDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBicmVhazsKICAg
ICB9CiAgICAgICAgIAorICAgIGNhc2UgR2V0R2V0dGVyU2V0dGVyQnlPZmZzZXQ6IHsKKyAgICAg
ICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAg
IEdQUlRlbXBvcmFyeSByZXN1bHRQYXlsb2FkKHRoaXMpOworICAgICAgICAKKyAgICAgICAgR1BS
UmVnIHN0b3JhZ2VHUFIgPSBzdG9yYWdlLmdwcigpOworICAgICAgICBHUFJSZWcgcmVzdWx0UGF5
bG9hZEdQUiA9IHJlc3VsdFBheWxvYWQuZ3ByKCk7CisgICAgICAgIAorICAgICAgICBTdG9yYWdl
QWNjZXNzRGF0YSYgc3RvcmFnZUFjY2Vzc0RhdGEgPSBtX2ppdC5ncmFwaCgpLm1fc3RvcmFnZUFj
Y2Vzc0RhdGFbbm9kZS0+c3RvcmFnZUFjY2Vzc0RhdGFJbmRleCgpXTsKKyAgICAgICAgCisgICAg
ICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBvZmZzZXRS
ZWxhdGl2ZVRvQmFzZShzdG9yYWdlQWNjZXNzRGF0YS5vZmZzZXQpICsgT0JKRUNUX09GRlNFVE9G
KEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSksIHJlc3VsdFBheWxvYWRH
UFIpOworICAgICAgICAKKyAgICAgICAgY2VsbFJlc3VsdChyZXN1bHRQYXlsb2FkR1BSLCBub2Rl
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAKKyAgICBjYXNlIEdldEdldHRlcjog
eworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkp
OworICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIFJldXNlLCBvcDEpOworICAgICAg
ICAKKyAgICAgICAgR1BSUmVnIG9wMUdQUiA9IG9wMS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJl
c3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgCisgICAgICAgIG1faml0LmxvYWRQdHIo
SklUQ29tcGlsZXI6OkFkZHJlc3Mob3AxR1BSLCBHZXR0ZXJTZXR0ZXI6Om9mZnNldE9mR2V0dGVy
KCkpLCByZXN1bHRHUFIpOworICAgICAgICAKKyAgICAgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIs
IG5vZGUpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAorICAgIGNhc2UgR2V0U2V0
dGVyOiB7CisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGls
ZDEoKSk7CisgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgUmV1c2UsIG9wMSk7Cisg
ICAgICAgIAorICAgICAgICBHUFJSZWcgb3AxR1BSID0gb3AxLmdwcigpOworICAgICAgICBHUFJS
ZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICAKKyAgICAgICAgbV9qaXQubG9h
ZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhvcDFHUFIsIEdldHRlclNldHRlcjo6b2Zmc2V0T2ZT
ZXR0ZXIoKSksIHJlc3VsdEdQUik7CisgICAgICAgIAorICAgICAgICBjZWxsUmVzdWx0KHJlc3Vs
dEdQUiwgbm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCiAgICAgY2FzZSBQ
dXRCeU9mZnNldDogewogICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG5vZGUt
PmNoaWxkMSgpKTsKICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hp
bGQzKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAxNjkwMTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICsz
NSw3IEBACiAjaW5jbHVkZSAiREZHT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkRGR1Nsb3dQYXRo
R2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiRGVidWdnZXIuaCIKKyNpbmNsdWRlICJHZXR0ZXJTZXR0
ZXIuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiT2JqZWN0UHJvdG90eXBl
LmgiCiAjaW5jbHVkZSAiU3BpbGxSZWdpc3RlcnNNb2RlLmgiCkBAIC0zODUzLDcgKzM4NTQsOCBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGJyZWFr
OwogICAgIH0KICAgICAgICAgCi0gICAgY2FzZSBHZXRCeU9mZnNldDogeworICAgIGNhc2UgR2V0
QnlPZmZzZXQ6CisgICAgY2FzZSBHZXRHZXR0ZXJTZXR0ZXJCeU9mZnNldDogewogICAgICAgICBT
dG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgR1BS
VGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBSZXVzZSwgc3RvcmFnZSk7CiAgICAgICAgIApAQCAtMzg2
OCw2ICszODcwLDMyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkK
ICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKKyAgICBjYXNlIEdldEdldHRlcjogewor
ICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwor
ICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIFJldXNlLCBvcDEpOworICAgICAgICAK
KyAgICAgICAgR1BSUmVnIG9wMUdQUiA9IG9wMS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3Vs
dEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgCisgICAgICAgIG1faml0LmxvYWRQdHIoSklU
Q29tcGlsZXI6OkFkZHJlc3Mob3AxR1BSLCBHZXR0ZXJTZXR0ZXI6Om9mZnNldE9mR2V0dGVyKCkp
LCByZXN1bHRHUFIpOworICAgICAgICAKKyAgICAgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIsIG5v
ZGUpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAorICAgIGNhc2UgR2V0U2V0dGVy
OiB7CisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEo
KSk7CisgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgUmV1c2UsIG9wMSk7CisgICAg
ICAgIAorICAgICAgICBHUFJSZWcgb3AxR1BSID0gb3AxLmdwcigpOworICAgICAgICBHUFJSZWcg
cmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICAKKyAgICAgICAgbV9qaXQubG9hZFB0
cihKSVRDb21waWxlcjo6QWRkcmVzcyhvcDFHUFIsIEdldHRlclNldHRlcjo6b2Zmc2V0T2ZTZXR0
ZXIoKSksIHJlc3VsdEdQUik7CisgICAgICAgIAorICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQ
Uiwgbm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCiAgICAgY2FzZSBQdXRC
eU9mZnNldDogewogICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG5vZGUtPmNo
aWxkMSgpKTsKICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQz
KCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBv
c2l0b3J5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFi
c3RyYWN0SGVhcFJlcG9zaXRvcnkuY3BwCShyZXZpc2lvbiAxNjkwMTQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0yOCw2ICsyOCw3IEBACiAKICNpZiBFTkFCTEUoRlRMX0pJVCkKIAorI2luY2x1ZGUgIkdl
dHRlclNldHRlci5oIgogI2luY2x1ZGUgIkpTU2NvcGUuaCIKICNpbmNsdWRlICJKU1ZhcmlhYmxl
T2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgJKHJldmlz
aW9uIDE2OTAxNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFw
UmVwb3NpdG9yeS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00Niw2ICs0Niw4IEBAIG5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgRlRMIHsKICAgICBtYWNybyhCdXR0ZXJmbHlfcHVibGljTGVuZ3RoLCBCdXR0
ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpIFwKICAgICBtYWNybyhCdXR0ZXJmbHlfdmVj
dG9yTGVuZ3RoLCBCdXR0ZXJmbHk6Om9mZnNldE9mVmVjdG9yTGVuZ3RoKCkpIFwKICAgICBtYWNy
byhDYWxsRnJhbWVfY2FsbGVyRnJhbWUsIENhbGxGcmFtZTo6Y2FsbGVyRnJhbWVPZmZzZXQoKSkg
XAorICAgIG1hY3JvKEdldHRlclNldHRlcl9nZXR0ZXIsIEdldHRlclNldHRlcjo6b2Zmc2V0T2ZH
ZXR0ZXIoKSkgXAorICAgIG1hY3JvKEdldHRlclNldHRlcl9zZXR0ZXIsIEdldHRlclNldHRlcjo6
b2Zmc2V0T2ZTZXR0ZXIoKSkgXAogICAgIG1hY3JvKEpTQXJyYXlCdWZmZXJWaWV3X2xlbmd0aCwg
SlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mTGVuZ3RoKCkpIFwKICAgICBtYWNybyhKU0FycmF5
QnVmZmVyVmlld19tb2RlLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZNb2RlKCkpIFwKICAg
ICBtYWNybyhKU0FycmF5QnVmZmVyVmlld192ZWN0b3IsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZz
ZXRPZlZlY3RvcigpKSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFi
aWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExD
YXBhYmlsaXRpZXMuY3BwCShyZXZpc2lvbiAxNjkwMTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcyLDYgKzcyLDkg
QEAgaW5saW5lIENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlKE5vZGUqIAogICAgIGNhc2UgTmV3
QXJyYXk6CiAgICAgY2FzZSBOZXdBcnJheUJ1ZmZlcjoKICAgICBjYXNlIEdldEJ5T2Zmc2V0Ogor
ICAgIGNhc2UgR2V0R2V0dGVyU2V0dGVyQnlPZmZzZXQ6CisgICAgY2FzZSBHZXRHZXR0ZXI6Cisg
ICAgY2FzZSBHZXRTZXR0ZXI6CiAgICAgY2FzZSBQdXRCeU9mZnNldDoKICAgICBjYXNlIEdldEds
b2JhbFZhcjoKICAgICBjYXNlIFB1dEdsb2JhbFZhcjoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMTGluay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExMaW5rLmNwcAkocmV2aXNpb24gMTY5MDE0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExMaW5rLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc4LDcgKzE3OCw3IEBAIHZv
aWQgbGluayhTdGF0ZSYgc3RhdGUpCiAKICAgICAgICAgbGlua0J1ZmZlciA9IGFkb3B0UHRyKG5l
dyBMaW5rQnVmZmVyKHZtLCAmaml0LCBjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uTXVzdFN1Y2Nl
ZWQpKTsKICAgICAgICAgbGlua0J1ZmZlci0+bGluayhjYWxsQXJpdHlDaGVjaywgY29kZUJsb2Nr
LT5tX2lzQ29uc3RydWN0b3IgPyBvcGVyYXRpb25Db25zdHJ1Y3RBcml0eUNoZWNrIDogb3BlcmF0
aW9uQ2FsbEFyaXR5Q2hlY2spOwotICAgICAgICBsaW5rQnVmZmVyLT5saW5rKGNhbGxBcml0eUZp
eHVwLCBGdW5jdGlvblB0cigodm0uZ2V0Q1RJU3R1Yihhcml0eUZpeHVwKSkuY29kZSgpLmV4ZWN1
dGFibGVBZGRyZXNzKCkpKTsKKyAgICAgICAgbGlua0J1ZmZlci0+bGluayhjYWxsQXJpdHlGaXh1
cCwgRnVuY3Rpb25QdHIoKHZtLmdldENUSVN0dWIoYXJpdHlGaXh1cEdlbmVyYXRvcikpLmNvZGUo
KS5leGVjdXRhYmxlQWRkcmVzcygpKSk7CiAgICAgICAgIGxpbmtCdWZmZXItPmxpbmsobWFpblBh
dGhKdW1wcywgQ29kZUxvY2F0aW9uTGFiZWwoYml0d2lzZV9jYXN0PHZvaWQqPihzdGF0ZS5nZW5l
cmF0ZWRGdW5jdGlvbikpKTsKIAogICAgICAgICBzdGF0ZS5qaXRDb2RlLT5pbml0aWFsaXplQWRk
cmVzc0ZvckNhbGwoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKGJpdHdpc2VfY2FzdDx2b2lkKj4oc3Rh
dGUuZ2VuZXJhdGVkRnVuY3Rpb24pKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTExvd2VyREZHVG9MTFZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkocmV2aXNpb24gMTY5MDE0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ5Myw4ICs0OTMsMTUgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGNvbXBpbGVTdHJpbmdD
aGFyQ29kZUF0KCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBHZXRCeU9mZnNl
dDoKKyAgICAgICAgY2FzZSBHZXRHZXR0ZXJTZXR0ZXJCeU9mZnNldDoKICAgICAgICAgICAgIGNv
bXBpbGVHZXRCeU9mZnNldCgpOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR2V0
R2V0dGVyOgorICAgICAgICAgICAgY29tcGlsZUdldEdldHRlcigpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgR2V0U2V0dGVyOgorICAgICAgICAgICAgY29tcGlsZUdldFNldHRl
cigpOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgTXVsdGlHZXRCeU9mZnNldDoK
ICAgICAgICAgICAgIGNvbXBpbGVNdWx0aUdldEJ5T2Zmc2V0KCk7CiAgICAgICAgICAgICBicmVh
azsKQEAgLTMxNDEsNiArMzE0OCwxNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgbG93U3RvcmFn
ZShtX25vZGUtPmNoaWxkMSgpKSwgZGF0YS5pZGVudGlmaWVyTnVtYmVyLCBkYXRhLm9mZnNldCkp
OwogICAgIH0KICAgICAKKyAgICB2b2lkIGNvbXBpbGVHZXRHZXR0ZXIoKQorICAgIHsKKyAgICAg
ICAgc2V0SlNWYWx1ZShtX291dC5sb2FkUHRyKGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSksIG1f
aGVhcHMuR2V0dGVyU2V0dGVyX2dldHRlcikpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBp
bGVHZXRTZXR0ZXIoKQorICAgIHsKKyAgICAgICAgc2V0SlNWYWx1ZShtX291dC5sb2FkUHRyKGxv
d0NlbGwobV9ub2RlLT5jaGlsZDEoKSksIG1faGVhcHMuR2V0dGVyU2V0dGVyX3NldHRlcikpOwor
ICAgIH0KKyAgICAKICAgICB2b2lkIGNvbXBpbGVNdWx0aUdldEJ5T2Zmc2V0KCkKICAgICB7CiAg
ICAgICAgIExWYWx1ZSBiYXNlID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0FjY2Vzc29yQ2FsbEpJVFN0dWJS
b3V0aW5lLmgJKHJldmlzaW9uIDE2OTAxNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
QWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsNyArNDYs
NiBAQCBwdWJsaWM6CiAgICAgCiAgICAgdmlydHVhbCBib29sIHZpc2l0V2VhayhSZXBhdGNoQnVm
ZmVyJikgb3ZlcnJpZGU7CiAgICAgCi1wcml2YXRlOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxs
TGlua0luZm8+IG1fY2FsbExpbmtJbmZvOwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklULmNwcAkocmV2aXNpb24gMTY5MDE0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDgsNiArMTA4LDE3IEBAIHZvaWQgSklUOjplbWl0
RW50ZXJPcHRpbWl6YXRpb25DaGVjaygpCiB9CiAjZW5kaWYKIAordm9pZCBKSVQ6OmFzc2VydFN0
YWNrUG9pbnRlck9mZnNldCgpCit7CisgICAgaWYgKEFTU0VSVF9ESVNBQkxFRCkKKyAgICAgICAg
cmV0dXJuOworICAgIAorICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0
Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwg
cmVnVDApOworICAgIEp1bXAgb2sgPSBicmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCBzdGFja1BvaW50
ZXJSZWdpc3Rlcik7CisgICAgYnJlYWtwb2ludCgpOworICAgIG9rLmxpbmsodGhpcyk7Cit9CisK
ICNkZWZpbmUgTkVYVF9PUENPREUobmFtZSkgXAogICAgIG1fYnl0ZWNvZGVPZmZzZXQgKz0gT1BD
T0RFX0xFTkdUSChuYW1lKTsgXAogICAgIGJyZWFrOwpAQCAtNTcwLDcgKzU4MSw3IEBAIENvbXBp
bGF0aW9uUmVzdWx0IEpJVDo6cHJpdmF0ZUNvbXBpbGUoSkkKICNlbmRpZgogICAgICAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIobV92bS0+YXJpdHlDaGVja0ZhaWxSZXR1cm5UaHVua3MtPnJldHVyblBD
c0ZvcigqbV92bSwgbV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSkpLCB0aHVua1JlZyk7CiAg
ICAgICAgIGxvYWRQdHIoQmFzZUluZGV4KHRodW5rUmVnLCByZWdUMCwgdGltZXNQdHIoKSksIHRo
dW5rUmVnKTsKLSAgICAgICAgZW1pdE5ha2VkQ2FsbChtX3ZtLT5nZXRDVElTdHViKGFyaXR5Rml4
dXApLmNvZGUoKSk7CisgICAgICAgIGVtaXROYWtlZENhbGwobV92bS0+Z2V0Q1RJU3R1Yihhcml0
eUZpeHVwR2VuZXJhdG9yKS5jb2RlKCkpOwogCiAjaWYgIUFTU0VSVF9ESVNBQkxFRAogICAgICAg
ICBtX2J5dGVjb2RlT2Zmc2V0ID0gKHVuc2lnbmVkKS0xOyAvLyBSZXNldCB0aGlzLCBpbiBvcmRl
ciB0byBndWFyZCBpdHMgdXNlIHdpdGggQVNTRVJUcy4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVQuaAkocmV2aXNpb24gMTY5MDE0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQu
aAkod29ya2luZyBjb3B5KQpAQCAtMjQyLDcgKzI0Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAg
ICAgICAgIHN0YXRpYyB1bnNpZ25lZCBmcmFtZVJlZ2lzdGVyQ291bnRGb3IoQ29kZUJsb2NrKik7
CiAgICAgICAgIHN0YXRpYyBpbnQgc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKENvZGVCbG9jayopOwot
CisgICAgICAgIAogICAgIHByaXZhdGU6CiAgICAgICAgIEpJVChWTSosIENvZGVCbG9jayogPSAw
KTsKIApAQCAtNDQ2LDYgKzQ0Niw4IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHZvaWQg
ZW1pdF9jb21wYXJlQW5kSnVtcChPcGNvZGVJRCwgaW50IG9wMSwgaW50IG9wMiwgdW5zaWduZWQg
dGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKICAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVB
bmRKdW1wU2xvdyhpbnQgb3AxLCBpbnQgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIERvdWJsZUNvbmRp
dGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEV4ZWNTdGF0ZSosIEVuY29k
ZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAgIAorICAgICAgICB2b2lkIGFzc2VydFN0YWNrUG9p
bnRlck9mZnNldCgpOwogCiAgICAgICAgIHZvaWQgZW1pdF9vcF90b3VjaF9lbnRyeShJbnN0cnVj
dGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfYWRkKEluc3RydWN0aW9uKik7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkocmV2
aXNpb24gMTY5MDE0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFj
Y2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyOCw2ICs1MjgsNyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9nZXRfYnlfaWQoSW5zdHJ1Y3Rpb24qCiAKICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KCk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKKyAgICBhc3NlcnRT
dGFja1BvaW50ZXJPZmZzZXQoKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9p
ZChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dl
bmVyYXRvcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1
bmtHZW5lcmF0b3JzLmNwcAkocmV2aXNpb24gMTY5MDE0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MzAsNyArNDMw
LDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG5hdGl2ZUNvbnN0cnVjdEdlbgogICAgIHJldHVy
biBuYXRpdmVGb3JHZW5lcmF0b3Iodm0sIENvZGVGb3JDb25zdHJ1Y3QpOwogfQogCi1NYWNyb0Fz
c2VtYmxlckNvZGVSZWYgYXJpdHlGaXh1cChWTSogdm0pCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYg
YXJpdHlGaXh1cEdlbmVyYXRvcihWTSogdm0pCiB7CiAgICAgSlNJbnRlcmZhY2VKSVQgaml0KHZt
KTsKIApAQCAtNTMzLDYgKzUzMyw4MyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgYXJpdHlGaXh1
cChWTSogdm0pCiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsICgiZml4dXAg
YXJpdHkiKSk7CiB9CiAKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBiYXNlbGluZUdldHRlclJldHVy
blRodW5rR2VuZXJhdG9yKFZNKiB2bSkKK3sKKyAgICBKU0ludGVyZmFjZUpJVCBqaXQodm0pOwor
ICAgIAorI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgaml0Lm1vdmUoR1BSSW5mbzo6cmV0dXJuVmFs
dWVHUFIsIEdQUkluZm86OnJlZ1QwKTsKKyNlbHNlCisgICAgaml0LnNldHVwUmVzdWx0cyhHUFJJ
bmZvOjpyZWdUMCwgR1BSSW5mbzo6cmVnVDEpOworI2VuZGlmCisgICAgCisgICAgdW5zaWduZWQg
bnVtYmVyT2ZQYXJhbWV0ZXJzID0gMDsKKyAgICBudW1iZXJPZlBhcmFtZXRlcnMrKzsgLy8gVGhl
ICd0aGlzJyBhcmd1bWVudC4KKyAgICBudW1iZXJPZlBhcmFtZXRlcnMrKzsgLy8gVGhlIHRydWUg
cmV0dXJuIFBDLgorICAgIAorICAgIHVuc2lnbmVkIG51bWJlck9mUmVnc0ZvckNhbGwgPQorICAg
ICAgICBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplICsgbnVtYmVyT2ZQYXJhbWV0ZXJzOwor
ICAgIAorICAgIHVuc2lnbmVkIG51bWJlck9mQnl0ZXNGb3JDYWxsID0KKyAgICAgICAgbnVtYmVy
T2ZSZWdzRm9yQ2FsbCAqIHNpemVvZihSZWdpc3RlcikgLSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQ
Qyk7CisgICAgCisgICAgdW5zaWduZWQgYWxpZ25lZE51bWJlck9mQnl0ZXNGb3JDYWxsID0KKyAg
ICAgICAgV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgbnVt
YmVyT2ZCeXRlc0ZvckNhbGwpOworICAgICAgICAgICAgCisgICAgLy8gVGhlIHJlYWwgcmV0dXJu
IGFkZHJlc3MgaXMgc3RvcmVkIGFib3ZlIHRoZSBhcmd1bWVudHMuIFdlIHBhc3NlZCBvbmUgYXJn
dW1lbnQsIHdoaWNoIGlzCisgICAgLy8gJ3RoaXMnLiBTbyBhcmd1bWVudCBhdCBpbmRleCAxIGlz
IHRoZSByZXR1cm4gYWRkcmVzcy4KKyAgICBqaXQubG9hZFB0cigKKyAgICAgICAgQXNzZW1ibHlI
ZWxwZXJzOjpBZGRyZXNzKAorICAgICAgICAgICAgQXNzZW1ibHlIZWxwZXJzOjpzdGFja1BvaW50
ZXJSZWdpc3RlciwKKyAgICAgICAgICAgICh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxKS5v
ZmZzZXQoKSAtIEpTU3RhY2s6OkNhbGxlckZyYW1lQW5kUENTaXplKSAqIHNpemVvZihSZWdpc3Rl
cikpLAorICAgICAgICBHUFJJbmZvOjpyZWdUMik7CisgICAgCisgICAgaml0LmFkZFB0cigKKyAg
ICAgICAgQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoYWxpZ25lZE51bWJlck9mQnl0ZXNG
b3JDYWxsKSwKKyAgICAgICAgQXNzZW1ibHlIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7
CisgICAgCisgICAgaml0Lmp1bXAoR1BSSW5mbzo6cmVnVDIpOworCisgICAgTGlua0J1ZmZlciBw
YXRjaEJ1ZmZlcigqdm0sICZqaXQsIEdMT0JBTF9USFVOS19JRCk7CisgICAgcmV0dXJuIEZJTkFM
SVpFX0NPREUocGF0Y2hCdWZmZXIsICgiYmFzZWxpbmUgZ2V0dGVyIHJldHVybiB0aHVuayIpKTsK
K30KKworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGJhc2VsaW5lU2V0dGVyUmV0dXJuVGh1bmtHZW5l
cmF0b3IoVk0qIHZtKQoreworICAgIEpTSW50ZXJmYWNlSklUIGppdCh2bSk7CisgICAgCisgICAg
dW5zaWduZWQgbnVtYmVyT2ZQYXJhbWV0ZXJzID0gMDsKKyAgICBudW1iZXJPZlBhcmFtZXRlcnMr
KzsgLy8gVGhlICd0aGlzJyBhcmd1bWVudC4KKyAgICBudW1iZXJPZlBhcmFtZXRlcnMrKzsgLy8g
VGhlIHZhbHVlIHRvIHNldC4KKyAgICBudW1iZXJPZlBhcmFtZXRlcnMrKzsgLy8gVGhlIHRydWUg
cmV0dXJuIFBDLgorICAgIAorICAgIHVuc2lnbmVkIG51bWJlck9mUmVnc0ZvckNhbGwgPQorICAg
ICAgICBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplICsgbnVtYmVyT2ZQYXJhbWV0ZXJzOwor
ICAgIAorICAgIHVuc2lnbmVkIG51bWJlck9mQnl0ZXNGb3JDYWxsID0KKyAgICAgICAgbnVtYmVy
T2ZSZWdzRm9yQ2FsbCAqIHNpemVvZihSZWdpc3RlcikgLSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQ
Qyk7CisgICAgCisgICAgdW5zaWduZWQgYWxpZ25lZE51bWJlck9mQnl0ZXNGb3JDYWxsID0KKyAg
ICAgICAgV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgbnVt
YmVyT2ZCeXRlc0ZvckNhbGwpOworICAgICAgICAgICAgCisgICAgLy8gVGhlIHJlYWwgcmV0dXJu
IGFkZHJlc3MgaXMgc3RvcmVkIGFib3ZlIHRoZSBhcmd1bWVudHMuIFdlIHBhc3NlZCB0d28gYXJn
dW1lbnRzLCBzbworICAgIC8vIHRoZSBhcmd1bWVudCBhdCBpbmRleCAyIGlzIHRoZSByZXR1cm4g
YWRkcmVzcy4KKyAgICBqaXQubG9hZFB0cigKKyAgICAgICAgQXNzZW1ibHlIZWxwZXJzOjpBZGRy
ZXNzKAorICAgICAgICAgICAgQXNzZW1ibHlIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3RlciwK
KyAgICAgICAgICAgICh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgyKS5vZmZzZXQoKSAtIEpT
U3RhY2s6OkNhbGxlckZyYW1lQW5kUENTaXplKSAqIHNpemVvZihSZWdpc3RlcikpLAorICAgICAg
ICBHUFJJbmZvOjpyZWdUMik7CisgICAgCisgICAgaml0LmFkZFB0cigKKyAgICAgICAgQXNzZW1i
bHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoYWxpZ25lZE51bWJlck9mQnl0ZXNGb3JDYWxsKSwKKyAg
ICAgICAgQXNzZW1ibHlIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgCisgICAg
aml0Lmp1bXAoR1BSSW5mbzo6cmVnVDIpOworCisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigq
dm0sICZqaXQsIEdMT0JBTF9USFVOS19JRCk7CisgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0
Y2hCdWZmZXIsICgiYmFzZWxpbmUgc2V0dGVyIHJldHVybiB0aHVuayIpKTsKK30KKwogc3RhdGlj
IHZvaWQgc3RyaW5nQ2hhckxvYWQoU3BlY2lhbGl6ZWRUaHVua0pJVCYgaml0LCBWTSogdm0pCiB7
CiAgICAgLy8gbG9hZCBzdHJpbmcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1
bmtHZW5lcmF0b3JzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9U
aHVua0dlbmVyYXRvcnMuaAkocmV2aXNpb24gMTY5MDE0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTEzLDcgKzExMywx
MCBAQCBpbmxpbmUgVGh1bmtHZW5lcmF0b3IgdmlydHVhbFRodW5rR2VuZXJhCiBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWYgbmF0aXZlQ2FsbEdlbmVyYXRvcihWTSopOwogTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmIG5hdGl2ZUNvbnN0cnVjdEdlbmVyYXRvcihWTSopOwogTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
IG5hdGl2ZVRhaWxDYWxsR2VuZXJhdG9yKFZNKik7Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgYXJp
dHlGaXh1cChWTSopOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGFyaXR5Rml4dXBHZW5lcmF0b3Io
Vk0qKTsKKworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGJhc2VsaW5lR2V0dGVyUmV0dXJuVGh1bmtH
ZW5lcmF0b3IoVk0qIHZtKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBiYXNlbGluZVNldHRlclJl
dHVyblRodW5rR2VuZXJhdG9yKFZNKiB2bSk7CiAKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjaGFy
Q29kZUF0VGh1bmtHZW5lcmF0b3IoVk0qKTsKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjaGFyQXRU
aHVua0dlbmVyYXRvcihWTSopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Q29tbW9uU2xvd1BhdGhzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCShyZXZpc2lvbiAxNjkwMTQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNzAsNyArMTcwLDcgQEAgc3RhdGljIENvbW1vblNsb3dQYXRoczo6QXJpdHlDaGVja0Rh
dGEqIAogICAgIHJlc3VsdC0+cGFkZGVkU3RhY2tTcGFjZSA9IHNsb3RzVG9BZGQ7CiAjaWYgRU5B
QkxFKEpJVCkKICAgICBpZiAodm0uY2FuVXNlSklUKCkpIHsKLSAgICAgICAgcmVzdWx0LT50aHVu
a1RvQ2FsbCA9IHZtLmdldENUSVN0dWIoYXJpdHlGaXh1cCkuY29kZSgpLmV4ZWN1dGFibGVBZGRy
ZXNzKCk7CisgICAgICAgIHJlc3VsdC0+dGh1bmtUb0NhbGwgPSB2bS5nZXRDVElTdHViKGFyaXR5
Rml4dXBHZW5lcmF0b3IpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpOwogICAgICAgICByZXN1
bHQtPnJldHVyblBDID0gdm0uYXJpdHlDaGVja0ZhaWxSZXR1cm5UaHVua3MtPnJldHVyblBDRm9y
KHZtLCBzbG90c1RvQWRkICogc3RhY2tBbGlnbm1lbnRSZWdpc3RlcnMoKSkuZXhlY3V0YWJsZUFk
ZHJlc3MoKTsKICAgICB9IGVsc2UKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3Rlc3RzL3N0cmVzcy9leGl0LWZyb20tZ2V0dGVyLmpzCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvZXhpdC1mcm9tLWdldHRlci5qcwkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvZXhpdC1mcm9tLWdldHRl
ci5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI0IEBACisoZnVuY3Rpb24oKSB7CisgICAg
dmFyIG8gPSB7X2Y6NDJ9OworICAgIG8uX19kZWZpbmVHZXR0ZXJfXygiZiIsIGZ1bmN0aW9uKCkg
eyByZXR1cm4gdGhpcy5fZiAqIDEwMDsgfSk7CisgICAgdmFyIHJlc3VsdCA9IDA7CisgICAgdmFy
IG4gPSA1MDAwMDsKKyAgICBmdW5jdGlvbiBmb28obykgeworICAgICAgICByZXR1cm4gby5mICsg
MTE7CisgICAgfQorICAgIG5vSW5saW5lKGZvbyk7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBu
OyArK2kpIHsKKyAgICAgICAgcmVzdWx0ICs9IGZvbyhvKTsKKyAgICB9CisgICAgaWYgKHJlc3Vs
dCAhPSBuICogKDQyICogMTAwICsgMTEpKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1
bHQ6ICIgKyByZXN1bHQ7CisgICAgcHJpbnQoIkhlcmUiKTsKKyAgICBvLl9mID0gMTAwMDAwMDAw
MDsKKyAgICByZXN1bHQgPSAwOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgKytpKSB7Cisg
ICAgICAgIHJlc3VsdCArPSBmb28obyk7CisgICAgfQorICAgIGlmIChyZXN1bHQgIT0gbiAqICgx
MDAwMDAwMDAwICogMTAwICsgMTEpKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQg
KDIpOiAiICsgcmVzdWx0OworfSkoKTsKKwpJbmRleDogU291cmNlL1dURi9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2OTEwMCkKKysrIFNv
dXJjZS9XVEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTQt
MDUtMTkgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBbZnRsb3B0
XSBERkcgYnl0ZWNvZGUgcGFyc2VyIHNob3VsZCB0dXJuIEdldEJ5SWQgd2l0aCBub3RoaW5nIGJ1
dCBhIEdldHRlciBzdHViIGFzIHN0dWZmK2hhbmRsZUNhbGwsIGFuZCBoYW5kbGVDYWxsIHNob3Vs
ZCBiZSBhbGxvd2VkIHRvIGlubGluZSBpZiBpdCB3YW50cyB0bworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMzMTA1CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB3dGYvQmFnLmg6CisgICAgICAgIChXVEY6
OkJhZzo6aXRlcmF0b3I6Om9wZXJhdG9yIT0pOgorCiAyMDE0LTA1LTA3ICBGaWxpcCBQaXpsbyAg
PGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgVU5SRUFDSEFCTEVfRk9SX1BMQVRGT1JNKCkg
aXMgbWVhbnQgdG8gYmUgYSByZWxlYXNlIGNyYXNoLgpJbmRleDogU291cmNlL1dURi93dGYvQmFn
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQmFnLmgJKHJldmlzaW9uIDE2OTAxNCkK
KysrIFNvdXJjZS9XVEYvd3RmL0JhZy5oCSh3b3JraW5nIGNvcHkpCkBAIC04Myw2ICs4MywxMSBA
QCBwdWJsaWM6CiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBtX25vZGUgPT0gb3RoZXIu
bV9ub2RlOwogICAgICAgICB9CisgICAgICAgIAorICAgICAgICBib29sIG9wZXJhdG9yIT0oY29u
c3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
ISgqdGhpcyA9PSBvdGhlcik7CisgICAgICAgIH0KICAgICBwcml2YXRlOgogICAgICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBVPiBmcmllbmQgY2xhc3MgV1RGOjpCYWc7CiAgICAgICAgIE5vZGUqIG1f
bm9kZTsKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2OTEwMCkKKysrIExheW91dFRlc3RzL0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDE0LTA1LTE5ICBGaWxpcCBQaXps
byAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzMxMDUKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGpzL3JlZ3Jlc3MvZ2V0dGVyLW5vLWFjdGl2YXRp
b24tZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL2dldHRlci1uby1h
Y3RpdmF0aW9uLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3Rz
L2dldHRlci1uby1hY3RpdmF0aW9uLmpzOiBBZGRlZC4KKwogMjAxNC0wNS0wOCAgRmlsaXAgUGl6
bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIGpzU3Vic3RyaW5nKCkgc2hvdWxkIGJl
IGxhenkKSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZ2V0dGVyLW5vLWFjdGl2YXRpb24t
ZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZ2V0dGVy
LW5vLWFjdGl2YXRpb24tZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMv
anMvcmVncmVzcy9nZXR0ZXItbm8tYWN0aXZhdGlvbi1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxMCBAQAorSlNSZWdyZXNzL2dldHRlci1uby1hY3RpdmF0aW9uCisKK09u
IHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxv
d2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIG5vIGV4Y2VwdGlvbiB0aHJvd24KK1BB
U1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBM
YXlvdXRUZXN0cy9qcy9yZWdyZXNzL2dldHRlci1uby1hY3RpdmF0aW9uLmh0bWwKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9nZXR0ZXItbm8tYWN0aXZhdGlvbi5odG1sCShy
ZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9nZXR0ZXItbm8tYWN0aXZhdGlv
bi5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIgQEAKKzwhRE9DVFlQRSBIVE1MIFBV
QkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNy
Yz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxi
b2R5PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXByZS5qcyI+PC9zY3Jp
cHQ+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL2dldHRlci1uby1hY3RpdmF0aW9uLmpzIj48
L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVncmVzcy1wb3N0LmpzIj48
L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48
L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mv
c2NyaXB0LXRlc3RzL2dldHRlci1uby1hY3RpdmF0aW9uLmpzCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2dldHRlci1uby1hY3RpdmF0aW9uLmpzCShy
ZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvZ2V0dGVy
LW5vLWFjdGl2YXRpb24uanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMyBAQAorKGZ1bmN0
aW9uKCkgeworICAgIHZhciBvID0ge19mOjQyfTsKKyAgICBvLl9fZGVmaW5lR2V0dGVyX18oImYi
LCBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXMuX2Y7IH0pOworICAgIChmdW5jdGlvbigpIHsKKyAg
ICAgICAgdmFyIHJlc3VsdCA9IDA7CisgICAgICAgIHZhciBuID0gMjAwMDAwMDsKKyAgICAgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCBuOyArK2kpCisgICAgICAgICAgICByZXN1bHQgKz0gby5mOwor
ICAgICAgICBpZiAocmVzdWx0ICE9IG4gKiA0MikKKyAgICAgICAgICAgIHRocm93ICJFcnJvcjog
YmFkIHJlc3VsdDogIiArIHJlc3VsdDsKKyAgICB9KSgpOworfSkoKTsKKwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>231776</attachid>
            <date>2014-05-20 10:46:49 -0700</date>
            <delta_ts>2014-05-20 12:02:40 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>99358</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTY5MTE5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2MiBA
QAorMjAxNC0wNS0yMCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IFtmdGxvcHRdIERGRyBieXRlY29kZSBwYXJzZXIgc2hvdWxkIHR1cm4gR2V0QnlJZCB3aXRoIG5v
dGhpbmcgYnV0IGEgR2V0dGVyIHN0dWIgYXMgc3R1ZmYraGFuZGxlQ2FsbCwgYW5kIGhhbmRsZUNh
bGwgc2hvdWxkIGJlIGFsbG93ZWQgdG8gaW5saW5lIGlmIGl0IHdhbnRzIHRvCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzMxMDUKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIC0gR2V0QnlJZFN0
YXR1cyBub3cga25vd3MgYWJvdXQgZ2V0dGVycyBhbmQgY2FuIHJlcG9ydCBpbnRlbGxpZ2VudCB0
aGluZ3MgYWJvdXQgdGhlbS4KKyAgICAgICAgICBBcyBpcyB1c3VhbGx5IHRoZSBjYXNlIHdpdGgg
aG93IHdlIGRvIHRoZXNlIHRoaW5ncywgR2V0QnlJZFN0YXR1cyBrbm93cyBtb3JlIGFib3V0Cisg
ICAgICAgICAgZ2V0dGVycyB0aGFuIHRoZSBERkcgY2FuIGFjdHVhbGx5IGhhbmRsZTogaXQnbGwg
cmVwb3J0IGRldGFpbHMgYWJvdXQgcG9seW1vcnBoaWMKKyAgICAgICAgICBnZXR0ZXIgY2FsbHMg
ZXZlbiB0aG91Z2ggdGhlIERGRyB3b24ndCBiZSBhYmxlIHRvIGhhbmRsZSB0aG9zZS4gVGhpcyBp
cyBmaW5lOyB0aGUgREZHCisgICAgICAgICAgd2lsbCBzZWUgdGhvc2Ugc3RhdHVzZXMgYW5kIGJh
aWwgdG8gYSBnZW5lcmljIHNsb3cgcGF0aC4KKyAgICAgICAgCisgICAgICAgIC0gVGhlIERGRzo6
Qnl0ZUNvZGVQYXJzZXIgbm93IGtub3dzIGhvdyB0byBzZXQgdXAgYW5kIGRvIGhhbmRsZUNhbGwo
KSBmb3IgYSBnZXR0ZXIgY2FsbC4KKyAgICAgICAgICBUaGlzIGNhbiwgYW5kIHVzdWFsbHkgZG9l
cywgcmVzdWx0IGluIGlubGluaW5nIG9mIGdldHRlcnMhCisgICAgICAgIAorICAgICAgICAtIENv
ZGVPcmlnaW4gYW5kIE9TUiBleGl0IGtub3cgYWJvdXQgaW5saW5lZCBnZXR0ZXIgY2FsbHMuIFdo
ZW4geW91IE9TUiBvdXQgb2YgYW4KKyAgICAgICAgICBpbmxpbmVkIGdldHRlciwgd2Ugc2V0IHRo
ZSByZXR1cm4gUEMgdG8gYSBnZXR0ZXIgcmV0dXJuIHRodW5rIHRoYXQgZml4ZXMgdXAgdGhlIHN0
YWNrLgorICAgICAgICAgIFdlIHVzZSB0aGUgdXN1YWwgb2Zmc2V0LXRydWUtcmV0dXJuLVBDIHRy
aWNrLCB3aGVyZSBPU1IgZXhpdCBwbGFjZXMgdGhlIHRydWUgcmV0dXJuIFBDCisgICAgICAgICAg
b2YgdGhlIGdldHRlcidzIGNhbGxlciBhcyBhIHBob255IGFyZ3VtZW50IHRoYXQgb25seSB0aGUg
dGh1bmsga25vd3MgaG93IHRvIGZpbmQuCisgICAgICAgIAorICAgICAgICAtIFJlbW92ZWQgYSBi
dW5jaCBvZiBkZWFkIG1vbm9tb3JwaGljIGNoYWluIHN1cHBvcnQgZnJvbSBTdHJ1Y3R1cmVTdHVi
SW5mby4KKyAgICAgICAgCisgICAgICAgIC0gQSBsYXJnZSBjaHVuayBvZiB0aGlzIGNoYW5nZSBp
cyBkcmFnZ2luZyBHZXRHZXR0ZXJTZXR0ZXJCeU9mZnNldCwgR2V0R2V0dGVyLCBhbmQKKyAgICAg
ICAgICBHZXRTZXR0ZXIgdGhyb3VnaCB0aGUgREZHIGFuZCBGVEwuIEdldEdldHRlclNldHRlckJ5
T2Zmc2V0IGlzIGxpa2UgR2V0QnlPZmZzZXQgZXhjZXB0CisgICAgICAgICAgdGhhdCB3ZSBrbm93
IHRoYXQgd2UncmUgcmV0dXJuaW5nIGEgR2V0dGVyU2V0dGVyIGNlbGwuIEdldEdldHRlciBhbmQg
R2V0U2V0dGVyIGV4dHJhY3QKKyAgICAgICAgICB0aGUgZ2V0dGVyLCBvciBzZXR0ZXIsIGZyb20g
dGhlIEdldHRlclNldHRlci4KKyAgICAgICAgCisgICAgICAgIFN0aWxsIHRlc3RpbmcgdGhlIHBl
cmZvcm1hbmNlIGltcGFjdC4KKworICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6Cisg
ICAgICAgIChKU0M6OkNvZGVCbG9jazo6cHJpbnRHZXRCeUlkQ2FjaGVTdGF0dXMpOgorICAgICAg
ICAoSlNDOjpDb2RlQmxvY2s6OmZpbmRTdHViSW5mbyk6CisgICAgICAgICogYnl0ZWNvZGUvQ29k
ZUJsb2NrLmg6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZU9yaWdpbi5jcHA6CisgICAgICAgIChX
VEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVPcmlnaW4uaDoKKyAg
ICAgICAgKEpTQzo6SW5saW5lQ2FsbEZyYW1lOjpzcGVjaWFsaXphdGlvbktpbmRGb3IpOgorICAg
ICAgICAqIGJ5dGVjb2RlL0dldEJ5SWRTdGF0dXMuY3BwOgorICAgICAgICAoSlNDOjpHZXRCeUlk
U3RhdHVzOjpjb21wdXRlRm9yKToKKyAgICAgICAgKEpTQzo6R2V0QnlJZFN0YXR1czo6Y29tcHV0
ZUZvclN0dWJJbmZvKToKKyAgICAgICAgKEpTQzo6R2V0QnlJZFN0YXR1czo6bWFrZXNDYWxscyk6
CisgICAgICAgIChKU0M6OkdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JDaGFpbik6IERlbGV0ZWQu
CisgICAgICAgICogYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5oOgorICAgICAgICAoSlNDOjpHZXRC
eUlkU3RhdHVzOjptYWtlc0NhbGxzKTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9HZXRC
eUlkVmFyaWFudC5jcHA6CisgICAgICAgIChKU0M6OkdldEJ5SWRWYXJpYW50Ojp+R2V0QnlJZFZh
cmlhbnQpOgorICAgICAgICAoSlNDOjpHZXRCeUlkVmFyaWFudDo6R2V0QnlJZFZhcmlhbnQpOgor
ICAgICAgICAoSlNDOjpHZXRCeUlkVmFyaWFudDo6b3BlcmF0b3I9KToKKyAgICAgICAgKEpTQzo6
R2V0QnlJZFZhcmlhbnQ6OmR1bXBJbkNvbnRleHQpOgorICAgICAgICAqIGJ5dGVjb2RlL0dldEJ5
SWRWYXJpYW50Lmg6CisgICAgICAgIChKU0M6OkdldEJ5SWRWYXJpYW50OjpHZXRCeUlkVmFyaWFu
dCk6CisgICAgICAgIChKU0M6OkdldEJ5SWRWYXJpYW50OjpjYWxsTGlua1N0YXR1cyk6CisgICAg
ICAgICogYnl0ZWNvZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5jcHA6CisgICAgICAgIChKU0M6
OkdldEJ5SWRBY2Nlc3M6OmZyb21TdHJ1Y3R1cmVTdHViSW5mbyk6CisgICAgICAgIChKU0M6OlBv
bHltb3JwaGljR2V0QnlJZExpc3Q6OmZyb20pOgorICAgICAgICAqIGJ5dGVjb2RlL1NwZWN1bGF0
ZWRUeXBlLmg6CisgICAgICAgICogYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwOgorICAg
ICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6ZGVyZWYpOgorICAgICAgICAoSlNDOjpTdHJ1
Y3R1cmVTdHViSW5mbzo6dmlzaXRXZWFrUmVmZXJlbmNlcyk6CisgICAgICAgICogYnl0ZWNvZGUv
U3RydWN0dXJlU3R1YkluZm8uaDoKKyAgICAgICAgKEpTQzo6aXNHZXRCeUlkQWNjZXNzKToKKyAg
ICAgICAgKEpTQzo6U3RydWN0dXJlU3R1YkluZm86OmluaXRHZXRCeUlkQ2hhaW4pOiBEZWxldGVk
LgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdEhlYXAuaDoKKyAgICAgICAgKiBkZmcvREZHQWJz
dHJhY3RJbnRlcnByZXRlcklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdElu
dGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHMpOgorICAgICAgICAq
IGRmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQ
YXJzZXI6OmFkZENhbGwpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpoYW5k
bGVDYWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5p
bmcpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRCeU9mZnNl
dCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5SWQpOgor
ICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpJbmxpbmVTdGFja0VudHJ5OjpJbmxp
bmVTdGFja0VudHJ5KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2Up
OgorICAgICAgICAqIGRmZy9ERkdDU0VQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Q1NF
UGhhc2U6OmdldEdldHRlclNldHRlckJ5T2Zmc2V0TG9hZEVsaW1pbmF0aW9uKToKKyAgICAgICAg
KEpTQzo6REZHOjpDU0VQaGFzZTo6Z2V0SW50ZXJuYWxGaWVsZExvYWRFbGltaW5hdGlvbik6Cisg
ICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OnBlcmZvcm1Ob2RlQ1NFKToKKyAgICAgICAgKEpT
Qzo6REZHOjpDU0VQaGFzZTo6Z2V0VHlwZWRBcnJheUJ5dGVPZmZzZXRMb2FkRWxpbWluYXRpb24p
OiBEZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdDbG9iYmVyaXplLmg6CisgICAgICAgIChKU0M6
OkRGRzo6Y2xvYmJlcml6ZSk6CisgICAgICAgICogZGZnL0RGR0ZpeHVwUGhhc2UuY3BwOgorICAg
ICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OmZpeHVwTm9kZSk6CisgICAgICAgICogZGZnL0RG
R0pJVENvbXBpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6bGlua0Z1
bmN0aW9uKToKKyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok5v
ZGU6Omhhc1N0b3JhZ2VBY2Nlc3NEYXRhKToKKyAgICAgICAgKiBkZmcvREZHTm9kZVR5cGUuaDoK
KyAgICAgICAgKiBkZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpyZWlmeUlubGluZWRDYWxsRnJhbWVzKToKKyAgICAgICAgKiBkZmcvREZHUHJlZGlj
dGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlByZWRpY3Rpb25Q
cm9wYWdhdGlvblBoYXNlOjpwcm9wYWdhdGUpOgorICAgICAgICAqIGRmZy9ERkdTYWZlVG9FeGVj
dXRlLmg6CisgICAgICAgIChKU0M6OkRGRzo6c2FmZVRvRXhlY3V0ZSk6CisgICAgICAgICogZGZn
L0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAq
IGZ0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmNwcDoKKyAgICAgICAgKiBmdGwvRlRMQWJz
dHJhY3RIZWFwUmVwb3NpdG9yeS5oOgorICAgICAgICAqIGZ0bC9GVExDYXBhYmlsaXRpZXMuY3Bw
OgorICAgICAgICAoSlNDOjpGVEw6OmNhbkNvbXBpbGUpOgorICAgICAgICAqIGZ0bC9GVExMaW5r
LmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpsaW5rKToKKyAgICAgICAgKiBmdGwvRlRMTG93ZXJE
RkdUb0xMVk0uY3BwOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxl
Tm9kZSk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVHZXRHZXR0
ZXIpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlR2V0U2V0dGVy
KToKKyAgICAgICAgKiBqaXQvQWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUuaDoKKyAgICAgICAg
KiBqaXQvSklULmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjphc3NlcnRTdGFja1BvaW50ZXJPZmZz
ZXQpOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlKToKKyAgICAgICAgKiBqaXQv
SklULmg6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcDoKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX2dldF9ieV9pZCk6CisgICAgICAgICogaml0L1RodW5rR2VuZXJhdG9y
cy5jcHA6CisgICAgICAgIChKU0M6OmFyaXR5Rml4dXBHZW5lcmF0b3IpOgorICAgICAgICAoSlND
OjpiYXNlbGluZUdldHRlclJldHVyblRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6YmFz
ZWxpbmVTZXR0ZXJSZXR1cm5UaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OmFyaXR5Rml4
dXApOiBEZWxldGVkLgorICAgICAgICAqIGppdC9UaHVua0dlbmVyYXRvcnMuaDoKKyAgICAgICAg
KiBydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHA6CisgICAgICAgIChKU0M6OnNldHVwQXJpdHlD
aGVja0RhdGEpOgorICAgICAgICAqIHRlc3RzL3N0cmVzcy9leGl0LWZyb20tZ2V0dGVyLmpzOiBB
ZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9zdHJlc3MvcG9seS1jaGFpbi1nZXR0ZXIuanM6IEFkZGVk
LgorICAgICAgICAoQ29ucyk6CisgICAgICAgIChmb28pOgorICAgICAgICAodGVzdCk6CisgICAg
ICAgICogdGVzdHMvc3RyZXNzL3BvbHktY2hhaW4tdGhlbi1nZXR0ZXIuanM6IEFkZGVkLgorICAg
ICAgICAoQ29uczEpOgorICAgICAgICAoQ29uczIpOgorICAgICAgICAoZm9vKToKKyAgICAgICAg
KHRlc3QpOgorICAgICAgICAqIHRlc3RzL3N0cmVzcy9wb2x5LWdldHRlci1jb21iby5qczogQWRk
ZWQuCisgICAgICAgIChDb25zMSk6CisgICAgICAgIChDb25zMik6CisgICAgICAgIChmb28pOgor
ICAgICAgICAodGVzdCk6CisgICAgICAgICgudGVzdCk6CisgICAgICAgICogdGVzdHMvc3RyZXNz
L3BvbHktZ2V0dGVyLXRoZW4tY2hhaW4uanM6IEFkZGVkLgorICAgICAgICAoQ29uczEpOgorICAg
ICAgICAoQ29uczIpOgorICAgICAgICAoZm9vKToKKyAgICAgICAgKHRlc3QpOgorICAgICAgICAq
IHRlc3RzL3N0cmVzcy9wb2x5LWdldHRlci10aGVuLXNlbGYuanM6IEFkZGVkLgorICAgICAgICAo
Zm9vKToKKyAgICAgICAgKHRlc3QpOgorICAgICAgICAoLnRlc3QpOgorICAgICAgICAqIHRlc3Rz
L3N0cmVzcy9wb2x5LXNlbGYtZ2V0dGVyLmpzOiBBZGRlZC4KKyAgICAgICAgKGZvbyk6CisgICAg
ICAgICh0ZXN0KToKKyAgICAgICAgKGdldHRlcik6CisgICAgICAgICogdGVzdHMvc3RyZXNzL3Bv
bHktc2VsZi10aGVuLWdldHRlci5qczogQWRkZWQuCisgICAgICAgIChmb28pOgorICAgICAgICAo
dGVzdCk6CisgICAgICAgICogdGVzdHMvc3RyZXNzL3dlaXJkLWdldHRlci1jb3VudGVyLmpzOiBB
ZGRlZC4KKyAgICAgICAgKGZvbyk6CisgICAgICAgICh0ZXN0KToKKwogMjAxNC0wNS0xNyAgRmls
aXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIFtmdGxvcHRdIEZhY3RvciBv
dXQgaG93IENhbGxMaW5rU3RhdHVzIHVzZXMgZXhpdCBzaXRlIGRhdGEKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAxNjkwMTQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzUyLDExICszNTIsNiBAQCB2b2lkIENvZGVCbG9jazo6cHJpbnRHZXRCeUlk
Q2FjaGVTdGF0dXMoCiAgICAgICAgICAgICAgICAgb3V0LnByaW50Zigic2VsZiIpOwogICAgICAg
ICAgICAgICAgIGJhc2VTdHJ1Y3R1cmUgPSBzdHViSW5mby51LmdldEJ5SWRTZWxmLmJhc2VPYmpl
Y3RTdHJ1Y3R1cmUuZ2V0KCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBj
YXNlIGFjY2Vzc19nZXRfYnlfaWRfY2hhaW46Ci0gICAgICAgICAgICAgICAgb3V0LnByaW50Zigi
Y2hhaW4iKTsKLSAgICAgICAgICAgICAgICBiYXNlU3RydWN0dXJlID0gc3R1YkluZm8udS5nZXRC
eUlkQ2hhaW4uYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKTsKLSAgICAgICAgICAgICAgICBjaGFp
biA9IHN0dWJJbmZvLnUuZ2V0QnlJZENoYWluLmNoYWluLmdldCgpOwotICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX2xpc3Q6CiAgICAgICAg
ICAgICAgICAgb3V0LnByaW50ZigibGlzdCIpOwogICAgICAgICAgICAgICAgIGxpc3QgPSBzdHVi
SW5mby51LmdldEJ5SWRMaXN0Lmxpc3Q7CkBAIC0yMzQ0LDYgKzIzMzksMTUgQEAgU3RydWN0dXJl
U3R1YkluZm8qIENvZGVCbG9jazo6YWRkU3R1YkluZgogICAgIHJldHVybiBtX3N0dWJJbmZvcy5h
ZGQoKTsKIH0KIAorU3RydWN0dXJlU3R1YkluZm8qIENvZGVCbG9jazo6ZmluZFN0dWJJbmZvKENv
ZGVPcmlnaW4gY29kZU9yaWdpbikKK3sKKyAgICBmb3IgKFN0cnVjdHVyZVN0dWJJbmZvKiBzdHVi
SW5mbyA6IG1fc3R1YkluZm9zKSB7CisgICAgICAgIGlmIChzdHViSW5mby0+Y29kZU9yaWdpbiA9
PSBjb2RlT3JpZ2luKQorICAgICAgICAgICAgcmV0dXJuIHN0dWJJbmZvOworICAgIH0KKyAgICBy
ZXR1cm4gbnVsbHB0cjsKK30KKwogQ2FsbExpbmtJbmZvKiBDb2RlQmxvY2s6OmFkZENhbGxMaW5r
SW5mbygpCiB7CiAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDE2
OTAxNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29y
a2luZyBjb3B5KQpAQCAtMjAxLDYgKzIwMSwxMCBAQCBwdWJsaWM6CiAgICAgU3RydWN0dXJlU3R1
YkluZm8qIGFkZFN0dWJJbmZvKCk7CiAgICAgQmFnPFN0cnVjdHVyZVN0dWJJbmZvPjo6aXRlcmF0
b3Igc3R1YkluZm9CZWdpbigpIHsgcmV0dXJuIG1fc3R1YkluZm9zLmJlZ2luKCk7IH0KICAgICBC
YWc8U3RydWN0dXJlU3R1YkluZm8+OjppdGVyYXRvciBzdHViSW5mb0VuZCgpIHsgcmV0dXJuIG1f
c3R1YkluZm9zLmVuZCgpOyB9CisgICAgCisgICAgLy8gTyhuKSBvcGVyYXRpb24uIFVzZSBnZXRT
dHViSW5mb01hcCgpIHVubGVzcyB5b3UgcmVhbGx5IG9ubHkgaW50ZW5kIHRvIGdldCBvbmUKKyAg
ICAvLyBzdHViIGluZm8uCisgICAgU3RydWN0dXJlU3R1YkluZm8qIGZpbmRTdHViSW5mbyhDb2Rl
T3JpZ2luKTsKIAogICAgIHZvaWQgcmVzZXRTdHViKFN0cnVjdHVyZVN0dWJJbmZvJik7CiAgICAg
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uY3Bw
CShyZXZpc2lvbiAxNjkwMTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZU9yaWdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwNiw2ICsyMDYsMTIgQEAgdm9pZCBwcmlu
dEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEpTQwogICAgIGNhc2UgSlNDOjpJbmxpbmVDYWxs
RnJhbWU6OkNvbnN0cnVjdDoKICAgICAgICAgb3V0LnByaW50KCJDb25zdHJ1Y3QiKTsKICAgICAg
ICAgcmV0dXJuOworICAgIGNhc2UgSlNDOjpJbmxpbmVDYWxsRnJhbWU6OkdldHRlckNhbGw6Cisg
ICAgICAgIG91dC5wcmludCgiR2V0dGVyQ2FsbCIpOworICAgICAgICByZXR1cm47CisgICAgY2Fz
ZSBKU0M6OklubGluZUNhbGxGcmFtZTo6U2V0dGVyQ2FsbDoKKyAgICAgICAgb3V0LnByaW50KCJT
ZXR0ZXJDYWxsIik7CisgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlT3JpZ2luLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVPcmlnaW4uaAkocmV2aXNpb24gMTY5MDE0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NvZGVPcmlnaW4uaAkod29ya2luZyBjb3B5KQpAQCAtMTIxLDYgKzEyMSwxMSBA
QCBzdHJ1Y3QgSW5saW5lQ2FsbEZyYW1lIHsKICAgICBlbnVtIEtpbmQgewogICAgICAgICBDYWxs
LAogICAgICAgICBDb25zdHJ1Y3QsCisgICAgICAgIAorICAgICAgICAvLyBGb3IgdGhlc2UsIHRo
ZSBzdGFja09mZnNldCBpbmNvcnBvcmF0ZXMgdGhlIGFyZ3VtZW50IGNvdW50IHBsdXMgdGhlIHRy
dWUgcmV0dXJuIFBDCisgICAgICAgIC8vIHNsb3QuCisgICAgICAgIEdldHRlckNhbGwsCisgICAg
ICAgIFNldHRlckNhbGwKICAgICB9OwogICAgIAogICAgIHN0YXRpYyBLaW5kIGtpbmRGb3IoQ29k
ZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQpAQCAtMTM5LDYgKzE0NCw4IEBAIHN0cnVjdCBJbmxp
bmVDYWxsRnJhbWUgewogICAgIHsKICAgICAgICAgc3dpdGNoIChraW5kKSB7CiAgICAgICAgIGNh
c2UgQ2FsbDoKKyAgICAgICAgY2FzZSBHZXR0ZXJDYWxsOgorICAgICAgICBjYXNlIFNldHRlckNh
bGw6CiAgICAgICAgICAgICByZXR1cm4gQ29kZUZvckNhbGw7CiAgICAgICAgIGNhc2UgQ29uc3Ry
dWN0OgogICAgICAgICAgICAgcmV0dXJuIENvZGVGb3JDb25zdHJ1Y3Q7CkBAIC0xNTMsNyArMTYw
LDcgQEAgc3RydWN0IElubGluZUNhbGxGcmFtZSB7CiAgICAgQ29kZU9yaWdpbiBjYWxsZXI7CiAg
ICAgQml0VmVjdG9yIGNhcHR1cmVkVmFyczsgLy8gSW5kZXhlZCBieSB0aGUgbWFjaGluZSBjYWxs
IGZyYW1lJ3MgdmFyaWFibGUgbnVtYmVyaW5nLgogICAgIHNpZ25lZCBzdGFja09mZnNldCA6IDMw
OwotICAgIEtpbmQga2luZCA6IDE7CisgICAgS2luZCBraW5kIDogMjsKICAgICBib29sIGlzQ2xv
c3VyZUNhbGwgOiAxOyAvLyBJZiBmYWxzZSB0aGVuIHdlIGtub3cgdGhhdCBjYWxsZWUvc2NvcGUg
YXJlIGNvbnN0YW50cyBhbmQgdGhlIERGRyB3b24ndCB0cmVhdCB0aGVtIGFzIHZhcmlhYmxlcywg
aS5lLiB0aGV5IGhhdmUgdG8gYmUgcmVjb3ZlcmVkIG1hbnVhbGx5LgogICAgIFZpcnR1YWxSZWdp
c3RlciBhcmd1bWVudHNSZWdpc3RlcjsgLy8gVGhpcyBpcyBvbmx5IHNldCBpZiB0aGUgY29kZSB1
c2VzIGFyZ3VtZW50cy4gVGhlIHVubW9kaWZpZWQgYXJndW1lbnRzIHJlZ2lzdGVyIGZvbGxvd3Mg
dGhlIHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3RlcigpIGNvbnZlbnRpb24gKHNlZSBDb2RlQmxv
Y2suaCkuCiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJ
ZFN0YXR1cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0dldEJ5SWRTdGF0dXMuY3BwCShyZXZpc2lvbiAxNjkwMTQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYg
KzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJHZXRCeUlkU3RhdHVzLmgi
CiAKKyNpbmNsdWRlICJBY2Nlc3NvckNhbGxKSVRTdHViUm91dGluZS5oIgogI2luY2x1ZGUgIkNv
ZGVCbG9jay5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJKU1Njb3BlLmgi
CkBAIC04OSw1NyArOTAsNiBAQCBHZXRCeUlkU3RhdHVzIEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVG
cm9tCiAjZW5kaWYKIH0KIAotYm9vbCBHZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yQ2hhaW4oQ29k
ZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBTdHJpbmdJbXBsKiB1aWQsIFBhc3NSZWZQdHI8SW50ZW5k
ZWRTdHJ1Y3R1cmVDaGFpbj4gcGFzc2VkQ2hhaW4pCi17Ci0jaWYgRU5BQkxFKEpJVCkKLSAgICBS
ZWZQdHI8SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbj4gY2hhaW4gPSBwYXNzZWRDaGFpbjsKLSAgICAK
LSAgICAvLyBWYWxpZGF0ZSB0aGUgY2hhaW4uIElmIHRoZSBjaGFpbiBpcyBpbnZhbGlkLCB0aGVu
IGN1cnJlbnRseSB0aGUgYmVzdCB0aGluZwotICAgIC8vIHdlIGNhbiBkbyBpcyB0byBhc3N1bWUg
dGhhdCBUYWtlc1Nsb3cgaXMgdHJ1ZS4gSW4gdGhlIGZ1dHVyZSwgaXQgbWlnaHQgYmUKLSAgICAv
LyB3b3J0aCBleHBsb3JpbmcgcmVpZnlpbmcgdGhlIHN0cnVjdHVyZSBjaGFpbiBmcm9tIHRoZSBz
dHJ1Y3R1cmUgd2UndmUgZ290Ci0gICAgLy8gaW5zdGVhZCBvZiB1c2luZyB0aGUgb25lIGZyb20g
dGhlIGNhY2hlLCBzaW5jZSB0aGF0IHdpbGwgZG8gdGhlIHJpZ2h0IHRoaW5ncwotICAgIC8vIGlm
IHRoZSBzdHJ1Y3R1cmUgY2hhaW4gaGFzIGNoYW5nZWQuIEJ1dCB0aGF0IG1heSBiZSBoYXJkZXIs
IGJlY2F1c2Ugd2UgbWF5Ci0gICAgLy8gdGhlbiBlbmQgdXAgaGF2aW5nIGEgZGlmZmVyZW50IHR5
cGUgb2YgYWNjZXNzIGFsdG9nZXRoZXIuIEFuZCBpdCBjdXJyZW50bHkKLSAgICAvLyBkb2VzIG5v
dCBhcHBlYXIgdG8gYmUgd29ydGggaXQgdG8gZG8gc28gLS0gZWZmZWN0aXZlbHksIHRoZSBoZXVy
aXN0aWMgd2UKLSAgICAvLyBoYXZlIG5vdyBpcyB0aGF0IGlmIHRoZSBzdHJ1Y3R1cmUgY2hhaW4g
aGFzIGNoYW5nZWQgYmV0d2VlbiB3aGVuIGl0IHdhcwotICAgIC8vIGNhY2hlZCBvbiBpbiB0aGUg
YmFzZWxpbmUgSklUIGFuZCB3aGVuIHRoZSBERkcgdHJpZWQgdG8gaW5saW5lIHRoZSBhY2Nlc3Ms
Ci0gICAgLy8gdGhlbiB3ZSBmYWxsIGJhY2sgb24gYSBwb2x5bW9ycGhpYyBhY2Nlc3MuCi0gICAg
aWYgKCFjaGFpbi0+aXNTdGlsbFZhbGlkKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IGlmIChjaGFpbi0+aGVhZCgpLT50YWtlc1Nsb3dQYXRoSW5ERkdGb3JJbXB1cmVQcm9wZXJ0eSgp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgc2l6ZV90IGNoYWluU2l6ZSA9IGNoYWluLT5z
aXplKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjaGFpblNpemU7IGkrKykgewotICAg
ICAgICBpZiAoY2hhaW4tPmF0KGkpLT50YWtlc1Nsb3dQYXRoSW5ERkdGb3JJbXB1cmVQcm9wZXJ0
eSgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIEpTT2JqZWN0KiBj
dXJyZW50T2JqZWN0ID0gY2hhaW4tPnRlcm1pbmFsUHJvdG90eXBlKCk7Ci0gICAgU3RydWN0dXJl
KiBjdXJyZW50U3RydWN0dXJlID0gY2hhaW4tPmxhc3QoKTsKLSAgICAKLSAgICBBU1NFUlRfVU5V
U0VEKGN1cnJlbnRPYmplY3QsIGN1cnJlbnRPYmplY3QpOwotICAgIAotICAgIHVuc2lnbmVkIGF0
dHJpYnV0ZXNJZ25vcmVkOwotICAgIEpTQ2VsbCogc3BlY2lmaWNWYWx1ZTsKLSAgICAKLSAgICBQ
cm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBjdXJyZW50U3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHko
Ci0gICAgICAgICpwcm9maWxlZEJsb2NrLT52bSgpLCB1aWQsIGF0dHJpYnV0ZXNJZ25vcmVkLCBz
cGVjaWZpY1ZhbHVlKTsKLSAgICBpZiAoY3VycmVudFN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkp
Ci0gICAgICAgIHNwZWNpZmljVmFsdWUgPSAwOwotICAgIGlmICghaXNWYWxpZE9mZnNldChvZmZz
ZXQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgcmV0dXJuIGFwcGVuZFZhcmlh
bnQoR2V0QnlJZFZhcmlhbnQoU3RydWN0dXJlU2V0KGNoYWluLT5oZWFkKCkpLCBvZmZzZXQsIHNw
ZWNpZmljVmFsdWUsIGNoYWluKSk7Ci0jZWxzZSAvLyBFTkFCTEUoSklUKQotICAgIFVOVVNFRF9Q
QVJBTShwcm9maWxlZEJsb2NrKTsKLSAgICBVTlVTRURfUEFSQU0odWlkKTsKLSAgICBVTlVTRURf
UEFSQU0ocGFzc2VkQ2hhaW4pOwotICAgIFVOUkVBQ0hBQkxFX0ZPUl9QTEFURk9STSgpOwotICAg
IHJldHVybiBmYWxzZTsKLSNlbmRpZiAvLyBFTkFCTEUoSklUKQotfQotCiBHZXRCeUlkU3RhdHVz
IEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBTdHVi
SW5mb01hcCYgbWFwLCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBTdHJpbmdJbXBsKiB1aWQpCiB7
CiAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIocHJvZmlsZWRCbG9jay0+bV9sb2NrKTsK
QEAgLTE0OCwxMiArOTgsMTMgQEAgR2V0QnlJZFN0YXR1cyBHZXRCeUlkU3RhdHVzOjpjb21wdXRl
Rm9yKAogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgcmVzdWx0ID0gY29tcHV0ZUZvclN0dWJJ
bmZvKAotICAgICAgICBsb2NrZXIsIHByb2ZpbGVkQmxvY2ssIG1hcC5nZXQoQ29kZU9yaWdpbihi
eXRlY29kZUluZGV4KSksIHVpZCk7CisgICAgICAgIGxvY2tlciwgcHJvZmlsZWRCbG9jaywgbWFw
LmdldChDb2RlT3JpZ2luKGJ5dGVjb2RlSW5kZXgpKSwgdWlkLAorICAgICAgICBDYWxsTGlua1N0
YXR1czo6Y29tcHV0ZUV4aXRTaXRlRGF0YShsb2NrZXIsIHByb2ZpbGVkQmxvY2ssIGJ5dGVjb2Rl
SW5kZXgpKTsKICAgICAKICAgICBpZiAoIXJlc3VsdC50YWtlc1Nsb3dQYXRoKCkKICAgICAgICAg
JiYgKGhhc0V4aXRTaXRlKGxvY2tlciwgcHJvZmlsZWRCbG9jaywgYnl0ZWNvZGVJbmRleCkKICAg
ICAgICAgICAgIHx8IHByb2ZpbGVkQmxvY2stPmxpa2VseVRvVGFrZVNsb3dDYXNlKGJ5dGVjb2Rl
SW5kZXgpKSkKLSAgICAgICAgcmV0dXJuIEdldEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCwgdHJ1
ZSk7CisgICAgICAgIHJldHVybiBHZXRCeUlkU3RhdHVzKHJlc3VsdC5tYWtlc0NhbGxzKCkgPyBN
YWtlc0NhbGxzIDogVGFrZXNTbG93UGF0aCwgdHJ1ZSk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJB
TShtYXApOwogI2VuZGlmCkBAIC0xNjYsMjQgKzExNywyNCBAQCBHZXRCeUlkU3RhdHVzIEdldEJ5
SWRTdGF0dXM6OmNvbXB1dGVGb3IoCiAKICNpZiBFTkFCTEUoSklUKQogR2V0QnlJZFN0YXR1cyBH
ZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yU3R1YkluZm8oCi0gICAgY29uc3QgQ29uY3VycmVudEpJ
VExvY2tlciYsIENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgU3RydWN0dXJlU3R1YkluZm8qIHN0
dWJJbmZvLAotICAgIFN0cmluZ0ltcGwqIHVpZCkKKyAgICBjb25zdCBDb25jdXJyZW50SklUTG9j
a2VyJiBsb2NrZXIsIENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgU3RydWN0dXJlU3R1YkluZm8q
IHN0dWJJbmZvLAorICAgIFN0cmluZ0ltcGwqIHVpZCwgQ2FsbExpbmtTdGF0dXM6OkV4aXRTaXRl
RGF0YSBjYWxsRXhpdFNpdGVEYXRhKQogewogICAgIGlmICghc3R1YkluZm8gfHwgIXN0dWJJbmZv
LT5zZWVuKQogICAgICAgICByZXR1cm4gR2V0QnlJZFN0YXR1cyhOb0luZm9ybWF0aW9uKTsKICAg
ICAKLSAgICBpZiAoc3R1YkluZm8tPnJlc2V0QnlHQykKLSAgICAgICAgcmV0dXJuIEdldEJ5SWRT
dGF0dXMoVGFrZXNTbG93UGF0aCwgdHJ1ZSk7Ci0KICAgICBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0
KiBsaXN0ID0gMDsKKyAgICBTdGF0ZSB0YWtlc1Nsb3dQYXRoID0gVGFrZXNTbG93UGF0aDsKICAg
ICBpZiAoc3R1YkluZm8tPmFjY2Vzc1R5cGUgPT0gYWNjZXNzX2dldF9ieV9pZF9saXN0KSB7CiAg
ICAgICAgIGxpc3QgPSBzdHViSW5mby0+dS5nZXRCeUlkTGlzdC5saXN0OwotICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbGlzdC0+c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGlm
IChsaXN0LT5hdChpKS5kb2VzQ2FsbHMoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gR2V0QnlJ
ZFN0YXR1cyhNYWtlc0NhbGxzLCB0cnVlKTsKLSAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxpc3QtPnNpemUoKTsgKytpKQorICAgICAgICAgICAg
dGFrZXNTbG93UGF0aCA9IE1ha2VzQ2FsbHM7CiAgICAgfQogICAgIAorICAgIGlmIChzdHViSW5m
by0+cmVzZXRCeUdDKQorICAgICAgICByZXR1cm4gR2V0QnlJZFN0YXR1cyh0YWtlc1Nsb3dQYXRo
LCB0cnVlKTsKKyAgICAKICAgICAvLyBGaW5hbGx5IGZpZ3VyZSBvdXQgaWYgd2UgY2FuIGRlcml2
ZSBhbiBhY2Nlc3Mgc3RyYXRlZ3kuCiAgICAgR2V0QnlJZFN0YXR1cyByZXN1bHQ7CiAgICAgcmVz
dWx0Lm1fc3RhdGUgPSBTaW1wbGU7CkBAIC0yMTUsOCArMTY2LDYgQEAgR2V0QnlJZFN0YXR1cyBH
ZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yUwogICAgICAgICAKICAgICBjYXNlIGFjY2Vzc19nZXRf
YnlfaWRfbGlzdDogewogICAgICAgICBmb3IgKHVuc2lnbmVkIGxpc3RJbmRleCA9IDA7IGxpc3RJ
bmRleCA8IGxpc3QtPnNpemUoKTsgKytsaXN0SW5kZXgpIHsKLSAgICAgICAgICAgIEFTU0VSVCgh
bGlzdC0+YXQobGlzdEluZGV4KS5kb2VzQ2FsbHMoKSk7Ci0gICAgICAgICAgICAKICAgICAgICAg
ICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbGlzdC0+YXQobGlzdEluZGV4KS5zdHJ1Y3R1cmUo
KTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBhc3NlcnQg
dGhhdCB3ZSBuZXZlciBzZWUgYSBzdHJ1Y3R1cmUgdGhhdApAQCAtMjI2LDcwICsxNzUsMTEwIEBA
IEdldEJ5SWRTdGF0dXMgR2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclMKICAgICAgICAgICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzE4MTAKICAgICAgICAg
ICAgIAogICAgICAgICAgICAgaWYgKHN0cnVjdHVyZS0+dGFrZXNTbG93UGF0aEluREZHRm9ySW1w
dXJlUHJvcGVydHkoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gR2V0QnlJZFN0YXR1cyhUYWtl
c1Nsb3dQYXRoLCB0cnVlKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gR2V0QnlJZFN0YXR1cyh0
YWtlc1Nsb3dQYXRoLCB0cnVlKTsKICAgICAgICAgICAgIAorICAgICAgICAgICAgdW5zaWduZWQg
YXR0cmlidXRlc0lnbm9yZWQ7CisgICAgICAgICAgICBKU0NlbGwqIHNwZWNpZmljVmFsdWU7Cisg
ICAgICAgICAgICBQcm9wZXJ0eU9mZnNldCBteU9mZnNldDsKKyAgICAgICAgICAgIFJlZlB0cjxJ
bnRlbmRlZFN0cnVjdHVyZUNoYWluPiBjaGFpbjsKKwogICAgICAgICAgICAgaWYgKGxpc3QtPmF0
KGxpc3RJbmRleCkuY2hhaW4oKSkgewotICAgICAgICAgICAgICAgIFJlZlB0cjxJbnRlbmRlZFN0
cnVjdHVyZUNoYWluPiBjaGFpbiA9IGFkb3B0UmVmKG5ldyBJbnRlbmRlZFN0cnVjdHVyZUNoYWlu
KAorICAgICAgICAgICAgICAgIGNoYWluID0gYWRvcHRSZWYobmV3IEludGVuZGVkU3RydWN0dXJl
Q2hhaW4oCiAgICAgICAgICAgICAgICAgICAgIHByb2ZpbGVkQmxvY2ssIHN0cnVjdHVyZSwgbGlz
dC0+YXQobGlzdEluZGV4KS5jaGFpbigpLAogICAgICAgICAgICAgICAgICAgICBsaXN0LT5hdChs
aXN0SW5kZXgpLmNoYWluQ291bnQoKSkpOwotICAgICAgICAgICAgICAgIGlmICghcmVzdWx0LmNv
bXB1dGVGb3JDaGFpbihwcm9maWxlZEJsb2NrLCB1aWQsIGNoYWluKSkKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIEdldEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCwgdHJ1ZSk7Ci0gICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYg
KCFjaGFpbi0+aXNTdGlsbFZhbGlkKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBHZXRC
eUlkU3RhdHVzKHRha2VzU2xvd1BhdGgsIHRydWUpOworICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIGlmIChjaGFpbi0+aGVhZCgpLT50YWtlc1Nsb3dQYXRoSW5ERkdGb3JJbXB1cmVQ
cm9wZXJ0eSgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2V0QnlJZFN0YXR1cyh0YWtl
c1Nsb3dQYXRoLCB0cnVlKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBzaXpl
X3QgY2hhaW5TaXplID0gY2hhaW4tPnNpemUoKTsKKyAgICAgICAgICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGNoYWluU2l6ZTsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChj
aGFpbi0+YXQoaSktPnRha2VzU2xvd1BhdGhJbkRGR0ZvckltcHVyZVByb3BlcnR5KCkpCisgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2V0QnlJZFN0YXR1cyh0YWtlc1Nsb3dQYXRoLCB0
cnVlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgSlNPYmplY3QqIGN1cnJlbnRPYmplY3QgPSBjaGFpbi0+dGVybWluYWxQcm90b3R5cGUoKTsK
KyAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIGN1cnJlbnRTdHJ1Y3R1cmUgPSBjaGFpbi0+bGFz
dCgpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoY3Vy
cmVudE9iamVjdCwgY3VycmVudE9iamVjdCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgbXlPZmZzZXQgPSBjdXJyZW50U3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkoCisgICAg
ICAgICAgICAgICAgICAgICpwcm9maWxlZEJsb2NrLT52bSgpLCB1aWQsIGF0dHJpYnV0ZXNJZ25v
cmVkLCBzcGVjaWZpY1ZhbHVlKTsKKyAgICAgICAgICAgICAgICBpZiAoY3VycmVudFN0cnVjdHVy
ZS0+aXNEaWN0aW9uYXJ5KCkpCisgICAgICAgICAgICAgICAgICAgIHNwZWNpZmljVmFsdWUgPSAw
OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBteU9mZnNldCA9IHN0cnVj
dHVyZS0+Z2V0Q29uY3VycmVudGx5KAorICAgICAgICAgICAgICAgICAgICAqcHJvZmlsZWRCbG9j
ay0+dm0oKSwgdWlkLCBhdHRyaWJ1dGVzSWdub3JlZCwgc3BlY2lmaWNWYWx1ZSk7CisgICAgICAg
ICAgICAgICAgaWYgKHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpCisgICAgICAgICAgICAgICAg
ICAgIHNwZWNpZmljVmFsdWUgPSAwOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAg
ICAgICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzSWdub3JlZDsKLSAgICAgICAgICAgIEpTQ2VsbCog
c3BlY2lmaWNWYWx1ZTsKLSAgICAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG15T2Zmc2V0ID0gc3Ry
dWN0dXJlLT5nZXRDb25jdXJyZW50bHkoCi0gICAgICAgICAgICAgICAgKnByb2ZpbGVkQmxvY2st
PnZtKCksIHVpZCwgYXR0cmlidXRlc0lnbm9yZWQsIHNwZWNpZmljVmFsdWUpOwotICAgICAgICAg
ICAgaWYgKHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpCi0gICAgICAgICAgICAgICAgc3BlY2lm
aWNWYWx1ZSA9IDA7Ci0gICAgICAgICAgICAKICAgICAgICAgICAgIGlmICghaXNWYWxpZE9mZnNl
dChteU9mZnNldCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEdldEJ5SWRTdGF0dXMoVGFrZXNT
bG93UGF0aCwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIEdldEJ5SWRTdGF0dXModGFr
ZXNTbG93UGF0aCwgdHJ1ZSk7CiAKLSAgICAgICAgICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKLSAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgdmFyaWFudEluZGV4ID0gMDsgdmFyaWFudEluZGV4IDwg
cmVzdWx0Lm1fdmFyaWFudHMuc2l6ZSgpOyArK3ZhcmlhbnRJbmRleCkgewotICAgICAgICAgICAg
ICAgIEdldEJ5SWRWYXJpYW50JiB2YXJpYW50ID0gcmVzdWx0Lm1fdmFyaWFudHNbdmFyaWFudElu
ZGV4XTsKLSAgICAgICAgICAgICAgICBpZiAodmFyaWFudC5tX2NoYWluKQotICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmICghY2hhaW4gJiYgIWxpc3QtPmF0KGxp
c3RJbmRleCkuZG9lc0NhbGxzKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBGb3Igbm9uLWNoYWlu
LCBub24tZ2V0dGVyIGFjY2Vzc2VzLCB3ZSB0cnkgdG8gZG8gc29tZSBjb2FsZXNjaW5nLgorICAg
ICAgICAgICAgICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIHZhcmlhbnRJbmRleCA9IDA7IHZhcmlhbnRJbmRleCA8IHJlc3VsdC5tX3ZhcmlhbnRz
LnNpemUoKTsgKyt2YXJpYW50SW5kZXgpIHsKKyAgICAgICAgICAgICAgICAgICAgR2V0QnlJZFZh
cmlhbnQmIHZhcmlhbnQgPSByZXN1bHQubV92YXJpYW50c1t2YXJpYW50SW5kZXhdOworICAgICAg
ICAgICAgICAgICAgICBpZiAodmFyaWFudC5tX2NoYWluKQorICAgICAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKHZhcmlh
bnQubV9vZmZzZXQgIT0gbXlPZmZzZXQpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
Ci0gICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwotICAgICAgICAgICAgICAgIGlmICh2YXJp
YW50Lm1fc3RydWN0dXJlU2V0LmNvbnRhaW5zKHN0cnVjdHVyZSkpCi0gICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFudC5tX29mZnNldCAhPSBt
eU9mZnNldCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgIGlmICh2YXJpYW50Lm1fc3BlY2lmaWNWYWx1ZSAhPSBKU1Zh
bHVlKHNwZWNpZmljVmFsdWUpKQotICAgICAgICAgICAgICAgICAgICB2YXJpYW50Lm1fc3BlY2lm
aWNWYWx1ZSA9IEpTVmFsdWUoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhbnQuY2Fs
bExpbmtTdGF0dXMoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgIHZhcmlhbnQubV9zdHJ1Y3R1cmVTZXQuYWRkKHN0
cnVjdHVyZSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGZv
dW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhbnQubV9zdHJ1Y3R1cmVT
ZXQuY29udGFpbnMoc3RydWN0dXJlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFudC5tX3NwZWNp
ZmljVmFsdWUgIT0gSlNWYWx1ZShzcGVjaWZpY1ZhbHVlKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHZhcmlhbnQubV9zcGVjaWZpY1ZhbHVlID0gSlNWYWx1ZSgpOworICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgICAgICB2YXJpYW50Lm1fc3RydWN0dXJlU2V0LmFkZChzdHJ1Y3R1
cmUpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoZm91bmQpCisgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAo
Zm91bmQpCi0gICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBzdGQ6OnVuaXF1
ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IGNhbGxMaW5rU3RhdHVzOworICAgICAgICAgICAgc3dpdGNo
IChsaXN0LT5hdChsaXN0SW5kZXgpLnR5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBHZXRCeUlk
QWNjZXNzOjpTaW1wbGVJbmxpbmU6CisgICAgICAgICAgICBjYXNlIEdldEJ5SWRBY2Nlc3M6OlNp
bXBsZVN0dWI6IHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGNhc2UgR2V0QnlJZEFjY2Vzczo6R2V0dGVyOiB7CisgICAgICAgICAgICAgICAgQWNj
ZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUqIHN0dWIgPSBzdGF0aWNfY2FzdDxBY2Nlc3NvckNhbGxK
SVRTdHViUm91dGluZSo+KAorICAgICAgICAgICAgICAgICAgICBsaXN0LT5hdChsaXN0SW5kZXgp
LnN0dWJSb3V0aW5lKCkpOworICAgICAgICAgICAgICAgIGNhbGxMaW5rU3RhdHVzID0gc3RkOjpt
YWtlX3VuaXF1ZTxDYWxsTGlua1N0YXR1cz4oCisgICAgICAgICAgICAgICAgICAgIENhbGxMaW5r
U3RhdHVzOjpjb21wdXRlRm9yKGxvY2tlciwgKnN0dWItPm1fY2FsbExpbmtJbmZvLCBjYWxsRXhp
dFNpdGVEYXRhKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBjYXNlIEdldEJ5SWRBY2Nlc3M6OkN1c3RvbUdldHRlcjogeworICAgICAgICAgICAg
ICAgIC8vIEZJWE1FOiBJdCB3b3VsZCBiZSB0b3RhbGx5IHN3ZWV0IHRvIHN1cHBvcnQgdGhpcyBh
dCBzb21lIHBvaW50IGluIHRoZSBmdXR1cmUuCisgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMzA1MgorICAgICAgICAgICAgICAgIHJl
dHVybiBHZXRCeUlkU3RhdHVzKHRha2VzU2xvd1BhdGgsIHRydWUpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAo
IXJlc3VsdC5hcHBlbmRWYXJpYW50KEdldEJ5SWRWYXJpYW50KFN0cnVjdHVyZVNldChzdHJ1Y3R1
cmUpLCBteU9mZnNldCwgc3BlY2lmaWNWYWx1ZSkpKQotICAgICAgICAgICAgICAgIHJldHVybiBH
ZXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgsIHRydWUpOworICAgICAgICAgICAgR2V0QnlJZFZh
cmlhbnQgdmFyaWFudCgKKyAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVTZXQoc3RydWN0dXJlKSwg
bXlPZmZzZXQsIHNwZWNpZmljVmFsdWUsIGNoYWluLAorICAgICAgICAgICAgICAgIHN0ZDo6bW92
ZShjYWxsTGlua1N0YXR1cykpOworICAgICAgICAgICAgaWYgKCFyZXN1bHQuYXBwZW5kVmFyaWFu
dCh2YXJpYW50KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gR2V0QnlJZFN0YXR1cyh0YWtlc1Ns
b3dQYXRoLCB0cnVlKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKICAgICB9CiAgICAgICAgIAotICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9jaGFpbjogewot
ICAgICAgICBpZiAoIXN0dWJJbmZvLT51LmdldEJ5SWRDaGFpbi5pc0RpcmVjdCkKLSAgICAgICAg
ICAgIHJldHVybiBHZXRCeUlkU3RhdHVzKE1ha2VzQ2FsbHMsIHRydWUpOwotICAgICAgICBSZWZQ
dHI8SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbj4gY2hhaW4gPSBhZG9wdFJlZihuZXcgSW50ZW5kZWRT
dHJ1Y3R1cmVDaGFpbigKLSAgICAgICAgICAgIHByb2ZpbGVkQmxvY2ssCi0gICAgICAgICAgICBz
dHViSW5mby0+dS5nZXRCeUlkQ2hhaW4uYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKSwKLSAgICAg
ICAgICAgIHN0dWJJbmZvLT51LmdldEJ5SWRDaGFpbi5jaGFpbi5nZXQoKSwKLSAgICAgICAgICAg
IHN0dWJJbmZvLT51LmdldEJ5SWRDaGFpbi5jb3VudCkpOwotICAgICAgICBpZiAocmVzdWx0LmNv
bXB1dGVGb3JDaGFpbihwcm9maWxlZEJsb2NrLCB1aWQsIGNoYWluKSkKLSAgICAgICAgICAgIHJl
dHVybiByZXN1bHQ7Ci0gICAgICAgIHJldHVybiBHZXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgs
IHRydWUpOwotICAgIH0KLSAgICAgICAgCiAgICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIEdl
dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCwgdHJ1ZSk7CiAgICAgfQpAQCAtMzA1LDEwICsyOTQs
MTggQEAgR2V0QnlJZFN0YXR1cyBHZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKAogewogI2lmIEVO
QUJMRShERkdfSklUKQogICAgIGlmIChkZmdCbG9jaykgeworICAgICAgICBDYWxsTGlua1N0YXR1
czo6RXhpdFNpdGVEYXRhIGV4aXRTaXRlRGF0YTsKKyAgICAgICAgeworICAgICAgICAgICAgQ29u
Y3VycmVudEpJVExvY2tlciBsb2NrZXIocHJvZmlsZWRCbG9jay0+bV9sb2NrKTsKKyAgICAgICAg
ICAgIGV4aXRTaXRlRGF0YSA9IENhbGxMaW5rU3RhdHVzOjpjb21wdXRlRXhpdFNpdGVEYXRhKAor
ICAgICAgICAgICAgICAgIGxvY2tlciwgcHJvZmlsZWRCbG9jaywgY29kZU9yaWdpbi5ieXRlY29k
ZUluZGV4LCBFeGl0RnJvbUZUTCk7CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIEdldEJ5
SWRTdGF0dXMgcmVzdWx0OwogICAgICAgICB7CiAgICAgICAgICAgICBDb25jdXJyZW50SklUTG9j
a2VyIGxvY2tlcihkZmdCbG9jay0+bV9sb2NrKTsKLSAgICAgICAgICAgIHJlc3VsdCA9IGNvbXB1
dGVGb3JTdHViSW5mbyhsb2NrZXIsIGRmZ0Jsb2NrLCBkZmdNYXAuZ2V0KGNvZGVPcmlnaW4pLCB1
aWQpOworICAgICAgICAgICAgcmVzdWx0ID0gY29tcHV0ZUZvclN0dWJJbmZvKAorICAgICAgICAg
ICAgICAgIGxvY2tlciwgZGZnQmxvY2ssIGRmZ01hcC5nZXQoY29kZU9yaWdpbiksIHVpZCwgZXhp
dFNpdGVEYXRhKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgaWYgKHJlc3VsdC50YWtl
c1Nsb3dQYXRoKCkpCkBAIC0zNjEsNiArMzU4LDI0IEBAIEdldEJ5SWRTdGF0dXMgR2V0QnlJZFN0
YXR1czo6Y29tcHV0ZUZvcigKICAgICAgICAgU2ltcGxlLCBmYWxzZSwgR2V0QnlJZFZhcmlhbnQo
U3RydWN0dXJlU2V0KHN0cnVjdHVyZSksIG9mZnNldCwgc3BlY2lmaWNWYWx1ZSkpOwogfQogCiti
b29sIEdldEJ5SWRTdGF0dXM6Om1ha2VzQ2FsbHMoKSBjb25zdAoreworICAgIHN3aXRjaCAobV9z
dGF0ZSkgeworICAgIGNhc2UgTm9JbmZvcm1hdGlvbjoKKyAgICBjYXNlIFRha2VzU2xvd1BhdGg6
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBjYXNlIFNpbXBsZToKKyAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gbV92YXJpYW50cy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgIGlmICht
X3ZhcmlhbnRzW2ldLmNhbGxMaW5rU3RhdHVzKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGNhc2UgTWFrZXNDYWxs
czoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7Cit9CisKIHZvaWQgR2V0QnlJZFN0YXR1czo6ZHVtcChQcmludFN0cmVhbSYgb3V0
KSBjb25zdAogewogICAgIG91dC5wcmludCgiKCIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0dldEJ5SWRTdGF0dXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5oCShyZXZpc2lvbiAxNjkwMTQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaWZuZGVmIEdldEJ5SWRTdGF0dXNfaAogI2RlZmluZSBH
ZXRCeUlkU3RhdHVzX2gKIAorI2luY2x1ZGUgIkNhbGxMaW5rU3RhdHVzLmgiCiAjaW5jbHVkZSAi
Q29kZU9yaWdpbi5oIgogI2luY2x1ZGUgIkNvbmN1cnJlbnRKSVRMb2NrLmgiCiAjaW5jbHVkZSAi
RXhpdGluZ0pJVFR5cGUuaCIKQEAgLTgzLDcgKzg0LDcgQEAgcHVibGljOgogICAgIGNvbnN0IEdl
dEJ5SWRWYXJpYW50JiBvcGVyYXRvcltdKHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gYXQo
aW5kZXgpOyB9CiAKICAgICBib29sIHRha2VzU2xvd1BhdGgoKSBjb25zdCB7IHJldHVybiBtX3N0
YXRlID09IFRha2VzU2xvd1BhdGggfHwgbV9zdGF0ZSA9PSBNYWtlc0NhbGxzOyB9Ci0gICAgYm9v
bCBtYWtlc0NhbGxzKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZSA9PSBNYWtlc0NhbGxzOyB9Cisg
ICAgYm9vbCBtYWtlc0NhbGxzKCkgY29uc3Q7CiAgICAgCiAgICAgYm9vbCB3YXNTZWVuSW5KSVQo
KSBjb25zdCB7IHJldHVybiBtX3dhc1NlZW5JbkpJVDsgfQogICAgIApAQCAtOTQsOSArOTUsMTAg
QEAgcHJpdmF0ZToKICAgICBzdGF0aWMgYm9vbCBoYXNFeGl0U2l0ZShjb25zdCBDb25jdXJyZW50
SklUTG9ja2VyJiwgQ29kZUJsb2NrKiwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgRXhpdGluZ0pJ
VFR5cGUgPSBFeGl0RnJvbUFueXRoaW5nKTsKICNlbmRpZgogI2lmIEVOQUJMRShKSVQpCi0gICAg
c3RhdGljIEdldEJ5SWRTdGF0dXMgY29tcHV0ZUZvclN0dWJJbmZvKGNvbnN0IENvbmN1cnJlbnRK
SVRMb2NrZXImLCBDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyosIFN0cmluZ0ltcGwqIHVp
ZCk7CisgICAgc3RhdGljIEdldEJ5SWRTdGF0dXMgY29tcHV0ZUZvclN0dWJJbmZvKAorICAgICAg
ICBjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiwgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBT
dHJ1Y3R1cmVTdHViSW5mbyosCisgICAgICAgIFN0cmluZ0ltcGwqIHVpZCwgQ2FsbExpbmtTdGF0
dXM6OkV4aXRTaXRlRGF0YSk7CiAjZW5kaWYKLSAgICBib29sIGNvbXB1dGVGb3JDaGFpbihDb2Rl
QmxvY2sqLCBTdHJpbmdJbXBsKiB1aWQsIFBhc3NSZWZQdHI8SW50ZW5kZWRTdHJ1Y3R1cmVDaGFp
bj4pOwogICAgIHN0YXRpYyBHZXRCeUlkU3RhdHVzIGNvbXB1dGVGcm9tTExJbnQoQ29kZUJsb2Nr
KiwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgU3RyaW5nSW1wbCogdWlkKTsKICAgICAKICAgICBi
b29sIGFwcGVuZFZhcmlhbnQoY29uc3QgR2V0QnlJZFZhcmlhbnQmKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkVmFyaWFudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRWYXJpYW50LmNwcAkocmV2aXNp
b24gMTY5MDE0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRWYXJp
YW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTAgKzI2LDMxIEBACiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAjaW5jbHVkZSAiR2V0QnlJZFZhcmlhbnQuaCIKIAorI2luY2x1ZGUgIkNhbGxMaW5r
U3RhdHVzLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIAor
R2V0QnlJZFZhcmlhbnQ6On5HZXRCeUlkVmFyaWFudCgpIHsgfQorCitHZXRCeUlkVmFyaWFudDo6
R2V0QnlJZFZhcmlhbnQoY29uc3QgR2V0QnlJZFZhcmlhbnQmIG90aGVyKQoreworICAgICp0aGlz
ID0gb3RoZXI7Cit9CisKK0dldEJ5SWRWYXJpYW50JiBHZXRCeUlkVmFyaWFudDo6b3BlcmF0b3I9
KGNvbnN0IEdldEJ5SWRWYXJpYW50JiBvdGhlcikKK3sKKyAgICBtX3N0cnVjdHVyZVNldCA9IG90
aGVyLm1fc3RydWN0dXJlU2V0OworICAgIG1fY2hhaW4gPSBvdGhlci5tX2NoYWluOworICAgIG1f
c3BlY2lmaWNWYWx1ZSA9IG90aGVyLm1fc3BlY2lmaWNWYWx1ZTsKKyAgICBtX29mZnNldCA9IG90
aGVyLm1fb2Zmc2V0OworICAgIGlmIChvdGhlci5tX2NhbGxMaW5rU3RhdHVzKQorICAgICAgICBt
X2NhbGxMaW5rU3RhdHVzID0gc3RkOjptYWtlX3VuaXF1ZTxDYWxsTGlua1N0YXR1cz4oKm90aGVy
Lm1fY2FsbExpbmtTdGF0dXMpOworICAgIGVsc2UKKyAgICAgICAgbV9jYWxsTGlua1N0YXR1cyA9
IG51bGxwdHI7CisgICAgcmV0dXJuICp0aGlzOworfQorCiB2b2lkIEdldEJ5SWRWYXJpYW50Ojpk
dW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7CiAgICAgZHVtcEluQ29udGV4dChvdXQsIDAp
OwpAQCAtNDUsNyArNjYsMTAgQEAgdm9pZCBHZXRCeUlkVmFyaWFudDo6ZHVtcEluQ29udGV4dChQ
cmludAogICAgIG91dC5wcmludCgKICAgICAgICAgIjwiLCBpbkNvbnRleHQoc3RydWN0dXJlU2V0
KCksIGNvbnRleHQpLCAiLCAiLAogICAgICAgICBwb2ludGVyRHVtcEluQ29udGV4dChjaGFpbigp
LCBjb250ZXh0KSwgIiwgIiwKLSAgICAgICAgaW5Db250ZXh0KHNwZWNpZmljVmFsdWUoKSwgY29u
dGV4dCksICIsICIsIG9mZnNldCgpLCAiPiIpOworICAgICAgICBpbkNvbnRleHQoc3BlY2lmaWNW
YWx1ZSgpLCBjb250ZXh0KSwgIiwgIiwgb2Zmc2V0KCkpOworICAgIGlmIChtX2NhbGxMaW5rU3Rh
dHVzKQorICAgICAgICBvdXQucHJpbnQoImNhbGw6ICIsICptX2NhbGxMaW5rU3RhdHVzKTsKKyAg
ICBvdXQucHJpbnQoIj4iKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuaAkocmV2aXNpb24g
MTY5MDE0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRWYXJpYW50
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpZm5kZWYgR2V0QnlJZFZhcmlh
bnRfaAogI2RlZmluZSBHZXRCeUlkVmFyaWFudF9oCiAKKyNpbmNsdWRlICJDYWxsTGlua1N0YXR1
cy5oIgogI2luY2x1ZGUgIkludGVuZGVkU3RydWN0dXJlQ2hhaW4uaCIKICNpbmNsdWRlICJKU0NK
U1ZhbHVlLmgiCiAjaW5jbHVkZSAiUHJvcGVydHlPZmZzZXQuaCIKQEAgLTMzLDYgKzM0LDcgQEAK
IAogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIENhbGxMaW5rU3RhdHVzOwogY2xhc3MgR2V0QnlJ
ZFN0YXR1czsKIHN0cnVjdCBEdW1wQ29udGV4dDsKIApAQCAtNDEsMTEgKzQzLDEzIEBAIHB1Ymxp
YzoKICAgICBHZXRCeUlkVmFyaWFudCgKICAgICAgICAgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1
Y3R1cmVTZXQgPSBTdHJ1Y3R1cmVTZXQoKSwKICAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0
ID0gaW52YWxpZE9mZnNldCwgSlNWYWx1ZSBzcGVjaWZpY1ZhbHVlID0gSlNWYWx1ZSgpLAotICAg
ICAgICBQYXNzUmVmUHRyPEludGVuZGVkU3RydWN0dXJlQ2hhaW4+IGNoYWluID0gbnVsbHB0cikK
KyAgICAgICAgUGFzc1JlZlB0cjxJbnRlbmRlZFN0cnVjdHVyZUNoYWluPiBjaGFpbiA9IG51bGxw
dHIsCisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4gY2FsbExpbmtTdGF0
dXMgPSBudWxscHRyKQogICAgICAgICA6IG1fc3RydWN0dXJlU2V0KHN0cnVjdHVyZVNldCkKICAg
ICAgICAgLCBtX2NoYWluKGNoYWluKQogICAgICAgICAsIG1fc3BlY2lmaWNWYWx1ZShzcGVjaWZp
Y1ZhbHVlKQogICAgICAgICAsIG1fb2Zmc2V0KG9mZnNldCkKKyAgICAgICAgLCBtX2NhbGxMaW5r
U3RhdHVzKHN0ZDo6bW92ZShjYWxsTGlua1N0YXR1cykpCiAgICAgewogICAgICAgICBpZiAoIXN0
cnVjdHVyZVNldC5zaXplKCkpIHsKICAgICAgICAgICAgIEFTU0VSVChvZmZzZXQgPT0gaW52YWxp
ZE9mZnNldCk7CkBAIC01NCwxMiArNTgsMTggQEAgcHVibGljOgogICAgICAgICB9CiAgICAgfQog
ICAgIAorICAgIH5HZXRCeUlkVmFyaWFudCgpOworICAgIAorICAgIEdldEJ5SWRWYXJpYW50KGNv
bnN0IEdldEJ5SWRWYXJpYW50Jik7CisgICAgR2V0QnlJZFZhcmlhbnQmIG9wZXJhdG9yPShjb25z
dCBHZXRCeUlkVmFyaWFudCYpOworICAgIAogICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7IHJldHVy
biAhIW1fc3RydWN0dXJlU2V0LnNpemUoKTsgfQogICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3Qg
eyByZXR1cm4gIWlzU2V0KCk7IH0KICAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZVNl
dCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlU2V0OyB9CiAgICAgSW50ZW5kZWRTdHJ1Y3R1
cmVDaGFpbiogY2hhaW4oKSBjb25zdCB7IHJldHVybiBjb25zdF9jYXN0PEludGVuZGVkU3RydWN0
dXJlQ2hhaW4qPihtX2NoYWluLmdldCgpKTsgfQogICAgIEpTVmFsdWUgc3BlY2lmaWNWYWx1ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fc3BlY2lmaWNWYWx1ZTsgfQogICAgIFByb3BlcnR5T2Zmc2V0IG9m
ZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0OyB9CisgICAgQ2FsbExpbmtTdGF0dXMqIGNh
bGxMaW5rU3RhdHVzKCkgY29uc3QgeyByZXR1cm4gbV9jYWxsTGlua1N0YXR1cy5nZXQoKTsgfQog
ICAgIAogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwogICAgIHZvaWQgZHVtcElu
Q29udGV4dChQcmludFN0cmVhbSYsIER1bXBDb250ZXh0KikgY29uc3Q7CkBAIC03MSw2ICs4MSw3
IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPEludGVuZGVkU3RydWN0dXJlQ2hhaW4+IG1fY2hhaW47
CiAgICAgSlNWYWx1ZSBtX3NwZWNpZmljVmFsdWU7CiAgICAgUHJvcGVydHlPZmZzZXQgbV9vZmZz
ZXQ7CisgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPiBtX2NhbGxMaW5rU3RhdHVz
OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljR2V0QnlJZExpc3QuY3BwCShyZXZp
c2lvbiAxNjkwMTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBo
aWNHZXRCeUlkTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4LDI3ICs1OCwxMSBAQCBHZXRC
eUlkQWNjZXNzIEdldEJ5SWRBY2Nlc3M6OmZyb21TdHJ1Y3R1CiAgICAgCiAgICAgR2V0QnlJZEFj
Y2VzcyByZXN1bHQ7CiAgICAgCi0gICAgc3dpdGNoIChzdHViSW5mby5hY2Nlc3NUeXBlKSB7Ci0g
ICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX3NlbGY6Ci0gICAgICAgIHJlc3VsdC5tX3R5cGUgPSBT
aW1wbGVJbmxpbmU7Ci0gICAgICAgIHJlc3VsdC5tX3N0cnVjdHVyZS5jb3B5RnJvbShzdHViSW5m
by51LmdldEJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUpOwotICAgICAgICByZXN1bHQubV9z
dHViUm91dGluZSA9IEpJVFN0dWJSb3V0aW5lOjpjcmVhdGVTZWxmTWFuYWdlZFJvdXRpbmUoaW5p
dGlhbFNsb3dQYXRoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICAgIAotICAgIGNhc2UgYWNjZXNz
X2dldF9ieV9pZF9jaGFpbjoKLSAgICAgICAgcmVzdWx0Lm1fc3RydWN0dXJlLmNvcHlGcm9tKHN0
dWJJbmZvLnUuZ2V0QnlJZENoYWluLmJhc2VPYmplY3RTdHJ1Y3R1cmUpOwotICAgICAgICByZXN1
bHQubV9jaGFpbi5jb3B5RnJvbShzdHViSW5mby51LmdldEJ5SWRDaGFpbi5jaGFpbik7Ci0gICAg
ICAgIHJlc3VsdC5tX2NoYWluQ291bnQgPSBzdHViSW5mby51LmdldEJ5SWRDaGFpbi5jb3VudDsK
LSAgICAgICAgcmVzdWx0Lm1fc3R1YlJvdXRpbmUgPSBzdHViSW5mby5zdHViUm91dGluZTsKLSAg
ICAgICAgaWYgKHN0dWJJbmZvLnUuZ2V0QnlJZENoYWluLmlzRGlyZWN0KQotICAgICAgICAgICAg
cmVzdWx0Lm1fdHlwZSA9IFNpbXBsZVN0dWI7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJl
c3VsdC5tX3R5cGUgPSBHZXR0ZXI7Ci0gICAgICAgIGJyZWFrOwotICAgICAgICAKLSAgICBkZWZh
dWx0OgotICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KKyAgICBS
RUxFQVNFX0FTU0VSVChzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc19nZXRfYnlfaWRfc2Vs
Zik7CisgICAgCisgICAgcmVzdWx0Lm1fdHlwZSA9IFNpbXBsZUlubGluZTsKKyAgICByZXN1bHQu
bV9zdHJ1Y3R1cmUuY29weUZyb20oc3R1YkluZm8udS5nZXRCeUlkU2VsZi5iYXNlT2JqZWN0U3Ry
dWN0dXJlKTsKKyAgICByZXN1bHQubV9zdHViUm91dGluZSA9IEpJVFN0dWJSb3V0aW5lOjpjcmVh
dGVTZWxmTWFuYWdlZFJvdXRpbmUoaW5pdGlhbFNsb3dQYXRoKTsKICAgICAKICAgICByZXR1cm4g
cmVzdWx0OwogfQpAQCAtMTA5LDcgKzkzLDYgQEAgUG9seW1vcnBoaWNHZXRCeUlkTGlzdCogUG9s
eW1vcnBoaWNHZXRCeQogICAgIAogICAgIEFTU0VSVCgKICAgICAgICAgc3R1YkluZm8uYWNjZXNz
VHlwZSA9PSBhY2Nlc3NfZ2V0X2J5X2lkX3NlbGYKLSAgICAgICAgfHwgc3R1YkluZm8uYWNjZXNz
VHlwZSA9PSBhY2Nlc3NfZ2V0X2J5X2lkX2NoYWluCiAgICAgICAgIHx8IHN0dWJJbmZvLmFjY2Vz
c1R5cGUgPT0gYWNjZXNzX3Vuc2V0KTsKICAgICAKICAgICBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0
KiByZXN1bHQgPSBuZXcgUG9seW1vcnBoaWNHZXRCeUlkTGlzdChzdHViSW5mbyk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuaAkocmV2
aXNpb24gMTY5MDE0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0
ZWRUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDcgKzU5LDcgQEAgc3RhdGljIGNvbnN0IFNw
ZWN1bGF0ZWRUeXBlIFNwZWNPYmplY3QgIAogc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNw
ZWNTdHJpbmdJZGVudCAgICAgICAgPSAweDAwMDEwMDAwOyAvLyBJdCdzIGRlZmluaXRlbHkgYSBK
U1N0cmluZywgYW5kIGl0J3MgYW4gaWRlbnRpZmllci4KIHN0YXRpYyBjb25zdCBTcGVjdWxhdGVk
VHlwZSBTcGVjU3RyaW5nVmFyICAgICAgICAgID0gMHgwMDAyMDAwMDsgLy8gSXQncyBkZWZpbml0
ZWx5IGEgSlNTdHJpbmcsIGFuZCBpdCdzIG5vdCBhbiBpZGVudGlmaWVyLgogc3RhdGljIGNvbnN0
IFNwZWN1bGF0ZWRUeXBlIFNwZWNTdHJpbmcgICAgICAgICAgICAgPSAweDAwMDMwMDAwOyAvLyBJ
dCdzIGRlZmluaXRlbHkgYSBKU1N0cmluZy4KLXN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBT
cGVjQ2VsbE90aGVyICAgICAgICAgID0gMHgwMDA0MDAwMDsgLy8gSXQncyBkZWZpbml0ZWx5IGEg
SlNDZWxsIGJ1dCBub3QgYSBzdWJjbGFzcyBvZiBKU09iamVjdCBhbmQgZGVmaW5pdGVseSBub3Qg
YSBKU1N0cmluZy4KK3N0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjQ2VsbE90aGVyICAg
ICAgICAgID0gMHgwMDA0MDAwMDsgLy8gSXQncyBkZWZpbml0ZWx5IGEgSlNDZWxsIGJ1dCBub3Qg
YSBzdWJjbGFzcyBvZiBKU09iamVjdCBhbmQgZGVmaW5pdGVseSBub3QgYSBKU1N0cmluZy4gRklY
TUU6IFRoaXMgc2hvdWxkbid0IGJlIHBhcnQgb2YgaGVhcC10b3Agb3IgYnl0ZWNvZGUtdG9wLiBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMzMDc4CiBzdGF0aWMgY29u
c3QgU3BlY3VsYXRlZFR5cGUgU3BlY0NlbGwgICAgICAgICAgICAgICA9IDB4MDAwN2ZmZmY7IC8v
IEl0J3MgZGVmaW5pdGVseSBhIEpTQ2VsbC4KIHN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBT
cGVjSW50MzIgICAgICAgICAgICAgID0gMHgwMDIwMDAwMDsgLy8gSXQncyBkZWZpbml0ZWx5IGFu
IEludDMyLgogc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNJbnQ1MiAgICAgICAgICAg
ICAgPSAweDAwNDAwMDAwOyAvLyBJdCdzIGRlZmluaXRlbHkgYW4gSW50NTIgYW5kIHdlIGludGVu
ZCBpdCB0byB1bmJveCBpdC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9T
dHJ1Y3R1cmVTdHViSW5mby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAkocmV2aXNpb24gMTY5MDE0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDksNyArNDksNiBAQCB2b2lkIFN0cnVjdHVyZVN0dWJJbmZvOjpkZXJlZigp
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX3NlbGY6
Ci0gICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX2NoYWluOgogICAgIGNhc2UgYWNjZXNzX3B1dF9i
eV9pZF90cmFuc2l0aW9uX25vcm1hbDoKICAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfdHJhbnNp
dGlvbl9kaXJlY3Q6CiAgICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX3JlcGxhY2U6CkBAIC02OCwx
MSArNjcsNiBAQCBib29sIFN0cnVjdHVyZVN0dWJJbmZvOjp2aXNpdFdlYWtSZWZlcmVuCiAgICAg
ICAgIGlmICghSGVhcDo6aXNNYXJrZWQodS5nZXRCeUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJl
LmdldCgpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX2NoYWluOgotICAgICAgICBpZiAoIUhlYXA6OmlzTWFya2Vk
KHUuZ2V0QnlJZENoYWluLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCkpCi0gICAgICAgICAgICB8
fCAhSGVhcDo6aXNNYXJrZWQodS5nZXRCeUlkQ2hhaW4uY2hhaW4uZ2V0KCkpKQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBicmVhazsKICAgICBjYXNlIGFjY2Vzc19nZXRfYnlf
aWRfbGlzdDogewogICAgICAgICBpZiAoIXUuZ2V0QnlJZExpc3QubGlzdC0+dmlzaXRXZWFrKHJl
cGF0Y2hCdWZmZXIpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgJKHJldmlz
aW9uIDE2OTAxNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVT
dHViSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw2IEBAIGNsYXNzIFBvbHltb3Jw
aGljUHV0QnlJZExpc3Q7CiAKIGVudW0gQWNjZXNzVHlwZSB7CiAgICAgYWNjZXNzX2dldF9ieV9p
ZF9zZWxmLAotICAgIGFjY2Vzc19nZXRfYnlfaWRfY2hhaW4sCiAgICAgYWNjZXNzX2dldF9ieV9p
ZF9saXN0LAogICAgIGFjY2Vzc19wdXRfYnlfaWRfdHJhbnNpdGlvbl9ub3JtYWwsCiAgICAgYWNj
ZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9uX2RpcmVjdCwKQEAgLTYxLDcgKzYwLDYgQEAgaW5saW5l
IGJvb2wgaXNHZXRCeUlkQWNjZXNzKEFjY2Vzc1R5cGUgYQogewogICAgIHN3aXRjaCAoYWNjZXNz
VHlwZSkgewogICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9zZWxmOgotICAgIGNhc2UgYWNjZXNz
X2dldF9ieV9pZF9jaGFpbjoKICAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfbGlzdDoKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgZGVmYXVsdDoKQEAgLTEwNywxNiArMTA1LDYgQEAgc3RydWN0
IFN0cnVjdHVyZVN0dWJJbmZvIHsKICAgICAgICAgdS5nZXRCeUlkU2VsZi5iYXNlT2JqZWN0U3Ry
dWN0dXJlLnNldCh2bSwgb3duZXIsIGJhc2VPYmplY3RTdHJ1Y3R1cmUpOwogICAgIH0KIAotICAg
IHZvaWQgaW5pdEdldEJ5SWRDaGFpbihWTSYgdm0sIEpTQ2VsbCogb3duZXIsIFN0cnVjdHVyZSog
YmFzZU9iamVjdFN0cnVjdHVyZSwgU3RydWN0dXJlQ2hhaW4qIGNoYWluLCB1bnNpZ25lZCBjb3Vu
dCwgYm9vbCBpc0RpcmVjdCkKLSAgICB7Ci0gICAgICAgIGFjY2Vzc1R5cGUgPSBhY2Nlc3NfZ2V0
X2J5X2lkX2NoYWluOwotCi0gICAgICAgIHUuZ2V0QnlJZENoYWluLmJhc2VPYmplY3RTdHJ1Y3R1
cmUuc2V0KHZtLCBvd25lciwgYmFzZU9iamVjdFN0cnVjdHVyZSk7Ci0gICAgICAgIHUuZ2V0QnlJ
ZENoYWluLmNoYWluLnNldCh2bSwgb3duZXIsIGNoYWluKTsKLSAgICAgICAgdS5nZXRCeUlkQ2hh
aW4uY291bnQgPSBjb3VudDsKLSAgICAgICAgdS5nZXRCeUlkQ2hhaW4uaXNEaXJlY3QgPSBpc0Rp
cmVjdDsKLSAgICB9Ci0KICAgICB2b2lkIGluaXRHZXRCeUlkTGlzdChQb2x5bW9ycGhpY0dldEJ5
SWRMaXN0KiBsaXN0KQogICAgIHsKICAgICAgICAgYWNjZXNzVHlwZSA9IGFjY2Vzc19nZXRfYnlf
aWRfbGlzdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RIZWFw
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEhl
YXAuaAkocmV2aXNpb24gMTY5MDE0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
YnN0cmFjdEhlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsNiArNTAsOCBAQCBuYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAgbWFjcm8oQnV0dGVyZmx5X2FycmF5QnVmZmVyKSBc
CiAgICAgbWFjcm8oQnV0dGVyZmx5X3B1YmxpY0xlbmd0aCkgXAogICAgIG1hY3JvKEJ1dHRlcmZs
eV92ZWN0b3JMZW5ndGgpIFwKKyAgICBtYWNybyhHZXR0ZXJTZXR0ZXJfZ2V0dGVyKSBcCisgICAg
bWFjcm8oR2V0dGVyU2V0dGVyX3NldHRlcikgXAogICAgIG1hY3JvKEpTQXJyYXlCdWZmZXJWaWV3
X2xlbmd0aCkgXAogICAgIG1hY3JvKEpTQXJyYXlCdWZmZXJWaWV3X21vZGUpIFwKICAgICBtYWNy
byhKU0FycmF5QnVmZmVyVmlld192ZWN0b3IpIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHJl
dmlzaW9uIDE2OTAxNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJ
bnRlcnByZXRlcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTQxNSw2ICsxNDE1LDggQEAg
Ym9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICBicmVhazsK
ICAgICAgICAgCiAgICAgY2FzZSBHZXRDYWxsZWU6CisgICAgY2FzZSBHZXRHZXR0ZXI6CisgICAg
Y2FzZSBHZXRTZXR0ZXI6CiAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjRnVuY3Rp
b24pOwogICAgICAgICBicmVhazsKICAgICAgICAgCkBAIC0xNjQwLDYgKzE2NDIsMTEgQEAgYm9v
bCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICBicmVhazsKICAg
ICB9CiAgICAgICAgIAorICAgIGNhc2UgR2V0R2V0dGVyU2V0dGVyQnlPZmZzZXQ6IHsKKyAgICAg
ICAgZm9yTm9kZShub2RlKS5zZXQobV9ncmFwaCwgbV9ncmFwaC5tX3ZtLmdldHRlclNldHRlclN0
cnVjdHVyZS5nZXQoKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCiAgICAgY2Fz
ZSBNdWx0aUdldEJ5T2Zmc2V0OiB7CiAgICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gZm9y
Tm9kZShub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIEFTU0VSVCghKHZhbHVlLm1fdHlwZSAmIH5T
cGVjQ2VsbCkpOyAvLyBFZGdlIGZpbHRlcmluZyBzaG91bGQgaGF2ZSBhbHJlYWR5IGVuc3VyZWQg
dGhpcy4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQ
YXJzZXIuY3BwCShyZXZpc2lvbiAxNjkwMTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTcxLDIxICsxNzEsMjEg
QEAgcHJpdmF0ZToKICAgICBib29sIGhhbmRsZU1pbk1heChpbnQgcmVzdWx0T3BlcmFuZCwgTm9k
ZVR5cGUgb3AsIGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzKTsKICAgICAKICAgICAvLyBIYW5kbGUgY2FsbHMuIFRoaXMgcmVzb2x2ZXMgaXNzdWVzIHN1
cnJvdW5kaW5nIGlubGluaW5nIGFuZCBpbnRyaW5zaWNzLgorICAgIHZvaWQgaGFuZGxlQ2FsbCgK
KyAgICAgICAgaW50IHJlc3VsdCwgTm9kZVR5cGUgb3AsIElubGluZUNhbGxGcmFtZTo6S2luZCwg
dW5zaWduZWQgaW5zdHJ1Y3Rpb25TaXplLAorICAgICAgICBOb2RlKiBjYWxsVGFyZ2V0LCBpbnQg
YXJnQ291bnQsIGludCByZWdpc3Rlck9mZnNldCwgQ2FsbExpbmtTdGF0dXMpOwogICAgIHZvaWQg
aGFuZGxlQ2FsbChpbnQgcmVzdWx0LCBOb2RlVHlwZSBvcCwgQ29kZVNwZWNpYWxpemF0aW9uS2lu
ZCwgdW5zaWduZWQgaW5zdHJ1Y3Rpb25TaXplLCBpbnQgY2FsbGVlLCBpbnQgYXJnQ291bnQsIGlu
dCByZWdpc3Rlck9mZnNldCk7CiAgICAgdm9pZCBoYW5kbGVDYWxsKEluc3RydWN0aW9uKiBwYywg
Tm9kZVR5cGUgb3AsIENvZGVTcGVjaWFsaXphdGlvbktpbmQpOwogICAgIHZvaWQgZW1pdEZ1bmN0
aW9uQ2hlY2tzKGNvbnN0IENhbGxMaW5rU3RhdHVzJiwgTm9kZSogY2FsbFRhcmdldCwgaW50IHJl
Z2lzdGVyT2Zmc2V0LCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsKICAgICB2b2lkIGVtaXRBcmd1
bWVudFBoYW50b21zKGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsKICAgICAvLyBIYW5kbGUgaW5saW5pbmcu
IFJldHVybiB0cnVlIGlmIGl0IHN1Y2NlZWRlZCwgZmFsc2UgaWYgd2UgbmVlZCB0byBwbGFudCBh
IGNhbGwuCi0gICAgYm9vbCBoYW5kbGVJbmxpbmluZyhOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwgaW50
IHJlc3VsdE9wZXJhbmQsIGNvbnN0IENhbGxMaW5rU3RhdHVzJiwgaW50IHJlZ2lzdGVyT2Zmc2V0
LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIHVuc2lnbmVkIG5leHRPZmZzZXQsIENv
ZGVTcGVjaWFsaXphdGlvbktpbmQpOworICAgIGJvb2wgaGFuZGxlSW5saW5pbmcoTm9kZSogY2Fs
bFRhcmdldE5vZGUsIGludCByZXN1bHRPcGVyYW5kLCBjb25zdCBDYWxsTGlua1N0YXR1cyYsIGlu
dCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCB1bnNpZ25l
ZCBuZXh0T2Zmc2V0LCBJbmxpbmVDYWxsRnJhbWU6OktpbmQpOwogICAgIC8vIEhhbmRsZSBpbnRy
aW5zaWMgZnVuY3Rpb25zLiBSZXR1cm4gdHJ1ZSBpZiBpdCBzdWNjZWVkZWQsIGZhbHNlIGlmIHdl
IG5lZWQgdG8gcGxhbnQgYSBjYWxsLgogICAgIGJvb2wgaGFuZGxlSW50cmluc2ljKGludCByZXN1
bHRPcGVyYW5kLCBJbnRyaW5zaWMsIGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzLCBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uKTsKICAgICBib29sIGhh
bmRsZVR5cGVkQXJyYXlDb25zdHJ1Y3RvcihpbnQgcmVzdWx0T3BlcmFuZCwgSW50ZXJuYWxGdW5j
dGlvbiosIGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
LCBUeXBlZEFycmF5VHlwZSk7CiAgICAgYm9vbCBoYW5kbGVDb25zdGFudEludGVybmFsRnVuY3Rp
b24oaW50IHJlc3VsdE9wZXJhbmQsIEludGVybmFsRnVuY3Rpb24qLCBpbnQgcmVnaXN0ZXJPZmZz
ZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgU3BlY3VsYXRlZFR5cGUgcHJlZGlj
dGlvbiwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCk7CiAgICAgTm9kZSogaGFuZGxlUHV0QnlPZmZz
ZXQoTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllciwgUHJvcGVydHlPZmZzZXQsIE5vZGUq
IHZhbHVlKTsKLSAgICBOb2RlKiBoYW5kbGVHZXRCeU9mZnNldChTcGVjdWxhdGVkVHlwZSwgTm9k
ZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgUHJvcGVydHlPZmZzZXQpOwotICAg
IHZvaWQgaGFuZGxlR2V0QnlPZmZzZXQoCi0gICAgICAgIGludCBkZXN0aW5hdGlvbk9wZXJhbmQs
IFNwZWN1bGF0ZWRUeXBlLCBOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLAot
ICAgICAgICBQcm9wZXJ0eU9mZnNldCk7CisgICAgTm9kZSogaGFuZGxlR2V0QnlPZmZzZXQoU3Bl
Y3VsYXRlZFR5cGUsIE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFByb3Bl
cnR5T2Zmc2V0LCBOb2RlVHlwZSBvcCA9IEdldEJ5T2Zmc2V0KTsKICAgICB2b2lkIGhhbmRsZUdl
dEJ5SWQoCiAgICAgICAgIGludCBkZXN0aW5hdGlvbk9wZXJhbmQsIFNwZWN1bGF0ZWRUeXBlLCBO
b2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLAogICAgICAgICBjb25zdCBHZXRC
eUlkU3RhdHVzJik7CkBAIC04MTEsMTEgKzgxMSwxMSBAQCBwcml2YXRlOgogICAgICAgICBtX251
bVBhc3NlZFZhckFyZ3MrKzsKICAgICB9CiAgICAgCi0gICAgTm9kZSogYWRkQ2FsbChpbnQgcmVz
dWx0LCBOb2RlVHlwZSBvcCwgaW50IGNhbGxlZSwgaW50IGFyZ0NvdW50LCBpbnQgcmVnaXN0ZXJP
ZmZzZXQpCisgICAgTm9kZSogYWRkQ2FsbChpbnQgcmVzdWx0LCBOb2RlVHlwZSBvcCwgTm9kZSog
Y2FsbGVlLCBpbnQgYXJnQ291bnQsIGludCByZWdpc3Rlck9mZnNldCkKICAgICB7CiAgICAgICAg
IFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSBnZXRQcmVkaWN0aW9uKCk7CiAgICAgICAgIAot
ICAgICAgICBhZGRWYXJBcmdDaGlsZChnZXQoVmlydHVhbFJlZ2lzdGVyKGNhbGxlZSkpKTsKKyAg
ICAgICAgYWRkVmFyQXJnQ2hpbGQoY2FsbGVlKTsKICAgICAgICAgc2l6ZV90IHBhcmFtZXRlclNs
b3RzID0gSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSAtIEpTU3RhY2s6OkNhbGxlckZyYW1l
QW5kUENTaXplICsgYXJnQ291bnQ7CiAgICAgICAgIGlmIChwYXJhbWV0ZXJTbG90cyA+IG1fcGFy
YW1ldGVyU2xvdHMpCiAgICAgICAgICAgICBtX3BhcmFtZXRlclNsb3RzID0gcGFyYW1ldGVyU2xv
dHM7CkBAIC0xMTIwLDcgKzExMjAsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgVmlydHVhbFJl
Z2lzdGVyIHJldHVyblZhbHVlVlIsCiAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgaW5saW5l
Q2FsbEZyYW1lU3RhcnQsCiAgICAgICAgICAgICBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMsCi0gICAgICAgICAgICBDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsKKyAgICAgICAgICAgIElu
bGluZUNhbGxGcmFtZTo6S2luZCk7CiAgICAgICAgIAogICAgICAgICB+SW5saW5lU3RhY2tFbnRy
eSgpCiAgICAgICAgIHsKQEAgLTEyMDMsMjYgKzEyMDMsMzUgQEAgdm9pZCBCeXRlQ29kZVBhcnNl
cjo6aGFuZGxlQ2FsbCgKICAgICBpbnQgcmVzdWx0LCBOb2RlVHlwZSBvcCwgQ29kZVNwZWNpYWxp
emF0aW9uS2luZCBraW5kLCB1bnNpZ25lZCBpbnN0cnVjdGlvblNpemUsCiAgICAgaW50IGNhbGxl
ZSwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBpbnQgcmVnaXN0ZXJPZmZzZXQpCiB7
Ci0gICAgQVNTRVJUKHJlZ2lzdGVyT2Zmc2V0IDw9IDApOwotICAgIAogICAgIE5vZGUqIGNhbGxU
YXJnZXQgPSBnZXQoVmlydHVhbFJlZ2lzdGVyKGNhbGxlZSkpOwogICAgIAotICAgIENhbGxMaW5r
U3RhdHVzIGNhbGxMaW5rU3RhdHVzOwotCisgICAgQ2FsbExpbmtTdGF0dXMgY2FsbExpbmtTdGF0
dXMgPSBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUZvcigKKyAgICAgICAgbV9pbmxpbmVTdGFja1Rv
cC0+bV9wcm9maWxlZEJsb2NrLCBjdXJyZW50Q29kZU9yaWdpbigpLAorICAgICAgICBtX2lubGlu
ZVN0YWNrVG9wLT5tX2NhbGxMaW5rSW5mb3MsIG1fY2FsbENvbnRleHRNYXApOworICAgIAorICAg
IGhhbmRsZUNhbGwoCisgICAgICAgIHJlc3VsdCwgb3AsIElubGluZUNhbGxGcmFtZTo6a2luZEZv
cihraW5kKSwgaW5zdHJ1Y3Rpb25TaXplLCBjYWxsVGFyZ2V0LAorICAgICAgICBhcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcywgcmVnaXN0ZXJPZmZzZXQsIGNhbGxMaW5rU3RhdHVzKTsKK30KKyAg
ICAKK3ZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNhbGwoCisgICAgaW50IHJlc3VsdCwgTm9k
ZVR5cGUgb3AsIElubGluZUNhbGxGcmFtZTo6S2luZCBraW5kLCB1bnNpZ25lZCBpbnN0cnVjdGlv
blNpemUsCisgICAgTm9kZSogY2FsbFRhcmdldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzLCBpbnQgcmVnaXN0ZXJPZmZzZXQsCisgICAgQ2FsbExpbmtTdGF0dXMgY2FsbExpbmtTdGF0
dXMpCit7CisgICAgQVNTRVJUKHJlZ2lzdGVyT2Zmc2V0IDw9IDApOworICAgIENvZGVTcGVjaWFs
aXphdGlvbktpbmQgc3BlY2lhbGl6YXRpb25LaW5kID0gSW5saW5lQ2FsbEZyYW1lOjpzcGVjaWFs
aXphdGlvbktpbmRGb3Ioa2luZCk7CisgICAgCiAgICAgaWYgKG1fZ3JhcGguaXNDb25zdGFudChj
YWxsVGFyZ2V0KSkgewogICAgICAgICBjYWxsTGlua1N0YXR1cyA9IENhbGxMaW5rU3RhdHVzKAog
ICAgICAgICAgICAgbV9ncmFwaC52YWx1ZU9mSlNDb25zdGFudChjYWxsVGFyZ2V0KSkuc2V0SXNQ
cm92ZWQodHJ1ZSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgY2FsbExpbmtTdGF0dXMgPSBDYWxs
TGlua1N0YXR1czo6Y29tcHV0ZUZvcigKLSAgICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1f
cHJvZmlsZWRCbG9jaywgY3VycmVudENvZGVPcmlnaW4oKSwKLSAgICAgICAgICAgIG1faW5saW5l
U3RhY2tUb3AtPm1fY2FsbExpbmtJbmZvcywgbV9jYWxsQ29udGV4dE1hcCk7CiAgICAgfQogICAg
IAogICAgIGlmICghY2FsbExpbmtTdGF0dXMuY2FuT3B0aW1pemUoKSkgewogICAgICAgICAvLyBP
ZGRseSwgdGhpcyBjb25mbGF0ZXMgY2FsbHMgdGhhdCBoYXZlbid0IGV4ZWN1dGVkIHdpdGggY2Fs
bHMgdGhhdCBiZWhhdmVkIHN1ZmZpY2llbnRseSBwb2x5bW9ycGhpY2FsbHkKICAgICAgICAgLy8g
dGhhdCB3ZSBjYW5ub3Qgb3B0aW1pemUgdGhlbS4KICAgICAgICAgCi0gICAgICAgIGFkZENhbGwo
cmVzdWx0LCBvcCwgY2FsbGVlLCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgcmVnaXN0ZXJP
ZmZzZXQpOworICAgICAgICBhZGRDYWxsKHJlc3VsdCwgb3AsIGNhbGxUYXJnZXQsIGFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzLCByZWdpc3Rlck9mZnNldCk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAgICAgCkBAIC0xMjMwLDI4ICsxMjM5LDI4IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6Omhh
bmRsZUNhbGwoCiAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IGdldFByZWRpY3Rpb24o
KTsKIAogICAgIGlmIChJbnRlcm5hbEZ1bmN0aW9uKiBmdW5jdGlvbiA9IGNhbGxMaW5rU3RhdHVz
LmludGVybmFsRnVuY3Rpb24oKSkgewotICAgICAgICBpZiAoaGFuZGxlQ29uc3RhbnRJbnRlcm5h
bEZ1bmN0aW9uKHJlc3VsdCwgZnVuY3Rpb24sIHJlZ2lzdGVyT2Zmc2V0LCBhcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcywgcHJlZGljdGlvbiwga2luZCkpIHsKKyAgICAgICAgaWYgKGhhbmRsZUNv
bnN0YW50SW50ZXJuYWxGdW5jdGlvbihyZXN1bHQsIGZ1bmN0aW9uLCByZWdpc3Rlck9mZnNldCwg
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIHByZWRpY3Rpb24sIHNwZWNpYWxpemF0aW9uS2lu
ZCkpIHsKICAgICAgICAgICAgIC8vIFRoaXMgcGhhbnRvbWluZyBoYXMgdG8gYmUgKmFmdGVyKiB0
aGUgY29kZSBmb3IgdGhlIGludHJpbnNpYywgdG8gc2lnbmlmeSB0aGF0CiAgICAgICAgICAgICAv
LyB0aGUgaW5wdXRzIG11c3QgYmUga2VwdCBhbGl2ZSB3aGF0ZXZlciBleGl0cyB0aGUgaW50cmlu
c2ljIG1heSBkby4KICAgICAgICAgICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwgY2FsbFRhcmdldCk7
Ci0gICAgICAgICAgICBlbWl0QXJndW1lbnRQaGFudG9tcyhyZWdpc3Rlck9mZnNldCwgYXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMsIGtpbmQpOworICAgICAgICAgICAgZW1pdEFyZ3VtZW50UGhh
bnRvbXMocmVnaXN0ZXJPZmZzZXQsIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBzcGVjaWFs
aXphdGlvbktpbmQpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIAog
ICAgICAgICAvLyBDYW4gb25seSBoYW5kbGUgdGhpcyB1c2luZyB0aGUgZ2VuZXJpYyBjYWxsIGhh
bmRsZXIuCi0gICAgICAgIGFkZENhbGwocmVzdWx0LCBvcCwgY2FsbGVlLCBhcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcywgcmVnaXN0ZXJPZmZzZXQpOworICAgICAgICBhZGRDYWxsKHJlc3VsdCwg
b3AsIGNhbGxUYXJnZXQsIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCByZWdpc3Rlck9mZnNl
dCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgICAgIAotICAgIEludHJpbnNpYyBpbnRy
aW5zaWMgPSBjYWxsTGlua1N0YXR1cy5pbnRyaW5zaWNGb3Ioa2luZCk7CisgICAgSW50cmluc2lj
IGludHJpbnNpYyA9IGNhbGxMaW5rU3RhdHVzLmludHJpbnNpY0ZvcihzcGVjaWFsaXphdGlvbktp
bmQpOwogICAgIGlmIChpbnRyaW5zaWMgIT0gTm9JbnRyaW5zaWMpIHsKLSAgICAgICAgZW1pdEZ1
bmN0aW9uQ2hlY2tzKGNhbGxMaW5rU3RhdHVzLCBjYWxsVGFyZ2V0LCByZWdpc3Rlck9mZnNldCwg
a2luZCk7CisgICAgICAgIGVtaXRGdW5jdGlvbkNoZWNrcyhjYWxsTGlua1N0YXR1cywgY2FsbFRh
cmdldCwgcmVnaXN0ZXJPZmZzZXQsIHNwZWNpYWxpemF0aW9uS2luZCk7CiAgICAgICAgICAgICAK
ICAgICAgICAgaWYgKGhhbmRsZUludHJpbnNpYyhyZXN1bHQsIGludHJpbnNpYywgcmVnaXN0ZXJP
ZmZzZXQsIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBwcmVkaWN0aW9uKSkgewogICAgICAg
ICAgICAgLy8gVGhpcyBwaGFudG9taW5nIGhhcyB0byBiZSAqYWZ0ZXIqIHRoZSBjb2RlIGZvciB0
aGUgaW50cmluc2ljLCB0byBzaWduaWZ5IHRoYXQKICAgICAgICAgICAgIC8vIHRoZSBpbnB1dHMg
bXVzdCBiZSBrZXB0IGFsaXZlIHdoYXRldmVyIGV4aXRzIHRoZSBpbnRyaW5zaWMgbWF5IGRvLgog
ICAgICAgICAgICAgYWRkVG9HcmFwaChQaGFudG9tLCBjYWxsVGFyZ2V0KTsKLSAgICAgICAgICAg
IGVtaXRBcmd1bWVudFBoYW50b21zKHJlZ2lzdGVyT2Zmc2V0LCBhcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcywga2luZCk7CisgICAgICAgICAgICBlbWl0QXJndW1lbnRQaGFudG9tcyhyZWdpc3Rl
ck9mZnNldCwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIHNwZWNpYWxpemF0aW9uS2luZCk7
CiAgICAgICAgICAgICBpZiAobV9ncmFwaC5jb21waWxhdGlvbigpKQogICAgICAgICAgICAgICAg
IG1fZ3JhcGguY29tcGlsYXRpb24oKS0+bm90aWNlSW5saW5lZENhbGwoKTsKICAgICAgICAgICAg
IHJldHVybjsKQEAgLTEyNjIsNyArMTI3MSw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRs
ZUNhbGwoCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAgYWRkQ2FsbChyZXN1bHQs
IG9wLCBjYWxsZWUsIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCByZWdpc3Rlck9mZnNldCk7
CisgICAgYWRkQ2FsbChyZXN1bHQsIG9wLCBjYWxsVGFyZ2V0LCBhcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcywgcmVnaXN0ZXJPZmZzZXQpOwogfQogCiB2b2lkIEJ5dGVDb2RlUGFyc2VyOjplbWl0
RnVuY3Rpb25DaGVja3MoY29uc3QgQ2FsbExpbmtTdGF0dXMmIGNhbGxMaW5rU3RhdHVzLCBOb2Rl
KiBjYWxsVGFyZ2V0LCBpbnQgcmVnaXN0ZXJPZmZzZXQsIENvZGVTcGVjaWFsaXphdGlvbktpbmQg
a2luZCkKQEAgLTEyOTcsMTAgKzEzMDYsMTIgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6ZW1pdEFy
Z3VtZW50UGhhbnRvbQogICAgICAgICBhZGRUb0dyYXBoKFBoYW50b20sIGdldCh2aXJ0dWFsUmVn
aXN0ZXJGb3JBcmd1bWVudChpLCByZWdpc3Rlck9mZnNldCkpKTsKIH0KIAotYm9vbCBCeXRlQ29k
ZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcoTm9kZSogY2FsbFRhcmdldE5vZGUsIGludCByZXN1bHRP
cGVyYW5kLCBjb25zdCBDYWxsTGlua1N0YXR1cyYgY2FsbExpbmtTdGF0dXMsIGludCByZWdpc3Rl
ck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCB1bnNpZ25lZCBuZXh0T2Zm
c2V0LCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCitib29sIEJ5dGVDb2RlUGFyc2VyOjpo
YW5kbGVJbmxpbmluZyhOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwgaW50IHJlc3VsdE9wZXJhbmQsIGNv
bnN0IENhbGxMaW5rU3RhdHVzJiBjYWxsTGlua1N0YXR1cywgaW50IHJlZ2lzdGVyT2Zmc2V0LCBp
bnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIHVuc2lnbmVkIG5leHRPZmZzZXQsIElubGlu
ZUNhbGxGcmFtZTo6S2luZCBraW5kKQogewogICAgIHN0YXRpYyBjb25zdCBib29sIHZlcmJvc2Ug
PSBmYWxzZTsKICAgICAKKyAgICBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIHNwZWNpYWxpemF0aW9u
S2luZCA9IElubGluZUNhbGxGcmFtZTo6c3BlY2lhbGl6YXRpb25LaW5kRm9yKGtpbmQpOworICAg
IAogICAgIGlmICh2ZXJib3NlKQogICAgICAgICBkYXRhTG9nKCJDb25zaWRlcmluZyBpbmxpbmlu
ZyAiLCBjYWxsTGlua1N0YXR1cywgIiBpbnRvICIsIGN1cnJlbnRDb2RlT3JpZ2luKCksICJcbiIp
OwogICAgIApAQCAtMTMzMywxNCArMTM0NCwxNCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5k
bGVJbmxpbmluZyhOb2RlCiAgICAgLy8gaWYgd2UgaGFkIGEgc3RhdGljIHByb29mIG9mIHdoYXQg
d2FzIGJlaW5nIGNhbGxlZDsgdGhpcyBtaWdodCBoYXBwZW4gZm9yIGV4YW1wbGUgaWYgeW91IGNh
bGwgYQogICAgIC8vIGdsb2JhbCBmdW5jdGlvbiwgd2hlcmUgd2F0Y2hwb2ludGluZyBnaXZlcyB1
cyBzdGF0aWMgaW5mb3JtYXRpb24uIE92ZXJhbGwsIGl0J3MgYSByYXJlIGNhc2UKICAgICAvLyBi
ZWNhdXNlIHdlIGV4cGVjdCB0aGF0IGFueSBob3QgY2FsbGVlcyB3b3VsZCBoYXZlIGFscmVhZHkg
YmVlbiBjb21waWxlZC4KLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWN1dGFibGUtPmJh
c2VsaW5lQ29kZUJsb2NrRm9yKGtpbmQpOworICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhl
Y3V0YWJsZS0+YmFzZWxpbmVDb2RlQmxvY2tGb3Ioc3BlY2lhbGl6YXRpb25LaW5kKTsKICAgICBp
ZiAoIWNvZGVCbG9jaykgewogICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgIGRhdGFM
b2coIiAgICBGYWlsaW5nIGJlY2F1c2Ugbm8gY29kZSBibG9jayBhdmFpbGFibGUuXG4iKTsKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICBDYXBhYmlsaXR5TGV2ZWwgY2FwYWJpbGl0
eUxldmVsID0gaW5saW5lRnVuY3Rpb25Gb3JDYXBhYmlsaXR5TGV2ZWwoCi0gICAgICAgIGNvZGVC
bG9jaywga2luZCwgY2FsbExpbmtTdGF0dXMuaXNDbG9zdXJlQ2FsbCgpKTsKKyAgICAgICAgY29k
ZUJsb2NrLCBzcGVjaWFsaXphdGlvbktpbmQsIGNhbGxMaW5rU3RhdHVzLmlzQ2xvc3VyZUNhbGwo
KSk7CiAgICAgaWYgKCFjYW5JbmxpbmUoY2FwYWJpbGl0eUxldmVsKSkgewogICAgICAgICBpZiAo
dmVyYm9zZSkKICAgICAgICAgICAgIGRhdGFMb2coIiAgICBGYWlsaW5nIGJlY2F1c2UgdGhlIGZ1
bmN0aW9uIGlzIG5vdCBpbmxpbmVhYmxlLlxuIik7CkBAIC0xMzkyLDcgKzE0MDMsNyBAQCBib29s
IEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZyhOb2RlCiAgICAgLy8gTm93IHdlIGtub3cg
d2l0aG91dCBhIGRvdWJ0IHRoYXQgd2UgYXJlIGNvbW1pdHRlZCB0byBpbmxpbmluZy4gU28gYmVn
aW4gdGhlIHByb2Nlc3MKICAgICAvLyBieSBjaGVja2luZyB0aGUgY2FsbGVlIChpZiBuZWNlc3Nh
cnkpIGFuZCBtYWtpbmcgc3VyZSB0aGF0IGFyZ3VtZW50cyBhbmQgdGhlIGNhbGxlZQogICAgIC8v
IGFyZSBmbHVzaGVkLgotICAgIGVtaXRGdW5jdGlvbkNoZWNrcyhjYWxsTGlua1N0YXR1cywgY2Fs
bFRhcmdldE5vZGUsIHJlZ2lzdGVyT2Zmc2V0LCBraW5kKTsKKyAgICBlbWl0RnVuY3Rpb25DaGVj
a3MoY2FsbExpbmtTdGF0dXMsIGNhbGxUYXJnZXROb2RlLCByZWdpc3Rlck9mZnNldCwgc3BlY2lh
bGl6YXRpb25LaW5kKTsKICAgICAKICAgICAvLyBGSVhNRTogRG9uJ3QgZmx1c2ggY29uc3RhbnRz
IQogICAgIApAQCAtMTg1MCwxNCArMTg2MSwxNCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5k
bGVDb25zdGFudEludGVyCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1Ob2RlKiBCeXRlQ29kZVBh
cnNlcjo6aGFuZGxlR2V0QnlPZmZzZXQoU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiwgTm9kZSog
YmFzZSwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQor
Tm9kZSogQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5T2Zmc2V0KFNwZWN1bGF0ZWRUeXBlIHBy
ZWRpY3Rpb24sIE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFByb3BlcnR5
T2Zmc2V0IG9mZnNldCwgTm9kZVR5cGUgb3ApCiB7CiAgICAgTm9kZSogcHJvcGVydHlTdG9yYWdl
OwogICAgIGlmIChpc0lubGluZU9mZnNldChvZmZzZXQpKQogICAgICAgICBwcm9wZXJ0eVN0b3Jh
Z2UgPSBiYXNlOwogICAgIGVsc2UKICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gYWRkVG9HcmFw
aChHZXRCdXR0ZXJmbHksIGJhc2UpOwotICAgIE5vZGUqIGdldEJ5T2Zmc2V0ID0gYWRkVG9HcmFw
aChHZXRCeU9mZnNldCwgT3BJbmZvKG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YS5zaXplKCkp
LCBPcEluZm8ocHJlZGljdGlvbiksIHByb3BlcnR5U3RvcmFnZSwgYmFzZSk7CisgICAgTm9kZSog
Z2V0QnlPZmZzZXQgPSBhZGRUb0dyYXBoKG9wLCBPcEluZm8obV9ncmFwaC5tX3N0b3JhZ2VBY2Nl
c3NEYXRhLnNpemUoKSksIE9wSW5mbyhwcmVkaWN0aW9uKSwgcHJvcGVydHlTdG9yYWdlLCBiYXNl
KTsKIAogICAgIFN0b3JhZ2VBY2Nlc3NEYXRhIHN0b3JhZ2VBY2Nlc3NEYXRhOwogICAgIHN0b3Jh
Z2VBY2Nlc3NEYXRhLm9mZnNldCA9IG9mZnNldDsKQEAgLTE4NjcsMTMgKzE4NzgsNiBAQCBOb2Rl
KiBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlPZmZzZXQoCiAgICAgcmV0dXJuIGdldEJ5T2Zm
c2V0OwogfQogCi12b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRCeU9mZnNldCgKLSAgICBp
bnQgZGVzdGluYXRpb25PcGVyYW5kLCBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uLCBOb2RlKiBi
YXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLAotICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNl
dCkKLXsKLSAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGRlc3RpbmF0aW9uT3BlcmFuZCksIGhhbmRs
ZUdldEJ5T2Zmc2V0KHByZWRpY3Rpb24sIGJhc2UsIGlkZW50aWZpZXJOdW1iZXIsIG9mZnNldCkp
OwotfQotCiBOb2RlKiBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlPZmZzZXQoTm9kZSogYmFz
ZSwgdW5zaWduZWQgaWRlbnRpZmllciwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBOb2RlKiB2YWx1
ZSkKIHsKICAgICBOb2RlKiBwcm9wZXJ0eVN0b3JhZ2U7CkBAIC0xOTEwLDE4ICsxOTE0LDE5IEBA
IHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5SWQoCiAgICAgaW50IGRlc3RpbmF0aW9u
T3BlcmFuZCwgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiwgTm9kZSogYmFzZSwgdW5zaWduZWQg
aWRlbnRpZmllck51bWJlciwKICAgICBjb25zdCBHZXRCeUlkU3RhdHVzJiBnZXRCeUlkU3RhdHVz
KQogeworICAgIE5vZGVUeXBlIGdldEJ5SWQgPSBnZXRCeUlkU3RhdHVzLm1ha2VzQ2FsbHMoKSA/
IEdldEJ5SWRGbHVzaCA6IEdldEJ5SWQ7CisgICAgCiAgICAgaWYgKCFnZXRCeUlkU3RhdHVzLmlz
U2ltcGxlKCkgfHwgIU9wdGlvbnM6OmVuYWJsZUFjY2Vzc0lubGluaW5nKCkpIHsKICAgICAgICAg
c2V0KFZpcnR1YWxSZWdpc3RlcihkZXN0aW5hdGlvbk9wZXJhbmQpLAotICAgICAgICAgICAgYWRk
VG9HcmFwaCgKLSAgICAgICAgICAgICAgICBnZXRCeUlkU3RhdHVzLm1ha2VzQ2FsbHMoKSA/IEdl
dEJ5SWRGbHVzaCA6IEdldEJ5SWQsCi0gICAgICAgICAgICAgICAgT3BJbmZvKGlkZW50aWZpZXJO
dW1iZXIpLCBPcEluZm8ocHJlZGljdGlvbiksIGJhc2UpKTsKKyAgICAgICAgICAgIGFkZFRvR3Jh
cGgoZ2V0QnlJZCwgT3BJbmZvKGlkZW50aWZpZXJOdW1iZXIpLCBPcEluZm8ocHJlZGljdGlvbiks
IGJhc2UpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKICAgICBpZiAoZ2V0QnlJZFN0
YXR1cy5udW1WYXJpYW50cygpID4gMSkgewotICAgICAgICBpZiAoIWlzRlRMKG1fZ3JhcGgubV9w
bGFuLm1vZGUpIHx8ICFPcHRpb25zOjplbmFibGVQb2x5bW9ycGhpY0FjY2Vzc0lubGluaW5nKCkp
IHsKKyAgICAgICAgaWYgKGdldEJ5SWRTdGF0dXMubWFrZXNDYWxscygpIHx8ICFpc0ZUTChtX2dy
YXBoLm1fcGxhbi5tb2RlKQorICAgICAgICAgICAgfHwgIU9wdGlvbnM6OmVuYWJsZVBvbHltb3Jw
aGljQWNjZXNzSW5saW5pbmcoKSkgewogICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rlcihk
ZXN0aW5hdGlvbk9wZXJhbmQpLAotICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoR2V0QnlJZCwg
T3BJbmZvKGlkZW50aWZpZXJOdW1iZXIpLCBPcEluZm8ocHJlZGljdGlvbiksIGJhc2UpKTsKKyAg
ICAgICAgICAgICAgICBhZGRUb0dyYXBoKGdldEJ5SWQsIE9wSW5mbyhpZGVudGlmaWVyTnVtYmVy
KSwgT3BJbmZvKHByZWRpY3Rpb24pLCBiYXNlKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KICAgICAgICAgCkBAIC0xOTU0LDcgKzE5NTksNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2Vy
OjpoYW5kbGVHZXRCeUlkKAogICAgIGlmIChtX2dyYXBoLmNvbXBpbGF0aW9uKCkpCiAgICAgICAg
IG1fZ3JhcGguY29tcGlsYXRpb24oKS0+bm90aWNlSW5saW5lZEdldEJ5SWQoKTsKICAgICAKLSAg
ICBOb2RlKiBvcmlnaW5hbEJhc2VGb3JCYXNlbGluZUpJVCA9IGJhc2U7CisgICAgTm9kZSogb3Jp
Z2luYWxCYXNlID0gYmFzZTsKICAgICAgICAgICAgICAgICAKICAgICBhZGRUb0dyYXBoKENoZWNr
U3RydWN0dXJlLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQodmFyaWFudC5zdHJ1Y3R1
cmVTZXQoKSkpLCBiYXNlKTsKICAgICAKQEAgLTE5NjksMTggKzE5NzQsNTkgQEAgdm9pZCBCeXRl
Q29kZVBhcnNlcjo6aGFuZGxlR2V0QnlJZCgKICAgICAvLyBvbiBzb21ldGhpbmcgb3RoZXIgdGhh
biB0aGUgYmFzZSBmb2xsb3dpbmcgdGhlIENoZWNrU3RydWN0dXJlIG9uIGJhc2UsIG9yIGlmIHRo
ZQogICAgIC8vIGFjY2VzcyB3YXMgY29tcGlsZWQgdG8gYSBXZWFrSlNDb25zdGFudCBzcGVjaWZp
YyB2YWx1ZSwgaW4gd2hpY2ggY2FzZSB3ZSBtaWdodCBub3QKICAgICAvLyBoYXZlIGFueSBleHBs
aWNpdCB1c2Ugb2YgdGhlIGJhc2UgYXQgYWxsLgotICAgIGlmICh2YXJpYW50LnNwZWNpZmljVmFs
dWUoKSB8fCBvcmlnaW5hbEJhc2VGb3JCYXNlbGluZUpJVCAhPSBiYXNlKQotICAgICAgICBhZGRU
b0dyYXBoKFBoYW50b20sIG9yaWdpbmFsQmFzZUZvckJhc2VsaW5lSklUKTsKKyAgICBpZiAodmFy
aWFudC5zcGVjaWZpY1ZhbHVlKCkgfHwgb3JpZ2luYWxCYXNlICE9IGJhc2UpCisgICAgICAgIGFk
ZFRvR3JhcGgoUGhhbnRvbSwgb3JpZ2luYWxCYXNlKTsKICAgICAKLSAgICBpZiAodmFyaWFudC5z
cGVjaWZpY1ZhbHVlKCkpIHsKLSAgICAgICAgQVNTRVJUKHZhcmlhbnQuc3BlY2lmaWNWYWx1ZSgp
LmlzQ2VsbCgpKTsKLSAgICAgICAgCi0gICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoZGVzdGlu
YXRpb25PcGVyYW5kKSwgY2VsbENvbnN0YW50KHZhcmlhbnQuc3BlY2lmaWNWYWx1ZSgpLmFzQ2Vs
bCgpKSk7CisgICAgTm9kZSogbG9hZGVkVmFsdWU7CisgICAgaWYgKHZhcmlhbnQuc3BlY2lmaWNW
YWx1ZSgpKQorICAgICAgICBsb2FkZWRWYWx1ZSA9IGNlbGxDb25zdGFudCh2YXJpYW50LnNwZWNp
ZmljVmFsdWUoKS5hc0NlbGwoKSk7CisgICAgZWxzZSB7CisgICAgICAgIGxvYWRlZFZhbHVlID0g
aGFuZGxlR2V0QnlPZmZzZXQoCisgICAgICAgICAgICBwcmVkaWN0aW9uLCBiYXNlLCBpZGVudGlm
aWVyTnVtYmVyLCB2YXJpYW50Lm9mZnNldCgpLAorICAgICAgICAgICAgdmFyaWFudC5jYWxsTGlu
a1N0YXR1cygpID8gR2V0R2V0dGVyU2V0dGVyQnlPZmZzZXQgOiBHZXRCeU9mZnNldCk7CisgICAg
fQorICAgIAorICAgIGlmICghdmFyaWFudC5jYWxsTGlua1N0YXR1cygpKSB7CisgICAgICAgIHNl
dChWaXJ0dWFsUmVnaXN0ZXIoZGVzdGluYXRpb25PcGVyYW5kKSwgbG9hZGVkVmFsdWUpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIGhhbmRsZUdldEJ5T2Zmc2V0KAotICAgICAg
ICBkZXN0aW5hdGlvbk9wZXJhbmQsIHByZWRpY3Rpb24sIGJhc2UsIGlkZW50aWZpZXJOdW1iZXIs
IHZhcmlhbnQub2Zmc2V0KCkpOworICAgIE5vZGUqIGdldHRlciA9IGFkZFRvR3JhcGgoR2V0R2V0
dGVyLCBsb2FkZWRWYWx1ZSk7CisgICAgCisgICAgLy8gTWFrZSBhIGNhbGwuIFdlIGRvbid0IHRy
eSB0byBnZXQgZmFuY3kgd2l0aCB1c2luZyB0aGUgc21hbGxlc3Qgb3BlcmFuZCBudW1iZXIgYmVj
YXVzZQorICAgIC8vIHRoZSBzdGFjayBsYXlvdXQgcGhhc2Ugc2hvdWxkIGNvbXByZXNzIHRoZSBz
dGFjayBhbnl3YXkuCisgICAgCisgICAgdW5zaWduZWQgbnVtYmVyT2ZQYXJhbWV0ZXJzID0gMDsK
KyAgICBudW1iZXJPZlBhcmFtZXRlcnMrKzsgLy8gVGhlICd0aGlzJyBhcmd1bWVudC4KKyAgICBu
dW1iZXJPZlBhcmFtZXRlcnMrKzsgLy8gVHJ1ZSByZXR1cm4gUEMuCisgICAgCisgICAgLy8gU3Rh
cnQgd2l0aCBhIHJlZ2lzdGVyIG9mZnNldCB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSBsYXN0IGlu
LXVzZSByZWdpc3Rlci4KKyAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSB2aXJ0dWFsUmVnaXN0ZXJG
b3JMb2NhbCgKKyAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5tX251
bUNhbGxlZVJlZ2lzdGVycyAtIDEpLm9mZnNldCgpOworICAgIHJlZ2lzdGVyT2Zmc2V0IC09IG51
bWJlck9mUGFyYW1ldGVyczsKKyAgICByZWdpc3Rlck9mZnNldCAtPSBKU1N0YWNrOjpDYWxsRnJh
bWVIZWFkZXJTaXplOworICAgIAorICAgIC8vIEdldCB0aGUgYWxpZ25tZW50IHJpZ2h0LgorICAg
IHJlZ2lzdGVyT2Zmc2V0ID0gLVdURjo6cm91bmRVcFRvTXVsdGlwbGVPZigKKyAgICAgICAgc3Rh
Y2tBbGlnbm1lbnRSZWdpc3RlcnMoKSwKKyAgICAgICAgLXJlZ2lzdGVyT2Zmc2V0KTsKKyAgICAK
KyAgICBlbnN1cmVMb2NhbHMoCisgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFu
ZCgKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlcihyZWdpc3Rlck9mZnNldCkpLnRvTG9jYWwo
KSk7CisgICAgCisgICAgLy8gSXNzdWUgU2V0TG9jYWxzLiBUaGlzIGhhcyB0d28gZWZmZWN0czoK
KyAgICAvLyAxKSBUaGF0J3MgaG93IGhhbmRsZUNhbGwoKSBzZWVzIHRoZSBhcmd1bWVudHMuCisg
ICAgLy8gMikgSWYgd2UgaW5saW5lIHRoZW4gdGhpcyBlbnN1cmVzIHRoYXQgdGhlIGFyZ3VtZW50
cyBhcmUgZmx1c2hlZCBzbyB0aGF0IGlmIHlvdSB1c2UKKyAgICAvLyAgICB0aGUgZHJlYWRlZCBh
cmd1bWVudHMgb2JqZWN0IG9uIHRoZSBnZXR0ZXIsIHRoZSByaWdodCB0aGluZ3MgaGFwcGVuLiBX
ZWxsLCBzb3J0IG9mIC0KKyAgICAvLyAgICBzaW5jZSB3ZSBvbmx5IHJlYWxseSBjYXJlIGFib3V0
ICd0aGlzJyBpbiB0aGlzIGNhc2UuIEJ1dCB3ZSdyZSBub3QgZ29pbmcgdG8gdGFrZSB0aGF0Cisg
ICAgLy8gICAgc2hvcnRjdXQuCisgICAgaW50IG5leHRSZWdpc3RlciA9IHJlZ2lzdGVyT2Zmc2V0
ICsgSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsKKyAgICBzZXQoVmlydHVhbFJlZ2lzdGVy
KG5leHRSZWdpc3RlcisrKSwgb3JpZ2luYWxCYXNlLCBJbW1lZGlhdGVOYWtlZFNldCk7CisgICAg
CisgICAgaGFuZGxlQ2FsbCgKKyAgICAgICAgZGVzdGluYXRpb25PcGVyYW5kLCBDYWxsLCBJbmxp
bmVDYWxsRnJhbWU6OkdldHRlckNhbGwsIE9QQ09ERV9MRU5HVEgob3BfZ2V0X2J5X2lkKSwKKyAg
ICAgICAgZ2V0dGVyLCBudW1iZXJPZlBhcmFtZXRlcnMgLSAxLCByZWdpc3Rlck9mZnNldCwgKnZh
cmlhbnQuY2FsbExpbmtTdGF0dXMoKSk7CiB9CiAKIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmVtaXRQ
dXRCeUlkKApAQCAtMzM3Niw3ICszNDIyLDcgQEAgQnl0ZUNvZGVQYXJzZXI6OklubGluZVN0YWNr
RW50cnk6OklubGluZQogICAgIFZpcnR1YWxSZWdpc3RlciByZXR1cm5WYWx1ZVZSLAogICAgIFZp
cnR1YWxSZWdpc3RlciBpbmxpbmVDYWxsRnJhbWVTdGFydCwKICAgICBpbnQgYXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMsCi0gICAgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQorICAgIElu
bGluZUNhbGxGcmFtZTo6S2luZCBraW5kKQogICAgIDogbV9ieXRlQ29kZVBhcnNlcihieXRlQ29k
ZVBhcnNlcikKICAgICAsIG1fY29kZUJsb2NrKGNvZGVCbG9jaykKICAgICAsIG1fcHJvZmlsZWRC
bG9jayhwcm9maWxlZEJsb2NrKQpAQCAtMzQzNSw3ICszNDgxLDcgQEAgQnl0ZUNvZGVQYXJzZXI6
OklubGluZVN0YWNrRW50cnk6OklubGluZQogICAgICAgICAgICAgbV9pbmxpbmVDYWxsRnJhbWUt
PmlzQ2xvc3VyZUNhbGwgPSB0cnVlOwogICAgICAgICBtX2lubGluZUNhbGxGcmFtZS0+Y2FsbGVy
ID0gYnl0ZUNvZGVQYXJzZXItPmN1cnJlbnRDb2RlT3JpZ2luKCk7CiAgICAgICAgIG1faW5saW5l
Q2FsbEZyYW1lLT5hcmd1bWVudHMucmVzaXplKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKTsg
Ly8gU2V0IHRoZSBudW1iZXIgb2YgYXJndW1lbnRzIGluY2x1ZGluZyB0aGlzLCBidXQgZG9uJ3Qg
Y29uZmlndXJlIHRoZSB2YWx1ZSByZWNvdmVyaWVzLCB5ZXQuCi0gICAgICAgIG1faW5saW5lQ2Fs
bEZyYW1lLT5raW5kID0gSW5saW5lQ2FsbEZyYW1lOjpraW5kRm9yKGtpbmQpOworICAgICAgICBt
X2lubGluZUNhbGxGcmFtZS0+a2luZCA9IGtpbmQ7CiAgICAgICAgIAogICAgICAgICBpZiAobV9p
bmxpbmVDYWxsRnJhbWUtPmNhbGxlci5pbmxpbmVDYWxsRnJhbWUpCiAgICAgICAgICAgICBtX2lu
bGluZUNhbGxGcmFtZS0+Y2FwdHVyZWRWYXJzID0gbV9pbmxpbmVDYWxsRnJhbWUtPmNhbGxlci5p
bmxpbmVDYWxsRnJhbWUtPmNhcHR1cmVkVmFyczsKQEAgLTM2NzQsNyArMzcyMCw3IEBAIGJvb2wg
Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlKCkKICAgICAKICAgICBJbmxpbmVTdGFja0VudHJ5IGlubGlu
ZVN0YWNrRW50cnkoCiAgICAgICAgIHRoaXMsIG1fY29kZUJsb2NrLCBtX3Byb2ZpbGVkQmxvY2ss
IDAsIDAsIFZpcnR1YWxSZWdpc3RlcigpLCBWaXJ0dWFsUmVnaXN0ZXIoKSwKLSAgICAgICAgbV9j
b2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgQ29kZUZvckNhbGwpOworICAgICAgICBtX2NvZGVC
bG9jay0+bnVtUGFyYW1ldGVycygpLCBJbmxpbmVDYWxsRnJhbWU6OkNhbGwpOwogICAgIAogICAg
IHBhcnNlQ29kZUJsb2NrKCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q1NFUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q1NFUGhhc2UuY3BwCShyZXZpc2lvbiAxNjkwMTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NTRVBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjkwLDYgKzY5MCw0MCBAQCBw
cml2YXRlOgogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgCisgICAgTm9kZSogZ2V0R2V0
dGVyU2V0dGVyQnlPZmZzZXRMb2FkRWxpbWluYXRpb24odW5zaWduZWQgaWRlbnRpZmllck51bWJl
ciwgTm9kZSogYmFzZSkKKyAgICB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1faW5kZXhJ
bkJsb2NrOyBpLS07KSB7CisgICAgICAgICAgICBOb2RlKiBub2RlID0gbV9jdXJyZW50QmxvY2st
PmF0KGkpOworICAgICAgICAgICAgaWYgKG5vZGUgPT0gYmFzZSkKKyAgICAgICAgICAgICAgICBi
cmVhazsKKworICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CisgICAgICAgICAgICBj
YXNlIEdldEdldHRlclNldHRlckJ5T2Zmc2V0OgorICAgICAgICAgICAgICAgIGlmIChub2RlLT5j
aGlsZDIoKSA9PSBiYXNlCisgICAgICAgICAgICAgICAgICAgICYmIG1fZ3JhcGgubV9zdG9yYWdl
QWNjZXNzRGF0YVtub2RlLT5zdG9yYWdlQWNjZXNzRGF0YUluZGV4KCldLmlkZW50aWZpZXJOdW1i
ZXIgPT0gaWRlbnRpZmllck51bWJlcikKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgY2FzZSBQdXRCeVZhbERpcmVjdDoKKyAgICAgICAgICAgIGNhc2UgUHV0QnlWYWw6CisgICAg
ICAgICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6CisgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgu
YnlWYWxJc1B1cmUobm9kZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gSWYgUHV0QnlWYWwg
c3BlY3VsYXRlcyB0aGF0IGl0J3MgYWNjZXNzaW5nIGFuIGFycmF5IHdpdGggYW4KKyAgICAgICAg
ICAgICAgICAgICAgLy8gaW50ZWdlciBpbmRleCwgdGhlbiBpdCdzIGltcG9zc2libGUgZm9yIGl0
IHRvIGNhdXNlIGEgc3RydWN0dXJlCisgICAgICAgICAgICAgICAgICAgIC8vIGNoYW5nZS4KKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVyc1dvcmxkKG5vZGUpKQorICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgCiAgICAgTm9kZSog
cHV0QnlPZmZzZXRTdG9yZUVsaW1pbmF0aW9uKHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIE5v
ZGUqIGNoaWxkMSkKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1faW5kZXhJbkJs
b2NrOyBpLS07KSB7CkBAIC04NDUsMjUgKzg3OSwxOCBAQCBwcml2YXRlOgogICAgICAgICByZXR1
cm4gMDsKICAgICB9CiAgICAgCi0gICAgTm9kZSogZ2V0VHlwZWRBcnJheUJ5dGVPZmZzZXRMb2Fk
RWxpbWluYXRpb24oTm9kZSogY2hpbGQxKQorICAgIE5vZGUqIGdldEludGVybmFsRmllbGRMb2Fk
RWxpbWluYXRpb24oTm9kZVR5cGUgb3AsIE5vZGUqIGNoaWxkMSkKICAgICB7CiAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IG1faW5kZXhJbkJsb2NrOyBpLS07KSB7CiAgICAgICAgICAgICBOb2Rl
KiBub2RlID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOwogICAgICAgICAgICAgaWYgKG5vZGUgPT0g
Y2hpbGQxKSAKICAgICAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICAgICAgc3dpdGNoIChu
b2RlLT5vcCgpKSB7Ci0gICAgICAgICAgICBjYXNlIEdldFR5cGVkQXJyYXlCeXRlT2Zmc2V0OiB7
Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpID09IGNoaWxkMSkKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIG5vZGU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICB9CisgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBvcCAmJiBub2RlLT5jaGlsZDEo
KSA9PSBjaGlsZDEpCisgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7CiAKLSAgICAgICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGguY2xvYmJlcnNXb3JsZChub2Rl
KSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVyc1dvcmxkKG5v
ZGUpKQorICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9CiAgICAgICAgIHJldHVy
biAwOwogICAgIH0KQEAgLTE0MDEsMTAgKzE0MjgsMTIgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBHZXRUeXBlZEFy
cmF5Qnl0ZU9mZnNldDogeworICAgICAgICBjYXNlIEdldFR5cGVkQXJyYXlCeXRlT2Zmc2V0Ogor
ICAgICAgICBjYXNlIEdldEdldHRlcjoKKyAgICAgICAgY2FzZSBHZXRTZXR0ZXI6IHsKICAgICAg
ICAgICAgIGlmIChjc2VNb2RlID09IFN0b3JlRWxpbWluYXRpb24pCiAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICBzZXRSZXBsYWNlbWVudChnZXRUeXBlZEFycmF5Qnl0ZU9mZnNl
dExvYWRFbGltaW5hdGlvbihub2RlLT5jaGlsZDEoKS5ub2RlKCkpKTsKKyAgICAgICAgICAgIHNl
dFJlcGxhY2VtZW50KGdldEludGVybmFsRmllbGRMb2FkRWxpbWluYXRpb24obm9kZS0+b3AoKSwg
bm9kZS0+Y2hpbGQxKCkubm9kZSgpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQog
CkBAIC0xNDIwLDYgKzE0NDksMTIgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHNldFJlcGxhY2Vt
ZW50KGdldEJ5T2Zmc2V0TG9hZEVsaW1pbmF0aW9uKG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0
YVtub2RlLT5zdG9yYWdlQWNjZXNzRGF0YUluZGV4KCldLmlkZW50aWZpZXJOdW1iZXIsIG5vZGUt
PmNoaWxkMigpLm5vZGUoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKKyAg
ICAgICAgY2FzZSBHZXRHZXR0ZXJTZXR0ZXJCeU9mZnNldDoKKyAgICAgICAgICAgIGlmIChjc2VN
b2RlID09IFN0b3JlRWxpbWluYXRpb24pCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICBzZXRSZXBsYWNlbWVudChnZXRHZXR0ZXJTZXR0ZXJCeU9mZnNldExvYWRFbGltaW5hdGlv
bihtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGFbbm9kZS0+c3RvcmFnZUFjY2Vzc0RhdGFJbmRl
eCgpXS5pZGVudGlmaWVyTnVtYmVyLCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgTXVsdGlHZXRCeU9mZnNldDoK
ICAgICAgICAgICAgIGlmIChjc2VNb2RlID09IFN0b3JlRWxpbWluYXRpb24pCiAgICAgICAgICAg
ICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJp
emUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJp
emUuaAkocmV2aXNpb24gMTY5MDE0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
bG9iYmVyaXplLmgJKHdvcmtpbmcgY29weSkKQEAgLTIxMyw2ICsyMTMsMTQgQEAgdm9pZCBjbG9i
YmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgICAgICB3cml0ZShXb3JsZCk7CiAg
ICAgICAgIHJldHVybjsKICAgICAgICAgCisgICAgY2FzZSBHZXRHZXR0ZXI6CisgICAgICAgIHJl
YWQoR2V0dGVyU2V0dGVyX2dldHRlcik7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAg
Y2FzZSBHZXRTZXR0ZXI6CisgICAgICAgIHJlYWQoR2V0dGVyU2V0dGVyX3NldHRlcik7CisgICAg
ICAgIHJldHVybjsKKyAgICAgICAgCiAgICAgY2FzZSBHZXRDYWxsZWU6CiAgICAgICAgIHJlYWQo
QWJzdHJhY3RIZWFwKFZhcmlhYmxlcywgSlNTdGFjazo6Q2FsbGVlKSk7CiAgICAgICAgIHJldHVy
bjsKQEAgLTQ4MSw2ICs0ODksNyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2Rl
KiBub2RlCiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBHZXRCeU9mZnNldDoK
KyAgICBjYXNlIEdldEdldHRlclNldHRlckJ5T2Zmc2V0OgogICAgICAgICByZWFkKEFic3RyYWN0
SGVhcChOYW1lZFByb3BlcnRpZXMsIGdyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGFbbm9kZS0+c3Rv
cmFnZUFjY2Vzc0RhdGFJbmRleCgpXS5pZGVudGlmaWVyTnVtYmVyKSk7CiAgICAgICAgIHJldHVy
bjsKICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhh
c2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQ
aGFzZS5jcHAJKHJldmlzaW9uIDE2OTAxNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRml4dXBQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg4NSw3ICs4ODUsOSBAQCBwcml2
YXRlOgogICAgICAgICBjYXNlIEdldENsb3N1cmVSZWdpc3RlcnM6CiAgICAgICAgIGNhc2UgU2tp
cFRvcFNjb3BlOgogICAgICAgICBjYXNlIFNraXBTY29wZToKLSAgICAgICAgY2FzZSBHZXRTY29w
ZTogeworICAgICAgICBjYXNlIEdldFNjb3BlOgorICAgICAgICBjYXNlIEdldEdldHRlcjoKKyAg
ICAgICAgY2FzZSBHZXRTZXR0ZXI6IHsKICAgICAgICAgICAgIGZpeEVkZ2U8S25vd25DZWxsVXNl
Pihub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtOTQ1
LDcgKzk0Nyw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAg
ICAgICAgICAgCi0gICAgICAgIGNhc2UgR2V0QnlPZmZzZXQ6IHsKKyAgICAgICAgY2FzZSBHZXRC
eU9mZnNldDoKKyAgICAgICAgY2FzZSBHZXRHZXR0ZXJTZXR0ZXJCeU9mZnNldDogewogICAgICAg
ICAgICAgaWYgKCFub2RlLT5jaGlsZDEoKS0+aGFzU3RvcmFnZVJlc3VsdCgpKQogICAgICAgICAg
ICAgICAgIGZpeEVkZ2U8S25vd25DZWxsVXNlPihub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAg
ICBmaXhFZGdlPEtub3duQ2VsbFVzZT4obm9kZS0+Y2hpbGQyKCkpOwpAQCAtMTAzNCw2ICsxMDM3
LDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgIE5vZGUqIGdsb2JhbE9iamVjdE5vZGUgPSBtX2lu
c2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgIG1faW5kZXhJbkJsb2NrLCBT
cGVjTm9uZSwgV2Vha0pTQ29uc3RhbnQsIG5vZGUtPm9yaWdpbiwgCiAgICAgICAgICAgICAgICAg
T3BJbmZvKG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpKTsK
KyAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIHByb2JhYmx5IHNob3VsZG4ndCBoYXZlIGFuIHVu
Y29uZGl0aW9uYWwgYmFycmllci4KKyAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMzMxMDQKICAgICAgICAgICAgIE5vZGUqIGJhcnJpZXJOb2Rl
ID0gbV9ncmFwaC5hZGROb2RlKAogICAgICAgICAgICAgICAgIFNwZWNOb25lLCBTdG9yZUJhcnJp
ZXIsIG1fY3VycmVudE5vZGUtPm9yaWdpbiwgCiAgICAgICAgICAgICAgICAgRWRnZShnbG9iYWxP
YmplY3ROb2RlLCBLbm93bkNlbGxVc2UpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHSklUQ29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCShyZXZpc2lvbiAxNjkwMTQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDE3
LDcgKzQxNyw3IEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmtGdW5jdGlvbigpCiAgICAgbV9qaXRD
b2RlLT5zaHJpbmtUb0ZpdCgpOwogICAgIGNvZGVCbG9jaygpLT5zaHJpbmtUb0ZpdChDb2RlQmxv
Y2s6OkxhdGVTaHJpbmspOwogICAgIAotICAgIGxpbmtCdWZmZXItPmxpbmsobV9jYWxsQXJpdHlG
aXh1cCwgRnVuY3Rpb25QdHIoKG1fdm0tPmdldENUSVN0dWIoYXJpdHlGaXh1cCkpLmNvZGUoKS5l
eGVjdXRhYmxlQWRkcmVzcygpKSk7CisgICAgbGlua0J1ZmZlci0+bGluayhtX2NhbGxBcml0eUZp
eHVwLCBGdW5jdGlvblB0cigobV92bS0+Z2V0Q1RJU3R1Yihhcml0eUZpeHVwR2VuZXJhdG9yKSku
Y29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKICAgICAKICAgICBkaXNhc3NlbWJsZSgqbGlu
a0J1ZmZlcik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCShyZXZpc2lv
biAxNjkwMTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTE0Niw3ICsxMTQ2LDcgQEAgc3RydWN0IE5vZGUgewogICAgIAogICAgIGJv
b2wgaGFzU3RvcmFnZUFjY2Vzc0RhdGEoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG9wKCkgPT0g
R2V0QnlPZmZzZXQgfHwgb3AoKSA9PSBQdXRCeU9mZnNldDsKKyAgICAgICAgcmV0dXJuIG9wKCkg
PT0gR2V0QnlPZmZzZXQgfHwgb3AoKSA9PSBHZXRHZXR0ZXJTZXR0ZXJCeU9mZnNldCB8fCBvcCgp
ID09IFB1dEJ5T2Zmc2V0OwogICAgIH0KICAgICAKICAgICB1bnNpZ25lZCBzdG9yYWdlQWNjZXNz
RGF0YUluZGV4KCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJ
KHJldmlzaW9uIDE2OTAxNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5
cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTc2LDcgKzE3NiwxMCBAQCBuYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIERGRyB7CiAgICAgbWFjcm8oR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZSwgTm9k
ZVJlc3VsdFN0b3JhZ2UpIFwKICAgICBtYWNybyhDb25zdGFudFN0b3JhZ2VQb2ludGVyLCBOb2Rl
UmVzdWx0U3RvcmFnZSkgXAogICAgIG1hY3JvKFR5cGVkQXJyYXlXYXRjaHBvaW50LCBOb2RlTXVz
dEdlbmVyYXRlKSBcCisgICAgbWFjcm8oR2V0R2V0dGVyLCBOb2RlUmVzdWx0SlMpIFwKKyAgICBt
YWNybyhHZXRTZXR0ZXIsIE5vZGVSZXN1bHRKUykgXAogICAgIG1hY3JvKEdldEJ5T2Zmc2V0LCBO
b2RlUmVzdWx0SlMpIFwKKyAgICBtYWNybyhHZXRHZXR0ZXJTZXR0ZXJCeU9mZnNldCwgTm9kZVJl
c3VsdEpTKSBcCiAgICAgbWFjcm8oTXVsdGlHZXRCeU9mZnNldCwgTm9kZVJlc3VsdEpTKSBcCiAg
ICAgbWFjcm8oUHV0QnlPZmZzZXQsIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhNdWx0
aVB1dEJ5T2Zmc2V0LCBOb2RlTXVzdEdlbmVyYXRlKSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCShyZXZp
c2lvbiAxNjkwMTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21w
aWxlckNvbW1vbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwOCwxMiArMTA4LDQ0IEBAIHZvaWQg
cmVpZnlJbmxpbmVkQ2FsbEZyYW1lcyhDQ2FsbEhlbHBlcnMKICAgICAgICAgSW5saW5lQ2FsbEZy
YW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZTsKICAgICAg
ICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IGppdC5iYXNlbGluZUNvZGVCbG9ja0Zv
cihjb2RlT3JpZ2luKTsKICAgICAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9ja0ZvckNh
bGxlciA9IGppdC5iYXNlbGluZUNvZGVCbG9ja0ZvcihpbmxpbmVDYWxsRnJhbWUtPmNhbGxlcik7
CisgICAgICAgIHZvaWQqIGp1bXBUYXJnZXQ7CisgICAgICAgIHZvaWQqIHRydWVSZXR1cm5QQyA9
IG51bGxwdHI7CisgICAgICAgIAogICAgICAgICB1bnNpZ25lZCBjYWxsQnl0ZWNvZGVJbmRleCA9
IGlubGluZUNhbGxGcmFtZS0+Y2FsbGVyLmJ5dGVjb2RlSW5kZXg7Ci0gICAgICAgIENhbGxMaW5r
SW5mbyogY2FsbExpbmtJbmZvID0KLSAgICAgICAgICAgIGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2Fs
bGVyLT5nZXRDYWxsTGlua0luZm9Gb3JCeXRlY29kZUluZGV4KGNhbGxCeXRlY29kZUluZGV4KTsK
LSAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2FsbExpbmtJbmZvKTsKICAgICAgICAgCi0gICAgICAg
IHZvaWQqIGp1bXBUYXJnZXQgPSBjYWxsTGlua0luZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbi5leGVj
dXRhYmxlQWRkcmVzcygpOworICAgICAgICBzd2l0Y2ggKGlubGluZUNhbGxGcmFtZS0+a2luZCkg
eworICAgICAgICBjYXNlIElubGluZUNhbGxGcmFtZTo6Q2FsbDoKKyAgICAgICAgY2FzZSBJbmxp
bmVDYWxsRnJhbWU6OkNvbnN0cnVjdDogeworICAgICAgICAgICAgQ2FsbExpbmtJbmZvKiBjYWxs
TGlua0luZm8gPQorICAgICAgICAgICAgICAgIGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyLT5n
ZXRDYWxsTGlua0luZm9Gb3JCeXRlY29kZUluZGV4KGNhbGxCeXRlY29kZUluZGV4KTsKKyAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxMaW5rSW5mbyk7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIGp1bXBUYXJnZXQgPSBjYWxsTGlua0luZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbi5leGVj
dXRhYmxlQWRkcmVzcygpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
ICAgIAorICAgICAgICBjYXNlIElubGluZUNhbGxGcmFtZTo6R2V0dGVyQ2FsbDoKKyAgICAgICAg
Y2FzZSBJbmxpbmVDYWxsRnJhbWU6OlNldHRlckNhbGw6IHsKKyAgICAgICAgICAgIFN0cnVjdHVy
ZVN0dWJJbmZvKiBzdHViSW5mbyA9CisgICAgICAgICAgICAgICAgYmFzZWxpbmVDb2RlQmxvY2tG
b3JDYWxsZXItPmZpbmRTdHViSW5mbyhDb2RlT3JpZ2luKGNhbGxCeXRlY29kZUluZGV4KSk7Cisg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzdHViSW5mbyk7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIHN3aXRjaCAoaW5saW5lQ2FsbEZyYW1lLT5raW5kKSB7CisgICAgICAgICAgICBjYXNl
IElubGluZUNhbGxGcmFtZTo6R2V0dGVyQ2FsbDoKKyAgICAgICAgICAgICAgICBqdW1wVGFyZ2V0
ID0gaml0LnZtKCktPmdldENUSVN0dWIoYmFzZWxpbmVHZXR0ZXJSZXR1cm5UaHVua0dlbmVyYXRv
cikuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICBjYXNlIElubGluZUNhbGxGcmFtZTo6U2V0dGVyQ2FsbDoKKyAgICAgICAgICAg
ICAgICBqdW1wVGFyZ2V0ID0gaml0LnZtKCktPmdldENUSVN0dWIoYmFzZWxpbmVTZXR0ZXJSZXR1
cm5UaHVua0dlbmVyYXRvcikuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHRydWVSZXR1cm5QQyA9IHN0dWJJbmZv
LT5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldCgKKyAgICAgICAgICAgICAgICBzdHVi
SW5mby0+cGF0Y2guZGVsdGFDYWxsVG9Eb25lKS5leGVjdXRhYmxlQWRkcmVzcygpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0gfQogCiAgICAgICAgIEdQUlJlZyBjYWxsZXJGcmFtZUdQ
UjsKICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+Y2FsbGVyLmlubGluZUNhbGxGcmFtZSkg
ewpAQCAtMTIyLDEyICsxNTQsMTUgQEAgdm9pZCByZWlmeUlubGluZWRDYWxsRnJhbWVzKENDYWxs
SGVscGVycwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIGNhbGxlckZyYW1lR1BSID0gR1BS
SW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXI7CiAgICAgICAgIAorICAgICAgICBqaXQuc3RvcmVQdHIo
QXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGp1bXBUYXJnZXQpLCBBc3NlbWJseUhlbHBl
cnM6OmFkZHJlc3NGb3JCeXRlT2Zmc2V0KGlubGluZUNhbGxGcmFtZS0+cmV0dXJuUENPZmZzZXQo
KSkpOworICAgICAgICBpZiAodHJ1ZVJldHVyblBDKQorICAgICAgICAgICAgaml0LnN0b3JlUHRy
KEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbVB0cih0cnVlUmV0dXJuUEMpLCBBc3NlbWJseUhl
bHBlcnM6OmFkZHJlc3NGb3IoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIHZpcnR1YWxS
ZWdpc3RlckZvckFyZ3VtZW50KGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKSkub2Zm
c2V0KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAKICNpZiBVU0UoSlNWQUxVRTY0KQog
ICAgICAgICBqaXQuc3RvcmVQdHIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGJhc2Vs
aW5lQ29kZUJsb2NrKSwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0
ZXIpKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBKU1N0YWNrOjpDb2RlQmxvY2spKSk7
CiAgICAgICAgIGlmICghaW5saW5lQ2FsbEZyYW1lLT5pc0Nsb3N1cmVDYWxsKQogICAgICAgICAg
ICAgaml0LnN0b3JlNjQoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5j
b2RlKEpTVmFsdWUoaW5saW5lQ2FsbEZyYW1lLT5jYWxsZWVDb25zdGFudCgpLT5zY29wZSgpKSkp
LCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5lQ2Fs
bEZyYW1lLT5zdGFja09mZnNldCArIEpTU3RhY2s6OlNjb3BlQ2hhaW4pKSk7CiAgICAgICAgIGpp
dC5zdG9yZTY0KGNhbGxlckZyYW1lR1BSLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3JCeXRl
T2Zmc2V0KGlubGluZUNhbGxGcmFtZS0+Y2FsbGVyRnJhbWVPZmZzZXQoKSkpOwotICAgICAgICBq
aXQuc3RvcmVQdHIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGp1bXBUYXJnZXQpLCBB
c3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3JCeXRlT2Zmc2V0KGlubGluZUNhbGxGcmFtZS0+cmV0
dXJuUENPZmZzZXQoKSkpOwogICAgICAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsRnJh
bWU6OkxvY2F0aW9uOjplbmNvZGVBc0J5dGVjb2RlT2Zmc2V0KGNvZGVPcmlnaW4uYnl0ZWNvZGVJ
bmRleCk7CiAgICAgICAgIGppdC5zdG9yZTMyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMy
KGxvY2F0aW9uQml0cyksIEFzc2VtYmx5SGVscGVyczo6dGFnRm9yKChWaXJ0dWFsUmVnaXN0ZXIp
KGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBKU1N0YWNrOjpBcmd1bWVudENvdW50KSkp
OwogICAgICAgICBqaXQuc3RvcmUzMihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihpbmxp
bmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkpLCBBc3NlbWJseUhlbHBlcnM6OnBheWxvYWRG
b3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIEpTU3Rh
Y2s6OkFyZ3VtZW50Q291bnQpKSk7CkBAIC0xNDMsNyArMTc4LDYgQEAgdm9pZCByZWlmeUlubGlu
ZWRDYWxsRnJhbWVzKENDYWxsSGVscGVycwogICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZS0+
aXNDbG9zdXJlQ2FsbCkKICAgICAgICAgICAgIGppdC5zdG9yZVB0cihBc3NlbWJseUhlbHBlcnM6
OlRydXN0ZWRJbW1QdHIoaW5saW5lQ2FsbEZyYW1lLT5jYWxsZWVDb25zdGFudCgpLT5zY29wZSgp
KSwgQXNzZW1ibHlIZWxwZXJzOjpwYXlsb2FkRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNh
bGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBKU1N0YWNrOjpTY29wZUNoYWluKSkpOwogICAgICAgICBq
aXQuc3RvcmVQdHIoY2FsbGVyRnJhbWVHUFIsIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvckJ5
dGVPZmZzZXQoaW5saW5lQ2FsbEZyYW1lLT5jYWxsZXJGcmFtZU9mZnNldCgpKSk7Ci0gICAgICAg
IGppdC5zdG9yZVB0cihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoanVtcFRhcmdldCks
IEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvckJ5dGVPZmZzZXQoaW5saW5lQ2FsbEZyYW1lLT5y
ZXR1cm5QQ09mZnNldCgpKSk7CiAgICAgICAgIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiA9IGJh
c2VsaW5lQ29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5iZWdpbigpICsgY29kZU9yaWdpbi5ieXRl
Y29kZUluZGV4OwogICAgICAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsRnJhbWU6Okxv
Y2F0aW9uOjplbmNvZGVBc0J5dGVjb2RlSW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rpb24pOwogICAgICAg
ICBqaXQuc3RvcmUzMihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihsb2NhdGlvbkJpdHMp
LCBBc3NlbWJseUhlbHBlcnM6OnRhZ0ZvcigoVmlydHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxsRnJh
bWUtPnN0YWNrT2Zmc2V0ICsgSlNTdGFjazo6QXJndW1lbnRDb3VudCkpKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3Bh
Z2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxNjkwMTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTg4LDYgKzE4OCwyMCBAQCBwcml2YXRlOgogICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQ
cmVkaWN0aW9uKG5vZGUtPmdldEhlYXBQcmVkaWN0aW9uKCkpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEdldEdldHRlclNldHRlckJ5
T2Zmc2V0OiB7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24oU3BlY0NlbGxP
dGhlcik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgR2V0
R2V0dGVyOgorICAgICAgICBjYXNlIEdldFNldHRlcjoKKyAgICAgICAgY2FzZSBHZXRDYWxsZWU6
CisgICAgICAgIGNhc2UgTmV3RnVuY3Rpb25Ob0NoZWNrOgorICAgICAgICBjYXNlIE5ld0Z1bmN0
aW9uRXhwcmVzc2lvbjogeworICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0aW9uKFNw
ZWNGdW5jdGlvbik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogCiAgICAgICAgIGNh
c2UgU3RyaW5nQ2hhckNvZGVBdDogewogICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0
aW9uKFNwZWNJbnQzMik7CkBAIC00MjMsMTEgKzQzNyw2IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgR2V0Q2FsbGVl
OiB7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24oU3BlY0Z1bmN0aW9uKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgICAgICAKICAgICAgICAgY2Fz
ZSBDcmVhdGVUaGlzOgogICAgICAgICBjYXNlIE5ld09iamVjdDogewogICAgICAgICAgICAgY2hh
bmdlZCB8PSBzZXRQcmVkaWN0aW9uKFNwZWNGaW5hbE9iamVjdCk7CkBAIC00OTAsMTIgKzQ5OSw2
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAg
Ci0gICAgICAgIGNhc2UgTmV3RnVuY3Rpb25Ob0NoZWNrOgotICAgICAgICBjYXNlIE5ld0Z1bmN0
aW9uRXhwcmVzc2lvbjogewotICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0aW9uKFNw
ZWNGdW5jdGlvbik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAgICAg
CiAgICAgICAgIGNhc2UgUHV0QnlWYWxBbGlhczoKICAgICAgICAgY2FzZSBHZXRBcnJheUxlbmd0
aDoKICAgICAgICAgY2FzZSBHZXRUeXBlZEFycmF5Qnl0ZU9mZnNldDoKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCShyZXZpc2lvbiAxNjkwMTQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjUzLDYgKzI1Myw4IEBAIGJvb2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0
YXRlVHlwZSYgc3QKICAgICBjYXNlIFZhbHVlUmVwOgogICAgIGNhc2UgRG91YmxlUmVwOgogICAg
IGNhc2UgSW50NTJSZXA6CisgICAgY2FzZSBHZXRHZXR0ZXI6CisgICAgY2FzZSBHZXRTZXR0ZXI6
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAKICAgICBjYXNlIEdldEJ5VmFsOgpAQCAt
Mjg1LDYgKzI4Nyw3IEBAIGJvb2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYgc3QK
ICAgICAgICAgICAgIFN0cnVjdHVyZVNldChub2RlLT5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgp
LnByZXZpb3VzU3RydWN0dXJlKSk7CiAgICAgICAgIAogICAgIGNhc2UgR2V0QnlPZmZzZXQ6Cisg
ICAgY2FzZSBHZXRHZXR0ZXJTZXR0ZXJCeU9mZnNldDoKICAgICBjYXNlIFB1dEJ5T2Zmc2V0Ogog
ICAgICAgICByZXR1cm4gc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV9jdXJyZW50S25v
d25TdHJ1Y3R1cmUuaXNWYWxpZE9mZnNldCgKICAgICAgICAgICAgIGdyYXBoLm1fc3RvcmFnZUFj
Y2Vzc0RhdGFbbm9kZS0+c3RvcmFnZUFjY2Vzc0RhdGFJbmRleCgpXS5vZmZzZXQpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJf
NjQuY3BwCShyZXZpc2lvbiAxNjkwMTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3IEBA
CiAjaW5jbHVkZSAiREZHT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkRGR1Nsb3dQYXRoR2VuZXJh
dG9yLmgiCiAjaW5jbHVkZSAiRGVidWdnZXIuaCIKKyNpbmNsdWRlICJHZXR0ZXJTZXR0ZXIuaCIK
ICNpbmNsdWRlICJKU0FjdGl2YXRpb24uaCIKICNpbmNsdWRlICJPYmplY3RQcm90b3R5cGUuaCIK
ICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCkBAIC0zNzkyLDYgKzM3OTMsNDcgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBicmVhazsKICAgICB9CiAg
ICAgICAgIAorICAgIGNhc2UgR2V0R2V0dGVyU2V0dGVyQnlPZmZzZXQ6IHsKKyAgICAgICAgU3Rv
cmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIEdQUlRl
bXBvcmFyeSByZXN1bHRQYXlsb2FkKHRoaXMpOworICAgICAgICAKKyAgICAgICAgR1BSUmVnIHN0
b3JhZ2VHUFIgPSBzdG9yYWdlLmdwcigpOworICAgICAgICBHUFJSZWcgcmVzdWx0UGF5bG9hZEdQ
UiA9IHJlc3VsdFBheWxvYWQuZ3ByKCk7CisgICAgICAgIAorICAgICAgICBTdG9yYWdlQWNjZXNz
RGF0YSYgc3RvcmFnZUFjY2Vzc0RhdGEgPSBtX2ppdC5ncmFwaCgpLm1fc3RvcmFnZUFjY2Vzc0Rh
dGFbbm9kZS0+c3RvcmFnZUFjY2Vzc0RhdGFJbmRleCgpXTsKKyAgICAgICAgCisgICAgICAgIG1f
aml0LmxvYWQzMihKSVRDb21waWxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBvZmZzZXRSZWxhdGl2
ZVRvQmFzZShzdG9yYWdlQWNjZXNzRGF0YS5vZmZzZXQpICsgT0JKRUNUX09GRlNFVE9GKEVuY29k
ZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSksIHJlc3VsdFBheWxvYWRHUFIpOwor
ICAgICAgICAKKyAgICAgICAgY2VsbFJlc3VsdChyZXN1bHRQYXlsb2FkR1BSLCBub2RlKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAKKyAgICBjYXNlIEdldEdldHRlcjogeworICAg
ICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAg
ICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIFJldXNlLCBvcDEpOworICAgICAgICAKKyAg
ICAgICAgR1BSUmVnIG9wMUdQUiA9IG9wMS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQ
UiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgCisgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29t
cGlsZXI6OkFkZHJlc3Mob3AxR1BSLCBHZXR0ZXJTZXR0ZXI6Om9mZnNldE9mR2V0dGVyKCkpLCBy
ZXN1bHRHUFIpOworICAgICAgICAKKyAgICAgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIsIG5vZGUp
OworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAorICAgIGNhc2UgR2V0U2V0dGVyOiB7
CisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7
CisgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgUmV1c2UsIG9wMSk7CisgICAgICAg
IAorICAgICAgICBHUFJSZWcgb3AxR1BSID0gb3AxLmdwcigpOworICAgICAgICBHUFJSZWcgcmVz
dWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICAKKyAgICAgICAgbV9qaXQubG9hZFB0cihK
SVRDb21waWxlcjo6QWRkcmVzcyhvcDFHUFIsIEdldHRlclNldHRlcjo6b2Zmc2V0T2ZTZXR0ZXIo
KSksIHJlc3VsdEdQUik7CisgICAgICAgIAorICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwg
bm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCiAgICAgY2FzZSBQdXRCeU9m
ZnNldDogewogICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG5vZGUtPmNoaWxk
MSgpKTsKICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQzKCkp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklUNjQuY3BwCShyZXZpc2lvbiAxNjkwMTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3IEBA
CiAjaW5jbHVkZSAiREZHT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkRGR1Nsb3dQYXRoR2VuZXJh
dG9yLmgiCiAjaW5jbHVkZSAiRGVidWdnZXIuaCIKKyNpbmNsdWRlICJHZXR0ZXJTZXR0ZXIuaCIK
ICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiT2JqZWN0UHJvdG90eXBlLmgiCiAj
aW5jbHVkZSAiU3BpbGxSZWdpc3RlcnNNb2RlLmgiCkBAIC0zODUzLDcgKzM4NTQsOCBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGJyZWFrOwogICAg
IH0KICAgICAgICAgCi0gICAgY2FzZSBHZXRCeU9mZnNldDogeworICAgIGNhc2UgR2V0QnlPZmZz
ZXQ6CisgICAgY2FzZSBHZXRHZXR0ZXJTZXR0ZXJCeU9mZnNldDogewogICAgICAgICBTdG9yYWdl
T3BlcmFuZCBzdG9yYWdlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgR1BSVGVtcG9y
YXJ5IHJlc3VsdCh0aGlzLCBSZXVzZSwgc3RvcmFnZSk7CiAgICAgICAgIApAQCAtMzg2OCw2ICsz
ODcwLDMyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAg
ICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKKyAgICBjYXNlIEdldEdldHRlcjogeworICAgICAg
ICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAg
ICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIFJldXNlLCBvcDEpOworICAgICAgICAKKyAgICAg
ICAgR1BSUmVnIG9wMUdQUiA9IG9wMS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9
IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgCisgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGls
ZXI6OkFkZHJlc3Mob3AxR1BSLCBHZXR0ZXJTZXR0ZXI6Om9mZnNldE9mR2V0dGVyKCkpLCByZXN1
bHRHUFIpOworICAgICAgICAKKyAgICAgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOwor
ICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAorICAgIGNhc2UgR2V0U2V0dGVyOiB7Cisg
ICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Cisg
ICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgUmV1c2UsIG9wMSk7CisgICAgICAgIAor
ICAgICAgICBHUFJSZWcgb3AxR1BSID0gb3AxLmdwcigpOworICAgICAgICBHUFJSZWcgcmVzdWx0
R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICAKKyAgICAgICAgbV9qaXQubG9hZFB0cihKSVRD
b21waWxlcjo6QWRkcmVzcyhvcDFHUFIsIEdldHRlclNldHRlcjo6b2Zmc2V0T2ZTZXR0ZXIoKSks
IHJlc3VsdEdQUik7CisgICAgICAgIAorICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbm9k
ZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCiAgICAgY2FzZSBQdXRCeU9mZnNl
dDogewogICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG5vZGUtPmNoaWxkMSgp
KTsKICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQzKCkpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0
SGVhcFJlcG9zaXRvcnkuY3BwCShyZXZpc2lvbiAxNjkwMTQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0y
OCw2ICsyOCw3IEBACiAKICNpZiBFTkFCTEUoRlRMX0pJVCkKIAorI2luY2x1ZGUgIkdldHRlclNl
dHRlci5oIgogI2luY2x1ZGUgIkpTU2NvcGUuaCIKICNpbmNsdWRlICJKU1ZhcmlhYmxlT2JqZWN0
LmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgJKHJldmlzaW9uIDE2
OTAxNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3Np
dG9yeS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC00Niw2ICs0Niw4IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgRlRMIHsKICAgICBtYWNybyhCdXR0ZXJmbHlfcHVibGljTGVuZ3RoLCBCdXR0ZXJmbHk6
Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpIFwKICAgICBtYWNybyhCdXR0ZXJmbHlfdmVjdG9yTGVu
Z3RoLCBCdXR0ZXJmbHk6Om9mZnNldE9mVmVjdG9yTGVuZ3RoKCkpIFwKICAgICBtYWNybyhDYWxs
RnJhbWVfY2FsbGVyRnJhbWUsIENhbGxGcmFtZTo6Y2FsbGVyRnJhbWVPZmZzZXQoKSkgXAorICAg
IG1hY3JvKEdldHRlclNldHRlcl9nZXR0ZXIsIEdldHRlclNldHRlcjo6b2Zmc2V0T2ZHZXR0ZXIo
KSkgXAorICAgIG1hY3JvKEdldHRlclNldHRlcl9zZXR0ZXIsIEdldHRlclNldHRlcjo6b2Zmc2V0
T2ZTZXR0ZXIoKSkgXAogICAgIG1hY3JvKEpTQXJyYXlCdWZmZXJWaWV3X2xlbmd0aCwgSlNBcnJh
eUJ1ZmZlclZpZXc6Om9mZnNldE9mTGVuZ3RoKCkpIFwKICAgICBtYWNybyhKU0FycmF5QnVmZmVy
Vmlld19tb2RlLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZNb2RlKCkpIFwKICAgICBtYWNy
byhKU0FycmF5QnVmZmVyVmlld192ZWN0b3IsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZlZl
Y3RvcigpKSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGll
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmls
aXRpZXMuY3BwCShyZXZpc2lvbiAxNjkwMTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTENhcGFiaWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcyLDYgKzcyLDkgQEAgaW5s
aW5lIENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlKE5vZGUqIAogICAgIGNhc2UgTmV3QXJyYXk6
CiAgICAgY2FzZSBOZXdBcnJheUJ1ZmZlcjoKICAgICBjYXNlIEdldEJ5T2Zmc2V0OgorICAgIGNh
c2UgR2V0R2V0dGVyU2V0dGVyQnlPZmZzZXQ6CisgICAgY2FzZSBHZXRHZXR0ZXI6CisgICAgY2Fz
ZSBHZXRTZXR0ZXI6CiAgICAgY2FzZSBQdXRCeU9mZnNldDoKICAgICBjYXNlIEdldEdsb2JhbFZh
cjoKICAgICBjYXNlIFB1dEdsb2JhbFZhcjoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMTGluay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExMaW5rLmNwcAkocmV2aXNpb24gMTY5MDE0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExMaW5rLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc4LDcgKzE3OCw3IEBAIHZvaWQgbGlu
ayhTdGF0ZSYgc3RhdGUpCiAKICAgICAgICAgbGlua0J1ZmZlciA9IGFkb3B0UHRyKG5ldyBMaW5r
QnVmZmVyKHZtLCAmaml0LCBjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQpKTsK
ICAgICAgICAgbGlua0J1ZmZlci0+bGluayhjYWxsQXJpdHlDaGVjaywgY29kZUJsb2NrLT5tX2lz
Q29uc3RydWN0b3IgPyBvcGVyYXRpb25Db25zdHJ1Y3RBcml0eUNoZWNrIDogb3BlcmF0aW9uQ2Fs
bEFyaXR5Q2hlY2spOwotICAgICAgICBsaW5rQnVmZmVyLT5saW5rKGNhbGxBcml0eUZpeHVwLCBG
dW5jdGlvblB0cigodm0uZ2V0Q1RJU3R1Yihhcml0eUZpeHVwKSkuY29kZSgpLmV4ZWN1dGFibGVB
ZGRyZXNzKCkpKTsKKyAgICAgICAgbGlua0J1ZmZlci0+bGluayhjYWxsQXJpdHlGaXh1cCwgRnVu
Y3Rpb25QdHIoKHZtLmdldENUSVN0dWIoYXJpdHlGaXh1cEdlbmVyYXRvcikpLmNvZGUoKS5leGVj
dXRhYmxlQWRkcmVzcygpKSk7CiAgICAgICAgIGxpbmtCdWZmZXItPmxpbmsobWFpblBhdGhKdW1w
cywgQ29kZUxvY2F0aW9uTGFiZWwoYml0d2lzZV9jYXN0PHZvaWQqPihzdGF0ZS5nZW5lcmF0ZWRG
dW5jdGlvbikpKTsKIAogICAgICAgICBzdGF0ZS5qaXRDb2RlLT5pbml0aWFsaXplQWRkcmVzc0Zv
ckNhbGwoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKGJpdHdpc2VfY2FzdDx2b2lkKj4oc3RhdGUuZ2Vu
ZXJhdGVkRnVuY3Rpb24pKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExv
d2VyREZHVG9MTFZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTExvd2VyREZHVG9MTFZNLmNwcAkocmV2aXNpb24gMTY5MDE0KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5
Myw4ICs0OTMsMTUgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGNvbXBpbGVTdHJpbmdDaGFyQ29k
ZUF0KCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBHZXRCeU9mZnNldDoKKyAg
ICAgICAgY2FzZSBHZXRHZXR0ZXJTZXR0ZXJCeU9mZnNldDoKICAgICAgICAgICAgIGNvbXBpbGVH
ZXRCeU9mZnNldCgpOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR2V0R2V0dGVy
OgorICAgICAgICAgICAgY29tcGlsZUdldEdldHRlcigpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgR2V0U2V0dGVyOgorICAgICAgICAgICAgY29tcGlsZUdldFNldHRlcigpOwor
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgTXVsdGlHZXRCeU9mZnNldDoKICAgICAg
ICAgICAgIGNvbXBpbGVNdWx0aUdldEJ5T2Zmc2V0KCk7CiAgICAgICAgICAgICBicmVhazsKQEAg
LTMxNDEsNiArMzE0OCwxNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgbG93U3RvcmFnZShtX25v
ZGUtPmNoaWxkMSgpKSwgZGF0YS5pZGVudGlmaWVyTnVtYmVyLCBkYXRhLm9mZnNldCkpOwogICAg
IH0KICAgICAKKyAgICB2b2lkIGNvbXBpbGVHZXRHZXR0ZXIoKQorICAgIHsKKyAgICAgICAgc2V0
SlNWYWx1ZShtX291dC5sb2FkUHRyKGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSksIG1faGVhcHMu
R2V0dGVyU2V0dGVyX2dldHRlcikpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVHZXRT
ZXR0ZXIoKQorICAgIHsKKyAgICAgICAgc2V0SlNWYWx1ZShtX291dC5sb2FkUHRyKGxvd0NlbGwo
bV9ub2RlLT5jaGlsZDEoKSksIG1faGVhcHMuR2V0dGVyU2V0dGVyX3NldHRlcikpOworICAgIH0K
KyAgICAKICAgICB2b2lkIGNvbXBpbGVNdWx0aUdldEJ5T2Zmc2V0KCkKICAgICB7CiAgICAgICAg
IExWYWx1ZSBiYXNlID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvQWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0FjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5l
LmgJKHJldmlzaW9uIDE2OTAxNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQWNjZXNz
b3JDYWxsSklUU3R1YlJvdXRpbmUuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsNyArNDYsNiBAQCBw
dWJsaWM6CiAgICAgCiAgICAgdmlydHVhbCBib29sIHZpc2l0V2VhayhSZXBhdGNoQnVmZmVyJikg
b3ZlcnJpZGU7CiAgICAgCi1wcml2YXRlOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua0lu
Zm8+IG1fY2FsbExpbmtJbmZvOwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNw
cAkocmV2aXNpb24gMTY5MDE0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDgsNiArMTA4LDE3IEBAIHZvaWQgSklUOjplbWl0RW50ZXJP
cHRpbWl6YXRpb25DaGVjaygpCiB9CiAjZW5kaWYKIAordm9pZCBKSVQ6OmFzc2VydFN0YWNrUG9p
bnRlck9mZnNldCgpCit7CisgICAgaWYgKEFTU0VSVF9ESVNBQkxFRCkKKyAgICAgICAgcmV0dXJu
OworICAgIAorICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1f
Y29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3RlciwgcmVnVDAp
OworICAgIEp1bXAgb2sgPSBicmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCBzdGFja1BvaW50ZXJSZWdp
c3Rlcik7CisgICAgYnJlYWtwb2ludCgpOworICAgIG9rLmxpbmsodGhpcyk7Cit9CisKICNkZWZp
bmUgTkVYVF9PUENPREUobmFtZSkgXAogICAgIG1fYnl0ZWNvZGVPZmZzZXQgKz0gT1BDT0RFX0xF
TkdUSChuYW1lKTsgXAogICAgIGJyZWFrOwpAQCAtNTcwLDcgKzU4MSw3IEBAIENvbXBpbGF0aW9u
UmVzdWx0IEpJVDo6cHJpdmF0ZUNvbXBpbGUoSkkKICNlbmRpZgogICAgICAgICBtb3ZlKFRydXN0
ZWRJbW1QdHIobV92bS0+YXJpdHlDaGVja0ZhaWxSZXR1cm5UaHVua3MtPnJldHVyblBDc0Zvcigq
bV92bSwgbV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSkpLCB0aHVua1JlZyk7CiAgICAgICAg
IGxvYWRQdHIoQmFzZUluZGV4KHRodW5rUmVnLCByZWdUMCwgdGltZXNQdHIoKSksIHRodW5rUmVn
KTsKLSAgICAgICAgZW1pdE5ha2VkQ2FsbChtX3ZtLT5nZXRDVElTdHViKGFyaXR5Rml4dXApLmNv
ZGUoKSk7CisgICAgICAgIGVtaXROYWtlZENhbGwobV92bS0+Z2V0Q1RJU3R1Yihhcml0eUZpeHVw
R2VuZXJhdG9yKS5jb2RlKCkpOwogCiAjaWYgIUFTU0VSVF9ESVNBQkxFRAogICAgICAgICBtX2J5
dGVjb2RlT2Zmc2V0ID0gKHVuc2lnbmVkKS0xOyAvLyBSZXNldCB0aGlzLCBpbiBvcmRlciB0byBn
dWFyZCBpdHMgdXNlIHdpdGggQVNTRVJUcy4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAko
cmV2aXNpb24gMTY5MDE0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkod29y
a2luZyBjb3B5KQpAQCAtMjQyLDcgKzI0Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAg
IHN0YXRpYyB1bnNpZ25lZCBmcmFtZVJlZ2lzdGVyQ291bnRGb3IoQ29kZUJsb2NrKik7CiAgICAg
ICAgIHN0YXRpYyBpbnQgc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKENvZGVCbG9jayopOwotCisgICAg
ICAgIAogICAgIHByaXZhdGU6CiAgICAgICAgIEpJVChWTSosIENvZGVCbG9jayogPSAwKTsKIApA
QCAtNDQ2LDYgKzQ0Niw4IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHZvaWQgZW1pdF9j
b21wYXJlQW5kSnVtcChPcGNvZGVJRCwgaW50IG9wMSwgaW50IG9wMiwgdW5zaWduZWQgdGFyZ2V0
LCBSZWxhdGlvbmFsQ29uZGl0aW9uKTsKICAgICAgICAgdm9pZCBlbWl0X2NvbXBhcmVBbmRKdW1w
U2xvdyhpbnQgb3AxLCBpbnQgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIERvdWJsZUNvbmRpdGlvbiwg
c2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1Zh
bHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJik7CisgICAgICAgIAorICAgICAgICB2b2lkIGFzc2VydFN0YWNrUG9pbnRlck9m
ZnNldCgpOwogCiAgICAgICAgIHZvaWQgZW1pdF9vcF90b3VjaF9lbnRyeShJbnN0cnVjdGlvbiop
OwogICAgICAgICB2b2lkIGVtaXRfb3BfYWRkKEluc3RydWN0aW9uKik7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkocmV2aXNpb24g
MTY5MDE0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTUyOCw2ICs1MjgsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9n
ZXRfYnlfaWQoSW5zdHJ1Y3Rpb24qCiAKICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKCk7CiAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKKyAgICBhc3NlcnRTdGFja1Bv
aW50ZXJPZmZzZXQoKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZChJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRv
cnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5l
cmF0b3JzLmNwcAkocmV2aXNpb24gMTY5MDE0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9UaHVua0dlbmVyYXRvcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MzAsNyArNDMwLDcgQEAg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG5hdGl2ZUNvbnN0cnVjdEdlbgogICAgIHJldHVybiBuYXRp
dmVGb3JHZW5lcmF0b3Iodm0sIENvZGVGb3JDb25zdHJ1Y3QpOwogfQogCi1NYWNyb0Fzc2VtYmxl
ckNvZGVSZWYgYXJpdHlGaXh1cChWTSogdm0pCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgYXJpdHlG
aXh1cEdlbmVyYXRvcihWTSogdm0pCiB7CiAgICAgSlNJbnRlcmZhY2VKSVQgaml0KHZtKTsKIApA
QCAtNTMzLDYgKzUzMyw4MyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgYXJpdHlGaXh1cChWTSog
dm0pCiAgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsICgiZml4dXAgYXJpdHki
KSk7CiB9CiAKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBiYXNlbGluZUdldHRlclJldHVyblRodW5r
R2VuZXJhdG9yKFZNKiB2bSkKK3sKKyAgICBKU0ludGVyZmFjZUpJVCBqaXQodm0pOworICAgIAor
I2lmIFVTRShKU1ZBTFVFNjQpCisgICAgaml0Lm1vdmUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIs
IEdQUkluZm86OnJlZ1QwKTsKKyNlbHNlCisgICAgaml0LnNldHVwUmVzdWx0cyhHUFJJbmZvOjpy
ZWdUMCwgR1BSSW5mbzo6cmVnVDEpOworI2VuZGlmCisgICAgCisgICAgdW5zaWduZWQgbnVtYmVy
T2ZQYXJhbWV0ZXJzID0gMDsKKyAgICBudW1iZXJPZlBhcmFtZXRlcnMrKzsgLy8gVGhlICd0aGlz
JyBhcmd1bWVudC4KKyAgICBudW1iZXJPZlBhcmFtZXRlcnMrKzsgLy8gVGhlIHRydWUgcmV0dXJu
IFBDLgorICAgIAorICAgIHVuc2lnbmVkIG51bWJlck9mUmVnc0ZvckNhbGwgPQorICAgICAgICBK
U1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplICsgbnVtYmVyT2ZQYXJhbWV0ZXJzOworICAgIAor
ICAgIHVuc2lnbmVkIG51bWJlck9mQnl0ZXNGb3JDYWxsID0KKyAgICAgICAgbnVtYmVyT2ZSZWdz
Rm9yQ2FsbCAqIHNpemVvZihSZWdpc3RlcikgLSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQyk7Cisg
ICAgCisgICAgdW5zaWduZWQgYWxpZ25lZE51bWJlck9mQnl0ZXNGb3JDYWxsID0KKyAgICAgICAg
V1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgbnVtYmVyT2ZC
eXRlc0ZvckNhbGwpOworICAgICAgICAgICAgCisgICAgLy8gVGhlIHJlYWwgcmV0dXJuIGFkZHJl
c3MgaXMgc3RvcmVkIGFib3ZlIHRoZSBhcmd1bWVudHMuIFdlIHBhc3NlZCBvbmUgYXJndW1lbnQs
IHdoaWNoIGlzCisgICAgLy8gJ3RoaXMnLiBTbyBhcmd1bWVudCBhdCBpbmRleCAxIGlzIHRoZSBy
ZXR1cm4gYWRkcmVzcy4KKyAgICBqaXQubG9hZFB0cigKKyAgICAgICAgQXNzZW1ibHlIZWxwZXJz
OjpBZGRyZXNzKAorICAgICAgICAgICAgQXNzZW1ibHlIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdp
c3RlciwKKyAgICAgICAgICAgICh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxKS5vZmZzZXQo
KSAtIEpTU3RhY2s6OkNhbGxlckZyYW1lQW5kUENTaXplKSAqIHNpemVvZihSZWdpc3RlcikpLAor
ICAgICAgICBHUFJJbmZvOjpyZWdUMik7CisgICAgCisgICAgaml0LmFkZFB0cigKKyAgICAgICAg
QXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoYWxpZ25lZE51bWJlck9mQnl0ZXNGb3JDYWxs
KSwKKyAgICAgICAgQXNzZW1ibHlIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAg
CisgICAgaml0Lmp1bXAoR1BSSW5mbzo6cmVnVDIpOworCisgICAgTGlua0J1ZmZlciBwYXRjaEJ1
ZmZlcigqdm0sICZqaXQsIEdMT0JBTF9USFVOS19JRCk7CisgICAgcmV0dXJuIEZJTkFMSVpFX0NP
REUocGF0Y2hCdWZmZXIsICgiYmFzZWxpbmUgZ2V0dGVyIHJldHVybiB0aHVuayIpKTsKK30KKwor
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGJhc2VsaW5lU2V0dGVyUmV0dXJuVGh1bmtHZW5lcmF0b3Io
Vk0qIHZtKQoreworICAgIEpTSW50ZXJmYWNlSklUIGppdCh2bSk7CisgICAgCisgICAgdW5zaWdu
ZWQgbnVtYmVyT2ZQYXJhbWV0ZXJzID0gMDsKKyAgICBudW1iZXJPZlBhcmFtZXRlcnMrKzsgLy8g
VGhlICd0aGlzJyBhcmd1bWVudC4KKyAgICBudW1iZXJPZlBhcmFtZXRlcnMrKzsgLy8gVGhlIHZh
bHVlIHRvIHNldC4KKyAgICBudW1iZXJPZlBhcmFtZXRlcnMrKzsgLy8gVGhlIHRydWUgcmV0dXJu
IFBDLgorICAgIAorICAgIHVuc2lnbmVkIG51bWJlck9mUmVnc0ZvckNhbGwgPQorICAgICAgICBK
U1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplICsgbnVtYmVyT2ZQYXJhbWV0ZXJzOworICAgIAor
ICAgIHVuc2lnbmVkIG51bWJlck9mQnl0ZXNGb3JDYWxsID0KKyAgICAgICAgbnVtYmVyT2ZSZWdz
Rm9yQ2FsbCAqIHNpemVvZihSZWdpc3RlcikgLSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQyk7Cisg
ICAgCisgICAgdW5zaWduZWQgYWxpZ25lZE51bWJlck9mQnl0ZXNGb3JDYWxsID0KKyAgICAgICAg
V1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgbnVtYmVyT2ZC
eXRlc0ZvckNhbGwpOworICAgICAgICAgICAgCisgICAgLy8gVGhlIHJlYWwgcmV0dXJuIGFkZHJl
c3MgaXMgc3RvcmVkIGFib3ZlIHRoZSBhcmd1bWVudHMuIFdlIHBhc3NlZCB0d28gYXJndW1lbnRz
LCBzbworICAgIC8vIHRoZSBhcmd1bWVudCBhdCBpbmRleCAyIGlzIHRoZSByZXR1cm4gYWRkcmVz
cy4KKyAgICBqaXQubG9hZFB0cigKKyAgICAgICAgQXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNzKAor
ICAgICAgICAgICAgQXNzZW1ibHlIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3RlciwKKyAgICAg
ICAgICAgICh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgyKS5vZmZzZXQoKSAtIEpTU3RhY2s6
OkNhbGxlckZyYW1lQW5kUENTaXplKSAqIHNpemVvZihSZWdpc3RlcikpLAorICAgICAgICBHUFJJ
bmZvOjpyZWdUMik7CisgICAgCisgICAgaml0LmFkZFB0cigKKyAgICAgICAgQXNzZW1ibHlIZWxw
ZXJzOjpUcnVzdGVkSW1tMzIoYWxpZ25lZE51bWJlck9mQnl0ZXNGb3JDYWxsKSwKKyAgICAgICAg
QXNzZW1ibHlIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgCisgICAgaml0Lmp1
bXAoR1BSSW5mbzo6cmVnVDIpOworCisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sICZq
aXQsIEdMT0JBTF9USFVOS19JRCk7CisgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZm
ZXIsICgiYmFzZWxpbmUgc2V0dGVyIHJldHVybiB0aHVuayIpKTsKK30KKwogc3RhdGljIHZvaWQg
c3RyaW5nQ2hhckxvYWQoU3BlY2lhbGl6ZWRUaHVua0pJVCYgaml0LCBWTSogdm0pCiB7CiAgICAg
Ly8gbG9hZCBzdHJpbmcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5l
cmF0b3JzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dl
bmVyYXRvcnMuaAkocmV2aXNpb24gMTY5MDE0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9UaHVua0dlbmVyYXRvcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTEzLDcgKzExMywxMCBAQCBp
bmxpbmUgVGh1bmtHZW5lcmF0b3IgdmlydHVhbFRodW5rR2VuZXJhCiBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWYgbmF0aXZlQ2FsbEdlbmVyYXRvcihWTSopOwogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG5h
dGl2ZUNvbnN0cnVjdEdlbmVyYXRvcihWTSopOwogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG5hdGl2
ZVRhaWxDYWxsR2VuZXJhdG9yKFZNKik7Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgYXJpdHlGaXh1
cChWTSopOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGFyaXR5Rml4dXBHZW5lcmF0b3IoVk0qKTsK
KworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGJhc2VsaW5lR2V0dGVyUmV0dXJuVGh1bmtHZW5lcmF0
b3IoVk0qIHZtKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBiYXNlbGluZVNldHRlclJldHVyblRo
dW5rR2VuZXJhdG9yKFZNKiB2bSk7CiAKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjaGFyQ29kZUF0
VGh1bmtHZW5lcmF0b3IoVk0qKTsKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjaGFyQXRUaHVua0dl
bmVyYXRvcihWTSopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9u
U2xvd1BhdGhzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Db21tb25TbG93UGF0aHMuY3BwCShyZXZpc2lvbiAxNjkwMTQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NzAsNyArMTcwLDcgQEAgc3RhdGljIENvbW1vblNsb3dQYXRoczo6QXJpdHlDaGVja0RhdGEqIAog
ICAgIHJlc3VsdC0+cGFkZGVkU3RhY2tTcGFjZSA9IHNsb3RzVG9BZGQ7CiAjaWYgRU5BQkxFKEpJ
VCkKICAgICBpZiAodm0uY2FuVXNlSklUKCkpIHsKLSAgICAgICAgcmVzdWx0LT50aHVua1RvQ2Fs
bCA9IHZtLmdldENUSVN0dWIoYXJpdHlGaXh1cCkuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7
CisgICAgICAgIHJlc3VsdC0+dGh1bmtUb0NhbGwgPSB2bS5nZXRDVElTdHViKGFyaXR5Rml4dXBH
ZW5lcmF0b3IpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpOwogICAgICAgICByZXN1bHQtPnJl
dHVyblBDID0gdm0uYXJpdHlDaGVja0ZhaWxSZXR1cm5UaHVua3MtPnJldHVyblBDRm9yKHZtLCBz
bG90c1RvQWRkICogc3RhY2tBbGlnbm1lbnRSZWdpc3RlcnMoKSkuZXhlY3V0YWJsZUFkZHJlc3Mo
KTsKICAgICB9IGVsc2UKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3Rz
L3N0cmVzcy9leGl0LWZyb20tZ2V0dGVyLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS90ZXN0cy9zdHJlc3MvZXhpdC1mcm9tLWdldHRlci5qcwkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvZXhpdC1mcm9tLWdldHRlci5qcwko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIzIEBACisoZnVuY3Rpb24oKSB7CisgICAgdmFyIG8g
PSB7X2Y6NDJ9OworICAgIG8uX19kZWZpbmVHZXR0ZXJfXygiZiIsIGZ1bmN0aW9uKCkgeyByZXR1
cm4gdGhpcy5fZiAqIDEwMDsgfSk7CisgICAgdmFyIHJlc3VsdCA9IDA7CisgICAgdmFyIG4gPSA1
MDAwMDsKKyAgICBmdW5jdGlvbiBmb28obykgeworICAgICAgICByZXR1cm4gby5mICsgMTE7Cisg
ICAgfQorICAgIG5vSW5saW5lKGZvbyk7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyArK2kp
IHsKKyAgICAgICAgcmVzdWx0ICs9IGZvbyhvKTsKKyAgICB9CisgICAgaWYgKHJlc3VsdCAhPSBu
ICogKDQyICogMTAwICsgMTEpKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQ6ICIg
KyByZXN1bHQ7CisgICAgby5fZiA9IDEwMDAwMDAwMDA7CisgICAgcmVzdWx0ID0gMDsKKyAgICBm
b3IgKHZhciBpID0gMDsgaSA8IG47ICsraSkgeworICAgICAgICByZXN1bHQgKz0gZm9vKG8pOwor
ICAgIH0KKyAgICBpZiAocmVzdWx0ICE9IG4gKiAoMTAwMDAwMDAwMCAqIDEwMCArIDExKSkKKyAg
ICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0ICgyKTogIiArIHJlc3VsdDsKK30pKCk7CisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvcG9seS1jaGFpbi1nZXR0
ZXIuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9w
b2x5LWNoYWluLWdldHRlci5qcwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS90ZXN0cy9zdHJlc3MvcG9seS1jaGFpbi1nZXR0ZXIuanMJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwzMCBAQAorZnVuY3Rpb24gQ29ucygpIHsKK30KK0NvbnMucHJvdG90eXBlLl9fZGVmaW5l
R2V0dGVyX18oImYiLCBmdW5jdGlvbigpIHsKKyAgICBjb3VudGVyKys7CisgICAgcmV0dXJuIDg0
OworfSk7CisKK2Z1bmN0aW9uIGZvbyhvKSB7CisgICAgcmV0dXJuIG8uZjsKK30KKworbm9Jbmxp
bmUoZm9vKTsKKwordmFyIGNvdW50ZXIgPSAwOworCitmdW5jdGlvbiB0ZXN0KG8sIGV4cGVjdGVk
LCBleHBlY3RlZENvdW50KSB7CisgICAgdmFyIHJlc3VsdCA9IGZvbyhvKTsKKyAgICBpZiAocmVz
dWx0ICE9IGV4cGVjdGVkKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkJhZCByZXN1bHQ6ICIg
KyByZXN1bHQpOworICAgIGlmIChjb3VudGVyICE9IGV4cGVjdGVkQ291bnQpCisgICAgICAgIHRo
cm93IG5ldyBFcnJvcigiQmFkIGNvdW50ZXIgdmFsdWU6ICIgKyBjb3VudGVyKTsKK30KKworZm9y
ICh2YXIgaSA9IDA7IGkgPCAxMDAwMDA7ICsraSkgeworICAgIHRlc3QobmV3IENvbnMoKSwgODQs
IGNvdW50ZXIgKyAxKTsKKyAgICAKKyAgICB2YXIgbyA9IG5ldyBDb25zKCk7CisgICAgby5nID0g
NTQ7CisgICAgdGVzdChvLCA4NCwgY291bnRlciArIDEpOworfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9wb2x5LWNoYWluLXRoZW4tZ2V0dGVyLmpzCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvcG9seS1jaGFpbi10aGVu
LWdldHRlci5qcwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9z
dHJlc3MvcG9seS1jaGFpbi10aGVuLWdldHRlci5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDMxIEBACitmdW5jdGlvbiBDb25zMSgpIHsKK30KK0NvbnMxLnByb3RvdHlwZS5mID0gNDI7CisK
K2Z1bmN0aW9uIENvbnMyKCkgeworfQorQ29uczIucHJvdG90eXBlLl9fZGVmaW5lR2V0dGVyX18o
ImYiLCBmdW5jdGlvbigpIHsKKyAgICBjb3VudGVyKys7CisgICAgcmV0dXJuIDg0OworfSk7CisK
K2Z1bmN0aW9uIGZvbyhvKSB7CisgICAgcmV0dXJuIG8uZjsKK30KKworbm9JbmxpbmUoZm9vKTsK
KwordmFyIGNvdW50ZXIgPSAwOworCitmdW5jdGlvbiB0ZXN0KG8sIGV4cGVjdGVkLCBleHBlY3Rl
ZENvdW50KSB7CisgICAgdmFyIHJlc3VsdCA9IGZvbyhvKTsKKyAgICBpZiAocmVzdWx0ICE9IGV4
cGVjdGVkKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkJhZCByZXN1bHQ6ICIgKyByZXN1bHQp
OworICAgIGlmIChjb3VudGVyICE9IGV4cGVjdGVkQ291bnQpCisgICAgICAgIHRocm93IG5ldyBF
cnJvcigiQmFkIGNvdW50ZXIgdmFsdWU6ICIgKyBjb3VudGVyKTsKK30KKworZm9yICh2YXIgaSA9
IDA7IGkgPCAxMDAwMDA7ICsraSkgeworICAgIHRlc3QobmV3IENvbnMxKCksIDQyLCBjb3VudGVy
KTsKKyAgICB0ZXN0KG5ldyBDb25zMigpLCA4NCwgY291bnRlciArIDEpOworfQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9wb2x5LWdldHRlci1jb21iby5qcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3BvbHktZ2V0dGVy
LWNvbWJvLmpzCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0
cmVzcy9wb2x5LWdldHRlci1jb21iby5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQwIEBA
CitmdW5jdGlvbiBDb25zMSgpIHsKK30KK0NvbnMxLnByb3RvdHlwZS5mID0gNDI7CisKK2Z1bmN0
aW9uIENvbnMyKCkgeworfQorQ29uczIucHJvdG90eXBlLl9fZGVmaW5lR2V0dGVyX18oImYiLCBm
dW5jdGlvbigpIHsKKyAgICBjb3VudGVyKys7CisgICAgcmV0dXJuIDg0OworfSk7CisKK2Z1bmN0
aW9uIGZvbyhvKSB7CisgICAgcmV0dXJuIG8uZjsKK30KKworbm9JbmxpbmUoZm9vKTsKKwordmFy
IGNvdW50ZXIgPSAwOworCitmdW5jdGlvbiB0ZXN0KG8sIGV4cGVjdGVkLCBleHBlY3RlZENvdW50
KSB7CisgICAgdmFyIHJlc3VsdCA9IGZvbyhvKTsKKyAgICBpZiAocmVzdWx0ICE9IGV4cGVjdGVk
KQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkJhZCByZXN1bHQ6ICIgKyByZXN1bHQpOworICAg
IGlmIChjb3VudGVyICE9IGV4cGVjdGVkQ291bnQpCisgICAgICAgIHRocm93IG5ldyBFcnJvcigi
QmFkIGNvdW50ZXIgdmFsdWU6ICIgKyBjb3VudGVyKTsKK30KKworZm9yICh2YXIgaSA9IDA7IGkg
PCAxMDAwMDA7ICsraSkgeworICAgIHRlc3QobmV3IENvbnMxKCksIDQyLCBjb3VudGVyKTsKKyAg
ICB0ZXN0KG5ldyBDb25zMigpLCA4NCwgY291bnRlciArIDEpOworICAgIAorICAgIHZhciBvID0g
e307CisgICAgby5fX2RlZmluZUdldHRlcl9fKCJmIiwgZnVuY3Rpb24oKSB7CisgICAgICAgIGNv
dW50ZXIrKzsKKyAgICAgICAgcmV0dXJuIDg0OworICAgIH0pOworICAgIHRlc3QobywgODQsIGNv
dW50ZXIgKyAxKTsKKworICAgIHRlc3Qoe2Y6IDQyfSwgNDIsIGNvdW50ZXIpOworfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9wb2x5LWdldHRlci10aGVuLWNoYWlu
LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvcG9s
eS1nZXR0ZXItdGhlbi1jaGFpbi5qcwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS90ZXN0cy9zdHJlc3MvcG9seS1nZXR0ZXItdGhlbi1jaGFpbi5qcwkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDMxIEBACitmdW5jdGlvbiBDb25zMSgpIHsKK30KK0NvbnMxLnByb3RvdHlw
ZS5mID0gNDI7CisKK2Z1bmN0aW9uIENvbnMyKCkgeworfQorQ29uczIucHJvdG90eXBlLl9fZGVm
aW5lR2V0dGVyX18oImYiLCBmdW5jdGlvbigpIHsKKyAgICBjb3VudGVyKys7CisgICAgcmV0dXJu
IDg0OworfSk7CisKK2Z1bmN0aW9uIGZvbyhvKSB7CisgICAgcmV0dXJuIG8uZjsKK30KKworbm9J
bmxpbmUoZm9vKTsKKwordmFyIGNvdW50ZXIgPSAwOworCitmdW5jdGlvbiB0ZXN0KG8sIGV4cGVj
dGVkLCBleHBlY3RlZENvdW50KSB7CisgICAgdmFyIHJlc3VsdCA9IGZvbyhvKTsKKyAgICBpZiAo
cmVzdWx0ICE9IGV4cGVjdGVkKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkJhZCByZXN1bHQ6
ICIgKyByZXN1bHQpOworICAgIGlmIChjb3VudGVyICE9IGV4cGVjdGVkQ291bnQpCisgICAgICAg
IHRocm93IG5ldyBFcnJvcigiQmFkIGNvdW50ZXIgdmFsdWU6ICIgKyBjb3VudGVyKTsKK30KKwor
Zm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDA7ICsraSkgeworICAgIHRlc3QobmV3IENvbnMyKCks
IDg0LCBjb3VudGVyICsgMSk7CisgICAgdGVzdChuZXcgQ29uczEoKSwgNDIsIGNvdW50ZXIpOwor
fQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9wb2x5LWdldHRlci10
aGVuLXNlbGYuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0
cmVzcy9wb2x5LWdldHRlci10aGVuLXNlbGYuanMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3BvbHktZ2V0dGVyLXRoZW4tc2VsZi5qcwkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDI2IEBACitmdW5jdGlvbiBmb28obykgeworICAgIHJldHVybiBv
LmY7Cit9CisKK25vSW5saW5lKGZvbyk7CisKK3ZhciBjb3VudGVyID0gMDsKKworZnVuY3Rpb24g
dGVzdChvLCBleHBlY3RlZCwgZXhwZWN0ZWRDb3VudCkgeworICAgIHZhciByZXN1bHQgPSBmb28o
byk7CisgICAgaWYgKHJlc3VsdCAhPSBleHBlY3RlZCkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9y
KCJCYWQgcmVzdWx0OiAiICsgcmVzdWx0KTsKKyAgICBpZiAoY291bnRlciAhPSBleHBlY3RlZENv
dW50KQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkJhZCBjb3VudGVyIHZhbHVlOiAiICsgY291
bnRlcik7Cit9CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDAwOyArK2kpIHsKKyAgICB2YXIg
byA9IHt9OworICAgIG8uX19kZWZpbmVHZXR0ZXJfXygiZiIsIGZ1bmN0aW9uKCkgeworICAgICAg
ICBjb3VudGVyKys7CisgICAgICAgIHJldHVybiA4NDsKKyAgICB9KTsKKyAgICB0ZXN0KG8sIDg0
LCBjb3VudGVyICsgMSk7CisKKyAgICB0ZXN0KHtmOiA0Mn0sIDQyLCBjb3VudGVyKTsKK30KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvcG9seS1zZWxmLWdldHRlci5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3BvbHkt
c2VsZi1nZXR0ZXIuanMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVz
dHMvc3RyZXNzL3BvbHktc2VsZi1nZXR0ZXIuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwz
MSBAQAorZnVuY3Rpb24gZm9vKG8pIHsKKyAgICByZXR1cm4gby5mOworfQorCitub0lubGluZShm
b28pOworCit2YXIgY291bnRlciA9IDA7CisKK2Z1bmN0aW9uIHRlc3QobywgZXhwZWN0ZWQsIGV4
cGVjdGVkQ291bnQpIHsKKyAgICB2YXIgcmVzdWx0ID0gZm9vKG8pOworICAgIGlmIChyZXN1bHQg
IT0gZXhwZWN0ZWQpCisgICAgICAgIHRocm93IG5ldyBFcnJvcigiQmFkIHJlc3VsdDogIiArIHJl
c3VsdCk7CisgICAgaWYgKGNvdW50ZXIgIT0gZXhwZWN0ZWRDb3VudCkKKyAgICAgICAgdGhyb3cg
bmV3IEVycm9yKCJCYWQgY291bnRlciB2YWx1ZTogIiArIGNvdW50ZXIpOworfQorCitmdW5jdGlv
biBnZXR0ZXIoKSB7CisgICAgY291bnRlcisrOworICAgIHJldHVybiA4NDsKK30KKworZm9yICh2
YXIgaSA9IDA7IGkgPCAxMDAwMDA7ICsraSkgeworICAgIHZhciBvID0ge307CisgICAgby5fX2Rl
ZmluZUdldHRlcl9fKCJmIiwgZ2V0dGVyKTsKKyAgICB0ZXN0KG8sIDg0LCBjb3VudGVyICsgMSk7
CisKKyAgICB2YXIgbyA9IHt9OworICAgIG8uX19kZWZpbmVHZXR0ZXJfXygiZiIsIGdldHRlcik7
CisgICAgby5nID0gNTQ7CisgICAgdGVzdChvLCA4NCwgY291bnRlciArIDEpOworfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9wb2x5LXNlbGYtdGhlbi1nZXR0ZXIu
anMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9wb2x5
LXNlbGYtdGhlbi1nZXR0ZXIuanMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvdGVzdHMvc3RyZXNzL3BvbHktc2VsZi10aGVuLWdldHRlci5qcwkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDI2IEBACitmdW5jdGlvbiBmb28obykgeworICAgIHJldHVybiBvLmY7Cit9CisK
K25vSW5saW5lKGZvbyk7CisKK3ZhciBjb3VudGVyID0gMDsKKworZnVuY3Rpb24gdGVzdChvLCBl
eHBlY3RlZCwgZXhwZWN0ZWRDb3VudCkgeworICAgIHZhciByZXN1bHQgPSBmb28obyk7CisgICAg
aWYgKHJlc3VsdCAhPSBleHBlY3RlZCkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJCYWQgcmVz
dWx0OiAiICsgcmVzdWx0KTsKKyAgICBpZiAoY291bnRlciAhPSBleHBlY3RlZENvdW50KQorICAg
ICAgICB0aHJvdyBuZXcgRXJyb3IoIkJhZCBjb3VudGVyIHZhbHVlOiAiICsgY291bnRlcik7Cit9
CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDAwOyArK2kpIHsKKyAgICB0ZXN0KHtmOiA0Mn0s
IDQyLCBjb3VudGVyKTsKKworICAgIHZhciBvID0ge307CisgICAgby5fX2RlZmluZUdldHRlcl9f
KCJmIiwgZnVuY3Rpb24oKSB7CisgICAgICAgIGNvdW50ZXIrKzsKKyAgICAgICAgcmV0dXJuIDg0
OworICAgIH0pOworICAgIHRlc3QobywgODQsIGNvdW50ZXIgKyAxKTsKK30KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3Mvd2VpcmQtZ2V0dGVyLWNvdW50ZXIuanMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy93ZWlyZC1nZXR0
ZXItY291bnRlci5qcwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0
cy9zdHJlc3Mvd2VpcmQtZ2V0dGVyLWNvdW50ZXIuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwyNCBAQAorZnVuY3Rpb24gZm9vKG8pIHsKKyAgICByZXR1cm4gby5mOworfQorCitub0lubGlu
ZShmb28pOworCit2YXIgY291bnRlciA9IDA7CisKK2Z1bmN0aW9uIHRlc3QobywgZXhwZWN0ZWQs
IGV4cGVjdGVkQ291bnQpIHsKKyAgICB2YXIgcmVzdWx0ID0gZm9vKG8pOworICAgIGlmIChyZXN1
bHQgIT0gZXhwZWN0ZWQpCisgICAgICAgIHRocm93IG5ldyBFcnJvcigiQmFkIHJlc3VsdDogIiAr
IHJlc3VsdCk7CisgICAgaWYgKGNvdW50ZXIgIT0gZXhwZWN0ZWRDb3VudCkKKyAgICAgICAgdGhy
b3cgbmV3IEVycm9yKCJCYWQgY291bnRlciB2YWx1ZTogIiArIGNvdW50ZXIpOworfQorCitmb3Ig
KHZhciBpID0gMDsgaSA8IDEwMDAwMDsgKytpKSB7CisgICAgdmFyIG8gPSB7fTsKKyAgICBvLl9f
ZGVmaW5lR2V0dGVyX18oImYiLCBmdW5jdGlvbigpIHsKKyAgICAgICAgY291bnRlcisrOworICAg
ICAgICByZXR1cm4gODQ7CisgICAgfSk7CisgICAgdGVzdChvLCA4NCwgY291bnRlciArIDEpOwor
fQpJbmRleDogU291cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9D
aGFuZ2VMb2cJKHJldmlzaW9uIDE2OTExOSkKKysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTQtMDUtMTkgIEZpbGlwIFBpemxvICA8ZnBp
emxvQGFwcGxlLmNvbT4KKworICAgICAgICBbZnRsb3B0XSBERkcgYnl0ZWNvZGUgcGFyc2VyIHNo
b3VsZCB0dXJuIEdldEJ5SWQgd2l0aCBub3RoaW5nIGJ1dCBhIEdldHRlciBzdHViIGFzIHN0dWZm
K2hhbmRsZUNhbGwsIGFuZCBoYW5kbGVDYWxsIHNob3VsZCBiZSBhbGxvd2VkIHRvIGlubGluZSBp
ZiBpdCB3YW50cyB0bworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTMzMTA1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiB3dGYvQmFnLmg6CisgICAgICAgIChXVEY6OkJhZzo6aXRlcmF0b3I6Om9wZXJhdG9y
IT0pOgorCiAyMDE0LTA1LTA3ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAg
ICAgICAgVU5SRUFDSEFCTEVfRk9SX1BMQVRGT1JNKCkgaXMgbWVhbnQgdG8gYmUgYSByZWxlYXNl
IGNyYXNoLgpJbmRleDogU291cmNlL1dURi93dGYvQmFnLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dURi93dGYvQmFnLmgJKHJldmlzaW9uIDE2OTAxNCkKKysrIFNvdXJjZS9XVEYvd3RmL0JhZy5o
CSh3b3JraW5nIGNvcHkpCkBAIC04Myw2ICs4MywxMSBAQCBwdWJsaWM6CiAgICAgICAgIHsKICAg
ICAgICAgICAgIHJldHVybiBtX25vZGUgPT0gb3RoZXIubV9ub2RlOwogICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25z
dAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAg
ICAgIH0KICAgICBwcml2YXRlOgogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBmcmllbmQg
Y2xhc3MgV1RGOjpCYWc7CiAgICAgICAgIE5vZGUqIG1fbm9kZTsKSW5kZXg6IExheW91dFRlc3Rz
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9u
IDE2OTExOSkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDE0IEBACisyMDE0LTA1LTE5ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisK
KyAgICAgICAgW2Z0bG9wdF0gREZHIGJ5dGVjb2RlIHBhcnNlciBzaG91bGQgdHVybiBHZXRCeUlk
IHdpdGggbm90aGluZyBidXQgYSBHZXR0ZXIgc3R1YiBhcyBzdHVmZitoYW5kbGVDYWxsLCBhbmQg
aGFuZGxlQ2FsbCBzaG91bGQgYmUgYWxsb3dlZCB0byBpbmxpbmUgaWYgaXQgd2FudHMgdG8KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMzEwNQorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICoganMvcmVncmVz
cy9nZXR0ZXItbm8tYWN0aXZhdGlvbi1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGpz
L3JlZ3Jlc3MvZ2V0dGVyLW5vLWFjdGl2YXRpb24uaHRtbDogQWRkZWQuCisgICAgICAgICoganMv
cmVncmVzcy9zY3JpcHQtdGVzdHMvZ2V0dGVyLW5vLWFjdGl2YXRpb24uanM6IEFkZGVkLgorCiAy
MDE0LTA1LTA4ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAganNT
dWJzdHJpbmcoKSBzaG91bGQgYmUgbGF6eQpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9n
ZXR0ZXItbm8tYWN0aXZhdGlvbi1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvanMvcmVncmVzcy9nZXR0ZXItbm8tYWN0aXZhdGlvbi1leHBlY3RlZC50eHQJKHJldmlzaW9u
IDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2dldHRlci1uby1hY3RpdmF0aW9uLWV4cGVj
dGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwIEBACitKU1JlZ3Jlc3MvZ2V0dGVy
LW5vLWFjdGl2YXRpb24KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQ
QVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1Mgbm8g
ZXhjZXB0aW9uIHRocm93bgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNU
IENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZ2V0dGVyLW5vLWFjdGl2
YXRpb24uaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2dldHRlci1u
by1hY3RpdmF0aW9uLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNz
L2dldHRlci1uby1hY3RpdmF0aW9uLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMiBA
QAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+
Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwv
c2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3Jl
Z3Jlc3MtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvZ2V0dGVy
LW5vLWFjdGl2YXRpb24uanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNl
cy9yZWdyZXNzLXBvc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNl
cy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5
b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvZ2V0dGVyLW5vLWFjdGl2YXRpb24uanMK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvZ2V0dGVy
LW5vLWFjdGl2YXRpb24uanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNz
L3NjcmlwdC10ZXN0cy9nZXR0ZXItbm8tYWN0aXZhdGlvbi5qcwkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDEzIEBACisoZnVuY3Rpb24oKSB7CisgICAgdmFyIG8gPSB7X2Y6NDJ9OworICAgIG8u
X19kZWZpbmVHZXR0ZXJfXygiZiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpcy5fZjsgfSk7Cisg
ICAgKGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgcmVzdWx0ID0gMDsKKyAgICAgICAgdmFyIG4g
PSAyMDAwMDAwOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG47ICsraSkKKyAgICAgICAg
ICAgIHJlc3VsdCArPSBvLmY7CisgICAgICAgIGlmIChyZXN1bHQgIT0gbiAqIDQyKQorICAgICAg
ICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsgcmVzdWx0OworICAgIH0pKCk7Cit9
KSgpOworCg==
</data>
<flag name="review"
          id="256244"
          type_id="1"
          status="+"
          setter="msaboff"
    />
          </attachment>
      

    </bug>

</bugzilla>