<?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>104507</bug_id>
          
          <creation_ts>2012-12-09 22:06:35 -0800</creation_ts>
          <short_desc>Factor node traversal into standalone functions</short_desc>
          <delta_ts>2012-12-10 16:43:51 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>DOM</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>allan.jensen</cc>
    
    <cc>apinheiro</cc>
    
    <cc>cfleizach</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>darin</cc>
    
    <cc>dglazkov</cc>
    
    <cc>dmazzoni</cc>
    
    <cc>d-r</cc>
    
    <cc>eric</cc>
    
    <cc>fmalita</cc>
    
    <cc>gtk-ews</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>haraken</cc>
    
    <cc>japhet</cc>
    
    <cc>jdiggs</cc>
    
    <cc>kling</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>mifenton</cc>
    
    <cc>morrita</cc>
    
    <cc>ojan.autocc</cc>
    
    <cc>pdr</cc>
    
    <cc>peter+ews</cc>
    
    <cc>philn</cc>
    
    <cc>rakuco</cc>
    
    <cc>rwlbuis</cc>
    
    <cc>schenney</cc>
    
    <cc>tkent</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
    
    <cc>yong.li.webkit</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>786980</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-12-09 22:06:35 -0800</bug_when>
    <thetext>Node traversal functions are currently Node and ContainerNode members. Their implementations are scattered over multiple header and source files. These functions have no particular reason to be members as they don&apos;t require non-public access. Make them freestanding function instead and gather them together.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>786998</commentid>
    <comment_count>1</comment_count>
      <attachid>178474</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-12-09 22:31:33 -0800</bug_when>
    <thetext>Created attachment 178474
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>787010</commentid>
    <comment_count>2</comment_count>
      <attachid>178477</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-12-09 22:48:01 -0800</bug_when>
    <thetext>Created attachment 178477
patch2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>787026</commentid>
    <comment_count>3</comment_count>
      <attachid>178477</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-12-09 23:20:24 -0800</bug_when>
    <thetext>Comment on attachment 178477
patch2

Attachment 178477 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/15219827</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>787037</commentid>
    <comment_count>4</comment_count>
      <attachid>178477</attachid>
    <who name="Peter Beverloo (cr-android ews)">peter+ews</who>
    <bug_when>2012-12-09 23:40:41 -0800</bug_when>
    <thetext>Comment on attachment 178477
patch2

Attachment 178477 did not pass cr-android-ews (chromium-android):
Output: http://queues.webkit.org/results/15230463</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>787062</commentid>
    <comment_count>5</comment_count>
      <attachid>178477</attachid>
    <who name="kov&apos;s GTK+ EWS bot">gtk-ews</who>
    <bug_when>2012-12-10 00:52:44 -0800</bug_when>
    <thetext>Comment on attachment 178477
patch2

Attachment 178477 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/15238361</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>787066</commentid>
    <comment_count>6</comment_count>
      <attachid>178477</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2012-12-10 01:05:05 -0800</bug_when>
    <thetext>Comment on attachment 178477
patch2

Attachment 178477 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/15249002</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>787067</commentid>
    <comment_count>7</comment_count>
      <attachid>178477</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2012-12-10 01:11:52 -0800</bug_when>
    <thetext>Comment on attachment 178477
patch2

Attachment 178477 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/15242176</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>787449</commentid>
    <comment_count>8</comment_count>
      <attachid>178582</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-12-10 10:08:46 -0800</bug_when>
    <thetext>Created attachment 178582
patch3</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>787462</commentid>
    <comment_count>9</comment_count>
      <attachid>178582</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-12-10 10:13:59 -0800</bug_when>
    <thetext>Comment on attachment 178582
patch3

Seems like a great idea.  Thank you. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>787485</commentid>
    <comment_count>10</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2012-12-10 10:17:46 -0800</bug_when>
    <thetext>Morrita-san, this is relevant to work you&apos;re doing on bug 104332.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>787513</commentid>
    <comment_count>11</comment_count>
      <attachid>178586</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-12-10 10:39:50 -0800</bug_when>
    <thetext>Created attachment 178586
patch4</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>787657</commentid>
    <comment_count>12</comment_count>
      <attachid>178586</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2012-12-10 13:12:36 -0800</bug_when>
    <thetext>Comment on attachment 178586
patch4

Attachment 178586 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/15227785</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>787790</commentid>
    <comment_count>13</comment_count>
      <attachid>178654</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-12-10 15:44:26 -0800</bug_when>
    <thetext>Created attachment 178654
patch5

Based on Darin&apos;s suggestion renamed nextSibling -&gt; nextSkippingChildren</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>787825</commentid>
    <comment_count>14</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-12-10 16:14:45 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/137221</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>787846</commentid>
    <comment_count>15</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2012-12-10 16:43:51 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; Morrita-san, this is relevant to work you&apos;re doing on bug 104332.
Yeah, I&apos;m thinking about something like NodeRenderingTraversal for encapsulte
enabling/disabling ShadowComposedTreeWalker.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>178474</attachid>
            <date>2012-12-09 22:31:33 -0800</date>
            <delta_ts>2012-12-09 22:48:01 -0800</delta_ts>
            <desc>patch</desc>
            <filename>node-traversal-4.patch</filename>
            <type>text/plain</type>
            <size>152769</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzNzEwNykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQxNiBAQAorMjAxMi0xMi0wOSAgQW50dGkg
S29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CisKKyAgICAgICAgRmFjdG9yIG5vZGUgdHJhdmVy
c2FsIGludG8gc3RhbmRhbG9uZSBmdW5jdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNDUwNworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIE5vZGUgdHJhdmVyc2FsIGZ1bmN0aW9ucyBhcmUgY3VycmVu
dGx5IE5vZGUgYW5kIENvbnRhaW5lck5vZGUgbWVtYmVycy4gVGhlaXIgaW1wbGVtZW50YXRpb25z
CisgICAgICAgIGFyZSBjb25mdXNpbmdseSBzY2F0dGVyZWQgb3ZlciBtdWx0aXBsZSBoZWFkZXIg
YW5kIHNvdXJjZSBmaWxlcy4gVGhlc2UgZnVuY3Rpb25zIGhhdmUgbm8gcGFydGljdWxhcgorICAg
ICAgICByZWFzb24gdG8gYmUgbWVtYmVycyBhcyB0aGV5IGRvbid0IHJlcXVpcmUgbm9uLXB1Ymxp
YyBhY2Nlc3MuIFRoZXkgc2hvdWxkIGJlIG1hZGUgZnJlZXN0YW5kaW5nCisgICAgICAgIGZ1bmN0
aW9uIGluc3RlYWQgYW5kIGdhdGhlcmVkIHRvZ2V0aGVyLgorICAgICAgICAKKyAgICAgICAgVGhp
cyBwYXRjaCBhZGRzIE5vZGVUcmF2ZXJzYWwgbmFtZXNwYWNlLCBkZWZpbmVkIGluIE5vZGVUcmF2
ZXJzYWwuaC4gSXQgY29udGFpbnMgZnJlZXN0YW5kaW5nCisgICAgICAgIGZ1bmN0aW9ucyBmb3Ig
dHJhdmVyc2luZyBOb2Rlcy4gTW9zdCBwb3B1bGFyIGZ1bmN0aW9ucyBhcmUgaW5saW5lZCAoYXMg
YmVmb3JlKSBhbmQKKyAgICAgICAgdGhlcmUgYXJlIENvbnRhaW5lck5vZGUgc3BlY2lmaWMgc3Bl
Y2lhbGl6YXRpb25zIChhcyBiZWZvcmUpLgorICAgICAgICAKKyAgICAgICAgSW4gY2xpZW50IGNv
ZGUKKyAgICAgICAgCisgICAgICAgICAgICBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgp
OworICAgICAgICAKKyAgICAgICAgYmVjb21lcworICAgICAgICAKKyAgICAgICAgICAgIG5vZGUg
PSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUpOworICAgICAgICAgICAgCisgICAgICAgIGV0Yy4K
KworICAgICAgICAqIFdlYkNvcmUuZXhwLmluOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlO
b2RlT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0
OjphY2Nlc3NpYmlsaXR5RGVzY3JpcHRpb25Gb3JFbGVtZW50cyk6CisgICAgICAgICogYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vz
c2liaWxpdHlPYmplY3Q6OmZpcnN0QWNjZXNzaWJsZU9iamVjdEZyb21Ob2RlKToKKyAgICAgICAg
KiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YWRkSW1hZ2VNYXBDaGlsZHJlbik6
CisgICAgICAgICogYmluZGluZ3MvanMvSlNEb2N1bWVudEN1c3RvbS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjp0b0pTKToKKyAgICAgICAgKiBjc3MvU2VsZWN0b3JDaGVja2VyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNlbGVjdG9yQ2hlY2tlcjo6YWxsVmlzaXRlZFN0YXRlQ2hhbmdlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6OnZpc2l0ZWRTdGF0ZUNoYW5nZWQpOgor
ICAgICAgICAqIGNzcy9TdHlsZUludmFsaWRhdGlvbkFuYWx5c2lzLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlSW52YWxpZGF0aW9uQW5hbHlzaXM6OmludmFsaWRhdGVTdHlsZSk6CisgICAg
ICAgICogZG9tL0NvbnRhaW5lck5vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZGlzcGF0Y2hD
aGlsZEluc2VydGlvbkV2ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpkaXNwYXRjaENoaWxkUmVt
b3ZhbEV2ZW50cyk6CisgICAgICAgICogZG9tL0NvbnRhaW5lck5vZGUuaDoKKyAgICAgICAgKENv
bnRhaW5lck5vZGUpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogZG9tL0NvbnRhaW5l
ck5vZGVBbGdvcml0aG1zLmg6CisgICAgICAgIChXZWJDb3JlOjpDaGlsZEZyYW1lRGlzY29ubmVj
dG9yOjpjb2xsZWN0RGVzY2VuZGFudCk6CisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpidWlsZEFjY2Vzc0tleU1hcCk6CisgICAgICAgIChX
ZWJDb3JlOjpEb2N1bWVudDo6cmVtb3ZlQWxsRXZlbnRMaXN0ZW5lcnMpOgorICAgICAgICAoV2Vi
Q29yZTo6RG9jdW1lbnQ6OnVwZGF0ZUJhc2VVUkwpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1l
bnQ6OnByb2Nlc3NCYXNlRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6bm9k
ZUFic0luZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojpub2RlV2l0aEFic0luZGV4
KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpnZXRGb2N1c2FibGVOb2Rlcyk6CisgICAg
ICAgICogZG9tL0RvY3VtZW50TWFya2VyQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6Om1hcmtlcnNJblJhbmdlKToKKyAgICAgICAgKFdl
YkNvcmU6OkRvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6c2V0TWFya2Vyc0FjdGl2ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6Omhhc01hcmtlcnMpOgorICAg
ICAgICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpjbGVhckRlc2NyaXB0aW9u
T25NYXJrZXJzSW50ZXJzZWN0aW5nUmFuZ2UpOgorICAgICAgICAqIGRvbS9Eb2N1bWVudE9yZGVy
ZWRNYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRPcmRlcmVkTWFwOjpnZXQpOgor
ICAgICAgICAqIGRvbS9FbGVtZW50U2hhZG93LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1l
bnRTaGFkb3c6OmNvbGxlY3RTZWxlY3RGZWF0dXJlU2V0RnJvbSk6CisgICAgICAgICogZG9tL05v
ZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6bm9ybWFsaXplKToKKyAgICAgICAgKFdl
YkNvcmU6Ok5vZGU6OmxhenlBdHRhY2gpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChX
ZWJDb3JlOjpOb2RlOjpkZXRhY2gpOgorICAgICAgICAoV2ViQ29yZTo6dHJhdmVyc2VUcmVlQW5k
TWFyayk6CisgICAgICAgICogZG9tL05vZGUuaDoKKyAgICAgICAgKE5vZGUpOgorICAgICAgICAq
IGRvbS9Ob2RlSXRlcmF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZUl0ZXJhdG9yOjpO
b2RlUG9pbnRlcjo6bW92ZVRvTmV4dCk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlSXRlcmF0b3I6
Ok5vZGVQb2ludGVyOjptb3ZlVG9QcmV2aW91cyk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlSXRl
cmF0b3I6OnVwZGF0ZUZvck5vZGVSZW1vdmFsKToKKyAgICAgICAgKiBkb20vTm9kZVRyYXZlcnNh
bC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoTm9kZVRyYXZlcnNhbCk6
CisgICAgICAgIChXZWJDb3JlOjpOb2RlVHJhdmVyc2FsOjp0cmF2ZXJzZU5leHROb2RlVGVtcGxh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZVRyYXZlcnNhbDo6bmV4dCk6CisgICAgICAgIChX
ZWJDb3JlOjpOb2RlVHJhdmVyc2FsOjp0cmF2ZXJzZU5leHRTaWJsaW5nVGVtcGxhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6Tm9kZVRyYXZlcnNhbDo6bmV4dFNpYmxpbmcpOgorICAgICAgICAqIGRv
bS9SYW5nZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6dG9TdHJpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6UmFuZ2U6OmNoZWNrRGVsZXRlRXh0cmFjdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSYW5nZTo6Zmlyc3ROb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjpwYXN0TGFzdE5v
ZGUpOgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OnRleHRSZWN0cyk6CisgICAgICAgIChXZWJD
b3JlOjpSYW5nZTo6dGV4dFF1YWRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjpnZXRCb3Jk
ZXJBbmRUZXh0UXVhZHMpOgorICAgICAgICAqIGRvbS9UcmVlU2NvcGUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6VHJlZVNjb3BlOjpsYWJlbEVsZW1lbnRGb3JJZCk6CisgICAgICAgIChXZWJDb3Jl
OjpUcmVlU2NvcGU6OmZpbmRBbmNob3IpOgorICAgICAgICAqIGRvbS9UcmVlU2NvcGVBZG9wdGVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRyZWVTY29wZUFkb3B0ZXI6Om1vdmVUcmVlVG9OZXdT
Y29wZSk6CisgICAgICAgIChXZWJDb3JlOjpUcmVlU2NvcGVBZG9wdGVyOjptb3ZlVHJlZVRvTmV3
RG9jdW1lbnQpOgorICAgICAgICAqIGRvbS9UcmVlV2Fsa2VyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlRyZWVXYWxrZXI6Om5leHROb2RlKToKKyAgICAgICAgKiBlZGl0aW5nL0FwcGx5U3R5bGVD
b21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjphcHBseVJl
bGF0aXZlRm9udFN0eWxlQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21t
YW5kOjpmaXhSYW5nZUFuZEFwcGx5SW5saW5lU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6Y29u
dGFpbnNOb25FZGl0YWJsZVJlZ2lvbik6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29t
bWFuZDo6YXBwbHlJbmxpbmVTdHlsZVRvTm9kZVJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkFw
cGx5U3R5bGVDb21tYW5kOjpyZW1vdmVTdHlsZUZyb21SdW5CZWZvcmVBcHBseWluZ1N0eWxlKToK
KyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjpyZW1vdmVJbmxpbmVTdHlsZSk6
CisgICAgICAgICogZWRpdGluZy9CcmVha0Jsb2NrcXVvdGVDb21tYW5kLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkJyZWFrQmxvY2txdW90ZUNvbW1hbmQ6OmRvQXBwbHkpOgorICAgICAgICAqIGVk
aXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9z
aXRlRWRpdENvbW1hbmQ6OmRlbGV0ZUluc2lnbmlmaWNhbnRUZXh0KToKKyAgICAgICAgKFdlYkNv
cmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjpjbG9uZVBhcmFncmFwaFVuZGVyTmV3RWxlbWVudCk6
CisgICAgICAgICogZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OmZpcnN0RWRpdGFibGVQb3NpdGlvbkluTm9kZSk6CisgICAgICAgIChXZWJDb3Jl
OjpEZWxldGVTZWxlY3Rpb25Db21tYW5kOjptYWtlU3R5bGluZ0VsZW1lbnRzRGlyZWN0Q2hpbGRy
ZW5PZkVkaXRhYmxlUm9vdFRvUHJldmVudFN0eWxlTG9zcyk6CisgICAgICAgIChXZWJDb3JlOjpE
ZWxldGVTZWxlY3Rpb25Db21tYW5kOjpoYW5kbGVHZW5lcmFsRGVsZXRlKToKKyAgICAgICAgKiBl
ZGl0aW5nL0VkaXRDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUVkaXRDb21t
YW5kOjphZGROb2RlQW5kRGVzY2VuZGFudHMpOgorICAgICAgICAqIGVkaXRpbmcvRWRpdGluZ1N0
eWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRpbmdTdHlsZTo6dHJpU3RhdGVPZlN0eWxl
KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRpbmdTdHlsZTo6dGV4dERpcmVjdGlvbkZvclNlbGVj
dGlvbik6CisgICAgICAgICogZWRpdGluZy9FZGl0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjpzaW1wbGlmeU1hcmt1cCk6CisgICAgICAgICogZWRpdGluZy9GcmFtZVNlbGVjdGlv
bi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzY2FuRm9yRm9ybSk6CisgICAgICAgIChXZWJDb3Jl
OjpGcmFtZVNlbGVjdGlvbjo6c2V0U2VsZWN0aW9uRnJvbU5vbmUpOgorICAgICAgICAqIGVkaXRp
bmcvSW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAgKiBl
ZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
cGxhY2VtZW50RnJhZ21lbnQ6OnJlbW92ZVVucmVuZGVyZWROb2Rlcyk6CisgICAgICAgIChXZWJD
b3JlOjpSZXBsYWNlbWVudEZyYWdtZW50OjpyZW1vdmVJbnRlcmNoYW5nZU5vZGVzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpJbnNlcnRlZE5vZGVzOjp3aWxs
UmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpSZXBsYWNl
U2VsZWN0aW9uQ29tbWFuZDo6SW5zZXJ0ZWROb2Rlczo6d2lsbFJlbW92ZU5vZGUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OnJlbW92ZVJlZHVuZGFudFN0eWxl
c0FuZEtlZXBTdHlsZVNwYW5JbmxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6cmVtb3ZlSGVhZENv
bnRlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpoYW5k
bGVTdHlsZVNwYW5zKToKKyAgICAgICAgKiBlZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5k
Lmg6CisgICAgICAgIChXZWJDb3JlOjpSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6SW5zZXJ0ZWRO
b2Rlczo6cGFzdExhc3RMZWFmKToKKyAgICAgICAgKiBlZGl0aW5nL1NpbXBsaWZ5TWFya3VwQ29t
bWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGlmeU1hcmt1cENvbW1hbmQ6OmRvQXBw
bHkpOgorICAgICAgICAqIGVkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlRleHRJdGVyYXRvcjo6YWR2YW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpzaG91bGRFbWl0
TmV3bGluZUFmdGVyTm9kZSk6CisgICAgICAgICogZWRpdGluZy9odG1sZWRpdGluZy5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpoYXNBUmVuZGVyZWREZXNjZW5kYW50KToKKyAgICAgICAgKiBlZGl0
aW5nL21hYy9FZGl0b3JNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmZvbnRGb3JT
ZWxlY3Rpb24pOgorICAgICAgICAqIGVkaXRpbmcvbWFya3VwLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OmNvbXBsZXRlVVJMcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZWRNYXJrdXBBY2N1bXVs
YXRvcjo6dHJhdmVyc2VOb2Rlc0ZvclNlcmlhbGl6YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
ZmluZE5vZGVzU3Vycm91bmRpbmdDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OnRyaW1GcmFn
bWVudCk6CisgICAgICAgICogZWRpdGluZy92aXNpYmxlX3VuaXRzLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OnN0YXJ0T2ZQYXJhZ3JhcGgpOgorICAgICAgICAoV2ViQ29yZTo6ZW5kT2ZQYXJhZ3Jh
cGgpOgorICAgICAgICAqIGh0bWwvSFRNTENvbGxlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6bmV4dE5vZGUpOgorICAgICAgICAqIGh0bWwvSFRNTEVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6c2V0SGFzRGlyQXV0b0ZsYWdSZWN1cnNpdmVseSk6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MRWxlbWVudDo6ZGlyZWN0aW9uYWxpdHkpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEVs
ZW1lbnQ6OmFkanVzdERpcmVjdGlvbmFsaXR5SWZOZWVkZWRBZnRlckNoaWxkcmVuQ2hhbmdlZCk6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MRWxlbWVudDo6Z2V0SXRlbVJlZkVsZW1lbnRzKToKKyAg
ICAgICAgKiBodG1sL0hUTUxGaWVsZFNldEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTEZpZWxkU2V0RWxlbWVudDo6aW52YWxpZGF0ZURpc2FibGVkU3RhdGVVbmRlcik6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MRmllbGRTZXRFbGVtZW50OjpyZWZyZXNoRWxlbWVudHNJZk5lZWRl
ZCk6CisgICAgICAgICogaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTEZvcm1FbGVtZW50Ojpmb3JtRWxlbWVudEluZGV4KToKKyAgICAgICAgKiBodG1sL0hU
TUxMYWJlbEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTExhYmVsRWxlbWVudDo6
Y29udHJvbCk6CisgICAgICAgICogaHRtbC9IVE1MTGVnZW5kRWxlbWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MTGVnZW5kRWxlbWVudDo6YXNzb2NpYXRlZENvbnRyb2wpOgorICAgICAg
ICAqIGh0bWwvSFRNTE1hcEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1hcEVs
ZW1lbnQ6Om1hcE1vdXNlRXZlbnQpOgorICAgICAgICAqIGh0bWwvSFRNTE5hbWVDb2xsZWN0aW9u
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxOYW1lQ29sbGVjdGlvbjo6dmlydHVhbEl0ZW1B
ZnRlcik6CisgICAgICAgICogaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MT3B0aW9uRWxlbWVudDo6Y29sbGVjdE9wdGlvbklubmVyVGV4dCk6CisgICAg
ICAgICogaHRtbC9IVE1MUHJvcGVydGllc0NvbGxlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6bmV4dE5vZGVXaXRoUHJvcGVydHkpOgorICAgICAgICAqIGh0bWwvSFRNTFNlbGVjdEVsZW1l
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6OnJlY2FsY0xpc3RJ
dGVtcyk6CisgICAgICAgICogaHRtbC9IVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6c2VsZWN0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50Ojppbm5lclRleHRW
YWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6dmFs
dWVXaXRoSGFyZExpbmVCcmVha3MpOgorICAgICAgICAqIGh0bWwvUmFkaW9JbnB1dFR5cGUuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmFkaW9JbnB1dFR5cGU6OmhhbmRsZUtleWRvd25FdmVudCk6
CisgICAgICAgICogaHRtbC9zaGFkb3cvQ29udGVudERpc3RyaWJ1dG9yLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNoYWRvd1Jvb3RDb250ZW50RGlzdHJpYnV0aW9uRGF0YTo6ZW5zdXJlSW5zZXJ0
aW9uUG9pbnRMaXN0KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OnBlcmZvcm1TZWFyY2gpOgor
ICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JNZW1vcnlBZ2VudC5jcHA6CisgICAgICAgICog
cGFnZS9Gb2N1c0NvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9jdXNDb250cm9s
bGVyOjpmaW5kRm9jdXNDYW5kaWRhdGVJbkNvbnRhaW5lcik6CisgICAgICAgICogcGFnZS9GcmFt
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6c2VhcmNoRm9yTGFiZWxzQWJvdmVDZWxs
KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpzZWFyY2hGb3JMYWJlbHNCZWZvcmVFbGVtZW50
KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTmFtZWRGbG93VGhyZWFkLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlck5hbWVkRmxvd1RocmVhZDo6Z2V0UmFuZ2VzKToKKyAgICAgICAg
KiBzdmcvU1ZHU1ZHRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdTVkdFbGVtZW50
Ojpjb2xsZWN0SW50ZXJzZWN0aW9uT3JFbmNsb3N1cmVMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlNWR1NWR0VsZW1lbnQ6OmdldEVsZW1lbnRCeUlkKToKKyAgICAgICAgKiBzdmcvU1ZHVXNlRWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpyZW1vdmVEaXNhbGxvd2VkRWxlbWVudHNGcm9t
U3VidHJlZSk6CisgICAgICAgICogc3ZnL2FuaW1hdGlvbi9TTUlMVGltZUNvbnRhaW5lci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTTUlMVGltZUNvbnRhaW5lcjo6dXBkYXRlRG9jdW1lbnRPcmRl
ckluZGV4ZXMpOgorICAgICAgICAqIHhtbC9YUGF0aE5vZGVTZXQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6WFBhdGg6Ok5vZGVTZXQ6OnRyYXZlcnNhbFNvcnQpOgorICAgICAgICAqIHhtbC9YUGF0
aFN0ZXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OlN0ZXA6Om5vZGVzSW5BeGlzKToK
KyAgICAgICAgKiB4bWwvWFBhdGhVdGlsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpz
dHJpbmdWYWx1ZSk6CisKKzIwMTItMTItMDkgIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUu
Y29tPgorCisgICAgICAgIE5lZWQgYSBzaG9ydCBkZXNjcmlwdGlvbiAoT09QUyEpLgorICAgICAg
ICBOZWVkIHRoZSBidWcgVVJMIChPT1BTISkuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgQWRkaXRpb25hbCBpbmZvcm1hdGlvbiBvZiB0aGUgY2hhbmdl
IHN1Y2ggYXMgYXBwcm9hY2gsIHJhdGlvbmFsZS4gUGxlYXNlIGFkZCBwZXItZnVuY3Rpb24gZGVz
Y3JpcHRpb25zIGJlbG93IChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIChPT1BTISku
CisKKyAgICAgICAgKiBXZWJDb3JlLmV4cC5pbjoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
Tm9kZU9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVj
dDo6YWNjZXNzaWJpbGl0eURlc2NyaXB0aW9uRm9yRWxlbWVudHMpOgorICAgICAgICAqIGFjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nl
c3NpYmlsaXR5T2JqZWN0OjpmaXJzdEFjY2Vzc2libGVPYmplY3RGcm9tTm9kZSk6CisgICAgICAg
ICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmFkZEltYWdlTWFwQ2hpbGRyZW4p
OgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRG9jdW1lbnRDdXN0b20uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6dG9KUyk6CisgICAgICAgICogY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6OmFsbFZpc2l0ZWRTdGF0ZUNoYW5nZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDaGVja2VyOjp2aXNpdGVkU3RhdGVDaGFuZ2VkKToK
KyAgICAgICAgKiBjc3MvU3R5bGVJbnZhbGlkYXRpb25BbmFseXNpcy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZUludmFsaWRhdGlvbkFuYWx5c2lzOjppbnZhbGlkYXRlU3R5bGUpOgorICAg
ICAgICAqIGRvbS9Db250YWluZXJOb2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmRpc3BhdGNo
Q2hpbGRJbnNlcnRpb25FdmVudHMpOgorICAgICAgICAoV2ViQ29yZTo6ZGlzcGF0Y2hDaGlsZFJl
bW92YWxFdmVudHMpOgorICAgICAgICAqIGRvbS9Db250YWluZXJOb2RlLmg6CisgICAgICAgIChD
b250YWluZXJOb2RlKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIGRvbS9Db250YWlu
ZXJOb2RlQWxnb3JpdGhtcy5oOgorICAgICAgICAoV2ViQ29yZTo6Q2hpbGRGcmFtZURpc2Nvbm5l
Y3Rvcjo6Y29sbGVjdERlc2NlbmRhbnQpOgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6YnVpbGRBY2Nlc3NLZXlNYXApOgorICAgICAgICAo
V2ViQ29yZTo6RG9jdW1lbnQ6OnJlbW92ZUFsbEV2ZW50TGlzdGVuZXJzKToKKyAgICAgICAgKFdl
YkNvcmU6OkRvY3VtZW50Ojp1cGRhdGVCYXNlVVJMKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3Vt
ZW50Ojpwcm9jZXNzQmFzZUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6Om5v
ZGVBYnNJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6bm9kZVdpdGhBYnNJbmRl
eCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6Z2V0Rm9jdXNhYmxlTm9kZXMpOgorICAg
ICAgICAqIGRvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjptYXJrZXJzSW5SYW5nZSk6CisgICAgICAgIChX
ZWJDb3JlOjpEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnNldE1hcmtlcnNBY3RpdmUpOgorICAg
ICAgICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpoYXNNYXJrZXJzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6Y2xlYXJEZXNjcmlwdGlv
bk9uTWFya2Vyc0ludGVyc2VjdGluZ1JhbmdlKToKKyAgICAgICAgKiBkb20vRG9jdW1lbnRPcmRl
cmVkTWFwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50T3JkZXJlZE1hcDo6Z2V0KToK
KyAgICAgICAgKiBkb20vRWxlbWVudFNoYWRvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbGVt
ZW50U2hhZG93Ojpjb2xsZWN0U2VsZWN0RmVhdHVyZVNldEZyb20pOgorICAgICAgICAqIGRvbS9O
b2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6Om5vcm1hbGl6ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpOb2RlOjpsYXp5QXR0YWNoKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAo
V2ViQ29yZTo6Tm9kZTo6ZGV0YWNoKToKKyAgICAgICAgKFdlYkNvcmU6OnRyYXZlcnNlVHJlZUFu
ZE1hcmspOgorICAgICAgICAqIGRvbS9Ob2RlLmg6CisgICAgICAgIChOb2RlKToKKyAgICAgICAg
KiBkb20vTm9kZUl0ZXJhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVJdGVyYXRvcjo6
Tm9kZVBvaW50ZXI6Om1vdmVUb05leHQpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZUl0ZXJhdG9y
OjpOb2RlUG9pbnRlcjo6bW92ZVRvUHJldmlvdXMpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZUl0
ZXJhdG9yOjp1cGRhdGVGb3JOb2RlUmVtb3ZhbCk6CisgICAgICAgICogZG9tL05vZGVUcmF2ZXJz
YWwuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKE5vZGVUcmF2ZXJzYWwp
OgorICAgICAgICAoV2ViQ29yZTo6Tm9kZVRyYXZlcnNhbDo6dHJhdmVyc2VOZXh0Tm9kZVRlbXBs
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVUcmF2ZXJzYWw6Om5leHQpOgorICAgICAgICAo
V2ViQ29yZTo6Tm9kZVRyYXZlcnNhbDo6dHJhdmVyc2VOZXh0U2libGluZ1RlbXBsYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok5vZGVUcmF2ZXJzYWw6Om5leHRTaWJsaW5nKToKKyAgICAgICAgKiBk
b20vUmFuZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OnRvU3RyaW5nKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJhbmdlOjpjaGVja0RlbGV0ZUV4dHJhY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6UmFuZ2U6OmZpcnN0Tm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6cGFzdExhc3RO
b2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjp0ZXh0UmVjdHMpOgorICAgICAgICAoV2Vi
Q29yZTo6UmFuZ2U6OnRleHRRdWFkcyk6CisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6Z2V0Qm9y
ZGVyQW5kVGV4dFF1YWRzKToKKyAgICAgICAgKiBkb20vVHJlZVNjb3BlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlRyZWVTY29wZTo6bGFiZWxFbGVtZW50Rm9ySWQpOgorICAgICAgICAoV2ViQ29y
ZTo6VHJlZVNjb3BlOjpmaW5kQW5jaG9yKToKKyAgICAgICAgKiBkb20vVHJlZVNjb3BlQWRvcHRl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUcmVlU2NvcGVBZG9wdGVyOjptb3ZlVHJlZVRvTmV3
U2NvcGUpOgorICAgICAgICAoV2ViQ29yZTo6VHJlZVNjb3BlQWRvcHRlcjo6bW92ZVRyZWVUb05l
d0RvY3VtZW50KToKKyAgICAgICAgKiBkb20vVHJlZVdhbGtlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpUcmVlV2Fsa2VyOjpuZXh0Tm9kZSk6CisgICAgICAgICogZWRpdGluZy9BcHBseVN0eWxl
Q29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlS
ZWxhdGl2ZUZvbnRTdHlsZUNoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29t
bWFuZDo6Zml4UmFuZ2VBbmRBcHBseUlubGluZVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OmNv
bnRhaW5zTm9uRWRpdGFibGVSZWdpb24pOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNv
bW1hbmQ6OmFwcGx5SW5saW5lU3R5bGVUb05vZGVSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpB
cHBseVN0eWxlQ29tbWFuZDo6cmVtb3ZlU3R5bGVGcm9tUnVuQmVmb3JlQXBwbHlpbmdTdHlsZSk6
CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6cmVtb3ZlSW5saW5lU3R5bGUp
OgorICAgICAgICAqIGVkaXRpbmcvQnJlYWtCbG9ja3F1b3RlQ29tbWFuZC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpCcmVha0Jsb2NrcXVvdGVDb21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAgKiBl
ZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBv
c2l0ZUVkaXRDb21tYW5kOjpkZWxldGVJbnNpZ25pZmljYW50VGV4dCk6CisgICAgICAgIChXZWJD
b3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6Y2xvbmVQYXJhZ3JhcGhVbmRlck5ld0VsZW1lbnQp
OgorICAgICAgICAqIGVkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpmaXJzdEVkaXRhYmxlUG9zaXRpb25Jbk5vZGUpOgorICAgICAgICAoV2ViQ29y
ZTo6RGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6bWFrZVN0eWxpbmdFbGVtZW50c0RpcmVjdENoaWxk
cmVuT2ZFZGl0YWJsZVJvb3RUb1ByZXZlbnRTdHlsZUxvc3MpOgorICAgICAgICAoV2ViQ29yZTo6
RGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6aGFuZGxlR2VuZXJhbERlbGV0ZSk6CisgICAgICAgICog
ZWRpdGluZy9FZGl0Q29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVFZGl0Q29t
bWFuZDo6YWRkTm9kZUFuZERlc2NlbmRhbnRzKToKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRpbmdT
dHlsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFZGl0aW5nU3R5bGU6OnRyaVN0YXRlT2ZTdHls
ZSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0aW5nU3R5bGU6OnRleHREaXJlY3Rpb25Gb3JTZWxl
Y3Rpb24pOgorICAgICAgICAqIGVkaXRpbmcvRWRpdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkVkaXRvcjo6c2ltcGxpZnlNYXJrdXApOgorICAgICAgICAqIGVkaXRpbmcvRnJhbWVTZWxlY3Rp
b24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6c2NhbkZvckZvcm0pOgorICAgICAgICAoV2ViQ29y
ZTo6RnJhbWVTZWxlY3Rpb246OnNldFNlbGVjdGlvbkZyb21Ob25lKToKKyAgICAgICAgKiBlZGl0
aW5nL0luc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZDo6ZG9BcHBseSk6CisgICAgICAgICog
ZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZXBsYWNlbWVudEZyYWdtZW50OjpyZW1vdmVVbnJlbmRlcmVkTm9kZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVwbGFjZW1lbnRGcmFnbWVudDo6cmVtb3ZlSW50ZXJjaGFuZ2VOb2Rlcyk6CisgICAg
ICAgIChXZWJDb3JlOjpSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6SW5zZXJ0ZWROb2Rlczo6d2ls
bFJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6UmVwbGFj
ZVNlbGVjdGlvbkNvbW1hbmQ6Okluc2VydGVkTm9kZXM6OndpbGxSZW1vdmVOb2RlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpyZW1vdmVSZWR1bmRhbnRTdHls
ZXNBbmRLZWVwU3R5bGVTcGFuSW5saW5lKToKKyAgICAgICAgKFdlYkNvcmU6OnJlbW92ZUhlYWRD
b250ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6aGFu
ZGxlU3R5bGVTcGFucyk6CisgICAgICAgICogZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFu
ZC5oOgorICAgICAgICAoV2ViQ29yZTo6UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6Okluc2VydGVk
Tm9kZXM6OnBhc3RMYXN0TGVhZik6CisgICAgICAgICogZWRpdGluZy9TaW1wbGlmeU1hcmt1cENv
bW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxpZnlNYXJrdXBDb21tYW5kOjpkb0Fw
cGx5KToKKyAgICAgICAgKiBlZGl0aW5nL1RleHRJdGVyYXRvci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpUZXh0SXRlcmF0b3I6OmFkdmFuY2UpOgorICAgICAgICAoV2ViQ29yZTo6c2hvdWxkRW1p
dE5ld2xpbmVBZnRlck5vZGUpOgorICAgICAgICAqIGVkaXRpbmcvaHRtbGVkaXRpbmcuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6aGFzQVJlbmRlcmVkRGVzY2VuZGFudCk6CisgICAgICAgICogZWRp
dGluZy9tYWMvRWRpdG9yTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpmb250Rm9y
U2VsZWN0aW9uKToKKyAgICAgICAgKiBlZGl0aW5nL21hcmt1cC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpjb21wbGV0ZVVSTHMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVkTWFya3VwQWNjdW11
bGF0b3I6OnRyYXZlcnNlTm9kZXNGb3JTZXJpYWxpemF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OmZpbmROb2Rlc1N1cnJvdW5kaW5nQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjp0cmltRnJh
Z21lbnQpOgorICAgICAgICAqIGVkaXRpbmcvdmlzaWJsZV91bml0cy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpzdGFydE9mUGFyYWdyYXBoKToKKyAgICAgICAgKFdlYkNvcmU6OmVuZE9mUGFyYWdy
YXBoKToKKyAgICAgICAgKiBodG1sL0hUTUxDb2xsZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Om5leHROb2RlKToKKyAgICAgICAgKiBodG1sL0hUTUxFbGVtZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OnNldEhhc0RpckF1dG9GbGFnUmVjdXJzaXZlbHkpOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTEVsZW1lbnQ6OmRpcmVjdGlvbmFsaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxF
bGVtZW50OjphZGp1c3REaXJlY3Rpb25hbGl0eUlmTmVlZGVkQWZ0ZXJDaGlsZHJlbkNoYW5nZWQp
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTEVsZW1lbnQ6OmdldEl0ZW1SZWZFbGVtZW50cyk6Cisg
ICAgICAgICogaHRtbC9IVE1MRmllbGRTZXRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxGaWVsZFNldEVsZW1lbnQ6OmludmFsaWRhdGVEaXNhYmxlZFN0YXRlVW5kZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTEZpZWxkU2V0RWxlbWVudDo6cmVmcmVzaEVsZW1lbnRzSWZOZWVk
ZWQpOgorICAgICAgICAqIGh0bWwvSFRNTEZvcm1FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxGb3JtRWxlbWVudDo6Zm9ybUVsZW1lbnRJbmRleCk6CisgICAgICAgICogaHRtbC9I
VE1MTGFiZWxFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxMYWJlbEVsZW1lbnQ6
OmNvbnRyb2wpOgorICAgICAgICAqIGh0bWwvSFRNTExlZ2VuZEVsZW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTExlZ2VuZEVsZW1lbnQ6OmFzc29jaWF0ZWRDb250cm9sKToKKyAgICAg
ICAgKiBodG1sL0hUTUxNYXBFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNYXBF
bGVtZW50OjptYXBNb3VzZUV2ZW50KToKKyAgICAgICAgKiBodG1sL0hUTUxOYW1lQ29sbGVjdGlv
bi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTmFtZUNvbGxlY3Rpb246OnZpcnR1YWxJdGVt
QWZ0ZXIpOgorICAgICAgICAqIGh0bWwvSFRNTE9wdGlvbkVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTE9wdGlvbkVsZW1lbnQ6OmNvbGxlY3RPcHRpb25Jbm5lclRleHQpOgorICAg
ICAgICAqIGh0bWwvSFRNTFByb3BlcnRpZXNDb2xsZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Om5leHROb2RlV2l0aFByb3BlcnR5KToKKyAgICAgICAgKiBodG1sL0hUTUxTZWxlY3RFbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50OjpyZWNhbGNMaXN0
SXRlbXMpOgorICAgICAgICAqIGh0bWwvSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OnNlbGVjdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6aW5uZXJUZXh0
VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OnZh
bHVlV2l0aEhhcmRMaW5lQnJlYWtzKToKKyAgICAgICAgKiBodG1sL1JhZGlvSW5wdXRUeXBlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJhZGlvSW5wdXRUeXBlOjpoYW5kbGVLZXlkb3duRXZlbnQp
OgorICAgICAgICAqIGh0bWwvc2hhZG93L0NvbnRlbnREaXN0cmlidXRvci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTaGFkb3dSb290Q29udGVudERpc3RyaWJ1dGlvbkRhdGE6OmVuc3VyZUluc2Vy
dGlvblBvaW50TGlzdCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50OjpwZXJmb3JtU2VhcmNoKToK
KyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yTWVtb3J5QWdlbnQuY3BwOgorICAgICAgICAq
IHBhZ2UvRm9jdXNDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvY3VzQ29udHJv
bGxlcjo6ZmluZEZvY3VzQ2FuZGlkYXRlSW5Db250YWluZXIpOgorICAgICAgICAqIHBhZ2UvRnJh
bWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWU6OnNlYXJjaEZvckxhYmVsc0Fib3ZlQ2Vs
bCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6c2VhcmNoRm9yTGFiZWxzQmVmb3JlRWxlbWVu
dCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck5hbWVkRmxvd1RocmVhZC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJOYW1lZEZsb3dUaHJlYWQ6OmdldFJhbmdlcyk6CisgICAgICAg
ICogc3ZnL1NWR1NWR0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU1ZHRWxlbWVu
dDo6Y29sbGVjdEludGVyc2VjdGlvbk9yRW5jbG9zdXJlTGlzdCk6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdTVkdFbGVtZW50OjpnZXRFbGVtZW50QnlJZCk6CisgICAgICAgICogc3ZnL1NWR1VzZUVs
ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cmVtb3ZlRGlzYWxsb3dlZEVsZW1lbnRzRnJv
bVN1YnRyZWUpOgorICAgICAgICAqIHN2Zy9hbmltYXRpb24vU01JTFRpbWVDb250YWluZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U01JTFRpbWVDb250YWluZXI6OnVwZGF0ZURvY3VtZW50T3Jk
ZXJJbmRleGVzKToKKyAgICAgICAgKiB4bWwvWFBhdGhOb2RlU2V0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlhQYXRoOjpOb2RlU2V0Ojp0cmF2ZXJzYWxTb3J0KToKKyAgICAgICAgKiB4bWwvWFBh
dGhTdGVwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpTdGVwOjpub2Rlc0luQXhpcyk6
CisgICAgICAgICogeG1sL1hQYXRoVXRpbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6
c3RyaW5nVmFsdWUpOgorCiAyMDEyLTEyLTA5ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQu
b3JnPgogCiAgICAgICAgIFJFR1JFU1NJT04gKHIxMzcwMDMpOiBmYWlsdXJlcyBpbiBNaWNyb0Rh
dGEgdGVzdHMgb24gRUZMLCBHVEsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAx
MzY2MDYpCisrKyBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtMTE5Myw2ICsxMTkzLDcgQEAgU0VUKFdlYkNvcmVfU09VUkNFUwogICAgIGRvbS9Ob2RlSXRl
cmF0b3IuY3BwCiAgICAgZG9tL05vZGVSYXJlRGF0YS5jcHAKICAgICBkb20vTm9kZVJlbmRlcmlu
Z0NvbnRleHQuY3BwCisgICAgZG9tL05vZGVUcmF2ZXJzYWwuY3BwCiAgICAgZG9tL05vdGF0aW9u
LmNwcAogICAgIGRvbS9PdmVyZmxvd0V2ZW50LmNwcAogICAgIGRvbS9QYWdlVHJhbnNpdGlvbkV2
ZW50LmNwcApJbmRleDogU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCShyZXZpc2lvbiAxMzY2
MDYpCisrKyBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCSh3b3JraW5nIGNvcHkp
CkBAIC0yODgxLDYgKzI4ODEsOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJD
b3JlL2RvbS9Ob2RlUmFyZURhdGEuaCBcCiAJU291cmNlL1dlYkNvcmUvZG9tL05vZGVSZW5kZXJp
bmdDb250ZXh0LmggXAogCVNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlUmVuZGVyU3R5bGUuaCBcCisg
ICAgU291cmNlL1dlYkNvcmUvZG9tL05vZGVUcmF2ZXJzYWwuY3BwIFwKKyAgICBTb3VyY2UvV2Vi
Q29yZS9kb20vTm9kZVRyYXZlcnNhbC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9kb20vTm9kZVdpdGhJ
bmRleC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9kb20vTm90YXRpb24uY3BwIFwKIAlTb3VyY2UvV2Vi
Q29yZS9kb20vTm90YXRpb24uaCBcCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkJKHJldmlzaW9uIDEzNjYwNikK
KysrIFNvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkJKHdvcmtpbmcgY29weSkKQEAgLTQzMCw2ICs0
MzAsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBkb20vTm9kZUl0ZXJhdG9yLmNwcCBcCiAgICAgZG9t
L05vZGVSYXJlRGF0YS5jcHAgXAogICAgIGRvbS9Ob2RlUmVuZGVyaW5nQ29udGV4dC5jcHAgXAor
ICAgIGRvbS9Ob2RlVHJhdmVyc2FsLmNwcCBcCiAgICAgZG9tL05vdGF0aW9uLmNwcCBcCiAgICAg
ZG9tL1N0YXRpY0hhc2hTZXROb2RlTGlzdC5jcHAgXAogICAgIGRvbS9PdmVyZmxvd0V2ZW50LmNw
cCBcCkBAIC0xNjA5LDYgKzE2MTAsNyBAQCBIRUFERVJTICs9IFwKICAgICBkb20vTm9kZUl0ZXJh
dG9yLmggXAogICAgIGRvbS9Ob2RlUmFyZURhdGEuaCBcCiAgICAgZG9tL05vZGVSZW5kZXJpbmdD
b250ZXh0LmggXAorICAgIGRvbS9Ob2RlVHJhdmVyc2FsLmggXAogICAgIGRvbS9Ob3RhdGlvbi5o
IFwKICAgICBkb20vU3RhdGljSGFzaFNldE5vZGVMaXN0LmggXAogICAgIGRvbS9PdmVyZmxvd0V2
ZW50LmggXApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHJldmlzaW9uIDEzNjYwNikKKysrIFNv
dXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCSh3b3JraW5nIGNvcHkpCkBAIC0yMjcsNiArMjI3
LDggQEAgX19aTjdXZWJDb3JlMTNJZGVudGlmaWVyUmVwM2dldEVpCiBfX1pON1dlYkNvcmUxM0pT
SFRNTEVsZW1lbnQ2c19pbmZvRQogX19aTjdXZWJDb3JlMTNLZXlib2FyZEV2ZW50QzFFUktOM1dU
RjEyQXRvbWljU3RyaW5nRWJiUE5TXzlET01XaW5kb3dFUktOUzFfNlN0cmluZ0VqYmJiYmIKIF9f
Wk43V2ViQ29yZTEzS2V5Ym9hcmRFdmVudEMxRVJLTlNfMjFQbGF0Zm9ybUtleWJvYXJkRXZlbnRF
UE5TXzlET01XaW5kb3dFCitfX1pON1dlYkNvcmUxM05vZGVUcmF2ZXJzYWwxOW5leHRBbmNlc3Rv
clNpYmxpbmdFUEtOU180Tm9kZUUKK19fWk43V2ViQ29yZTEzTm9kZVRyYXZlcnNhbDhwcmV2aW91
c0VQS05TXzROb2RlRVMzXwogX19aTjdXZWJDb3JlMTNRdWFsaWZpZWROYW1lRDFFdgogX19aTjdX
ZWJDb3JlMTNSZXNvdXJjZUVycm9yQzFFUDdOU0Vycm9yCiBfX1pON1dlYkNvcmUxM1Jlc291cmNl
RXJyb3JDMUVQOV9fQ0ZFcnJvcgpAQCAtMTM2MCw4ICsxMzYyLDYgQEAgX19aTjdXZWJDb3JlNE5v
ZGUxMmluc2VydEJlZm9yZUVOM1dURjEwUAogX19aTks3V2ViQ29yZTROb2RlMTNvd25lckRvY3Vt
ZW50RXYKIF9fWk5LN1dlYkNvcmU0Tm9kZTE0aXNEZXNjZW5kYW50T2ZFUEtTMF8KIF9fWk5LN1dl
YkNvcmU0Tm9kZTE4Z2V0U3VicmVzb3VyY2VVUkxzRVJOM1dURjExTGlzdEhhc2hTZXRJTlNfNEtV
UkxFTG0yNTZFTlNfOEtVUkxIYXNoRUVFCi1fX1pOSzdXZWJDb3JlNE5vZGUyMHRyYXZlcnNlUHJl
dmlvdXNOb2RlRVBLUzBfCi1fX1pOSzdXZWJDb3JlNE5vZGUyN3RyYXZlcnNlTmV4dEFuY2VzdG9y
U2libGluZ0V2CiBfX1pOSzdXZWJDb3JlNE5vZGUzMW51bWJlck9mU2NvcGVkSFRNTFN0eWxlQ2hp
bGRyZW5FdgogX19aTks3V2ViQ29yZTROb2RlOW5vZGVJbmRleEV2CiBfX1pOSzdXZWJDb3JlNFBh
Z2UxMHBsdWdpbkRhdGFFdgpAQCAtMjA1Myw3ICsyMDUzLDYgQEAgX19aTks3V2ViQ29yZTE1Vmlz
aWJsZVBvc2l0aW9uNXJpZ2h0RWIKIF9fWk5LN1dlYkNvcmUxN1JlbmRlclRleHRDb250cm9sMjJ0
ZXh0Rm9ybUNvbnRyb2xFbGVtZW50RXYKIF9fWk5LN1dlYkNvcmUxN1JlbmRlclRleHRDb250cm9s
MjN2aXNpYmxlUG9zaXRpb25Gb3JJbmRleEVpCiBfX1pOSzdXZWJDb3JlNE5vZGUxOHJlbmRlcmVy
SXNFZGl0YWJsZUVOUzBfMTNFZGl0YWJsZUxldmVsRQotX19aTks3V2ViQ29yZTROb2RlMjd0cmF2
ZXJzZU5leHRBbmNlc3RvclNpYmxpbmdFUEtTMF8KIF9fWk5LN1dlYkNvcmU1RnJhbWUxMnVwZGF0
ZUxheW91dEV2CiBfX1pOSzdXZWJDb3JlNUZyYW1lMTNkb2N1bWVudFNjYWxlRXYKIF9fWk5LN1dl
YkNvcmU1RnJhbWUxNWlubmVyTGluZUhlaWdodEVQN0RPTU5vZGUKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCShyZXZpc2lvbiAxMzY2MDYpCisr
KyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkod29ya2luZyBj
b3B5KQpAQCAtNTMzMjUsNiArNTMzMjUsMTQgQEAKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGRvbVxO
b2RlUmVuZGVyaW5nQ29udGV4dC5oIgogCQkJCT4KIAkJCTwvRmlsZT4KKyAgICAgICAgICAgIDxG
aWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxkb21cTm9kZVRyYXZlcnNhbC5jcHAiCisJCQkJPgor
CQkJPC9GaWxlPgorICAgICAgICAgICAgPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGRvbVxO
b2RlVHJhdmVyc2FsLmgiCisJCQkJPgorCQkJPC9GaWxlPgogCQkJPEZpbGUKIAkJCQlSZWxhdGl2
ZVBhdGg9Ii4uXGRvbVxOb3RhdGlvbi5jcHAiCiAJCQkJPgpJbmRleDogU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTM2NjA2
KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3
b3JraW5nIGNvcHkpCkBAIC02MTcyLDYgKzYxNzIsOCBAQAogCQlFNDE1RjE2OTBEOUExNjVEMDAz
M0NFOTcgLyogRE9NRWxlbWVudFRpbWVDb250cm9sLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDE1RjE2ODBEOUExNjVEMDAzM0NFOTcgLyogRE9NRWxl
bWVudFRpbWVDb250cm9sLmggKi87IH07CiAJCUU0MTVGMTg0MEQ5QTFBODMwMDMzQ0U5NyAvKiBF
bGVtZW50VGltZUNvbnRyb2wuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEU0MTVGMTgzMEQ5QTFBODMwMDMzQ0U5NyAvKiBFbGVtZW50VGltZUNvbnRyb2wu
aCAqLzsgfTsKIAkJRTQyOTVGQTQxMkIwNjE0RTAwRDFBQ0UwIC8qIFJlc291cmNlTG9hZFByaW9y
aXR5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDI5
NUZBMzEyQjA2MTRFMDBEMUFDRTAgLyogUmVzb3VyY2VMb2FkUHJpb3JpdHkuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlFNDMxMDVCODE2NzUwRjBD
MDBEQjJGQjggLyogTm9kZVRyYXZlcnNhbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBFNDMxMDVCNzE2NzUwRjBDMDBEQjJGQjggLyogTm9kZVRyYXZl
cnNhbC5jcHAgKi87IH07CisJCUU0MzEwNUJCMTY3NTBGMTYwMERCMkZCOCAvKiBOb2RlVHJhdmVy
c2FsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDMx
MDVCQTE2NzUwRjE2MDBEQjJGQjggLyogTm9kZVRyYXZlcnNhbC5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUU0NDYxM0ExMENENjMzMTAwMEZBREE3
NSAvKiBIVE1MQXVkaW9FbGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEU0NDYxMzhGMENENjMzMTAwMEZBREE3NSAvKiBIVE1MQXVkaW9FbGVt
ZW50LmNwcCAqLzsgfTsKIAkJRTQ0NjEzQTIwQ0Q2MzMxMDAwRkFEQTc1IC8qIEhUTUxBdWRpb0Vs
ZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0
NDYxMzkwMENENjMzMTAwMEZBREE3NSAvKiBIVE1MQXVkaW9FbGVtZW50LmggKi87IH07CiAJCUU0
NDYxM0E0MENENjMzMTAwMEZBREE3NSAvKiBIVE1MTWVkaWFFbGVtZW50LmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0NDYxMzkyMENENjMzMTAwMEZB
REE3NSAvKiBIVE1MTWVkaWFFbGVtZW50LmNwcCAqLzsgfTsKQEAgLTEwNDY3LDcgKzEwNDY5LDcg
QEAKIAkJOTMyRTE2MDgwQUY1NzgzNDAwMjVGNDA4IC8qIEZyYW1lTG9hZGVyLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZyYW1lTG9hZGVyLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTMzMDlEODcwOTlFNjQ5MTAwNTZFNTgxIC8qIEFwcGVuZE5v
ZGVDb21tYW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFwcGVu
ZE5vZGVDb21tYW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTMzMDlEODgw
OTlFNjQ5MTAwNTZFNTgxIC8qIEFwcGVuZE5vZGVDb21tYW5kLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEFwcGVuZE5vZGVDb21tYW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTkzMzA5RDg5MDk5RTY0OTEwMDU2RTU4MSAvKiBBcHBseVN0eWxlQ29tbWFuZC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBcHBseVN0eWxlQ29tbWFu
ZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTkzMzA5RDg5MDk5RTY0OTEwMDU2
RTU4MSAvKiBBcHBseVN0eWxlQ29tbWFuZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IGxpbmVFbmRpbmcgPSAwOyBwYXRoID0gQXBwbHlTdHlsZUNvbW1hbmQuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB4Y0xhbmd1YWdlU3BlY2lmaWNhdGlvbklkZW50aWZpZXIgPSB4Y29k
ZS5sYW5nLmNwcDsgfTsKIAkJOTMzMDlEOEEwOTlFNjQ5MTAwNTZFNTgxIC8qIEFwcGx5U3R5bGVD
b21tYW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFwcGx5U3R5bGVDb21t
YW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzMzA5RDhCMDk5RTY0OTEwMDU2
RTU4MSAvKiBCcmVha0Jsb2NrcXVvdGVDb21tYW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEJyZWFrQmxvY2txdW90ZUNvbW1hbmQuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk5MzMwOUQ4QzA5OUU2NDkxMDA1NkU1ODEgLyogQnJlYWtCbG9ja3F1
b3RlQ29tbWFuZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCcmVha0Jsb2Nr
cXVvdGVDb21tYW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMzY1NCw2ICsx
MzY1Niw4IEBACiAJCUU0MUVBMDM4MTE5ODM2REIwMDcxMEJDNSAvKiBDU1NQcm9wZXJ0eU5hbWVz
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENTU1Byb3BlcnR5TmFt
ZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNDFFQTAzOTExOTgzNzQ5MDA3
MTBCQzUgLyogQ1NTVmFsdWVLZXl3b3Jkcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBDU1NWYWx1ZUtleXdvcmRzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRTQyOTVGQTMxMkIwNjE0RTAwRDFBQ0UwIC8qIFJlc291cmNlTG9hZFByaW9yaXR5Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlc291cmNlTG9hZFByaW9yaXR5Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUU0MzEwNUI3MTY3NTBGMEMwMERCMkZCOCAv
KiBOb2RlVHJhdmVyc2FsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IE5vZGVUcmF2ZXJzYWwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFNDMxMDVC
QTE2NzUwRjE2MDBEQjJGQjggLyogTm9kZVRyYXZlcnNhbC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBOb2RlVHJhdmVyc2FsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUU0NDYxMzhGMENENjMzMTAwMEZBREE3NSAvKiBIVE1MQXVkaW9FbGVtZW50LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEhUTUxBdWRpb0VsZW1lbnQuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNDQ2MTM5MDBDRDYzMzEwMDBGQURBNzUgLyog
SFRNTEF1ZGlvRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIVE1M
QXVkaW9FbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0NDYxMzkxMENE
NjMzMTAwMEZBREE3NSAvKiBIVE1MQXVkaW9FbGVtZW50LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBh
dGggPSBIVE1MQXVkaW9FbGVtZW50LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTIyMDgxLDYgKzIyMDg1LDggQEAKIAkJCQlBN0Y1RDk0RDEzODRGMDJEMDBBMjlBODcgLyogTm9k
ZVJlbmRlcmluZ0NvbnRleHQuY3BwICovLAogCQkJCUE3RjVEOTRFMTM4NEYwMkQwMEEyOUE4NyAv
KiBOb2RlUmVuZGVyaW5nQ29udGV4dC5oICovLAogCQkJCTYzRDdCMzJDMEU3OENEM0YwMEY3NjE3
QyAvKiBOb2RlUmVuZGVyU3R5bGUuaCAqLywKKwkJCQlFNDMxMDVCNzE2NzUwRjBDMDBEQjJGQjgg
LyogTm9kZVRyYXZlcnNhbC5jcHAgKi8sCisJCQkJRTQzMTA1QkExNjc1MEYxNjAwREIyRkI4IC8q
IE5vZGVUcmF2ZXJzYWwuaCAqLywKIAkJCQk5MzgyQUFCMTBEOEMzODYxMDBGMzU3QTYgLyogTm9k
ZVdpdGhJbmRleC5oICovLAogCQkJCUE4RUE3RUI3MEExOTQ1RDAwMEE4RUY1RiAvKiBOb3RhdGlv
bi5jcHAgKi8sCiAJCQkJQThFQTdFQjYwQTE5NDVEMDAwQThFRjVGIC8qIE5vdGF0aW9uLmggKi8s
CkBAIC0yMjUzNiw2ICsyMjU0Miw3IEBACiAJCQlpc2EgPSBQQlhIZWFkZXJzQnVpbGRQaGFzZTsK
IAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CiAJCQlmaWxlcyA9ICgKKwkJCQlFNDMx
MDVCQjE2NzUwRjE2MDBEQjJGQjggLyogTm9kZVRyYXZlcnNhbC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQzM3NUQ3RkUxNjYzOTUxOTAwNjE4NEFCIC8qIFR5cGVBaGVhZC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJRkQxQUYxNTAxNjU2RjE1MTAwQzZENEY3IC8qIEV4Y2x1c2lvblNoYXBlVmFsdWUuaCBp
biBIZWFkZXJzICovLAogCQkJCUJDN0ZBNjIxMEQxRjBDQkQwMERCMjJBOSAvKiBMaXZlTm9kZUxp
c3QuaCBpbiBIZWFkZXJzICovLApAQCAtMjg5NzcsNiArMjg5ODQsNyBAQAogCQkJCTg2QkE3NjZF
MTY2NDI3QTgwMDVCRTVEMSAvKiBGcmFtZUxvYWRSZXF1ZXN0LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTkzRjcyQUY0MTY2NkVERkMwMDJBMDJCRCAvKiBMYXllclBvb2wubW0gaW4gU291cmNlcyAq
LywKIAkJCQlDMzc1RDdGRDE2NjM5NTE5MDA2MTg0QUIgLyogVHlwZUFoZWFkLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCUU0MzEwNUI4MTY3NTBGMEMwMERCMkZCOCAvKiBOb2RlVHJhdmVyc2FsLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nl
c3NpbmcgPSAwOwogCQl9OwpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nl
c3NpYmlsaXR5Tm9kZU9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5jcHAJKHJldmlzaW9uIDEzNjYwNikK
KysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Qu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Myw2ICs2Myw3IEBACiAjaW5jbHVkZSAiTG9jYWxpemVk
U3RyaW5ncy5oIgogI2luY2x1ZGUgIk1hdGhNTE5hbWVzLmgiCiAjaW5jbHVkZSAiTm9kZUxpc3Qu
aCIKKyNpbmNsdWRlICJOb2RlVHJhdmVyc2FsLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1
ZGUgIlByb2dyZXNzVHJhY2tlci5oIgogI2luY2x1ZGUgIlRleHQuaCIKQEAgLTE1ODYsNyArMTU4
Nyw3IEBAIFN0cmluZyBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6YWNjZXNzaWIKICAgICAgICAg
RWxlbWVudCogaWRFbGVtZW50ID0gZWxlbWVudHNbaV07CiAKICAgICAgICAgYnVpbGRlci5hcHBl
bmQoYWNjZXNzaWJsZU5hbWVGb3JOb2RlKGlkRWxlbWVudCkpOwotICAgICAgICBmb3IgKE5vZGUq
IG4gPSBpZEVsZW1lbnQtPmZpcnN0Q2hpbGQoKTsgbjsgbiA9IG4tPnRyYXZlcnNlTmV4dE5vZGUo
aWRFbGVtZW50KSkKKyAgICAgICAgZm9yIChOb2RlKiBuID0gaWRFbGVtZW50LT5maXJzdENoaWxk
KCk7IG47IG4gPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG4sIGlkRWxlbWVudCkpCiAgICAgICAgICAg
ICBidWlsZGVyLmFwcGVuZChhY2Nlc3NpYmxlTmFtZUZvck5vZGUobikpOwogCiAgICAgICAgIGlm
IChpICE9IHNpemUgLSAxKQpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nl
c3NpYmlsaXR5T2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCShyZXZpc2lvbiAxMzY2MDYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVk
ZSAiTG9jYWxpemVkU3RyaW5ncy5oIgogI2luY2x1ZGUgIk5vZGVMaXN0LmgiCisjaW5jbHVkZSAi
Tm9kZVRyYXZlcnNhbC5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAi
UGFnZS5oIgogI2luY2x1ZGUgIlJlbmRlckltYWdlLmgiCkBAIC0zNjAsMTAgKzM2MSwxMCBAQCBB
Y2Nlc3NpYmlsaXR5T2JqZWN0KiBBY2Nlc3NpYmlsaXR5T2JqZWN0CiAKICAgICBBY2Nlc3NpYmls
aXR5T2JqZWN0KiBhY2Nlc3NpYmxlT2JqZWN0ID0gY2FjaGUtPmdldE9yQ3JlYXRlKG5vZGUtPnJl
bmRlcmVyKCkpOwogICAgIHdoaWxlIChhY2Nlc3NpYmxlT2JqZWN0ICYmIGFjY2Vzc2libGVPYmpl
Y3QtPmFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKSkgewotICAgICAgICBub2RlID0gbm9kZS0+dHJh
dmVyc2VOZXh0Tm9kZSgpOworICAgICAgICBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dChub2Rl
KTsKIAogICAgICAgICB3aGlsZSAobm9kZSAmJiAhbm9kZS0+cmVuZGVyZXIoKSkKLSAgICAgICAg
ICAgIG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHRTaWJsaW5nKCk7CisgICAgICAgICAgICBub2Rl
ID0gTm9kZVRyYXZlcnNhbDo6bmV4dFNpYmxpbmcobm9kZSk7CiAKICAgICAgICAgaWYgKCFub2Rl
KQogICAgICAgICAgICAgcmV0dXJuIDA7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAJKHJldmlz
aW9uIDEzNjYwNikKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eVJlbmRlck9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYxLDYgKzYxLDcgQEAKICNpbmNs
dWRlICJMb2NhbGl6ZWRTdHJpbmdzLmgiCiAjaW5jbHVkZSAiTWF0aE1MTmFtZXMuaCIKICNpbmNs
dWRlICJOb2RlTGlzdC5oIgorI2luY2x1ZGUgIk5vZGVUcmF2ZXJzYWwuaCIKICNpbmNsdWRlICJQ
YWdlLmgiCiAjaW5jbHVkZSAiUHJvZ3Jlc3NUcmFja2VyLmgiCiAjaW5jbHVkZSAiUmVuZGVyQnV0
dG9uLmgiCkBAIC0yNjU2LDcgKzI2NTcsNyBAQCB2b2lkIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmpl
Y3Q6OmFkZEltYWdlCiAgICAgaWYgKCFtYXApCiAgICAgICAgIHJldHVybjsKIAotICAgIGZvciAo
Tm9kZSogY3VycmVudCA9IG1hcC0+Zmlyc3RDaGlsZCgpOyBjdXJyZW50OyBjdXJyZW50ID0gY3Vy
cmVudC0+dHJhdmVyc2VOZXh0Tm9kZShtYXApKSB7CisgICAgZm9yIChOb2RlKiBjdXJyZW50ID0g
bWFwLT5maXJzdENoaWxkKCk7IGN1cnJlbnQ7IGN1cnJlbnQgPSBOb2RlVHJhdmVyc2FsOjpuZXh0
KGN1cnJlbnQsIG1hcCkpIHsKICAgICAgICAgCiAgICAgICAgIC8vIGFkZCBhbiA8YXJlYT4gZWxl
bWVudCBmb3IgdGhpcyBjaGlsZCBpZiBpdCBoYXMgYSBsaW5rCiAgICAgICAgIGlmIChjdXJyZW50
LT5oYXNUYWdOYW1lKGFyZWFUYWcpICYmIGN1cnJlbnQtPmlzTGluaygpKSB7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RvY3VtZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RvY3VtZW50Q3VzdG9tLmNwcAkocmV2aXNp
b24gMTM2NjA2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEb2N1bWVudEN1c3Rv
bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJKU1RvdWNo
LmgiCiAjaW5jbHVkZSAiSlNUb3VjaExpc3QuaCIKICNpbmNsdWRlICJMb2NhdGlvbi5oIgorI2lu
Y2x1ZGUgIk5vZGVUcmF2ZXJzYWwuaCIKICNpbmNsdWRlICJTY3JpcHRDb250cm9sbGVyLmgiCiAj
aW5jbHVkZSAiVG91Y2hMaXN0LmgiCiAKQEAgLTEwNyw3ICsxMDgsNyBAQCBKU1ZhbHVlIHRvSlMo
RXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhCiAgICAgLy8gYmFjay9mb3J3YXJkIGNhY2hlLgog
ICAgIGlmICghZG9jdW1lbnQtPmZyYW1lKCkpIHsKICAgICAgICAgc2l6ZV90IG5vZGVDb3VudCA9
IDA7Ci0gICAgICAgIGZvciAoTm9kZSogbiA9IGRvY3VtZW50OyBuOyBuID0gbi0+dHJhdmVyc2VO
ZXh0Tm9kZSgpKQorICAgICAgICBmb3IgKE5vZGUqIG4gPSBkb2N1bWVudDsgbjsgbiA9IE5vZGVU
cmF2ZXJzYWw6Om5leHQobikpCiAgICAgICAgICAgICBub2RlQ291bnQrKzsKICAgICAgICAgCiAg
ICAgICAgIGV4ZWMtPmhlYXAoKS0+cmVwb3J0RXh0cmFNZW1vcnlDb3N0KG5vZGVDb3VudCAqIHNp
emVvZihOb2RlKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmNwcAko
cmV2aXNpb24gMTM2NjA2KQorKysgU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDYgKzQ0LDcgQEAKICNpbmNsdWRlICJIVE1MU3R5bGVF
bGVtZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgiCiAjaW5jbHVk
ZSAiTm9kZVJlbmRlclN0eWxlLmgiCisjaW5jbHVkZSAiTm9kZVRyYXZlcnNhbC5oIgogI2luY2x1
ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQYWdlR3JvdXAuaCIKICNpbmNsdWRlICJSZW5kZXJPYmpl
Y3QuaCIKQEAgLTEyMjQsNyArMTIyNSw3IEBAIHZvaWQgU2VsZWN0b3JDaGVja2VyOjphbGxWaXNp
dGVkU3RhdGVDaGEKIHsKICAgICBpZiAobV9saW5rc0NoZWNrZWRGb3JWaXNpdGVkU3RhdGUuaXNF
bXB0eSgpKQogICAgICAgICByZXR1cm47Ci0gICAgZm9yIChOb2RlKiBub2RlID0gbV9kb2N1bWVu
dDsgbm9kZTsgbm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoKSkgeworICAgIGZvciAoTm9k
ZSogbm9kZSA9IG1fZG9jdW1lbnQ7IG5vZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5v
ZGUpKSB7CiAgICAgICAgIGlmIChub2RlLT5pc0xpbmsoKSkKICAgICAgICAgICAgIG5vZGUtPnNl
dE5lZWRzU3R5bGVSZWNhbGMoKTsKICAgICB9CkBAIC0xMjM0LDcgKzEyMzUsNyBAQCB2b2lkIFNl
bGVjdG9yQ2hlY2tlcjo6dmlzaXRlZFN0YXRlQ2hhbmdlCiB7CiAgICAgaWYgKCFtX2xpbmtzQ2hl
Y2tlZEZvclZpc2l0ZWRTdGF0ZS5jb250YWlucyh2aXNpdGVkSGFzaCkpCiAgICAgICAgIHJldHVy
bjsKLSAgICBmb3IgKE5vZGUqIG5vZGUgPSBtX2RvY3VtZW50OyBub2RlOyBub2RlID0gbm9kZS0+
dHJhdmVyc2VOZXh0Tm9kZSgpKSB7CisgICAgZm9yIChOb2RlKiBub2RlID0gbV9kb2N1bWVudDsg
bm9kZTsgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9kZSkpIHsKICAgICAgICAgTGlua0hh
c2ggaGFzaCA9IDA7CiAgICAgICAgIGlmIChub2RlLT5oYXNUYWdOYW1lKGFUYWcpKQogICAgICAg
ICAgICAgaGFzaCA9IHN0YXRpY19jYXN0PEhUTUxBbmNob3JFbGVtZW50Kj4obm9kZSktPnZpc2l0
ZWRMaW5rSGFzaCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlSW52YWxpZGF0aW9u
QW5hbHlzaXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZUludmFs
aWRhdGlvbkFuYWx5c2lzLmNwcAkocmV2aXNpb24gMTM2NjA2KQorKysgU291cmNlL1dlYkNvcmUv
Y3NzL1N0eWxlSW52YWxpZGF0aW9uQW5hbHlzaXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2
ICsyOCw3IEBACiAKICNpbmNsdWRlICJDU1NTZWxlY3Rvckxpc3QuaCIKICNpbmNsdWRlICJEb2N1
bWVudC5oIgorI2luY2x1ZGUgIk5vZGVUcmF2ZXJzYWwuaCIKICNpbmNsdWRlICJTdHlsZVJ1bGVJ
bXBvcnQuaCIKICNpbmNsdWRlICJTdHlsZVNoZWV0Q29udGVudHMuaCIKICNpbmNsdWRlICJTdHls
ZWRFbGVtZW50LmgiCkBAIC0xMTksMTcgKzEyMCwxNyBAQCB2b2lkIFN0eWxlSW52YWxpZGF0aW9u
QW5hbHlzaXM6OmludmFsaWRhCiAgICAgTm9kZSogbm9kZSA9IGRvY3VtZW50LT5maXJzdENoaWxk
KCk7CiAgICAgd2hpbGUgKG5vZGUpIHsKICAgICAgICAgaWYgKCFub2RlLT5pc1N0eWxlZEVsZW1l
bnQoKSkgewotICAgICAgICAgICAgbm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoKTsKKyAg
ICAgICAgICAgIG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUpOwogICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgIH0KICAgICAgICAgU3R5bGVkRWxlbWVudCogZWxlbWVudCA9IHN0
YXRpY19jYXN0PFN0eWxlZEVsZW1lbnQqPihub2RlKTsKICAgICAgICAgaWYgKGVsZW1lbnRNYXRj
aGVzU2VsZWN0b3JTY29wZXMoZWxlbWVudCwgbV9pZFNjb3BlcywgbV9jbGFzc1Njb3BlcykpIHsK
ICAgICAgICAgICAgIGVsZW1lbnQtPnNldE5lZWRzU3R5bGVSZWNhbGMoKTsKICAgICAgICAgICAg
IC8vIFRoZSB3aG9sZSBzdWJ0cmVlIGlzIG5vdyBpbnZhbGlkYXRlZCwgd2UgY2FuIHNraXAgdG8g
dGhlIG5leHQgc2libGluZy4KLSAgICAgICAgICAgIG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHRT
aWJsaW5nKCk7CisgICAgICAgICAgICBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dFNpYmxpbmco
bm9kZSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQotICAgICAgICBub2RlID0g
bm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgpOworICAgICAgICBub2RlID0gTm9kZVRyYXZlcnNhbDo6
bmV4dChub2RlKTsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Db250YWlu
ZXJOb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9k
ZS5jcHAJKHJldmlzaW9uIDEzNjYwNikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJO
b2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgIk1lbW9y
eUNhY2hlLmgiCiAjaW5jbHVkZSAiTXV0YXRpb25FdmVudC5oIgogI2luY2x1ZGUgIk5vZGVSZW5k
ZXJTdHlsZS5oIgorI2luY2x1ZGUgIk5vZGVUcmF2ZXJzYWwuaCIKICNpbmNsdWRlICJSZXNvdXJj
ZUxvYWRTY2hlZHVsZXIuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1T
dHJhdGVnaWVzLmgiCkBAIC0xMDQ0LDcgKzEwNDUsNyBAQCBzdGF0aWMgdm9pZCBkaXNwYXRjaENo
aWxkSW5zZXJ0aW9uRXZlbnRzCiAKICAgICAvLyBkaXNwYXRjaCB0aGUgRE9NTm9kZUluc2VydGVk
SW50b0RvY3VtZW50IGV2ZW50IHRvIGFsbCBkZXNjZW5kYW50cwogICAgIGlmIChjLT5pbkRvY3Vt
ZW50KCkgJiYgZG9jdW1lbnQtPmhhc0xpc3RlbmVyVHlwZShEb2N1bWVudDo6RE9NTk9ERUlOU0VS
VEVESU5UT0RPQ1VNRU5UX0xJU1RFTkVSKSkgewotICAgICAgICBmb3IgKDsgYzsgYyA9IGMtPnRy
YXZlcnNlTmV4dE5vZGUoY2hpbGQpKQorICAgICAgICBmb3IgKDsgYzsgYyA9IE5vZGVUcmF2ZXJz
YWw6Om5leHQoYy5nZXQoKSwgY2hpbGQpKQogICAgICAgICAgICAgYy0+ZGlzcGF0Y2hTY29wZWRF
dmVudChNdXRhdGlvbkV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLkRPTU5vZGVJbnNlcnRlZElu
dG9Eb2N1bWVudEV2ZW50LCBmYWxzZSkpOwogICAgIH0KIH0KQEAgLTEwNzIsNyArMTA3Myw3IEBA
IHN0YXRpYyB2b2lkIGRpc3BhdGNoQ2hpbGRSZW1vdmFsRXZlbnRzKE4KIAogICAgIC8vIGRpc3Bh
dGNoIHRoZSBET01Ob2RlUmVtb3ZlZEZyb21Eb2N1bWVudCBldmVudCB0byBhbGwgZGVzY2VuZGFu
dHMKICAgICBpZiAoYy0+aW5Eb2N1bWVudCgpICYmIGRvY3VtZW50LT5oYXNMaXN0ZW5lclR5cGUo
RG9jdW1lbnQ6OkRPTU5PREVSRU1PVkVERlJPTURPQ1VNRU5UX0xJU1RFTkVSKSkgewotICAgICAg
ICBmb3IgKDsgYzsgYyA9IGMtPnRyYXZlcnNlTmV4dE5vZGUoY2hpbGQpKQorICAgICAgICBmb3Ig
KDsgYzsgYyA9IE5vZGVUcmF2ZXJzYWw6Om5leHQoYy5nZXQoKSwgY2hpbGQpKQogICAgICAgICAg
ICAgYy0+ZGlzcGF0Y2hTY29wZWRFdmVudChNdXRhdGlvbkV2ZW50OjpjcmVhdGUoZXZlbnROYW1l
cygpLkRPTU5vZGVSZW1vdmVkRnJvbURvY3VtZW50RXZlbnQsIGZhbHNlKSk7CiAgICAgfQogfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5oCShyZXZpc2lvbiAxMzY2MDYpCisrKyBT
b3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzQs
MTAgKzEzNCw2IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgYm9vbCBjaGlsZFNob3VsZENyZWF0
ZVJlbmRlcmVyKGNvbnN0IE5vZGVSZW5kZXJpbmdDb250ZXh0JikgY29uc3QgeyByZXR1cm4gdHJ1
ZTsgfQogCi0gICAgLy8gTW9yZSBlZmZpY2llbnQgdmVyc2lvbnMgb2YgdGhlc2UgdHdvIGZ1bmN0
aW9ucyBmb3IgdGhlIGNhc2Ugd2hlcmUgd2UgYXJlIHN0YXJ0aW5nIHdpdGggYSBDb250YWluZXJO
b2RlLgotICAgIE5vZGUqIHRyYXZlcnNlTmV4dE5vZGUoKSBjb25zdDsKLSAgICBOb2RlKiB0cmF2
ZXJzZU5leHROb2RlKGNvbnN0IE5vZGUqIHN0YXlXaXRoaW4pIGNvbnN0OwotCiAgICAgdmlydHVh
bCB2b2lkIHJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qIG1lbW9yeU9iamVjdElu
Zm8pIGNvbnN0CiAgICAgewogICAgICAgICBNZW1vcnlDbGFzc0luZm8gaW5mbyhtZW1vcnlPYmpl
Y3RJbmZvLCB0aGlzLCBXZWJDb3JlTWVtb3J5VHlwZXM6OkRPTSk7CkBAIC0yNjksNTQgKzI2NSw2
IEBAIGlubGluZSBOb2RlKiBOb2RlOjpoaWdoZXN0QW5jZXN0b3IoKSBjb24KICAgICByZXR1cm4g
aGlnaGVzdDsKIH0KIAotaW5saW5lIE5vZGUqIE5vZGU6OnRyYXZlcnNlTmV4dFNpYmxpbmcoKSBj
b25zdAotewotICAgIGlmIChuZXh0U2libGluZygpKQotICAgICAgICByZXR1cm4gbmV4dFNpYmxp
bmcoKTsKLSAgICByZXR1cm4gdHJhdmVyc2VOZXh0QW5jZXN0b3JTaWJsaW5nKCk7Ci19Ci0KLWlu
bGluZSBOb2RlKiBOb2RlOjp0cmF2ZXJzZU5leHROb2RlKCkgY29uc3QKLXsKLSAgICBpZiAoZmly
c3RDaGlsZCgpKQotICAgICAgICByZXR1cm4gZmlyc3RDaGlsZCgpOwotICAgIHJldHVybiB0cmF2
ZXJzZU5leHRTaWJsaW5nKCk7Ci19Ci0KLWlubGluZSBOb2RlKiBDb250YWluZXJOb2RlOjp0cmF2
ZXJzZU5leHROb2RlKCkgY29uc3QKLXsKLSAgICAvLyBNb3JlIGVmZmljaWVudCB0aGFuIHRoZSBO
b2RlOjp0cmF2ZXJzZU5leHROb2RlIGFib3ZlLCBiZWNhdXNlCi0gICAgLy8gdGhpcyBkb2VzIG5v
dCBuZWVkIHRvIGRvIHRoZSBpc0NvbnRhaW5lck5vZGUgY2hlY2sgaW5zaWRlIGZpcnN0Q2hpbGQu
Ci0gICAgaWYgKGZpcnN0Q2hpbGQoKSkKLSAgICAgICAgcmV0dXJuIGZpcnN0Q2hpbGQoKTsKLSAg
ICByZXR1cm4gdHJhdmVyc2VOZXh0U2libGluZygpOwotfQotCi1pbmxpbmUgTm9kZSogTm9kZTo6
dHJhdmVyc2VOZXh0U2libGluZyhjb25zdCBOb2RlKiBzdGF5V2l0aGluKSBjb25zdAotewotICAg
IGlmICh0aGlzID09IHN0YXlXaXRoaW4pCi0gICAgICAgIHJldHVybiAwOwotICAgIGlmIChuZXh0
U2libGluZygpKQotICAgICAgICByZXR1cm4gbmV4dFNpYmxpbmcoKTsKLSAgICByZXR1cm4gdHJh
dmVyc2VOZXh0QW5jZXN0b3JTaWJsaW5nKHN0YXlXaXRoaW4pOwotfQotCi1pbmxpbmUgTm9kZSog
Tm9kZTo6dHJhdmVyc2VOZXh0Tm9kZShjb25zdCBOb2RlKiBzdGF5V2l0aGluKSBjb25zdAotewot
ICAgIGlmIChmaXJzdENoaWxkKCkpCi0gICAgICAgIHJldHVybiBmaXJzdENoaWxkKCk7Ci0gICAg
cmV0dXJuIHRyYXZlcnNlTmV4dFNpYmxpbmcoc3RheVdpdGhpbik7Ci19Ci0KLWlubGluZSBOb2Rl
KiBDb250YWluZXJOb2RlOjp0cmF2ZXJzZU5leHROb2RlKGNvbnN0IE5vZGUqIHN0YXlXaXRoaW4p
IGNvbnN0Ci17Ci0gICAgLy8gTW9yZSBlZmZpY2llbnQgdGhhbiB0aGUgTm9kZTo6dHJhdmVyc2VO
ZXh0Tm9kZSBhYm92ZSwgYmVjYXVzZQotICAgIC8vIHRoaXMgZG9lcyBub3QgbmVlZCB0byBkbyB0
aGUgaXNDb250YWluZXJOb2RlIGNoZWNrIGluc2lkZSBmaXJzdENoaWxkLgotICAgIGlmIChmaXJz
dENoaWxkKCkpCi0gICAgICAgIHJldHVybiBmaXJzdENoaWxkKCk7Ci0gICAgcmV0dXJuIHRyYXZl
cnNlTmV4dFNpYmxpbmcoc3RheVdpdGhpbik7Ci19Ci0KIC8vIFRoaXMgY29uc3RhbnQgY29udHJv
bHMgaG93IG11Y2ggYnVmZmVyIGlzIGluaXRpYWxseSBhbGxvY2F0ZWQKIC8vIGZvciBhIE5vZGUg
VmVjdG9yIHRoYXQgaXMgdXNlZCB0byBzdG9yZSBjaGlsZCBOb2RlcyBvZiBhIGdpdmVuIE5vZGUu
CiAvLyBGSVhNRTogT3B0aW1pemUgdGhlIHZhbHVlLgpJbmRleDogU291cmNlL1dlYkNvcmUvZG9t
L0NvbnRhaW5lck5vZGVBbGdvcml0aG1zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
ZG9tL0NvbnRhaW5lck5vZGVBbGdvcml0aG1zLmgJKHJldmlzaW9uIDEzNjYwNikKKysrIFNvdXJj
ZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlQWxnb3JpdGhtcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJIVE1MRnJhbWVP
d25lckVsZW1lbnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCIKKyNp
bmNsdWRlICJOb2RlVHJhdmVyc2FsLmgiCiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzIzLDggKzMyNCw3IEBAIHByaXZhdGU6CiAKIGlubGlu
ZSB2b2lkIENoaWxkRnJhbWVEaXNjb25uZWN0b3I6OmNvbGxlY3REZXNjZW5kYW50KE5vZGUqIHJv
b3QsIFNob3VsZEluY2x1ZGVSb290IHNob3VsZEluY2x1ZGVSb290KQogewotICAgIGZvciAoTm9k
ZSogbm9kZSA9IHNob3VsZEluY2x1ZGVSb290ID09IEluY2x1ZGVSb290ID8gcm9vdCA6IHJvb3Qt
PmZpcnN0Q2hpbGQoKTsgbm9kZTsKLSAgICAgICAgICAgIG5vZGUgPSBub2RlLT50cmF2ZXJzZU5l
eHROb2RlKHJvb3QpKSB7CisgICAgZm9yIChOb2RlKiBub2RlID0gc2hvdWxkSW5jbHVkZVJvb3Qg
PT0gSW5jbHVkZVJvb3QgPyByb290IDogcm9vdC0+Zmlyc3RDaGlsZCgpOyBub2RlOyBub2RlID0g
Tm9kZVRyYXZlcnNhbDo6bmV4dChub2RlLCByb290KSkgewogICAgICAgICBpZiAoIW5vZGUtPmlz
RWxlbWVudE5vZGUoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBFbGVtZW50KiBl
bGVtZW50ID0gdG9FbGVtZW50KG5vZGUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RvY3Vt
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCShy
ZXZpc2lvbiAxMzY2MDYpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMTgsNiArMTE4LDcgQEAKICNpbmNsdWRlICJOb2RlRmlsdGVyLmgiCiAj
aW5jbHVkZSAiTm9kZUl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiTm9kZVJhcmVEYXRhLmgiCisjaW5j
bHVkZSAiTm9kZVRyYXZlcnNhbC5oIgogI2luY2x1ZGUgIk5vZGVXaXRoSW5kZXguaCIKICNpbmNs
dWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUGFnZUdyb3VwLmgiCkBAIC03NDUsNyArNzQ2LDcgQEAg
dm9pZCBEb2N1bWVudDo6YnVpbGRBY2Nlc3NLZXlNYXAoVHJlZVNjbwogewogICAgIEFTU0VSVChz
Y29wZSk7CiAgICAgTm9kZSogcm9vdE5vZGUgPSBzY29wZS0+cm9vdE5vZGUoKTsKLSAgICBmb3Ig
KE5vZGUqIG5vZGUgPSByb290Tm9kZTsgbm9kZTsgbm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5v
ZGUocm9vdE5vZGUpKSB7CisgICAgZm9yIChOb2RlKiBub2RlID0gcm9vdE5vZGU7IG5vZGU7IG5v
ZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUsIHJvb3ROb2RlKSkgewogICAgICAgICBpZiAo
IW5vZGUtPmlzRWxlbWVudE5vZGUoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBF
bGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUpOwpAQCAtMjE1Myw3
ICsyMTU0LDcgQEAgdm9pZCBEb2N1bWVudDo6cmVtb3ZlQWxsRXZlbnRMaXN0ZW5lcnMoKQogCiAg
ICAgaWYgKERPTVdpbmRvdyogZG9tV2luZG93ID0gdGhpcy0+ZG9tV2luZG93KCkpCiAgICAgICAg
IGRvbVdpbmRvdy0+cmVtb3ZlQWxsRXZlbnRMaXN0ZW5lcnMoKTsKLSAgICBmb3IgKE5vZGUqIG5v
ZGUgPSBmaXJzdENoaWxkKCk7IG5vZGU7IG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKCkp
CisgICAgZm9yIChOb2RlKiBub2RlID0gZmlyc3RDaGlsZCgpOyBub2RlOyBub2RlID0gTm9kZVRy
YXZlcnNhbDo6bmV4dChub2RlKSkKICAgICAgICAgbm9kZS0+cmVtb3ZlQWxsRXZlbnRMaXN0ZW5l
cnMoKTsKIH0KIApAQCAtMjY2Miw3ICsyNjYzLDcgQEAgdm9pZCBEb2N1bWVudDo6dXBkYXRlQmFz
ZVVSTCgpCiAgICAgaWYgKCFlcXVhbElnbm9yaW5nRnJhZ21lbnRJZGVudGlmaWVyKG9sZEJhc2VV
UkwsIG1fYmFzZVVSTCkpIHsKICAgICAgICAgLy8gQmFzZSBVUkwgY2hhbmdlIGNoYW5nZXMgYW55
IHJlbGF0aXZlIHZpc2l0ZWQgbGlua3MuCiAgICAgICAgIC8vIEZJWE1FOiBUaGVyZSBhcmUgb3Ro
ZXIgVVJMcyBpbiB0aGUgdHJlZSB0aGF0IHdvdWxkIG5lZWQgdG8gYmUgcmUtZXZhbHVhdGVkIG9u
IGR5bmFtaWMgYmFzZSBVUkwgY2hhbmdlLiBTdHlsZSBzaG91bGQgYmUgaW52YWxpZGF0ZWQgdG9v
LgotICAgICAgICBmb3IgKE5vZGUqIG5vZGUgPSBmaXJzdENoaWxkKCk7IG5vZGU7IG5vZGUgPSBu
b2RlLT50cmF2ZXJzZU5leHROb2RlKCkpIHsKKyAgICAgICAgZm9yIChOb2RlKiBub2RlID0gZmly
c3RDaGlsZCgpOyBub2RlOyBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dChub2RlKSkgewogICAg
ICAgICAgICAgaWYgKG5vZGUtPmhhc1RhZ05hbWUoYVRhZykpCiAgICAgICAgICAgICAgICAgc3Rh
dGljX2Nhc3Q8SFRNTEFuY2hvckVsZW1lbnQqPihub2RlKS0+aW52YWxpZGF0ZUNhY2hlZFZpc2l0
ZWRMaW5rSGFzaCgpOwogICAgICAgICB9CkBAIC0yNjgwLDcgKzI2ODEsNyBAQCB2b2lkIERvY3Vt
ZW50Ojpwcm9jZXNzQmFzZUVsZW1lbnQoKQogICAgIC8vIEZpbmQgdGhlIGZpcnN0IGhyZWYgYXR0
cmlidXRlIGluIGEgYmFzZSBlbGVtZW50IGFuZCB0aGUgZmlyc3QgdGFyZ2V0IGF0dHJpYnV0ZSBp
biBhIGJhc2UgZWxlbWVudC4KICAgICBjb25zdCBBdG9taWNTdHJpbmcqIGhyZWYgPSAwOwogICAg
IGNvbnN0IEF0b21pY1N0cmluZyogdGFyZ2V0ID0gMDsKLSAgICBmb3IgKE5vZGUqIG5vZGUgPSBk
b2N1bWVudCgpLT5maXJzdENoaWxkKCk7IG5vZGUgJiYgKCFocmVmIHx8ICF0YXJnZXQpOyBub2Rl
ID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgpKSB7CisgICAgZm9yIChOb2RlKiBub2RlID0gZG9j
dW1lbnQoKS0+Zmlyc3RDaGlsZCgpOyBub2RlICYmICghaHJlZiB8fCAhdGFyZ2V0KTsgbm9kZSA9
IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9kZSkpIHsKICAgICAgICAgaWYgKG5vZGUtPmhhc1RhZ05h
bWUoYmFzZVRhZykpIHsKICAgICAgICAgICAgIGlmICghaHJlZikgewogICAgICAgICAgICAgICAg
IGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSkt
PmZhc3RHZXRBdHRyaWJ1dGUoaHJlZkF0dHIpOwpAQCAtMjgyNCw3ICsyODI1LDcgQEAgaW50IERv
Y3VtZW50Ojpub2RlQWJzSW5kZXgoTm9kZSAqbm9kZSkKICAgICBBU1NFUlQobm9kZS0+ZG9jdW1l
bnQoKSA9PSB0aGlzKTsKIAogICAgIGludCBhYnNJbmRleCA9IDA7Ci0gICAgZm9yIChOb2RlKiBu
ID0gbm9kZTsgbiAmJiBuICE9IHRoaXM7IG4gPSBuLT50cmF2ZXJzZVByZXZpb3VzTm9kZSgpKQor
ICAgIGZvciAoTm9kZSogbiA9IG5vZGU7IG4gJiYgbiAhPSB0aGlzOyBuID0gTm9kZVRyYXZlcnNh
bDo6cHJldmlvdXMobikpCiAgICAgICAgIGFic0luZGV4Kys7CiAgICAgcmV0dXJuIGFic0luZGV4
OwogfQpAQCAtMjgzMyw3ICsyODM0LDcgQEAgTm9kZSogRG9jdW1lbnQ6Om5vZGVXaXRoQWJzSW5k
ZXgoaW50IGFicwogewogICAgIE5vZGUqIG4gPSB0aGlzOwogICAgIGZvciAoaW50IGkgPSAwOyBu
ICYmIChpIDwgYWJzSW5kZXgpOyBpKyspCi0gICAgICAgIG4gPSBuLT50cmF2ZXJzZU5leHROb2Rl
KCk7CisgICAgICAgIG4gPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG4pOwogICAgIHJldHVybiBuOwog
fQogCkBAIC0zNDM5LDcgKzM0NDAsNyBAQCB2b2lkIERvY3VtZW50OjpnZXRGb2N1c2FibGVOb2Rl
cyhWZWN0b3I8CiB7CiAgICAgdXBkYXRlTGF5b3V0KCk7CiAKLSAgICBmb3IgKE5vZGUqIG5vZGUg
PSBmaXJzdENoaWxkKCk7IG5vZGU7IG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKCkpIHsK
KyAgICBmb3IgKE5vZGUqIG5vZGUgPSBmaXJzdENoaWxkKCk7IG5vZGU7IG5vZGUgPSBOb2RlVHJh
dmVyc2FsOjpuZXh0KG5vZGUpKSB7CiAgICAgICAgIGlmIChub2RlLT5pc0ZvY3VzYWJsZSgpKQog
ICAgICAgICAgICAgbm9kZXMuYXBwZW5kKG5vZGUpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2RvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAxMzY2
MDYpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIkRvY3VtZW50TWFya2Vy
Q29udHJvbGxlci5oIgogCiAjaW5jbHVkZSAiTm9kZS5oIgorI2luY2x1ZGUgIk5vZGVUcmF2ZXJz
YWwuaCIKICNpbmNsdWRlICJSYW5nZS5oIgogI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgogI2lu
Y2x1ZGUgIlJlbmRlcmVkRG9jdW1lbnRNYXJrZXIuaCIKQEAgLTM3MCw3ICszNzEsNyBAQCBWZWN0
b3I8RG9jdW1lbnRNYXJrZXIqPiBEb2N1bWVudE1hcmtlckNvCiAgICAgQVNTRVJUKGVuZENvbnRh
aW5lcik7CiAKICAgICBOb2RlKiBwYXN0TGFzdE5vZGUgPSByYW5nZS0+cGFzdExhc3ROb2RlKCk7
Ci0gICAgZm9yIChOb2RlKiBub2RlID0gcmFuZ2UtPmZpcnN0Tm9kZSgpOyBub2RlICE9IHBhc3RM
YXN0Tm9kZTsgbm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoKSkgeworICAgIGZvciAoTm9k
ZSogbm9kZSA9IHJhbmdlLT5maXJzdE5vZGUoKTsgbm9kZSAhPSBwYXN0TGFzdE5vZGU7IG5vZGUg
PSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUpKSB7CiAgICAgICAgIFZlY3RvcjxEb2N1bWVudE1h
cmtlcio+IG1hcmtlcnMgPSBtYXJrZXJzRm9yKG5vZGUpOwogICAgICAgICBWZWN0b3I8RG9jdW1l
bnRNYXJrZXIqPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWFya2Vycy5lbmQoKTsKICAgICAgICAg
Zm9yIChWZWN0b3I8RG9jdW1lbnRNYXJrZXIqPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtYXJrZXJz
LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewpAQCAtNTcxLDcgKzU3Miw3IEBAIHZvaWQgRG9j
dW1lbnRNYXJrZXJDb250cm9sbGVyOjpzZXRNYXJrZXIKICAgICBOb2RlKiBlbmRDb250YWluZXIg
PSByYW5nZS0+ZW5kQ29udGFpbmVyKGVjKTsKIAogICAgIE5vZGUqIHBhc3RMYXN0Tm9kZSA9IHJh
bmdlLT5wYXN0TGFzdE5vZGUoKTsKLSAgICBmb3IgKE5vZGUqIG5vZGUgPSByYW5nZS0+Zmlyc3RO
b2RlKCk7IG5vZGUgIT0gcGFzdExhc3ROb2RlOyBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9k
ZSgpKSB7CisgICAgZm9yIChOb2RlKiBub2RlID0gcmFuZ2UtPmZpcnN0Tm9kZSgpOyBub2RlICE9
IHBhc3RMYXN0Tm9kZTsgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9kZSkpIHsKICAgICAg
ICAgaW50IHN0YXJ0T2Zmc2V0ID0gbm9kZSA9PSBzdGFydENvbnRhaW5lciA/IHJhbmdlLT5zdGFy
dE9mZnNldChlYykgOiAwOwogICAgICAgICBpbnQgZW5kT2Zmc2V0ID0gbm9kZSA9PSBlbmRDb250
YWluZXIgPyByYW5nZS0+ZW5kT2Zmc2V0KGVjKSA6IElOVF9NQVg7CiAgICAgICAgIHNldE1hcmtl
cnNBY3RpdmUobm9kZSwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCwgYWN0aXZlKTsKQEAgLTYxNyw3
ICs2MTgsNyBAQCBib29sIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6aGFzTWFya2VyCiAgICAg
QVNTRVJUKGVuZENvbnRhaW5lcik7CiAKICAgICBOb2RlKiBwYXN0TGFzdE5vZGUgPSByYW5nZS0+
cGFzdExhc3ROb2RlKCk7Ci0gICAgZm9yIChOb2RlKiBub2RlID0gcmFuZ2UtPmZpcnN0Tm9kZSgp
OyBub2RlICE9IHBhc3RMYXN0Tm9kZTsgbm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoKSkg
eworICAgIGZvciAoTm9kZSogbm9kZSA9IHJhbmdlLT5maXJzdE5vZGUoKTsgbm9kZSAhPSBwYXN0
TGFzdE5vZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUpKSB7CiAgICAgICAgIFZl
Y3RvcjxEb2N1bWVudE1hcmtlcio+IG1hcmtlcnMgPSBtYXJrZXJzRm9yKG5vZGUpOwogICAgICAg
ICBWZWN0b3I8RG9jdW1lbnRNYXJrZXIqPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbWFya2Vycy5l
bmQoKTsKICAgICAgICAgZm9yIChWZWN0b3I8RG9jdW1lbnRNYXJrZXIqPjo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBtYXJrZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewpAQCAtNjQ0LDcgKzY0
NSw3IEBAIHZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpjbGVhckRlc2MKICAgICBOb2Rl
KiBlbmRDb250YWluZXIgPSByYW5nZS0+ZW5kQ29udGFpbmVyKCk7CiAKICAgICBOb2RlKiBwYXN0
TGFzdE5vZGUgPSByYW5nZS0+cGFzdExhc3ROb2RlKCk7Ci0gICAgZm9yIChOb2RlKiBub2RlID0g
cmFuZ2UtPmZpcnN0Tm9kZSgpOyBub2RlICE9IHBhc3RMYXN0Tm9kZTsgbm9kZSA9IG5vZGUtPnRy
YXZlcnNlTmV4dE5vZGUoKSkgeworICAgIGZvciAoTm9kZSogbm9kZSA9IHJhbmdlLT5maXJzdE5v
ZGUoKTsgbm9kZSAhPSBwYXN0TGFzdE5vZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5v
ZGUpKSB7CiAgICAgICAgIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0ID0gbm9kZSA9PSBzdGFydENvbnRh
aW5lciA/IHJhbmdlLT5zdGFydE9mZnNldCgpIDogMDsKICAgICAgICAgdW5zaWduZWQgZW5kT2Zm
c2V0ID0gbm9kZSA9PSBlbmRDb250YWluZXIgPyBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocmFuZ2Ut
PmVuZE9mZnNldCgpKSA6IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKTsKICAg
ICAgICAgTWFya2VyTGlzdCogbGlzdCA9IG1fbWFya2Vycy5nZXQobm9kZSk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9kb20vRG9jdW1lbnRPcmRlcmVkTWFwLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9kb20vRG9jdW1lbnRPcmRlcmVkTWFwLmNwcAkocmV2aXNpb24gMTM2NjA2KQor
KysgU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50T3JkZXJlZE1hcC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRN
TE1hcEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJOb2RlVHJh
dmVyc2FsLmgiCiAjaW5jbHVkZSAiVHJlZVNjb3BlLmgiCiAjaW5jbHVkZSAiV2ViQ29yZU1lbW9y
eUluc3RydW1lbnRhdGlvbi5oIgogI2luY2x1ZGUgPHd0Zi9NZW1vcnlJbnN0cnVtZW50YXRpb25I
YXNoQ291bnRlZFNldC5oPgpAQCAtMTI2LDcgKzEyNyw3IEBAIGlubGluZSBFbGVtZW50KiBEb2N1
bWVudE9yZGVyZWRNYXA6OmdldCgKIAogICAgIGlmIChtX2R1cGxpY2F0ZUNvdW50cy5jb250YWlu
cyhrZXkpKSB7CiAgICAgICAgIC8vIFdlIGtub3cgdGhlcmUncyBhdCBsZWFzdCBvbmUgbm9kZSB0
aGF0IG1hdGNoZXM7IGl0ZXJhdGUgdG8gZmluZCB0aGUgZmlyc3Qgb25lLgotICAgICAgICBmb3Ig
KE5vZGUqIG5vZGUgPSBzY29wZS0+cm9vdE5vZGUoKS0+Zmlyc3RDaGlsZCgpOyBub2RlOyBub2Rl
ID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgpKSB7CisgICAgICAgIGZvciAoTm9kZSogbm9kZSA9
IHNjb3BlLT5yb290Tm9kZSgpLT5maXJzdENoaWxkKCk7IG5vZGU7IG5vZGUgPSBOb2RlVHJhdmVy
c2FsOjpuZXh0KG5vZGUpKSB7CiAgICAgICAgICAgICBpZiAoIW5vZGUtPmlzRWxlbWVudE5vZGUo
KSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGVsZW1lbnQgPSBzdGF0
aWNfY2FzdDxFbGVtZW50Kj4obm9kZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVu
dFNoYWRvdy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRTaGFk
b3cuY3BwCShyZXZpc2lvbiAxMzY2MDYpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudFNo
YWRvdy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJIVE1M
Q29udGVudEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MU2hhZG93RWxlbWVudC5oIgogI2luY2x1
ZGUgIkluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIgorI2luY2x1ZGUgIk5vZGVUcmF2ZXJzYWwu
aCIKICNpbmNsdWRlICJTaGFkb3dSb290LmgiCiAjaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgog
I2luY2x1ZGUgIlRleHQuaCIKQEAgLTIzNCw3ICsyMzUsNyBAQCB2b2lkIEVsZW1lbnRTaGFkb3c6
OmVuc3VyZVNlbGVjdEZlYXR1cmVTCiB2b2lkIEVsZW1lbnRTaGFkb3c6OmNvbGxlY3RTZWxlY3RG
ZWF0dXJlU2V0RnJvbShTaGFkb3dSb290KiByb290KQogewogICAgIGlmIChyb290LT5oYXNFbGVt
ZW50U2hhZG93KCkpIHsKLSAgICAgICAgZm9yIChOb2RlKiBub2RlID0gcm9vdC0+Zmlyc3RDaGls
ZCgpOyBub2RlOyBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgpKSB7CisgICAgICAgIGZv
ciAoTm9kZSogbm9kZSA9IHJvb3QtPmZpcnN0Q2hpbGQoKTsgbm9kZTsgbm9kZSA9IE5vZGVUcmF2
ZXJzYWw6Om5leHQobm9kZSkpIHsKICAgICAgICAgICAgIGlmIChFbGVtZW50U2hhZG93KiBlbGVt
ZW50U2hhZG93ID0gbm9kZS0+aXNFbGVtZW50Tm9kZSgpID8gdG9FbGVtZW50KG5vZGUpLT5zaGFk
b3coKSA6IDApIHsKICAgICAgICAgICAgICAgICBlbGVtZW50U2hhZG93LT5lbnN1cmVTZWxlY3RG
ZWF0dXJlU2V0Q29sbGVjdGVkKCk7CiAgICAgICAgICAgICAgICAgbV9zZWxlY3RGZWF0dXJlcy5h
ZGQoZWxlbWVudFNoYWRvdy0+bV9zZWxlY3RGZWF0dXJlcyk7CkBAIC0yNDMsNyArMjQ0LDcgQEAg
dm9pZCBFbGVtZW50U2hhZG93Ojpjb2xsZWN0U2VsZWN0RmVhdHVyZQogICAgIH0KIAogICAgIGlm
IChyb290LT5oYXNDb250ZW50RWxlbWVudCgpKSB7Ci0gICAgICAgIGZvciAoTm9kZSogbm9kZSA9
IHJvb3QtPmZpcnN0Q2hpbGQoKTsgbm9kZTsgbm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUo
KSkgeworICAgICAgICBmb3IgKE5vZGUqIG5vZGUgPSByb290LT5maXJzdENoaWxkKCk7IG5vZGU7
IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUpKSB7CiAgICAgICAgICAgICBpZiAoaXNI
VE1MQ29udGVudEVsZW1lbnQobm9kZSkpIHsKICAgICAgICAgICAgICAgICBjb25zdCBDU1NTZWxl
Y3Rvckxpc3QmIGxpc3QgPSB0b0hUTUxDb250ZW50RWxlbWVudChub2RlKS0+c2VsZWN0b3JMaXN0
KCk7CiAgICAgICAgICAgICAgICAgZm9yIChDU1NTZWxlY3Rvciogc2VsZWN0b3IgPSBsaXN0LmZp
cnN0KCk7IHNlbGVjdG9yOyBzZWxlY3RvciA9IGxpc3QubmV4dChzZWxlY3RvcikpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
ZG9tL05vZGUuY3BwCShyZXZpc2lvbiAxMzY2MDYpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTm9k
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc1LDYgKzc1LDcgQEAKICNpbmNsdWRlICJOYW1lZE5v
ZGVNYXAuaCIKICNpbmNsdWRlICJOb2RlUmFyZURhdGEuaCIKICNpbmNsdWRlICJOb2RlUmVuZGVy
aW5nQ29udGV4dC5oIgorI2luY2x1ZGUgIk5vZGVUcmF2ZXJzYWwuaCIKICNpbmNsdWRlICJQYWdl
LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1X
aGVlbEV2ZW50LmgiCkBAIC02MTYsNyArNjE3LDcgQEAgdm9pZCBOb2RlOjpub3JtYWxpemUoKQog
ICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgaWYgKHR5cGUgIT0gVEVYVF9OT0RFKSB7Ci0g
ICAgICAgICAgICBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZVBvc3RPcmRlcigpOworICAg
ICAgICAgICAgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHRQb3N0T3JkZXIobm9kZS5nZXQoKSk7
CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCkBAIC02MjUsNyArNjI2LDcgQEAg
dm9pZCBOb2RlOjpub3JtYWxpemUoKQogICAgICAgICAvLyBSZW1vdmUgZW1wdHkgdGV4dCBub2Rl
cy4KICAgICAgICAgaWYgKCF0ZXh0LT5sZW5ndGgoKSkgewogICAgICAgICAgICAgLy8gQ2FyZSBt
dXN0IGJlIHRha2VuIHRvIGdldCB0aGUgbmV4dCBub2RlIGJlZm9yZSByZW1vdmluZyB0aGUgY3Vy
cmVudCBub2RlLgotICAgICAgICAgICAgbm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGVQb3N0
T3JkZXIoKTsKKyAgICAgICAgICAgIG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0UG9zdE9yZGVy
KG5vZGUuZ2V0KCkpOwogICAgICAgICAgICAgRXhjZXB0aW9uQ29kZSBlYzsKICAgICAgICAgICAg
IHRleHQtPnJlbW92ZShlYyk7CiAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTY1Miw3ICs2NTMs
NyBAQCB2b2lkIE5vZGU6Om5vcm1hbGl6ZSgpCiAgICAgICAgICAgICBuZXh0VGV4dC0+cmVtb3Zl
KGVjKTsKICAgICAgICAgfQogCi0gICAgICAgIG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHROb2Rl
UG9zdE9yZGVyKCk7CisgICAgICAgIG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0UG9zdE9yZGVy
KG5vZGUuZ2V0KCkpOwogICAgIH0KIH0KIApAQCAtODYzLDcgKzg2NCw3IEBAIHZvaWQgTm9kZTo6
c2V0TmVlZHNTdHlsZVJlY2FsYyhTdHlsZUNoYW4KIAogdm9pZCBOb2RlOjpsYXp5QXR0YWNoKFNo
b3VsZFNldEF0dGFjaGVkIHNob3VsZFNldEF0dGFjaGVkKQogewotICAgIGZvciAoTm9kZSogbiA9
IHRoaXM7IG47IG4gPSBuLT50cmF2ZXJzZU5leHROb2RlKHRoaXMpKSB7CisgICAgZm9yIChOb2Rl
KiBuID0gdGhpczsgbjsgbiA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobiwgdGhpcykpIHsKICAgICAg
ICAgaWYgKG4tPmhhc0NoaWxkTm9kZXMoKSkKICAgICAgICAgICAgIG4tPnNldENoaWxkTmVlZHNT
dHlsZVJlY2FsYygpOwogICAgICAgICBuLT5zZXRTdHlsZUNoYW5nZShGdWxsU3R5bGVDaGFuZ2Up
OwpAQCAtMTAxOCw5NiArMTAxOSw2IEBAIHZvaWQgTm9kZTo6cmVtb3ZlQ2FjaGVkQ2hpbGROb2Rl
TGlzdCgpCiAgICAgcmFyZURhdGEoKS0+c2V0Q2hpbGROb2RlTGlzdCgwKTsKIH0KIAotTm9kZSog
Tm9kZTo6dHJhdmVyc2VOZXh0QW5jZXN0b3JTaWJsaW5nKCkgY29uc3QKLXsKLSAgICBBU1NFUlQo
IW5leHRTaWJsaW5nKCkpOwotICAgIGZvciAoY29uc3QgTm9kZSogbm9kZSA9IHBhcmVudE5vZGUo
KTsgbm9kZTsgbm9kZSA9IG5vZGUtPnBhcmVudE5vZGUoKSkgewotICAgICAgICBpZiAobm9kZS0+
bmV4dFNpYmxpbmcoKSkKLSAgICAgICAgICAgIHJldHVybiBub2RlLT5uZXh0U2libGluZygpOwot
ICAgIH0KLSAgICByZXR1cm4gMDsKLX0KLQotTm9kZSogTm9kZTo6dHJhdmVyc2VOZXh0QW5jZXN0
b3JTaWJsaW5nKGNvbnN0IE5vZGUqIHN0YXlXaXRoaW4pIGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFu
ZXh0U2libGluZygpKTsKLSAgICBBU1NFUlQodGhpcyAhPSBzdGF5V2l0aGluKTsKLSAgICBmb3Ig
KGNvbnN0IE5vZGUqIG5vZGUgPSBwYXJlbnROb2RlKCk7IG5vZGU7IG5vZGUgPSBub2RlLT5wYXJl
bnROb2RlKCkpIHsKLSAgICAgICAgaWYgKG5vZGUgPT0gc3RheVdpdGhpbikKLSAgICAgICAgICAg
IHJldHVybiAwOwotICAgICAgICBpZiAobm9kZS0+bmV4dFNpYmxpbmcoKSkKLSAgICAgICAgICAg
IHJldHVybiBub2RlLT5uZXh0U2libGluZygpOwotICAgIH0KLSAgICByZXR1cm4gMDsKLX0KLQot
Tm9kZSogTm9kZTo6dHJhdmVyc2VOZXh0Tm9kZVBvc3RPcmRlcigpIGNvbnN0Ci17Ci0gICAgTm9k
ZSogbmV4dCA9IG5leHRTaWJsaW5nKCk7Ci0gICAgaWYgKCFuZXh0KQotICAgICAgICByZXR1cm4g
cGFyZW50Tm9kZSgpOwotICAgIHdoaWxlIChOb2RlKiBmaXJzdENoaWxkID0gbmV4dC0+Zmlyc3RD
aGlsZCgpKQotICAgICAgICBuZXh0ID0gZmlyc3RDaGlsZDsKLSAgICByZXR1cm4gbmV4dDsKLX0K
LQotTm9kZSogTm9kZTo6dHJhdmVyc2VQcmV2aW91c05vZGUoY29uc3QgTm9kZSogc3RheVdpdGhp
bikgY29uc3QKLXsKLSAgICBpZiAodGhpcyA9PSBzdGF5V2l0aGluKQotICAgICAgICByZXR1cm4g
MDsKLSAgICBpZiAocHJldmlvdXNTaWJsaW5nKCkpIHsKLSAgICAgICAgTm9kZSAqbiA9IHByZXZp
b3VzU2libGluZygpOwotICAgICAgICB3aGlsZSAobi0+bGFzdENoaWxkKCkpCi0gICAgICAgICAg
ICBuID0gbi0+bGFzdENoaWxkKCk7Ci0gICAgICAgIHJldHVybiBuOwotICAgIH0KLSAgICByZXR1
cm4gcGFyZW50Tm9kZSgpOwotfQotCi1Ob2RlKiBOb2RlOjp0cmF2ZXJzZVByZXZpb3VzU2libGlu
Zyhjb25zdCBOb2RlKiBzdGF5V2l0aGluKSBjb25zdAotewotICAgIGlmICh0aGlzID09IHN0YXlX
aXRoaW4pCi0gICAgICAgIHJldHVybiAwOwotICAgIGlmIChwcmV2aW91c1NpYmxpbmcoKSkKLSAg
ICAgICAgcmV0dXJuIHByZXZpb3VzU2libGluZygpOwotICAgIGNvbnN0IE5vZGUgKm4gPSB0aGlz
OwotICAgIHdoaWxlIChuICYmICFuLT5wcmV2aW91c1NpYmxpbmcoKSAmJiAoIXN0YXlXaXRoaW4g
fHwgbi0+cGFyZW50Tm9kZSgpICE9IHN0YXlXaXRoaW4pKQotICAgICAgICBuID0gbi0+cGFyZW50
Tm9kZSgpOwotICAgIGlmIChuKQotICAgICAgICByZXR1cm4gbi0+cHJldmlvdXNTaWJsaW5nKCk7
Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLU5vZGUqIE5vZGU6OnRyYXZlcnNlUHJldmlvdXNOb2RlUG9z
dE9yZGVyKGNvbnN0IE5vZGUqIHN0YXlXaXRoaW4pIGNvbnN0Ci17Ci0gICAgaWYgKGxhc3RDaGls
ZCgpKQotICAgICAgICByZXR1cm4gbGFzdENoaWxkKCk7Ci0gICAgaWYgKHRoaXMgPT0gc3RheVdp
dGhpbikKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKHByZXZpb3VzU2libGluZygpKQotICAg
ICAgICByZXR1cm4gcHJldmlvdXNTaWJsaW5nKCk7Ci0gICAgY29uc3QgTm9kZSAqbiA9IHRoaXM7
Ci0gICAgd2hpbGUgKG4gJiYgIW4tPnByZXZpb3VzU2libGluZygpICYmICghc3RheVdpdGhpbiB8
fCBuLT5wYXJlbnROb2RlKCkgIT0gc3RheVdpdGhpbikpCi0gICAgICAgIG4gPSBuLT5wYXJlbnRO
b2RlKCk7Ci0gICAgaWYgKG4pCi0gICAgICAgIHJldHVybiBuLT5wcmV2aW91c1NpYmxpbmcoKTsK
LSAgICByZXR1cm4gMDsKLX0KLQotTm9kZSogTm9kZTo6dHJhdmVyc2VQcmV2aW91c1NpYmxpbmdQ
b3N0T3JkZXIoY29uc3QgTm9kZSogc3RheVdpdGhpbikgY29uc3QKLXsKLSAgICBpZiAodGhpcyA9
PSBzdGF5V2l0aGluKQotICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAocHJldmlvdXNTaWJsaW5n
KCkpCi0gICAgICAgIHJldHVybiBwcmV2aW91c1NpYmxpbmcoKTsKLSAgICBjb25zdCBOb2RlICpu
ID0gdGhpczsKLSAgICB3aGlsZSAobiAmJiAhbi0+cHJldmlvdXNTaWJsaW5nKCkgJiYgKCFzdGF5
V2l0aGluIHx8IG4tPnBhcmVudE5vZGUoKSAhPSBzdGF5V2l0aGluKSkKLSAgICAgICAgbiA9IG4t
PnBhcmVudE5vZGUoKTsKLSAgICBpZiAobikKLSAgICAgICAgcmV0dXJuIG4tPnByZXZpb3VzU2li
bGluZygpOwotICAgIHJldHVybiAwOwotfQotCiB2b2lkIE5vZGU6OmNoZWNrU2V0UHJlZml4KGNv
bnN0IEF0b21pY1N0cmluZyYgcHJlZml4LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICAvLyBQ
ZXJmb3JtIGVycm9yIGNoZWNraW5nIGFzIHJlcXVpcmVkIGJ5IHNwZWMgZm9yIHNldHRpbmcgTm9k
ZS5wcmVmaXguIFVzZWQgYnkKQEAgLTEyMTIsNyArMTEyMyw3IEBAIHZvaWQgTm9kZTo6ZGV0YWNo
KCkKICAgICBpZiAocmVuZGVyZXIoKSkgewogICAgICAgICByZW5kZXJlcigpLT5kZXN0cm95QW5k
Q2xlYW51cEFub255bW91c1dyYXBwZXJzKCk7CiAjaWZuZGVmIE5ERUJVRwotICAgICAgICBmb3Ig
KE5vZGUqIG5vZGUgPSB0aGlzOyBub2RlOyBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSh0
aGlzKSkgeworICAgICAgICBmb3IgKE5vZGUqIG5vZGUgPSB0aGlzOyBub2RlOyBub2RlID0gTm9k
ZVRyYXZlcnNhbDo6bmV4dChub2RlLCB0aGlzKSkgewogICAgICAgICAgICAgUmVuZGVyT2JqZWN0
KiByZW5kZXJlciA9IG5vZGUtPnJlbmRlcmVyKCk7CiAgICAgICAgICAgICAvLyBSZW5kZXJGbG93
VGhyZWFkIGFuZCB0aGUgdG9wIGxheWVyIHJlbW92ZSBlbGVtZW50cyBmcm9tIHRoZSByZWd1bGFy
IHRyZWUKICAgICAgICAgICAgIC8vIGhpZXJhcmNoeS4gVGhleSB3aWxsIGJlIGNsZWFuZWQgdXAg
d2hlbiB3ZSBjYWxsIGRldGFjaCBvbiB0aGVtLgpAQCAtMjA2NSw3ICsxOTc2LDcgQEAgdm9pZCBO
b2RlOjpzaG93Tm9kZVBhdGhGb3JUaGlzKCkgY29uc3QKIAogc3RhdGljIHZvaWQgdHJhdmVyc2VU
cmVlQW5kTWFyayhjb25zdCBTdHJpbmcmIGJhc2VJbmRlbnQsIGNvbnN0IE5vZGUqIHJvb3ROb2Rl
LCBjb25zdCBOb2RlKiBtYXJrZWROb2RlMSwgY29uc3QgY2hhciogbWFya2VkTGFiZWwxLCBjb25z
dCBOb2RlKiBtYXJrZWROb2RlMiwgY29uc3QgY2hhciogbWFya2VkTGFiZWwyKQogewotICAgIGZv
ciAoY29uc3QgTm9kZSogbm9kZSA9IHJvb3ROb2RlOyBub2RlOyBub2RlID0gbm9kZS0+dHJhdmVy
c2VOZXh0Tm9kZSgpKSB7CisgICAgZm9yIChjb25zdCBOb2RlKiBub2RlID0gcm9vdE5vZGU7IG5v
ZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUpKSB7CiAgICAgICAgIGlmIChub2Rl
ID09IG1hcmtlZE5vZGUxKQogICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIlcyIsIG1hcmtl
ZExhYmVsMSk7CiAgICAgICAgIGlmIChub2RlID09IG1hcmtlZE5vZGUyKQpJbmRleDogU291cmNl
L1dlYkNvcmUvZG9tL05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTm9k
ZS5oCShyZXZpc2lvbiAxMzY2MDYpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NjksMzAgKzQ2OSw2IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBjaGls
ZE5vZGVDb3VudCgpIGNvbnN0OwogICAgIE5vZGUqIGNoaWxkTm9kZSh1bnNpZ25lZCBpbmRleCkg
Y29uc3Q7CiAKLSAgICAvLyBEb2VzIGEgcHJlLW9yZGVyIHRyYXZlcnNhbCBvZiB0aGUgdHJlZSB0
byBmaW5kIHRoZSBuZXh0IG5vZGUgYWZ0ZXIgdGhpcyBvbmUuCi0gICAgLy8gVGhpcyB1c2VzIHRo
ZSBzYW1lIG9yZGVyIHRoYXQgdGFncyBhcHBlYXIgaW4gdGhlIHNvdXJjZSBmaWxlLiBJZiB0aGUg
c3RheVdpdGhpbgotICAgIC8vIGFyZ3VtZW50IGlzIG5vbi1udWxsLCB0aGUgdHJhdmVyc2FsIHdp
bGwgc3RvcCBvbmNlIHRoZSBzcGVjaWZpZWQgbm9kZSBpcyByZWFjaGVkLgotICAgIC8vIFRoaXMg
Y2FuIGJlIHVzZWQgdG8gcmVzdHJpY3QgdHJhdmVyc2FsIHRvIGEgcGFydGljdWxhciBzdWItdHJl
ZS4KLSAgICBOb2RlKiB0cmF2ZXJzZU5leHROb2RlKCkgY29uc3Q7Ci0gICAgTm9kZSogdHJhdmVy
c2VOZXh0Tm9kZShjb25zdCBOb2RlKiBzdGF5V2l0aGluKSBjb25zdDsKLQotICAgIC8vIExpa2Ug
dHJhdmVyc2VOZXh0Tm9kZSwgYnV0IHNraXBzIGNoaWxkcmVuIGFuZCBzdGFydHMgd2l0aCB0aGUg
bmV4dCBzaWJsaW5nLgotICAgIE5vZGUqIHRyYXZlcnNlTmV4dFNpYmxpbmcoKSBjb25zdDsKLSAg
ICBOb2RlKiB0cmF2ZXJzZU5leHRTaWJsaW5nKGNvbnN0IE5vZGUqIHN0YXlXaXRoaW4pIGNvbnN0
OwotCi0gICAgLy8gRG9lcyBhIHJldmVyc2UgcHJlLW9yZGVyIHRyYXZlcnNhbCB0byBmaW5kIHRo
ZSBub2RlIHRoYXQgY29tZXMgYmVmb3JlIHRoZSBjdXJyZW50IG9uZSBpbiBkb2N1bWVudCBvcmRl
cgotICAgIE5vZGUqIHRyYXZlcnNlUHJldmlvdXNOb2RlKGNvbnN0IE5vZGUqIHN0YXlXaXRoaW4g
PSAwKSBjb25zdDsKLQotICAgIC8vIExpa2UgdHJhdmVyc2VQcmV2aW91c05vZGUsIGJ1dCBza2lw
cyBjaGlsZHJlbiBhbmQgc3RhcnRzIHdpdGggdGhlIG5leHQgc2libGluZy4KLSAgICBOb2RlKiB0
cmF2ZXJzZVByZXZpb3VzU2libGluZyhjb25zdCBOb2RlKiBzdGF5V2l0aGluID0gMCkgY29uc3Q7
Ci0KLSAgICAvLyBMaWtlIHRyYXZlcnNlTmV4dE5vZGUsIGJ1dCB2aXNpdHMgcGFyZW50cyBhZnRl
ciB0aGVpciBjaGlsZHJlbi4KLSAgICBOb2RlKiB0cmF2ZXJzZU5leHROb2RlUG9zdE9yZGVyKCkg
Y29uc3Q7Ci0KLSAgICAvLyBMaWtlIHRyYXZlcnNlUHJldmlvdXNOb2RlLCBidXQgdmlzaXRzIHBh
cmVudHMgYmVmb3JlIHRoZWlyIGNoaWxkcmVuLgotICAgIE5vZGUqIHRyYXZlcnNlUHJldmlvdXNO
b2RlUG9zdE9yZGVyKGNvbnN0IE5vZGUqIHN0YXlXaXRoaW4gPSAwKSBjb25zdDsKLSAgICBOb2Rl
KiB0cmF2ZXJzZVByZXZpb3VzU2libGluZ1Bvc3RPcmRlcihjb25zdCBOb2RlKiBzdGF5V2l0aGlu
ID0gMCkgY29uc3Q7Ci0KICAgICB2b2lkIGNoZWNrU2V0UHJlZml4KGNvbnN0IEF0b21pY1N0cmlu
ZyYgcHJlZml4LCBFeGNlcHRpb25Db2RlJik7CiAgICAgYm9vbCBpc0Rlc2NlbmRhbnRPZihjb25z
dCBOb2RlKikgY29uc3Q7CiAgICAgYm9vbCBjb250YWlucyhjb25zdCBOb2RlKikgY29uc3Q7CkBA
IC04MDUsOSArNzgxLDYgQEAgcHJpdmF0ZToKIAogICAgIEVsZW1lbnQqIGFuY2VzdG9yRWxlbWVu
dCgpIGNvbnN0OwogCi0gICAgTm9kZSogdHJhdmVyc2VOZXh0QW5jZXN0b3JTaWJsaW5nKCkgY29u
c3Q7Ci0gICAgTm9kZSogdHJhdmVyc2VOZXh0QW5jZXN0b3JTaWJsaW5nKGNvbnN0IE5vZGUqIHN0
YXlXaXRoaW4pIGNvbnN0OwotCiAgICAgLy8gVXNlIE5vZGU6OnBhcmVudE5vZGUgYXMgdGhlIGNv
bnNpc3RlbnQgd2F5IG9mIHF1ZXJ5aW5nIGEgcGFyZW50IG5vZGUuCiAgICAgLy8gVGhpcyBtZXRo
b2QgaXMgbWFkZSBwcml2YXRlIHRvIGVuc3VyZSBhIGNvbXBpbGVyIGVycm9yIG9uIGNhbGwgc2l0
ZXMgdGhhdAogICAgIC8vIGRvbid0IGZvbGxvdyB0aGlzIHJ1bGUuCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9kb20vTm9kZUl0ZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9k
b20vTm9kZUl0ZXJhdG9yLmNwcAkocmV2aXNpb24gMTM2NjA2KQorKysgU291cmNlL1dlYkNvcmUv
ZG9tL05vZGVJdGVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKICNp
bmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRl
ICJOb2RlRmlsdGVyLmgiCisjaW5jbHVkZSAiTm9kZVRyYXZlcnNhbC5oIgogI2luY2x1ZGUgIlNj
cmlwdFN0YXRlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTU1LDcgKzU2LDcgQEAgYm9v
bCBOb2RlSXRlcmF0b3I6Ok5vZGVQb2ludGVyOjptb3ZlVG9OZQogICAgICAgICBpc1BvaW50ZXJC
ZWZvcmVOb2RlID0gZmFsc2U7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KLSAgICBub2Rl
ID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZShyb290KTsKKyAgICBub2RlID0gTm9kZVRyYXZlcnNh
bDo6bmV4dChub2RlLmdldCgpLCByb290KTsKICAgICByZXR1cm4gbm9kZTsKIH0KIApAQCAtNjcs
NyArNjgsNyBAQCBib29sIE5vZGVJdGVyYXRvcjo6Tm9kZVBvaW50ZXI6Om1vdmVUb1ByCiAgICAg
ICAgIGlzUG9pbnRlckJlZm9yZU5vZGUgPSB0cnVlOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9Ci0gICAgbm9kZSA9IG5vZGUtPnRyYXZlcnNlUHJldmlvdXNOb2RlKHJvb3QpOworICAgIG5v
ZGUgPSBOb2RlVHJhdmVyc2FsOjpwcmV2aW91cyhub2RlLmdldCgpLCByb290KTsKICAgICByZXR1
cm4gbm9kZTsKIH0KIApAQCAtMTc3LDIyICsxNzgsMjIgQEAgdm9pZCBOb2RlSXRlcmF0b3I6OnVw
ZGF0ZUZvck5vZGVSZW1vdmFsKAogICAgICAgICByZXR1cm47CiAKICAgICBpZiAocmVmZXJlbmNl
Tm9kZS5pc1BvaW50ZXJCZWZvcmVOb2RlKSB7Ci0gICAgICAgIE5vZGUqIG5vZGUgPSByZW1vdmVk
Tm9kZS0+dHJhdmVyc2VOZXh0Tm9kZShyb290KCkpOworICAgICAgICBOb2RlKiBub2RlID0gTm9k
ZVRyYXZlcnNhbDo6bmV4dChyZW1vdmVkTm9kZSwgcm9vdCgpKTsKICAgICAgICAgaWYgKG5vZGUp
IHsKICAgICAgICAgICAgIC8vIE1vdmUgb3V0IGZyb20gdW5kZXIgdGhlIG5vZGUgYmVpbmcgcmVt
b3ZlZCBpZiB0aGUgbmV3IHJlZmVyZW5jZQogICAgICAgICAgICAgLy8gbm9kZSBpcyBhIGRlc2Nl
bmRhbnQgb2YgdGhlIG5vZGUgYmVpbmcgcmVtb3ZlZC4KICAgICAgICAgICAgIHdoaWxlIChub2Rl
ICYmIG5vZGUtPmlzRGVzY2VuZGFudE9mKHJlbW92ZWROb2RlKSkKLSAgICAgICAgICAgICAgICBu
b2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZShyb290KCkpOworICAgICAgICAgICAgICAgIG5v
ZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUsIHJvb3QoKSk7CiAgICAgICAgICAgICBpZiAo
bm9kZSkKICAgICAgICAgICAgICAgICByZWZlcmVuY2VOb2RlLm5vZGUgPSBub2RlOwogICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgbm9kZSA9IHJlbW92ZWROb2RlLT50cmF2ZXJzZVByZXZp
b3VzTm9kZShyb290KCkpOworICAgICAgICAgICAgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6OnByZXZp
b3VzKHJlbW92ZWROb2RlLCByb290KCkpOwogICAgICAgICAgICAgaWYgKG5vZGUpIHsKICAgICAg
ICAgICAgICAgICAvLyBNb3ZlIG91dCBmcm9tIHVuZGVyIHRoZSBub2RlIGJlaW5nIHJlbW92ZWQg
aWYgdGhlIHJlZmVyZW5jZSBub2RlIGlzCiAgICAgICAgICAgICAgICAgLy8gYSBkZXNjZW5kYW50
IG9mIHRoZSBub2RlIGJlaW5nIHJlbW92ZWQuCiAgICAgICAgICAgICAgICAgaWYgKHdpbGxSZW1v
dmVSZWZlcmVuY2VOb2RlQW5jZXN0b3IpIHsKICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKG5v
ZGUgJiYgbm9kZS0+aXNEZXNjZW5kYW50T2YocmVtb3ZlZE5vZGUpKQotICAgICAgICAgICAgICAg
ICAgICAgICAgbm9kZSA9IG5vZGUtPnRyYXZlcnNlUHJldmlvdXNOb2RlKHJvb3QoKSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBub2RlID0gTm9kZVRyYXZlcnNhbDo6cHJldmlvdXMobm9kZSwg
cm9vdCgpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgaWYgKG5vZGUpIHsK
ICAgICAgICAgICAgICAgICAgICAgLy8gUmVtb3ZpbmcgbGFzdCBub2RlLgpAQCAtMjA0LDI0ICsy
MDUsMjQgQEAgdm9pZCBOb2RlSXRlcmF0b3I6OnVwZGF0ZUZvck5vZGVSZW1vdmFsKAogICAgICAg
ICAgICAgfQogICAgICAgICB9CiAgICAgfSBlbHNlIHsKLSAgICAgICAgTm9kZSogbm9kZSA9IHJl
bW92ZWROb2RlLT50cmF2ZXJzZVByZXZpb3VzTm9kZShyb290KCkpOworICAgICAgICBOb2RlKiBu
b2RlID0gTm9kZVRyYXZlcnNhbDo6cHJldmlvdXMocmVtb3ZlZE5vZGUsIHJvb3QoKSk7CiAgICAg
ICAgIGlmIChub2RlKSB7CiAgICAgICAgICAgICAvLyBNb3ZlIG91dCBmcm9tIHVuZGVyIHRoZSBu
b2RlIGJlaW5nIHJlbW92ZWQgaWYgdGhlIHJlZmVyZW5jZSBub2RlIGlzCiAgICAgICAgICAgICAv
LyBhIGRlc2NlbmRhbnQgb2YgdGhlIG5vZGUgYmVpbmcgcmVtb3ZlZC4KICAgICAgICAgICAgIGlm
ICh3aWxsUmVtb3ZlUmVmZXJlbmNlTm9kZUFuY2VzdG9yKSB7CiAgICAgICAgICAgICAgICAgd2hp
bGUgKG5vZGUgJiYgbm9kZS0+aXNEZXNjZW5kYW50T2YocmVtb3ZlZE5vZGUpKQotICAgICAgICAg
ICAgICAgICAgICBub2RlID0gbm9kZS0+dHJhdmVyc2VQcmV2aW91c05vZGUocm9vdCgpKTsKKyAg
ICAgICAgICAgICAgICAgICAgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6OnByZXZpb3VzKG5vZGUsIHJv
b3QoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAobm9kZSkKICAgICAgICAgICAg
ICAgICByZWZlcmVuY2VOb2RlLm5vZGUgPSBub2RlOwogICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgLy8gRklYTUU6IFRoaXMgYnJhbmNoIGRvZXNuJ3QgYXBwZWFyIHRvIGhhdmUgYW55IExh
eW91dFRlc3RzLgotICAgICAgICAgICAgbm9kZSA9IHJlbW92ZWROb2RlLT50cmF2ZXJzZU5leHRO
b2RlKHJvb3QoKSk7CisgICAgICAgICAgICBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dChyZW1v
dmVkTm9kZSwgcm9vdCgpKTsKICAgICAgICAgICAgIC8vIE1vdmUgb3V0IGZyb20gdW5kZXIgdGhl
IG5vZGUgYmVpbmcgcmVtb3ZlZCBpZiB0aGUgcmVmZXJlbmNlIG5vZGUgaXMKICAgICAgICAgICAg
IC8vIGEgZGVzY2VuZGFudCBvZiB0aGUgbm9kZSBiZWluZyByZW1vdmVkLgogICAgICAgICAgICAg
aWYgKHdpbGxSZW1vdmVSZWZlcmVuY2VOb2RlQW5jZXN0b3IpIHsKICAgICAgICAgICAgICAgICB3
aGlsZSAobm9kZSAmJiBub2RlLT5pc0Rlc2NlbmRhbnRPZihyZW1vdmVkTm9kZSkpCi0gICAgICAg
ICAgICAgICAgICAgIG5vZGUgPSBub2RlLT50cmF2ZXJzZVByZXZpb3VzTm9kZShyb290KCkpOwor
ICAgICAgICAgICAgICAgICAgICBub2RlID0gTm9kZVRyYXZlcnNhbDo6cHJldmlvdXMobm9kZSwg
cm9vdCgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChub2RlKQogICAgICAgICAg
ICAgICAgIHJlZmVyZW5jZU5vZGUubm9kZSA9IG5vZGU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9k
b20vTm9kZVRyYXZlcnNhbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL05v
ZGVUcmF2ZXJzYWwuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvZG9tL05vZGVU
cmF2ZXJzYWwuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEyOSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQorICogICAgICAgICAgIChD
KSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQorICogICAgICAgICAgIChD
KSAyMDAxIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQorICogQ29weXJpZ2h0IChDKSAy
MDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExLCAyMDEyIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBU
b3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAoaHR0cDovL3d3dy50b3JjaG1v
YmlsZS5jb20vKQorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk5vZGVUcmF2ZXJz
YWwuaCIKKworI2luY2x1ZGUgIkNvbnRhaW5lck5vZGUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworbmFtZXNwYWNlIE5vZGVUcmF2ZXJzYWwgeworCitOb2RlKiBuZXh0QW5jZXN0b3JTaWJsaW5n
KGNvbnN0IE5vZGUqIGN1cnJlbnQpCit7CisgICAgQVNTRVJUKCFjdXJyZW50LT5uZXh0U2libGlu
ZygpKTsKKyAgICBmb3IgKGN1cnJlbnQgPSBjdXJyZW50LT5wYXJlbnROb2RlKCk7IGN1cnJlbnQ7
IGN1cnJlbnQgPSBjdXJyZW50LT5wYXJlbnROb2RlKCkpIHsKKyAgICAgICAgaWYgKGN1cnJlbnQt
Pm5leHRTaWJsaW5nKCkpCisgICAgICAgICAgICByZXR1cm4gY3VycmVudC0+bmV4dFNpYmxpbmco
KTsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKK05vZGUqIG5leHRBbmNlc3RvclNpYmxpbmco
Y29uc3QgTm9kZSogY3VycmVudCwgY29uc3QgTm9kZSogc3RheVdpdGhpbikKK3sKKyAgICBBU1NF
UlQoIWN1cnJlbnQtPm5leHRTaWJsaW5nKCkpOworICAgIEFTU0VSVChjdXJyZW50ICE9IHN0YXlX
aXRoaW4pOworICAgIGZvciAoY3VycmVudCA9IGN1cnJlbnQtPnBhcmVudE5vZGUoKTsgY3VycmVu
dDsgY3VycmVudCA9IGN1cnJlbnQtPnBhcmVudE5vZGUoKSkgeworICAgICAgICBpZiAoY3VycmVu
dCA9PSBzdGF5V2l0aGluKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGlmIChjdXJy
ZW50LT5uZXh0U2libGluZygpKQorICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQtPm5leHRTaWJs
aW5nKCk7CisgICAgfQorICAgIHJldHVybiAwOworfQorCitOb2RlKiBwcmV2aW91cyhjb25zdCBO
b2RlKiBjdXJyZW50LCBjb25zdCBOb2RlKiBzdGF5V2l0aGluKQoreworICAgIGlmIChjdXJyZW50
ID09IHN0YXlXaXRoaW4pCisgICAgICAgIHJldHVybiAwOworICAgIGlmIChjdXJyZW50LT5wcmV2
aW91c1NpYmxpbmcoKSkgeworICAgICAgICBOb2RlKiBwcmV2aW91cyA9IGN1cnJlbnQtPnByZXZp
b3VzU2libGluZygpOworICAgICAgICB3aGlsZSAocHJldmlvdXMtPmxhc3RDaGlsZCgpKQorICAg
ICAgICAgICAgcHJldmlvdXMgPSBwcmV2aW91cy0+bGFzdENoaWxkKCk7CisgICAgICAgIHJldHVy
biBwcmV2aW91czsKKyAgICB9CisgICAgcmV0dXJuIGN1cnJlbnQtPnBhcmVudE5vZGUoKTsKK30K
KworTm9kZSogcHJldmlvdXNTaWJsaW5nKGNvbnN0IE5vZGUqIGN1cnJlbnQsIGNvbnN0IE5vZGUq
IHN0YXlXaXRoaW4pCit7CisgICAgaWYgKGN1cnJlbnQgPT0gc3RheVdpdGhpbikKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgaWYgKGN1cnJlbnQtPnByZXZpb3VzU2libGluZygpKQorICAgICAgICBy
ZXR1cm4gY3VycmVudC0+cHJldmlvdXNTaWJsaW5nKCk7CisgICAgZm9yIChjdXJyZW50ID0gY3Vy
cmVudC0+cGFyZW50Tm9kZSgpOyBjdXJyZW50OyBjdXJyZW50ID0gY3VycmVudC0+cGFyZW50Tm9k
ZSgpKSB7CisgICAgICAgIGlmIChjdXJyZW50ID09IHN0YXlXaXRoaW4pCisgICAgICAgICAgICBy
ZXR1cm4gMDsKKyAgICAgICAgaWYgKGN1cnJlbnQtPnByZXZpb3VzU2libGluZygpKQorICAgICAg
ICAgICAgcmV0dXJuIGN1cnJlbnQtPnByZXZpb3VzU2libGluZygpOworICAgIH0KKyAgICByZXR1
cm4gMDsKK30KKworTm9kZSogbmV4dFBvc3RPcmRlcihjb25zdCBOb2RlKiBjdXJyZW50LCBjb25z
dCBOb2RlKiBzdGF5V2l0aGluKQoreworICAgIGlmIChjdXJyZW50ID09IHN0YXlXaXRoaW4pCisg
ICAgICAgIHJldHVybiAwOworICAgIGlmICghY3VycmVudC0+bmV4dFNpYmxpbmcoKSkKKyAgICAg
ICAgcmV0dXJuIGN1cnJlbnQtPnBhcmVudE5vZGUoKTsKKyAgICBOb2RlKiBuZXh0ID0gY3VycmVu
dC0+bmV4dFNpYmxpbmcoKTsKKyAgICB3aGlsZSAobmV4dC0+Zmlyc3RDaGlsZCgpKQorICAgICAg
ICBuZXh0ID0gbmV4dC0+Zmlyc3RDaGlsZCgpOworICAgIHJldHVybiBuZXh0OworfQorCitzdGF0
aWMgTm9kZSogcHJldmlvdXNBbmNlc3RvclNpYmxpbmdQb3N0T3JkZXIoY29uc3QgTm9kZSogY3Vy
cmVudCwgY29uc3QgTm9kZSogc3RheVdpdGhpbikKK3sKKyAgICBBU1NFUlQoIWN1cnJlbnQtPnBy
ZXZpb3VzU2libGluZygpKTsKKyAgICBmb3IgKGN1cnJlbnQgPSBjdXJyZW50LT5wYXJlbnROb2Rl
KCk7IGN1cnJlbnQ7IGN1cnJlbnQgPSBjdXJyZW50LT5wYXJlbnROb2RlKCkpIHsKKyAgICAgICAg
aWYgKGN1cnJlbnQgPT0gc3RheVdpdGhpbikKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAg
ICBpZiAoY3VycmVudC0+cHJldmlvdXNTaWJsaW5nKCkpCisgICAgICAgICAgICByZXR1cm4gY3Vy
cmVudC0+cHJldmlvdXNTaWJsaW5nKCk7CisgICAgfQorICAgIHJldHVybiAwOworfQorCitOb2Rl
KiBwcmV2aW91c1Bvc3RPcmRlcihjb25zdCBOb2RlKiBjdXJyZW50LCBjb25zdCBOb2RlKiBzdGF5
V2l0aGluKQoreworICAgIGlmIChjdXJyZW50LT5sYXN0Q2hpbGQoKSkKKyAgICAgICAgcmV0dXJu
IGN1cnJlbnQtPmxhc3RDaGlsZCgpOworICAgIGlmIChjdXJyZW50ID09IHN0YXlXaXRoaW4pCisg
ICAgICAgIHJldHVybiAwOworICAgIGlmIChjdXJyZW50LT5wcmV2aW91c1NpYmxpbmcoKSkKKyAg
ICAgICAgcmV0dXJuIGN1cnJlbnQtPnByZXZpb3VzU2libGluZygpOworICAgIHJldHVybiBwcmV2
aW91c0FuY2VzdG9yU2libGluZ1Bvc3RPcmRlcihjdXJyZW50LCBzdGF5V2l0aGluKTsKK30KKwor
Tm9kZSogcHJldmlvdXNTaWJsaW5nUG9zdE9yZGVyKGNvbnN0IE5vZGUqIGN1cnJlbnQsIGNvbnN0
IE5vZGUqIHN0YXlXaXRoaW4pCit7CisgICAgaWYgKGN1cnJlbnQgPT0gc3RheVdpdGhpbikKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgaWYgKGN1cnJlbnQtPnByZXZpb3VzU2libGluZygpKQorICAg
ICAgICByZXR1cm4gY3VycmVudC0+cHJldmlvdXNTaWJsaW5nKCk7CisgICAgcmV0dXJuIHByZXZp
b3VzQW5jZXN0b3JTaWJsaW5nUG9zdE9yZGVyKGN1cnJlbnQsIHN0YXlXaXRoaW4pOworfQorCit9
Cit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZVRyYXZlcnNhbC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlVHJhdmVyc2FsLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvV2ViQ29yZS9kb20vTm9kZVRyYXZlcnNhbC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDExOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUu
b3JnKQorICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUu
b3JnKQorICogICAgICAgICAgIChDKSAyMDAxIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3Jn
KQorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAy
MDEwLCAyMDExLCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwOCwgMjAwOSBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LiAoaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBOb2RlVHJhdmVyc2Fs
X2gKKyNkZWZpbmUgTm9kZVRyYXZlcnNhbF9oCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xh
c3MgTm9kZTsKK2NsYXNzIENvbnRhaW5lck5vZGU7CisKK25hbWVzcGFjZSBOb2RlVHJhdmVyc2Fs
IHsKKworLy8gRG9lcyBhIHByZS1vcmRlciB0cmF2ZXJzYWwgb2YgdGhlIHRyZWUgdG8gZmluZCB0
aGUgbmV4dCBub2RlIGFmdGVyIHRoaXMgb25lLgorLy8gVGhpcyB1c2VzIHRoZSBzYW1lIG9yZGVy
IHRoYXQgdGFncyBhcHBlYXIgaW4gdGhlIHNvdXJjZSBmaWxlLiBJZiB0aGUgc3RheVdpdGhpbgor
Ly8gYXJndW1lbnQgaXMgbm9uLW51bGwsIHRoZSB0cmF2ZXJzYWwgd2lsbCBzdG9wIG9uY2UgdGhl
IHNwZWNpZmllZCBub2RlIGlzIHJlYWNoZWQuCisvLyBUaGlzIGNhbiBiZSB1c2VkIHRvIHJlc3Ry
aWN0IHRyYXZlcnNhbCB0byBhIHBhcnRpY3VsYXIgc3ViLXRyZWUuCitOb2RlKiBuZXh0KGNvbnN0
IE5vZGUqKTsKK05vZGUqIG5leHQoY29uc3QgTm9kZSosIGNvbnN0IE5vZGUqIHN0YXlXaXRoaW4p
OworTm9kZSogbmV4dChjb25zdCBDb250YWluZXJOb2RlKik7CitOb2RlKiBuZXh0KGNvbnN0IENv
bnRhaW5lck5vZGUqLCBjb25zdCBOb2RlKiBzdGF5V2l0aGluKTsKKworLy8gTGlrZSBuZXh0LCBi
dXQgc2tpcHMgY2hpbGRyZW4gYW5kIHN0YXJ0cyB3aXRoIHRoZSBuZXh0IHNpYmxpbmcuCitOb2Rl
KiBuZXh0U2libGluZyhjb25zdCBOb2RlKik7CitOb2RlKiBuZXh0U2libGluZyhjb25zdCBOb2Rl
KiwgY29uc3QgTm9kZSogc3RheVdpdGhpbik7CitOb2RlKiBuZXh0U2libGluZyhjb25zdCBDb250
YWluZXJOb2RlKik7CitOb2RlKiBuZXh0U2libGluZyhjb25zdCBDb250YWluZXJOb2RlKiwgY29u
c3QgTm9kZSogc3RheVdpdGhpbik7CisKKy8vIERvZXMgYSByZXZlcnNlIHByZS1vcmRlciB0cmF2
ZXJzYWwgdG8gZmluZCB0aGUgbm9kZSB0aGF0IGNvbWVzIGJlZm9yZSB0aGUgY3VycmVudCBvbmUg
aW4gZG9jdW1lbnQgb3JkZXIKK05vZGUqIHByZXZpb3VzKGNvbnN0IE5vZGUqLCBjb25zdCBOb2Rl
KiBzdGF5V2l0aGluID0gMCk7CisKKy8vIExpa2UgcHJldmlvdXMsIGJ1dCBza2lwcyBjaGlsZHJl
biBhbmQgc3RhcnRzIHdpdGggdGhlIG5leHQgc2libGluZy4KK05vZGUqIHByZXZpb3VzU2libGlu
Zyhjb25zdCBOb2RlKiwgY29uc3QgTm9kZSogc3RheVdpdGhpbiA9IDApOworCisvLyBMaWtlIG5l
eHQsIGJ1dCB2aXNpdHMgcGFyZW50cyBhZnRlciB0aGVpciBjaGlsZHJlbi4KK05vZGUqIG5leHRQ
b3N0T3JkZXIoY29uc3QgTm9kZSosIGNvbnN0IE5vZGUqIHN0YXlXaXRoaW4gPSAwKTsKKworLy8g
TGlrZSBwcmV2aW91cy9wcmV2aW91c1NpYmxpbmcsIGJ1dCB2aXNpdHMgcGFyZW50cyBiZWZvcmUg
dGhlaXIgY2hpbGRyZW4uCitOb2RlKiBwcmV2aW91c1Bvc3RPcmRlcihjb25zdCBOb2RlKiwgY29u
c3QgTm9kZSogc3RheVdpdGhpbiA9IDApOworTm9kZSogcHJldmlvdXNTaWJsaW5nUG9zdE9yZGVy
KGNvbnN0IE5vZGUqLCBjb25zdCBOb2RlKiBzdGF5V2l0aGluID0gMCk7CisKK05vZGUqIG5leHRB
bmNlc3RvclNpYmxpbmcoY29uc3QgTm9kZSopOworTm9kZSogbmV4dEFuY2VzdG9yU2libGluZyhj
b25zdCBOb2RlKiwgY29uc3QgTm9kZSogc3RheVdpdGhpbik7CisKK3RlbXBsYXRlIDxjbGFzcyBO
b2RlVHlwZT4KK05vZGUqIHRyYXZlcnNlTmV4dE5vZGVUZW1wbGF0ZShOb2RlVHlwZSogY3VycmVu
dCkKK3sKKyAgICBpZiAoY3VycmVudC0+Zmlyc3RDaGlsZCgpKQorICAgICAgICByZXR1cm4gY3Vy
cmVudC0+Zmlyc3RDaGlsZCgpOworICAgIGlmIChjdXJyZW50LT5uZXh0U2libGluZygpKQorICAg
ICAgICByZXR1cm4gY3VycmVudC0+bmV4dFNpYmxpbmcoKTsKKyAgICByZXR1cm4gbmV4dEFuY2Vz
dG9yU2libGluZyhjdXJyZW50KTsKK30KK2lubGluZSBOb2RlKiBuZXh0KGNvbnN0IE5vZGUqIGN1
cnJlbnQpIHsgcmV0dXJuIHRyYXZlcnNlTmV4dE5vZGVUZW1wbGF0ZShjdXJyZW50KTsgfQoraW5s
aW5lIE5vZGUqIG5leHQoY29uc3QgQ29udGFpbmVyTm9kZSogY3VycmVudCkgeyByZXR1cm4gdHJh
dmVyc2VOZXh0Tm9kZVRlbXBsYXRlKGN1cnJlbnQpOyB9CisgICAgCit0ZW1wbGF0ZSA8Y2xhc3Mg
Tm9kZVR5cGU+CitOb2RlKiB0cmF2ZXJzZU5leHROb2RlVGVtcGxhdGUoTm9kZVR5cGUqIGN1cnJl
bnQsIGNvbnN0IE5vZGUqIHN0YXlXaXRoaW4pCit7CisgICAgaWYgKGN1cnJlbnQtPmZpcnN0Q2hp
bGQoKSkKKyAgICAgICAgcmV0dXJuIGN1cnJlbnQtPmZpcnN0Q2hpbGQoKTsKKyAgICBpZiAoY3Vy
cmVudCA9PSBzdGF5V2l0aGluKQorICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAoY3VycmVudC0+
bmV4dFNpYmxpbmcoKSkKKyAgICAgICAgcmV0dXJuIGN1cnJlbnQtPm5leHRTaWJsaW5nKCk7Cisg
ICAgcmV0dXJuIG5leHRBbmNlc3RvclNpYmxpbmcoY3VycmVudCwgc3RheVdpdGhpbik7Cit9Citp
bmxpbmUgTm9kZSogbmV4dChjb25zdCBOb2RlKiBjdXJyZW50LCBjb25zdCBOb2RlKiBzdGF5V2l0
aGluKSB7IHJldHVybiB0cmF2ZXJzZU5leHROb2RlVGVtcGxhdGUoY3VycmVudCwgc3RheVdpdGhp
bik7IH0KK2lubGluZSBOb2RlKiBuZXh0KGNvbnN0IENvbnRhaW5lck5vZGUqIGN1cnJlbnQsIGNv
bnN0IE5vZGUqIHN0YXlXaXRoaW4pIHsgcmV0dXJuIHRyYXZlcnNlTmV4dE5vZGVUZW1wbGF0ZShj
dXJyZW50LCBzdGF5V2l0aGluKTsgfQorCit0ZW1wbGF0ZSA8Y2xhc3MgTm9kZVR5cGU+CitOb2Rl
KiB0cmF2ZXJzZU5leHRTaWJsaW5nVGVtcGxhdGUoTm9kZVR5cGUqIGN1cnJlbnQpCit7CisgICAg
aWYgKGN1cnJlbnQtPm5leHRTaWJsaW5nKCkpCisgICAgICAgIHJldHVybiBjdXJyZW50LT5uZXh0
U2libGluZygpOworICAgIHJldHVybiBuZXh0QW5jZXN0b3JTaWJsaW5nKGN1cnJlbnQpOworfQor
aW5saW5lIE5vZGUqIG5leHRTaWJsaW5nKGNvbnN0IE5vZGUqIGN1cnJlbnQpIHsgcmV0dXJuIHRy
YXZlcnNlTmV4dFNpYmxpbmdUZW1wbGF0ZShjdXJyZW50KTsgfQoraW5saW5lIE5vZGUqIG5leHRT
aWJsaW5nKGNvbnN0IENvbnRhaW5lck5vZGUqIGN1cnJlbnQpIHsgcmV0dXJuIHRyYXZlcnNlTmV4
dFNpYmxpbmdUZW1wbGF0ZShjdXJyZW50KTsgfQorCit0ZW1wbGF0ZSA8Y2xhc3MgTm9kZVR5cGU+
CitOb2RlKiB0cmF2ZXJzZU5leHRTaWJsaW5nVGVtcGxhdGUoTm9kZVR5cGUqIGN1cnJlbnQsIGNv
bnN0IE5vZGUqIHN0YXlXaXRoaW4pCit7CisgICAgaWYgKGN1cnJlbnQgPT0gc3RheVdpdGhpbikK
KyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKGN1cnJlbnQtPm5leHRTaWJsaW5nKCkpCisgICAg
ICAgIHJldHVybiBjdXJyZW50LT5uZXh0U2libGluZygpOworICAgIHJldHVybiBuZXh0QW5jZXN0
b3JTaWJsaW5nKGN1cnJlbnQsIHN0YXlXaXRoaW4pOworfQoraW5saW5lIE5vZGUqIG5leHRTaWJs
aW5nKGNvbnN0IE5vZGUqIGN1cnJlbnQsIGNvbnN0IE5vZGUqIHN0YXlXaXRoaW4pIHsgcmV0dXJu
IHRyYXZlcnNlTmV4dFNpYmxpbmdUZW1wbGF0ZShjdXJyZW50LCBzdGF5V2l0aGluKTsgfQoraW5s
aW5lIE5vZGUqIG5leHRTaWJsaW5nKGNvbnN0IENvbnRhaW5lck5vZGUqIGN1cnJlbnQsIGNvbnN0
IE5vZGUqIHN0YXlXaXRoaW4pIHsgcmV0dXJuIHRyYXZlcnNlTmV4dFNpYmxpbmdUZW1wbGF0ZShj
dXJyZW50LCBzdGF5V2l0aGluKTsgfQorCit9CisKK30KKworI2VuZGlmCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9kb20vUmFuZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9S
YW5nZS5jcHAJKHJldmlzaW9uIDEzNjYwNikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJIVE1MRWxlbWVu
dC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIk5vZGUuaCIKKyNpbmNsdWRl
ICJOb2RlVHJhdmVyc2FsLmgiCiAjaW5jbHVkZSAiTm9kZVdpdGhJbmRleC5oIgogI2luY2x1ZGUg
IlBhZ2UuaCIKICNpbmNsdWRlICJQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uaCIKQEAgLTEwNjUsNyAr
MTA2Niw3IEBAIFN0cmluZyBSYW5nZTo6dG9TdHJpbmcoRXhjZXB0aW9uQ29kZSYgZWMKICAgICBT
dHJpbmdCdWlsZGVyIGJ1aWxkZXI7CiAKICAgICBOb2RlKiBwYXN0TGFzdCA9IHBhc3RMYXN0Tm9k
ZSgpOwotICAgIGZvciAoTm9kZSogbiA9IGZpcnN0Tm9kZSgpOyBuICE9IHBhc3RMYXN0OyBuID0g
bi0+dHJhdmVyc2VOZXh0Tm9kZSgpKSB7CisgICAgZm9yIChOb2RlKiBuID0gZmlyc3ROb2RlKCk7
IG4gIT0gcGFzdExhc3Q7IG4gPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG4pKSB7CiAgICAgICAgIGlm
IChuLT5ub2RlVHlwZSgpID09IE5vZGU6OlRFWFRfTk9ERSB8fCBuLT5ub2RlVHlwZSgpID09IE5v
ZGU6OkNEQVRBX1NFQ1RJT05fTk9ERSkgewogICAgICAgICAgICAgU3RyaW5nIGRhdGEgPSBzdGF0
aWNfY2FzdDxDaGFyYWN0ZXJEYXRhKj4obiktPmRhdGEoKTsKICAgICAgICAgICAgIGludCBsZW5n
dGggPSBkYXRhLmxlbmd0aCgpOwpAQCAtMTUxNyw3ICsxNTE4LDcgQEAgdm9pZCBSYW5nZTo6Y2hl
Y2tEZWxldGVFeHRyYWN0KEV4Y2VwdGlvbgogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAg
IE5vZGUqIHBhc3RMYXN0ID0gcGFzdExhc3ROb2RlKCk7Ci0gICAgZm9yIChOb2RlKiBuID0gZmly
c3ROb2RlKCk7IG4gIT0gcGFzdExhc3Q7IG4gPSBuLT50cmF2ZXJzZU5leHROb2RlKCkpIHsKKyAg
ICBmb3IgKE5vZGUqIG4gPSBmaXJzdE5vZGUoKTsgbiAhPSBwYXN0TGFzdDsgbiA9IE5vZGVUcmF2
ZXJzYWw6Om5leHQobikpIHsKICAgICAgICAgaWYgKG4tPmlzUmVhZE9ubHlOb2RlKCkpIHsKICAg
ICAgICAgICAgIGVjID0gTk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSOwogICAgICAgICAgICAg
cmV0dXJuOwpAQCAtMTU1Nyw3ICsxNTU4LDcgQEAgTm9kZSogUmFuZ2U6OmZpcnN0Tm9kZSgpIGNv
bnN0CiAgICAgICAgIHJldHVybiBjaGlsZDsKICAgICBpZiAoIW1fc3RhcnQub2Zmc2V0KCkpCiAg
ICAgICAgIHJldHVybiBtX3N0YXJ0LmNvbnRhaW5lcigpOwotICAgIHJldHVybiBtX3N0YXJ0LmNv
bnRhaW5lcigpLT50cmF2ZXJzZU5leHRTaWJsaW5nKCk7CisgICAgcmV0dXJuIE5vZGVUcmF2ZXJz
YWw6Om5leHRTaWJsaW5nKG1fc3RhcnQuY29udGFpbmVyKCkpOwogfQogCiBTaGFkb3dSb290KiBS
YW5nZTo6c2hhZG93Um9vdCgpIGNvbnN0CkBAIC0xNTcwLDEwICsxNTcxLDEwIEBAIE5vZGUqIFJh
bmdlOjpwYXN0TGFzdE5vZGUoKSBjb25zdAogICAgIGlmICghbV9zdGFydC5jb250YWluZXIoKSB8
fCAhbV9lbmQuY29udGFpbmVyKCkpCiAgICAgICAgIHJldHVybiAwOwogICAgIGlmIChtX2VuZC5j
b250YWluZXIoKS0+b2Zmc2V0SW5DaGFyYWN0ZXJzKCkpCi0gICAgICAgIHJldHVybiBtX2VuZC5j
b250YWluZXIoKS0+dHJhdmVyc2VOZXh0U2libGluZygpOworICAgICAgICByZXR1cm4gTm9kZVRy
YXZlcnNhbDo6bmV4dFNpYmxpbmcobV9lbmQuY29udGFpbmVyKCkpOwogICAgIGlmIChOb2RlKiBj
aGlsZCA9IG1fZW5kLmNvbnRhaW5lcigpLT5jaGlsZE5vZGUobV9lbmQub2Zmc2V0KCkpKQogICAg
ICAgICByZXR1cm4gY2hpbGQ7Ci0gICAgcmV0dXJuIG1fZW5kLmNvbnRhaW5lcigpLT50cmF2ZXJz
ZU5leHRTaWJsaW5nKCk7CisgICAgcmV0dXJuIE5vZGVUcmF2ZXJzYWw6Om5leHRTaWJsaW5nKG1f
ZW5kLmNvbnRhaW5lcigpKTsKIH0KIAogSW50UmVjdCBSYW5nZTo6Ym91bmRpbmdCb3goKSBjb25z
dApAQCAtMTYwMiw3ICsxNjAzLDcgQEAgdm9pZCBSYW5nZTo6dGV4dFJlY3RzKFZlY3RvcjxJbnRS
ZWN0PiYgcgogICAgIGJvb2wgc29tZUZpeGVkID0gZmFsc2U7CiAKICAgICBOb2RlKiBzdG9wTm9k
ZSA9IHBhc3RMYXN0Tm9kZSgpOwotICAgIGZvciAoTm9kZSogbm9kZSA9IGZpcnN0Tm9kZSgpOyBu
b2RlICE9IHN0b3BOb2RlOyBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgpKSB7CisgICAg
Zm9yIChOb2RlKiBub2RlID0gZmlyc3ROb2RlKCk7IG5vZGUgIT0gc3RvcE5vZGU7IG5vZGUgPSBO
b2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUpKSB7CiAgICAgICAgIFJlbmRlck9iamVjdCogciA9IG5v
ZGUtPnJlbmRlcmVyKCk7CiAgICAgICAgIGlmICghciB8fCAhci0+aXNUZXh0KCkpCiAgICAgICAg
ICAgICBjb250aW51ZTsKQEAgLTE2MzQsNyArMTYzNSw3IEBAIHZvaWQgUmFuZ2U6OnRleHRRdWFk
cyhWZWN0b3I8RmxvYXRRdWFkPiYKICAgICBib29sIHNvbWVGaXhlZCA9IGZhbHNlOwogCiAgICAg
Tm9kZSogc3RvcE5vZGUgPSBwYXN0TGFzdE5vZGUoKTsKLSAgICBmb3IgKE5vZGUqIG5vZGUgPSBm
aXJzdE5vZGUoKTsgbm9kZSAhPSBzdG9wTm9kZTsgbm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5v
ZGUoKSkgeworICAgIGZvciAoTm9kZSogbm9kZSA9IGZpcnN0Tm9kZSgpOyBub2RlICE9IHN0b3BO
b2RlOyBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dChub2RlKSkgewogICAgICAgICBSZW5kZXJP
YmplY3QqIHIgPSBub2RlLT5yZW5kZXJlcigpOwogICAgICAgICBpZiAoIXIgfHwgIXItPmlzVGV4
dCgpKQogICAgICAgICAgICAgY29udGludWU7CkBAIC0xOTA5LDEyICsxOTEwLDEyIEBAIHZvaWQg
UmFuZ2U6OmdldEJvcmRlckFuZFRleHRRdWFkcyhWZWN0b3IKICAgICBOb2RlKiBzdG9wTm9kZSA9
IHBhc3RMYXN0Tm9kZSgpOwogCiAgICAgSGFzaFNldDxOb2RlKj4gbm9kZVNldDsKLSAgICBmb3Ig
KE5vZGUqIG5vZGUgPSBmaXJzdE5vZGUoKTsgbm9kZSAhPSBzdG9wTm9kZTsgbm9kZSA9IG5vZGUt
PnRyYXZlcnNlTmV4dE5vZGUoKSkgeworICAgIGZvciAoTm9kZSogbm9kZSA9IGZpcnN0Tm9kZSgp
OyBub2RlICE9IHN0b3BOb2RlOyBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dChub2RlKSkgewog
ICAgICAgICBpZiAobm9kZS0+aXNFbGVtZW50Tm9kZSgpKQogICAgICAgICAgICAgbm9kZVNldC5h
ZGQobm9kZSk7CiAgICAgfQogCi0gICAgZm9yIChOb2RlKiBub2RlID0gZmlyc3ROb2RlKCk7IG5v
ZGUgIT0gc3RvcE5vZGU7IG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKCkpIHsKKyAgICBm
b3IgKE5vZGUqIG5vZGUgPSBmaXJzdE5vZGUoKTsgbm9kZSAhPSBzdG9wTm9kZTsgbm9kZSA9IE5v
ZGVUcmF2ZXJzYWw6Om5leHQobm9kZSkpIHsKICAgICAgICAgaWYgKG5vZGUtPmlzRWxlbWVudE5v
ZGUoKSkgewogICAgICAgICAgICAgaWYgKCFub2RlU2V0LmNvbnRhaW5zKG5vZGUtPnBhcmVudE5v
ZGUoKSkpIHsKICAgICAgICAgICAgICAgICBpZiAoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlbmRl
ckJveE1vZGVsT2JqZWN0ID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUpLT5yZW5kZXJCb3hN
b2RlbE9iamVjdCgpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vVHJlZVNjb3BlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vVHJlZVNjb3BlLmNwcAkocmV2aXNpb24g
MTM2NjA2KQorKysgU291cmNlL1dlYkNvcmUvZG9tL1RyZWVTY29wZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQyLDYgKzQyLDcgQEAKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJJ
ZFRhcmdldE9ic2VydmVyUmVnaXN0cnkuaCIKICNpbmNsdWRlICJJbnNlcnRpb25Qb2ludC5oIgor
I2luY2x1ZGUgIk5vZGVUcmF2ZXJzYWwuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAi
UnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgogI2luY2x1ZGUgIlNoYWRvd1Jvb3QuaCIKQEAgLTE4
Niw3ICsxODcsNyBAQCBIVE1MTGFiZWxFbGVtZW50KiBUcmVlU2NvcGU6OmxhYmVsRWxlbWVuCiAg
ICAgaWYgKCFtX2xhYmVsc0J5Rm9yQXR0cmlidXRlKSB7CiAgICAgICAgIC8vIFBvcHVsYXRlIHRo
ZSBtYXAgb24gZmlyc3QgYWNjZXNzLgogICAgICAgICBtX2xhYmVsc0J5Rm9yQXR0cmlidXRlID0g
YWRvcHRQdHIobmV3IERvY3VtZW50T3JkZXJlZE1hcCk7Ci0gICAgICAgIGZvciAoTm9kZSogbm9k
ZSA9IHJvb3ROb2RlKCk7IG5vZGU7IG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKCkpIHsK
KyAgICAgICAgZm9yIChOb2RlKiBub2RlID0gcm9vdE5vZGUoKTsgbm9kZTsgbm9kZSA9IE5vZGVU
cmF2ZXJzYWw6Om5leHQobm9kZSkpIHsKICAgICAgICAgICAgIGlmIChub2RlLT5oYXNUYWdOYW1l
KGxhYmVsVGFnKSkgewogICAgICAgICAgICAgICAgIEhUTUxMYWJlbEVsZW1lbnQqIGxhYmVsID0g
c3RhdGljX2Nhc3Q8SFRNTExhYmVsRWxlbWVudCo+KG5vZGUpOwogICAgICAgICAgICAgICAgIGNv
bnN0IEF0b21pY1N0cmluZyYgZm9yVmFsdWUgPSBsYWJlbC0+ZmFzdEdldEF0dHJpYnV0ZShmb3JB
dHRyKTsKQEAgLTIzMCw3ICsyMzEsNyBAQCBFbGVtZW50KiBUcmVlU2NvcGU6OmZpbmRBbmNob3Io
Y29uc3QgU3RyCiAgICAgICAgIHJldHVybiAwOwogICAgIGlmIChFbGVtZW50KiBlbGVtZW50ID0g
Z2V0RWxlbWVudEJ5SWQobmFtZSkpCiAgICAgICAgIHJldHVybiBlbGVtZW50OwotICAgIGZvciAo
Tm9kZSogbm9kZSA9IHJvb3ROb2RlKCk7IG5vZGU7IG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHRO
b2RlKCkpIHsKKyAgICBmb3IgKE5vZGUqIG5vZGUgPSByb290Tm9kZSgpOyBub2RlOyBub2RlID0g
Tm9kZVRyYXZlcnNhbDo6bmV4dChub2RlKSkgewogICAgICAgICBpZiAobm9kZS0+aGFzVGFnTmFt
ZShhVGFnKSkgewogICAgICAgICAgICAgSFRNTEFuY2hvckVsZW1lbnQqIGFuY2hvciA9IHN0YXRp
Y19jYXN0PEhUTUxBbmNob3JFbGVtZW50Kj4obm9kZSk7CiAgICAgICAgICAgICBpZiAocm9vdE5v
ZGUoKS0+ZG9jdW1lbnQoKS0+aW5RdWlya3NNb2RlKCkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2RvbS9UcmVlU2NvcGVBZG9wdGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9k
b20vVHJlZVNjb3BlQWRvcHRlci5jcHAJKHJldmlzaW9uIDEzNjYwNikKKysrIFNvdXJjZS9XZWJD
b3JlL2RvbS9UcmVlU2NvcGVBZG9wdGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjks
NyBAQAogI2luY2x1ZGUgIkVsZW1lbnRSYXJlRGF0YS5oIgogI2luY2x1ZGUgIkVsZW1lbnRTaGFk
b3cuaCIKICNpbmNsdWRlICJOb2RlUmFyZURhdGEuaCIKKyNpbmNsdWRlICJOb2RlVHJhdmVyc2Fs
LmgiCiAjaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKICNpbmNsdWRlICJTaGFkb3dSb290LmgiCiAK
QEAgLTQ4LDcgKzQ5LDcgQEAgdm9pZCBUcmVlU2NvcGVBZG9wdGVyOjptb3ZlVHJlZVRvTmV3U2Nv
cAogICAgIGlmIChvbGREb2N1bWVudCAmJiB3aWxsTW92ZVRvTmV3RG9jdW1lbnQpCiAgICAgICAg
IG9sZERvY3VtZW50LT5pbmNET01UcmVlVmVyc2lvbigpOwogCi0gICAgZm9yIChOb2RlKiBub2Rl
ID0gcm9vdDsgbm9kZTsgbm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUocm9vdCkpIHsKKyAg
ICBmb3IgKE5vZGUqIG5vZGUgPSByb290OyBub2RlOyBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4
dChub2RlLCByb290KSkgewogICAgICAgICBub2RlLT5zZXRUcmVlU2NvcGUobV9uZXdTY29wZSk7
CiAgICAgICAgIGlmIChub2RlLT5oYXNSYXJlRGF0YSgpKSB7CiAgICAgICAgICAgICBOb2RlUmFy
ZURhdGEqIHJhcmVEYXRhID0gbm9kZS0+cmFyZURhdGEoKTsKQEAgLTY5LDcgKzcwLDcgQEAgdm9p
ZCBUcmVlU2NvcGVBZG9wdGVyOjptb3ZlVHJlZVRvTmV3U2NvcAogCiB2b2lkIFRyZWVTY29wZUFk
b3B0ZXI6Om1vdmVUcmVlVG9OZXdEb2N1bWVudChOb2RlKiByb290LCBEb2N1bWVudCogb2xkRG9j
dW1lbnQsIERvY3VtZW50KiBuZXdEb2N1bWVudCkgY29uc3QKIHsKLSAgICBmb3IgKE5vZGUqIG5v
ZGUgPSByb290OyBub2RlOyBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZShyb290KSkgewor
ICAgIGZvciAoTm9kZSogbm9kZSA9IHJvb3Q7IG5vZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpu
ZXh0KG5vZGUsIHJvb3QpKSB7CiAgICAgICAgIG1vdmVOb2RlVG9OZXdEb2N1bWVudChub2RlLCBv
bGREb2N1bWVudCwgbmV3RG9jdW1lbnQpOwogICAgICAgICBmb3IgKFNoYWRvd1Jvb3QqIHNoYWRv
dyA9IG5vZGUtPnlvdW5nZXN0U2hhZG93Um9vdCgpOyBzaGFkb3c7IHNoYWRvdyA9IHNoYWRvdy0+
b2xkZXJTaGFkb3dSb290KCkpCiAgICAgICAgICAgICBtb3ZlVHJlZVRvTmV3RG9jdW1lbnQoc2hh
ZG93LCBvbGREb2N1bWVudCwgbmV3RG9jdW1lbnQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9t
L1RyZWVXYWxrZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9UcmVlV2Fs
a2VyLmNwcAkocmV2aXNpb24gMTM2NjA2KQorKysgU291cmNlL1dlYkNvcmUvZG9tL1RyZWVXYWxr
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiRXhjZXB0
aW9uQ29kZS5oIgogI2luY2x1ZGUgIkNvbnRhaW5lck5vZGUuaCIKICNpbmNsdWRlICJOb2RlRmls
dGVyLmgiCisjaW5jbHVkZSAiTm9kZVRyYXZlcnNhbC5oIgogI2luY2x1ZGUgIlNjcmlwdFN0YXRl
LmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KIApAQCAtMjYzLDcgKzI2NCw3IEBAIENo
aWxkcmVuOgogICAgICAgICBpZiAoYWNjZXB0Tm9kZVJlc3VsdCA9PSBOb2RlRmlsdGVyOjpGSUxU
RVJfUkVKRUNUKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIHdoaWxlIChOb2RlKiBu
ZXh0U2libGluZyA9IG5vZGUtPnRyYXZlcnNlTmV4dFNpYmxpbmcocm9vdCgpKSkgeworICAgIHdo
aWxlIChOb2RlKiBuZXh0U2libGluZyA9IE5vZGVUcmF2ZXJzYWw6Om5leHRTaWJsaW5nKG5vZGUu
Z2V0KCksIHJvb3QoKSkpIHsKICAgICAgICAgbm9kZSA9IG5leHRTaWJsaW5nOwogICAgICAgICBz
aG9ydCBhY2NlcHROb2RlUmVzdWx0ID0gYWNjZXB0Tm9kZShzdGF0ZSwgbm9kZS5nZXQoKSk7CiAg
ICAgICAgIGlmIChzdGF0ZSAmJiBzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcAkocmV2aXNpb24gMTM2NjA2
KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlICJIVE1MSW50ZXJjaGFuZ2UuaCIK
ICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJOb2RlTGlzdC5oIgorI2luY2x1ZGUg
Ik5vZGVUcmF2ZXJzYWwuaCIKICNpbmNsdWRlICJSYW5nZS5oIgogI2luY2x1ZGUgIlJlbmRlck9i
amVjdC5oIgogI2luY2x1ZGUgIlJlbmRlclRleHQuaCIKQEAgLTM1MSwyNiArMzUyLDI2IEBAIHZv
aWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5UmVsYXRpdmVGb24KICAgICAvLyBhbiBhbmNlc3Rv
ciBvZiB0aGUgc3RhcnQgbm9kZSksIHdlIGdhdGhlciBub2RlcyB1cCB0byB0aGUgbmV4dCBzaWJs
aW5nIG9mIHRoZSBlbmQgbm9kZQogICAgIE5vZGUgKmJleW9uZEVuZDsKICAgICBpZiAoc3RhcnQu
ZGVwcmVjYXRlZE5vZGUoKS0+aXNEZXNjZW5kYW50T2YoZW5kLmRlcHJlY2F0ZWROb2RlKCkpKQot
ICAgICAgICBiZXlvbmRFbmQgPSBlbmQuZGVwcmVjYXRlZE5vZGUoKS0+dHJhdmVyc2VOZXh0U2li
bGluZygpOworICAgICAgICBiZXlvbmRFbmQgPSBOb2RlVHJhdmVyc2FsOjpuZXh0U2libGluZyhl
bmQuZGVwcmVjYXRlZE5vZGUoKSk7CiAgICAgZWxzZQotICAgICAgICBiZXlvbmRFbmQgPSBlbmQu
ZGVwcmVjYXRlZE5vZGUoKS0+dHJhdmVyc2VOZXh0Tm9kZSgpOworICAgICAgICBiZXlvbmRFbmQg
PSBOb2RlVHJhdmVyc2FsOjpuZXh0KGVuZC5kZXByZWNhdGVkTm9kZSgpKTsKICAgICAKICAgICBz
dGFydCA9IHN0YXJ0LnVwc3RyZWFtKCk7IC8vIE1vdmUgdXBzdHJlYW0gdG8gZW5zdXJlIHdlIGRv
IG5vdCBhZGQgcmVkdW5kYW50IHNwYW5zLgogICAgIE5vZGUqIHN0YXJ0Tm9kZSA9IHN0YXJ0LmRl
cHJlY2F0ZWROb2RlKCk7CiAgICAgaWYgKHN0YXJ0Tm9kZS0+aXNUZXh0Tm9kZSgpICYmIHN0YXJ0
LmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkgPj0gY2FyZXRNYXhPZmZzZXQoc3RhcnROb2RlKSkg
Ly8gTW92ZSBvdXQgb2YgdGV4dCBub2RlIGlmIHJhbmdlIGRvZXMgbm90IGluY2x1ZGUgaXRzIGNo
YXJhY3RlcnMuCi0gICAgICAgIHN0YXJ0Tm9kZSA9IHN0YXJ0Tm9kZS0+dHJhdmVyc2VOZXh0Tm9k
ZSgpOworICAgICAgICBzdGFydE5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KHN0YXJ0Tm9kZSk7
CiAKICAgICAvLyBTdG9yZSBhd2F5IGZvbnQgc2l6ZSBiZWZvcmUgbWFraW5nIGFueSBjaGFuZ2Vz
IHRvIHRoZSBkb2N1bWVudC4KICAgICAvLyBUaGlzIGVuc3VyZXMgdGhhdCBjaGFuZ2VzIHRvIG9u
ZSBub2RlIHdvbid0IGVmZmVjdCBhbm90aGVyLgogICAgIEhhc2hNYXA8Tm9kZSosIGZsb2F0PiBz
dGFydGluZ0ZvbnRTaXplczsKLSAgICBmb3IgKE5vZGUgKm5vZGUgPSBzdGFydE5vZGU7IG5vZGUg
IT0gYmV5b25kRW5kOyBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgpKQorICAgIGZvciAo
Tm9kZSAqbm9kZSA9IHN0YXJ0Tm9kZTsgbm9kZSAhPSBiZXlvbmRFbmQ7IG5vZGUgPSBOb2RlVHJh
dmVyc2FsOjpuZXh0KG5vZGUpKQogICAgICAgICBzdGFydGluZ0ZvbnRTaXplcy5zZXQobm9kZSwg
Y29tcHV0ZWRGb250U2l6ZShub2RlKSk7CiAKICAgICAvLyBUaGVzZSBzcGFucyB3ZXJlIGFkZGVk
IGJ5IHVzLiBJZiBlbXB0eSBhZnRlciBmb250IHNpemUgY2hhbmdlcywgdGhleSBjYW4gYmUgcmVt
b3ZlZC4KICAgICBWZWN0b3I8UmVmUHRyPEhUTUxFbGVtZW50PiA+IHVuc3R5bGVkU3BhbnM7CiAg
ICAgCiAgICAgTm9kZSogbGFzdFN0eWxlZE5vZGUgPSAwOwotICAgIGZvciAoTm9kZSogbm9kZSA9
IHN0YXJ0Tm9kZTsgbm9kZSAhPSBiZXlvbmRFbmQ7IG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHRO
b2RlKCkpIHsKKyAgICBmb3IgKE5vZGUqIG5vZGUgPSBzdGFydE5vZGU7IG5vZGUgIT0gYmV5b25k
RW5kOyBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dChub2RlKSkgewogICAgICAgICBSZWZQdHI8
SFRNTEVsZW1lbnQ+IGVsZW1lbnQ7CiAgICAgICAgIGlmIChub2RlLT5pc0hUTUxFbGVtZW50KCkp
IHsKICAgICAgICAgICAgIC8vIE9ubHkgd29yayBvbiBmdWxseSBzZWxlY3RlZCBub2Rlcy4KQEAg
LTY3NCwxOSArNjc1LDE5IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmZpeFJhbmdlQW5kQXBw
bHkKICAgICBOb2RlKiBzdGFydE5vZGUgPSBzdGFydC5kZXByZWNhdGVkTm9kZSgpOwogCiAgICAg
aWYgKHN0YXJ0LmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkgPj0gY2FyZXRNYXhPZmZzZXQoc3Rh
cnQuZGVwcmVjYXRlZE5vZGUoKSkpIHsKLSAgICAgICAgc3RhcnROb2RlID0gc3RhcnROb2RlLT50
cmF2ZXJzZU5leHROb2RlKCk7CisgICAgICAgIHN0YXJ0Tm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5l
eHQoc3RhcnROb2RlKTsKICAgICAgICAgaWYgKCFzdGFydE5vZGUgfHwgY29tcGFyZVBvc2l0aW9u
cyhlbmQsIGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9kZShzdGFydE5vZGUpKSA8IDApCiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgTm9kZSogcGFzdEVuZE5vZGUgPSBlbmQuZGVw
cmVjYXRlZE5vZGUoKTsKICAgICBpZiAoZW5kLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkgPj0g
Y2FyZXRNYXhPZmZzZXQoZW5kLmRlcHJlY2F0ZWROb2RlKCkpKQotICAgICAgICBwYXN0RW5kTm9k
ZSA9IGVuZC5kZXByZWNhdGVkTm9kZSgpLT50cmF2ZXJzZU5leHRTaWJsaW5nKCk7CisgICAgICAg
IHBhc3RFbmROb2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dFNpYmxpbmcoZW5kLmRlcHJlY2F0ZWRO
b2RlKCkpOwogCiAgICAgLy8gRklYTUU6IENhbGxlcnMgc2hvdWxkIHBlcmZvcm0gdGhpcyBvcGVy
YXRpb24gb24gYSBSYW5nZSB0aGF0IGluY2x1ZGVzIHRoZSBicgogICAgIC8vIGlmIHRoZXkgd2Fu
dCBzdHlsZSBhcHBsaWVkIHRvIHRoZSBlbXB0eSBsaW5lLgogICAgIGlmIChzdGFydCA9PSBlbmQg
JiYgc3RhcnQuZGVwcmVjYXRlZE5vZGUoKS0+aGFzVGFnTmFtZShiclRhZykpCi0gICAgICAgIHBh
c3RFbmROb2RlID0gc3RhcnQuZGVwcmVjYXRlZE5vZGUoKS0+dHJhdmVyc2VOZXh0Tm9kZSgpOwor
ICAgICAgICBwYXN0RW5kTm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQoc3RhcnQuZGVwcmVjYXRl
ZE5vZGUoKSk7CiAKICAgICAvLyBTdGFydCBmcm9tIHRoZSBoaWdoZXN0IGZ1bGx5IHNlbGVjdGVk
IGFuY2VzdG9yIHNvIHRoYXQgd2UgY2FuIG1vZGlmeSB0aGUgZnVsbHkgc2VsZWN0ZWQgbm9kZS4K
ICAgICAvLyBlLmcuIFdoZW4gYXBwbHlpbmcgZm9udC1zaXplOiBsYXJnZSBvbiA8Zm9udCBjb2xv
cj0iYmx1ZSI+aGVsbG88L2ZvbnQ+LCB3ZSBuZWVkIHRvIGluY2x1ZGUgdGhlIGZvbnQgZWxlbWVu
dCBpbiBvdXIgcnVuCkBAIC03MDYsOCArNzA3LDggQEAgc3RhdGljIGJvb2wgY29udGFpbnNOb25F
ZGl0YWJsZVJlZ2lvbihObwogICAgIGlmICghbm9kZS0+cmVuZGVyZXJJc0VkaXRhYmxlKCkpCiAg
ICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgTm9kZSogc2libGluZyA9IG5vZGUtPnRyYXZlcnNl
TmV4dFNpYmxpbmcoKTsKLSAgICBmb3IgKE5vZGUqIGRlc2NlbmRlbnQgPSBub2RlLT5maXJzdENo
aWxkKCk7IGRlc2NlbmRlbnQgJiYgZGVzY2VuZGVudCAhPSBzaWJsaW5nOyBkZXNjZW5kZW50ID0g
ZGVzY2VuZGVudC0+dHJhdmVyc2VOZXh0Tm9kZSgpKSB7CisgICAgTm9kZSogc2libGluZyA9IE5v
ZGVUcmF2ZXJzYWw6Om5leHRTaWJsaW5nKG5vZGUpOworICAgIGZvciAoTm9kZSogZGVzY2VuZGVu
dCA9IG5vZGUtPmZpcnN0Q2hpbGQoKTsgZGVzY2VuZGVudCAmJiBkZXNjZW5kZW50ICE9IHNpYmxp
bmc7IGRlc2NlbmRlbnQgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KGRlc2NlbmRlbnQpKSB7CiAgICAg
ICAgIGlmICghZGVzY2VuZGVudC0+cmVuZGVyZXJJc0VkaXRhYmxlKCkpCiAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC03MjIsNyArNzIzLDcgQEAgdm9pZCBBcHBseVN0eWxlQ29t
bWFuZDo6YXBwbHlJbmxpbmVTdHlsZQogCiAgICAgUmVmUHRyPE5vZGU+IG5vZGUgPSBzdGFydE5v
ZGU7CiAgICAgZm9yIChSZWZQdHI8Tm9kZT4gbmV4dDsgbm9kZSAmJiBub2RlICE9IHBhc3RFbmRO
b2RlOyBub2RlID0gbmV4dCkgewotICAgICAgICBuZXh0ID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9k
ZSgpOworICAgICAgICBuZXh0ID0gTm9kZVRyYXZlcnNhbDo6bmV4dChub2RlLmdldCgpKTsKIAog
ICAgICAgICBpZiAoIW5vZGUtPnJlbmRlcmVyKCkgfHwgIW5vZGUtPnJlbmRlcmVySXNFZGl0YWJs
ZSgpKQogICAgICAgICAgICAgY29udGludWU7CkBAIC03MzgsNyArNzM5LDcgQEAgdm9pZCBBcHBs
eVN0eWxlQ29tbWFuZDo6YXBwbHlJbmxpbmVTdHlsZQogICAgICAgICAgICAgUmVmUHRyPFN0eWxl
UHJvcGVydHlTZXQ+IGlubGluZVN0eWxlID0gZWxlbWVudC0+ZW5zdXJlTXV0YWJsZUlubGluZVN0
eWxlKCktPmNvcHkoKTsKICAgICAgICAgICAgIGlubGluZVN0eWxlLT5tZXJnZUFuZE92ZXJyaWRl
T25Db25mbGljdChzdHlsZS0+c3R5bGUoKSk7CiAgICAgICAgICAgICBzZXROb2RlQXR0cmlidXRl
KGVsZW1lbnQsIHN0eWxlQXR0ciwgaW5saW5lU3R5bGUtPmFzVGV4dCgpKTsKLSAgICAgICAgICAg
IG5leHQgPSBub2RlLT50cmF2ZXJzZU5leHRTaWJsaW5nKCk7CisgICAgICAgICAgICBuZXh0ID0g
Tm9kZVRyYXZlcnNhbDo6bmV4dFNpYmxpbmcobm9kZS5nZXQoKSk7CiAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgfQogICAgICAgICAKQEAgLTc0OSw3ICs3NTAsNyBAQCB2b2lkIEFwcGx5
U3R5bGVDb21tYW5kOjphcHBseUlubGluZVN0eWxlCiAgICAgICAgICAgICBpZiAobm9kZS0+Y29u
dGFpbnMocGFzdEVuZE5vZGUuZ2V0KCkpIHx8IGNvbnRhaW5zTm9uRWRpdGFibGVSZWdpb24obm9k
ZS5nZXQoKSkgfHwgIW5vZGUtPnBhcmVudE5vZGUoKS0+cmVuZGVyZXJJc0VkaXRhYmxlKCkpCiAg
ICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBpZiAoZWRpdGluZ0lnbm9yZXND
b250ZW50KG5vZGUuZ2V0KCkpKSB7Ci0gICAgICAgICAgICAgICAgbmV4dCA9IG5vZGUtPnRyYXZl
cnNlTmV4dFNpYmxpbmcoKTsKKyAgICAgICAgICAgICAgICBuZXh0ID0gTm9kZVRyYXZlcnNhbDo6
bmV4dFNpYmxpbmcobm9kZS5nZXQoKSk7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KQEAgLTc2Myw3ICs3NjQsNyBAQCB2b2lkIEFwcGx5U3R5bGVD
b21tYW5kOjphcHBseUlubGluZVN0eWxlCiAgICAgICAgICAgICBydW5FbmQgPSBzaWJsaW5nOwog
ICAgICAgICAgICAgc2libGluZyA9IHJ1bkVuZC0+bmV4dFNpYmxpbmcoKTsKICAgICAgICAgfQot
ICAgICAgICBuZXh0ID0gcnVuRW5kLT50cmF2ZXJzZU5leHRTaWJsaW5nKCk7CisgICAgICAgIG5l
eHQgPSBOb2RlVHJhdmVyc2FsOjpuZXh0U2libGluZyhydW5FbmQuZ2V0KCkpOwogCiAgICAgICAg
IGlmICghcmVtb3ZlU3R5bGVGcm9tUnVuQmVmb3JlQXBwbHlpbmdTdHlsZShzdHlsZSwgcnVuU3Rh
cnQsIHJ1bkVuZCkpCiAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTc4MCw5ICs3ODEsOSBAQCBi
b29sIEFwcGx5U3R5bGVDb21tYW5kOjppc1N0eWxlZElubGluZUVsCiBib29sIEFwcGx5U3R5bGVD
b21tYW5kOjpyZW1vdmVTdHlsZUZyb21SdW5CZWZvcmVBcHBseWluZ1N0eWxlKEVkaXRpbmdTdHls
ZSogc3R5bGUsIFJlZlB0cjxOb2RlPiYgcnVuU3RhcnQsIFJlZlB0cjxOb2RlPiYgcnVuRW5kKQog
ewogICAgIEFTU0VSVChydW5TdGFydCAmJiBydW5FbmQgJiYgcnVuU3RhcnQtPnBhcmVudE5vZGUo
KSA9PSBydW5FbmQtPnBhcmVudE5vZGUoKSk7Ci0gICAgUmVmUHRyPE5vZGU+IHBhc3RFbmROb2Rl
ID0gcnVuRW5kLT50cmF2ZXJzZU5leHRTaWJsaW5nKCk7CisgICAgUmVmUHRyPE5vZGU+IHBhc3RF
bmROb2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dFNpYmxpbmcocnVuRW5kLmdldCgpKTsKICAgICBi
b29sIG5lZWRUb0FwcGx5U3R5bGUgPSBmYWxzZTsKLSAgICBmb3IgKE5vZGUqIG5vZGUgPSBydW5T
dGFydC5nZXQoKTsgbm9kZSAmJiBub2RlICE9IHBhc3RFbmROb2RlLmdldCgpOyBub2RlID0gbm9k
ZS0+dHJhdmVyc2VOZXh0Tm9kZSgpKSB7CisgICAgZm9yIChOb2RlKiBub2RlID0gcnVuU3RhcnQu
Z2V0KCk7IG5vZGUgJiYgbm9kZSAhPSBwYXN0RW5kTm9kZS5nZXQoKTsgbm9kZSA9IE5vZGVUcmF2
ZXJzYWw6Om5leHQobm9kZSkpIHsKICAgICAgICAgaWYgKG5vZGUtPmNoaWxkTm9kZUNvdW50KCkp
CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgLy8gV2UgZG9uJ3QgY29uc2lkZXIgbV9p
c0lubGluZUVsZW1lbnRUb1JlbW92ZUZ1bmN0aW9uIGhlcmUgYmVjYXVzZSB3ZSBuZXZlciBhcHBs
eSBzdHlsZSB3aGVuIG1faXNJbmxpbmVFbGVtZW50VG9SZW1vdmVGdW5jdGlvbiBpcyBzcGVjaWZp
ZWQKQEAgLTc5OSw5ICs4MDAsOSBAQCBib29sIEFwcGx5U3R5bGVDb21tYW5kOjpyZW1vdmVTdHls
ZUZyb21SCiAgICAgZm9yIChSZWZQdHI8Tm9kZT4gbm9kZSA9IG5leHQ7IG5vZGUgJiYgbm9kZS0+
aW5Eb2N1bWVudCgpICYmIG5vZGUgIT0gcGFzdEVuZE5vZGU7IG5vZGUgPSBuZXh0KSB7CiAgICAg
ICAgIGlmIChlZGl0aW5nSWdub3Jlc0NvbnRlbnQobm9kZS5nZXQoKSkpIHsKICAgICAgICAgICAg
IEFTU0VSVCghbm9kZS0+Y29udGFpbnMocGFzdEVuZE5vZGUuZ2V0KCkpKTsKLSAgICAgICAgICAg
IG5leHQgPSBub2RlLT50cmF2ZXJzZU5leHRTaWJsaW5nKCk7CisgICAgICAgICAgICBuZXh0ID0g
Tm9kZVRyYXZlcnNhbDo6bmV4dFNpYmxpbmcobm9kZS5nZXQoKSk7CiAgICAgICAgIH0gZWxzZQot
ICAgICAgICAgICAgbmV4dCA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoKTsKKyAgICAgICAgICAg
IG5leHQgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUuZ2V0KCkpOwogICAgICAgICBpZiAoIW5v
ZGUtPmlzSFRNTEVsZW1lbnQoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCkBAIC0xMDU2LDEz
ICsxMDU3LDEzIEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OnJlbW92ZUlubGluZVN0eWwKICAg
ICAgICAgUmVmUHRyPE5vZGU+IG5leHQ7CiAgICAgICAgIGlmIChlZGl0aW5nSWdub3Jlc0NvbnRl
bnQobm9kZSkpIHsKICAgICAgICAgICAgIEFTU0VSVChub2RlID09IGVuZC5kZXByZWNhdGVkTm9k
ZSgpIHx8ICFub2RlLT5jb250YWlucyhlbmQuZGVwcmVjYXRlZE5vZGUoKSkpOwotICAgICAgICAg
ICAgbmV4dCA9IG5vZGUtPnRyYXZlcnNlTmV4dFNpYmxpbmcoKTsKKyAgICAgICAgICAgIG5leHQg
PSBOb2RlVHJhdmVyc2FsOjpuZXh0U2libGluZyhub2RlKTsKICAgICAgICAgfSBlbHNlCi0gICAg
ICAgICAgICBuZXh0ID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgpOworICAgICAgICAgICAgbmV4
dCA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9kZSk7CiAgICAgICAgIGlmIChub2RlLT5pc0hUTUxF
bGVtZW50KCkgJiYgbm9kZUZ1bGx5U2VsZWN0ZWQobm9kZSwgc3RhcnQsIGVuZCkpIHsKICAgICAg
ICAgICAgIFJlZlB0cjxIVE1MRWxlbWVudD4gZWxlbSA9IHRvSFRNTEVsZW1lbnQobm9kZSk7Ci0g
ICAgICAgICAgICBSZWZQdHI8Tm9kZT4gcHJldiA9IGVsZW0tPnRyYXZlcnNlUHJldmlvdXNOb2Rl
UG9zdE9yZGVyKCk7Ci0gICAgICAgICAgICBSZWZQdHI8Tm9kZT4gbmV4dCA9IGVsZW0tPnRyYXZl
cnNlTmV4dE5vZGUoKTsKKyAgICAgICAgICAgIFJlZlB0cjxOb2RlPiBwcmV2ID0gTm9kZVRyYXZl
cnNhbDo6cHJldmlvdXNQb3N0T3JkZXIoZWxlbS5nZXQoKSk7CisgICAgICAgICAgICBSZWZQdHI8
Tm9kZT4gbmV4dCA9IE5vZGVUcmF2ZXJzYWw6Om5leHQoZWxlbS5nZXQoKSk7CiAgICAgICAgICAg
ICBSZWZQdHI8RWRpdGluZ1N0eWxlPiBzdHlsZVRvUHVzaERvd247CiAgICAgICAgICAgICBSZWZQ
dHI8Tm9kZT4gY2hpbGROb2RlOwogICAgICAgICAgICAgaWYgKGlzU3R5bGVkSW5saW5lRWxlbWVu
dFRvUmVtb3ZlKGVsZW0uZ2V0KCkpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Jy
ZWFrQmxvY2txdW90ZUNvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvQnJlYWtCbG9ja3F1b3RlQ29tbWFuZC5jcHAJKHJldmlzaW9uIDEzNjYwNikKKysrIFNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvQnJlYWtCbG9ja3F1b3RlQ29tbWFuZC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCiAjaW5j
bHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiTm9kZVRyYXZlcnNhbC5oIgogI2luY2x1ZGUg
IlJlbmRlckxpc3RJdGVtLmgiCiAjaW5jbHVkZSAiVGV4dC5oIgogI2luY2x1ZGUgIlZpc2libGVQ
b3NpdGlvbi5oIgpAQCAtMTA5LDEzICsxMTAsMTMgQEAgdm9pZCBCcmVha0Jsb2NrcXVvdGVDb21t
YW5kOjpkb0FwcGx5KCkKICAgICBpZiAoc3RhcnROb2RlLT5pc1RleHROb2RlKCkpIHsKICAgICAg
ICAgVGV4dCogdGV4dE5vZGUgPSB0b1RleHQoc3RhcnROb2RlKTsKICAgICAgICAgaWYgKCh1bnNp
Z25lZClwb3MuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSA+PSB0ZXh0Tm9kZS0+bGVuZ3RoKCkp
IHsKLSAgICAgICAgICAgIHN0YXJ0Tm9kZSA9IHN0YXJ0Tm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgp
OworICAgICAgICAgICAgc3RhcnROb2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dChzdGFydE5vZGUp
OwogICAgICAgICAgICAgQVNTRVJUKHN0YXJ0Tm9kZSk7CiAgICAgICAgIH0gZWxzZSBpZiAocG9z
LmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkgPiAwKQogICAgICAgICAgICAgc3BsaXRUZXh0Tm9k
ZSh0ZXh0Tm9kZSwgcG9zLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkpOwogICAgIH0gZWxzZSBp
ZiAocG9zLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkgPiAwKSB7CiAgICAgICAgIE5vZGUqIGNo
aWxkQXRPZmZzZXQgPSBzdGFydE5vZGUtPmNoaWxkTm9kZShwb3MuZGVwcmVjYXRlZEVkaXRpbmdP
ZmZzZXQoKSk7Ci0gICAgICAgIHN0YXJ0Tm9kZSA9IGNoaWxkQXRPZmZzZXQgPyBjaGlsZEF0T2Zm
c2V0IDogc3RhcnROb2RlLT50cmF2ZXJzZU5leHROb2RlKCk7CisgICAgICAgIHN0YXJ0Tm9kZSA9
IGNoaWxkQXRPZmZzZXQgPyBjaGlsZEF0T2Zmc2V0IDogTm9kZVRyYXZlcnNhbDo6bmV4dChzdGFy
dE5vZGUpOwogICAgICAgICBBU1NFUlQoc3RhcnROb2RlKTsKICAgICB9CiAgICAgCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcAkocmV2
aXNpb24gMTM2NjA2KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29t
bWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDYgKzQ1LDcgQEAKICNpbmNsdWRlICJJbnNl
cnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kLmgiCiAjaW5jbHVkZSAiSW5zZXJ0VGV4dENvbW1h
bmQuaCIKICNpbmNsdWRlICJNZXJnZUlkZW50aWNhbEVsZW1lbnRzQ29tbWFuZC5oIgorI2luY2x1
ZGUgIk5vZGVUcmF2ZXJzYWwuaCIKICNpbmNsdWRlICJSYW5nZS5oIgogI2luY2x1ZGUgIlJlbW92
ZUNTU1Byb3BlcnR5Q29tbWFuZC5oIgogI2luY2x1ZGUgIlJlbW92ZU5vZGVDb21tYW5kLmgiCkBA
IC04MDgsNyArODA5LDcgQEAgdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6ZGVsZXRlSW5zaWdu
aQogICAgICAgICByZXR1cm47CiAKICAgICBWZWN0b3I8UmVmUHRyPFRleHQ+ID4gbm9kZXM7Ci0g
ICAgZm9yIChOb2RlKiBub2RlID0gc3RhcnQuZGVwcmVjYXRlZE5vZGUoKTsgbm9kZTsgbm9kZSA9
IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoKSkgeworICAgIGZvciAoTm9kZSogbm9kZSA9IHN0YXJ0
LmRlcHJlY2F0ZWROb2RlKCk7IG5vZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUp
KSB7CiAgICAgICAgIGlmIChub2RlLT5pc1RleHROb2RlKCkpCiAgICAgICAgICAgICBub2Rlcy5h
cHBlbmQodG9UZXh0KG5vZGUpKTsKICAgICAgICAgaWYgKG5vZGUgPT0gZW5kLmRlcHJlY2F0ZWRO
b2RlKCkpCkBAIC0xMDIyLDkgKzEwMjMsOSBAQCB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpj
bG9uZVBhcmFncmFwCiAgICAgICAgIH0KIAogICAgICAgICBOb2RlKiBzdGFydE5vZGUgPSBzdGFy
dC5kZXByZWNhdGVkTm9kZSgpOwotICAgICAgICBmb3IgKE5vZGUqIG5vZGUgPSBzdGFydE5vZGUt
PnRyYXZlcnNlTmV4dFNpYmxpbmcob3V0ZXJOb2RlLmdldCgpKTsgbm9kZTsgbm9kZSA9IG5vZGUt
PnRyYXZlcnNlTmV4dFNpYmxpbmcob3V0ZXJOb2RlLmdldCgpKSkgeworICAgICAgICBmb3IgKE5v
ZGUqIG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0U2libGluZyhzdGFydE5vZGUsIG91dGVyTm9k
ZS5nZXQoKSk7IG5vZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0U2libGluZyhub2RlLCBv
dXRlck5vZGUuZ2V0KCkpKSB7CiAgICAgICAgICAgICAvLyBNb3ZlIGxhc3ROb2RlIHVwIGluIHRo
ZSB0cmVlIGFzIG11Y2ggYXMgbm9kZSB3YXMgbW92ZWQgdXAgaW4gdGhlCi0gICAgICAgICAgICAv
LyB0cmVlIGJ5IHRyYXZlcnNlTmV4dFNpYmxpbmcsIHNvIHRoYXQgdGhlIHJlbGF0aXZlIGRlcHRo
IGJldHdlZW4KKyAgICAgICAgICAgIC8vIHRyZWUgYnkgTm9kZVRyYXZlcnNhbDo6bmV4dFNpYmxp
bmcsIHNvIHRoYXQgdGhlIHJlbGF0aXZlIGRlcHRoIGJldHdlZW4KICAgICAgICAgICAgIC8vIG5v
ZGUgYW5kIHRoZSBvcmlnaW5hbCBzdGFydCBub2RlIGlzIG1haW50YWluZWQgaW4gdGhlIGNsb25l
LgogICAgICAgICAgICAgd2hpbGUgKHN0YXJ0Tm9kZS0+cGFyZW50Tm9kZSgpICE9IG5vZGUtPnBh
cmVudE5vZGUoKSkgewogICAgICAgICAgICAgICAgIHN0YXJ0Tm9kZSA9IHN0YXJ0Tm9kZS0+cGFy
ZW50Tm9kZSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25D
b21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNl
bGVjdGlvbkNvbW1hbmQuY3BwCShyZXZpc2lvbiAxMzY2MDYpCisrKyBTb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2
ICszNyw3IEBACiAjaW5jbHVkZSAiaHRtbGVkaXRpbmcuaCIKICNpbmNsdWRlICJIVE1MSW5wdXRF
bGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiTm9kZVRyYXZlcnNh
bC5oIgogI2luY2x1ZGUgIlJlbmRlclRhYmxlQ2VsbC5oIgogI2luY2x1ZGUgIlRleHQuaCIKICNp
bmNsdWRlICJ2aXNpYmxlX3VuaXRzLmgiCkBAIC0zMjksNyArMzMwLDcgQEAgc3RhdGljIFBvc2l0
aW9uIGZpcnN0RWRpdGFibGVQb3NpdGlvbkluTgogICAgIEFTU0VSVChub2RlKTsKICAgICBOb2Rl
KiBuZXh0ID0gbm9kZTsKICAgICB3aGlsZSAobmV4dCAmJiAhbmV4dC0+cmVuZGVyZXJJc0VkaXRh
YmxlKCkpCi0gICAgICAgIG5leHQgPSBuZXh0LT50cmF2ZXJzZU5leHROb2RlKG5vZGUpOworICAg
ICAgICBuZXh0ID0gTm9kZVRyYXZlcnNhbDo6bmV4dChuZXh0LCBub2RlKTsKICAgICByZXR1cm4g
bmV4dCA/IGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9kZShuZXh0KSA6IFBvc2l0aW9uKCk7CiB9
CiAKQEAgLTQyMSw5ICs0MjIsOSBAQCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6Om1ha2VT
dHlsaW5nCiAgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IG1fc2VsZWN0aW9uVG9EZWxldGUudG9O
b3JtYWxpemVkUmFuZ2UoKTsKICAgICBSZWZQdHI8Tm9kZT4gbm9kZSA9IHJhbmdlLT5maXJzdE5v
ZGUoKTsKICAgICB3aGlsZSAobm9kZSAmJiBub2RlICE9IHJhbmdlLT5wYXN0TGFzdE5vZGUoKSkg
ewotICAgICAgICBSZWZQdHI8Tm9kZT4gbmV4dE5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHROb2Rl
KCk7CisgICAgICAgIFJlZlB0cjxOb2RlPiBuZXh0Tm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQo
bm9kZS5nZXQoKSk7CiAgICAgICAgIGlmICgobm9kZS0+aGFzVGFnTmFtZShzdHlsZVRhZykgJiYg
ISh0b0VsZW1lbnQobm9kZS5nZXQoKSktPmhhc0F0dHJpYnV0ZShzY29wZWRBdHRyKSkpIHx8IG5v
ZGUtPmhhc1RhZ05hbWUobGlua1RhZykpIHsKLSAgICAgICAgICAgIG5leHROb2RlID0gbm9kZS0+
dHJhdmVyc2VOZXh0U2libGluZygpOworICAgICAgICAgICAgbmV4dE5vZGUgPSBOb2RlVHJhdmVy
c2FsOjpuZXh0U2libGluZyhub2RlLmdldCgpKTsKICAgICAgICAgICAgIFJlZlB0cjxDb250YWlu
ZXJOb2RlPiByb290RWRpdGFibGVFbGVtZW50ID0gbm9kZS0+cm9vdEVkaXRhYmxlRWxlbWVudCgp
OwogICAgICAgICAgICAgcmVtb3ZlTm9kZShub2RlKTsKICAgICAgICAgICAgIGFwcGVuZE5vZGUo
bm9kZSwgcm9vdEVkaXRhYmxlRWxlbWVudCk7CkBAIC00NDUsNyArNDQ2LDcgQEAgdm9pZCBEZWxl
dGVTZWxlY3Rpb25Db21tYW5kOjpoYW5kbGVHZW5lcgogICAgIC8vIE5ldmVyIHJlbW92ZSB0aGUg
c3RhcnQgYmxvY2sgdW5sZXNzIGl0J3MgYSB0YWJsZSwgaW4gd2hpY2ggY2FzZSB3ZSB3b24ndCBt
ZXJnZSBjb250ZW50IGluLgogICAgIGlmIChzdGFydE5vZGUgPT0gbV9zdGFydEJsb2NrICYmIHN0
YXJ0T2Zmc2V0ID09IDAgJiYgY2FuSGF2ZUNoaWxkcmVuRm9yRWRpdGluZyhzdGFydE5vZGUpICYm
ICFzdGFydE5vZGUtPmhhc1RhZ05hbWUodGFibGVUYWcpKSB7CiAgICAgICAgIHN0YXJ0T2Zmc2V0
ID0gMDsKLSAgICAgICAgc3RhcnROb2RlID0gc3RhcnROb2RlLT50cmF2ZXJzZU5leHROb2RlKCk7
CisgICAgICAgIHN0YXJ0Tm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQoc3RhcnROb2RlKTsKICAg
ICAgICAgaWYgKCFzdGFydE5vZGUpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtNDU3
LDcgKzQ1OCw3IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6aGFuZGxlR2VuZXIKICAg
ICB9CiAKICAgICBpZiAoc3RhcnRPZmZzZXQgPj0gbGFzdE9mZnNldEZvckVkaXRpbmcoc3RhcnRO
b2RlKSkgewotICAgICAgICBzdGFydE5vZGUgPSBzdGFydE5vZGUtPnRyYXZlcnNlTmV4dFNpYmxp
bmcoKTsKKyAgICAgICAgc3RhcnROb2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dFNpYmxpbmcoc3Rh
cnROb2RlKTsKICAgICAgICAgc3RhcnRPZmZzZXQgPSAwOwogICAgIH0KIApAQCAtNDkxLDcgKzQ5
Miw3IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6aGFuZGxlR2VuZXIKICAgICAgICAg
ICAgICAgICAvLyBpbiBhIHRleHQgbm9kZSB0aGF0IG5lZWRzIHRvIGJlIHRyaW1tZWQKICAgICAg
ICAgICAgICAgICBUZXh0KiB0ZXh0ID0gdG9UZXh0KG5vZGUuZ2V0KCkpOwogICAgICAgICAgICAg
ICAgIGRlbGV0ZVRleHRGcm9tTm9kZSh0ZXh0LCBzdGFydE9mZnNldCwgdGV4dC0+bGVuZ3RoKCkg
LSBzdGFydE9mZnNldCk7Ci0gICAgICAgICAgICAgICAgbm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4
dE5vZGUoKTsKKyAgICAgICAgICAgICAgICBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dChub2Rl
LmdldCgpKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgbm9kZSA9IHN0
YXJ0Tm9kZS0+Y2hpbGROb2RlKHN0YXJ0T2Zmc2V0KTsKICAgICAgICAgICAgIH0KQEAgLTUwMywx
MCArNTA0LDEwIEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6aGFuZGxlR2VuZXIKICAg
ICAgICAgLy8gaGFuZGxlIGRlbGV0aW5nIGFsbCBub2RlcyB0aGF0IGFyZSBjb21wbGV0ZWx5IHNl
bGVjdGVkCiAgICAgICAgIHdoaWxlIChub2RlICYmIG5vZGUgIT0gbV9kb3duc3RyZWFtRW5kLmRl
cHJlY2F0ZWROb2RlKCkpIHsKICAgICAgICAgICAgIGlmIChjb21wYXJlUG9zaXRpb25zKGZpcnN0
UG9zaXRpb25Jbk9yQmVmb3JlTm9kZShub2RlLmdldCgpKSwgbV9kb3duc3RyZWFtRW5kKSA+PSAw
KSB7Ci0gICAgICAgICAgICAgICAgLy8gdHJhdmVyc2VOZXh0U2libGluZyBqdXN0IGJsZXcgcGFz
dCB0aGUgZW5kIHBvc2l0aW9uLCBzbyBzdG9wIGRlbGV0aW5nCisgICAgICAgICAgICAgICAgLy8g
Tm9kZVRyYXZlcnNhbDo6bmV4dFNpYmxpbmcganVzdCBibGV3IHBhc3QgdGhlIGVuZCBwb3NpdGlv
biwgc28gc3RvcCBkZWxldGluZwogICAgICAgICAgICAgICAgIG5vZGUgPSAwOwogICAgICAgICAg
ICAgfSBlbHNlIGlmICghbV9kb3duc3RyZWFtRW5kLmRlcHJlY2F0ZWROb2RlKCktPmlzRGVzY2Vu
ZGFudE9mKG5vZGUuZ2V0KCkpKSB7Ci0gICAgICAgICAgICAgICAgUmVmUHRyPE5vZGU+IG5leHRO
b2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0U2libGluZygpOworICAgICAgICAgICAgICAgIFJlZlB0
cjxOb2RlPiBuZXh0Tm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHRTaWJsaW5nKG5vZGUuZ2V0KCkp
OwogICAgICAgICAgICAgICAgIC8vIGlmIHdlIGp1c3QgcmVtb3ZlZCBhIG5vZGUgZnJvbSB0aGUg
ZW5kIGNvbnRhaW5lciwgdXBkYXRlIGVuZCBwb3NpdGlvbiBzbyB0aGUKICAgICAgICAgICAgICAg
ICAvLyBjaGVjayBhYm92ZSB3aWxsIHdvcmsKICAgICAgICAgICAgICAgICB1cGRhdGVQb3NpdGlv
bkZvck5vZGVSZW1vdmFsKG1fZG93bnN0cmVhbUVuZCwgbm9kZS5nZXQoKSk7CkBAIC01MTgsNyAr
NTE5LDcgQEAgdm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpoYW5kbGVHZW5lcgogICAgICAg
ICAgICAgICAgICAgICByZW1vdmVOb2RlKG5vZGUuZ2V0KCkpOwogICAgICAgICAgICAgICAgICAg
ICBub2RlID0gMDsKICAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAg
bm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoKTsKKyAgICAgICAgICAgICAgICAgICAgbm9k
ZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9kZS5nZXQoKSk7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KICAgICAgICAgCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRDb21tYW5k
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRDb21tYW5kLmNw
cAkocmV2aXNpb24gMTM2NjA2KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0Q29tbWFu
ZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJFdmVudE5h
bWVzLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZVNlbGVjdGlvbi5oIgor
I2luY2x1ZGUgIk5vZGVUcmF2ZXJzYWwuaCIKICNpbmNsdWRlICJWaXNpYmxlUG9zaXRpb24uaCIK
ICNpbmNsdWRlICJodG1sZWRpdGluZy5oIgogCkBAIC0xMTgsNyArMTE5LDcgQEAgdm9pZCBTaW1w
bGVFZGl0Q29tbWFuZDo6ZG9SZWFwcGx5KCkKICNpZm5kZWYgTkRFQlVHCiB2b2lkIFNpbXBsZUVk
aXRDb21tYW5kOjphZGROb2RlQW5kRGVzY2VuZGFudHMoTm9kZSogc3RhcnROb2RlLCBIYXNoU2V0
PE5vZGUqPiYgbm9kZXMpCiB7Ci0gICAgZm9yIChOb2RlKiBub2RlID0gc3RhcnROb2RlOyBub2Rl
OyBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZShzdGFydE5vZGUpKQorICAgIGZvciAoTm9k
ZSogbm9kZSA9IHN0YXJ0Tm9kZTsgbm9kZTsgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9k
ZSwgc3RhcnROb2RlKSkKICAgICAgICAgbm9kZXMuYWRkKG5vZGUpOwogfQogI2VuZGlmCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwCShyZXZpc2lvbiAxMzY2MDYp
CisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQwLDYgKzQwLDcgQEAKICNpbmNsdWRlICJIVE1MSW50ZXJjaGFuZ2UuaCIKICNpbmNs
dWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJOb2RlLmgiCisjaW5jbHVkZSAiTm9kZVRyYXZl
cnNhbC5oIgogI2luY2x1ZGUgIlBvc2l0aW9uLmgiCiAjaW5jbHVkZSAiUXVhbGlmaWVkTmFtZS5o
IgogI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCkBAIC02ODEsNyArNjgyLDcgQEAgVHJpU3RhdGUg
RWRpdGluZ1N0eWxlOjp0cmlTdGF0ZU9mU3R5bGUoYwogICAgICAgICByZXR1cm4gdHJpU3RhdGVP
ZlN0eWxlKEVkaXRpbmdTdHlsZTo6c3R5bGVBdFNlbGVjdGlvblN0YXJ0KHNlbGVjdGlvbikuZ2V0
KCkpOwogCiAgICAgVHJpU3RhdGUgc3RhdGUgPSBGYWxzZVRyaVN0YXRlOwotICAgIGZvciAoTm9k
ZSogbm9kZSA9IHNlbGVjdGlvbi5zdGFydCgpLmRlcHJlY2F0ZWROb2RlKCk7IG5vZGU7IG5vZGUg
PSBub2RlLT50cmF2ZXJzZU5leHROb2RlKCkpIHsKKyAgICBmb3IgKE5vZGUqIG5vZGUgPSBzZWxl
Y3Rpb24uc3RhcnQoKS5kZXByZWNhdGVkTm9kZSgpOyBub2RlOyBub2RlID0gTm9kZVRyYXZlcnNh
bDo6bmV4dChub2RlKSkgewogICAgICAgICBSZWZQdHI8Q1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0
aW9uPiBub2RlU3R5bGUgPSBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb246OmNyZWF0ZShub2Rl
KTsKICAgICAgICAgaWYgKG5vZGVTdHlsZSkgewogICAgICAgICAgICAgVHJpU3RhdGUgbm9kZVN0
YXRlID0gdHJpU3RhdGVPZlN0eWxlKG5vZGVTdHlsZS5nZXQoKSwgbm9kZS0+aXNUZXh0Tm9kZSgp
ID8gRWRpdGluZ1N0eWxlOjpEb05vdElnbm9yZVRleHRPbmx5UHJvcGVydGllcyA6IEVkaXRpbmdT
dHlsZTo6SWdub3JlVGV4dE9ubHlQcm9wZXJ0aWVzKTsKQEAgLTEyNDgsNyArMTI0OSw3IEBAIFdy
aXRpbmdEaXJlY3Rpb24gRWRpdGluZ1N0eWxlOjp0ZXh0RGlyZWMKICAgICAgICAgZW5kID0gc2Vs
ZWN0aW9uLmVuZCgpLnVwc3RyZWFtKCk7CiAKICAgICAgICAgTm9kZSogcGFzdExhc3QgPSBSYW5n
ZTo6Y3JlYXRlKGVuZC5kb2N1bWVudCgpLCBwb3NpdGlvbi5wYXJlbnRBbmNob3JlZEVxdWl2YWxl
bnQoKSwgZW5kLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpKS0+cGFzdExhc3ROb2RlKCk7Ci0g
ICAgICAgIGZvciAoTm9kZSogbiA9IG5vZGU7IG4gJiYgbiAhPSBwYXN0TGFzdDsgbiA9IG4tPnRy
YXZlcnNlTmV4dE5vZGUoKSkgeworICAgICAgICBmb3IgKE5vZGUqIG4gPSBub2RlOyBuICYmIG4g
IT0gcGFzdExhc3Q7IG4gPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG4pKSB7CiAgICAgICAgICAgICBp
ZiAoIW4tPmlzU3R5bGVkRWxlbWVudCgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCShyZXZpc2lvbiAxMzY2MDYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYyLDYgKzYy
LDcgQEAKICNpbmNsdWRlICJLaWxsUmluZy5oIgogI2luY2x1ZGUgIk1vZGlmeVNlbGVjdGlvbkxp
c3RMZXZlbC5oIgogI2luY2x1ZGUgIk5vZGVMaXN0LmgiCisjaW5jbHVkZSAiTm9kZVRyYXZlcnNh
bC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQYXN0ZWJvYXJkLmgiCiAjaW5jbHVk
ZSAiUmVtb3ZlRm9ybWF0Q29tbWFuZC5oIgpAQCAtMTA2NywxMiArMTA2OCwxMiBAQCB2b2lkIEVk
aXRvcjo6c2ltcGxpZnlNYXJrdXAoTm9kZSogc3RhcnROCiAgICAgICAgIC8vIGNoZWNrIGlmIHN0
YXJ0IG5vZGUgaXMgYmVmb3JlIGVuZE5vZGUKICAgICAgICAgTm9kZSogbm9kZSA9IHN0YXJ0Tm9k
ZTsKICAgICAgICAgd2hpbGUgKG5vZGUgJiYgbm9kZSAhPSBlbmROb2RlKQotICAgICAgICAgICAg
bm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoKTsKKyAgICAgICAgICAgIG5vZGUgPSBOb2Rl
VHJhdmVyc2FsOjpuZXh0KG5vZGUpOwogICAgICAgICBpZiAoIW5vZGUpCiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgfQogICAgIAotICAgIGFwcGx5Q29tbWFuZChTaW1wbGlmeU1hcmt1cENvbW1h
bmQ6OmNyZWF0ZShtX2ZyYW1lLT5kb2N1bWVudCgpLCBzdGFydE5vZGUsIChlbmROb2RlKSA/IGVu
ZE5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoKSA6IDApKTsKKyAgICBhcHBseUNvbW1hbmQoU2ltcGxp
ZnlNYXJrdXBDb21tYW5kOjpjcmVhdGUobV9mcmFtZS0+ZG9jdW1lbnQoKSwgc3RhcnROb2RlLCAo
ZW5kTm9kZSkgPyBOb2RlVHJhdmVyc2FsOjpuZXh0KGVuZE5vZGUpIDogMCkpOwogfQogCiB2b2lk
IEVkaXRvcjo6Y29weVVSTChjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgdGl0bGUpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcAkocmV2aXNpb24g
MTM2NjA2KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDcgQEAKICNpbmNsdWRlICJIaXRUZXN0UmVxdWVzdC5o
IgogI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKICNpbmNsdWRlICJJbmxpbmVUZXh0Qm94Lmgi
CisjaW5jbHVkZSAiTm9kZVRyYXZlcnNhbC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRl
ICJSYW5nZS5oIgogI2luY2x1ZGUgIlJlbmRlclRleHQuaCIKQEAgLTE5NTIsNyArMTk1Myw3IEBA
IHZvaWQgRnJhbWVTZWxlY3Rpb246OmdldENsaXBwZWRWaXNpYmxlVGUKIC8vIFNjYW5zIGxvZ2lj
YWxseSBmb3J3YXJkIGZyb20gInN0YXJ0IiwgaW5jbHVkaW5nIGFueSBjaGlsZCBmcmFtZXMuCiBz
dGF0aWMgSFRNTEZvcm1FbGVtZW50KiBzY2FuRm9yRm9ybShOb2RlKiBzdGFydCkKIHsKLSAgICBm
b3IgKE5vZGUqIG5vZGUgPSBzdGFydDsgbm9kZTsgbm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5v
ZGUoKSkgeworICAgIGZvciAoTm9kZSogbm9kZSA9IHN0YXJ0OyBub2RlOyBub2RlID0gTm9kZVRy
YXZlcnNhbDo6bmV4dChub2RlKSkgewogICAgICAgICBpZiAobm9kZS0+aGFzVGFnTmFtZShmb3Jt
VGFnKSkKICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MRm9ybUVsZW1lbnQqPihu
b2RlKTsKICAgICAgICAgaWYgKG5vZGUtPmlzSFRNTEVsZW1lbnQoKSAmJiB0b0hUTUxFbGVtZW50
KG5vZGUpLT5pc0Zvcm1Db250cm9sRWxlbWVudCgpKQpAQCAtMjAyNSw3ICsyMDI2LDcgQEAgdm9p
ZCBGcmFtZVNlbGVjdGlvbjo6c2V0U2VsZWN0aW9uRnJvbU5vbgogCiAgICAgTm9kZSogbm9kZSA9
IGRvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQoKTsKICAgICB3aGlsZSAobm9kZSAmJiAhbm9kZS0+
aGFzVGFnTmFtZShib2R5VGFnKSkKLSAgICAgICAgbm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5v
ZGUoKTsKKyAgICAgICAgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9kZSk7CiAgICAgaWYg
KG5vZGUpCiAgICAgICAgIHNldFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKGZpcnN0UG9zaXRp
b25Jbk9yQmVmb3JlTm9kZShub2RlKSwgRE9XTlNUUkVBTSkpOwogfQpJbmRleDogU291cmNlL1dl
YkNvcmUvZWRpdGluZy9JbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydFBhcmFncmFwaFNlcGFyYXRvckNv
bW1hbmQuY3BwCShyZXZpc2lvbiAxMzY2MDYpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0lu
c2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2
ICszMiw3IEBACiAjaW5jbHVkZSAiSFRNTEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMu
aCIKICNpbmNsdWRlICJJbnNlcnRMaW5lQnJlYWtDb21tYW5kLmgiCisjaW5jbHVkZSAiTm9kZVRy
YXZlcnNhbC5oIgogI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgogI2luY2x1ZGUgIlRleHQuaCIK
ICNpbmNsdWRlICJodG1sZWRpdGluZy5oIgpAQCAtMzY2LDcgKzM2Nyw3IEBAIHZvaWQgSW5zZXJ0
UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZDo6ZG8KICAgICAgICAgZWxzZSB7CiAgICAgICAgICAg
ICBOb2RlKiBzcGxpdFRvID0gaW5zZXJ0aW9uUG9zaXRpb24uY29udGFpbmVyTm9kZSgpOwogICAg
ICAgICAgICAgaWYgKHNwbGl0VG8tPmlzVGV4dE5vZGUoKSAmJiBpbnNlcnRpb25Qb3NpdGlvbi5v
ZmZzZXRJbkNvbnRhaW5lck5vZGUoKSA+PSBjYXJldE1heE9mZnNldChzcGxpdFRvKSkKLSAgICAg
ICAgICAgICAgc3BsaXRUbyA9IHNwbGl0VG8tPnRyYXZlcnNlTmV4dE5vZGUoc3RhcnRCbG9jay5n
ZXQoKSk7CisgICAgICAgICAgICAgICAgc3BsaXRUbyA9IE5vZGVUcmF2ZXJzYWw6Om5leHQoc3Bs
aXRUbywgc3RhcnRCbG9jay5nZXQoKSk7CiAgICAgICAgICAgICBBU1NFUlQoc3BsaXRUbyk7CiAg
ICAgICAgICAgICBzcGxpdFRyZWVUb05vZGUoc3BsaXRUbywgc3RhcnRCbG9jay5nZXQoKSk7CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNv
bW1hbmQuY3BwCShyZXZpc2lvbiAxMzY2MDYpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Jl
cGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsNiArNDUsNyBA
QAogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIk5vZGVMaXN0LmgiCiAjaW5jbHVk
ZSAiTm9kZVJlbmRlclN0eWxlLmgiCisjaW5jbHVkZSAiTm9kZVRyYXZlcnNhbC5oIgogI2luY2x1
ZGUgIlJlbmRlcklubGluZS5oIgogI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgogI2luY2x1ZGUg
IlJlbmRlclRleHQuaCIKQEAgLTI4OSw3ICsyOTAsNyBAQCB2b2lkIFJlcGxhY2VtZW50RnJhZ21l
bnQ6OnJlbW92ZVVucmVuZGVyCiB7CiAgICAgVmVjdG9yPFJlZlB0cjxOb2RlPiA+IHVucmVuZGVy
ZWQ7CiAKLSAgICBmb3IgKE5vZGUqIG5vZGUgPSBob2xkZXItPmZpcnN0Q2hpbGQoKTsgbm9kZTsg
bm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoaG9sZGVyKSkKKyAgICBmb3IgKE5vZGUqIG5v
ZGUgPSBob2xkZXItPmZpcnN0Q2hpbGQoKTsgbm9kZTsgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5l
eHQobm9kZSwgaG9sZGVyKSkKICAgICAgICAgaWYgKCFpc05vZGVSZW5kZXJlZChub2RlKSAmJiAh
aXNUYWJsZVN0cnVjdHVyZU5vZGUobm9kZSkpCiAgICAgICAgICAgICB1bnJlbmRlcmVkLmFwcGVu
ZChub2RlKTsKIApAQCAtMzMwLDkgKzMzMSw5IEBAIHZvaWQgUmVwbGFjZW1lbnRGcmFnbWVudDo6
cmVtb3ZlSW50ZXJjaGEKICAgICAKICAgICBub2RlID0gY29udGFpbmVyLT5maXJzdENoaWxkKCk7
CiAgICAgd2hpbGUgKG5vZGUpIHsKLSAgICAgICAgUmVmUHRyPE5vZGU+IG5leHQgPSBub2RlLT50
cmF2ZXJzZU5leHROb2RlKCk7CisgICAgICAgIFJlZlB0cjxOb2RlPiBuZXh0ID0gTm9kZVRyYXZl
cnNhbDo6bmV4dChub2RlKTsKICAgICAgICAgaWYgKGlzSW50ZXJjaGFuZ2VDb252ZXJ0ZWRTcGFj
ZVNwYW4obm9kZSkpIHsKLSAgICAgICAgICAgIG5leHQgPSBub2RlLT50cmF2ZXJzZU5leHRTaWJs
aW5nKCk7CisgICAgICAgICAgICBuZXh0ID0gTm9kZVRyYXZlcnNhbDo6bmV4dFNpYmxpbmcobm9k
ZSk7CiAgICAgICAgICAgICByZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuKG5vZGUpOwogICAg
ICAgICB9CiAgICAgICAgIG5vZGUgPSBuZXh0LmdldCgpOwpAQCAtMzUzLDkgKzM1NCw5IEBAIGlu
bGluZSB2b2lkIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpJbnMKIGlubGluZSB2b2lkIFJlcGxh
Y2VTZWxlY3Rpb25Db21tYW5kOjpJbnNlcnRlZE5vZGVzOjp3aWxsUmVtb3ZlTm9kZVByZXNlcnZp
bmdDaGlsZHJlbihOb2RlKiBub2RlKQogewogICAgIGlmIChtX2ZpcnN0Tm9kZUluc2VydGVkID09
IG5vZGUpCi0gICAgICAgIG1fZmlyc3ROb2RlSW5zZXJ0ZWQgPSBub2RlLT50cmF2ZXJzZU5leHRO
b2RlKCk7CisgICAgICAgIG1fZmlyc3ROb2RlSW5zZXJ0ZWQgPSBOb2RlVHJhdmVyc2FsOjpuZXh0
KG5vZGUpOwogICAgIGlmIChtX2xhc3ROb2RlSW5zZXJ0ZWQgPT0gbm9kZSkKLSAgICAgICAgbV9s
YXN0Tm9kZUluc2VydGVkID0gbm9kZS0+bGFzdENoaWxkKCkgPyBub2RlLT5sYXN0Q2hpbGQoKSA6
IG5vZGUtPnRyYXZlcnNlTmV4dFNpYmxpbmcoKTsKKyAgICAgICAgbV9sYXN0Tm9kZUluc2VydGVk
ID0gbm9kZS0+bGFzdENoaWxkKCkgPyBub2RlLT5sYXN0Q2hpbGQoKSA6IE5vZGVUcmF2ZXJzYWw6
Om5leHRTaWJsaW5nKG5vZGUpOwogfQogCiBpbmxpbmUgdm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29t
bWFuZDo6SW5zZXJ0ZWROb2Rlczo6d2lsbFJlbW92ZU5vZGUoTm9kZSogbm9kZSkKQEAgLTM2NCw5
ICszNjUsOSBAQCBpbmxpbmUgdm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6SW5zCiAgICAg
ICAgIG1fZmlyc3ROb2RlSW5zZXJ0ZWQgPSAwOwogICAgICAgICBtX2xhc3ROb2RlSW5zZXJ0ZWQg
PSAwOwogICAgIH0gZWxzZSBpZiAobV9maXJzdE5vZGVJbnNlcnRlZCA9PSBub2RlKQotICAgICAg
ICBtX2ZpcnN0Tm9kZUluc2VydGVkID0gbV9maXJzdE5vZGVJbnNlcnRlZC0+dHJhdmVyc2VOZXh0
U2libGluZygpOworICAgICAgICBtX2ZpcnN0Tm9kZUluc2VydGVkID0gTm9kZVRyYXZlcnNhbDo6
bmV4dFNpYmxpbmcobV9maXJzdE5vZGVJbnNlcnRlZC5nZXQoKSk7CiAgICAgZWxzZSBpZiAobV9s
YXN0Tm9kZUluc2VydGVkID09IG5vZGUpCi0gICAgICAgIG1fbGFzdE5vZGVJbnNlcnRlZCA9IG1f
bGFzdE5vZGVJbnNlcnRlZC0+dHJhdmVyc2VQcmV2aW91c1NpYmxpbmcoKTsKKyAgICAgICAgbV9s
YXN0Tm9kZUluc2VydGVkID0gTm9kZVRyYXZlcnNhbDo6cHJldmlvdXNTaWJsaW5nKG1fbGFzdE5v
ZGVJbnNlcnRlZC5nZXQoKSk7CiB9CiAKIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpSZXBsYWNl
U2VsZWN0aW9uQ29tbWFuZChEb2N1bWVudCogZG9jdW1lbnQsIFBhc3NSZWZQdHI8RG9jdW1lbnRG
cmFnbWVudD4gZnJhZ21lbnQsIENvbW1hbmRPcHRpb25zIG9wdGlvbnMsIEVkaXRBY3Rpb24gZWRp
dEFjdGlvbikKQEAgLTQ4MCw3ICs0ODEsNyBAQCB2b2lkIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5k
OjpyZW1vdmVSZWR1CiAgICAgZm9yIChSZWZQdHI8Tm9kZT4gbm9kZSA9IGluc2VydGVkTm9kZXMu
Zmlyc3ROb2RlSW5zZXJ0ZWQoKTsgbm9kZSAmJiBub2RlICE9IHBhc3RFbmROb2RlOyBub2RlID0g
bmV4dCkgewogICAgICAgICAvLyBGSVhNRTogPHJkYXI6Ly9wcm9ibGVtLzUzNzE1MzY+IFN0eWxl
IHJ1bGVzIHRoYXQgbWF0Y2ggcGFzdGVkIGNvbnRlbnQgY2FuIGNoYW5nZSBpdCdzIGFwcGVhcmFu
Y2UKIAotICAgICAgICBuZXh0ID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgpOworICAgICAgICBu
ZXh0ID0gTm9kZVRyYXZlcnNhbDo6bmV4dChub2RlLmdldCgpKTsKICAgICAgICAgaWYgKCFub2Rl
LT5pc1N0eWxlZEVsZW1lbnQoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCkBAIC01OTUsMTAg
KzU5NiwxMCBAQCBzdGF0aWMgdm9pZCByZW1vdmVIZWFkQ29udGVudHMoUmVwbGFjZW1lCiAgICAg
ICAgICAgICB8fCBub2RlLT5oYXNUYWdOYW1lKG1ldGFUYWcpCiAgICAgICAgICAgICB8fCBub2Rl
LT5oYXNUYWdOYW1lKHN0eWxlVGFnKQogICAgICAgICAgICAgfHwgbm9kZS0+aGFzVGFnTmFtZSh0
aXRsZVRhZykpIHsKLSAgICAgICAgICAgIG5leHQgPSBub2RlLT50cmF2ZXJzZU5leHRTaWJsaW5n
KCk7CisgICAgICAgICAgICBuZXh0ID0gTm9kZVRyYXZlcnNhbDo6bmV4dFNpYmxpbmcobm9kZSk7
CiAgICAgICAgICAgICBmcmFnbWVudC5yZW1vdmVOb2RlKG5vZGUpOwogICAgICAgICB9IGVsc2UK
LSAgICAgICAgICAgIG5leHQgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKCk7CisgICAgICAgICAg
ICBuZXh0ID0gTm9kZVRyYXZlcnNhbDo6bmV4dChub2RlKTsKICAgICB9CiB9CiAKQEAgLTY0NSw3
ICs2NDYsNyBAQCB2b2lkIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpoYW5kbGVTdHlsCiAgICAg
Ly8gVGhlIHN0eWxlIHNwYW4gdGhhdCBjb250YWlucyB0aGUgc291cmNlIGRvY3VtZW50J3MgZGVm
YXVsdCBzdHlsZSBzaG91bGQgYmUgYXQKICAgICAvLyB0aGUgdG9wIG9mIHRoZSBmcmFnbWVudCwg
YnV0IE1haWwgc29tZXRpbWVzIGFkZHMgYSB3cmFwcGVyIChmb3IgUGFzdGUgQXMgUXVvdGF0aW9u
KSwKICAgICAvLyBzbyBzZWFyY2ggZm9yIHRoZSB0b3AgbGV2ZWwgc3R5bGUgc3BhbiBpbnN0ZWFk
IG9mIGFzc3VtaW5nIGl0J3MgYXQgdGhlIHRvcC4KLSAgICBmb3IgKE5vZGUqIG5vZGUgPSBpbnNl
cnRlZE5vZGVzLmZpcnN0Tm9kZUluc2VydGVkKCk7IG5vZGU7IG5vZGUgPSBub2RlLT50cmF2ZXJz
ZU5leHROb2RlKCkpIHsKKyAgICBmb3IgKE5vZGUqIG5vZGUgPSBpbnNlcnRlZE5vZGVzLmZpcnN0
Tm9kZUluc2VydGVkKCk7IG5vZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUpKSB7
CiAgICAgICAgIGlmIChpc0xlZ2FjeUFwcGxlU3R5bGVTcGFuKG5vZGUpKSB7CiAgICAgICAgICAg
ICB3cmFwcGluZ1N0eWxlU3BhbiA9IHRvSFRNTEVsZW1lbnQobm9kZSk7CiAgICAgICAgICAgICBi
cmVhazsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1h
bmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rp
b25Db21tYW5kLmgJKHJldmlzaW9uIDEzNjYwNikKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBA
QAogI2RlZmluZSBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZF9oCiAKICNpbmNsdWRlICJDb21wb3Np
dGVFZGl0Q29tbWFuZC5oIgorI2luY2x1ZGUgIk5vZGVUcmF2ZXJzYWwuaCIKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCkBAIC02NSw3ICs2Niw3IEBAIHByaXZhdGU6CiAKICAgICAgICAgTm9kZSog
Zmlyc3ROb2RlSW5zZXJ0ZWQoKSBjb25zdCB7IHJldHVybiBtX2ZpcnN0Tm9kZUluc2VydGVkLmdl
dCgpOyB9CiAgICAgICAgIE5vZGUqIGxhc3RMZWFmSW5zZXJ0ZWQoKSBjb25zdCB7IHJldHVybiBt
X2xhc3ROb2RlSW5zZXJ0ZWQtPmxhc3REZXNjZW5kYW50KCk7IH0KLSAgICAgICAgTm9kZSogcGFz
dExhc3RMZWFmKCkgY29uc3QgeyByZXR1cm4gbV9sYXN0Tm9kZUluc2VydGVkID8gbGFzdExlYWZJ
bnNlcnRlZCgpLT50cmF2ZXJzZU5leHROb2RlKCkgOiAwOyB9CisgICAgICAgIE5vZGUqIHBhc3RM
YXN0TGVhZigpIGNvbnN0IHsgcmV0dXJuIG1fbGFzdE5vZGVJbnNlcnRlZCA/IE5vZGVUcmF2ZXJz
YWw6Om5leHQobGFzdExlYWZJbnNlcnRlZCgpKSA6IDA7IH0KIAogICAgIHByaXZhdGU6CiAgICAg
ICAgIFJlZlB0cjxOb2RlPiBtX2ZpcnN0Tm9kZUluc2VydGVkOwpJbmRleDogU291cmNlL1dlYkNv
cmUvZWRpdGluZy9TaW1wbGlmeU1hcmt1cENvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvU2ltcGxpZnlNYXJrdXBDb21tYW5kLmNwcAkocmV2aXNpb24gMTM2
NjA2KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9TaW1wbGlmeU1hcmt1cENvbW1hbmQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiU2ltcGxpZnlNYXJr
dXBDb21tYW5kLmgiCiAKICNpbmNsdWRlICJOb2RlUmVuZGVyU3R5bGUuaCIKKyNpbmNsdWRlICJO
b2RlVHJhdmVyc2FsLmgiCiAjaW5jbHVkZSAiUmVuZGVySW5saW5lLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyT2JqZWN0LmgiCiAjaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKQEAgLTQ3LDcgKzQ4LDcgQEAg
dm9pZCBTaW1wbGlmeU1hcmt1cENvbW1hbmQ6OmRvQXBwbHkoKQogICAgIC8vIHdpdGhvdXQgYWZm
ZWN0aW5nIHRoZSBzdHlsZS4gVGhlIGdvYWwgaXMgdG8gcHJvZHVjZSBsZWFuZXIgbWFya3VwIGV2
ZW4gd2hlbiBzdGFydGluZwogICAgIC8vIGZyb20gYSB2ZXJib3NlIGZyYWdtZW50LgogICAgIC8v
IFdlIGxvb2sgYXQgaW5saW5lIGVsZW1lbnRzIGFzIHdlbGwgYXMgbm9uIHRvcCBsZXZlbCBkaXZz
IHRoYXQgZG9uJ3QgaGF2ZSBhdHRyaWJ1dGVzLiAKLSAgICBmb3IgKE5vZGUqIG5vZGUgPSBtX2Zp
cnN0Tm9kZS5nZXQoKTsgbm9kZSAmJiBub2RlICE9IG1fbm9kZUFmdGVyTGFzdDsgbm9kZSA9IG5v
ZGUtPnRyYXZlcnNlTmV4dE5vZGUoKSkgeworICAgIGZvciAoTm9kZSogbm9kZSA9IG1fZmlyc3RO
b2RlLmdldCgpOyBub2RlICYmIG5vZGUgIT0gbV9ub2RlQWZ0ZXJMYXN0OyBub2RlID0gTm9kZVRy
YXZlcnNhbDo6bmV4dChub2RlKSkgewogICAgICAgICBpZiAobm9kZS0+Zmlyc3RDaGlsZCgpIHx8
IChub2RlLT5pc1RleHROb2RlKCkgJiYgbm9kZS0+bmV4dFNpYmxpbmcoKSkpCiAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJ
dGVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRl
cmF0b3IuY3BwCShyZXZpc2lvbiAxMzY2MDYpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Rl
eHRJdGVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRl
ICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJodG1sZWRpdGluZy5oIgogI2luY2x1ZGUgIklubGlu
ZVRleHRCb3guaCIKKyNpbmNsdWRlICJOb2RlVHJhdmVyc2FsLmgiCiAjaW5jbHVkZSAiUmFuZ2Uu
aCIKICNpbmNsdWRlICJSZW5kZXJUYWJsZUNlbGwuaCIKICNpbmNsdWRlICJSZW5kZXJUYWJsZVJv
dy5oIgpAQCAtNDI1LDcgKzQyNiw3IEBAIHZvaWQgVGV4dEl0ZXJhdG9yOjphZHZhbmNlKCkKICAg
ICAgICAgaWYgKCFuZXh0KSB7CiAgICAgICAgICAgICBuZXh0ID0gbV9ub2RlLT5uZXh0U2libGlu
ZygpOwogICAgICAgICAgICAgaWYgKCFuZXh0KSB7Ci0gICAgICAgICAgICAgICAgYm9vbCBwYXN0
RW5kID0gbV9ub2RlLT50cmF2ZXJzZU5leHROb2RlKCkgPT0gbV9wYXN0RW5kTm9kZTsKKyAgICAg
ICAgICAgICAgICBib29sIHBhc3RFbmQgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG1fbm9kZSkgPT0g
bV9wYXN0RW5kTm9kZTsKICAgICAgICAgICAgICAgICBOb2RlKiBwYXJlbnROb2RlID0gbV9ub2Rl
LT5wYXJlbnRPckhvc3ROb2RlKCk7CiAgICAgICAgICAgICAgICAgd2hpbGUgKCFuZXh0ICYmIHBh
cmVudE5vZGUpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKChwYXN0RW5kICYmIHBhcmVudE5v
ZGUgPT0gbV9lbmRDb250YWluZXIpIHx8IG1fZW5kQ29udGFpbmVyLT5pc0Rlc2NlbmRhbnRPZihw
YXJlbnROb2RlKSkKQEAgLTgwNSw3ICs4MDYsNyBAQCBzdGF0aWMgYm9vbCBzaG91bGRFbWl0TmV3
bGluZUFmdGVyTm9kZShOCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAvLyBDaGVjayBpZiB0
aGlzIGlzIHRoZSB2ZXJ5IGxhc3QgcmVuZGVyZXIgaW4gdGhlIGRvY3VtZW50LgogICAgIC8vIElm
IHNvLCB0aGVuIHdlIHNob3VsZCBub3QgZW1pdCBhIG5ld2xpbmUuCi0gICAgd2hpbGUgKChub2Rl
ID0gbm9kZS0+dHJhdmVyc2VOZXh0U2libGluZygpKSkKKyAgICB3aGlsZSAoKG5vZGUgPSBOb2Rl
VHJhdmVyc2FsOjpuZXh0U2libGluZyhub2RlKSkpCiAgICAgICAgIGlmIChub2RlLT5yZW5kZXJl
cigpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDog
U291cmNlL1dlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5jcHAJKHJldmlzaW9uIDEzNjYwNikKKysr
IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00MSw2ICs0MSw3IEBACiAjaW5jbHVkZSAiSFRNTE9MaXN0RWxlbWVudC5oIgogI2luY2x1ZGUg
IkhUTUxQYXJhZ3JhcGhFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTFVMaXN0RWxlbWVudC5oIgor
I2luY2x1ZGUgIk5vZGVUcmF2ZXJzYWwuaCIKICNpbmNsdWRlICJQb3NpdGlvbkl0ZXJhdG9yLmgi
CiAjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCiAjaW5jbHVkZSAiUmFuZ2UuaCIKQEAgLTY0NSwx
MiArNjQ2LDEyIEBAIHN0YXRpYyBib29sIGhhc0FSZW5kZXJlZERlc2NlbmRhbnQoTm9kZSoKIHsK
ICAgICBmb3IgKE5vZGUqIG4gPSBub2RlLT5maXJzdENoaWxkKCk7IG47KSB7CiAgICAgICAgIGlm
IChuID09IGV4Y2x1ZGVkTm9kZSkgewotICAgICAgICAgICAgbiA9IG4tPnRyYXZlcnNlTmV4dFNp
Ymxpbmcobm9kZSk7CisgICAgICAgICAgICBuID0gTm9kZVRyYXZlcnNhbDo6bmV4dFNpYmxpbmco
biwgbm9kZSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogICAgICAgICBpZiAo
bi0+cmVuZGVyZXIoKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBuID0gbi0+
dHJhdmVyc2VOZXh0Tm9kZShub2RlKTsKKyAgICAgICAgbiA9IE5vZGVUcmF2ZXJzYWw6Om5leHQo
biwgbm9kZSk7CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvbWFya3VwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL21hcmt1cC5jcHAJKHJldmlzaW9uIDEzNjYwNikKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvbWFya3VwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsNiArNTEsNyBAQAogI2luY2x1ZGUg
IkhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50LmgiCiAjaW5jbHVkZSAiS1VSTC5oIgogI2luY2x1
ZGUgIk1hcmt1cEFjY3VtdWxhdG9yLmgiCisjaW5jbHVkZSAiTm9kZVRyYXZlcnNhbC5oIgogI2lu
Y2x1ZGUgIlJhbmdlLmgiCiAjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCiAjaW5jbHVkZSAiU3R5
bGVQcm9wZXJ0eVNldC5oIgpAQCAtMTAxLDggKzEwMiw4IEBAIHN0YXRpYyB2b2lkIGNvbXBsZXRl
VVJMcyhOb2RlKiBub2RlLCBjb24KIAogICAgIEtVUkwgcGFyc2VkQmFzZVVSTChQYXJzZWRVUkxT
dHJpbmcsIGJhc2VVUkwpOwogCi0gICAgTm9kZSogZW5kID0gbm9kZS0+dHJhdmVyc2VOZXh0U2li
bGluZygpOwotICAgIGZvciAoTm9kZSogbiA9IG5vZGU7IG4gIT0gZW5kOyBuID0gbi0+dHJhdmVy
c2VOZXh0Tm9kZSgpKSB7CisgICAgTm9kZSogZW5kID0gTm9kZVRyYXZlcnNhbDo6bmV4dFNpYmxp
bmcobm9kZSk7CisgICAgZm9yIChOb2RlKiBuID0gbm9kZTsgbiAhPSBlbmQ7IG4gPSBOb2RlVHJh
dmVyc2FsOjpuZXh0KG4pKSB7CiAgICAgICAgIGlmIChuLT5pc0VsZW1lbnROb2RlKCkpIHsKICAg
ICAgICAgICAgIEVsZW1lbnQqIGUgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obik7CiAgICAgICAg
ICAgICBpZiAoIWUtPmhhc0F0dHJpYnV0ZXMoKSkKQEAgLTM2NSw3ICszNjYsNyBAQCBOb2RlKiBT
dHlsZWRNYXJrdXBBY2N1bXVsYXRvcjo6dHJhdmVyc2VOCiAgICAgICAgIGlmICghbikKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAKLSAgICAgICAgbmV4dCA9IG4tPnRyYXZlcnNlTmV4dE5v
ZGUoKTsKKyAgICAgICAgbmV4dCA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobik7CiAgICAgICAgIGJv
b2wgb3BlbmVkVGFnID0gZmFsc2U7CiAKICAgICAgICAgaWYgKGlzQmxvY2sobikgJiYgY2FuSGF2
ZUNoaWxkcmVuRm9yRWRpdGluZyhuKSAmJiBuZXh0ID09IHBhc3RFbmQpCkBAIC0zNzMsNyArMzc0
LDcgQEAgTm9kZSogU3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OnRyYXZlcnNlTgogICAgICAgICAg
ICAgY29udGludWU7CiAKICAgICAgICAgaWYgKCFuLT5yZW5kZXJlcigpICYmICFlbmNsb3NpbmdO
b2RlV2l0aFRhZyhmaXJzdFBvc2l0aW9uSW5PckJlZm9yZU5vZGUobiksIHNlbGVjdFRhZykpIHsK
LSAgICAgICAgICAgIG5leHQgPSBuLT50cmF2ZXJzZU5leHRTaWJsaW5nKCk7CisgICAgICAgICAg
ICBuZXh0ID0gTm9kZVRyYXZlcnNhbDo6bmV4dFNpYmxpbmcobik7CiAgICAgICAgICAgICAvLyBE
b24ndCBza2lwIG92ZXIgcGFzdEVuZC4KICAgICAgICAgICAgIGlmIChwYXN0RW5kICYmIHBhc3RF
bmQtPmlzRGVzY2VuZGFudE9mKG4pKQogICAgICAgICAgICAgICAgIG5leHQgPSBwYXN0RW5kOwpA
QCAtNjc4LDcgKzY3OSw3IEBAIHN0YXRpYyBjb25zdCBjaGFyIGZyYWdtZW50TWFya2VyVGFnW10g
PSAKIAogc3RhdGljIGJvb2wgZmluZE5vZGVzU3Vycm91bmRpbmdDb250ZXh0KERvY3VtZW50KiBk
b2N1bWVudCwgUmVmUHRyPE5vZGU+JiBub2RlQmVmb3JlQ29udGV4dCwgUmVmUHRyPE5vZGU+JiBu
b2RlQWZ0ZXJDb250ZXh0KQogewotICAgIGZvciAoTm9kZSogbm9kZSA9IGRvY3VtZW50LT5maXJz
dENoaWxkKCk7IG5vZGU7IG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKCkpIHsKKyAgICBm
b3IgKE5vZGUqIG5vZGUgPSBkb2N1bWVudC0+Zmlyc3RDaGlsZCgpOyBub2RlOyBub2RlID0gTm9k
ZVRyYXZlcnNhbDo6bmV4dChub2RlKSkgewogICAgICAgICBpZiAobm9kZS0+bm9kZVR5cGUoKSA9
PSBOb2RlOjpDT01NRU5UX05PREUgJiYgc3RhdGljX2Nhc3Q8Q2hhcmFjdGVyRGF0YSo+KG5vZGUp
LT5kYXRhKCkgPT0gZnJhZ21lbnRNYXJrZXJUYWcpIHsKICAgICAgICAgICAgIGlmICghbm9kZUJl
Zm9yZUNvbnRleHQpCiAgICAgICAgICAgICAgICAgbm9kZUJlZm9yZUNvbnRleHQgPSBub2RlOwpA
QCAtNjk3LDEwICs2OTgsMTAgQEAgc3RhdGljIHZvaWQgdHJpbUZyYWdtZW50KERvY3VtZW50RnJh
Z21lbgogICAgIFJlZlB0cjxOb2RlPiBuZXh0OwogICAgIGZvciAoUmVmUHRyPE5vZGU+IG5vZGUg
PSBmcmFnbWVudC0+Zmlyc3RDaGlsZCgpOyBub2RlOyBub2RlID0gbmV4dCkgewogICAgICAgICBp
ZiAobm9kZUJlZm9yZUNvbnRleHQtPmlzRGVzY2VuZGFudE9mKG5vZGUuZ2V0KCkpKSB7Ci0gICAg
ICAgICAgICBuZXh0ID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgpOworICAgICAgICAgICAgbmV4
dCA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9kZS5nZXQoKSk7CiAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgfQotICAgICAgICBuZXh0ID0gbm9kZS0+dHJhdmVyc2VOZXh0U2libGluZygp
OworICAgICAgICBuZXh0ID0gTm9kZVRyYXZlcnNhbDo6bmV4dFNpYmxpbmcobm9kZS5nZXQoKSk7
CiAgICAgICAgIEFTU0VSVCghbm9kZS0+Y29udGFpbnMobm9kZUFmdGVyQ29udGV4dCkpOwogICAg
ICAgICBub2RlLT5wYXJlbnROb2RlKCktPnJlbW92ZUNoaWxkKG5vZGUuZ2V0KCksIGVjKTsKICAg
ICAgICAgaWYgKG5vZGVCZWZvcmVDb250ZXh0ID09IG5vZGUpCkBAIC03MDksNyArNzEwLDcgQEAg
c3RhdGljIHZvaWQgdHJpbUZyYWdtZW50KERvY3VtZW50RnJhZ21lbgogCiAgICAgQVNTRVJUKG5v
ZGVBZnRlckNvbnRleHQtPnBhcmVudE5vZGUoKSk7CiAgICAgZm9yIChSZWZQdHI8Tm9kZT4gbm9k
ZSA9IG5vZGVBZnRlckNvbnRleHQ7IG5vZGU7IG5vZGUgPSBuZXh0KSB7Ci0gICAgICAgIG5leHQg
PSBub2RlLT50cmF2ZXJzZU5leHRTaWJsaW5nKCk7CisgICAgICAgIG5leHQgPSBOb2RlVHJhdmVy
c2FsOjpuZXh0U2libGluZyhub2RlLmdldCgpKTsKICAgICAgICAgbm9kZS0+cGFyZW50Tm9kZSgp
LT5yZW1vdmVDaGlsZChub2RlLmdldCgpLCBlYyk7CiAgICAgICAgIEFTU0VSVCghZWMpOwogICAg
IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvdmlzaWJsZV91bml0cy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy92aXNpYmxlX3VuaXRzLmNwcAkocmV2aXNp
b24gMTM2NjA2KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy92aXNpYmxlX3VuaXRzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIkVsZW1lbnQuaCIKICNp
bmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJJbmxpbmVUZXh0Qm94LmgiCisjaW5jbHVk
ZSAiTm9kZVRyYXZlcnNhbC5oIgogI2luY2x1ZGUgIlBvc2l0aW9uLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyQmxvY2suaCIKICNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKQEAgLTExMTYsMTggKzExMTcs
MTggQEAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0T2ZQYXJhZ3JhcGgoY29uc3QgVgogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGlmIChib3VuZGFyeUNyb3NzaW5nUnVsZSA9PSBDYW5Ta2lwT3Zl
ckVkaXRpbmdCb3VuZGFyeSkgewogICAgICAgICAgICAgd2hpbGUgKG4gJiYgbi0+cmVuZGVyZXJJ
c0VkaXRhYmxlKCkgIT0gc3RhcnROb2RlLT5yZW5kZXJlcklzRWRpdGFibGUoKSkKLSAgICAgICAg
ICAgICAgICBuID0gbi0+dHJhdmVyc2VQcmV2aW91c05vZGVQb3N0T3JkZXIoc3RhcnRCbG9jayk7
CisgICAgICAgICAgICAgICAgbiA9IE5vZGVUcmF2ZXJzYWw6OnByZXZpb3VzUG9zdE9yZGVyKG4s
IHN0YXJ0QmxvY2spOwogICAgICAgICAgICAgaWYgKCFuIHx8ICFuLT5pc0Rlc2NlbmRhbnRPZiho
aWdoZXN0Um9vdCkpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAg
UmVuZGVyT2JqZWN0ICpyID0gbi0+cmVuZGVyZXIoKTsKICAgICAgICAgaWYgKCFyKSB7Ci0gICAg
ICAgICAgICBuID0gbi0+dHJhdmVyc2VQcmV2aW91c05vZGVQb3N0T3JkZXIoc3RhcnRCbG9jayk7
CisgICAgICAgICAgICBuID0gTm9kZVRyYXZlcnNhbDo6cHJldmlvdXNQb3N0T3JkZXIobiwgc3Rh
cnRCbG9jayk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogICAgICAgICBSZW5k
ZXJTdHlsZSAqc3R5bGUgPSByLT5zdHlsZSgpOwogICAgICAgICBpZiAoc3R5bGUtPnZpc2liaWxp
dHkoKSAhPSBWSVNJQkxFKSB7Ci0gICAgICAgICAgICBuID0gbi0+dHJhdmVyc2VQcmV2aW91c05v
ZGVQb3N0T3JkZXIoc3RhcnRCbG9jayk7CisgICAgICAgICAgICBuID0gTm9kZVRyYXZlcnNhbDo6
cHJldmlvdXNQb3N0T3JkZXIobiwgc3RhcnRCbG9jayk7CiAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgfQogICAgICAgICAKQEAgLTExNTAsMTMgKzExNTEsMTMgQEAgVmlzaWJsZVBvc2l0
aW9uIHN0YXJ0T2ZQYXJhZ3JhcGgoY29uc3QgVgogICAgICAgICAgICAgfQogICAgICAgICAgICAg
bm9kZSA9IG47CiAgICAgICAgICAgICBvZmZzZXQgPSAwOwotICAgICAgICAgICAgbiA9IG4tPnRy
YXZlcnNlUHJldmlvdXNOb2RlUG9zdE9yZGVyKHN0YXJ0QmxvY2spOworICAgICAgICAgICAgbiA9
IE5vZGVUcmF2ZXJzYWw6OnByZXZpb3VzUG9zdE9yZGVyKG4sIHN0YXJ0QmxvY2spOwogICAgICAg
ICB9IGVsc2UgaWYgKGVkaXRpbmdJZ25vcmVzQ29udGVudChuKSB8fCBpc1RhYmxlRWxlbWVudChu
KSkgewogICAgICAgICAgICAgbm9kZSA9IG47CiAgICAgICAgICAgICB0eXBlID0gUG9zaXRpb246
OlBvc2l0aW9uSXNCZWZvcmVBbmNob3I7Ci0gICAgICAgICAgICBuID0gbi0+cHJldmlvdXNTaWJs
aW5nKCkgPyBuLT5wcmV2aW91c1NpYmxpbmcoKSA6IG4tPnRyYXZlcnNlUHJldmlvdXNOb2RlUG9z
dE9yZGVyKHN0YXJ0QmxvY2spOworICAgICAgICAgICAgbiA9IG4tPnByZXZpb3VzU2libGluZygp
ID8gbi0+cHJldmlvdXNTaWJsaW5nKCkgOiBOb2RlVHJhdmVyc2FsOjpwcmV2aW91c1Bvc3RPcmRl
cihuLCBzdGFydEJsb2NrKTsKICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBuID0gbi0+dHJh
dmVyc2VQcmV2aW91c05vZGVQb3N0T3JkZXIoc3RhcnRCbG9jayk7CisgICAgICAgICAgICBuID0g
Tm9kZVRyYXZlcnNhbDo6cHJldmlvdXNQb3N0T3JkZXIobiwgc3RhcnRCbG9jayk7CiAgICAgfQog
CiAgICAgaWYgKHR5cGUgPT0gUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvcikgewpA
QCAtMTE5NiwxOSArMTE5NywxOSBAQCBWaXNpYmxlUG9zaXRpb24gZW5kT2ZQYXJhZ3JhcGgoY29u
c3QgVmlzCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgaWYgKGJvdW5kYXJ5Q3Jvc3NpbmdS
dWxlID09IENhblNraXBPdmVyRWRpdGluZ0JvdW5kYXJ5KSB7CiAgICAgICAgICAgICB3aGlsZSAo
biAmJiBuLT5yZW5kZXJlcklzRWRpdGFibGUoKSAhPSBzdGFydE5vZGUtPnJlbmRlcmVySXNFZGl0
YWJsZSgpKQotICAgICAgICAgICAgICAgIG4gPSBuLT50cmF2ZXJzZU5leHROb2RlKHN0YXlJbnNp
ZGVCbG9jayk7CisgICAgICAgICAgICAgICAgbiA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobiwgc3Rh
eUluc2lkZUJsb2NrKTsKICAgICAgICAgICAgIGlmICghbiB8fCAhbi0+aXNEZXNjZW5kYW50T2Yo
aGlnaGVzdFJvb3QpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKICAgICAg
ICAgUmVuZGVyT2JqZWN0ICpyID0gbi0+cmVuZGVyZXIoKTsKICAgICAgICAgaWYgKCFyKSB7Ci0g
ICAgICAgICAgICBuID0gbi0+dHJhdmVyc2VOZXh0Tm9kZShzdGF5SW5zaWRlQmxvY2spOworICAg
ICAgICAgICAgbiA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobiwgc3RheUluc2lkZUJsb2NrKTsKICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAgICAgICAgIFJlbmRlclN0eWxlICpzdHls
ZSA9IHItPnN0eWxlKCk7CiAgICAgICAgIGlmIChzdHlsZS0+dmlzaWJpbGl0eSgpICE9IFZJU0lC
TEUpIHsKLSAgICAgICAgICAgIG4gPSBuLT50cmF2ZXJzZU5leHROb2RlKHN0YXlJbnNpZGVCbG9j
ayk7CisgICAgICAgICAgICBuID0gTm9kZVRyYXZlcnNhbDo6bmV4dChuLCBzdGF5SW5zaWRlQmxv
Y2spOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KICAgICAgICAgCkBAIC0xMjMw
LDEzICsxMjMxLDEzIEBAIFZpc2libGVQb3NpdGlvbiBlbmRPZlBhcmFncmFwaChjb25zdCBWaXMK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIG5vZGUgPSBuOwogICAgICAgICAgICAgb2Zmc2V0
ID0gci0+Y2FyZXRNYXhPZmZzZXQoKTsKLSAgICAgICAgICAgIG4gPSBuLT50cmF2ZXJzZU5leHRO
b2RlKHN0YXlJbnNpZGVCbG9jayk7CisgICAgICAgICAgICBuID0gTm9kZVRyYXZlcnNhbDo6bmV4
dChuLCBzdGF5SW5zaWRlQmxvY2spOwogICAgICAgICB9IGVsc2UgaWYgKGVkaXRpbmdJZ25vcmVz
Q29udGVudChuKSB8fCBpc1RhYmxlRWxlbWVudChuKSkgewogICAgICAgICAgICAgbm9kZSA9IG47
CiAgICAgICAgICAgICB0eXBlID0gUG9zaXRpb246OlBvc2l0aW9uSXNBZnRlckFuY2hvcjsKLSAg
ICAgICAgICAgIG4gPSBuLT50cmF2ZXJzZU5leHRTaWJsaW5nKHN0YXlJbnNpZGVCbG9jayk7Cisg
ICAgICAgICAgICBuID0gTm9kZVRyYXZlcnNhbDo6bmV4dFNpYmxpbmcobiwgc3RheUluc2lkZUJs
b2NrKTsKICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBuID0gbi0+dHJhdmVyc2VOZXh0Tm9k
ZShzdGF5SW5zaWRlQmxvY2spOworICAgICAgICAgICAgbiA9IE5vZGVUcmF2ZXJzYWw6Om5leHQo
biwgc3RheUluc2lkZUJsb2NrKTsKICAgICB9CiAKICAgICBpZiAodHlwZSA9PSBQb3NpdGlvbjo6
UG9zaXRpb25Jc09mZnNldEluQW5jaG9yKQpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9t
YWMvRWRpdG9yTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFj
L0VkaXRvck1hYy5tbQkocmV2aXNpb24gMTM2NjA2KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9tYWMvRWRpdG9yTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2ICszOSw3IEBACiAjaW1w
b3J0ICJIVE1MQ29udmVydGVyLmgiCiAjaW1wb3J0ICJIVE1MTmFtZXMuaCIKICNpbXBvcnQgIkxl
Z2FjeVdlYkFyY2hpdmUuaCIKKyNpbXBvcnQgIk5vZGVUcmF2ZXJzYWwuaCIKICNpbXBvcnQgIlBh
c3RlYm9hcmQuaCIKICNpbXBvcnQgIlBhc3RlYm9hcmRTdHJhdGVneS5oIgogI2ltcG9ydCAiUGxh
dGZvcm1TdHJhdGVnaWVzLmgiCkBAIC0xNjgsNyArMTY5LDcgQEAgY29uc3QgU2ltcGxlRm9udERh
dGEqIEVkaXRvcjo6Zm9udEZvclNlbAogICAgICAgICBOb2RlKiBwYXN0RW5kID0gcmFuZ2UtPnBh
c3RMYXN0Tm9kZSgpOwogICAgICAgICAvLyBJbiB0aGUgbG9vcCBiZWxvdywgbiBzaG91bGQgZXZl
bnR1YWxseSBtYXRjaCBwYXN0RW5kIGFuZCBub3QgYmVjb21lIG5pbCwgYnV0IHdlJ3ZlIHNlZW4g
YXQgbGVhc3Qgb25lCiAgICAgICAgIC8vIHVucmVwcm9kdWNpYmxlIGNhc2Ugd2hlcmUgdGhpcyBk
aWRuJ3QgaGFwcGVuLCBzbyBjaGVjayBmb3IgbnVsbCBhbHNvLgotICAgICAgICBmb3IgKE5vZGUq
IG5vZGUgPSBzdGFydE5vZGU7IG5vZGUgJiYgbm9kZSAhPSBwYXN0RW5kOyBub2RlID0gbm9kZS0+
dHJhdmVyc2VOZXh0Tm9kZSgpKSB7CisgICAgICAgIGZvciAoTm9kZSogbm9kZSA9IHN0YXJ0Tm9k
ZTsgbm9kZSAmJiBub2RlICE9IHBhc3RFbmQ7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5v
ZGUpKSB7CiAgICAgICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gbm9kZS0+cmVuZGVy
ZXIoKTsKICAgICAgICAgICAgIGlmICghcmVuZGVyZXIpCiAgICAgICAgICAgICAgICAgY29udGlu
dWU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDb2xsZWN0aW9uLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDb2xsZWN0aW9uLmNwcAkocmV2aXNpb24g
MTM2NjA2KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ29sbGVjdGlvbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJIVE1MT3B0aW9uRWxlbWVudC5o
IgogI2luY2x1ZGUgIk5vZGVMaXN0LmgiCiAjaW5jbHVkZSAiTm9kZVJhcmVEYXRhLmgiCisjaW5j
bHVkZSAiTm9kZVRyYXZlcnNhbC5oIgogCiAjaWYgRU5BQkxFKE1JQ1JPREFUQSkKICNpbmNsdWRl
ICJIVE1MUHJvcGVydGllc0NvbGxlY3Rpb24uaCIKQEAgLTI2MSw5ICsyNjIsOSBAQCB0ZW1wbGF0
ZTxib29sIGZvcndhcmQ+CiBzdGF0aWMgTm9kZSogbmV4dE5vZGUoTm9kZSogYmFzZSwgTm9kZSog
cHJldmlvdXMsIGJvb2wgb25seUluY2x1ZGVEaXJlY3RDaGlsZHJlbikKIHsKICAgICBpZiAoZm9y
d2FyZCkKLSAgICAgICAgcmV0dXJuIG9ubHlJbmNsdWRlRGlyZWN0Q2hpbGRyZW4gPyBwcmV2aW91
cy0+bmV4dFNpYmxpbmcoKSA6IHByZXZpb3VzLT50cmF2ZXJzZU5leHROb2RlKGJhc2UpOworICAg
ICAgICByZXR1cm4gb25seUluY2x1ZGVEaXJlY3RDaGlsZHJlbiA/IHByZXZpb3VzLT5uZXh0U2li
bGluZygpIDogTm9kZVRyYXZlcnNhbDo6bmV4dChwcmV2aW91cywgYmFzZSk7CiAgICAgZWxzZQot
ICAgICAgICByZXR1cm4gb25seUluY2x1ZGVEaXJlY3RDaGlsZHJlbiA/IHByZXZpb3VzLT5wcmV2
aW91c1NpYmxpbmcoKSA6IHByZXZpb3VzLT50cmF2ZXJzZVByZXZpb3VzTm9kZShiYXNlKTsKKyAg
ICAgICAgcmV0dXJuIG9ubHlJbmNsdWRlRGlyZWN0Q2hpbGRyZW4gPyBwcmV2aW91cy0+cHJldmlv
dXNTaWJsaW5nKCkgOiBOb2RlVHJhdmVyc2FsOjpwcmV2aW91cyhwcmV2aW91cywgYmFzZSk7CiB9
CiAKIHN0YXRpYyBpbmxpbmUgTm9kZSogbGFzdERlc2NlbmRlbnQoTm9kZSogbm9kZSkKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuY3BwCShyZXZpc2lvbiAxMzY2MDYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsNiAr
NDYsNyBAQAogI2luY2x1ZGUgIkhUTUxQYXJzZXJJZGlvbXMuaCIKICNpbmNsdWRlICJIVE1MVGVt
cGxhdGVFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQuaCIK
KyNpbmNsdWRlICJOb2RlVHJhdmVyc2FsLmgiCiAjaW5jbHVkZSAiUmVuZGVyV29yZEJyZWFrLmgi
CiAjaW5jbHVkZSAiU2NyaXB0RXZlbnRMaXN0ZW5lci5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgi
CkBAIC04MTYsMTMgKzgxNywxMyBAQCBzdGF0aWMgdm9pZCBzZXRIYXNEaXJBdXRvRmxhZ1JlY3Vy
c2l2ZWx5CiAgICAgICAgIGlmIChlbGVtZW50QWZmZWN0c0RpcmVjdGlvbmFsaXR5KG5vZGUpKSB7
CiAgICAgICAgICAgICBpZiAobm9kZSA9PSBsYXN0Tm9kZSkKICAgICAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgICAgICBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0U2libGluZyhmaXJzdE5v
ZGUpOworICAgICAgICAgICAgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHRTaWJsaW5nKG5vZGUs
IGZpcnN0Tm9kZSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogICAgICAgICBu
b2RlLT5zZXRTZWxmT3JBbmNlc3Rvckhhc0RpckF1dG9BdHRyaWJ1dGUoZmxhZyk7CiAgICAgICAg
IGlmIChub2RlID09IGxhc3ROb2RlKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBub2Rl
ID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZShmaXJzdE5vZGUpOworICAgICAgICBub2RlID0gTm9k
ZVRyYXZlcnNhbDo6bmV4dChub2RlLCBmaXJzdE5vZGUpOwogICAgIH0KIH0KIApAQCAtODY0LDcg
Kzg2NSw3IEBAIFRleHREaXJlY3Rpb24gSFRNTEVsZW1lbnQ6OmRpcmVjdGlvbmFsaXQKICAgICAg
ICAgLy8gU2tpcCBiZGksIHNjcmlwdCwgc3R5bGUgYW5kIHRleHQgZm9ybSBjb250cm9scy4KICAg
ICAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5vZGUtPm5vZGVOYW1lKCksICJiZGkiKSB8fCBu
b2RlLT5oYXNUYWdOYW1lKHNjcmlwdFRhZykgfHwgbm9kZS0+aGFzVGFnTmFtZShzdHlsZVRhZykg
CiAgICAgICAgICAgICB8fCAobm9kZS0+aXNFbGVtZW50Tm9kZSgpICYmIHRvRWxlbWVudChub2Rl
KS0+aXNUZXh0Rm9ybUNvbnRyb2woKSkpIHsKLSAgICAgICAgICAgIG5vZGUgPSBub2RlLT50cmF2
ZXJzZU5leHRTaWJsaW5nKHRoaXMpOworICAgICAgICAgICAgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6
Om5leHRTaWJsaW5nKG5vZGUsIHRoaXMpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
IH0KIApAQCAtODcyLDcgKzg3Myw3IEBAIFRleHREaXJlY3Rpb24gSFRNTEVsZW1lbnQ6OmRpcmVj
dGlvbmFsaXQKICAgICAgICAgaWYgKG5vZGUtPmlzRWxlbWVudE5vZGUoKSkgewogICAgICAgICAg
ICAgQXRvbWljU3RyaW5nIGRpckF0dHJpYnV0ZVZhbHVlID0gdG9FbGVtZW50KG5vZGUpLT5mYXN0
R2V0QXR0cmlidXRlKGRpckF0dHIpOwogICAgICAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNl
KGRpckF0dHJpYnV0ZVZhbHVlLCAicnRsIikgfHwgZXF1YWxJZ25vcmluZ0Nhc2UoZGlyQXR0cmli
dXRlVmFsdWUsICJsdHIiKSB8fCBlcXVhbElnbm9yaW5nQ2FzZShkaXJBdHRyaWJ1dGVWYWx1ZSwg
ImF1dG8iKSkgewotICAgICAgICAgICAgICAgIG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHRTaWJs
aW5nKHRoaXMpOworICAgICAgICAgICAgICAgIG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0U2li
bGluZyhub2RlLCB0aGlzKTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAg
IH0KICAgICAgICAgfQpAQCAtODg2LDcgKzg4Nyw3IEBAIFRleHREaXJlY3Rpb24gSFRNTEVsZW1l
bnQ6OmRpcmVjdGlvbmFsaXQKICAgICAgICAgICAgICAgICByZXR1cm4gKHRleHREaXJlY3Rpb24g
PT0gV1RGOjpVbmljb2RlOjpMZWZ0VG9SaWdodCkgPyBMVFIgOiBSVEw7CiAgICAgICAgICAgICB9
CiAgICAgICAgIH0KLSAgICAgICAgbm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUodGhpcyk7
CisgICAgICAgIG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUsIHRoaXMpOwogICAgIH0K
ICAgICBpZiAoc3Ryb25nRGlyZWN0aW9uYWxpdHlUZXh0Tm9kZSkKICAgICAgICAgKnN0cm9uZ0Rp
cmVjdGlvbmFsaXR5VGV4dE5vZGUgPSAwOwpAQCAtOTMzLDggKzkzNCw4IEBAIHZvaWQgSFRNTEVs
ZW1lbnQ6OmNhbGN1bGF0ZUFuZEFkanVzdERpcmUKIHZvaWQgSFRNTEVsZW1lbnQ6OmFkanVzdERp
cmVjdGlvbmFsaXR5SWZOZWVkZWRBZnRlckNoaWxkcmVuQ2hhbmdlZChOb2RlKiBiZWZvcmVDaGFu
Z2UsIGludCBjaGlsZENvdW50RGVsdGEpCiB7CiAgICAgaWYgKCghZG9jdW1lbnQoKSB8fCBkb2N1
bWVudCgpLT5yZW5kZXJlcigpKSAmJiBjaGlsZENvdW50RGVsdGEgPCAwKSB7Ci0gICAgICAgIE5v
ZGUqIG5vZGUgPSBiZWZvcmVDaGFuZ2UgPyBiZWZvcmVDaGFuZ2UtPnRyYXZlcnNlTmV4dFNpYmxp
bmcoKSA6IDA7Ci0gICAgICAgIGZvciAoaW50IGNvdW50ZXIgPSAwOyBub2RlICYmIGNvdW50ZXIg
PCBjaGlsZENvdW50RGVsdGE7IGNvdW50ZXIrKywgbm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dFNp
YmxpbmcoKSkgeworICAgICAgICBOb2RlKiBub2RlID0gYmVmb3JlQ2hhbmdlID8gTm9kZVRyYXZl
cnNhbDo6bmV4dFNpYmxpbmcoYmVmb3JlQ2hhbmdlKSA6IDA7CisgICAgICAgIGZvciAoaW50IGNv
dW50ZXIgPSAwOyBub2RlICYmIGNvdW50ZXIgPCBjaGlsZENvdW50RGVsdGE7IGNvdW50ZXIrKywg
bm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHRTaWJsaW5nKG5vZGUpKSB7CiAgICAgICAgICAgICBp
ZiAoZWxlbWVudEFmZmVjdHNEaXJlY3Rpb25hbGl0eShub2RlKSkKICAgICAgICAgICAgICAgICBj
b250aW51ZTsKIApAQCAtOTQ1LDkgKzk0Niw5IEBAIHZvaWQgSFRNTEVsZW1lbnQ6OmFkanVzdERp
cmVjdGlvbmFsaXR5SWYKICAgICBpZiAoIXNlbGZPckFuY2VzdG9ySGFzRGlyQXV0b0F0dHJpYnV0
ZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBOb2RlKiBvbGRNYXJrZWROb2RlID0gYmVmb3Jl
Q2hhbmdlID8gYmVmb3JlQ2hhbmdlLT50cmF2ZXJzZU5leHRTaWJsaW5nKCkgOiAwOworICAgIE5v
ZGUqIG9sZE1hcmtlZE5vZGUgPSBiZWZvcmVDaGFuZ2UgPyBOb2RlVHJhdmVyc2FsOjpuZXh0U2li
bGluZyhiZWZvcmVDaGFuZ2UpIDogMDsKICAgICB3aGlsZSAob2xkTWFya2VkTm9kZSAmJiBlbGVt
ZW50QWZmZWN0c0RpcmVjdGlvbmFsaXR5KG9sZE1hcmtlZE5vZGUpKQotICAgICAgICBvbGRNYXJr
ZWROb2RlID0gb2xkTWFya2VkTm9kZS0+dHJhdmVyc2VOZXh0U2libGluZyh0aGlzKTsKKyAgICAg
ICAgb2xkTWFya2VkTm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHRTaWJsaW5nKG9sZE1hcmtlZE5v
ZGUsIHRoaXMpOwogICAgIGlmIChvbGRNYXJrZWROb2RlKQogICAgICAgICBzZXRIYXNEaXJBdXRv
RmxhZ1JlY3Vyc2l2ZWx5KG9sZE1hcmtlZE5vZGUsIGZhbHNlKTsKIApAQCAtMTAyOCw3ICsxMDI5
LDcgQEAgdm9pZCBIVE1MRWxlbWVudDo6Z2V0SXRlbVJlZkVsZW1lbnRzKFZlYwogICAgICAgICAg
ICAgcm9vdE5vZGUgPSBwYXJlbnQ7CiAgICAgfQogCi0gICAgZm9yIChOb2RlKiBjdXJyZW50ID0g
cm9vdE5vZGU7IGN1cnJlbnQ7IGN1cnJlbnQgPSBjdXJyZW50LT50cmF2ZXJzZU5leHROb2RlKHJv
b3ROb2RlKSkgeworICAgIGZvciAoTm9kZSogY3VycmVudCA9IHJvb3ROb2RlOyBjdXJyZW50OyBj
dXJyZW50ID0gY3VycmVudC0+Tm9kZVRyYXZlcnNhbDo6bmV4dChyb290Tm9kZSkpIHsKICAgICAg
ICAgaWYgKCFjdXJyZW50LT5pc0hUTUxFbGVtZW50KCkpCiAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgSFRNTEVsZW1lbnQqIGVsZW1lbnQgPSB0b0hUTUxFbGVtZW50KGN1cnJlbnQpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRmllbGRTZXRFbGVtZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGaWVsZFNldEVsZW1lbnQuY3BwCShyZXZp
c2lvbiAxMzY2MDYpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGaWVsZFNldEVsZW1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiSFRNTExlZ2Vu
ZEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJIVE1MT2JqZWN0
RWxlbWVudC5oIgorI2luY2x1ZGUgIk5vZGVUcmF2ZXJzYWwuaCIKICNpbmNsdWRlICJSZW5kZXJG
aWVsZHNldC5oIgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KIApAQCAtNTAsNyArNTEs
NyBAQCBQYXNzUmVmUHRyPEhUTUxGaWVsZFNldEVsZW1lbnQ+IEhUTUxGaWVsCiAKIHZvaWQgSFRN
TEZpZWxkU2V0RWxlbWVudDo6aW52YWxpZGF0ZURpc2FibGVkU3RhdGVVbmRlcihFbGVtZW50KiBi
YXNlKQogewotICAgIGZvciAoTm9kZSogbm9kZSA9IGJhc2UtPmZpcnN0Q2hpbGQoKTsgbm9kZTsg
bm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoYmFzZSkpIHsKKyAgICBmb3IgKE5vZGUqIG5v
ZGUgPSBiYXNlLT5maXJzdENoaWxkKCk7IG5vZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0
KG5vZGUsIGJhc2UpKSB7CiAgICAgICAgIGlmIChub2RlLT5pc0VsZW1lbnROb2RlKCkgJiYgdG9F
bGVtZW50KG5vZGUpLT5pc0Zvcm1Db250cm9sRWxlbWVudCgpKQogICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8SFRNTEZvcm1Db250cm9sRWxlbWVudCo+KG5vZGUpLT5hbmNlc3RvckRpc2FibGVkU3Rh
dGVXYXNDaGFuZ2VkKCk7CiAgICAgfQpAQCAtMTEyLDcgKzExMyw3IEBAIHZvaWQgSFRNTEZpZWxk
U2V0RWxlbWVudDo6cmVmcmVzaEVsZW1lbnQKIAogICAgIG1fYXNzb2NpYXRlZEVsZW1lbnRzLmNs
ZWFyKCk7CiAKLSAgICBmb3IgKE5vZGUqIG5vZGUgPSBmaXJzdENoaWxkKCk7IG5vZGU7IG5vZGUg
PSBub2RlLT50cmF2ZXJzZU5leHROb2RlKHRoaXMpKSB7CisgICAgZm9yIChOb2RlKiBub2RlID0g
Zmlyc3RDaGlsZCgpOyBub2RlOyBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dChub2RlLCB0aGlz
KSkgewogICAgICAgICBpZiAoIW5vZGUtPmlzRWxlbWVudE5vZGUoKSkKICAgICAgICAgICAgIGNv
bnRpbnVlOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwCShy
ZXZpc2lvbiAxMzY2MDYpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDYgKzQ3LDcgQEAKICNpbmNsdWRlICJIVE1MTmFtZXMu
aCIKICNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAiTm9kZVJlbmRlcmlu
Z0NvbnRleHQuaCIKKyNpbmNsdWRlICJOb2RlVHJhdmVyc2FsLmgiCiAjaW5jbHVkZSAiUGFnZS5o
IgogI2luY2x1ZGUgIlJlbmRlclRleHRDb250cm9sLmgiCiAjaW5jbHVkZSAiU2NyaXB0RXZlbnRM
aXN0ZW5lci5oIgpAQCAtNTIyLDkgKzUyMyw5IEBAIHVuc2lnbmVkIEhUTUxGb3JtRWxlbWVudDo6
Zm9ybUVsZW1lbnRJbmQKICAgICAvLyB0aGUgZm9ybSdzIHRyZWUgb2YgY2hpbGRyZW47IHdlIGRv
bid0IHdhbnQgdG8gd2FsayB0aGUgZW50aXJlIHRyZWUgaW4gdGhhdAogICAgIC8vIGNvbW1vbiBj
YXNlIHRoYXQgb2NjdXJzIGR1cmluZyBwYXJzaW5nOyBpbnN0ZWFkIHdlJ2xsIGp1c3QgcmV0dXJu
IGEgdmFsdWUKICAgICAvLyB0aGF0IHNheXMgImFkZCB0aGlzIGZvcm0gZWxlbWVudCB0byB0aGUg
ZW5kIG9mIHRoZSBhcnJheSIuCi0gICAgaWYgKGVsZW1lbnQtPnRyYXZlcnNlTmV4dE5vZGUodGhp
cykpIHsKKyAgICBpZiAoTm9kZVRyYXZlcnNhbDo6bmV4dChlbGVtZW50LCB0aGlzKSkgewogICAg
ICAgICB1bnNpZ25lZCBpID0gbV9hc3NvY2lhdGVkRWxlbWVudHNCZWZvcmVJbmRleDsKLSAgICAg
ICAgZm9yIChOb2RlKiBub2RlID0gdGhpczsgbm9kZTsgbm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4
dE5vZGUodGhpcykpIHsKKyAgICAgICAgZm9yIChOb2RlKiBub2RlID0gdGhpczsgbm9kZTsgbm9k
ZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9kZSwgdGhpcykpIHsKICAgICAgICAgICAgIGlmIChu
b2RlID09IGVsZW1lbnQpIHsKICAgICAgICAgICAgICAgICArK21fYXNzb2NpYXRlZEVsZW1lbnRz
QWZ0ZXJJbmRleDsKICAgICAgICAgICAgICAgICByZXR1cm4gaTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTExhYmVsRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MTGFiZWxFbGVtZW50LmNwcAkocmV2aXNpb24gMTM2NjA2KQorKysgU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MTGFiZWxFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAs
NiArMzAsNyBAQAogI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKICNpbmNsdWRlICJGb3JtQXNzb2Np
YXRlZEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJOb2RlVHJh
dmVyc2FsLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNzUsNyArNzYsNyBAQCBMYWJl
bGFibGVFbGVtZW50KiBIVE1MTGFiZWxFbGVtZW50Ojpjb250CiAgICAgICAgIC8vIHBlciBodHRw
Oi8vZGV2LnczLm9yZy9odG1sNS9zcGVjL092ZXJ2aWV3Lmh0bWwjdGhlLWxhYmVsLWVsZW1lbnQK
ICAgICAgICAgLy8gdGhlIGZvcm0gZWxlbWVudCBtdXN0IGJlICJsYWJlbGFibGUgZm9ybS1hc3Nv
Y2lhdGVkIGVsZW1lbnQiLgogICAgICAgICBOb2RlKiBub2RlID0gdGhpczsKLSAgICAgICAgd2hp
bGUgKChub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSh0aGlzKSkpIHsKKyAgICAgICAgd2hp
bGUgKChub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dChub2RlLCB0aGlzKSkpIHsKICAgICAgICAg
ICAgIGlmIChMYWJlbGFibGVFbGVtZW50KiBlbGVtZW50ID0gbm9kZUFzTGFiZWxhYmxlRWxlbWVu
dChub2RlKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZWxlbWVudDsKICAgICAgICAgfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTGVnZW5kRWxlbWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTGVnZW5kRWxlbWVudC5jcHAJKHJldmlzaW9uIDEz
NjYwNikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTExlZ2VuZEVsZW1lbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiSFRNTEZpZWxkU2V0RWxlbWVu
dC5oIgogI2luY2x1ZGUgIkhUTUxGb3JtQ29udHJvbEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1M
TmFtZXMuaCIKKyNpbmNsdWRlICJOb2RlVHJhdmVyc2FsLmgiCiAjaW5jbHVkZSA8d3RmL1N0ZExp
YkV4dHJhcy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC01OCw3ICs1OSw3IEBAIEhUTUxG
b3JtQ29udHJvbEVsZW1lbnQqIEhUTUxMZWdlbmRFbGVtZW4KICAgICAvLyBGaW5kIGZpcnN0IGZv
cm0gZWxlbWVudCBpbnNpZGUgdGhlIGZpZWxkc2V0IHRoYXQgaXMgbm90IGEgbGVnZW5kIGVsZW1l
bnQuCiAgICAgLy8gRklYTUU6IFNob3VsZCB3ZSBjb25zaWRlciB0YWJpbmRleD8KICAgICBOb2Rl
KiBub2RlID0gZmllbGRzZXQ7Ci0gICAgd2hpbGUgKChub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0
Tm9kZShmaWVsZHNldCkpKSB7CisgICAgd2hpbGUgKChub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4
dChub2RlLCBmaWVsZHNldCkpKSB7CiAgICAgICAgIGlmIChub2RlLT5pc0VsZW1lbnROb2RlKCkp
IHsKICAgICAgICAgICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4o
bm9kZSk7CiAgICAgICAgICAgICBpZiAoZWxlbWVudC0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1hcEVsZW1lbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1hcEVsZW1lbnQuY3BwCShyZXZpc2lvbiAxMzY2
MDYpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNYXBFbGVtZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUg
IkhpdFRlc3RSZXN1bHQuaCIKICNpbmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVkZSAiTm9kZVRy
YXZlcnNhbC5oIgogI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgogCiB1c2luZyBuYW1lc3BhY2Ug
c3RkOwpAQCAtNjIsNyArNjMsNyBAQCBib29sIEhUTUxNYXBFbGVtZW50OjptYXBNb3VzZUV2ZW50
KExheW91CiB7CiAgICAgSFRNTEFyZWFFbGVtZW50KiBkZWZhdWx0QXJlYSA9IDA7CiAgICAgTm9k
ZSAqbm9kZSA9IHRoaXM7Ci0gICAgd2hpbGUgKChub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9k
ZSh0aGlzKSkpIHsKKyAgICB3aGlsZSAoKG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUs
IHRoaXMpKSkgewogICAgICAgICBpZiAobm9kZS0+aGFzVGFnTmFtZShhcmVhVGFnKSkgewogICAg
ICAgICAgICAgSFRNTEFyZWFFbGVtZW50KiBhcmVhRWx0ID0gc3RhdGljX2Nhc3Q8SFRNTEFyZWFF
bGVtZW50Kj4obm9kZSk7CiAgICAgICAgICAgICBpZiAoYXJlYUVsdC0+aXNEZWZhdWx0KCkpIHsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE5hbWVDb2xsZWN0aW9uLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxOYW1lQ29sbGVjdGlvbi5jcHAJKHJldmlz
aW9uIDEzNjYwNikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE5hbWVDb2xsZWN0aW9uLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIkhUTUxOYW1lcy5o
IgogI2luY2x1ZGUgIkhUTUxPYmplY3RFbGVtZW50LmgiCiAjaW5jbHVkZSAiTm9kZVJhcmVEYXRh
LmgiCisjaW5jbHVkZSAiTm9kZVRyYXZlcnNhbC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
QEAgLTU3LDkgKzU4LDkgQEAgRWxlbWVudCogSFRNTE5hbWVDb2xsZWN0aW9uOjp2aXJ0dWFsSXRl
bQogICAgIGlmICghcHJldmlvdXMpCiAgICAgICAgIGN1cnJlbnQgPSBiYXNlKCktPmZpcnN0Q2hp
bGQoKTsKICAgICBlbHNlCi0gICAgICAgIGN1cnJlbnQgPSBwcmV2aW91cy0+dHJhdmVyc2VOZXh0
Tm9kZShiYXNlKCkpOworICAgICAgICBjdXJyZW50ID0gTm9kZVRyYXZlcnNhbDo6bmV4dChwcmV2
aW91cywgYmFzZSgpKTsKIAotICAgIGZvciAoOyBjdXJyZW50OyBjdXJyZW50ID0gY3VycmVudC0+
dHJhdmVyc2VOZXh0Tm9kZShiYXNlKCkpKSB7CisgICAgZm9yICg7IGN1cnJlbnQ7IGN1cnJlbnQg
PSBOb2RlVHJhdmVyc2FsOjpuZXh0KGN1cnJlbnQsIGJhc2UoKSkpIHsKICAgICAgICAgaWYgKCFj
dXJyZW50LT5pc0VsZW1lbnROb2RlKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
RWxlbWVudCogZSA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihjdXJyZW50KTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTE9wdGlvbkVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTE9wdGlvbkVsZW1lbnQuY3BwCShyZXZpc2lvbiAxMzY2MDYpCisr
KyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPcHRpb25FbGVtZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgIkhUTUxTZWxlY3RFbGVtZW50LmgiCiAjaW5j
bHVkZSAiTm9kZVJlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiTm9kZVJlbmRlcmluZ0NvbnRleHQu
aCIKKyNpbmNsdWRlICJOb2RlVHJhdmVyc2FsLmgiCiAjaW5jbHVkZSAiUmVuZGVyTWVudUxpc3Qu
aCIKICNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgogI2luY2x1ZGUgIlNjcmlwdEVsZW1lbnQuaCIK
QEAgLTM4Myw5ICszODQsOSBAQCBTdHJpbmcgSFRNTE9wdGlvbkVsZW1lbnQ6OmNvbGxlY3RPcHRp
b25JCiAgICAgICAgICAgICB0ZXh0LmFwcGVuZChub2RlLT5ub2RlVmFsdWUoKSk7CiAgICAgICAg
IC8vIFRleHQgbm9kZXMgaW5zaWRlIHNjcmlwdCBlbGVtZW50cyBhcmUgbm90IHBhcnQgb2YgdGhl
IG9wdGlvbiB0ZXh0LgogICAgICAgICBpZiAobm9kZS0+aXNFbGVtZW50Tm9kZSgpICYmIHRvU2Ny
aXB0RWxlbWVudCh0b0VsZW1lbnQobm9kZSkpKQotICAgICAgICAgICAgbm9kZSA9IG5vZGUtPnRy
YXZlcnNlTmV4dFNpYmxpbmcodGhpcyk7CisgICAgICAgICAgICBub2RlID0gTm9kZVRyYXZlcnNh
bDo6bmV4dFNpYmxpbmcobm9kZSwgdGhpcyk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIG5v
ZGUgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKHRoaXMpOworICAgICAgICAgICAgbm9kZSA9IE5v
ZGVUcmF2ZXJzYWw6Om5leHQobm9kZSwgdGhpcyk7CiAgICAgfQogICAgIHJldHVybiB0ZXh0LnRv
U3RyaW5nKCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQcm9wZXJ0aWVzQ29s
bGVjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUHJvcGVy
dGllc0NvbGxlY3Rpb24uY3BwCShyZXZpc2lvbiAxMzY2MDYpCisrKyBTb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxQcm9wZXJ0aWVzQ29sbGVjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc2LDcg
Kzc2LDggQEAgc3RhdGljIE5vZGUqIG5leHROb2RlV2l0aFByb3BlcnR5KE5vZGUqIAogICAgIC8v
IHRoYXQgZGVjbGFyZXMgdGhlIHByb3BlcnR5LiBJZiB0aGUgcHJvcGVydHkgaGFzIGFuIGl0ZW1z
Y29wZSBhdHRyaWJ1dGUgc3BlY2lmaWVkIHRoZW4gd2UgbmVlZAogICAgIC8vIHRvIHRyYXZlcnNl
IHRoZSBuZXh0IHNpYmxpbmcuCiAgICAgcmV0dXJuIHByZXZpb3VzID09IG93bmVyTm9kZSB8fCAo
cHJldmlvdXMtPmlzSFRNTEVsZW1lbnQoKSAmJiAhdG9IVE1MRWxlbWVudChwcmV2aW91cyktPmZh
c3RIYXNBdHRyaWJ1dGUoaXRlbXNjb3BlQXR0cikpCi0gICAgICAgICAgICA/IHByZXZpb3VzLT50
cmF2ZXJzZU5leHROb2RlKHJvb3ROb2RlKSA6IHByZXZpb3VzLT50cmF2ZXJzZU5leHRTaWJsaW5n
KHJvb3ROb2RlKTsKKyAgICAgICAgPyBwcmV2aW91cy0+Tm9kZVRyYXZlcnNhbDo6bmV4dChyb290
Tm9kZSkKKyAgICAgICAgOiBwcmV2aW91cy0+Tm9kZVRyYXZlcnNhbDo6bmV4dFNpYmxpbmcocm9v
dE5vZGUpOwogfQogCiBFbGVtZW50KiBIVE1MUHJvcGVydGllc0NvbGxlY3Rpb246OnZpcnR1YWxJ
dGVtQWZ0ZXIodW5zaWduZWQmIG9mZnNldEluQXJyYXksIEVsZW1lbnQqIHByZXZpb3VzSXRlbSkg
Y29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQuY3BwCShy
ZXZpc2lvbiAxMzY2MDYpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTZWxlY3RFbGVtZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsNiArNDUsNyBAQAogI2luY2x1ZGUgIkxvY2FsaXpl
ZFN0cmluZ3MuaCIKICNpbmNsdWRlICJNb3VzZUV2ZW50LmgiCiAjaW5jbHVkZSAiTm9kZVJlbmRl
cmluZ0NvbnRleHQuaCIKKyNpbmNsdWRlICJOb2RlVHJhdmVyc2FsLmgiCiAjaW5jbHVkZSAiUGFn
ZS5oIgogI2luY2x1ZGUgIlJlbmRlckxpc3RCb3guaCIKICNpbmNsdWRlICJSZW5kZXJNZW51TGlz
dC5oIgpAQCAtNzM2LDcgKzczNyw3IEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6OnJlY2FsY0xp
c3RJdGVtcygKICAgICBIVE1MT3B0aW9uRWxlbWVudCogZmlyc3RPcHRpb24gPSAwOwogICAgIGZv
ciAoTm9kZSogY3VycmVudE5vZGUgPSB0aGlzLT5maXJzdENoaWxkKCk7IGN1cnJlbnROb2RlOykg
ewogICAgICAgICBpZiAoIWN1cnJlbnROb2RlLT5pc0hUTUxFbGVtZW50KCkpIHsKLSAgICAgICAg
ICAgIGN1cnJlbnROb2RlID0gY3VycmVudE5vZGUtPnRyYXZlcnNlTmV4dFNpYmxpbmcodGhpcyk7
CisgICAgICAgICAgICBjdXJyZW50Tm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHRTaWJsaW5nKGN1
cnJlbnROb2RlLCB0aGlzKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKQEAg
LTc3NSwxMiArNzc2LDEyIEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6OnJlY2FsY0xpc3RJdGVt
cygKICAgICAgICAgICAgIG1fbGlzdEl0ZW1zLmFwcGVuZChjdXJyZW50KTsKIAogICAgICAgICAv
LyBJbiBjb25mb3JtaW5nIEhUTUwgY29kZSwgb25seSA8b3B0Z3JvdXA+IGFuZCA8b3B0aW9uPiB3
aWxsIGJlIGZvdW5kCi0gICAgICAgIC8vIHdpdGhpbiBhIDxzZWxlY3Q+LiBXZSBjYWxsIHRyYXZl
cnNlTmV4dFNpYmxpbmcgc28gdGhhdCB3ZSBvbmx5IHN0ZXAKKyAgICAgICAgLy8gd2l0aGluIGEg
PHNlbGVjdD4uIFdlIGNhbGwgTm9kZVRyYXZlcnNhbDo6bmV4dFNpYmxpbmcgc28gdGhhdCB3ZSBv
bmx5IHN0ZXAKICAgICAgICAgLy8gaW50byB0aG9zZSB0YWdzIHRoYXQgd2UgY2hvb3NlIHRvLiBG
b3Igd2ViLWNvbXBhdCwgd2Ugc2hvdWxkIGNvcGUKICAgICAgICAgLy8gd2l0aCB0aGUgY2FzZSB3
aGVyZSBvZGQgdGFncyBsaWtlIGEgPGRpdj4gaGF2ZSBiZWVuIGFkZGVkIGJ1dCB3ZQogICAgICAg
ICAvLyBoYW5kbGUgdGhpcyBiZWNhdXNlIHN1Y2ggdGFncyBoYXZlIGFscmVhZHkgYmVlbiByZW1v
dmVkIGZyb20gdGhlCiAgICAgICAgIC8vIDxzZWxlY3Q+J3Mgc3VidHJlZSBhdCB0aGlzIHBvaW50
LgotICAgICAgICBjdXJyZW50Tm9kZSA9IGN1cnJlbnROb2RlLT50cmF2ZXJzZU5leHRTaWJsaW5n
KHRoaXMpOworICAgICAgICBjdXJyZW50Tm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHRTaWJsaW5n
KGN1cnJlbnROb2RlLCB0aGlzKTsKICAgICB9CiAKICAgICBpZiAoIWZvdW5kU2VsZWN0ZWQgJiYg
bV9zaXplIDw9IDEgJiYgZmlyc3RPcHRpb24gJiYgIWZpcnN0T3B0aW9uLT5zZWxlY3RlZCgpKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEZvcm1Db250cm9sRWxl
bWVudC5jcHAJKHJldmlzaW9uIDEzNjYwNikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRl
eHRGb3JtQ29udHJvbEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNyw3IEBA
CiAjaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgog
I2luY2x1ZGUgIk5vZGVSZW5kZXJpbmdDb250ZXh0LmgiCisjaW5jbHVkZSAiTm9kZVRyYXZlcnNh
bC5oIgogI2luY2x1ZGUgIlJlbmRlckJveC5oIgogI2luY2x1ZGUgIlJlbmRlclRleHRDb250cm9s
LmgiCiAjaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKQEAgLTQ2Miw3ICs0NjMsNyBAQCBQYXNzUmVm
UHRyPFJhbmdlPiBIVE1MVGV4dEZvcm1Db250cm9sRWxlCiAgICAgaW50IG9mZnNldCA9IDA7CiAg
ICAgTm9kZSogc3RhcnROb2RlID0gMDsKICAgICBOb2RlKiBlbmROb2RlID0gMDsKLSAgICBmb3Ig
KE5vZGUqIG5vZGUgPSBpbm5lclRleHQtPmZpcnN0Q2hpbGQoKTsgbm9kZTsgbm9kZSA9IG5vZGUt
PnRyYXZlcnNlTmV4dE5vZGUoaW5uZXJUZXh0KSkgeworICAgIGZvciAoTm9kZSogbm9kZSA9IGlu
bmVyVGV4dC0+Zmlyc3RDaGlsZCgpOyBub2RlOyBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dChu
b2RlLCBpbm5lclRleHQpKSB7CiAgICAgICAgIEFTU0VSVCghbm9kZS0+Zmlyc3RDaGlsZCgpKTsK
ICAgICAgICAgQVNTRVJUKG5vZGUtPmlzVGV4dE5vZGUoKSB8fCBub2RlLT5oYXNUYWdOYW1lKGJy
VGFnKSk7CiAgICAgICAgIGludCBsZW5ndGggPSBub2RlLT5pc1RleHROb2RlKCkgPyBsYXN0T2Zm
c2V0SW5Ob2RlKG5vZGUpIDogMTsKQEAgLTU2MSw3ICs1NjIsNyBAQCBTdHJpbmcgSFRNTFRleHRG
b3JtQ29udHJvbEVsZW1lbnQ6OmlubmVyCiAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwog
CiAgICAgU3RyaW5nQnVpbGRlciByZXN1bHQ7Ci0gICAgZm9yIChOb2RlKiBub2RlID0gaW5uZXJU
ZXh0OyBub2RlOyBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZShpbm5lclRleHQpKSB7Cisg
ICAgZm9yIChOb2RlKiBub2RlID0gaW5uZXJUZXh0OyBub2RlOyBub2RlID0gTm9kZVRyYXZlcnNh
bDo6bmV4dChub2RlLCBpbm5lclRleHQpKSB7CiAgICAgICAgIGlmIChub2RlLT5oYXNUYWdOYW1l
KGJyVGFnKSkKICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQobmV3bGluZUNoYXJhY3Rlcik7CiAg
ICAgICAgIGVsc2UgaWYgKG5vZGUtPmlzVGV4dE5vZGUoKSkKQEAgLTYwOCw3ICs2MDksNyBAQCBT
dHJpbmcgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OnZhbHVlCiAgICAgZ2V0TmV4dFNvZnRC
cmVhayhsaW5lLCBicmVha05vZGUsIGJyZWFrT2Zmc2V0KTsKIAogICAgIFN0cmluZ0J1aWxkZXIg
cmVzdWx0OwotICAgIGZvciAoTm9kZSogbm9kZSA9IGlubmVyVGV4dC0+Zmlyc3RDaGlsZCgpOyBu
b2RlOyBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZShpbm5lclRleHQpKSB7CisgICAgZm9y
IChOb2RlKiBub2RlID0gaW5uZXJUZXh0LT5maXJzdENoaWxkKCk7IG5vZGU7IG5vZGUgPSBOb2Rl
VHJhdmVyc2FsOjpuZXh0KG5vZGUsIGlubmVyVGV4dCkpIHsKICAgICAgICAgaWYgKG5vZGUtPmhh
c1RhZ05hbWUoYnJUYWcpKQogICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChuZXdsaW5lQ2hhcmFj
dGVyKTsKICAgICAgICAgZWxzZSBpZiAobm9kZS0+aXNUZXh0Tm9kZSgpKSB7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9odG1sL1JhZGlvSW5wdXRUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9odG1sL1JhZGlvSW5wdXRUeXBlLmNwcAkocmV2aXNpb24gMTM2NjA2KQorKysgU291
cmNlL1dlYkNvcmUvaHRtbC9SYWRpb0lucHV0VHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5
LDYgKzI5LDcgQEAKICNpbmNsdWRlICJLZXlib2FyZEV2ZW50LmgiCiAjaW5jbHVkZSAiTG9jYWxp
emVkU3RyaW5ncy5oIgogI2luY2x1ZGUgIk1vdXNlRXZlbnQuaCIKKyNpbmNsdWRlICJOb2RlVHJh
dmVyc2FsLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJTcGF0aWFsTmF2aWdh
dGlvbi5oIgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CkBAIC04NCw3ICs4NSw3IEBAIHZv
aWQgUmFkaW9JbnB1dFR5cGU6OmhhbmRsZUtleWRvd25FdmVudCgKICAgICAvLyBXZSBjYW4gb25s
eSBzdGF5IHdpdGhpbiB0aGUgZm9ybSdzIGNoaWxkcmVuIGlmIHRoZSBmb3JtIGhhc24ndCBiZWVu
IGRlbW90ZWQgdG8gYSBsZWFmIGJlY2F1c2UKICAgICAvLyBvZiBtYWxmb3JtZWQgSFRNTC4KICAg
ICBOb2RlKiBub2RlID0gZWxlbWVudCgpOwotICAgIHdoaWxlICgobm9kZSA9IChmb3J3YXJkID8g
bm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgpIDogbm9kZS0+dHJhdmVyc2VQcmV2aW91c05vZGUoKSkp
KSB7CisgICAgd2hpbGUgKChub2RlID0gKGZvcndhcmQgPyBOb2RlVHJhdmVyc2FsOjpuZXh0KG5v
ZGUpIDogTm9kZVRyYXZlcnNhbDo6cHJldmlvdXMobm9kZSkpKSkgewogICAgICAgICAvLyBPbmNl
IHdlIGVuY291bnRlciBhIGZvcm0gZWxlbWVudCwgd2Uga25vdyB3ZSdyZSB0aHJvdWdoLgogICAg
ICAgICBpZiAobm9kZS0+aGFzVGFnTmFtZShmb3JtVGFnKSkKICAgICAgICAgICAgIGJyZWFrOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvQ29udGVudERpc3RyaWJ1dG9yLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9Db250ZW50RGlzdHJpYnV0
b3IuY3BwCShyZXZpc2lvbiAxMzY2MDYpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9D
b250ZW50RGlzdHJpYnV0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAj
aW5jbHVkZSAiRWxlbWVudFNoYWRvdy5oIgogI2luY2x1ZGUgIkhUTUxDb250ZW50RWxlbWVudC5o
IgogI2luY2x1ZGUgIkhUTUxTaGFkb3dFbGVtZW50LmgiCisjaW5jbHVkZSAiTm9kZVRyYXZlcnNh
bC5oIgogI2luY2x1ZGUgIlNoYWRvd1Jvb3QuaCIKIAogCkBAIC04NCw3ICs4NSw3IEBAIGNvbnN0
IFZlY3RvcjxJbnNlcnRpb25Qb2ludCo+JiBTaGFkb3dSb28KICAgICBpZiAoIXNoYWRvd1Jvb3Qt
Pmhhc0luc2VydGlvblBvaW50KCkpCiAgICAgICAgIHJldHVybiBtX2luc2VydGlvblBvaW50TGlz
dDsKIAotICAgIGZvciAoTm9kZSogbm9kZSA9IHNoYWRvd1Jvb3Q7IG5vZGU7IG5vZGUgPSBub2Rl
LT50cmF2ZXJzZU5leHROb2RlKHNoYWRvd1Jvb3QpKSB7CisgICAgZm9yIChOb2RlKiBub2RlID0g
c2hhZG93Um9vdDsgbm9kZTsgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9kZSwgc2hhZG93
Um9vdCkpIHsKICAgICAgICAgaWYgKG5vZGUtPmlzSW5zZXJ0aW9uUG9pbnQoKSkKICAgICAgICAg
ICAgIG1faW5zZXJ0aW9uUG9pbnRMaXN0LmFwcGVuZCh0b0luc2VydGlvblBvaW50KG5vZGUpKTsK
ICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01B
Z2VudC5jcHAJKHJldmlzaW9uIDEzNjYwNikKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JET01BZ2VudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc2LDYgKzc2LDcgQEAKICNp
bmNsdWRlICJNdXRhdGlvbkV2ZW50LmgiCiAjaW5jbHVkZSAiTm9kZS5oIgogI2luY2x1ZGUgIk5v
ZGVMaXN0LmgiCisjaW5jbHVkZSAiTm9kZVRyYXZlcnNhbC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIK
ICNpbmNsdWRlICJQYXN0ZWJvYXJkLmgiCiAjaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKQEAgLTgz
Niw3ICs4MzcsNyBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpwZXJmb3JtU2VhcmNoKEVyCiAg
ICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICAvLyBNYW51YWwgcGxhaW4gdGV4dCBzZWFy
Y2guCi0gICAgICAgIHdoaWxlICgobm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoZG9jdW1l
bnQtPmRvY3VtZW50RWxlbWVudCgpKSkpIHsKKyAgICAgICAgd2hpbGUgKChub2RlID0gTm9kZVRy
YXZlcnNhbDo6bmV4dChub2RlLCBkb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50KCkpKSkgewogICAg
ICAgICAgICAgc3dpdGNoIChub2RlLT5ub2RlVHlwZSgpKSB7CiAgICAgICAgICAgICBjYXNlIE5v
ZGU6OlRFWFRfTk9ERToKICAgICAgICAgICAgIGNhc2UgTm9kZTo6Q09NTUVOVF9OT0RFOgpJbmRl
eDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvck1lbW9yeUFnZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yTWVtb3J5QWdlbnQu
Y3BwCShyZXZpc2lvbiAxMzY2MDYpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yTWVtb3J5QWdlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw2ICs0OSw3IEBACiAjaW5j
bHVkZSAiTWVtb3J5SW5zdHJ1bWVudGF0aW9uSW1wbC5oIgogI2luY2x1ZGUgIk1lbW9yeVVzYWdl
U3VwcG9ydC5oIgogI2luY2x1ZGUgIk5vZGUuaCIKKyNpbmNsdWRlICJOb2RlVHJhdmVyc2FsLmgi
CiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlNjcmlwdEdDRXZlbnQuaCIKICNpbmNsdWRl
ICJTY3JpcHRQcm9maWxlci5oIgpAQCAtMjMxLDcgKzIzMiw3IEBAIHByaXZhdGU6CiAgICAgewog
ICAgICAgICBOb2RlKiBjdXJyZW50Tm9kZSA9IHJvb3ROb2RlOwogICAgICAgICBjb2xsZWN0TGlz
dGVuZXJzSW5mbyhyb290Tm9kZSk7Ci0gICAgICAgIHdoaWxlICgoY3VycmVudE5vZGUgPSBjdXJy
ZW50Tm9kZS0+dHJhdmVyc2VOZXh0Tm9kZShyb290Tm9kZSkpKSB7CisgICAgICAgIHdoaWxlICgo
Y3VycmVudE5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KGN1cnJlbnROb2RlLCByb290Tm9kZSkp
KSB7CiAgICAgICAgICAgICArK21fdG90YWxOb2RlQ291bnQ7CiAgICAgICAgICAgICBjb2xsZWN0
Tm9kZVN0YXRpc3RpY3MoY3VycmVudE5vZGUpOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wYWdlL0ZvY3VzQ29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGFnZS9Gb2N1c0NvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAxMzY2MDYpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wYWdlL0ZvY3VzQ29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDYg
KzQ4LDcgQEAKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0
LmgiCiAjaW5jbHVkZSAiS2V5Ym9hcmRFdmVudC5oIgorI2luY2x1ZGUgIk5vZGVUcmF2ZXJzYWwu
aCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUmFuZ2UuaCIKICNpbmNsdWRlICJSZW5k
ZXJPYmplY3QuaCIKQEAgLTc3NSw3ICs3NzYsNyBAQCB2b2lkIEZvY3VzQ29udHJvbGxlcjo6Zmlu
ZEZvY3VzQ2FuZGlkYXRlCiAgICAgY3VycmVudC5mb2N1c2FibGVOb2RlID0gZm9jdXNlZE5vZGU7
CiAgICAgY3VycmVudC52aXNpYmxlTm9kZSA9IGZvY3VzZWROb2RlOwogCi0gICAgZm9yICg7IG5v
ZGU7IG5vZGUgPSAobm9kZS0+aXNGcmFtZU93bmVyRWxlbWVudCgpIHx8IGNhblNjcm9sbEluRGly
ZWN0aW9uKG5vZGUsIGRpcmVjdGlvbikpID8gbm9kZS0+dHJhdmVyc2VOZXh0U2libGluZyhjb250
YWluZXIpIDogbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZShjb250YWluZXIpKSB7CisgICAgZm9yICg7
IG5vZGU7IG5vZGUgPSAobm9kZS0+aXNGcmFtZU93bmVyRWxlbWVudCgpIHx8IGNhblNjcm9sbElu
RGlyZWN0aW9uKG5vZGUsIGRpcmVjdGlvbikpID8gTm9kZVRyYXZlcnNhbDo6bmV4dFNpYmxpbmco
bm9kZSwgY29udGFpbmVyKSA6IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9kZSwgY29udGFpbmVyKSkg
ewogICAgICAgICBpZiAobm9kZSA9PSBmb2N1c2VkTm9kZSkKICAgICAgICAgICAgIGNvbnRpbnVl
OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAkocmV2aXNpb24gMTM2NjA2KQorKysgU291cmNl
L1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDYgKzYzLDcgQEAK
ICNpbmNsdWRlICJNZWRpYUZlYXR1cmVOYW1lcy5oIgogI2luY2x1ZGUgIk5hdmlnYXRvci5oIgog
I2luY2x1ZGUgIk5vZGVMaXN0LmgiCisjaW5jbHVkZSAiTm9kZVRyYXZlcnNhbC5oIgogI2luY2x1
ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQYWdlQ2FjaGUuaCIKICNpbmNsdWRlICJQYWdlR3JvdXAu
aCIKQEAgLTM3NSw3ICszNzYsNyBAQCBTdHJpbmcgRnJhbWU6OnNlYXJjaEZvckxhYmVsc0Fib3Zl
Q2VsbChSCiAgICAgaWYgKGFib3ZlQ2VsbCkgewogICAgICAgICAvLyBzZWFyY2ggd2l0aGluIHRo
ZSBhYm92ZSBjZWxsIHdlIGZvdW5kIGZvciBhIG1hdGNoCiAgICAgICAgIHNpemVfdCBsZW5ndGhT
ZWFyY2hlZCA9IDA7ICAgIAotICAgICAgICBmb3IgKE5vZGUqIG4gPSBhYm92ZUNlbGwtPmZpcnN0
Q2hpbGQoKTsgbjsgbiA9IG4tPnRyYXZlcnNlTmV4dE5vZGUoYWJvdmVDZWxsKSkgeworICAgICAg
ICBmb3IgKE5vZGUqIG4gPSBhYm92ZUNlbGwtPmZpcnN0Q2hpbGQoKTsgbjsgbiA9IE5vZGVUcmF2
ZXJzYWw6Om5leHQobiwgYWJvdmVDZWxsKSkgewogICAgICAgICAgICAgaWYgKG4tPmlzVGV4dE5v
ZGUoKSAmJiBuLT5yZW5kZXJlcigpICYmIG4tPnJlbmRlcmVyKCktPnN0eWxlKCktPnZpc2liaWxp
dHkoKSA9PSBWSVNJQkxFKSB7CiAgICAgICAgICAgICAgICAgLy8gRm9yIGVhY2ggdGV4dCBjaHVu
aywgcnVuIHRoZSByZWdleHAKICAgICAgICAgICAgICAgICBTdHJpbmcgbm9kZVN0cmluZyA9IG4t
Pm5vZGVWYWx1ZSgpOwpAQCAtNDE2LDEwICs0MTcsNyBAQCBTdHJpbmcgRnJhbWU6OnNlYXJjaEZv
ckxhYmVsc0JlZm9yZUVsZW1lCiAgICAgLy8gd2FsayBiYWNrd2FyZHMgaW4gdGhlIG5vZGUgdHJl
ZSwgdW50aWwgYW5vdGhlciBlbGVtZW50LCBvciBmb3JtLCBvciBlbmQgb2YgdHJlZQogICAgIGlu
dCB1bnNpZ25lZCBsZW5ndGhTZWFyY2hlZCA9IDA7CiAgICAgTm9kZSogbjsKLSAgICBmb3IgKG4g
PSBlbGVtZW50LT50cmF2ZXJzZVByZXZpb3VzTm9kZSgpOwotICAgICAgICAgbiAmJiBsZW5ndGhT
ZWFyY2hlZCA8IGNoYXJzU2VhcmNoZWRUaHJlc2hvbGQ7Ci0gICAgICAgICBuID0gbi0+dHJhdmVy
c2VQcmV2aW91c05vZGUoKSkKLSAgICB7CisgICAgZm9yIChuID0gTm9kZVRyYXZlcnNhbDo6cHJl
dmlvdXMoZWxlbWVudCk7IG4gJiYgbGVuZ3RoU2VhcmNoZWQgPCBjaGFyc1NlYXJjaGVkVGhyZXNo
b2xkOyBuID0gTm9kZVRyYXZlcnNhbDo6cHJldmlvdXMobikpIHsKICAgICAgICAgaWYgKG4tPmhh
c1RhZ05hbWUoZm9ybVRhZykKICAgICAgICAgICAgIHx8IChuLT5pc0hUTUxFbGVtZW50KCkgJiYg
c3RhdGljX2Nhc3Q8RWxlbWVudCo+KG4pLT5pc0Zvcm1Db250cm9sRWxlbWVudCgpKSkKICAgICAg
ICAgewpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck5hbWVkRmxvd1RocmVh
ZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck5hbWVk
Rmxvd1RocmVhZC5jcHAJKHJldmlzaW9uIDEzNjYwNikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJOYW1lZEZsb3dUaHJlYWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsy
OSw3IEBACiAjaW5jbHVkZSAiRmxvd1RocmVhZENvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJJbmxp
bmVUZXh0Qm94LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgiCisjaW5j
bHVkZSAiTm9kZVRyYXZlcnNhbC5oIgogI2luY2x1ZGUgIlBvc2l0aW9uLmgiCiAjaW5jbHVkZSAi
UmVuZGVySW5saW5lLmgiCiAjaW5jbHVkZSAiUmVuZGVyUmVnaW9uLmgiCkBAIC00ODQsNyArNDg1
LDcgQEAgdm9pZCBSZW5kZXJOYW1lZEZsb3dUaHJlYWQ6OmdldFJhbmdlcyhWZQogICAgICAgICBi
b29sIHNraXBPdmVyT3V0c2lkZU5vZGVzID0gZmFsc2U7CiAgICAgICAgIE5vZGUqIGxhc3RFbmRO
b2RlID0gMDsKIAotICAgICAgICBmb3IgKE5vZGUqIG5vZGUgPSBjb250ZW50Tm9kZTsgbm9kZTsg
bm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoY29udGVudE5vZGUpKSB7CisgICAgICAgIGZv
ciAoTm9kZSogbm9kZSA9IGNvbnRlbnROb2RlOyBub2RlOyBub2RlID0gTm9kZVRyYXZlcnNhbDo6
bmV4dChub2RlLCBjb250ZW50Tm9kZSkpIHsKICAgICAgICAgICAgIFJlbmRlck9iamVjdCogcmVu
ZGVyZXIgPSBub2RlLT5yZW5kZXJlcigpOwogICAgICAgICAgICAgaWYgKCFyZW5kZXJlcikKICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTVkdF
bGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU1ZHRWxlbWVu
dC5jcHAJKHJldmlzaW9uIDEzNjYwNikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTVkdFbGVt
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgIkZyYW1l
VHJlZS5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgor
I2luY2x1ZGUgIk5vZGVUcmF2ZXJzYWwuaCIKICNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKICNp
bmNsdWRlICJSZW5kZXJQYXJ0LmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2UuaCIKQEAg
LTM0NSw3ICszNDYsNyBAQCB2b2lkIFNWR1NWR0VsZW1lbnQ6OmZvcmNlUmVkcmF3KCkKIFBhc3NS
ZWZQdHI8Tm9kZUxpc3Q+IFNWR1NWR0VsZW1lbnQ6OmNvbGxlY3RJbnRlcnNlY3Rpb25PckVuY2xv
c3VyZUxpc3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBTVkdFbGVtZW50KiByZWZlcmVuY2VFbGVt
ZW50LCBDb2xsZWN0SW50ZXJzZWN0aW9uT3JFbmNsb3N1cmUgY29sbGVjdCkgY29uc3QKIHsKICAg
ICBWZWN0b3I8UmVmUHRyPE5vZGU+ID4gbm9kZXM7Ci0gICAgTm9kZSogbm9kZSA9IHRyYXZlcnNl
TmV4dE5vZGUocmVmZXJlbmNlRWxlbWVudCA/IHJlZmVyZW5jZUVsZW1lbnQgOiB0aGlzKTsKKyAg
ICBOb2RlKiBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dChyZWZlcmVuY2VFbGVtZW50ID8gcmVm
ZXJlbmNlRWxlbWVudCA6IHRoaXMpOwogICAgIHdoaWxlIChub2RlKSB7CiAgICAgICAgIGlmIChu
b2RlLT5pc1NWR0VsZW1lbnQoKSkgeyAKICAgICAgICAgICAgIGlmIChjb2xsZWN0ID09IENvbGxl
Y3RJbnRlcnNlY3Rpb25MaXN0KSB7CkBAIC0zNTcsNyArMzU4LDcgQEAgUGFzc1JlZlB0cjxOb2Rl
TGlzdD4gU1ZHU1ZHRWxlbWVudDo6Y29sbAogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAg
ICAgICAgbm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUocmVmZXJlbmNlRWxlbWVudCA/IHJl
ZmVyZW5jZUVsZW1lbnQgOiB0aGlzKTsKKyAgICAgICAgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5l
eHQobm9kZSwgcmVmZXJlbmNlRWxlbWVudCA/IHJlZmVyZW5jZUVsZW1lbnQgOiB0aGlzKTsKICAg
ICB9CiAgICAgcmV0dXJuIFN0YXRpY05vZGVMaXN0OjphZG9wdChub2Rlcyk7CiB9CkBAIC03ODcs
NyArNzg4LDcgQEAgRWxlbWVudCogU1ZHU1ZHRWxlbWVudDo6Z2V0RWxlbWVudEJ5SWQoYwogCiAg
ICAgLy8gRmFsbCBiYWNrIHRvIHRyYXZlcnNpbmcgb3VyIHN1YnRyZWUuIER1cGxpY2F0ZSBpZHMg
YXJlIGFsbG93ZWQsIHRoZSBmaXJzdCBmb3VuZCB3aWxsCiAgICAgLy8gYmUgcmV0dXJuZWQuCi0g
ICAgZm9yIChOb2RlKiBub2RlID0gZmlyc3RDaGlsZCgpOyBub2RlOyBub2RlID0gbm9kZS0+dHJh
dmVyc2VOZXh0Tm9kZSh0aGlzKSkgeworICAgIGZvciAoTm9kZSogbm9kZSA9IGZpcnN0Q2hpbGQo
KTsgbm9kZTsgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9kZSwgdGhpcykpIHsKICAgICAg
ICAgaWYgKCFub2RlLT5pc0VsZW1lbnROb2RlKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIApJ
bmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1VzZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdVc2VFbGVtZW50LmNwcAkocmV2aXNpb24gMTM2NjA2KQor
KysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1VzZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSAiRXZlbnRMaXN0ZW5lci5oIgogI2luY2x1ZGUgIkhU
TUxOYW1lcy5oIgogI2luY2x1ZGUgIk5vZGVSZW5kZXJTdHlsZS5oIgorI2luY2x1ZGUgIk5vZGVU
cmF2ZXJzYWwuaCIKICNpbmNsdWRlICJSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lci5oIgogI2luY2x1
ZGUgIlJlbmRlclNWR1Jlc291cmNlLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHVHJhbnNmb3JtYWJs
ZUNvbnRhaW5lci5oIgpAQCAtNjg5LDEyICs2OTAsMTIgQEAgc3RhdGljIGlubGluZSB2b2lkIHJl
bW92ZURpc2FsbG93ZWRFbGVtZQogICAgIE5vZGUqIG5vZGUgPSBzdWJ0cmVlLT5maXJzdENoaWxk
KCk7CiAgICAgd2hpbGUgKG5vZGUpIHsKICAgICAgICAgaWYgKGlzRGlzYWxsb3dlZEVsZW1lbnQo
bm9kZSkpIHsKLSAgICAgICAgICAgIE5vZGUqIG5leHQgPSBub2RlLT50cmF2ZXJzZU5leHRTaWJs
aW5nKHN1YnRyZWUpOworICAgICAgICAgICAgTm9kZSogbmV4dCA9IE5vZGVUcmF2ZXJzYWw6Om5l
eHRTaWJsaW5nKG5vZGUsIHN1YnRyZWUpOwogICAgICAgICAgICAgLy8gVGhlIHN1YnRyZWUgaXMg
bm90IGluIGRvY3VtZW50IHNvIHRoaXMgd29uJ3QgZ2VuZXJhdGUgZXZlbnRzIHRoYXQgY291bGQg
bXV0YXRlIHRoZSB0cmVlLgogICAgICAgICAgICAgbm9kZS0+cGFyZW50Tm9kZSgpLT5yZW1vdmVD
aGlsZChub2RlKTsKICAgICAgICAgICAgIG5vZGUgPSBuZXh0OwogICAgICAgICB9IGVsc2UKLSAg
ICAgICAgICAgIG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKHN1YnRyZWUpOworICAgICAg
ICAgICAgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9kZSwgc3VidHJlZSk7CiAgICAgfQog
fQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NNSUxUaW1lQ29udGFpbmVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NNSUxUaW1l
Q29udGFpbmVyLmNwcAkocmV2aXNpb24gMTM2NjA2KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL2Fu
aW1hdGlvbi9TTUlMVGltZUNvbnRhaW5lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4
LDcgQEAKIAogI2lmIEVOQUJMRShTVkcpCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRl
ICJOb2RlVHJhdmVyc2FsLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJTVkdT
TUlMRWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR1NWR0VsZW1lbnQuaCIKQEAgLTIyNCw3ICsyMjUs
NyBAQCB2b2lkIFNNSUxUaW1lQ29udGFpbmVyOjp0aW1lckZpcmVkKFRpbWVyCiB2b2lkIFNNSUxU
aW1lQ29udGFpbmVyOjp1cGRhdGVEb2N1bWVudE9yZGVySW5kZXhlcygpCiB7CiAgICAgdW5zaWdu
ZWQgdGltaW5nRWxlbWVudENvdW50ID0gMDsKLSAgICBmb3IgKE5vZGUqIG5vZGUgPSBtX293bmVy
U1ZHRWxlbWVudDsgbm9kZTsgbm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUobV9vd25lclNW
R0VsZW1lbnQpKSB7CisgICAgZm9yIChOb2RlKiBub2RlID0gbV9vd25lclNWR0VsZW1lbnQ7IG5v
ZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUsIG1fb3duZXJTVkdFbGVtZW50KSkg
ewogICAgICAgICBpZiAoU1ZHU01JTEVsZW1lbnQ6OmlzU01JTEVsZW1lbnQobm9kZSkpCiAgICAg
ICAgICAgICBzdGF0aWNfY2FzdDxTVkdTTUlMRWxlbWVudCo+KG5vZGUpLT5zZXREb2N1bWVudE9y
ZGVySW5kZXgodGltaW5nRWxlbWVudENvdW50KyspOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3htbC9YUGF0aE5vZGVTZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3ht
bC9YUGF0aE5vZGVTZXQuY3BwCShyZXZpc2lvbiAxMzY2MDYpCisrKyBTb3VyY2UvV2ViQ29yZS94
bWwvWFBhdGhOb2RlU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2lu
Y2x1ZGUgIkF0dHIuaCIKICNpbmNsdWRlICJFbGVtZW50LmgiCiAjaW5jbHVkZSAiTm9kZS5oIgor
I2luY2x1ZGUgIk5vZGVUcmF2ZXJzYWwuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogbmFtZXNw
YWNlIFhQYXRoIHsKQEAgLTIwNiw3ICsyMDcsNyBAQCB2b2lkIE5vZGVTZXQ6OnRyYXZlcnNhbFNv
cnQoKSBjb25zdAogICAgIFZlY3RvcjxSZWZQdHI8Tm9kZT4gPiBzb3J0ZWROb2RlczsKICAgICBz
b3J0ZWROb2Rlcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG5vZGVDb3VudCk7CiAKLSAgICBmb3Ig
KE5vZGUqIG4gPSBmaW5kUm9vdE5vZGUobV9ub2Rlcy5maXJzdCgpLmdldCgpKTsgbjsgbiA9IG4t
PnRyYXZlcnNlTmV4dE5vZGUoKSkgeworICAgIGZvciAoTm9kZSogbiA9IGZpbmRSb290Tm9kZSht
X25vZGVzLmZpcnN0KCkuZ2V0KCkpOyBuOyBuID0gTm9kZVRyYXZlcnNhbDo6bmV4dChuKSkgewog
ICAgICAgICBpZiAobm9kZXMuY29udGFpbnMobikpCiAgICAgICAgICAgICBzb3J0ZWROb2Rlcy5h
cHBlbmQobik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3htbC9YUGF0aFN0ZXAuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3htbC9YUGF0aFN0ZXAuY3BwCShyZXZpc2lvbiAxMzY2
MDYpCisrKyBTb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhTdGVwLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkF0dHIuaCIKICNpbmNsdWRlICJEb2N1bWVudC5o
IgogI2luY2x1ZGUgIkVsZW1lbnQuaCIKKyNpbmNsdWRlICJOb2RlVHJhdmVyc2FsLmgiCiAjaW5j
bHVkZSAiWE1MTlNOYW1lcy5oIgogI2luY2x1ZGUgIlhQYXRoUGFyc2VyLmgiCiAjaW5jbHVkZSAi
WFBhdGhVdGlsLmgiCkBAIC0yNDYsNyArMjQ3LDcgQEAgdm9pZCBTdGVwOjpub2Rlc0luQXhpcyhO
b2RlKiBjb250ZXh0LCBObwogICAgICAgICAgICAgaWYgKGNvbnRleHQtPmlzQXR0cmlidXRlTm9k
ZSgpKSAvLyBJbiBYUGF0aCBtb2RlbCwgYXR0cmlidXRlIG5vZGVzIGRvIG5vdCBoYXZlIGNoaWxk
cmVuLgogICAgICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICAgICAgZm9yIChOb2RlKiBu
ID0gY29udGV4dC0+Zmlyc3RDaGlsZCgpOyBuOyBuID0gbi0+dHJhdmVyc2VOZXh0Tm9kZShjb250
ZXh0KSkKKyAgICAgICAgICAgIGZvciAoTm9kZSogbiA9IGNvbnRleHQtPmZpcnN0Q2hpbGQoKTsg
bjsgbiA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobiwgY29udGV4dCkpCiAgICAgICAgICAgICAgICAg
aWYgKG5vZGVNYXRjaGVzKG4sIERlc2NlbmRhbnRBeGlzLCBtX25vZGVUZXN0KSkKICAgICAgICAg
ICAgICAgICAgICAgbm9kZXMuYXBwZW5kKG4pOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMjk3
LDcgKzI5OCw3IEBAIHZvaWQgU3RlcDo6bm9kZXNJbkF4aXMoTm9kZSogY29udGV4dCwgTm8KICAg
ICAgICAgY2FzZSBGb2xsb3dpbmdBeGlzOgogICAgICAgICAgICAgaWYgKGNvbnRleHQtPmlzQXR0
cmlidXRlTm9kZSgpKSB7CiAgICAgICAgICAgICAgICAgTm9kZSogcCA9IHN0YXRpY19jYXN0PEF0
dHIqPihjb250ZXh0KS0+b3duZXJFbGVtZW50KCk7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKChw
ID0gcC0+dHJhdmVyc2VOZXh0Tm9kZSgpKSkKKyAgICAgICAgICAgICAgICB3aGlsZSAoKHAgPSBO
b2RlVHJhdmVyc2FsOjpuZXh0KHApKSkKICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGVNYXRj
aGVzKHAsIEZvbGxvd2luZ0F4aXMsIG1fbm9kZVRlc3QpKQogICAgICAgICAgICAgICAgICAgICAg
ICAgbm9kZXMuYXBwZW5kKHApOwogICAgICAgICAgICAgfSBlbHNlIHsKQEAgLTMwNSw3ICszMDYs
NyBAQCB2b2lkIFN0ZXA6Om5vZGVzSW5BeGlzKE5vZGUqIGNvbnRleHQsIE5vCiAgICAgICAgICAg
ICAgICAgICAgIGZvciAoTm9kZSogbiA9IHAtPm5leHRTaWJsaW5nKCk7IG47IG4gPSBuLT5uZXh0
U2libGluZygpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9kZU1hdGNoZXMobiwg
Rm9sbG93aW5nQXhpcywgbV9ub2RlVGVzdCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bm9kZXMuYXBwZW5kKG4pOwotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChOb2RlKiBjID0g
bi0+Zmlyc3RDaGlsZCgpOyBjOyBjID0gYy0+dHJhdmVyc2VOZXh0Tm9kZShuKSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGZvciAoTm9kZSogYyA9IG4tPmZpcnN0Q2hpbGQoKTsgYzsgYyA9IE5v
ZGVUcmF2ZXJzYWw6Om5leHQoYywgbikpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KG5vZGVNYXRjaGVzKGMsIEZvbGxvd2luZ0F4aXMsIG1fbm9kZVRlc3QpKQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBub2Rlcy5hcHBlbmQoYyk7CiAgICAgICAgICAgICAgICAgICAg
IH0KQEAgLTMxOCw3ICszMTksNyBAQCB2b2lkIFN0ZXA6Om5vZGVzSW5BeGlzKE5vZGUqIGNvbnRl
eHQsIE5vCiAKICAgICAgICAgICAgIE5vZGUqIG4gPSBjb250ZXh0OwogICAgICAgICAgICAgd2hp
bGUgKENvbnRhaW5lck5vZGUqIHBhcmVudCA9IG4tPnBhcmVudE5vZGUoKSkgewotICAgICAgICAg
ICAgICAgIGZvciAobiA9IG4tPnRyYXZlcnNlUHJldmlvdXNOb2RlKCk7IG4gIT0gcGFyZW50OyBu
ID0gbi0+dHJhdmVyc2VQcmV2aW91c05vZGUoKSkKKyAgICAgICAgICAgICAgICBmb3IgKG4gPSBO
b2RlVHJhdmVyc2FsOjpwcmV2aW91cyhuKTsgbiAhPSBwYXJlbnQ7IG4gPSBOb2RlVHJhdmVyc2Fs
OjpwcmV2aW91cyhuKSkKICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGVNYXRjaGVzKG4sIFBy
ZWNlZGluZ0F4aXMsIG1fbm9kZVRlc3QpKQogICAgICAgICAgICAgICAgICAgICAgICAgbm9kZXMu
YXBwZW5kKG4pOwogICAgICAgICAgICAgICAgIG4gPSBwYXJlbnQ7CkBAIC0zNjUsNyArMzY2LDcg
QEAgdm9pZCBTdGVwOjpub2Rlc0luQXhpcyhOb2RlKiBjb250ZXh0LCBObwogICAgICAgICAgICAg
aWYgKGNvbnRleHQtPmlzQXR0cmlidXRlTm9kZSgpKSAvLyBJbiBYUGF0aCBtb2RlbCwgYXR0cmli
dXRlIG5vZGVzIGRvIG5vdCBoYXZlIGNoaWxkcmVuLgogICAgICAgICAgICAgICAgIHJldHVybjsK
IAotICAgICAgICAgICAgZm9yIChOb2RlKiBuID0gY29udGV4dC0+Zmlyc3RDaGlsZCgpOyBuOyBu
ID0gbi0+dHJhdmVyc2VOZXh0Tm9kZShjb250ZXh0KSkKKyAgICAgICAgICAgIGZvciAoTm9kZSog
biA9IGNvbnRleHQtPmZpcnN0Q2hpbGQoKTsgbjsgbiA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobiwg
Y29udGV4dCkpCiAgICAgICAgICAgICBpZiAobm9kZU1hdGNoZXMobiwgRGVzY2VuZGFudE9yU2Vs
ZkF4aXMsIG1fbm9kZVRlc3QpKQogICAgICAgICAgICAgICAgIG5vZGVzLmFwcGVuZChuKTsKICAg
ICAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3htbC9YUGF0aFV0aWwuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3htbC9YUGF0aFV0aWwuY3BwCShyZXZpc2lv
biAxMzY2MDYpCisrKyBTb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhVdGlsLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIlhQYXRoVXRpbC5oIgogCiAjaW5jbHVk
ZSAiQ29udGFpbmVyTm9kZS5oIgorI2luY2x1ZGUgIk5vZGVUcmF2ZXJzYWwuaCIKICNpbmNsdWRl
IDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTUz
LDcgKzU0LDcgQEAgU3RyaW5nIHN0cmluZ1ZhbHVlKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICAg
ICAgU3RyaW5nQnVpbGRlciByZXN1bHQ7CiAgICAgICAgICAgICAgICAgcmVzdWx0LnJlc2VydmVD
YXBhY2l0eSgxMDI0KTsKIAotICAgICAgICAgICAgICAgIGZvciAoTm9kZSogbiA9IG5vZGUtPmZp
cnN0Q2hpbGQoKTsgbjsgbiA9IG4tPnRyYXZlcnNlTmV4dE5vZGUobm9kZSkpIHsKKyAgICAgICAg
ICAgICAgICBmb3IgKE5vZGUqIG4gPSBub2RlLT5maXJzdENoaWxkKCk7IG47IG4gPSBOb2RlVHJh
dmVyc2FsOjpuZXh0KG4sIG5vZGUpKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChuLT5pc1Rl
eHROb2RlKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgbm9kZVZh
bHVlID0gbi0+bm9kZVZhbHVlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBw
ZW5kKG5vZGVWYWx1ZSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMzcxMDcpCisrKyBTb3Vy
Y2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyNSBAQAorMjAx
Mi0xMi0wOSAgQW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CisKKyAgICAgICAgRmFj
dG9yIG5vZGUgdHJhdmVyc2FsIGludG8gc3RhbmRhbG9uZSBmdW5jdGlvbnMKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNDUwNworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYkZyYW1lLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWU6OmNvbnRhaW5zQW55Rm9y
bUVsZW1lbnRzKToKKworMjAxMi0xMi0wOSAgQW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5j
b20+CisKKyAgICAgICAgTmVlZCBhIHNob3J0IGRlc2NyaXB0aW9uIChPT1BTISkuCisgICAgICAg
IE5lZWQgdGhlIGJ1ZyBVUkwgKE9PUFMhKS4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBBZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9mIHRoZSBjaGFuZ2Ug
c3VjaCBhcyBhcHByb2FjaCwgcmF0aW9uYWxlLiBQbGVhc2UgYWRkIHBlci1mdW5jdGlvbiBkZXNj
cmlwdGlvbnMgYmVsb3cgKE9PUFMhKS4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJGcmFtZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lOjpjb250YWluc0FueUZvcm1F
bGVtZW50cyk6CisKIDIwMTItMTItMDkgIEpvbiBMZWUgIDxqb25sZWVAYXBwbGUuY29tPgogCiAg
ICAgICAgIFtXSzJdIE1vdmUgYnV0dG9uIGltYWdlIHRvIGluamVjdGVkIGJ1bmRsZQpJbmRleDog
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwCShyZXZp
c2lvbiAxMzY2MDYpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJh
bWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NCw2ICs1NCw3IEBACiAjaW5jbHVkZSA8V2ViQ29y
ZS9KU0NTU1N0eWxlRGVjbGFyYXRpb24uaD4KICNpbmNsdWRlIDxXZWJDb3JlL0pTRWxlbWVudC5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvSlNSYW5nZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvTm9kZVRy
YXZlcnNhbC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUGFnZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUv
UGx1Z2luRG9jdW1lbnQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlclRyZWVBc1RleHQuaD4K
QEAgLTY2NSw3ICs2NjYsNyBAQCBib29sIFdlYkZyYW1lOjpjb250YWluc0FueUZvcm1FbGVtZW50
cygpCiAgICAgaWYgKCFkb2N1bWVudCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgZm9y
IChOb2RlKiBub2RlID0gZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudCgpOyBub2RlOyBub2RlID0g
bm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgpKSB7CisgICAgZm9yIChOb2RlKiBub2RlID0gZG9jdW1l
bnQtPmRvY3VtZW50RWxlbWVudCgpOyBub2RlOyBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dChu
b2RlKSkgewogICAgICAgICBpZiAoIW5vZGUtPmlzRWxlbWVudE5vZGUoKSkKICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUpLT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6Zm9ybVRhZykpCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
ZwkocmV2aXNpb24gMTM3MTA3KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyNSBAQAorMjAxMi0xMi0wOSAgQW50dGkgS29pdmlz
dG8gIDxhbnR0aUBhcHBsZS5jb20+CisKKyAgICAgICAgRmFjdG9yIG5vZGUgdHJhdmVyc2FsIGlu
dG8gc3RhbmRhbG9uZSBmdW5jdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTEwNDUwNworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogc3JjL1dlYkZyYW1lSW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6
OldlYkZyYW1lSW1wbDo6c2V0RmluZEVuZHN0YXRlRm9jdXNBbmRTZWxlY3Rpb24pOgorCisyMDEy
LTEyLTA5ICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBOZWVk
IGEgc2hvcnQgZGVzY3JpcHRpb24gKE9PUFMhKS4KKyAgICAgICAgTmVlZCB0aGUgYnVnIFVSTCAo
T09QUyEpLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEFkZGl0aW9uYWwgaW5mb3JtYXRpb24gb2YgdGhlIGNoYW5nZSBzdWNoIGFzIGFwcHJvYWNoLCBy
YXRpb25hbGUuIFBsZWFzZSBhZGQgcGVyLWZ1bmN0aW9uIGRlc2NyaXB0aW9ucyBiZWxvdyAoT09Q
UyEpLgorCisgICAgICAgICogc3JjL1dlYkZyYW1lSW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6
OldlYkZyYW1lSW1wbDo6c2V0RmluZEVuZHN0YXRlRm9jdXNBbmRTZWxlY3Rpb24pOgorCiAyMDEy
LTEyLTA5ICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4KIAogICAg
ICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMTM3MTAzLgpJbmRleDogU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwuY3BwCShyZXZpc2lvbiAxMzY2MDYpCisrKyBT
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMTgsNiArMTE4LDcgQEAKICNpbmNsdWRlICJLVVJMLmgiCiAjaW5jbHVkZSAiTWVzc2Fn
ZVBvcnQuaCIKICNpbmNsdWRlICJOb2RlLmgiCisjaW5jbHVkZSAiTm9kZVRyYXZlcnNhbC5oIgog
I2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQYWdlT3ZlcmxheS5oIgogI2luY2x1ZGUgIlBl
cmZvcm1hbmNlLmgiCkBAIC0yMzQ5LDcgKzIzNTAsNyBAQCB2b2lkIFdlYkZyYW1lSW1wbDo6c2V0
RmluZEVuZHN0YXRlRm9jdXNBCiAgICAgICAgICAgICAgICAgZnJhbWUoKS0+ZG9jdW1lbnQoKS0+
c2V0Rm9jdXNlZE5vZGUobm9kZSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAg
ICAgfQotICAgICAgICAgICAgbm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoKTsKKyAgICAg
ICAgICAgIG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUpOwogICAgICAgICB9CiAKICAg
ICAgICAgLy8gTm8gbm9kZSByZWxhdGVkIHRvIHRoZSBhY3RpdmUgbWF0Y2ggd2FzIGZvY3VzYWJs
ZSwgc28gc2V0IHRoZQpJbmRleDogU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwkocmV2aXNpb24gMTM3MTA3KQorKysg
U291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjUg
QEAKKzIwMTItMTItMDkgIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgorCisgICAg
ICAgIEZhY3RvciBub2RlIHRyYXZlcnNhbCBpbnRvIHN0YW5kYWxvbmUgZnVuY3Rpb25zCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDQ1MDcKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAKKyAgICAgICAgKiBXZWJWaWV3
L1dlYkhUTUxSZXByZXNlbnRhdGlvbi5tbToKKyAgICAgICAgKHNlYXJjaEZvckxhYmVsc0JlZm9y
ZUVsZW1lbnQpOgorCisyMDEyLTEyLTA5ICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNv
bT4KKworICAgICAgICBOZWVkIGEgc2hvcnQgZGVzY3JpcHRpb24gKE9PUFMhKS4KKyAgICAgICAg
TmVlZCB0aGUgYnVnIFVSTCAoT09QUyEpLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIEFkZGl0aW9uYWwgaW5mb3JtYXRpb24gb2YgdGhlIGNoYW5nZSBz
dWNoIGFzIGFwcHJvYWNoLCByYXRpb25hbGUuIFBsZWFzZSBhZGQgcGVyLWZ1bmN0aW9uIGRlc2Ny
aXB0aW9ucyBiZWxvdyAoT09QUyEpLgorCisgICAgICAgICogV2ViVmlldy9XZWJIVE1MUmVwcmVz
ZW50YXRpb24ubW06CisgICAgICAgIChzZWFyY2hGb3JMYWJlbHNCZWZvcmVFbGVtZW50KToKKwog
MjAxMi0xMi0wNiAgUmljayBCeWVycyAgPHJieWVyc0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAg
Q1NTIGN1cnNvciBwcm9wZXJ0eSBzaG91bGQgc3VwcG9ydCB3ZWJraXQtaW1hZ2Utc2V0CkluZGV4
OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxSZXByZXNlbnRhdGlvbi5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxSZXByZXNlbnRhdGlv
bi5tbQkocmV2aXNpb24gMTM2NjA2KQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJI
VE1MUmVwcmVzZW50YXRpb24ubW0JKHdvcmtpbmcgY29weSkKQEAgLTU0LDYgKzU0LDcgQEAKICNp
bXBvcnQgPFdlYkNvcmUvSFRNTE5hbWVzLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0hUTUxUYWJsZUNl
bGxFbGVtZW50Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL01JTUVUeXBlUmVnaXN0cnkuaD4KKyNpbXBv
cnQgPFdlYkNvcmUvTm9kZVRyYXZlcnNhbC5oPgogI2ltcG9ydCA8V2ViQ29yZS9SYW5nZS5oPgog
I2ltcG9ydCA8V2ViQ29yZS9SZWd1bGFyRXhwcmVzc2lvbi5oPgogI2ltcG9ydCA8V2ViQ29yZS9S
ZW5kZXJPYmplY3QuaD4KQEAgLTQzNyw5ICs0MzgsOSBAQCBzdGF0aWMgTlNTdHJpbmcqIHNlYXJj
aEZvckxhYmVsc0JlZm9yZUVsCiAgICAgLy8gd2FsayBiYWNrd2FyZHMgaW4gdGhlIG5vZGUgdHJl
ZSwgdW50aWwgYW5vdGhlciBlbGVtZW50LCBvciBmb3JtLCBvciBlbmQgb2YgdHJlZQogICAgIHVu
c2lnbmVkIGxlbmd0aFNlYXJjaGVkID0gMDsKICAgICBOb2RlKiBuOwotICAgIGZvciAobiA9IGVs
ZW1lbnQtPnRyYXZlcnNlUHJldmlvdXNOb2RlKCk7CisgICAgZm9yIChuID0gTm9kZVRyYXZlcnNh
bDo6cHJldmlvdXMoZWxlbWVudCk7CiAgICAgICAgICBuICYmIGxlbmd0aFNlYXJjaGVkIDwgY2hh
cnNTZWFyY2hlZFRocmVzaG9sZDsKLSAgICAgICAgIG4gPSBuLT50cmF2ZXJzZVByZXZpb3VzTm9k
ZSgpKQorICAgICAgICAgbiA9IE5vZGVUcmF2ZXJzYWw6OnByZXZpb3VzKG4pKQogICAgIHsKICAg
ICAgICAgaWYgKG4tPmhhc1RhZ05hbWUoZm9ybVRhZykKICAgICAgICAgICAgIHx8IChuLT5pc0hU
TUxFbGVtZW50KCkgJiYgc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG4pLT5pc0Zvcm1Db250cm9sRWxl
bWVudCgpKSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>178477</attachid>
            <date>2012-12-09 22:48:01 -0800</date>
            <delta_ts>2012-12-10 10:08:46 -0800</delta_ts>
            <desc>patch2</desc>
            <filename>node-traversal-5.patch</filename>
            <type>text/plain</type>
            <size>142863</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzNzEwOCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxNyBAQAorMjAxMi0xMi0wOSAgQW50dGkg
S29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CisKKyAgICAgICAgRmFjdG9yIG5vZGUgdHJhdmVy
c2FsIGludG8gc3RhbmRhbG9uZSBmdW5jdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNDUwNworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIE5vZGUgdHJhdmVyc2FsIGZ1bmN0aW9ucyBhcmUgY3VycmVu
dGx5IE5vZGUgYW5kIENvbnRhaW5lck5vZGUgbWVtYmVycy4gVGhlaXIgaW1wbGVtZW50YXRpb25z
CisgICAgICAgIGFyZSBjb25mdXNpbmdseSBzY2F0dGVyZWQgb3ZlciBtdWx0aXBsZSBoZWFkZXIg
YW5kIHNvdXJjZSBmaWxlcy4gVGhlc2UgZnVuY3Rpb25zIGhhdmUgbm8gcGFydGljdWxhcgorICAg
ICAgICByZWFzb24gdG8gYmUgbWVtYmVycyBhcyB0aGV5IGRvbid0IHJlcXVpcmUgbm9uLXB1Ymxp
YyBhY2Nlc3MuIFRoZXkgc2hvdWxkIGJlIG1hZGUgZnJlZXN0YW5kaW5nCisgICAgICAgIGZ1bmN0
aW9uIGluc3RlYWQgYW5kIGdhdGhlcmVkIHRvZ2V0aGVyLgorICAgICAgICAKKyAgICAgICAgVGhp
cyBwYXRjaCBhZGRzIE5vZGVUcmF2ZXJzYWwgbmFtZXNwYWNlLCBkZWZpbmVkIGluIE5vZGVUcmF2
ZXJzYWwuaC4gSXQgY29udGFpbnMgZnJlZXN0YW5kaW5nCisgICAgICAgIGZ1bmN0aW9ucyBmb3Ig
dHJhdmVyc2luZyBOb2Rlcy4gTW9zdCBwb3B1bGFyIGZ1bmN0aW9ucyBhcmUgaW5saW5lZCAoYXMg
YmVmb3JlKSBhbmQKKyAgICAgICAgdGhlcmUgYXJlIENvbnRhaW5lck5vZGUgc3BlY2lmaWMgc3Bl
Y2lhbGl6YXRpb25zIChhcyBiZWZvcmUpLgorICAgICAgICAKKyAgICAgICAgSW4gY2xpZW50IGNv
ZGUKKyAgICAgICAgCisgICAgICAgICAgICBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgp
OworICAgICAgICAKKyAgICAgICAgYmVjb21lcworICAgICAgICAKKyAgICAgICAgICAgIG5vZGUg
PSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUpOworICAgICAgICAgICAgCisgICAgICAgIGV0Yy4K
KworICAgICAgICAqIFdlYkNvcmUuZXhwLmluOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlO
b2RlT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0
OjphY2Nlc3NpYmlsaXR5RGVzY3JpcHRpb25Gb3JFbGVtZW50cyk6CisgICAgICAgICogYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vz
c2liaWxpdHlPYmplY3Q6OmZpcnN0QWNjZXNzaWJsZU9iamVjdEZyb21Ob2RlKToKKyAgICAgICAg
KiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YWRkSW1hZ2VNYXBDaGlsZHJlbik6
CisgICAgICAgICogYmluZGluZ3MvanMvSlNEb2N1bWVudEN1c3RvbS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjp0b0pTKToKKyAgICAgICAgKiBjc3MvU2VsZWN0b3JDaGVja2VyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNlbGVjdG9yQ2hlY2tlcjo6YWxsVmlzaXRlZFN0YXRlQ2hhbmdlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6OnZpc2l0ZWRTdGF0ZUNoYW5nZWQpOgor
ICAgICAgICAqIGNzcy9TdHlsZUludmFsaWRhdGlvbkFuYWx5c2lzLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlSW52YWxpZGF0aW9uQW5hbHlzaXM6OmludmFsaWRhdGVTdHlsZSk6CisgICAg
ICAgICogZG9tL0NvbnRhaW5lck5vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZGlzcGF0Y2hD
aGlsZEluc2VydGlvbkV2ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpkaXNwYXRjaENoaWxkUmVt
b3ZhbEV2ZW50cyk6CisgICAgICAgICogZG9tL0NvbnRhaW5lck5vZGUuaDoKKyAgICAgICAgKENv
bnRhaW5lck5vZGUpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogZG9tL0NvbnRhaW5l
ck5vZGVBbGdvcml0aG1zLmg6CisgICAgICAgIChXZWJDb3JlOjpDaGlsZEZyYW1lRGlzY29ubmVj
dG9yOjpjb2xsZWN0RGVzY2VuZGFudCk6CisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpidWlsZEFjY2Vzc0tleU1hcCk6CisgICAgICAgIChX
ZWJDb3JlOjpEb2N1bWVudDo6cmVtb3ZlQWxsRXZlbnRMaXN0ZW5lcnMpOgorICAgICAgICAoV2Vi
Q29yZTo6RG9jdW1lbnQ6OnVwZGF0ZUJhc2VVUkwpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1l
bnQ6OnByb2Nlc3NCYXNlRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6bm9k
ZUFic0luZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojpub2RlV2l0aEFic0luZGV4
KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpnZXRGb2N1c2FibGVOb2Rlcyk6CisgICAg
ICAgICogZG9tL0RvY3VtZW50TWFya2VyQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6Om1hcmtlcnNJblJhbmdlKToKKyAgICAgICAgKFdl
YkNvcmU6OkRvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6c2V0TWFya2Vyc0FjdGl2ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6Omhhc01hcmtlcnMpOgorICAg
ICAgICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpjbGVhckRlc2NyaXB0aW9u
T25NYXJrZXJzSW50ZXJzZWN0aW5nUmFuZ2UpOgorICAgICAgICAqIGRvbS9Eb2N1bWVudE9yZGVy
ZWRNYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRPcmRlcmVkTWFwOjpnZXQpOgor
ICAgICAgICAqIGRvbS9FbGVtZW50U2hhZG93LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1l
bnRTaGFkb3c6OmNvbGxlY3RTZWxlY3RGZWF0dXJlU2V0RnJvbSk6CisgICAgICAgICogZG9tL05v
ZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6bm9ybWFsaXplKToKKyAgICAgICAgKFdl
YkNvcmU6Ok5vZGU6OmxhenlBdHRhY2gpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChX
ZWJDb3JlOjpOb2RlOjpkZXRhY2gpOgorICAgICAgICAoV2ViQ29yZTo6dHJhdmVyc2VUcmVlQW5k
TWFyayk6CisgICAgICAgICogZG9tL05vZGUuaDoKKyAgICAgICAgKE5vZGUpOgorICAgICAgICAq
IGRvbS9Ob2RlSXRlcmF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZUl0ZXJhdG9yOjpO
b2RlUG9pbnRlcjo6bW92ZVRvTmV4dCk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlSXRlcmF0b3I6
Ok5vZGVQb2ludGVyOjptb3ZlVG9QcmV2aW91cyk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlSXRl
cmF0b3I6OnVwZGF0ZUZvck5vZGVSZW1vdmFsKToKKyAgICAgICAgKiBkb20vTm9kZVRyYXZlcnNh
bC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoTm9kZVRyYXZlcnNhbCk6
CisgICAgICAgIChXZWJDb3JlOjpOb2RlVHJhdmVyc2FsOjp0cmF2ZXJzZU5leHROb2RlVGVtcGxh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZVRyYXZlcnNhbDo6bmV4dCk6CisgICAgICAgIChX
ZWJDb3JlOjpOb2RlVHJhdmVyc2FsOjp0cmF2ZXJzZU5leHRTaWJsaW5nVGVtcGxhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6Tm9kZVRyYXZlcnNhbDo6bmV4dFNpYmxpbmcpOgorICAgICAgICAqIGRv
bS9SYW5nZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6dG9TdHJpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6UmFuZ2U6OmNoZWNrRGVsZXRlRXh0cmFjdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSYW5nZTo6Zmlyc3ROb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjpwYXN0TGFzdE5v
ZGUpOgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OnRleHRSZWN0cyk6CisgICAgICAgIChXZWJD
b3JlOjpSYW5nZTo6dGV4dFF1YWRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjpnZXRCb3Jk
ZXJBbmRUZXh0UXVhZHMpOgorICAgICAgICAqIGRvbS9UcmVlU2NvcGUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6VHJlZVNjb3BlOjpsYWJlbEVsZW1lbnRGb3JJZCk6CisgICAgICAgIChXZWJDb3Jl
OjpUcmVlU2NvcGU6OmZpbmRBbmNob3IpOgorICAgICAgICAqIGRvbS9UcmVlU2NvcGVBZG9wdGVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRyZWVTY29wZUFkb3B0ZXI6Om1vdmVUcmVlVG9OZXdT
Y29wZSk6CisgICAgICAgIChXZWJDb3JlOjpUcmVlU2NvcGVBZG9wdGVyOjptb3ZlVHJlZVRvTmV3
RG9jdW1lbnQpOgorICAgICAgICAqIGRvbS9UcmVlV2Fsa2VyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlRyZWVXYWxrZXI6Om5leHROb2RlKToKKyAgICAgICAgKiBlZGl0aW5nL0FwcGx5U3R5bGVD
b21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjphcHBseVJl
bGF0aXZlRm9udFN0eWxlQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21t
YW5kOjpmaXhSYW5nZUFuZEFwcGx5SW5saW5lU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6Y29u
dGFpbnNOb25FZGl0YWJsZVJlZ2lvbik6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29t
bWFuZDo6YXBwbHlJbmxpbmVTdHlsZVRvTm9kZVJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkFw
cGx5U3R5bGVDb21tYW5kOjpyZW1vdmVTdHlsZUZyb21SdW5CZWZvcmVBcHBseWluZ1N0eWxlKToK
KyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjpyZW1vdmVJbmxpbmVTdHlsZSk6
CisgICAgICAgICogZWRpdGluZy9CcmVha0Jsb2NrcXVvdGVDb21tYW5kLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkJyZWFrQmxvY2txdW90ZUNvbW1hbmQ6OmRvQXBwbHkpOgorICAgICAgICAqIGVk
aXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9z
aXRlRWRpdENvbW1hbmQ6OmRlbGV0ZUluc2lnbmlmaWNhbnRUZXh0KToKKyAgICAgICAgKFdlYkNv
cmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjpjbG9uZVBhcmFncmFwaFVuZGVyTmV3RWxlbWVudCk6
CisgICAgICAgICogZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OmZpcnN0RWRpdGFibGVQb3NpdGlvbkluTm9kZSk6CisgICAgICAgIChXZWJDb3Jl
OjpEZWxldGVTZWxlY3Rpb25Db21tYW5kOjptYWtlU3R5bGluZ0VsZW1lbnRzRGlyZWN0Q2hpbGRy
ZW5PZkVkaXRhYmxlUm9vdFRvUHJldmVudFN0eWxlTG9zcyk6CisgICAgICAgIChXZWJDb3JlOjpE
ZWxldGVTZWxlY3Rpb25Db21tYW5kOjpoYW5kbGVHZW5lcmFsRGVsZXRlKToKKyAgICAgICAgKiBl
ZGl0aW5nL0VkaXRDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUVkaXRDb21t
YW5kOjphZGROb2RlQW5kRGVzY2VuZGFudHMpOgorICAgICAgICAqIGVkaXRpbmcvRWRpdGluZ1N0
eWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRpbmdTdHlsZTo6dHJpU3RhdGVPZlN0eWxl
KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRpbmdTdHlsZTo6dGV4dERpcmVjdGlvbkZvclNlbGVj
dGlvbik6CisgICAgICAgICogZWRpdGluZy9FZGl0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjpzaW1wbGlmeU1hcmt1cCk6CisgICAgICAgICogZWRpdGluZy9GcmFtZVNlbGVjdGlv
bi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzY2FuRm9yRm9ybSk6CisgICAgICAgIChXZWJDb3Jl
OjpGcmFtZVNlbGVjdGlvbjo6c2V0U2VsZWN0aW9uRnJvbU5vbmUpOgorICAgICAgICAqIGVkaXRp
bmcvSW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAgKiBl
ZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
cGxhY2VtZW50RnJhZ21lbnQ6OnJlbW92ZVVucmVuZGVyZWROb2Rlcyk6CisgICAgICAgIChXZWJD
b3JlOjpSZXBsYWNlbWVudEZyYWdtZW50OjpyZW1vdmVJbnRlcmNoYW5nZU5vZGVzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpJbnNlcnRlZE5vZGVzOjp3aWxs
UmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpSZXBsYWNl
U2VsZWN0aW9uQ29tbWFuZDo6SW5zZXJ0ZWROb2Rlczo6d2lsbFJlbW92ZU5vZGUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OnJlbW92ZVJlZHVuZGFudFN0eWxl
c0FuZEtlZXBTdHlsZVNwYW5JbmxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6cmVtb3ZlSGVhZENv
bnRlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpoYW5k
bGVTdHlsZVNwYW5zKToKKyAgICAgICAgKiBlZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5k
Lmg6CisgICAgICAgIChXZWJDb3JlOjpSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6SW5zZXJ0ZWRO
b2Rlczo6cGFzdExhc3RMZWFmKToKKyAgICAgICAgKiBlZGl0aW5nL1NpbXBsaWZ5TWFya3VwQ29t
bWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGlmeU1hcmt1cENvbW1hbmQ6OmRvQXBw
bHkpOgorICAgICAgICAqIGVkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlRleHRJdGVyYXRvcjo6YWR2YW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpzaG91bGRFbWl0
TmV3bGluZUFmdGVyTm9kZSk6CisgICAgICAgICogZWRpdGluZy9odG1sZWRpdGluZy5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpoYXNBUmVuZGVyZWREZXNjZW5kYW50KToKKyAgICAgICAgKiBlZGl0
aW5nL21hYy9FZGl0b3JNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmZvbnRGb3JT
ZWxlY3Rpb24pOgorICAgICAgICAqIGVkaXRpbmcvbWFya3VwLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OmNvbXBsZXRlVVJMcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZWRNYXJrdXBBY2N1bXVs
YXRvcjo6dHJhdmVyc2VOb2Rlc0ZvclNlcmlhbGl6YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
ZmluZE5vZGVzU3Vycm91bmRpbmdDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OnRyaW1GcmFn
bWVudCk6CisgICAgICAgICogZWRpdGluZy92aXNpYmxlX3VuaXRzLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OnN0YXJ0T2ZQYXJhZ3JhcGgpOgorICAgICAgICAoV2ViQ29yZTo6ZW5kT2ZQYXJhZ3Jh
cGgpOgorICAgICAgICAqIGh0bWwvSFRNTENvbGxlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6bmV4dE5vZGUpOgorICAgICAgICAqIGh0bWwvSFRNTEVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6c2V0SGFzRGlyQXV0b0ZsYWdSZWN1cnNpdmVseSk6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MRWxlbWVudDo6ZGlyZWN0aW9uYWxpdHkpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEVs
ZW1lbnQ6OmFkanVzdERpcmVjdGlvbmFsaXR5SWZOZWVkZWRBZnRlckNoaWxkcmVuQ2hhbmdlZCk6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MRWxlbWVudDo6Z2V0SXRlbVJlZkVsZW1lbnRzKToKKyAg
ICAgICAgKiBodG1sL0hUTUxGaWVsZFNldEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTEZpZWxkU2V0RWxlbWVudDo6aW52YWxpZGF0ZURpc2FibGVkU3RhdGVVbmRlcik6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MRmllbGRTZXRFbGVtZW50OjpyZWZyZXNoRWxlbWVudHNJZk5lZWRl
ZCk6CisgICAgICAgICogaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTEZvcm1FbGVtZW50Ojpmb3JtRWxlbWVudEluZGV4KToKKyAgICAgICAgKiBodG1sL0hU
TUxMYWJlbEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTExhYmVsRWxlbWVudDo6
Y29udHJvbCk6CisgICAgICAgICogaHRtbC9IVE1MTGVnZW5kRWxlbWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MTGVnZW5kRWxlbWVudDo6YXNzb2NpYXRlZENvbnRyb2wpOgorICAgICAg
ICAqIGh0bWwvSFRNTE1hcEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1hcEVs
ZW1lbnQ6Om1hcE1vdXNlRXZlbnQpOgorICAgICAgICAqIGh0bWwvSFRNTE5hbWVDb2xsZWN0aW9u
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxOYW1lQ29sbGVjdGlvbjo6dmlydHVhbEl0ZW1B
ZnRlcik6CisgICAgICAgICogaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MT3B0aW9uRWxlbWVudDo6Y29sbGVjdE9wdGlvbklubmVyVGV4dCk6CisgICAg
ICAgICogaHRtbC9IVE1MUHJvcGVydGllc0NvbGxlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6bmV4dE5vZGVXaXRoUHJvcGVydHkpOgorICAgICAgICAqIGh0bWwvSFRNTFNlbGVjdEVsZW1l
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6OnJlY2FsY0xpc3RJ
dGVtcyk6CisgICAgICAgICogaHRtbC9IVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6c2VsZWN0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50Ojppbm5lclRleHRW
YWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6dmFs
dWVXaXRoSGFyZExpbmVCcmVha3MpOgorICAgICAgICAqIGh0bWwvUmFkaW9JbnB1dFR5cGUuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmFkaW9JbnB1dFR5cGU6OmhhbmRsZUtleWRvd25FdmVudCk6
CisgICAgICAgICogaHRtbC9zaGFkb3cvQ29udGVudERpc3RyaWJ1dG9yLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNoYWRvd1Jvb3RDb250ZW50RGlzdHJpYnV0aW9uRGF0YTo6ZW5zdXJlSW5zZXJ0
aW9uUG9pbnRMaXN0KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OnBlcmZvcm1TZWFyY2gpOgor
ICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JNZW1vcnlBZ2VudC5jcHA6CisgICAgICAgICog
cGFnZS9Gb2N1c0NvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9jdXNDb250cm9s
bGVyOjpmaW5kRm9jdXNDYW5kaWRhdGVJbkNvbnRhaW5lcik6CisgICAgICAgICogcGFnZS9GcmFt
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6c2VhcmNoRm9yTGFiZWxzQWJvdmVDZWxs
KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpzZWFyY2hGb3JMYWJlbHNCZWZvcmVFbGVtZW50
KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTmFtZWRGbG93VGhyZWFkLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlck5hbWVkRmxvd1RocmVhZDo6Z2V0UmFuZ2VzKToKKyAgICAgICAg
KiBzdmcvU1ZHU1ZHRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdTVkdFbGVtZW50
Ojpjb2xsZWN0SW50ZXJzZWN0aW9uT3JFbmNsb3N1cmVMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlNWR1NWR0VsZW1lbnQ6OmdldEVsZW1lbnRCeUlkKToKKyAgICAgICAgKiBzdmcvU1ZHVXNlRWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpyZW1vdmVEaXNhbGxvd2VkRWxlbWVudHNGcm9t
U3VidHJlZSk6CisgICAgICAgICogc3ZnL2FuaW1hdGlvbi9TTUlMVGltZUNvbnRhaW5lci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTTUlMVGltZUNvbnRhaW5lcjo6dXBkYXRlRG9jdW1lbnRPcmRl
ckluZGV4ZXMpOgorICAgICAgICAqIHhtbC9YUGF0aE5vZGVTZXQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6WFBhdGg6Ok5vZGVTZXQ6OnRyYXZlcnNhbFNvcnQpOgorICAgICAgICAqIHhtbC9YUGF0
aFN0ZXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OlN0ZXA6Om5vZGVzSW5BeGlzKToK
KyAgICAgICAgKiB4bWwvWFBhdGhVdGlsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpz
dHJpbmdWYWx1ZSk6CisKIDIwMTItMTItMDkgIElseWEgVGlraG9ub3Zza3kgIDxsb2lzbG9AY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIE5hdGl2ZSBNZW1vcnkgSW5zdHJ1bWVudGF0aW9uOiBpbnN0
cnVtZW50IGEgcGFydCBvZiBSZW5kZXJPYmplY3QgY2xhc3MgdHJlZS4KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NNYWtl
TGlzdHMudHh0CShyZXZpc2lvbiAxMzcxMDgpCisrKyBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3Rz
LnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTE5NCw2ICsxMTk0LDcgQEAgc2V0KFdlYkNvcmVfU09V
UkNFUwogICAgIGRvbS9Ob2RlSXRlcmF0b3IuY3BwCiAgICAgZG9tL05vZGVSYXJlRGF0YS5jcHAK
ICAgICBkb20vTm9kZVJlbmRlcmluZ0NvbnRleHQuY3BwCisgICAgZG9tL05vZGVUcmF2ZXJzYWwu
Y3BwCiAgICAgZG9tL05vdGF0aW9uLmNwcAogICAgIGRvbS9PdmVyZmxvd0V2ZW50LmNwcAogICAg
IGRvbS9QYWdlVHJhbnNpdGlvbkV2ZW50LmNwcApJbmRleDogU291cmNlL1dlYkNvcmUvR05VbWFr
ZWZpbGUubGlzdC5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5s
aXN0LmFtCShyZXZpc2lvbiAxMzcxMDgpCisrKyBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5s
aXN0LmFtCSh3b3JraW5nIGNvcHkpCkBAIC0yODgyLDYgKzI4ODIsOCBAQCB3ZWJjb3JlX3NvdXJj
ZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlUmFyZURhdGEuaCBcCiAJU291cmNlL1dl
YkNvcmUvZG9tL05vZGVSZW5kZXJpbmdDb250ZXh0LmggXAogCVNvdXJjZS9XZWJDb3JlL2RvbS9O
b2RlUmVuZGVyU3R5bGUuaCBcCisgICAgU291cmNlL1dlYkNvcmUvZG9tL05vZGVUcmF2ZXJzYWwu
Y3BwIFwKKyAgICBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZVRyYXZlcnNhbC5oIFwKIAlTb3VyY2Uv
V2ViQ29yZS9kb20vTm9kZVdpdGhJbmRleC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9kb20vTm90YXRp
b24uY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9kb20vTm90YXRpb24uaCBcCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9UYXJnZXQucHJpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1RhcmdldC5w
cmkJKHJldmlzaW9uIDEzNzEwOCkKKysrIFNvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkJKHdvcmtp
bmcgY29weSkKQEAgLTQzMSw2ICs0MzEsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBkb20vTm9kZUl0
ZXJhdG9yLmNwcCBcCiAgICAgZG9tL05vZGVSYXJlRGF0YS5jcHAgXAogICAgIGRvbS9Ob2RlUmVu
ZGVyaW5nQ29udGV4dC5jcHAgXAorICAgIGRvbS9Ob2RlVHJhdmVyc2FsLmNwcCBcCiAgICAgZG9t
L05vdGF0aW9uLmNwcCBcCiAgICAgZG9tL1N0YXRpY0hhc2hTZXROb2RlTGlzdC5jcHAgXAogICAg
IGRvbS9PdmVyZmxvd0V2ZW50LmNwcCBcCkBAIC0xNjEzLDYgKzE2MTQsNyBAQCBIRUFERVJTICs9
IFwKICAgICBkb20vTm9kZUl0ZXJhdG9yLmggXAogICAgIGRvbS9Ob2RlUmFyZURhdGEuaCBcCiAg
ICAgZG9tL05vZGVSZW5kZXJpbmdDb250ZXh0LmggXAorICAgIGRvbS9Ob2RlVHJhdmVyc2FsLmgg
XAogICAgIGRvbS9Ob3RhdGlvbi5oIFwKICAgICBkb20vU3RhdGljSGFzaFNldE5vZGVMaXN0Lmgg
XAogICAgIGRvbS9PdmVyZmxvd0V2ZW50LmggXApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS5leHAuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHJl
dmlzaW9uIDEzNzEwOCkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCSh3b3JraW5n
IGNvcHkpCkBAIC0yMjgsNiArMjI4LDggQEAgX19aTjdXZWJDb3JlMTNJZGVudGlmaWVyUmVwM2dl
dEVpCiBfX1pON1dlYkNvcmUxM0pTSFRNTEVsZW1lbnQ2c19pbmZvRQogX19aTjdXZWJDb3JlMTNL
ZXlib2FyZEV2ZW50QzFFUktOM1dURjEyQXRvbWljU3RyaW5nRWJiUE5TXzlET01XaW5kb3dFUktO
UzFfNlN0cmluZ0VqYmJiYmIKIF9fWk43V2ViQ29yZTEzS2V5Ym9hcmRFdmVudEMxRVJLTlNfMjFQ
bGF0Zm9ybUtleWJvYXJkRXZlbnRFUE5TXzlET01XaW5kb3dFCitfX1pON1dlYkNvcmUxM05vZGVU
cmF2ZXJzYWwxOW5leHRBbmNlc3RvclNpYmxpbmdFUEtOU180Tm9kZUUKK19fWk43V2ViQ29yZTEz
Tm9kZVRyYXZlcnNhbDhwcmV2aW91c0VQS05TXzROb2RlRVMzXwogX19aTjdXZWJDb3JlMTNRdWFs
aWZpZWROYW1lRDFFdgogX19aTjdXZWJDb3JlMTNSZXNvdXJjZUVycm9yQzFFUDdOU0Vycm9yCiBf
X1pON1dlYkNvcmUxM1Jlc291cmNlRXJyb3JDMUVQOV9fQ0ZFcnJvcgpAQCAtMTM2Miw4ICsxMzY0
LDYgQEAgX19aTjdXZWJDb3JlNE5vZGUxMmluc2VydEJlZm9yZUVOM1dURjEwUAogX19aTks3V2Vi
Q29yZTROb2RlMTNvd25lckRvY3VtZW50RXYKIF9fWk5LN1dlYkNvcmU0Tm9kZTE0aXNEZXNjZW5k
YW50T2ZFUEtTMF8KIF9fWk5LN1dlYkNvcmU0Tm9kZTE4Z2V0U3VicmVzb3VyY2VVUkxzRVJOM1dU
RjExTGlzdEhhc2hTZXRJTlNfNEtVUkxFTG0yNTZFTlNfOEtVUkxIYXNoRUVFCi1fX1pOSzdXZWJD
b3JlNE5vZGUyMHRyYXZlcnNlUHJldmlvdXNOb2RlRVBLUzBfCi1fX1pOSzdXZWJDb3JlNE5vZGUy
N3RyYXZlcnNlTmV4dEFuY2VzdG9yU2libGluZ0V2CiBfX1pOSzdXZWJDb3JlNE5vZGUzMW51bWJl
ck9mU2NvcGVkSFRNTFN0eWxlQ2hpbGRyZW5FdgogX19aTks3V2ViQ29yZTROb2RlOW5vZGVJbmRl
eEV2CiBfX1pOSzdXZWJDb3JlNFBhZ2UxMHBsdWdpbkRhdGFFdgpAQCAtMjA2MSw3ICsyMDYxLDYg
QEAgX19aTks3V2ViQ29yZTE1VmlzaWJsZVBvc2l0aW9uNXJpZ2h0RWIKIF9fWk5LN1dlYkNvcmUx
N1JlbmRlclRleHRDb250cm9sMjJ0ZXh0Rm9ybUNvbnRyb2xFbGVtZW50RXYKIF9fWk5LN1dlYkNv
cmUxN1JlbmRlclRleHRDb250cm9sMjN2aXNpYmxlUG9zaXRpb25Gb3JJbmRleEVpCiBfX1pOSzdX
ZWJDb3JlNE5vZGUxOHJlbmRlcmVySXNFZGl0YWJsZUVOUzBfMTNFZGl0YWJsZUxldmVsRQotX19a
Tks3V2ViQ29yZTROb2RlMjd0cmF2ZXJzZU5leHRBbmNlc3RvclNpYmxpbmdFUEtTMF8KIF9fWk5L
N1dlYkNvcmU1RnJhbWUxMnVwZGF0ZUxheW91dEV2CiBfX1pOSzdXZWJDb3JlNUZyYW1lMTNkb2N1
bWVudFNjYWxlRXYKIF9fWk5LN1dlYkNvcmU1RnJhbWUxNWlubmVyTGluZUhlaWdodEVQN0RPTU5v
ZGUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9uIDEzNzEwOCkKKysrIFNvdXJjZS9XZWJD
b3JlL1dlYkNvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAtMjg0Niw2ICsyODQ2LDggQEAKICAg
ICAgICAgICAgICdkb20vTm9kZVJlbmRlcmluZ0NvbnRleHQuY3BwJywKICAgICAgICAgICAgICdk
b20vTm9kZVJlbmRlcmluZ0NvbnRleHQuaCcsCiAgICAgICAgICAgICAnZG9tL05vZGVSZW5kZXJT
dHlsZS5oJywKKyAgICAgICAgICAgICdkb20vTm9kZVRyYXZlcnNhbC5jcHAnLAorICAgICAgICAg
ICAgJ2RvbS9Ob2RlVHJhdmVyc2FsLmgnLAogICAgICAgICAgICAgJ2RvbS9Ob2RlV2l0aEluZGV4
LmgnLAogICAgICAgICAgICAgJ2RvbS9Ob3RhdGlvbi5jcHAnLAogICAgICAgICAgICAgJ2RvbS9O
b3RhdGlvbi5oJywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUu
dmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNv
cmUudmNwcm9qCShyZXZpc2lvbiAxMzcxMDgpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZj
cHJvai9XZWJDb3JlLnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAtNTM0MDEsNiArNTM0MDEsMTQg
QEAKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGRvbVxOb2RlUmVuZGVyaW5nQ29udGV4dC5oIgogCQkJ
CT4KIAkJCTwvRmlsZT4KKyAgICAgICAgICAgIDxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxk
b21cTm9kZVRyYXZlcnNhbC5jcHAiCisJCQkJPgorCQkJPC9GaWxlPgorICAgICAgICAgICAgPEZp
bGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGRvbVxOb2RlVHJhdmVyc2FsLmgiCisJCQkJPgorCQkJ
PC9GaWxlPgogCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGRvbVxOb3RhdGlvbi5jcHAi
CiAJCQkJPgpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagkocmV2aXNpb24gMTM3MTA4KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC02MTc5LDYgKzYx
NzksOCBAQAogCQlFNDE1RjE2OTBEOUExNjVEMDAzM0NFOTcgLyogRE9NRWxlbWVudFRpbWVDb250
cm9sLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDE1
RjE2ODBEOUExNjVEMDAzM0NFOTcgLyogRE9NRWxlbWVudFRpbWVDb250cm9sLmggKi87IH07CiAJ
CUU0MTVGMTg0MEQ5QTFBODMwMDMzQ0U5NyAvKiBFbGVtZW50VGltZUNvbnRyb2wuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0MTVGMTgzMEQ5QTFBODMw
MDMzQ0U5NyAvKiBFbGVtZW50VGltZUNvbnRyb2wuaCAqLzsgfTsKIAkJRTQyOTVGQTQxMkIwNjE0
RTAwRDFBQ0UwIC8qIFJlc291cmNlTG9hZFByaW9yaXR5LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDI5NUZBMzEyQjA2MTRFMDBEMUFDRTAgLyogUmVz
b3VyY2VMb2FkUHJpb3JpdHkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OworCQlFNDMxMDVCODE2NzUwRjBDMDBEQjJGQjggLyogTm9kZVRyYXZlcnNhbC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDMxMDVC
NzE2NzUwRjBDMDBEQjJGQjggLyogTm9kZVRyYXZlcnNhbC5jcHAgKi87IH07CisJCUU0MzEwNUJC
MTY3NTBGMTYwMERCMkZCOCAvKiBOb2RlVHJhdmVyc2FsLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDMxMDVCQTE2NzUwRjE2MDBEQjJGQjggLyogTm9k
ZVRyYXZlcnNhbC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCUU0NDYxM0ExMENENjMzMTAwMEZBREE3NSAvKiBIVE1MQXVkaW9FbGVtZW50LmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0NDYxMzhGMENE
NjMzMTAwMEZBREE3NSAvKiBIVE1MQXVkaW9FbGVtZW50LmNwcCAqLzsgfTsKIAkJRTQ0NjEzQTIw
Q0Q2MzMxMDAwRkFEQTc1IC8qIEhUTUxBdWRpb0VsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0NDYxMzkwMENENjMzMTAwMEZBREE3NSAvKiBI
VE1MQXVkaW9FbGVtZW50LmggKi87IH07CiAJCUU0NDYxM0E0MENENjMzMTAwMEZBREE3NSAvKiBI
VE1MTWVkaWFFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEU0NDYxMzkyMENENjMzMTAwMEZBREE3NSAvKiBIVE1MTWVkaWFFbGVtZW50LmNw
cCAqLzsgfTsKQEAgLTEwNDc0LDcgKzEwNDc2LDcgQEAKIAkJOTMyRTE2MDgwQUY1NzgzNDAwMjVG
NDA4IC8qIEZyYW1lTG9hZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEZyYW1lTG9hZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTMzMDlE
ODcwOTlFNjQ5MTAwNTZFNTgxIC8qIEFwcGVuZE5vZGVDb21tYW5kLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFwcGVuZE5vZGVDb21tYW5kLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTMzMDlEODgwOTlFNjQ5MTAwNTZFNTgxIC8qIEFwcGVuZE5v
ZGVDb21tYW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFwcGVuZE5vZGVD
b21tYW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTkzMzA5RDg5MDk5RTY0OTEw
MDU2RTU4MSAvKiBBcHBseVN0eWxlQ29tbWFuZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBBcHBseVN0eWxlQ29tbWFuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTkzMzA5RDg5MDk5RTY0OTEwMDU2RTU4MSAvKiBBcHBseVN0eWxlQ29tbWFuZC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IGxpbmVFbmRpbmcgPSAwOyBwYXRoID0g
QXBwbHlTdHlsZUNvbW1hbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB4Y0xhbmd1YWdl
U3BlY2lmaWNhdGlvbklkZW50aWZpZXIgPSB4Y29kZS5sYW5nLmNwcDsgfTsKIAkJOTMzMDlEOEEw
OTlFNjQ5MTAwNTZFNTgxIC8qIEFwcGx5U3R5bGVDb21tYW5kLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEFwcGx5U3R5bGVDb21tYW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTkzMzA5RDhCMDk5RTY0OTEwMDU2RTU4MSAvKiBCcmVha0Jsb2NrcXVvdGVDb21t
YW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJyZWFrQmxvY2tx
dW90ZUNvbW1hbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5MzMwOUQ4QzA5
OUU2NDkxMDA1NkU1ODEgLyogQnJlYWtCbG9ja3F1b3RlQ29tbWFuZC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBCcmVha0Jsb2NrcXVvdGVDb21tYW5kLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0xMzY2Niw2ICsxMzY2OCw4IEBACiAJCUU0MUVBMDM4MTE5ODM2
REIwMDcxMEJDNSAvKiBDU1NQcm9wZXJ0eU5hbWVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IENTU1Byb3BlcnR5TmFtZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlFNDFFQTAzOTExOTgzNzQ5MDA3MTBCQzUgLyogQ1NTVmFsdWVLZXl3b3Jkcy5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDU1NWYWx1ZUtleXdvcmRz
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQyOTVGQTMxMkIwNjE0RTAwRDFB
Q0UwIC8qIFJlc291cmNlTG9hZFByaW9yaXR5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFJlc291cmNlTG9hZFByaW9yaXR5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUU0MzEwNUI3MTY3NTBGMEMwMERCMkZCOCAvKiBOb2RlVHJhdmVyc2FsLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE5vZGVUcmF2ZXJzYWwuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlFNDMxMDVCQTE2NzUwRjE2MDBEQjJGQjggLyogTm9kZVRy
YXZlcnNhbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOb2RlVHJhdmVyc2Fs
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0NDYxMzhGMENENjMzMTAwMEZBREE3
NSAvKiBIVE1MQXVkaW9FbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEhUTUxBdWRpb0VsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlFNDQ2MTM5MDBDRDYzMzEwMDBGQURBNzUgLyogSFRNTEF1ZGlvRWxlbWVudC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIVE1MQXVkaW9FbGVtZW50Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUU0NDYxMzkxMENENjMzMTAwMEZBREE3NSAvKiBIVE1MQXVkaW9F
bGVtZW50LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBIVE1MQXVkaW9FbGVtZW50LmlkbDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIyMDk3LDYgKzIyMTAxLDggQEAKIAkJCQlB
N0Y1RDk0RDEzODRGMDJEMDBBMjlBODcgLyogTm9kZVJlbmRlcmluZ0NvbnRleHQuY3BwICovLAog
CQkJCUE3RjVEOTRFMTM4NEYwMkQwMEEyOUE4NyAvKiBOb2RlUmVuZGVyaW5nQ29udGV4dC5oICov
LAogCQkJCTYzRDdCMzJDMEU3OENEM0YwMEY3NjE3QyAvKiBOb2RlUmVuZGVyU3R5bGUuaCAqLywK
KwkJCQlFNDMxMDVCNzE2NzUwRjBDMDBEQjJGQjggLyogTm9kZVRyYXZlcnNhbC5jcHAgKi8sCisJ
CQkJRTQzMTA1QkExNjc1MEYxNjAwREIyRkI4IC8qIE5vZGVUcmF2ZXJzYWwuaCAqLywKIAkJCQk5
MzgyQUFCMTBEOEMzODYxMDBGMzU3QTYgLyogTm9kZVdpdGhJbmRleC5oICovLAogCQkJCUE4RUE3
RUI3MEExOTQ1RDAwMEE4RUY1RiAvKiBOb3RhdGlvbi5jcHAgKi8sCiAJCQkJQThFQTdFQjYwQTE5
NDVEMDAwQThFRjVGIC8qIE5vdGF0aW9uLmggKi8sCkBAIC0yMjU1NCw2ICsyMjU2MCw3IEBACiAJ
CQlpc2EgPSBQQlhIZWFkZXJzQnVpbGRQaGFzZTsKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0
ODM2NDc7CiAJCQlmaWxlcyA9ICgKKwkJCQlFNDMxMDVCQjE2NzUwRjE2MDBEQjJGQjggLyogTm9k
ZVRyYXZlcnNhbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzM3NUQ3RkUxNjYzOTUxOTAwNjE4NEFC
IC8qIFR5cGVBaGVhZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkQxQUYxNTAxNjU2RjE1MTAwQzZE
NEY3IC8qIEV4Y2x1c2lvblNoYXBlVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDN0ZBNjIx
MEQxRjBDQkQwMERCMjJBOSAvKiBMaXZlTm9kZUxpc3QuaCBpbiBIZWFkZXJzICovLApAQCAtMjg5
OTksNiArMjkwMDYsNyBAQAogCQkJCTg2QkE3NjZFMTY2NDI3QTgwMDVCRTVEMSAvKiBGcmFtZUxv
YWRSZXF1ZXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzRjcyQUY0MTY2NkVERkMwMDJBMDJC
RCAvKiBMYXllclBvb2wubW0gaW4gU291cmNlcyAqLywKIAkJCQlDMzc1RDdGRDE2NjM5NTE5MDA2
MTg0QUIgLyogVHlwZUFoZWFkLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUU0MzEwNUI4MTY3NTBG
MEMwMERCMkZCOCAvKiBOb2RlVHJhdmVyc2FsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUQ2Njgx
N0ZBMTY2RkU2RDcwMEZBMDdCNCAvKiBIVE1MVGVtcGxhdGVFbGVtZW50LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUQ2NDg5RDI1MTY2RkZDRjEwMDdDMDMxQiAvKiBKU0hUTUxUZW1wbGF0ZUVsZW1l
bnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRDZGNzk2MEQxNjZGRkVDRTAwNzZERDE4IC8qIEpT
SFRNTFRlbXBsYXRlRWxlbWVudEN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVP
YmplY3QuY3BwCShyZXZpc2lvbiAxMzcxMDgpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMsNiAr
NjMsNyBAQAogI2luY2x1ZGUgIkxvY2FsaXplZFN0cmluZ3MuaCIKICNpbmNsdWRlICJNYXRoTUxO
YW1lcy5oIgogI2luY2x1ZGUgIk5vZGVMaXN0LmgiCisjaW5jbHVkZSAiTm9kZVRyYXZlcnNhbC5o
IgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQcm9ncmVzc1RyYWNrZXIuaCIKICNpbmNs
dWRlICJUZXh0LmgiCkBAIC0xNTg2LDcgKzE1ODcsNyBAQCBTdHJpbmcgQWNjZXNzaWJpbGl0eU5v
ZGVPYmplY3Q6OmFjY2Vzc2liCiAgICAgICAgIEVsZW1lbnQqIGlkRWxlbWVudCA9IGVsZW1lbnRz
W2ldOwogCiAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKGFjY2Vzc2libGVOYW1lRm9yTm9kZShpZEVs
ZW1lbnQpKTsKLSAgICAgICAgZm9yIChOb2RlKiBuID0gaWRFbGVtZW50LT5maXJzdENoaWxkKCk7
IG47IG4gPSBuLT50cmF2ZXJzZU5leHROb2RlKGlkRWxlbWVudCkpCisgICAgICAgIGZvciAoTm9k
ZSogbiA9IGlkRWxlbWVudC0+Zmlyc3RDaGlsZCgpOyBuOyBuID0gTm9kZVRyYXZlcnNhbDo6bmV4
dChuLCBpZEVsZW1lbnQpKQogICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoYWNjZXNzaWJsZU5h
bWVGb3JOb2RlKG4pKTsKIAogICAgICAgICBpZiAoaSAhPSBzaXplIC0gMSkKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNw
cAkocmV2aXNpb24gMTM3MTA4KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nl
c3NpYmlsaXR5T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsNyBAQAogI2lu
Y2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIkxvY2FsaXplZFN0cmluZ3MuaCIKICNpbmNs
dWRlICJOb2RlTGlzdC5oIgorI2luY2x1ZGUgIk5vZGVUcmF2ZXJzYWwuaCIKICNpbmNsdWRlICJO
b3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJSZW5kZXJJbWFn
ZS5oIgpAQCAtMzYwLDEwICszNjEsMTAgQEAgQWNjZXNzaWJpbGl0eU9iamVjdCogQWNjZXNzaWJp
bGl0eU9iamVjdAogCiAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogYWNjZXNzaWJsZU9iamVjdCA9
IGNhY2hlLT5nZXRPckNyZWF0ZShub2RlLT5yZW5kZXJlcigpKTsKICAgICB3aGlsZSAoYWNjZXNz
aWJsZU9iamVjdCAmJiBhY2Nlc3NpYmxlT2JqZWN0LT5hY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCkp
IHsKLSAgICAgICAgbm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoKTsKKyAgICAgICAgbm9k
ZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9kZSk7CiAKICAgICAgICAgd2hpbGUgKG5vZGUgJiYg
IW5vZGUtPnJlbmRlcmVyKCkpCi0gICAgICAgICAgICBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0
U2libGluZygpOworICAgICAgICAgICAgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHRTaWJsaW5n
KG5vZGUpOwogCiAgICAgICAgIGlmICghbm9kZSkKICAgICAgICAgICAgIHJldHVybiAwOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlSZW5kZXJPYmplY3QuY3BwCShyZXZpc2lvbiAxMzcxMDgpCisrKyBTb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02MSw2ICs2MSw3IEBACiAjaW5jbHVkZSAiTG9jYWxpemVkU3RyaW5ncy5oIgogI2lu
Y2x1ZGUgIk1hdGhNTE5hbWVzLmgiCiAjaW5jbHVkZSAiTm9kZUxpc3QuaCIKKyNpbmNsdWRlICJO
b2RlVHJhdmVyc2FsLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlByb2dyZXNzVHJh
Y2tlci5oIgogI2luY2x1ZGUgIlJlbmRlckJ1dHRvbi5oIgpAQCAtMjY1Niw3ICsyNjU3LDcgQEAg
dm9pZCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjphZGRJbWFnZQogICAgIGlmICghbWFwKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBmb3IgKE5vZGUqIGN1cnJlbnQgPSBtYXAtPmZpcnN0Q2hp
bGQoKTsgY3VycmVudDsgY3VycmVudCA9IGN1cnJlbnQtPnRyYXZlcnNlTmV4dE5vZGUobWFwKSkg
eworICAgIGZvciAoTm9kZSogY3VycmVudCA9IG1hcC0+Zmlyc3RDaGlsZCgpOyBjdXJyZW50OyBj
dXJyZW50ID0gTm9kZVRyYXZlcnNhbDo6bmV4dChjdXJyZW50LCBtYXApKSB7CiAgICAgICAgIAog
ICAgICAgICAvLyBhZGQgYW4gPGFyZWE+IGVsZW1lbnQgZm9yIHRoaXMgY2hpbGQgaWYgaXQgaGFz
IGEgbGluawogICAgICAgICBpZiAoY3VycmVudC0+aGFzVGFnTmFtZShhcmVhVGFnKSAmJiBjdXJy
ZW50LT5pc0xpbmsoKSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEb2N1
bWVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNEb2N1bWVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDEzNzEwOCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRG9jdW1lbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2
ICszNCw3IEBACiAjaW5jbHVkZSAiSlNUb3VjaC5oIgogI2luY2x1ZGUgIkpTVG91Y2hMaXN0Lmgi
CiAjaW5jbHVkZSAiTG9jYXRpb24uaCIKKyNpbmNsdWRlICJOb2RlVHJhdmVyc2FsLmgiCiAjaW5j
bHVkZSAiU2NyaXB0Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIlRvdWNoTGlzdC5oIgogCkBAIC0x
MDcsNyArMTA4LDcgQEAgSlNWYWx1ZSB0b0pTKEV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYQog
ICAgIC8vIGJhY2svZm9yd2FyZCBjYWNoZS4KICAgICBpZiAoIWRvY3VtZW50LT5mcmFtZSgpKSB7
CiAgICAgICAgIHNpemVfdCBub2RlQ291bnQgPSAwOwotICAgICAgICBmb3IgKE5vZGUqIG4gPSBk
b2N1bWVudDsgbjsgbiA9IG4tPnRyYXZlcnNlTmV4dE5vZGUoKSkKKyAgICAgICAgZm9yIChOb2Rl
KiBuID0gZG9jdW1lbnQ7IG47IG4gPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG4pKQogICAgICAgICAg
ICAgbm9kZUNvdW50Kys7CiAgICAgICAgIAogICAgICAgICBleGVjLT5oZWFwKCktPnJlcG9ydEV4
dHJhTWVtb3J5Q29zdChub2RlQ291bnQgKiBzaXplb2YoTm9kZSkpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHAJKHJldmlzaW9uIDEzNzEwOCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCw2ICs0
NCw3IEBACiAjaW5jbHVkZSAiSFRNTFN0eWxlRWxlbWVudC5oIgogI2luY2x1ZGUgIkluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbi5oIgogI2luY2x1ZGUgIk5vZGVSZW5kZXJTdHlsZS5oIgorI2luY2x1
ZGUgIk5vZGVUcmF2ZXJzYWwuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUGFnZUdy
b3VwLmgiCiAjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCkBAIC0xMjI0LDcgKzEyMjUsNyBAQCB2
b2lkIFNlbGVjdG9yQ2hlY2tlcjo6YWxsVmlzaXRlZFN0YXRlQ2hhCiB7CiAgICAgaWYgKG1fbGlu
a3NDaGVja2VkRm9yVmlzaXRlZFN0YXRlLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwotICAg
IGZvciAoTm9kZSogbm9kZSA9IG1fZG9jdW1lbnQ7IG5vZGU7IG5vZGUgPSBub2RlLT50cmF2ZXJz
ZU5leHROb2RlKCkpIHsKKyAgICBmb3IgKE5vZGUqIG5vZGUgPSBtX2RvY3VtZW50OyBub2RlOyBu
b2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dChub2RlKSkgewogICAgICAgICBpZiAobm9kZS0+aXNM
aW5rKCkpCiAgICAgICAgICAgICBub2RlLT5zZXROZWVkc1N0eWxlUmVjYWxjKCk7CiAgICAgfQpA
QCAtMTIzNCw3ICsxMjM1LDcgQEAgdm9pZCBTZWxlY3RvckNoZWNrZXI6OnZpc2l0ZWRTdGF0ZUNo
YW5nZQogewogICAgIGlmICghbV9saW5rc0NoZWNrZWRGb3JWaXNpdGVkU3RhdGUuY29udGFpbnMo
dmlzaXRlZEhhc2gpKQogICAgICAgICByZXR1cm47Ci0gICAgZm9yIChOb2RlKiBub2RlID0gbV9k
b2N1bWVudDsgbm9kZTsgbm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoKSkgeworICAgIGZv
ciAoTm9kZSogbm9kZSA9IG1fZG9jdW1lbnQ7IG5vZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpu
ZXh0KG5vZGUpKSB7CiAgICAgICAgIExpbmtIYXNoIGhhc2ggPSAwOwogICAgICAgICBpZiAobm9k
ZS0+aGFzVGFnTmFtZShhVGFnKSkKICAgICAgICAgICAgIGhhc2ggPSBzdGF0aWNfY2FzdDxIVE1M
QW5jaG9yRWxlbWVudCo+KG5vZGUpLT52aXNpdGVkTGlua0hhc2goKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2Nzcy9TdHlsZUludmFsaWRhdGlvbkFuYWx5c2lzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVJbnZhbGlkYXRpb25BbmFseXNpcy5jcHAJKHJldmlzaW9u
IDEzNzEwOCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZUludmFsaWRhdGlvbkFuYWx5c2lz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSAiQ1NTU2Vs
ZWN0b3JMaXN0LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJOb2RlVHJhdmVy
c2FsLmgiCiAjaW5jbHVkZSAiU3R5bGVSdWxlSW1wb3J0LmgiCiAjaW5jbHVkZSAiU3R5bGVTaGVl
dENvbnRlbnRzLmgiCiAjaW5jbHVkZSAiU3R5bGVkRWxlbWVudC5oIgpAQCAtMTE5LDE3ICsxMjAs
MTcgQEAgdm9pZCBTdHlsZUludmFsaWRhdGlvbkFuYWx5c2lzOjppbnZhbGlkYQogICAgIE5vZGUq
IG5vZGUgPSBkb2N1bWVudC0+Zmlyc3RDaGlsZCgpOwogICAgIHdoaWxlIChub2RlKSB7CiAgICAg
ICAgIGlmICghbm9kZS0+aXNTdHlsZWRFbGVtZW50KCkpIHsKLSAgICAgICAgICAgIG5vZGUgPSBu
b2RlLT50cmF2ZXJzZU5leHROb2RlKCk7CisgICAgICAgICAgICBub2RlID0gTm9kZVRyYXZlcnNh
bDo6bmV4dChub2RlKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAgICAgICAg
IFN0eWxlZEVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTdHlsZWRFbGVtZW50Kj4obm9k
ZSk7CiAgICAgICAgIGlmIChlbGVtZW50TWF0Y2hlc1NlbGVjdG9yU2NvcGVzKGVsZW1lbnQsIG1f
aWRTY29wZXMsIG1fY2xhc3NTY29wZXMpKSB7CiAgICAgICAgICAgICBlbGVtZW50LT5zZXROZWVk
c1N0eWxlUmVjYWxjKCk7CiAgICAgICAgICAgICAvLyBUaGUgd2hvbGUgc3VidHJlZSBpcyBub3cg
aW52YWxpZGF0ZWQsIHdlIGNhbiBza2lwIHRvIHRoZSBuZXh0IHNpYmxpbmcuCi0gICAgICAgICAg
ICBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0U2libGluZygpOworICAgICAgICAgICAgbm9kZSA9
IE5vZGVUcmF2ZXJzYWw6Om5leHRTaWJsaW5nKG5vZGUpOwogICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgIH0KLSAgICAgICAgbm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoKTsKKyAg
ICAgICAgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9kZSk7CiAgICAgfQogfQogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuY3BwCShyZXZpc2lvbiAxMzcxMDgpCisrKyBT
b3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5
LDYgKzM5LDcgQEAKICNpbmNsdWRlICJNZW1vcnlDYWNoZS5oIgogI2luY2x1ZGUgIk11dGF0aW9u
RXZlbnQuaCIKICNpbmNsdWRlICJOb2RlUmVuZGVyU3R5bGUuaCIKKyNpbmNsdWRlICJOb2RlVHJh
dmVyc2FsLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmgiCiAjaW5jbHVkZSAi
UGFnZS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyYXRlZ2llcy5oIgpAQCAtMTA0Nyw3ICsxMDQ4
LDcgQEAgc3RhdGljIHZvaWQgZGlzcGF0Y2hDaGlsZEluc2VydGlvbkV2ZW50cwogCiAgICAgLy8g
ZGlzcGF0Y2ggdGhlIERPTU5vZGVJbnNlcnRlZEludG9Eb2N1bWVudCBldmVudCB0byBhbGwgZGVz
Y2VuZGFudHMKICAgICBpZiAoYy0+aW5Eb2N1bWVudCgpICYmIGRvY3VtZW50LT5oYXNMaXN0ZW5l
clR5cGUoRG9jdW1lbnQ6OkRPTU5PREVJTlNFUlRFRElOVE9ET0NVTUVOVF9MSVNURU5FUikpIHsK
LSAgICAgICAgZm9yICg7IGM7IGMgPSBjLT50cmF2ZXJzZU5leHROb2RlKGNoaWxkKSkKKyAgICAg
ICAgZm9yICg7IGM7IGMgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KGMuZ2V0KCksIGNoaWxkKSkKICAg
ICAgICAgICAgIGMtPmRpc3BhdGNoU2NvcGVkRXZlbnQoTXV0YXRpb25FdmVudDo6Y3JlYXRlKGV2
ZW50TmFtZXMoKS5ET01Ob2RlSW5zZXJ0ZWRJbnRvRG9jdW1lbnRFdmVudCwgZmFsc2UpKTsKICAg
ICB9CiB9CkBAIC0xMDc1LDcgKzEwNzYsNyBAQCBzdGF0aWMgdm9pZCBkaXNwYXRjaENoaWxkUmVt
b3ZhbEV2ZW50cyhOCiAKICAgICAvLyBkaXNwYXRjaCB0aGUgRE9NTm9kZVJlbW92ZWRGcm9tRG9j
dW1lbnQgZXZlbnQgdG8gYWxsIGRlc2NlbmRhbnRzCiAgICAgaWYgKGMtPmluRG9jdW1lbnQoKSAm
JiBkb2N1bWVudC0+aGFzTGlzdGVuZXJUeXBlKERvY3VtZW50OjpET01OT0RFUkVNT1ZFREZST01E
T0NVTUVOVF9MSVNURU5FUikpIHsKLSAgICAgICAgZm9yICg7IGM7IGMgPSBjLT50cmF2ZXJzZU5l
eHROb2RlKGNoaWxkKSkKKyAgICAgICAgZm9yICg7IGM7IGMgPSBOb2RlVHJhdmVyc2FsOjpuZXh0
KGMuZ2V0KCksIGNoaWxkKSkKICAgICAgICAgICAgIGMtPmRpc3BhdGNoU2NvcGVkRXZlbnQoTXV0
YXRpb25FdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5ET01Ob2RlUmVtb3ZlZEZyb21Eb2N1bWVu
dEV2ZW50LCBmYWxzZSkpOwogICAgIH0KIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Db250
YWluZXJOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5v
ZGUuaAkocmV2aXNpb24gMTM3MTA4KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5v
ZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTM0LDEwICsxMzQsNiBAQCBwdWJsaWM6CiAKICAgICB2
aXJ0dWFsIGJvb2wgY2hpbGRTaG91bGRDcmVhdGVSZW5kZXJlcihjb25zdCBOb2RlUmVuZGVyaW5n
Q29udGV4dCYpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIAotICAgIC8vIE1vcmUgZWZmaWNpZW50
IHZlcnNpb25zIG9mIHRoZXNlIHR3byBmdW5jdGlvbnMgZm9yIHRoZSBjYXNlIHdoZXJlIHdlIGFy
ZSBzdGFydGluZyB3aXRoIGEgQ29udGFpbmVyTm9kZS4KLSAgICBOb2RlKiB0cmF2ZXJzZU5leHRO
b2RlKCkgY29uc3Q7Ci0gICAgTm9kZSogdHJhdmVyc2VOZXh0Tm9kZShjb25zdCBOb2RlKiBzdGF5
V2l0aGluKSBjb25zdDsKLQogICAgIHZpcnR1YWwgdm9pZCByZXBvcnRNZW1vcnlVc2FnZShNZW1v
cnlPYmplY3RJbmZvKiBtZW1vcnlPYmplY3RJbmZvKSBjb25zdAogICAgIHsKICAgICAgICAgTWVt
b3J5Q2xhc3NJbmZvIGluZm8obWVtb3J5T2JqZWN0SW5mbywgdGhpcywgV2ViQ29yZU1lbW9yeVR5
cGVzOjpET00pOwpAQCAtMjY5LDU0ICsyNjUsNiBAQCBpbmxpbmUgTm9kZSogTm9kZTo6aGlnaGVz
dEFuY2VzdG9yKCkgY29uCiAgICAgcmV0dXJuIGhpZ2hlc3Q7CiB9CiAKLWlubGluZSBOb2RlKiBO
b2RlOjp0cmF2ZXJzZU5leHRTaWJsaW5nKCkgY29uc3QKLXsKLSAgICBpZiAobmV4dFNpYmxpbmco
KSkKLSAgICAgICAgcmV0dXJuIG5leHRTaWJsaW5nKCk7Ci0gICAgcmV0dXJuIHRyYXZlcnNlTmV4
dEFuY2VzdG9yU2libGluZygpOwotfQotCi1pbmxpbmUgTm9kZSogTm9kZTo6dHJhdmVyc2VOZXh0
Tm9kZSgpIGNvbnN0Ci17Ci0gICAgaWYgKGZpcnN0Q2hpbGQoKSkKLSAgICAgICAgcmV0dXJuIGZp
cnN0Q2hpbGQoKTsKLSAgICByZXR1cm4gdHJhdmVyc2VOZXh0U2libGluZygpOwotfQotCi1pbmxp
bmUgTm9kZSogQ29udGFpbmVyTm9kZTo6dHJhdmVyc2VOZXh0Tm9kZSgpIGNvbnN0Ci17Ci0gICAg
Ly8gTW9yZSBlZmZpY2llbnQgdGhhbiB0aGUgTm9kZTo6dHJhdmVyc2VOZXh0Tm9kZSBhYm92ZSwg
YmVjYXVzZQotICAgIC8vIHRoaXMgZG9lcyBub3QgbmVlZCB0byBkbyB0aGUgaXNDb250YWluZXJO
b2RlIGNoZWNrIGluc2lkZSBmaXJzdENoaWxkLgotICAgIGlmIChmaXJzdENoaWxkKCkpCi0gICAg
ICAgIHJldHVybiBmaXJzdENoaWxkKCk7Ci0gICAgcmV0dXJuIHRyYXZlcnNlTmV4dFNpYmxpbmco
KTsKLX0KLQotaW5saW5lIE5vZGUqIE5vZGU6OnRyYXZlcnNlTmV4dFNpYmxpbmcoY29uc3QgTm9k
ZSogc3RheVdpdGhpbikgY29uc3QKLXsKLSAgICBpZiAodGhpcyA9PSBzdGF5V2l0aGluKQotICAg
ICAgICByZXR1cm4gMDsKLSAgICBpZiAobmV4dFNpYmxpbmcoKSkKLSAgICAgICAgcmV0dXJuIG5l
eHRTaWJsaW5nKCk7Ci0gICAgcmV0dXJuIHRyYXZlcnNlTmV4dEFuY2VzdG9yU2libGluZyhzdGF5
V2l0aGluKTsKLX0KLQotaW5saW5lIE5vZGUqIE5vZGU6OnRyYXZlcnNlTmV4dE5vZGUoY29uc3Qg
Tm9kZSogc3RheVdpdGhpbikgY29uc3QKLXsKLSAgICBpZiAoZmlyc3RDaGlsZCgpKQotICAgICAg
ICByZXR1cm4gZmlyc3RDaGlsZCgpOwotICAgIHJldHVybiB0cmF2ZXJzZU5leHRTaWJsaW5nKHN0
YXlXaXRoaW4pOwotfQotCi1pbmxpbmUgTm9kZSogQ29udGFpbmVyTm9kZTo6dHJhdmVyc2VOZXh0
Tm9kZShjb25zdCBOb2RlKiBzdGF5V2l0aGluKSBjb25zdAotewotICAgIC8vIE1vcmUgZWZmaWNp
ZW50IHRoYW4gdGhlIE5vZGU6OnRyYXZlcnNlTmV4dE5vZGUgYWJvdmUsIGJlY2F1c2UKLSAgICAv
LyB0aGlzIGRvZXMgbm90IG5lZWQgdG8gZG8gdGhlIGlzQ29udGFpbmVyTm9kZSBjaGVjayBpbnNp
ZGUgZmlyc3RDaGlsZC4KLSAgICBpZiAoZmlyc3RDaGlsZCgpKQotICAgICAgICByZXR1cm4gZmly
c3RDaGlsZCgpOwotICAgIHJldHVybiB0cmF2ZXJzZU5leHRTaWJsaW5nKHN0YXlXaXRoaW4pOwot
fQotCiAvLyBUaGlzIGNvbnN0YW50IGNvbnRyb2xzIGhvdyBtdWNoIGJ1ZmZlciBpcyBpbml0aWFs
bHkgYWxsb2NhdGVkCiAvLyBmb3IgYSBOb2RlIFZlY3RvciB0aGF0IGlzIHVzZWQgdG8gc3RvcmUg
Y2hpbGQgTm9kZXMgb2YgYSBnaXZlbiBOb2RlLgogLy8gRklYTUU6IE9wdGltaXplIHRoZSB2YWx1
ZS4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlQWxnb3JpdGhtcy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlQWxnb3JpdGhtcy5o
CShyZXZpc2lvbiAxMzcxMDgpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZUFs
Z29yaXRobXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgIkZy
YW1lLmgiCiAjaW5jbHVkZSAiSFRNTEZyYW1lT3duZXJFbGVtZW50LmgiCiAjaW5jbHVkZSAiSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgiCisjaW5jbHVkZSAiTm9kZVRyYXZlcnNhbC5oIgogI2lu
Y2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTMxNSw4
ICszMTYsNyBAQCBwcml2YXRlOgogCiBpbmxpbmUgdm9pZCBDaGlsZEZyYW1lRGlzY29ubmVjdG9y
Ojpjb2xsZWN0RGVzY2VuZGFudChOb2RlKiByb290LCBTaG91bGRJbmNsdWRlUm9vdCBzaG91bGRJ
bmNsdWRlUm9vdCkKIHsKLSAgICBmb3IgKE5vZGUqIG5vZGUgPSBzaG91bGRJbmNsdWRlUm9vdCA9
PSBJbmNsdWRlUm9vdCA/IHJvb3QgOiByb290LT5maXJzdENoaWxkKCk7IG5vZGU7Ci0gICAgICAg
ICAgICBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZShyb290KSkgeworICAgIGZvciAoTm9k
ZSogbm9kZSA9IHNob3VsZEluY2x1ZGVSb290ID09IEluY2x1ZGVSb290ID8gcm9vdCA6IHJvb3Qt
PmZpcnN0Q2hpbGQoKTsgbm9kZTsgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9kZSwgcm9v
dCkpIHsKICAgICAgICAgaWYgKCFub2RlLT5pc0VsZW1lbnROb2RlKCkpCiAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgRWxlbWVudCogZWxlbWVudCA9IHRvRWxlbWVudChub2RlKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkocmV2aXNpb24gMTM3MTA4KQorKysgU291cmNlL1dl
YkNvcmUvZG9tL0RvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE4LDYgKzExOCw3IEBA
CiAjaW5jbHVkZSAiTm9kZUZpbHRlci5oIgogI2luY2x1ZGUgIk5vZGVJdGVyYXRvci5oIgogI2lu
Y2x1ZGUgIk5vZGVSYXJlRGF0YS5oIgorI2luY2x1ZGUgIk5vZGVUcmF2ZXJzYWwuaCIKICNpbmNs
dWRlICJOb2RlV2l0aEluZGV4LmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlBhZ2VH
cm91cC5oIgpAQCAtNzQ3LDcgKzc0OCw3IEBAIHZvaWQgRG9jdW1lbnQ6OmJ1aWxkQWNjZXNzS2V5
TWFwKFRyZWVTY28KIHsKICAgICBBU1NFUlQoc2NvcGUpOwogICAgIE5vZGUqIHJvb3ROb2RlID0g
c2NvcGUtPnJvb3ROb2RlKCk7Ci0gICAgZm9yIChOb2RlKiBub2RlID0gcm9vdE5vZGU7IG5vZGU7
IG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKHJvb3ROb2RlKSkgeworICAgIGZvciAoTm9k
ZSogbm9kZSA9IHJvb3ROb2RlOyBub2RlOyBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dChub2Rl
LCByb290Tm9kZSkpIHsKICAgICAgICAgaWYgKCFub2RlLT5pc0VsZW1lbnROb2RlKCkpCiAgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0
PEVsZW1lbnQqPihub2RlKTsKQEAgLTIxNTUsNyArMjE1Niw3IEBAIHZvaWQgRG9jdW1lbnQ6OnJl
bW92ZUFsbEV2ZW50TGlzdGVuZXJzKCkKIAogICAgIGlmIChET01XaW5kb3cqIGRvbVdpbmRvdyA9
IHRoaXMtPmRvbVdpbmRvdygpKQogICAgICAgICBkb21XaW5kb3ctPnJlbW92ZUFsbEV2ZW50TGlz
dGVuZXJzKCk7Ci0gICAgZm9yIChOb2RlKiBub2RlID0gZmlyc3RDaGlsZCgpOyBub2RlOyBub2Rl
ID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgpKQorICAgIGZvciAoTm9kZSogbm9kZSA9IGZpcnN0
Q2hpbGQoKTsgbm9kZTsgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9kZSkpCiAgICAgICAg
IG5vZGUtPnJlbW92ZUFsbEV2ZW50TGlzdGVuZXJzKCk7CiB9CiAKQEAgLTI2NjQsNyArMjY2NSw3
IEBAIHZvaWQgRG9jdW1lbnQ6OnVwZGF0ZUJhc2VVUkwoKQogICAgIGlmICghZXF1YWxJZ25vcmlu
Z0ZyYWdtZW50SWRlbnRpZmllcihvbGRCYXNlVVJMLCBtX2Jhc2VVUkwpKSB7CiAgICAgICAgIC8v
IEJhc2UgVVJMIGNoYW5nZSBjaGFuZ2VzIGFueSByZWxhdGl2ZSB2aXNpdGVkIGxpbmtzLgogICAg
ICAgICAvLyBGSVhNRTogVGhlcmUgYXJlIG90aGVyIFVSTHMgaW4gdGhlIHRyZWUgdGhhdCB3b3Vs
ZCBuZWVkIHRvIGJlIHJlLWV2YWx1YXRlZCBvbiBkeW5hbWljIGJhc2UgVVJMIGNoYW5nZS4gU3R5
bGUgc2hvdWxkIGJlIGludmFsaWRhdGVkIHRvby4KLSAgICAgICAgZm9yIChOb2RlKiBub2RlID0g
Zmlyc3RDaGlsZCgpOyBub2RlOyBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgpKSB7Cisg
ICAgICAgIGZvciAoTm9kZSogbm9kZSA9IGZpcnN0Q2hpbGQoKTsgbm9kZTsgbm9kZSA9IE5vZGVU
cmF2ZXJzYWw6Om5leHQobm9kZSkpIHsKICAgICAgICAgICAgIGlmIChub2RlLT5oYXNUYWdOYW1l
KGFUYWcpKQogICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PEhUTUxBbmNob3JFbGVtZW50Kj4o
bm9kZSktPmludmFsaWRhdGVDYWNoZWRWaXNpdGVkTGlua0hhc2goKTsKICAgICAgICAgfQpAQCAt
MjY4Miw3ICsyNjgzLDcgQEAgdm9pZCBEb2N1bWVudDo6cHJvY2Vzc0Jhc2VFbGVtZW50KCkKICAg
ICAvLyBGaW5kIHRoZSBmaXJzdCBocmVmIGF0dHJpYnV0ZSBpbiBhIGJhc2UgZWxlbWVudCBhbmQg
dGhlIGZpcnN0IHRhcmdldCBhdHRyaWJ1dGUgaW4gYSBiYXNlIGVsZW1lbnQuCiAgICAgY29uc3Qg
QXRvbWljU3RyaW5nKiBocmVmID0gMDsKICAgICBjb25zdCBBdG9taWNTdHJpbmcqIHRhcmdldCA9
IDA7Ci0gICAgZm9yIChOb2RlKiBub2RlID0gZG9jdW1lbnQoKS0+Zmlyc3RDaGlsZCgpOyBub2Rl
ICYmICghaHJlZiB8fCAhdGFyZ2V0KTsgbm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoKSkg
eworICAgIGZvciAoTm9kZSogbm9kZSA9IGRvY3VtZW50KCktPmZpcnN0Q2hpbGQoKTsgbm9kZSAm
JiAoIWhyZWYgfHwgIXRhcmdldCk7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUpKSB7
CiAgICAgICAgIGlmIChub2RlLT5oYXNUYWdOYW1lKGJhc2VUYWcpKSB7CiAgICAgICAgICAgICBp
ZiAoIWhyZWYpIHsKICAgICAgICAgICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlID0g
c3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUpLT5mYXN0R2V0QXR0cmlidXRlKGhyZWZBdHRyKTsK
QEAgLTI4MjYsNyArMjgyNyw3IEBAIGludCBEb2N1bWVudDo6bm9kZUFic0luZGV4KE5vZGUgKm5v
ZGUpCiAgICAgQVNTRVJUKG5vZGUtPmRvY3VtZW50KCkgPT0gdGhpcyk7CiAKICAgICBpbnQgYWJz
SW5kZXggPSAwOwotICAgIGZvciAoTm9kZSogbiA9IG5vZGU7IG4gJiYgbiAhPSB0aGlzOyBuID0g
bi0+dHJhdmVyc2VQcmV2aW91c05vZGUoKSkKKyAgICBmb3IgKE5vZGUqIG4gPSBub2RlOyBuICYm
IG4gIT0gdGhpczsgbiA9IE5vZGVUcmF2ZXJzYWw6OnByZXZpb3VzKG4pKQogICAgICAgICBhYnNJ
bmRleCsrOwogICAgIHJldHVybiBhYnNJbmRleDsKIH0KQEAgLTI4MzUsNyArMjgzNiw3IEBAIE5v
ZGUqIERvY3VtZW50Ojpub2RlV2l0aEFic0luZGV4KGludCBhYnMKIHsKICAgICBOb2RlKiBuID0g
dGhpczsKICAgICBmb3IgKGludCBpID0gMDsgbiAmJiAoaSA8IGFic0luZGV4KTsgaSsrKQotICAg
ICAgICBuID0gbi0+dHJhdmVyc2VOZXh0Tm9kZSgpOworICAgICAgICBuID0gTm9kZVRyYXZlcnNh
bDo6bmV4dChuKTsKICAgICByZXR1cm4gbjsKIH0KIApAQCAtMzQ0MSw3ICszNDQyLDcgQEAgdm9p
ZCBEb2N1bWVudDo6Z2V0Rm9jdXNhYmxlTm9kZXMoVmVjdG9yPAogewogICAgIHVwZGF0ZUxheW91
dCgpOwogCi0gICAgZm9yIChOb2RlKiBub2RlID0gZmlyc3RDaGlsZCgpOyBub2RlOyBub2RlID0g
bm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgpKSB7CisgICAgZm9yIChOb2RlKiBub2RlID0gZmlyc3RD
aGlsZCgpOyBub2RlOyBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dChub2RlKSkgewogICAgICAg
ICBpZiAobm9kZS0+aXNGb2N1c2FibGUoKSkKICAgICAgICAgICAgIG5vZGVzLmFwcGVuZChub2Rl
KTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXJDb250cm9s
bGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXJD
b250cm9sbGVyLmNwcAkocmV2aXNpb24gMTM3MTA4KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0Rv
Y3VtZW50TWFya2VyQ29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcg
QEAKICNpbmNsdWRlICJEb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuaCIKIAogI2luY2x1ZGUgIk5v
ZGUuaCIKKyNpbmNsdWRlICJOb2RlVHJhdmVyc2FsLmgiCiAjaW5jbHVkZSAiUmFuZ2UuaCIKICNp
bmNsdWRlICJSZW5kZXJPYmplY3QuaCIKICNpbmNsdWRlICJSZW5kZXJlZERvY3VtZW50TWFya2Vy
LmgiCkBAIC0zNzAsNyArMzcxLDcgQEAgVmVjdG9yPERvY3VtZW50TWFya2VyKj4gRG9jdW1lbnRN
YXJrZXJDbwogICAgIEFTU0VSVChlbmRDb250YWluZXIpOwogCiAgICAgTm9kZSogcGFzdExhc3RO
b2RlID0gcmFuZ2UtPnBhc3RMYXN0Tm9kZSgpOwotICAgIGZvciAoTm9kZSogbm9kZSA9IHJhbmdl
LT5maXJzdE5vZGUoKTsgbm9kZSAhPSBwYXN0TGFzdE5vZGU7IG5vZGUgPSBub2RlLT50cmF2ZXJz
ZU5leHROb2RlKCkpIHsKKyAgICBmb3IgKE5vZGUqIG5vZGUgPSByYW5nZS0+Zmlyc3ROb2RlKCk7
IG5vZGUgIT0gcGFzdExhc3ROb2RlOyBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dChub2RlKSkg
ewogICAgICAgICBWZWN0b3I8RG9jdW1lbnRNYXJrZXIqPiBtYXJrZXJzID0gbWFya2Vyc0Zvcihu
b2RlKTsKICAgICAgICAgVmVjdG9yPERvY3VtZW50TWFya2VyKj46OmNvbnN0X2l0ZXJhdG9yIGVu
ZCA9IG1hcmtlcnMuZW5kKCk7CiAgICAgICAgIGZvciAoVmVjdG9yPERvY3VtZW50TWFya2VyKj46
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFya2Vycy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsK
QEAgLTU3MSw3ICs1NzIsNyBAQCB2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6c2V0TWFy
a2VyCiAgICAgTm9kZSogZW5kQ29udGFpbmVyID0gcmFuZ2UtPmVuZENvbnRhaW5lcihlYyk7CiAK
ICAgICBOb2RlKiBwYXN0TGFzdE5vZGUgPSByYW5nZS0+cGFzdExhc3ROb2RlKCk7Ci0gICAgZm9y
IChOb2RlKiBub2RlID0gcmFuZ2UtPmZpcnN0Tm9kZSgpOyBub2RlICE9IHBhc3RMYXN0Tm9kZTsg
bm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoKSkgeworICAgIGZvciAoTm9kZSogbm9kZSA9
IHJhbmdlLT5maXJzdE5vZGUoKTsgbm9kZSAhPSBwYXN0TGFzdE5vZGU7IG5vZGUgPSBOb2RlVHJh
dmVyc2FsOjpuZXh0KG5vZGUpKSB7CiAgICAgICAgIGludCBzdGFydE9mZnNldCA9IG5vZGUgPT0g
c3RhcnRDb250YWluZXIgPyByYW5nZS0+c3RhcnRPZmZzZXQoZWMpIDogMDsKICAgICAgICAgaW50
IGVuZE9mZnNldCA9IG5vZGUgPT0gZW5kQ29udGFpbmVyID8gcmFuZ2UtPmVuZE9mZnNldChlYykg
OiBJTlRfTUFYOwogICAgICAgICBzZXRNYXJrZXJzQWN0aXZlKG5vZGUsIHN0YXJ0T2Zmc2V0LCBl
bmRPZmZzZXQsIGFjdGl2ZSk7CkBAIC02MTcsNyArNjE4LDcgQEAgYm9vbCBEb2N1bWVudE1hcmtl
ckNvbnRyb2xsZXI6Omhhc01hcmtlcgogICAgIEFTU0VSVChlbmRDb250YWluZXIpOwogCiAgICAg
Tm9kZSogcGFzdExhc3ROb2RlID0gcmFuZ2UtPnBhc3RMYXN0Tm9kZSgpOwotICAgIGZvciAoTm9k
ZSogbm9kZSA9IHJhbmdlLT5maXJzdE5vZGUoKTsgbm9kZSAhPSBwYXN0TGFzdE5vZGU7IG5vZGUg
PSBub2RlLT50cmF2ZXJzZU5leHROb2RlKCkpIHsKKyAgICBmb3IgKE5vZGUqIG5vZGUgPSByYW5n
ZS0+Zmlyc3ROb2RlKCk7IG5vZGUgIT0gcGFzdExhc3ROb2RlOyBub2RlID0gTm9kZVRyYXZlcnNh
bDo6bmV4dChub2RlKSkgewogICAgICAgICBWZWN0b3I8RG9jdW1lbnRNYXJrZXIqPiBtYXJrZXJz
ID0gbWFya2Vyc0Zvcihub2RlKTsKICAgICAgICAgVmVjdG9yPERvY3VtZW50TWFya2VyKj46OmNv
bnN0X2l0ZXJhdG9yIGVuZCA9IG1hcmtlcnMuZW5kKCk7CiAgICAgICAgIGZvciAoVmVjdG9yPERv
Y3VtZW50TWFya2VyKj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFya2Vycy5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpIHsKQEAgLTY0NCw3ICs2NDUsNyBAQCB2b2lkIERvY3VtZW50TWFya2VyQ29u
dHJvbGxlcjo6Y2xlYXJEZXNjCiAgICAgTm9kZSogZW5kQ29udGFpbmVyID0gcmFuZ2UtPmVuZENv
bnRhaW5lcigpOwogCiAgICAgTm9kZSogcGFzdExhc3ROb2RlID0gcmFuZ2UtPnBhc3RMYXN0Tm9k
ZSgpOwotICAgIGZvciAoTm9kZSogbm9kZSA9IHJhbmdlLT5maXJzdE5vZGUoKTsgbm9kZSAhPSBw
YXN0TGFzdE5vZGU7IG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKCkpIHsKKyAgICBmb3Ig
KE5vZGUqIG5vZGUgPSByYW5nZS0+Zmlyc3ROb2RlKCk7IG5vZGUgIT0gcGFzdExhc3ROb2RlOyBu
b2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dChub2RlKSkgewogICAgICAgICB1bnNpZ25lZCBzdGFy
dE9mZnNldCA9IG5vZGUgPT0gc3RhcnRDb250YWluZXIgPyByYW5nZS0+c3RhcnRPZmZzZXQoKSA6
IDA7CiAgICAgICAgIHVuc2lnbmVkIGVuZE9mZnNldCA9IG5vZGUgPT0gZW5kQ29udGFpbmVyID8g
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHJhbmdlLT5lbmRPZmZzZXQoKSkgOiBzdGQ6Om51bWVyaWNf
bGltaXRzPHVuc2lnbmVkPjo6bWF4KCk7CiAgICAgICAgIE1hcmtlckxpc3QqIGxpc3QgPSBtX21h
cmtlcnMuZ2V0KG5vZGUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50T3JkZXJl
ZE1hcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50T3JkZXJl
ZE1hcC5jcHAJKHJldmlzaW9uIDEzNzEwOCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVu
dE9yZGVyZWRNYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVk
ZSAiRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxNYXBFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRN
TE5hbWVzLmgiCisjaW5jbHVkZSAiTm9kZVRyYXZlcnNhbC5oIgogI2luY2x1ZGUgIlRyZWVTY29w
ZS5oIgogI2luY2x1ZGUgIldlYkNvcmVNZW1vcnlJbnN0cnVtZW50YXRpb24uaCIKICNpbmNsdWRl
IDx3dGYvTWVtb3J5SW5zdHJ1bWVudGF0aW9uSGFzaENvdW50ZWRTZXQuaD4KQEAgLTEyNiw3ICsx
MjcsNyBAQCBpbmxpbmUgRWxlbWVudCogRG9jdW1lbnRPcmRlcmVkTWFwOjpnZXQoCiAKICAgICBp
ZiAobV9kdXBsaWNhdGVDb3VudHMuY29udGFpbnMoa2V5KSkgewogICAgICAgICAvLyBXZSBrbm93
IHRoZXJlJ3MgYXQgbGVhc3Qgb25lIG5vZGUgdGhhdCBtYXRjaGVzOyBpdGVyYXRlIHRvIGZpbmQg
dGhlIGZpcnN0IG9uZS4KLSAgICAgICAgZm9yIChOb2RlKiBub2RlID0gc2NvcGUtPnJvb3ROb2Rl
KCktPmZpcnN0Q2hpbGQoKTsgbm9kZTsgbm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoKSkg
eworICAgICAgICBmb3IgKE5vZGUqIG5vZGUgPSBzY29wZS0+cm9vdE5vZGUoKS0+Zmlyc3RDaGls
ZCgpOyBub2RlOyBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dChub2RlKSkgewogICAgICAgICAg
ICAgaWYgKCFub2RlLT5pc0VsZW1lbnROb2RlKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgICAgICBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRTaGFkb3cuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50U2hhZG93LmNwcAkocmV2aXNpb24gMTM3MTA4KQorKysg
U291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRTaGFkb3cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
NSw2ICszNSw3IEBACiAjaW5jbHVkZSAiSFRNTENvbnRlbnRFbGVtZW50LmgiCiAjaW5jbHVkZSAi
SFRNTFNoYWRvd0VsZW1lbnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24u
aCIKKyNpbmNsdWRlICJOb2RlVHJhdmVyc2FsLmgiCiAjaW5jbHVkZSAiU2hhZG93Um9vdC5oIgog
I2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKIApAQCAtMjIwLDcgKzIyMSw3IEBAIHZvaWQgRWxl
bWVudFNoYWRvdzo6ZW5zdXJlU2VsZWN0RmVhdHVyZVMKIHZvaWQgRWxlbWVudFNoYWRvdzo6Y29s
bGVjdFNlbGVjdEZlYXR1cmVTZXRGcm9tKFNoYWRvd1Jvb3QqIHJvb3QpCiB7CiAgICAgaWYgKHJv
b3QtPmhhc0VsZW1lbnRTaGFkb3coKSkgewotICAgICAgICBmb3IgKE5vZGUqIG5vZGUgPSByb290
LT5maXJzdENoaWxkKCk7IG5vZGU7IG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKCkpIHsK
KyAgICAgICAgZm9yIChOb2RlKiBub2RlID0gcm9vdC0+Zmlyc3RDaGlsZCgpOyBub2RlOyBub2Rl
ID0gTm9kZVRyYXZlcnNhbDo6bmV4dChub2RlKSkgewogICAgICAgICAgICAgaWYgKEVsZW1lbnRT
aGFkb3cqIGVsZW1lbnRTaGFkb3cgPSBub2RlLT5pc0VsZW1lbnROb2RlKCkgPyB0b0VsZW1lbnQo
bm9kZSktPnNoYWRvdygpIDogMCkgewogICAgICAgICAgICAgICAgIGVsZW1lbnRTaGFkb3ctPmVu
c3VyZVNlbGVjdEZlYXR1cmVTZXRDb2xsZWN0ZWQoKTsKICAgICAgICAgICAgICAgICBtX3NlbGVj
dEZlYXR1cmVzLmFkZChlbGVtZW50U2hhZG93LT5tX3NlbGVjdEZlYXR1cmVzKTsKQEAgLTIyOSw3
ICsyMzAsNyBAQCB2b2lkIEVsZW1lbnRTaGFkb3c6OmNvbGxlY3RTZWxlY3RGZWF0dXJlCiAgICAg
fQogCiAgICAgaWYgKHJvb3QtPmhhc0NvbnRlbnRFbGVtZW50KCkpIHsKLSAgICAgICAgZm9yIChO
b2RlKiBub2RlID0gcm9vdC0+Zmlyc3RDaGlsZCgpOyBub2RlOyBub2RlID0gbm9kZS0+dHJhdmVy
c2VOZXh0Tm9kZSgpKSB7CisgICAgICAgIGZvciAoTm9kZSogbm9kZSA9IHJvb3QtPmZpcnN0Q2hp
bGQoKTsgbm9kZTsgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9kZSkpIHsKICAgICAgICAg
ICAgIGlmIChpc0hUTUxDb250ZW50RWxlbWVudChub2RlKSkgewogICAgICAgICAgICAgICAgIGNv
bnN0IENTU1NlbGVjdG9yTGlzdCYgbGlzdCA9IHRvSFRNTENvbnRlbnRFbGVtZW50KG5vZGUpLT5z
ZWxlY3Rvckxpc3QoKTsKICAgICAgICAgICAgICAgICBmb3IgKENTU1NlbGVjdG9yKiBzZWxlY3Rv
ciA9IGxpc3QuZmlyc3QoKTsgc2VsZWN0b3I7IHNlbGVjdG9yID0gbGlzdC5uZXh0KHNlbGVjdG9y
KSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9kb20vTm9kZS5jcHAJKHJldmlzaW9uIDEzNzEwOCkKKysrIFNvdXJjZS9XZWJD
b3JlL2RvbS9Ob2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzUsNiArNzUsNyBAQAogI2luY2x1
ZGUgIk5hbWVkTm9kZU1hcC5oIgogI2luY2x1ZGUgIk5vZGVSYXJlRGF0YS5oIgogI2luY2x1ZGUg
Ik5vZGVSZW5kZXJpbmdDb250ZXh0LmgiCisjaW5jbHVkZSAiTm9kZVRyYXZlcnNhbC5oIgogI2lu
Y2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQbGF0Zm9ybU1vdXNlRXZlbnQuaCIKICNpbmNsdWRl
ICJQbGF0Zm9ybVdoZWVsRXZlbnQuaCIKQEAgLTYzOCw3ICs2MzksNyBAQCB2b2lkIE5vZGU6Om5v
cm1hbGl6ZSgpCiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBpZiAodHlwZSAhPSBURVhU
X05PREUpIHsKLSAgICAgICAgICAgIG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlUG9zdE9y
ZGVyKCk7CisgICAgICAgICAgICBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dFBvc3RPcmRlcihu
b2RlLmdldCgpKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKQEAgLTY0Nyw3
ICs2NDgsNyBAQCB2b2lkIE5vZGU6Om5vcm1hbGl6ZSgpCiAgICAgICAgIC8vIFJlbW92ZSBlbXB0
eSB0ZXh0IG5vZGVzLgogICAgICAgICBpZiAoIXRleHQtPmxlbmd0aCgpKSB7CiAgICAgICAgICAg
ICAvLyBDYXJlIG11c3QgYmUgdGFrZW4gdG8gZ2V0IHRoZSBuZXh0IG5vZGUgYmVmb3JlIHJlbW92
aW5nIHRoZSBjdXJyZW50IG5vZGUuCi0gICAgICAgICAgICBub2RlID0gbm9kZS0+dHJhdmVyc2VO
ZXh0Tm9kZVBvc3RPcmRlcigpOworICAgICAgICAgICAgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5l
eHRQb3N0T3JkZXIobm9kZS5nZXQoKSk7CiAgICAgICAgICAgICBFeGNlcHRpb25Db2RlIGVjOwog
ICAgICAgICAgICAgdGV4dC0+cmVtb3ZlKGVjKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAt
Njc0LDcgKzY3NSw3IEBAIHZvaWQgTm9kZTo6bm9ybWFsaXplKCkKICAgICAgICAgICAgIG5leHRU
ZXh0LT5yZW1vdmUoZWMpOwogICAgICAgICB9CiAKLSAgICAgICAgbm9kZSA9IG5vZGUtPnRyYXZl
cnNlTmV4dE5vZGVQb3N0T3JkZXIoKTsKKyAgICAgICAgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5l
eHRQb3N0T3JkZXIobm9kZS5nZXQoKSk7CiAgICAgfQogfQogCkBAIC04ODgsNyArODg5LDcgQEAg
dm9pZCBOb2RlOjpzZXROZWVkc1N0eWxlUmVjYWxjKFN0eWxlQ2hhbgogCiB2b2lkIE5vZGU6Omxh
enlBdHRhY2goU2hvdWxkU2V0QXR0YWNoZWQgc2hvdWxkU2V0QXR0YWNoZWQpCiB7Ci0gICAgZm9y
IChOb2RlKiBuID0gdGhpczsgbjsgbiA9IG4tPnRyYXZlcnNlTmV4dE5vZGUodGhpcykpIHsKKyAg
ICBmb3IgKE5vZGUqIG4gPSB0aGlzOyBuOyBuID0gTm9kZVRyYXZlcnNhbDo6bmV4dChuLCB0aGlz
KSkgewogICAgICAgICBpZiAobi0+aGFzQ2hpbGROb2RlcygpKQogICAgICAgICAgICAgbi0+c2V0
Q2hpbGROZWVkc1N0eWxlUmVjYWxjKCk7CiAgICAgICAgIG4tPnNldFN0eWxlQ2hhbmdlKEZ1bGxT
dHlsZUNoYW5nZSk7CkBAIC0xMDM5LDk2ICsxMDQwLDYgQEAgTm9kZUxpc3RzTm9kZURhdGEqIE5v
ZGU6Om5vZGVMaXN0cygpCiAgICAgcmV0dXJuIGhhc1JhcmVEYXRhKCkgPyByYXJlRGF0YSgpLT5u
b2RlTGlzdHMoKSA6IDA7CiB9CiAKLU5vZGUqIE5vZGU6OnRyYXZlcnNlTmV4dEFuY2VzdG9yU2li
bGluZygpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFuZXh0U2libGluZygpKTsKLSAgICBmb3IgKGNv
bnN0IE5vZGUqIG5vZGUgPSBwYXJlbnROb2RlKCk7IG5vZGU7IG5vZGUgPSBub2RlLT5wYXJlbnRO
b2RlKCkpIHsKLSAgICAgICAgaWYgKG5vZGUtPm5leHRTaWJsaW5nKCkpCi0gICAgICAgICAgICBy
ZXR1cm4gbm9kZS0+bmV4dFNpYmxpbmcoKTsKLSAgICB9Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLU5v
ZGUqIE5vZGU6OnRyYXZlcnNlTmV4dEFuY2VzdG9yU2libGluZyhjb25zdCBOb2RlKiBzdGF5V2l0
aGluKSBjb25zdAotewotICAgIEFTU0VSVCghbmV4dFNpYmxpbmcoKSk7Ci0gICAgQVNTRVJUKHRo
aXMgIT0gc3RheVdpdGhpbik7Ci0gICAgZm9yIChjb25zdCBOb2RlKiBub2RlID0gcGFyZW50Tm9k
ZSgpOyBub2RlOyBub2RlID0gbm9kZS0+cGFyZW50Tm9kZSgpKSB7Ci0gICAgICAgIGlmIChub2Rl
ID09IHN0YXlXaXRoaW4pCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgaWYgKG5vZGUt
Pm5leHRTaWJsaW5nKCkpCi0gICAgICAgICAgICByZXR1cm4gbm9kZS0+bmV4dFNpYmxpbmcoKTsK
LSAgICB9Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLU5vZGUqIE5vZGU6OnRyYXZlcnNlTmV4dE5vZGVQ
b3N0T3JkZXIoKSBjb25zdAotewotICAgIE5vZGUqIG5leHQgPSBuZXh0U2libGluZygpOwotICAg
IGlmICghbmV4dCkKLSAgICAgICAgcmV0dXJuIHBhcmVudE5vZGUoKTsKLSAgICB3aGlsZSAoTm9k
ZSogZmlyc3RDaGlsZCA9IG5leHQtPmZpcnN0Q2hpbGQoKSkKLSAgICAgICAgbmV4dCA9IGZpcnN0
Q2hpbGQ7Ci0gICAgcmV0dXJuIG5leHQ7Ci19Ci0KLU5vZGUqIE5vZGU6OnRyYXZlcnNlUHJldmlv
dXNOb2RlKGNvbnN0IE5vZGUqIHN0YXlXaXRoaW4pIGNvbnN0Ci17Ci0gICAgaWYgKHRoaXMgPT0g
c3RheVdpdGhpbikKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKHByZXZpb3VzU2libGluZygp
KSB7Ci0gICAgICAgIE5vZGUgKm4gPSBwcmV2aW91c1NpYmxpbmcoKTsKLSAgICAgICAgd2hpbGUg
KG4tPmxhc3RDaGlsZCgpKQotICAgICAgICAgICAgbiA9IG4tPmxhc3RDaGlsZCgpOwotICAgICAg
ICByZXR1cm4gbjsKLSAgICB9Ci0gICAgcmV0dXJuIHBhcmVudE5vZGUoKTsKLX0KLQotTm9kZSog
Tm9kZTo6dHJhdmVyc2VQcmV2aW91c1NpYmxpbmcoY29uc3QgTm9kZSogc3RheVdpdGhpbikgY29u
c3QKLXsKLSAgICBpZiAodGhpcyA9PSBzdGF5V2l0aGluKQotICAgICAgICByZXR1cm4gMDsKLSAg
ICBpZiAocHJldmlvdXNTaWJsaW5nKCkpCi0gICAgICAgIHJldHVybiBwcmV2aW91c1NpYmxpbmco
KTsKLSAgICBjb25zdCBOb2RlICpuID0gdGhpczsKLSAgICB3aGlsZSAobiAmJiAhbi0+cHJldmlv
dXNTaWJsaW5nKCkgJiYgKCFzdGF5V2l0aGluIHx8IG4tPnBhcmVudE5vZGUoKSAhPSBzdGF5V2l0
aGluKSkKLSAgICAgICAgbiA9IG4tPnBhcmVudE5vZGUoKTsKLSAgICBpZiAobikKLSAgICAgICAg
cmV0dXJuIG4tPnByZXZpb3VzU2libGluZygpOwotICAgIHJldHVybiAwOwotfQotCi1Ob2RlKiBO
b2RlOjp0cmF2ZXJzZVByZXZpb3VzTm9kZVBvc3RPcmRlcihjb25zdCBOb2RlKiBzdGF5V2l0aGlu
KSBjb25zdAotewotICAgIGlmIChsYXN0Q2hpbGQoKSkKLSAgICAgICAgcmV0dXJuIGxhc3RDaGls
ZCgpOwotICAgIGlmICh0aGlzID09IHN0YXlXaXRoaW4pCi0gICAgICAgIHJldHVybiAwOwotICAg
IGlmIChwcmV2aW91c1NpYmxpbmcoKSkKLSAgICAgICAgcmV0dXJuIHByZXZpb3VzU2libGluZygp
OwotICAgIGNvbnN0IE5vZGUgKm4gPSB0aGlzOwotICAgIHdoaWxlIChuICYmICFuLT5wcmV2aW91
c1NpYmxpbmcoKSAmJiAoIXN0YXlXaXRoaW4gfHwgbi0+cGFyZW50Tm9kZSgpICE9IHN0YXlXaXRo
aW4pKQotICAgICAgICBuID0gbi0+cGFyZW50Tm9kZSgpOwotICAgIGlmIChuKQotICAgICAgICBy
ZXR1cm4gbi0+cHJldmlvdXNTaWJsaW5nKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLU5vZGUqIE5v
ZGU6OnRyYXZlcnNlUHJldmlvdXNTaWJsaW5nUG9zdE9yZGVyKGNvbnN0IE5vZGUqIHN0YXlXaXRo
aW4pIGNvbnN0Ci17Ci0gICAgaWYgKHRoaXMgPT0gc3RheVdpdGhpbikKLSAgICAgICAgcmV0dXJu
IDA7Ci0gICAgaWYgKHByZXZpb3VzU2libGluZygpKQotICAgICAgICByZXR1cm4gcHJldmlvdXNT
aWJsaW5nKCk7Ci0gICAgY29uc3QgTm9kZSAqbiA9IHRoaXM7Ci0gICAgd2hpbGUgKG4gJiYgIW4t
PnByZXZpb3VzU2libGluZygpICYmICghc3RheVdpdGhpbiB8fCBuLT5wYXJlbnROb2RlKCkgIT0g
c3RheVdpdGhpbikpCi0gICAgICAgIG4gPSBuLT5wYXJlbnROb2RlKCk7Ci0gICAgaWYgKG4pCi0g
ICAgICAgIHJldHVybiBuLT5wcmV2aW91c1NpYmxpbmcoKTsKLSAgICByZXR1cm4gMDsKLX0KLQog
dm9pZCBOb2RlOjpjaGVja1NldFByZWZpeChjb25zdCBBdG9taWNTdHJpbmcmIHByZWZpeCwgRXhj
ZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgLy8gUGVyZm9ybSBlcnJvciBjaGVja2luZyBhcyByZXF1
aXJlZCBieSBzcGVjIGZvciBzZXR0aW5nIE5vZGUucHJlZml4LiBVc2VkIGJ5CkBAIC0xMjMzLDcg
KzExNDQsNyBAQCB2b2lkIE5vZGU6OmRldGFjaCgpCiAgICAgaWYgKHJlbmRlcmVyKCkpIHsKICAg
ICAgICAgcmVuZGVyZXIoKS0+ZGVzdHJveUFuZENsZWFudXBBbm9ueW1vdXNXcmFwcGVycygpOwog
I2lmbmRlZiBOREVCVUcKLSAgICAgICAgZm9yIChOb2RlKiBub2RlID0gdGhpczsgbm9kZTsgbm9k
ZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUodGhpcykpIHsKKyAgICAgICAgZm9yIChOb2RlKiBu
b2RlID0gdGhpczsgbm9kZTsgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9kZSwgdGhpcykp
IHsKICAgICAgICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBub2RlLT5yZW5kZXJlcigp
OwogICAgICAgICAgICAgLy8gUmVuZGVyRmxvd1RocmVhZCBhbmQgdGhlIHRvcCBsYXllciByZW1v
dmUgZWxlbWVudHMgZnJvbSB0aGUgcmVndWxhciB0cmVlCiAgICAgICAgICAgICAvLyBoaWVyYXJj
aHkuIFRoZXkgd2lsbCBiZSBjbGVhbmVkIHVwIHdoZW4gd2UgY2FsbCBkZXRhY2ggb24gdGhlbS4K
QEAgLTIwODYsNyArMTk5Nyw3IEBAIHZvaWQgTm9kZTo6c2hvd05vZGVQYXRoRm9yVGhpcygpIGNv
bnN0CiAKIHN0YXRpYyB2b2lkIHRyYXZlcnNlVHJlZUFuZE1hcmsoY29uc3QgU3RyaW5nJiBiYXNl
SW5kZW50LCBjb25zdCBOb2RlKiByb290Tm9kZSwgY29uc3QgTm9kZSogbWFya2VkTm9kZTEsIGNv
bnN0IGNoYXIqIG1hcmtlZExhYmVsMSwgY29uc3QgTm9kZSogbWFya2VkTm9kZTIsIGNvbnN0IGNo
YXIqIG1hcmtlZExhYmVsMikKIHsKLSAgICBmb3IgKGNvbnN0IE5vZGUqIG5vZGUgPSByb290Tm9k
ZTsgbm9kZTsgbm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoKSkgeworICAgIGZvciAoY29u
c3QgTm9kZSogbm9kZSA9IHJvb3ROb2RlOyBub2RlOyBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4
dChub2RlKSkgewogICAgICAgICBpZiAobm9kZSA9PSBtYXJrZWROb2RlMSkKICAgICAgICAgICAg
IGZwcmludGYoc3RkZXJyLCAiJXMiLCBtYXJrZWRMYWJlbDEpOwogICAgICAgICBpZiAobm9kZSA9
PSBtYXJrZWROb2RlMikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaAkocmV2aXNpb24gMTM3MTA4KQorKysgU291
cmNlL1dlYkNvcmUvZG9tL05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDc3LDMwICs0NzcsNiBA
QCBwdWJsaWM6CiAgICAgdW5zaWduZWQgY2hpbGROb2RlQ291bnQoKSBjb25zdDsKICAgICBOb2Rl
KiBjaGlsZE5vZGUodW5zaWduZWQgaW5kZXgpIGNvbnN0OwogCi0gICAgLy8gRG9lcyBhIHByZS1v
cmRlciB0cmF2ZXJzYWwgb2YgdGhlIHRyZWUgdG8gZmluZCB0aGUgbmV4dCBub2RlIGFmdGVyIHRo
aXMgb25lLgotICAgIC8vIFRoaXMgdXNlcyB0aGUgc2FtZSBvcmRlciB0aGF0IHRhZ3MgYXBwZWFy
IGluIHRoZSBzb3VyY2UgZmlsZS4gSWYgdGhlIHN0YXlXaXRoaW4KLSAgICAvLyBhcmd1bWVudCBp
cyBub24tbnVsbCwgdGhlIHRyYXZlcnNhbCB3aWxsIHN0b3Agb25jZSB0aGUgc3BlY2lmaWVkIG5v
ZGUgaXMgcmVhY2hlZC4KLSAgICAvLyBUaGlzIGNhbiBiZSB1c2VkIHRvIHJlc3RyaWN0IHRyYXZl
cnNhbCB0byBhIHBhcnRpY3VsYXIgc3ViLXRyZWUuCi0gICAgTm9kZSogdHJhdmVyc2VOZXh0Tm9k
ZSgpIGNvbnN0OwotICAgIE5vZGUqIHRyYXZlcnNlTmV4dE5vZGUoY29uc3QgTm9kZSogc3RheVdp
dGhpbikgY29uc3Q7Ci0KLSAgICAvLyBMaWtlIHRyYXZlcnNlTmV4dE5vZGUsIGJ1dCBza2lwcyBj
aGlsZHJlbiBhbmQgc3RhcnRzIHdpdGggdGhlIG5leHQgc2libGluZy4KLSAgICBOb2RlKiB0cmF2
ZXJzZU5leHRTaWJsaW5nKCkgY29uc3Q7Ci0gICAgTm9kZSogdHJhdmVyc2VOZXh0U2libGluZyhj
b25zdCBOb2RlKiBzdGF5V2l0aGluKSBjb25zdDsKLQotICAgIC8vIERvZXMgYSByZXZlcnNlIHBy
ZS1vcmRlciB0cmF2ZXJzYWwgdG8gZmluZCB0aGUgbm9kZSB0aGF0IGNvbWVzIGJlZm9yZSB0aGUg
Y3VycmVudCBvbmUgaW4gZG9jdW1lbnQgb3JkZXIKLSAgICBOb2RlKiB0cmF2ZXJzZVByZXZpb3Vz
Tm9kZShjb25zdCBOb2RlKiBzdGF5V2l0aGluID0gMCkgY29uc3Q7Ci0KLSAgICAvLyBMaWtlIHRy
YXZlcnNlUHJldmlvdXNOb2RlLCBidXQgc2tpcHMgY2hpbGRyZW4gYW5kIHN0YXJ0cyB3aXRoIHRo
ZSBuZXh0IHNpYmxpbmcuCi0gICAgTm9kZSogdHJhdmVyc2VQcmV2aW91c1NpYmxpbmcoY29uc3Qg
Tm9kZSogc3RheVdpdGhpbiA9IDApIGNvbnN0OwotCi0gICAgLy8gTGlrZSB0cmF2ZXJzZU5leHRO
b2RlLCBidXQgdmlzaXRzIHBhcmVudHMgYWZ0ZXIgdGhlaXIgY2hpbGRyZW4uCi0gICAgTm9kZSog
dHJhdmVyc2VOZXh0Tm9kZVBvc3RPcmRlcigpIGNvbnN0OwotCi0gICAgLy8gTGlrZSB0cmF2ZXJz
ZVByZXZpb3VzTm9kZSwgYnV0IHZpc2l0cyBwYXJlbnRzIGJlZm9yZSB0aGVpciBjaGlsZHJlbi4K
LSAgICBOb2RlKiB0cmF2ZXJzZVByZXZpb3VzTm9kZVBvc3RPcmRlcihjb25zdCBOb2RlKiBzdGF5
V2l0aGluID0gMCkgY29uc3Q7Ci0gICAgTm9kZSogdHJhdmVyc2VQcmV2aW91c1NpYmxpbmdQb3N0
T3JkZXIoY29uc3QgTm9kZSogc3RheVdpdGhpbiA9IDApIGNvbnN0OwotCiAgICAgdm9pZCBjaGVj
a1NldFByZWZpeChjb25zdCBBdG9taWNTdHJpbmcmIHByZWZpeCwgRXhjZXB0aW9uQ29kZSYpOwog
ICAgIGJvb2wgaXNEZXNjZW5kYW50T2YoY29uc3QgTm9kZSopIGNvbnN0OwogICAgIGJvb2wgY29u
dGFpbnMoY29uc3QgTm9kZSopIGNvbnN0OwpAQCAtODE5LDkgKzc5NSw2IEBAIHByaXZhdGU6CiAK
ICAgICBFbGVtZW50KiBhbmNlc3RvckVsZW1lbnQoKSBjb25zdDsKIAotICAgIE5vZGUqIHRyYXZl
cnNlTmV4dEFuY2VzdG9yU2libGluZygpIGNvbnN0OwotICAgIE5vZGUqIHRyYXZlcnNlTmV4dEFu
Y2VzdG9yU2libGluZyhjb25zdCBOb2RlKiBzdGF5V2l0aGluKSBjb25zdDsKLQogICAgIC8vIFVz
ZSBOb2RlOjpwYXJlbnROb2RlIGFzIHRoZSBjb25zaXN0ZW50IHdheSBvZiBxdWVyeWluZyBhIHBh
cmVudCBub2RlLgogICAgIC8vIFRoaXMgbWV0aG9kIGlzIG1hZGUgcHJpdmF0ZSB0byBlbnN1cmUg
YSBjb21waWxlciBlcnJvciBvbiBjYWxsIHNpdGVzIHRoYXQKICAgICAvLyBkb24ndCBmb2xsb3cg
dGhpcyBydWxlLgpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL05vZGVJdGVyYXRvci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL05vZGVJdGVyYXRvci5jcHAJKHJldmlzaW9u
IDEzNzEwOCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlSXRlcmF0b3IuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRl
ICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiTm9kZUZpbHRlci5oIgorI2luY2x1ZGUgIk5v
ZGVUcmF2ZXJzYWwuaCIKICNpbmNsdWRlICJTY3JpcHRTdGF0ZS5oIgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CkBAIC01NSw3ICs1Niw3IEBAIGJvb2wgTm9kZUl0ZXJhdG9yOjpOb2RlUG9pbnRlcjo6
bW92ZVRvTmUKICAgICAgICAgaXNQb2ludGVyQmVmb3JlTm9kZSA9IGZhbHNlOwogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAgbm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUocm9v
dCk7CisgICAgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9kZS5nZXQoKSwgcm9vdCk7CiAg
ICAgcmV0dXJuIG5vZGU7CiB9CiAKQEAgLTY3LDcgKzY4LDcgQEAgYm9vbCBOb2RlSXRlcmF0b3I6
Ok5vZGVQb2ludGVyOjptb3ZlVG9QcgogICAgICAgICBpc1BvaW50ZXJCZWZvcmVOb2RlID0gdHJ1
ZTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQotICAgIG5vZGUgPSBub2RlLT50cmF2ZXJz
ZVByZXZpb3VzTm9kZShyb290KTsKKyAgICBub2RlID0gTm9kZVRyYXZlcnNhbDo6cHJldmlvdXMo
bm9kZS5nZXQoKSwgcm9vdCk7CiAgICAgcmV0dXJuIG5vZGU7CiB9CiAKQEAgLTE3NywyMiArMTc4
LDIyIEBAIHZvaWQgTm9kZUl0ZXJhdG9yOjp1cGRhdGVGb3JOb2RlUmVtb3ZhbCgKICAgICAgICAg
cmV0dXJuOwogCiAgICAgaWYgKHJlZmVyZW5jZU5vZGUuaXNQb2ludGVyQmVmb3JlTm9kZSkgewot
ICAgICAgICBOb2RlKiBub2RlID0gcmVtb3ZlZE5vZGUtPnRyYXZlcnNlTmV4dE5vZGUocm9vdCgp
KTsKKyAgICAgICAgTm9kZSogbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQocmVtb3ZlZE5vZGUs
IHJvb3QoKSk7CiAgICAgICAgIGlmIChub2RlKSB7CiAgICAgICAgICAgICAvLyBNb3ZlIG91dCBm
cm9tIHVuZGVyIHRoZSBub2RlIGJlaW5nIHJlbW92ZWQgaWYgdGhlIG5ldyByZWZlcmVuY2UKICAg
ICAgICAgICAgIC8vIG5vZGUgaXMgYSBkZXNjZW5kYW50IG9mIHRoZSBub2RlIGJlaW5nIHJlbW92
ZWQuCiAgICAgICAgICAgICB3aGlsZSAobm9kZSAmJiBub2RlLT5pc0Rlc2NlbmRhbnRPZihyZW1v
dmVkTm9kZSkpCi0gICAgICAgICAgICAgICAgbm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUo
cm9vdCgpKTsKKyAgICAgICAgICAgICAgICBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dChub2Rl
LCByb290KCkpOwogICAgICAgICAgICAgaWYgKG5vZGUpCiAgICAgICAgICAgICAgICAgcmVmZXJl
bmNlTm9kZS5ub2RlID0gbm9kZTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG5vZGUg
PSByZW1vdmVkTm9kZS0+dHJhdmVyc2VQcmV2aW91c05vZGUocm9vdCgpKTsKKyAgICAgICAgICAg
IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpwcmV2aW91cyhyZW1vdmVkTm9kZSwgcm9vdCgpKTsKICAg
ICAgICAgICAgIGlmIChub2RlKSB7CiAgICAgICAgICAgICAgICAgLy8gTW92ZSBvdXQgZnJvbSB1
bmRlciB0aGUgbm9kZSBiZWluZyByZW1vdmVkIGlmIHRoZSByZWZlcmVuY2Ugbm9kZSBpcwogICAg
ICAgICAgICAgICAgIC8vIGEgZGVzY2VuZGFudCBvZiB0aGUgbm9kZSBiZWluZyByZW1vdmVkLgog
ICAgICAgICAgICAgICAgIGlmICh3aWxsUmVtb3ZlUmVmZXJlbmNlTm9kZUFuY2VzdG9yKSB7CiAg
ICAgICAgICAgICAgICAgICAgIHdoaWxlIChub2RlICYmIG5vZGUtPmlzRGVzY2VuZGFudE9mKHJl
bW92ZWROb2RlKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUgPSBub2RlLT50cmF2ZXJz
ZVByZXZpb3VzTm9kZShyb290KCkpOworICAgICAgICAgICAgICAgICAgICAgICAgbm9kZSA9IE5v
ZGVUcmF2ZXJzYWw6OnByZXZpb3VzKG5vZGUsIHJvb3QoKSk7CiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgIGlmIChub2RlKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIFJlbW92
aW5nIGxhc3Qgbm9kZS4KQEAgLTIwNCwyNCArMjA1LDI0IEBAIHZvaWQgTm9kZUl0ZXJhdG9yOjp1
cGRhdGVGb3JOb2RlUmVtb3ZhbCgKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0gZWxz
ZSB7Ci0gICAgICAgIE5vZGUqIG5vZGUgPSByZW1vdmVkTm9kZS0+dHJhdmVyc2VQcmV2aW91c05v
ZGUocm9vdCgpKTsKKyAgICAgICAgTm9kZSogbm9kZSA9IE5vZGVUcmF2ZXJzYWw6OnByZXZpb3Vz
KHJlbW92ZWROb2RlLCByb290KCkpOwogICAgICAgICBpZiAobm9kZSkgewogICAgICAgICAgICAg
Ly8gTW92ZSBvdXQgZnJvbSB1bmRlciB0aGUgbm9kZSBiZWluZyByZW1vdmVkIGlmIHRoZSByZWZl
cmVuY2Ugbm9kZSBpcwogICAgICAgICAgICAgLy8gYSBkZXNjZW5kYW50IG9mIHRoZSBub2RlIGJl
aW5nIHJlbW92ZWQuCiAgICAgICAgICAgICBpZiAod2lsbFJlbW92ZVJlZmVyZW5jZU5vZGVBbmNl
c3RvcikgewogICAgICAgICAgICAgICAgIHdoaWxlIChub2RlICYmIG5vZGUtPmlzRGVzY2VuZGFu
dE9mKHJlbW92ZWROb2RlKSkKLSAgICAgICAgICAgICAgICAgICAgbm9kZSA9IG5vZGUtPnRyYXZl
cnNlUHJldmlvdXNOb2RlKHJvb3QoKSk7CisgICAgICAgICAgICAgICAgICAgIG5vZGUgPSBOb2Rl
VHJhdmVyc2FsOjpwcmV2aW91cyhub2RlLCByb290KCkpOwogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgaWYgKG5vZGUpCiAgICAgICAgICAgICAgICAgcmVmZXJlbmNlTm9kZS5ub2RlID0gbm9k
ZTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIGJyYW5jaCBk
b2Vzbid0IGFwcGVhciB0byBoYXZlIGFueSBMYXlvdXRUZXN0cy4KLSAgICAgICAgICAgIG5vZGUg
PSByZW1vdmVkTm9kZS0+dHJhdmVyc2VOZXh0Tm9kZShyb290KCkpOworICAgICAgICAgICAgbm9k
ZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQocmVtb3ZlZE5vZGUsIHJvb3QoKSk7CiAgICAgICAgICAg
ICAvLyBNb3ZlIG91dCBmcm9tIHVuZGVyIHRoZSBub2RlIGJlaW5nIHJlbW92ZWQgaWYgdGhlIHJl
ZmVyZW5jZSBub2RlIGlzCiAgICAgICAgICAgICAvLyBhIGRlc2NlbmRhbnQgb2YgdGhlIG5vZGUg
YmVpbmcgcmVtb3ZlZC4KICAgICAgICAgICAgIGlmICh3aWxsUmVtb3ZlUmVmZXJlbmNlTm9kZUFu
Y2VzdG9yKSB7CiAgICAgICAgICAgICAgICAgd2hpbGUgKG5vZGUgJiYgbm9kZS0+aXNEZXNjZW5k
YW50T2YocmVtb3ZlZE5vZGUpKQotICAgICAgICAgICAgICAgICAgICBub2RlID0gbm9kZS0+dHJh
dmVyc2VQcmV2aW91c05vZGUocm9vdCgpKTsKKyAgICAgICAgICAgICAgICAgICAgbm9kZSA9IE5v
ZGVUcmF2ZXJzYWw6OnByZXZpb3VzKG5vZGUsIHJvb3QoKSk7CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICBpZiAobm9kZSkKICAgICAgICAgICAgICAgICByZWZlcmVuY2VOb2RlLm5vZGUgPSBu
b2RlOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL05vZGVUcmF2ZXJzYWwuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlVHJhdmVyc2FsLmNwcAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlVHJhdmVyc2FsLmNwcAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSwxMjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25v
bGxAa2RlLm9yZykKKyAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlz
dG9Aa2RlLm9yZykKKyAqICAgICAgICAgICAoQykgMjAwMSBEaXJrIE11ZWxsZXIgKG11ZWxsZXJA
a2RlLm9yZykKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwg
MjAwOSwgMjAxMCwgMjAxMSwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4gKGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLykKKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJOb2RlVHJhdmVyc2FsLmgiCisKKyNpbmNsdWRlICJDb250YWluZXJO
b2RlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK25hbWVzcGFjZSBOb2RlVHJhdmVyc2FsIHsK
KworTm9kZSogbmV4dEFuY2VzdG9yU2libGluZyhjb25zdCBOb2RlKiBjdXJyZW50KQoreworICAg
IEFTU0VSVCghY3VycmVudC0+bmV4dFNpYmxpbmcoKSk7CisgICAgZm9yIChjdXJyZW50ID0gY3Vy
cmVudC0+cGFyZW50Tm9kZSgpOyBjdXJyZW50OyBjdXJyZW50ID0gY3VycmVudC0+cGFyZW50Tm9k
ZSgpKSB7CisgICAgICAgIGlmIChjdXJyZW50LT5uZXh0U2libGluZygpKQorICAgICAgICAgICAg
cmV0dXJuIGN1cnJlbnQtPm5leHRTaWJsaW5nKCk7CisgICAgfQorICAgIHJldHVybiAwOworfQor
CitOb2RlKiBuZXh0QW5jZXN0b3JTaWJsaW5nKGNvbnN0IE5vZGUqIGN1cnJlbnQsIGNvbnN0IE5v
ZGUqIHN0YXlXaXRoaW4pCit7CisgICAgQVNTRVJUKCFjdXJyZW50LT5uZXh0U2libGluZygpKTsK
KyAgICBBU1NFUlQoY3VycmVudCAhPSBzdGF5V2l0aGluKTsKKyAgICBmb3IgKGN1cnJlbnQgPSBj
dXJyZW50LT5wYXJlbnROb2RlKCk7IGN1cnJlbnQ7IGN1cnJlbnQgPSBjdXJyZW50LT5wYXJlbnRO
b2RlKCkpIHsKKyAgICAgICAgaWYgKGN1cnJlbnQgPT0gc3RheVdpdGhpbikKKyAgICAgICAgICAg
IHJldHVybiAwOworICAgICAgICBpZiAoY3VycmVudC0+bmV4dFNpYmxpbmcoKSkKKyAgICAgICAg
ICAgIHJldHVybiBjdXJyZW50LT5uZXh0U2libGluZygpOworICAgIH0KKyAgICByZXR1cm4gMDsK
K30KKworTm9kZSogcHJldmlvdXMoY29uc3QgTm9kZSogY3VycmVudCwgY29uc3QgTm9kZSogc3Rh
eVdpdGhpbikKK3sKKyAgICBpZiAoY3VycmVudCA9PSBzdGF5V2l0aGluKQorICAgICAgICByZXR1
cm4gMDsKKyAgICBpZiAoY3VycmVudC0+cHJldmlvdXNTaWJsaW5nKCkpIHsKKyAgICAgICAgTm9k
ZSogcHJldmlvdXMgPSBjdXJyZW50LT5wcmV2aW91c1NpYmxpbmcoKTsKKyAgICAgICAgd2hpbGUg
KHByZXZpb3VzLT5sYXN0Q2hpbGQoKSkKKyAgICAgICAgICAgIHByZXZpb3VzID0gcHJldmlvdXMt
Pmxhc3RDaGlsZCgpOworICAgICAgICByZXR1cm4gcHJldmlvdXM7CisgICAgfQorICAgIHJldHVy
biBjdXJyZW50LT5wYXJlbnROb2RlKCk7Cit9CisKK05vZGUqIHByZXZpb3VzU2libGluZyhjb25z
dCBOb2RlKiBjdXJyZW50LCBjb25zdCBOb2RlKiBzdGF5V2l0aGluKQoreworICAgIGlmIChjdXJy
ZW50ID09IHN0YXlXaXRoaW4pCisgICAgICAgIHJldHVybiAwOworICAgIGlmIChjdXJyZW50LT5w
cmV2aW91c1NpYmxpbmcoKSkKKyAgICAgICAgcmV0dXJuIGN1cnJlbnQtPnByZXZpb3VzU2libGlu
ZygpOworICAgIGZvciAoY3VycmVudCA9IGN1cnJlbnQtPnBhcmVudE5vZGUoKTsgY3VycmVudDsg
Y3VycmVudCA9IGN1cnJlbnQtPnBhcmVudE5vZGUoKSkgeworICAgICAgICBpZiAoY3VycmVudCA9
PSBzdGF5V2l0aGluKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGlmIChjdXJyZW50
LT5wcmV2aW91c1NpYmxpbmcoKSkKKyAgICAgICAgICAgIHJldHVybiBjdXJyZW50LT5wcmV2aW91
c1NpYmxpbmcoKTsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKK05vZGUqIG5leHRQb3N0T3Jk
ZXIoY29uc3QgTm9kZSogY3VycmVudCwgY29uc3QgTm9kZSogc3RheVdpdGhpbikKK3sKKyAgICBp
ZiAoY3VycmVudCA9PSBzdGF5V2l0aGluKQorICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAoIWN1
cnJlbnQtPm5leHRTaWJsaW5nKCkpCisgICAgICAgIHJldHVybiBjdXJyZW50LT5wYXJlbnROb2Rl
KCk7CisgICAgTm9kZSogbmV4dCA9IGN1cnJlbnQtPm5leHRTaWJsaW5nKCk7CisgICAgd2hpbGUg
KG5leHQtPmZpcnN0Q2hpbGQoKSkKKyAgICAgICAgbmV4dCA9IG5leHQtPmZpcnN0Q2hpbGQoKTsK
KyAgICByZXR1cm4gbmV4dDsKK30KKworc3RhdGljIE5vZGUqIHByZXZpb3VzQW5jZXN0b3JTaWJs
aW5nUG9zdE9yZGVyKGNvbnN0IE5vZGUqIGN1cnJlbnQsIGNvbnN0IE5vZGUqIHN0YXlXaXRoaW4p
Cit7CisgICAgQVNTRVJUKCFjdXJyZW50LT5wcmV2aW91c1NpYmxpbmcoKSk7CisgICAgZm9yIChj
dXJyZW50ID0gY3VycmVudC0+cGFyZW50Tm9kZSgpOyBjdXJyZW50OyBjdXJyZW50ID0gY3VycmVu
dC0+cGFyZW50Tm9kZSgpKSB7CisgICAgICAgIGlmIChjdXJyZW50ID09IHN0YXlXaXRoaW4pCisg
ICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgaWYgKGN1cnJlbnQtPnByZXZpb3VzU2libGlu
ZygpKQorICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQtPnByZXZpb3VzU2libGluZygpOworICAg
IH0KKyAgICByZXR1cm4gMDsKK30KKworTm9kZSogcHJldmlvdXNQb3N0T3JkZXIoY29uc3QgTm9k
ZSogY3VycmVudCwgY29uc3QgTm9kZSogc3RheVdpdGhpbikKK3sKKyAgICBpZiAoY3VycmVudC0+
bGFzdENoaWxkKCkpCisgICAgICAgIHJldHVybiBjdXJyZW50LT5sYXN0Q2hpbGQoKTsKKyAgICBp
ZiAoY3VycmVudCA9PSBzdGF5V2l0aGluKQorICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAoY3Vy
cmVudC0+cHJldmlvdXNTaWJsaW5nKCkpCisgICAgICAgIHJldHVybiBjdXJyZW50LT5wcmV2aW91
c1NpYmxpbmcoKTsKKyAgICByZXR1cm4gcHJldmlvdXNBbmNlc3RvclNpYmxpbmdQb3N0T3JkZXIo
Y3VycmVudCwgc3RheVdpdGhpbik7Cit9CisKK05vZGUqIHByZXZpb3VzU2libGluZ1Bvc3RPcmRl
cihjb25zdCBOb2RlKiBjdXJyZW50LCBjb25zdCBOb2RlKiBzdGF5V2l0aGluKQoreworICAgIGlm
IChjdXJyZW50ID09IHN0YXlXaXRoaW4pCisgICAgICAgIHJldHVybiAwOworICAgIGlmIChjdXJy
ZW50LT5wcmV2aW91c1NpYmxpbmcoKSkKKyAgICAgICAgcmV0dXJuIGN1cnJlbnQtPnByZXZpb3Vz
U2libGluZygpOworICAgIHJldHVybiBwcmV2aW91c0FuY2VzdG9yU2libGluZ1Bvc3RPcmRlcihj
dXJyZW50LCBzdGF5V2l0aGluKTsKK30KKworfQorfQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9t
L05vZGVUcmF2ZXJzYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZVRy
YXZlcnNhbC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvZG9tL05vZGVUcmF2ZXJz
YWwuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKKyAqICAgICAgICAgICAoQykgMTk5OSBB
bnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKKyAqICAgICAgICAgICAoQykgMjAwMSBE
aXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAw
NSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSwgMjAxMiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgVG9yY2ggTW9i
aWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gKGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29t
LykKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgor
ICovCisKKyNpZm5kZWYgTm9kZVRyYXZlcnNhbF9oCisjZGVmaW5lIE5vZGVUcmF2ZXJzYWxfaAor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIE5vZGU7CitjbGFzcyBDb250YWluZXJOb2Rl
OworCituYW1lc3BhY2UgTm9kZVRyYXZlcnNhbCB7CisKKy8vIERvZXMgYSBwcmUtb3JkZXIgdHJh
dmVyc2FsIG9mIHRoZSB0cmVlIHRvIGZpbmQgdGhlIG5leHQgbm9kZSBhZnRlciB0aGlzIG9uZS4K
Ky8vIFRoaXMgdXNlcyB0aGUgc2FtZSBvcmRlciB0aGF0IHRhZ3MgYXBwZWFyIGluIHRoZSBzb3Vy
Y2UgZmlsZS4gSWYgdGhlIHN0YXlXaXRoaW4KKy8vIGFyZ3VtZW50IGlzIG5vbi1udWxsLCB0aGUg
dHJhdmVyc2FsIHdpbGwgc3RvcCBvbmNlIHRoZSBzcGVjaWZpZWQgbm9kZSBpcyByZWFjaGVkLgor
Ly8gVGhpcyBjYW4gYmUgdXNlZCB0byByZXN0cmljdCB0cmF2ZXJzYWwgdG8gYSBwYXJ0aWN1bGFy
IHN1Yi10cmVlLgorTm9kZSogbmV4dChjb25zdCBOb2RlKik7CitOb2RlKiBuZXh0KGNvbnN0IE5v
ZGUqLCBjb25zdCBOb2RlKiBzdGF5V2l0aGluKTsKK05vZGUqIG5leHQoY29uc3QgQ29udGFpbmVy
Tm9kZSopOworTm9kZSogbmV4dChjb25zdCBDb250YWluZXJOb2RlKiwgY29uc3QgTm9kZSogc3Rh
eVdpdGhpbik7CisKKy8vIExpa2UgbmV4dCwgYnV0IHNraXBzIGNoaWxkcmVuIGFuZCBzdGFydHMg
d2l0aCB0aGUgbmV4dCBzaWJsaW5nLgorTm9kZSogbmV4dFNpYmxpbmcoY29uc3QgTm9kZSopOwor
Tm9kZSogbmV4dFNpYmxpbmcoY29uc3QgTm9kZSosIGNvbnN0IE5vZGUqIHN0YXlXaXRoaW4pOwor
Tm9kZSogbmV4dFNpYmxpbmcoY29uc3QgQ29udGFpbmVyTm9kZSopOworTm9kZSogbmV4dFNpYmxp
bmcoY29uc3QgQ29udGFpbmVyTm9kZSosIGNvbnN0IE5vZGUqIHN0YXlXaXRoaW4pOworCisvLyBE
b2VzIGEgcmV2ZXJzZSBwcmUtb3JkZXIgdHJhdmVyc2FsIHRvIGZpbmQgdGhlIG5vZGUgdGhhdCBj
b21lcyBiZWZvcmUgdGhlIGN1cnJlbnQgb25lIGluIGRvY3VtZW50IG9yZGVyCitOb2RlKiBwcmV2
aW91cyhjb25zdCBOb2RlKiwgY29uc3QgTm9kZSogc3RheVdpdGhpbiA9IDApOworCisvLyBMaWtl
IHByZXZpb3VzLCBidXQgc2tpcHMgY2hpbGRyZW4gYW5kIHN0YXJ0cyB3aXRoIHRoZSBuZXh0IHNp
YmxpbmcuCitOb2RlKiBwcmV2aW91c1NpYmxpbmcoY29uc3QgTm9kZSosIGNvbnN0IE5vZGUqIHN0
YXlXaXRoaW4gPSAwKTsKKworLy8gTGlrZSBuZXh0LCBidXQgdmlzaXRzIHBhcmVudHMgYWZ0ZXIg
dGhlaXIgY2hpbGRyZW4uCitOb2RlKiBuZXh0UG9zdE9yZGVyKGNvbnN0IE5vZGUqLCBjb25zdCBO
b2RlKiBzdGF5V2l0aGluID0gMCk7CisKKy8vIExpa2UgcHJldmlvdXMvcHJldmlvdXNTaWJsaW5n
LCBidXQgdmlzaXRzIHBhcmVudHMgYmVmb3JlIHRoZWlyIGNoaWxkcmVuLgorTm9kZSogcHJldmlv
dXNQb3N0T3JkZXIoY29uc3QgTm9kZSosIGNvbnN0IE5vZGUqIHN0YXlXaXRoaW4gPSAwKTsKK05v
ZGUqIHByZXZpb3VzU2libGluZ1Bvc3RPcmRlcihjb25zdCBOb2RlKiwgY29uc3QgTm9kZSogc3Rh
eVdpdGhpbiA9IDApOworCitOb2RlKiBuZXh0QW5jZXN0b3JTaWJsaW5nKGNvbnN0IE5vZGUqKTsK
K05vZGUqIG5leHRBbmNlc3RvclNpYmxpbmcoY29uc3QgTm9kZSosIGNvbnN0IE5vZGUqIHN0YXlX
aXRoaW4pOworCit0ZW1wbGF0ZSA8Y2xhc3MgTm9kZVR5cGU+CitOb2RlKiB0cmF2ZXJzZU5leHRO
b2RlVGVtcGxhdGUoTm9kZVR5cGUqIGN1cnJlbnQpCit7CisgICAgaWYgKGN1cnJlbnQtPmZpcnN0
Q2hpbGQoKSkKKyAgICAgICAgcmV0dXJuIGN1cnJlbnQtPmZpcnN0Q2hpbGQoKTsKKyAgICBpZiAo
Y3VycmVudC0+bmV4dFNpYmxpbmcoKSkKKyAgICAgICAgcmV0dXJuIGN1cnJlbnQtPm5leHRTaWJs
aW5nKCk7CisgICAgcmV0dXJuIG5leHRBbmNlc3RvclNpYmxpbmcoY3VycmVudCk7Cit9Citpbmxp
bmUgTm9kZSogbmV4dChjb25zdCBOb2RlKiBjdXJyZW50KSB7IHJldHVybiB0cmF2ZXJzZU5leHRO
b2RlVGVtcGxhdGUoY3VycmVudCk7IH0KK2lubGluZSBOb2RlKiBuZXh0KGNvbnN0IENvbnRhaW5l
ck5vZGUqIGN1cnJlbnQpIHsgcmV0dXJuIHRyYXZlcnNlTmV4dE5vZGVUZW1wbGF0ZShjdXJyZW50
KTsgfQorICAgIAordGVtcGxhdGUgPGNsYXNzIE5vZGVUeXBlPgorTm9kZSogdHJhdmVyc2VOZXh0
Tm9kZVRlbXBsYXRlKE5vZGVUeXBlKiBjdXJyZW50LCBjb25zdCBOb2RlKiBzdGF5V2l0aGluKQor
eworICAgIGlmIChjdXJyZW50LT5maXJzdENoaWxkKCkpCisgICAgICAgIHJldHVybiBjdXJyZW50
LT5maXJzdENoaWxkKCk7CisgICAgaWYgKGN1cnJlbnQgPT0gc3RheVdpdGhpbikKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgaWYgKGN1cnJlbnQtPm5leHRTaWJsaW5nKCkpCisgICAgICAgIHJldHVy
biBjdXJyZW50LT5uZXh0U2libGluZygpOworICAgIHJldHVybiBuZXh0QW5jZXN0b3JTaWJsaW5n
KGN1cnJlbnQsIHN0YXlXaXRoaW4pOworfQoraW5saW5lIE5vZGUqIG5leHQoY29uc3QgTm9kZSog
Y3VycmVudCwgY29uc3QgTm9kZSogc3RheVdpdGhpbikgeyByZXR1cm4gdHJhdmVyc2VOZXh0Tm9k
ZVRlbXBsYXRlKGN1cnJlbnQsIHN0YXlXaXRoaW4pOyB9CitpbmxpbmUgTm9kZSogbmV4dChjb25z
dCBDb250YWluZXJOb2RlKiBjdXJyZW50LCBjb25zdCBOb2RlKiBzdGF5V2l0aGluKSB7IHJldHVy
biB0cmF2ZXJzZU5leHROb2RlVGVtcGxhdGUoY3VycmVudCwgc3RheVdpdGhpbik7IH0KKwordGVt
cGxhdGUgPGNsYXNzIE5vZGVUeXBlPgorTm9kZSogdHJhdmVyc2VOZXh0U2libGluZ1RlbXBsYXRl
KE5vZGVUeXBlKiBjdXJyZW50KQoreworICAgIGlmIChjdXJyZW50LT5uZXh0U2libGluZygpKQor
ICAgICAgICByZXR1cm4gY3VycmVudC0+bmV4dFNpYmxpbmcoKTsKKyAgICByZXR1cm4gbmV4dEFu
Y2VzdG9yU2libGluZyhjdXJyZW50KTsKK30KK2lubGluZSBOb2RlKiBuZXh0U2libGluZyhjb25z
dCBOb2RlKiBjdXJyZW50KSB7IHJldHVybiB0cmF2ZXJzZU5leHRTaWJsaW5nVGVtcGxhdGUoY3Vy
cmVudCk7IH0KK2lubGluZSBOb2RlKiBuZXh0U2libGluZyhjb25zdCBDb250YWluZXJOb2RlKiBj
dXJyZW50KSB7IHJldHVybiB0cmF2ZXJzZU5leHRTaWJsaW5nVGVtcGxhdGUoY3VycmVudCk7IH0K
KwordGVtcGxhdGUgPGNsYXNzIE5vZGVUeXBlPgorTm9kZSogdHJhdmVyc2VOZXh0U2libGluZ1Rl
bXBsYXRlKE5vZGVUeXBlKiBjdXJyZW50LCBjb25zdCBOb2RlKiBzdGF5V2l0aGluKQoreworICAg
IGlmIChjdXJyZW50ID09IHN0YXlXaXRoaW4pCisgICAgICAgIHJldHVybiAwOworICAgIGlmIChj
dXJyZW50LT5uZXh0U2libGluZygpKQorICAgICAgICByZXR1cm4gY3VycmVudC0+bmV4dFNpYmxp
bmcoKTsKKyAgICByZXR1cm4gbmV4dEFuY2VzdG9yU2libGluZyhjdXJyZW50LCBzdGF5V2l0aGlu
KTsKK30KK2lubGluZSBOb2RlKiBuZXh0U2libGluZyhjb25zdCBOb2RlKiBjdXJyZW50LCBjb25z
dCBOb2RlKiBzdGF5V2l0aGluKSB7IHJldHVybiB0cmF2ZXJzZU5leHRTaWJsaW5nVGVtcGxhdGUo
Y3VycmVudCwgc3RheVdpdGhpbik7IH0KK2lubGluZSBOb2RlKiBuZXh0U2libGluZyhjb25zdCBD
b250YWluZXJOb2RlKiBjdXJyZW50LCBjb25zdCBOb2RlKiBzdGF5V2l0aGluKSB7IHJldHVybiB0
cmF2ZXJzZU5leHRTaWJsaW5nVGVtcGxhdGUoY3VycmVudCwgc3RheVdpdGhpbik7IH0KKworfQor
Cit9CisKKyNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuY3BwCShyZXZpc2lvbiAxMzcxMDgpCisr
KyBTb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICsz
NSw3IEBACiAjaW5jbHVkZSAiSFRNTEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIK
ICNpbmNsdWRlICJOb2RlLmgiCisjaW5jbHVkZSAiTm9kZVRyYXZlcnNhbC5oIgogI2luY2x1ZGUg
Ik5vZGVXaXRoSW5kZXguaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUHJvY2Vzc2lu
Z0luc3RydWN0aW9uLmgiCkBAIC0xMDY1LDcgKzEwNjYsNyBAQCBTdHJpbmcgUmFuZ2U6OnRvU3Ry
aW5nKEV4Y2VwdGlvbkNvZGUmIGVjCiAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwogCiAgICAg
Tm9kZSogcGFzdExhc3QgPSBwYXN0TGFzdE5vZGUoKTsKLSAgICBmb3IgKE5vZGUqIG4gPSBmaXJz
dE5vZGUoKTsgbiAhPSBwYXN0TGFzdDsgbiA9IG4tPnRyYXZlcnNlTmV4dE5vZGUoKSkgeworICAg
IGZvciAoTm9kZSogbiA9IGZpcnN0Tm9kZSgpOyBuICE9IHBhc3RMYXN0OyBuID0gTm9kZVRyYXZl
cnNhbDo6bmV4dChuKSkgewogICAgICAgICBpZiAobi0+bm9kZVR5cGUoKSA9PSBOb2RlOjpURVhU
X05PREUgfHwgbi0+bm9kZVR5cGUoKSA9PSBOb2RlOjpDREFUQV9TRUNUSU9OX05PREUpIHsKICAg
ICAgICAgICAgIFN0cmluZyBkYXRhID0gc3RhdGljX2Nhc3Q8Q2hhcmFjdGVyRGF0YSo+KG4pLT5k
YXRhKCk7CiAgICAgICAgICAgICBpbnQgbGVuZ3RoID0gZGF0YS5sZW5ndGgoKTsKQEAgLTE1MTcs
NyArMTUxOCw3IEBAIHZvaWQgUmFuZ2U6OmNoZWNrRGVsZXRlRXh0cmFjdChFeGNlcHRpb24KICAg
ICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBOb2RlKiBwYXN0TGFzdCA9IHBhc3RMYXN0Tm9k
ZSgpOwotICAgIGZvciAoTm9kZSogbiA9IGZpcnN0Tm9kZSgpOyBuICE9IHBhc3RMYXN0OyBuID0g
bi0+dHJhdmVyc2VOZXh0Tm9kZSgpKSB7CisgICAgZm9yIChOb2RlKiBuID0gZmlyc3ROb2RlKCk7
IG4gIT0gcGFzdExhc3Q7IG4gPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG4pKSB7CiAgICAgICAgIGlm
IChuLT5pc1JlYWRPbmx5Tm9kZSgpKSB7CiAgICAgICAgICAgICBlYyA9IE5PX01PRElGSUNBVElP
Tl9BTExPV0VEX0VSUjsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTE1NTcsNyArMTU1OCw3IEBA
IE5vZGUqIFJhbmdlOjpmaXJzdE5vZGUoKSBjb25zdAogICAgICAgICByZXR1cm4gY2hpbGQ7CiAg
ICAgaWYgKCFtX3N0YXJ0Lm9mZnNldCgpKQogICAgICAgICByZXR1cm4gbV9zdGFydC5jb250YWlu
ZXIoKTsKLSAgICByZXR1cm4gbV9zdGFydC5jb250YWluZXIoKS0+dHJhdmVyc2VOZXh0U2libGlu
ZygpOworICAgIHJldHVybiBOb2RlVHJhdmVyc2FsOjpuZXh0U2libGluZyhtX3N0YXJ0LmNvbnRh
aW5lcigpKTsKIH0KIAogU2hhZG93Um9vdCogUmFuZ2U6OnNoYWRvd1Jvb3QoKSBjb25zdApAQCAt
MTU3MCwxMCArMTU3MSwxMCBAQCBOb2RlKiBSYW5nZTo6cGFzdExhc3ROb2RlKCkgY29uc3QKICAg
ICBpZiAoIW1fc3RhcnQuY29udGFpbmVyKCkgfHwgIW1fZW5kLmNvbnRhaW5lcigpKQogICAgICAg
ICByZXR1cm4gMDsKICAgICBpZiAobV9lbmQuY29udGFpbmVyKCktPm9mZnNldEluQ2hhcmFjdGVy
cygpKQotICAgICAgICByZXR1cm4gbV9lbmQuY29udGFpbmVyKCktPnRyYXZlcnNlTmV4dFNpYmxp
bmcoKTsKKyAgICAgICAgcmV0dXJuIE5vZGVUcmF2ZXJzYWw6Om5leHRTaWJsaW5nKG1fZW5kLmNv
bnRhaW5lcigpKTsKICAgICBpZiAoTm9kZSogY2hpbGQgPSBtX2VuZC5jb250YWluZXIoKS0+Y2hp
bGROb2RlKG1fZW5kLm9mZnNldCgpKSkKICAgICAgICAgcmV0dXJuIGNoaWxkOwotICAgIHJldHVy
biBtX2VuZC5jb250YWluZXIoKS0+dHJhdmVyc2VOZXh0U2libGluZygpOworICAgIHJldHVybiBO
b2RlVHJhdmVyc2FsOjpuZXh0U2libGluZyhtX2VuZC5jb250YWluZXIoKSk7CiB9CiAKIEludFJl
Y3QgUmFuZ2U6OmJvdW5kaW5nQm94KCkgY29uc3QKQEAgLTE2MDIsNyArMTYwMyw3IEBAIHZvaWQg
UmFuZ2U6OnRleHRSZWN0cyhWZWN0b3I8SW50UmVjdD4mIHIKICAgICBib29sIHNvbWVGaXhlZCA9
IGZhbHNlOwogCiAgICAgTm9kZSogc3RvcE5vZGUgPSBwYXN0TGFzdE5vZGUoKTsKLSAgICBmb3Ig
KE5vZGUqIG5vZGUgPSBmaXJzdE5vZGUoKTsgbm9kZSAhPSBzdG9wTm9kZTsgbm9kZSA9IG5vZGUt
PnRyYXZlcnNlTmV4dE5vZGUoKSkgeworICAgIGZvciAoTm9kZSogbm9kZSA9IGZpcnN0Tm9kZSgp
OyBub2RlICE9IHN0b3BOb2RlOyBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dChub2RlKSkgewog
ICAgICAgICBSZW5kZXJPYmplY3QqIHIgPSBub2RlLT5yZW5kZXJlcigpOwogICAgICAgICBpZiAo
IXIgfHwgIXItPmlzVGV4dCgpKQogICAgICAgICAgICAgY29udGludWU7CkBAIC0xNjM0LDcgKzE2
MzUsNyBAQCB2b2lkIFJhbmdlOjp0ZXh0UXVhZHMoVmVjdG9yPEZsb2F0UXVhZD4mCiAgICAgYm9v
bCBzb21lRml4ZWQgPSBmYWxzZTsKIAogICAgIE5vZGUqIHN0b3BOb2RlID0gcGFzdExhc3ROb2Rl
KCk7Ci0gICAgZm9yIChOb2RlKiBub2RlID0gZmlyc3ROb2RlKCk7IG5vZGUgIT0gc3RvcE5vZGU7
IG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKCkpIHsKKyAgICBmb3IgKE5vZGUqIG5vZGUg
PSBmaXJzdE5vZGUoKTsgbm9kZSAhPSBzdG9wTm9kZTsgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5l
eHQobm9kZSkpIHsKICAgICAgICAgUmVuZGVyT2JqZWN0KiByID0gbm9kZS0+cmVuZGVyZXIoKTsK
ICAgICAgICAgaWYgKCFyIHx8ICFyLT5pc1RleHQoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwpA
QCAtMTkwOSwxMiArMTkxMCwxMiBAQCB2b2lkIFJhbmdlOjpnZXRCb3JkZXJBbmRUZXh0UXVhZHMo
VmVjdG9yCiAgICAgTm9kZSogc3RvcE5vZGUgPSBwYXN0TGFzdE5vZGUoKTsKIAogICAgIEhhc2hT
ZXQ8Tm9kZSo+IG5vZGVTZXQ7Ci0gICAgZm9yIChOb2RlKiBub2RlID0gZmlyc3ROb2RlKCk7IG5v
ZGUgIT0gc3RvcE5vZGU7IG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKCkpIHsKKyAgICBm
b3IgKE5vZGUqIG5vZGUgPSBmaXJzdE5vZGUoKTsgbm9kZSAhPSBzdG9wTm9kZTsgbm9kZSA9IE5v
ZGVUcmF2ZXJzYWw6Om5leHQobm9kZSkpIHsKICAgICAgICAgaWYgKG5vZGUtPmlzRWxlbWVudE5v
ZGUoKSkKICAgICAgICAgICAgIG5vZGVTZXQuYWRkKG5vZGUpOwogICAgIH0KIAotICAgIGZvciAo
Tm9kZSogbm9kZSA9IGZpcnN0Tm9kZSgpOyBub2RlICE9IHN0b3BOb2RlOyBub2RlID0gbm9kZS0+
dHJhdmVyc2VOZXh0Tm9kZSgpKSB7CisgICAgZm9yIChOb2RlKiBub2RlID0gZmlyc3ROb2RlKCk7
IG5vZGUgIT0gc3RvcE5vZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUpKSB7CiAg
ICAgICAgIGlmIChub2RlLT5pc0VsZW1lbnROb2RlKCkpIHsKICAgICAgICAgICAgIGlmICghbm9k
ZVNldC5jb250YWlucyhub2RlLT5wYXJlbnROb2RlKCkpKSB7CiAgICAgICAgICAgICAgICAgaWYg
KFJlbmRlckJveE1vZGVsT2JqZWN0KiByZW5kZXJCb3hNb2RlbE9iamVjdCA9IHN0YXRpY19jYXN0
PEVsZW1lbnQqPihub2RlKS0+cmVuZGVyQm94TW9kZWxPYmplY3QoKSkgewpJbmRleDogU291cmNl
L1dlYkNvcmUvZG9tL1RyZWVTY29wZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
ZG9tL1RyZWVTY29wZS5jcHAJKHJldmlzaW9uIDEzNzEwOCkKKysrIFNvdXJjZS9XZWJDb3JlL2Rv
bS9UcmVlU2NvcGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0Miw3IEBACiAjaW5jbHVk
ZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSWRUYXJnZXRPYnNlcnZlclJlZ2lzdHJ5LmgiCiAj
aW5jbHVkZSAiSW5zZXJ0aW9uUG9pbnQuaCIKKyNpbmNsdWRlICJOb2RlVHJhdmVyc2FsLmgiCiAj
aW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKICNp
bmNsdWRlICJTaGFkb3dSb290LmgiCkBAIC0xODYsNyArMTg3LDcgQEAgSFRNTExhYmVsRWxlbWVu
dCogVHJlZVNjb3BlOjpsYWJlbEVsZW1lbgogICAgIGlmICghbV9sYWJlbHNCeUZvckF0dHJpYnV0
ZSkgewogICAgICAgICAvLyBQb3B1bGF0ZSB0aGUgbWFwIG9uIGZpcnN0IGFjY2Vzcy4KICAgICAg
ICAgbV9sYWJlbHNCeUZvckF0dHJpYnV0ZSA9IGFkb3B0UHRyKG5ldyBEb2N1bWVudE9yZGVyZWRN
YXApOwotICAgICAgICBmb3IgKE5vZGUqIG5vZGUgPSByb290Tm9kZSgpOyBub2RlOyBub2RlID0g
bm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgpKSB7CisgICAgICAgIGZvciAoTm9kZSogbm9kZSA9IHJv
b3ROb2RlKCk7IG5vZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUpKSB7CiAgICAg
ICAgICAgICBpZiAobm9kZS0+aGFzVGFnTmFtZShsYWJlbFRhZykpIHsKICAgICAgICAgICAgICAg
ICBIVE1MTGFiZWxFbGVtZW50KiBsYWJlbCA9IHN0YXRpY19jYXN0PEhUTUxMYWJlbEVsZW1lbnQq
Pihub2RlKTsKICAgICAgICAgICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGZvclZhbHVlID0g
bGFiZWwtPmZhc3RHZXRBdHRyaWJ1dGUoZm9yQXR0cik7CkBAIC0yMzAsNyArMjMxLDcgQEAgRWxl
bWVudCogVHJlZVNjb3BlOjpmaW5kQW5jaG9yKGNvbnN0IFN0cgogICAgICAgICByZXR1cm4gMDsK
ICAgICBpZiAoRWxlbWVudCogZWxlbWVudCA9IGdldEVsZW1lbnRCeUlkKG5hbWUpKQogICAgICAg
ICByZXR1cm4gZWxlbWVudDsKLSAgICBmb3IgKE5vZGUqIG5vZGUgPSByb290Tm9kZSgpOyBub2Rl
OyBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgpKSB7CisgICAgZm9yIChOb2RlKiBub2Rl
ID0gcm9vdE5vZGUoKTsgbm9kZTsgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9kZSkpIHsK
ICAgICAgICAgaWYgKG5vZGUtPmhhc1RhZ05hbWUoYVRhZykpIHsKICAgICAgICAgICAgIEhUTUxB
bmNob3JFbGVtZW50KiBhbmNob3IgPSBzdGF0aWNfY2FzdDxIVE1MQW5jaG9yRWxlbWVudCo+KG5v
ZGUpOwogICAgICAgICAgICAgaWYgKHJvb3ROb2RlKCktPmRvY3VtZW50KCktPmluUXVpcmtzTW9k
ZSgpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vVHJlZVNjb3BlQWRvcHRlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1RyZWVTY29wZUFkb3B0ZXIuY3BwCShyZXZp
c2lvbiAxMzcxMDgpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vVHJlZVNjb3BlQWRvcHRlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJFbGVtZW50UmFyZURh
dGEuaCIKICNpbmNsdWRlICJFbGVtZW50U2hhZG93LmgiCiAjaW5jbHVkZSAiTm9kZVJhcmVEYXRh
LmgiCisjaW5jbHVkZSAiTm9kZVRyYXZlcnNhbC5oIgogI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgi
CiAjaW5jbHVkZSAiU2hhZG93Um9vdC5oIgogCkBAIC00OCw3ICs0OSw3IEBAIHZvaWQgVHJlZVNj
b3BlQWRvcHRlcjo6bW92ZVRyZWVUb05ld1Njb3AKICAgICBpZiAob2xkRG9jdW1lbnQgJiYgd2ls
bE1vdmVUb05ld0RvY3VtZW50KQogICAgICAgICBvbGREb2N1bWVudC0+aW5jRE9NVHJlZVZlcnNp
b24oKTsKIAotICAgIGZvciAoTm9kZSogbm9kZSA9IHJvb3Q7IG5vZGU7IG5vZGUgPSBub2RlLT50
cmF2ZXJzZU5leHROb2RlKHJvb3QpKSB7CisgICAgZm9yIChOb2RlKiBub2RlID0gcm9vdDsgbm9k
ZTsgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9kZSwgcm9vdCkpIHsKICAgICAgICAgbm9k
ZS0+c2V0VHJlZVNjb3BlKG1fbmV3U2NvcGUpOwogICAgICAgICBpZiAobm9kZS0+aGFzUmFyZURh
dGEoKSkgewogICAgICAgICAgICAgTm9kZVJhcmVEYXRhKiByYXJlRGF0YSA9IG5vZGUtPnJhcmVE
YXRhKCk7CkBAIC02OSw3ICs3MCw3IEBAIHZvaWQgVHJlZVNjb3BlQWRvcHRlcjo6bW92ZVRyZWVU
b05ld1Njb3AKIAogdm9pZCBUcmVlU2NvcGVBZG9wdGVyOjptb3ZlVHJlZVRvTmV3RG9jdW1lbnQo
Tm9kZSogcm9vdCwgRG9jdW1lbnQqIG9sZERvY3VtZW50LCBEb2N1bWVudCogbmV3RG9jdW1lbnQp
IGNvbnN0CiB7Ci0gICAgZm9yIChOb2RlKiBub2RlID0gcm9vdDsgbm9kZTsgbm9kZSA9IG5vZGUt
PnRyYXZlcnNlTmV4dE5vZGUocm9vdCkpIHsKKyAgICBmb3IgKE5vZGUqIG5vZGUgPSByb290OyBu
b2RlOyBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dChub2RlLCByb290KSkgewogICAgICAgICBt
b3ZlTm9kZVRvTmV3RG9jdW1lbnQobm9kZSwgb2xkRG9jdW1lbnQsIG5ld0RvY3VtZW50KTsKICAg
ICAgICAgZm9yIChTaGFkb3dSb290KiBzaGFkb3cgPSBub2RlLT55b3VuZ2VzdFNoYWRvd1Jvb3Qo
KTsgc2hhZG93OyBzaGFkb3cgPSBzaGFkb3ctPm9sZGVyU2hhZG93Um9vdCgpKQogICAgICAgICAg
ICAgbW92ZVRyZWVUb05ld0RvY3VtZW50KHNoYWRvdywgb2xkRG9jdW1lbnQsIG5ld0RvY3VtZW50
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9UcmVlV2Fsa2VyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9kb20vVHJlZVdhbGtlci5jcHAJKHJldmlzaW9uIDEzNzEwOCkKKysr
IFNvdXJjZS9XZWJDb3JlL2RvbS9UcmVlV2Fsa2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgs
NiArMjgsNyBAQAogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJDb250YWlu
ZXJOb2RlLmgiCiAjaW5jbHVkZSAiTm9kZUZpbHRlci5oIgorI2luY2x1ZGUgIk5vZGVUcmF2ZXJz
YWwuaCIKICNpbmNsdWRlICJTY3JpcHRTdGF0ZS5oIgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRy
Lmg+CiAKQEAgLTI2Myw3ICsyNjQsNyBAQCBDaGlsZHJlbjoKICAgICAgICAgaWYgKGFjY2VwdE5v
ZGVSZXN1bHQgPT0gTm9kZUZpbHRlcjo6RklMVEVSX1JFSkVDVCkKICAgICAgICAgICAgIGJyZWFr
OwogICAgIH0KLSAgICB3aGlsZSAoTm9kZSogbmV4dFNpYmxpbmcgPSBub2RlLT50cmF2ZXJzZU5l
eHRTaWJsaW5nKHJvb3QoKSkpIHsKKyAgICB3aGlsZSAoTm9kZSogbmV4dFNpYmxpbmcgPSBOb2Rl
VHJhdmVyc2FsOjpuZXh0U2libGluZyhub2RlLmdldCgpLCByb290KCkpKSB7CiAgICAgICAgIG5v
ZGUgPSBuZXh0U2libGluZzsKICAgICAgICAgc2hvcnQgYWNjZXB0Tm9kZVJlc3VsdCA9IGFjY2Vw
dE5vZGUoc3RhdGUsIG5vZGUuZ2V0KCkpOwogICAgICAgICBpZiAoc3RhdGUgJiYgc3RhdGUtPmhh
ZEV4Y2VwdGlvbigpKQpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29t
bWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxl
Q29tbWFuZC5jcHAJKHJldmlzaW9uIDEzNzEwOCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
QXBwbHlTdHlsZUNvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2ICszOSw3IEBACiAj
aW5jbHVkZSAiSFRNTEludGVyY2hhbmdlLmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5j
bHVkZSAiTm9kZUxpc3QuaCIKKyNpbmNsdWRlICJOb2RlVHJhdmVyc2FsLmgiCiAjaW5jbHVkZSAi
UmFuZ2UuaCIKICNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKICNpbmNsdWRlICJSZW5kZXJUZXh0
LmgiCkBAIC0zNTEsMjYgKzM1MiwyNiBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjphcHBseVJl
bGF0aXZlRm9uCiAgICAgLy8gYW4gYW5jZXN0b3Igb2YgdGhlIHN0YXJ0IG5vZGUpLCB3ZSBnYXRo
ZXIgbm9kZXMgdXAgdG8gdGhlIG5leHQgc2libGluZyBvZiB0aGUgZW5kIG5vZGUKICAgICBOb2Rl
ICpiZXlvbmRFbmQ7CiAgICAgaWYgKHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCktPmlzRGVzY2VuZGFu
dE9mKGVuZC5kZXByZWNhdGVkTm9kZSgpKSkKLSAgICAgICAgYmV5b25kRW5kID0gZW5kLmRlcHJl
Y2F0ZWROb2RlKCktPnRyYXZlcnNlTmV4dFNpYmxpbmcoKTsKKyAgICAgICAgYmV5b25kRW5kID0g
Tm9kZVRyYXZlcnNhbDo6bmV4dFNpYmxpbmcoZW5kLmRlcHJlY2F0ZWROb2RlKCkpOwogICAgIGVs
c2UKLSAgICAgICAgYmV5b25kRW5kID0gZW5kLmRlcHJlY2F0ZWROb2RlKCktPnRyYXZlcnNlTmV4
dE5vZGUoKTsKKyAgICAgICAgYmV5b25kRW5kID0gTm9kZVRyYXZlcnNhbDo6bmV4dChlbmQuZGVw
cmVjYXRlZE5vZGUoKSk7CiAgICAgCiAgICAgc3RhcnQgPSBzdGFydC51cHN0cmVhbSgpOyAvLyBN
b3ZlIHVwc3RyZWFtIHRvIGVuc3VyZSB3ZSBkbyBub3QgYWRkIHJlZHVuZGFudCBzcGFucy4KICAg
ICBOb2RlKiBzdGFydE5vZGUgPSBzdGFydC5kZXByZWNhdGVkTm9kZSgpOwogICAgIGlmIChzdGFy
dE5vZGUtPmlzVGV4dE5vZGUoKSAmJiBzdGFydC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpID49
IGNhcmV0TWF4T2Zmc2V0KHN0YXJ0Tm9kZSkpIC8vIE1vdmUgb3V0IG9mIHRleHQgbm9kZSBpZiBy
YW5nZSBkb2VzIG5vdCBpbmNsdWRlIGl0cyBjaGFyYWN0ZXJzLgotICAgICAgICBzdGFydE5vZGUg
PSBzdGFydE5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoKTsKKyAgICAgICAgc3RhcnROb2RlID0gTm9k
ZVRyYXZlcnNhbDo6bmV4dChzdGFydE5vZGUpOwogCiAgICAgLy8gU3RvcmUgYXdheSBmb250IHNp
emUgYmVmb3JlIG1ha2luZyBhbnkgY2hhbmdlcyB0byB0aGUgZG9jdW1lbnQuCiAgICAgLy8gVGhp
cyBlbnN1cmVzIHRoYXQgY2hhbmdlcyB0byBvbmUgbm9kZSB3b24ndCBlZmZlY3QgYW5vdGhlci4K
ICAgICBIYXNoTWFwPE5vZGUqLCBmbG9hdD4gc3RhcnRpbmdGb250U2l6ZXM7Ci0gICAgZm9yIChO
b2RlICpub2RlID0gc3RhcnROb2RlOyBub2RlICE9IGJleW9uZEVuZDsgbm9kZSA9IG5vZGUtPnRy
YXZlcnNlTmV4dE5vZGUoKSkKKyAgICBmb3IgKE5vZGUgKm5vZGUgPSBzdGFydE5vZGU7IG5vZGUg
IT0gYmV5b25kRW5kOyBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dChub2RlKSkKICAgICAgICAg
c3RhcnRpbmdGb250U2l6ZXMuc2V0KG5vZGUsIGNvbXB1dGVkRm9udFNpemUobm9kZSkpOwogCiAg
ICAgLy8gVGhlc2Ugc3BhbnMgd2VyZSBhZGRlZCBieSB1cy4gSWYgZW1wdHkgYWZ0ZXIgZm9udCBz
aXplIGNoYW5nZXMsIHRoZXkgY2FuIGJlIHJlbW92ZWQuCiAgICAgVmVjdG9yPFJlZlB0cjxIVE1M
RWxlbWVudD4gPiB1bnN0eWxlZFNwYW5zOwogICAgIAogICAgIE5vZGUqIGxhc3RTdHlsZWROb2Rl
ID0gMDsKLSAgICBmb3IgKE5vZGUqIG5vZGUgPSBzdGFydE5vZGU7IG5vZGUgIT0gYmV5b25kRW5k
OyBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgpKSB7CisgICAgZm9yIChOb2RlKiBub2Rl
ID0gc3RhcnROb2RlOyBub2RlICE9IGJleW9uZEVuZDsgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5l
eHQobm9kZSkpIHsKICAgICAgICAgUmVmUHRyPEhUTUxFbGVtZW50PiBlbGVtZW50OwogICAgICAg
ICBpZiAobm9kZS0+aXNIVE1MRWxlbWVudCgpKSB7CiAgICAgICAgICAgICAvLyBPbmx5IHdvcmsg
b24gZnVsbHkgc2VsZWN0ZWQgbm9kZXMuCkBAIC02NzQsMTkgKzY3NSwxOSBAQCB2b2lkIEFwcGx5
U3R5bGVDb21tYW5kOjpmaXhSYW5nZUFuZEFwcGx5CiAgICAgTm9kZSogc3RhcnROb2RlID0gc3Rh
cnQuZGVwcmVjYXRlZE5vZGUoKTsKIAogICAgIGlmIChzdGFydC5kZXByZWNhdGVkRWRpdGluZ09m
ZnNldCgpID49IGNhcmV0TWF4T2Zmc2V0KHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCkpKSB7Ci0gICAg
ICAgIHN0YXJ0Tm9kZSA9IHN0YXJ0Tm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgpOworICAgICAgICBz
dGFydE5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KHN0YXJ0Tm9kZSk7CiAgICAgICAgIGlmICgh
c3RhcnROb2RlIHx8IGNvbXBhcmVQb3NpdGlvbnMoZW5kLCBmaXJzdFBvc2l0aW9uSW5PckJlZm9y
ZU5vZGUoc3RhcnROb2RlKSkgPCAwKQogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAg
IE5vZGUqIHBhc3RFbmROb2RlID0gZW5kLmRlcHJlY2F0ZWROb2RlKCk7CiAgICAgaWYgKGVuZC5k
ZXByZWNhdGVkRWRpdGluZ09mZnNldCgpID49IGNhcmV0TWF4T2Zmc2V0KGVuZC5kZXByZWNhdGVk
Tm9kZSgpKSkKLSAgICAgICAgcGFzdEVuZE5vZGUgPSBlbmQuZGVwcmVjYXRlZE5vZGUoKS0+dHJh
dmVyc2VOZXh0U2libGluZygpOworICAgICAgICBwYXN0RW5kTm9kZSA9IE5vZGVUcmF2ZXJzYWw6
Om5leHRTaWJsaW5nKGVuZC5kZXByZWNhdGVkTm9kZSgpKTsKIAogICAgIC8vIEZJWE1FOiBDYWxs
ZXJzIHNob3VsZCBwZXJmb3JtIHRoaXMgb3BlcmF0aW9uIG9uIGEgUmFuZ2UgdGhhdCBpbmNsdWRl
cyB0aGUgYnIKICAgICAvLyBpZiB0aGV5IHdhbnQgc3R5bGUgYXBwbGllZCB0byB0aGUgZW1wdHkg
bGluZS4KICAgICBpZiAoc3RhcnQgPT0gZW5kICYmIHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCktPmhh
c1RhZ05hbWUoYnJUYWcpKQotICAgICAgICBwYXN0RW5kTm9kZSA9IHN0YXJ0LmRlcHJlY2F0ZWRO
b2RlKCktPnRyYXZlcnNlTmV4dE5vZGUoKTsKKyAgICAgICAgcGFzdEVuZE5vZGUgPSBOb2RlVHJh
dmVyc2FsOjpuZXh0KHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCkpOwogCiAgICAgLy8gU3RhcnQgZnJv
bSB0aGUgaGlnaGVzdCBmdWxseSBzZWxlY3RlZCBhbmNlc3RvciBzbyB0aGF0IHdlIGNhbiBtb2Rp
ZnkgdGhlIGZ1bGx5IHNlbGVjdGVkIG5vZGUuCiAgICAgLy8gZS5nLiBXaGVuIGFwcGx5aW5nIGZv
bnQtc2l6ZTogbGFyZ2Ugb24gPGZvbnQgY29sb3I9ImJsdWUiPmhlbGxvPC9mb250Piwgd2UgbmVl
ZCB0byBpbmNsdWRlIHRoZSBmb250IGVsZW1lbnQgaW4gb3VyIHJ1bgpAQCAtNzA2LDggKzcwNyw4
IEBAIHN0YXRpYyBib29sIGNvbnRhaW5zTm9uRWRpdGFibGVSZWdpb24oTm8KICAgICBpZiAoIW5v
ZGUtPnJlbmRlcmVySXNFZGl0YWJsZSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIE5v
ZGUqIHNpYmxpbmcgPSBub2RlLT50cmF2ZXJzZU5leHRTaWJsaW5nKCk7Ci0gICAgZm9yIChOb2Rl
KiBkZXNjZW5kZW50ID0gbm9kZS0+Zmlyc3RDaGlsZCgpOyBkZXNjZW5kZW50ICYmIGRlc2NlbmRl
bnQgIT0gc2libGluZzsgZGVzY2VuZGVudCA9IGRlc2NlbmRlbnQtPnRyYXZlcnNlTmV4dE5vZGUo
KSkgeworICAgIE5vZGUqIHNpYmxpbmcgPSBOb2RlVHJhdmVyc2FsOjpuZXh0U2libGluZyhub2Rl
KTsKKyAgICBmb3IgKE5vZGUqIGRlc2NlbmRlbnQgPSBub2RlLT5maXJzdENoaWxkKCk7IGRlc2Nl
bmRlbnQgJiYgZGVzY2VuZGVudCAhPSBzaWJsaW5nOyBkZXNjZW5kZW50ID0gTm9kZVRyYXZlcnNh
bDo6bmV4dChkZXNjZW5kZW50KSkgewogICAgICAgICBpZiAoIWRlc2NlbmRlbnQtPnJlbmRlcmVy
SXNFZGl0YWJsZSgpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtNzIyLDcg
KzcyMyw3IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5SW5saW5lU3R5bGUKIAogICAg
IFJlZlB0cjxOb2RlPiBub2RlID0gc3RhcnROb2RlOwogICAgIGZvciAoUmVmUHRyPE5vZGU+IG5l
eHQ7IG5vZGUgJiYgbm9kZSAhPSBwYXN0RW5kTm9kZTsgbm9kZSA9IG5leHQpIHsKLSAgICAgICAg
bmV4dCA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoKTsKKyAgICAgICAgbmV4dCA9IE5vZGVUcmF2
ZXJzYWw6Om5leHQobm9kZS5nZXQoKSk7CiAKICAgICAgICAgaWYgKCFub2RlLT5yZW5kZXJlcigp
IHx8ICFub2RlLT5yZW5kZXJlcklzRWRpdGFibGUoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwpA
QCAtNzM4LDcgKzczOSw3IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5SW5saW5lU3R5
bGUKICAgICAgICAgICAgIFJlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBpbmxpbmVTdHlsZSA9IGVs
ZW1lbnQtPmVuc3VyZU11dGFibGVJbmxpbmVTdHlsZSgpLT5jb3B5KCk7CiAgICAgICAgICAgICBp
bmxpbmVTdHlsZS0+bWVyZ2VBbmRPdmVycmlkZU9uQ29uZmxpY3Qoc3R5bGUtPnN0eWxlKCkpOwog
ICAgICAgICAgICAgc2V0Tm9kZUF0dHJpYnV0ZShlbGVtZW50LCBzdHlsZUF0dHIsIGlubGluZVN0
eWxlLT5hc1RleHQoKSk7Ci0gICAgICAgICAgICBuZXh0ID0gbm9kZS0+dHJhdmVyc2VOZXh0U2li
bGluZygpOworICAgICAgICAgICAgbmV4dCA9IE5vZGVUcmF2ZXJzYWw6Om5leHRTaWJsaW5nKG5v
ZGUuZ2V0KCkpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KICAgICAgICAgCkBA
IC03NDksNyArNzUwLDcgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlJbmxpbmVTdHls
ZQogICAgICAgICAgICAgaWYgKG5vZGUtPmNvbnRhaW5zKHBhc3RFbmROb2RlLmdldCgpKSB8fCBj
b250YWluc05vbkVkaXRhYmxlUmVnaW9uKG5vZGUuZ2V0KCkpIHx8ICFub2RlLT5wYXJlbnROb2Rl
KCktPnJlbmRlcmVySXNFZGl0YWJsZSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICAgICAgaWYgKGVkaXRpbmdJZ25vcmVzQ29udGVudChub2RlLmdldCgpKSkgewotICAgICAg
ICAgICAgICAgIG5leHQgPSBub2RlLT50cmF2ZXJzZU5leHRTaWJsaW5nKCk7CisgICAgICAgICAg
ICAgICAgbmV4dCA9IE5vZGVUcmF2ZXJzYWw6Om5leHRTaWJsaW5nKG5vZGUuZ2V0KCkpOwogICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC03NjMs
NyArNzY0LDcgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlJbmxpbmVTdHlsZQogICAg
ICAgICAgICAgcnVuRW5kID0gc2libGluZzsKICAgICAgICAgICAgIHNpYmxpbmcgPSBydW5FbmQt
Pm5leHRTaWJsaW5nKCk7CiAgICAgICAgIH0KLSAgICAgICAgbmV4dCA9IHJ1bkVuZC0+dHJhdmVy
c2VOZXh0U2libGluZygpOworICAgICAgICBuZXh0ID0gTm9kZVRyYXZlcnNhbDo6bmV4dFNpYmxp
bmcocnVuRW5kLmdldCgpKTsKIAogICAgICAgICBpZiAoIXJlbW92ZVN0eWxlRnJvbVJ1bkJlZm9y
ZUFwcGx5aW5nU3R5bGUoc3R5bGUsIHJ1blN0YXJ0LCBydW5FbmQpKQogICAgICAgICAgICAgY29u
dGludWU7CkBAIC03ODAsOSArNzgxLDkgQEAgYm9vbCBBcHBseVN0eWxlQ29tbWFuZDo6aXNTdHls
ZWRJbmxpbmVFbAogYm9vbCBBcHBseVN0eWxlQ29tbWFuZDo6cmVtb3ZlU3R5bGVGcm9tUnVuQmVm
b3JlQXBwbHlpbmdTdHlsZShFZGl0aW5nU3R5bGUqIHN0eWxlLCBSZWZQdHI8Tm9kZT4mIHJ1blN0
YXJ0LCBSZWZQdHI8Tm9kZT4mIHJ1bkVuZCkKIHsKICAgICBBU1NFUlQocnVuU3RhcnQgJiYgcnVu
RW5kICYmIHJ1blN0YXJ0LT5wYXJlbnROb2RlKCkgPT0gcnVuRW5kLT5wYXJlbnROb2RlKCkpOwot
ICAgIFJlZlB0cjxOb2RlPiBwYXN0RW5kTm9kZSA9IHJ1bkVuZC0+dHJhdmVyc2VOZXh0U2libGlu
ZygpOworICAgIFJlZlB0cjxOb2RlPiBwYXN0RW5kTm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHRT
aWJsaW5nKHJ1bkVuZC5nZXQoKSk7CiAgICAgYm9vbCBuZWVkVG9BcHBseVN0eWxlID0gZmFsc2U7
Ci0gICAgZm9yIChOb2RlKiBub2RlID0gcnVuU3RhcnQuZ2V0KCk7IG5vZGUgJiYgbm9kZSAhPSBw
YXN0RW5kTm9kZS5nZXQoKTsgbm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoKSkgeworICAg
IGZvciAoTm9kZSogbm9kZSA9IHJ1blN0YXJ0LmdldCgpOyBub2RlICYmIG5vZGUgIT0gcGFzdEVu
ZE5vZGUuZ2V0KCk7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUpKSB7CiAgICAgICAg
IGlmIChub2RlLT5jaGlsZE5vZGVDb3VudCgpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgIC8vIFdlIGRvbid0IGNvbnNpZGVyIG1faXNJbmxpbmVFbGVtZW50VG9SZW1vdmVGdW5jdGlv
biBoZXJlIGJlY2F1c2Ugd2UgbmV2ZXIgYXBwbHkgc3R5bGUgd2hlbiBtX2lzSW5saW5lRWxlbWVu
dFRvUmVtb3ZlRnVuY3Rpb24gaXMgc3BlY2lmaWVkCkBAIC03OTksOSArODAwLDkgQEAgYm9vbCBB
cHBseVN0eWxlQ29tbWFuZDo6cmVtb3ZlU3R5bGVGcm9tUgogICAgIGZvciAoUmVmUHRyPE5vZGU+
IG5vZGUgPSBuZXh0OyBub2RlICYmIG5vZGUtPmluRG9jdW1lbnQoKSAmJiBub2RlICE9IHBhc3RF
bmROb2RlOyBub2RlID0gbmV4dCkgewogICAgICAgICBpZiAoZWRpdGluZ0lnbm9yZXNDb250ZW50
KG5vZGUuZ2V0KCkpKSB7CiAgICAgICAgICAgICBBU1NFUlQoIW5vZGUtPmNvbnRhaW5zKHBhc3RF
bmROb2RlLmdldCgpKSk7Ci0gICAgICAgICAgICBuZXh0ID0gbm9kZS0+dHJhdmVyc2VOZXh0U2li
bGluZygpOworICAgICAgICAgICAgbmV4dCA9IE5vZGVUcmF2ZXJzYWw6Om5leHRTaWJsaW5nKG5v
ZGUuZ2V0KCkpOwogICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIG5leHQgPSBub2RlLT50cmF2
ZXJzZU5leHROb2RlKCk7CisgICAgICAgICAgICBuZXh0ID0gTm9kZVRyYXZlcnNhbDo6bmV4dChu
b2RlLmdldCgpKTsKICAgICAgICAgaWYgKCFub2RlLT5pc0hUTUxFbGVtZW50KCkpCiAgICAgICAg
ICAgICBjb250aW51ZTsKIApAQCAtMTA1NCwxMyArMTA1NSwxMyBAQCB2b2lkIEFwcGx5U3R5bGVD
b21tYW5kOjpyZW1vdmVJbmxpbmVTdHlsCiAgICAgICAgIFJlZlB0cjxOb2RlPiBuZXh0OwogICAg
ICAgICBpZiAoZWRpdGluZ0lnbm9yZXNDb250ZW50KG5vZGUpKSB7CiAgICAgICAgICAgICBBU1NF
UlQobm9kZSA9PSBlbmQuZGVwcmVjYXRlZE5vZGUoKSB8fCAhbm9kZS0+Y29udGFpbnMoZW5kLmRl
cHJlY2F0ZWROb2RlKCkpKTsKLSAgICAgICAgICAgIG5leHQgPSBub2RlLT50cmF2ZXJzZU5leHRT
aWJsaW5nKCk7CisgICAgICAgICAgICBuZXh0ID0gTm9kZVRyYXZlcnNhbDo6bmV4dFNpYmxpbmco
bm9kZSk7CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgbmV4dCA9IG5vZGUtPnRyYXZlcnNl
TmV4dE5vZGUoKTsKKyAgICAgICAgICAgIG5leHQgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUp
OwogICAgICAgICBpZiAobm9kZS0+aXNIVE1MRWxlbWVudCgpICYmIG5vZGVGdWxseVNlbGVjdGVk
KG5vZGUsIHN0YXJ0LCBlbmQpKSB7CiAgICAgICAgICAgICBSZWZQdHI8SFRNTEVsZW1lbnQ+IGVs
ZW0gPSB0b0hUTUxFbGVtZW50KG5vZGUpOwotICAgICAgICAgICAgUmVmUHRyPE5vZGU+IHByZXYg
PSBlbGVtLT50cmF2ZXJzZVByZXZpb3VzTm9kZVBvc3RPcmRlcigpOwotICAgICAgICAgICAgUmVm
UHRyPE5vZGU+IG5leHQgPSBlbGVtLT50cmF2ZXJzZU5leHROb2RlKCk7CisgICAgICAgICAgICBS
ZWZQdHI8Tm9kZT4gcHJldiA9IE5vZGVUcmF2ZXJzYWw6OnByZXZpb3VzUG9zdE9yZGVyKGVsZW0u
Z2V0KCkpOworICAgICAgICAgICAgUmVmUHRyPE5vZGU+IG5leHQgPSBOb2RlVHJhdmVyc2FsOjpu
ZXh0KGVsZW0uZ2V0KCkpOwogICAgICAgICAgICAgUmVmUHRyPEVkaXRpbmdTdHlsZT4gc3R5bGVU
b1B1c2hEb3duOwogICAgICAgICAgICAgUmVmUHRyPE5vZGU+IGNoaWxkTm9kZTsKICAgICAgICAg
ICAgIGlmIChpc1N0eWxlZElubGluZUVsZW1lbnRUb1JlbW92ZShlbGVtLmdldCgpKSkgewpJbmRl
eDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9CcmVha0Jsb2NrcXVvdGVDb21tYW5kLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0JyZWFrQmxvY2txdW90ZUNvbW1hbmQu
Y3BwCShyZXZpc2lvbiAxMzcxMDgpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0JyZWFrQmxv
Y2txdW90ZUNvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAKICNp
bmNsdWRlICJIVE1MRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUg
Ik5vZGVUcmF2ZXJzYWwuaCIKICNpbmNsdWRlICJSZW5kZXJMaXN0SXRlbS5oIgogI2luY2x1ZGUg
IlRleHQuaCIKICNpbmNsdWRlICJWaXNpYmxlUG9zaXRpb24uaCIKQEAgLTEwOSwxMyArMTEwLDEz
IEBAIHZvaWQgQnJlYWtCbG9ja3F1b3RlQ29tbWFuZDo6ZG9BcHBseSgpCiAgICAgaWYgKHN0YXJ0
Tm9kZS0+aXNUZXh0Tm9kZSgpKSB7CiAgICAgICAgIFRleHQqIHRleHROb2RlID0gdG9UZXh0KHN0
YXJ0Tm9kZSk7CiAgICAgICAgIGlmICgodW5zaWduZWQpcG9zLmRlcHJlY2F0ZWRFZGl0aW5nT2Zm
c2V0KCkgPj0gdGV4dE5vZGUtPmxlbmd0aCgpKSB7Ci0gICAgICAgICAgICBzdGFydE5vZGUgPSBz
dGFydE5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoKTsKKyAgICAgICAgICAgIHN0YXJ0Tm9kZSA9IE5v
ZGVUcmF2ZXJzYWw6Om5leHQoc3RhcnROb2RlKTsKICAgICAgICAgICAgIEFTU0VSVChzdGFydE5v
ZGUpOwogICAgICAgICB9IGVsc2UgaWYgKHBvcy5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpID4g
MCkKICAgICAgICAgICAgIHNwbGl0VGV4dE5vZGUodGV4dE5vZGUsIHBvcy5kZXByZWNhdGVkRWRp
dGluZ09mZnNldCgpKTsKICAgICB9IGVsc2UgaWYgKHBvcy5kZXByZWNhdGVkRWRpdGluZ09mZnNl
dCgpID4gMCkgewogICAgICAgICBOb2RlKiBjaGlsZEF0T2Zmc2V0ID0gc3RhcnROb2RlLT5jaGls
ZE5vZGUocG9zLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkpOwotICAgICAgICBzdGFydE5vZGUg
PSBjaGlsZEF0T2Zmc2V0ID8gY2hpbGRBdE9mZnNldCA6IHN0YXJ0Tm9kZS0+dHJhdmVyc2VOZXh0
Tm9kZSgpOworICAgICAgICBzdGFydE5vZGUgPSBjaGlsZEF0T2Zmc2V0ID8gY2hpbGRBdE9mZnNl
dCA6IE5vZGVUcmF2ZXJzYWw6Om5leHQoc3RhcnROb2RlKTsKICAgICAgICAgQVNTRVJUKHN0YXJ0
Tm9kZSk7CiAgICAgfQogICAgIApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9Db21wb3Np
dGVFZGl0Q29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9D
b21wb3NpdGVFZGl0Q29tbWFuZC5jcHAJKHJldmlzaW9uIDEzNzEwOCkKKysrIFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
NSw2ICs0NSw3IEBACiAjaW5jbHVkZSAiSW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZC5o
IgogI2luY2x1ZGUgIkluc2VydFRleHRDb21tYW5kLmgiCiAjaW5jbHVkZSAiTWVyZ2VJZGVudGlj
YWxFbGVtZW50c0NvbW1hbmQuaCIKKyNpbmNsdWRlICJOb2RlVHJhdmVyc2FsLmgiCiAjaW5jbHVk
ZSAiUmFuZ2UuaCIKICNpbmNsdWRlICJSZW1vdmVDU1NQcm9wZXJ0eUNvbW1hbmQuaCIKICNpbmNs
dWRlICJSZW1vdmVOb2RlQ29tbWFuZC5oIgpAQCAtODA4LDcgKzgwOSw3IEBAIHZvaWQgQ29tcG9z
aXRlRWRpdENvbW1hbmQ6OmRlbGV0ZUluc2lnbmkKICAgICAgICAgcmV0dXJuOwogCiAgICAgVmVj
dG9yPFJlZlB0cjxUZXh0PiA+IG5vZGVzOwotICAgIGZvciAoTm9kZSogbm9kZSA9IHN0YXJ0LmRl
cHJlY2F0ZWROb2RlKCk7IG5vZGU7IG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKCkpIHsK
KyAgICBmb3IgKE5vZGUqIG5vZGUgPSBzdGFydC5kZXByZWNhdGVkTm9kZSgpOyBub2RlOyBub2Rl
ID0gTm9kZVRyYXZlcnNhbDo6bmV4dChub2RlKSkgewogICAgICAgICBpZiAobm9kZS0+aXNUZXh0
Tm9kZSgpKQogICAgICAgICAgICAgbm9kZXMuYXBwZW5kKHRvVGV4dChub2RlKSk7CiAgICAgICAg
IGlmIChub2RlID09IGVuZC5kZXByZWNhdGVkTm9kZSgpKQpAQCAtMTAyMiw5ICsxMDIzLDkgQEAg
dm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6Y2xvbmVQYXJhZ3JhcAogICAgICAgICB9CiAKICAg
ICAgICAgTm9kZSogc3RhcnROb2RlID0gc3RhcnQuZGVwcmVjYXRlZE5vZGUoKTsKLSAgICAgICAg
Zm9yIChOb2RlKiBub2RlID0gc3RhcnROb2RlLT50cmF2ZXJzZU5leHRTaWJsaW5nKG91dGVyTm9k
ZS5nZXQoKSk7IG5vZGU7IG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHRTaWJsaW5nKG91dGVyTm9k
ZS5nZXQoKSkpIHsKKyAgICAgICAgZm9yIChOb2RlKiBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4
dFNpYmxpbmcoc3RhcnROb2RlLCBvdXRlck5vZGUuZ2V0KCkpOyBub2RlOyBub2RlID0gTm9kZVRy
YXZlcnNhbDo6bmV4dFNpYmxpbmcobm9kZSwgb3V0ZXJOb2RlLmdldCgpKSkgewogICAgICAgICAg
ICAgLy8gTW92ZSBsYXN0Tm9kZSB1cCBpbiB0aGUgdHJlZSBhcyBtdWNoIGFzIG5vZGUgd2FzIG1v
dmVkIHVwIGluIHRoZQotICAgICAgICAgICAgLy8gdHJlZSBieSB0cmF2ZXJzZU5leHRTaWJsaW5n
LCBzbyB0aGF0IHRoZSByZWxhdGl2ZSBkZXB0aCBiZXR3ZWVuCisgICAgICAgICAgICAvLyB0cmVl
IGJ5IE5vZGVUcmF2ZXJzYWw6Om5leHRTaWJsaW5nLCBzbyB0aGF0IHRoZSByZWxhdGl2ZSBkZXB0
aCBiZXR3ZWVuCiAgICAgICAgICAgICAvLyBub2RlIGFuZCB0aGUgb3JpZ2luYWwgc3RhcnQgbm9k
ZSBpcyBtYWludGFpbmVkIGluIHRoZSBjbG9uZS4KICAgICAgICAgICAgIHdoaWxlIChzdGFydE5v
ZGUtPnBhcmVudE5vZGUoKSAhPSBub2RlLT5wYXJlbnROb2RlKCkpIHsKICAgICAgICAgICAgICAg
ICBzdGFydE5vZGUgPSBzdGFydE5vZGUtPnBhcmVudE5vZGUoKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcAkocmV2aXNpb24g
MTM3MTA4KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5k
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgImh0bWxlZGl0
aW5nLmgiCiAjaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1l
cy5oIgorI2luY2x1ZGUgIk5vZGVUcmF2ZXJzYWwuaCIKICNpbmNsdWRlICJSZW5kZXJUYWJsZUNl
bGwuaCIKICNpbmNsdWRlICJUZXh0LmgiCiAjaW5jbHVkZSAidmlzaWJsZV91bml0cy5oIgpAQCAt
MzI5LDcgKzMzMCw3IEBAIHN0YXRpYyBQb3NpdGlvbiBmaXJzdEVkaXRhYmxlUG9zaXRpb25Jbk4K
ICAgICBBU1NFUlQobm9kZSk7CiAgICAgTm9kZSogbmV4dCA9IG5vZGU7CiAgICAgd2hpbGUgKG5l
eHQgJiYgIW5leHQtPnJlbmRlcmVySXNFZGl0YWJsZSgpKQotICAgICAgICBuZXh0ID0gbmV4dC0+
dHJhdmVyc2VOZXh0Tm9kZShub2RlKTsKKyAgICAgICAgbmV4dCA9IE5vZGVUcmF2ZXJzYWw6Om5l
eHQobmV4dCwgbm9kZSk7CiAgICAgcmV0dXJuIG5leHQgPyBmaXJzdFBvc2l0aW9uSW5PckJlZm9y
ZU5vZGUobmV4dCkgOiBQb3NpdGlvbigpOwogfQogCkBAIC00MjEsOSArNDIyLDkgQEAgdm9pZCBE
ZWxldGVTZWxlY3Rpb25Db21tYW5kOjptYWtlU3R5bGluZwogICAgIFJlZlB0cjxSYW5nZT4gcmFu
Z2UgPSBtX3NlbGVjdGlvblRvRGVsZXRlLnRvTm9ybWFsaXplZFJhbmdlKCk7CiAgICAgUmVmUHRy
PE5vZGU+IG5vZGUgPSByYW5nZS0+Zmlyc3ROb2RlKCk7CiAgICAgd2hpbGUgKG5vZGUgJiYgbm9k
ZSAhPSByYW5nZS0+cGFzdExhc3ROb2RlKCkpIHsKLSAgICAgICAgUmVmUHRyPE5vZGU+IG5leHRO
b2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgpOworICAgICAgICBSZWZQdHI8Tm9kZT4gbmV4
dE5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUuZ2V0KCkpOwogICAgICAgICBpZiAoKG5v
ZGUtPmhhc1RhZ05hbWUoc3R5bGVUYWcpICYmICEodG9FbGVtZW50KG5vZGUuZ2V0KCkpLT5oYXNB
dHRyaWJ1dGUoc2NvcGVkQXR0cikpKSB8fCBub2RlLT5oYXNUYWdOYW1lKGxpbmtUYWcpKSB7Ci0g
ICAgICAgICAgICBuZXh0Tm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dFNpYmxpbmcoKTsKKyAgICAg
ICAgICAgIG5leHROb2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dFNpYmxpbmcobm9kZS5nZXQoKSk7
CiAgICAgICAgICAgICBSZWZQdHI8Q29udGFpbmVyTm9kZT4gcm9vdEVkaXRhYmxlRWxlbWVudCA9
IG5vZGUtPnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKICAgICAgICAgICAgIHJlbW92ZU5vZGUobm9k
ZSk7CiAgICAgICAgICAgICBhcHBlbmROb2RlKG5vZGUsIHJvb3RFZGl0YWJsZUVsZW1lbnQpOwpA
QCAtNDQ1LDcgKzQ0Niw3IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6aGFuZGxlR2Vu
ZXIKICAgICAvLyBOZXZlciByZW1vdmUgdGhlIHN0YXJ0IGJsb2NrIHVubGVzcyBpdCdzIGEgdGFi
bGUsIGluIHdoaWNoIGNhc2Ugd2Ugd29uJ3QgbWVyZ2UgY29udGVudCBpbi4KICAgICBpZiAoc3Rh
cnROb2RlID09IG1fc3RhcnRCbG9jayAmJiBzdGFydE9mZnNldCA9PSAwICYmIGNhbkhhdmVDaGls
ZHJlbkZvckVkaXRpbmcoc3RhcnROb2RlKSAmJiAhc3RhcnROb2RlLT5oYXNUYWdOYW1lKHRhYmxl
VGFnKSkgewogICAgICAgICBzdGFydE9mZnNldCA9IDA7Ci0gICAgICAgIHN0YXJ0Tm9kZSA9IHN0
YXJ0Tm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgpOworICAgICAgICBzdGFydE5vZGUgPSBOb2RlVHJh
dmVyc2FsOjpuZXh0KHN0YXJ0Tm9kZSk7CiAgICAgICAgIGlmICghc3RhcnROb2RlKQogICAgICAg
ICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTQ1Nyw3ICs0NTgsNyBAQCB2b2lkIERlbGV0ZVNlbGVj
dGlvbkNvbW1hbmQ6OmhhbmRsZUdlbmVyCiAgICAgfQogCiAgICAgaWYgKHN0YXJ0T2Zmc2V0ID49
IGxhc3RPZmZzZXRGb3JFZGl0aW5nKHN0YXJ0Tm9kZSkpIHsKLSAgICAgICAgc3RhcnROb2RlID0g
c3RhcnROb2RlLT50cmF2ZXJzZU5leHRTaWJsaW5nKCk7CisgICAgICAgIHN0YXJ0Tm9kZSA9IE5v
ZGVUcmF2ZXJzYWw6Om5leHRTaWJsaW5nKHN0YXJ0Tm9kZSk7CiAgICAgICAgIHN0YXJ0T2Zmc2V0
ID0gMDsKICAgICB9CiAKQEAgLTQ5MSw3ICs0OTIsNyBAQCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNv
bW1hbmQ6OmhhbmRsZUdlbmVyCiAgICAgICAgICAgICAgICAgLy8gaW4gYSB0ZXh0IG5vZGUgdGhh
dCBuZWVkcyB0byBiZSB0cmltbWVkCiAgICAgICAgICAgICAgICAgVGV4dCogdGV4dCA9IHRvVGV4
dChub2RlLmdldCgpKTsKICAgICAgICAgICAgICAgICBkZWxldGVUZXh0RnJvbU5vZGUodGV4dCwg
c3RhcnRPZmZzZXQsIHRleHQtPmxlbmd0aCgpIC0gc3RhcnRPZmZzZXQpOwotICAgICAgICAgICAg
ICAgIG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKCk7CisgICAgICAgICAgICAgICAgbm9k
ZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9kZS5nZXQoKSk7CiAgICAgICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICAgICAgIG5vZGUgPSBzdGFydE5vZGUtPmNoaWxkTm9kZShzdGFydE9mZnNl
dCk7CiAgICAgICAgICAgICB9CkBAIC01MDMsMTAgKzUwNCwxMCBAQCB2b2lkIERlbGV0ZVNlbGVj
dGlvbkNvbW1hbmQ6OmhhbmRsZUdlbmVyCiAgICAgICAgIC8vIGhhbmRsZSBkZWxldGluZyBhbGwg
bm9kZXMgdGhhdCBhcmUgY29tcGxldGVseSBzZWxlY3RlZAogICAgICAgICB3aGlsZSAobm9kZSAm
JiBub2RlICE9IG1fZG93bnN0cmVhbUVuZC5kZXByZWNhdGVkTm9kZSgpKSB7CiAgICAgICAgICAg
ICBpZiAoY29tcGFyZVBvc2l0aW9ucyhmaXJzdFBvc2l0aW9uSW5PckJlZm9yZU5vZGUobm9kZS5n
ZXQoKSksIG1fZG93bnN0cmVhbUVuZCkgPj0gMCkgewotICAgICAgICAgICAgICAgIC8vIHRyYXZl
cnNlTmV4dFNpYmxpbmcganVzdCBibGV3IHBhc3QgdGhlIGVuZCBwb3NpdGlvbiwgc28gc3RvcCBk
ZWxldGluZworICAgICAgICAgICAgICAgIC8vIE5vZGVUcmF2ZXJzYWw6Om5leHRTaWJsaW5nIGp1
c3QgYmxldyBwYXN0IHRoZSBlbmQgcG9zaXRpb24sIHNvIHN0b3AgZGVsZXRpbmcKICAgICAgICAg
ICAgICAgICBub2RlID0gMDsKICAgICAgICAgICAgIH0gZWxzZSBpZiAoIW1fZG93bnN0cmVhbUVu
ZC5kZXByZWNhdGVkTm9kZSgpLT5pc0Rlc2NlbmRhbnRPZihub2RlLmdldCgpKSkgewotICAgICAg
ICAgICAgICAgIFJlZlB0cjxOb2RlPiBuZXh0Tm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dFNpYmxp
bmcoKTsKKyAgICAgICAgICAgICAgICBSZWZQdHI8Tm9kZT4gbmV4dE5vZGUgPSBOb2RlVHJhdmVy
c2FsOjpuZXh0U2libGluZyhub2RlLmdldCgpKTsKICAgICAgICAgICAgICAgICAvLyBpZiB3ZSBq
dXN0IHJlbW92ZWQgYSBub2RlIGZyb20gdGhlIGVuZCBjb250YWluZXIsIHVwZGF0ZSBlbmQgcG9z
aXRpb24gc28gdGhlCiAgICAgICAgICAgICAgICAgLy8gY2hlY2sgYWJvdmUgd2lsbCB3b3JrCiAg
ICAgICAgICAgICAgICAgdXBkYXRlUG9zaXRpb25Gb3JOb2RlUmVtb3ZhbChtX2Rvd25zdHJlYW1F
bmQsIG5vZGUuZ2V0KCkpOwpAQCAtNTE4LDcgKzUxOSw3IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9u
Q29tbWFuZDo6aGFuZGxlR2VuZXIKICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlTm9kZShub2Rl
LmdldCgpKTsKICAgICAgICAgICAgICAgICAgICAgbm9kZSA9IDA7CiAgICAgICAgICAgICAgICAg
fSBlbHNlCi0gICAgICAgICAgICAgICAgICAgIG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHROb2Rl
KCk7CisgICAgICAgICAgICAgICAgICAgIG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUu
Z2V0KCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIApJbmRleDogU291cmNl
L1dlYkNvcmUvZWRpdGluZy9FZGl0Q29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvZWRpdGluZy9FZGl0Q29tbWFuZC5jcHAJKHJldmlzaW9uIDEzNzEwOCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvRWRpdENvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2
ICszNCw3IEBACiAjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAj
aW5jbHVkZSAiRnJhbWVTZWxlY3Rpb24uaCIKKyNpbmNsdWRlICJOb2RlVHJhdmVyc2FsLmgiCiAj
aW5jbHVkZSAiVmlzaWJsZVBvc2l0aW9uLmgiCiAjaW5jbHVkZSAiaHRtbGVkaXRpbmcuaCIKIApA
QCAtMTE4LDcgKzExOSw3IEBAIHZvaWQgU2ltcGxlRWRpdENvbW1hbmQ6OmRvUmVhcHBseSgpCiAj
aWZuZGVmIE5ERUJVRwogdm9pZCBTaW1wbGVFZGl0Q29tbWFuZDo6YWRkTm9kZUFuZERlc2NlbmRh
bnRzKE5vZGUqIHN0YXJ0Tm9kZSwgSGFzaFNldDxOb2RlKj4mIG5vZGVzKQogewotICAgIGZvciAo
Tm9kZSogbm9kZSA9IHN0YXJ0Tm9kZTsgbm9kZTsgbm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5v
ZGUoc3RhcnROb2RlKSkKKyAgICBmb3IgKE5vZGUqIG5vZGUgPSBzdGFydE5vZGU7IG5vZGU7IG5v
ZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUsIHN0YXJ0Tm9kZSkpCiAgICAgICAgIG5vZGVz
LmFkZChub2RlKTsKIH0KICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0
aW5nU3R5bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGlu
Z1N0eWxlLmNwcAkocmV2aXNpb24gMTM3MTA4KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9F
ZGl0aW5nU3R5bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVk
ZSAiSFRNTEludGVyY2hhbmdlLmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAi
Tm9kZS5oIgorI2luY2x1ZGUgIk5vZGVUcmF2ZXJzYWwuaCIKICNpbmNsdWRlICJQb3NpdGlvbi5o
IgogI2luY2x1ZGUgIlF1YWxpZmllZE5hbWUuaCIKICNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgpA
QCAtNjgxLDcgKzY4Miw3IEBAIFRyaVN0YXRlIEVkaXRpbmdTdHlsZTo6dHJpU3RhdGVPZlN0eWxl
KGMKICAgICAgICAgcmV0dXJuIHRyaVN0YXRlT2ZTdHlsZShFZGl0aW5nU3R5bGU6OnN0eWxlQXRT
ZWxlY3Rpb25TdGFydChzZWxlY3Rpb24pLmdldCgpKTsKIAogICAgIFRyaVN0YXRlIHN0YXRlID0g
RmFsc2VUcmlTdGF0ZTsKLSAgICBmb3IgKE5vZGUqIG5vZGUgPSBzZWxlY3Rpb24uc3RhcnQoKS5k
ZXByZWNhdGVkTm9kZSgpOyBub2RlOyBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgpKSB7
CisgICAgZm9yIChOb2RlKiBub2RlID0gc2VsZWN0aW9uLnN0YXJ0KCkuZGVwcmVjYXRlZE5vZGUo
KTsgbm9kZTsgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9kZSkpIHsKICAgICAgICAgUmVm
UHRyPENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbj4gbm9kZVN0eWxlID0gQ1NTQ29tcHV0ZWRT
dHlsZURlY2xhcmF0aW9uOjpjcmVhdGUobm9kZSk7CiAgICAgICAgIGlmIChub2RlU3R5bGUpIHsK
ICAgICAgICAgICAgIFRyaVN0YXRlIG5vZGVTdGF0ZSA9IHRyaVN0YXRlT2ZTdHlsZShub2RlU3R5
bGUuZ2V0KCksIG5vZGUtPmlzVGV4dE5vZGUoKSA/IEVkaXRpbmdTdHlsZTo6RG9Ob3RJZ25vcmVU
ZXh0T25seVByb3BlcnRpZXMgOiBFZGl0aW5nU3R5bGU6Oklnbm9yZVRleHRPbmx5UHJvcGVydGll
cyk7CkBAIC0xMjQ4LDcgKzEyNDksNyBAQCBXcml0aW5nRGlyZWN0aW9uIEVkaXRpbmdTdHlsZTo6
dGV4dERpcmVjCiAgICAgICAgIGVuZCA9IHNlbGVjdGlvbi5lbmQoKS51cHN0cmVhbSgpOwogCiAg
ICAgICAgIE5vZGUqIHBhc3RMYXN0ID0gUmFuZ2U6OmNyZWF0ZShlbmQuZG9jdW1lbnQoKSwgcG9z
aXRpb24ucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCksIGVuZC5wYXJlbnRBbmNob3JlZEVxdWl2
YWxlbnQoKSktPnBhc3RMYXN0Tm9kZSgpOwotICAgICAgICBmb3IgKE5vZGUqIG4gPSBub2RlOyBu
ICYmIG4gIT0gcGFzdExhc3Q7IG4gPSBuLT50cmF2ZXJzZU5leHROb2RlKCkpIHsKKyAgICAgICAg
Zm9yIChOb2RlKiBuID0gbm9kZTsgbiAmJiBuICE9IHBhc3RMYXN0OyBuID0gTm9kZVRyYXZlcnNh
bDo6bmV4dChuKSkgewogICAgICAgICAgICAgaWYgKCFuLT5pc1N0eWxlZEVsZW1lbnQoKSkKICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9F
ZGl0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNw
cAkocmV2aXNpb24gMTM3MTA4KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02Miw2ICs2Miw3IEBACiAjaW5jbHVkZSAiS2lsbFJpbmcuaCIK
ICNpbmNsdWRlICJNb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuaCIKICNpbmNsdWRlICJOb2RlTGlz
dC5oIgorI2luY2x1ZGUgIk5vZGVUcmF2ZXJzYWwuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5j
bHVkZSAiUGFzdGVib2FyZC5oIgogI2luY2x1ZGUgIlJlbW92ZUZvcm1hdENvbW1hbmQuaCIKQEAg
LTEwNjcsMTIgKzEwNjgsMTIgQEAgdm9pZCBFZGl0b3I6OnNpbXBsaWZ5TWFya3VwKE5vZGUqIHN0
YXJ0TgogICAgICAgICAvLyBjaGVjayBpZiBzdGFydCBub2RlIGlzIGJlZm9yZSBlbmROb2RlCiAg
ICAgICAgIE5vZGUqIG5vZGUgPSBzdGFydE5vZGU7CiAgICAgICAgIHdoaWxlIChub2RlICYmIG5v
ZGUgIT0gZW5kTm9kZSkKLSAgICAgICAgICAgIG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHROb2Rl
KCk7CisgICAgICAgICAgICBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dChub2RlKTsKICAgICAg
ICAgaWYgKCFub2RlKQogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBhcHBs
eUNvbW1hbmQoU2ltcGxpZnlNYXJrdXBDb21tYW5kOjpjcmVhdGUobV9mcmFtZS0+ZG9jdW1lbnQo
KSwgc3RhcnROb2RlLCAoZW5kTm9kZSkgPyBlbmROb2RlLT50cmF2ZXJzZU5leHROb2RlKCkgOiAw
KSk7CisgICAgYXBwbHlDb21tYW5kKFNpbXBsaWZ5TWFya3VwQ29tbWFuZDo6Y3JlYXRlKG1fZnJh
bWUtPmRvY3VtZW50KCksIHN0YXJ0Tm9kZSwgKGVuZE5vZGUpID8gTm9kZVRyYXZlcnNhbDo6bmV4
dChlbmROb2RlKSA6IDApKTsKIH0KIAogdm9pZCBFZGl0b3I6OmNvcHlVUkwoY29uc3QgS1VSTCYg
dXJsLCBjb25zdCBTdHJpbmcmIHRpdGxlKQpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9G
cmFtZVNlbGVjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9G
cmFtZVNlbGVjdGlvbi5jcHAJKHJldmlzaW9uIDEzNzEwOCkKKysrIFNvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCw2ICs0OCw3IEBA
CiAjaW5jbHVkZSAiSGl0VGVzdFJlcXVlc3QuaCIKICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0Lmgi
CiAjaW5jbHVkZSAiSW5saW5lVGV4dEJveC5oIgorI2luY2x1ZGUgIk5vZGVUcmF2ZXJzYWwuaCIK
ICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUmFuZ2UuaCIKICNpbmNsdWRlICJSZW5kZXJU
ZXh0LmgiCkBAIC0xOTUyLDcgKzE5NTMsNyBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpnZXRDbGlw
cGVkVmlzaWJsZVRlCiAvLyBTY2FucyBsb2dpY2FsbHkgZm9yd2FyZCBmcm9tICJzdGFydCIsIGlu
Y2x1ZGluZyBhbnkgY2hpbGQgZnJhbWVzLgogc3RhdGljIEhUTUxGb3JtRWxlbWVudCogc2NhbkZv
ckZvcm0oTm9kZSogc3RhcnQpCiB7Ci0gICAgZm9yIChOb2RlKiBub2RlID0gc3RhcnQ7IG5vZGU7
IG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKCkpIHsKKyAgICBmb3IgKE5vZGUqIG5vZGUg
PSBzdGFydDsgbm9kZTsgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9kZSkpIHsKICAgICAg
ICAgaWYgKG5vZGUtPmhhc1RhZ05hbWUoZm9ybVRhZykpCiAgICAgICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8SFRNTEZvcm1FbGVtZW50Kj4obm9kZSk7CiAgICAgICAgIGlmIChub2RlLT5pc0hU
TUxFbGVtZW50KCkgJiYgdG9IVE1MRWxlbWVudChub2RlKS0+aXNGb3JtQ29udHJvbEVsZW1lbnQo
KSkKQEAgLTIwMjUsNyArMjAyNiw3IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnNldFNlbGVjdGlv
bkZyb21Ob24KIAogICAgIE5vZGUqIG5vZGUgPSBkb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50KCk7
CiAgICAgd2hpbGUgKG5vZGUgJiYgIW5vZGUtPmhhc1RhZ05hbWUoYm9keVRhZykpCi0gICAgICAg
IG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKCk7CisgICAgICAgIG5vZGUgPSBOb2RlVHJh
dmVyc2FsOjpuZXh0KG5vZGUpOwogICAgIGlmIChub2RlKQogICAgICAgICBzZXRTZWxlY3Rpb24o
VmlzaWJsZVNlbGVjdGlvbihmaXJzdFBvc2l0aW9uSW5PckJlZm9yZU5vZGUobm9kZSksIERPV05T
VFJFQU0pKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0UGFyYWdyYXBo
U2VwYXJhdG9yQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9JbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kLmNwcAkocmV2aXNpb24gMTM3MTA4KQor
KysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5k
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkhUTUxFbGVt
ZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSW5zZXJ0TGluZUJyZWFr
Q29tbWFuZC5oIgorI2luY2x1ZGUgIk5vZGVUcmF2ZXJzYWwuaCIKICNpbmNsdWRlICJSZW5kZXJP
YmplY3QuaCIKICNpbmNsdWRlICJUZXh0LmgiCiAjaW5jbHVkZSAiaHRtbGVkaXRpbmcuaCIKQEAg
LTM2Niw3ICszNjcsNyBAQCB2b2lkIEluc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQ6OmRv
CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgTm9kZSogc3BsaXRUbyA9IGluc2VydGlvblBv
c2l0aW9uLmNvbnRhaW5lck5vZGUoKTsKICAgICAgICAgICAgIGlmIChzcGxpdFRvLT5pc1RleHRO
b2RlKCkgJiYgaW5zZXJ0aW9uUG9zaXRpb24ub2Zmc2V0SW5Db250YWluZXJOb2RlKCkgPj0gY2Fy
ZXRNYXhPZmZzZXQoc3BsaXRUbykpCi0gICAgICAgICAgICAgIHNwbGl0VG8gPSBzcGxpdFRvLT50
cmF2ZXJzZU5leHROb2RlKHN0YXJ0QmxvY2suZ2V0KCkpOworICAgICAgICAgICAgICAgIHNwbGl0
VG8gPSBOb2RlVHJhdmVyc2FsOjpuZXh0KHNwbGl0VG8sIHN0YXJ0QmxvY2suZ2V0KCkpOwogICAg
ICAgICAgICAgQVNTRVJUKHNwbGl0VG8pOwogICAgICAgICAgICAgc3BsaXRUcmVlVG9Ob2RlKHNw
bGl0VG8sIHN0YXJ0QmxvY2suZ2V0KCkpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAkocmV2aXNpb24gMTM3MTA4KQor
KysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ1LDYgKzQ1LDcgQEAKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNp
bmNsdWRlICJOb2RlTGlzdC5oIgogI2luY2x1ZGUgIk5vZGVSZW5kZXJTdHlsZS5oIgorI2luY2x1
ZGUgIk5vZGVUcmF2ZXJzYWwuaCIKICNpbmNsdWRlICJSZW5kZXJJbmxpbmUuaCIKICNpbmNsdWRl
ICJSZW5kZXJPYmplY3QuaCIKICNpbmNsdWRlICJSZW5kZXJUZXh0LmgiCkBAIC0yODksNyArMjkw
LDcgQEAgdm9pZCBSZXBsYWNlbWVudEZyYWdtZW50OjpyZW1vdmVVbnJlbmRlcgogewogICAgIFZl
Y3RvcjxSZWZQdHI8Tm9kZT4gPiB1bnJlbmRlcmVkOwogCi0gICAgZm9yIChOb2RlKiBub2RlID0g
aG9sZGVyLT5maXJzdENoaWxkKCk7IG5vZGU7IG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHROb2Rl
KGhvbGRlcikpCisgICAgZm9yIChOb2RlKiBub2RlID0gaG9sZGVyLT5maXJzdENoaWxkKCk7IG5v
ZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUsIGhvbGRlcikpCiAgICAgICAgIGlm
ICghaXNOb2RlUmVuZGVyZWQobm9kZSkgJiYgIWlzVGFibGVTdHJ1Y3R1cmVOb2RlKG5vZGUpKQog
ICAgICAgICAgICAgdW5yZW5kZXJlZC5hcHBlbmQobm9kZSk7CiAKQEAgLTMzMCw5ICszMzEsOSBA
QCB2b2lkIFJlcGxhY2VtZW50RnJhZ21lbnQ6OnJlbW92ZUludGVyY2hhCiAgICAgCiAgICAgbm9k
ZSA9IGNvbnRhaW5lci0+Zmlyc3RDaGlsZCgpOwogICAgIHdoaWxlIChub2RlKSB7Ci0gICAgICAg
IFJlZlB0cjxOb2RlPiBuZXh0ID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgpOworICAgICAgICBS
ZWZQdHI8Tm9kZT4gbmV4dCA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9kZSk7CiAgICAgICAgIGlm
IChpc0ludGVyY2hhbmdlQ29udmVydGVkU3BhY2VTcGFuKG5vZGUpKSB7Ci0gICAgICAgICAgICBu
ZXh0ID0gbm9kZS0+dHJhdmVyc2VOZXh0U2libGluZygpOworICAgICAgICAgICAgbmV4dCA9IE5v
ZGVUcmF2ZXJzYWw6Om5leHRTaWJsaW5nKG5vZGUpOwogICAgICAgICAgICAgcmVtb3ZlTm9kZVBy
ZXNlcnZpbmdDaGlsZHJlbihub2RlKTsKICAgICAgICAgfQogICAgICAgICBub2RlID0gbmV4dC5n
ZXQoKTsKQEAgLTM1Myw5ICszNTQsOSBAQCBpbmxpbmUgdm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29t
bWFuZDo6SW5zCiBpbmxpbmUgdm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6SW5zZXJ0ZWRO
b2Rlczo6d2lsbFJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW4oTm9kZSogbm9kZSkKIHsKICAg
ICBpZiAobV9maXJzdE5vZGVJbnNlcnRlZCA9PSBub2RlKQotICAgICAgICBtX2ZpcnN0Tm9kZUlu
c2VydGVkID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgpOworICAgICAgICBtX2ZpcnN0Tm9kZUlu
c2VydGVkID0gTm9kZVRyYXZlcnNhbDo6bmV4dChub2RlKTsKICAgICBpZiAobV9sYXN0Tm9kZUlu
c2VydGVkID09IG5vZGUpCi0gICAgICAgIG1fbGFzdE5vZGVJbnNlcnRlZCA9IG5vZGUtPmxhc3RD
aGlsZCgpID8gbm9kZS0+bGFzdENoaWxkKCkgOiBub2RlLT50cmF2ZXJzZU5leHRTaWJsaW5nKCk7
CisgICAgICAgIG1fbGFzdE5vZGVJbnNlcnRlZCA9IG5vZGUtPmxhc3RDaGlsZCgpID8gbm9kZS0+
bGFzdENoaWxkKCkgOiBOb2RlVHJhdmVyc2FsOjpuZXh0U2libGluZyhub2RlKTsKIH0KIAogaW5s
aW5lIHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6Okluc2VydGVkTm9kZXM6OndpbGxSZW1v
dmVOb2RlKE5vZGUqIG5vZGUpCkBAIC0zNjQsOSArMzY1LDkgQEAgaW5saW5lIHZvaWQgUmVwbGFj
ZVNlbGVjdGlvbkNvbW1hbmQ6OklucwogICAgICAgICBtX2ZpcnN0Tm9kZUluc2VydGVkID0gMDsK
ICAgICAgICAgbV9sYXN0Tm9kZUluc2VydGVkID0gMDsKICAgICB9IGVsc2UgaWYgKG1fZmlyc3RO
b2RlSW5zZXJ0ZWQgPT0gbm9kZSkKLSAgICAgICAgbV9maXJzdE5vZGVJbnNlcnRlZCA9IG1fZmly
c3ROb2RlSW5zZXJ0ZWQtPnRyYXZlcnNlTmV4dFNpYmxpbmcoKTsKKyAgICAgICAgbV9maXJzdE5v
ZGVJbnNlcnRlZCA9IE5vZGVUcmF2ZXJzYWw6Om5leHRTaWJsaW5nKG1fZmlyc3ROb2RlSW5zZXJ0
ZWQuZ2V0KCkpOwogICAgIGVsc2UgaWYgKG1fbGFzdE5vZGVJbnNlcnRlZCA9PSBub2RlKQotICAg
ICAgICBtX2xhc3ROb2RlSW5zZXJ0ZWQgPSBtX2xhc3ROb2RlSW5zZXJ0ZWQtPnRyYXZlcnNlUHJl
dmlvdXNTaWJsaW5nKCk7CisgICAgICAgIG1fbGFzdE5vZGVJbnNlcnRlZCA9IE5vZGVUcmF2ZXJz
YWw6OnByZXZpb3VzU2libGluZyhtX2xhc3ROb2RlSW5zZXJ0ZWQuZ2V0KCkpOwogfQogCiBSZXBs
YWNlU2VsZWN0aW9uQ29tbWFuZDo6UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQoRG9jdW1lbnQqIGRv
Y3VtZW50LCBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50LCBDb21tYW5kT3B0
aW9ucyBvcHRpb25zLCBFZGl0QWN0aW9uIGVkaXRBY3Rpb24pCkBAIC00ODAsNyArNDgxLDcgQEAg
dm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6cmVtb3ZlUmVkdQogICAgIGZvciAoUmVmUHRy
PE5vZGU+IG5vZGUgPSBpbnNlcnRlZE5vZGVzLmZpcnN0Tm9kZUluc2VydGVkKCk7IG5vZGUgJiYg
bm9kZSAhPSBwYXN0RW5kTm9kZTsgbm9kZSA9IG5leHQpIHsKICAgICAgICAgLy8gRklYTUU6IDxy
ZGFyOi8vcHJvYmxlbS81MzcxNTM2PiBTdHlsZSBydWxlcyB0aGF0IG1hdGNoIHBhc3RlZCBjb250
ZW50IGNhbiBjaGFuZ2UgaXQncyBhcHBlYXJhbmNlCiAKLSAgICAgICAgbmV4dCA9IG5vZGUtPnRy
YXZlcnNlTmV4dE5vZGUoKTsKKyAgICAgICAgbmV4dCA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9k
ZS5nZXQoKSk7CiAgICAgICAgIGlmICghbm9kZS0+aXNTdHlsZWRFbGVtZW50KCkpCiAgICAgICAg
ICAgICBjb250aW51ZTsKIApAQCAtNTk1LDEwICs1OTYsMTAgQEAgc3RhdGljIHZvaWQgcmVtb3Zl
SGVhZENvbnRlbnRzKFJlcGxhY2VtZQogICAgICAgICAgICAgfHwgbm9kZS0+aGFzVGFnTmFtZSht
ZXRhVGFnKQogICAgICAgICAgICAgfHwgbm9kZS0+aGFzVGFnTmFtZShzdHlsZVRhZykKICAgICAg
ICAgICAgIHx8IG5vZGUtPmhhc1RhZ05hbWUodGl0bGVUYWcpKSB7Ci0gICAgICAgICAgICBuZXh0
ID0gbm9kZS0+dHJhdmVyc2VOZXh0U2libGluZygpOworICAgICAgICAgICAgbmV4dCA9IE5vZGVU
cmF2ZXJzYWw6Om5leHRTaWJsaW5nKG5vZGUpOwogICAgICAgICAgICAgZnJhZ21lbnQucmVtb3Zl
Tm9kZShub2RlKTsKICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBuZXh0ID0gbm9kZS0+dHJh
dmVyc2VOZXh0Tm9kZSgpOworICAgICAgICAgICAgbmV4dCA9IE5vZGVUcmF2ZXJzYWw6Om5leHQo
bm9kZSk7CiAgICAgfQogfQogCkBAIC02NDUsNyArNjQ2LDcgQEAgdm9pZCBSZXBsYWNlU2VsZWN0
aW9uQ29tbWFuZDo6aGFuZGxlU3R5bAogICAgIC8vIFRoZSBzdHlsZSBzcGFuIHRoYXQgY29udGFp
bnMgdGhlIHNvdXJjZSBkb2N1bWVudCdzIGRlZmF1bHQgc3R5bGUgc2hvdWxkIGJlIGF0CiAgICAg
Ly8gdGhlIHRvcCBvZiB0aGUgZnJhZ21lbnQsIGJ1dCBNYWlsIHNvbWV0aW1lcyBhZGRzIGEgd3Jh
cHBlciAoZm9yIFBhc3RlIEFzIFF1b3RhdGlvbiksCiAgICAgLy8gc28gc2VhcmNoIGZvciB0aGUg
dG9wIGxldmVsIHN0eWxlIHNwYW4gaW5zdGVhZCBvZiBhc3N1bWluZyBpdCdzIGF0IHRoZSB0b3Au
Ci0gICAgZm9yIChOb2RlKiBub2RlID0gaW5zZXJ0ZWROb2Rlcy5maXJzdE5vZGVJbnNlcnRlZCgp
OyBub2RlOyBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgpKSB7CisgICAgZm9yIChOb2Rl
KiBub2RlID0gaW5zZXJ0ZWROb2Rlcy5maXJzdE5vZGVJbnNlcnRlZCgpOyBub2RlOyBub2RlID0g
Tm9kZVRyYXZlcnNhbDo6bmV4dChub2RlKSkgewogICAgICAgICBpZiAoaXNMZWdhY3lBcHBsZVN0
eWxlU3Bhbihub2RlKSkgewogICAgICAgICAgICAgd3JhcHBpbmdTdHlsZVNwYW4gPSB0b0hUTUxF
bGVtZW50KG5vZGUpOwogICAgICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5oCShyZXZpc2lvbiAxMzcxMDgp
CisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNkZWZpbmUgUmVwbGFjZVNlbGVjdGlvbkNv
bW1hbmRfaAogCiAjaW5jbHVkZSAiQ29tcG9zaXRlRWRpdENvbW1hbmQuaCIKKyNpbmNsdWRlICJO
b2RlVHJhdmVyc2FsLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNjUsNyArNjYsNyBA
QCBwcml2YXRlOgogCiAgICAgICAgIE5vZGUqIGZpcnN0Tm9kZUluc2VydGVkKCkgY29uc3QgeyBy
ZXR1cm4gbV9maXJzdE5vZGVJbnNlcnRlZC5nZXQoKTsgfQogICAgICAgICBOb2RlKiBsYXN0TGVh
Zkluc2VydGVkKCkgY29uc3QgeyByZXR1cm4gbV9sYXN0Tm9kZUluc2VydGVkLT5sYXN0RGVzY2Vu
ZGFudCgpOyB9Ci0gICAgICAgIE5vZGUqIHBhc3RMYXN0TGVhZigpIGNvbnN0IHsgcmV0dXJuIG1f
bGFzdE5vZGVJbnNlcnRlZCA/IGxhc3RMZWFmSW5zZXJ0ZWQoKS0+dHJhdmVyc2VOZXh0Tm9kZSgp
IDogMDsgfQorICAgICAgICBOb2RlKiBwYXN0TGFzdExlYWYoKSBjb25zdCB7IHJldHVybiBtX2xh
c3ROb2RlSW5zZXJ0ZWQgPyBOb2RlVHJhdmVyc2FsOjpuZXh0KGxhc3RMZWFmSW5zZXJ0ZWQoKSkg
OiAwOyB9CiAKICAgICBwcml2YXRlOgogICAgICAgICBSZWZQdHI8Tm9kZT4gbV9maXJzdE5vZGVJ
bnNlcnRlZDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU2ltcGxpZnlNYXJrdXBDb21t
YW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NpbXBsaWZ5TWFy
a3VwQ29tbWFuZC5jcHAJKHJldmlzaW9uIDEzNzEwOCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvU2ltcGxpZnlNYXJrdXBDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcs
NyBAQAogI2luY2x1ZGUgIlNpbXBsaWZ5TWFya3VwQ29tbWFuZC5oIgogCiAjaW5jbHVkZSAiTm9k
ZVJlbmRlclN0eWxlLmgiCisjaW5jbHVkZSAiTm9kZVRyYXZlcnNhbC5oIgogI2luY2x1ZGUgIlJl
bmRlcklubGluZS5oIgogI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgogI2luY2x1ZGUgIlJlbmRl
clN0eWxlLmgiCkBAIC00Nyw3ICs0OCw3IEBAIHZvaWQgU2ltcGxpZnlNYXJrdXBDb21tYW5kOjpk
b0FwcGx5KCkKICAgICAvLyB3aXRob3V0IGFmZmVjdGluZyB0aGUgc3R5bGUuIFRoZSBnb2FsIGlz
IHRvIHByb2R1Y2UgbGVhbmVyIG1hcmt1cCBldmVuIHdoZW4gc3RhcnRpbmcKICAgICAvLyBmcm9t
IGEgdmVyYm9zZSBmcmFnbWVudC4KICAgICAvLyBXZSBsb29rIGF0IGlubGluZSBlbGVtZW50cyBh
cyB3ZWxsIGFzIG5vbiB0b3AgbGV2ZWwgZGl2cyB0aGF0IGRvbid0IGhhdmUgYXR0cmlidXRlcy4g
Ci0gICAgZm9yIChOb2RlKiBub2RlID0gbV9maXJzdE5vZGUuZ2V0KCk7IG5vZGUgJiYgbm9kZSAh
PSBtX25vZGVBZnRlckxhc3Q7IG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKCkpIHsKKyAg
ICBmb3IgKE5vZGUqIG5vZGUgPSBtX2ZpcnN0Tm9kZS5nZXQoKTsgbm9kZSAmJiBub2RlICE9IG1f
bm9kZUFmdGVyTGFzdDsgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9kZSkpIHsKICAgICAg
ICAgaWYgKG5vZGUtPmZpcnN0Q2hpbGQoKSB8fCAobm9kZS0+aXNUZXh0Tm9kZSgpICYmIG5vZGUt
Pm5leHRTaWJsaW5nKCkpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIApJbmRleDog
U291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcAkocmV2aXNpb24gMTM3MTA4KQor
KysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiaHRt
bGVkaXRpbmcuaCIKICNpbmNsdWRlICJJbmxpbmVUZXh0Qm94LmgiCisjaW5jbHVkZSAiTm9kZVRy
YXZlcnNhbC5oIgogI2luY2x1ZGUgIlJhbmdlLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGFibGVDZWxs
LmgiCiAjaW5jbHVkZSAiUmVuZGVyVGFibGVSb3cuaCIKQEAgLTQyNSw3ICs0MjYsNyBAQCB2b2lk
IFRleHRJdGVyYXRvcjo6YWR2YW5jZSgpCiAgICAgICAgIGlmICghbmV4dCkgewogICAgICAgICAg
ICAgbmV4dCA9IG1fbm9kZS0+bmV4dFNpYmxpbmcoKTsKICAgICAgICAgICAgIGlmICghbmV4dCkg
ewotICAgICAgICAgICAgICAgIGJvb2wgcGFzdEVuZCA9IG1fbm9kZS0+dHJhdmVyc2VOZXh0Tm9k
ZSgpID09IG1fcGFzdEVuZE5vZGU7CisgICAgICAgICAgICAgICAgYm9vbCBwYXN0RW5kID0gTm9k
ZVRyYXZlcnNhbDo6bmV4dChtX25vZGUpID09IG1fcGFzdEVuZE5vZGU7CiAgICAgICAgICAgICAg
ICAgTm9kZSogcGFyZW50Tm9kZSA9IG1fbm9kZS0+cGFyZW50T3JIb3N0Tm9kZSgpOwogICAgICAg
ICAgICAgICAgIHdoaWxlICghbmV4dCAmJiBwYXJlbnROb2RlKSB7CiAgICAgICAgICAgICAgICAg
ICAgIGlmICgocGFzdEVuZCAmJiBwYXJlbnROb2RlID09IG1fZW5kQ29udGFpbmVyKSB8fCBtX2Vu
ZENvbnRhaW5lci0+aXNEZXNjZW5kYW50T2YocGFyZW50Tm9kZSkpCkBAIC04MDUsNyArODA2LDcg
QEAgc3RhdGljIGJvb2wgc2hvdWxkRW1pdE5ld2xpbmVBZnRlck5vZGUoTgogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgLy8gQ2hlY2sgaWYgdGhpcyBpcyB0aGUgdmVyeSBsYXN0IHJlbmRlcmVy
IGluIHRoZSBkb2N1bWVudC4KICAgICAvLyBJZiBzbywgdGhlbiB3ZSBzaG91bGQgbm90IGVtaXQg
YSBuZXdsaW5lLgotICAgIHdoaWxlICgobm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dFNpYmxpbmco
KSkpCisgICAgd2hpbGUgKChub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dFNpYmxpbmcobm9kZSkp
KQogICAgICAgICBpZiAobm9kZS0+cmVuZGVyZXIoKSkKICAgICAgICAgICAgIHJldHVybiB0cnVl
OwogICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaHRtbGVk
aXRpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRp
bmcuY3BwCShyZXZpc2lvbiAxMzcxMDgpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2h0bWxl
ZGl0aW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsNiArNDEsNyBAQAogI2luY2x1ZGUgIkhU
TUxPTGlzdEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MUGFyYWdyYXBoRWxlbWVudC5oIgogI2lu
Y2x1ZGUgIkhUTUxVTGlzdEVsZW1lbnQuaCIKKyNpbmNsdWRlICJOb2RlVHJhdmVyc2FsLmgiCiAj
aW5jbHVkZSAiUG9zaXRpb25JdGVyYXRvci5oIgogI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgog
I2luY2x1ZGUgIlJhbmdlLmgiCkBAIC02NDUsMTIgKzY0NiwxMiBAQCBzdGF0aWMgYm9vbCBoYXNB
UmVuZGVyZWREZXNjZW5kYW50KE5vZGUqCiB7CiAgICAgZm9yIChOb2RlKiBuID0gbm9kZS0+Zmly
c3RDaGlsZCgpOyBuOykgewogICAgICAgICBpZiAobiA9PSBleGNsdWRlZE5vZGUpIHsKLSAgICAg
ICAgICAgIG4gPSBuLT50cmF2ZXJzZU5leHRTaWJsaW5nKG5vZGUpOworICAgICAgICAgICAgbiA9
IE5vZGVUcmF2ZXJzYWw6Om5leHRTaWJsaW5nKG4sIG5vZGUpOwogICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgIH0KICAgICAgICAgaWYgKG4tPnJlbmRlcmVyKCkpCiAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICAgICAgbiA9IG4tPnRyYXZlcnNlTmV4dE5vZGUobm9kZSk7CisgICAg
ICAgIG4gPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG4sIG5vZGUpOwogICAgIH0KICAgICByZXR1cm4g
ZmFsc2U7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCShyZXZpc2lvbiAxMzcx
MDgpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTUxLDYgKzUxLDcgQEAKICNpbmNsdWRlICJIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudC5o
IgogI2luY2x1ZGUgIktVUkwuaCIKICNpbmNsdWRlICJNYXJrdXBBY2N1bXVsYXRvci5oIgorI2lu
Y2x1ZGUgIk5vZGVUcmF2ZXJzYWwuaCIKICNpbmNsdWRlICJSYW5nZS5oIgogI2luY2x1ZGUgIlJl
bmRlck9iamVjdC5oIgogI2luY2x1ZGUgIlN0eWxlUHJvcGVydHlTZXQuaCIKQEAgLTEwMSw4ICsx
MDIsOCBAQCBzdGF0aWMgdm9pZCBjb21wbGV0ZVVSTHMoTm9kZSogbm9kZSwgY29uCiAKICAgICBL
VVJMIHBhcnNlZEJhc2VVUkwoUGFyc2VkVVJMU3RyaW5nLCBiYXNlVVJMKTsKIAotICAgIE5vZGUq
IGVuZCA9IG5vZGUtPnRyYXZlcnNlTmV4dFNpYmxpbmcoKTsKLSAgICBmb3IgKE5vZGUqIG4gPSBu
b2RlOyBuICE9IGVuZDsgbiA9IG4tPnRyYXZlcnNlTmV4dE5vZGUoKSkgeworICAgIE5vZGUqIGVu
ZCA9IE5vZGVUcmF2ZXJzYWw6Om5leHRTaWJsaW5nKG5vZGUpOworICAgIGZvciAoTm9kZSogbiA9
IG5vZGU7IG4gIT0gZW5kOyBuID0gTm9kZVRyYXZlcnNhbDo6bmV4dChuKSkgewogICAgICAgICBp
ZiAobi0+aXNFbGVtZW50Tm9kZSgpKSB7CiAgICAgICAgICAgICBFbGVtZW50KiBlID0gc3RhdGlj
X2Nhc3Q8RWxlbWVudCo+KG4pOwogICAgICAgICAgICAgaWYgKCFlLT5oYXNBdHRyaWJ1dGVzKCkp
CkBAIC0zNjUsNyArMzY2LDcgQEAgTm9kZSogU3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OnRyYXZl
cnNlTgogICAgICAgICBpZiAoIW4pCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgCi0gICAg
ICAgIG5leHQgPSBuLT50cmF2ZXJzZU5leHROb2RlKCk7CisgICAgICAgIG5leHQgPSBOb2RlVHJh
dmVyc2FsOjpuZXh0KG4pOwogICAgICAgICBib29sIG9wZW5lZFRhZyA9IGZhbHNlOwogCiAgICAg
ICAgIGlmIChpc0Jsb2NrKG4pICYmIGNhbkhhdmVDaGlsZHJlbkZvckVkaXRpbmcobikgJiYgbmV4
dCA9PSBwYXN0RW5kKQpAQCAtMzczLDcgKzM3NCw3IEBAIE5vZGUqIFN0eWxlZE1hcmt1cEFjY3Vt
dWxhdG9yOjp0cmF2ZXJzZU4KICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIGlmICgh
bi0+cmVuZGVyZXIoKSAmJiAhZW5jbG9zaW5nTm9kZVdpdGhUYWcoZmlyc3RQb3NpdGlvbkluT3JC
ZWZvcmVOb2RlKG4pLCBzZWxlY3RUYWcpKSB7Ci0gICAgICAgICAgICBuZXh0ID0gbi0+dHJhdmVy
c2VOZXh0U2libGluZygpOworICAgICAgICAgICAgbmV4dCA9IE5vZGVUcmF2ZXJzYWw6Om5leHRT
aWJsaW5nKG4pOwogICAgICAgICAgICAgLy8gRG9uJ3Qgc2tpcCBvdmVyIHBhc3RFbmQuCiAgICAg
ICAgICAgICBpZiAocGFzdEVuZCAmJiBwYXN0RW5kLT5pc0Rlc2NlbmRhbnRPZihuKSkKICAgICAg
ICAgICAgICAgICBuZXh0ID0gcGFzdEVuZDsKQEAgLTY3OCw3ICs2NzksNyBAQCBzdGF0aWMgY29u
c3QgY2hhciBmcmFnbWVudE1hcmtlclRhZ1tdID0gCiAKIHN0YXRpYyBib29sIGZpbmROb2Rlc1N1
cnJvdW5kaW5nQ29udGV4dChEb2N1bWVudCogZG9jdW1lbnQsIFJlZlB0cjxOb2RlPiYgbm9kZUJl
Zm9yZUNvbnRleHQsIFJlZlB0cjxOb2RlPiYgbm9kZUFmdGVyQ29udGV4dCkKIHsKLSAgICBmb3Ig
KE5vZGUqIG5vZGUgPSBkb2N1bWVudC0+Zmlyc3RDaGlsZCgpOyBub2RlOyBub2RlID0gbm9kZS0+
dHJhdmVyc2VOZXh0Tm9kZSgpKSB7CisgICAgZm9yIChOb2RlKiBub2RlID0gZG9jdW1lbnQtPmZp
cnN0Q2hpbGQoKTsgbm9kZTsgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9kZSkpIHsKICAg
ICAgICAgaWYgKG5vZGUtPm5vZGVUeXBlKCkgPT0gTm9kZTo6Q09NTUVOVF9OT0RFICYmIHN0YXRp
Y19jYXN0PENoYXJhY3RlckRhdGEqPihub2RlKS0+ZGF0YSgpID09IGZyYWdtZW50TWFya2VyVGFn
KSB7CiAgICAgICAgICAgICBpZiAoIW5vZGVCZWZvcmVDb250ZXh0KQogICAgICAgICAgICAgICAg
IG5vZGVCZWZvcmVDb250ZXh0ID0gbm9kZTsKQEAgLTY5NywxMCArNjk4LDEwIEBAIHN0YXRpYyB2
b2lkIHRyaW1GcmFnbWVudChEb2N1bWVudEZyYWdtZW4KICAgICBSZWZQdHI8Tm9kZT4gbmV4dDsK
ICAgICBmb3IgKFJlZlB0cjxOb2RlPiBub2RlID0gZnJhZ21lbnQtPmZpcnN0Q2hpbGQoKTsgbm9k
ZTsgbm9kZSA9IG5leHQpIHsKICAgICAgICAgaWYgKG5vZGVCZWZvcmVDb250ZXh0LT5pc0Rlc2Nl
bmRhbnRPZihub2RlLmdldCgpKSkgewotICAgICAgICAgICAgbmV4dCA9IG5vZGUtPnRyYXZlcnNl
TmV4dE5vZGUoKTsKKyAgICAgICAgICAgIG5leHQgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUu
Z2V0KCkpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KLSAgICAgICAgbmV4dCA9
IG5vZGUtPnRyYXZlcnNlTmV4dFNpYmxpbmcoKTsKKyAgICAgICAgbmV4dCA9IE5vZGVUcmF2ZXJz
YWw6Om5leHRTaWJsaW5nKG5vZGUuZ2V0KCkpOwogICAgICAgICBBU1NFUlQoIW5vZGUtPmNvbnRh
aW5zKG5vZGVBZnRlckNvbnRleHQpKTsKICAgICAgICAgbm9kZS0+cGFyZW50Tm9kZSgpLT5yZW1v
dmVDaGlsZChub2RlLmdldCgpLCBlYyk7CiAgICAgICAgIGlmIChub2RlQmVmb3JlQ29udGV4dCA9
PSBub2RlKQpAQCAtNzA5LDcgKzcxMCw3IEBAIHN0YXRpYyB2b2lkIHRyaW1GcmFnbWVudChEb2N1
bWVudEZyYWdtZW4KIAogICAgIEFTU0VSVChub2RlQWZ0ZXJDb250ZXh0LT5wYXJlbnROb2RlKCkp
OwogICAgIGZvciAoUmVmUHRyPE5vZGU+IG5vZGUgPSBub2RlQWZ0ZXJDb250ZXh0OyBub2RlOyBu
b2RlID0gbmV4dCkgewotICAgICAgICBuZXh0ID0gbm9kZS0+dHJhdmVyc2VOZXh0U2libGluZygp
OworICAgICAgICBuZXh0ID0gTm9kZVRyYXZlcnNhbDo6bmV4dFNpYmxpbmcobm9kZS5nZXQoKSk7
CiAgICAgICAgIG5vZGUtPnBhcmVudE5vZGUoKS0+cmVtb3ZlQ2hpbGQobm9kZS5nZXQoKSwgZWMp
OwogICAgICAgICBBU1NFUlQoIWVjKTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL3Zpc2libGVfdW5pdHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvdmlzaWJsZV91bml0cy5jcHAJKHJldmlzaW9uIDEzNzEwOCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvdmlzaWJsZV91bml0cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcg
QEAKICNpbmNsdWRlICJFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVk
ZSAiSW5saW5lVGV4dEJveC5oIgorI2luY2x1ZGUgIk5vZGVUcmF2ZXJzYWwuaCIKICNpbmNsdWRl
ICJQb3NpdGlvbi5oIgogI2luY2x1ZGUgIlJlbmRlckJsb2NrLmgiCiAjaW5jbHVkZSAiUmVuZGVy
T2JqZWN0LmgiCkBAIC0xMTE2LDE4ICsxMTE3LDE4IEBAIFZpc2libGVQb3NpdGlvbiBzdGFydE9m
UGFyYWdyYXBoKGNvbnN0IFYKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBpZiAoYm91bmRh
cnlDcm9zc2luZ1J1bGUgPT0gQ2FuU2tpcE92ZXJFZGl0aW5nQm91bmRhcnkpIHsKICAgICAgICAg
ICAgIHdoaWxlIChuICYmIG4tPnJlbmRlcmVySXNFZGl0YWJsZSgpICE9IHN0YXJ0Tm9kZS0+cmVu
ZGVyZXJJc0VkaXRhYmxlKCkpCi0gICAgICAgICAgICAgICAgbiA9IG4tPnRyYXZlcnNlUHJldmlv
dXNOb2RlUG9zdE9yZGVyKHN0YXJ0QmxvY2spOworICAgICAgICAgICAgICAgIG4gPSBOb2RlVHJh
dmVyc2FsOjpwcmV2aW91c1Bvc3RPcmRlcihuLCBzdGFydEJsb2NrKTsKICAgICAgICAgICAgIGlm
ICghbiB8fCAhbi0+aXNEZXNjZW5kYW50T2YoaGlnaGVzdFJvb3QpKQogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIFJlbmRlck9iamVjdCAqciA9IG4tPnJlbmRlcmVy
KCk7CiAgICAgICAgIGlmICghcikgewotICAgICAgICAgICAgbiA9IG4tPnRyYXZlcnNlUHJldmlv
dXNOb2RlUG9zdE9yZGVyKHN0YXJ0QmxvY2spOworICAgICAgICAgICAgbiA9IE5vZGVUcmF2ZXJz
YWw6OnByZXZpb3VzUG9zdE9yZGVyKG4sIHN0YXJ0QmxvY2spOwogICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgIH0KICAgICAgICAgUmVuZGVyU3R5bGUgKnN0eWxlID0gci0+c3R5bGUoKTsK
ICAgICAgICAgaWYgKHN0eWxlLT52aXNpYmlsaXR5KCkgIT0gVklTSUJMRSkgewotICAgICAgICAg
ICAgbiA9IG4tPnRyYXZlcnNlUHJldmlvdXNOb2RlUG9zdE9yZGVyKHN0YXJ0QmxvY2spOworICAg
ICAgICAgICAgbiA9IE5vZGVUcmF2ZXJzYWw6OnByZXZpb3VzUG9zdE9yZGVyKG4sIHN0YXJ0Qmxv
Y2spOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KICAgICAgICAgCkBAIC0xMTUw
LDEzICsxMTUxLDEzIEBAIFZpc2libGVQb3NpdGlvbiBzdGFydE9mUGFyYWdyYXBoKGNvbnN0IFYK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIG5vZGUgPSBuOwogICAgICAgICAgICAgb2Zmc2V0
ID0gMDsKLSAgICAgICAgICAgIG4gPSBuLT50cmF2ZXJzZVByZXZpb3VzTm9kZVBvc3RPcmRlcihz
dGFydEJsb2NrKTsKKyAgICAgICAgICAgIG4gPSBOb2RlVHJhdmVyc2FsOjpwcmV2aW91c1Bvc3RP
cmRlcihuLCBzdGFydEJsb2NrKTsKICAgICAgICAgfSBlbHNlIGlmIChlZGl0aW5nSWdub3Jlc0Nv
bnRlbnQobikgfHwgaXNUYWJsZUVsZW1lbnQobikpIHsKICAgICAgICAgICAgIG5vZGUgPSBuOwog
ICAgICAgICAgICAgdHlwZSA9IFBvc2l0aW9uOjpQb3NpdGlvbklzQmVmb3JlQW5jaG9yOwotICAg
ICAgICAgICAgbiA9IG4tPnByZXZpb3VzU2libGluZygpID8gbi0+cHJldmlvdXNTaWJsaW5nKCkg
OiBuLT50cmF2ZXJzZVByZXZpb3VzTm9kZVBvc3RPcmRlcihzdGFydEJsb2NrKTsKKyAgICAgICAg
ICAgIG4gPSBuLT5wcmV2aW91c1NpYmxpbmcoKSA/IG4tPnByZXZpb3VzU2libGluZygpIDogTm9k
ZVRyYXZlcnNhbDo6cHJldmlvdXNQb3N0T3JkZXIobiwgc3RhcnRCbG9jayk7CiAgICAgICAgIH0g
ZWxzZQotICAgICAgICAgICAgbiA9IG4tPnRyYXZlcnNlUHJldmlvdXNOb2RlUG9zdE9yZGVyKHN0
YXJ0QmxvY2spOworICAgICAgICAgICAgbiA9IE5vZGVUcmF2ZXJzYWw6OnByZXZpb3VzUG9zdE9y
ZGVyKG4sIHN0YXJ0QmxvY2spOwogICAgIH0KIAogICAgIGlmICh0eXBlID09IFBvc2l0aW9uOjpQ
b3NpdGlvbklzT2Zmc2V0SW5BbmNob3IpIHsKQEAgLTExOTYsMTkgKzExOTcsMTkgQEAgVmlzaWJs
ZVBvc2l0aW9uIGVuZE9mUGFyYWdyYXBoKGNvbnN0IFZpcwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIGlmIChib3VuZGFyeUNyb3NzaW5nUnVsZSA9PSBDYW5Ta2lwT3ZlckVkaXRpbmdCb3Vu
ZGFyeSkgewogICAgICAgICAgICAgd2hpbGUgKG4gJiYgbi0+cmVuZGVyZXJJc0VkaXRhYmxlKCkg
IT0gc3RhcnROb2RlLT5yZW5kZXJlcklzRWRpdGFibGUoKSkKLSAgICAgICAgICAgICAgICBuID0g
bi0+dHJhdmVyc2VOZXh0Tm9kZShzdGF5SW5zaWRlQmxvY2spOworICAgICAgICAgICAgICAgIG4g
PSBOb2RlVHJhdmVyc2FsOjpuZXh0KG4sIHN0YXlJbnNpZGVCbG9jayk7CiAgICAgICAgICAgICBp
ZiAoIW4gfHwgIW4tPmlzRGVzY2VuZGFudE9mKGhpZ2hlc3RSb290KSkKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQogCiAgICAgICAgIFJlbmRlck9iamVjdCAqciA9IG4tPnJlbmRl
cmVyKCk7CiAgICAgICAgIGlmICghcikgewotICAgICAgICAgICAgbiA9IG4tPnRyYXZlcnNlTmV4
dE5vZGUoc3RheUluc2lkZUJsb2NrKTsKKyAgICAgICAgICAgIG4gPSBOb2RlVHJhdmVyc2FsOjpu
ZXh0KG4sIHN0YXlJbnNpZGVCbG9jayk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
fQogICAgICAgICBSZW5kZXJTdHlsZSAqc3R5bGUgPSByLT5zdHlsZSgpOwogICAgICAgICBpZiAo
c3R5bGUtPnZpc2liaWxpdHkoKSAhPSBWSVNJQkxFKSB7Ci0gICAgICAgICAgICBuID0gbi0+dHJh
dmVyc2VOZXh0Tm9kZShzdGF5SW5zaWRlQmxvY2spOworICAgICAgICAgICAgbiA9IE5vZGVUcmF2
ZXJzYWw6Om5leHQobiwgc3RheUluc2lkZUJsb2NrKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICB9CiAgICAgICAgIApAQCAtMTIzMCwxMyArMTIzMSwxMyBAQCBWaXNpYmxlUG9zaXRp
b24gZW5kT2ZQYXJhZ3JhcGgoY29uc3QgVmlzCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBu
b2RlID0gbjsKICAgICAgICAgICAgIG9mZnNldCA9IHItPmNhcmV0TWF4T2Zmc2V0KCk7Ci0gICAg
ICAgICAgICBuID0gbi0+dHJhdmVyc2VOZXh0Tm9kZShzdGF5SW5zaWRlQmxvY2spOworICAgICAg
ICAgICAgbiA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobiwgc3RheUluc2lkZUJsb2NrKTsKICAgICAg
ICAgfSBlbHNlIGlmIChlZGl0aW5nSWdub3Jlc0NvbnRlbnQobikgfHwgaXNUYWJsZUVsZW1lbnQo
bikpIHsKICAgICAgICAgICAgIG5vZGUgPSBuOwogICAgICAgICAgICAgdHlwZSA9IFBvc2l0aW9u
OjpQb3NpdGlvbklzQWZ0ZXJBbmNob3I7Ci0gICAgICAgICAgICBuID0gbi0+dHJhdmVyc2VOZXh0
U2libGluZyhzdGF5SW5zaWRlQmxvY2spOworICAgICAgICAgICAgbiA9IE5vZGVUcmF2ZXJzYWw6
Om5leHRTaWJsaW5nKG4sIHN0YXlJbnNpZGVCbG9jayk7CiAgICAgICAgIH0gZWxzZQotICAgICAg
ICAgICAgbiA9IG4tPnRyYXZlcnNlTmV4dE5vZGUoc3RheUluc2lkZUJsb2NrKTsKKyAgICAgICAg
ICAgIG4gPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG4sIHN0YXlJbnNpZGVCbG9jayk7CiAgICAgfQog
CiAgICAgaWYgKHR5cGUgPT0gUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvcikKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRvck1hYy5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9FZGl0b3JNYWMubW0JKHJldmlzaW9uIDEzNzEw
OCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRvck1hYy5tbQkod29ya2luZyBj
b3B5KQpAQCAtMzksNiArMzksNyBAQAogI2ltcG9ydCAiSFRNTENvbnZlcnRlci5oIgogI2ltcG9y
dCAiSFRNTE5hbWVzLmgiCiAjaW1wb3J0ICJMZWdhY3lXZWJBcmNoaXZlLmgiCisjaW1wb3J0ICJO
b2RlVHJhdmVyc2FsLmgiCiAjaW1wb3J0ICJQYXN0ZWJvYXJkLmgiCiAjaW1wb3J0ICJQYXN0ZWJv
YXJkU3RyYXRlZ3kuaCIKICNpbXBvcnQgIlBsYXRmb3JtU3RyYXRlZ2llcy5oIgpAQCAtMTY4LDcg
KzE2OSw3IEBAIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBFZGl0b3I6OmZvbnRGb3JTZWwKICAgICAg
ICAgTm9kZSogcGFzdEVuZCA9IHJhbmdlLT5wYXN0TGFzdE5vZGUoKTsKICAgICAgICAgLy8gSW4g
dGhlIGxvb3AgYmVsb3csIG4gc2hvdWxkIGV2ZW50dWFsbHkgbWF0Y2ggcGFzdEVuZCBhbmQgbm90
IGJlY29tZSBuaWwsIGJ1dCB3ZSd2ZSBzZWVuIGF0IGxlYXN0IG9uZQogICAgICAgICAvLyB1bnJl
cHJvZHVjaWJsZSBjYXNlIHdoZXJlIHRoaXMgZGlkbid0IGhhcHBlbiwgc28gY2hlY2sgZm9yIG51
bGwgYWxzby4KLSAgICAgICAgZm9yIChOb2RlKiBub2RlID0gc3RhcnROb2RlOyBub2RlICYmIG5v
ZGUgIT0gcGFzdEVuZDsgbm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoKSkgeworICAgICAg
ICBmb3IgKE5vZGUqIG5vZGUgPSBzdGFydE5vZGU7IG5vZGUgJiYgbm9kZSAhPSBwYXN0RW5kOyBu
b2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dChub2RlKSkgewogICAgICAgICAgICAgUmVuZGVyT2Jq
ZWN0KiByZW5kZXJlciA9IG5vZGUtPnJlbmRlcmVyKCk7CiAgICAgICAgICAgICBpZiAoIXJlbmRl
cmVyKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MQ29sbGVjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MQ29sbGVjdGlvbi5jcHAJKHJldmlzaW9uIDEzNzEwOCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTENvbGxlY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAj
aW5jbHVkZSAiSFRNTE9wdGlvbkVsZW1lbnQuaCIKICNpbmNsdWRlICJOb2RlTGlzdC5oIgogI2lu
Y2x1ZGUgIk5vZGVSYXJlRGF0YS5oIgorI2luY2x1ZGUgIk5vZGVUcmF2ZXJzYWwuaCIKIAogI2lm
IEVOQUJMRShNSUNST0RBVEEpCiAjaW5jbHVkZSAiSFRNTFByb3BlcnRpZXNDb2xsZWN0aW9uLmgi
CkBAIC0yNjEsOSArMjYyLDkgQEAgdGVtcGxhdGU8Ym9vbCBmb3J3YXJkPgogc3RhdGljIE5vZGUq
IG5leHROb2RlKE5vZGUqIGJhc2UsIE5vZGUqIHByZXZpb3VzLCBib29sIG9ubHlJbmNsdWRlRGly
ZWN0Q2hpbGRyZW4pCiB7CiAgICAgaWYgKGZvcndhcmQpCi0gICAgICAgIHJldHVybiBvbmx5SW5j
bHVkZURpcmVjdENoaWxkcmVuID8gcHJldmlvdXMtPm5leHRTaWJsaW5nKCkgOiBwcmV2aW91cy0+
dHJhdmVyc2VOZXh0Tm9kZShiYXNlKTsKKyAgICAgICAgcmV0dXJuIG9ubHlJbmNsdWRlRGlyZWN0
Q2hpbGRyZW4gPyBwcmV2aW91cy0+bmV4dFNpYmxpbmcoKSA6IE5vZGVUcmF2ZXJzYWw6Om5leHQo
cHJldmlvdXMsIGJhc2UpOwogICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIG9ubHlJbmNsdWRlRGly
ZWN0Q2hpbGRyZW4gPyBwcmV2aW91cy0+cHJldmlvdXNTaWJsaW5nKCkgOiBwcmV2aW91cy0+dHJh
dmVyc2VQcmV2aW91c05vZGUoYmFzZSk7CisgICAgICAgIHJldHVybiBvbmx5SW5jbHVkZURpcmVj
dENoaWxkcmVuID8gcHJldmlvdXMtPnByZXZpb3VzU2libGluZygpIDogTm9kZVRyYXZlcnNhbDo6
cHJldmlvdXMocHJldmlvdXMsIGJhc2UpOwogfQogCiBzdGF0aWMgaW5saW5lIE5vZGUqIGxhc3RE
ZXNjZW5kZW50KE5vZGUqIG5vZGUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVt
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNw
cAkocmV2aXNpb24gMTM3MTA4KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDYgKzQ2LDcgQEAKICNpbmNsdWRlICJIVE1MUGFyc2Vy
SWRpb21zLmgiCiAjaW5jbHVkZSAiSFRNTFRlbXBsYXRlRWxlbWVudC5oIgogI2luY2x1ZGUgIkhU
TUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50LmgiCisjaW5jbHVkZSAiTm9kZVRyYXZlcnNhbC5oIgog
I2luY2x1ZGUgIlJlbmRlcldvcmRCcmVhay5oIgogI2luY2x1ZGUgIlNjcmlwdEV2ZW50TGlzdGVu
ZXIuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgpAQCAtODE2LDEzICs4MTcsMTMgQEAgc3RhdGlj
IHZvaWQgc2V0SGFzRGlyQXV0b0ZsYWdSZWN1cnNpdmVseQogICAgICAgICBpZiAoZWxlbWVudEFm
ZmVjdHNEaXJlY3Rpb25hbGl0eShub2RlKSkgewogICAgICAgICAgICAgaWYgKG5vZGUgPT0gbGFz
dE5vZGUpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgbm9kZSA9IG5vZGUt
PnRyYXZlcnNlTmV4dFNpYmxpbmcoZmlyc3ROb2RlKTsKKyAgICAgICAgICAgIG5vZGUgPSBOb2Rl
VHJhdmVyc2FsOjpuZXh0U2libGluZyhub2RlLCBmaXJzdE5vZGUpOwogICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgIH0KICAgICAgICAgbm9kZS0+c2V0U2VsZk9yQW5jZXN0b3JIYXNEaXJB
dXRvQXR0cmlidXRlKGZsYWcpOwogICAgICAgICBpZiAobm9kZSA9PSBsYXN0Tm9kZSkKICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgbm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoZmly
c3ROb2RlKTsKKyAgICAgICAgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9kZSwgZmlyc3RO
b2RlKTsKICAgICB9CiB9CiAKQEAgLTg2NCw3ICs4NjUsNyBAQCBUZXh0RGlyZWN0aW9uIEhUTUxF
bGVtZW50OjpkaXJlY3Rpb25hbGl0CiAgICAgICAgIC8vIFNraXAgYmRpLCBzY3JpcHQsIHN0eWxl
IGFuZCB0ZXh0IGZvcm0gY29udHJvbHMuCiAgICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShu
b2RlLT5ub2RlTmFtZSgpLCAiYmRpIikgfHwgbm9kZS0+aGFzVGFnTmFtZShzY3JpcHRUYWcpIHx8
IG5vZGUtPmhhc1RhZ05hbWUoc3R5bGVUYWcpIAogICAgICAgICAgICAgfHwgKG5vZGUtPmlzRWxl
bWVudE5vZGUoKSAmJiB0b0VsZW1lbnQobm9kZSktPmlzVGV4dEZvcm1Db250cm9sKCkpKSB7Ci0g
ICAgICAgICAgICBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0U2libGluZyh0aGlzKTsKKyAgICAg
ICAgICAgIG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0U2libGluZyhub2RlLCB0aGlzKTsKICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKQEAgLTg3Miw3ICs4NzMsNyBAQCBUZXh0
RGlyZWN0aW9uIEhUTUxFbGVtZW50OjpkaXJlY3Rpb25hbGl0CiAgICAgICAgIGlmIChub2RlLT5p
c0VsZW1lbnROb2RlKCkpIHsKICAgICAgICAgICAgIEF0b21pY1N0cmluZyBkaXJBdHRyaWJ1dGVW
YWx1ZSA9IHRvRWxlbWVudChub2RlKS0+ZmFzdEdldEF0dHJpYnV0ZShkaXJBdHRyKTsKICAgICAg
ICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShkaXJBdHRyaWJ1dGVWYWx1ZSwgInJ0bCIpIHx8
IGVxdWFsSWdub3JpbmdDYXNlKGRpckF0dHJpYnV0ZVZhbHVlLCAibHRyIikgfHwgZXF1YWxJZ25v
cmluZ0Nhc2UoZGlyQXR0cmlidXRlVmFsdWUsICJhdXRvIikpIHsKLSAgICAgICAgICAgICAgICBu
b2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0U2libGluZyh0aGlzKTsKKyAgICAgICAgICAgICAgICBu
b2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dFNpYmxpbmcobm9kZSwgdGhpcyk7CiAgICAgICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTg4Niw3ICs4ODcs
NyBAQCBUZXh0RGlyZWN0aW9uIEhUTUxFbGVtZW50OjpkaXJlY3Rpb25hbGl0CiAgICAgICAgICAg
ICAgICAgcmV0dXJuICh0ZXh0RGlyZWN0aW9uID09IFdURjo6VW5pY29kZTo6TGVmdFRvUmlnaHQp
ID8gTFRSIDogUlRMOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIG5vZGUgPSBu
b2RlLT50cmF2ZXJzZU5leHROb2RlKHRoaXMpOworICAgICAgICBub2RlID0gTm9kZVRyYXZlcnNh
bDo6bmV4dChub2RlLCB0aGlzKTsKICAgICB9CiAgICAgaWYgKHN0cm9uZ0RpcmVjdGlvbmFsaXR5
VGV4dE5vZGUpCiAgICAgICAgICpzdHJvbmdEaXJlY3Rpb25hbGl0eVRleHROb2RlID0gMDsKQEAg
LTkzMyw4ICs5MzQsOCBAQCB2b2lkIEhUTUxFbGVtZW50OjpjYWxjdWxhdGVBbmRBZGp1c3REaXJl
CiB2b2lkIEhUTUxFbGVtZW50OjphZGp1c3REaXJlY3Rpb25hbGl0eUlmTmVlZGVkQWZ0ZXJDaGls
ZHJlbkNoYW5nZWQoTm9kZSogYmVmb3JlQ2hhbmdlLCBpbnQgY2hpbGRDb3VudERlbHRhKQogewog
ICAgIGlmICgoIWRvY3VtZW50KCkgfHwgZG9jdW1lbnQoKS0+cmVuZGVyZXIoKSkgJiYgY2hpbGRD
b3VudERlbHRhIDwgMCkgewotICAgICAgICBOb2RlKiBub2RlID0gYmVmb3JlQ2hhbmdlID8gYmVm
b3JlQ2hhbmdlLT50cmF2ZXJzZU5leHRTaWJsaW5nKCkgOiAwOwotICAgICAgICBmb3IgKGludCBj
b3VudGVyID0gMDsgbm9kZSAmJiBjb3VudGVyIDwgY2hpbGRDb3VudERlbHRhOyBjb3VudGVyKyss
IG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHRTaWJsaW5nKCkpIHsKKyAgICAgICAgTm9kZSogbm9k
ZSA9IGJlZm9yZUNoYW5nZSA/IE5vZGVUcmF2ZXJzYWw6Om5leHRTaWJsaW5nKGJlZm9yZUNoYW5n
ZSkgOiAwOworICAgICAgICBmb3IgKGludCBjb3VudGVyID0gMDsgbm9kZSAmJiBjb3VudGVyIDwg
Y2hpbGRDb3VudERlbHRhOyBjb3VudGVyKyssIG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0U2li
bGluZyhub2RlKSkgewogICAgICAgICAgICAgaWYgKGVsZW1lbnRBZmZlY3RzRGlyZWN0aW9uYWxp
dHkobm9kZSkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKQEAgLTk0NSw5ICs5NDYsOSBA
QCB2b2lkIEhUTUxFbGVtZW50OjphZGp1c3REaXJlY3Rpb25hbGl0eUlmCiAgICAgaWYgKCFzZWxm
T3JBbmNlc3Rvckhhc0RpckF1dG9BdHRyaWJ1dGUoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
Tm9kZSogb2xkTWFya2VkTm9kZSA9IGJlZm9yZUNoYW5nZSA/IGJlZm9yZUNoYW5nZS0+dHJhdmVy
c2VOZXh0U2libGluZygpIDogMDsKKyAgICBOb2RlKiBvbGRNYXJrZWROb2RlID0gYmVmb3JlQ2hh
bmdlID8gTm9kZVRyYXZlcnNhbDo6bmV4dFNpYmxpbmcoYmVmb3JlQ2hhbmdlKSA6IDA7CiAgICAg
d2hpbGUgKG9sZE1hcmtlZE5vZGUgJiYgZWxlbWVudEFmZmVjdHNEaXJlY3Rpb25hbGl0eShvbGRN
YXJrZWROb2RlKSkKLSAgICAgICAgb2xkTWFya2VkTm9kZSA9IG9sZE1hcmtlZE5vZGUtPnRyYXZl
cnNlTmV4dFNpYmxpbmcodGhpcyk7CisgICAgICAgIG9sZE1hcmtlZE5vZGUgPSBOb2RlVHJhdmVy
c2FsOjpuZXh0U2libGluZyhvbGRNYXJrZWROb2RlLCB0aGlzKTsKICAgICBpZiAob2xkTWFya2Vk
Tm9kZSkKICAgICAgICAgc2V0SGFzRGlyQXV0b0ZsYWdSZWN1cnNpdmVseShvbGRNYXJrZWROb2Rl
LCBmYWxzZSk7CiAKQEAgLTEwMjgsNyArMTAyOSw3IEBAIHZvaWQgSFRNTEVsZW1lbnQ6OmdldEl0
ZW1SZWZFbGVtZW50cyhWZWMKICAgICAgICAgICAgIHJvb3ROb2RlID0gcGFyZW50OwogICAgIH0K
IAotICAgIGZvciAoTm9kZSogY3VycmVudCA9IHJvb3ROb2RlOyBjdXJyZW50OyBjdXJyZW50ID0g
Y3VycmVudC0+dHJhdmVyc2VOZXh0Tm9kZShyb290Tm9kZSkpIHsKKyAgICBmb3IgKE5vZGUqIGN1
cnJlbnQgPSByb290Tm9kZTsgY3VycmVudDsgY3VycmVudCA9IGN1cnJlbnQtPk5vZGVUcmF2ZXJz
YWw6Om5leHQocm9vdE5vZGUpKSB7CiAgICAgICAgIGlmICghY3VycmVudC0+aXNIVE1MRWxlbWVu
dCgpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIEhUTUxFbGVtZW50KiBlbGVtZW50
ID0gdG9IVE1MRWxlbWVudChjdXJyZW50KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TEZpZWxkU2V0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MRmllbGRTZXRFbGVtZW50LmNwcAkocmV2aXNpb24gMTM3MTA4KQorKysgU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MRmllbGRTZXRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiAr
MjksNyBAQAogI2luY2x1ZGUgIkhUTUxMZWdlbmRFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5h
bWVzLmgiCiAjaW5jbHVkZSAiSFRNTE9iamVjdEVsZW1lbnQuaCIKKyNpbmNsdWRlICJOb2RlVHJh
dmVyc2FsLmgiCiAjaW5jbHVkZSAiUmVuZGVyRmllbGRzZXQuaCIKICNpbmNsdWRlIDx3dGYvU3Rk
TGliRXh0cmFzLmg+CiAKQEAgLTUwLDcgKzUxLDcgQEAgUGFzc1JlZlB0cjxIVE1MRmllbGRTZXRF
bGVtZW50PiBIVE1MRmllbAogCiB2b2lkIEhUTUxGaWVsZFNldEVsZW1lbnQ6OmludmFsaWRhdGVE
aXNhYmxlZFN0YXRlVW5kZXIoRWxlbWVudCogYmFzZSkKIHsKLSAgICBmb3IgKE5vZGUqIG5vZGUg
PSBiYXNlLT5maXJzdENoaWxkKCk7IG5vZGU7IG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHROb2Rl
KGJhc2UpKSB7CisgICAgZm9yIChOb2RlKiBub2RlID0gYmFzZS0+Zmlyc3RDaGlsZCgpOyBub2Rl
OyBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dChub2RlLCBiYXNlKSkgewogICAgICAgICBpZiAo
bm9kZS0+aXNFbGVtZW50Tm9kZSgpICYmIHRvRWxlbWVudChub2RlKS0+aXNGb3JtQ29udHJvbEVs
ZW1lbnQoKSkKICAgICAgICAgICAgIHN0YXRpY19jYXN0PEhUTUxGb3JtQ29udHJvbEVsZW1lbnQq
Pihub2RlKS0+YW5jZXN0b3JEaXNhYmxlZFN0YXRlV2FzQ2hhbmdlZCgpOwogICAgIH0KQEAgLTEx
Miw3ICsxMTMsNyBAQCB2b2lkIEhUTUxGaWVsZFNldEVsZW1lbnQ6OnJlZnJlc2hFbGVtZW50CiAK
ICAgICBtX2Fzc29jaWF0ZWRFbGVtZW50cy5jbGVhcigpOwogCi0gICAgZm9yIChOb2RlKiBub2Rl
ID0gZmlyc3RDaGlsZCgpOyBub2RlOyBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSh0aGlz
KSkgeworICAgIGZvciAoTm9kZSogbm9kZSA9IGZpcnN0Q2hpbGQoKTsgbm9kZTsgbm9kZSA9IE5v
ZGVUcmF2ZXJzYWw6Om5leHQobm9kZSwgdGhpcykpIHsKICAgICAgICAgaWYgKCFub2RlLT5pc0Vs
ZW1lbnROb2RlKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIApJbmRleDogU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTEZvcm1FbGVtZW50LmNwcAkocmV2aXNpb24gMTM3MTA4KQorKysgU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw2ICs0
Nyw3IEBACiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3Ry
eS5oIgogI2luY2x1ZGUgIk5vZGVSZW5kZXJpbmdDb250ZXh0LmgiCisjaW5jbHVkZSAiTm9kZVRy
YXZlcnNhbC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJSZW5kZXJUZXh0Q29udHJv
bC5oIgogI2luY2x1ZGUgIlNjcmlwdEV2ZW50TGlzdGVuZXIuaCIKQEAgLTUyMiw5ICs1MjMsOSBA
QCB1bnNpZ25lZCBIVE1MRm9ybUVsZW1lbnQ6OmZvcm1FbGVtZW50SW5kCiAgICAgLy8gdGhlIGZv
cm0ncyB0cmVlIG9mIGNoaWxkcmVuOyB3ZSBkb24ndCB3YW50IHRvIHdhbGsgdGhlIGVudGlyZSB0
cmVlIGluIHRoYXQKICAgICAvLyBjb21tb24gY2FzZSB0aGF0IG9jY3VycyBkdXJpbmcgcGFyc2lu
ZzsgaW5zdGVhZCB3ZSdsbCBqdXN0IHJldHVybiBhIHZhbHVlCiAgICAgLy8gdGhhdCBzYXlzICJh
ZGQgdGhpcyBmb3JtIGVsZW1lbnQgdG8gdGhlIGVuZCBvZiB0aGUgYXJyYXkiLgotICAgIGlmIChl
bGVtZW50LT50cmF2ZXJzZU5leHROb2RlKHRoaXMpKSB7CisgICAgaWYgKE5vZGVUcmF2ZXJzYWw6
Om5leHQoZWxlbWVudCwgdGhpcykpIHsKICAgICAgICAgdW5zaWduZWQgaSA9IG1fYXNzb2NpYXRl
ZEVsZW1lbnRzQmVmb3JlSW5kZXg7Ci0gICAgICAgIGZvciAoTm9kZSogbm9kZSA9IHRoaXM7IG5v
ZGU7IG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKHRoaXMpKSB7CisgICAgICAgIGZvciAo
Tm9kZSogbm9kZSA9IHRoaXM7IG5vZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUs
IHRoaXMpKSB7CiAgICAgICAgICAgICBpZiAobm9kZSA9PSBlbGVtZW50KSB7CiAgICAgICAgICAg
ICAgICAgKyttX2Fzc29jaWF0ZWRFbGVtZW50c0FmdGVySW5kZXg7CiAgICAgICAgICAgICAgICAg
cmV0dXJuIGk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxMYWJlbEVsZW1lbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTExhYmVsRWxlbWVudC5jcHAJ
KHJldmlzaW9uIDEzNzEwOCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTExhYmVsRWxlbWVu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJFdmVudE5h
bWVzLmgiCiAjaW5jbHVkZSAiRm9ybUFzc29jaWF0ZWRFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRN
TE5hbWVzLmgiCisjaW5jbHVkZSAiTm9kZVRyYXZlcnNhbC5oIgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKQEAgLTc1LDcgKzc2LDcgQEAgTGFiZWxhYmxlRWxlbWVudCogSFRNTExhYmVsRWxlbWVu
dDo6Y29udAogICAgICAgICAvLyBwZXIgaHR0cDovL2Rldi53My5vcmcvaHRtbDUvc3BlYy9PdmVy
dmlldy5odG1sI3RoZS1sYWJlbC1lbGVtZW50CiAgICAgICAgIC8vIHRoZSBmb3JtIGVsZW1lbnQg
bXVzdCBiZSAibGFiZWxhYmxlIGZvcm0tYXNzb2NpYXRlZCBlbGVtZW50Ii4KICAgICAgICAgTm9k
ZSogbm9kZSA9IHRoaXM7Ci0gICAgICAgIHdoaWxlICgobm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4
dE5vZGUodGhpcykpKSB7CisgICAgICAgIHdoaWxlICgobm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5l
eHQobm9kZSwgdGhpcykpKSB7CiAgICAgICAgICAgICBpZiAoTGFiZWxhYmxlRWxlbWVudCogZWxl
bWVudCA9IG5vZGVBc0xhYmVsYWJsZUVsZW1lbnQobm9kZSkpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIGVsZW1lbnQ7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTExl
Z2VuZEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTExl
Z2VuZEVsZW1lbnQuY3BwCShyZXZpc2lvbiAxMzcxMDgpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxMZWdlbmRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAog
I2luY2x1ZGUgIkhUTUxGaWVsZFNldEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MRm9ybUNvbnRy
b2xFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiTm9kZVRyYXZl
cnNhbC5oIgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KIAogbmFtZXNwYWNlIFdlYkNv
cmUgewpAQCAtNTgsNyArNTksNyBAQCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiBIVE1MTGVnZW5k
RWxlbWVuCiAgICAgLy8gRmluZCBmaXJzdCBmb3JtIGVsZW1lbnQgaW5zaWRlIHRoZSBmaWVsZHNl
dCB0aGF0IGlzIG5vdCBhIGxlZ2VuZCBlbGVtZW50LgogICAgIC8vIEZJWE1FOiBTaG91bGQgd2Ug
Y29uc2lkZXIgdGFiaW5kZXg/CiAgICAgTm9kZSogbm9kZSA9IGZpZWxkc2V0OwotICAgIHdoaWxl
ICgobm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoZmllbGRzZXQpKSkgeworICAgIHdoaWxl
ICgobm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9kZSwgZmllbGRzZXQpKSkgewogICAgICAg
ICBpZiAobm9kZS0+aXNFbGVtZW50Tm9kZSgpKSB7CiAgICAgICAgICAgICBFbGVtZW50KiBlbGVt
ZW50ID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUpOwogICAgICAgICAgICAgaWYgKGVsZW1l
bnQtPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxNYXBFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxN
YXBFbGVtZW50LmNwcAkocmV2aXNpb24gMTM3MTA4KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MTWFwRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNs
dWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCiAjaW5jbHVkZSAi
SW50U2l6ZS5oIgorI2luY2x1ZGUgIk5vZGVUcmF2ZXJzYWwuaCIKICNpbmNsdWRlICJSZW5kZXJP
YmplY3QuaCIKIAogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKQEAgLTYyLDcgKzYzLDcgQEAgYm9vbCBI
VE1MTWFwRWxlbWVudDo6bWFwTW91c2VFdmVudChMYXlvdQogewogICAgIEhUTUxBcmVhRWxlbWVu
dCogZGVmYXVsdEFyZWEgPSAwOwogICAgIE5vZGUgKm5vZGUgPSB0aGlzOwotICAgIHdoaWxlICgo
bm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUodGhpcykpKSB7CisgICAgd2hpbGUgKChub2Rl
ID0gTm9kZVRyYXZlcnNhbDo6bmV4dChub2RlLCB0aGlzKSkpIHsKICAgICAgICAgaWYgKG5vZGUt
Pmhhc1RhZ05hbWUoYXJlYVRhZykpIHsKICAgICAgICAgICAgIEhUTUxBcmVhRWxlbWVudCogYXJl
YUVsdCA9IHN0YXRpY19jYXN0PEhUTUxBcmVhRWxlbWVudCo+KG5vZGUpOwogICAgICAgICAgICAg
aWYgKGFyZWFFbHQtPmlzRGVmYXVsdCgpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxOYW1lQ29sbGVjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MTmFtZUNvbGxlY3Rpb24uY3BwCShyZXZpc2lvbiAxMzcxMDgpCisrKyBTb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxOYW1lQ29sbGVjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4
LDcgQEAKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJIVE1MT2JqZWN0RWxlbWVu
dC5oIgogI2luY2x1ZGUgIk5vZGVSYXJlRGF0YS5oIgorI2luY2x1ZGUgIk5vZGVUcmF2ZXJzYWwu
aCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC01Nyw5ICs1OCw5IEBAIEVsZW1lbnQqIEhU
TUxOYW1lQ29sbGVjdGlvbjo6dmlydHVhbEl0ZW0KICAgICBpZiAoIXByZXZpb3VzKQogICAgICAg
ICBjdXJyZW50ID0gb3duZXJOb2RlKCktPmZpcnN0Q2hpbGQoKTsKICAgICBlbHNlCi0gICAgICAg
IGN1cnJlbnQgPSBwcmV2aW91cy0+dHJhdmVyc2VOZXh0Tm9kZShvd25lck5vZGUoKSk7CisgICAg
ICAgIGN1cnJlbnQgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KHByZXZpb3VzLCBvd25lck5vZGUoKSk7
CiAKLSAgICBmb3IgKDsgY3VycmVudDsgY3VycmVudCA9IGN1cnJlbnQtPnRyYXZlcnNlTmV4dE5v
ZGUob3duZXJOb2RlKCkpKSB7CisgICAgZm9yICg7IGN1cnJlbnQ7IGN1cnJlbnQgPSBOb2RlVHJh
dmVyc2FsOjpuZXh0KGN1cnJlbnQsIG93bmVyTm9kZSgpKSkgewogICAgICAgICBpZiAoIWN1cnJl
bnQtPmlzRWxlbWVudE5vZGUoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBFbGVt
ZW50KiBlID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KGN1cnJlbnQpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5jcHAJKHJldmlzaW9uIDEzNzEwOCkKKysrIFNv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9wdGlvbkVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSAiSFRNTFNlbGVjdEVsZW1lbnQuaCIKICNpbmNsdWRl
ICJOb2RlUmVuZGVyU3R5bGUuaCIKICNpbmNsdWRlICJOb2RlUmVuZGVyaW5nQ29udGV4dC5oIgor
I2luY2x1ZGUgIk5vZGVUcmF2ZXJzYWwuaCIKICNpbmNsdWRlICJSZW5kZXJNZW51TGlzdC5oIgog
I2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCiAjaW5jbHVkZSAiU2NyaXB0RWxlbWVudC5oIgpAQCAt
MzgzLDkgKzM4NCw5IEBAIFN0cmluZyBIVE1MT3B0aW9uRWxlbWVudDo6Y29sbGVjdE9wdGlvbkkK
ICAgICAgICAgICAgIHRleHQuYXBwZW5kKG5vZGUtPm5vZGVWYWx1ZSgpKTsKICAgICAgICAgLy8g
VGV4dCBub2RlcyBpbnNpZGUgc2NyaXB0IGVsZW1lbnRzIGFyZSBub3QgcGFydCBvZiB0aGUgb3B0
aW9uIHRleHQuCiAgICAgICAgIGlmIChub2RlLT5pc0VsZW1lbnROb2RlKCkgJiYgdG9TY3JpcHRF
bGVtZW50KHRvRWxlbWVudChub2RlKSkpCi0gICAgICAgICAgICBub2RlID0gbm9kZS0+dHJhdmVy
c2VOZXh0U2libGluZyh0aGlzKTsKKyAgICAgICAgICAgIG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpu
ZXh0U2libGluZyhub2RlLCB0aGlzKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgbm9kZSA9
IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUodGhpcyk7CisgICAgICAgICAgICBub2RlID0gTm9kZVRy
YXZlcnNhbDo6bmV4dChub2RlLCB0aGlzKTsKICAgICB9CiAgICAgcmV0dXJuIHRleHQudG9TdHJp
bmcoKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFByb3BlcnRpZXNDb2xsZWN0
aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQcm9wZXJ0aWVz
Q29sbGVjdGlvbi5jcHAJKHJldmlzaW9uIDEzNzEwOCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTFByb3BlcnRpZXNDb2xsZWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzYsNyArNzYs
OCBAQCBzdGF0aWMgTm9kZSogbmV4dE5vZGVXaXRoUHJvcGVydHkoTm9kZSogCiAgICAgLy8gdGhh
dCBkZWNsYXJlcyB0aGUgcHJvcGVydHkuIElmIHRoZSBwcm9wZXJ0eSBoYXMgYW4gaXRlbXNjb3Bl
IGF0dHJpYnV0ZSBzcGVjaWZpZWQgdGhlbiB3ZSBuZWVkCiAgICAgLy8gdG8gdHJhdmVyc2UgdGhl
IG5leHQgc2libGluZy4KICAgICByZXR1cm4gcHJldmlvdXMgPT0gb3duZXJOb2RlIHx8IChwcmV2
aW91cy0+aXNIVE1MRWxlbWVudCgpICYmICF0b0hUTUxFbGVtZW50KHByZXZpb3VzKS0+ZmFzdEhh
c0F0dHJpYnV0ZShpdGVtc2NvcGVBdHRyKSkKLSAgICAgICAgICAgID8gcHJldmlvdXMtPnRyYXZl
cnNlTmV4dE5vZGUocm9vdE5vZGUpIDogcHJldmlvdXMtPnRyYXZlcnNlTmV4dFNpYmxpbmcocm9v
dE5vZGUpOworICAgICAgICA/IHByZXZpb3VzLT5Ob2RlVHJhdmVyc2FsOjpuZXh0KHJvb3ROb2Rl
KQorICAgICAgICA6IHByZXZpb3VzLT5Ob2RlVHJhdmVyc2FsOjpuZXh0U2libGluZyhyb290Tm9k
ZSk7CiB9CiAKIEVsZW1lbnQqIEhUTUxQcm9wZXJ0aWVzQ29sbGVjdGlvbjo6dmlydHVhbEl0ZW1B
ZnRlcih1bnNpZ25lZCYgb2Zmc2V0SW5BcnJheSwgRWxlbWVudCogcHJldmlvdXNJdGVtKSBjb25z
dApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5jcHAJKHJldmlz
aW9uIDEzNzEwOCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00NSw2ICs0NSw3IEBACiAjaW5jbHVkZSAiTG9jYWxpemVkU3Ry
aW5ncy5oIgogI2luY2x1ZGUgIk1vdXNlRXZlbnQuaCIKICNpbmNsdWRlICJOb2RlUmVuZGVyaW5n
Q29udGV4dC5oIgorI2luY2x1ZGUgIk5vZGVUcmF2ZXJzYWwuaCIKICNpbmNsdWRlICJQYWdlLmgi
CiAjaW5jbHVkZSAiUmVuZGVyTGlzdEJveC5oIgogI2luY2x1ZGUgIlJlbmRlck1lbnVMaXN0Lmgi
CkBAIC03MzYsNyArNzM3LDcgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6cmVjYWxjTGlzdEl0
ZW1zKAogICAgIEhUTUxPcHRpb25FbGVtZW50KiBmaXJzdE9wdGlvbiA9IDA7CiAgICAgZm9yIChO
b2RlKiBjdXJyZW50Tm9kZSA9IHRoaXMtPmZpcnN0Q2hpbGQoKTsgY3VycmVudE5vZGU7KSB7CiAg
ICAgICAgIGlmICghY3VycmVudE5vZGUtPmlzSFRNTEVsZW1lbnQoKSkgewotICAgICAgICAgICAg
Y3VycmVudE5vZGUgPSBjdXJyZW50Tm9kZS0+dHJhdmVyc2VOZXh0U2libGluZyh0aGlzKTsKKyAg
ICAgICAgICAgIGN1cnJlbnROb2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dFNpYmxpbmcoY3VycmVu
dE5vZGUsIHRoaXMpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIApAQCAtNzc1
LDEyICs3NzYsMTIgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6cmVjYWxjTGlzdEl0ZW1zKAog
ICAgICAgICAgICAgbV9saXN0SXRlbXMuYXBwZW5kKGN1cnJlbnQpOwogCiAgICAgICAgIC8vIElu
IGNvbmZvcm1pbmcgSFRNTCBjb2RlLCBvbmx5IDxvcHRncm91cD4gYW5kIDxvcHRpb24+IHdpbGwg
YmUgZm91bmQKLSAgICAgICAgLy8gd2l0aGluIGEgPHNlbGVjdD4uIFdlIGNhbGwgdHJhdmVyc2VO
ZXh0U2libGluZyBzbyB0aGF0IHdlIG9ubHkgc3RlcAorICAgICAgICAvLyB3aXRoaW4gYSA8c2Vs
ZWN0Pi4gV2UgY2FsbCBOb2RlVHJhdmVyc2FsOjpuZXh0U2libGluZyBzbyB0aGF0IHdlIG9ubHkg
c3RlcAogICAgICAgICAvLyBpbnRvIHRob3NlIHRhZ3MgdGhhdCB3ZSBjaG9vc2UgdG8uIEZvciB3
ZWItY29tcGF0LCB3ZSBzaG91bGQgY29wZQogICAgICAgICAvLyB3aXRoIHRoZSBjYXNlIHdoZXJl
IG9kZCB0YWdzIGxpa2UgYSA8ZGl2PiBoYXZlIGJlZW4gYWRkZWQgYnV0IHdlCiAgICAgICAgIC8v
IGhhbmRsZSB0aGlzIGJlY2F1c2Ugc3VjaCB0YWdzIGhhdmUgYWxyZWFkeSBiZWVuIHJlbW92ZWQg
ZnJvbSB0aGUKICAgICAgICAgLy8gPHNlbGVjdD4ncyBzdWJ0cmVlIGF0IHRoaXMgcG9pbnQuCi0g
ICAgICAgIGN1cnJlbnROb2RlID0gY3VycmVudE5vZGUtPnRyYXZlcnNlTmV4dFNpYmxpbmcodGhp
cyk7CisgICAgICAgIGN1cnJlbnROb2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dFNpYmxpbmcoY3Vy
cmVudE5vZGUsIHRoaXMpOwogICAgIH0KIAogICAgIGlmICghZm91bmRTZWxlY3RlZCAmJiBtX3Np
emUgPD0gMSAmJiBmaXJzdE9wdGlvbiAmJiAhZmlyc3RPcHRpb24tPnNlbGVjdGVkKCkpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50
LmNwcAkocmV2aXNpb24gMTM3MTA4KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEZv
cm1Db250cm9sRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDcgQEAKICNp
bmNsdWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5j
bHVkZSAiTm9kZVJlbmRlcmluZ0NvbnRleHQuaCIKKyNpbmNsdWRlICJOb2RlVHJhdmVyc2FsLmgi
CiAjaW5jbHVkZSAiUmVuZGVyQm94LmgiCiAjaW5jbHVkZSAiUmVuZGVyVGV4dENvbnRyb2wuaCIK
ICNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgpAQCAtNDYyLDcgKzQ2Myw3IEBAIFBhc3NSZWZQdHI8
UmFuZ2U+IEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGUKICAgICBpbnQgb2Zmc2V0ID0gMDsKICAgICBO
b2RlKiBzdGFydE5vZGUgPSAwOwogICAgIE5vZGUqIGVuZE5vZGUgPSAwOwotICAgIGZvciAoTm9k
ZSogbm9kZSA9IGlubmVyVGV4dC0+Zmlyc3RDaGlsZCgpOyBub2RlOyBub2RlID0gbm9kZS0+dHJh
dmVyc2VOZXh0Tm9kZShpbm5lclRleHQpKSB7CisgICAgZm9yIChOb2RlKiBub2RlID0gaW5uZXJU
ZXh0LT5maXJzdENoaWxkKCk7IG5vZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUs
IGlubmVyVGV4dCkpIHsKICAgICAgICAgQVNTRVJUKCFub2RlLT5maXJzdENoaWxkKCkpOwogICAg
ICAgICBBU1NFUlQobm9kZS0+aXNUZXh0Tm9kZSgpIHx8IG5vZGUtPmhhc1RhZ05hbWUoYnJUYWcp
KTsKICAgICAgICAgaW50IGxlbmd0aCA9IG5vZGUtPmlzVGV4dE5vZGUoKSA/IGxhc3RPZmZzZXRJ
bk5vZGUobm9kZSkgOiAxOwpAQCAtNTYxLDcgKzU2Miw3IEBAIFN0cmluZyBIVE1MVGV4dEZvcm1D
b250cm9sRWxlbWVudDo6aW5uZXIKICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CiAKICAg
ICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsKLSAgICBmb3IgKE5vZGUqIG5vZGUgPSBpbm5lclRleHQ7
IG5vZGU7IG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKGlubmVyVGV4dCkpIHsKKyAgICBm
b3IgKE5vZGUqIG5vZGUgPSBpbm5lclRleHQ7IG5vZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpu
ZXh0KG5vZGUsIGlubmVyVGV4dCkpIHsKICAgICAgICAgaWYgKG5vZGUtPmhhc1RhZ05hbWUoYnJU
YWcpKQogICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChuZXdsaW5lQ2hhcmFjdGVyKTsKICAgICAg
ICAgZWxzZSBpZiAobm9kZS0+aXNUZXh0Tm9kZSgpKQpAQCAtNjA4LDcgKzYwOSw3IEBAIFN0cmlu
ZyBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6dmFsdWUKICAgICBnZXROZXh0U29mdEJyZWFr
KGxpbmUsIGJyZWFrTm9kZSwgYnJlYWtPZmZzZXQpOwogCiAgICAgU3RyaW5nQnVpbGRlciByZXN1
bHQ7Ci0gICAgZm9yIChOb2RlKiBub2RlID0gaW5uZXJUZXh0LT5maXJzdENoaWxkKCk7IG5vZGU7
IG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKGlubmVyVGV4dCkpIHsKKyAgICBmb3IgKE5v
ZGUqIG5vZGUgPSBpbm5lclRleHQtPmZpcnN0Q2hpbGQoKTsgbm9kZTsgbm9kZSA9IE5vZGVUcmF2
ZXJzYWw6Om5leHQobm9kZSwgaW5uZXJUZXh0KSkgewogICAgICAgICBpZiAobm9kZS0+aGFzVGFn
TmFtZShiclRhZykpCiAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKG5ld2xpbmVDaGFyYWN0ZXIp
OwogICAgICAgICBlbHNlIGlmIChub2RlLT5pc1RleHROb2RlKCkpIHsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2h0bWwvUmFkaW9JbnB1dFR5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2h0bWwvUmFkaW9JbnB1dFR5cGUuY3BwCShyZXZpc2lvbiAxMzcxMDgpCisrKyBTb3VyY2Uv
V2ViQ29yZS9odG1sL1JhZGlvSW5wdXRUeXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiAr
MjksNyBAQAogI2luY2x1ZGUgIktleWJvYXJkRXZlbnQuaCIKICNpbmNsdWRlICJMb2NhbGl6ZWRT
dHJpbmdzLmgiCiAjaW5jbHVkZSAiTW91c2VFdmVudC5oIgorI2luY2x1ZGUgIk5vZGVUcmF2ZXJz
YWwuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlNwYXRpYWxOYXZpZ2F0aW9u
LmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KQEAgLTg0LDcgKzg1LDcgQEAgdm9pZCBS
YWRpb0lucHV0VHlwZTo6aGFuZGxlS2V5ZG93bkV2ZW50KAogICAgIC8vIFdlIGNhbiBvbmx5IHN0
YXkgd2l0aGluIHRoZSBmb3JtJ3MgY2hpbGRyZW4gaWYgdGhlIGZvcm0gaGFzbid0IGJlZW4gZGVt
b3RlZCB0byBhIGxlYWYgYmVjYXVzZQogICAgIC8vIG9mIG1hbGZvcm1lZCBIVE1MLgogICAgIE5v
ZGUqIG5vZGUgPSBlbGVtZW50KCk7Ci0gICAgd2hpbGUgKChub2RlID0gKGZvcndhcmQgPyBub2Rl
LT50cmF2ZXJzZU5leHROb2RlKCkgOiBub2RlLT50cmF2ZXJzZVByZXZpb3VzTm9kZSgpKSkpIHsK
KyAgICB3aGlsZSAoKG5vZGUgPSAoZm9yd2FyZCA/IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9kZSkg
OiBOb2RlVHJhdmVyc2FsOjpwcmV2aW91cyhub2RlKSkpKSB7CiAgICAgICAgIC8vIE9uY2Ugd2Ug
ZW5jb3VudGVyIGEgZm9ybSBlbGVtZW50LCB3ZSBrbm93IHdlJ3JlIHRocm91Z2guCiAgICAgICAg
IGlmIChub2RlLT5oYXNUYWdOYW1lKGZvcm1UYWcpKQogICAgICAgICAgICAgYnJlYWs7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9Db250ZW50RGlzdHJpYnV0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0NvbnRlbnREaXN0cmlidXRvci5j
cHAJKHJldmlzaW9uIDEzNzEwOCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0NvbnRl
bnREaXN0cmlidXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNs
dWRlICJFbGVtZW50U2hhZG93LmgiCiAjaW5jbHVkZSAiSFRNTENvbnRlbnRFbGVtZW50LmgiCiAj
aW5jbHVkZSAiSFRNTFNoYWRvd0VsZW1lbnQuaCIKKyNpbmNsdWRlICJOb2RlVHJhdmVyc2FsLmgi
CiAjaW5jbHVkZSAiU2hhZG93Um9vdC5oIgogCiAKQEAgLTg0LDcgKzg1LDcgQEAgY29uc3QgVmVj
dG9yPEluc2VydGlvblBvaW50Kj4mIFNoYWRvd1JvbwogICAgIGlmICghc2hhZG93Um9vdC0+aGFz
SW5zZXJ0aW9uUG9pbnQoKSkKICAgICAgICAgcmV0dXJuIG1faW5zZXJ0aW9uUG9pbnRMaXN0Owog
Ci0gICAgZm9yIChOb2RlKiBub2RlID0gc2hhZG93Um9vdDsgbm9kZTsgbm9kZSA9IG5vZGUtPnRy
YXZlcnNlTmV4dE5vZGUoc2hhZG93Um9vdCkpIHsKKyAgICBmb3IgKE5vZGUqIG5vZGUgPSBzaGFk
b3dSb290OyBub2RlOyBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dChub2RlLCBzaGFkb3dSb290
KSkgewogICAgICAgICBpZiAobm9kZS0+aXNJbnNlcnRpb25Qb2ludCgpKQogICAgICAgICAgICAg
bV9pbnNlcnRpb25Qb2ludExpc3QuYXBwZW5kKHRvSW5zZXJ0aW9uUG9pbnQobm9kZSkpOwogICAg
IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50
LmNwcAkocmV2aXNpb24gMTM3MTA4KQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckRPTUFnZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzYsNiArNzYsNyBAQAogI2luY2x1
ZGUgIk11dGF0aW9uRXZlbnQuaCIKICNpbmNsdWRlICJOb2RlLmgiCiAjaW5jbHVkZSAiTm9kZUxp
c3QuaCIKKyNpbmNsdWRlICJOb2RlVHJhdmVyc2FsLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2lu
Y2x1ZGUgIlBhc3RlYm9hcmQuaCIKICNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgpAQCAtODQxLDcg
Kzg0Miw3IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnBlcmZvcm1TZWFyY2goRXIKICAgICAg
ICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIC8vIE1hbnVhbCBwbGFpbiB0ZXh0IHNlYXJjaC4K
LSAgICAgICAgd2hpbGUgKChub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZShkb2N1bWVudC0+
ZG9jdW1lbnRFbGVtZW50KCkpKSkgeworICAgICAgICB3aGlsZSAoKG5vZGUgPSBOb2RlVHJhdmVy
c2FsOjpuZXh0KG5vZGUsIGRvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQoKSkpKSB7CiAgICAgICAg
ICAgICBzd2l0Y2ggKG5vZGUtPm5vZGVUeXBlKCkpIHsKICAgICAgICAgICAgIGNhc2UgTm9kZTo6
VEVYVF9OT0RFOgogICAgICAgICAgICAgY2FzZSBOb2RlOjpDT01NRU5UX05PREU6CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yTWVtb3J5QWdlbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JNZW1vcnlBZ2VudC5jcHAJ
KHJldmlzaW9uIDEzNzEwOCkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JN
ZW1vcnlBZ2VudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDYgKzQ5LDcgQEAKICNpbmNsdWRl
ICJNZW1vcnlJbnN0cnVtZW50YXRpb25JbXBsLmgiCiAjaW5jbHVkZSAiTWVtb3J5VXNhZ2VTdXBw
b3J0LmgiCiAjaW5jbHVkZSAiTm9kZS5oIgorI2luY2x1ZGUgIk5vZGVUcmF2ZXJzYWwuaCIKICNp
bmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiU2NyaXB0R0NFdmVudC5oIgogI2luY2x1ZGUgIlNj
cmlwdFByb2ZpbGVyLmgiCkBAIC0yMzksNyArMjQwLDcgQEAgcHJpdmF0ZToKICAgICB7CiAgICAg
ICAgIE5vZGUqIGN1cnJlbnROb2RlID0gcm9vdE5vZGU7CiAgICAgICAgIGNvbGxlY3RMaXN0ZW5l
cnNJbmZvKHJvb3ROb2RlKTsKLSAgICAgICAgd2hpbGUgKChjdXJyZW50Tm9kZSA9IGN1cnJlbnRO
b2RlLT50cmF2ZXJzZU5leHROb2RlKHJvb3ROb2RlKSkpIHsKKyAgICAgICAgd2hpbGUgKChjdXJy
ZW50Tm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQoY3VycmVudE5vZGUsIHJvb3ROb2RlKSkpIHsK
ICAgICAgICAgICAgICsrbV90b3RhbE5vZGVDb3VudDsKICAgICAgICAgICAgIGNvbGxlY3ROb2Rl
U3RhdGlzdGljcyhjdXJyZW50Tm9kZSk7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvRm9jdXNDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
YWdlL0ZvY3VzQ29udHJvbGxlci5jcHAJKHJldmlzaW9uIDEzNzEwOCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BhZ2UvRm9jdXNDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsNiArNDgs
NyBAQAogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIK
ICNpbmNsdWRlICJLZXlib2FyZEV2ZW50LmgiCisjaW5jbHVkZSAiTm9kZVRyYXZlcnNhbC5oIgog
I2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJSYW5nZS5oIgogI2luY2x1ZGUgIlJlbmRlck9i
amVjdC5oIgpAQCAtNzc1LDcgKzc3Niw3IEBAIHZvaWQgRm9jdXNDb250cm9sbGVyOjpmaW5kRm9j
dXNDYW5kaWRhdGUKICAgICBjdXJyZW50LmZvY3VzYWJsZU5vZGUgPSBmb2N1c2VkTm9kZTsKICAg
ICBjdXJyZW50LnZpc2libGVOb2RlID0gZm9jdXNlZE5vZGU7CiAKLSAgICBmb3IgKDsgbm9kZTsg
bm9kZSA9IChub2RlLT5pc0ZyYW1lT3duZXJFbGVtZW50KCkgfHwgY2FuU2Nyb2xsSW5EaXJlY3Rp
b24obm9kZSwgZGlyZWN0aW9uKSkgPyBub2RlLT50cmF2ZXJzZU5leHRTaWJsaW5nKGNvbnRhaW5l
cikgOiBub2RlLT50cmF2ZXJzZU5leHROb2RlKGNvbnRhaW5lcikpIHsKKyAgICBmb3IgKDsgbm9k
ZTsgbm9kZSA9IChub2RlLT5pc0ZyYW1lT3duZXJFbGVtZW50KCkgfHwgY2FuU2Nyb2xsSW5EaXJl
Y3Rpb24obm9kZSwgZGlyZWN0aW9uKSkgPyBOb2RlVHJhdmVyc2FsOjpuZXh0U2libGluZyhub2Rl
LCBjb250YWluZXIpIDogTm9kZVRyYXZlcnNhbDo6bmV4dChub2RlLCBjb250YWluZXIpKSB7CiAg
ICAgICAgIGlmIChub2RlID09IGZvY3VzZWROb2RlKQogICAgICAgICAgICAgY29udGludWU7CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCShyZXZpc2lvbiAxMzcxMDgpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wYWdlL0ZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMsNiArNjMsNyBAQAogI2lu
Y2x1ZGUgIk1lZGlhRmVhdHVyZU5hbWVzLmgiCiAjaW5jbHVkZSAiTmF2aWdhdG9yLmgiCiAjaW5j
bHVkZSAiTm9kZUxpc3QuaCIKKyNpbmNsdWRlICJOb2RlVHJhdmVyc2FsLmgiCiAjaW5jbHVkZSAi
UGFnZS5oIgogI2luY2x1ZGUgIlBhZ2VDYWNoZS5oIgogI2luY2x1ZGUgIlBhZ2VHcm91cC5oIgpA
QCAtMzc1LDcgKzM3Niw3IEBAIFN0cmluZyBGcmFtZTo6c2VhcmNoRm9yTGFiZWxzQWJvdmVDZWxs
KFIKICAgICBpZiAoYWJvdmVDZWxsKSB7CiAgICAgICAgIC8vIHNlYXJjaCB3aXRoaW4gdGhlIGFi
b3ZlIGNlbGwgd2UgZm91bmQgZm9yIGEgbWF0Y2gKICAgICAgICAgc2l6ZV90IGxlbmd0aFNlYXJj
aGVkID0gMDsgICAgCi0gICAgICAgIGZvciAoTm9kZSogbiA9IGFib3ZlQ2VsbC0+Zmlyc3RDaGls
ZCgpOyBuOyBuID0gbi0+dHJhdmVyc2VOZXh0Tm9kZShhYm92ZUNlbGwpKSB7CisgICAgICAgIGZv
ciAoTm9kZSogbiA9IGFib3ZlQ2VsbC0+Zmlyc3RDaGlsZCgpOyBuOyBuID0gTm9kZVRyYXZlcnNh
bDo6bmV4dChuLCBhYm92ZUNlbGwpKSB7CiAgICAgICAgICAgICBpZiAobi0+aXNUZXh0Tm9kZSgp
ICYmIG4tPnJlbmRlcmVyKCkgJiYgbi0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+dmlzaWJpbGl0eSgp
ID09IFZJU0lCTEUpIHsKICAgICAgICAgICAgICAgICAvLyBGb3IgZWFjaCB0ZXh0IGNodW5rLCBy
dW4gdGhlIHJlZ2V4cAogICAgICAgICAgICAgICAgIFN0cmluZyBub2RlU3RyaW5nID0gbi0+bm9k
ZVZhbHVlKCk7CkBAIC00MTYsMTAgKzQxNyw3IEBAIFN0cmluZyBGcmFtZTo6c2VhcmNoRm9yTGFi
ZWxzQmVmb3JlRWxlbWUKICAgICAvLyB3YWxrIGJhY2t3YXJkcyBpbiB0aGUgbm9kZSB0cmVlLCB1
bnRpbCBhbm90aGVyIGVsZW1lbnQsIG9yIGZvcm0sIG9yIGVuZCBvZiB0cmVlCiAgICAgaW50IHVu
c2lnbmVkIGxlbmd0aFNlYXJjaGVkID0gMDsKICAgICBOb2RlKiBuOwotICAgIGZvciAobiA9IGVs
ZW1lbnQtPnRyYXZlcnNlUHJldmlvdXNOb2RlKCk7Ci0gICAgICAgICBuICYmIGxlbmd0aFNlYXJj
aGVkIDwgY2hhcnNTZWFyY2hlZFRocmVzaG9sZDsKLSAgICAgICAgIG4gPSBuLT50cmF2ZXJzZVBy
ZXZpb3VzTm9kZSgpKQotICAgIHsKKyAgICBmb3IgKG4gPSBOb2RlVHJhdmVyc2FsOjpwcmV2aW91
cyhlbGVtZW50KTsgbiAmJiBsZW5ndGhTZWFyY2hlZCA8IGNoYXJzU2VhcmNoZWRUaHJlc2hvbGQ7
IG4gPSBOb2RlVHJhdmVyc2FsOjpwcmV2aW91cyhuKSkgewogICAgICAgICBpZiAobi0+aGFzVGFn
TmFtZShmb3JtVGFnKQogICAgICAgICAgICAgfHwgKG4tPmlzSFRNTEVsZW1lbnQoKSAmJiBzdGF0
aWNfY2FzdDxFbGVtZW50Kj4obiktPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpKQogICAgICAgICB7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTmFtZWRGbG93VGhyZWFkLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTmFtZWRGbG93
VGhyZWFkLmNwcAkocmV2aXNpb24gMTM3MTA4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlck5hbWVkRmxvd1RocmVhZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcg
QEAKICNpbmNsdWRlICJGbG93VGhyZWFkQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIklubGluZVRl
eHRCb3guaCIKICNpbmNsdWRlICJJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCIKKyNpbmNsdWRl
ICJOb2RlVHJhdmVyc2FsLmgiCiAjaW5jbHVkZSAiUG9zaXRpb24uaCIKICNpbmNsdWRlICJSZW5k
ZXJJbmxpbmUuaCIKICNpbmNsdWRlICJSZW5kZXJSZWdpb24uaCIKQEAgLTQ4NCw3ICs0ODUsNyBA
QCB2b2lkIFJlbmRlck5hbWVkRmxvd1RocmVhZDo6Z2V0UmFuZ2VzKFZlCiAgICAgICAgIGJvb2wg
c2tpcE92ZXJPdXRzaWRlTm9kZXMgPSBmYWxzZTsKICAgICAgICAgTm9kZSogbGFzdEVuZE5vZGUg
PSAwOwogCi0gICAgICAgIGZvciAoTm9kZSogbm9kZSA9IGNvbnRlbnROb2RlOyBub2RlOyBub2Rl
ID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZShjb250ZW50Tm9kZSkpIHsKKyAgICAgICAgZm9yIChO
b2RlKiBub2RlID0gY29udGVudE5vZGU7IG5vZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0
KG5vZGUsIGNvbnRlbnROb2RlKSkgewogICAgICAgICAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJl
ciA9IG5vZGUtPnJlbmRlcmVyKCk7CiAgICAgICAgICAgICBpZiAoIXJlbmRlcmVyKQogICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1NWR0VsZW1l
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTVkdFbGVtZW50LmNw
cAkocmV2aXNpb24gMTM3MTA4KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1NWR0VsZW1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSAiRnJhbWVUcmVl
LmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5j
bHVkZSAiTm9kZVRyYXZlcnNhbC5oIgogI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgogI2luY2x1
ZGUgIlJlbmRlclBhcnQuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZS5oIgpAQCAtMzQ1
LDcgKzM0Niw3IEBAIHZvaWQgU1ZHU1ZHRWxlbWVudDo6Zm9yY2VSZWRyYXcoKQogUGFzc1JlZlB0
cjxOb2RlTGlzdD4gU1ZHU1ZHRWxlbWVudDo6Y29sbGVjdEludGVyc2VjdGlvbk9yRW5jbG9zdXJl
TGlzdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIFNWR0VsZW1lbnQqIHJlZmVyZW5jZUVsZW1lbnQs
IENvbGxlY3RJbnRlcnNlY3Rpb25PckVuY2xvc3VyZSBjb2xsZWN0KSBjb25zdAogewogICAgIFZl
Y3RvcjxSZWZQdHI8Tm9kZT4gPiBub2RlczsKLSAgICBOb2RlKiBub2RlID0gdHJhdmVyc2VOZXh0
Tm9kZShyZWZlcmVuY2VFbGVtZW50ID8gcmVmZXJlbmNlRWxlbWVudCA6IHRoaXMpOworICAgIE5v
ZGUqIG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KHJlZmVyZW5jZUVsZW1lbnQgPyByZWZlcmVu
Y2VFbGVtZW50IDogdGhpcyk7CiAgICAgd2hpbGUgKG5vZGUpIHsKICAgICAgICAgaWYgKG5vZGUt
PmlzU1ZHRWxlbWVudCgpKSB7IAogICAgICAgICAgICAgaWYgKGNvbGxlY3QgPT0gQ29sbGVjdElu
dGVyc2VjdGlvbkxpc3QpIHsKQEAgLTM1Nyw3ICszNTgsNyBAQCBQYXNzUmVmUHRyPE5vZGVMaXN0
PiBTVkdTVkdFbGVtZW50Ojpjb2xsCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAg
ICBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZShyZWZlcmVuY2VFbGVtZW50ID8gcmVmZXJl
bmNlRWxlbWVudCA6IHRoaXMpOworICAgICAgICBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dChu
b2RlLCByZWZlcmVuY2VFbGVtZW50ID8gcmVmZXJlbmNlRWxlbWVudCA6IHRoaXMpOwogICAgIH0K
ICAgICByZXR1cm4gU3RhdGljTm9kZUxpc3Q6OmFkb3B0KG5vZGVzKTsKIH0KQEAgLTc4Nyw3ICs3
ODgsNyBAQCBFbGVtZW50KiBTVkdTVkdFbGVtZW50OjpnZXRFbGVtZW50QnlJZChjCiAKICAgICAv
LyBGYWxsIGJhY2sgdG8gdHJhdmVyc2luZyBvdXIgc3VidHJlZS4gRHVwbGljYXRlIGlkcyBhcmUg
YWxsb3dlZCwgdGhlIGZpcnN0IGZvdW5kIHdpbGwKICAgICAvLyBiZSByZXR1cm5lZC4KLSAgICBm
b3IgKE5vZGUqIG5vZGUgPSBmaXJzdENoaWxkKCk7IG5vZGU7IG5vZGUgPSBub2RlLT50cmF2ZXJz
ZU5leHROb2RlKHRoaXMpKSB7CisgICAgZm9yIChOb2RlKiBub2RlID0gZmlyc3RDaGlsZCgpOyBu
b2RlOyBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dChub2RlLCB0aGlzKSkgewogICAgICAgICBp
ZiAoIW5vZGUtPmlzRWxlbWVudE5vZGUoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVXNlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvc3ZnL1NWR1VzZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAxMzcxMDgpCisrKyBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHVXNlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2
LDYgKzM2LDcgQEAKICNpbmNsdWRlICJFdmVudExpc3RlbmVyLmgiCiAjaW5jbHVkZSAiSFRNTE5h
bWVzLmgiCiAjaW5jbHVkZSAiTm9kZVJlbmRlclN0eWxlLmgiCisjaW5jbHVkZSAiTm9kZVRyYXZl
cnNhbC5oIgogI2luY2x1ZGUgIlJlZ2lzdGVyZWRFdmVudExpc3RlbmVyLmgiCiAjaW5jbHVkZSAi
UmVuZGVyU1ZHUmVzb3VyY2UuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdUcmFuc2Zvcm1hYmxlQ29u
dGFpbmVyLmgiCkBAIC02ODksMTIgKzY5MCwxMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcmVtb3Zl
RGlzYWxsb3dlZEVsZW1lCiAgICAgTm9kZSogbm9kZSA9IHN1YnRyZWUtPmZpcnN0Q2hpbGQoKTsK
ICAgICB3aGlsZSAobm9kZSkgewogICAgICAgICBpZiAoaXNEaXNhbGxvd2VkRWxlbWVudChub2Rl
KSkgewotICAgICAgICAgICAgTm9kZSogbmV4dCA9IG5vZGUtPnRyYXZlcnNlTmV4dFNpYmxpbmco
c3VidHJlZSk7CisgICAgICAgICAgICBOb2RlKiBuZXh0ID0gTm9kZVRyYXZlcnNhbDo6bmV4dFNp
Ymxpbmcobm9kZSwgc3VidHJlZSk7CiAgICAgICAgICAgICAvLyBUaGUgc3VidHJlZSBpcyBub3Qg
aW4gZG9jdW1lbnQgc28gdGhpcyB3b24ndCBnZW5lcmF0ZSBldmVudHMgdGhhdCBjb3VsZCBtdXRh
dGUgdGhlIHRyZWUuCiAgICAgICAgICAgICBub2RlLT5wYXJlbnROb2RlKCktPnJlbW92ZUNoaWxk
KG5vZGUpOwogICAgICAgICAgICAgbm9kZSA9IG5leHQ7CiAgICAgICAgIH0gZWxzZQotICAgICAg
ICAgICAgbm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoc3VidHJlZSk7CisgICAgICAgICAg
ICBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dChub2RlLCBzdWJ0cmVlKTsKICAgICB9CiB9CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRpb24vU01JTFRpbWVDb250YWluZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRpb24vU01JTFRpbWVDb250
YWluZXIuY3BwCShyZXZpc2lvbiAxMzcxMDgpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0
aW9uL1NNSUxUaW1lQ29udGFpbmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBA
QAogCiAjaWYgRU5BQkxFKFNWRykKICNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIk5v
ZGVUcmF2ZXJzYWwuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgIlNWR1NNSUxF
bGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHU1ZHRWxlbWVudC5oIgpAQCAtMjI0LDcgKzIyNSw3IEBA
IHZvaWQgU01JTFRpbWVDb250YWluZXI6OnRpbWVyRmlyZWQoVGltZXIKIHZvaWQgU01JTFRpbWVD
b250YWluZXI6OnVwZGF0ZURvY3VtZW50T3JkZXJJbmRleGVzKCkKIHsKICAgICB1bnNpZ25lZCB0
aW1pbmdFbGVtZW50Q291bnQgPSAwOwotICAgIGZvciAoTm9kZSogbm9kZSA9IG1fb3duZXJTVkdF
bGVtZW50OyBub2RlOyBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZShtX293bmVyU1ZHRWxl
bWVudCkpIHsKKyAgICBmb3IgKE5vZGUqIG5vZGUgPSBtX293bmVyU1ZHRWxlbWVudDsgbm9kZTsg
bm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9kZSwgbV9vd25lclNWR0VsZW1lbnQpKSB7CiAg
ICAgICAgIGlmIChTVkdTTUlMRWxlbWVudDo6aXNTTUlMRWxlbWVudChub2RlKSkKICAgICAgICAg
ICAgIHN0YXRpY19jYXN0PFNWR1NNSUxFbGVtZW50Kj4obm9kZSktPnNldERvY3VtZW50T3JkZXJJ
bmRleCh0aW1pbmdFbGVtZW50Q291bnQrKyk7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUv
eG1sL1hQYXRoTm9kZVNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUveG1sL1hQ
YXRoTm9kZVNldC5jcHAJKHJldmlzaW9uIDEzNzEwOCkKKysrIFNvdXJjZS9XZWJDb3JlL3htbC9Y
UGF0aE5vZGVTZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVk
ZSAiQXR0ci5oIgogI2luY2x1ZGUgIkVsZW1lbnQuaCIKICNpbmNsdWRlICJOb2RlLmgiCisjaW5j
bHVkZSAiTm9kZVRyYXZlcnNhbC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBuYW1lc3BhY2Ug
WFBhdGggewpAQCAtMjA2LDcgKzIwNyw3IEBAIHZvaWQgTm9kZVNldDo6dHJhdmVyc2FsU29ydCgp
IGNvbnN0CiAgICAgVmVjdG9yPFJlZlB0cjxOb2RlPiA+IHNvcnRlZE5vZGVzOwogICAgIHNvcnRl
ZE5vZGVzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobm9kZUNvdW50KTsKIAotICAgIGZvciAoTm9k
ZSogbiA9IGZpbmRSb290Tm9kZShtX25vZGVzLmZpcnN0KCkuZ2V0KCkpOyBuOyBuID0gbi0+dHJh
dmVyc2VOZXh0Tm9kZSgpKSB7CisgICAgZm9yIChOb2RlKiBuID0gZmluZFJvb3ROb2RlKG1fbm9k
ZXMuZmlyc3QoKS5nZXQoKSk7IG47IG4gPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG4pKSB7CiAgICAg
ICAgIGlmIChub2Rlcy5jb250YWlucyhuKSkKICAgICAgICAgICAgIHNvcnRlZE5vZGVzLmFwcGVu
ZChuKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUveG1sL1hQYXRoU3RlcC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUveG1sL1hQYXRoU3RlcC5jcHAJKHJldmlzaW9uIDEzNzEwOCkK
KysrIFNvdXJjZS9XZWJDb3JlL3htbC9YUGF0aFN0ZXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MSw2ICszMSw3IEBACiAjaW5jbHVkZSAiQXR0ci5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAj
aW5jbHVkZSAiRWxlbWVudC5oIgorI2luY2x1ZGUgIk5vZGVUcmF2ZXJzYWwuaCIKICNpbmNsdWRl
ICJYTUxOU05hbWVzLmgiCiAjaW5jbHVkZSAiWFBhdGhQYXJzZXIuaCIKICNpbmNsdWRlICJYUGF0
aFV0aWwuaCIKQEAgLTI0Niw3ICsyNDcsNyBAQCB2b2lkIFN0ZXA6Om5vZGVzSW5BeGlzKE5vZGUq
IGNvbnRleHQsIE5vCiAgICAgICAgICAgICBpZiAoY29udGV4dC0+aXNBdHRyaWJ1dGVOb2RlKCkp
IC8vIEluIFhQYXRoIG1vZGVsLCBhdHRyaWJ1dGUgbm9kZXMgZG8gbm90IGhhdmUgY2hpbGRyZW4u
CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgICAgICBmb3IgKE5vZGUqIG4gPSBj
b250ZXh0LT5maXJzdENoaWxkKCk7IG47IG4gPSBuLT50cmF2ZXJzZU5leHROb2RlKGNvbnRleHQp
KQorICAgICAgICAgICAgZm9yIChOb2RlKiBuID0gY29udGV4dC0+Zmlyc3RDaGlsZCgpOyBuOyBu
ID0gTm9kZVRyYXZlcnNhbDo6bmV4dChuLCBjb250ZXh0KSkKICAgICAgICAgICAgICAgICBpZiAo
bm9kZU1hdGNoZXMobiwgRGVzY2VuZGFudEF4aXMsIG1fbm9kZVRlc3QpKQogICAgICAgICAgICAg
ICAgICAgICBub2Rlcy5hcHBlbmQobik7CiAgICAgICAgICAgICByZXR1cm47CkBAIC0yOTcsNyAr
Mjk4LDcgQEAgdm9pZCBTdGVwOjpub2Rlc0luQXhpcyhOb2RlKiBjb250ZXh0LCBObwogICAgICAg
ICBjYXNlIEZvbGxvd2luZ0F4aXM6CiAgICAgICAgICAgICBpZiAoY29udGV4dC0+aXNBdHRyaWJ1
dGVOb2RlKCkpIHsKICAgICAgICAgICAgICAgICBOb2RlKiBwID0gc3RhdGljX2Nhc3Q8QXR0cio+
KGNvbnRleHQpLT5vd25lckVsZW1lbnQoKTsKLSAgICAgICAgICAgICAgICB3aGlsZSAoKHAgPSBw
LT50cmF2ZXJzZU5leHROb2RlKCkpKQorICAgICAgICAgICAgICAgIHdoaWxlICgocCA9IE5vZGVU
cmF2ZXJzYWw6Om5leHQocCkpKQogICAgICAgICAgICAgICAgICAgICBpZiAobm9kZU1hdGNoZXMo
cCwgRm9sbG93aW5nQXhpcywgbV9ub2RlVGVzdCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBu
b2Rlcy5hcHBlbmQocCk7CiAgICAgICAgICAgICB9IGVsc2UgewpAQCAtMzA1LDcgKzMwNiw3IEBA
IHZvaWQgU3RlcDo6bm9kZXNJbkF4aXMoTm9kZSogY29udGV4dCwgTm8KICAgICAgICAgICAgICAg
ICAgICAgZm9yIChOb2RlKiBuID0gcC0+bmV4dFNpYmxpbmcoKTsgbjsgbiA9IG4tPm5leHRTaWJs
aW5nKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlTWF0Y2hlcyhuLCBGb2xs
b3dpbmdBeGlzLCBtX25vZGVUZXN0KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2Rl
cy5hcHBlbmQobik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKE5vZGUqIGMgPSBuLT5m
aXJzdENoaWxkKCk7IGM7IGMgPSBjLT50cmF2ZXJzZU5leHROb2RlKG4pKQorICAgICAgICAgICAg
ICAgICAgICAgICAgZm9yIChOb2RlKiBjID0gbi0+Zmlyc3RDaGlsZCgpOyBjOyBjID0gTm9kZVRy
YXZlcnNhbDo6bmV4dChjLCBuKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9k
ZU1hdGNoZXMoYywgRm9sbG93aW5nQXhpcywgbV9ub2RlVGVzdCkpCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG5vZGVzLmFwcGVuZChjKTsKICAgICAgICAgICAgICAgICAgICAgfQpA
QCAtMzE4LDcgKzMxOSw3IEBAIHZvaWQgU3RlcDo6bm9kZXNJbkF4aXMoTm9kZSogY29udGV4dCwg
Tm8KIAogICAgICAgICAgICAgTm9kZSogbiA9IGNvbnRleHQ7CiAgICAgICAgICAgICB3aGlsZSAo
Q29udGFpbmVyTm9kZSogcGFyZW50ID0gbi0+cGFyZW50Tm9kZSgpKSB7Ci0gICAgICAgICAgICAg
ICAgZm9yIChuID0gbi0+dHJhdmVyc2VQcmV2aW91c05vZGUoKTsgbiAhPSBwYXJlbnQ7IG4gPSBu
LT50cmF2ZXJzZVByZXZpb3VzTm9kZSgpKQorICAgICAgICAgICAgICAgIGZvciAobiA9IE5vZGVU
cmF2ZXJzYWw6OnByZXZpb3VzKG4pOyBuICE9IHBhcmVudDsgbiA9IE5vZGVUcmF2ZXJzYWw6OnBy
ZXZpb3VzKG4pKQogICAgICAgICAgICAgICAgICAgICBpZiAobm9kZU1hdGNoZXMobiwgUHJlY2Vk
aW5nQXhpcywgbV9ub2RlVGVzdCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBub2Rlcy5hcHBl
bmQobik7CiAgICAgICAgICAgICAgICAgbiA9IHBhcmVudDsKQEAgLTM2NSw3ICszNjYsNyBAQCB2
b2lkIFN0ZXA6Om5vZGVzSW5BeGlzKE5vZGUqIGNvbnRleHQsIE5vCiAgICAgICAgICAgICBpZiAo
Y29udGV4dC0+aXNBdHRyaWJ1dGVOb2RlKCkpIC8vIEluIFhQYXRoIG1vZGVsLCBhdHRyaWJ1dGUg
bm9kZXMgZG8gbm90IGhhdmUgY2hpbGRyZW4uCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogCi0g
ICAgICAgICAgICBmb3IgKE5vZGUqIG4gPSBjb250ZXh0LT5maXJzdENoaWxkKCk7IG47IG4gPSBu
LT50cmF2ZXJzZU5leHROb2RlKGNvbnRleHQpKQorICAgICAgICAgICAgZm9yIChOb2RlKiBuID0g
Y29udGV4dC0+Zmlyc3RDaGlsZCgpOyBuOyBuID0gTm9kZVRyYXZlcnNhbDo6bmV4dChuLCBjb250
ZXh0KSkKICAgICAgICAgICAgIGlmIChub2RlTWF0Y2hlcyhuLCBEZXNjZW5kYW50T3JTZWxmQXhp
cywgbV9ub2RlVGVzdCkpCiAgICAgICAgICAgICAgICAgbm9kZXMuYXBwZW5kKG4pOwogICAgICAg
ICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL1dlYkNvcmUveG1sL1hQYXRoVXRpbC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUveG1sL1hQYXRoVXRpbC5jcHAJKHJldmlzaW9uIDEz
NzEwOCkKKysrIFNvdXJjZS9XZWJDb3JlL3htbC9YUGF0aFV0aWwuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiWFBhdGhVdGlsLmgiCiAKICNpbmNsdWRlICJD
b250YWluZXJOb2RlLmgiCisjaW5jbHVkZSAiTm9kZVRyYXZlcnNhbC5oIgogI2luY2x1ZGUgPHd0
Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNTMsNyAr
NTQsNyBAQCBTdHJpbmcgc3RyaW5nVmFsdWUoTm9kZSogbm9kZSkKICAgICAgICAgICAgICAgICBT
dHJpbmdCdWlsZGVyIHJlc3VsdDsKICAgICAgICAgICAgICAgICByZXN1bHQucmVzZXJ2ZUNhcGFj
aXR5KDEwMjQpOwogCi0gICAgICAgICAgICAgICAgZm9yIChOb2RlKiBuID0gbm9kZS0+Zmlyc3RD
aGlsZCgpOyBuOyBuID0gbi0+dHJhdmVyc2VOZXh0Tm9kZShub2RlKSkgeworICAgICAgICAgICAg
ICAgIGZvciAoTm9kZSogbiA9IG5vZGUtPmZpcnN0Q2hpbGQoKTsgbjsgbiA9IE5vZGVUcmF2ZXJz
YWw6Om5leHQobiwgbm9kZSkpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKG4tPmlzVGV4dE5v
ZGUoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBub2RlVmFsdWUg
PSBuLT5ub2RlVmFsdWUoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQo
bm9kZVZhbHVlKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzNzEwOCkKKysrIFNvdXJjZS9X
ZWJLaXQyL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDEyLTEy
LTA5ICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBGYWN0b3Ig
bm9kZSB0cmF2ZXJzYWwgaW50byBzdGFuZGFsb25lIGZ1bmN0aW9ucworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA0NTA3CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
RnJhbWUuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZTo6Y29udGFpbnNBbnlGb3JtRWxl
bWVudHMpOgorCiAyMDEyLTEyLTA5ICBKb24gTGVlICA8am9ubGVlQGFwcGxlLmNvbT4KIAogICAg
ICAgICBbV0syXSBNb3ZlIGJ1dHRvbiBpbWFnZSB0byBpbmplY3RlZCBidW5kbGUKSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFtZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmNwcAkocmV2aXNp
b24gMTM3MTA4KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1l
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQsNiArNTQsNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUv
SlNDU1NTdHlsZURlY2xhcmF0aW9uLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9KU0VsZW1lbnQuaD4K
ICNpbmNsdWRlIDxXZWJDb3JlL0pTUmFuZ2UuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL05vZGVUcmF2
ZXJzYWwuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1BhZ2UuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Bs
dWdpbkRvY3VtZW50Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJUcmVlQXNUZXh0Lmg+CkBA
IC02NjUsNyArNjY2LDcgQEAgYm9vbCBXZWJGcmFtZTo6Y29udGFpbnNBbnlGb3JtRWxlbWVudHMo
KQogICAgIGlmICghZG9jdW1lbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGZvciAo
Tm9kZSogbm9kZSA9IGRvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQoKTsgbm9kZTsgbm9kZSA9IG5v
ZGUtPnRyYXZlcnNlTmV4dE5vZGUoKSkgeworICAgIGZvciAoTm9kZSogbm9kZSA9IGRvY3VtZW50
LT5kb2N1bWVudEVsZW1lbnQoKTsgbm9kZTsgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9k
ZSkpIHsKICAgICAgICAgaWYgKCFub2RlLT5pc0VsZW1lbnROb2RlKCkpCiAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgaWYgKHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKS0+aGFzVGFn
TmFtZShIVE1MTmFtZXM6OmZvcm1UYWcpKQpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDEzNzEwOCkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTItMTItMDkgIEFudHRpIEtvaXZpc3Rv
ICA8YW50dGlAYXBwbGUuY29tPgorCisgICAgICAgIEZhY3RvciBub2RlIHRyYXZlcnNhbCBpbnRv
IHN0YW5kYWxvbmUgZnVuY3Rpb25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMDQ1MDcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAqIHNyYy9XZWJGcmFtZUltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpX
ZWJGcmFtZUltcGw6OnNldEZpbmRFbmRzdGF0ZUZvY3VzQW5kU2VsZWN0aW9uKToKKwogMjAxMi0x
Mi0wOSAgU2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAgICAg
ICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjEzNzEwMy4KSW5kZXg6IFNvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmNwcAkocmV2aXNpb24gMTM3MTA4KQorKysgU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTE4LDYgKzExOCw3IEBACiAjaW5jbHVkZSAiS1VSTC5oIgogI2luY2x1ZGUgIk1lc3NhZ2VQ
b3J0LmgiCiAjaW5jbHVkZSAiTm9kZS5oIgorI2luY2x1ZGUgIk5vZGVUcmF2ZXJzYWwuaCIKICNp
bmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUGFnZU92ZXJsYXkuaCIKICNpbmNsdWRlICJQZXJm
b3JtYW5jZS5oIgpAQCAtMjM0OSw3ICsyMzUwLDcgQEAgdm9pZCBXZWJGcmFtZUltcGw6OnNldEZp
bmRFbmRzdGF0ZUZvY3VzQQogICAgICAgICAgICAgICAgIGZyYW1lKCktPmRvY3VtZW50KCktPnNl
dEZvY3VzZWROb2RlKG5vZGUpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKCk7CisgICAgICAg
ICAgICBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dChub2RlKTsKICAgICAgICAgfQogCiAgICAg
ICAgIC8vIE5vIG5vZGUgcmVsYXRlZCB0byB0aGUgYWN0aXZlIG1hdGNoIHdhcyBmb2N1c2FibGUs
IHNvIHNldCB0aGUKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzNzEwOCkKKysrIFNv
dXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBA
CisyMDEyLTEyLTA5ICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAg
ICBGYWN0b3Igbm9kZSB0cmF2ZXJzYWwgaW50byBzdGFuZGFsb25lIGZ1bmN0aW9ucworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA0NTA3CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgCisgICAgICAgICogV2ViVmlldy9X
ZWJIVE1MUmVwcmVzZW50YXRpb24ubW06CisgICAgICAgIChzZWFyY2hGb3JMYWJlbHNCZWZvcmVF
bGVtZW50KToKKwogMjAxMi0xMi0wNiAgUmljayBCeWVycyAgPHJieWVyc0BjaHJvbWl1bS5vcmc+
CiAKICAgICAgICAgQ1NTIGN1cnNvciBwcm9wZXJ0eSBzaG91bGQgc3VwcG9ydCB3ZWJraXQtaW1h
Z2Utc2V0CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxSZXByZXNlbnRh
dGlvbi5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxS
ZXByZXNlbnRhdGlvbi5tbQkocmV2aXNpb24gMTM3MTA4KQorKysgU291cmNlL1dlYktpdC9tYWMv
V2ViVmlldy9XZWJIVE1MUmVwcmVzZW50YXRpb24ubW0JKHdvcmtpbmcgY29weSkKQEAgLTU0LDYg
KzU0LDcgQEAKICNpbXBvcnQgPFdlYkNvcmUvSFRNTE5hbWVzLmg+CiAjaW1wb3J0IDxXZWJDb3Jl
L0hUTUxUYWJsZUNlbGxFbGVtZW50Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL01JTUVUeXBlUmVnaXN0
cnkuaD4KKyNpbXBvcnQgPFdlYkNvcmUvTm9kZVRyYXZlcnNhbC5oPgogI2ltcG9ydCA8V2ViQ29y
ZS9SYW5nZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9SZWd1bGFyRXhwcmVzc2lvbi5oPgogI2ltcG9y
dCA8V2ViQ29yZS9SZW5kZXJPYmplY3QuaD4KQEAgLTQzNyw5ICs0MzgsOSBAQCBzdGF0aWMgTlNT
dHJpbmcqIHNlYXJjaEZvckxhYmVsc0JlZm9yZUVsCiAgICAgLy8gd2FsayBiYWNrd2FyZHMgaW4g
dGhlIG5vZGUgdHJlZSwgdW50aWwgYW5vdGhlciBlbGVtZW50LCBvciBmb3JtLCBvciBlbmQgb2Yg
dHJlZQogICAgIHVuc2lnbmVkIGxlbmd0aFNlYXJjaGVkID0gMDsKICAgICBOb2RlKiBuOwotICAg
IGZvciAobiA9IGVsZW1lbnQtPnRyYXZlcnNlUHJldmlvdXNOb2RlKCk7CisgICAgZm9yIChuID0g
Tm9kZVRyYXZlcnNhbDo6cHJldmlvdXMoZWxlbWVudCk7CiAgICAgICAgICBuICYmIGxlbmd0aFNl
YXJjaGVkIDwgY2hhcnNTZWFyY2hlZFRocmVzaG9sZDsKLSAgICAgICAgIG4gPSBuLT50cmF2ZXJz
ZVByZXZpb3VzTm9kZSgpKQorICAgICAgICAgbiA9IE5vZGVUcmF2ZXJzYWw6OnByZXZpb3VzKG4p
KQogICAgIHsKICAgICAgICAgaWYgKG4tPmhhc1RhZ05hbWUoZm9ybVRhZykKICAgICAgICAgICAg
IHx8IChuLT5pc0hUTUxFbGVtZW50KCkgJiYgc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG4pLT5pc0Zv
cm1Db250cm9sRWxlbWVudCgpKSkK
</data>
<flag name="commit-queue"
          id="195031"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>178582</attachid>
            <date>2012-12-10 10:08:46 -0800</date>
            <delta_ts>2012-12-10 10:39:50 -0800</delta_ts>
            <desc>patch3</desc>
            <filename>node-traversal-6.patch</filename>
            <type>text/plain</type>
            <size>145506</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzNzEwOCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxNyBAQAorMjAxMi0xMi0wOSAgQW50dGkg
S29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CisKKyAgICAgICAgRmFjdG9yIG5vZGUgdHJhdmVy
c2FsIGludG8gc3RhbmRhbG9uZSBmdW5jdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNDUwNworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIE5vZGUgdHJhdmVyc2FsIGZ1bmN0aW9ucyBhcmUgY3VycmVu
dGx5IE5vZGUgYW5kIENvbnRhaW5lck5vZGUgbWVtYmVycy4gVGhlaXIgaW1wbGVtZW50YXRpb25z
CisgICAgICAgIGFyZSBjb25mdXNpbmdseSBzY2F0dGVyZWQgb3ZlciBtdWx0aXBsZSBoZWFkZXIg
YW5kIHNvdXJjZSBmaWxlcy4gVGhlc2UgZnVuY3Rpb25zIGhhdmUgbm8gcGFydGljdWxhcgorICAg
ICAgICByZWFzb24gdG8gYmUgbWVtYmVycyBhcyB0aGV5IGRvbid0IHJlcXVpcmUgbm9uLXB1Ymxp
YyBhY2Nlc3MuIFRoZXkgc2hvdWxkIGJlIG1hZGUgZnJlZXN0YW5kaW5nCisgICAgICAgIGZ1bmN0
aW9uIGluc3RlYWQgYW5kIGdhdGhlcmVkIHRvZ2V0aGVyLgorICAgICAgICAKKyAgICAgICAgVGhp
cyBwYXRjaCBhZGRzIE5vZGVUcmF2ZXJzYWwgbmFtZXNwYWNlLCBkZWZpbmVkIGluIE5vZGVUcmF2
ZXJzYWwuaC4gSXQgY29udGFpbnMgZnJlZXN0YW5kaW5nCisgICAgICAgIGZ1bmN0aW9ucyBmb3Ig
dHJhdmVyc2luZyBOb2Rlcy4gTW9zdCBwb3B1bGFyIGZ1bmN0aW9ucyBhcmUgaW5saW5lZCAoYXMg
YmVmb3JlKSBhbmQKKyAgICAgICAgdGhlcmUgYXJlIENvbnRhaW5lck5vZGUgc3BlY2lmaWMgc3Bl
Y2lhbGl6YXRpb25zIChhcyBiZWZvcmUpLgorICAgICAgICAKKyAgICAgICAgSW4gY2xpZW50IGNv
ZGUKKyAgICAgICAgCisgICAgICAgICAgICBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgp
OworICAgICAgICAKKyAgICAgICAgYmVjb21lcworICAgICAgICAKKyAgICAgICAgICAgIG5vZGUg
PSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUpOworICAgICAgICAgICAgCisgICAgICAgIGV0Yy4K
KworICAgICAgICAqIFdlYkNvcmUuZXhwLmluOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlO
b2RlT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0
OjphY2Nlc3NpYmlsaXR5RGVzY3JpcHRpb25Gb3JFbGVtZW50cyk6CisgICAgICAgICogYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vz
c2liaWxpdHlPYmplY3Q6OmZpcnN0QWNjZXNzaWJsZU9iamVjdEZyb21Ob2RlKToKKyAgICAgICAg
KiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YWRkSW1hZ2VNYXBDaGlsZHJlbik6
CisgICAgICAgICogYmluZGluZ3MvanMvSlNEb2N1bWVudEN1c3RvbS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjp0b0pTKToKKyAgICAgICAgKiBjc3MvU2VsZWN0b3JDaGVja2VyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNlbGVjdG9yQ2hlY2tlcjo6YWxsVmlzaXRlZFN0YXRlQ2hhbmdlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6OnZpc2l0ZWRTdGF0ZUNoYW5nZWQpOgor
ICAgICAgICAqIGNzcy9TdHlsZUludmFsaWRhdGlvbkFuYWx5c2lzLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlSW52YWxpZGF0aW9uQW5hbHlzaXM6OmludmFsaWRhdGVTdHlsZSk6CisgICAg
ICAgICogZG9tL0NvbnRhaW5lck5vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZGlzcGF0Y2hD
aGlsZEluc2VydGlvbkV2ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpkaXNwYXRjaENoaWxkUmVt
b3ZhbEV2ZW50cyk6CisgICAgICAgICogZG9tL0NvbnRhaW5lck5vZGUuaDoKKyAgICAgICAgKENv
bnRhaW5lck5vZGUpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogZG9tL0NvbnRhaW5l
ck5vZGVBbGdvcml0aG1zLmg6CisgICAgICAgIChXZWJDb3JlOjpDaGlsZEZyYW1lRGlzY29ubmVj
dG9yOjpjb2xsZWN0RGVzY2VuZGFudCk6CisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpidWlsZEFjY2Vzc0tleU1hcCk6CisgICAgICAgIChX
ZWJDb3JlOjpEb2N1bWVudDo6cmVtb3ZlQWxsRXZlbnRMaXN0ZW5lcnMpOgorICAgICAgICAoV2Vi
Q29yZTo6RG9jdW1lbnQ6OnVwZGF0ZUJhc2VVUkwpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1l
bnQ6OnByb2Nlc3NCYXNlRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6bm9k
ZUFic0luZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojpub2RlV2l0aEFic0luZGV4
KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpnZXRGb2N1c2FibGVOb2Rlcyk6CisgICAg
ICAgICogZG9tL0RvY3VtZW50TWFya2VyQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6Om1hcmtlcnNJblJhbmdlKToKKyAgICAgICAgKFdl
YkNvcmU6OkRvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6c2V0TWFya2Vyc0FjdGl2ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6Omhhc01hcmtlcnMpOgorICAg
ICAgICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpjbGVhckRlc2NyaXB0aW9u
T25NYXJrZXJzSW50ZXJzZWN0aW5nUmFuZ2UpOgorICAgICAgICAqIGRvbS9Eb2N1bWVudE9yZGVy
ZWRNYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRPcmRlcmVkTWFwOjpnZXQpOgor
ICAgICAgICAqIGRvbS9FbGVtZW50U2hhZG93LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1l
bnRTaGFkb3c6OmNvbGxlY3RTZWxlY3RGZWF0dXJlU2V0RnJvbSk6CisgICAgICAgICogZG9tL05v
ZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6bm9ybWFsaXplKToKKyAgICAgICAgKFdl
YkNvcmU6Ok5vZGU6OmxhenlBdHRhY2gpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChX
ZWJDb3JlOjpOb2RlOjpkZXRhY2gpOgorICAgICAgICAoV2ViQ29yZTo6dHJhdmVyc2VUcmVlQW5k
TWFyayk6CisgICAgICAgICogZG9tL05vZGUuaDoKKyAgICAgICAgKE5vZGUpOgorICAgICAgICAq
IGRvbS9Ob2RlSXRlcmF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZUl0ZXJhdG9yOjpO
b2RlUG9pbnRlcjo6bW92ZVRvTmV4dCk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlSXRlcmF0b3I6
Ok5vZGVQb2ludGVyOjptb3ZlVG9QcmV2aW91cyk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlSXRl
cmF0b3I6OnVwZGF0ZUZvck5vZGVSZW1vdmFsKToKKyAgICAgICAgKiBkb20vTm9kZVRyYXZlcnNh
bC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoTm9kZVRyYXZlcnNhbCk6
CisgICAgICAgIChXZWJDb3JlOjpOb2RlVHJhdmVyc2FsOjp0cmF2ZXJzZU5leHROb2RlVGVtcGxh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZVRyYXZlcnNhbDo6bmV4dCk6CisgICAgICAgIChX
ZWJDb3JlOjpOb2RlVHJhdmVyc2FsOjp0cmF2ZXJzZU5leHRTaWJsaW5nVGVtcGxhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6Tm9kZVRyYXZlcnNhbDo6bmV4dFNpYmxpbmcpOgorICAgICAgICAqIGRv
bS9SYW5nZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6dG9TdHJpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6UmFuZ2U6OmNoZWNrRGVsZXRlRXh0cmFjdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSYW5nZTo6Zmlyc3ROb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjpwYXN0TGFzdE5v
ZGUpOgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OnRleHRSZWN0cyk6CisgICAgICAgIChXZWJD
b3JlOjpSYW5nZTo6dGV4dFF1YWRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjpnZXRCb3Jk
ZXJBbmRUZXh0UXVhZHMpOgorICAgICAgICAqIGRvbS9UcmVlU2NvcGUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6VHJlZVNjb3BlOjpsYWJlbEVsZW1lbnRGb3JJZCk6CisgICAgICAgIChXZWJDb3Jl
OjpUcmVlU2NvcGU6OmZpbmRBbmNob3IpOgorICAgICAgICAqIGRvbS9UcmVlU2NvcGVBZG9wdGVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRyZWVTY29wZUFkb3B0ZXI6Om1vdmVUcmVlVG9OZXdT
Y29wZSk6CisgICAgICAgIChXZWJDb3JlOjpUcmVlU2NvcGVBZG9wdGVyOjptb3ZlVHJlZVRvTmV3
RG9jdW1lbnQpOgorICAgICAgICAqIGRvbS9UcmVlV2Fsa2VyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlRyZWVXYWxrZXI6Om5leHROb2RlKToKKyAgICAgICAgKiBlZGl0aW5nL0FwcGx5U3R5bGVD
b21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjphcHBseVJl
bGF0aXZlRm9udFN0eWxlQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21t
YW5kOjpmaXhSYW5nZUFuZEFwcGx5SW5saW5lU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6Y29u
dGFpbnNOb25FZGl0YWJsZVJlZ2lvbik6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29t
bWFuZDo6YXBwbHlJbmxpbmVTdHlsZVRvTm9kZVJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkFw
cGx5U3R5bGVDb21tYW5kOjpyZW1vdmVTdHlsZUZyb21SdW5CZWZvcmVBcHBseWluZ1N0eWxlKToK
KyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjpyZW1vdmVJbmxpbmVTdHlsZSk6
CisgICAgICAgICogZWRpdGluZy9CcmVha0Jsb2NrcXVvdGVDb21tYW5kLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkJyZWFrQmxvY2txdW90ZUNvbW1hbmQ6OmRvQXBwbHkpOgorICAgICAgICAqIGVk
aXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9z
aXRlRWRpdENvbW1hbmQ6OmRlbGV0ZUluc2lnbmlmaWNhbnRUZXh0KToKKyAgICAgICAgKFdlYkNv
cmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjpjbG9uZVBhcmFncmFwaFVuZGVyTmV3RWxlbWVudCk6
CisgICAgICAgICogZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OmZpcnN0RWRpdGFibGVQb3NpdGlvbkluTm9kZSk6CisgICAgICAgIChXZWJDb3Jl
OjpEZWxldGVTZWxlY3Rpb25Db21tYW5kOjptYWtlU3R5bGluZ0VsZW1lbnRzRGlyZWN0Q2hpbGRy
ZW5PZkVkaXRhYmxlUm9vdFRvUHJldmVudFN0eWxlTG9zcyk6CisgICAgICAgIChXZWJDb3JlOjpE
ZWxldGVTZWxlY3Rpb25Db21tYW5kOjpoYW5kbGVHZW5lcmFsRGVsZXRlKToKKyAgICAgICAgKiBl
ZGl0aW5nL0VkaXRDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUVkaXRDb21t
YW5kOjphZGROb2RlQW5kRGVzY2VuZGFudHMpOgorICAgICAgICAqIGVkaXRpbmcvRWRpdGluZ1N0
eWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRpbmdTdHlsZTo6dHJpU3RhdGVPZlN0eWxl
KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRpbmdTdHlsZTo6dGV4dERpcmVjdGlvbkZvclNlbGVj
dGlvbik6CisgICAgICAgICogZWRpdGluZy9FZGl0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjpzaW1wbGlmeU1hcmt1cCk6CisgICAgICAgICogZWRpdGluZy9GcmFtZVNlbGVjdGlv
bi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzY2FuRm9yRm9ybSk6CisgICAgICAgIChXZWJDb3Jl
OjpGcmFtZVNlbGVjdGlvbjo6c2V0U2VsZWN0aW9uRnJvbU5vbmUpOgorICAgICAgICAqIGVkaXRp
bmcvSW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAgKiBl
ZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
cGxhY2VtZW50RnJhZ21lbnQ6OnJlbW92ZVVucmVuZGVyZWROb2Rlcyk6CisgICAgICAgIChXZWJD
b3JlOjpSZXBsYWNlbWVudEZyYWdtZW50OjpyZW1vdmVJbnRlcmNoYW5nZU5vZGVzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpJbnNlcnRlZE5vZGVzOjp3aWxs
UmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpSZXBsYWNl
U2VsZWN0aW9uQ29tbWFuZDo6SW5zZXJ0ZWROb2Rlczo6d2lsbFJlbW92ZU5vZGUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OnJlbW92ZVJlZHVuZGFudFN0eWxl
c0FuZEtlZXBTdHlsZVNwYW5JbmxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6cmVtb3ZlSGVhZENv
bnRlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpoYW5k
bGVTdHlsZVNwYW5zKToKKyAgICAgICAgKiBlZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5k
Lmg6CisgICAgICAgIChXZWJDb3JlOjpSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6SW5zZXJ0ZWRO
b2Rlczo6cGFzdExhc3RMZWFmKToKKyAgICAgICAgKiBlZGl0aW5nL1NpbXBsaWZ5TWFya3VwQ29t
bWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGlmeU1hcmt1cENvbW1hbmQ6OmRvQXBw
bHkpOgorICAgICAgICAqIGVkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlRleHRJdGVyYXRvcjo6YWR2YW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpzaG91bGRFbWl0
TmV3bGluZUFmdGVyTm9kZSk6CisgICAgICAgICogZWRpdGluZy9odG1sZWRpdGluZy5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpoYXNBUmVuZGVyZWREZXNjZW5kYW50KToKKyAgICAgICAgKiBlZGl0
aW5nL21hYy9FZGl0b3JNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmZvbnRGb3JT
ZWxlY3Rpb24pOgorICAgICAgICAqIGVkaXRpbmcvbWFya3VwLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OmNvbXBsZXRlVVJMcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZWRNYXJrdXBBY2N1bXVs
YXRvcjo6dHJhdmVyc2VOb2Rlc0ZvclNlcmlhbGl6YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
ZmluZE5vZGVzU3Vycm91bmRpbmdDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OnRyaW1GcmFn
bWVudCk6CisgICAgICAgICogZWRpdGluZy92aXNpYmxlX3VuaXRzLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OnN0YXJ0T2ZQYXJhZ3JhcGgpOgorICAgICAgICAoV2ViQ29yZTo6ZW5kT2ZQYXJhZ3Jh
cGgpOgorICAgICAgICAqIGh0bWwvSFRNTENvbGxlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6bmV4dE5vZGUpOgorICAgICAgICAqIGh0bWwvSFRNTEVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6c2V0SGFzRGlyQXV0b0ZsYWdSZWN1cnNpdmVseSk6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MRWxlbWVudDo6ZGlyZWN0aW9uYWxpdHkpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEVs
ZW1lbnQ6OmFkanVzdERpcmVjdGlvbmFsaXR5SWZOZWVkZWRBZnRlckNoaWxkcmVuQ2hhbmdlZCk6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MRWxlbWVudDo6Z2V0SXRlbVJlZkVsZW1lbnRzKToKKyAg
ICAgICAgKiBodG1sL0hUTUxGaWVsZFNldEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTEZpZWxkU2V0RWxlbWVudDo6aW52YWxpZGF0ZURpc2FibGVkU3RhdGVVbmRlcik6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MRmllbGRTZXRFbGVtZW50OjpyZWZyZXNoRWxlbWVudHNJZk5lZWRl
ZCk6CisgICAgICAgICogaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTEZvcm1FbGVtZW50Ojpmb3JtRWxlbWVudEluZGV4KToKKyAgICAgICAgKiBodG1sL0hU
TUxMYWJlbEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTExhYmVsRWxlbWVudDo6
Y29udHJvbCk6CisgICAgICAgICogaHRtbC9IVE1MTGVnZW5kRWxlbWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MTGVnZW5kRWxlbWVudDo6YXNzb2NpYXRlZENvbnRyb2wpOgorICAgICAg
ICAqIGh0bWwvSFRNTE1hcEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1hcEVs
ZW1lbnQ6Om1hcE1vdXNlRXZlbnQpOgorICAgICAgICAqIGh0bWwvSFRNTE5hbWVDb2xsZWN0aW9u
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxOYW1lQ29sbGVjdGlvbjo6dmlydHVhbEl0ZW1B
ZnRlcik6CisgICAgICAgICogaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MT3B0aW9uRWxlbWVudDo6Y29sbGVjdE9wdGlvbklubmVyVGV4dCk6CisgICAg
ICAgICogaHRtbC9IVE1MUHJvcGVydGllc0NvbGxlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6bmV4dE5vZGVXaXRoUHJvcGVydHkpOgorICAgICAgICAqIGh0bWwvSFRNTFNlbGVjdEVsZW1l
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6OnJlY2FsY0xpc3RJ
dGVtcyk6CisgICAgICAgICogaHRtbC9IVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6c2VsZWN0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50Ojppbm5lclRleHRW
YWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6dmFs
dWVXaXRoSGFyZExpbmVCcmVha3MpOgorICAgICAgICAqIGh0bWwvUmFkaW9JbnB1dFR5cGUuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmFkaW9JbnB1dFR5cGU6OmhhbmRsZUtleWRvd25FdmVudCk6
CisgICAgICAgICogaHRtbC9zaGFkb3cvQ29udGVudERpc3RyaWJ1dG9yLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNoYWRvd1Jvb3RDb250ZW50RGlzdHJpYnV0aW9uRGF0YTo6ZW5zdXJlSW5zZXJ0
aW9uUG9pbnRMaXN0KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OnBlcmZvcm1TZWFyY2gpOgor
ICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JNZW1vcnlBZ2VudC5jcHA6CisgICAgICAgICog
cGFnZS9Gb2N1c0NvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9jdXNDb250cm9s
bGVyOjpmaW5kRm9jdXNDYW5kaWRhdGVJbkNvbnRhaW5lcik6CisgICAgICAgICogcGFnZS9GcmFt
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6c2VhcmNoRm9yTGFiZWxzQWJvdmVDZWxs
KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpzZWFyY2hGb3JMYWJlbHNCZWZvcmVFbGVtZW50
KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTmFtZWRGbG93VGhyZWFkLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlck5hbWVkRmxvd1RocmVhZDo6Z2V0UmFuZ2VzKToKKyAgICAgICAg
KiBzdmcvU1ZHU1ZHRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdTVkdFbGVtZW50
Ojpjb2xsZWN0SW50ZXJzZWN0aW9uT3JFbmNsb3N1cmVMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlNWR1NWR0VsZW1lbnQ6OmdldEVsZW1lbnRCeUlkKToKKyAgICAgICAgKiBzdmcvU1ZHVXNlRWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpyZW1vdmVEaXNhbGxvd2VkRWxlbWVudHNGcm9t
U3VidHJlZSk6CisgICAgICAgICogc3ZnL2FuaW1hdGlvbi9TTUlMVGltZUNvbnRhaW5lci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTTUlMVGltZUNvbnRhaW5lcjo6dXBkYXRlRG9jdW1lbnRPcmRl
ckluZGV4ZXMpOgorICAgICAgICAqIHhtbC9YUGF0aE5vZGVTZXQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6WFBhdGg6Ok5vZGVTZXQ6OnRyYXZlcnNhbFNvcnQpOgorICAgICAgICAqIHhtbC9YUGF0
aFN0ZXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OlN0ZXA6Om5vZGVzSW5BeGlzKToK
KyAgICAgICAgKiB4bWwvWFBhdGhVdGlsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpz
dHJpbmdWYWx1ZSk6CisKIDIwMTItMTItMDkgIElseWEgVGlraG9ub3Zza3kgIDxsb2lzbG9AY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIE5hdGl2ZSBNZW1vcnkgSW5zdHJ1bWVudGF0aW9uOiBpbnN0
cnVtZW50IGEgcGFydCBvZiBSZW5kZXJPYmplY3QgY2xhc3MgdHJlZS4KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NNYWtl
TGlzdHMudHh0CShyZXZpc2lvbiAxMzcxMDgpCisrKyBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3Rz
LnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTE5NCw2ICsxMTk0LDcgQEAgc2V0KFdlYkNvcmVfU09V
UkNFUwogICAgIGRvbS9Ob2RlSXRlcmF0b3IuY3BwCiAgICAgZG9tL05vZGVSYXJlRGF0YS5jcHAK
ICAgICBkb20vTm9kZVJlbmRlcmluZ0NvbnRleHQuY3BwCisgICAgZG9tL05vZGVUcmF2ZXJzYWwu
Y3BwCiAgICAgZG9tL05vdGF0aW9uLmNwcAogICAgIGRvbS9PdmVyZmxvd0V2ZW50LmNwcAogICAg
IGRvbS9QYWdlVHJhbnNpdGlvbkV2ZW50LmNwcApJbmRleDogU291cmNlL1dlYkNvcmUvR05VbWFr
ZWZpbGUubGlzdC5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5s
aXN0LmFtCShyZXZpc2lvbiAxMzcxMDgpCisrKyBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5s
aXN0LmFtCSh3b3JraW5nIGNvcHkpCkBAIC0yODgyLDYgKzI4ODIsOCBAQCB3ZWJjb3JlX3NvdXJj
ZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlUmFyZURhdGEuaCBcCiAJU291cmNlL1dl
YkNvcmUvZG9tL05vZGVSZW5kZXJpbmdDb250ZXh0LmggXAogCVNvdXJjZS9XZWJDb3JlL2RvbS9O
b2RlUmVuZGVyU3R5bGUuaCBcCisgICAgU291cmNlL1dlYkNvcmUvZG9tL05vZGVUcmF2ZXJzYWwu
Y3BwIFwKKyAgICBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZVRyYXZlcnNhbC5oIFwKIAlTb3VyY2Uv
V2ViQ29yZS9kb20vTm9kZVdpdGhJbmRleC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9kb20vTm90YXRp
b24uY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9kb20vTm90YXRpb24uaCBcCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9UYXJnZXQucHJpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1RhcmdldC5w
cmkJKHJldmlzaW9uIDEzNzEwOCkKKysrIFNvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkJKHdvcmtp
bmcgY29weSkKQEAgLTQzMSw2ICs0MzEsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBkb20vTm9kZUl0
ZXJhdG9yLmNwcCBcCiAgICAgZG9tL05vZGVSYXJlRGF0YS5jcHAgXAogICAgIGRvbS9Ob2RlUmVu
ZGVyaW5nQ29udGV4dC5jcHAgXAorICAgIGRvbS9Ob2RlVHJhdmVyc2FsLmNwcCBcCiAgICAgZG9t
L05vdGF0aW9uLmNwcCBcCiAgICAgZG9tL1N0YXRpY0hhc2hTZXROb2RlTGlzdC5jcHAgXAogICAg
IGRvbS9PdmVyZmxvd0V2ZW50LmNwcCBcCkBAIC0xNjEzLDYgKzE2MTQsNyBAQCBIRUFERVJTICs9
IFwKICAgICBkb20vTm9kZUl0ZXJhdG9yLmggXAogICAgIGRvbS9Ob2RlUmFyZURhdGEuaCBcCiAg
ICAgZG9tL05vZGVSZW5kZXJpbmdDb250ZXh0LmggXAorICAgIGRvbS9Ob2RlVHJhdmVyc2FsLmgg
XAogICAgIGRvbS9Ob3RhdGlvbi5oIFwKICAgICBkb20vU3RhdGljSGFzaFNldE5vZGVMaXN0Lmgg
XAogICAgIGRvbS9PdmVyZmxvd0V2ZW50LmggXApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS5leHAuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHJl
dmlzaW9uIDEzNzEwOCkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCSh3b3JraW5n
IGNvcHkpCkBAIC0yMjgsNiArMjI4LDggQEAgX19aTjdXZWJDb3JlMTNJZGVudGlmaWVyUmVwM2dl
dEVpCiBfX1pON1dlYkNvcmUxM0pTSFRNTEVsZW1lbnQ2c19pbmZvRQogX19aTjdXZWJDb3JlMTNL
ZXlib2FyZEV2ZW50QzFFUktOM1dURjEyQXRvbWljU3RyaW5nRWJiUE5TXzlET01XaW5kb3dFUktO
UzFfNlN0cmluZ0VqYmJiYmIKIF9fWk43V2ViQ29yZTEzS2V5Ym9hcmRFdmVudEMxRVJLTlNfMjFQ
bGF0Zm9ybUtleWJvYXJkRXZlbnRFUE5TXzlET01XaW5kb3dFCitfX1pON1dlYkNvcmUxM05vZGVU
cmF2ZXJzYWwxOW5leHRBbmNlc3RvclNpYmxpbmdFUEtOU180Tm9kZUUKK19fWk43V2ViQ29yZTEz
Tm9kZVRyYXZlcnNhbDhwcmV2aW91c0VQS05TXzROb2RlRVMzXwogX19aTjdXZWJDb3JlMTNRdWFs
aWZpZWROYW1lRDFFdgogX19aTjdXZWJDb3JlMTNSZXNvdXJjZUVycm9yQzFFUDdOU0Vycm9yCiBf
X1pON1dlYkNvcmUxM1Jlc291cmNlRXJyb3JDMUVQOV9fQ0ZFcnJvcgpAQCAtMTM2Miw4ICsxMzY0
LDYgQEAgX19aTjdXZWJDb3JlNE5vZGUxMmluc2VydEJlZm9yZUVOM1dURjEwUAogX19aTks3V2Vi
Q29yZTROb2RlMTNvd25lckRvY3VtZW50RXYKIF9fWk5LN1dlYkNvcmU0Tm9kZTE0aXNEZXNjZW5k
YW50T2ZFUEtTMF8KIF9fWk5LN1dlYkNvcmU0Tm9kZTE4Z2V0U3VicmVzb3VyY2VVUkxzRVJOM1dU
RjExTGlzdEhhc2hTZXRJTlNfNEtVUkxFTG0yNTZFTlNfOEtVUkxIYXNoRUVFCi1fX1pOSzdXZWJD
b3JlNE5vZGUyMHRyYXZlcnNlUHJldmlvdXNOb2RlRVBLUzBfCi1fX1pOSzdXZWJDb3JlNE5vZGUy
N3RyYXZlcnNlTmV4dEFuY2VzdG9yU2libGluZ0V2CiBfX1pOSzdXZWJDb3JlNE5vZGUzMW51bWJl
ck9mU2NvcGVkSFRNTFN0eWxlQ2hpbGRyZW5FdgogX19aTks3V2ViQ29yZTROb2RlOW5vZGVJbmRl
eEV2CiBfX1pOSzdXZWJDb3JlNFBhZ2UxMHBsdWdpbkRhdGFFdgpAQCAtMjA2MSw3ICsyMDYxLDYg
QEAgX19aTks3V2ViQ29yZTE1VmlzaWJsZVBvc2l0aW9uNXJpZ2h0RWIKIF9fWk5LN1dlYkNvcmUx
N1JlbmRlclRleHRDb250cm9sMjJ0ZXh0Rm9ybUNvbnRyb2xFbGVtZW50RXYKIF9fWk5LN1dlYkNv
cmUxN1JlbmRlclRleHRDb250cm9sMjN2aXNpYmxlUG9zaXRpb25Gb3JJbmRleEVpCiBfX1pOSzdX
ZWJDb3JlNE5vZGUxOHJlbmRlcmVySXNFZGl0YWJsZUVOUzBfMTNFZGl0YWJsZUxldmVsRQotX19a
Tks3V2ViQ29yZTROb2RlMjd0cmF2ZXJzZU5leHRBbmNlc3RvclNpYmxpbmdFUEtTMF8KIF9fWk5L
N1dlYkNvcmU1RnJhbWUxMnVwZGF0ZUxheW91dEV2CiBfX1pOSzdXZWJDb3JlNUZyYW1lMTNkb2N1
bWVudFNjYWxlRXYKIF9fWk5LN1dlYkNvcmU1RnJhbWUxNWlubmVyTGluZUhlaWdodEVQN0RPTU5v
ZGUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9uIDEzNzEwOCkKKysrIFNvdXJjZS9XZWJD
b3JlL1dlYkNvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAtMjg0Niw2ICsyODQ2LDggQEAKICAg
ICAgICAgICAgICdkb20vTm9kZVJlbmRlcmluZ0NvbnRleHQuY3BwJywKICAgICAgICAgICAgICdk
b20vTm9kZVJlbmRlcmluZ0NvbnRleHQuaCcsCiAgICAgICAgICAgICAnZG9tL05vZGVSZW5kZXJT
dHlsZS5oJywKKyAgICAgICAgICAgICdkb20vTm9kZVRyYXZlcnNhbC5jcHAnLAorICAgICAgICAg
ICAgJ2RvbS9Ob2RlVHJhdmVyc2FsLmgnLAogICAgICAgICAgICAgJ2RvbS9Ob2RlV2l0aEluZGV4
LmgnLAogICAgICAgICAgICAgJ2RvbS9Ob3RhdGlvbi5jcHAnLAogICAgICAgICAgICAgJ2RvbS9O
b3RhdGlvbi5oJywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUu
dmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNv
cmUudmNwcm9qCShyZXZpc2lvbiAxMzcxMDgpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZj
cHJvai9XZWJDb3JlLnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAtNTM0MDEsNiArNTM0MDEsMTQg
QEAKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGRvbVxOb2RlUmVuZGVyaW5nQ29udGV4dC5oIgogCQkJ
CT4KIAkJCTwvRmlsZT4KKyAgICAgICAgICAgIDxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxk
b21cTm9kZVRyYXZlcnNhbC5jcHAiCisJCQkJPgorCQkJPC9GaWxlPgorICAgICAgICAgICAgPEZp
bGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGRvbVxOb2RlVHJhdmVyc2FsLmgiCisJCQkJPgorCQkJ
PC9GaWxlPgogCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGRvbVxOb3RhdGlvbi5jcHAi
CiAJCQkJPgpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagkocmV2aXNpb24gMTM3MTA4KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC02MTc5LDYgKzYx
NzksOCBAQAogCQlFNDE1RjE2OTBEOUExNjVEMDAzM0NFOTcgLyogRE9NRWxlbWVudFRpbWVDb250
cm9sLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDE1
RjE2ODBEOUExNjVEMDAzM0NFOTcgLyogRE9NRWxlbWVudFRpbWVDb250cm9sLmggKi87IH07CiAJ
CUU0MTVGMTg0MEQ5QTFBODMwMDMzQ0U5NyAvKiBFbGVtZW50VGltZUNvbnRyb2wuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0MTVGMTgzMEQ5QTFBODMw
MDMzQ0U5NyAvKiBFbGVtZW50VGltZUNvbnRyb2wuaCAqLzsgfTsKIAkJRTQyOTVGQTQxMkIwNjE0
RTAwRDFBQ0UwIC8qIFJlc291cmNlTG9hZFByaW9yaXR5LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDI5NUZBMzEyQjA2MTRFMDBEMUFDRTAgLyogUmVz
b3VyY2VMb2FkUHJpb3JpdHkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OworCQlFNDMxMDVCODE2NzUwRjBDMDBEQjJGQjggLyogTm9kZVRyYXZlcnNhbC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDMxMDVC
NzE2NzUwRjBDMDBEQjJGQjggLyogTm9kZVRyYXZlcnNhbC5jcHAgKi87IH07CisJCUU0MzEwNUJC
MTY3NTBGMTYwMERCMkZCOCAvKiBOb2RlVHJhdmVyc2FsLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDMxMDVCQTE2NzUwRjE2MDBEQjJGQjggLyogTm9k
ZVRyYXZlcnNhbC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCUU0NDYxM0ExMENENjMzMTAwMEZBREE3NSAvKiBIVE1MQXVkaW9FbGVtZW50LmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0NDYxMzhGMENE
NjMzMTAwMEZBREE3NSAvKiBIVE1MQXVkaW9FbGVtZW50LmNwcCAqLzsgfTsKIAkJRTQ0NjEzQTIw
Q0Q2MzMxMDAwRkFEQTc1IC8qIEhUTUxBdWRpb0VsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0NDYxMzkwMENENjMzMTAwMEZBREE3NSAvKiBI
VE1MQXVkaW9FbGVtZW50LmggKi87IH07CiAJCUU0NDYxM0E0MENENjMzMTAwMEZBREE3NSAvKiBI
VE1MTWVkaWFFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEU0NDYxMzkyMENENjMzMTAwMEZBREE3NSAvKiBIVE1MTWVkaWFFbGVtZW50LmNw
cCAqLzsgfTsKQEAgLTEwNDc0LDcgKzEwNDc2LDcgQEAKIAkJOTMyRTE2MDgwQUY1NzgzNDAwMjVG
NDA4IC8qIEZyYW1lTG9hZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEZyYW1lTG9hZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTMzMDlE
ODcwOTlFNjQ5MTAwNTZFNTgxIC8qIEFwcGVuZE5vZGVDb21tYW5kLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFwcGVuZE5vZGVDb21tYW5kLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTMzMDlEODgwOTlFNjQ5MTAwNTZFNTgxIC8qIEFwcGVuZE5v
ZGVDb21tYW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFwcGVuZE5vZGVD
b21tYW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTkzMzA5RDg5MDk5RTY0OTEw
MDU2RTU4MSAvKiBBcHBseVN0eWxlQ29tbWFuZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBBcHBseVN0eWxlQ29tbWFuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTkzMzA5RDg5MDk5RTY0OTEwMDU2RTU4MSAvKiBBcHBseVN0eWxlQ29tbWFuZC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IGxpbmVFbmRpbmcgPSAwOyBwYXRoID0g
QXBwbHlTdHlsZUNvbW1hbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB4Y0xhbmd1YWdl
U3BlY2lmaWNhdGlvbklkZW50aWZpZXIgPSB4Y29kZS5sYW5nLmNwcDsgfTsKIAkJOTMzMDlEOEEw
OTlFNjQ5MTAwNTZFNTgxIC8qIEFwcGx5U3R5bGVDb21tYW5kLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEFwcGx5U3R5bGVDb21tYW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTkzMzA5RDhCMDk5RTY0OTEwMDU2RTU4MSAvKiBCcmVha0Jsb2NrcXVvdGVDb21t
YW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJyZWFrQmxvY2tx
dW90ZUNvbW1hbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5MzMwOUQ4QzA5
OUU2NDkxMDA1NkU1ODEgLyogQnJlYWtCbG9ja3F1b3RlQ29tbWFuZC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBCcmVha0Jsb2NrcXVvdGVDb21tYW5kLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0xMzY2Niw2ICsxMzY2OCw4IEBACiAJCUU0MUVBMDM4MTE5ODM2
REIwMDcxMEJDNSAvKiBDU1NQcm9wZXJ0eU5hbWVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IENTU1Byb3BlcnR5TmFtZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlFNDFFQTAzOTExOTgzNzQ5MDA3MTBCQzUgLyogQ1NTVmFsdWVLZXl3b3Jkcy5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDU1NWYWx1ZUtleXdvcmRz
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQyOTVGQTMxMkIwNjE0RTAwRDFB
Q0UwIC8qIFJlc291cmNlTG9hZFByaW9yaXR5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFJlc291cmNlTG9hZFByaW9yaXR5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUU0MzEwNUI3MTY3NTBGMEMwMERCMkZCOCAvKiBOb2RlVHJhdmVyc2FsLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE5vZGVUcmF2ZXJzYWwuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlFNDMxMDVCQTE2NzUwRjE2MDBEQjJGQjggLyogTm9kZVRy
YXZlcnNhbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOb2RlVHJhdmVyc2Fs
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0NDYxMzhGMENENjMzMTAwMEZBREE3
NSAvKiBIVE1MQXVkaW9FbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEhUTUxBdWRpb0VsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlFNDQ2MTM5MDBDRDYzMzEwMDBGQURBNzUgLyogSFRNTEF1ZGlvRWxlbWVudC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIVE1MQXVkaW9FbGVtZW50Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUU0NDYxMzkxMENENjMzMTAwMEZBREE3NSAvKiBIVE1MQXVkaW9F
bGVtZW50LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBIVE1MQXVkaW9FbGVtZW50LmlkbDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIyMDk3LDYgKzIyMTAxLDggQEAKIAkJCQlB
N0Y1RDk0RDEzODRGMDJEMDBBMjlBODcgLyogTm9kZVJlbmRlcmluZ0NvbnRleHQuY3BwICovLAog
CQkJCUE3RjVEOTRFMTM4NEYwMkQwMEEyOUE4NyAvKiBOb2RlUmVuZGVyaW5nQ29udGV4dC5oICov
LAogCQkJCTYzRDdCMzJDMEU3OENEM0YwMEY3NjE3QyAvKiBOb2RlUmVuZGVyU3R5bGUuaCAqLywK
KwkJCQlFNDMxMDVCNzE2NzUwRjBDMDBEQjJGQjggLyogTm9kZVRyYXZlcnNhbC5jcHAgKi8sCisJ
CQkJRTQzMTA1QkExNjc1MEYxNjAwREIyRkI4IC8qIE5vZGVUcmF2ZXJzYWwuaCAqLywKIAkJCQk5
MzgyQUFCMTBEOEMzODYxMDBGMzU3QTYgLyogTm9kZVdpdGhJbmRleC5oICovLAogCQkJCUE4RUE3
RUI3MEExOTQ1RDAwMEE4RUY1RiAvKiBOb3RhdGlvbi5jcHAgKi8sCiAJCQkJQThFQTdFQjYwQTE5
NDVEMDAwQThFRjVGIC8qIE5vdGF0aW9uLmggKi8sCkBAIC0yMjU1NCw2ICsyMjU2MCw3IEBACiAJ
CQlpc2EgPSBQQlhIZWFkZXJzQnVpbGRQaGFzZTsKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0
ODM2NDc7CiAJCQlmaWxlcyA9ICgKKwkJCQlFNDMxMDVCQjE2NzUwRjE2MDBEQjJGQjggLyogTm9k
ZVRyYXZlcnNhbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzM3NUQ3RkUxNjYzOTUxOTAwNjE4NEFC
IC8qIFR5cGVBaGVhZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkQxQUYxNTAxNjU2RjE1MTAwQzZE
NEY3IC8qIEV4Y2x1c2lvblNoYXBlVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDN0ZBNjIx
MEQxRjBDQkQwMERCMjJBOSAvKiBMaXZlTm9kZUxpc3QuaCBpbiBIZWFkZXJzICovLApAQCAtMjg5
OTksNiArMjkwMDYsNyBAQAogCQkJCTg2QkE3NjZFMTY2NDI3QTgwMDVCRTVEMSAvKiBGcmFtZUxv
YWRSZXF1ZXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzRjcyQUY0MTY2NkVERkMwMDJBMDJC
RCAvKiBMYXllclBvb2wubW0gaW4gU291cmNlcyAqLywKIAkJCQlDMzc1RDdGRDE2NjM5NTE5MDA2
MTg0QUIgLyogVHlwZUFoZWFkLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUU0MzEwNUI4MTY3NTBG
MEMwMERCMkZCOCAvKiBOb2RlVHJhdmVyc2FsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUQ2Njgx
N0ZBMTY2RkU2RDcwMEZBMDdCNCAvKiBIVE1MVGVtcGxhdGVFbGVtZW50LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUQ2NDg5RDI1MTY2RkZDRjEwMDdDMDMxQiAvKiBKU0hUTUxUZW1wbGF0ZUVsZW1l
bnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRDZGNzk2MEQxNjZGRkVDRTAwNzZERDE4IC8qIEpT
SFRNTFRlbXBsYXRlRWxlbWVudEN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVP
YmplY3QuY3BwCShyZXZpc2lvbiAxMzcxMDgpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMsNiAr
NjMsNyBAQAogI2luY2x1ZGUgIkxvY2FsaXplZFN0cmluZ3MuaCIKICNpbmNsdWRlICJNYXRoTUxO
YW1lcy5oIgogI2luY2x1ZGUgIk5vZGVMaXN0LmgiCisjaW5jbHVkZSAiTm9kZVRyYXZlcnNhbC5o
IgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQcm9ncmVzc1RyYWNrZXIuaCIKICNpbmNs
dWRlICJUZXh0LmgiCkBAIC0xNTg2LDcgKzE1ODcsNyBAQCBTdHJpbmcgQWNjZXNzaWJpbGl0eU5v
ZGVPYmplY3Q6OmFjY2Vzc2liCiAgICAgICAgIEVsZW1lbnQqIGlkRWxlbWVudCA9IGVsZW1lbnRz
W2ldOwogCiAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKGFjY2Vzc2libGVOYW1lRm9yTm9kZShpZEVs
ZW1lbnQpKTsKLSAgICAgICAgZm9yIChOb2RlKiBuID0gaWRFbGVtZW50LT5maXJzdENoaWxkKCk7
IG47IG4gPSBuLT50cmF2ZXJzZU5leHROb2RlKGlkRWxlbWVudCkpCisgICAgICAgIGZvciAoTm9k
ZSogbiA9IGlkRWxlbWVudC0+Zmlyc3RDaGlsZCgpOyBuOyBuID0gTm9kZVRyYXZlcnNhbDo6bmV4
dChuLCBpZEVsZW1lbnQpKQogICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoYWNjZXNzaWJsZU5h
bWVGb3JOb2RlKG4pKTsKIAogICAgICAgICBpZiAoaSAhPSBzaXplIC0gMSkKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNw
cAkocmV2aXNpb24gMTM3MTA4KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nl
c3NpYmlsaXR5T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsNyBAQAogI2lu
Y2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIkxvY2FsaXplZFN0cmluZ3MuaCIKICNpbmNs
dWRlICJOb2RlTGlzdC5oIgorI2luY2x1ZGUgIk5vZGVUcmF2ZXJzYWwuaCIKICNpbmNsdWRlICJO
b3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJSZW5kZXJJbWFn
ZS5oIgpAQCAtMzYwLDEwICszNjEsMTAgQEAgQWNjZXNzaWJpbGl0eU9iamVjdCogQWNjZXNzaWJp
bGl0eU9iamVjdAogCiAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogYWNjZXNzaWJsZU9iamVjdCA9
IGNhY2hlLT5nZXRPckNyZWF0ZShub2RlLT5yZW5kZXJlcigpKTsKICAgICB3aGlsZSAoYWNjZXNz
aWJsZU9iamVjdCAmJiBhY2Nlc3NpYmxlT2JqZWN0LT5hY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCkp
IHsKLSAgICAgICAgbm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoKTsKKyAgICAgICAgbm9k
ZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9kZSk7CiAKICAgICAgICAgd2hpbGUgKG5vZGUgJiYg
IW5vZGUtPnJlbmRlcmVyKCkpCi0gICAgICAgICAgICBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0
U2libGluZygpOworICAgICAgICAgICAgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHRTaWJsaW5n
KG5vZGUpOwogCiAgICAgICAgIGlmICghbm9kZSkKICAgICAgICAgICAgIHJldHVybiAwOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlSZW5kZXJPYmplY3QuY3BwCShyZXZpc2lvbiAxMzcxMDgpCisrKyBTb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02MSw2ICs2MSw3IEBACiAjaW5jbHVkZSAiTG9jYWxpemVkU3RyaW5ncy5oIgogI2lu
Y2x1ZGUgIk1hdGhNTE5hbWVzLmgiCiAjaW5jbHVkZSAiTm9kZUxpc3QuaCIKKyNpbmNsdWRlICJO
b2RlVHJhdmVyc2FsLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlByb2dyZXNzVHJh
Y2tlci5oIgogI2luY2x1ZGUgIlJlbmRlckJ1dHRvbi5oIgpAQCAtMjY1Niw3ICsyNjU3LDcgQEAg
dm9pZCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjphZGRJbWFnZQogICAgIGlmICghbWFwKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBmb3IgKE5vZGUqIGN1cnJlbnQgPSBtYXAtPmZpcnN0Q2hp
bGQoKTsgY3VycmVudDsgY3VycmVudCA9IGN1cnJlbnQtPnRyYXZlcnNlTmV4dE5vZGUobWFwKSkg
eworICAgIGZvciAoTm9kZSogY3VycmVudCA9IG1hcC0+Zmlyc3RDaGlsZCgpOyBjdXJyZW50OyBj
dXJyZW50ID0gTm9kZVRyYXZlcnNhbDo6bmV4dChjdXJyZW50LCBtYXApKSB7CiAgICAgICAgIAog
ICAgICAgICAvLyBhZGQgYW4gPGFyZWE+IGVsZW1lbnQgZm9yIHRoaXMgY2hpbGQgaWYgaXQgaGFz
IGEgbGluawogICAgICAgICBpZiAoY3VycmVudC0+aGFzVGFnTmFtZShhcmVhVGFnKSAmJiBjdXJy
ZW50LT5pc0xpbmsoKSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEb2N1
bWVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNEb2N1bWVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDEzNzEwOCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRG9jdW1lbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2
ICszNCw3IEBACiAjaW5jbHVkZSAiSlNUb3VjaC5oIgogI2luY2x1ZGUgIkpTVG91Y2hMaXN0Lmgi
CiAjaW5jbHVkZSAiTG9jYXRpb24uaCIKKyNpbmNsdWRlICJOb2RlVHJhdmVyc2FsLmgiCiAjaW5j
bHVkZSAiU2NyaXB0Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIlRvdWNoTGlzdC5oIgogCkBAIC0x
MDcsNyArMTA4LDcgQEAgSlNWYWx1ZSB0b0pTKEV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYQog
ICAgIC8vIGJhY2svZm9yd2FyZCBjYWNoZS4KICAgICBpZiAoIWRvY3VtZW50LT5mcmFtZSgpKSB7
CiAgICAgICAgIHNpemVfdCBub2RlQ291bnQgPSAwOwotICAgICAgICBmb3IgKE5vZGUqIG4gPSBk
b2N1bWVudDsgbjsgbiA9IG4tPnRyYXZlcnNlTmV4dE5vZGUoKSkKKyAgICAgICAgZm9yIChOb2Rl
KiBuID0gZG9jdW1lbnQ7IG47IG4gPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG4pKQogICAgICAgICAg
ICAgbm9kZUNvdW50Kys7CiAgICAgICAgIAogICAgICAgICBleGVjLT5oZWFwKCktPnJlcG9ydEV4
dHJhTWVtb3J5Q29zdChub2RlQ291bnQgKiBzaXplb2YoTm9kZSkpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvdjgvUmV0YWluZWRET01JbmZvLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy92OC9SZXRhaW5lZERPTUluZm8uY3BwCShyZXZpc2lvbiAxMzcx
MDgpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9SZXRhaW5lZERPTUluZm8uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiUmV0YWluZWRET01JbmZv
LmgiCiAKICNpbmNsdWRlICJDb250YWluZXJOb2RlLmgiCisjaW5jbHVkZSAiTm9kZVRyYXZlcnNh
bC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTgwLDcgKzgxLDcgQEAgaW50cHRyX3Qg
UmV0YWluZWRET01JbmZvOjpHZXRFbGVtZW50Q291bgogICAgIGludHB0cl90IGNvdW50ID0gMTsK
ICAgICBOb2RlKiBjdXJyZW50ID0gbV9yb290OwogICAgIHdoaWxlIChjdXJyZW50KSB7Ci0gICAg
ICAgIGN1cnJlbnQgPSBjdXJyZW50LT50cmF2ZXJzZU5leHROb2RlKG1fcm9vdCk7CisgICAgICAg
IGN1cnJlbnQgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KGN1cnJlbnQsIG1fcm9vdCk7CiAgICAgICAg
ICsrY291bnQ7CiAgICAgfQogICAgIHJldHVybiBjb3VudDsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2Nzcy9TZWxlY3RvckNoZWNrZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nz
cy9TZWxlY3RvckNoZWNrZXIuY3BwCShyZXZpc2lvbiAxMzcxMDgpCisrKyBTb3VyY2UvV2ViQ29y
ZS9jc3MvU2VsZWN0b3JDaGVja2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsNiArNDQsNyBA
QAogI2luY2x1ZGUgIkhUTUxTdHlsZUVsZW1lbnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb24uaCIKICNpbmNsdWRlICJOb2RlUmVuZGVyU3R5bGUuaCIKKyNpbmNsdWRlICJO
b2RlVHJhdmVyc2FsLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlBhZ2VHcm91cC5o
IgogI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgpAQCAtMTIyNCw3ICsxMjI1LDcgQEAgdm9pZCBT
ZWxlY3RvckNoZWNrZXI6OmFsbFZpc2l0ZWRTdGF0ZUNoYQogewogICAgIGlmIChtX2xpbmtzQ2hl
Y2tlZEZvclZpc2l0ZWRTdGF0ZS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKLSAgICBmb3Ig
KE5vZGUqIG5vZGUgPSBtX2RvY3VtZW50OyBub2RlOyBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0
Tm9kZSgpKSB7CisgICAgZm9yIChOb2RlKiBub2RlID0gbV9kb2N1bWVudDsgbm9kZTsgbm9kZSA9
IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9kZSkpIHsKICAgICAgICAgaWYgKG5vZGUtPmlzTGluaygp
KQogICAgICAgICAgICAgbm9kZS0+c2V0TmVlZHNTdHlsZVJlY2FsYygpOwogICAgIH0KQEAgLTEy
MzQsNyArMTIzNSw3IEBAIHZvaWQgU2VsZWN0b3JDaGVja2VyOjp2aXNpdGVkU3RhdGVDaGFuZ2UK
IHsKICAgICBpZiAoIW1fbGlua3NDaGVja2VkRm9yVmlzaXRlZFN0YXRlLmNvbnRhaW5zKHZpc2l0
ZWRIYXNoKSkKICAgICAgICAgcmV0dXJuOwotICAgIGZvciAoTm9kZSogbm9kZSA9IG1fZG9jdW1l
bnQ7IG5vZGU7IG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKCkpIHsKKyAgICBmb3IgKE5v
ZGUqIG5vZGUgPSBtX2RvY3VtZW50OyBub2RlOyBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dChu
b2RlKSkgewogICAgICAgICBMaW5rSGFzaCBoYXNoID0gMDsKICAgICAgICAgaWYgKG5vZGUtPmhh
c1RhZ05hbWUoYVRhZykpCiAgICAgICAgICAgICBoYXNoID0gc3RhdGljX2Nhc3Q8SFRNTEFuY2hv
ckVsZW1lbnQqPihub2RlKS0+dmlzaXRlZExpbmtIYXNoKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9jc3MvU3R5bGVJbnZhbGlkYXRpb25BbmFseXNpcy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvY3NzL1N0eWxlSW52YWxpZGF0aW9uQW5hbHlzaXMuY3BwCShyZXZpc2lvbiAxMzcx
MDgpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVJbnZhbGlkYXRpb25BbmFseXNpcy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgIkNTU1NlbGVjdG9y
TGlzdC5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiTm9kZVRyYXZlcnNhbC5o
IgogI2luY2x1ZGUgIlN0eWxlUnVsZUltcG9ydC5oIgogI2luY2x1ZGUgIlN0eWxlU2hlZXRDb250
ZW50cy5oIgogI2luY2x1ZGUgIlN0eWxlZEVsZW1lbnQuaCIKQEAgLTExOSwxNyArMTIwLDE3IEBA
IHZvaWQgU3R5bGVJbnZhbGlkYXRpb25BbmFseXNpczo6aW52YWxpZGEKICAgICBOb2RlKiBub2Rl
ID0gZG9jdW1lbnQtPmZpcnN0Q2hpbGQoKTsKICAgICB3aGlsZSAobm9kZSkgewogICAgICAgICBp
ZiAoIW5vZGUtPmlzU3R5bGVkRWxlbWVudCgpKSB7Ci0gICAgICAgICAgICBub2RlID0gbm9kZS0+
dHJhdmVyc2VOZXh0Tm9kZSgpOworICAgICAgICAgICAgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5l
eHQobm9kZSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogICAgICAgICBTdHls
ZWRFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8U3R5bGVkRWxlbWVudCo+KG5vZGUpOwog
ICAgICAgICBpZiAoZWxlbWVudE1hdGNoZXNTZWxlY3RvclNjb3BlcyhlbGVtZW50LCBtX2lkU2Nv
cGVzLCBtX2NsYXNzU2NvcGVzKSkgewogICAgICAgICAgICAgZWxlbWVudC0+c2V0TmVlZHNTdHls
ZVJlY2FsYygpOwogICAgICAgICAgICAgLy8gVGhlIHdob2xlIHN1YnRyZWUgaXMgbm93IGludmFs
aWRhdGVkLCB3ZSBjYW4gc2tpcCB0byB0aGUgbmV4dCBzaWJsaW5nLgotICAgICAgICAgICAgbm9k
ZSA9IG5vZGUtPnRyYXZlcnNlTmV4dFNpYmxpbmcoKTsKKyAgICAgICAgICAgIG5vZGUgPSBOb2Rl
VHJhdmVyc2FsOjpuZXh0U2libGluZyhub2RlKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICB9Ci0gICAgICAgIG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKCk7CisgICAgICAg
IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUpOwogICAgIH0KIH0KIApJbmRleDogU291
cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmNwcAkocmV2aXNpb24gMTM3MTA4KQorKysgU291cmNl
L1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2ICsz
OSw3IEBACiAjaW5jbHVkZSAiTWVtb3J5Q2FjaGUuaCIKICNpbmNsdWRlICJNdXRhdGlvbkV2ZW50
LmgiCiAjaW5jbHVkZSAiTm9kZVJlbmRlclN0eWxlLmgiCisjaW5jbHVkZSAiTm9kZVRyYXZlcnNh
bC5oIgogI2luY2x1ZGUgIlJlc291cmNlTG9hZFNjaGVkdWxlci5oIgogI2luY2x1ZGUgIlBhZ2Uu
aCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmF0ZWdpZXMuaCIKQEAgLTEwNDcsNyArMTA0OCw3IEBA
IHN0YXRpYyB2b2lkIGRpc3BhdGNoQ2hpbGRJbnNlcnRpb25FdmVudHMKIAogICAgIC8vIGRpc3Bh
dGNoIHRoZSBET01Ob2RlSW5zZXJ0ZWRJbnRvRG9jdW1lbnQgZXZlbnQgdG8gYWxsIGRlc2NlbmRh
bnRzCiAgICAgaWYgKGMtPmluRG9jdW1lbnQoKSAmJiBkb2N1bWVudC0+aGFzTGlzdGVuZXJUeXBl
KERvY3VtZW50OjpET01OT0RFSU5TRVJURURJTlRPRE9DVU1FTlRfTElTVEVORVIpKSB7Ci0gICAg
ICAgIGZvciAoOyBjOyBjID0gYy0+dHJhdmVyc2VOZXh0Tm9kZShjaGlsZCkpCisgICAgICAgIGZv
ciAoOyBjOyBjID0gTm9kZVRyYXZlcnNhbDo6bmV4dChjLmdldCgpLCBjaGlsZCkpCiAgICAgICAg
ICAgICBjLT5kaXNwYXRjaFNjb3BlZEV2ZW50KE11dGF0aW9uRXZlbnQ6OmNyZWF0ZShldmVudE5h
bWVzKCkuRE9NTm9kZUluc2VydGVkSW50b0RvY3VtZW50RXZlbnQsIGZhbHNlKSk7CiAgICAgfQog
fQpAQCAtMTA3NSw3ICsxMDc2LDcgQEAgc3RhdGljIHZvaWQgZGlzcGF0Y2hDaGlsZFJlbW92YWxF
dmVudHMoTgogCiAgICAgLy8gZGlzcGF0Y2ggdGhlIERPTU5vZGVSZW1vdmVkRnJvbURvY3VtZW50
IGV2ZW50IHRvIGFsbCBkZXNjZW5kYW50cwogICAgIGlmIChjLT5pbkRvY3VtZW50KCkgJiYgZG9j
dW1lbnQtPmhhc0xpc3RlbmVyVHlwZShEb2N1bWVudDo6RE9NTk9ERVJFTU9WRURGUk9NRE9DVU1F
TlRfTElTVEVORVIpKSB7Ci0gICAgICAgIGZvciAoOyBjOyBjID0gYy0+dHJhdmVyc2VOZXh0Tm9k
ZShjaGlsZCkpCisgICAgICAgIGZvciAoOyBjOyBjID0gTm9kZVRyYXZlcnNhbDo6bmV4dChjLmdl
dCgpLCBjaGlsZCkpCiAgICAgICAgICAgICBjLT5kaXNwYXRjaFNjb3BlZEV2ZW50KE11dGF0aW9u
RXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuRE9NTm9kZVJlbW92ZWRGcm9tRG9jdW1lbnRFdmVu
dCwgZmFsc2UpKTsKICAgICB9CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVy
Tm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmgJ
KHJldmlzaW9uIDEzNzEwOCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEzNCwxMCArMTM0LDYgQEAgcHVibGljOgogCiAgICAgdmlydHVh
bCBib29sIGNoaWxkU2hvdWxkQ3JlYXRlUmVuZGVyZXIoY29uc3QgTm9kZVJlbmRlcmluZ0NvbnRl
eHQmKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKLSAgICAvLyBNb3JlIGVmZmljaWVudCB2ZXJz
aW9ucyBvZiB0aGVzZSB0d28gZnVuY3Rpb25zIGZvciB0aGUgY2FzZSB3aGVyZSB3ZSBhcmUgc3Rh
cnRpbmcgd2l0aCBhIENvbnRhaW5lck5vZGUuCi0gICAgTm9kZSogdHJhdmVyc2VOZXh0Tm9kZSgp
IGNvbnN0OwotICAgIE5vZGUqIHRyYXZlcnNlTmV4dE5vZGUoY29uc3QgTm9kZSogc3RheVdpdGhp
bikgY29uc3Q7Ci0KICAgICB2aXJ0dWFsIHZvaWQgcmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2Jq
ZWN0SW5mbyogbWVtb3J5T2JqZWN0SW5mbykgY29uc3QKICAgICB7CiAgICAgICAgIE1lbW9yeUNs
YXNzSW5mbyBpbmZvKG1lbW9yeU9iamVjdEluZm8sIHRoaXMsIFdlYkNvcmVNZW1vcnlUeXBlczo6
RE9NKTsKQEAgLTI2OSw1NCArMjY1LDYgQEAgaW5saW5lIE5vZGUqIE5vZGU6OmhpZ2hlc3RBbmNl
c3RvcigpIGNvbgogICAgIHJldHVybiBoaWdoZXN0OwogfQogCi1pbmxpbmUgTm9kZSogTm9kZTo6
dHJhdmVyc2VOZXh0U2libGluZygpIGNvbnN0Ci17Ci0gICAgaWYgKG5leHRTaWJsaW5nKCkpCi0g
ICAgICAgIHJldHVybiBuZXh0U2libGluZygpOwotICAgIHJldHVybiB0cmF2ZXJzZU5leHRBbmNl
c3RvclNpYmxpbmcoKTsKLX0KLQotaW5saW5lIE5vZGUqIE5vZGU6OnRyYXZlcnNlTmV4dE5vZGUo
KSBjb25zdAotewotICAgIGlmIChmaXJzdENoaWxkKCkpCi0gICAgICAgIHJldHVybiBmaXJzdENo
aWxkKCk7Ci0gICAgcmV0dXJuIHRyYXZlcnNlTmV4dFNpYmxpbmcoKTsKLX0KLQotaW5saW5lIE5v
ZGUqIENvbnRhaW5lck5vZGU6OnRyYXZlcnNlTmV4dE5vZGUoKSBjb25zdAotewotICAgIC8vIE1v
cmUgZWZmaWNpZW50IHRoYW4gdGhlIE5vZGU6OnRyYXZlcnNlTmV4dE5vZGUgYWJvdmUsIGJlY2F1
c2UKLSAgICAvLyB0aGlzIGRvZXMgbm90IG5lZWQgdG8gZG8gdGhlIGlzQ29udGFpbmVyTm9kZSBj
aGVjayBpbnNpZGUgZmlyc3RDaGlsZC4KLSAgICBpZiAoZmlyc3RDaGlsZCgpKQotICAgICAgICBy
ZXR1cm4gZmlyc3RDaGlsZCgpOwotICAgIHJldHVybiB0cmF2ZXJzZU5leHRTaWJsaW5nKCk7Ci19
Ci0KLWlubGluZSBOb2RlKiBOb2RlOjp0cmF2ZXJzZU5leHRTaWJsaW5nKGNvbnN0IE5vZGUqIHN0
YXlXaXRoaW4pIGNvbnN0Ci17Ci0gICAgaWYgKHRoaXMgPT0gc3RheVdpdGhpbikKLSAgICAgICAg
cmV0dXJuIDA7Ci0gICAgaWYgKG5leHRTaWJsaW5nKCkpCi0gICAgICAgIHJldHVybiBuZXh0U2li
bGluZygpOwotICAgIHJldHVybiB0cmF2ZXJzZU5leHRBbmNlc3RvclNpYmxpbmcoc3RheVdpdGhp
bik7Ci19Ci0KLWlubGluZSBOb2RlKiBOb2RlOjp0cmF2ZXJzZU5leHROb2RlKGNvbnN0IE5vZGUq
IHN0YXlXaXRoaW4pIGNvbnN0Ci17Ci0gICAgaWYgKGZpcnN0Q2hpbGQoKSkKLSAgICAgICAgcmV0
dXJuIGZpcnN0Q2hpbGQoKTsKLSAgICByZXR1cm4gdHJhdmVyc2VOZXh0U2libGluZyhzdGF5V2l0
aGluKTsKLX0KLQotaW5saW5lIE5vZGUqIENvbnRhaW5lck5vZGU6OnRyYXZlcnNlTmV4dE5vZGUo
Y29uc3QgTm9kZSogc3RheVdpdGhpbikgY29uc3QKLXsKLSAgICAvLyBNb3JlIGVmZmljaWVudCB0
aGFuIHRoZSBOb2RlOjp0cmF2ZXJzZU5leHROb2RlIGFib3ZlLCBiZWNhdXNlCi0gICAgLy8gdGhp
cyBkb2VzIG5vdCBuZWVkIHRvIGRvIHRoZSBpc0NvbnRhaW5lck5vZGUgY2hlY2sgaW5zaWRlIGZp
cnN0Q2hpbGQuCi0gICAgaWYgKGZpcnN0Q2hpbGQoKSkKLSAgICAgICAgcmV0dXJuIGZpcnN0Q2hp
bGQoKTsKLSAgICByZXR1cm4gdHJhdmVyc2VOZXh0U2libGluZyhzdGF5V2l0aGluKTsKLX0KLQog
Ly8gVGhpcyBjb25zdGFudCBjb250cm9scyBob3cgbXVjaCBidWZmZXIgaXMgaW5pdGlhbGx5IGFs
bG9jYXRlZAogLy8gZm9yIGEgTm9kZSBWZWN0b3IgdGhhdCBpcyB1c2VkIHRvIHN0b3JlIGNoaWxk
IE5vZGVzIG9mIGEgZ2l2ZW4gTm9kZS4KIC8vIEZJWE1FOiBPcHRpbWl6ZSB0aGUgdmFsdWUuCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZUFsZ29yaXRobXMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZUFsZ29yaXRobXMuaAkocmV2
aXNpb24gMTM3MTA4KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGVBbGdvcml0
aG1zLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJGcmFtZS5o
IgogI2luY2x1ZGUgIkhUTUxGcmFtZU93bmVyRWxlbWVudC5oIgogI2luY2x1ZGUgIkluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbi5oIgorI2luY2x1ZGUgIk5vZGVUcmF2ZXJzYWwuaCIKICNpbmNsdWRl
IDx3dGYvQXNzZXJ0aW9ucy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zMTUsOCArMzE2
LDcgQEAgcHJpdmF0ZToKIAogaW5saW5lIHZvaWQgQ2hpbGRGcmFtZURpc2Nvbm5lY3Rvcjo6Y29s
bGVjdERlc2NlbmRhbnQoTm9kZSogcm9vdCwgU2hvdWxkSW5jbHVkZVJvb3Qgc2hvdWxkSW5jbHVk
ZVJvb3QpCiB7Ci0gICAgZm9yIChOb2RlKiBub2RlID0gc2hvdWxkSW5jbHVkZVJvb3QgPT0gSW5j
bHVkZVJvb3QgPyByb290IDogcm9vdC0+Zmlyc3RDaGlsZCgpOyBub2RlOwotICAgICAgICAgICAg
bm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUocm9vdCkpIHsKKyAgICBmb3IgKE5vZGUqIG5v
ZGUgPSBzaG91bGRJbmNsdWRlUm9vdCA9PSBJbmNsdWRlUm9vdCA/IHJvb3QgOiByb290LT5maXJz
dENoaWxkKCk7IG5vZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUsIHJvb3QpKSB7
CiAgICAgICAgIGlmICghbm9kZS0+aXNFbGVtZW50Tm9kZSgpKQogICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgIEVsZW1lbnQqIGVsZW1lbnQgPSB0b0VsZW1lbnQobm9kZSk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2RvbS9Eb2N1bWVudC5jcHAJKHJldmlzaW9uIDEzNzEwOCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2RvbS9Eb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExOCw2ICsxMTgsNyBAQAogI2lu
Y2x1ZGUgIk5vZGVGaWx0ZXIuaCIKICNpbmNsdWRlICJOb2RlSXRlcmF0b3IuaCIKICNpbmNsdWRl
ICJOb2RlUmFyZURhdGEuaCIKKyNpbmNsdWRlICJOb2RlVHJhdmVyc2FsLmgiCiAjaW5jbHVkZSAi
Tm9kZVdpdGhJbmRleC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQYWdlR3JvdXAu
aCIKQEAgLTc0Nyw3ICs3NDgsNyBAQCB2b2lkIERvY3VtZW50OjpidWlsZEFjY2Vzc0tleU1hcChU
cmVlU2NvCiB7CiAgICAgQVNTRVJUKHNjb3BlKTsKICAgICBOb2RlKiByb290Tm9kZSA9IHNjb3Bl
LT5yb290Tm9kZSgpOwotICAgIGZvciAoTm9kZSogbm9kZSA9IHJvb3ROb2RlOyBub2RlOyBub2Rl
ID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZShyb290Tm9kZSkpIHsKKyAgICBmb3IgKE5vZGUqIG5v
ZGUgPSByb290Tm9kZTsgbm9kZTsgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9kZSwgcm9v
dE5vZGUpKSB7CiAgICAgICAgIGlmICghbm9kZS0+aXNFbGVtZW50Tm9kZSgpKQogICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxFbGVt
ZW50Kj4obm9kZSk7CkBAIC0yMTU1LDcgKzIxNTYsNyBAQCB2b2lkIERvY3VtZW50OjpyZW1vdmVB
bGxFdmVudExpc3RlbmVycygpCiAKICAgICBpZiAoRE9NV2luZG93KiBkb21XaW5kb3cgPSB0aGlz
LT5kb21XaW5kb3coKSkKICAgICAgICAgZG9tV2luZG93LT5yZW1vdmVBbGxFdmVudExpc3RlbmVy
cygpOwotICAgIGZvciAoTm9kZSogbm9kZSA9IGZpcnN0Q2hpbGQoKTsgbm9kZTsgbm9kZSA9IG5v
ZGUtPnRyYXZlcnNlTmV4dE5vZGUoKSkKKyAgICBmb3IgKE5vZGUqIG5vZGUgPSBmaXJzdENoaWxk
KCk7IG5vZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUpKQogICAgICAgICBub2Rl
LT5yZW1vdmVBbGxFdmVudExpc3RlbmVycygpOwogfQogCkBAIC0yNjY0LDcgKzI2NjUsNyBAQCB2
b2lkIERvY3VtZW50Ojp1cGRhdGVCYXNlVVJMKCkKICAgICBpZiAoIWVxdWFsSWdub3JpbmdGcmFn
bWVudElkZW50aWZpZXIob2xkQmFzZVVSTCwgbV9iYXNlVVJMKSkgewogICAgICAgICAvLyBCYXNl
IFVSTCBjaGFuZ2UgY2hhbmdlcyBhbnkgcmVsYXRpdmUgdmlzaXRlZCBsaW5rcy4KICAgICAgICAg
Ly8gRklYTUU6IFRoZXJlIGFyZSBvdGhlciBVUkxzIGluIHRoZSB0cmVlIHRoYXQgd291bGQgbmVl
ZCB0byBiZSByZS1ldmFsdWF0ZWQgb24gZHluYW1pYyBiYXNlIFVSTCBjaGFuZ2UuIFN0eWxlIHNo
b3VsZCBiZSBpbnZhbGlkYXRlZCB0b28uCi0gICAgICAgIGZvciAoTm9kZSogbm9kZSA9IGZpcnN0
Q2hpbGQoKTsgbm9kZTsgbm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoKSkgeworICAgICAg
ICBmb3IgKE5vZGUqIG5vZGUgPSBmaXJzdENoaWxkKCk7IG5vZGU7IG5vZGUgPSBOb2RlVHJhdmVy
c2FsOjpuZXh0KG5vZGUpKSB7CiAgICAgICAgICAgICBpZiAobm9kZS0+aGFzVGFnTmFtZShhVGFn
KSkKICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxIVE1MQW5jaG9yRWxlbWVudCo+KG5vZGUp
LT5pbnZhbGlkYXRlQ2FjaGVkVmlzaXRlZExpbmtIYXNoKCk7CiAgICAgICAgIH0KQEAgLTI2ODIs
NyArMjY4Myw3IEBAIHZvaWQgRG9jdW1lbnQ6OnByb2Nlc3NCYXNlRWxlbWVudCgpCiAgICAgLy8g
RmluZCB0aGUgZmlyc3QgaHJlZiBhdHRyaWJ1dGUgaW4gYSBiYXNlIGVsZW1lbnQgYW5kIHRoZSBm
aXJzdCB0YXJnZXQgYXR0cmlidXRlIGluIGEgYmFzZSBlbGVtZW50LgogICAgIGNvbnN0IEF0b21p
Y1N0cmluZyogaHJlZiA9IDA7CiAgICAgY29uc3QgQXRvbWljU3RyaW5nKiB0YXJnZXQgPSAwOwot
ICAgIGZvciAoTm9kZSogbm9kZSA9IGRvY3VtZW50KCktPmZpcnN0Q2hpbGQoKTsgbm9kZSAmJiAo
IWhyZWYgfHwgIXRhcmdldCk7IG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKCkpIHsKKyAg
ICBmb3IgKE5vZGUqIG5vZGUgPSBkb2N1bWVudCgpLT5maXJzdENoaWxkKCk7IG5vZGUgJiYgKCFo
cmVmIHx8ICF0YXJnZXQpOyBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dChub2RlKSkgewogICAg
ICAgICBpZiAobm9kZS0+aGFzVGFnTmFtZShiYXNlVGFnKSkgewogICAgICAgICAgICAgaWYgKCFo
cmVmKSB7CiAgICAgICAgICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9IHN0YXRp
Y19jYXN0PEVsZW1lbnQqPihub2RlKS0+ZmFzdEdldEF0dHJpYnV0ZShocmVmQXR0cik7CkBAIC0y
ODI2LDcgKzI4MjcsNyBAQCBpbnQgRG9jdW1lbnQ6Om5vZGVBYnNJbmRleChOb2RlICpub2RlKQog
ICAgIEFTU0VSVChub2RlLT5kb2N1bWVudCgpID09IHRoaXMpOwogCiAgICAgaW50IGFic0luZGV4
ID0gMDsKLSAgICBmb3IgKE5vZGUqIG4gPSBub2RlOyBuICYmIG4gIT0gdGhpczsgbiA9IG4tPnRy
YXZlcnNlUHJldmlvdXNOb2RlKCkpCisgICAgZm9yIChOb2RlKiBuID0gbm9kZTsgbiAmJiBuICE9
IHRoaXM7IG4gPSBOb2RlVHJhdmVyc2FsOjpwcmV2aW91cyhuKSkKICAgICAgICAgYWJzSW5kZXgr
KzsKICAgICByZXR1cm4gYWJzSW5kZXg7CiB9CkBAIC0yODM1LDcgKzI4MzYsNyBAQCBOb2RlKiBE
b2N1bWVudDo6bm9kZVdpdGhBYnNJbmRleChpbnQgYWJzCiB7CiAgICAgTm9kZSogbiA9IHRoaXM7
CiAgICAgZm9yIChpbnQgaSA9IDA7IG4gJiYgKGkgPCBhYnNJbmRleCk7IGkrKykKLSAgICAgICAg
biA9IG4tPnRyYXZlcnNlTmV4dE5vZGUoKTsKKyAgICAgICAgbiA9IE5vZGVUcmF2ZXJzYWw6Om5l
eHQobik7CiAgICAgcmV0dXJuIG47CiB9CiAKQEAgLTM0NDEsNyArMzQ0Miw3IEBAIHZvaWQgRG9j
dW1lbnQ6OmdldEZvY3VzYWJsZU5vZGVzKFZlY3RvcjwKIHsKICAgICB1cGRhdGVMYXlvdXQoKTsK
IAotICAgIGZvciAoTm9kZSogbm9kZSA9IGZpcnN0Q2hpbGQoKTsgbm9kZTsgbm9kZSA9IG5vZGUt
PnRyYXZlcnNlTmV4dE5vZGUoKSkgeworICAgIGZvciAoTm9kZSogbm9kZSA9IGZpcnN0Q2hpbGQo
KTsgbm9kZTsgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9kZSkpIHsKICAgICAgICAgaWYg
KG5vZGUtPmlzRm9jdXNhYmxlKCkpCiAgICAgICAgICAgICBub2Rlcy5hcHBlbmQobm9kZSk7CiAg
ICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50TWFya2VyQ29udHJvbGxlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50TWFya2VyQ29udHJv
bGxlci5jcHAJKHJldmlzaW9uIDEzNzEwOCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVu
dE1hcmtlckNvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAj
aW5jbHVkZSAiRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmgiCiAKICNpbmNsdWRlICJOb2RlLmgi
CisjaW5jbHVkZSAiTm9kZVRyYXZlcnNhbC5oIgogI2luY2x1ZGUgIlJhbmdlLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyT2JqZWN0LmgiCiAjaW5jbHVkZSAiUmVuZGVyZWREb2N1bWVudE1hcmtlci5oIgpA
QCAtMzcwLDcgKzM3MSw3IEBAIFZlY3RvcjxEb2N1bWVudE1hcmtlcio+IERvY3VtZW50TWFya2Vy
Q28KICAgICBBU1NFUlQoZW5kQ29udGFpbmVyKTsKIAogICAgIE5vZGUqIHBhc3RMYXN0Tm9kZSA9
IHJhbmdlLT5wYXN0TGFzdE5vZGUoKTsKLSAgICBmb3IgKE5vZGUqIG5vZGUgPSByYW5nZS0+Zmly
c3ROb2RlKCk7IG5vZGUgIT0gcGFzdExhc3ROb2RlOyBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0
Tm9kZSgpKSB7CisgICAgZm9yIChOb2RlKiBub2RlID0gcmFuZ2UtPmZpcnN0Tm9kZSgpOyBub2Rl
ICE9IHBhc3RMYXN0Tm9kZTsgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9kZSkpIHsKICAg
ICAgICAgVmVjdG9yPERvY3VtZW50TWFya2VyKj4gbWFya2VycyA9IG1hcmtlcnNGb3Iobm9kZSk7
CiAgICAgICAgIFZlY3RvcjxEb2N1bWVudE1hcmtlcio+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBt
YXJrZXJzLmVuZCgpOwogICAgICAgICBmb3IgKFZlY3RvcjxEb2N1bWVudE1hcmtlcio+Ojpjb25z
dF9pdGVyYXRvciBpdCA9IG1hcmtlcnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CkBAIC01
NzEsNyArNTcyLDcgQEAgdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnNldE1hcmtlcgog
ICAgIE5vZGUqIGVuZENvbnRhaW5lciA9IHJhbmdlLT5lbmRDb250YWluZXIoZWMpOwogCiAgICAg
Tm9kZSogcGFzdExhc3ROb2RlID0gcmFuZ2UtPnBhc3RMYXN0Tm9kZSgpOwotICAgIGZvciAoTm9k
ZSogbm9kZSA9IHJhbmdlLT5maXJzdE5vZGUoKTsgbm9kZSAhPSBwYXN0TGFzdE5vZGU7IG5vZGUg
PSBub2RlLT50cmF2ZXJzZU5leHROb2RlKCkpIHsKKyAgICBmb3IgKE5vZGUqIG5vZGUgPSByYW5n
ZS0+Zmlyc3ROb2RlKCk7IG5vZGUgIT0gcGFzdExhc3ROb2RlOyBub2RlID0gTm9kZVRyYXZlcnNh
bDo6bmV4dChub2RlKSkgewogICAgICAgICBpbnQgc3RhcnRPZmZzZXQgPSBub2RlID09IHN0YXJ0
Q29udGFpbmVyID8gcmFuZ2UtPnN0YXJ0T2Zmc2V0KGVjKSA6IDA7CiAgICAgICAgIGludCBlbmRP
ZmZzZXQgPSBub2RlID09IGVuZENvbnRhaW5lciA/IHJhbmdlLT5lbmRPZmZzZXQoZWMpIDogSU5U
X01BWDsKICAgICAgICAgc2V0TWFya2Vyc0FjdGl2ZShub2RlLCBzdGFydE9mZnNldCwgZW5kT2Zm
c2V0LCBhY3RpdmUpOwpAQCAtNjE3LDcgKzYxOCw3IEBAIGJvb2wgRG9jdW1lbnRNYXJrZXJDb250
cm9sbGVyOjpoYXNNYXJrZXIKICAgICBBU1NFUlQoZW5kQ29udGFpbmVyKTsKIAogICAgIE5vZGUq
IHBhc3RMYXN0Tm9kZSA9IHJhbmdlLT5wYXN0TGFzdE5vZGUoKTsKLSAgICBmb3IgKE5vZGUqIG5v
ZGUgPSByYW5nZS0+Zmlyc3ROb2RlKCk7IG5vZGUgIT0gcGFzdExhc3ROb2RlOyBub2RlID0gbm9k
ZS0+dHJhdmVyc2VOZXh0Tm9kZSgpKSB7CisgICAgZm9yIChOb2RlKiBub2RlID0gcmFuZ2UtPmZp
cnN0Tm9kZSgpOyBub2RlICE9IHBhc3RMYXN0Tm9kZTsgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5l
eHQobm9kZSkpIHsKICAgICAgICAgVmVjdG9yPERvY3VtZW50TWFya2VyKj4gbWFya2VycyA9IG1h
cmtlcnNGb3Iobm9kZSk7CiAgICAgICAgIFZlY3RvcjxEb2N1bWVudE1hcmtlcio+Ojpjb25zdF9p
dGVyYXRvciBlbmQgPSBtYXJrZXJzLmVuZCgpOwogICAgICAgICBmb3IgKFZlY3RvcjxEb2N1bWVu
dE1hcmtlcio+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1hcmtlcnMuYmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KSB7CkBAIC02NDQsNyArNjQ1LDcgQEAgdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xs
ZXI6OmNsZWFyRGVzYwogICAgIE5vZGUqIGVuZENvbnRhaW5lciA9IHJhbmdlLT5lbmRDb250YWlu
ZXIoKTsKIAogICAgIE5vZGUqIHBhc3RMYXN0Tm9kZSA9IHJhbmdlLT5wYXN0TGFzdE5vZGUoKTsK
LSAgICBmb3IgKE5vZGUqIG5vZGUgPSByYW5nZS0+Zmlyc3ROb2RlKCk7IG5vZGUgIT0gcGFzdExh
c3ROb2RlOyBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgpKSB7CisgICAgZm9yIChOb2Rl
KiBub2RlID0gcmFuZ2UtPmZpcnN0Tm9kZSgpOyBub2RlICE9IHBhc3RMYXN0Tm9kZTsgbm9kZSA9
IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9kZSkpIHsKICAgICAgICAgdW5zaWduZWQgc3RhcnRPZmZz
ZXQgPSBub2RlID09IHN0YXJ0Q29udGFpbmVyID8gcmFuZ2UtPnN0YXJ0T2Zmc2V0KCkgOiAwOwog
ICAgICAgICB1bnNpZ25lZCBlbmRPZmZzZXQgPSBub2RlID09IGVuZENvbnRhaW5lciA/IHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihyYW5nZS0+ZW5kT2Zmc2V0KCkpIDogc3RkOjpudW1lcmljX2xpbWl0
czx1bnNpZ25lZD46Om1heCgpOwogICAgICAgICBNYXJrZXJMaXN0KiBsaXN0ID0gbV9tYXJrZXJz
LmdldChub2RlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE9yZGVyZWRNYXAu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE9yZGVyZWRNYXAu
Y3BwCShyZXZpc2lvbiAxMzcxMDgpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRPcmRl
cmVkTWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIkVs
ZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTWFwRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1l
cy5oIgorI2luY2x1ZGUgIk5vZGVUcmF2ZXJzYWwuaCIKICNpbmNsdWRlICJUcmVlU2NvcGUuaCIK
ICNpbmNsdWRlICJXZWJDb3JlTWVtb3J5SW5zdHJ1bWVudGF0aW9uLmgiCiAjaW5jbHVkZSA8d3Rm
L01lbW9yeUluc3RydW1lbnRhdGlvbkhhc2hDb3VudGVkU2V0Lmg+CkBAIC0xMjYsNyArMTI3LDcg
QEAgaW5saW5lIEVsZW1lbnQqIERvY3VtZW50T3JkZXJlZE1hcDo6Z2V0KAogCiAgICAgaWYgKG1f
ZHVwbGljYXRlQ291bnRzLmNvbnRhaW5zKGtleSkpIHsKICAgICAgICAgLy8gV2Uga25vdyB0aGVy
ZSdzIGF0IGxlYXN0IG9uZSBub2RlIHRoYXQgbWF0Y2hlczsgaXRlcmF0ZSB0byBmaW5kIHRoZSBm
aXJzdCBvbmUuCi0gICAgICAgIGZvciAoTm9kZSogbm9kZSA9IHNjb3BlLT5yb290Tm9kZSgpLT5m
aXJzdENoaWxkKCk7IG5vZGU7IG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKCkpIHsKKyAg
ICAgICAgZm9yIChOb2RlKiBub2RlID0gc2NvcGUtPnJvb3ROb2RlKCktPmZpcnN0Q2hpbGQoKTsg
bm9kZTsgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9kZSkpIHsKICAgICAgICAgICAgIGlm
ICghbm9kZS0+aXNFbGVtZW50Tm9kZSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICAgICAgZWxlbWVudCA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50U2hhZG93LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9kb20vRWxlbWVudFNoYWRvdy5jcHAJKHJldmlzaW9uIDEzNzEwOCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2RvbS9FbGVtZW50U2hhZG93LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiAr
MzUsNyBAQAogI2luY2x1ZGUgIkhUTUxDb250ZW50RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxT
aGFkb3dFbGVtZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgiCisj
aW5jbHVkZSAiTm9kZVRyYXZlcnNhbC5oIgogI2luY2x1ZGUgIlNoYWRvd1Jvb3QuaCIKICNpbmNs
dWRlICJTdHlsZVJlc29sdmVyLmgiCiAKQEAgLTIyMCw3ICsyMjEsNyBAQCB2b2lkIEVsZW1lbnRT
aGFkb3c6OmVuc3VyZVNlbGVjdEZlYXR1cmVTCiB2b2lkIEVsZW1lbnRTaGFkb3c6OmNvbGxlY3RT
ZWxlY3RGZWF0dXJlU2V0RnJvbShTaGFkb3dSb290KiByb290KQogewogICAgIGlmIChyb290LT5o
YXNFbGVtZW50U2hhZG93KCkpIHsKLSAgICAgICAgZm9yIChOb2RlKiBub2RlID0gcm9vdC0+Zmly
c3RDaGlsZCgpOyBub2RlOyBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgpKSB7CisgICAg
ICAgIGZvciAoTm9kZSogbm9kZSA9IHJvb3QtPmZpcnN0Q2hpbGQoKTsgbm9kZTsgbm9kZSA9IE5v
ZGVUcmF2ZXJzYWw6Om5leHQobm9kZSkpIHsKICAgICAgICAgICAgIGlmIChFbGVtZW50U2hhZG93
KiBlbGVtZW50U2hhZG93ID0gbm9kZS0+aXNFbGVtZW50Tm9kZSgpID8gdG9FbGVtZW50KG5vZGUp
LT5zaGFkb3coKSA6IDApIHsKICAgICAgICAgICAgICAgICBlbGVtZW50U2hhZG93LT5lbnN1cmVT
ZWxlY3RGZWF0dXJlU2V0Q29sbGVjdGVkKCk7CiAgICAgICAgICAgICAgICAgbV9zZWxlY3RGZWF0
dXJlcy5hZGQoZWxlbWVudFNoYWRvdy0+bV9zZWxlY3RGZWF0dXJlcyk7CkBAIC0yMjksNyArMjMw
LDcgQEAgdm9pZCBFbGVtZW50U2hhZG93Ojpjb2xsZWN0U2VsZWN0RmVhdHVyZQogICAgIH0KIAog
ICAgIGlmIChyb290LT5oYXNDb250ZW50RWxlbWVudCgpKSB7Ci0gICAgICAgIGZvciAoTm9kZSog
bm9kZSA9IHJvb3QtPmZpcnN0Q2hpbGQoKTsgbm9kZTsgbm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4
dE5vZGUoKSkgeworICAgICAgICBmb3IgKE5vZGUqIG5vZGUgPSByb290LT5maXJzdENoaWxkKCk7
IG5vZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUpKSB7CiAgICAgICAgICAgICBp
ZiAoaXNIVE1MQ29udGVudEVsZW1lbnQobm9kZSkpIHsKICAgICAgICAgICAgICAgICBjb25zdCBD
U1NTZWxlY3Rvckxpc3QmIGxpc3QgPSB0b0hUTUxDb250ZW50RWxlbWVudChub2RlKS0+c2VsZWN0
b3JMaXN0KCk7CiAgICAgICAgICAgICAgICAgZm9yIChDU1NTZWxlY3Rvciogc2VsZWN0b3IgPSBs
aXN0LmZpcnN0KCk7IHNlbGVjdG9yOyBzZWxlY3RvciA9IGxpc3QubmV4dChzZWxlY3RvcikpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvZG9tL05vZGUuY3BwCShyZXZpc2lvbiAxMzcxMDgpCisrKyBTb3VyY2UvV2ViQ29yZS9k
b20vTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc1LDYgKzc1LDcgQEAKICNpbmNsdWRlICJO
YW1lZE5vZGVNYXAuaCIKICNpbmNsdWRlICJOb2RlUmFyZURhdGEuaCIKICNpbmNsdWRlICJOb2Rl
UmVuZGVyaW5nQ29udGV4dC5oIgorI2luY2x1ZGUgIk5vZGVUcmF2ZXJzYWwuaCIKICNpbmNsdWRl
ICJQYWdlLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiCiAjaW5jbHVkZSAiUGxh
dGZvcm1XaGVlbEV2ZW50LmgiCkBAIC02MzgsNyArNjM5LDcgQEAgdm9pZCBOb2RlOjpub3JtYWxp
emUoKQogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgaWYgKHR5cGUgIT0gVEVYVF9OT0RF
KSB7Ci0gICAgICAgICAgICBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZVBvc3RPcmRlcigp
OworICAgICAgICAgICAgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHRQb3N0T3JkZXIobm9kZS5n
ZXQoKSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCkBAIC02NDcsNyArNjQ4
LDcgQEAgdm9pZCBOb2RlOjpub3JtYWxpemUoKQogICAgICAgICAvLyBSZW1vdmUgZW1wdHkgdGV4
dCBub2Rlcy4KICAgICAgICAgaWYgKCF0ZXh0LT5sZW5ndGgoKSkgewogICAgICAgICAgICAgLy8g
Q2FyZSBtdXN0IGJlIHRha2VuIHRvIGdldCB0aGUgbmV4dCBub2RlIGJlZm9yZSByZW1vdmluZyB0
aGUgY3VycmVudCBub2RlLgotICAgICAgICAgICAgbm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5v
ZGVQb3N0T3JkZXIoKTsKKyAgICAgICAgICAgIG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0UG9z
dE9yZGVyKG5vZGUuZ2V0KCkpOwogICAgICAgICAgICAgRXhjZXB0aW9uQ29kZSBlYzsKICAgICAg
ICAgICAgIHRleHQtPnJlbW92ZShlYyk7CiAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTY3NCw3
ICs2NzUsNyBAQCB2b2lkIE5vZGU6Om5vcm1hbGl6ZSgpCiAgICAgICAgICAgICBuZXh0VGV4dC0+
cmVtb3ZlKGVjKTsKICAgICAgICAgfQogCi0gICAgICAgIG5vZGUgPSBub2RlLT50cmF2ZXJzZU5l
eHROb2RlUG9zdE9yZGVyKCk7CisgICAgICAgIG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0UG9z
dE9yZGVyKG5vZGUuZ2V0KCkpOwogICAgIH0KIH0KIApAQCAtODg4LDcgKzg4OSw3IEBAIHZvaWQg
Tm9kZTo6c2V0TmVlZHNTdHlsZVJlY2FsYyhTdHlsZUNoYW4KIAogdm9pZCBOb2RlOjpsYXp5QXR0
YWNoKFNob3VsZFNldEF0dGFjaGVkIHNob3VsZFNldEF0dGFjaGVkKQogewotICAgIGZvciAoTm9k
ZSogbiA9IHRoaXM7IG47IG4gPSBuLT50cmF2ZXJzZU5leHROb2RlKHRoaXMpKSB7CisgICAgZm9y
IChOb2RlKiBuID0gdGhpczsgbjsgbiA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobiwgdGhpcykpIHsK
ICAgICAgICAgaWYgKG4tPmhhc0NoaWxkTm9kZXMoKSkKICAgICAgICAgICAgIG4tPnNldENoaWxk
TmVlZHNTdHlsZVJlY2FsYygpOwogICAgICAgICBuLT5zZXRTdHlsZUNoYW5nZShGdWxsU3R5bGVD
aGFuZ2UpOwpAQCAtMTAzOSw5NiArMTA0MCw2IEBAIE5vZGVMaXN0c05vZGVEYXRhKiBOb2RlOjpu
b2RlTGlzdHMoKQogICAgIHJldHVybiBoYXNSYXJlRGF0YSgpID8gcmFyZURhdGEoKS0+bm9kZUxp
c3RzKCkgOiAwOwogfQogCi1Ob2RlKiBOb2RlOjp0cmF2ZXJzZU5leHRBbmNlc3RvclNpYmxpbmco
KSBjb25zdAotewotICAgIEFTU0VSVCghbmV4dFNpYmxpbmcoKSk7Ci0gICAgZm9yIChjb25zdCBO
b2RlKiBub2RlID0gcGFyZW50Tm9kZSgpOyBub2RlOyBub2RlID0gbm9kZS0+cGFyZW50Tm9kZSgp
KSB7Ci0gICAgICAgIGlmIChub2RlLT5uZXh0U2libGluZygpKQotICAgICAgICAgICAgcmV0dXJu
IG5vZGUtPm5leHRTaWJsaW5nKCk7Ci0gICAgfQotICAgIHJldHVybiAwOwotfQotCi1Ob2RlKiBO
b2RlOjp0cmF2ZXJzZU5leHRBbmNlc3RvclNpYmxpbmcoY29uc3QgTm9kZSogc3RheVdpdGhpbikg
Y29uc3QKLXsKLSAgICBBU1NFUlQoIW5leHRTaWJsaW5nKCkpOwotICAgIEFTU0VSVCh0aGlzICE9
IHN0YXlXaXRoaW4pOwotICAgIGZvciAoY29uc3QgTm9kZSogbm9kZSA9IHBhcmVudE5vZGUoKTsg
bm9kZTsgbm9kZSA9IG5vZGUtPnBhcmVudE5vZGUoKSkgewotICAgICAgICBpZiAobm9kZSA9PSBz
dGF5V2l0aGluKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIGlmIChub2RlLT5uZXh0
U2libGluZygpKQotICAgICAgICAgICAgcmV0dXJuIG5vZGUtPm5leHRTaWJsaW5nKCk7Ci0gICAg
fQotICAgIHJldHVybiAwOwotfQotCi1Ob2RlKiBOb2RlOjp0cmF2ZXJzZU5leHROb2RlUG9zdE9y
ZGVyKCkgY29uc3QKLXsKLSAgICBOb2RlKiBuZXh0ID0gbmV4dFNpYmxpbmcoKTsKLSAgICBpZiAo
IW5leHQpCi0gICAgICAgIHJldHVybiBwYXJlbnROb2RlKCk7Ci0gICAgd2hpbGUgKE5vZGUqIGZp
cnN0Q2hpbGQgPSBuZXh0LT5maXJzdENoaWxkKCkpCi0gICAgICAgIG5leHQgPSBmaXJzdENoaWxk
OwotICAgIHJldHVybiBuZXh0OwotfQotCi1Ob2RlKiBOb2RlOjp0cmF2ZXJzZVByZXZpb3VzTm9k
ZShjb25zdCBOb2RlKiBzdGF5V2l0aGluKSBjb25zdAotewotICAgIGlmICh0aGlzID09IHN0YXlX
aXRoaW4pCi0gICAgICAgIHJldHVybiAwOwotICAgIGlmIChwcmV2aW91c1NpYmxpbmcoKSkgewot
ICAgICAgICBOb2RlICpuID0gcHJldmlvdXNTaWJsaW5nKCk7Ci0gICAgICAgIHdoaWxlIChuLT5s
YXN0Q2hpbGQoKSkKLSAgICAgICAgICAgIG4gPSBuLT5sYXN0Q2hpbGQoKTsKLSAgICAgICAgcmV0
dXJuIG47Ci0gICAgfQotICAgIHJldHVybiBwYXJlbnROb2RlKCk7Ci19Ci0KLU5vZGUqIE5vZGU6
OnRyYXZlcnNlUHJldmlvdXNTaWJsaW5nKGNvbnN0IE5vZGUqIHN0YXlXaXRoaW4pIGNvbnN0Ci17
Ci0gICAgaWYgKHRoaXMgPT0gc3RheVdpdGhpbikKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYg
KHByZXZpb3VzU2libGluZygpKQotICAgICAgICByZXR1cm4gcHJldmlvdXNTaWJsaW5nKCk7Ci0g
ICAgY29uc3QgTm9kZSAqbiA9IHRoaXM7Ci0gICAgd2hpbGUgKG4gJiYgIW4tPnByZXZpb3VzU2li
bGluZygpICYmICghc3RheVdpdGhpbiB8fCBuLT5wYXJlbnROb2RlKCkgIT0gc3RheVdpdGhpbikp
Ci0gICAgICAgIG4gPSBuLT5wYXJlbnROb2RlKCk7Ci0gICAgaWYgKG4pCi0gICAgICAgIHJldHVy
biBuLT5wcmV2aW91c1NpYmxpbmcoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotTm9kZSogTm9kZTo6
dHJhdmVyc2VQcmV2aW91c05vZGVQb3N0T3JkZXIoY29uc3QgTm9kZSogc3RheVdpdGhpbikgY29u
c3QKLXsKLSAgICBpZiAobGFzdENoaWxkKCkpCi0gICAgICAgIHJldHVybiBsYXN0Q2hpbGQoKTsK
LSAgICBpZiAodGhpcyA9PSBzdGF5V2l0aGluKQotICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAo
cHJldmlvdXNTaWJsaW5nKCkpCi0gICAgICAgIHJldHVybiBwcmV2aW91c1NpYmxpbmcoKTsKLSAg
ICBjb25zdCBOb2RlICpuID0gdGhpczsKLSAgICB3aGlsZSAobiAmJiAhbi0+cHJldmlvdXNTaWJs
aW5nKCkgJiYgKCFzdGF5V2l0aGluIHx8IG4tPnBhcmVudE5vZGUoKSAhPSBzdGF5V2l0aGluKSkK
LSAgICAgICAgbiA9IG4tPnBhcmVudE5vZGUoKTsKLSAgICBpZiAobikKLSAgICAgICAgcmV0dXJu
IG4tPnByZXZpb3VzU2libGluZygpOwotICAgIHJldHVybiAwOwotfQotCi1Ob2RlKiBOb2RlOjp0
cmF2ZXJzZVByZXZpb3VzU2libGluZ1Bvc3RPcmRlcihjb25zdCBOb2RlKiBzdGF5V2l0aGluKSBj
b25zdAotewotICAgIGlmICh0aGlzID09IHN0YXlXaXRoaW4pCi0gICAgICAgIHJldHVybiAwOwot
ICAgIGlmIChwcmV2aW91c1NpYmxpbmcoKSkKLSAgICAgICAgcmV0dXJuIHByZXZpb3VzU2libGlu
ZygpOwotICAgIGNvbnN0IE5vZGUgKm4gPSB0aGlzOwotICAgIHdoaWxlIChuICYmICFuLT5wcmV2
aW91c1NpYmxpbmcoKSAmJiAoIXN0YXlXaXRoaW4gfHwgbi0+cGFyZW50Tm9kZSgpICE9IHN0YXlX
aXRoaW4pKQotICAgICAgICBuID0gbi0+cGFyZW50Tm9kZSgpOwotICAgIGlmIChuKQotICAgICAg
ICByZXR1cm4gbi0+cHJldmlvdXNTaWJsaW5nKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KIHZvaWQg
Tm9kZTo6Y2hlY2tTZXRQcmVmaXgoY29uc3QgQXRvbWljU3RyaW5nJiBwcmVmaXgsIEV4Y2VwdGlv
bkNvZGUmIGVjKQogewogICAgIC8vIFBlcmZvcm0gZXJyb3IgY2hlY2tpbmcgYXMgcmVxdWlyZWQg
Ynkgc3BlYyBmb3Igc2V0dGluZyBOb2RlLnByZWZpeC4gVXNlZCBieQpAQCAtMTIzMyw3ICsxMTQ0
LDcgQEAgdm9pZCBOb2RlOjpkZXRhY2goKQogICAgIGlmIChyZW5kZXJlcigpKSB7CiAgICAgICAg
IHJlbmRlcmVyKCktPmRlc3Ryb3lBbmRDbGVhbnVwQW5vbnltb3VzV3JhcHBlcnMoKTsKICNpZm5k
ZWYgTkRFQlVHCi0gICAgICAgIGZvciAoTm9kZSogbm9kZSA9IHRoaXM7IG5vZGU7IG5vZGUgPSBu
b2RlLT50cmF2ZXJzZU5leHROb2RlKHRoaXMpKSB7CisgICAgICAgIGZvciAoTm9kZSogbm9kZSA9
IHRoaXM7IG5vZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUsIHRoaXMpKSB7CiAg
ICAgICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gbm9kZS0+cmVuZGVyZXIoKTsKICAg
ICAgICAgICAgIC8vIFJlbmRlckZsb3dUaHJlYWQgYW5kIHRoZSB0b3AgbGF5ZXIgcmVtb3ZlIGVs
ZW1lbnRzIGZyb20gdGhlIHJlZ3VsYXIgdHJlZQogICAgICAgICAgICAgLy8gaGllcmFyY2h5LiBU
aGV5IHdpbGwgYmUgY2xlYW5lZCB1cCB3aGVuIHdlIGNhbGwgZGV0YWNoIG9uIHRoZW0uCkBAIC0y
MDg2LDcgKzE5OTcsNyBAQCB2b2lkIE5vZGU6OnNob3dOb2RlUGF0aEZvclRoaXMoKSBjb25zdAog
CiBzdGF0aWMgdm9pZCB0cmF2ZXJzZVRyZWVBbmRNYXJrKGNvbnN0IFN0cmluZyYgYmFzZUluZGVu
dCwgY29uc3QgTm9kZSogcm9vdE5vZGUsIGNvbnN0IE5vZGUqIG1hcmtlZE5vZGUxLCBjb25zdCBj
aGFyKiBtYXJrZWRMYWJlbDEsIGNvbnN0IE5vZGUqIG1hcmtlZE5vZGUyLCBjb25zdCBjaGFyKiBt
YXJrZWRMYWJlbDIpCiB7Ci0gICAgZm9yIChjb25zdCBOb2RlKiBub2RlID0gcm9vdE5vZGU7IG5v
ZGU7IG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKCkpIHsKKyAgICBmb3IgKGNvbnN0IE5v
ZGUqIG5vZGUgPSByb290Tm9kZTsgbm9kZTsgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9k
ZSkpIHsKICAgICAgICAgaWYgKG5vZGUgPT0gbWFya2VkTm9kZTEpCiAgICAgICAgICAgICBmcHJp
bnRmKHN0ZGVyciwgIiVzIiwgbWFya2VkTGFiZWwxKTsKICAgICAgICAgaWYgKG5vZGUgPT0gbWFy
a2VkTm9kZTIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgJKHJldmlzaW9uIDEzNzEwOCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2RvbS9Ob2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3NywzMCArNDc3LDYgQEAgcHVi
bGljOgogICAgIHVuc2lnbmVkIGNoaWxkTm9kZUNvdW50KCkgY29uc3Q7CiAgICAgTm9kZSogY2hp
bGROb2RlKHVuc2lnbmVkIGluZGV4KSBjb25zdDsKIAotICAgIC8vIERvZXMgYSBwcmUtb3JkZXIg
dHJhdmVyc2FsIG9mIHRoZSB0cmVlIHRvIGZpbmQgdGhlIG5leHQgbm9kZSBhZnRlciB0aGlzIG9u
ZS4KLSAgICAvLyBUaGlzIHVzZXMgdGhlIHNhbWUgb3JkZXIgdGhhdCB0YWdzIGFwcGVhciBpbiB0
aGUgc291cmNlIGZpbGUuIElmIHRoZSBzdGF5V2l0aGluCi0gICAgLy8gYXJndW1lbnQgaXMgbm9u
LW51bGwsIHRoZSB0cmF2ZXJzYWwgd2lsbCBzdG9wIG9uY2UgdGhlIHNwZWNpZmllZCBub2RlIGlz
IHJlYWNoZWQuCi0gICAgLy8gVGhpcyBjYW4gYmUgdXNlZCB0byByZXN0cmljdCB0cmF2ZXJzYWwg
dG8gYSBwYXJ0aWN1bGFyIHN1Yi10cmVlLgotICAgIE5vZGUqIHRyYXZlcnNlTmV4dE5vZGUoKSBj
b25zdDsKLSAgICBOb2RlKiB0cmF2ZXJzZU5leHROb2RlKGNvbnN0IE5vZGUqIHN0YXlXaXRoaW4p
IGNvbnN0OwotCi0gICAgLy8gTGlrZSB0cmF2ZXJzZU5leHROb2RlLCBidXQgc2tpcHMgY2hpbGRy
ZW4gYW5kIHN0YXJ0cyB3aXRoIHRoZSBuZXh0IHNpYmxpbmcuCi0gICAgTm9kZSogdHJhdmVyc2VO
ZXh0U2libGluZygpIGNvbnN0OwotICAgIE5vZGUqIHRyYXZlcnNlTmV4dFNpYmxpbmcoY29uc3Qg
Tm9kZSogc3RheVdpdGhpbikgY29uc3Q7Ci0KLSAgICAvLyBEb2VzIGEgcmV2ZXJzZSBwcmUtb3Jk
ZXIgdHJhdmVyc2FsIHRvIGZpbmQgdGhlIG5vZGUgdGhhdCBjb21lcyBiZWZvcmUgdGhlIGN1cnJl
bnQgb25lIGluIGRvY3VtZW50IG9yZGVyCi0gICAgTm9kZSogdHJhdmVyc2VQcmV2aW91c05vZGUo
Y29uc3QgTm9kZSogc3RheVdpdGhpbiA9IDApIGNvbnN0OwotCi0gICAgLy8gTGlrZSB0cmF2ZXJz
ZVByZXZpb3VzTm9kZSwgYnV0IHNraXBzIGNoaWxkcmVuIGFuZCBzdGFydHMgd2l0aCB0aGUgbmV4
dCBzaWJsaW5nLgotICAgIE5vZGUqIHRyYXZlcnNlUHJldmlvdXNTaWJsaW5nKGNvbnN0IE5vZGUq
IHN0YXlXaXRoaW4gPSAwKSBjb25zdDsKLQotICAgIC8vIExpa2UgdHJhdmVyc2VOZXh0Tm9kZSwg
YnV0IHZpc2l0cyBwYXJlbnRzIGFmdGVyIHRoZWlyIGNoaWxkcmVuLgotICAgIE5vZGUqIHRyYXZl
cnNlTmV4dE5vZGVQb3N0T3JkZXIoKSBjb25zdDsKLQotICAgIC8vIExpa2UgdHJhdmVyc2VQcmV2
aW91c05vZGUsIGJ1dCB2aXNpdHMgcGFyZW50cyBiZWZvcmUgdGhlaXIgY2hpbGRyZW4uCi0gICAg
Tm9kZSogdHJhdmVyc2VQcmV2aW91c05vZGVQb3N0T3JkZXIoY29uc3QgTm9kZSogc3RheVdpdGhp
biA9IDApIGNvbnN0OwotICAgIE5vZGUqIHRyYXZlcnNlUHJldmlvdXNTaWJsaW5nUG9zdE9yZGVy
KGNvbnN0IE5vZGUqIHN0YXlXaXRoaW4gPSAwKSBjb25zdDsKLQogICAgIHZvaWQgY2hlY2tTZXRQ
cmVmaXgoY29uc3QgQXRvbWljU3RyaW5nJiBwcmVmaXgsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICBi
b29sIGlzRGVzY2VuZGFudE9mKGNvbnN0IE5vZGUqKSBjb25zdDsKICAgICBib29sIGNvbnRhaW5z
KGNvbnN0IE5vZGUqKSBjb25zdDsKQEAgLTgxOSw5ICs3OTUsNiBAQCBwcml2YXRlOgogCiAgICAg
RWxlbWVudCogYW5jZXN0b3JFbGVtZW50KCkgY29uc3Q7CiAKLSAgICBOb2RlKiB0cmF2ZXJzZU5l
eHRBbmNlc3RvclNpYmxpbmcoKSBjb25zdDsKLSAgICBOb2RlKiB0cmF2ZXJzZU5leHRBbmNlc3Rv
clNpYmxpbmcoY29uc3QgTm9kZSogc3RheVdpdGhpbikgY29uc3Q7Ci0KICAgICAvLyBVc2UgTm9k
ZTo6cGFyZW50Tm9kZSBhcyB0aGUgY29uc2lzdGVudCB3YXkgb2YgcXVlcnlpbmcgYSBwYXJlbnQg
bm9kZS4KICAgICAvLyBUaGlzIG1ldGhvZCBpcyBtYWRlIHByaXZhdGUgdG8gZW5zdXJlIGEgY29t
cGlsZXIgZXJyb3Igb24gY2FsbCBzaXRlcyB0aGF0CiAgICAgLy8gZG9uJ3QgZm9sbG93IHRoaXMg
cnVsZS4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlSXRlcmF0b3IuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlSXRlcmF0b3IuY3BwCShyZXZpc2lvbiAxMzcx
MDgpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZUl0ZXJhdG9yLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRXhj
ZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIk5vZGVGaWx0ZXIuaCIKKyNpbmNsdWRlICJOb2RlVHJh
dmVyc2FsLmgiCiAjaW5jbHVkZSAiU2NyaXB0U3RhdGUuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewpAQCAtNTUsNyArNTYsNyBAQCBib29sIE5vZGVJdGVyYXRvcjo6Tm9kZVBvaW50ZXI6Om1vdmVU
b05lCiAgICAgICAgIGlzUG9pbnRlckJlZm9yZU5vZGUgPSBmYWxzZTsKICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgfQotICAgIG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKHJvb3QpOwor
ICAgIG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUuZ2V0KCksIHJvb3QpOwogICAgIHJl
dHVybiBub2RlOwogfQogCkBAIC02Nyw3ICs2OCw3IEBAIGJvb2wgTm9kZUl0ZXJhdG9yOjpOb2Rl
UG9pbnRlcjo6bW92ZVRvUHIKICAgICAgICAgaXNQb2ludGVyQmVmb3JlTm9kZSA9IHRydWU7CiAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KLSAgICBub2RlID0gbm9kZS0+dHJhdmVyc2VQcmV2
aW91c05vZGUocm9vdCk7CisgICAgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6OnByZXZpb3VzKG5vZGUu
Z2V0KCksIHJvb3QpOwogICAgIHJldHVybiBub2RlOwogfQogCkBAIC0xNzcsMjIgKzE3OCwyMiBA
QCB2b2lkIE5vZGVJdGVyYXRvcjo6dXBkYXRlRm9yTm9kZVJlbW92YWwoCiAgICAgICAgIHJldHVy
bjsKIAogICAgIGlmIChyZWZlcmVuY2VOb2RlLmlzUG9pbnRlckJlZm9yZU5vZGUpIHsKLSAgICAg
ICAgTm9kZSogbm9kZSA9IHJlbW92ZWROb2RlLT50cmF2ZXJzZU5leHROb2RlKHJvb3QoKSk7Cisg
ICAgICAgIE5vZGUqIG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KHJlbW92ZWROb2RlLCByb290
KCkpOwogICAgICAgICBpZiAobm9kZSkgewogICAgICAgICAgICAgLy8gTW92ZSBvdXQgZnJvbSB1
bmRlciB0aGUgbm9kZSBiZWluZyByZW1vdmVkIGlmIHRoZSBuZXcgcmVmZXJlbmNlCiAgICAgICAg
ICAgICAvLyBub2RlIGlzIGEgZGVzY2VuZGFudCBvZiB0aGUgbm9kZSBiZWluZyByZW1vdmVkLgog
ICAgICAgICAgICAgd2hpbGUgKG5vZGUgJiYgbm9kZS0+aXNEZXNjZW5kYW50T2YocmVtb3ZlZE5v
ZGUpKQotICAgICAgICAgICAgICAgIG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKHJvb3Qo
KSk7CisgICAgICAgICAgICAgICAgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9kZSwgcm9v
dCgpKTsKICAgICAgICAgICAgIGlmIChub2RlKQogICAgICAgICAgICAgICAgIHJlZmVyZW5jZU5v
ZGUubm9kZSA9IG5vZGU7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBub2RlID0gcmVt
b3ZlZE5vZGUtPnRyYXZlcnNlUHJldmlvdXNOb2RlKHJvb3QoKSk7CisgICAgICAgICAgICBub2Rl
ID0gTm9kZVRyYXZlcnNhbDo6cHJldmlvdXMocmVtb3ZlZE5vZGUsIHJvb3QoKSk7CiAgICAgICAg
ICAgICBpZiAobm9kZSkgewogICAgICAgICAgICAgICAgIC8vIE1vdmUgb3V0IGZyb20gdW5kZXIg
dGhlIG5vZGUgYmVpbmcgcmVtb3ZlZCBpZiB0aGUgcmVmZXJlbmNlIG5vZGUgaXMKICAgICAgICAg
ICAgICAgICAvLyBhIGRlc2NlbmRhbnQgb2YgdGhlIG5vZGUgYmVpbmcgcmVtb3ZlZC4KICAgICAg
ICAgICAgICAgICBpZiAod2lsbFJlbW92ZVJlZmVyZW5jZU5vZGVBbmNlc3RvcikgewogICAgICAg
ICAgICAgICAgICAgICB3aGlsZSAobm9kZSAmJiBub2RlLT5pc0Rlc2NlbmRhbnRPZihyZW1vdmVk
Tm9kZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICBub2RlID0gbm9kZS0+dHJhdmVyc2VQcmV2
aW91c05vZGUocm9vdCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUgPSBOb2RlVHJh
dmVyc2FsOjpwcmV2aW91cyhub2RlLCByb290KCkpOwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICBpZiAobm9kZSkgewogICAgICAgICAgICAgICAgICAgICAvLyBSZW1vdmluZyBs
YXN0IG5vZGUuCkBAIC0yMDQsMjQgKzIwNSwyNCBAQCB2b2lkIE5vZGVJdGVyYXRvcjo6dXBkYXRl
Rm9yTm9kZVJlbW92YWwoCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9IGVsc2Ugewot
ICAgICAgICBOb2RlKiBub2RlID0gcmVtb3ZlZE5vZGUtPnRyYXZlcnNlUHJldmlvdXNOb2RlKHJv
b3QoKSk7CisgICAgICAgIE5vZGUqIG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpwcmV2aW91cyhyZW1v
dmVkTm9kZSwgcm9vdCgpKTsKICAgICAgICAgaWYgKG5vZGUpIHsKICAgICAgICAgICAgIC8vIE1v
dmUgb3V0IGZyb20gdW5kZXIgdGhlIG5vZGUgYmVpbmcgcmVtb3ZlZCBpZiB0aGUgcmVmZXJlbmNl
IG5vZGUgaXMKICAgICAgICAgICAgIC8vIGEgZGVzY2VuZGFudCBvZiB0aGUgbm9kZSBiZWluZyBy
ZW1vdmVkLgogICAgICAgICAgICAgaWYgKHdpbGxSZW1vdmVSZWZlcmVuY2VOb2RlQW5jZXN0b3Ip
IHsKICAgICAgICAgICAgICAgICB3aGlsZSAobm9kZSAmJiBub2RlLT5pc0Rlc2NlbmRhbnRPZihy
ZW1vdmVkTm9kZSkpCi0gICAgICAgICAgICAgICAgICAgIG5vZGUgPSBub2RlLT50cmF2ZXJzZVBy
ZXZpb3VzTm9kZShyb290KCkpOworICAgICAgICAgICAgICAgICAgICBub2RlID0gTm9kZVRyYXZl
cnNhbDo6cHJldmlvdXMobm9kZSwgcm9vdCgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IGlmIChub2RlKQogICAgICAgICAgICAgICAgIHJlZmVyZW5jZU5vZGUubm9kZSA9IG5vZGU7CiAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBicmFuY2ggZG9lc24n
dCBhcHBlYXIgdG8gaGF2ZSBhbnkgTGF5b3V0VGVzdHMuCi0gICAgICAgICAgICBub2RlID0gcmVt
b3ZlZE5vZGUtPnRyYXZlcnNlTmV4dE5vZGUocm9vdCgpKTsKKyAgICAgICAgICAgIG5vZGUgPSBO
b2RlVHJhdmVyc2FsOjpuZXh0KHJlbW92ZWROb2RlLCByb290KCkpOwogICAgICAgICAgICAgLy8g
TW92ZSBvdXQgZnJvbSB1bmRlciB0aGUgbm9kZSBiZWluZyByZW1vdmVkIGlmIHRoZSByZWZlcmVu
Y2Ugbm9kZSBpcwogICAgICAgICAgICAgLy8gYSBkZXNjZW5kYW50IG9mIHRoZSBub2RlIGJlaW5n
IHJlbW92ZWQuCiAgICAgICAgICAgICBpZiAod2lsbFJlbW92ZVJlZmVyZW5jZU5vZGVBbmNlc3Rv
cikgewogICAgICAgICAgICAgICAgIHdoaWxlIChub2RlICYmIG5vZGUtPmlzRGVzY2VuZGFudE9m
KHJlbW92ZWROb2RlKSkKLSAgICAgICAgICAgICAgICAgICAgbm9kZSA9IG5vZGUtPnRyYXZlcnNl
UHJldmlvdXNOb2RlKHJvb3QoKSk7CisgICAgICAgICAgICAgICAgICAgIG5vZGUgPSBOb2RlVHJh
dmVyc2FsOjpwcmV2aW91cyhub2RlLCByb290KCkpOwogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgaWYgKG5vZGUpCiAgICAgICAgICAgICAgICAgcmVmZXJlbmNlTm9kZS5ub2RlID0gbm9kZTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlVHJhdmVyc2FsLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZVRyYXZlcnNhbC5jcHAJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvV2ViQ29yZS9kb20vTm9kZVRyYXZlcnNhbC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMTI5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtk
ZS5vcmcpCisgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtk
ZS5vcmcpCisgKiAgICAgICAgICAgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5v
cmcpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDks
IDIwMTAsIDIwMTEsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDA4LCAyMDA5IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuIChodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8pCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiTm9kZVRyYXZlcnNhbC5oIgorCisjaW5jbHVkZSAiQ29udGFpbmVyTm9kZS5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CituYW1lc3BhY2UgTm9kZVRyYXZlcnNhbCB7CisKK05v
ZGUqIG5leHRBbmNlc3RvclNpYmxpbmcoY29uc3QgTm9kZSogY3VycmVudCkKK3sKKyAgICBBU1NF
UlQoIWN1cnJlbnQtPm5leHRTaWJsaW5nKCkpOworICAgIGZvciAoY3VycmVudCA9IGN1cnJlbnQt
PnBhcmVudE5vZGUoKTsgY3VycmVudDsgY3VycmVudCA9IGN1cnJlbnQtPnBhcmVudE5vZGUoKSkg
eworICAgICAgICBpZiAoY3VycmVudC0+bmV4dFNpYmxpbmcoKSkKKyAgICAgICAgICAgIHJldHVy
biBjdXJyZW50LT5uZXh0U2libGluZygpOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworTm9k
ZSogbmV4dEFuY2VzdG9yU2libGluZyhjb25zdCBOb2RlKiBjdXJyZW50LCBjb25zdCBOb2RlKiBz
dGF5V2l0aGluKQoreworICAgIEFTU0VSVCghY3VycmVudC0+bmV4dFNpYmxpbmcoKSk7CisgICAg
QVNTRVJUKGN1cnJlbnQgIT0gc3RheVdpdGhpbik7CisgICAgZm9yIChjdXJyZW50ID0gY3VycmVu
dC0+cGFyZW50Tm9kZSgpOyBjdXJyZW50OyBjdXJyZW50ID0gY3VycmVudC0+cGFyZW50Tm9kZSgp
KSB7CisgICAgICAgIGlmIChjdXJyZW50ID09IHN0YXlXaXRoaW4pCisgICAgICAgICAgICByZXR1
cm4gMDsKKyAgICAgICAgaWYgKGN1cnJlbnQtPm5leHRTaWJsaW5nKCkpCisgICAgICAgICAgICBy
ZXR1cm4gY3VycmVudC0+bmV4dFNpYmxpbmcoKTsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisK
K05vZGUqIHByZXZpb3VzKGNvbnN0IE5vZGUqIGN1cnJlbnQsIGNvbnN0IE5vZGUqIHN0YXlXaXRo
aW4pCit7CisgICAgaWYgKGN1cnJlbnQgPT0gc3RheVdpdGhpbikKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgaWYgKGN1cnJlbnQtPnByZXZpb3VzU2libGluZygpKSB7CisgICAgICAgIE5vZGUqIHBy
ZXZpb3VzID0gY3VycmVudC0+cHJldmlvdXNTaWJsaW5nKCk7CisgICAgICAgIHdoaWxlIChwcmV2
aW91cy0+bGFzdENoaWxkKCkpCisgICAgICAgICAgICBwcmV2aW91cyA9IHByZXZpb3VzLT5sYXN0
Q2hpbGQoKTsKKyAgICAgICAgcmV0dXJuIHByZXZpb3VzOworICAgIH0KKyAgICByZXR1cm4gY3Vy
cmVudC0+cGFyZW50Tm9kZSgpOworfQorCitOb2RlKiBwcmV2aW91c1NpYmxpbmcoY29uc3QgTm9k
ZSogY3VycmVudCwgY29uc3QgTm9kZSogc3RheVdpdGhpbikKK3sKKyAgICBpZiAoY3VycmVudCA9
PSBzdGF5V2l0aGluKQorICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAoY3VycmVudC0+cHJldmlv
dXNTaWJsaW5nKCkpCisgICAgICAgIHJldHVybiBjdXJyZW50LT5wcmV2aW91c1NpYmxpbmcoKTsK
KyAgICBmb3IgKGN1cnJlbnQgPSBjdXJyZW50LT5wYXJlbnROb2RlKCk7IGN1cnJlbnQ7IGN1cnJl
bnQgPSBjdXJyZW50LT5wYXJlbnROb2RlKCkpIHsKKyAgICAgICAgaWYgKGN1cnJlbnQgPT0gc3Rh
eVdpdGhpbikKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBpZiAoY3VycmVudC0+cHJl
dmlvdXNTaWJsaW5nKCkpCisgICAgICAgICAgICByZXR1cm4gY3VycmVudC0+cHJldmlvdXNTaWJs
aW5nKCk7CisgICAgfQorICAgIHJldHVybiAwOworfQorCitOb2RlKiBuZXh0UG9zdE9yZGVyKGNv
bnN0IE5vZGUqIGN1cnJlbnQsIGNvbnN0IE5vZGUqIHN0YXlXaXRoaW4pCit7CisgICAgaWYgKGN1
cnJlbnQgPT0gc3RheVdpdGhpbikKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKCFjdXJyZW50
LT5uZXh0U2libGluZygpKQorICAgICAgICByZXR1cm4gY3VycmVudC0+cGFyZW50Tm9kZSgpOwor
ICAgIE5vZGUqIG5leHQgPSBjdXJyZW50LT5uZXh0U2libGluZygpOworICAgIHdoaWxlIChuZXh0
LT5maXJzdENoaWxkKCkpCisgICAgICAgIG5leHQgPSBuZXh0LT5maXJzdENoaWxkKCk7CisgICAg
cmV0dXJuIG5leHQ7Cit9CisKK3N0YXRpYyBOb2RlKiBwcmV2aW91c0FuY2VzdG9yU2libGluZ1Bv
c3RPcmRlcihjb25zdCBOb2RlKiBjdXJyZW50LCBjb25zdCBOb2RlKiBzdGF5V2l0aGluKQorewor
ICAgIEFTU0VSVCghY3VycmVudC0+cHJldmlvdXNTaWJsaW5nKCkpOworICAgIGZvciAoY3VycmVu
dCA9IGN1cnJlbnQtPnBhcmVudE5vZGUoKTsgY3VycmVudDsgY3VycmVudCA9IGN1cnJlbnQtPnBh
cmVudE5vZGUoKSkgeworICAgICAgICBpZiAoY3VycmVudCA9PSBzdGF5V2l0aGluKQorICAgICAg
ICAgICAgcmV0dXJuIDA7CisgICAgICAgIGlmIChjdXJyZW50LT5wcmV2aW91c1NpYmxpbmcoKSkK
KyAgICAgICAgICAgIHJldHVybiBjdXJyZW50LT5wcmV2aW91c1NpYmxpbmcoKTsKKyAgICB9Cisg
ICAgcmV0dXJuIDA7Cit9CisKK05vZGUqIHByZXZpb3VzUG9zdE9yZGVyKGNvbnN0IE5vZGUqIGN1
cnJlbnQsIGNvbnN0IE5vZGUqIHN0YXlXaXRoaW4pCit7CisgICAgaWYgKGN1cnJlbnQtPmxhc3RD
aGlsZCgpKQorICAgICAgICByZXR1cm4gY3VycmVudC0+bGFzdENoaWxkKCk7CisgICAgaWYgKGN1
cnJlbnQgPT0gc3RheVdpdGhpbikKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKGN1cnJlbnQt
PnByZXZpb3VzU2libGluZygpKQorICAgICAgICByZXR1cm4gY3VycmVudC0+cHJldmlvdXNTaWJs
aW5nKCk7CisgICAgcmV0dXJuIHByZXZpb3VzQW5jZXN0b3JTaWJsaW5nUG9zdE9yZGVyKGN1cnJl
bnQsIHN0YXlXaXRoaW4pOworfQorCitOb2RlKiBwcmV2aW91c1NpYmxpbmdQb3N0T3JkZXIoY29u
c3QgTm9kZSogY3VycmVudCwgY29uc3QgTm9kZSogc3RheVdpdGhpbikKK3sKKyAgICBpZiAoY3Vy
cmVudCA9PSBzdGF5V2l0aGluKQorICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAoY3VycmVudC0+
cHJldmlvdXNTaWJsaW5nKCkpCisgICAgICAgIHJldHVybiBjdXJyZW50LT5wcmV2aW91c1NpYmxp
bmcoKTsKKyAgICByZXR1cm4gcHJldmlvdXNBbmNlc3RvclNpYmxpbmdQb3N0T3JkZXIoY3VycmVu
dCwgc3RheVdpdGhpbik7Cit9CisKK30KK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2Rl
VHJhdmVyc2FsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL05vZGVUcmF2ZXJz
YWwuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlVHJhdmVyc2FsLmgJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTE4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAxOTk5
IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCisgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkg
S29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCisgKiAgICAgICAgICAgKEMpIDIwMDEgRGlyayBN
dWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIw
MDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IFRvcmNoIE1vYmlsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8pCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLwor
CisjaWZuZGVmIE5vZGVUcmF2ZXJzYWxfaAorI2RlZmluZSBOb2RlVHJhdmVyc2FsX2gKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBOb2RlOworY2xhc3MgQ29udGFpbmVyTm9kZTsKKwor
bmFtZXNwYWNlIE5vZGVUcmF2ZXJzYWwgeworCisvLyBEb2VzIGEgcHJlLW9yZGVyIHRyYXZlcnNh
bCBvZiB0aGUgdHJlZSB0byBmaW5kIHRoZSBuZXh0IG5vZGUgYWZ0ZXIgdGhpcyBvbmUuCisvLyBU
aGlzIHVzZXMgdGhlIHNhbWUgb3JkZXIgdGhhdCB0YWdzIGFwcGVhciBpbiB0aGUgc291cmNlIGZp
bGUuIElmIHRoZSBzdGF5V2l0aGluCisvLyBhcmd1bWVudCBpcyBub24tbnVsbCwgdGhlIHRyYXZl
cnNhbCB3aWxsIHN0b3Agb25jZSB0aGUgc3BlY2lmaWVkIG5vZGUgaXMgcmVhY2hlZC4KKy8vIFRo
aXMgY2FuIGJlIHVzZWQgdG8gcmVzdHJpY3QgdHJhdmVyc2FsIHRvIGEgcGFydGljdWxhciBzdWIt
dHJlZS4KK05vZGUqIG5leHQoY29uc3QgTm9kZSopOworTm9kZSogbmV4dChjb25zdCBOb2RlKiwg
Y29uc3QgTm9kZSogc3RheVdpdGhpbik7CitOb2RlKiBuZXh0KGNvbnN0IENvbnRhaW5lck5vZGUq
KTsKK05vZGUqIG5leHQoY29uc3QgQ29udGFpbmVyTm9kZSosIGNvbnN0IE5vZGUqIHN0YXlXaXRo
aW4pOworCisvLyBMaWtlIG5leHQsIGJ1dCBza2lwcyBjaGlsZHJlbiBhbmQgc3RhcnRzIHdpdGgg
dGhlIG5leHQgc2libGluZy4KK05vZGUqIG5leHRTaWJsaW5nKGNvbnN0IE5vZGUqKTsKK05vZGUq
IG5leHRTaWJsaW5nKGNvbnN0IE5vZGUqLCBjb25zdCBOb2RlKiBzdGF5V2l0aGluKTsKK05vZGUq
IG5leHRTaWJsaW5nKGNvbnN0IENvbnRhaW5lck5vZGUqKTsKK05vZGUqIG5leHRTaWJsaW5nKGNv
bnN0IENvbnRhaW5lck5vZGUqLCBjb25zdCBOb2RlKiBzdGF5V2l0aGluKTsKKworLy8gRG9lcyBh
IHJldmVyc2UgcHJlLW9yZGVyIHRyYXZlcnNhbCB0byBmaW5kIHRoZSBub2RlIHRoYXQgY29tZXMg
YmVmb3JlIHRoZSBjdXJyZW50IG9uZSBpbiBkb2N1bWVudCBvcmRlcgorTm9kZSogcHJldmlvdXMo
Y29uc3QgTm9kZSosIGNvbnN0IE5vZGUqIHN0YXlXaXRoaW4gPSAwKTsKKworLy8gTGlrZSBwcmV2
aW91cywgYnV0IHNraXBzIGNoaWxkcmVuIGFuZCBzdGFydHMgd2l0aCB0aGUgbmV4dCBzaWJsaW5n
LgorTm9kZSogcHJldmlvdXNTaWJsaW5nKGNvbnN0IE5vZGUqLCBjb25zdCBOb2RlKiBzdGF5V2l0
aGluID0gMCk7CisKKy8vIExpa2UgbmV4dCwgYnV0IHZpc2l0cyBwYXJlbnRzIGFmdGVyIHRoZWly
IGNoaWxkcmVuLgorTm9kZSogbmV4dFBvc3RPcmRlcihjb25zdCBOb2RlKiwgY29uc3QgTm9kZSog
c3RheVdpdGhpbiA9IDApOworCisvLyBMaWtlIHByZXZpb3VzL3ByZXZpb3VzU2libGluZywgYnV0
IHZpc2l0cyBwYXJlbnRzIGJlZm9yZSB0aGVpciBjaGlsZHJlbi4KK05vZGUqIHByZXZpb3VzUG9z
dE9yZGVyKGNvbnN0IE5vZGUqLCBjb25zdCBOb2RlKiBzdGF5V2l0aGluID0gMCk7CitOb2RlKiBw
cmV2aW91c1NpYmxpbmdQb3N0T3JkZXIoY29uc3QgTm9kZSosIGNvbnN0IE5vZGUqIHN0YXlXaXRo
aW4gPSAwKTsKKworTm9kZSogbmV4dEFuY2VzdG9yU2libGluZyhjb25zdCBOb2RlKik7CitOb2Rl
KiBuZXh0QW5jZXN0b3JTaWJsaW5nKGNvbnN0IE5vZGUqLCBjb25zdCBOb2RlKiBzdGF5V2l0aGlu
KTsKKwordGVtcGxhdGUgPGNsYXNzIE5vZGVUeXBlPgorTm9kZSogdHJhdmVyc2VOZXh0Tm9kZVRl
bXBsYXRlKE5vZGVUeXBlKiBjdXJyZW50KQoreworICAgIGlmIChjdXJyZW50LT5maXJzdENoaWxk
KCkpCisgICAgICAgIHJldHVybiBjdXJyZW50LT5maXJzdENoaWxkKCk7CisgICAgaWYgKGN1cnJl
bnQtPm5leHRTaWJsaW5nKCkpCisgICAgICAgIHJldHVybiBjdXJyZW50LT5uZXh0U2libGluZygp
OworICAgIHJldHVybiBuZXh0QW5jZXN0b3JTaWJsaW5nKGN1cnJlbnQpOworfQoraW5saW5lIE5v
ZGUqIG5leHQoY29uc3QgTm9kZSogY3VycmVudCkgeyByZXR1cm4gdHJhdmVyc2VOZXh0Tm9kZVRl
bXBsYXRlKGN1cnJlbnQpOyB9CitpbmxpbmUgTm9kZSogbmV4dChjb25zdCBDb250YWluZXJOb2Rl
KiBjdXJyZW50KSB7IHJldHVybiB0cmF2ZXJzZU5leHROb2RlVGVtcGxhdGUoY3VycmVudCk7IH0K
KyAgICAKK3RlbXBsYXRlIDxjbGFzcyBOb2RlVHlwZT4KK05vZGUqIHRyYXZlcnNlTmV4dE5vZGVU
ZW1wbGF0ZShOb2RlVHlwZSogY3VycmVudCwgY29uc3QgTm9kZSogc3RheVdpdGhpbikKK3sKKyAg
ICBpZiAoY3VycmVudC0+Zmlyc3RDaGlsZCgpKQorICAgICAgICByZXR1cm4gY3VycmVudC0+Zmly
c3RDaGlsZCgpOworICAgIGlmIChjdXJyZW50ID09IHN0YXlXaXRoaW4pCisgICAgICAgIHJldHVy
biAwOworICAgIGlmIChjdXJyZW50LT5uZXh0U2libGluZygpKQorICAgICAgICByZXR1cm4gY3Vy
cmVudC0+bmV4dFNpYmxpbmcoKTsKKyAgICByZXR1cm4gbmV4dEFuY2VzdG9yU2libGluZyhjdXJy
ZW50LCBzdGF5V2l0aGluKTsKK30KK2lubGluZSBOb2RlKiBuZXh0KGNvbnN0IE5vZGUqIGN1cnJl
bnQsIGNvbnN0IE5vZGUqIHN0YXlXaXRoaW4pIHsgcmV0dXJuIHRyYXZlcnNlTmV4dE5vZGVUZW1w
bGF0ZShjdXJyZW50LCBzdGF5V2l0aGluKTsgfQoraW5saW5lIE5vZGUqIG5leHQoY29uc3QgQ29u
dGFpbmVyTm9kZSogY3VycmVudCwgY29uc3QgTm9kZSogc3RheVdpdGhpbikgeyByZXR1cm4gdHJh
dmVyc2VOZXh0Tm9kZVRlbXBsYXRlKGN1cnJlbnQsIHN0YXlXaXRoaW4pOyB9CisKK3RlbXBsYXRl
IDxjbGFzcyBOb2RlVHlwZT4KK05vZGUqIHRyYXZlcnNlTmV4dFNpYmxpbmdUZW1wbGF0ZShOb2Rl
VHlwZSogY3VycmVudCkKK3sKKyAgICBpZiAoY3VycmVudC0+bmV4dFNpYmxpbmcoKSkKKyAgICAg
ICAgcmV0dXJuIGN1cnJlbnQtPm5leHRTaWJsaW5nKCk7CisgICAgcmV0dXJuIG5leHRBbmNlc3Rv
clNpYmxpbmcoY3VycmVudCk7Cit9CitpbmxpbmUgTm9kZSogbmV4dFNpYmxpbmcoY29uc3QgTm9k
ZSogY3VycmVudCkgeyByZXR1cm4gdHJhdmVyc2VOZXh0U2libGluZ1RlbXBsYXRlKGN1cnJlbnQp
OyB9CitpbmxpbmUgTm9kZSogbmV4dFNpYmxpbmcoY29uc3QgQ29udGFpbmVyTm9kZSogY3VycmVu
dCkgeyByZXR1cm4gdHJhdmVyc2VOZXh0U2libGluZ1RlbXBsYXRlKGN1cnJlbnQpOyB9CisKK3Rl
bXBsYXRlIDxjbGFzcyBOb2RlVHlwZT4KK05vZGUqIHRyYXZlcnNlTmV4dFNpYmxpbmdUZW1wbGF0
ZShOb2RlVHlwZSogY3VycmVudCwgY29uc3QgTm9kZSogc3RheVdpdGhpbikKK3sKKyAgICBpZiAo
Y3VycmVudCA9PSBzdGF5V2l0aGluKQorICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAoY3VycmVu
dC0+bmV4dFNpYmxpbmcoKSkKKyAgICAgICAgcmV0dXJuIGN1cnJlbnQtPm5leHRTaWJsaW5nKCk7
CisgICAgcmV0dXJuIG5leHRBbmNlc3RvclNpYmxpbmcoY3VycmVudCwgc3RheVdpdGhpbik7Cit9
CitpbmxpbmUgTm9kZSogbmV4dFNpYmxpbmcoY29uc3QgTm9kZSogY3VycmVudCwgY29uc3QgTm9k
ZSogc3RheVdpdGhpbikgeyByZXR1cm4gdHJhdmVyc2VOZXh0U2libGluZ1RlbXBsYXRlKGN1cnJl
bnQsIHN0YXlXaXRoaW4pOyB9CitpbmxpbmUgTm9kZSogbmV4dFNpYmxpbmcoY29uc3QgQ29udGFp
bmVyTm9kZSogY3VycmVudCwgY29uc3QgTm9kZSogc3RheVdpdGhpbikgeyByZXR1cm4gdHJhdmVy
c2VOZXh0U2libGluZ1RlbXBsYXRlKGN1cnJlbnQsIHN0YXlXaXRoaW4pOyB9CisKK30KKworfQor
CisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmNwcAkocmV2aXNpb24gMTM3MTA4KQorKysgU291
cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBA
QAogI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5j
bHVkZSAiTm9kZS5oIgorI2luY2x1ZGUgIk5vZGVUcmF2ZXJzYWwuaCIKICNpbmNsdWRlICJOb2Rl
V2l0aEluZGV4LmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlByb2Nlc3NpbmdJbnN0
cnVjdGlvbi5oIgpAQCAtMTA2NSw3ICsxMDY2LDcgQEAgU3RyaW5nIFJhbmdlOjp0b1N0cmluZyhF
eGNlcHRpb25Db2RlJiBlYwogICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKIAogICAgIE5vZGUq
IHBhc3RMYXN0ID0gcGFzdExhc3ROb2RlKCk7Ci0gICAgZm9yIChOb2RlKiBuID0gZmlyc3ROb2Rl
KCk7IG4gIT0gcGFzdExhc3Q7IG4gPSBuLT50cmF2ZXJzZU5leHROb2RlKCkpIHsKKyAgICBmb3Ig
KE5vZGUqIG4gPSBmaXJzdE5vZGUoKTsgbiAhPSBwYXN0TGFzdDsgbiA9IE5vZGVUcmF2ZXJzYWw6
Om5leHQobikpIHsKICAgICAgICAgaWYgKG4tPm5vZGVUeXBlKCkgPT0gTm9kZTo6VEVYVF9OT0RF
IHx8IG4tPm5vZGVUeXBlKCkgPT0gTm9kZTo6Q0RBVEFfU0VDVElPTl9OT0RFKSB7CiAgICAgICAg
ICAgICBTdHJpbmcgZGF0YSA9IHN0YXRpY19jYXN0PENoYXJhY3RlckRhdGEqPihuKS0+ZGF0YSgp
OwogICAgICAgICAgICAgaW50IGxlbmd0aCA9IGRhdGEubGVuZ3RoKCk7CkBAIC0xNTE3LDcgKzE1
MTgsNyBAQCB2b2lkIFJhbmdlOjpjaGVja0RlbGV0ZUV4dHJhY3QoRXhjZXB0aW9uCiAgICAgICAg
IHJldHVybjsKICAgICAgICAgCiAgICAgTm9kZSogcGFzdExhc3QgPSBwYXN0TGFzdE5vZGUoKTsK
LSAgICBmb3IgKE5vZGUqIG4gPSBmaXJzdE5vZGUoKTsgbiAhPSBwYXN0TGFzdDsgbiA9IG4tPnRy
YXZlcnNlTmV4dE5vZGUoKSkgeworICAgIGZvciAoTm9kZSogbiA9IGZpcnN0Tm9kZSgpOyBuICE9
IHBhc3RMYXN0OyBuID0gTm9kZVRyYXZlcnNhbDo6bmV4dChuKSkgewogICAgICAgICBpZiAobi0+
aXNSZWFkT25seU5vZGUoKSkgewogICAgICAgICAgICAgZWMgPSBOT19NT0RJRklDQVRJT05fQUxM
T1dFRF9FUlI7CiAgICAgICAgICAgICByZXR1cm47CkBAIC0xNTU3LDcgKzE1NTgsNyBAQCBOb2Rl
KiBSYW5nZTo6Zmlyc3ROb2RlKCkgY29uc3QKICAgICAgICAgcmV0dXJuIGNoaWxkOwogICAgIGlm
ICghbV9zdGFydC5vZmZzZXQoKSkKICAgICAgICAgcmV0dXJuIG1fc3RhcnQuY29udGFpbmVyKCk7
Ci0gICAgcmV0dXJuIG1fc3RhcnQuY29udGFpbmVyKCktPnRyYXZlcnNlTmV4dFNpYmxpbmcoKTsK
KyAgICByZXR1cm4gTm9kZVRyYXZlcnNhbDo6bmV4dFNpYmxpbmcobV9zdGFydC5jb250YWluZXIo
KSk7CiB9CiAKIFNoYWRvd1Jvb3QqIFJhbmdlOjpzaGFkb3dSb290KCkgY29uc3QKQEAgLTE1NzAs
MTAgKzE1NzEsMTAgQEAgTm9kZSogUmFuZ2U6OnBhc3RMYXN0Tm9kZSgpIGNvbnN0CiAgICAgaWYg
KCFtX3N0YXJ0LmNvbnRhaW5lcigpIHx8ICFtX2VuZC5jb250YWluZXIoKSkKICAgICAgICAgcmV0
dXJuIDA7CiAgICAgaWYgKG1fZW5kLmNvbnRhaW5lcigpLT5vZmZzZXRJbkNoYXJhY3RlcnMoKSkK
LSAgICAgICAgcmV0dXJuIG1fZW5kLmNvbnRhaW5lcigpLT50cmF2ZXJzZU5leHRTaWJsaW5nKCk7
CisgICAgICAgIHJldHVybiBOb2RlVHJhdmVyc2FsOjpuZXh0U2libGluZyhtX2VuZC5jb250YWlu
ZXIoKSk7CiAgICAgaWYgKE5vZGUqIGNoaWxkID0gbV9lbmQuY29udGFpbmVyKCktPmNoaWxkTm9k
ZShtX2VuZC5vZmZzZXQoKSkpCiAgICAgICAgIHJldHVybiBjaGlsZDsKLSAgICByZXR1cm4gbV9l
bmQuY29udGFpbmVyKCktPnRyYXZlcnNlTmV4dFNpYmxpbmcoKTsKKyAgICByZXR1cm4gTm9kZVRy
YXZlcnNhbDo6bmV4dFNpYmxpbmcobV9lbmQuY29udGFpbmVyKCkpOwogfQogCiBJbnRSZWN0IFJh
bmdlOjpib3VuZGluZ0JveCgpIGNvbnN0CkBAIC0xNjAyLDcgKzE2MDMsNyBAQCB2b2lkIFJhbmdl
Ojp0ZXh0UmVjdHMoVmVjdG9yPEludFJlY3Q+JiByCiAgICAgYm9vbCBzb21lRml4ZWQgPSBmYWxz
ZTsKIAogICAgIE5vZGUqIHN0b3BOb2RlID0gcGFzdExhc3ROb2RlKCk7Ci0gICAgZm9yIChOb2Rl
KiBub2RlID0gZmlyc3ROb2RlKCk7IG5vZGUgIT0gc3RvcE5vZGU7IG5vZGUgPSBub2RlLT50cmF2
ZXJzZU5leHROb2RlKCkpIHsKKyAgICBmb3IgKE5vZGUqIG5vZGUgPSBmaXJzdE5vZGUoKTsgbm9k
ZSAhPSBzdG9wTm9kZTsgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9kZSkpIHsKICAgICAg
ICAgUmVuZGVyT2JqZWN0KiByID0gbm9kZS0+cmVuZGVyZXIoKTsKICAgICAgICAgaWYgKCFyIHx8
ICFyLT5pc1RleHQoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMTYzNCw3ICsxNjM1LDcg
QEAgdm9pZCBSYW5nZTo6dGV4dFF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+JgogICAgIGJvb2wgc29t
ZUZpeGVkID0gZmFsc2U7CiAKICAgICBOb2RlKiBzdG9wTm9kZSA9IHBhc3RMYXN0Tm9kZSgpOwot
ICAgIGZvciAoTm9kZSogbm9kZSA9IGZpcnN0Tm9kZSgpOyBub2RlICE9IHN0b3BOb2RlOyBub2Rl
ID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgpKSB7CisgICAgZm9yIChOb2RlKiBub2RlID0gZmly
c3ROb2RlKCk7IG5vZGUgIT0gc3RvcE5vZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5v
ZGUpKSB7CiAgICAgICAgIFJlbmRlck9iamVjdCogciA9IG5vZGUtPnJlbmRlcmVyKCk7CiAgICAg
ICAgIGlmICghciB8fCAhci0+aXNUZXh0KCkpCiAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTE5
MDksMTIgKzE5MTAsMTIgQEAgdm9pZCBSYW5nZTo6Z2V0Qm9yZGVyQW5kVGV4dFF1YWRzKFZlY3Rv
cgogICAgIE5vZGUqIHN0b3BOb2RlID0gcGFzdExhc3ROb2RlKCk7CiAKICAgICBIYXNoU2V0PE5v
ZGUqPiBub2RlU2V0OwotICAgIGZvciAoTm9kZSogbm9kZSA9IGZpcnN0Tm9kZSgpOyBub2RlICE9
IHN0b3BOb2RlOyBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgpKSB7CisgICAgZm9yIChO
b2RlKiBub2RlID0gZmlyc3ROb2RlKCk7IG5vZGUgIT0gc3RvcE5vZGU7IG5vZGUgPSBOb2RlVHJh
dmVyc2FsOjpuZXh0KG5vZGUpKSB7CiAgICAgICAgIGlmIChub2RlLT5pc0VsZW1lbnROb2RlKCkp
CiAgICAgICAgICAgICBub2RlU2V0LmFkZChub2RlKTsKICAgICB9CiAKLSAgICBmb3IgKE5vZGUq
IG5vZGUgPSBmaXJzdE5vZGUoKTsgbm9kZSAhPSBzdG9wTm9kZTsgbm9kZSA9IG5vZGUtPnRyYXZl
cnNlTmV4dE5vZGUoKSkgeworICAgIGZvciAoTm9kZSogbm9kZSA9IGZpcnN0Tm9kZSgpOyBub2Rl
ICE9IHN0b3BOb2RlOyBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dChub2RlKSkgewogICAgICAg
ICBpZiAobm9kZS0+aXNFbGVtZW50Tm9kZSgpKSB7CiAgICAgICAgICAgICBpZiAoIW5vZGVTZXQu
Y29udGFpbnMobm9kZS0+cGFyZW50Tm9kZSgpKSkgewogICAgICAgICAgICAgICAgIGlmIChSZW5k
ZXJCb3hNb2RlbE9iamVjdCogcmVuZGVyQm94TW9kZWxPYmplY3QgPSBzdGF0aWNfY2FzdDxFbGVt
ZW50Kj4obm9kZSktPnJlbmRlckJveE1vZGVsT2JqZWN0KCkpIHsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2RvbS9UcmVlU2NvcGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9U
cmVlU2NvcGUuY3BwCShyZXZpc2lvbiAxMzcxMDgpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vVHJl
ZVNjb3BlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsNiArNDIsNyBAQAogI2luY2x1ZGUgIkhU
TUxOYW1lcy5oIgogI2luY2x1ZGUgIklkVGFyZ2V0T2JzZXJ2ZXJSZWdpc3RyeS5oIgogI2luY2x1
ZGUgIkluc2VydGlvblBvaW50LmgiCisjaW5jbHVkZSAiTm9kZVRyYXZlcnNhbC5oIgogI2luY2x1
ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAjaW5jbHVk
ZSAiU2hhZG93Um9vdC5oIgpAQCAtMTg2LDcgKzE4Nyw3IEBAIEhUTUxMYWJlbEVsZW1lbnQqIFRy
ZWVTY29wZTo6bGFiZWxFbGVtZW4KICAgICBpZiAoIW1fbGFiZWxzQnlGb3JBdHRyaWJ1dGUpIHsK
ICAgICAgICAgLy8gUG9wdWxhdGUgdGhlIG1hcCBvbiBmaXJzdCBhY2Nlc3MuCiAgICAgICAgIG1f
bGFiZWxzQnlGb3JBdHRyaWJ1dGUgPSBhZG9wdFB0cihuZXcgRG9jdW1lbnRPcmRlcmVkTWFwKTsK
LSAgICAgICAgZm9yIChOb2RlKiBub2RlID0gcm9vdE5vZGUoKTsgbm9kZTsgbm9kZSA9IG5vZGUt
PnRyYXZlcnNlTmV4dE5vZGUoKSkgeworICAgICAgICBmb3IgKE5vZGUqIG5vZGUgPSByb290Tm9k
ZSgpOyBub2RlOyBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dChub2RlKSkgewogICAgICAgICAg
ICAgaWYgKG5vZGUtPmhhc1RhZ05hbWUobGFiZWxUYWcpKSB7CiAgICAgICAgICAgICAgICAgSFRN
TExhYmVsRWxlbWVudCogbGFiZWwgPSBzdGF0aWNfY2FzdDxIVE1MTGFiZWxFbGVtZW50Kj4obm9k
ZSk7CiAgICAgICAgICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBmb3JWYWx1ZSA9IGxhYmVs
LT5mYXN0R2V0QXR0cmlidXRlKGZvckF0dHIpOwpAQCAtMjMwLDcgKzIzMSw3IEBAIEVsZW1lbnQq
IFRyZWVTY29wZTo6ZmluZEFuY2hvcihjb25zdCBTdHIKICAgICAgICAgcmV0dXJuIDA7CiAgICAg
aWYgKEVsZW1lbnQqIGVsZW1lbnQgPSBnZXRFbGVtZW50QnlJZChuYW1lKSkKICAgICAgICAgcmV0
dXJuIGVsZW1lbnQ7Ci0gICAgZm9yIChOb2RlKiBub2RlID0gcm9vdE5vZGUoKTsgbm9kZTsgbm9k
ZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoKSkgeworICAgIGZvciAoTm9kZSogbm9kZSA9IHJv
b3ROb2RlKCk7IG5vZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUpKSB7CiAgICAg
ICAgIGlmIChub2RlLT5oYXNUYWdOYW1lKGFUYWcpKSB7CiAgICAgICAgICAgICBIVE1MQW5jaG9y
RWxlbWVudCogYW5jaG9yID0gc3RhdGljX2Nhc3Q8SFRNTEFuY2hvckVsZW1lbnQqPihub2RlKTsK
ICAgICAgICAgICAgIGlmIChyb290Tm9kZSgpLT5kb2N1bWVudCgpLT5pblF1aXJrc01vZGUoKSkg
ewpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1RyZWVTY29wZUFkb3B0ZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9UcmVlU2NvcGVBZG9wdGVyLmNwcAkocmV2aXNpb24g
MTM3MTA4KQorKysgU291cmNlL1dlYkNvcmUvZG9tL1RyZWVTY29wZUFkb3B0ZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiRWxlbWVudFJhcmVEYXRhLmgi
CiAjaW5jbHVkZSAiRWxlbWVudFNoYWRvdy5oIgogI2luY2x1ZGUgIk5vZGVSYXJlRGF0YS5oIgor
I2luY2x1ZGUgIk5vZGVUcmF2ZXJzYWwuaCIKICNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgogI2lu
Y2x1ZGUgIlNoYWRvd1Jvb3QuaCIKIApAQCAtNDgsNyArNDksNyBAQCB2b2lkIFRyZWVTY29wZUFk
b3B0ZXI6Om1vdmVUcmVlVG9OZXdTY29wCiAgICAgaWYgKG9sZERvY3VtZW50ICYmIHdpbGxNb3Zl
VG9OZXdEb2N1bWVudCkKICAgICAgICAgb2xkRG9jdW1lbnQtPmluY0RPTVRyZWVWZXJzaW9uKCk7
CiAKLSAgICBmb3IgKE5vZGUqIG5vZGUgPSByb290OyBub2RlOyBub2RlID0gbm9kZS0+dHJhdmVy
c2VOZXh0Tm9kZShyb290KSkgeworICAgIGZvciAoTm9kZSogbm9kZSA9IHJvb3Q7IG5vZGU7IG5v
ZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUsIHJvb3QpKSB7CiAgICAgICAgIG5vZGUtPnNl
dFRyZWVTY29wZShtX25ld1Njb3BlKTsKICAgICAgICAgaWYgKG5vZGUtPmhhc1JhcmVEYXRhKCkp
IHsKICAgICAgICAgICAgIE5vZGVSYXJlRGF0YSogcmFyZURhdGEgPSBub2RlLT5yYXJlRGF0YSgp
OwpAQCAtNjksNyArNzAsNyBAQCB2b2lkIFRyZWVTY29wZUFkb3B0ZXI6Om1vdmVUcmVlVG9OZXdT
Y29wCiAKIHZvaWQgVHJlZVNjb3BlQWRvcHRlcjo6bW92ZVRyZWVUb05ld0RvY3VtZW50KE5vZGUq
IHJvb3QsIERvY3VtZW50KiBvbGREb2N1bWVudCwgRG9jdW1lbnQqIG5ld0RvY3VtZW50KSBjb25z
dAogewotICAgIGZvciAoTm9kZSogbm9kZSA9IHJvb3Q7IG5vZGU7IG5vZGUgPSBub2RlLT50cmF2
ZXJzZU5leHROb2RlKHJvb3QpKSB7CisgICAgZm9yIChOb2RlKiBub2RlID0gcm9vdDsgbm9kZTsg
bm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9kZSwgcm9vdCkpIHsKICAgICAgICAgbW92ZU5v
ZGVUb05ld0RvY3VtZW50KG5vZGUsIG9sZERvY3VtZW50LCBuZXdEb2N1bWVudCk7CiAgICAgICAg
IGZvciAoU2hhZG93Um9vdCogc2hhZG93ID0gbm9kZS0+eW91bmdlc3RTaGFkb3dSb290KCk7IHNo
YWRvdzsgc2hhZG93ID0gc2hhZG93LT5vbGRlclNoYWRvd1Jvb3QoKSkKICAgICAgICAgICAgIG1v
dmVUcmVlVG9OZXdEb2N1bWVudChzaGFkb3csIG9sZERvY3VtZW50LCBuZXdEb2N1bWVudCk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vVHJlZVdhbGtlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvZG9tL1RyZWVXYWxrZXIuY3BwCShyZXZpc2lvbiAxMzcxMDgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9kb20vVHJlZVdhbGtlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4
LDcgQEAKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiQ29udGFpbmVyTm9k
ZS5oIgogI2luY2x1ZGUgIk5vZGVGaWx0ZXIuaCIKKyNpbmNsdWRlICJOb2RlVHJhdmVyc2FsLmgi
CiAjaW5jbHVkZSAiU2NyaXB0U3RhdGUuaCIKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgog
CkBAIC0yNjMsNyArMjY0LDcgQEAgQ2hpbGRyZW46CiAgICAgICAgIGlmIChhY2NlcHROb2RlUmVz
dWx0ID09IE5vZGVGaWx0ZXI6OkZJTFRFUl9SRUpFQ1QpCiAgICAgICAgICAgICBicmVhazsKICAg
ICB9Ci0gICAgd2hpbGUgKE5vZGUqIG5leHRTaWJsaW5nID0gbm9kZS0+dHJhdmVyc2VOZXh0U2li
bGluZyhyb290KCkpKSB7CisgICAgd2hpbGUgKE5vZGUqIG5leHRTaWJsaW5nID0gTm9kZVRyYXZl
cnNhbDo6bmV4dFNpYmxpbmcobm9kZS5nZXQoKSwgcm9vdCgpKSkgewogICAgICAgICBub2RlID0g
bmV4dFNpYmxpbmc7CiAgICAgICAgIHNob3J0IGFjY2VwdE5vZGVSZXN1bHQgPSBhY2NlcHROb2Rl
KHN0YXRlLCBub2RlLmdldCgpKTsKICAgICAgICAgaWYgKHN0YXRlICYmIHN0YXRlLT5oYWRFeGNl
cHRpb24oKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1h
bmQuY3BwCShyZXZpc2lvbiAxMzcxMDgpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5
U3R5bGVDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksNyBAQAogI2luY2x1
ZGUgIkhUTUxJbnRlcmNoYW5nZS5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUg
Ik5vZGVMaXN0LmgiCisjaW5jbHVkZSAiTm9kZVRyYXZlcnNhbC5oIgogI2luY2x1ZGUgIlJhbmdl
LmgiCiAjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCiAjaW5jbHVkZSAiUmVuZGVyVGV4dC5oIgpA
QCAtMzUxLDI2ICszNTIsMjYgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlSZWxhdGl2
ZUZvbgogICAgIC8vIGFuIGFuY2VzdG9yIG9mIHRoZSBzdGFydCBub2RlKSwgd2UgZ2F0aGVyIG5v
ZGVzIHVwIHRvIHRoZSBuZXh0IHNpYmxpbmcgb2YgdGhlIGVuZCBub2RlCiAgICAgTm9kZSAqYmV5
b25kRW5kOwogICAgIGlmIChzdGFydC5kZXByZWNhdGVkTm9kZSgpLT5pc0Rlc2NlbmRhbnRPZihl
bmQuZGVwcmVjYXRlZE5vZGUoKSkpCi0gICAgICAgIGJleW9uZEVuZCA9IGVuZC5kZXByZWNhdGVk
Tm9kZSgpLT50cmF2ZXJzZU5leHRTaWJsaW5nKCk7CisgICAgICAgIGJleW9uZEVuZCA9IE5vZGVU
cmF2ZXJzYWw6Om5leHRTaWJsaW5nKGVuZC5kZXByZWNhdGVkTm9kZSgpKTsKICAgICBlbHNlCi0g
ICAgICAgIGJleW9uZEVuZCA9IGVuZC5kZXByZWNhdGVkTm9kZSgpLT50cmF2ZXJzZU5leHROb2Rl
KCk7CisgICAgICAgIGJleW9uZEVuZCA9IE5vZGVUcmF2ZXJzYWw6Om5leHQoZW5kLmRlcHJlY2F0
ZWROb2RlKCkpOwogICAgIAogICAgIHN0YXJ0ID0gc3RhcnQudXBzdHJlYW0oKTsgLy8gTW92ZSB1
cHN0cmVhbSB0byBlbnN1cmUgd2UgZG8gbm90IGFkZCByZWR1bmRhbnQgc3BhbnMuCiAgICAgTm9k
ZSogc3RhcnROb2RlID0gc3RhcnQuZGVwcmVjYXRlZE5vZGUoKTsKICAgICBpZiAoc3RhcnROb2Rl
LT5pc1RleHROb2RlKCkgJiYgc3RhcnQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSA+PSBjYXJl
dE1heE9mZnNldChzdGFydE5vZGUpKSAvLyBNb3ZlIG91dCBvZiB0ZXh0IG5vZGUgaWYgcmFuZ2Ug
ZG9lcyBub3QgaW5jbHVkZSBpdHMgY2hhcmFjdGVycy4KLSAgICAgICAgc3RhcnROb2RlID0gc3Rh
cnROb2RlLT50cmF2ZXJzZU5leHROb2RlKCk7CisgICAgICAgIHN0YXJ0Tm9kZSA9IE5vZGVUcmF2
ZXJzYWw6Om5leHQoc3RhcnROb2RlKTsKIAogICAgIC8vIFN0b3JlIGF3YXkgZm9udCBzaXplIGJl
Zm9yZSBtYWtpbmcgYW55IGNoYW5nZXMgdG8gdGhlIGRvY3VtZW50LgogICAgIC8vIFRoaXMgZW5z
dXJlcyB0aGF0IGNoYW5nZXMgdG8gb25lIG5vZGUgd29uJ3QgZWZmZWN0IGFub3RoZXIuCiAgICAg
SGFzaE1hcDxOb2RlKiwgZmxvYXQ+IHN0YXJ0aW5nRm9udFNpemVzOwotICAgIGZvciAoTm9kZSAq
bm9kZSA9IHN0YXJ0Tm9kZTsgbm9kZSAhPSBiZXlvbmRFbmQ7IG5vZGUgPSBub2RlLT50cmF2ZXJz
ZU5leHROb2RlKCkpCisgICAgZm9yIChOb2RlICpub2RlID0gc3RhcnROb2RlOyBub2RlICE9IGJl
eW9uZEVuZDsgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9kZSkpCiAgICAgICAgIHN0YXJ0
aW5nRm9udFNpemVzLnNldChub2RlLCBjb21wdXRlZEZvbnRTaXplKG5vZGUpKTsKIAogICAgIC8v
IFRoZXNlIHNwYW5zIHdlcmUgYWRkZWQgYnkgdXMuIElmIGVtcHR5IGFmdGVyIGZvbnQgc2l6ZSBj
aGFuZ2VzLCB0aGV5IGNhbiBiZSByZW1vdmVkLgogICAgIFZlY3RvcjxSZWZQdHI8SFRNTEVsZW1l
bnQ+ID4gdW5zdHlsZWRTcGFuczsKICAgICAKICAgICBOb2RlKiBsYXN0U3R5bGVkTm9kZSA9IDA7
Ci0gICAgZm9yIChOb2RlKiBub2RlID0gc3RhcnROb2RlOyBub2RlICE9IGJleW9uZEVuZDsgbm9k
ZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoKSkgeworICAgIGZvciAoTm9kZSogbm9kZSA9IHN0
YXJ0Tm9kZTsgbm9kZSAhPSBiZXlvbmRFbmQ7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5v
ZGUpKSB7CiAgICAgICAgIFJlZlB0cjxIVE1MRWxlbWVudD4gZWxlbWVudDsKICAgICAgICAgaWYg
KG5vZGUtPmlzSFRNTEVsZW1lbnQoKSkgewogICAgICAgICAgICAgLy8gT25seSB3b3JrIG9uIGZ1
bGx5IHNlbGVjdGVkIG5vZGVzLgpAQCAtNjc0LDE5ICs2NzUsMTkgQEAgdm9pZCBBcHBseVN0eWxl
Q29tbWFuZDo6Zml4UmFuZ2VBbmRBcHBseQogICAgIE5vZGUqIHN0YXJ0Tm9kZSA9IHN0YXJ0LmRl
cHJlY2F0ZWROb2RlKCk7CiAKICAgICBpZiAoc3RhcnQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQo
KSA+PSBjYXJldE1heE9mZnNldChzdGFydC5kZXByZWNhdGVkTm9kZSgpKSkgewotICAgICAgICBz
dGFydE5vZGUgPSBzdGFydE5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoKTsKKyAgICAgICAgc3RhcnRO
b2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dChzdGFydE5vZGUpOwogICAgICAgICBpZiAoIXN0YXJ0
Tm9kZSB8fCBjb21wYXJlUG9zaXRpb25zKGVuZCwgZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2Rl
KHN0YXJ0Tm9kZSkpIDwgMCkKICAgICAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBOb2Rl
KiBwYXN0RW5kTm9kZSA9IGVuZC5kZXByZWNhdGVkTm9kZSgpOwogICAgIGlmIChlbmQuZGVwcmVj
YXRlZEVkaXRpbmdPZmZzZXQoKSA+PSBjYXJldE1heE9mZnNldChlbmQuZGVwcmVjYXRlZE5vZGUo
KSkpCi0gICAgICAgIHBhc3RFbmROb2RlID0gZW5kLmRlcHJlY2F0ZWROb2RlKCktPnRyYXZlcnNl
TmV4dFNpYmxpbmcoKTsKKyAgICAgICAgcGFzdEVuZE5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0
U2libGluZyhlbmQuZGVwcmVjYXRlZE5vZGUoKSk7CiAKICAgICAvLyBGSVhNRTogQ2FsbGVycyBz
aG91bGQgcGVyZm9ybSB0aGlzIG9wZXJhdGlvbiBvbiBhIFJhbmdlIHRoYXQgaW5jbHVkZXMgdGhl
IGJyCiAgICAgLy8gaWYgdGhleSB3YW50IHN0eWxlIGFwcGxpZWQgdG8gdGhlIGVtcHR5IGxpbmUu
CiAgICAgaWYgKHN0YXJ0ID09IGVuZCAmJiBzdGFydC5kZXByZWNhdGVkTm9kZSgpLT5oYXNUYWdO
YW1lKGJyVGFnKSkKLSAgICAgICAgcGFzdEVuZE5vZGUgPSBzdGFydC5kZXByZWNhdGVkTm9kZSgp
LT50cmF2ZXJzZU5leHROb2RlKCk7CisgICAgICAgIHBhc3RFbmROb2RlID0gTm9kZVRyYXZlcnNh
bDo6bmV4dChzdGFydC5kZXByZWNhdGVkTm9kZSgpKTsKIAogICAgIC8vIFN0YXJ0IGZyb20gdGhl
IGhpZ2hlc3QgZnVsbHkgc2VsZWN0ZWQgYW5jZXN0b3Igc28gdGhhdCB3ZSBjYW4gbW9kaWZ5IHRo
ZSBmdWxseSBzZWxlY3RlZCBub2RlLgogICAgIC8vIGUuZy4gV2hlbiBhcHBseWluZyBmb250LXNp
emU6IGxhcmdlIG9uIDxmb250IGNvbG9yPSJibHVlIj5oZWxsbzwvZm9udD4sIHdlIG5lZWQgdG8g
aW5jbHVkZSB0aGUgZm9udCBlbGVtZW50IGluIG91ciBydW4KQEAgLTcwNiw4ICs3MDcsOCBAQCBz
dGF0aWMgYm9vbCBjb250YWluc05vbkVkaXRhYmxlUmVnaW9uKE5vCiAgICAgaWYgKCFub2RlLT5y
ZW5kZXJlcklzRWRpdGFibGUoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBOb2RlKiBz
aWJsaW5nID0gbm9kZS0+dHJhdmVyc2VOZXh0U2libGluZygpOwotICAgIGZvciAoTm9kZSogZGVz
Y2VuZGVudCA9IG5vZGUtPmZpcnN0Q2hpbGQoKTsgZGVzY2VuZGVudCAmJiBkZXNjZW5kZW50ICE9
IHNpYmxpbmc7IGRlc2NlbmRlbnQgPSBkZXNjZW5kZW50LT50cmF2ZXJzZU5leHROb2RlKCkpIHsK
KyAgICBOb2RlKiBzaWJsaW5nID0gTm9kZVRyYXZlcnNhbDo6bmV4dFNpYmxpbmcobm9kZSk7Cisg
ICAgZm9yIChOb2RlKiBkZXNjZW5kZW50ID0gbm9kZS0+Zmlyc3RDaGlsZCgpOyBkZXNjZW5kZW50
ICYmIGRlc2NlbmRlbnQgIT0gc2libGluZzsgZGVzY2VuZGVudCA9IE5vZGVUcmF2ZXJzYWw6Om5l
eHQoZGVzY2VuZGVudCkpIHsKICAgICAgICAgaWYgKCFkZXNjZW5kZW50LT5yZW5kZXJlcklzRWRp
dGFibGUoKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KQEAgLTcyMiw3ICs3MjMs
NyBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjphcHBseUlubGluZVN0eWxlCiAKICAgICBSZWZQ
dHI8Tm9kZT4gbm9kZSA9IHN0YXJ0Tm9kZTsKICAgICBmb3IgKFJlZlB0cjxOb2RlPiBuZXh0OyBu
b2RlICYmIG5vZGUgIT0gcGFzdEVuZE5vZGU7IG5vZGUgPSBuZXh0KSB7Ci0gICAgICAgIG5leHQg
PSBub2RlLT50cmF2ZXJzZU5leHROb2RlKCk7CisgICAgICAgIG5leHQgPSBOb2RlVHJhdmVyc2Fs
OjpuZXh0KG5vZGUuZ2V0KCkpOwogCiAgICAgICAgIGlmICghbm9kZS0+cmVuZGVyZXIoKSB8fCAh
bm9kZS0+cmVuZGVyZXJJc0VkaXRhYmxlKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTcz
OCw3ICs3MzksNyBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjphcHBseUlubGluZVN0eWxlCiAg
ICAgICAgICAgICBSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4gaW5saW5lU3R5bGUgPSBlbGVtZW50
LT5lbnN1cmVNdXRhYmxlSW5saW5lU3R5bGUoKS0+Y29weSgpOwogICAgICAgICAgICAgaW5saW5l
U3R5bGUtPm1lcmdlQW5kT3ZlcnJpZGVPbkNvbmZsaWN0KHN0eWxlLT5zdHlsZSgpKTsKICAgICAg
ICAgICAgIHNldE5vZGVBdHRyaWJ1dGUoZWxlbWVudCwgc3R5bGVBdHRyLCBpbmxpbmVTdHlsZS0+
YXNUZXh0KCkpOwotICAgICAgICAgICAgbmV4dCA9IG5vZGUtPnRyYXZlcnNlTmV4dFNpYmxpbmco
KTsKKyAgICAgICAgICAgIG5leHQgPSBOb2RlVHJhdmVyc2FsOjpuZXh0U2libGluZyhub2RlLmdl
dCgpKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAgICAgICAgIApAQCAtNzQ5
LDcgKzc1MCw3IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5SW5saW5lU3R5bGUKICAg
ICAgICAgICAgIGlmIChub2RlLT5jb250YWlucyhwYXN0RW5kTm9kZS5nZXQoKSkgfHwgY29udGFp
bnNOb25FZGl0YWJsZVJlZ2lvbihub2RlLmdldCgpKSB8fCAhbm9kZS0+cGFyZW50Tm9kZSgpLT5y
ZW5kZXJlcklzRWRpdGFibGUoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
ICAgIGlmIChlZGl0aW5nSWdub3Jlc0NvbnRlbnQobm9kZS5nZXQoKSkpIHsKLSAgICAgICAgICAg
ICAgICBuZXh0ID0gbm9kZS0+dHJhdmVyc2VOZXh0U2libGluZygpOworICAgICAgICAgICAgICAg
IG5leHQgPSBOb2RlVHJhdmVyc2FsOjpuZXh0U2libGluZyhub2RlLmdldCgpKTsKICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtNzYzLDcgKzc2
NCw3IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5SW5saW5lU3R5bGUKICAgICAgICAg
ICAgIHJ1bkVuZCA9IHNpYmxpbmc7CiAgICAgICAgICAgICBzaWJsaW5nID0gcnVuRW5kLT5uZXh0
U2libGluZygpOwogICAgICAgICB9Ci0gICAgICAgIG5leHQgPSBydW5FbmQtPnRyYXZlcnNlTmV4
dFNpYmxpbmcoKTsKKyAgICAgICAgbmV4dCA9IE5vZGVUcmF2ZXJzYWw6Om5leHRTaWJsaW5nKHJ1
bkVuZC5nZXQoKSk7CiAKICAgICAgICAgaWYgKCFyZW1vdmVTdHlsZUZyb21SdW5CZWZvcmVBcHBs
eWluZ1N0eWxlKHN0eWxlLCBydW5TdGFydCwgcnVuRW5kKSkKICAgICAgICAgICAgIGNvbnRpbnVl
OwpAQCAtNzgwLDkgKzc4MSw5IEBAIGJvb2wgQXBwbHlTdHlsZUNvbW1hbmQ6OmlzU3R5bGVkSW5s
aW5lRWwKIGJvb2wgQXBwbHlTdHlsZUNvbW1hbmQ6OnJlbW92ZVN0eWxlRnJvbVJ1bkJlZm9yZUFw
cGx5aW5nU3R5bGUoRWRpdGluZ1N0eWxlKiBzdHlsZSwgUmVmUHRyPE5vZGU+JiBydW5TdGFydCwg
UmVmUHRyPE5vZGU+JiBydW5FbmQpCiB7CiAgICAgQVNTRVJUKHJ1blN0YXJ0ICYmIHJ1bkVuZCAm
JiBydW5TdGFydC0+cGFyZW50Tm9kZSgpID09IHJ1bkVuZC0+cGFyZW50Tm9kZSgpKTsKLSAgICBS
ZWZQdHI8Tm9kZT4gcGFzdEVuZE5vZGUgPSBydW5FbmQtPnRyYXZlcnNlTmV4dFNpYmxpbmcoKTsK
KyAgICBSZWZQdHI8Tm9kZT4gcGFzdEVuZE5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0U2libGlu
ZyhydW5FbmQuZ2V0KCkpOwogICAgIGJvb2wgbmVlZFRvQXBwbHlTdHlsZSA9IGZhbHNlOwotICAg
IGZvciAoTm9kZSogbm9kZSA9IHJ1blN0YXJ0LmdldCgpOyBub2RlICYmIG5vZGUgIT0gcGFzdEVu
ZE5vZGUuZ2V0KCk7IG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKCkpIHsKKyAgICBmb3Ig
KE5vZGUqIG5vZGUgPSBydW5TdGFydC5nZXQoKTsgbm9kZSAmJiBub2RlICE9IHBhc3RFbmROb2Rl
LmdldCgpOyBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dChub2RlKSkgewogICAgICAgICBpZiAo
bm9kZS0+Y2hpbGROb2RlQ291bnQoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAv
LyBXZSBkb24ndCBjb25zaWRlciBtX2lzSW5saW5lRWxlbWVudFRvUmVtb3ZlRnVuY3Rpb24gaGVy
ZSBiZWNhdXNlIHdlIG5ldmVyIGFwcGx5IHN0eWxlIHdoZW4gbV9pc0lubGluZUVsZW1lbnRUb1Jl
bW92ZUZ1bmN0aW9uIGlzIHNwZWNpZmllZApAQCAtNzk5LDkgKzgwMCw5IEBAIGJvb2wgQXBwbHlT
dHlsZUNvbW1hbmQ6OnJlbW92ZVN0eWxlRnJvbVIKICAgICBmb3IgKFJlZlB0cjxOb2RlPiBub2Rl
ID0gbmV4dDsgbm9kZSAmJiBub2RlLT5pbkRvY3VtZW50KCkgJiYgbm9kZSAhPSBwYXN0RW5kTm9k
ZTsgbm9kZSA9IG5leHQpIHsKICAgICAgICAgaWYgKGVkaXRpbmdJZ25vcmVzQ29udGVudChub2Rl
LmdldCgpKSkgewogICAgICAgICAgICAgQVNTRVJUKCFub2RlLT5jb250YWlucyhwYXN0RW5kTm9k
ZS5nZXQoKSkpOwotICAgICAgICAgICAgbmV4dCA9IG5vZGUtPnRyYXZlcnNlTmV4dFNpYmxpbmco
KTsKKyAgICAgICAgICAgIG5leHQgPSBOb2RlVHJhdmVyc2FsOjpuZXh0U2libGluZyhub2RlLmdl
dCgpKTsKICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBuZXh0ID0gbm9kZS0+dHJhdmVyc2VO
ZXh0Tm9kZSgpOworICAgICAgICAgICAgbmV4dCA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9kZS5n
ZXQoKSk7CiAgICAgICAgIGlmICghbm9kZS0+aXNIVE1MRWxlbWVudCgpKQogICAgICAgICAgICAg
Y29udGludWU7CiAKQEAgLTEwNTQsMTMgKzEwNTUsMTMgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFu
ZDo6cmVtb3ZlSW5saW5lU3R5bAogICAgICAgICBSZWZQdHI8Tm9kZT4gbmV4dDsKICAgICAgICAg
aWYgKGVkaXRpbmdJZ25vcmVzQ29udGVudChub2RlKSkgewogICAgICAgICAgICAgQVNTRVJUKG5v
ZGUgPT0gZW5kLmRlcHJlY2F0ZWROb2RlKCkgfHwgIW5vZGUtPmNvbnRhaW5zKGVuZC5kZXByZWNh
dGVkTm9kZSgpKSk7Ci0gICAgICAgICAgICBuZXh0ID0gbm9kZS0+dHJhdmVyc2VOZXh0U2libGlu
ZygpOworICAgICAgICAgICAgbmV4dCA9IE5vZGVUcmF2ZXJzYWw6Om5leHRTaWJsaW5nKG5vZGUp
OwogICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIG5leHQgPSBub2RlLT50cmF2ZXJzZU5leHRO
b2RlKCk7CisgICAgICAgICAgICBuZXh0ID0gTm9kZVRyYXZlcnNhbDo6bmV4dChub2RlKTsKICAg
ICAgICAgaWYgKG5vZGUtPmlzSFRNTEVsZW1lbnQoKSAmJiBub2RlRnVsbHlTZWxlY3RlZChub2Rl
LCBzdGFydCwgZW5kKSkgewogICAgICAgICAgICAgUmVmUHRyPEhUTUxFbGVtZW50PiBlbGVtID0g
dG9IVE1MRWxlbWVudChub2RlKTsKLSAgICAgICAgICAgIFJlZlB0cjxOb2RlPiBwcmV2ID0gZWxl
bS0+dHJhdmVyc2VQcmV2aW91c05vZGVQb3N0T3JkZXIoKTsKLSAgICAgICAgICAgIFJlZlB0cjxO
b2RlPiBuZXh0ID0gZWxlbS0+dHJhdmVyc2VOZXh0Tm9kZSgpOworICAgICAgICAgICAgUmVmUHRy
PE5vZGU+IHByZXYgPSBOb2RlVHJhdmVyc2FsOjpwcmV2aW91c1Bvc3RPcmRlcihlbGVtLmdldCgp
KTsKKyAgICAgICAgICAgIFJlZlB0cjxOb2RlPiBuZXh0ID0gTm9kZVRyYXZlcnNhbDo6bmV4dChl
bGVtLmdldCgpKTsKICAgICAgICAgICAgIFJlZlB0cjxFZGl0aW5nU3R5bGU+IHN0eWxlVG9QdXNo
RG93bjsKICAgICAgICAgICAgIFJlZlB0cjxOb2RlPiBjaGlsZE5vZGU7CiAgICAgICAgICAgICBp
ZiAoaXNTdHlsZWRJbmxpbmVFbGVtZW50VG9SZW1vdmUoZWxlbS5nZXQoKSkpIHsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvQnJlYWtCbG9ja3F1b3RlQ29tbWFuZC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9CcmVha0Jsb2NrcXVvdGVDb21tYW5kLmNwcAko
cmV2aXNpb24gMTM3MTA4KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9CcmVha0Jsb2NrcXVv
dGVDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVk
ZSAiSFRNTEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJOb2Rl
VHJhdmVyc2FsLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGlzdEl0ZW0uaCIKICNpbmNsdWRlICJUZXh0
LmgiCiAjaW5jbHVkZSAiVmlzaWJsZVBvc2l0aW9uLmgiCkBAIC0xMDksMTMgKzExMCwxMyBAQCB2
b2lkIEJyZWFrQmxvY2txdW90ZUNvbW1hbmQ6OmRvQXBwbHkoKQogICAgIGlmIChzdGFydE5vZGUt
PmlzVGV4dE5vZGUoKSkgewogICAgICAgICBUZXh0KiB0ZXh0Tm9kZSA9IHRvVGV4dChzdGFydE5v
ZGUpOwogICAgICAgICBpZiAoKHVuc2lnbmVkKXBvcy5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgp
ID49IHRleHROb2RlLT5sZW5ndGgoKSkgewotICAgICAgICAgICAgc3RhcnROb2RlID0gc3RhcnRO
b2RlLT50cmF2ZXJzZU5leHROb2RlKCk7CisgICAgICAgICAgICBzdGFydE5vZGUgPSBOb2RlVHJh
dmVyc2FsOjpuZXh0KHN0YXJ0Tm9kZSk7CiAgICAgICAgICAgICBBU1NFUlQoc3RhcnROb2RlKTsK
ICAgICAgICAgfSBlbHNlIGlmIChwb3MuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSA+IDApCiAg
ICAgICAgICAgICBzcGxpdFRleHROb2RlKHRleHROb2RlLCBwb3MuZGVwcmVjYXRlZEVkaXRpbmdP
ZmZzZXQoKSk7CiAgICAgfSBlbHNlIGlmIChwb3MuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSA+
IDApIHsKICAgICAgICAgTm9kZSogY2hpbGRBdE9mZnNldCA9IHN0YXJ0Tm9kZS0+Y2hpbGROb2Rl
KHBvcy5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpKTsKLSAgICAgICAgc3RhcnROb2RlID0gY2hp
bGRBdE9mZnNldCA/IGNoaWxkQXRPZmZzZXQgOiBzdGFydE5vZGUtPnRyYXZlcnNlTmV4dE5vZGUo
KTsKKyAgICAgICAgc3RhcnROb2RlID0gY2hpbGRBdE9mZnNldCA/IGNoaWxkQXRPZmZzZXQgOiBO
b2RlVHJhdmVyc2FsOjpuZXh0KHN0YXJ0Tm9kZSk7CiAgICAgICAgIEFTU0VSVChzdGFydE5vZGUp
OwogICAgIH0KICAgICAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRp
dENvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9z
aXRlRWRpdENvbW1hbmQuY3BwCShyZXZpc2lvbiAxMzcxMDgpCisrKyBTb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsNiAr
NDUsNyBAQAogI2luY2x1ZGUgIkluc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQuaCIKICNp
bmNsdWRlICJJbnNlcnRUZXh0Q29tbWFuZC5oIgogI2luY2x1ZGUgIk1lcmdlSWRlbnRpY2FsRWxl
bWVudHNDb21tYW5kLmgiCisjaW5jbHVkZSAiTm9kZVRyYXZlcnNhbC5oIgogI2luY2x1ZGUgIlJh
bmdlLmgiCiAjaW5jbHVkZSAiUmVtb3ZlQ1NTUHJvcGVydHlDb21tYW5kLmgiCiAjaW5jbHVkZSAi
UmVtb3ZlTm9kZUNvbW1hbmQuaCIKQEAgLTgwOCw3ICs4MDksNyBAQCB2b2lkIENvbXBvc2l0ZUVk
aXRDb21tYW5kOjpkZWxldGVJbnNpZ25pCiAgICAgICAgIHJldHVybjsKIAogICAgIFZlY3RvcjxS
ZWZQdHI8VGV4dD4gPiBub2RlczsKLSAgICBmb3IgKE5vZGUqIG5vZGUgPSBzdGFydC5kZXByZWNh
dGVkTm9kZSgpOyBub2RlOyBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgpKSB7CisgICAg
Zm9yIChOb2RlKiBub2RlID0gc3RhcnQuZGVwcmVjYXRlZE5vZGUoKTsgbm9kZTsgbm9kZSA9IE5v
ZGVUcmF2ZXJzYWw6Om5leHQobm9kZSkpIHsKICAgICAgICAgaWYgKG5vZGUtPmlzVGV4dE5vZGUo
KSkKICAgICAgICAgICAgIG5vZGVzLmFwcGVuZCh0b1RleHQobm9kZSkpOwogICAgICAgICBpZiAo
bm9kZSA9PSBlbmQuZGVwcmVjYXRlZE5vZGUoKSkKQEAgLTEwMjIsOSArMTAyMyw5IEBAIHZvaWQg
Q29tcG9zaXRlRWRpdENvbW1hbmQ6OmNsb25lUGFyYWdyYXAKICAgICAgICAgfQogCiAgICAgICAg
IE5vZGUqIHN0YXJ0Tm9kZSA9IHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCk7Ci0gICAgICAgIGZvciAo
Tm9kZSogbm9kZSA9IHN0YXJ0Tm9kZS0+dHJhdmVyc2VOZXh0U2libGluZyhvdXRlck5vZGUuZ2V0
KCkpOyBub2RlOyBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0U2libGluZyhvdXRlck5vZGUuZ2V0
KCkpKSB7CisgICAgICAgIGZvciAoTm9kZSogbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHRTaWJs
aW5nKHN0YXJ0Tm9kZSwgb3V0ZXJOb2RlLmdldCgpKTsgbm9kZTsgbm9kZSA9IE5vZGVUcmF2ZXJz
YWw6Om5leHRTaWJsaW5nKG5vZGUsIG91dGVyTm9kZS5nZXQoKSkpIHsKICAgICAgICAgICAgIC8v
IE1vdmUgbGFzdE5vZGUgdXAgaW4gdGhlIHRyZWUgYXMgbXVjaCBhcyBub2RlIHdhcyBtb3ZlZCB1
cCBpbiB0aGUKLSAgICAgICAgICAgIC8vIHRyZWUgYnkgdHJhdmVyc2VOZXh0U2libGluZywgc28g
dGhhdCB0aGUgcmVsYXRpdmUgZGVwdGggYmV0d2VlbgorICAgICAgICAgICAgLy8gdHJlZSBieSBO
b2RlVHJhdmVyc2FsOjpuZXh0U2libGluZywgc28gdGhhdCB0aGUgcmVsYXRpdmUgZGVwdGggYmV0
d2VlbgogICAgICAgICAgICAgLy8gbm9kZSBhbmQgdGhlIG9yaWdpbmFsIHN0YXJ0IG5vZGUgaXMg
bWFpbnRhaW5lZCBpbiB0aGUgY2xvbmUuCiAgICAgICAgICAgICB3aGlsZSAoc3RhcnROb2RlLT5w
YXJlbnROb2RlKCkgIT0gbm9kZS0+cGFyZW50Tm9kZSgpKSB7CiAgICAgICAgICAgICAgICAgc3Rh
cnROb2RlID0gc3RhcnROb2RlLT5wYXJlbnROb2RlKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAJKHJldmlzaW9uIDEzNzEw
OCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlICJodG1sZWRpdGluZy5o
IgogI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIK
KyNpbmNsdWRlICJOb2RlVHJhdmVyc2FsLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGFibGVDZWxsLmgi
CiAjaW5jbHVkZSAiVGV4dC5oIgogI2luY2x1ZGUgInZpc2libGVfdW5pdHMuaCIKQEAgLTMyOSw3
ICszMzAsNyBAQCBzdGF0aWMgUG9zaXRpb24gZmlyc3RFZGl0YWJsZVBvc2l0aW9uSW5OCiAgICAg
QVNTRVJUKG5vZGUpOwogICAgIE5vZGUqIG5leHQgPSBub2RlOwogICAgIHdoaWxlIChuZXh0ICYm
ICFuZXh0LT5yZW5kZXJlcklzRWRpdGFibGUoKSkKLSAgICAgICAgbmV4dCA9IG5leHQtPnRyYXZl
cnNlTmV4dE5vZGUobm9kZSk7CisgICAgICAgIG5leHQgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5l
eHQsIG5vZGUpOwogICAgIHJldHVybiBuZXh0ID8gZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2Rl
KG5leHQpIDogUG9zaXRpb24oKTsKIH0KIApAQCAtNDIxLDkgKzQyMiw5IEBAIHZvaWQgRGVsZXRl
U2VsZWN0aW9uQ29tbWFuZDo6bWFrZVN0eWxpbmcKICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0g
bV9zZWxlY3Rpb25Ub0RlbGV0ZS50b05vcm1hbGl6ZWRSYW5nZSgpOwogICAgIFJlZlB0cjxOb2Rl
PiBub2RlID0gcmFuZ2UtPmZpcnN0Tm9kZSgpOwogICAgIHdoaWxlIChub2RlICYmIG5vZGUgIT0g
cmFuZ2UtPnBhc3RMYXN0Tm9kZSgpKSB7Ci0gICAgICAgIFJlZlB0cjxOb2RlPiBuZXh0Tm9kZSA9
IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoKTsKKyAgICAgICAgUmVmUHRyPE5vZGU+IG5leHROb2Rl
ID0gTm9kZVRyYXZlcnNhbDo6bmV4dChub2RlLmdldCgpKTsKICAgICAgICAgaWYgKChub2RlLT5o
YXNUYWdOYW1lKHN0eWxlVGFnKSAmJiAhKHRvRWxlbWVudChub2RlLmdldCgpKS0+aGFzQXR0cmli
dXRlKHNjb3BlZEF0dHIpKSkgfHwgbm9kZS0+aGFzVGFnTmFtZShsaW5rVGFnKSkgewotICAgICAg
ICAgICAgbmV4dE5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHRTaWJsaW5nKCk7CisgICAgICAgICAg
ICBuZXh0Tm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHRTaWJsaW5nKG5vZGUuZ2V0KCkpOwogICAg
ICAgICAgICAgUmVmUHRyPENvbnRhaW5lck5vZGU+IHJvb3RFZGl0YWJsZUVsZW1lbnQgPSBub2Rl
LT5yb290RWRpdGFibGVFbGVtZW50KCk7CiAgICAgICAgICAgICByZW1vdmVOb2RlKG5vZGUpOwog
ICAgICAgICAgICAgYXBwZW5kTm9kZShub2RlLCByb290RWRpdGFibGVFbGVtZW50KTsKQEAgLTQ0
NSw3ICs0NDYsNyBAQCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmhhbmRsZUdlbmVyCiAg
ICAgLy8gTmV2ZXIgcmVtb3ZlIHRoZSBzdGFydCBibG9jayB1bmxlc3MgaXQncyBhIHRhYmxlLCBp
biB3aGljaCBjYXNlIHdlIHdvbid0IG1lcmdlIGNvbnRlbnQgaW4uCiAgICAgaWYgKHN0YXJ0Tm9k
ZSA9PSBtX3N0YXJ0QmxvY2sgJiYgc3RhcnRPZmZzZXQgPT0gMCAmJiBjYW5IYXZlQ2hpbGRyZW5G
b3JFZGl0aW5nKHN0YXJ0Tm9kZSkgJiYgIXN0YXJ0Tm9kZS0+aGFzVGFnTmFtZSh0YWJsZVRhZykp
IHsKICAgICAgICAgc3RhcnRPZmZzZXQgPSAwOwotICAgICAgICBzdGFydE5vZGUgPSBzdGFydE5v
ZGUtPnRyYXZlcnNlTmV4dE5vZGUoKTsKKyAgICAgICAgc3RhcnROb2RlID0gTm9kZVRyYXZlcnNh
bDo6bmV4dChzdGFydE5vZGUpOwogICAgICAgICBpZiAoIXN0YXJ0Tm9kZSkKICAgICAgICAgICAg
IHJldHVybjsKICAgICB9CkBAIC00NTcsNyArNDU4LDcgQEAgdm9pZCBEZWxldGVTZWxlY3Rpb25D
b21tYW5kOjpoYW5kbGVHZW5lcgogICAgIH0KIAogICAgIGlmIChzdGFydE9mZnNldCA+PSBsYXN0
T2Zmc2V0Rm9yRWRpdGluZyhzdGFydE5vZGUpKSB7Ci0gICAgICAgIHN0YXJ0Tm9kZSA9IHN0YXJ0
Tm9kZS0+dHJhdmVyc2VOZXh0U2libGluZygpOworICAgICAgICBzdGFydE5vZGUgPSBOb2RlVHJh
dmVyc2FsOjpuZXh0U2libGluZyhzdGFydE5vZGUpOwogICAgICAgICBzdGFydE9mZnNldCA9IDA7
CiAgICAgfQogCkBAIC00OTEsNyArNDkyLDcgQEAgdm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5k
OjpoYW5kbGVHZW5lcgogICAgICAgICAgICAgICAgIC8vIGluIGEgdGV4dCBub2RlIHRoYXQgbmVl
ZHMgdG8gYmUgdHJpbW1lZAogICAgICAgICAgICAgICAgIFRleHQqIHRleHQgPSB0b1RleHQobm9k
ZS5nZXQoKSk7CiAgICAgICAgICAgICAgICAgZGVsZXRlVGV4dEZyb21Ob2RlKHRleHQsIHN0YXJ0
T2Zmc2V0LCB0ZXh0LT5sZW5ndGgoKSAtIHN0YXJ0T2Zmc2V0KTsKLSAgICAgICAgICAgICAgICBu
b2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgpOworICAgICAgICAgICAgICAgIG5vZGUgPSBO
b2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUuZ2V0KCkpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAg
ICAgICAgICAgICAgICBub2RlID0gc3RhcnROb2RlLT5jaGlsZE5vZGUoc3RhcnRPZmZzZXQpOwog
ICAgICAgICAgICAgfQpAQCAtNTAzLDEwICs1MDQsMTAgQEAgdm9pZCBEZWxldGVTZWxlY3Rpb25D
b21tYW5kOjpoYW5kbGVHZW5lcgogICAgICAgICAvLyBoYW5kbGUgZGVsZXRpbmcgYWxsIG5vZGVz
IHRoYXQgYXJlIGNvbXBsZXRlbHkgc2VsZWN0ZWQKICAgICAgICAgd2hpbGUgKG5vZGUgJiYgbm9k
ZSAhPSBtX2Rvd25zdHJlYW1FbmQuZGVwcmVjYXRlZE5vZGUoKSkgewogICAgICAgICAgICAgaWYg
KGNvbXBhcmVQb3NpdGlvbnMoZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKG5vZGUuZ2V0KCkp
LCBtX2Rvd25zdHJlYW1FbmQpID49IDApIHsKLSAgICAgICAgICAgICAgICAvLyB0cmF2ZXJzZU5l
eHRTaWJsaW5nIGp1c3QgYmxldyBwYXN0IHRoZSBlbmQgcG9zaXRpb24sIHNvIHN0b3AgZGVsZXRp
bmcKKyAgICAgICAgICAgICAgICAvLyBOb2RlVHJhdmVyc2FsOjpuZXh0U2libGluZyBqdXN0IGJs
ZXcgcGFzdCB0aGUgZW5kIHBvc2l0aW9uLCBzbyBzdG9wIGRlbGV0aW5nCiAgICAgICAgICAgICAg
ICAgbm9kZSA9IDA7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKCFtX2Rvd25zdHJlYW1FbmQuZGVw
cmVjYXRlZE5vZGUoKS0+aXNEZXNjZW5kYW50T2Yobm9kZS5nZXQoKSkpIHsKLSAgICAgICAgICAg
ICAgICBSZWZQdHI8Tm9kZT4gbmV4dE5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHRTaWJsaW5nKCk7
CisgICAgICAgICAgICAgICAgUmVmUHRyPE5vZGU+IG5leHROb2RlID0gTm9kZVRyYXZlcnNhbDo6
bmV4dFNpYmxpbmcobm9kZS5nZXQoKSk7CiAgICAgICAgICAgICAgICAgLy8gaWYgd2UganVzdCBy
ZW1vdmVkIGEgbm9kZSBmcm9tIHRoZSBlbmQgY29udGFpbmVyLCB1cGRhdGUgZW5kIHBvc2l0aW9u
IHNvIHRoZQogICAgICAgICAgICAgICAgIC8vIGNoZWNrIGFib3ZlIHdpbGwgd29yawogICAgICAg
ICAgICAgICAgIHVwZGF0ZVBvc2l0aW9uRm9yTm9kZVJlbW92YWwobV9kb3duc3RyZWFtRW5kLCBu
b2RlLmdldCgpKTsKQEAgLTUxOCw3ICs1MTksNyBAQCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1h
bmQ6OmhhbmRsZUdlbmVyCiAgICAgICAgICAgICAgICAgICAgIHJlbW92ZU5vZGUobm9kZS5nZXQo
KSk7CiAgICAgICAgICAgICAgICAgICAgIG5vZGUgPSAwOwogICAgICAgICAgICAgICAgIH0gZWxz
ZQotICAgICAgICAgICAgICAgICAgICBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgpOwor
ICAgICAgICAgICAgICAgICAgICBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dChub2RlLmdldCgp
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvRWRpdENvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvRWRpdENvbW1hbmQuY3BwCShyZXZpc2lvbiAxMzcxMDgpCisrKyBTb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0VkaXRDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQs
NyBAQAogI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1
ZGUgIkZyYW1lU2VsZWN0aW9uLmgiCisjaW5jbHVkZSAiTm9kZVRyYXZlcnNhbC5oIgogI2luY2x1
ZGUgIlZpc2libGVQb3NpdGlvbi5oIgogI2luY2x1ZGUgImh0bWxlZGl0aW5nLmgiCiAKQEAgLTEx
OCw3ICsxMTksNyBAQCB2b2lkIFNpbXBsZUVkaXRDb21tYW5kOjpkb1JlYXBwbHkoKQogI2lmbmRl
ZiBOREVCVUcKIHZvaWQgU2ltcGxlRWRpdENvbW1hbmQ6OmFkZE5vZGVBbmREZXNjZW5kYW50cyhO
b2RlKiBzdGFydE5vZGUsIEhhc2hTZXQ8Tm9kZSo+JiBub2RlcykKIHsKLSAgICBmb3IgKE5vZGUq
IG5vZGUgPSBzdGFydE5vZGU7IG5vZGU7IG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKHN0
YXJ0Tm9kZSkpCisgICAgZm9yIChOb2RlKiBub2RlID0gc3RhcnROb2RlOyBub2RlOyBub2RlID0g
Tm9kZVRyYXZlcnNhbDo6bmV4dChub2RlLCBzdGFydE5vZGUpKQogICAgICAgICBub2Rlcy5hZGQo
bm9kZSk7CiB9CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0
eWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHls
ZS5jcHAJKHJldmlzaW9uIDEzNzEwOCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGlu
Z1N0eWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsNyBAQAogI2luY2x1ZGUgIkhU
TUxJbnRlcmNoYW5nZS5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIk5vZGUu
aCIKKyNpbmNsdWRlICJOb2RlVHJhdmVyc2FsLmgiCiAjaW5jbHVkZSAiUG9zaXRpb24uaCIKICNp
bmNsdWRlICJRdWFsaWZpZWROYW1lLmgiCiAjaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKQEAgLTY4
MSw3ICs2ODIsNyBAQCBUcmlTdGF0ZSBFZGl0aW5nU3R5bGU6OnRyaVN0YXRlT2ZTdHlsZShjCiAg
ICAgICAgIHJldHVybiB0cmlTdGF0ZU9mU3R5bGUoRWRpdGluZ1N0eWxlOjpzdHlsZUF0U2VsZWN0
aW9uU3RhcnQoc2VsZWN0aW9uKS5nZXQoKSk7CiAKICAgICBUcmlTdGF0ZSBzdGF0ZSA9IEZhbHNl
VHJpU3RhdGU7Ci0gICAgZm9yIChOb2RlKiBub2RlID0gc2VsZWN0aW9uLnN0YXJ0KCkuZGVwcmVj
YXRlZE5vZGUoKTsgbm9kZTsgbm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoKSkgeworICAg
IGZvciAoTm9kZSogbm9kZSA9IHNlbGVjdGlvbi5zdGFydCgpLmRlcHJlY2F0ZWROb2RlKCk7IG5v
ZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUpKSB7CiAgICAgICAgIFJlZlB0cjxD
U1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24+IG5vZGVTdHlsZSA9IENTU0NvbXB1dGVkU3R5bGVE
ZWNsYXJhdGlvbjo6Y3JlYXRlKG5vZGUpOwogICAgICAgICBpZiAobm9kZVN0eWxlKSB7CiAgICAg
ICAgICAgICBUcmlTdGF0ZSBub2RlU3RhdGUgPSB0cmlTdGF0ZU9mU3R5bGUobm9kZVN0eWxlLmdl
dCgpLCBub2RlLT5pc1RleHROb2RlKCkgPyBFZGl0aW5nU3R5bGU6OkRvTm90SWdub3JlVGV4dE9u
bHlQcm9wZXJ0aWVzIDogRWRpdGluZ1N0eWxlOjpJZ25vcmVUZXh0T25seVByb3BlcnRpZXMpOwpA
QCAtMTI0OCw3ICsxMjQ5LDcgQEAgV3JpdGluZ0RpcmVjdGlvbiBFZGl0aW5nU3R5bGU6OnRleHRE
aXJlYwogICAgICAgICBlbmQgPSBzZWxlY3Rpb24uZW5kKCkudXBzdHJlYW0oKTsKIAogICAgICAg
ICBOb2RlKiBwYXN0TGFzdCA9IFJhbmdlOjpjcmVhdGUoZW5kLmRvY3VtZW50KCksIHBvc2l0aW9u
LnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpLCBlbmQucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50
KCkpLT5wYXN0TGFzdE5vZGUoKTsKLSAgICAgICAgZm9yIChOb2RlKiBuID0gbm9kZTsgbiAmJiBu
ICE9IHBhc3RMYXN0OyBuID0gbi0+dHJhdmVyc2VOZXh0Tm9kZSgpKSB7CisgICAgICAgIGZvciAo
Tm9kZSogbiA9IG5vZGU7IG4gJiYgbiAhPSBwYXN0TGFzdDsgbiA9IE5vZGVUcmF2ZXJzYWw6Om5l
eHQobikpIHsKICAgICAgICAgICAgIGlmICghbi0+aXNTdHlsZWRFbGVtZW50KCkpCiAgICAgICAg
ICAgICAgICAgY29udGludWU7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9y
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAJKHJl
dmlzaW9uIDEzNzEwOCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNjIsNiArNjIsNyBAQAogI2luY2x1ZGUgIktpbGxSaW5nLmgiCiAjaW5j
bHVkZSAiTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmgiCiAjaW5jbHVkZSAiTm9kZUxpc3QuaCIK
KyNpbmNsdWRlICJOb2RlVHJhdmVyc2FsLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUg
IlBhc3RlYm9hcmQuaCIKICNpbmNsdWRlICJSZW1vdmVGb3JtYXRDb21tYW5kLmgiCkBAIC0xMDY3
LDEyICsxMDY4LDEyIEBAIHZvaWQgRWRpdG9yOjpzaW1wbGlmeU1hcmt1cChOb2RlKiBzdGFydE4K
ICAgICAgICAgLy8gY2hlY2sgaWYgc3RhcnQgbm9kZSBpcyBiZWZvcmUgZW5kTm9kZQogICAgICAg
ICBOb2RlKiBub2RlID0gc3RhcnROb2RlOwogICAgICAgICB3aGlsZSAobm9kZSAmJiBub2RlICE9
IGVuZE5vZGUpCi0gICAgICAgICAgICBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgpOwor
ICAgICAgICAgICAgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9kZSk7CiAgICAgICAgIGlm
ICghbm9kZSkKICAgICAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAgYXBwbHlDb21t
YW5kKFNpbXBsaWZ5TWFya3VwQ29tbWFuZDo6Y3JlYXRlKG1fZnJhbWUtPmRvY3VtZW50KCksIHN0
YXJ0Tm9kZSwgKGVuZE5vZGUpID8gZW5kTm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgpIDogMCkpOwor
ICAgIGFwcGx5Q29tbWFuZChTaW1wbGlmeU1hcmt1cENvbW1hbmQ6OmNyZWF0ZShtX2ZyYW1lLT5k
b2N1bWVudCgpLCBzdGFydE5vZGUsIChlbmROb2RlKSA/IE5vZGVUcmF2ZXJzYWw6Om5leHQoZW5k
Tm9kZSkgOiAwKSk7CiB9CiAKIHZvaWQgRWRpdG9yOjpjb3B5VVJMKGNvbnN0IEtVUkwmIHVybCwg
Y29uc3QgU3RyaW5nJiB0aXRsZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVT
ZWxlY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVT
ZWxlY3Rpb24uY3BwCShyZXZpc2lvbiAxMzcxMDgpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0ZyYW1lU2VsZWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsNiArNDgsNyBAQAogI2lu
Y2x1ZGUgIkhpdFRlc3RSZXF1ZXN0LmgiCiAjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgogI2lu
Y2x1ZGUgIklubGluZVRleHRCb3guaCIKKyNpbmNsdWRlICJOb2RlVHJhdmVyc2FsLmgiCiAjaW5j
bHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlJhbmdlLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGV4dC5o
IgpAQCAtMTk1Miw3ICsxOTUzLDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6Z2V0Q2xpcHBlZFZp
c2libGVUZQogLy8gU2NhbnMgbG9naWNhbGx5IGZvcndhcmQgZnJvbSAic3RhcnQiLCBpbmNsdWRp
bmcgYW55IGNoaWxkIGZyYW1lcy4KIHN0YXRpYyBIVE1MRm9ybUVsZW1lbnQqIHNjYW5Gb3JGb3Jt
KE5vZGUqIHN0YXJ0KQogewotICAgIGZvciAoTm9kZSogbm9kZSA9IHN0YXJ0OyBub2RlOyBub2Rl
ID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgpKSB7CisgICAgZm9yIChOb2RlKiBub2RlID0gc3Rh
cnQ7IG5vZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUpKSB7CiAgICAgICAgIGlm
IChub2RlLT5oYXNUYWdOYW1lKGZvcm1UYWcpKQogICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PEhUTUxGb3JtRWxlbWVudCo+KG5vZGUpOwogICAgICAgICBpZiAobm9kZS0+aXNIVE1MRWxl
bWVudCgpICYmIHRvSFRNTEVsZW1lbnQobm9kZSktPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpCkBA
IC0yMDI1LDcgKzIwMjYsNyBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpzZXRTZWxlY3Rpb25Gcm9t
Tm9uCiAKICAgICBOb2RlKiBub2RlID0gZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudCgpOwogICAg
IHdoaWxlIChub2RlICYmICFub2RlLT5oYXNUYWdOYW1lKGJvZHlUYWcpKQotICAgICAgICBub2Rl
ID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgpOworICAgICAgICBub2RlID0gTm9kZVRyYXZlcnNh
bDo6bmV4dChub2RlKTsKICAgICBpZiAobm9kZSkKICAgICAgICAgc2V0U2VsZWN0aW9uKFZpc2li
bGVTZWxlY3Rpb24oZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKG5vZGUpLCBET1dOU1RSRUFN
KSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydFBhcmFncmFwaFNlcGFy
YXRvckNvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5z
ZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZC5jcHAJKHJldmlzaW9uIDEzNzEwOCkKKysrIFNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJIVE1MRWxlbWVudC5o
IgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIkluc2VydExpbmVCcmVha0NvbW1h
bmQuaCIKKyNpbmNsdWRlICJOb2RlVHJhdmVyc2FsLmgiCiAjaW5jbHVkZSAiUmVuZGVyT2JqZWN0
LmgiCiAjaW5jbHVkZSAiVGV4dC5oIgogI2luY2x1ZGUgImh0bWxlZGl0aW5nLmgiCkBAIC0zNjYs
NyArMzY3LDcgQEAgdm9pZCBJbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kOjpkbwogICAg
ICAgICBlbHNlIHsKICAgICAgICAgICAgIE5vZGUqIHNwbGl0VG8gPSBpbnNlcnRpb25Qb3NpdGlv
bi5jb250YWluZXJOb2RlKCk7CiAgICAgICAgICAgICBpZiAoc3BsaXRUby0+aXNUZXh0Tm9kZSgp
ICYmIGluc2VydGlvblBvc2l0aW9uLm9mZnNldEluQ29udGFpbmVyTm9kZSgpID49IGNhcmV0TWF4
T2Zmc2V0KHNwbGl0VG8pKQotICAgICAgICAgICAgICBzcGxpdFRvID0gc3BsaXRUby0+dHJhdmVy
c2VOZXh0Tm9kZShzdGFydEJsb2NrLmdldCgpKTsKKyAgICAgICAgICAgICAgICBzcGxpdFRvID0g
Tm9kZVRyYXZlcnNhbDo6bmV4dChzcGxpdFRvLCBzdGFydEJsb2NrLmdldCgpKTsKICAgICAgICAg
ICAgIEFTU0VSVChzcGxpdFRvKTsKICAgICAgICAgICAgIHNwbGl0VHJlZVRvTm9kZShzcGxpdFRv
LCBzdGFydEJsb2NrLmdldCgpKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBs
YWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRp
dGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAJKHJldmlzaW9uIDEzNzEwOCkKKysrIFNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00NSw2ICs0NSw3IEBACiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVk
ZSAiTm9kZUxpc3QuaCIKICNpbmNsdWRlICJOb2RlUmVuZGVyU3R5bGUuaCIKKyNpbmNsdWRlICJO
b2RlVHJhdmVyc2FsLmgiCiAjaW5jbHVkZSAiUmVuZGVySW5saW5lLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyT2JqZWN0LmgiCiAjaW5jbHVkZSAiUmVuZGVyVGV4dC5oIgpAQCAtMjg5LDcgKzI5MCw3IEBA
IHZvaWQgUmVwbGFjZW1lbnRGcmFnbWVudDo6cmVtb3ZlVW5yZW5kZXIKIHsKICAgICBWZWN0b3I8
UmVmUHRyPE5vZGU+ID4gdW5yZW5kZXJlZDsKIAotICAgIGZvciAoTm9kZSogbm9kZSA9IGhvbGRl
ci0+Zmlyc3RDaGlsZCgpOyBub2RlOyBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZShob2xk
ZXIpKQorICAgIGZvciAoTm9kZSogbm9kZSA9IGhvbGRlci0+Zmlyc3RDaGlsZCgpOyBub2RlOyBu
b2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dChub2RlLCBob2xkZXIpKQogICAgICAgICBpZiAoIWlz
Tm9kZVJlbmRlcmVkKG5vZGUpICYmICFpc1RhYmxlU3RydWN0dXJlTm9kZShub2RlKSkKICAgICAg
ICAgICAgIHVucmVuZGVyZWQuYXBwZW5kKG5vZGUpOwogCkBAIC0zMzAsOSArMzMxLDkgQEAgdm9p
ZCBSZXBsYWNlbWVudEZyYWdtZW50OjpyZW1vdmVJbnRlcmNoYQogICAgIAogICAgIG5vZGUgPSBj
b250YWluZXItPmZpcnN0Q2hpbGQoKTsKICAgICB3aGlsZSAobm9kZSkgewotICAgICAgICBSZWZQ
dHI8Tm9kZT4gbmV4dCA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoKTsKKyAgICAgICAgUmVmUHRy
PE5vZGU+IG5leHQgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUpOwogICAgICAgICBpZiAoaXNJ
bnRlcmNoYW5nZUNvbnZlcnRlZFNwYWNlU3Bhbihub2RlKSkgewotICAgICAgICAgICAgbmV4dCA9
IG5vZGUtPnRyYXZlcnNlTmV4dFNpYmxpbmcoKTsKKyAgICAgICAgICAgIG5leHQgPSBOb2RlVHJh
dmVyc2FsOjpuZXh0U2libGluZyhub2RlKTsKICAgICAgICAgICAgIHJlbW92ZU5vZGVQcmVzZXJ2
aW5nQ2hpbGRyZW4obm9kZSk7CiAgICAgICAgIH0KICAgICAgICAgbm9kZSA9IG5leHQuZ2V0KCk7
CkBAIC0zNTMsOSArMzU0LDkgQEAgaW5saW5lIHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6
OklucwogaW5saW5lIHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6Okluc2VydGVkTm9kZXM6
OndpbGxSZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuKE5vZGUqIG5vZGUpCiB7CiAgICAgaWYg
KG1fZmlyc3ROb2RlSW5zZXJ0ZWQgPT0gbm9kZSkKLSAgICAgICAgbV9maXJzdE5vZGVJbnNlcnRl
ZCA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoKTsKKyAgICAgICAgbV9maXJzdE5vZGVJbnNlcnRl
ZCA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9kZSk7CiAgICAgaWYgKG1fbGFzdE5vZGVJbnNlcnRl
ZCA9PSBub2RlKQotICAgICAgICBtX2xhc3ROb2RlSW5zZXJ0ZWQgPSBub2RlLT5sYXN0Q2hpbGQo
KSA/IG5vZGUtPmxhc3RDaGlsZCgpIDogbm9kZS0+dHJhdmVyc2VOZXh0U2libGluZygpOworICAg
ICAgICBtX2xhc3ROb2RlSW5zZXJ0ZWQgPSBub2RlLT5sYXN0Q2hpbGQoKSA/IG5vZGUtPmxhc3RD
aGlsZCgpIDogTm9kZVRyYXZlcnNhbDo6bmV4dFNpYmxpbmcobm9kZSk7CiB9CiAKIGlubGluZSB2
b2lkIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpJbnNlcnRlZE5vZGVzOjp3aWxsUmVtb3ZlTm9k
ZShOb2RlKiBub2RlKQpAQCAtMzY0LDkgKzM2NSw5IEBAIGlubGluZSB2b2lkIFJlcGxhY2VTZWxl
Y3Rpb25Db21tYW5kOjpJbnMKICAgICAgICAgbV9maXJzdE5vZGVJbnNlcnRlZCA9IDA7CiAgICAg
ICAgIG1fbGFzdE5vZGVJbnNlcnRlZCA9IDA7CiAgICAgfSBlbHNlIGlmIChtX2ZpcnN0Tm9kZUlu
c2VydGVkID09IG5vZGUpCi0gICAgICAgIG1fZmlyc3ROb2RlSW5zZXJ0ZWQgPSBtX2ZpcnN0Tm9k
ZUluc2VydGVkLT50cmF2ZXJzZU5leHRTaWJsaW5nKCk7CisgICAgICAgIG1fZmlyc3ROb2RlSW5z
ZXJ0ZWQgPSBOb2RlVHJhdmVyc2FsOjpuZXh0U2libGluZyhtX2ZpcnN0Tm9kZUluc2VydGVkLmdl
dCgpKTsKICAgICBlbHNlIGlmIChtX2xhc3ROb2RlSW5zZXJ0ZWQgPT0gbm9kZSkKLSAgICAgICAg
bV9sYXN0Tm9kZUluc2VydGVkID0gbV9sYXN0Tm9kZUluc2VydGVkLT50cmF2ZXJzZVByZXZpb3Vz
U2libGluZygpOworICAgICAgICBtX2xhc3ROb2RlSW5zZXJ0ZWQgPSBOb2RlVHJhdmVyc2FsOjpw
cmV2aW91c1NpYmxpbmcobV9sYXN0Tm9kZUluc2VydGVkLmdldCgpKTsKIH0KIAogUmVwbGFjZVNl
bGVjdGlvbkNvbW1hbmQ6OlJlcGxhY2VTZWxlY3Rpb25Db21tYW5kKERvY3VtZW50KiBkb2N1bWVu
dCwgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCwgQ29tbWFuZE9wdGlvbnMg
b3B0aW9ucywgRWRpdEFjdGlvbiBlZGl0QWN0aW9uKQpAQCAtNDgwLDcgKzQ4MSw3IEBAIHZvaWQg
UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OnJlbW92ZVJlZHUKICAgICBmb3IgKFJlZlB0cjxOb2Rl
PiBub2RlID0gaW5zZXJ0ZWROb2Rlcy5maXJzdE5vZGVJbnNlcnRlZCgpOyBub2RlICYmIG5vZGUg
IT0gcGFzdEVuZE5vZGU7IG5vZGUgPSBuZXh0KSB7CiAgICAgICAgIC8vIEZJWE1FOiA8cmRhcjov
L3Byb2JsZW0vNTM3MTUzNj4gU3R5bGUgcnVsZXMgdGhhdCBtYXRjaCBwYXN0ZWQgY29udGVudCBj
YW4gY2hhbmdlIGl0J3MgYXBwZWFyYW5jZQogCi0gICAgICAgIG5leHQgPSBub2RlLT50cmF2ZXJz
ZU5leHROb2RlKCk7CisgICAgICAgIG5leHQgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUuZ2V0
KCkpOwogICAgICAgICBpZiAoIW5vZGUtPmlzU3R5bGVkRWxlbWVudCgpKQogICAgICAgICAgICAg
Y29udGludWU7CiAKQEAgLTU5NSwxMCArNTk2LDEwIEBAIHN0YXRpYyB2b2lkIHJlbW92ZUhlYWRD
b250ZW50cyhSZXBsYWNlbWUKICAgICAgICAgICAgIHx8IG5vZGUtPmhhc1RhZ05hbWUobWV0YVRh
ZykKICAgICAgICAgICAgIHx8IG5vZGUtPmhhc1RhZ05hbWUoc3R5bGVUYWcpCiAgICAgICAgICAg
ICB8fCBub2RlLT5oYXNUYWdOYW1lKHRpdGxlVGFnKSkgewotICAgICAgICAgICAgbmV4dCA9IG5v
ZGUtPnRyYXZlcnNlTmV4dFNpYmxpbmcoKTsKKyAgICAgICAgICAgIG5leHQgPSBOb2RlVHJhdmVy
c2FsOjpuZXh0U2libGluZyhub2RlKTsKICAgICAgICAgICAgIGZyYWdtZW50LnJlbW92ZU5vZGUo
bm9kZSk7CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgbmV4dCA9IG5vZGUtPnRyYXZlcnNl
TmV4dE5vZGUoKTsKKyAgICAgICAgICAgIG5leHQgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUp
OwogICAgIH0KIH0KIApAQCAtNjQ1LDcgKzY0Niw3IEBAIHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNv
bW1hbmQ6OmhhbmRsZVN0eWwKICAgICAvLyBUaGUgc3R5bGUgc3BhbiB0aGF0IGNvbnRhaW5zIHRo
ZSBzb3VyY2UgZG9jdW1lbnQncyBkZWZhdWx0IHN0eWxlIHNob3VsZCBiZSBhdAogICAgIC8vIHRo
ZSB0b3Agb2YgdGhlIGZyYWdtZW50LCBidXQgTWFpbCBzb21ldGltZXMgYWRkcyBhIHdyYXBwZXIg
KGZvciBQYXN0ZSBBcyBRdW90YXRpb24pLAogICAgIC8vIHNvIHNlYXJjaCBmb3IgdGhlIHRvcCBs
ZXZlbCBzdHlsZSBzcGFuIGluc3RlYWQgb2YgYXNzdW1pbmcgaXQncyBhdCB0aGUgdG9wLgotICAg
IGZvciAoTm9kZSogbm9kZSA9IGluc2VydGVkTm9kZXMuZmlyc3ROb2RlSW5zZXJ0ZWQoKTsgbm9k
ZTsgbm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoKSkgeworICAgIGZvciAoTm9kZSogbm9k
ZSA9IGluc2VydGVkTm9kZXMuZmlyc3ROb2RlSW5zZXJ0ZWQoKTsgbm9kZTsgbm9kZSA9IE5vZGVU
cmF2ZXJzYWw6Om5leHQobm9kZSkpIHsKICAgICAgICAgaWYgKGlzTGVnYWN5QXBwbGVTdHlsZVNw
YW4obm9kZSkpIHsKICAgICAgICAgICAgIHdyYXBwaW5nU3R5bGVTcGFuID0gdG9IVE1MRWxlbWVu
dChub2RlKTsKICAgICAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuaAkocmV2aXNpb24gMTM3MTA4KQorKysg
U291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjZGVmaW5lIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5k
X2gKIAogI2luY2x1ZGUgIkNvbXBvc2l0ZUVkaXRDb21tYW5kLmgiCisjaW5jbHVkZSAiTm9kZVRy
YXZlcnNhbC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTY1LDcgKzY2LDcgQEAgcHJp
dmF0ZToKIAogICAgICAgICBOb2RlKiBmaXJzdE5vZGVJbnNlcnRlZCgpIGNvbnN0IHsgcmV0dXJu
IG1fZmlyc3ROb2RlSW5zZXJ0ZWQuZ2V0KCk7IH0KICAgICAgICAgTm9kZSogbGFzdExlYWZJbnNl
cnRlZCgpIGNvbnN0IHsgcmV0dXJuIG1fbGFzdE5vZGVJbnNlcnRlZC0+bGFzdERlc2NlbmRhbnQo
KTsgfQotICAgICAgICBOb2RlKiBwYXN0TGFzdExlYWYoKSBjb25zdCB7IHJldHVybiBtX2xhc3RO
b2RlSW5zZXJ0ZWQgPyBsYXN0TGVhZkluc2VydGVkKCktPnRyYXZlcnNlTmV4dE5vZGUoKSA6IDA7
IH0KKyAgICAgICAgTm9kZSogcGFzdExhc3RMZWFmKCkgY29uc3QgeyByZXR1cm4gbV9sYXN0Tm9k
ZUluc2VydGVkID8gTm9kZVRyYXZlcnNhbDo6bmV4dChsYXN0TGVhZkluc2VydGVkKCkpIDogMDsg
fQogCiAgICAgcHJpdmF0ZToKICAgICAgICAgUmVmUHRyPE5vZGU+IG1fZmlyc3ROb2RlSW5zZXJ0
ZWQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NpbXBsaWZ5TWFya3VwQ29tbWFuZC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9TaW1wbGlmeU1hcmt1cENv
bW1hbmQuY3BwCShyZXZpc2lvbiAxMzcxMDgpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Np
bXBsaWZ5TWFya3VwQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAK
ICNpbmNsdWRlICJTaW1wbGlmeU1hcmt1cENvbW1hbmQuaCIKIAogI2luY2x1ZGUgIk5vZGVSZW5k
ZXJTdHlsZS5oIgorI2luY2x1ZGUgIk5vZGVUcmF2ZXJzYWwuaCIKICNpbmNsdWRlICJSZW5kZXJJ
bmxpbmUuaCIKICNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKICNpbmNsdWRlICJSZW5kZXJTdHls
ZS5oIgpAQCAtNDcsNyArNDgsNyBAQCB2b2lkIFNpbXBsaWZ5TWFya3VwQ29tbWFuZDo6ZG9BcHBs
eSgpCiAgICAgLy8gd2l0aG91dCBhZmZlY3RpbmcgdGhlIHN0eWxlLiBUaGUgZ29hbCBpcyB0byBw
cm9kdWNlIGxlYW5lciBtYXJrdXAgZXZlbiB3aGVuIHN0YXJ0aW5nCiAgICAgLy8gZnJvbSBhIHZl
cmJvc2UgZnJhZ21lbnQuCiAgICAgLy8gV2UgbG9vayBhdCBpbmxpbmUgZWxlbWVudHMgYXMgd2Vs
bCBhcyBub24gdG9wIGxldmVsIGRpdnMgdGhhdCBkb24ndCBoYXZlIGF0dHJpYnV0ZXMuIAotICAg
IGZvciAoTm9kZSogbm9kZSA9IG1fZmlyc3ROb2RlLmdldCgpOyBub2RlICYmIG5vZGUgIT0gbV9u
b2RlQWZ0ZXJMYXN0OyBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgpKSB7CisgICAgZm9y
IChOb2RlKiBub2RlID0gbV9maXJzdE5vZGUuZ2V0KCk7IG5vZGUgJiYgbm9kZSAhPSBtX25vZGVB
ZnRlckxhc3Q7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUpKSB7CiAgICAgICAgIGlm
IChub2RlLT5maXJzdENoaWxkKCkgfHwgKG5vZGUtPmlzVGV4dE5vZGUoKSAmJiBub2RlLT5uZXh0
U2libGluZygpKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5jcHAJKHJldmlzaW9uIDEzNzEwOCkKKysrIFNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgImh0bWxlZGl0
aW5nLmgiCiAjaW5jbHVkZSAiSW5saW5lVGV4dEJveC5oIgorI2luY2x1ZGUgIk5vZGVUcmF2ZXJz
YWwuaCIKICNpbmNsdWRlICJSYW5nZS5oIgogI2luY2x1ZGUgIlJlbmRlclRhYmxlQ2VsbC5oIgog
I2luY2x1ZGUgIlJlbmRlclRhYmxlUm93LmgiCkBAIC00MjUsNyArNDI2LDcgQEAgdm9pZCBUZXh0
SXRlcmF0b3I6OmFkdmFuY2UoKQogICAgICAgICBpZiAoIW5leHQpIHsKICAgICAgICAgICAgIG5l
eHQgPSBtX25vZGUtPm5leHRTaWJsaW5nKCk7CiAgICAgICAgICAgICBpZiAoIW5leHQpIHsKLSAg
ICAgICAgICAgICAgICBib29sIHBhc3RFbmQgPSBtX25vZGUtPnRyYXZlcnNlTmV4dE5vZGUoKSA9
PSBtX3Bhc3RFbmROb2RlOworICAgICAgICAgICAgICAgIGJvb2wgcGFzdEVuZCA9IE5vZGVUcmF2
ZXJzYWw6Om5leHQobV9ub2RlKSA9PSBtX3Bhc3RFbmROb2RlOwogICAgICAgICAgICAgICAgIE5v
ZGUqIHBhcmVudE5vZGUgPSBtX25vZGUtPnBhcmVudE9ySG9zdE5vZGUoKTsKICAgICAgICAgICAg
ICAgICB3aGlsZSAoIW5leHQgJiYgcGFyZW50Tm9kZSkgewogICAgICAgICAgICAgICAgICAgICBp
ZiAoKHBhc3RFbmQgJiYgcGFyZW50Tm9kZSA9PSBtX2VuZENvbnRhaW5lcikgfHwgbV9lbmRDb250
YWluZXItPmlzRGVzY2VuZGFudE9mKHBhcmVudE5vZGUpKQpAQCAtODA1LDcgKzgwNiw3IEBAIHN0
YXRpYyBib29sIHNob3VsZEVtaXROZXdsaW5lQWZ0ZXJOb2RlKE4KICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIC8vIENoZWNrIGlmIHRoaXMgaXMgdGhlIHZlcnkgbGFzdCByZW5kZXJlciBpbiB0
aGUgZG9jdW1lbnQuCiAgICAgLy8gSWYgc28sIHRoZW4gd2Ugc2hvdWxkIG5vdCBlbWl0IGEgbmV3
bGluZS4KLSAgICB3aGlsZSAoKG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHRTaWJsaW5nKCkpKQor
ICAgIHdoaWxlICgobm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHRTaWJsaW5nKG5vZGUpKSkKICAg
ICAgICAgaWYgKG5vZGUtPnJlbmRlcmVyKCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICByZXR1cm4gZmFsc2U7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5n
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNw
cAkocmV2aXNpb24gMTM3MTA4KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9odG1sZWRpdGlu
Zy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDYgKzQxLDcgQEAKICNpbmNsdWRlICJIVE1MT0xp
c3RFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTFBhcmFncmFwaEVsZW1lbnQuaCIKICNpbmNsdWRl
ICJIVE1MVUxpc3RFbGVtZW50LmgiCisjaW5jbHVkZSAiTm9kZVRyYXZlcnNhbC5oIgogI2luY2x1
ZGUgIlBvc2l0aW9uSXRlcmF0b3IuaCIKICNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKICNpbmNs
dWRlICJSYW5nZS5oIgpAQCAtNjQ1LDEyICs2NDYsMTIgQEAgc3RhdGljIGJvb2wgaGFzQVJlbmRl
cmVkRGVzY2VuZGFudChOb2RlKgogewogICAgIGZvciAoTm9kZSogbiA9IG5vZGUtPmZpcnN0Q2hp
bGQoKTsgbjspIHsKICAgICAgICAgaWYgKG4gPT0gZXhjbHVkZWROb2RlKSB7Ci0gICAgICAgICAg
ICBuID0gbi0+dHJhdmVyc2VOZXh0U2libGluZyhub2RlKTsKKyAgICAgICAgICAgIG4gPSBOb2Rl
VHJhdmVyc2FsOjpuZXh0U2libGluZyhuLCBub2RlKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICB9CiAgICAgICAgIGlmIChuLT5yZW5kZXJlcigpKQogICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgICAgIG4gPSBuLT50cmF2ZXJzZU5leHROb2RlKG5vZGUpOworICAgICAgICBu
ID0gTm9kZVRyYXZlcnNhbDo6bmV4dChuLCBub2RlKTsKICAgICB9CiAgICAgcmV0dXJuIGZhbHNl
OwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcAkocmV2aXNpb24gMTM3MTA4KQor
KysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
MSw2ICs1MSw3IEBACiAjaW5jbHVkZSAiSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQuaCIKICNp
bmNsdWRlICJLVVJMLmgiCiAjaW5jbHVkZSAiTWFya3VwQWNjdW11bGF0b3IuaCIKKyNpbmNsdWRl
ICJOb2RlVHJhdmVyc2FsLmgiCiAjaW5jbHVkZSAiUmFuZ2UuaCIKICNpbmNsdWRlICJSZW5kZXJP
YmplY3QuaCIKICNpbmNsdWRlICJTdHlsZVByb3BlcnR5U2V0LmgiCkBAIC0xMDEsOCArMTAyLDgg
QEAgc3RhdGljIHZvaWQgY29tcGxldGVVUkxzKE5vZGUqIG5vZGUsIGNvbgogCiAgICAgS1VSTCBw
YXJzZWRCYXNlVVJMKFBhcnNlZFVSTFN0cmluZywgYmFzZVVSTCk7CiAKLSAgICBOb2RlKiBlbmQg
PSBub2RlLT50cmF2ZXJzZU5leHRTaWJsaW5nKCk7Ci0gICAgZm9yIChOb2RlKiBuID0gbm9kZTsg
biAhPSBlbmQ7IG4gPSBuLT50cmF2ZXJzZU5leHROb2RlKCkpIHsKKyAgICBOb2RlKiBlbmQgPSBO
b2RlVHJhdmVyc2FsOjpuZXh0U2libGluZyhub2RlKTsKKyAgICBmb3IgKE5vZGUqIG4gPSBub2Rl
OyBuICE9IGVuZDsgbiA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobikpIHsKICAgICAgICAgaWYgKG4t
PmlzRWxlbWVudE5vZGUoKSkgewogICAgICAgICAgICAgRWxlbWVudCogZSA9IHN0YXRpY19jYXN0
PEVsZW1lbnQqPihuKTsKICAgICAgICAgICAgIGlmICghZS0+aGFzQXR0cmlidXRlcygpKQpAQCAt
MzY1LDcgKzM2Niw3IEBAIE5vZGUqIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjp0cmF2ZXJzZU4K
ICAgICAgICAgaWYgKCFuKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIAotICAgICAgICBu
ZXh0ID0gbi0+dHJhdmVyc2VOZXh0Tm9kZSgpOworICAgICAgICBuZXh0ID0gTm9kZVRyYXZlcnNh
bDo6bmV4dChuKTsKICAgICAgICAgYm9vbCBvcGVuZWRUYWcgPSBmYWxzZTsKIAogICAgICAgICBp
ZiAoaXNCbG9jayhuKSAmJiBjYW5IYXZlQ2hpbGRyZW5Gb3JFZGl0aW5nKG4pICYmIG5leHQgPT0g
cGFzdEVuZCkKQEAgLTM3Myw3ICszNzQsNyBAQCBOb2RlKiBTdHlsZWRNYXJrdXBBY2N1bXVsYXRv
cjo6dHJhdmVyc2VOCiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICBpZiAoIW4tPnJl
bmRlcmVyKCkgJiYgIWVuY2xvc2luZ05vZGVXaXRoVGFnKGZpcnN0UG9zaXRpb25Jbk9yQmVmb3Jl
Tm9kZShuKSwgc2VsZWN0VGFnKSkgewotICAgICAgICAgICAgbmV4dCA9IG4tPnRyYXZlcnNlTmV4
dFNpYmxpbmcoKTsKKyAgICAgICAgICAgIG5leHQgPSBOb2RlVHJhdmVyc2FsOjpuZXh0U2libGlu
ZyhuKTsKICAgICAgICAgICAgIC8vIERvbid0IHNraXAgb3ZlciBwYXN0RW5kLgogICAgICAgICAg
ICAgaWYgKHBhc3RFbmQgJiYgcGFzdEVuZC0+aXNEZXNjZW5kYW50T2YobikpCiAgICAgICAgICAg
ICAgICAgbmV4dCA9IHBhc3RFbmQ7CkBAIC02NzgsNyArNjc5LDcgQEAgc3RhdGljIGNvbnN0IGNo
YXIgZnJhZ21lbnRNYXJrZXJUYWdbXSA9IAogCiBzdGF0aWMgYm9vbCBmaW5kTm9kZXNTdXJyb3Vu
ZGluZ0NvbnRleHQoRG9jdW1lbnQqIGRvY3VtZW50LCBSZWZQdHI8Tm9kZT4mIG5vZGVCZWZvcmVD
b250ZXh0LCBSZWZQdHI8Tm9kZT4mIG5vZGVBZnRlckNvbnRleHQpCiB7Ci0gICAgZm9yIChOb2Rl
KiBub2RlID0gZG9jdW1lbnQtPmZpcnN0Q2hpbGQoKTsgbm9kZTsgbm9kZSA9IG5vZGUtPnRyYXZl
cnNlTmV4dE5vZGUoKSkgeworICAgIGZvciAoTm9kZSogbm9kZSA9IGRvY3VtZW50LT5maXJzdENo
aWxkKCk7IG5vZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUpKSB7CiAgICAgICAg
IGlmIChub2RlLT5ub2RlVHlwZSgpID09IE5vZGU6OkNPTU1FTlRfTk9ERSAmJiBzdGF0aWNfY2Fz
dDxDaGFyYWN0ZXJEYXRhKj4obm9kZSktPmRhdGEoKSA9PSBmcmFnbWVudE1hcmtlclRhZykgewog
ICAgICAgICAgICAgaWYgKCFub2RlQmVmb3JlQ29udGV4dCkKICAgICAgICAgICAgICAgICBub2Rl
QmVmb3JlQ29udGV4dCA9IG5vZGU7CkBAIC02OTcsMTAgKzY5OCwxMCBAQCBzdGF0aWMgdm9pZCB0
cmltRnJhZ21lbnQoRG9jdW1lbnRGcmFnbWVuCiAgICAgUmVmUHRyPE5vZGU+IG5leHQ7CiAgICAg
Zm9yIChSZWZQdHI8Tm9kZT4gbm9kZSA9IGZyYWdtZW50LT5maXJzdENoaWxkKCk7IG5vZGU7IG5v
ZGUgPSBuZXh0KSB7CiAgICAgICAgIGlmIChub2RlQmVmb3JlQ29udGV4dC0+aXNEZXNjZW5kYW50
T2Yobm9kZS5nZXQoKSkpIHsKLSAgICAgICAgICAgIG5leHQgPSBub2RlLT50cmF2ZXJzZU5leHRO
b2RlKCk7CisgICAgICAgICAgICBuZXh0ID0gTm9kZVRyYXZlcnNhbDo6bmV4dChub2RlLmdldCgp
KTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9Ci0gICAgICAgIG5leHQgPSBub2Rl
LT50cmF2ZXJzZU5leHRTaWJsaW5nKCk7CisgICAgICAgIG5leHQgPSBOb2RlVHJhdmVyc2FsOjpu
ZXh0U2libGluZyhub2RlLmdldCgpKTsKICAgICAgICAgQVNTRVJUKCFub2RlLT5jb250YWlucyhu
b2RlQWZ0ZXJDb250ZXh0KSk7CiAgICAgICAgIG5vZGUtPnBhcmVudE5vZGUoKS0+cmVtb3ZlQ2hp
bGQobm9kZS5nZXQoKSwgZWMpOwogICAgICAgICBpZiAobm9kZUJlZm9yZUNvbnRleHQgPT0gbm9k
ZSkKQEAgLTcwOSw3ICs3MTAsNyBAQCBzdGF0aWMgdm9pZCB0cmltRnJhZ21lbnQoRG9jdW1lbnRG
cmFnbWVuCiAKICAgICBBU1NFUlQobm9kZUFmdGVyQ29udGV4dC0+cGFyZW50Tm9kZSgpKTsKICAg
ICBmb3IgKFJlZlB0cjxOb2RlPiBub2RlID0gbm9kZUFmdGVyQ29udGV4dDsgbm9kZTsgbm9kZSA9
IG5leHQpIHsKLSAgICAgICAgbmV4dCA9IG5vZGUtPnRyYXZlcnNlTmV4dFNpYmxpbmcoKTsKKyAg
ICAgICAgbmV4dCA9IE5vZGVUcmF2ZXJzYWw6Om5leHRTaWJsaW5nKG5vZGUuZ2V0KCkpOwogICAg
ICAgICBub2RlLT5wYXJlbnROb2RlKCktPnJlbW92ZUNoaWxkKG5vZGUuZ2V0KCksIGVjKTsKICAg
ICAgICAgQVNTRVJUKCFlYyk7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy92
aXNpYmxlX3VuaXRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL3Zp
c2libGVfdW5pdHMuY3BwCShyZXZpc2lvbiAxMzcxMDgpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL3Zpc2libGVfdW5pdHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAj
aW5jbHVkZSAiRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIklu
bGluZVRleHRCb3guaCIKKyNpbmNsdWRlICJOb2RlVHJhdmVyc2FsLmgiCiAjaW5jbHVkZSAiUG9z
aXRpb24uaCIKICNpbmNsdWRlICJSZW5kZXJCbG9jay5oIgogI2luY2x1ZGUgIlJlbmRlck9iamVj
dC5oIgpAQCAtMTExNiwxOCArMTExNywxOCBAQCBWaXNpYmxlUG9zaXRpb24gc3RhcnRPZlBhcmFn
cmFwaChjb25zdCBWCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgaWYgKGJvdW5kYXJ5Q3Jv
c3NpbmdSdWxlID09IENhblNraXBPdmVyRWRpdGluZ0JvdW5kYXJ5KSB7CiAgICAgICAgICAgICB3
aGlsZSAobiAmJiBuLT5yZW5kZXJlcklzRWRpdGFibGUoKSAhPSBzdGFydE5vZGUtPnJlbmRlcmVy
SXNFZGl0YWJsZSgpKQotICAgICAgICAgICAgICAgIG4gPSBuLT50cmF2ZXJzZVByZXZpb3VzTm9k
ZVBvc3RPcmRlcihzdGFydEJsb2NrKTsKKyAgICAgICAgICAgICAgICBuID0gTm9kZVRyYXZlcnNh
bDo6cHJldmlvdXNQb3N0T3JkZXIobiwgc3RhcnRCbG9jayk7CiAgICAgICAgICAgICBpZiAoIW4g
fHwgIW4tPmlzRGVzY2VuZGFudE9mKGhpZ2hlc3RSb290KSkKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogICAgICAgICBSZW5kZXJPYmplY3QgKnIgPSBuLT5yZW5kZXJlcigpOwog
ICAgICAgICBpZiAoIXIpIHsKLSAgICAgICAgICAgIG4gPSBuLT50cmF2ZXJzZVByZXZpb3VzTm9k
ZVBvc3RPcmRlcihzdGFydEJsb2NrKTsKKyAgICAgICAgICAgIG4gPSBOb2RlVHJhdmVyc2FsOjpw
cmV2aW91c1Bvc3RPcmRlcihuLCBzdGFydEJsb2NrKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICB9CiAgICAgICAgIFJlbmRlclN0eWxlICpzdHlsZSA9IHItPnN0eWxlKCk7CiAgICAg
ICAgIGlmIChzdHlsZS0+dmlzaWJpbGl0eSgpICE9IFZJU0lCTEUpIHsKLSAgICAgICAgICAgIG4g
PSBuLT50cmF2ZXJzZVByZXZpb3VzTm9kZVBvc3RPcmRlcihzdGFydEJsb2NrKTsKKyAgICAgICAg
ICAgIG4gPSBOb2RlVHJhdmVyc2FsOjpwcmV2aW91c1Bvc3RPcmRlcihuLCBzdGFydEJsb2NrKTsK
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAgICAgICAgIApAQCAtMTE1MCwxMyAr
MTE1MSwxMyBAQCBWaXNpYmxlUG9zaXRpb24gc3RhcnRPZlBhcmFncmFwaChjb25zdCBWCiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICBub2RlID0gbjsKICAgICAgICAgICAgIG9mZnNldCA9IDA7
Ci0gICAgICAgICAgICBuID0gbi0+dHJhdmVyc2VQcmV2aW91c05vZGVQb3N0T3JkZXIoc3RhcnRC
bG9jayk7CisgICAgICAgICAgICBuID0gTm9kZVRyYXZlcnNhbDo6cHJldmlvdXNQb3N0T3JkZXIo
biwgc3RhcnRCbG9jayk7CiAgICAgICAgIH0gZWxzZSBpZiAoZWRpdGluZ0lnbm9yZXNDb250ZW50
KG4pIHx8IGlzVGFibGVFbGVtZW50KG4pKSB7CiAgICAgICAgICAgICBub2RlID0gbjsKICAgICAg
ICAgICAgIHR5cGUgPSBQb3NpdGlvbjo6UG9zaXRpb25Jc0JlZm9yZUFuY2hvcjsKLSAgICAgICAg
ICAgIG4gPSBuLT5wcmV2aW91c1NpYmxpbmcoKSA/IG4tPnByZXZpb3VzU2libGluZygpIDogbi0+
dHJhdmVyc2VQcmV2aW91c05vZGVQb3N0T3JkZXIoc3RhcnRCbG9jayk7CisgICAgICAgICAgICBu
ID0gbi0+cHJldmlvdXNTaWJsaW5nKCkgPyBuLT5wcmV2aW91c1NpYmxpbmcoKSA6IE5vZGVUcmF2
ZXJzYWw6OnByZXZpb3VzUG9zdE9yZGVyKG4sIHN0YXJ0QmxvY2spOwogICAgICAgICB9IGVsc2UK
LSAgICAgICAgICAgIG4gPSBuLT50cmF2ZXJzZVByZXZpb3VzTm9kZVBvc3RPcmRlcihzdGFydEJs
b2NrKTsKKyAgICAgICAgICAgIG4gPSBOb2RlVHJhdmVyc2FsOjpwcmV2aW91c1Bvc3RPcmRlcihu
LCBzdGFydEJsb2NrKTsKICAgICB9CiAKICAgICBpZiAodHlwZSA9PSBQb3NpdGlvbjo6UG9zaXRp
b25Jc09mZnNldEluQW5jaG9yKSB7CkBAIC0xMTk2LDE5ICsxMTk3LDE5IEBAIFZpc2libGVQb3Np
dGlvbiBlbmRPZlBhcmFncmFwaChjb25zdCBWaXMKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBpZiAoYm91bmRhcnlDcm9zc2luZ1J1bGUgPT0gQ2FuU2tpcE92ZXJFZGl0aW5nQm91bmRhcnkp
IHsKICAgICAgICAgICAgIHdoaWxlIChuICYmIG4tPnJlbmRlcmVySXNFZGl0YWJsZSgpICE9IHN0
YXJ0Tm9kZS0+cmVuZGVyZXJJc0VkaXRhYmxlKCkpCi0gICAgICAgICAgICAgICAgbiA9IG4tPnRy
YXZlcnNlTmV4dE5vZGUoc3RheUluc2lkZUJsb2NrKTsKKyAgICAgICAgICAgICAgICBuID0gTm9k
ZVRyYXZlcnNhbDo6bmV4dChuLCBzdGF5SW5zaWRlQmxvY2spOwogICAgICAgICAgICAgaWYgKCFu
IHx8ICFuLT5pc0Rlc2NlbmRhbnRPZihoaWdoZXN0Um9vdCkpCiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KIAogICAgICAgICBSZW5kZXJPYmplY3QgKnIgPSBuLT5yZW5kZXJlcigp
OwogICAgICAgICBpZiAoIXIpIHsKLSAgICAgICAgICAgIG4gPSBuLT50cmF2ZXJzZU5leHROb2Rl
KHN0YXlJbnNpZGVCbG9jayk7CisgICAgICAgICAgICBuID0gTm9kZVRyYXZlcnNhbDo6bmV4dChu
LCBzdGF5SW5zaWRlQmxvY2spOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KICAg
ICAgICAgUmVuZGVyU3R5bGUgKnN0eWxlID0gci0+c3R5bGUoKTsKICAgICAgICAgaWYgKHN0eWxl
LT52aXNpYmlsaXR5KCkgIT0gVklTSUJMRSkgewotICAgICAgICAgICAgbiA9IG4tPnRyYXZlcnNl
TmV4dE5vZGUoc3RheUluc2lkZUJsb2NrKTsKKyAgICAgICAgICAgIG4gPSBOb2RlVHJhdmVyc2Fs
OjpuZXh0KG4sIHN0YXlJbnNpZGVCbG9jayk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgfQogICAgICAgICAKQEAgLTEyMzAsMTMgKzEyMzEsMTMgQEAgVmlzaWJsZVBvc2l0aW9uIGVu
ZE9mUGFyYWdyYXBoKGNvbnN0IFZpcwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbm9kZSA9
IG47CiAgICAgICAgICAgICBvZmZzZXQgPSByLT5jYXJldE1heE9mZnNldCgpOwotICAgICAgICAg
ICAgbiA9IG4tPnRyYXZlcnNlTmV4dE5vZGUoc3RheUluc2lkZUJsb2NrKTsKKyAgICAgICAgICAg
IG4gPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG4sIHN0YXlJbnNpZGVCbG9jayk7CiAgICAgICAgIH0g
ZWxzZSBpZiAoZWRpdGluZ0lnbm9yZXNDb250ZW50KG4pIHx8IGlzVGFibGVFbGVtZW50KG4pKSB7
CiAgICAgICAgICAgICBub2RlID0gbjsKICAgICAgICAgICAgIHR5cGUgPSBQb3NpdGlvbjo6UG9z
aXRpb25Jc0FmdGVyQW5jaG9yOwotICAgICAgICAgICAgbiA9IG4tPnRyYXZlcnNlTmV4dFNpYmxp
bmcoc3RheUluc2lkZUJsb2NrKTsKKyAgICAgICAgICAgIG4gPSBOb2RlVHJhdmVyc2FsOjpuZXh0
U2libGluZyhuLCBzdGF5SW5zaWRlQmxvY2spOwogICAgICAgICB9IGVsc2UKLSAgICAgICAgICAg
IG4gPSBuLT50cmF2ZXJzZU5leHROb2RlKHN0YXlJbnNpZGVCbG9jayk7CisgICAgICAgICAgICBu
ID0gTm9kZVRyYXZlcnNhbDo6bmV4dChuLCBzdGF5SW5zaWRlQmxvY2spOwogICAgIH0KIAogICAg
IGlmICh0eXBlID09IFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9FZGl0b3JNYWMubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1tCShyZXZpc2lvbiAxMzcxMDgpCisr
KyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9FZGl0b3JNYWMubW0JKHdvcmtpbmcgY29weSkK
QEAgLTM5LDYgKzM5LDcgQEAKICNpbXBvcnQgIkhUTUxDb252ZXJ0ZXIuaCIKICNpbXBvcnQgIkhU
TUxOYW1lcy5oIgogI2ltcG9ydCAiTGVnYWN5V2ViQXJjaGl2ZS5oIgorI2ltcG9ydCAiTm9kZVRy
YXZlcnNhbC5oIgogI2ltcG9ydCAiUGFzdGVib2FyZC5oIgogI2ltcG9ydCAiUGFzdGVib2FyZFN0
cmF0ZWd5LmgiCiAjaW1wb3J0ICJQbGF0Zm9ybVN0cmF0ZWdpZXMuaCIKQEAgLTE2OCw3ICsxNjks
NyBAQCBjb25zdCBTaW1wbGVGb250RGF0YSogRWRpdG9yOjpmb250Rm9yU2VsCiAgICAgICAgIE5v
ZGUqIHBhc3RFbmQgPSByYW5nZS0+cGFzdExhc3ROb2RlKCk7CiAgICAgICAgIC8vIEluIHRoZSBs
b29wIGJlbG93LCBuIHNob3VsZCBldmVudHVhbGx5IG1hdGNoIHBhc3RFbmQgYW5kIG5vdCBiZWNv
bWUgbmlsLCBidXQgd2UndmUgc2VlbiBhdCBsZWFzdCBvbmUKICAgICAgICAgLy8gdW5yZXByb2R1
Y2libGUgY2FzZSB3aGVyZSB0aGlzIGRpZG4ndCBoYXBwZW4sIHNvIGNoZWNrIGZvciBudWxsIGFs
c28uCi0gICAgICAgIGZvciAoTm9kZSogbm9kZSA9IHN0YXJ0Tm9kZTsgbm9kZSAmJiBub2RlICE9
IHBhc3RFbmQ7IG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKCkpIHsKKyAgICAgICAgZm9y
IChOb2RlKiBub2RlID0gc3RhcnROb2RlOyBub2RlICYmIG5vZGUgIT0gcGFzdEVuZDsgbm9kZSA9
IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9kZSkpIHsKICAgICAgICAgICAgIFJlbmRlck9iamVjdCog
cmVuZGVyZXIgPSBub2RlLT5yZW5kZXJlcigpOwogICAgICAgICAgICAgaWYgKCFyZW5kZXJlcikK
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TENvbGxlY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENv
bGxlY3Rpb24uY3BwCShyZXZpc2lvbiAxMzcxMDgpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxDb2xsZWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1
ZGUgIkhUTUxPcHRpb25FbGVtZW50LmgiCiAjaW5jbHVkZSAiTm9kZUxpc3QuaCIKICNpbmNsdWRl
ICJOb2RlUmFyZURhdGEuaCIKKyNpbmNsdWRlICJOb2RlVHJhdmVyc2FsLmgiCiAKICNpZiBFTkFC
TEUoTUlDUk9EQVRBKQogI2luY2x1ZGUgIkhUTUxQcm9wZXJ0aWVzQ29sbGVjdGlvbi5oIgpAQCAt
MjYxLDkgKzI2Miw5IEBAIHRlbXBsYXRlPGJvb2wgZm9yd2FyZD4KIHN0YXRpYyBOb2RlKiBuZXh0
Tm9kZShOb2RlKiBiYXNlLCBOb2RlKiBwcmV2aW91cywgYm9vbCBvbmx5SW5jbHVkZURpcmVjdENo
aWxkcmVuKQogewogICAgIGlmIChmb3J3YXJkKQotICAgICAgICByZXR1cm4gb25seUluY2x1ZGVE
aXJlY3RDaGlsZHJlbiA/IHByZXZpb3VzLT5uZXh0U2libGluZygpIDogcHJldmlvdXMtPnRyYXZl
cnNlTmV4dE5vZGUoYmFzZSk7CisgICAgICAgIHJldHVybiBvbmx5SW5jbHVkZURpcmVjdENoaWxk
cmVuID8gcHJldmlvdXMtPm5leHRTaWJsaW5nKCkgOiBOb2RlVHJhdmVyc2FsOjpuZXh0KHByZXZp
b3VzLCBiYXNlKTsKICAgICBlbHNlCi0gICAgICAgIHJldHVybiBvbmx5SW5jbHVkZURpcmVjdENo
aWxkcmVuID8gcHJldmlvdXMtPnByZXZpb3VzU2libGluZygpIDogcHJldmlvdXMtPnRyYXZlcnNl
UHJldmlvdXNOb2RlKGJhc2UpOworICAgICAgICByZXR1cm4gb25seUluY2x1ZGVEaXJlY3RDaGls
ZHJlbiA/IHByZXZpb3VzLT5wcmV2aW91c1NpYmxpbmcoKSA6IE5vZGVUcmF2ZXJzYWw6OnByZXZp
b3VzKHByZXZpb3VzLCBiYXNlKTsKIH0KIAogc3RhdGljIGlubGluZSBOb2RlKiBsYXN0RGVzY2Vu
ZGVudChOb2RlKiBub2RlKQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAJKHJl
dmlzaW9uIDEzNzEwOCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00Niw2ICs0Niw3IEBACiAjaW5jbHVkZSAiSFRNTFBhcnNlcklkaW9t
cy5oIgogI2luY2x1ZGUgIkhUTUxUZW1wbGF0ZUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MVGV4
dEZvcm1Db250cm9sRWxlbWVudC5oIgorI2luY2x1ZGUgIk5vZGVUcmF2ZXJzYWwuaCIKICNpbmNs
dWRlICJSZW5kZXJXb3JkQnJlYWsuaCIKICNpbmNsdWRlICJTY3JpcHRFdmVudExpc3RlbmVyLmgi
CiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKQEAgLTgxNiwxMyArODE3LDEzIEBAIHN0YXRpYyB2b2lk
IHNldEhhc0RpckF1dG9GbGFnUmVjdXJzaXZlbHkKICAgICAgICAgaWYgKGVsZW1lbnRBZmZlY3Rz
RGlyZWN0aW9uYWxpdHkobm9kZSkpIHsKICAgICAgICAgICAgIGlmIChub2RlID09IGxhc3ROb2Rl
KQogICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIG5vZGUgPSBub2RlLT50cmF2
ZXJzZU5leHRTaWJsaW5nKGZpcnN0Tm9kZSk7CisgICAgICAgICAgICBub2RlID0gTm9kZVRyYXZl
cnNhbDo6bmV4dFNpYmxpbmcobm9kZSwgZmlyc3ROb2RlKTsKICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICB9CiAgICAgICAgIG5vZGUtPnNldFNlbGZPckFuY2VzdG9ySGFzRGlyQXV0b0F0
dHJpYnV0ZShmbGFnKTsKICAgICAgICAgaWYgKG5vZGUgPT0gbGFzdE5vZGUpCiAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKGZpcnN0Tm9k
ZSk7CisgICAgICAgIG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUsIGZpcnN0Tm9kZSk7
CiAgICAgfQogfQogCkBAIC04NjQsNyArODY1LDcgQEAgVGV4dERpcmVjdGlvbiBIVE1MRWxlbWVu
dDo6ZGlyZWN0aW9uYWxpdAogICAgICAgICAvLyBTa2lwIGJkaSwgc2NyaXB0LCBzdHlsZSBhbmQg
dGV4dCBmb3JtIGNvbnRyb2xzLgogICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2Uobm9kZS0+
bm9kZU5hbWUoKSwgImJkaSIpIHx8IG5vZGUtPmhhc1RhZ05hbWUoc2NyaXB0VGFnKSB8fCBub2Rl
LT5oYXNUYWdOYW1lKHN0eWxlVGFnKSAKICAgICAgICAgICAgIHx8IChub2RlLT5pc0VsZW1lbnRO
b2RlKCkgJiYgdG9FbGVtZW50KG5vZGUpLT5pc1RleHRGb3JtQ29udHJvbCgpKSkgewotICAgICAg
ICAgICAgbm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dFNpYmxpbmcodGhpcyk7CisgICAgICAgICAg
ICBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dFNpYmxpbmcobm9kZSwgdGhpcyk7CiAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgfQogCkBAIC04NzIsNyArODczLDcgQEAgVGV4dERpcmVj
dGlvbiBIVE1MRWxlbWVudDo6ZGlyZWN0aW9uYWxpdAogICAgICAgICBpZiAobm9kZS0+aXNFbGVt
ZW50Tm9kZSgpKSB7CiAgICAgICAgICAgICBBdG9taWNTdHJpbmcgZGlyQXR0cmlidXRlVmFsdWUg
PSB0b0VsZW1lbnQobm9kZSktPmZhc3RHZXRBdHRyaWJ1dGUoZGlyQXR0cik7CiAgICAgICAgICAg
ICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoZGlyQXR0cmlidXRlVmFsdWUsICJydGwiKSB8fCBlcXVh
bElnbm9yaW5nQ2FzZShkaXJBdHRyaWJ1dGVWYWx1ZSwgImx0ciIpIHx8IGVxdWFsSWdub3JpbmdD
YXNlKGRpckF0dHJpYnV0ZVZhbHVlLCAiYXV0byIpKSB7Ci0gICAgICAgICAgICAgICAgbm9kZSA9
IG5vZGUtPnRyYXZlcnNlTmV4dFNpYmxpbmcodGhpcyk7CisgICAgICAgICAgICAgICAgbm9kZSA9
IE5vZGVUcmF2ZXJzYWw6Om5leHRTaWJsaW5nKG5vZGUsIHRoaXMpOwogICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC04ODYsNyArODg3LDcgQEAg
VGV4dERpcmVjdGlvbiBIVE1MRWxlbWVudDo6ZGlyZWN0aW9uYWxpdAogICAgICAgICAgICAgICAg
IHJldHVybiAodGV4dERpcmVjdGlvbiA9PSBXVEY6OlVuaWNvZGU6OkxlZnRUb1JpZ2h0KSA/IExU
UiA6IFJUTDsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBub2RlID0gbm9kZS0+
dHJhdmVyc2VOZXh0Tm9kZSh0aGlzKTsKKyAgICAgICAgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5l
eHQobm9kZSwgdGhpcyk7CiAgICAgfQogICAgIGlmIChzdHJvbmdEaXJlY3Rpb25hbGl0eVRleHRO
b2RlKQogICAgICAgICAqc3Ryb25nRGlyZWN0aW9uYWxpdHlUZXh0Tm9kZSA9IDA7CkBAIC05MzMs
OCArOTM0LDggQEAgdm9pZCBIVE1MRWxlbWVudDo6Y2FsY3VsYXRlQW5kQWRqdXN0RGlyZQogdm9p
ZCBIVE1MRWxlbWVudDo6YWRqdXN0RGlyZWN0aW9uYWxpdHlJZk5lZWRlZEFmdGVyQ2hpbGRyZW5D
aGFuZ2VkKE5vZGUqIGJlZm9yZUNoYW5nZSwgaW50IGNoaWxkQ291bnREZWx0YSkKIHsKICAgICBp
ZiAoKCFkb2N1bWVudCgpIHx8IGRvY3VtZW50KCktPnJlbmRlcmVyKCkpICYmIGNoaWxkQ291bnRE
ZWx0YSA8IDApIHsKLSAgICAgICAgTm9kZSogbm9kZSA9IGJlZm9yZUNoYW5nZSA/IGJlZm9yZUNo
YW5nZS0+dHJhdmVyc2VOZXh0U2libGluZygpIDogMDsKLSAgICAgICAgZm9yIChpbnQgY291bnRl
ciA9IDA7IG5vZGUgJiYgY291bnRlciA8IGNoaWxkQ291bnREZWx0YTsgY291bnRlcisrLCBub2Rl
ID0gbm9kZS0+dHJhdmVyc2VOZXh0U2libGluZygpKSB7CisgICAgICAgIE5vZGUqIG5vZGUgPSBi
ZWZvcmVDaGFuZ2UgPyBOb2RlVHJhdmVyc2FsOjpuZXh0U2libGluZyhiZWZvcmVDaGFuZ2UpIDog
MDsKKyAgICAgICAgZm9yIChpbnQgY291bnRlciA9IDA7IG5vZGUgJiYgY291bnRlciA8IGNoaWxk
Q291bnREZWx0YTsgY291bnRlcisrLCBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dFNpYmxpbmco
bm9kZSkpIHsKICAgICAgICAgICAgIGlmIChlbGVtZW50QWZmZWN0c0RpcmVjdGlvbmFsaXR5KG5v
ZGUpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCkBAIC05NDUsOSArOTQ2LDkgQEAgdm9p
ZCBIVE1MRWxlbWVudDo6YWRqdXN0RGlyZWN0aW9uYWxpdHlJZgogICAgIGlmICghc2VsZk9yQW5j
ZXN0b3JIYXNEaXJBdXRvQXR0cmlidXRlKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIE5vZGUq
IG9sZE1hcmtlZE5vZGUgPSBiZWZvcmVDaGFuZ2UgPyBiZWZvcmVDaGFuZ2UtPnRyYXZlcnNlTmV4
dFNpYmxpbmcoKSA6IDA7CisgICAgTm9kZSogb2xkTWFya2VkTm9kZSA9IGJlZm9yZUNoYW5nZSA/
IE5vZGVUcmF2ZXJzYWw6Om5leHRTaWJsaW5nKGJlZm9yZUNoYW5nZSkgOiAwOwogICAgIHdoaWxl
IChvbGRNYXJrZWROb2RlICYmIGVsZW1lbnRBZmZlY3RzRGlyZWN0aW9uYWxpdHkob2xkTWFya2Vk
Tm9kZSkpCi0gICAgICAgIG9sZE1hcmtlZE5vZGUgPSBvbGRNYXJrZWROb2RlLT50cmF2ZXJzZU5l
eHRTaWJsaW5nKHRoaXMpOworICAgICAgICBvbGRNYXJrZWROb2RlID0gTm9kZVRyYXZlcnNhbDo6
bmV4dFNpYmxpbmcob2xkTWFya2VkTm9kZSwgdGhpcyk7CiAgICAgaWYgKG9sZE1hcmtlZE5vZGUp
CiAgICAgICAgIHNldEhhc0RpckF1dG9GbGFnUmVjdXJzaXZlbHkob2xkTWFya2VkTm9kZSwgZmFs
c2UpOwogCkBAIC0xMDI4LDcgKzEwMjksNyBAQCB2b2lkIEhUTUxFbGVtZW50OjpnZXRJdGVtUmVm
RWxlbWVudHMoVmVjCiAgICAgICAgICAgICByb290Tm9kZSA9IHBhcmVudDsKICAgICB9CiAKLSAg
ICBmb3IgKE5vZGUqIGN1cnJlbnQgPSByb290Tm9kZTsgY3VycmVudDsgY3VycmVudCA9IGN1cnJl
bnQtPnRyYXZlcnNlTmV4dE5vZGUocm9vdE5vZGUpKSB7CisgICAgZm9yIChOb2RlKiBjdXJyZW50
ID0gcm9vdE5vZGU7IGN1cnJlbnQ7IGN1cnJlbnQgPSBjdXJyZW50LT5Ob2RlVHJhdmVyc2FsOjpu
ZXh0KHJvb3ROb2RlKSkgewogICAgICAgICBpZiAoIWN1cnJlbnQtPmlzSFRNTEVsZW1lbnQoKSkK
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBIVE1MRWxlbWVudCogZWxlbWVudCA9IHRv
SFRNTEVsZW1lbnQoY3VycmVudCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGaWVs
ZFNldEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZp
ZWxkU2V0RWxlbWVudC5jcHAJKHJldmlzaW9uIDEzNzEwOCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTEZpZWxkU2V0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcg
QEAKICNpbmNsdWRlICJIVE1MTGVnZW5kRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5o
IgogI2luY2x1ZGUgIkhUTUxPYmplY3RFbGVtZW50LmgiCisjaW5jbHVkZSAiTm9kZVRyYXZlcnNh
bC5oIgogI2luY2x1ZGUgIlJlbmRlckZpZWxkc2V0LmgiCiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4
dHJhcy5oPgogCkBAIC01MCw3ICs1MSw3IEBAIFBhc3NSZWZQdHI8SFRNTEZpZWxkU2V0RWxlbWVu
dD4gSFRNTEZpZWwKIAogdm9pZCBIVE1MRmllbGRTZXRFbGVtZW50OjppbnZhbGlkYXRlRGlzYWJs
ZWRTdGF0ZVVuZGVyKEVsZW1lbnQqIGJhc2UpCiB7Ci0gICAgZm9yIChOb2RlKiBub2RlID0gYmFz
ZS0+Zmlyc3RDaGlsZCgpOyBub2RlOyBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZShiYXNl
KSkgeworICAgIGZvciAoTm9kZSogbm9kZSA9IGJhc2UtPmZpcnN0Q2hpbGQoKTsgbm9kZTsgbm9k
ZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9kZSwgYmFzZSkpIHsKICAgICAgICAgaWYgKG5vZGUt
PmlzRWxlbWVudE5vZGUoKSAmJiB0b0VsZW1lbnQobm9kZSktPmlzRm9ybUNvbnRyb2xFbGVtZW50
KCkpCiAgICAgICAgICAgICBzdGF0aWNfY2FzdDxIVE1MRm9ybUNvbnRyb2xFbGVtZW50Kj4obm9k
ZSktPmFuY2VzdG9yRGlzYWJsZWRTdGF0ZVdhc0NoYW5nZWQoKTsKICAgICB9CkBAIC0xMTIsNyAr
MTEzLDcgQEAgdm9pZCBIVE1MRmllbGRTZXRFbGVtZW50OjpyZWZyZXNoRWxlbWVudAogCiAgICAg
bV9hc3NvY2lhdGVkRWxlbWVudHMuY2xlYXIoKTsKIAotICAgIGZvciAoTm9kZSogbm9kZSA9IGZp
cnN0Q2hpbGQoKTsgbm9kZTsgbm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUodGhpcykpIHsK
KyAgICBmb3IgKE5vZGUqIG5vZGUgPSBmaXJzdENoaWxkKCk7IG5vZGU7IG5vZGUgPSBOb2RlVHJh
dmVyc2FsOjpuZXh0KG5vZGUsIHRoaXMpKSB7CiAgICAgICAgIGlmICghbm9kZS0+aXNFbGVtZW50
Tm9kZSgpKQogICAgICAgICAgICAgY29udGludWU7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTEZvcm1FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxGb3JtRWxlbWVudC5jcHAJKHJldmlzaW9uIDEzNzEwOCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTEZvcm1FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsNiArNDcsNyBA
QAogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIK
ICNpbmNsdWRlICJOb2RlUmVuZGVyaW5nQ29udGV4dC5oIgorI2luY2x1ZGUgIk5vZGVUcmF2ZXJz
YWwuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGV4dENvbnRyb2wuaCIK
ICNpbmNsdWRlICJTY3JpcHRFdmVudExpc3RlbmVyLmgiCkBAIC01MjIsOSArNTIzLDkgQEAgdW5z
aWduZWQgSFRNTEZvcm1FbGVtZW50Ojpmb3JtRWxlbWVudEluZAogICAgIC8vIHRoZSBmb3JtJ3Mg
dHJlZSBvZiBjaGlsZHJlbjsgd2UgZG9uJ3Qgd2FudCB0byB3YWxrIHRoZSBlbnRpcmUgdHJlZSBp
biB0aGF0CiAgICAgLy8gY29tbW9uIGNhc2UgdGhhdCBvY2N1cnMgZHVyaW5nIHBhcnNpbmc7IGlu
c3RlYWQgd2UnbGwganVzdCByZXR1cm4gYSB2YWx1ZQogICAgIC8vIHRoYXQgc2F5cyAiYWRkIHRo
aXMgZm9ybSBlbGVtZW50IHRvIHRoZSBlbmQgb2YgdGhlIGFycmF5Ii4KLSAgICBpZiAoZWxlbWVu
dC0+dHJhdmVyc2VOZXh0Tm9kZSh0aGlzKSkgeworICAgIGlmIChOb2RlVHJhdmVyc2FsOjpuZXh0
KGVsZW1lbnQsIHRoaXMpKSB7CiAgICAgICAgIHVuc2lnbmVkIGkgPSBtX2Fzc29jaWF0ZWRFbGVt
ZW50c0JlZm9yZUluZGV4OwotICAgICAgICBmb3IgKE5vZGUqIG5vZGUgPSB0aGlzOyBub2RlOyBu
b2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSh0aGlzKSkgeworICAgICAgICBmb3IgKE5vZGUq
IG5vZGUgPSB0aGlzOyBub2RlOyBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dChub2RlLCB0aGlz
KSkgewogICAgICAgICAgICAgaWYgKG5vZGUgPT0gZWxlbWVudCkgewogICAgICAgICAgICAgICAg
ICsrbV9hc3NvY2lhdGVkRWxlbWVudHNBZnRlckluZGV4OwogICAgICAgICAgICAgICAgIHJldHVy
biBpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTGFiZWxFbGVtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxMYWJlbEVsZW1lbnQuY3BwCShyZXZp
c2lvbiAxMzcxMDgpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxMYWJlbEVsZW1lbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiRXZlbnROYW1lcy5o
IgogI2luY2x1ZGUgIkZvcm1Bc3NvY2lhdGVkRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1l
cy5oIgorI2luY2x1ZGUgIk5vZGVUcmF2ZXJzYWwuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CkBAIC03NSw3ICs3Niw3IEBAIExhYmVsYWJsZUVsZW1lbnQqIEhUTUxMYWJlbEVsZW1lbnQ6OmNv
bnQKICAgICAgICAgLy8gcGVyIGh0dHA6Ly9kZXYudzMub3JnL2h0bWw1L3NwZWMvT3ZlcnZpZXcu
aHRtbCN0aGUtbGFiZWwtZWxlbWVudAogICAgICAgICAvLyB0aGUgZm9ybSBlbGVtZW50IG11c3Qg
YmUgImxhYmVsYWJsZSBmb3JtLWFzc29jaWF0ZWQgZWxlbWVudCIuCiAgICAgICAgIE5vZGUqIG5v
ZGUgPSB0aGlzOwotICAgICAgICB3aGlsZSAoKG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHROb2Rl
KHRoaXMpKSkgeworICAgICAgICB3aGlsZSAoKG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5v
ZGUsIHRoaXMpKSkgewogICAgICAgICAgICAgaWYgKExhYmVsYWJsZUVsZW1lbnQqIGVsZW1lbnQg
PSBub2RlQXNMYWJlbGFibGVFbGVtZW50KG5vZGUpKQogICAgICAgICAgICAgICAgIHJldHVybiBl
bGVtZW50OwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxMZWdlbmRF
bGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxMZWdlbmRF
bGVtZW50LmNwcAkocmV2aXNpb24gMTM3MTA4KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
TGVnZW5kRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNs
dWRlICJIVE1MRmllbGRTZXRFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTEZvcm1Db250cm9sRWxl
bWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIk5vZGVUcmF2ZXJzYWwu
aCIKICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
QEAgLTU4LDcgKzU5LDcgQEAgSFRNTEZvcm1Db250cm9sRWxlbWVudCogSFRNTExlZ2VuZEVsZW1l
bgogICAgIC8vIEZpbmQgZmlyc3QgZm9ybSBlbGVtZW50IGluc2lkZSB0aGUgZmllbGRzZXQgdGhh
dCBpcyBub3QgYSBsZWdlbmQgZWxlbWVudC4KICAgICAvLyBGSVhNRTogU2hvdWxkIHdlIGNvbnNp
ZGVyIHRhYmluZGV4PwogICAgIE5vZGUqIG5vZGUgPSBmaWVsZHNldDsKLSAgICB3aGlsZSAoKG5v
ZGUgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKGZpZWxkc2V0KSkpIHsKKyAgICB3aGlsZSAoKG5v
ZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUsIGZpZWxkc2V0KSkpIHsKICAgICAgICAgaWYg
KG5vZGUtPmlzRWxlbWVudE5vZGUoKSkgewogICAgICAgICAgICAgRWxlbWVudCogZWxlbWVudCA9
IHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKTsKICAgICAgICAgICAgIGlmIChlbGVtZW50LT5p
c0Zvcm1Db250cm9sRWxlbWVudCgpKQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWFw
RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWFwRWxl
bWVudC5jcHAJKHJldmlzaW9uIDEzNzEwOCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1h
cEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAi
SFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgogI2luY2x1ZGUgIkludFNp
emUuaCIKKyNpbmNsdWRlICJOb2RlVHJhdmVyc2FsLmgiCiAjaW5jbHVkZSAiUmVuZGVyT2JqZWN0
LmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CkBAIC02Miw3ICs2Myw3IEBAIGJvb2wgSFRNTE1h
cEVsZW1lbnQ6Om1hcE1vdXNlRXZlbnQoTGF5b3UKIHsKICAgICBIVE1MQXJlYUVsZW1lbnQqIGRl
ZmF1bHRBcmVhID0gMDsKICAgICBOb2RlICpub2RlID0gdGhpczsKLSAgICB3aGlsZSAoKG5vZGUg
PSBub2RlLT50cmF2ZXJzZU5leHROb2RlKHRoaXMpKSkgeworICAgIHdoaWxlICgobm9kZSA9IE5v
ZGVUcmF2ZXJzYWw6Om5leHQobm9kZSwgdGhpcykpKSB7CiAgICAgICAgIGlmIChub2RlLT5oYXNU
YWdOYW1lKGFyZWFUYWcpKSB7CiAgICAgICAgICAgICBIVE1MQXJlYUVsZW1lbnQqIGFyZWFFbHQg
PSBzdGF0aWNfY2FzdDxIVE1MQXJlYUVsZW1lbnQqPihub2RlKTsKICAgICAgICAgICAgIGlmIChh
cmVhRWx0LT5pc0RlZmF1bHQoKSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTmFt
ZUNvbGxlY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE5h
bWVDb2xsZWN0aW9uLmNwcAkocmV2aXNpb24gMTM3MTA4KQorKysgU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MTmFtZUNvbGxlY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBA
CiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSFRNTE9iamVjdEVsZW1lbnQuaCIK
ICNpbmNsdWRlICJOb2RlUmFyZURhdGEuaCIKKyNpbmNsdWRlICJOb2RlVHJhdmVyc2FsLmgiCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNTcsOSArNTgsOSBAQCBFbGVtZW50KiBIVE1MTmFt
ZUNvbGxlY3Rpb246OnZpcnR1YWxJdGVtCiAgICAgaWYgKCFwcmV2aW91cykKICAgICAgICAgY3Vy
cmVudCA9IG93bmVyTm9kZSgpLT5maXJzdENoaWxkKCk7CiAgICAgZWxzZQotICAgICAgICBjdXJy
ZW50ID0gcHJldmlvdXMtPnRyYXZlcnNlTmV4dE5vZGUob3duZXJOb2RlKCkpOworICAgICAgICBj
dXJyZW50ID0gTm9kZVRyYXZlcnNhbDo6bmV4dChwcmV2aW91cywgb3duZXJOb2RlKCkpOwogCi0g
ICAgZm9yICg7IGN1cnJlbnQ7IGN1cnJlbnQgPSBjdXJyZW50LT50cmF2ZXJzZU5leHROb2RlKG93
bmVyTm9kZSgpKSkgeworICAgIGZvciAoOyBjdXJyZW50OyBjdXJyZW50ID0gTm9kZVRyYXZlcnNh
bDo6bmV4dChjdXJyZW50LCBvd25lck5vZGUoKSkpIHsKICAgICAgICAgaWYgKCFjdXJyZW50LT5p
c0VsZW1lbnROb2RlKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgRWxlbWVudCog
ZSA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihjdXJyZW50KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTE9wdGlvbkVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTE9wdGlvbkVsZW1lbnQuY3BwCShyZXZpc2lvbiAxMzcxMDgpCisrKyBTb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxPcHRpb25FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYs
NiArMzYsNyBAQAogI2luY2x1ZGUgIkhUTUxTZWxlY3RFbGVtZW50LmgiCiAjaW5jbHVkZSAiTm9k
ZVJlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiTm9kZVJlbmRlcmluZ0NvbnRleHQuaCIKKyNpbmNs
dWRlICJOb2RlVHJhdmVyc2FsLmgiCiAjaW5jbHVkZSAiUmVuZGVyTWVudUxpc3QuaCIKICNpbmNs
dWRlICJSZW5kZXJUaGVtZS5oIgogI2luY2x1ZGUgIlNjcmlwdEVsZW1lbnQuaCIKQEAgLTM4Myw5
ICszODQsOSBAQCBTdHJpbmcgSFRNTE9wdGlvbkVsZW1lbnQ6OmNvbGxlY3RPcHRpb25JCiAgICAg
ICAgICAgICB0ZXh0LmFwcGVuZChub2RlLT5ub2RlVmFsdWUoKSk7CiAgICAgICAgIC8vIFRleHQg
bm9kZXMgaW5zaWRlIHNjcmlwdCBlbGVtZW50cyBhcmUgbm90IHBhcnQgb2YgdGhlIG9wdGlvbiB0
ZXh0LgogICAgICAgICBpZiAobm9kZS0+aXNFbGVtZW50Tm9kZSgpICYmIHRvU2NyaXB0RWxlbWVu
dCh0b0VsZW1lbnQobm9kZSkpKQotICAgICAgICAgICAgbm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4
dFNpYmxpbmcodGhpcyk7CisgICAgICAgICAgICBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dFNp
Ymxpbmcobm9kZSwgdGhpcyk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIG5vZGUgPSBub2Rl
LT50cmF2ZXJzZU5leHROb2RlKHRoaXMpOworICAgICAgICAgICAgbm9kZSA9IE5vZGVUcmF2ZXJz
YWw6Om5leHQobm9kZSwgdGhpcyk7CiAgICAgfQogICAgIHJldHVybiB0ZXh0LnRvU3RyaW5nKCk7
CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQcm9wZXJ0aWVzQ29sbGVjdGlvbi5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUHJvcGVydGllc0NvbGxl
Y3Rpb24uY3BwCShyZXZpc2lvbiAxMzcxMDgpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQ
cm9wZXJ0aWVzQ29sbGVjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc2LDcgKzc2LDggQEAg
c3RhdGljIE5vZGUqIG5leHROb2RlV2l0aFByb3BlcnR5KE5vZGUqIAogICAgIC8vIHRoYXQgZGVj
bGFyZXMgdGhlIHByb3BlcnR5LiBJZiB0aGUgcHJvcGVydHkgaGFzIGFuIGl0ZW1zY29wZSBhdHRy
aWJ1dGUgc3BlY2lmaWVkIHRoZW4gd2UgbmVlZAogICAgIC8vIHRvIHRyYXZlcnNlIHRoZSBuZXh0
IHNpYmxpbmcuCiAgICAgcmV0dXJuIHByZXZpb3VzID09IG93bmVyTm9kZSB8fCAocHJldmlvdXMt
PmlzSFRNTEVsZW1lbnQoKSAmJiAhdG9IVE1MRWxlbWVudChwcmV2aW91cyktPmZhc3RIYXNBdHRy
aWJ1dGUoaXRlbXNjb3BlQXR0cikpCi0gICAgICAgICAgICA/IHByZXZpb3VzLT50cmF2ZXJzZU5l
eHROb2RlKHJvb3ROb2RlKSA6IHByZXZpb3VzLT50cmF2ZXJzZU5leHRTaWJsaW5nKHJvb3ROb2Rl
KTsKKyAgICAgICAgPyBwcmV2aW91cy0+Tm9kZVRyYXZlcnNhbDo6bmV4dChyb290Tm9kZSkKKyAg
ICAgICAgOiBwcmV2aW91cy0+Tm9kZVRyYXZlcnNhbDo6bmV4dFNpYmxpbmcocm9vdE5vZGUpOwog
fQogCiBFbGVtZW50KiBIVE1MUHJvcGVydGllc0NvbGxlY3Rpb246OnZpcnR1YWxJdGVtQWZ0ZXIo
dW5zaWduZWQmIG9mZnNldEluQXJyYXksIEVsZW1lbnQqIHByZXZpb3VzSXRlbSkgY29uc3QKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQuY3BwCShyZXZpc2lvbiAx
MzcxMDgpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTZWxlY3RFbGVtZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDUsNiArNDUsNyBAQAogI2luY2x1ZGUgIkxvY2FsaXplZFN0cmluZ3Mu
aCIKICNpbmNsdWRlICJNb3VzZUV2ZW50LmgiCiAjaW5jbHVkZSAiTm9kZVJlbmRlcmluZ0NvbnRl
eHQuaCIKKyNpbmNsdWRlICJOb2RlVHJhdmVyc2FsLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2lu
Y2x1ZGUgIlJlbmRlckxpc3RCb3guaCIKICNpbmNsdWRlICJSZW5kZXJNZW51TGlzdC5oIgpAQCAt
NzM2LDcgKzczNyw3IEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6OnJlY2FsY0xpc3RJdGVtcygK
ICAgICBIVE1MT3B0aW9uRWxlbWVudCogZmlyc3RPcHRpb24gPSAwOwogICAgIGZvciAoTm9kZSog
Y3VycmVudE5vZGUgPSB0aGlzLT5maXJzdENoaWxkKCk7IGN1cnJlbnROb2RlOykgewogICAgICAg
ICBpZiAoIWN1cnJlbnROb2RlLT5pc0hUTUxFbGVtZW50KCkpIHsKLSAgICAgICAgICAgIGN1cnJl
bnROb2RlID0gY3VycmVudE5vZGUtPnRyYXZlcnNlTmV4dFNpYmxpbmcodGhpcyk7CisgICAgICAg
ICAgICBjdXJyZW50Tm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHRTaWJsaW5nKGN1cnJlbnROb2Rl
LCB0aGlzKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKQEAgLTc3NSwxMiAr
Nzc2LDEyIEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6OnJlY2FsY0xpc3RJdGVtcygKICAgICAg
ICAgICAgIG1fbGlzdEl0ZW1zLmFwcGVuZChjdXJyZW50KTsKIAogICAgICAgICAvLyBJbiBjb25m
b3JtaW5nIEhUTUwgY29kZSwgb25seSA8b3B0Z3JvdXA+IGFuZCA8b3B0aW9uPiB3aWxsIGJlIGZv
dW5kCi0gICAgICAgIC8vIHdpdGhpbiBhIDxzZWxlY3Q+LiBXZSBjYWxsIHRyYXZlcnNlTmV4dFNp
Ymxpbmcgc28gdGhhdCB3ZSBvbmx5IHN0ZXAKKyAgICAgICAgLy8gd2l0aGluIGEgPHNlbGVjdD4u
IFdlIGNhbGwgTm9kZVRyYXZlcnNhbDo6bmV4dFNpYmxpbmcgc28gdGhhdCB3ZSBvbmx5IHN0ZXAK
ICAgICAgICAgLy8gaW50byB0aG9zZSB0YWdzIHRoYXQgd2UgY2hvb3NlIHRvLiBGb3Igd2ViLWNv
bXBhdCwgd2Ugc2hvdWxkIGNvcGUKICAgICAgICAgLy8gd2l0aCB0aGUgY2FzZSB3aGVyZSBvZGQg
dGFncyBsaWtlIGEgPGRpdj4gaGF2ZSBiZWVuIGFkZGVkIGJ1dCB3ZQogICAgICAgICAvLyBoYW5k
bGUgdGhpcyBiZWNhdXNlIHN1Y2ggdGFncyBoYXZlIGFscmVhZHkgYmVlbiByZW1vdmVkIGZyb20g
dGhlCiAgICAgICAgIC8vIDxzZWxlY3Q+J3Mgc3VidHJlZSBhdCB0aGlzIHBvaW50LgotICAgICAg
ICBjdXJyZW50Tm9kZSA9IGN1cnJlbnROb2RlLT50cmF2ZXJzZU5leHRTaWJsaW5nKHRoaXMpOwor
ICAgICAgICBjdXJyZW50Tm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHRTaWJsaW5nKGN1cnJlbnRO
b2RlLCB0aGlzKTsKICAgICB9CiAKICAgICBpZiAoIWZvdW5kU2VsZWN0ZWQgJiYgbV9zaXplIDw9
IDEgJiYgZmlyc3RPcHRpb24gJiYgIWZpcnN0T3B0aW9uLT5zZWxlY3RlZCgpKQpJbmRleDogU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudC5jcHAJ
KHJldmlzaW9uIDEzNzEwOCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRGb3JtQ29u
dHJvbEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVk
ZSAiSFRNTElucHV0RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUg
Ik5vZGVSZW5kZXJpbmdDb250ZXh0LmgiCisjaW5jbHVkZSAiTm9kZVRyYXZlcnNhbC5oIgogI2lu
Y2x1ZGUgIlJlbmRlckJveC5oIgogI2luY2x1ZGUgIlJlbmRlclRleHRDb250cm9sLmgiCiAjaW5j
bHVkZSAiUmVuZGVyVGhlbWUuaCIKQEAgLTQ2Miw3ICs0NjMsNyBAQCBQYXNzUmVmUHRyPFJhbmdl
PiBIVE1MVGV4dEZvcm1Db250cm9sRWxlCiAgICAgaW50IG9mZnNldCA9IDA7CiAgICAgTm9kZSog
c3RhcnROb2RlID0gMDsKICAgICBOb2RlKiBlbmROb2RlID0gMDsKLSAgICBmb3IgKE5vZGUqIG5v
ZGUgPSBpbm5lclRleHQtPmZpcnN0Q2hpbGQoKTsgbm9kZTsgbm9kZSA9IG5vZGUtPnRyYXZlcnNl
TmV4dE5vZGUoaW5uZXJUZXh0KSkgeworICAgIGZvciAoTm9kZSogbm9kZSA9IGlubmVyVGV4dC0+
Zmlyc3RDaGlsZCgpOyBub2RlOyBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dChub2RlLCBpbm5l
clRleHQpKSB7CiAgICAgICAgIEFTU0VSVCghbm9kZS0+Zmlyc3RDaGlsZCgpKTsKICAgICAgICAg
QVNTRVJUKG5vZGUtPmlzVGV4dE5vZGUoKSB8fCBub2RlLT5oYXNUYWdOYW1lKGJyVGFnKSk7CiAg
ICAgICAgIGludCBsZW5ndGggPSBub2RlLT5pc1RleHROb2RlKCkgPyBsYXN0T2Zmc2V0SW5Ob2Rl
KG5vZGUpIDogMTsKQEAgLTU2MSw3ICs1NjIsNyBAQCBTdHJpbmcgSFRNTFRleHRGb3JtQ29udHJv
bEVsZW1lbnQ6OmlubmVyCiAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwogCiAgICAgU3Ry
aW5nQnVpbGRlciByZXN1bHQ7Ci0gICAgZm9yIChOb2RlKiBub2RlID0gaW5uZXJUZXh0OyBub2Rl
OyBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZShpbm5lclRleHQpKSB7CisgICAgZm9yIChO
b2RlKiBub2RlID0gaW5uZXJUZXh0OyBub2RlOyBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dChu
b2RlLCBpbm5lclRleHQpKSB7CiAgICAgICAgIGlmIChub2RlLT5oYXNUYWdOYW1lKGJyVGFnKSkK
ICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQobmV3bGluZUNoYXJhY3Rlcik7CiAgICAgICAgIGVs
c2UgaWYgKG5vZGUtPmlzVGV4dE5vZGUoKSkKQEAgLTYwOCw3ICs2MDksNyBAQCBTdHJpbmcgSFRN
TFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OnZhbHVlCiAgICAgZ2V0TmV4dFNvZnRCcmVhayhsaW5l
LCBicmVha05vZGUsIGJyZWFrT2Zmc2V0KTsKIAogICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0Owot
ICAgIGZvciAoTm9kZSogbm9kZSA9IGlubmVyVGV4dC0+Zmlyc3RDaGlsZCgpOyBub2RlOyBub2Rl
ID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZShpbm5lclRleHQpKSB7CisgICAgZm9yIChOb2RlKiBu
b2RlID0gaW5uZXJUZXh0LT5maXJzdENoaWxkKCk7IG5vZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2Fs
OjpuZXh0KG5vZGUsIGlubmVyVGV4dCkpIHsKICAgICAgICAgaWYgKG5vZGUtPmhhc1RhZ05hbWUo
YnJUYWcpKQogICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChuZXdsaW5lQ2hhcmFjdGVyKTsKICAg
ICAgICAgZWxzZSBpZiAobm9kZS0+aXNUZXh0Tm9kZSgpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9odG1sL1JhZGlvSW5wdXRUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9o
dG1sL1JhZGlvSW5wdXRUeXBlLmNwcAkocmV2aXNpb24gMTM3MTA4KQorKysgU291cmNlL1dlYkNv
cmUvaHRtbC9SYWRpb0lucHV0VHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcg
QEAKICNpbmNsdWRlICJLZXlib2FyZEV2ZW50LmgiCiAjaW5jbHVkZSAiTG9jYWxpemVkU3RyaW5n
cy5oIgogI2luY2x1ZGUgIk1vdXNlRXZlbnQuaCIKKyNpbmNsdWRlICJOb2RlVHJhdmVyc2FsLmgi
CiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJTcGF0aWFsTmF2aWdhdGlvbi5oIgog
I2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CkBAIC04NCw3ICs4NSw3IEBAIHZvaWQgUmFkaW9J
bnB1dFR5cGU6OmhhbmRsZUtleWRvd25FdmVudCgKICAgICAvLyBXZSBjYW4gb25seSBzdGF5IHdp
dGhpbiB0aGUgZm9ybSdzIGNoaWxkcmVuIGlmIHRoZSBmb3JtIGhhc24ndCBiZWVuIGRlbW90ZWQg
dG8gYSBsZWFmIGJlY2F1c2UKICAgICAvLyBvZiBtYWxmb3JtZWQgSFRNTC4KICAgICBOb2RlKiBu
b2RlID0gZWxlbWVudCgpOwotICAgIHdoaWxlICgobm9kZSA9IChmb3J3YXJkID8gbm9kZS0+dHJh
dmVyc2VOZXh0Tm9kZSgpIDogbm9kZS0+dHJhdmVyc2VQcmV2aW91c05vZGUoKSkpKSB7CisgICAg
d2hpbGUgKChub2RlID0gKGZvcndhcmQgPyBOb2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUpIDogTm9k
ZVRyYXZlcnNhbDo6cHJldmlvdXMobm9kZSkpKSkgewogICAgICAgICAvLyBPbmNlIHdlIGVuY291
bnRlciBhIGZvcm0gZWxlbWVudCwgd2Uga25vdyB3ZSdyZSB0aHJvdWdoLgogICAgICAgICBpZiAo
bm9kZS0+aGFzVGFnTmFtZShmb3JtVGFnKSkKICAgICAgICAgICAgIGJyZWFrOwpJbmRleDogU291
cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvQ29udGVudERpc3RyaWJ1dG9yLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9Db250ZW50RGlzdHJpYnV0b3IuY3BwCShy
ZXZpc2lvbiAxMzcxMDgpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9Db250ZW50RGlz
dHJpYnV0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAi
RWxlbWVudFNoYWRvdy5oIgogI2luY2x1ZGUgIkhUTUxDb250ZW50RWxlbWVudC5oIgogI2luY2x1
ZGUgIkhUTUxTaGFkb3dFbGVtZW50LmgiCisjaW5jbHVkZSAiTm9kZVRyYXZlcnNhbC5oIgogI2lu
Y2x1ZGUgIlNoYWRvd1Jvb3QuaCIKIAogCkBAIC04NCw3ICs4NSw3IEBAIGNvbnN0IFZlY3RvcjxJ
bnNlcnRpb25Qb2ludCo+JiBTaGFkb3dSb28KICAgICBpZiAoIXNoYWRvd1Jvb3QtPmhhc0luc2Vy
dGlvblBvaW50KCkpCiAgICAgICAgIHJldHVybiBtX2luc2VydGlvblBvaW50TGlzdDsKIAotICAg
IGZvciAoTm9kZSogbm9kZSA9IHNoYWRvd1Jvb3Q7IG5vZGU7IG5vZGUgPSBub2RlLT50cmF2ZXJz
ZU5leHROb2RlKHNoYWRvd1Jvb3QpKSB7CisgICAgZm9yIChOb2RlKiBub2RlID0gc2hhZG93Um9v
dDsgbm9kZTsgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9kZSwgc2hhZG93Um9vdCkpIHsK
ICAgICAgICAgaWYgKG5vZGUtPmlzSW5zZXJ0aW9uUG9pbnQoKSkKICAgICAgICAgICAgIG1faW5z
ZXJ0aW9uUG9pbnRMaXN0LmFwcGVuZCh0b0luc2VydGlvblBvaW50KG5vZGUpKTsKICAgICB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAJ
KHJldmlzaW9uIDEzNzEwOCkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JE
T01BZ2VudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc2LDYgKzc2LDcgQEAKICNpbmNsdWRlICJN
dXRhdGlvbkV2ZW50LmgiCiAjaW5jbHVkZSAiTm9kZS5oIgogI2luY2x1ZGUgIk5vZGVMaXN0Lmgi
CisjaW5jbHVkZSAiTm9kZVRyYXZlcnNhbC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRl
ICJQYXN0ZWJvYXJkLmgiCiAjaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKQEAgLTg0MSw3ICs4NDIs
NyBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpwZXJmb3JtU2VhcmNoKEVyCiAgICAgICAgICAg
ICBjb250aW51ZTsKIAogICAgICAgICAvLyBNYW51YWwgcGxhaW4gdGV4dCBzZWFyY2guCi0gICAg
ICAgIHdoaWxlICgobm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoZG9jdW1lbnQtPmRvY3Vt
ZW50RWxlbWVudCgpKSkpIHsKKyAgICAgICAgd2hpbGUgKChub2RlID0gTm9kZVRyYXZlcnNhbDo6
bmV4dChub2RlLCBkb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50KCkpKSkgewogICAgICAgICAgICAg
c3dpdGNoIChub2RlLT5ub2RlVHlwZSgpKSB7CiAgICAgICAgICAgICBjYXNlIE5vZGU6OlRFWFRf
Tk9ERToKICAgICAgICAgICAgIGNhc2UgTm9kZTo6Q09NTUVOVF9OT0RFOgpJbmRleDogU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvck1lbW9yeUFnZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yTWVtb3J5QWdlbnQuY3BwCShyZXZp
c2lvbiAxMzcxMDgpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yTWVtb3J5
QWdlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw2ICs0OSw3IEBACiAjaW5jbHVkZSAiTWVt
b3J5SW5zdHJ1bWVudGF0aW9uSW1wbC5oIgogI2luY2x1ZGUgIk1lbW9yeVVzYWdlU3VwcG9ydC5o
IgogI2luY2x1ZGUgIk5vZGUuaCIKKyNpbmNsdWRlICJOb2RlVHJhdmVyc2FsLmgiCiAjaW5jbHVk
ZSAiUGFnZS5oIgogI2luY2x1ZGUgIlNjcmlwdEdDRXZlbnQuaCIKICNpbmNsdWRlICJTY3JpcHRQ
cm9maWxlci5oIgpAQCAtMjM5LDcgKzI0MCw3IEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBO
b2RlKiBjdXJyZW50Tm9kZSA9IHJvb3ROb2RlOwogICAgICAgICBjb2xsZWN0TGlzdGVuZXJzSW5m
byhyb290Tm9kZSk7Ci0gICAgICAgIHdoaWxlICgoY3VycmVudE5vZGUgPSBjdXJyZW50Tm9kZS0+
dHJhdmVyc2VOZXh0Tm9kZShyb290Tm9kZSkpKSB7CisgICAgICAgIHdoaWxlICgoY3VycmVudE5v
ZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KGN1cnJlbnROb2RlLCByb290Tm9kZSkpKSB7CiAgICAg
ICAgICAgICArK21fdG90YWxOb2RlQ291bnQ7CiAgICAgICAgICAgICBjb2xsZWN0Tm9kZVN0YXRp
c3RpY3MoY3VycmVudE5vZGUpOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdl
L0ZvY3VzQ29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9G
b2N1c0NvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAxMzcxMDgpCisrKyBTb3VyY2UvV2ViQ29yZS9w
YWdlL0ZvY3VzQ29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDcgQEAK
ICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCiAjaW5j
bHVkZSAiS2V5Ym9hcmRFdmVudC5oIgorI2luY2x1ZGUgIk5vZGVUcmF2ZXJzYWwuaCIKICNpbmNs
dWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUmFuZ2UuaCIKICNpbmNsdWRlICJSZW5kZXJPYmplY3Qu
aCIKQEAgLTc3NSw3ICs3NzYsNyBAQCB2b2lkIEZvY3VzQ29udHJvbGxlcjo6ZmluZEZvY3VzQ2Fu
ZGlkYXRlCiAgICAgY3VycmVudC5mb2N1c2FibGVOb2RlID0gZm9jdXNlZE5vZGU7CiAgICAgY3Vy
cmVudC52aXNpYmxlTm9kZSA9IGZvY3VzZWROb2RlOwogCi0gICAgZm9yICg7IG5vZGU7IG5vZGUg
PSAobm9kZS0+aXNGcmFtZU93bmVyRWxlbWVudCgpIHx8IGNhblNjcm9sbEluRGlyZWN0aW9uKG5v
ZGUsIGRpcmVjdGlvbikpID8gbm9kZS0+dHJhdmVyc2VOZXh0U2libGluZyhjb250YWluZXIpIDog
bm9kZS0+dHJhdmVyc2VOZXh0Tm9kZShjb250YWluZXIpKSB7CisgICAgZm9yICg7IG5vZGU7IG5v
ZGUgPSAobm9kZS0+aXNGcmFtZU93bmVyRWxlbWVudCgpIHx8IGNhblNjcm9sbEluRGlyZWN0aW9u
KG5vZGUsIGRpcmVjdGlvbikpID8gTm9kZVRyYXZlcnNhbDo6bmV4dFNpYmxpbmcobm9kZSwgY29u
dGFpbmVyKSA6IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9kZSwgY29udGFpbmVyKSkgewogICAgICAg
ICBpZiAobm9kZSA9PSBmb2N1c2VkTm9kZSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wYWdlL0ZyYW1lLmNwcAkocmV2aXNpb24gMTM3MTA4KQorKysgU291cmNlL1dlYkNvcmUv
cGFnZS9GcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDYgKzYzLDcgQEAKICNpbmNsdWRl
ICJNZWRpYUZlYXR1cmVOYW1lcy5oIgogI2luY2x1ZGUgIk5hdmlnYXRvci5oIgogI2luY2x1ZGUg
Ik5vZGVMaXN0LmgiCisjaW5jbHVkZSAiTm9kZVRyYXZlcnNhbC5oIgogI2luY2x1ZGUgIlBhZ2Uu
aCIKICNpbmNsdWRlICJQYWdlQ2FjaGUuaCIKICNpbmNsdWRlICJQYWdlR3JvdXAuaCIKQEAgLTM3
NSw3ICszNzYsNyBAQCBTdHJpbmcgRnJhbWU6OnNlYXJjaEZvckxhYmVsc0Fib3ZlQ2VsbChSCiAg
ICAgaWYgKGFib3ZlQ2VsbCkgewogICAgICAgICAvLyBzZWFyY2ggd2l0aGluIHRoZSBhYm92ZSBj
ZWxsIHdlIGZvdW5kIGZvciBhIG1hdGNoCiAgICAgICAgIHNpemVfdCBsZW5ndGhTZWFyY2hlZCA9
IDA7ICAgIAotICAgICAgICBmb3IgKE5vZGUqIG4gPSBhYm92ZUNlbGwtPmZpcnN0Q2hpbGQoKTsg
bjsgbiA9IG4tPnRyYXZlcnNlTmV4dE5vZGUoYWJvdmVDZWxsKSkgeworICAgICAgICBmb3IgKE5v
ZGUqIG4gPSBhYm92ZUNlbGwtPmZpcnN0Q2hpbGQoKTsgbjsgbiA9IE5vZGVUcmF2ZXJzYWw6Om5l
eHQobiwgYWJvdmVDZWxsKSkgewogICAgICAgICAgICAgaWYgKG4tPmlzVGV4dE5vZGUoKSAmJiBu
LT5yZW5kZXJlcigpICYmIG4tPnJlbmRlcmVyKCktPnN0eWxlKCktPnZpc2liaWxpdHkoKSA9PSBW
SVNJQkxFKSB7CiAgICAgICAgICAgICAgICAgLy8gRm9yIGVhY2ggdGV4dCBjaHVuaywgcnVuIHRo
ZSByZWdleHAKICAgICAgICAgICAgICAgICBTdHJpbmcgbm9kZVN0cmluZyA9IG4tPm5vZGVWYWx1
ZSgpOwpAQCAtNDE2LDEwICs0MTcsNyBAQCBTdHJpbmcgRnJhbWU6OnNlYXJjaEZvckxhYmVsc0Jl
Zm9yZUVsZW1lCiAgICAgLy8gd2FsayBiYWNrd2FyZHMgaW4gdGhlIG5vZGUgdHJlZSwgdW50aWwg
YW5vdGhlciBlbGVtZW50LCBvciBmb3JtLCBvciBlbmQgb2YgdHJlZQogICAgIGludCB1bnNpZ25l
ZCBsZW5ndGhTZWFyY2hlZCA9IDA7CiAgICAgTm9kZSogbjsKLSAgICBmb3IgKG4gPSBlbGVtZW50
LT50cmF2ZXJzZVByZXZpb3VzTm9kZSgpOwotICAgICAgICAgbiAmJiBsZW5ndGhTZWFyY2hlZCA8
IGNoYXJzU2VhcmNoZWRUaHJlc2hvbGQ7Ci0gICAgICAgICBuID0gbi0+dHJhdmVyc2VQcmV2aW91
c05vZGUoKSkKLSAgICB7CisgICAgZm9yIChuID0gTm9kZVRyYXZlcnNhbDo6cHJldmlvdXMoZWxl
bWVudCk7IG4gJiYgbGVuZ3RoU2VhcmNoZWQgPCBjaGFyc1NlYXJjaGVkVGhyZXNob2xkOyBuID0g
Tm9kZVRyYXZlcnNhbDo6cHJldmlvdXMobikpIHsKICAgICAgICAgaWYgKG4tPmhhc1RhZ05hbWUo
Zm9ybVRhZykKICAgICAgICAgICAgIHx8IChuLT5pc0hUTUxFbGVtZW50KCkgJiYgc3RhdGljX2Nh
c3Q8RWxlbWVudCo+KG4pLT5pc0Zvcm1Db250cm9sRWxlbWVudCgpKSkKICAgICAgICAgewpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGFnZS9Ub3VjaERpc2FtYmlndWF0aW9uLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1RvdWNoRGlzYW1iaWd1YXRpb24uY3BwCShyZXZpc2lv
biAxMzcxMDgpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1RvdWNoRGlzYW1iaWd1YXRpb24uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSAiRnJhbWVWaWV3Lmgi
CiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgorI2lu
Y2x1ZGUgIk5vZGVUcmF2ZXJzYWwuaCIKICNpbmNsdWRlIDxhbGdvcml0aG0+CiAjaW5jbHVkZSA8
Y21hdGg+CiAKQEAgLTU1LDExICs1NiwxMSBAQCBzdGF0aWMgSW50UmVjdCBib3VuZGluZ0JveEZv
ckV2ZW50Tm9kZXMoCiAgICAgd2hpbGUgKG5vZGUpIHsKICAgICAgICAgLy8gU2tpcCB0aGUgd2hv
bGUgc3ViLXRyZWUgaWYgdGhlIG5vZGUgZG9lc24ndCBwcm9wYWdhdGUgZXZlbnRzLgogICAgICAg
ICBpZiAobm9kZSAhPSBldmVudE5vZGUgJiYgbm9kZS0+d2lsbFJlc3BvbmRUb01vdXNlQ2xpY2tF
dmVudHMoKSkgewotICAgICAgICAgICAgbm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dFNpYmxpbmco
ZXZlbnROb2RlKTsKKyAgICAgICAgICAgIG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0U2libGlu
Zyhub2RlLCBldmVudE5vZGUpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KICAg
ICAgICAgcmVzdWx0LnVuaXRlKG5vZGUtPnBpeGVsU25hcHBlZEJvdW5kaW5nQm94KCkpOwotICAg
ICAgICBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZShldmVudE5vZGUpOworICAgICAgICBu
b2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dChub2RlLCBldmVudE5vZGUpOwogICAgIH0KICAgICBy
ZXR1cm4gZXZlbnROb2RlLT5kb2N1bWVudCgpLT52aWV3KCktPmNvbnRlbnRzVG9XaW5kb3cocmVz
dWx0KTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dU
aHJlYWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJO
YW1lZEZsb3dUaHJlYWQuY3BwCShyZXZpc2lvbiAxMzcxMDgpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTmFtZWRGbG93VGhyZWFkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjks
NiArMjksNyBAQAogI2luY2x1ZGUgIkZsb3dUaHJlYWRDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAi
SW5saW5lVGV4dEJveC5oIgogI2luY2x1ZGUgIkluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIgor
I2luY2x1ZGUgIk5vZGVUcmF2ZXJzYWwuaCIKICNpbmNsdWRlICJQb3NpdGlvbi5oIgogI2luY2x1
ZGUgIlJlbmRlcklubGluZS5oIgogI2luY2x1ZGUgIlJlbmRlclJlZ2lvbi5oIgpAQCAtNDg0LDcg
KzQ4NSw3IEBAIHZvaWQgUmVuZGVyTmFtZWRGbG93VGhyZWFkOjpnZXRSYW5nZXMoVmUKICAgICAg
ICAgYm9vbCBza2lwT3Zlck91dHNpZGVOb2RlcyA9IGZhbHNlOwogICAgICAgICBOb2RlKiBsYXN0
RW5kTm9kZSA9IDA7CiAKLSAgICAgICAgZm9yIChOb2RlKiBub2RlID0gY29udGVudE5vZGU7IG5v
ZGU7IG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKGNvbnRlbnROb2RlKSkgeworICAgICAg
ICBmb3IgKE5vZGUqIG5vZGUgPSBjb250ZW50Tm9kZTsgbm9kZTsgbm9kZSA9IE5vZGVUcmF2ZXJz
YWw6Om5leHQobm9kZSwgY29udGVudE5vZGUpKSB7CiAgICAgICAgICAgICBSZW5kZXJPYmplY3Qq
IHJlbmRlcmVyID0gbm9kZS0+cmVuZGVyZXIoKTsKICAgICAgICAgICAgIGlmICghcmVuZGVyZXIp
CiAgICAgICAgICAgICAgICAgY29udGludWU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
U1ZHRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1NWR0Vs
ZW1lbnQuY3BwCShyZXZpc2lvbiAxMzcxMDgpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU1ZH
RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlICJG
cmFtZVRyZWUuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMu
aCIKKyNpbmNsdWRlICJOb2RlVHJhdmVyc2FsLmgiCiAjaW5jbHVkZSAiUmVuZGVyT2JqZWN0Lmgi
CiAjaW5jbHVkZSAiUmVuZGVyUGFydC5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlLmgi
CkBAIC0zNDUsNyArMzQ2LDcgQEAgdm9pZCBTVkdTVkdFbGVtZW50Ojpmb3JjZVJlZHJhdygpCiBQ
YXNzUmVmUHRyPE5vZGVMaXN0PiBTVkdTVkdFbGVtZW50Ojpjb2xsZWN0SW50ZXJzZWN0aW9uT3JF
bmNsb3N1cmVMaXN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgU1ZHRWxlbWVudCogcmVmZXJlbmNl
RWxlbWVudCwgQ29sbGVjdEludGVyc2VjdGlvbk9yRW5jbG9zdXJlIGNvbGxlY3QpIGNvbnN0CiB7
CiAgICAgVmVjdG9yPFJlZlB0cjxOb2RlPiA+IG5vZGVzOwotICAgIE5vZGUqIG5vZGUgPSB0cmF2
ZXJzZU5leHROb2RlKHJlZmVyZW5jZUVsZW1lbnQgPyByZWZlcmVuY2VFbGVtZW50IDogdGhpcyk7
CisgICAgTm9kZSogbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQocmVmZXJlbmNlRWxlbWVudCA/
IHJlZmVyZW5jZUVsZW1lbnQgOiB0aGlzKTsKICAgICB3aGlsZSAobm9kZSkgewogICAgICAgICBp
ZiAobm9kZS0+aXNTVkdFbGVtZW50KCkpIHsgCiAgICAgICAgICAgICBpZiAoY29sbGVjdCA9PSBD
b2xsZWN0SW50ZXJzZWN0aW9uTGlzdCkgewpAQCAtMzU3LDcgKzM1OCw3IEBAIFBhc3NSZWZQdHI8
Tm9kZUxpc3Q+IFNWR1NWR0VsZW1lbnQ6OmNvbGwKICAgICAgICAgICAgIH0KICAgICAgICAgfQog
Ci0gICAgICAgIG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKHJlZmVyZW5jZUVsZW1lbnQg
PyByZWZlcmVuY2VFbGVtZW50IDogdGhpcyk7CisgICAgICAgIG5vZGUgPSBOb2RlVHJhdmVyc2Fs
OjpuZXh0KG5vZGUsIHJlZmVyZW5jZUVsZW1lbnQgPyByZWZlcmVuY2VFbGVtZW50IDogdGhpcyk7
CiAgICAgfQogICAgIHJldHVybiBTdGF0aWNOb2RlTGlzdDo6YWRvcHQobm9kZXMpOwogfQpAQCAt
Nzg3LDcgKzc4OCw3IEBAIEVsZW1lbnQqIFNWR1NWR0VsZW1lbnQ6OmdldEVsZW1lbnRCeUlkKGMK
IAogICAgIC8vIEZhbGwgYmFjayB0byB0cmF2ZXJzaW5nIG91ciBzdWJ0cmVlLiBEdXBsaWNhdGUg
aWRzIGFyZSBhbGxvd2VkLCB0aGUgZmlyc3QgZm91bmQgd2lsbAogICAgIC8vIGJlIHJldHVybmVk
LgotICAgIGZvciAoTm9kZSogbm9kZSA9IGZpcnN0Q2hpbGQoKTsgbm9kZTsgbm9kZSA9IG5vZGUt
PnRyYXZlcnNlTmV4dE5vZGUodGhpcykpIHsKKyAgICBmb3IgKE5vZGUqIG5vZGUgPSBmaXJzdENo
aWxkKCk7IG5vZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUsIHRoaXMpKSB7CiAg
ICAgICAgIGlmICghbm9kZS0+aXNFbGVtZW50Tm9kZSgpKQogICAgICAgICAgICAgY29udGludWU7
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdVc2VFbGVtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVXNlRWxlbWVudC5jcHAJKHJldmlzaW9uIDEzNzEw
OCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdVc2VFbGVtZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgIkV2ZW50TGlzdGVuZXIuaCIKICNpbmNsdWRl
ICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJOb2RlUmVuZGVyU3R5bGUuaCIKKyNpbmNsdWRlICJO
b2RlVHJhdmVyc2FsLmgiCiAjaW5jbHVkZSAiUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIuaCIKICNp
bmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZS5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1RyYW5zZm9y
bWFibGVDb250YWluZXIuaCIKQEAgLTY4OSwxMiArNjkwLDEyIEBAIHN0YXRpYyBpbmxpbmUgdm9p
ZCByZW1vdmVEaXNhbGxvd2VkRWxlbWUKICAgICBOb2RlKiBub2RlID0gc3VidHJlZS0+Zmlyc3RD
aGlsZCgpOwogICAgIHdoaWxlIChub2RlKSB7CiAgICAgICAgIGlmIChpc0Rpc2FsbG93ZWRFbGVt
ZW50KG5vZGUpKSB7Ci0gICAgICAgICAgICBOb2RlKiBuZXh0ID0gbm9kZS0+dHJhdmVyc2VOZXh0
U2libGluZyhzdWJ0cmVlKTsKKyAgICAgICAgICAgIE5vZGUqIG5leHQgPSBOb2RlVHJhdmVyc2Fs
OjpuZXh0U2libGluZyhub2RlLCBzdWJ0cmVlKTsKICAgICAgICAgICAgIC8vIFRoZSBzdWJ0cmVl
IGlzIG5vdCBpbiBkb2N1bWVudCBzbyB0aGlzIHdvbid0IGdlbmVyYXRlIGV2ZW50cyB0aGF0IGNv
dWxkIG11dGF0ZSB0aGUgdHJlZS4KICAgICAgICAgICAgIG5vZGUtPnBhcmVudE5vZGUoKS0+cmVt
b3ZlQ2hpbGQobm9kZSk7CiAgICAgICAgICAgICBub2RlID0gbmV4dDsKICAgICAgICAgfSBlbHNl
Ci0gICAgICAgICAgICBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZShzdWJ0cmVlKTsKKyAg
ICAgICAgICAgIG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUsIHN1YnRyZWUpOwogICAg
IH0KIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TTUlMVGltZUNvbnRh
aW5lci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TTUlM
VGltZUNvbnRhaW5lci5jcHAJKHJldmlzaW9uIDEzNzEwOCkKKysrIFNvdXJjZS9XZWJDb3JlL3N2
Zy9hbmltYXRpb24vU01JTFRpbWVDb250YWluZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2
ICsyOCw3IEBACiAKICNpZiBFTkFCTEUoU1ZHKQogI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5j
bHVkZSAiTm9kZVRyYXZlcnNhbC5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSAi
U1ZHU01JTEVsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdTVkdFbGVtZW50LmgiCkBAIC0yMjQsNyAr
MjI1LDcgQEAgdm9pZCBTTUlMVGltZUNvbnRhaW5lcjo6dGltZXJGaXJlZChUaW1lcgogdm9pZCBT
TUlMVGltZUNvbnRhaW5lcjo6dXBkYXRlRG9jdW1lbnRPcmRlckluZGV4ZXMoKQogewogICAgIHVu
c2lnbmVkIHRpbWluZ0VsZW1lbnRDb3VudCA9IDA7Ci0gICAgZm9yIChOb2RlKiBub2RlID0gbV9v
d25lclNWR0VsZW1lbnQ7IG5vZGU7IG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKG1fb3du
ZXJTVkdFbGVtZW50KSkgeworICAgIGZvciAoTm9kZSogbm9kZSA9IG1fb3duZXJTVkdFbGVtZW50
OyBub2RlOyBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dChub2RlLCBtX293bmVyU1ZHRWxlbWVu
dCkpIHsKICAgICAgICAgaWYgKFNWR1NNSUxFbGVtZW50Ojppc1NNSUxFbGVtZW50KG5vZGUpKQog
ICAgICAgICAgICAgc3RhdGljX2Nhc3Q8U1ZHU01JTEVsZW1lbnQqPihub2RlKS0+c2V0RG9jdW1l
bnRPcmRlckluZGV4KHRpbWluZ0VsZW1lbnRDb3VudCsrKTsKICAgICB9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS94bWwvWFBhdGhOb2RlU2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS94bWwvWFBhdGhOb2RlU2V0LmNwcAkocmV2aXNpb24gMTM3MTA4KQorKysgU291cmNlL1dlYkNv
cmUveG1sL1hQYXRoTm9kZVNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAK
ICNpbmNsdWRlICJBdHRyLmgiCiAjaW5jbHVkZSAiRWxlbWVudC5oIgogI2luY2x1ZGUgIk5vZGUu
aCIKKyNpbmNsdWRlICJOb2RlVHJhdmVyc2FsLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIG5h
bWVzcGFjZSBYUGF0aCB7CkBAIC0yMDYsNyArMjA3LDcgQEAgdm9pZCBOb2RlU2V0Ojp0cmF2ZXJz
YWxTb3J0KCkgY29uc3QKICAgICBWZWN0b3I8UmVmUHRyPE5vZGU+ID4gc29ydGVkTm9kZXM7CiAg
ICAgc29ydGVkTm9kZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShub2RlQ291bnQpOwogCi0gICAg
Zm9yIChOb2RlKiBuID0gZmluZFJvb3ROb2RlKG1fbm9kZXMuZmlyc3QoKS5nZXQoKSk7IG47IG4g
PSBuLT50cmF2ZXJzZU5leHROb2RlKCkpIHsKKyAgICBmb3IgKE5vZGUqIG4gPSBmaW5kUm9vdE5v
ZGUobV9ub2Rlcy5maXJzdCgpLmdldCgpKTsgbjsgbiA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobikp
IHsKICAgICAgICAgaWYgKG5vZGVzLmNvbnRhaW5zKG4pKQogICAgICAgICAgICAgc29ydGVkTm9k
ZXMuYXBwZW5kKG4pOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhTdGVwLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhTdGVwLmNwcAkocmV2aXNpb24g
MTM3MTA4KQorKysgU291cmNlL1dlYkNvcmUveG1sL1hQYXRoU3RlcC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJBdHRyLmgiCiAjaW5jbHVkZSAiRG9jdW1l
bnQuaCIKICNpbmNsdWRlICJFbGVtZW50LmgiCisjaW5jbHVkZSAiTm9kZVRyYXZlcnNhbC5oIgog
I2luY2x1ZGUgIlhNTE5TTmFtZXMuaCIKICNpbmNsdWRlICJYUGF0aFBhcnNlci5oIgogI2luY2x1
ZGUgIlhQYXRoVXRpbC5oIgpAQCAtMjQ2LDcgKzI0Nyw3IEBAIHZvaWQgU3RlcDo6bm9kZXNJbkF4
aXMoTm9kZSogY29udGV4dCwgTm8KICAgICAgICAgICAgIGlmIChjb250ZXh0LT5pc0F0dHJpYnV0
ZU5vZGUoKSkgLy8gSW4gWFBhdGggbW9kZWwsIGF0dHJpYnV0ZSBub2RlcyBkbyBub3QgaGF2ZSBj
aGlsZHJlbi4KICAgICAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgICAgIGZvciAoTm9k
ZSogbiA9IGNvbnRleHQtPmZpcnN0Q2hpbGQoKTsgbjsgbiA9IG4tPnRyYXZlcnNlTmV4dE5vZGUo
Y29udGV4dCkpCisgICAgICAgICAgICBmb3IgKE5vZGUqIG4gPSBjb250ZXh0LT5maXJzdENoaWxk
KCk7IG47IG4gPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG4sIGNvbnRleHQpKQogICAgICAgICAgICAg
ICAgIGlmIChub2RlTWF0Y2hlcyhuLCBEZXNjZW5kYW50QXhpcywgbV9ub2RlVGVzdCkpCiAgICAg
ICAgICAgICAgICAgICAgIG5vZGVzLmFwcGVuZChuKTsKICAgICAgICAgICAgIHJldHVybjsKQEAg
LTI5Nyw3ICsyOTgsNyBAQCB2b2lkIFN0ZXA6Om5vZGVzSW5BeGlzKE5vZGUqIGNvbnRleHQsIE5v
CiAgICAgICAgIGNhc2UgRm9sbG93aW5nQXhpczoKICAgICAgICAgICAgIGlmIChjb250ZXh0LT5p
c0F0dHJpYnV0ZU5vZGUoKSkgewogICAgICAgICAgICAgICAgIE5vZGUqIHAgPSBzdGF0aWNfY2Fz
dDxBdHRyKj4oY29udGV4dCktPm93bmVyRWxlbWVudCgpOwotICAgICAgICAgICAgICAgIHdoaWxl
ICgocCA9IHAtPnRyYXZlcnNlTmV4dE5vZGUoKSkpCisgICAgICAgICAgICAgICAgd2hpbGUgKChw
ID0gTm9kZVRyYXZlcnNhbDo6bmV4dChwKSkpCiAgICAgICAgICAgICAgICAgICAgIGlmIChub2Rl
TWF0Y2hlcyhwLCBGb2xsb3dpbmdBeGlzLCBtX25vZGVUZXN0KSkKICAgICAgICAgICAgICAgICAg
ICAgICAgIG5vZGVzLmFwcGVuZChwKTsKICAgICAgICAgICAgIH0gZWxzZSB7CkBAIC0zMDUsNyAr
MzA2LDcgQEAgdm9pZCBTdGVwOjpub2Rlc0luQXhpcyhOb2RlKiBjb250ZXh0LCBObwogICAgICAg
ICAgICAgICAgICAgICBmb3IgKE5vZGUqIG4gPSBwLT5uZXh0U2libGluZygpOyBuOyBuID0gbi0+
bmV4dFNpYmxpbmcoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGVNYXRjaGVz
KG4sIEZvbGxvd2luZ0F4aXMsIG1fbm9kZVRlc3QpKQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG5vZGVzLmFwcGVuZChuKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoTm9kZSog
YyA9IG4tPmZpcnN0Q2hpbGQoKTsgYzsgYyA9IGMtPnRyYXZlcnNlTmV4dE5vZGUobikpCisgICAg
ICAgICAgICAgICAgICAgICAgICBmb3IgKE5vZGUqIGMgPSBuLT5maXJzdENoaWxkKCk7IGM7IGMg
PSBOb2RlVHJhdmVyc2FsOjpuZXh0KGMsIG4pKQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChub2RlTWF0Y2hlcyhjLCBGb2xsb3dpbmdBeGlzLCBtX25vZGVUZXN0KSkKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbm9kZXMuYXBwZW5kKGMpOwogICAgICAgICAgICAgICAg
ICAgICB9CkBAIC0zMTgsNyArMzE5LDcgQEAgdm9pZCBTdGVwOjpub2Rlc0luQXhpcyhOb2RlKiBj
b250ZXh0LCBObwogCiAgICAgICAgICAgICBOb2RlKiBuID0gY29udGV4dDsKICAgICAgICAgICAg
IHdoaWxlIChDb250YWluZXJOb2RlKiBwYXJlbnQgPSBuLT5wYXJlbnROb2RlKCkpIHsKLSAgICAg
ICAgICAgICAgICBmb3IgKG4gPSBuLT50cmF2ZXJzZVByZXZpb3VzTm9kZSgpOyBuICE9IHBhcmVu
dDsgbiA9IG4tPnRyYXZlcnNlUHJldmlvdXNOb2RlKCkpCisgICAgICAgICAgICAgICAgZm9yIChu
ID0gTm9kZVRyYXZlcnNhbDo6cHJldmlvdXMobik7IG4gIT0gcGFyZW50OyBuID0gTm9kZVRyYXZl
cnNhbDo6cHJldmlvdXMobikpCiAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlTWF0Y2hlcyhu
LCBQcmVjZWRpbmdBeGlzLCBtX25vZGVUZXN0KSkKICAgICAgICAgICAgICAgICAgICAgICAgIG5v
ZGVzLmFwcGVuZChuKTsKICAgICAgICAgICAgICAgICBuID0gcGFyZW50OwpAQCAtMzY1LDcgKzM2
Niw3IEBAIHZvaWQgU3RlcDo6bm9kZXNJbkF4aXMoTm9kZSogY29udGV4dCwgTm8KICAgICAgICAg
ICAgIGlmIChjb250ZXh0LT5pc0F0dHJpYnV0ZU5vZGUoKSkgLy8gSW4gWFBhdGggbW9kZWwsIGF0
dHJpYnV0ZSBub2RlcyBkbyBub3QgaGF2ZSBjaGlsZHJlbi4KICAgICAgICAgICAgICAgICByZXR1
cm47CiAKLSAgICAgICAgICAgIGZvciAoTm9kZSogbiA9IGNvbnRleHQtPmZpcnN0Q2hpbGQoKTsg
bjsgbiA9IG4tPnRyYXZlcnNlTmV4dE5vZGUoY29udGV4dCkpCisgICAgICAgICAgICBmb3IgKE5v
ZGUqIG4gPSBjb250ZXh0LT5maXJzdENoaWxkKCk7IG47IG4gPSBOb2RlVHJhdmVyc2FsOjpuZXh0
KG4sIGNvbnRleHQpKQogICAgICAgICAgICAgaWYgKG5vZGVNYXRjaGVzKG4sIERlc2NlbmRhbnRP
clNlbGZBeGlzLCBtX25vZGVUZXN0KSkKICAgICAgICAgICAgICAgICBub2Rlcy5hcHBlbmQobik7
CiAgICAgICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhVdGls
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhVdGlsLmNwcAkocmV2
aXNpb24gMTM3MTA4KQorKysgU291cmNlL1dlYkNvcmUveG1sL1hQYXRoVXRpbC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJYUGF0aFV0aWwuaCIKIAogI2lu
Y2x1ZGUgIkNvbnRhaW5lck5vZGUuaCIKKyNpbmNsdWRlICJOb2RlVHJhdmVyc2FsLmgiCiAjaW5j
bHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBA
IC01Myw3ICs1NCw3IEBAIFN0cmluZyBzdHJpbmdWYWx1ZShOb2RlKiBub2RlKQogICAgICAgICAg
ICAgICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0OwogICAgICAgICAgICAgICAgIHJlc3VsdC5yZXNl
cnZlQ2FwYWNpdHkoMTAyNCk7CiAKLSAgICAgICAgICAgICAgICBmb3IgKE5vZGUqIG4gPSBub2Rl
LT5maXJzdENoaWxkKCk7IG47IG4gPSBuLT50cmF2ZXJzZU5leHROb2RlKG5vZGUpKSB7CisgICAg
ICAgICAgICAgICAgZm9yIChOb2RlKiBuID0gbm9kZS0+Zmlyc3RDaGlsZCgpOyBuOyBuID0gTm9k
ZVRyYXZlcnNhbDo6bmV4dChuLCBub2RlKSkgewogICAgICAgICAgICAgICAgICAgICBpZiAobi0+
aXNUZXh0Tm9kZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIG5v
ZGVWYWx1ZSA9IG4tPm5vZGVWYWx1ZSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0
LmFwcGVuZChub2RlVmFsdWUpOwpJbmRleDogU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNpb24gMTM3MTA4KQorKysg
U291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAK
KzIwMTItMTItMDkgIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgorCisgICAgICAg
IEZhY3RvciBub2RlIHRyYXZlcnNhbCBpbnRvIHN0YW5kYWxvbmUgZnVuY3Rpb25zCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDQ1MDcKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJGcmFtZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lOjpjb250YWluc0Fu
eUZvcm1FbGVtZW50cyk6CisKIDIwMTItMTItMDkgIEpvbiBMZWUgIDxqb25sZWVAYXBwbGUuY29t
PgogCiAgICAgICAgIFtXSzJdIE1vdmUgYnV0dG9uIGltYWdlIHRvIGluamVjdGVkIGJ1bmRsZQpJ
bmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3Bw
CShyZXZpc2lvbiAxMzcxMDgpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViRnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NCw2ICs1NCw3IEBACiAjaW5jbHVkZSA8
V2ViQ29yZS9KU0NTU1N0eWxlRGVjbGFyYXRpb24uaD4KICNpbmNsdWRlIDxXZWJDb3JlL0pTRWxl
bWVudC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvSlNSYW5nZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUv
Tm9kZVRyYXZlcnNhbC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUGFnZS5oPgogI2luY2x1ZGUgPFdl
YkNvcmUvUGx1Z2luRG9jdW1lbnQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlclRyZWVBc1Rl
eHQuaD4KQEAgLTY2NSw3ICs2NjYsNyBAQCBib29sIFdlYkZyYW1lOjpjb250YWluc0FueUZvcm1F
bGVtZW50cygpCiAgICAgaWYgKCFkb2N1bWVudCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgZm9yIChOb2RlKiBub2RlID0gZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudCgpOyBub2RlOyBu
b2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgpKSB7CisgICAgZm9yIChOb2RlKiBub2RlID0g
ZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudCgpOyBub2RlOyBub2RlID0gTm9kZVRyYXZlcnNhbDo6
bmV4dChub2RlKSkgewogICAgICAgICBpZiAoIW5vZGUtPmlzRWxlbWVudE5vZGUoKSkKICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUp
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Zm9ybVRhZykpCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Js
YWNrYmVycnkvQXBpL1dlYlBhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvYmxh
Y2tiZXJyeS9BcGkvV2ViUGFnZS5jcHAJKHJldmlzaW9uIDEzNzEwOCkKKysrIFNvdXJjZS9XZWJL
aXQvYmxhY2tiZXJyeS9BcGkvV2ViUGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkwLDYgKzkw
LDcgQEAKICNlbmRpZgogI2luY2x1ZGUgIk5ldHdvcmtNYW5hZ2VyLmgiCiAjaW5jbHVkZSAiTm9k
ZVJlbmRlclN0eWxlLmgiCisjaW5jbHVkZSAiTm9kZVRyYXZlcnNhbC5oIgogI2lmIEVOQUJMRShO
QVZJR0FUT1JfQ09OVEVOVF9VVElMUykKICNpbmNsdWRlICJOYXZpZ2F0b3JDb250ZW50VXRpbHND
bGllbnRCbGFja0JlcnJ5LmgiCiAjZW5kaWYKQEAgLTU3MTIsNyArNTcxMyw3IEBAIHZvaWQgV2Vi
UGFnZVByaXZhdGU6OmV4aXRGdWxsc2NyZWVuRm9yTm8KIC8vIFRPRE86IFdlIHNob3VsZCByZW1v
dmUgdGhpcyBoZWxwZXIgY2xhc3Mgd2hlbiB3ZSBkZWNpZGUgdG8gc3VwcG9ydCBhbGwgZWxlbWVu
dHMuCiBzdGF0aWMgYm9vbCBjb250YWluc1ZpZGVvVGFncyhFbGVtZW50KiBlbGVtZW50KQogewot
ICAgIGZvciAoTm9kZSogbm9kZSA9IGVsZW1lbnQtPmZpcnN0Q2hpbGQoKTsgbm9kZTsgbm9kZSA9
IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoZWxlbWVudCkpIHsKKyAgICBmb3IgKE5vZGUqIG5vZGUg
PSBlbGVtZW50LT5maXJzdENoaWxkKCk7IG5vZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0
KG5vZGUsIGVsZW1lbnQpKSB7CiAgICAgICAgIGlmIChub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1l
czo6dmlkZW9UYWcpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpJbmRleDogU291
cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzNzEwOCkKKysrIFNvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTIt
MTItMDkgIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgorCisgICAgICAgIEZhY3Rv
ciBub2RlIHRyYXZlcnNhbCBpbnRvIHN0YW5kYWxvbmUgZnVuY3Rpb25zCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDQ1MDcKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHNyYy9XZWJGcmFtZUltcGwuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZUltcGw6OnNldEZpbmRFbmRzdGF0ZUZvY3VzQW5k
U2VsZWN0aW9uKToKKwogMjAxMi0xMi0wOSAgU2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJv
dEBnbWFpbC5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjEzNzEwMy4K
SW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmNwcAkocmV2
aXNpb24gMTM3MTA4KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBs
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE4LDYgKzExOCw3IEBACiAjaW5jbHVkZSAiS1VSTC5o
IgogI2luY2x1ZGUgIk1lc3NhZ2VQb3J0LmgiCiAjaW5jbHVkZSAiTm9kZS5oIgorI2luY2x1ZGUg
Ik5vZGVUcmF2ZXJzYWwuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUGFnZU92ZXJs
YXkuaCIKICNpbmNsdWRlICJQZXJmb3JtYW5jZS5oIgpAQCAtMjM0OSw3ICsyMzUwLDcgQEAgdm9p
ZCBXZWJGcmFtZUltcGw6OnNldEZpbmRFbmRzdGF0ZUZvY3VzQQogICAgICAgICAgICAgICAgIGZy
YW1lKCktPmRvY3VtZW50KCktPnNldEZvY3VzZWROb2RlKG5vZGUpOwogICAgICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG5vZGUgPSBub2RlLT50cmF2ZXJz
ZU5leHROb2RlKCk7CisgICAgICAgICAgICBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dChub2Rl
KTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIE5vIG5vZGUgcmVsYXRlZCB0byB0aGUgYWN0aXZl
IG1hdGNoIHdhcyBmb2N1c2FibGUsIHNvIHNldCB0aGUKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFj
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDEzNzEwOCkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwkod29ya2luZyBj
b3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDEyLTEyLTA5ICBBbnR0aSBLb2l2aXN0byAgPGFudHRp
QGFwcGxlLmNvbT4KKworICAgICAgICBGYWN0b3Igbm9kZSB0cmF2ZXJzYWwgaW50byBzdGFuZGFs
b25lIGZ1bmN0aW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTA0NTA3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAg
CisgICAgICAgICogV2ViVmlldy9XZWJIVE1MUmVwcmVzZW50YXRpb24ubW06CisgICAgICAgIChz
ZWFyY2hGb3JMYWJlbHNCZWZvcmVFbGVtZW50KToKKwogMjAxMi0xMi0wNiAgUmljayBCeWVycyAg
PHJieWVyc0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgQ1NTIGN1cnNvciBwcm9wZXJ0eSBzaG91
bGQgc3VwcG9ydCB3ZWJraXQtaW1hZ2Utc2V0CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJW
aWV3L1dlYkhUTUxSZXByZXNlbnRhdGlvbi5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L21hYy9XZWJWaWV3L1dlYkhUTUxSZXByZXNlbnRhdGlvbi5tbQkocmV2aXNpb24gMTM3MTA4KQor
KysgU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1MUmVwcmVzZW50YXRpb24ubW0JKHdv
cmtpbmcgY29weSkKQEAgLTU0LDYgKzU0LDcgQEAKICNpbXBvcnQgPFdlYkNvcmUvSFRNTE5hbWVz
Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0hUTUxUYWJsZUNlbGxFbGVtZW50Lmg+CiAjaW1wb3J0IDxX
ZWJDb3JlL01JTUVUeXBlUmVnaXN0cnkuaD4KKyNpbXBvcnQgPFdlYkNvcmUvTm9kZVRyYXZlcnNh
bC5oPgogI2ltcG9ydCA8V2ViQ29yZS9SYW5nZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9SZWd1bGFy
RXhwcmVzc2lvbi5oPgogI2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJPYmplY3QuaD4KQEAgLTQzNyw5
ICs0MzgsOSBAQCBzdGF0aWMgTlNTdHJpbmcqIHNlYXJjaEZvckxhYmVsc0JlZm9yZUVsCiAgICAg
Ly8gd2FsayBiYWNrd2FyZHMgaW4gdGhlIG5vZGUgdHJlZSwgdW50aWwgYW5vdGhlciBlbGVtZW50
LCBvciBmb3JtLCBvciBlbmQgb2YgdHJlZQogICAgIHVuc2lnbmVkIGxlbmd0aFNlYXJjaGVkID0g
MDsKICAgICBOb2RlKiBuOwotICAgIGZvciAobiA9IGVsZW1lbnQtPnRyYXZlcnNlUHJldmlvdXNO
b2RlKCk7CisgICAgZm9yIChuID0gTm9kZVRyYXZlcnNhbDo6cHJldmlvdXMoZWxlbWVudCk7CiAg
ICAgICAgICBuICYmIGxlbmd0aFNlYXJjaGVkIDwgY2hhcnNTZWFyY2hlZFRocmVzaG9sZDsKLSAg
ICAgICAgIG4gPSBuLT50cmF2ZXJzZVByZXZpb3VzTm9kZSgpKQorICAgICAgICAgbiA9IE5vZGVU
cmF2ZXJzYWw6OnByZXZpb3VzKG4pKQogICAgIHsKICAgICAgICAgaWYgKG4tPmhhc1RhZ05hbWUo
Zm9ybVRhZykKICAgICAgICAgICAgIHx8IChuLT5pc0hUTUxFbGVtZW50KCkgJiYgc3RhdGljX2Nh
c3Q8RWxlbWVudCo+KG4pLT5pc0Zvcm1Db250cm9sRWxlbWVudCgpKSkK
</data>
<flag name="review"
          id="195169"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>178586</attachid>
            <date>2012-12-10 10:39:50 -0800</date>
            <delta_ts>2012-12-10 15:44:26 -0800</delta_ts>
            <desc>patch4</desc>
            <filename>node-traversal-7.patch</filename>
            <type>text/plain</type>
            <size>145566</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzNzE3NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxNyBAQAorMjAxMi0xMi0wOSAgQW50dGkg
S29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CisKKyAgICAgICAgRmFjdG9yIG5vZGUgdHJhdmVy
c2FsIGludG8gc3RhbmRhbG9uZSBmdW5jdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNDUwNworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIE5vZGUgdHJhdmVyc2FsIGZ1bmN0aW9ucyBhcmUgY3VycmVu
dGx5IE5vZGUgYW5kIENvbnRhaW5lck5vZGUgbWVtYmVycy4gVGhlaXIgaW1wbGVtZW50YXRpb25z
CisgICAgICAgIGFyZSBjb25mdXNpbmdseSBzY2F0dGVyZWQgb3ZlciBtdWx0aXBsZSBoZWFkZXIg
YW5kIHNvdXJjZSBmaWxlcy4gVGhlc2UgZnVuY3Rpb25zIGhhdmUgbm8gcGFydGljdWxhcgorICAg
ICAgICByZWFzb24gdG8gYmUgbWVtYmVycyBhcyB0aGV5IGRvbid0IHJlcXVpcmUgbm9uLXB1Ymxp
YyBhY2Nlc3MuIFRoZXkgc2hvdWxkIGJlIG1hZGUgZnJlZXN0YW5kaW5nCisgICAgICAgIGZ1bmN0
aW9uIGluc3RlYWQgYW5kIGdhdGhlcmVkIHRvZ2V0aGVyLgorICAgICAgICAKKyAgICAgICAgVGhp
cyBwYXRjaCBhZGRzIE5vZGVUcmF2ZXJzYWwgbmFtZXNwYWNlLCBkZWZpbmVkIGluIE5vZGVUcmF2
ZXJzYWwuaC4gSXQgY29udGFpbnMgZnJlZXN0YW5kaW5nCisgICAgICAgIGZ1bmN0aW9ucyBmb3Ig
dHJhdmVyc2luZyBOb2Rlcy4gTW9zdCBwb3B1bGFyIGZ1bmN0aW9ucyBhcmUgaW5saW5lZCAoYXMg
YmVmb3JlKSBhbmQKKyAgICAgICAgdGhlcmUgYXJlIENvbnRhaW5lck5vZGUgc3BlY2lmaWMgc3Bl
Y2lhbGl6YXRpb25zIChhcyBiZWZvcmUpLgorICAgICAgICAKKyAgICAgICAgSW4gY2xpZW50IGNv
ZGUKKyAgICAgICAgCisgICAgICAgICAgICBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgp
OworICAgICAgICAKKyAgICAgICAgYmVjb21lcworICAgICAgICAKKyAgICAgICAgICAgIG5vZGUg
PSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUpOworICAgICAgICAgICAgCisgICAgICAgIGV0Yy4K
KworICAgICAgICAqIFdlYkNvcmUuZXhwLmluOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlO
b2RlT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0
OjphY2Nlc3NpYmlsaXR5RGVzY3JpcHRpb25Gb3JFbGVtZW50cyk6CisgICAgICAgICogYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vz
c2liaWxpdHlPYmplY3Q6OmZpcnN0QWNjZXNzaWJsZU9iamVjdEZyb21Ob2RlKToKKyAgICAgICAg
KiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YWRkSW1hZ2VNYXBDaGlsZHJlbik6
CisgICAgICAgICogYmluZGluZ3MvanMvSlNEb2N1bWVudEN1c3RvbS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjp0b0pTKToKKyAgICAgICAgKiBjc3MvU2VsZWN0b3JDaGVja2VyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNlbGVjdG9yQ2hlY2tlcjo6YWxsVmlzaXRlZFN0YXRlQ2hhbmdlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6OnZpc2l0ZWRTdGF0ZUNoYW5nZWQpOgor
ICAgICAgICAqIGNzcy9TdHlsZUludmFsaWRhdGlvbkFuYWx5c2lzLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlSW52YWxpZGF0aW9uQW5hbHlzaXM6OmludmFsaWRhdGVTdHlsZSk6CisgICAg
ICAgICogZG9tL0NvbnRhaW5lck5vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZGlzcGF0Y2hD
aGlsZEluc2VydGlvbkV2ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpkaXNwYXRjaENoaWxkUmVt
b3ZhbEV2ZW50cyk6CisgICAgICAgICogZG9tL0NvbnRhaW5lck5vZGUuaDoKKyAgICAgICAgKENv
bnRhaW5lck5vZGUpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogZG9tL0NvbnRhaW5l
ck5vZGVBbGdvcml0aG1zLmg6CisgICAgICAgIChXZWJDb3JlOjpDaGlsZEZyYW1lRGlzY29ubmVj
dG9yOjpjb2xsZWN0RGVzY2VuZGFudCk6CisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpidWlsZEFjY2Vzc0tleU1hcCk6CisgICAgICAgIChX
ZWJDb3JlOjpEb2N1bWVudDo6cmVtb3ZlQWxsRXZlbnRMaXN0ZW5lcnMpOgorICAgICAgICAoV2Vi
Q29yZTo6RG9jdW1lbnQ6OnVwZGF0ZUJhc2VVUkwpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1l
bnQ6OnByb2Nlc3NCYXNlRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6bm9k
ZUFic0luZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojpub2RlV2l0aEFic0luZGV4
KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpnZXRGb2N1c2FibGVOb2Rlcyk6CisgICAg
ICAgICogZG9tL0RvY3VtZW50TWFya2VyQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6Om1hcmtlcnNJblJhbmdlKToKKyAgICAgICAgKFdl
YkNvcmU6OkRvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6c2V0TWFya2Vyc0FjdGl2ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6Omhhc01hcmtlcnMpOgorICAg
ICAgICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpjbGVhckRlc2NyaXB0aW9u
T25NYXJrZXJzSW50ZXJzZWN0aW5nUmFuZ2UpOgorICAgICAgICAqIGRvbS9Eb2N1bWVudE9yZGVy
ZWRNYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRPcmRlcmVkTWFwOjpnZXQpOgor
ICAgICAgICAqIGRvbS9FbGVtZW50U2hhZG93LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1l
bnRTaGFkb3c6OmNvbGxlY3RTZWxlY3RGZWF0dXJlU2V0RnJvbSk6CisgICAgICAgICogZG9tL05v
ZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6bm9ybWFsaXplKToKKyAgICAgICAgKFdl
YkNvcmU6Ok5vZGU6OmxhenlBdHRhY2gpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChX
ZWJDb3JlOjpOb2RlOjpkZXRhY2gpOgorICAgICAgICAoV2ViQ29yZTo6dHJhdmVyc2VUcmVlQW5k
TWFyayk6CisgICAgICAgICogZG9tL05vZGUuaDoKKyAgICAgICAgKE5vZGUpOgorICAgICAgICAq
IGRvbS9Ob2RlSXRlcmF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZUl0ZXJhdG9yOjpO
b2RlUG9pbnRlcjo6bW92ZVRvTmV4dCk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlSXRlcmF0b3I6
Ok5vZGVQb2ludGVyOjptb3ZlVG9QcmV2aW91cyk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlSXRl
cmF0b3I6OnVwZGF0ZUZvck5vZGVSZW1vdmFsKToKKyAgICAgICAgKiBkb20vTm9kZVRyYXZlcnNh
bC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoTm9kZVRyYXZlcnNhbCk6
CisgICAgICAgIChXZWJDb3JlOjpOb2RlVHJhdmVyc2FsOjp0cmF2ZXJzZU5leHROb2RlVGVtcGxh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZVRyYXZlcnNhbDo6bmV4dCk6CisgICAgICAgIChX
ZWJDb3JlOjpOb2RlVHJhdmVyc2FsOjp0cmF2ZXJzZU5leHRTaWJsaW5nVGVtcGxhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6Tm9kZVRyYXZlcnNhbDo6bmV4dFNpYmxpbmcpOgorICAgICAgICAqIGRv
bS9SYW5nZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6dG9TdHJpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6UmFuZ2U6OmNoZWNrRGVsZXRlRXh0cmFjdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSYW5nZTo6Zmlyc3ROb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjpwYXN0TGFzdE5v
ZGUpOgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OnRleHRSZWN0cyk6CisgICAgICAgIChXZWJD
b3JlOjpSYW5nZTo6dGV4dFF1YWRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjpnZXRCb3Jk
ZXJBbmRUZXh0UXVhZHMpOgorICAgICAgICAqIGRvbS9UcmVlU2NvcGUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6VHJlZVNjb3BlOjpsYWJlbEVsZW1lbnRGb3JJZCk6CisgICAgICAgIChXZWJDb3Jl
OjpUcmVlU2NvcGU6OmZpbmRBbmNob3IpOgorICAgICAgICAqIGRvbS9UcmVlU2NvcGVBZG9wdGVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRyZWVTY29wZUFkb3B0ZXI6Om1vdmVUcmVlVG9OZXdT
Y29wZSk6CisgICAgICAgIChXZWJDb3JlOjpUcmVlU2NvcGVBZG9wdGVyOjptb3ZlVHJlZVRvTmV3
RG9jdW1lbnQpOgorICAgICAgICAqIGRvbS9UcmVlV2Fsa2VyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlRyZWVXYWxrZXI6Om5leHROb2RlKToKKyAgICAgICAgKiBlZGl0aW5nL0FwcGx5U3R5bGVD
b21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjphcHBseVJl
bGF0aXZlRm9udFN0eWxlQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21t
YW5kOjpmaXhSYW5nZUFuZEFwcGx5SW5saW5lU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6Y29u
dGFpbnNOb25FZGl0YWJsZVJlZ2lvbik6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29t
bWFuZDo6YXBwbHlJbmxpbmVTdHlsZVRvTm9kZVJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkFw
cGx5U3R5bGVDb21tYW5kOjpyZW1vdmVTdHlsZUZyb21SdW5CZWZvcmVBcHBseWluZ1N0eWxlKToK
KyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjpyZW1vdmVJbmxpbmVTdHlsZSk6
CisgICAgICAgICogZWRpdGluZy9CcmVha0Jsb2NrcXVvdGVDb21tYW5kLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkJyZWFrQmxvY2txdW90ZUNvbW1hbmQ6OmRvQXBwbHkpOgorICAgICAgICAqIGVk
aXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9z
aXRlRWRpdENvbW1hbmQ6OmRlbGV0ZUluc2lnbmlmaWNhbnRUZXh0KToKKyAgICAgICAgKFdlYkNv
cmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjpjbG9uZVBhcmFncmFwaFVuZGVyTmV3RWxlbWVudCk6
CisgICAgICAgICogZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OmZpcnN0RWRpdGFibGVQb3NpdGlvbkluTm9kZSk6CisgICAgICAgIChXZWJDb3Jl
OjpEZWxldGVTZWxlY3Rpb25Db21tYW5kOjptYWtlU3R5bGluZ0VsZW1lbnRzRGlyZWN0Q2hpbGRy
ZW5PZkVkaXRhYmxlUm9vdFRvUHJldmVudFN0eWxlTG9zcyk6CisgICAgICAgIChXZWJDb3JlOjpE
ZWxldGVTZWxlY3Rpb25Db21tYW5kOjpoYW5kbGVHZW5lcmFsRGVsZXRlKToKKyAgICAgICAgKiBl
ZGl0aW5nL0VkaXRDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUVkaXRDb21t
YW5kOjphZGROb2RlQW5kRGVzY2VuZGFudHMpOgorICAgICAgICAqIGVkaXRpbmcvRWRpdGluZ1N0
eWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRpbmdTdHlsZTo6dHJpU3RhdGVPZlN0eWxl
KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRpbmdTdHlsZTo6dGV4dERpcmVjdGlvbkZvclNlbGVj
dGlvbik6CisgICAgICAgICogZWRpdGluZy9FZGl0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjpzaW1wbGlmeU1hcmt1cCk6CisgICAgICAgICogZWRpdGluZy9GcmFtZVNlbGVjdGlv
bi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzY2FuRm9yRm9ybSk6CisgICAgICAgIChXZWJDb3Jl
OjpGcmFtZVNlbGVjdGlvbjo6c2V0U2VsZWN0aW9uRnJvbU5vbmUpOgorICAgICAgICAqIGVkaXRp
bmcvSW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAgKiBl
ZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
cGxhY2VtZW50RnJhZ21lbnQ6OnJlbW92ZVVucmVuZGVyZWROb2Rlcyk6CisgICAgICAgIChXZWJD
b3JlOjpSZXBsYWNlbWVudEZyYWdtZW50OjpyZW1vdmVJbnRlcmNoYW5nZU5vZGVzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpJbnNlcnRlZE5vZGVzOjp3aWxs
UmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpSZXBsYWNl
U2VsZWN0aW9uQ29tbWFuZDo6SW5zZXJ0ZWROb2Rlczo6d2lsbFJlbW92ZU5vZGUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OnJlbW92ZVJlZHVuZGFudFN0eWxl
c0FuZEtlZXBTdHlsZVNwYW5JbmxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6cmVtb3ZlSGVhZENv
bnRlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpoYW5k
bGVTdHlsZVNwYW5zKToKKyAgICAgICAgKiBlZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5k
Lmg6CisgICAgICAgIChXZWJDb3JlOjpSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6SW5zZXJ0ZWRO
b2Rlczo6cGFzdExhc3RMZWFmKToKKyAgICAgICAgKiBlZGl0aW5nL1NpbXBsaWZ5TWFya3VwQ29t
bWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGlmeU1hcmt1cENvbW1hbmQ6OmRvQXBw
bHkpOgorICAgICAgICAqIGVkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlRleHRJdGVyYXRvcjo6YWR2YW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpzaG91bGRFbWl0
TmV3bGluZUFmdGVyTm9kZSk6CisgICAgICAgICogZWRpdGluZy9odG1sZWRpdGluZy5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpoYXNBUmVuZGVyZWREZXNjZW5kYW50KToKKyAgICAgICAgKiBlZGl0
aW5nL21hYy9FZGl0b3JNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmZvbnRGb3JT
ZWxlY3Rpb24pOgorICAgICAgICAqIGVkaXRpbmcvbWFya3VwLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OmNvbXBsZXRlVVJMcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZWRNYXJrdXBBY2N1bXVs
YXRvcjo6dHJhdmVyc2VOb2Rlc0ZvclNlcmlhbGl6YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
ZmluZE5vZGVzU3Vycm91bmRpbmdDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OnRyaW1GcmFn
bWVudCk6CisgICAgICAgICogZWRpdGluZy92aXNpYmxlX3VuaXRzLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OnN0YXJ0T2ZQYXJhZ3JhcGgpOgorICAgICAgICAoV2ViQ29yZTo6ZW5kT2ZQYXJhZ3Jh
cGgpOgorICAgICAgICAqIGh0bWwvSFRNTENvbGxlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6bmV4dE5vZGUpOgorICAgICAgICAqIGh0bWwvSFRNTEVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6c2V0SGFzRGlyQXV0b0ZsYWdSZWN1cnNpdmVseSk6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MRWxlbWVudDo6ZGlyZWN0aW9uYWxpdHkpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEVs
ZW1lbnQ6OmFkanVzdERpcmVjdGlvbmFsaXR5SWZOZWVkZWRBZnRlckNoaWxkcmVuQ2hhbmdlZCk6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MRWxlbWVudDo6Z2V0SXRlbVJlZkVsZW1lbnRzKToKKyAg
ICAgICAgKiBodG1sL0hUTUxGaWVsZFNldEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTEZpZWxkU2V0RWxlbWVudDo6aW52YWxpZGF0ZURpc2FibGVkU3RhdGVVbmRlcik6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MRmllbGRTZXRFbGVtZW50OjpyZWZyZXNoRWxlbWVudHNJZk5lZWRl
ZCk6CisgICAgICAgICogaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTEZvcm1FbGVtZW50Ojpmb3JtRWxlbWVudEluZGV4KToKKyAgICAgICAgKiBodG1sL0hU
TUxMYWJlbEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTExhYmVsRWxlbWVudDo6
Y29udHJvbCk6CisgICAgICAgICogaHRtbC9IVE1MTGVnZW5kRWxlbWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MTGVnZW5kRWxlbWVudDo6YXNzb2NpYXRlZENvbnRyb2wpOgorICAgICAg
ICAqIGh0bWwvSFRNTE1hcEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1hcEVs
ZW1lbnQ6Om1hcE1vdXNlRXZlbnQpOgorICAgICAgICAqIGh0bWwvSFRNTE5hbWVDb2xsZWN0aW9u
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxOYW1lQ29sbGVjdGlvbjo6dmlydHVhbEl0ZW1B
ZnRlcik6CisgICAgICAgICogaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MT3B0aW9uRWxlbWVudDo6Y29sbGVjdE9wdGlvbklubmVyVGV4dCk6CisgICAg
ICAgICogaHRtbC9IVE1MUHJvcGVydGllc0NvbGxlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6bmV4dE5vZGVXaXRoUHJvcGVydHkpOgorICAgICAgICAqIGh0bWwvSFRNTFNlbGVjdEVsZW1l
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6OnJlY2FsY0xpc3RJ
dGVtcyk6CisgICAgICAgICogaHRtbC9IVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6c2VsZWN0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50Ojppbm5lclRleHRW
YWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6dmFs
dWVXaXRoSGFyZExpbmVCcmVha3MpOgorICAgICAgICAqIGh0bWwvUmFkaW9JbnB1dFR5cGUuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmFkaW9JbnB1dFR5cGU6OmhhbmRsZUtleWRvd25FdmVudCk6
CisgICAgICAgICogaHRtbC9zaGFkb3cvQ29udGVudERpc3RyaWJ1dG9yLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNoYWRvd1Jvb3RDb250ZW50RGlzdHJpYnV0aW9uRGF0YTo6ZW5zdXJlSW5zZXJ0
aW9uUG9pbnRMaXN0KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OnBlcmZvcm1TZWFyY2gpOgor
ICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JNZW1vcnlBZ2VudC5jcHA6CisgICAgICAgICog
cGFnZS9Gb2N1c0NvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9jdXNDb250cm9s
bGVyOjpmaW5kRm9jdXNDYW5kaWRhdGVJbkNvbnRhaW5lcik6CisgICAgICAgICogcGFnZS9GcmFt
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6c2VhcmNoRm9yTGFiZWxzQWJvdmVDZWxs
KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpzZWFyY2hGb3JMYWJlbHNCZWZvcmVFbGVtZW50
KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTmFtZWRGbG93VGhyZWFkLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlck5hbWVkRmxvd1RocmVhZDo6Z2V0UmFuZ2VzKToKKyAgICAgICAg
KiBzdmcvU1ZHU1ZHRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdTVkdFbGVtZW50
Ojpjb2xsZWN0SW50ZXJzZWN0aW9uT3JFbmNsb3N1cmVMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlNWR1NWR0VsZW1lbnQ6OmdldEVsZW1lbnRCeUlkKToKKyAgICAgICAgKiBzdmcvU1ZHVXNlRWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpyZW1vdmVEaXNhbGxvd2VkRWxlbWVudHNGcm9t
U3VidHJlZSk6CisgICAgICAgICogc3ZnL2FuaW1hdGlvbi9TTUlMVGltZUNvbnRhaW5lci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTTUlMVGltZUNvbnRhaW5lcjo6dXBkYXRlRG9jdW1lbnRPcmRl
ckluZGV4ZXMpOgorICAgICAgICAqIHhtbC9YUGF0aE5vZGVTZXQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6WFBhdGg6Ok5vZGVTZXQ6OnRyYXZlcnNhbFNvcnQpOgorICAgICAgICAqIHhtbC9YUGF0
aFN0ZXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OlN0ZXA6Om5vZGVzSW5BeGlzKToK
KyAgICAgICAgKiB4bWwvWFBhdGhVdGlsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpz
dHJpbmdWYWx1ZSk6CisKIDIwMTItMTItMTAgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNp
YUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHVEtdIEJ1aWxkIEdPYmplY3QgRE9NIGJpbmRpbmdz
IGFzIGEgc2VwYXJhdGUgbGlicmFyeQpJbmRleDogU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50
eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9u
IDEzNzE3NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkp
CkBAIC0xMTk0LDYgKzExOTQsNyBAQCBzZXQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgZG9tL05vZGVJ
dGVyYXRvci5jcHAKICAgICBkb20vTm9kZVJhcmVEYXRhLmNwcAogICAgIGRvbS9Ob2RlUmVuZGVy
aW5nQ29udGV4dC5jcHAKKyAgICBkb20vTm9kZVRyYXZlcnNhbC5jcHAKICAgICBkb20vTm90YXRp
b24uY3BwCiAgICAgZG9tL092ZXJmbG93RXZlbnQuY3BwCiAgICAgZG9tL1BhZ2VUcmFuc2l0aW9u
RXZlbnQuY3BwCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHJldmlzaW9uIDEz
NzE3NSkKKysrIFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHdvcmtpbmcgY29w
eSkKQEAgLTI4ODIsNiArMjg4Miw4IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dl
YkNvcmUvZG9tL05vZGVSYXJlRGF0YS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9kb20vTm9kZVJlbmRl
cmluZ0NvbnRleHQuaCBcCiAJU291cmNlL1dlYkNvcmUvZG9tL05vZGVSZW5kZXJTdHlsZS5oIFwK
KyAgICBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZVRyYXZlcnNhbC5jcHAgXAorICAgIFNvdXJjZS9X
ZWJDb3JlL2RvbS9Ob2RlVHJhdmVyc2FsLmggXAogCVNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlV2l0
aEluZGV4LmggXAogCVNvdXJjZS9XZWJDb3JlL2RvbS9Ob3RhdGlvbi5jcHAgXAogCVNvdXJjZS9X
ZWJDb3JlL2RvbS9Ob3RhdGlvbi5oIFwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQkocmV2aXNpb24gMTM3MTc1
KQorKysgU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQkod29ya2luZyBjb3B5KQpAQCAtNDMxLDYg
KzQzMSw3IEBAIFNPVVJDRVMgKz0gXAogICAgIGRvbS9Ob2RlSXRlcmF0b3IuY3BwIFwKICAgICBk
b20vTm9kZVJhcmVEYXRhLmNwcCBcCiAgICAgZG9tL05vZGVSZW5kZXJpbmdDb250ZXh0LmNwcCBc
CisgICAgZG9tL05vZGVUcmF2ZXJzYWwuY3BwIFwKICAgICBkb20vTm90YXRpb24uY3BwIFwKICAg
ICBkb20vU3RhdGljSGFzaFNldE5vZGVMaXN0LmNwcCBcCiAgICAgZG9tL092ZXJmbG93RXZlbnQu
Y3BwIFwKQEAgLTE2MTMsNiArMTYxNCw3IEBAIEhFQURFUlMgKz0gXAogICAgIGRvbS9Ob2RlSXRl
cmF0b3IuaCBcCiAgICAgZG9tL05vZGVSYXJlRGF0YS5oIFwKICAgICBkb20vTm9kZVJlbmRlcmlu
Z0NvbnRleHQuaCBcCisgICAgZG9tL05vZGVUcmF2ZXJzYWwuaCBcCiAgICAgZG9tL05vdGF0aW9u
LmggXAogICAgIGRvbS9TdGF0aWNIYXNoU2V0Tm9kZUxpc3QuaCBcCiAgICAgZG9tL092ZXJmbG93
RXZlbnQuaCBcCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgkocmV2aXNpb24gMTM3MTc1KQorKysg
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHdvcmtpbmcgY29weSkKQEAgLTIyOCw2ICsy
MjgsOCBAQCBfX1pON1dlYkNvcmUxM0lkZW50aWZpZXJSZXAzZ2V0RWkKIF9fWk43V2ViQ29yZTEz
SlNIVE1MRWxlbWVudDZzX2luZm9FCiBfX1pON1dlYkNvcmUxM0tleWJvYXJkRXZlbnRDMUVSS04z
V1RGMTJBdG9taWNTdHJpbmdFYmJQTlNfOURPTVdpbmRvd0VSS05TMV82U3RyaW5nRWpiYmJiYgog
X19aTjdXZWJDb3JlMTNLZXlib2FyZEV2ZW50QzFFUktOU18yMVBsYXRmb3JtS2V5Ym9hcmRFdmVu
dEVQTlNfOURPTVdpbmRvd0UKK19fWk43V2ViQ29yZTEzTm9kZVRyYXZlcnNhbDE5bmV4dEFuY2Vz
dG9yU2libGluZ0VQS05TXzROb2RlRQorX19aTjdXZWJDb3JlMTNOb2RlVHJhdmVyc2FsOHByZXZp
b3VzRVBLTlNfNE5vZGVFUzNfCiBfX1pON1dlYkNvcmUxM1F1YWxpZmllZE5hbWVEMUV2CiBfX1pO
N1dlYkNvcmUxM1Jlc291cmNlRXJyb3JDMUVQN05TRXJyb3IKIF9fWk43V2ViQ29yZTEzUmVzb3Vy
Y2VFcnJvckMxRVA5X19DRkVycm9yCkBAIC0xMzYzLDggKzEzNjUsNiBAQCBfX1pON1dlYkNvcmU0
Tm9kZTEyaW5zZXJ0QmVmb3JlRU4zV1RGMTBQCiBfX1pOSzdXZWJDb3JlNE5vZGUxM293bmVyRG9j
dW1lbnRFdgogX19aTks3V2ViQ29yZTROb2RlMTRpc0Rlc2NlbmRhbnRPZkVQS1MwXwogX19aTks3
V2ViQ29yZTROb2RlMThnZXRTdWJyZXNvdXJjZVVSTHNFUk4zV1RGMTFMaXN0SGFzaFNldElOU180
S1VSTEVMbTI1NkVOU184S1VSTEhhc2hFRUUKLV9fWk5LN1dlYkNvcmU0Tm9kZTIwdHJhdmVyc2VQ
cmV2aW91c05vZGVFUEtTMF8KLV9fWk5LN1dlYkNvcmU0Tm9kZTI3dHJhdmVyc2VOZXh0QW5jZXN0
b3JTaWJsaW5nRXYKIF9fWk5LN1dlYkNvcmU0Tm9kZTMxbnVtYmVyT2ZTY29wZWRIVE1MU3R5bGVD
aGlsZHJlbkV2CiBfX1pOSzdXZWJDb3JlNE5vZGU5bm9kZUluZGV4RXYKIF9fWk5LN1dlYkNvcmU0
UGFnZTEwcGx1Z2luRGF0YUV2CkBAIC0yMDYyLDcgKzIwNjIsNiBAQCBfX1pOSzdXZWJDb3JlMTVW
aXNpYmxlUG9zaXRpb241cmlnaHRFYgogX19aTks3V2ViQ29yZTE3UmVuZGVyVGV4dENvbnRyb2wy
MnRleHRGb3JtQ29udHJvbEVsZW1lbnRFdgogX19aTks3V2ViQ29yZTE3UmVuZGVyVGV4dENvbnRy
b2wyM3Zpc2libGVQb3NpdGlvbkZvckluZGV4RWkKIF9fWk5LN1dlYkNvcmU0Tm9kZTE4cmVuZGVy
ZXJJc0VkaXRhYmxlRU5TMF8xM0VkaXRhYmxlTGV2ZWxFCi1fX1pOSzdXZWJDb3JlNE5vZGUyN3Ry
YXZlcnNlTmV4dEFuY2VzdG9yU2libGluZ0VQS1MwXwogX19aTks3V2ViQ29yZTVGcmFtZTEydXBk
YXRlTGF5b3V0RXYKIF9fWk5LN1dlYkNvcmU1RnJhbWUxM2RvY3VtZW50U2NhbGVFdgogX19aTks3
V2ViQ29yZTVGcmFtZTE1aW5uZXJMaW5lSGVpZ2h0RVA3RE9NTm9kZQpJbmRleDogU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5neXBpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
Z3lwaQkocmV2aXNpb24gMTM3MTc1KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCSh3
b3JraW5nIGNvcHkpCkBAIC0yODQ2LDYgKzI4NDYsOCBAQAogICAgICAgICAgICAgJ2RvbS9Ob2Rl
UmVuZGVyaW5nQ29udGV4dC5jcHAnLAogICAgICAgICAgICAgJ2RvbS9Ob2RlUmVuZGVyaW5nQ29u
dGV4dC5oJywKICAgICAgICAgICAgICdkb20vTm9kZVJlbmRlclN0eWxlLmgnLAorICAgICAgICAg
ICAgJ2RvbS9Ob2RlVHJhdmVyc2FsLmNwcCcsCisgICAgICAgICAgICAnZG9tL05vZGVUcmF2ZXJz
YWwuaCcsCiAgICAgICAgICAgICAnZG9tL05vZGVXaXRoSW5kZXguaCcsCiAgICAgICAgICAgICAn
ZG9tL05vdGF0aW9uLmNwcCcsCiAgICAgICAgICAgICAnZG9tL05vdGF0aW9uLmgnLApJbmRleDog
U291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHJldmlzaW9u
IDEzNzE3NSkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9q
CSh3b3JraW5nIGNvcHkpCkBAIC01MzQwMSw2ICs1MzQwMSwxNCBAQAogCQkJCVJlbGF0aXZlUGF0
aD0iLi5cZG9tXE5vZGVSZW5kZXJpbmdDb250ZXh0LmgiCiAJCQkJPgogCQkJPC9GaWxlPgorICAg
ICAgICAgICAgPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGRvbVxOb2RlVHJhdmVyc2FsLmNw
cCIKKwkJCQk+CisJCQk8L0ZpbGU+CisgICAgICAgICAgICA8RmlsZQorCQkJCVJlbGF0aXZlUGF0
aD0iLi5cZG9tXE5vZGVUcmF2ZXJzYWwuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CiAJCQk8RmlsZQog
CQkJCVJlbGF0aXZlUGF0aD0iLi5cZG9tXE5vdGF0aW9uLmNwcCIKIAkJCQk+CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZp
c2lvbiAxMzcxNzUpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTYxODQsNiArNjE4NCw4IEBACiAJCUU0MTVGMTY5
MEQ5QTE2NUQwMDMzQ0U5NyAvKiBET01FbGVtZW50VGltZUNvbnRyb2wuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0MTVGMTY4MEQ5QTE2NUQwMDMzQ0U5
NyAvKiBET01FbGVtZW50VGltZUNvbnRyb2wuaCAqLzsgfTsKIAkJRTQxNUYxODQwRDlBMUE4MzAw
MzNDRTk3IC8qIEVsZW1lbnRUaW1lQ29udHJvbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRTQxNUYxODMwRDlBMUE4MzAwMzNDRTk3IC8qIEVsZW1lbnRU
aW1lQ29udHJvbC5oICovOyB9OwogCQlFNDI5NUZBNDEyQjA2MTRFMDBEMUFDRTAgLyogUmVzb3Vy
Y2VMb2FkUHJpb3JpdHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEU0Mjk1RkEzMTJCMDYxNEUwMEQxQUNFMCAvKiBSZXNvdXJjZUxvYWRQcmlvcml0eS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUU0MzEw
NUI4MTY3NTBGMEMwMERCMkZCOCAvKiBOb2RlVHJhdmVyc2FsLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0MzEwNUI3MTY3NTBGMEMwMERCMkZCOCAv
KiBOb2RlVHJhdmVyc2FsLmNwcCAqLzsgfTsKKwkJRTQzMTA1QkIxNjc1MEYxNjAwREIyRkI4IC8q
IE5vZGVUcmF2ZXJzYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEU0MzEwNUJBMTY3NTBGMTYwMERCMkZCOCAvKiBOb2RlVHJhdmVyc2FsLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTQ0NjEzQTEwQ0Q2
MzMxMDAwRkFEQTc1IC8qIEhUTUxBdWRpb0VsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ0NjEzOEYwQ0Q2MzMxMDAwRkFEQTc1IC8qIEhU
TUxBdWRpb0VsZW1lbnQuY3BwICovOyB9OwogCQlFNDQ2MTNBMjBDRDYzMzEwMDBGQURBNzUgLyog
SFRNTEF1ZGlvRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRTQ0NjEzOTAwQ0Q2MzMxMDAwRkFEQTc1IC8qIEhUTUxBdWRpb0VsZW1lbnQuaCAq
LzsgfTsKIAkJRTQ0NjEzQTQwQ0Q2MzMxMDAwRkFEQTc1IC8qIEhUTUxNZWRpYUVsZW1lbnQuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ0NjEzOTIw
Q0Q2MzMxMDAwRkFEQTc1IC8qIEhUTUxNZWRpYUVsZW1lbnQuY3BwICovOyB9OwpAQCAtMTA0ODQs
NyArMTA0ODYsNyBAQAogCQk5MzJFMTYwODBBRjU3ODM0MDAyNUY0MDggLyogRnJhbWVMb2FkZXIu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRnJhbWVMb2FkZXIuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5MzMwOUQ4NzA5OUU2NDkxMDA1NkU1ODEg
LyogQXBwZW5kTm9kZUNvbW1hbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gQXBwZW5kTm9kZUNvbW1hbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk5MzMwOUQ4ODA5OUU2NDkxMDA1NkU1ODEgLyogQXBwZW5kTm9kZUNvbW1hbmQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXBwZW5kTm9kZUNvbW1hbmQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJOTMzMDlEODkwOTlFNjQ5MTAwNTZFNTgxIC8qIEFwcGx5U3R5
bGVDb21tYW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFwcGx5
U3R5bGVDb21tYW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTMzMDlEODkw
OTlFNjQ5MTAwNTZFNTgxIC8qIEFwcGx5U3R5bGVDb21tYW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbGluZUVuZGluZyA9IDA7IHBhdGggPSBBcHBseVN0eWxlQ29tbWFuZC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHhjTGFuZ3VhZ2VTcGVjaWZpY2F0aW9uSWRlbnRp
ZmllciA9IHhjb2RlLmxhbmcuY3BwOyB9OwogCQk5MzMwOUQ4QTA5OUU2NDkxMDA1NkU1ODEgLyog
QXBwbHlTdHlsZUNvbW1hbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXBw
bHlTdHlsZUNvbW1hbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTMzMDlEOEIw
OTlFNjQ5MTAwNTZFNTgxIC8qIEJyZWFrQmxvY2txdW90ZUNvbW1hbmQuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQnJlYWtCbG9ja3F1b3RlQ29tbWFuZC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzMzA5RDhDMDk5RTY0OTEwMDU2RTU4MSAvKiBC
cmVha0Jsb2NrcXVvdGVDb21tYW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEJyZWFrQmxvY2txdW90ZUNvbW1hbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTEzNjc2LDYgKzEzNjc4LDggQEAKIAkJRTQxRUEwMzgxMTk4MzZEQjAwNzEwQkM1IC8qIENTU1By
b3BlcnR5TmFtZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ1NT
UHJvcGVydHlOYW1lcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0MUVBMDM5
MTE5ODM3NDkwMDcxMEJDNSAvKiBDU1NWYWx1ZUtleXdvcmRzLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENTU1ZhbHVlS2V5d29yZHMuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlFNDI5NUZBMzEyQjA2MTRFMDBEMUFDRTAgLyogUmVzb3VyY2VMb2Fk
UHJpb3JpdHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVzb3VyY2VMb2Fk
UHJpb3JpdHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTQzMTA1QjcxNjc1MEYw
QzAwREIyRkI4IC8qIE5vZGVUcmF2ZXJzYWwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gTm9kZVRyYXZlcnNhbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUU0MzEwNUJBMTY3NTBGMTYwMERCMkZCOCAvKiBOb2RlVHJhdmVyc2FsLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5vZGVUcmF2ZXJzYWwuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJRTQ0NjEzOEYwQ0Q2MzMxMDAwRkFEQTc1IC8qIEhUTUxBdWRpb0VsZW1l
bnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSFRNTEF1ZGlvRWxl
bWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0NDYxMzkwMENENjMzMTAw
MEZBREE3NSAvKiBIVE1MQXVkaW9FbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEhUTUxBdWRpb0VsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
RTQ0NjEzOTEwQ0Q2MzMxMDAwRkFEQTc1IC8qIEhUTUxBdWRpb0VsZW1lbnQuaWRsICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gdGV4dDsgcGF0aCA9IEhUTUxBdWRpb0VsZW1lbnQuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtMjIxMTIsNiArMjIxMTYsOCBAQAogCQkJCUE3RjVEOTREMTM4NEYwMkQwMEEy
OUE4NyAvKiBOb2RlUmVuZGVyaW5nQ29udGV4dC5jcHAgKi8sCiAJCQkJQTdGNUQ5NEUxMzg0RjAy
RDAwQTI5QTg3IC8qIE5vZGVSZW5kZXJpbmdDb250ZXh0LmggKi8sCiAJCQkJNjNEN0IzMkMwRTc4
Q0QzRjAwRjc2MTdDIC8qIE5vZGVSZW5kZXJTdHlsZS5oICovLAorCQkJCUU0MzEwNUI3MTY3NTBG
MEMwMERCMkZCOCAvKiBOb2RlVHJhdmVyc2FsLmNwcCAqLywKKwkJCQlFNDMxMDVCQTE2NzUwRjE2
MDBEQjJGQjggLyogTm9kZVRyYXZlcnNhbC5oICovLAogCQkJCTkzODJBQUIxMEQ4QzM4NjEwMEYz
NTdBNiAvKiBOb2RlV2l0aEluZGV4LmggKi8sCiAJCQkJQThFQTdFQjcwQTE5NDVEMDAwQThFRjVG
IC8qIE5vdGF0aW9uLmNwcCAqLywKIAkJCQlBOEVBN0VCNjBBMTk0NUQwMDBBOEVGNUYgLyogTm90
YXRpb24uaCAqLywKQEAgLTIyNTY5LDYgKzIyNTc1LDcgQEAKIAkJCWlzYSA9IFBCWEhlYWRlcnNC
dWlsZFBoYXNlOwogCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKIAkJCWZpbGVzID0g
KAorCQkJCUU0MzEwNUJCMTY3NTBGMTYwMERCMkZCOCAvKiBOb2RlVHJhdmVyc2FsLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlDMzc1RDdGRTE2NjM5NTE5MDA2MTg0QUIgLyogVHlwZUFoZWFkLmggaW4g
SGVhZGVycyAqLywKIAkJCQlGRDFBRjE1MDE2NTZGMTUxMDBDNkQ0RjcgLyogRXhjbHVzaW9uU2hh
cGVWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM3RkE2MjEwRDFGMENCRDAwREIyMkE5IC8q
IExpdmVOb2RlTGlzdC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yOTAxNiw2ICsyOTAyMyw3IEBACiAJ
CQkJODZCQTc2NkUxNjY0MjdBODAwNUJFNUQxIC8qIEZyYW1lTG9hZFJlcXVlc3QuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJOTNGNzJBRjQxNjY2RURGQzAwMkEwMkJEIC8qIExheWVyUG9vbC5tbSBp
biBTb3VyY2VzICovLAogCQkJCUMzNzVEN0ZEMTY2Mzk1MTkwMDYxODRBQiAvKiBUeXBlQWhlYWQu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRTQzMTA1QjgxNjc1MEYwQzAwREIyRkI4IC8qIE5vZGVU
cmF2ZXJzYWwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMDdCNDQyRDYxNjZDNzBCMDAwNTU2Q0FE
IC8qIEluYmFuZFRleHRUcmFja1ByaXZhdGVBVkYuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMDdB
QTZCNkIxNjZEMkMwNzAwRDQ1NjcxIC8qIEluYmFuZFRleHRUcmFja1ByaXZhdGVBVkZPYmpDLm1t
IGluIFNvdXJjZXMgKi8sCiAJCQkJMDc5NDE3OTExNjZFODU1RjAwOTQxNkMyIC8qIEluYmFuZFRl
eHRUcmFjay5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuY3BwCShyZXZpc2lv
biAxMzcxNzUpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlO
b2RlT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMsNiArNjMsNyBAQAogI2luY2x1ZGUg
IkxvY2FsaXplZFN0cmluZ3MuaCIKICNpbmNsdWRlICJNYXRoTUxOYW1lcy5oIgogI2luY2x1ZGUg
Ik5vZGVMaXN0LmgiCisjaW5jbHVkZSAiTm9kZVRyYXZlcnNhbC5oIgogI2luY2x1ZGUgIlBhZ2Uu
aCIKICNpbmNsdWRlICJQcm9ncmVzc1RyYWNrZXIuaCIKICNpbmNsdWRlICJUZXh0LmgiCkBAIC0x
NTg2LDcgKzE1ODcsNyBAQCBTdHJpbmcgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmFjY2Vzc2li
CiAgICAgICAgIEVsZW1lbnQqIGlkRWxlbWVudCA9IGVsZW1lbnRzW2ldOwogCiAgICAgICAgIGJ1
aWxkZXIuYXBwZW5kKGFjY2Vzc2libGVOYW1lRm9yTm9kZShpZEVsZW1lbnQpKTsKLSAgICAgICAg
Zm9yIChOb2RlKiBuID0gaWRFbGVtZW50LT5maXJzdENoaWxkKCk7IG47IG4gPSBuLT50cmF2ZXJz
ZU5leHROb2RlKGlkRWxlbWVudCkpCisgICAgICAgIGZvciAoTm9kZSogbiA9IGlkRWxlbWVudC0+
Zmlyc3RDaGlsZCgpOyBuOyBuID0gTm9kZVRyYXZlcnNhbDo6bmV4dChuLCBpZEVsZW1lbnQpKQog
ICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoYWNjZXNzaWJsZU5hbWVGb3JOb2RlKG4pKTsKIAog
ICAgICAgICBpZiAoaSAhPSBzaXplIC0gMSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAkocmV2aXNpb24gMTM3MTc1
KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsNyBAQAogI2luY2x1ZGUgIkhUTUxOYW1lcy5o
IgogI2luY2x1ZGUgIkxvY2FsaXplZFN0cmluZ3MuaCIKICNpbmNsdWRlICJOb2RlTGlzdC5oIgor
I2luY2x1ZGUgIk5vZGVUcmF2ZXJzYWwuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgog
I2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJSZW5kZXJJbWFnZS5oIgpAQCAtMzYwLDEwICsz
NjEsMTAgQEAgQWNjZXNzaWJpbGl0eU9iamVjdCogQWNjZXNzaWJpbGl0eU9iamVjdAogCiAgICAg
QWNjZXNzaWJpbGl0eU9iamVjdCogYWNjZXNzaWJsZU9iamVjdCA9IGNhY2hlLT5nZXRPckNyZWF0
ZShub2RlLT5yZW5kZXJlcigpKTsKICAgICB3aGlsZSAoYWNjZXNzaWJsZU9iamVjdCAmJiBhY2Nl
c3NpYmxlT2JqZWN0LT5hY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCkpIHsKLSAgICAgICAgbm9kZSA9
IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoKTsKKyAgICAgICAgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6
Om5leHQobm9kZSk7CiAKICAgICAgICAgd2hpbGUgKG5vZGUgJiYgIW5vZGUtPnJlbmRlcmVyKCkp
Ci0gICAgICAgICAgICBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0U2libGluZygpOworICAgICAg
ICAgICAgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHRTaWJsaW5nKG5vZGUpOwogCiAgICAgICAg
IGlmICghbm9kZSkKICAgICAgICAgICAgIHJldHVybiAwOwpJbmRleDogU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Qu
Y3BwCShyZXZpc2lvbiAxMzcxNzUpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MSw2ICs2MSw3
IEBACiAjaW5jbHVkZSAiTG9jYWxpemVkU3RyaW5ncy5oIgogI2luY2x1ZGUgIk1hdGhNTE5hbWVz
LmgiCiAjaW5jbHVkZSAiTm9kZUxpc3QuaCIKKyNpbmNsdWRlICJOb2RlVHJhdmVyc2FsLmgiCiAj
aW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlByb2dyZXNzVHJhY2tlci5oIgogI2luY2x1ZGUg
IlJlbmRlckJ1dHRvbi5oIgpAQCAtMjY1Niw3ICsyNjU3LDcgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5
UmVuZGVyT2JqZWN0OjphZGRJbWFnZQogICAgIGlmICghbWFwKQogICAgICAgICByZXR1cm47CiAK
LSAgICBmb3IgKE5vZGUqIGN1cnJlbnQgPSBtYXAtPmZpcnN0Q2hpbGQoKTsgY3VycmVudDsgY3Vy
cmVudCA9IGN1cnJlbnQtPnRyYXZlcnNlTmV4dE5vZGUobWFwKSkgeworICAgIGZvciAoTm9kZSog
Y3VycmVudCA9IG1hcC0+Zmlyc3RDaGlsZCgpOyBjdXJyZW50OyBjdXJyZW50ID0gTm9kZVRyYXZl
cnNhbDo6bmV4dChjdXJyZW50LCBtYXApKSB7CiAgICAgICAgIAogICAgICAgICAvLyBhZGQgYW4g
PGFyZWE+IGVsZW1lbnQgZm9yIHRoaXMgY2hpbGQgaWYgaXQgaGFzIGEgbGluawogICAgICAgICBp
ZiAoY3VycmVudC0+aGFzVGFnTmFtZShhcmVhVGFnKSAmJiBjdXJyZW50LT5pc0xpbmsoKSkgewpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEb2N1bWVudEN1c3RvbS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEb2N1bWVudEN1c3RvbS5j
cHAJKHJldmlzaW9uIDEzNzE3NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRG9j
dW1lbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVk
ZSAiSlNUb3VjaC5oIgogI2luY2x1ZGUgIkpTVG91Y2hMaXN0LmgiCiAjaW5jbHVkZSAiTG9jYXRp
b24uaCIKKyNpbmNsdWRlICJOb2RlVHJhdmVyc2FsLmgiCiAjaW5jbHVkZSAiU2NyaXB0Q29udHJv
bGxlci5oIgogI2luY2x1ZGUgIlRvdWNoTGlzdC5oIgogCkBAIC0xMDcsNyArMTA4LDcgQEAgSlNW
YWx1ZSB0b0pTKEV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYQogICAgIC8vIGJhY2svZm9yd2Fy
ZCBjYWNoZS4KICAgICBpZiAoIWRvY3VtZW50LT5mcmFtZSgpKSB7CiAgICAgICAgIHNpemVfdCBu
b2RlQ291bnQgPSAwOwotICAgICAgICBmb3IgKE5vZGUqIG4gPSBkb2N1bWVudDsgbjsgbiA9IG4t
PnRyYXZlcnNlTmV4dE5vZGUoKSkKKyAgICAgICAgZm9yIChOb2RlKiBuID0gZG9jdW1lbnQ7IG47
IG4gPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG4pKQogICAgICAgICAgICAgbm9kZUNvdW50Kys7CiAg
ICAgICAgIAogICAgICAgICBleGVjLT5oZWFwKCktPnJlcG9ydEV4dHJhTWVtb3J5Q29zdChub2Rl
Q291bnQgKiBzaXplb2YoTm9kZSkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvdjgv
UmV0YWluZWRET01JbmZvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy92OC9SZXRhaW5lZERPTUluZm8uY3BwCShyZXZpc2lvbiAxMzcxNzUpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy92OC9SZXRhaW5lZERPTUluZm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
Miw2ICszMiw3IEBACiAjaW5jbHVkZSAiUmV0YWluZWRET01JbmZvLmgiCiAKICNpbmNsdWRlICJD
b250YWluZXJOb2RlLmgiCisjaW5jbHVkZSAiTm9kZVRyYXZlcnNhbC5oIgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKQEAgLTgwLDcgKzgxLDcgQEAgaW50cHRyX3QgUmV0YWluZWRET01JbmZvOjpH
ZXRFbGVtZW50Q291bgogICAgIGludHB0cl90IGNvdW50ID0gMTsKICAgICBOb2RlKiBjdXJyZW50
ID0gbV9yb290OwogICAgIHdoaWxlIChjdXJyZW50KSB7Ci0gICAgICAgIGN1cnJlbnQgPSBjdXJy
ZW50LT50cmF2ZXJzZU5leHROb2RlKG1fcm9vdCk7CisgICAgICAgIGN1cnJlbnQgPSBOb2RlVHJh
dmVyc2FsOjpuZXh0KGN1cnJlbnQsIG1fcm9vdCk7CiAgICAgICAgICsrY291bnQ7CiAgICAgfQog
ICAgIHJldHVybiBjb3VudDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNr
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIu
Y3BwCShyZXZpc2lvbiAxMzcxNzUpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVj
a2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsNiArNDQsNyBAQAogI2luY2x1ZGUgIkhUTUxT
dHlsZUVsZW1lbnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCIKICNp
bmNsdWRlICJOb2RlUmVuZGVyU3R5bGUuaCIKKyNpbmNsdWRlICJOb2RlVHJhdmVyc2FsLmgiCiAj
aW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlBhZ2VHcm91cC5oIgogI2luY2x1ZGUgIlJlbmRl
ck9iamVjdC5oIgpAQCAtMTIyNCw3ICsxMjI1LDcgQEAgdm9pZCBTZWxlY3RvckNoZWNrZXI6OmFs
bFZpc2l0ZWRTdGF0ZUNoYQogewogICAgIGlmIChtX2xpbmtzQ2hlY2tlZEZvclZpc2l0ZWRTdGF0
ZS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKLSAgICBmb3IgKE5vZGUqIG5vZGUgPSBtX2Rv
Y3VtZW50OyBub2RlOyBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgpKSB7CisgICAgZm9y
IChOb2RlKiBub2RlID0gbV9kb2N1bWVudDsgbm9kZTsgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5l
eHQobm9kZSkpIHsKICAgICAgICAgaWYgKG5vZGUtPmlzTGluaygpKQogICAgICAgICAgICAgbm9k
ZS0+c2V0TmVlZHNTdHlsZVJlY2FsYygpOwogICAgIH0KQEAgLTEyMzQsNyArMTIzNSw3IEBAIHZv
aWQgU2VsZWN0b3JDaGVja2VyOjp2aXNpdGVkU3RhdGVDaGFuZ2UKIHsKICAgICBpZiAoIW1fbGlu
a3NDaGVja2VkRm9yVmlzaXRlZFN0YXRlLmNvbnRhaW5zKHZpc2l0ZWRIYXNoKSkKICAgICAgICAg
cmV0dXJuOwotICAgIGZvciAoTm9kZSogbm9kZSA9IG1fZG9jdW1lbnQ7IG5vZGU7IG5vZGUgPSBu
b2RlLT50cmF2ZXJzZU5leHROb2RlKCkpIHsKKyAgICBmb3IgKE5vZGUqIG5vZGUgPSBtX2RvY3Vt
ZW50OyBub2RlOyBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dChub2RlKSkgewogICAgICAgICBM
aW5rSGFzaCBoYXNoID0gMDsKICAgICAgICAgaWYgKG5vZGUtPmhhc1RhZ05hbWUoYVRhZykpCiAg
ICAgICAgICAgICBoYXNoID0gc3RhdGljX2Nhc3Q8SFRNTEFuY2hvckVsZW1lbnQqPihub2RlKS0+
dmlzaXRlZExpbmtIYXNoKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVJbnZhbGlk
YXRpb25BbmFseXNpcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL1N0eWxl
SW52YWxpZGF0aW9uQW5hbHlzaXMuY3BwCShyZXZpc2lvbiAxMzcxNzUpCisrKyBTb3VyY2UvV2Vi
Q29yZS9jc3MvU3R5bGVJbnZhbGlkYXRpb25BbmFseXNpcy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgIkNTU1NlbGVjdG9yTGlzdC5oIgogI2luY2x1ZGUg
IkRvY3VtZW50LmgiCisjaW5jbHVkZSAiTm9kZVRyYXZlcnNhbC5oIgogI2luY2x1ZGUgIlN0eWxl
UnVsZUltcG9ydC5oIgogI2luY2x1ZGUgIlN0eWxlU2hlZXRDb250ZW50cy5oIgogI2luY2x1ZGUg
IlN0eWxlZEVsZW1lbnQuaCIKQEAgLTExOSwxNyArMTIwLDE3IEBAIHZvaWQgU3R5bGVJbnZhbGlk
YXRpb25BbmFseXNpczo6aW52YWxpZGEKICAgICBOb2RlKiBub2RlID0gZG9jdW1lbnQtPmZpcnN0
Q2hpbGQoKTsKICAgICB3aGlsZSAobm9kZSkgewogICAgICAgICBpZiAoIW5vZGUtPmlzU3R5bGVk
RWxlbWVudCgpKSB7Ci0gICAgICAgICAgICBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgp
OworICAgICAgICAgICAgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9kZSk7CiAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgfQogICAgICAgICBTdHlsZWRFbGVtZW50KiBlbGVtZW50
ID0gc3RhdGljX2Nhc3Q8U3R5bGVkRWxlbWVudCo+KG5vZGUpOwogICAgICAgICBpZiAoZWxlbWVu
dE1hdGNoZXNTZWxlY3RvclNjb3BlcyhlbGVtZW50LCBtX2lkU2NvcGVzLCBtX2NsYXNzU2NvcGVz
KSkgewogICAgICAgICAgICAgZWxlbWVudC0+c2V0TmVlZHNTdHlsZVJlY2FsYygpOwogICAgICAg
ICAgICAgLy8gVGhlIHdob2xlIHN1YnRyZWUgaXMgbm93IGludmFsaWRhdGVkLCB3ZSBjYW4gc2tp
cCB0byB0aGUgbmV4dCBzaWJsaW5nLgotICAgICAgICAgICAgbm9kZSA9IG5vZGUtPnRyYXZlcnNl
TmV4dFNpYmxpbmcoKTsKKyAgICAgICAgICAgIG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0U2li
bGluZyhub2RlKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9Ci0gICAgICAgIG5v
ZGUgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKCk7CisgICAgICAgIG5vZGUgPSBOb2RlVHJhdmVy
c2FsOjpuZXh0KG5vZGUpOwogICAgIH0KIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0Nv
bnRhaW5lck5vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Db250YWlu
ZXJOb2RlLmNwcAkocmV2aXNpb24gMTM3MTc1KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0NvbnRh
aW5lck5vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSAi
TWVtb3J5Q2FjaGUuaCIKICNpbmNsdWRlICJNdXRhdGlvbkV2ZW50LmgiCiAjaW5jbHVkZSAiTm9k
ZVJlbmRlclN0eWxlLmgiCisjaW5jbHVkZSAiTm9kZVRyYXZlcnNhbC5oIgogI2luY2x1ZGUgIlJl
c291cmNlTG9hZFNjaGVkdWxlci5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQbGF0
Zm9ybVN0cmF0ZWdpZXMuaCIKQEAgLTEwNDcsNyArMTA0OCw3IEBAIHN0YXRpYyB2b2lkIGRpc3Bh
dGNoQ2hpbGRJbnNlcnRpb25FdmVudHMKIAogICAgIC8vIGRpc3BhdGNoIHRoZSBET01Ob2RlSW5z
ZXJ0ZWRJbnRvRG9jdW1lbnQgZXZlbnQgdG8gYWxsIGRlc2NlbmRhbnRzCiAgICAgaWYgKGMtPmlu
RG9jdW1lbnQoKSAmJiBkb2N1bWVudC0+aGFzTGlzdGVuZXJUeXBlKERvY3VtZW50OjpET01OT0RF
SU5TRVJURURJTlRPRE9DVU1FTlRfTElTVEVORVIpKSB7Ci0gICAgICAgIGZvciAoOyBjOyBjID0g
Yy0+dHJhdmVyc2VOZXh0Tm9kZShjaGlsZCkpCisgICAgICAgIGZvciAoOyBjOyBjID0gTm9kZVRy
YXZlcnNhbDo6bmV4dChjLmdldCgpLCBjaGlsZCkpCiAgICAgICAgICAgICBjLT5kaXNwYXRjaFNj
b3BlZEV2ZW50KE11dGF0aW9uRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuRE9NTm9kZUluc2Vy
dGVkSW50b0RvY3VtZW50RXZlbnQsIGZhbHNlKSk7CiAgICAgfQogfQpAQCAtMTA3NSw3ICsxMDc2
LDcgQEAgc3RhdGljIHZvaWQgZGlzcGF0Y2hDaGlsZFJlbW92YWxFdmVudHMoTgogCiAgICAgLy8g
ZGlzcGF0Y2ggdGhlIERPTU5vZGVSZW1vdmVkRnJvbURvY3VtZW50IGV2ZW50IHRvIGFsbCBkZXNj
ZW5kYW50cwogICAgIGlmIChjLT5pbkRvY3VtZW50KCkgJiYgZG9jdW1lbnQtPmhhc0xpc3RlbmVy
VHlwZShEb2N1bWVudDo6RE9NTk9ERVJFTU9WRURGUk9NRE9DVU1FTlRfTElTVEVORVIpKSB7Ci0g
ICAgICAgIGZvciAoOyBjOyBjID0gYy0+dHJhdmVyc2VOZXh0Tm9kZShjaGlsZCkpCisgICAgICAg
IGZvciAoOyBjOyBjID0gTm9kZVRyYXZlcnNhbDo6bmV4dChjLmdldCgpLCBjaGlsZCkpCiAgICAg
ICAgICAgICBjLT5kaXNwYXRjaFNjb3BlZEV2ZW50KE11dGF0aW9uRXZlbnQ6OmNyZWF0ZShldmVu
dE5hbWVzKCkuRE9NTm9kZVJlbW92ZWRGcm9tRG9jdW1lbnRFdmVudCwgZmFsc2UpKTsKICAgICB9
CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmgJKHJldmlzaW9uIDEzNzE3NSkK
KysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEzNCwxMCArMTM0LDYgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBib29sIGNoaWxkU2hvdWxk
Q3JlYXRlUmVuZGVyZXIoY29uc3QgTm9kZVJlbmRlcmluZ0NvbnRleHQmKSBjb25zdCB7IHJldHVy
biB0cnVlOyB9CiAKLSAgICAvLyBNb3JlIGVmZmljaWVudCB2ZXJzaW9ucyBvZiB0aGVzZSB0d28g
ZnVuY3Rpb25zIGZvciB0aGUgY2FzZSB3aGVyZSB3ZSBhcmUgc3RhcnRpbmcgd2l0aCBhIENvbnRh
aW5lck5vZGUuCi0gICAgTm9kZSogdHJhdmVyc2VOZXh0Tm9kZSgpIGNvbnN0OwotICAgIE5vZGUq
IHRyYXZlcnNlTmV4dE5vZGUoY29uc3QgTm9kZSogc3RheVdpdGhpbikgY29uc3Q7Ci0KICAgICB2
aXJ0dWFsIHZvaWQgcmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyogbWVtb3J5T2Jq
ZWN0SW5mbykgY29uc3QKICAgICB7CiAgICAgICAgIE1lbW9yeUNsYXNzSW5mbyBpbmZvKG1lbW9y
eU9iamVjdEluZm8sIHRoaXMsIFdlYkNvcmVNZW1vcnlUeXBlczo6RE9NKTsKQEAgLTI2OSw1NCAr
MjY1LDYgQEAgaW5saW5lIE5vZGUqIE5vZGU6OmhpZ2hlc3RBbmNlc3RvcigpIGNvbgogICAgIHJl
dHVybiBoaWdoZXN0OwogfQogCi1pbmxpbmUgTm9kZSogTm9kZTo6dHJhdmVyc2VOZXh0U2libGlu
ZygpIGNvbnN0Ci17Ci0gICAgaWYgKG5leHRTaWJsaW5nKCkpCi0gICAgICAgIHJldHVybiBuZXh0
U2libGluZygpOwotICAgIHJldHVybiB0cmF2ZXJzZU5leHRBbmNlc3RvclNpYmxpbmcoKTsKLX0K
LQotaW5saW5lIE5vZGUqIE5vZGU6OnRyYXZlcnNlTmV4dE5vZGUoKSBjb25zdAotewotICAgIGlm
IChmaXJzdENoaWxkKCkpCi0gICAgICAgIHJldHVybiBmaXJzdENoaWxkKCk7Ci0gICAgcmV0dXJu
IHRyYXZlcnNlTmV4dFNpYmxpbmcoKTsKLX0KLQotaW5saW5lIE5vZGUqIENvbnRhaW5lck5vZGU6
OnRyYXZlcnNlTmV4dE5vZGUoKSBjb25zdAotewotICAgIC8vIE1vcmUgZWZmaWNpZW50IHRoYW4g
dGhlIE5vZGU6OnRyYXZlcnNlTmV4dE5vZGUgYWJvdmUsIGJlY2F1c2UKLSAgICAvLyB0aGlzIGRv
ZXMgbm90IG5lZWQgdG8gZG8gdGhlIGlzQ29udGFpbmVyTm9kZSBjaGVjayBpbnNpZGUgZmlyc3RD
aGlsZC4KLSAgICBpZiAoZmlyc3RDaGlsZCgpKQotICAgICAgICByZXR1cm4gZmlyc3RDaGlsZCgp
OwotICAgIHJldHVybiB0cmF2ZXJzZU5leHRTaWJsaW5nKCk7Ci19Ci0KLWlubGluZSBOb2RlKiBO
b2RlOjp0cmF2ZXJzZU5leHRTaWJsaW5nKGNvbnN0IE5vZGUqIHN0YXlXaXRoaW4pIGNvbnN0Ci17
Ci0gICAgaWYgKHRoaXMgPT0gc3RheVdpdGhpbikKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYg
KG5leHRTaWJsaW5nKCkpCi0gICAgICAgIHJldHVybiBuZXh0U2libGluZygpOwotICAgIHJldHVy
biB0cmF2ZXJzZU5leHRBbmNlc3RvclNpYmxpbmcoc3RheVdpdGhpbik7Ci19Ci0KLWlubGluZSBO
b2RlKiBOb2RlOjp0cmF2ZXJzZU5leHROb2RlKGNvbnN0IE5vZGUqIHN0YXlXaXRoaW4pIGNvbnN0
Ci17Ci0gICAgaWYgKGZpcnN0Q2hpbGQoKSkKLSAgICAgICAgcmV0dXJuIGZpcnN0Q2hpbGQoKTsK
LSAgICByZXR1cm4gdHJhdmVyc2VOZXh0U2libGluZyhzdGF5V2l0aGluKTsKLX0KLQotaW5saW5l
IE5vZGUqIENvbnRhaW5lck5vZGU6OnRyYXZlcnNlTmV4dE5vZGUoY29uc3QgTm9kZSogc3RheVdp
dGhpbikgY29uc3QKLXsKLSAgICAvLyBNb3JlIGVmZmljaWVudCB0aGFuIHRoZSBOb2RlOjp0cmF2
ZXJzZU5leHROb2RlIGFib3ZlLCBiZWNhdXNlCi0gICAgLy8gdGhpcyBkb2VzIG5vdCBuZWVkIHRv
IGRvIHRoZSBpc0NvbnRhaW5lck5vZGUgY2hlY2sgaW5zaWRlIGZpcnN0Q2hpbGQuCi0gICAgaWYg
KGZpcnN0Q2hpbGQoKSkKLSAgICAgICAgcmV0dXJuIGZpcnN0Q2hpbGQoKTsKLSAgICByZXR1cm4g
dHJhdmVyc2VOZXh0U2libGluZyhzdGF5V2l0aGluKTsKLX0KLQogLy8gVGhpcyBjb25zdGFudCBj
b250cm9scyBob3cgbXVjaCBidWZmZXIgaXMgaW5pdGlhbGx5IGFsbG9jYXRlZAogLy8gZm9yIGEg
Tm9kZSBWZWN0b3IgdGhhdCBpcyB1c2VkIHRvIHN0b3JlIGNoaWxkIE5vZGVzIG9mIGEgZ2l2ZW4g
Tm9kZS4KIC8vIEZJWE1FOiBPcHRpbWl6ZSB0aGUgdmFsdWUuCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9kb20vQ29udGFpbmVyTm9kZUFsZ29yaXRobXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9kb20vQ29udGFpbmVyTm9kZUFsZ29yaXRobXMuaAkocmV2aXNpb24gMTM3MTc1KQorKysg
U291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGVBbGdvcml0aG1zLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkhUTUxG
cmFtZU93bmVyRWxlbWVudC5oIgogI2luY2x1ZGUgIkluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5o
IgorI2luY2x1ZGUgIk5vZGVUcmF2ZXJzYWwuaCIKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zMTUsOCArMzE2LDcgQEAgcHJpdmF0ZToKIAog
aW5saW5lIHZvaWQgQ2hpbGRGcmFtZURpc2Nvbm5lY3Rvcjo6Y29sbGVjdERlc2NlbmRhbnQoTm9k
ZSogcm9vdCwgU2hvdWxkSW5jbHVkZVJvb3Qgc2hvdWxkSW5jbHVkZVJvb3QpCiB7Ci0gICAgZm9y
IChOb2RlKiBub2RlID0gc2hvdWxkSW5jbHVkZVJvb3QgPT0gSW5jbHVkZVJvb3QgPyByb290IDog
cm9vdC0+Zmlyc3RDaGlsZCgpOyBub2RlOwotICAgICAgICAgICAgbm9kZSA9IG5vZGUtPnRyYXZl
cnNlTmV4dE5vZGUocm9vdCkpIHsKKyAgICBmb3IgKE5vZGUqIG5vZGUgPSBzaG91bGRJbmNsdWRl
Um9vdCA9PSBJbmNsdWRlUm9vdCA/IHJvb3QgOiByb290LT5maXJzdENoaWxkKCk7IG5vZGU7IG5v
ZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUsIHJvb3QpKSB7CiAgICAgICAgIGlmICghbm9k
ZS0+aXNFbGVtZW50Tm9kZSgpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIEVsZW1l
bnQqIGVsZW1lbnQgPSB0b0VsZW1lbnQobm9kZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20v
RG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5j
cHAJKHJldmlzaW9uIDEzNzE3NSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTExOCw2ICsxMTgsNyBAQAogI2luY2x1ZGUgIk5vZGVGaWx0ZXIu
aCIKICNpbmNsdWRlICJOb2RlSXRlcmF0b3IuaCIKICNpbmNsdWRlICJOb2RlUmFyZURhdGEuaCIK
KyNpbmNsdWRlICJOb2RlVHJhdmVyc2FsLmgiCiAjaW5jbHVkZSAiTm9kZVdpdGhJbmRleC5oIgog
I2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQYWdlR3JvdXAuaCIKQEAgLTc0Nyw3ICs3NDgs
NyBAQCB2b2lkIERvY3VtZW50OjpidWlsZEFjY2Vzc0tleU1hcChUcmVlU2NvCiB7CiAgICAgQVNT
RVJUKHNjb3BlKTsKICAgICBOb2RlKiByb290Tm9kZSA9IHNjb3BlLT5yb290Tm9kZSgpOwotICAg
IGZvciAoTm9kZSogbm9kZSA9IHJvb3ROb2RlOyBub2RlOyBub2RlID0gbm9kZS0+dHJhdmVyc2VO
ZXh0Tm9kZShyb290Tm9kZSkpIHsKKyAgICBmb3IgKE5vZGUqIG5vZGUgPSByb290Tm9kZTsgbm9k
ZTsgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9kZSwgcm9vdE5vZGUpKSB7CiAgICAgICAg
IGlmICghbm9kZS0+aXNFbGVtZW50Tm9kZSgpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSk7CkBAIC0y
MTU1LDcgKzIxNTYsNyBAQCB2b2lkIERvY3VtZW50OjpyZW1vdmVBbGxFdmVudExpc3RlbmVycygp
CiAKICAgICBpZiAoRE9NV2luZG93KiBkb21XaW5kb3cgPSB0aGlzLT5kb21XaW5kb3coKSkKICAg
ICAgICAgZG9tV2luZG93LT5yZW1vdmVBbGxFdmVudExpc3RlbmVycygpOwotICAgIGZvciAoTm9k
ZSogbm9kZSA9IGZpcnN0Q2hpbGQoKTsgbm9kZTsgbm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5v
ZGUoKSkKKyAgICBmb3IgKE5vZGUqIG5vZGUgPSBmaXJzdENoaWxkKCk7IG5vZGU7IG5vZGUgPSBO
b2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUpKQogICAgICAgICBub2RlLT5yZW1vdmVBbGxFdmVudExp
c3RlbmVycygpOwogfQogCkBAIC0yNjY0LDcgKzI2NjUsNyBAQCB2b2lkIERvY3VtZW50Ojp1cGRh
dGVCYXNlVVJMKCkKICAgICBpZiAoIWVxdWFsSWdub3JpbmdGcmFnbWVudElkZW50aWZpZXIob2xk
QmFzZVVSTCwgbV9iYXNlVVJMKSkgewogICAgICAgICAvLyBCYXNlIFVSTCBjaGFuZ2UgY2hhbmdl
cyBhbnkgcmVsYXRpdmUgdmlzaXRlZCBsaW5rcy4KICAgICAgICAgLy8gRklYTUU6IFRoZXJlIGFy
ZSBvdGhlciBVUkxzIGluIHRoZSB0cmVlIHRoYXQgd291bGQgbmVlZCB0byBiZSByZS1ldmFsdWF0
ZWQgb24gZHluYW1pYyBiYXNlIFVSTCBjaGFuZ2UuIFN0eWxlIHNob3VsZCBiZSBpbnZhbGlkYXRl
ZCB0b28uCi0gICAgICAgIGZvciAoTm9kZSogbm9kZSA9IGZpcnN0Q2hpbGQoKTsgbm9kZTsgbm9k
ZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoKSkgeworICAgICAgICBmb3IgKE5vZGUqIG5vZGUg
PSBmaXJzdENoaWxkKCk7IG5vZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUpKSB7
CiAgICAgICAgICAgICBpZiAobm9kZS0+aGFzVGFnTmFtZShhVGFnKSkKICAgICAgICAgICAgICAg
ICBzdGF0aWNfY2FzdDxIVE1MQW5jaG9yRWxlbWVudCo+KG5vZGUpLT5pbnZhbGlkYXRlQ2FjaGVk
VmlzaXRlZExpbmtIYXNoKCk7CiAgICAgICAgIH0KQEAgLTI2ODIsNyArMjY4Myw3IEBAIHZvaWQg
RG9jdW1lbnQ6OnByb2Nlc3NCYXNlRWxlbWVudCgpCiAgICAgLy8gRmluZCB0aGUgZmlyc3QgaHJl
ZiBhdHRyaWJ1dGUgaW4gYSBiYXNlIGVsZW1lbnQgYW5kIHRoZSBmaXJzdCB0YXJnZXQgYXR0cmli
dXRlIGluIGEgYmFzZSBlbGVtZW50LgogICAgIGNvbnN0IEF0b21pY1N0cmluZyogaHJlZiA9IDA7
CiAgICAgY29uc3QgQXRvbWljU3RyaW5nKiB0YXJnZXQgPSAwOwotICAgIGZvciAoTm9kZSogbm9k
ZSA9IGRvY3VtZW50KCktPmZpcnN0Q2hpbGQoKTsgbm9kZSAmJiAoIWhyZWYgfHwgIXRhcmdldCk7
IG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKCkpIHsKKyAgICBmb3IgKE5vZGUqIG5vZGUg
PSBkb2N1bWVudCgpLT5maXJzdENoaWxkKCk7IG5vZGUgJiYgKCFocmVmIHx8ICF0YXJnZXQpOyBu
b2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dChub2RlKSkgewogICAgICAgICBpZiAobm9kZS0+aGFz
VGFnTmFtZShiYXNlVGFnKSkgewogICAgICAgICAgICAgaWYgKCFocmVmKSB7CiAgICAgICAgICAg
ICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihu
b2RlKS0+ZmFzdEdldEF0dHJpYnV0ZShocmVmQXR0cik7CkBAIC0yODI2LDcgKzI4MjcsNyBAQCBp
bnQgRG9jdW1lbnQ6Om5vZGVBYnNJbmRleChOb2RlICpub2RlKQogICAgIEFTU0VSVChub2RlLT5k
b2N1bWVudCgpID09IHRoaXMpOwogCiAgICAgaW50IGFic0luZGV4ID0gMDsKLSAgICBmb3IgKE5v
ZGUqIG4gPSBub2RlOyBuICYmIG4gIT0gdGhpczsgbiA9IG4tPnRyYXZlcnNlUHJldmlvdXNOb2Rl
KCkpCisgICAgZm9yIChOb2RlKiBuID0gbm9kZTsgbiAmJiBuICE9IHRoaXM7IG4gPSBOb2RlVHJh
dmVyc2FsOjpwcmV2aW91cyhuKSkKICAgICAgICAgYWJzSW5kZXgrKzsKICAgICByZXR1cm4gYWJz
SW5kZXg7CiB9CkBAIC0yODM1LDcgKzI4MzYsNyBAQCBOb2RlKiBEb2N1bWVudDo6bm9kZVdpdGhB
YnNJbmRleChpbnQgYWJzCiB7CiAgICAgTm9kZSogbiA9IHRoaXM7CiAgICAgZm9yIChpbnQgaSA9
IDA7IG4gJiYgKGkgPCBhYnNJbmRleCk7IGkrKykKLSAgICAgICAgbiA9IG4tPnRyYXZlcnNlTmV4
dE5vZGUoKTsKKyAgICAgICAgbiA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobik7CiAgICAgcmV0dXJu
IG47CiB9CiAKQEAgLTM0NDEsNyArMzQ0Miw3IEBAIHZvaWQgRG9jdW1lbnQ6OmdldEZvY3VzYWJs
ZU5vZGVzKFZlY3RvcjwKIHsKICAgICB1cGRhdGVMYXlvdXQoKTsKIAotICAgIGZvciAoTm9kZSog
bm9kZSA9IGZpcnN0Q2hpbGQoKTsgbm9kZTsgbm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUo
KSkgeworICAgIGZvciAoTm9kZSogbm9kZSA9IGZpcnN0Q2hpbGQoKTsgbm9kZTsgbm9kZSA9IE5v
ZGVUcmF2ZXJzYWw6Om5leHQobm9kZSkpIHsKICAgICAgICAgaWYgKG5vZGUtPmlzRm9jdXNhYmxl
KCkpCiAgICAgICAgICAgICBub2Rlcy5hcHBlbmQobm9kZSk7CiAgICAgfQpJbmRleDogU291cmNl
L1dlYkNvcmUvZG9tL0RvY3VtZW50TWFya2VyQ29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50TWFya2VyQ29udHJvbGxlci5jcHAJKHJldmlzaW9u
IDEzNzE3NSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiRG9jdW1lbnRN
YXJrZXJDb250cm9sbGVyLmgiCiAKICNpbmNsdWRlICJOb2RlLmgiCisjaW5jbHVkZSAiTm9kZVRy
YXZlcnNhbC5oIgogI2luY2x1ZGUgIlJhbmdlLmgiCiAjaW5jbHVkZSAiUmVuZGVyT2JqZWN0Lmgi
CiAjaW5jbHVkZSAiUmVuZGVyZWREb2N1bWVudE1hcmtlci5oIgpAQCAtMzcwLDcgKzM3MSw3IEBA
IFZlY3RvcjxEb2N1bWVudE1hcmtlcio+IERvY3VtZW50TWFya2VyQ28KICAgICBBU1NFUlQoZW5k
Q29udGFpbmVyKTsKIAogICAgIE5vZGUqIHBhc3RMYXN0Tm9kZSA9IHJhbmdlLT5wYXN0TGFzdE5v
ZGUoKTsKLSAgICBmb3IgKE5vZGUqIG5vZGUgPSByYW5nZS0+Zmlyc3ROb2RlKCk7IG5vZGUgIT0g
cGFzdExhc3ROb2RlOyBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgpKSB7CisgICAgZm9y
IChOb2RlKiBub2RlID0gcmFuZ2UtPmZpcnN0Tm9kZSgpOyBub2RlICE9IHBhc3RMYXN0Tm9kZTsg
bm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9kZSkpIHsKICAgICAgICAgVmVjdG9yPERvY3Vt
ZW50TWFya2VyKj4gbWFya2VycyA9IG1hcmtlcnNGb3Iobm9kZSk7CiAgICAgICAgIFZlY3RvcjxE
b2N1bWVudE1hcmtlcio+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtYXJrZXJzLmVuZCgpOwogICAg
ICAgICBmb3IgKFZlY3RvcjxEb2N1bWVudE1hcmtlcio+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1h
cmtlcnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CkBAIC01NzEsNyArNTcyLDcgQEAgdm9p
ZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnNldE1hcmtlcgogICAgIE5vZGUqIGVuZENvbnRh
aW5lciA9IHJhbmdlLT5lbmRDb250YWluZXIoZWMpOwogCiAgICAgTm9kZSogcGFzdExhc3ROb2Rl
ID0gcmFuZ2UtPnBhc3RMYXN0Tm9kZSgpOwotICAgIGZvciAoTm9kZSogbm9kZSA9IHJhbmdlLT5m
aXJzdE5vZGUoKTsgbm9kZSAhPSBwYXN0TGFzdE5vZGU7IG5vZGUgPSBub2RlLT50cmF2ZXJzZU5l
eHROb2RlKCkpIHsKKyAgICBmb3IgKE5vZGUqIG5vZGUgPSByYW5nZS0+Zmlyc3ROb2RlKCk7IG5v
ZGUgIT0gcGFzdExhc3ROb2RlOyBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dChub2RlKSkgewog
ICAgICAgICBpbnQgc3RhcnRPZmZzZXQgPSBub2RlID09IHN0YXJ0Q29udGFpbmVyID8gcmFuZ2Ut
PnN0YXJ0T2Zmc2V0KGVjKSA6IDA7CiAgICAgICAgIGludCBlbmRPZmZzZXQgPSBub2RlID09IGVu
ZENvbnRhaW5lciA/IHJhbmdlLT5lbmRPZmZzZXQoZWMpIDogSU5UX01BWDsKICAgICAgICAgc2V0
TWFya2Vyc0FjdGl2ZShub2RlLCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0LCBhY3RpdmUpOwpAQCAt
NjE3LDcgKzYxOCw3IEBAIGJvb2wgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpoYXNNYXJrZXIK
ICAgICBBU1NFUlQoZW5kQ29udGFpbmVyKTsKIAogICAgIE5vZGUqIHBhc3RMYXN0Tm9kZSA9IHJh
bmdlLT5wYXN0TGFzdE5vZGUoKTsKLSAgICBmb3IgKE5vZGUqIG5vZGUgPSByYW5nZS0+Zmlyc3RO
b2RlKCk7IG5vZGUgIT0gcGFzdExhc3ROb2RlOyBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9k
ZSgpKSB7CisgICAgZm9yIChOb2RlKiBub2RlID0gcmFuZ2UtPmZpcnN0Tm9kZSgpOyBub2RlICE9
IHBhc3RMYXN0Tm9kZTsgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9kZSkpIHsKICAgICAg
ICAgVmVjdG9yPERvY3VtZW50TWFya2VyKj4gbWFya2VycyA9IG1hcmtlcnNGb3Iobm9kZSk7CiAg
ICAgICAgIFZlY3RvcjxEb2N1bWVudE1hcmtlcio+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtYXJr
ZXJzLmVuZCgpOwogICAgICAgICBmb3IgKFZlY3RvcjxEb2N1bWVudE1hcmtlcio+Ojpjb25zdF9p
dGVyYXRvciBpdCA9IG1hcmtlcnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CkBAIC02NDQs
NyArNjQ1LDcgQEAgdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmNsZWFyRGVzYwogICAg
IE5vZGUqIGVuZENvbnRhaW5lciA9IHJhbmdlLT5lbmRDb250YWluZXIoKTsKIAogICAgIE5vZGUq
IHBhc3RMYXN0Tm9kZSA9IHJhbmdlLT5wYXN0TGFzdE5vZGUoKTsKLSAgICBmb3IgKE5vZGUqIG5v
ZGUgPSByYW5nZS0+Zmlyc3ROb2RlKCk7IG5vZGUgIT0gcGFzdExhc3ROb2RlOyBub2RlID0gbm9k
ZS0+dHJhdmVyc2VOZXh0Tm9kZSgpKSB7CisgICAgZm9yIChOb2RlKiBub2RlID0gcmFuZ2UtPmZp
cnN0Tm9kZSgpOyBub2RlICE9IHBhc3RMYXN0Tm9kZTsgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5l
eHQobm9kZSkpIHsKICAgICAgICAgdW5zaWduZWQgc3RhcnRPZmZzZXQgPSBub2RlID09IHN0YXJ0
Q29udGFpbmVyID8gcmFuZ2UtPnN0YXJ0T2Zmc2V0KCkgOiAwOwogICAgICAgICB1bnNpZ25lZCBl
bmRPZmZzZXQgPSBub2RlID09IGVuZENvbnRhaW5lciA/IHN0YXRpY19jYXN0PHVuc2lnbmVkPihy
YW5nZS0+ZW5kT2Zmc2V0KCkpIDogc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgp
OwogICAgICAgICBNYXJrZXJMaXN0KiBsaXN0ID0gbV9tYXJrZXJzLmdldChub2RlKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE9yZGVyZWRNYXAuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE9yZGVyZWRNYXAuY3BwCShyZXZpc2lvbiAxMzcx
NzUpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRPcmRlcmVkTWFwLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIkVsZW1lbnQuaCIKICNpbmNsdWRl
ICJIVE1MTWFwRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIk5v
ZGVUcmF2ZXJzYWwuaCIKICNpbmNsdWRlICJUcmVlU2NvcGUuaCIKICNpbmNsdWRlICJXZWJDb3Jl
TWVtb3J5SW5zdHJ1bWVudGF0aW9uLmgiCiAjaW5jbHVkZSA8d3RmL01lbW9yeUluc3RydW1lbnRh
dGlvbkhhc2hDb3VudGVkU2V0Lmg+CkBAIC0xMjYsNyArMTI3LDcgQEAgaW5saW5lIEVsZW1lbnQq
IERvY3VtZW50T3JkZXJlZE1hcDo6Z2V0KAogCiAgICAgaWYgKG1fZHVwbGljYXRlQ291bnRzLmNv
bnRhaW5zKGtleSkpIHsKICAgICAgICAgLy8gV2Uga25vdyB0aGVyZSdzIGF0IGxlYXN0IG9uZSBu
b2RlIHRoYXQgbWF0Y2hlczsgaXRlcmF0ZSB0byBmaW5kIHRoZSBmaXJzdCBvbmUuCi0gICAgICAg
IGZvciAoTm9kZSogbm9kZSA9IHNjb3BlLT5yb290Tm9kZSgpLT5maXJzdENoaWxkKCk7IG5vZGU7
IG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKCkpIHsKKyAgICAgICAgZm9yIChOb2RlKiBu
b2RlID0gc2NvcGUtPnJvb3ROb2RlKCktPmZpcnN0Q2hpbGQoKTsgbm9kZTsgbm9kZSA9IE5vZGVU
cmF2ZXJzYWw6Om5leHQobm9kZSkpIHsKICAgICAgICAgICAgIGlmICghbm9kZS0+aXNFbGVtZW50
Tm9kZSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgZWxlbWVudCA9
IHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9F
bGVtZW50U2hhZG93LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVu
dFNoYWRvdy5jcHAJKHJldmlzaW9uIDEzNzE3NSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVt
ZW50U2hhZG93LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUg
IkhUTUxDb250ZW50RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxTaGFkb3dFbGVtZW50LmgiCiAj
aW5jbHVkZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgiCisjaW5jbHVkZSAiTm9kZVRyYXZl
cnNhbC5oIgogI2luY2x1ZGUgIlNoYWRvd1Jvb3QuaCIKICNpbmNsdWRlICJTdHlsZVJlc29sdmVy
LmgiCiAKQEAgLTIyMCw3ICsyMjEsNyBAQCB2b2lkIEVsZW1lbnRTaGFkb3c6OmVuc3VyZVNlbGVj
dEZlYXR1cmVTCiB2b2lkIEVsZW1lbnRTaGFkb3c6OmNvbGxlY3RTZWxlY3RGZWF0dXJlU2V0RnJv
bShTaGFkb3dSb290KiByb290KQogewogICAgIGlmIChyb290LT5oYXNFbGVtZW50U2hhZG93KCkp
IHsKLSAgICAgICAgZm9yIChOb2RlKiBub2RlID0gcm9vdC0+Zmlyc3RDaGlsZCgpOyBub2RlOyBu
b2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgpKSB7CisgICAgICAgIGZvciAoTm9kZSogbm9k
ZSA9IHJvb3QtPmZpcnN0Q2hpbGQoKTsgbm9kZTsgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQo
bm9kZSkpIHsKICAgICAgICAgICAgIGlmIChFbGVtZW50U2hhZG93KiBlbGVtZW50U2hhZG93ID0g
bm9kZS0+aXNFbGVtZW50Tm9kZSgpID8gdG9FbGVtZW50KG5vZGUpLT5zaGFkb3coKSA6IDApIHsK
ICAgICAgICAgICAgICAgICBlbGVtZW50U2hhZG93LT5lbnN1cmVTZWxlY3RGZWF0dXJlU2V0Q29s
bGVjdGVkKCk7CiAgICAgICAgICAgICAgICAgbV9zZWxlY3RGZWF0dXJlcy5hZGQoZWxlbWVudFNo
YWRvdy0+bV9zZWxlY3RGZWF0dXJlcyk7CkBAIC0yMjksNyArMjMwLDcgQEAgdm9pZCBFbGVtZW50
U2hhZG93Ojpjb2xsZWN0U2VsZWN0RmVhdHVyZQogICAgIH0KIAogICAgIGlmIChyb290LT5oYXND
b250ZW50RWxlbWVudCgpKSB7Ci0gICAgICAgIGZvciAoTm9kZSogbm9kZSA9IHJvb3QtPmZpcnN0
Q2hpbGQoKTsgbm9kZTsgbm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoKSkgeworICAgICAg
ICBmb3IgKE5vZGUqIG5vZGUgPSByb290LT5maXJzdENoaWxkKCk7IG5vZGU7IG5vZGUgPSBOb2Rl
VHJhdmVyc2FsOjpuZXh0KG5vZGUpKSB7CiAgICAgICAgICAgICBpZiAoaXNIVE1MQ29udGVudEVs
ZW1lbnQobm9kZSkpIHsKICAgICAgICAgICAgICAgICBjb25zdCBDU1NTZWxlY3Rvckxpc3QmIGxp
c3QgPSB0b0hUTUxDb250ZW50RWxlbWVudChub2RlKS0+c2VsZWN0b3JMaXN0KCk7CiAgICAgICAg
ICAgICAgICAgZm9yIChDU1NTZWxlY3Rvciogc2VsZWN0b3IgPSBsaXN0LmZpcnN0KCk7IHNlbGVj
dG9yOyBzZWxlY3RvciA9IGxpc3QubmV4dChzZWxlY3RvcikpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9kb20vTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3Bw
CShyZXZpc2lvbiAxMzcxNzUpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTc1LDYgKzc1LDcgQEAKICNpbmNsdWRlICJOYW1lZE5vZGVNYXAuaCIKICNp
bmNsdWRlICJOb2RlUmFyZURhdGEuaCIKICNpbmNsdWRlICJOb2RlUmVuZGVyaW5nQ29udGV4dC5o
IgorI2luY2x1ZGUgIk5vZGVUcmF2ZXJzYWwuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVk
ZSAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1XaGVlbEV2ZW50Lmgi
CkBAIC02MzgsNyArNjM5LDcgQEAgdm9pZCBOb2RlOjpub3JtYWxpemUoKQogICAgICAgICAgICAg
YnJlYWs7CiAKICAgICAgICAgaWYgKHR5cGUgIT0gVEVYVF9OT0RFKSB7Ci0gICAgICAgICAgICBu
b2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZVBvc3RPcmRlcigpOworICAgICAgICAgICAgbm9k
ZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHRQb3N0T3JkZXIobm9kZS5nZXQoKSk7CiAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgfQogCkBAIC02NDcsNyArNjQ4LDcgQEAgdm9pZCBOb2RlOjpu
b3JtYWxpemUoKQogICAgICAgICAvLyBSZW1vdmUgZW1wdHkgdGV4dCBub2Rlcy4KICAgICAgICAg
aWYgKCF0ZXh0LT5sZW5ndGgoKSkgewogICAgICAgICAgICAgLy8gQ2FyZSBtdXN0IGJlIHRha2Vu
IHRvIGdldCB0aGUgbmV4dCBub2RlIGJlZm9yZSByZW1vdmluZyB0aGUgY3VycmVudCBub2RlLgot
ICAgICAgICAgICAgbm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGVQb3N0T3JkZXIoKTsKKyAg
ICAgICAgICAgIG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0UG9zdE9yZGVyKG5vZGUuZ2V0KCkp
OwogICAgICAgICAgICAgRXhjZXB0aW9uQ29kZSBlYzsKICAgICAgICAgICAgIHRleHQtPnJlbW92
ZShlYyk7CiAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTY3NCw3ICs2NzUsNyBAQCB2b2lkIE5v
ZGU6Om5vcm1hbGl6ZSgpCiAgICAgICAgICAgICBuZXh0VGV4dC0+cmVtb3ZlKGVjKTsKICAgICAg
ICAgfQogCi0gICAgICAgIG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlUG9zdE9yZGVyKCk7
CisgICAgICAgIG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0UG9zdE9yZGVyKG5vZGUuZ2V0KCkp
OwogICAgIH0KIH0KIApAQCAtODg4LDcgKzg4OSw3IEBAIHZvaWQgTm9kZTo6c2V0TmVlZHNTdHls
ZVJlY2FsYyhTdHlsZUNoYW4KIAogdm9pZCBOb2RlOjpsYXp5QXR0YWNoKFNob3VsZFNldEF0dGFj
aGVkIHNob3VsZFNldEF0dGFjaGVkKQogewotICAgIGZvciAoTm9kZSogbiA9IHRoaXM7IG47IG4g
PSBuLT50cmF2ZXJzZU5leHROb2RlKHRoaXMpKSB7CisgICAgZm9yIChOb2RlKiBuID0gdGhpczsg
bjsgbiA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobiwgdGhpcykpIHsKICAgICAgICAgaWYgKG4tPmhh
c0NoaWxkTm9kZXMoKSkKICAgICAgICAgICAgIG4tPnNldENoaWxkTmVlZHNTdHlsZVJlY2FsYygp
OwogICAgICAgICBuLT5zZXRTdHlsZUNoYW5nZShGdWxsU3R5bGVDaGFuZ2UpOwpAQCAtMTAzOSw5
NiArMTA0MCw2IEBAIE5vZGVMaXN0c05vZGVEYXRhKiBOb2RlOjpub2RlTGlzdHMoKQogICAgIHJl
dHVybiBoYXNSYXJlRGF0YSgpID8gcmFyZURhdGEoKS0+bm9kZUxpc3RzKCkgOiAwOwogfQogCi1O
b2RlKiBOb2RlOjp0cmF2ZXJzZU5leHRBbmNlc3RvclNpYmxpbmcoKSBjb25zdAotewotICAgIEFT
U0VSVCghbmV4dFNpYmxpbmcoKSk7Ci0gICAgZm9yIChjb25zdCBOb2RlKiBub2RlID0gcGFyZW50
Tm9kZSgpOyBub2RlOyBub2RlID0gbm9kZS0+cGFyZW50Tm9kZSgpKSB7Ci0gICAgICAgIGlmIChu
b2RlLT5uZXh0U2libGluZygpKQotICAgICAgICAgICAgcmV0dXJuIG5vZGUtPm5leHRTaWJsaW5n
KCk7Ci0gICAgfQotICAgIHJldHVybiAwOwotfQotCi1Ob2RlKiBOb2RlOjp0cmF2ZXJzZU5leHRB
bmNlc3RvclNpYmxpbmcoY29uc3QgTm9kZSogc3RheVdpdGhpbikgY29uc3QKLXsKLSAgICBBU1NF
UlQoIW5leHRTaWJsaW5nKCkpOwotICAgIEFTU0VSVCh0aGlzICE9IHN0YXlXaXRoaW4pOwotICAg
IGZvciAoY29uc3QgTm9kZSogbm9kZSA9IHBhcmVudE5vZGUoKTsgbm9kZTsgbm9kZSA9IG5vZGUt
PnBhcmVudE5vZGUoKSkgewotICAgICAgICBpZiAobm9kZSA9PSBzdGF5V2l0aGluKQotICAgICAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIGlmIChub2RlLT5uZXh0U2libGluZygpKQotICAgICAg
ICAgICAgcmV0dXJuIG5vZGUtPm5leHRTaWJsaW5nKCk7Ci0gICAgfQotICAgIHJldHVybiAwOwot
fQotCi1Ob2RlKiBOb2RlOjp0cmF2ZXJzZU5leHROb2RlUG9zdE9yZGVyKCkgY29uc3QKLXsKLSAg
ICBOb2RlKiBuZXh0ID0gbmV4dFNpYmxpbmcoKTsKLSAgICBpZiAoIW5leHQpCi0gICAgICAgIHJl
dHVybiBwYXJlbnROb2RlKCk7Ci0gICAgd2hpbGUgKE5vZGUqIGZpcnN0Q2hpbGQgPSBuZXh0LT5m
aXJzdENoaWxkKCkpCi0gICAgICAgIG5leHQgPSBmaXJzdENoaWxkOwotICAgIHJldHVybiBuZXh0
OwotfQotCi1Ob2RlKiBOb2RlOjp0cmF2ZXJzZVByZXZpb3VzTm9kZShjb25zdCBOb2RlKiBzdGF5
V2l0aGluKSBjb25zdAotewotICAgIGlmICh0aGlzID09IHN0YXlXaXRoaW4pCi0gICAgICAgIHJl
dHVybiAwOwotICAgIGlmIChwcmV2aW91c1NpYmxpbmcoKSkgewotICAgICAgICBOb2RlICpuID0g
cHJldmlvdXNTaWJsaW5nKCk7Ci0gICAgICAgIHdoaWxlIChuLT5sYXN0Q2hpbGQoKSkKLSAgICAg
ICAgICAgIG4gPSBuLT5sYXN0Q2hpbGQoKTsKLSAgICAgICAgcmV0dXJuIG47Ci0gICAgfQotICAg
IHJldHVybiBwYXJlbnROb2RlKCk7Ci19Ci0KLU5vZGUqIE5vZGU6OnRyYXZlcnNlUHJldmlvdXNT
aWJsaW5nKGNvbnN0IE5vZGUqIHN0YXlXaXRoaW4pIGNvbnN0Ci17Ci0gICAgaWYgKHRoaXMgPT0g
c3RheVdpdGhpbikKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKHByZXZpb3VzU2libGluZygp
KQotICAgICAgICByZXR1cm4gcHJldmlvdXNTaWJsaW5nKCk7Ci0gICAgY29uc3QgTm9kZSAqbiA9
IHRoaXM7Ci0gICAgd2hpbGUgKG4gJiYgIW4tPnByZXZpb3VzU2libGluZygpICYmICghc3RheVdp
dGhpbiB8fCBuLT5wYXJlbnROb2RlKCkgIT0gc3RheVdpdGhpbikpCi0gICAgICAgIG4gPSBuLT5w
YXJlbnROb2RlKCk7Ci0gICAgaWYgKG4pCi0gICAgICAgIHJldHVybiBuLT5wcmV2aW91c1NpYmxp
bmcoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotTm9kZSogTm9kZTo6dHJhdmVyc2VQcmV2aW91c05v
ZGVQb3N0T3JkZXIoY29uc3QgTm9kZSogc3RheVdpdGhpbikgY29uc3QKLXsKLSAgICBpZiAobGFz
dENoaWxkKCkpCi0gICAgICAgIHJldHVybiBsYXN0Q2hpbGQoKTsKLSAgICBpZiAodGhpcyA9PSBz
dGF5V2l0aGluKQotICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAocHJldmlvdXNTaWJsaW5nKCkp
Ci0gICAgICAgIHJldHVybiBwcmV2aW91c1NpYmxpbmcoKTsKLSAgICBjb25zdCBOb2RlICpuID0g
dGhpczsKLSAgICB3aGlsZSAobiAmJiAhbi0+cHJldmlvdXNTaWJsaW5nKCkgJiYgKCFzdGF5V2l0
aGluIHx8IG4tPnBhcmVudE5vZGUoKSAhPSBzdGF5V2l0aGluKSkKLSAgICAgICAgbiA9IG4tPnBh
cmVudE5vZGUoKTsKLSAgICBpZiAobikKLSAgICAgICAgcmV0dXJuIG4tPnByZXZpb3VzU2libGlu
ZygpOwotICAgIHJldHVybiAwOwotfQotCi1Ob2RlKiBOb2RlOjp0cmF2ZXJzZVByZXZpb3VzU2li
bGluZ1Bvc3RPcmRlcihjb25zdCBOb2RlKiBzdGF5V2l0aGluKSBjb25zdAotewotICAgIGlmICh0
aGlzID09IHN0YXlXaXRoaW4pCi0gICAgICAgIHJldHVybiAwOwotICAgIGlmIChwcmV2aW91c1Np
YmxpbmcoKSkKLSAgICAgICAgcmV0dXJuIHByZXZpb3VzU2libGluZygpOwotICAgIGNvbnN0IE5v
ZGUgKm4gPSB0aGlzOwotICAgIHdoaWxlIChuICYmICFuLT5wcmV2aW91c1NpYmxpbmcoKSAmJiAo
IXN0YXlXaXRoaW4gfHwgbi0+cGFyZW50Tm9kZSgpICE9IHN0YXlXaXRoaW4pKQotICAgICAgICBu
ID0gbi0+cGFyZW50Tm9kZSgpOwotICAgIGlmIChuKQotICAgICAgICByZXR1cm4gbi0+cHJldmlv
dXNTaWJsaW5nKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KIHZvaWQgTm9kZTo6Y2hlY2tTZXRQcmVm
aXgoY29uc3QgQXRvbWljU3RyaW5nJiBwcmVmaXgsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAg
IC8vIFBlcmZvcm0gZXJyb3IgY2hlY2tpbmcgYXMgcmVxdWlyZWQgYnkgc3BlYyBmb3Igc2V0dGlu
ZyBOb2RlLnByZWZpeC4gVXNlZCBieQpAQCAtMTIzMyw3ICsxMTQ0LDcgQEAgdm9pZCBOb2RlOjpk
ZXRhY2goKQogICAgIGlmIChyZW5kZXJlcigpKSB7CiAgICAgICAgIHJlbmRlcmVyKCktPmRlc3Ry
b3lBbmRDbGVhbnVwQW5vbnltb3VzV3JhcHBlcnMoKTsKICNpZm5kZWYgTkRFQlVHCi0gICAgICAg
IGZvciAoTm9kZSogbm9kZSA9IHRoaXM7IG5vZGU7IG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHRO
b2RlKHRoaXMpKSB7CisgICAgICAgIGZvciAoTm9kZSogbm9kZSA9IHRoaXM7IG5vZGU7IG5vZGUg
PSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUsIHRoaXMpKSB7CiAgICAgICAgICAgICBSZW5kZXJP
YmplY3QqIHJlbmRlcmVyID0gbm9kZS0+cmVuZGVyZXIoKTsKICAgICAgICAgICAgIC8vIFJlbmRl
ckZsb3dUaHJlYWQgYW5kIHRoZSB0b3AgbGF5ZXIgcmVtb3ZlIGVsZW1lbnRzIGZyb20gdGhlIHJl
Z3VsYXIgdHJlZQogICAgICAgICAgICAgLy8gaGllcmFyY2h5LiBUaGV5IHdpbGwgYmUgY2xlYW5l
ZCB1cCB3aGVuIHdlIGNhbGwgZGV0YWNoIG9uIHRoZW0uCkBAIC0yMDg2LDcgKzE5OTcsNyBAQCB2
b2lkIE5vZGU6OnNob3dOb2RlUGF0aEZvclRoaXMoKSBjb25zdAogCiBzdGF0aWMgdm9pZCB0cmF2
ZXJzZVRyZWVBbmRNYXJrKGNvbnN0IFN0cmluZyYgYmFzZUluZGVudCwgY29uc3QgTm9kZSogcm9v
dE5vZGUsIGNvbnN0IE5vZGUqIG1hcmtlZE5vZGUxLCBjb25zdCBjaGFyKiBtYXJrZWRMYWJlbDEs
IGNvbnN0IE5vZGUqIG1hcmtlZE5vZGUyLCBjb25zdCBjaGFyKiBtYXJrZWRMYWJlbDIpCiB7Ci0g
ICAgZm9yIChjb25zdCBOb2RlKiBub2RlID0gcm9vdE5vZGU7IG5vZGU7IG5vZGUgPSBub2RlLT50
cmF2ZXJzZU5leHROb2RlKCkpIHsKKyAgICBmb3IgKGNvbnN0IE5vZGUqIG5vZGUgPSByb290Tm9k
ZTsgbm9kZTsgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9kZSkpIHsKICAgICAgICAgaWYg
KG5vZGUgPT0gbWFya2VkTm9kZTEpCiAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzIiwg
bWFya2VkTGFiZWwxKTsKICAgICAgICAgaWYgKG5vZGUgPT0gbWFya2VkTm9kZTIpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Rv
bS9Ob2RlLmgJKHJldmlzaW9uIDEzNzE3NSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ3NywzMCArNDc3LDYgQEAgcHVibGljOgogICAgIHVuc2lnbmVk
IGNoaWxkTm9kZUNvdW50KCkgY29uc3Q7CiAgICAgTm9kZSogY2hpbGROb2RlKHVuc2lnbmVkIGlu
ZGV4KSBjb25zdDsKIAotICAgIC8vIERvZXMgYSBwcmUtb3JkZXIgdHJhdmVyc2FsIG9mIHRoZSB0
cmVlIHRvIGZpbmQgdGhlIG5leHQgbm9kZSBhZnRlciB0aGlzIG9uZS4KLSAgICAvLyBUaGlzIHVz
ZXMgdGhlIHNhbWUgb3JkZXIgdGhhdCB0YWdzIGFwcGVhciBpbiB0aGUgc291cmNlIGZpbGUuIElm
IHRoZSBzdGF5V2l0aGluCi0gICAgLy8gYXJndW1lbnQgaXMgbm9uLW51bGwsIHRoZSB0cmF2ZXJz
YWwgd2lsbCBzdG9wIG9uY2UgdGhlIHNwZWNpZmllZCBub2RlIGlzIHJlYWNoZWQuCi0gICAgLy8g
VGhpcyBjYW4gYmUgdXNlZCB0byByZXN0cmljdCB0cmF2ZXJzYWwgdG8gYSBwYXJ0aWN1bGFyIHN1
Yi10cmVlLgotICAgIE5vZGUqIHRyYXZlcnNlTmV4dE5vZGUoKSBjb25zdDsKLSAgICBOb2RlKiB0
cmF2ZXJzZU5leHROb2RlKGNvbnN0IE5vZGUqIHN0YXlXaXRoaW4pIGNvbnN0OwotCi0gICAgLy8g
TGlrZSB0cmF2ZXJzZU5leHROb2RlLCBidXQgc2tpcHMgY2hpbGRyZW4gYW5kIHN0YXJ0cyB3aXRo
IHRoZSBuZXh0IHNpYmxpbmcuCi0gICAgTm9kZSogdHJhdmVyc2VOZXh0U2libGluZygpIGNvbnN0
OwotICAgIE5vZGUqIHRyYXZlcnNlTmV4dFNpYmxpbmcoY29uc3QgTm9kZSogc3RheVdpdGhpbikg
Y29uc3Q7Ci0KLSAgICAvLyBEb2VzIGEgcmV2ZXJzZSBwcmUtb3JkZXIgdHJhdmVyc2FsIHRvIGZp
bmQgdGhlIG5vZGUgdGhhdCBjb21lcyBiZWZvcmUgdGhlIGN1cnJlbnQgb25lIGluIGRvY3VtZW50
IG9yZGVyCi0gICAgTm9kZSogdHJhdmVyc2VQcmV2aW91c05vZGUoY29uc3QgTm9kZSogc3RheVdp
dGhpbiA9IDApIGNvbnN0OwotCi0gICAgLy8gTGlrZSB0cmF2ZXJzZVByZXZpb3VzTm9kZSwgYnV0
IHNraXBzIGNoaWxkcmVuIGFuZCBzdGFydHMgd2l0aCB0aGUgbmV4dCBzaWJsaW5nLgotICAgIE5v
ZGUqIHRyYXZlcnNlUHJldmlvdXNTaWJsaW5nKGNvbnN0IE5vZGUqIHN0YXlXaXRoaW4gPSAwKSBj
b25zdDsKLQotICAgIC8vIExpa2UgdHJhdmVyc2VOZXh0Tm9kZSwgYnV0IHZpc2l0cyBwYXJlbnRz
IGFmdGVyIHRoZWlyIGNoaWxkcmVuLgotICAgIE5vZGUqIHRyYXZlcnNlTmV4dE5vZGVQb3N0T3Jk
ZXIoKSBjb25zdDsKLQotICAgIC8vIExpa2UgdHJhdmVyc2VQcmV2aW91c05vZGUsIGJ1dCB2aXNp
dHMgcGFyZW50cyBiZWZvcmUgdGhlaXIgY2hpbGRyZW4uCi0gICAgTm9kZSogdHJhdmVyc2VQcmV2
aW91c05vZGVQb3N0T3JkZXIoY29uc3QgTm9kZSogc3RheVdpdGhpbiA9IDApIGNvbnN0OwotICAg
IE5vZGUqIHRyYXZlcnNlUHJldmlvdXNTaWJsaW5nUG9zdE9yZGVyKGNvbnN0IE5vZGUqIHN0YXlX
aXRoaW4gPSAwKSBjb25zdDsKLQogICAgIHZvaWQgY2hlY2tTZXRQcmVmaXgoY29uc3QgQXRvbWlj
U3RyaW5nJiBwcmVmaXgsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICBib29sIGlzRGVzY2VuZGFudE9m
KGNvbnN0IE5vZGUqKSBjb25zdDsKICAgICBib29sIGNvbnRhaW5zKGNvbnN0IE5vZGUqKSBjb25z
dDsKQEAgLTgxOSw5ICs3OTUsNiBAQCBwcml2YXRlOgogCiAgICAgRWxlbWVudCogYW5jZXN0b3JF
bGVtZW50KCkgY29uc3Q7CiAKLSAgICBOb2RlKiB0cmF2ZXJzZU5leHRBbmNlc3RvclNpYmxpbmco
KSBjb25zdDsKLSAgICBOb2RlKiB0cmF2ZXJzZU5leHRBbmNlc3RvclNpYmxpbmcoY29uc3QgTm9k
ZSogc3RheVdpdGhpbikgY29uc3Q7Ci0KICAgICAvLyBVc2UgTm9kZTo6cGFyZW50Tm9kZSBhcyB0
aGUgY29uc2lzdGVudCB3YXkgb2YgcXVlcnlpbmcgYSBwYXJlbnQgbm9kZS4KICAgICAvLyBUaGlz
IG1ldGhvZCBpcyBtYWRlIHByaXZhdGUgdG8gZW5zdXJlIGEgY29tcGlsZXIgZXJyb3Igb24gY2Fs
bCBzaXRlcyB0aGF0CiAgICAgLy8gZG9uJ3QgZm9sbG93IHRoaXMgcnVsZS4KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2RvbS9Ob2RlSXRlcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2RvbS9Ob2RlSXRlcmF0b3IuY3BwCShyZXZpc2lvbiAxMzcxNzUpCisrKyBTb3VyY2UvV2Vi
Q29yZS9kb20vTm9kZUl0ZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBA
QAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2lu
Y2x1ZGUgIk5vZGVGaWx0ZXIuaCIKKyNpbmNsdWRlICJOb2RlVHJhdmVyc2FsLmgiCiAjaW5jbHVk
ZSAiU2NyaXB0U3RhdGUuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNTUsNyArNTYsNyBA
QCBib29sIE5vZGVJdGVyYXRvcjo6Tm9kZVBvaW50ZXI6Om1vdmVUb05lCiAgICAgICAgIGlzUG9p
bnRlckJlZm9yZU5vZGUgPSBmYWxzZTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQotICAg
IG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKHJvb3QpOworICAgIG5vZGUgPSBOb2RlVHJh
dmVyc2FsOjpuZXh0KG5vZGUuZ2V0KCksIHJvb3QpOwogICAgIHJldHVybiBub2RlOwogfQogCkBA
IC02Nyw3ICs2OCw3IEBAIGJvb2wgTm9kZUl0ZXJhdG9yOjpOb2RlUG9pbnRlcjo6bW92ZVRvUHIK
ICAgICAgICAgaXNQb2ludGVyQmVmb3JlTm9kZSA9IHRydWU7CiAgICAgICAgIHJldHVybiB0cnVl
OwogICAgIH0KLSAgICBub2RlID0gbm9kZS0+dHJhdmVyc2VQcmV2aW91c05vZGUocm9vdCk7Cisg
ICAgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6OnByZXZpb3VzKG5vZGUuZ2V0KCksIHJvb3QpOwogICAg
IHJldHVybiBub2RlOwogfQogCkBAIC0xNzcsMjIgKzE3OCwyMiBAQCB2b2lkIE5vZGVJdGVyYXRv
cjo6dXBkYXRlRm9yTm9kZVJlbW92YWwoCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChyZWZl
cmVuY2VOb2RlLmlzUG9pbnRlckJlZm9yZU5vZGUpIHsKLSAgICAgICAgTm9kZSogbm9kZSA9IHJl
bW92ZWROb2RlLT50cmF2ZXJzZU5leHROb2RlKHJvb3QoKSk7CisgICAgICAgIE5vZGUqIG5vZGUg
PSBOb2RlVHJhdmVyc2FsOjpuZXh0KHJlbW92ZWROb2RlLCByb290KCkpOwogICAgICAgICBpZiAo
bm9kZSkgewogICAgICAgICAgICAgLy8gTW92ZSBvdXQgZnJvbSB1bmRlciB0aGUgbm9kZSBiZWlu
ZyByZW1vdmVkIGlmIHRoZSBuZXcgcmVmZXJlbmNlCiAgICAgICAgICAgICAvLyBub2RlIGlzIGEg
ZGVzY2VuZGFudCBvZiB0aGUgbm9kZSBiZWluZyByZW1vdmVkLgogICAgICAgICAgICAgd2hpbGUg
KG5vZGUgJiYgbm9kZS0+aXNEZXNjZW5kYW50T2YocmVtb3ZlZE5vZGUpKQotICAgICAgICAgICAg
ICAgIG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKHJvb3QoKSk7CisgICAgICAgICAgICAg
ICAgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9kZSwgcm9vdCgpKTsKICAgICAgICAgICAg
IGlmIChub2RlKQogICAgICAgICAgICAgICAgIHJlZmVyZW5jZU5vZGUubm9kZSA9IG5vZGU7CiAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBub2RlID0gcmVtb3ZlZE5vZGUtPnRyYXZlcnNl
UHJldmlvdXNOb2RlKHJvb3QoKSk7CisgICAgICAgICAgICBub2RlID0gTm9kZVRyYXZlcnNhbDo6
cHJldmlvdXMocmVtb3ZlZE5vZGUsIHJvb3QoKSk7CiAgICAgICAgICAgICBpZiAobm9kZSkgewog
ICAgICAgICAgICAgICAgIC8vIE1vdmUgb3V0IGZyb20gdW5kZXIgdGhlIG5vZGUgYmVpbmcgcmVt
b3ZlZCBpZiB0aGUgcmVmZXJlbmNlIG5vZGUgaXMKICAgICAgICAgICAgICAgICAvLyBhIGRlc2Nl
bmRhbnQgb2YgdGhlIG5vZGUgYmVpbmcgcmVtb3ZlZC4KICAgICAgICAgICAgICAgICBpZiAod2ls
bFJlbW92ZVJlZmVyZW5jZU5vZGVBbmNlc3RvcikgewogICAgICAgICAgICAgICAgICAgICB3aGls
ZSAobm9kZSAmJiBub2RlLT5pc0Rlc2NlbmRhbnRPZihyZW1vdmVkTm9kZSkpCi0gICAgICAgICAg
ICAgICAgICAgICAgICBub2RlID0gbm9kZS0+dHJhdmVyc2VQcmV2aW91c05vZGUocm9vdCgpKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpwcmV2aW91cyhu
b2RlLCByb290KCkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBpZiAobm9k
ZSkgewogICAgICAgICAgICAgICAgICAgICAvLyBSZW1vdmluZyBsYXN0IG5vZGUuCkBAIC0yMDQs
MjQgKzIwNSwyNCBAQCB2b2lkIE5vZGVJdGVyYXRvcjo6dXBkYXRlRm9yTm9kZVJlbW92YWwoCiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9IGVsc2UgewotICAgICAgICBOb2RlKiBub2Rl
ID0gcmVtb3ZlZE5vZGUtPnRyYXZlcnNlUHJldmlvdXNOb2RlKHJvb3QoKSk7CisgICAgICAgIE5v
ZGUqIG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpwcmV2aW91cyhyZW1vdmVkTm9kZSwgcm9vdCgpKTsK
ICAgICAgICAgaWYgKG5vZGUpIHsKICAgICAgICAgICAgIC8vIE1vdmUgb3V0IGZyb20gdW5kZXIg
dGhlIG5vZGUgYmVpbmcgcmVtb3ZlZCBpZiB0aGUgcmVmZXJlbmNlIG5vZGUgaXMKICAgICAgICAg
ICAgIC8vIGEgZGVzY2VuZGFudCBvZiB0aGUgbm9kZSBiZWluZyByZW1vdmVkLgogICAgICAgICAg
ICAgaWYgKHdpbGxSZW1vdmVSZWZlcmVuY2VOb2RlQW5jZXN0b3IpIHsKICAgICAgICAgICAgICAg
ICB3aGlsZSAobm9kZSAmJiBub2RlLT5pc0Rlc2NlbmRhbnRPZihyZW1vdmVkTm9kZSkpCi0gICAg
ICAgICAgICAgICAgICAgIG5vZGUgPSBub2RlLT50cmF2ZXJzZVByZXZpb3VzTm9kZShyb290KCkp
OworICAgICAgICAgICAgICAgICAgICBub2RlID0gTm9kZVRyYXZlcnNhbDo6cHJldmlvdXMobm9k
ZSwgcm9vdCgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChub2RlKQogICAgICAg
ICAgICAgICAgIHJlZmVyZW5jZU5vZGUubm9kZSA9IG5vZGU7CiAgICAgICAgIH0gZWxzZSB7CiAg
ICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBicmFuY2ggZG9lc24ndCBhcHBlYXIgdG8gaGF2ZSBh
bnkgTGF5b3V0VGVzdHMuCi0gICAgICAgICAgICBub2RlID0gcmVtb3ZlZE5vZGUtPnRyYXZlcnNl
TmV4dE5vZGUocm9vdCgpKTsKKyAgICAgICAgICAgIG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0
KHJlbW92ZWROb2RlLCByb290KCkpOwogICAgICAgICAgICAgLy8gTW92ZSBvdXQgZnJvbSB1bmRl
ciB0aGUgbm9kZSBiZWluZyByZW1vdmVkIGlmIHRoZSByZWZlcmVuY2Ugbm9kZSBpcwogICAgICAg
ICAgICAgLy8gYSBkZXNjZW5kYW50IG9mIHRoZSBub2RlIGJlaW5nIHJlbW92ZWQuCiAgICAgICAg
ICAgICBpZiAod2lsbFJlbW92ZVJlZmVyZW5jZU5vZGVBbmNlc3RvcikgewogICAgICAgICAgICAg
ICAgIHdoaWxlIChub2RlICYmIG5vZGUtPmlzRGVzY2VuZGFudE9mKHJlbW92ZWROb2RlKSkKLSAg
ICAgICAgICAgICAgICAgICAgbm9kZSA9IG5vZGUtPnRyYXZlcnNlUHJldmlvdXNOb2RlKHJvb3Qo
KSk7CisgICAgICAgICAgICAgICAgICAgIG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpwcmV2aW91cyhu
b2RlLCByb290KCkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKG5vZGUpCiAgICAg
ICAgICAgICAgICAgcmVmZXJlbmNlTm9kZS5ub2RlID0gbm9kZTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2RvbS9Ob2RlVHJhdmVyc2FsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9k
b20vTm9kZVRyYXZlcnNhbC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9kb20v
Tm9kZVRyYXZlcnNhbC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTI5IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCisgKiAgICAgICAg
ICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCisgKiAgICAgICAg
ICAgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEsIDIwMTIg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAy
MDA5IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRv
cmNobW9iaWxlLmNvbS8pCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTm9kZVRy
YXZlcnNhbC5oIgorCisjaW5jbHVkZSAiQ29udGFpbmVyTm9kZS5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CituYW1lc3BhY2UgTm9kZVRyYXZlcnNhbCB7CisKK05vZGUqIG5leHRBbmNlc3RvclNp
YmxpbmcoY29uc3QgTm9kZSogY3VycmVudCkKK3sKKyAgICBBU1NFUlQoIWN1cnJlbnQtPm5leHRT
aWJsaW5nKCkpOworICAgIGZvciAoY3VycmVudCA9IGN1cnJlbnQtPnBhcmVudE5vZGUoKTsgY3Vy
cmVudDsgY3VycmVudCA9IGN1cnJlbnQtPnBhcmVudE5vZGUoKSkgeworICAgICAgICBpZiAoY3Vy
cmVudC0+bmV4dFNpYmxpbmcoKSkKKyAgICAgICAgICAgIHJldHVybiBjdXJyZW50LT5uZXh0U2li
bGluZygpOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworTm9kZSogbmV4dEFuY2VzdG9yU2li
bGluZyhjb25zdCBOb2RlKiBjdXJyZW50LCBjb25zdCBOb2RlKiBzdGF5V2l0aGluKQoreworICAg
IEFTU0VSVCghY3VycmVudC0+bmV4dFNpYmxpbmcoKSk7CisgICAgQVNTRVJUKGN1cnJlbnQgIT0g
c3RheVdpdGhpbik7CisgICAgZm9yIChjdXJyZW50ID0gY3VycmVudC0+cGFyZW50Tm9kZSgpOyBj
dXJyZW50OyBjdXJyZW50ID0gY3VycmVudC0+cGFyZW50Tm9kZSgpKSB7CisgICAgICAgIGlmIChj
dXJyZW50ID09IHN0YXlXaXRoaW4pCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgaWYg
KGN1cnJlbnQtPm5leHRTaWJsaW5nKCkpCisgICAgICAgICAgICByZXR1cm4gY3VycmVudC0+bmV4
dFNpYmxpbmcoKTsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKK05vZGUqIHByZXZpb3VzKGNv
bnN0IE5vZGUqIGN1cnJlbnQsIGNvbnN0IE5vZGUqIHN0YXlXaXRoaW4pCit7CisgICAgaWYgKGN1
cnJlbnQgPT0gc3RheVdpdGhpbikKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKGN1cnJlbnQt
PnByZXZpb3VzU2libGluZygpKSB7CisgICAgICAgIE5vZGUqIHByZXZpb3VzID0gY3VycmVudC0+
cHJldmlvdXNTaWJsaW5nKCk7CisgICAgICAgIHdoaWxlIChwcmV2aW91cy0+bGFzdENoaWxkKCkp
CisgICAgICAgICAgICBwcmV2aW91cyA9IHByZXZpb3VzLT5sYXN0Q2hpbGQoKTsKKyAgICAgICAg
cmV0dXJuIHByZXZpb3VzOworICAgIH0KKyAgICByZXR1cm4gY3VycmVudC0+cGFyZW50Tm9kZSgp
OworfQorCitOb2RlKiBwcmV2aW91c1NpYmxpbmcoY29uc3QgTm9kZSogY3VycmVudCwgY29uc3Qg
Tm9kZSogc3RheVdpdGhpbikKK3sKKyAgICBpZiAoY3VycmVudCA9PSBzdGF5V2l0aGluKQorICAg
ICAgICByZXR1cm4gMDsKKyAgICBpZiAoY3VycmVudC0+cHJldmlvdXNTaWJsaW5nKCkpCisgICAg
ICAgIHJldHVybiBjdXJyZW50LT5wcmV2aW91c1NpYmxpbmcoKTsKKyAgICBmb3IgKGN1cnJlbnQg
PSBjdXJyZW50LT5wYXJlbnROb2RlKCk7IGN1cnJlbnQ7IGN1cnJlbnQgPSBjdXJyZW50LT5wYXJl
bnROb2RlKCkpIHsKKyAgICAgICAgaWYgKGN1cnJlbnQgPT0gc3RheVdpdGhpbikKKyAgICAgICAg
ICAgIHJldHVybiAwOworICAgICAgICBpZiAoY3VycmVudC0+cHJldmlvdXNTaWJsaW5nKCkpCisg
ICAgICAgICAgICByZXR1cm4gY3VycmVudC0+cHJldmlvdXNTaWJsaW5nKCk7CisgICAgfQorICAg
IHJldHVybiAwOworfQorCitOb2RlKiBuZXh0UG9zdE9yZGVyKGNvbnN0IE5vZGUqIGN1cnJlbnQs
IGNvbnN0IE5vZGUqIHN0YXlXaXRoaW4pCit7CisgICAgaWYgKGN1cnJlbnQgPT0gc3RheVdpdGhp
bikKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKCFjdXJyZW50LT5uZXh0U2libGluZygpKQor
ICAgICAgICByZXR1cm4gY3VycmVudC0+cGFyZW50Tm9kZSgpOworICAgIE5vZGUqIG5leHQgPSBj
dXJyZW50LT5uZXh0U2libGluZygpOworICAgIHdoaWxlIChuZXh0LT5maXJzdENoaWxkKCkpCisg
ICAgICAgIG5leHQgPSBuZXh0LT5maXJzdENoaWxkKCk7CisgICAgcmV0dXJuIG5leHQ7Cit9CisK
K3N0YXRpYyBOb2RlKiBwcmV2aW91c0FuY2VzdG9yU2libGluZ1Bvc3RPcmRlcihjb25zdCBOb2Rl
KiBjdXJyZW50LCBjb25zdCBOb2RlKiBzdGF5V2l0aGluKQoreworICAgIEFTU0VSVCghY3VycmVu
dC0+cHJldmlvdXNTaWJsaW5nKCkpOworICAgIGZvciAoY3VycmVudCA9IGN1cnJlbnQtPnBhcmVu
dE5vZGUoKTsgY3VycmVudDsgY3VycmVudCA9IGN1cnJlbnQtPnBhcmVudE5vZGUoKSkgeworICAg
ICAgICBpZiAoY3VycmVudCA9PSBzdGF5V2l0aGluKQorICAgICAgICAgICAgcmV0dXJuIDA7Cisg
ICAgICAgIGlmIChjdXJyZW50LT5wcmV2aW91c1NpYmxpbmcoKSkKKyAgICAgICAgICAgIHJldHVy
biBjdXJyZW50LT5wcmV2aW91c1NpYmxpbmcoKTsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisK
K05vZGUqIHByZXZpb3VzUG9zdE9yZGVyKGNvbnN0IE5vZGUqIGN1cnJlbnQsIGNvbnN0IE5vZGUq
IHN0YXlXaXRoaW4pCit7CisgICAgaWYgKGN1cnJlbnQtPmxhc3RDaGlsZCgpKQorICAgICAgICBy
ZXR1cm4gY3VycmVudC0+bGFzdENoaWxkKCk7CisgICAgaWYgKGN1cnJlbnQgPT0gc3RheVdpdGhp
bikKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKGN1cnJlbnQtPnByZXZpb3VzU2libGluZygp
KQorICAgICAgICByZXR1cm4gY3VycmVudC0+cHJldmlvdXNTaWJsaW5nKCk7CisgICAgcmV0dXJu
IHByZXZpb3VzQW5jZXN0b3JTaWJsaW5nUG9zdE9yZGVyKGN1cnJlbnQsIHN0YXlXaXRoaW4pOwor
fQorCitOb2RlKiBwcmV2aW91c1NpYmxpbmdQb3N0T3JkZXIoY29uc3QgTm9kZSogY3VycmVudCwg
Y29uc3QgTm9kZSogc3RheVdpdGhpbikKK3sKKyAgICBpZiAoY3VycmVudCA9PSBzdGF5V2l0aGlu
KQorICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAoY3VycmVudC0+cHJldmlvdXNTaWJsaW5nKCkp
CisgICAgICAgIHJldHVybiBjdXJyZW50LT5wcmV2aW91c1NpYmxpbmcoKTsKKyAgICByZXR1cm4g
cHJldmlvdXNBbmNlc3RvclNpYmxpbmdQb3N0T3JkZXIoY3VycmVudCwgc3RheVdpdGhpbik7Cit9
CisKK30KK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlVHJhdmVyc2FsLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL05vZGVUcmF2ZXJzYWwuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlVHJhdmVyc2FsLmgJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMTE4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xs
QGtkZS5vcmcpCisgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3Rv
QGtkZS5vcmcpCisgKiAgICAgICAgICAgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtk
ZS5vcmcpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIw
MDksIDIwMTAsIDIwMTEsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuIChodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8pCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIE5vZGVUcmF2
ZXJzYWxfaAorI2RlZmluZSBOb2RlVHJhdmVyc2FsX2gKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBOb2RlOworY2xhc3MgQ29udGFpbmVyTm9kZTsKKworbmFtZXNwYWNlIE5vZGVUcmF2
ZXJzYWwgeworCisvLyBEb2VzIGEgcHJlLW9yZGVyIHRyYXZlcnNhbCBvZiB0aGUgdHJlZSB0byBm
aW5kIHRoZSBuZXh0IG5vZGUgYWZ0ZXIgdGhpcyBvbmUuCisvLyBUaGlzIHVzZXMgdGhlIHNhbWUg
b3JkZXIgdGhhdCB0YWdzIGFwcGVhciBpbiB0aGUgc291cmNlIGZpbGUuIElmIHRoZSBzdGF5V2l0
aGluCisvLyBhcmd1bWVudCBpcyBub24tbnVsbCwgdGhlIHRyYXZlcnNhbCB3aWxsIHN0b3Agb25j
ZSB0aGUgc3BlY2lmaWVkIG5vZGUgaXMgcmVhY2hlZC4KKy8vIFRoaXMgY2FuIGJlIHVzZWQgdG8g
cmVzdHJpY3QgdHJhdmVyc2FsIHRvIGEgcGFydGljdWxhciBzdWItdHJlZS4KK05vZGUqIG5leHQo
Y29uc3QgTm9kZSopOworTm9kZSogbmV4dChjb25zdCBOb2RlKiwgY29uc3QgTm9kZSogc3RheVdp
dGhpbik7CitOb2RlKiBuZXh0KGNvbnN0IENvbnRhaW5lck5vZGUqKTsKK05vZGUqIG5leHQoY29u
c3QgQ29udGFpbmVyTm9kZSosIGNvbnN0IE5vZGUqIHN0YXlXaXRoaW4pOworCisvLyBMaWtlIG5l
eHQsIGJ1dCBza2lwcyBjaGlsZHJlbiBhbmQgc3RhcnRzIHdpdGggdGhlIG5leHQgc2libGluZy4K
K05vZGUqIG5leHRTaWJsaW5nKGNvbnN0IE5vZGUqKTsKK05vZGUqIG5leHRTaWJsaW5nKGNvbnN0
IE5vZGUqLCBjb25zdCBOb2RlKiBzdGF5V2l0aGluKTsKK05vZGUqIG5leHRTaWJsaW5nKGNvbnN0
IENvbnRhaW5lck5vZGUqKTsKK05vZGUqIG5leHRTaWJsaW5nKGNvbnN0IENvbnRhaW5lck5vZGUq
LCBjb25zdCBOb2RlKiBzdGF5V2l0aGluKTsKKworLy8gRG9lcyBhIHJldmVyc2UgcHJlLW9yZGVy
IHRyYXZlcnNhbCB0byBmaW5kIHRoZSBub2RlIHRoYXQgY29tZXMgYmVmb3JlIHRoZSBjdXJyZW50
IG9uZSBpbiBkb2N1bWVudCBvcmRlcgorTm9kZSogcHJldmlvdXMoY29uc3QgTm9kZSosIGNvbnN0
IE5vZGUqIHN0YXlXaXRoaW4gPSAwKTsKKworLy8gTGlrZSBwcmV2aW91cywgYnV0IHNraXBzIGNo
aWxkcmVuIGFuZCBzdGFydHMgd2l0aCB0aGUgbmV4dCBzaWJsaW5nLgorTm9kZSogcHJldmlvdXNT
aWJsaW5nKGNvbnN0IE5vZGUqLCBjb25zdCBOb2RlKiBzdGF5V2l0aGluID0gMCk7CisKKy8vIExp
a2UgbmV4dCwgYnV0IHZpc2l0cyBwYXJlbnRzIGFmdGVyIHRoZWlyIGNoaWxkcmVuLgorTm9kZSog
bmV4dFBvc3RPcmRlcihjb25zdCBOb2RlKiwgY29uc3QgTm9kZSogc3RheVdpdGhpbiA9IDApOwor
CisvLyBMaWtlIHByZXZpb3VzL3ByZXZpb3VzU2libGluZywgYnV0IHZpc2l0cyBwYXJlbnRzIGJl
Zm9yZSB0aGVpciBjaGlsZHJlbi4KK05vZGUqIHByZXZpb3VzUG9zdE9yZGVyKGNvbnN0IE5vZGUq
LCBjb25zdCBOb2RlKiBzdGF5V2l0aGluID0gMCk7CitOb2RlKiBwcmV2aW91c1NpYmxpbmdQb3N0
T3JkZXIoY29uc3QgTm9kZSosIGNvbnN0IE5vZGUqIHN0YXlXaXRoaW4gPSAwKTsKKworTm9kZSog
bmV4dEFuY2VzdG9yU2libGluZyhjb25zdCBOb2RlKik7CitOb2RlKiBuZXh0QW5jZXN0b3JTaWJs
aW5nKGNvbnN0IE5vZGUqLCBjb25zdCBOb2RlKiBzdGF5V2l0aGluKTsKKwordGVtcGxhdGUgPGNs
YXNzIE5vZGVUeXBlPgorTm9kZSogdHJhdmVyc2VOZXh0Tm9kZVRlbXBsYXRlKE5vZGVUeXBlKiBj
dXJyZW50KQoreworICAgIGlmIChjdXJyZW50LT5maXJzdENoaWxkKCkpCisgICAgICAgIHJldHVy
biBjdXJyZW50LT5maXJzdENoaWxkKCk7CisgICAgaWYgKGN1cnJlbnQtPm5leHRTaWJsaW5nKCkp
CisgICAgICAgIHJldHVybiBjdXJyZW50LT5uZXh0U2libGluZygpOworICAgIHJldHVybiBuZXh0
QW5jZXN0b3JTaWJsaW5nKGN1cnJlbnQpOworfQoraW5saW5lIE5vZGUqIG5leHQoY29uc3QgTm9k
ZSogY3VycmVudCkgeyByZXR1cm4gdHJhdmVyc2VOZXh0Tm9kZVRlbXBsYXRlKGN1cnJlbnQpOyB9
CitpbmxpbmUgTm9kZSogbmV4dChjb25zdCBDb250YWluZXJOb2RlKiBjdXJyZW50KSB7IHJldHVy
biB0cmF2ZXJzZU5leHROb2RlVGVtcGxhdGUoY3VycmVudCk7IH0KKyAgICAKK3RlbXBsYXRlIDxj
bGFzcyBOb2RlVHlwZT4KK05vZGUqIHRyYXZlcnNlTmV4dE5vZGVUZW1wbGF0ZShOb2RlVHlwZSog
Y3VycmVudCwgY29uc3QgTm9kZSogc3RheVdpdGhpbikKK3sKKyAgICBpZiAoY3VycmVudC0+Zmly
c3RDaGlsZCgpKQorICAgICAgICByZXR1cm4gY3VycmVudC0+Zmlyc3RDaGlsZCgpOworICAgIGlm
IChjdXJyZW50ID09IHN0YXlXaXRoaW4pCisgICAgICAgIHJldHVybiAwOworICAgIGlmIChjdXJy
ZW50LT5uZXh0U2libGluZygpKQorICAgICAgICByZXR1cm4gY3VycmVudC0+bmV4dFNpYmxpbmco
KTsKKyAgICByZXR1cm4gbmV4dEFuY2VzdG9yU2libGluZyhjdXJyZW50LCBzdGF5V2l0aGluKTsK
K30KK2lubGluZSBOb2RlKiBuZXh0KGNvbnN0IE5vZGUqIGN1cnJlbnQsIGNvbnN0IE5vZGUqIHN0
YXlXaXRoaW4pIHsgcmV0dXJuIHRyYXZlcnNlTmV4dE5vZGVUZW1wbGF0ZShjdXJyZW50LCBzdGF5
V2l0aGluKTsgfQoraW5saW5lIE5vZGUqIG5leHQoY29uc3QgQ29udGFpbmVyTm9kZSogY3VycmVu
dCwgY29uc3QgTm9kZSogc3RheVdpdGhpbikgeyByZXR1cm4gdHJhdmVyc2VOZXh0Tm9kZVRlbXBs
YXRlKGN1cnJlbnQsIHN0YXlXaXRoaW4pOyB9CisKK3RlbXBsYXRlIDxjbGFzcyBOb2RlVHlwZT4K
K05vZGUqIHRyYXZlcnNlTmV4dFNpYmxpbmdUZW1wbGF0ZShOb2RlVHlwZSogY3VycmVudCkKK3sK
KyAgICBpZiAoY3VycmVudC0+bmV4dFNpYmxpbmcoKSkKKyAgICAgICAgcmV0dXJuIGN1cnJlbnQt
Pm5leHRTaWJsaW5nKCk7CisgICAgcmV0dXJuIG5leHRBbmNlc3RvclNpYmxpbmcoY3VycmVudCk7
Cit9CitpbmxpbmUgTm9kZSogbmV4dFNpYmxpbmcoY29uc3QgTm9kZSogY3VycmVudCkgeyByZXR1
cm4gdHJhdmVyc2VOZXh0U2libGluZ1RlbXBsYXRlKGN1cnJlbnQpOyB9CitpbmxpbmUgTm9kZSog
bmV4dFNpYmxpbmcoY29uc3QgQ29udGFpbmVyTm9kZSogY3VycmVudCkgeyByZXR1cm4gdHJhdmVy
c2VOZXh0U2libGluZ1RlbXBsYXRlKGN1cnJlbnQpOyB9CisKK3RlbXBsYXRlIDxjbGFzcyBOb2Rl
VHlwZT4KK05vZGUqIHRyYXZlcnNlTmV4dFNpYmxpbmdUZW1wbGF0ZShOb2RlVHlwZSogY3VycmVu
dCwgY29uc3QgTm9kZSogc3RheVdpdGhpbikKK3sKKyAgICBpZiAoY3VycmVudCA9PSBzdGF5V2l0
aGluKQorICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAoY3VycmVudC0+bmV4dFNpYmxpbmcoKSkK
KyAgICAgICAgcmV0dXJuIGN1cnJlbnQtPm5leHRTaWJsaW5nKCk7CisgICAgcmV0dXJuIG5leHRB
bmNlc3RvclNpYmxpbmcoY3VycmVudCwgc3RheVdpdGhpbik7Cit9CitpbmxpbmUgTm9kZSogbmV4
dFNpYmxpbmcoY29uc3QgTm9kZSogY3VycmVudCwgY29uc3QgTm9kZSogc3RheVdpdGhpbikgeyBy
ZXR1cm4gdHJhdmVyc2VOZXh0U2libGluZ1RlbXBsYXRlKGN1cnJlbnQsIHN0YXlXaXRoaW4pOyB9
CitpbmxpbmUgTm9kZSogbmV4dFNpYmxpbmcoY29uc3QgQ29udGFpbmVyTm9kZSogY3VycmVudCwg
Y29uc3QgTm9kZSogc3RheVdpdGhpbikgeyByZXR1cm4gdHJhdmVyc2VOZXh0U2libGluZ1RlbXBs
YXRlKGN1cnJlbnQsIHN0YXlXaXRoaW4pOyB9CisKK30KKworfQorCisjZW5kaWYKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
ZG9tL1JhbmdlLmNwcAkocmV2aXNpb24gMTM3MTc1KQorKysgU291cmNlL1dlYkNvcmUvZG9tL1Jh
bmdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIkhUTUxF
bGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiTm9kZS5oIgorI2lu
Y2x1ZGUgIk5vZGVUcmF2ZXJzYWwuaCIKICNpbmNsdWRlICJOb2RlV2l0aEluZGV4LmgiCiAjaW5j
bHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlByb2Nlc3NpbmdJbnN0cnVjdGlvbi5oIgpAQCAtMTA2
NSw3ICsxMDY2LDcgQEAgU3RyaW5nIFJhbmdlOjp0b1N0cmluZyhFeGNlcHRpb25Db2RlJiBlYwog
ICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKIAogICAgIE5vZGUqIHBhc3RMYXN0ID0gcGFzdExh
c3ROb2RlKCk7Ci0gICAgZm9yIChOb2RlKiBuID0gZmlyc3ROb2RlKCk7IG4gIT0gcGFzdExhc3Q7
IG4gPSBuLT50cmF2ZXJzZU5leHROb2RlKCkpIHsKKyAgICBmb3IgKE5vZGUqIG4gPSBmaXJzdE5v
ZGUoKTsgbiAhPSBwYXN0TGFzdDsgbiA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobikpIHsKICAgICAg
ICAgaWYgKG4tPm5vZGVUeXBlKCkgPT0gTm9kZTo6VEVYVF9OT0RFIHx8IG4tPm5vZGVUeXBlKCkg
PT0gTm9kZTo6Q0RBVEFfU0VDVElPTl9OT0RFKSB7CiAgICAgICAgICAgICBTdHJpbmcgZGF0YSA9
IHN0YXRpY19jYXN0PENoYXJhY3RlckRhdGEqPihuKS0+ZGF0YSgpOwogICAgICAgICAgICAgaW50
IGxlbmd0aCA9IGRhdGEubGVuZ3RoKCk7CkBAIC0xNTE3LDcgKzE1MTgsNyBAQCB2b2lkIFJhbmdl
OjpjaGVja0RlbGV0ZUV4dHJhY3QoRXhjZXB0aW9uCiAgICAgICAgIHJldHVybjsKICAgICAgICAg
CiAgICAgTm9kZSogcGFzdExhc3QgPSBwYXN0TGFzdE5vZGUoKTsKLSAgICBmb3IgKE5vZGUqIG4g
PSBmaXJzdE5vZGUoKTsgbiAhPSBwYXN0TGFzdDsgbiA9IG4tPnRyYXZlcnNlTmV4dE5vZGUoKSkg
eworICAgIGZvciAoTm9kZSogbiA9IGZpcnN0Tm9kZSgpOyBuICE9IHBhc3RMYXN0OyBuID0gTm9k
ZVRyYXZlcnNhbDo6bmV4dChuKSkgewogICAgICAgICBpZiAobi0+aXNSZWFkT25seU5vZGUoKSkg
ewogICAgICAgICAgICAgZWMgPSBOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlI7CiAgICAgICAg
ICAgICByZXR1cm47CkBAIC0xNTU3LDcgKzE1NTgsNyBAQCBOb2RlKiBSYW5nZTo6Zmlyc3ROb2Rl
KCkgY29uc3QKICAgICAgICAgcmV0dXJuIGNoaWxkOwogICAgIGlmICghbV9zdGFydC5vZmZzZXQo
KSkKICAgICAgICAgcmV0dXJuIG1fc3RhcnQuY29udGFpbmVyKCk7Ci0gICAgcmV0dXJuIG1fc3Rh
cnQuY29udGFpbmVyKCktPnRyYXZlcnNlTmV4dFNpYmxpbmcoKTsKKyAgICByZXR1cm4gTm9kZVRy
YXZlcnNhbDo6bmV4dFNpYmxpbmcobV9zdGFydC5jb250YWluZXIoKSk7CiB9CiAKIFNoYWRvd1Jv
b3QqIFJhbmdlOjpzaGFkb3dSb290KCkgY29uc3QKQEAgLTE1NzAsMTAgKzE1NzEsMTAgQEAgTm9k
ZSogUmFuZ2U6OnBhc3RMYXN0Tm9kZSgpIGNvbnN0CiAgICAgaWYgKCFtX3N0YXJ0LmNvbnRhaW5l
cigpIHx8ICFtX2VuZC5jb250YWluZXIoKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgaWYgKG1f
ZW5kLmNvbnRhaW5lcigpLT5vZmZzZXRJbkNoYXJhY3RlcnMoKSkKLSAgICAgICAgcmV0dXJuIG1f
ZW5kLmNvbnRhaW5lcigpLT50cmF2ZXJzZU5leHRTaWJsaW5nKCk7CisgICAgICAgIHJldHVybiBO
b2RlVHJhdmVyc2FsOjpuZXh0U2libGluZyhtX2VuZC5jb250YWluZXIoKSk7CiAgICAgaWYgKE5v
ZGUqIGNoaWxkID0gbV9lbmQuY29udGFpbmVyKCktPmNoaWxkTm9kZShtX2VuZC5vZmZzZXQoKSkp
CiAgICAgICAgIHJldHVybiBjaGlsZDsKLSAgICByZXR1cm4gbV9lbmQuY29udGFpbmVyKCktPnRy
YXZlcnNlTmV4dFNpYmxpbmcoKTsKKyAgICByZXR1cm4gTm9kZVRyYXZlcnNhbDo6bmV4dFNpYmxp
bmcobV9lbmQuY29udGFpbmVyKCkpOwogfQogCiBJbnRSZWN0IFJhbmdlOjpib3VuZGluZ0JveCgp
IGNvbnN0CkBAIC0xNjAyLDcgKzE2MDMsNyBAQCB2b2lkIFJhbmdlOjp0ZXh0UmVjdHMoVmVjdG9y
PEludFJlY3Q+JiByCiAgICAgYm9vbCBzb21lRml4ZWQgPSBmYWxzZTsKIAogICAgIE5vZGUqIHN0
b3BOb2RlID0gcGFzdExhc3ROb2RlKCk7Ci0gICAgZm9yIChOb2RlKiBub2RlID0gZmlyc3ROb2Rl
KCk7IG5vZGUgIT0gc3RvcE5vZGU7IG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKCkpIHsK
KyAgICBmb3IgKE5vZGUqIG5vZGUgPSBmaXJzdE5vZGUoKTsgbm9kZSAhPSBzdG9wTm9kZTsgbm9k
ZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9kZSkpIHsKICAgICAgICAgUmVuZGVyT2JqZWN0KiBy
ID0gbm9kZS0+cmVuZGVyZXIoKTsKICAgICAgICAgaWYgKCFyIHx8ICFyLT5pc1RleHQoKSkKICAg
ICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMTYzNCw3ICsxNjM1LDcgQEAgdm9pZCBSYW5nZTo6dGV4
dFF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+JgogICAgIGJvb2wgc29tZUZpeGVkID0gZmFsc2U7CiAK
ICAgICBOb2RlKiBzdG9wTm9kZSA9IHBhc3RMYXN0Tm9kZSgpOwotICAgIGZvciAoTm9kZSogbm9k
ZSA9IGZpcnN0Tm9kZSgpOyBub2RlICE9IHN0b3BOb2RlOyBub2RlID0gbm9kZS0+dHJhdmVyc2VO
ZXh0Tm9kZSgpKSB7CisgICAgZm9yIChOb2RlKiBub2RlID0gZmlyc3ROb2RlKCk7IG5vZGUgIT0g
c3RvcE5vZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUpKSB7CiAgICAgICAgIFJl
bmRlck9iamVjdCogciA9IG5vZGUtPnJlbmRlcmVyKCk7CiAgICAgICAgIGlmICghciB8fCAhci0+
aXNUZXh0KCkpCiAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTE5MDksMTIgKzE5MTAsMTIgQEAg
dm9pZCBSYW5nZTo6Z2V0Qm9yZGVyQW5kVGV4dFF1YWRzKFZlY3RvcgogICAgIE5vZGUqIHN0b3BO
b2RlID0gcGFzdExhc3ROb2RlKCk7CiAKICAgICBIYXNoU2V0PE5vZGUqPiBub2RlU2V0OwotICAg
IGZvciAoTm9kZSogbm9kZSA9IGZpcnN0Tm9kZSgpOyBub2RlICE9IHN0b3BOb2RlOyBub2RlID0g
bm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgpKSB7CisgICAgZm9yIChOb2RlKiBub2RlID0gZmlyc3RO
b2RlKCk7IG5vZGUgIT0gc3RvcE5vZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUp
KSB7CiAgICAgICAgIGlmIChub2RlLT5pc0VsZW1lbnROb2RlKCkpCiAgICAgICAgICAgICBub2Rl
U2V0LmFkZChub2RlKTsKICAgICB9CiAKLSAgICBmb3IgKE5vZGUqIG5vZGUgPSBmaXJzdE5vZGUo
KTsgbm9kZSAhPSBzdG9wTm9kZTsgbm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoKSkgewor
ICAgIGZvciAoTm9kZSogbm9kZSA9IGZpcnN0Tm9kZSgpOyBub2RlICE9IHN0b3BOb2RlOyBub2Rl
ID0gTm9kZVRyYXZlcnNhbDo6bmV4dChub2RlKSkgewogICAgICAgICBpZiAobm9kZS0+aXNFbGVt
ZW50Tm9kZSgpKSB7CiAgICAgICAgICAgICBpZiAoIW5vZGVTZXQuY29udGFpbnMobm9kZS0+cGFy
ZW50Tm9kZSgpKSkgewogICAgICAgICAgICAgICAgIGlmIChSZW5kZXJCb3hNb2RlbE9iamVjdCog
cmVuZGVyQm94TW9kZWxPYmplY3QgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSktPnJlbmRl
ckJveE1vZGVsT2JqZWN0KCkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9UcmVlU2NvcGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9UcmVlU2NvcGUuY3BwCShyZXZp
c2lvbiAxMzcxNzUpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vVHJlZVNjb3BlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDIsNiArNDIsNyBAQAogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1
ZGUgIklkVGFyZ2V0T2JzZXJ2ZXJSZWdpc3RyeS5oIgogI2luY2x1ZGUgIkluc2VydGlvblBvaW50
LmgiCisjaW5jbHVkZSAiTm9kZVRyYXZlcnNhbC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNs
dWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAjaW5jbHVkZSAiU2hhZG93Um9vdC5oIgpA
QCAtMTg2LDcgKzE4Nyw3IEBAIEhUTUxMYWJlbEVsZW1lbnQqIFRyZWVTY29wZTo6bGFiZWxFbGVt
ZW4KICAgICBpZiAoIW1fbGFiZWxzQnlGb3JBdHRyaWJ1dGUpIHsKICAgICAgICAgLy8gUG9wdWxh
dGUgdGhlIG1hcCBvbiBmaXJzdCBhY2Nlc3MuCiAgICAgICAgIG1fbGFiZWxzQnlGb3JBdHRyaWJ1
dGUgPSBhZG9wdFB0cihuZXcgRG9jdW1lbnRPcmRlcmVkTWFwKTsKLSAgICAgICAgZm9yIChOb2Rl
KiBub2RlID0gcm9vdE5vZGUoKTsgbm9kZTsgbm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUo
KSkgeworICAgICAgICBmb3IgKE5vZGUqIG5vZGUgPSByb290Tm9kZSgpOyBub2RlOyBub2RlID0g
Tm9kZVRyYXZlcnNhbDo6bmV4dChub2RlKSkgewogICAgICAgICAgICAgaWYgKG5vZGUtPmhhc1Rh
Z05hbWUobGFiZWxUYWcpKSB7CiAgICAgICAgICAgICAgICAgSFRNTExhYmVsRWxlbWVudCogbGFi
ZWwgPSBzdGF0aWNfY2FzdDxIVE1MTGFiZWxFbGVtZW50Kj4obm9kZSk7CiAgICAgICAgICAgICAg
ICAgY29uc3QgQXRvbWljU3RyaW5nJiBmb3JWYWx1ZSA9IGxhYmVsLT5mYXN0R2V0QXR0cmlidXRl
KGZvckF0dHIpOwpAQCAtMjMwLDcgKzIzMSw3IEBAIEVsZW1lbnQqIFRyZWVTY29wZTo6ZmluZEFu
Y2hvcihjb25zdCBTdHIKICAgICAgICAgcmV0dXJuIDA7CiAgICAgaWYgKEVsZW1lbnQqIGVsZW1l
bnQgPSBnZXRFbGVtZW50QnlJZChuYW1lKSkKICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7Ci0gICAg
Zm9yIChOb2RlKiBub2RlID0gcm9vdE5vZGUoKTsgbm9kZTsgbm9kZSA9IG5vZGUtPnRyYXZlcnNl
TmV4dE5vZGUoKSkgeworICAgIGZvciAoTm9kZSogbm9kZSA9IHJvb3ROb2RlKCk7IG5vZGU7IG5v
ZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUpKSB7CiAgICAgICAgIGlmIChub2RlLT5oYXNU
YWdOYW1lKGFUYWcpKSB7CiAgICAgICAgICAgICBIVE1MQW5jaG9yRWxlbWVudCogYW5jaG9yID0g
c3RhdGljX2Nhc3Q8SFRNTEFuY2hvckVsZW1lbnQqPihub2RlKTsKICAgICAgICAgICAgIGlmIChy
b290Tm9kZSgpLT5kb2N1bWVudCgpLT5pblF1aXJrc01vZGUoKSkgewpJbmRleDogU291cmNlL1dl
YkNvcmUvZG9tL1RyZWVTY29wZUFkb3B0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2RvbS9UcmVlU2NvcGVBZG9wdGVyLmNwcAkocmV2aXNpb24gMTM3MTc1KQorKysgU291cmNl
L1dlYkNvcmUvZG9tL1RyZWVTY29wZUFkb3B0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2
ICsyOSw3IEBACiAjaW5jbHVkZSAiRWxlbWVudFJhcmVEYXRhLmgiCiAjaW5jbHVkZSAiRWxlbWVu
dFNoYWRvdy5oIgogI2luY2x1ZGUgIk5vZGVSYXJlRGF0YS5oIgorI2luY2x1ZGUgIk5vZGVUcmF2
ZXJzYWwuaCIKICNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgIlNoYWRvd1Jvb3Qu
aCIKIApAQCAtNDgsNyArNDksNyBAQCB2b2lkIFRyZWVTY29wZUFkb3B0ZXI6Om1vdmVUcmVlVG9O
ZXdTY29wCiAgICAgaWYgKG9sZERvY3VtZW50ICYmIHdpbGxNb3ZlVG9OZXdEb2N1bWVudCkKICAg
ICAgICAgb2xkRG9jdW1lbnQtPmluY0RPTVRyZWVWZXJzaW9uKCk7CiAKLSAgICBmb3IgKE5vZGUq
IG5vZGUgPSByb290OyBub2RlOyBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZShyb290KSkg
eworICAgIGZvciAoTm9kZSogbm9kZSA9IHJvb3Q7IG5vZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2Fs
OjpuZXh0KG5vZGUsIHJvb3QpKSB7CiAgICAgICAgIG5vZGUtPnNldFRyZWVTY29wZShtX25ld1Nj
b3BlKTsKICAgICAgICAgaWYgKG5vZGUtPmhhc1JhcmVEYXRhKCkpIHsKICAgICAgICAgICAgIE5v
ZGVSYXJlRGF0YSogcmFyZURhdGEgPSBub2RlLT5yYXJlRGF0YSgpOwpAQCAtNjksNyArNzAsNyBA
QCB2b2lkIFRyZWVTY29wZUFkb3B0ZXI6Om1vdmVUcmVlVG9OZXdTY29wCiAKIHZvaWQgVHJlZVNj
b3BlQWRvcHRlcjo6bW92ZVRyZWVUb05ld0RvY3VtZW50KE5vZGUqIHJvb3QsIERvY3VtZW50KiBv
bGREb2N1bWVudCwgRG9jdW1lbnQqIG5ld0RvY3VtZW50KSBjb25zdAogewotICAgIGZvciAoTm9k
ZSogbm9kZSA9IHJvb3Q7IG5vZGU7IG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKHJvb3Qp
KSB7CisgICAgZm9yIChOb2RlKiBub2RlID0gcm9vdDsgbm9kZTsgbm9kZSA9IE5vZGVUcmF2ZXJz
YWw6Om5leHQobm9kZSwgcm9vdCkpIHsKICAgICAgICAgbW92ZU5vZGVUb05ld0RvY3VtZW50KG5v
ZGUsIG9sZERvY3VtZW50LCBuZXdEb2N1bWVudCk7CiAgICAgICAgIGZvciAoU2hhZG93Um9vdCog
c2hhZG93ID0gbm9kZS0+eW91bmdlc3RTaGFkb3dSb290KCk7IHNoYWRvdzsgc2hhZG93ID0gc2hh
ZG93LT5vbGRlclNoYWRvd1Jvb3QoKSkKICAgICAgICAgICAgIG1vdmVUcmVlVG9OZXdEb2N1bWVu
dChzaGFkb3csIG9sZERvY3VtZW50LCBuZXdEb2N1bWVudCk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9kb20vVHJlZVdhbGtlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1Ry
ZWVXYWxrZXIuY3BwCShyZXZpc2lvbiAxMzcxNzUpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vVHJl
ZVdhbGtlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJF
eGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiQ29udGFpbmVyTm9kZS5oIgogI2luY2x1ZGUgIk5v
ZGVGaWx0ZXIuaCIKKyNpbmNsdWRlICJOb2RlVHJhdmVyc2FsLmgiCiAjaW5jbHVkZSAiU2NyaXB0
U3RhdGUuaCIKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogCkBAIC0yNjMsNyArMjY0LDcg
QEAgQ2hpbGRyZW46CiAgICAgICAgIGlmIChhY2NlcHROb2RlUmVzdWx0ID09IE5vZGVGaWx0ZXI6
OkZJTFRFUl9SRUpFQ1QpCiAgICAgICAgICAgICBicmVhazsKICAgICB9Ci0gICAgd2hpbGUgKE5v
ZGUqIG5leHRTaWJsaW5nID0gbm9kZS0+dHJhdmVyc2VOZXh0U2libGluZyhyb290KCkpKSB7Cisg
ICAgd2hpbGUgKE5vZGUqIG5leHRTaWJsaW5nID0gTm9kZVRyYXZlcnNhbDo6bmV4dFNpYmxpbmco
bm9kZS5nZXQoKSwgcm9vdCgpKSkgewogICAgICAgICBub2RlID0gbmV4dFNpYmxpbmc7CiAgICAg
ICAgIHNob3J0IGFjY2VwdE5vZGVSZXN1bHQgPSBhY2NlcHROb2RlKHN0YXRlLCBub2RlLmdldCgp
KTsKICAgICAgICAgaWYgKHN0YXRlICYmIHN0YXRlLT5oYWRFeGNlcHRpb24oKSkKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCShyZXZpc2lvbiAx
MzcxNzUpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgIkhUTUxJbnRlcmNoYW5n
ZS5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIk5vZGVMaXN0LmgiCisjaW5j
bHVkZSAiTm9kZVRyYXZlcnNhbC5oIgogI2luY2x1ZGUgIlJhbmdlLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyT2JqZWN0LmgiCiAjaW5jbHVkZSAiUmVuZGVyVGV4dC5oIgpAQCAtMzUxLDI2ICszNTIsMjYg
QEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlSZWxhdGl2ZUZvbgogICAgIC8vIGFuIGFu
Y2VzdG9yIG9mIHRoZSBzdGFydCBub2RlKSwgd2UgZ2F0aGVyIG5vZGVzIHVwIHRvIHRoZSBuZXh0
IHNpYmxpbmcgb2YgdGhlIGVuZCBub2RlCiAgICAgTm9kZSAqYmV5b25kRW5kOwogICAgIGlmIChz
dGFydC5kZXByZWNhdGVkTm9kZSgpLT5pc0Rlc2NlbmRhbnRPZihlbmQuZGVwcmVjYXRlZE5vZGUo
KSkpCi0gICAgICAgIGJleW9uZEVuZCA9IGVuZC5kZXByZWNhdGVkTm9kZSgpLT50cmF2ZXJzZU5l
eHRTaWJsaW5nKCk7CisgICAgICAgIGJleW9uZEVuZCA9IE5vZGVUcmF2ZXJzYWw6Om5leHRTaWJs
aW5nKGVuZC5kZXByZWNhdGVkTm9kZSgpKTsKICAgICBlbHNlCi0gICAgICAgIGJleW9uZEVuZCA9
IGVuZC5kZXByZWNhdGVkTm9kZSgpLT50cmF2ZXJzZU5leHROb2RlKCk7CisgICAgICAgIGJleW9u
ZEVuZCA9IE5vZGVUcmF2ZXJzYWw6Om5leHQoZW5kLmRlcHJlY2F0ZWROb2RlKCkpOwogICAgIAog
ICAgIHN0YXJ0ID0gc3RhcnQudXBzdHJlYW0oKTsgLy8gTW92ZSB1cHN0cmVhbSB0byBlbnN1cmUg
d2UgZG8gbm90IGFkZCByZWR1bmRhbnQgc3BhbnMuCiAgICAgTm9kZSogc3RhcnROb2RlID0gc3Rh
cnQuZGVwcmVjYXRlZE5vZGUoKTsKICAgICBpZiAoc3RhcnROb2RlLT5pc1RleHROb2RlKCkgJiYg
c3RhcnQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSA+PSBjYXJldE1heE9mZnNldChzdGFydE5v
ZGUpKSAvLyBNb3ZlIG91dCBvZiB0ZXh0IG5vZGUgaWYgcmFuZ2UgZG9lcyBub3QgaW5jbHVkZSBp
dHMgY2hhcmFjdGVycy4KLSAgICAgICAgc3RhcnROb2RlID0gc3RhcnROb2RlLT50cmF2ZXJzZU5l
eHROb2RlKCk7CisgICAgICAgIHN0YXJ0Tm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQoc3RhcnRO
b2RlKTsKIAogICAgIC8vIFN0b3JlIGF3YXkgZm9udCBzaXplIGJlZm9yZSBtYWtpbmcgYW55IGNo
YW5nZXMgdG8gdGhlIGRvY3VtZW50LgogICAgIC8vIFRoaXMgZW5zdXJlcyB0aGF0IGNoYW5nZXMg
dG8gb25lIG5vZGUgd29uJ3QgZWZmZWN0IGFub3RoZXIuCiAgICAgSGFzaE1hcDxOb2RlKiwgZmxv
YXQ+IHN0YXJ0aW5nRm9udFNpemVzOwotICAgIGZvciAoTm9kZSAqbm9kZSA9IHN0YXJ0Tm9kZTsg
bm9kZSAhPSBiZXlvbmRFbmQ7IG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKCkpCisgICAg
Zm9yIChOb2RlICpub2RlID0gc3RhcnROb2RlOyBub2RlICE9IGJleW9uZEVuZDsgbm9kZSA9IE5v
ZGVUcmF2ZXJzYWw6Om5leHQobm9kZSkpCiAgICAgICAgIHN0YXJ0aW5nRm9udFNpemVzLnNldChu
b2RlLCBjb21wdXRlZEZvbnRTaXplKG5vZGUpKTsKIAogICAgIC8vIFRoZXNlIHNwYW5zIHdlcmUg
YWRkZWQgYnkgdXMuIElmIGVtcHR5IGFmdGVyIGZvbnQgc2l6ZSBjaGFuZ2VzLCB0aGV5IGNhbiBi
ZSByZW1vdmVkLgogICAgIFZlY3RvcjxSZWZQdHI8SFRNTEVsZW1lbnQ+ID4gdW5zdHlsZWRTcGFu
czsKICAgICAKICAgICBOb2RlKiBsYXN0U3R5bGVkTm9kZSA9IDA7Ci0gICAgZm9yIChOb2RlKiBu
b2RlID0gc3RhcnROb2RlOyBub2RlICE9IGJleW9uZEVuZDsgbm9kZSA9IG5vZGUtPnRyYXZlcnNl
TmV4dE5vZGUoKSkgeworICAgIGZvciAoTm9kZSogbm9kZSA9IHN0YXJ0Tm9kZTsgbm9kZSAhPSBi
ZXlvbmRFbmQ7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUpKSB7CiAgICAgICAgIFJl
ZlB0cjxIVE1MRWxlbWVudD4gZWxlbWVudDsKICAgICAgICAgaWYgKG5vZGUtPmlzSFRNTEVsZW1l
bnQoKSkgewogICAgICAgICAgICAgLy8gT25seSB3b3JrIG9uIGZ1bGx5IHNlbGVjdGVkIG5vZGVz
LgpAQCAtNjc0LDE5ICs2NzUsMTkgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6Zml4UmFuZ2VB
bmRBcHBseQogICAgIE5vZGUqIHN0YXJ0Tm9kZSA9IHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCk7CiAK
ICAgICBpZiAoc3RhcnQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSA+PSBjYXJldE1heE9mZnNl
dChzdGFydC5kZXByZWNhdGVkTm9kZSgpKSkgewotICAgICAgICBzdGFydE5vZGUgPSBzdGFydE5v
ZGUtPnRyYXZlcnNlTmV4dE5vZGUoKTsKKyAgICAgICAgc3RhcnROb2RlID0gTm9kZVRyYXZlcnNh
bDo6bmV4dChzdGFydE5vZGUpOwogICAgICAgICBpZiAoIXN0YXJ0Tm9kZSB8fCBjb21wYXJlUG9z
aXRpb25zKGVuZCwgZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKHN0YXJ0Tm9kZSkpIDwgMCkK
ICAgICAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBOb2RlKiBwYXN0RW5kTm9kZSA9IGVu
ZC5kZXByZWNhdGVkTm9kZSgpOwogICAgIGlmIChlbmQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQo
KSA+PSBjYXJldE1heE9mZnNldChlbmQuZGVwcmVjYXRlZE5vZGUoKSkpCi0gICAgICAgIHBhc3RF
bmROb2RlID0gZW5kLmRlcHJlY2F0ZWROb2RlKCktPnRyYXZlcnNlTmV4dFNpYmxpbmcoKTsKKyAg
ICAgICAgcGFzdEVuZE5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0U2libGluZyhlbmQuZGVwcmVj
YXRlZE5vZGUoKSk7CiAKICAgICAvLyBGSVhNRTogQ2FsbGVycyBzaG91bGQgcGVyZm9ybSB0aGlz
IG9wZXJhdGlvbiBvbiBhIFJhbmdlIHRoYXQgaW5jbHVkZXMgdGhlIGJyCiAgICAgLy8gaWYgdGhl
eSB3YW50IHN0eWxlIGFwcGxpZWQgdG8gdGhlIGVtcHR5IGxpbmUuCiAgICAgaWYgKHN0YXJ0ID09
IGVuZCAmJiBzdGFydC5kZXByZWNhdGVkTm9kZSgpLT5oYXNUYWdOYW1lKGJyVGFnKSkKLSAgICAg
ICAgcGFzdEVuZE5vZGUgPSBzdGFydC5kZXByZWNhdGVkTm9kZSgpLT50cmF2ZXJzZU5leHROb2Rl
KCk7CisgICAgICAgIHBhc3RFbmROb2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dChzdGFydC5kZXBy
ZWNhdGVkTm9kZSgpKTsKIAogICAgIC8vIFN0YXJ0IGZyb20gdGhlIGhpZ2hlc3QgZnVsbHkgc2Vs
ZWN0ZWQgYW5jZXN0b3Igc28gdGhhdCB3ZSBjYW4gbW9kaWZ5IHRoZSBmdWxseSBzZWxlY3RlZCBu
b2RlLgogICAgIC8vIGUuZy4gV2hlbiBhcHBseWluZyBmb250LXNpemU6IGxhcmdlIG9uIDxmb250
IGNvbG9yPSJibHVlIj5oZWxsbzwvZm9udD4sIHdlIG5lZWQgdG8gaW5jbHVkZSB0aGUgZm9udCBl
bGVtZW50IGluIG91ciBydW4KQEAgLTcwNiw4ICs3MDcsOCBAQCBzdGF0aWMgYm9vbCBjb250YWlu
c05vbkVkaXRhYmxlUmVnaW9uKE5vCiAgICAgaWYgKCFub2RlLT5yZW5kZXJlcklzRWRpdGFibGUo
KSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBOb2RlKiBzaWJsaW5nID0gbm9kZS0+dHJh
dmVyc2VOZXh0U2libGluZygpOwotICAgIGZvciAoTm9kZSogZGVzY2VuZGVudCA9IG5vZGUtPmZp
cnN0Q2hpbGQoKTsgZGVzY2VuZGVudCAmJiBkZXNjZW5kZW50ICE9IHNpYmxpbmc7IGRlc2NlbmRl
bnQgPSBkZXNjZW5kZW50LT50cmF2ZXJzZU5leHROb2RlKCkpIHsKKyAgICBOb2RlKiBzaWJsaW5n
ID0gTm9kZVRyYXZlcnNhbDo6bmV4dFNpYmxpbmcobm9kZSk7CisgICAgZm9yIChOb2RlKiBkZXNj
ZW5kZW50ID0gbm9kZS0+Zmlyc3RDaGlsZCgpOyBkZXNjZW5kZW50ICYmIGRlc2NlbmRlbnQgIT0g
c2libGluZzsgZGVzY2VuZGVudCA9IE5vZGVUcmF2ZXJzYWw6Om5leHQoZGVzY2VuZGVudCkpIHsK
ICAgICAgICAgaWYgKCFkZXNjZW5kZW50LT5yZW5kZXJlcklzRWRpdGFibGUoKSkKICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIH0KQEAgLTcyMiw3ICs3MjMsNyBAQCB2b2lkIEFwcGx5U3R5
bGVDb21tYW5kOjphcHBseUlubGluZVN0eWxlCiAKICAgICBSZWZQdHI8Tm9kZT4gbm9kZSA9IHN0
YXJ0Tm9kZTsKICAgICBmb3IgKFJlZlB0cjxOb2RlPiBuZXh0OyBub2RlICYmIG5vZGUgIT0gcGFz
dEVuZE5vZGU7IG5vZGUgPSBuZXh0KSB7Ci0gICAgICAgIG5leHQgPSBub2RlLT50cmF2ZXJzZU5l
eHROb2RlKCk7CisgICAgICAgIG5leHQgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUuZ2V0KCkp
OwogCiAgICAgICAgIGlmICghbm9kZS0+cmVuZGVyZXIoKSB8fCAhbm9kZS0+cmVuZGVyZXJJc0Vk
aXRhYmxlKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTczOCw3ICs3MzksNyBAQCB2b2lk
IEFwcGx5U3R5bGVDb21tYW5kOjphcHBseUlubGluZVN0eWxlCiAgICAgICAgICAgICBSZWZQdHI8
U3R5bGVQcm9wZXJ0eVNldD4gaW5saW5lU3R5bGUgPSBlbGVtZW50LT5lbnN1cmVNdXRhYmxlSW5s
aW5lU3R5bGUoKS0+Y29weSgpOwogICAgICAgICAgICAgaW5saW5lU3R5bGUtPm1lcmdlQW5kT3Zl
cnJpZGVPbkNvbmZsaWN0KHN0eWxlLT5zdHlsZSgpKTsKICAgICAgICAgICAgIHNldE5vZGVBdHRy
aWJ1dGUoZWxlbWVudCwgc3R5bGVBdHRyLCBpbmxpbmVTdHlsZS0+YXNUZXh0KCkpOwotICAgICAg
ICAgICAgbmV4dCA9IG5vZGUtPnRyYXZlcnNlTmV4dFNpYmxpbmcoKTsKKyAgICAgICAgICAgIG5l
eHQgPSBOb2RlVHJhdmVyc2FsOjpuZXh0U2libGluZyhub2RlLmdldCgpKTsKICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICB9CiAgICAgICAgIApAQCAtNzQ5LDcgKzc1MCw3IEBAIHZvaWQg
QXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5SW5saW5lU3R5bGUKICAgICAgICAgICAgIGlmIChub2Rl
LT5jb250YWlucyhwYXN0RW5kTm9kZS5nZXQoKSkgfHwgY29udGFpbnNOb25FZGl0YWJsZVJlZ2lv
bihub2RlLmdldCgpKSB8fCAhbm9kZS0+cGFyZW50Tm9kZSgpLT5yZW5kZXJlcklzRWRpdGFibGUo
KSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGlmIChlZGl0aW5nSWdu
b3Jlc0NvbnRlbnQobm9kZS5nZXQoKSkpIHsKLSAgICAgICAgICAgICAgICBuZXh0ID0gbm9kZS0+
dHJhdmVyc2VOZXh0U2libGluZygpOworICAgICAgICAgICAgICAgIG5leHQgPSBOb2RlVHJhdmVy
c2FsOjpuZXh0U2libGluZyhub2RlLmdldCgpKTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtNzYzLDcgKzc2NCw3IEBAIHZvaWQgQXBwbHlT
dHlsZUNvbW1hbmQ6OmFwcGx5SW5saW5lU3R5bGUKICAgICAgICAgICAgIHJ1bkVuZCA9IHNpYmxp
bmc7CiAgICAgICAgICAgICBzaWJsaW5nID0gcnVuRW5kLT5uZXh0U2libGluZygpOwogICAgICAg
ICB9Ci0gICAgICAgIG5leHQgPSBydW5FbmQtPnRyYXZlcnNlTmV4dFNpYmxpbmcoKTsKKyAgICAg
ICAgbmV4dCA9IE5vZGVUcmF2ZXJzYWw6Om5leHRTaWJsaW5nKHJ1bkVuZC5nZXQoKSk7CiAKICAg
ICAgICAgaWYgKCFyZW1vdmVTdHlsZUZyb21SdW5CZWZvcmVBcHBseWluZ1N0eWxlKHN0eWxlLCBy
dW5TdGFydCwgcnVuRW5kKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtNzgwLDkgKzc4MSw5
IEBAIGJvb2wgQXBwbHlTdHlsZUNvbW1hbmQ6OmlzU3R5bGVkSW5saW5lRWwKIGJvb2wgQXBwbHlT
dHlsZUNvbW1hbmQ6OnJlbW92ZVN0eWxlRnJvbVJ1bkJlZm9yZUFwcGx5aW5nU3R5bGUoRWRpdGlu
Z1N0eWxlKiBzdHlsZSwgUmVmUHRyPE5vZGU+JiBydW5TdGFydCwgUmVmUHRyPE5vZGU+JiBydW5F
bmQpCiB7CiAgICAgQVNTRVJUKHJ1blN0YXJ0ICYmIHJ1bkVuZCAmJiBydW5TdGFydC0+cGFyZW50
Tm9kZSgpID09IHJ1bkVuZC0+cGFyZW50Tm9kZSgpKTsKLSAgICBSZWZQdHI8Tm9kZT4gcGFzdEVu
ZE5vZGUgPSBydW5FbmQtPnRyYXZlcnNlTmV4dFNpYmxpbmcoKTsKKyAgICBSZWZQdHI8Tm9kZT4g
cGFzdEVuZE5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0U2libGluZyhydW5FbmQuZ2V0KCkpOwog
ICAgIGJvb2wgbmVlZFRvQXBwbHlTdHlsZSA9IGZhbHNlOwotICAgIGZvciAoTm9kZSogbm9kZSA9
IHJ1blN0YXJ0LmdldCgpOyBub2RlICYmIG5vZGUgIT0gcGFzdEVuZE5vZGUuZ2V0KCk7IG5vZGUg
PSBub2RlLT50cmF2ZXJzZU5leHROb2RlKCkpIHsKKyAgICBmb3IgKE5vZGUqIG5vZGUgPSBydW5T
dGFydC5nZXQoKTsgbm9kZSAmJiBub2RlICE9IHBhc3RFbmROb2RlLmdldCgpOyBub2RlID0gTm9k
ZVRyYXZlcnNhbDo6bmV4dChub2RlKSkgewogICAgICAgICBpZiAobm9kZS0+Y2hpbGROb2RlQ291
bnQoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAvLyBXZSBkb24ndCBjb25zaWRl
ciBtX2lzSW5saW5lRWxlbWVudFRvUmVtb3ZlRnVuY3Rpb24gaGVyZSBiZWNhdXNlIHdlIG5ldmVy
IGFwcGx5IHN0eWxlIHdoZW4gbV9pc0lubGluZUVsZW1lbnRUb1JlbW92ZUZ1bmN0aW9uIGlzIHNw
ZWNpZmllZApAQCAtNzk5LDkgKzgwMCw5IEBAIGJvb2wgQXBwbHlTdHlsZUNvbW1hbmQ6OnJlbW92
ZVN0eWxlRnJvbVIKICAgICBmb3IgKFJlZlB0cjxOb2RlPiBub2RlID0gbmV4dDsgbm9kZSAmJiBu
b2RlLT5pbkRvY3VtZW50KCkgJiYgbm9kZSAhPSBwYXN0RW5kTm9kZTsgbm9kZSA9IG5leHQpIHsK
ICAgICAgICAgaWYgKGVkaXRpbmdJZ25vcmVzQ29udGVudChub2RlLmdldCgpKSkgewogICAgICAg
ICAgICAgQVNTRVJUKCFub2RlLT5jb250YWlucyhwYXN0RW5kTm9kZS5nZXQoKSkpOwotICAgICAg
ICAgICAgbmV4dCA9IG5vZGUtPnRyYXZlcnNlTmV4dFNpYmxpbmcoKTsKKyAgICAgICAgICAgIG5l
eHQgPSBOb2RlVHJhdmVyc2FsOjpuZXh0U2libGluZyhub2RlLmdldCgpKTsKICAgICAgICAgfSBl
bHNlCi0gICAgICAgICAgICBuZXh0ID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgpOworICAgICAg
ICAgICAgbmV4dCA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9kZS5nZXQoKSk7CiAgICAgICAgIGlm
ICghbm9kZS0+aXNIVE1MRWxlbWVudCgpKQogICAgICAgICAgICAgY29udGludWU7CiAKQEAgLTEw
NTQsMTMgKzEwNTUsMTMgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6cmVtb3ZlSW5saW5lU3R5
bAogICAgICAgICBSZWZQdHI8Tm9kZT4gbmV4dDsKICAgICAgICAgaWYgKGVkaXRpbmdJZ25vcmVz
Q29udGVudChub2RlKSkgewogICAgICAgICAgICAgQVNTRVJUKG5vZGUgPT0gZW5kLmRlcHJlY2F0
ZWROb2RlKCkgfHwgIW5vZGUtPmNvbnRhaW5zKGVuZC5kZXByZWNhdGVkTm9kZSgpKSk7Ci0gICAg
ICAgICAgICBuZXh0ID0gbm9kZS0+dHJhdmVyc2VOZXh0U2libGluZygpOworICAgICAgICAgICAg
bmV4dCA9IE5vZGVUcmF2ZXJzYWw6Om5leHRTaWJsaW5nKG5vZGUpOwogICAgICAgICB9IGVsc2UK
LSAgICAgICAgICAgIG5leHQgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKCk7CisgICAgICAgICAg
ICBuZXh0ID0gTm9kZVRyYXZlcnNhbDo6bmV4dChub2RlKTsKICAgICAgICAgaWYgKG5vZGUtPmlz
SFRNTEVsZW1lbnQoKSAmJiBub2RlRnVsbHlTZWxlY3RlZChub2RlLCBzdGFydCwgZW5kKSkgewog
ICAgICAgICAgICAgUmVmUHRyPEhUTUxFbGVtZW50PiBlbGVtID0gdG9IVE1MRWxlbWVudChub2Rl
KTsKLSAgICAgICAgICAgIFJlZlB0cjxOb2RlPiBwcmV2ID0gZWxlbS0+dHJhdmVyc2VQcmV2aW91
c05vZGVQb3N0T3JkZXIoKTsKLSAgICAgICAgICAgIFJlZlB0cjxOb2RlPiBuZXh0ID0gZWxlbS0+
dHJhdmVyc2VOZXh0Tm9kZSgpOworICAgICAgICAgICAgUmVmUHRyPE5vZGU+IHByZXYgPSBOb2Rl
VHJhdmVyc2FsOjpwcmV2aW91c1Bvc3RPcmRlcihlbGVtLmdldCgpKTsKKyAgICAgICAgICAgIFJl
ZlB0cjxOb2RlPiBuZXh0ID0gTm9kZVRyYXZlcnNhbDo6bmV4dChlbGVtLmdldCgpKTsKICAgICAg
ICAgICAgIFJlZlB0cjxFZGl0aW5nU3R5bGU+IHN0eWxlVG9QdXNoRG93bjsKICAgICAgICAgICAg
IFJlZlB0cjxOb2RlPiBjaGlsZE5vZGU7CiAgICAgICAgICAgICBpZiAoaXNTdHlsZWRJbmxpbmVF
bGVtZW50VG9SZW1vdmUoZWxlbS5nZXQoKSkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvQnJlYWtCbG9ja3F1b3RlQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvZWRpdGluZy9CcmVha0Jsb2NrcXVvdGVDb21tYW5kLmNwcAkocmV2aXNpb24gMTM3MTc1KQor
KysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9CcmVha0Jsb2NrcXVvdGVDb21tYW5kLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSAiSFRNTEVsZW1lbnQuaCIK
ICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJOb2RlVHJhdmVyc2FsLmgiCiAjaW5j
bHVkZSAiUmVuZGVyTGlzdEl0ZW0uaCIKICNpbmNsdWRlICJUZXh0LmgiCiAjaW5jbHVkZSAiVmlz
aWJsZVBvc2l0aW9uLmgiCkBAIC0xMDksMTMgKzExMCwxMyBAQCB2b2lkIEJyZWFrQmxvY2txdW90
ZUNvbW1hbmQ6OmRvQXBwbHkoKQogICAgIGlmIChzdGFydE5vZGUtPmlzVGV4dE5vZGUoKSkgewog
ICAgICAgICBUZXh0KiB0ZXh0Tm9kZSA9IHRvVGV4dChzdGFydE5vZGUpOwogICAgICAgICBpZiAo
KHVuc2lnbmVkKXBvcy5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpID49IHRleHROb2RlLT5sZW5n
dGgoKSkgewotICAgICAgICAgICAgc3RhcnROb2RlID0gc3RhcnROb2RlLT50cmF2ZXJzZU5leHRO
b2RlKCk7CisgICAgICAgICAgICBzdGFydE5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KHN0YXJ0
Tm9kZSk7CiAgICAgICAgICAgICBBU1NFUlQoc3RhcnROb2RlKTsKICAgICAgICAgfSBlbHNlIGlm
IChwb3MuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSA+IDApCiAgICAgICAgICAgICBzcGxpdFRl
eHROb2RlKHRleHROb2RlLCBwb3MuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSk7CiAgICAgfSBl
bHNlIGlmIChwb3MuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSA+IDApIHsKICAgICAgICAgTm9k
ZSogY2hpbGRBdE9mZnNldCA9IHN0YXJ0Tm9kZS0+Y2hpbGROb2RlKHBvcy5kZXByZWNhdGVkRWRp
dGluZ09mZnNldCgpKTsKLSAgICAgICAgc3RhcnROb2RlID0gY2hpbGRBdE9mZnNldCA/IGNoaWxk
QXRPZmZzZXQgOiBzdGFydE5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoKTsKKyAgICAgICAgc3RhcnRO
b2RlID0gY2hpbGRBdE9mZnNldCA/IGNoaWxkQXRPZmZzZXQgOiBOb2RlVHJhdmVyc2FsOjpuZXh0
KHN0YXJ0Tm9kZSk7CiAgICAgICAgIEFTU0VSVChzdGFydE5vZGUpOwogICAgIH0KICAgICAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3Bw
CShyZXZpc2lvbiAxMzcxNzUpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVk
aXRDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsNiArNDUsNyBAQAogI2luY2x1ZGUg
Ikluc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQuaCIKICNpbmNsdWRlICJJbnNlcnRUZXh0
Q29tbWFuZC5oIgogI2luY2x1ZGUgIk1lcmdlSWRlbnRpY2FsRWxlbWVudHNDb21tYW5kLmgiCisj
aW5jbHVkZSAiTm9kZVRyYXZlcnNhbC5oIgogI2luY2x1ZGUgIlJhbmdlLmgiCiAjaW5jbHVkZSAi
UmVtb3ZlQ1NTUHJvcGVydHlDb21tYW5kLmgiCiAjaW5jbHVkZSAiUmVtb3ZlTm9kZUNvbW1hbmQu
aCIKQEAgLTgwOCw3ICs4MDksNyBAQCB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpkZWxldGVJ
bnNpZ25pCiAgICAgICAgIHJldHVybjsKIAogICAgIFZlY3RvcjxSZWZQdHI8VGV4dD4gPiBub2Rl
czsKLSAgICBmb3IgKE5vZGUqIG5vZGUgPSBzdGFydC5kZXByZWNhdGVkTm9kZSgpOyBub2RlOyBu
b2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgpKSB7CisgICAgZm9yIChOb2RlKiBub2RlID0g
c3RhcnQuZGVwcmVjYXRlZE5vZGUoKTsgbm9kZTsgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQo
bm9kZSkpIHsKICAgICAgICAgaWYgKG5vZGUtPmlzVGV4dE5vZGUoKSkKICAgICAgICAgICAgIG5v
ZGVzLmFwcGVuZCh0b1RleHQobm9kZSkpOwogICAgICAgICBpZiAobm9kZSA9PSBlbmQuZGVwcmVj
YXRlZE5vZGUoKSkKQEAgLTEwMjIsOSArMTAyMyw5IEBAIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1h
bmQ6OmNsb25lUGFyYWdyYXAKICAgICAgICAgfQogCiAgICAgICAgIE5vZGUqIHN0YXJ0Tm9kZSA9
IHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCk7Ci0gICAgICAgIGZvciAoTm9kZSogbm9kZSA9IHN0YXJ0
Tm9kZS0+dHJhdmVyc2VOZXh0U2libGluZyhvdXRlck5vZGUuZ2V0KCkpOyBub2RlOyBub2RlID0g
bm9kZS0+dHJhdmVyc2VOZXh0U2libGluZyhvdXRlck5vZGUuZ2V0KCkpKSB7CisgICAgICAgIGZv
ciAoTm9kZSogbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHRTaWJsaW5nKHN0YXJ0Tm9kZSwgb3V0
ZXJOb2RlLmdldCgpKTsgbm9kZTsgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHRTaWJsaW5nKG5v
ZGUsIG91dGVyTm9kZS5nZXQoKSkpIHsKICAgICAgICAgICAgIC8vIE1vdmUgbGFzdE5vZGUgdXAg
aW4gdGhlIHRyZWUgYXMgbXVjaCBhcyBub2RlIHdhcyBtb3ZlZCB1cCBpbiB0aGUKLSAgICAgICAg
ICAgIC8vIHRyZWUgYnkgdHJhdmVyc2VOZXh0U2libGluZywgc28gdGhhdCB0aGUgcmVsYXRpdmUg
ZGVwdGggYmV0d2VlbgorICAgICAgICAgICAgLy8gdHJlZSBieSBOb2RlVHJhdmVyc2FsOjpuZXh0
U2libGluZywgc28gdGhhdCB0aGUgcmVsYXRpdmUgZGVwdGggYmV0d2VlbgogICAgICAgICAgICAg
Ly8gbm9kZSBhbmQgdGhlIG9yaWdpbmFsIHN0YXJ0IG5vZGUgaXMgbWFpbnRhaW5lZCBpbiB0aGUg
Y2xvbmUuCiAgICAgICAgICAgICB3aGlsZSAoc3RhcnROb2RlLT5wYXJlbnROb2RlKCkgIT0gbm9k
ZS0+cGFyZW50Tm9kZSgpKSB7CiAgICAgICAgICAgICAgICAgc3RhcnROb2RlID0gc3RhcnROb2Rl
LT5wYXJlbnROb2RlKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVj
dGlvbkNvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVs
ZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAJKHJldmlzaW9uIDEzNzE3NSkKKysrIFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlICJodG1sZWRpdGluZy5oIgogI2luY2x1ZGUgIkhUTUxJ
bnB1dEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJOb2RlVHJh
dmVyc2FsLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGFibGVDZWxsLmgiCiAjaW5jbHVkZSAiVGV4dC5o
IgogI2luY2x1ZGUgInZpc2libGVfdW5pdHMuaCIKQEAgLTMyOSw3ICszMzAsNyBAQCBzdGF0aWMg
UG9zaXRpb24gZmlyc3RFZGl0YWJsZVBvc2l0aW9uSW5OCiAgICAgQVNTRVJUKG5vZGUpOwogICAg
IE5vZGUqIG5leHQgPSBub2RlOwogICAgIHdoaWxlIChuZXh0ICYmICFuZXh0LT5yZW5kZXJlcklz
RWRpdGFibGUoKSkKLSAgICAgICAgbmV4dCA9IG5leHQtPnRyYXZlcnNlTmV4dE5vZGUobm9kZSk7
CisgICAgICAgIG5leHQgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5leHQsIG5vZGUpOwogICAgIHJl
dHVybiBuZXh0ID8gZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKG5leHQpIDogUG9zaXRpb24o
KTsKIH0KIApAQCAtNDIxLDkgKzQyMiw5IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6
bWFrZVN0eWxpbmcKICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gbV9zZWxlY3Rpb25Ub0RlbGV0
ZS50b05vcm1hbGl6ZWRSYW5nZSgpOwogICAgIFJlZlB0cjxOb2RlPiBub2RlID0gcmFuZ2UtPmZp
cnN0Tm9kZSgpOwogICAgIHdoaWxlIChub2RlICYmIG5vZGUgIT0gcmFuZ2UtPnBhc3RMYXN0Tm9k
ZSgpKSB7Ci0gICAgICAgIFJlZlB0cjxOb2RlPiBuZXh0Tm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4
dE5vZGUoKTsKKyAgICAgICAgUmVmUHRyPE5vZGU+IG5leHROb2RlID0gTm9kZVRyYXZlcnNhbDo6
bmV4dChub2RlLmdldCgpKTsKICAgICAgICAgaWYgKChub2RlLT5oYXNUYWdOYW1lKHN0eWxlVGFn
KSAmJiAhKHRvRWxlbWVudChub2RlLmdldCgpKS0+aGFzQXR0cmlidXRlKHNjb3BlZEF0dHIpKSkg
fHwgbm9kZS0+aGFzVGFnTmFtZShsaW5rVGFnKSkgewotICAgICAgICAgICAgbmV4dE5vZGUgPSBu
b2RlLT50cmF2ZXJzZU5leHRTaWJsaW5nKCk7CisgICAgICAgICAgICBuZXh0Tm9kZSA9IE5vZGVU
cmF2ZXJzYWw6Om5leHRTaWJsaW5nKG5vZGUuZ2V0KCkpOwogICAgICAgICAgICAgUmVmUHRyPENv
bnRhaW5lck5vZGU+IHJvb3RFZGl0YWJsZUVsZW1lbnQgPSBub2RlLT5yb290RWRpdGFibGVFbGVt
ZW50KCk7CiAgICAgICAgICAgICByZW1vdmVOb2RlKG5vZGUpOwogICAgICAgICAgICAgYXBwZW5k
Tm9kZShub2RlLCByb290RWRpdGFibGVFbGVtZW50KTsKQEAgLTQ0NSw3ICs0NDYsNyBAQCB2b2lk
IERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmhhbmRsZUdlbmVyCiAgICAgLy8gTmV2ZXIgcmVtb3Zl
IHRoZSBzdGFydCBibG9jayB1bmxlc3MgaXQncyBhIHRhYmxlLCBpbiB3aGljaCBjYXNlIHdlIHdv
bid0IG1lcmdlIGNvbnRlbnQgaW4uCiAgICAgaWYgKHN0YXJ0Tm9kZSA9PSBtX3N0YXJ0QmxvY2sg
JiYgc3RhcnRPZmZzZXQgPT0gMCAmJiBjYW5IYXZlQ2hpbGRyZW5Gb3JFZGl0aW5nKHN0YXJ0Tm9k
ZSkgJiYgIXN0YXJ0Tm9kZS0+aGFzVGFnTmFtZSh0YWJsZVRhZykpIHsKICAgICAgICAgc3RhcnRP
ZmZzZXQgPSAwOwotICAgICAgICBzdGFydE5vZGUgPSBzdGFydE5vZGUtPnRyYXZlcnNlTmV4dE5v
ZGUoKTsKKyAgICAgICAgc3RhcnROb2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dChzdGFydE5vZGUp
OwogICAgICAgICBpZiAoIXN0YXJ0Tm9kZSkKICAgICAgICAgICAgIHJldHVybjsKICAgICB9CkBA
IC00NTcsNyArNDU4LDcgQEAgdm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpoYW5kbGVHZW5l
cgogICAgIH0KIAogICAgIGlmIChzdGFydE9mZnNldCA+PSBsYXN0T2Zmc2V0Rm9yRWRpdGluZyhz
dGFydE5vZGUpKSB7Ci0gICAgICAgIHN0YXJ0Tm9kZSA9IHN0YXJ0Tm9kZS0+dHJhdmVyc2VOZXh0
U2libGluZygpOworICAgICAgICBzdGFydE5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0U2libGlu
ZyhzdGFydE5vZGUpOwogICAgICAgICBzdGFydE9mZnNldCA9IDA7CiAgICAgfQogCkBAIC00OTEs
NyArNDkyLDcgQEAgdm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpoYW5kbGVHZW5lcgogICAg
ICAgICAgICAgICAgIC8vIGluIGEgdGV4dCBub2RlIHRoYXQgbmVlZHMgdG8gYmUgdHJpbW1lZAog
ICAgICAgICAgICAgICAgIFRleHQqIHRleHQgPSB0b1RleHQobm9kZS5nZXQoKSk7CiAgICAgICAg
ICAgICAgICAgZGVsZXRlVGV4dEZyb21Ob2RlKHRleHQsIHN0YXJ0T2Zmc2V0LCB0ZXh0LT5sZW5n
dGgoKSAtIHN0YXJ0T2Zmc2V0KTsKLSAgICAgICAgICAgICAgICBub2RlID0gbm9kZS0+dHJhdmVy
c2VOZXh0Tm9kZSgpOworICAgICAgICAgICAgICAgIG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0
KG5vZGUuZ2V0KCkpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBub2Rl
ID0gc3RhcnROb2RlLT5jaGlsZE5vZGUoc3RhcnRPZmZzZXQpOwogICAgICAgICAgICAgfQpAQCAt
NTAzLDEwICs1MDQsMTAgQEAgdm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpoYW5kbGVHZW5l
cgogICAgICAgICAvLyBoYW5kbGUgZGVsZXRpbmcgYWxsIG5vZGVzIHRoYXQgYXJlIGNvbXBsZXRl
bHkgc2VsZWN0ZWQKICAgICAgICAgd2hpbGUgKG5vZGUgJiYgbm9kZSAhPSBtX2Rvd25zdHJlYW1F
bmQuZGVwcmVjYXRlZE5vZGUoKSkgewogICAgICAgICAgICAgaWYgKGNvbXBhcmVQb3NpdGlvbnMo
Zmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKG5vZGUuZ2V0KCkpLCBtX2Rvd25zdHJlYW1FbmQp
ID49IDApIHsKLSAgICAgICAgICAgICAgICAvLyB0cmF2ZXJzZU5leHRTaWJsaW5nIGp1c3QgYmxl
dyBwYXN0IHRoZSBlbmQgcG9zaXRpb24sIHNvIHN0b3AgZGVsZXRpbmcKKyAgICAgICAgICAgICAg
ICAvLyBOb2RlVHJhdmVyc2FsOjpuZXh0U2libGluZyBqdXN0IGJsZXcgcGFzdCB0aGUgZW5kIHBv
c2l0aW9uLCBzbyBzdG9wIGRlbGV0aW5nCiAgICAgICAgICAgICAgICAgbm9kZSA9IDA7CiAgICAg
ICAgICAgICB9IGVsc2UgaWYgKCFtX2Rvd25zdHJlYW1FbmQuZGVwcmVjYXRlZE5vZGUoKS0+aXNE
ZXNjZW5kYW50T2Yobm9kZS5nZXQoKSkpIHsKLSAgICAgICAgICAgICAgICBSZWZQdHI8Tm9kZT4g
bmV4dE5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHRTaWJsaW5nKCk7CisgICAgICAgICAgICAgICAg
UmVmUHRyPE5vZGU+IG5leHROb2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dFNpYmxpbmcobm9kZS5n
ZXQoKSk7CiAgICAgICAgICAgICAgICAgLy8gaWYgd2UganVzdCByZW1vdmVkIGEgbm9kZSBmcm9t
IHRoZSBlbmQgY29udGFpbmVyLCB1cGRhdGUgZW5kIHBvc2l0aW9uIHNvIHRoZQogICAgICAgICAg
ICAgICAgIC8vIGNoZWNrIGFib3ZlIHdpbGwgd29yawogICAgICAgICAgICAgICAgIHVwZGF0ZVBv
c2l0aW9uRm9yTm9kZVJlbW92YWwobV9kb3duc3RyZWFtRW5kLCBub2RlLmdldCgpKTsKQEAgLTUx
OCw3ICs1MTksNyBAQCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmhhbmRsZUdlbmVyCiAg
ICAgICAgICAgICAgICAgICAgIHJlbW92ZU5vZGUobm9kZS5nZXQoKSk7CiAgICAgICAgICAgICAg
ICAgICAgIG5vZGUgPSAwOwogICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAg
ICAgICBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgpOworICAgICAgICAgICAgICAgICAg
ICBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dChub2RlLmdldCgpKTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgfQogICAgICAgICAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdENv
bW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdENvbW1h
bmQuY3BwCShyZXZpc2lvbiAxMzcxNzUpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRD
b21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIkV2
ZW50TmFtZXMuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lU2VsZWN0aW9u
LmgiCisjaW5jbHVkZSAiTm9kZVRyYXZlcnNhbC5oIgogI2luY2x1ZGUgIlZpc2libGVQb3NpdGlv
bi5oIgogI2luY2x1ZGUgImh0bWxlZGl0aW5nLmgiCiAKQEAgLTExOCw3ICsxMTksNyBAQCB2b2lk
IFNpbXBsZUVkaXRDb21tYW5kOjpkb1JlYXBwbHkoKQogI2lmbmRlZiBOREVCVUcKIHZvaWQgU2lt
cGxlRWRpdENvbW1hbmQ6OmFkZE5vZGVBbmREZXNjZW5kYW50cyhOb2RlKiBzdGFydE5vZGUsIEhh
c2hTZXQ8Tm9kZSo+JiBub2RlcykKIHsKLSAgICBmb3IgKE5vZGUqIG5vZGUgPSBzdGFydE5vZGU7
IG5vZGU7IG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKHN0YXJ0Tm9kZSkpCisgICAgZm9y
IChOb2RlKiBub2RlID0gc3RhcnROb2RlOyBub2RlOyBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4
dChub2RlLCBzdGFydE5vZGUpKQogICAgICAgICBub2Rlcy5hZGQobm9kZSk7CiB9CiAjZW5kaWYK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHAJKHJldmlzaW9uIDEz
NzE3NSkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDAsNiArNDAsNyBAQAogI2luY2x1ZGUgIkhUTUxJbnRlcmNoYW5nZS5oIgog
I2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIk5vZGUuaCIKKyNpbmNsdWRlICJOb2Rl
VHJhdmVyc2FsLmgiCiAjaW5jbHVkZSAiUG9zaXRpb24uaCIKICNpbmNsdWRlICJRdWFsaWZpZWRO
YW1lLmgiCiAjaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKQEAgLTY4MSw3ICs2ODIsNyBAQCBUcmlT
dGF0ZSBFZGl0aW5nU3R5bGU6OnRyaVN0YXRlT2ZTdHlsZShjCiAgICAgICAgIHJldHVybiB0cmlT
dGF0ZU9mU3R5bGUoRWRpdGluZ1N0eWxlOjpzdHlsZUF0U2VsZWN0aW9uU3RhcnQoc2VsZWN0aW9u
KS5nZXQoKSk7CiAKICAgICBUcmlTdGF0ZSBzdGF0ZSA9IEZhbHNlVHJpU3RhdGU7Ci0gICAgZm9y
IChOb2RlKiBub2RlID0gc2VsZWN0aW9uLnN0YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKTsgbm9kZTsg
bm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoKSkgeworICAgIGZvciAoTm9kZSogbm9kZSA9
IHNlbGVjdGlvbi5zdGFydCgpLmRlcHJlY2F0ZWROb2RlKCk7IG5vZGU7IG5vZGUgPSBOb2RlVHJh
dmVyc2FsOjpuZXh0KG5vZGUpKSB7CiAgICAgICAgIFJlZlB0cjxDU1NDb21wdXRlZFN0eWxlRGVj
bGFyYXRpb24+IG5vZGVTdHlsZSA9IENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbjo6Y3JlYXRl
KG5vZGUpOwogICAgICAgICBpZiAobm9kZVN0eWxlKSB7CiAgICAgICAgICAgICBUcmlTdGF0ZSBu
b2RlU3RhdGUgPSB0cmlTdGF0ZU9mU3R5bGUobm9kZVN0eWxlLmdldCgpLCBub2RlLT5pc1RleHRO
b2RlKCkgPyBFZGl0aW5nU3R5bGU6OkRvTm90SWdub3JlVGV4dE9ubHlQcm9wZXJ0aWVzIDogRWRp
dGluZ1N0eWxlOjpJZ25vcmVUZXh0T25seVByb3BlcnRpZXMpOwpAQCAtMTI0OCw3ICsxMjQ5LDcg
QEAgV3JpdGluZ0RpcmVjdGlvbiBFZGl0aW5nU3R5bGU6OnRleHREaXJlYwogICAgICAgICBlbmQg
PSBzZWxlY3Rpb24uZW5kKCkudXBzdHJlYW0oKTsKIAogICAgICAgICBOb2RlKiBwYXN0TGFzdCA9
IFJhbmdlOjpjcmVhdGUoZW5kLmRvY3VtZW50KCksIHBvc2l0aW9uLnBhcmVudEFuY2hvcmVkRXF1
aXZhbGVudCgpLCBlbmQucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCkpLT5wYXN0TGFzdE5vZGUo
KTsKLSAgICAgICAgZm9yIChOb2RlKiBuID0gbm9kZTsgbiAmJiBuICE9IHBhc3RMYXN0OyBuID0g
bi0+dHJhdmVyc2VOZXh0Tm9kZSgpKSB7CisgICAgICAgIGZvciAoTm9kZSogbiA9IG5vZGU7IG4g
JiYgbiAhPSBwYXN0TGFzdDsgbiA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobikpIHsKICAgICAgICAg
ICAgIGlmICghbi0+aXNTdHlsZWRFbGVtZW50KCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAJKHJldmlzaW9uIDEzNzE3NSkKKysr
IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjIs
NiArNjIsNyBAQAogI2luY2x1ZGUgIktpbGxSaW5nLmgiCiAjaW5jbHVkZSAiTW9kaWZ5U2VsZWN0
aW9uTGlzdExldmVsLmgiCiAjaW5jbHVkZSAiTm9kZUxpc3QuaCIKKyNpbmNsdWRlICJOb2RlVHJh
dmVyc2FsLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlBhc3RlYm9hcmQuaCIKICNp
bmNsdWRlICJSZW1vdmVGb3JtYXRDb21tYW5kLmgiCkBAIC0xMDY3LDEyICsxMDY4LDEyIEBAIHZv
aWQgRWRpdG9yOjpzaW1wbGlmeU1hcmt1cChOb2RlKiBzdGFydE4KICAgICAgICAgLy8gY2hlY2sg
aWYgc3RhcnQgbm9kZSBpcyBiZWZvcmUgZW5kTm9kZQogICAgICAgICBOb2RlKiBub2RlID0gc3Rh
cnROb2RlOwogICAgICAgICB3aGlsZSAobm9kZSAmJiBub2RlICE9IGVuZE5vZGUpCi0gICAgICAg
ICAgICBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgpOworICAgICAgICAgICAgbm9kZSA9
IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9kZSk7CiAgICAgICAgIGlmICghbm9kZSkKICAgICAgICAg
ICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAgYXBwbHlDb21tYW5kKFNpbXBsaWZ5TWFya3Vw
Q29tbWFuZDo6Y3JlYXRlKG1fZnJhbWUtPmRvY3VtZW50KCksIHN0YXJ0Tm9kZSwgKGVuZE5vZGUp
ID8gZW5kTm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgpIDogMCkpOworICAgIGFwcGx5Q29tbWFuZChT
aW1wbGlmeU1hcmt1cENvbW1hbmQ6OmNyZWF0ZShtX2ZyYW1lLT5kb2N1bWVudCgpLCBzdGFydE5v
ZGUsIChlbmROb2RlKSA/IE5vZGVUcmF2ZXJzYWw6Om5leHQoZW5kTm9kZSkgOiAwKSk7CiB9CiAK
IHZvaWQgRWRpdG9yOjpjb3B5VVJMKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiB0aXRs
ZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwCShyZXZp
c2lvbiAxMzcxNzUpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDgsNiArNDgsNyBAQAogI2luY2x1ZGUgIkhpdFRlc3RSZXF1
ZXN0LmgiCiAjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgogI2luY2x1ZGUgIklubGluZVRleHRC
b3guaCIKKyNpbmNsdWRlICJOb2RlVHJhdmVyc2FsLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2lu
Y2x1ZGUgIlJhbmdlLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGV4dC5oIgpAQCAtMTk1Miw3ICsxOTUz
LDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6Z2V0Q2xpcHBlZFZpc2libGVUZQogLy8gU2NhbnMg
bG9naWNhbGx5IGZvcndhcmQgZnJvbSAic3RhcnQiLCBpbmNsdWRpbmcgYW55IGNoaWxkIGZyYW1l
cy4KIHN0YXRpYyBIVE1MRm9ybUVsZW1lbnQqIHNjYW5Gb3JGb3JtKE5vZGUqIHN0YXJ0KQogewot
ICAgIGZvciAoTm9kZSogbm9kZSA9IHN0YXJ0OyBub2RlOyBub2RlID0gbm9kZS0+dHJhdmVyc2VO
ZXh0Tm9kZSgpKSB7CisgICAgZm9yIChOb2RlKiBub2RlID0gc3RhcnQ7IG5vZGU7IG5vZGUgPSBO
b2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUpKSB7CiAgICAgICAgIGlmIChub2RlLT5oYXNUYWdOYW1l
KGZvcm1UYWcpKQogICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxGb3JtRWxlbWVu
dCo+KG5vZGUpOwogICAgICAgICBpZiAobm9kZS0+aXNIVE1MRWxlbWVudCgpICYmIHRvSFRNTEVs
ZW1lbnQobm9kZSktPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpCkBAIC0yMDI1LDcgKzIwMjYsNyBA
QCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpzZXRTZWxlY3Rpb25Gcm9tTm9uCiAKICAgICBOb2RlKiBu
b2RlID0gZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudCgpOwogICAgIHdoaWxlIChub2RlICYmICFu
b2RlLT5oYXNUYWdOYW1lKGJvZHlUYWcpKQotICAgICAgICBub2RlID0gbm9kZS0+dHJhdmVyc2VO
ZXh0Tm9kZSgpOworICAgICAgICBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dChub2RlKTsKICAg
ICBpZiAobm9kZSkKICAgICAgICAgc2V0U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24oZmlyc3RQ
b3NpdGlvbkluT3JCZWZvcmVOb2RlKG5vZGUpLCBET1dOU1RSRUFNKSk7CiB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0UGFyYWdyYXBoU2VwYXJh
dG9yQ29tbWFuZC5jcHAJKHJldmlzaW9uIDEzNzE3NSkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvSW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxO
YW1lcy5oIgogI2luY2x1ZGUgIkluc2VydExpbmVCcmVha0NvbW1hbmQuaCIKKyNpbmNsdWRlICJO
b2RlVHJhdmVyc2FsLmgiCiAjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCiAjaW5jbHVkZSAiVGV4
dC5oIgogI2luY2x1ZGUgImh0bWxlZGl0aW5nLmgiCkBAIC0zNjYsNyArMzY3LDcgQEAgdm9pZCBJ
bnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kOjpkbwogICAgICAgICBlbHNlIHsKICAgICAg
ICAgICAgIE5vZGUqIHNwbGl0VG8gPSBpbnNlcnRpb25Qb3NpdGlvbi5jb250YWluZXJOb2RlKCk7
CiAgICAgICAgICAgICBpZiAoc3BsaXRUby0+aXNUZXh0Tm9kZSgpICYmIGluc2VydGlvblBvc2l0
aW9uLm9mZnNldEluQ29udGFpbmVyTm9kZSgpID49IGNhcmV0TWF4T2Zmc2V0KHNwbGl0VG8pKQot
ICAgICAgICAgICAgICBzcGxpdFRvID0gc3BsaXRUby0+dHJhdmVyc2VOZXh0Tm9kZShzdGFydEJs
b2NrLmdldCgpKTsKKyAgICAgICAgICAgICAgICBzcGxpdFRvID0gTm9kZVRyYXZlcnNhbDo6bmV4
dChzcGxpdFRvLCBzdGFydEJsb2NrLmdldCgpKTsKICAgICAgICAgICAgIEFTU0VSVChzcGxpdFRv
KTsKICAgICAgICAgICAgIHNwbGl0VHJlZVRvTm9kZShzcGxpdFRvLCBzdGFydEJsb2NrLmdldCgp
KTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFu
ZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0
aW9uQ29tbWFuZC5jcHAJKHJldmlzaW9uIDEzNzE3NSkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw2ICs0
NSw3IEBACiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiTm9kZUxpc3QuaCIKICNp
bmNsdWRlICJOb2RlUmVuZGVyU3R5bGUuaCIKKyNpbmNsdWRlICJOb2RlVHJhdmVyc2FsLmgiCiAj
aW5jbHVkZSAiUmVuZGVySW5saW5lLmgiCiAjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCiAjaW5j
bHVkZSAiUmVuZGVyVGV4dC5oIgpAQCAtMjg5LDcgKzI5MCw3IEBAIHZvaWQgUmVwbGFjZW1lbnRG
cmFnbWVudDo6cmVtb3ZlVW5yZW5kZXIKIHsKICAgICBWZWN0b3I8UmVmUHRyPE5vZGU+ID4gdW5y
ZW5kZXJlZDsKIAotICAgIGZvciAoTm9kZSogbm9kZSA9IGhvbGRlci0+Zmlyc3RDaGlsZCgpOyBu
b2RlOyBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZShob2xkZXIpKQorICAgIGZvciAoTm9k
ZSogbm9kZSA9IGhvbGRlci0+Zmlyc3RDaGlsZCgpOyBub2RlOyBub2RlID0gTm9kZVRyYXZlcnNh
bDo6bmV4dChub2RlLCBob2xkZXIpKQogICAgICAgICBpZiAoIWlzTm9kZVJlbmRlcmVkKG5vZGUp
ICYmICFpc1RhYmxlU3RydWN0dXJlTm9kZShub2RlKSkKICAgICAgICAgICAgIHVucmVuZGVyZWQu
YXBwZW5kKG5vZGUpOwogCkBAIC0zMzAsOSArMzMxLDkgQEAgdm9pZCBSZXBsYWNlbWVudEZyYWdt
ZW50OjpyZW1vdmVJbnRlcmNoYQogICAgIAogICAgIG5vZGUgPSBjb250YWluZXItPmZpcnN0Q2hp
bGQoKTsKICAgICB3aGlsZSAobm9kZSkgewotICAgICAgICBSZWZQdHI8Tm9kZT4gbmV4dCA9IG5v
ZGUtPnRyYXZlcnNlTmV4dE5vZGUoKTsKKyAgICAgICAgUmVmUHRyPE5vZGU+IG5leHQgPSBOb2Rl
VHJhdmVyc2FsOjpuZXh0KG5vZGUpOwogICAgICAgICBpZiAoaXNJbnRlcmNoYW5nZUNvbnZlcnRl
ZFNwYWNlU3Bhbihub2RlKSkgewotICAgICAgICAgICAgbmV4dCA9IG5vZGUtPnRyYXZlcnNlTmV4
dFNpYmxpbmcoKTsKKyAgICAgICAgICAgIG5leHQgPSBOb2RlVHJhdmVyc2FsOjpuZXh0U2libGlu
Zyhub2RlKTsKICAgICAgICAgICAgIHJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW4obm9kZSk7
CiAgICAgICAgIH0KICAgICAgICAgbm9kZSA9IG5leHQuZ2V0KCk7CkBAIC0zNTMsOSArMzU0LDkg
QEAgaW5saW5lIHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OklucwogaW5saW5lIHZvaWQg
UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6Okluc2VydGVkTm9kZXM6OndpbGxSZW1vdmVOb2RlUHJl
c2VydmluZ0NoaWxkcmVuKE5vZGUqIG5vZGUpCiB7CiAgICAgaWYgKG1fZmlyc3ROb2RlSW5zZXJ0
ZWQgPT0gbm9kZSkKLSAgICAgICAgbV9maXJzdE5vZGVJbnNlcnRlZCA9IG5vZGUtPnRyYXZlcnNl
TmV4dE5vZGUoKTsKKyAgICAgICAgbV9maXJzdE5vZGVJbnNlcnRlZCA9IE5vZGVUcmF2ZXJzYWw6
Om5leHQobm9kZSk7CiAgICAgaWYgKG1fbGFzdE5vZGVJbnNlcnRlZCA9PSBub2RlKQotICAgICAg
ICBtX2xhc3ROb2RlSW5zZXJ0ZWQgPSBub2RlLT5sYXN0Q2hpbGQoKSA/IG5vZGUtPmxhc3RDaGls
ZCgpIDogbm9kZS0+dHJhdmVyc2VOZXh0U2libGluZygpOworICAgICAgICBtX2xhc3ROb2RlSW5z
ZXJ0ZWQgPSBub2RlLT5sYXN0Q2hpbGQoKSA/IG5vZGUtPmxhc3RDaGlsZCgpIDogTm9kZVRyYXZl
cnNhbDo6bmV4dFNpYmxpbmcobm9kZSk7CiB9CiAKIGlubGluZSB2b2lkIFJlcGxhY2VTZWxlY3Rp
b25Db21tYW5kOjpJbnNlcnRlZE5vZGVzOjp3aWxsUmVtb3ZlTm9kZShOb2RlKiBub2RlKQpAQCAt
MzY0LDkgKzM2NSw5IEBAIGlubGluZSB2b2lkIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpJbnMK
ICAgICAgICAgbV9maXJzdE5vZGVJbnNlcnRlZCA9IDA7CiAgICAgICAgIG1fbGFzdE5vZGVJbnNl
cnRlZCA9IDA7CiAgICAgfSBlbHNlIGlmIChtX2ZpcnN0Tm9kZUluc2VydGVkID09IG5vZGUpCi0g
ICAgICAgIG1fZmlyc3ROb2RlSW5zZXJ0ZWQgPSBtX2ZpcnN0Tm9kZUluc2VydGVkLT50cmF2ZXJz
ZU5leHRTaWJsaW5nKCk7CisgICAgICAgIG1fZmlyc3ROb2RlSW5zZXJ0ZWQgPSBOb2RlVHJhdmVy
c2FsOjpuZXh0U2libGluZyhtX2ZpcnN0Tm9kZUluc2VydGVkLmdldCgpKTsKICAgICBlbHNlIGlm
IChtX2xhc3ROb2RlSW5zZXJ0ZWQgPT0gbm9kZSkKLSAgICAgICAgbV9sYXN0Tm9kZUluc2VydGVk
ID0gbV9sYXN0Tm9kZUluc2VydGVkLT50cmF2ZXJzZVByZXZpb3VzU2libGluZygpOworICAgICAg
ICBtX2xhc3ROb2RlSW5zZXJ0ZWQgPSBOb2RlVHJhdmVyc2FsOjpwcmV2aW91c1NpYmxpbmcobV9s
YXN0Tm9kZUluc2VydGVkLmdldCgpKTsKIH0KIAogUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OlJl
cGxhY2VTZWxlY3Rpb25Db21tYW5kKERvY3VtZW50KiBkb2N1bWVudCwgUGFzc1JlZlB0cjxEb2N1
bWVudEZyYWdtZW50PiBmcmFnbWVudCwgQ29tbWFuZE9wdGlvbnMgb3B0aW9ucywgRWRpdEFjdGlv
biBlZGl0QWN0aW9uKQpAQCAtNDgwLDcgKzQ4MSw3IEBAIHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNv
bW1hbmQ6OnJlbW92ZVJlZHUKICAgICBmb3IgKFJlZlB0cjxOb2RlPiBub2RlID0gaW5zZXJ0ZWRO
b2Rlcy5maXJzdE5vZGVJbnNlcnRlZCgpOyBub2RlICYmIG5vZGUgIT0gcGFzdEVuZE5vZGU7IG5v
ZGUgPSBuZXh0KSB7CiAgICAgICAgIC8vIEZJWE1FOiA8cmRhcjovL3Byb2JsZW0vNTM3MTUzNj4g
U3R5bGUgcnVsZXMgdGhhdCBtYXRjaCBwYXN0ZWQgY29udGVudCBjYW4gY2hhbmdlIGl0J3MgYXBw
ZWFyYW5jZQogCi0gICAgICAgIG5leHQgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKCk7CisgICAg
ICAgIG5leHQgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUuZ2V0KCkpOwogICAgICAgICBpZiAo
IW5vZGUtPmlzU3R5bGVkRWxlbWVudCgpKQogICAgICAgICAgICAgY29udGludWU7CiAKQEAgLTU5
NSwxMCArNTk2LDEwIEBAIHN0YXRpYyB2b2lkIHJlbW92ZUhlYWRDb250ZW50cyhSZXBsYWNlbWUK
ICAgICAgICAgICAgIHx8IG5vZGUtPmhhc1RhZ05hbWUobWV0YVRhZykKICAgICAgICAgICAgIHx8
IG5vZGUtPmhhc1RhZ05hbWUoc3R5bGVUYWcpCiAgICAgICAgICAgICB8fCBub2RlLT5oYXNUYWdO
YW1lKHRpdGxlVGFnKSkgewotICAgICAgICAgICAgbmV4dCA9IG5vZGUtPnRyYXZlcnNlTmV4dFNp
YmxpbmcoKTsKKyAgICAgICAgICAgIG5leHQgPSBOb2RlVHJhdmVyc2FsOjpuZXh0U2libGluZyhu
b2RlKTsKICAgICAgICAgICAgIGZyYWdtZW50LnJlbW92ZU5vZGUobm9kZSk7CiAgICAgICAgIH0g
ZWxzZQotICAgICAgICAgICAgbmV4dCA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoKTsKKyAgICAg
ICAgICAgIG5leHQgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUpOwogICAgIH0KIH0KIApAQCAt
NjQ1LDcgKzY0Niw3IEBAIHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmhhbmRsZVN0eWwK
ICAgICAvLyBUaGUgc3R5bGUgc3BhbiB0aGF0IGNvbnRhaW5zIHRoZSBzb3VyY2UgZG9jdW1lbnQn
cyBkZWZhdWx0IHN0eWxlIHNob3VsZCBiZSBhdAogICAgIC8vIHRoZSB0b3Agb2YgdGhlIGZyYWdt
ZW50LCBidXQgTWFpbCBzb21ldGltZXMgYWRkcyBhIHdyYXBwZXIgKGZvciBQYXN0ZSBBcyBRdW90
YXRpb24pLAogICAgIC8vIHNvIHNlYXJjaCBmb3IgdGhlIHRvcCBsZXZlbCBzdHlsZSBzcGFuIGlu
c3RlYWQgb2YgYXNzdW1pbmcgaXQncyBhdCB0aGUgdG9wLgotICAgIGZvciAoTm9kZSogbm9kZSA9
IGluc2VydGVkTm9kZXMuZmlyc3ROb2RlSW5zZXJ0ZWQoKTsgbm9kZTsgbm9kZSA9IG5vZGUtPnRy
YXZlcnNlTmV4dE5vZGUoKSkgeworICAgIGZvciAoTm9kZSogbm9kZSA9IGluc2VydGVkTm9kZXMu
Zmlyc3ROb2RlSW5zZXJ0ZWQoKTsgbm9kZTsgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9k
ZSkpIHsKICAgICAgICAgaWYgKGlzTGVnYWN5QXBwbGVTdHlsZVNwYW4obm9kZSkpIHsKICAgICAg
ICAgICAgIHdyYXBwaW5nU3R5bGVTcGFuID0gdG9IVE1MRWxlbWVudChub2RlKTsKICAgICAgICAg
ICAgIGJyZWFrOwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9u
Q29tbWFuZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNl
bGVjdGlvbkNvbW1hbmQuaAkocmV2aXNpb24gMTM3MTc1KQorKysgU291cmNlL1dlYkNvcmUvZWRp
dGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsy
Nyw3IEBACiAjZGVmaW5lIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kX2gKIAogI2luY2x1ZGUgIkNv
bXBvc2l0ZUVkaXRDb21tYW5kLmgiCisjaW5jbHVkZSAiTm9kZVRyYXZlcnNhbC5oIgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKQEAgLTY1LDcgKzY2LDcgQEAgcHJpdmF0ZToKIAogICAgICAgICBO
b2RlKiBmaXJzdE5vZGVJbnNlcnRlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZmlyc3ROb2RlSW5zZXJ0
ZWQuZ2V0KCk7IH0KICAgICAgICAgTm9kZSogbGFzdExlYWZJbnNlcnRlZCgpIGNvbnN0IHsgcmV0
dXJuIG1fbGFzdE5vZGVJbnNlcnRlZC0+bGFzdERlc2NlbmRhbnQoKTsgfQotICAgICAgICBOb2Rl
KiBwYXN0TGFzdExlYWYoKSBjb25zdCB7IHJldHVybiBtX2xhc3ROb2RlSW5zZXJ0ZWQgPyBsYXN0
TGVhZkluc2VydGVkKCktPnRyYXZlcnNlTmV4dE5vZGUoKSA6IDA7IH0KKyAgICAgICAgTm9kZSog
cGFzdExhc3RMZWFmKCkgY29uc3QgeyByZXR1cm4gbV9sYXN0Tm9kZUluc2VydGVkID8gTm9kZVRy
YXZlcnNhbDo6bmV4dChsYXN0TGVhZkluc2VydGVkKCkpIDogMDsgfQogCiAgICAgcHJpdmF0ZToK
ICAgICAgICAgUmVmUHRyPE5vZGU+IG1fZmlyc3ROb2RlSW5zZXJ0ZWQ7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL1NpbXBsaWZ5TWFya3VwQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvZWRpdGluZy9TaW1wbGlmeU1hcmt1cENvbW1hbmQuY3BwCShyZXZpc2lv
biAxMzcxNzUpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NpbXBsaWZ5TWFya3VwQ29tbWFu
ZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJTaW1wbGlm
eU1hcmt1cENvbW1hbmQuaCIKIAogI2luY2x1ZGUgIk5vZGVSZW5kZXJTdHlsZS5oIgorI2luY2x1
ZGUgIk5vZGVUcmF2ZXJzYWwuaCIKICNpbmNsdWRlICJSZW5kZXJJbmxpbmUuaCIKICNpbmNsdWRl
ICJSZW5kZXJPYmplY3QuaCIKICNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgpAQCAtNDcsNyArNDgs
NyBAQCB2b2lkIFNpbXBsaWZ5TWFya3VwQ29tbWFuZDo6ZG9BcHBseSgpCiAgICAgLy8gd2l0aG91
dCBhZmZlY3RpbmcgdGhlIHN0eWxlLiBUaGUgZ29hbCBpcyB0byBwcm9kdWNlIGxlYW5lciBtYXJr
dXAgZXZlbiB3aGVuIHN0YXJ0aW5nCiAgICAgLy8gZnJvbSBhIHZlcmJvc2UgZnJhZ21lbnQuCiAg
ICAgLy8gV2UgbG9vayBhdCBpbmxpbmUgZWxlbWVudHMgYXMgd2VsbCBhcyBub24gdG9wIGxldmVs
IGRpdnMgdGhhdCBkb24ndCBoYXZlIGF0dHJpYnV0ZXMuIAotICAgIGZvciAoTm9kZSogbm9kZSA9
IG1fZmlyc3ROb2RlLmdldCgpOyBub2RlICYmIG5vZGUgIT0gbV9ub2RlQWZ0ZXJMYXN0OyBub2Rl
ID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgpKSB7CisgICAgZm9yIChOb2RlKiBub2RlID0gbV9m
aXJzdE5vZGUuZ2V0KCk7IG5vZGUgJiYgbm9kZSAhPSBtX25vZGVBZnRlckxhc3Q7IG5vZGUgPSBO
b2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUpKSB7CiAgICAgICAgIGlmIChub2RlLT5maXJzdENoaWxk
KCkgfHwgKG5vZGUtPmlzVGV4dE5vZGUoKSAmJiBub2RlLT5uZXh0U2libGluZygpKSkKICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
VGV4dEl0ZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Rl
eHRJdGVyYXRvci5jcHAJKHJldmlzaW9uIDEzNzE3NSkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvVGV4dEl0ZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQAogI2lu
Y2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgImh0bWxlZGl0aW5nLmgiCiAjaW5jbHVkZSAi
SW5saW5lVGV4dEJveC5oIgorI2luY2x1ZGUgIk5vZGVUcmF2ZXJzYWwuaCIKICNpbmNsdWRlICJS
YW5nZS5oIgogI2luY2x1ZGUgIlJlbmRlclRhYmxlQ2VsbC5oIgogI2luY2x1ZGUgIlJlbmRlclRh
YmxlUm93LmgiCkBAIC00MjUsNyArNDI2LDcgQEAgdm9pZCBUZXh0SXRlcmF0b3I6OmFkdmFuY2Uo
KQogICAgICAgICBpZiAoIW5leHQpIHsKICAgICAgICAgICAgIG5leHQgPSBtX25vZGUtPm5leHRT
aWJsaW5nKCk7CiAgICAgICAgICAgICBpZiAoIW5leHQpIHsKLSAgICAgICAgICAgICAgICBib29s
IHBhc3RFbmQgPSBtX25vZGUtPnRyYXZlcnNlTmV4dE5vZGUoKSA9PSBtX3Bhc3RFbmROb2RlOwor
ICAgICAgICAgICAgICAgIGJvb2wgcGFzdEVuZCA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobV9ub2Rl
KSA9PSBtX3Bhc3RFbmROb2RlOwogICAgICAgICAgICAgICAgIE5vZGUqIHBhcmVudE5vZGUgPSBt
X25vZGUtPnBhcmVudE9ySG9zdE5vZGUoKTsKICAgICAgICAgICAgICAgICB3aGlsZSAoIW5leHQg
JiYgcGFyZW50Tm9kZSkgewogICAgICAgICAgICAgICAgICAgICBpZiAoKHBhc3RFbmQgJiYgcGFy
ZW50Tm9kZSA9PSBtX2VuZENvbnRhaW5lcikgfHwgbV9lbmRDb250YWluZXItPmlzRGVzY2VuZGFu
dE9mKHBhcmVudE5vZGUpKQpAQCAtODA1LDcgKzgwNiw3IEBAIHN0YXRpYyBib29sIHNob3VsZEVt
aXROZXdsaW5lQWZ0ZXJOb2RlKE4KICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIC8vIENoZWNr
IGlmIHRoaXMgaXMgdGhlIHZlcnkgbGFzdCByZW5kZXJlciBpbiB0aGUgZG9jdW1lbnQuCiAgICAg
Ly8gSWYgc28sIHRoZW4gd2Ugc2hvdWxkIG5vdCBlbWl0IGEgbmV3bGluZS4KLSAgICB3aGlsZSAo
KG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHRTaWJsaW5nKCkpKQorICAgIHdoaWxlICgobm9kZSA9
IE5vZGVUcmF2ZXJzYWw6Om5leHRTaWJsaW5nKG5vZGUpKSkKICAgICAgICAgaWYgKG5vZGUtPnJl
bmRlcmVyKCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICByZXR1cm4gZmFsc2U7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAkocmV2aXNpb24gMTM3MTc1
KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQxLDYgKzQxLDcgQEAKICNpbmNsdWRlICJIVE1MT0xpc3RFbGVtZW50LmgiCiAjaW5j
bHVkZSAiSFRNTFBhcmFncmFwaEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MVUxpc3RFbGVtZW50
LmgiCisjaW5jbHVkZSAiTm9kZVRyYXZlcnNhbC5oIgogI2luY2x1ZGUgIlBvc2l0aW9uSXRlcmF0
b3IuaCIKICNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKICNpbmNsdWRlICJSYW5nZS5oIgpAQCAt
NjQ1LDEyICs2NDYsMTIgQEAgc3RhdGljIGJvb2wgaGFzQVJlbmRlcmVkRGVzY2VuZGFudChOb2Rl
KgogewogICAgIGZvciAoTm9kZSogbiA9IG5vZGUtPmZpcnN0Q2hpbGQoKTsgbjspIHsKICAgICAg
ICAgaWYgKG4gPT0gZXhjbHVkZWROb2RlKSB7Ci0gICAgICAgICAgICBuID0gbi0+dHJhdmVyc2VO
ZXh0U2libGluZyhub2RlKTsKKyAgICAgICAgICAgIG4gPSBOb2RlVHJhdmVyc2FsOjpuZXh0U2li
bGluZyhuLCBub2RlKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAgICAgICAg
IGlmIChuLT5yZW5kZXJlcigpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIG4g
PSBuLT50cmF2ZXJzZU5leHROb2RlKG5vZGUpOworICAgICAgICBuID0gTm9kZVRyYXZlcnNhbDo6
bmV4dChuLCBub2RlKTsKICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwogfQpJbmRleDogU291cmNl
L1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvbWFya3VwLmNwcAkocmV2aXNpb24gMTM3MTc1KQorKysgU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9tYXJrdXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw2ICs1MSw3IEBACiAjaW5j
bHVkZSAiSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQuaCIKICNpbmNsdWRlICJLVVJMLmgiCiAj
aW5jbHVkZSAiTWFya3VwQWNjdW11bGF0b3IuaCIKKyNpbmNsdWRlICJOb2RlVHJhdmVyc2FsLmgi
CiAjaW5jbHVkZSAiUmFuZ2UuaCIKICNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKICNpbmNsdWRl
ICJTdHlsZVByb3BlcnR5U2V0LmgiCkBAIC0xMDEsOCArMTAyLDggQEAgc3RhdGljIHZvaWQgY29t
cGxldGVVUkxzKE5vZGUqIG5vZGUsIGNvbgogCiAgICAgS1VSTCBwYXJzZWRCYXNlVVJMKFBhcnNl
ZFVSTFN0cmluZywgYmFzZVVSTCk7CiAKLSAgICBOb2RlKiBlbmQgPSBub2RlLT50cmF2ZXJzZU5l
eHRTaWJsaW5nKCk7Ci0gICAgZm9yIChOb2RlKiBuID0gbm9kZTsgbiAhPSBlbmQ7IG4gPSBuLT50
cmF2ZXJzZU5leHROb2RlKCkpIHsKKyAgICBOb2RlKiBlbmQgPSBOb2RlVHJhdmVyc2FsOjpuZXh0
U2libGluZyhub2RlKTsKKyAgICBmb3IgKE5vZGUqIG4gPSBub2RlOyBuICE9IGVuZDsgbiA9IE5v
ZGVUcmF2ZXJzYWw6Om5leHQobikpIHsKICAgICAgICAgaWYgKG4tPmlzRWxlbWVudE5vZGUoKSkg
ewogICAgICAgICAgICAgRWxlbWVudCogZSA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihuKTsKICAg
ICAgICAgICAgIGlmICghZS0+aGFzQXR0cmlidXRlcygpKQpAQCAtMzY1LDcgKzM2Niw3IEBAIE5v
ZGUqIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjp0cmF2ZXJzZU4KICAgICAgICAgaWYgKCFuKQog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIAotICAgICAgICBuZXh0ID0gbi0+dHJhdmVyc2VO
ZXh0Tm9kZSgpOworICAgICAgICBuZXh0ID0gTm9kZVRyYXZlcnNhbDo6bmV4dChuKTsKICAgICAg
ICAgYm9vbCBvcGVuZWRUYWcgPSBmYWxzZTsKIAogICAgICAgICBpZiAoaXNCbG9jayhuKSAmJiBj
YW5IYXZlQ2hpbGRyZW5Gb3JFZGl0aW5nKG4pICYmIG5leHQgPT0gcGFzdEVuZCkKQEAgLTM3Myw3
ICszNzQsNyBAQCBOb2RlKiBTdHlsZWRNYXJrdXBBY2N1bXVsYXRvcjo6dHJhdmVyc2VOCiAgICAg
ICAgICAgICBjb250aW51ZTsKIAogICAgICAgICBpZiAoIW4tPnJlbmRlcmVyKCkgJiYgIWVuY2xv
c2luZ05vZGVXaXRoVGFnKGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9kZShuKSwgc2VsZWN0VGFn
KSkgewotICAgICAgICAgICAgbmV4dCA9IG4tPnRyYXZlcnNlTmV4dFNpYmxpbmcoKTsKKyAgICAg
ICAgICAgIG5leHQgPSBOb2RlVHJhdmVyc2FsOjpuZXh0U2libGluZyhuKTsKICAgICAgICAgICAg
IC8vIERvbid0IHNraXAgb3ZlciBwYXN0RW5kLgogICAgICAgICAgICAgaWYgKHBhc3RFbmQgJiYg
cGFzdEVuZC0+aXNEZXNjZW5kYW50T2YobikpCiAgICAgICAgICAgICAgICAgbmV4dCA9IHBhc3RF
bmQ7CkBAIC02NzgsNyArNjc5LDcgQEAgc3RhdGljIGNvbnN0IGNoYXIgZnJhZ21lbnRNYXJrZXJU
YWdbXSA9IAogCiBzdGF0aWMgYm9vbCBmaW5kTm9kZXNTdXJyb3VuZGluZ0NvbnRleHQoRG9jdW1l
bnQqIGRvY3VtZW50LCBSZWZQdHI8Tm9kZT4mIG5vZGVCZWZvcmVDb250ZXh0LCBSZWZQdHI8Tm9k
ZT4mIG5vZGVBZnRlckNvbnRleHQpCiB7Ci0gICAgZm9yIChOb2RlKiBub2RlID0gZG9jdW1lbnQt
PmZpcnN0Q2hpbGQoKTsgbm9kZTsgbm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoKSkgewor
ICAgIGZvciAoTm9kZSogbm9kZSA9IGRvY3VtZW50LT5maXJzdENoaWxkKCk7IG5vZGU7IG5vZGUg
PSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUpKSB7CiAgICAgICAgIGlmIChub2RlLT5ub2RlVHlw
ZSgpID09IE5vZGU6OkNPTU1FTlRfTk9ERSAmJiBzdGF0aWNfY2FzdDxDaGFyYWN0ZXJEYXRhKj4o
bm9kZSktPmRhdGEoKSA9PSBmcmFnbWVudE1hcmtlclRhZykgewogICAgICAgICAgICAgaWYgKCFu
b2RlQmVmb3JlQ29udGV4dCkKICAgICAgICAgICAgICAgICBub2RlQmVmb3JlQ29udGV4dCA9IG5v
ZGU7CkBAIC02OTcsMTAgKzY5OCwxMCBAQCBzdGF0aWMgdm9pZCB0cmltRnJhZ21lbnQoRG9jdW1l
bnRGcmFnbWVuCiAgICAgUmVmUHRyPE5vZGU+IG5leHQ7CiAgICAgZm9yIChSZWZQdHI8Tm9kZT4g
bm9kZSA9IGZyYWdtZW50LT5maXJzdENoaWxkKCk7IG5vZGU7IG5vZGUgPSBuZXh0KSB7CiAgICAg
ICAgIGlmIChub2RlQmVmb3JlQ29udGV4dC0+aXNEZXNjZW5kYW50T2Yobm9kZS5nZXQoKSkpIHsK
LSAgICAgICAgICAgIG5leHQgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKCk7CisgICAgICAgICAg
ICBuZXh0ID0gTm9kZVRyYXZlcnNhbDo6bmV4dChub2RlLmdldCgpKTsKICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICB9Ci0gICAgICAgIG5leHQgPSBub2RlLT50cmF2ZXJzZU5leHRTaWJs
aW5nKCk7CisgICAgICAgIG5leHQgPSBOb2RlVHJhdmVyc2FsOjpuZXh0U2libGluZyhub2RlLmdl
dCgpKTsKICAgICAgICAgQVNTRVJUKCFub2RlLT5jb250YWlucyhub2RlQWZ0ZXJDb250ZXh0KSk7
CiAgICAgICAgIG5vZGUtPnBhcmVudE5vZGUoKS0+cmVtb3ZlQ2hpbGQobm9kZS5nZXQoKSwgZWMp
OwogICAgICAgICBpZiAobm9kZUJlZm9yZUNvbnRleHQgPT0gbm9kZSkKQEAgLTcwOSw3ICs3MTAs
NyBAQCBzdGF0aWMgdm9pZCB0cmltRnJhZ21lbnQoRG9jdW1lbnRGcmFnbWVuCiAKICAgICBBU1NF
UlQobm9kZUFmdGVyQ29udGV4dC0+cGFyZW50Tm9kZSgpKTsKICAgICBmb3IgKFJlZlB0cjxOb2Rl
PiBub2RlID0gbm9kZUFmdGVyQ29udGV4dDsgbm9kZTsgbm9kZSA9IG5leHQpIHsKLSAgICAgICAg
bmV4dCA9IG5vZGUtPnRyYXZlcnNlTmV4dFNpYmxpbmcoKTsKKyAgICAgICAgbmV4dCA9IE5vZGVU
cmF2ZXJzYWw6Om5leHRTaWJsaW5nKG5vZGUuZ2V0KCkpOwogICAgICAgICBub2RlLT5wYXJlbnRO
b2RlKCktPnJlbW92ZUNoaWxkKG5vZGUuZ2V0KCksIGVjKTsKICAgICAgICAgQVNTRVJUKCFlYyk7
CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy92aXNpYmxlX3VuaXRzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL3Zpc2libGVfdW5pdHMuY3BwCShy
ZXZpc2lvbiAxMzcxNzUpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL3Zpc2libGVfdW5pdHMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiRWxlbWVudC5o
IgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIklubGluZVRleHRCb3guaCIKKyNp
bmNsdWRlICJOb2RlVHJhdmVyc2FsLmgiCiAjaW5jbHVkZSAiUG9zaXRpb24uaCIKICNpbmNsdWRl
ICJSZW5kZXJCbG9jay5oIgogI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgpAQCAtMTExNiwxOCAr
MTExNywxOCBAQCBWaXNpYmxlUG9zaXRpb24gc3RhcnRPZlBhcmFncmFwaChjb25zdCBWCiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgaWYgKGJvdW5kYXJ5Q3Jvc3NpbmdSdWxlID09IENhblNr
aXBPdmVyRWRpdGluZ0JvdW5kYXJ5KSB7CiAgICAgICAgICAgICB3aGlsZSAobiAmJiBuLT5yZW5k
ZXJlcklzRWRpdGFibGUoKSAhPSBzdGFydE5vZGUtPnJlbmRlcmVySXNFZGl0YWJsZSgpKQotICAg
ICAgICAgICAgICAgIG4gPSBuLT50cmF2ZXJzZVByZXZpb3VzTm9kZVBvc3RPcmRlcihzdGFydEJs
b2NrKTsKKyAgICAgICAgICAgICAgICBuID0gTm9kZVRyYXZlcnNhbDo6cHJldmlvdXNQb3N0T3Jk
ZXIobiwgc3RhcnRCbG9jayk7CiAgICAgICAgICAgICBpZiAoIW4gfHwgIW4tPmlzRGVzY2VuZGFu
dE9mKGhpZ2hlc3RSb290KSkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAg
ICAgICBSZW5kZXJPYmplY3QgKnIgPSBuLT5yZW5kZXJlcigpOwogICAgICAgICBpZiAoIXIpIHsK
LSAgICAgICAgICAgIG4gPSBuLT50cmF2ZXJzZVByZXZpb3VzTm9kZVBvc3RPcmRlcihzdGFydEJs
b2NrKTsKKyAgICAgICAgICAgIG4gPSBOb2RlVHJhdmVyc2FsOjpwcmV2aW91c1Bvc3RPcmRlcihu
LCBzdGFydEJsb2NrKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAgICAgICAg
IFJlbmRlclN0eWxlICpzdHlsZSA9IHItPnN0eWxlKCk7CiAgICAgICAgIGlmIChzdHlsZS0+dmlz
aWJpbGl0eSgpICE9IFZJU0lCTEUpIHsKLSAgICAgICAgICAgIG4gPSBuLT50cmF2ZXJzZVByZXZp
b3VzTm9kZVBvc3RPcmRlcihzdGFydEJsb2NrKTsKKyAgICAgICAgICAgIG4gPSBOb2RlVHJhdmVy
c2FsOjpwcmV2aW91c1Bvc3RPcmRlcihuLCBzdGFydEJsb2NrKTsKICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICB9CiAgICAgICAgIApAQCAtMTE1MCwxMyArMTE1MSwxMyBAQCBWaXNpYmxl
UG9zaXRpb24gc3RhcnRPZlBhcmFncmFwaChjb25zdCBWCiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICBub2RlID0gbjsKICAgICAgICAgICAgIG9mZnNldCA9IDA7Ci0gICAgICAgICAgICBuID0g
bi0+dHJhdmVyc2VQcmV2aW91c05vZGVQb3N0T3JkZXIoc3RhcnRCbG9jayk7CisgICAgICAgICAg
ICBuID0gTm9kZVRyYXZlcnNhbDo6cHJldmlvdXNQb3N0T3JkZXIobiwgc3RhcnRCbG9jayk7CiAg
ICAgICAgIH0gZWxzZSBpZiAoZWRpdGluZ0lnbm9yZXNDb250ZW50KG4pIHx8IGlzVGFibGVFbGVt
ZW50KG4pKSB7CiAgICAgICAgICAgICBub2RlID0gbjsKICAgICAgICAgICAgIHR5cGUgPSBQb3Np
dGlvbjo6UG9zaXRpb25Jc0JlZm9yZUFuY2hvcjsKLSAgICAgICAgICAgIG4gPSBuLT5wcmV2aW91
c1NpYmxpbmcoKSA/IG4tPnByZXZpb3VzU2libGluZygpIDogbi0+dHJhdmVyc2VQcmV2aW91c05v
ZGVQb3N0T3JkZXIoc3RhcnRCbG9jayk7CisgICAgICAgICAgICBuID0gbi0+cHJldmlvdXNTaWJs
aW5nKCkgPyBuLT5wcmV2aW91c1NpYmxpbmcoKSA6IE5vZGVUcmF2ZXJzYWw6OnByZXZpb3VzUG9z
dE9yZGVyKG4sIHN0YXJ0QmxvY2spOwogICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIG4gPSBu
LT50cmF2ZXJzZVByZXZpb3VzTm9kZVBvc3RPcmRlcihzdGFydEJsb2NrKTsKKyAgICAgICAgICAg
IG4gPSBOb2RlVHJhdmVyc2FsOjpwcmV2aW91c1Bvc3RPcmRlcihuLCBzdGFydEJsb2NrKTsKICAg
ICB9CiAKICAgICBpZiAodHlwZSA9PSBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9y
KSB7CkBAIC0xMTk2LDE5ICsxMTk3LDE5IEBAIFZpc2libGVQb3NpdGlvbiBlbmRPZlBhcmFncmFw
aChjb25zdCBWaXMKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBpZiAoYm91bmRhcnlDcm9z
c2luZ1J1bGUgPT0gQ2FuU2tpcE92ZXJFZGl0aW5nQm91bmRhcnkpIHsKICAgICAgICAgICAgIHdo
aWxlIChuICYmIG4tPnJlbmRlcmVySXNFZGl0YWJsZSgpICE9IHN0YXJ0Tm9kZS0+cmVuZGVyZXJJ
c0VkaXRhYmxlKCkpCi0gICAgICAgICAgICAgICAgbiA9IG4tPnRyYXZlcnNlTmV4dE5vZGUoc3Rh
eUluc2lkZUJsb2NrKTsKKyAgICAgICAgICAgICAgICBuID0gTm9kZVRyYXZlcnNhbDo6bmV4dChu
LCBzdGF5SW5zaWRlQmxvY2spOwogICAgICAgICAgICAgaWYgKCFuIHx8ICFuLT5pc0Rlc2NlbmRh
bnRPZihoaWdoZXN0Um9vdCkpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAog
ICAgICAgICBSZW5kZXJPYmplY3QgKnIgPSBuLT5yZW5kZXJlcigpOwogICAgICAgICBpZiAoIXIp
IHsKLSAgICAgICAgICAgIG4gPSBuLT50cmF2ZXJzZU5leHROb2RlKHN0YXlJbnNpZGVCbG9jayk7
CisgICAgICAgICAgICBuID0gTm9kZVRyYXZlcnNhbDo6bmV4dChuLCBzdGF5SW5zaWRlQmxvY2sp
OwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KICAgICAgICAgUmVuZGVyU3R5bGUg
KnN0eWxlID0gci0+c3R5bGUoKTsKICAgICAgICAgaWYgKHN0eWxlLT52aXNpYmlsaXR5KCkgIT0g
VklTSUJMRSkgewotICAgICAgICAgICAgbiA9IG4tPnRyYXZlcnNlTmV4dE5vZGUoc3RheUluc2lk
ZUJsb2NrKTsKKyAgICAgICAgICAgIG4gPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG4sIHN0YXlJbnNp
ZGVCbG9jayk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogICAgICAgICAKQEAg
LTEyMzAsMTMgKzEyMzEsMTMgQEAgVmlzaWJsZVBvc2l0aW9uIGVuZE9mUGFyYWdyYXBoKGNvbnN0
IFZpcwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbm9kZSA9IG47CiAgICAgICAgICAgICBv
ZmZzZXQgPSByLT5jYXJldE1heE9mZnNldCgpOwotICAgICAgICAgICAgbiA9IG4tPnRyYXZlcnNl
TmV4dE5vZGUoc3RheUluc2lkZUJsb2NrKTsKKyAgICAgICAgICAgIG4gPSBOb2RlVHJhdmVyc2Fs
OjpuZXh0KG4sIHN0YXlJbnNpZGVCbG9jayk7CiAgICAgICAgIH0gZWxzZSBpZiAoZWRpdGluZ0ln
bm9yZXNDb250ZW50KG4pIHx8IGlzVGFibGVFbGVtZW50KG4pKSB7CiAgICAgICAgICAgICBub2Rl
ID0gbjsKICAgICAgICAgICAgIHR5cGUgPSBQb3NpdGlvbjo6UG9zaXRpb25Jc0FmdGVyQW5jaG9y
OwotICAgICAgICAgICAgbiA9IG4tPnRyYXZlcnNlTmV4dFNpYmxpbmcoc3RheUluc2lkZUJsb2Nr
KTsKKyAgICAgICAgICAgIG4gPSBOb2RlVHJhdmVyc2FsOjpuZXh0U2libGluZyhuLCBzdGF5SW5z
aWRlQmxvY2spOwogICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIG4gPSBuLT50cmF2ZXJzZU5l
eHROb2RlKHN0YXlJbnNpZGVCbG9jayk7CisgICAgICAgICAgICBuID0gTm9kZVRyYXZlcnNhbDo6
bmV4dChuLCBzdGF5SW5zaWRlQmxvY2spOwogICAgIH0KIAogICAgIGlmICh0eXBlID09IFBvc2l0
aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL21hYy9FZGl0b3JNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9tYWMvRWRpdG9yTWFjLm1tCShyZXZpc2lvbiAxMzcxNzUpCisrKyBTb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL21hYy9FZGl0b3JNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTM5LDYgKzM5LDcgQEAK
ICNpbXBvcnQgIkhUTUxDb252ZXJ0ZXIuaCIKICNpbXBvcnQgIkhUTUxOYW1lcy5oIgogI2ltcG9y
dCAiTGVnYWN5V2ViQXJjaGl2ZS5oIgorI2ltcG9ydCAiTm9kZVRyYXZlcnNhbC5oIgogI2ltcG9y
dCAiUGFzdGVib2FyZC5oIgogI2ltcG9ydCAiUGFzdGVib2FyZFN0cmF0ZWd5LmgiCiAjaW1wb3J0
ICJQbGF0Zm9ybVN0cmF0ZWdpZXMuaCIKQEAgLTE2OCw3ICsxNjksNyBAQCBjb25zdCBTaW1wbGVG
b250RGF0YSogRWRpdG9yOjpmb250Rm9yU2VsCiAgICAgICAgIE5vZGUqIHBhc3RFbmQgPSByYW5n
ZS0+cGFzdExhc3ROb2RlKCk7CiAgICAgICAgIC8vIEluIHRoZSBsb29wIGJlbG93LCBuIHNob3Vs
ZCBldmVudHVhbGx5IG1hdGNoIHBhc3RFbmQgYW5kIG5vdCBiZWNvbWUgbmlsLCBidXQgd2UndmUg
c2VlbiBhdCBsZWFzdCBvbmUKICAgICAgICAgLy8gdW5yZXByb2R1Y2libGUgY2FzZSB3aGVyZSB0
aGlzIGRpZG4ndCBoYXBwZW4sIHNvIGNoZWNrIGZvciBudWxsIGFsc28uCi0gICAgICAgIGZvciAo
Tm9kZSogbm9kZSA9IHN0YXJ0Tm9kZTsgbm9kZSAmJiBub2RlICE9IHBhc3RFbmQ7IG5vZGUgPSBu
b2RlLT50cmF2ZXJzZU5leHROb2RlKCkpIHsKKyAgICAgICAgZm9yIChOb2RlKiBub2RlID0gc3Rh
cnROb2RlOyBub2RlICYmIG5vZGUgIT0gcGFzdEVuZDsgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5l
eHQobm9kZSkpIHsKICAgICAgICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBub2RlLT5y
ZW5kZXJlcigpOwogICAgICAgICAgICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAgICAgICAgICBj
b250aW51ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENvbGxlY3Rpb24uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENvbGxlY3Rpb24uY3BwCShyZXZp
c2lvbiAxMzcxNzUpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDb2xsZWN0aW9uLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIkhUTUxPcHRpb25FbGVt
ZW50LmgiCiAjaW5jbHVkZSAiTm9kZUxpc3QuaCIKICNpbmNsdWRlICJOb2RlUmFyZURhdGEuaCIK
KyNpbmNsdWRlICJOb2RlVHJhdmVyc2FsLmgiCiAKICNpZiBFTkFCTEUoTUlDUk9EQVRBKQogI2lu
Y2x1ZGUgIkhUTUxQcm9wZXJ0aWVzQ29sbGVjdGlvbi5oIgpAQCAtMjYxLDkgKzI2Miw5IEBAIHRl
bXBsYXRlPGJvb2wgZm9yd2FyZD4KIHN0YXRpYyBOb2RlKiBuZXh0Tm9kZShOb2RlKiBiYXNlLCBO
b2RlKiBwcmV2aW91cywgYm9vbCBvbmx5SW5jbHVkZURpcmVjdENoaWxkcmVuKQogewogICAgIGlm
IChmb3J3YXJkKQotICAgICAgICByZXR1cm4gb25seUluY2x1ZGVEaXJlY3RDaGlsZHJlbiA/IHBy
ZXZpb3VzLT5uZXh0U2libGluZygpIDogcHJldmlvdXMtPnRyYXZlcnNlTmV4dE5vZGUoYmFzZSk7
CisgICAgICAgIHJldHVybiBvbmx5SW5jbHVkZURpcmVjdENoaWxkcmVuID8gcHJldmlvdXMtPm5l
eHRTaWJsaW5nKCkgOiBOb2RlVHJhdmVyc2FsOjpuZXh0KHByZXZpb3VzLCBiYXNlKTsKICAgICBl
bHNlCi0gICAgICAgIHJldHVybiBvbmx5SW5jbHVkZURpcmVjdENoaWxkcmVuID8gcHJldmlvdXMt
PnByZXZpb3VzU2libGluZygpIDogcHJldmlvdXMtPnRyYXZlcnNlUHJldmlvdXNOb2RlKGJhc2Up
OworICAgICAgICByZXR1cm4gb25seUluY2x1ZGVEaXJlY3RDaGlsZHJlbiA/IHByZXZpb3VzLT5w
cmV2aW91c1NpYmxpbmcoKSA6IE5vZGVUcmF2ZXJzYWw6OnByZXZpb3VzKHByZXZpb3VzLCBiYXNl
KTsKIH0KIAogc3RhdGljIGlubGluZSBOb2RlKiBsYXN0RGVzY2VuZGVudChOb2RlKiBub2RlKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAJKHJldmlzaW9uIDEzNzE3NSkKKysr
IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
Niw2ICs0Niw3IEBACiAjaW5jbHVkZSAiSFRNTFBhcnNlcklkaW9tcy5oIgogI2luY2x1ZGUgIkhU
TUxUZW1wbGF0ZUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVu
dC5oIgorI2luY2x1ZGUgIk5vZGVUcmF2ZXJzYWwuaCIKICNpbmNsdWRlICJSZW5kZXJXb3JkQnJl
YWsuaCIKICNpbmNsdWRlICJTY3JpcHRFdmVudExpc3RlbmVyLmgiCiAjaW5jbHVkZSAiU2V0dGlu
Z3MuaCIKQEAgLTgxNiwxMyArODE3LDEzIEBAIHN0YXRpYyB2b2lkIHNldEhhc0RpckF1dG9GbGFn
UmVjdXJzaXZlbHkKICAgICAgICAgaWYgKGVsZW1lbnRBZmZlY3RzRGlyZWN0aW9uYWxpdHkobm9k
ZSkpIHsKICAgICAgICAgICAgIGlmIChub2RlID09IGxhc3ROb2RlKQogICAgICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgICAgIG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHRTaWJsaW5nKGZp
cnN0Tm9kZSk7CisgICAgICAgICAgICBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dFNpYmxpbmco
bm9kZSwgZmlyc3ROb2RlKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAgICAg
ICAgIG5vZGUtPnNldFNlbGZPckFuY2VzdG9ySGFzRGlyQXV0b0F0dHJpYnV0ZShmbGFnKTsKICAg
ICAgICAgaWYgKG5vZGUgPT0gbGFzdE5vZGUpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKGZpcnN0Tm9kZSk7CisgICAgICAgIG5vZGUg
PSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUsIGZpcnN0Tm9kZSk7CiAgICAgfQogfQogCkBAIC04
NjQsNyArODY1LDcgQEAgVGV4dERpcmVjdGlvbiBIVE1MRWxlbWVudDo6ZGlyZWN0aW9uYWxpdAog
ICAgICAgICAvLyBTa2lwIGJkaSwgc2NyaXB0LCBzdHlsZSBhbmQgdGV4dCBmb3JtIGNvbnRyb2xz
LgogICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2Uobm9kZS0+bm9kZU5hbWUoKSwgImJkaSIp
IHx8IG5vZGUtPmhhc1RhZ05hbWUoc2NyaXB0VGFnKSB8fCBub2RlLT5oYXNUYWdOYW1lKHN0eWxl
VGFnKSAKICAgICAgICAgICAgIHx8IChub2RlLT5pc0VsZW1lbnROb2RlKCkgJiYgdG9FbGVtZW50
KG5vZGUpLT5pc1RleHRGb3JtQ29udHJvbCgpKSkgewotICAgICAgICAgICAgbm9kZSA9IG5vZGUt
PnRyYXZlcnNlTmV4dFNpYmxpbmcodGhpcyk7CisgICAgICAgICAgICBub2RlID0gTm9kZVRyYXZl
cnNhbDo6bmV4dFNpYmxpbmcobm9kZSwgdGhpcyk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgfQogCkBAIC04NzIsNyArODczLDcgQEAgVGV4dERpcmVjdGlvbiBIVE1MRWxlbWVudDo6
ZGlyZWN0aW9uYWxpdAogICAgICAgICBpZiAobm9kZS0+aXNFbGVtZW50Tm9kZSgpKSB7CiAgICAg
ICAgICAgICBBdG9taWNTdHJpbmcgZGlyQXR0cmlidXRlVmFsdWUgPSB0b0VsZW1lbnQobm9kZSkt
PmZhc3RHZXRBdHRyaWJ1dGUoZGlyQXR0cik7CiAgICAgICAgICAgICBpZiAoZXF1YWxJZ25vcmlu
Z0Nhc2UoZGlyQXR0cmlidXRlVmFsdWUsICJydGwiKSB8fCBlcXVhbElnbm9yaW5nQ2FzZShkaXJB
dHRyaWJ1dGVWYWx1ZSwgImx0ciIpIHx8IGVxdWFsSWdub3JpbmdDYXNlKGRpckF0dHJpYnV0ZVZh
bHVlLCAiYXV0byIpKSB7Ci0gICAgICAgICAgICAgICAgbm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4
dFNpYmxpbmcodGhpcyk7CisgICAgICAgICAgICAgICAgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5l
eHRTaWJsaW5nKG5vZGUsIHRoaXMpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICAgICAgfQogICAgICAgICB9CkBAIC04ODYsNyArODg3LDcgQEAgVGV4dERpcmVjdGlvbiBIVE1M
RWxlbWVudDo6ZGlyZWN0aW9uYWxpdAogICAgICAgICAgICAgICAgIHJldHVybiAodGV4dERpcmVj
dGlvbiA9PSBXVEY6OlVuaWNvZGU6OkxlZnRUb1JpZ2h0KSA/IExUUiA6IFJUTDsKICAgICAgICAg
ICAgIH0KICAgICAgICAgfQotICAgICAgICBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSh0
aGlzKTsKKyAgICAgICAgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9kZSwgdGhpcyk7CiAg
ICAgfQogICAgIGlmIChzdHJvbmdEaXJlY3Rpb25hbGl0eVRleHROb2RlKQogICAgICAgICAqc3Ry
b25nRGlyZWN0aW9uYWxpdHlUZXh0Tm9kZSA9IDA7CkBAIC05MzMsOCArOTM0LDggQEAgdm9pZCBI
VE1MRWxlbWVudDo6Y2FsY3VsYXRlQW5kQWRqdXN0RGlyZQogdm9pZCBIVE1MRWxlbWVudDo6YWRq
dXN0RGlyZWN0aW9uYWxpdHlJZk5lZWRlZEFmdGVyQ2hpbGRyZW5DaGFuZ2VkKE5vZGUqIGJlZm9y
ZUNoYW5nZSwgaW50IGNoaWxkQ291bnREZWx0YSkKIHsKICAgICBpZiAoKCFkb2N1bWVudCgpIHx8
IGRvY3VtZW50KCktPnJlbmRlcmVyKCkpICYmIGNoaWxkQ291bnREZWx0YSA8IDApIHsKLSAgICAg
ICAgTm9kZSogbm9kZSA9IGJlZm9yZUNoYW5nZSA/IGJlZm9yZUNoYW5nZS0+dHJhdmVyc2VOZXh0
U2libGluZygpIDogMDsKLSAgICAgICAgZm9yIChpbnQgY291bnRlciA9IDA7IG5vZGUgJiYgY291
bnRlciA8IGNoaWxkQ291bnREZWx0YTsgY291bnRlcisrLCBub2RlID0gbm9kZS0+dHJhdmVyc2VO
ZXh0U2libGluZygpKSB7CisgICAgICAgIE5vZGUqIG5vZGUgPSBiZWZvcmVDaGFuZ2UgPyBOb2Rl
VHJhdmVyc2FsOjpuZXh0U2libGluZyhiZWZvcmVDaGFuZ2UpIDogMDsKKyAgICAgICAgZm9yIChp
bnQgY291bnRlciA9IDA7IG5vZGUgJiYgY291bnRlciA8IGNoaWxkQ291bnREZWx0YTsgY291bnRl
cisrLCBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dFNpYmxpbmcobm9kZSkpIHsKICAgICAgICAg
ICAgIGlmIChlbGVtZW50QWZmZWN0c0RpcmVjdGlvbmFsaXR5KG5vZGUpKQogICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwogCkBAIC05NDUsOSArOTQ2LDkgQEAgdm9pZCBIVE1MRWxlbWVudDo6YWRq
dXN0RGlyZWN0aW9uYWxpdHlJZgogICAgIGlmICghc2VsZk9yQW5jZXN0b3JIYXNEaXJBdXRvQXR0
cmlidXRlKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIE5vZGUqIG9sZE1hcmtlZE5vZGUgPSBi
ZWZvcmVDaGFuZ2UgPyBiZWZvcmVDaGFuZ2UtPnRyYXZlcnNlTmV4dFNpYmxpbmcoKSA6IDA7Cisg
ICAgTm9kZSogb2xkTWFya2VkTm9kZSA9IGJlZm9yZUNoYW5nZSA/IE5vZGVUcmF2ZXJzYWw6Om5l
eHRTaWJsaW5nKGJlZm9yZUNoYW5nZSkgOiAwOwogICAgIHdoaWxlIChvbGRNYXJrZWROb2RlICYm
IGVsZW1lbnRBZmZlY3RzRGlyZWN0aW9uYWxpdHkob2xkTWFya2VkTm9kZSkpCi0gICAgICAgIG9s
ZE1hcmtlZE5vZGUgPSBvbGRNYXJrZWROb2RlLT50cmF2ZXJzZU5leHRTaWJsaW5nKHRoaXMpOwor
ICAgICAgICBvbGRNYXJrZWROb2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dFNpYmxpbmcob2xkTWFy
a2VkTm9kZSwgdGhpcyk7CiAgICAgaWYgKG9sZE1hcmtlZE5vZGUpCiAgICAgICAgIHNldEhhc0Rp
ckF1dG9GbGFnUmVjdXJzaXZlbHkob2xkTWFya2VkTm9kZSwgZmFsc2UpOwogCkBAIC0xMDI4LDcg
KzEwMjksNyBAQCB2b2lkIEhUTUxFbGVtZW50OjpnZXRJdGVtUmVmRWxlbWVudHMoVmVjCiAgICAg
ICAgICAgICByb290Tm9kZSA9IHBhcmVudDsKICAgICB9CiAKLSAgICBmb3IgKE5vZGUqIGN1cnJl
bnQgPSByb290Tm9kZTsgY3VycmVudDsgY3VycmVudCA9IGN1cnJlbnQtPnRyYXZlcnNlTmV4dE5v
ZGUocm9vdE5vZGUpKSB7CisgICAgZm9yIChOb2RlKiBjdXJyZW50ID0gcm9vdE5vZGU7IGN1cnJl
bnQ7IGN1cnJlbnQgPSBjdXJyZW50LT5Ob2RlVHJhdmVyc2FsOjpuZXh0KHJvb3ROb2RlKSkgewog
ICAgICAgICBpZiAoIWN1cnJlbnQtPmlzSFRNTEVsZW1lbnQoKSkKICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICBIVE1MRWxlbWVudCogZWxlbWVudCA9IHRvSFRNTEVsZW1lbnQoY3VycmVu
dCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGaWVsZFNldEVsZW1lbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZpZWxkU2V0RWxlbWVudC5jcHAJ
KHJldmlzaW9uIDEzNzE3NSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZpZWxkU2V0RWxl
bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJIVE1M
TGVnZW5kRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIkhUTUxP
YmplY3RFbGVtZW50LmgiCisjaW5jbHVkZSAiTm9kZVRyYXZlcnNhbC5oIgogI2luY2x1ZGUgIlJl
bmRlckZpZWxkc2V0LmgiCiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogCkBAIC01MCw3
ICs1MSw3IEBAIFBhc3NSZWZQdHI8SFRNTEZpZWxkU2V0RWxlbWVudD4gSFRNTEZpZWwKIAogdm9p
ZCBIVE1MRmllbGRTZXRFbGVtZW50OjppbnZhbGlkYXRlRGlzYWJsZWRTdGF0ZVVuZGVyKEVsZW1l
bnQqIGJhc2UpCiB7Ci0gICAgZm9yIChOb2RlKiBub2RlID0gYmFzZS0+Zmlyc3RDaGlsZCgpOyBu
b2RlOyBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZShiYXNlKSkgeworICAgIGZvciAoTm9k
ZSogbm9kZSA9IGJhc2UtPmZpcnN0Q2hpbGQoKTsgbm9kZTsgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6
Om5leHQobm9kZSwgYmFzZSkpIHsKICAgICAgICAgaWYgKG5vZGUtPmlzRWxlbWVudE5vZGUoKSAm
JiB0b0VsZW1lbnQobm9kZSktPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpCiAgICAgICAgICAgICBz
dGF0aWNfY2FzdDxIVE1MRm9ybUNvbnRyb2xFbGVtZW50Kj4obm9kZSktPmFuY2VzdG9yRGlzYWJs
ZWRTdGF0ZVdhc0NoYW5nZWQoKTsKICAgICB9CkBAIC0xMTIsNyArMTEzLDcgQEAgdm9pZCBIVE1M
RmllbGRTZXRFbGVtZW50OjpyZWZyZXNoRWxlbWVudAogCiAgICAgbV9hc3NvY2lhdGVkRWxlbWVu
dHMuY2xlYXIoKTsKIAotICAgIGZvciAoTm9kZSogbm9kZSA9IGZpcnN0Q2hpbGQoKTsgbm9kZTsg
bm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUodGhpcykpIHsKKyAgICBmb3IgKE5vZGUqIG5v
ZGUgPSBmaXJzdENoaWxkKCk7IG5vZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUs
IHRoaXMpKSB7CiAgICAgICAgIGlmICghbm9kZS0+aXNFbGVtZW50Tm9kZSgpKQogICAgICAgICAg
ICAgY29udGludWU7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5j
cHAJKHJldmlzaW9uIDEzNzE3NSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVt
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsNiArNDcsNyBAQAogI2luY2x1ZGUgIkhUTUxO
YW1lcy5oIgogI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKICNpbmNsdWRlICJOb2RlUmVu
ZGVyaW5nQ29udGV4dC5oIgorI2luY2x1ZGUgIk5vZGVUcmF2ZXJzYWwuaCIKICNpbmNsdWRlICJQ
YWdlLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGV4dENvbnRyb2wuaCIKICNpbmNsdWRlICJTY3JpcHRF
dmVudExpc3RlbmVyLmgiCkBAIC01MjIsOSArNTIzLDkgQEAgdW5zaWduZWQgSFRNTEZvcm1FbGVt
ZW50Ojpmb3JtRWxlbWVudEluZAogICAgIC8vIHRoZSBmb3JtJ3MgdHJlZSBvZiBjaGlsZHJlbjsg
d2UgZG9uJ3Qgd2FudCB0byB3YWxrIHRoZSBlbnRpcmUgdHJlZSBpbiB0aGF0CiAgICAgLy8gY29t
bW9uIGNhc2UgdGhhdCBvY2N1cnMgZHVyaW5nIHBhcnNpbmc7IGluc3RlYWQgd2UnbGwganVzdCBy
ZXR1cm4gYSB2YWx1ZQogICAgIC8vIHRoYXQgc2F5cyAiYWRkIHRoaXMgZm9ybSBlbGVtZW50IHRv
IHRoZSBlbmQgb2YgdGhlIGFycmF5Ii4KLSAgICBpZiAoZWxlbWVudC0+dHJhdmVyc2VOZXh0Tm9k
ZSh0aGlzKSkgeworICAgIGlmIChOb2RlVHJhdmVyc2FsOjpuZXh0KGVsZW1lbnQsIHRoaXMpKSB7
CiAgICAgICAgIHVuc2lnbmVkIGkgPSBtX2Fzc29jaWF0ZWRFbGVtZW50c0JlZm9yZUluZGV4Owot
ICAgICAgICBmb3IgKE5vZGUqIG5vZGUgPSB0aGlzOyBub2RlOyBub2RlID0gbm9kZS0+dHJhdmVy
c2VOZXh0Tm9kZSh0aGlzKSkgeworICAgICAgICBmb3IgKE5vZGUqIG5vZGUgPSB0aGlzOyBub2Rl
OyBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dChub2RlLCB0aGlzKSkgewogICAgICAgICAgICAg
aWYgKG5vZGUgPT0gZWxlbWVudCkgewogICAgICAgICAgICAgICAgICsrbV9hc3NvY2lhdGVkRWxl
bWVudHNBZnRlckluZGV4OwogICAgICAgICAgICAgICAgIHJldHVybiBpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MTGFiZWxFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxMYWJlbEVsZW1lbnQuY3BwCShyZXZpc2lvbiAxMzcxNzUpCisrKyBT
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxMYWJlbEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgogI2luY2x1ZGUgIkZvcm1B
c3NvY2lhdGVkRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIk5v
ZGVUcmF2ZXJzYWwuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC03NSw3ICs3Niw3IEBA
IExhYmVsYWJsZUVsZW1lbnQqIEhUTUxMYWJlbEVsZW1lbnQ6OmNvbnQKICAgICAgICAgLy8gcGVy
IGh0dHA6Ly9kZXYudzMub3JnL2h0bWw1L3NwZWMvT3ZlcnZpZXcuaHRtbCN0aGUtbGFiZWwtZWxl
bWVudAogICAgICAgICAvLyB0aGUgZm9ybSBlbGVtZW50IG11c3QgYmUgImxhYmVsYWJsZSBmb3Jt
LWFzc29jaWF0ZWQgZWxlbWVudCIuCiAgICAgICAgIE5vZGUqIG5vZGUgPSB0aGlzOwotICAgICAg
ICB3aGlsZSAoKG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKHRoaXMpKSkgeworICAgICAg
ICB3aGlsZSAoKG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUsIHRoaXMpKSkgewogICAg
ICAgICAgICAgaWYgKExhYmVsYWJsZUVsZW1lbnQqIGVsZW1lbnQgPSBub2RlQXNMYWJlbGFibGVF
bGVtZW50KG5vZGUpKQogICAgICAgICAgICAgICAgIHJldHVybiBlbGVtZW50OwogICAgICAgICB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxMZWdlbmRFbGVtZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxMZWdlbmRFbGVtZW50LmNwcAkocmV2aXNp
b24gMTM3MTc1KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTGVnZW5kRWxlbWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJIVE1MRmllbGRTZXRF
bGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTEZvcm1Db250cm9sRWxlbWVudC5oIgogI2luY2x1ZGUg
IkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIk5vZGVUcmF2ZXJzYWwuaCIKICNpbmNsdWRlIDx3dGYv
U3RkTGliRXh0cmFzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTU4LDcgKzU5LDcgQEAg
SFRNTEZvcm1Db250cm9sRWxlbWVudCogSFRNTExlZ2VuZEVsZW1lbgogICAgIC8vIEZpbmQgZmly
c3QgZm9ybSBlbGVtZW50IGluc2lkZSB0aGUgZmllbGRzZXQgdGhhdCBpcyBub3QgYSBsZWdlbmQg
ZWxlbWVudC4KICAgICAvLyBGSVhNRTogU2hvdWxkIHdlIGNvbnNpZGVyIHRhYmluZGV4PwogICAg
IE5vZGUqIG5vZGUgPSBmaWVsZHNldDsKLSAgICB3aGlsZSAoKG5vZGUgPSBub2RlLT50cmF2ZXJz
ZU5leHROb2RlKGZpZWxkc2V0KSkpIHsKKyAgICB3aGlsZSAoKG5vZGUgPSBOb2RlVHJhdmVyc2Fs
OjpuZXh0KG5vZGUsIGZpZWxkc2V0KSkpIHsKICAgICAgICAgaWYgKG5vZGUtPmlzRWxlbWVudE5v
ZGUoKSkgewogICAgICAgICAgICAgRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PEVsZW1l
bnQqPihub2RlKTsKICAgICAgICAgICAgIGlmIChlbGVtZW50LT5pc0Zvcm1Db250cm9sRWxlbWVu
dCgpKQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWFwRWxlbWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWFwRWxlbWVudC5jcHAJKHJldmlzaW9u
IDEzNzE3NSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1hcEVsZW1lbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5j
bHVkZSAiSGl0VGVzdFJlc3VsdC5oIgogI2luY2x1ZGUgIkludFNpemUuaCIKKyNpbmNsdWRlICJO
b2RlVHJhdmVyc2FsLmgiCiAjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCiAKIHVzaW5nIG5hbWVz
cGFjZSBzdGQ7CkBAIC02Miw3ICs2Myw3IEBAIGJvb2wgSFRNTE1hcEVsZW1lbnQ6Om1hcE1vdXNl
RXZlbnQoTGF5b3UKIHsKICAgICBIVE1MQXJlYUVsZW1lbnQqIGRlZmF1bHRBcmVhID0gMDsKICAg
ICBOb2RlICpub2RlID0gdGhpczsKLSAgICB3aGlsZSAoKG5vZGUgPSBub2RlLT50cmF2ZXJzZU5l
eHROb2RlKHRoaXMpKSkgeworICAgIHdoaWxlICgobm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQo
bm9kZSwgdGhpcykpKSB7CiAgICAgICAgIGlmIChub2RlLT5oYXNUYWdOYW1lKGFyZWFUYWcpKSB7
CiAgICAgICAgICAgICBIVE1MQXJlYUVsZW1lbnQqIGFyZWFFbHQgPSBzdGF0aWNfY2FzdDxIVE1M
QXJlYUVsZW1lbnQqPihub2RlKTsKICAgICAgICAgICAgIGlmIChhcmVhRWx0LT5pc0RlZmF1bHQo
KSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTmFtZUNvbGxlY3Rpb24uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE5hbWVDb2xsZWN0aW9uLmNwcAko
cmV2aXNpb24gMTM3MTc1KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTmFtZUNvbGxlY3Rp
b24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiSFRNTE5h
bWVzLmgiCiAjaW5jbHVkZSAiSFRNTE9iamVjdEVsZW1lbnQuaCIKICNpbmNsdWRlICJOb2RlUmFy
ZURhdGEuaCIKKyNpbmNsdWRlICJOb2RlVHJhdmVyc2FsLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIApAQCAtNTcsOSArNTgsOSBAQCBFbGVtZW50KiBIVE1MTmFtZUNvbGxlY3Rpb246OnZpcnR1
YWxJdGVtCiAgICAgaWYgKCFwcmV2aW91cykKICAgICAgICAgY3VycmVudCA9IG93bmVyTm9kZSgp
LT5maXJzdENoaWxkKCk7CiAgICAgZWxzZQotICAgICAgICBjdXJyZW50ID0gcHJldmlvdXMtPnRy
YXZlcnNlTmV4dE5vZGUob3duZXJOb2RlKCkpOworICAgICAgICBjdXJyZW50ID0gTm9kZVRyYXZl
cnNhbDo6bmV4dChwcmV2aW91cywgb3duZXJOb2RlKCkpOwogCi0gICAgZm9yICg7IGN1cnJlbnQ7
IGN1cnJlbnQgPSBjdXJyZW50LT50cmF2ZXJzZU5leHROb2RlKG93bmVyTm9kZSgpKSkgeworICAg
IGZvciAoOyBjdXJyZW50OyBjdXJyZW50ID0gTm9kZVRyYXZlcnNhbDo6bmV4dChjdXJyZW50LCBv
d25lck5vZGUoKSkpIHsKICAgICAgICAgaWYgKCFjdXJyZW50LT5pc0VsZW1lbnROb2RlKCkpCiAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgRWxlbWVudCogZSA9IHN0YXRpY19jYXN0PEVs
ZW1lbnQqPihjdXJyZW50KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9wdGlvbkVs
ZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9wdGlvbkVs
ZW1lbnQuY3BwCShyZXZpc2lvbiAxMzcxNzUpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxP
cHRpb25FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1
ZGUgIkhUTUxTZWxlY3RFbGVtZW50LmgiCiAjaW5jbHVkZSAiTm9kZVJlbmRlclN0eWxlLmgiCiAj
aW5jbHVkZSAiTm9kZVJlbmRlcmluZ0NvbnRleHQuaCIKKyNpbmNsdWRlICJOb2RlVHJhdmVyc2Fs
LmgiCiAjaW5jbHVkZSAiUmVuZGVyTWVudUxpc3QuaCIKICNpbmNsdWRlICJSZW5kZXJUaGVtZS5o
IgogI2luY2x1ZGUgIlNjcmlwdEVsZW1lbnQuaCIKQEAgLTM4Myw5ICszODQsOSBAQCBTdHJpbmcg
SFRNTE9wdGlvbkVsZW1lbnQ6OmNvbGxlY3RPcHRpb25JCiAgICAgICAgICAgICB0ZXh0LmFwcGVu
ZChub2RlLT5ub2RlVmFsdWUoKSk7CiAgICAgICAgIC8vIFRleHQgbm9kZXMgaW5zaWRlIHNjcmlw
dCBlbGVtZW50cyBhcmUgbm90IHBhcnQgb2YgdGhlIG9wdGlvbiB0ZXh0LgogICAgICAgICBpZiAo
bm9kZS0+aXNFbGVtZW50Tm9kZSgpICYmIHRvU2NyaXB0RWxlbWVudCh0b0VsZW1lbnQobm9kZSkp
KQotICAgICAgICAgICAgbm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dFNpYmxpbmcodGhpcyk7Cisg
ICAgICAgICAgICBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dFNpYmxpbmcobm9kZSwgdGhpcyk7
CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHROb2Rl
KHRoaXMpOworICAgICAgICAgICAgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9kZSwgdGhp
cyk7CiAgICAgfQogICAgIHJldHVybiB0ZXh0LnRvU3RyaW5nKCk7CiB9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxQcm9wZXJ0aWVzQ29sbGVjdGlvbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUHJvcGVydGllc0NvbGxlY3Rpb24uY3BwCShyZXZpc2lv
biAxMzcxNzUpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQcm9wZXJ0aWVzQ29sbGVjdGlv
bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc2LDcgKzc2LDggQEAgc3RhdGljIE5vZGUqIG5leHRO
b2RlV2l0aFByb3BlcnR5KE5vZGUqIAogICAgIC8vIHRoYXQgZGVjbGFyZXMgdGhlIHByb3BlcnR5
LiBJZiB0aGUgcHJvcGVydHkgaGFzIGFuIGl0ZW1zY29wZSBhdHRyaWJ1dGUgc3BlY2lmaWVkIHRo
ZW4gd2UgbmVlZAogICAgIC8vIHRvIHRyYXZlcnNlIHRoZSBuZXh0IHNpYmxpbmcuCiAgICAgcmV0
dXJuIHByZXZpb3VzID09IG93bmVyTm9kZSB8fCAocHJldmlvdXMtPmlzSFRNTEVsZW1lbnQoKSAm
JiAhdG9IVE1MRWxlbWVudChwcmV2aW91cyktPmZhc3RIYXNBdHRyaWJ1dGUoaXRlbXNjb3BlQXR0
cikpCi0gICAgICAgICAgICA/IHByZXZpb3VzLT50cmF2ZXJzZU5leHROb2RlKHJvb3ROb2RlKSA6
IHByZXZpb3VzLT50cmF2ZXJzZU5leHRTaWJsaW5nKHJvb3ROb2RlKTsKKyAgICAgICAgPyBwcmV2
aW91cy0+Tm9kZVRyYXZlcnNhbDo6bmV4dChyb290Tm9kZSkKKyAgICAgICAgOiBwcmV2aW91cy0+
Tm9kZVRyYXZlcnNhbDo6bmV4dFNpYmxpbmcocm9vdE5vZGUpOwogfQogCiBFbGVtZW50KiBIVE1M
UHJvcGVydGllc0NvbGxlY3Rpb246OnZpcnR1YWxJdGVtQWZ0ZXIodW5zaWduZWQmIG9mZnNldElu
QXJyYXksIEVsZW1lbnQqIHByZXZpb3VzSXRlbSkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQuY3BwCShyZXZpc2lvbiAxMzcxNzUpCisrKyBTb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxTZWxlY3RFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUs
NiArNDUsNyBAQAogI2luY2x1ZGUgIkxvY2FsaXplZFN0cmluZ3MuaCIKICNpbmNsdWRlICJNb3Vz
ZUV2ZW50LmgiCiAjaW5jbHVkZSAiTm9kZVJlbmRlcmluZ0NvbnRleHQuaCIKKyNpbmNsdWRlICJO
b2RlVHJhdmVyc2FsLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlJlbmRlckxpc3RC
b3guaCIKICNpbmNsdWRlICJSZW5kZXJNZW51TGlzdC5oIgpAQCAtNzM2LDcgKzczNyw3IEBAIHZv
aWQgSFRNTFNlbGVjdEVsZW1lbnQ6OnJlY2FsY0xpc3RJdGVtcygKICAgICBIVE1MT3B0aW9uRWxl
bWVudCogZmlyc3RPcHRpb24gPSAwOwogICAgIGZvciAoTm9kZSogY3VycmVudE5vZGUgPSB0aGlz
LT5maXJzdENoaWxkKCk7IGN1cnJlbnROb2RlOykgewogICAgICAgICBpZiAoIWN1cnJlbnROb2Rl
LT5pc0hUTUxFbGVtZW50KCkpIHsKLSAgICAgICAgICAgIGN1cnJlbnROb2RlID0gY3VycmVudE5v
ZGUtPnRyYXZlcnNlTmV4dFNpYmxpbmcodGhpcyk7CisgICAgICAgICAgICBjdXJyZW50Tm9kZSA9
IE5vZGVUcmF2ZXJzYWw6Om5leHRTaWJsaW5nKGN1cnJlbnROb2RlLCB0aGlzKTsKICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKQEAgLTc3NSwxMiArNzc2LDEyIEBAIHZvaWQgSFRN
TFNlbGVjdEVsZW1lbnQ6OnJlY2FsY0xpc3RJdGVtcygKICAgICAgICAgICAgIG1fbGlzdEl0ZW1z
LmFwcGVuZChjdXJyZW50KTsKIAogICAgICAgICAvLyBJbiBjb25mb3JtaW5nIEhUTUwgY29kZSwg
b25seSA8b3B0Z3JvdXA+IGFuZCA8b3B0aW9uPiB3aWxsIGJlIGZvdW5kCi0gICAgICAgIC8vIHdp
dGhpbiBhIDxzZWxlY3Q+LiBXZSBjYWxsIHRyYXZlcnNlTmV4dFNpYmxpbmcgc28gdGhhdCB3ZSBv
bmx5IHN0ZXAKKyAgICAgICAgLy8gd2l0aGluIGEgPHNlbGVjdD4uIFdlIGNhbGwgTm9kZVRyYXZl
cnNhbDo6bmV4dFNpYmxpbmcgc28gdGhhdCB3ZSBvbmx5IHN0ZXAKICAgICAgICAgLy8gaW50byB0
aG9zZSB0YWdzIHRoYXQgd2UgY2hvb3NlIHRvLiBGb3Igd2ViLWNvbXBhdCwgd2Ugc2hvdWxkIGNv
cGUKICAgICAgICAgLy8gd2l0aCB0aGUgY2FzZSB3aGVyZSBvZGQgdGFncyBsaWtlIGEgPGRpdj4g
aGF2ZSBiZWVuIGFkZGVkIGJ1dCB3ZQogICAgICAgICAvLyBoYW5kbGUgdGhpcyBiZWNhdXNlIHN1
Y2ggdGFncyBoYXZlIGFscmVhZHkgYmVlbiByZW1vdmVkIGZyb20gdGhlCiAgICAgICAgIC8vIDxz
ZWxlY3Q+J3Mgc3VidHJlZSBhdCB0aGlzIHBvaW50LgotICAgICAgICBjdXJyZW50Tm9kZSA9IGN1
cnJlbnROb2RlLT50cmF2ZXJzZU5leHRTaWJsaW5nKHRoaXMpOworICAgICAgICBjdXJyZW50Tm9k
ZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHRTaWJsaW5nKGN1cnJlbnROb2RlLCB0aGlzKTsKICAgICB9
CiAKICAgICBpZiAoIWZvdW5kU2VsZWN0ZWQgJiYgbV9zaXplIDw9IDEgJiYgZmlyc3RPcHRpb24g
JiYgIWZpcnN0T3B0aW9uLT5zZWxlY3RlZCgpKQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MVGV4dEZvcm1Db250cm9sRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudC5jcHAJKHJldmlzaW9uIDEzNzE3NSkK
KysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSAiSFRNTElucHV0RWxlbWVu
dC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIk5vZGVSZW5kZXJpbmdDb250
ZXh0LmgiCisjaW5jbHVkZSAiTm9kZVRyYXZlcnNhbC5oIgogI2luY2x1ZGUgIlJlbmRlckJveC5o
IgogI2luY2x1ZGUgIlJlbmRlclRleHRDb250cm9sLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGhlbWUu
aCIKQEAgLTQ2Miw3ICs0NjMsNyBAQCBQYXNzUmVmUHRyPFJhbmdlPiBIVE1MVGV4dEZvcm1Db250
cm9sRWxlCiAgICAgaW50IG9mZnNldCA9IDA7CiAgICAgTm9kZSogc3RhcnROb2RlID0gMDsKICAg
ICBOb2RlKiBlbmROb2RlID0gMDsKLSAgICBmb3IgKE5vZGUqIG5vZGUgPSBpbm5lclRleHQtPmZp
cnN0Q2hpbGQoKTsgbm9kZTsgbm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoaW5uZXJUZXh0
KSkgeworICAgIGZvciAoTm9kZSogbm9kZSA9IGlubmVyVGV4dC0+Zmlyc3RDaGlsZCgpOyBub2Rl
OyBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dChub2RlLCBpbm5lclRleHQpKSB7CiAgICAgICAg
IEFTU0VSVCghbm9kZS0+Zmlyc3RDaGlsZCgpKTsKICAgICAgICAgQVNTRVJUKG5vZGUtPmlzVGV4
dE5vZGUoKSB8fCBub2RlLT5oYXNUYWdOYW1lKGJyVGFnKSk7CiAgICAgICAgIGludCBsZW5ndGgg
PSBub2RlLT5pc1RleHROb2RlKCkgPyBsYXN0T2Zmc2V0SW5Ob2RlKG5vZGUpIDogMTsKQEAgLTU2
MSw3ICs1NjIsNyBAQCBTdHJpbmcgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OmlubmVyCiAg
ICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwogCiAgICAgU3RyaW5nQnVpbGRlciByZXN1bHQ7
Ci0gICAgZm9yIChOb2RlKiBub2RlID0gaW5uZXJUZXh0OyBub2RlOyBub2RlID0gbm9kZS0+dHJh
dmVyc2VOZXh0Tm9kZShpbm5lclRleHQpKSB7CisgICAgZm9yIChOb2RlKiBub2RlID0gaW5uZXJU
ZXh0OyBub2RlOyBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dChub2RlLCBpbm5lclRleHQpKSB7
CiAgICAgICAgIGlmIChub2RlLT5oYXNUYWdOYW1lKGJyVGFnKSkKICAgICAgICAgICAgIHJlc3Vs
dC5hcHBlbmQobmV3bGluZUNoYXJhY3Rlcik7CiAgICAgICAgIGVsc2UgaWYgKG5vZGUtPmlzVGV4
dE5vZGUoKSkKQEAgLTYwOCw3ICs2MDksNyBAQCBTdHJpbmcgSFRNTFRleHRGb3JtQ29udHJvbEVs
ZW1lbnQ6OnZhbHVlCiAgICAgZ2V0TmV4dFNvZnRCcmVhayhsaW5lLCBicmVha05vZGUsIGJyZWFr
T2Zmc2V0KTsKIAogICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0OwotICAgIGZvciAoTm9kZSogbm9k
ZSA9IGlubmVyVGV4dC0+Zmlyc3RDaGlsZCgpOyBub2RlOyBub2RlID0gbm9kZS0+dHJhdmVyc2VO
ZXh0Tm9kZShpbm5lclRleHQpKSB7CisgICAgZm9yIChOb2RlKiBub2RlID0gaW5uZXJUZXh0LT5m
aXJzdENoaWxkKCk7IG5vZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUsIGlubmVy
VGV4dCkpIHsKICAgICAgICAgaWYgKG5vZGUtPmhhc1RhZ05hbWUoYnJUYWcpKQogICAgICAgICAg
ICAgcmVzdWx0LmFwcGVuZChuZXdsaW5lQ2hhcmFjdGVyKTsKICAgICAgICAgZWxzZSBpZiAobm9k
ZS0+aXNUZXh0Tm9kZSgpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL1JhZGlvSW5wdXRU
eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL1JhZGlvSW5wdXRUeXBl
LmNwcAkocmV2aXNpb24gMTM3MTc1KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9SYWRpb0lucHV0
VHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJLZXli
b2FyZEV2ZW50LmgiCiAjaW5jbHVkZSAiTG9jYWxpemVkU3RyaW5ncy5oIgogI2luY2x1ZGUgIk1v
dXNlRXZlbnQuaCIKKyNpbmNsdWRlICJOb2RlVHJhdmVyc2FsLmgiCiAjaW5jbHVkZSAiU2V0dGlu
Z3MuaCIKICNpbmNsdWRlICJTcGF0aWFsTmF2aWdhdGlvbi5oIgogI2luY2x1ZGUgPHd0Zi9QYXNz
T3duUHRyLmg+CkBAIC04NCw3ICs4NSw3IEBAIHZvaWQgUmFkaW9JbnB1dFR5cGU6OmhhbmRsZUtl
eWRvd25FdmVudCgKICAgICAvLyBXZSBjYW4gb25seSBzdGF5IHdpdGhpbiB0aGUgZm9ybSdzIGNo
aWxkcmVuIGlmIHRoZSBmb3JtIGhhc24ndCBiZWVuIGRlbW90ZWQgdG8gYSBsZWFmIGJlY2F1c2UK
ICAgICAvLyBvZiBtYWxmb3JtZWQgSFRNTC4KICAgICBOb2RlKiBub2RlID0gZWxlbWVudCgpOwot
ICAgIHdoaWxlICgobm9kZSA9IChmb3J3YXJkID8gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgpIDog
bm9kZS0+dHJhdmVyc2VQcmV2aW91c05vZGUoKSkpKSB7CisgICAgd2hpbGUgKChub2RlID0gKGZv
cndhcmQgPyBOb2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUpIDogTm9kZVRyYXZlcnNhbDo6cHJldmlv
dXMobm9kZSkpKSkgewogICAgICAgICAvLyBPbmNlIHdlIGVuY291bnRlciBhIGZvcm0gZWxlbWVu
dCwgd2Uga25vdyB3ZSdyZSB0aHJvdWdoLgogICAgICAgICBpZiAobm9kZS0+aGFzVGFnTmFtZShm
b3JtVGFnKSkKICAgICAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9z
aGFkb3cvQ29udGVudERpc3RyaWJ1dG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9odG1sL3NoYWRvdy9Db250ZW50RGlzdHJpYnV0b3IuY3BwCShyZXZpc2lvbiAxMzcxNzUpCisr
KyBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9Db250ZW50RGlzdHJpYnV0b3IuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiRWxlbWVudFNoYWRvdy5oIgog
I2luY2x1ZGUgIkhUTUxDb250ZW50RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxTaGFkb3dFbGVt
ZW50LmgiCisjaW5jbHVkZSAiTm9kZVRyYXZlcnNhbC5oIgogI2luY2x1ZGUgIlNoYWRvd1Jvb3Qu
aCIKIAogCkBAIC0xMDEsNyArMTAyLDcgQEAgY29uc3QgVmVjdG9yPEluc2VydGlvblBvaW50Kj4m
IFNoYWRvd1JvbwogICAgIGlmICghc2hhZG93Um9vdC0+aGFzSW5zZXJ0aW9uUG9pbnQoKSkKICAg
ICAgICAgcmV0dXJuIG1faW5zZXJ0aW9uUG9pbnRMaXN0OwogCi0gICAgZm9yIChOb2RlKiBub2Rl
ID0gc2hhZG93Um9vdDsgbm9kZTsgbm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoc2hhZG93
Um9vdCkpIHsKKyAgICBmb3IgKE5vZGUqIG5vZGUgPSBzaGFkb3dSb290OyBub2RlOyBub2RlID0g
Tm9kZVRyYXZlcnNhbDo6bmV4dChub2RlLCBzaGFkb3dSb290KSkgewogICAgICAgICBpZiAobm9k
ZS0+aXNJbnNlcnRpb25Qb2ludCgpKQogICAgICAgICAgICAgbV9pbnNlcnRpb25Qb2ludExpc3Qu
YXBwZW5kKHRvSW5zZXJ0aW9uUG9pbnQobm9kZSkpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcAkocmV2aXNpb24gMTM3MTc1
KQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNzYsNiArNzYsNyBAQAogI2luY2x1ZGUgIk11dGF0aW9uRXZlbnQuaCIK
ICNpbmNsdWRlICJOb2RlLmgiCiAjaW5jbHVkZSAiTm9kZUxpc3QuaCIKKyNpbmNsdWRlICJOb2Rl
VHJhdmVyc2FsLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlBhc3RlYm9hcmQuaCIK
ICNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgpAQCAtODQxLDcgKzg0Miw3IEBAIHZvaWQgSW5zcGVj
dG9yRE9NQWdlbnQ6OnBlcmZvcm1TZWFyY2goRXIKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAg
ICAgICAgIC8vIE1hbnVhbCBwbGFpbiB0ZXh0IHNlYXJjaC4KLSAgICAgICAgd2hpbGUgKChub2Rl
ID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZShkb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50KCkpKSkg
eworICAgICAgICB3aGlsZSAoKG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUsIGRvY3Vt
ZW50LT5kb2N1bWVudEVsZW1lbnQoKSkpKSB7CiAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm5v
ZGVUeXBlKCkpIHsKICAgICAgICAgICAgIGNhc2UgTm9kZTo6VEVYVF9OT0RFOgogICAgICAgICAg
ICAgY2FzZSBOb2RlOjpDT01NRU5UX05PREU6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yTWVtb3J5QWdlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JNZW1vcnlBZ2VudC5jcHAJKHJldmlzaW9uIDEzNzE3NSkKKysr
IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JNZW1vcnlBZ2VudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQ5LDYgKzQ5LDcgQEAKICNpbmNsdWRlICJNZW1vcnlJbnN0cnVtZW50YXRp
b25JbXBsLmgiCiAjaW5jbHVkZSAiTWVtb3J5VXNhZ2VTdXBwb3J0LmgiCiAjaW5jbHVkZSAiTm9k
ZS5oIgorI2luY2x1ZGUgIk5vZGVUcmF2ZXJzYWwuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5j
bHVkZSAiU2NyaXB0R0NFdmVudC5oIgogI2luY2x1ZGUgIlNjcmlwdFByb2ZpbGVyLmgiCkBAIC0y
MzksNyArMjQwLDcgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAgIE5vZGUqIGN1cnJlbnROb2Rl
ID0gcm9vdE5vZGU7CiAgICAgICAgIGNvbGxlY3RMaXN0ZW5lcnNJbmZvKHJvb3ROb2RlKTsKLSAg
ICAgICAgd2hpbGUgKChjdXJyZW50Tm9kZSA9IGN1cnJlbnROb2RlLT50cmF2ZXJzZU5leHROb2Rl
KHJvb3ROb2RlKSkpIHsKKyAgICAgICAgd2hpbGUgKChjdXJyZW50Tm9kZSA9IE5vZGVUcmF2ZXJz
YWw6Om5leHQoY3VycmVudE5vZGUsIHJvb3ROb2RlKSkpIHsKICAgICAgICAgICAgICsrbV90b3Rh
bE5vZGVDb3VudDsKICAgICAgICAgICAgIGNvbGxlY3ROb2RlU3RhdGlzdGljcyhjdXJyZW50Tm9k
ZSk7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRm9jdXNDb250cm9sbGVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZvY3VzQ29udHJvbGxlci5j
cHAJKHJldmlzaW9uIDEzNzE3NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRm9jdXNDb250cm9s
bGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsNiArNDgsNyBAQAogI2luY2x1ZGUgIkhUTUxO
YW1lcy5oIgogI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKICNpbmNsdWRlICJLZXlib2FyZEV2
ZW50LmgiCisjaW5jbHVkZSAiTm9kZVRyYXZlcnNhbC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNp
bmNsdWRlICJSYW5nZS5oIgogI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgpAQCAtNzc1LDcgKzc3
Niw3IEBAIHZvaWQgRm9jdXNDb250cm9sbGVyOjpmaW5kRm9jdXNDYW5kaWRhdGUKICAgICBjdXJy
ZW50LmZvY3VzYWJsZU5vZGUgPSBmb2N1c2VkTm9kZTsKICAgICBjdXJyZW50LnZpc2libGVOb2Rl
ID0gZm9jdXNlZE5vZGU7CiAKLSAgICBmb3IgKDsgbm9kZTsgbm9kZSA9IChub2RlLT5pc0ZyYW1l
T3duZXJFbGVtZW50KCkgfHwgY2FuU2Nyb2xsSW5EaXJlY3Rpb24obm9kZSwgZGlyZWN0aW9uKSkg
PyBub2RlLT50cmF2ZXJzZU5leHRTaWJsaW5nKGNvbnRhaW5lcikgOiBub2RlLT50cmF2ZXJzZU5l
eHROb2RlKGNvbnRhaW5lcikpIHsKKyAgICBmb3IgKDsgbm9kZTsgbm9kZSA9IChub2RlLT5pc0Zy
YW1lT3duZXJFbGVtZW50KCkgfHwgY2FuU2Nyb2xsSW5EaXJlY3Rpb24obm9kZSwgZGlyZWN0aW9u
KSkgPyBOb2RlVHJhdmVyc2FsOjpuZXh0U2libGluZyhub2RlLCBjb250YWluZXIpIDogTm9kZVRy
YXZlcnNhbDo6bmV4dChub2RlLCBjb250YWluZXIpKSB7CiAgICAgICAgIGlmIChub2RlID09IGZv
Y3VzZWROb2RlKQogICAgICAgICAgICAgY29udGludWU7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUu
Y3BwCShyZXZpc2lvbiAxMzcxNzUpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNjMsNiArNjMsNyBAQAogI2luY2x1ZGUgIk1lZGlhRmVhdHVyZU5h
bWVzLmgiCiAjaW5jbHVkZSAiTmF2aWdhdG9yLmgiCiAjaW5jbHVkZSAiTm9kZUxpc3QuaCIKKyNp
bmNsdWRlICJOb2RlVHJhdmVyc2FsLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlBh
Z2VDYWNoZS5oIgogI2luY2x1ZGUgIlBhZ2VHcm91cC5oIgpAQCAtMzc1LDcgKzM3Niw3IEBAIFN0
cmluZyBGcmFtZTo6c2VhcmNoRm9yTGFiZWxzQWJvdmVDZWxsKFIKICAgICBpZiAoYWJvdmVDZWxs
KSB7CiAgICAgICAgIC8vIHNlYXJjaCB3aXRoaW4gdGhlIGFib3ZlIGNlbGwgd2UgZm91bmQgZm9y
IGEgbWF0Y2gKICAgICAgICAgc2l6ZV90IGxlbmd0aFNlYXJjaGVkID0gMDsgICAgCi0gICAgICAg
IGZvciAoTm9kZSogbiA9IGFib3ZlQ2VsbC0+Zmlyc3RDaGlsZCgpOyBuOyBuID0gbi0+dHJhdmVy
c2VOZXh0Tm9kZShhYm92ZUNlbGwpKSB7CisgICAgICAgIGZvciAoTm9kZSogbiA9IGFib3ZlQ2Vs
bC0+Zmlyc3RDaGlsZCgpOyBuOyBuID0gTm9kZVRyYXZlcnNhbDo6bmV4dChuLCBhYm92ZUNlbGwp
KSB7CiAgICAgICAgICAgICBpZiAobi0+aXNUZXh0Tm9kZSgpICYmIG4tPnJlbmRlcmVyKCkgJiYg
bi0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+dmlzaWJpbGl0eSgpID09IFZJU0lCTEUpIHsKICAgICAg
ICAgICAgICAgICAvLyBGb3IgZWFjaCB0ZXh0IGNodW5rLCBydW4gdGhlIHJlZ2V4cAogICAgICAg
ICAgICAgICAgIFN0cmluZyBub2RlU3RyaW5nID0gbi0+bm9kZVZhbHVlKCk7CkBAIC00MTYsMTAg
KzQxNyw3IEBAIFN0cmluZyBGcmFtZTo6c2VhcmNoRm9yTGFiZWxzQmVmb3JlRWxlbWUKICAgICAv
LyB3YWxrIGJhY2t3YXJkcyBpbiB0aGUgbm9kZSB0cmVlLCB1bnRpbCBhbm90aGVyIGVsZW1lbnQs
IG9yIGZvcm0sIG9yIGVuZCBvZiB0cmVlCiAgICAgaW50IHVuc2lnbmVkIGxlbmd0aFNlYXJjaGVk
ID0gMDsKICAgICBOb2RlKiBuOwotICAgIGZvciAobiA9IGVsZW1lbnQtPnRyYXZlcnNlUHJldmlv
dXNOb2RlKCk7Ci0gICAgICAgICBuICYmIGxlbmd0aFNlYXJjaGVkIDwgY2hhcnNTZWFyY2hlZFRo
cmVzaG9sZDsKLSAgICAgICAgIG4gPSBuLT50cmF2ZXJzZVByZXZpb3VzTm9kZSgpKQotICAgIHsK
KyAgICBmb3IgKG4gPSBOb2RlVHJhdmVyc2FsOjpwcmV2aW91cyhlbGVtZW50KTsgbiAmJiBsZW5n
dGhTZWFyY2hlZCA8IGNoYXJzU2VhcmNoZWRUaHJlc2hvbGQ7IG4gPSBOb2RlVHJhdmVyc2FsOjpw
cmV2aW91cyhuKSkgewogICAgICAgICBpZiAobi0+aGFzVGFnTmFtZShmb3JtVGFnKQogICAgICAg
ICAgICAgfHwgKG4tPmlzSFRNTEVsZW1lbnQoKSAmJiBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obikt
PmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpKQogICAgICAgICB7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wYWdlL1RvdWNoRGlzYW1iaWd1YXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BhZ2UvVG91Y2hEaXNhbWJpZ3VhdGlvbi5jcHAJKHJldmlzaW9uIDEzNzE3NSkKKysrIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvVG91Y2hEaXNhbWJpZ3VhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJIVE1M
TmFtZXMuaCIKICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCisjaW5jbHVkZSAiTm9kZVRyYXZl
cnNhbC5oIgogI2luY2x1ZGUgPGFsZ29yaXRobT4KICNpbmNsdWRlIDxjbWF0aD4KIApAQCAtNTUs
MTEgKzU2LDExIEBAIHN0YXRpYyBJbnRSZWN0IGJvdW5kaW5nQm94Rm9yRXZlbnROb2RlcygKICAg
ICB3aGlsZSAobm9kZSkgewogICAgICAgICAvLyBTa2lwIHRoZSB3aG9sZSBzdWItdHJlZSBpZiB0
aGUgbm9kZSBkb2Vzbid0IHByb3BhZ2F0ZSBldmVudHMuCiAgICAgICAgIGlmIChub2RlICE9IGV2
ZW50Tm9kZSAmJiBub2RlLT53aWxsUmVzcG9uZFRvTW91c2VDbGlja0V2ZW50cygpKSB7Ci0gICAg
ICAgICAgICBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0U2libGluZyhldmVudE5vZGUpOworICAg
ICAgICAgICAgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHRTaWJsaW5nKG5vZGUsIGV2ZW50Tm9k
ZSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogICAgICAgICByZXN1bHQudW5p
dGUobm9kZS0+cGl4ZWxTbmFwcGVkQm91bmRpbmdCb3goKSk7Ci0gICAgICAgIG5vZGUgPSBub2Rl
LT50cmF2ZXJzZU5leHROb2RlKGV2ZW50Tm9kZSk7CisgICAgICAgIG5vZGUgPSBOb2RlVHJhdmVy
c2FsOjpuZXh0KG5vZGUsIGV2ZW50Tm9kZSk7CiAgICAgfQogICAgIHJldHVybiBldmVudE5vZGUt
PmRvY3VtZW50KCktPnZpZXcoKS0+Y29udGVudHNUb1dpbmRvdyhyZXN1bHQpOwogfQpJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck5hbWVkRmxvd1RocmVhZC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck5hbWVkRmxvd1RocmVhZC5j
cHAJKHJldmlzaW9uIDEzNzE3NSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJO
YW1lZEZsb3dUaHJlYWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5j
bHVkZSAiRmxvd1RocmVhZENvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJJbmxpbmVUZXh0Qm94Lmgi
CiAjaW5jbHVkZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgiCisjaW5jbHVkZSAiTm9kZVRy
YXZlcnNhbC5oIgogI2luY2x1ZGUgIlBvc2l0aW9uLmgiCiAjaW5jbHVkZSAiUmVuZGVySW5saW5l
LmgiCiAjaW5jbHVkZSAiUmVuZGVyUmVnaW9uLmgiCkBAIC00ODQsNyArNDg1LDcgQEAgdm9pZCBS
ZW5kZXJOYW1lZEZsb3dUaHJlYWQ6OmdldFJhbmdlcyhWZQogICAgICAgICBib29sIHNraXBPdmVy
T3V0c2lkZU5vZGVzID0gZmFsc2U7CiAgICAgICAgIE5vZGUqIGxhc3RFbmROb2RlID0gMDsKIAot
ICAgICAgICBmb3IgKE5vZGUqIG5vZGUgPSBjb250ZW50Tm9kZTsgbm9kZTsgbm9kZSA9IG5vZGUt
PnRyYXZlcnNlTmV4dE5vZGUoY29udGVudE5vZGUpKSB7CisgICAgICAgIGZvciAoTm9kZSogbm9k
ZSA9IGNvbnRlbnROb2RlOyBub2RlOyBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dChub2RlLCBj
b250ZW50Tm9kZSkpIHsKICAgICAgICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBub2Rl
LT5yZW5kZXJlcigpOwogICAgICAgICAgICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTVkdFbGVtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU1ZHRWxlbWVudC5jcHAJKHJldmlz
aW9uIDEzNzE3NSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTVkdFbGVtZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgIkZyYW1lVHJlZS5oIgogI2lu
Y2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIk5v
ZGVUcmF2ZXJzYWwuaCIKICNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKICNpbmNsdWRlICJSZW5k
ZXJQYXJ0LmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2UuaCIKQEAgLTM0NSw3ICszNDYs
NyBAQCB2b2lkIFNWR1NWR0VsZW1lbnQ6OmZvcmNlUmVkcmF3KCkKIFBhc3NSZWZQdHI8Tm9kZUxp
c3Q+IFNWR1NWR0VsZW1lbnQ6OmNvbGxlY3RJbnRlcnNlY3Rpb25PckVuY2xvc3VyZUxpc3QoY29u
c3QgRmxvYXRSZWN0JiByZWN0LCBTVkdFbGVtZW50KiByZWZlcmVuY2VFbGVtZW50LCBDb2xsZWN0
SW50ZXJzZWN0aW9uT3JFbmNsb3N1cmUgY29sbGVjdCkgY29uc3QKIHsKICAgICBWZWN0b3I8UmVm
UHRyPE5vZGU+ID4gbm9kZXM7Ci0gICAgTm9kZSogbm9kZSA9IHRyYXZlcnNlTmV4dE5vZGUocmVm
ZXJlbmNlRWxlbWVudCA/IHJlZmVyZW5jZUVsZW1lbnQgOiB0aGlzKTsKKyAgICBOb2RlKiBub2Rl
ID0gTm9kZVRyYXZlcnNhbDo6bmV4dChyZWZlcmVuY2VFbGVtZW50ID8gcmVmZXJlbmNlRWxlbWVu
dCA6IHRoaXMpOwogICAgIHdoaWxlIChub2RlKSB7CiAgICAgICAgIGlmIChub2RlLT5pc1NWR0Vs
ZW1lbnQoKSkgeyAKICAgICAgICAgICAgIGlmIChjb2xsZWN0ID09IENvbGxlY3RJbnRlcnNlY3Rp
b25MaXN0KSB7CkBAIC0zNTcsNyArMzU4LDcgQEAgUGFzc1JlZlB0cjxOb2RlTGlzdD4gU1ZHU1ZH
RWxlbWVudDo6Y29sbAogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgbm9kZSA9
IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUocmVmZXJlbmNlRWxlbWVudCA/IHJlZmVyZW5jZUVsZW1l
bnQgOiB0aGlzKTsKKyAgICAgICAgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9kZSwgcmVm
ZXJlbmNlRWxlbWVudCA/IHJlZmVyZW5jZUVsZW1lbnQgOiB0aGlzKTsKICAgICB9CiAgICAgcmV0
dXJuIFN0YXRpY05vZGVMaXN0OjphZG9wdChub2Rlcyk7CiB9CkBAIC03ODcsNyArNzg4LDcgQEAg
RWxlbWVudCogU1ZHU1ZHRWxlbWVudDo6Z2V0RWxlbWVudEJ5SWQoYwogCiAgICAgLy8gRmFsbCBi
YWNrIHRvIHRyYXZlcnNpbmcgb3VyIHN1YnRyZWUuIER1cGxpY2F0ZSBpZHMgYXJlIGFsbG93ZWQs
IHRoZSBmaXJzdCBmb3VuZCB3aWxsCiAgICAgLy8gYmUgcmV0dXJuZWQuCi0gICAgZm9yIChOb2Rl
KiBub2RlID0gZmlyc3RDaGlsZCgpOyBub2RlOyBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9k
ZSh0aGlzKSkgeworICAgIGZvciAoTm9kZSogbm9kZSA9IGZpcnN0Q2hpbGQoKTsgbm9kZTsgbm9k
ZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9kZSwgdGhpcykpIHsKICAgICAgICAgaWYgKCFub2Rl
LT5pc0VsZW1lbnROb2RlKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIApJbmRleDogU291cmNl
L1dlYkNvcmUvc3ZnL1NWR1VzZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdVc2VFbGVtZW50LmNwcAkocmV2aXNpb24gMTM3MTc1KQorKysgU291cmNlL1dl
YkNvcmUvc3ZnL1NWR1VzZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw3
IEBACiAjaW5jbHVkZSAiRXZlbnRMaXN0ZW5lci5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgog
I2luY2x1ZGUgIk5vZGVSZW5kZXJTdHlsZS5oIgorI2luY2x1ZGUgIk5vZGVUcmF2ZXJzYWwuaCIK
ICNpbmNsdWRlICJSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lci5oIgogI2luY2x1ZGUgIlJlbmRlclNW
R1Jlc291cmNlLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lci5o
IgpAQCAtNjg5LDEyICs2OTAsMTIgQEAgc3RhdGljIGlubGluZSB2b2lkIHJlbW92ZURpc2FsbG93
ZWRFbGVtZQogICAgIE5vZGUqIG5vZGUgPSBzdWJ0cmVlLT5maXJzdENoaWxkKCk7CiAgICAgd2hp
bGUgKG5vZGUpIHsKICAgICAgICAgaWYgKGlzRGlzYWxsb3dlZEVsZW1lbnQobm9kZSkpIHsKLSAg
ICAgICAgICAgIE5vZGUqIG5leHQgPSBub2RlLT50cmF2ZXJzZU5leHRTaWJsaW5nKHN1YnRyZWUp
OworICAgICAgICAgICAgTm9kZSogbmV4dCA9IE5vZGVUcmF2ZXJzYWw6Om5leHRTaWJsaW5nKG5v
ZGUsIHN1YnRyZWUpOwogICAgICAgICAgICAgLy8gVGhlIHN1YnRyZWUgaXMgbm90IGluIGRvY3Vt
ZW50IHNvIHRoaXMgd29uJ3QgZ2VuZXJhdGUgZXZlbnRzIHRoYXQgY291bGQgbXV0YXRlIHRoZSB0
cmVlLgogICAgICAgICAgICAgbm9kZS0+cGFyZW50Tm9kZSgpLT5yZW1vdmVDaGlsZChub2RlKTsK
ICAgICAgICAgICAgIG5vZGUgPSBuZXh0OwogICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIG5v
ZGUgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKHN1YnRyZWUpOworICAgICAgICAgICAgbm9kZSA9
IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9kZSwgc3VidHJlZSk7CiAgICAgfQogfQogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NNSUxUaW1lQ29udGFpbmVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NNSUxUaW1lQ29udGFpbmVyLmNw
cAkocmV2aXNpb24gMTM3MTc1KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TTUlM
VGltZUNvbnRhaW5lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2lm
IEVOQUJMRShTVkcpCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJOb2RlVHJhdmVy
c2FsLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJTVkdTTUlMRWxlbWVudC5o
IgogI2luY2x1ZGUgIlNWR1NWR0VsZW1lbnQuaCIKQEAgLTIyNCw3ICsyMjUsNyBAQCB2b2lkIFNN
SUxUaW1lQ29udGFpbmVyOjp0aW1lckZpcmVkKFRpbWVyCiB2b2lkIFNNSUxUaW1lQ29udGFpbmVy
Ojp1cGRhdGVEb2N1bWVudE9yZGVySW5kZXhlcygpCiB7CiAgICAgdW5zaWduZWQgdGltaW5nRWxl
bWVudENvdW50ID0gMDsKLSAgICBmb3IgKE5vZGUqIG5vZGUgPSBtX293bmVyU1ZHRWxlbWVudDsg
bm9kZTsgbm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUobV9vd25lclNWR0VsZW1lbnQpKSB7
CisgICAgZm9yIChOb2RlKiBub2RlID0gbV9vd25lclNWR0VsZW1lbnQ7IG5vZGU7IG5vZGUgPSBO
b2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUsIG1fb3duZXJTVkdFbGVtZW50KSkgewogICAgICAgICBp
ZiAoU1ZHU01JTEVsZW1lbnQ6OmlzU01JTEVsZW1lbnQobm9kZSkpCiAgICAgICAgICAgICBzdGF0
aWNfY2FzdDxTVkdTTUlMRWxlbWVudCo+KG5vZGUpLT5zZXREb2N1bWVudE9yZGVySW5kZXgodGlt
aW5nRWxlbWVudENvdW50KyspOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3htbC9YUGF0
aE5vZGVTZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3htbC9YUGF0aE5vZGVT
ZXQuY3BwCShyZXZpc2lvbiAxMzcxNzUpCisrKyBTb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhOb2Rl
U2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkF0dHIu
aCIKICNpbmNsdWRlICJFbGVtZW50LmgiCiAjaW5jbHVkZSAiTm9kZS5oIgorI2luY2x1ZGUgIk5v
ZGVUcmF2ZXJzYWwuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogbmFtZXNwYWNlIFhQYXRoIHsK
QEAgLTIwNiw3ICsyMDcsNyBAQCB2b2lkIE5vZGVTZXQ6OnRyYXZlcnNhbFNvcnQoKSBjb25zdAog
ICAgIFZlY3RvcjxSZWZQdHI8Tm9kZT4gPiBzb3J0ZWROb2RlczsKICAgICBzb3J0ZWROb2Rlcy5y
ZXNlcnZlSW5pdGlhbENhcGFjaXR5KG5vZGVDb3VudCk7CiAKLSAgICBmb3IgKE5vZGUqIG4gPSBm
aW5kUm9vdE5vZGUobV9ub2Rlcy5maXJzdCgpLmdldCgpKTsgbjsgbiA9IG4tPnRyYXZlcnNlTmV4
dE5vZGUoKSkgeworICAgIGZvciAoTm9kZSogbiA9IGZpbmRSb290Tm9kZShtX25vZGVzLmZpcnN0
KCkuZ2V0KCkpOyBuOyBuID0gTm9kZVRyYXZlcnNhbDo6bmV4dChuKSkgewogICAgICAgICBpZiAo
bm9kZXMuY29udGFpbnMobikpCiAgICAgICAgICAgICBzb3J0ZWROb2Rlcy5hcHBlbmQobik7CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3htbC9YUGF0aFN0ZXAuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3htbC9YUGF0aFN0ZXAuY3BwCShyZXZpc2lvbiAxMzcxNzUpCisrKyBTb3Vy
Y2UvV2ViQ29yZS94bWwvWFBhdGhTdGVwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEs
NyBAQAogI2luY2x1ZGUgIkF0dHIuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUg
IkVsZW1lbnQuaCIKKyNpbmNsdWRlICJOb2RlVHJhdmVyc2FsLmgiCiAjaW5jbHVkZSAiWE1MTlNO
YW1lcy5oIgogI2luY2x1ZGUgIlhQYXRoUGFyc2VyLmgiCiAjaW5jbHVkZSAiWFBhdGhVdGlsLmgi
CkBAIC0yNDYsNyArMjQ3LDcgQEAgdm9pZCBTdGVwOjpub2Rlc0luQXhpcyhOb2RlKiBjb250ZXh0
LCBObwogICAgICAgICAgICAgaWYgKGNvbnRleHQtPmlzQXR0cmlidXRlTm9kZSgpKSAvLyBJbiBY
UGF0aCBtb2RlbCwgYXR0cmlidXRlIG5vZGVzIGRvIG5vdCBoYXZlIGNoaWxkcmVuLgogICAgICAg
ICAgICAgICAgIHJldHVybjsKIAotICAgICAgICAgICAgZm9yIChOb2RlKiBuID0gY29udGV4dC0+
Zmlyc3RDaGlsZCgpOyBuOyBuID0gbi0+dHJhdmVyc2VOZXh0Tm9kZShjb250ZXh0KSkKKyAgICAg
ICAgICAgIGZvciAoTm9kZSogbiA9IGNvbnRleHQtPmZpcnN0Q2hpbGQoKTsgbjsgbiA9IE5vZGVU
cmF2ZXJzYWw6Om5leHQobiwgY29udGV4dCkpCiAgICAgICAgICAgICAgICAgaWYgKG5vZGVNYXRj
aGVzKG4sIERlc2NlbmRhbnRBeGlzLCBtX25vZGVUZXN0KSkKICAgICAgICAgICAgICAgICAgICAg
bm9kZXMuYXBwZW5kKG4pOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMjk3LDcgKzI5OCw3IEBA
IHZvaWQgU3RlcDo6bm9kZXNJbkF4aXMoTm9kZSogY29udGV4dCwgTm8KICAgICAgICAgY2FzZSBG
b2xsb3dpbmdBeGlzOgogICAgICAgICAgICAgaWYgKGNvbnRleHQtPmlzQXR0cmlidXRlTm9kZSgp
KSB7CiAgICAgICAgICAgICAgICAgTm9kZSogcCA9IHN0YXRpY19jYXN0PEF0dHIqPihjb250ZXh0
KS0+b3duZXJFbGVtZW50KCk7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKChwID0gcC0+dHJhdmVy
c2VOZXh0Tm9kZSgpKSkKKyAgICAgICAgICAgICAgICB3aGlsZSAoKHAgPSBOb2RlVHJhdmVyc2Fs
OjpuZXh0KHApKSkKICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGVNYXRjaGVzKHAsIEZvbGxv
d2luZ0F4aXMsIG1fbm9kZVRlc3QpKQogICAgICAgICAgICAgICAgICAgICAgICAgbm9kZXMuYXBw
ZW5kKHApOwogICAgICAgICAgICAgfSBlbHNlIHsKQEAgLTMwNSw3ICszMDYsNyBAQCB2b2lkIFN0
ZXA6Om5vZGVzSW5BeGlzKE5vZGUqIGNvbnRleHQsIE5vCiAgICAgICAgICAgICAgICAgICAgIGZv
ciAoTm9kZSogbiA9IHAtPm5leHRTaWJsaW5nKCk7IG47IG4gPSBuLT5uZXh0U2libGluZygpKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9kZU1hdGNoZXMobiwgRm9sbG93aW5nQXhp
cywgbV9ub2RlVGVzdCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZXMuYXBwZW5k
KG4pOwotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChOb2RlKiBjID0gbi0+Zmlyc3RDaGls
ZCgpOyBjOyBjID0gYy0+dHJhdmVyc2VOZXh0Tm9kZShuKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGZvciAoTm9kZSogYyA9IG4tPmZpcnN0Q2hpbGQoKTsgYzsgYyA9IE5vZGVUcmF2ZXJzYWw6
Om5leHQoYywgbikpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGVNYXRjaGVz
KGMsIEZvbGxvd2luZ0F4aXMsIG1fbm9kZVRlc3QpKQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBub2Rlcy5hcHBlbmQoYyk7CiAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTMxOCw3
ICszMTksNyBAQCB2b2lkIFN0ZXA6Om5vZGVzSW5BeGlzKE5vZGUqIGNvbnRleHQsIE5vCiAKICAg
ICAgICAgICAgIE5vZGUqIG4gPSBjb250ZXh0OwogICAgICAgICAgICAgd2hpbGUgKENvbnRhaW5l
ck5vZGUqIHBhcmVudCA9IG4tPnBhcmVudE5vZGUoKSkgewotICAgICAgICAgICAgICAgIGZvciAo
biA9IG4tPnRyYXZlcnNlUHJldmlvdXNOb2RlKCk7IG4gIT0gcGFyZW50OyBuID0gbi0+dHJhdmVy
c2VQcmV2aW91c05vZGUoKSkKKyAgICAgICAgICAgICAgICBmb3IgKG4gPSBOb2RlVHJhdmVyc2Fs
OjpwcmV2aW91cyhuKTsgbiAhPSBwYXJlbnQ7IG4gPSBOb2RlVHJhdmVyc2FsOjpwcmV2aW91cyhu
KSkKICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGVNYXRjaGVzKG4sIFByZWNlZGluZ0F4aXMs
IG1fbm9kZVRlc3QpKQogICAgICAgICAgICAgICAgICAgICAgICAgbm9kZXMuYXBwZW5kKG4pOwog
ICAgICAgICAgICAgICAgIG4gPSBwYXJlbnQ7CkBAIC0zNjUsNyArMzY2LDcgQEAgdm9pZCBTdGVw
Ojpub2Rlc0luQXhpcyhOb2RlKiBjb250ZXh0LCBObwogICAgICAgICAgICAgaWYgKGNvbnRleHQt
PmlzQXR0cmlidXRlTm9kZSgpKSAvLyBJbiBYUGF0aCBtb2RlbCwgYXR0cmlidXRlIG5vZGVzIGRv
IG5vdCBoYXZlIGNoaWxkcmVuLgogICAgICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICAg
ICAgZm9yIChOb2RlKiBuID0gY29udGV4dC0+Zmlyc3RDaGlsZCgpOyBuOyBuID0gbi0+dHJhdmVy
c2VOZXh0Tm9kZShjb250ZXh0KSkKKyAgICAgICAgICAgIGZvciAoTm9kZSogbiA9IGNvbnRleHQt
PmZpcnN0Q2hpbGQoKTsgbjsgbiA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobiwgY29udGV4dCkpCiAg
ICAgICAgICAgICBpZiAobm9kZU1hdGNoZXMobiwgRGVzY2VuZGFudE9yU2VsZkF4aXMsIG1fbm9k
ZVRlc3QpKQogICAgICAgICAgICAgICAgIG5vZGVzLmFwcGVuZChuKTsKICAgICAgICAgICAgIHJl
dHVybjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3htbC9YUGF0aFV0aWwuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3htbC9YUGF0aFV0aWwuY3BwCShyZXZpc2lvbiAxMzcxNzUpCisr
KyBTb3VyY2UvV2ViQ29yZS94bWwvWFBhdGhVdGlsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgs
NiArMjgsNyBAQAogI2luY2x1ZGUgIlhQYXRoVXRpbC5oIgogCiAjaW5jbHVkZSAiQ29udGFpbmVy
Tm9kZS5oIgorI2luY2x1ZGUgIk5vZGVUcmF2ZXJzYWwuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9T
dHJpbmdCdWlsZGVyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTUzLDcgKzU0LDcgQEAg
U3RyaW5nIHN0cmluZ1ZhbHVlKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICAgICAgU3RyaW5nQnVp
bGRlciByZXN1bHQ7CiAgICAgICAgICAgICAgICAgcmVzdWx0LnJlc2VydmVDYXBhY2l0eSgxMDI0
KTsKIAotICAgICAgICAgICAgICAgIGZvciAoTm9kZSogbiA9IG5vZGUtPmZpcnN0Q2hpbGQoKTsg
bjsgbiA9IG4tPnRyYXZlcnNlTmV4dE5vZGUobm9kZSkpIHsKKyAgICAgICAgICAgICAgICBmb3Ig
KE5vZGUqIG4gPSBub2RlLT5maXJzdENoaWxkKCk7IG47IG4gPSBOb2RlVHJhdmVyc2FsOjpuZXh0
KG4sIG5vZGUpKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChuLT5pc1RleHROb2RlKCkpIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgbm9kZVZhbHVlID0gbi0+bm9k
ZVZhbHVlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKG5vZGVWYWx1
ZSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMzcxNzUpCisrKyBTb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAxMi0xMi0wOSAgQW50
dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CisKKyAgICAgICAgRmFjdG9yIG5vZGUgdHJh
dmVyc2FsIGludG8gc3RhbmRhbG9uZSBmdW5jdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNDUwNworCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWU6OmNvbnRhaW5zQW55Rm9ybUVsZW1lbnRzKToK
KwogMjAxMi0xMi0xMCAgQWxleGlzIE1lbmFyZCAgPGFsZXhpc0B3ZWJraXQub3JnPgogCiAgICAg
ICAgIFtDU1MzIEJhY2tncm91bmRzIGFuZCBCb3JkZXJzXSBSZW1vdmUgQ1NTM19CQUNLR1JPVU5E
IGZlYXR1cmUgZmxhZy4KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJGcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYkZyYW1lLmNwcAkocmV2aXNpb24gMTM3MTc1KQorKysgU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQsNiArNTQs
NyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvSlNDU1NTdHlsZURlY2xhcmF0aW9uLmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9KU0VsZW1lbnQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0pTUmFuZ2UuaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL05vZGVUcmF2ZXJzYWwuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1BhZ2Uu
aD4KICNpbmNsdWRlIDxXZWJDb3JlL1BsdWdpbkRvY3VtZW50Lmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9SZW5kZXJUcmVlQXNUZXh0Lmg+CkBAIC02NjUsNyArNjY2LDcgQEAgYm9vbCBXZWJGcmFtZTo6
Y29udGFpbnNBbnlGb3JtRWxlbWVudHMoKQogICAgIGlmICghZG9jdW1lbnQpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgIGZvciAoTm9kZSogbm9kZSA9IGRvY3VtZW50LT5kb2N1bWVudEVs
ZW1lbnQoKTsgbm9kZTsgbm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoKSkgeworICAgIGZv
ciAoTm9kZSogbm9kZSA9IGRvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQoKTsgbm9kZTsgbm9kZSA9
IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9kZSkpIHsKICAgICAgICAgaWYgKCFub2RlLT5pc0VsZW1l
bnROb2RlKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgaWYgKHN0YXRpY19jYXN0
PEVsZW1lbnQqPihub2RlKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmZvcm1UYWcpKQpJbmRleDog
U291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9XZWJQYWdlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYlBhZ2UuY3BwCShyZXZpc2lvbiAxMzcxNzUp
CisrKyBTb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYlBhZ2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC05MCw2ICs5MCw3IEBACiAjZW5kaWYKICNpbmNsdWRlICJOZXR3b3JrTWFuYWdlci5o
IgogI2luY2x1ZGUgIk5vZGVSZW5kZXJTdHlsZS5oIgorI2luY2x1ZGUgIk5vZGVUcmF2ZXJzYWwu
aCIKICNpZiBFTkFCTEUoTkFWSUdBVE9SX0NPTlRFTlRfVVRJTFMpCiAjaW5jbHVkZSAiTmF2aWdh
dG9yQ29udGVudFV0aWxzQ2xpZW50QmxhY2tCZXJyeS5oIgogI2VuZGlmCkBAIC01NzEyLDcgKzU3
MTMsNyBAQCB2b2lkIFdlYlBhZ2VQcml2YXRlOjpleGl0RnVsbHNjcmVlbkZvck5vCiAvLyBUT0RP
OiBXZSBzaG91bGQgcmVtb3ZlIHRoaXMgaGVscGVyIGNsYXNzIHdoZW4gd2UgZGVjaWRlIHRvIHN1
cHBvcnQgYWxsIGVsZW1lbnRzLgogc3RhdGljIGJvb2wgY29udGFpbnNWaWRlb1RhZ3MoRWxlbWVu
dCogZWxlbWVudCkKIHsKLSAgICBmb3IgKE5vZGUqIG5vZGUgPSBlbGVtZW50LT5maXJzdENoaWxk
KCk7IG5vZGU7IG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKGVsZW1lbnQpKSB7CisgICAg
Zm9yIChOb2RlKiBub2RlID0gZWxlbWVudC0+Zmlyc3RDaGlsZCgpOyBub2RlOyBub2RlID0gTm9k
ZVRyYXZlcnNhbDo6bmV4dChub2RlLCBlbGVtZW50KSkgewogICAgICAgICBpZiAobm9kZS0+aGFz
VGFnTmFtZShIVE1MTmFtZXM6OnZpZGVvVGFnKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiAxMzcxNzUpCisr
KyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDEzIEBACisyMDEyLTEyLTA5ICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4K
KworICAgICAgICBGYWN0b3Igbm9kZSB0cmF2ZXJzYWwgaW50byBzdGFuZGFsb25lIGZ1bmN0aW9u
cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA0NTA3
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBzcmMv
V2ViRnJhbWVJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjpzZXRGaW5k
RW5kc3RhdGVGb2N1c0FuZFNlbGVjdGlvbik6CisKIDIwMTItMTItMTAgIEFsZXhpcyBNZW5hcmQg
IDxhbGV4aXNAd2Via2l0Lm9yZz4KIAogICAgICAgICBbQ1NTMyBCYWNrZ3JvdW5kcyBhbmQgQm9y
ZGVyc10gUmVtb3ZlIENTUzNfQkFDS0dST1VORCBmZWF0dXJlIGZsYWcuCkluZGV4OiBTb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5jcHAJKHJldmlzaW9uIDEzNzE3NSkK
KysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTExOCw2ICsxMTgsNyBAQAogI2luY2x1ZGUgIktVUkwuaCIKICNpbmNsdWRlICJN
ZXNzYWdlUG9ydC5oIgogI2luY2x1ZGUgIk5vZGUuaCIKKyNpbmNsdWRlICJOb2RlVHJhdmVyc2Fs
LmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlBhZ2VPdmVybGF5LmgiCiAjaW5jbHVk
ZSAiUGVyZm9ybWFuY2UuaCIKQEAgLTIzNDksNyArMjM1MCw3IEBAIHZvaWQgV2ViRnJhbWVJbXBs
OjpzZXRGaW5kRW5kc3RhdGVGb2N1c0EKICAgICAgICAgICAgICAgICBmcmFtZSgpLT5kb2N1bWVu
dCgpLT5zZXRGb2N1c2VkTm9kZShub2RlKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgpOwor
ICAgICAgICAgICAgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9kZSk7CiAgICAgICAgIH0K
IAogICAgICAgICAvLyBObyBub2RlIHJlbGF0ZWQgdG8gdGhlIGFjdGl2ZSBtYXRjaCB3YXMgZm9j
dXNhYmxlLCBzbyBzZXQgdGhlCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMzcxNzUp
CisrKyBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyAr
MSwxMyBAQAorMjAxMi0xMi0wOSAgQW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CisK
KyAgICAgICAgRmFjdG9yIG5vZGUgdHJhdmVyc2FsIGludG8gc3RhbmRhbG9uZSBmdW5jdGlvbnMK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNDUwNwor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgIAorICAgICAgICAqIFdl
YlZpZXcvV2ViSFRNTFJlcHJlc2VudGF0aW9uLm1tOgorICAgICAgICAoc2VhcmNoRm9yTGFiZWxz
QmVmb3JlRWxlbWVudCk6CisKIDIwMTItMTItMTAgIEFsZXhpcyBNZW5hcmQgIDxhbGV4aXNAd2Vi
a2l0Lm9yZz4KIAogICAgICAgICBbQ1NTMyBCYWNrZ3JvdW5kcyBhbmQgQm9yZGVyc10gUmVtb3Zl
IENTUzNfQkFDS0dST1VORCBmZWF0dXJlIGZsYWcuCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9X
ZWJWaWV3L1dlYkhUTUxSZXByZXNlbnRhdGlvbi5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L21hYy9XZWJWaWV3L1dlYkhUTUxSZXByZXNlbnRhdGlvbi5tbQkocmV2aXNpb24gMTM3MTc1
KQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1MUmVwcmVzZW50YXRpb24ubW0J
KHdvcmtpbmcgY29weSkKQEAgLTU0LDYgKzU0LDcgQEAKICNpbXBvcnQgPFdlYkNvcmUvSFRNTE5h
bWVzLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0hUTUxUYWJsZUNlbGxFbGVtZW50Lmg+CiAjaW1wb3J0
IDxXZWJDb3JlL01JTUVUeXBlUmVnaXN0cnkuaD4KKyNpbXBvcnQgPFdlYkNvcmUvTm9kZVRyYXZl
cnNhbC5oPgogI2ltcG9ydCA8V2ViQ29yZS9SYW5nZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9SZWd1
bGFyRXhwcmVzc2lvbi5oPgogI2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJPYmplY3QuaD4KQEAgLTQz
Nyw5ICs0MzgsOSBAQCBzdGF0aWMgTlNTdHJpbmcqIHNlYXJjaEZvckxhYmVsc0JlZm9yZUVsCiAg
ICAgLy8gd2FsayBiYWNrd2FyZHMgaW4gdGhlIG5vZGUgdHJlZSwgdW50aWwgYW5vdGhlciBlbGVt
ZW50LCBvciBmb3JtLCBvciBlbmQgb2YgdHJlZQogICAgIHVuc2lnbmVkIGxlbmd0aFNlYXJjaGVk
ID0gMDsKICAgICBOb2RlKiBuOwotICAgIGZvciAobiA9IGVsZW1lbnQtPnRyYXZlcnNlUHJldmlv
dXNOb2RlKCk7CisgICAgZm9yIChuID0gTm9kZVRyYXZlcnNhbDo6cHJldmlvdXMoZWxlbWVudCk7
CiAgICAgICAgICBuICYmIGxlbmd0aFNlYXJjaGVkIDwgY2hhcnNTZWFyY2hlZFRocmVzaG9sZDsK
LSAgICAgICAgIG4gPSBuLT50cmF2ZXJzZVByZXZpb3VzTm9kZSgpKQorICAgICAgICAgbiA9IE5v
ZGVUcmF2ZXJzYWw6OnByZXZpb3VzKG4pKQogICAgIHsKICAgICAgICAgaWYgKG4tPmhhc1RhZ05h
bWUoZm9ybVRhZykKICAgICAgICAgICAgIHx8IChuLT5pc0hUTUxFbGVtZW50KCkgJiYgc3RhdGlj
X2Nhc3Q8RWxlbWVudCo+KG4pLT5pc0Zvcm1Db250cm9sRWxlbWVudCgpKSkK
</data>
<flag name="commit-queue"
          id="195207"
          type_id="3"
          status="-"
          setter="eflews.bot"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>178654</attachid>
            <date>2012-12-10 15:44:26 -0800</date>
            <delta_ts>2012-12-10 15:44:26 -0800</delta_ts>
            <desc>patch5</desc>
            <filename>node-traversal-8.patch</filename>
            <type>text/plain</type>
            <size>146139</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzNzIxMikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxNyBAQAorMjAxMi0xMi0wOSAgQW50dGkg
S29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CisKKyAgICAgICAgRmFjdG9yIG5vZGUgdHJhdmVy
c2FsIGludG8gc3RhbmRhbG9uZSBmdW5jdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNDUwNworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIE5vZGUgdHJhdmVyc2FsIGZ1bmN0aW9ucyBhcmUgY3VycmVu
dGx5IE5vZGUgYW5kIENvbnRhaW5lck5vZGUgbWVtYmVycy4gVGhlaXIgaW1wbGVtZW50YXRpb25z
CisgICAgICAgIGFyZSBjb25mdXNpbmdseSBzY2F0dGVyZWQgb3ZlciBtdWx0aXBsZSBoZWFkZXIg
YW5kIHNvdXJjZSBmaWxlcy4gVGhlc2UgZnVuY3Rpb25zIGhhdmUgbm8gcGFydGljdWxhcgorICAg
ICAgICByZWFzb24gdG8gYmUgbWVtYmVycyBhcyB0aGV5IGRvbid0IHJlcXVpcmUgbm9uLXB1Ymxp
YyBhY2Nlc3MuIFRoZXkgc2hvdWxkIGJlIG1hZGUgZnJlZXN0YW5kaW5nCisgICAgICAgIGZ1bmN0
aW9uIGluc3RlYWQgYW5kIGdhdGhlcmVkIHRvZ2V0aGVyLgorICAgICAgICAKKyAgICAgICAgVGhp
cyBwYXRjaCBhZGRzIE5vZGVUcmF2ZXJzYWwgbmFtZXNwYWNlLCBkZWZpbmVkIGluIE5vZGVUcmF2
ZXJzYWwuaC4gSXQgY29udGFpbnMgZnJlZXN0YW5kaW5nCisgICAgICAgIGZ1bmN0aW9ucyBmb3Ig
dHJhdmVyc2luZyBOb2Rlcy4gTW9zdCBwb3B1bGFyIGZ1bmN0aW9ucyBhcmUgaW5saW5lZCAoYXMg
YmVmb3JlKSBhbmQKKyAgICAgICAgdGhlcmUgYXJlIENvbnRhaW5lck5vZGUgc3BlY2lmaWMgc3Bl
Y2lhbGl6YXRpb25zIChhcyBiZWZvcmUpLgorICAgICAgICAKKyAgICAgICAgSW4gY2xpZW50IGNv
ZGUKKyAgICAgICAgCisgICAgICAgICAgICBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgp
OworICAgICAgICAKKyAgICAgICAgYmVjb21lcworICAgICAgICAKKyAgICAgICAgICAgIG5vZGUg
PSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUpOworICAgICAgICAgICAgCisgICAgICAgIGV0Yy4K
KworICAgICAgICAqIFdlYkNvcmUuZXhwLmluOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlO
b2RlT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0
OjphY2Nlc3NpYmlsaXR5RGVzY3JpcHRpb25Gb3JFbGVtZW50cyk6CisgICAgICAgICogYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vz
c2liaWxpdHlPYmplY3Q6OmZpcnN0QWNjZXNzaWJsZU9iamVjdEZyb21Ob2RlKToKKyAgICAgICAg
KiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YWRkSW1hZ2VNYXBDaGlsZHJlbik6
CisgICAgICAgICogYmluZGluZ3MvanMvSlNEb2N1bWVudEN1c3RvbS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjp0b0pTKToKKyAgICAgICAgKiBjc3MvU2VsZWN0b3JDaGVja2VyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNlbGVjdG9yQ2hlY2tlcjo6YWxsVmlzaXRlZFN0YXRlQ2hhbmdlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6OnZpc2l0ZWRTdGF0ZUNoYW5nZWQpOgor
ICAgICAgICAqIGNzcy9TdHlsZUludmFsaWRhdGlvbkFuYWx5c2lzLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlSW52YWxpZGF0aW9uQW5hbHlzaXM6OmludmFsaWRhdGVTdHlsZSk6CisgICAg
ICAgICogZG9tL0NvbnRhaW5lck5vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZGlzcGF0Y2hD
aGlsZEluc2VydGlvbkV2ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpkaXNwYXRjaENoaWxkUmVt
b3ZhbEV2ZW50cyk6CisgICAgICAgICogZG9tL0NvbnRhaW5lck5vZGUuaDoKKyAgICAgICAgKENv
bnRhaW5lck5vZGUpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogZG9tL0NvbnRhaW5l
ck5vZGVBbGdvcml0aG1zLmg6CisgICAgICAgIChXZWJDb3JlOjpDaGlsZEZyYW1lRGlzY29ubmVj
dG9yOjpjb2xsZWN0RGVzY2VuZGFudCk6CisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpidWlsZEFjY2Vzc0tleU1hcCk6CisgICAgICAgIChX
ZWJDb3JlOjpEb2N1bWVudDo6cmVtb3ZlQWxsRXZlbnRMaXN0ZW5lcnMpOgorICAgICAgICAoV2Vi
Q29yZTo6RG9jdW1lbnQ6OnVwZGF0ZUJhc2VVUkwpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1l
bnQ6OnByb2Nlc3NCYXNlRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6bm9k
ZUFic0luZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojpub2RlV2l0aEFic0luZGV4
KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpnZXRGb2N1c2FibGVOb2Rlcyk6CisgICAg
ICAgICogZG9tL0RvY3VtZW50TWFya2VyQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6Om1hcmtlcnNJblJhbmdlKToKKyAgICAgICAgKFdl
YkNvcmU6OkRvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6c2V0TWFya2Vyc0FjdGl2ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6Omhhc01hcmtlcnMpOgorICAg
ICAgICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpjbGVhckRlc2NyaXB0aW9u
T25NYXJrZXJzSW50ZXJzZWN0aW5nUmFuZ2UpOgorICAgICAgICAqIGRvbS9Eb2N1bWVudE9yZGVy
ZWRNYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRPcmRlcmVkTWFwOjpnZXQpOgor
ICAgICAgICAqIGRvbS9FbGVtZW50U2hhZG93LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1l
bnRTaGFkb3c6OmNvbGxlY3RTZWxlY3RGZWF0dXJlU2V0RnJvbSk6CisgICAgICAgICogZG9tL05v
ZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6bm9ybWFsaXplKToKKyAgICAgICAgKFdl
YkNvcmU6Ok5vZGU6OmxhenlBdHRhY2gpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChX
ZWJDb3JlOjpOb2RlOjpkZXRhY2gpOgorICAgICAgICAoV2ViQ29yZTo6dHJhdmVyc2VUcmVlQW5k
TWFyayk6CisgICAgICAgICogZG9tL05vZGUuaDoKKyAgICAgICAgKE5vZGUpOgorICAgICAgICAq
IGRvbS9Ob2RlSXRlcmF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZUl0ZXJhdG9yOjpO
b2RlUG9pbnRlcjo6bW92ZVRvTmV4dCk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlSXRlcmF0b3I6
Ok5vZGVQb2ludGVyOjptb3ZlVG9QcmV2aW91cyk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlSXRl
cmF0b3I6OnVwZGF0ZUZvck5vZGVSZW1vdmFsKToKKyAgICAgICAgKiBkb20vTm9kZVRyYXZlcnNh
bC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoTm9kZVRyYXZlcnNhbCk6
CisgICAgICAgIChXZWJDb3JlOjpOb2RlVHJhdmVyc2FsOjp0cmF2ZXJzZU5leHROb2RlVGVtcGxh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZVRyYXZlcnNhbDo6bmV4dCk6CisgICAgICAgIChX
ZWJDb3JlOjpOb2RlVHJhdmVyc2FsOjp0cmF2ZXJzZU5leHRTaWJsaW5nVGVtcGxhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6Tm9kZVRyYXZlcnNhbDo6bmV4dFNpYmxpbmcpOgorICAgICAgICAqIGRv
bS9SYW5nZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6dG9TdHJpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6UmFuZ2U6OmNoZWNrRGVsZXRlRXh0cmFjdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSYW5nZTo6Zmlyc3ROb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjpwYXN0TGFzdE5v
ZGUpOgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OnRleHRSZWN0cyk6CisgICAgICAgIChXZWJD
b3JlOjpSYW5nZTo6dGV4dFF1YWRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjpnZXRCb3Jk
ZXJBbmRUZXh0UXVhZHMpOgorICAgICAgICAqIGRvbS9UcmVlU2NvcGUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6VHJlZVNjb3BlOjpsYWJlbEVsZW1lbnRGb3JJZCk6CisgICAgICAgIChXZWJDb3Jl
OjpUcmVlU2NvcGU6OmZpbmRBbmNob3IpOgorICAgICAgICAqIGRvbS9UcmVlU2NvcGVBZG9wdGVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRyZWVTY29wZUFkb3B0ZXI6Om1vdmVUcmVlVG9OZXdT
Y29wZSk6CisgICAgICAgIChXZWJDb3JlOjpUcmVlU2NvcGVBZG9wdGVyOjptb3ZlVHJlZVRvTmV3
RG9jdW1lbnQpOgorICAgICAgICAqIGRvbS9UcmVlV2Fsa2VyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlRyZWVXYWxrZXI6Om5leHROb2RlKToKKyAgICAgICAgKiBlZGl0aW5nL0FwcGx5U3R5bGVD
b21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjphcHBseVJl
bGF0aXZlRm9udFN0eWxlQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21t
YW5kOjpmaXhSYW5nZUFuZEFwcGx5SW5saW5lU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6Y29u
dGFpbnNOb25FZGl0YWJsZVJlZ2lvbik6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29t
bWFuZDo6YXBwbHlJbmxpbmVTdHlsZVRvTm9kZVJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkFw
cGx5U3R5bGVDb21tYW5kOjpyZW1vdmVTdHlsZUZyb21SdW5CZWZvcmVBcHBseWluZ1N0eWxlKToK
KyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjpyZW1vdmVJbmxpbmVTdHlsZSk6
CisgICAgICAgICogZWRpdGluZy9CcmVha0Jsb2NrcXVvdGVDb21tYW5kLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkJyZWFrQmxvY2txdW90ZUNvbW1hbmQ6OmRvQXBwbHkpOgorICAgICAgICAqIGVk
aXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9z
aXRlRWRpdENvbW1hbmQ6OmRlbGV0ZUluc2lnbmlmaWNhbnRUZXh0KToKKyAgICAgICAgKFdlYkNv
cmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjpjbG9uZVBhcmFncmFwaFVuZGVyTmV3RWxlbWVudCk6
CisgICAgICAgICogZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OmZpcnN0RWRpdGFibGVQb3NpdGlvbkluTm9kZSk6CisgICAgICAgIChXZWJDb3Jl
OjpEZWxldGVTZWxlY3Rpb25Db21tYW5kOjptYWtlU3R5bGluZ0VsZW1lbnRzRGlyZWN0Q2hpbGRy
ZW5PZkVkaXRhYmxlUm9vdFRvUHJldmVudFN0eWxlTG9zcyk6CisgICAgICAgIChXZWJDb3JlOjpE
ZWxldGVTZWxlY3Rpb25Db21tYW5kOjpoYW5kbGVHZW5lcmFsRGVsZXRlKToKKyAgICAgICAgKiBl
ZGl0aW5nL0VkaXRDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUVkaXRDb21t
YW5kOjphZGROb2RlQW5kRGVzY2VuZGFudHMpOgorICAgICAgICAqIGVkaXRpbmcvRWRpdGluZ1N0
eWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRpbmdTdHlsZTo6dHJpU3RhdGVPZlN0eWxl
KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRpbmdTdHlsZTo6dGV4dERpcmVjdGlvbkZvclNlbGVj
dGlvbik6CisgICAgICAgICogZWRpdGluZy9FZGl0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjpzaW1wbGlmeU1hcmt1cCk6CisgICAgICAgICogZWRpdGluZy9GcmFtZVNlbGVjdGlv
bi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzY2FuRm9yRm9ybSk6CisgICAgICAgIChXZWJDb3Jl
OjpGcmFtZVNlbGVjdGlvbjo6c2V0U2VsZWN0aW9uRnJvbU5vbmUpOgorICAgICAgICAqIGVkaXRp
bmcvSW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAgKiBl
ZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
cGxhY2VtZW50RnJhZ21lbnQ6OnJlbW92ZVVucmVuZGVyZWROb2Rlcyk6CisgICAgICAgIChXZWJD
b3JlOjpSZXBsYWNlbWVudEZyYWdtZW50OjpyZW1vdmVJbnRlcmNoYW5nZU5vZGVzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpJbnNlcnRlZE5vZGVzOjp3aWxs
UmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpSZXBsYWNl
U2VsZWN0aW9uQ29tbWFuZDo6SW5zZXJ0ZWROb2Rlczo6d2lsbFJlbW92ZU5vZGUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OnJlbW92ZVJlZHVuZGFudFN0eWxl
c0FuZEtlZXBTdHlsZVNwYW5JbmxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6cmVtb3ZlSGVhZENv
bnRlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpoYW5k
bGVTdHlsZVNwYW5zKToKKyAgICAgICAgKiBlZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5k
Lmg6CisgICAgICAgIChXZWJDb3JlOjpSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6SW5zZXJ0ZWRO
b2Rlczo6cGFzdExhc3RMZWFmKToKKyAgICAgICAgKiBlZGl0aW5nL1NpbXBsaWZ5TWFya3VwQ29t
bWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGlmeU1hcmt1cENvbW1hbmQ6OmRvQXBw
bHkpOgorICAgICAgICAqIGVkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlRleHRJdGVyYXRvcjo6YWR2YW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpzaG91bGRFbWl0
TmV3bGluZUFmdGVyTm9kZSk6CisgICAgICAgICogZWRpdGluZy9odG1sZWRpdGluZy5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpoYXNBUmVuZGVyZWREZXNjZW5kYW50KToKKyAgICAgICAgKiBlZGl0
aW5nL21hYy9FZGl0b3JNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmZvbnRGb3JT
ZWxlY3Rpb24pOgorICAgICAgICAqIGVkaXRpbmcvbWFya3VwLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OmNvbXBsZXRlVVJMcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZWRNYXJrdXBBY2N1bXVs
YXRvcjo6dHJhdmVyc2VOb2Rlc0ZvclNlcmlhbGl6YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
ZmluZE5vZGVzU3Vycm91bmRpbmdDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OnRyaW1GcmFn
bWVudCk6CisgICAgICAgICogZWRpdGluZy92aXNpYmxlX3VuaXRzLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OnN0YXJ0T2ZQYXJhZ3JhcGgpOgorICAgICAgICAoV2ViQ29yZTo6ZW5kT2ZQYXJhZ3Jh
cGgpOgorICAgICAgICAqIGh0bWwvSFRNTENvbGxlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6bmV4dE5vZGUpOgorICAgICAgICAqIGh0bWwvSFRNTEVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6c2V0SGFzRGlyQXV0b0ZsYWdSZWN1cnNpdmVseSk6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MRWxlbWVudDo6ZGlyZWN0aW9uYWxpdHkpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEVs
ZW1lbnQ6OmFkanVzdERpcmVjdGlvbmFsaXR5SWZOZWVkZWRBZnRlckNoaWxkcmVuQ2hhbmdlZCk6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MRWxlbWVudDo6Z2V0SXRlbVJlZkVsZW1lbnRzKToKKyAg
ICAgICAgKiBodG1sL0hUTUxGaWVsZFNldEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTEZpZWxkU2V0RWxlbWVudDo6aW52YWxpZGF0ZURpc2FibGVkU3RhdGVVbmRlcik6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MRmllbGRTZXRFbGVtZW50OjpyZWZyZXNoRWxlbWVudHNJZk5lZWRl
ZCk6CisgICAgICAgICogaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTEZvcm1FbGVtZW50Ojpmb3JtRWxlbWVudEluZGV4KToKKyAgICAgICAgKiBodG1sL0hU
TUxMYWJlbEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTExhYmVsRWxlbWVudDo6
Y29udHJvbCk6CisgICAgICAgICogaHRtbC9IVE1MTGVnZW5kRWxlbWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MTGVnZW5kRWxlbWVudDo6YXNzb2NpYXRlZENvbnRyb2wpOgorICAgICAg
ICAqIGh0bWwvSFRNTE1hcEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1hcEVs
ZW1lbnQ6Om1hcE1vdXNlRXZlbnQpOgorICAgICAgICAqIGh0bWwvSFRNTE5hbWVDb2xsZWN0aW9u
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxOYW1lQ29sbGVjdGlvbjo6dmlydHVhbEl0ZW1B
ZnRlcik6CisgICAgICAgICogaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MT3B0aW9uRWxlbWVudDo6Y29sbGVjdE9wdGlvbklubmVyVGV4dCk6CisgICAg
ICAgICogaHRtbC9IVE1MUHJvcGVydGllc0NvbGxlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6bmV4dE5vZGVXaXRoUHJvcGVydHkpOgorICAgICAgICAqIGh0bWwvSFRNTFNlbGVjdEVsZW1l
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6OnJlY2FsY0xpc3RJ
dGVtcyk6CisgICAgICAgICogaHRtbC9IVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6c2VsZWN0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50Ojppbm5lclRleHRW
YWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6dmFs
dWVXaXRoSGFyZExpbmVCcmVha3MpOgorICAgICAgICAqIGh0bWwvUmFkaW9JbnB1dFR5cGUuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmFkaW9JbnB1dFR5cGU6OmhhbmRsZUtleWRvd25FdmVudCk6
CisgICAgICAgICogaHRtbC9zaGFkb3cvQ29udGVudERpc3RyaWJ1dG9yLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNoYWRvd1Jvb3RDb250ZW50RGlzdHJpYnV0aW9uRGF0YTo6ZW5zdXJlSW5zZXJ0
aW9uUG9pbnRMaXN0KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OnBlcmZvcm1TZWFyY2gpOgor
ICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JNZW1vcnlBZ2VudC5jcHA6CisgICAgICAgICog
cGFnZS9Gb2N1c0NvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9jdXNDb250cm9s
bGVyOjpmaW5kRm9jdXNDYW5kaWRhdGVJbkNvbnRhaW5lcik6CisgICAgICAgICogcGFnZS9GcmFt
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6c2VhcmNoRm9yTGFiZWxzQWJvdmVDZWxs
KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpzZWFyY2hGb3JMYWJlbHNCZWZvcmVFbGVtZW50
KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTmFtZWRGbG93VGhyZWFkLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlck5hbWVkRmxvd1RocmVhZDo6Z2V0UmFuZ2VzKToKKyAgICAgICAg
KiBzdmcvU1ZHU1ZHRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdTVkdFbGVtZW50
Ojpjb2xsZWN0SW50ZXJzZWN0aW9uT3JFbmNsb3N1cmVMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlNWR1NWR0VsZW1lbnQ6OmdldEVsZW1lbnRCeUlkKToKKyAgICAgICAgKiBzdmcvU1ZHVXNlRWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpyZW1vdmVEaXNhbGxvd2VkRWxlbWVudHNGcm9t
U3VidHJlZSk6CisgICAgICAgICogc3ZnL2FuaW1hdGlvbi9TTUlMVGltZUNvbnRhaW5lci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTTUlMVGltZUNvbnRhaW5lcjo6dXBkYXRlRG9jdW1lbnRPcmRl
ckluZGV4ZXMpOgorICAgICAgICAqIHhtbC9YUGF0aE5vZGVTZXQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6WFBhdGg6Ok5vZGVTZXQ6OnRyYXZlcnNhbFNvcnQpOgorICAgICAgICAqIHhtbC9YUGF0
aFN0ZXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6WFBhdGg6OlN0ZXA6Om5vZGVzSW5BeGlzKToK
KyAgICAgICAgKiB4bWwvWFBhdGhVdGlsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpz
dHJpbmdWYWx1ZSk6CisKIDIwMTItMTItMTAgIEtvbmRhcGFsbHkgS2FseWFuICA8a2FseWFuLmtv
bmRhcGFsbHlAaW50ZWwuY29tPgogCiAgICAgICAgIFtFRkxdW1dlYkdMXSBNaW5vciBSZWZhY3Rv
cmluZyBpbiBHcmFwaGljc0NvbnRleHQzREVmbC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NNYWtl
TGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CShy
ZXZpc2lvbiAxMzcyMTIpCisrKyBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2lu
ZyBjb3B5KQpAQCAtMTE5NCw2ICsxMTk0LDcgQEAgc2V0KFdlYkNvcmVfU09VUkNFUwogICAgIGRv
bS9Ob2RlSXRlcmF0b3IuY3BwCiAgICAgZG9tL05vZGVSYXJlRGF0YS5jcHAKICAgICBkb20vTm9k
ZVJlbmRlcmluZ0NvbnRleHQuY3BwCisgICAgZG9tL05vZGVUcmF2ZXJzYWwuY3BwCiAgICAgZG9t
L05vdGF0aW9uLmNwcAogICAgIGRvbS9PdmVyZmxvd0V2ZW50LmNwcAogICAgIGRvbS9QYWdlVHJh
bnNpdGlvbkV2ZW50LmNwcApJbmRleDogU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5h
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCShyZXZp
c2lvbiAxMzcyMTIpCisrKyBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yODgyLDYgKzI4ODIsOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNv
dXJjZS9XZWJDb3JlL2RvbS9Ob2RlUmFyZURhdGEuaCBcCiAJU291cmNlL1dlYkNvcmUvZG9tL05v
ZGVSZW5kZXJpbmdDb250ZXh0LmggXAogCVNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlUmVuZGVyU3R5
bGUuaCBcCisgICAgU291cmNlL1dlYkNvcmUvZG9tL05vZGVUcmF2ZXJzYWwuY3BwIFwKKyAgICBT
b3VyY2UvV2ViQ29yZS9kb20vTm9kZVRyYXZlcnNhbC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9kb20v
Tm9kZVdpdGhJbmRleC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9kb20vTm90YXRpb24uY3BwIFwKIAlT
b3VyY2UvV2ViQ29yZS9kb20vTm90YXRpb24uaCBcCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9UYXJn
ZXQucHJpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkJKHJldmlzaW9u
IDEzNzIxMikKKysrIFNvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkJKHdvcmtpbmcgY29weSkKQEAg
LTQzMSw2ICs0MzEsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBkb20vTm9kZUl0ZXJhdG9yLmNwcCBc
CiAgICAgZG9tL05vZGVSYXJlRGF0YS5jcHAgXAogICAgIGRvbS9Ob2RlUmVuZGVyaW5nQ29udGV4
dC5jcHAgXAorICAgIGRvbS9Ob2RlVHJhdmVyc2FsLmNwcCBcCiAgICAgZG9tL05vdGF0aW9uLmNw
cCBcCiAgICAgZG9tL1N0YXRpY0hhc2hTZXROb2RlTGlzdC5jcHAgXAogICAgIGRvbS9PdmVyZmxv
d0V2ZW50LmNwcCBcCkBAIC0xNjEzLDYgKzE2MTQsNyBAQCBIRUFERVJTICs9IFwKICAgICBkb20v
Tm9kZUl0ZXJhdG9yLmggXAogICAgIGRvbS9Ob2RlUmFyZURhdGEuaCBcCiAgICAgZG9tL05vZGVS
ZW5kZXJpbmdDb250ZXh0LmggXAorICAgIGRvbS9Ob2RlVHJhdmVyc2FsLmggXAogICAgIGRvbS9O
b3RhdGlvbi5oIFwKICAgICBkb20vU3RhdGljSGFzaFNldE5vZGVMaXN0LmggXAogICAgIGRvbS9P
dmVyZmxvd0V2ZW50LmggXApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHJldmlzaW9uIDEzNzIx
MikKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCSh3b3JraW5nIGNvcHkpCkBAIC0y
MjgsNiArMjI4LDggQEAgX19aTjdXZWJDb3JlMTNJZGVudGlmaWVyUmVwM2dldEVpCiBfX1pON1dl
YkNvcmUxM0pTSFRNTEVsZW1lbnQ2c19pbmZvRQogX19aTjdXZWJDb3JlMTNLZXlib2FyZEV2ZW50
QzFFUktOM1dURjEyQXRvbWljU3RyaW5nRWJiUE5TXzlET01XaW5kb3dFUktOUzFfNlN0cmluZ0Vq
YmJiYmIKIF9fWk43V2ViQ29yZTEzS2V5Ym9hcmRFdmVudEMxRVJLTlNfMjFQbGF0Zm9ybUtleWJv
YXJkRXZlbnRFUE5TXzlET01XaW5kb3dFCitfX1pON1dlYkNvcmUxM05vZGVUcmF2ZXJzYWwxOW5l
eHRBbmNlc3RvclNpYmxpbmdFUEtOU180Tm9kZUUKK19fWk43V2ViQ29yZTEzTm9kZVRyYXZlcnNh
bDhwcmV2aW91c0VQS05TXzROb2RlRVMzXwogX19aTjdXZWJDb3JlMTNRdWFsaWZpZWROYW1lRDFF
dgogX19aTjdXZWJDb3JlMTNSZXNvdXJjZUVycm9yQzFFUDdOU0Vycm9yCiBfX1pON1dlYkNvcmUx
M1Jlc291cmNlRXJyb3JDMUVQOV9fQ0ZFcnJvcgpAQCAtMTM2Myw4ICsxMzY1LDYgQEAgX19aTjdX
ZWJDb3JlNE5vZGUxMmluc2VydEJlZm9yZUVOM1dURjEwUAogX19aTks3V2ViQ29yZTROb2RlMTNv
d25lckRvY3VtZW50RXYKIF9fWk5LN1dlYkNvcmU0Tm9kZTE0aXNEZXNjZW5kYW50T2ZFUEtTMF8K
IF9fWk5LN1dlYkNvcmU0Tm9kZTE4Z2V0U3VicmVzb3VyY2VVUkxzRVJOM1dURjExTGlzdEhhc2hT
ZXRJTlNfNEtVUkxFTG0yNTZFTlNfOEtVUkxIYXNoRUVFCi1fX1pOSzdXZWJDb3JlNE5vZGUyMHRy
YXZlcnNlUHJldmlvdXNOb2RlRVBLUzBfCi1fX1pOSzdXZWJDb3JlNE5vZGUyN3RyYXZlcnNlTmV4
dEFuY2VzdG9yU2libGluZ0V2CiBfX1pOSzdXZWJDb3JlNE5vZGUzMW51bWJlck9mU2NvcGVkSFRN
TFN0eWxlQ2hpbGRyZW5FdgogX19aTks3V2ViQ29yZTROb2RlOW5vZGVJbmRleEV2CiBfX1pOSzdX
ZWJDb3JlNFBhZ2UxMHBsdWdpbkRhdGFFdgpAQCAtMjA2Miw3ICsyMDYyLDYgQEAgX19aTks3V2Vi
Q29yZTE1VmlzaWJsZVBvc2l0aW9uNXJpZ2h0RWIKIF9fWk5LN1dlYkNvcmUxN1JlbmRlclRleHRD
b250cm9sMjJ0ZXh0Rm9ybUNvbnRyb2xFbGVtZW50RXYKIF9fWk5LN1dlYkNvcmUxN1JlbmRlclRl
eHRDb250cm9sMjN2aXNpYmxlUG9zaXRpb25Gb3JJbmRleEVpCiBfX1pOSzdXZWJDb3JlNE5vZGUx
OHJlbmRlcmVySXNFZGl0YWJsZUVOUzBfMTNFZGl0YWJsZUxldmVsRQotX19aTks3V2ViQ29yZTRO
b2RlMjd0cmF2ZXJzZU5leHRBbmNlc3RvclNpYmxpbmdFUEtTMF8KIF9fWk5LN1dlYkNvcmU1RnJh
bWUxMnVwZGF0ZUxheW91dEV2CiBfX1pOSzdXZWJDb3JlNUZyYW1lMTNkb2N1bWVudFNjYWxlRXYK
IF9fWk5LN1dlYkNvcmU1RnJhbWUxNWlubmVyTGluZUhlaWdodEVQN0RPTU5vZGUKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmd5cGkJKHJldmlzaW9uIDEzNzIxMikKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
Z3lwaQkod29ya2luZyBjb3B5KQpAQCAtMjg0OCw2ICsyODQ4LDggQEAKICAgICAgICAgICAgICdk
b20vTm9kZVJlbmRlcmluZ0NvbnRleHQuY3BwJywKICAgICAgICAgICAgICdkb20vTm9kZVJlbmRl
cmluZ0NvbnRleHQuaCcsCiAgICAgICAgICAgICAnZG9tL05vZGVSZW5kZXJTdHlsZS5oJywKKyAg
ICAgICAgICAgICdkb20vTm9kZVRyYXZlcnNhbC5jcHAnLAorICAgICAgICAgICAgJ2RvbS9Ob2Rl
VHJhdmVyc2FsLmgnLAogICAgICAgICAgICAgJ2RvbS9Ob2RlV2l0aEluZGV4LmgnLAogICAgICAg
ICAgICAgJ2RvbS9Ob3RhdGlvbi5jcHAnLAogICAgICAgICAgICAgJ2RvbS9Ob3RhdGlvbi5oJywK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCShy
ZXZpc2lvbiAxMzcyMTIpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3Jl
LnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAtNTM0MDEsNiArNTM0MDEsMTQgQEAKIAkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXGRvbVxOb2RlUmVuZGVyaW5nQ29udGV4dC5oIgogCQkJCT4KIAkJCTwvRmls
ZT4KKyAgICAgICAgICAgIDxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxkb21cTm9kZVRyYXZl
cnNhbC5jcHAiCisJCQkJPgorCQkJPC9GaWxlPgorICAgICAgICAgICAgPEZpbGUKKwkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXGRvbVxOb2RlVHJhdmVyc2FsLmgiCisJCQkJPgorCQkJPC9GaWxlPgogCQkJ
PEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGRvbVxOb3RhdGlvbi5jcHAiCiAJCQkJPgpJbmRl
eDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkocmV2aXNpb24gMTM3MjEyKQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC02MTg0LDYgKzYxODQsOCBAQAogCQlF
NDE1RjE2OTBEOUExNjVEMDAzM0NFOTcgLyogRE9NRWxlbWVudFRpbWVDb250cm9sLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDE1RjE2ODBEOUExNjVE
MDAzM0NFOTcgLyogRE9NRWxlbWVudFRpbWVDb250cm9sLmggKi87IH07CiAJCUU0MTVGMTg0MEQ5
QTFBODMwMDMzQ0U5NyAvKiBFbGVtZW50VGltZUNvbnRyb2wuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0MTVGMTgzMEQ5QTFBODMwMDMzQ0U5NyAvKiBF
bGVtZW50VGltZUNvbnRyb2wuaCAqLzsgfTsKIAkJRTQyOTVGQTQxMkIwNjE0RTAwRDFBQ0UwIC8q
IFJlc291cmNlTG9hZFByaW9yaXR5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBFNDI5NUZBMzEyQjA2MTRFMDBEMUFDRTAgLyogUmVzb3VyY2VMb2FkUHJp
b3JpdHkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQlFNDMxMDVCODE2NzUwRjBDMDBEQjJGQjggLyogTm9kZVRyYXZlcnNhbC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDMxMDVCNzE2NzUwRjBDMDBE
QjJGQjggLyogTm9kZVRyYXZlcnNhbC5jcHAgKi87IH07CisJCUU0MzEwNUJCMTY3NTBGMTYwMERC
MkZCOCAvKiBOb2RlVHJhdmVyc2FsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBFNDMxMDVCQTE2NzUwRjE2MDBEQjJGQjggLyogTm9kZVRyYXZlcnNhbC5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUU0NDYx
M0ExMENENjMzMTAwMEZBREE3NSAvKiBIVE1MQXVkaW9FbGVtZW50LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0NDYxMzhGMENENjMzMTAwMEZBREE3
NSAvKiBIVE1MQXVkaW9FbGVtZW50LmNwcCAqLzsgfTsKIAkJRTQ0NjEzQTIwQ0Q2MzMxMDAwRkFE
QTc1IC8qIEhUTUxBdWRpb0VsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEU0NDYxMzkwMENENjMzMTAwMEZBREE3NSAvKiBIVE1MQXVkaW9FbGVt
ZW50LmggKi87IH07CiAJCUU0NDYxM0E0MENENjMzMTAwMEZBREE3NSAvKiBIVE1MTWVkaWFFbGVt
ZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0
NDYxMzkyMENENjMzMTAwMEZBREE3NSAvKiBIVE1MTWVkaWFFbGVtZW50LmNwcCAqLzsgfTsKQEAg
LTEwNDg0LDcgKzEwNDg2LDcgQEAKIAkJOTMyRTE2MDgwQUY1NzgzNDAwMjVGNDA4IC8qIEZyYW1l
TG9hZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZyYW1lTG9h
ZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTMzMDlEODcwOTlFNjQ5MTAw
NTZFNTgxIC8qIEFwcGVuZE5vZGVDb21tYW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEFwcGVuZE5vZGVDb21tYW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJOTMzMDlEODgwOTlFNjQ5MTAwNTZFNTgxIC8qIEFwcGVuZE5vZGVDb21tYW5kLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFwcGVuZE5vZGVDb21tYW5kLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTkzMzA5RDg5MDk5RTY0OTEwMDU2RTU4MSAvKiBB
cHBseVN0eWxlQ29tbWFuZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBBcHBseVN0eWxlQ29tbWFuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTkz
MzA5RDg5MDk5RTY0OTEwMDU2RTU4MSAvKiBBcHBseVN0eWxlQ29tbWFuZC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IGxpbmVFbmRpbmcgPSAwOyBwYXRoID0gQXBwbHlTdHlsZUNv
bW1hbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB4Y0xhbmd1YWdlU3BlY2lmaWNhdGlv
bklkZW50aWZpZXIgPSB4Y29kZS5sYW5nLmNwcDsgfTsKIAkJOTMzMDlEOEEwOTlFNjQ5MTAwNTZF
NTgxIC8qIEFwcGx5U3R5bGVDb21tYW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEFwcGx5U3R5bGVDb21tYW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkz
MzA5RDhCMDk5RTY0OTEwMDU2RTU4MSAvKiBCcmVha0Jsb2NrcXVvdGVDb21tYW5kLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJyZWFrQmxvY2txdW90ZUNvbW1hbmQu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5MzMwOUQ4QzA5OUU2NDkxMDA1NkU1
ODEgLyogQnJlYWtCbG9ja3F1b3RlQ29tbWFuZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBCcmVha0Jsb2NrcXVvdGVDb21tYW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0xMzY3Niw2ICsxMzY3OCw4IEBACiAJCUU0MUVBMDM4MTE5ODM2REIwMDcxMEJDNSAv
KiBDU1NQcm9wZXJ0eU5hbWVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IENTU1Byb3BlcnR5TmFtZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlF
NDFFQTAzOTExOTgzNzQ5MDA3MTBCQzUgLyogQ1NTVmFsdWVLZXl3b3Jkcy5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDU1NWYWx1ZUtleXdvcmRzLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQyOTVGQTMxMkIwNjE0RTAwRDFBQ0UwIC8qIFJlc291
cmNlTG9hZFByaW9yaXR5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlc291
cmNlTG9hZFByaW9yaXR5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUU0MzEwNUI3
MTY3NTBGMEMwMERCMkZCOCAvKiBOb2RlVHJhdmVyc2FsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IE5vZGVUcmF2ZXJzYWwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlFNDMxMDVCQTE2NzUwRjE2MDBEQjJGQjggLyogTm9kZVRyYXZlcnNhbC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOb2RlVHJhdmVyc2FsLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0NDYxMzhGMENENjMzMTAwMEZBREE3NSAvKiBIVE1MQXVk
aW9FbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEhUTUxB
dWRpb0VsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNDQ2MTM5MDBD
RDYzMzEwMDBGQURBNzUgLyogSFRNTEF1ZGlvRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBIVE1MQXVkaW9FbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUU0NDYxMzkxMENENjMzMTAwMEZBREE3NSAvKiBIVE1MQXVkaW9FbGVtZW50LmlkbCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHRleHQ7IHBhdGggPSBIVE1MQXVkaW9FbGVtZW50LmlkbDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTIyMTEyLDYgKzIyMTE2LDggQEAKIAkJCQlBN0Y1RDk0RDEzODRG
MDJEMDBBMjlBODcgLyogTm9kZVJlbmRlcmluZ0NvbnRleHQuY3BwICovLAogCQkJCUE3RjVEOTRF
MTM4NEYwMkQwMEEyOUE4NyAvKiBOb2RlUmVuZGVyaW5nQ29udGV4dC5oICovLAogCQkJCTYzRDdC
MzJDMEU3OENEM0YwMEY3NjE3QyAvKiBOb2RlUmVuZGVyU3R5bGUuaCAqLywKKwkJCQlFNDMxMDVC
NzE2NzUwRjBDMDBEQjJGQjggLyogTm9kZVRyYXZlcnNhbC5jcHAgKi8sCisJCQkJRTQzMTA1QkEx
Njc1MEYxNjAwREIyRkI4IC8qIE5vZGVUcmF2ZXJzYWwuaCAqLywKIAkJCQk5MzgyQUFCMTBEOEMz
ODYxMDBGMzU3QTYgLyogTm9kZVdpdGhJbmRleC5oICovLAogCQkJCUE4RUE3RUI3MEExOTQ1RDAw
MEE4RUY1RiAvKiBOb3RhdGlvbi5jcHAgKi8sCiAJCQkJQThFQTdFQjYwQTE5NDVEMDAwQThFRjVG
IC8qIE5vdGF0aW9uLmggKi8sCkBAIC0yMjU2OSw2ICsyMjU3NSw3IEBACiAJCQlpc2EgPSBQQlhI
ZWFkZXJzQnVpbGRQaGFzZTsKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CiAJCQlm
aWxlcyA9ICgKKwkJCQlFNDMxMDVCQjE2NzUwRjE2MDBEQjJGQjggLyogTm9kZVRyYXZlcnNhbC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQzM3NUQ3RkUxNjYzOTUxOTAwNjE4NEFCIC8qIFR5cGVBaGVh
ZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkQxQUYxNTAxNjU2RjE1MTAwQzZENEY3IC8qIEV4Y2x1
c2lvblNoYXBlVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDN0ZBNjIxMEQxRjBDQkQwMERC
MjJBOSAvKiBMaXZlTm9kZUxpc3QuaCBpbiBIZWFkZXJzICovLApAQCAtMjkwMTYsNiArMjkwMjMs
NyBAQAogCQkJCTg2QkE3NjZFMTY2NDI3QTgwMDVCRTVEMSAvKiBGcmFtZUxvYWRSZXF1ZXN0LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTkzRjcyQUY0MTY2NkVERkMwMDJBMDJCRCAvKiBMYXllclBv
b2wubW0gaW4gU291cmNlcyAqLywKIAkJCQlDMzc1RDdGRDE2NjM5NTE5MDA2MTg0QUIgLyogVHlw
ZUFoZWFkLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUU0MzEwNUI4MTY3NTBGMEMwMERCMkZCOCAv
KiBOb2RlVHJhdmVyc2FsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTA3QjQ0MkQ2MTY2QzcwQjAw
MDU1NkNBRCAvKiBJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTA3QUE2QjZCMTY2RDJDMDcwMEQ0NTY3MSAvKiBJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZG
T2JqQy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTA3OTQxNzkxMTY2RTg1NUYwMDk0MTZDMiAvKiBJ
bmJhbmRUZXh0VHJhY2suY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0LmNwcAko
cmV2aXNpb24gMTM3MjEyKQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5Tm9kZU9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDYgKzYzLDcgQEAKICNp
bmNsdWRlICJMb2NhbGl6ZWRTdHJpbmdzLmgiCiAjaW5jbHVkZSAiTWF0aE1MTmFtZXMuaCIKICNp
bmNsdWRlICJOb2RlTGlzdC5oIgorI2luY2x1ZGUgIk5vZGVUcmF2ZXJzYWwuaCIKICNpbmNsdWRl
ICJQYWdlLmgiCiAjaW5jbHVkZSAiUHJvZ3Jlc3NUcmFja2VyLmgiCiAjaW5jbHVkZSAiVGV4dC5o
IgpAQCAtMTU4Niw3ICsxNTg3LDcgQEAgU3RyaW5nIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojph
Y2Nlc3NpYgogICAgICAgICBFbGVtZW50KiBpZEVsZW1lbnQgPSBlbGVtZW50c1tpXTsKIAogICAg
ICAgICBidWlsZGVyLmFwcGVuZChhY2Nlc3NpYmxlTmFtZUZvck5vZGUoaWRFbGVtZW50KSk7Ci0g
ICAgICAgIGZvciAoTm9kZSogbiA9IGlkRWxlbWVudC0+Zmlyc3RDaGlsZCgpOyBuOyBuID0gbi0+
dHJhdmVyc2VOZXh0Tm9kZShpZEVsZW1lbnQpKQorICAgICAgICBmb3IgKE5vZGUqIG4gPSBpZEVs
ZW1lbnQtPmZpcnN0Q2hpbGQoKTsgbjsgbiA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobiwgaWRFbGVt
ZW50KSkKICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKGFjY2Vzc2libGVOYW1lRm9yTm9kZShu
KSk7CiAKICAgICAgICAgaWYgKGkgIT0gc2l6ZSAtIDEpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAJKHJldmlzaW9u
IDEzNzIxMikKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9i
amVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDcgQEAKICNpbmNsdWRlICJIVE1M
TmFtZXMuaCIKICNpbmNsdWRlICJMb2NhbGl6ZWRTdHJpbmdzLmgiCiAjaW5jbHVkZSAiTm9kZUxp
c3QuaCIKKyNpbmNsdWRlICJOb2RlVHJhdmVyc2FsLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50
ZWQuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUmVuZGVySW1hZ2UuaCIKQEAgLTM2
MCwxMCArMzYxLDEwIEBAIEFjY2Vzc2liaWxpdHlPYmplY3QqIEFjY2Vzc2liaWxpdHlPYmplY3QK
IAogICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGFjY2Vzc2libGVPYmplY3QgPSBjYWNoZS0+Z2V0
T3JDcmVhdGUobm9kZS0+cmVuZGVyZXIoKSk7CiAgICAgd2hpbGUgKGFjY2Vzc2libGVPYmplY3Qg
JiYgYWNjZXNzaWJsZU9iamVjdC0+YWNjZXNzaWJpbGl0eUlzSWdub3JlZCgpKSB7Ci0gICAgICAg
IG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKCk7CisgICAgICAgIG5vZGUgPSBOb2RlVHJh
dmVyc2FsOjpuZXh0KG5vZGUpOwogCiAgICAgICAgIHdoaWxlIChub2RlICYmICFub2RlLT5yZW5k
ZXJlcigpKQotICAgICAgICAgICAgbm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dFNpYmxpbmcoKTsK
KyAgICAgICAgICAgIG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0U2tpcHBpbmdDaGlsZHJlbihu
b2RlKTsKIAogICAgICAgICBpZiAoIW5vZGUpCiAgICAgICAgICAgICByZXR1cm4gMDsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5UmVuZGVyT2JqZWN0LmNwcAkocmV2aXNpb24gMTM3MjEyKQorKysgU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjEsNiArNjEsNyBAQAogI2luY2x1ZGUgIkxvY2FsaXplZFN0cmluZ3MuaCIKICNpbmNs
dWRlICJNYXRoTUxOYW1lcy5oIgogI2luY2x1ZGUgIk5vZGVMaXN0LmgiCisjaW5jbHVkZSAiTm9k
ZVRyYXZlcnNhbC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQcm9ncmVzc1RyYWNr
ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJCdXR0b24uaCIKQEAgLTI2NTYsNyArMjY1Nyw3IEBAIHZv
aWQgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YWRkSW1hZ2UKICAgICBpZiAoIW1hcCkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgZm9yIChOb2RlKiBjdXJyZW50ID0gbWFwLT5maXJzdENoaWxk
KCk7IGN1cnJlbnQ7IGN1cnJlbnQgPSBjdXJyZW50LT50cmF2ZXJzZU5leHROb2RlKG1hcCkpIHsK
KyAgICBmb3IgKE5vZGUqIGN1cnJlbnQgPSBtYXAtPmZpcnN0Q2hpbGQoKTsgY3VycmVudDsgY3Vy
cmVudCA9IE5vZGVUcmF2ZXJzYWw6Om5leHQoY3VycmVudCwgbWFwKSkgewogICAgICAgICAKICAg
ICAgICAgLy8gYWRkIGFuIDxhcmVhPiBlbGVtZW50IGZvciB0aGlzIGNoaWxkIGlmIGl0IGhhcyBh
IGxpbmsKICAgICAgICAgaWYgKGN1cnJlbnQtPmhhc1RhZ05hbWUoYXJlYVRhZykgJiYgY3VycmVu
dC0+aXNMaW5rKCkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRG9jdW1l
bnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RG9jdW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiAxMzcyMTIpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RvY3VtZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiAr
MzQsNyBAQAogI2luY2x1ZGUgIkpTVG91Y2guaCIKICNpbmNsdWRlICJKU1RvdWNoTGlzdC5oIgog
I2luY2x1ZGUgIkxvY2F0aW9uLmgiCisjaW5jbHVkZSAiTm9kZVRyYXZlcnNhbC5oIgogI2luY2x1
ZGUgIlNjcmlwdENvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJUb3VjaExpc3QuaCIKIApAQCAtMTA3
LDcgKzEwOCw3IEBAIEpTVmFsdWUgdG9KUyhFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmEKICAg
ICAvLyBiYWNrL2ZvcndhcmQgY2FjaGUuCiAgICAgaWYgKCFkb2N1bWVudC0+ZnJhbWUoKSkgewog
ICAgICAgICBzaXplX3Qgbm9kZUNvdW50ID0gMDsKLSAgICAgICAgZm9yIChOb2RlKiBuID0gZG9j
dW1lbnQ7IG47IG4gPSBuLT50cmF2ZXJzZU5leHROb2RlKCkpCisgICAgICAgIGZvciAoTm9kZSog
biA9IGRvY3VtZW50OyBuOyBuID0gTm9kZVRyYXZlcnNhbDo6bmV4dChuKSkKICAgICAgICAgICAg
IG5vZGVDb3VudCsrOwogICAgICAgICAKICAgICAgICAgZXhlYy0+aGVhcCgpLT5yZXBvcnRFeHRy
YU1lbW9yeUNvc3Qobm9kZUNvdW50ICogc2l6ZW9mKE5vZGUpKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L1JldGFpbmVkRE9NSW5mby5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvdjgvUmV0YWluZWRET01JbmZvLmNwcAkocmV2aXNpb24gMTM3MjEy
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvUmV0YWluZWRET01JbmZvLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIlJldGFpbmVkRE9NSW5mby5o
IgogCiAjaW5jbHVkZSAiQ29udGFpbmVyTm9kZS5oIgorI2luY2x1ZGUgIk5vZGVUcmF2ZXJzYWwu
aCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC04MCw3ICs4MSw3IEBAIGludHB0cl90IFJl
dGFpbmVkRE9NSW5mbzo6R2V0RWxlbWVudENvdW4KICAgICBpbnRwdHJfdCBjb3VudCA9IDE7CiAg
ICAgTm9kZSogY3VycmVudCA9IG1fcm9vdDsKICAgICB3aGlsZSAoY3VycmVudCkgewotICAgICAg
ICBjdXJyZW50ID0gY3VycmVudC0+dHJhdmVyc2VOZXh0Tm9kZShtX3Jvb3QpOworICAgICAgICBj
dXJyZW50ID0gTm9kZVRyYXZlcnNhbDo6bmV4dChjdXJyZW50LCBtX3Jvb3QpOwogICAgICAgICAr
K2NvdW50OwogICAgIH0KICAgICByZXR1cm4gY291bnQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9j
c3MvU2VsZWN0b3JDaGVja2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3Mv
U2VsZWN0b3JDaGVja2VyLmNwcAkocmV2aXNpb24gMTM3MjEyKQorKysgU291cmNlL1dlYkNvcmUv
Y3NzL1NlbGVjdG9yQ2hlY2tlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDYgKzQ0LDcgQEAK
ICNpbmNsdWRlICJIVE1MU3R5bGVFbGVtZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiTm9kZVJlbmRlclN0eWxlLmgiCisjaW5jbHVkZSAiTm9k
ZVRyYXZlcnNhbC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQYWdlR3JvdXAuaCIK
ICNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKQEAgLTEyMjQsNyArMTIyNSw3IEBAIHZvaWQgU2Vs
ZWN0b3JDaGVja2VyOjphbGxWaXNpdGVkU3RhdGVDaGEKIHsKICAgICBpZiAobV9saW5rc0NoZWNr
ZWRGb3JWaXNpdGVkU3RhdGUuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47Ci0gICAgZm9yIChO
b2RlKiBub2RlID0gbV9kb2N1bWVudDsgbm9kZTsgbm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5v
ZGUoKSkgeworICAgIGZvciAoTm9kZSogbm9kZSA9IG1fZG9jdW1lbnQ7IG5vZGU7IG5vZGUgPSBO
b2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUpKSB7CiAgICAgICAgIGlmIChub2RlLT5pc0xpbmsoKSkK
ICAgICAgICAgICAgIG5vZGUtPnNldE5lZWRzU3R5bGVSZWNhbGMoKTsKICAgICB9CkBAIC0xMjM0
LDcgKzEyMzUsNyBAQCB2b2lkIFNlbGVjdG9yQ2hlY2tlcjo6dmlzaXRlZFN0YXRlQ2hhbmdlCiB7
CiAgICAgaWYgKCFtX2xpbmtzQ2hlY2tlZEZvclZpc2l0ZWRTdGF0ZS5jb250YWlucyh2aXNpdGVk
SGFzaCkpCiAgICAgICAgIHJldHVybjsKLSAgICBmb3IgKE5vZGUqIG5vZGUgPSBtX2RvY3VtZW50
OyBub2RlOyBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgpKSB7CisgICAgZm9yIChOb2Rl
KiBub2RlID0gbV9kb2N1bWVudDsgbm9kZTsgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9k
ZSkpIHsKICAgICAgICAgTGlua0hhc2ggaGFzaCA9IDA7CiAgICAgICAgIGlmIChub2RlLT5oYXNU
YWdOYW1lKGFUYWcpKQogICAgICAgICAgICAgaGFzaCA9IHN0YXRpY19jYXN0PEhUTUxBbmNob3JF
bGVtZW50Kj4obm9kZSktPnZpc2l0ZWRMaW5rSGFzaCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
Y3NzL1N0eWxlSW52YWxpZGF0aW9uQW5hbHlzaXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2Nzcy9TdHlsZUludmFsaWRhdGlvbkFuYWx5c2lzLmNwcAkocmV2aXNpb24gMTM3MjEy
KQorKysgU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlSW52YWxpZGF0aW9uQW5hbHlzaXMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRlICJDU1NTZWxlY3Rvckxp
c3QuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIk5vZGVUcmF2ZXJzYWwuaCIK
ICNpbmNsdWRlICJTdHlsZVJ1bGVJbXBvcnQuaCIKICNpbmNsdWRlICJTdHlsZVNoZWV0Q29udGVu
dHMuaCIKICNpbmNsdWRlICJTdHlsZWRFbGVtZW50LmgiCkBAIC0xMTksMTcgKzEyMCwxNyBAQCB2
b2lkIFN0eWxlSW52YWxpZGF0aW9uQW5hbHlzaXM6OmludmFsaWRhCiAgICAgTm9kZSogbm9kZSA9
IGRvY3VtZW50LT5maXJzdENoaWxkKCk7CiAgICAgd2hpbGUgKG5vZGUpIHsKICAgICAgICAgaWYg
KCFub2RlLT5pc1N0eWxlZEVsZW1lbnQoKSkgewotICAgICAgICAgICAgbm9kZSA9IG5vZGUtPnRy
YXZlcnNlTmV4dE5vZGUoKTsKKyAgICAgICAgICAgIG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0
KG5vZGUpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KICAgICAgICAgU3R5bGVk
RWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PFN0eWxlZEVsZW1lbnQqPihub2RlKTsKICAg
ICAgICAgaWYgKGVsZW1lbnRNYXRjaGVzU2VsZWN0b3JTY29wZXMoZWxlbWVudCwgbV9pZFNjb3Bl
cywgbV9jbGFzc1Njb3BlcykpIHsKICAgICAgICAgICAgIGVsZW1lbnQtPnNldE5lZWRzU3R5bGVS
ZWNhbGMoKTsKICAgICAgICAgICAgIC8vIFRoZSB3aG9sZSBzdWJ0cmVlIGlzIG5vdyBpbnZhbGlk
YXRlZCwgd2UgY2FuIHNraXAgdG8gdGhlIG5leHQgc2libGluZy4KLSAgICAgICAgICAgIG5vZGUg
PSBub2RlLT50cmF2ZXJzZU5leHRTaWJsaW5nKCk7CisgICAgICAgICAgICBub2RlID0gTm9kZVRy
YXZlcnNhbDo6bmV4dFNraXBwaW5nQ2hpbGRyZW4obm9kZSk7CiAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgfQotICAgICAgICBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgpOwor
ICAgICAgICBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dChub2RlKTsKICAgICB9CiB9CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAJKHJldmlzaW9uIDEzNzIxMikKKysr
IFNvdXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzksNiArMzksNyBAQAogI2luY2x1ZGUgIk1lbW9yeUNhY2hlLmgiCiAjaW5jbHVkZSAiTXV0YXRp
b25FdmVudC5oIgogI2luY2x1ZGUgIk5vZGVSZW5kZXJTdHlsZS5oIgorI2luY2x1ZGUgIk5vZGVU
cmF2ZXJzYWwuaCIKICNpbmNsdWRlICJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuaCIKICNpbmNsdWRl
ICJQYWdlLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJhdGVnaWVzLmgiCkBAIC0xMDQ3LDcgKzEw
NDgsNyBAQCBzdGF0aWMgdm9pZCBkaXNwYXRjaENoaWxkSW5zZXJ0aW9uRXZlbnRzCiAKICAgICAv
LyBkaXNwYXRjaCB0aGUgRE9NTm9kZUluc2VydGVkSW50b0RvY3VtZW50IGV2ZW50IHRvIGFsbCBk
ZXNjZW5kYW50cwogICAgIGlmIChjLT5pbkRvY3VtZW50KCkgJiYgZG9jdW1lbnQtPmhhc0xpc3Rl
bmVyVHlwZShEb2N1bWVudDo6RE9NTk9ERUlOU0VSVEVESU5UT0RPQ1VNRU5UX0xJU1RFTkVSKSkg
ewotICAgICAgICBmb3IgKDsgYzsgYyA9IGMtPnRyYXZlcnNlTmV4dE5vZGUoY2hpbGQpKQorICAg
ICAgICBmb3IgKDsgYzsgYyA9IE5vZGVUcmF2ZXJzYWw6Om5leHQoYy5nZXQoKSwgY2hpbGQpKQog
ICAgICAgICAgICAgYy0+ZGlzcGF0Y2hTY29wZWRFdmVudChNdXRhdGlvbkV2ZW50OjpjcmVhdGUo
ZXZlbnROYW1lcygpLkRPTU5vZGVJbnNlcnRlZEludG9Eb2N1bWVudEV2ZW50LCBmYWxzZSkpOwog
ICAgIH0KIH0KQEAgLTEwNzUsNyArMTA3Niw3IEBAIHN0YXRpYyB2b2lkIGRpc3BhdGNoQ2hpbGRS
ZW1vdmFsRXZlbnRzKE4KIAogICAgIC8vIGRpc3BhdGNoIHRoZSBET01Ob2RlUmVtb3ZlZEZyb21E
b2N1bWVudCBldmVudCB0byBhbGwgZGVzY2VuZGFudHMKICAgICBpZiAoYy0+aW5Eb2N1bWVudCgp
ICYmIGRvY3VtZW50LT5oYXNMaXN0ZW5lclR5cGUoRG9jdW1lbnQ6OkRPTU5PREVSRU1PVkVERlJP
TURPQ1VNRU5UX0xJU1RFTkVSKSkgewotICAgICAgICBmb3IgKDsgYzsgYyA9IGMtPnRyYXZlcnNl
TmV4dE5vZGUoY2hpbGQpKQorICAgICAgICBmb3IgKDsgYzsgYyA9IE5vZGVUcmF2ZXJzYWw6Om5l
eHQoYy5nZXQoKSwgY2hpbGQpKQogICAgICAgICAgICAgYy0+ZGlzcGF0Y2hTY29wZWRFdmVudChN
dXRhdGlvbkV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLkRPTU5vZGVSZW1vdmVkRnJvbURvY3Vt
ZW50RXZlbnQsIGZhbHNlKSk7CiAgICAgfQogfQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0Nv
bnRhaW5lck5vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVy
Tm9kZS5oCShyZXZpc2lvbiAxMzcyMTIpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVy
Tm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzQsMTAgKzEzNCw2IEBAIHB1YmxpYzoKIAogICAg
IHZpcnR1YWwgYm9vbCBjaGlsZFNob3VsZENyZWF0ZVJlbmRlcmVyKGNvbnN0IE5vZGVSZW5kZXJp
bmdDb250ZXh0JikgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgLy8gTW9yZSBlZmZpY2ll
bnQgdmVyc2lvbnMgb2YgdGhlc2UgdHdvIGZ1bmN0aW9ucyBmb3IgdGhlIGNhc2Ugd2hlcmUgd2Ug
YXJlIHN0YXJ0aW5nIHdpdGggYSBDb250YWluZXJOb2RlLgotICAgIE5vZGUqIHRyYXZlcnNlTmV4
dE5vZGUoKSBjb25zdDsKLSAgICBOb2RlKiB0cmF2ZXJzZU5leHROb2RlKGNvbnN0IE5vZGUqIHN0
YXlXaXRoaW4pIGNvbnN0OwotCiAgICAgdmlydHVhbCB2b2lkIHJlcG9ydE1lbW9yeVVzYWdlKE1l
bW9yeU9iamVjdEluZm8qIG1lbW9yeU9iamVjdEluZm8pIGNvbnN0CiAgICAgewogICAgICAgICBN
ZW1vcnlDbGFzc0luZm8gaW5mbyhtZW1vcnlPYmplY3RJbmZvLCB0aGlzLCBXZWJDb3JlTWVtb3J5
VHlwZXM6OkRPTSk7CkBAIC0yNjksNTQgKzI2NSw2IEBAIGlubGluZSBOb2RlKiBOb2RlOjpoaWdo
ZXN0QW5jZXN0b3IoKSBjb24KICAgICByZXR1cm4gaGlnaGVzdDsKIH0KIAotaW5saW5lIE5vZGUq
IE5vZGU6OnRyYXZlcnNlTmV4dFNpYmxpbmcoKSBjb25zdAotewotICAgIGlmIChuZXh0U2libGlu
ZygpKQotICAgICAgICByZXR1cm4gbmV4dFNpYmxpbmcoKTsKLSAgICByZXR1cm4gdHJhdmVyc2VO
ZXh0QW5jZXN0b3JTaWJsaW5nKCk7Ci19Ci0KLWlubGluZSBOb2RlKiBOb2RlOjp0cmF2ZXJzZU5l
eHROb2RlKCkgY29uc3QKLXsKLSAgICBpZiAoZmlyc3RDaGlsZCgpKQotICAgICAgICByZXR1cm4g
Zmlyc3RDaGlsZCgpOwotICAgIHJldHVybiB0cmF2ZXJzZU5leHRTaWJsaW5nKCk7Ci19Ci0KLWlu
bGluZSBOb2RlKiBDb250YWluZXJOb2RlOjp0cmF2ZXJzZU5leHROb2RlKCkgY29uc3QKLXsKLSAg
ICAvLyBNb3JlIGVmZmljaWVudCB0aGFuIHRoZSBOb2RlOjp0cmF2ZXJzZU5leHROb2RlIGFib3Zl
LCBiZWNhdXNlCi0gICAgLy8gdGhpcyBkb2VzIG5vdCBuZWVkIHRvIGRvIHRoZSBpc0NvbnRhaW5l
ck5vZGUgY2hlY2sgaW5zaWRlIGZpcnN0Q2hpbGQuCi0gICAgaWYgKGZpcnN0Q2hpbGQoKSkKLSAg
ICAgICAgcmV0dXJuIGZpcnN0Q2hpbGQoKTsKLSAgICByZXR1cm4gdHJhdmVyc2VOZXh0U2libGlu
ZygpOwotfQotCi1pbmxpbmUgTm9kZSogTm9kZTo6dHJhdmVyc2VOZXh0U2libGluZyhjb25zdCBO
b2RlKiBzdGF5V2l0aGluKSBjb25zdAotewotICAgIGlmICh0aGlzID09IHN0YXlXaXRoaW4pCi0g
ICAgICAgIHJldHVybiAwOwotICAgIGlmIChuZXh0U2libGluZygpKQotICAgICAgICByZXR1cm4g
bmV4dFNpYmxpbmcoKTsKLSAgICByZXR1cm4gdHJhdmVyc2VOZXh0QW5jZXN0b3JTaWJsaW5nKHN0
YXlXaXRoaW4pOwotfQotCi1pbmxpbmUgTm9kZSogTm9kZTo6dHJhdmVyc2VOZXh0Tm9kZShjb25z
dCBOb2RlKiBzdGF5V2l0aGluKSBjb25zdAotewotICAgIGlmIChmaXJzdENoaWxkKCkpCi0gICAg
ICAgIHJldHVybiBmaXJzdENoaWxkKCk7Ci0gICAgcmV0dXJuIHRyYXZlcnNlTmV4dFNpYmxpbmco
c3RheVdpdGhpbik7Ci19Ci0KLWlubGluZSBOb2RlKiBDb250YWluZXJOb2RlOjp0cmF2ZXJzZU5l
eHROb2RlKGNvbnN0IE5vZGUqIHN0YXlXaXRoaW4pIGNvbnN0Ci17Ci0gICAgLy8gTW9yZSBlZmZp
Y2llbnQgdGhhbiB0aGUgTm9kZTo6dHJhdmVyc2VOZXh0Tm9kZSBhYm92ZSwgYmVjYXVzZQotICAg
IC8vIHRoaXMgZG9lcyBub3QgbmVlZCB0byBkbyB0aGUgaXNDb250YWluZXJOb2RlIGNoZWNrIGlu
c2lkZSBmaXJzdENoaWxkLgotICAgIGlmIChmaXJzdENoaWxkKCkpCi0gICAgICAgIHJldHVybiBm
aXJzdENoaWxkKCk7Ci0gICAgcmV0dXJuIHRyYXZlcnNlTmV4dFNpYmxpbmcoc3RheVdpdGhpbik7
Ci19Ci0KIC8vIFRoaXMgY29uc3RhbnQgY29udHJvbHMgaG93IG11Y2ggYnVmZmVyIGlzIGluaXRp
YWxseSBhbGxvY2F0ZWQKIC8vIGZvciBhIE5vZGUgVmVjdG9yIHRoYXQgaXMgdXNlZCB0byBzdG9y
ZSBjaGlsZCBOb2RlcyBvZiBhIGdpdmVuIE5vZGUuCiAvLyBGSVhNRTogT3B0aW1pemUgdGhlIHZh
bHVlLgpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGVBbGdvcml0aG1zLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGVBbGdvcml0aG1z
LmgJKHJldmlzaW9uIDEzNzIxMikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2Rl
QWxnb3JpdGhtcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAi
RnJhbWUuaCIKICNpbmNsdWRlICJIVE1MRnJhbWVPd25lckVsZW1lbnQuaCIKICNpbmNsdWRlICJJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCIKKyNpbmNsdWRlICJOb2RlVHJhdmVyc2FsLmgiCiAj
aW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzE1
LDggKzMxNiw3IEBAIHByaXZhdGU6CiAKIGlubGluZSB2b2lkIENoaWxkRnJhbWVEaXNjb25uZWN0
b3I6OmNvbGxlY3REZXNjZW5kYW50KE5vZGUqIHJvb3QsIFNob3VsZEluY2x1ZGVSb290IHNob3Vs
ZEluY2x1ZGVSb290KQogewotICAgIGZvciAoTm9kZSogbm9kZSA9IHNob3VsZEluY2x1ZGVSb290
ID09IEluY2x1ZGVSb290ID8gcm9vdCA6IHJvb3QtPmZpcnN0Q2hpbGQoKTsgbm9kZTsKLSAgICAg
ICAgICAgIG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKHJvb3QpKSB7CisgICAgZm9yIChO
b2RlKiBub2RlID0gc2hvdWxkSW5jbHVkZVJvb3QgPT0gSW5jbHVkZVJvb3QgPyByb290IDogcm9v
dC0+Zmlyc3RDaGlsZCgpOyBub2RlOyBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dChub2RlLCBy
b290KSkgewogICAgICAgICBpZiAoIW5vZGUtPmlzRWxlbWVudE5vZGUoKSkKICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICBFbGVtZW50KiBlbGVtZW50ID0gdG9FbGVtZW50KG5vZGUpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCShyZXZpc2lvbiAxMzcyMTIpCisrKyBTb3VyY2Uv
V2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsNiArMTE4LDcg
QEAKICNpbmNsdWRlICJOb2RlRmlsdGVyLmgiCiAjaW5jbHVkZSAiTm9kZUl0ZXJhdG9yLmgiCiAj
aW5jbHVkZSAiTm9kZVJhcmVEYXRhLmgiCisjaW5jbHVkZSAiTm9kZVRyYXZlcnNhbC5oIgogI2lu
Y2x1ZGUgIk5vZGVXaXRoSW5kZXguaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUGFn
ZUdyb3VwLmgiCkBAIC03NDcsNyArNzQ4LDcgQEAgdm9pZCBEb2N1bWVudDo6YnVpbGRBY2Nlc3NL
ZXlNYXAoVHJlZVNjbwogewogICAgIEFTU0VSVChzY29wZSk7CiAgICAgTm9kZSogcm9vdE5vZGUg
PSBzY29wZS0+cm9vdE5vZGUoKTsKLSAgICBmb3IgKE5vZGUqIG5vZGUgPSByb290Tm9kZTsgbm9k
ZTsgbm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUocm9vdE5vZGUpKSB7CisgICAgZm9yIChO
b2RlKiBub2RlID0gcm9vdE5vZGU7IG5vZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5v
ZGUsIHJvb3ROb2RlKSkgewogICAgICAgICBpZiAoIW5vZGUtPmlzRWxlbWVudE5vZGUoKSkKICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nh
c3Q8RWxlbWVudCo+KG5vZGUpOwpAQCAtMjE1NSw3ICsyMTU2LDcgQEAgdm9pZCBEb2N1bWVudDo6
cmVtb3ZlQWxsRXZlbnRMaXN0ZW5lcnMoKQogCiAgICAgaWYgKERPTVdpbmRvdyogZG9tV2luZG93
ID0gdGhpcy0+ZG9tV2luZG93KCkpCiAgICAgICAgIGRvbVdpbmRvdy0+cmVtb3ZlQWxsRXZlbnRM
aXN0ZW5lcnMoKTsKLSAgICBmb3IgKE5vZGUqIG5vZGUgPSBmaXJzdENoaWxkKCk7IG5vZGU7IG5v
ZGUgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKCkpCisgICAgZm9yIChOb2RlKiBub2RlID0gZmly
c3RDaGlsZCgpOyBub2RlOyBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dChub2RlKSkKICAgICAg
ICAgbm9kZS0+cmVtb3ZlQWxsRXZlbnRMaXN0ZW5lcnMoKTsKIH0KIApAQCAtMjY2NCw3ICsyNjY1
LDcgQEAgdm9pZCBEb2N1bWVudDo6dXBkYXRlQmFzZVVSTCgpCiAgICAgaWYgKCFlcXVhbElnbm9y
aW5nRnJhZ21lbnRJZGVudGlmaWVyKG9sZEJhc2VVUkwsIG1fYmFzZVVSTCkpIHsKICAgICAgICAg
Ly8gQmFzZSBVUkwgY2hhbmdlIGNoYW5nZXMgYW55IHJlbGF0aXZlIHZpc2l0ZWQgbGlua3MuCiAg
ICAgICAgIC8vIEZJWE1FOiBUaGVyZSBhcmUgb3RoZXIgVVJMcyBpbiB0aGUgdHJlZSB0aGF0IHdv
dWxkIG5lZWQgdG8gYmUgcmUtZXZhbHVhdGVkIG9uIGR5bmFtaWMgYmFzZSBVUkwgY2hhbmdlLiBT
dHlsZSBzaG91bGQgYmUgaW52YWxpZGF0ZWQgdG9vLgotICAgICAgICBmb3IgKE5vZGUqIG5vZGUg
PSBmaXJzdENoaWxkKCk7IG5vZGU7IG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKCkpIHsK
KyAgICAgICAgZm9yIChOb2RlKiBub2RlID0gZmlyc3RDaGlsZCgpOyBub2RlOyBub2RlID0gTm9k
ZVRyYXZlcnNhbDo6bmV4dChub2RlKSkgewogICAgICAgICAgICAgaWYgKG5vZGUtPmhhc1RhZ05h
bWUoYVRhZykpCiAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8SFRNTEFuY2hvckVsZW1lbnQq
Pihub2RlKS0+aW52YWxpZGF0ZUNhY2hlZFZpc2l0ZWRMaW5rSGFzaCgpOwogICAgICAgICB9CkBA
IC0yNjgyLDcgKzI2ODMsNyBAQCB2b2lkIERvY3VtZW50Ojpwcm9jZXNzQmFzZUVsZW1lbnQoKQog
ICAgIC8vIEZpbmQgdGhlIGZpcnN0IGhyZWYgYXR0cmlidXRlIGluIGEgYmFzZSBlbGVtZW50IGFu
ZCB0aGUgZmlyc3QgdGFyZ2V0IGF0dHJpYnV0ZSBpbiBhIGJhc2UgZWxlbWVudC4KICAgICBjb25z
dCBBdG9taWNTdHJpbmcqIGhyZWYgPSAwOwogICAgIGNvbnN0IEF0b21pY1N0cmluZyogdGFyZ2V0
ID0gMDsKLSAgICBmb3IgKE5vZGUqIG5vZGUgPSBkb2N1bWVudCgpLT5maXJzdENoaWxkKCk7IG5v
ZGUgJiYgKCFocmVmIHx8ICF0YXJnZXQpOyBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgp
KSB7CisgICAgZm9yIChOb2RlKiBub2RlID0gZG9jdW1lbnQoKS0+Zmlyc3RDaGlsZCgpOyBub2Rl
ICYmICghaHJlZiB8fCAhdGFyZ2V0KTsgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9kZSkp
IHsKICAgICAgICAgaWYgKG5vZGUtPmhhc1RhZ05hbWUoYmFzZVRhZykpIHsKICAgICAgICAgICAg
IGlmICghaHJlZikgewogICAgICAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUg
PSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSktPmZhc3RHZXRBdHRyaWJ1dGUoaHJlZkF0dHIp
OwpAQCAtMjgyNiw3ICsyODI3LDcgQEAgaW50IERvY3VtZW50Ojpub2RlQWJzSW5kZXgoTm9kZSAq
bm9kZSkKICAgICBBU1NFUlQobm9kZS0+ZG9jdW1lbnQoKSA9PSB0aGlzKTsKIAogICAgIGludCBh
YnNJbmRleCA9IDA7Ci0gICAgZm9yIChOb2RlKiBuID0gbm9kZTsgbiAmJiBuICE9IHRoaXM7IG4g
PSBuLT50cmF2ZXJzZVByZXZpb3VzTm9kZSgpKQorICAgIGZvciAoTm9kZSogbiA9IG5vZGU7IG4g
JiYgbiAhPSB0aGlzOyBuID0gTm9kZVRyYXZlcnNhbDo6cHJldmlvdXMobikpCiAgICAgICAgIGFi
c0luZGV4Kys7CiAgICAgcmV0dXJuIGFic0luZGV4OwogfQpAQCAtMjgzNSw3ICsyODM2LDcgQEAg
Tm9kZSogRG9jdW1lbnQ6Om5vZGVXaXRoQWJzSW5kZXgoaW50IGFicwogewogICAgIE5vZGUqIG4g
PSB0aGlzOwogICAgIGZvciAoaW50IGkgPSAwOyBuICYmIChpIDwgYWJzSW5kZXgpOyBpKyspCi0g
ICAgICAgIG4gPSBuLT50cmF2ZXJzZU5leHROb2RlKCk7CisgICAgICAgIG4gPSBOb2RlVHJhdmVy
c2FsOjpuZXh0KG4pOwogICAgIHJldHVybiBuOwogfQogCkBAIC0zNDQxLDcgKzM0NDIsNyBAQCB2
b2lkIERvY3VtZW50OjpnZXRGb2N1c2FibGVOb2RlcyhWZWN0b3I8CiB7CiAgICAgdXBkYXRlTGF5
b3V0KCk7CiAKLSAgICBmb3IgKE5vZGUqIG5vZGUgPSBmaXJzdENoaWxkKCk7IG5vZGU7IG5vZGUg
PSBub2RlLT50cmF2ZXJzZU5leHROb2RlKCkpIHsKKyAgICBmb3IgKE5vZGUqIG5vZGUgPSBmaXJz
dENoaWxkKCk7IG5vZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUpKSB7CiAgICAg
ICAgIGlmIChub2RlLT5pc0ZvY3VzYWJsZSgpKQogICAgICAgICAgICAgbm9kZXMuYXBwZW5kKG5v
ZGUpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlckNvbnRy
b2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtl
ckNvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAxMzcyMTIpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20v
RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgs
NyBAQAogI2luY2x1ZGUgIkRvY3VtZW50TWFya2VyQ29udHJvbGxlci5oIgogCiAjaW5jbHVkZSAi
Tm9kZS5oIgorI2luY2x1ZGUgIk5vZGVUcmF2ZXJzYWwuaCIKICNpbmNsdWRlICJSYW5nZS5oIgog
I2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgogI2luY2x1ZGUgIlJlbmRlcmVkRG9jdW1lbnRNYXJr
ZXIuaCIKQEAgLTM3MCw3ICszNzEsNyBAQCBWZWN0b3I8RG9jdW1lbnRNYXJrZXIqPiBEb2N1bWVu
dE1hcmtlckNvCiAgICAgQVNTRVJUKGVuZENvbnRhaW5lcik7CiAKICAgICBOb2RlKiBwYXN0TGFz
dE5vZGUgPSByYW5nZS0+cGFzdExhc3ROb2RlKCk7Ci0gICAgZm9yIChOb2RlKiBub2RlID0gcmFu
Z2UtPmZpcnN0Tm9kZSgpOyBub2RlICE9IHBhc3RMYXN0Tm9kZTsgbm9kZSA9IG5vZGUtPnRyYXZl
cnNlTmV4dE5vZGUoKSkgeworICAgIGZvciAoTm9kZSogbm9kZSA9IHJhbmdlLT5maXJzdE5vZGUo
KTsgbm9kZSAhPSBwYXN0TGFzdE5vZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUp
KSB7CiAgICAgICAgIFZlY3RvcjxEb2N1bWVudE1hcmtlcio+IG1hcmtlcnMgPSBtYXJrZXJzRm9y
KG5vZGUpOwogICAgICAgICBWZWN0b3I8RG9jdW1lbnRNYXJrZXIqPjo6Y29uc3RfaXRlcmF0b3Ig
ZW5kID0gbWFya2Vycy5lbmQoKTsKICAgICAgICAgZm9yIChWZWN0b3I8RG9jdW1lbnRNYXJrZXIq
Pjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtYXJrZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkg
ewpAQCAtNTcxLDcgKzU3Miw3IEBAIHZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpzZXRN
YXJrZXIKICAgICBOb2RlKiBlbmRDb250YWluZXIgPSByYW5nZS0+ZW5kQ29udGFpbmVyKGVjKTsK
IAogICAgIE5vZGUqIHBhc3RMYXN0Tm9kZSA9IHJhbmdlLT5wYXN0TGFzdE5vZGUoKTsKLSAgICBm
b3IgKE5vZGUqIG5vZGUgPSByYW5nZS0+Zmlyc3ROb2RlKCk7IG5vZGUgIT0gcGFzdExhc3ROb2Rl
OyBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgpKSB7CisgICAgZm9yIChOb2RlKiBub2Rl
ID0gcmFuZ2UtPmZpcnN0Tm9kZSgpOyBub2RlICE9IHBhc3RMYXN0Tm9kZTsgbm9kZSA9IE5vZGVU
cmF2ZXJzYWw6Om5leHQobm9kZSkpIHsKICAgICAgICAgaW50IHN0YXJ0T2Zmc2V0ID0gbm9kZSA9
PSBzdGFydENvbnRhaW5lciA/IHJhbmdlLT5zdGFydE9mZnNldChlYykgOiAwOwogICAgICAgICBp
bnQgZW5kT2Zmc2V0ID0gbm9kZSA9PSBlbmRDb250YWluZXIgPyByYW5nZS0+ZW5kT2Zmc2V0KGVj
KSA6IElOVF9NQVg7CiAgICAgICAgIHNldE1hcmtlcnNBY3RpdmUobm9kZSwgc3RhcnRPZmZzZXQs
IGVuZE9mZnNldCwgYWN0aXZlKTsKQEAgLTYxNyw3ICs2MTgsNyBAQCBib29sIERvY3VtZW50TWFy
a2VyQ29udHJvbGxlcjo6aGFzTWFya2VyCiAgICAgQVNTRVJUKGVuZENvbnRhaW5lcik7CiAKICAg
ICBOb2RlKiBwYXN0TGFzdE5vZGUgPSByYW5nZS0+cGFzdExhc3ROb2RlKCk7Ci0gICAgZm9yIChO
b2RlKiBub2RlID0gcmFuZ2UtPmZpcnN0Tm9kZSgpOyBub2RlICE9IHBhc3RMYXN0Tm9kZTsgbm9k
ZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoKSkgeworICAgIGZvciAoTm9kZSogbm9kZSA9IHJh
bmdlLT5maXJzdE5vZGUoKTsgbm9kZSAhPSBwYXN0TGFzdE5vZGU7IG5vZGUgPSBOb2RlVHJhdmVy
c2FsOjpuZXh0KG5vZGUpKSB7CiAgICAgICAgIFZlY3RvcjxEb2N1bWVudE1hcmtlcio+IG1hcmtl
cnMgPSBtYXJrZXJzRm9yKG5vZGUpOwogICAgICAgICBWZWN0b3I8RG9jdW1lbnRNYXJrZXIqPjo6
Y29uc3RfaXRlcmF0b3IgZW5kID0gbWFya2Vycy5lbmQoKTsKICAgICAgICAgZm9yIChWZWN0b3I8
RG9jdW1lbnRNYXJrZXIqPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtYXJrZXJzLmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkgewpAQCAtNjQ0LDcgKzY0NSw3IEBAIHZvaWQgRG9jdW1lbnRNYXJrZXJD
b250cm9sbGVyOjpjbGVhckRlc2MKICAgICBOb2RlKiBlbmRDb250YWluZXIgPSByYW5nZS0+ZW5k
Q29udGFpbmVyKCk7CiAKICAgICBOb2RlKiBwYXN0TGFzdE5vZGUgPSByYW5nZS0+cGFzdExhc3RO
b2RlKCk7Ci0gICAgZm9yIChOb2RlKiBub2RlID0gcmFuZ2UtPmZpcnN0Tm9kZSgpOyBub2RlICE9
IHBhc3RMYXN0Tm9kZTsgbm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoKSkgeworICAgIGZv
ciAoTm9kZSogbm9kZSA9IHJhbmdlLT5maXJzdE5vZGUoKTsgbm9kZSAhPSBwYXN0TGFzdE5vZGU7
IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUpKSB7CiAgICAgICAgIHVuc2lnbmVkIHN0
YXJ0T2Zmc2V0ID0gbm9kZSA9PSBzdGFydENvbnRhaW5lciA/IHJhbmdlLT5zdGFydE9mZnNldCgp
IDogMDsKICAgICAgICAgdW5zaWduZWQgZW5kT2Zmc2V0ID0gbm9kZSA9PSBlbmRDb250YWluZXIg
PyBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocmFuZ2UtPmVuZE9mZnNldCgpKSA6IHN0ZDo6bnVtZXJp
Y19saW1pdHM8dW5zaWduZWQ+OjptYXgoKTsKICAgICAgICAgTWFya2VyTGlzdCogbGlzdCA9IG1f
bWFya2Vycy5nZXQobm9kZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRPcmRl
cmVkTWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRPcmRl
cmVkTWFwLmNwcAkocmV2aXNpb24gMTM3MjEyKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0RvY3Vt
ZW50T3JkZXJlZE1hcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNs
dWRlICJFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE1hcEVsZW1lbnQuaCIKICNpbmNsdWRlICJI
VE1MTmFtZXMuaCIKKyNpbmNsdWRlICJOb2RlVHJhdmVyc2FsLmgiCiAjaW5jbHVkZSAiVHJlZVNj
b3BlLmgiCiAjaW5jbHVkZSAiV2ViQ29yZU1lbW9yeUluc3RydW1lbnRhdGlvbi5oIgogI2luY2x1
ZGUgPHd0Zi9NZW1vcnlJbnN0cnVtZW50YXRpb25IYXNoQ291bnRlZFNldC5oPgpAQCAtMTI2LDcg
KzEyNyw3IEBAIGlubGluZSBFbGVtZW50KiBEb2N1bWVudE9yZGVyZWRNYXA6OmdldCgKIAogICAg
IGlmIChtX2R1cGxpY2F0ZUNvdW50cy5jb250YWlucyhrZXkpKSB7CiAgICAgICAgIC8vIFdlIGtu
b3cgdGhlcmUncyBhdCBsZWFzdCBvbmUgbm9kZSB0aGF0IG1hdGNoZXM7IGl0ZXJhdGUgdG8gZmlu
ZCB0aGUgZmlyc3Qgb25lLgotICAgICAgICBmb3IgKE5vZGUqIG5vZGUgPSBzY29wZS0+cm9vdE5v
ZGUoKS0+Zmlyc3RDaGlsZCgpOyBub2RlOyBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgp
KSB7CisgICAgICAgIGZvciAoTm9kZSogbm9kZSA9IHNjb3BlLT5yb290Tm9kZSgpLT5maXJzdENo
aWxkKCk7IG5vZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUpKSB7CiAgICAgICAg
ICAgICBpZiAoIW5vZGUtPmlzRWxlbWVudE5vZGUoKSkKICAgICAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgICAgIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudFNoYWRvdy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRTaGFkb3cuY3BwCShyZXZpc2lvbiAxMzcyMTIpCisr
KyBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudFNoYWRvdy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJIVE1MQ29udGVudEVsZW1lbnQuaCIKICNpbmNsdWRl
ICJIVE1MU2hhZG93RWxlbWVudC5oIgogI2luY2x1ZGUgIkluc3BlY3Rvckluc3RydW1lbnRhdGlv
bi5oIgorI2luY2x1ZGUgIk5vZGVUcmF2ZXJzYWwuaCIKICNpbmNsdWRlICJTaGFkb3dSb290Lmgi
CiAjaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgogCkBAIC0yMjAsNyArMjIxLDcgQEAgdm9pZCBF
bGVtZW50U2hhZG93OjplbnN1cmVTZWxlY3RGZWF0dXJlUwogdm9pZCBFbGVtZW50U2hhZG93Ojpj
b2xsZWN0U2VsZWN0RmVhdHVyZVNldEZyb20oU2hhZG93Um9vdCogcm9vdCkKIHsKICAgICBpZiAo
cm9vdC0+aGFzRWxlbWVudFNoYWRvdygpKSB7Ci0gICAgICAgIGZvciAoTm9kZSogbm9kZSA9IHJv
b3QtPmZpcnN0Q2hpbGQoKTsgbm9kZTsgbm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoKSkg
eworICAgICAgICBmb3IgKE5vZGUqIG5vZGUgPSByb290LT5maXJzdENoaWxkKCk7IG5vZGU7IG5v
ZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUpKSB7CiAgICAgICAgICAgICBpZiAoRWxlbWVu
dFNoYWRvdyogZWxlbWVudFNoYWRvdyA9IG5vZGUtPmlzRWxlbWVudE5vZGUoKSA/IHRvRWxlbWVu
dChub2RlKS0+c2hhZG93KCkgOiAwKSB7CiAgICAgICAgICAgICAgICAgZWxlbWVudFNoYWRvdy0+
ZW5zdXJlU2VsZWN0RmVhdHVyZVNldENvbGxlY3RlZCgpOwogICAgICAgICAgICAgICAgIG1fc2Vs
ZWN0RmVhdHVyZXMuYWRkKGVsZW1lbnRTaGFkb3ctPm1fc2VsZWN0RmVhdHVyZXMpOwpAQCAtMjI5
LDcgKzIzMCw3IEBAIHZvaWQgRWxlbWVudFNoYWRvdzo6Y29sbGVjdFNlbGVjdEZlYXR1cmUKICAg
ICB9CiAKICAgICBpZiAocm9vdC0+aGFzQ29udGVudEVsZW1lbnQoKSkgewotICAgICAgICBmb3Ig
KE5vZGUqIG5vZGUgPSByb290LT5maXJzdENoaWxkKCk7IG5vZGU7IG5vZGUgPSBub2RlLT50cmF2
ZXJzZU5leHROb2RlKCkpIHsKKyAgICAgICAgZm9yIChOb2RlKiBub2RlID0gcm9vdC0+Zmlyc3RD
aGlsZCgpOyBub2RlOyBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dChub2RlKSkgewogICAgICAg
ICAgICAgaWYgKGlzSFRNTENvbnRlbnRFbGVtZW50KG5vZGUpKSB7CiAgICAgICAgICAgICAgICAg
Y29uc3QgQ1NTU2VsZWN0b3JMaXN0JiBsaXN0ID0gdG9IVE1MQ29udGVudEVsZW1lbnQobm9kZSkt
PnNlbGVjdG9yTGlzdCgpOwogICAgICAgICAgICAgICAgIGZvciAoQ1NTU2VsZWN0b3IqIHNlbGVj
dG9yID0gbGlzdC5maXJzdCgpOyBzZWxlY3Rvcjsgc2VsZWN0b3IgPSBsaXN0Lm5leHQoc2VsZWN0
b3IpKQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAkocmV2aXNpb24gMTM3MjEyKQorKysgU291cmNlL1dl
YkNvcmUvZG9tL05vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NSw2ICs3NSw3IEBACiAjaW5j
bHVkZSAiTmFtZWROb2RlTWFwLmgiCiAjaW5jbHVkZSAiTm9kZVJhcmVEYXRhLmgiCiAjaW5jbHVk
ZSAiTm9kZVJlbmRlcmluZ0NvbnRleHQuaCIKKyNpbmNsdWRlICJOb2RlVHJhdmVyc2FsLmgiCiAj
aW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtTW91c2VFdmVudC5oIgogI2luY2x1
ZGUgIlBsYXRmb3JtV2hlZWxFdmVudC5oIgpAQCAtNjM4LDcgKzYzOSw3IEBAIHZvaWQgTm9kZTo6
bm9ybWFsaXplKCkKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGlmICh0eXBlICE9IFRF
WFRfTk9ERSkgewotICAgICAgICAgICAgbm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGVQb3N0
T3JkZXIoKTsKKyAgICAgICAgICAgIG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0UG9zdE9yZGVy
KG5vZGUuZ2V0KCkpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIApAQCAtNjQ3
LDcgKzY0OCw3IEBAIHZvaWQgTm9kZTo6bm9ybWFsaXplKCkKICAgICAgICAgLy8gUmVtb3ZlIGVt
cHR5IHRleHQgbm9kZXMuCiAgICAgICAgIGlmICghdGV4dC0+bGVuZ3RoKCkpIHsKICAgICAgICAg
ICAgIC8vIENhcmUgbXVzdCBiZSB0YWtlbiB0byBnZXQgdGhlIG5leHQgbm9kZSBiZWZvcmUgcmVt
b3ZpbmcgdGhlIGN1cnJlbnQgbm9kZS4KLSAgICAgICAgICAgIG5vZGUgPSBub2RlLT50cmF2ZXJz
ZU5leHROb2RlUG9zdE9yZGVyKCk7CisgICAgICAgICAgICBub2RlID0gTm9kZVRyYXZlcnNhbDo6
bmV4dFBvc3RPcmRlcihub2RlLmdldCgpKTsKICAgICAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWM7
CiAgICAgICAgICAgICB0ZXh0LT5yZW1vdmUoZWMpOwogICAgICAgICAgICAgY29udGludWU7CkBA
IC02NzQsNyArNjc1LDcgQEAgdm9pZCBOb2RlOjpub3JtYWxpemUoKQogICAgICAgICAgICAgbmV4
dFRleHQtPnJlbW92ZShlYyk7CiAgICAgICAgIH0KIAotICAgICAgICBub2RlID0gbm9kZS0+dHJh
dmVyc2VOZXh0Tm9kZVBvc3RPcmRlcigpOworICAgICAgICBub2RlID0gTm9kZVRyYXZlcnNhbDo6
bmV4dFBvc3RPcmRlcihub2RlLmdldCgpKTsKICAgICB9CiB9CiAKQEAgLTg4OCw3ICs4ODksNyBA
QCB2b2lkIE5vZGU6OnNldE5lZWRzU3R5bGVSZWNhbGMoU3R5bGVDaGFuCiAKIHZvaWQgTm9kZTo6
bGF6eUF0dGFjaChTaG91bGRTZXRBdHRhY2hlZCBzaG91bGRTZXRBdHRhY2hlZCkKIHsKLSAgICBm
b3IgKE5vZGUqIG4gPSB0aGlzOyBuOyBuID0gbi0+dHJhdmVyc2VOZXh0Tm9kZSh0aGlzKSkgewor
ICAgIGZvciAoTm9kZSogbiA9IHRoaXM7IG47IG4gPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG4sIHRo
aXMpKSB7CiAgICAgICAgIGlmIChuLT5oYXNDaGlsZE5vZGVzKCkpCiAgICAgICAgICAgICBuLT5z
ZXRDaGlsZE5lZWRzU3R5bGVSZWNhbGMoKTsKICAgICAgICAgbi0+c2V0U3R5bGVDaGFuZ2UoRnVs
bFN0eWxlQ2hhbmdlKTsKQEAgLTEwMzksOTYgKzEwNDAsNiBAQCBOb2RlTGlzdHNOb2RlRGF0YSog
Tm9kZTo6bm9kZUxpc3RzKCkKICAgICByZXR1cm4gaGFzUmFyZURhdGEoKSA/IHJhcmVEYXRhKCkt
Pm5vZGVMaXN0cygpIDogMDsKIH0KIAotTm9kZSogTm9kZTo6dHJhdmVyc2VOZXh0QW5jZXN0b3JT
aWJsaW5nKCkgY29uc3QKLXsKLSAgICBBU1NFUlQoIW5leHRTaWJsaW5nKCkpOwotICAgIGZvciAo
Y29uc3QgTm9kZSogbm9kZSA9IHBhcmVudE5vZGUoKTsgbm9kZTsgbm9kZSA9IG5vZGUtPnBhcmVu
dE5vZGUoKSkgewotICAgICAgICBpZiAobm9kZS0+bmV4dFNpYmxpbmcoKSkKLSAgICAgICAgICAg
IHJldHVybiBub2RlLT5uZXh0U2libGluZygpOwotICAgIH0KLSAgICByZXR1cm4gMDsKLX0KLQot
Tm9kZSogTm9kZTo6dHJhdmVyc2VOZXh0QW5jZXN0b3JTaWJsaW5nKGNvbnN0IE5vZGUqIHN0YXlX
aXRoaW4pIGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFuZXh0U2libGluZygpKTsKLSAgICBBU1NFUlQo
dGhpcyAhPSBzdGF5V2l0aGluKTsKLSAgICBmb3IgKGNvbnN0IE5vZGUqIG5vZGUgPSBwYXJlbnRO
b2RlKCk7IG5vZGU7IG5vZGUgPSBub2RlLT5wYXJlbnROb2RlKCkpIHsKLSAgICAgICAgaWYgKG5v
ZGUgPT0gc3RheVdpdGhpbikKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBpZiAobm9k
ZS0+bmV4dFNpYmxpbmcoKSkKLSAgICAgICAgICAgIHJldHVybiBub2RlLT5uZXh0U2libGluZygp
OwotICAgIH0KLSAgICByZXR1cm4gMDsKLX0KLQotTm9kZSogTm9kZTo6dHJhdmVyc2VOZXh0Tm9k
ZVBvc3RPcmRlcigpIGNvbnN0Ci17Ci0gICAgTm9kZSogbmV4dCA9IG5leHRTaWJsaW5nKCk7Ci0g
ICAgaWYgKCFuZXh0KQotICAgICAgICByZXR1cm4gcGFyZW50Tm9kZSgpOwotICAgIHdoaWxlIChO
b2RlKiBmaXJzdENoaWxkID0gbmV4dC0+Zmlyc3RDaGlsZCgpKQotICAgICAgICBuZXh0ID0gZmly
c3RDaGlsZDsKLSAgICByZXR1cm4gbmV4dDsKLX0KLQotTm9kZSogTm9kZTo6dHJhdmVyc2VQcmV2
aW91c05vZGUoY29uc3QgTm9kZSogc3RheVdpdGhpbikgY29uc3QKLXsKLSAgICBpZiAodGhpcyA9
PSBzdGF5V2l0aGluKQotICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAocHJldmlvdXNTaWJsaW5n
KCkpIHsKLSAgICAgICAgTm9kZSAqbiA9IHByZXZpb3VzU2libGluZygpOwotICAgICAgICB3aGls
ZSAobi0+bGFzdENoaWxkKCkpCi0gICAgICAgICAgICBuID0gbi0+bGFzdENoaWxkKCk7Ci0gICAg
ICAgIHJldHVybiBuOwotICAgIH0KLSAgICByZXR1cm4gcGFyZW50Tm9kZSgpOwotfQotCi1Ob2Rl
KiBOb2RlOjp0cmF2ZXJzZVByZXZpb3VzU2libGluZyhjb25zdCBOb2RlKiBzdGF5V2l0aGluKSBj
b25zdAotewotICAgIGlmICh0aGlzID09IHN0YXlXaXRoaW4pCi0gICAgICAgIHJldHVybiAwOwot
ICAgIGlmIChwcmV2aW91c1NpYmxpbmcoKSkKLSAgICAgICAgcmV0dXJuIHByZXZpb3VzU2libGlu
ZygpOwotICAgIGNvbnN0IE5vZGUgKm4gPSB0aGlzOwotICAgIHdoaWxlIChuICYmICFuLT5wcmV2
aW91c1NpYmxpbmcoKSAmJiAoIXN0YXlXaXRoaW4gfHwgbi0+cGFyZW50Tm9kZSgpICE9IHN0YXlX
aXRoaW4pKQotICAgICAgICBuID0gbi0+cGFyZW50Tm9kZSgpOwotICAgIGlmIChuKQotICAgICAg
ICByZXR1cm4gbi0+cHJldmlvdXNTaWJsaW5nKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLU5vZGUq
IE5vZGU6OnRyYXZlcnNlUHJldmlvdXNOb2RlUG9zdE9yZGVyKGNvbnN0IE5vZGUqIHN0YXlXaXRo
aW4pIGNvbnN0Ci17Ci0gICAgaWYgKGxhc3RDaGlsZCgpKQotICAgICAgICByZXR1cm4gbGFzdENo
aWxkKCk7Ci0gICAgaWYgKHRoaXMgPT0gc3RheVdpdGhpbikKLSAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgaWYgKHByZXZpb3VzU2libGluZygpKQotICAgICAgICByZXR1cm4gcHJldmlvdXNTaWJsaW5n
KCk7Ci0gICAgY29uc3QgTm9kZSAqbiA9IHRoaXM7Ci0gICAgd2hpbGUgKG4gJiYgIW4tPnByZXZp
b3VzU2libGluZygpICYmICghc3RheVdpdGhpbiB8fCBuLT5wYXJlbnROb2RlKCkgIT0gc3RheVdp
dGhpbikpCi0gICAgICAgIG4gPSBuLT5wYXJlbnROb2RlKCk7Ci0gICAgaWYgKG4pCi0gICAgICAg
IHJldHVybiBuLT5wcmV2aW91c1NpYmxpbmcoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotTm9kZSog
Tm9kZTo6dHJhdmVyc2VQcmV2aW91c1NpYmxpbmdQb3N0T3JkZXIoY29uc3QgTm9kZSogc3RheVdp
dGhpbikgY29uc3QKLXsKLSAgICBpZiAodGhpcyA9PSBzdGF5V2l0aGluKQotICAgICAgICByZXR1
cm4gMDsKLSAgICBpZiAocHJldmlvdXNTaWJsaW5nKCkpCi0gICAgICAgIHJldHVybiBwcmV2aW91
c1NpYmxpbmcoKTsKLSAgICBjb25zdCBOb2RlICpuID0gdGhpczsKLSAgICB3aGlsZSAobiAmJiAh
bi0+cHJldmlvdXNTaWJsaW5nKCkgJiYgKCFzdGF5V2l0aGluIHx8IG4tPnBhcmVudE5vZGUoKSAh
PSBzdGF5V2l0aGluKSkKLSAgICAgICAgbiA9IG4tPnBhcmVudE5vZGUoKTsKLSAgICBpZiAobikK
LSAgICAgICAgcmV0dXJuIG4tPnByZXZpb3VzU2libGluZygpOwotICAgIHJldHVybiAwOwotfQot
CiB2b2lkIE5vZGU6OmNoZWNrU2V0UHJlZml4KGNvbnN0IEF0b21pY1N0cmluZyYgcHJlZml4LCBF
eGNlcHRpb25Db2RlJiBlYykKIHsKICAgICAvLyBQZXJmb3JtIGVycm9yIGNoZWNraW5nIGFzIHJl
cXVpcmVkIGJ5IHNwZWMgZm9yIHNldHRpbmcgTm9kZS5wcmVmaXguIFVzZWQgYnkKQEAgLTEyMzMs
NyArMTE0NCw3IEBAIHZvaWQgTm9kZTo6ZGV0YWNoKCkKICAgICBpZiAocmVuZGVyZXIoKSkgewog
ICAgICAgICByZW5kZXJlcigpLT5kZXN0cm95QW5kQ2xlYW51cEFub255bW91c1dyYXBwZXJzKCk7
CiAjaWZuZGVmIE5ERUJVRwotICAgICAgICBmb3IgKE5vZGUqIG5vZGUgPSB0aGlzOyBub2RlOyBu
b2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSh0aGlzKSkgeworICAgICAgICBmb3IgKE5vZGUq
IG5vZGUgPSB0aGlzOyBub2RlOyBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dChub2RlLCB0aGlz
KSkgewogICAgICAgICAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IG5vZGUtPnJlbmRlcmVy
KCk7CiAgICAgICAgICAgICAvLyBSZW5kZXJGbG93VGhyZWFkIGFuZCB0aGUgdG9wIGxheWVyIHJl
bW92ZSBlbGVtZW50cyBmcm9tIHRoZSByZWd1bGFyIHRyZWUKICAgICAgICAgICAgIC8vIGhpZXJh
cmNoeS4gVGhleSB3aWxsIGJlIGNsZWFuZWQgdXAgd2hlbiB3ZSBjYWxsIGRldGFjaCBvbiB0aGVt
LgpAQCAtMjA4Niw3ICsxOTk3LDcgQEAgdm9pZCBOb2RlOjpzaG93Tm9kZVBhdGhGb3JUaGlzKCkg
Y29uc3QKIAogc3RhdGljIHZvaWQgdHJhdmVyc2VUcmVlQW5kTWFyayhjb25zdCBTdHJpbmcmIGJh
c2VJbmRlbnQsIGNvbnN0IE5vZGUqIHJvb3ROb2RlLCBjb25zdCBOb2RlKiBtYXJrZWROb2RlMSwg
Y29uc3QgY2hhciogbWFya2VkTGFiZWwxLCBjb25zdCBOb2RlKiBtYXJrZWROb2RlMiwgY29uc3Qg
Y2hhciogbWFya2VkTGFiZWwyKQogewotICAgIGZvciAoY29uc3QgTm9kZSogbm9kZSA9IHJvb3RO
b2RlOyBub2RlOyBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgpKSB7CisgICAgZm9yIChj
b25zdCBOb2RlKiBub2RlID0gcm9vdE5vZGU7IG5vZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpu
ZXh0KG5vZGUpKSB7CiAgICAgICAgIGlmIChub2RlID09IG1hcmtlZE5vZGUxKQogICAgICAgICAg
ICAgZnByaW50ZihzdGRlcnIsICIlcyIsIG1hcmtlZExhYmVsMSk7CiAgICAgICAgIGlmIChub2Rl
ID09IG1hcmtlZE5vZGUyKQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCShyZXZpc2lvbiAxMzcyMTIpCisrKyBT
b3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NzcsMzAgKzQ3Nyw2
IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBjaGlsZE5vZGVDb3VudCgpIGNvbnN0OwogICAgIE5v
ZGUqIGNoaWxkTm9kZSh1bnNpZ25lZCBpbmRleCkgY29uc3Q7CiAKLSAgICAvLyBEb2VzIGEgcHJl
LW9yZGVyIHRyYXZlcnNhbCBvZiB0aGUgdHJlZSB0byBmaW5kIHRoZSBuZXh0IG5vZGUgYWZ0ZXIg
dGhpcyBvbmUuCi0gICAgLy8gVGhpcyB1c2VzIHRoZSBzYW1lIG9yZGVyIHRoYXQgdGFncyBhcHBl
YXIgaW4gdGhlIHNvdXJjZSBmaWxlLiBJZiB0aGUgc3RheVdpdGhpbgotICAgIC8vIGFyZ3VtZW50
IGlzIG5vbi1udWxsLCB0aGUgdHJhdmVyc2FsIHdpbGwgc3RvcCBvbmNlIHRoZSBzcGVjaWZpZWQg
bm9kZSBpcyByZWFjaGVkLgotICAgIC8vIFRoaXMgY2FuIGJlIHVzZWQgdG8gcmVzdHJpY3QgdHJh
dmVyc2FsIHRvIGEgcGFydGljdWxhciBzdWItdHJlZS4KLSAgICBOb2RlKiB0cmF2ZXJzZU5leHRO
b2RlKCkgY29uc3Q7Ci0gICAgTm9kZSogdHJhdmVyc2VOZXh0Tm9kZShjb25zdCBOb2RlKiBzdGF5
V2l0aGluKSBjb25zdDsKLQotICAgIC8vIExpa2UgdHJhdmVyc2VOZXh0Tm9kZSwgYnV0IHNraXBz
IGNoaWxkcmVuIGFuZCBzdGFydHMgd2l0aCB0aGUgbmV4dCBzaWJsaW5nLgotICAgIE5vZGUqIHRy
YXZlcnNlTmV4dFNpYmxpbmcoKSBjb25zdDsKLSAgICBOb2RlKiB0cmF2ZXJzZU5leHRTaWJsaW5n
KGNvbnN0IE5vZGUqIHN0YXlXaXRoaW4pIGNvbnN0OwotCi0gICAgLy8gRG9lcyBhIHJldmVyc2Ug
cHJlLW9yZGVyIHRyYXZlcnNhbCB0byBmaW5kIHRoZSBub2RlIHRoYXQgY29tZXMgYmVmb3JlIHRo
ZSBjdXJyZW50IG9uZSBpbiBkb2N1bWVudCBvcmRlcgotICAgIE5vZGUqIHRyYXZlcnNlUHJldmlv
dXNOb2RlKGNvbnN0IE5vZGUqIHN0YXlXaXRoaW4gPSAwKSBjb25zdDsKLQotICAgIC8vIExpa2Ug
dHJhdmVyc2VQcmV2aW91c05vZGUsIGJ1dCBza2lwcyBjaGlsZHJlbiBhbmQgc3RhcnRzIHdpdGgg
dGhlIG5leHQgc2libGluZy4KLSAgICBOb2RlKiB0cmF2ZXJzZVByZXZpb3VzU2libGluZyhjb25z
dCBOb2RlKiBzdGF5V2l0aGluID0gMCkgY29uc3Q7Ci0KLSAgICAvLyBMaWtlIHRyYXZlcnNlTmV4
dE5vZGUsIGJ1dCB2aXNpdHMgcGFyZW50cyBhZnRlciB0aGVpciBjaGlsZHJlbi4KLSAgICBOb2Rl
KiB0cmF2ZXJzZU5leHROb2RlUG9zdE9yZGVyKCkgY29uc3Q7Ci0KLSAgICAvLyBMaWtlIHRyYXZl
cnNlUHJldmlvdXNOb2RlLCBidXQgdmlzaXRzIHBhcmVudHMgYmVmb3JlIHRoZWlyIGNoaWxkcmVu
LgotICAgIE5vZGUqIHRyYXZlcnNlUHJldmlvdXNOb2RlUG9zdE9yZGVyKGNvbnN0IE5vZGUqIHN0
YXlXaXRoaW4gPSAwKSBjb25zdDsKLSAgICBOb2RlKiB0cmF2ZXJzZVByZXZpb3VzU2libGluZ1Bv
c3RPcmRlcihjb25zdCBOb2RlKiBzdGF5V2l0aGluID0gMCkgY29uc3Q7Ci0KICAgICB2b2lkIGNo
ZWNrU2V0UHJlZml4KGNvbnN0IEF0b21pY1N0cmluZyYgcHJlZml4LCBFeGNlcHRpb25Db2RlJik7
CiAgICAgYm9vbCBpc0Rlc2NlbmRhbnRPZihjb25zdCBOb2RlKikgY29uc3Q7CiAgICAgYm9vbCBj
b250YWlucyhjb25zdCBOb2RlKikgY29uc3Q7CkBAIC04MTksOSArNzk1LDYgQEAgcHJpdmF0ZToK
IAogICAgIEVsZW1lbnQqIGFuY2VzdG9yRWxlbWVudCgpIGNvbnN0OwogCi0gICAgTm9kZSogdHJh
dmVyc2VOZXh0QW5jZXN0b3JTaWJsaW5nKCkgY29uc3Q7Ci0gICAgTm9kZSogdHJhdmVyc2VOZXh0
QW5jZXN0b3JTaWJsaW5nKGNvbnN0IE5vZGUqIHN0YXlXaXRoaW4pIGNvbnN0OwotCiAgICAgLy8g
VXNlIE5vZGU6OnBhcmVudE5vZGUgYXMgdGhlIGNvbnNpc3RlbnQgd2F5IG9mIHF1ZXJ5aW5nIGEg
cGFyZW50IG5vZGUuCiAgICAgLy8gVGhpcyBtZXRob2QgaXMgbWFkZSBwcml2YXRlIHRvIGVuc3Vy
ZSBhIGNvbXBpbGVyIGVycm9yIG9uIGNhbGwgc2l0ZXMgdGhhdAogICAgIC8vIGRvbid0IGZvbGxv
dyB0aGlzIHJ1bGUuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZUl0ZXJhdG9yLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZUl0ZXJhdG9yLmNwcAkocmV2aXNp
b24gMTM3MjEyKQorKysgU291cmNlL1dlYkNvcmUvZG9tL05vZGVJdGVyYXRvci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1
ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJOb2RlRmlsdGVyLmgiCisjaW5jbHVkZSAi
Tm9kZVRyYXZlcnNhbC5oIgogI2luY2x1ZGUgIlNjcmlwdFN0YXRlLmgiCiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKQEAgLTU1LDcgKzU2LDcgQEAgYm9vbCBOb2RlSXRlcmF0b3I6Ok5vZGVQb2ludGVy
Ojptb3ZlVG9OZQogICAgICAgICBpc1BvaW50ZXJCZWZvcmVOb2RlID0gZmFsc2U7CiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0KLSAgICBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZShy
b290KTsKKyAgICBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dChub2RlLmdldCgpLCByb290KTsK
ICAgICByZXR1cm4gbm9kZTsKIH0KIApAQCAtNjcsNyArNjgsNyBAQCBib29sIE5vZGVJdGVyYXRv
cjo6Tm9kZVBvaW50ZXI6Om1vdmVUb1ByCiAgICAgICAgIGlzUG9pbnRlckJlZm9yZU5vZGUgPSB0
cnVlOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAgbm9kZSA9IG5vZGUtPnRyYXZl
cnNlUHJldmlvdXNOb2RlKHJvb3QpOworICAgIG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpwcmV2aW91
cyhub2RlLmdldCgpLCByb290KTsKICAgICByZXR1cm4gbm9kZTsKIH0KIApAQCAtMTc3LDIyICsx
NzgsMjIgQEAgdm9pZCBOb2RlSXRlcmF0b3I6OnVwZGF0ZUZvck5vZGVSZW1vdmFsKAogICAgICAg
ICByZXR1cm47CiAKICAgICBpZiAocmVmZXJlbmNlTm9kZS5pc1BvaW50ZXJCZWZvcmVOb2RlKSB7
Ci0gICAgICAgIE5vZGUqIG5vZGUgPSByZW1vdmVkTm9kZS0+dHJhdmVyc2VOZXh0Tm9kZShyb290
KCkpOworICAgICAgICBOb2RlKiBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dChyZW1vdmVkTm9k
ZSwgcm9vdCgpKTsKICAgICAgICAgaWYgKG5vZGUpIHsKICAgICAgICAgICAgIC8vIE1vdmUgb3V0
IGZyb20gdW5kZXIgdGhlIG5vZGUgYmVpbmcgcmVtb3ZlZCBpZiB0aGUgbmV3IHJlZmVyZW5jZQog
ICAgICAgICAgICAgLy8gbm9kZSBpcyBhIGRlc2NlbmRhbnQgb2YgdGhlIG5vZGUgYmVpbmcgcmVt
b3ZlZC4KICAgICAgICAgICAgIHdoaWxlIChub2RlICYmIG5vZGUtPmlzRGVzY2VuZGFudE9mKHJl
bW92ZWROb2RlKSkKLSAgICAgICAgICAgICAgICBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9k
ZShyb290KCkpOworICAgICAgICAgICAgICAgIG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5v
ZGUsIHJvb3QoKSk7CiAgICAgICAgICAgICBpZiAobm9kZSkKICAgICAgICAgICAgICAgICByZWZl
cmVuY2VOb2RlLm5vZGUgPSBub2RlOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbm9k
ZSA9IHJlbW92ZWROb2RlLT50cmF2ZXJzZVByZXZpb3VzTm9kZShyb290KCkpOworICAgICAgICAg
ICAgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6OnByZXZpb3VzKHJlbW92ZWROb2RlLCByb290KCkpOwog
ICAgICAgICAgICAgaWYgKG5vZGUpIHsKICAgICAgICAgICAgICAgICAvLyBNb3ZlIG91dCBmcm9t
IHVuZGVyIHRoZSBub2RlIGJlaW5nIHJlbW92ZWQgaWYgdGhlIHJlZmVyZW5jZSBub2RlIGlzCiAg
ICAgICAgICAgICAgICAgLy8gYSBkZXNjZW5kYW50IG9mIHRoZSBub2RlIGJlaW5nIHJlbW92ZWQu
CiAgICAgICAgICAgICAgICAgaWYgKHdpbGxSZW1vdmVSZWZlcmVuY2VOb2RlQW5jZXN0b3IpIHsK
ICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKG5vZGUgJiYgbm9kZS0+aXNEZXNjZW5kYW50T2Yo
cmVtb3ZlZE5vZGUpKQotICAgICAgICAgICAgICAgICAgICAgICAgbm9kZSA9IG5vZGUtPnRyYXZl
cnNlUHJldmlvdXNOb2RlKHJvb3QoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBub2RlID0g
Tm9kZVRyYXZlcnNhbDo6cHJldmlvdXMobm9kZSwgcm9vdCgpKTsKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgaWYgKG5vZGUpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gUmVt
b3ZpbmcgbGFzdCBub2RlLgpAQCAtMjA0LDI0ICsyMDUsMjQgQEAgdm9pZCBOb2RlSXRlcmF0b3I6
OnVwZGF0ZUZvck5vZGVSZW1vdmFsKAogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfSBl
bHNlIHsKLSAgICAgICAgTm9kZSogbm9kZSA9IHJlbW92ZWROb2RlLT50cmF2ZXJzZVByZXZpb3Vz
Tm9kZShyb290KCkpOworICAgICAgICBOb2RlKiBub2RlID0gTm9kZVRyYXZlcnNhbDo6cHJldmlv
dXMocmVtb3ZlZE5vZGUsIHJvb3QoKSk7CiAgICAgICAgIGlmIChub2RlKSB7CiAgICAgICAgICAg
ICAvLyBNb3ZlIG91dCBmcm9tIHVuZGVyIHRoZSBub2RlIGJlaW5nIHJlbW92ZWQgaWYgdGhlIHJl
ZmVyZW5jZSBub2RlIGlzCiAgICAgICAgICAgICAvLyBhIGRlc2NlbmRhbnQgb2YgdGhlIG5vZGUg
YmVpbmcgcmVtb3ZlZC4KICAgICAgICAgICAgIGlmICh3aWxsUmVtb3ZlUmVmZXJlbmNlTm9kZUFu
Y2VzdG9yKSB7CiAgICAgICAgICAgICAgICAgd2hpbGUgKG5vZGUgJiYgbm9kZS0+aXNEZXNjZW5k
YW50T2YocmVtb3ZlZE5vZGUpKQotICAgICAgICAgICAgICAgICAgICBub2RlID0gbm9kZS0+dHJh
dmVyc2VQcmV2aW91c05vZGUocm9vdCgpKTsKKyAgICAgICAgICAgICAgICAgICAgbm9kZSA9IE5v
ZGVUcmF2ZXJzYWw6OnByZXZpb3VzKG5vZGUsIHJvb3QoKSk7CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICBpZiAobm9kZSkKICAgICAgICAgICAgICAgICByZWZlcmVuY2VOb2RlLm5vZGUgPSBu
b2RlOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgYnJhbmNo
IGRvZXNuJ3QgYXBwZWFyIHRvIGhhdmUgYW55IExheW91dFRlc3RzLgotICAgICAgICAgICAgbm9k
ZSA9IHJlbW92ZWROb2RlLT50cmF2ZXJzZU5leHROb2RlKHJvb3QoKSk7CisgICAgICAgICAgICBu
b2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dChyZW1vdmVkTm9kZSwgcm9vdCgpKTsKICAgICAgICAg
ICAgIC8vIE1vdmUgb3V0IGZyb20gdW5kZXIgdGhlIG5vZGUgYmVpbmcgcmVtb3ZlZCBpZiB0aGUg
cmVmZXJlbmNlIG5vZGUgaXMKICAgICAgICAgICAgIC8vIGEgZGVzY2VuZGFudCBvZiB0aGUgbm9k
ZSBiZWluZyByZW1vdmVkLgogICAgICAgICAgICAgaWYgKHdpbGxSZW1vdmVSZWZlcmVuY2VOb2Rl
QW5jZXN0b3IpIHsKICAgICAgICAgICAgICAgICB3aGlsZSAobm9kZSAmJiBub2RlLT5pc0Rlc2Nl
bmRhbnRPZihyZW1vdmVkTm9kZSkpCi0gICAgICAgICAgICAgICAgICAgIG5vZGUgPSBub2RlLT50
cmF2ZXJzZVByZXZpb3VzTm9kZShyb290KCkpOworICAgICAgICAgICAgICAgICAgICBub2RlID0g
Tm9kZVRyYXZlcnNhbDo6cHJldmlvdXMobm9kZSwgcm9vdCgpKTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIGlmIChub2RlKQogICAgICAgICAgICAgICAgIHJlZmVyZW5jZU5vZGUubm9kZSA9
IG5vZGU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZVRyYXZlcnNhbC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL05vZGVUcmF2ZXJzYWwuY3BwCShyZXZpc2lvbiAw
KQorKysgU291cmNlL1dlYkNvcmUvZG9tL05vZGVUcmF2ZXJzYWwuY3BwCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDEyOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChr
bm9sbEBrZGUub3JnKQorICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2
aXN0b0BrZGUub3JnKQorICogICAgICAgICAgIChDKSAyMDAxIERpcmsgTXVlbGxlciAobXVlbGxl
ckBrZGUub3JnKQorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4
LCAyMDA5LCAyMDEwLCAyMDExLCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLiAoaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIk5vZGVUcmF2ZXJzYWwuaCIKKworI2luY2x1ZGUgIkNvbnRhaW5l
ck5vZGUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNwYWNlIE5vZGVUcmF2ZXJzYWwg
eworCitOb2RlKiBuZXh0QW5jZXN0b3JTaWJsaW5nKGNvbnN0IE5vZGUqIGN1cnJlbnQpCit7Cisg
ICAgQVNTRVJUKCFjdXJyZW50LT5uZXh0U2libGluZygpKTsKKyAgICBmb3IgKGN1cnJlbnQgPSBj
dXJyZW50LT5wYXJlbnROb2RlKCk7IGN1cnJlbnQ7IGN1cnJlbnQgPSBjdXJyZW50LT5wYXJlbnRO
b2RlKCkpIHsKKyAgICAgICAgaWYgKGN1cnJlbnQtPm5leHRTaWJsaW5nKCkpCisgICAgICAgICAg
ICByZXR1cm4gY3VycmVudC0+bmV4dFNpYmxpbmcoKTsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9
CisKK05vZGUqIG5leHRBbmNlc3RvclNpYmxpbmcoY29uc3QgTm9kZSogY3VycmVudCwgY29uc3Qg
Tm9kZSogc3RheVdpdGhpbikKK3sKKyAgICBBU1NFUlQoIWN1cnJlbnQtPm5leHRTaWJsaW5nKCkp
OworICAgIEFTU0VSVChjdXJyZW50ICE9IHN0YXlXaXRoaW4pOworICAgIGZvciAoY3VycmVudCA9
IGN1cnJlbnQtPnBhcmVudE5vZGUoKTsgY3VycmVudDsgY3VycmVudCA9IGN1cnJlbnQtPnBhcmVu
dE5vZGUoKSkgeworICAgICAgICBpZiAoY3VycmVudCA9PSBzdGF5V2l0aGluKQorICAgICAgICAg
ICAgcmV0dXJuIDA7CisgICAgICAgIGlmIChjdXJyZW50LT5uZXh0U2libGluZygpKQorICAgICAg
ICAgICAgcmV0dXJuIGN1cnJlbnQtPm5leHRTaWJsaW5nKCk7CisgICAgfQorICAgIHJldHVybiAw
OworfQorCitOb2RlKiBwcmV2aW91cyhjb25zdCBOb2RlKiBjdXJyZW50LCBjb25zdCBOb2RlKiBz
dGF5V2l0aGluKQoreworICAgIGlmIChjdXJyZW50ID09IHN0YXlXaXRoaW4pCisgICAgICAgIHJl
dHVybiAwOworICAgIGlmIChjdXJyZW50LT5wcmV2aW91c1NpYmxpbmcoKSkgeworICAgICAgICBO
b2RlKiBwcmV2aW91cyA9IGN1cnJlbnQtPnByZXZpb3VzU2libGluZygpOworICAgICAgICB3aGls
ZSAocHJldmlvdXMtPmxhc3RDaGlsZCgpKQorICAgICAgICAgICAgcHJldmlvdXMgPSBwcmV2aW91
cy0+bGFzdENoaWxkKCk7CisgICAgICAgIHJldHVybiBwcmV2aW91czsKKyAgICB9CisgICAgcmV0
dXJuIGN1cnJlbnQtPnBhcmVudE5vZGUoKTsKK30KKworTm9kZSogcHJldmlvdXNTa2lwcGluZ0No
aWxkcmVuKGNvbnN0IE5vZGUqIGN1cnJlbnQsIGNvbnN0IE5vZGUqIHN0YXlXaXRoaW4pCit7Cisg
ICAgaWYgKGN1cnJlbnQgPT0gc3RheVdpdGhpbikKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYg
KGN1cnJlbnQtPnByZXZpb3VzU2libGluZygpKQorICAgICAgICByZXR1cm4gY3VycmVudC0+cHJl
dmlvdXNTaWJsaW5nKCk7CisgICAgZm9yIChjdXJyZW50ID0gY3VycmVudC0+cGFyZW50Tm9kZSgp
OyBjdXJyZW50OyBjdXJyZW50ID0gY3VycmVudC0+cGFyZW50Tm9kZSgpKSB7CisgICAgICAgIGlm
IChjdXJyZW50ID09IHN0YXlXaXRoaW4pCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAg
aWYgKGN1cnJlbnQtPnByZXZpb3VzU2libGluZygpKQorICAgICAgICAgICAgcmV0dXJuIGN1cnJl
bnQtPnByZXZpb3VzU2libGluZygpOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworTm9kZSog
bmV4dFBvc3RPcmRlcihjb25zdCBOb2RlKiBjdXJyZW50LCBjb25zdCBOb2RlKiBzdGF5V2l0aGlu
KQoreworICAgIGlmIChjdXJyZW50ID09IHN0YXlXaXRoaW4pCisgICAgICAgIHJldHVybiAwOwor
ICAgIGlmICghY3VycmVudC0+bmV4dFNpYmxpbmcoKSkKKyAgICAgICAgcmV0dXJuIGN1cnJlbnQt
PnBhcmVudE5vZGUoKTsKKyAgICBOb2RlKiBuZXh0ID0gY3VycmVudC0+bmV4dFNpYmxpbmcoKTsK
KyAgICB3aGlsZSAobmV4dC0+Zmlyc3RDaGlsZCgpKQorICAgICAgICBuZXh0ID0gbmV4dC0+Zmly
c3RDaGlsZCgpOworICAgIHJldHVybiBuZXh0OworfQorCitzdGF0aWMgTm9kZSogcHJldmlvdXNB
bmNlc3RvclNpYmxpbmdQb3N0T3JkZXIoY29uc3QgTm9kZSogY3VycmVudCwgY29uc3QgTm9kZSog
c3RheVdpdGhpbikKK3sKKyAgICBBU1NFUlQoIWN1cnJlbnQtPnByZXZpb3VzU2libGluZygpKTsK
KyAgICBmb3IgKGN1cnJlbnQgPSBjdXJyZW50LT5wYXJlbnROb2RlKCk7IGN1cnJlbnQ7IGN1cnJl
bnQgPSBjdXJyZW50LT5wYXJlbnROb2RlKCkpIHsKKyAgICAgICAgaWYgKGN1cnJlbnQgPT0gc3Rh
eVdpdGhpbikKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBpZiAoY3VycmVudC0+cHJl
dmlvdXNTaWJsaW5nKCkpCisgICAgICAgICAgICByZXR1cm4gY3VycmVudC0+cHJldmlvdXNTaWJs
aW5nKCk7CisgICAgfQorICAgIHJldHVybiAwOworfQorCitOb2RlKiBwcmV2aW91c1Bvc3RPcmRl
cihjb25zdCBOb2RlKiBjdXJyZW50LCBjb25zdCBOb2RlKiBzdGF5V2l0aGluKQoreworICAgIGlm
IChjdXJyZW50LT5sYXN0Q2hpbGQoKSkKKyAgICAgICAgcmV0dXJuIGN1cnJlbnQtPmxhc3RDaGls
ZCgpOworICAgIGlmIChjdXJyZW50ID09IHN0YXlXaXRoaW4pCisgICAgICAgIHJldHVybiAwOwor
ICAgIGlmIChjdXJyZW50LT5wcmV2aW91c1NpYmxpbmcoKSkKKyAgICAgICAgcmV0dXJuIGN1cnJl
bnQtPnByZXZpb3VzU2libGluZygpOworICAgIHJldHVybiBwcmV2aW91c0FuY2VzdG9yU2libGlu
Z1Bvc3RPcmRlcihjdXJyZW50LCBzdGF5V2l0aGluKTsKK30KKworTm9kZSogcHJldmlvdXNTa2lw
cGluZ0NoaWxkcmVuUG9zdE9yZGVyKGNvbnN0IE5vZGUqIGN1cnJlbnQsIGNvbnN0IE5vZGUqIHN0
YXlXaXRoaW4pCit7CisgICAgaWYgKGN1cnJlbnQgPT0gc3RheVdpdGhpbikKKyAgICAgICAgcmV0
dXJuIDA7CisgICAgaWYgKGN1cnJlbnQtPnByZXZpb3VzU2libGluZygpKQorICAgICAgICByZXR1
cm4gY3VycmVudC0+cHJldmlvdXNTaWJsaW5nKCk7CisgICAgcmV0dXJuIHByZXZpb3VzQW5jZXN0
b3JTaWJsaW5nUG9zdE9yZGVyKGN1cnJlbnQsIHN0YXlXaXRoaW4pOworfQorCit9Cit9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZVRyYXZlcnNhbC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2RvbS9Ob2RlVHJhdmVyc2FsLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2Vi
Q29yZS9kb20vTm9kZVRyYXZlcnNhbC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExOCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQorICog
ICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQorICog
ICAgICAgICAgIChDKSAyMDAxIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQorICogQ29w
eXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDEx
LCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAwOCwgMjAwOSBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAoaHR0cDov
L3d3dy50b3JjaG1vYmlsZS5jb20vKQorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBOb2RlVHJhdmVyc2FsX2gKKyNkZWZp
bmUgTm9kZVRyYXZlcnNhbF9oCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgTm9kZTsK
K2NsYXNzIENvbnRhaW5lck5vZGU7CisKK25hbWVzcGFjZSBOb2RlVHJhdmVyc2FsIHsKKworLy8g
RG9lcyBhIHByZS1vcmRlciB0cmF2ZXJzYWwgb2YgdGhlIHRyZWUgdG8gZmluZCB0aGUgbmV4dCBu
b2RlIGFmdGVyIHRoaXMgb25lLgorLy8gVGhpcyB1c2VzIHRoZSBzYW1lIG9yZGVyIHRoYXQgdGFn
cyBhcHBlYXIgaW4gdGhlIHNvdXJjZSBmaWxlLiBJZiB0aGUgc3RheVdpdGhpbgorLy8gYXJndW1l
bnQgaXMgbm9uLW51bGwsIHRoZSB0cmF2ZXJzYWwgd2lsbCBzdG9wIG9uY2UgdGhlIHNwZWNpZmll
ZCBub2RlIGlzIHJlYWNoZWQuCisvLyBUaGlzIGNhbiBiZSB1c2VkIHRvIHJlc3RyaWN0IHRyYXZl
cnNhbCB0byBhIHBhcnRpY3VsYXIgc3ViLXRyZWUuCitOb2RlKiBuZXh0KGNvbnN0IE5vZGUqKTsK
K05vZGUqIG5leHQoY29uc3QgTm9kZSosIGNvbnN0IE5vZGUqIHN0YXlXaXRoaW4pOworTm9kZSog
bmV4dChjb25zdCBDb250YWluZXJOb2RlKik7CitOb2RlKiBuZXh0KGNvbnN0IENvbnRhaW5lck5v
ZGUqLCBjb25zdCBOb2RlKiBzdGF5V2l0aGluKTsKKworLy8gTGlrZSBuZXh0LCBidXQgc2tpcHMg
Y2hpbGRyZW4gYW5kIHN0YXJ0cyB3aXRoIHRoZSBuZXh0IHNpYmxpbmcuCitOb2RlKiBuZXh0U2tp
cHBpbmdDaGlsZHJlbihjb25zdCBOb2RlKik7CitOb2RlKiBuZXh0U2tpcHBpbmdDaGlsZHJlbihj
b25zdCBOb2RlKiwgY29uc3QgTm9kZSogc3RheVdpdGhpbik7CitOb2RlKiBuZXh0U2tpcHBpbmdD
aGlsZHJlbihjb25zdCBDb250YWluZXJOb2RlKik7CitOb2RlKiBuZXh0U2tpcHBpbmdDaGlsZHJl
bihjb25zdCBDb250YWluZXJOb2RlKiwgY29uc3QgTm9kZSogc3RheVdpdGhpbik7CisKKy8vIERv
ZXMgYSByZXZlcnNlIHByZS1vcmRlciB0cmF2ZXJzYWwgdG8gZmluZCB0aGUgbm9kZSB0aGF0IGNv
bWVzIGJlZm9yZSB0aGUgY3VycmVudCBvbmUgaW4gZG9jdW1lbnQgb3JkZXIKK05vZGUqIHByZXZp
b3VzKGNvbnN0IE5vZGUqLCBjb25zdCBOb2RlKiBzdGF5V2l0aGluID0gMCk7CisKKy8vIExpa2Ug
cHJldmlvdXMsIGJ1dCBza2lwcyBjaGlsZHJlbiBhbmQgc3RhcnRzIHdpdGggdGhlIG5leHQgc2li
bGluZy4KK05vZGUqIHByZXZpb3VzU2tpcHBpbmdDaGlsZHJlbihjb25zdCBOb2RlKiwgY29uc3Qg
Tm9kZSogc3RheVdpdGhpbiA9IDApOworCisvLyBMaWtlIG5leHQsIGJ1dCB2aXNpdHMgcGFyZW50
cyBhZnRlciB0aGVpciBjaGlsZHJlbi4KK05vZGUqIG5leHRQb3N0T3JkZXIoY29uc3QgTm9kZSos
IGNvbnN0IE5vZGUqIHN0YXlXaXRoaW4gPSAwKTsKKworLy8gTGlrZSBwcmV2aW91cy9wcmV2aW91
c1NraXBwaW5nQ2hpbGRyZW4sIGJ1dCB2aXNpdHMgcGFyZW50cyBiZWZvcmUgdGhlaXIgY2hpbGRy
ZW4uCitOb2RlKiBwcmV2aW91c1Bvc3RPcmRlcihjb25zdCBOb2RlKiwgY29uc3QgTm9kZSogc3Rh
eVdpdGhpbiA9IDApOworTm9kZSogcHJldmlvdXNTa2lwcGluZ0NoaWxkcmVuUG9zdE9yZGVyKGNv
bnN0IE5vZGUqLCBjb25zdCBOb2RlKiBzdGF5V2l0aGluID0gMCk7CisKK05vZGUqIG5leHRBbmNl
c3RvclNpYmxpbmcoY29uc3QgTm9kZSopOworTm9kZSogbmV4dEFuY2VzdG9yU2libGluZyhjb25z
dCBOb2RlKiwgY29uc3QgTm9kZSogc3RheVdpdGhpbik7CisKK3RlbXBsYXRlIDxjbGFzcyBOb2Rl
VHlwZT4KK2lubGluZSBOb2RlKiB0cmF2ZXJzZU5leHRUZW1wbGF0ZShOb2RlVHlwZSogY3VycmVu
dCkKK3sKKyAgICBpZiAoY3VycmVudC0+Zmlyc3RDaGlsZCgpKQorICAgICAgICByZXR1cm4gY3Vy
cmVudC0+Zmlyc3RDaGlsZCgpOworICAgIGlmIChjdXJyZW50LT5uZXh0U2libGluZygpKQorICAg
ICAgICByZXR1cm4gY3VycmVudC0+bmV4dFNpYmxpbmcoKTsKKyAgICByZXR1cm4gbmV4dEFuY2Vz
dG9yU2libGluZyhjdXJyZW50KTsKK30KK2lubGluZSBOb2RlKiBuZXh0KGNvbnN0IE5vZGUqIGN1
cnJlbnQpIHsgcmV0dXJuIHRyYXZlcnNlTmV4dFRlbXBsYXRlKGN1cnJlbnQpOyB9CitpbmxpbmUg
Tm9kZSogbmV4dChjb25zdCBDb250YWluZXJOb2RlKiBjdXJyZW50KSB7IHJldHVybiB0cmF2ZXJz
ZU5leHRUZW1wbGF0ZShjdXJyZW50KTsgfQorICAgIAordGVtcGxhdGUgPGNsYXNzIE5vZGVUeXBl
PgoraW5saW5lIE5vZGUqIHRyYXZlcnNlTmV4dFRlbXBsYXRlKE5vZGVUeXBlKiBjdXJyZW50LCBj
b25zdCBOb2RlKiBzdGF5V2l0aGluKQoreworICAgIGlmIChjdXJyZW50LT5maXJzdENoaWxkKCkp
CisgICAgICAgIHJldHVybiBjdXJyZW50LT5maXJzdENoaWxkKCk7CisgICAgaWYgKGN1cnJlbnQg
PT0gc3RheVdpdGhpbikKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKGN1cnJlbnQtPm5leHRT
aWJsaW5nKCkpCisgICAgICAgIHJldHVybiBjdXJyZW50LT5uZXh0U2libGluZygpOworICAgIHJl
dHVybiBuZXh0QW5jZXN0b3JTaWJsaW5nKGN1cnJlbnQsIHN0YXlXaXRoaW4pOworfQoraW5saW5l
IE5vZGUqIG5leHQoY29uc3QgTm9kZSogY3VycmVudCwgY29uc3QgTm9kZSogc3RheVdpdGhpbikg
eyByZXR1cm4gdHJhdmVyc2VOZXh0VGVtcGxhdGUoY3VycmVudCwgc3RheVdpdGhpbik7IH0KK2lu
bGluZSBOb2RlKiBuZXh0KGNvbnN0IENvbnRhaW5lck5vZGUqIGN1cnJlbnQsIGNvbnN0IE5vZGUq
IHN0YXlXaXRoaW4pIHsgcmV0dXJuIHRyYXZlcnNlTmV4dFRlbXBsYXRlKGN1cnJlbnQsIHN0YXlX
aXRoaW4pOyB9CisKK3RlbXBsYXRlIDxjbGFzcyBOb2RlVHlwZT4KK2lubGluZSBOb2RlKiB0cmF2
ZXJzZU5leHRTa2lwcGluZ0NoaWxkcmVuVGVtcGxhdGUoTm9kZVR5cGUqIGN1cnJlbnQpCit7Cisg
ICAgaWYgKGN1cnJlbnQtPm5leHRTaWJsaW5nKCkpCisgICAgICAgIHJldHVybiBjdXJyZW50LT5u
ZXh0U2libGluZygpOworICAgIHJldHVybiBuZXh0QW5jZXN0b3JTaWJsaW5nKGN1cnJlbnQpOwor
fQoraW5saW5lIE5vZGUqIG5leHRTa2lwcGluZ0NoaWxkcmVuKGNvbnN0IE5vZGUqIGN1cnJlbnQp
IHsgcmV0dXJuIHRyYXZlcnNlTmV4dFNraXBwaW5nQ2hpbGRyZW5UZW1wbGF0ZShjdXJyZW50KTsg
fQoraW5saW5lIE5vZGUqIG5leHRTa2lwcGluZ0NoaWxkcmVuKGNvbnN0IENvbnRhaW5lck5vZGUq
IGN1cnJlbnQpIHsgcmV0dXJuIHRyYXZlcnNlTmV4dFNraXBwaW5nQ2hpbGRyZW5UZW1wbGF0ZShj
dXJyZW50KTsgfQorCit0ZW1wbGF0ZSA8Y2xhc3MgTm9kZVR5cGU+CitpbmxpbmUgTm9kZSogdHJh
dmVyc2VOZXh0U2tpcHBpbmdDaGlsZHJlblRlbXBsYXRlKE5vZGVUeXBlKiBjdXJyZW50LCBjb25z
dCBOb2RlKiBzdGF5V2l0aGluKQoreworICAgIGlmIChjdXJyZW50ID09IHN0YXlXaXRoaW4pCisg
ICAgICAgIHJldHVybiAwOworICAgIGlmIChjdXJyZW50LT5uZXh0U2libGluZygpKQorICAgICAg
ICByZXR1cm4gY3VycmVudC0+bmV4dFNpYmxpbmcoKTsKKyAgICByZXR1cm4gbmV4dEFuY2VzdG9y
U2libGluZyhjdXJyZW50LCBzdGF5V2l0aGluKTsKK30KK2lubGluZSBOb2RlKiBuZXh0U2tpcHBp
bmdDaGlsZHJlbihjb25zdCBOb2RlKiBjdXJyZW50LCBjb25zdCBOb2RlKiBzdGF5V2l0aGluKSB7
IHJldHVybiB0cmF2ZXJzZU5leHRTa2lwcGluZ0NoaWxkcmVuVGVtcGxhdGUoY3VycmVudCwgc3Rh
eVdpdGhpbik7IH0KK2lubGluZSBOb2RlKiBuZXh0U2tpcHBpbmdDaGlsZHJlbihjb25zdCBDb250
YWluZXJOb2RlKiBjdXJyZW50LCBjb25zdCBOb2RlKiBzdGF5V2l0aGluKSB7IHJldHVybiB0cmF2
ZXJzZU5leHRTa2lwcGluZ0NoaWxkcmVuVGVtcGxhdGUoY3VycmVudCwgc3RheVdpdGhpbik7IH0K
KworfQorCit9CisKKyNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuY3BwCShyZXZpc2lvbiAxMzcy
MTIpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
NSw2ICszNSw3IEBACiAjaW5jbHVkZSAiSFRNTEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFt
ZXMuaCIKICNpbmNsdWRlICJOb2RlLmgiCisjaW5jbHVkZSAiTm9kZVRyYXZlcnNhbC5oIgogI2lu
Y2x1ZGUgIk5vZGVXaXRoSW5kZXguaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUHJv
Y2Vzc2luZ0luc3RydWN0aW9uLmgiCkBAIC0xMDY1LDcgKzEwNjYsNyBAQCBTdHJpbmcgUmFuZ2U6
OnRvU3RyaW5nKEV4Y2VwdGlvbkNvZGUmIGVjCiAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwog
CiAgICAgTm9kZSogcGFzdExhc3QgPSBwYXN0TGFzdE5vZGUoKTsKLSAgICBmb3IgKE5vZGUqIG4g
PSBmaXJzdE5vZGUoKTsgbiAhPSBwYXN0TGFzdDsgbiA9IG4tPnRyYXZlcnNlTmV4dE5vZGUoKSkg
eworICAgIGZvciAoTm9kZSogbiA9IGZpcnN0Tm9kZSgpOyBuICE9IHBhc3RMYXN0OyBuID0gTm9k
ZVRyYXZlcnNhbDo6bmV4dChuKSkgewogICAgICAgICBpZiAobi0+bm9kZVR5cGUoKSA9PSBOb2Rl
OjpURVhUX05PREUgfHwgbi0+bm9kZVR5cGUoKSA9PSBOb2RlOjpDREFUQV9TRUNUSU9OX05PREUp
IHsKICAgICAgICAgICAgIFN0cmluZyBkYXRhID0gc3RhdGljX2Nhc3Q8Q2hhcmFjdGVyRGF0YSo+
KG4pLT5kYXRhKCk7CiAgICAgICAgICAgICBpbnQgbGVuZ3RoID0gZGF0YS5sZW5ndGgoKTsKQEAg
LTE1MTcsNyArMTUxOCw3IEBAIHZvaWQgUmFuZ2U6OmNoZWNrRGVsZXRlRXh0cmFjdChFeGNlcHRp
b24KICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBOb2RlKiBwYXN0TGFzdCA9IHBhc3RM
YXN0Tm9kZSgpOwotICAgIGZvciAoTm9kZSogbiA9IGZpcnN0Tm9kZSgpOyBuICE9IHBhc3RMYXN0
OyBuID0gbi0+dHJhdmVyc2VOZXh0Tm9kZSgpKSB7CisgICAgZm9yIChOb2RlKiBuID0gZmlyc3RO
b2RlKCk7IG4gIT0gcGFzdExhc3Q7IG4gPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG4pKSB7CiAgICAg
ICAgIGlmIChuLT5pc1JlYWRPbmx5Tm9kZSgpKSB7CiAgICAgICAgICAgICBlYyA9IE5PX01PRElG
SUNBVElPTl9BTExPV0VEX0VSUjsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTE1NTcsNyArMTU1
OCw3IEBAIE5vZGUqIFJhbmdlOjpmaXJzdE5vZGUoKSBjb25zdAogICAgICAgICByZXR1cm4gY2hp
bGQ7CiAgICAgaWYgKCFtX3N0YXJ0Lm9mZnNldCgpKQogICAgICAgICByZXR1cm4gbV9zdGFydC5j
b250YWluZXIoKTsKLSAgICByZXR1cm4gbV9zdGFydC5jb250YWluZXIoKS0+dHJhdmVyc2VOZXh0
U2libGluZygpOworICAgIHJldHVybiBOb2RlVHJhdmVyc2FsOjpuZXh0U2tpcHBpbmdDaGlsZHJl
bihtX3N0YXJ0LmNvbnRhaW5lcigpKTsKIH0KIAogU2hhZG93Um9vdCogUmFuZ2U6OnNoYWRvd1Jv
b3QoKSBjb25zdApAQCAtMTU3MCwxMCArMTU3MSwxMCBAQCBOb2RlKiBSYW5nZTo6cGFzdExhc3RO
b2RlKCkgY29uc3QKICAgICBpZiAoIW1fc3RhcnQuY29udGFpbmVyKCkgfHwgIW1fZW5kLmNvbnRh
aW5lcigpKQogICAgICAgICByZXR1cm4gMDsKICAgICBpZiAobV9lbmQuY29udGFpbmVyKCktPm9m
ZnNldEluQ2hhcmFjdGVycygpKQotICAgICAgICByZXR1cm4gbV9lbmQuY29udGFpbmVyKCktPnRy
YXZlcnNlTmV4dFNpYmxpbmcoKTsKKyAgICAgICAgcmV0dXJuIE5vZGVUcmF2ZXJzYWw6Om5leHRT
a2lwcGluZ0NoaWxkcmVuKG1fZW5kLmNvbnRhaW5lcigpKTsKICAgICBpZiAoTm9kZSogY2hpbGQg
PSBtX2VuZC5jb250YWluZXIoKS0+Y2hpbGROb2RlKG1fZW5kLm9mZnNldCgpKSkKICAgICAgICAg
cmV0dXJuIGNoaWxkOwotICAgIHJldHVybiBtX2VuZC5jb250YWluZXIoKS0+dHJhdmVyc2VOZXh0
U2libGluZygpOworICAgIHJldHVybiBOb2RlVHJhdmVyc2FsOjpuZXh0U2tpcHBpbmdDaGlsZHJl
bihtX2VuZC5jb250YWluZXIoKSk7CiB9CiAKIEludFJlY3QgUmFuZ2U6OmJvdW5kaW5nQm94KCkg
Y29uc3QKQEAgLTE2MDIsNyArMTYwMyw3IEBAIHZvaWQgUmFuZ2U6OnRleHRSZWN0cyhWZWN0b3I8
SW50UmVjdD4mIHIKICAgICBib29sIHNvbWVGaXhlZCA9IGZhbHNlOwogCiAgICAgTm9kZSogc3Rv
cE5vZGUgPSBwYXN0TGFzdE5vZGUoKTsKLSAgICBmb3IgKE5vZGUqIG5vZGUgPSBmaXJzdE5vZGUo
KTsgbm9kZSAhPSBzdG9wTm9kZTsgbm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoKSkgewor
ICAgIGZvciAoTm9kZSogbm9kZSA9IGZpcnN0Tm9kZSgpOyBub2RlICE9IHN0b3BOb2RlOyBub2Rl
ID0gTm9kZVRyYXZlcnNhbDo6bmV4dChub2RlKSkgewogICAgICAgICBSZW5kZXJPYmplY3QqIHIg
PSBub2RlLT5yZW5kZXJlcigpOwogICAgICAgICBpZiAoIXIgfHwgIXItPmlzVGV4dCgpKQogICAg
ICAgICAgICAgY29udGludWU7CkBAIC0xNjM0LDcgKzE2MzUsNyBAQCB2b2lkIFJhbmdlOjp0ZXh0
UXVhZHMoVmVjdG9yPEZsb2F0UXVhZD4mCiAgICAgYm9vbCBzb21lRml4ZWQgPSBmYWxzZTsKIAog
ICAgIE5vZGUqIHN0b3BOb2RlID0gcGFzdExhc3ROb2RlKCk7Ci0gICAgZm9yIChOb2RlKiBub2Rl
ID0gZmlyc3ROb2RlKCk7IG5vZGUgIT0gc3RvcE5vZGU7IG5vZGUgPSBub2RlLT50cmF2ZXJzZU5l
eHROb2RlKCkpIHsKKyAgICBmb3IgKE5vZGUqIG5vZGUgPSBmaXJzdE5vZGUoKTsgbm9kZSAhPSBz
dG9wTm9kZTsgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9kZSkpIHsKICAgICAgICAgUmVu
ZGVyT2JqZWN0KiByID0gbm9kZS0+cmVuZGVyZXIoKTsKICAgICAgICAgaWYgKCFyIHx8ICFyLT5p
c1RleHQoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMTkwOSwxMiArMTkxMCwxMiBAQCB2
b2lkIFJhbmdlOjpnZXRCb3JkZXJBbmRUZXh0UXVhZHMoVmVjdG9yCiAgICAgTm9kZSogc3RvcE5v
ZGUgPSBwYXN0TGFzdE5vZGUoKTsKIAogICAgIEhhc2hTZXQ8Tm9kZSo+IG5vZGVTZXQ7Ci0gICAg
Zm9yIChOb2RlKiBub2RlID0gZmlyc3ROb2RlKCk7IG5vZGUgIT0gc3RvcE5vZGU7IG5vZGUgPSBu
b2RlLT50cmF2ZXJzZU5leHROb2RlKCkpIHsKKyAgICBmb3IgKE5vZGUqIG5vZGUgPSBmaXJzdE5v
ZGUoKTsgbm9kZSAhPSBzdG9wTm9kZTsgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9kZSkp
IHsKICAgICAgICAgaWYgKG5vZGUtPmlzRWxlbWVudE5vZGUoKSkKICAgICAgICAgICAgIG5vZGVT
ZXQuYWRkKG5vZGUpOwogICAgIH0KIAotICAgIGZvciAoTm9kZSogbm9kZSA9IGZpcnN0Tm9kZSgp
OyBub2RlICE9IHN0b3BOb2RlOyBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgpKSB7Cisg
ICAgZm9yIChOb2RlKiBub2RlID0gZmlyc3ROb2RlKCk7IG5vZGUgIT0gc3RvcE5vZGU7IG5vZGUg
PSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUpKSB7CiAgICAgICAgIGlmIChub2RlLT5pc0VsZW1l
bnROb2RlKCkpIHsKICAgICAgICAgICAgIGlmICghbm9kZVNldC5jb250YWlucyhub2RlLT5wYXJl
bnROb2RlKCkpKSB7CiAgICAgICAgICAgICAgICAgaWYgKFJlbmRlckJveE1vZGVsT2JqZWN0KiBy
ZW5kZXJCb3hNb2RlbE9iamVjdCA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKS0+cmVuZGVy
Qm94TW9kZWxPYmplY3QoKSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1RyZWVTY29wZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1RyZWVTY29wZS5jcHAJKHJldmlz
aW9uIDEzNzIxMikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9UcmVlU2NvcGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00Miw2ICs0Miw3IEBACiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVk
ZSAiSWRUYXJnZXRPYnNlcnZlclJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAiSW5zZXJ0aW9uUG9pbnQu
aCIKKyNpbmNsdWRlICJOb2RlVHJhdmVyc2FsLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1
ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKICNpbmNsdWRlICJTaGFkb3dSb290LmgiCkBA
IC0xODYsNyArMTg3LDcgQEAgSFRNTExhYmVsRWxlbWVudCogVHJlZVNjb3BlOjpsYWJlbEVsZW1l
bgogICAgIGlmICghbV9sYWJlbHNCeUZvckF0dHJpYnV0ZSkgewogICAgICAgICAvLyBQb3B1bGF0
ZSB0aGUgbWFwIG9uIGZpcnN0IGFjY2Vzcy4KICAgICAgICAgbV9sYWJlbHNCeUZvckF0dHJpYnV0
ZSA9IGFkb3B0UHRyKG5ldyBEb2N1bWVudE9yZGVyZWRNYXApOwotICAgICAgICBmb3IgKE5vZGUq
IG5vZGUgPSByb290Tm9kZSgpOyBub2RlOyBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgp
KSB7CisgICAgICAgIGZvciAoTm9kZSogbm9kZSA9IHJvb3ROb2RlKCk7IG5vZGU7IG5vZGUgPSBO
b2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUpKSB7CiAgICAgICAgICAgICBpZiAobm9kZS0+aGFzVGFn
TmFtZShsYWJlbFRhZykpIHsKICAgICAgICAgICAgICAgICBIVE1MTGFiZWxFbGVtZW50KiBsYWJl
bCA9IHN0YXRpY19jYXN0PEhUTUxMYWJlbEVsZW1lbnQqPihub2RlKTsKICAgICAgICAgICAgICAg
ICBjb25zdCBBdG9taWNTdHJpbmcmIGZvclZhbHVlID0gbGFiZWwtPmZhc3RHZXRBdHRyaWJ1dGUo
Zm9yQXR0cik7CkBAIC0yMzAsNyArMjMxLDcgQEAgRWxlbWVudCogVHJlZVNjb3BlOjpmaW5kQW5j
aG9yKGNvbnN0IFN0cgogICAgICAgICByZXR1cm4gMDsKICAgICBpZiAoRWxlbWVudCogZWxlbWVu
dCA9IGdldEVsZW1lbnRCeUlkKG5hbWUpKQogICAgICAgICByZXR1cm4gZWxlbWVudDsKLSAgICBm
b3IgKE5vZGUqIG5vZGUgPSByb290Tm9kZSgpOyBub2RlOyBub2RlID0gbm9kZS0+dHJhdmVyc2VO
ZXh0Tm9kZSgpKSB7CisgICAgZm9yIChOb2RlKiBub2RlID0gcm9vdE5vZGUoKTsgbm9kZTsgbm9k
ZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9kZSkpIHsKICAgICAgICAgaWYgKG5vZGUtPmhhc1Rh
Z05hbWUoYVRhZykpIHsKICAgICAgICAgICAgIEhUTUxBbmNob3JFbGVtZW50KiBhbmNob3IgPSBz
dGF0aWNfY2FzdDxIVE1MQW5jaG9yRWxlbWVudCo+KG5vZGUpOwogICAgICAgICAgICAgaWYgKHJv
b3ROb2RlKCktPmRvY3VtZW50KCktPmluUXVpcmtzTW9kZSgpKSB7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9kb20vVHJlZVNjb3BlQWRvcHRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvZG9tL1RyZWVTY29wZUFkb3B0ZXIuY3BwCShyZXZpc2lvbiAxMzcyMTIpCisrKyBTb3VyY2Uv
V2ViQ29yZS9kb20vVHJlZVNjb3BlQWRvcHRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYg
KzI5LDcgQEAKICNpbmNsdWRlICJFbGVtZW50UmFyZURhdGEuaCIKICNpbmNsdWRlICJFbGVtZW50
U2hhZG93LmgiCiAjaW5jbHVkZSAiTm9kZVJhcmVEYXRhLmgiCisjaW5jbHVkZSAiTm9kZVRyYXZl
cnNhbC5oIgogI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiU2hhZG93Um9vdC5o
IgogCkBAIC00OCw3ICs0OSw3IEBAIHZvaWQgVHJlZVNjb3BlQWRvcHRlcjo6bW92ZVRyZWVUb05l
d1Njb3AKICAgICBpZiAob2xkRG9jdW1lbnQgJiYgd2lsbE1vdmVUb05ld0RvY3VtZW50KQogICAg
ICAgICBvbGREb2N1bWVudC0+aW5jRE9NVHJlZVZlcnNpb24oKTsKIAotICAgIGZvciAoTm9kZSog
bm9kZSA9IHJvb3Q7IG5vZGU7IG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKHJvb3QpKSB7
CisgICAgZm9yIChOb2RlKiBub2RlID0gcm9vdDsgbm9kZTsgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6
Om5leHQobm9kZSwgcm9vdCkpIHsKICAgICAgICAgbm9kZS0+c2V0VHJlZVNjb3BlKG1fbmV3U2Nv
cGUpOwogICAgICAgICBpZiAobm9kZS0+aGFzUmFyZURhdGEoKSkgewogICAgICAgICAgICAgTm9k
ZVJhcmVEYXRhKiByYXJlRGF0YSA9IG5vZGUtPnJhcmVEYXRhKCk7CkBAIC02OSw3ICs3MCw3IEBA
IHZvaWQgVHJlZVNjb3BlQWRvcHRlcjo6bW92ZVRyZWVUb05ld1Njb3AKIAogdm9pZCBUcmVlU2Nv
cGVBZG9wdGVyOjptb3ZlVHJlZVRvTmV3RG9jdW1lbnQoTm9kZSogcm9vdCwgRG9jdW1lbnQqIG9s
ZERvY3VtZW50LCBEb2N1bWVudCogbmV3RG9jdW1lbnQpIGNvbnN0CiB7Ci0gICAgZm9yIChOb2Rl
KiBub2RlID0gcm9vdDsgbm9kZTsgbm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUocm9vdCkp
IHsKKyAgICBmb3IgKE5vZGUqIG5vZGUgPSByb290OyBub2RlOyBub2RlID0gTm9kZVRyYXZlcnNh
bDo6bmV4dChub2RlLCByb290KSkgewogICAgICAgICBtb3ZlTm9kZVRvTmV3RG9jdW1lbnQobm9k
ZSwgb2xkRG9jdW1lbnQsIG5ld0RvY3VtZW50KTsKICAgICAgICAgZm9yIChTaGFkb3dSb290KiBz
aGFkb3cgPSBub2RlLT55b3VuZ2VzdFNoYWRvd1Jvb3QoKTsgc2hhZG93OyBzaGFkb3cgPSBzaGFk
b3ctPm9sZGVyU2hhZG93Um9vdCgpKQogICAgICAgICAgICAgbW92ZVRyZWVUb05ld0RvY3VtZW50
KHNoYWRvdywgb2xkRG9jdW1lbnQsIG5ld0RvY3VtZW50KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2RvbS9UcmVlV2Fsa2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vVHJl
ZVdhbGtlci5jcHAJKHJldmlzaW9uIDEzNzIxMikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9UcmVl
V2Fsa2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIkV4
Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJDb250YWluZXJOb2RlLmgiCiAjaW5jbHVkZSAiTm9k
ZUZpbHRlci5oIgorI2luY2x1ZGUgIk5vZGVUcmF2ZXJzYWwuaCIKICNpbmNsdWRlICJTY3JpcHRT
dGF0ZS5oIgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAKQEAgLTI2Myw3ICsyNjQsNyBA
QCBDaGlsZHJlbjoKICAgICAgICAgaWYgKGFjY2VwdE5vZGVSZXN1bHQgPT0gTm9kZUZpbHRlcjo6
RklMVEVSX1JFSkVDVCkKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICB3aGlsZSAoTm9k
ZSogbmV4dFNpYmxpbmcgPSBub2RlLT50cmF2ZXJzZU5leHRTaWJsaW5nKHJvb3QoKSkpIHsKKyAg
ICB3aGlsZSAoTm9kZSogbmV4dFNpYmxpbmcgPSBOb2RlVHJhdmVyc2FsOjpuZXh0U2tpcHBpbmdD
aGlsZHJlbihub2RlLmdldCgpLCByb290KCkpKSB7CiAgICAgICAgIG5vZGUgPSBuZXh0U2libGlu
ZzsKICAgICAgICAgc2hvcnQgYWNjZXB0Tm9kZVJlc3VsdCA9IGFjY2VwdE5vZGUoc3RhdGUsIG5v
ZGUuZ2V0KCkpOwogICAgICAgICBpZiAoc3RhdGUgJiYgc3RhdGUtPmhhZEV4Y2VwdGlvbigpKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAJKHJl
dmlzaW9uIDEzNzIxMikKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1h
bmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSAiSFRNTElu
dGVyY2hhbmdlLmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiTm9kZUxpc3Qu
aCIKKyNpbmNsdWRlICJOb2RlVHJhdmVyc2FsLmgiCiAjaW5jbHVkZSAiUmFuZ2UuaCIKICNpbmNs
dWRlICJSZW5kZXJPYmplY3QuaCIKICNpbmNsdWRlICJSZW5kZXJUZXh0LmgiCkBAIC0zNTEsMjYg
KzM1MiwyNiBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjphcHBseVJlbGF0aXZlRm9uCiAgICAg
Ly8gYW4gYW5jZXN0b3Igb2YgdGhlIHN0YXJ0IG5vZGUpLCB3ZSBnYXRoZXIgbm9kZXMgdXAgdG8g
dGhlIG5leHQgc2libGluZyBvZiB0aGUgZW5kIG5vZGUKICAgICBOb2RlICpiZXlvbmRFbmQ7CiAg
ICAgaWYgKHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCktPmlzRGVzY2VuZGFudE9mKGVuZC5kZXByZWNh
dGVkTm9kZSgpKSkKLSAgICAgICAgYmV5b25kRW5kID0gZW5kLmRlcHJlY2F0ZWROb2RlKCktPnRy
YXZlcnNlTmV4dFNpYmxpbmcoKTsKKyAgICAgICAgYmV5b25kRW5kID0gTm9kZVRyYXZlcnNhbDo6
bmV4dFNraXBwaW5nQ2hpbGRyZW4oZW5kLmRlcHJlY2F0ZWROb2RlKCkpOwogICAgIGVsc2UKLSAg
ICAgICAgYmV5b25kRW5kID0gZW5kLmRlcHJlY2F0ZWROb2RlKCktPnRyYXZlcnNlTmV4dE5vZGUo
KTsKKyAgICAgICAgYmV5b25kRW5kID0gTm9kZVRyYXZlcnNhbDo6bmV4dChlbmQuZGVwcmVjYXRl
ZE5vZGUoKSk7CiAgICAgCiAgICAgc3RhcnQgPSBzdGFydC51cHN0cmVhbSgpOyAvLyBNb3ZlIHVw
c3RyZWFtIHRvIGVuc3VyZSB3ZSBkbyBub3QgYWRkIHJlZHVuZGFudCBzcGFucy4KICAgICBOb2Rl
KiBzdGFydE5vZGUgPSBzdGFydC5kZXByZWNhdGVkTm9kZSgpOwogICAgIGlmIChzdGFydE5vZGUt
PmlzVGV4dE5vZGUoKSAmJiBzdGFydC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpID49IGNhcmV0
TWF4T2Zmc2V0KHN0YXJ0Tm9kZSkpIC8vIE1vdmUgb3V0IG9mIHRleHQgbm9kZSBpZiByYW5nZSBk
b2VzIG5vdCBpbmNsdWRlIGl0cyBjaGFyYWN0ZXJzLgotICAgICAgICBzdGFydE5vZGUgPSBzdGFy
dE5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoKTsKKyAgICAgICAgc3RhcnROb2RlID0gTm9kZVRyYXZl
cnNhbDo6bmV4dChzdGFydE5vZGUpOwogCiAgICAgLy8gU3RvcmUgYXdheSBmb250IHNpemUgYmVm
b3JlIG1ha2luZyBhbnkgY2hhbmdlcyB0byB0aGUgZG9jdW1lbnQuCiAgICAgLy8gVGhpcyBlbnN1
cmVzIHRoYXQgY2hhbmdlcyB0byBvbmUgbm9kZSB3b24ndCBlZmZlY3QgYW5vdGhlci4KICAgICBI
YXNoTWFwPE5vZGUqLCBmbG9hdD4gc3RhcnRpbmdGb250U2l6ZXM7Ci0gICAgZm9yIChOb2RlICpu
b2RlID0gc3RhcnROb2RlOyBub2RlICE9IGJleW9uZEVuZDsgbm9kZSA9IG5vZGUtPnRyYXZlcnNl
TmV4dE5vZGUoKSkKKyAgICBmb3IgKE5vZGUgKm5vZGUgPSBzdGFydE5vZGU7IG5vZGUgIT0gYmV5
b25kRW5kOyBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dChub2RlKSkKICAgICAgICAgc3RhcnRp
bmdGb250U2l6ZXMuc2V0KG5vZGUsIGNvbXB1dGVkRm9udFNpemUobm9kZSkpOwogCiAgICAgLy8g
VGhlc2Ugc3BhbnMgd2VyZSBhZGRlZCBieSB1cy4gSWYgZW1wdHkgYWZ0ZXIgZm9udCBzaXplIGNo
YW5nZXMsIHRoZXkgY2FuIGJlIHJlbW92ZWQuCiAgICAgVmVjdG9yPFJlZlB0cjxIVE1MRWxlbWVu
dD4gPiB1bnN0eWxlZFNwYW5zOwogICAgIAogICAgIE5vZGUqIGxhc3RTdHlsZWROb2RlID0gMDsK
LSAgICBmb3IgKE5vZGUqIG5vZGUgPSBzdGFydE5vZGU7IG5vZGUgIT0gYmV5b25kRW5kOyBub2Rl
ID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgpKSB7CisgICAgZm9yIChOb2RlKiBub2RlID0gc3Rh
cnROb2RlOyBub2RlICE9IGJleW9uZEVuZDsgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9k
ZSkpIHsKICAgICAgICAgUmVmUHRyPEhUTUxFbGVtZW50PiBlbGVtZW50OwogICAgICAgICBpZiAo
bm9kZS0+aXNIVE1MRWxlbWVudCgpKSB7CiAgICAgICAgICAgICAvLyBPbmx5IHdvcmsgb24gZnVs
bHkgc2VsZWN0ZWQgbm9kZXMuCkBAIC02NzQsMTkgKzY3NSwxOSBAQCB2b2lkIEFwcGx5U3R5bGVD
b21tYW5kOjpmaXhSYW5nZUFuZEFwcGx5CiAgICAgTm9kZSogc3RhcnROb2RlID0gc3RhcnQuZGVw
cmVjYXRlZE5vZGUoKTsKIAogICAgIGlmIChzdGFydC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgp
ID49IGNhcmV0TWF4T2Zmc2V0KHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCkpKSB7Ci0gICAgICAgIHN0
YXJ0Tm9kZSA9IHN0YXJ0Tm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgpOworICAgICAgICBzdGFydE5v
ZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KHN0YXJ0Tm9kZSk7CiAgICAgICAgIGlmICghc3RhcnRO
b2RlIHx8IGNvbXBhcmVQb3NpdGlvbnMoZW5kLCBmaXJzdFBvc2l0aW9uSW5PckJlZm9yZU5vZGUo
c3RhcnROb2RlKSkgPCAwKQogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIE5vZGUq
IHBhc3RFbmROb2RlID0gZW5kLmRlcHJlY2F0ZWROb2RlKCk7CiAgICAgaWYgKGVuZC5kZXByZWNh
dGVkRWRpdGluZ09mZnNldCgpID49IGNhcmV0TWF4T2Zmc2V0KGVuZC5kZXByZWNhdGVkTm9kZSgp
KSkKLSAgICAgICAgcGFzdEVuZE5vZGUgPSBlbmQuZGVwcmVjYXRlZE5vZGUoKS0+dHJhdmVyc2VO
ZXh0U2libGluZygpOworICAgICAgICBwYXN0RW5kTm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHRT
a2lwcGluZ0NoaWxkcmVuKGVuZC5kZXByZWNhdGVkTm9kZSgpKTsKIAogICAgIC8vIEZJWE1FOiBD
YWxsZXJzIHNob3VsZCBwZXJmb3JtIHRoaXMgb3BlcmF0aW9uIG9uIGEgUmFuZ2UgdGhhdCBpbmNs
dWRlcyB0aGUgYnIKICAgICAvLyBpZiB0aGV5IHdhbnQgc3R5bGUgYXBwbGllZCB0byB0aGUgZW1w
dHkgbGluZS4KICAgICBpZiAoc3RhcnQgPT0gZW5kICYmIHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCkt
Pmhhc1RhZ05hbWUoYnJUYWcpKQotICAgICAgICBwYXN0RW5kTm9kZSA9IHN0YXJ0LmRlcHJlY2F0
ZWROb2RlKCktPnRyYXZlcnNlTmV4dE5vZGUoKTsKKyAgICAgICAgcGFzdEVuZE5vZGUgPSBOb2Rl
VHJhdmVyc2FsOjpuZXh0KHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCkpOwogCiAgICAgLy8gU3RhcnQg
ZnJvbSB0aGUgaGlnaGVzdCBmdWxseSBzZWxlY3RlZCBhbmNlc3RvciBzbyB0aGF0IHdlIGNhbiBt
b2RpZnkgdGhlIGZ1bGx5IHNlbGVjdGVkIG5vZGUuCiAgICAgLy8gZS5nLiBXaGVuIGFwcGx5aW5n
IGZvbnQtc2l6ZTogbGFyZ2Ugb24gPGZvbnQgY29sb3I9ImJsdWUiPmhlbGxvPC9mb250Piwgd2Ug
bmVlZCB0byBpbmNsdWRlIHRoZSBmb250IGVsZW1lbnQgaW4gb3VyIHJ1bgpAQCAtNzA2LDggKzcw
Nyw4IEBAIHN0YXRpYyBib29sIGNvbnRhaW5zTm9uRWRpdGFibGVSZWdpb24oTm8KICAgICBpZiAo
IW5vZGUtPnJlbmRlcmVySXNFZGl0YWJsZSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAg
IE5vZGUqIHNpYmxpbmcgPSBub2RlLT50cmF2ZXJzZU5leHRTaWJsaW5nKCk7Ci0gICAgZm9yIChO
b2RlKiBkZXNjZW5kZW50ID0gbm9kZS0+Zmlyc3RDaGlsZCgpOyBkZXNjZW5kZW50ICYmIGRlc2Nl
bmRlbnQgIT0gc2libGluZzsgZGVzY2VuZGVudCA9IGRlc2NlbmRlbnQtPnRyYXZlcnNlTmV4dE5v
ZGUoKSkgeworICAgIE5vZGUqIHNpYmxpbmcgPSBOb2RlVHJhdmVyc2FsOjpuZXh0U2tpcHBpbmdD
aGlsZHJlbihub2RlKTsKKyAgICBmb3IgKE5vZGUqIGRlc2NlbmRlbnQgPSBub2RlLT5maXJzdENo
aWxkKCk7IGRlc2NlbmRlbnQgJiYgZGVzY2VuZGVudCAhPSBzaWJsaW5nOyBkZXNjZW5kZW50ID0g
Tm9kZVRyYXZlcnNhbDo6bmV4dChkZXNjZW5kZW50KSkgewogICAgICAgICBpZiAoIWRlc2NlbmRl
bnQtPnJlbmRlcmVySXNFZGl0YWJsZSgpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
fQpAQCAtNzIyLDcgKzcyMyw3IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5SW5saW5l
U3R5bGUKIAogICAgIFJlZlB0cjxOb2RlPiBub2RlID0gc3RhcnROb2RlOwogICAgIGZvciAoUmVm
UHRyPE5vZGU+IG5leHQ7IG5vZGUgJiYgbm9kZSAhPSBwYXN0RW5kTm9kZTsgbm9kZSA9IG5leHQp
IHsKLSAgICAgICAgbmV4dCA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoKTsKKyAgICAgICAgbmV4
dCA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9kZS5nZXQoKSk7CiAKICAgICAgICAgaWYgKCFub2Rl
LT5yZW5kZXJlcigpIHx8ICFub2RlLT5yZW5kZXJlcklzRWRpdGFibGUoKSkKICAgICAgICAgICAg
IGNvbnRpbnVlOwpAQCAtNzM4LDcgKzczOSw3IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmFw
cGx5SW5saW5lU3R5bGUKICAgICAgICAgICAgIFJlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBpbmxp
bmVTdHlsZSA9IGVsZW1lbnQtPmVuc3VyZU11dGFibGVJbmxpbmVTdHlsZSgpLT5jb3B5KCk7CiAg
ICAgICAgICAgICBpbmxpbmVTdHlsZS0+bWVyZ2VBbmRPdmVycmlkZU9uQ29uZmxpY3Qoc3R5bGUt
PnN0eWxlKCkpOwogICAgICAgICAgICAgc2V0Tm9kZUF0dHJpYnV0ZShlbGVtZW50LCBzdHlsZUF0
dHIsIGlubGluZVN0eWxlLT5hc1RleHQoKSk7Ci0gICAgICAgICAgICBuZXh0ID0gbm9kZS0+dHJh
dmVyc2VOZXh0U2libGluZygpOworICAgICAgICAgICAgbmV4dCA9IE5vZGVUcmF2ZXJzYWw6Om5l
eHRTa2lwcGluZ0NoaWxkcmVuKG5vZGUuZ2V0KCkpOwogICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgIH0KICAgICAgICAgCkBAIC03NDksNyArNzUwLDcgQEAgdm9pZCBBcHBseVN0eWxlQ29t
bWFuZDo6YXBwbHlJbmxpbmVTdHlsZQogICAgICAgICAgICAgaWYgKG5vZGUtPmNvbnRhaW5zKHBh
c3RFbmROb2RlLmdldCgpKSB8fCBjb250YWluc05vbkVkaXRhYmxlUmVnaW9uKG5vZGUuZ2V0KCkp
IHx8ICFub2RlLT5wYXJlbnROb2RlKCktPnJlbmRlcmVySXNFZGl0YWJsZSgpKQogICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgaWYgKGVkaXRpbmdJZ25vcmVzQ29udGVudChu
b2RlLmdldCgpKSkgewotICAgICAgICAgICAgICAgIG5leHQgPSBub2RlLT50cmF2ZXJzZU5leHRT
aWJsaW5nKCk7CisgICAgICAgICAgICAgICAgbmV4dCA9IE5vZGVUcmF2ZXJzYWw6Om5leHRTa2lw
cGluZ0NoaWxkcmVuKG5vZGUuZ2V0KCkpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICAgICAgfQogICAgICAgICB9CkBAIC03NjMsNyArNzY0LDcgQEAgdm9pZCBBcHBseVN0eWxl
Q29tbWFuZDo6YXBwbHlJbmxpbmVTdHlsZQogICAgICAgICAgICAgcnVuRW5kID0gc2libGluZzsK
ICAgICAgICAgICAgIHNpYmxpbmcgPSBydW5FbmQtPm5leHRTaWJsaW5nKCk7CiAgICAgICAgIH0K
LSAgICAgICAgbmV4dCA9IHJ1bkVuZC0+dHJhdmVyc2VOZXh0U2libGluZygpOworICAgICAgICBu
ZXh0ID0gTm9kZVRyYXZlcnNhbDo6bmV4dFNraXBwaW5nQ2hpbGRyZW4ocnVuRW5kLmdldCgpKTsK
IAogICAgICAgICBpZiAoIXJlbW92ZVN0eWxlRnJvbVJ1bkJlZm9yZUFwcGx5aW5nU3R5bGUoc3R5
bGUsIHJ1blN0YXJ0LCBydW5FbmQpKQogICAgICAgICAgICAgY29udGludWU7CkBAIC03ODAsOSAr
NzgxLDkgQEAgYm9vbCBBcHBseVN0eWxlQ29tbWFuZDo6aXNTdHlsZWRJbmxpbmVFbAogYm9vbCBB
cHBseVN0eWxlQ29tbWFuZDo6cmVtb3ZlU3R5bGVGcm9tUnVuQmVmb3JlQXBwbHlpbmdTdHlsZShF
ZGl0aW5nU3R5bGUqIHN0eWxlLCBSZWZQdHI8Tm9kZT4mIHJ1blN0YXJ0LCBSZWZQdHI8Tm9kZT4m
IHJ1bkVuZCkKIHsKICAgICBBU1NFUlQocnVuU3RhcnQgJiYgcnVuRW5kICYmIHJ1blN0YXJ0LT5w
YXJlbnROb2RlKCkgPT0gcnVuRW5kLT5wYXJlbnROb2RlKCkpOwotICAgIFJlZlB0cjxOb2RlPiBw
YXN0RW5kTm9kZSA9IHJ1bkVuZC0+dHJhdmVyc2VOZXh0U2libGluZygpOworICAgIFJlZlB0cjxO
b2RlPiBwYXN0RW5kTm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHRTa2lwcGluZ0NoaWxkcmVuKHJ1
bkVuZC5nZXQoKSk7CiAgICAgYm9vbCBuZWVkVG9BcHBseVN0eWxlID0gZmFsc2U7Ci0gICAgZm9y
IChOb2RlKiBub2RlID0gcnVuU3RhcnQuZ2V0KCk7IG5vZGUgJiYgbm9kZSAhPSBwYXN0RW5kTm9k
ZS5nZXQoKTsgbm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoKSkgeworICAgIGZvciAoTm9k
ZSogbm9kZSA9IHJ1blN0YXJ0LmdldCgpOyBub2RlICYmIG5vZGUgIT0gcGFzdEVuZE5vZGUuZ2V0
KCk7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUpKSB7CiAgICAgICAgIGlmIChub2Rl
LT5jaGlsZE5vZGVDb3VudCgpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIC8vIFdl
IGRvbid0IGNvbnNpZGVyIG1faXNJbmxpbmVFbGVtZW50VG9SZW1vdmVGdW5jdGlvbiBoZXJlIGJl
Y2F1c2Ugd2UgbmV2ZXIgYXBwbHkgc3R5bGUgd2hlbiBtX2lzSW5saW5lRWxlbWVudFRvUmVtb3Zl
RnVuY3Rpb24gaXMgc3BlY2lmaWVkCkBAIC03OTksOSArODAwLDkgQEAgYm9vbCBBcHBseVN0eWxl
Q29tbWFuZDo6cmVtb3ZlU3R5bGVGcm9tUgogICAgIGZvciAoUmVmUHRyPE5vZGU+IG5vZGUgPSBu
ZXh0OyBub2RlICYmIG5vZGUtPmluRG9jdW1lbnQoKSAmJiBub2RlICE9IHBhc3RFbmROb2RlOyBu
b2RlID0gbmV4dCkgewogICAgICAgICBpZiAoZWRpdGluZ0lnbm9yZXNDb250ZW50KG5vZGUuZ2V0
KCkpKSB7CiAgICAgICAgICAgICBBU1NFUlQoIW5vZGUtPmNvbnRhaW5zKHBhc3RFbmROb2RlLmdl
dCgpKSk7Ci0gICAgICAgICAgICBuZXh0ID0gbm9kZS0+dHJhdmVyc2VOZXh0U2libGluZygpOwor
ICAgICAgICAgICAgbmV4dCA9IE5vZGVUcmF2ZXJzYWw6Om5leHRTa2lwcGluZ0NoaWxkcmVuKG5v
ZGUuZ2V0KCkpOwogICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIG5leHQgPSBub2RlLT50cmF2
ZXJzZU5leHROb2RlKCk7CisgICAgICAgICAgICBuZXh0ID0gTm9kZVRyYXZlcnNhbDo6bmV4dChu
b2RlLmdldCgpKTsKICAgICAgICAgaWYgKCFub2RlLT5pc0hUTUxFbGVtZW50KCkpCiAgICAgICAg
ICAgICBjb250aW51ZTsKIApAQCAtMTA1NCwxMyArMTA1NSwxMyBAQCB2b2lkIEFwcGx5U3R5bGVD
b21tYW5kOjpyZW1vdmVJbmxpbmVTdHlsCiAgICAgICAgIFJlZlB0cjxOb2RlPiBuZXh0OwogICAg
ICAgICBpZiAoZWRpdGluZ0lnbm9yZXNDb250ZW50KG5vZGUpKSB7CiAgICAgICAgICAgICBBU1NF
UlQobm9kZSA9PSBlbmQuZGVwcmVjYXRlZE5vZGUoKSB8fCAhbm9kZS0+Y29udGFpbnMoZW5kLmRl
cHJlY2F0ZWROb2RlKCkpKTsKLSAgICAgICAgICAgIG5leHQgPSBub2RlLT50cmF2ZXJzZU5leHRT
aWJsaW5nKCk7CisgICAgICAgICAgICBuZXh0ID0gTm9kZVRyYXZlcnNhbDo6bmV4dFNraXBwaW5n
Q2hpbGRyZW4obm9kZSk7CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgbmV4dCA9IG5vZGUt
PnRyYXZlcnNlTmV4dE5vZGUoKTsKKyAgICAgICAgICAgIG5leHQgPSBOb2RlVHJhdmVyc2FsOjpu
ZXh0KG5vZGUpOwogICAgICAgICBpZiAobm9kZS0+aXNIVE1MRWxlbWVudCgpICYmIG5vZGVGdWxs
eVNlbGVjdGVkKG5vZGUsIHN0YXJ0LCBlbmQpKSB7CiAgICAgICAgICAgICBSZWZQdHI8SFRNTEVs
ZW1lbnQ+IGVsZW0gPSB0b0hUTUxFbGVtZW50KG5vZGUpOwotICAgICAgICAgICAgUmVmUHRyPE5v
ZGU+IHByZXYgPSBlbGVtLT50cmF2ZXJzZVByZXZpb3VzTm9kZVBvc3RPcmRlcigpOwotICAgICAg
ICAgICAgUmVmUHRyPE5vZGU+IG5leHQgPSBlbGVtLT50cmF2ZXJzZU5leHROb2RlKCk7CisgICAg
ICAgICAgICBSZWZQdHI8Tm9kZT4gcHJldiA9IE5vZGVUcmF2ZXJzYWw6OnByZXZpb3VzUG9zdE9y
ZGVyKGVsZW0uZ2V0KCkpOworICAgICAgICAgICAgUmVmUHRyPE5vZGU+IG5leHQgPSBOb2RlVHJh
dmVyc2FsOjpuZXh0KGVsZW0uZ2V0KCkpOwogICAgICAgICAgICAgUmVmUHRyPEVkaXRpbmdTdHls
ZT4gc3R5bGVUb1B1c2hEb3duOwogICAgICAgICAgICAgUmVmUHRyPE5vZGU+IGNoaWxkTm9kZTsK
ICAgICAgICAgICAgIGlmIChpc1N0eWxlZElubGluZUVsZW1lbnRUb1JlbW92ZShlbGVtLmdldCgp
KSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9CcmVha0Jsb2NrcXVvdGVDb21tYW5k
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0JyZWFrQmxvY2txdW90
ZUNvbW1hbmQuY3BwCShyZXZpc2lvbiAxMzcyMTIpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0JyZWFrQmxvY2txdW90ZUNvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3
IEBACiAKICNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgor
I2luY2x1ZGUgIk5vZGVUcmF2ZXJzYWwuaCIKICNpbmNsdWRlICJSZW5kZXJMaXN0SXRlbS5oIgog
I2luY2x1ZGUgIlRleHQuaCIKICNpbmNsdWRlICJWaXNpYmxlUG9zaXRpb24uaCIKQEAgLTEwOSwx
MyArMTEwLDEzIEBAIHZvaWQgQnJlYWtCbG9ja3F1b3RlQ29tbWFuZDo6ZG9BcHBseSgpCiAgICAg
aWYgKHN0YXJ0Tm9kZS0+aXNUZXh0Tm9kZSgpKSB7CiAgICAgICAgIFRleHQqIHRleHROb2RlID0g
dG9UZXh0KHN0YXJ0Tm9kZSk7CiAgICAgICAgIGlmICgodW5zaWduZWQpcG9zLmRlcHJlY2F0ZWRF
ZGl0aW5nT2Zmc2V0KCkgPj0gdGV4dE5vZGUtPmxlbmd0aCgpKSB7Ci0gICAgICAgICAgICBzdGFy
dE5vZGUgPSBzdGFydE5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoKTsKKyAgICAgICAgICAgIHN0YXJ0
Tm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQoc3RhcnROb2RlKTsKICAgICAgICAgICAgIEFTU0VS
VChzdGFydE5vZGUpOwogICAgICAgICB9IGVsc2UgaWYgKHBvcy5kZXByZWNhdGVkRWRpdGluZ09m
ZnNldCgpID4gMCkKICAgICAgICAgICAgIHNwbGl0VGV4dE5vZGUodGV4dE5vZGUsIHBvcy5kZXBy
ZWNhdGVkRWRpdGluZ09mZnNldCgpKTsKICAgICB9IGVsc2UgaWYgKHBvcy5kZXByZWNhdGVkRWRp
dGluZ09mZnNldCgpID4gMCkgewogICAgICAgICBOb2RlKiBjaGlsZEF0T2Zmc2V0ID0gc3RhcnRO
b2RlLT5jaGlsZE5vZGUocG9zLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkpOwotICAgICAgICBz
dGFydE5vZGUgPSBjaGlsZEF0T2Zmc2V0ID8gY2hpbGRBdE9mZnNldCA6IHN0YXJ0Tm9kZS0+dHJh
dmVyc2VOZXh0Tm9kZSgpOworICAgICAgICBzdGFydE5vZGUgPSBjaGlsZEF0T2Zmc2V0ID8gY2hp
bGRBdE9mZnNldCA6IE5vZGVUcmF2ZXJzYWw6Om5leHQoc3RhcnROb2RlKTsKICAgICAgICAgQVNT
RVJUKHN0YXJ0Tm9kZSk7CiAgICAgfQogICAgIApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAJKHJldmlzaW9uIDEzNzIxMikKKysrIFNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00NSw2ICs0NSw3IEBACiAjaW5jbHVkZSAiSW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9y
Q29tbWFuZC5oIgogI2luY2x1ZGUgIkluc2VydFRleHRDb21tYW5kLmgiCiAjaW5jbHVkZSAiTWVy
Z2VJZGVudGljYWxFbGVtZW50c0NvbW1hbmQuaCIKKyNpbmNsdWRlICJOb2RlVHJhdmVyc2FsLmgi
CiAjaW5jbHVkZSAiUmFuZ2UuaCIKICNpbmNsdWRlICJSZW1vdmVDU1NQcm9wZXJ0eUNvbW1hbmQu
aCIKICNpbmNsdWRlICJSZW1vdmVOb2RlQ29tbWFuZC5oIgpAQCAtODA4LDcgKzgwOSw3IEBAIHZv
aWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OmRlbGV0ZUluc2lnbmkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgVmVjdG9yPFJlZlB0cjxUZXh0PiA+IG5vZGVzOwotICAgIGZvciAoTm9kZSogbm9kZSA9
IHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCk7IG5vZGU7IG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHRO
b2RlKCkpIHsKKyAgICBmb3IgKE5vZGUqIG5vZGUgPSBzdGFydC5kZXByZWNhdGVkTm9kZSgpOyBu
b2RlOyBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dChub2RlKSkgewogICAgICAgICBpZiAobm9k
ZS0+aXNUZXh0Tm9kZSgpKQogICAgICAgICAgICAgbm9kZXMuYXBwZW5kKHRvVGV4dChub2RlKSk7
CiAgICAgICAgIGlmIChub2RlID09IGVuZC5kZXByZWNhdGVkTm9kZSgpKQpAQCAtMTAyMiw5ICsx
MDIzLDkgQEAgdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6Y2xvbmVQYXJhZ3JhcAogICAgICAg
ICB9CiAKICAgICAgICAgTm9kZSogc3RhcnROb2RlID0gc3RhcnQuZGVwcmVjYXRlZE5vZGUoKTsK
LSAgICAgICAgZm9yIChOb2RlKiBub2RlID0gc3RhcnROb2RlLT50cmF2ZXJzZU5leHRTaWJsaW5n
KG91dGVyTm9kZS5nZXQoKSk7IG5vZGU7IG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHRTaWJsaW5n
KG91dGVyTm9kZS5nZXQoKSkpIHsKKyAgICAgICAgZm9yIChOb2RlKiBub2RlID0gTm9kZVRyYXZl
cnNhbDo6bmV4dFNraXBwaW5nQ2hpbGRyZW4oc3RhcnROb2RlLCBvdXRlck5vZGUuZ2V0KCkpOyBu
b2RlOyBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dFNraXBwaW5nQ2hpbGRyZW4obm9kZSwgb3V0
ZXJOb2RlLmdldCgpKSkgewogICAgICAgICAgICAgLy8gTW92ZSBsYXN0Tm9kZSB1cCBpbiB0aGUg
dHJlZSBhcyBtdWNoIGFzIG5vZGUgd2FzIG1vdmVkIHVwIGluIHRoZQotICAgICAgICAgICAgLy8g
dHJlZSBieSB0cmF2ZXJzZU5leHRTaWJsaW5nLCBzbyB0aGF0IHRoZSByZWxhdGl2ZSBkZXB0aCBi
ZXR3ZWVuCisgICAgICAgICAgICAvLyB0cmVlIGJ5IE5vZGVUcmF2ZXJzYWw6Om5leHRTaWJsaW5n
LCBzbyB0aGF0IHRoZSByZWxhdGl2ZSBkZXB0aCBiZXR3ZWVuCiAgICAgICAgICAgICAvLyBub2Rl
IGFuZCB0aGUgb3JpZ2luYWwgc3RhcnQgbm9kZSBpcyBtYWludGFpbmVkIGluIHRoZSBjbG9uZS4K
ICAgICAgICAgICAgIHdoaWxlIChzdGFydE5vZGUtPnBhcmVudE5vZGUoKSAhPSBub2RlLT5wYXJl
bnROb2RlKCkpIHsKICAgICAgICAgICAgICAgICBzdGFydE5vZGUgPSBzdGFydE5vZGUtPnBhcmVu
dE5vZGUoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29t
bWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxl
Y3Rpb25Db21tYW5kLmNwcAkocmV2aXNpb24gMTM3MjEyKQorKysgU291cmNlL1dlYkNvcmUvZWRp
dGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiAr
MzcsNyBAQAogI2luY2x1ZGUgImh0bWxlZGl0aW5nLmgiCiAjaW5jbHVkZSAiSFRNTElucHV0RWxl
bWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIk5vZGVUcmF2ZXJzYWwu
aCIKICNpbmNsdWRlICJSZW5kZXJUYWJsZUNlbGwuaCIKICNpbmNsdWRlICJUZXh0LmgiCiAjaW5j
bHVkZSAidmlzaWJsZV91bml0cy5oIgpAQCAtMzI5LDcgKzMzMCw3IEBAIHN0YXRpYyBQb3NpdGlv
biBmaXJzdEVkaXRhYmxlUG9zaXRpb25Jbk4KICAgICBBU1NFUlQobm9kZSk7CiAgICAgTm9kZSog
bmV4dCA9IG5vZGU7CiAgICAgd2hpbGUgKG5leHQgJiYgIW5leHQtPnJlbmRlcmVySXNFZGl0YWJs
ZSgpKQotICAgICAgICBuZXh0ID0gbmV4dC0+dHJhdmVyc2VOZXh0Tm9kZShub2RlKTsKKyAgICAg
ICAgbmV4dCA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobmV4dCwgbm9kZSk7CiAgICAgcmV0dXJuIG5l
eHQgPyBmaXJzdFBvc2l0aW9uSW5PckJlZm9yZU5vZGUobmV4dCkgOiBQb3NpdGlvbigpOwogfQog
CkBAIC00MjEsOSArNDIyLDkgQEAgdm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjptYWtlU3R5
bGluZwogICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBtX3NlbGVjdGlvblRvRGVsZXRlLnRvTm9y
bWFsaXplZFJhbmdlKCk7CiAgICAgUmVmUHRyPE5vZGU+IG5vZGUgPSByYW5nZS0+Zmlyc3ROb2Rl
KCk7CiAgICAgd2hpbGUgKG5vZGUgJiYgbm9kZSAhPSByYW5nZS0+cGFzdExhc3ROb2RlKCkpIHsK
LSAgICAgICAgUmVmUHRyPE5vZGU+IG5leHROb2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgp
OworICAgICAgICBSZWZQdHI8Tm9kZT4gbmV4dE5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5v
ZGUuZ2V0KCkpOwogICAgICAgICBpZiAoKG5vZGUtPmhhc1RhZ05hbWUoc3R5bGVUYWcpICYmICEo
dG9FbGVtZW50KG5vZGUuZ2V0KCkpLT5oYXNBdHRyaWJ1dGUoc2NvcGVkQXR0cikpKSB8fCBub2Rl
LT5oYXNUYWdOYW1lKGxpbmtUYWcpKSB7Ci0gICAgICAgICAgICBuZXh0Tm9kZSA9IG5vZGUtPnRy
YXZlcnNlTmV4dFNpYmxpbmcoKTsKKyAgICAgICAgICAgIG5leHROb2RlID0gTm9kZVRyYXZlcnNh
bDo6bmV4dFNraXBwaW5nQ2hpbGRyZW4obm9kZS5nZXQoKSk7CiAgICAgICAgICAgICBSZWZQdHI8
Q29udGFpbmVyTm9kZT4gcm9vdEVkaXRhYmxlRWxlbWVudCA9IG5vZGUtPnJvb3RFZGl0YWJsZUVs
ZW1lbnQoKTsKICAgICAgICAgICAgIHJlbW92ZU5vZGUobm9kZSk7CiAgICAgICAgICAgICBhcHBl
bmROb2RlKG5vZGUsIHJvb3RFZGl0YWJsZUVsZW1lbnQpOwpAQCAtNDQ1LDcgKzQ0Niw3IEBAIHZv
aWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6aGFuZGxlR2VuZXIKICAgICAvLyBOZXZlciByZW1v
dmUgdGhlIHN0YXJ0IGJsb2NrIHVubGVzcyBpdCdzIGEgdGFibGUsIGluIHdoaWNoIGNhc2Ugd2Ug
d29uJ3QgbWVyZ2UgY29udGVudCBpbi4KICAgICBpZiAoc3RhcnROb2RlID09IG1fc3RhcnRCbG9j
ayAmJiBzdGFydE9mZnNldCA9PSAwICYmIGNhbkhhdmVDaGlsZHJlbkZvckVkaXRpbmcoc3RhcnRO
b2RlKSAmJiAhc3RhcnROb2RlLT5oYXNUYWdOYW1lKHRhYmxlVGFnKSkgewogICAgICAgICBzdGFy
dE9mZnNldCA9IDA7Ci0gICAgICAgIHN0YXJ0Tm9kZSA9IHN0YXJ0Tm9kZS0+dHJhdmVyc2VOZXh0
Tm9kZSgpOworICAgICAgICBzdGFydE5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KHN0YXJ0Tm9k
ZSk7CiAgICAgICAgIGlmICghc3RhcnROb2RlKQogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0K
QEAgLTQ1Nyw3ICs0NTgsNyBAQCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmhhbmRsZUdl
bmVyCiAgICAgfQogCiAgICAgaWYgKHN0YXJ0T2Zmc2V0ID49IGxhc3RPZmZzZXRGb3JFZGl0aW5n
KHN0YXJ0Tm9kZSkpIHsKLSAgICAgICAgc3RhcnROb2RlID0gc3RhcnROb2RlLT50cmF2ZXJzZU5l
eHRTaWJsaW5nKCk7CisgICAgICAgIHN0YXJ0Tm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHRTa2lw
cGluZ0NoaWxkcmVuKHN0YXJ0Tm9kZSk7CiAgICAgICAgIHN0YXJ0T2Zmc2V0ID0gMDsKICAgICB9
CiAKQEAgLTQ5MSw3ICs0OTIsNyBAQCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmhhbmRs
ZUdlbmVyCiAgICAgICAgICAgICAgICAgLy8gaW4gYSB0ZXh0IG5vZGUgdGhhdCBuZWVkcyB0byBi
ZSB0cmltbWVkCiAgICAgICAgICAgICAgICAgVGV4dCogdGV4dCA9IHRvVGV4dChub2RlLmdldCgp
KTsKICAgICAgICAgICAgICAgICBkZWxldGVUZXh0RnJvbU5vZGUodGV4dCwgc3RhcnRPZmZzZXQs
IHRleHQtPmxlbmd0aCgpIC0gc3RhcnRPZmZzZXQpOwotICAgICAgICAgICAgICAgIG5vZGUgPSBu
b2RlLT50cmF2ZXJzZU5leHROb2RlKCk7CisgICAgICAgICAgICAgICAgbm9kZSA9IE5vZGVUcmF2
ZXJzYWw6Om5leHQobm9kZS5nZXQoKSk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAg
ICAgICAgIG5vZGUgPSBzdGFydE5vZGUtPmNoaWxkTm9kZShzdGFydE9mZnNldCk7CiAgICAgICAg
ICAgICB9CkBAIC01MDMsMTAgKzUwNCwxMCBAQCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6
OmhhbmRsZUdlbmVyCiAgICAgICAgIC8vIGhhbmRsZSBkZWxldGluZyBhbGwgbm9kZXMgdGhhdCBh
cmUgY29tcGxldGVseSBzZWxlY3RlZAogICAgICAgICB3aGlsZSAobm9kZSAmJiBub2RlICE9IG1f
ZG93bnN0cmVhbUVuZC5kZXByZWNhdGVkTm9kZSgpKSB7CiAgICAgICAgICAgICBpZiAoY29tcGFy
ZVBvc2l0aW9ucyhmaXJzdFBvc2l0aW9uSW5PckJlZm9yZU5vZGUobm9kZS5nZXQoKSksIG1fZG93
bnN0cmVhbUVuZCkgPj0gMCkgewotICAgICAgICAgICAgICAgIC8vIHRyYXZlcnNlTmV4dFNpYmxp
bmcganVzdCBibGV3IHBhc3QgdGhlIGVuZCBwb3NpdGlvbiwgc28gc3RvcCBkZWxldGluZworICAg
ICAgICAgICAgICAgIC8vIE5vZGVUcmF2ZXJzYWw6Om5leHRTaWJsaW5nIGp1c3QgYmxldyBwYXN0
IHRoZSBlbmQgcG9zaXRpb24sIHNvIHN0b3AgZGVsZXRpbmcKICAgICAgICAgICAgICAgICBub2Rl
ID0gMDsKICAgICAgICAgICAgIH0gZWxzZSBpZiAoIW1fZG93bnN0cmVhbUVuZC5kZXByZWNhdGVk
Tm9kZSgpLT5pc0Rlc2NlbmRhbnRPZihub2RlLmdldCgpKSkgewotICAgICAgICAgICAgICAgIFJl
ZlB0cjxOb2RlPiBuZXh0Tm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dFNpYmxpbmcoKTsKKyAgICAg
ICAgICAgICAgICBSZWZQdHI8Tm9kZT4gbmV4dE5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0U2tp
cHBpbmdDaGlsZHJlbihub2RlLmdldCgpKTsKICAgICAgICAgICAgICAgICAvLyBpZiB3ZSBqdXN0
IHJlbW92ZWQgYSBub2RlIGZyb20gdGhlIGVuZCBjb250YWluZXIsIHVwZGF0ZSBlbmQgcG9zaXRp
b24gc28gdGhlCiAgICAgICAgICAgICAgICAgLy8gY2hlY2sgYWJvdmUgd2lsbCB3b3JrCiAgICAg
ICAgICAgICAgICAgdXBkYXRlUG9zaXRpb25Gb3JOb2RlUmVtb3ZhbChtX2Rvd25zdHJlYW1FbmQs
IG5vZGUuZ2V0KCkpOwpAQCAtNTE4LDcgKzUxOSw3IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29t
bWFuZDo6aGFuZGxlR2VuZXIKICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlTm9kZShub2RlLmdl
dCgpKTsKICAgICAgICAgICAgICAgICAgICAgbm9kZSA9IDA7CiAgICAgICAgICAgICAgICAgfSBl
bHNlCi0gICAgICAgICAgICAgICAgICAgIG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKCk7
CisgICAgICAgICAgICAgICAgICAgIG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUuZ2V0
KCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIApJbmRleDogU291cmNlL1dl
YkNvcmUvZWRpdGluZy9FZGl0Q29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvZWRpdGluZy9FZGl0Q29tbWFuZC5jcHAJKHJldmlzaW9uIDEzNzIxMikKKysrIFNvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvRWRpdENvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICsz
NCw3IEBACiAjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5j
bHVkZSAiRnJhbWVTZWxlY3Rpb24uaCIKKyNpbmNsdWRlICJOb2RlVHJhdmVyc2FsLmgiCiAjaW5j
bHVkZSAiVmlzaWJsZVBvc2l0aW9uLmgiCiAjaW5jbHVkZSAiaHRtbGVkaXRpbmcuaCIKIApAQCAt
MTE4LDcgKzExOSw3IEBAIHZvaWQgU2ltcGxlRWRpdENvbW1hbmQ6OmRvUmVhcHBseSgpCiAjaWZu
ZGVmIE5ERUJVRwogdm9pZCBTaW1wbGVFZGl0Q29tbWFuZDo6YWRkTm9kZUFuZERlc2NlbmRhbnRz
KE5vZGUqIHN0YXJ0Tm9kZSwgSGFzaFNldDxOb2RlKj4mIG5vZGVzKQogewotICAgIGZvciAoTm9k
ZSogbm9kZSA9IHN0YXJ0Tm9kZTsgbm9kZTsgbm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUo
c3RhcnROb2RlKSkKKyAgICBmb3IgKE5vZGUqIG5vZGUgPSBzdGFydE5vZGU7IG5vZGU7IG5vZGUg
PSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUsIHN0YXJ0Tm9kZSkpCiAgICAgICAgIG5vZGVzLmFk
ZChub2RlKTsKIH0KICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5n
U3R5bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0
eWxlLmNwcAkocmV2aXNpb24gMTM3MjEyKQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0
aW5nU3R5bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSAi
SFRNTEludGVyY2hhbmdlLmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiTm9k
ZS5oIgorI2luY2x1ZGUgIk5vZGVUcmF2ZXJzYWwuaCIKICNpbmNsdWRlICJQb3NpdGlvbi5oIgog
I2luY2x1ZGUgIlF1YWxpZmllZE5hbWUuaCIKICNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgpAQCAt
NjgxLDcgKzY4Miw3IEBAIFRyaVN0YXRlIEVkaXRpbmdTdHlsZTo6dHJpU3RhdGVPZlN0eWxlKGMK
ICAgICAgICAgcmV0dXJuIHRyaVN0YXRlT2ZTdHlsZShFZGl0aW5nU3R5bGU6OnN0eWxlQXRTZWxl
Y3Rpb25TdGFydChzZWxlY3Rpb24pLmdldCgpKTsKIAogICAgIFRyaVN0YXRlIHN0YXRlID0gRmFs
c2VUcmlTdGF0ZTsKLSAgICBmb3IgKE5vZGUqIG5vZGUgPSBzZWxlY3Rpb24uc3RhcnQoKS5kZXBy
ZWNhdGVkTm9kZSgpOyBub2RlOyBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgpKSB7Cisg
ICAgZm9yIChOb2RlKiBub2RlID0gc2VsZWN0aW9uLnN0YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKTsg
bm9kZTsgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9kZSkpIHsKICAgICAgICAgUmVmUHRy
PENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbj4gbm9kZVN0eWxlID0gQ1NTQ29tcHV0ZWRTdHls
ZURlY2xhcmF0aW9uOjpjcmVhdGUobm9kZSk7CiAgICAgICAgIGlmIChub2RlU3R5bGUpIHsKICAg
ICAgICAgICAgIFRyaVN0YXRlIG5vZGVTdGF0ZSA9IHRyaVN0YXRlT2ZTdHlsZShub2RlU3R5bGUu
Z2V0KCksIG5vZGUtPmlzVGV4dE5vZGUoKSA/IEVkaXRpbmdTdHlsZTo6RG9Ob3RJZ25vcmVUZXh0
T25seVByb3BlcnRpZXMgOiBFZGl0aW5nU3R5bGU6Oklnbm9yZVRleHRPbmx5UHJvcGVydGllcyk7
CkBAIC0xMjQ4LDcgKzEyNDksNyBAQCBXcml0aW5nRGlyZWN0aW9uIEVkaXRpbmdTdHlsZTo6dGV4
dERpcmVjCiAgICAgICAgIGVuZCA9IHNlbGVjdGlvbi5lbmQoKS51cHN0cmVhbSgpOwogCiAgICAg
ICAgIE5vZGUqIHBhc3RMYXN0ID0gUmFuZ2U6OmNyZWF0ZShlbmQuZG9jdW1lbnQoKSwgcG9zaXRp
b24ucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCksIGVuZC5wYXJlbnRBbmNob3JlZEVxdWl2YWxl
bnQoKSktPnBhc3RMYXN0Tm9kZSgpOwotICAgICAgICBmb3IgKE5vZGUqIG4gPSBub2RlOyBuICYm
IG4gIT0gcGFzdExhc3Q7IG4gPSBuLT50cmF2ZXJzZU5leHROb2RlKCkpIHsKKyAgICAgICAgZm9y
IChOb2RlKiBuID0gbm9kZTsgbiAmJiBuICE9IHBhc3RMYXN0OyBuID0gTm9kZVRyYXZlcnNhbDo6
bmV4dChuKSkgewogICAgICAgICAgICAgaWYgKCFuLT5pc1N0eWxlZEVsZW1lbnQoKSkKICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAko
cmV2aXNpb24gMTM3MjEyKQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02Miw2ICs2Miw3IEBACiAjaW5jbHVkZSAiS2lsbFJpbmcuaCIKICNp
bmNsdWRlICJNb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuaCIKICNpbmNsdWRlICJOb2RlTGlzdC5o
IgorI2luY2x1ZGUgIk5vZGVUcmF2ZXJzYWwuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVk
ZSAiUGFzdGVib2FyZC5oIgogI2luY2x1ZGUgIlJlbW92ZUZvcm1hdENvbW1hbmQuaCIKQEAgLTEw
NjcsMTIgKzEwNjgsMTIgQEAgdm9pZCBFZGl0b3I6OnNpbXBsaWZ5TWFya3VwKE5vZGUqIHN0YXJ0
TgogICAgICAgICAvLyBjaGVjayBpZiBzdGFydCBub2RlIGlzIGJlZm9yZSBlbmROb2RlCiAgICAg
ICAgIE5vZGUqIG5vZGUgPSBzdGFydE5vZGU7CiAgICAgICAgIHdoaWxlIChub2RlICYmIG5vZGUg
IT0gZW5kTm9kZSkKLSAgICAgICAgICAgIG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKCk7
CisgICAgICAgICAgICBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dChub2RlKTsKICAgICAgICAg
aWYgKCFub2RlKQogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBhcHBseUNv
bW1hbmQoU2ltcGxpZnlNYXJrdXBDb21tYW5kOjpjcmVhdGUobV9mcmFtZS0+ZG9jdW1lbnQoKSwg
c3RhcnROb2RlLCAoZW5kTm9kZSkgPyBlbmROb2RlLT50cmF2ZXJzZU5leHROb2RlKCkgOiAwKSk7
CisgICAgYXBwbHlDb21tYW5kKFNpbXBsaWZ5TWFya3VwQ29tbWFuZDo6Y3JlYXRlKG1fZnJhbWUt
PmRvY3VtZW50KCksIHN0YXJ0Tm9kZSwgKGVuZE5vZGUpID8gTm9kZVRyYXZlcnNhbDo6bmV4dChl
bmROb2RlKSA6IDApKTsKIH0KIAogdm9pZCBFZGl0b3I6OmNvcHlVUkwoY29uc3QgS1VSTCYgdXJs
LCBjb25zdCBTdHJpbmcmIHRpdGxlKQpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFt
ZVNlbGVjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFt
ZVNlbGVjdGlvbi5jcHAJKHJldmlzaW9uIDEzNzIxMikKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRnJhbWVTZWxlY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCw2ICs0OCw3IEBACiAj
aW5jbHVkZSAiSGl0VGVzdFJlcXVlc3QuaCIKICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCiAj
aW5jbHVkZSAiSW5saW5lVGV4dEJveC5oIgorI2luY2x1ZGUgIk5vZGVUcmF2ZXJzYWwuaCIKICNp
bmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUmFuZ2UuaCIKICNpbmNsdWRlICJSZW5kZXJUZXh0
LmgiCkBAIC0xOTUyLDcgKzE5NTMsNyBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpnZXRDbGlwcGVk
VmlzaWJsZVRlCiAvLyBTY2FucyBsb2dpY2FsbHkgZm9yd2FyZCBmcm9tICJzdGFydCIsIGluY2x1
ZGluZyBhbnkgY2hpbGQgZnJhbWVzLgogc3RhdGljIEhUTUxGb3JtRWxlbWVudCogc2NhbkZvckZv
cm0oTm9kZSogc3RhcnQpCiB7Ci0gICAgZm9yIChOb2RlKiBub2RlID0gc3RhcnQ7IG5vZGU7IG5v
ZGUgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKCkpIHsKKyAgICBmb3IgKE5vZGUqIG5vZGUgPSBz
dGFydDsgbm9kZTsgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9kZSkpIHsKICAgICAgICAg
aWYgKG5vZGUtPmhhc1RhZ05hbWUoZm9ybVRhZykpCiAgICAgICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8SFRNTEZvcm1FbGVtZW50Kj4obm9kZSk7CiAgICAgICAgIGlmIChub2RlLT5pc0hUTUxF
bGVtZW50KCkgJiYgdG9IVE1MRWxlbWVudChub2RlKS0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkK
QEAgLTIwMjUsNyArMjAyNiw3IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnNldFNlbGVjdGlvbkZy
b21Ob24KIAogICAgIE5vZGUqIG5vZGUgPSBkb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50KCk7CiAg
ICAgd2hpbGUgKG5vZGUgJiYgIW5vZGUtPmhhc1RhZ05hbWUoYm9keVRhZykpCi0gICAgICAgIG5v
ZGUgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKCk7CisgICAgICAgIG5vZGUgPSBOb2RlVHJhdmVy
c2FsOjpuZXh0KG5vZGUpOwogICAgIGlmIChub2RlKQogICAgICAgICBzZXRTZWxlY3Rpb24oVmlz
aWJsZVNlbGVjdGlvbihmaXJzdFBvc2l0aW9uSW5PckJlZm9yZU5vZGUobm9kZSksIERPV05TVFJF
QU0pKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0UGFyYWdyYXBoU2Vw
YXJhdG9yQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9J
bnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kLmNwcAkocmV2aXNpb24gMTM3MjEyKQorKysg
U291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkhUTUxFbGVtZW50
LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSW5zZXJ0TGluZUJyZWFrQ29t
bWFuZC5oIgorI2luY2x1ZGUgIk5vZGVUcmF2ZXJzYWwuaCIKICNpbmNsdWRlICJSZW5kZXJPYmpl
Y3QuaCIKICNpbmNsdWRlICJUZXh0LmgiCiAjaW5jbHVkZSAiaHRtbGVkaXRpbmcuaCIKQEAgLTM2
Niw3ICszNjcsNyBAQCB2b2lkIEluc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQ6OmRvCiAg
ICAgICAgIGVsc2UgewogICAgICAgICAgICAgTm9kZSogc3BsaXRUbyA9IGluc2VydGlvblBvc2l0
aW9uLmNvbnRhaW5lck5vZGUoKTsKICAgICAgICAgICAgIGlmIChzcGxpdFRvLT5pc1RleHROb2Rl
KCkgJiYgaW5zZXJ0aW9uUG9zaXRpb24ub2Zmc2V0SW5Db250YWluZXJOb2RlKCkgPj0gY2FyZXRN
YXhPZmZzZXQoc3BsaXRUbykpCi0gICAgICAgICAgICAgIHNwbGl0VG8gPSBzcGxpdFRvLT50cmF2
ZXJzZU5leHROb2RlKHN0YXJ0QmxvY2suZ2V0KCkpOworICAgICAgICAgICAgICAgIHNwbGl0VG8g
PSBOb2RlVHJhdmVyc2FsOjpuZXh0KHNwbGl0VG8sIHN0YXJ0QmxvY2suZ2V0KCkpOwogICAgICAg
ICAgICAgQVNTRVJUKHNwbGl0VG8pOwogICAgICAgICAgICAgc3BsaXRUcmVlVG9Ob2RlKHNwbGl0
VG8sIHN0YXJ0QmxvY2suZ2V0KCkpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Jl
cGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAkocmV2aXNpb24gMTM3MjEyKQorKysg
U291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQ1LDYgKzQ1LDcgQEAKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNs
dWRlICJOb2RlTGlzdC5oIgogI2luY2x1ZGUgIk5vZGVSZW5kZXJTdHlsZS5oIgorI2luY2x1ZGUg
Ik5vZGVUcmF2ZXJzYWwuaCIKICNpbmNsdWRlICJSZW5kZXJJbmxpbmUuaCIKICNpbmNsdWRlICJS
ZW5kZXJPYmplY3QuaCIKICNpbmNsdWRlICJSZW5kZXJUZXh0LmgiCkBAIC0yODksNyArMjkwLDcg
QEAgdm9pZCBSZXBsYWNlbWVudEZyYWdtZW50OjpyZW1vdmVVbnJlbmRlcgogewogICAgIFZlY3Rv
cjxSZWZQdHI8Tm9kZT4gPiB1bnJlbmRlcmVkOwogCi0gICAgZm9yIChOb2RlKiBub2RlID0gaG9s
ZGVyLT5maXJzdENoaWxkKCk7IG5vZGU7IG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKGhv
bGRlcikpCisgICAgZm9yIChOb2RlKiBub2RlID0gaG9sZGVyLT5maXJzdENoaWxkKCk7IG5vZGU7
IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUsIGhvbGRlcikpCiAgICAgICAgIGlmICgh
aXNOb2RlUmVuZGVyZWQobm9kZSkgJiYgIWlzVGFibGVTdHJ1Y3R1cmVOb2RlKG5vZGUpKQogICAg
ICAgICAgICAgdW5yZW5kZXJlZC5hcHBlbmQobm9kZSk7CiAKQEAgLTMzMCw5ICszMzEsOSBAQCB2
b2lkIFJlcGxhY2VtZW50RnJhZ21lbnQ6OnJlbW92ZUludGVyY2hhCiAgICAgCiAgICAgbm9kZSA9
IGNvbnRhaW5lci0+Zmlyc3RDaGlsZCgpOwogICAgIHdoaWxlIChub2RlKSB7Ci0gICAgICAgIFJl
ZlB0cjxOb2RlPiBuZXh0ID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgpOworICAgICAgICBSZWZQ
dHI8Tm9kZT4gbmV4dCA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9kZSk7CiAgICAgICAgIGlmIChp
c0ludGVyY2hhbmdlQ29udmVydGVkU3BhY2VTcGFuKG5vZGUpKSB7Ci0gICAgICAgICAgICBuZXh0
ID0gbm9kZS0+dHJhdmVyc2VOZXh0U2libGluZygpOworICAgICAgICAgICAgbmV4dCA9IE5vZGVU
cmF2ZXJzYWw6Om5leHRTa2lwcGluZ0NoaWxkcmVuKG5vZGUpOwogICAgICAgICAgICAgcmVtb3Zl
Tm9kZVByZXNlcnZpbmdDaGlsZHJlbihub2RlKTsKICAgICAgICAgfQogICAgICAgICBub2RlID0g
bmV4dC5nZXQoKTsKQEAgLTM1Myw5ICszNTQsOSBAQCBpbmxpbmUgdm9pZCBSZXBsYWNlU2VsZWN0
aW9uQ29tbWFuZDo6SW5zCiBpbmxpbmUgdm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6SW5z
ZXJ0ZWROb2Rlczo6d2lsbFJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW4oTm9kZSogbm9kZSkK
IHsKICAgICBpZiAobV9maXJzdE5vZGVJbnNlcnRlZCA9PSBub2RlKQotICAgICAgICBtX2ZpcnN0
Tm9kZUluc2VydGVkID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgpOworICAgICAgICBtX2ZpcnN0
Tm9kZUluc2VydGVkID0gTm9kZVRyYXZlcnNhbDo6bmV4dChub2RlKTsKICAgICBpZiAobV9sYXN0
Tm9kZUluc2VydGVkID09IG5vZGUpCi0gICAgICAgIG1fbGFzdE5vZGVJbnNlcnRlZCA9IG5vZGUt
Pmxhc3RDaGlsZCgpID8gbm9kZS0+bGFzdENoaWxkKCkgOiBub2RlLT50cmF2ZXJzZU5leHRTaWJs
aW5nKCk7CisgICAgICAgIG1fbGFzdE5vZGVJbnNlcnRlZCA9IG5vZGUtPmxhc3RDaGlsZCgpID8g
bm9kZS0+bGFzdENoaWxkKCkgOiBOb2RlVHJhdmVyc2FsOjpuZXh0U2tpcHBpbmdDaGlsZHJlbihu
b2RlKTsKIH0KIAogaW5saW5lIHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6Okluc2VydGVk
Tm9kZXM6OndpbGxSZW1vdmVOb2RlKE5vZGUqIG5vZGUpCkBAIC0zNjQsOSArMzY1LDkgQEAgaW5s
aW5lIHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OklucwogICAgICAgICBtX2ZpcnN0Tm9k
ZUluc2VydGVkID0gMDsKICAgICAgICAgbV9sYXN0Tm9kZUluc2VydGVkID0gMDsKICAgICB9IGVs
c2UgaWYgKG1fZmlyc3ROb2RlSW5zZXJ0ZWQgPT0gbm9kZSkKLSAgICAgICAgbV9maXJzdE5vZGVJ
bnNlcnRlZCA9IG1fZmlyc3ROb2RlSW5zZXJ0ZWQtPnRyYXZlcnNlTmV4dFNpYmxpbmcoKTsKKyAg
ICAgICAgbV9maXJzdE5vZGVJbnNlcnRlZCA9IE5vZGVUcmF2ZXJzYWw6Om5leHRTa2lwcGluZ0No
aWxkcmVuKG1fZmlyc3ROb2RlSW5zZXJ0ZWQuZ2V0KCkpOwogICAgIGVsc2UgaWYgKG1fbGFzdE5v
ZGVJbnNlcnRlZCA9PSBub2RlKQotICAgICAgICBtX2xhc3ROb2RlSW5zZXJ0ZWQgPSBtX2xhc3RO
b2RlSW5zZXJ0ZWQtPnRyYXZlcnNlUHJldmlvdXNTaWJsaW5nKCk7CisgICAgICAgIG1fbGFzdE5v
ZGVJbnNlcnRlZCA9IE5vZGVUcmF2ZXJzYWw6OnByZXZpb3VzU2tpcHBpbmdDaGlsZHJlbihtX2xh
c3ROb2RlSW5zZXJ0ZWQuZ2V0KCkpOwogfQogCiBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6UmVw
bGFjZVNlbGVjdGlvbkNvbW1hbmQoRG9jdW1lbnQqIGRvY3VtZW50LCBQYXNzUmVmUHRyPERvY3Vt
ZW50RnJhZ21lbnQ+IGZyYWdtZW50LCBDb21tYW5kT3B0aW9ucyBvcHRpb25zLCBFZGl0QWN0aW9u
IGVkaXRBY3Rpb24pCkBAIC00ODAsNyArNDgxLDcgQEAgdm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29t
bWFuZDo6cmVtb3ZlUmVkdQogICAgIGZvciAoUmVmUHRyPE5vZGU+IG5vZGUgPSBpbnNlcnRlZE5v
ZGVzLmZpcnN0Tm9kZUluc2VydGVkKCk7IG5vZGUgJiYgbm9kZSAhPSBwYXN0RW5kTm9kZTsgbm9k
ZSA9IG5leHQpIHsKICAgICAgICAgLy8gRklYTUU6IDxyZGFyOi8vcHJvYmxlbS81MzcxNTM2PiBT
dHlsZSBydWxlcyB0aGF0IG1hdGNoIHBhc3RlZCBjb250ZW50IGNhbiBjaGFuZ2UgaXQncyBhcHBl
YXJhbmNlCiAKLSAgICAgICAgbmV4dCA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoKTsKKyAgICAg
ICAgbmV4dCA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9kZS5nZXQoKSk7CiAgICAgICAgIGlmICgh
bm9kZS0+aXNTdHlsZWRFbGVtZW50KCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIApAQCAtNTk1
LDEwICs1OTYsMTAgQEAgc3RhdGljIHZvaWQgcmVtb3ZlSGVhZENvbnRlbnRzKFJlcGxhY2VtZQog
ICAgICAgICAgICAgfHwgbm9kZS0+aGFzVGFnTmFtZShtZXRhVGFnKQogICAgICAgICAgICAgfHwg
bm9kZS0+aGFzVGFnTmFtZShzdHlsZVRhZykKICAgICAgICAgICAgIHx8IG5vZGUtPmhhc1RhZ05h
bWUodGl0bGVUYWcpKSB7Ci0gICAgICAgICAgICBuZXh0ID0gbm9kZS0+dHJhdmVyc2VOZXh0U2li
bGluZygpOworICAgICAgICAgICAgbmV4dCA9IE5vZGVUcmF2ZXJzYWw6Om5leHRTa2lwcGluZ0No
aWxkcmVuKG5vZGUpOwogICAgICAgICAgICAgZnJhZ21lbnQucmVtb3ZlTm9kZShub2RlKTsKICAg
ICAgICAgfSBlbHNlCi0gICAgICAgICAgICBuZXh0ID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgp
OworICAgICAgICAgICAgbmV4dCA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9kZSk7CiAgICAgfQog
fQogCkBAIC02NDUsNyArNjQ2LDcgQEAgdm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6aGFu
ZGxlU3R5bAogICAgIC8vIFRoZSBzdHlsZSBzcGFuIHRoYXQgY29udGFpbnMgdGhlIHNvdXJjZSBk
b2N1bWVudCdzIGRlZmF1bHQgc3R5bGUgc2hvdWxkIGJlIGF0CiAgICAgLy8gdGhlIHRvcCBvZiB0
aGUgZnJhZ21lbnQsIGJ1dCBNYWlsIHNvbWV0aW1lcyBhZGRzIGEgd3JhcHBlciAoZm9yIFBhc3Rl
IEFzIFF1b3RhdGlvbiksCiAgICAgLy8gc28gc2VhcmNoIGZvciB0aGUgdG9wIGxldmVsIHN0eWxl
IHNwYW4gaW5zdGVhZCBvZiBhc3N1bWluZyBpdCdzIGF0IHRoZSB0b3AuCi0gICAgZm9yIChOb2Rl
KiBub2RlID0gaW5zZXJ0ZWROb2Rlcy5maXJzdE5vZGVJbnNlcnRlZCgpOyBub2RlOyBub2RlID0g
bm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgpKSB7CisgICAgZm9yIChOb2RlKiBub2RlID0gaW5zZXJ0
ZWROb2Rlcy5maXJzdE5vZGVJbnNlcnRlZCgpOyBub2RlOyBub2RlID0gTm9kZVRyYXZlcnNhbDo6
bmV4dChub2RlKSkgewogICAgICAgICBpZiAoaXNMZWdhY3lBcHBsZVN0eWxlU3Bhbihub2RlKSkg
ewogICAgICAgICAgICAgd3JhcHBpbmdTdHlsZVNwYW4gPSB0b0hUTUxFbGVtZW50KG5vZGUpOwog
ICAgICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VT
ZWxlY3Rpb25Db21tYW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9S
ZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5oCShyZXZpc2lvbiAxMzcyMTIpCisrKyBTb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmgJKHdvcmtpbmcgY29weSkKQEAg
LTI3LDYgKzI3LDcgQEAKICNkZWZpbmUgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmRfaAogCiAjaW5j
bHVkZSAiQ29tcG9zaXRlRWRpdENvbW1hbmQuaCIKKyNpbmNsdWRlICJOb2RlVHJhdmVyc2FsLmgi
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNjUsNyArNjYsNyBAQCBwcml2YXRlOgogCiAg
ICAgICAgIE5vZGUqIGZpcnN0Tm9kZUluc2VydGVkKCkgY29uc3QgeyByZXR1cm4gbV9maXJzdE5v
ZGVJbnNlcnRlZC5nZXQoKTsgfQogICAgICAgICBOb2RlKiBsYXN0TGVhZkluc2VydGVkKCkgY29u
c3QgeyByZXR1cm4gbV9sYXN0Tm9kZUluc2VydGVkLT5sYXN0RGVzY2VuZGFudCgpOyB9Ci0gICAg
ICAgIE5vZGUqIHBhc3RMYXN0TGVhZigpIGNvbnN0IHsgcmV0dXJuIG1fbGFzdE5vZGVJbnNlcnRl
ZCA/IGxhc3RMZWFmSW5zZXJ0ZWQoKS0+dHJhdmVyc2VOZXh0Tm9kZSgpIDogMDsgfQorICAgICAg
ICBOb2RlKiBwYXN0TGFzdExlYWYoKSBjb25zdCB7IHJldHVybiBtX2xhc3ROb2RlSW5zZXJ0ZWQg
PyBOb2RlVHJhdmVyc2FsOjpuZXh0KGxhc3RMZWFmSW5zZXJ0ZWQoKSkgOiAwOyB9CiAKICAgICBw
cml2YXRlOgogICAgICAgICBSZWZQdHI8Tm9kZT4gbV9maXJzdE5vZGVJbnNlcnRlZDsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU2ltcGxpZnlNYXJrdXBDb21tYW5kLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NpbXBsaWZ5TWFya3VwQ29tbWFuZC5jcHAJ
KHJldmlzaW9uIDEzNzIxMikKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU2ltcGxpZnlNYXJr
dXBDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUg
IlNpbXBsaWZ5TWFya3VwQ29tbWFuZC5oIgogCiAjaW5jbHVkZSAiTm9kZVJlbmRlclN0eWxlLmgi
CisjaW5jbHVkZSAiTm9kZVRyYXZlcnNhbC5oIgogI2luY2x1ZGUgIlJlbmRlcklubGluZS5oIgog
I2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgogI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCkBAIC00
Nyw3ICs0OCw3IEBAIHZvaWQgU2ltcGxpZnlNYXJrdXBDb21tYW5kOjpkb0FwcGx5KCkKICAgICAv
LyB3aXRob3V0IGFmZmVjdGluZyB0aGUgc3R5bGUuIFRoZSBnb2FsIGlzIHRvIHByb2R1Y2UgbGVh
bmVyIG1hcmt1cCBldmVuIHdoZW4gc3RhcnRpbmcKICAgICAvLyBmcm9tIGEgdmVyYm9zZSBmcmFn
bWVudC4KICAgICAvLyBXZSBsb29rIGF0IGlubGluZSBlbGVtZW50cyBhcyB3ZWxsIGFzIG5vbiB0
b3AgbGV2ZWwgZGl2cyB0aGF0IGRvbid0IGhhdmUgYXR0cmlidXRlcy4gCi0gICAgZm9yIChOb2Rl
KiBub2RlID0gbV9maXJzdE5vZGUuZ2V0KCk7IG5vZGUgJiYgbm9kZSAhPSBtX25vZGVBZnRlckxh
c3Q7IG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKCkpIHsKKyAgICBmb3IgKE5vZGUqIG5v
ZGUgPSBtX2ZpcnN0Tm9kZS5nZXQoKTsgbm9kZSAmJiBub2RlICE9IG1fbm9kZUFmdGVyTGFzdDsg
bm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9kZSkpIHsKICAgICAgICAgaWYgKG5vZGUtPmZp
cnN0Q2hpbGQoKSB8fCAobm9kZS0+aXNUZXh0Tm9kZSgpICYmIG5vZGUtPm5leHRTaWJsaW5nKCkp
KQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIApJbmRleDogU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvVGV4dEl0ZXJhdG9yLmNwcAkocmV2aXNpb24gMTM3MjEyKQorKysgU291cmNlL1dlYkNv
cmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3
IEBACiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiaHRtbGVkaXRpbmcuaCIKICNp
bmNsdWRlICJJbmxpbmVUZXh0Qm94LmgiCisjaW5jbHVkZSAiTm9kZVRyYXZlcnNhbC5oIgogI2lu
Y2x1ZGUgIlJhbmdlLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGFibGVDZWxsLmgiCiAjaW5jbHVkZSAi
UmVuZGVyVGFibGVSb3cuaCIKQEAgLTQyNSw3ICs0MjYsNyBAQCB2b2lkIFRleHRJdGVyYXRvcjo6
YWR2YW5jZSgpCiAgICAgICAgIGlmICghbmV4dCkgewogICAgICAgICAgICAgbmV4dCA9IG1fbm9k
ZS0+bmV4dFNpYmxpbmcoKTsKICAgICAgICAgICAgIGlmICghbmV4dCkgewotICAgICAgICAgICAg
ICAgIGJvb2wgcGFzdEVuZCA9IG1fbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgpID09IG1fcGFzdEVu
ZE5vZGU7CisgICAgICAgICAgICAgICAgYm9vbCBwYXN0RW5kID0gTm9kZVRyYXZlcnNhbDo6bmV4
dChtX25vZGUpID09IG1fcGFzdEVuZE5vZGU7CiAgICAgICAgICAgICAgICAgTm9kZSogcGFyZW50
Tm9kZSA9IG1fbm9kZS0+cGFyZW50T3JIb3N0Tm9kZSgpOwogICAgICAgICAgICAgICAgIHdoaWxl
ICghbmV4dCAmJiBwYXJlbnROb2RlKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmICgocGFzdEVu
ZCAmJiBwYXJlbnROb2RlID09IG1fZW5kQ29udGFpbmVyKSB8fCBtX2VuZENvbnRhaW5lci0+aXNE
ZXNjZW5kYW50T2YocGFyZW50Tm9kZSkpCkBAIC04MDUsNyArODA2LDcgQEAgc3RhdGljIGJvb2wg
c2hvdWxkRW1pdE5ld2xpbmVBZnRlck5vZGUoTgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
Ly8gQ2hlY2sgaWYgdGhpcyBpcyB0aGUgdmVyeSBsYXN0IHJlbmRlcmVyIGluIHRoZSBkb2N1bWVu
dC4KICAgICAvLyBJZiBzbywgdGhlbiB3ZSBzaG91bGQgbm90IGVtaXQgYSBuZXdsaW5lLgotICAg
IHdoaWxlICgobm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dFNpYmxpbmcoKSkpCisgICAgd2hpbGUg
KChub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dFNraXBwaW5nQ2hpbGRyZW4obm9kZSkpKQogICAg
ICAgICBpZiAobm9kZS0+cmVuZGVyZXIoKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAg
IHJldHVybiBmYWxzZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRpbmcu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRpbmcuY3Bw
CShyZXZpc2lvbiAxMzcyMTIpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5n
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsNiArNDEsNyBAQAogI2luY2x1ZGUgIkhUTUxPTGlz
dEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MUGFyYWdyYXBoRWxlbWVudC5oIgogI2luY2x1ZGUg
IkhUTUxVTGlzdEVsZW1lbnQuaCIKKyNpbmNsdWRlICJOb2RlVHJhdmVyc2FsLmgiCiAjaW5jbHVk
ZSAiUG9zaXRpb25JdGVyYXRvci5oIgogI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgogI2luY2x1
ZGUgIlJhbmdlLmgiCkBAIC02NDUsMTIgKzY0NiwxMiBAQCBzdGF0aWMgYm9vbCBoYXNBUmVuZGVy
ZWREZXNjZW5kYW50KE5vZGUqCiB7CiAgICAgZm9yIChOb2RlKiBuID0gbm9kZS0+Zmlyc3RDaGls
ZCgpOyBuOykgewogICAgICAgICBpZiAobiA9PSBleGNsdWRlZE5vZGUpIHsKLSAgICAgICAgICAg
IG4gPSBuLT50cmF2ZXJzZU5leHRTaWJsaW5nKG5vZGUpOworICAgICAgICAgICAgbiA9IE5vZGVU
cmF2ZXJzYWw6Om5leHRTa2lwcGluZ0NoaWxkcmVuKG4sIG5vZGUpOwogICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgIH0KICAgICAgICAgaWYgKG4tPnJlbmRlcmVyKCkpCiAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgbiA9IG4tPnRyYXZlcnNlTmV4dE5vZGUobm9kZSk7Cisg
ICAgICAgIG4gPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG4sIG5vZGUpOwogICAgIH0KICAgICByZXR1
cm4gZmFsc2U7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCShyZXZpc2lvbiAx
MzcyMTIpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTUxLDYgKzUxLDcgQEAKICNpbmNsdWRlICJIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVu
dC5oIgogI2luY2x1ZGUgIktVUkwuaCIKICNpbmNsdWRlICJNYXJrdXBBY2N1bXVsYXRvci5oIgor
I2luY2x1ZGUgIk5vZGVUcmF2ZXJzYWwuaCIKICNpbmNsdWRlICJSYW5nZS5oIgogI2luY2x1ZGUg
IlJlbmRlck9iamVjdC5oIgogI2luY2x1ZGUgIlN0eWxlUHJvcGVydHlTZXQuaCIKQEAgLTEwMSw4
ICsxMDIsOCBAQCBzdGF0aWMgdm9pZCBjb21wbGV0ZVVSTHMoTm9kZSogbm9kZSwgY29uCiAKICAg
ICBLVVJMIHBhcnNlZEJhc2VVUkwoUGFyc2VkVVJMU3RyaW5nLCBiYXNlVVJMKTsKIAotICAgIE5v
ZGUqIGVuZCA9IG5vZGUtPnRyYXZlcnNlTmV4dFNpYmxpbmcoKTsKLSAgICBmb3IgKE5vZGUqIG4g
PSBub2RlOyBuICE9IGVuZDsgbiA9IG4tPnRyYXZlcnNlTmV4dE5vZGUoKSkgeworICAgIE5vZGUq
IGVuZCA9IE5vZGVUcmF2ZXJzYWw6Om5leHRTa2lwcGluZ0NoaWxkcmVuKG5vZGUpOworICAgIGZv
ciAoTm9kZSogbiA9IG5vZGU7IG4gIT0gZW5kOyBuID0gTm9kZVRyYXZlcnNhbDo6bmV4dChuKSkg
ewogICAgICAgICBpZiAobi0+aXNFbGVtZW50Tm9kZSgpKSB7CiAgICAgICAgICAgICBFbGVtZW50
KiBlID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG4pOwogICAgICAgICAgICAgaWYgKCFlLT5oYXNB
dHRyaWJ1dGVzKCkpCkBAIC0zNjUsNyArMzY2LDcgQEAgTm9kZSogU3R5bGVkTWFya3VwQWNjdW11
bGF0b3I6OnRyYXZlcnNlTgogICAgICAgICBpZiAoIW4pCiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgCi0gICAgICAgIG5leHQgPSBuLT50cmF2ZXJzZU5leHROb2RlKCk7CisgICAgICAgIG5l
eHQgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG4pOwogICAgICAgICBib29sIG9wZW5lZFRhZyA9IGZh
bHNlOwogCiAgICAgICAgIGlmIChpc0Jsb2NrKG4pICYmIGNhbkhhdmVDaGlsZHJlbkZvckVkaXRp
bmcobikgJiYgbmV4dCA9PSBwYXN0RW5kKQpAQCAtMzczLDcgKzM3NCw3IEBAIE5vZGUqIFN0eWxl
ZE1hcmt1cEFjY3VtdWxhdG9yOjp0cmF2ZXJzZU4KICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAg
ICAgICAgIGlmICghbi0+cmVuZGVyZXIoKSAmJiAhZW5jbG9zaW5nTm9kZVdpdGhUYWcoZmlyc3RQ
b3NpdGlvbkluT3JCZWZvcmVOb2RlKG4pLCBzZWxlY3RUYWcpKSB7Ci0gICAgICAgICAgICBuZXh0
ID0gbi0+dHJhdmVyc2VOZXh0U2libGluZygpOworICAgICAgICAgICAgbmV4dCA9IE5vZGVUcmF2
ZXJzYWw6Om5leHRTa2lwcGluZ0NoaWxkcmVuKG4pOwogICAgICAgICAgICAgLy8gRG9uJ3Qgc2tp
cCBvdmVyIHBhc3RFbmQuCiAgICAgICAgICAgICBpZiAocGFzdEVuZCAmJiBwYXN0RW5kLT5pc0Rl
c2NlbmRhbnRPZihuKSkKICAgICAgICAgICAgICAgICBuZXh0ID0gcGFzdEVuZDsKQEAgLTY3OCw3
ICs2NzksNyBAQCBzdGF0aWMgY29uc3QgY2hhciBmcmFnbWVudE1hcmtlclRhZ1tdID0gCiAKIHN0
YXRpYyBib29sIGZpbmROb2Rlc1N1cnJvdW5kaW5nQ29udGV4dChEb2N1bWVudCogZG9jdW1lbnQs
IFJlZlB0cjxOb2RlPiYgbm9kZUJlZm9yZUNvbnRleHQsIFJlZlB0cjxOb2RlPiYgbm9kZUFmdGVy
Q29udGV4dCkKIHsKLSAgICBmb3IgKE5vZGUqIG5vZGUgPSBkb2N1bWVudC0+Zmlyc3RDaGlsZCgp
OyBub2RlOyBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgpKSB7CisgICAgZm9yIChOb2Rl
KiBub2RlID0gZG9jdW1lbnQtPmZpcnN0Q2hpbGQoKTsgbm9kZTsgbm9kZSA9IE5vZGVUcmF2ZXJz
YWw6Om5leHQobm9kZSkpIHsKICAgICAgICAgaWYgKG5vZGUtPm5vZGVUeXBlKCkgPT0gTm9kZTo6
Q09NTUVOVF9OT0RFICYmIHN0YXRpY19jYXN0PENoYXJhY3RlckRhdGEqPihub2RlKS0+ZGF0YSgp
ID09IGZyYWdtZW50TWFya2VyVGFnKSB7CiAgICAgICAgICAgICBpZiAoIW5vZGVCZWZvcmVDb250
ZXh0KQogICAgICAgICAgICAgICAgIG5vZGVCZWZvcmVDb250ZXh0ID0gbm9kZTsKQEAgLTY5Nywx
MCArNjk4LDEwIEBAIHN0YXRpYyB2b2lkIHRyaW1GcmFnbWVudChEb2N1bWVudEZyYWdtZW4KICAg
ICBSZWZQdHI8Tm9kZT4gbmV4dDsKICAgICBmb3IgKFJlZlB0cjxOb2RlPiBub2RlID0gZnJhZ21l
bnQtPmZpcnN0Q2hpbGQoKTsgbm9kZTsgbm9kZSA9IG5leHQpIHsKICAgICAgICAgaWYgKG5vZGVC
ZWZvcmVDb250ZXh0LT5pc0Rlc2NlbmRhbnRPZihub2RlLmdldCgpKSkgewotICAgICAgICAgICAg
bmV4dCA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoKTsKKyAgICAgICAgICAgIG5leHQgPSBOb2Rl
VHJhdmVyc2FsOjpuZXh0KG5vZGUuZ2V0KCkpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgIH0KLSAgICAgICAgbmV4dCA9IG5vZGUtPnRyYXZlcnNlTmV4dFNpYmxpbmcoKTsKKyAgICAg
ICAgbmV4dCA9IE5vZGVUcmF2ZXJzYWw6Om5leHRTa2lwcGluZ0NoaWxkcmVuKG5vZGUuZ2V0KCkp
OwogICAgICAgICBBU1NFUlQoIW5vZGUtPmNvbnRhaW5zKG5vZGVBZnRlckNvbnRleHQpKTsKICAg
ICAgICAgbm9kZS0+cGFyZW50Tm9kZSgpLT5yZW1vdmVDaGlsZChub2RlLmdldCgpLCBlYyk7CiAg
ICAgICAgIGlmIChub2RlQmVmb3JlQ29udGV4dCA9PSBub2RlKQpAQCAtNzA5LDcgKzcxMCw3IEBA
IHN0YXRpYyB2b2lkIHRyaW1GcmFnbWVudChEb2N1bWVudEZyYWdtZW4KIAogICAgIEFTU0VSVChu
b2RlQWZ0ZXJDb250ZXh0LT5wYXJlbnROb2RlKCkpOwogICAgIGZvciAoUmVmUHRyPE5vZGU+IG5v
ZGUgPSBub2RlQWZ0ZXJDb250ZXh0OyBub2RlOyBub2RlID0gbmV4dCkgewotICAgICAgICBuZXh0
ID0gbm9kZS0+dHJhdmVyc2VOZXh0U2libGluZygpOworICAgICAgICBuZXh0ID0gTm9kZVRyYXZl
cnNhbDo6bmV4dFNraXBwaW5nQ2hpbGRyZW4obm9kZS5nZXQoKSk7CiAgICAgICAgIG5vZGUtPnBh
cmVudE5vZGUoKS0+cmVtb3ZlQ2hpbGQobm9kZS5nZXQoKSwgZWMpOwogICAgICAgICBBU1NFUlQo
IWVjKTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL3Zpc2libGVfdW5pdHMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvdmlzaWJsZV91bml0cy5j
cHAJKHJldmlzaW9uIDEzNzIxMikKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvdmlzaWJsZV91
bml0cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJFbGVt
ZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSW5saW5lVGV4dEJveC5o
IgorI2luY2x1ZGUgIk5vZGVUcmF2ZXJzYWwuaCIKICNpbmNsdWRlICJQb3NpdGlvbi5oIgogI2lu
Y2x1ZGUgIlJlbmRlckJsb2NrLmgiCiAjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCkBAIC0xMTE2
LDE4ICsxMTE3LDE4IEBAIFZpc2libGVQb3NpdGlvbiBzdGFydE9mUGFyYWdyYXBoKGNvbnN0IFYK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBpZiAoYm91bmRhcnlDcm9zc2luZ1J1bGUgPT0g
Q2FuU2tpcE92ZXJFZGl0aW5nQm91bmRhcnkpIHsKICAgICAgICAgICAgIHdoaWxlIChuICYmIG4t
PnJlbmRlcmVySXNFZGl0YWJsZSgpICE9IHN0YXJ0Tm9kZS0+cmVuZGVyZXJJc0VkaXRhYmxlKCkp
Ci0gICAgICAgICAgICAgICAgbiA9IG4tPnRyYXZlcnNlUHJldmlvdXNOb2RlUG9zdE9yZGVyKHN0
YXJ0QmxvY2spOworICAgICAgICAgICAgICAgIG4gPSBOb2RlVHJhdmVyc2FsOjpwcmV2aW91c1Bv
c3RPcmRlcihuLCBzdGFydEJsb2NrKTsKICAgICAgICAgICAgIGlmICghbiB8fCAhbi0+aXNEZXNj
ZW5kYW50T2YoaGlnaGVzdFJvb3QpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CiAgICAgICAgIFJlbmRlck9iamVjdCAqciA9IG4tPnJlbmRlcmVyKCk7CiAgICAgICAgIGlmICgh
cikgewotICAgICAgICAgICAgbiA9IG4tPnRyYXZlcnNlUHJldmlvdXNOb2RlUG9zdE9yZGVyKHN0
YXJ0QmxvY2spOworICAgICAgICAgICAgbiA9IE5vZGVUcmF2ZXJzYWw6OnByZXZpb3VzUG9zdE9y
ZGVyKG4sIHN0YXJ0QmxvY2spOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KICAg
ICAgICAgUmVuZGVyU3R5bGUgKnN0eWxlID0gci0+c3R5bGUoKTsKICAgICAgICAgaWYgKHN0eWxl
LT52aXNpYmlsaXR5KCkgIT0gVklTSUJMRSkgewotICAgICAgICAgICAgbiA9IG4tPnRyYXZlcnNl
UHJldmlvdXNOb2RlUG9zdE9yZGVyKHN0YXJ0QmxvY2spOworICAgICAgICAgICAgbiA9IE5vZGVU
cmF2ZXJzYWw6OnByZXZpb3VzUG9zdE9yZGVyKG4sIHN0YXJ0QmxvY2spOwogICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgIH0KICAgICAgICAgCkBAIC0xMTUwLDEzICsxMTUxLDEzIEBAIFZp
c2libGVQb3NpdGlvbiBzdGFydE9mUGFyYWdyYXBoKGNvbnN0IFYKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIG5vZGUgPSBuOwogICAgICAgICAgICAgb2Zmc2V0ID0gMDsKLSAgICAgICAgICAg
IG4gPSBuLT50cmF2ZXJzZVByZXZpb3VzTm9kZVBvc3RPcmRlcihzdGFydEJsb2NrKTsKKyAgICAg
ICAgICAgIG4gPSBOb2RlVHJhdmVyc2FsOjpwcmV2aW91c1Bvc3RPcmRlcihuLCBzdGFydEJsb2Nr
KTsKICAgICAgICAgfSBlbHNlIGlmIChlZGl0aW5nSWdub3Jlc0NvbnRlbnQobikgfHwgaXNUYWJs
ZUVsZW1lbnQobikpIHsKICAgICAgICAgICAgIG5vZGUgPSBuOwogICAgICAgICAgICAgdHlwZSA9
IFBvc2l0aW9uOjpQb3NpdGlvbklzQmVmb3JlQW5jaG9yOwotICAgICAgICAgICAgbiA9IG4tPnBy
ZXZpb3VzU2libGluZygpID8gbi0+cHJldmlvdXNTaWJsaW5nKCkgOiBuLT50cmF2ZXJzZVByZXZp
b3VzTm9kZVBvc3RPcmRlcihzdGFydEJsb2NrKTsKKyAgICAgICAgICAgIG4gPSBuLT5wcmV2aW91
c1NpYmxpbmcoKSA/IG4tPnByZXZpb3VzU2libGluZygpIDogTm9kZVRyYXZlcnNhbDo6cHJldmlv
dXNQb3N0T3JkZXIobiwgc3RhcnRCbG9jayk7CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAg
biA9IG4tPnRyYXZlcnNlUHJldmlvdXNOb2RlUG9zdE9yZGVyKHN0YXJ0QmxvY2spOworICAgICAg
ICAgICAgbiA9IE5vZGVUcmF2ZXJzYWw6OnByZXZpb3VzUG9zdE9yZGVyKG4sIHN0YXJ0QmxvY2sp
OwogICAgIH0KIAogICAgIGlmICh0eXBlID09IFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5B
bmNob3IpIHsKQEAgLTExOTYsMTkgKzExOTcsMTkgQEAgVmlzaWJsZVBvc2l0aW9uIGVuZE9mUGFy
YWdyYXBoKGNvbnN0IFZpcwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGlmIChib3VuZGFy
eUNyb3NzaW5nUnVsZSA9PSBDYW5Ta2lwT3ZlckVkaXRpbmdCb3VuZGFyeSkgewogICAgICAgICAg
ICAgd2hpbGUgKG4gJiYgbi0+cmVuZGVyZXJJc0VkaXRhYmxlKCkgIT0gc3RhcnROb2RlLT5yZW5k
ZXJlcklzRWRpdGFibGUoKSkKLSAgICAgICAgICAgICAgICBuID0gbi0+dHJhdmVyc2VOZXh0Tm9k
ZShzdGF5SW5zaWRlQmxvY2spOworICAgICAgICAgICAgICAgIG4gPSBOb2RlVHJhdmVyc2FsOjpu
ZXh0KG4sIHN0YXlJbnNpZGVCbG9jayk7CiAgICAgICAgICAgICBpZiAoIW4gfHwgIW4tPmlzRGVz
Y2VuZGFudE9mKGhpZ2hlc3RSb290KSkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogCiAgICAgICAgIFJlbmRlck9iamVjdCAqciA9IG4tPnJlbmRlcmVyKCk7CiAgICAgICAgIGlm
ICghcikgewotICAgICAgICAgICAgbiA9IG4tPnRyYXZlcnNlTmV4dE5vZGUoc3RheUluc2lkZUJs
b2NrKTsKKyAgICAgICAgICAgIG4gPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG4sIHN0YXlJbnNpZGVC
bG9jayk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogICAgICAgICBSZW5kZXJT
dHlsZSAqc3R5bGUgPSByLT5zdHlsZSgpOwogICAgICAgICBpZiAoc3R5bGUtPnZpc2liaWxpdHko
KSAhPSBWSVNJQkxFKSB7Ci0gICAgICAgICAgICBuID0gbi0+dHJhdmVyc2VOZXh0Tm9kZShzdGF5
SW5zaWRlQmxvY2spOworICAgICAgICAgICAgbiA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobiwgc3Rh
eUluc2lkZUJsb2NrKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAgICAgICAg
IApAQCAtMTIzMCwxMyArMTIzMSwxMyBAQCBWaXNpYmxlUG9zaXRpb24gZW5kT2ZQYXJhZ3JhcGgo
Y29uc3QgVmlzCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBub2RlID0gbjsKICAgICAgICAg
ICAgIG9mZnNldCA9IHItPmNhcmV0TWF4T2Zmc2V0KCk7Ci0gICAgICAgICAgICBuID0gbi0+dHJh
dmVyc2VOZXh0Tm9kZShzdGF5SW5zaWRlQmxvY2spOworICAgICAgICAgICAgbiA9IE5vZGVUcmF2
ZXJzYWw6Om5leHQobiwgc3RheUluc2lkZUJsb2NrKTsKICAgICAgICAgfSBlbHNlIGlmIChlZGl0
aW5nSWdub3Jlc0NvbnRlbnQobikgfHwgaXNUYWJsZUVsZW1lbnQobikpIHsKICAgICAgICAgICAg
IG5vZGUgPSBuOwogICAgICAgICAgICAgdHlwZSA9IFBvc2l0aW9uOjpQb3NpdGlvbklzQWZ0ZXJB
bmNob3I7Ci0gICAgICAgICAgICBuID0gbi0+dHJhdmVyc2VOZXh0U2libGluZyhzdGF5SW5zaWRl
QmxvY2spOworICAgICAgICAgICAgbiA9IE5vZGVUcmF2ZXJzYWw6Om5leHRTa2lwcGluZ0NoaWxk
cmVuKG4sIHN0YXlJbnNpZGVCbG9jayk7CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgbiA9
IG4tPnRyYXZlcnNlTmV4dE5vZGUoc3RheUluc2lkZUJsb2NrKTsKKyAgICAgICAgICAgIG4gPSBO
b2RlVHJhdmVyc2FsOjpuZXh0KG4sIHN0YXlJbnNpZGVCbG9jayk7CiAgICAgfQogCiAgICAgaWYg
KHR5cGUgPT0gUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvcikKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRvck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL21hYy9FZGl0b3JNYWMubW0JKHJldmlzaW9uIDEzNzIxMikKKysrIFNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRvck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAt
MzksNiArMzksNyBAQAogI2ltcG9ydCAiSFRNTENvbnZlcnRlci5oIgogI2ltcG9ydCAiSFRNTE5h
bWVzLmgiCiAjaW1wb3J0ICJMZWdhY3lXZWJBcmNoaXZlLmgiCisjaW1wb3J0ICJOb2RlVHJhdmVy
c2FsLmgiCiAjaW1wb3J0ICJQYXN0ZWJvYXJkLmgiCiAjaW1wb3J0ICJQYXN0ZWJvYXJkU3RyYXRl
Z3kuaCIKICNpbXBvcnQgIlBsYXRmb3JtU3RyYXRlZ2llcy5oIgpAQCAtMTY4LDcgKzE2OSw3IEBA
IGNvbnN0IFNpbXBsZUZvbnREYXRhKiBFZGl0b3I6OmZvbnRGb3JTZWwKICAgICAgICAgTm9kZSog
cGFzdEVuZCA9IHJhbmdlLT5wYXN0TGFzdE5vZGUoKTsKICAgICAgICAgLy8gSW4gdGhlIGxvb3Ag
YmVsb3csIG4gc2hvdWxkIGV2ZW50dWFsbHkgbWF0Y2ggcGFzdEVuZCBhbmQgbm90IGJlY29tZSBu
aWwsIGJ1dCB3ZSd2ZSBzZWVuIGF0IGxlYXN0IG9uZQogICAgICAgICAvLyB1bnJlcHJvZHVjaWJs
ZSBjYXNlIHdoZXJlIHRoaXMgZGlkbid0IGhhcHBlbiwgc28gY2hlY2sgZm9yIG51bGwgYWxzby4K
LSAgICAgICAgZm9yIChOb2RlKiBub2RlID0gc3RhcnROb2RlOyBub2RlICYmIG5vZGUgIT0gcGFz
dEVuZDsgbm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoKSkgeworICAgICAgICBmb3IgKE5v
ZGUqIG5vZGUgPSBzdGFydE5vZGU7IG5vZGUgJiYgbm9kZSAhPSBwYXN0RW5kOyBub2RlID0gTm9k
ZVRyYXZlcnNhbDo6bmV4dChub2RlKSkgewogICAgICAgICAgICAgUmVuZGVyT2JqZWN0KiByZW5k
ZXJlciA9IG5vZGUtPnJlbmRlcmVyKCk7CiAgICAgICAgICAgICBpZiAoIXJlbmRlcmVyKQogICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ29s
bGVjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ29sbGVj
dGlvbi5jcHAJKHJldmlzaW9uIDEzNzIxMikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENv
bGxlY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAi
SFRNTE9wdGlvbkVsZW1lbnQuaCIKICNpbmNsdWRlICJOb2RlTGlzdC5oIgogI2luY2x1ZGUgIk5v
ZGVSYXJlRGF0YS5oIgorI2luY2x1ZGUgIk5vZGVUcmF2ZXJzYWwuaCIKIAogI2lmIEVOQUJMRShN
SUNST0RBVEEpCiAjaW5jbHVkZSAiSFRNTFByb3BlcnRpZXNDb2xsZWN0aW9uLmgiCkBAIC0yNjEs
OSArMjYyLDkgQEAgdGVtcGxhdGU8Ym9vbCBmb3J3YXJkPgogc3RhdGljIE5vZGUqIG5leHROb2Rl
KE5vZGUqIGJhc2UsIE5vZGUqIHByZXZpb3VzLCBib29sIG9ubHlJbmNsdWRlRGlyZWN0Q2hpbGRy
ZW4pCiB7CiAgICAgaWYgKGZvcndhcmQpCi0gICAgICAgIHJldHVybiBvbmx5SW5jbHVkZURpcmVj
dENoaWxkcmVuID8gcHJldmlvdXMtPm5leHRTaWJsaW5nKCkgOiBwcmV2aW91cy0+dHJhdmVyc2VO
ZXh0Tm9kZShiYXNlKTsKKyAgICAgICAgcmV0dXJuIG9ubHlJbmNsdWRlRGlyZWN0Q2hpbGRyZW4g
PyBwcmV2aW91cy0+bmV4dFNpYmxpbmcoKSA6IE5vZGVUcmF2ZXJzYWw6Om5leHQocHJldmlvdXMs
IGJhc2UpOwogICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIG9ubHlJbmNsdWRlRGlyZWN0Q2hpbGRy
ZW4gPyBwcmV2aW91cy0+cHJldmlvdXNTaWJsaW5nKCkgOiBwcmV2aW91cy0+dHJhdmVyc2VQcmV2
aW91c05vZGUoYmFzZSk7CisgICAgICAgIHJldHVybiBvbmx5SW5jbHVkZURpcmVjdENoaWxkcmVu
ID8gcHJldmlvdXMtPnByZXZpb3VzU2libGluZygpIDogTm9kZVRyYXZlcnNhbDo6cHJldmlvdXMo
cHJldmlvdXMsIGJhc2UpOwogfQogCiBzdGF0aWMgaW5saW5lIE5vZGUqIGxhc3REZXNjZW5kZW50
KE5vZGUqIG5vZGUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAkocmV2aXNp
b24gMTM3MjEyKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQ2LDYgKzQ2LDcgQEAKICNpbmNsdWRlICJIVE1MUGFyc2VySWRpb21zLmgi
CiAjaW5jbHVkZSAiSFRNTFRlbXBsYXRlRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxUZXh0Rm9y
bUNvbnRyb2xFbGVtZW50LmgiCisjaW5jbHVkZSAiTm9kZVRyYXZlcnNhbC5oIgogI2luY2x1ZGUg
IlJlbmRlcldvcmRCcmVhay5oIgogI2luY2x1ZGUgIlNjcmlwdEV2ZW50TGlzdGVuZXIuaCIKICNp
bmNsdWRlICJTZXR0aW5ncy5oIgpAQCAtODE2LDEzICs4MTcsMTMgQEAgc3RhdGljIHZvaWQgc2V0
SGFzRGlyQXV0b0ZsYWdSZWN1cnNpdmVseQogICAgICAgICBpZiAoZWxlbWVudEFmZmVjdHNEaXJl
Y3Rpb25hbGl0eShub2RlKSkgewogICAgICAgICAgICAgaWYgKG5vZGUgPT0gbGFzdE5vZGUpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgbm9kZSA9IG5vZGUtPnRyYXZlcnNl
TmV4dFNpYmxpbmcoZmlyc3ROb2RlKTsKKyAgICAgICAgICAgIG5vZGUgPSBOb2RlVHJhdmVyc2Fs
OjpuZXh0U2tpcHBpbmdDaGlsZHJlbihub2RlLCBmaXJzdE5vZGUpOwogICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgIH0KICAgICAgICAgbm9kZS0+c2V0U2VsZk9yQW5jZXN0b3JIYXNEaXJB
dXRvQXR0cmlidXRlKGZsYWcpOwogICAgICAgICBpZiAobm9kZSA9PSBsYXN0Tm9kZSkKICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgbm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoZmly
c3ROb2RlKTsKKyAgICAgICAgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9kZSwgZmlyc3RO
b2RlKTsKICAgICB9CiB9CiAKQEAgLTg2NCw3ICs4NjUsNyBAQCBUZXh0RGlyZWN0aW9uIEhUTUxF
bGVtZW50OjpkaXJlY3Rpb25hbGl0CiAgICAgICAgIC8vIFNraXAgYmRpLCBzY3JpcHQsIHN0eWxl
IGFuZCB0ZXh0IGZvcm0gY29udHJvbHMuCiAgICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShu
b2RlLT5ub2RlTmFtZSgpLCAiYmRpIikgfHwgbm9kZS0+aGFzVGFnTmFtZShzY3JpcHRUYWcpIHx8
IG5vZGUtPmhhc1RhZ05hbWUoc3R5bGVUYWcpIAogICAgICAgICAgICAgfHwgKG5vZGUtPmlzRWxl
bWVudE5vZGUoKSAmJiB0b0VsZW1lbnQobm9kZSktPmlzVGV4dEZvcm1Db250cm9sKCkpKSB7Ci0g
ICAgICAgICAgICBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0U2libGluZyh0aGlzKTsKKyAgICAg
ICAgICAgIG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0U2tpcHBpbmdDaGlsZHJlbihub2RlLCB0
aGlzKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKQEAgLTg3Miw3ICs4NzMs
NyBAQCBUZXh0RGlyZWN0aW9uIEhUTUxFbGVtZW50OjpkaXJlY3Rpb25hbGl0CiAgICAgICAgIGlm
IChub2RlLT5pc0VsZW1lbnROb2RlKCkpIHsKICAgICAgICAgICAgIEF0b21pY1N0cmluZyBkaXJB
dHRyaWJ1dGVWYWx1ZSA9IHRvRWxlbWVudChub2RlKS0+ZmFzdEdldEF0dHJpYnV0ZShkaXJBdHRy
KTsKICAgICAgICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShkaXJBdHRyaWJ1dGVWYWx1ZSwg
InJ0bCIpIHx8IGVxdWFsSWdub3JpbmdDYXNlKGRpckF0dHJpYnV0ZVZhbHVlLCAibHRyIikgfHwg
ZXF1YWxJZ25vcmluZ0Nhc2UoZGlyQXR0cmlidXRlVmFsdWUsICJhdXRvIikpIHsKLSAgICAgICAg
ICAgICAgICBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0U2libGluZyh0aGlzKTsKKyAgICAgICAg
ICAgICAgICBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dFNraXBwaW5nQ2hpbGRyZW4obm9kZSwg
dGhpcyk7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KQEAgLTg4Niw3ICs4ODcsNyBAQCBUZXh0RGlyZWN0aW9uIEhUTUxFbGVtZW50OjpkaXJlY3Rp
b25hbGl0CiAgICAgICAgICAgICAgICAgcmV0dXJuICh0ZXh0RGlyZWN0aW9uID09IFdURjo6VW5p
Y29kZTo6TGVmdFRvUmlnaHQpID8gTFRSIDogUlRMOwogICAgICAgICAgICAgfQogICAgICAgICB9
Ci0gICAgICAgIG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKHRoaXMpOworICAgICAgICBu
b2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dChub2RlLCB0aGlzKTsKICAgICB9CiAgICAgaWYgKHN0
cm9uZ0RpcmVjdGlvbmFsaXR5VGV4dE5vZGUpCiAgICAgICAgICpzdHJvbmdEaXJlY3Rpb25hbGl0
eVRleHROb2RlID0gMDsKQEAgLTkzMyw4ICs5MzQsOCBAQCB2b2lkIEhUTUxFbGVtZW50OjpjYWxj
dWxhdGVBbmRBZGp1c3REaXJlCiB2b2lkIEhUTUxFbGVtZW50OjphZGp1c3REaXJlY3Rpb25hbGl0
eUlmTmVlZGVkQWZ0ZXJDaGlsZHJlbkNoYW5nZWQoTm9kZSogYmVmb3JlQ2hhbmdlLCBpbnQgY2hp
bGRDb3VudERlbHRhKQogewogICAgIGlmICgoIWRvY3VtZW50KCkgfHwgZG9jdW1lbnQoKS0+cmVu
ZGVyZXIoKSkgJiYgY2hpbGRDb3VudERlbHRhIDwgMCkgewotICAgICAgICBOb2RlKiBub2RlID0g
YmVmb3JlQ2hhbmdlID8gYmVmb3JlQ2hhbmdlLT50cmF2ZXJzZU5leHRTaWJsaW5nKCkgOiAwOwot
ICAgICAgICBmb3IgKGludCBjb3VudGVyID0gMDsgbm9kZSAmJiBjb3VudGVyIDwgY2hpbGRDb3Vu
dERlbHRhOyBjb3VudGVyKyssIG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHRTaWJsaW5nKCkpIHsK
KyAgICAgICAgTm9kZSogbm9kZSA9IGJlZm9yZUNoYW5nZSA/IE5vZGVUcmF2ZXJzYWw6Om5leHRT
a2lwcGluZ0NoaWxkcmVuKGJlZm9yZUNoYW5nZSkgOiAwOworICAgICAgICBmb3IgKGludCBjb3Vu
dGVyID0gMDsgbm9kZSAmJiBjb3VudGVyIDwgY2hpbGRDb3VudERlbHRhOyBjb3VudGVyKyssIG5v
ZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0U2tpcHBpbmdDaGlsZHJlbihub2RlKSkgewogICAgICAg
ICAgICAgaWYgKGVsZW1lbnRBZmZlY3RzRGlyZWN0aW9uYWxpdHkobm9kZSkpCiAgICAgICAgICAg
ICAgICAgY29udGludWU7CiAKQEAgLTk0NSw5ICs5NDYsOSBAQCB2b2lkIEhUTUxFbGVtZW50Ojph
ZGp1c3REaXJlY3Rpb25hbGl0eUlmCiAgICAgaWYgKCFzZWxmT3JBbmNlc3Rvckhhc0RpckF1dG9B
dHRyaWJ1dGUoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgTm9kZSogb2xkTWFya2VkTm9kZSA9
IGJlZm9yZUNoYW5nZSA/IGJlZm9yZUNoYW5nZS0+dHJhdmVyc2VOZXh0U2libGluZygpIDogMDsK
KyAgICBOb2RlKiBvbGRNYXJrZWROb2RlID0gYmVmb3JlQ2hhbmdlID8gTm9kZVRyYXZlcnNhbDo6
bmV4dFNraXBwaW5nQ2hpbGRyZW4oYmVmb3JlQ2hhbmdlKSA6IDA7CiAgICAgd2hpbGUgKG9sZE1h
cmtlZE5vZGUgJiYgZWxlbWVudEFmZmVjdHNEaXJlY3Rpb25hbGl0eShvbGRNYXJrZWROb2RlKSkK
LSAgICAgICAgb2xkTWFya2VkTm9kZSA9IG9sZE1hcmtlZE5vZGUtPnRyYXZlcnNlTmV4dFNpYmxp
bmcodGhpcyk7CisgICAgICAgIG9sZE1hcmtlZE5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0U2tp
cHBpbmdDaGlsZHJlbihvbGRNYXJrZWROb2RlLCB0aGlzKTsKICAgICBpZiAob2xkTWFya2VkTm9k
ZSkKICAgICAgICAgc2V0SGFzRGlyQXV0b0ZsYWdSZWN1cnNpdmVseShvbGRNYXJrZWROb2RlLCBm
YWxzZSk7CiAKQEAgLTEwMjgsNyArMTAyOSw3IEBAIHZvaWQgSFRNTEVsZW1lbnQ6OmdldEl0ZW1S
ZWZFbGVtZW50cyhWZWMKICAgICAgICAgICAgIHJvb3ROb2RlID0gcGFyZW50OwogICAgIH0KIAot
ICAgIGZvciAoTm9kZSogY3VycmVudCA9IHJvb3ROb2RlOyBjdXJyZW50OyBjdXJyZW50ID0gY3Vy
cmVudC0+dHJhdmVyc2VOZXh0Tm9kZShyb290Tm9kZSkpIHsKKyAgICBmb3IgKE5vZGUqIGN1cnJl
bnQgPSByb290Tm9kZTsgY3VycmVudDsgY3VycmVudCA9IE5vZGVUcmF2ZXJzYWw6Om5leHQoY3Vy
cmVudCwgcm9vdE5vZGUpKSB7CiAgICAgICAgIGlmICghY3VycmVudC0+aXNIVE1MRWxlbWVudCgp
KQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIEhUTUxFbGVtZW50KiBlbGVtZW50ID0g
dG9IVE1MRWxlbWVudChjdXJyZW50KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZp
ZWxkU2V0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
RmllbGRTZXRFbGVtZW50LmNwcAkocmV2aXNpb24gMTM3MjEyKQorKysgU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MRmllbGRTZXRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjks
NyBAQAogI2luY2x1ZGUgIkhUTUxMZWdlbmRFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVz
LmgiCiAjaW5jbHVkZSAiSFRNTE9iamVjdEVsZW1lbnQuaCIKKyNpbmNsdWRlICJOb2RlVHJhdmVy
c2FsLmgiCiAjaW5jbHVkZSAiUmVuZGVyRmllbGRzZXQuaCIKICNpbmNsdWRlIDx3dGYvU3RkTGli
RXh0cmFzLmg+CiAKQEAgLTUwLDcgKzUxLDcgQEAgUGFzc1JlZlB0cjxIVE1MRmllbGRTZXRFbGVt
ZW50PiBIVE1MRmllbAogCiB2b2lkIEhUTUxGaWVsZFNldEVsZW1lbnQ6OmludmFsaWRhdGVEaXNh
YmxlZFN0YXRlVW5kZXIoRWxlbWVudCogYmFzZSkKIHsKLSAgICBmb3IgKE5vZGUqIG5vZGUgPSBi
YXNlLT5maXJzdENoaWxkKCk7IG5vZGU7IG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKGJh
c2UpKSB7CisgICAgZm9yIChOb2RlKiBub2RlID0gYmFzZS0+Zmlyc3RDaGlsZCgpOyBub2RlOyBu
b2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dChub2RlLCBiYXNlKSkgewogICAgICAgICBpZiAobm9k
ZS0+aXNFbGVtZW50Tm9kZSgpICYmIHRvRWxlbWVudChub2RlKS0+aXNGb3JtQ29udHJvbEVsZW1l
bnQoKSkKICAgICAgICAgICAgIHN0YXRpY19jYXN0PEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqPihu
b2RlKS0+YW5jZXN0b3JEaXNhYmxlZFN0YXRlV2FzQ2hhbmdlZCgpOwogICAgIH0KQEAgLTExMiw3
ICsxMTMsNyBAQCB2b2lkIEhUTUxGaWVsZFNldEVsZW1lbnQ6OnJlZnJlc2hFbGVtZW50CiAKICAg
ICBtX2Fzc29jaWF0ZWRFbGVtZW50cy5jbGVhcigpOwogCi0gICAgZm9yIChOb2RlKiBub2RlID0g
Zmlyc3RDaGlsZCgpOyBub2RlOyBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSh0aGlzKSkg
eworICAgIGZvciAoTm9kZSogbm9kZSA9IGZpcnN0Q2hpbGQoKTsgbm9kZTsgbm9kZSA9IE5vZGVU
cmF2ZXJzYWw6Om5leHQobm9kZSwgdGhpcykpIHsKICAgICAgICAgaWYgKCFub2RlLT5pc0VsZW1l
bnROb2RlKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIApJbmRleDogU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTEZvcm1FbGVtZW50LmNwcAkocmV2aXNpb24gMTM3MjEyKQorKysgU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw2ICs0Nyw3
IEBACiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5o
IgogI2luY2x1ZGUgIk5vZGVSZW5kZXJpbmdDb250ZXh0LmgiCisjaW5jbHVkZSAiTm9kZVRyYXZl
cnNhbC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJSZW5kZXJUZXh0Q29udHJvbC5o
IgogI2luY2x1ZGUgIlNjcmlwdEV2ZW50TGlzdGVuZXIuaCIKQEAgLTUyMiw5ICs1MjMsOSBAQCB1
bnNpZ25lZCBIVE1MRm9ybUVsZW1lbnQ6OmZvcm1FbGVtZW50SW5kCiAgICAgLy8gdGhlIGZvcm0n
cyB0cmVlIG9mIGNoaWxkcmVuOyB3ZSBkb24ndCB3YW50IHRvIHdhbGsgdGhlIGVudGlyZSB0cmVl
IGluIHRoYXQKICAgICAvLyBjb21tb24gY2FzZSB0aGF0IG9jY3VycyBkdXJpbmcgcGFyc2luZzsg
aW5zdGVhZCB3ZSdsbCBqdXN0IHJldHVybiBhIHZhbHVlCiAgICAgLy8gdGhhdCBzYXlzICJhZGQg
dGhpcyBmb3JtIGVsZW1lbnQgdG8gdGhlIGVuZCBvZiB0aGUgYXJyYXkiLgotICAgIGlmIChlbGVt
ZW50LT50cmF2ZXJzZU5leHROb2RlKHRoaXMpKSB7CisgICAgaWYgKE5vZGVUcmF2ZXJzYWw6Om5l
eHQoZWxlbWVudCwgdGhpcykpIHsKICAgICAgICAgdW5zaWduZWQgaSA9IG1fYXNzb2NpYXRlZEVs
ZW1lbnRzQmVmb3JlSW5kZXg7Ci0gICAgICAgIGZvciAoTm9kZSogbm9kZSA9IHRoaXM7IG5vZGU7
IG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKHRoaXMpKSB7CisgICAgICAgIGZvciAoTm9k
ZSogbm9kZSA9IHRoaXM7IG5vZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUsIHRo
aXMpKSB7CiAgICAgICAgICAgICBpZiAobm9kZSA9PSBlbGVtZW50KSB7CiAgICAgICAgICAgICAg
ICAgKyttX2Fzc29jaWF0ZWRFbGVtZW50c0FmdGVySW5kZXg7CiAgICAgICAgICAgICAgICAgcmV0
dXJuIGk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxMYWJlbEVsZW1lbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTExhYmVsRWxlbWVudC5jcHAJKHJl
dmlzaW9uIDEzNzIxMikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTExhYmVsRWxlbWVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJFdmVudE5hbWVz
LmgiCiAjaW5jbHVkZSAiRm9ybUFzc29jaWF0ZWRFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5h
bWVzLmgiCisjaW5jbHVkZSAiTm9kZVRyYXZlcnNhbC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKQEAgLTc1LDcgKzc2LDcgQEAgTGFiZWxhYmxlRWxlbWVudCogSFRNTExhYmVsRWxlbWVudDo6
Y29udAogICAgICAgICAvLyBwZXIgaHR0cDovL2Rldi53My5vcmcvaHRtbDUvc3BlYy9PdmVydmll
dy5odG1sI3RoZS1sYWJlbC1lbGVtZW50CiAgICAgICAgIC8vIHRoZSBmb3JtIGVsZW1lbnQgbXVz
dCBiZSAibGFiZWxhYmxlIGZvcm0tYXNzb2NpYXRlZCBlbGVtZW50Ii4KICAgICAgICAgTm9kZSog
bm9kZSA9IHRoaXM7Ci0gICAgICAgIHdoaWxlICgobm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5v
ZGUodGhpcykpKSB7CisgICAgICAgIHdoaWxlICgobm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQo
bm9kZSwgdGhpcykpKSB7CiAgICAgICAgICAgICBpZiAoTGFiZWxhYmxlRWxlbWVudCogZWxlbWVu
dCA9IG5vZGVBc0xhYmVsYWJsZUVsZW1lbnQobm9kZSkpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IGVsZW1lbnQ7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTExlZ2Vu
ZEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTExlZ2Vu
ZEVsZW1lbnQuY3BwCShyZXZpc2lvbiAxMzcyMTIpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxMZWdlbmRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogI2lu
Y2x1ZGUgIkhUTUxGaWVsZFNldEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MRm9ybUNvbnRyb2xF
bGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiTm9kZVRyYXZlcnNh
bC5oIgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewpAQCAtNTgsNyArNTksNyBAQCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiBIVE1MTGVnZW5kRWxl
bWVuCiAgICAgLy8gRmluZCBmaXJzdCBmb3JtIGVsZW1lbnQgaW5zaWRlIHRoZSBmaWVsZHNldCB0
aGF0IGlzIG5vdCBhIGxlZ2VuZCBlbGVtZW50LgogICAgIC8vIEZJWE1FOiBTaG91bGQgd2UgY29u
c2lkZXIgdGFiaW5kZXg/CiAgICAgTm9kZSogbm9kZSA9IGZpZWxkc2V0OwotICAgIHdoaWxlICgo
bm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoZmllbGRzZXQpKSkgeworICAgIHdoaWxlICgo
bm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9kZSwgZmllbGRzZXQpKSkgewogICAgICAgICBp
ZiAobm9kZS0+aXNFbGVtZW50Tm9kZSgpKSB7CiAgICAgICAgICAgICBFbGVtZW50KiBlbGVtZW50
ID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUpOwogICAgICAgICAgICAgaWYgKGVsZW1lbnQt
PmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxN
YXBFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNYXBF
bGVtZW50LmNwcAkocmV2aXNpb24gMTM3MjEyKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
TWFwRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRl
ICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCiAjaW5jbHVkZSAiSW50
U2l6ZS5oIgorI2luY2x1ZGUgIk5vZGVUcmF2ZXJzYWwuaCIKICNpbmNsdWRlICJSZW5kZXJPYmpl
Y3QuaCIKIAogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKQEAgLTYyLDcgKzYzLDcgQEAgYm9vbCBIVE1M
TWFwRWxlbWVudDo6bWFwTW91c2VFdmVudChMYXlvdQogewogICAgIEhUTUxBcmVhRWxlbWVudCog
ZGVmYXVsdEFyZWEgPSAwOwogICAgIE5vZGUgKm5vZGUgPSB0aGlzOwotICAgIHdoaWxlICgobm9k
ZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUodGhpcykpKSB7CisgICAgd2hpbGUgKChub2RlID0g
Tm9kZVRyYXZlcnNhbDo6bmV4dChub2RlLCB0aGlzKSkpIHsKICAgICAgICAgaWYgKG5vZGUtPmhh
c1RhZ05hbWUoYXJlYVRhZykpIHsKICAgICAgICAgICAgIEhUTUxBcmVhRWxlbWVudCogYXJlYUVs
dCA9IHN0YXRpY19jYXN0PEhUTUxBcmVhRWxlbWVudCo+KG5vZGUpOwogICAgICAgICAgICAgaWYg
KGFyZWFFbHQtPmlzRGVmYXVsdCgpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxO
YW1lQ29sbGVjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
TmFtZUNvbGxlY3Rpb24uY3BwCShyZXZpc2lvbiAxMzcyMTIpCisrKyBTb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxOYW1lQ29sbGVjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcg
QEAKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJIVE1MT2JqZWN0RWxlbWVudC5o
IgogI2luY2x1ZGUgIk5vZGVSYXJlRGF0YS5oIgorI2luY2x1ZGUgIk5vZGVUcmF2ZXJzYWwuaCIK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC01Nyw5ICs1OCw5IEBAIEVsZW1lbnQqIEhUTUxO
YW1lQ29sbGVjdGlvbjo6dmlydHVhbEl0ZW0KICAgICBpZiAoIXByZXZpb3VzKQogICAgICAgICBj
dXJyZW50ID0gb3duZXJOb2RlKCktPmZpcnN0Q2hpbGQoKTsKICAgICBlbHNlCi0gICAgICAgIGN1
cnJlbnQgPSBwcmV2aW91cy0+dHJhdmVyc2VOZXh0Tm9kZShvd25lck5vZGUoKSk7CisgICAgICAg
IGN1cnJlbnQgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KHByZXZpb3VzLCBvd25lck5vZGUoKSk7CiAK
LSAgICBmb3IgKDsgY3VycmVudDsgY3VycmVudCA9IGN1cnJlbnQtPnRyYXZlcnNlTmV4dE5vZGUo
b3duZXJOb2RlKCkpKSB7CisgICAgZm9yICg7IGN1cnJlbnQ7IGN1cnJlbnQgPSBOb2RlVHJhdmVy
c2FsOjpuZXh0KGN1cnJlbnQsIG93bmVyTm9kZSgpKSkgewogICAgICAgICBpZiAoIWN1cnJlbnQt
PmlzRWxlbWVudE5vZGUoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBFbGVtZW50
KiBlID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KGN1cnJlbnQpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5jcHAJKHJldmlzaW9uIDEzNzIxMikKKysrIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTE9wdGlvbkVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
Niw2ICszNiw3IEBACiAjaW5jbHVkZSAiSFRNTFNlbGVjdEVsZW1lbnQuaCIKICNpbmNsdWRlICJO
b2RlUmVuZGVyU3R5bGUuaCIKICNpbmNsdWRlICJOb2RlUmVuZGVyaW5nQ29udGV4dC5oIgorI2lu
Y2x1ZGUgIk5vZGVUcmF2ZXJzYWwuaCIKICNpbmNsdWRlICJSZW5kZXJNZW51TGlzdC5oIgogI2lu
Y2x1ZGUgIlJlbmRlclRoZW1lLmgiCiAjaW5jbHVkZSAiU2NyaXB0RWxlbWVudC5oIgpAQCAtMzgz
LDkgKzM4NCw5IEBAIFN0cmluZyBIVE1MT3B0aW9uRWxlbWVudDo6Y29sbGVjdE9wdGlvbkkKICAg
ICAgICAgICAgIHRleHQuYXBwZW5kKG5vZGUtPm5vZGVWYWx1ZSgpKTsKICAgICAgICAgLy8gVGV4
dCBub2RlcyBpbnNpZGUgc2NyaXB0IGVsZW1lbnRzIGFyZSBub3QgcGFydCBvZiB0aGUgb3B0aW9u
IHRleHQuCiAgICAgICAgIGlmIChub2RlLT5pc0VsZW1lbnROb2RlKCkgJiYgdG9TY3JpcHRFbGVt
ZW50KHRvRWxlbWVudChub2RlKSkpCi0gICAgICAgICAgICBub2RlID0gbm9kZS0+dHJhdmVyc2VO
ZXh0U2libGluZyh0aGlzKTsKKyAgICAgICAgICAgIG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0
U2tpcHBpbmdDaGlsZHJlbihub2RlLCB0aGlzKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAg
bm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUodGhpcyk7CisgICAgICAgICAgICBub2RlID0g
Tm9kZVRyYXZlcnNhbDo6bmV4dChub2RlLCB0aGlzKTsKICAgICB9CiAgICAgcmV0dXJuIHRleHQu
dG9TdHJpbmcoKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFByb3BlcnRpZXND
b2xsZWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQcm9w
ZXJ0aWVzQ29sbGVjdGlvbi5jcHAJKHJldmlzaW9uIDEzNzIxMikKKysrIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTFByb3BlcnRpZXNDb2xsZWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzYs
NyArNzYsOCBAQCBzdGF0aWMgTm9kZSogbmV4dE5vZGVXaXRoUHJvcGVydHkoTm9kZSogCiAgICAg
Ly8gdGhhdCBkZWNsYXJlcyB0aGUgcHJvcGVydHkuIElmIHRoZSBwcm9wZXJ0eSBoYXMgYW4gaXRl
bXNjb3BlIGF0dHJpYnV0ZSBzcGVjaWZpZWQgdGhlbiB3ZSBuZWVkCiAgICAgLy8gdG8gdHJhdmVy
c2UgdGhlIG5leHQgc2libGluZy4KICAgICByZXR1cm4gcHJldmlvdXMgPT0gb3duZXJOb2RlIHx8
IChwcmV2aW91cy0+aXNIVE1MRWxlbWVudCgpICYmICF0b0hUTUxFbGVtZW50KHByZXZpb3VzKS0+
ZmFzdEhhc0F0dHJpYnV0ZShpdGVtc2NvcGVBdHRyKSkKLSAgICAgICAgICAgID8gcHJldmlvdXMt
PnRyYXZlcnNlTmV4dE5vZGUocm9vdE5vZGUpIDogcHJldmlvdXMtPnRyYXZlcnNlTmV4dFNpYmxp
bmcocm9vdE5vZGUpOworICAgICAgICA/IHByZXZpb3VzLT5Ob2RlVHJhdmVyc2FsOjpuZXh0KHJv
b3ROb2RlKQorICAgICAgICA6IHByZXZpb3VzLT5Ob2RlVHJhdmVyc2FsOjpuZXh0U2libGluZyhy
b290Tm9kZSk7CiB9CiAKIEVsZW1lbnQqIEhUTUxQcm9wZXJ0aWVzQ29sbGVjdGlvbjo6dmlydHVh
bEl0ZW1BZnRlcih1bnNpZ25lZCYgb2Zmc2V0SW5BcnJheSwgRWxlbWVudCogcHJldmlvdXNJdGVt
KSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5jcHAJ
KHJldmlzaW9uIDEzNzIxMikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVsZW1l
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw2ICs0NSw3IEBACiAjaW5jbHVkZSAiTG9jYWxp
emVkU3RyaW5ncy5oIgogI2luY2x1ZGUgIk1vdXNlRXZlbnQuaCIKICNpbmNsdWRlICJOb2RlUmVu
ZGVyaW5nQ29udGV4dC5oIgorI2luY2x1ZGUgIk5vZGVUcmF2ZXJzYWwuaCIKICNpbmNsdWRlICJQ
YWdlLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGlzdEJveC5oIgogI2luY2x1ZGUgIlJlbmRlck1lbnVM
aXN0LmgiCkBAIC03MzYsNyArNzM3LDcgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6cmVjYWxj
TGlzdEl0ZW1zKAogICAgIEhUTUxPcHRpb25FbGVtZW50KiBmaXJzdE9wdGlvbiA9IDA7CiAgICAg
Zm9yIChOb2RlKiBjdXJyZW50Tm9kZSA9IHRoaXMtPmZpcnN0Q2hpbGQoKTsgY3VycmVudE5vZGU7
KSB7CiAgICAgICAgIGlmICghY3VycmVudE5vZGUtPmlzSFRNTEVsZW1lbnQoKSkgewotICAgICAg
ICAgICAgY3VycmVudE5vZGUgPSBjdXJyZW50Tm9kZS0+dHJhdmVyc2VOZXh0U2libGluZyh0aGlz
KTsKKyAgICAgICAgICAgIGN1cnJlbnROb2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dFNraXBwaW5n
Q2hpbGRyZW4oY3VycmVudE5vZGUsIHRoaXMpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgIH0KIApAQCAtNzc1LDEyICs3NzYsMTIgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6cmVj
YWxjTGlzdEl0ZW1zKAogICAgICAgICAgICAgbV9saXN0SXRlbXMuYXBwZW5kKGN1cnJlbnQpOwog
CiAgICAgICAgIC8vIEluIGNvbmZvcm1pbmcgSFRNTCBjb2RlLCBvbmx5IDxvcHRncm91cD4gYW5k
IDxvcHRpb24+IHdpbGwgYmUgZm91bmQKLSAgICAgICAgLy8gd2l0aGluIGEgPHNlbGVjdD4uIFdl
IGNhbGwgdHJhdmVyc2VOZXh0U2libGluZyBzbyB0aGF0IHdlIG9ubHkgc3RlcAorICAgICAgICAv
LyB3aXRoaW4gYSA8c2VsZWN0Pi4gV2UgY2FsbCBOb2RlVHJhdmVyc2FsOjpuZXh0U2libGluZyBz
byB0aGF0IHdlIG9ubHkgc3RlcAogICAgICAgICAvLyBpbnRvIHRob3NlIHRhZ3MgdGhhdCB3ZSBj
aG9vc2UgdG8uIEZvciB3ZWItY29tcGF0LCB3ZSBzaG91bGQgY29wZQogICAgICAgICAvLyB3aXRo
IHRoZSBjYXNlIHdoZXJlIG9kZCB0YWdzIGxpa2UgYSA8ZGl2PiBoYXZlIGJlZW4gYWRkZWQgYnV0
IHdlCiAgICAgICAgIC8vIGhhbmRsZSB0aGlzIGJlY2F1c2Ugc3VjaCB0YWdzIGhhdmUgYWxyZWFk
eSBiZWVuIHJlbW92ZWQgZnJvbSB0aGUKICAgICAgICAgLy8gPHNlbGVjdD4ncyBzdWJ0cmVlIGF0
IHRoaXMgcG9pbnQuCi0gICAgICAgIGN1cnJlbnROb2RlID0gY3VycmVudE5vZGUtPnRyYXZlcnNl
TmV4dFNpYmxpbmcodGhpcyk7CisgICAgICAgIGN1cnJlbnROb2RlID0gTm9kZVRyYXZlcnNhbDo6
bmV4dFNraXBwaW5nQ2hpbGRyZW4oY3VycmVudE5vZGUsIHRoaXMpOwogICAgIH0KIAogICAgIGlm
ICghZm91bmRTZWxlY3RlZCAmJiBtX3NpemUgPD0gMSAmJiBmaXJzdE9wdGlvbiAmJiAhZmlyc3RP
cHRpb24tPnNlbGVjdGVkKCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0Rm9y
bUNvbnRyb2xFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50LmNwcAkocmV2aXNpb24gMTM3MjEyKQorKysgU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCiAjaW5j
bHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiTm9kZVJlbmRlcmluZ0NvbnRleHQuaCIKKyNp
bmNsdWRlICJOb2RlVHJhdmVyc2FsLmgiCiAjaW5jbHVkZSAiUmVuZGVyQm94LmgiCiAjaW5jbHVk
ZSAiUmVuZGVyVGV4dENvbnRyb2wuaCIKICNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgpAQCAtNDYy
LDcgKzQ2Myw3IEBAIFBhc3NSZWZQdHI8UmFuZ2U+IEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGUKICAg
ICBpbnQgb2Zmc2V0ID0gMDsKICAgICBOb2RlKiBzdGFydE5vZGUgPSAwOwogICAgIE5vZGUqIGVu
ZE5vZGUgPSAwOwotICAgIGZvciAoTm9kZSogbm9kZSA9IGlubmVyVGV4dC0+Zmlyc3RDaGlsZCgp
OyBub2RlOyBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZShpbm5lclRleHQpKSB7CisgICAg
Zm9yIChOb2RlKiBub2RlID0gaW5uZXJUZXh0LT5maXJzdENoaWxkKCk7IG5vZGU7IG5vZGUgPSBO
b2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUsIGlubmVyVGV4dCkpIHsKICAgICAgICAgQVNTRVJUKCFu
b2RlLT5maXJzdENoaWxkKCkpOwogICAgICAgICBBU1NFUlQobm9kZS0+aXNUZXh0Tm9kZSgpIHx8
IG5vZGUtPmhhc1RhZ05hbWUoYnJUYWcpKTsKICAgICAgICAgaW50IGxlbmd0aCA9IG5vZGUtPmlz
VGV4dE5vZGUoKSA/IGxhc3RPZmZzZXRJbk5vZGUobm9kZSkgOiAxOwpAQCAtNTYxLDcgKzU2Miw3
IEBAIFN0cmluZyBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6aW5uZXIKICAgICAgICAgcmV0
dXJuIGVtcHR5U3RyaW5nKCk7CiAKICAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsKLSAgICBmb3Ig
KE5vZGUqIG5vZGUgPSBpbm5lclRleHQ7IG5vZGU7IG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHRO
b2RlKGlubmVyVGV4dCkpIHsKKyAgICBmb3IgKE5vZGUqIG5vZGUgPSBpbm5lclRleHQ7IG5vZGU7
IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUsIGlubmVyVGV4dCkpIHsKICAgICAgICAg
aWYgKG5vZGUtPmhhc1RhZ05hbWUoYnJUYWcpKQogICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChu
ZXdsaW5lQ2hhcmFjdGVyKTsKICAgICAgICAgZWxzZSBpZiAobm9kZS0+aXNUZXh0Tm9kZSgpKQpA
QCAtNjA4LDcgKzYwOSw3IEBAIFN0cmluZyBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6dmFs
dWUKICAgICBnZXROZXh0U29mdEJyZWFrKGxpbmUsIGJyZWFrTm9kZSwgYnJlYWtPZmZzZXQpOwog
CiAgICAgU3RyaW5nQnVpbGRlciByZXN1bHQ7Ci0gICAgZm9yIChOb2RlKiBub2RlID0gaW5uZXJU
ZXh0LT5maXJzdENoaWxkKCk7IG5vZGU7IG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKGlu
bmVyVGV4dCkpIHsKKyAgICBmb3IgKE5vZGUqIG5vZGUgPSBpbm5lclRleHQtPmZpcnN0Q2hpbGQo
KTsgbm9kZTsgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9kZSwgaW5uZXJUZXh0KSkgewog
ICAgICAgICBpZiAobm9kZS0+aGFzVGFnTmFtZShiclRhZykpCiAgICAgICAgICAgICByZXN1bHQu
YXBwZW5kKG5ld2xpbmVDaGFyYWN0ZXIpOwogICAgICAgICBlbHNlIGlmIChub2RlLT5pc1RleHRO
b2RlKCkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvUmFkaW9JbnB1dFR5cGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvUmFkaW9JbnB1dFR5cGUuY3BwCShyZXZp
c2lvbiAxMzcyMTIpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL1JhZGlvSW5wdXRUeXBlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIktleWJvYXJkRXZlbnQu
aCIKICNpbmNsdWRlICJMb2NhbGl6ZWRTdHJpbmdzLmgiCiAjaW5jbHVkZSAiTW91c2VFdmVudC5o
IgorI2luY2x1ZGUgIk5vZGVUcmF2ZXJzYWwuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2lu
Y2x1ZGUgIlNwYXRpYWxOYXZpZ2F0aW9uLmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4K
QEAgLTg0LDcgKzg1LDcgQEAgdm9pZCBSYWRpb0lucHV0VHlwZTo6aGFuZGxlS2V5ZG93bkV2ZW50
KAogICAgIC8vIFdlIGNhbiBvbmx5IHN0YXkgd2l0aGluIHRoZSBmb3JtJ3MgY2hpbGRyZW4gaWYg
dGhlIGZvcm0gaGFzbid0IGJlZW4gZGVtb3RlZCB0byBhIGxlYWYgYmVjYXVzZQogICAgIC8vIG9m
IG1hbGZvcm1lZCBIVE1MLgogICAgIE5vZGUqIG5vZGUgPSBlbGVtZW50KCk7Ci0gICAgd2hpbGUg
KChub2RlID0gKGZvcndhcmQgPyBub2RlLT50cmF2ZXJzZU5leHROb2RlKCkgOiBub2RlLT50cmF2
ZXJzZVByZXZpb3VzTm9kZSgpKSkpIHsKKyAgICB3aGlsZSAoKG5vZGUgPSAoZm9yd2FyZCA/IE5v
ZGVUcmF2ZXJzYWw6Om5leHQobm9kZSkgOiBOb2RlVHJhdmVyc2FsOjpwcmV2aW91cyhub2RlKSkp
KSB7CiAgICAgICAgIC8vIE9uY2Ugd2UgZW5jb3VudGVyIGEgZm9ybSBlbGVtZW50LCB3ZSBrbm93
IHdlJ3JlIHRocm91Z2guCiAgICAgICAgIGlmIChub2RlLT5oYXNUYWdOYW1lKGZvcm1UYWcpKQog
ICAgICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9Db250
ZW50RGlzdHJpYnV0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hh
ZG93L0NvbnRlbnREaXN0cmlidXRvci5jcHAJKHJldmlzaW9uIDEzNzIxMikKKysrIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvc2hhZG93L0NvbnRlbnREaXN0cmlidXRvci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJFbGVtZW50U2hhZG93LmgiCiAjaW5jbHVkZSAi
SFRNTENvbnRlbnRFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTFNoYWRvd0VsZW1lbnQuaCIKKyNp
bmNsdWRlICJOb2RlVHJhdmVyc2FsLmgiCiAjaW5jbHVkZSAiU2hhZG93Um9vdC5oIgogCiAKQEAg
LTEwMSw3ICsxMDIsNyBAQCBjb25zdCBWZWN0b3I8SW5zZXJ0aW9uUG9pbnQqPiYgU2hhZG93Um9v
CiAgICAgaWYgKCFzaGFkb3dSb290LT5oYXNJbnNlcnRpb25Qb2ludCgpKQogICAgICAgICByZXR1
cm4gbV9pbnNlcnRpb25Qb2ludExpc3Q7CiAKLSAgICBmb3IgKE5vZGUqIG5vZGUgPSBzaGFkb3dS
b290OyBub2RlOyBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZShzaGFkb3dSb290KSkgewor
ICAgIGZvciAoTm9kZSogbm9kZSA9IHNoYWRvd1Jvb3Q7IG5vZGU7IG5vZGUgPSBOb2RlVHJhdmVy
c2FsOjpuZXh0KG5vZGUsIHNoYWRvd1Jvb3QpKSB7CiAgICAgICAgIGlmIChub2RlLT5pc0luc2Vy
dGlvblBvaW50KCkpCiAgICAgICAgICAgICBtX2luc2VydGlvblBvaW50TGlzdC5hcHBlbmQodG9J
bnNlcnRpb25Qb2ludChub2RlKSk7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckRPTUFnZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCShyZXZpc2lvbiAxMzcyMTIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC03Niw2ICs3Niw3IEBACiAjaW5jbHVkZSAiTXV0YXRpb25FdmVudC5oIgogI2luY2x1ZGUg
Ik5vZGUuaCIKICNpbmNsdWRlICJOb2RlTGlzdC5oIgorI2luY2x1ZGUgIk5vZGVUcmF2ZXJzYWwu
aCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUGFzdGVib2FyZC5oIgogI2luY2x1ZGUg
IlJlbmRlclN0eWxlLmgiCkBAIC04NDEsNyArODQyLDcgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2Vu
dDo6cGVyZm9ybVNlYXJjaChFcgogICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgLy8g
TWFudWFsIHBsYWluIHRleHQgc2VhcmNoLgotICAgICAgICB3aGlsZSAoKG5vZGUgPSBub2RlLT50
cmF2ZXJzZU5leHROb2RlKGRvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQoKSkpKSB7CisgICAgICAg
IHdoaWxlICgobm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9kZSwgZG9jdW1lbnQtPmRvY3Vt
ZW50RWxlbWVudCgpKSkpIHsKICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+bm9kZVR5cGUoKSkg
ewogICAgICAgICAgICAgY2FzZSBOb2RlOjpURVhUX05PREU6CiAgICAgICAgICAgICBjYXNlIE5v
ZGU6OkNPTU1FTlRfTk9ERToKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JNZW1vcnlBZ2VudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3Rvck1lbW9yeUFnZW50LmNwcAkocmV2aXNpb24gMTM3MjEyKQorKysgU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvck1lbW9yeUFnZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDksNiArNDksNyBAQAogI2luY2x1ZGUgIk1lbW9yeUluc3RydW1lbnRhdGlvbkltcGwuaCIK
ICNpbmNsdWRlICJNZW1vcnlVc2FnZVN1cHBvcnQuaCIKICNpbmNsdWRlICJOb2RlLmgiCisjaW5j
bHVkZSAiTm9kZVRyYXZlcnNhbC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJTY3Jp
cHRHQ0V2ZW50LmgiCiAjaW5jbHVkZSAiU2NyaXB0UHJvZmlsZXIuaCIKQEAgLTIzOSw3ICsyNDAs
NyBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgTm9kZSogY3VycmVudE5vZGUgPSByb290Tm9k
ZTsKICAgICAgICAgY29sbGVjdExpc3RlbmVyc0luZm8ocm9vdE5vZGUpOwotICAgICAgICB3aGls
ZSAoKGN1cnJlbnROb2RlID0gY3VycmVudE5vZGUtPnRyYXZlcnNlTmV4dE5vZGUocm9vdE5vZGUp
KSkgeworICAgICAgICB3aGlsZSAoKGN1cnJlbnROb2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dChj
dXJyZW50Tm9kZSwgcm9vdE5vZGUpKSkgewogICAgICAgICAgICAgKyttX3RvdGFsTm9kZUNvdW50
OwogICAgICAgICAgICAgY29sbGVjdE5vZGVTdGF0aXN0aWNzKGN1cnJlbnROb2RlKTsKICAgICAg
ICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9Gb2N1c0NvbnRyb2xsZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRm9jdXNDb250cm9sbGVyLmNwcAkocmV2aXNp
b24gMTM3MjEyKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9Gb2N1c0NvbnRyb2xsZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00OCw2ICs0OCw3IEBACiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAj
aW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgogI2luY2x1ZGUgIktleWJvYXJkRXZlbnQuaCIKKyNp
bmNsdWRlICJOb2RlVHJhdmVyc2FsLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlJh
bmdlLmgiCiAjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCkBAIC03NzUsNyArNzc2LDcgQEAgdm9p
ZCBGb2N1c0NvbnRyb2xsZXI6OmZpbmRGb2N1c0NhbmRpZGF0ZQogICAgIGN1cnJlbnQuZm9jdXNh
YmxlTm9kZSA9IGZvY3VzZWROb2RlOwogICAgIGN1cnJlbnQudmlzaWJsZU5vZGUgPSBmb2N1c2Vk
Tm9kZTsKIAotICAgIGZvciAoOyBub2RlOyBub2RlID0gKG5vZGUtPmlzRnJhbWVPd25lckVsZW1l
bnQoKSB8fCBjYW5TY3JvbGxJbkRpcmVjdGlvbihub2RlLCBkaXJlY3Rpb24pKSA/IG5vZGUtPnRy
YXZlcnNlTmV4dFNpYmxpbmcoY29udGFpbmVyKSA6IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoY29u
dGFpbmVyKSkgeworICAgIGZvciAoOyBub2RlOyBub2RlID0gKG5vZGUtPmlzRnJhbWVPd25lckVs
ZW1lbnQoKSB8fCBjYW5TY3JvbGxJbkRpcmVjdGlvbihub2RlLCBkaXJlY3Rpb24pKSA/IE5vZGVU
cmF2ZXJzYWw6Om5leHRTa2lwcGluZ0NoaWxkcmVuKG5vZGUsIGNvbnRhaW5lcikgOiBOb2RlVHJh
dmVyc2FsOjpuZXh0KG5vZGUsIGNvbnRhaW5lcikpIHsKICAgICAgICAgaWYgKG5vZGUgPT0gZm9j
dXNlZE5vZGUpCiAgICAgICAgICAgICBjb250aW51ZTsKIApJbmRleDogU291cmNlL1dlYkNvcmUv
cGFnZS9GcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5j
cHAJKHJldmlzaW9uIDEzNzIxMikKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02Myw2ICs2Myw3IEBACiAjaW5jbHVkZSAiTWVkaWFGZWF0dXJlTmFt
ZXMuaCIKICNpbmNsdWRlICJOYXZpZ2F0b3IuaCIKICNpbmNsdWRlICJOb2RlTGlzdC5oIgorI2lu
Y2x1ZGUgIk5vZGVUcmF2ZXJzYWwuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUGFn
ZUNhY2hlLmgiCiAjaW5jbHVkZSAiUGFnZUdyb3VwLmgiCkBAIC0zNzUsNyArMzc2LDcgQEAgU3Ry
aW5nIEZyYW1lOjpzZWFyY2hGb3JMYWJlbHNBYm92ZUNlbGwoUgogICAgIGlmIChhYm92ZUNlbGwp
IHsKICAgICAgICAgLy8gc2VhcmNoIHdpdGhpbiB0aGUgYWJvdmUgY2VsbCB3ZSBmb3VuZCBmb3Ig
YSBtYXRjaAogICAgICAgICBzaXplX3QgbGVuZ3RoU2VhcmNoZWQgPSAwOyAgICAKLSAgICAgICAg
Zm9yIChOb2RlKiBuID0gYWJvdmVDZWxsLT5maXJzdENoaWxkKCk7IG47IG4gPSBuLT50cmF2ZXJz
ZU5leHROb2RlKGFib3ZlQ2VsbCkpIHsKKyAgICAgICAgZm9yIChOb2RlKiBuID0gYWJvdmVDZWxs
LT5maXJzdENoaWxkKCk7IG47IG4gPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG4sIGFib3ZlQ2VsbCkp
IHsKICAgICAgICAgICAgIGlmIChuLT5pc1RleHROb2RlKCkgJiYgbi0+cmVuZGVyZXIoKSAmJiBu
LT5yZW5kZXJlcigpLT5zdHlsZSgpLT52aXNpYmlsaXR5KCkgPT0gVklTSUJMRSkgewogICAgICAg
ICAgICAgICAgIC8vIEZvciBlYWNoIHRleHQgY2h1bmssIHJ1biB0aGUgcmVnZXhwCiAgICAgICAg
ICAgICAgICAgU3RyaW5nIG5vZGVTdHJpbmcgPSBuLT5ub2RlVmFsdWUoKTsKQEAgLTQxNiwxMCAr
NDE3LDcgQEAgU3RyaW5nIEZyYW1lOjpzZWFyY2hGb3JMYWJlbHNCZWZvcmVFbGVtZQogICAgIC8v
IHdhbGsgYmFja3dhcmRzIGluIHRoZSBub2RlIHRyZWUsIHVudGlsIGFub3RoZXIgZWxlbWVudCwg
b3IgZm9ybSwgb3IgZW5kIG9mIHRyZWUKICAgICBpbnQgdW5zaWduZWQgbGVuZ3RoU2VhcmNoZWQg
PSAwOwogICAgIE5vZGUqIG47Ci0gICAgZm9yIChuID0gZWxlbWVudC0+dHJhdmVyc2VQcmV2aW91
c05vZGUoKTsKLSAgICAgICAgIG4gJiYgbGVuZ3RoU2VhcmNoZWQgPCBjaGFyc1NlYXJjaGVkVGhy
ZXNob2xkOwotICAgICAgICAgbiA9IG4tPnRyYXZlcnNlUHJldmlvdXNOb2RlKCkpCi0gICAgewor
ICAgIGZvciAobiA9IE5vZGVUcmF2ZXJzYWw6OnByZXZpb3VzKGVsZW1lbnQpOyBuICYmIGxlbmd0
aFNlYXJjaGVkIDwgY2hhcnNTZWFyY2hlZFRocmVzaG9sZDsgbiA9IE5vZGVUcmF2ZXJzYWw6OnBy
ZXZpb3VzKG4pKSB7CiAgICAgICAgIGlmIChuLT5oYXNUYWdOYW1lKGZvcm1UYWcpCiAgICAgICAg
ICAgICB8fCAobi0+aXNIVE1MRWxlbWVudCgpICYmIHN0YXRpY19jYXN0PEVsZW1lbnQqPihuKS0+
aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkpCiAgICAgICAgIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvVG91Y2hEaXNhbWJpZ3VhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGFnZS9Ub3VjaERpc2FtYmlndWF0aW9uLmNwcAkocmV2aXNpb24gMTM3MjEyKQorKysgU291
cmNlL1dlYkNvcmUvcGFnZS9Ub3VjaERpc2FtYmlndWF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkhUTUxO
YW1lcy5oIgogI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKKyNpbmNsdWRlICJOb2RlVHJhdmVy
c2FsLmgiCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgogI2luY2x1ZGUgPGNtYXRoPgogCkBAIC01NSwx
MSArNTYsMTEgQEAgc3RhdGljIEludFJlY3QgYm91bmRpbmdCb3hGb3JFdmVudE5vZGVzKAogICAg
IHdoaWxlIChub2RlKSB7CiAgICAgICAgIC8vIFNraXAgdGhlIHdob2xlIHN1Yi10cmVlIGlmIHRo
ZSBub2RlIGRvZXNuJ3QgcHJvcGFnYXRlIGV2ZW50cy4KICAgICAgICAgaWYgKG5vZGUgIT0gZXZl
bnROb2RlICYmIG5vZGUtPndpbGxSZXNwb25kVG9Nb3VzZUNsaWNrRXZlbnRzKCkpIHsKLSAgICAg
ICAgICAgIG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHRTaWJsaW5nKGV2ZW50Tm9kZSk7CisgICAg
ICAgICAgICBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dFNpYmxpbmcobm9kZSwgZXZlbnROb2Rl
KTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAgICAgICAgIHJlc3VsdC51bml0
ZShub2RlLT5waXhlbFNuYXBwZWRCb3VuZGluZ0JveCgpKTsKLSAgICAgICAgbm9kZSA9IG5vZGUt
PnRyYXZlcnNlTmV4dE5vZGUoZXZlbnROb2RlKTsKKyAgICAgICAgbm9kZSA9IE5vZGVUcmF2ZXJz
YWw6Om5leHQobm9kZSwgZXZlbnROb2RlKTsKICAgICB9CiAgICAgcmV0dXJuIGV2ZW50Tm9kZS0+
ZG9jdW1lbnQoKS0+dmlldygpLT5jb250ZW50c1RvV2luZG93KHJlc3VsdCk7CiB9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTmFtZWRGbG93VGhyZWFkLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTmFtZWRGbG93VGhyZWFkLmNw
cAkocmV2aXNpb24gMTM3MjEyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck5h
bWVkRmxvd1RocmVhZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNs
dWRlICJGbG93VGhyZWFkQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIklubGluZVRleHRCb3guaCIK
ICNpbmNsdWRlICJJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCIKKyNpbmNsdWRlICJOb2RlVHJh
dmVyc2FsLmgiCiAjaW5jbHVkZSAiUG9zaXRpb24uaCIKICNpbmNsdWRlICJSZW5kZXJJbmxpbmUu
aCIKICNpbmNsdWRlICJSZW5kZXJSZWdpb24uaCIKQEAgLTQ4NCw3ICs0ODUsNyBAQCB2b2lkIFJl
bmRlck5hbWVkRmxvd1RocmVhZDo6Z2V0UmFuZ2VzKFZlCiAgICAgICAgIGJvb2wgc2tpcE92ZXJP
dXRzaWRlTm9kZXMgPSBmYWxzZTsKICAgICAgICAgTm9kZSogbGFzdEVuZE5vZGUgPSAwOwogCi0g
ICAgICAgIGZvciAoTm9kZSogbm9kZSA9IGNvbnRlbnROb2RlOyBub2RlOyBub2RlID0gbm9kZS0+
dHJhdmVyc2VOZXh0Tm9kZShjb250ZW50Tm9kZSkpIHsKKyAgICAgICAgZm9yIChOb2RlKiBub2Rl
ID0gY29udGVudE5vZGU7IG5vZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUsIGNv
bnRlbnROb2RlKSkgewogICAgICAgICAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IG5vZGUt
PnJlbmRlcmVyKCk7CiAgICAgICAgICAgICBpZiAoIXJlbmRlcmVyKQogICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1NWR0VsZW1lbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTVkdFbGVtZW50LmNwcAkocmV2aXNp
b24gMTM3MjEyKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1NWR0VsZW1lbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSAiRnJhbWVUcmVlLmgiCiAjaW5j
bHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiTm9k
ZVRyYXZlcnNhbC5oIgogI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgogI2luY2x1ZGUgIlJlbmRl
clBhcnQuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZS5oIgpAQCAtMzQ1LDcgKzM0Niw3
IEBAIHZvaWQgU1ZHU1ZHRWxlbWVudDo6Zm9yY2VSZWRyYXcoKQogUGFzc1JlZlB0cjxOb2RlTGlz
dD4gU1ZHU1ZHRWxlbWVudDo6Y29sbGVjdEludGVyc2VjdGlvbk9yRW5jbG9zdXJlTGlzdChjb25z
dCBGbG9hdFJlY3QmIHJlY3QsIFNWR0VsZW1lbnQqIHJlZmVyZW5jZUVsZW1lbnQsIENvbGxlY3RJ
bnRlcnNlY3Rpb25PckVuY2xvc3VyZSBjb2xsZWN0KSBjb25zdAogewogICAgIFZlY3RvcjxSZWZQ
dHI8Tm9kZT4gPiBub2RlczsKLSAgICBOb2RlKiBub2RlID0gdHJhdmVyc2VOZXh0Tm9kZShyZWZl
cmVuY2VFbGVtZW50ID8gcmVmZXJlbmNlRWxlbWVudCA6IHRoaXMpOworICAgIE5vZGUqIG5vZGUg
PSBOb2RlVHJhdmVyc2FsOjpuZXh0KHJlZmVyZW5jZUVsZW1lbnQgPyByZWZlcmVuY2VFbGVtZW50
IDogdGhpcyk7CiAgICAgd2hpbGUgKG5vZGUpIHsKICAgICAgICAgaWYgKG5vZGUtPmlzU1ZHRWxl
bWVudCgpKSB7IAogICAgICAgICAgICAgaWYgKGNvbGxlY3QgPT0gQ29sbGVjdEludGVyc2VjdGlv
bkxpc3QpIHsKQEAgLTM1Nyw3ICszNTgsNyBAQCBQYXNzUmVmUHRyPE5vZGVMaXN0PiBTVkdTVkdF
bGVtZW50Ojpjb2xsCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBub2RlID0g
bm9kZS0+dHJhdmVyc2VOZXh0Tm9kZShyZWZlcmVuY2VFbGVtZW50ID8gcmVmZXJlbmNlRWxlbWVu
dCA6IHRoaXMpOworICAgICAgICBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dChub2RlLCByZWZl
cmVuY2VFbGVtZW50ID8gcmVmZXJlbmNlRWxlbWVudCA6IHRoaXMpOwogICAgIH0KICAgICByZXR1
cm4gU3RhdGljTm9kZUxpc3Q6OmFkb3B0KG5vZGVzKTsKIH0KQEAgLTc4Nyw3ICs3ODgsNyBAQCBF
bGVtZW50KiBTVkdTVkdFbGVtZW50OjpnZXRFbGVtZW50QnlJZChjCiAKICAgICAvLyBGYWxsIGJh
Y2sgdG8gdHJhdmVyc2luZyBvdXIgc3VidHJlZS4gRHVwbGljYXRlIGlkcyBhcmUgYWxsb3dlZCwg
dGhlIGZpcnN0IGZvdW5kIHdpbGwKICAgICAvLyBiZSByZXR1cm5lZC4KLSAgICBmb3IgKE5vZGUq
IG5vZGUgPSBmaXJzdENoaWxkKCk7IG5vZGU7IG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHROb2Rl
KHRoaXMpKSB7CisgICAgZm9yIChOb2RlKiBub2RlID0gZmlyc3RDaGlsZCgpOyBub2RlOyBub2Rl
ID0gTm9kZVRyYXZlcnNhbDo6bmV4dChub2RlLCB0aGlzKSkgewogICAgICAgICBpZiAoIW5vZGUt
PmlzRWxlbWVudE5vZGUoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHVXNlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvc3ZnL1NWR1VzZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAxMzcyMTIpCisrKyBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHVXNlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDcg
QEAKICNpbmNsdWRlICJFdmVudExpc3RlbmVyLmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAj
aW5jbHVkZSAiTm9kZVJlbmRlclN0eWxlLmgiCisjaW5jbHVkZSAiTm9kZVRyYXZlcnNhbC5oIgog
I2luY2x1ZGUgIlJlZ2lzdGVyZWRFdmVudExpc3RlbmVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZH
UmVzb3VyY2UuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdUcmFuc2Zvcm1hYmxlQ29udGFpbmVyLmgi
CkBAIC02ODksMTIgKzY5MCwxMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcmVtb3ZlRGlzYWxsb3dl
ZEVsZW1lCiAgICAgTm9kZSogbm9kZSA9IHN1YnRyZWUtPmZpcnN0Q2hpbGQoKTsKICAgICB3aGls
ZSAobm9kZSkgewogICAgICAgICBpZiAoaXNEaXNhbGxvd2VkRWxlbWVudChub2RlKSkgewotICAg
ICAgICAgICAgTm9kZSogbmV4dCA9IG5vZGUtPnRyYXZlcnNlTmV4dFNpYmxpbmcoc3VidHJlZSk7
CisgICAgICAgICAgICBOb2RlKiBuZXh0ID0gTm9kZVRyYXZlcnNhbDo6bmV4dFNraXBwaW5nQ2hp
bGRyZW4obm9kZSwgc3VidHJlZSk7CiAgICAgICAgICAgICAvLyBUaGUgc3VidHJlZSBpcyBub3Qg
aW4gZG9jdW1lbnQgc28gdGhpcyB3b24ndCBnZW5lcmF0ZSBldmVudHMgdGhhdCBjb3VsZCBtdXRh
dGUgdGhlIHRyZWUuCiAgICAgICAgICAgICBub2RlLT5wYXJlbnROb2RlKCktPnJlbW92ZUNoaWxk
KG5vZGUpOwogICAgICAgICAgICAgbm9kZSA9IG5leHQ7CiAgICAgICAgIH0gZWxzZQotICAgICAg
ICAgICAgbm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoc3VidHJlZSk7CisgICAgICAgICAg
ICBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dChub2RlLCBzdWJ0cmVlKTsKICAgICB9CiB9CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRpb24vU01JTFRpbWVDb250YWluZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRpb24vU01JTFRpbWVDb250
YWluZXIuY3BwCShyZXZpc2lvbiAxMzcyMTIpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0
aW9uL1NNSUxUaW1lQ29udGFpbmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBA
QAogCiAjaWYgRU5BQkxFKFNWRykKICNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIk5v
ZGVUcmF2ZXJzYWwuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgIlNWR1NNSUxF
bGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHU1ZHRWxlbWVudC5oIgpAQCAtMjI0LDcgKzIyNSw3IEBA
IHZvaWQgU01JTFRpbWVDb250YWluZXI6OnRpbWVyRmlyZWQoVGltZXIKIHZvaWQgU01JTFRpbWVD
b250YWluZXI6OnVwZGF0ZURvY3VtZW50T3JkZXJJbmRleGVzKCkKIHsKICAgICB1bnNpZ25lZCB0
aW1pbmdFbGVtZW50Q291bnQgPSAwOwotICAgIGZvciAoTm9kZSogbm9kZSA9IG1fb3duZXJTVkdF
bGVtZW50OyBub2RlOyBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZShtX293bmVyU1ZHRWxl
bWVudCkpIHsKKyAgICBmb3IgKE5vZGUqIG5vZGUgPSBtX293bmVyU1ZHRWxlbWVudDsgbm9kZTsg
bm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9kZSwgbV9vd25lclNWR0VsZW1lbnQpKSB7CiAg
ICAgICAgIGlmIChTVkdTTUlMRWxlbWVudDo6aXNTTUlMRWxlbWVudChub2RlKSkKICAgICAgICAg
ICAgIHN0YXRpY19jYXN0PFNWR1NNSUxFbGVtZW50Kj4obm9kZSktPnNldERvY3VtZW50T3JkZXJJ
bmRleCh0aW1pbmdFbGVtZW50Q291bnQrKyk7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUv
eG1sL1hQYXRoTm9kZVNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUveG1sL1hQ
YXRoTm9kZVNldC5jcHAJKHJldmlzaW9uIDEzNzIxMikKKysrIFNvdXJjZS9XZWJDb3JlL3htbC9Y
UGF0aE5vZGVTZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVk
ZSAiQXR0ci5oIgogI2luY2x1ZGUgIkVsZW1lbnQuaCIKICNpbmNsdWRlICJOb2RlLmgiCisjaW5j
bHVkZSAiTm9kZVRyYXZlcnNhbC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBuYW1lc3BhY2Ug
WFBhdGggewpAQCAtMjA2LDcgKzIwNyw3IEBAIHZvaWQgTm9kZVNldDo6dHJhdmVyc2FsU29ydCgp
IGNvbnN0CiAgICAgVmVjdG9yPFJlZlB0cjxOb2RlPiA+IHNvcnRlZE5vZGVzOwogICAgIHNvcnRl
ZE5vZGVzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobm9kZUNvdW50KTsKIAotICAgIGZvciAoTm9k
ZSogbiA9IGZpbmRSb290Tm9kZShtX25vZGVzLmZpcnN0KCkuZ2V0KCkpOyBuOyBuID0gbi0+dHJh
dmVyc2VOZXh0Tm9kZSgpKSB7CisgICAgZm9yIChOb2RlKiBuID0gZmluZFJvb3ROb2RlKG1fbm9k
ZXMuZmlyc3QoKS5nZXQoKSk7IG47IG4gPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG4pKSB7CiAgICAg
ICAgIGlmIChub2Rlcy5jb250YWlucyhuKSkKICAgICAgICAgICAgIHNvcnRlZE5vZGVzLmFwcGVu
ZChuKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUveG1sL1hQYXRoU3RlcC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUveG1sL1hQYXRoU3RlcC5jcHAJKHJldmlzaW9uIDEzNzIxMikK
KysrIFNvdXJjZS9XZWJDb3JlL3htbC9YUGF0aFN0ZXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MSw2ICszMSw3IEBACiAjaW5jbHVkZSAiQXR0ci5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAj
aW5jbHVkZSAiRWxlbWVudC5oIgorI2luY2x1ZGUgIk5vZGVUcmF2ZXJzYWwuaCIKICNpbmNsdWRl
ICJYTUxOU05hbWVzLmgiCiAjaW5jbHVkZSAiWFBhdGhQYXJzZXIuaCIKICNpbmNsdWRlICJYUGF0
aFV0aWwuaCIKQEAgLTI0Niw3ICsyNDcsNyBAQCB2b2lkIFN0ZXA6Om5vZGVzSW5BeGlzKE5vZGUq
IGNvbnRleHQsIE5vCiAgICAgICAgICAgICBpZiAoY29udGV4dC0+aXNBdHRyaWJ1dGVOb2RlKCkp
IC8vIEluIFhQYXRoIG1vZGVsLCBhdHRyaWJ1dGUgbm9kZXMgZG8gbm90IGhhdmUgY2hpbGRyZW4u
CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgICAgICBmb3IgKE5vZGUqIG4gPSBj
b250ZXh0LT5maXJzdENoaWxkKCk7IG47IG4gPSBuLT50cmF2ZXJzZU5leHROb2RlKGNvbnRleHQp
KQorICAgICAgICAgICAgZm9yIChOb2RlKiBuID0gY29udGV4dC0+Zmlyc3RDaGlsZCgpOyBuOyBu
ID0gTm9kZVRyYXZlcnNhbDo6bmV4dChuLCBjb250ZXh0KSkKICAgICAgICAgICAgICAgICBpZiAo
bm9kZU1hdGNoZXMobiwgRGVzY2VuZGFudEF4aXMsIG1fbm9kZVRlc3QpKQogICAgICAgICAgICAg
ICAgICAgICBub2Rlcy5hcHBlbmQobik7CiAgICAgICAgICAgICByZXR1cm47CkBAIC0yOTcsNyAr
Mjk4LDcgQEAgdm9pZCBTdGVwOjpub2Rlc0luQXhpcyhOb2RlKiBjb250ZXh0LCBObwogICAgICAg
ICBjYXNlIEZvbGxvd2luZ0F4aXM6CiAgICAgICAgICAgICBpZiAoY29udGV4dC0+aXNBdHRyaWJ1
dGVOb2RlKCkpIHsKICAgICAgICAgICAgICAgICBOb2RlKiBwID0gc3RhdGljX2Nhc3Q8QXR0cio+
KGNvbnRleHQpLT5vd25lckVsZW1lbnQoKTsKLSAgICAgICAgICAgICAgICB3aGlsZSAoKHAgPSBw
LT50cmF2ZXJzZU5leHROb2RlKCkpKQorICAgICAgICAgICAgICAgIHdoaWxlICgocCA9IE5vZGVU
cmF2ZXJzYWw6Om5leHQocCkpKQogICAgICAgICAgICAgICAgICAgICBpZiAobm9kZU1hdGNoZXMo
cCwgRm9sbG93aW5nQXhpcywgbV9ub2RlVGVzdCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBu
b2Rlcy5hcHBlbmQocCk7CiAgICAgICAgICAgICB9IGVsc2UgewpAQCAtMzA1LDcgKzMwNiw3IEBA
IHZvaWQgU3RlcDo6bm9kZXNJbkF4aXMoTm9kZSogY29udGV4dCwgTm8KICAgICAgICAgICAgICAg
ICAgICAgZm9yIChOb2RlKiBuID0gcC0+bmV4dFNpYmxpbmcoKTsgbjsgbiA9IG4tPm5leHRTaWJs
aW5nKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlTWF0Y2hlcyhuLCBGb2xs
b3dpbmdBeGlzLCBtX25vZGVUZXN0KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2Rl
cy5hcHBlbmQobik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKE5vZGUqIGMgPSBuLT5m
aXJzdENoaWxkKCk7IGM7IGMgPSBjLT50cmF2ZXJzZU5leHROb2RlKG4pKQorICAgICAgICAgICAg
ICAgICAgICAgICAgZm9yIChOb2RlKiBjID0gbi0+Zmlyc3RDaGlsZCgpOyBjOyBjID0gTm9kZVRy
YXZlcnNhbDo6bmV4dChjLCBuKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9k
ZU1hdGNoZXMoYywgRm9sbG93aW5nQXhpcywgbV9ub2RlVGVzdCkpCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG5vZGVzLmFwcGVuZChjKTsKICAgICAgICAgICAgICAgICAgICAgfQpA
QCAtMzE4LDcgKzMxOSw3IEBAIHZvaWQgU3RlcDo6bm9kZXNJbkF4aXMoTm9kZSogY29udGV4dCwg
Tm8KIAogICAgICAgICAgICAgTm9kZSogbiA9IGNvbnRleHQ7CiAgICAgICAgICAgICB3aGlsZSAo
Q29udGFpbmVyTm9kZSogcGFyZW50ID0gbi0+cGFyZW50Tm9kZSgpKSB7Ci0gICAgICAgICAgICAg
ICAgZm9yIChuID0gbi0+dHJhdmVyc2VQcmV2aW91c05vZGUoKTsgbiAhPSBwYXJlbnQ7IG4gPSBu
LT50cmF2ZXJzZVByZXZpb3VzTm9kZSgpKQorICAgICAgICAgICAgICAgIGZvciAobiA9IE5vZGVU
cmF2ZXJzYWw6OnByZXZpb3VzKG4pOyBuICE9IHBhcmVudDsgbiA9IE5vZGVUcmF2ZXJzYWw6OnBy
ZXZpb3VzKG4pKQogICAgICAgICAgICAgICAgICAgICBpZiAobm9kZU1hdGNoZXMobiwgUHJlY2Vk
aW5nQXhpcywgbV9ub2RlVGVzdCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBub2Rlcy5hcHBl
bmQobik7CiAgICAgICAgICAgICAgICAgbiA9IHBhcmVudDsKQEAgLTM2NSw3ICszNjYsNyBAQCB2
b2lkIFN0ZXA6Om5vZGVzSW5BeGlzKE5vZGUqIGNvbnRleHQsIE5vCiAgICAgICAgICAgICBpZiAo
Y29udGV4dC0+aXNBdHRyaWJ1dGVOb2RlKCkpIC8vIEluIFhQYXRoIG1vZGVsLCBhdHRyaWJ1dGUg
bm9kZXMgZG8gbm90IGhhdmUgY2hpbGRyZW4uCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogCi0g
ICAgICAgICAgICBmb3IgKE5vZGUqIG4gPSBjb250ZXh0LT5maXJzdENoaWxkKCk7IG47IG4gPSBu
LT50cmF2ZXJzZU5leHROb2RlKGNvbnRleHQpKQorICAgICAgICAgICAgZm9yIChOb2RlKiBuID0g
Y29udGV4dC0+Zmlyc3RDaGlsZCgpOyBuOyBuID0gTm9kZVRyYXZlcnNhbDo6bmV4dChuLCBjb250
ZXh0KSkKICAgICAgICAgICAgIGlmIChub2RlTWF0Y2hlcyhuLCBEZXNjZW5kYW50T3JTZWxmQXhp
cywgbV9ub2RlVGVzdCkpCiAgICAgICAgICAgICAgICAgbm9kZXMuYXBwZW5kKG4pOwogICAgICAg
ICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL1dlYkNvcmUveG1sL1hQYXRoVXRpbC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUveG1sL1hQYXRoVXRpbC5jcHAJKHJldmlzaW9uIDEz
NzIxMikKKysrIFNvdXJjZS9XZWJDb3JlL3htbC9YUGF0aFV0aWwuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiWFBhdGhVdGlsLmgiCiAKICNpbmNsdWRlICJD
b250YWluZXJOb2RlLmgiCisjaW5jbHVkZSAiTm9kZVRyYXZlcnNhbC5oIgogI2luY2x1ZGUgPHd0
Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNTMsNyAr
NTQsNyBAQCBTdHJpbmcgc3RyaW5nVmFsdWUoTm9kZSogbm9kZSkKICAgICAgICAgICAgICAgICBT
dHJpbmdCdWlsZGVyIHJlc3VsdDsKICAgICAgICAgICAgICAgICByZXN1bHQucmVzZXJ2ZUNhcGFj
aXR5KDEwMjQpOwogCi0gICAgICAgICAgICAgICAgZm9yIChOb2RlKiBuID0gbm9kZS0+Zmlyc3RD
aGlsZCgpOyBuOyBuID0gbi0+dHJhdmVyc2VOZXh0Tm9kZShub2RlKSkgeworICAgICAgICAgICAg
ICAgIGZvciAoTm9kZSogbiA9IG5vZGUtPmZpcnN0Q2hpbGQoKTsgbjsgbiA9IE5vZGVUcmF2ZXJz
YWw6Om5leHQobiwgbm9kZSkpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKG4tPmlzVGV4dE5v
ZGUoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBub2RlVmFsdWUg
PSBuLT5ub2RlVmFsdWUoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQo
bm9kZVZhbHVlKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzNzIxMikKKysrIFNvdXJjZS9X
ZWJLaXQyL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDEyLTEy
LTA5ICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBGYWN0b3Ig
bm9kZSB0cmF2ZXJzYWwgaW50byBzdGFuZGFsb25lIGZ1bmN0aW9ucworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA0NTA3CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
RnJhbWUuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZTo6Y29udGFpbnNBbnlGb3JtRWxl
bWVudHMpOgorCiAyMDEyLTEyLTEwICBFZHVhcmRvIExpbWEgTWl0ZXYgIDxlbGltYUBpZ2FsaWEu
Y29tPgogCiAgICAgICAgIFtHVEtdIEV4cG9zZSBIaXRUZXN0UmVzdWx0OjpzY3JvbGxiYXIoKSBj
b25kaXRpb24gaW4gQVBJCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJGcmFtZS5jcHAJKHJldmlzaW9uIDEzNzIxMikKKysrIFNvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0LDYgKzU0
LDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0pTQ1NTU3R5bGVEZWNsYXJhdGlvbi5oPgogI2luY2x1
ZGUgPFdlYkNvcmUvSlNFbGVtZW50Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9KU1JhbmdlLmg+Cisj
aW5jbHVkZSA8V2ViQ29yZS9Ob2RlVHJhdmVyc2FsLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QYWdl
Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QbHVnaW5Eb2N1bWVudC5oPgogI2luY2x1ZGUgPFdlYkNv
cmUvUmVuZGVyVHJlZUFzVGV4dC5oPgpAQCAtNjY1LDcgKzY2Niw3IEBAIGJvb2wgV2ViRnJhbWU6
OmNvbnRhaW5zQW55Rm9ybUVsZW1lbnRzKCkKICAgICBpZiAoIWRvY3VtZW50KQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICBmb3IgKE5vZGUqIG5vZGUgPSBkb2N1bWVudC0+ZG9jdW1lbnRF
bGVtZW50KCk7IG5vZGU7IG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKCkpIHsKKyAgICBm
b3IgKE5vZGUqIG5vZGUgPSBkb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50KCk7IG5vZGU7IG5vZGUg
PSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUpKSB7CiAgICAgICAgIGlmICghbm9kZS0+aXNFbGVt
ZW50Tm9kZSgpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIGlmIChzdGF0aWNfY2Fz
dDxFbGVtZW50Kj4obm9kZSktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpmb3JtVGFnKSkKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViUGFnZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9XZWJQYWdlLmNwcAkocmV2aXNpb24gMTM3MjEy
KQorKysgU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9XZWJQYWdlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtOTAsNiArOTAsNyBAQAogI2VuZGlmCiAjaW5jbHVkZSAiTmV0d29ya01hbmFnZXIu
aCIKICNpbmNsdWRlICJOb2RlUmVuZGVyU3R5bGUuaCIKKyNpbmNsdWRlICJOb2RlVHJhdmVyc2Fs
LmgiCiAjaWYgRU5BQkxFKE5BVklHQVRPUl9DT05URU5UX1VUSUxTKQogI2luY2x1ZGUgIk5hdmln
YXRvckNvbnRlbnRVdGlsc0NsaWVudEJsYWNrQmVycnkuaCIKICNlbmRpZgpAQCAtNTcxMiw3ICs1
NzEzLDcgQEAgdm9pZCBXZWJQYWdlUHJpdmF0ZTo6ZXhpdEZ1bGxzY3JlZW5Gb3JObwogLy8gVE9E
TzogV2Ugc2hvdWxkIHJlbW92ZSB0aGlzIGhlbHBlciBjbGFzcyB3aGVuIHdlIGRlY2lkZSB0byBz
dXBwb3J0IGFsbCBlbGVtZW50cy4KIHN0YXRpYyBib29sIGNvbnRhaW5zVmlkZW9UYWdzKEVsZW1l
bnQqIGVsZW1lbnQpCiB7Ci0gICAgZm9yIChOb2RlKiBub2RlID0gZWxlbWVudC0+Zmlyc3RDaGls
ZCgpOyBub2RlOyBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZShlbGVtZW50KSkgeworICAg
IGZvciAoTm9kZSogbm9kZSA9IGVsZW1lbnQtPmZpcnN0Q2hpbGQoKTsgbm9kZTsgbm9kZSA9IE5v
ZGVUcmF2ZXJzYWw6Om5leHQobm9kZSwgZWxlbWVudCkpIHsKICAgICAgICAgaWYgKG5vZGUtPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjp2aWRlb1RhZykpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gMTM3MjEyKQor
KysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSwxMyBAQAorMjAxMi0xMi0wOSAgQW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+
CisKKyAgICAgICAgRmFjdG9yIG5vZGUgdHJhdmVyc2FsIGludG8gc3RhbmRhbG9uZSBmdW5jdGlv
bnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNDUw
NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogc3Jj
L1dlYkZyYW1lSW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lSW1wbDo6c2V0Rmlu
ZEVuZHN0YXRlRm9jdXNBbmRTZWxlY3Rpb24pOgorCiAyMDEyLTEyLTEwICBNYXJrIFBpbGdyaW0g
IDxwaWxncmltQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbQ2hyb21pdW1dW1dpbl0gUmVtb3Zl
IHRoZW1lLXJlbGF0ZWQgZnVuY3Rpb25zIGZyb20gUGxhdGZvcm1TdXBwb3J0CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5jcHAJKHJldmlzaW9uIDEzNzIx
MikKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTExOCw2ICsxMTgsNyBAQAogI2luY2x1ZGUgIktVUkwuaCIKICNpbmNsdWRl
ICJNZXNzYWdlUG9ydC5oIgogI2luY2x1ZGUgIk5vZGUuaCIKKyNpbmNsdWRlICJOb2RlVHJhdmVy
c2FsLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlBhZ2VPdmVybGF5LmgiCiAjaW5j
bHVkZSAiUGVyZm9ybWFuY2UuaCIKQEAgLTIzNDksNyArMjM1MCw3IEBAIHZvaWQgV2ViRnJhbWVJ
bXBsOjpzZXRGaW5kRW5kc3RhdGVGb2N1c0EKICAgICAgICAgICAgICAgICBmcmFtZSgpLT5kb2N1
bWVudCgpLT5zZXRGb2N1c2VkTm9kZShub2RlKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgp
OworICAgICAgICAgICAgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9kZSk7CiAgICAgICAg
IH0KIAogICAgICAgICAvLyBObyBub2RlIHJlbGF0ZWQgdG8gdGhlIGFjdGl2ZSBtYXRjaCB3YXMg
Zm9jdXNhYmxlLCBzbyBzZXQgdGhlCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMzcy
MTIpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSwxMyBAQAorMjAxMi0xMi0wOSAgQW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+
CisKKyAgICAgICAgRmFjdG9yIG5vZGUgdHJhdmVyc2FsIGludG8gc3RhbmRhbG9uZSBmdW5jdGlv
bnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNDUw
NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgIAorICAgICAgICAq
IFdlYlZpZXcvV2ViSFRNTFJlcHJlc2VudGF0aW9uLm1tOgorICAgICAgICAoc2VhcmNoRm9yTGFi
ZWxzQmVmb3JlRWxlbWVudCk6CisKIDIwMTItMTItMTAgIEFsZXhpcyBNZW5hcmQgIDxhbGV4aXNA
d2Via2l0Lm9yZz4KIAogICAgICAgICBbQ1NTMyBCYWNrZ3JvdW5kcyBhbmQgQm9yZGVyc10gUmVt
b3ZlIENTUzNfQkFDS0dST1VORCBmZWF0dXJlIGZsYWcuCkluZGV4OiBTb3VyY2UvV2ViS2l0L21h
Yy9XZWJWaWV3L1dlYkhUTUxSZXByZXNlbnRhdGlvbi5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxSZXByZXNlbnRhdGlvbi5tbQkocmV2aXNpb24gMTM3
MjEyKQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJIVE1MUmVwcmVzZW50YXRpb24u
bW0JKHdvcmtpbmcgY29weSkKQEAgLTU0LDYgKzU0LDcgQEAKICNpbXBvcnQgPFdlYkNvcmUvSFRN
TE5hbWVzLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0hUTUxUYWJsZUNlbGxFbGVtZW50Lmg+CiAjaW1w
b3J0IDxXZWJDb3JlL01JTUVUeXBlUmVnaXN0cnkuaD4KKyNpbXBvcnQgPFdlYkNvcmUvTm9kZVRy
YXZlcnNhbC5oPgogI2ltcG9ydCA8V2ViQ29yZS9SYW5nZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9S
ZWd1bGFyRXhwcmVzc2lvbi5oPgogI2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJPYmplY3QuaD4KQEAg
LTQzNyw5ICs0MzgsOSBAQCBzdGF0aWMgTlNTdHJpbmcqIHNlYXJjaEZvckxhYmVsc0JlZm9yZUVs
CiAgICAgLy8gd2FsayBiYWNrd2FyZHMgaW4gdGhlIG5vZGUgdHJlZSwgdW50aWwgYW5vdGhlciBl
bGVtZW50LCBvciBmb3JtLCBvciBlbmQgb2YgdHJlZQogICAgIHVuc2lnbmVkIGxlbmd0aFNlYXJj
aGVkID0gMDsKICAgICBOb2RlKiBuOwotICAgIGZvciAobiA9IGVsZW1lbnQtPnRyYXZlcnNlUHJl
dmlvdXNOb2RlKCk7CisgICAgZm9yIChuID0gTm9kZVRyYXZlcnNhbDo6cHJldmlvdXMoZWxlbWVu
dCk7CiAgICAgICAgICBuICYmIGxlbmd0aFNlYXJjaGVkIDwgY2hhcnNTZWFyY2hlZFRocmVzaG9s
ZDsKLSAgICAgICAgIG4gPSBuLT50cmF2ZXJzZVByZXZpb3VzTm9kZSgpKQorICAgICAgICAgbiA9
IE5vZGVUcmF2ZXJzYWw6OnByZXZpb3VzKG4pKQogICAgIHsKICAgICAgICAgaWYgKG4tPmhhc1Rh
Z05hbWUoZm9ybVRhZykKICAgICAgICAgICAgIHx8IChuLT5pc0hUTUxFbGVtZW50KCkgJiYgc3Rh
dGljX2Nhc3Q8RWxlbWVudCo+KG4pLT5pc0Zvcm1Db250cm9sRWxlbWVudCgpKSkK
</data>

          </attachment>
      

    </bug>

</bugzilla>