<?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>90280</bug_id>
          
          <creation_ts>2012-06-29 07:37:36 -0700</creation_ts>
          <short_desc>Web Inspector: Expose the CSS rule hierarchy through the Web Inspector protocol</short_desc>
          <delta_ts>2014-12-12 14:37:53 -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>Web Inspector (Deprecated)</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>INVALID</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>
          <dependson>90388</dependson>
          <blocked>88408</blocked>
    
    <blocked>116924</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Alexander Pavlov (apavlov)">apavlov</reporter>
          <assigned_to name="Alexander Pavlov (apavlov)">apavlov</assigned_to>
          <cc>apavlov</cc>
    
    <cc>bweinstein</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>joepeck</cc>
    
    <cc>keishi</cc>
    
    <cc>koivisto</cc>
    
    <cc>loislo</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>rik</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>660465</commentid>
    <comment_count>0</comment_count>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2012-06-29 07:37:36 -0700</bug_when>
    <thetext>This will break existing third-party clients of the protocol, as the full rule tree will be exposed for all stylesheets rather than a flat list of style rules.

Patch to follow (will naturally contain examples of fixes to the protocol clients).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>660548</commentid>
    <comment_count>1</comment_count>
      <attachid>150193</attachid>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2012-06-29 09:16:30 -0700</bug_when>
    <thetext>Created attachment 150193
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>660549</commentid>
    <comment_count>2</comment_count>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2012-06-29 09:20:36 -0700</bug_when>
    <thetext>@anttik: in this patch I remove the comment concerning the removal of styleRule() from CSSStyleRule, as we agreed on #webkit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>661450</commentid>
    <comment_count>3</comment_count>
      <attachid>150193</attachid>
    <who name="Vsevolod Vlasov">vsevik</who>
    <bug_when>2012-07-02 06:32:14 -0700</bug_when>
    <thetext>Comment on attachment 150193
Patch

Could you please split this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>661502</commentid>
    <comment_count>4</comment_count>
      <attachid>150426</attachid>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2012-07-02 08:20:22 -0700</bug_when>
    <thetext>Created attachment 150426
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1055276</commentid>
    <comment_count>5</comment_count>
    <who name="Brian Burg">burg</who>
    <bug_when>2014-12-12 14:37:53 -0800</bug_when>
    <thetext>Closing as invalid, as this bug pertains to the old inspector UI and/or its tests.
Please file a new bug (https://www.webkit.org/new-inspector-bug) if the bug/feature/issue is still relevant to WebKit trunk.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>150193</attachid>
            <date>2012-06-29 09:16:30 -0700</date>
            <delta_ts>2012-07-02 08:20:14 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-90280-20120629201628.patch</filename>
            <type>text/plain</type>
            <size>91659</size>
            <attacher name="Alexander Pavlov (apavlov)">apavlov</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIxNTU2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggY2RlZjI2ODY4N2QwMjM0
N2Y5Y2UyY2M4NWYxYWE0NzUyMTYyNzg2NS4uNzJlMDkwZjY5ZDc2ZTc4YTFiMDlkZDMwOWNiN2M4
ZDg4NTRiZmFjNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY2IEBACisyMDEyLTA2LTI5ICBBbGV4
YW5kZXIgUGF2bG92ICA8YXBhdmxvdkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgV2ViIEluc3Bl
Y3RvcjogRXhwb3NlIHRoZSBDU1MgcnVsZSBoaWVyYXJjaHkgdGhyb3VnaCB0aGUgV2ViIEluc3Bl
Y3RvciBwcm90b2NvbAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9OTAyODAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBUaGlzIGNoYW5nZSB1cGRhdGVzIHRoZSBXZWIgSW5zcGVjdG9yIGJhY2tlbmQgYW5kIGZy
b250ZW5kIHRvIGFjdHVhbGx5IHVzZSB0aGUgaGllcmFyY2hpY2FsIHJ1bGUgc291cmNlIGRhdGEK
KyAgICAgICAgcHJvdmlkZWQgYnkgdGhlIENTU1BhcnNlci4KKyAgICAgICAgQWxzbyB1c2UgdGhl
IENTU09NIHN0eWxlc2hlZXQncyBwYXJzaW5nIG1vZGUgd2hlbiBleHRyYWN0aW5nIHNvdXJjZSBk
YXRhIHVzaW5nIENTU1BhcnNlci4KKworICAgICAgICAqIGNzcy9DU1NTdHlsZVJ1bGUuaDoKKyAg
ICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yLmpzb246IENoYW5nZSB0aGUgQ1NTOjpDU1NSdWxl
IHN0cnVjdHVyZQorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0TWF0Y2hlZFN0eWxlc0Zvck5v
ZGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6OmdldENvbXB1dGVkU3R5
bGVGb3JOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50OjphZGRSdWxl
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50OjpidWlsZE9iamVjdEZvckF0
dHJpYnV0ZXNTdHlsZSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQu
Y3BwOgorICAgICAgICAoUGFyc2VkU3R5bGVTaGVldCk6CisgICAgICAgIChQYXJzZWRTdHlsZVNo
ZWV0OjpzZXRTb3VyY2VEYXRhKTogRG8gbm90IGZsYXR0ZW4gdGhlIGRhdGEgcHJvdmlkZWQgYnkg
Q1NTUGFyc2VyIGFueW1vcmUKKyAgICAgICAgKFBhcnNlZFN0eWxlU2hlZXQ6OnJ1bGVTb3VyY2VE
YXRhQXQpOgorICAgICAgICAoV2ViQ29yZTo6YXNDU1NSdWxlTGlzdCk6CisgICAgICAgIChSdWxl
VmlzaXRvcik6IEEgZ2VuZXJpYyBDU1NSdWxlIGhpZXJhcmNoeSB2aXNpdG9yCisgICAgICAgIChJ
bnNwZWN0b3JSdWxlVHJlZUJ1aWxkZXIpOiBCdWlsZHMgYSB0cmVlIG9mIEluc3BlY3RvclJ1bGVz
CisgICAgICAgIChSdWxlUGF0aEJ1aWxkZXIpOiBCdWlsZHMgYSBwYXRoIGZvciBJbnNwZWN0b3JD
U1NJZCwgZ2l2ZW4gYSBDU1NSdWxlCisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHlsZTo6
Y3JlYXRlV2l0aFN0eWxlU2hlZXQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5bGU6
OmJ1aWxkQXJyYXlGb3JDb21wdXRlZFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
clN0eWxlOjpzZXRQcm9wZXJ0eVRleHQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUnVs
ZTo6SW5zcGVjdG9yUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JSdWxlOjp0eXBl
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0eWxlU2hlZXQpOiBCdWlsZCBhbmQgdXNl
IGEgdHJlZSBvZiBDU1NSdWxlIHdyYXBwZXJzIChJbnNwZWN0b3JSdWxlKSByYXRoZXIgdGhhbiBh
IGZsYXQgQ1NTU3R5bGVSdWxlIGxpc3QKKyAgICAgICAgWyBBIG51bWJlciBvZiBtZXRob2RzIHJl
bW92ZWQgXQorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0Lmg6CisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0lkOjpmb3JJbmxp
bmVTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NJZDo6Zm9yUGFyZW50UGF0
aCk6CisgICAgICAgIChJbnNwZWN0b3JDU1NJZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JDU1NJZDo6SW5zcGVjdG9yQ1NTSWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NT
SWQ6OnBhdGhBdCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NJZDo6bGFzdFBhdGhD
b21wb25lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTSWQ6OnBhdGhMZW5ndGgp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTSWQ6OmFzUHJvdG9jb2xWYWx1ZSk6Cisg
ICAgICAgIChJbnNwZWN0b3JTdHlsZSk6CisgICAgICAgIChJbnNwZWN0b3JSdWxlKToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvclJ1bGU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JSdWxlOjppZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JSdWxlOjpjc3NS
dWxlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclJ1bGU6OnN0eWxlKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvclJ1bGU6OmFwcGVuZENoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvclJ1bGU6OmNhbkhhdmVDaGlsZFJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvclJ1bGU6OmNoaWxkUnVsZUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
U3R5bGVTaGVldDo6UnVsZUFuY2hvcjo6UnVsZUFuY2hvcik6CisgICAgICAgIChSdWxlQW5jaG9y
KTogQW5jaG9yIGZvciBydWxlIGluc2VydGlvbiBhdCBhbiBhcmJpdHJhcnkgcG9zaXRpb24gaW4g
YSBzdHlsZXNoZWV0CisgICAgICAgIChJbnNwZWN0b3JTdHlsZVNoZWV0KToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvclN0eWxlU2hlZXQ6OnN0eWxlSWQpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yU3R5bGVTaGVldDo6cnVsZVRyZWUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlOjpzdHlsZUZvcklkKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZTo6cnVsZVNvdXJjZURhdGFGb3Ip
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlOjpy
dWxlUGF0aEJ5U3R5bGUpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvQXVkaXRSdWxl
cy5qczogRm9sbG93IHRoZSBwcm90b2NvbCBjaGFuZ2UKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJv
bnQtZW5kL0NTU1N0eWxlTW9kZWwuanM6IEZvbGxvdyB0aGUgcHJvdG9jb2wgY2hhbmdlCisKIDIw
MTItMDYtMjkgIEtvbnJhZCBQaWFzY2lrICA8a3BpYXNjaWtAcmltLmNvbT4KIAogICAgICAgICBE
b24ndCBoYXJkY29kZSB0YXJnZXQgZHBpIG9mIDE2MCAoaXQgc2hvdWxkIGJlIDk2IG9uIGRlc2t0
b3ApCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVSdWxlLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVSdWxlLmgKaW5kZXggZDc2YTgwMmZhNGVhMWM5MTFjMTNl
MzU0NTk4ZDA5MmVhOWNmZDA1OS4uMTVmNjMzM2Y1NzVhYzMzYTIyZTBiYzEwMjA0MTc1ZmQ1NDUz
YmRhMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlUnVsZS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVJ1bGUuaApAQCAtNDUsNyArNDUsNiBAQCBwdWJs
aWM6CiAKICAgICBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0OwogICAgIAotICAgIC8vIEZJWE1FOiBO
b3QgQ1NTT00uIFJlbW92ZS4KICAgICBTdHlsZVJ1bGUqIHN0eWxlUnVsZSgpIGNvbnN0IHsgcmV0
dXJuIG1fc3R5bGVSdWxlLmdldCgpOyB9CiAKICAgICB2b2lkIHJlYXR0YWNoKFN0eWxlUnVsZSop
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvci5qc29uIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvci5qc29uCmluZGV4IDg1MTYwNmVjODBi
NjQwOTVmZjNmNzE0ZDUyYTAzNDU2Zjk2NzMyMzcuLjhhMjQ3Y2EzOWM4OTMzMjkxNWQyYTRkZmVl
Y2RmYjgwNTU2ZGVkNzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3IuanNvbgorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmpzb24K
QEAgLTE5NTEsNyArMTk1MSw3IEBACiAgICAgICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwK
ICAgICAgICAgICAgICAgICAicHJvcGVydGllcyI6IFsKICAgICAgICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJzdHlsZVNoZWV0SWQiLCAiJHJlZiI6ICJTdHlsZVNoZWV0SWQiLCAiZGVzY3JpcHRp
b24iOiAiRW5jbG9zaW5nIHN0eWxlc2hlZXQgaWRlbnRpZmllci4iIH0sCi0gICAgICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAib3JkaW5hbCIsICJ0eXBlIjogImludGVnZXIiLCAiZGVzY3JpcHRp
b24iOiAiVGhlIHN0eWxlIG9yZGluYWwgd2l0aGluIHRoZSBzdHlsZXNoZWV0LiIgfQorICAgICAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogInBhdGgiLCAidHlwZSI6ICJhcnJheSIsICJpdGVtcyI6
IHsgInR5cGUiOiAiaW50ZWdlciIgfSwgImRlc2NyaXB0aW9uIjogIlRoZSBzdHlsZSBwYXRoIHdp
dGhpbiB0aGUgc3R5bGVzaGVldCAodXNpbmcgdGhlIHJ1bGUgcGFyZW50IGhpZXJhcmNoeSkuIiB9
CiAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVGhp
cyBvYmplY3QgaWRlbnRpZmllcyBhIENTUyBzdHlsZSBpbiBhIHVuaXF1ZSB3YXkuIgogICAgICAg
ICAgICAgfSwKQEAgLTE5NjYsNyArMTk2Niw3IEBACiAgICAgICAgICAgICAgICAgInR5cGUiOiAi
b2JqZWN0IiwKICAgICAgICAgICAgICAgICAicHJvcGVydGllcyI6IFsKICAgICAgICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJzdHlsZVNoZWV0SWQiLCAiJHJlZiI6ICJTdHlsZVNoZWV0SWQiLCAi
ZGVzY3JpcHRpb24iOiAiRW5jbG9zaW5nIHN0eWxlc2hlZXQgaWRlbnRpZmllci4iIH0sCi0gICAg
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAib3JkaW5hbCIsICJ0eXBlIjogImludGVnZXIiLCAi
ZGVzY3JpcHRpb24iOiAiVGhlIHJ1bGUgb3JkaW5hbCB3aXRoaW4gdGhlIHN0eWxlc2hlZXQuIiB9
CisgICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicGF0aCIsICJ0eXBlIjogImFycmF5Iiwg
Iml0ZW1zIjogeyAidHlwZSI6ICJpbnRlZ2VyIiB9LCAiZGVzY3JpcHRpb24iOiAiVGhlIHJ1bGUg
cGF0aCB3aXRoaW4gdGhlIHN0eWxlc2hlZXQgKHVzaW5nIHRoZSBydWxlIHBhcmVudCBoaWVyYXJj
aHkpLiIgfQogICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9u
IjogIlRoaXMgb2JqZWN0IGlkZW50aWZpZXMgYSBDU1MgcnVsZSBpbiBhIHVuaXF1ZSB3YXkuIgog
ICAgICAgICAgICAgfSwKQEAgLTIwMjQsMTQgKzIwMjQsMjEgQEAKICAgICAgICAgICAgICAgICAi
aWQiOiAiQ1NTUnVsZSIsCiAgICAgICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKICAgICAg
ICAgICAgICAgICAicHJvcGVydGllcyI6IFsKKyAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJ0eXBlIiwgInR5cGUiOiAic3RyaW5nIiwgImVudW0iOiBbInN0eWxlIiwgIm1lZGlhIiwgImlt
cG9ydCIsICJmb250LWZhY2UiLCAicGFnZSIsICJjaGFyc2V0IiwgImtleWZyYW1lcyIsICJ1bmtu
b3duIl0sICJvcHRpb25hbCI6IHRydWUsICJkZXNjcmlwdGlvbiI6ICJUaGUgQ1NTIHJ1bGUgdHlw
ZTogXCJzdHlsZVwiIChpbXBsaWVkIGlmIGFic2VudCkgZm9yIHN0eWxlIHJ1bGVzOyBcIm1lZGlh
XCIgZm9yIG1lZGlhIHJ1bGVzOyBcImltcG9ydFwiLCBcImZvbnQtZmFjZVwiLCBcInBhZ2VcIiwg
XCJrZXlmcmFtZXNcIiwgYW5kIFwiY2hhcnNldFwiIGZvciB0aGUgY29ycmVzcG9uZGluZyBhdC1y
dWxlczsgXCJ1bmtub3duXCIgZm9yIG90aGVyIHR5cGVzIG9mIHJ1bGVzLiJ9LAorICAgICAgICAg
ICAgICAgICAgICB7ICJuYW1lIjogIm9yaWdpbiIsICIkcmVmIjogIlN0eWxlU2hlZXRPcmlnaW4i
LCAiZGVzY3JpcHRpb24iOiAiUGFyZW50IHN0eWxlc2hlZXQncyBvcmlnaW4uIn0sCisKICAgICAg
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJydWxlSWQiLCAiJHJlZiI6ICJDU1NSdWxlSWQiLCAi
b3B0aW9uYWwiOiB0cnVlLCAiZGVzY3JpcHRpb24iOiAiVGhlIENTUyBydWxlIGlkZW50aWZpZXIg
KGFic2VudCBmb3IgdXNlciBhZ2VudCBzdHlsZXNoZWV0IGFuZCB1c2VyLXNwZWNpZmllZCBzdHls
ZXNoZWV0IHJ1bGVzKS4ifSwKLSAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzZWxlY3Rv
clRleHQiLCAidHlwZSI6ICJzdHJpbmciLCAiZGVzY3JpcHRpb24iOiAiUnVsZSBzZWxlY3Rvci4i
fSwKICAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzb3VyY2VVUkwiLCAidHlwZSI6ICJz
dHJpbmciLCAib3B0aW9uYWwiOiB0cnVlLCAiZGVzY3JpcHRpb24iOiAiUGFyZW50IHN0eWxlc2hl
ZXQgcmVzb3VyY2UgVVJMIChmb3IgcmVndWxhciBydWxlcykuIn0sCi0gICAgICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAic291cmNlTGluZSIsICJ0eXBlIjogImludGVnZXIiLCAiZGVzY3JpcHRp
b24iOiAiTGluZSBvcmRpbmFsIG9mIHRoZSBydWxlIHNlbGVjdG9yIHN0YXJ0IGNoYXJhY3RlciBp
biB0aGUgcmVzb3VyY2UuIn0sCi0gICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAib3JpZ2lu
IiwgIiRyZWYiOiAiU3R5bGVTaGVldE9yaWdpbiIsICJkZXNjcmlwdGlvbiI6ICJQYXJlbnQgc3R5
bGVzaGVldCdzIG9yaWdpbi4ifSwKLSAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzdHls
ZSIsICIkcmVmIjogIkNTU1N0eWxlIiwgImRlc2NyaXB0aW9uIjogIkFzc29jaWF0ZWQgc3R5bGUg
ZGVjbGFyYXRpb24uIiB9LAotICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNlbGVjdG9y
UmFuZ2UiLCAiJHJlZiI6ICJTb3VyY2VSYW5nZSIsICJvcHRpb25hbCI6IHRydWUsICJkZXNjcmlw
dGlvbiI6ICJUaGUgcnVsZSBzZWxlY3RvciByYW5nZSBpbiB0aGUgdW5kZXJseWluZyByZXNvdXJj
ZSAoaWYgYXZhaWxhYmxlKS4iIH0sCi0gICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibWVk
aWEiLCAidHlwZSI6ICJhcnJheSIsICJpdGVtcyI6IHsgIiRyZWYiOiAiQ1NTTWVkaWEiIH0sICJv
cHRpb25hbCI6IHRydWUsICJkZXNjcmlwdGlvbiI6ICJNZWRpYSBsaXN0IGFycmF5IChmb3IgcnVs
ZXMgaW52b2x2aW5nIG1lZGlhIHF1ZXJpZXMpLiBUaGUgYXJyYXkgZW51bWVyYXRlcyBtZWRpYSBx
dWVyaWVzIHN0YXJ0aW5nIHdpdGggdGhlIGlubmVybW9zdCBvbmUsIGdvaW5nIG91dHdhcmRzLiIg
fQorICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogImhlYWRlclJhbmdlIiwgIiRyZWYiOiAi
U291cmNlUmFuZ2UiLCAib3B0aW9uYWwiOiB0cnVlLCAiZGVzY3JpcHRpb24iOiAiVGhlIHJ1bGUg
aGVhZGVyIChlLmcuIHNlbGVjdG9yIGZvciBzdHlsZSBhbmQgQHBhZ2UgcnVsZXMpIHJhbmdlIGlu
IHRoZSB1bmRlcmx5aW5nIHJlc291cmNlIChpZiBhdmFpbGFibGUpLiIgfSwKKyAgICAgICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJib2R5UmFuZ2UiLCAiJHJlZiI6ICJTb3VyY2VSYW5nZSIsICJv
cHRpb25hbCI6IHRydWUsICJkZXNjcmlwdGlvbiI6ICJUaGUgcnVsZSBib2R5IHJhbmdlIGluIHRo
ZSB1bmRlcmx5aW5nIHJlc291cmNlIChpZiBhdmFpbGFibGUpLiIgfSwKKworICAgICAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogInNlbGVjdG9yVGV4dCIsICJ0eXBlIjogInN0cmluZyIsICJvcHRp
b25hbCI6IHRydWUsICJkZXNjcmlwdGlvbiI6ICJSdWxlIHNlbGVjdG9yIChmb3Igc3R5bGUgYW5k
IEBwYWdlIHJ1bGVzKSBvciBuYW1lIChmb3IgQC13ZWJraXQta2V5ZnJhbWVzIHJ1bGVzKS4ifSwK
KyAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzb3VyY2VMaW5lIiwgInR5cGUiOiAiaW50
ZWdlciIsICJvcHRpb25hbCI6IHRydWUsICJkZXNjcmlwdGlvbiI6ICJMaW5lIG9yZGluYWwgb2Yg
dGhlIHJ1bGUgdGV4dCBzdGFydCBjaGFyYWN0ZXIgaW4gdGhlIHJlc291cmNlLiJ9LAorICAgICAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogInN0eWxlIiwgIiRyZWYiOiAiQ1NTU3R5bGUiLCAib3B0
aW9uYWwiOiB0cnVlLCAiZGVzY3JpcHRpb24iOiAiQXNzb2NpYXRlZCBzdHlsZSBkZWNsYXJhdGlv
biAoZm9yIHN0eWxlIHJ1bGVzKS4iIH0sCisgICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
bWVkaWEiLCAidHlwZSI6ICJhcnJheSIsICJpdGVtcyI6IHsgIiRyZWYiOiAiQ1NTTWVkaWEiIH0s
ICJvcHRpb25hbCI6IHRydWUsICJkZXNjcmlwdGlvbiI6ICJNZWRpYSBsaXN0IGFycmF5IChmb3Ig
c3R5bGUgcnVsZXMgaW52b2x2aW5nIG1lZGlhIHF1ZXJpZXMpLiBUaGUgYXJyYXkgZW51bWVyYXRl
cyBtZWRpYSBxdWVyaWVzIHN0YXJ0aW5nIHdpdGggdGhlIGlubmVybW9zdCBvbmUsIGdvaW5nIG91
dHdhcmRzLiIgfSwKKworICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm1lZGlhVGV4dCIs
ICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6IHRydWUsICJkZXNjcmlwdGlvbiI6ICJNZWRp
YSB0ZXh0IChtYW5kYXRvcnkgZm9yIEBtZWRpYSBydWxlcykuIn0sCisgICAgICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAiY2hpbGRSdWxlcyIsICJ0eXBlIjogImFycmF5IiwgIml0ZW1zIjogeyAi
JHJlZiI6ICJDU1NSdWxlIiB9LCAib3B0aW9uYWwiOiB0cnVlLCAiZGVzY3JpcHRpb24iOiAiQ2hp
bGQgcnVsZXMgKG1hbmRhdG9yeSBmb3IgQG1lZGlhLCBAcGFnZSwgYW5kIEBmb250LWZhY2UgcnVs
ZXMpLiIgfQogICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9u
IjogIkNTUyBydWxlIHJlcHJlc2VudGF0aW9uLiIKICAgICAgICAgICAgIH0sCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmNwcAppbmRleCA5MTcwMjdmYjJj
MDQ3MTczZThhYWE0ZDMwOTMzYmU4NzYxMzg5ZTgzLi41ZGM0OGI1OTkwZmU4OWEwMjU1MDg5YmIw
ZDE0NmMyM2NlZDM2MDkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yQ1NTQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JDU1NBZ2VudC5jcHAKQEAgLTYwMiw3ICs2MDIsNyBAQCB2b2lkIEluc3BlY3RvckNTU0FnZW50
OjpnZXRNYXRjaGVkU3R5bGVzRm9yTm9kZShFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGludCBu
bwogICAgICAgICAgICAgaWYgKHBhcmVudEVsZW1lbnQtPnN0eWxlKCkgJiYgcGFyZW50RWxlbWVu
dC0+c3R5bGUoKS0+bGVuZ3RoKCkpIHsKICAgICAgICAgICAgICAgICBJbnNwZWN0b3JTdHlsZVNo
ZWV0Rm9ySW5saW5lU3R5bGUqIHN0eWxlU2hlZXQgPSBhc0luc3BlY3RvclN0eWxlU2hlZXQocGFy
ZW50RWxlbWVudCk7CiAgICAgICAgICAgICAgICAgaWYgKHN0eWxlU2hlZXQpCi0gICAgICAgICAg
ICAgICAgICAgIHBhcmVudFN0eWxlLT5zZXRJbmxpbmVTdHlsZShzdHlsZVNoZWV0LT5idWlsZE9i
amVjdEZvclN0eWxlKHN0eWxlU2hlZXQtPnN0eWxlRm9ySWQoSW5zcGVjdG9yQ1NTSWQoc3R5bGVT
aGVldC0+aWQoKSwgMCkpKSk7CisgICAgICAgICAgICAgICAgICAgIHBhcmVudFN0eWxlLT5zZXRJ
bmxpbmVTdHlsZShzdHlsZVNoZWV0LT5idWlsZE9iamVjdEZvclN0eWxlKHN0eWxlU2hlZXQtPnN0
eWxlRm9ySWQoSW5zcGVjdG9yQ1NTSWQ6OmZvcklubGluZVN0eWxlKHN0eWxlU2hlZXQtPmlkKCkp
KSkpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpbmhlcml0ZWRTdHlsZXMtPmFkZEl0
ZW0ocGFyZW50U3R5bGUucmVsZWFzZSgpKTsKQEAgLTYzNyw3ICs2MzcsNyBAQCB2b2lkIEluc3Bl
Y3RvckNTU0FnZW50OjpnZXRDb21wdXRlZFN0eWxlRm9yTm9kZShFcnJvclN0cmluZyogZXJyb3JT
dHJpbmcsIGludCBubwogICAgIHJlY2FsY1N0eWxlRm9yUHNldWRvU3RhdGVJZk5lZWRlZChlbGVt
ZW50LCBmb3JjZWRQc2V1ZG9DbGFzc2VzID8gZm9yY2VkUHNldWRvQ2xhc3Nlcy0+Z2V0KCkgOiAw
KTsKIAogICAgIFJlZlB0cjxDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24+IGNvbXB1dGVkU3R5
bGVJbmZvID0gQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uOjpjcmVhdGUoZWxlbWVudCwgdHJ1
ZSk7Ci0gICAgUmVmUHRyPEluc3BlY3RvclN0eWxlPiBpbnNwZWN0b3JTdHlsZSA9IEluc3BlY3Rv
clN0eWxlOjpjcmVhdGUoSW5zcGVjdG9yQ1NTSWQoKSwgY29tcHV0ZWRTdHlsZUluZm8sIDApOwor
ICAgIFJlZlB0cjxJbnNwZWN0b3JTdHlsZT4gaW5zcGVjdG9yU3R5bGUgPSBJbnNwZWN0b3JTdHls
ZTo6Y3JlYXRlV2l0aFN0eWxlU2hlZXQoSW5zcGVjdG9yQ1NTSWQoKSwgY29tcHV0ZWRTdHlsZUlu
Zm8sIDApOwogICAgIHN0eWxlID0gaW5zcGVjdG9yU3R5bGUtPmJ1aWxkQXJyYXlGb3JDb21wdXRl
ZFN0eWxlKCk7CiB9CiAKQEAgLTc1NSw3ICs3NTUsNyBAQCB2b2lkIEluc3BlY3RvckNTU0FnZW50
OjphZGRSdWxlKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgY29uc3QgaW50IGNvbnRleHROb2Rl
SQogICAgIH0KIAogICAgIEluc3BlY3RvckNTU0lkIHJ1bGVJZCA9IHJhd0FjdGlvbi0+bmV3UnVs
ZUlkKCk7Ci0gICAgQ1NTU3R5bGVSdWxlKiBydWxlID0gaW5zcGVjdG9yU3R5bGVTaGVldC0+cnVs
ZUZvcklkKHJ1bGVJZCk7CisgICAgQ1NTUnVsZSogcnVsZSA9IGluc3BlY3RvclN0eWxlU2hlZXQt
PnJ1bGVGb3JJZChydWxlSWQpOwogICAgIHJlc3VsdCA9IGluc3BlY3RvclN0eWxlU2hlZXQtPmJ1
aWxkT2JqZWN0Rm9yUnVsZShydWxlKTsKIH0KIApAQCAtOTc3LDcgKzk3Nyw3IEBAIFBhc3NSZWZQ
dHI8VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTU3R5bGU+IEluc3BlY3RvckNTU0FnZW50OjpidWlsZE9i
amVjdEZvckF0dHJpYnV0CiAgICAgaWYgKCFhdHRyaWJ1dGVTdHlsZSkKICAgICAgICAgcmV0dXJu
IDA7CiAKLSAgICBSZWZQdHI8SW5zcGVjdG9yU3R5bGU+IGluc3BlY3RvclN0eWxlID0gSW5zcGVj
dG9yU3R5bGU6OmNyZWF0ZShJbnNwZWN0b3JDU1NJZCgpLCBhdHRyaWJ1dGVTdHlsZS0+ZW5zdXJl
Q1NTU3R5bGVEZWNsYXJhdGlvbigpLCAwKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yU3R5bGU+IGlu
c3BlY3RvclN0eWxlID0gSW5zcGVjdG9yU3R5bGU6OmNyZWF0ZVdpdGhTdHlsZVNoZWV0KEluc3Bl
Y3RvckNTU0lkKCksIGF0dHJpYnV0ZVN0eWxlLT5lbnN1cmVDU1NTdHlsZURlY2xhcmF0aW9uKCks
IDApOwogICAgIHJldHVybiBpbnNwZWN0b3JTdHlsZS0+YnVpbGRPYmplY3RGb3JTdHlsZSgpOwog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVT
aGVldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5j
cHAKaW5kZXggM2NkOTE1MGY2MzA5YmEwYzlhOGI4OTZmMzI4ODRjOTdkZjI3ODM2Ny4uZmM5NTg0
YjFhMzYxNTgzNzEzYjE2NGY4ZjNkYzE4YzNiMTkyYTUyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNwcApAQCAtMjgsOCArMjgsMTAgQEAK
IAogI2luY2x1ZGUgIkluc3BlY3RvclN0eWxlU2hlZXQuaCIKIAorI2luY2x1ZGUgIkNTU0ZvbnRG
YWNlUnVsZS5oIgogI2luY2x1ZGUgIkNTU0ltcG9ydFJ1bGUuaCIKICNpbmNsdWRlICJDU1NNZWRp
YVJ1bGUuaCIKKyNpbmNsdWRlICJDU1NQYWdlUnVsZS5oIgogI2luY2x1ZGUgIkNTU1BhcnNlci5o
IgogI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKICNpbmNsdWRlICJDU1NQcm9wZXJ0eVNv
dXJjZURhdGEuaCIKQEAgLTc1LDcgKzc3LDcgQEAgcHVibGljOgogICAgIFJ1bGVTb3VyY2VEYXRh
TGlzdCogc291cmNlRGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlRGF0YS5nZXQoKTsgfQog
ICAgIHZvaWQgc2V0U291cmNlRGF0YShQYXNzT3duUHRyPFJ1bGVTb3VyY2VEYXRhTGlzdD4pOwog
ICAgIGJvb2wgaGFzU291cmNlRGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlRGF0YTsgfQot
ICAgIFBhc3NSZWZQdHI8V2ViQ29yZTo6Q1NTUnVsZVNvdXJjZURhdGE+IHJ1bGVTb3VyY2VEYXRh
QXQodW5zaWduZWQpIGNvbnN0OworICAgIFBhc3NSZWZQdHI8V2ViQ29yZTo6Q1NTUnVsZVNvdXJj
ZURhdGE+IHJ1bGVTb3VyY2VEYXRhQXQoY29uc3QgVmVjdG9yPGludD4mKSBjb25zdDsKIAogcHJp
dmF0ZToKIApAQCAtOTksMTcgKzEwMSw2IEBAIHZvaWQgUGFyc2VkU3R5bGVTaGVldDo6c2V0VGV4
dChjb25zdCBTdHJpbmcmIHRleHQpCiAgICAgc2V0U291cmNlRGF0YShudWxscHRyKTsKIH0KIAot
c3RhdGljIHZvaWQgZmxhdHRlblNvdXJjZURhdGEoUnVsZVNvdXJjZURhdGFMaXN0KiBkYXRhTGlz
dCwgUnVsZVNvdXJjZURhdGFMaXN0KiB0YXJnZXQpCi17Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBkYXRhTGlzdC0+c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgUmVmUHRyPENTU1J1bGVTb3Vy
Y2VEYXRhPiYgZGF0YSA9IGRhdGFMaXN0LT5hdChpKTsKLSAgICAgICAgaWYgKGRhdGEtPnR5cGUg
PT0gQ1NTUnVsZVNvdXJjZURhdGE6OlNUWUxFX1JVTEUpCi0gICAgICAgICAgICB0YXJnZXQtPmFw
cGVuZChkYXRhKTsKLSAgICAgICAgZWxzZSBpZiAoZGF0YS0+dHlwZSA9PSBDU1NSdWxlU291cmNl
RGF0YTo6TUVESUFfUlVMRSkKLSAgICAgICAgICAgIGZsYXR0ZW5Tb3VyY2VEYXRhKCZkYXRhLT5j
aGlsZFJ1bGVzLCB0YXJnZXQpOwotICAgIH0KLX0KLQogdm9pZCBQYXJzZWRTdHlsZVNoZWV0Ojpz
ZXRTb3VyY2VEYXRhKFBhc3NPd25QdHI8UnVsZVNvdXJjZURhdGFMaXN0PiBzb3VyY2VEYXRhKQog
ewogICAgIGlmICghc291cmNlRGF0YSkgewpAQCAtMTE3LDIwICsxMDgsMzAgQEAgdm9pZCBQYXJz
ZWRTdHlsZVNoZWV0OjpzZXRTb3VyY2VEYXRhKFBhc3NPd25QdHI8UnVsZVNvdXJjZURhdGFMaXN0
PiBzb3VyY2VEYXRhKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbV9zb3VyY2VEYXRh
ID0gYWRvcHRQdHIobmV3IFJ1bGVTb3VyY2VEYXRhTGlzdCgpKTsKLQotICAgIC8vIEZJWE1FOiBU
aGlzIGlzIGEgdGVtcG9yYXJ5IHNvbHV0aW9uIHRvIHJldGFpbiB0aGUgb3JpZ2luYWwgZmxhdCBz
b3VyY2VEYXRhIHN0cnVjdHVyZQotICAgIC8vIGNvbnRhaW5pbmcgb25seSBzdHlsZSBydWxlcywg
ZXZlbiB0aG91Z2ggQ1NTUGFyc2VyIG5vdyBwcm92aWRlcyB0aGUgZnVsbCBydWxlIHNvdXJjZSBk
YXRhIHRyZWUuCi0gICAgLy8gTm9ybWFsbHksIHdlIHNob3VsZCBqdXN0IGFzc2lnbiBtX3NvdXJj
ZURhdGEgPSBzb3VyY2VEYXRhOwotICAgIGZsYXR0ZW5Tb3VyY2VEYXRhKHNvdXJjZURhdGEuZ2V0
KCksIG1fc291cmNlRGF0YS5nZXQoKSk7CisgICAgbV9zb3VyY2VEYXRhID0gc291cmNlRGF0YTsK
IH0KIAotUGFzc1JlZlB0cjxXZWJDb3JlOjpDU1NSdWxlU291cmNlRGF0YT4gUGFyc2VkU3R5bGVT
aGVldDo6cnVsZVNvdXJjZURhdGFBdCh1bnNpZ25lZCBpbmRleCkgY29uc3QKK1Bhc3NSZWZQdHI8
V2ViQ29yZTo6Q1NTUnVsZVNvdXJjZURhdGE+IFBhcnNlZFN0eWxlU2hlZXQ6OnJ1bGVTb3VyY2VE
YXRhQXQoY29uc3QgVmVjdG9yPGludD4mIHBhdGgpIGNvbnN0CiB7Ci0gICAgaWYgKCFoYXNTb3Vy
Y2VEYXRhKCkgfHwgaW5kZXggPj0gbV9zb3VyY2VEYXRhLT5zaXplKCkpCisgICAgQVNTRVJUKCFw
YXRoLmlzRW1wdHkoKSk7CisgICAgaWYgKCFoYXNTb3VyY2VEYXRhKCkpCiAgICAgICAgIHJldHVy
biAwOwogCi0gICAgcmV0dXJuIG1fc291cmNlRGF0YS0+YXQoaW5kZXgpOworICAgIFJ1bGVTb3Vy
Y2VEYXRhTGlzdCogc291cmNlRGF0YSA9IG1fc291cmNlRGF0YS5nZXQoKTsKKyAgICB1bnNpZ25l
ZCBwYXRoTGVuZ3RoID0gcGF0aC5zaXplKCk7CisgICAgZm9yIChzaXplX3QgY3VycmVudFBhdGhJ
bmRleCA9IDA7IGN1cnJlbnRQYXRoSW5kZXggPCBwYXRoTGVuZ3RoIC0gMTsgKytjdXJyZW50UGF0
aEluZGV4KSB7CisgICAgICAgIHVuc2lnbmVkIHJ1bGVJbmRleCA9IHBhdGguYXQoY3VycmVudFBh
dGhJbmRleCk7CisgICAgICAgIGlmIChydWxlSW5kZXggPj0gc291cmNlRGF0YS0+c2l6ZSgpKQor
ICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHNvdXJjZURhdGEgPSAmc291cmNlRGF0YS0+
YXQocnVsZUluZGV4KS0+Y2hpbGRSdWxlczsKKyAgICAgICAgaWYgKCFzb3VyY2VEYXRhKQorICAg
ICAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgaW50IGxhc3RQYXRoSXRlbSA9IHBhdGgu
bGFzdCgpOworICAgIGlmIChsYXN0UGF0aEl0ZW0gPj0gc3RhdGljX2Nhc3Q8aW50Pihzb3VyY2VE
YXRhLT5zaXplKCkpKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gc291cmNlRGF0YS0+
YXQobGFzdFBhdGhJdGVtKTsKIH0KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMTQyLDYgKzE0
MywyMjUgQEAgZW51bSBNZWRpYUxpc3RTb3VyY2UgewogICAgIE1lZGlhTGlzdFNvdXJjZUltcG9y
dFJ1bGUKIH07CiAKK3N0YXRpYyBQYXNzUmVmUHRyPENTU1J1bGVMaXN0PiBhc0NTU1J1bGVMaXN0
KENTU1N0eWxlU2hlZXQqIHN0eWxlU2hlZXQpCit7CisgICAgaWYgKCFzdHlsZVNoZWV0KQorICAg
ICAgICByZXR1cm4gMDsKKworICAgIFJlZlB0cjxTdGF0aWNDU1NSdWxlTGlzdD4gbGlzdCA9IFN0
YXRpY0NTU1J1bGVMaXN0OjpjcmVhdGUoKTsKKyAgICBWZWN0b3I8UmVmUHRyPENTU1J1bGU+ID4m
IGxpc3RSdWxlcyA9IGxpc3QtPnJ1bGVzKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMCwgc2l6
ZSA9IHN0eWxlU2hlZXQtPmxlbmd0aCgpOyBpIDwgc2l6ZTsgKytpKQorICAgICAgICBsaXN0UnVs
ZXMuYXBwZW5kKHN0eWxlU2hlZXQtPml0ZW0oaSkpOworICAgIHJldHVybiBsaXN0LnJlbGVhc2Uo
KTsKK30KKworc3RhdGljIFBhc3NSZWZQdHI8Q1NTUnVsZUxpc3Q+IGFzQ1NTUnVsZUxpc3QoQ1NT
UnVsZSogcnVsZSkKK3sKKyAgICBpZiAoIXJ1bGUpCisgICAgICAgIHJldHVybiAwOworCisgICAg
aWYgKHJ1bGUtPmlzTWVkaWFSdWxlKCkpCisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxDU1NN
ZWRpYVJ1bGUqPihydWxlKS0+Y3NzUnVsZXMoKTsKKworICAgIHJldHVybiAwOworfQorCitjbGFz
cyBSdWxlVmlzaXRvciB7CitwdWJsaWM6CisgICAgc3RhdGljIGJvb2wgZm9yUnVsZXMoUGFzc1Jl
ZlB0cjxDU1NSdWxlTGlzdD4gcnVsZUxpc3QsIFJ1bGVWaXNpdG9yJiB2aXNpdG9yKQorICAgIHsK
KyAgICAgICAgaWYgKCFydWxlTGlzdCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwLCBzaXplID0gcnVsZUxpc3QtPmxlbmd0aCgpOyBpIDwg
c2l6ZTsgKytpKSB7CisgICAgICAgICAgICBDU1NSdWxlKiBydWxlID0gcnVsZUxpc3QtPml0ZW0o
aSk7CisgICAgICAgICAgICBDU1NTdHlsZVJ1bGUqIHN0eWxlUnVsZSA9IEluc3BlY3RvckNTU0Fn
ZW50Ojphc0NTU1N0eWxlUnVsZShydWxlKTsKKyAgICAgICAgICAgIGlmIChzdHlsZVJ1bGUpIHsK
KyAgICAgICAgICAgICAgICBpZiAodmlzaXRvci52aXNpdChzdHlsZVJ1bGUpKQorICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgc3dpdGNoIChydWxlLT50eXBlKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIENTU1J1
bGU6Ok1FRElBX1JVTEU6IHsKKyAgICAgICAgICAgICAgICAgICAgQ1NTTWVkaWFSdWxlKiBtZWRp
YVJ1bGUgPSBzdGF0aWNfY2FzdDxDU1NNZWRpYVJ1bGUqPihydWxlKTsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKCF2aXNpdG9yLndpbGxWaXNpdE1lZGlhUnVsZShtZWRpYVJ1bGUpKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBSZWZQdHI8Q1NTUnVsZUxpc3Q+IGNoaWxkUnVsZUxpc3QgPSBh
c0NTU1J1bGVMaXN0KHJ1bGUpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkUnVs
ZUxpc3QpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm9yUnVsZXMoY2hpbGRS
dWxlTGlzdCwgdmlzaXRvcikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZpc2l0b3IuZGlkVmlzaXRNZWRpYVJ1bGUobWVk
aWFSdWxlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY2Fz
ZSBDU1NSdWxlOjpJTVBPUlRfUlVMRTogeworICAgICAgICAgICAgICAgICAgICBpZiAodmlzaXRv
ci52aXNpdChzdGF0aWNfY2FzdDxDU1NJbXBvcnRSdWxlKj4ocnVsZSkpKQorICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjYXNlIENTU1J1bGU6OlBBR0VfUlVMRToK
KyAgICAgICAgICAgICAgICAgICAgaWYgKHZpc2l0b3IudmlzaXQoc3RhdGljX2Nhc3Q8Q1NTUGFn
ZVJ1bGUqPihydWxlKSkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBDU1NSdWxlOjpG
T05UX0ZBQ0VfUlVMRToKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZpc2l0b3IudmlzaXQoc3Rh
dGljX2Nhc3Q8Q1NTRm9udEZhY2VSdWxlKj4ocnVsZSkpKQorICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIGNhc2UgQ1NTUnVsZTo6V0VCS0lUX0tFWUZSQU1FU19SVUxFOgorICAgICAgICAgICAgICAg
ICAgICBpZiAodmlzaXRvci52aXNpdChzdGF0aWNfY2FzdDxXZWJLaXRDU1NLZXlmcmFtZXNSdWxl
Kj4ocnVsZSkpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICAgICAgICAgIGlmICh2aXNpdG9yLnZpc2l0KHJ1bGUpKQorICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICB2aXJ0dWFsIH5SdWxlVmlzaXRvcigpCisgICAgeworICAgIH0KKworICAg
IHZpcnR1YWwgYm9vbCB3aWxsVmlzaXRNZWRpYVJ1bGUoQ1NTTWVkaWFSdWxlKikgPSAwOworICAg
IHZpcnR1YWwgYm9vbCBkaWRWaXNpdE1lZGlhUnVsZShDU1NNZWRpYVJ1bGUqKSA9IDA7CisgICAg
dmlydHVhbCBib29sIHZpc2l0KENTU1N0eWxlUnVsZSopID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wg
dmlzaXQoQ1NTSW1wb3J0UnVsZSogcnVsZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2aXNpdChz
dGF0aWNfY2FzdDxDU1NSdWxlKj4ocnVsZSkpOworICAgIH0KKyAgICB2aXJ0dWFsIGJvb2wgdmlz
aXQoQ1NTRm9udEZhY2VSdWxlKiBydWxlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZpc2l0KHN0
YXRpY19jYXN0PENTU1J1bGUqPihydWxlKSk7CisgICAgfQorICAgIHZpcnR1YWwgYm9vbCB2aXNp
dChDU1NQYWdlUnVsZSogcnVsZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2aXNpdChzdGF0aWNf
Y2FzdDxDU1NSdWxlKj4ocnVsZSkpOworICAgIH0KKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXQoV2Vi
S2l0Q1NTS2V5ZnJhbWVzUnVsZSogcnVsZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2aXNpdChz
dGF0aWNfY2FzdDxDU1NSdWxlKj4ocnVsZSkpOworICAgIH0KKyAgICB2aXJ0dWFsIGJvb2wgdmlz
aXQoQ1NTUnVsZSopID0gMDsKK307CisKK2NsYXNzIEluc3BlY3RvclJ1bGVUcmVlQnVpbGRlciA6
IHB1YmxpYyBSdWxlVmlzaXRvciB7CitwdWJsaWM6CisgICAgSW5zcGVjdG9yUnVsZVRyZWVCdWls
ZGVyKEluc3BlY3RvclN0eWxlU2hlZXQqIHN0eWxlU2hlZXQsIEluc3BlY3RvclJ1bGVMaXN0KiBy
dWxlTGlzdCkKKyAgICAgICAgOiBtX3N0eWxlU2hlZXQoc3R5bGVTaGVldCkKKyAgICB7CisgICAg
ICAgIG1fcnVsZUxpc3RTdGFjay5hcHBlbmQocnVsZUxpc3QpOworICAgICAgICBtX3BhdGguYXBw
ZW5kKDApOworICAgIH0KKworICAgIHZpcnR1YWwgfkluc3BlY3RvclJ1bGVUcmVlQnVpbGRlcigp
IHsgfQorCisgICAgdmlydHVhbCBib29sIHdpbGxWaXNpdE1lZGlhUnVsZShDU1NNZWRpYVJ1bGUq
IHJ1bGUpCisgICAgeworICAgICAgICBSZWZQdHI8SW5zcGVjdG9yUnVsZT4gbWVkaWFJbnNwZWN0
b3JSdWxlID0gSW5zcGVjdG9yUnVsZTo6Y3JlYXRlKEluc3BlY3RvckNTU0lkKG1fc3R5bGVTaGVl
dC0+aWQoKSwgbV9wYXRoKSwgcnVsZSwgbV9zdHlsZVNoZWV0KTsKKyAgICAgICAgbV9ydWxlTGlz
dFN0YWNrLmxhc3QoKS0+YXBwZW5kKG1lZGlhSW5zcGVjdG9yUnVsZSk7CisgICAgICAgIG1fcnVs
ZUxpc3RTdGFjay5hcHBlbmQobWVkaWFJbnNwZWN0b3JSdWxlLT5jaGlsZFJ1bGVMaXN0KCkpOwor
ICAgICAgICBtX3BhdGguYXBwZW5kKDApOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAgdmlydHVhbCBib29sIGRpZFZpc2l0TWVkaWFSdWxlKENTU01lZGlhUnVsZSopCisgICAg
eworICAgICAgICBtX3BhdGgucmVtb3ZlTGFzdCgpOworICAgICAgICBtX3J1bGVMaXN0U3RhY2su
cmVtb3ZlTGFzdCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgdmlydHVh
bCBib29sIHZpc2l0KENTU1N0eWxlUnVsZSogcnVsZSkKKyAgICB7CisgICAgICAgIG1fcnVsZUxp
c3RTdGFjay5sYXN0KCktPmFwcGVuZChJbnNwZWN0b3JSdWxlOjpjcmVhdGUoSW5zcGVjdG9yQ1NT
SWQobV9zdHlsZVNoZWV0LT5pZCgpLCBtX3BhdGgpLCBydWxlLCBtX3N0eWxlU2hlZXQpKTsKKyAg
ICAgICAgcmV0dXJuIHZpc2l0Q29tbW9uKCk7CisgICAgfQorCisgICAgdmlydHVhbCBib29sIHZp
c2l0KENTU1J1bGUqIHJ1bGUpCisgICAgeworICAgICAgICBtX3J1bGVMaXN0U3RhY2subGFzdCgp
LT5hcHBlbmQoSW5zcGVjdG9yUnVsZTo6Y3JlYXRlKEluc3BlY3RvckNTU0lkKG1fc3R5bGVTaGVl
dC0+aWQoKSwgbV9wYXRoKSwgcnVsZSwgbV9zdHlsZVNoZWV0KSk7CisgICAgICAgIHJldHVybiB2
aXNpdENvbW1vbigpOworICAgIH0KKworCitwcml2YXRlOgorICAgIGJvb2wgdmlzaXRDb21tb24o
KQorICAgIHsKKyAgICAgICAgc2l6ZV90IGxhc3RJbmRleCA9IG1fcGF0aC5zaXplKCkgLSAxOwor
ICAgICAgICBtX3BhdGhbbGFzdEluZGV4XSA9IG1fcGF0aC5hdChsYXN0SW5kZXgpICsgMTsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIEluc3BlY3RvclN0eWxlU2hlZXQqIG1f
c3R5bGVTaGVldDsKKyAgICBWZWN0b3I8SW5zcGVjdG9yUnVsZUxpc3QqPiBtX3J1bGVMaXN0U3Rh
Y2s7CisgICAgVmVjdG9yPGludD4gbV9wYXRoOworfTsKKworY2xhc3MgUnVsZVBhdGhCdWlsZGVy
IDogcHVibGljIFJ1bGVWaXNpdG9yIHsKK3B1YmxpYzoKKyAgICBSdWxlUGF0aEJ1aWxkZXIoQ1NT
UnVsZSogcnVsZSwgVmVjdG9yPGludD4mIHBhdGgpCisgICAgICAgIDogbV9mb3VuZChmYWxzZSkK
KyAgICAgICAgLCBtX3J1bGUocnVsZSkKKyAgICAgICAgLCBtX3BhdGgocGF0aCkKKyAgICB7Cisg
ICAgICAgIG1fcGF0aC5hcHBlbmQoMCk7CisgICAgfQorCisgICAgdmlydHVhbCB+UnVsZVBhdGhC
dWlsZGVyKCkgeyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgd2lsbFZpc2l0TWVkaWFSdWxlKENTU01l
ZGlhUnVsZSogcnVsZSkKKyAgICB7CisgICAgICAgIGlmIChtX3J1bGUgPT0gcnVsZSkgeworICAg
ICAgICAgICAgbV9mb3VuZCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgfQorCisgICAgICAgIG1fcGF0aC5hcHBlbmQoMCk7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICB2aXJ0dWFsIGJvb2wgZGlkVmlzaXRNZWRpYVJ1bGUoQ1NTTWVkaWFSdWxl
KikKKyAgICB7CisgICAgICAgIGlmIChtX2ZvdW5kKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisKKyAgICAgICAgbV9wYXRoLnJlbW92ZUxhc3QoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKworICAgIHZpcnR1YWwgYm9vbCB2aXNpdChDU1NTdHlsZVJ1bGUqIHJ1bGUpCisgICAg
eworICAgICAgICByZXR1cm4gdmlzaXQoc3RhdGljX2Nhc3Q8Q1NTUnVsZSo+KHJ1bGUpKTsKKyAg
ICB9CisKKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXQoQ1NTUnVsZSogcnVsZSkKKyAgICB7CisgICAg
ICAgIGlmIChtX3J1bGUgPT0gcnVsZSkgeworICAgICAgICAgICAgbV9mb3VuZCA9IHRydWU7Cisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIHNpemVfdCBsYXN0
SW5kZXggPSBtX3BhdGguc2l6ZSgpIC0gMTsKKyAgICAgICAgbV9wYXRoW2xhc3RJbmRleF0gPSBt
X3BhdGguYXQobGFzdEluZGV4KSArIDE7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisK
KyAgICBib29sIGZvdW5kKCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX2ZvdW5kOworICAgIH0K
KworcHJpdmF0ZToKKyAgICBib29sIG1fZm91bmQ7CisgICAgQ1NTUnVsZSogbV9ydWxlOworICAg
IFZlY3RvcjxpbnQ+JiBtX3BhdGg7Cit9OworCiBzdGF0aWMgUGFzc1JlZlB0cjxUeXBlQnVpbGRl
cjo6Q1NTOjpTb3VyY2VSYW5nZT4gYnVpbGRTb3VyY2VSYW5nZU9iamVjdChjb25zdCBTb3VyY2VS
YW5nZSYgcmFuZ2UpCiB7CiAgICAgUmVmUHRyPFR5cGVCdWlsZGVyOjpDU1M6OlNvdXJjZVJhbmdl
PiByZXN1bHQgPSBUeXBlQnVpbGRlcjo6Q1NTOjpTb3VyY2VSYW5nZTo6Y3JlYXRlKCkKQEAgLTE4
MCwzNiArNDAwLDYgQEAgc3RhdGljIFBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTTWVk
aWE+IGJ1aWxkTWVkaWFPYmplY3QoY29uc3QgTWVkaWFMaXN0KgogICAgIHJldHVybiBtZWRpYU9i
amVjdC5yZWxlYXNlKCk7CiB9CiAKLXN0YXRpYyBQYXNzUmVmUHRyPENTU1J1bGVMaXN0PiBhc0NT
U1J1bGVMaXN0KENTU1N0eWxlU2hlZXQqIHN0eWxlU2hlZXQpCi17Ci0gICAgaWYgKCFzdHlsZVNo
ZWV0KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIFJlZlB0cjxTdGF0aWNDU1NSdWxlTGlzdD4g
bGlzdCA9IFN0YXRpY0NTU1J1bGVMaXN0OjpjcmVhdGUoKTsKLSAgICBWZWN0b3I8UmVmUHRyPENT
U1J1bGU+ID4mIGxpc3RSdWxlcyA9IGxpc3QtPnJ1bGVzKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBp
ID0gMCwgc2l6ZSA9IHN0eWxlU2hlZXQtPmxlbmd0aCgpOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAg
ICAgIENTU1J1bGUqIGl0ZW0gPSBzdHlsZVNoZWV0LT5pdGVtKGkpOwotICAgICAgICBpZiAoaXRl
bS0+aXNDaGFyc2V0UnVsZSgpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGxpc3RS
dWxlcy5hcHBlbmQoaXRlbSk7Ci0gICAgfQotICAgIHJldHVybiBsaXN0LnJlbGVhc2UoKTsKLX0K
LQotc3RhdGljIFBhc3NSZWZQdHI8Q1NTUnVsZUxpc3Q+IGFzQ1NTUnVsZUxpc3QoQ1NTUnVsZSog
cnVsZSkKLXsKLSAgICBpZiAoIXJ1bGUpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgaWYgKHJ1
bGUtPmlzTWVkaWFSdWxlKCkpCi0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxDU1NNZWRpYVJ1
bGUqPihydWxlKS0+Y3NzUnVsZXMoKTsKLQotICAgIGlmIChydWxlLT5pc0tleWZyYW1lc1J1bGUo
KSkKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdlYktpdENTU0tleWZyYW1lc1J1bGUqPihy
dWxlKS0+Y3NzUnVsZXMoKTsKLQotICAgIHJldHVybiAwOwotfQotCiBzdGF0aWMgdm9pZCBmaWxs
TWVkaWFMaXN0Q2hhaW4oQ1NTUnVsZSogcnVsZSwgQXJyYXk8VHlwZUJ1aWxkZXI6OkNTUzo6Q1NT
TWVkaWE+KiBtZWRpYUFycmF5KQogewogICAgIE1lZGlhTGlzdCogbWVkaWFMaXN0OwpAQCAtMjY1
LDcgKzQ1NSw3IEBAIHN0YXRpYyB2b2lkIGZpbGxNZWRpYUxpc3RDaGFpbihDU1NSdWxlKiBydWxl
LCBBcnJheTxUeXBlQnVpbGRlcjo6Q1NTOjpDU1NNZWRpYT4qCiAgICAgfQogfQogCi1QYXNzUmVm
UHRyPEluc3BlY3RvclN0eWxlPiBJbnNwZWN0b3JTdHlsZTo6Y3JlYXRlKGNvbnN0IEluc3BlY3Rv
ckNTU0lkJiBzdHlsZUlkLCBQYXNzUmVmUHRyPENTU1N0eWxlRGVjbGFyYXRpb24+IHN0eWxlLCBJ
bnNwZWN0b3JTdHlsZVNoZWV0KiBwYXJlbnRTdHlsZVNoZWV0KQorUGFzc1JlZlB0cjxJbnNwZWN0
b3JTdHlsZT4gSW5zcGVjdG9yU3R5bGU6OmNyZWF0ZVdpdGhTdHlsZVNoZWV0KGNvbnN0IEluc3Bl
Y3RvckNTU0lkJiBzdHlsZUlkLCBQYXNzUmVmUHRyPENTU1N0eWxlRGVjbGFyYXRpb24+IHN0eWxl
LCBJbnNwZWN0b3JTdHlsZVNoZWV0KiBwYXJlbnRTdHlsZVNoZWV0KQogewogICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgSW5zcGVjdG9yU3R5bGUoc3R5bGVJZCwgc3R5bGUsIHBhcmVudFN0eWxlU2hl
ZXQpKTsKIH0KQEAgLTI5OSw5ICs0ODksOSBAQCBQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpDU1M6
OkNTU1N0eWxlPiBJbnNwZWN0b3JTdHlsZTo6YnVpbGRPYmplY3RGb3JTdHlsZSgpIGNvbgogICAg
IHJldHVybiByZXN1bHQucmVsZWFzZSgpOwogfQogCi1QYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpB
cnJheTxUeXBlQnVpbGRlcjo6Q1NTOjpDU1NDb21wdXRlZFN0eWxlUHJvcGVydHk+ID4gSW5zcGVj
dG9yU3R5bGU6OmJ1aWxkQXJyYXlGb3JDb21wdXRlZFN0eWxlKCkgY29uc3QKK1Bhc3NSZWZQdHI8
QXJyYXk8VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTQ29tcHV0ZWRTdHlsZVByb3BlcnR5PiA+IEluc3Bl
Y3RvclN0eWxlOjpidWlsZEFycmF5Rm9yQ29tcHV0ZWRTdHlsZSgpIGNvbnN0CiB7Ci0gICAgUmVm
UHRyPFR5cGVCdWlsZGVyOjpBcnJheTxUeXBlQnVpbGRlcjo6Q1NTOjpDU1NDb21wdXRlZFN0eWxl
UHJvcGVydHk+ID4gcmVzdWx0ID0gVHlwZUJ1aWxkZXI6OkFycmF5PFR5cGVCdWlsZGVyOjpDU1M6
OkNTU0NvbXB1dGVkU3R5bGVQcm9wZXJ0eT46OmNyZWF0ZSgpOworICAgIFJlZlB0cjxBcnJheTxU
eXBlQnVpbGRlcjo6Q1NTOjpDU1NDb21wdXRlZFN0eWxlUHJvcGVydHk+ID4gcmVzdWx0ID0gQXJy
YXk8VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTQ29tcHV0ZWRTdHlsZVByb3BlcnR5Pjo6Y3JlYXRlKCk7
CiAgICAgVmVjdG9yPEluc3BlY3RvclN0eWxlUHJvcGVydHk+IHByb3BlcnRpZXM7CiAgICAgcG9w
dWxhdGVBbGxQcm9wZXJ0aWVzKCZwcm9wZXJ0aWVzKTsKIApAQCAtMzM4LDcgKzUyOCw3IEBAIGJv
b2wgSW5zcGVjdG9yU3R5bGU6OnNldFByb3BlcnR5VGV4dCh1bnNpZ25lZCBpbmRleCwgY29uc3Qg
U3RyaW5nJiBwcm9wZXJ0eVRleHQsCiAgICAgaWYgKHByb3BlcnR5VGV4dC5zdHJpcFdoaXRlU3Bh
Y2UoKS5sZW5ndGgoKSkgewogICAgICAgICBSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4gdGVtcE11
dGFibGVTdHlsZSA9IFN0eWxlUHJvcGVydHlTZXQ6OmNyZWF0ZSgpOwogICAgICAgICBSZWZQdHI8
Q1NTUnVsZVNvdXJjZURhdGE+IHNvdXJjZURhdGEgPSBDU1NSdWxlU291cmNlRGF0YTo6Y3JlYXRl
KENTU1J1bGVTb3VyY2VEYXRhOjpTVFlMRV9SVUxFKTsKLSAgICAgICAgQ1NTUGFyc2VyIHAoQ1NT
U3RyaWN0TW9kZSk7CisgICAgICAgIENTU1BhcnNlciBwKG1fc3R5bGUtPnBhcmVudFN0eWxlU2hl
ZXQoKS0+Y29udGVudHMoKS0+cGFyc2VyQ29udGV4dCgpLm1vZGUpOwogICAgICAgICBwLnBhcnNl
RGVjbGFyYXRpb24odGVtcE11dGFibGVTdHlsZS5nZXQoKSwgcHJvcGVydHlUZXh0ICsgIiAiICsg
Ym9ndXNQcm9wZXJ0eU5hbWUgKyAiOiBub25lIiwgc291cmNlRGF0YSwgbV9zdHlsZS0+cGFyZW50
U3R5bGVTaGVldCgpLT5jb250ZW50cygpKTsKICAgICAgICAgVmVjdG9yPENTU1Byb3BlcnR5U291
cmNlRGF0YT4mIHByb3BlcnR5RGF0YSA9IHNvdXJjZURhdGEtPnN0eWxlU291cmNlRGF0YS0+cHJv
cGVydHlEYXRhOwogICAgICAgICB1bnNpZ25lZCBwcm9wZXJ0eUNvdW50ID0gcHJvcGVydHlEYXRh
LnNpemUoKTsKQEAgLTcwNiw2ICs4OTYsNDQgQEAgTmV3TGluZUFuZFdoaXRlc3BhY2UmIEluc3Bl
Y3RvclN0eWxlOjpuZXdMaW5lQW5kV2hpdGVzcGFjZURlbGltaXRlcnMoKSBjb25zdAogICAgIHJl
dHVybiBtX2Zvcm1hdDsKIH0KIAorSW5zcGVjdG9yUnVsZTo6SW5zcGVjdG9yUnVsZShjb25zdCBJ
bnNwZWN0b3JDU1NJZCYgaWQsIENTU1J1bGUqIHJ1bGUsIEluc3BlY3RvclN0eWxlU2hlZXQqIHBh
cmVudFN0eWxlU2hlZXQpCisgICAgOiBtX2lkKGlkKQorICAgICwgbV9ydWxlKHJ1bGUpCit7Cisg
ICAgaWYgKCFtX3J1bGUpCisgICAgICAgIHJldHVybjsgLy8gVU5LTk9XTl9SVUxFCisKKyAgICBp
ZiAobV9ydWxlLT5pc1N0eWxlUnVsZSgpKQorICAgICAgICBtX3N0eWxlID0gSW5zcGVjdG9yU3R5
bGU6OmNyZWF0ZVdpdGhTdHlsZVNoZWV0KGlkLCBzdGF0aWNfY2FzdDxDU1NTdHlsZVJ1bGUqPihy
dWxlKS0+c3R5bGUoKSwgcGFyZW50U3R5bGVTaGVldCk7CisgICAgZWxzZSBpZiAobV9ydWxlLT5p
c1BhZ2VSdWxlKCkpCisgICAgICAgIG1fc3R5bGUgPSBJbnNwZWN0b3JTdHlsZTo6Y3JlYXRlV2l0
aFN0eWxlU2hlZXQoaWQsIHN0YXRpY19jYXN0PENTU1BhZ2VSdWxlKj4ocnVsZSktPnN0eWxlKCks
IHBhcmVudFN0eWxlU2hlZXQpOworICAgIGVsc2UgaWYgKG1fcnVsZS0+aXNGb250RmFjZVJ1bGUo
KSkKKyAgICAgICAgbV9zdHlsZSA9IEluc3BlY3RvclN0eWxlOjpjcmVhdGVXaXRoU3R5bGVTaGVl
dChpZCwgc3RhdGljX2Nhc3Q8Q1NTRm9udEZhY2VSdWxlKj4ocnVsZSktPnN0eWxlKCksIHBhcmVu
dFN0eWxlU2hlZXQpOworICAgIGVsc2UgaWYgKG1fcnVsZS0+aXNNZWRpYVJ1bGUoKSkKKyAgICAg
ICAgbV9jaGlsZFJ1bGVzID0gYWRvcHRQdHIobmV3IEluc3BlY3RvclJ1bGVMaXN0KCkpOworfQor
CitJbnNwZWN0b3JSdWxlOjpUeXBlIEluc3BlY3RvclJ1bGU6OnR5cGUoKSBjb25zdAoreworICAg
IGlmICghbV9ydWxlKQorICAgICAgICByZXR1cm4gVU5LTk9XTl9SVUxFOworCisgICAgc3dpdGNo
IChtX3J1bGUtPnR5cGUoKSkgeworICAgIGNhc2UgQ1NTUnVsZTo6U1RZTEVfUlVMRToKKyAgICAg
ICAgcmV0dXJuIFNUWUxFX1JVTEU7CisgICAgY2FzZSBDU1NSdWxlOjpNRURJQV9SVUxFOgorICAg
ICAgICByZXR1cm4gTUVESUFfUlVMRTsKKyAgICBjYXNlIENTU1J1bGU6OklNUE9SVF9SVUxFOgor
ICAgICAgICByZXR1cm4gSU1QT1JUX1JVTEU7CisgICAgY2FzZSBDU1NSdWxlOjpGT05UX0ZBQ0Vf
UlVMRToKKyAgICAgICAgcmV0dXJuIEZPTlRfRkFDRV9SVUxFOworICAgIGNhc2UgQ1NTUnVsZTo6
UEFHRV9SVUxFOgorICAgICAgICByZXR1cm4gUEFHRV9SVUxFOworICAgIGRlZmF1bHQ6CisgICAg
ICAgIHJldHVybiBVTktOT1dOX1JVTEU7CisgICAgfQorfQorCiBQYXNzUmVmUHRyPEluc3BlY3Rv
clN0eWxlU2hlZXQ+IEluc3BlY3RvclN0eWxlU2hlZXQ6OmNyZWF0ZShJbnNwZWN0b3JQYWdlQWdl
bnQqIHBhZ2VBZ2VudCwgY29uc3QgU3RyaW5nJiBpZCwgUGFzc1JlZlB0cjxDU1NTdHlsZVNoZWV0
PiBwYWdlU3R5bGVTaGVldCwgVHlwZUJ1aWxkZXI6OkNTUzo6U3R5bGVTaGVldE9yaWdpbjo6RW51
bSBvcmlnaW4sIGNvbnN0IFN0cmluZyYgZG9jdW1lbnRVUkwsIExpc3RlbmVyKiBsaXN0ZW5lcikK
IHsKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEluc3BlY3RvclN0eWxlU2hlZXQocGFnZUFnZW50
LCBpZCwgcGFnZVN0eWxlU2hlZXQsIG9yaWdpbiwgZG9jdW1lbnRVUkwsIGxpc3RlbmVyKSk7CkBA
IC03NTgsMzYgKzk4Niw0NCBAQCBib29sIEluc3BlY3RvclN0eWxlU2hlZXQ6OnNldFRleHQoY29u
c3QgU3RyaW5nJiB0ZXh0KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBtX3BhcnNlZFN0
eWxlU2hlZXQtPnNldFRleHQodGV4dCk7Ci0gICAgbV9mbGF0UnVsZXMuY2xlYXIoKTsKKyAgICBt
X3J1bGVzLmNsZWFyKCk7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogU3RyaW5nIEluc3BlY3Rv
clN0eWxlU2hlZXQ6OnJ1bGVTZWxlY3Rvcihjb25zdCBJbnNwZWN0b3JDU1NJZCYgaWQsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQogewotICAgIENTU1N0eWxlUnVsZSogcnVsZSA9IHJ1bGVGb3JJZChpZCk7
CisgICAgQ1NTUnVsZSogcnVsZSA9IHJ1bGVGb3JJZChpZCk7CiAgICAgaWYgKCFydWxlKSB7CiAg
ICAgICAgIGVjID0gTk9UX0ZPVU5EX0VSUjsKICAgICAgICAgcmV0dXJuICIiOwogICAgIH0KLSAg
ICByZXR1cm4gcnVsZS0+c2VsZWN0b3JUZXh0KCk7CisKKyAgICAvLyBXZSBjYW4gdHJlYXQgQ1NT
UGFnZVJ1bGUgdGhlIHNhbWUgd2F5IGhlcmUgaWYgbmVlZGVkLgorICAgIGlmIChydWxlLT5pc1N0
eWxlUnVsZSgpKQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q1NTU3R5bGVSdWxlKj4ocnVs
ZSktPnNlbGVjdG9yVGV4dCgpOworCisgICAgZWMgPSBOT1RfRk9VTkRfRVJSOworICAgIHJldHVy
biAiIjsKIH0KIAogYm9vbCBJbnNwZWN0b3JTdHlsZVNoZWV0OjpzZXRSdWxlU2VsZWN0b3IoY29u
c3QgSW5zcGVjdG9yQ1NTSWQmIGlkLCBjb25zdCBTdHJpbmcmIHNlbGVjdG9yLCBFeGNlcHRpb25D
b2RlJiBlYykKIHsKLSAgICBDU1NTdHlsZVJ1bGUqIHJ1bGUgPSBydWxlRm9ySWQoaWQpOwotICAg
IGlmICghcnVsZSkgeworICAgIENTU1J1bGUqIHJ1bGUgPSBydWxlRm9ySWQoaWQpOworICAgIGlm
ICghcnVsZSB8fCAhcnVsZS0+aXNTdHlsZVJ1bGUoKSkgewogICAgICAgICBlYyA9IE5PVF9GT1VO
RF9FUlI7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgQ1NTU3R5bGVTaGVldCog
c3R5bGVTaGVldCA9IHJ1bGUtPnBhcmVudFN0eWxlU2hlZXQoKTsKKworICAgIENTU1N0eWxlUnVs
ZSogc3R5bGVSdWxlID0gc3RhdGljX2Nhc3Q8Q1NTU3R5bGVSdWxlKj4ocnVsZSk7CisgICAgQ1NT
U3R5bGVTaGVldCogc3R5bGVTaGVldCA9IHN0eWxlUnVsZS0+cGFyZW50U3R5bGVTaGVldCgpOwog
ICAgIGlmICghc3R5bGVTaGVldCB8fCAhZW5zdXJlUGFyc2VkRGF0YVJlYWR5KCkpIHsKICAgICAg
ICAgZWMgPSBOT1RfRk9VTkRfRVJSOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0g
ICAgcnVsZS0+c2V0U2VsZWN0b3JUZXh0KHNlbGVjdG9yKTsKLSAgICBSZWZQdHI8Q1NTUnVsZVNv
dXJjZURhdGE+IHNvdXJjZURhdGEgPSBydWxlU291cmNlRGF0YUZvcihydWxlLT5zdHlsZSgpKTsK
KyAgICBzdHlsZVJ1bGUtPnNldFNlbGVjdG9yVGV4dChzZWxlY3Rvcik7CisgICAgUmVmUHRyPENT
U1J1bGVTb3VyY2VEYXRhPiBzb3VyY2VEYXRhID0gcnVsZVNvdXJjZURhdGFGb3Ioc3R5bGVSdWxl
LT5zdHlsZSgpKTsKICAgICBpZiAoIXNvdXJjZURhdGEpIHsKICAgICAgICAgZWMgPSBOT1RfRk9V
TkRfRVJSOwogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC04MjksNDUgKzEwNjUsMTQ4IEBAIENT
U1N0eWxlUnVsZSogSW5zcGVjdG9yU3R5bGVTaGVldDo6YWRkUnVsZShjb25zdCBTdHJpbmcmIHNl
bGVjdG9yLCBFeGNlcHRpb25Db2RlCiAgICAgcmV0dXJuIHJ1bGU7CiB9CiAKK3RlbXBsYXRlIDxj
bGFzcyBUPgorU291cmNlUmFuZ2UgSW5zcGVjdG9yU3R5bGVTaGVldDo6ZGVsZXRlUnVsZUZyb21Q
YXJlbnQoVCogcGFyZW50LCB1bnNpZ25lZCBydWxlSW5kZXgsIEV4Y2VwdGlvbkNvZGUmIGVjKQor
eworICAgIENTU1J1bGUqIHJ1bGUgPSBwYXJlbnQtPml0ZW0ocnVsZUluZGV4KTsKKyAgICBpZiAo
IXJ1bGUtPmlzU3R5bGVSdWxlKCkpIHsKKyAgICAgICAgZWMgPSBOT1RfRk9VTkRfRVJSOworICAg
ICAgICByZXR1cm4gU291cmNlUmFuZ2UoKTsKKyAgICB9CisKKyAgICBTb3VyY2VSYW5nZSBydWxl
VGV4dFJhbmdlID0gZXh0cmFjdFJ1bGVUZXh0UmFuZ2Uoc3RhdGljX2Nhc3Q8Q1NTU3R5bGVSdWxl
Kj4ocnVsZSksIGVjKTsKKyAgICBpZiAoIWVjKQorICAgICAgICBwYXJlbnQtPmRlbGV0ZVJ1bGUo
cnVsZUluZGV4LCBlYyk7CisKKyAgICByZXR1cm4gcnVsZVRleHRSYW5nZTsKK30KKwogYm9vbCBJ
bnNwZWN0b3JTdHlsZVNoZWV0OjpkZWxldGVSdWxlKGNvbnN0IEluc3BlY3RvckNTU0lkJiBpZCwg
RXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgUmVmUHRyPENTU1N0eWxlUnVsZT4gcnVsZSA9IHJ1
bGVGb3JJZChpZCk7Ci0gICAgaWYgKCFydWxlKSB7CisgICAgUnVsZUFuY2hvciBydWxlQW5jaG9y
ID0gcnVsZUFuY2hvckZvcklkKGlkKTsKKworICAgIGlmICghcnVsZUFuY2hvci52YWxpZCkgewog
ICAgICAgICBlYyA9IE5PVF9GT1VORF9FUlI7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9
Ci0gICAgQ1NTU3R5bGVTaGVldCogc3R5bGVTaGVldCA9IHJ1bGUtPnBhcmVudFN0eWxlU2hlZXQo
KTsKLSAgICBpZiAoIXN0eWxlU2hlZXQgfHwgIWVuc3VyZVBhcnNlZERhdGFSZWFkeSgpKSB7CisK
KyAgICBpZiAoIWVuc3VyZVBhcnNlZERhdGFSZWFkeSgpKSB7CiAgICAgICAgIGVjID0gTk9UX0ZP
VU5EX0VSUjsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIHN0eWxlU2hlZXQt
PmRlbGV0ZVJ1bGUoaWQub3JkaW5hbCgpLCBlYyk7CisgICAgdW5zaWduZWQgcnVsZUluZGV4ID0g
cnVsZUFuY2hvci5pbmRleDsKKyAgICBDU1NSdWxlKiBwYXJlbnRSdWxlID0gcnVsZUFuY2hvci5w
YXJlbnRSdWxlOworICAgIFNvdXJjZVJhbmdlIHJ1bGVUZXh0UmFuZ2U7CisgICAgaWYgKHBhcmVu
dFJ1bGUpIHsKKyAgICAgICAgQVNTRVJUKGlkLnBhdGhMZW5ndGgoKSA+IDEpOworCisgICAgICAg
IHN3aXRjaCAocGFyZW50UnVsZS0+dHlwZSgpKSB7CisgICAgICAgIGNhc2UgQ1NTUnVsZTo6TUVE
SUFfUlVMRTogeworICAgICAgICAgICAgQ1NTTWVkaWFSdWxlKiBwYXJlbnRNZWRpYVJ1bGUgPSBz
dGF0aWNfY2FzdDxDU1NNZWRpYVJ1bGUqPihwYXJlbnRSdWxlKTsKKyAgICAgICAgICAgIHJ1bGVU
ZXh0UmFuZ2UgPSBkZWxldGVSdWxlRnJvbVBhcmVudChwYXJlbnRNZWRpYVJ1bGUsIHJ1bGVJbmRl
eCwgZWMpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgZWMgPSBOT1RfRk9VTkRfRVJSOworICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgQVNTRVJUKGlkLnBhdGhMZW5n
dGgoKSA9PSAxKTsKKyAgICAgICAgcnVsZVRleHRSYW5nZSA9IGRlbGV0ZVJ1bGVGcm9tUGFyZW50
KG1fcGFnZVN0eWxlU2hlZXQuZ2V0KCksIHJ1bGVJbmRleCwgZWMpOworICAgIH0KKwogICAgIGlm
IChlYykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgaWYgKHJ1bGVUZXh0UmFuZ2UubGVu
Z3RoKCkpIHsKKyAgICAgICAgU3RyaW5nIHNoZWV0VGV4dCA9IG1fcGFyc2VkU3R5bGVTaGVldC0+
dGV4dCgpOworICAgICAgICBjb25zdCBVQ2hhciogY2hhcmFjdGVycyA9IHNoZWV0VGV4dC5jaGFy
YWN0ZXJzKCk7CisgICAgICAgIGlmIChydWxlVGV4dFJhbmdlLnN0YXJ0ICYmIGlzSFRNTFNwYWNl
KGNoYXJhY3RlcnNbcnVsZVRleHRSYW5nZS5zdGFydCAtIDFdKSkgeworICAgICAgICAgICAgdW5z
aWduZWQgY3VycmVudEluZGV4ID0gcnVsZVRleHRSYW5nZS5zdGFydCAtIDE7CisgICAgICAgICAg
ICB3aGlsZSAoY3VycmVudEluZGV4ICYmIGlzSFRNTFNwYWNlKGNoYXJhY3RlcnNbY3VycmVudElu
ZGV4XSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoaXNIVE1MTGluZUJyZWFrKGNoYXJhY3RlcnNb
Y3VycmVudEluZGV4XSkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRJbmRleCAm
JiBpc0hUTUxMaW5lQnJlYWsoY2hhcmFjdGVyc1tjdXJyZW50SW5kZXggLSAxXSkpCisgICAgICAg
ICAgICAgICAgICAgICAgICAtLWN1cnJlbnRJbmRleDsKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC0tY3VycmVudEluZGV4Owor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgcnVsZVRleHRSYW5nZS5zdGFydCA9IGN1cnJlbnRJ
bmRleDsKKyAgICAgICAgfQorICAgICAgICBzaGVldFRleHQucmVtb3ZlKHJ1bGVUZXh0UmFuZ2Uu
c3RhcnQsIHJ1bGVUZXh0UmFuZ2UubGVuZ3RoKCkpOworICAgICAgICBtX3BhcnNlZFN0eWxlU2hl
ZXQtPnNldFRleHQoc2hlZXRUZXh0KTsKKyAgICB9CisgICAgZmlyZVN0eWxlU2hlZXRDaGFuZ2Vk
KCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK1NvdXJjZVJhbmdlIEluc3BlY3RvclN0eWxlU2hl
ZXQ6OmV4dHJhY3RSdWxlVGV4dFJhbmdlKENTU1N0eWxlUnVsZSogcnVsZSwgRXhjZXB0aW9uQ29k
ZSYgZWMpCit7CiAgICAgUmVmUHRyPENTU1J1bGVTb3VyY2VEYXRhPiBzb3VyY2VEYXRhID0gcnVs
ZVNvdXJjZURhdGFGb3IocnVsZS0+c3R5bGUoKSk7CiAgICAgaWYgKCFzb3VyY2VEYXRhKSB7CiAg
ICAgICAgIGVjID0gTk9UX0ZPVU5EX0VSUjsKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICByZXR1cm4gU291cmNlUmFuZ2UoKTsKICAgICB9CiAKLSAgICBTdHJpbmcgc2hlZXRUZXh0ID0g
bV9wYXJzZWRTdHlsZVNoZWV0LT50ZXh0KCk7Ci0gICAgc2hlZXRUZXh0LnJlbW92ZShzb3VyY2VE
YXRhLT5ydWxlSGVhZGVyUmFuZ2Uuc3RhcnQsIHNvdXJjZURhdGEtPnJ1bGVCb2R5UmFuZ2UuZW5k
IC0gc291cmNlRGF0YS0+cnVsZUhlYWRlclJhbmdlLnN0YXJ0ICsgMSk7Ci0gICAgbV9wYXJzZWRT
dHlsZVNoZWV0LT5zZXRUZXh0KHNoZWV0VGV4dCk7Ci0gICAgZmlyZVN0eWxlU2hlZXRDaGFuZ2Vk
KCk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgdW5zaWduZWQgcnVsZVN0YXJ0ID0gc291cmNlRGF0
YS0+cnVsZUhlYWRlclJhbmdlLnN0YXJ0OworICAgIHVuc2lnbmVkIHJ1bGVFbmQgPSBzb3VyY2VE
YXRhLT5ydWxlQm9keVJhbmdlLmVuZCArIDE7CisgICAgcmV0dXJuIFNvdXJjZVJhbmdlKHJ1bGVT
dGFydCwgcnVsZUVuZCk7CiB9CiAKLUNTU1N0eWxlUnVsZSogSW5zcGVjdG9yU3R5bGVTaGVldDo6
cnVsZUZvcklkKGNvbnN0IEluc3BlY3RvckNTU0lkJiBpZCkgY29uc3QKK0NTU1J1bGUqIEluc3Bl
Y3RvclN0eWxlU2hlZXQ6OnJ1bGVGb3JJZChjb25zdCBJbnNwZWN0b3JDU1NJZCYgaWQpIGNvbnN0
CiB7CiAgICAgaWYgKCFtX3BhZ2VTdHlsZVNoZWV0KQogICAgICAgICByZXR1cm4gMDsKIAogICAg
IEFTU0VSVCghaWQuaXNFbXB0eSgpKTsKLSAgICBlbnN1cmVGbGF0UnVsZXMoKTsKLSAgICByZXR1
cm4gaWQub3JkaW5hbCgpID49IG1fZmxhdFJ1bGVzLnNpemUoKSA/IDAgOiBtX2ZsYXRSdWxlcy5h
dChpZC5vcmRpbmFsKCkpOworICAgIHVuc2lnbmVkIGluZGV4ID0gaWQucGF0aEF0KDApOworICAg
IGlmIChpbmRleCA+PSBtX3BhZ2VTdHlsZVNoZWV0LT5sZW5ndGgoKSkKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgQ1NTUnVsZSogY3VycmVudFJ1bGUgPSBtX3BhZ2VTdHlsZVNoZWV0LT5pdGVtKGlu
ZGV4KTsKKyAgICBmb3IgKHNpemVfdCBpID0gMTsgaSA8IGlkLnBhdGhMZW5ndGgoKTsgKytpKSB7
CisgICAgICAgIFJlZlB0cjxDU1NSdWxlTGlzdD4gY2hpbGRyZW4gPSBhc0NTU1J1bGVMaXN0KGN1
cnJlbnRSdWxlKTsKKyAgICAgICAgaW5kZXggPSBpZC5wYXRoQXQoaSk7CisgICAgICAgIGlmICgh
Y2hpbGRyZW4gfHwgaW5kZXggPj0gY2hpbGRyZW4tPmxlbmd0aCgpKQorICAgICAgICAgICAgcmV0
dXJuIDA7CisKKyAgICAgICAgY3VycmVudFJ1bGUgPSBjaGlsZHJlbi0+aXRlbShpbmRleCk7Cisg
ICAgfQorCisgICAgcmV0dXJuIGN1cnJlbnRSdWxlOworfQorCitJbnNwZWN0b3JTdHlsZVNoZWV0
OjpSdWxlQW5jaG9yIEluc3BlY3RvclN0eWxlU2hlZXQ6OnJ1bGVBbmNob3JGb3JJZChjb25zdCBJ
bnNwZWN0b3JDU1NJZCYgaWQpIGNvbnN0Cit7CisgICAgaWYgKCFtX3BhZ2VTdHlsZVNoZWV0KQor
ICAgICAgICByZXR1cm4gUnVsZUFuY2hvcigpOworCisgICAgQVNTRVJUKCFpZC5pc0VtcHR5KCkp
OworICAgIHVuc2lnbmVkIHN0eWxlU2hlZXRMZW5ndGggPSBtX3BhZ2VTdHlsZVNoZWV0LT5sZW5n
dGgoKTsKKyAgICB1bnNpZ25lZCBpbmRleCA9IGlkLnBhdGhBdCgwKTsKKyAgICBpZiAoaW5kZXgg
PT0gSU5UX01BWCkKKyAgICAgICAgaW5kZXggPSBzdHlsZVNoZWV0TGVuZ3RoOworICAgIGlmIChp
bmRleCA+IHN0eWxlU2hlZXRMZW5ndGgpCisgICAgICAgIHJldHVybiBSdWxlQW5jaG9yKCk7Cisg
ICAgQ1NTUnVsZSogcGFyZW50UnVsZSA9IDA7CisgICAgQ1NTUnVsZSogY3VycmVudFJ1bGUgPSBt
X3BhZ2VTdHlsZVNoZWV0LT5pdGVtKGluZGV4KTsKKyAgICBmb3IgKHNpemVfdCBpID0gMTsgaSA8
IGlkLnBhdGhMZW5ndGgoKTsgKytpKSB7CisgICAgICAgIFJlZlB0cjxDU1NSdWxlTGlzdD4gY2hp
bGRyZW4gPSBhc0NTU1J1bGVMaXN0KGN1cnJlbnRSdWxlKTsKKyAgICAgICAgaWYgKCFjaGlsZHJl
bikKKyAgICAgICAgICAgIHJldHVybiBSdWxlQW5jaG9yKCk7IC8vIEludmFsaWQgcnVsZSBhbmNo
b3IgaWQgcGFzc2VkIGluLgorCisgICAgICAgIHBhcmVudFJ1bGUgPSBjdXJyZW50UnVsZTsKKyAg
ICAgICAgaW5kZXggPSBpZC5wYXRoQXQoaSk7CisgICAgICAgIGlmIChpbmRleCAhPSBJTlRfTUFY
KSB7CisgICAgICAgICAgICBpZiAoaW5kZXggPiBjaGlsZHJlbi0+bGVuZ3RoKCkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIFJ1bGVBbmNob3IoKTsgLy8gSW52YWxpZCBydWxlIGFuY2hvciBpZCBw
YXNzZWQgaW4uCisgICAgICAgICAgICBjdXJyZW50UnVsZSA9IGNoaWxkcmVuLT5pdGVtKGluZGV4
KTsKKyAgICAgICAgfQorICAgIH0KIAorICAgIEFTU0VSVCghIXBhcmVudFJ1bGUgXiAoaWQucGF0
aExlbmd0aCgpID09IDEpKTsKKyAgICByZXR1cm4gUnVsZUFuY2hvcihwYXJlbnRSdWxlLCBpbmRl
eCk7CiB9CiAKIFBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTU3R5bGVTaGVldEJvZHk+
IEluc3BlY3RvclN0eWxlU2hlZXQ6OmJ1aWxkT2JqZWN0Rm9yU3R5bGVTaGVldCgpCkBAIC04NzYs
MTEgKzEyMTUsMTEgQEAgUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpDU1NTdHlsZVNoZWV0
Qm9keT4gSW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGRPYmplY3QKICAgICBpZiAoIXN0eWxlU2hl
ZXQpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgUmVmUHRyPENTU1J1bGVMaXN0PiBjc3NSdWxl
TGlzdCA9IGFzQ1NTUnVsZUxpc3Qoc3R5bGVTaGVldCk7CisgICAgZW5zdXJlUnVsZVRyZWUoKTsK
IAogICAgIFJlZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpDU1NTdHlsZVNoZWV0Qm9keT4gcmVzdWx0
ID0gVHlwZUJ1aWxkZXI6OkNTUzo6Q1NTU3R5bGVTaGVldEJvZHk6OmNyZWF0ZSgpCiAgICAgICAg
IC5zZXRTdHlsZVNoZWV0SWQoaWQoKSkKLSAgICAgICAgLnNldFJ1bGVzKGJ1aWxkQXJyYXlGb3JS
dWxlTGlzdChjc3NSdWxlTGlzdC5nZXQoKSkpOworICAgICAgICAuc2V0UnVsZXMoYnVpbGRUcmVl
Rm9yUnVsZUxpc3QoKSk7CiAKICAgICBTdHJpbmcgc3R5bGVTaGVldFRleHQ7CiAgICAgYm9vbCBz
dWNjZXNzID0gZ2V0VGV4dCgmc3R5bGVTaGVldFRleHQpOwpAQCAtOTA5LDM0ICsxMjQ4LDEwMCBA
QCBQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpDU1M6OkNTU1N0eWxlU2hlZXRIZWFkZXI+IEluc3Bl
Y3RvclN0eWxlU2hlZXQ6OmJ1aWxkT2JqZQogICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpOwog
fQogCi1QYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpDU1M6OkNTU1J1bGU+IEluc3BlY3RvclN0eWxl
U2hlZXQ6OmJ1aWxkT2JqZWN0Rm9yUnVsZShDU1NTdHlsZVJ1bGUqIHJ1bGUpCitQYXNzUmVmUHRy
PFR5cGVCdWlsZGVyOjpDU1M6OkNTU1J1bGU+IEluc3BlY3RvclN0eWxlU2hlZXQ6OmJ1aWxkT2Jq
ZWN0Rm9yUnVsZShDU1NSdWxlKiBydWxlKQogewogICAgIENTU1N0eWxlU2hlZXQqIHN0eWxlU2hl
ZXQgPSBwYWdlU3R5bGVTaGVldCgpOwogICAgIGlmICghc3R5bGVTaGVldCkKICAgICAgICAgcmV0
dXJuIDA7CiAKKyAgICBib29sIGNhbkJpbmRSdWxlID0gdHJ1ZTsKKyAgICBDU1NSdWxlOjpUeXBl
IHR5cGUgPSBydWxlLT50eXBlKCk7CisgICAgVHlwZUJ1aWxkZXI6OkNTUzo6Q1NTUnVsZTo6VHlw
ZTo6RW51bSBydWxlVHlwZTsKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIENTU1J1bGU6
OlNUWUxFX1JVTEU6CisgICAgICAgIHJ1bGVUeXBlID0gVHlwZUJ1aWxkZXI6OkNTUzo6Q1NTUnVs
ZTo6VHlwZTo6U3R5bGU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ1NTUnVsZTo6TUVESUFf
UlVMRToKKyAgICAgICAgcnVsZVR5cGUgPSBUeXBlQnVpbGRlcjo6Q1NTOjpDU1NSdWxlOjpUeXBl
OjpNZWRpYTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDU1NSdWxlOjpJTVBPUlRfUlVMRToK
KyAgICAgICAgcnVsZVR5cGUgPSBUeXBlQnVpbGRlcjo6Q1NTOjpDU1NSdWxlOjpUeXBlOjpJbXBv
cnQ7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ1NTUnVsZTo6Rk9OVF9GQUNFX1JVTEU6Cisg
ICAgICAgIHJ1bGVUeXBlID0gVHlwZUJ1aWxkZXI6OkNTUzo6Q1NTUnVsZTo6VHlwZTo6Rm9udF9m
YWNlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENTU1J1bGU6OlBBR0VfUlVMRToKKyAgICAg
ICAgcnVsZVR5cGUgPSBUeXBlQnVpbGRlcjo6Q1NTOjpDU1NSdWxlOjpUeXBlOjpQYWdlOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIENTU1J1bGU6OkNIQVJTRVRfUlVMRToKKyAgICAgICAgcnVs
ZVR5cGUgPSBUeXBlQnVpbGRlcjo6Q1NTOjpDU1NSdWxlOjpUeXBlOjpDaGFyc2V0OworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIENTU1J1bGU6OldFQktJVF9LRVlGUkFNRVNfUlVMRToKKyAgICAg
ICAgcnVsZVR5cGUgPSBUeXBlQnVpbGRlcjo6Q1NTOjpDU1NSdWxlOjpUeXBlOjpLZXlmcmFtZXM7
CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJ1bGVUeXBlID0gVHlwZUJ1
aWxkZXI6OkNTUzo6Q1NTUnVsZTo6VHlwZTo6VW5rbm93bjsKKyAgICAgICAgY2FuQmluZFJ1bGUg
PSBmYWxzZTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCiAgICAgUmVmUHRyPFR5cGVCdWlsZGVy
OjpDU1M6OkNTU1J1bGU+IHJlc3VsdCA9IFR5cGVCdWlsZGVyOjpDU1M6OkNTU1J1bGU6OmNyZWF0
ZSgpCi0gICAgICAgIC5zZXRTZWxlY3RvclRleHQocnVsZS0+c2VsZWN0b3JUZXh0KCkpCi0gICAg
ICAgIC5zZXRTb3VyY2VMaW5lKHJ1bGUtPnN0eWxlUnVsZSgpLT5zb3VyY2VMaW5lKCkpCi0gICAg
ICAgIC5zZXRPcmlnaW4obV9vcmlnaW4pCi0gICAgICAgIC5zZXRTdHlsZShidWlsZE9iamVjdEZv
clN0eWxlKHJ1bGUtPnN0eWxlKCkpKTsKKyAgICAgICAgLnNldE9yaWdpbihtX29yaWdpbik7CisK
KyAgICBpZiAocnVsZVR5cGUgIT0gVHlwZUJ1aWxkZXI6OkNTUzo6Q1NTUnVsZTo6VHlwZTo6U3R5
bGUpIHsKKyAgICAgICAgLy8gRGVmYXVsdCBydWxlIHR5cGUgaXMgInN0eWxlIi4KKyAgICAgICAg
cmVzdWx0LT5zZXRUeXBlKHJ1bGVUeXBlKTsKKyAgICB9CisKKyAgICBSZWZQdHI8Q1NTUnVsZVNv
dXJjZURhdGE+IHNvdXJjZURhdGE7CisgICAgaWYgKHR5cGUgPT0gQ1NTUnVsZTo6U1RZTEVfUlVM
RSkgeworICAgICAgICBDU1NTdHlsZVJ1bGUqIHN0eWxlUnVsZSA9IHN0YXRpY19jYXN0PENTU1N0
eWxlUnVsZSo+KHJ1bGUpOworICAgICAgICByZXN1bHQtPnNldFNlbGVjdG9yVGV4dChzdHlsZVJ1
bGUtPnNlbGVjdG9yVGV4dCgpKTsKKyAgICAgICAgcmVzdWx0LT5zZXRTb3VyY2VMaW5lKHN0eWxl
UnVsZS0+c3R5bGVSdWxlKCktPnNvdXJjZUxpbmUoKSk7CisgICAgICAgIHJlc3VsdC0+c2V0U3R5
bGUoYnVpbGRPYmplY3RGb3JTdHlsZShzdHlsZVJ1bGUtPnN0eWxlKCkpKTsKKworICAgICAgICBp
ZiAoZW5zdXJlUGFyc2VkRGF0YVJlYWR5KCkpCisgICAgICAgICAgICBzb3VyY2VEYXRhID0gcnVs
ZVNvdXJjZURhdGFGb3Ioc3R5bGVSdWxlLT5zdHlsZSgpKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBpZiAodHlwZSA9PSBDU1NSdWxlOjpNRURJQV9SVUxFKSB7CisgICAgICAgICAgICBDU1NNZWRp
YVJ1bGUqIG1lZGlhUnVsZSA9IHN0YXRpY19jYXN0PENTU01lZGlhUnVsZSo+KHJ1bGUpOworICAg
ICAgICAgICAgcmVzdWx0LT5zZXRNZWRpYVRleHQobWVkaWFSdWxlLT5tZWRpYSgpLT5tZWRpYVRl
eHQoKSk7CisgICAgICAgICAgICBSZWZQdHI8QXJyYXk8VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTUnVs
ZT4gPiBjaGlsZFJ1bGVzID0gQXJyYXk8VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTUnVsZT46OmNyZWF0
ZSgpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMCwgc2l6ZSA9IG1lZGlhUnVsZS0+
bGVuZ3RoKCk7IGkgPCBzaXplOyArK2kpCisgICAgICAgICAgICAgICAgY2hpbGRSdWxlcy0+YWRk
SXRlbShidWlsZE9iamVjdEZvclJ1bGUobWVkaWFSdWxlLT5pdGVtKGkpKSk7CisgICAgICAgICAg
ICByZXN1bHQtPnNldENoaWxkUnVsZXMoY2hpbGRSdWxlcy5yZWxlYXNlKCkpOworICAgICAgICB9
IGVsc2UgaWYgKHR5cGUgPT0gQ1NTUnVsZTo6UEFHRV9SVUxFKSB7CisgICAgICAgICAgICBDU1NQ
YWdlUnVsZSogcGFnZVJ1bGUgPSBzdGF0aWNfY2FzdDxDU1NQYWdlUnVsZSo+KHJ1bGUpOworICAg
ICAgICAgICAgcmVzdWx0LT5zZXRTZWxlY3RvclRleHQocGFnZVJ1bGUtPnNlbGVjdG9yVGV4dCgp
KTsKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0U3R5bGUoYnVpbGRPYmplY3RGb3JTdHlsZShwYWdl
UnVsZS0+c3R5bGUoKSkpOworICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gQ1NTUnVsZTo6Rk9O
VF9GQUNFX1JVTEUpIHsKKyAgICAgICAgICAgIENTU0ZvbnRGYWNlUnVsZSogZm9udEZhY2VSdWxl
ID0gc3RhdGljX2Nhc3Q8Q1NTRm9udEZhY2VSdWxlKj4ocnVsZSk7CisgICAgICAgICAgICByZXN1
bHQtPnNldFN0eWxlKGJ1aWxkT2JqZWN0Rm9yU3R5bGUoZm9udEZhY2VSdWxlLT5zdHlsZSgpKSk7
CisgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSBDU1NSdWxlOjpXRUJLSVRfS0VZRlJBTUVTX1JV
TEUpIHsKKyAgICAgICAgICAgIFdlYktpdENTU0tleWZyYW1lc1J1bGUqIGtleWZyYW1lc1J1bGUg
PSBzdGF0aWNfY2FzdDxXZWJLaXRDU1NLZXlmcmFtZXNSdWxlKj4ocnVsZSk7CisgICAgICAgICAg
ICByZXN1bHQtPnNldFNlbGVjdG9yVGV4dChrZXlmcmFtZXNSdWxlLT5uYW1lKCkpOworICAgICAg
ICB9CisgICAgICAgIC8vIElNUE9SVF9SVUxFIG9ubHkgc3BlY2lmaWVzIHRoZSByZWZlcmVuY2Vk
IFVSTCBpbiB0aGUgYm9keSByYW5nZS4KKyAgICAgICAgaWYgKGVuc3VyZVBhcnNlZERhdGFSZWFk
eSgpKQorICAgICAgICAgICAgc291cmNlRGF0YSA9IHJ1bGVTb3VyY2VEYXRhRm9yKHJ1bGUpOwor
ICAgIH0KKworICAgIC8vIEZJWE1FOiBAY2hhcnNldCBydWxlIGhhcyBlbXB0eSBoZWFkZXJSYW5n
ZS9ib2R5UmFuZ2UuCisgICAgaWYgKHNvdXJjZURhdGEgJiYgdHlwZSAhPSBDU1NSdWxlOjpDSEFS
U0VUX1JVTEUpIHsKKyAgICAgICAgcmVzdWx0LT5zZXRIZWFkZXJSYW5nZShidWlsZFNvdXJjZVJh
bmdlT2JqZWN0KHNvdXJjZURhdGEtPnJ1bGVIZWFkZXJSYW5nZSkpOworICAgICAgICByZXN1bHQt
PnNldEJvZHlSYW5nZShidWlsZFNvdXJjZVJhbmdlT2JqZWN0KHNvdXJjZURhdGEtPnJ1bGVCb2R5
UmFuZ2UpKTsKKyAgICB9CiAKICAgICAvLyAic291cmNlVVJMIiBpcyBwcmVzZW50IG9ubHkgZm9y
IHJlZ3VsYXIgcnVsZXMsIG90aGVyd2lzZSAib3JpZ2luIiBzaG91bGQgYmUgdXNlZCBpbiB0aGUg
ZnJvbnRlbmQuCiAgICAgaWYgKG1fb3JpZ2luID09IFR5cGVCdWlsZGVyOjpDU1M6OlN0eWxlU2hl
ZXRPcmlnaW46OlJlZ3VsYXIpCiAgICAgICAgIHJlc3VsdC0+c2V0U291cmNlVVJMKGZpbmFsVVJM
KCkpOwogCi0gICAgaWYgKGNhbkJpbmQoKSkgeworICAgIGlmIChjYW5CaW5kUnVsZSAmJiBjYW5C
aW5kKCkpIHsKICAgICAgICAgSW5zcGVjdG9yQ1NTSWQgaWQocnVsZUlkKHJ1bGUpKTsKICAgICAg
ICAgaWYgKCFpZC5pc0VtcHR5KCkpCiAgICAgICAgICAgICByZXN1bHQtPnNldFJ1bGVJZChpZC5h
c1Byb3RvY29sVmFsdWU8VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTUnVsZUlkPigpKTsKICAgICB9CiAK
LSAgICBSZWZQdHI8Q1NTUnVsZVNvdXJjZURhdGE+IHNvdXJjZURhdGE7Ci0gICAgaWYgKGVuc3Vy
ZVBhcnNlZERhdGFSZWFkeSgpKQotICAgICAgICBzb3VyY2VEYXRhID0gcnVsZVNvdXJjZURhdGFG
b3IocnVsZS0+c3R5bGUoKSk7Ci0gICAgaWYgKHNvdXJjZURhdGEpCi0gICAgICAgIHJlc3VsdC0+
c2V0U2VsZWN0b3JSYW5nZShidWlsZFNvdXJjZVJhbmdlT2JqZWN0KHNvdXJjZURhdGEtPnJ1bGVI
ZWFkZXJSYW5nZSkpOwotCiAgICAgUmVmUHRyPEFycmF5PFR5cGVCdWlsZGVyOjpDU1M6OkNTU01l
ZGlhPiA+IG1lZGlhQXJyYXkgPSBBcnJheTxUeXBlQnVpbGRlcjo6Q1NTOjpDU1NNZWRpYT46OmNy
ZWF0ZSgpOwogCiAgICAgZmlsbE1lZGlhTGlzdENoYWluKHJ1bGUsIG1lZGlhQXJyYXkuZ2V0KCkp
OwpAQCAtMTAxOCwxMSArMTQyMywxNyBAQCBib29sIEluc3BlY3RvclN0eWxlU2hlZXQ6OmdldFRl
eHQoU3RyaW5nKiByZXN1bHQpIGNvbnN0CiAKIENTU1N0eWxlRGVjbGFyYXRpb24qIEluc3BlY3Rv
clN0eWxlU2hlZXQ6OnN0eWxlRm9ySWQoY29uc3QgSW5zcGVjdG9yQ1NTSWQmIGlkKSBjb25zdAog
ewotICAgIENTU1N0eWxlUnVsZSogcnVsZSA9IHJ1bGVGb3JJZChpZCk7CisgICAgQ1NTUnVsZSog
cnVsZSA9IHJ1bGVGb3JJZChpZCk7CiAgICAgaWYgKCFydWxlKQogICAgICAgICByZXR1cm4gMDsK
IAotICAgIHJldHVybiBydWxlLT5zdHlsZSgpOworICAgIGlmIChydWxlLT5pc1N0eWxlUnVsZSgp
KQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q1NTU3R5bGVSdWxlKj4ocnVsZSktPnN0eWxl
KCk7CisgICAgaWYgKHJ1bGUtPmlzRm9udEZhY2VSdWxlKCkpCisgICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxDU1NGb250RmFjZVJ1bGUqPihydWxlKS0+c3R5bGUoKTsKKyAgICBpZiAocnVsZS0+
aXNQYWdlUnVsZSgpKQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q1NTUGFnZVJ1bGUqPihy
dWxlKS0+c3R5bGUoKTsKKyAgICByZXR1cm4gMDsKIH0KIAogdm9pZCBJbnNwZWN0b3JTdHlsZVNo
ZWV0OjpmaXJlU3R5bGVTaGVldENoYW5nZWQoKQpAQCAtMTAzOSw3ICsxNDUwLDcgQEAgUGFzc1Jl
ZlB0cjxJbnNwZWN0b3JTdHlsZT4gSW5zcGVjdG9yU3R5bGVTaGVldDo6aW5zcGVjdG9yU3R5bGVG
b3JJZChjb25zdCBJbnNwZWMKIAogICAgIEluc3BlY3RvclN0eWxlTWFwOjppdGVyYXRvciBpdCA9
IG1faW5zcGVjdG9yU3R5bGVzLmZpbmQoc3R5bGUpOwogICAgIGlmIChpdCA9PSBtX2luc3BlY3Rv
clN0eWxlcy5lbmQoKSkgewotICAgICAgICBSZWZQdHI8SW5zcGVjdG9yU3R5bGU+IGluc3BlY3Rv
clN0eWxlID0gSW5zcGVjdG9yU3R5bGU6OmNyZWF0ZShpZCwgc3R5bGUsIHRoaXMpOworICAgICAg
ICBSZWZQdHI8SW5zcGVjdG9yU3R5bGU+IGluc3BlY3RvclN0eWxlID0gSW5zcGVjdG9yU3R5bGU6
OmNyZWF0ZVdpdGhTdHlsZVNoZWV0KGlkLCBzdHlsZSwgdGhpcyk7CiAgICAgICAgIHJldHVybiBp
bnNwZWN0b3JTdHlsZS5yZWxlYXNlKCk7CiAgICAgfQogICAgIHJldHVybiBpdC0+c2Vjb25kOwpA
QCAtMTA1NSwxMiArMTQ2NiwxMiBAQCB2b2lkIEluc3BlY3RvclN0eWxlU2hlZXQ6OmZvcmdldElu
c3BlY3RvclN0eWxlKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlKQogICAgIG1faW5zcGVjdG9y
U3R5bGVzLnJlbW92ZShzdHlsZSk7CiB9CiAKLUluc3BlY3RvckNTU0lkIEluc3BlY3RvclN0eWxl
U2hlZXQ6OnJ1bGVPclN0eWxlSWQoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUpIGNvbnN0CitJ
bnNwZWN0b3JDU1NJZCBJbnNwZWN0b3JTdHlsZVNoZWV0OjpydWxlT3JTdHlsZUlkKENTU1N0eWxl
RGVjbGFyYXRpb24qIHN0eWxlKQogewotICAgIHVuc2lnbmVkIGluZGV4ID0gcnVsZUluZGV4QnlT
dHlsZShzdHlsZSk7Ci0gICAgaWYgKGluZGV4ICE9IFVJTlRfTUFYKQotICAgICAgICByZXR1cm4g
SW5zcGVjdG9yQ1NTSWQoaWQoKSwgaW5kZXgpOwotICAgIHJldHVybiBJbnNwZWN0b3JDU1NJZCgp
OworICAgIFZlY3RvcjxpbnQ+IHBhdGggPSBydWxlUGF0aEJ5U3R5bGUoc3R5bGUpOworICAgIGlm
IChwYXRoLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIEluc3BlY3RvckNTU0lkKCk7CisgICAg
cmV0dXJuIEluc3BlY3RvckNTU0lkKGlkKCksIHBhdGgpOwogfQogCiBEb2N1bWVudCogSW5zcGVj
dG9yU3R5bGVTaGVldDo6b3duZXJEb2N1bWVudCgpIGNvbnN0CkBAIC0xMDY4LDIyICsxNDc5LDgx
IEBAIERvY3VtZW50KiBJbnNwZWN0b3JTdHlsZVNoZWV0Ojpvd25lckRvY3VtZW50KCkgY29uc3QK
ICAgICByZXR1cm4gbV9wYWdlU3R5bGVTaGVldC0+b3duZXJEb2N1bWVudCgpOwogfQogCi1SZWZQ
dHI8Q1NTUnVsZVNvdXJjZURhdGE+IEluc3BlY3RvclN0eWxlU2hlZXQ6OnJ1bGVTb3VyY2VEYXRh
Rm9yKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlKSBjb25zdAorUGFzc1JlZlB0cjxDU1NSdWxl
U291cmNlRGF0YT4gSW5zcGVjdG9yU3R5bGVTaGVldDo6cnVsZVNvdXJjZURhdGFGb3IoQ1NTUnVs
ZSogcnVsZSkKIHsKLSAgICByZXR1cm4gbV9wYXJzZWRTdHlsZVNoZWV0LT5ydWxlU291cmNlRGF0
YUF0KHJ1bGVJbmRleEJ5U3R5bGUoc3R5bGUpKTsKKyAgICBWZWN0b3I8aW50PiBwYXRoOworICAg
IGlmICghZW5zdXJlU291cmNlRGF0YSgpKQorICAgICAgICByZXR1cm4gMDsKKyAgICBlbnN1cmVS
dWxlVHJlZSgpOworICAgIFJ1bGVQYXRoQnVpbGRlciBidWlsZGVyKHJ1bGUsIHBhdGgpOworICAg
IFJ1bGVWaXNpdG9yOjpmb3JSdWxlcyhhc0NTU1J1bGVMaXN0KG1fcGFnZVN0eWxlU2hlZXQuZ2V0
KCkpLCBidWlsZGVyKTsKKyAgICBpZiAoIWJ1aWxkZXIuZm91bmQoKSkKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgcmV0dXJuIG1fcGFyc2VkU3R5bGVTaGVldC0+cnVsZVNvdXJjZURhdGFBdChwYXRo
KTsKIH0KIAotdW5zaWduZWQgSW5zcGVjdG9yU3R5bGVTaGVldDo6cnVsZUluZGV4QnlTdHlsZShD
U1NTdHlsZURlY2xhcmF0aW9uKiBwYWdlU3R5bGUpIGNvbnN0CitQYXNzUmVmUHRyPENTU1J1bGVT
b3VyY2VEYXRhPiBJbnNwZWN0b3JTdHlsZVNoZWV0OjpydWxlU291cmNlRGF0YUZvcihDU1NTdHls
ZURlY2xhcmF0aW9uKiBzdHlsZSkKIHsKLSAgICBlbnN1cmVGbGF0UnVsZXMoKTsKLSAgICB1bnNp
Z25lZCBpbmRleCA9IDA7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMCwgc2l6ZSA9IG1fZmxhdFJ1
bGVzLnNpemUoKTsgaSA8IHNpemU7ICsraSkgewotICAgICAgICBpZiAobV9mbGF0UnVsZXMuYXQo
aSktPnN0eWxlKCkgPT0gcGFnZVN0eWxlKQotICAgICAgICAgICAgcmV0dXJuIGluZGV4OworICAg
IFZlY3RvcjxpbnQ+IHBhdGggPSBydWxlUGF0aEJ5U3R5bGUoc3R5bGUpOworICAgIGlmIChwYXRo
LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIG1fcGFyc2VkU3R5bGVT
aGVldC0+cnVsZVNvdXJjZURhdGFBdChwYXRoKTsKK30KIAotICAgICAgICArK2luZGV4OworYm9v
bCBJbnNwZWN0b3JTdHlsZVNoZWV0OjpydWxlUGF0aEJ5U3R5bGVJbnRlcm5hbChDU1NTdHlsZURl
Y2xhcmF0aW9uKiBwYWdlU3R5bGUsIEluc3BlY3RvclJ1bGVMaXN0KiBydWxlTGlzdCwgVmVjdG9y
PGludD4mIHBhdGgpCit7CisgICAgQVNTRVJUKHJ1bGVMaXN0KTsKKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IHJ1bGVMaXN0LT5zaXplKCk7ICsraSkgeworICAgICAgICBJbnNwZWN0b3JSdWxl
KiBjaGlsZFJ1bGUgPSBydWxlTGlzdC0+YXQoaSkuZ2V0KCk7CisgICAgICAgIGlmICghY2hpbGRS
dWxlKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIHN3aXRjaCAoY2hpbGRSdWxlLT50
eXBlKCkpIHsKKyAgICAgICAgY2FzZSBJbnNwZWN0b3JSdWxlOjpTVFlMRV9SVUxFOgorICAgICAg
ICAgICAgQVNTRVJUKGNoaWxkUnVsZS0+Y3NzUnVsZSgpKTsKKyAgICAgICAgICAgIEFTU0VSVChj
aGlsZFJ1bGUtPmNzc1J1bGUoKS0+aXNTdHlsZVJ1bGUoKSk7CisgICAgICAgICAgICBpZiAoc3Rh
dGljX2Nhc3Q8Q1NTU3R5bGVSdWxlKj4oY2hpbGRSdWxlLT5jc3NSdWxlKCkpLT5zdHlsZSgpID09
IHBhZ2VTdHlsZSkgeworICAgICAgICAgICAgICAgIHBhdGguYXBwZW5kKGkpOworICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgSW5zcGVjdG9yUnVsZTo6TUVESUFfUlVMRTogeworICAgICAgICAgICAgQVNT
RVJUKGNoaWxkUnVsZS0+Y2FuSGF2ZUNoaWxkUnVsZXMoKSk7CisgICAgICAgICAgICBwYXRoLmFw
cGVuZChpKTsKKyAgICAgICAgICAgIGJvb2wgZm91bmQgPSBydWxlUGF0aEJ5U3R5bGVJbnRlcm5h
bChwYWdlU3R5bGUsIGNoaWxkUnVsZS0+Y2hpbGRSdWxlTGlzdCgpLCBwYXRoKTsKKyAgICAgICAg
ICAgIGlmIChmb3VuZCkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAg
IHBhdGgucmVtb3ZlTGFzdCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAg
ICAgY2FzZSBJbnNwZWN0b3JSdWxlOjpQQUdFX1JVTEU6CisgICAgICAgICAgICBBU1NFUlQoY2hp
bGRSdWxlLT5jc3NSdWxlKCkpOworICAgICAgICAgICAgQVNTRVJUKGNoaWxkUnVsZS0+Y3NzUnVs
ZSgpLT5pc1BhZ2VSdWxlKCkpOworICAgICAgICAgICAgaWYgKHN0YXRpY19jYXN0PENTU1BhZ2VS
dWxlKj4oY2hpbGRSdWxlLT5jc3NSdWxlKCkpLT5zdHlsZSgpID09IHBhZ2VTdHlsZSkgeworICAg
ICAgICAgICAgICAgIHBhdGguYXBwZW5kKGkpOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW5zcGVj
dG9yUnVsZTo6Rk9OVF9GQUNFX1JVTEU6CisgICAgICAgICAgICBBU1NFUlQoY2hpbGRSdWxlLT5j
c3NSdWxlKCkpOworICAgICAgICAgICAgQVNTRVJUKGNoaWxkUnVsZS0+Y3NzUnVsZSgpLT5pc0Zv
bnRGYWNlUnVsZSgpKTsKKyAgICAgICAgICAgIGlmIChzdGF0aWNfY2FzdDxDU1NGb250RmFjZVJ1
bGUqPihjaGlsZFJ1bGUtPmNzc1J1bGUoKSktPnN0eWxlKCkgPT0gcGFnZVN0eWxlKSB7CisgICAg
ICAgICAgICAgICAgcGF0aC5hcHBlbmQoaSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgfQotICAgIHJldHVybiBVSU5UX01BWDsK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK1ZlY3RvcjxpbnQ+IEluc3BlY3RvclN0eWxlU2hlZXQ6
OnJ1bGVQYXRoQnlTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9uKiBwYWdlU3R5bGUpCit7CisgICAg
VmVjdG9yPGludD4gcGF0aDsKKyAgICBpZiAoIXJ1bGVQYXRoQnlTdHlsZUludGVybmFsKHBhZ2VT
dHlsZSwgcnVsZVRyZWUoKSwgcGF0aCkpCisgICAgICAgIHBhdGguY2xlYXIoKTsgLy8gQ2xlYXIg
aW4gdGhlIGNhc2Ugb2YgYW4gZXJyb3IuCisgICAgcmV0dXJuIHBhdGg7CiB9CiAKIGJvb2wgSW5z
cGVjdG9yU3R5bGVTaGVldDo6ZW5zdXJlUGFyc2VkRGF0YVJlYWR5KCkKQEAgLTExMDIsNyArMTU3
Miw3IEBAIGJvb2wgSW5zcGVjdG9yU3R5bGVTaGVldDo6ZW5zdXJlVGV4dCgpIGNvbnN0CiAgICAg
Ym9vbCBzdWNjZXNzID0gb3JpZ2luYWxTdHlsZVNoZWV0VGV4dCgmdGV4dCk7CiAgICAgaWYgKHN1
Y2Nlc3MpCiAgICAgICAgIG1fcGFyc2VkU3R5bGVTaGVldC0+c2V0VGV4dCh0ZXh0KTsKLSAgICAv
LyBObyBuZWVkIHRvIGNsZWFyIG1fZmxhdFJ1bGVzIGhlcmUgLSBpdCdzIGVtcHR5LgorICAgIC8v
IE5vIG5lZWQgdG8gY2xlYXIgbV9ydWxlcyBoZXJlIC0gaXQncyBlbXB0eS4KIAogICAgIHJldHVy
biBzdWNjZXNzOwogfQpAQCAtMTExNiwxOCArMTU4NiwyMCBAQCBib29sIEluc3BlY3RvclN0eWxl
U2hlZXQ6OmVuc3VyZVNvdXJjZURhdGEoKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBS
ZWZQdHI8U3R5bGVTaGVldENvbnRlbnRzPiBuZXdTdHlsZVNoZWV0ID0gU3R5bGVTaGVldENvbnRl
bnRzOjpjcmVhdGUoKTsKLSAgICBDU1NQYXJzZXIgcChDU1NTdHJpY3RNb2RlKTsKKyAgICBDU1NQ
YXJzZXIgcChtX3BhZ2VTdHlsZVNoZWV0LT5jb250ZW50cygpLT5wYXJzZXJDb250ZXh0KCkubW9k
ZSk7CiAgICAgT3duUHRyPFJ1bGVTb3VyY2VEYXRhTGlzdD4gcnVsZVNvdXJjZURhdGFSZXN1bHQg
PSBhZG9wdFB0cihuZXcgUnVsZVNvdXJjZURhdGFMaXN0KCkpOwogICAgIHAucGFyc2VTaGVldChu
ZXdTdHlsZVNoZWV0LmdldCgpLCBtX3BhcnNlZFN0eWxlU2hlZXQtPnRleHQoKSwgMCwgcnVsZVNv
dXJjZURhdGFSZXN1bHQuZ2V0KCkpOwogICAgIG1fcGFyc2VkU3R5bGVTaGVldC0+c2V0U291cmNl
RGF0YShydWxlU291cmNlRGF0YVJlc3VsdC5yZWxlYXNlKCkpOwogICAgIHJldHVybiBtX3BhcnNl
ZFN0eWxlU2hlZXQtPmhhc1NvdXJjZURhdGEoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JTdHlsZVNo
ZWV0OjplbnN1cmVGbGF0UnVsZXMoKSBjb25zdAordm9pZCBJbnNwZWN0b3JTdHlsZVNoZWV0Ojpl
bnN1cmVSdWxlVHJlZSgpCiB7CiAgICAgLy8gV2UgYXJlIGZpbmUgd2l0aCByZWRvaW5nIHRoaXMg
Zm9yIGVtcHR5IHN0eWxlc2hlZXRzIGFzIHRoaXMgd2lsbCBydW4gZmFzdC4KLSAgICBpZiAobV9m
bGF0UnVsZXMuaXNFbXB0eSgpKQotICAgICAgICBjb2xsZWN0RmxhdFJ1bGVzKGFzQ1NTUnVsZUxp
c3QocGFnZVN0eWxlU2hlZXQoKSksICZtX2ZsYXRSdWxlcyk7CisgICAgaWYgKG1fcnVsZXMuaXNF
bXB0eSgpKSB7CisgICAgICAgIEluc3BlY3RvclJ1bGVUcmVlQnVpbGRlciBidWlsZGVyKHRoaXMs
ICZtX3J1bGVzKTsKKyAgICAgICAgUnVsZVZpc2l0b3I6OmZvclJ1bGVzKGFzQ1NTUnVsZUxpc3Qo
bV9wYWdlU3R5bGVTaGVldC5nZXQoKSksIGJ1aWxkZXIpOworICAgIH0KIH0KIAogYm9vbCBJbnNw
ZWN0b3JTdHlsZVNoZWV0OjpzZXRTdHlsZVRleHQoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUs
IGNvbnN0IFN0cmluZyYgdGV4dCkKQEAgLTExNzUsMzAgKzE2NDcsMjcgQEAgYm9vbCBJbnNwZWN0
b3JTdHlsZVNoZWV0OjpzdHlsZVNoZWV0VGV4dFdpdGhDaGFuZ2VkU3R5bGUoQ1NTU3R5bGVEZWNs
YXJhdGlvbiogc3QKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotSW5zcGVjdG9yQ1NTSWQgSW5zcGVj
dG9yU3R5bGVTaGVldDo6cnVsZUlkKENTU1N0eWxlUnVsZSogcnVsZSkgY29uc3QKK0luc3BlY3Rv
ckNTU0lkIEluc3BlY3RvclN0eWxlU2hlZXQ6OnJ1bGVJZChDU1NSdWxlKiBydWxlKQogewotICAg
IHJldHVybiBydWxlT3JTdHlsZUlkKHJ1bGUtPnN0eWxlKCkpOworICAgIHJldHVybiBmaW5kUnVs
ZUlkKHJ1bGUsIHJ1bGVUcmVlKCkpOwogfQogCi12b2lkIEluc3BlY3RvclN0eWxlU2hlZXQ6OnJl
dmFsaWRhdGVTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9uKiBwYWdlU3R5bGUpCisvLyBzdGF0aWMK
K0luc3BlY3RvckNTU0lkIEluc3BlY3RvclN0eWxlU2hlZXQ6OmZpbmRSdWxlSWQoQ1NTUnVsZSog
cnVsZSwgSW5zcGVjdG9yUnVsZUxpc3QqIHJ1bGVMaXN0KQogewotICAgIGlmIChtX2lzUmV2YWxp
ZGF0aW5nKQotICAgICAgICByZXR1cm47CisgICAgZm9yIChzaXplX3QgaSA9IDAsIHNpemUgPSBy
dWxlTGlzdC0+c2l6ZSgpOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgIGlmIChydWxlTGlzdC0+
YXQoaSktPmNzc1J1bGUoKSA9PSBydWxlKQorICAgICAgICAgICAgcmV0dXJuIHJ1bGVMaXN0LT5h
dChpKS0+aWQoKTsKIAotICAgIG1faXNSZXZhbGlkYXRpbmcgPSB0cnVlOwotICAgIGVuc3VyZUZs
YXRSdWxlcygpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDAsIHNpemUgPSBtX2ZsYXRSdWxlcy5z
aXplKCk7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgQ1NTU3R5bGVSdWxlKiBwYXJzZWRSdWxl
ID0gbV9mbGF0UnVsZXMuYXQoaSk7Ci0gICAgICAgIGlmIChwYXJzZWRSdWxlLT5zdHlsZSgpID09
IHBhZ2VTdHlsZSkgewotICAgICAgICAgICAgaWYgKHBhcnNlZFJ1bGUtPnN0eWxlUnVsZSgpLT5w
cm9wZXJ0aWVzKCktPmFzVGV4dCgpICE9IHBhZ2VTdHlsZS0+Y3NzVGV4dCgpKSB7Ci0gICAgICAg
ICAgICAgICAgLy8gQ2xlYXIgdGhlIGRpc2FibGVkIHByb3BlcnRpZXMgZm9yIHRoZSBpbnZhbGlk
IHN0eWxlIGhlcmUuCi0gICAgICAgICAgICAgICAgbV9pbnNwZWN0b3JTdHlsZXMucmVtb3ZlKHBh
Z2VTdHlsZSk7Ci0gICAgICAgICAgICAgICAgc2V0U3R5bGVUZXh0KHBhZ2VTdHlsZSwgcGFnZVN0
eWxlLT5jc3NUZXh0KCkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIEluc3BlY3RvclJ1bGVMaXN0KiBjaGlsZFJ1bGVMaXN0ID0gcnVsZUxpc3QtPmF0KGkpLT5j
aGlsZFJ1bGVMaXN0KCk7CisgICAgICAgIGlmIChjaGlsZFJ1bGVMaXN0KSB7CisgICAgICAgICAg
ICBJbnNwZWN0b3JDU1NJZCBpZCA9IGZpbmRSdWxlSWQocnVsZSwgY2hpbGRSdWxlTGlzdCk7Cisg
ICAgICAgICAgICBpZiAoIWlkLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gaWQ7
CiAgICAgICAgIH0KICAgICB9Ci0gICAgbV9pc1JldmFsaWRhdGluZyA9IGZhbHNlOworCisgICAg
cmV0dXJuIEluc3BlY3RvckNTU0lkKCk7CiB9CiAKIGJvb2wgSW5zcGVjdG9yU3R5bGVTaGVldDo6
b3JpZ2luYWxTdHlsZVNoZWV0VGV4dChTdHJpbmcqIHJlc3VsdCkgY29uc3QKQEAgLTEyNDMsNDAg
KzE3MTIsMTYgQEAgYm9vbCBJbnNwZWN0b3JTdHlsZVNoZWV0OjppbmxpbmVTdHlsZVNoZWV0VGV4
dChTdHJpbmcqIHJlc3VsdCkgY29uc3QKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotUGFzc1JlZlB0
cjxUeXBlQnVpbGRlcjo6QXJyYXk8VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTUnVsZT4gPiBJbnNwZWN0
b3JTdHlsZVNoZWV0OjpidWlsZEFycmF5Rm9yUnVsZUxpc3QoQ1NTUnVsZUxpc3QqIHJ1bGVMaXN0
KQorUGFzc1JlZlB0cjxBcnJheTxUeXBlQnVpbGRlcjo6Q1NTOjpDU1NSdWxlPiA+IEluc3BlY3Rv
clN0eWxlU2hlZXQ6OmJ1aWxkVHJlZUZvclJ1bGVMaXN0KCkKIHsKLSAgICBSZWZQdHI8VHlwZUJ1
aWxkZXI6OkFycmF5PFR5cGVCdWlsZGVyOjpDU1M6OkNTU1J1bGU+ID4gcmVzdWx0ID0gVHlwZUJ1
aWxkZXI6OkFycmF5PFR5cGVCdWlsZGVyOjpDU1M6OkNTU1J1bGU+OjpjcmVhdGUoKTsKLSAgICBp
ZiAoIXJ1bGVMaXN0KQotICAgICAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKLQotICAgIFJl
ZlB0cjxDU1NSdWxlTGlzdD4gcmVmUnVsZUxpc3QgPSBydWxlTGlzdDsKLSAgICBWZWN0b3I8Q1NT
U3R5bGVSdWxlKj4gcnVsZXM7Ci0gICAgY29sbGVjdEZsYXRSdWxlcyhyZWZSdWxlTGlzdCwgJnJ1
bGVzKTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDAsIHNpemUgPSBydWxlcy5zaXplKCk7IGkg
PCBzaXplOyArK2kpCi0gICAgICAgIHJlc3VsdC0+YWRkSXRlbShidWlsZE9iamVjdEZvclJ1bGUo
cnVsZXMuYXQoaSkpKTsKKyAgICBSZWZQdHI8QXJyYXk8VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTUnVs
ZT4gPiByZXN1bHQgPSBBcnJheTxUeXBlQnVpbGRlcjo6Q1NTOjpDU1NSdWxlPjo6Y3JlYXRlKCk7
CisgICAgSW5zcGVjdG9yUnVsZUxpc3QqIHJ1bGVMaXN0ID0gcnVsZVRyZWUoKTsKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwLCBzaXplID0gcnVsZUxpc3QtPnNpemUoKTsgaSA8IHNpemU7ICsraSkK
KyAgICAgICAgcmVzdWx0LT5hZGRJdGVtKGJ1aWxkT2JqZWN0Rm9yUnVsZShydWxlTGlzdC0+YXQo
aSktPmNzc1J1bGUoKSkpOwogCiAgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7CiB9CiAKLXZv
aWQgSW5zcGVjdG9yU3R5bGVTaGVldDo6Y29sbGVjdEZsYXRSdWxlcyhQYXNzUmVmUHRyPENTU1J1
bGVMaXN0PiBydWxlTGlzdCwgVmVjdG9yPENTU1N0eWxlUnVsZSo+KiByZXN1bHQpCi17Ci0gICAg
aWYgKCFydWxlTGlzdCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0g
MCwgc2l6ZSA9IHJ1bGVMaXN0LT5sZW5ndGgoKTsgaSA8IHNpemU7ICsraSkgewotICAgICAgICBD
U1NSdWxlKiBydWxlID0gcnVsZUxpc3QtPml0ZW0oaSk7Ci0gICAgICAgIENTU1N0eWxlUnVsZSog
c3R5bGVSdWxlID0gSW5zcGVjdG9yQ1NTQWdlbnQ6OmFzQ1NTU3R5bGVSdWxlKHJ1bGUpOwotICAg
ICAgICBpZiAoc3R5bGVSdWxlKQotICAgICAgICAgICAgcmVzdWx0LT5hcHBlbmQoc3R5bGVSdWxl
KTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBSZWZQdHI8Q1NTUnVsZUxpc3Q+IGNoaWxk
UnVsZUxpc3QgPSBhc0NTU1J1bGVMaXN0KHJ1bGUpOwotICAgICAgICAgICAgaWYgKGNoaWxkUnVs
ZUxpc3QpCi0gICAgICAgICAgICAgICAgY29sbGVjdEZsYXRSdWxlcyhjaGlsZFJ1bGVMaXN0LCBy
ZXN1bHQpOwotICAgICAgICB9Ci0gICAgfQotfQotCiBQYXNzUmVmUHRyPEluc3BlY3RvclN0eWxl
U2hlZXRGb3JJbmxpbmVTdHlsZT4gSW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlOjpj
cmVhdGUoSW5zcGVjdG9yUGFnZUFnZW50KiBwYWdlQWdlbnQsIGNvbnN0IFN0cmluZyYgaWQsIFBh
c3NSZWZQdHI8RWxlbWVudD4gZWxlbWVudCwgVHlwZUJ1aWxkZXI6OkNTUzo6U3R5bGVTaGVldE9y
aWdpbjo6RW51bSBvcmlnaW4sIExpc3RlbmVyKiBsaXN0ZW5lcikKIHsKICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IEluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZShwYWdlQWdlbnQsIGlk
LCBlbGVtZW50LCBvcmlnaW4sIGxpc3RlbmVyKSk7CkBAIC0xMjg5LDcgKzE3MzQsNyBAQCBJbnNw
ZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU6Okluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxp
bmVTdHlsZShJbnNwZWN0b3JQYQogICAgICwgbV9pc1N0eWxlVGV4dFZhbGlkKGZhbHNlKQogewog
ICAgIEFTU0VSVChtX2VsZW1lbnQpOwotICAgIG1faW5zcGVjdG9yU3R5bGUgPSBJbnNwZWN0b3JT
dHlsZTo6Y3JlYXRlKEluc3BlY3RvckNTU0lkKGlkLCAwKSwgaW5saW5lU3R5bGUoKSwgdGhpcyk7
CisgICAgbV9pbnNwZWN0b3JTdHlsZSA9IEluc3BlY3RvclN0eWxlOjpjcmVhdGVXaXRoU3R5bGVT
aGVldChJbnNwZWN0b3JDU1NJZDo6Zm9ySW5saW5lU3R5bGUoaWQpLCBpbmxpbmVTdHlsZSgpLCB0
aGlzKTsKICAgICBtX3N0eWxlVGV4dCA9IG1fZWxlbWVudC0+aXNTdHlsZWRFbGVtZW50KCkgPyBt
X2VsZW1lbnQtPmdldEF0dHJpYnV0ZSgic3R5bGUiKS5zdHJpbmcoKSA6IFN0cmluZygpOwogfQog
CkBAIC0xMjk3LDcgKzE3NDIsNyBAQCB2b2lkIEluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVT
dHlsZTo6ZGlkTW9kaWZ5RWxlbWVudEF0dHJpYnV0ZSgpCiB7CiAgICAgbV9pc1N0eWxlVGV4dFZh
bGlkID0gZmFsc2U7CiAgICAgaWYgKG1fZWxlbWVudC0+aXNTdHlsZWRFbGVtZW50KCkgJiYgbV9l
bGVtZW50LT5zdHlsZSgpICE9IG1faW5zcGVjdG9yU3R5bGUtPmNzc1N0eWxlKCkpCi0gICAgICAg
IG1faW5zcGVjdG9yU3R5bGUgPSBJbnNwZWN0b3JTdHlsZTo6Y3JlYXRlKEluc3BlY3RvckNTU0lk
KGlkKCksIDApLCBpbmxpbmVTdHlsZSgpLCB0aGlzKTsKKyAgICAgICAgbV9pbnNwZWN0b3JTdHls
ZSA9IEluc3BlY3RvclN0eWxlOjpjcmVhdGVXaXRoU3R5bGVTaGVldChJbnNwZWN0b3JDU1NJZDo6
Zm9ySW5saW5lU3R5bGUoaWQoKSksIGlubGluZVN0eWxlKCksIHRoaXMpOwogICAgIG1fcnVsZVNv
dXJjZURhdGEuY2xlYXIoKTsKIH0KIApAQCAtMTM1NSw3ICsxODAwLDcgQEAgYm9vbCBJbnNwZWN0
b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU6OmVuc3VyZVBhcnNlZERhdGFSZWFkeSgpCiAKIFBh
c3NSZWZQdHI8SW5zcGVjdG9yU3R5bGU+IEluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHls
ZTo6aW5zcGVjdG9yU3R5bGVGb3JJZChjb25zdCBJbnNwZWN0b3JDU1NJZCYgaWQpCiB7Ci0gICAg
QVNTRVJUX1VOVVNFRChpZCwgIWlkLm9yZGluYWwoKSk7CisgICAgQVNTRVJUX1VOVVNFRChpZCwg
IWlkLnBhdGhBdCgwKSk7CiAgICAgcmV0dXJuIG1faW5zcGVjdG9yU3R5bGU7CiB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmggYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5oCmluZGV4IDBhZjlm
M2M1YTFiODIzMmExODcyMDZhNDJjYWRhMTJhN2Y3MGJkMjcuLmM0ZjI3NjUwMmY5ZDEzYWU3Zjc0
M2I5N2Y4YjExZWMyZTMzZGZiZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JTdHlsZVNoZWV0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvclN0eWxlU2hlZXQuaApAQCAtNDAsOSArNDAsMTEgQEAKICNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CiAKIGNsYXNzIFBhcnNlZFN0eWxlU2hlZXQ7CitzdHJ1Y3QgUnVsZUxpc3Q7CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgQ1NTUnVsZTsKIGNsYXNzIENTU1J1bGVMaXN0Owog
Y2xhc3MgQ1NTU3R5bGVEZWNsYXJhdGlvbjsKIGNsYXNzIENTU1N0eWxlUnVsZTsKQEAgLTUwLDQw
ICs1Miw2OCBAQCBjbGFzcyBDU1NTdHlsZVNoZWV0OwogY2xhc3MgRG9jdW1lbnQ7CiBjbGFzcyBF
bGVtZW50OwogY2xhc3MgSW5zcGVjdG9yUGFnZUFnZW50OworY2xhc3MgSW5zcGVjdG9yUnVsZTsK
IGNsYXNzIEluc3BlY3RvclN0eWxlU2hlZXQ7CiBjbGFzcyBOb2RlOworY2xhc3MgUnVsZVZpc2l0
b3I7CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQogCiB0eXBlZGVmIFN0cmluZyBFcnJvclN0cmlu
ZzsKK3R5cGVkZWYgVmVjdG9yPFJlZlB0cjxJbnNwZWN0b3JSdWxlPiA+IEluc3BlY3RvclJ1bGVM
aXN0OwogCiBjbGFzcyBJbnNwZWN0b3JDU1NJZCB7CiBwdWJsaWM6Ci0gICAgSW5zcGVjdG9yQ1NT
SWQoKQotICAgICAgICA6IG1fb3JkaW5hbCgwKQorICAgIHN0YXRpYyBJbnNwZWN0b3JDU1NJZCBm
b3JJbmxpbmVTdHlsZShjb25zdCBTdHJpbmcmIHN0eWxlU2hlZXRJZCkKICAgICB7CisgICAgICAg
IFZlY3RvcjxpbnQ+IHBhdGg7CisgICAgICAgIHBhdGguYXBwZW5kKDApOworICAgICAgICByZXR1
cm4gSW5zcGVjdG9yQ1NTSWQoc3R5bGVTaGVldElkLCBwYXRoKTsKICAgICB9CiAKKyAgICBzdGF0
aWMgSW5zcGVjdG9yQ1NTSWQgZm9yUGFyZW50UGF0aChjb25zdCBTdHJpbmcmIHN0eWxlU2hlZXRJ
ZCwgY29uc3QgVmVjdG9yPGludD4mIHBhcmVudFBhdGgsIGludCBpbmRleCkKKyAgICB7CisgICAg
ICAgIFZlY3RvcjxpbnQ+IHBhdGgocGFyZW50UGF0aCk7CisgICAgICAgIHBhdGguYXBwZW5kKGlu
ZGV4KTsKKyAgICAgICAgcmV0dXJuIEluc3BlY3RvckNTU0lkKHN0eWxlU2hlZXRJZCwgcGF0aCk7
CisgICAgfQorCisgICAgSW5zcGVjdG9yQ1NTSWQoKSB7IH0KKwogICAgIGV4cGxpY2l0IEluc3Bl
Y3RvckNTU0lkKFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQogICAgIHsKICAgICAgICAg
aWYgKCF2YWx1ZS0+Z2V0U3RyaW5nKCJzdHlsZVNoZWV0SWQiLCAmbV9zdHlsZVNoZWV0SWQpKQog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAKLSAgICAgICAgUmVmUHRyPEluc3BlY3RvclZh
bHVlPiBvcmRpbmFsVmFsdWUgPSB2YWx1ZS0+Z2V0KCJvcmRpbmFsIik7Ci0gICAgICAgIGlmICgh
b3JkaW5hbFZhbHVlIHx8ICFvcmRpbmFsVmFsdWUtPmFzTnVtYmVyKCZtX29yZGluYWwpKQorICAg
ICAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGluZGV4VmFsdWVzID0gdmFsdWUtPmdldEFycmF5
KCJwYXRoIik7CisgICAgICAgIGlmICghaW5kZXhWYWx1ZXMpIHsKICAgICAgICAgICAgIG1fc3R5
bGVTaGVldElkID0gIiI7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGluZGV4VmFsdWVzLT5sZW5ndGgoKTsgKytpKSB7Cisg
ICAgICAgICAgICBpbnQgaW5kZXg7CisgICAgICAgICAgICBpZiAoIWluZGV4VmFsdWVzLT5nZXQo
aSktPmFzTnVtYmVyKCZpbmRleCkpIHsKKyAgICAgICAgICAgICAgICBtX3N0eWxlU2hlZXRJZCA9
ICIiOworICAgICAgICAgICAgICAgIG1fcGF0aC5jbGVhcigpOworICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1fcGF0aC5hcHBlbmQoaW5kZXgpOwor
ICAgICAgICB9CiAgICAgfQogCi0gICAgSW5zcGVjdG9yQ1NTSWQoY29uc3QgU3RyaW5nJiBzdHls
ZVNoZWV0SWQsIHVuc2lnbmVkIG9yZGluYWwpCisgICAgSW5zcGVjdG9yQ1NTSWQoY29uc3QgU3Ry
aW5nJiBzdHlsZVNoZWV0SWQsIFZlY3RvcjxpbnQ+JiBwYXRoKQogICAgICAgICA6IG1fc3R5bGVT
aGVldElkKHN0eWxlU2hlZXRJZCkKLSAgICAgICAgLCBtX29yZGluYWwob3JkaW5hbCkKKyAgICAg
ICAgLCBtX3BhdGgocGF0aCkKICAgICB7CiAgICAgfQogCiAgICAgYm9vbCBpc0VtcHR5KCkgY29u
c3QgeyByZXR1cm4gbV9zdHlsZVNoZWV0SWQuaXNFbXB0eSgpOyB9CiAKICAgICBjb25zdCBTdHJp
bmcmIHN0eWxlU2hlZXRJZCgpIGNvbnN0IHsgcmV0dXJuIG1fc3R5bGVTaGVldElkOyB9Ci0gICAg
dW5zaWduZWQgb3JkaW5hbCgpIGNvbnN0IHsgcmV0dXJuIG1fb3JkaW5hbDsgfQorICAgIGludCBw
YXRoQXQodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgQVNTRVJUKGluZGV4IDwgbV9wYXRoLnNpemUo
KSk7IHJldHVybiBtX3BhdGguYXQoaW5kZXgpOyB9CisgICAgaW50IGxhc3RQYXRoQ29tcG9uZW50
KCkgY29uc3QgeyBBU1NFUlQobV9wYXRoLnNpemUoKSA+IDApOyByZXR1cm4gbV9wYXRoLmxhc3Qo
KTsgfQorICAgIHNpemVfdCBwYXRoTGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9wYXRoLnNpemUo
KTsgfQogCiAgICAgLy8gSUQgdHlwZSBpcyBlaXRoZXIgVHlwZUJ1aWxkZXI6OkNTUzo6Q1NTU3R5
bGVJZCBvciBUeXBlQnVpbGRlcjo6Q1NTOjpDU1NSdWxlSWQuCiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgSUQ+CkBAIC05MiwxNSArMTIyLDE5IEBAIHB1YmxpYzoKICAgICAgICAgaWYgKGlzRW1wdHko
KSkKICAgICAgICAgICAgIHJldHVybiAwOwogCisgICAgICAgIFJlZlB0cjxUeXBlQnVpbGRlcjo6
QXJyYXk8aW50PiA+IHBhcmVudENoYWluID0gVHlwZUJ1aWxkZXI6OkFycmF5PGludD46OmNyZWF0
ZSgpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fcGF0aC5zaXplKCk7ICsraSkK
KyAgICAgICAgICAgIHBhcmVudENoYWluLT5hZGRJdGVtKHN0YXRpY19jYXN0PGludD4obV9wYXRo
LmF0KGkpKSk7CisKICAgICAgICAgUmVmUHRyPElEPiByZXN1bHQgPSBJRDo6Y3JlYXRlKCkKICAg
ICAgICAgICAgIC5zZXRTdHlsZVNoZWV0SWQobV9zdHlsZVNoZWV0SWQpCi0gICAgICAgICAgICAu
c2V0T3JkaW5hbChtX29yZGluYWwpOworICAgICAgICAgICAgLnNldFBhdGgocGFyZW50Q2hhaW4p
OwogICAgICAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKICAgICB9CiAKIHByaXZhdGU6CiAg
ICAgU3RyaW5nIG1fc3R5bGVTaGVldElkOwotICAgIHVuc2lnbmVkIG1fb3JkaW5hbDsKKyAgICBW
ZWN0b3I8aW50PiBtX3BhdGg7CiB9OwogCiBzdHJ1Y3QgSW5zcGVjdG9yU3R5bGVQcm9wZXJ0eSB7
CkBAIC0xMzYsNyArMTcwLDcgQEAgc3RydWN0IEluc3BlY3RvclN0eWxlUHJvcGVydHkgewogCiBj
bGFzcyBJbnNwZWN0b3JTdHlsZSA6IHB1YmxpYyBSZWZDb3VudGVkPEluc3BlY3RvclN0eWxlPiB7
CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yU3R5bGU+IGNyZWF0ZShj
b25zdCBJbnNwZWN0b3JDU1NJZCYgc3R5bGVJZCwgUGFzc1JlZlB0cjxDU1NTdHlsZURlY2xhcmF0
aW9uPiBzdHlsZSwgSW5zcGVjdG9yU3R5bGVTaGVldCogcGFyZW50U3R5bGVTaGVldCk7CisgICAg
c3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yU3R5bGU+IGNyZWF0ZVdpdGhTdHlsZVNoZWV0KGNv
bnN0IEluc3BlY3RvckNTU0lkJiBzdHlsZUlkLCBQYXNzUmVmUHRyPENTU1N0eWxlRGVjbGFyYXRp
b24+LCBJbnNwZWN0b3JTdHlsZVNoZWV0KiBwYXJlbnRTdHlsZVNoZWV0KTsKICAgICB2aXJ0dWFs
IH5JbnNwZWN0b3JTdHlsZSgpOwogCiAgICAgQ1NTU3R5bGVEZWNsYXJhdGlvbiogY3NzU3R5bGUo
KSBjb25zdCB7IHJldHVybiBtX3N0eWxlLmdldCgpOyB9CkBAIC0xNjYsNiArMjAwLDY0IEBAIHBy
aXZhdGU6CiAgICAgbXV0YWJsZSBib29sIG1fZm9ybWF0QWNxdWlyZWQ7CiB9OwogCitjbGFzcyBJ
bnNwZWN0b3JSdWxlIDogcHVibGljIFJlZkNvdW50ZWQ8SW5zcGVjdG9yUnVsZT4geworcHVibGlj
OgorICAgIGVudW0gVHlwZSB7CisgICAgICAgIFVOS05PV05fUlVMRSwKKyAgICAgICAgU1RZTEVf
UlVMRSwKKyAgICAgICAgSU1QT1JUX1JVTEUsCisgICAgICAgIE1FRElBX1JVTEUsCisgICAgICAg
IEZPTlRfRkFDRV9SVUxFLAorICAgICAgICBQQUdFX1JVTEUsCisgICAgfTsKKworICAgIHN0YXRp
YyBQYXNzUmVmUHRyPEluc3BlY3RvclJ1bGU+IGNyZWF0ZShjb25zdCBJbnNwZWN0b3JDU1NJZCYg
aWQsIENTU1J1bGUqIHJ1bGUsIEluc3BlY3RvclN0eWxlU2hlZXQqIHBhcmVudFN0eWxlU2hlZXQp
CisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEluc3BlY3RvclJ1bGUoaWQsIHJ1
bGUsIHBhcmVudFN0eWxlU2hlZXQpKTsKKyAgICB9CisKKyAgICBjb25zdCBJbnNwZWN0b3JDU1NJ
ZCYgaWQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1faWQ7CisgICAgfQorCisgICAgVHlwZSB0
eXBlKCkgY29uc3Q7CisKKyAgICBDU1NSdWxlKiBjc3NSdWxlKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBtX3J1bGUuZ2V0KCk7CisgICAgfQorCisgICAgSW5zcGVjdG9yU3R5bGUqIHN0
eWxlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3N0eWxlLmdldCgpOworICAgIH0K
KworICAgIHZvaWQgYXBwZW5kQ2hpbGQoUGFzc1JlZlB0cjxJbnNwZWN0b3JSdWxlPiBjaGlsZFJ1
bGUpCisgICAgeworICAgICAgICBBU1NFUlQodHlwZSgpID09IE1FRElBX1JVTEUpOworICAgICAg
ICBtX2NoaWxkUnVsZXMtPmFwcGVuZChjaGlsZFJ1bGUpOworICAgIH0KKworICAgIGJvb2wgY2Fu
SGF2ZUNoaWxkUnVsZXMoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICEhbV9jaGlsZFJ1
bGVzOworICAgIH0KKworICAgIEluc3BlY3RvclJ1bGVMaXN0KiBjaGlsZFJ1bGVMaXN0KCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBtX2NoaWxkUnVsZXMuZ2V0KCk7CisgICAgfQorCitwcml2YXRl
OgorICAgIEluc3BlY3RvclJ1bGUoY29uc3QgSW5zcGVjdG9yQ1NTSWQmLCBDU1NSdWxlKiwgSW5z
cGVjdG9yU3R5bGVTaGVldCogcGFyZW50U3R5bGVTaGVldCk7CisKKyAgICBJbnNwZWN0b3JDU1NJ
ZCBtX2lkOworICAgIFJlZlB0cjxDU1NSdWxlPiBtX3J1bGU7CisgICAgUmVmUHRyPEluc3BlY3Rv
clN0eWxlPiBtX3N0eWxlOworICAgIG11dGFibGUgT3duUHRyPEluc3BlY3RvclJ1bGVMaXN0PiBt
X2NoaWxkUnVsZXM7Cit9OworCiBjbGFzcyBJbnNwZWN0b3JTdHlsZVNoZWV0IDogcHVibGljIFJl
ZkNvdW50ZWQ8SW5zcGVjdG9yU3R5bGVTaGVldD4gewogcHVibGljOgogICAgIGNsYXNzIExpc3Rl
bmVyIHsKQEAgLTE3NSw2ICsyNjcsMjYgQEAgcHVibGljOgogICAgICAgICB2aXJ0dWFsIHZvaWQg
c3R5bGVTaGVldENoYW5nZWQoSW5zcGVjdG9yU3R5bGVTaGVldCopID0gMDsKICAgICB9OwogCisg
ICAgc3RydWN0IFJ1bGVBbmNob3IgeworICAgICAgICBSdWxlQW5jaG9yKCkKKyAgICAgICAgICAg
IDogcGFyZW50UnVsZSgwKQorICAgICAgICAgICAgLCBpbmRleCgwKQorICAgICAgICAgICAgLCB2
YWxpZChmYWxzZSkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgUnVsZUFuY2hvcihD
U1NSdWxlKiBwYXJlbnRSdWxlLCBpbnQgaW5kZXgpCisgICAgICAgICAgICA6IHBhcmVudFJ1bGUo
cGFyZW50UnVsZSkKKyAgICAgICAgICAgICwgaW5kZXgoaW5kZXgpCisgICAgICAgICAgICAsIHZh
bGlkKHRydWUpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIENTU1J1bGUqIHBhcmVu
dFJ1bGU7CisgICAgICAgIGludCBpbmRleDsKKyAgICAgICAgYm9vbCB2YWxpZDsKKyAgICB9Owor
CiAgICAgdHlwZWRlZiBIYXNoTWFwPENTU1N0eWxlRGVjbGFyYXRpb24qLCBSZWZQdHI8SW5zcGVj
dG9yU3R5bGU+ID4gSW5zcGVjdG9yU3R5bGVNYXA7CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5z
cGVjdG9yU3R5bGVTaGVldD4gY3JlYXRlKEluc3BlY3RvclBhZ2VBZ2VudCosIGNvbnN0IFN0cmlu
ZyYgaWQsIFBhc3NSZWZQdHI8Q1NTU3R5bGVTaGVldD4gcGFnZVN0eWxlU2hlZXQsIFR5cGVCdWls
ZGVyOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW46OkVudW0sIGNvbnN0IFN0cmluZyYgZG9jdW1lbnRV
UkwsIExpc3RlbmVyKik7CiAgICAgc3RhdGljIFN0cmluZyBzdHlsZVNoZWV0VVJMKENTU1N0eWxl
U2hlZXQqIHBhZ2VTdHlsZVNoZWV0KTsKQEAgLTE5MCwxMCArMzAyLDExIEBAIHB1YmxpYzoKICAg
ICBib29sIHNldFJ1bGVTZWxlY3Rvcihjb25zdCBJbnNwZWN0b3JDU1NJZCYsIGNvbnN0IFN0cmlu
ZyYgc2VsZWN0b3IsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICBDU1NTdHlsZVJ1bGUqIGFkZFJ1bGUo
Y29uc3QgU3RyaW5nJiBzZWxlY3RvciwgRXhjZXB0aW9uQ29kZSYpOwogICAgIGJvb2wgZGVsZXRl
UnVsZShjb25zdCBJbnNwZWN0b3JDU1NJZCYsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBDU1NTdHls
ZVJ1bGUqIHJ1bGVGb3JJZChjb25zdCBJbnNwZWN0b3JDU1NJZCYpIGNvbnN0OworICAgIENTU1J1
bGUqIHJ1bGVGb3JJZChjb25zdCBJbnNwZWN0b3JDU1NJZCYpIGNvbnN0OworICAgIFJ1bGVBbmNo
b3IgcnVsZUFuY2hvckZvcklkKGNvbnN0IEluc3BlY3RvckNTU0lkJikgY29uc3Q7CiAgICAgUGFz
c1JlZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpDU1NTdHlsZVNoZWV0Qm9keT4gYnVpbGRPYmplY3RG
b3JTdHlsZVNoZWV0KCk7CiAgICAgUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpDU1NTdHls
ZVNoZWV0SGVhZGVyPiBidWlsZE9iamVjdEZvclN0eWxlU2hlZXRJbmZvKCk7Ci0gICAgUGFzc1Jl
ZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpDU1NSdWxlPiBidWlsZE9iamVjdEZvclJ1bGUoQ1NTU3R5
bGVSdWxlKik7CisgICAgUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpDU1NSdWxlPiBidWls
ZE9iamVjdEZvclJ1bGUoQ1NTUnVsZSopOwogICAgIFBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkNT
Uzo6Q1NTU3R5bGU+IGJ1aWxkT2JqZWN0Rm9yU3R5bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbiopOwog
ICAgIGJvb2wgc2V0UHJvcGVydHlUZXh0KGNvbnN0IEluc3BlY3RvckNTU0lkJiwgdW5zaWduZWQg
cHJvcGVydHlJbmRleCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBib29sIG92ZXJ3cml0ZSwgU3RyaW5n
KiBvbGRQcm9wZXJ0eVRleHQsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICBib29sIHRvZ2dsZVByb3Bl
cnR5KGNvbnN0IEluc3BlY3RvckNTU0lkJiwgdW5zaWduZWQgcHJvcGVydHlJbmRleCwgYm9vbCBk
aXNhYmxlLCBFeGNlcHRpb25Db2RlJik7CkBAIC0yMDIsMTcgKzMxNSwxNyBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCBDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZUZvcklkKGNvbnN0IEluc3BlY3Rv
ckNTU0lkJikgY29uc3Q7CiAgICAgdm9pZCBmaXJlU3R5bGVTaGVldENoYW5nZWQoKTsKIAotICAg
IEluc3BlY3RvckNTU0lkIHJ1bGVJZChDU1NTdHlsZVJ1bGUqKSBjb25zdDsKLSAgICBJbnNwZWN0
b3JDU1NJZCBzdHlsZUlkKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlKSBjb25zdCB7IHJldHVy
biBydWxlT3JTdHlsZUlkKHN0eWxlKTsgfQorICAgIEluc3BlY3RvckNTU0lkIHJ1bGVJZChDU1NS
dWxlKik7CisgICAgSW5zcGVjdG9yQ1NTSWQgc3R5bGVJZChDU1NTdHlsZURlY2xhcmF0aW9uKiBz
dHlsZSkgeyByZXR1cm4gcnVsZU9yU3R5bGVJZChzdHlsZSk7IH0KIAogcHJvdGVjdGVkOgogICAg
IEluc3BlY3RvclN0eWxlU2hlZXQoSW5zcGVjdG9yUGFnZUFnZW50KiwgY29uc3QgU3RyaW5nJiBp
ZCwgUGFzc1JlZlB0cjxDU1NTdHlsZVNoZWV0PiBwYWdlU3R5bGVTaGVldCwgVHlwZUJ1aWxkZXI6
OkNTUzo6U3R5bGVTaGVldE9yaWdpbjo6RW51bSwgY29uc3QgU3RyaW5nJiBkb2N1bWVudFVSTCwg
TGlzdGVuZXIqKTsKIAogICAgIGJvb2wgY2FuQmluZCgpIGNvbnN0IHsgcmV0dXJuIG1fb3JpZ2lu
ICE9IFR5cGVCdWlsZGVyOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW46OlVzZXJfYWdlbnQgJiYgbV9v
cmlnaW4gIT0gVHlwZUJ1aWxkZXI6OkNTUzo6U3R5bGVTaGVldE9yaWdpbjo6VXNlcjsgfQotICAg
IEluc3BlY3RvckNTU0lkIHJ1bGVPclN0eWxlSWQoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUp
IGNvbnN0OworICAgIEluc3BlY3RvckNTU0lkIHJ1bGVPclN0eWxlSWQoQ1NTU3R5bGVEZWNsYXJh
dGlvbiopOwogICAgIHZpcnR1YWwgRG9jdW1lbnQqIG93bmVyRG9jdW1lbnQoKSBjb25zdDsKLSAg
ICB2aXJ0dWFsIFJlZlB0cjxDU1NSdWxlU291cmNlRGF0YT4gcnVsZVNvdXJjZURhdGFGb3IoQ1NT
U3R5bGVEZWNsYXJhdGlvbiogc3R5bGUpIGNvbnN0OwotICAgIHZpcnR1YWwgdW5zaWduZWQgcnVs
ZUluZGV4QnlTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9uKikgY29uc3Q7CisgICAgdmlydHVhbCBQ
YXNzUmVmUHRyPENTU1J1bGVTb3VyY2VEYXRhPiBydWxlU291cmNlRGF0YUZvcihDU1NTdHlsZURl
Y2xhcmF0aW9uKik7CisgICAgdmlydHVhbCBWZWN0b3I8aW50PiBydWxlUGF0aEJ5U3R5bGUoQ1NT
U3R5bGVEZWNsYXJhdGlvbiopOwogICAgIHZpcnR1YWwgYm9vbCBlbnN1cmVQYXJzZWREYXRhUmVh
ZHkoKTsKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SW5zcGVjdG9yU3R5bGU+IGluc3BlY3RvclN0
eWxlRm9ySWQoY29uc3QgSW5zcGVjdG9yQ1NTSWQmKTsKICAgICB2aXJ0dWFsIHZvaWQgcmVtZW1i
ZXJJbnNwZWN0b3JTdHlsZShSZWZQdHI8SW5zcGVjdG9yU3R5bGU+IGluc3BlY3RvclN0eWxlKTsK
QEAgLTIyNCwxNiArMzM3LDIxIEBAIHByb3RlY3RlZDoKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNs
YXNzIEluc3BlY3RvclN0eWxlOwogCi0gICAgc3RhdGljIHZvaWQgY29sbGVjdEZsYXRSdWxlcyhQ
YXNzUmVmUHRyPENTU1J1bGVMaXN0PiwgVmVjdG9yPENTU1N0eWxlUnVsZSo+KiByZXN1bHQpOwor
ICAgIHN0YXRpYyBJbnNwZWN0b3JDU1NJZCBmaW5kUnVsZUlkKENTU1J1bGUqLCBJbnNwZWN0b3JS
dWxlTGlzdCopOworICAgIHZvaWQgZmlsbFJ1bGVMaXN0KENTU1J1bGVMaXN0KiwgSW5zcGVjdG9y
UnVsZUxpc3QqLCBWZWN0b3I8aW50PiYpOwogICAgIGJvb2wgZW5zdXJlVGV4dCgpIGNvbnN0Owog
ICAgIGJvb2wgZW5zdXJlU291cmNlRGF0YSgpOwotICAgIHZvaWQgZW5zdXJlRmxhdFJ1bGVzKCkg
Y29uc3Q7CisgICAgdm9pZCBlbnN1cmVSdWxlVHJlZSgpOworICAgIEluc3BlY3RvclJ1bGVMaXN0
KiBydWxlVHJlZSgpIHsgZW5zdXJlUnVsZVRyZWUoKTsgcmV0dXJuICZtX3J1bGVzOyB9CisgICAg
UGFzc1JlZlB0cjxDU1NSdWxlU291cmNlRGF0YT4gcnVsZVNvdXJjZURhdGFGb3IoQ1NTUnVsZSop
OworICAgIGJvb2wgcnVsZVBhdGhCeVN0eWxlSW50ZXJuYWwoQ1NTU3R5bGVEZWNsYXJhdGlvbios
IEluc3BlY3RvclJ1bGVMaXN0KiwgVmVjdG9yPGludD4mKTsKKyAgICBTb3VyY2VSYW5nZSBleHRy
YWN0UnVsZVRleHRSYW5nZShDU1NTdHlsZVJ1bGUqLCBFeGNlcHRpb25Db2RlJik7CisgICAgdGVt
cGxhdGUgPGNsYXNzIFQ+IFNvdXJjZVJhbmdlIGRlbGV0ZVJ1bGVGcm9tUGFyZW50KFQqLCB1bnNp
Z25lZCBydWxlSW5kZXgsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICBib29sIHN0eWxlU2hlZXRUZXh0
V2l0aENoYW5nZWRTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9uKiwgY29uc3QgU3RyaW5nJiBuZXdT
dHlsZVRleHQsIFN0cmluZyogcmVzdWx0KTsKLSAgICB2b2lkIHJldmFsaWRhdGVTdHlsZShDU1NT
dHlsZURlY2xhcmF0aW9uKik7CiAgICAgYm9vbCBvcmlnaW5hbFN0eWxlU2hlZXRUZXh0KFN0cmlu
ZyogcmVzdWx0KSBjb25zdDsKICAgICBib29sIHJlc291cmNlU3R5bGVTaGVldFRleHQoU3RyaW5n
KiByZXN1bHQpIGNvbnN0OwogICAgIGJvb2wgaW5saW5lU3R5bGVTaGVldFRleHQoU3RyaW5nKiBy
ZXN1bHQpIGNvbnN0OwotICAgIFBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkFycmF5PFR5cGVCdWls
ZGVyOjpDU1M6OkNTU1J1bGU+ID4gYnVpbGRBcnJheUZvclJ1bGVMaXN0KENTU1J1bGVMaXN0Kik7
CisgICAgUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6QXJyYXk8VHlwZUJ1aWxkZXI6OkNTUzo6Q1NT
UnVsZT4gPiBidWlsZFRyZWVGb3JSdWxlTGlzdCgpOwogCiAgICAgSW5zcGVjdG9yUGFnZUFnZW50
KiBtX3BhZ2VBZ2VudDsKICAgICBTdHJpbmcgbV9pZDsKQEAgLTI0Myw3ICszNjEsNyBAQCBwcml2
YXRlOgogICAgIGJvb2wgbV9pc1JldmFsaWRhdGluZzsKICAgICBQYXJzZWRTdHlsZVNoZWV0KiBt
X3BhcnNlZFN0eWxlU2hlZXQ7CiAgICAgSW5zcGVjdG9yU3R5bGVNYXAgbV9pbnNwZWN0b3JTdHls
ZXM7Ci0gICAgbXV0YWJsZSBWZWN0b3I8Q1NTU3R5bGVSdWxlKj4gbV9mbGF0UnVsZXM7CisgICAg
bXV0YWJsZSBJbnNwZWN0b3JSdWxlTGlzdCBtX3J1bGVzOwogICAgIExpc3RlbmVyKiBtX2xpc3Rl
bmVyOwogfTsKIApAQCAtMjUzLDE0ICszNzEsMTQgQEAgcHVibGljOgogCiAgICAgdm9pZCBkaWRN
b2RpZnlFbGVtZW50QXR0cmlidXRlKCk7CiAgICAgdmlydHVhbCBib29sIGdldFRleHQoU3RyaW5n
KiByZXN1bHQpIGNvbnN0OwotICAgIHZpcnR1YWwgQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGVG
b3JJZChjb25zdCBJbnNwZWN0b3JDU1NJZCYgaWQpIGNvbnN0IHsgQVNTRVJUX1VOVVNFRChpZCwg
IWlkLm9yZGluYWwoKSk7IHJldHVybiBpbmxpbmVTdHlsZSgpOyB9CisgICAgdmlydHVhbCBDU1NT
dHlsZURlY2xhcmF0aW9uKiBzdHlsZUZvcklkKGNvbnN0IEluc3BlY3RvckNTU0lkJiBpZCkgY29u
c3QgeyBBU1NFUlRfVU5VU0VEKGlkLCAhaWQucGF0aEF0KDApKTsgcmV0dXJuIGlubGluZVN0eWxl
KCk7IH0KIAogcHJvdGVjdGVkOgogICAgIEluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHls
ZShJbnNwZWN0b3JQYWdlQWdlbnQqLCBjb25zdCBTdHJpbmcmIGlkLCBQYXNzUmVmUHRyPEVsZW1l
bnQ+LCBUeXBlQnVpbGRlcjo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luOjpFbnVtLCBMaXN0ZW5lciop
OwogCiAgICAgdmlydHVhbCBEb2N1bWVudCogb3duZXJEb2N1bWVudCgpIGNvbnN0OwotICAgIHZp
cnR1YWwgUmVmUHRyPENTU1J1bGVTb3VyY2VEYXRhPiBydWxlU291cmNlRGF0YUZvcihDU1NTdHls
ZURlY2xhcmF0aW9uKiBzdHlsZSkgY29uc3QgeyBBU1NFUlRfVU5VU0VEKHN0eWxlLCBzdHlsZSA9
PSBpbmxpbmVTdHlsZSgpKTsgcmV0dXJuIG1fcnVsZVNvdXJjZURhdGE7IH0KLSAgICB2aXJ0dWFs
IHVuc2lnbmVkIHJ1bGVJbmRleEJ5U3R5bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbiopIGNvbnN0IHsg
cmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q1NTUnVsZVNvdXJjZURhdGE+IHJ1
bGVTb3VyY2VEYXRhRm9yKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlKSB7IEFTU0VSVF9VTlVT
RUQoc3R5bGUsIHN0eWxlID09IGlubGluZVN0eWxlKCkpOyByZXR1cm4gbV9ydWxlU291cmNlRGF0
YTsgfQorICAgIHZpcnR1YWwgVmVjdG9yPGludD4gcnVsZVBhdGhCeVN0eWxlKENTU1N0eWxlRGVj
bGFyYXRpb24qKSB7IFZlY3RvcjxpbnQ+IHBhdGg7IHBhdGguYXBwZW5kKDApOyByZXR1cm4gcGF0
aDsgfQogICAgIHZpcnR1YWwgYm9vbCBlbnN1cmVQYXJzZWREYXRhUmVhZHkoKTsKICAgICB2aXJ0
dWFsIFBhc3NSZWZQdHI8SW5zcGVjdG9yU3R5bGU+IGluc3BlY3RvclN0eWxlRm9ySWQoY29uc3Qg
SW5zcGVjdG9yQ1NTSWQmKTsKICAgICB2aXJ0dWFsIHZvaWQgcmVtZW1iZXJJbnNwZWN0b3JTdHls
ZShSZWZQdHI8SW5zcGVjdG9yU3R5bGU+KSB7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvQXVkaXRSdWxlcy5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvQXVkaXRSdWxlcy5qcwppbmRleCBhNjQ1OWIyMDgxMDFjN2M4YTMxY2Nm
ODQ2Yjk0ZjIyNjBhMmNjMDA4Li5hNjZmZjRkNWIwNGViZTVmZGM0OTgyZWQ2NGEyNWEyMDlhZGU0
YTMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0F1ZGl0
UnVsZXMuanMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9BdWRpdFJ1
bGVzLmpzCkBAIC0zMTMsMTIgKzMxMywyNCBAQCBXZWJJbnNwZWN0b3IuQXVkaXRSdWxlcy5VbnVz
ZWRDc3NSdWxlLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIHZhciB0ZXN0ZWRTZWxlY3RvcnMg
PSB7fTsKICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3R5bGVTaGVldHMubGVuZ3Ro
OyArK2kpIHsKICAgICAgICAgICAgICAgICB2YXIgc3R5bGVTaGVldCA9IHN0eWxlU2hlZXRzW2ld
OwotICAgICAgICAgICAgICAgIGZvciAodmFyIGN1clJ1bGUgPSAwOyBjdXJSdWxlIDwgc3R5bGVT
aGVldC5ydWxlcy5sZW5ndGg7ICsrY3VyUnVsZSkgewotICAgICAgICAgICAgICAgICAgICB2YXIg
c2VsZWN0b3JUZXh0ID0gc3R5bGVTaGVldC5ydWxlc1tjdXJSdWxlXS5zZWxlY3RvclRleHQ7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmIChzZWxlY3RvclRleHQubWF0Y2gocHNldWRvU2VsZWN0b3JS
ZWdleHApIHx8IHRlc3RlZFNlbGVjdG9yc1tzZWxlY3RvclRleHRdKQotICAgICAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgIHNlbGVjdG9ycy5wdXNoKHNl
bGVjdG9yVGV4dCk7Ci0gICAgICAgICAgICAgICAgICAgIHRlc3RlZFNlbGVjdG9yc1tzZWxlY3Rv
clRleHRdID0gMTsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBjdXJSdWxlID0gMDsgY3VyUnVs
ZSA8IHN0eWxlU2hlZXQucnVsZXMubGVuZ3RoOyArK2N1clJ1bGUpCisgICAgICAgICAgICAgICAg
ICAgIHByb2Nlc3NSdWxlKHN0eWxlU2hlZXQucnVsZXNbY3VyUnVsZV0pOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBmdW5jdGlvbiBwcm9jZXNzUnVsZShydWxlKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIGlmIChydWxlLnR5cGUgPT09ICJzdHlsZSIpIHsKKyAgICAgICAg
ICAgICAgICAgICAgdmFyIHNlbGVjdG9yVGV4dCA9IHJ1bGUuc2VsZWN0b3JUZXh0OworICAgICAg
ICAgICAgICAgICAgICBpZiAoIXNlbGVjdG9yVGV4dC5tYXRjaChwc2V1ZG9TZWxlY3RvclJlZ2V4
cCkgJiYgIXRlc3RlZFNlbGVjdG9yc1tzZWxlY3RvclRleHRdKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBzZWxlY3RvcnMucHVzaChzZWxlY3RvclRleHQpOworICAgICAgICAgICAgICAgICAg
ICAgICAgdGVzdGVkU2VsZWN0b3JzW3NlbGVjdG9yVGV4dF0gPSAxOworICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICAgICBpZiAocnVsZS5jaGlsZFJ1bGVzKSB7CisgICAgICAgICAgICAgICAg
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcnVsZS5jaGlsZFJ1bGVzLmxlbmd0aDsgKytpKQorICAg
ICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc1J1bGUocnVsZS5jaGlsZFJ1bGVzW2ldKTsKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKQEAgLTMzMiwxNSArMzQ0LDI3IEBAIFdl
Ykluc3BlY3Rvci5BdWRpdFJ1bGVzLlVudXNlZENzc1J1bGUucHJvdG90eXBlID0gewogICAgICAg
ICAgICAgICAgIHZhciB0b3RhbFVudXNlZFN0eWxlc2hlZXRTaXplID0gMDsKICAgICAgICAgICAg
ICAgICB2YXIgc3VtbWFyeTsKIAotICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
c3R5bGVTaGVldHMubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIHN0eWxl
U2hlZXQgPSBzdHlsZVNoZWV0c1tpXTsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBzaGVldENv
dW50ID0gMDsgc2hlZXRDb3VudCA8IHN0eWxlU2hlZXRzLmxlbmd0aDsgKytzaGVldENvdW50KSB7
CisgICAgICAgICAgICAgICAgICAgIHZhciBzdHlsZVNoZWV0ID0gc3R5bGVTaGVldHNbc2hlZXRD
b3VudF07CiAgICAgICAgICAgICAgICAgICAgIHZhciBzdHlsZXNoZWV0U2l6ZSA9IDA7CiAgICAg
ICAgICAgICAgICAgICAgIHZhciB1bnVzZWRTdHlsZXNoZWV0U2l6ZSA9IDA7CiAgICAgICAgICAg
ICAgICAgICAgIHZhciB1bnVzZWRSdWxlcyA9IFtdOwotICAgICAgICAgICAgICAgICAgICBmb3Ig
KHZhciBjdXJSdWxlID0gMDsgY3VyUnVsZSA8IHN0eWxlU2hlZXQucnVsZXMubGVuZ3RoOyArK2N1
clJ1bGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciBydWxlID0gc3R5bGVTaGVldC5y
dWxlc1tjdXJSdWxlXTsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGZyb250ID0gW107CisgICAg
ICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3R5bGVTaGVldC5ydWxlcy5sZW5n
dGg7ICsraSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGZyb250LnB1c2goc3R5bGVTaGVldC5y
dWxlc1tpXSk7CisKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGZyb250Lmxlbmd0aCkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJ1bGUgPSBmcm9udC5zaGlmdCgpOworICAgICAg
ICAgICAgICAgICAgICAgICAgdmFyIHJ1bGVzID0gcnVsZS5jaGlsZFJ1bGVzOworICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKHJ1bGVzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Zm9yICh2YXIgaSA9IHJ1bGVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmcm9udC51bnNoaWZ0KHJ1bGVzW2ldKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChydWxlLnR5cGUgIT09
ICJzdHlsZSIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisKICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIEV4YWN0IGNvbXB1dGF0aW9uIHdoZW5ldmVyIHNvdXJjZSBy
YW5nZXMgYXJlIGF2YWlsYWJsZS4KLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ZXh0TGVu
Z3RoID0gKHJ1bGUuc2VsZWN0b3JSYW5nZSAmJiBydWxlLnN0eWxlLnJhbmdlICYmIHJ1bGUuc3R5
bGUucmFuZ2UuZW5kKSA/IHJ1bGUuc3R5bGUucmFuZ2UuZW5kIC0gcnVsZS5zZWxlY3RvclJhbmdl
LnN0YXJ0ICsgMSA6IDA7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGV4dExlbmd0aCA9
IChydWxlLmhlYWRlclJhbmdlICYmIHJ1bGUuYm9keVJhbmdlICYmIHJ1bGUuYm9keVJhbmdlLmVu
ZCkgPyBydWxlLmJvZHlSYW5nZS5lbmQgLSBydWxlLmhlYWRlclJhbmdlLnN0YXJ0ICsgMSA6IDA7
CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRleHRMZW5ndGggJiYgcnVsZS5zdHlsZS5j
c3NUZXh0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRMZW5ndGggPSBydWxlLnN0
eWxlLmNzc1RleHQubGVuZ3RoICsgcnVsZS5zZWxlY3RvclRleHQubGVuZ3RoOwogICAgICAgICAg
ICAgICAgICAgICAgICAgc3R5bGVzaGVldFNpemUgKz0gdGV4dExlbmd0aDsKQEAgLTM0OSw2ICsz
NzMsNyBAQCBXZWJJbnNwZWN0b3IuQXVkaXRSdWxlcy5VbnVzZWRDc3NSdWxlLnByb3RvdHlwZSA9
IHsKICAgICAgICAgICAgICAgICAgICAgICAgIHVudXNlZFN0eWxlc2hlZXRTaXplICs9IHRleHRM
ZW5ndGg7CiAgICAgICAgICAgICAgICAgICAgICAgICB1bnVzZWRSdWxlcy5wdXNoKHJ1bGUuc2Vs
ZWN0b3JUZXh0KTsKICAgICAgICAgICAgICAgICAgICAgfQorCiAgICAgICAgICAgICAgICAgICAg
IHRvdGFsU3R5bGVzaGVldFNpemUgKz0gc3R5bGVzaGVldFNpemU7CiAgICAgICAgICAgICAgICAg
ICAgIHRvdGFsVW51c2VkU3R5bGVzaGVldFNpemUgKz0gdW51c2VkU3R5bGVzaGVldFNpemU7CiAK
QEAgLTEwMzYsMTEgKzEwNjEsMTggQEAgV2ViSW5zcGVjdG9yLkF1ZGl0UnVsZXMuQ1NTUnVsZUJh
c2UucHJvdG90eXBlID0gewogCiAgICAgX3Zpc2l0UnVsZTogZnVuY3Rpb24oc3R5bGVTaGVldCwg
cnVsZSwgcmVzdWx0KQogICAgIHsKLSAgICAgICAgdGhpcy52aXNpdFJ1bGUoc3R5bGVTaGVldCwg
cnVsZSwgcmVzdWx0KTsKLSAgICAgICAgdmFyIGFsbFByb3BlcnRpZXMgPSBydWxlLnN0eWxlLmFs
bFByb3BlcnRpZXM7Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYWxsUHJvcGVydGllcy5s
ZW5ndGg7ICsraSkKLSAgICAgICAgICAgIHRoaXMudmlzaXRQcm9wZXJ0eShzdHlsZVNoZWV0LCBh
bGxQcm9wZXJ0aWVzW2ldLCByZXN1bHQpOwotICAgICAgICB0aGlzLmRpZFZpc2l0UnVsZShzdHls
ZVNoZWV0LCBydWxlLCByZXN1bHQpOworICAgICAgICBpZiAocnVsZS50eXBlID09PSAic3R5bGUi
KSB7CisgICAgICAgICAgICB0aGlzLnZpc2l0UnVsZShzdHlsZVNoZWV0LCBydWxlLCByZXN1bHQp
OworICAgICAgICAgICAgdmFyIGFsbFByb3BlcnRpZXMgPSBydWxlLnN0eWxlLmFsbFByb3BlcnRp
ZXM7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFsbFByb3BlcnRpZXMubGVuZ3Ro
OyArK2kpCisgICAgICAgICAgICAgICAgdGhpcy52aXNpdFByb3BlcnR5KHN0eWxlU2hlZXQsIGFs
bFByb3BlcnRpZXNbaV0sIHJlc3VsdCk7CisgICAgICAgICAgICB0aGlzLmRpZFZpc2l0UnVsZShz
dHlsZVNoZWV0LCBydWxlLCByZXN1bHQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisgICAgICAgIGlmIChydWxlLmNoaWxkUnVsZXMpIHsKKyAgICAgICAgICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgcnVsZS5jaGlsZFJ1bGVzLmxlbmd0aDsgKytpKQorICAgICAgICAgICAgICAgIHRo
aXMuX3Zpc2l0UnVsZShzdHlsZVNoZWV0LCBydWxlLmNoaWxkUnVsZXNbaV0sIHJlc3VsdCk7Cisg
ICAgICAgIH0KICAgICB9LAogCiAgICAgdmlzaXRTdHlsZVNoZWV0OiBmdW5jdGlvbihzdHlsZVNo
ZWV0LCByZXN1bHQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL0NTU1N0eWxlTW9kZWwuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L0NTU1N0eWxlTW9kZWwuanMKaW5kZXggNjdjMGIwMDFhMjg4ZDE4ZmZiMmZlMWMwNDcwMzg5MGZm
MDY3Mjk5My4uYzYyMGFhMGRmZWFjMDQ1NThlYzkxMDBjYjljOTU1N2JjYTQyZjJlMSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9DU1NTdHlsZU1vZGVsLmpz
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ1NTU3R5bGVNb2RlbC5q
cwpAQCAtNTc5LDE2ICs1NzksMjUgQEAgV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb24u
cHJvdG90eXBlID0gewogICovCiBXZWJJbnNwZWN0b3IuQ1NTUnVsZSA9IGZ1bmN0aW9uKHBheWxv
YWQpCiB7CisgICAgdGhpcy50eXBlID0gcGF5bG9hZC50eXBlIHx8ICJzdHlsZSI7CiAgICAgdGhp
cy5pZCA9IHBheWxvYWQucnVsZUlkOwogICAgIHRoaXMuc2VsZWN0b3JUZXh0ID0gcGF5bG9hZC5z
ZWxlY3RvclRleHQ7CiAgICAgdGhpcy5zb3VyY2VMaW5lID0gcGF5bG9hZC5zb3VyY2VMaW5lOwog
ICAgIHRoaXMuc291cmNlVVJMID0gcGF5bG9hZC5zb3VyY2VVUkw7CiAgICAgdGhpcy5vcmlnaW4g
PSBwYXlsb2FkLm9yaWdpbjsKLSAgICB0aGlzLnN0eWxlID0gV2ViSW5zcGVjdG9yLkNTU1N0eWxl
RGVjbGFyYXRpb24ucGFyc2VQYXlsb2FkKHBheWxvYWQuc3R5bGUpOwotICAgIHRoaXMuc3R5bGUu
cGFyZW50UnVsZSA9IHRoaXM7Ci0gICAgdGhpcy5zZWxlY3RvclJhbmdlID0gcGF5bG9hZC5zZWxl
Y3RvclJhbmdlOworICAgIGlmIChwYXlsb2FkLnN0eWxlKSB7CisgICAgICAgIHRoaXMuc3R5bGUg
PSBXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvbi5wYXJzZVBheWxvYWQocGF5bG9hZC5z
dHlsZSk7CisgICAgICAgIHRoaXMuc3R5bGUucGFyZW50UnVsZSA9IHRoaXM7CisgICAgfQorICAg
IHRoaXMuaGVhZGVyUmFuZ2UgPSBwYXlsb2FkLmhlYWRlclJhbmdlOworICAgIHRoaXMuYm9keVJh
bmdlID0gcGF5bG9hZC5ib2R5UmFuZ2U7CiAgICAgaWYgKHBheWxvYWQubWVkaWEpCiAgICAgICAg
IHRoaXMubWVkaWEgPSBXZWJJbnNwZWN0b3IuQ1NTTWVkaWEucGFyc2VNZWRpYUFycmF5UGF5bG9h
ZChwYXlsb2FkLm1lZGlhKTsKKworICAgIGlmIChwYXlsb2FkLm1lZGlhVGV4dCkKKyAgICAgICAg
dGhpcy5tZWRpYVRleHQgPSBwYXlsb2FkLm1lZGlhVGV4dDsKKyAgICBpZiAocGF5bG9hZC5jaGls
ZFJ1bGVzKQorICAgICAgICB0aGlzLmNoaWxkUnVsZXMgPSBXZWJJbnNwZWN0b3IuQ1NTU3R5bGVN
b2RlbC5wYXJzZVJ1bGVBcnJheVBheWxvYWQocGF5bG9hZC5jaGlsZFJ1bGVzKTsKIH0KIAogLyoq
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKaW5kZXggMGQ4MDdjZDk3NDgyZTdiYjAwYmNhODFjMGExZDFiOTUzYWUxYmM0Yi4uYzJkMzcw
M2RmMDkzODU1ODNmZmY3MWU4MTczN2E3ZDkzOWJlYzI0ZSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDIzIEBA
CiAyMDEyLTA2LTI5ICBBbGV4YW5kZXIgUGF2bG92ICA8YXBhdmxvdkBjaHJvbWl1bS5vcmc+CiAK
KyAgICAgICAgV2ViIEluc3BlY3RvcjogRXhwb3NlIHRoZSBDU1MgcnVsZSBoaWVyYXJjaHkgdGhy
b3VnaCB0aGUgV2ViIEluc3BlY3RvciBwcm90b2NvbAorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTAyODAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIGluc3BlY3Rvci9zdHlsZXMvZWRpdC1pbnNwZWN0b3It
c3R5bGVzaGVldC1leHBlY3RlZC50eHQ6CisgICAgICAgICogaW5zcGVjdG9yL3N0eWxlcy9lZGl0
LWluc3BlY3Rvci1zdHlsZXNoZWV0Lmh0bWw6CisgICAgICAgICogaW5zcGVjdG9yL3N0eWxlcy9y
ZXNvdXJjZXMvc3R5bGVzLW5ldy1BUEkuY3NzOgorICAgICAgICAoQC13ZWJraXQta2V5ZnJhbWVz
IHZhbmlzaCk6CisgICAgICAgICgxMDAlKToKKyAgICAgICAgKEBtZWRpYSBzY3JlZW4pOgorICAg
ICAgICAqIGluc3BlY3Rvci9zdHlsZXMvc3R5bGVzLW5ldy1BUEktZXhwZWN0ZWQudHh0OgorICAg
ICAgICAqIGluc3BlY3Rvci9zdHlsZXMvc3R5bGVzLW5ldy1BUEkuaHRtbDoKKyAgICAgICAgKiBp
bnNwZWN0b3Ivc3R5bGVzL3N0eWxlcy1zb3VyY2Utb2Zmc2V0cy5odG1sOgorICAgICAgICAqIGlu
c3BlY3Rvci9zdHlsZXMvdW5kby1hZGQtbmV3LXJ1bGUtZXhwZWN0ZWQudHh0OgorCisyMDEyLTA2
LTI5ICBBbGV4YW5kZXIgUGF2bG92ICA8YXBhdmxvdkBjaHJvbWl1bS5vcmc+CisKICAgICAgICAg
V2ViIEluc3BlY3RvcjogW0RldmljZSBNZXRyaWNzXSAiRml0IHdpbmRvdyIgb3B0aW9uIGluaGli
aXRzIGFkanVzdGluZyB0aGUgcGFnZSB6b29tIGZhY3RvcgogICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTAxODcKIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvaW5zcGVjdG9yL3N0eWxlcy9lZGl0LWluc3BlY3Rvci1zdHlsZXNoZWV0LWV4cGVjdGVkLnR4
dCBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9zdHlsZXMvZWRpdC1pbnNwZWN0b3Itc3R5bGVzaGVl
dC1leHBlY3RlZC50eHQKaW5kZXggNTRjNmJkN2NlMDZjMjQ0ODZmZGQzZWU4MmRhYzZhN2ZmNjUz
ZDdmMi4uYzcyOGUwZWVjZDZjZTM3MTFmNDk5ZmZhNTE1YzU0OGQwNzNiNzU1OSAxMDA2NDQKLS0t
IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3N0eWxlcy9lZGl0LWluc3BlY3Rvci1zdHlsZXNoZWV0
LWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3Ivc3R5bGVzL2VkaXQtaW5z
cGVjdG9yLXN0eWxlc2hlZXQtZXhwZWN0ZWQudHh0CkBAIC00LDcgKzQsNiBAQCBUZXh0CiBJbnNw
ZWN0b3Igc3R5bGVzaGVldCBVUkw6IGluc3BlY3Rvci1zdHlsZXNoZWV0CiBJbnNwZWN0b3Igc3R5
bGVzaGVldCBjb250ZW50OgogI2luc3BlY3RlZCB7fQotCiBTZXR0aW5nIG5ldyBjb250ZW50CiBJ
bnNwZWN0b3Igc3R5bGVzaGVldCBjb250ZW50OgogI2luc3BlY3RlZCB7IGJhY2tncm91bmQtY29s
b3I6IGdyZWVuOyB9CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3Ivc3R5bGVzL2Vk
aXQtaW5zcGVjdG9yLXN0eWxlc2hlZXQuaHRtbCBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9zdHls
ZXMvZWRpdC1pbnNwZWN0b3Itc3R5bGVzaGVldC5odG1sCmluZGV4IDk1MjA1NGE1YmY1ZWQxNzRm
NjJlM2ZlOWU1NmNmNDkyOGJmYjI0Y2IuLmQ1YTRhNzE5NzViYzJhMWZkMzA2ZWNkNGI0NDcyNmVk
ZWE5M2VlYjYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9zdHlsZXMvZWRpdC1p
bnNwZWN0b3Itc3R5bGVzaGVldC5odG1sCisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9zdHls
ZXMvZWRpdC1pbnNwZWN0b3Itc3R5bGVzaGVldC5odG1sCkBAIC0zNiw3ICszNiw3IEBAIGZ1bmN0
aW9uIHRlc3QoKQogICAgICAgICBJbnNwZWN0b3JUZXN0LmFkZFJlc3VsdCgiSW5zcGVjdG9yIHN0
eWxlc2hlZXQgVVJMOiAiICsgc3R5bGVTb3VyY2UucGFyc2VkVVJMLmRpc3BsYXlOYW1lKTsKICAg
ICAgICAgc3R5bGVTb3VyY2UucmVxdWVzdENvbnRlbnQocHJpbnRDb250ZW50KCkpOwogCi0gICAg
ICAgIEluc3BlY3RvclRlc3QuYWRkUmVzdWx0KCJcblNldHRpbmcgbmV3IGNvbnRlbnQiKTsKKyAg
ICAgICAgSW5zcGVjdG9yVGVzdC5hZGRSZXN1bHQoIlNldHRpbmcgbmV3IGNvbnRlbnQiKTsKICAg
ICAgICAgc3R5bGVTb3VyY2Uuc2V0V29ya2luZ0NvcHkoIiNpbnNwZWN0ZWQgeyBiYWNrZ3JvdW5k
LWNvbG9yOiBncmVlbjsgfSIpOwogICAgICAgICBzdHlsZVNvdXJjZS5jb21taXRXb3JraW5nQ29w
eShzdGVwMy5iaW5kKHRoaXMsIHN0eWxlU291cmNlKSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvaW5zcGVjdG9yL3N0eWxlcy9yZXNvdXJjZXMvc3R5bGVzLW5ldy1BUEkuY3NzIGIv
TGF5b3V0VGVzdHMvaW5zcGVjdG9yL3N0eWxlcy9yZXNvdXJjZXMvc3R5bGVzLW5ldy1BUEkuY3Nz
CmluZGV4IGIwMWQxMDI2NmQyNWEwZjRjMjZjNTIwY2QwNzRhZWQ2OGVjMjkwOTEuLjU0ZTgzNzBj
NjQwZTMyMmQ2ZDY5OTA1YmUwZThjMmE2N2I0ODExNjQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L2luc3BlY3Rvci9zdHlsZXMvcmVzb3VyY2VzL3N0eWxlcy1uZXctQVBJLmNzcworKysgYi9MYXlv
dXRUZXN0cy9pbnNwZWN0b3Ivc3R5bGVzL3Jlc291cmNlcy9zdHlsZXMtbmV3LUFQSS5jc3MKQEAg
LTYsNyArNiwxOCBAQCBodG1sIHsKICAgICBmb250LXdlaWdodDogNDAwOwogfQogCitALXdlYmtp
dC1rZXlmcmFtZXMgdmFuaXNoIHsKKyAgMCUgICB7IG9wYWNpdHk6IDE7IH0KKyAgMTAwJSB7IG9w
YWNpdHk6IDA7IH0KK30KKwogQG1lZGlhIHNjcmVlbiB7CisKK0Atd2Via2l0LWtleWZyYW1lcyAg
YXBwZWFyICB7CisgIDAlICAgeyBvcGFjaXR5OiAwOyB9CisgIDEwMCUgeyBvcGFjaXR5OiAxOyB9
Cit9CisKIGJvZHkgewogICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICBmb286IGJhciAhCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3Ivc3R5bGVzL3N0eWxlcy1uZXctQVBJLWV4cGVj
dGVkLnR4dCBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9zdHlsZXMvc3R5bGVzLW5ldy1BUEktZXhw
ZWN0ZWQudHh0CmluZGV4IDQ0ZDczYTRiMDcwNTViMDkwZDNmZDE3YWU0MTAyYWUzZDFhODhiNjYu
LmYzOWZhZWVkNDNhYTgxN2E0ZTI3MjhlYjQ3NzY0NTcyYzg3NmYxMDcgMTAwNjQ0Ci0tLSBhL0xh
eW91dFRlc3RzL2luc3BlY3Rvci9zdHlsZXMvc3R5bGVzLW5ldy1BUEktZXhwZWN0ZWQudHh0Cisr
KyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9zdHlsZXMvc3R5bGVzLW5ldy1BUEktZXhwZWN0ZWQu
dHh0CkBAIC03LDIwICs3LDIwIEBAIEgxCiBPSwogCiA9PT0gTWF0Y2hlZCBydWxlcyBmb3IgYm9k
eSA9PT0KLWJvZHk6IFt1c2VyLWFnZW50XSB7Citib2R5OiBbdXNlci1hZ2VudF0geyBbbm8gaGVh
ZGVyL2JvZHkgcmFuZ2VzXQogICAgIFsnZGlzcGxheSc6J2Jsb2NrJ10gQFt1bmRlZmluZWQtdW5k
ZWZpbmVkXSBzdHlsZQogICAgIFsnbWFyZ2luLXRvcCc6JzhweCddIEBbdW5kZWZpbmVkLXVuZGVm
aW5lZF0gc3R5bGUKICAgICBbJ21hcmdpbi1yaWdodCc6JzhweCddIEBbdW5kZWZpbmVkLXVuZGVm
aW5lZF0gc3R5bGUKICAgICBbJ21hcmdpbi1ib3R0b20nOic4cHgnXSBAW3VuZGVmaW5lZC11bmRl
ZmluZWRdIHN0eWxlCiAgICAgWydtYXJnaW4tbGVmdCc6JzhweCddIEBbdW5kZWZpbmVkLXVuZGVm
aW5lZF0gc3R5bGUKIH0KLWJvZHk6IFtyZWd1bGFyXSB7Citib2R5OiBbcmVndWxhcl0geyBoZWFk
ZXI9WzMxNi0zMjBdLCBib2R5PVszMjItMzcxXQogICAgIFsncHJvcGVydHknOidpbXBvcnRlZC1t
ZWRpYS1zY3JlZW4tc3R5bGVzaGVldCcgbm9uLXBhcnNlZF0gQFs1LTQ4XSBhY3RpdmUKIH0KLWJv
ZHk6IFtyZWd1bGFyXSB7Citib2R5OiBbcmVndWxhcl0geyBoZWFkZXI9WzMxNi0zMjBdLCBib2R5
PVszMjItMzcxXQogICAgIFsncHJvcGVydHknOidpbXBvcnRlZC1tZWRpYS1zY3JlZW4tc3R5bGVz
aGVldCcgbm9uLXBhcnNlZF0gQFs1LTQ4XSBhY3RpdmUKIH0KLWJvZHk6IFtyZWd1bGFyXSB7Citi
b2R5OiBbcmVndWxhcl0geyBoZWFkZXI9WzI2Mi0yNjZdLCBib2R5PVsyNjgtNTQ3XQogICAgIFsn
Zm9udC1zaXplJzonMTJweCddIEBbNS0yMV0gYWN0aXZlCiAgICAgWydmb28nOidiYXIgIQogCkBA
IC0zMSwxMSArMzEsMTEgQEAgYm9keTogW3JlZ3VsYXJdIHsKICAgICBbJ2NvbG9yJzoneWVsbG93
J10gQFsxOTAtMjA0XSBhY3RpdmUKICAgICBbJ2NvbG9yJzonImJhZGNvbG9yIiAhIGltcG9ydGFu
dCAvKiBnb29kIHByb3BlcnR5IHdpdGggc3RyYW5nZSB2YWx1ZSAqLycgaXMtaW1wb3J0YW50IG5v
bi1wYXJzZWRdIEBbMjA5LTI3OF0gYWN0aXZlCiB9Ci1ib2R5Lm1haW4xOiBbcmVndWxhcl0gewor
Ym9keS5tYWluMTogW3JlZ3VsYXJdIHsgaGVhZGVyPVs1NzktNjE3XSwgYm9keT1bNjE4LTY5OV0K
ICAgICBbJ2NvbG9yJzonI0YwMEJBQSddIEBbMTMtMjhdIGFjdGl2ZQogICAgIFsnem9vJzonbW9v
IC8qIG5vdCBhbiAhaW1wb3J0YW50IHVucmVjb2duaXplZCBwcm9wZXJ0eSAqLycgbm9uLXBhcnNl
ZF0gQFsyOC04MV0gYWN0aXZlCiB9Ci1ib2R5Lm1haW4yOiBbcmVndWxhcl0geworYm9keS5tYWlu
MjogW3JlZ3VsYXJdIHsgaGVhZGVyPVs3MTUtNzI1XSwgYm9keT1bNzI2LTgyMV0KICAgICBbJ2Jh
Y2tncm91bmQnOidncmVlbiAvKiB2YWx1ZSAhaW1wb3J0YW50IGNvbW1lbnQgKi8gIWltcG9ydGFu
dCAvKiBubyBzZW1pY29sb24sIHZlcnkgIWltcG9ydGFudCAqLycgaXMtaW1wb3J0YW50XSBAWzAt
OTVdIGFjdGl2ZQogICAgIFsnYmFja2dyb3VuZC1pbWFnZSc6J2luaXRpYWwnIGlzLWltcG9ydGFu
dF0gQFt1bmRlZmluZWQtdW5kZWZpbmVkXSBzdHlsZQogICAgIFsnYmFja2dyb3VuZC1yZXBlYXQt
eCc6J2luaXRpYWwnIGlzLWltcG9ydGFudF0gQFt1bmRlZmluZWQtdW5kZWZpbmVkXSBzdHlsZQpA
QCAtNDgsMjggKzQ4LDI4IEBAIGJvZHkubWFpbjI6IFtyZWd1bGFyXSB7CiAgICAgWydiYWNrZ3Jv
dW5kLWNvbG9yJzonZ3JlZW4nIGlzLWltcG9ydGFudF0gQFt1bmRlZmluZWQtdW5kZWZpbmVkXSBz
dHlsZQogICAgIFsnYmFja2dyb3VuZC1zaXplJzonaW5pdGlhbCcgaXMtaW1wb3J0YW50XSBAW3Vu
ZGVmaW5lZC11bmRlZmluZWRdIHN0eWxlCiB9Ci1ib2R5Lm1haW5wYWdlOiBbcmVndWxhcl0gewor
Ym9keS5tYWlucGFnZTogW3JlZ3VsYXJdIHsgaGVhZGVyPVsyOS00Ml0sIGJvZHk9WzQ0LTE3N10K
ICAgICBbJ3RleHQtZGVjb3JhdGlvbic6J25vbmUnXSBAWzUtMjddIGFjdGl2ZQogICAgIFsnYmFk
cHJvcGVydHknOicxYmFkdmFsdWUxJyBub24tcGFyc2VkXSBAWzEwOC0xMzJdIGFjdGl2ZQogfQot
Ym9keS5tYWlucGFnZTogW3JlZ3VsYXJdIHsKK2JvZHkubWFpbnBhZ2U6IFtyZWd1bGFyXSB7IGhl
YWRlcj1bMTgwLTE5M10sIGJvZHk9WzE5NS0yMzBdCiAgICAgWydwcm9wMSc6J3ZhbDEnIG5vbi1w
YXJzZWRdIEBbNS0xN10gYWN0aXZlCiAgICAgWydwcm9wMic6J3ZhbDInIG5vbi1wYXJzZWRdIEBb
MjItMzRdIGFjdGl2ZQogfQogCiA9PT0gUHNldWRvIHJ1bGVzIGZvciBib2R5ID09PQogUHNldWRv
SWQ9NAotYm9keTo6YWZ0ZXI6IFtyZWd1bGFyXSB7Citib2R5OjphZnRlcjogW3JlZ3VsYXJdIHsg
aGVhZGVyPVs4MjYtODM3XSwgYm9keT1bODQwLTg2OF0KICAgICBbJ2NvbnRlbnQnOiciQWZ0ZXIg
Ym9keSInXSBAWzUtMjddIGFjdGl2ZQogfQogCiA9PT0gSW5oZXJpdGVkIHN0eWxlcyBmb3IgYm9k
eSA9PT0KIExldmVsPTEKIFtOTyBTVFlMRV0KLWh0bWw6IFt1c2VyLWFnZW50XSB7CitodG1sOiBb
dXNlci1hZ2VudF0geyBbbm8gaGVhZGVyL2JvZHkgcmFuZ2VzXQogICAgIFsnZGlzcGxheSc6J2Js
b2NrJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXSBzdHlsZQogfQotaHRtbDogW3JlZ3VsYXJdIHsK
K2h0bWw6IFtyZWd1bGFyXSB7IGhlYWRlcj1bNTctNjFdLCBib2R5PVs2My04Nl0KICAgICBbJ2Zv
bnQtd2VpZ2h0JzonNDAwJ10gQFs1LTIyXSBhY3RpdmUKIH0KIApAQCAtOTEsNyArOTEsMTggQEAg
aHRtbCB7CiAgICAgZm9udC13ZWlnaHQ6IDQwMDsKIH0KIAorQC13ZWJraXQta2V5ZnJhbWVzIHZh
bmlzaCB7CisgIDAlICAgeyBvcGFjaXR5OiAxOyB9CisgIDEwMCUgeyBvcGFjaXR5OiAwOyB9Cit9
CisKIEBtZWRpYSBzY3JlZW4geworCitALXdlYmtpdC1rZXlmcmFtZXMgIGFwcGVhciAgeworICAw
JSAgIHsgb3BhY2l0eTogMDsgfQorICAxMDAlIHsgb3BhY2l0eTogMTsgfQorfQorCiBib2R5IHsK
ICAgICBmb250LXNpemU6IDEycHg7CiAgICAgZm9vOiBiYXIgIQpAQCAtMTE3LDQxICsxMjgsNDcg
QEAgaDEgewogICAgIGhlaWdodCA6IDEwMCUgOyBib3JkZXI6IDFweCBzb2xpZDsgYm9yZGVyLXdp
ZHRoOiAycHg7IGJhY2tncm91bmQtY29sb3IgOiAjMzNGRjMzOyBnb29nbGVzOiBhYnJhOyBmb286
IC5iYXI7IC1tb3otZ29vZzogMSoqKjsgYm9yZGVyLXdpZHRoOiAwcHg7CiB9CiAnCi1odG1sOiBb
cmVndWxhcl0geworQGNoYXJzZXQKK0BpbXBvcnQgOiBoZWFkZXI9WzE5LTI2XSwgYm9keT1bMjct
NTRdCitodG1sOiBbcmVndWxhcl0geyBoZWFkZXI9WzU3LTYxXSwgYm9keT1bNjMtODZdCiAgICAg
Wydmb250LXdlaWdodCc6JzQwMCddIEBbNS0yMl0gYWN0aXZlCiB9Ci1ib2R5OiBbcmVndWxhcl0g
ewotICAgIFsnZm9udC1zaXplJzonMTJweCddIEBbNS0yMV0gYWN0aXZlCi0gICAgWydmb28nOidi
YXIgIQorQGtleWZyYW1lcyB2YW5pc2g6IGhlYWRlcj1bODktMTE0XSwgYm9keT1bMTE2LTE2M10K
K0BtZWRpYSBzY3JlZW4geyBoZWFkZXI9WzE2Ni0xNzldLCBib2R5PVsxODEtODIzXQorICAgIEBr
ZXlmcmFtZXMgYXBwZWFyOiBoZWFkZXI9WzE4My0yMDldLCBib2R5PVsyMTItMjU5XQorICAgIGJv
ZHk6IFtyZWd1bGFyXSB7IGhlYWRlcj1bMjYyLTI2Nl0sIGJvZHk9WzI2OC01NDddCisgICAgICAg
IFsnZm9udC1zaXplJzonMTJweCddIEBbNS0yMV0gYWN0aXZlCisgICAgICAgIFsnZm9vJzonYmFy
ICEKIAogICAgIGltcG9ydGFudCAvKiAhaW1wb3J0YW50IHByb3BlcnR5IG5vdCByZWNvZ25pemVk
IGJ5IFdlYkNvcmUgKi8nIGlzLWltcG9ydGFudCBub24tcGFyc2VkXSBAWzI2LTEwNF0gYWN0aXZl
Ci0gICAgWydoZWlnaHQnOicxMDAlICFpbXBvcnRhbnQnIGlzLWltcG9ydGFudF0gQFsxMDktMTMz
XSBhY3RpdmUKLSAgICBbJ2NvbG9yeic6JyIhaW1wb3J0YW50Iicgbm9uLXBhcnNlZF0gQFsxMzgt
MTU5XSBhY3RpdmUKLSAgICBbJ2ltcG9ydGFudCc6JyFpbXBvcnRhbnQnIG5vbi1wYXJzZWRdIEBb
MTY0LTE4NV0gYWN0aXZlCi0gICAgWydjb2xvcic6J3llbGxvdyddIEBbMTkwLTIwNF0gYWN0aXZl
Ci0gICAgWydjb2xvcic6JyJiYWRjb2xvciIgISBpbXBvcnRhbnQgLyogZ29vZCBwcm9wZXJ0eSB3
aXRoIHN0cmFuZ2UgdmFsdWUgKi8nIGlzLWltcG9ydGFudCBub24tcGFyc2VkXSBAWzIwOS0yNzhd
IGFjdGl2ZQotfQotYm9keS5tYWluMTogW3JlZ3VsYXJdIHsKLSAgICBbJ2NvbG9yJzonI0YwMEJB
QSddIEBbMTMtMjhdIGFjdGl2ZQotICAgIFsnem9vJzonbW9vIC8qIG5vdCBhbiAhaW1wb3J0YW50
IHVucmVjb2duaXplZCBwcm9wZXJ0eSAqLycgbm9uLXBhcnNlZF0gQFsyOC04MV0gYWN0aXZlCi19
Ci1ib2R5Lm1haW4yOiBbcmVndWxhcl0gewotICAgIFsnYmFja2dyb3VuZCc6J2dyZWVuIC8qIHZh
bHVlICFpbXBvcnRhbnQgY29tbWVudCAqLyAhaW1wb3J0YW50IC8qIG5vIHNlbWljb2xvbiwgdmVy
eSAhaW1wb3J0YW50ICovJyBpcy1pbXBvcnRhbnRdIEBbMC05NV0gYWN0aXZlCi0gICAgWydiYWNr
Z3JvdW5kLWltYWdlJzonaW5pdGlhbCcgaXMtaW1wb3J0YW50XSBAW3VuZGVmaW5lZC11bmRlZmlu
ZWRdIHN0eWxlCi0gICAgWydiYWNrZ3JvdW5kLXJlcGVhdC14JzonaW5pdGlhbCcgaXMtaW1wb3J0
YW50XSBAW3VuZGVmaW5lZC11bmRlZmluZWRdIHN0eWxlCi0gICAgWydiYWNrZ3JvdW5kLXJlcGVh
dC15JzonaW5pdGlhbCcgaXMtaW1wb3J0YW50XSBAW3VuZGVmaW5lZC11bmRlZmluZWRdIHN0eWxl
Ci0gICAgWydiYWNrZ3JvdW5kLWF0dGFjaG1lbnQnOidpbml0aWFsJyBpcy1pbXBvcnRhbnRdIEBb
dW5kZWZpbmVkLXVuZGVmaW5lZF0gc3R5bGUKLSAgICBbJ2JhY2tncm91bmQtcG9zaXRpb24teCc6
J2luaXRpYWwnIGlzLWltcG9ydGFudF0gQFt1bmRlZmluZWQtdW5kZWZpbmVkXSBzdHlsZQotICAg
IFsnYmFja2dyb3VuZC1wb3NpdGlvbi15JzonaW5pdGlhbCcgaXMtaW1wb3J0YW50XSBAW3VuZGVm
aW5lZC11bmRlZmluZWRdIHN0eWxlCi0gICAgWydiYWNrZ3JvdW5kLW9yaWdpbic6J2luaXRpYWwn
IGlzLWltcG9ydGFudF0gQFt1bmRlZmluZWQtdW5kZWZpbmVkXSBzdHlsZQotICAgIFsnYmFja2dy
b3VuZC1jbGlwJzonaW5pdGlhbCcgaXMtaW1wb3J0YW50XSBAW3VuZGVmaW5lZC11bmRlZmluZWRd
IHN0eWxlCi0gICAgWydiYWNrZ3JvdW5kLWNvbG9yJzonZ3JlZW4nIGlzLWltcG9ydGFudF0gQFt1
bmRlZmluZWQtdW5kZWZpbmVkXSBzdHlsZQotICAgIFsnYmFja2dyb3VuZC1zaXplJzonaW5pdGlh
bCcgaXMtaW1wb3J0YW50XSBAW3VuZGVmaW5lZC11bmRlZmluZWRdIHN0eWxlCi19Ci1ib2R5Ojph
ZnRlcjogW3JlZ3VsYXJdIHsKKyAgICAgICAgWydoZWlnaHQnOicxMDAlICFpbXBvcnRhbnQnIGlz
LWltcG9ydGFudF0gQFsxMDktMTMzXSBhY3RpdmUKKyAgICAgICAgWydjb2xvcnonOiciIWltcG9y
dGFudCInIG5vbi1wYXJzZWRdIEBbMTM4LTE1OV0gYWN0aXZlCisgICAgICAgIFsnaW1wb3J0YW50
JzonIWltcG9ydGFudCcgbm9uLXBhcnNlZF0gQFsxNjQtMTg1XSBhY3RpdmUKKyAgICAgICAgWydj
b2xvcic6J3llbGxvdyddIEBbMTkwLTIwNF0gYWN0aXZlCisgICAgICAgIFsnY29sb3InOiciYmFk
Y29sb3IiICEgaW1wb3J0YW50IC8qIGdvb2QgcHJvcGVydHkgd2l0aCBzdHJhbmdlIHZhbHVlICov
JyBpcy1pbXBvcnRhbnQgbm9uLXBhcnNlZF0gQFsyMDktMjc4XSBhY3RpdmUKKyAgICB9CisgICAg
Ym9keS5tYWluMTogW3JlZ3VsYXJdIHsgaGVhZGVyPVs1NzktNjE3XSwgYm9keT1bNjE4LTY5OV0K
KyAgICAgICAgWydjb2xvcic6JyNGMDBCQUEnXSBAWzEzLTI4XSBhY3RpdmUKKyAgICAgICAgWyd6
b28nOidtb28gLyogbm90IGFuICFpbXBvcnRhbnQgdW5yZWNvZ25pemVkIHByb3BlcnR5ICovJyBu
b24tcGFyc2VkXSBAWzI4LTgxXSBhY3RpdmUKKyAgICB9CisgICAgYm9keS5tYWluMjogW3JlZ3Vs
YXJdIHsgaGVhZGVyPVs3MTUtNzI1XSwgYm9keT1bNzI2LTgyMV0KKyAgICAgICAgWydiYWNrZ3Jv
dW5kJzonZ3JlZW4gLyogdmFsdWUgIWltcG9ydGFudCBjb21tZW50ICovICFpbXBvcnRhbnQgLyog
bm8gc2VtaWNvbG9uLCB2ZXJ5ICFpbXBvcnRhbnQgKi8nIGlzLWltcG9ydGFudF0gQFswLTk1XSBh
Y3RpdmUKKyAgICAgICAgWydiYWNrZ3JvdW5kLWltYWdlJzonaW5pdGlhbCcgaXMtaW1wb3J0YW50
XSBAW3VuZGVmaW5lZC11bmRlZmluZWRdIHN0eWxlCisgICAgICAgIFsnYmFja2dyb3VuZC1yZXBl
YXQteCc6J2luaXRpYWwnIGlzLWltcG9ydGFudF0gQFt1bmRlZmluZWQtdW5kZWZpbmVkXSBzdHls
ZQorICAgICAgICBbJ2JhY2tncm91bmQtcmVwZWF0LXknOidpbml0aWFsJyBpcy1pbXBvcnRhbnRd
IEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0gc3R5bGUKKyAgICAgICAgWydiYWNrZ3JvdW5kLWF0dGFj
aG1lbnQnOidpbml0aWFsJyBpcy1pbXBvcnRhbnRdIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0gc3R5
bGUKKyAgICAgICAgWydiYWNrZ3JvdW5kLXBvc2l0aW9uLXgnOidpbml0aWFsJyBpcy1pbXBvcnRh
bnRdIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0gc3R5bGUKKyAgICAgICAgWydiYWNrZ3JvdW5kLXBv
c2l0aW9uLXknOidpbml0aWFsJyBpcy1pbXBvcnRhbnRdIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0g
c3R5bGUKKyAgICAgICAgWydiYWNrZ3JvdW5kLW9yaWdpbic6J2luaXRpYWwnIGlzLWltcG9ydGFu
dF0gQFt1bmRlZmluZWQtdW5kZWZpbmVkXSBzdHlsZQorICAgICAgICBbJ2JhY2tncm91bmQtY2xp
cCc6J2luaXRpYWwnIGlzLWltcG9ydGFudF0gQFt1bmRlZmluZWQtdW5kZWZpbmVkXSBzdHlsZQor
ICAgICAgICBbJ2JhY2tncm91bmQtY29sb3InOidncmVlbicgaXMtaW1wb3J0YW50XSBAW3VuZGVm
aW5lZC11bmRlZmluZWRdIHN0eWxlCisgICAgICAgIFsnYmFja2dyb3VuZC1zaXplJzonaW5pdGlh
bCcgaXMtaW1wb3J0YW50XSBAW3VuZGVmaW5lZC11bmRlZmluZWRdIHN0eWxlCisgICAgfQorfQor
Ym9keTo6YWZ0ZXI6IFtyZWd1bGFyXSB7IGhlYWRlcj1bODI2LTgzN10sIGJvZHk9Wzg0MC04Njhd
CiAgICAgWydjb250ZW50JzonIkFmdGVyIGJvZHkiJ10gQFs1LTI3XSBhY3RpdmUKIH0KLWgxOiBb
cmVndWxhcl0geworaDE6IFtyZWd1bGFyXSB7IGhlYWRlcj1bODcxLTg3M10sIGJvZHk9Wzg3NS0x
MDI0XQogICAgIFsnaGVpZ2h0JzonMTAwJSddIEBbNS0yMF0gYWN0aXZlCiAgICAgWydib3JkZXIn
OicxcHggc29saWQnXSBAWzIxLTM5XSBhY3RpdmUKICAgICBbJ2JvcmRlci13aWR0aCc6JzJweCdd
IEBbNDAtNThdIGluYWN0aXZlCkBAIC0yMDEsMTAgKzIxOCwyOSBAQCBib2R5IHsKIAogfQogJwot
I2Fic2VudC1pZDogW3JlZ3VsYXJdIHsKLX0KLWJvZHk6IFtyZWd1bGFyXSB7Ci0gICAgWydwcm9w
ZXJ0eSc6J2ltcG9ydGVkLW1lZGlhLXNjcmVlbi1zdHlsZXNoZWV0JyBub24tcGFyc2VkXSBAWzUt
NDhdIGFjdGl2ZQorQGltcG9ydCA6IGhlYWRlcj1bMC03XSwgYm9keT1bOC0zM10KK0BwYWdlIHsg
aGVhZGVyPVszNi00MV0sIGJvZHk9WzQzLTU2XQorICAgIFsnbWFyZ2luJzonMmNtJ10gQFsxLTEz
XSBhY3RpdmUKKyAgICBbJ21hcmdpbi10b3AnOicyY20nXSBAW3VuZGVmaW5lZC11bmRlZmluZWRd
IHN0eWxlCisgICAgWydtYXJnaW4tcmlnaHQnOicyY20nXSBAW3VuZGVmaW5lZC11bmRlZmluZWRd
IHN0eWxlCisgICAgWydtYXJnaW4tYm90dG9tJzonMmNtJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVk
XSBzdHlsZQorICAgIFsnbWFyZ2luLWxlZnQnOicyY20nXSBAW3VuZGVmaW5lZC11bmRlZmluZWRd
IHN0eWxlCit9CitAcGFnZSA6Zmlyc3QgeyBoZWFkZXI9Wzg4LTEwMF0sIGJvZHk9WzEwMi0xNjFd
CisgICAgWydtYXJnaW4tdG9wJzonMTBjbSAgICAvKiBUb3AgbWFyZ2luIG9uIGZpcnN0IHBhZ2Ug
MTBjbSAqLyddIEBbMy01OV0gYWN0aXZlCit9CitAbWVkaWEgc2NyZWVuIHsgaGVhZGVyPVsxNjQt
MTc3XSwgYm9keT1bMTc5LTM3NF0KKyAgICAjYWJzZW50LWlkOiBbcmVndWxhcl0geyBoZWFkZXI9
WzE4MS0xOTFdLCBib2R5PVsxOTMtMTk0XQorICAgIH0KKyAgICBAZm9udC1mYWNlIHsgaGVhZGVy
PVsxOTctMjA3XSwgYm9keT1bMjA5LTMxM10KKyAgICAgICAgWydmb250LWZhbWlseSc6JydUaGVG
b250JyddIEBbNS0yOF0gYWN0aXZlCisgICAgICAgIFsnc3JjJzondXJsKCdmb250LnVybCcpJ10g
QFszMy01NF0gYWN0aXZlCisgICAgICAgIFsnZm9udC13ZWlnaHQnOidub3JtYWwnXSBAWzU5LTc5
XSBhY3RpdmUKKyAgICAgICAgWydmb250LXN0eWxlJzonbm9ybWFsJ10gQFs4NC0xMDNdIGFjdGl2
ZQorICAgIH0KKyAgICBib2R5OiBbcmVndWxhcl0geyBoZWFkZXI9WzMxNi0zMjBdLCBib2R5PVsz
MjItMzcxXQorICAgICAgICBbJ3Byb3BlcnR5JzonaW1wb3J0ZWQtbWVkaWEtc2NyZWVuLXN0eWxl
c2hlZXQnIG5vbi1wYXJzZWRdIEBbNS00OF0gYWN0aXZlCisgICAgfQogfQogCiBTdHlsZVNoZWV0
OiAnQGltcG9ydCB1cmwoc3R5bGVzLW5ldy1BUEktMS5jc3MpOwpAQCAtMjMzLDEwICsyNjksMjkg
QEAgYm9keSB7CiAKIH0KICcKLSNhYnNlbnQtaWQ6IFtyZWd1bGFyXSB7Ci19Ci1ib2R5OiBbcmVn
dWxhcl0gewotICAgIFsncHJvcGVydHknOidpbXBvcnRlZC1tZWRpYS1zY3JlZW4tc3R5bGVzaGVl
dCcgbm9uLXBhcnNlZF0gQFs1LTQ4XSBhY3RpdmUKK0BpbXBvcnQgOiBoZWFkZXI9WzAtN10sIGJv
ZHk9WzgtMzNdCitAcGFnZSB7IGhlYWRlcj1bMzYtNDFdLCBib2R5PVs0My01Nl0KKyAgICBbJ21h
cmdpbic6JzJjbSddIEBbMS0xM10gYWN0aXZlCisgICAgWydtYXJnaW4tdG9wJzonMmNtJ10gQFt1
bmRlZmluZWQtdW5kZWZpbmVkXSBzdHlsZQorICAgIFsnbWFyZ2luLXJpZ2h0JzonMmNtJ10gQFt1
bmRlZmluZWQtdW5kZWZpbmVkXSBzdHlsZQorICAgIFsnbWFyZ2luLWJvdHRvbSc6JzJjbSddIEBb
dW5kZWZpbmVkLXVuZGVmaW5lZF0gc3R5bGUKKyAgICBbJ21hcmdpbi1sZWZ0JzonMmNtJ10gQFt1
bmRlZmluZWQtdW5kZWZpbmVkXSBzdHlsZQorfQorQHBhZ2UgOmZpcnN0IHsgaGVhZGVyPVs4OC0x
MDBdLCBib2R5PVsxMDItMTYxXQorICAgIFsnbWFyZ2luLXRvcCc6JzEwY20gICAgLyogVG9wIG1h
cmdpbiBvbiBmaXJzdCBwYWdlIDEwY20gKi8nXSBAWzMtNTldIGFjdGl2ZQorfQorQG1lZGlhIHNj
cmVlbiB7IGhlYWRlcj1bMTY0LTE3N10sIGJvZHk9WzE3OS0zNzRdCisgICAgI2Fic2VudC1pZDog
W3JlZ3VsYXJdIHsgaGVhZGVyPVsxODEtMTkxXSwgYm9keT1bMTkzLTE5NF0KKyAgICB9CisgICAg
QGZvbnQtZmFjZSB7IGhlYWRlcj1bMTk3LTIwN10sIGJvZHk9WzIwOS0zMTNdCisgICAgICAgIFsn
Zm9udC1mYW1pbHknOicnVGhlRm9udCcnXSBAWzUtMjhdIGFjdGl2ZQorICAgICAgICBbJ3NyYyc6
J3VybCgnZm9udC51cmwnKSddIEBbMzMtNTRdIGFjdGl2ZQorICAgICAgICBbJ2ZvbnQtd2VpZ2h0
Jzonbm9ybWFsJ10gQFs1OS03OV0gYWN0aXZlCisgICAgICAgIFsnZm9udC1zdHlsZSc6J25vcm1h
bCddIEBbODQtMTAzXSBhY3RpdmUKKyAgICB9CisgICAgYm9keTogW3JlZ3VsYXJdIHsgaGVhZGVy
PVszMTYtMzIwXSwgYm9keT1bMzIyLTM3MV0KKyAgICAgICAgWydwcm9wZXJ0eSc6J2ltcG9ydGVk
LW1lZGlhLXNjcmVlbi1zdHlsZXNoZWV0JyBub24tcGFyc2VkXSBAWzUtNDhdIGFjdGl2ZQorICAg
IH0KIH0KIAogU3R5bGVTaGVldDogJwpAQCAtMjUzLDExICszMDgsMTEgQEAgYm9keS5tYWlucGFn
ZSB7CiB9CiAKICcKLWJvZHkubWFpbnBhZ2U6IFtyZWd1bGFyXSB7Citib2R5Lm1haW5wYWdlOiBb
cmVndWxhcl0geyBoZWFkZXI9WzI5LTQyXSwgYm9keT1bNDQtMTc3XQogICAgIFsndGV4dC1kZWNv
cmF0aW9uJzonbm9uZSddIEBbNS0yN10gYWN0aXZlCiAgICAgWydiYWRwcm9wZXJ0eSc6JzFiYWR2
YWx1ZTEnIG5vbi1wYXJzZWRdIEBbMTA4LTEzMl0gYWN0aXZlCiB9Ci1ib2R5Lm1haW5wYWdlOiBb
cmVndWxhcl0geworYm9keS5tYWlucGFnZTogW3JlZ3VsYXJdIHsgaGVhZGVyPVsxODAtMTkzXSwg
Ym9keT1bMTk1LTIzMF0KICAgICBbJ3Byb3AxJzondmFsMScgbm9uLXBhcnNlZF0gQFs1LTE3XSBh
Y3RpdmUKICAgICBbJ3Byb3AyJzondmFsMicgbm9uLXBhcnNlZF0gQFsyMi0zNF0gYWN0aXZlCiB9
CkBAIC0yNjUsMjIgKzMyMCwyMiBAQCBib2R5Lm1haW5wYWdlOiBbcmVndWxhcl0gewogPT09IExh
c3Qgc3R5bGVzaGVldCBwYXRjaGVkID09PQogCiBTdHlsZVNoZWV0OiAnYm9keS5tYWlucGFnZSB7
ICAgIHRleHQtZGVjb3JhdGlvbjogc3RyaWtldGhyb3VnaDsgICAgYmFkcHJvcGVydHk6IDJiYWR2
YWx1ZTI7fWJvZHkgeyAgICB0ZXh0LWFsaWduOiBqdXN0aWZ5O30nCi1ib2R5Lm1haW5wYWdlOiBb
cmVndWxhcl0geworYm9keS5tYWlucGFnZTogW3JlZ3VsYXJdIHsgaGVhZGVyPVswLTEzXSwgYm9k
eT1bMTUtNzhdCiAgICAgWyd0ZXh0LWRlY29yYXRpb24nOidzdHJpa2V0aHJvdWdoJyBub24tcGFy
c2VkXSBAWzQtMzVdIGFjdGl2ZQogICAgIFsnYmFkcHJvcGVydHknOicyYmFkdmFsdWUyJyBub24t
cGFyc2VkXSBAWzM5LTYzXSBhY3RpdmUKIH0KLWJvZHk6IFtyZWd1bGFyXSB7Citib2R5OiBbcmVn
dWxhcl0geyBoZWFkZXI9Wzc5LTgzXSwgYm9keT1bODUtMTA5XQogICAgIFsndGV4dC1hbGlnbic6
J2p1c3RpZnknXSBAWzQtMjRdIGFjdGl2ZQogfQogCiA9PT0gQWZ0ZXIgc2VsZWN0b3Igc2V0ID09
PQogCiBTdHlsZVNoZWV0OiAnaHRtbCAqLCBib2R5W2Zvbz0iYmFyIl0geyAgICB0ZXh0LWRlY29y
YXRpb246IHN0cmlrZXRocm91Z2g7ICAgIGJhZHByb3BlcnR5OiAyYmFkdmFsdWUyO31ib2R5IHsg
ICAgdGV4dC1hbGlnbjoganVzdGlmeTt9JwotaHRtbCAqLCBib2R5W2Zvbz0iYmFyIl06IFtyZWd1
bGFyXSB7CitodG1sICosIGJvZHlbZm9vPSJiYXIiXTogW3JlZ3VsYXJdIHsgaGVhZGVyPVswLTIz
XSwgYm9keT1bMjUtODhdCiAgICAgWyd0ZXh0LWRlY29yYXRpb24nOidzdHJpa2V0aHJvdWdoJyBu
b24tcGFyc2VkXSBAWzQtMzVdIGFjdGl2ZQogICAgIFsnYmFkcHJvcGVydHknOicyYmFkdmFsdWUy
JyBub24tcGFyc2VkXSBAWzM5LTYzXSBhY3RpdmUKIH0KLWJvZHk6IFtyZWd1bGFyXSB7Citib2R5
OiBbcmVndWxhcl0geyBoZWFkZXI9Wzg5LTkzXSwgYm9keT1bOTUtMTE5XQogICAgIFsndGV4dC1h
bGlnbic6J2p1c3RpZnknXSBAWzQtMjRdIGFjdGl2ZQogfQogCkBAIC0yODksNyArMzQ0LDcgQEAg
Ym9keTogW3JlZ3VsYXJdIHsKIFN0eWxlU2hlZXQ6ICdodG1sICosIGJvZHlbZm9vPSJiYXIiXSB7
CiAgICAgY29sb3I6IHdoaXRlOyBiYWNrZ3JvdW5kOiBibGFjazsKIH1ib2R5IHsgICAgdGV4dC1h
bGlnbjoganVzdGlmeTt9JwotaHRtbCAqLCBib2R5W2Zvbz0iYmFyIl06IFtyZWd1bGFyXSB7Cito
dG1sICosIGJvZHlbZm9vPSJiYXIiXTogW3JlZ3VsYXJdIHsgaGVhZGVyPVswLTIzXSwgYm9keT1b
MjUtNjNdCiAgICAgWydjb2xvcic6J3doaXRlJ10gQFs1LTE4XSBhY3RpdmUKICAgICBbJ2JhY2tn
cm91bmQnOidibGFjayddIEBbMTktMzddIGFjdGl2ZQogICAgIFsnYmFja2dyb3VuZC1pbWFnZSc6
J2luaXRpYWwnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdIHN0eWxlCkBAIC0zMDMsMjUgKzM1OCwy
NSBAQCBodG1sICosIGJvZHlbZm9vPSJiYXIiXTogW3JlZ3VsYXJdIHsKICAgICBbJ2JhY2tncm91
bmQtY29sb3InOidibGFjayddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0gc3R5bGUKICAgICBbJ2Jh
Y2tncm91bmQtc2l6ZSc6J2luaXRpYWwnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdIHN0eWxlCiB9
Ci1ib2R5OiBbcmVndWxhcl0geworYm9keTogW3JlZ3VsYXJdIHsgaGVhZGVyPVs2NC02OF0sIGJv
ZHk9WzcwLTk0XQogICAgIFsndGV4dC1hbGlnbic6J2p1c3RpZnknXSBAWzQtMjRdIGFjdGl2ZQog
fQogCiA9PT0gTWF0Y2hlZCBydWxlcyBhZnRlciBydWxlIGFkZGVkID09PQotYm9keTogW3VzZXIt
YWdlbnRdIHsKK2JvZHk6IFt1c2VyLWFnZW50XSB7IFtubyBoZWFkZXIvYm9keSByYW5nZXNdCiAg
ICAgWydkaXNwbGF5JzonYmxvY2snXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdIHN0eWxlCiAgICAg
WydtYXJnaW4tdG9wJzonOHB4J10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXSBzdHlsZQogICAgIFsn
bWFyZ2luLXJpZ2h0JzonOHB4J10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXSBzdHlsZQogICAgIFsn
bWFyZ2luLWJvdHRvbSc6JzhweCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0gc3R5bGUKICAgICBb
J21hcmdpbi1sZWZ0JzonOHB4J10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXSBzdHlsZQogfQotYm9k
eTogW3JlZ3VsYXJdIHsKK2JvZHk6IFtyZWd1bGFyXSB7IGhlYWRlcj1bMzE2LTMyMF0sIGJvZHk9
WzMyMi0zNzFdCiAgICAgWydwcm9wZXJ0eSc6J2ltcG9ydGVkLW1lZGlhLXNjcmVlbi1zdHlsZXNo
ZWV0JyBub24tcGFyc2VkXSBAWzUtNDhdIGFjdGl2ZQogfQotYm9keTogW3JlZ3VsYXJdIHsKK2Jv
ZHk6IFtyZWd1bGFyXSB7IGhlYWRlcj1bMzE2LTMyMF0sIGJvZHk9WzMyMi0zNzFdCiAgICAgWydw
cm9wZXJ0eSc6J2ltcG9ydGVkLW1lZGlhLXNjcmVlbi1zdHlsZXNoZWV0JyBub24tcGFyc2VkXSBA
WzUtNDhdIGFjdGl2ZQogfQotYm9keTogW3JlZ3VsYXJdIHsKK2JvZHk6IFtyZWd1bGFyXSB7IGhl
YWRlcj1bMjYyLTI2Nl0sIGJvZHk9WzI2OC01NDddCiAgICAgWydmb250LXNpemUnOicxMnB4J10g
QFs1LTIxXSBhY3RpdmUKICAgICBbJ2Zvbyc6J2JhciAhCiAKQEAgLTMzMiw3ICszODcsNyBAQCBi
b2R5OiBbcmVndWxhcl0gewogICAgIFsnY29sb3InOid5ZWxsb3cnXSBAWzE5MC0yMDRdIGFjdGl2
ZQogICAgIFsnY29sb3InOiciYmFkY29sb3IiICEgaW1wb3J0YW50IC8qIGdvb2QgcHJvcGVydHkg
d2l0aCBzdHJhbmdlIHZhbHVlICovJyBpcy1pbXBvcnRhbnQgbm9uLXBhcnNlZF0gQFsyMDktMjc4
XSBhY3RpdmUKIH0KLWh0bWwgKiwgYm9keVtmb289ImJhciJdOiBbcmVndWxhcl0geworaHRtbCAq
LCBib2R5W2Zvbz0iYmFyIl06IFtyZWd1bGFyXSB7IGhlYWRlcj1bMC0yM10sIGJvZHk9WzI1LTYz
XQogICAgIFsnY29sb3InOid3aGl0ZSddIEBbNS0xOF0gYWN0aXZlCiAgICAgWydiYWNrZ3JvdW5k
JzonYmxhY2snXSBAWzE5LTM3XSBhY3RpdmUKICAgICBbJ2JhY2tncm91bmQtaW1hZ2UnOidpbml0
aWFsJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXSBzdHlsZQpAQCAtMzQ2LDE3ICs0MDEsMTcgQEAg
aHRtbCAqLCBib2R5W2Zvbz0iYmFyIl06IFtyZWd1bGFyXSB7CiAgICAgWydiYWNrZ3JvdW5kLWNv
bG9yJzonYmxhY2snXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdIHN0eWxlCiAgICAgWydiYWNrZ3Jv
dW5kLXNpemUnOidpbml0aWFsJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXSBzdHlsZQogfQotYm9k
eTogW3JlZ3VsYXJdIHsKK2JvZHk6IFtyZWd1bGFyXSB7IGhlYWRlcj1bNjQtNjhdLCBib2R5PVs3
MC05NF0KICAgICBbJ3RleHQtYWxpZ24nOidqdXN0aWZ5J10gQFs0LTI0XSBhY3RpdmUKIH0KLWJv
ZHk6IFtpbnNwZWN0b3JdIHsKK2JvZHk6IFtpbnNwZWN0b3JdIHsgaGVhZGVyPVswLTRdLCBib2R5
PVs2LTMxXQogICAgIFsnZm9udC1mYW1pbHknOidzZXJpZiddIEBbNS0yNF0gYWN0aXZlCiB9Ci1i
b2R5Lm1haW4xOiBbcmVndWxhcl0geworYm9keS5tYWluMTogW3JlZ3VsYXJdIHsgaGVhZGVyPVs1
NzktNjE3XSwgYm9keT1bNjE4LTY5OV0KICAgICBbJ2NvbG9yJzonI0YwMEJBQSddIEBbMTMtMjhd
IGFjdGl2ZQogICAgIFsnem9vJzonbW9vIC8qIG5vdCBhbiAhaW1wb3J0YW50IHVucmVjb2duaXpl
ZCBwcm9wZXJ0eSAqLycgbm9uLXBhcnNlZF0gQFsyOC04MV0gYWN0aXZlCiB9Ci1ib2R5Lm1haW4y
OiBbcmVndWxhcl0geworYm9keS5tYWluMjogW3JlZ3VsYXJdIHsgaGVhZGVyPVs3MTUtNzI1XSwg
Ym9keT1bNzI2LTgyMV0KICAgICBbJ2JhY2tncm91bmQnOidncmVlbiAvKiB2YWx1ZSAhaW1wb3J0
YW50IGNvbW1lbnQgKi8gIWltcG9ydGFudCAvKiBubyBzZW1pY29sb24sIHZlcnkgIWltcG9ydGFu
dCAqLycgaXMtaW1wb3J0YW50XSBAWzAtOTVdIGFjdGl2ZQogICAgIFsnYmFja2dyb3VuZC1pbWFn
ZSc6J2luaXRpYWwnIGlzLWltcG9ydGFudF0gQFt1bmRlZmluZWQtdW5kZWZpbmVkXSBzdHlsZQog
ICAgIFsnYmFja2dyb3VuZC1yZXBlYXQteCc6J2luaXRpYWwnIGlzLWltcG9ydGFudF0gQFt1bmRl
ZmluZWQtdW5kZWZpbmVkXSBzdHlsZQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9y
L3N0eWxlcy9zdHlsZXMtbmV3LUFQSS5odG1sIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3N0eWxl
cy9zdHlsZXMtbmV3LUFQSS5odG1sCmluZGV4IDlmMjlhMTcxYjRlYWUzODQ0MjU1Yzk1NDExM2M5
MjliZjMyMjUyOTMuLjI3MjJmZDdhNjdhNzZkZjk0NDhmYTk3YjNmYzRhODE0MzY1ZTM2ZDkgMTAw
NjQ0Ci0tLSBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9zdHlsZXMvc3R5bGVzLW5ldy1BUEkuaHRt
bAorKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3Ivc3R5bGVzL3N0eWxlcy1uZXctQVBJLmh0bWwK
QEAgLTMwOSwzNCArMzA5LDQyIEBAIGZ1bmN0aW9uIHRlc3QoKQogICAgICAgICAgICAgZHVtcFJ1
bGUocnVsZXNbaV0sIGN1cnJlbnRJbmRlbnQpOwogICAgIH0KIAorICAgIGZ1bmN0aW9uIHJ1bGVI
ZWFkZXJCb2R5UmFuZ2VzKHJ1bGUpCisgICAgeworICAgICAgICBpZiAoIXJ1bGUuaGVhZGVyUmFu
Z2UgJiYgIXJ1bGUuYm9keVJhbmdlKQorICAgICAgICAgICAgcmV0dXJuICJbbm8gaGVhZGVyL2Jv
ZHkgcmFuZ2VzXSI7CisgICAgICAgIHJldHVybiAiaGVhZGVyPSIgKyBJbnNwZWN0b3JUZXN0LnJh
bmdlVGV4dChydWxlLmhlYWRlclJhbmdlKSArICIsIGJvZHk9IiArIEluc3BlY3RvclRlc3QucmFu
Z2VUZXh0KHJ1bGUuYm9keVJhbmdlKTsKKyAgICB9CisKICAgICBmdW5jdGlvbiBkdW1wUnVsZShy
dWxlLCBjdXJyZW50SW5kZW50KQogICAgIHsKICAgICAgICAgY3VycmVudEluZGVudCA9IGN1cnJl
bnRJbmRlbnQgfHwgIiI7CiAKICAgICAgICAgaWYgKCFydWxlLnR5cGUgfHwgcnVsZS50eXBlID09
PSAic3R5bGUiKSB7Ci0gICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmFkZFJlc3VsdChjdXJyZW50
SW5kZW50ICsgcnVsZS5zZWxlY3RvclRleHQgKyAiOiBbIiArIHJ1bGUub3JpZ2luICsgIl0geyIp
OworICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5hZGRSZXN1bHQoY3VycmVudEluZGVudCArIHJ1
bGUuc2VsZWN0b3JUZXh0ICsgIjogWyIgKyBydWxlLm9yaWdpbiArICJdIHsgIiArIHJ1bGVIZWFk
ZXJCb2R5UmFuZ2VzKHJ1bGUpKTsKICAgICAgICAgICAgIGR1bXBTdHlsZShydWxlLnN0eWxlLCBj
dXJyZW50SW5kZW50ICsgaW5kZW50KTsKICAgICAgICAgICAgIEluc3BlY3RvclRlc3QuYWRkUmVz
dWx0KGN1cnJlbnRJbmRlbnQgKyAifSIpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CiAKICAgICAgICAgaWYgKHJ1bGUudHlwZSA9PT0gIm1lZGlhIikgewotICAgICAgICAgICAgSW5z
cGVjdG9yVGVzdC5hZGRSZXN1bHQoY3VycmVudEluZGVudCArICJAbWVkaWEgIiArIHJ1bGUubWVk
aWFUZXh0ICsgIiB7Iik7CisgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmFkZFJlc3VsdChjdXJy
ZW50SW5kZW50ICsgIkBtZWRpYSAiICsgcnVsZS5tZWRpYVRleHQgKyAiIHsgIiArIHJ1bGVIZWFk
ZXJCb2R5UmFuZ2VzKHJ1bGUpKTsKICAgICAgICAgICAgIGR1bXBSdWxlc0FycmF5KHJ1bGUuY2hp
bGRSdWxlcywgY3VycmVudEluZGVudCArIGluZGVudCk7CiAgICAgICAgICAgICBJbnNwZWN0b3JU
ZXN0LmFkZFJlc3VsdChjdXJyZW50SW5kZW50ICsgIn0iKTsKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQogCi0gICAgICAgIGlmIChydWxlLnR5cGUgPT09ICJpbXBvcnQiKSB7Ci0gICAg
ICAgICAgICBJbnNwZWN0b3JUZXN0LmFkZFJlc3VsdChjdXJyZW50SW5kZW50ICsgIkBpbXBvcnQ6
IGhlYWRlcj0iICsgSW5zcGVjdG9yVGVzdC5yYW5nZVRleHQocnVsZS5oZWFkZXJSYW5nZSkgKyAi
LCBib2R5PSIgKyBJbnNwZWN0b3JUZXN0LnJhbmdlVGV4dChydWxlLmJvZHlSYW5nZSkpOworICAg
ICAgICBpZiAocnVsZS50eXBlID09PSAiaW1wb3J0IiB8fCBydWxlLnR5cGUgPT09ICJrZXlmcmFt
ZXMiKSB7CisgICAgICAgICAgICB2YXIgc2VsZWN0b3IgPSBydWxlLnR5cGUgPT09ICJrZXlmcmFt
ZXMiID8gcnVsZS5zZWxlY3RvclRleHQgOiAiIjsKKyAgICAgICAgICAgIEluc3BlY3RvclRlc3Qu
YWRkUmVzdWx0KGN1cnJlbnRJbmRlbnQgKyAiQCIgKyBydWxlLnR5cGUgKyAiICIgKyBzZWxlY3Rv
ciArICI6ICIgKyBydWxlSGVhZGVyQm9keVJhbmdlcyhydWxlKSk7CiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KIAogICAgICAgICBpZiAocnVsZS50eXBlID09PSAicGFnZSIgfHwgcnVs
ZS50eXBlID09PSAiZm9udC1mYWNlIikgewogICAgICAgICAgICAgaWYgKHJ1bGUudHlwZSA9PT0g
InBhZ2UiKQotICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3QuYWRkUmVzdWx0KGN1cnJlbnRJ
bmRlbnQgKyBydWxlLnNlbGVjdG9yVGV4dCArICIgeyIpOworICAgICAgICAgICAgICAgIEluc3Bl
Y3RvclRlc3QuYWRkUmVzdWx0KGN1cnJlbnRJbmRlbnQgKyBydWxlLnNlbGVjdG9yVGV4dCArICIg
eyAiICsgcnVsZUhlYWRlckJvZHlSYW5nZXMocnVsZSkpOwogICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgIEluc3BlY3RvclRlc3QuYWRkUmVzdWx0KGN1cnJlbnRJbmRlbnQgKyAiQCIg
KyBydWxlLnR5cGUgKyAiICIgKyAocnVsZS5zZWxlY3RvclRleHQgPyBydWxlLnNlbGVjdG9yVGV4
dCArICIgIiA6ICIiKSAgKyAieyIpOworICAgICAgICAgICAgICAgIEluc3BlY3RvclRlc3QuYWRk
UmVzdWx0KGN1cnJlbnRJbmRlbnQgKyAiQCIgKyBydWxlLnR5cGUgKyAiICIgKyAocnVsZS5zZWxl
Y3RvclRleHQgPyBydWxlLnNlbGVjdG9yVGV4dCArICIgIiA6ICIiKSAgKyAieyAiICsgcnVsZUhl
YWRlckJvZHlSYW5nZXMocnVsZSkpOwogICAgICAgICAgICAgZHVtcFN0eWxlKHJ1bGUuc3R5bGUs
IGN1cnJlbnRJbmRlbnQgKyBpbmRlbnQpOwogICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5hZGRS
ZXN1bHQoY3VycmVudEluZGVudCArICJ9Iik7CiAgICAgICAgICAgICByZXR1cm47CkBAIC0zNDcs
NyArMzU1LDcgQEAgZnVuY3Rpb24gdGVzdCgpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KIAotICAgICAgICBJbnNwZWN0b3JUZXN0LmFkZFJlc3VsdChjdXJyZW50SW5kZW50ICsgIltV
TktOT1dOIFJVTEVdOiBoZWFkZXI9IiArIEluc3BlY3RvclRlc3QucmFuZ2VUZXh0KHJ1bGUuaGVh
ZGVyUmFuZ2UpICsgIiwgYm9keT0iICsgSW5zcGVjdG9yVGVzdC5yYW5nZVRleHQocnVsZS5ib2R5
UmFuZ2UpKTsKKyAgICAgICAgSW5zcGVjdG9yVGVzdC5hZGRSZXN1bHQoY3VycmVudEluZGVudCAr
ICJbVU5LTk9XTiBSVUxFXTogIiArIHJ1bGVIZWFkZXJCb2R5UmFuZ2VzKHJ1bGUpKTsKICAgICB9
CiAKICAgICBmdW5jdGlvbiBkdW1wU3R5bGUoc3R5bGUsIGN1cnJlbnRJbmRlbnQpCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3Ivc3R5bGVzL3N0eWxlcy1zb3VyY2Utb2Zmc2V0cy5o
dG1sIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3N0eWxlcy9zdHlsZXMtc291cmNlLW9mZnNldHMu
aHRtbAppbmRleCAyZDIxNGM0MzI3MDllMGYwZjM1MmY0ODQxMzI4MDMxNTlkMzBlMjBkLi5mZmM0
Njk2ZDkwY2UyMDUzMzljNTk3ZThlNzc0YjlkMjNhZjA1NzBiIDEwMDY0NAotLS0gYS9MYXlvdXRU
ZXN0cy9pbnNwZWN0b3Ivc3R5bGVzL3N0eWxlcy1zb3VyY2Utb2Zmc2V0cy5odG1sCisrKyBiL0xh
eW91dFRlc3RzL2luc3BlY3Rvci9zdHlsZXMvc3R5bGVzLXNvdXJjZS1vZmZzZXRzLmh0bWwKQEAg
LTE4LDcgKzE4LDcgQEAgZnVuY3Rpb24gdGVzdCgpCiAgICAgICAgICAgICBpZiAocnVsZU9yU3R5
bGUub3JpZ2luICE9PSAicmVndWxhciIpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICAgICAgc3R5bGUgPSBydWxlT3JTdHlsZS5zdHlsZTsKLSAgICAgICAgICAgIGhlYWRlciA9IHJ1
bGVPclN0eWxlLnNlbGVjdG9yVGV4dCArICI6IFsiICsgKHJ1bGVPclN0eWxlLnNlbGVjdG9yUmFu
Z2UgPyBydWxlT3JTdHlsZS5zZWxlY3RvclJhbmdlLnN0YXJ0ICsgIi0iICsgcnVsZU9yU3R5bGUu
c2VsZWN0b3JSYW5nZS5lbmQgOiAiIikgICsgIl0iOworICAgICAgICAgICAgaGVhZGVyID0gcnVs
ZU9yU3R5bGUuc2VsZWN0b3JUZXh0ICsgIjogWyIgKyAocnVsZU9yU3R5bGUuaGVhZGVyUmFuZ2Ug
PyBydWxlT3JTdHlsZS5oZWFkZXJSYW5nZS5zdGFydCArICItIiArIHJ1bGVPclN0eWxlLmhlYWRl
clJhbmdlLmVuZCA6ICIiKSAgKyAiXSI7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBz
dHlsZSA9IHJ1bGVPclN0eWxlOwogICAgICAgICAgICAgaGVhZGVyID0gImVsZW1lbnQuc3R5bGU6
IjsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9zdHlsZXMvdW5kby1hZGQtbmV3
LXJ1bGUtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3N0eWxlcy91bmRvLWFk
ZC1uZXctcnVsZS1leHBlY3RlZC50eHQKaW5kZXggMTA3YTYzOGUxNTZjYzc4YTlkMTJiMDBmNzRi
NWU4MDkxYzcwZDg3My4uNmQzMjk0YzFiNjFjNjFjZTA3NWE1NTU0ZmMxNjQwMGY5YWU3NmY2ZCAx
MDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3N0eWxlcy91bmRvLWFkZC1uZXctcnVs
ZS1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3N0eWxlcy91bmRvLWFk
ZC1uZXctcnVsZS1leHBlY3RlZC50eHQKQEAgLTM4LDcgKzM4LDYgQEAgZGlzcGxheTogYmxvY2s7
CiAKID09PT09IFN0eWxlIHNoZWV0IHRleHQ6ID09PT09CiBkaXYuZm9vIHt9Ci0KID09PT09PT09
PT09PT09PT09PT09PT09PT09PT09CiBBZnRlciByZWRvOgogW2V4cGFuZGVkXSAKQEAgLTU5LDcg
KzU4LDYgQEAgZGlzcGxheTogYmxvY2s7CiAKID09PT09IFN0eWxlIHNoZWV0IHRleHQ6ID09PT09
CiBkaXYuZm9vIHt9Ci0KIGRpdi5mb28ge30KID09PT09PT09PT09PT09PT09PT09PT09PT09PT09
CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>150426</attachid>
            <date>2012-07-02 08:20:22 -0700</date>
            <delta_ts>2012-07-02 08:50:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-90280-20120702192020.patch</filename>
            <type>text/plain</type>
            <size>52688</size>
            <attacher name="Alexander Pavlov (apavlov)">apavlov</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIxNjc1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTIzMmMxMTNkYTA1Y2Jj
MmVhZTIzNWM4NDA1YzUzNTc1OTU0NjlhOC4uYzFjMGU1ZTgxNGIxM2VlNGJiYzI3YzEzOWU0ZTFl
ZGNlZjI2ODkyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg2IEBACisyMDEyLTA3LTAyICBBbGV4
YW5kZXIgUGF2bG92ICA8YXBhdmxvdkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgV2ViIEluc3Bl
Y3RvcjogRXhwb3NlIHRoZSBDU1MgcnVsZSBoaWVyYXJjaHkgdGhyb3VnaCB0aGUgV2ViIEluc3Bl
Y3RvciBwcm90b2NvbAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9OTAyODAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBUaGlzIGNoYW5nZSBtYWtlcyB1c2Ugb2YgdGhlIGhpZXJhcmNoaWNhbCBydWxlIGRhdGEg
aW4gdGhlIEluc3BlY3RvclN0eWxlU2hlZXQsIHdoaWxlIHByZXNlcnZpbmcgdGhlIHByb3RvY29s
LgorICAgICAgICBBbHNvIHVzZSB0aGUgQ1NTT00gc3R5bGVzaGVldCdzIHBhcnNpbmcgbW9kZSB3
aGVuIGV4dHJhY3Rpbmcgc291cmNlIGRhdGEgdXNpbmcgQ1NTUGFyc2VyLgorCisgICAgICAgIE5v
IG5ldyB0ZXN0cywgYXMgdGhpcyBpcyBhIHJlZmFjdG9yaW5nLgorCisgICAgICAgICogY3NzL0NT
U1N0eWxlUnVsZS5oOgorICAgICAgICAoQ1NTU3R5bGVSdWxlKToKKyAgICAgICAgKiBpbnNwZWN0
b3IvSW5zcGVjdG9yLmpzb246CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50OjpnZXRNYXRjaGVkU3R5
bGVzRm9yTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0Q29t
cHV0ZWRTdHlsZUZvck5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6
OmFkZFJ1bGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6OmJ1aWxkT2Jq
ZWN0Rm9yQXR0cmlidXRlc1N0eWxlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yU3R5
bGVTaGVldC5jcHA6CisgICAgICAgIChQYXJzZWRTdHlsZVNoZWV0KToKKyAgICAgICAgKFBhcnNl
ZFN0eWxlU2hlZXQ6OnNldFNvdXJjZURhdGEpOiBEbyBub3QgZmxhdHRlbiB0aGUgZGF0YSBwcm92
aWRlZCBieSBDU1NQYXJzZXIgYW55bW9yZQorICAgICAgICAoUGFyc2VkU3R5bGVTaGVldDo6cnVs
ZVNvdXJjZURhdGFBdCk6CisgICAgICAgIChXZWJDb3JlOjphc0NTU1J1bGVMaXN0KToKKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAoUnVsZVZpc2l0b3IpOiBBIGdlbmVyaWMgQ1NTUnVsZSBo
aWVyYXJjaHkgdmlzaXRvcgorICAgICAgICAoSW5zcGVjdG9yUnVsZVRyZWVCdWlsZGVyKTogQnVp
bGRzIGEgdHJlZSBvZiBJbnNwZWN0b3JSdWxlcworICAgICAgICAoUnVsZVBhdGhCdWlsZGVyKTog
QnVpbGRzIGEgcGF0aCBmb3IgSW5zcGVjdG9yQ1NTSWQsIGdpdmVuIGEgQ1NTUnVsZQorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5bGU6OmNyZWF0ZVdpdGhTdHlsZVNoZWV0KToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvclN0eWxlOjpidWlsZEFycmF5Rm9yQ29tcHV0ZWRTdHlsZSk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHlsZTo6c2V0UHJvcGVydHlUZXh0KToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclJ1bGU6Okluc3BlY3RvclJ1bGUpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yUnVsZTo6dHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JTdHlsZVNoZWV0OjpzZXRUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0eWxl
U2hlZXQ6OnJ1bGVTZWxlY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHlsZVNo
ZWV0OjpzZXRSdWxlU2VsZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5bGVT
aGVldDo6ZGVsZXRlUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHlsZVNoZWV0
OjpydWxlRm9ySWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5bGVTaGVldDo6YnVp
bGRPYmplY3RGb3JTdHlsZVNoZWV0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0eWxl
U2hlZXQ6OmJ1aWxkT2JqZWN0Rm9yUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JT
dHlsZVNoZWV0OjpzdHlsZUZvcklkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0eWxl
U2hlZXQ6Omluc3BlY3RvclN0eWxlRm9ySWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
U3R5bGVTaGVldDo6cnVsZU9yU3R5bGVJZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JT
dHlsZVNoZWV0OjpydWxlU291cmNlRGF0YUZvcik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JTdHlsZVNoZWV0OjpydWxlUGF0aEJ5U3R5bGVJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JTdHlsZVNoZWV0OjpydWxlUGF0aEJ5U3R5bGUpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yU3R5bGVTaGVldDo6ZW5zdXJlVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JTdHlsZVNoZWV0OjplbnN1cmVTb3VyY2VEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvclN0eWxlU2hlZXQ6OmVuc3VyZVJ1bGVUcmVlKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvclN0eWxlU2hlZXQ6OnJ1bGVJZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JTdHlsZVNoZWV0OjpmaW5kUnVsZUlkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0
eWxlU2hlZXQ6OnByb2Nlc3NSdWxlTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JT
dHlsZVNoZWV0OjpidWlsZFRyZWVGb3JSdWxlTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU6Okluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxp
bmVTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5l
U3R5bGU6OmRpZE1vZGlmeUVsZW1lbnRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlOjppbnNwZWN0b3JTdHlsZUZvcklkKToKKyAg
ICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5oOgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NJZDo6Zm9ySW5saW5lU3R5bGUpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTSWQ6OmZvclBhcmVudFBhdGgpOgorICAgICAg
ICAoSW5zcGVjdG9yQ1NTSWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTSWQ6Oklu
c3BlY3RvckNTU0lkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0lkOjpwYXRoQXQp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTSWQ6Omxhc3RQYXRoQ29tcG9uZW50KToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0lkOjpwYXRoTGVuZ3RoKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckNTU0lkOjphc1Byb3RvY29sVmFsdWUpOgorICAgICAgICAoSW5z
cGVjdG9yU3R5bGUpOgorICAgICAgICAoSW5zcGVjdG9yUnVsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JSdWxlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUnVs
ZTo6aWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUnVsZTo6Y3NzUnVsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JSdWxlOjpzdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JSdWxlOjphcHBlbmRDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JS
dWxlOjpjYW5IYXZlQ2hpbGRSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JSdWxl
OjpjaGlsZFJ1bGVMaXN0KToKKyAgICAgICAgKEluc3BlY3RvclN0eWxlU2hlZXQpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5bGVTaGVldDo6c3R5bGVJZCk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JTdHlsZVNoZWV0OjpydWxlVHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU6OnN0eWxlRm9ySWQpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlOjpydWxlU291cmNlRGF0
YUZvcik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5
bGU6OnJ1bGVQYXRoQnlTdHlsZSk6CisKIDIwMTItMDctMDIgIFRhaWp1IFRzdWlraSAgPHR6aWtA
Y2hyb21pdW0ub3JnPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IEFkZCByZWZyZXNoIGJ1dHRv
biB0byBGaWxlU3lzdGVtVmlldyBzdGF0dXMgYmFyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTU3R5bGVSdWxlLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVSdWxlLmgK
aW5kZXggZDc2YTgwMmZhNGVhMWM5MTFjMTNlMzU0NTk4ZDA5MmVhOWNmZDA1OS4uMTVmNjMzM2Y1
NzVhYzMzYTIyZTBiYzEwMjA0MTc1ZmQ1NDUzYmRhMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvY3NzL0NTU1N0eWxlUnVsZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVJ1
bGUuaApAQCAtNDUsNyArNDUsNiBAQCBwdWJsaWM6CiAKICAgICBTdHJpbmcgY3NzVGV4dCgpIGNv
bnN0OwogICAgIAotICAgIC8vIEZJWE1FOiBOb3QgQ1NTT00uIFJlbW92ZS4KICAgICBTdHlsZVJ1
bGUqIHN0eWxlUnVsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3R5bGVSdWxlLmdldCgpOyB9CiAKICAg
ICB2b2lkIHJlYXR0YWNoKFN0eWxlUnVsZSopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3Rvci5qc29uIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3Rvci5qc29uCmluZGV4IDg1MTYwNmVjODBiNjQwOTVmZjNmNzE0ZDUyYTAzNDU2Zjk2NzMyMzcu
LmU4ZjFmYzA0NjZmZjIwMzliMjMyODA5YTkzOTUwN2E1N2MxNjQ2YzIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3IuanNvbgorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmpzb24KQEAgLTE5NTEsNyArMTk1MSw3IEBACiAgICAgICAg
ICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKICAgICAgICAgICAgICAgICAicHJvcGVydGllcyI6
IFsKICAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzdHlsZVNoZWV0SWQiLCAiJHJlZiI6
ICJTdHlsZVNoZWV0SWQiLCAiZGVzY3JpcHRpb24iOiAiRW5jbG9zaW5nIHN0eWxlc2hlZXQgaWRl
bnRpZmllci4iIH0sCi0gICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAib3JkaW5hbCIsICJ0
eXBlIjogImludGVnZXIiLCAiZGVzY3JpcHRpb24iOiAiVGhlIHN0eWxlIG9yZGluYWwgd2l0aGlu
IHRoZSBzdHlsZXNoZWV0LiIgfQorICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBhdGgi
LCAidHlwZSI6ICJhcnJheSIsICJpdGVtcyI6IHsgInR5cGUiOiAiaW50ZWdlciIgfSwgImRlc2Ny
aXB0aW9uIjogIlRoZSBzdHlsZSBwYXRoIHdpdGhpbiB0aGUgc3R5bGVzaGVldCAodXNpbmcgdGhl
IHJ1bGUgcGFyZW50IGhpZXJhcmNoeSkuIiB9CiAgICAgICAgICAgICAgICAgXSwKICAgICAgICAg
ICAgICAgICAiZGVzY3JpcHRpb24iOiAiVGhpcyBvYmplY3QgaWRlbnRpZmllcyBhIENTUyBzdHls
ZSBpbiBhIHVuaXF1ZSB3YXkuIgogICAgICAgICAgICAgfSwKQEAgLTE5NjYsNyArMTk2Niw3IEBA
CiAgICAgICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKICAgICAgICAgICAgICAgICAicHJv
cGVydGllcyI6IFsKICAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzdHlsZVNoZWV0SWQi
LCAiJHJlZiI6ICJTdHlsZVNoZWV0SWQiLCAiZGVzY3JpcHRpb24iOiAiRW5jbG9zaW5nIHN0eWxl
c2hlZXQgaWRlbnRpZmllci4iIH0sCi0gICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAib3Jk
aW5hbCIsICJ0eXBlIjogImludGVnZXIiLCAiZGVzY3JpcHRpb24iOiAiVGhlIHJ1bGUgb3JkaW5h
bCB3aXRoaW4gdGhlIHN0eWxlc2hlZXQuIiB9CisgICAgICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAicGF0aCIsICJ0eXBlIjogImFycmF5IiwgIml0ZW1zIjogeyAidHlwZSI6ICJpbnRlZ2VyIiB9
LCAiZGVzY3JpcHRpb24iOiAiVGhlIHJ1bGUgcGF0aCB3aXRoaW4gdGhlIHN0eWxlc2hlZXQgKHVz
aW5nIHRoZSBydWxlIHBhcmVudCBoaWVyYXJjaHkpLiIgfQogICAgICAgICAgICAgICAgIF0sCiAg
ICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlRoaXMgb2JqZWN0IGlkZW50aWZpZXMgYSBD
U1MgcnVsZSBpbiBhIHVuaXF1ZSB3YXkuIgogICAgICAgICAgICAgfSwKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwCmluZGV4IDkxNzAyN2ZiMmMwNDcx
NzNlOGFhYTRkMzA5MzNiZTg3NjEzODllODMuLjVkYzQ4YjU5OTBmZTg5YTAyNTUwODliYjBkMTQ2
YzIzY2VkMzYwOTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JDU1NBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNT
U0FnZW50LmNwcApAQCAtNjAyLDcgKzYwMiw3IEBAIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6Omdl
dE1hdGNoZWRTdHlsZXNGb3JOb2RlKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgaW50IG5vCiAg
ICAgICAgICAgICBpZiAocGFyZW50RWxlbWVudC0+c3R5bGUoKSAmJiBwYXJlbnRFbGVtZW50LT5z
dHlsZSgpLT5sZW5ndGgoKSkgewogICAgICAgICAgICAgICAgIEluc3BlY3RvclN0eWxlU2hlZXRG
b3JJbmxpbmVTdHlsZSogc3R5bGVTaGVldCA9IGFzSW5zcGVjdG9yU3R5bGVTaGVldChwYXJlbnRF
bGVtZW50KTsKICAgICAgICAgICAgICAgICBpZiAoc3R5bGVTaGVldCkKLSAgICAgICAgICAgICAg
ICAgICAgcGFyZW50U3R5bGUtPnNldElubGluZVN0eWxlKHN0eWxlU2hlZXQtPmJ1aWxkT2JqZWN0
Rm9yU3R5bGUoc3R5bGVTaGVldC0+c3R5bGVGb3JJZChJbnNwZWN0b3JDU1NJZChzdHlsZVNoZWV0
LT5pZCgpLCAwKSkpKTsKKyAgICAgICAgICAgICAgICAgICAgcGFyZW50U3R5bGUtPnNldElubGlu
ZVN0eWxlKHN0eWxlU2hlZXQtPmJ1aWxkT2JqZWN0Rm9yU3R5bGUoc3R5bGVTaGVldC0+c3R5bGVG
b3JJZChJbnNwZWN0b3JDU1NJZDo6Zm9ySW5saW5lU3R5bGUoc3R5bGVTaGVldC0+aWQoKSkpKSk7
CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGluaGVyaXRlZFN0eWxlcy0+YWRkSXRlbShw
YXJlbnRTdHlsZS5yZWxlYXNlKCkpOwpAQCAtNjM3LDcgKzYzNyw3IEBAIHZvaWQgSW5zcGVjdG9y
Q1NTQWdlbnQ6OmdldENvbXB1dGVkU3R5bGVGb3JOb2RlKEVycm9yU3RyaW5nKiBlcnJvclN0cmlu
ZywgaW50IG5vCiAgICAgcmVjYWxjU3R5bGVGb3JQc2V1ZG9TdGF0ZUlmTmVlZGVkKGVsZW1lbnQs
IGZvcmNlZFBzZXVkb0NsYXNzZXMgPyBmb3JjZWRQc2V1ZG9DbGFzc2VzLT5nZXQoKSA6IDApOwog
CiAgICAgUmVmUHRyPENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbj4gY29tcHV0ZWRTdHlsZUlu
Zm8gPSBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb246OmNyZWF0ZShlbGVtZW50LCB0cnVlKTsK
LSAgICBSZWZQdHI8SW5zcGVjdG9yU3R5bGU+IGluc3BlY3RvclN0eWxlID0gSW5zcGVjdG9yU3R5
bGU6OmNyZWF0ZShJbnNwZWN0b3JDU1NJZCgpLCBjb21wdXRlZFN0eWxlSW5mbywgMCk7CisgICAg
UmVmUHRyPEluc3BlY3RvclN0eWxlPiBpbnNwZWN0b3JTdHlsZSA9IEluc3BlY3RvclN0eWxlOjpj
cmVhdGVXaXRoU3R5bGVTaGVldChJbnNwZWN0b3JDU1NJZCgpLCBjb21wdXRlZFN0eWxlSW5mbywg
MCk7CiAgICAgc3R5bGUgPSBpbnNwZWN0b3JTdHlsZS0+YnVpbGRBcnJheUZvckNvbXB1dGVkU3R5
bGUoKTsKIH0KIApAQCAtNzU1LDcgKzc1NSw3IEBAIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmFk
ZFJ1bGUoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBjb25zdCBpbnQgY29udGV4dE5vZGVJCiAg
ICAgfQogCiAgICAgSW5zcGVjdG9yQ1NTSWQgcnVsZUlkID0gcmF3QWN0aW9uLT5uZXdSdWxlSWQo
KTsKLSAgICBDU1NTdHlsZVJ1bGUqIHJ1bGUgPSBpbnNwZWN0b3JTdHlsZVNoZWV0LT5ydWxlRm9y
SWQocnVsZUlkKTsKKyAgICBDU1NSdWxlKiBydWxlID0gaW5zcGVjdG9yU3R5bGVTaGVldC0+cnVs
ZUZvcklkKHJ1bGVJZCk7CiAgICAgcmVzdWx0ID0gaW5zcGVjdG9yU3R5bGVTaGVldC0+YnVpbGRP
YmplY3RGb3JSdWxlKHJ1bGUpOwogfQogCkBAIC05NzcsNyArOTc3LDcgQEAgUGFzc1JlZlB0cjxU
eXBlQnVpbGRlcjo6Q1NTOjpDU1NTdHlsZT4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmJ1aWxkT2JqZWN0
Rm9yQXR0cmlidXQKICAgICBpZiAoIWF0dHJpYnV0ZVN0eWxlKQogICAgICAgICByZXR1cm4gMDsK
IAotICAgIFJlZlB0cjxJbnNwZWN0b3JTdHlsZT4gaW5zcGVjdG9yU3R5bGUgPSBJbnNwZWN0b3JT
dHlsZTo6Y3JlYXRlKEluc3BlY3RvckNTU0lkKCksIGF0dHJpYnV0ZVN0eWxlLT5lbnN1cmVDU1NT
dHlsZURlY2xhcmF0aW9uKCksIDApOworICAgIFJlZlB0cjxJbnNwZWN0b3JTdHlsZT4gaW5zcGVj
dG9yU3R5bGUgPSBJbnNwZWN0b3JTdHlsZTo6Y3JlYXRlV2l0aFN0eWxlU2hlZXQoSW5zcGVjdG9y
Q1NTSWQoKSwgYXR0cmlidXRlU3R5bGUtPmVuc3VyZUNTU1N0eWxlRGVjbGFyYXRpb24oKSwgMCk7
CiAgICAgcmV0dXJuIGluc3BlY3RvclN0eWxlLT5idWlsZE9iamVjdEZvclN0eWxlKCk7CiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNwcApp
bmRleCAzY2Q5MTUwZjYzMDliYTBjOWE4Yjg5NmYzMjg4NGM5N2RmMjc4MzY3Li5jNjk4ZmM3MmMx
Yjc3YWMzZTU1OTBhNDY1YmRiMmRkODZlN2U0NGYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3BwCkBAIC0yOCw4ICsyOCwxMCBAQAogCiAj
aW5jbHVkZSAiSW5zcGVjdG9yU3R5bGVTaGVldC5oIgogCisjaW5jbHVkZSAiQ1NTRm9udEZhY2VS
dWxlLmgiCiAjaW5jbHVkZSAiQ1NTSW1wb3J0UnVsZS5oIgogI2luY2x1ZGUgIkNTU01lZGlhUnVs
ZS5oIgorI2luY2x1ZGUgIkNTU1BhZ2VSdWxlLmgiCiAjaW5jbHVkZSAiQ1NTUGFyc2VyLmgiCiAj
aW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgogI2luY2x1ZGUgIkNTU1Byb3BlcnR5U291cmNl
RGF0YS5oIgpAQCAtNzUsNyArNzcsNyBAQCBwdWJsaWM6CiAgICAgUnVsZVNvdXJjZURhdGFMaXN0
KiBzb3VyY2VEYXRhKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2VEYXRhLmdldCgpOyB9CiAgICAg
dm9pZCBzZXRTb3VyY2VEYXRhKFBhc3NPd25QdHI8UnVsZVNvdXJjZURhdGFMaXN0Pik7CiAgICAg
Ym9vbCBoYXNTb3VyY2VEYXRhKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2VEYXRhOyB9Ci0gICAg
UGFzc1JlZlB0cjxXZWJDb3JlOjpDU1NSdWxlU291cmNlRGF0YT4gcnVsZVNvdXJjZURhdGFBdCh1
bnNpZ25lZCkgY29uc3Q7CisgICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpDU1NSdWxlU291cmNlRGF0
YT4gcnVsZVNvdXJjZURhdGFBdChjb25zdCBWZWN0b3I8aW50PiYpIGNvbnN0OwogCiBwcml2YXRl
OgogCkBAIC05OSwxNyArMTAxLDYgQEAgdm9pZCBQYXJzZWRTdHlsZVNoZWV0OjpzZXRUZXh0KGNv
bnN0IFN0cmluZyYgdGV4dCkKICAgICBzZXRTb3VyY2VEYXRhKG51bGxwdHIpOwogfQogCi1zdGF0
aWMgdm9pZCBmbGF0dGVuU291cmNlRGF0YShSdWxlU291cmNlRGF0YUxpc3QqIGRhdGFMaXN0LCBS
dWxlU291cmNlRGF0YUxpc3QqIHRhcmdldCkKLXsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGRhdGFMaXN0LT5zaXplKCk7ICsraSkgewotICAgICAgICBSZWZQdHI8Q1NTUnVsZVNvdXJjZURh
dGE+JiBkYXRhID0gZGF0YUxpc3QtPmF0KGkpOwotICAgICAgICBpZiAoZGF0YS0+dHlwZSA9PSBD
U1NSdWxlU291cmNlRGF0YTo6U1RZTEVfUlVMRSkKLSAgICAgICAgICAgIHRhcmdldC0+YXBwZW5k
KGRhdGEpOwotICAgICAgICBlbHNlIGlmIChkYXRhLT50eXBlID09IENTU1J1bGVTb3VyY2VEYXRh
OjpNRURJQV9SVUxFKQotICAgICAgICAgICAgZmxhdHRlblNvdXJjZURhdGEoJmRhdGEtPmNoaWxk
UnVsZXMsIHRhcmdldCk7Ci0gICAgfQotfQotCiB2b2lkIFBhcnNlZFN0eWxlU2hlZXQ6OnNldFNv
dXJjZURhdGEoUGFzc093blB0cjxSdWxlU291cmNlRGF0YUxpc3Q+IHNvdXJjZURhdGEpCiB7CiAg
ICAgaWYgKCFzb3VyY2VEYXRhKSB7CkBAIC0xMTcsMjAgKzEwOCwzMCBAQCB2b2lkIFBhcnNlZFN0
eWxlU2hlZXQ6OnNldFNvdXJjZURhdGEoUGFzc093blB0cjxSdWxlU291cmNlRGF0YUxpc3Q+IHNv
dXJjZURhdGEpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBtX3NvdXJjZURhdGEgPSBh
ZG9wdFB0cihuZXcgUnVsZVNvdXJjZURhdGFMaXN0KCkpOwotCi0gICAgLy8gRklYTUU6IFRoaXMg
aXMgYSB0ZW1wb3Jhcnkgc29sdXRpb24gdG8gcmV0YWluIHRoZSBvcmlnaW5hbCBmbGF0IHNvdXJj
ZURhdGEgc3RydWN0dXJlCi0gICAgLy8gY29udGFpbmluZyBvbmx5IHN0eWxlIHJ1bGVzLCBldmVu
IHRob3VnaCBDU1NQYXJzZXIgbm93IHByb3ZpZGVzIHRoZSBmdWxsIHJ1bGUgc291cmNlIGRhdGEg
dHJlZS4KLSAgICAvLyBOb3JtYWxseSwgd2Ugc2hvdWxkIGp1c3QgYXNzaWduIG1fc291cmNlRGF0
YSA9IHNvdXJjZURhdGE7Ci0gICAgZmxhdHRlblNvdXJjZURhdGEoc291cmNlRGF0YS5nZXQoKSwg
bV9zb3VyY2VEYXRhLmdldCgpKTsKKyAgICBtX3NvdXJjZURhdGEgPSBzb3VyY2VEYXRhOwogfQog
Ci1QYXNzUmVmUHRyPFdlYkNvcmU6OkNTU1J1bGVTb3VyY2VEYXRhPiBQYXJzZWRTdHlsZVNoZWV0
OjpydWxlU291cmNlRGF0YUF0KHVuc2lnbmVkIGluZGV4KSBjb25zdAorUGFzc1JlZlB0cjxXZWJD
b3JlOjpDU1NSdWxlU291cmNlRGF0YT4gUGFyc2VkU3R5bGVTaGVldDo6cnVsZVNvdXJjZURhdGFB
dChjb25zdCBWZWN0b3I8aW50PiYgcGF0aCkgY29uc3QKIHsKLSAgICBpZiAoIWhhc1NvdXJjZURh
dGEoKSB8fCBpbmRleCA+PSBtX3NvdXJjZURhdGEtPnNpemUoKSkKKyAgICBBU1NFUlQoIXBhdGgu
aXNFbXB0eSgpKTsKKyAgICBpZiAoIWhhc1NvdXJjZURhdGEoKSkKICAgICAgICAgcmV0dXJuIDA7
CiAKLSAgICByZXR1cm4gbV9zb3VyY2VEYXRhLT5hdChpbmRleCk7CisgICAgUnVsZVNvdXJjZURh
dGFMaXN0KiBzb3VyY2VEYXRhID0gbV9zb3VyY2VEYXRhLmdldCgpOworICAgIHVuc2lnbmVkIHBh
dGhMZW5ndGggPSBwYXRoLnNpemUoKTsKKyAgICBmb3IgKHNpemVfdCBjdXJyZW50UGF0aEluZGV4
ID0gMDsgY3VycmVudFBhdGhJbmRleCA8IHBhdGhMZW5ndGggLSAxOyArK2N1cnJlbnRQYXRoSW5k
ZXgpIHsKKyAgICAgICAgdW5zaWduZWQgcnVsZUluZGV4ID0gcGF0aC5hdChjdXJyZW50UGF0aElu
ZGV4KTsKKyAgICAgICAgaWYgKHJ1bGVJbmRleCA+PSBzb3VyY2VEYXRhLT5zaXplKCkpCisgICAg
ICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgc291cmNlRGF0YSA9ICZzb3VyY2VEYXRhLT5hdChy
dWxlSW5kZXgpLT5jaGlsZFJ1bGVzOworICAgICAgICBpZiAoIXNvdXJjZURhdGEpCisgICAgICAg
ICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBpbnQgbGFzdFBhdGhJdGVtID0gcGF0aC5sYXN0
KCk7CisgICAgaWYgKGxhc3RQYXRoSXRlbSA+PSBzdGF0aWNfY2FzdDxpbnQ+KHNvdXJjZURhdGEt
PnNpemUoKSkpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBzb3VyY2VEYXRhLT5hdChs
YXN0UGF0aEl0ZW0pOwogfQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0xNDIsNiArMTQzLDIy
NSBAQCBlbnVtIE1lZGlhTGlzdFNvdXJjZSB7CiAgICAgTWVkaWFMaXN0U291cmNlSW1wb3J0UnVs
ZQogfTsKIAorc3RhdGljIFBhc3NSZWZQdHI8Q1NTUnVsZUxpc3Q+IGFzQ1NTUnVsZUxpc3QoQ1NT
U3R5bGVTaGVldCogc3R5bGVTaGVldCkKK3sKKyAgICBpZiAoIXN0eWxlU2hlZXQpCisgICAgICAg
IHJldHVybiAwOworCisgICAgUmVmUHRyPFN0YXRpY0NTU1J1bGVMaXN0PiBsaXN0ID0gU3RhdGlj
Q1NTUnVsZUxpc3Q6OmNyZWF0ZSgpOworICAgIFZlY3RvcjxSZWZQdHI8Q1NTUnVsZT4gPiYgbGlz
dFJ1bGVzID0gbGlzdC0+cnVsZXMoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwLCBzaXplID0g
c3R5bGVTaGVldC0+bGVuZ3RoKCk7IGkgPCBzaXplOyArK2kpCisgICAgICAgIGxpc3RSdWxlcy5h
cHBlbmQoc3R5bGVTaGVldC0+aXRlbShpKSk7CisgICAgcmV0dXJuIGxpc3QucmVsZWFzZSgpOwor
fQorCitzdGF0aWMgUGFzc1JlZlB0cjxDU1NSdWxlTGlzdD4gYXNDU1NSdWxlTGlzdChDU1NSdWxl
KiBydWxlKQoreworICAgIGlmICghcnVsZSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAo
cnVsZS0+aXNNZWRpYVJ1bGUoKSkKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PENTU01lZGlh
UnVsZSo+KHJ1bGUpLT5jc3NSdWxlcygpOworCisgICAgcmV0dXJuIDA7Cit9CisKK2NsYXNzIFJ1
bGVWaXNpdG9yIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBmb3JSdWxlcyhQYXNzUmVmUHRy
PENTU1J1bGVMaXN0PiBydWxlTGlzdCwgUnVsZVZpc2l0b3ImIHZpc2l0b3IpCisgICAgeworICAg
ICAgICBpZiAoIXJ1bGVMaXN0KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDAsIHNpemUgPSBydWxlTGlzdC0+bGVuZ3RoKCk7IGkgPCBzaXpl
OyArK2kpIHsKKyAgICAgICAgICAgIENTU1J1bGUqIHJ1bGUgPSBydWxlTGlzdC0+aXRlbShpKTsK
KyAgICAgICAgICAgIENTU1N0eWxlUnVsZSogc3R5bGVSdWxlID0gSW5zcGVjdG9yQ1NTQWdlbnQ6
OmFzQ1NTU3R5bGVSdWxlKHJ1bGUpOworICAgICAgICAgICAgaWYgKHN0eWxlUnVsZSkgeworICAg
ICAgICAgICAgICAgIGlmICh2aXNpdG9yLnZpc2l0KHN0eWxlUnVsZSkpCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICBzd2l0Y2ggKHJ1bGUtPnR5cGUoKSkgeworICAgICAgICAgICAgICAgIGNhc2UgQ1NTUnVsZTo6
TUVESUFfUlVMRTogeworICAgICAgICAgICAgICAgICAgICBDU1NNZWRpYVJ1bGUqIG1lZGlhUnVs
ZSA9IHN0YXRpY19jYXN0PENTU01lZGlhUnVsZSo+KHJ1bGUpOworICAgICAgICAgICAgICAgICAg
ICBpZiAoIXZpc2l0b3Iud2lsbFZpc2l0TWVkaWFSdWxlKG1lZGlhUnVsZSkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIFJlZlB0cjxDU1NSdWxlTGlzdD4gY2hpbGRSdWxlTGlzdCA9IGFzQ1NT
UnVsZUxpc3QocnVsZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGRSdWxlTGlz
dCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmb3JSdWxlcyhjaGlsZFJ1bGVM
aXN0LCB2aXNpdG9yKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgICAgICBpZiAodmlzaXRvci5kaWRWaXNpdE1lZGlhUnVsZShtZWRpYVJ1
bGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjYXNlIENT
U1J1bGU6OklNUE9SVF9SVUxFOiB7CisgICAgICAgICAgICAgICAgICAgIGlmICh2aXNpdG9yLnZp
c2l0KHN0YXRpY19jYXN0PENTU0ltcG9ydFJ1bGUqPihydWxlKSkpCisgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNhc2UgQ1NTUnVsZTo6UEFHRV9SVUxFOgorICAg
ICAgICAgICAgICAgICAgICBpZiAodmlzaXRvci52aXNpdChzdGF0aWNfY2FzdDxDU1NQYWdlUnVs
ZSo+KHJ1bGUpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIENTU1J1bGU6OkZPTlRf
RkFDRV9SVUxFOgorICAgICAgICAgICAgICAgICAgICBpZiAodmlzaXRvci52aXNpdChzdGF0aWNf
Y2FzdDxDU1NGb250RmFjZVJ1bGUqPihydWxlKSkpCisgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
Y2FzZSBDU1NSdWxlOjpXRUJLSVRfS0VZRlJBTUVTX1JVTEU6CisgICAgICAgICAgICAgICAgICAg
IGlmICh2aXNpdG9yLnZpc2l0KHN0YXRpY19jYXN0PFdlYktpdENTU0tleWZyYW1lc1J1bGUqPihy
dWxlKSkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKHZpc2l0b3IudmlzaXQocnVsZSkpCisgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworICAgIHZpcnR1YWwgflJ1bGVWaXNpdG9yKCkKKyAgICB7CisgICAgfQorCisgICAgdmly
dHVhbCBib29sIHdpbGxWaXNpdE1lZGlhUnVsZShDU1NNZWRpYVJ1bGUqKSA9IDA7CisgICAgdmly
dHVhbCBib29sIGRpZFZpc2l0TWVkaWFSdWxlKENTU01lZGlhUnVsZSopID0gMDsKKyAgICB2aXJ0
dWFsIGJvb2wgdmlzaXQoQ1NTU3R5bGVSdWxlKikgPSAwOworICAgIHZpcnR1YWwgYm9vbCB2aXNp
dChDU1NJbXBvcnRSdWxlKiBydWxlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZpc2l0KHN0YXRp
Y19jYXN0PENTU1J1bGUqPihydWxlKSk7CisgICAgfQorICAgIHZpcnR1YWwgYm9vbCB2aXNpdChD
U1NGb250RmFjZVJ1bGUqIHJ1bGUpCisgICAgeworICAgICAgICByZXR1cm4gdmlzaXQoc3RhdGlj
X2Nhc3Q8Q1NTUnVsZSo+KHJ1bGUpKTsKKyAgICB9CisgICAgdmlydHVhbCBib29sIHZpc2l0KENT
U1BhZ2VSdWxlKiBydWxlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZpc2l0KHN0YXRpY19jYXN0
PENTU1J1bGUqPihydWxlKSk7CisgICAgfQorICAgIHZpcnR1YWwgYm9vbCB2aXNpdChXZWJLaXRD
U1NLZXlmcmFtZXNSdWxlKiBydWxlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZpc2l0KHN0YXRp
Y19jYXN0PENTU1J1bGUqPihydWxlKSk7CisgICAgfQorICAgIHZpcnR1YWwgYm9vbCB2aXNpdChD
U1NSdWxlKikgPSAwOworfTsKKworY2xhc3MgSW5zcGVjdG9yUnVsZVRyZWVCdWlsZGVyIDogcHVi
bGljIFJ1bGVWaXNpdG9yIHsKK3B1YmxpYzoKKyAgICBJbnNwZWN0b3JSdWxlVHJlZUJ1aWxkZXIo
SW5zcGVjdG9yU3R5bGVTaGVldCogc3R5bGVTaGVldCwgSW5zcGVjdG9yUnVsZUxpc3QqIHJ1bGVM
aXN0KQorICAgICAgICA6IG1fc3R5bGVTaGVldChzdHlsZVNoZWV0KQorICAgIHsKKyAgICAgICAg
bV9ydWxlTGlzdFN0YWNrLmFwcGVuZChydWxlTGlzdCk7CisgICAgICAgIG1fcGF0aC5hcHBlbmQo
MCk7CisgICAgfQorCisgICAgdmlydHVhbCB+SW5zcGVjdG9yUnVsZVRyZWVCdWlsZGVyKCkgeyB9
CisKKyAgICB2aXJ0dWFsIGJvb2wgd2lsbFZpc2l0TWVkaWFSdWxlKENTU01lZGlhUnVsZSogcnVs
ZSkKKyAgICB7CisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JSdWxlPiBtZWRpYUluc3BlY3RvclJ1
bGUgPSBJbnNwZWN0b3JSdWxlOjpjcmVhdGUoSW5zcGVjdG9yQ1NTSWQobV9zdHlsZVNoZWV0LT5p
ZCgpLCBtX3BhdGgpLCBydWxlLCBtX3N0eWxlU2hlZXQpOworICAgICAgICBtX3J1bGVMaXN0U3Rh
Y2subGFzdCgpLT5hcHBlbmQobWVkaWFJbnNwZWN0b3JSdWxlKTsKKyAgICAgICAgbV9ydWxlTGlz
dFN0YWNrLmFwcGVuZChtZWRpYUluc3BlY3RvclJ1bGUtPmNoaWxkUnVsZUxpc3QoKSk7CisgICAg
ICAgIG1fcGF0aC5hcHBlbmQoMCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAg
ICB2aXJ0dWFsIGJvb2wgZGlkVmlzaXRNZWRpYVJ1bGUoQ1NTTWVkaWFSdWxlKikKKyAgICB7Cisg
ICAgICAgIG1fcGF0aC5yZW1vdmVMYXN0KCk7CisgICAgICAgIG1fcnVsZUxpc3RTdGFjay5yZW1v
dmVMYXN0KCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIGJv
b2wgdmlzaXQoQ1NTU3R5bGVSdWxlKiBydWxlKQorICAgIHsKKyAgICAgICAgbV9ydWxlTGlzdFN0
YWNrLmxhc3QoKS0+YXBwZW5kKEluc3BlY3RvclJ1bGU6OmNyZWF0ZShJbnNwZWN0b3JDU1NJZCht
X3N0eWxlU2hlZXQtPmlkKCksIG1fcGF0aCksIHJ1bGUsIG1fc3R5bGVTaGVldCkpOworICAgICAg
ICByZXR1cm4gdmlzaXRDb21tb24oKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXQo
Q1NTUnVsZSogcnVsZSkKKyAgICB7CisgICAgICAgIG1fcnVsZUxpc3RTdGFjay5sYXN0KCktPmFw
cGVuZChJbnNwZWN0b3JSdWxlOjpjcmVhdGUoSW5zcGVjdG9yQ1NTSWQobV9zdHlsZVNoZWV0LT5p
ZCgpLCBtX3BhdGgpLCBydWxlLCBtX3N0eWxlU2hlZXQpKTsKKyAgICAgICAgcmV0dXJuIHZpc2l0
Q29tbW9uKCk7CisgICAgfQorCisKK3ByaXZhdGU6CisgICAgYm9vbCB2aXNpdENvbW1vbigpCisg
ICAgeworICAgICAgICBzaXplX3QgbGFzdEluZGV4ID0gbV9wYXRoLnNpemUoKSAtIDE7CisgICAg
ICAgIG1fcGF0aFtsYXN0SW5kZXhdID0gbV9wYXRoLmF0KGxhc3RJbmRleCkgKyAxOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgSW5zcGVjdG9yU3R5bGVTaGVldCogbV9zdHls
ZVNoZWV0OworICAgIFZlY3RvcjxJbnNwZWN0b3JSdWxlTGlzdCo+IG1fcnVsZUxpc3RTdGFjazsK
KyAgICBWZWN0b3I8aW50PiBtX3BhdGg7Cit9OworCitjbGFzcyBSdWxlUGF0aEJ1aWxkZXIgOiBw
dWJsaWMgUnVsZVZpc2l0b3IgeworcHVibGljOgorICAgIFJ1bGVQYXRoQnVpbGRlcihDU1NSdWxl
KiBydWxlLCBWZWN0b3I8aW50PiYgcGF0aCkKKyAgICAgICAgOiBtX2ZvdW5kKGZhbHNlKQorICAg
ICAgICAsIG1fcnVsZShydWxlKQorICAgICAgICAsIG1fcGF0aChwYXRoKQorICAgIHsKKyAgICAg
ICAgbV9wYXRoLmFwcGVuZCgwKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5SdWxlUGF0aEJ1aWxk
ZXIoKSB7IH0KKworICAgIHZpcnR1YWwgYm9vbCB3aWxsVmlzaXRNZWRpYVJ1bGUoQ1NTTWVkaWFS
dWxlKiBydWxlKQorICAgIHsKKyAgICAgICAgaWYgKG1fcnVsZSA9PSBydWxlKSB7CisgICAgICAg
ICAgICBtX2ZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9
CisKKyAgICAgICAgbV9wYXRoLmFwcGVuZCgwKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworICAgIHZpcnR1YWwgYm9vbCBkaWRWaXNpdE1lZGlhUnVsZShDU1NNZWRpYVJ1bGUqKQor
ICAgIHsKKyAgICAgICAgaWYgKG1fZm91bmQpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKwor
ICAgICAgICBtX3BhdGgucmVtb3ZlTGFzdCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorCisgICAgdmlydHVhbCBib29sIHZpc2l0KENTU1N0eWxlUnVsZSogcnVsZSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiB2aXNpdChzdGF0aWNfY2FzdDxDU1NSdWxlKj4ocnVsZSkpOworICAgIH0K
KworICAgIHZpcnR1YWwgYm9vbCB2aXNpdChDU1NSdWxlKiBydWxlKQorICAgIHsKKyAgICAgICAg
aWYgKG1fcnVsZSA9PSBydWxlKSB7CisgICAgICAgICAgICBtX2ZvdW5kID0gdHJ1ZTsKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgc2l6ZV90IGxhc3RJbmRl
eCA9IG1fcGF0aC5zaXplKCkgLSAxOworICAgICAgICBtX3BhdGhbbGFzdEluZGV4XSA9IG1fcGF0
aC5hdChsYXN0SW5kZXgpICsgMTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAg
IGJvb2wgZm91bmQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fZm91bmQ7CisgICAgfQorCitw
cml2YXRlOgorICAgIGJvb2wgbV9mb3VuZDsKKyAgICBDU1NSdWxlKiBtX3J1bGU7CisgICAgVmVj
dG9yPGludD4mIG1fcGF0aDsKK307CisKIHN0YXRpYyBQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpD
U1M6OlNvdXJjZVJhbmdlPiBidWlsZFNvdXJjZVJhbmdlT2JqZWN0KGNvbnN0IFNvdXJjZVJhbmdl
JiByYW5nZSkKIHsKICAgICBSZWZQdHI8VHlwZUJ1aWxkZXI6OkNTUzo6U291cmNlUmFuZ2U+IHJl
c3VsdCA9IFR5cGVCdWlsZGVyOjpDU1M6OlNvdXJjZVJhbmdlOjpjcmVhdGUoKQpAQCAtMTgwLDM2
ICs0MDAsNiBAQCBzdGF0aWMgUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpDU1NNZWRpYT4g
YnVpbGRNZWRpYU9iamVjdChjb25zdCBNZWRpYUxpc3QqCiAgICAgcmV0dXJuIG1lZGlhT2JqZWN0
LnJlbGVhc2UoKTsKIH0KIAotc3RhdGljIFBhc3NSZWZQdHI8Q1NTUnVsZUxpc3Q+IGFzQ1NTUnVs
ZUxpc3QoQ1NTU3R5bGVTaGVldCogc3R5bGVTaGVldCkKLXsKLSAgICBpZiAoIXN0eWxlU2hlZXQp
Ci0gICAgICAgIHJldHVybiAwOwotCi0gICAgUmVmUHRyPFN0YXRpY0NTU1J1bGVMaXN0PiBsaXN0
ID0gU3RhdGljQ1NTUnVsZUxpc3Q6OmNyZWF0ZSgpOwotICAgIFZlY3RvcjxSZWZQdHI8Q1NTUnVs
ZT4gPiYgbGlzdFJ1bGVzID0gbGlzdC0+cnVsZXMoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
LCBzaXplID0gc3R5bGVTaGVldC0+bGVuZ3RoKCk7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAg
Q1NTUnVsZSogaXRlbSA9IHN0eWxlU2hlZXQtPml0ZW0oaSk7Ci0gICAgICAgIGlmIChpdGVtLT5p
c0NoYXJzZXRSdWxlKCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgbGlzdFJ1bGVz
LmFwcGVuZChpdGVtKTsKLSAgICB9Ci0gICAgcmV0dXJuIGxpc3QucmVsZWFzZSgpOwotfQotCi1z
dGF0aWMgUGFzc1JlZlB0cjxDU1NSdWxlTGlzdD4gYXNDU1NSdWxlTGlzdChDU1NSdWxlKiBydWxl
KQotewotICAgIGlmICghcnVsZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAocnVsZS0+
aXNNZWRpYVJ1bGUoKSkKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PENTU01lZGlhUnVsZSo+
KHJ1bGUpLT5jc3NSdWxlcygpOwotCi0gICAgaWYgKHJ1bGUtPmlzS2V5ZnJhbWVzUnVsZSgpKQot
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZSo+KHJ1bGUp
LT5jc3NSdWxlcygpOwotCi0gICAgcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyB2b2lkIGZpbGxNZWRp
YUxpc3RDaGFpbihDU1NSdWxlKiBydWxlLCBBcnJheTxUeXBlQnVpbGRlcjo6Q1NTOjpDU1NNZWRp
YT4qIG1lZGlhQXJyYXkpCiB7CiAgICAgTWVkaWFMaXN0KiBtZWRpYUxpc3Q7CkBAIC0yNjUsNyAr
NDU1LDcgQEAgc3RhdGljIHZvaWQgZmlsbE1lZGlhTGlzdENoYWluKENTU1J1bGUqIHJ1bGUsIEFy
cmF5PFR5cGVCdWlsZGVyOjpDU1M6OkNTU01lZGlhPioKICAgICB9CiB9CiAKLVBhc3NSZWZQdHI8
SW5zcGVjdG9yU3R5bGU+IEluc3BlY3RvclN0eWxlOjpjcmVhdGUoY29uc3QgSW5zcGVjdG9yQ1NT
SWQmIHN0eWxlSWQsIFBhc3NSZWZQdHI8Q1NTU3R5bGVEZWNsYXJhdGlvbj4gc3R5bGUsIEluc3Bl
Y3RvclN0eWxlU2hlZXQqIHBhcmVudFN0eWxlU2hlZXQpCitQYXNzUmVmUHRyPEluc3BlY3RvclN0
eWxlPiBJbnNwZWN0b3JTdHlsZTo6Y3JlYXRlV2l0aFN0eWxlU2hlZXQoY29uc3QgSW5zcGVjdG9y
Q1NTSWQmIHN0eWxlSWQsIFBhc3NSZWZQdHI8Q1NTU3R5bGVEZWNsYXJhdGlvbj4gc3R5bGUsIElu
c3BlY3RvclN0eWxlU2hlZXQqIHBhcmVudFN0eWxlU2hlZXQpCiB7CiAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBJbnNwZWN0b3JTdHlsZShzdHlsZUlkLCBzdHlsZSwgcGFyZW50U3R5bGVTaGVldCkp
OwogfQpAQCAtMjk5LDkgKzQ4OSw5IEBAIFBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkNTUzo6Q1NT
U3R5bGU+IEluc3BlY3RvclN0eWxlOjpidWlsZE9iamVjdEZvclN0eWxlKCkgY29uCiAgICAgcmV0
dXJuIHJlc3VsdC5yZWxlYXNlKCk7CiB9CiAKLVBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkFycmF5
PFR5cGVCdWlsZGVyOjpDU1M6OkNTU0NvbXB1dGVkU3R5bGVQcm9wZXJ0eT4gPiBJbnNwZWN0b3JT
dHlsZTo6YnVpbGRBcnJheUZvckNvbXB1dGVkU3R5bGUoKSBjb25zdAorUGFzc1JlZlB0cjxBcnJh
eTxUeXBlQnVpbGRlcjo6Q1NTOjpDU1NDb21wdXRlZFN0eWxlUHJvcGVydHk+ID4gSW5zcGVjdG9y
U3R5bGU6OmJ1aWxkQXJyYXlGb3JDb21wdXRlZFN0eWxlKCkgY29uc3QKIHsKLSAgICBSZWZQdHI8
VHlwZUJ1aWxkZXI6OkFycmF5PFR5cGVCdWlsZGVyOjpDU1M6OkNTU0NvbXB1dGVkU3R5bGVQcm9w
ZXJ0eT4gPiByZXN1bHQgPSBUeXBlQnVpbGRlcjo6QXJyYXk8VHlwZUJ1aWxkZXI6OkNTUzo6Q1NT
Q29tcHV0ZWRTdHlsZVByb3BlcnR5Pjo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPEFycmF5PFR5cGVC
dWlsZGVyOjpDU1M6OkNTU0NvbXB1dGVkU3R5bGVQcm9wZXJ0eT4gPiByZXN1bHQgPSBBcnJheTxU
eXBlQnVpbGRlcjo6Q1NTOjpDU1NDb21wdXRlZFN0eWxlUHJvcGVydHk+OjpjcmVhdGUoKTsKICAg
ICBWZWN0b3I8SW5zcGVjdG9yU3R5bGVQcm9wZXJ0eT4gcHJvcGVydGllczsKICAgICBwb3B1bGF0
ZUFsbFByb3BlcnRpZXMoJnByb3BlcnRpZXMpOwogCkBAIC0zMzgsNyArNTI4LDcgQEAgYm9vbCBJ
bnNwZWN0b3JTdHlsZTo6c2V0UHJvcGVydHlUZXh0KHVuc2lnbmVkIGluZGV4LCBjb25zdCBTdHJp
bmcmIHByb3BlcnR5VGV4dCwKICAgICBpZiAocHJvcGVydHlUZXh0LnN0cmlwV2hpdGVTcGFjZSgp
Lmxlbmd0aCgpKSB7CiAgICAgICAgIFJlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiB0ZW1wTXV0YWJs
ZVN0eWxlID0gU3R5bGVQcm9wZXJ0eVNldDo6Y3JlYXRlKCk7CiAgICAgICAgIFJlZlB0cjxDU1NS
dWxlU291cmNlRGF0YT4gc291cmNlRGF0YSA9IENTU1J1bGVTb3VyY2VEYXRhOjpjcmVhdGUoQ1NT
UnVsZVNvdXJjZURhdGE6OlNUWUxFX1JVTEUpOwotICAgICAgICBDU1NQYXJzZXIgcChDU1NTdHJp
Y3RNb2RlKTsKKyAgICAgICAgQ1NTUGFyc2VyIHAobV9zdHlsZS0+cGFyZW50U3R5bGVTaGVldCgp
LT5jb250ZW50cygpLT5wYXJzZXJDb250ZXh0KCkubW9kZSk7CiAgICAgICAgIHAucGFyc2VEZWNs
YXJhdGlvbih0ZW1wTXV0YWJsZVN0eWxlLmdldCgpLCBwcm9wZXJ0eVRleHQgKyAiICIgKyBib2d1
c1Byb3BlcnR5TmFtZSArICI6IG5vbmUiLCBzb3VyY2VEYXRhLCBtX3N0eWxlLT5wYXJlbnRTdHls
ZVNoZWV0KCktPmNvbnRlbnRzKCkpOwogICAgICAgICBWZWN0b3I8Q1NTUHJvcGVydHlTb3VyY2VE
YXRhPiYgcHJvcGVydHlEYXRhID0gc291cmNlRGF0YS0+c3R5bGVTb3VyY2VEYXRhLT5wcm9wZXJ0
eURhdGE7CiAgICAgICAgIHVuc2lnbmVkIHByb3BlcnR5Q291bnQgPSBwcm9wZXJ0eURhdGEuc2l6
ZSgpOwpAQCAtNzA2LDYgKzg5Niw0OCBAQCBOZXdMaW5lQW5kV2hpdGVzcGFjZSYgSW5zcGVjdG9y
U3R5bGU6Om5ld0xpbmVBbmRXaGl0ZXNwYWNlRGVsaW1pdGVycygpIGNvbnN0CiAgICAgcmV0dXJu
IG1fZm9ybWF0OwogfQogCitJbnNwZWN0b3JSdWxlOjpJbnNwZWN0b3JSdWxlKGNvbnN0IEluc3Bl
Y3RvckNTU0lkJiBpZCwgQ1NTUnVsZSogcnVsZSwgSW5zcGVjdG9yU3R5bGVTaGVldCogcGFyZW50
U3R5bGVTaGVldCkKKyAgICA6IG1faWQoaWQpCisgICAgLCBtX3J1bGUocnVsZSkKK3sKKyAgICBp
ZiAoIW1fcnVsZSkKKyAgICAgICAgcmV0dXJuOyAvLyBVTktOT1dOX1JVTEUKKworICAgIGlmICht
X3J1bGUtPmlzU3R5bGVSdWxlKCkpCisgICAgICAgIG1fc3R5bGUgPSBJbnNwZWN0b3JTdHlsZTo6
Y3JlYXRlV2l0aFN0eWxlU2hlZXQoaWQsIHN0YXRpY19jYXN0PENTU1N0eWxlUnVsZSo+KHJ1bGUp
LT5zdHlsZSgpLCBwYXJlbnRTdHlsZVNoZWV0KTsKKyAgICBlbHNlIGlmIChtX3J1bGUtPmlzUGFn
ZVJ1bGUoKSkKKyAgICAgICAgbV9zdHlsZSA9IEluc3BlY3RvclN0eWxlOjpjcmVhdGVXaXRoU3R5
bGVTaGVldChpZCwgc3RhdGljX2Nhc3Q8Q1NTUGFnZVJ1bGUqPihydWxlKS0+c3R5bGUoKSwgcGFy
ZW50U3R5bGVTaGVldCk7CisgICAgZWxzZSBpZiAobV9ydWxlLT5pc0ZvbnRGYWNlUnVsZSgpKQor
ICAgICAgICBtX3N0eWxlID0gSW5zcGVjdG9yU3R5bGU6OmNyZWF0ZVdpdGhTdHlsZVNoZWV0KGlk
LCBzdGF0aWNfY2FzdDxDU1NGb250RmFjZVJ1bGUqPihydWxlKS0+c3R5bGUoKSwgcGFyZW50U3R5
bGVTaGVldCk7CisgICAgZWxzZSBpZiAobV9ydWxlLT5pc01lZGlhUnVsZSgpKQorICAgICAgICBt
X2NoaWxkUnVsZXMgPSBhZG9wdFB0cihuZXcgSW5zcGVjdG9yUnVsZUxpc3QoKSk7Cit9CisKK0lu
c3BlY3RvclJ1bGU6OlR5cGUgSW5zcGVjdG9yUnVsZTo6dHlwZSgpIGNvbnN0Cit7CisgICAgaWYg
KCFtX3J1bGUpCisgICAgICAgIHJldHVybiBVTktOT1dOX1JVTEU7CisKKyAgICBzd2l0Y2ggKG1f
cnVsZS0+dHlwZSgpKSB7CisgICAgY2FzZSBDU1NSdWxlOjpTVFlMRV9SVUxFOgorICAgICAgICBy
ZXR1cm4gU1RZTEVfUlVMRTsKKyAgICBjYXNlIENTU1J1bGU6OkNIQVJTRVRfUlVMRToKKyAgICAg
ICAgcmV0dXJuIENIQVJTRVRfUlVMRTsKKyAgICBjYXNlIENTU1J1bGU6OklNUE9SVF9SVUxFOgor
ICAgICAgICByZXR1cm4gSU1QT1JUX1JVTEU7CisgICAgY2FzZSBDU1NSdWxlOjpNRURJQV9SVUxF
OgorICAgICAgICByZXR1cm4gTUVESUFfUlVMRTsKKyAgICBjYXNlIENTU1J1bGU6OkZPTlRfRkFD
RV9SVUxFOgorICAgICAgICByZXR1cm4gRk9OVF9GQUNFX1JVTEU7CisgICAgY2FzZSBDU1NSdWxl
OjpQQUdFX1JVTEU6CisgICAgICAgIHJldHVybiBQQUdFX1JVTEU7CisgICAgY2FzZSBDU1NSdWxl
OjpXRUJLSVRfS0VZRlJBTUVTX1JVTEU6CisgICAgICAgIHJldHVybiBLRVlGUkFNRVNfUlVMRTsK
KyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gVU5LTk9XTl9SVUxFOworICAgIH0KK30KKwog
UGFzc1JlZlB0cjxJbnNwZWN0b3JTdHlsZVNoZWV0PiBJbnNwZWN0b3JTdHlsZVNoZWV0OjpjcmVh
dGUoSW5zcGVjdG9yUGFnZUFnZW50KiBwYWdlQWdlbnQsIGNvbnN0IFN0cmluZyYgaWQsIFBhc3NS
ZWZQdHI8Q1NTU3R5bGVTaGVldD4gcGFnZVN0eWxlU2hlZXQsIFR5cGVCdWlsZGVyOjpDU1M6OlN0
eWxlU2hlZXRPcmlnaW46OkVudW0gb3JpZ2luLCBjb25zdCBTdHJpbmcmIGRvY3VtZW50VVJMLCBM
aXN0ZW5lciogbGlzdGVuZXIpCiB7CiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbnNwZWN0b3JT
dHlsZVNoZWV0KHBhZ2VBZ2VudCwgaWQsIHBhZ2VTdHlsZVNoZWV0LCBvcmlnaW4sIGRvY3VtZW50
VVJMLCBsaXN0ZW5lcikpOwpAQCAtNzU4LDM2ICs5OTAsMzkgQEAgYm9vbCBJbnNwZWN0b3JTdHls
ZVNoZWV0OjpzZXRUZXh0KGNvbnN0IFN0cmluZyYgdGV4dCkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCiAgICAgbV9wYXJzZWRTdHlsZVNoZWV0LT5zZXRUZXh0KHRleHQpOwotICAgIG1fZmxhdFJ1
bGVzLmNsZWFyKCk7CisgICAgbV9ydWxlcy5jbGVhcigpOwogCiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKIFN0cmluZyBJbnNwZWN0b3JTdHlsZVNoZWV0OjpydWxlU2VsZWN0b3IoY29uc3QgSW5zcGVj
dG9yQ1NTSWQmIGlkLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBDU1NTdHlsZVJ1bGUqIHJ1
bGUgPSBydWxlRm9ySWQoaWQpOwotICAgIGlmICghcnVsZSkgeworICAgIENTU1J1bGUqIHJ1bGUg
PSBydWxlRm9ySWQoaWQpOworICAgIGlmICghcnVsZSB8fCAhcnVsZS0+aXNTdHlsZVJ1bGUoKSkg
ewogICAgICAgICBlYyA9IE5PVF9GT1VORF9FUlI7CiAgICAgICAgIHJldHVybiAiIjsKICAgICB9
Ci0gICAgcmV0dXJuIHJ1bGUtPnNlbGVjdG9yVGV4dCgpOworCisgICAgcmV0dXJuIHN0YXRpY19j
YXN0PENTU1N0eWxlUnVsZSo+KHJ1bGUpLT5zZWxlY3RvclRleHQoKTsKIH0KIAogYm9vbCBJbnNw
ZWN0b3JTdHlsZVNoZWV0OjpzZXRSdWxlU2VsZWN0b3IoY29uc3QgSW5zcGVjdG9yQ1NTSWQmIGlk
LCBjb25zdCBTdHJpbmcmIHNlbGVjdG9yLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBDU1NT
dHlsZVJ1bGUqIHJ1bGUgPSBydWxlRm9ySWQoaWQpOwotICAgIGlmICghcnVsZSkgeworICAgIENT
U1J1bGUqIHJ1bGUgPSBydWxlRm9ySWQoaWQpOworICAgIGlmICghcnVsZSB8fCAhcnVsZS0+aXNT
dHlsZVJ1bGUoKSkgewogICAgICAgICBlYyA9IE5PVF9GT1VORF9FUlI7CiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICB9Ci0gICAgQ1NTU3R5bGVTaGVldCogc3R5bGVTaGVldCA9IHJ1bGUtPnBh
cmVudFN0eWxlU2hlZXQoKTsKKworICAgIENTU1N0eWxlUnVsZSogc3R5bGVSdWxlID0gc3RhdGlj
X2Nhc3Q8Q1NTU3R5bGVSdWxlKj4ocnVsZSk7CisgICAgQ1NTU3R5bGVTaGVldCogc3R5bGVTaGVl
dCA9IHN0eWxlUnVsZS0+cGFyZW50U3R5bGVTaGVldCgpOwogICAgIGlmICghc3R5bGVTaGVldCB8
fCAhZW5zdXJlUGFyc2VkRGF0YVJlYWR5KCkpIHsKICAgICAgICAgZWMgPSBOT1RfRk9VTkRfRVJS
OwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgcnVsZS0+c2V0U2VsZWN0b3JU
ZXh0KHNlbGVjdG9yKTsKLSAgICBSZWZQdHI8Q1NTUnVsZVNvdXJjZURhdGE+IHNvdXJjZURhdGEg
PSBydWxlU291cmNlRGF0YUZvcihydWxlLT5zdHlsZSgpKTsKKyAgICBzdHlsZVJ1bGUtPnNldFNl
bGVjdG9yVGV4dChzZWxlY3Rvcik7CisgICAgUmVmUHRyPENTU1J1bGVTb3VyY2VEYXRhPiBzb3Vy
Y2VEYXRhID0gcnVsZVNvdXJjZURhdGFGb3Ioc3R5bGVSdWxlLT5zdHlsZSgpKTsKICAgICBpZiAo
IXNvdXJjZURhdGEpIHsKICAgICAgICAgZWMgPSBOT1RfRk9VTkRfRVJSOwogICAgICAgICByZXR1
cm4gZmFsc2U7CkBAIC04MzEsMjIgKzEwNjYsMjUgQEAgQ1NTU3R5bGVSdWxlKiBJbnNwZWN0b3JT
dHlsZVNoZWV0OjphZGRSdWxlKGNvbnN0IFN0cmluZyYgc2VsZWN0b3IsIEV4Y2VwdGlvbkNvZGUK
IAogYm9vbCBJbnNwZWN0b3JTdHlsZVNoZWV0OjpkZWxldGVSdWxlKGNvbnN0IEluc3BlY3RvckNT
U0lkJiBpZCwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgUmVmUHRyPENTU1N0eWxlUnVsZT4g
cnVsZSA9IHJ1bGVGb3JJZChpZCk7Ci0gICAgaWYgKCFydWxlKSB7CisgICAgLy8gRklYTUU6IFRo
aXMgaXMgYSBzaW1wbGlmaWVkIGltcGxlbWVudGF0aW9uIHRoYXQgb25seSBoYW5kbGVzIGEgc3R5
bGUgcnVsZSByZW1vdmFsIHdoZW4gIkFkZCBydWxlIiB0byB0aGUgaW5zcGVjdG9yIHN0eWxlc2hl
ZXQgaXMgdW5kb25lLgorICAgIFJlZlB0cjxDU1NSdWxlPiBydWxlID0gcnVsZUZvcklkKGlkKTsK
KyAgICBpZiAoIXJ1bGUgfHwgIXJ1bGUtPmlzU3R5bGVSdWxlKCkpIHsKICAgICAgICAgZWMgPSBO
T1RfRk9VTkRfRVJSOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQorCisgICAgQVNTRVJU
KGlkLnBhdGhMZW5ndGgoKSA9PSAxKTsKICAgICBDU1NTdHlsZVNoZWV0KiBzdHlsZVNoZWV0ID0g
cnVsZS0+cGFyZW50U3R5bGVTaGVldCgpOwogICAgIGlmICghc3R5bGVTaGVldCB8fCAhZW5zdXJl
UGFyc2VkRGF0YVJlYWR5KCkpIHsKICAgICAgICAgZWMgPSBOT1RfRk9VTkRfRVJSOwogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgc3R5bGVTaGVldC0+ZGVsZXRlUnVsZShpZC5v
cmRpbmFsKCksIGVjKTsKKyAgICBzdHlsZVNoZWV0LT5kZWxldGVSdWxlKGlkLnBhdGhBdCgwKSwg
ZWMpOwogICAgIGlmIChlYykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgUmVmUHRyPENT
U1J1bGVTb3VyY2VEYXRhPiBzb3VyY2VEYXRhID0gcnVsZVNvdXJjZURhdGFGb3IocnVsZS0+c3R5
bGUoKSk7CisgICAgUmVmUHRyPENTU1J1bGVTb3VyY2VEYXRhPiBzb3VyY2VEYXRhID0gcnVsZVNv
dXJjZURhdGFGb3Ioc3RhdGljX2Nhc3Q8Q1NTU3R5bGVSdWxlKj4ocnVsZS5nZXQoKSktPnN0eWxl
KCkpOwogICAgIGlmICghc291cmNlRGF0YSkgewogICAgICAgICBlYyA9IE5PVF9GT1VORF9FUlI7
CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTg1OSwxNSArMTA5NywyNiBAQCBib29sIEluc3Bl
Y3RvclN0eWxlU2hlZXQ6OmRlbGV0ZVJ1bGUoY29uc3QgSW5zcGVjdG9yQ1NTSWQmIGlkLCBFeGNl
cHRpb25Db2RlJiBlYwogICAgIHJldHVybiB0cnVlOwogfQogCi1DU1NTdHlsZVJ1bGUqIEluc3Bl
Y3RvclN0eWxlU2hlZXQ6OnJ1bGVGb3JJZChjb25zdCBJbnNwZWN0b3JDU1NJZCYgaWQpIGNvbnN0
CitDU1NSdWxlKiBJbnNwZWN0b3JTdHlsZVNoZWV0OjpydWxlRm9ySWQoY29uc3QgSW5zcGVjdG9y
Q1NTSWQmIGlkKSBjb25zdAogewogICAgIGlmICghbV9wYWdlU3R5bGVTaGVldCkKICAgICAgICAg
cmV0dXJuIDA7CiAKICAgICBBU1NFUlQoIWlkLmlzRW1wdHkoKSk7Ci0gICAgZW5zdXJlRmxhdFJ1
bGVzKCk7Ci0gICAgcmV0dXJuIGlkLm9yZGluYWwoKSA+PSBtX2ZsYXRSdWxlcy5zaXplKCkgPyAw
IDogbV9mbGF0UnVsZXMuYXQoaWQub3JkaW5hbCgpKTsKKyAgICB1bnNpZ25lZCBpbmRleCA9IGlk
LnBhdGhBdCgwKTsKKyAgICBpZiAoaW5kZXggPj0gbV9wYWdlU3R5bGVTaGVldC0+bGVuZ3RoKCkp
CisgICAgICAgIHJldHVybiAwOworICAgIENTU1J1bGUqIGN1cnJlbnRSdWxlID0gbV9wYWdlU3R5
bGVTaGVldC0+aXRlbShpbmRleCk7CisgICAgZm9yIChzaXplX3QgaSA9IDE7IGkgPCBpZC5wYXRo
TGVuZ3RoKCk7ICsraSkgeworICAgICAgICBSZWZQdHI8Q1NTUnVsZUxpc3Q+IGNoaWxkcmVuID0g
YXNDU1NSdWxlTGlzdChjdXJyZW50UnVsZSk7CisgICAgICAgIGluZGV4ID0gaWQucGF0aEF0KGkp
OworICAgICAgICBpZiAoIWNoaWxkcmVuIHx8IGluZGV4ID49IGNoaWxkcmVuLT5sZW5ndGgoKSkK
KyAgICAgICAgICAgIHJldHVybiAwOworCisgICAgICAgIGN1cnJlbnRSdWxlID0gY2hpbGRyZW4t
Pml0ZW0oaW5kZXgpOworICAgIH0KIAorICAgIHJldHVybiBjdXJyZW50UnVsZTsKIH0KIAogUGFz
c1JlZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpDU1NTdHlsZVNoZWV0Qm9keT4gSW5zcGVjdG9yU3R5
bGVTaGVldDo6YnVpbGRPYmplY3RGb3JTdHlsZVNoZWV0KCkKQEAgLTg3NiwxMSArMTEyNSwxMSBA
QCBQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpDU1M6OkNTU1N0eWxlU2hlZXRCb2R5PiBJbnNwZWN0
b3JTdHlsZVNoZWV0OjpidWlsZE9iamVjdAogICAgIGlmICghc3R5bGVTaGVldCkKICAgICAgICAg
cmV0dXJuIDA7CiAKLSAgICBSZWZQdHI8Q1NTUnVsZUxpc3Q+IGNzc1J1bGVMaXN0ID0gYXNDU1NS
dWxlTGlzdChzdHlsZVNoZWV0KTsKKyAgICBlbnN1cmVSdWxlVHJlZSgpOwogCiAgICAgUmVmUHRy
PFR5cGVCdWlsZGVyOjpDU1M6OkNTU1N0eWxlU2hlZXRCb2R5PiByZXN1bHQgPSBUeXBlQnVpbGRl
cjo6Q1NTOjpDU1NTdHlsZVNoZWV0Qm9keTo6Y3JlYXRlKCkKICAgICAgICAgLnNldFN0eWxlU2hl
ZXRJZChpZCgpKQotICAgICAgICAuc2V0UnVsZXMoYnVpbGRBcnJheUZvclJ1bGVMaXN0KGNzc1J1
bGVMaXN0LmdldCgpKSk7CisgICAgICAgIC5zZXRSdWxlcyhidWlsZFRyZWVGb3JSdWxlTGlzdCgp
KTsKIAogICAgIFN0cmluZyBzdHlsZVNoZWV0VGV4dDsKICAgICBib29sIHN1Y2Nlc3MgPSBnZXRU
ZXh0KCZzdHlsZVNoZWV0VGV4dCk7CkBAIC05MDksMTcgKzExNTgsMTkgQEAgUGFzc1JlZlB0cjxU
eXBlQnVpbGRlcjo6Q1NTOjpDU1NTdHlsZVNoZWV0SGVhZGVyPiBJbnNwZWN0b3JTdHlsZVNoZWV0
OjpidWlsZE9iamUKICAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKIH0KIAotUGFzc1JlZlB0
cjxUeXBlQnVpbGRlcjo6Q1NTOjpDU1NSdWxlPiBJbnNwZWN0b3JTdHlsZVNoZWV0OjpidWlsZE9i
amVjdEZvclJ1bGUoQ1NTU3R5bGVSdWxlKiBydWxlKQorUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6
Q1NTOjpDU1NSdWxlPiBJbnNwZWN0b3JTdHlsZVNoZWV0OjpidWlsZE9iamVjdEZvclJ1bGUoQ1NT
UnVsZSogcnVsZSkKIHsKICAgICBDU1NTdHlsZVNoZWV0KiBzdHlsZVNoZWV0ID0gcGFnZVN0eWxl
U2hlZXQoKTsKICAgICBpZiAoIXN0eWxlU2hlZXQpCiAgICAgICAgIHJldHVybiAwOwogCisgICAg
QVNTRVJUKHJ1bGUtPmlzU3R5bGVSdWxlKCkpOworICAgIENTU1N0eWxlUnVsZSogc3R5bGVSdWxl
ID0gc3RhdGljX2Nhc3Q8Q1NTU3R5bGVSdWxlKj4ocnVsZSk7CiAgICAgUmVmUHRyPFR5cGVCdWls
ZGVyOjpDU1M6OkNTU1J1bGU+IHJlc3VsdCA9IFR5cGVCdWlsZGVyOjpDU1M6OkNTU1J1bGU6OmNy
ZWF0ZSgpCi0gICAgICAgIC5zZXRTZWxlY3RvclRleHQocnVsZS0+c2VsZWN0b3JUZXh0KCkpCi0g
ICAgICAgIC5zZXRTb3VyY2VMaW5lKHJ1bGUtPnN0eWxlUnVsZSgpLT5zb3VyY2VMaW5lKCkpCisg
ICAgICAgIC5zZXRTZWxlY3RvclRleHQoc3R5bGVSdWxlLT5zZWxlY3RvclRleHQoKSkKKyAgICAg
ICAgLnNldFNvdXJjZUxpbmUoc3R5bGVSdWxlLT5zdHlsZVJ1bGUoKS0+c291cmNlTGluZSgpKQog
ICAgICAgICAuc2V0T3JpZ2luKG1fb3JpZ2luKQotICAgICAgICAuc2V0U3R5bGUoYnVpbGRPYmpl
Y3RGb3JTdHlsZShydWxlLT5zdHlsZSgpKSk7CisgICAgICAgIC5zZXRTdHlsZShidWlsZE9iamVj
dEZvclN0eWxlKHN0eWxlUnVsZS0+c3R5bGUoKSkpOwogCiAgICAgLy8gInNvdXJjZVVSTCIgaXMg
cHJlc2VudCBvbmx5IGZvciByZWd1bGFyIHJ1bGVzLCBvdGhlcndpc2UgIm9yaWdpbiIgc2hvdWxk
IGJlIHVzZWQgaW4gdGhlIGZyb250ZW5kLgogICAgIGlmIChtX29yaWdpbiA9PSBUeXBlQnVpbGRl
cjo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luOjpSZWd1bGFyKQpAQCAtOTMzLDcgKzExODQsNyBAQCBQ
YXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpDU1M6OkNTU1J1bGU+IEluc3BlY3RvclN0eWxlU2hlZXQ6
OmJ1aWxkT2JqZWN0Rm9yUnVsZShDUwogCiAgICAgUmVmUHRyPENTU1J1bGVTb3VyY2VEYXRhPiBz
b3VyY2VEYXRhOwogICAgIGlmIChlbnN1cmVQYXJzZWREYXRhUmVhZHkoKSkKLSAgICAgICAgc291
cmNlRGF0YSA9IHJ1bGVTb3VyY2VEYXRhRm9yKHJ1bGUtPnN0eWxlKCkpOworICAgICAgICBzb3Vy
Y2VEYXRhID0gcnVsZVNvdXJjZURhdGFGb3Ioc3R5bGVSdWxlLT5zdHlsZSgpKTsKICAgICBpZiAo
c291cmNlRGF0YSkKICAgICAgICAgcmVzdWx0LT5zZXRTZWxlY3RvclJhbmdlKGJ1aWxkU291cmNl
UmFuZ2VPYmplY3Qoc291cmNlRGF0YS0+cnVsZUhlYWRlclJhbmdlKSk7CiAKQEAgLTEwMTgsMTEg
KzEyNjksMTEgQEAgYm9vbCBJbnNwZWN0b3JTdHlsZVNoZWV0OjpnZXRUZXh0KFN0cmluZyogcmVz
dWx0KSBjb25zdAogCiBDU1NTdHlsZURlY2xhcmF0aW9uKiBJbnNwZWN0b3JTdHlsZVNoZWV0Ojpz
dHlsZUZvcklkKGNvbnN0IEluc3BlY3RvckNTU0lkJiBpZCkgY29uc3QKIHsKLSAgICBDU1NTdHls
ZVJ1bGUqIHJ1bGUgPSBydWxlRm9ySWQoaWQpOwotICAgIGlmICghcnVsZSkKKyAgICBDU1NSdWxl
KiBydWxlID0gcnVsZUZvcklkKGlkKTsKKyAgICBpZiAoIXJ1bGUgfHwgIXJ1bGUtPmlzU3R5bGVS
dWxlKCkpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgcmV0dXJuIHJ1bGUtPnN0eWxlKCk7Cisg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PENTU1N0eWxlUnVsZSo+KHJ1bGUpLT5zdHlsZSgpOwogfQog
CiB2b2lkIEluc3BlY3RvclN0eWxlU2hlZXQ6OmZpcmVTdHlsZVNoZWV0Q2hhbmdlZCgpCkBAIC0x
MDM5LDcgKzEyOTAsNyBAQCBQYXNzUmVmUHRyPEluc3BlY3RvclN0eWxlPiBJbnNwZWN0b3JTdHls
ZVNoZWV0OjppbnNwZWN0b3JTdHlsZUZvcklkKGNvbnN0IEluc3BlYwogCiAgICAgSW5zcGVjdG9y
U3R5bGVNYXA6Oml0ZXJhdG9yIGl0ID0gbV9pbnNwZWN0b3JTdHlsZXMuZmluZChzdHlsZSk7CiAg
ICAgaWYgKGl0ID09IG1faW5zcGVjdG9yU3R5bGVzLmVuZCgpKSB7Ci0gICAgICAgIFJlZlB0cjxJ
bnNwZWN0b3JTdHlsZT4gaW5zcGVjdG9yU3R5bGUgPSBJbnNwZWN0b3JTdHlsZTo6Y3JlYXRlKGlk
LCBzdHlsZSwgdGhpcyk7CisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JTdHlsZT4gaW5zcGVjdG9y
U3R5bGUgPSBJbnNwZWN0b3JTdHlsZTo6Y3JlYXRlV2l0aFN0eWxlU2hlZXQoaWQsIHN0eWxlLCB0
aGlzKTsKICAgICAgICAgcmV0dXJuIGluc3BlY3RvclN0eWxlLnJlbGVhc2UoKTsKICAgICB9CiAg
ICAgcmV0dXJuIGl0LT5zZWNvbmQ7CkBAIC0xMDU1LDEyICsxMzA2LDEyIEBAIHZvaWQgSW5zcGVj
dG9yU3R5bGVTaGVldDo6Zm9yZ2V0SW5zcGVjdG9yU3R5bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbiog
c3R5bGUpCiAgICAgbV9pbnNwZWN0b3JTdHlsZXMucmVtb3ZlKHN0eWxlKTsKIH0KIAotSW5zcGVj
dG9yQ1NTSWQgSW5zcGVjdG9yU3R5bGVTaGVldDo6cnVsZU9yU3R5bGVJZChDU1NTdHlsZURlY2xh
cmF0aW9uKiBzdHlsZSkgY29uc3QKK0luc3BlY3RvckNTU0lkIEluc3BlY3RvclN0eWxlU2hlZXQ6
OnJ1bGVPclN0eWxlSWQoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUpCiB7Ci0gICAgdW5zaWdu
ZWQgaW5kZXggPSBydWxlSW5kZXhCeVN0eWxlKHN0eWxlKTsKLSAgICBpZiAoaW5kZXggIT0gVUlO
VF9NQVgpCi0gICAgICAgIHJldHVybiBJbnNwZWN0b3JDU1NJZChpZCgpLCBpbmRleCk7Ci0gICAg
cmV0dXJuIEluc3BlY3RvckNTU0lkKCk7CisgICAgVmVjdG9yPGludD4gcGF0aCA9IHJ1bGVQYXRo
QnlTdHlsZShzdHlsZSk7CisgICAgaWYgKHBhdGguaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4g
SW5zcGVjdG9yQ1NTSWQoKTsKKyAgICByZXR1cm4gSW5zcGVjdG9yQ1NTSWQoaWQoKSwgcGF0aCk7
CiB9CiAKIERvY3VtZW50KiBJbnNwZWN0b3JTdHlsZVNoZWV0Ojpvd25lckRvY3VtZW50KCkgY29u
c3QKQEAgLTEwNjgsMjIgKzEzMTksODEgQEAgRG9jdW1lbnQqIEluc3BlY3RvclN0eWxlU2hlZXQ6
Om93bmVyRG9jdW1lbnQoKSBjb25zdAogICAgIHJldHVybiBtX3BhZ2VTdHlsZVNoZWV0LT5vd25l
ckRvY3VtZW50KCk7CiB9CiAKLVJlZlB0cjxDU1NSdWxlU291cmNlRGF0YT4gSW5zcGVjdG9yU3R5
bGVTaGVldDo6cnVsZVNvdXJjZURhdGFGb3IoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUpIGNv
bnN0CitQYXNzUmVmUHRyPENTU1J1bGVTb3VyY2VEYXRhPiBJbnNwZWN0b3JTdHlsZVNoZWV0Ojpy
dWxlU291cmNlRGF0YUZvcihDU1NSdWxlKiBydWxlKQogewotICAgIHJldHVybiBtX3BhcnNlZFN0
eWxlU2hlZXQtPnJ1bGVTb3VyY2VEYXRhQXQocnVsZUluZGV4QnlTdHlsZShzdHlsZSkpOworICAg
IFZlY3RvcjxpbnQ+IHBhdGg7CisgICAgaWYgKCFlbnN1cmVTb3VyY2VEYXRhKCkpCisgICAgICAg
IHJldHVybiAwOworICAgIGVuc3VyZVJ1bGVUcmVlKCk7CisgICAgUnVsZVBhdGhCdWlsZGVyIGJ1
aWxkZXIocnVsZSwgcGF0aCk7CisgICAgUnVsZVZpc2l0b3I6OmZvclJ1bGVzKGFzQ1NTUnVsZUxp
c3QobV9wYWdlU3R5bGVTaGVldC5nZXQoKSksIGJ1aWxkZXIpOworICAgIGlmICghYnVpbGRlci5m
b3VuZCgpKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gbV9wYXJzZWRTdHlsZVNoZWV0
LT5ydWxlU291cmNlRGF0YUF0KHBhdGgpOwogfQogCi11bnNpZ25lZCBJbnNwZWN0b3JTdHlsZVNo
ZWV0OjpydWxlSW5kZXhCeVN0eWxlKENTU1N0eWxlRGVjbGFyYXRpb24qIHBhZ2VTdHlsZSkgY29u
c3QKK1Bhc3NSZWZQdHI8Q1NTUnVsZVNvdXJjZURhdGE+IEluc3BlY3RvclN0eWxlU2hlZXQ6OnJ1
bGVTb3VyY2VEYXRhRm9yKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlKQogewotICAgIGVuc3Vy
ZUZsYXRSdWxlcygpOwotICAgIHVuc2lnbmVkIGluZGV4ID0gMDsKLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwLCBzaXplID0gbV9mbGF0UnVsZXMuc2l6ZSgpOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAg
ICAgIGlmIChtX2ZsYXRSdWxlcy5hdChpKS0+c3R5bGUoKSA9PSBwYWdlU3R5bGUpCi0gICAgICAg
ICAgICByZXR1cm4gaW5kZXg7CisgICAgVmVjdG9yPGludD4gcGF0aCA9IHJ1bGVQYXRoQnlTdHls
ZShzdHlsZSk7CisgICAgaWYgKHBhdGguaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gMDsKKyAg
ICByZXR1cm4gbV9wYXJzZWRTdHlsZVNoZWV0LT5ydWxlU291cmNlRGF0YUF0KHBhdGgpOworfQog
Ci0gICAgICAgICsraW5kZXg7Citib29sIEluc3BlY3RvclN0eWxlU2hlZXQ6OnJ1bGVQYXRoQnlT
dHlsZUludGVybmFsKENTU1N0eWxlRGVjbGFyYXRpb24qIHBhZ2VTdHlsZSwgSW5zcGVjdG9yUnVs
ZUxpc3QqIHJ1bGVMaXN0LCBWZWN0b3I8aW50PiYgcGF0aCkKK3sKKyAgICBBU1NFUlQocnVsZUxp
c3QpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcnVsZUxpc3QtPnNpemUoKTsgKytpKSB7
CisgICAgICAgIEluc3BlY3RvclJ1bGUqIGNoaWxkUnVsZSA9IHJ1bGVMaXN0LT5hdChpKS5nZXQo
KTsKKyAgICAgICAgaWYgKCFjaGlsZFJ1bGUpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgc3dpdGNoIChjaGlsZFJ1bGUtPnR5cGUoKSkgeworICAgICAgICBjYXNlIEluc3BlY3RvclJ1
bGU6OlNUWUxFX1JVTEU6CisgICAgICAgICAgICBBU1NFUlQoY2hpbGRSdWxlLT5jc3NSdWxlKCkp
OworICAgICAgICAgICAgQVNTRVJUKGNoaWxkUnVsZS0+Y3NzUnVsZSgpLT5pc1N0eWxlUnVsZSgp
KTsKKyAgICAgICAgICAgIGlmIChzdGF0aWNfY2FzdDxDU1NTdHlsZVJ1bGUqPihjaGlsZFJ1bGUt
PmNzc1J1bGUoKSktPnN0eWxlKCkgPT0gcGFnZVN0eWxlKSB7CisgICAgICAgICAgICAgICAgcGF0
aC5hcHBlbmQoaSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbnNwZWN0b3JSdWxlOjpNRURJQV9S
VUxFOiB7CisgICAgICAgICAgICBBU1NFUlQoY2hpbGRSdWxlLT5jYW5IYXZlQ2hpbGRSdWxlcygp
KTsKKyAgICAgICAgICAgIHBhdGguYXBwZW5kKGkpOworICAgICAgICAgICAgYm9vbCBmb3VuZCA9
IHJ1bGVQYXRoQnlTdHlsZUludGVybmFsKHBhZ2VTdHlsZSwgY2hpbGRSdWxlLT5jaGlsZFJ1bGVM
aXN0KCksIHBhdGgpOworICAgICAgICAgICAgaWYgKGZvdW5kKQorICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICAgICAgcGF0aC5yZW1vdmVMYXN0KCk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEluc3BlY3RvclJ1bGU6OlBBR0VfUlVMRToK
KyAgICAgICAgICAgIEFTU0VSVChjaGlsZFJ1bGUtPmNzc1J1bGUoKSk7CisgICAgICAgICAgICBB
U1NFUlQoY2hpbGRSdWxlLT5jc3NSdWxlKCktPmlzUGFnZVJ1bGUoKSk7CisgICAgICAgICAgICBp
ZiAoc3RhdGljX2Nhc3Q8Q1NTUGFnZVJ1bGUqPihjaGlsZFJ1bGUtPmNzc1J1bGUoKSktPnN0eWxl
KCkgPT0gcGFnZVN0eWxlKSB7CisgICAgICAgICAgICAgICAgcGF0aC5hcHBlbmQoaSk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBJbnNwZWN0b3JSdWxlOjpGT05UX0ZBQ0VfUlVMRToKKyAgICAgICAg
ICAgIEFTU0VSVChjaGlsZFJ1bGUtPmNzc1J1bGUoKSk7CisgICAgICAgICAgICBBU1NFUlQoY2hp
bGRSdWxlLT5jc3NSdWxlKCktPmlzRm9udEZhY2VSdWxlKCkpOworICAgICAgICAgICAgaWYgKHN0
YXRpY19jYXN0PENTU0ZvbnRGYWNlUnVsZSo+KGNoaWxkUnVsZS0+Y3NzUnVsZSgpKS0+c3R5bGUo
KSA9PSBwYWdlU3R5bGUpIHsKKyAgICAgICAgICAgICAgICBwYXRoLmFwcGVuZChpKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICB9
Ci0gICAgcmV0dXJuIFVJTlRfTUFYOworICAgIHJldHVybiBmYWxzZTsKK30KKworVmVjdG9yPGlu
dD4gSW5zcGVjdG9yU3R5bGVTaGVldDo6cnVsZVBhdGhCeVN0eWxlKENTU1N0eWxlRGVjbGFyYXRp
b24qIHBhZ2VTdHlsZSkKK3sKKyAgICBWZWN0b3I8aW50PiBwYXRoOworICAgIGlmICghcnVsZVBh
dGhCeVN0eWxlSW50ZXJuYWwocGFnZVN0eWxlLCBydWxlVHJlZSgpLCBwYXRoKSkKKyAgICAgICAg
cGF0aC5jbGVhcigpOyAvLyBDbGVhciBpbiB0aGUgY2FzZSBvZiBhbiBlcnJvci4KKyAgICByZXR1
cm4gcGF0aDsKIH0KIAogYm9vbCBJbnNwZWN0b3JTdHlsZVNoZWV0OjplbnN1cmVQYXJzZWREYXRh
UmVhZHkoKQpAQCAtMTEwMiw3ICsxNDEyLDcgQEAgYm9vbCBJbnNwZWN0b3JTdHlsZVNoZWV0Ojpl
bnN1cmVUZXh0KCkgY29uc3QKICAgICBib29sIHN1Y2Nlc3MgPSBvcmlnaW5hbFN0eWxlU2hlZXRU
ZXh0KCZ0ZXh0KTsKICAgICBpZiAoc3VjY2VzcykKICAgICAgICAgbV9wYXJzZWRTdHlsZVNoZWV0
LT5zZXRUZXh0KHRleHQpOwotICAgIC8vIE5vIG5lZWQgdG8gY2xlYXIgbV9mbGF0UnVsZXMgaGVy
ZSAtIGl0J3MgZW1wdHkuCisgICAgLy8gTm8gbmVlZCB0byBjbGVhciBtX3J1bGVzIGhlcmUgLSBp
dCdzIGVtcHR5LgogCiAgICAgcmV0dXJuIHN1Y2Nlc3M7CiB9CkBAIC0xMTE2LDE4ICsxNDI2LDIw
IEBAIGJvb2wgSW5zcGVjdG9yU3R5bGVTaGVldDo6ZW5zdXJlU291cmNlRGF0YSgpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAogICAgIFJlZlB0cjxTdHlsZVNoZWV0Q29udGVudHM+IG5ld1N0eWxl
U2hlZXQgPSBTdHlsZVNoZWV0Q29udGVudHM6OmNyZWF0ZSgpOwotICAgIENTU1BhcnNlciBwKENT
U1N0cmljdE1vZGUpOworICAgIENTU1BhcnNlciBwKG1fcGFnZVN0eWxlU2hlZXQtPmNvbnRlbnRz
KCktPnBhcnNlckNvbnRleHQoKS5tb2RlKTsKICAgICBPd25QdHI8UnVsZVNvdXJjZURhdGFMaXN0
PiBydWxlU291cmNlRGF0YVJlc3VsdCA9IGFkb3B0UHRyKG5ldyBSdWxlU291cmNlRGF0YUxpc3Qo
KSk7CiAgICAgcC5wYXJzZVNoZWV0KG5ld1N0eWxlU2hlZXQuZ2V0KCksIG1fcGFyc2VkU3R5bGVT
aGVldC0+dGV4dCgpLCAwLCBydWxlU291cmNlRGF0YVJlc3VsdC5nZXQoKSk7CiAgICAgbV9wYXJz
ZWRTdHlsZVNoZWV0LT5zZXRTb3VyY2VEYXRhKHJ1bGVTb3VyY2VEYXRhUmVzdWx0LnJlbGVhc2Uo
KSk7CiAgICAgcmV0dXJuIG1fcGFyc2VkU3R5bGVTaGVldC0+aGFzU291cmNlRGF0YSgpOwogfQog
Ci12b2lkIEluc3BlY3RvclN0eWxlU2hlZXQ6OmVuc3VyZUZsYXRSdWxlcygpIGNvbnN0Cit2b2lk
IEluc3BlY3RvclN0eWxlU2hlZXQ6OmVuc3VyZVJ1bGVUcmVlKCkKIHsKICAgICAvLyBXZSBhcmUg
ZmluZSB3aXRoIHJlZG9pbmcgdGhpcyBmb3IgZW1wdHkgc3R5bGVzaGVldHMgYXMgdGhpcyB3aWxs
IHJ1biBmYXN0LgotICAgIGlmIChtX2ZsYXRSdWxlcy5pc0VtcHR5KCkpCi0gICAgICAgIGNvbGxl
Y3RGbGF0UnVsZXMoYXNDU1NSdWxlTGlzdChwYWdlU3R5bGVTaGVldCgpKSwgJm1fZmxhdFJ1bGVz
KTsKKyAgICBpZiAobV9ydWxlcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgSW5zcGVjdG9yUnVsZVRy
ZWVCdWlsZGVyIGJ1aWxkZXIodGhpcywgJm1fcnVsZXMpOworICAgICAgICBSdWxlVmlzaXRvcjo6
Zm9yUnVsZXMoYXNDU1NSdWxlTGlzdChtX3BhZ2VTdHlsZVNoZWV0LmdldCgpKSwgYnVpbGRlcik7
CisgICAgfQogfQogCiBib29sIEluc3BlY3RvclN0eWxlU2hlZXQ6OnNldFN0eWxlVGV4dChDU1NT
dHlsZURlY2xhcmF0aW9uKiBzdHlsZSwgY29uc3QgU3RyaW5nJiB0ZXh0KQpAQCAtMTE3NSwzMCAr
MTQ4NywyNyBAQCBib29sIEluc3BlY3RvclN0eWxlU2hlZXQ6OnN0eWxlU2hlZXRUZXh0V2l0aENo
YW5nZWRTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9uKiBzdAogICAgIHJldHVybiB0cnVlOwogfQog
Ci1JbnNwZWN0b3JDU1NJZCBJbnNwZWN0b3JTdHlsZVNoZWV0OjpydWxlSWQoQ1NTU3R5bGVSdWxl
KiBydWxlKSBjb25zdAorSW5zcGVjdG9yQ1NTSWQgSW5zcGVjdG9yU3R5bGVTaGVldDo6cnVsZUlk
KENTU1J1bGUqIHJ1bGUpCiB7Ci0gICAgcmV0dXJuIHJ1bGVPclN0eWxlSWQocnVsZS0+c3R5bGUo
KSk7CisgICAgcmV0dXJuIGZpbmRSdWxlSWQocnVsZSwgcnVsZVRyZWUoKSk7CiB9CiAKLXZvaWQg
SW5zcGVjdG9yU3R5bGVTaGVldDo6cmV2YWxpZGF0ZVN0eWxlKENTU1N0eWxlRGVjbGFyYXRpb24q
IHBhZ2VTdHlsZSkKKy8vIHN0YXRpYworSW5zcGVjdG9yQ1NTSWQgSW5zcGVjdG9yU3R5bGVTaGVl
dDo6ZmluZFJ1bGVJZChDU1NSdWxlKiBydWxlLCBJbnNwZWN0b3JSdWxlTGlzdCogcnVsZUxpc3Qp
CiB7Ci0gICAgaWYgKG1faXNSZXZhbGlkYXRpbmcpCi0gICAgICAgIHJldHVybjsKKyAgICBmb3Ig
KHNpemVfdCBpID0gMCwgc2l6ZSA9IHJ1bGVMaXN0LT5zaXplKCk7IGkgPCBzaXplOyArK2kpIHsK
KyAgICAgICAgaWYgKHJ1bGVMaXN0LT5hdChpKS0+Y3NzUnVsZSgpID09IHJ1bGUpCisgICAgICAg
ICAgICByZXR1cm4gcnVsZUxpc3QtPmF0KGkpLT5pZCgpOwogCi0gICAgbV9pc1JldmFsaWRhdGlu
ZyA9IHRydWU7Ci0gICAgZW5zdXJlRmxhdFJ1bGVzKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0g
MCwgc2l6ZSA9IG1fZmxhdFJ1bGVzLnNpemUoKTsgaSA8IHNpemU7ICsraSkgewotICAgICAgICBD
U1NTdHlsZVJ1bGUqIHBhcnNlZFJ1bGUgPSBtX2ZsYXRSdWxlcy5hdChpKTsKLSAgICAgICAgaWYg
KHBhcnNlZFJ1bGUtPnN0eWxlKCkgPT0gcGFnZVN0eWxlKSB7Ci0gICAgICAgICAgICBpZiAocGFy
c2VkUnVsZS0+c3R5bGVSdWxlKCktPnByb3BlcnRpZXMoKS0+YXNUZXh0KCkgIT0gcGFnZVN0eWxl
LT5jc3NUZXh0KCkpIHsKLSAgICAgICAgICAgICAgICAvLyBDbGVhciB0aGUgZGlzYWJsZWQgcHJv
cGVydGllcyBmb3IgdGhlIGludmFsaWQgc3R5bGUgaGVyZS4KLSAgICAgICAgICAgICAgICBtX2lu
c3BlY3RvclN0eWxlcy5yZW1vdmUocGFnZVN0eWxlKTsKLSAgICAgICAgICAgICAgICBzZXRTdHls
ZVRleHQocGFnZVN0eWxlLCBwYWdlU3R5bGUtPmNzc1RleHQoKSk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgSW5zcGVjdG9yUnVsZUxpc3QqIGNoaWxkUnVsZUxp
c3QgPSBydWxlTGlzdC0+YXQoaSktPmNoaWxkUnVsZUxpc3QoKTsKKyAgICAgICAgaWYgKGNoaWxk
UnVsZUxpc3QpIHsKKyAgICAgICAgICAgIEluc3BlY3RvckNTU0lkIGlkID0gZmluZFJ1bGVJZChy
dWxlLCBjaGlsZFJ1bGVMaXN0KTsKKyAgICAgICAgICAgIGlmICghaWQuaXNFbXB0eSgpKQorICAg
ICAgICAgICAgICAgIHJldHVybiBpZDsKICAgICAgICAgfQogICAgIH0KLSAgICBtX2lzUmV2YWxp
ZGF0aW5nID0gZmFsc2U7CisKKyAgICByZXR1cm4gSW5zcGVjdG9yQ1NTSWQoKTsKIH0KIAogYm9v
bCBJbnNwZWN0b3JTdHlsZVNoZWV0OjpvcmlnaW5hbFN0eWxlU2hlZXRUZXh0KFN0cmluZyogcmVz
dWx0KSBjb25zdApAQCAtMTI0MywzOCArMTU1MiwyNiBAQCBib29sIEluc3BlY3RvclN0eWxlU2hl
ZXQ6OmlubGluZVN0eWxlU2hlZXRUZXh0KFN0cmluZyogcmVzdWx0KSBjb25zdAogICAgIHJldHVy
biB0cnVlOwogfQogCi1QYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpBcnJheTxUeXBlQnVpbGRlcjo6
Q1NTOjpDU1NSdWxlPiA+IEluc3BlY3RvclN0eWxlU2hlZXQ6OmJ1aWxkQXJyYXlGb3JSdWxlTGlz
dChDU1NSdWxlTGlzdCogcnVsZUxpc3QpCit2b2lkIEluc3BlY3RvclN0eWxlU2hlZXQ6OnByb2Nl
c3NSdWxlTGlzdChJbnNwZWN0b3JSdWxlTGlzdCogcnVsZUxpc3QsIEFycmF5PFR5cGVCdWlsZGVy
OjpDU1M6OkNTU1J1bGU+KiByZXN1bHQpCiB7Ci0gICAgUmVmUHRyPFR5cGVCdWlsZGVyOjpBcnJh
eTxUeXBlQnVpbGRlcjo6Q1NTOjpDU1NSdWxlPiA+IHJlc3VsdCA9IFR5cGVCdWlsZGVyOjpBcnJh
eTxUeXBlQnVpbGRlcjo6Q1NTOjpDU1NSdWxlPjo6Y3JlYXRlKCk7Ci0gICAgaWYgKCFydWxlTGlz
dCkKLSAgICAgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7Ci0KLSAgICBSZWZQdHI8Q1NTUnVs
ZUxpc3Q+IHJlZlJ1bGVMaXN0ID0gcnVsZUxpc3Q7Ci0gICAgVmVjdG9yPENTU1N0eWxlUnVsZSo+
IHJ1bGVzOwotICAgIGNvbGxlY3RGbGF0UnVsZXMocmVmUnVsZUxpc3QsICZydWxlcyk7Ci0KLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwLCBzaXplID0gcnVsZXMuc2l6ZSgpOyBpIDwgc2l6ZTsgKytp
KQotICAgICAgICByZXN1bHQtPmFkZEl0ZW0oYnVpbGRPYmplY3RGb3JSdWxlKHJ1bGVzLmF0KGkp
KSk7Ci0KLSAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKKyAgICAvLyBGSVhNRTogVGVtcG9y
YXJpbHkgc2tpcCBhbGwgbm9uLXN0eWxlIHJ1bGVzLgorICAgIGZvciAodW5zaWduZWQgaSA9IDAs
IHNpemUgPSBydWxlTGlzdC0+c2l6ZSgpOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgIEluc3Bl
Y3RvclJ1bGUqIHJ1bGUgPSBydWxlTGlzdC0+YXQoaSkuZ2V0KCk7CisgICAgICAgIGlmIChydWxl
LT5jYW5IYXZlQ2hpbGRSdWxlcygpKSB7CisgICAgICAgICAgICBwcm9jZXNzUnVsZUxpc3QocnVs
ZS0+Y2hpbGRSdWxlTGlzdCgpLCByZXN1bHQpOworICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKHJ1bGUtPnR5cGUoKSA9PSBJbnNwZWN0b3JSdWxlOjpTVFlMRV9S
VUxFKQorICAgICAgICAgICAgcmVzdWx0LT5hZGRJdGVtKGJ1aWxkT2JqZWN0Rm9yUnVsZShydWxl
LT5jc3NSdWxlKCkpKTsKKyAgICB9CiB9CiAKLXZvaWQgSW5zcGVjdG9yU3R5bGVTaGVldDo6Y29s
bGVjdEZsYXRSdWxlcyhQYXNzUmVmUHRyPENTU1J1bGVMaXN0PiBydWxlTGlzdCwgVmVjdG9yPENT
U1N0eWxlUnVsZSo+KiByZXN1bHQpCitQYXNzUmVmUHRyPEFycmF5PFR5cGVCdWlsZGVyOjpDU1M6
OkNTU1J1bGU+ID4gSW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGRUcmVlRm9yUnVsZUxpc3QoKQog
ewotICAgIGlmICghcnVsZUxpc3QpCi0gICAgICAgIHJldHVybjsKLQotICAgIGZvciAodW5zaWdu
ZWQgaSA9IDAsIHNpemUgPSBydWxlTGlzdC0+bGVuZ3RoKCk7IGkgPCBzaXplOyArK2kpIHsKLSAg
ICAgICAgQ1NTUnVsZSogcnVsZSA9IHJ1bGVMaXN0LT5pdGVtKGkpOwotICAgICAgICBDU1NTdHls
ZVJ1bGUqIHN0eWxlUnVsZSA9IEluc3BlY3RvckNTU0FnZW50Ojphc0NTU1N0eWxlUnVsZShydWxl
KTsKLSAgICAgICAgaWYgKHN0eWxlUnVsZSkKLSAgICAgICAgICAgIHJlc3VsdC0+YXBwZW5kKHN0
eWxlUnVsZSk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgUmVmUHRyPENTU1J1bGVMaXN0
PiBjaGlsZFJ1bGVMaXN0ID0gYXNDU1NSdWxlTGlzdChydWxlKTsKLSAgICAgICAgICAgIGlmIChj
aGlsZFJ1bGVMaXN0KQotICAgICAgICAgICAgICAgIGNvbGxlY3RGbGF0UnVsZXMoY2hpbGRSdWxl
TGlzdCwgcmVzdWx0KTsKLSAgICAgICAgfQotICAgIH0KKyAgICBSZWZQdHI8QXJyYXk8VHlwZUJ1
aWxkZXI6OkNTUzo6Q1NTUnVsZT4gPiByZXN1bHQgPSBBcnJheTxUeXBlQnVpbGRlcjo6Q1NTOjpD
U1NSdWxlPjo6Y3JlYXRlKCk7CisgICAgSW5zcGVjdG9yUnVsZUxpc3QqIHJ1bGVMaXN0ID0gcnVs
ZVRyZWUoKTsKKyAgICBwcm9jZXNzUnVsZUxpc3QocnVsZUxpc3QsIHJlc3VsdC5nZXQoKSk7Cisg
ICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7CiB9CiAKIFBhc3NSZWZQdHI8SW5zcGVjdG9yU3R5
bGVTaGVldEZvcklubGluZVN0eWxlPiBJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU6
OmNyZWF0ZShJbnNwZWN0b3JQYWdlQWdlbnQqIHBhZ2VBZ2VudCwgY29uc3QgU3RyaW5nJiBpZCwg
UGFzc1JlZlB0cjxFbGVtZW50PiBlbGVtZW50LCBUeXBlQnVpbGRlcjo6Q1NTOjpTdHlsZVNoZWV0
T3JpZ2luOjpFbnVtIG9yaWdpbiwgTGlzdGVuZXIqIGxpc3RlbmVyKQpAQCAtMTI4OSw3ICsxNTg2
LDcgQEAgSW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlOjpJbnNwZWN0b3JTdHlsZVNo
ZWV0Rm9ySW5saW5lU3R5bGUoSW5zcGVjdG9yUGEKICAgICAsIG1faXNTdHlsZVRleHRWYWxpZChm
YWxzZSkKIHsKICAgICBBU1NFUlQobV9lbGVtZW50KTsKLSAgICBtX2luc3BlY3RvclN0eWxlID0g
SW5zcGVjdG9yU3R5bGU6OmNyZWF0ZShJbnNwZWN0b3JDU1NJZChpZCwgMCksIGlubGluZVN0eWxl
KCksIHRoaXMpOworICAgIG1faW5zcGVjdG9yU3R5bGUgPSBJbnNwZWN0b3JTdHlsZTo6Y3JlYXRl
V2l0aFN0eWxlU2hlZXQoSW5zcGVjdG9yQ1NTSWQ6OmZvcklubGluZVN0eWxlKGlkKSwgaW5saW5l
U3R5bGUoKSwgdGhpcyk7CiAgICAgbV9zdHlsZVRleHQgPSBtX2VsZW1lbnQtPmlzU3R5bGVkRWxl
bWVudCgpID8gbV9lbGVtZW50LT5nZXRBdHRyaWJ1dGUoInN0eWxlIikuc3RyaW5nKCkgOiBTdHJp
bmcoKTsKIH0KIApAQCAtMTI5Nyw3ICsxNTk0LDcgQEAgdm9pZCBJbnNwZWN0b3JTdHlsZVNoZWV0
Rm9ySW5saW5lU3R5bGU6OmRpZE1vZGlmeUVsZW1lbnRBdHRyaWJ1dGUoKQogewogICAgIG1faXNT
dHlsZVRleHRWYWxpZCA9IGZhbHNlOwogICAgIGlmIChtX2VsZW1lbnQtPmlzU3R5bGVkRWxlbWVu
dCgpICYmIG1fZWxlbWVudC0+c3R5bGUoKSAhPSBtX2luc3BlY3RvclN0eWxlLT5jc3NTdHlsZSgp
KQotICAgICAgICBtX2luc3BlY3RvclN0eWxlID0gSW5zcGVjdG9yU3R5bGU6OmNyZWF0ZShJbnNw
ZWN0b3JDU1NJZChpZCgpLCAwKSwgaW5saW5lU3R5bGUoKSwgdGhpcyk7CisgICAgICAgIG1faW5z
cGVjdG9yU3R5bGUgPSBJbnNwZWN0b3JTdHlsZTo6Y3JlYXRlV2l0aFN0eWxlU2hlZXQoSW5zcGVj
dG9yQ1NTSWQ6OmZvcklubGluZVN0eWxlKGlkKCkpLCBpbmxpbmVTdHlsZSgpLCB0aGlzKTsKICAg
ICBtX3J1bGVTb3VyY2VEYXRhLmNsZWFyKCk7CiB9CiAKQEAgLTEzNTUsNyArMTY1Miw3IEBAIGJv
b2wgSW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlOjplbnN1cmVQYXJzZWREYXRhUmVh
ZHkoKQogCiBQYXNzUmVmUHRyPEluc3BlY3RvclN0eWxlPiBJbnNwZWN0b3JTdHlsZVNoZWV0Rm9y
SW5saW5lU3R5bGU6Omluc3BlY3RvclN0eWxlRm9ySWQoY29uc3QgSW5zcGVjdG9yQ1NTSWQmIGlk
KQogewotICAgIEFTU0VSVF9VTlVTRUQoaWQsICFpZC5vcmRpbmFsKCkpOworICAgIEFTU0VSVF9V
TlVTRUQoaWQsICFpZC5wYXRoQXQoMCkpOwogICAgIHJldHVybiBtX2luc3BlY3RvclN0eWxlOwog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVT
aGVldC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuaApp
bmRleCAwYWY5ZjNjNWExYjgyMzJhMTg3MjA2YTQyY2FkYTEyYTdmNzBiZDI3Li41MTU4OWRiZWNj
OTM3OGE4M2YxOTU5NDIyNTQyMDY2MzVjYjZlYmU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmgKQEAgLTQzLDYgKzQzLDcgQEAgY2xhc3MgUGFy
c2VkU3R5bGVTaGVldDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBDU1NSdWxlOwog
Y2xhc3MgQ1NTUnVsZUxpc3Q7CiBjbGFzcyBDU1NTdHlsZURlY2xhcmF0aW9uOwogY2xhc3MgQ1NT
U3R5bGVSdWxlOwpAQCAtNTAsNDAgKzUxLDY4IEBAIGNsYXNzIENTU1N0eWxlU2hlZXQ7CiBjbGFz
cyBEb2N1bWVudDsKIGNsYXNzIEVsZW1lbnQ7CiBjbGFzcyBJbnNwZWN0b3JQYWdlQWdlbnQ7Citj
bGFzcyBJbnNwZWN0b3JSdWxlOwogY2xhc3MgSW5zcGVjdG9yU3R5bGVTaGVldDsKIGNsYXNzIE5v
ZGU7CitjbGFzcyBSdWxlVmlzaXRvcjsKIAogI2lmIEVOQUJMRShJTlNQRUNUT1IpCiAKIHR5cGVk
ZWYgU3RyaW5nIEVycm9yU3RyaW5nOwordHlwZWRlZiBWZWN0b3I8UmVmUHRyPEluc3BlY3RvclJ1
bGU+ID4gSW5zcGVjdG9yUnVsZUxpc3Q7CiAKIGNsYXNzIEluc3BlY3RvckNTU0lkIHsKIHB1Ymxp
YzoKLSAgICBJbnNwZWN0b3JDU1NJZCgpCi0gICAgICAgIDogbV9vcmRpbmFsKDApCisgICAgc3Rh
dGljIEluc3BlY3RvckNTU0lkIGZvcklubGluZVN0eWxlKGNvbnN0IFN0cmluZyYgc3R5bGVTaGVl
dElkKQogICAgIHsKKyAgICAgICAgVmVjdG9yPGludD4gcGF0aDsKKyAgICAgICAgcGF0aC5hcHBl
bmQoMCk7CisgICAgICAgIHJldHVybiBJbnNwZWN0b3JDU1NJZChzdHlsZVNoZWV0SWQsIHBhdGgp
OwogICAgIH0KIAorICAgIHN0YXRpYyBJbnNwZWN0b3JDU1NJZCBmb3JQYXJlbnRQYXRoKGNvbnN0
IFN0cmluZyYgc3R5bGVTaGVldElkLCBjb25zdCBWZWN0b3I8aW50PiYgcGFyZW50UGF0aCwgaW50
IGluZGV4KQorICAgIHsKKyAgICAgICAgVmVjdG9yPGludD4gcGF0aChwYXJlbnRQYXRoKTsKKyAg
ICAgICAgcGF0aC5hcHBlbmQoaW5kZXgpOworICAgICAgICByZXR1cm4gSW5zcGVjdG9yQ1NTSWQo
c3R5bGVTaGVldElkLCBwYXRoKTsKKyAgICB9CisKKyAgICBJbnNwZWN0b3JDU1NJZCgpIHsgfQor
CiAgICAgZXhwbGljaXQgSW5zcGVjdG9yQ1NTSWQoUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFs
dWUpCiAgICAgewogICAgICAgICBpZiAoIXZhbHVlLT5nZXRTdHJpbmcoInN0eWxlU2hlZXRJZCIs
ICZtX3N0eWxlU2hlZXRJZCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIAotICAgICAg
ICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IG9yZGluYWxWYWx1ZSA9IHZhbHVlLT5nZXQoIm9yZGlu
YWwiKTsKLSAgICAgICAgaWYgKCFvcmRpbmFsVmFsdWUgfHwgIW9yZGluYWxWYWx1ZS0+YXNOdW1i
ZXIoJm1fb3JkaW5hbCkpCisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gaW5kZXhWYWx1
ZXMgPSB2YWx1ZS0+Z2V0QXJyYXkoInBhdGgiKTsKKyAgICAgICAgaWYgKCFpbmRleFZhbHVlcykg
ewogICAgICAgICAgICAgbV9zdHlsZVNoZWV0SWQgPSAiIjsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW5kZXhWYWx1ZXMt
Pmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgICAgIGludCBpbmRleDsKKyAgICAgICAgICAgIGlm
ICghaW5kZXhWYWx1ZXMtPmdldChpKS0+YXNOdW1iZXIoJmluZGV4KSkgeworICAgICAgICAgICAg
ICAgIG1fc3R5bGVTaGVldElkID0gIiI7CisgICAgICAgICAgICAgICAgbV9wYXRoLmNsZWFyKCk7
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9w
YXRoLmFwcGVuZChpbmRleCk7CisgICAgICAgIH0KICAgICB9CiAKLSAgICBJbnNwZWN0b3JDU1NJ
ZChjb25zdCBTdHJpbmcmIHN0eWxlU2hlZXRJZCwgdW5zaWduZWQgb3JkaW5hbCkKKyAgICBJbnNw
ZWN0b3JDU1NJZChjb25zdCBTdHJpbmcmIHN0eWxlU2hlZXRJZCwgVmVjdG9yPGludD4mIHBhdGgp
CiAgICAgICAgIDogbV9zdHlsZVNoZWV0SWQoc3R5bGVTaGVldElkKQotICAgICAgICAsIG1fb3Jk
aW5hbChvcmRpbmFsKQorICAgICAgICAsIG1fcGF0aChwYXRoKQogICAgIHsKICAgICB9CiAKICAg
ICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX3N0eWxlU2hlZXRJZC5pc0VtcHR5KCk7
IH0KIAogICAgIGNvbnN0IFN0cmluZyYgc3R5bGVTaGVldElkKCkgY29uc3QgeyByZXR1cm4gbV9z
dHlsZVNoZWV0SWQ7IH0KLSAgICB1bnNpZ25lZCBvcmRpbmFsKCkgY29uc3QgeyByZXR1cm4gbV9v
cmRpbmFsOyB9CisgICAgaW50IHBhdGhBdCh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyBBU1NFUlQo
aW5kZXggPCBtX3BhdGguc2l6ZSgpKTsgcmV0dXJuIG1fcGF0aC5hdChpbmRleCk7IH0KKyAgICBp
bnQgbGFzdFBhdGhDb21wb25lbnQoKSBjb25zdCB7IEFTU0VSVChtX3BhdGguc2l6ZSgpID4gMCk7
IHJldHVybiBtX3BhdGgubGFzdCgpOyB9CisgICAgc2l6ZV90IHBhdGhMZW5ndGgoKSBjb25zdCB7
IHJldHVybiBtX3BhdGguc2l6ZSgpOyB9CiAKICAgICAvLyBJRCB0eXBlIGlzIGVpdGhlciBUeXBl
QnVpbGRlcjo6Q1NTOjpDU1NTdHlsZUlkIG9yIFR5cGVCdWlsZGVyOjpDU1M6OkNTU1J1bGVJZC4K
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRD4KQEAgLTkyLDE1ICsxMjEsMTkgQEAgcHVibGljOgog
ICAgICAgICBpZiAoaXNFbXB0eSgpKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAKKyAgICAgICAg
UmVmUHRyPFR5cGVCdWlsZGVyOjpBcnJheTxpbnQ+ID4gcGFyZW50Q2hhaW4gPSBUeXBlQnVpbGRl
cjo6QXJyYXk8aW50Pjo6Y3JlYXRlKCk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bV9wYXRoLnNpemUoKTsgKytpKQorICAgICAgICAgICAgcGFyZW50Q2hhaW4tPmFkZEl0ZW0oc3Rh
dGljX2Nhc3Q8aW50PihtX3BhdGguYXQoaSkpKTsKKwogICAgICAgICBSZWZQdHI8SUQ+IHJlc3Vs
dCA9IElEOjpjcmVhdGUoKQogICAgICAgICAgICAgLnNldFN0eWxlU2hlZXRJZChtX3N0eWxlU2hl
ZXRJZCkKLSAgICAgICAgICAgIC5zZXRPcmRpbmFsKG1fb3JkaW5hbCk7CisgICAgICAgICAgICAu
c2V0UGF0aChwYXJlbnRDaGFpbik7CiAgICAgICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpOwog
ICAgIH0KIAogcHJpdmF0ZToKICAgICBTdHJpbmcgbV9zdHlsZVNoZWV0SWQ7Ci0gICAgdW5zaWdu
ZWQgbV9vcmRpbmFsOworICAgIFZlY3RvcjxpbnQ+IG1fcGF0aDsKIH07CiAKIHN0cnVjdCBJbnNw
ZWN0b3JTdHlsZVByb3BlcnR5IHsKQEAgLTEzNiw3ICsxNjksNyBAQCBzdHJ1Y3QgSW5zcGVjdG9y
U3R5bGVQcm9wZXJ0eSB7CiAKIGNsYXNzIEluc3BlY3RvclN0eWxlIDogcHVibGljIFJlZkNvdW50
ZWQ8SW5zcGVjdG9yU3R5bGU+IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNw
ZWN0b3JTdHlsZT4gY3JlYXRlKGNvbnN0IEluc3BlY3RvckNTU0lkJiBzdHlsZUlkLCBQYXNzUmVm
UHRyPENTU1N0eWxlRGVjbGFyYXRpb24+IHN0eWxlLCBJbnNwZWN0b3JTdHlsZVNoZWV0KiBwYXJl
bnRTdHlsZVNoZWV0KTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JTdHlsZT4gY3Jl
YXRlV2l0aFN0eWxlU2hlZXQoY29uc3QgSW5zcGVjdG9yQ1NTSWQmIHN0eWxlSWQsIFBhc3NSZWZQ
dHI8Q1NTU3R5bGVEZWNsYXJhdGlvbj4sIEluc3BlY3RvclN0eWxlU2hlZXQqIHBhcmVudFN0eWxl
U2hlZXQpOwogICAgIHZpcnR1YWwgfkluc3BlY3RvclN0eWxlKCk7CiAKICAgICBDU1NTdHlsZURl
Y2xhcmF0aW9uKiBjc3NTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3R5bGUuZ2V0KCk7IH0KQEAg
LTE2Niw2ICsxOTksNjYgQEAgcHJpdmF0ZToKICAgICBtdXRhYmxlIGJvb2wgbV9mb3JtYXRBY3F1
aXJlZDsKIH07CiAKK2NsYXNzIEluc3BlY3RvclJ1bGUgOiBwdWJsaWMgUmVmQ291bnRlZDxJbnNw
ZWN0b3JSdWxlPiB7CitwdWJsaWM6CisgICAgZW51bSBUeXBlIHsKKyAgICAgICAgVU5LTk9XTl9S
VUxFLAorICAgICAgICBTVFlMRV9SVUxFLAorICAgICAgICBDSEFSU0VUX1JVTEUsCisgICAgICAg
IElNUE9SVF9SVUxFLAorICAgICAgICBNRURJQV9SVUxFLAorICAgICAgICBGT05UX0ZBQ0VfUlVM
RSwKKyAgICAgICAgUEFHRV9SVUxFLAorICAgICAgICBLRVlGUkFNRVNfUlVMRQorICAgIH07CisK
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JSdWxlPiBjcmVhdGUoY29uc3QgSW5zcGVj
dG9yQ1NTSWQmIGlkLCBDU1NSdWxlKiBydWxlLCBJbnNwZWN0b3JTdHlsZVNoZWV0KiBwYXJlbnRT
dHlsZVNoZWV0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbnNwZWN0b3JS
dWxlKGlkLCBydWxlLCBwYXJlbnRTdHlsZVNoZWV0KSk7CisgICAgfQorCisgICAgY29uc3QgSW5z
cGVjdG9yQ1NTSWQmIGlkKCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX2lkOworICAgIH0KKwor
ICAgIFR5cGUgdHlwZSgpIGNvbnN0OworCisgICAgQ1NTUnVsZSogY3NzUnVsZSgpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gbV9ydWxlLmdldCgpOworICAgIH0KKworICAgIEluc3BlY3Rv
clN0eWxlKiBzdHlsZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9zdHlsZS5nZXQo
KTsKKyAgICB9CisKKyAgICB2b2lkIGFwcGVuZENoaWxkKFBhc3NSZWZQdHI8SW5zcGVjdG9yUnVs
ZT4gY2hpbGRSdWxlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHR5cGUoKSA9PSBNRURJQV9SVUxF
KTsKKyAgICAgICAgbV9jaGlsZFJ1bGVzLT5hcHBlbmQoY2hpbGRSdWxlKTsKKyAgICB9CisKKyAg
ICBib29sIGNhbkhhdmVDaGlsZFJ1bGVzKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAh
IW1fY2hpbGRSdWxlczsKKyAgICB9CisKKyAgICBJbnNwZWN0b3JSdWxlTGlzdCogY2hpbGRSdWxl
TGlzdCgpCisgICAgeworICAgICAgICByZXR1cm4gbV9jaGlsZFJ1bGVzLmdldCgpOworICAgIH0K
KworcHJpdmF0ZToKKyAgICBJbnNwZWN0b3JSdWxlKGNvbnN0IEluc3BlY3RvckNTU0lkJiwgQ1NT
UnVsZSosIEluc3BlY3RvclN0eWxlU2hlZXQqIHBhcmVudFN0eWxlU2hlZXQpOworCisgICAgSW5z
cGVjdG9yQ1NTSWQgbV9pZDsKKyAgICBSZWZQdHI8Q1NTUnVsZT4gbV9ydWxlOworICAgIFJlZlB0
cjxJbnNwZWN0b3JTdHlsZT4gbV9zdHlsZTsKKyAgICBtdXRhYmxlIE93blB0cjxJbnNwZWN0b3JS
dWxlTGlzdD4gbV9jaGlsZFJ1bGVzOworfTsKKwogY2xhc3MgSW5zcGVjdG9yU3R5bGVTaGVldCA6
IHB1YmxpYyBSZWZDb3VudGVkPEluc3BlY3RvclN0eWxlU2hlZXQ+IHsKIHB1YmxpYzoKICAgICBj
bGFzcyBMaXN0ZW5lciB7CkBAIC0xOTAsMTAgKzI4MywxMCBAQCBwdWJsaWM6CiAgICAgYm9vbCBz
ZXRSdWxlU2VsZWN0b3IoY29uc3QgSW5zcGVjdG9yQ1NTSWQmLCBjb25zdCBTdHJpbmcmIHNlbGVj
dG9yLCBFeGNlcHRpb25Db2RlJik7CiAgICAgQ1NTU3R5bGVSdWxlKiBhZGRSdWxlKGNvbnN0IFN0
cmluZyYgc2VsZWN0b3IsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICBib29sIGRlbGV0ZVJ1bGUoY29u
c3QgSW5zcGVjdG9yQ1NTSWQmLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgQ1NTU3R5bGVSdWxlKiBy
dWxlRm9ySWQoY29uc3QgSW5zcGVjdG9yQ1NTSWQmKSBjb25zdDsKKyAgICBDU1NSdWxlKiBydWxl
Rm9ySWQoY29uc3QgSW5zcGVjdG9yQ1NTSWQmKSBjb25zdDsKICAgICBQYXNzUmVmUHRyPFR5cGVC
dWlsZGVyOjpDU1M6OkNTU1N0eWxlU2hlZXRCb2R5PiBidWlsZE9iamVjdEZvclN0eWxlU2hlZXQo
KTsKICAgICBQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpDU1M6OkNTU1N0eWxlU2hlZXRIZWFkZXI+
IGJ1aWxkT2JqZWN0Rm9yU3R5bGVTaGVldEluZm8oKTsKLSAgICBQYXNzUmVmUHRyPFR5cGVCdWls
ZGVyOjpDU1M6OkNTU1J1bGU+IGJ1aWxkT2JqZWN0Rm9yUnVsZShDU1NTdHlsZVJ1bGUqKTsKKyAg
ICBQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpDU1M6OkNTU1J1bGU+IGJ1aWxkT2JqZWN0Rm9yUnVs
ZShDU1NSdWxlKik7CiAgICAgUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpDU1NTdHlsZT4g
YnVpbGRPYmplY3RGb3JTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9uKik7CiAgICAgYm9vbCBzZXRQ
cm9wZXJ0eVRleHQoY29uc3QgSW5zcGVjdG9yQ1NTSWQmLCB1bnNpZ25lZCBwcm9wZXJ0eUluZGV4
LCBjb25zdCBTdHJpbmcmIHRleHQsIGJvb2wgb3ZlcndyaXRlLCBTdHJpbmcqIG9sZFByb3BlcnR5
VGV4dCwgRXhjZXB0aW9uQ29kZSYpOwogICAgIGJvb2wgdG9nZ2xlUHJvcGVydHkoY29uc3QgSW5z
cGVjdG9yQ1NTSWQmLCB1bnNpZ25lZCBwcm9wZXJ0eUluZGV4LCBib29sIGRpc2FibGUsIEV4Y2Vw
dGlvbkNvZGUmKTsKQEAgLTIwMiwxNyArMjk1LDE3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIENT
U1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlRm9ySWQoY29uc3QgSW5zcGVjdG9yQ1NTSWQmKSBjb25z
dDsKICAgICB2b2lkIGZpcmVTdHlsZVNoZWV0Q2hhbmdlZCgpOwogCi0gICAgSW5zcGVjdG9yQ1NT
SWQgcnVsZUlkKENTU1N0eWxlUnVsZSopIGNvbnN0OwotICAgIEluc3BlY3RvckNTU0lkIHN0eWxl
SWQoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUpIGNvbnN0IHsgcmV0dXJuIHJ1bGVPclN0eWxl
SWQoc3R5bGUpOyB9CisgICAgSW5zcGVjdG9yQ1NTSWQgcnVsZUlkKENTU1J1bGUqKTsKKyAgICBJ
bnNwZWN0b3JDU1NJZCBzdHlsZUlkKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlKSB7IHJldHVy
biBydWxlT3JTdHlsZUlkKHN0eWxlKTsgfQogCiBwcm90ZWN0ZWQ6CiAgICAgSW5zcGVjdG9yU3R5
bGVTaGVldChJbnNwZWN0b3JQYWdlQWdlbnQqLCBjb25zdCBTdHJpbmcmIGlkLCBQYXNzUmVmUHRy
PENTU1N0eWxlU2hlZXQ+IHBhZ2VTdHlsZVNoZWV0LCBUeXBlQnVpbGRlcjo6Q1NTOjpTdHlsZVNo
ZWV0T3JpZ2luOjpFbnVtLCBjb25zdCBTdHJpbmcmIGRvY3VtZW50VVJMLCBMaXN0ZW5lciopOwog
CiAgICAgYm9vbCBjYW5CaW5kKCkgY29uc3QgeyByZXR1cm4gbV9vcmlnaW4gIT0gVHlwZUJ1aWxk
ZXI6OkNTUzo6U3R5bGVTaGVldE9yaWdpbjo6VXNlcl9hZ2VudCAmJiBtX29yaWdpbiAhPSBUeXBl
QnVpbGRlcjo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luOjpVc2VyOyB9Ci0gICAgSW5zcGVjdG9yQ1NT
SWQgcnVsZU9yU3R5bGVJZChDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSkgY29uc3Q7CisgICAg
SW5zcGVjdG9yQ1NTSWQgcnVsZU9yU3R5bGVJZChDU1NTdHlsZURlY2xhcmF0aW9uKik7CiAgICAg
dmlydHVhbCBEb2N1bWVudCogb3duZXJEb2N1bWVudCgpIGNvbnN0OwotICAgIHZpcnR1YWwgUmVm
UHRyPENTU1J1bGVTb3VyY2VEYXRhPiBydWxlU291cmNlRGF0YUZvcihDU1NTdHlsZURlY2xhcmF0
aW9uKiBzdHlsZSkgY29uc3Q7Ci0gICAgdmlydHVhbCB1bnNpZ25lZCBydWxlSW5kZXhCeVN0eWxl
KENTU1N0eWxlRGVjbGFyYXRpb24qKSBjb25zdDsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q1NT
UnVsZVNvdXJjZURhdGE+IHJ1bGVTb3VyY2VEYXRhRm9yKENTU1N0eWxlRGVjbGFyYXRpb24qKTsK
KyAgICB2aXJ0dWFsIFZlY3RvcjxpbnQ+IHJ1bGVQYXRoQnlTdHlsZShDU1NTdHlsZURlY2xhcmF0
aW9uKik7CiAgICAgdmlydHVhbCBib29sIGVuc3VyZVBhcnNlZERhdGFSZWFkeSgpOwogICAgIHZp
cnR1YWwgUGFzc1JlZlB0cjxJbnNwZWN0b3JTdHlsZT4gaW5zcGVjdG9yU3R5bGVGb3JJZChjb25z
dCBJbnNwZWN0b3JDU1NJZCYpOwogICAgIHZpcnR1YWwgdm9pZCByZW1lbWJlckluc3BlY3RvclN0
eWxlKFJlZlB0cjxJbnNwZWN0b3JTdHlsZT4gaW5zcGVjdG9yU3R5bGUpOwpAQCAtMjI0LDE2ICsz
MTcsMjMgQEAgcHJvdGVjdGVkOgogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgSW5zcGVjdG9y
U3R5bGU7CiAKLSAgICBzdGF0aWMgdm9pZCBjb2xsZWN0RmxhdFJ1bGVzKFBhc3NSZWZQdHI8Q1NT
UnVsZUxpc3Q+LCBWZWN0b3I8Q1NTU3R5bGVSdWxlKj4qIHJlc3VsdCk7CisgICAgc3RhdGljIElu
c3BlY3RvckNTU0lkIGZpbmRSdWxlSWQoQ1NTUnVsZSosIEluc3BlY3RvclJ1bGVMaXN0Kik7Cisg
ICAgdm9pZCBmaWxsUnVsZUxpc3QoQ1NTUnVsZUxpc3QqLCBJbnNwZWN0b3JSdWxlTGlzdCosIFZl
Y3RvcjxpbnQ+Jik7CiAgICAgYm9vbCBlbnN1cmVUZXh0KCkgY29uc3Q7CiAgICAgYm9vbCBlbnN1
cmVTb3VyY2VEYXRhKCk7Ci0gICAgdm9pZCBlbnN1cmVGbGF0UnVsZXMoKSBjb25zdDsKKyAgICB2
b2lkIGVuc3VyZVJ1bGVUcmVlKCk7CisgICAgSW5zcGVjdG9yUnVsZUxpc3QqIHJ1bGVUcmVlKCkg
eyBlbnN1cmVSdWxlVHJlZSgpOyByZXR1cm4gJm1fcnVsZXM7IH0KKyAgICBQYXNzUmVmUHRyPENT
U1J1bGVTb3VyY2VEYXRhPiBydWxlU291cmNlRGF0YUZvcihDU1NSdWxlKik7CisgICAgYm9vbCBy
dWxlUGF0aEJ5U3R5bGVJbnRlcm5hbChDU1NTdHlsZURlY2xhcmF0aW9uKiwgSW5zcGVjdG9yUnVs
ZUxpc3QqLCBWZWN0b3I8aW50PiYpOworICAgIFNvdXJjZVJhbmdlIGV4dHJhY3RSdWxlVGV4dFJh
bmdlKENTU1N0eWxlUnVsZSosIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB0ZW1wbGF0ZSA8Y2xhc3Mg
VD4gU291cmNlUmFuZ2UgZGVsZXRlUnVsZUZyb21QYXJlbnQoVCosIHVuc2lnbmVkIHJ1bGVJbmRl
eCwgRXhjZXB0aW9uQ29kZSYpOwogICAgIGJvb2wgc3R5bGVTaGVldFRleHRXaXRoQ2hhbmdlZFN0
eWxlKENTU1N0eWxlRGVjbGFyYXRpb24qLCBjb25zdCBTdHJpbmcmIG5ld1N0eWxlVGV4dCwgU3Ry
aW5nKiByZXN1bHQpOwotICAgIHZvaWQgcmV2YWxpZGF0ZVN0eWxlKENTU1N0eWxlRGVjbGFyYXRp
b24qKTsKICAgICBib29sIG9yaWdpbmFsU3R5bGVTaGVldFRleHQoU3RyaW5nKiByZXN1bHQpIGNv
bnN0OwogICAgIGJvb2wgcmVzb3VyY2VTdHlsZVNoZWV0VGV4dChTdHJpbmcqIHJlc3VsdCkgY29u
c3Q7CiAgICAgYm9vbCBpbmxpbmVTdHlsZVNoZWV0VGV4dChTdHJpbmcqIHJlc3VsdCkgY29uc3Q7
Ci0gICAgUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6QXJyYXk8VHlwZUJ1aWxkZXI6OkNTUzo6Q1NT
UnVsZT4gPiBidWlsZEFycmF5Rm9yUnVsZUxpc3QoQ1NTUnVsZUxpc3QqKTsKKyAgICAvLyBGSVhN
RTogQSB0ZW1wb3JhcnkgbWV0aG9kIHRvIHByb3ZpZGUgb25seSBzdHlsZSBydWxlcyB0byB0aGUg
ZnJvbnRlbmQuCisgICAgdm9pZCBwcm9jZXNzUnVsZUxpc3QoSW5zcGVjdG9yUnVsZUxpc3QqLCBU
eXBlQnVpbGRlcjo6QXJyYXk8VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTUnVsZT4qKTsKKyAgICBQYXNz
UmVmUHRyPFR5cGVCdWlsZGVyOjpBcnJheTxUeXBlQnVpbGRlcjo6Q1NTOjpDU1NSdWxlPiA+IGJ1
aWxkVHJlZUZvclJ1bGVMaXN0KCk7CiAKICAgICBJbnNwZWN0b3JQYWdlQWdlbnQqIG1fcGFnZUFn
ZW50OwogICAgIFN0cmluZyBtX2lkOwpAQCAtMjQzLDcgKzM0Myw3IEBAIHByaXZhdGU6CiAgICAg
Ym9vbCBtX2lzUmV2YWxpZGF0aW5nOwogICAgIFBhcnNlZFN0eWxlU2hlZXQqIG1fcGFyc2VkU3R5
bGVTaGVldDsKICAgICBJbnNwZWN0b3JTdHlsZU1hcCBtX2luc3BlY3RvclN0eWxlczsKLSAgICBt
dXRhYmxlIFZlY3RvcjxDU1NTdHlsZVJ1bGUqPiBtX2ZsYXRSdWxlczsKKyAgICBtdXRhYmxlIElu
c3BlY3RvclJ1bGVMaXN0IG1fcnVsZXM7CiAgICAgTGlzdGVuZXIqIG1fbGlzdGVuZXI7CiB9Owog
CkBAIC0yNTMsMTQgKzM1MywxNCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGRpZE1vZGlmeUVsZW1l
bnRBdHRyaWJ1dGUoKTsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0VGV4dChTdHJpbmcqIHJlc3VsdCkg
Y29uc3Q7Ci0gICAgdmlydHVhbCBDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZUZvcklkKGNvbnN0
IEluc3BlY3RvckNTU0lkJiBpZCkgY29uc3QgeyBBU1NFUlRfVU5VU0VEKGlkLCAhaWQub3JkaW5h
bCgpKTsgcmV0dXJuIGlubGluZVN0eWxlKCk7IH0KKyAgICB2aXJ0dWFsIENTU1N0eWxlRGVjbGFy
YXRpb24qIHN0eWxlRm9ySWQoY29uc3QgSW5zcGVjdG9yQ1NTSWQmIGlkKSBjb25zdCB7IEFTU0VS
VF9VTlVTRUQoaWQsICFpZC5wYXRoQXQoMCkpOyByZXR1cm4gaW5saW5lU3R5bGUoKTsgfQogCiBw
cm90ZWN0ZWQ6CiAgICAgSW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlKEluc3BlY3Rv
clBhZ2VBZ2VudCosIGNvbnN0IFN0cmluZyYgaWQsIFBhc3NSZWZQdHI8RWxlbWVudD4sIFR5cGVC
dWlsZGVyOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW46OkVudW0sIExpc3RlbmVyKik7CiAKICAgICB2
aXJ0dWFsIERvY3VtZW50KiBvd25lckRvY3VtZW50KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBSZWZQ
dHI8Q1NTUnVsZVNvdXJjZURhdGE+IHJ1bGVTb3VyY2VEYXRhRm9yKENTU1N0eWxlRGVjbGFyYXRp
b24qIHN0eWxlKSBjb25zdCB7IEFTU0VSVF9VTlVTRUQoc3R5bGUsIHN0eWxlID09IGlubGluZVN0
eWxlKCkpOyByZXR1cm4gbV9ydWxlU291cmNlRGF0YTsgfQotICAgIHZpcnR1YWwgdW5zaWduZWQg
cnVsZUluZGV4QnlTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9uKikgY29uc3QgeyByZXR1cm4gMDsg
fQorICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDU1NSdWxlU291cmNlRGF0YT4gcnVsZVNvdXJjZURh
dGFGb3IoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUpIHsgQVNTRVJUX1VOVVNFRChzdHlsZSwg
c3R5bGUgPT0gaW5saW5lU3R5bGUoKSk7IHJldHVybiBtX3J1bGVTb3VyY2VEYXRhOyB9CisgICAg
dmlydHVhbCBWZWN0b3I8aW50PiBydWxlUGF0aEJ5U3R5bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbiop
IHsgVmVjdG9yPGludD4gcGF0aDsgcGF0aC5hcHBlbmQoMCk7IHJldHVybiBwYXRoOyB9CiAgICAg
dmlydHVhbCBib29sIGVuc3VyZVBhcnNlZERhdGFSZWFkeSgpOwogICAgIHZpcnR1YWwgUGFzc1Jl
ZlB0cjxJbnNwZWN0b3JTdHlsZT4gaW5zcGVjdG9yU3R5bGVGb3JJZChjb25zdCBJbnNwZWN0b3JD
U1NJZCYpOwogICAgIHZpcnR1YWwgdm9pZCByZW1lbWJlckluc3BlY3RvclN0eWxlKFJlZlB0cjxJ
bnNwZWN0b3JTdHlsZT4pIHsgfQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>