<?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>27107</bug_id>
          
          <creation_ts>2009-07-08 19:03:40 -0700</creation_ts>
          <short_desc>[V8] Move DOM wrapper functions in V8Proxy to V8DOMWrapper</short_desc>
          <delta_ts>2009-07-09 01:09:35 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore JavaScript</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Adam Barth">abarth</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>dglazkov</cc>
    
    <cc>eric</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>130597</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-07-08 19:03:40 -0700</bug_when>
    <thetext>Phase 1, do the renaming.  Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>130598</commentid>
    <comment_count>1</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-07-08 19:09:06 -0700</bug_when>
    <thetext>There&apos;s already V8DOMMap. Perhaps they belong there?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>130612</commentid>
    <comment_count>2</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-07-08 21:45:52 -0700</bug_when>
    <thetext>I think its better to have them in a separate class / file.  I want to eventually make the API more like toJS() to match JSC.

V8DOMMap is more of an implementation detail / backing store.  For example, if we switched to a peerable-like implemenation, then we&apos;d keep V8DOMWrappers but get rid of V8DOMMap (because there wouldn&apos;t be a &quot;map&quot; per se).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>130621</commentid>
    <comment_count>3</comment_count>
      <attachid>32503</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-07-08 23:12:15 -0700</bug_when>
    <thetext>Created attachment 32503
patch (renaming only)

Sorry.  The patch is huge.  It&apos;s just renaming functions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>130622</commentid>
    <comment_count>4</comment_count>
      <attachid>32503</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-07-08 23:22:47 -0700</bug_when>
    <thetext>Comment on attachment 32503
patch (renaming only)

rs=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>130632</commentid>
    <comment_count>5</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-07-09 01:09:35 -0700</bug_when>
    <thetext>Transmitting file data ........................................................................
Committed revision 45659.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32503</attachid>
            <date>2009-07-08 23:12:15 -0700</date>
            <delta_ts>2009-07-08 23:22:47 -0700</delta_ts>
            <desc>patch (renaming only)</desc>
            <filename>domwrapper.patch</filename>
            <type>text/plain</type>
            <size>235117</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NTY1OCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjgzIEBACisyMDA5LTA3LTA4ICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW1Y4
XSBNb3ZlIERPTSB3cmFwcGVyIGZ1bmN0aW9ucyBpbiBWOFByb3h5IHRvIFY4RE9NV3JhcHBlcgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjcxMDcKKwor
ICAgICAgICBUaGlzIHBhdGNoIGlzIGp1c3QgcmVuYW1pbmcuICBDb2RlIG1vdGlvbiB3aWxsIG9j
Y3VyIG5leHQuCisKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5w
bToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OnByb2Nlc3NpbmdVc2VyR2VzdHVyZSk6CisgICAg
ICAgIChXZWJDb3JlOjpjcmVhdGVTY3JpcHRPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
aXB0Q29udHJvbGxlcjo6Y3JlYXRlU2NyaXB0T2JqZWN0Rm9yUGx1Z2luRWxlbWVudCk6CisgICAg
ICAgICogYmluZGluZ3MvdjgvU2NyaXB0T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNj
cmlwdEdsb2JhbE9iamVjdDo6c2V0KToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9TY3JpcHRPYmpl
Y3RRdWFyYW50aW5lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmdldFF1YXJhbnRpbmVkU2NyaXB0
T2JqZWN0KToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOEFic3RyYWN0RXZlbnRMaXN0ZW5lci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpWOEFic3RyYWN0RXZlbnRMaXN0ZW5lcjo6aGFuZGxlRXZl
bnQpOgorICAgICAgICAoV2ViQ29yZTo6VjhBYnN0cmFjdEV2ZW50TGlzdGVuZXI6OmdldFJlY2Vp
dmVyT2JqZWN0KToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOENvbGxlY3Rpb24uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6dG9PcHRpb25zQ29sbGVjdGlvblNldHRlcik6CisgICAgICAgICogYmlu
ZGluZ3MvdjgvVjhDb2xsZWN0aW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpnZXRWOE9iamVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpnZXROYW1lZFByb3BlcnR5T2ZDb2xsZWN0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6Om5vZGVDb2xsZWN0aW9uTmFtZWRQcm9wZXJ0eUdldHRlcik6CisgICAgICAg
IChXZWJDb3JlOjpnZXRJbmRleGVkUHJvcGVydHlPZkNvbGxlY3Rpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6bm9kZUNvbGxlY3Rpb25JbmRleGVkUHJvcGVydHlHZXR0ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6bm9kZUNvbGxlY3Rpb25JbmRleGVkUHJvcGVydHlFbnVtZXJhdG9yKToKKyAgICAgICAg
KFdlYkNvcmU6OmNvbGxlY3Rpb25JbmRleGVkUHJvcGVydHlFbnVtZXJhdG9yKToKKyAgICAgICAg
KFdlYkNvcmU6OmNvbGxlY3Rpb25TdHJpbmdPck51bGxJbmRleGVkUHJvcGVydHlHZXR0ZXIpOgor
ICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4RE9NTWFwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRP
TURhdGE6OmhhbmRsZVdlYWtPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6RE9NRGF0YTo6cmVt
b3ZlT2JqZWN0c0Zyb21XcmFwcGVyTWFwKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOEdDQ29u
dHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjplbnVtZXJhdGVET01PYmplY3RNYXApOgor
ICAgICAgICAoV2ViQ29yZTo6RE9NT2JqZWN0VmlzaXRvcjo6dmlzaXRET01XcmFwcGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdDUHJvbG9ndWVWaXNpdG9yOjp2aXNpdERPTVdyYXBwZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6R0NFcGlsb2d1ZVZpc2l0b3I6OnZpc2l0RE9NV3JhcHBlcik6CisgICAg
ICAgICogYmluZGluZ3MvdjgvVjhIZWxwZXJzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OndyYXBO
UE9iamVjdCk6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhOb2RlRmlsdGVyQ29uZGl0aW9uLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlY4Tm9kZUZpbHRlckNvbmRpdGlvbjo6YWNjZXB0Tm9kZSk6
CisgICAgICAgICogYmluZGluZ3MvdjgvVjhQcm94eS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpW
OERPTVdyYXBwZXI6OmNvbnZlcnRTVkdFbGVtZW50SW5zdGFuY2VUb1Y4T2JqZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlY4RE9NV3JhcHBlcjo6Y29udmVydFNWR09iamVjdFdpdGhDb250ZXh0VG9W
OE9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpWOERPTVdyYXBwZXI6OmRvbU9iamVjdEhhc0pT
V3JhcHBlcik6CisgICAgICAgIChXZWJDb3JlOjpWOERPTVdyYXBwZXI6OnNldEpTV3JhcHBlckZv
ckRPTU9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpWOERPTVdyYXBwZXI6OnNldEpTV3JhcHBl
ckZvckFjdGl2ZURPTU9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpWOERPTVdyYXBwZXI6OnNl
dEpTV3JhcHBlckZvckRPTU5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6VjhQcm94eTo6ZXZhbHVh
dGVJbk5ld0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6VjhQcm94eTo6Z2V0Q29uc3RydWN0
b3IpOgorICAgICAgICAoV2ViQ29yZTo6VjhET01XcmFwcGVyOjpnZXRUZW1wbGF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpWOFByb3h5OjpyZXRyaWV2ZVdpbmRvdyk6CisgICAgICAgIChXZWJDb3Jl
OjpWOFByb3h5Ojp1cGRhdGVEb2N1bWVudFdyYXBwZXJDYWNoZSk6CisgICAgICAgIChXZWJDb3Jl
OjpWOFByb3h5OjpjbGVhckZvck5hdmlnYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6VjhQcm94
eTo6aW5zdGFsbERPTVdpbmRvdyk6CisgICAgICAgIChXZWJDb3JlOjpzZXRET01FeGNlcHRpb25I
ZWxwZXIpOgorICAgICAgICAoV2ViQ29yZTo6VjhET01XcmFwcGVyOjpjb252ZXJ0VG9WOE9iamVj
dCk6CisgICAgICAgIChXZWJDb3JlOjpWOERPTVdyYXBwZXI6OnNldEhpZGRlbldpbmRvd1JlZmVy
ZW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpWOERPTVdyYXBwZXI6OmRvbVdyYXBwZXJUeXBlKToK
KyAgICAgICAgKFdlYkNvcmU6OlY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0SW1w
bCk6CisgICAgICAgIChXZWJDb3JlOjpWOERPTVdyYXBwZXI6OmNvbnZlcnRUb1NWR1BPRFR5cGVJ
bXBsKToKKyAgICAgICAgKFdlYkNvcmU6OlY4RE9NV3JhcHBlcjo6bG9va3VwRE9NV3JhcHBlcik6
CisgICAgICAgIChXZWJDb3JlOjpWOERPTVdyYXBwZXI6OmNvbnZlcnRET01XcmFwcGVyVG9Ob2Rl
SGVscGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlY4RE9NV3JhcHBlcjo6d3JhcE5hdGl2ZU5vZGVG
aWx0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VjhET01XcmFwcGVyOjppbnN0YW50aWF0ZVY4T2Jq
ZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlY4RE9NV3JhcHBlcjo6c2V0RE9NV3JhcHBlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpWOERPTVdyYXBwZXI6Om1heWJlRE9NV3JhcHBlcik6CisgICAgICAg
IChXZWJDb3JlOjpWOERPTVdyYXBwZXI6OmlzRE9NRXZlbnRXcmFwcGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OlY4RE9NV3JhcHBlcjo6aXNXcmFwcGVyT2ZUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6
OlY4RE9NV3JhcHBlcjo6aHRtbEVsZW1lbnRUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlY4RE9N
V3JhcHBlcjo6c3ZnRWxlbWVudFR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6VjhET01XcmFwcGVy
Ojpjb252ZXJ0RXZlbnRUb1Y4T2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlY4RE9NV3JhcHBl
cjo6Y29udmVydE5vZGVUb1Y4T2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlY4RE9NV3JhcHBl
cjo6Y29udmVydEV2ZW50VGFyZ2V0VG9WOE9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpWOERP
TVdyYXBwZXI6OmNvbnZlcnRFdmVudExpc3RlbmVyVG9WOE9iamVjdCk6CisgICAgICAgIChXZWJD
b3JlOjpWOERPTVdyYXBwZXI6OmNvbnZlcnRET01JbXBsZW1lbnRhdGlvblRvVjhPYmplY3QpOgor
ICAgICAgICAoV2ViQ29yZTo6VjhET01XcmFwcGVyOjpjb252ZXJ0U3R5bGVTaGVldFRvVjhPYmpl
Y3QpOgorICAgICAgICAoV2ViQ29yZTo6VjhET01XcmFwcGVyOjpjb252ZXJ0Q1NTVmFsdWVUb1Y4
T2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlY4RE9NV3JhcHBlcjo6Y29udmVydENTU1J1bGVU
b1Y4T2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlY4RE9NV3JhcHBlcjo6Y29udmVydFdpbmRv
d1RvVjhPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6VjhQcm94eTo6YmluZEpzT2JqZWN0VG9X
aW5kb3cpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4UHJveHkuaDoKKyAgICAgICAgKFdlYkNv
cmU6OlY4RE9NV3JhcHBlcjo6Y29udmVydERPTVdyYXBwZXJUb05hdGl2ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpWOERPTVdyYXBwZXI6OndyYXBDUG9pbnRlcik6CisgICAgICAgIChXZWJDb3JlOjpW
OERPTVdyYXBwZXI6OmV4dHJhY3RDUG9pbnRlcik6CisgICAgICAgIChXZWJDb3JlOjpWOERPTVdy
YXBwZXI6OmNvbnZlcnRET01XcmFwcGVyVG9Ob2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlY4RE9N
V3JhcHBlcjo6Y29udmVydFRvVjhPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6VjhET01XcmFw
cGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6VjhET01XcmFw
cGVyOjpjb252ZXJ0VG9OYXRpdmVFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpWOERPTVdyYXBw
ZXI6OmV4dHJhY3RDUG9pbnRlckltcGwpOgorICAgICAgICAoV2ViQ29yZTo6VjhET01XcmFwcGVy
OjppbnN0YW50aWF0ZVY4T2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlY4UHJveHk6OmNvbnN0
cnVjdERPTU9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjp0b1Y4KToKKyAgICAgICAgKiBiaW5k
aW5ncy92OC9WOFNWR1BPRFR5cGVXcmFwcGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpWOFNWR1BP
RFR5cGVVdGlsOjp0b1NWR1BPRFR5cGUpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1dvcmtlckNv
bnRleHRFeGVjdXRpb25Qcm94eS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJDb250ZXh0
RXhlY3V0aW9uUHJveHk6OnJldHJpZXZlKToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlckNvbnRl
eHRFeGVjdXRpb25Qcm94eTo6aW5pdENvbnRleHRJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHk6OkdldENvbnN0cnVjdG9yKToKKyAgICAgICAg
KFdlYkNvcmU6OldvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTo6VG9WOE9iamVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHk6OkV2ZW50VG9WOE9iamVj
dCk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHk6OnRvVjgp
OgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEF0dHJDdXN0b20uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6QUNDRVNTT1JfU0VUVEVSKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0
b20vVjhDU1NTdHlsZURlY2xhcmF0aW9uQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5B
TUVEX1BST1BFUlRZX0dFVFRFUik6CisgICAgICAgIChXZWJDb3JlOjpOQU1FRF9QUk9QRVJUWV9T
RVRURVIpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOENhbnZhc1BpeGVsQXJyYXlD
dXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SU5ERVhFRF9QUk9QRVJUWV9HRVRURVIpOgor
ICAgICAgICAoV2ViQ29yZTo6SU5ERVhFRF9QUk9QRVJUWV9TRVRURVIpOgorICAgICAgICAqIGJp
bmRpbmdzL3Y4L2N1c3RvbS9WOENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREN1c3RvbS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjp0b1Y4KToKKyAgICAgICAgKFdlYkNvcmU6OnRvQ2FudmFzU3R5bGUp
OgorICAgICAgICAoV2ViQ29yZTo6QUNDRVNTT1JfR0VUVEVSKToKKyAgICAgICAgKFdlYkNvcmU6
OkFDQ0VTU09SX1NFVFRFUik6CisgICAgICAgIChXZWJDb3JlOjpDQUxMQkFDS19GVU5DX0RFQ0wp
OgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOENsaWVudFJlY3RMaXN0Q3VzdG9tLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OklOREVYRURfUFJPUEVSVFlfR0VUVEVSKToKKyAgICAgICAg
KiBiaW5kaW5ncy92OC9jdXN0b20vVjhDbGlwYm9hcmRDdXN0b20uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6QUNDRVNTT1JfR0VUVEVSKToKKyAgICAgICAgKFdlYkNvcmU6OkNBTExCQUNLX0ZVTkNf
REVDTCk6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tQmluZGluZy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpBQ0NFU1NPUl9HRVRURVIpOgorICAgICAgICAoV2ViQ29yZTo6
SU5ERVhFRF9BQ0NFU1NfQ0hFQ0spOgorICAgICAgICAoV2ViQ29yZTo6TkFNRURfQUNDRVNTX0NI
RUNLKToKKyAgICAgICAgKFdlYkNvcmU6OlY4Q3VzdG9tOjpHZXRUYXJnZXRGcmFtZSk6CisgICAg
ICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tU1FMU3RhdGVtZW50Q2FsbGJhY2suY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6VjhDdXN0b21TUUxTdGF0ZW1lbnRDYWxsYmFjazo6aGFuZGxl
RXZlbnQpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbVNRTFN0YXRlbWVu
dEVycm9yQ2FsbGJhY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhDdXN0b21TUUxTdGF0ZW1l
bnRFcnJvckNhbGxiYWNrOjpoYW5kbGVFdmVudCk6CisgICAgICAgICogYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4Q3VzdG9tU1FMVHJhbnNhY3Rpb25DYWxsYmFjay5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpWOEN1c3RvbVNRTFRyYW5zYWN0aW9uQ2FsbGJhY2s6OmhhbmRsZUV2ZW50KToKKyAgICAgICAg
KiBiaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21TUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2su
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhDdXN0b21TUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJh
Y2s6OmhhbmRsZUV2ZW50KToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhET01XaW5k
b3dDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhDdXN0b206OldpbmRvd1NldFRpbWVv
dXRJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkFDQ0VTU09SX1NFVFRFUik6CisgICAgICAgIChX
ZWJDb3JlOjpDQUxMQkFDS19GVU5DX0RFQ0wpOgorICAgICAgICAoV2ViQ29yZTo6QUNDRVNTT1Jf
R0VUVEVSKToKKyAgICAgICAgKFdlYkNvcmU6OklOREVYRURfUFJPUEVSVFlfR0VUVEVSKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok5BTUVEX1BST1BFUlRZX0dFVFRFUik6CisgICAgICAgIChXZWJDb3Jl
OjpWOEN1c3RvbTo6Q2xlYXJUaW1lb3V0SW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpOQU1FRF9B
Q0NFU1NfQ0hFQ0spOgorICAgICAgICAoV2ViQ29yZTo6SU5ERVhFRF9BQ0NFU1NfQ0hFQ0spOgor
ICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOERhdGFiYXNlQ3VzdG9tLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNBTExCQUNLX0ZVTkNfREVDTCk6CisgICAgICAgICogYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4RG9jdW1lbnRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0FMTEJBQ0tf
RlVOQ19ERUNMKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhEb2N1bWVudExvY2F0
aW9uQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFDQ0VTU09SX0dFVFRFUik6CisgICAg
ICAgIChXZWJDb3JlOjpBQ0NFU1NPUl9TRVRURVIpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1
c3RvbS9WOEVsZW1lbnRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0FMTEJBQ0tfRlVO
Q19ERUNMKToKKyAgICAgICAgKFdlYkNvcmU6OkFDQ0VTU09SX1NFVFRFUik6CisgICAgICAgIChX
ZWJDb3JlOjpBQ0NFU1NPUl9HRVRURVIpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9W
OEV2ZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFDQ0VTU09SX1NFVFRFUik6Cisg
ICAgICAgIChXZWJDb3JlOjpBQ0NFU1NPUl9HRVRURVIpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4
L2N1c3RvbS9WOEhUTUxBdWRpb0VsZW1lbnRDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDQUxMQkFDS19GVU5DX0RFQ0wpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9W
OEhUTUxDYW52YXNFbGVtZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNBTExCQUNL
X0ZVTkNfREVDTCk6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTENvbGxlY3Rp
b25DdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Z2V0TmFtZWRJdGVtcyk6CisgICAgICAg
IChXZWJDb3JlOjpnZXRJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6Ok5BTUVEX1BST1BFUlRZX0dF
VFRFUik6CisgICAgICAgIChXZWJDb3JlOjpDQUxMQkFDS19GVU5DX0RFQ0wpOgorICAgICAgICAq
IGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxEb2N1bWVudEN1c3RvbS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpOQU1FRF9QUk9QRVJUWV9HRVRURVIpOgorICAgICAgICAoV2ViQ29yZTo6Q0FMTEJB
Q0tfRlVOQ19ERUNMKToKKyAgICAgICAgKFdlYkNvcmU6OkFDQ0VTU09SX0dFVFRFUik6CisgICAg
ICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTEZvcm1FbGVtZW50Q3VzdG9tLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OklOREVYRURfUFJPUEVSVFlfR0VUVEVSKToKKyAgICAgICAgKFdlYkNv
cmU6Ok5BTUVEX1BST1BFUlRZX0dFVFRFUik6CisgICAgICAgIChXZWJDb3JlOjpDQUxMQkFDS19G
VU5DX0RFQ0wpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxGcmFtZUVsZW1l
bnRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6QUNDRVNTT1JfU0VUVEVSKToKKyAgICAg
ICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MRnJhbWVTZXRFbGVtZW50Q3VzdG9tLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Ok5BTUVEX1BST1BFUlRZX0dFVFRFUik6CisgICAgICAgICogYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTElGcmFtZUVsZW1lbnRDdXN0b20uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6QUNDRVNTT1JfU0VUVEVSKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20v
VjhIVE1MSW1hZ2VFbGVtZW50Q29uc3RydWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0FM
TEJBQ0tfRlVOQ19ERUNMKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MSW5w
dXRFbGVtZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFDQ0VTU09SX0dFVFRFUik6
CisgICAgICAgIChXZWJDb3JlOjpBQ0NFU1NPUl9TRVRURVIpOgorICAgICAgICAoV2ViQ29yZTo6
Q0FMTEJBQ0tfRlVOQ19ERUNMKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhIVE1M
T3B0aW9uRWxlbWVudENvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNBTExCQUNL
X0ZVTkNfREVDTCk6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTE9wdGlvbnND
b2xsZWN0aW9uQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNBTExCQUNLX0ZVTkNfREVD
TCk6CisgICAgICAgIChXZWJDb3JlOjpBQ0NFU1NPUl9HRVRURVIpOgorICAgICAgICAoV2ViQ29y
ZTo6QUNDRVNTT1JfU0VUVEVSKToKKyAgICAgICAgKFdlYkNvcmU6OklOREVYRURfUFJPUEVSVFlf
R0VUVEVSKToKKyAgICAgICAgKFdlYkNvcmU6OklOREVYRURfUFJPUEVSVFlfU0VUVEVSKToKKyAg
ICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MUGx1Z0luRWxlbWVudEN1c3RvbS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpOQU1FRF9QUk9QRVJUWV9HRVRURVIpOgorICAgICAgICAoV2Vi
Q29yZTo6TkFNRURfUFJPUEVSVFlfU0VUVEVSKToKKyAgICAgICAgKFdlYkNvcmU6OklOREVYRURf
UFJPUEVSVFlfR0VUVEVSKToKKyAgICAgICAgKFdlYkNvcmU6OklOREVYRURfUFJPUEVSVFlfU0VU
VEVSKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MU2VsZWN0RWxlbWVudENv
bGxlY3Rpb25DdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6TkFNRURfUFJPUEVSVFlfR0VU
VEVSKToKKyAgICAgICAgKFdlYkNvcmU6OklOREVYRURfUFJPUEVSVFlfU0VUVEVSKToKKyAgICAg
ICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MU2VsZWN0RWxlbWVudEN1c3RvbS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDQUxMQkFDS19GVU5DX0RFQ0wpOgorICAgICAgICAoV2ViQ29yZTo6
cmVtb3ZlRWxlbWVudCk6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4SW5zcGVjdG9y
Q29udHJvbGxlckN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQUxMQkFDS19GVU5DX0RF
Q0wpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOExvY2F0aW9uQ3VzdG9tLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkFDQ0VTU09SX1NFVFRFUik6CisgICAgICAgIChXZWJDb3JlOjpB
Q0NFU1NPUl9HRVRURVIpOgorICAgICAgICAoV2ViQ29yZTo6Q0FMTEJBQ0tfRlVOQ19ERUNMKToK
KyAgICAgICAgKFdlYkNvcmU6OklOREVYRURfQUNDRVNTX0NIRUNLKToKKyAgICAgICAgKFdlYkNv
cmU6Ok5BTUVEX0FDQ0VTU19DSEVDSyk6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4
TWVzc2FnZUNoYW5uZWxDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQUxMQkFD
S19GVU5DX0RFQ0wpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOE1lc3NhZ2VQb3J0
Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFDQ0VTU09SX0dFVFRFUik6CisgICAgICAg
IChXZWJDb3JlOjpBQ0NFU1NPUl9TRVRURVIpOgorICAgICAgICAoV2ViQ29yZTo6Q0FMTEJBQ0tf
RlVOQ19ERUNMKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhOYW1lZE5vZGVNYXBD
dXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SU5ERVhFRF9QUk9QRVJUWV9HRVRURVIpOgor
ICAgICAgICAoV2ViQ29yZTo6TkFNRURfUFJPUEVSVFlfR0VUVEVSKToKKyAgICAgICAgKiBiaW5k
aW5ncy92OC9jdXN0b20vVjhOYXZpZ2F0b3JDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
QUNDRVNTT1JfR0VUVEVSKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhOb2RlQ3Vz
dG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNBTExCQUNLX0ZVTkNfREVDTCk6CisgICAgICAg
ICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4Tm9kZUl0ZXJhdG9yQ3VzdG9tLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OnRvVjgpOgorICAgICAgICAoV2ViQ29yZTo6Q0FMTEJBQ0tfRlVOQ19ERUNMKToK
KyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhOb2RlTGlzdEN1c3RvbS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpOQU1FRF9QUk9QRVJUWV9HRVRURVIpOgorICAgICAgICAqIGJpbmRpbmdz
L3Y4L2N1c3RvbS9WOFNRTFJlc3VsdFNldFJvd0xpc3RDdXN0b20uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q0FMTEJBQ0tfRlVOQ19ERUNMKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20v
VjhTUUxUcmFuc2FjdGlvbkN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQUxMQkFDS19G
VU5DX0RFQ0wpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOFNWR0VsZW1lbnRJbnN0
YW5jZUN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQUxMQkFDS19GVU5DX0RFQ0wpOgor
ICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOFNWR0xlbmd0aEN1c3RvbS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpBQ0NFU1NPUl9HRVRURVIpOgorICAgICAgICAoV2ViQ29yZTo6Q0FMTEJB
Q0tfRlVOQ19ERUNMKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhTVkdNYXRyaXhD
dXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0FMTEJBQ0tfRlVOQ19ERUNMKToKKyAgICAg
ICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhTdG9yYWdlQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlY4Q3VzdG9tOjp2OFN0b3JhZ2VOYW1lZFByb3BlcnR5RW51bWVyYXRvcik6CisgICAg
ICAgIChXZWJDb3JlOjpzdG9yYWdlR2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnN0b3JhZ2VT
ZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6c3RvcmFnZURlbGV0ZXIpOgorICAgICAgICAqIGJp
bmRpbmdzL3Y4L2N1c3RvbS9WOFN0eWxlU2hlZXRMaXN0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Ok5BTUVEX1BST1BFUlRZX0dFVFRFUik6CisgICAgICAgICogYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4VHJlZVdhbGtlckN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0b1Y4KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNBTExCQUNLX0ZVTkNfREVDTCk6CisgICAgICAgICogYmluZGluZ3Mv
djgvY3VzdG9tL1Y4V2ViS2l0Q1NTTWF0cml4Q29uc3RydWN0b3IuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q0FMTEJBQ0tfRlVOQ19ERUNMKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20v
VjhXb3JrZXJDb250ZXh0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFDQ0VTU09SX0dF
VFRFUik6CisgICAgICAgIChXZWJDb3JlOjpBQ0NFU1NPUl9TRVRURVIpOgorICAgICAgICAoV2Vi
Q29yZTo6U2V0VGltZW91dE9ySW50ZXJ2YWwpOgorICAgICAgICAoV2ViQ29yZTo6Q0FMTEJBQ0tf
RlVOQ19ERUNMKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhXb3JrZXJDdXN0b20u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0FMTEJBQ0tfRlVOQ19ERUNMKToKKyAgICAgICAgKFdl
YkNvcmU6OkFDQ0VTU09SX0dFVFRFUik6CisgICAgICAgIChXZWJDb3JlOjpBQ0NFU1NPUl9TRVRU
RVIpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOFhNTEh0dHBSZXF1ZXN0Q29uc3Ry
dWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0FMTEJBQ0tfRlVOQ19ERUNMKToKKyAgICAg
ICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhYTUxIdHRwUmVxdWVzdEN1c3RvbS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpBQ0NFU1NPUl9HRVRURVIpOgorICAgICAgICAoV2ViQ29yZTo6QUNDRVNT
T1JfU0VUVEVSKToKKyAgICAgICAgKFdlYkNvcmU6OkNBTExCQUNLX0ZVTkNfREVDTCk6CisgICAg
ICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4WE1MSHR0cFJlcXVlc3RVcGxvYWRDdXN0b20uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6QUNDRVNTT1JfR0VUVEVSKToKKyAgICAgICAgKFdlYkNvcmU6
OkFDQ0VTU09SX1NFVFRFUik6CisgICAgICAgIChXZWJDb3JlOjpDQUxMQkFDS19GVU5DX0RFQ0wp
OgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOFhTTFRQcm9jZXNzb3JDdXN0b20uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Q0FMTEJBQ0tfRlVOQ19ERUNMKToKKwogMjAwOS0wNy0wOCAg
UGllcnJlIGQnSGVyYmVtb250ICA8cGRoZXJiZW1vbnRAYXBwbGUuY29tPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IFNpbW9uIEZyYXNlci4KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9D
b2RlR2VuZXJhdG9yVjgucG0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L0NvZGVHZW5lcmF0b3JWOC5wbQkocmV2aXNpb24gNDU2NTApCisrKyBXZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCSh3b3JraW5nIGNvcHkpCkBAIC0zNDYsMTIgKzM0
NiwxMiBAQCBzdWIgSG9sZGVyVG9OYXRpdmUKIAogICAgIGlmIChJc05vZGVTdWJUeXBlKCRkYXRh
Tm9kZSkpIHsKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgPDxFTkQpOwotICAgICRp
bXBsQ2xhc3NOYW1lKiBpbXAgPSBWOFByb3h5Ojpjb252ZXJ0RE9NV3JhcHBlclRvTm9kZTwkaW1w
bENsYXNzTmFtZT4oaG9sZGVyKTsKKyAgICAkaW1wbENsYXNzTmFtZSogaW1wID0gVjhET01XcmFw
cGVyOjpjb252ZXJ0RE9NV3JhcHBlclRvTm9kZTwkaW1wbENsYXNzTmFtZT4oaG9sZGVyKTsKIEVO
RAogCiAgICAgfSBlbHNlIHsKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgPDxFTkQp
OwotICAgICRpbXBsQ2xhc3NOYW1lKiBpbXAgPSBWOFByb3h5Ojpjb252ZXJ0VG9OYXRpdmVPYmpl
Y3Q8JGltcGxDbGFzc05hbWU+KFY4Q2xhc3NJbmRleDo6JGNsYXNzSW5kZXgsIGhvbGRlcik7Cisg
ICAgJGltcGxDbGFzc05hbWUqIGltcCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2Jq
ZWN0PCRpbXBsQ2xhc3NOYW1lPihWOENsYXNzSW5kZXg6OiRjbGFzc0luZGV4LCBob2xkZXIpOwog
RU5ECiAKICAgfQpAQCAtMzgxLDcgKzM4MSw3IEBAIHN1YiBHZW5lcmF0ZURvbWFpblNhZmVGdW5j
dGlvbkdldHRlcgogICAgIElOQ19TVEFUUyhcIkRPTS4kaW1wbENsYXNzTmFtZS4kZnVuY05hbWUu
X2dldFwiKTsKICAgICBzdGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+
IHByaXZhdGVfdGVtcGxhdGUgPQogICAgICAgICB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25U
ZW1wbGF0ZT46Ok5ldygkbmV3VGVtcGxhdGVTdHJpbmcpOwotICAgIHY4OjpIYW5kbGU8djg6Ok9i
amVjdD4gaG9sZGVyID0gVjhQcm94eTo6bG9va3VwRE9NV3JhcHBlcihWOENsYXNzSW5kZXg6OiRj
bGFzc0luZGV4LCBpbmZvLlRoaXMoKSk7CisgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBob2xk
ZXIgPSBWOERPTVdyYXBwZXI6Omxvb2t1cERPTVdyYXBwZXIoVjhDbGFzc0luZGV4OjokY2xhc3NJ
bmRleCwgaW5mby5UaGlzKCkpOwogICAgIGlmIChob2xkZXIuSXNFbXB0eSgpKSB7CiAgICAgICAv
LyBjYW4gb25seSByZWFjaCBoZXJlIGJ5ICdvYmplY3QuX19wcm90b19fLmZ1bmMnLCBhbmQgaXQg
c2hvdWxkIHBhc3NlZAogICAgICAgLy8gZG9tYWluIHNlY3VyaXR5IGNoZWNrIGFscmVhZHkKQEAg
LTQyMSw3ICs0MjEsNyBAQCBFTkQKIAogICAgIGlmICgkY2xhc3NJbmRleCBlcSAiRE9NV0lORE9X
IikgewogICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCA8PEVORCk7Ci0gICAgRE9NV2lu
ZG93KiB3aW5kb3cgPSBWOFByb3h5Ojpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8RE9NV2luZG93PihW
OENsYXNzSW5kZXg6OkRPTVdJTkRPVywgaW5mby5Ib2xkZXIoKSk7CisgICAgRE9NV2luZG93KiB3
aW5kb3cgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxET01XaW5kb3c+KFY4
Q2xhc3NJbmRleDo6RE9NV0lORE9XLCBpbmZvLkhvbGRlcigpKTsKICAgICBGcmFtZSogZnJhbWUg
PSB3aW5kb3ctPmZyYW1lKCk7CiAgICAgaWYgKGZyYW1lKSB7CiAgICAgICAvLyBHZXQgdGhlIHBy
b3h5IGNvcnJlc3BvbmRpbmcgdG8gdGhlIERPTVdpbmRvdyBpZiBwb3NzaWJsZSB0bwpAQCAtNTAw
LDcgKzUwMCw3IEBAIEVORAogCiAgICAgaWYgKCRpc1BvZFR5cGUpIHsKICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnREZWNscywgPDxFTkQpOwotICAgIFY4U1ZHUE9EVHlwZVdyYXBwZXI8JGltcGxD
bGFzc05hbWU+KiBpbXBfd3JhcHBlciA9IFY4UHJveHk6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxW
OFNWR1BPRFR5cGVXcmFwcGVyPCRpbXBsQ2xhc3NOYW1lPiA+KFY4Q2xhc3NJbmRleDo6JGNsYXNz
SW5kZXgsIGluZm8uSG9sZGVyKCkpOworICAgIFY4U1ZHUE9EVHlwZVdyYXBwZXI8JGltcGxDbGFz
c05hbWU+KiBpbXBfd3JhcHBlciA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0
PFY4U1ZHUE9EVHlwZVdyYXBwZXI8JGltcGxDbGFzc05hbWU+ID4oVjhDbGFzc0luZGV4OjokY2xh
c3NJbmRleCwgaW5mby5Ib2xkZXIoKSk7CiAgICAgJGltcGxDbGFzc05hbWUgaW1wX2luc3RhbmNl
ID0gKmltcF93cmFwcGVyOwogRU5ECiAgICAgICAgIGlmICgkZ2V0dGVyU3RyaW5nVXNlc0ltcCkg
ewpAQCAtNTEyLDcgKzUxMiw3IEBAIEVORAogICAgIH0gZWxzaWYgKCRhdHRyRXh0LT57InY4T25Q
cm90byJ9IHx8ICRhdHRyRXh0LT57IlY4RGlzYWxsb3dTaGFkb3dpbmcifSkgewogICAgICAgICAj
IHBlcmZvcm0gbG9va3VwIGZpcnN0CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsIDw8
RU5EKTsKLSAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGhvbGRlciA9IFY4UHJveHk6Omxvb2t1
cERPTVdyYXBwZXIoVjhDbGFzc0luZGV4OjokY2xhc3NJbmRleCwgaW5mby5UaGlzKCkpOworICAg
IHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gaG9sZGVyID0gVjhET01XcmFwcGVyOjpsb29rdXBET01X
cmFwcGVyKFY4Q2xhc3NJbmRleDo6JGNsYXNzSW5kZXgsIGluZm8uVGhpcygpKTsKICAgICBpZiAo
aG9sZGVyLklzRW1wdHkoKSkgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKIEVORAogICAgICAgICBI
b2xkZXJUb05hdGl2ZSgkZGF0YU5vZGUsICRpbXBsQ2xhc3NOYW1lLCAkY2xhc3NJbmRleCk7CkBA
IC02MjQsNyArNjI0LDcgQEAgRU5ECiAKICAgICBpZiAoJGF0dHJJc1BvZFR5cGUpIHsKICAgICAg
ICAgbXkgJGNsYXNzSW5kZXggPSB1YygkYXR0clR5cGUpOwotICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudERlY2xzLCAiICAgIHJldHVybiBWOFByb3h5Ojpjb252ZXJ0VG9WOE9iamVjdChWOENsYXNz
SW5kZXg6OiRjbGFzc0luZGV4LCB3cmFwcGVyKTtcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudERlY2xzLCAiICAgIHJldHVybiBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb1Y4T2JqZWN0KFY4
Q2xhc3NJbmRleDo6JGNsYXNzSW5kZXgsIHdyYXBwZXIpO1xuIik7CiAgICAgfSBlbHNlIHsKICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICByZXR1cm4gIi5OYXRpdmVUb0pTVmFs
dWUoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLCAkcmVzdWx0KS4iO1xuIik7CiAgICAgfQpAQCAtNjc0
LDE0ICs2NzQsMTQgQEAgc3ViIEdlbmVyYXRlTm9ybWFsQXR0clNldHRlcgogICAgIGlmICgkaXNQ
b2RUeXBlKSB7CiAgICAgICAgICRpbXBsQ2xhc3NOYW1lID0gR2V0TmF0aXZlVHlwZSgkaW1wbENs
YXNzTmFtZSk7CiAgICAgICAgICRpbXBsSW5jbHVkZXN7IlY4U1ZHUE9EVHlwZVdyYXBwZXIuaCJ9
ID0gMTsKLSAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICBWOFNWR1BPRFR5cGVX
cmFwcGVyPCRpbXBsQ2xhc3NOYW1lPiogd3JhcHBlciA9IFY4UHJveHk6OmNvbnZlcnRUb05hdGl2
ZU9iamVjdDxWOFNWR1BPRFR5cGVXcmFwcGVyPCRpbXBsQ2xhc3NOYW1lPiA+KFY4Q2xhc3NJbmRl
eDo6JGNsYXNzSW5kZXgsIGluZm8uSG9sZGVyKCkpO1xuIik7CisgICAgICAgIHB1c2goQGltcGxD
b250ZW50RGVjbHMsICIgICAgVjhTVkdQT0RUeXBlV3JhcHBlcjwkaW1wbENsYXNzTmFtZT4qIHdy
YXBwZXIgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxWOFNWR1BPRFR5cGVX
cmFwcGVyPCRpbXBsQ2xhc3NOYW1lPiA+KFY4Q2xhc3NJbmRleDo6JGNsYXNzSW5kZXgsIGluZm8u
SG9sZGVyKCkpO1xuIik7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgJGlt
cGxDbGFzc05hbWUgaW1wX2luc3RhbmNlID0gKndyYXBwZXI7XG4iKTsKICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnREZWNscywgIiAgICAkaW1wbENsYXNzTmFtZSogaW1wID0gJmltcF9pbnN0YW5j
ZTtcbiIpOwogCiAgICAgfSBlbHNpZiAoJGF0dHJFeHQtPnsidjhPblByb3RvIn0pIHsKICAgICAg
ICAgIyBwZXJmb3JtIGxvb2t1cCBmaXJzdAogICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xz
LCA8PEVORCk7Ci0gICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBob2xkZXIgPSBWOFByb3h5Ojps
b29rdXBET01XcmFwcGVyKFY4Q2xhc3NJbmRleDo6JGNsYXNzSW5kZXgsIGluZm8uVGhpcygpKTsK
KyAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGhvbGRlciA9IFY4RE9NV3JhcHBlcjo6bG9va3Vw
RE9NV3JhcHBlcihWOENsYXNzSW5kZXg6OiRjbGFzc0luZGV4LCBpbmZvLlRoaXMoKSk7CiAgICAg
aWYgKGhvbGRlci5Jc0VtcHR5KCkpIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CiBFTkQKICAgICAg
ICAgSG9sZGVyVG9OYXRpdmUoJGRhdGFOb2RlLCAkaW1wbENsYXNzTmFtZSwgJGNsYXNzSW5kZXgp
OwpAQCAtNzk1LDcgKzc5NSw3IEBAIHN1YiBHZW5lcmF0ZUZ1bmN0aW9uQ2FsbGJhY2sKIAogICAg
IGlmIChJc1BvZFR5cGUoJGltcGxDbGFzc05hbWUpKSB7CiAgICAgICAgIG15ICRuYXRpdmVDbGFz
c05hbWUgPSBHZXROYXRpdmVUeXBlKCRpbXBsQ2xhc3NOYW1lKTsKLSAgICAgICAgcHVzaChAaW1w
bENvbnRlbnREZWNscywgIiAgICBWOFNWR1BPRFR5cGVXcmFwcGVyPCRuYXRpdmVDbGFzc05hbWU+
KiBpbXBfd3JhcHBlciA9IFY4UHJveHk6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxWOFNWR1BPRFR5
cGVXcmFwcGVyPCRuYXRpdmVDbGFzc05hbWU+ID4oVjhDbGFzc0luZGV4OjokY2xhc3NJbmRleCwg
YXJncy5Ib2xkZXIoKSk7XG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAg
ICBWOFNWR1BPRFR5cGVXcmFwcGVyPCRuYXRpdmVDbGFzc05hbWU+KiBpbXBfd3JhcHBlciA9IFY4
RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PFY4U1ZHUE9EVHlwZVdyYXBwZXI8JG5h
dGl2ZUNsYXNzTmFtZT4gPihWOENsYXNzSW5kZXg6OiRjbGFzc0luZGV4LCBhcmdzLkhvbGRlcigp
KTtcbiIpOwogICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgICRuYXRpdmVDbGFz
c05hbWUgaW1wX2luc3RhbmNlID0gKmltcF93cmFwcGVyO1xuIik7CiAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50RGVjbHMsICIgICAgJG5hdGl2ZUNsYXNzTmFtZSogaW1wID0gJmltcF9pbnN0YW5j
ZTtcbiIpOwogICAgIH0gZWxzZSB7CkBAIC0xNDgyLDcgKzE0ODIsNyBAQCBzdWIgR2VuZXJhdGVG
dW5jdGlvbkNhbGxTdHJpbmcoKQogICAgICAgICB9CiAgICAgICAgICRyZXN1bHQgLj0gJGluZGVu
dCAuICJpZiAoc3VjY2VzcylcbiI7CiAgICAgICAgICRyZXN1bHQgLj0gJGluZGVudCAuICIgICAg
IiAuCi0gICAgICAgICAgICAicmV0dXJuIFY4UHJveHk6OmNvbnZlcnROb2RlVG9WOE9iamVjdCgk
bm9kZVRvUmV0dXJuKTtcbiI7CisgICAgICAgICAgICAicmV0dXJuIFY4RE9NV3JhcHBlcjo6Y29u
dmVydE5vZGVUb1Y4T2JqZWN0KCRub2RlVG9SZXR1cm4pO1xuIjsKICAgICAgICAgJHJlc3VsdCAu
PSAkaW5kZW50IC4gInJldHVybiB2ODo6TnVsbCgpO1xuIjsKICAgICAgICAgcmV0dXJuICRyZXN1
bHQ7CiAgICAgfSBlbHNpZiAoJHJldHVyblR5cGUgZXEgInZvaWQiKSB7CkBAIC0xNTQ3LDcgKzE1
NDcsNyBAQCBzdWIgR2VuZXJhdGVGdW5jdGlvbkNhbGxTdHJpbmcoKQogCiAgICAgaWYgKCRyZXR1
cm5zUG9kVHlwZSkgewogICAgICAgICBteSAkY2xhc3NJbmRleCA9IHVjKCRyZXR1cm5UeXBlKTsK
LSAgICAgICAgJHJlc3VsdCAuPSAkaW5kZW50IC4gInJldHVybiBWOFByb3h5Ojpjb252ZXJ0VG9W
OE9iamVjdChWOENsYXNzSW5kZXg6OiRjbGFzc0luZGV4LCB3cmFwcGVyKTtcbiI7CisgICAgICAg
ICRyZXN1bHQgLj0gJGluZGVudCAuICJyZXR1cm4gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9WOE9i
amVjdChWOENsYXNzSW5kZXg6OiRjbGFzc0luZGV4LCB3cmFwcGVyKTtcbiI7CiAgICAgfSBlbHNl
IHsKICAgICAgICAgJHJlc3VsdCAuPSAkaW5kZW50IC4gInJldHVybiAiIC4gTmF0aXZlVG9KU1Zh
bHVlKCRmdW5jdGlvbi0+c2lnbmF0dXJlLCAkcmV0dXJuKSAuICI7XG4iOwogICAgIH0KQEAgLTE4
MjgsNyArMTgyOCw3IEBAIHN1YiBKU1ZhbHVlVG9OYXRpdmUKICAgICAgICAgJGltcGxJbmNsdWRl
c3siVjhOb2RlLmgifSA9IDE7CiAKICAgICAgICAgIyBFdmVudFRhcmdldCBpcyBub3QgaW4gRE9N
IGhpZXJhcmNoeSwgYnV0IGFsbCBOb2RlcyBhcmUgRXZlbnRUYXJnZXQuCi0gICAgICAgIHJldHVy
biAiVjhOb2RlOjpIYXNJbnN0YW5jZSgkdmFsdWUpID8gVjhQcm94eTo6Y29udmVydERPTVdyYXBw
ZXJUb05vZGU8Tm9kZT4oJHZhbHVlKSA6IDAiOworICAgICAgICByZXR1cm4gIlY4Tm9kZTo6SGFz
SW5zdGFuY2UoJHZhbHVlKSA/IFY4RE9NV3JhcHBlcjo6Y29udmVydERPTVdyYXBwZXJUb05vZGU8
Tm9kZT4oJHZhbHVlKSA6IDAiOwogICAgIH0KIAogICAgIEFkZEluY2x1ZGVzRm9yVHlwZSgkdHlw
ZSk7CkBAIC0xODM5LDcgKzE4MzksNyBAQCBzdWIgSlNWYWx1ZVRvTmF0aXZlCiAKICAgICAgICAg
IyBQZXJmb3JtIHR5cGUgY2hlY2tzIG9uIHRoZSBwYXJhbWV0ZXIsIGlmIGl0IGlzIGV4cGVjdGVk
IE5vZGUgdHlwZSwKICAgICAgICAgIyByZXR1cm4gTlVMTC4KLSAgICAgICAgcmV0dXJuICJWOCR7
dHlwZX06Okhhc0luc3RhbmNlKCR2YWx1ZSkgPyBWOFByb3h5Ojpjb252ZXJ0RE9NV3JhcHBlclRv
Tm9kZTwke3R5cGV9PigkdmFsdWUpIDogMCI7CisgICAgICAgIHJldHVybiAiVjgke3R5cGV9OjpI
YXNJbnN0YW5jZSgkdmFsdWUpID8gVjhET01XcmFwcGVyOjpjb252ZXJ0RE9NV3JhcHBlclRvTm9k
ZTwke3R5cGV9PigkdmFsdWUpIDogMCI7CiAgICAgfSBlbHNlIHsKICAgICAgICAgIyBUT0RPOiBU
ZW1wb3JhcnkgdG8gYXZvaWQgV2luZG93IG5hbWUgY29uZmxpY3QuCiAgICAgICAgIG15ICRjbGFz
c0luZGV4ID0gdWMoJHR5cGUpOwpAQCAtMTg1OCw3ICsxODU4LDcgQEAgc3ViIEpTVmFsdWVUb05h
dGl2ZQogCiAgICAgICAgICMgUGVyZm9ybSB0eXBlIGNoZWNrcyBvbiB0aGUgcGFyYW1ldGVyLCBp
ZiBpdCBpcyBleHBlY3RlZCBOb2RlIHR5cGUsCiAgICAgICAgICMgcmV0dXJuIE5VTEwuCi0gICAg
ICAgIHJldHVybiAiVjgke3R5cGV9OjpIYXNJbnN0YW5jZSgkdmFsdWUpID8gVjhQcm94eTo6Y29u
dmVydFRvTmF0aXZlT2JqZWN0PCR7aW1wbENsYXNzTmFtZX0+KFY4Q2xhc3NJbmRleDo6JHtjbGFz
c0luZGV4fSwgJHZhbHVlKSA6IDAiOworICAgICAgICByZXR1cm4gIlY4JHt0eXBlfTo6SGFzSW5z
dGFuY2UoJHZhbHVlKSA/IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PCR7aW1w
bENsYXNzTmFtZX0+KFY4Q2xhc3NJbmRleDo6JHtjbGFzc0luZGV4fSwgJHZhbHVlKSA6IDAiOwog
ICAgIH0KIH0KIApAQCAtMjAxMiwyMyArMjAxMiwyMyBAQCBzdWIgTmF0aXZlVG9KU1ZhbHVlCiAK
ICAgICAjIHNwZWNpYWwgY2FzZSBmb3Igbm9uLURPTSBub2RlIGludGVyZmFjZXMKICAgICBpZiAo
SXNET01Ob2RlVHlwZSgkdHlwZSkpIHsKLSAgICAgICAgcmV0dXJuICJWOFByb3h5Ojpjb252ZXJ0
Tm9kZVRvVjhPYmplY3QoJHZhbHVlKSI7CisgICAgICAgIHJldHVybiAiVjhET01XcmFwcGVyOjpj
b252ZXJ0Tm9kZVRvVjhPYmplY3QoJHZhbHVlKSI7CiAgICAgfQogCiAgICAgaWYgKCR0eXBlIGVx
ICJFdmVudFRhcmdldCIgb3IgJHR5cGUgZXEgIlNWR0VsZW1lbnRJbnN0YW5jZSIpIHsKLSAgICAg
ICAgcmV0dXJuICJWOFByb3h5Ojpjb252ZXJ0RXZlbnRUYXJnZXRUb1Y4T2JqZWN0KCR2YWx1ZSki
OworICAgICAgICByZXR1cm4gIlY4RE9NV3JhcHBlcjo6Y29udmVydEV2ZW50VGFyZ2V0VG9WOE9i
amVjdCgkdmFsdWUpIjsKICAgICB9CiAKICAgICBpZiAoJHR5cGUgZXEgIkV2ZW50IikgewotICAg
ICAgICByZXR1cm4gIlY4UHJveHk6OmNvbnZlcnRFdmVudFRvVjhPYmplY3QoJHZhbHVlKSI7Cisg
ICAgICAgIHJldHVybiAiVjhET01XcmFwcGVyOjpjb252ZXJ0RXZlbnRUb1Y4T2JqZWN0KCR2YWx1
ZSkiOwogICAgIH0KIAogICAgIGlmICgkdHlwZSBlcSAiRXZlbnRMaXN0ZW5lciIpIHsKLSAgICAg
ICAgcmV0dXJuICJWOFByb3h5Ojpjb252ZXJ0RXZlbnRMaXN0ZW5lclRvVjhPYmplY3QoJHZhbHVl
KSI7CisgICAgICAgIHJldHVybiAiVjhET01XcmFwcGVyOjpjb252ZXJ0RXZlbnRMaXN0ZW5lclRv
VjhPYmplY3QoJHZhbHVlKSI7CiAgICAgfQogCiAgICAgaWYgKCR0eXBlIGVxICJSR0JDb2xvciIp
IHsKLSAgICAgICAgcmV0dXJuICJWOFByb3h5Ojpjb252ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5k
ZXg6OlJHQkNPTE9SLCBuZXcgUkdCQ29sb3IoJHZhbHVlKSkiOworICAgICAgICByZXR1cm4gIlY4
RE9NV3JhcHBlcjo6Y29udmVydFRvVjhPYmplY3QoVjhDbGFzc0luZGV4OjpSR0JDT0xPUiwgbmV3
IFJHQkNvbG9yKCR2YWx1ZSkpIjsKICAgICB9CiAKICAgICBpZiAoJHR5cGUgZXEgIldvcmtlckNv
bnRleHQiIG9yICR0eXBlIGVxICJXb3JrZXJMb2NhdGlvbiIgb3IgJHR5cGUgZXEgIldvcmtlck5h
dmlnYXRvciIpIHsKQEAgLTIwNDcsNyArMjA0Nyw3IEBAIHN1YiBOYXRpdmVUb0pTVmFsdWUKICAg
ICAgICAgICAgICR2YWx1ZSA9IEdlbmVyYXRlU1ZHU3RhdGljUG9kVHlwZVdyYXBwZXIoJHR5cGUs
ICR2YWx1ZSk7CiAgICAgICAgIH0KIAotICAgICAgICByZXR1cm4gIlY4UHJveHk6OmNvbnZlcnRU
b1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6JGNsYXNzSW5kZXgsICR2YWx1ZSkiOworICAgICAgICBy
ZXR1cm4gIlY4RE9NV3JhcHBlcjo6Y29udmVydFRvVjhPYmplY3QoVjhDbGFzc0luZGV4OjokY2xh
c3NJbmRleCwgJHZhbHVlKSI7CiAgICAgfQogfQogCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4
L1NjcmlwdENvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mvdjgv
U2NyaXB0Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDQ1NjUwKQorKysgV2ViQ29yZS9iaW5kaW5n
cy92OC9TY3JpcHRDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU1LDcgKzE1NSw3
IEBAIGJvb2wgU2NyaXB0Q29udHJvbGxlcjo6cHJvY2Vzc2luZ1VzZXJHZXMKIAogICAgIHY4OjpI
YW5kbGU8djg6Ok9iamVjdD4gZ2xvYmFsID0gdjhDb250ZXh0LT5HbG9iYWwoKTsKICAgICB2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4ganNFdmVudCA9IGdsb2JhbC0+R2V0KHY4OjpTdHJpbmc6Ok5ld1N5
bWJvbCgiZXZlbnQiKSk7Ci0gICAgRXZlbnQqIGV2ZW50ID0gVjhQcm94eTo6Y29udmVydFRvTmF0
aXZlRXZlbnQoanNFdmVudCk7CisgICAgRXZlbnQqIGV2ZW50ID0gVjhET01XcmFwcGVyOjpjb252
ZXJ0VG9OYXRpdmVFdmVudChqc0V2ZW50KTsKIAogICAgIC8vIEJhc2VkIG9uIGNvZGUgZnJvbSBr
anNfYmluZGluZ3MuY3BwLgogICAgIC8vIE5vdGU6IFRoaXMgaXMgbW9yZSBsaWJlcmFsIHRoYW4g
RmlyZWZveCdzIGltcGxlbWVudGF0aW9uLgpAQCAtMzM3LDcgKzMzNyw3IEBAIHN0YXRpYyBOUE9i
amVjdCogY3JlYXRlU2NyaXB0T2JqZWN0KEZyYW0KIAogICAgIHY4OjpDb250ZXh0OjpTY29wZSBz
Y29wZSh2OENvbnRleHQpOwogICAgIERPTVdpbmRvdyogd2luZG93ID0gZnJhbWUtPmRvbVdpbmRv
dygpOwotICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBnbG9iYWwgPSBWOFByb3h5Ojpjb252ZXJ0
VG9WOE9iamVjdChWOENsYXNzSW5kZXg6OkRPTVdJTkRPVywgd2luZG93KTsKKyAgICB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gZ2xvYmFsID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9WOE9iamVjdChW
OENsYXNzSW5kZXg6OkRPTVdJTkRPVywgd2luZG93KTsKICAgICBBU1NFUlQoZ2xvYmFsLT5Jc09i
amVjdCgpKTsKICAgICByZXR1cm4gbnBDcmVhdGVWOFNjcmlwdE9iamVjdCgwLCB2ODo6SGFuZGxl
PHY4OjpPYmplY3Q+OjpDYXN0KGdsb2JhbCksIHdpbmRvdyk7CiB9CkBAIC0zNzQsNyArMzc0LDcg
QEAgTlBPYmplY3QqIFNjcmlwdENvbnRyb2xsZXI6OmNyZWF0ZVNjcmlwdAogICAgIHY4OjpDb250
ZXh0OjpTY29wZSBzY29wZSh2OENvbnRleHQpOwogCiAgICAgRE9NV2luZG93KiB3aW5kb3cgPSBt
X2ZyYW1lLT5kb21XaW5kb3coKTsKLSAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdjhwbHVnaW4g
PSBWOFByb3h5Ojpjb252ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6OkhUTUxFTUJFREVMRU1F
TlQsIHBsdWdpbik7CisgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHY4cGx1Z2luID0gVjhET01X
cmFwcGVyOjpjb252ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6OkhUTUxFTUJFREVMRU1FTlQs
IHBsdWdpbik7CiAgICAgaWYgKCF2OHBsdWdpbi0+SXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJu
IGNyZWF0ZU5vU2NyaXB0T2JqZWN0KCk7CiAKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvU2Ny
aXB0T2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdE9i
amVjdC5jcHAJKHJldmlzaW9uIDQ1NjUwKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRP
YmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTksNyArMTE5LDcgQEAgYm9vbCBTY3JpcHRH
bG9iYWxPYmplY3Q6OnNldChTY3JpcHRTdGF0ZQogYm9vbCBTY3JpcHRHbG9iYWxPYmplY3Q6OnNl
dChTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUsIGNvbnN0IGNoYXIqIG5hbWUsIEluc3BlY3RvckNv
bnRyb2xsZXIqIHZhbHVlKQogewogICAgIFNjcmlwdFNjb3BlIHNjb3BlKHNjcmlwdFN0YXRlKTsK
LSAgICBzY29wZS5nbG9iYWwoKS0+U2V0KHY4OjpTdHJpbmc6Ok5ldyhuYW1lKSwgVjhQcm94eTo6
Y29udmVydFRvVjhPYmplY3QoVjhDbGFzc0luZGV4OjpJTlNQRUNUT1JDT05UUk9MTEVSLCB2YWx1
ZSkpOworICAgIHNjb3BlLmdsb2JhbCgpLT5TZXQodjg6OlN0cmluZzo6TmV3KG5hbWUpLCBWOERP
TVdyYXBwZXI6OmNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6SU5TUEVDVE9SQ09OVFJP
TExFUiwgdmFsdWUpKTsKICAgICByZXR1cm4gc2NvcGUuc3VjY2VzcygpOwogfQogCkluZGV4OiBX
ZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdE9iamVjdFF1YXJhbnRpbmUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0T2JqZWN0UXVhcmFudGluZS5jcHAJKHJldmlz
aW9uIDQ1NjUwKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRPYmplY3RRdWFyYW50aW5l
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODAsNyArODAsNyBAQCBib29sIGdldFF1YXJhbnRpbmVk
U2NyaXB0T2JqZWN0KE5vZGUqIG5vCiAgICAgdjg6OkxvY2FsPHY4OjpDb250ZXh0PiBjb250ZXh0
ID0gVjhQcm94eTo6Y29udGV4dChub2RlLT5kb2N1bWVudCgpLT5wYWdlKCktPm1haW5GcmFtZSgp
KTsKICAgICB2ODo6Q29udGV4dDo6U2NvcGUgc2NvcGUoY29udGV4dCk7CiAKLSAgICB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gdjhOb2RlID0gVjhQcm94eTo6Y29udmVydE5vZGVUb1Y4T2JqZWN0KG5v
ZGUpOworICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2OE5vZGUgPSBWOERPTVdyYXBwZXI6OmNv
bnZlcnROb2RlVG9WOE9iamVjdChub2RlKTsKICAgICBxdWFyYW50aW5lZE9iamVjdCA9IFNjcmlw
dE9iamVjdCh2ODo6TG9jYWw8djg6Ok9iamVjdD4odjg6Ok9iamVjdDo6Q2FzdCgqdjhOb2RlKSkp
OwogCiAgICAgcmV0dXJuIHRydWU7CkBAIC05NCw3ICs5NCw3IEBAIGJvb2wgZ2V0UXVhcmFudGlu
ZWRTY3JpcHRPYmplY3QoRE9NV2luZG8KICAgICB2ODo6TG9jYWw8djg6OkNvbnRleHQ+IGNvbnRl
eHQgPSBWOFByb3h5Ojpjb250ZXh0KGRvbVdpbmRvdy0+ZnJhbWUoKSk7CiAgICAgdjg6OkNvbnRl
eHQ6OlNjb3BlIHNjb3BlKGNvbnRleHQpOwogCi0gICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHY4
RG9tV2luZG93ID0gVjhQcm94eTo6Y29udmVydFRvVjhPYmplY3QoVjhDbGFzc0luZGV4OjpET01X
SU5ET1csIGRvbVdpbmRvdyk7CisgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHY4RG9tV2luZG93
ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6OkRPTVdJTkRP
VywgZG9tV2luZG93KTsKICAgICBxdWFyYW50aW5lZE9iamVjdCA9IFNjcmlwdE9iamVjdCh2ODo6
TG9jYWw8djg6Ok9iamVjdD4odjg6Ok9iamVjdDo6Q2FzdCgqdjhEb21XaW5kb3cpKSk7CiAKICAg
ICByZXR1cm4gdHJ1ZTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvVjhBYnN0cmFjdEV2ZW50
TGlzdGVuZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhBYnN0cmFj
dEV2ZW50TGlzdGVuZXIuY3BwCShyZXZpc2lvbiA0NTY1MCkKKysrIFdlYkNvcmUvYmluZGluZ3Mv
djgvVjhBYnN0cmFjdEV2ZW50TGlzdGVuZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjMsNyAr
MTIzLDcgQEAgdm9pZCBWOEFic3RyYWN0RXZlbnRMaXN0ZW5lcjo6aGFuZGxlRXZlbgogICAgIHY4
OjpDb250ZXh0OjpTY29wZSBzY29wZSh2OENvbnRleHQpOwogCiAgICAgLy8gR2V0IHRoZSBWOCB3
cmFwcGVyIGZvciB0aGUgZXZlbnQgb2JqZWN0LgotICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBq
c0V2ZW50ID0gVjhQcm94eTo6Y29udmVydEV2ZW50VG9WOE9iamVjdChldmVudCk7CisgICAgdjg6
OkhhbmRsZTx2ODo6VmFsdWU+IGpzRXZlbnQgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRFdmVudFRv
VjhPYmplY3QoZXZlbnQpOwogCiAgICAgaW52b2tlRXZlbnRIYW5kbGVyKHY4Q29udGV4dCwgZXZl
bnQsIGpzRXZlbnQsIGlzV2luZG93RXZlbnQpOwogCkBAIC0xNTAsNyArMTUwLDcgQEAgdjg6Okxv
Y2FsPHY4OjpPYmplY3Q+IFY4QWJzdHJhY3RFdmVudExpcwogICAgICAgICByZXR1cm4gdjg6OkNv
bnRleHQ6OkdldEN1cnJlbnQoKS0+R2xvYmFsKCk7CiAKICAgICBFdmVudFRhcmdldCogdGFyZ2V0
ID0gZXZlbnQtPmN1cnJlbnRUYXJnZXQoKTsKLSAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFs
dWUgPSBWOFByb3h5Ojpjb252ZXJ0RXZlbnRUYXJnZXRUb1Y4T2JqZWN0KHRhcmdldCk7CisgICAg
djg6OkhhbmRsZTx2ODo6VmFsdWU+IHZhbHVlID0gVjhET01XcmFwcGVyOjpjb252ZXJ0RXZlbnRU
YXJnZXRUb1Y4T2JqZWN0KHRhcmdldCk7CiAgICAgaWYgKHZhbHVlLklzRW1wdHkoKSkKICAgICAg
ICAgcmV0dXJuIHY4OjpMb2NhbDx2ODo6T2JqZWN0PigpOwogICAgIHJldHVybiB2ODo6TG9jYWw8
djg6Ok9iamVjdD46Ok5ldyh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KHZhbHVlKSk7Cklu
ZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4Q29sbGVjdGlvbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9iaW5kaW5ncy92OC9WOENvbGxlY3Rpb24uY3BwCShyZXZpc2lvbiA0NTY1MCkKKysr
IFdlYkNvcmUvYmluZGluZ3MvdjgvVjhDb2xsZWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTIsNyArNTIsNyBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9PcHRpb25zQ29sbGVjdGlvCiAg
ICAgICAgIHJldHVybiB2YWx1ZTsKICAgICB9CiAKLSAgICBIVE1MT3B0aW9uRWxlbWVudCogZWxl
bWVudCA9IFY4UHJveHk6OmNvbnZlcnRET01XcmFwcGVyVG9Ob2RlPEhUTUxPcHRpb25FbGVtZW50
Pih2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KHZhbHVlKSk7CisgICAgSFRNTE9wdGlvbkVs
ZW1lbnQqIGVsZW1lbnQgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRET01XcmFwcGVyVG9Ob2RlPEhU
TUxPcHRpb25FbGVtZW50Pih2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KHZhbHVlKSk7CiAg
ICAgYmFzZS0+c2V0T3B0aW9uKGluZGV4LCBlbGVtZW50LCBlYyk7CiAKICAgICBWOFByb3h5Ojpz
ZXRET01FeGNlcHRpb24oZWMpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9WOENvbGxlY3Rp
b24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4Q29sbGVjdGlvbi5oCShy
ZXZpc2lvbiA0NTY1MCkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhDb2xsZWN0aW9uLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQ3LDggKzQ3LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAg
ICAgICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6OlZhbHVlPigpOwogICAgICAgICBWOENsYXNzSW5k
ZXg6OlY4V3JhcHBlclR5cGUgdHlwZSA9IFY4Q2xhc3NJbmRleDo6RnJvbUludChpbXBsZW1lbnRh
dGlvblR5cGUtPkludDMyVmFsdWUoKSk7CiAgICAgICAgIGlmICh0eXBlID09IFY4Q2xhc3NJbmRl
eDo6Tk9ERSkKLSAgICAgICAgICAgIHJldHVybiBWOFByb3h5Ojpjb252ZXJ0Tm9kZVRvVjhPYmpl
Y3Qoc3RhdGljX2Nhc3Q8Tm9kZSo+KGltcGxlbWVudGF0aW9uKSk7Ci0gICAgICAgIHJldHVybiBW
OFByb3h5Ojpjb252ZXJ0VG9WOE9iamVjdCh0eXBlLCBpbXBsZW1lbnRhdGlvbik7CisgICAgICAg
ICAgICByZXR1cm4gVjhET01XcmFwcGVyOjpjb252ZXJ0Tm9kZVRvVjhPYmplY3Qoc3RhdGljX2Nh
c3Q8Tm9kZSo+KGltcGxlbWVudGF0aW9uKSk7CisgICAgICAgIHJldHVybiBWOERPTVdyYXBwZXI6
OmNvbnZlcnRUb1Y4T2JqZWN0KHR5cGUsIGltcGxlbWVudGF0aW9uKTsKICAgICB9CiAKICAgICB0
ZW1wbGF0ZTxjbGFzcyBUPiBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGdldFY4T2JqZWN0
KFBhc3NSZWZQdHI8VD4gaW1wbGVtZW50YXRpb24sIHY4OjpMb2NhbDx2ODo6VmFsdWU+IGltcGxl
bWVudGF0aW9uVHlwZSkKQEAgLTYxLDEwICs2MSwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ODo6TG9jYWw8
djg6OlZhbHVlPiBpbXBsZW1lbnRhdGlvblR5cGUpCiAgICAgewogICAgICAgICAvLyBGSVhNRTog
YXNzZXJ0IG9iamVjdCBpcyBhIGNvbGxlY3Rpb24gdHlwZQotICAgICAgICBBU1NFUlQoVjhQcm94
eTo6bWF5YmVET01XcmFwcGVyKG9iamVjdCkpOwotICAgICAgICBWOENsYXNzSW5kZXg6OlY4V3Jh
cHBlclR5cGUgd3JhcHBlclR5cGUgPSBWOFByb3h5Ojpkb21XcmFwcGVyVHlwZShvYmplY3QpOwor
ICAgICAgICBBU1NFUlQoVjhET01XcmFwcGVyOjptYXliZURPTVdyYXBwZXIob2JqZWN0KSk7Cisg
ICAgICAgIFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlwZSB3cmFwcGVyVHlwZSA9IFY4RE9NV3Jh
cHBlcjo6ZG9tV3JhcHBlclR5cGUob2JqZWN0KTsKICAgICAgICAgQVNTRVJUKHdyYXBwZXJUeXBl
ICE9IFY4Q2xhc3NJbmRleDo6Tk9ERSk7Ci0gICAgICAgIENvbGxlY3Rpb24qIGNvbGxlY3Rpb24g
PSBWOFByb3h5Ojpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8Q29sbGVjdGlvbj4od3JhcHBlclR5cGUs
IG9iamVjdCk7CisgICAgICAgIENvbGxlY3Rpb24qIGNvbGxlY3Rpb24gPSBWOERPTVdyYXBwZXI6
OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxDb2xsZWN0aW9uPih3cmFwcGVyVHlwZSwgb2JqZWN0KTsK
ICAgICAgICAgU3RyaW5nIHByb3BlcnR5TmFtZSA9IHRvV2ViQ29yZVN0cmluZyhuYW1lKTsKICAg
ICAgICAgcmV0dXJuIGdldFY4T2JqZWN0PEl0ZW1UeXBlPihjb2xsZWN0aW9uLT5uYW1lZEl0ZW0o
cHJvcGVydHlOYW1lKSwgaW1wbGVtZW50YXRpb25UeXBlKTsKICAgICB9CkBAIC04Nyw4ICs4Nyw4
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAvLyBBIHRlbXBsYXRlIG9mIG5hbWVkIHByb3Bl
cnR5IGFjY2Vzc29yIG9mIEhUTUxTZWxlY3RFbGVtZW50IGFuZCBIVE1MRm9ybUVsZW1lbnQuCiAg
ICAgdGVtcGxhdGU8Y2xhc3MgQ29sbGVjdGlvbj4gc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVl
PiBub2RlQ29sbGVjdGlvbk5hbWVkUHJvcGVydHlHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+
IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCiAgICAgewotICAgICAgICBBU1NF
UlQoVjhQcm94eTo6bWF5YmVET01XcmFwcGVyKGluZm8uSG9sZGVyKCkpKTsKLSAgICAgICAgQVNT
RVJUKFY4UHJveHk6OmRvbVdyYXBwZXJUeXBlKGluZm8uSG9sZGVyKCkpID09IFY4Q2xhc3NJbmRl
eDo6Tk9ERSk7CisgICAgICAgIEFTU0VSVChWOERPTVdyYXBwZXI6Om1heWJlRE9NV3JhcHBlcihp
bmZvLkhvbGRlcigpKSk7CisgICAgICAgIEFTU0VSVChWOERPTVdyYXBwZXI6OmRvbVdyYXBwZXJU
eXBlKGluZm8uSG9sZGVyKCkpID09IFY4Q2xhc3NJbmRleDo6Tk9ERSk7CiAgICAgICAgIHY4OjpI
YW5kbGU8djg6OlZhbHVlPiB2YWx1ZSA9IGluZm8uSG9sZGVyKCktPkdldFJlYWxOYW1lZFByb3Bl
cnR5SW5Qcm90b3R5cGVDaGFpbihuYW1lKTsKIAogICAgICAgICBpZiAoIXZhbHVlLklzRW1wdHko
KSkKQEAgLTk4LDcgKzk4LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAvLyBwcm9w
ZXJ0aWVzLgogICAgICAgICBpZiAoaW5mby5Ib2xkZXIoKS0+SGFzUmVhbE5hbWVkQ2FsbGJhY2tQ
cm9wZXJ0eShuYW1lKSkKICAgICAgICAgICAgIHJldHVybiBub3RIYW5kbGVkQnlJbnRlcmNlcHRv
cigpOwotICAgICAgICBDb2xsZWN0aW9uKiBjb2xsZWN0aW9uID0gVjhQcm94eTo6Y29udmVydERP
TVdyYXBwZXJUb05vZGU8Q29sbGVjdGlvbj4oaW5mby5Ib2xkZXIoKSk7CisgICAgICAgIENvbGxl
Y3Rpb24qIGNvbGxlY3Rpb24gPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRET01XcmFwcGVyVG9Ob2Rl
PENvbGxlY3Rpb24+KGluZm8uSG9sZGVyKCkpOwogICAgICAgICBTdHJpbmcgcHJvcGVydHlOYW1l
ID0gdG9XZWJDb3JlU3RyaW5nKG5hbWUpOwogICAgICAgICB2b2lkKiBpbXBsZW1lbnRhdGlvbiA9
IGNvbGxlY3Rpb24tPm5hbWVkSXRlbShwcm9wZXJ0eU5hbWUpOwogICAgICAgICByZXR1cm4gZ2V0
VjhPYmplY3QoaW1wbGVtZW50YXRpb24sIGluZm8uRGF0YSgpKTsKQEAgLTEwOSwxMCArMTA5LDEw
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gaW1wbGVtZW50YXRpb25UeXBl
KQogICAgIHsKICAgICAgICAgLy8gRklYTUU6IEFzc2VydCB0aGF0IG9iamVjdCBtdXN0IGJlIGEg
Y29sbGVjdGlvbiB0eXBlLgotICAgICAgICBBU1NFUlQoVjhQcm94eTo6bWF5YmVET01XcmFwcGVy
KG9iamVjdCkpOwotICAgICAgICBWOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5cGUgd3JhcHBlclR5
cGUgPSBWOFByb3h5Ojpkb21XcmFwcGVyVHlwZShvYmplY3QpOworICAgICAgICBBU1NFUlQoVjhE
T01XcmFwcGVyOjptYXliZURPTVdyYXBwZXIob2JqZWN0KSk7CisgICAgICAgIFY4Q2xhc3NJbmRl
eDo6VjhXcmFwcGVyVHlwZSB3cmFwcGVyVHlwZSA9IFY4RE9NV3JhcHBlcjo6ZG9tV3JhcHBlclR5
cGUob2JqZWN0KTsKICAgICAgICAgQVNTRVJUKHdyYXBwZXJUeXBlICE9IFY4Q2xhc3NJbmRleDo6
Tk9ERSk7Ci0gICAgICAgIENvbGxlY3Rpb24qIGNvbGxlY3Rpb24gPSBWOFByb3h5Ojpjb252ZXJ0
VG9OYXRpdmVPYmplY3Q8Q29sbGVjdGlvbj4od3JhcHBlclR5cGUsIG9iamVjdCk7CisgICAgICAg
IENvbGxlY3Rpb24qIGNvbGxlY3Rpb24gPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9i
amVjdDxDb2xsZWN0aW9uPih3cmFwcGVyVHlwZSwgb2JqZWN0KTsKICAgICAgICAgcmV0dXJuIGdl
dFY4T2JqZWN0PEl0ZW1UeXBlPihjb2xsZWN0aW9uLT5pdGVtKGluZGV4KSwgaW1wbGVtZW50YXRp
b25UeXBlKTsKICAgICB9CiAKQEAgLTEyNSw5ICsxMjUsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgLy8gQSB0ZW1wbGF0ZSBvZiBpbmRleCBpbnRlcmNlcHRvciBvZiBIVE1MU2VsZWN0RWxl
bWVudCBhbmQgSFRNTEZvcm1FbGVtZW50LgogICAgIHRlbXBsYXRlPGNsYXNzIENvbGxlY3Rpb24+
IHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gbm9kZUNvbGxlY3Rpb25JbmRleGVkUHJvcGVy
dHlHZXR0ZXIodWludDMyX3QgaW5kZXgsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCiAg
ICAgewotICAgICAgICBBU1NFUlQoVjhQcm94eTo6bWF5YmVET01XcmFwcGVyKGluZm8uSG9sZGVy
KCkpKTsKLSAgICAgICAgQVNTRVJUKFY4UHJveHk6OmRvbVdyYXBwZXJUeXBlKGluZm8uSG9sZGVy
KCkpID09IFY4Q2xhc3NJbmRleDo6Tk9ERSk7Ci0gICAgICAgIENvbGxlY3Rpb24qIGNvbGxlY3Rp
b24gPSBWOFByb3h5Ojpjb252ZXJ0RE9NV3JhcHBlclRvTm9kZTxDb2xsZWN0aW9uPihpbmZvLkhv
bGRlcigpKTsKKyAgICAgICAgQVNTRVJUKFY4RE9NV3JhcHBlcjo6bWF5YmVET01XcmFwcGVyKGlu
Zm8uSG9sZGVyKCkpKTsKKyAgICAgICAgQVNTRVJUKFY4RE9NV3JhcHBlcjo6ZG9tV3JhcHBlclR5
cGUoaW5mby5Ib2xkZXIoKSkgPT0gVjhDbGFzc0luZGV4OjpOT0RFKTsKKyAgICAgICAgQ29sbGVj
dGlvbiogY29sbGVjdGlvbiA9IFY4RE9NV3JhcHBlcjo6Y29udmVydERPTVdyYXBwZXJUb05vZGU8
Q29sbGVjdGlvbj4oaW5mby5Ib2xkZXIoKSk7CiAgICAgICAgIHZvaWQqIGltcGxlbWVudGF0aW9u
ID0gY29sbGVjdGlvbi0+aXRlbShpbmRleCk7CiAgICAgICAgIHJldHVybiBnZXRWOE9iamVjdChp
bXBsZW1lbnRhdGlvbiwgaW5mby5EYXRhKCkpOwogICAgIH0KQEAgLTEzNSw5ICsxMzUsOSBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgLy8gR2V0IGFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIG5h
bWVzIG9mIGluZGV4ZWQgcHJvcGVydGllcyBvZiBIVE1MU2VsZWN0RWxlbWVudCBhbmQgSFRNTEZv
cm1FbGVtZW50LgogICAgIHRlbXBsYXRlPGNsYXNzIENvbGxlY3Rpb24+IHN0YXRpYyB2ODo6SGFu
ZGxlPHY4OjpBcnJheT4gbm9kZUNvbGxlY3Rpb25JbmRleGVkUHJvcGVydHlFbnVtZXJhdG9yKGNv
bnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCiAgICAgewotICAgICAgICBBU1NFUlQoVjhQcm94
eTo6bWF5YmVET01XcmFwcGVyKGluZm8uSG9sZGVyKCkpKTsKLSAgICAgICAgQVNTRVJUKFY4UHJv
eHk6OmRvbVdyYXBwZXJUeXBlKGluZm8uSG9sZGVyKCkpID09IFY4Q2xhc3NJbmRleDo6Tk9ERSk7
Ci0gICAgICAgIENvbGxlY3Rpb24qIGNvbGxlY3Rpb24gPSBWOFByb3h5Ojpjb252ZXJ0RE9NV3Jh
cHBlclRvTm9kZTxDb2xsZWN0aW9uPihpbmZvLkhvbGRlcigpKTsKKyAgICAgICAgQVNTRVJUKFY4
RE9NV3JhcHBlcjo6bWF5YmVET01XcmFwcGVyKGluZm8uSG9sZGVyKCkpKTsKKyAgICAgICAgQVNT
RVJUKFY4RE9NV3JhcHBlcjo6ZG9tV3JhcHBlclR5cGUoaW5mby5Ib2xkZXIoKSkgPT0gVjhDbGFz
c0luZGV4OjpOT0RFKTsKKyAgICAgICAgQ29sbGVjdGlvbiogY29sbGVjdGlvbiA9IFY4RE9NV3Jh
cHBlcjo6Y29udmVydERPTVdyYXBwZXJUb05vZGU8Q29sbGVjdGlvbj4oaW5mby5Ib2xkZXIoKSk7
CiAgICAgICAgIGludCBsZW5ndGggPSBjb2xsZWN0aW9uLT5sZW5ndGgoKTsKICAgICAgICAgdjg6
OkhhbmRsZTx2ODo6QXJyYXk+IHByb3BlcnRpZXMgPSB2ODo6QXJyYXk6Ok5ldyhsZW5ndGgpOwog
ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CkBAIC0xNTEsOSArMTUx
LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIC8vIEdldCBhbiBhcnJheSBjb250YWluaW5n
IHRoZSBuYW1lcyBvZiBpbmRleGVkIHByb3BlcnRpZXMgaW4gYSBjb2xsZWN0aW9uLgogICAgIHRl
bXBsYXRlPGNsYXNzIENvbGxlY3Rpb24+IHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpBcnJheT4gY29s
bGVjdGlvbkluZGV4ZWRQcm9wZXJ0eUVudW1lcmF0b3IoY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYg
aW5mbykKICAgICB7Ci0gICAgICAgIEFTU0VSVChWOFByb3h5OjptYXliZURPTVdyYXBwZXIoaW5m
by5Ib2xkZXIoKSkpOwotICAgICAgICBWOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5cGUgd3JhcHBl
clR5cGUgPSBWOFByb3h5Ojpkb21XcmFwcGVyVHlwZShpbmZvLkhvbGRlcigpKTsKLSAgICAgICAg
Q29sbGVjdGlvbiogY29sbGVjdGlvbiA9IFY4UHJveHk6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxD
b2xsZWN0aW9uPih3cmFwcGVyVHlwZSwgaW5mby5Ib2xkZXIoKSk7CisgICAgICAgIEFTU0VSVChW
OERPTVdyYXBwZXI6Om1heWJlRE9NV3JhcHBlcihpbmZvLkhvbGRlcigpKSk7CisgICAgICAgIFY4
Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlwZSB3cmFwcGVyVHlwZSA9IFY4RE9NV3JhcHBlcjo6ZG9t
V3JhcHBlclR5cGUoaW5mby5Ib2xkZXIoKSk7CisgICAgICAgIENvbGxlY3Rpb24qIGNvbGxlY3Rp
b24gPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxDb2xsZWN0aW9uPih3cmFw
cGVyVHlwZSwgaW5mby5Ib2xkZXIoKSk7CiAgICAgICAgIGludCBsZW5ndGggPSBjb2xsZWN0aW9u
LT5sZW5ndGgoKTsKICAgICAgICAgdjg6OkhhbmRsZTx2ODo6QXJyYXk+IHByb3BlcnRpZXMgPSB2
ODo6QXJyYXk6Ok5ldyhsZW5ndGgpOwogICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0
aDsgKytpKSB7CkBAIC0xNjksOSArMTY5LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIHRl
bXBsYXRlPGNsYXNzIENvbGxlY3Rpb24+IHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY29s
bGVjdGlvblN0cmluZ09yTnVsbEluZGV4ZWRQcm9wZXJ0eUdldHRlcih1aW50MzJfdCBpbmRleCwg
Y29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKICAgICB7CiAgICAgICAgIC8vIEZJWE1FOiBh
c3NlcnQgdGhhdCBvYmplY3QgbXVzdCBiZSBhIGNvbGxlY3Rpb24gdHlwZQotICAgICAgICBBU1NF
UlQoVjhQcm94eTo6bWF5YmVET01XcmFwcGVyKGluZm8uSG9sZGVyKCkpKTsKLSAgICAgICAgVjhD
bGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlIHdyYXBwZXJUeXBlID0gVjhQcm94eTo6ZG9tV3JhcHBl
clR5cGUoaW5mby5Ib2xkZXIoKSk7Ci0gICAgICAgIENvbGxlY3Rpb24qIGNvbGxlY3Rpb24gPSBW
OFByb3h5Ojpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8Q29sbGVjdGlvbj4od3JhcHBlclR5cGUsIGlu
Zm8uSG9sZGVyKCkpOworICAgICAgICBBU1NFUlQoVjhET01XcmFwcGVyOjptYXliZURPTVdyYXBw
ZXIoaW5mby5Ib2xkZXIoKSkpOworICAgICAgICBWOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5cGUg
d3JhcHBlclR5cGUgPSBWOERPTVdyYXBwZXI6OmRvbVdyYXBwZXJUeXBlKGluZm8uSG9sZGVyKCkp
OworICAgICAgICBDb2xsZWN0aW9uKiBjb2xsZWN0aW9uID0gVjhET01XcmFwcGVyOjpjb252ZXJ0
VG9OYXRpdmVPYmplY3Q8Q29sbGVjdGlvbj4od3JhcHBlclR5cGUsIGluZm8uSG9sZGVyKCkpOwog
ICAgICAgICBTdHJpbmcgcmVzdWx0ID0gY29sbGVjdGlvbi0+aXRlbShpbmRleCk7CiAgICAgICAg
IHJldHVybiB2OFN0cmluZ09yTnVsbChyZXN1bHQpOwogICAgIH0KSW5kZXg6IFdlYkNvcmUvYmlu
ZGluZ3MvdjgvVjhET01NYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mvdjgv
VjhET01NYXAuY3BwCShyZXZpc2lvbiA0NTY1MCkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhE
T01NYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NjEsNyArNDYxLDcgQEAgdm9pZCBET01EYXRh
OjpoYW5kbGVXZWFrT2JqZWN0KERPTURhdGFTdAogICAgICAgICBpZiAoKndyYXBwZXIgPT0gKnY4
T2JqZWN0KSB7CiAgICAgICAgICAgICAvLyBDbGVhciB0aGUgSlMgcmVmZXJlbmNlLgogICAgICAg
ICAgICAgZG9tTWFwLT5mb3JnZXRPbmx5KGRvbU9iamVjdCk7Ci0gICAgICAgICAgICBzdG9yZS0+
ZG9tRGF0YSgpLT5lbnN1cmVEZXJlZihWOFByb3h5Ojpkb21XcmFwcGVyVHlwZSh2OE9iamVjdCks
IGRvbU9iamVjdCk7CisgICAgICAgICAgICBzdG9yZS0+ZG9tRGF0YSgpLT5lbnN1cmVEZXJlZihW
OERPTVdyYXBwZXI6OmRvbVdyYXBwZXJUeXBlKHY4T2JqZWN0KSwgZG9tT2JqZWN0KTsKICAgICAg
ICAgfQogICAgIH0KIH0KQEAgLTU4NSw3ICs1ODUsNyBAQCB2b2lkIERPTURhdGE6OnJlbW92ZU9i
amVjdHNGcm9tV3JhcHBlck1hCiAgICAgICAgIFQqIGRvbU9iamVjdCA9IHN0YXRpY19jYXN0PFQq
PihpdGVyLT5maXJzdCk7CiAgICAgICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+IHY4T2Jq
ZWN0KGl0ZXItPnNlY29uZCk7CiAKLSAgICAgICAgVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBl
IHR5cGUgPSBWOFByb3h5Ojpkb21XcmFwcGVyVHlwZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpD
YXN0KHY4T2JqZWN0KSk7CisgICAgICAgIFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlwZSB0eXBl
ID0gVjhET01XcmFwcGVyOjpkb21XcmFwcGVyVHlwZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpD
YXN0KHY4T2JqZWN0KSk7CiAKICAgICAgICAgLy8gRGVyZWYgdGhlIERPTSBvYmplY3QuCiAgICAg
ICAgIGRlcmVmT2JqZWN0KHR5cGUsIGRvbU9iamVjdCk7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdz
L3Y4L1Y4R0NDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4
L1Y4R0NDb250cm9sbGVyLmNwcAkocmV2aXNpb24gNDU2NTIpCisrKyBXZWJDb3JlL2JpbmRpbmdz
L3Y4L1Y4R0NDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTExLDcgKzExMSw3IEBA
IHN0YXRpYyB2b2lkIGVudW1lcmF0ZURPTU9iamVjdE1hcChET01PYmoKIHsKICAgICBmb3IgKERP
TU9iamVjdE1hcDo6aXRlcmF0b3IgaXQgPSB3cmFwcGVyTWFwLmJlZ2luKCksIGVuZCA9IHdyYXBw
ZXJNYXAuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICB2ODo6UGVyc2lzdGVudDx2
ODo6T2JqZWN0PiB3cmFwcGVyKGl0LT5zZWNvbmQpOwotICAgICAgICBWOENsYXNzSW5kZXg6OlY4
V3JhcHBlclR5cGUgdHlwZSA9IFY4UHJveHk6OmRvbVdyYXBwZXJUeXBlKHdyYXBwZXIpOworICAg
ICAgICBWOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5cGUgdHlwZSA9IFY4RE9NV3JhcHBlclR5cGU6
OmRvbVdyYXBwZXJUeXBlKHdyYXBwZXIpOwogICAgICAgICB2b2lkKiBvYmplY3QgPSBpdC0+Zmly
c3Q7CiAgICAgICAgIFVOVVNFRF9QQVJBTSh0eXBlKTsKICAgICAgICAgVU5VU0VEX1BBUkFNKG9i
amVjdCk7CkBAIC0xMjIsNyArMTIyLDcgQEAgY2xhc3MgRE9NT2JqZWN0VmlzaXRvciA6IHB1Ymxp
YyBET01XcmFwcAogcHVibGljOgogICAgIHZvaWQgdmlzaXRET01XcmFwcGVyKHZvaWQqIG9iamVj
dCwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gd3JhcHBlcikKICAgICB7Ci0gICAgICAgIFY4
Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlwZSB0eXBlID0gVjhQcm94eTo6ZG9tV3JhcHBlclR5cGUo
d3JhcHBlcik7CisgICAgICAgIFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlwZSB0eXBlID0gVjhE
T01XcmFwcGVyVHlwZTo6ZG9tV3JhcHBlclR5cGUod3JhcHBlcik7CiAgICAgICAgIFVOVVNFRF9Q
QVJBTSh0eXBlKTsKICAgICAgICAgVU5VU0VEX1BBUkFNKG9iamVjdCk7CiAgICAgfQpAQCAtMTgx
LDcgKzE4MSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHZpc2l0RE9NV3JhcHBlcih2b2lkKiBvYmpl
Y3QsIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+IHdyYXBwZXIpCiAgICAgewogICAgICAgICBB
U1NFUlQod3JhcHBlci5Jc1dlYWsoKSk7Ci0gICAgICAgIFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVy
VHlwZSB0eXBlID0gVjhQcm94eTo6ZG9tV3JhcHBlclR5cGUod3JhcHBlcik7CisgICAgICAgIFY4
Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlwZSB0eXBlID0gVjhET01XcmFwcGVyVHlwZTo6ZG9tV3Jh
cHBlclR5cGUod3JhcHBlcik7CiAgICAgICAgIHN3aXRjaCAodHlwZSkgewogI2RlZmluZSBNQUtF
X0NBU0UoVFlQRSwgTkFNRSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAg
Y2FzZSBWOENsYXNzSW5kZXg6OlRZUEU6IHsgICAgICAgICAgICAgICAgICAgIFwKQEAgLTIxNyw4
ICsyMTcsOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAvLyBBcyBwb3J0cyBhcmUgYWx3YXlzIGVu
dGFuZ2xlZCBpbiBwYWlycyBvbmx5IHBlcmZvcm0gdGhlIGVudGFuZ2xlbWVudAogICAgICAgICAg
ICAgLy8gb25jZSBmb3IgZWFjaCBwYWlyIChzZWUgQVNTRVJUIGluIE1lc3NhZ2VQb3J0Ojp1bmVu
dGFuZ2xlKCkpLgogICAgICAgICAgICAgaWYgKHBvcnQxIDwgcG9ydDIpIHsKLSAgICAgICAgICAg
ICAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gcG9ydDFXcmFwcGVyID0gVjhQcm94eTo6Y29udmVy
dFRvVjhPYmplY3QoVjhDbGFzc0luZGV4OjpNRVNTQUdFUE9SVCwgcG9ydDEpOwotICAgICAgICAg
ICAgICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBwb3J0MldyYXBwZXIgPSBWOFByb3h5Ojpjb252
ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6Ok1FU1NBR0VQT1JULCBwb3J0Mik7CisgICAgICAg
ICAgICAgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHBvcnQxV3JhcHBlciA9IFY4RE9NV3JhcHBl
cjo6Y29udmVydFRvVjhPYmplY3QoVjhDbGFzc0luZGV4OjpNRVNTQUdFUE9SVCwgcG9ydDEpOwor
ICAgICAgICAgICAgICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBwb3J0MldyYXBwZXIgPSBWOERP
TVdyYXBwZXI6OmNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6TUVTU0FHRVBPUlQsIHBv
cnQyKTsKICAgICAgICAgICAgICAgICBBU1NFUlQocG9ydDFXcmFwcGVyLT5Jc09iamVjdCgpKTsK
ICAgICAgICAgICAgICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KHBvcnQxV3JhcHBl
ciktPlNldEludGVybmFsRmllbGQoVjhDdXN0b206OmtNZXNzYWdlUG9ydEVudGFuZ2xlZFBvcnRJ
bmRleCwgcG9ydDJXcmFwcGVyKTsKICAgICAgICAgICAgICAgICBBU1NFUlQocG9ydDJXcmFwcGVy
LT5Jc09iamVjdCgpKTsKQEAgLTIyNiw4ICsyMjYsOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICB9
CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBSZW1vdmUgdGhlIHdyYXBwZXIgZW50
YW5nbGVtZW50IHdoZW4gYSBwb3J0IGlzIG5vdCBlbnRhbmdsZWQuCi0gICAgICAgICAgICBpZiAo
VjhQcm94eTo6ZG9tT2JqZWN0SGFzSlNXcmFwcGVyKHBvcnQxKSkgewotICAgICAgICAgICAgICAg
IHY4OjpIYW5kbGU8djg6OlZhbHVlPiB3cmFwcGVyID0gVjhQcm94eTo6Y29udmVydFRvVjhPYmpl
Y3QoVjhDbGFzc0luZGV4OjpNRVNTQUdFUE9SVCwgcG9ydDEpOworICAgICAgICAgICAgaWYgKFY4
RE9NV3JhcHBlcjo6ZG9tT2JqZWN0SGFzSlNXcmFwcGVyKHBvcnQxKSkgeworICAgICAgICAgICAg
ICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB3cmFwcGVyID0gVjhET01XcmFwcGVyOjpjb252ZXJ0
VG9WOE9iamVjdChWOENsYXNzSW5kZXg6Ok1FU1NBR0VQT1JULCBwb3J0MSk7CiAgICAgICAgICAg
ICAgICAgQVNTRVJUKHdyYXBwZXItPklzT2JqZWN0KCkpOwogICAgICAgICAgICAgICAgIHY4OjpI
YW5kbGU8djg6Ok9iamVjdD46OkNhc3Qod3JhcHBlciktPlNldEludGVybmFsRmllbGQoVjhDdXN0
b206OmtNZXNzYWdlUG9ydEVudGFuZ2xlZFBvcnRJbmRleCwgdjg6OlVuZGVmaW5lZCgpKTsKICAg
ICAgICAgICAgIH0KQEAgLTM4Niw3ICszODYsNyBAQCBjbGFzcyBHQ0VwaWxvZ3VlVmlzaXRvciA6
IHB1YmxpYyBET01XcmFwCiBwdWJsaWM6CiAgICAgdm9pZCB2aXNpdERPTVdyYXBwZXIodm9pZCog
b2JqZWN0LCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiB3cmFwcGVyKQogICAgIHsKLSAgICAg
ICAgVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlIHR5cGUgPSBWOFByb3h5Ojpkb21XcmFwcGVy
VHlwZSh3cmFwcGVyKTsKKyAgICAgICAgVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlIHR5cGUg
PSBWOERPTVdyYXBwZXJUeXBlOjpkb21XcmFwcGVyVHlwZSh3cmFwcGVyKTsKICAgICAgICAgc3dp
dGNoICh0eXBlKSB7CiAjZGVmaW5lIE1BS0VfQ0FTRShUWVBFLCBOQU1FKSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIGNhc2UgVjhDbGFzc0luZGV4
OjpUWVBFOiB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKSW5kZXg6IFdlYkNv
cmUvYmluZGluZ3MvdjgvVjhIZWxwZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRp
bmdzL3Y4L1Y4SGVscGVycy5jcHAJKHJldmlzaW9uIDQ1NjUwKQorKysgV2ViQ29yZS9iaW5kaW5n
cy92OC9WOEhlbHBlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogdm9pZCB3cmFwTlBPYmplY3Qodjg6OkhhbmRsZTx2ODo6T2JqZWN0
PiBvYmplY3QsIE5QT2JqZWN0KiBucE9iamVjdCkKIHsKLSAgICBWOFByb3h5OjpzZXRET01XcmFw
cGVyKG9iamVjdCwgVjhDbGFzc0luZGV4OjpOUE9CSkVDVCwgbnBPYmplY3QpOworICAgIFY4RE9N
V3JhcHBlcjo6c2V0RE9NV3JhcHBlcihvYmplY3QsIFY4Q2xhc3NJbmRleDo6TlBPQkpFQ1QsIG5w
T2JqZWN0KTsKIH0KIAogdjg6OkxvY2FsPHY4OjpDb250ZXh0PiB0b1Y4Q29udGV4dChOUFAgbnBw
LCBOUE9iamVjdCogbnBPYmplY3QpCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4Tm9kZUZp
bHRlckNvbmRpdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9WOE5v
ZGVGaWx0ZXJDb25kaXRpb24uY3BwCShyZXZpc2lvbiA0NTY1MCkKKysrIFdlYkNvcmUvYmluZGlu
Z3MvdjgvVjhOb2RlRmlsdGVyQ29uZGl0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjksNyAr
NjksNyBAQCBzaG9ydCBWOE5vZGVGaWx0ZXJDb25kaXRpb246OmFjY2VwdE5vZGUoCiAgICAgdjg6
OkhhbmRsZTx2ODo6T2JqZWN0PiBvYmplY3QgPSB2ODo6Q29udGV4dDo6R2V0Q3VycmVudCgpLT5H
bG9iYWwoKTsKICAgICB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvbj4gY2FsbGJhY2sgPSB2ODo6SGFu
ZGxlPHY4OjpGdW5jdGlvbj46OkNhc3QobV9maWx0ZXIpOwogICAgIE93bkFycmF5UHRyPHY4OjpI
YW5kbGU8djg6OlZhbHVlPiA+IGFyZ3MobmV3IHY4OjpIYW5kbGU8djg6OlZhbHVlPlsxXSk7Ci0g
ICAgYXJnc1swXSA9IFY4UHJveHk6OmNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6Tk9E
RSwgbm9kZSk7CisgICAgYXJnc1swXSA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvVjhPYmplY3Qo
VjhDbGFzc0luZGV4OjpOT0RFLCBub2RlKTsKIAogICAgIFY4UHJveHkqIHByb3h5ID0gVjhQcm94
eTo6cmV0cmlldmUoKTsKICAgICBBU1NFUlQocHJveHkpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5n
cy92OC9WOFByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJv
eHkuY3BwCShyZXZpc2lvbiA0NTY1MikKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhQcm94eS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTkxLDcgKzkxLDcgQEAgdHlwZWRlZiBIYXNoTWFwPE5vZGUq
LCB2ODo6T2JqZWN0Kj4gRE9NTgogdHlwZWRlZiBIYXNoTWFwPHZvaWQqLCB2ODo6T2JqZWN0Kj4g
RE9NT2JqZWN0TWFwOwogCiAjaWYgRU5BQkxFKFNWRykKLXY4OjpIYW5kbGU8djg6OlZhbHVlPiBW
OFByb3h5Ojpjb252ZXJ0U1ZHRWxlbWVudEluc3RhbmNlVG9WOE9iamVjdChTVkdFbGVtZW50SW5z
dGFuY2UqIGluc3RhbmNlKQordjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4RE9NV3JhcHBlcjo6Y29u
dmVydFNWR0VsZW1lbnRJbnN0YW5jZVRvVjhPYmplY3QoU1ZHRWxlbWVudEluc3RhbmNlKiBpbnN0
YW5jZSkKIHsKICAgICBpZiAoIWluc3RhbmNlKQogICAgICAgICByZXR1cm4gdjg6Ok51bGwoKTsK
QEAgLTExOSw3ICsxMTksNyBAQCBzdGF0aWMgSGFzaE1hcDx2b2lkKiwgU1ZHRWxlbWVudCo+JiBz
dmdPCiAgICAgcmV0dXJuIHN0YXRpY1N2Z09iamVjdFRvQ29udGV4dE1hcDsKIH0KIAotdjg6Okhh
bmRsZTx2ODo6VmFsdWU+IFY4UHJveHk6OmNvbnZlcnRTVkdPYmplY3RXaXRoQ29udGV4dFRvVjhP
YmplY3QoVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlIHR5cGUsIHZvaWQqIG9iamVjdCkKK3Y4
OjpIYW5kbGU8djg6OlZhbHVlPiBWOERPTVdyYXBwZXI6OmNvbnZlcnRTVkdPYmplY3RXaXRoQ29u
dGV4dFRvVjhPYmplY3QoVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlIHR5cGUsIHZvaWQqIG9i
amVjdCkKIHsKICAgICBpZiAoIW9iamVjdCkKICAgICAgICAgcmV0dXJuIHY4OjpOdWxsKCk7CkBA
IC00MTYsMTcgKzQxNiwxNyBAQCB2b2lkIFY4UHJveHk6OmRlc3Ryb3lHbG9iYWwoKQogfQogCiAK
LWJvb2wgVjhQcm94eTo6ZG9tT2JqZWN0SGFzSlNXcmFwcGVyKHZvaWQqIG9iamVjdCkKK2Jvb2wg
VjhET01XcmFwcGVyOjpkb21PYmplY3RIYXNKU1dyYXBwZXIodm9pZCogb2JqZWN0KQogewogICAg
IHJldHVybiBnZXRET01PYmplY3RNYXAoKS5jb250YWlucyhvYmplY3QpIHx8IGdldEFjdGl2ZURP
TU9iamVjdE1hcCgpLmNvbnRhaW5zKG9iamVjdCk7CiB9CiAKIC8vIFRoZSBjYWxsZXIgbXVzdCBo
YXZlIGluY3JlYXNlZCBvYmoncyByZWYgY291bnQuCi12b2lkIFY4UHJveHk6OnNldEpTV3JhcHBl
ckZvckRPTU9iamVjdCh2b2lkKiBvYmplY3QsIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+IHdy
YXBwZXIpCit2b2lkIFY4RE9NV3JhcHBlcjo6c2V0SlNXcmFwcGVyRm9yRE9NT2JqZWN0KHZvaWQq
IG9iamVjdCwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gd3JhcHBlcikKIHsKLSAgICBBU1NF
UlQobWF5YmVET01XcmFwcGVyKHdyYXBwZXIpKTsKKyAgICBBU1NFUlQoVjhET01XcmFwcGVyOjpt
YXliZURPTVdyYXBwZXIod3JhcHBlcikpOwogI2lmbmRlZiBOREVCVUcKLSAgICBWOENsYXNzSW5k
ZXg6OlY4V3JhcHBlclR5cGUgdHlwZSA9IFY4UHJveHk6OmRvbVdyYXBwZXJUeXBlKHdyYXBwZXIp
OworICAgIFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlwZSB0eXBlID0gVjhET01XcmFwcGVyOjpk
b21XcmFwcGVyVHlwZSh3cmFwcGVyKTsKICAgICBzd2l0Y2ggKHR5cGUpIHsKICNkZWZpbmUgTUFL
RV9DQVNFKFRZUEUsIE5BTUUpIGNhc2UgVjhDbGFzc0luZGV4OjpUWVBFOgogICAgICAgICBBQ1RJ
VkVfRE9NX09CSkVDVF9UWVBFUyhNQUtFX0NBU0UpCkBAIC00NDAsMTEgKzQ0MCwxMSBAQCB2b2lk
IFY4UHJveHk6OnNldEpTV3JhcHBlckZvckRPTU9iamVjdCh2CiB9CiAKIC8vIFRoZSBjYWxsZXIg
bXVzdCBoYXZlIGluY3JlYXNlZCBvYmoncyByZWYgY291bnQuCi12b2lkIFY4UHJveHk6OnNldEpT
V3JhcHBlckZvckFjdGl2ZURPTU9iamVjdCh2b2lkKiBvYmplY3QsIHY4OjpQZXJzaXN0ZW50PHY4
OjpPYmplY3Q+IHdyYXBwZXIpCit2b2lkIFY4RE9NV3JhcHBlcjo6c2V0SlNXcmFwcGVyRm9yQWN0
aXZlRE9NT2JqZWN0KHZvaWQqIG9iamVjdCwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gd3Jh
cHBlcikKIHsKLSAgICBBU1NFUlQobWF5YmVET01XcmFwcGVyKHdyYXBwZXIpKTsKKyAgICBBU1NF
UlQoVjhET01XcmFwcGVyOjptYXliZURPTVdyYXBwZXIod3JhcHBlcikpOwogI2lmbmRlZiBOREVC
VUcKLSAgICBWOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5cGUgdHlwZSA9IFY4UHJveHk6OmRvbVdy
YXBwZXJUeXBlKHdyYXBwZXIpOworICAgIFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlwZSB0eXBl
ID0gVjhET01XcmFwcGVyOjpkb21XcmFwcGVyVHlwZSh3cmFwcGVyKTsKICAgICBzd2l0Y2ggKHR5
cGUpIHsKICNkZWZpbmUgTUFLRV9DQVNFKFRZUEUsIE5BTUUpIGNhc2UgVjhDbGFzc0luZGV4OjpU
WVBFOiBicmVhazsKICAgICAgICAgQUNUSVZFX0RPTV9PQkpFQ1RfVFlQRVMoTUFLRV9DQVNFKQpA
QCAtNDU3LDkgKzQ1Nyw5IEBAIHZvaWQgVjhQcm94eTo6c2V0SlNXcmFwcGVyRm9yQWN0aXZlRE9N
T2IKIH0KIAogLy8gVGhlIGNhbGxlciBtdXN0IGhhdmUgaW5jcmVhc2VkIG5vZGUncyByZWYgY291
bnQuCi12b2lkIFY4UHJveHk6OnNldEpTV3JhcHBlckZvckRPTU5vZGUoTm9kZSogbm9kZSwgdjg6
OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gd3JhcHBlcikKK3ZvaWQgVjhET01XcmFwcGVyOjpzZXRK
U1dyYXBwZXJGb3JET01Ob2RlKE5vZGUqIG5vZGUsIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+
IHdyYXBwZXIpCiB7Ci0gICAgQVNTRVJUKG1heWJlRE9NV3JhcHBlcih3cmFwcGVyKSk7CisgICAg
QVNTRVJUKFY4RE9NV3JhcHBlcjo6bWF5YmVET01XcmFwcGVyKHdyYXBwZXIpKTsKICAgICBnZXRE
T01Ob2RlTWFwKCkuc2V0KG5vZGUsIHdyYXBwZXIpOwogfQogCkBAIC02MjksOSArNjI5LDkgQEAg
dm9pZCBWOFByb3h5OjpldmFsdWF0ZUluTmV3Q29udGV4dChjb25zdAogICAgIC8vIFNldCB1cCB0
aGUgRE9NIHdpbmRvdyBhcyB0aGUgcHJvdG90eXBlIG9mIHRoZSBuZXcgZ2xvYmFsIG9iamVjdC4K
ICAgICB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiB3aW5kb3dDb250ZXh0ID0gbV9jb250ZXh0Owog
ICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd2luZG93R2xvYmFsID0gd2luZG93Q29udGV4dC0+
R2xvYmFsKCk7Ci0gICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHdpbmRvd1dyYXBwZXIgPSBWOFBy
b3h5Ojpsb29rdXBET01XcmFwcGVyKFY4Q2xhc3NJbmRleDo6RE9NV0lORE9XLCB3aW5kb3dHbG9i
YWwpOworICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB3aW5kb3dXcmFwcGVyID0gVjhET01XcmFw
cGVyOjpsb29rdXBET01XcmFwcGVyKFY4Q2xhc3NJbmRleDo6RE9NV0lORE9XLCB3aW5kb3dHbG9i
YWwpOwogCi0gICAgQVNTRVJUKFY4UHJveHk6OmNvbnZlcnRET01XcmFwcGVyVG9OYXRpdmU8RE9N
V2luZG93Pih3aW5kb3dXcmFwcGVyKSA9PSBtX2ZyYW1lLT5kb21XaW5kb3coKSk7CisgICAgQVNT
RVJUKFY4RE9NV3JhcHBlcjo6Y29udmVydERPTVdyYXBwZXJUb05hdGl2ZTxET01XaW5kb3c+KHdp
bmRvd1dyYXBwZXIpID09IG1fZnJhbWUtPmRvbVdpbmRvdygpKTsKIAogICAgIHY4OjpQZXJzaXN0
ZW50PHY4OjpDb250ZXh0PiBjb250ZXh0ID0gY3JlYXRlTmV3Q29udGV4dCh2ODo6SGFuZGxlPHY4
OjpPYmplY3Q+KCkpOwogICAgIHY4OjpDb250ZXh0OjpTY29wZSBjb250ZXh0U2NvcGUoY29udGV4
dCk7CkBAIC04MTcsNyArODE3LDcgQEAgdjg6OkxvY2FsPHY4OjpGdW5jdGlvbj4gVjhQcm94eTo6
Z2V0Q29ucwogICAgIC8vIGZ1bmN0aW9uIGlzIGNvbnN0cnVjdGVkIGluIHRoZSBjb250ZXh0IGNv
cnJlc3BvbmRpbmcgdG8KICAgICAvLyB0aGlzIHByb3h5LgogICAgIHY4OjpDb250ZXh0OjpTY29w
ZSBzY29wZShtX2NvbnRleHQpOwotICAgIHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uVGVtcGxhdGU+
IGZ1bmN0aW9uVGVtcGxhdGUgPSBnZXRUZW1wbGF0ZSh0eXBlKTsKKyAgICB2ODo6SGFuZGxlPHY4
OjpGdW5jdGlvblRlbXBsYXRlPiBmdW5jdGlvblRlbXBsYXRlID0gVjhET01XcmFwcGVyOjpnZXRU
ZW1wbGF0ZSh0eXBlKTsKICAgICAvLyBHZXR0aW5nIHRoZSBmdW5jdGlvbiBtaWdodCBmYWlsIGlm
IHdlJ3JlIHJ1bm5pbmcgb3V0IG9mCiAgICAgLy8gc3RhY2sgb3IgbWVtb3J5LgogICAgIHY4OjpU
cnlDYXRjaCB0cnlDYXRjaDsKQEAgLTg3Myw3ICs4NzMsNyBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2
ODo6VmFsdWU+IENvbnN0cnVjdG9yCiAgICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9u
Pjo6Q2FzdCh2YWx1ZSktPkNhbGwoYXJncy5UaGlzKCksIDAsIDApOwogfQogCi12ODo6UGVyc2lz
dGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gVjhQcm94eTo6Z2V0VGVtcGxhdGUoVjhDbGFzc0lu
ZGV4OjpWOFdyYXBwZXJUeXBlIHR5cGUpCit2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1w
bGF0ZT4gVjhET01XcmFwcGVyOjpnZXRUZW1wbGF0ZShWOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5
cGUgdHlwZSkKIHsKICAgICB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4qIGNh
Y2hlQ2VsbCA9IFY4Q2xhc3NJbmRleDo6R2V0Q2FjaGUodHlwZSk7CiAgICAgaWYgKCFjYWNoZUNl
bGwtPklzRW1wdHkoKSkKQEAgLTExNTgsOSArMTE1OCw5IEBAIERPTVdpbmRvdyogVjhQcm94eTo6
cmV0cmlldmVXaW5kb3codjg6OkgKIHsKICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGdsb2Jh
bCA9IGNvbnRleHQtPkdsb2JhbCgpOwogICAgIEFTU0VSVCghZ2xvYmFsLklzRW1wdHkoKSk7Ci0g
ICAgZ2xvYmFsID0gbG9va3VwRE9NV3JhcHBlcihWOENsYXNzSW5kZXg6OkRPTVdJTkRPVywgZ2xv
YmFsKTsKKyAgICBnbG9iYWwgPSBWOERPTVdyYXBwZXI6Omxvb2t1cERPTVdyYXBwZXIoVjhDbGFz
c0luZGV4OjpET01XSU5ET1csIGdsb2JhbCk7CiAgICAgQVNTRVJUKCFnbG9iYWwuSXNFbXB0eSgp
KTsKLSAgICByZXR1cm4gY29udmVydFRvTmF0aXZlT2JqZWN0PERPTVdpbmRvdz4oVjhDbGFzc0lu
ZGV4OjpET01XSU5ET1csIGdsb2JhbCk7CisgICAgcmV0dXJuIFY4RE9NV3JhcHBlcjo6Y29udmVy
dFRvTmF0aXZlT2JqZWN0PERPTVdpbmRvdz4oVjhDbGFzc0luZGV4OjpET01XSU5ET1csIGdsb2Jh
bCk7CiB9CiAKIEZyYW1lKiBWOFByb3h5OjpyZXRyaWV2ZUZyYW1lKHY4OjpIYW5kbGU8djg6OkNv
bnRleHQ+IGNvbnRleHQpCkBAIC0xMzA4LDcgKzEzMDgsNyBAQCB2b2lkIFY4UHJveHk6OnVwZGF0
ZURvY3VtZW50V3JhcHBlckNhY2hlCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICB2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4gZG9jdW1lbnRXcmFwcGVyID0gY29udmVydE5vZGVUb1Y4T2JqZWN0
KG1fZnJhbWUtPmRvY3VtZW50KCkpOworICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBkb2N1bWVu
dFdyYXBwZXIgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnROb2RlVG9WOE9iamVjdChtX2ZyYW1lLT5k
b2N1bWVudCgpKTsKIAogICAgIC8vIElmIGluc3RhbnRpYXRpb24gb2YgdGhlIGRvY3VtZW50IHdy
YXBwZXIgZmFpbHMsIGNsZWFyIHRoZSBjYWNoZQogICAgIC8vIGFuZCBsZXQgdGhlIERPTVdpbmRv
dyBhY2Nlc3NvciBoYW5kbGUgYWNjZXNzIHRvIHRoZSBkb2N1bWVudC4KQEAgLTEzNzYsNyArMTM3
Niw3IEBAIHZvaWQgVjhQcm94eTo6Y2xlYXJGb3JOYXZpZ2F0aW9uKCkKICAgICAgICAgY2xlYXJE
b2N1bWVudFdyYXBwZXJDYWNoZSgpOwogCiAgICAgICAgIC8vIFR1cm4gb24gYWNjZXNzIGNoZWNr
IG9uIHRoZSBvbGQgRE9NV2luZG93IHdyYXBwZXIuCi0gICAgICAgIHY4OjpIYW5kbGU8djg6Ok9i
amVjdD4gd3JhcHBlciA9IGxvb2t1cERPTVdyYXBwZXIoVjhDbGFzc0luZGV4OjpET01XSU5ET1cs
IG1fZ2xvYmFsKTsKKyAgICAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0gVjhE
T01XcmFwcGVyOjpsb29rdXBET01XcmFwcGVyKFY4Q2xhc3NJbmRleDo6RE9NV0lORE9XLCBtX2ds
b2JhbCk7CiAgICAgICAgIEFTU0VSVCghd3JhcHBlci5Jc0VtcHR5KCkpOwogICAgICAgICB3cmFw
cGVyLT5UdXJuT25BY2Nlc3NDaGVjaygpOwogCkBAIC0xNTc4LDEwICsxNTc4LDEwIEBAIGJvb2wg
VjhQcm94eTo6aW5zdGFsbERPTVdpbmRvdyh2ODo6SGFuZGwKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCiAgICAgLy8gV3JhcCB0aGUgd2luZG93LgotICAgIHNldERPTVdyYXBwZXIoanNXaW5kb3cs
IFY4Q2xhc3NJbmRleDo6VG9JbnQoVjhDbGFzc0luZGV4OjpET01XSU5ET1cpLCB3aW5kb3cpOwor
ICAgIFY4RE9NV3JhcHBlcjo6c2V0RE9NV3JhcHBlcihqc1dpbmRvdywgVjhDbGFzc0luZGV4OjpU
b0ludChWOENsYXNzSW5kZXg6OkRPTVdJTkRPVyksIHdpbmRvdyk7CiAKICAgICB3aW5kb3ctPnJl
ZigpOwotICAgIFY4UHJveHk6OnNldEpTV3JhcHBlckZvckRPTU9iamVjdCh3aW5kb3csIHY4OjpQ
ZXJzaXN0ZW50PHY4OjpPYmplY3Q+OjpOZXcoanNXaW5kb3cpKTsKKyAgICBWOERPTVdyYXBwZXI6
OnNldEpTV3JhcHBlckZvckRPTU9iamVjdCh3aW5kb3csIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmpl
Y3Q+OjpOZXcoanNXaW5kb3cpKTsKIAogICAgIC8vIEluc2VydCB0aGUgd2luZG93IGluc3RhbmNl
IGFzIHRoZSBwcm90b3R5cGUgb2YgdGhlIHNoYWRvdyBvYmplY3QuCiAgICAgdjg6OkhhbmRsZTx2
ODo6T2JqZWN0PiB2OEdsb2JhbCA9IGNvbnRleHQtPkdsb2JhbCgpOwpAQCAtMTcxNCw3ICsxNzE0
LDcgQEAgdm9pZCBzZXRET01FeGNlcHRpb25IZWxwZXIoVjhDbGFzc0luZGV4OgogICAgIGlmIChX
b3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHk6OnJldHJpZXZlKCkpCiAgICAgICAgIHY4RXhjZXB0
aW9uID0gV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5OjpUb1Y4T2JqZWN0KHR5cGUsIGV4Y2Vw
dGlvbi5nZXQoKSk7CiAgICAgZWxzZQotICAgICAgICB2OEV4Y2VwdGlvbiA9IFY4UHJveHk6OmNv
bnZlcnRUb1Y4T2JqZWN0KHR5cGUsIGV4Y2VwdGlvbi5nZXQoKSk7CisgICAgICAgIHY4RXhjZXB0
aW9uID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9WOE9iamVjdCh0eXBlLCBleGNlcHRpb24uZ2V0
KCkpOwogCiAgICAgdjg6OlRocm93RXhjZXB0aW9uKHY4RXhjZXB0aW9uKTsKIH0KQEAgLTE3OTEs
NyArMTc5MSw3IEBAIHY4OjpMb2NhbDx2ODo6Q29udGV4dD4gVjhQcm94eTo6Y3VycmVudEMKICAg
ICByZXR1cm4gdjg6OkNvbnRleHQ6OkdldEN1cnJlbnQoKTsKIH0KIAotdjg6OkhhbmRsZTx2ODo6
VmFsdWU+IFY4UHJveHk6OmNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVy
VHlwZSB0eXBlLCB2b2lkKiBpbXBsKQordjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4RE9NV3JhcHBl
cjo6Y29udmVydFRvVjhPYmplY3QoVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlIHR5cGUsIHZv
aWQqIGltcGwpCiB7CiAgICAgQVNTRVJUKHR5cGUgIT0gVjhDbGFzc0luZGV4OjpFVkVOVExJU1RF
TkVSKTsKICAgICBBU1NFUlQodHlwZSAhPSBWOENsYXNzSW5kZXg6OkVWRU5UVEFSR0VUKTsKQEAg
LTE5MTEsMTIgKzE5MTEsMTIgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4UHJveHk6OmNvbnZl
cnRUbwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgVjhQcm94eTo6c2V0SGlkZGVuV2lu
ZG93UmVmZXJlbmNlKEZyYW1lKiBmcmFtZSwgY29uc3QgaW50IGludGVybmFsSW5kZXgsIHY4OjpI
YW5kbGU8djg6Ok9iamVjdD4ganNPYmplY3QpCit2b2lkIFY4RE9NV3JhcHBlcjo6c2V0SGlkZGVu
V2luZG93UmVmZXJlbmNlKEZyYW1lKiBmcmFtZSwgY29uc3QgaW50IGludGVybmFsSW5kZXgsIHY4
OjpIYW5kbGU8djg6Ok9iamVjdD4ganNPYmplY3QpCiB7CiAgICAgLy8gR2V0IERPTVdpbmRvdwog
ICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybjsgLy8gT2JqZWN0IG1pZ2h0IGJlIGRldGFj
aGVkIGZyb20gd2luZG93Ci0gICAgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gdjhDb250ZXh0ID0g
Y29udGV4dChmcmFtZSk7CisgICAgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gdjhDb250ZXh0ID0g
VjhQcm94eTo6Y29udGV4dChmcmFtZSk7CiAgICAgaWYgKHY4Q29udGV4dC5Jc0VtcHR5KCkpCiAg
ICAgICAgIHJldHVybjsKIApAQCAtMTkyNCwyNiArMTkyNCwyNiBAQCB2b2lkIFY4UHJveHk6OnNl
dEhpZGRlbldpbmRvd1JlZmVyZW5jZShGCiAKICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGds
b2JhbCA9IHY4Q29udGV4dC0+R2xvYmFsKCk7CiAgICAgLy8gTG9vayBmb3IgcmVhbCBET00gd3Jh
cHBlci4KLSAgICBnbG9iYWwgPSBsb29rdXBET01XcmFwcGVyKFY4Q2xhc3NJbmRleDo6RE9NV0lO
RE9XLCBnbG9iYWwpOworICAgIGdsb2JhbCA9IFY4RE9NV3JhcHBlcjo6bG9va3VwRE9NV3JhcHBl
cihWOENsYXNzSW5kZXg6OkRPTVdJTkRPVywgZ2xvYmFsKTsKICAgICBBU1NFUlQoIWdsb2JhbC5J
c0VtcHR5KCkpOwogICAgIEFTU0VSVChnbG9iYWwtPkdldEludGVybmFsRmllbGQoaW50ZXJuYWxJ
bmRleCktPklzVW5kZWZpbmVkKCkpOwogICAgIGdsb2JhbC0+U2V0SW50ZXJuYWxGaWVsZChpbnRl
cm5hbEluZGV4LCBqc09iamVjdCk7CiB9CiAKLVY4Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlwZSBW
OFByb3h5Ojpkb21XcmFwcGVyVHlwZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IG9iamVjdCkKK1Y4
Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlwZSBWOERPTVdyYXBwZXI6OmRvbVdyYXBwZXJUeXBlKHY4
OjpIYW5kbGU8djg6Ok9iamVjdD4gb2JqZWN0KQogewotICAgIEFTU0VSVChtYXliZURPTVdyYXBw
ZXIob2JqZWN0KSk7CisgICAgQVNTRVJUKFY4RE9NV3JhcHBlcjo6bWF5YmVET01XcmFwcGVyKG9i
amVjdCkpOwogICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0eXBlID0gb2JqZWN0LT5HZXRJbnRl
cm5hbEZpZWxkKFY4Q3VzdG9tOjprRE9NV3JhcHBlclR5cGVJbmRleCk7CiAgICAgcmV0dXJuIFY4
Q2xhc3NJbmRleDo6RnJvbUludCh0eXBlLT5JbnQzMlZhbHVlKCkpOwogfQogCi12b2lkKiBWOFBy
b3h5Ojpjb252ZXJ0VG9OYXRpdmVPYmplY3RJbXBsKFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlw
ZSB0eXBlLCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gb2JqZWN0KQordm9pZCogVjhET01XcmFwcGVy
Ojpjb252ZXJ0VG9OYXRpdmVPYmplY3RJbXBsKFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlwZSB0
eXBlLCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gb2JqZWN0KQogewogICAgIC8vIE5hdGl2ZSBldmVu
dCBsaXN0ZW5lciBpcyBwZXIgZnJhbWUsIGl0IGNhbm5vdCBiZSBoYW5kbGVkIGJ5IHRoaXMgZ2Vu
ZXJpYyBmdW5jdGlvbi4KICAgICBBU1NFUlQodHlwZSAhPSBWOENsYXNzSW5kZXg6OkVWRU5UTElT
VEVORVIpOwogICAgIEFTU0VSVCh0eXBlICE9IFY4Q2xhc3NJbmRleDo6RVZFTlRUQVJHRVQpOwog
Ci0gICAgQVNTRVJUKG1heWJlRE9NV3JhcHBlcihvYmplY3QpKTsKKyAgICBBU1NFUlQoVjhET01X
cmFwcGVyOjptYXliZURPTVdyYXBwZXIob2JqZWN0KSk7CiAKICAgICBzd2l0Y2ggKHR5cGUpIHsK
ICNkZWZpbmUgTUFLRV9DQVNFKFRZUEUsIE5BTUUpIGNhc2UgVjhDbGFzc0luZGV4OjpUWVBFOgpA
QCAtMTk2OCwxNyArMTk2OCwxNyBAQCB2b2lkKiBWOFByb3h5Ojpjb252ZXJ0VG9OYXRpdmVPYmpl
Y3RJbXBsCiB9CiAKIAotdm9pZCogVjhQcm94eTo6Y29udmVydFRvU1ZHUE9EVHlwZUltcGwoVjhD
bGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlIHR5cGUsIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBvYmpl
Y3QpCit2b2lkKiBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb1NWR1BPRFR5cGVJbXBsKFY4Q2xhc3NJ
bmRleDo6VjhXcmFwcGVyVHlwZSB0eXBlLCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gb2JqZWN0KQog
ewogICAgIHJldHVybiBpc1dyYXBwZXJPZlR5cGUob2JqZWN0LCB0eXBlKSA/IGNvbnZlcnRET01X
cmFwcGVyVG9OYXRpdmU8dm9pZD4ob2JqZWN0KSA6IDA7CiB9CiAKLXY4OjpIYW5kbGU8djg6Ok9i
amVjdD4gVjhQcm94eTo6bG9va3VwRE9NV3JhcHBlcihWOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5
cGUgdHlwZSwgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHZhbHVlKQordjg6OkhhbmRsZTx2ODo6T2Jq
ZWN0PiBWOERPTVdyYXBwZXI6Omxvb2t1cERPTVdyYXBwZXIoVjhDbGFzc0luZGV4OjpWOFdyYXBw
ZXJUeXBlIHR5cGUsIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSkKIHsKICAgICBpZiAodmFs
dWUuSXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gbm90SGFuZGxlZEJ5SW50ZXJjZXB0b3IoKTsK
IAotICAgIHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IGRlc2NyaXB0b3IgPSBWOFBy
b3h5OjpnZXRUZW1wbGF0ZSh0eXBlKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvblRlbXBs
YXRlPiBkZXNjcmlwdG9yID0gVjhET01XcmFwcGVyOjpnZXRUZW1wbGF0ZSh0eXBlKTsKICAgICB3
aGlsZSAodmFsdWUtPklzT2JqZWN0KCkpIHsKICAgICAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0
PiBvYmplY3QgPSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KHZhbHVlKTsKICAgICAgICAg
aWYgKGRlc2NyaXB0b3ItPkhhc0luc3RhbmNlKG9iamVjdCkpCkBAIC0xOTg5LDcgKzE5ODksNyBA
QCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IFY4UHJveHk6Omxvb2t1cERPCiAgICAgcmV0dXJuIG5v
dEhhbmRsZWRCeUludGVyY2VwdG9yKCk7CiB9IAogCi12b2lkKiBWOFByb3h5Ojpjb252ZXJ0RE9N
V3JhcHBlclRvTm9kZUhlbHBlcih2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUpCit2b2lkKiBW
OERPTVdyYXBwZXI6OmNvbnZlcnRET01XcmFwcGVyVG9Ob2RlSGVscGVyKHY4OjpIYW5kbGU8djg6
OlZhbHVlPiB2YWx1ZSkKIHsKICAgICBBU1NFUlQobWF5YmVET01XcmFwcGVyKHZhbHVlKSk7CiAK
QEAgLTIwMDEsNyArMjAwMSw3IEBAIHZvaWQqIFY4UHJveHk6OmNvbnZlcnRET01XcmFwcGVyVG9O
b2RlSGUKICAgICByZXR1cm4gZXh0cmFjdENQb2ludGVyPE5vZGU+KHdyYXBwZXIpOwogfQogCi1Q
YXNzUmVmUHRyPE5vZGVGaWx0ZXI+IFY4UHJveHk6OndyYXBOYXRpdmVOb2RlRmlsdGVyKHY4OjpI
YW5kbGU8djg6OlZhbHVlPiBmaWx0ZXIpCitQYXNzUmVmUHRyPE5vZGVGaWx0ZXI+IFY4RE9NV3Jh
cHBlcjo6d3JhcE5hdGl2ZU5vZGVGaWx0ZXIodjg6OkhhbmRsZTx2ODo6VmFsdWU+IGZpbHRlcikK
IHsKICAgICAvLyBBIE5vZGVGaWx0ZXIgaXMgdXNlZCB3aGVuIHdhbGtpbmcgdGhyb3VnaCBhIERP
TSB0cmVlIG9yIGl0ZXJhdGluZyB0cmVlCiAgICAgLy8gbm9kZXMuCkBAIC0yMDE4LDcgKzIwMTgs
NyBAQCBQYXNzUmVmUHRyPE5vZGVGaWx0ZXI+IFY4UHJveHk6OndyYXBOYXRpCiAgICAgcmV0dXJu
IE5vZGVGaWx0ZXI6OmNyZWF0ZShjb25kaXRpb24pOwogfQogCi12ODo6TG9jYWw8djg6Ok9iamVj
dD4gVjhQcm94eTo6aW5zdGFudGlhdGVWOE9iamVjdChWOFByb3h5KiBwcm94eSwgVjhDbGFzc0lu
ZGV4OjpWOFdyYXBwZXJUeXBlIGRlc2NyaXB0b3JUeXBlLCBWOENsYXNzSW5kZXg6OlY4V3JhcHBl
clR5cGUgY3B0clR5cGUsIHZvaWQqIGltcGwpCit2ODo6TG9jYWw8djg6Ok9iamVjdD4gVjhET01X
cmFwcGVyOjppbnN0YW50aWF0ZVY4T2JqZWN0KFY4UHJveHkqIHByb3h5LCBWOENsYXNzSW5kZXg6
OlY4V3JhcHBlclR5cGUgZGVzY3JpcHRvclR5cGUsIFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlw
ZSBjcHRyVHlwZSwgdm9pZCogaW1wbCkKIHsKICAgICAvLyBNYWtlIGEgc3BlY2lhbCBjYXNlIGZv
ciBkb2N1bWVudC5hbGwKICAgICBpZiAoZGVzY3JpcHRvclR5cGUgPT0gVjhDbGFzc0luZGV4OjpI
VE1MQ09MTEVDVElPTiAmJiBzdGF0aWNfY2FzdDxIVE1MQ29sbGVjdGlvbio+KGltcGwpLT50eXBl
KCkgPT0gRG9jQWxsKQpAQCAtMjAzMCwxMiArMjAzMCwxMiBAQCB2ODo6TG9jYWw8djg6Ok9iamVj
dD4gVjhQcm94eTo6aW5zdGFudGlhCiAgICAgaWYgKHByb3h5KQogICAgICAgICBpbnN0YW5jZSA9
IHByb3h5LT5jcmVhdGVXcmFwcGVyRnJvbUNhY2hlKGRlc2NyaXB0b3JUeXBlKTsKICAgICBlbHNl
IHsKLSAgICAgICAgdjg6OkxvY2FsPHY4OjpGdW5jdGlvbj4gZnVuY3Rpb24gPSBnZXRUZW1wbGF0
ZShkZXNjcmlwdG9yVHlwZSktPkdldEZ1bmN0aW9uKCk7CisgICAgICAgIHY4OjpMb2NhbDx2ODo6
RnVuY3Rpb24+IGZ1bmN0aW9uID0gVjhET01XcmFwcGVyOjpnZXRUZW1wbGF0ZShkZXNjcmlwdG9y
VHlwZSktPkdldEZ1bmN0aW9uKCk7CiAgICAgICAgIGluc3RhbmNlID0gU2FmZUFsbG9jYXRpb246
Om5ld0luc3RhbmNlKGZ1bmN0aW9uKTsKICAgICB9CiAgICAgaWYgKCFpbnN0YW5jZS5Jc0VtcHR5
KCkpIHsKICAgICAgICAgLy8gQXZvaWQgc2V0dGluZyB0aGUgRE9NIHdyYXBwZXIgZm9yIGZhaWxl
ZCBhbGxvY2F0aW9ucy4KLSAgICAgICAgc2V0RE9NV3JhcHBlcihpbnN0YW5jZSwgVjhDbGFzc0lu
ZGV4OjpUb0ludChjcHRyVHlwZSksIGltcGwpOworICAgICAgICBWOERPTVdyYXBwZXI6OnNldERP
TVdyYXBwZXIoaW5zdGFuY2UsIFY4Q2xhc3NJbmRleDo6VG9JbnQoY3B0clR5cGUpLCBpbXBsKTsK
ICAgICB9CiAgICAgcmV0dXJuIGluc3RhbmNlOwogfQpAQCAtMjA0OCw3ICsyMDQ4LDcgQEAgdjg6
OkhhbmRsZTx2ODo6VmFsdWU+IFY4UHJveHk6OmNoZWNrTmV3TAogICAgIHJldHVybiBhcmdzLlRo
aXMoKTsKIH0KIAotdm9pZCBWOFByb3h5OjpzZXRET01XcmFwcGVyKHY4OjpIYW5kbGU8djg6Ok9i
amVjdD4gb2JqZWN0LCBpbnQgdHlwZSwgdm9pZCogY3B0cikKK3ZvaWQgVjhET01XcmFwcGVyOjpz
ZXRET01XcmFwcGVyKHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gb2JqZWN0LCBpbnQgdHlwZSwgdm9p
ZCogY3B0cikKIHsKICAgICBBU1NFUlQob2JqZWN0LT5JbnRlcm5hbEZpZWxkQ291bnQoKSA+PSAy
KTsKICAgICBvYmplY3QtPlNldEludGVybmFsRmllbGQoVjhDdXN0b206OmtET01XcmFwcGVyT2Jq
ZWN0SW5kZXgsIHdyYXBDUG9pbnRlcihjcHRyKSk7CkBAIC0yMDU2LDcgKzIwNTYsNyBAQCB2b2lk
IFY4UHJveHk6OnNldERPTVdyYXBwZXIodjg6OkhhbmRsZTx2CiB9CiAKICNpZm5kZWYgTkRFQlVH
Ci1ib29sIFY4UHJveHk6Om1heWJlRE9NV3JhcHBlcih2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFs
dWUpCitib29sIFY4RE9NV3JhcHBlcjo6bWF5YmVET01XcmFwcGVyKHY4OjpIYW5kbGU8djg6OlZh
bHVlPiB2YWx1ZSkKIHsKICAgICBpZiAodmFsdWUuSXNFbXB0eSgpIHx8ICF2YWx1ZS0+SXNPYmpl
Y3QoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjA3OCwxNCArMjA3OCwxNCBAQCBib29s
IFY4UHJveHk6Om1heWJlRE9NV3JhcHBlcih2ODo6SGFuZGxlCiB9CiAjZW5kaWYKIAotYm9vbCBW
OFByb3h5Ojppc0RPTUV2ZW50V3JhcHBlcih2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUpCiti
b29sIFY4RE9NV3JhcHBlcjo6aXNET01FdmVudFdyYXBwZXIodjg6OkhhbmRsZTx2ODo6VmFsdWU+
IHZhbHVlKQogewogICAgIC8vIEFsbCBraW5kcyBvZiBldmVudHMgdXNlIEVWRU5UIGFzIGRvbSB0
eXBlIGluIEpTIHdyYXBwZXJzLgogICAgIC8vIFNlZSBFdmVudFRvVjhPYmplY3QKICAgICByZXR1
cm4gaXNXcmFwcGVyT2ZUeXBlKHZhbHVlLCBWOENsYXNzSW5kZXg6OkVWRU5UKTsKIH0KIAotYm9v
bCBWOFByb3h5Ojppc1dyYXBwZXJPZlR5cGUodjg6OkhhbmRsZTx2ODo6VmFsdWU+IHZhbHVlLCBW
OENsYXNzSW5kZXg6OlY4V3JhcHBlclR5cGUgY2xhc3NUeXBlKQorYm9vbCBWOERPTVdyYXBwZXI6
OmlzV3JhcHBlck9mVHlwZSh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUsIFY4Q2xhc3NJbmRl
eDo6VjhXcmFwcGVyVHlwZSBjbGFzc1R5cGUpCiB7CiAgICAgaWYgKHZhbHVlLklzRW1wdHkoKSB8
fCAhdmFsdWUtPklzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTIxODcsNyAr
MjE4Nyw3IEBAIGJvb2wgVjhQcm94eTo6aXNXcmFwcGVyT2ZUeXBlKHY4OjpIYW5kbGUKICAgICBt
YWNybyh1bCwgVUxJU1QpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBtYWNy
byh4bXAsIFBSRSkKIAotVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlIFY4UHJveHk6Omh0bWxF
bGVtZW50VHlwZShIVE1MRWxlbWVudCogZWxlbWVudCkKK1Y4Q2xhc3NJbmRleDo6VjhXcmFwcGVy
VHlwZSBWOERPTVdyYXBwZXI6Omh0bWxFbGVtZW50VHlwZShIVE1MRWxlbWVudCogZWxlbWVudCkK
IHsKICAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBWOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5
cGU+IFdyYXBwZXJUeXBlTWFwOwogICAgIERFRklORV9TVEFUSUNfTE9DQUwoV3JhcHBlclR5cGVN
YXAsIHdyYXBwZXJUeXBlTWFwLCAoKSk7CkBAIC0yMzE5LDcgKzIzMTksNyBAQCBWOENsYXNzSW5k
ZXg6OlY4V3JhcHBlclR5cGUgVjhQcm94eTo6aHRtCiAgICAgbWFjcm8odmlldywgVklFVykgXAog
ICAgIC8vIGVuZCBvZiBtYWNybwogCi1WOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5cGUgVjhQcm94
eTo6c3ZnRWxlbWVudFR5cGUoU1ZHRWxlbWVudCogZWxlbWVudCkKK1Y4Q2xhc3NJbmRleDo6VjhX
cmFwcGVyVHlwZSBWOERPTVdyYXBwZXI6OnN2Z0VsZW1lbnRUeXBlKFNWR0VsZW1lbnQqIGVsZW1l
bnQpCiB7CiAgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgVjhDbGFzc0luZGV4OjpWOFdyYXBw
ZXJUeXBlPiBXcmFwcGVyVHlwZU1hcDsKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFdyYXBwZXJU
eXBlTWFwLCB3cmFwcGVyVHlwZU1hcCwgKCkpOwpAQCAtMjMzOSw3ICsyMzM5LDcgQEAgVjhDbGFz
c0luZGV4OjpWOFdyYXBwZXJUeXBlIFY4UHJveHk6OnN2ZwogCiAjZW5kaWYgLy8gRU5BQkxFKFNW
RykKIAotdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4UHJveHk6OmNvbnZlcnRFdmVudFRvVjhPYmpl
Y3QoRXZlbnQqIGV2ZW50KQordjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4RE9NV3JhcHBlcjo6Y29u
dmVydEV2ZW50VG9WOE9iamVjdChFdmVudCogZXZlbnQpCiB7CiAgICAgaWYgKCFldmVudCkKICAg
ICAgICAgcmV0dXJuIHY4OjpOdWxsKCk7CkBAIC0yNDE1LDcgKzI0MTUsNyBAQCBzdGF0aWMgY29u
c3QgVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlCiB9OwogCiAvLyBDYWxsZXIgY2hlY2tzIG5v
ZGUgaXMgbm90IG51bGwuCi12ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhQcm94eTo6Y29udmVydE5v
ZGVUb1Y4T2JqZWN0KE5vZGUqIG5vZGUpCit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhET01XcmFw
cGVyOjpjb252ZXJ0Tm9kZVRvVjhPYmplY3QoTm9kZSogbm9kZSkKIHsKICAgICBpZiAoIW5vZGUp
CiAgICAgICAgIHJldHVybiB2ODo6TnVsbCgpOwpAQCAtMjQyOSwxMiArMjQyOSwxMiBAQCB2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4gVjhQcm94eTo6Y29udmVydE5vCiAgICAgRG9jdW1lbnQqIGRvY3Vt
ZW50ID0gbm9kZS0+ZG9jdW1lbnQoKTsKICAgICBpZiAoZG9jdW1lbnQpIHsKICAgICAgICAgRnJh
bWUqIGZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCk7Ci0gICAgICAgIHByb3h5ID0gcmV0cmlldmUo
ZnJhbWUpOworICAgICAgICBwcm94eSA9IFY4UHJveHk6OnJldHJpZXZlKGZyYW1lKTsKICAgICAg
ICAgaWYgKHByb3h5KQogICAgICAgICAgICAgcHJveHktPmluaXRDb250ZXh0SWZOZWVkZWQoKTsK
ICAgICB9CiAKLSAgICBET01XcmFwcGVyTWFwPE5vZGU+JiBkb21Ob2RlTWFwID0gcHJveHkgPyBw
cm94eS0+bV9kb21Ob2RlTWFwIDogZ2V0RE9NTm9kZU1hcCgpOworICAgIERPTVdyYXBwZXJNYXA8
Tm9kZT4mIGRvbU5vZGVNYXAgPSBwcm94eSA/IHByb3h5LT5kb21Ob2RlTWFwKCkgOiBnZXRET01O
b2RlTWFwKCk7CiAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0gZG9tTm9kZU1h
cC5nZXQobm9kZSk7CiAgICAgaWYgKCF3cmFwcGVyLklzRW1wdHkoKSkKICAgICAgICAgcmV0dXJu
IHdyYXBwZXI7CkBAIC0yNTE2LDcgKzI1MTYsNyBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhQ
cm94eTo6Y29udmVydE5vCiAvLyAxKSBFdmVudFRhcmdldE5vZGU7IDIpIERPTVdpbmRvdyAzKSBY
TUxIdHRwUmVxdWVzdDsgNCkgTWVzc2FnZVBvcnQ7CiAvLyA1KSBYTUxIdHRwUmVxdWVzdFVwbG9h
ZAogLy8gY2hlY2sgRXZlbnRUYXJnZXQuaCBmb3IgbmV3IHR5cGUgY29udmVyc2lvbiBtZXRob2Rz
Ci12ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhQcm94eTo6Y29udmVydEV2ZW50VGFyZ2V0VG9WOE9i
amVjdChFdmVudFRhcmdldCogdGFyZ2V0KQordjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4RE9NV3Jh
cHBlcjo6Y29udmVydEV2ZW50VGFyZ2V0VG9WOE9iamVjdChFdmVudFRhcmdldCogdGFyZ2V0KQog
ewogICAgIGlmICghdGFyZ2V0KQogICAgICAgICByZXR1cm4gdjg6Ok51bGwoKTsKQEAgLTI1Njcs
NyArMjU2Nyw3IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOFByb3h5Ojpjb252ZXJ0RXYKICAg
ICByZXR1cm4gbm90SGFuZGxlZEJ5SW50ZXJjZXB0b3IoKTsKIH0KIAotdjg6OkhhbmRsZTx2ODo6
VmFsdWU+IFY4UHJveHk6OmNvbnZlcnRFdmVudExpc3RlbmVyVG9WOE9iamVjdChFdmVudExpc3Rl
bmVyKiBsaXN0ZW5lcikKK3Y4OjpIYW5kbGU8djg6OlZhbHVlPiBWOERPTVdyYXBwZXI6OmNvbnZl
cnRFdmVudExpc3RlbmVyVG9WOE9iamVjdChFdmVudExpc3RlbmVyKiBsaXN0ZW5lcikKIHsKICAg
ICBpZiAoIWxpc3RlbmVyKQogICAgICAgICByZXR1cm4gdjg6Ok51bGwoKTsKQEAgLTI1NzcsNyAr
MjU3Nyw3IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOFByb3h5Ojpjb252ZXJ0RXYKICAgICBy
ZXR1cm4gdjhsaXN0ZW5lci0+Z2V0TGlzdGVuZXJPYmplY3QoKTsKIH0KIAotdjg6OkhhbmRsZTx2
ODo6VmFsdWU+IFY4UHJveHk6OmNvbnZlcnRET01JbXBsZW1lbnRhdGlvblRvVjhPYmplY3QoRE9N
SW1wbGVtZW50YXRpb24qIGltcGwpCit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhET01XcmFwcGVy
Ojpjb252ZXJ0RE9NSW1wbGVtZW50YXRpb25Ub1Y4T2JqZWN0KERPTUltcGxlbWVudGF0aW9uKiBp
bXBsKQogewogICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gcmVzdWx0ID0gaW5zdGFudGlhdGVW
OE9iamVjdChWOENsYXNzSW5kZXg6OkRPTUlNUExFTUVOVEFUSU9OLCBWOENsYXNzSW5kZXg6OkRP
TUlNUExFTUVOVEFUSU9OLCBpbXBsKTsKICAgICBpZiAocmVzdWx0LklzRW1wdHkoKSkgewpAQCAt
MjU4OCw3ICsyNTg4LDcgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4UHJveHk6OmNvbnZlcnRE
TwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOFByb3h5
Ojpjb252ZXJ0U3R5bGVTaGVldFRvVjhPYmplY3QoU3R5bGVTaGVldCogc2hlZXQpCit2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gVjhET01XcmFwcGVyOjpjb252ZXJ0U3R5bGVTaGVldFRvVjhPYmplY3Qo
U3R5bGVTaGVldCogc2hlZXQpCiB7CiAgICAgaWYgKCFzaGVldCkKICAgICAgICAgcmV0dXJuIHY4
OjpOdWxsKCk7CkBAIC0yNjE4LDcgKzI2MTgsNyBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhQ
cm94eTo6Y29udmVydFN0CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdjg6OkhhbmRsZTx2ODo6
VmFsdWU+IFY4UHJveHk6OmNvbnZlcnRDU1NWYWx1ZVRvVjhPYmplY3QoQ1NTVmFsdWUqIHZhbHVl
KQordjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4RE9NV3JhcHBlcjo6Y29udmVydENTU1ZhbHVlVG9W
OE9iamVjdChDU1NWYWx1ZSogdmFsdWUpCiB7CiAgICAgaWYgKCF2YWx1ZSkKICAgICAgICAgcmV0
dXJuIHY4OjpOdWxsKCk7CkBAIC0yNjU0LDcgKzI2NTQsNyBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gVjhQcm94eTo6Y29udmVydENTCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IFY4UHJveHk6OmNvbnZlcnRDU1NSdWxlVG9WOE9iamVjdChDU1NSdWxlKiBy
dWxlKQordjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4RE9NV3JhcHBlcjo6Y29udmVydENTU1J1bGVU
b1Y4T2JqZWN0KENTU1J1bGUqIHJ1bGUpCiB7CiAgICAgaWYgKCFydWxlKSAKICAgICAgICAgcmV0
dXJuIHY4OjpOdWxsKCk7CkBAIC0yNzA3LDcgKzI3MDcsNyBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gVjhQcm94eTo6Y29udmVydENTCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IFY4UHJveHk6OmNvbnZlcnRXaW5kb3dUb1Y4T2JqZWN0KERPTVdpbmRvdyog
d2luZG93KQordjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4RE9NV3JhcHBlcjo6Y29udmVydFdpbmRv
d1RvVjhPYmplY3QoRE9NV2luZG93KiB3aW5kb3cpCiB7CiAgICAgaWYgKCF3aW5kb3cpCiAgICAg
ICAgIHJldHVybiB2ODo6TnVsbCgpOwpAQCAtMjcyNCwxNCArMjcyNCwxNCBAQCB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gVjhQcm94eTo6Y29udmVydFdpCiAgICAgLy8gbmVjZXNzYXJpbHkgdGhlIGZp
cnN0IGdsb2JhbCBvYmplY3QgYXNzb2NpYXRlZCB3aXRoIHRoYXQgRE9NV2luZG93LgogICAgIHY4
OjpIYW5kbGU8djg6OkNvbnRleHQ+IGN1cnJlbnRDb250ZXh0ID0gdjg6OkNvbnRleHQ6OkdldEN1
cnJlbnQoKTsKICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGN1cnJlbnRHbG9iYWwgPSBjdXJy
ZW50Q29udGV4dC0+R2xvYmFsKCk7Ci0gICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3aW5kb3dX
cmFwcGVyID0gbG9va3VwRE9NV3JhcHBlcihWOENsYXNzSW5kZXg6OkRPTVdJTkRPVywgY3VycmVu
dEdsb2JhbCk7CisgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3aW5kb3dXcmFwcGVyID0gVjhE
T01XcmFwcGVyOjpsb29rdXBET01XcmFwcGVyKFY4Q2xhc3NJbmRleDo6RE9NV0lORE9XLCBjdXJy
ZW50R2xvYmFsKTsKICAgICBpZiAoIXdpbmRvd1dyYXBwZXIuSXNFbXB0eSgpKSB7CiAgICAgICAg
IGlmIChjb252ZXJ0RE9NV3JhcHBlclRvTmF0aXZlPERPTVdpbmRvdz4od2luZG93V3JhcHBlcikg
PT0gd2luZG93KQogICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRHbG9iYWw7CiAgICAgfQogCiAg
ICAgLy8gT3RoZXJ3aXNlLCByZXR1cm4gdGhlIGdsb2JhbCBvYmplY3QgYXNzb2NpYXRlZCB3aXRo
IHRoaXMgZnJhbWUuCi0gICAgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gdjhDb250ZXh0ID0gY29u
dGV4dChmcmFtZSk7CisgICAgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gdjhDb250ZXh0ID0gVjhQ
cm94eTo6Y29udGV4dChmcmFtZSk7CiAgICAgaWYgKHY4Q29udGV4dC5Jc0VtcHR5KCkpCiAgICAg
ICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+KCk7CiAKQEAgLTI3NDksNyArMjc0OSw3
IEBAIHZvaWQgVjhQcm94eTo6YmluZEpzT2JqZWN0VG9XaW5kb3coRnJhbWUKIAogICAgIHY4OjpD
b250ZXh0OjpTY29wZSBzY29wZSh2OENvbnRleHQpOwogICAgIHY4OjpIYW5kbGU8djg6Ok9iamVj
dD4gaW5zdGFuY2UgPSBkZXNjcmlwdG9yLT5HZXRGdW5jdGlvbigpOwotICAgIHNldERPTVdyYXBw
ZXIoaW5zdGFuY2UsIHR5cGUsIGltcGwpOworICAgIFY4RE9NV3JhcHBlcjo6c2V0RE9NV3JhcHBl
cihpbnN0YW5jZSwgdHlwZSwgaW1wbCk7CiAKICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGds
b2JhbCA9IHY4Q29udGV4dC0+R2xvYmFsKCk7CiAgICAgZ2xvYmFsLT5TZXQodjg6OlN0cmluZzo6
TmV3KG5hbWUpLCBpbnN0YW5jZSk7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHku
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuaAkocmV2aXNpb24g
NDU2NTIpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuaAkod29ya2luZyBjb3B5KQpA
QCAtMzE1LDczICszMTUsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgc3RhdGlj
IHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjaGVja05ld0xlZ2FsKGNvbnN0IHY4OjpBcmd1bWVudHMm
KTsKIAotICAgICAgICAvLyBDcmVhdGUgYSBWOCB3cmFwcGVyIGZvciBhIEMgcG9pbnRlcgotICAg
ICAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHdyYXBDUG9pbnRlcih2b2lkKiBjcHRy
KQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBSZXByZXNlbnQgdm9pZCogYXMgaW50Ci0gICAg
ICAgICAgICBpbnQgYWRkciA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50PihjcHRyKTsKLSAgICAgICAg
ICAgIEFTU0VSVCghKGFkZHIgJiAweDAxKSk7IC8vIFRoZSBhZGRyZXNzIG11c3QgYmUgYWxpZ25l
ZC4KLSAgICAgICAgICAgIHJldHVybiB2ODo6SW50ZWdlcjo6TmV3KGFkZHIgPj4gMSk7Ci0gICAg
ICAgIH0KLQotICAgICAgICAvLyBUYWtlIEMgcG9pbnRlciBvdXQgb2YgYSB2OCB3cmFwcGVyLgot
ICAgICAgICB0ZW1wbGF0ZSA8Y2xhc3MgQz4KLSAgICAgICAgc3RhdGljIEMqIGV4dHJhY3RDUG9p
bnRlcih2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gb2JqKQotICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8Qyo+KGV4dHJhY3RDUG9pbnRlckltcGwob2JqKSk7Ci0gICAgICAg
IH0KLQogICAgICAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6U2NyaXB0PiBjb21waWxlU2NyaXB0
KHY4OjpIYW5kbGU8djg6OlN0cmluZz4gY29kZSwgY29uc3QgU3RyaW5nJiBmaWxlTmFtZSwgaW50
IGJhc2VMaW5lKTsKIAotI2lmbmRlZiBOREVCVUcKLSAgICAgICAgLy8gQ2hlY2tzIGlmIGEgdjgg
dmFsdWUgY2FuIGJlIGEgRE9NIHdyYXBwZXIKLSAgICAgICAgc3RhdGljIGJvb2wgbWF5YmVET01X
cmFwcGVyKHY4OjpIYW5kbGU8djg6OlZhbHVlPik7Ci0jZW5kaWYKLQotICAgICAgICAvLyBTZXRz
IGNvbnRlbnRzIG9mIGEgRE9NIHdyYXBwZXIuCi0gICAgICAgIHN0YXRpYyB2b2lkIHNldERPTVdy
YXBwZXIodjg6OkhhbmRsZTx2ODo6T2JqZWN0PiwgaW50IHR5cGUsIHZvaWQqIHB0cik7Ci0KLSAg
ICAgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gbG9va3VwRE9NV3JhcHBlcihWOENs
YXNzSW5kZXg6OlY4V3JhcHBlclR5cGUsIHY4OjpIYW5kbGU8djg6OlZhbHVlPik7Ci0KLSAgICAg
ICAgLy8gQSBoZWxwZXIgZnVuY3Rpb24gZXh0cmFjdCBuYXRpdmUgb2JqZWN0IHBvaW50ZXIgZnJv
bSBhIERPTSB3cmFwcGVyCi0gICAgICAgIC8vIGFuZCBjYXN0IHRvIHRoZSBzcGVjaWZpZWQgdHlw
ZS4KLSAgICAgICAgdGVtcGxhdGUgPGNsYXNzIEM+Ci0gICAgICAgIHN0YXRpYyBDKiBjb252ZXJ0
RE9NV3JhcHBlclRvTmF0aXZlKHY4OjpIYW5kbGU8djg6OlZhbHVlPiBvYmplY3QpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIEFTU0VSVChtYXliZURPTVdyYXBwZXIob2JqZWN0KSk7Ci0gICAgICAg
ICAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gcHRyID0gdjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6
Q2FzdChvYmplY3QpLT5HZXRJbnRlcm5hbEZpZWxkKFY4Q3VzdG9tOjprRE9NV3JhcHBlck9iamVj
dEluZGV4KTsKLSAgICAgICAgICAgIHJldHVybiBleHRyYWN0Q1BvaW50ZXI8Qz4ocHRyKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIC8vIEEgaGVscCBmdW5jdGlvbiBleHRyYWN0IGEgbm9kZSB0eXBl
IHBvaW50ZXIgZnJvbSBhIERPTSB3cmFwcGVyLgotICAgICAgICAvLyBXcmFwcGVkIHBvaW50ZXIg
bXVzdCBiZSBjYXN0IHRvIE5vZGUqIGZpcnN0LgotICAgICAgICBzdGF0aWMgdm9pZCogY29udmVy
dERPTVdyYXBwZXJUb05vZGVIZWxwZXIodjg6OkhhbmRsZTx2ODo6VmFsdWU+KTsKLQotICAgICAg
ICB0ZW1wbGF0ZSA8Y2xhc3MgQz4KLSAgICAgICAgc3RhdGljIEMqIGNvbnZlcnRET01XcmFwcGVy
VG9Ob2RlKHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PEMqPihjb252ZXJ0RE9NV3JhcHBlclRvTm9kZUhlbHBlcih2
YWx1ZSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICAg
ICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjb252ZXJ0VG9WOE9iamVjdChWOENsYXNz
SW5kZXg6OlY4V3JhcHBlclR5cGUgdHlwZSwgUGFzc1JlZlB0cjxUPiBpbXApCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBjb252ZXJ0VG9WOE9iamVjdCh0eXBlLCBpbXAuZ2V0KCkpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjb252ZXJ0
VG9WOE9iamVjdChWOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5cGUsIHZvaWQqKTsKLQotICAgICAg
ICAvLyBGYXN0LXBhdGggZm9yIE5vZGUgb2JqZWN0cy4KLSAgICAgICAgc3RhdGljIHY4OjpIYW5k
bGU8djg6OlZhbHVlPiBjb252ZXJ0Tm9kZVRvVjhPYmplY3QoTm9kZSopOwotCi0gICAgICAgIHRl
bXBsYXRlIDxjbGFzcyBDPgotICAgICAgICBzdGF0aWMgQyogY29udmVydFRvTmF0aXZlT2JqZWN0
KFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlwZSB0eXBlLCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4g
b2JqZWN0KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Qyo+KGNv
bnZlcnRUb05hdGl2ZU9iamVjdEltcGwodHlwZSwgb2JqZWN0KSk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBzdGF0aWMgVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlIGRvbVdyYXBwZXJUeXBlKHY4
OjpIYW5kbGU8djg6Ok9iamVjdD4pOwotCiAgICAgICAgIC8vIElmIHRoZSBleGNlcHRpb24gY29k
ZSBpcyBkaWZmZXJlbnQgZnJvbSB6ZXJvLCBhIERPTSBleGNlcHRpb24gaXMKICAgICAgICAgLy8g
c2NoZWR1bGUgdG8gYmUgdGhyb3duLgogICAgICAgICBzdGF0aWMgdm9pZCBzZXRET01FeGNlcHRp
b24oaW50IGV4Y2VwdGlvbkNvZGUpOwpAQCAtMzkzLDUxICszMjgsMTcgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgICAgICAvLyBhcyBhIG5hbWVkIHByb3BlcnR5LiBVc2VkIGJ5IHY4X3Rlc3Rf
c2hlbGwuCiAgICAgICAgIHN0YXRpYyB2b2lkIGJpbmRKc09iamVjdFRvV2luZG93KEZyYW1lKiwg
Y29uc3QgY2hhciogbmFtZSwgaW50IHR5cGUsIHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uVGVtcGxh
dGU+LCB2b2lkKik7CiAKLSAgICAgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjb252
ZXJ0RXZlbnRUb1Y4T2JqZWN0KEV2ZW50Kik7Ci0KLSAgICAgICAgc3RhdGljIEV2ZW50KiBjb252
ZXJ0VG9OYXRpdmVFdmVudCh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4ganNFdmVudCkKLSAgICAgICAg
ewotICAgICAgICAgICAgaWYgKCFpc0RPTUV2ZW50V3JhcHBlcihqc0V2ZW50KSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIHJldHVybiBjb252ZXJ0RE9NV3JhcHBlclRv
TmF0aXZlPEV2ZW50Pihqc0V2ZW50KTsKLSAgICAgICAgfQotCi0gICAgICAgIHN0YXRpYyB2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4gY29udmVydEV2ZW50VGFyZ2V0VG9WOE9iamVjdChFdmVudFRhcmdl
dCopOwotICAgICAgICAvLyBXcmFwIGFuZCB1bndyYXAgSlMgZXZlbnQgbGlzdGVuZXJzLgotICAg
ICAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNvbnZlcnRFdmVudExpc3RlbmVyVG9W
OE9iamVjdChFdmVudExpc3RlbmVyKik7Ci0KLSAgICAgICAgLy8gRE9NSW1wbGVtZW50YXRpb24g
aXMgYSBzaW5nbGV0b24gYW5kIGl0IGlzIGhhbmRsZWQgaW4gYSBzcGVjaWFsCi0gICAgICAgIC8v
IHdheS4gQSB3cmFwcGVyIGlzIGdlbmVyYXRlZCBwZXIgZG9jdW1lbnQgYW5kIHN0b3JlZCBpbiBh
bgotICAgICAgICAvLyBpbnRlcm5hbCBmaWVsZCBvZiB0aGUgZG9jdW1lbnQuCi0gICAgICAgIHN0
YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY29udmVydERPTUltcGxlbWVudGF0aW9uVG9WOE9i
amVjdChET01JbXBsZW1lbnRhdGlvbiopOwotCi0gICAgICAgIC8vIFdyYXAgSlMgbm9kZSBmaWx0
ZXIgaW4gQysrLgotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxOb2RlRmlsdGVyPiB3cmFwTmF0
aXZlTm9kZUZpbHRlcih2ODo6SGFuZGxlPHY4OjpWYWx1ZT4pOwotCi0gICAgICAgIHN0YXRpYyB2
ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gZ2V0VGVtcGxhdGUoVjhDbGFzc0lu
ZGV4OjpWOFdyYXBwZXJUeXBlKTsKLQogICAgICAgICB0ZW1wbGF0ZSA8aW50IHRhZywgdHlwZW5h
bWUgVD4KICAgICAgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjb25zdHJ1Y3RET01P
YmplY3QoY29uc3Qgdjg6OkFyZ3VtZW50cyYpOwogCi0gICAgICAgIC8vIENoZWNrcyB3aGV0aGVy
IGEgRE9NIG9iamVjdCBoYXMgYSBKUyB3cmFwcGVyLgotICAgICAgICBzdGF0aWMgYm9vbCBkb21P
YmplY3RIYXNKU1dyYXBwZXIodm9pZCopOwotICAgICAgICAvLyBTZXQgSlMgd3JhcHBlciBvZiBh
IERPTSBvYmplY3QsIHRoZSBjYWxsZXIgaW4gY2hhcmdlIG9mIGluY3JlYXNlIHJlZi4KLSAgICAg
ICAgc3RhdGljIHZvaWQgc2V0SlNXcmFwcGVyRm9yRE9NT2JqZWN0KHZvaWQqLCB2ODo6UGVyc2lz
dGVudDx2ODo6T2JqZWN0Pik7Ci0gICAgICAgIHN0YXRpYyB2b2lkIHNldEpTV3JhcHBlckZvckFj
dGl2ZURPTU9iamVjdCh2b2lkKiwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4pOwotICAgICAg
ICBzdGF0aWMgdm9pZCBzZXRKU1dyYXBwZXJGb3JET01Ob2RlKE5vZGUqLCB2ODo6UGVyc2lzdGVu
dDx2ODo6T2JqZWN0Pik7Ci0KICAgICAgICAgLy8gUHJvY2VzcyBhbnkgcGVuZGluZyBKYXZhU2Ny
aXB0IGNvbnNvbGUgbWVzc2FnZXMuCiAgICAgICAgIHN0YXRpYyB2b2lkIHByb2Nlc3NDb25zb2xl
TWVzc2FnZXMoKTsKIAotICAgICAgICAvLyBDaGVjayB3aGV0aGVyIGEgVjggdmFsdWUgaXMgYSB3
cmFwcGVyIG9mIHR5cGUgfGNsYXNzVHlwZXwuCi0gICAgICAgIHN0YXRpYyBib29sIGlzV3JhcHBl
ck9mVHlwZSh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4sIFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlw
ZSk7Ci0KICAgICAgICAgLy8gRnVuY3Rpb24gZm9yIHJldHJpZXZpbmcgdGhlIGxpbmUgbnVtYmVy
IGFuZCBzb3VyY2UgbmFtZSBmb3IgdGhlIHRvcAogICAgICAgICAvLyBKYXZhU2NyaXB0IHN0YWNr
IGZyYW1lLgogICAgICAgICBzdGF0aWMgaW50IHNvdXJjZUxpbmVOdW1iZXIoKTsKICAgICAgICAg
c3RhdGljIFN0cmluZyBzb3VyY2VOYW1lKCk7CiAKLQogICAgICAgICAvLyBSZXR1cm5zIGEgbG9j
YWwgaGFuZGxlIG9mIHRoZSBjb250ZXh0LgogICAgICAgICB2ODo6TG9jYWw8djg6OkNvbnRleHQ+
IGNvbnRleHQoKQogICAgICAgICB7CkBAIC00NTMsMjEgKzM1NCwyMSBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgICAgIC8vIG9mIHRoZSB2ODo6RXh0ZW5zaW9uIG9iamVjdCBwYXNzZWQuCiAg
ICAgICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyRXh0ZW5zaW9uKHY4OjpFeHRlbnNpb24qLCBjb25z
dCBTdHJpbmcmIHNjaGVtZVJlc3RyaWN0aW9uKTsKIAotICAgICAgICBzdGF0aWMgdm9pZCogY29u
dmVydFRvU1ZHUE9EVHlwZUltcGwoVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlLCB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4pOwotCiAgICAgICAgIC8vIEZJWE1FOiBTZXBhcmF0ZSB0aGVzZSBjb25j
ZXJucyBmcm9tIFY4UHJveHk/CiAgICAgICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpDb250ZXh0PiBj
cmVhdGVOZXdDb250ZXh0KHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gZ2xvYmFsKTsKICAgICAgICAg
Ym9vbCBpbnN0YWxsRE9NV2luZG93KHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNvbnRleHQsIERP
TVdpbmRvdyogd2luZG93KTsKIAorICAgICAgICB2b2lkIGluaXRDb250ZXh0SWZOZWVkZWQoKTsK
KyAgICAgICAgRE9NV3JhcHBlck1hcDxOb2RlPiYgZG9tTm9kZU1hcCgpIHsgcmV0dXJuIG1fZG9t
Tm9kZU1hcDsgfQorICAgICAgICB2b2lkIHVwZGF0ZURvY3VtZW50V3JhcHBlcih2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gd3JhcHBlcik7CisKICAgICBwcml2YXRlOgogICAgICAgICBzdGF0aWMgY29u
c3QgY2hhcioga0NvbnRleHREZWJ1Z0RhdGFUeXBlOwogICAgICAgICBzdGF0aWMgY29uc3QgY2hh
cioga0NvbnRleHREZWJ1Z0RhdGFWYWx1ZTsKIAotICAgICAgICB2b2lkIGluaXRDb250ZXh0SWZO
ZWVkZWQoKTsKICAgICAgICAgdm9pZCBkaXNjb25uZWN0RXZlbnRMaXN0ZW5lcnMoKTsKICAgICAg
ICAgdm9pZCBzZXRTZWN1cml0eVRva2VuKCk7CiAgICAgICAgIHZvaWQgY2xlYXJEb2N1bWVudFdy
YXBwZXIoKTsKLSAgICAgICAgdm9pZCB1cGRhdGVEb2N1bWVudFdyYXBwZXIodjg6OkhhbmRsZTx2
ODo6VmFsdWU+IHdyYXBwZXIpOwogCiAgICAgICAgIC8vIFRoZSBKYXZhU2NyaXB0IHdyYXBwZXIg
Zm9yIHRoZSBkb2N1bWVudCBvYmplY3QgaXMgY2FjaGVkIG9uIHRoZSBnbG9iYWwKICAgICAgICAg
Ly8gb2JqZWN0IGZvciBmYXN0IGFjY2Vzcy4gVXBkYXRlRG9jdW1lbnRXcmFwcGVyQ2FjaGUgc2V0
cyB0aGUgd3JhcHBlcgpAQCAtNDgxLDUxICszODIsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
ICAgICAgICAgc3RhdGljIGJvb2wgY2FuQWNjZXNzUHJpdmF0ZShET01XaW5kb3cqKTsKIAotICAg
ICAgICAvLyBDaGVjayB3aGV0aGVyIGEgVjggdmFsdWUgaXMgYSBET00gRXZlbnQgd3JhcHBlci4K
LSAgICAgICAgc3RhdGljIGJvb2wgaXNET01FdmVudFdyYXBwZXIodjg6OkhhbmRsZTx2ODo6VmFs
dWU+KTsKLQotICAgICAgICBzdGF0aWMgdm9pZCogY29udmVydFRvTmF0aXZlT2JqZWN0SW1wbChW
OENsYXNzSW5kZXg6OlY4V3JhcHBlclR5cGUsIHY4OjpIYW5kbGU8djg6OlZhbHVlPik7Ci0KLSAg
ICAgICAgLy8gVGFrZSBDIHBvaW50ZXIgb3V0IG9mIGEgdjggd3JhcHBlci4KLSAgICAgICAgc3Rh
dGljIHZvaWQqIGV4dHJhY3RDUG9pbnRlckltcGwodjg6OkhhbmRsZTx2ODo6VmFsdWU+IG9iamVj
dCkKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKG9iamVjdC0+SXNOdW1iZXIoKSk7Ci0g
ICAgICAgICAgICBpbnQgYWRkciA9IG9iamVjdC0+SW50MzJWYWx1ZSgpOwotICAgICAgICAgICAg
cmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGFkZHIgPDwgMSk7Ci0gICAgICAgIH0KLQot
Ci0gICAgICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY29udmVydFN0eWxlU2hlZXRU
b1Y4T2JqZWN0KFN0eWxlU2hlZXQqKTsKLSAgICAgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZh
bHVlPiBjb252ZXJ0Q1NTVmFsdWVUb1Y4T2JqZWN0KENTU1ZhbHVlKik7Ci0gICAgICAgIHN0YXRp
YyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY29udmVydENTU1J1bGVUb1Y4T2JqZWN0KENTU1J1bGUq
KTsKLSAgICAgICAgLy8gUmV0dXJucyB0aGUgSlMgd3JhcHBlciBvZiBhIHdpbmRvdyBvYmplY3Qs
IGluaXRpYWxpemVzIHRoZSBlbnZpcm9ubWVudAotICAgICAgICAvLyBvZiB0aGUgd2luZG93IGZy
YW1lIGlmIG5lZWRlZC4KLSAgICAgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjb252
ZXJ0V2luZG93VG9WOE9iamVjdChET01XaW5kb3cqKTsKLQotI2lmIEVOQUJMRShTVkcpCi0gICAg
ICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY29udmVydFNWR0VsZW1lbnRJbnN0YW5j
ZVRvVjhPYmplY3QoU1ZHRWxlbWVudEluc3RhbmNlKik7Ci0gICAgICAgIHN0YXRpYyB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gY29udmVydFNWR09iamVjdFdpdGhDb250ZXh0VG9WOE9iamVjdChWOENs
YXNzSW5kZXg6OlY4V3JhcHBlclR5cGUsIHZvaWQqKTsKLSNlbmRpZgotCi0gICAgICAgIC8vIFNl
dCBoaWRkZW4gcmVmZXJlbmNlcyBpbiBhIERPTVdpbmRvdyBvYmplY3Qgb2YgYSBmcmFtZS4KLSAg
ICAgICAgc3RhdGljIHZvaWQgc2V0SGlkZGVuV2luZG93UmVmZXJlbmNlKEZyYW1lKiwgY29uc3Qg
aW50IGludGVybmFsSW5kZXgsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4pOwotCi0gICAgICAgIHN0
YXRpYyBWOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5cGUgaHRtbEVsZW1lbnRUeXBlKEhUTUxFbGVt
ZW50Kik7Ci0KLSAgICAgICAgLy8gVGhlIGZpcnN0IFY4V3JhcHBlclR5cGUgc3BlY2lmaWVzIHRo
ZSBmdW5jdGlvbiBkZXNjcmlwdG9yCi0gICAgICAgIC8vIHVzZWQgdG8gY3JlYXRlIEpTIG9iamVj
dC4gVGhlIHNlY29uZCBWOFdyYXBwZXJUeXBlIHNwZWNpZmllcwotICAgICAgICAvLyB0aGUgYWN0
dWFsIHR5cGUgb2YgdGhlIHZvaWQqIGZvciB0eXBlIGNhc3RpbmcuCi0gICAgICAgIC8vIEZvciBl
eGFtcGxlLCBhIEhUTUwgZWxlbWVudCBoYXMgSFRNTEVMRU1FTlQgZm9yIHRoZSBmaXJzdCBWOFdy
YXBwZXJUeXBlLCBidXQgYWx3YXlzCi0gICAgICAgIC8vIHVzZSBOT0RFIGFzIHRoZSBzZWNvbmQg
VjhXcmFwcGVyVHlwZS4gSlMgd3JhcHBlciBzdG9yZXMgdGhlIHNlY29uZAotICAgICAgICAvLyBW
OFdyYXBwZXJUeXBlIGFuZCB0aGUgdm9pZCogYXMgaW50ZXJuYWwgZmllbGRzLgotICAgICAgICBz
dGF0aWMgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IGluc3RhbnRpYXRlVjhPYmplY3QoVjhDbGFzc0lu
ZGV4OjpWOFdyYXBwZXJUeXBlIGRlc2NUeXBlLCBWOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5cGUg
Y3B0clR5cGUsIHZvaWQqIGltcGwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBpbnN0
YW50aWF0ZVY4T2JqZWN0KE5VTEwsIGRlc2NUeXBlLCBjcHRyVHlwZSwgaW1wbCk7Ci0gICAgICAg
IH0KLQotICAgICAgICBzdGF0aWMgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IGluc3RhbnRpYXRlVjhP
YmplY3QoVjhQcm94eSosIFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlwZSwgVjhDbGFzc0luZGV4
OjpWOFdyYXBwZXJUeXBlLCB2b2lkKik7Ci0KLQogICAgICAgICBzdGF0aWMgY29uc3QgY2hhciog
cmFuZ2VFeGNlcHRpb25OYW1lKGludCBleGNlcHRpb25Db2RlKTsKICAgICAgICAgc3RhdGljIGNv
bnN0IGNoYXIqIGV2ZW50RXhjZXB0aW9uTmFtZShpbnQgZXhjZXB0aW9uQ29kZSk7CiAgICAgICAg
IHN0YXRpYyBjb25zdCBjaGFyKiB4bWxIdHRwUmVxdWVzdEV4Y2VwdGlvbk5hbWUoaW50IGV4Y2Vw
dGlvbkNvZGUpOwpAQCAtNTM2LDcgKzM5Miw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICNlbmRp
ZgogCiAjaWYgRU5BQkxFKFNWRykKLSAgICAgICAgc3RhdGljIFY4Q2xhc3NJbmRleDo6VjhXcmFw
cGVyVHlwZSBzdmdFbGVtZW50VHlwZShTVkdFbGVtZW50Kik7CiAgICAgICAgIHN0YXRpYyBjb25z
dCBjaGFyKiBzdmdFeGNlcHRpb25OYW1lKGludCBleGNlcHRpb25Db2RlKTsKICNlbmRpZgogCkBA
IC01OTUsNiArNDUwLDE2MSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHN0YXRpYyBW
OEV4dGVuc2lvbkxpc3QgbV9leHRlbnNpb25zOwogICAgIH07CiAKKy8vIEJlZ2luIFY4RE9NV3Jh
cHBlci5oCisKKyAgICBjbGFzcyBWOERPTVdyYXBwZXIgeworICAgIHB1YmxpYzoKKyNpZm5kZWYg
TkRFQlVHCisgICAgICAgIC8vIENoZWNrcyBpZiBhIHY4IHZhbHVlIGNhbiBiZSBhIERPTSB3cmFw
cGVyCisgICAgICAgIHN0YXRpYyBib29sIG1heWJlRE9NV3JhcHBlcih2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4pOworI2VuZGlmCisKKyAgICAgICAgLy8gU2V0cyBjb250ZW50cyBvZiBhIERPTSB3cmFw
cGVyLgorICAgICAgICBzdGF0aWMgdm9pZCBzZXRET01XcmFwcGVyKHY4OjpIYW5kbGU8djg6Ok9i
amVjdD4sIGludCB0eXBlLCB2b2lkKiBwdHIpOworCisgICAgICAgIHN0YXRpYyB2ODo6SGFuZGxl
PHY4OjpPYmplY3Q+IGxvb2t1cERPTVdyYXBwZXIoVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBl
LCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4pOworCisgICAgICAgIC8vIEEgaGVscGVyIGZ1bmN0aW9u
IGV4dHJhY3QgbmF0aXZlIG9iamVjdCBwb2ludGVyIGZyb20gYSBET00gd3JhcHBlcgorICAgICAg
ICAvLyBhbmQgY2FzdCB0byB0aGUgc3BlY2lmaWVkIHR5cGUuCisgICAgICAgIHRlbXBsYXRlIDxj
bGFzcyBDPgorICAgICAgICBzdGF0aWMgQyogY29udmVydERPTVdyYXBwZXJUb05hdGl2ZSh2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4gb2JqZWN0KQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQo
bWF5YmVET01XcmFwcGVyKG9iamVjdCkpOworICAgICAgICAgICAgdjg6OkhhbmRsZTx2ODo6VmFs
dWU+IHB0ciA9IHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3Qob2JqZWN0KS0+R2V0SW50ZXJu
YWxGaWVsZChWOEN1c3RvbTo6a0RPTVdyYXBwZXJPYmplY3RJbmRleCk7CisgICAgICAgICAgICBy
ZXR1cm4gZXh0cmFjdENQb2ludGVyPEM+KHB0cik7CisgICAgICAgIH0KKworICAgICAgICAvLyBB
IGhlbHAgZnVuY3Rpb24gZXh0cmFjdCBhIG5vZGUgdHlwZSBwb2ludGVyIGZyb20gYSBET00gd3Jh
cHBlci4KKyAgICAgICAgLy8gV3JhcHBlZCBwb2ludGVyIG11c3QgYmUgY2FzdCB0byBOb2RlKiBm
aXJzdC4KKyAgICAgICAgc3RhdGljIHZvaWQqIGNvbnZlcnRET01XcmFwcGVyVG9Ob2RlSGVscGVy
KHY4OjpIYW5kbGU8djg6OlZhbHVlPik7CisKKyAgICAgICAgLy8gQ3JlYXRlIGEgVjggd3JhcHBl
ciBmb3IgYSBDIHBvaW50ZXIKKyAgICAgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB3
cmFwQ1BvaW50ZXIodm9pZCogY3B0cikKKyAgICAgICAgeworICAgICAgICAgICAgLy8gUmVwcmVz
ZW50IHZvaWQqIGFzIGludAorICAgICAgICAgICAgaW50IGFkZHIgPSByZWludGVycHJldF9jYXN0
PGludD4oY3B0cik7CisgICAgICAgICAgICBBU1NFUlQoIShhZGRyICYgMHgwMSkpOyAvLyBUaGUg
YWRkcmVzcyBtdXN0IGJlIGFsaWduZWQuCisgICAgICAgICAgICByZXR1cm4gdjg6OkludGVnZXI6
Ok5ldyhhZGRyID4+IDEpOworICAgICAgICB9CisKKyAgICAgICAgLy8gVGFrZSBDIHBvaW50ZXIg
b3V0IG9mIGEgdjggd3JhcHBlci4KKyAgICAgICAgdGVtcGxhdGUgPGNsYXNzIEM+CisgICAgICAg
IHN0YXRpYyBDKiBleHRyYWN0Q1BvaW50ZXIodjg6OkhhbmRsZTx2ODo6VmFsdWU+IG9iaikKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEMqPihleHRyYWN0Q1BvaW50
ZXJJbXBsKG9iaikpOworICAgICAgICB9CisKKyAgICAgICAgdGVtcGxhdGUgPGNsYXNzIEM+Cisg
ICAgICAgIHN0YXRpYyBDKiBjb252ZXJ0RE9NV3JhcHBlclRvTm9kZSh2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxD
Kj4oY29udmVydERPTVdyYXBwZXJUb05vZGVIZWxwZXIodmFsdWUpKTsKKyAgICAgICAgfQorCisg
ICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gY29udmVydFRvVjhPYmplY3QoVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlIHR5
cGUsIFBhc3NSZWZQdHI8VD4gaW1wKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gY29u
dmVydFRvVjhPYmplY3QodHlwZSwgaW1wLmdldCgpKTsKKyAgICAgICAgfQorCisgICAgICAgIHN0
YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY29udmVydFRvVjhPYmplY3QoVjhDbGFzc0luZGV4
OjpWOFdyYXBwZXJUeXBlLCB2b2lkKik7CisKKyAgICAgICAgLy8gRmFzdC1wYXRoIGZvciBOb2Rl
IG9iamVjdHMuCisgICAgICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY29udmVydE5v
ZGVUb1Y4T2JqZWN0KE5vZGUqKTsKKworICAgICAgICB0ZW1wbGF0ZSA8Y2xhc3MgQz4KKyAgICAg
ICAgc3RhdGljIEMqIGNvbnZlcnRUb05hdGl2ZU9iamVjdChWOENsYXNzSW5kZXg6OlY4V3JhcHBl
clR5cGUgdHlwZSwgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IG9iamVjdCkKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEMqPihjb252ZXJ0VG9OYXRpdmVPYmplY3RJbXBs
KHR5cGUsIG9iamVjdCkpOworICAgICAgICB9CisKKyAgICAgICAgc3RhdGljIFY4Q2xhc3NJbmRl
eDo6VjhXcmFwcGVyVHlwZSBkb21XcmFwcGVyVHlwZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+KTsK
KworICAgICAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNvbnZlcnRFdmVudFRvVjhP
YmplY3QoRXZlbnQqKTsKKworICAgICAgICBzdGF0aWMgRXZlbnQqIGNvbnZlcnRUb05hdGl2ZUV2
ZW50KHY4OjpIYW5kbGU8djg6OlZhbHVlPiBqc0V2ZW50KQorICAgICAgICB7CisgICAgICAgICAg
ICBpZiAoIWlzRE9NRXZlbnRXcmFwcGVyKGpzRXZlbnQpKQorICAgICAgICAgICAgICAgIHJldHVy
biAwOworICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRET01XcmFwcGVyVG9OYXRpdmU8RXZlbnQ+
KGpzRXZlbnQpOworICAgICAgICB9CisKKyAgICAgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZh
bHVlPiBjb252ZXJ0RXZlbnRUYXJnZXRUb1Y4T2JqZWN0KEV2ZW50VGFyZ2V0Kik7CisgICAgICAg
IC8vIFdyYXAgYW5kIHVud3JhcCBKUyBldmVudCBsaXN0ZW5lcnMuCisgICAgICAgIHN0YXRpYyB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY29udmVydEV2ZW50TGlzdGVuZXJUb1Y4T2JqZWN0KEV2ZW50
TGlzdGVuZXIqKTsKKworICAgICAgICAvLyBET01JbXBsZW1lbnRhdGlvbiBpcyBhIHNpbmdsZXRv
biBhbmQgaXQgaXMgaGFuZGxlZCBpbiBhIHNwZWNpYWwKKyAgICAgICAgLy8gd2F5LiBBIHdyYXBw
ZXIgaXMgZ2VuZXJhdGVkIHBlciBkb2N1bWVudCBhbmQgc3RvcmVkIGluIGFuCisgICAgICAgIC8v
IGludGVybmFsIGZpZWxkIG9mIHRoZSBkb2N1bWVudC4KKyAgICAgICAgc3RhdGljIHY4OjpIYW5k
bGU8djg6OlZhbHVlPiBjb252ZXJ0RE9NSW1wbGVtZW50YXRpb25Ub1Y4T2JqZWN0KERPTUltcGxl
bWVudGF0aW9uKik7CisKKyAgICAgICAgLy8gV3JhcCBKUyBub2RlIGZpbHRlciBpbiBDKysuCisg
ICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPE5vZGVGaWx0ZXI+IHdyYXBOYXRpdmVOb2RlRmlsdGVy
KHY4OjpIYW5kbGU8djg6OlZhbHVlPik7CisKKyAgICAgICAgc3RhdGljIHY4OjpQZXJzaXN0ZW50
PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBnZXRUZW1wbGF0ZShWOENsYXNzSW5kZXg6OlY4V3JhcHBl
clR5cGUpOworCisgICAgICAgIC8vIENoZWNrcyB3aGV0aGVyIGEgRE9NIG9iamVjdCBoYXMgYSBK
UyB3cmFwcGVyLgorICAgICAgICBzdGF0aWMgYm9vbCBkb21PYmplY3RIYXNKU1dyYXBwZXIodm9p
ZCopOworICAgICAgICAvLyBTZXQgSlMgd3JhcHBlciBvZiBhIERPTSBvYmplY3QsIHRoZSBjYWxs
ZXIgaW4gY2hhcmdlIG9mIGluY3JlYXNlIHJlZi4KKyAgICAgICAgc3RhdGljIHZvaWQgc2V0SlNX
cmFwcGVyRm9yRE9NT2JqZWN0KHZvaWQqLCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0Pik7Cisg
ICAgICAgIHN0YXRpYyB2b2lkIHNldEpTV3JhcHBlckZvckFjdGl2ZURPTU9iamVjdCh2b2lkKiwg
djg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4pOworICAgICAgICBzdGF0aWMgdm9pZCBzZXRKU1dy
YXBwZXJGb3JET01Ob2RlKE5vZGUqLCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0Pik7CisKKyAg
ICAgICAgLy8gQ2hlY2sgd2hldGhlciBhIFY4IHZhbHVlIGlzIGEgd3JhcHBlciBvZiB0eXBlIHxj
bGFzc1R5cGV8LgorICAgICAgICBzdGF0aWMgYm9vbCBpc1dyYXBwZXJPZlR5cGUodjg6OkhhbmRs
ZTx2ODo6VmFsdWU+LCBWOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5cGUpOworCisgICAgICAgIHN0
YXRpYyB2b2lkKiBjb252ZXJ0VG9TVkdQT0RUeXBlSW1wbChWOENsYXNzSW5kZXg6OlY4V3JhcHBl
clR5cGUsIHY4OjpIYW5kbGU8djg6OlZhbHVlPik7CisKKyAgICAgICAgLy8gQ2hlY2sgd2hldGhl
ciBhIFY4IHZhbHVlIGlzIGEgRE9NIEV2ZW50IHdyYXBwZXIuCisgICAgICAgIHN0YXRpYyBib29s
IGlzRE9NRXZlbnRXcmFwcGVyKHY4OjpIYW5kbGU8djg6OlZhbHVlPik7CisKKyAgICAgICAgc3Rh
dGljIHZvaWQqIGNvbnZlcnRUb05hdGl2ZU9iamVjdEltcGwoVjhDbGFzc0luZGV4OjpWOFdyYXBw
ZXJUeXBlLCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4pOworCisgICAgICAgIHN0YXRpYyB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gY29udmVydFN0eWxlU2hlZXRUb1Y4T2JqZWN0KFN0eWxlU2hlZXQqKTsK
KyAgICAgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjb252ZXJ0Q1NTVmFsdWVUb1Y4
T2JqZWN0KENTU1ZhbHVlKik7CisgICAgICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4g
Y29udmVydENTU1J1bGVUb1Y4T2JqZWN0KENTU1J1bGUqKTsKKyAgICAgICAgLy8gUmV0dXJucyB0
aGUgSlMgd3JhcHBlciBvZiBhIHdpbmRvdyBvYmplY3QsIGluaXRpYWxpemVzIHRoZSBlbnZpcm9u
bWVudAorICAgICAgICAvLyBvZiB0aGUgd2luZG93IGZyYW1lIGlmIG5lZWRlZC4KKyAgICAgICAg
c3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjb252ZXJ0V2luZG93VG9WOE9iamVjdChET01X
aW5kb3cqKTsKKworI2lmIEVOQUJMRShTVkcpCisgICAgICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gY29udmVydFNWR0VsZW1lbnRJbnN0YW5jZVRvVjhPYmplY3QoU1ZHRWxlbWVudElu
c3RhbmNlKik7CisgICAgICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY29udmVydFNW
R09iamVjdFdpdGhDb250ZXh0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5cGUs
IHZvaWQqKTsKKyNlbmRpZgorCisgICAgcHJpdmF0ZToKKyAgICAgICAgLy8gU2V0IGhpZGRlbiBy
ZWZlcmVuY2VzIGluIGEgRE9NV2luZG93IG9iamVjdCBvZiBhIGZyYW1lLgorICAgICAgICBzdGF0
aWMgdm9pZCBzZXRIaWRkZW5XaW5kb3dSZWZlcmVuY2UoRnJhbWUqLCBjb25zdCBpbnQgaW50ZXJu
YWxJbmRleCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0Pik7CisKKyAgICAgICAgLy8gVGFrZSBDIHBv
aW50ZXIgb3V0IG9mIGEgdjggd3JhcHBlci4KKyAgICAgICAgc3RhdGljIHZvaWQqIGV4dHJhY3RD
UG9pbnRlckltcGwodjg6OkhhbmRsZTx2ODo6VmFsdWU+IG9iamVjdCkKKyAgICAgICAgeworICAg
ICAgICAgICAgQVNTRVJUKG9iamVjdC0+SXNOdW1iZXIoKSk7CisgICAgICAgICAgICBpbnQgYWRk
ciA9IG9iamVjdC0+SW50MzJWYWx1ZSgpOworICAgICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0
X2Nhc3Q8dm9pZCo+KGFkZHIgPDwgMSk7CisgICAgICAgIH0KKworICAgICAgICBzdGF0aWMgVjhD
bGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlIGh0bWxFbGVtZW50VHlwZShIVE1MRWxlbWVudCopOwor
I2lmIEVOQUJMRShTVkcpCisgICAgICAgIHN0YXRpYyBWOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5
cGUgc3ZnRWxlbWVudFR5cGUoU1ZHRWxlbWVudCopOworI2VuZGlmCisKKyAgICAgICAgLy8gVGhl
IGZpcnN0IFY4V3JhcHBlclR5cGUgc3BlY2lmaWVzIHRoZSBmdW5jdGlvbiBkZXNjcmlwdG9yCisg
ICAgICAgIC8vIHVzZWQgdG8gY3JlYXRlIEpTIG9iamVjdC4gVGhlIHNlY29uZCBWOFdyYXBwZXJU
eXBlIHNwZWNpZmllcworICAgICAgICAvLyB0aGUgYWN0dWFsIHR5cGUgb2YgdGhlIHZvaWQqIGZv
ciB0eXBlIGNhc3RpbmcuCisgICAgICAgIC8vIEZvciBleGFtcGxlLCBhIEhUTUwgZWxlbWVudCBo
YXMgSFRNTEVMRU1FTlQgZm9yIHRoZSBmaXJzdCBWOFdyYXBwZXJUeXBlLCBidXQgYWx3YXlzCisg
ICAgICAgIC8vIHVzZSBOT0RFIGFzIHRoZSBzZWNvbmQgVjhXcmFwcGVyVHlwZS4gSlMgd3JhcHBl
ciBzdG9yZXMgdGhlIHNlY29uZAorICAgICAgICAvLyBWOFdyYXBwZXJUeXBlIGFuZCB0aGUgdm9p
ZCogYXMgaW50ZXJuYWwgZmllbGRzLgorICAgICAgICBzdGF0aWMgdjg6OkxvY2FsPHY4OjpPYmpl
Y3Q+IGluc3RhbnRpYXRlVjhPYmplY3QoVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlIGRlc2NU
eXBlLCBWOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5cGUgY3B0clR5cGUsIHZvaWQqIGltcGwpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpbnN0YW50aWF0ZVY4T2JqZWN0KE5VTEwsIGRl
c2NUeXBlLCBjcHRyVHlwZSwgaW1wbCk7CisgICAgICAgIH0KKworICAgICAgICBzdGF0aWMgdjg6
OkxvY2FsPHY4OjpPYmplY3Q+IGluc3RhbnRpYXRlVjhPYmplY3QoVjhQcm94eSosIFY4Q2xhc3NJ
bmRleDo6VjhXcmFwcGVyVHlwZSwgVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlLCB2b2lkKik7
CisKKyAgICB9OworCisvLyBFbmQgVjhET01XcmFwcGVyLmgKKwogICAgIHRlbXBsYXRlIDxpbnQg
dGFnLCB0eXBlbmFtZSBUPgogICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOFByb3h5Ojpjb25z
dHJ1Y3RET01PYmplY3QoY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKICAgICB7CkBAIC02MDQs
OSArNjE0LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAvLyBOb3RlOiBpdCdzIE9L
IHRvIGxldCB0aGlzIFJlZlB0ciBnbyBvdXQgb2Ygc2NvcGUgYmVjYXVzZSB3ZSBhbHNvIGNhbGwK
ICAgICAgICAgLy8gU2V0RE9NV3JhcHBlcigpLCB3aGljaCBlZmZlY3RpdmVseSBob2xkcyBhIHJl
ZmVyZW5jZSB0byBvYmouCiAgICAgICAgIFJlZlB0cjxUPiBvYmogPSBUOjpjcmVhdGUoKTsKLSAg
ICAgICAgVjhQcm94eTo6c2V0RE9NV3JhcHBlcihhcmdzLkhvbGRlcigpLCB0YWcsIG9iai5nZXQo
KSk7CisgICAgICAgIFY4RE9NV3JhcHBlcjo6c2V0RE9NV3JhcHBlcihhcmdzLkhvbGRlcigpLCB0
YWcsIG9iai5nZXQoKSk7CiAgICAgICAgIG9iai0+cmVmKCk7Ci0gICAgICAgIFY4UHJveHk6OnNl
dEpTV3JhcHBlckZvckRPTU9iamVjdChvYmouZ2V0KCksIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmpl
Y3Q+OjpOZXcoYXJncy5Ib2xkZXIoKSkpOworICAgICAgICBWOERPTVdyYXBwZXI6OnNldEpTV3Jh
cHBlckZvckRPTU9iamVjdChvYmouZ2V0KCksIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+OjpO
ZXcoYXJncy5Ib2xkZXIoKSkpOwogICAgICAgICByZXR1cm4gYXJncy5Ib2xkZXIoKTsKICAgICB9
CiAKQEAgLTY0Myw3ICs2NTMsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgdGVtcGxhdGUg
PGNsYXNzIFQ+IGlubGluZSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHRvVjgoUGFzc1JlZlB0cjxU
PiBvYmplY3QsIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBob2xkZXIpCiAgICAgewogICAgICAgICBv
YmplY3QtPnJlZigpOwotICAgICAgICBWOFByb3h5OjpzZXRKU1dyYXBwZXJGb3JET01PYmplY3Qo
b2JqZWN0LmdldCgpLCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0Pjo6TmV3KGhvbGRlcikpOwor
ICAgICAgICBWOERPTVdyYXBwZXI6OnNldEpTV3JhcHBlckZvckRPTU9iamVjdChvYmplY3QuZ2V0
KCksIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+OjpOZXcoaG9sZGVyKSk7CiAgICAgICAgIHJl
dHVybiBob2xkZXI7CiAgICAgfQogCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4U1ZHUE9E
VHlwZVdyYXBwZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4U1ZHUE9E
VHlwZVdyYXBwZXIuaAkocmV2aXNpb24gNDU2NTApCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4
U1ZHUE9EVHlwZVdyYXBwZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzYzLDcgKzM2Myw3IEBAIHB1
YmxpYzoKIHRlbXBsYXRlIDxjbGFzcyBQPgogUCBWOFNWR1BPRFR5cGVVdGlsOjp0b1NWR1BPRFR5
cGUoVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlIHR5cGUsIHY4OjpIYW5kbGU8djg6OlZhbHVl
PiBvYmplY3QsIGJvb2wmIG9rKQogewotICAgIHZvaWQgKndyYXBwZXIgPSBWOFByb3h5Ojpjb252
ZXJ0VG9TVkdQT0RUeXBlSW1wbCh0eXBlLCBvYmplY3QpOworICAgIHZvaWQgKndyYXBwZXIgPSBW
OERPTVdyYXBwZXI6OmNvbnZlcnRUb1NWR1BPRFR5cGVJbXBsKHR5cGUsIG9iamVjdCk7CiAgICAg
aWYgKHdyYXBwZXIgPT0gTlVMTCkgewogICAgICAgICBvayA9IGZhbHNlOwogICAgICAgICByZXR1
cm4gUCgpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9Xb3JrZXJDb250ZXh0RXhlY3V0aW9u
UHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvV29ya2VyQ29udGV4
dEV4ZWN1dGlvblByb3h5LmNwcAkocmV2aXNpb24gNDU2NTApCisrKyBXZWJDb3JlL2JpbmRpbmdz
L3Y4L1dvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEy
MiwxMSArMTIyLDExIEBAIFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eSogV29ya2VyQ29udGUK
IHsKICAgICB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjb250ZXh0ID0gdjg6OkNvbnRleHQ6Okdl
dEN1cnJlbnQoKTsKICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGdsb2JhbCA9IGNvbnRleHQt
Pkdsb2JhbCgpOwotICAgIGdsb2JhbCA9IFY4UHJveHk6Omxvb2t1cERPTVdyYXBwZXIoVjhDbGFz
c0luZGV4OjpXT1JLRVJDT05URVhULCBnbG9iYWwpOworICAgIGdsb2JhbCA9IFY4RE9NV3JhcHBl
cjo6bG9va3VwRE9NV3JhcHBlcihWOENsYXNzSW5kZXg6OldPUktFUkNPTlRFWFQsIGdsb2JhbCk7
CiAgICAgLy8gUmV0dXJuIDAgaWYgdGhlIGN1cnJlbnQgZXhlY3V0aW5nIGNvbnRleHQgaXMgbm90
IHRoZSB3b3JrZXIgY29udGV4dC4KICAgICBpZiAoZ2xvYmFsLklzRW1wdHkoKSkKICAgICAgICAg
cmV0dXJuIDA7Ci0gICAgV29ya2VyQ29udGV4dCogd29ya2VyQ29udGV4dCA9IFY4UHJveHk6OmNv
bnZlcnRUb05hdGl2ZU9iamVjdDxXb3JrZXJDb250ZXh0PihWOENsYXNzSW5kZXg6OldPUktFUkNP
TlRFWFQsIGdsb2JhbCk7CisgICAgV29ya2VyQ29udGV4dCogd29ya2VyQ29udGV4dCA9IFY4RE9N
V3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PFdvcmtlckNvbnRleHQ+KFY4Q2xhc3NJbmRl
eDo6V09SS0VSQ09OVEVYVCwgZ2xvYmFsKTsKICAgICByZXR1cm4gd29ya2VyQ29udGV4dC0+c2Ny
aXB0KCktPnByb3h5KCk7CiB9CiAKQEAgLTE3NCw5ICsxNzQsOSBAQCB2b2lkIFdvcmtlckNvbnRl
eHRFeGVjdXRpb25Qcm94eTo6aW5pdENvCiAgICAgfQogCiAgICAgLy8gV3JhcCB0aGUgb2JqZWN0
LgotICAgIFY4UHJveHk6OnNldERPTVdyYXBwZXIoanNXb3JrZXJDb250ZXh0LCBWOENsYXNzSW5k
ZXg6OlRvSW50KFY4Q2xhc3NJbmRleDo6V09SS0VSQ09OVEVYVCksIG1fd29ya2VyQ29udGV4dCk7
CisgICAgVjhET01XcmFwcGVyOjpzZXRET01XcmFwcGVyKGpzV29ya2VyQ29udGV4dCwgVjhDbGFz
c0luZGV4OjpUb0ludChWOENsYXNzSW5kZXg6OldPUktFUkNPTlRFWFQpLCBtX3dvcmtlckNvbnRl
eHQpOwogCi0gICAgVjhQcm94eTo6c2V0SlNXcmFwcGVyRm9yRE9NT2JqZWN0KG1fd29ya2VyQ29u
dGV4dCwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD46Ok5ldyhqc1dvcmtlckNvbnRleHQpKTsK
KyAgICBWOERPTVdyYXBwZXI6OnNldEpTV3JhcHBlckZvckRPTU9iamVjdChtX3dvcmtlckNvbnRl
eHQsIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+OjpOZXcoanNXb3JrZXJDb250ZXh0KSk7CiAg
ICAgbV93b3JrZXJDb250ZXh0LT5yZWYoKTsKIAogICAgIC8vIEluc2VydCB0aGUgb2JqZWN0IGlu
c3RhbmNlIGFzIHRoZSBwcm90b3R5cGUgb2YgdGhlIHNoYWRvdyBvYmplY3QuCkBAIC0xOTEsNyAr
MTkxLDcgQEAgdjg6OkxvY2FsPHY4OjpGdW5jdGlvbj4gV29ya2VyQ29udGV4dEV4ZQogICAgIC8v
IEVudGVyIHRoZSBjb250ZXh0IG9mIHRoZSBwcm94eSB0byBtYWtlIHN1cmUgdGhhdCB0aGUgZnVu
Y3Rpb24gaXMKICAgICAvLyBjb25zdHJ1Y3RlZCBpbiB0aGUgY29udGV4dCBjb3JyZXNwb25kaW5n
IHRvIHRoaXMgcHJveHkuCiAgICAgdjg6OkNvbnRleHQ6OlNjb3BlIHNjb3BlKG1fY29udGV4dCk7
Ci0gICAgdjg6OkhhbmRsZTx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gZnVuY3Rpb25UZW1wbGF0ZSA9
IFY4UHJveHk6OmdldFRlbXBsYXRlKHR5cGUpOworICAgIHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9u
VGVtcGxhdGU+IGZ1bmN0aW9uVGVtcGxhdGUgPSBWOERPTVdyYXBwZXI6OmdldFRlbXBsYXRlKHR5
cGUpOwogCiAgICAgLy8gR2V0dGluZyB0aGUgZnVuY3Rpb24gbWlnaHQgZmFpbCBpZiB3ZSdyZSBy
dW5uaW5nIG91dCBvZiBzdGFjayBvciBtZW1vcnkuCiAgICAgdjg6OlRyeUNhdGNoIHRyeUNhdGNo
OwpAQCAtMjE5LDcgKzIxOSw3IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBXb3JrZXJDb250ZXh0
RXhlY3UKICAgICAgICAgaWYgKCFvYmplY3QuSXNFbXB0eSgpKQogICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8V29ya2VyKj4oaW1wbCktPnJlZigpOwogICAgICAgICByZXN1bHQgPSB2ODo6UGVyc2lz
dGVudDx2ODo6T2JqZWN0Pjo6TmV3KG9iamVjdCk7Ci0gICAgICAgIFY4UHJveHk6OnNldEpTV3Jh
cHBlckZvckRPTU9iamVjdChpbXBsLCByZXN1bHQpOworICAgICAgICBWOERPTVdyYXBwZXI6OnNl
dEpTV3JhcHBlckZvckRPTU9iamVjdChpbXBsLCByZXN1bHQpOwogICAgICAgICByZXR1cm4gcmVz
dWx0OwogICAgIH0KIApAQCAtMjUxLDcgKzI1MSw3IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBX
b3JrZXJDb250ZXh0RXhlY3UKICAgICAgICAgICAgICAgICBBU1NFUlQoZmFsc2UpOwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgcmVzdWx0ID0gdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD46
Ok5ldyhvYmplY3QpOwotICAgICAgICAgICAgVjhQcm94eTo6c2V0SlNXcmFwcGVyRm9yRE9NT2Jq
ZWN0KGltcGwsIHJlc3VsdCk7CisgICAgICAgICAgICBWOERPTVdyYXBwZXI6OnNldEpTV3JhcHBl
ckZvckRPTU9iamVjdChpbXBsLCByZXN1bHQpOwogICAgICAgICB9CiAgICAgfQogICAgIHJldHVy
biByZXN1bHQ7CkBAIC0yNzksNyArMjc5LDcgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFdvcmtl
ckNvbnRleHRFeGVjdQogICAgIH0KIAogICAgIGV2ZW50LT5yZWYoKTsgIC8vIGZhc3QgcmVmCi0g
ICAgVjhQcm94eTo6c2V0SlNXcmFwcGVyRm9yRE9NT2JqZWN0KGV2ZW50LCB2ODo6UGVyc2lzdGVu
dDx2ODo6T2JqZWN0Pjo6TmV3KHJlc3VsdCkpOworICAgIFY4RE9NV3JhcHBlcjo6c2V0SlNXcmFw
cGVyRm9yRE9NT2JqZWN0KGV2ZW50LCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0Pjo6TmV3KHJl
c3VsdCkpOwogCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTMyNSwxMiArMzI1LDEyIEBAIHY4
OjpMb2NhbDx2ODo6T2JqZWN0PiBXb3JrZXJDb250ZXh0RXhlY3UKICAgICBpZiAocHJveHkpCiAg
ICAgICAgIGZ1bmN0aW9uID0gcHJveHktPkdldENvbnN0cnVjdG9yKGRlc2NUeXBlKTsKICAgICBl
bHNlCi0gICAgICAgIGZ1bmN0aW9uID0gVjhQcm94eTo6Z2V0VGVtcGxhdGUoZGVzY1R5cGUpLT5H
ZXRGdW5jdGlvbigpOworICAgICAgICBmdW5jdGlvbiA9IFY4RE9NV3JhcHBlcjo6Z2V0VGVtcGxh
dGUoZGVzY1R5cGUpLT5HZXRGdW5jdGlvbigpOwogCiAgICAgdjg6OkxvY2FsPHY4OjpPYmplY3Q+
IGluc3RhbmNlID0gU2FmZUFsbG9jYXRpb246Om5ld0luc3RhbmNlKGZ1bmN0aW9uKTsKICAgICBp
ZiAoIWluc3RhbmNlLklzRW1wdHkoKSkgewogICAgICAgICAvLyBBdm9pZCBzZXR0aW5nIHRoZSBE
T00gd3JhcHBlciBmb3IgZmFpbGVkIGFsbG9jYXRpb25zLgotICAgICAgICBWOFByb3h5OjpzZXRE
T01XcmFwcGVyKGluc3RhbmNlLCBWOENsYXNzSW5kZXg6OlRvSW50KGNwdHJUeXBlKSwgaW1wbCk7
CisgICAgICAgIFY4RE9NV3JhcHBlcjo6c2V0RE9NV3JhcHBlcihpbnN0YW5jZSwgVjhDbGFzc0lu
ZGV4OjpUb0ludChjcHRyVHlwZSksIGltcGwpOwogICAgIH0KICAgICByZXR1cm4gaW5zdGFuY2U7
CiB9CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEF0dHJDdXN0b20uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4QXR0ckN1c3RvbS5jcHAJ
KHJldmlzaW9uIDQ1NjUwKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhBdHRyQ3Vz
dG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNyBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIEFDQ0VTU09SX1NFVFRFUihBdHRyVmFsdWUpCiB7Ci0gICAgQXR0ciogaW1wID0gVjhQ
cm94eTo6Y29udmVydERPTVdyYXBwZXJUb05vZGU8QXR0cj4oaW5mby5Ib2xkZXIoKSk7CisgICAg
QXR0ciogaW1wID0gVjhET01XcmFwcGVyOjpjb252ZXJ0RE9NV3JhcHBlclRvTm9kZTxBdHRyPihp
bmZvLkhvbGRlcigpKTsKICAgICBTdHJpbmcgYXR0clZhbHVlID0gdG9XZWJDb3JlU3RyaW5nV2l0
aE51bGxDaGVjayh2YWx1ZSk7CiAgICAgRWxlbWVudCogb3duZXJFbGVtZW50ID0gaW1wLT5vd25l
ckVsZW1lbnQoKTsKIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDU1NTdHls
ZURlY2xhcmF0aW9uQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOENTU1N0eWxlRGVjbGFyYXRpb25DdXN0b20uY3BwCShyZXZpc2lvbiA0NTY1MCkK
KysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q1NTU3R5bGVEZWNsYXJhdGlvbkN1c3Rv
bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2MSw3ICsxNjEsNyBAQCBOQU1FRF9QUk9QRVJUWV9H
RVRURVIoQ1NTU3R5bGVEZWNsYXJhdGlvCiAKICAgICAvLyBTZWFyY2ggdGhlIHN0eWxlIGRlY2xh
cmF0aW9uLgogICAgIENTU1N0eWxlRGVjbGFyYXRpb24qIGltcCA9Ci0gICAgICAgIFY4UHJveHk6
OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxDU1NTdHlsZURlY2xhcmF0aW9uPihWOENsYXNzSW5kZXg6
OkNTU1NUWUxFREVDTEFSQVRJT04sIGluZm8uSG9sZGVyKCkpOworICAgICAgICBWOERPTVdyYXBw
ZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxDU1NTdHlsZURlY2xhcmF0aW9uPihWOENsYXNzSW5k
ZXg6OkNTU1NUWUxFREVDTEFSQVRJT04sIGluZm8uSG9sZGVyKCkpOwogICAgIENTU1Byb3BlcnR5
SW5mbyogcHJvcEluZm8gPSBjc3NQcm9wZXJ0eUluZm8obmFtZSk7CiAKICAgICAvLyBEbyBub3Qg
aGFuZGxlIG5vbi1wcm9wZXJ0eSBuYW1lcy4KQEAgLTE5NSw3ICsxOTUsNyBAQCBOQU1FRF9QUk9Q
RVJUWV9TRVRURVIoQ1NTU3R5bGVEZWNsYXJhdGlvCiB7CiAgICAgSU5DX1NUQVRTKCJET00uQ1NT
U3R5bGVEZWNsYXJhdGlvbi5OYW1lZFByb3BlcnR5U2V0dGVyIik7CiAgICAgQ1NTU3R5bGVEZWNs
YXJhdGlvbiogaW1wID0KLSAgICAgICAgVjhQcm94eTo6Y29udmVydFRvTmF0aXZlT2JqZWN0PENT
U1N0eWxlRGVjbGFyYXRpb24+KAorICAgICAgICBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2
ZU9iamVjdDxDU1NTdHlsZURlY2xhcmF0aW9uPigKICAgICAgICAgICAgIFY4Q2xhc3NJbmRleDo6
Q1NTU1RZTEVERUNMQVJBVElPTiwgaW5mby5Ib2xkZXIoKSk7CiAgICAgQ1NTUHJvcGVydHlJbmZv
KiBwcm9wSW5mbyA9IGNzc1Byb3BlcnR5SW5mbyhuYW1lKTsKICAgICBpZiAoIXByb3BJbmZvKQpJ
bmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDYW52YXNQaXhlbEFycmF5Q3VzdG9t
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENhbnZhc1Bp
eGVsQXJyYXlDdXN0b20uY3BwCShyZXZpc2lvbiA0NTY1MCkKKysrIFdlYkNvcmUvYmluZGluZ3Mv
djgvY3VzdG9tL1Y4Q2FudmFzUGl4ZWxBcnJheUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQxLDcgKzQxLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogSU5ERVhFRF9QUk9QRVJUWV9HRVRU
RVIoQ2FudmFzUGl4ZWxBcnJheSkKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5DYW52YXNQaXhlbEFy
cmF5LkluZGV4ZWRQcm9wZXJ0eUdldHRlciIpOwotICAgIENhbnZhc1BpeGVsQXJyYXkqIHBpeGVs
QnVmZmVyID0gVjhQcm94eTo6Y29udmVydFRvTmF0aXZlT2JqZWN0PENhbnZhc1BpeGVsQXJyYXk+
KFY4Q2xhc3NJbmRleDo6Q0FOVkFTUElYRUxBUlJBWSwgaW5mby5Ib2xkZXIoKSk7CisgICAgQ2Fu
dmFzUGl4ZWxBcnJheSogcGl4ZWxCdWZmZXIgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2
ZU9iamVjdDxDYW52YXNQaXhlbEFycmF5PihWOENsYXNzSW5kZXg6OkNBTlZBU1BJWEVMQVJSQVks
IGluZm8uSG9sZGVyKCkpOwogCiAgICAgaWYgKChpbmRleCA8IDApIHx8IChpbmRleCA+PSBwaXhl
bEJ1ZmZlci0+bGVuZ3RoKCkpKQogICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwpAQCAt
NTUsNyArNTUsNyBAQCBJTkRFWEVEX1BST1BFUlRZX0dFVFRFUihDYW52YXNQaXhlbEFycmF5CiBJ
TkRFWEVEX1BST1BFUlRZX1NFVFRFUihDYW52YXNQaXhlbEFycmF5KQogewogICAgIElOQ19TVEFU
UygiRE9NLkNhbnZhc1BpeGVsQXJyYXkuSW5kZXhlZFByb3BlcnR5U2V0dGVyIik7Ci0gICAgQ2Fu
dmFzUGl4ZWxBcnJheSogcGl4ZWxCdWZmZXIgPSBWOFByb3h5Ojpjb252ZXJ0VG9OYXRpdmVPYmpl
Y3Q8Q2FudmFzUGl4ZWxBcnJheT4oVjhDbGFzc0luZGV4OjpDQU5WQVNQSVhFTEFSUkFZLCBpbmZv
LkhvbGRlcigpKTsKKyAgICBDYW52YXNQaXhlbEFycmF5KiBwaXhlbEJ1ZmZlciA9IFY4RE9NV3Jh
cHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PENhbnZhc1BpeGVsQXJyYXk+KFY4Q2xhc3NJbmRl
eDo6Q0FOVkFTUElYRUxBUlJBWSwgaW5mby5Ib2xkZXIoKSk7CiAKICAgICBpZiAoKGluZGV4ID49
IDApICYmIChpbmRleCA8IHBpeGVsQnVmZmVyLT5sZW5ndGgoKSkpCiAgICAgICAgIHBpeGVsQnVm
ZmVyLT5zZXQoaW5kZXgsIHZhbHVlLT5OdW1iZXJWYWx1ZSgpKTsKSW5kZXg6IFdlYkNvcmUvYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyREN1c3RvbS5jcHAJKHJldmlzaW9uIDQ1NjUwKQorKysgV2ViQ29yZS9iaW5kaW5ncy92
OC9jdXN0b20vVjhDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01MCwxMCArNTAsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogc3RhdGljIHY4OjpI
YW5kbGU8djg6OlZhbHVlPiB0b1Y4KENhbnZhc1N0eWxlKiBzdHlsZSkKIHsKICAgICBpZiAoc3R5
bGUtPmNhbnZhc0dyYWRpZW50KCkpCi0gICAgICAgIHJldHVybiBWOFByb3h5Ojpjb252ZXJ0VG9W
OE9iamVjdChWOENsYXNzSW5kZXg6OkNBTlZBU0dSQURJRU5ULCBzdHlsZS0+Y2FudmFzR3JhZGll
bnQoKSk7CisgICAgICAgIHJldHVybiBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb1Y4T2JqZWN0KFY4
Q2xhc3NJbmRleDo6Q0FOVkFTR1JBRElFTlQsIHN0eWxlLT5jYW52YXNHcmFkaWVudCgpKTsKIAog
ICAgIGlmIChzdHlsZS0+Y2FudmFzUGF0dGVybigpKQotICAgICAgICByZXR1cm4gVjhQcm94eTo6
Y29udmVydFRvVjhPYmplY3QoVjhDbGFzc0luZGV4OjpDQU5WQVNQQVRURVJOLCBzdHlsZS0+Y2Fu
dmFzUGF0dGVybigpKTsKKyAgICAgICAgcmV0dXJuIFY4RE9NV3JhcHBlcjo6Y29udmVydFRvVjhP
YmplY3QoVjhDbGFzc0luZGV4OjpDQU5WQVNQQVRURVJOLCBzdHlsZS0+Y2FudmFzUGF0dGVybigp
KTsKIAogICAgIHJldHVybiB2OFN0cmluZyhzdHlsZS0+Y29sb3IoKSk7CiB9CkBAIC02NCwzNSAr
NjQsMzUgQEAgc3RhdGljIFBhc3NSZWZQdHI8Q2FudmFzU3R5bGU+IHRvQ2FudmFzUwogICAgICAg
ICByZXR1cm4gQ2FudmFzU3R5bGU6OmNyZWF0ZSh0b1dlYkNvcmVTdHJpbmcodmFsdWUpKTsKIAog
ICAgIGlmIChWOENhbnZhc0dyYWRpZW50OjpIYXNJbnN0YW5jZSh2YWx1ZSkpCi0gICAgICAgIHJl
dHVybiBDYW52YXNTdHlsZTo6Y3JlYXRlKFY4UHJveHk6OmNvbnZlcnRET01XcmFwcGVyVG9OYXRp
dmU8Q2FudmFzR3JhZGllbnQ+KHZhbHVlKSk7CisgICAgICAgIHJldHVybiBDYW52YXNTdHlsZTo6
Y3JlYXRlKFY4RE9NV3JhcHBlcjo6Y29udmVydERPTVdyYXBwZXJUb05hdGl2ZTxDYW52YXNHcmFk
aWVudD4odmFsdWUpKTsKIAogICAgIGlmIChWOENhbnZhc1BhdHRlcm46Okhhc0luc3RhbmNlKHZh
bHVlKSkKLSAgICAgICAgcmV0dXJuIENhbnZhc1N0eWxlOjpjcmVhdGUoVjhQcm94eTo6Y29udmVy
dERPTVdyYXBwZXJUb05hdGl2ZTxDYW52YXNQYXR0ZXJuPih2YWx1ZSkpOworICAgICAgICByZXR1
cm4gQ2FudmFzU3R5bGU6OmNyZWF0ZShWOERPTVdyYXBwZXI6OmNvbnZlcnRET01XcmFwcGVyVG9O
YXRpdmU8Q2FudmFzUGF0dGVybj4odmFsdWUpKTsKIAogICAgIHJldHVybiAwOwogfQogCiBBQ0NF
U1NPUl9HRVRURVIoQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEU3Ryb2tlU3R5bGUpCiB7Ci0gICAg
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKiBpbXBsID0gVjhQcm94eTo6Y29udmVydERPTVdyYXBw
ZXJUb05hdGl2ZTxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KGluZm8uSG9sZGVyKCkpOworICAg
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCogaW1wbCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydERP
TVdyYXBwZXJUb05hdGl2ZTxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KGluZm8uSG9sZGVyKCkp
OwogICAgIHJldHVybiB0b1Y4KGltcGwtPnN0cm9rZVN0eWxlKCkpOwogfQogCiBBQ0NFU1NPUl9T
RVRURVIoQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEU3Ryb2tlU3R5bGUpCiB7Ci0gICAgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEKiBpbXBsID0gVjhQcm94eTo6Y29udmVydERPTVdyYXBwZXJUb05h
dGl2ZTxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KGluZm8uSG9sZGVyKCkpOworICAgIENhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRCogaW1wbCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydERPTVdyYXBw
ZXJUb05hdGl2ZTxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KGluZm8uSG9sZGVyKCkpOwogICAg
IGltcGwtPnNldFN0cm9rZVN0eWxlKHRvQ2FudmFzU3R5bGUodmFsdWUpKTsKIH0KIAogQUNDRVNT
T1JfR0VUVEVSKENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREZpbGxTdHlsZSkKIHsKLSAgICBDYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQqIGltcGwgPSBWOFByb3h5Ojpjb252ZXJ0RE9NV3JhcHBlclRv
TmF0aXZlPENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4oaW5mby5Ib2xkZXIoKSk7CisgICAgQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEKiBpbXBsID0gVjhET01XcmFwcGVyOjpjb252ZXJ0RE9NV3Jh
cHBlclRvTmF0aXZlPENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4oaW5mby5Ib2xkZXIoKSk7CiAg
ICAgcmV0dXJuIHRvVjgoaW1wbC0+ZmlsbFN0eWxlKCkpOwogfQogCiBBQ0NFU1NPUl9TRVRURVIo
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJERmlsbFN0eWxlKQogewotICAgIENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRCogaW1wbCA9IFY4UHJveHk6OmNvbnZlcnRET01XcmFwcGVyVG9OYXRpdmU8Q2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEPihpbmZvLkhvbGRlcigpKTsKKyAgICBDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQqIGltcGwgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRET01XcmFwcGVyVG9OYXRp
dmU8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPihpbmZvLkhvbGRlcigpKTsKICAgICBpbXBsLT5z
ZXRGaWxsU3R5bGUodG9DYW52YXNTdHlsZSh2YWx1ZSkpOwogfQogCkBAIC0xMDEsNyArMTAxLDcg
QEAgQUNDRVNTT1JfU0VUVEVSKENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRAogQ0FMTEJBQ0tfRlVO
Q19ERUNMKENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRFNldFN0cm9rZUNvbG9yKQogewogICAgIElO
Q19TVEFUUygiRE9NLkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5zZXRTdHJva2VDb2xvcigpIik7
Ci0gICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKiBjb250ZXh0ID0gVjhQcm94eTo6Y29udmVy
dFRvTmF0aXZlT2JqZWN0PENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4oVjhDbGFzc0luZGV4OjpD
QU5WQVNSRU5ERVJJTkdDT05URVhUMkQsIGFyZ3MuSG9sZGVyKCkpOworICAgIENhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRCogY29udGV4dCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2Jq
ZWN0PENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4oVjhDbGFzc0luZGV4OjpDQU5WQVNSRU5ERVJJ
TkdDT05URVhUMkQsIGFyZ3MuSG9sZGVyKCkpOwogICAgIHN3aXRjaCAoYXJncy5MZW5ndGgoKSkg
ewogICAgIGNhc2UgMToKICAgICAgICAgaWYgKGFyZ3NbMF0tPklzU3RyaW5nKCkpCkBAIC0xMzEs
NyArMTMxLDcgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKENhbnZhc1JlbmRlcmluZ0NvbnRleAogQ0FM
TEJBQ0tfRlVOQ19ERUNMKENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRFNldEZpbGxDb2xvcikKIHsK
ICAgICBJTkNfU1RBVFMoIkRPTS5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuc2V0RmlsbENvbG9y
KCkiKTsKLSAgICBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQqIGNvbnRleHQgPSBWOFByb3h5Ojpj
b252ZXJ0VG9OYXRpdmVPYmplY3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPihWOENsYXNzSW5k
ZXg6OkNBTlZBU1JFTkRFUklOR0NPTlRFWFQyRCwgYXJncy5Ib2xkZXIoKSk7CisgICAgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEKiBjb250ZXh0ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRp
dmVPYmplY3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPihWOENsYXNzSW5kZXg6OkNBTlZBU1JF
TkRFUklOR0NPTlRFWFQyRCwgYXJncy5Ib2xkZXIoKSk7CiAgICAgc3dpdGNoIChhcmdzLkxlbmd0
aCgpKSB7CiAgICAgY2FzZSAxOgogICAgICAgICBpZiAoYXJnc1swXS0+SXNTdHJpbmcoKSkKQEAg
LTE2MSw3ICsxNjEsNyBAQCBDQUxMQkFDS19GVU5DX0RFQ0woQ2FudmFzUmVuZGVyaW5nQ29udGV4
CiBDQUxMQkFDS19GVU5DX0RFQ0woQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEU3Ryb2tlUmVjdCkK
IHsKICAgICBJTkNfU1RBVFMoIkRPTS5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuc3Ryb2tlUmVj
dCgpIik7Ci0gICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKiBjb250ZXh0ID0gVjhQcm94eTo6
Y29udmVydFRvTmF0aXZlT2JqZWN0PENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4oVjhDbGFzc0lu
ZGV4OjpDQU5WQVNSRU5ERVJJTkdDT05URVhUMkQsIGFyZ3MuSG9sZGVyKCkpOworICAgIENhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRCogY29udGV4dCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0
aXZlT2JqZWN0PENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4oVjhDbGFzc0luZGV4OjpDQU5WQVNS
RU5ERVJJTkdDT05URVhUMkQsIGFyZ3MuSG9sZGVyKCkpOwogICAgIGlmIChhcmdzLkxlbmd0aCgp
ID09IDUpCiAgICAgICAgIGNvbnRleHQtPnN0cm9rZVJlY3QodG9GbG9hdChhcmdzWzBdKSwgdG9G
bG9hdChhcmdzWzFdKSwgdG9GbG9hdChhcmdzWzJdKSwgdG9GbG9hdChhcmdzWzNdKSwgdG9GbG9h
dChhcmdzWzRdKSk7CiAgICAgZWxzZSBpZiAoYXJncy5MZW5ndGgoKSA9PSA0KQpAQCAtMTc2LDcg
KzE3Niw3IEBAIENBTExCQUNLX0ZVTkNfREVDTChDYW52YXNSZW5kZXJpbmdDb250ZXgKIENBTExC
QUNLX0ZVTkNfREVDTChDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRTZXRTaGFkb3cpCiB7CiAgICAg
SU5DX1NUQVRTKCJET00uQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELnNldFNoYWRvdygpIik7Ci0g
ICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKiBjb250ZXh0ID0gVjhQcm94eTo6Y29udmVydFRv
TmF0aXZlT2JqZWN0PENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4oVjhDbGFzc0luZGV4OjpDQU5W
QVNSRU5ERVJJTkdDT05URVhUMkQsIGFyZ3MuSG9sZGVyKCkpOworICAgIENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRCogY29udGV4dCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0
PENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4oVjhDbGFzc0luZGV4OjpDQU5WQVNSRU5ERVJJTkdD
T05URVhUMkQsIGFyZ3MuSG9sZGVyKCkpOwogCiAgICAgc3dpdGNoIChhcmdzLkxlbmd0aCgpKSB7
CiAgICAgY2FzZSAzOgpAQCAtMjExLDEzICsyMTEsMTMgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKENh
bnZhc1JlbmRlcmluZ0NvbnRleAogQ0FMTEJBQ0tfRlVOQ19ERUNMKENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRERyYXdJbWFnZSkKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5DYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQuZHJhd0ltYWdlKCkiKTsKLSAgICBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQqIGNv
bnRleHQgPSBWOFByb3h5Ojpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8Q2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEPihWOENsYXNzSW5kZXg6OkNBTlZBU1JFTkRFUklOR0NPTlRFWFQyRCwgYXJncy5Ib2xk
ZXIoKSk7CisgICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKiBjb250ZXh0ID0gVjhET01XcmFw
cGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPihWOENs
YXNzSW5kZXg6OkNBTlZBU1JFTkRFUklOR0NPTlRFWFQyRCwgYXJncy5Ib2xkZXIoKSk7CiAKICAg
ICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gYXJnID0gYXJnc1swXTsKIAogICAgIGlmIChWOEhUTUxJ
bWFnZUVsZW1lbnQ6Okhhc0luc3RhbmNlKGFyZykpIHsKICAgICAgICAgRXhjZXB0aW9uQ29kZSBl
YyA9IDA7Ci0gICAgICAgIEhUTUxJbWFnZUVsZW1lbnQqIGltYWdlX2VsZW1lbnQgPSBWOFByb3h5
Ojpjb252ZXJ0RE9NV3JhcHBlclRvTm9kZTxIVE1MSW1hZ2VFbGVtZW50PihhcmcpOworICAgICAg
ICBIVE1MSW1hZ2VFbGVtZW50KiBpbWFnZV9lbGVtZW50ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0
RE9NV3JhcHBlclRvTm9kZTxIVE1MSW1hZ2VFbGVtZW50PihhcmcpOwogICAgICAgICBzd2l0Y2gg
KGFyZ3MuTGVuZ3RoKCkpIHsKICAgICAgICAgY2FzZSAzOgogICAgICAgICAgICAgY29udGV4dC0+
ZHJhd0ltYWdlKGltYWdlX2VsZW1lbnQsIHRvRmxvYXQoYXJnc1sxXSksIHRvRmxvYXQoYXJnc1sy
XSkpOwpAQCAtMjQ5LDcgKzI0OSw3IEBAIENBTExCQUNLX0ZVTkNfREVDTChDYW52YXNSZW5kZXJp
bmdDb250ZXgKICAgICAvLyBIVE1MQ2FudmFzRWxlbWVudAogICAgIGlmIChWOEhUTUxDYW52YXNF
bGVtZW50OjpIYXNJbnN0YW5jZShhcmcpKSB7CiAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAw
OwotICAgICAgICBIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzX2VsZW1lbnQgPSBWOFByb3h5Ojpj
b252ZXJ0RE9NV3JhcHBlclRvTm9kZTxIVE1MQ2FudmFzRWxlbWVudD4oYXJnKTsKKyAgICAgICAg
SFRNTENhbnZhc0VsZW1lbnQqIGNhbnZhc19lbGVtZW50ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0
RE9NV3JhcHBlclRvTm9kZTxIVE1MQ2FudmFzRWxlbWVudD4oYXJnKTsKICAgICAgICAgc3dpdGNo
IChhcmdzLkxlbmd0aCgpKSB7CiAgICAgICAgIGNhc2UgMzoKICAgICAgICAgICAgIGNvbnRleHQt
PmRyYXdJbWFnZShjYW52YXNfZWxlbWVudCwgdG9GbG9hdChhcmdzWzFdKSwgdG9GbG9hdChhcmdz
WzJdKSk7CkBAIC0yODUsMTIgKzI4NSwxMiBAQCBDQUxMQkFDS19GVU5DX0RFQ0woQ2FudmFzUmVu
ZGVyaW5nQ29udGV4CiBDQUxMQkFDS19GVU5DX0RFQ0woQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
RHJhd0ltYWdlRnJvbVJlY3QpCiB7CiAgICAgSU5DX1NUQVRTKCJET00uQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJELmRyYXdJbWFnZUZyb21SZWN0KCkiKTsKLSAgICBDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQqIGNvbnRleHQgPSBWOFByb3h5Ojpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8Q2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEPihWOENsYXNzSW5kZXg6OkNBTlZBU1JFTkRFUklOR0NPTlRFWFQyRCwg
YXJncy5Ib2xkZXIoKSk7CisgICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKiBjb250ZXh0ID0g
VjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEPihWOENsYXNzSW5kZXg6OkNBTlZBU1JFTkRFUklOR0NPTlRFWFQyRCwgYXJncy5Ib2xkZXIo
KSk7CiAKICAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gYXJnID0gYXJnc1swXTsKIAogICAgIGlm
IChWOEhUTUxJbWFnZUVsZW1lbnQ6Okhhc0luc3RhbmNlKGFyZykpIHsKLSAgICAgICAgSFRNTElt
YWdlRWxlbWVudCogaW1hZ2VfZWxlbWVudCA9IFY4UHJveHk6OmNvbnZlcnRET01XcmFwcGVyVG9O
b2RlPEhUTUxJbWFnZUVsZW1lbnQ+KGFyZyk7CisgICAgICAgIEhUTUxJbWFnZUVsZW1lbnQqIGlt
YWdlX2VsZW1lbnQgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRET01XcmFwcGVyVG9Ob2RlPEhUTUxJ
bWFnZUVsZW1lbnQ+KGFyZyk7CiAgICAgICAgIGNvbnRleHQtPmRyYXdJbWFnZUZyb21SZWN0KGlt
YWdlX2VsZW1lbnQsICB0b0Zsb2F0KGFyZ3NbMV0pLCB0b0Zsb2F0KGFyZ3NbMl0pLCB0b0Zsb2F0
KGFyZ3NbM10pLCB0b0Zsb2F0KGFyZ3NbNF0pLCB0b0Zsb2F0KGFyZ3NbNV0pLCB0b0Zsb2F0KGFy
Z3NbNl0pLCB0b0Zsb2F0KGFyZ3NbN10pLCB0b0Zsb2F0KGFyZ3NbOF0pLCB0b1dlYkNvcmVTdHJp
bmcoYXJnc1s5XSkpOwogICAgIH0gZWxzZQogICAgICAgICBWOFByb3h5Ojp0aHJvd0Vycm9yKFY4
UHJveHk6OlR5cGVFcnJvciwgImRyYXdJbWFnZUZyb21SZWN0OiBJbnZhbGlkIHR5cGUgb2YgYXJn
dW1lbnRzIik7CkBAIC0zMDEsMzAgKzMwMSwzMCBAQCBDQUxMQkFDS19GVU5DX0RFQ0woQ2FudmFz
UmVuZGVyaW5nQ29udGV4CiBDQUxMQkFDS19GVU5DX0RFQ0woQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEQ3JlYXRlUGF0dGVybikKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5DYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQuY3JlYXRlUGF0dGVybigpIik7Ci0gICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
KiBjb250ZXh0ID0gVjhQcm94eTo6Y29udmVydFRvTmF0aXZlT2JqZWN0PENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRD4oVjhDbGFzc0luZGV4OjpDQU5WQVNSRU5ERVJJTkdDT05URVhUMkQsIGFyZ3Mu
SG9sZGVyKCkpOworICAgIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCogY29udGV4dCA9IFY4RE9N
V3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4o
VjhDbGFzc0luZGV4OjpDQU5WQVNSRU5ERVJJTkdDT05URVhUMkQsIGFyZ3MuSG9sZGVyKCkpOwog
CiAgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGFyZyA9IGFyZ3NbMF07CiAKICAgICBpZiAoVjhI
VE1MSW1hZ2VFbGVtZW50OjpIYXNJbnN0YW5jZShhcmcpKSB7Ci0gICAgICAgIEhUTUxJbWFnZUVs
ZW1lbnQqIGltYWdlX2VsZW1lbnQgPSBWOFByb3h5Ojpjb252ZXJ0RE9NV3JhcHBlclRvTm9kZTxI
VE1MSW1hZ2VFbGVtZW50PihhcmcpOworICAgICAgICBIVE1MSW1hZ2VFbGVtZW50KiBpbWFnZV9l
bGVtZW50ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0RE9NV3JhcHBlclRvTm9kZTxIVE1MSW1hZ2VF
bGVtZW50PihhcmcpOwogICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICAgICAgUmVm
UHRyPENhbnZhc1BhdHRlcm4+IHBhdHRlcm4gPSBjb250ZXh0LT5jcmVhdGVQYXR0ZXJuKGltYWdl
X2VsZW1lbnQsIHRvV2ViQ29yZVN0cmluZ1dpdGhOdWxsQ2hlY2soYXJnc1sxXSksIGVjKTsKICAg
ICAgICAgaWYgKGVjICE9IDApIHsKICAgICAgICAgICAgIFY4UHJveHk6OnNldERPTUV4Y2VwdGlv
bihlYyk7CiAgICAgICAgICAgICByZXR1cm4gbm90SGFuZGxlZEJ5SW50ZXJjZXB0b3IoKTsKICAg
ICAgICAgfQotICAgICAgICByZXR1cm4gVjhQcm94eTo6Y29udmVydFRvVjhPYmplY3QoVjhDbGFz
c0luZGV4OjpDQU5WQVNQQVRURVJOLCBwYXR0ZXJuLmdldCgpKTsKKyAgICAgICAgcmV0dXJuIFY4
RE9NV3JhcHBlcjo6Y29udmVydFRvVjhPYmplY3QoVjhDbGFzc0luZGV4OjpDQU5WQVNQQVRURVJO
LCBwYXR0ZXJuLmdldCgpKTsKICAgICB9CiAKICAgICBpZiAoVjhIVE1MQ2FudmFzRWxlbWVudDo6
SGFzSW5zdGFuY2UoYXJnKSkgewotICAgICAgICBIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzX2Vs
ZW1lbnQgPSBWOFByb3h5Ojpjb252ZXJ0RE9NV3JhcHBlclRvTm9kZTxIVE1MQ2FudmFzRWxlbWVu
dD4oYXJnKTsKKyAgICAgICAgSFRNTENhbnZhc0VsZW1lbnQqIGNhbnZhc19lbGVtZW50ID0gVjhE
T01XcmFwcGVyOjpjb252ZXJ0RE9NV3JhcHBlclRvTm9kZTxIVE1MQ2FudmFzRWxlbWVudD4oYXJn
KTsKICAgICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgICAgIFJlZlB0cjxDYW52YXNQ
YXR0ZXJuPiBwYXR0ZXJuID0gY29udGV4dC0+Y3JlYXRlUGF0dGVybihjYW52YXNfZWxlbWVudCwg
dG9XZWJDb3JlU3RyaW5nV2l0aE51bGxDaGVjayhhcmdzWzFdKSwgZWMpOwogICAgICAgICBpZiAo
ZWMgIT0gMCkgewogICAgICAgICAgICAgVjhQcm94eTo6c2V0RE9NRXhjZXB0aW9uKGVjKTsKICAg
ICAgICAgICAgIHJldHVybiBub3RIYW5kbGVkQnlJbnRlcmNlcHRvcigpOwogICAgICAgICB9Ci0g
ICAgICAgIHJldHVybiBWOFByb3h5Ojpjb252ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6OkNB
TlZBU1BBVFRFUk4sIHBhdHRlcm4uZ2V0KCkpOworICAgICAgICByZXR1cm4gVjhET01XcmFwcGVy
Ojpjb252ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6OkNBTlZBU1BBVFRFUk4sIHBhdHRlcm4u
Z2V0KCkpOwogICAgIH0KIAogICAgIFY4UHJveHk6OnNldERPTUV4Y2VwdGlvbihUWVBFX01JU01B
VENIX0VSUik7CkBAIC0zMzUsNyArMzM1LDcgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKENhbnZhc1Jl
bmRlcmluZ0NvbnRleAogewogICAgIElOQ19TVEFUUygiRE9NLkNhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRC5maWxsVGV4dCgpIik7CiAKLSAgICBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQqIGNvbnRl
eHQgPSBWOFByb3h5Ojpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEPihWOENsYXNzSW5kZXg6OkNBTlZBU1JFTkRFUklOR0NPTlRFWFQyRCwgYXJncy5Ib2xkZXIo
KSk7CisgICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKiBjb250ZXh0ID0gVjhET01XcmFwcGVy
Ojpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPihWOENsYXNz
SW5kZXg6OkNBTlZBU1JFTkRFUklOR0NPTlRFWFQyRCwgYXJncy5Ib2xkZXIoKSk7CiAKICAgICAv
LyBUd28gZm9ybXM6CiAgICAgLy8gKiBmaWxsVGV4dCh0ZXh0LCB4LCB5KQpAQCAtMzYxLDcgKzM2
MSw3IEBAIENBTExCQUNLX0ZVTkNfREVDTChDYW52YXNSZW5kZXJpbmdDb250ZXgKIENBTExCQUNL
X0ZVTkNfREVDTChDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRTdHJva2VUZXh0KQogewogICAgIElO
Q19TVEFUUygiRE9NLkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5zdHJva2VUZXh0KCkiKTsKLSAg
ICBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQqIGNvbnRleHQgPSBWOFByb3h5Ojpjb252ZXJ0VG9O
YXRpdmVPYmplY3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPihWOENsYXNzSW5kZXg6OkNBTlZB
U1JFTkRFUklOR0NPTlRFWFQyRCwgYXJncy5Ib2xkZXIoKSk7CisgICAgQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEKiBjb250ZXh0ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPihWOENsYXNzSW5kZXg6OkNBTlZBU1JFTkRFUklOR0NP
TlRFWFQyRCwgYXJncy5Ib2xkZXIoKSk7CiAKICAgICAvLyBUd28gZm9ybXM6CiAgICAgLy8gKiBz
dHJva2VUZXh0KHRleHQsIHgsIHkpCkBAIC0zOTYsNyArMzk2LDcgQEAgQ0FMTEJBQ0tfRlVOQ19E
RUNMKENhbnZhc1JlbmRlcmluZ0NvbnRleAogICAgICAgICByZXR1cm4gbm90SGFuZGxlZEJ5SW50
ZXJjZXB0b3IoKTsKICAgICB9CiAKLSAgICBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQqIGNvbnRl
eHQgPSBWOFByb3h5Ojpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEPihWOENsYXNzSW5kZXg6OkNBTlZBU1JFTkRFUklOR0NPTlRFWFQyRCwgYXJncy5Ib2xkZXIo
KSk7CisgICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKiBjb250ZXh0ID0gVjhET01XcmFwcGVy
Ojpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPihWOENsYXNz
SW5kZXg6OkNBTlZBU1JFTkRFUklOR0NPTlRFWFQyRCwgYXJncy5Ib2xkZXIoKSk7CiAKICAgICBJ
bWFnZURhdGEqIGltYWdlRGF0YSA9IDA7CiAKQEAgLTQwNCw4ICs0MDQsOCBAQCBDQUxMQkFDS19G
VU5DX0RFQ0woQ2FudmFzUmVuZGVyaW5nQ29udGV4CiAgICAgLy8gY29udmVydFRvTmF0aXZlT2Jq
ZWN0KCkgZXhwZWN0cyBpdCB0byBiZSBjb3JyZWN0LiBJZiB0aGUgYXJndW1lbnQgd2FzIGluY29y
cmVjdAogICAgIC8vIHdlIGxlYXZlIGl0IG51bGwsIGFuZCBwdXRJbWFnZURhdGEoKSB3aWxsIHRo
cm93IHRoZSBjb3JyZWN0IGV4Y2VwdGlvbgogICAgIC8vIChUWVBFX01JU01BVENIX0VSUikuCi0g
ICAgaWYgKFY4UHJveHk6OmlzV3JhcHBlck9mVHlwZShhcmdzWzBdLCBWOENsYXNzSW5kZXg6OklN
QUdFREFUQSkpCi0gICAgICAgIGltYWdlRGF0YSA9IFY4UHJveHk6OmNvbnZlcnRUb05hdGl2ZU9i
amVjdDxJbWFnZURhdGE+KFY4Q2xhc3NJbmRleDo6SU1BR0VEQVRBLCBhcmdzWzBdKTsKKyAgICBp
ZiAoVjhET01XcmFwcGVyOjppc1dyYXBwZXJPZlR5cGUoYXJnc1swXSwgVjhDbGFzc0luZGV4OjpJ
TUFHRURBVEEpKQorICAgICAgICBpbWFnZURhdGEgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05h
dGl2ZU9iamVjdDxJbWFnZURhdGE+KFY4Q2xhc3NJbmRleDo6SU1BR0VEQVRBLCBhcmdzWzBdKTsK
IAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOENsaWVudFJlY3RMaXN0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENsaWVudFJlY3RMaXN0Q3VzdG9tLmNwcAkocmV2aXNpb24g
NDU2NTApCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENsaWVudFJlY3RMaXN0Q3Vz
dG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsMTIgKzQ0LDEyIEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIElOREVYRURfUFJPUEVSVFlfR0VUVEVSKENsaWVudFJlY3RMaXN0KQogewogICAgIElO
Q19TVEFUUygiRE9NLkNsaWVudFJlY3RMaXN0LkluZGV4ZWRQcm9wZXJ0eUdldHRlciIpOwotICAg
IENsaWVudFJlY3RMaXN0KiBpbXAgPSBWOFByb3h5Ojpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8Q2xp
ZW50UmVjdExpc3Q+KFY4Q2xhc3NJbmRleDo6Q0xJRU5UUkVDVExJU1QsIGluZm8uSG9sZGVyKCkp
OworICAgIENsaWVudFJlY3RMaXN0KiBpbXAgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2
ZU9iamVjdDxDbGllbnRSZWN0TGlzdD4oVjhDbGFzc0luZGV4OjpDTElFTlRSRUNUTElTVCwgaW5m
by5Ib2xkZXIoKSk7CiAgICAgUmVmUHRyPENsaWVudFJlY3Q+IHJlc3VsdCA9IGltcC0+aXRlbShp
bmRleCk7CiAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIHJldHVybiBub3RIYW5kbGVkQnlJbnRl
cmNlcHRvcigpOwogCi0gICAgcmV0dXJuIFY4UHJveHk6OmNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xh
c3NJbmRleDo6Q0xJRU5UUkVDVCwgcmVzdWx0LmdldCgpKTsKKyAgICByZXR1cm4gVjhET01XcmFw
cGVyOjpjb252ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6OkNMSUVOVFJFQ1QsIHJlc3VsdC5n
ZXQoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4Q2xpcGJvYXJkQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENsaXBib2FyZEN1c3RvbS5jcHAJKHJldmlzaW9uIDQ1NjUw
KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDbGlwYm9hcmRDdXN0b20uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIEFDQ0VT
U09SX0dFVFRFUihDbGlwYm9hcmRUeXBlcykKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5DbGlwYm9h
cmQudHlwZXMoKSIpOwotICAgIENsaXBib2FyZCogY2xpcGJvYXJkID0gVjhQcm94eTo6Y29udmVy
dFRvTmF0aXZlT2JqZWN0PENsaXBib2FyZD4oVjhDbGFzc0luZGV4OjpDTElQQk9BUkQsIGluZm8u
SG9sZGVyKCkpOworICAgIENsaXBib2FyZCogY2xpcGJvYXJkID0gVjhET01XcmFwcGVyOjpjb252
ZXJ0VG9OYXRpdmVPYmplY3Q8Q2xpcGJvYXJkPihWOENsYXNzSW5kZXg6OkNMSVBCT0FSRCwgaW5m
by5Ib2xkZXIoKSk7CiAKICAgICBIYXNoU2V0PFN0cmluZz4gdHlwZXMgPSBjbGlwYm9hcmQtPnR5
cGVzKCk7CiAgICAgaWYgKHR5cGVzLmlzRW1wdHkoKSkKQEAgLTY1LDcgKzY1LDcgQEAgQUNDRVNT
T1JfR0VUVEVSKENsaXBib2FyZFR5cGVzKQogQ0FMTEJBQ0tfRlVOQ19ERUNMKENsaXBib2FyZENs
ZWFyRGF0YSkKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5DbGlwYm9hcmQuY2xlYXJEYXRhKCkiKTsK
LSAgICBDbGlwYm9hcmQqIGNsaXBib2FyZCA9IFY4UHJveHk6OmNvbnZlcnRUb05hdGl2ZU9iamVj
dDxDbGlwYm9hcmQ+KFY4Q2xhc3NJbmRleDo6Q0xJUEJPQVJELCBhcmdzLkhvbGRlcigpKTsKKyAg
ICBDbGlwYm9hcmQqIGNsaXBib2FyZCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2Jq
ZWN0PENsaXBib2FyZD4oVjhDbGFzc0luZGV4OjpDTElQQk9BUkQsIGFyZ3MuSG9sZGVyKCkpOwog
CiAgICAgaWYgKCFhcmdzLkxlbmd0aCgpKSB7CiAgICAgICAgIGNsaXBib2FyZC0+Y2xlYXJBbGxE
YXRhKCk7CkBAIC04Myw3ICs4Myw3IEBAIENBTExCQUNLX0ZVTkNfREVDTChDbGlwYm9hcmRDbGVh
ckRhdGEpCiBDQUxMQkFDS19GVU5DX0RFQ0woQ2xpcGJvYXJkR2V0RGF0YSkKIHsKICAgICBJTkNf
U1RBVFMoIkRPTS5DbGlwYm9hcmQuZ2V0RGF0YSgpIik7Ci0gICAgQ2xpcGJvYXJkKiBjbGlwYm9h
cmQgPSBWOFByb3h5Ojpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8Q2xpcGJvYXJkPihWOENsYXNzSW5k
ZXg6OkNMSVBCT0FSRCwgYXJncy5Ib2xkZXIoKSk7CisgICAgQ2xpcGJvYXJkKiBjbGlwYm9hcmQg
PSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxDbGlwYm9hcmQ+KFY4Q2xhc3NJ
bmRleDo6Q0xJUEJPQVJELCBhcmdzLkhvbGRlcigpKTsKIAogICAgIGlmIChhcmdzLkxlbmd0aCgp
ICE9IDEpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCJnZXREYXRhOiBJbnZhbGlkIG51bWJl
ciBvZiBhcmd1bWVudHMiLCBWOFByb3h5OjpTeW50YXhFcnJvcik7CkBAIC05OSw3ICs5OSw3IEBA
IENBTExCQUNLX0ZVTkNfREVDTChDbGlwYm9hcmRHZXREYXRhKQogQ0FMTEJBQ0tfRlVOQ19ERUNM
KENsaXBib2FyZFNldERhdGEpCiB7CiAgICAgSU5DX1NUQVRTKCJET00uQ2xpcGJvYXJkLnNldERh
dGEoKSIpOwotICAgIENsaXBib2FyZCogY2xpcGJvYXJkID0gVjhQcm94eTo6Y29udmVydFRvTmF0
aXZlT2JqZWN0PENsaXBib2FyZD4oVjhDbGFzc0luZGV4OjpDTElQQk9BUkQsIGFyZ3MuSG9sZGVy
KCkpOworICAgIENsaXBib2FyZCogY2xpcGJvYXJkID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9O
YXRpdmVPYmplY3Q8Q2xpcGJvYXJkPihWOENsYXNzSW5kZXg6OkNMSVBCT0FSRCwgYXJncy5Ib2xk
ZXIoKSk7CiAKICAgICBpZiAoYXJncy5MZW5ndGgoKSAhPSAyKQogICAgICAgICByZXR1cm4gdGhy
b3dFcnJvcigic2V0RGF0YTogSW52YWxpZCBudW1iZXIgb2YgYXJndW1lbnRzIiwgVjhQcm94eTo6
U3ludGF4RXJyb3IpOwpAQCAtMTEyLDcgKzExMiw3IEBAIENBTExCQUNLX0ZVTkNfREVDTChDbGlw
Ym9hcmRTZXREYXRhKQogQ0FMTEJBQ0tfRlVOQ19ERUNMKENsaXBib2FyZFNldERyYWdJbWFnZSkK
IHsKICAgICBJTkNfU1RBVFMoIkRPTS5DbGlwYm9hcmQuc2V0RHJhZ0ltYWdlKCkiKTsKLSAgICBD
bGlwYm9hcmQqIGNsaXBib2FyZCA9IFY4UHJveHk6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxDbGlw
Ym9hcmQ+KFY4Q2xhc3NJbmRleDo6Q0xJUEJPQVJELCBhcmdzLkhvbGRlcigpKTsKKyAgICBDbGlw
Ym9hcmQqIGNsaXBib2FyZCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PENs
aXBib2FyZD4oVjhDbGFzc0luZGV4OjpDTElQQk9BUkQsIGFyZ3MuSG9sZGVyKCkpOwogCiAgICAg
aWYgKCFjbGlwYm9hcmQtPmlzRm9yRHJhZ2dpbmcoKSkKICAgICAgICAgcmV0dXJuIHY4OjpVbmRl
ZmluZWQoKTsKQEAgLTEyNSw3ICsxMjUsNyBAQCBDQUxMQkFDS19GVU5DX0RFQ0woQ2xpcGJvYXJk
U2V0RHJhZ0ltYWdlCiAKICAgICBOb2RlKiBub2RlID0gMDsKICAgICBpZiAoVjhOb2RlOjpIYXNJ
bnN0YW5jZShhcmdzWzBdKSkKLSAgICAgICAgbm9kZSA9IFY4UHJveHk6OmNvbnZlcnRET01XcmFw
cGVyVG9Ob2RlPE5vZGU+KGFyZ3NbMF0pOworICAgICAgICBub2RlID0gVjhET01XcmFwcGVyOjpj
b252ZXJ0RE9NV3JhcHBlclRvTm9kZTxOb2RlPihhcmdzWzBdKTsKIAogICAgIGlmICghbm9kZSB8
fCAhbm9kZS0+aXNFbGVtZW50Tm9kZSgpKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigic2V0
RHJhZ0ltYWdlRnJvbUVsZW1lbnQ6IEludmFsaWQgZmlyc3QgYXJndW1lbnQiKTsKSW5kZXg6IFdl
YkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tQmluZGluZy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21CaW5kaW5nLmNwcAkocmV2aXNp
b24gNDU2NTApCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbUJpbmRpbmcu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Miw4ICs4Miw4IEBAIEFDQ0VTU09SX0dFVFRFUihEb2N1
bWVudEltcGxlbWVudGF0aW9uKQogICAgICAgICByZXR1cm4gaW1wbGVtZW50YXRpb247CiAKICAg
ICAvLyBHZW5lcmF0ZSBhIHdyYXBwZXIuCi0gICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gVjhQcm94
eTo6Y29udmVydERPTVdyYXBwZXJUb05hdGl2ZTxEb2N1bWVudD4oaW5mby5Ib2xkZXIoKSk7Ci0g
ICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHdyYXBwZXIgPSBWOFByb3h5Ojpjb252ZXJ0RE9NSW1w
bGVtZW50YXRpb25Ub1Y4T2JqZWN0KGRvY3VtZW50LT5pbXBsZW1lbnRhdGlvbigpKTsKKyAgICBE
b2N1bWVudCogZG9jdW1lbnQgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRET01XcmFwcGVyVG9OYXRp
dmU8RG9jdW1lbnQ+KGluZm8uSG9sZGVyKCkpOworICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB3
cmFwcGVyID0gVjhET01XcmFwcGVyOjpjb252ZXJ0RE9NSW1wbGVtZW50YXRpb25Ub1Y4T2JqZWN0
KGRvY3VtZW50LT5pbXBsZW1lbnRhdGlvbigpKTsKIAogICAgIC8vIFN0b3JlIHRoZSB3cmFwcGVy
IGluIHRoZSBpbnRlcm5hbCBmaWVsZC4KICAgICBpbmZvLkhvbGRlcigpLT5TZXRJbnRlcm5hbEZp
ZWxkKGtEb2N1bWVudEltcGxlbWVudGF0aW9uSW5kZXgsIHdyYXBwZXIpOwpAQCAtOTYsNyArOTYs
NyBAQCBJTkRFWEVEX0FDQ0VTU19DSEVDSyhIaXN0b3J5KQogewogICAgIEFTU0VSVChWOENsYXNz
SW5kZXg6OkZyb21JbnQoZGF0YS0+SW50MzJWYWx1ZSgpKSA9PSBWOENsYXNzSW5kZXg6OkhJU1RP
UlkpOwogICAgIC8vIE9ubHkgYWxsb3cgc2FtZSBvcmlnaW4gYWNjZXNzLgotICAgIEhpc3Rvcnkq
IGhpc3RvcnkgPSBWOFByb3h5Ojpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8SGlzdG9yeT4oVjhDbGFz
c0luZGV4OjpISVNUT1JZLCBob3N0KTsKKyAgICBIaXN0b3J5KiBoaXN0b3J5ID0gVjhET01XcmFw
cGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8SGlzdG9yeT4oVjhDbGFzc0luZGV4OjpISVNUT1JZ
LCBob3N0KTsKICAgICByZXR1cm4gVjhQcm94eTo6Y2FuQWNjZXNzRnJhbWUoaGlzdG9yeS0+ZnJh
bWUoKSwgZmFsc2UpOwogfQogCkBAIC0xMDQsNyArMTA0LDcgQEAgTkFNRURfQUNDRVNTX0NIRUNL
KEhpc3RvcnkpCiB7CiAgICAgQVNTRVJUKFY4Q2xhc3NJbmRleDo6RnJvbUludChkYXRhLT5JbnQz
MlZhbHVlKCkpID09IFY4Q2xhc3NJbmRleDo6SElTVE9SWSk7CiAgICAgLy8gT25seSBhbGxvdyBz
YW1lIG9yaWdpbiBhY2Nlc3MuCi0gICAgSGlzdG9yeSogaGlzdG9yeSA9IFY4UHJveHk6OmNvbnZl
cnRUb05hdGl2ZU9iamVjdDxIaXN0b3J5PihWOENsYXNzSW5kZXg6OkhJU1RPUlksIGhvc3QpOwor
ICAgIEhpc3RvcnkqIGhpc3RvcnkgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVj
dDxIaXN0b3J5PihWOENsYXNzSW5kZXg6OkhJU1RPUlksIGhvc3QpOwogICAgIHJldHVybiBWOFBy
b3h5OjpjYW5BY2Nlc3NGcmFtZShoaXN0b3J5LT5mcmFtZSgpLCBmYWxzZSk7CiB9CiAKQEAgLTEx
OCwyMSArMTE4LDIxIEBAIEZyYW1lKiBWOEN1c3RvbTo6R2V0VGFyZ2V0RnJhbWUodjg6OkxvY2EK
ICAgICBGcmFtZSogdGFyZ2V0ID0gMDsKICAgICBzd2l0Y2ggKFY4Q2xhc3NJbmRleDo6RnJvbUlu
dChkYXRhLT5JbnQzMlZhbHVlKCkpKSB7CiAgICAgY2FzZSBWOENsYXNzSW5kZXg6OkRPTVdJTkRP
VzogewotICAgICAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gd2luZG93ID0gVjhQcm94eTo6bG9v
a3VwRE9NV3JhcHBlcihWOENsYXNzSW5kZXg6OkRPTVdJTkRPVywgaG9zdCk7CisgICAgICAgIHY4
OjpIYW5kbGU8djg6OlZhbHVlPiB3aW5kb3cgPSBWOERPTVdyYXBwZXI6Omxvb2t1cERPTVdyYXBw
ZXIoVjhDbGFzc0luZGV4OjpET01XSU5ET1csIGhvc3QpOwogICAgICAgICBpZiAod2luZG93Lklz
RW1wdHkoKSkKICAgICAgICAgICAgIHJldHVybiB0YXJnZXQ7CiAKLSAgICAgICAgRE9NV2luZG93
KiB0YXJnZXRXaW5kb3cgPSBWOFByb3h5Ojpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8RE9NV2luZG93
PihWOENsYXNzSW5kZXg6OkRPTVdJTkRPVywgd2luZG93KTsKKyAgICAgICAgRE9NV2luZG93KiB0
YXJnZXRXaW5kb3cgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxET01XaW5k
b3c+KFY4Q2xhc3NJbmRleDo6RE9NV0lORE9XLCB3aW5kb3cpOwogICAgICAgICB0YXJnZXQgPSB0
YXJnZXRXaW5kb3ctPmZyYW1lKCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIFY4
Q2xhc3NJbmRleDo6TE9DQVRJT046IHsKLSAgICAgICAgSGlzdG9yeSogaGlzdG9yeSA9IFY4UHJv
eHk6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxIaXN0b3J5PihWOENsYXNzSW5kZXg6OkhJU1RPUlks
IGhvc3QpOworICAgICAgICBIaXN0b3J5KiBoaXN0b3J5ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0
VG9OYXRpdmVPYmplY3Q8SGlzdG9yeT4oVjhDbGFzc0luZGV4OjpISVNUT1JZLCBob3N0KTsKICAg
ICAgICAgdGFyZ2V0ID0gaGlzdG9yeS0+ZnJhbWUoKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQog
ICAgIGNhc2UgVjhDbGFzc0luZGV4OjpISVNUT1JZOiB7Ci0gICAgICAgIExvY2F0aW9uKiBsb2Nh
dGlvbiA9IFY4UHJveHk6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxMb2NhdGlvbj4oVjhDbGFzc0lu
ZGV4OjpMT0NBVElPTiwgaG9zdCk7CisgICAgICAgIExvY2F0aW9uKiBsb2NhdGlvbiA9IFY4RE9N
V3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PExvY2F0aW9uPihWOENsYXNzSW5kZXg6OkxP
Q0FUSU9OLCBob3N0KTsKICAgICAgICAgdGFyZ2V0ID0gbG9jYXRpb24tPmZyYW1lKCk7CiAgICAg
ICAgIGJyZWFrOwogICAgIH0KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3Vz
dG9tU1FMU3RhdGVtZW50Q2FsbGJhY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4Q3VzdG9tU1FMU3RhdGVtZW50Q2FsbGJhY2suY3BwCShyZXZpc2lvbiA0
NTY1MCkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tU1FMU3RhdGVtZW50
Q2FsbGJhY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MSw4ICs2MSw4IEBAIHZvaWQgVjhDdXN0
b21TUUxTdGF0ZW1lbnRDYWxsYmFjazo6aGFuZGwKICAgICB2ODo6Q29udGV4dDo6U2NvcGUgc2Nv
cGUoY29udGV4dCk7CiAKICAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gYXJndltdID0gewotICAg
ICAgICBWOFByb3h5Ojpjb252ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6OlNRTFRSQU5TQUNU
SU9OLCB0cmFuc2FjdGlvbiksCi0gICAgICAgIFY4UHJveHk6OmNvbnZlcnRUb1Y4T2JqZWN0KFY4
Q2xhc3NJbmRleDo6U1FMUkVTVUxUU0VULCByZXN1bHRTZXQpCisgICAgICAgIFY4RE9NV3JhcHBl
cjo6Y29udmVydFRvVjhPYmplY3QoVjhDbGFzc0luZGV4OjpTUUxUUkFOU0FDVElPTiwgdHJhbnNh
Y3Rpb24pLAorICAgICAgICBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xhc3NJ
bmRleDo6U1FMUkVTVUxUU0VULCByZXN1bHRTZXQpCiAgICAgfTsKIAogICAgIC8vIFByb3RlY3Qg
dGhlIGZyYW1lIHVudGlsIHRoZSBjYWxsYmFjayByZXR1cm5zLgpJbmRleDogV2ViQ29yZS9iaW5k
aW5ncy92OC9jdXN0b20vVjhDdXN0b21TUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbVNRTFN0YXRlbWVu
dEVycm9yQ2FsbGJhY2suY3BwCShyZXZpc2lvbiA0NTY1MCkKKysrIFdlYkNvcmUvYmluZGluZ3Mv
djgvY3VzdG9tL1Y4Q3VzdG9tU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjay5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTYxLDggKzYxLDggQEAgYm9vbCBWOEN1c3RvbVNRTFN0YXRlbWVudEVycm9yQ2Fs
bGJhY2s6OgogICAgIHY4OjpDb250ZXh0OjpTY29wZSBzY29wZShjb250ZXh0KTsKIAogICAgIHY4
OjpIYW5kbGU8djg6OlZhbHVlPiBhcmd2W10gPSB7Ci0gICAgICAgIFY4UHJveHk6OmNvbnZlcnRU
b1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6U1FMVFJBTlNBQ1RJT04sIHRyYW5zYWN0aW9uKSwKLSAg
ICAgICAgVjhQcm94eTo6Y29udmVydFRvVjhPYmplY3QoVjhDbGFzc0luZGV4OjpTUUxFUlJPUiwg
ZXJyb3IpCisgICAgICAgIFY4RE9NV3JhcHBlcjo6Y29udmVydFRvVjhPYmplY3QoVjhDbGFzc0lu
ZGV4OjpTUUxUUkFOU0FDVElPTiwgdHJhbnNhY3Rpb24pLAorICAgICAgICBWOERPTVdyYXBwZXI6
OmNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6U1FMRVJST1IsIGVycm9yKQogICAgIH07
CiAKICAgICAvLyBQcm90ZWN0IHRoZSBmcmFtZSB1bnRpbCB0aGUgY2FsbGJhY2sgcmV0dXJucy4K
SW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tU1FMVHJhbnNhY3Rpb25D
YWxsYmFjay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhD
dXN0b21TUUxUcmFuc2FjdGlvbkNhbGxiYWNrLmNwcAkocmV2aXNpb24gNDU2NTApCisrKyBXZWJD
b3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbVNRTFRyYW5zYWN0aW9uQ2FsbGJhY2suY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02Miw3ICs2Miw3IEBAIHZvaWQgVjhDdXN0b21TUUxUcmFuc2Fj
dGlvbkNhbGxiYWNrOjpoYW4KICAgICB2ODo6Q29udGV4dDo6U2NvcGUgc2NvcGUoY29udGV4dCk7
CiAKICAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gYXJndltdID0gewotICAgICAgICBWOFByb3h5
Ojpjb252ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6OlNRTFRSQU5TQUNUSU9OLCB0cmFuc2Fj
dGlvbikKKyAgICAgICAgVjhET01XcmFwcGVyOjpjb252ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5k
ZXg6OlNRTFRSQU5TQUNUSU9OLCB0cmFuc2FjdGlvbikKICAgICB9OwogCiAgICAgLy8gUHJvdGVj
dCB0aGUgZnJhbWUgdW50aWwgdGhlIGNhbGxiYWNrIHJldHVybnMuCkluZGV4OiBXZWJDb3JlL2Jp
bmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbVNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjay5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21TUUxUcmFu
c2FjdGlvbkVycm9yQ2FsbGJhY2suY3BwCShyZXZpc2lvbiA0NTY1MCkKKysrIFdlYkNvcmUvYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tU1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNjEsNyArNjEsNyBAQCB2b2lkIFY4Q3VzdG9tU1FMVHJhbnNhY3Rp
b25FcnJvckNhbGxiYWNrCiAgICAgdjg6OkNvbnRleHQ6OlNjb3BlIHNjb3BlKGNvbnRleHQpOwog
CiAgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGFyZ3ZbXSA9IHsKLSAgICAgICAgVjhQcm94eTo6
Y29udmVydFRvVjhPYmplY3QoVjhDbGFzc0luZGV4OjpTUUxFUlJPUiwgZXJyb3IpCisgICAgICAg
IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvVjhPYmplY3QoVjhDbGFzc0luZGV4OjpTUUxFUlJPUiwg
ZXJyb3IpCiAgICAgfTsKIAogICAgIC8vIFByb3RlY3QgdGhlIGZyYW1lIHVudGlsIHRoZSBjYWxs
YmFjayByZXR1cm5zLgpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhET01XaW5k
b3dDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4
RE9NV2luZG93Q3VzdG9tLmNwcAkocmV2aXNpb24gNDU2NTApCisrKyBXZWJDb3JlL2JpbmRpbmdz
L3Y4L2N1c3RvbS9WOERPTVdpbmRvd0N1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0LDcg
KzY0LDcgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4Q3VzdG9tOjpXaW5kb3dTZQogICAgIGlm
IChhcmd1bWVudENvdW50IDwgMSkKICAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKIAot
ICAgIERPTVdpbmRvdyogaW1wID0gVjhQcm94eTo6Y29udmVydFRvTmF0aXZlT2JqZWN0PERPTVdp
bmRvdz4oVjhDbGFzc0luZGV4OjpET01XSU5ET1csIGFyZ3MuSG9sZGVyKCkpOworICAgIERPTVdp
bmRvdyogaW1wID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8RE9NV2luZG93
PihWOENsYXNzSW5kZXg6OkRPTVdJTkRPVywgYXJncy5Ib2xkZXIoKSk7CiAKICAgICBpZiAoIWlt
cC0+ZnJhbWUoKSkKICAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKQEAgLTE2MSwxOCAr
MTYxLDE4IEBAIEFDQ0VTU09SX0dFVFRFUihET01XaW5kb3dDcnlwdG8pCiAKIEFDQ0VTU09SX1NF
VFRFUihET01XaW5kb3dMb2NhdGlvbikKIHsKLSAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGhv
bGRlciA9IFY4UHJveHk6Omxvb2t1cERPTVdyYXBwZXIoVjhDbGFzc0luZGV4OjpET01XSU5ET1cs
IGluZm8uVGhpcygpKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGhvbGRlciA9IFY4RE9N
V3JhcHBlcjo6bG9va3VwRE9NV3JhcHBlcihWOENsYXNzSW5kZXg6OkRPTVdJTkRPVywgaW5mby5U
aGlzKCkpOwogICAgIGlmIChob2xkZXIuSXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBET01XaW5kb3cqIGltcCA9IFY4UHJveHk6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxET01XaW5k
b3c+KFY4Q2xhc3NJbmRleDo6RE9NV0lORE9XLCBob2xkZXIpOworICAgIERPTVdpbmRvdyogaW1w
ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8RE9NV2luZG93PihWOENsYXNz
SW5kZXg6OkRPTVdJTkRPVywgaG9sZGVyKTsKICAgICBXaW5kb3dTZXRMb2NhdGlvbihpbXAsIHRv
V2ViQ29yZVN0cmluZyh2YWx1ZSkpOwogfQogCiAKIEFDQ0VTU09SX1NFVFRFUihET01XaW5kb3dP
cGVuZXIpCiB7Ci0gICAgRE9NV2luZG93KiBpbXAgPSBWOFByb3h5Ojpjb252ZXJ0VG9OYXRpdmVP
YmplY3Q8RE9NV2luZG93PihWOENsYXNzSW5kZXg6OkRPTVdJTkRPVywgaW5mby5Ib2xkZXIoKSk7
CisgICAgRE9NV2luZG93KiBpbXAgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVj
dDxET01XaW5kb3c+KFY4Q2xhc3NJbmRleDo6RE9NV0lORE9XLCBpbmZvLkhvbGRlcigpKTsKIAog
ICAgIGlmICghVjhQcm94eTo6Y2FuQWNjZXNzRnJhbWUoaW1wLT5mcmFtZSgpLCB0cnVlKSkKICAg
ICAgICAgcmV0dXJuOwpAQCAtMTk3LDcgKzE5Nyw3IEBAIEFDQ0VTU09SX1NFVFRFUihET01XaW5k
b3dPcGVuZXIpCiBDQUxMQkFDS19GVU5DX0RFQ0woRE9NV2luZG93QWRkRXZlbnRMaXN0ZW5lcikK
IHsKICAgICBJTkNfU1RBVFMoIkRPTS5ET01XaW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigpIik7Ci0g
ICAgRE9NV2luZG93KiBpbXAgPSBWOFByb3h5Ojpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8RE9NV2lu
ZG93PihWOENsYXNzSW5kZXg6OkRPTVdJTkRPVywgYXJncy5Ib2xkZXIoKSk7CisgICAgRE9NV2lu
ZG93KiBpbXAgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxET01XaW5kb3c+
KFY4Q2xhc3NJbmRleDo6RE9NV0lORE9XLCBhcmdzLkhvbGRlcigpKTsKIAogICAgIGlmICghVjhQ
cm94eTo6Y2FuQWNjZXNzRnJhbWUoaW1wLT5mcmFtZSgpLCB0cnVlKSkKICAgICAgICAgcmV0dXJu
IHY4OjpVbmRlZmluZWQoKTsKQEAgLTIyOSw3ICsyMjksNyBAQCBDQUxMQkFDS19GVU5DX0RFQ0wo
RE9NV2luZG93QWRkRXZlbnRMaXN0CiBDQUxMQkFDS19GVU5DX0RFQ0woRE9NV2luZG93UmVtb3Zl
RXZlbnRMaXN0ZW5lcikKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5ET01XaW5kb3cucmVtb3ZlRXZl
bnRMaXN0ZW5lcigpIik7Ci0gICAgRE9NV2luZG93KiBpbXAgPSBWOFByb3h5Ojpjb252ZXJ0VG9O
YXRpdmVPYmplY3Q8RE9NV2luZG93PihWOENsYXNzSW5kZXg6OkRPTVdJTkRPVywgYXJncy5Ib2xk
ZXIoKSk7CisgICAgRE9NV2luZG93KiBpbXAgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2
ZU9iamVjdDxET01XaW5kb3c+KFY4Q2xhc3NJbmRleDo6RE9NV0lORE9XLCBhcmdzLkhvbGRlcigp
KTsKIAogICAgIGlmICghVjhQcm94eTo6Y2FuQWNjZXNzRnJhbWUoaW1wLT5mcmFtZSgpLCB0cnVl
KSkKICAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKQEAgLTI1OSw3ICsyNTksNyBAQCBD
QUxMQkFDS19GVU5DX0RFQ0woRE9NV2luZG93UmVtb3ZlRXZlbnRMCiBDQUxMQkFDS19GVU5DX0RF
Q0woRE9NV2luZG93UG9zdE1lc3NhZ2UpCiB7CiAgICAgSU5DX1NUQVRTKCJET00uRE9NV2luZG93
LnBvc3RNZXNzYWdlKCkiKTsKLSAgICBET01XaW5kb3cqIHdpbmRvdyA9IFY4UHJveHk6OmNvbnZl
cnRUb05hdGl2ZU9iamVjdDxET01XaW5kb3c+KFY4Q2xhc3NJbmRleDo6RE9NV0lORE9XLCBhcmdz
LkhvbGRlcigpKTsKKyAgICBET01XaW5kb3cqIHdpbmRvdyA9IFY4RE9NV3JhcHBlcjo6Y29udmVy
dFRvTmF0aXZlT2JqZWN0PERPTVdpbmRvdz4oVjhDbGFzc0luZGV4OjpET01XSU5ET1csIGFyZ3Mu
SG9sZGVyKCkpOwogCiAgICAgRE9NV2luZG93KiBzb3VyY2UgPSBWOFByb3h5OjpyZXRyaWV2ZUZy
YW1lRm9yQ2FsbGluZ0NvbnRleHQoKS0+ZG9tV2luZG93KCk7CiAgICAgQVNTRVJUKHNvdXJjZS0+
ZnJhbWUoKSk7CkBAIC0yNzUsOCArMjc1LDggQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKERPTVdpbmRv
d1Bvc3RNZXNzYWdlKQogICAgIC8vIG9yCiAgICAgLy8gICBwb3N0TWVzc2FnZShtZXNzYWdlLCB0
YXJnZXRPcmlnaW4pOwogICAgIGlmIChhcmdzLkxlbmd0aCgpID4gMikgewotICAgICAgICBpZiAo
VjhQcm94eTo6aXNXcmFwcGVyT2ZUeXBlKGFyZ3NbMV0sIFY4Q2xhc3NJbmRleDo6TUVTU0FHRVBP
UlQpKQotICAgICAgICAgICAgcG9ydCA9IFY4UHJveHk6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxN
ZXNzYWdlUG9ydD4oVjhDbGFzc0luZGV4OjpNRVNTQUdFUE9SVCwgYXJnc1sxXSk7CisgICAgICAg
IGlmIChWOERPTVdyYXBwZXI6OmlzV3JhcHBlck9mVHlwZShhcmdzWzFdLCBWOENsYXNzSW5kZXg6
Ok1FU1NBR0VQT1JUKSkKKyAgICAgICAgICAgIHBvcnQgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRU
b05hdGl2ZU9iamVjdDxNZXNzYWdlUG9ydD4oVjhDbGFzc0luZGV4OjpNRVNTQUdFUE9SVCwgYXJn
c1sxXSk7CiAgICAgICAgIHRhcmdldE9yaWdpbiA9IHRvV2ViQ29yZVN0cmluZ1dpdGhOdWxsT3JV
bmRlZmluZWRDaGVjayhhcmdzWzJdKTsKICAgICB9IGVsc2UgewogICAgICAgICB0YXJnZXRPcmln
aW4gPSB0b1dlYkNvcmVTdHJpbmdXaXRoTnVsbE9yVW5kZWZpbmVkQ2hlY2soYXJnc1sxXSk7CkBA
IC0yOTYsNyArMjk2LDcgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKERPTVdpbmRvd1Bvc3RNZXNzYWdl
KQogQ0FMTEJBQ0tfRlVOQ19ERUNMKERPTVdpbmRvd0F0b2IpCiB7CiAgICAgSU5DX1NUQVRTKCJE
T00uRE9NV2luZG93LmF0b2IoKSIpOwotICAgIERPTVdpbmRvdyogaW1wID0gVjhQcm94eTo6Y29u
dmVydFRvTmF0aXZlT2JqZWN0PERPTVdpbmRvdz4oVjhDbGFzc0luZGV4OjpET01XSU5ET1csIGFy
Z3MuSG9sZGVyKCkpOworICAgIERPTVdpbmRvdyogaW1wID0gVjhET01XcmFwcGVyOjpjb252ZXJ0
VG9OYXRpdmVPYmplY3Q8RE9NV2luZG93PihWOENsYXNzSW5kZXg6OkRPTVdJTkRPVywgYXJncy5I
b2xkZXIoKSk7CiAKICAgICBpZiAoIVY4UHJveHk6OmNhbkFjY2Vzc0ZyYW1lKGltcC0+ZnJhbWUo
KSwgdHJ1ZSkpCiAgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CkBAIC0zMTQsNyArMzE0
LDcgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKERPTVdpbmRvd0F0b2IpCiBDQUxMQkFDS19GVU5DX0RF
Q0woRE9NV2luZG93QnRvYSkKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5ET01XaW5kb3cuYnRvYSgp
Iik7Ci0gICAgRE9NV2luZG93KiBpbXAgPSBWOFByb3h5Ojpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8
RE9NV2luZG93PihWOENsYXNzSW5kZXg6OkRPTVdJTkRPVywgYXJncy5Ib2xkZXIoKSk7CisgICAg
RE9NV2luZG93KiBpbXAgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxET01X
aW5kb3c+KFY4Q2xhc3NJbmRleDo6RE9NV0lORE9XLCBhcmdzLkhvbGRlcigpKTsKIAogICAgIGlm
ICghVjhQcm94eTo6Y2FuQWNjZXNzRnJhbWUoaW1wLT5mcmFtZSgpLCB0cnVlKSkKICAgICAgICAg
cmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKQEAgLTM3MywxMSArMzczLDExIEBAIHN0YXRpYyBTdHJp
bmcgZXZlbnROYW1lRnJvbUF0dHJpYnV0ZU5hbWUKIAogQUNDRVNTT1JfU0VUVEVSKERPTVdpbmRv
d0V2ZW50SGFuZGxlcikKIHsKLSAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGhvbGRlciA9IFY4
UHJveHk6Omxvb2t1cERPTVdyYXBwZXIoVjhDbGFzc0luZGV4OjpET01XSU5ET1csIGluZm8uVGhp
cygpKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGhvbGRlciA9IFY4RE9NV3JhcHBlcjo6
bG9va3VwRE9NV3JhcHBlcihWOENsYXNzSW5kZXg6OkRPTVdJTkRPVywgaW5mby5UaGlzKCkpOwog
ICAgIGlmIChob2xkZXIuSXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBET01XaW5k
b3cqIGltcCA9IFY4UHJveHk6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxET01XaW5kb3c+KFY4Q2xh
c3NJbmRleDo6RE9NV0lORE9XLCBob2xkZXIpOworICAgIERPTVdpbmRvdyogaW1wID0gVjhET01X
cmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8RE9NV2luZG93PihWOENsYXNzSW5kZXg6OkRP
TVdJTkRPVywgaG9sZGVyKTsKICAgICBpZiAoIWltcC0+ZnJhbWUoKSkKICAgICAgICAgcmV0dXJu
OwogCkBAIC00MDUsMTEgKzQwNSwxMSBAQCBBQ0NFU1NPUl9TRVRURVIoRE9NV2luZG93RXZlbnRI
YW5kbGVyKQogCiBBQ0NFU1NPUl9HRVRURVIoRE9NV2luZG93RXZlbnRIYW5kbGVyKQogewotICAg
IHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gaG9sZGVyID0gVjhQcm94eTo6bG9va3VwRE9NV3JhcHBl
cihWOENsYXNzSW5kZXg6OkRPTVdJTkRPVywgaW5mby5UaGlzKCkpOworICAgIHY4OjpIYW5kbGU8
djg6Ok9iamVjdD4gaG9sZGVyID0gVjhET01XcmFwcGVyOjpsb29rdXBET01XcmFwcGVyKFY4Q2xh
c3NJbmRleDo6RE9NV0lORE9XLCBpbmZvLlRoaXMoKSk7CiAgICAgaWYgKGhvbGRlci5Jc0VtcHR5
KCkpCiAgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CiAKLSAgICBET01XaW5kb3cqIGlt
cCA9IFY4UHJveHk6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxET01XaW5kb3c+KFY4Q2xhc3NJbmRl
eDo6RE9NV0lORE9XLCBob2xkZXIpOworICAgIERPTVdpbmRvdyogaW1wID0gVjhET01XcmFwcGVy
Ojpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8RE9NV2luZG93PihWOENsYXNzSW5kZXg6OkRPTVdJTkRP
VywgaG9sZGVyKTsKICAgICBpZiAoIWltcC0+ZnJhbWUoKSkKICAgICAgICAgcmV0dXJuIHY4OjpV
bmRlZmluZWQoKTsKIApAQCAtNDIxLDcgKzQyMSw3IEBAIEFDQ0VTU09SX0dFVFRFUihET01XaW5k
b3dFdmVudEhhbmRsZXIpCiAgICAgU3RyaW5nIGV2ZW50VHlwZSA9IGV2ZW50TmFtZUZyb21BdHRy
aWJ1dGVOYW1lKGtleSk7CiAKICAgICBFdmVudExpc3RlbmVyKiBsaXN0ZW5lciA9IGltcC0+Z2V0
QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihldmVudFR5cGUpOwotICAgIHJldHVybiBWOFByb3h5Ojpj
b252ZXJ0RXZlbnRMaXN0ZW5lclRvVjhPYmplY3QobGlzdGVuZXIpOworICAgIHJldHVybiBWOERP
TVdyYXBwZXI6OmNvbnZlcnRFdmVudExpc3RlbmVyVG9WOE9iamVjdChsaXN0ZW5lcik7CiB9CiAK
IHN0YXRpYyBib29sIGNhblNob3dNb2RhbERpYWxvZ05vdyhjb25zdCBGcmFtZSogZnJhbWUpCkBA
IC01NDQsNyArNTQ0LDcgQEAgc3RhdGljIEZyYW1lKiBjcmVhdGVXaW5kb3coRnJhbWUqIGNhbGxp
bgogQ0FMTEJBQ0tfRlVOQ19ERUNMKERPTVdpbmRvd1Nob3dNb2RhbERpYWxvZykKIHsKICAgICBJ
TkNfU1RBVFMoIkRPTS5ET01XaW5kb3cuc2hvd01vZGFsRGlhbG9nKCkiKTsKLSAgICBET01XaW5k
b3cqIHdpbmRvdyA9IFY4UHJveHk6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxET01XaW5kb3c+KAor
ICAgIERPTVdpbmRvdyogd2luZG93ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmpl
Y3Q8RE9NV2luZG93PigKICAgICAgICAgVjhDbGFzc0luZGV4OjpET01XSU5ET1csIGFyZ3MuSG9s
ZGVyKCkpOwogICAgIEZyYW1lKiBmcmFtZSA9IHdpbmRvdy0+ZnJhbWUoKTsKIApAQCAtNjMzLDcg
KzYzMyw3IEBAIENBTExCQUNLX0ZVTkNfREVDTChET01XaW5kb3dTaG93TW9kYWxEaWEKIENBTExC
QUNLX0ZVTkNfREVDTChET01XaW5kb3dPcGVuKQogewogICAgIElOQ19TVEFUUygiRE9NLkRPTVdp
bmRvdy5vcGVuKCkiKTsKLSAgICBET01XaW5kb3cqIHBhcmVudCA9IFY4UHJveHk6OmNvbnZlcnRU
b05hdGl2ZU9iamVjdDxET01XaW5kb3c+KFY4Q2xhc3NJbmRleDo6RE9NV0lORE9XLCBhcmdzLkhv
bGRlcigpKTsKKyAgICBET01XaW5kb3cqIHBhcmVudCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRv
TmF0aXZlT2JqZWN0PERPTVdpbmRvdz4oVjhDbGFzc0luZGV4OjpET01XSU5ET1csIGFyZ3MuSG9s
ZGVyKCkpOwogICAgIEZyYW1lKiBmcmFtZSA9IHBhcmVudC0+ZnJhbWUoKTsKIAogICAgIGlmICgh
ZnJhbWUgfHwgIVY4UHJveHk6OmNhbkFjY2Vzc0ZyYW1lKGZyYW1lLCB0cnVlKSkKQEAgLTY5MSw3
ICs2OTEsNyBAQCBDQUxMQkFDS19GVU5DX0RFQ0woRE9NV2luZG93T3BlbikKIAogICAgICAgICAg
ICAgZnJhbWUtPmxvYWRlcigpLT5zY2hlZHVsZUxvY2F0aW9uQ2hhbmdlKGNvbXBsZXRlZFVybCwg
cmVmZXJyZXIsIGZhbHNlLCB1c2VyR2VzdHVyZSk7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJu
IFY4UHJveHk6OmNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6RE9NV0lORE9XLCBmcmFt
ZS0+ZG9tV2luZG93KCkpOworICAgICAgICByZXR1cm4gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9W
OE9iamVjdChWOENsYXNzSW5kZXg6OkRPTVdJTkRPVywgZnJhbWUtPmRvbVdpbmRvdygpKTsKICAg
ICB9CiAKICAgICAvLyBJbiB0aGUgY2FzZSBvZiBhIG5hbWVkIGZyYW1lIG9yIGEgbmV3IHdpbmRv
dywgd2UnbGwgdXNlIHRoZQpAQCAtNzUxLDE4ICs3NTEsMTggQEAgQ0FMTEJBQ0tfRlVOQ19ERUNM
KERPTVdpbmRvd09wZW4pCiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuIHY4OjpVbmRl
ZmluZWQoKTsKIAotICAgIHJldHVybiBWOFByb3h5Ojpjb252ZXJ0VG9WOE9iamVjdChWOENsYXNz
SW5kZXg6OkRPTVdJTkRPVywgZnJhbWUtPmRvbVdpbmRvdygpKTsKKyAgICByZXR1cm4gVjhET01X
cmFwcGVyOjpjb252ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6OkRPTVdJTkRPVywgZnJhbWUt
PmRvbVdpbmRvdygpKTsKIH0KIAogCiBJTkRFWEVEX1BST1BFUlRZX0dFVFRFUihET01XaW5kb3cp
CiB7CiAgICAgSU5DX1NUQVRTKCJET00uRE9NV2luZG93LkluZGV4ZWRQcm9wZXJ0eUdldHRlciIp
OwotICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gaG9sZGVyID0gVjhQcm94eTo6bG9va3VwRE9N
V3JhcHBlcihWOENsYXNzSW5kZXg6OkRPTVdJTkRPVywgaW5mby5UaGlzKCkpOworICAgIHY4OjpI
YW5kbGU8djg6Ok9iamVjdD4gaG9sZGVyID0gVjhET01XcmFwcGVyOjpsb29rdXBET01XcmFwcGVy
KFY4Q2xhc3NJbmRleDo6RE9NV0lORE9XLCBpbmZvLlRoaXMoKSk7CiAgICAgaWYgKGhvbGRlci5J
c0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBub3RIYW5kbGVkQnlJbnRlcmNlcHRvcigpOwogCi0g
ICAgRE9NV2luZG93KiB3aW5kb3cgPSBWOFByb3h5Ojpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8RE9N
V2luZG93PihWOENsYXNzSW5kZXg6OkRPTVdJTkRPVywgaG9sZGVyKTsKKyAgICBET01XaW5kb3cq
IHdpbmRvdyA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PERPTVdpbmRvdz4o
VjhDbGFzc0luZGV4OjpET01XSU5ET1csIGhvbGRlcik7CiAgICAgaWYgKCF3aW5kb3cpCiAgICAg
ICAgIHJldHVybiBub3RIYW5kbGVkQnlJbnRlcmNlcHRvcigpOwogCkBAIC03NzIsNyArNzcyLDcg
QEAgSU5ERVhFRF9QUk9QRVJUWV9HRVRURVIoRE9NV2luZG93KQogCiAgICAgRnJhbWUqIGNoaWxk
ID0gZnJhbWUtPnRyZWUoKS0+Y2hpbGQoaW5kZXgpOwogICAgIGlmIChjaGlsZCkKLSAgICAgICAg
cmV0dXJuIFY4UHJveHk6OmNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6RE9NV0lORE9X
LCBjaGlsZC0+ZG9tV2luZG93KCkpOworICAgICAgICByZXR1cm4gVjhET01XcmFwcGVyOjpjb252
ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6OkRPTVdJTkRPVywgY2hpbGQtPmRvbVdpbmRvdygp
KTsKIAogICAgIHJldHVybiBub3RIYW5kbGVkQnlJbnRlcmNlcHRvcigpOwogfQpAQCAtNzgyLDEx
ICs3ODIsMTEgQEAgTkFNRURfUFJPUEVSVFlfR0VUVEVSKERPTVdpbmRvdykKIHsKICAgICBJTkNf
U1RBVFMoIkRPTS5ET01XaW5kb3cuTmFtZWRQcm9wZXJ0eUdldHRlciIpOwogCi0gICAgdjg6Okhh
bmRsZTx2ODo6T2JqZWN0PiBob2xkZXIgPSBWOFByb3h5Ojpsb29rdXBET01XcmFwcGVyKFY4Q2xh
c3NJbmRleDo6RE9NV0lORE9XLCBpbmZvLlRoaXMoKSk7CisgICAgdjg6OkhhbmRsZTx2ODo6T2Jq
ZWN0PiBob2xkZXIgPSBWOERPTVdyYXBwZXI6Omxvb2t1cERPTVdyYXBwZXIoVjhDbGFzc0luZGV4
OjpET01XSU5ET1csIGluZm8uVGhpcygpKTsKICAgICBpZiAoaG9sZGVyLklzRW1wdHkoKSkKICAg
ICAgICAgcmV0dXJuIG5vdEhhbmRsZWRCeUludGVyY2VwdG9yKCk7CiAKLSAgICBET01XaW5kb3cq
IHdpbmRvdyA9IFY4UHJveHk6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxET01XaW5kb3c+KFY4Q2xh
c3NJbmRleDo6RE9NV0lORE9XLCBob2xkZXIpOworICAgIERPTVdpbmRvdyogd2luZG93ID0gVjhE
T01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8RE9NV2luZG93PihWOENsYXNzSW5kZXg6
OkRPTVdJTkRPVywgaG9sZGVyKTsKICAgICBpZiAoIXdpbmRvdykKICAgICAgICAgcmV0dXJuIG5v
dEhhbmRsZWRCeUludGVyY2VwdG9yKCk7CiAKQEAgLTc5OSw3ICs3OTksNyBAQCBOQU1FRF9QUk9Q
RVJUWV9HRVRURVIoRE9NV2luZG93KQogICAgIEF0b21pY1N0cmluZyBwcm9wTmFtZSA9IHY4U3Ry
aW5nVG9BdG9taWNXZWJDb3JlU3RyaW5nKG5hbWUpOwogICAgIEZyYW1lKiBjaGlsZCA9IGZyYW1l
LT50cmVlKCktPmNoaWxkKHByb3BOYW1lKTsKICAgICBpZiAoY2hpbGQpCi0gICAgICAgIHJldHVy
biBWOFByb3h5Ojpjb252ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6OkRPTVdJTkRPVywgY2hp
bGQtPmRvbVdpbmRvdygpKTsKKyAgICAgICAgcmV0dXJuIFY4RE9NV3JhcHBlcjo6Y29udmVydFRv
VjhPYmplY3QoVjhDbGFzc0luZGV4OjpET01XSU5ET1csIGNoaWxkLT5kb21XaW5kb3coKSk7CiAK
ICAgICAvLyBTZWFyY2ggSURMIGZ1bmN0aW9ucyBkZWZpbmVkIGluIHRoZSBwcm90b3R5cGUKICAg
ICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gcmVzdWx0ID0gaG9sZGVyLT5HZXRSZWFsTmFtZWRQcm9w
ZXJ0eUluUHJvdG90eXBlQ2hhaW4obmFtZSk7CkBAIC04MTIsOSArODEyLDkgQEAgTkFNRURfUFJP
UEVSVFlfR0VUVEVSKERPTVdpbmRvdykKICAgICAgICAgUmVmUHRyPEhUTUxDb2xsZWN0aW9uPiBp
dGVtcyA9IGRvYy0+d2luZG93TmFtZWRJdGVtcyhwcm9wTmFtZSk7CiAgICAgICAgIGlmIChpdGVt
cy0+bGVuZ3RoKCkgPj0gMSkgewogICAgICAgICAgICAgaWYgKGl0ZW1zLT5sZW5ndGgoKSA9PSAx
KQotICAgICAgICAgICAgICAgIHJldHVybiBWOFByb3h5Ojpjb252ZXJ0Tm9kZVRvVjhPYmplY3Qo
aXRlbXMtPmZpcnN0SXRlbSgpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gVjhET01XcmFwcGVy
Ojpjb252ZXJ0Tm9kZVRvVjhPYmplY3QoaXRlbXMtPmZpcnN0SXRlbSgpKTsKICAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICByZXR1cm4gVjhQcm94eTo6Y29udmVydFRvVjhPYmplY3Qo
VjhDbGFzc0luZGV4OjpIVE1MQ09MTEVDVElPTiwgaXRlbXMuZ2V0KCkpOworICAgICAgICAgICAg
ICAgIHJldHVybiBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6
SFRNTENPTExFQ1RJT04sIGl0ZW1zLmdldCgpKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtODU2
LDcgKzg1Niw3IEBAIENBTExCQUNLX0ZVTkNfREVDTChET01XaW5kb3dTZXRJbnRlcnZhbCkKIHZv
aWQgVjhDdXN0b206OkNsZWFyVGltZW91dEltcGwoY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykK
IHsKICAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gaG9sZGVyID0gYXJncy5Ib2xkZXIoKTsKLSAg
ICBET01XaW5kb3cqIGltcCA9IFY4UHJveHk6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxET01XaW5k
b3c+KFY4Q2xhc3NJbmRleDo6RE9NV0lORE9XLCBob2xkZXIpOworICAgIERPTVdpbmRvdyogaW1w
ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8RE9NV2luZG93PihWOENsYXNz
SW5kZXg6OkRPTVdJTkRPVywgaG9sZGVyKTsKICAgICBpZiAoIVY4UHJveHk6OmNhbkFjY2Vzc0Zy
YW1lKGltcC0+ZnJhbWUoKSwgdHJ1ZSkpCiAgICAgICAgIHJldHVybjsKICAgICBTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBjb250ZXh0ID0gc3RhdGljX2Nhc3Q8U2NyaXB0RXhlY3V0aW9uQ29udGV4
dCo+KGltcC0+ZnJhbWUoKS0+ZG9jdW1lbnQoKSk7CkBAIC04ODIsMTEgKzg4MiwxMSBAQCBDQUxM
QkFDS19GVU5DX0RFQ0woRE9NV2luZG93Q2xlYXJJbnRlcnZhCiBOQU1FRF9BQ0NFU1NfQ0hFQ0so
RE9NV2luZG93KQogewogICAgIEFTU0VSVChWOENsYXNzSW5kZXg6OkZyb21JbnQoZGF0YS0+SW50
MzJWYWx1ZSgpKSA9PSBWOENsYXNzSW5kZXg6OkRPTVdJTkRPVyk7Ci0gICAgdjg6OkhhbmRsZTx2
ODo6VmFsdWU+IHdpbmRvdyA9IFY4UHJveHk6Omxvb2t1cERPTVdyYXBwZXIoVjhDbGFzc0luZGV4
OjpET01XSU5ET1csIGhvc3QpOworICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB3aW5kb3cgPSBW
OERPTVdyYXBwZXI6Omxvb2t1cERPTVdyYXBwZXIoVjhDbGFzc0luZGV4OjpET01XSU5ET1csIGhv
c3QpOwogICAgIGlmICh3aW5kb3cuSXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7ICAv
LyB0aGUgZnJhbWUgaXMgZ29uZS4KIAotICAgIERPTVdpbmRvdyogdGFyZ2V0V2luZG93ID0gVjhQ
cm94eTo6Y29udmVydFRvTmF0aXZlT2JqZWN0PERPTVdpbmRvdz4oVjhDbGFzc0luZGV4OjpET01X
SU5ET1csIHdpbmRvdyk7CisgICAgRE9NV2luZG93KiB0YXJnZXRXaW5kb3cgPSBWOERPTVdyYXBw
ZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxET01XaW5kb3c+KFY4Q2xhc3NJbmRleDo6RE9NV0lO
RE9XLCB3aW5kb3cpOwogCiAgICAgQVNTRVJUKHRhcmdldFdpbmRvdyk7CiAKQEAgLTkwOCwxMSAr
OTA4LDExIEBAIE5BTUVEX0FDQ0VTU19DSEVDSyhET01XaW5kb3cpCiBJTkRFWEVEX0FDQ0VTU19D
SEVDSyhET01XaW5kb3cpCiB7CiAgICAgQVNTRVJUKFY4Q2xhc3NJbmRleDo6RnJvbUludChkYXRh
LT5JbnQzMlZhbHVlKCkpID09IFY4Q2xhc3NJbmRleDo6RE9NV0lORE9XKTsKLSAgICB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gd2luZG93ID0gVjhQcm94eTo6bG9va3VwRE9NV3JhcHBlcihWOENsYXNz
SW5kZXg6OkRPTVdJTkRPVywgaG9zdCk7CisgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHdpbmRv
dyA9IFY4RE9NV3JhcHBlcjo6bG9va3VwRE9NV3JhcHBlcihWOENsYXNzSW5kZXg6OkRPTVdJTkRP
VywgaG9zdCk7CiAgICAgaWYgKHdpbmRvdy5Jc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgIERPTVdpbmRvdyogdGFyZ2V0V2luZG93ID0gVjhQcm94eTo6Y29udmVydFRvTmF0
aXZlT2JqZWN0PERPTVdpbmRvdz4oVjhDbGFzc0luZGV4OjpET01XSU5ET1csIHdpbmRvdyk7Cisg
ICAgRE9NV2luZG93KiB0YXJnZXRXaW5kb3cgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2
ZU9iamVjdDxET01XaW5kb3c+KFY4Q2xhc3NJbmRleDo6RE9NV0lORE9XLCB3aW5kb3cpOwogCiAg
ICAgQVNTRVJUKHRhcmdldFdpbmRvdyk7CiAKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4RGF0YWJhc2VDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mv
djgvY3VzdG9tL1Y4RGF0YWJhc2VDdXN0b20uY3BwCShyZXZpc2lvbiA0NTY1MCkKKysrIFdlYkNv
cmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RGF0YWJhc2VDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC02Miw3ICs2Miw3IEBAIENBTExCQUNLX0ZVTkNfREVDTChEYXRhYmFzZVRyYW5zYWN0aW9u
KQogICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwogICAgIH0KIAotICAgIERhdGFiYXNl
KiBkYXRhYmFzZSA9IFY4UHJveHk6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxEYXRhYmFzZT4oVjhD
bGFzc0luZGV4OjpEQVRBQkFTRSwgYXJncy5Ib2xkZXIoKSk7CisgICAgRGF0YWJhc2UqIGRhdGFi
YXNlID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8RGF0YWJhc2U+KFY4Q2xh
c3NJbmRleDo6REFUQUJBU0UsIGFyZ3MuSG9sZGVyKCkpOwogCiAgICAgRnJhbWUqIGZyYW1lID0g
VjhQcm94eTo6cmV0cmlldmVGcmFtZSgpOwogCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1
c3RvbS9WOERvY3VtZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdz
L3Y4L2N1c3RvbS9WOERvY3VtZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gNDU2NTApCisrKyBXZWJD
b3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOERvY3VtZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTIsMTYgKzUyLDE2IEBAIENBTExCQUNLX0ZVTkNfREVDTChEb2N1bWVudEV2YWx1YXRl
KQogewogICAgIElOQ19TVEFUUygiRE9NLkRvY3VtZW50LmV2YWx1YXRlKCkiKTsKIAotICAgIERv
Y3VtZW50KiBkb2N1bWVudCA9IFY4UHJveHk6OmNvbnZlcnRET01XcmFwcGVyVG9Ob2RlPERvY3Vt
ZW50PihhcmdzLkhvbGRlcigpKTsKKyAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBWOERPTVdyYXBw
ZXI6OmNvbnZlcnRET01XcmFwcGVyVG9Ob2RlPERvY3VtZW50PihhcmdzLkhvbGRlcigpKTsKICAg
ICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBTdHJpbmcgZXhwcmVzc2lvbiA9IHRvV2ViQ29y
ZVN0cmluZyhhcmdzWzBdKTsKICAgICBOb2RlKiBjb250ZXh0Tm9kZSA9IDA7CiAgICAgaWYgKFY4
Tm9kZTo6SGFzSW5zdGFuY2UoYXJnc1sxXSkpCi0gICAgICAgIGNvbnRleHROb2RlID0gVjhQcm94
eTo6Y29udmVydERPTVdyYXBwZXJUb05vZGU8Tm9kZT4oYXJnc1sxXSk7CisgICAgICAgIGNvbnRl
eHROb2RlID0gVjhET01XcmFwcGVyOjpjb252ZXJ0RE9NV3JhcHBlclRvTm9kZTxOb2RlPihhcmdz
WzFdKTsKIAogICAgIFhQYXRoTlNSZXNvbHZlciogcmVzb2x2ZXIgPSAwOwogICAgIGlmIChWOFhQ
YXRoTlNSZXNvbHZlcjo6SGFzSW5zdGFuY2UoYXJnc1syXSkpCi0gICAgICAgIHJlc29sdmVyID0g
VjhQcm94eTo6Y29udmVydFRvTmF0aXZlT2JqZWN0PFhQYXRoTlNSZXNvbHZlcj4oVjhDbGFzc0lu
ZGV4OjpYUEFUSE5TUkVTT0xWRVIsIGFyZ3NbMl0pOworICAgICAgICByZXNvbHZlciA9IFY4RE9N
V3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PFhQYXRoTlNSZXNvbHZlcj4oVjhDbGFzc0lu
ZGV4OjpYUEFUSE5TUkVTT0xWRVIsIGFyZ3NbMl0pOwogICAgIGVsc2UgaWYgKGFyZ3NbMl0tPklz
T2JqZWN0KCkpCiAgICAgICAgIHJlc29sdmVyID0gbmV3IFY4Q3VzdG9tWFBhdGhOU1Jlc29sdmVy
KGFyZ3NbMl0tPlRvT2JqZWN0KCkpOwogICAgIGVsc2UgaWYgKCFhcmdzWzJdLT5Jc051bGwoKSAm
JiAhYXJnc1syXS0+SXNVbmRlZmluZWQoKSkKQEAgLTcwLDcgKzcwLDcgQEAgQ0FMTEJBQ0tfRlVO
Q19ERUNMKERvY3VtZW50RXZhbHVhdGUpCiAgICAgaW50IHR5cGUgPSB0b0ludDMyKGFyZ3NbM10p
OwogICAgIFhQYXRoUmVzdWx0KiBpblJlc3VsdCA9IDA7CiAgICAgaWYgKFY4WFBhdGhSZXN1bHQ6
Okhhc0luc3RhbmNlKGFyZ3NbNF0pKQotICAgICAgICBpblJlc3VsdCA9IFY4UHJveHk6OmNvbnZl
cnRUb05hdGl2ZU9iamVjdDxYUGF0aFJlc3VsdD4oVjhDbGFzc0luZGV4OjpYUEFUSFJFU1VMVCwg
YXJnc1s0XSk7CisgICAgICAgIGluUmVzdWx0ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRp
dmVPYmplY3Q8WFBhdGhSZXN1bHQ+KFY4Q2xhc3NJbmRleDo6WFBBVEhSRVNVTFQsIGFyZ3NbNF0p
OwogCiAgICAgdjg6OlRyeUNhdGNoIGV4Y2VwdGlvbkNhdGNoZXI7CiAgICAgUmVmUHRyPFhQYXRo
UmVzdWx0PiByZXN1bHQgPSBkb2N1bWVudC0+ZXZhbHVhdGUoZXhwcmVzc2lvbiwgY29udGV4dE5v
ZGUsIHJlc29sdmVyLCB0eXBlLCBpblJlc3VsdCwgZWMpOwpAQCAtODAsMjAgKzgwLDIwIEBAIENB
TExCQUNLX0ZVTkNfREVDTChEb2N1bWVudEV2YWx1YXRlKQogICAgIGlmIChlYykKICAgICAgICAg
cmV0dXJuIHRocm93RXJyb3IoZWMpOwogCi0gICAgcmV0dXJuIFY4UHJveHk6OmNvbnZlcnRUb1Y4
T2JqZWN0KFY4Q2xhc3NJbmRleDo6WFBBVEhSRVNVTFQsIHJlc3VsdC5nZXQoKSk7CisgICAgcmV0
dXJuIFY4RE9NV3JhcHBlcjo6Y29udmVydFRvVjhPYmplY3QoVjhDbGFzc0luZGV4OjpYUEFUSFJF
U1VMVCwgcmVzdWx0LmdldCgpKTsKIH0KIAogQ0FMTEJBQ0tfRlVOQ19ERUNMKERvY3VtZW50R2V0
Q1NTQ2FudmFzQ29udGV4dCkKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5Eb2N1bWVudC5nZXRDU1ND
YW52YXNDb250ZXh0Iik7CiAgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGhvbGRlciA9IGFyZ3Mu
SG9sZGVyKCk7Ci0gICAgRG9jdW1lbnQqIGltcCA9IFY4UHJveHk6OmNvbnZlcnRET01XcmFwcGVy
VG9Ob2RlPERvY3VtZW50Pihob2xkZXIpOworICAgIERvY3VtZW50KiBpbXAgPSBWOERPTVdyYXBw
ZXI6OmNvbnZlcnRET01XcmFwcGVyVG9Ob2RlPERvY3VtZW50Pihob2xkZXIpOwogICAgIFN0cmlu
ZyBjb250ZXh0SWQgPSB0b1dlYkNvcmVTdHJpbmcoYXJnc1swXSk7CiAgICAgU3RyaW5nIG5hbWUg
PSB0b1dlYkNvcmVTdHJpbmcoYXJnc1sxXSk7CiAgICAgaW50IHdpZHRoID0gdG9JbnQzMihhcmdz
WzJdKTsKICAgICBpbnQgaGVpZ2h0ID0gdG9JbnQzMihhcmdzWzNdKTsKICAgICBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQqIHJlc3VsdCA9IGltcC0+Z2V0Q1NTQ2FudmFzQ29udGV4dChjb250ZXh0
SWQsIG5hbWUsIHdpZHRoLCBoZWlnaHQpOwotICAgIHJldHVybiBWOFByb3h5Ojpjb252ZXJ0VG9W
OE9iamVjdChWOENsYXNzSW5kZXg6OkNBTlZBU1JFTkRFUklOR0NPTlRFWFQyRCwgcmVzdWx0KTsK
KyAgICByZXR1cm4gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6
OkNBTlZBU1JFTkRFUklOR0NPTlRFWFQyRCwgcmVzdWx0KTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhEb2N1bWVudExvY2F0
aW9uQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9W
OERvY3VtZW50TG9jYXRpb25DdXN0b20uY3BwCShyZXZpc2lvbiA0NTY1MCkKKysrIFdlYkNvcmUv
YmluZGluZ3MvdjgvY3VzdG9tL1Y4RG9jdW1lbnRMb2NhdGlvbkN1c3RvbS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM0LDE3ICszNCwxNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIEFDQ0VTU09S
X0dFVFRFUihEb2N1bWVudExvY2F0aW9uKQogewotICAgIERvY3VtZW50KiBkb2N1bWVudCA9IFY4
UHJveHk6OmNvbnZlcnRET01XcmFwcGVyVG9OYXRpdmU8RG9jdW1lbnQ+KGluZm8uSG9sZGVyKCkp
OworICAgIERvY3VtZW50KiBkb2N1bWVudCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydERPTVdyYXBw
ZXJUb05hdGl2ZTxEb2N1bWVudD4oaW5mby5Ib2xkZXIoKSk7CiAgICAgaWYgKCFkb2N1bWVudC0+
ZnJhbWUoKSkKICAgICAgICAgcmV0dXJuIHY4OjpOdWxsKCk7CiAKICAgICBET01XaW5kb3cqIHdp
bmRvdyA9IGRvY3VtZW50LT5mcmFtZSgpLT5kb21XaW5kb3coKTsKLSAgICByZXR1cm4gVjhQcm94
eTo6Y29udmVydFRvVjhPYmplY3QoVjhDbGFzc0luZGV4OjpMT0NBVElPTiwgd2luZG93LT5sb2Nh
dGlvbigpKTsKKyAgICByZXR1cm4gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9WOE9iamVjdChWOENs
YXNzSW5kZXg6OkxPQ0FUSU9OLCB3aW5kb3ctPmxvY2F0aW9uKCkpOwogfQogCiBBQ0NFU1NPUl9T
RVRURVIoRG9jdW1lbnRMb2NhdGlvbikKIHsKLSAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBWOFBy
b3h5Ojpjb252ZXJ0RE9NV3JhcHBlclRvTmF0aXZlPERvY3VtZW50PihpbmZvLkhvbGRlcigpKTsK
KyAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRET01XcmFwcGVy
VG9OYXRpdmU8RG9jdW1lbnQ+KGluZm8uSG9sZGVyKCkpOwogICAgIGlmICghZG9jdW1lbnQtPmZy
YW1lKCkpCiAgICAgICAgIHJldHVybjsKIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0
b20vVjhFbGVtZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOEVsZW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiA0NTY1MCkKKysrIFdlYkNvcmUv
YmluZGluZ3MvdjgvY3VzdG9tL1Y4RWxlbWVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTUzLDcgKzUzLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogQ0FMTEJBQ0tfRlVOQ19ERUNMKEVs
ZW1lbnRTZXRBdHRyaWJ1dGUpCiB7CiAgICAgSU5DX1NUQVRTKCJET00uRWxlbWVudC5zZXRBdHRy
aWJ1dGUoKSIpOwotICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBWOFByb3h5Ojpjb252ZXJ0RE9NV3Jh
cHBlclRvTm9kZTxFbGVtZW50PihhcmdzLkhvbGRlcigpKTsKKyAgICBFbGVtZW50KiBlbGVtZW50
ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0RE9NV3JhcHBlclRvTm9kZTxFbGVtZW50PihhcmdzLkhv
bGRlcigpKTsKICAgICBTdHJpbmcgbmFtZSA9IHRvV2ViQ29yZVN0cmluZyhhcmdzWzBdKTsKICAg
ICBTdHJpbmcgdmFsdWUgPSB0b1dlYkNvcmVTdHJpbmcoYXJnc1sxXSk7CiAKQEAgLTc0LDggKzc0
LDggQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKEVsZW1lbnRTZXRBdHRyaWJ1dGVObwogICAgIGlmICgh
VjhBdHRyOjpIYXNJbnN0YW5jZShhcmdzWzBdKSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3Io
VFlQRV9NSVNNQVRDSF9FUlIpOwogCi0gICAgQXR0ciogbmV3QXR0ciA9IFY4UHJveHk6OmNvbnZl
cnRET01XcmFwcGVyVG9Ob2RlPEF0dHI+KGFyZ3NbMF0pOwotICAgIEVsZW1lbnQqIGVsZW1lbnQg
PSBWOFByb3h5Ojpjb252ZXJ0RE9NV3JhcHBlclRvTm9kZTxFbGVtZW50PihhcmdzLkhvbGRlcigp
KTsKKyAgICBBdHRyKiBuZXdBdHRyID0gVjhET01XcmFwcGVyOjpjb252ZXJ0RE9NV3JhcHBlclRv
Tm9kZTxBdHRyPihhcmdzWzBdKTsKKyAgICBFbGVtZW50KiBlbGVtZW50ID0gVjhET01XcmFwcGVy
Ojpjb252ZXJ0RE9NV3JhcHBlclRvTm9kZTxFbGVtZW50PihhcmdzLkhvbGRlcigpKTsKIAogICAg
IGlmICghYWxsb3dTZXR0aW5nU3JjVG9KYXZhc2NyaXB0VVJMKGVsZW1lbnQsIG5ld0F0dHItPm5h
bWUoKSwgbmV3QXR0ci0+dmFsdWUoKSkpCiAgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7
CkBAIC04NSwxMyArODUsMTMgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKEVsZW1lbnRTZXRBdHRyaWJ1
dGVObwogICAgIGlmIChlYykKICAgICAgICAgdGhyb3dFcnJvcihlYyk7CiAKLSAgICByZXR1cm4g
VjhQcm94eTo6Y29udmVydE5vZGVUb1Y4T2JqZWN0KHJlc3VsdC5nZXQoKSk7CisgICAgcmV0dXJu
IFY4RE9NV3JhcHBlcjo6Y29udmVydE5vZGVUb1Y4T2JqZWN0KHJlc3VsdC5nZXQoKSk7CiB9CiAK
IENBTExCQUNLX0ZVTkNfREVDTChFbGVtZW50U2V0QXR0cmlidXRlTlMpCiB7CiAgICAgSU5DX1NU
QVRTKCJET00uRWxlbWVudC5zZXRBdHRyaWJ1dGVOUygpIik7Ci0gICAgRWxlbWVudCogZWxlbWVu
dCA9IFY4UHJveHk6OmNvbnZlcnRET01XcmFwcGVyVG9Ob2RlPEVsZW1lbnQ+KGFyZ3MuSG9sZGVy
KCkpOworICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRET01XcmFw
cGVyVG9Ob2RlPEVsZW1lbnQ+KGFyZ3MuSG9sZGVyKCkpOwogICAgIFN0cmluZyBuYW1lc3BhY2VV
UkkgPSB0b1dlYkNvcmVTdHJpbmdXaXRoTnVsbENoZWNrKGFyZ3NbMF0pOwogICAgIFN0cmluZyBx
dWFsaWZpZWROYW1lID0gdG9XZWJDb3JlU3RyaW5nKGFyZ3NbMV0pOwogICAgIFN0cmluZyB2YWx1
ZSA9IHRvV2ViQ29yZVN0cmluZyhhcmdzWzJdKTsKQEAgLTExMyw4ICsxMTMsOCBAQCBDQUxMQkFD
S19GVU5DX0RFQ0woRWxlbWVudFNldEF0dHJpYnV0ZU5vCiAgICAgaWYgKCFWOEF0dHI6Okhhc0lu
c3RhbmNlKGFyZ3NbMF0pKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihUWVBFX01JU01BVENI
X0VSUik7CiAKLSAgICBBdHRyKiBuZXdBdHRyID0gVjhQcm94eTo6Y29udmVydERPTVdyYXBwZXJU
b05vZGU8QXR0cj4oYXJnc1swXSk7Ci0gICAgRWxlbWVudCogZWxlbWVudCA9IFY4UHJveHk6OmNv
bnZlcnRET01XcmFwcGVyVG9Ob2RlPEVsZW1lbnQ+KGFyZ3MuSG9sZGVyKCkpOworICAgIEF0dHIq
IG5ld0F0dHIgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRET01XcmFwcGVyVG9Ob2RlPEF0dHI+KGFy
Z3NbMF0pOworICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRET01X
cmFwcGVyVG9Ob2RlPEVsZW1lbnQ+KGFyZ3MuSG9sZGVyKCkpOwogCiAgICAgaWYgKCFhbGxvd1Nl
dHRpbmdTcmNUb0phdmFzY3JpcHRVUkwoZWxlbWVudCwgbmV3QXR0ci0+bmFtZSgpLCBuZXdBdHRy
LT52YWx1ZSgpKSkKICAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKQEAgLTEyNCw3ICsx
MjQsNyBAQCBDQUxMQkFDS19GVU5DX0RFQ0woRWxlbWVudFNldEF0dHJpYnV0ZU5vCiAgICAgaWYg
KGVjKQogICAgICAgICB0aHJvd0Vycm9yKGVjKTsKIAotICAgIHJldHVybiBWOFByb3h5Ojpjb252
ZXJ0Tm9kZVRvVjhPYmplY3QocmVzdWx0LmdldCgpKTsKKyAgICByZXR1cm4gVjhET01XcmFwcGVy
Ojpjb252ZXJ0Tm9kZVRvVjhPYmplY3QocmVzdWx0LmdldCgpKTsKIH0KIAogc3RhdGljIGlubGlu
ZSBTdHJpbmcgdG9FdmVudFR5cGUodjg6OkxvY2FsPHY4OjpTdHJpbmc+IHZhbHVlKQpAQCAtMTM2
LDcgKzEzNiw3IEBAIHN0YXRpYyBpbmxpbmUgU3RyaW5nIHRvRXZlbnRUeXBlKHY4OjpMb2MKIAog
QUNDRVNTT1JfU0VUVEVSKEVsZW1lbnRFdmVudEhhbmRsZXIpCiB7Ci0gICAgTm9kZSogbm9kZSA9
IFY4UHJveHk6OmNvbnZlcnRET01XcmFwcGVyVG9Ob2RlPE5vZGU+KGluZm8uSG9sZGVyKCkpOwor
ICAgIE5vZGUqIG5vZGUgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRET01XcmFwcGVyVG9Ob2RlPE5v
ZGU+KGluZm8uSG9sZGVyKCkpOwogCiAgICAgU3RyaW5nIGV2ZW50VHlwZSA9IHRvRXZlbnRUeXBl
KG5hbWUpOwogCkBAIC0xNTksMTAgKzE1OSwxMCBAQCBBQ0NFU1NPUl9TRVRURVIoRWxlbWVudEV2
ZW50SGFuZGxlcikKIAogQUNDRVNTT1JfR0VUVEVSKEVsZW1lbnRFdmVudEhhbmRsZXIpCiB7Ci0g
ICAgTm9kZSogbm9kZSA9IFY4UHJveHk6OmNvbnZlcnRET01XcmFwcGVyVG9Ob2RlPE5vZGU+KGlu
Zm8uSG9sZGVyKCkpOworICAgIE5vZGUqIG5vZGUgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRET01X
cmFwcGVyVG9Ob2RlPE5vZGU+KGluZm8uSG9sZGVyKCkpOwogCiAgICAgRXZlbnRMaXN0ZW5lciog
bGlzdGVuZXIgPSBub2RlLT5nZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyKHRvRXZlbnRUeXBlKG5h
bWUpKTsKLSAgICByZXR1cm4gVjhQcm94eTo6Y29udmVydEV2ZW50TGlzdGVuZXJUb1Y4T2JqZWN0
KGxpc3RlbmVyKTsKKyAgICByZXR1cm4gVjhET01XcmFwcGVyOjpjb252ZXJ0RXZlbnRMaXN0ZW5l
clRvVjhPYmplY3QobGlzdGVuZXIpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4
OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEV2ZW50Q3VzdG9tLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEV2ZW50Q3VzdG9tLmNwcAkocmV2aXNp
b24gNDU2NTApCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEV2ZW50Q3VzdG9tLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDMsMzkgKzQzLDM5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogQUNDRVNTT1JfU0VUVEVSKEV2ZW50UmV0dXJuVmFsdWUpCiB7Ci0gICAgRXZlbnQqIGV2ZW50
ID0gVjhQcm94eTo6Y29udmVydERPTVdyYXBwZXJUb05hdGl2ZTxFdmVudD4oaW5mby5Ib2xkZXIo
KSk7CisgICAgRXZlbnQqIGV2ZW50ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0RE9NV3JhcHBlclRv
TmF0aXZlPEV2ZW50PihpbmZvLkhvbGRlcigpKTsKICAgICBldmVudC0+c2V0RGVmYXVsdFByZXZl
bnRlZCghdmFsdWUtPkJvb2xlYW5WYWx1ZSgpKTsKIH0KIAogQUNDRVNTT1JfR0VUVEVSKEV2ZW50
RGF0YVRyYW5zZmVyKQogewotICAgIEV2ZW50KiBldmVudCA9IFY4UHJveHk6OmNvbnZlcnRET01X
cmFwcGVyVG9OYXRpdmU8RXZlbnQ+KGluZm8uSG9sZGVyKCkpOworICAgIEV2ZW50KiBldmVudCA9
IFY4RE9NV3JhcHBlcjo6Y29udmVydERPTVdyYXBwZXJUb05hdGl2ZTxFdmVudD4oaW5mby5Ib2xk
ZXIoKSk7CiAKICAgICBpZiAoZXZlbnQtPmlzRHJhZ0V2ZW50KCkpCi0gICAgICAgIHJldHVybiBW
OFByb3h5Ojpjb252ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6OkNMSVBCT0FSRCwgc3RhdGlj
X2Nhc3Q8TW91c2VFdmVudCo+KGV2ZW50KS0+Y2xpcGJvYXJkKCkpOworICAgICAgICByZXR1cm4g
VjhET01XcmFwcGVyOjpjb252ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6OkNMSVBCT0FSRCwg
c3RhdGljX2Nhc3Q8TW91c2VFdmVudCo+KGV2ZW50KS0+Y2xpcGJvYXJkKCkpOwogCiAgICAgcmV0
dXJuIHY4OjpVbmRlZmluZWQoKTsKIH0KIAogQUNDRVNTT1JfR0VUVEVSKEV2ZW50Q2xpcGJvYXJk
RGF0YSkKIHsKLSAgICBFdmVudCogZXZlbnQgPSBWOFByb3h5Ojpjb252ZXJ0RE9NV3JhcHBlclRv
TmF0aXZlPEV2ZW50PihpbmZvLkhvbGRlcigpKTsKKyAgICBFdmVudCogZXZlbnQgPSBWOERPTVdy
YXBwZXI6OmNvbnZlcnRET01XcmFwcGVyVG9OYXRpdmU8RXZlbnQ+KGluZm8uSG9sZGVyKCkpOwog
CiAgICAgaWYgKGV2ZW50LT5pc0NsaXBib2FyZEV2ZW50KCkpCi0gICAgICAgIHJldHVybiBWOFBy
b3h5Ojpjb252ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6OkNMSVBCT0FSRCwgc3RhdGljX2Nh
c3Q8Q2xpcGJvYXJkRXZlbnQqPihldmVudCktPmNsaXBib2FyZCgpKTsKKyAgICAgICAgcmV0dXJu
IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvVjhPYmplY3QoVjhDbGFzc0luZGV4OjpDTElQQk9BUkQs
IHN0YXRpY19jYXN0PENsaXBib2FyZEV2ZW50Kj4oZXZlbnQpLT5jbGlwYm9hcmQoKSk7CiAKICAg
ICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwogfQogCiBBQ0NFU1NPUl9HRVRURVIoRXZlbnRTcmNF
bGVtZW50KQogewotICAgIEV2ZW50KiBldmVudCA9IFY4UHJveHk6OmNvbnZlcnRET01XcmFwcGVy
VG9OYXRpdmU8RXZlbnQ+KGluZm8uSG9sZGVyKCkpOwotICAgIHJldHVybiBWOFByb3h5Ojpjb252
ZXJ0RXZlbnRUYXJnZXRUb1Y4T2JqZWN0KGV2ZW50LT50YXJnZXQoKSk7CisgICAgRXZlbnQqIGV2
ZW50ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0RE9NV3JhcHBlclRvTmF0aXZlPEV2ZW50PihpbmZv
LkhvbGRlcigpKTsKKyAgICByZXR1cm4gVjhET01XcmFwcGVyOjpjb252ZXJ0RXZlbnRUYXJnZXRU
b1Y4T2JqZWN0KGV2ZW50LT50YXJnZXQoKSk7CiB9CiAKIEFDQ0VTU09SX0dFVFRFUihFdmVudFJl
dHVyblZhbHVlKQogewotICAgIEV2ZW50KiBldmVudCA9IFY4UHJveHk6OmNvbnZlcnRET01XcmFw
cGVyVG9OYXRpdmU8RXZlbnQ+KGluZm8uSG9sZGVyKCkpOworICAgIEV2ZW50KiBldmVudCA9IFY4
RE9NV3JhcHBlcjo6Y29udmVydERPTVdyYXBwZXJUb05hdGl2ZTxFdmVudD4oaW5mby5Ib2xkZXIo
KSk7CiAgICAgcmV0dXJuIGV2ZW50LT5kZWZhdWx0UHJldmVudGVkKCkgPyB2ODo6RmFsc2UoKSA6
IHY4OjpUcnVlKCk7CiB9CiAKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRN
TEF1ZGlvRWxlbWVudENvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOEhUTUxBdWRpb0VsZW1lbnRDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9u
IDQ1NjUwKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MQXVkaW9FbGVtZW50
Q29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NSwxNSArNTUsMTUgQEAgQ0FMTEJB
Q0tfRlVOQ19ERUNMKEhUTUxBdWRpb0VsZW1lbnRDb25zdAogCiAgICAgLy8gTWFrZSBzdXJlIHRo
ZSBkb2N1bWVudCBpcyBhZGRlZCB0byB0aGUgRE9NIE5vZGUgbWFwLiBPdGhlcndpc2UsIHRoZSBI
VE1MQXVkaW9FbGVtZW50IGluc3RhbmNlCiAgICAgLy8gbWF5IGVuZCB1cCBiZWluZyB0aGUgb25s
eSBub2RlIGluIHRoZSBtYXAgYW5kIGdldCBnYXJiYWdlLWNjb2xsZWN0ZWQgcHJlbWF0dXJlbHku
Ci0gICAgVjhQcm94eTo6Y29udmVydE5vZGVUb1Y4T2JqZWN0KGRvY3VtZW50KTsKKyAgICBWOERP
TVdyYXBwZXI6OmNvbnZlcnROb2RlVG9WOE9iamVjdChkb2N1bWVudCk7CiAKICAgICBSZWZQdHI8
SFRNTEF1ZGlvRWxlbWVudD4gYXVkaW8gPSBuZXcgSFRNTEF1ZGlvRWxlbWVudChIVE1MTmFtZXM6
OmF1ZGlvVGFnLCBWOFByb3h5OjpyZXRyaWV2ZUZyYW1lKCktPmRvY3VtZW50KCkpOwogICAgIGlm
IChhcmdzLkxlbmd0aCgpID4gMCkKICAgICAgICAgYXVkaW8tPnNldFNyYyh0b1dlYkNvcmVTdHJp
bmcoYXJnc1swXSkpOwogCi0gICAgVjhQcm94eTo6c2V0RE9NV3JhcHBlcihhcmdzLkhvbGRlcigp
LCBWOENsYXNzSW5kZXg6OlRvSW50KFY4Q2xhc3NJbmRleDo6Tk9ERSksIGF1ZGlvLmdldCgpKTsK
KyAgICBWOERPTVdyYXBwZXI6OnNldERPTVdyYXBwZXIoYXJncy5Ib2xkZXIoKSwgVjhDbGFzc0lu
ZGV4OjpUb0ludChWOENsYXNzSW5kZXg6Ok5PREUpLCBhdWRpby5nZXQoKSk7CiAgICAgYXVkaW8t
PnJlZigpOwotICAgIFY4UHJveHk6OnNldEpTV3JhcHBlckZvckRPTU5vZGUoYXVkaW8uZ2V0KCks
IHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+OjpOZXcoYXJncy5Ib2xkZXIoKSkpOworICAgIFY4
RE9NV3JhcHBlcjo6c2V0SlNXcmFwcGVyRm9yRE9NTm9kZShhdWRpby5nZXQoKSwgdjg6OlBlcnNp
c3RlbnQ8djg6Ok9iamVjdD46Ok5ldyhhcmdzLkhvbGRlcigpKSk7CiAgICAgcmV0dXJuIGFyZ3Mu
SG9sZGVyKCk7CiB9CiAKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTENh
bnZhc0VsZW1lbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4SFRNTENhbnZhc0VsZW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiA0NTY1MCkKKysr
IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTENhbnZhc0VsZW1lbnRDdXN0b20uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00MiwxMCArNDIsMTAgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKEhU
TUxDYW52YXNFbGVtZW50R2V0QwogewogICAgIElOQ19TVEFUUygiRE9NLkhUTUxDYW52YXNFbGVt
ZW50LmNvbnRleHQiKTsKICAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gaG9sZGVyID0gYXJncy5I
b2xkZXIoKTsKLSAgICBIVE1MQ2FudmFzRWxlbWVudCogaW1wID0gVjhQcm94eTo6Y29udmVydERP
TVdyYXBwZXJUb05vZGU8SFRNTENhbnZhc0VsZW1lbnQ+KGhvbGRlcik7CisgICAgSFRNTENhbnZh
c0VsZW1lbnQqIGltcCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydERPTVdyYXBwZXJUb05vZGU8SFRN
TENhbnZhc0VsZW1lbnQ+KGhvbGRlcik7CiAgICAgU3RyaW5nIGNvbnRleHRJZCA9IHRvV2ViQ29y
ZVN0cmluZyhhcmdzWzBdKTsKICAgICBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQqIHJlc3VsdCA9
IGltcC0+Z2V0Q29udGV4dChjb250ZXh0SWQpOwotICAgIHJldHVybiBWOFByb3h5Ojpjb252ZXJ0
VG9WOE9iamVjdChWOENsYXNzSW5kZXg6OkNBTlZBU1JFTkRFUklOR0NPTlRFWFQyRCwgcmVzdWx0
KTsKKyAgICByZXR1cm4gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5k
ZXg6OkNBTlZBU1JFTkRFUklOR0NPTlRFWFQyRCwgcmVzdWx0KTsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MQ29sbGVj
dGlvbkN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20v
VjhIVE1MQ29sbGVjdGlvbkN1c3RvbS5jcHAJKHJldmlzaW9uIDQ1NjUwKQorKysgV2ViQ29yZS9i
aW5kaW5ncy92OC9jdXN0b20vVjhIVE1MQ29sbGVjdGlvbkN1c3RvbS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ3LDEwICs0NywxMCBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGdldE5h
bWVkSXRlCiAgICAgICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsKIAogICAgIGlm
IChuYW1lZEl0ZW1zLnNpemUoKSA9PSAxKQotICAgICAgICByZXR1cm4gVjhQcm94eTo6Y29udmVy
dE5vZGVUb1Y4T2JqZWN0KG5hbWVkSXRlbXMuYXQoMCkuZ2V0KCkpOworICAgICAgICByZXR1cm4g
VjhET01XcmFwcGVyOjpjb252ZXJ0Tm9kZVRvVjhPYmplY3QobmFtZWRJdGVtcy5hdCgwKS5nZXQo
KSk7CiAKICAgICBOb2RlTGlzdCogbGlzdCA9IG5ldyBWOE5hbWVkTm9kZXNDb2xsZWN0aW9uKG5h
bWVkSXRlbXMpOwotICAgIHJldHVybiBWOFByb3h5Ojpjb252ZXJ0VG9WOE9iamVjdChWOENsYXNz
SW5kZXg6Ok5PREVMSVNULCBsaXN0KTsKKyAgICByZXR1cm4gVjhET01XcmFwcGVyOjpjb252ZXJ0
VG9WOE9iamVjdChWOENsYXNzSW5kZXg6Ok5PREVMSVNULCBsaXN0KTsKIH0KIAogc3RhdGljIHY4
OjpIYW5kbGU8djg6OlZhbHVlPiBnZXRJdGVtKEhUTUxDb2xsZWN0aW9uKiBjb2xsZWN0aW9uLCB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gYXJndW1lbnQpCkBAIC02Niw3ICs2Niw3IEBAIHN0YXRpYyB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gZ2V0SXRlbShIVE0KICAgICB9CiAKICAgICBSZWZQdHI8Tm9k
ZT4gcmVzdWx0ID0gY29sbGVjdGlvbi0+aXRlbShpbmRleC0+VWludDMyVmFsdWUoKSk7Ci0gICAg
cmV0dXJuIFY4UHJveHk6OmNvbnZlcnROb2RlVG9WOE9iamVjdChyZXN1bHQuZ2V0KCkpOworICAg
IHJldHVybiBWOERPTVdyYXBwZXI6OmNvbnZlcnROb2RlVG9WOE9iamVjdChyZXN1bHQuZ2V0KCkp
OwogfQogCiBOQU1FRF9QUk9QRVJUWV9HRVRURVIoSFRNTENvbGxlY3Rpb24pCkBAIC04NCwyMSAr
ODQsMjEgQEAgTkFNRURfUFJPUEVSVFlfR0VUVEVSKEhUTUxDb2xsZWN0aW9uKQogICAgICAgICBy
ZXR1cm4gdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCk7CiAKICAgICAvLyBGaW5hbGx5LCBzZWFyY2gg
dGhlIERPTSBzdHJ1Y3R1cmUuCi0gICAgSFRNTENvbGxlY3Rpb24qIGltcCA9IFY4UHJveHk6OmNv
bnZlcnRUb05hdGl2ZU9iamVjdDxIVE1MQ29sbGVjdGlvbj4oVjhDbGFzc0luZGV4OjpIVE1MQ09M
TEVDVElPTiwgaW5mby5Ib2xkZXIoKSk7CisgICAgSFRNTENvbGxlY3Rpb24qIGltcCA9IFY4RE9N
V3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PEhUTUxDb2xsZWN0aW9uPihWOENsYXNzSW5k
ZXg6OkhUTUxDT0xMRUNUSU9OLCBpbmZvLkhvbGRlcigpKTsKICAgICByZXR1cm4gZ2V0TmFtZWRJ
dGVtcyhpbXAsIHY4U3RyaW5nVG9BdG9taWNXZWJDb3JlU3RyaW5nKG5hbWUpKTsKIH0KIAogQ0FM
TEJBQ0tfRlVOQ19ERUNMKEhUTUxDb2xsZWN0aW9uSXRlbSkKIHsKICAgICBJTkNfU1RBVFMoIkRP
TS5IVE1MQ29sbGVjdGlvbi5pdGVtKCkiKTsKLSAgICBIVE1MQ29sbGVjdGlvbiogaW1wID0gVjhQ
cm94eTo6Y29udmVydFRvTmF0aXZlT2JqZWN0PEhUTUxDb2xsZWN0aW9uPihWOENsYXNzSW5kZXg6
OkhUTUxDT0xMRUNUSU9OLCBhcmdzLkhvbGRlcigpKTsKKyAgICBIVE1MQ29sbGVjdGlvbiogaW1w
ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8SFRNTENvbGxlY3Rpb24+KFY4
Q2xhc3NJbmRleDo6SFRNTENPTExFQ1RJT04sIGFyZ3MuSG9sZGVyKCkpOwogICAgIHJldHVybiBn
ZXRJdGVtKGltcCwgYXJnc1swXSk7CiB9CiAKIENBTExCQUNLX0ZVTkNfREVDTChIVE1MQ29sbGVj
dGlvbk5hbWVkSXRlbSkKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5IVE1MQ29sbGVjdGlvbi5uYW1l
ZEl0ZW0oKSIpOwotICAgIEhUTUxDb2xsZWN0aW9uKiBpbXAgPSBWOFByb3h5Ojpjb252ZXJ0VG9O
YXRpdmVPYmplY3Q8SFRNTENvbGxlY3Rpb24+KFY4Q2xhc3NJbmRleDo6SFRNTENPTExFQ1RJT04s
IGFyZ3MuSG9sZGVyKCkpOworICAgIEhUTUxDb2xsZWN0aW9uKiBpbXAgPSBWOERPTVdyYXBwZXI6
OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxIVE1MQ29sbGVjdGlvbj4oVjhDbGFzc0luZGV4OjpIVE1M
Q09MTEVDVElPTiwgYXJncy5Ib2xkZXIoKSk7CiAgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHJl
c3VsdCA9IGdldE5hbWVkSXRlbXMoaW1wLCB0b1dlYkNvcmVTdHJpbmcoYXJnc1swXSkpOwogCiAg
ICAgaWYgKHJlc3VsdC5Jc0VtcHR5KCkpCkBAIC0xMTMsNyArMTEzLDcgQEAgQ0FMTEJBQ0tfRlVO
Q19ERUNMKEhUTUxDb2xsZWN0aW9uQ2FsbEFzRgogICAgIGlmIChhcmdzLkxlbmd0aCgpIDwgMSkK
ICAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKIAotICAgIEhUTUxDb2xsZWN0aW9uKiBp
bXAgPSBWOFByb3h5Ojpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8SFRNTENvbGxlY3Rpb24+KFY4Q2xh
c3NJbmRleDo6SFRNTENPTExFQ1RJT04sIGFyZ3MuSG9sZGVyKCkpOworICAgIEhUTUxDb2xsZWN0
aW9uKiBpbXAgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxIVE1MQ29sbGVj
dGlvbj4oVjhDbGFzc0luZGV4OjpIVE1MQ09MTEVDVElPTiwgYXJncy5Ib2xkZXIoKSk7CiAKICAg
ICBpZiAoYXJncy5MZW5ndGgoKSA9PSAxKQogICAgICAgICByZXR1cm4gZ2V0SXRlbShpbXAsIGFy
Z3NbMF0pOwpAQCAtMTI4LDcgKzEyOCw3IEBAIENBTExCQUNLX0ZVTkNfREVDTChIVE1MQ29sbGVj
dGlvbkNhbGxBc0YKICAgICBOb2RlKiBub2RlID0gaW1wLT5uYW1lZEl0ZW0obmFtZSk7CiAgICAg
d2hpbGUgKG5vZGUpIHsKICAgICAgICAgaWYgKCFjdXJyZW50KQotICAgICAgICAgICAgcmV0dXJu
IFY4UHJveHk6OmNvbnZlcnROb2RlVG9WOE9iamVjdChub2RlKTsKKyAgICAgICAgICAgIHJldHVy
biBWOERPTVdyYXBwZXI6OmNvbnZlcnROb2RlVG9WOE9iamVjdChub2RlKTsKIAogICAgICAgICBu
b2RlID0gaW1wLT5uZXh0TmFtZWRJdGVtKG5hbWUpOwogICAgICAgICBjdXJyZW50LS07CkluZGV4
OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxEb2N1bWVudEN1c3RvbS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MRG9jdW1lbnRDdXN0
b20uY3BwCShyZXZpc2lvbiA0NTY1MCkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4
SFRNTERvY3VtZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzgsNyArNzgsNyBAQCBO
QU1FRF9QUk9QRVJUWV9HRVRURVIoSFRNTERvY3VtZW50KQogICAgICAgICAgICAgcmV0dXJuIHZh
bHVlOwogICAgIH0KIAotICAgIEhUTUxEb2N1bWVudCogaHRtbERvY3VtZW50ID0gVjhQcm94eTo6
Y29udmVydERPTVdyYXBwZXJUb05vZGU8SFRNTERvY3VtZW50PihpbmZvLkhvbGRlcigpKTsKKyAg
ICBIVE1MRG9jdW1lbnQqIGh0bWxEb2N1bWVudCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydERPTVdy
YXBwZXJUb05vZGU8SFRNTERvY3VtZW50PihpbmZvLkhvbGRlcigpKTsKIAogICAgIC8vIEZhc3Qg
Y2FzZSBmb3IgbmFtZWQgZWxlbWVudHMgdGhhdCBhcmUgbm90IHRoZXJlLgogICAgIGlmICghaHRt
bERvY3VtZW50LT5oYXNOYW1lZEl0ZW0oa2V5LmltcGwoKSkgJiYgIWh0bWxEb2N1bWVudC0+aGFz
RXh0cmFOYW1lZEl0ZW0oa2V5LmltcGwoKSkpCkBAIC05MiwxMiArOTIsMTIgQEAgTkFNRURfUFJP
UEVSVFlfR0VUVEVSKEhUTUxEb2N1bWVudCkKICAgICAgICAgTm9kZSogbm9kZSA9IGl0ZW1zLT5m
aXJzdEl0ZW0oKTsKICAgICAgICAgRnJhbWUqIGZyYW1lID0gMDsKICAgICAgICAgaWYgKG5vZGUt
Pmhhc1RhZ05hbWUoSFRNTE5hbWVzOjppZnJhbWVUYWcpICYmIChmcmFtZSA9IHN0YXRpY19jYXN0
PEhUTUxJRnJhbWVFbGVtZW50Kj4obm9kZSktPmNvbnRlbnRGcmFtZSgpKSkKLSAgICAgICAgICAg
IHJldHVybiBWOFByb3h5Ojpjb252ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6OkRPTVdJTkRP
VywgZnJhbWUtPmRvbVdpbmRvdygpKTsKKyAgICAgICAgICAgIHJldHVybiBWOERPTVdyYXBwZXI6
OmNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6RE9NV0lORE9XLCBmcmFtZS0+ZG9tV2lu
ZG93KCkpOwogCi0gICAgICAgIHJldHVybiBWOFByb3h5Ojpjb252ZXJ0Tm9kZVRvVjhPYmplY3Qo
bm9kZSk7CisgICAgICAgIHJldHVybiBWOERPTVdyYXBwZXI6OmNvbnZlcnROb2RlVG9WOE9iamVj
dChub2RlKTsKICAgICB9CiAKLSAgICByZXR1cm4gVjhQcm94eTo6Y29udmVydFRvVjhPYmplY3Qo
VjhDbGFzc0luZGV4OjpIVE1MQ09MTEVDVElPTiwgaXRlbXMuZ2V0KCkpOworICAgIHJldHVybiBW
OERPTVdyYXBwZXI6OmNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6SFRNTENPTExFQ1RJ
T04sIGl0ZW1zLmdldCgpKTsKIH0KIAogLy8gSFRNTERvY3VtZW50IC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTExNyw3
ICsxMTcsNyBAQCBzdGF0aWMgU3RyaW5nIHdyaXRlSGVscGVyR2V0U3RyaW5nKGNvbnN0CiBDQUxM
QkFDS19GVU5DX0RFQ0woSFRNTERvY3VtZW50V3JpdGUpCiB7CiAgICAgSU5DX1NUQVRTKCJET00u
SFRNTERvY3VtZW50LndyaXRlKCkiKTsKLSAgICBIVE1MRG9jdW1lbnQqIGh0bWxEb2N1bWVudCA9
IFY4UHJveHk6OmNvbnZlcnRET01XcmFwcGVyVG9Ob2RlPEhUTUxEb2N1bWVudD4oYXJncy5Ib2xk
ZXIoKSk7CisgICAgSFRNTERvY3VtZW50KiBodG1sRG9jdW1lbnQgPSBWOERPTVdyYXBwZXI6OmNv
bnZlcnRET01XcmFwcGVyVG9Ob2RlPEhUTUxEb2N1bWVudD4oYXJncy5Ib2xkZXIoKSk7CiAgICAg
RnJhbWUqIGZyYW1lID0gVjhQcm94eTo6cmV0cmlldmVGcmFtZUZvckNhbGxpbmdDb250ZXh0KCk7
CiAgICAgQVNTRVJUKGZyYW1lKTsKICAgICBodG1sRG9jdW1lbnQtPndyaXRlKHdyaXRlSGVscGVy
R2V0U3RyaW5nKGFyZ3MpLCBmcmFtZS0+ZG9jdW1lbnQoKSk7CkBAIC0xMjcsNyArMTI3LDcgQEAg
Q0FMTEJBQ0tfRlVOQ19ERUNMKEhUTUxEb2N1bWVudFdyaXRlKQogQ0FMTEJBQ0tfRlVOQ19ERUNM
KEhUTUxEb2N1bWVudFdyaXRlbG4pCiB7CiAgICAgSU5DX1NUQVRTKCJET00uSFRNTERvY3VtZW50
LndyaXRlbG4oKSIpOwotICAgIEhUTUxEb2N1bWVudCogaHRtbERvY3VtZW50ID0gVjhQcm94eTo6
Y29udmVydERPTVdyYXBwZXJUb05vZGU8SFRNTERvY3VtZW50PihhcmdzLkhvbGRlcigpKTsKKyAg
ICBIVE1MRG9jdW1lbnQqIGh0bWxEb2N1bWVudCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydERPTVdy
YXBwZXJUb05vZGU8SFRNTERvY3VtZW50PihhcmdzLkhvbGRlcigpKTsKICAgICBGcmFtZSogZnJh
bWUgPSBWOFByb3h5OjpyZXRyaWV2ZUZyYW1lRm9yQ2FsbGluZ0NvbnRleHQoKTsKICAgICBBU1NF
UlQoZnJhbWUpOwogICAgIGh0bWxEb2N1bWVudC0+d3JpdGVsbih3cml0ZUhlbHBlckdldFN0cmlu
ZyhhcmdzKSwgZnJhbWUtPmRvY3VtZW50KCkpOwpAQCAtMTM3LDcgKzEzNyw3IEBAIENBTExCQUNL
X0ZVTkNfREVDTChIVE1MRG9jdW1lbnRXcml0ZWxuKQogQ0FMTEJBQ0tfRlVOQ19ERUNMKEhUTUxE
b2N1bWVudE9wZW4pCiB7CiAgICAgSU5DX1NUQVRTKCJET00uSFRNTERvY3VtZW50Lm9wZW4oKSIp
OwotICAgIEhUTUxEb2N1bWVudCogaHRtbERvY3VtZW50ID0gVjhQcm94eTo6Y29udmVydERPTVdy
YXBwZXJUb05vZGU8SFRNTERvY3VtZW50PihhcmdzLkhvbGRlcigpKTsKKyAgICBIVE1MRG9jdW1l
bnQqIGh0bWxEb2N1bWVudCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydERPTVdyYXBwZXJUb05vZGU8
SFRNTERvY3VtZW50PihhcmdzLkhvbGRlcigpKTsKIAogICAgIGlmIChhcmdzLkxlbmd0aCgpID4g
MikgewogICAgICAgICBpZiAoRnJhbWUqIGZyYW1lID0gaHRtbERvY3VtZW50LT5mcmFtZSgpKSB7
CkBAIC0xNzksOSArMTc5LDkgQEAgQUNDRVNTT1JfR0VUVEVSKEhUTUxEb2N1bWVudEFsbCkKICAg
ICBJTkNfU1RBVFMoIkRPTS5IVE1MRG9jdW1lbnQuYWxsLl9nZXQiKTsKICAgICB2ODo6SGFuZGxl
U2NvcGUgc2NvcGU7CiAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBob2xkZXIgPSBpbmZvLkhv
bGRlcigpOwotICAgIEhUTUxEb2N1bWVudCogaHRtbERvY3VtZW50ID0gVjhQcm94eTo6Y29udmVy
dERPTVdyYXBwZXJUb05vZGU8SFRNTERvY3VtZW50Pihob2xkZXIpOworICAgIEhUTUxEb2N1bWVu
dCogaHRtbERvY3VtZW50ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0RE9NV3JhcHBlclRvTm9kZTxI
VE1MRG9jdW1lbnQ+KGhvbGRlcik7CiAgICAgUmVmUHRyPEhUTUxDb2xsZWN0aW9uPiBjb2xsZWN0
aW9uID0gV1RGOjpnZXRQdHIoaHRtbERvY3VtZW50LT5hbGwoKSk7Ci0gICAgcmV0dXJuIFY4UHJv
eHk6OmNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6SFRNTENPTExFQ1RJT04sIFdURjo6
Z2V0UHRyKGNvbGxlY3Rpb24pKTsKKyAgICByZXR1cm4gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9W
OE9iamVjdChWOENsYXNzSW5kZXg6OkhUTUxDT0xMRUNUSU9OLCBXVEY6OmdldFB0cihjb2xsZWN0
aW9uKSk7CiB9CiAKIEFDQ0VTU09SX1NFVFRFUihIVE1MRG9jdW1lbnRBbGwpCkluZGV4OiBXZWJD
b3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxGb3JtRWxlbWVudEN1c3RvbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MRm9ybUVsZW1lbnRDdXN0
b20uY3BwCShyZXZpc2lvbiA0NTY1MCkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4
SFRNTEZvcm1FbGVtZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsMTkgKzQyLDE5
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIElOREVYRURfUFJPUEVSVFlfR0VUVEVSKEhUTUxGb3Jt
RWxlbWVudCkKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5IVE1MRm9ybUVsZW1lbnQuSW5kZXhlZFBy
b3BlcnR5R2V0dGVyIik7Ci0gICAgSFRNTEZvcm1FbGVtZW50KiBmb3JtID0gVjhQcm94eTo6Y29u
dmVydERPTVdyYXBwZXJUb05vZGU8SFRNTEZvcm1FbGVtZW50PihpbmZvLkhvbGRlcigpKTsKKyAg
ICBIVE1MRm9ybUVsZW1lbnQqIGZvcm0gPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRET01XcmFwcGVy
VG9Ob2RlPEhUTUxGb3JtRWxlbWVudD4oaW5mby5Ib2xkZXIoKSk7CiAgICAgCiAgICAgUmVmUHRy
PE5vZGU+IGZvcm1FbGVtZW50ID0gZm9ybS0+ZWxlbWVudHMoKS0+aXRlbShpbmRleCk7CiAgICAg
aWYgKCFmb3JtRWxlbWVudCkKICAgICAgICAgcmV0dXJuIG5vdEhhbmRsZWRCeUludGVyY2VwdG9y
KCk7Ci0gICAgcmV0dXJuIFY4UHJveHk6OmNvbnZlcnROb2RlVG9WOE9iamVjdChmb3JtRWxlbWVu
dC5nZXQoKSk7CisgICAgcmV0dXJuIFY4RE9NV3JhcHBlcjo6Y29udmVydE5vZGVUb1Y4T2JqZWN0
KGZvcm1FbGVtZW50LmdldCgpKTsKIH0KIAogCiBOQU1FRF9QUk9QRVJUWV9HRVRURVIoSFRNTEZv
cm1FbGVtZW50KQogewogICAgIElOQ19TVEFUUygiRE9NLkhUTUxGb3JtRWxlbWVudC5OYW1lZFBy
b3BlcnR5R2V0dGVyIik7Ci0gICAgSFRNTEZvcm1FbGVtZW50KiBpbXAgPSBWOFByb3h5Ojpjb252
ZXJ0RE9NV3JhcHBlclRvTm9kZTxIVE1MRm9ybUVsZW1lbnQ+KGluZm8uSG9sZGVyKCkpOworICAg
IEhUTUxGb3JtRWxlbWVudCogaW1wID0gVjhET01XcmFwcGVyOjpjb252ZXJ0RE9NV3JhcHBlclRv
Tm9kZTxIVE1MRm9ybUVsZW1lbnQ+KGluZm8uSG9sZGVyKCkpOwogICAgIEF0b21pY1N0cmluZyB2
ID0gdjhTdHJpbmdUb0F0b21pY1dlYkNvcmVTdHJpbmcobmFtZSk7CiAKICAgICAvLyBDYWxsIGdl
dE5hbWVkRWxlbWVudHMgdHdpY2UsIGZpcnN0IHRpbWUgY2hlY2sgaWYgaXQgaGFzIGEgdmFsdWUK
QEAgLTc0LDE1ICs3NCwxNSBAQCBOQU1FRF9QUk9QRVJUWV9HRVRURVIoSFRNTEZvcm1FbGVtZW50
KQogICAgIEFTU0VSVCghZWxlbWVudHMuaXNFbXB0eSgpKTsKIAogICAgIGlmIChlbGVtZW50cy5z
aXplKCkgPT0gMSkKLSAgICAgICAgcmV0dXJuIFY4UHJveHk6OmNvbnZlcnROb2RlVG9WOE9iamVj
dChlbGVtZW50cy5hdCgwKS5nZXQoKSk7CisgICAgICAgIHJldHVybiBWOERPTVdyYXBwZXI6OmNv
bnZlcnROb2RlVG9WOE9iamVjdChlbGVtZW50cy5hdCgwKS5nZXQoKSk7CiAKICAgICBOb2RlTGlz
dCogY29sbGVjdGlvbiA9IG5ldyBWOE5hbWVkTm9kZXNDb2xsZWN0aW9uKGVsZW1lbnRzKTsKLSAg
ICByZXR1cm4gVjhQcm94eTo6Y29udmVydFRvVjhPYmplY3QoVjhDbGFzc0luZGV4OjpOT0RFTElT
VCwgY29sbGVjdGlvbik7CisgICAgcmV0dXJuIFY4RE9NV3JhcHBlcjo6Y29udmVydFRvVjhPYmpl
Y3QoVjhDbGFzc0luZGV4OjpOT0RFTElTVCwgY29sbGVjdGlvbik7CiB9CiAgICAgCiBDQUxMQkFD
S19GVU5DX0RFQ0woSFRNTEZvcm1FbGVtZW50U3VibWl0KSB7CiAgICAgSU5DX1NUQVRTKCJET00u
SFRNTEZvcm1FbGVtZW50LnN1Ym1pdCgpIik7Ci0gICAgSFRNTEZvcm1FbGVtZW50KiBmb3JtID0g
VjhQcm94eTo6Y29udmVydERPTVdyYXBwZXJUb05hdGl2ZTxIVE1MRm9ybUVsZW1lbnQ+KGFyZ3Mu
SG9sZGVyKCkpOworICAgIEhUTUxGb3JtRWxlbWVudCogZm9ybSA9IFY4RE9NV3JhcHBlcjo6Y29u
dmVydERPTVdyYXBwZXJUb05hdGl2ZTxIVE1MRm9ybUVsZW1lbnQ+KGFyZ3MuSG9sZGVyKCkpOwog
ICAgIGZvcm0tPnN1Ym1pdCgwLCBmYWxzZSwgZmFsc2UpOwogICAgIHJldHVybiB2ODo6VW5kZWZp
bmVkKCk7CiB9CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxGcmFtZUVs
ZW1lbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9t
L1Y4SFRNTEZyYW1lRWxlbWVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDQ1NjUwKQorKysgV2ViQ29y
ZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MRnJhbWVFbGVtZW50Q3VzdG9tLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzksNyArMzksNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIEFDQ0VTU09S
X1NFVFRFUihIVE1MRnJhbWVFbGVtZW50U3JjKQogewotICAgIEhUTUxGcmFtZUVsZW1lbnQqIGZy
YW1lID0gVjhQcm94eTo6Y29udmVydERPTVdyYXBwZXJUb05vZGU8SFRNTEZyYW1lRWxlbWVudD4o
aW5mby5Ib2xkZXIoKSk7CisgICAgSFRNTEZyYW1lRWxlbWVudCogZnJhbWUgPSBWOERPTVdyYXBw
ZXI6OmNvbnZlcnRET01XcmFwcGVyVG9Ob2RlPEhUTUxGcmFtZUVsZW1lbnQ+KGluZm8uSG9sZGVy
KCkpOwogICAgIFN0cmluZyBzcmNWYWx1ZSA9IHRvV2ViQ29yZVN0cmluZ1dpdGhOdWxsQ2hlY2so
dmFsdWUpOwogCiAgICAgaWYgKCFhbGxvd1NldHRpbmdGcmFtZVNyY1RvSmF2YXNjcmlwdFVybChm
cmFtZSwgc3JjVmFsdWUpKQpAQCAtNTAsNyArNTAsNyBAQCBBQ0NFU1NPUl9TRVRURVIoSFRNTEZy
YW1lRWxlbWVudFNyYykKIAogQUNDRVNTT1JfU0VUVEVSKEhUTUxGcmFtZUVsZW1lbnRMb2NhdGlv
bikKIHsKLSAgICBIVE1MRnJhbWVFbGVtZW50KiBmcmFtZSA9IFY4UHJveHk6OmNvbnZlcnRET01X
cmFwcGVyVG9Ob2RlPEhUTUxGcmFtZUVsZW1lbnQ+KGluZm8uSG9sZGVyKCkpOworICAgIEhUTUxG
cmFtZUVsZW1lbnQqIGZyYW1lID0gVjhET01XcmFwcGVyOjpjb252ZXJ0RE9NV3JhcHBlclRvTm9k
ZTxIVE1MRnJhbWVFbGVtZW50PihpbmZvLkhvbGRlcigpKTsKICAgICBTdHJpbmcgbG9jYXRpb25W
YWx1ZSA9IHRvV2ViQ29yZVN0cmluZ1dpdGhOdWxsQ2hlY2sodmFsdWUpOwogCiAgICAgaWYgKCFh
bGxvd1NldHRpbmdGcmFtZVNyY1RvSmF2YXNjcmlwdFVybChmcmFtZSwgbG9jYXRpb25WYWx1ZSkp
CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxGcmFtZVNldEVsZW1lbnRD
dXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRN
TEZyYW1lU2V0RWxlbWVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDQ1NjUwKQorKysgV2ViQ29yZS9i
aW5kaW5ncy92OC9jdXN0b20vVjhIVE1MRnJhbWVTZXRFbGVtZW50Q3VzdG9tLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDcsMTQgKzQ3LDE0IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIE5BTUVEX1BS
T1BFUlRZX0dFVFRFUihIVE1MRnJhbWVTZXRFbGVtZW50KQogewogICAgIElOQ19TVEFUUygiRE9N
LkhUTUxGcmFtZVNldEVsZW1lbnQuTmFtZWRQcm9wZXJ0eUdldHRlciIpOwotICAgIEhUTUxGcmFt
ZVNldEVsZW1lbnQqIGltcCA9IFY4UHJveHk6OmNvbnZlcnRET01XcmFwcGVyVG9Ob2RlPEhUTUxG
cmFtZVNldEVsZW1lbnQ+KGluZm8uSG9sZGVyKCkpOworICAgIEhUTUxGcmFtZVNldEVsZW1lbnQq
IGltcCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydERPTVdyYXBwZXJUb05vZGU8SFRNTEZyYW1lU2V0
RWxlbWVudD4oaW5mby5Ib2xkZXIoKSk7CiAgICAgTm9kZSogZnJhbWVOb2RlID0gaW1wLT5jaGls
ZHJlbigpLT5uYW1lZEl0ZW0odjhTdHJpbmdUb0F0b21pY1dlYkNvcmVTdHJpbmcobmFtZSkpOwog
ICAgIGlmIChmcmFtZU5vZGUgJiYgZnJhbWVOb2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZnJh
bWVUYWcpKSB7CiAgICAgICAgIERvY3VtZW50KiBkb2MgPSBzdGF0aWNfY2FzdDxIVE1MRnJhbWVF
bGVtZW50Kj4oZnJhbWVOb2RlKS0+Y29udGVudERvY3VtZW50KCk7CiAgICAgICAgIGlmICghZG9j
KQogICAgICAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKICAgICAgICAgaWYgKEZyYW1l
KiBmcmFtZSA9IGRvYy0+ZnJhbWUoKSkKLSAgICAgICAgICAgIHJldHVybiBWOFByb3h5Ojpjb252
ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6OkRPTVdJTkRPVywgZnJhbWUtPmRvbVdpbmRvdygp
KTsKKyAgICAgICAgICAgIHJldHVybiBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb1Y4T2JqZWN0KFY4
Q2xhc3NJbmRleDo6RE9NV0lORE9XLCBmcmFtZS0+ZG9tV2luZG93KCkpOwogICAgIH0KICAgICBy
ZXR1cm4gbm90SGFuZGxlZEJ5SW50ZXJjZXB0b3IoKTsKIH0KSW5kZXg6IFdlYkNvcmUvYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4SFRNTElGcmFtZUVsZW1lbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTElGcmFtZUVsZW1lbnRDdXN0b20uY3Bw
CShyZXZpc2lvbiA0NTY1MCkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTElG
cmFtZUVsZW1lbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw3IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogQUNDRVNTT1JfU0VUVEVSKEhUTUxJRnJhbWVFbGVtZW50U3Jj
KQogewotICAgIEhUTUxJRnJhbWVFbGVtZW50KiBpZnJhbWUgPSBWOFByb3h5Ojpjb252ZXJ0RE9N
V3JhcHBlclRvTm9kZTxIVE1MSUZyYW1lRWxlbWVudD4oaW5mby5Ib2xkZXIoKSk7CisgICAgSFRN
TElGcmFtZUVsZW1lbnQqIGlmcmFtZSA9IFY4RE9NV3JhcHBlcjo6Y29udmVydERPTVdyYXBwZXJU
b05vZGU8SFRNTElGcmFtZUVsZW1lbnQ+KGluZm8uSG9sZGVyKCkpOwogICAgIFN0cmluZyB2ID0g
dG9XZWJDb3JlU3RyaW5nV2l0aE51bGxDaGVjayh2YWx1ZSk7CiAKICAgICBpZiAoIWFsbG93U2V0
dGluZ0ZyYW1lU3JjVG9KYXZhc2NyaXB0VXJsKGlmcmFtZSwgdikpCkluZGV4OiBXZWJDb3JlL2Jp
bmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxJbWFnZUVsZW1lbnRDb25zdHJ1Y3Rvci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MSW1hZ2VFbGVtZW50Q29u
c3RydWN0b3IuY3BwCShyZXZpc2lvbiA0NTY1MCkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4SFRNTEltYWdlRWxlbWVudENvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTUsNyArNTUsNyBAQCBDQUxMQkFDS19GVU5DX0RFQ0woSFRNTEltYWdlRWxlbWVudENvbnN0CiAK
ICAgICAvLyBNYWtlIHN1cmUgdGhlIGRvY3VtZW50IGlzIGFkZGVkIHRvIHRoZSBET00gTm9kZSBt
YXAuIE90aGVyd2lzZSwgdGhlIEhUTUxJbWFnZUVsZW1lbnQgaW5zdGFuY2UKICAgICAvLyBtYXkg
ZW5kIHVwIGJlaW5nIHRoZSBvbmx5IG5vZGUgaW4gdGhlIG1hcCBhbmQgZ2V0IGdhcmJhZ2UtY2Nv
bGxlY3RlZCBwcmVtYXR1cmVseS4KLSAgICBWOFByb3h5Ojpjb252ZXJ0Tm9kZVRvVjhPYmplY3Qo
ZG9jdW1lbnQpOworICAgIFY4RE9NV3JhcHBlcjo6Y29udmVydE5vZGVUb1Y4T2JqZWN0KGRvY3Vt
ZW50KTsKIAogICAgIFJlZlB0cjxIVE1MSW1hZ2VFbGVtZW50PiBpbWFnZSA9IG5ldyBIVE1MSW1h
Z2VFbGVtZW50KEhUTUxOYW1lczo6aW1nVGFnLCBWOFByb3h5OjpyZXRyaWV2ZUZyYW1lKCktPmRv
Y3VtZW50KCkpOwogICAgIGlmIChhcmdzLkxlbmd0aCgpID4gMCkgewpAQCAtNjQsOSArNjQsOSBA
QCBDQUxMQkFDS19GVU5DX0RFQ0woSFRNTEltYWdlRWxlbWVudENvbnN0CiAgICAgICAgICAgICBp
bWFnZS0+c2V0SGVpZ2h0KHRvSW50MzIoYXJnc1sxXSkpOwogICAgIH0KIAotICAgIFY4UHJveHk6
OnNldERPTVdyYXBwZXIoYXJncy5Ib2xkZXIoKSwgVjhDbGFzc0luZGV4OjpUb0ludChWOENsYXNz
SW5kZXg6Ok5PREUpLCBpbWFnZS5nZXQoKSk7CisgICAgVjhET01XcmFwcGVyOjpzZXRET01XcmFw
cGVyKGFyZ3MuSG9sZGVyKCksIFY4Q2xhc3NJbmRleDo6VG9JbnQoVjhDbGFzc0luZGV4OjpOT0RF
KSwgaW1hZ2UuZ2V0KCkpOwogICAgIGltYWdlLT5yZWYoKTsKLSAgICBWOFByb3h5OjpzZXRKU1dy
YXBwZXJGb3JET01Ob2RlKGltYWdlLmdldCgpLCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0Pjo6
TmV3KGFyZ3MuSG9sZGVyKCkpKTsKKyAgICBWOERPTVdyYXBwZXI6OnNldEpTV3JhcHBlckZvckRP
TU5vZGUoaW1hZ2UuZ2V0KCksIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+OjpOZXcoYXJncy5I
b2xkZXIoKSkpOwogICAgIHJldHVybiBhcmdzLkhvbGRlcigpOwogfQogCkluZGV4OiBXZWJDb3Jl
L2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxJbnB1dEVsZW1lbnRDdXN0b20uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTElucHV0RWxlbWVudEN1c3Rv
bS5jcHAJKHJldmlzaW9uIDQ1NjUwKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhI
VE1MSW5wdXRFbGVtZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBA
QCBBQ0NFU1NPUl9HRVRURVIoSFRNTElucHV0RWxlbWVudFNlbGVjdGlvCiB7CiAgICAgSU5DX1NU
QVRTKCJET00uSFRNTElucHV0RWxlbWVudC5zZWxlY3Rpb25TdGFydC5fZ2V0Iik7CiAgICAgdjg6
OkhhbmRsZTx2ODo6T2JqZWN0PiBob2xkZXIgPSBpbmZvLkhvbGRlcigpOwotICAgIEhUTUxJbnB1
dEVsZW1lbnQqIGltcCA9IFY4UHJveHk6OmNvbnZlcnRET01XcmFwcGVyVG9Ob2RlPEhUTUxJbnB1
dEVsZW1lbnQ+KGhvbGRlcik7CisgICAgSFRNTElucHV0RWxlbWVudCogaW1wID0gVjhET01XcmFw
cGVyOjpjb252ZXJ0RE9NV3JhcHBlclRvTm9kZTxIVE1MSW5wdXRFbGVtZW50Pihob2xkZXIpOwog
CiAgICAgaWYgKCFpbXAtPmNhbkhhdmVTZWxlY3Rpb24oKSkKICAgICAgICAgcmV0dXJuIHRocm93
RXJyb3IoIkFjY2Vzc2luZyBzZWxlY3Rpb25TdGFydCBvbiBhbiBpbnB1dCBlbGVtZW50IHRoYXQg
Y2Fubm90IGhhdmUgYSBzZWxlY3Rpb24uIik7CkBAIC01NCw3ICs1NCw3IEBAIEFDQ0VTU09SX1NF
VFRFUihIVE1MSW5wdXRFbGVtZW50U2VsZWN0aW8KIHsKICAgICBJTkNfU1RBVFMoIkRPTS5IVE1M
SW5wdXRFbGVtZW50LnNlbGVjdGlvblN0YXJ0Ll9zZXQiKTsKICAgICB2ODo6SGFuZGxlPHY4OjpP
YmplY3Q+IGhvbGRlciA9IGluZm8uSG9sZGVyKCk7Ci0gICAgSFRNTElucHV0RWxlbWVudCogaW1w
ID0gVjhQcm94eTo6Y29udmVydERPTVdyYXBwZXJUb05vZGU8SFRNTElucHV0RWxlbWVudD4oaG9s
ZGVyKTsKKyAgICBIVE1MSW5wdXRFbGVtZW50KiBpbXAgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRE
T01XcmFwcGVyVG9Ob2RlPEhUTUxJbnB1dEVsZW1lbnQ+KGhvbGRlcik7CiAKICAgICBpZiAoIWlt
cC0+Y2FuSGF2ZVNlbGVjdGlvbigpKSB7CiAgICAgICAgIHRocm93RXJyb3IoIkFjY2Vzc2luZyBz
ZWxlY3Rpb25TdGFydCBvbiBhbiBpbnB1dCBlbGVtZW50IHRoYXQgY2Fubm90IGhhdmUgYSBzZWxl
Y3Rpb24uIik7CkBAIC02Nyw3ICs2Nyw3IEBAIEFDQ0VTU09SX0dFVFRFUihIVE1MSW5wdXRFbGVt
ZW50U2VsZWN0aW8KIHsKICAgICBJTkNfU1RBVFMoIkRPTS5IVE1MSW5wdXRFbGVtZW50LnNlbGVj
dGlvbkVuZC5fZ2V0Iik7CiAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBob2xkZXIgPSBpbmZv
LkhvbGRlcigpOwotICAgIEhUTUxJbnB1dEVsZW1lbnQqIGltcCA9IFY4UHJveHk6OmNvbnZlcnRE
T01XcmFwcGVyVG9Ob2RlPEhUTUxJbnB1dEVsZW1lbnQ+KGhvbGRlcik7CisgICAgSFRNTElucHV0
RWxlbWVudCogaW1wID0gVjhET01XcmFwcGVyOjpjb252ZXJ0RE9NV3JhcHBlclRvTm9kZTxIVE1M
SW5wdXRFbGVtZW50Pihob2xkZXIpOwogCiAgICAgaWYgKCFpbXAtPmNhbkhhdmVTZWxlY3Rpb24o
KSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoIkFjY2Vzc2luZyBzZWxlY3Rpb25FbmQgb24g
YW4gaW5wdXQgZWxlbWVudCB0aGF0IGNhbm5vdCBoYXZlIGEgc2VsZWN0aW9uLiIpOwpAQCAtODAs
NyArODAsNyBAQCBBQ0NFU1NPUl9TRVRURVIoSFRNTElucHV0RWxlbWVudFNlbGVjdGlvCiB7CiAg
ICAgSU5DX1NUQVRTKCJET00uSFRNTElucHV0RWxlbWVudC5zZWxlY3Rpb25FbmQuX3NldCIpOwog
ICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gaG9sZGVyID0gaW5mby5Ib2xkZXIoKTsKLSAgICBI
VE1MSW5wdXRFbGVtZW50KiBpbXAgPSBWOFByb3h5Ojpjb252ZXJ0RE9NV3JhcHBlclRvTm9kZTxI
VE1MSW5wdXRFbGVtZW50Pihob2xkZXIpOworICAgIEhUTUxJbnB1dEVsZW1lbnQqIGltcCA9IFY4
RE9NV3JhcHBlcjo6Y29udmVydERPTVdyYXBwZXJUb05vZGU8SFRNTElucHV0RWxlbWVudD4oaG9s
ZGVyKTsKIAogICAgIGlmICghaW1wLT5jYW5IYXZlU2VsZWN0aW9uKCkpIHsKICAgICAgICAgdGhy
b3dFcnJvcigiQWNjZXNzaW5nIHNlbGVjdGlvbkVuZCBvbiBhbiBpbnB1dCBlbGVtZW50IHRoYXQg
Y2Fubm90IGhhdmUgYSBzZWxlY3Rpb24uIik7CkBAIC05NCw3ICs5NCw3IEBAIENBTExCQUNLX0ZV
TkNfREVDTChIVE1MSW5wdXRFbGVtZW50U2V0U2UKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5IVE1M
SW5wdXRFbGVtZW50LnNldFNlbGVjdGlvblJhbmdlIik7CiAgICAgdjg6OkhhbmRsZTx2ODo6T2Jq
ZWN0PiBob2xkZXIgPSBhcmdzLkhvbGRlcigpOwotICAgIEhUTUxJbnB1dEVsZW1lbnQqIGltcCA9
IFY4UHJveHk6OmNvbnZlcnRET01XcmFwcGVyVG9Ob2RlPEhUTUxJbnB1dEVsZW1lbnQ+KGhvbGRl
cik7CisgICAgSFRNTElucHV0RWxlbWVudCogaW1wID0gVjhET01XcmFwcGVyOjpjb252ZXJ0RE9N
V3JhcHBlclRvTm9kZTxIVE1MSW5wdXRFbGVtZW50Pihob2xkZXIpOwogCiAgICAgaWYgKCFpbXAt
PmNhbkhhdmVTZWxlY3Rpb24oKSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoIkNhbGxpbmcg
c2V0U2VsZWN0aW9uUmFuZ2Ugb24gYW4gaW5wdXQgZWxlbWVudCB0aGF0IGNhbm5vdCBoYXZlIGEg
c2VsZWN0aW9uLiIpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MT3B0
aW9uRWxlbWVudENvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdz
L3Y4L2N1c3RvbS9WOEhUTUxPcHRpb25FbGVtZW50Q29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiA0
NTY1MCkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTE9wdGlvbkVsZW1lbnRD
b25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgxLDkgKzgxLDkgQEAgQ0FMTEJBQ0tf
RlVOQ19ERUNMKEhUTUxPcHRpb25FbGVtZW50Q29ucwogICAgICAgICB9CiAgICAgfQogCi0gICAg
VjhQcm94eTo6c2V0RE9NV3JhcHBlcihhcmdzLkhvbGRlcigpLCBWOENsYXNzSW5kZXg6OlRvSW50
KFY4Q2xhc3NJbmRleDo6Tk9ERSksIG9wdGlvbi5nZXQoKSk7CisgICAgVjhET01XcmFwcGVyOjpz
ZXRET01XcmFwcGVyKGFyZ3MuSG9sZGVyKCksIFY4Q2xhc3NJbmRleDo6VG9JbnQoVjhDbGFzc0lu
ZGV4OjpOT0RFKSwgb3B0aW9uLmdldCgpKTsKICAgICBvcHRpb24tPnJlZigpOwotICAgIFY4UHJv
eHk6OnNldEpTV3JhcHBlckZvckRPTU5vZGUob3B0aW9uLmdldCgpLCB2ODo6UGVyc2lzdGVudDx2
ODo6T2JqZWN0Pjo6TmV3KGFyZ3MuSG9sZGVyKCkpKTsKKyAgICBWOERPTVdyYXBwZXI6OnNldEpT
V3JhcHBlckZvckRPTU5vZGUob3B0aW9uLmdldCgpLCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0
Pjo6TmV3KGFyZ3MuSG9sZGVyKCkpKTsKICAgICByZXR1cm4gYXJncy5Ib2xkZXIoKTsKIH0KIApJ
bmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MT3B0aW9uc0NvbGxlY3Rpb25D
dXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRN
TE9wdGlvbnNDb2xsZWN0aW9uQ3VzdG9tLmNwcAkocmV2aXNpb24gNDU2NTApCisrKyBXZWJDb3Jl
L2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxPcHRpb25zQ29sbGVjdGlvbkN1c3RvbS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogQ0FMTEJB
Q0tfRlVOQ19ERUNMKEhUTUxPcHRpb25zQ29sbGVjdGlvblJlbW92ZSkKIHsKICAgICBJTkNfU1RB
VFMoIkRPTS5IVE1MT3B0aW9uc0NvbGxlY3Rpb24ucmVtb3ZlKCkiKTsKLSAgICBIVE1MT3B0aW9u
c0NvbGxlY3Rpb24qIGltcCA9IFY4UHJveHk6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxIVE1MT3B0
aW9uc0NvbGxlY3Rpb24+KFY4Q2xhc3NJbmRleDo6SFRNTE9QVElPTlNDT0xMRUNUSU9OLCBhcmdz
LkhvbGRlcigpKTsKKyAgICBIVE1MT3B0aW9uc0NvbGxlY3Rpb24qIGltcCA9IFY4RE9NV3JhcHBl
cjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PEhUTUxPcHRpb25zQ29sbGVjdGlvbj4oVjhDbGFzc0lu
ZGV4OjpIVE1MT1BUSU9OU0NPTExFQ1RJT04sIGFyZ3MuSG9sZGVyKCkpOwogICAgIEhUTUxTZWxl
Y3RFbGVtZW50KiBiYXNlID0gc3RhdGljX2Nhc3Q8SFRNTFNlbGVjdEVsZW1lbnQqPihpbXAtPmJh
c2UoKSk7CiAgICAgcmV0dXJuIHJlbW92ZUVsZW1lbnQoYmFzZSwgYXJncyk7CiB9CkBAIC01OCw4
ICs1OCw4IEBAIENBTExCQUNLX0ZVTkNfREVDTChIVE1MT3B0aW9uc0NvbGxlY3Rpb24KICAgICAg
ICAgVjhQcm94eTo6c2V0RE9NRXhjZXB0aW9uKFRZUEVfTUlTTUFUQ0hfRVJSKTsKICAgICAgICAg
cmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKICAgICB9Ci0gICAgSFRNTE9wdGlvbnNDb2xsZWN0aW9u
KiBpbXAgPSBWOFByb3h5Ojpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8SFRNTE9wdGlvbnNDb2xsZWN0
aW9uPihWOENsYXNzSW5kZXg6OkhUTUxPUFRJT05TQ09MTEVDVElPTiwgYXJncy5Ib2xkZXIoKSk7
Ci0gICAgSFRNTE9wdGlvbkVsZW1lbnQqIG9wdGlvbiA9IFY4UHJveHk6OmNvbnZlcnRET01XcmFw
cGVyVG9Ob2RlPEhUTUxPcHRpb25FbGVtZW50PihhcmdzWzBdKTsKKyAgICBIVE1MT3B0aW9uc0Nv
bGxlY3Rpb24qIGltcCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PEhUTUxP
cHRpb25zQ29sbGVjdGlvbj4oVjhDbGFzc0luZGV4OjpIVE1MT1BUSU9OU0NPTExFQ1RJT04sIGFy
Z3MuSG9sZGVyKCkpOworICAgIEhUTUxPcHRpb25FbGVtZW50KiBvcHRpb24gPSBWOERPTVdyYXBw
ZXI6OmNvbnZlcnRET01XcmFwcGVyVG9Ob2RlPEhUTUxPcHRpb25FbGVtZW50PihhcmdzWzBdKTsK
IAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIGlmIChhcmdzLkxlbmd0aCgpIDwgMikK
QEAgLTg3LDcgKzg3LDcgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKEhUTUxPcHRpb25zQ29sbGVjdGlv
bgogQUNDRVNTT1JfR0VUVEVSKEhUTUxPcHRpb25zQ29sbGVjdGlvbkxlbmd0aCkKIHsKICAgICBJ
TkNfU1RBVFMoIkRPTS5IVE1MT3B0aW9uc0NvbGxlY3Rpb24ubGVuZ3RoLl9nZXQiKTsKLSAgICBI
VE1MT3B0aW9uc0NvbGxlY3Rpb24qIGltcCA9IFY4UHJveHk6OmNvbnZlcnRUb05hdGl2ZU9iamVj
dDxIVE1MT3B0aW9uc0NvbGxlY3Rpb24+KFY4Q2xhc3NJbmRleDo6SFRNTE9QVElPTlNDT0xMRUNU
SU9OLCBpbmZvLkhvbGRlcigpKTsKKyAgICBIVE1MT3B0aW9uc0NvbGxlY3Rpb24qIGltcCA9IFY4
RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PEhUTUxPcHRpb25zQ29sbGVjdGlvbj4o
VjhDbGFzc0luZGV4OjpIVE1MT1BUSU9OU0NPTExFQ1RJT04sIGluZm8uSG9sZGVyKCkpOwogICAg
IGludCB2ID0gaW1wLT5sZW5ndGgoKTsKICAgICByZXR1cm4gdjg6OkludGVnZXI6Ok5ldyh2KTsK
IH0KQEAgLTk1LDcgKzk1LDcgQEAgQUNDRVNTT1JfR0VUVEVSKEhUTUxPcHRpb25zQ29sbGVjdGlv
bkxlbgogQUNDRVNTT1JfU0VUVEVSKEhUTUxPcHRpb25zQ29sbGVjdGlvbkxlbmd0aCkKIHsKICAg
ICBJTkNfU1RBVFMoIkRPTS5IVE1MT3B0aW9uc0NvbGxlY3Rpb24ubGVuZ3RoLl9zZXQiKTsKLSAg
ICBIVE1MT3B0aW9uc0NvbGxlY3Rpb24qIGltcCA9IFY4UHJveHk6OmNvbnZlcnRUb05hdGl2ZU9i
amVjdDxIVE1MT3B0aW9uc0NvbGxlY3Rpb24+KFY4Q2xhc3NJbmRleDo6SFRNTE9QVElPTlNDT0xM
RUNUSU9OLCBpbmZvLkhvbGRlcigpKTsKKyAgICBIVE1MT3B0aW9uc0NvbGxlY3Rpb24qIGltcCA9
IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PEhUTUxPcHRpb25zQ29sbGVjdGlv
bj4oVjhDbGFzc0luZGV4OjpIVE1MT1BUSU9OU0NPTExFQ1RJT04sIGluZm8uSG9sZGVyKCkpOwog
ICAgIGRvdWJsZSB2ID0gdmFsdWUtPk51bWJlclZhbHVlKCk7CiAgICAgdW5zaWduZWQgbmV3TGVu
Z3RoID0gMDsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKQEAgLTExNiwxOSArMTE2LDE5IEBA
IEFDQ0VTU09SX1NFVFRFUihIVE1MT3B0aW9uc0NvbGxlY3Rpb25MZW4KIElOREVYRURfUFJPUEVS
VFlfR0VUVEVSKEhUTUxPcHRpb25zQ29sbGVjdGlvbikKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5I
VE1MT3B0aW9uc0NvbGxlY3Rpb24uSW5kZXhlZFByb3BlcnR5R2V0dGVyIik7Ci0gICAgSFRNTE9w
dGlvbnNDb2xsZWN0aW9uKiBjb2xsZWN0aW9uID0gVjhQcm94eTo6Y29udmVydFRvTmF0aXZlT2Jq
ZWN0PEhUTUxPcHRpb25zQ29sbGVjdGlvbj4oVjhDbGFzc0luZGV4OjpIVE1MT1BUSU9OU0NPTExF
Q1RJT04sIGluZm8uSG9sZGVyKCkpOworICAgIEhUTUxPcHRpb25zQ29sbGVjdGlvbiogY29sbGVj
dGlvbiA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PEhUTUxPcHRpb25zQ29s
bGVjdGlvbj4oVjhDbGFzc0luZGV4OjpIVE1MT1BUSU9OU0NPTExFQ1RJT04sIGluZm8uSG9sZGVy
KCkpOwogCiAgICAgUmVmUHRyPE5vZGU+IHJlc3VsdCA9IGNvbGxlY3Rpb24tPml0ZW0oaW5kZXgp
OwogICAgIGlmICghcmVzdWx0KQogICAgICAgICByZXR1cm4gbm90SGFuZGxlZEJ5SW50ZXJjZXB0
b3IoKTsKIAotICAgIHJldHVybiBWOFByb3h5Ojpjb252ZXJ0Tm9kZVRvVjhPYmplY3QocmVzdWx0
LmdldCgpKTsKKyAgICByZXR1cm4gVjhET01XcmFwcGVyOjpjb252ZXJ0Tm9kZVRvVjhPYmplY3Qo
cmVzdWx0LmdldCgpKTsKIH0KIAogSU5ERVhFRF9QUk9QRVJUWV9TRVRURVIoSFRNTE9wdGlvbnND
b2xsZWN0aW9uKQogewogICAgIElOQ19TVEFUUygiRE9NLkhUTUxPcHRpb25zQ29sbGVjdGlvbi5J
bmRleGVkUHJvcGVydHlTZXR0ZXIiKTsKLSAgICBIVE1MT3B0aW9uc0NvbGxlY3Rpb24qIGNvbGxl
Y3Rpb24gPSBWOFByb3h5Ojpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8SFRNTE9wdGlvbnNDb2xsZWN0
aW9uPihWOENsYXNzSW5kZXg6OkhUTUxPUFRJT05TQ09MTEVDVElPTiwgaW5mby5Ib2xkZXIoKSk7
CisgICAgSFRNTE9wdGlvbnNDb2xsZWN0aW9uKiBjb2xsZWN0aW9uID0gVjhET01XcmFwcGVyOjpj
b252ZXJ0VG9OYXRpdmVPYmplY3Q8SFRNTE9wdGlvbnNDb2xsZWN0aW9uPihWOENsYXNzSW5kZXg6
OkhUTUxPUFRJT05TQ09MTEVDVElPTiwgaW5mby5Ib2xkZXIoKSk7CiAgICAgSFRNTFNlbGVjdEVs
ZW1lbnQqIGJhc2UgPSBzdGF0aWNfY2FzdDxIVE1MU2VsZWN0RWxlbWVudCo+KGNvbGxlY3Rpb24t
PmJhc2UoKSk7CiAgICAgcmV0dXJuIHRvT3B0aW9uc0NvbGxlY3Rpb25TZXR0ZXIoaW5kZXgsIHZh
bHVlLCBiYXNlKTsKIH0KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTFBs
dWdJbkVsZW1lbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4SFRNTFBsdWdJbkVsZW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiA0NTY1MCkKKysr
IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTFBsdWdJbkVsZW1lbnRDdXN0b20uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIE5B
TUVEX1BST1BFUlRZX0dFVFRFUihIVE1MUGx1Z0luRWxlbWVudCkKIHsKICAgICBJTkNfU1RBVFMo
IkRPTS5IVE1MUGx1Z0luRWxlbWVudC5OYW1lZFByb3BlcnR5R2V0dGVyIik7Ci0gICAgSFRNTFBs
dWdJbkVsZW1lbnQqIGltcCA9IFY4UHJveHk6OmNvbnZlcnRET01XcmFwcGVyVG9Ob2RlPEhUTUxQ
bHVnSW5FbGVtZW50PihpbmZvLkhvbGRlcigpKTsKKyAgICBIVE1MUGx1Z0luRWxlbWVudCogaW1w
ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0RE9NV3JhcHBlclRvTm9kZTxIVE1MUGx1Z0luRWxlbWVu
dD4oaW5mby5Ib2xkZXIoKSk7CiAgICAgU2NyaXB0SW5zdGFuY2Ugc2NyaXB0SW5zdGFuY2UgPSBp
bXAtPmdldEluc3RhbmNlKCk7CiAgICAgaWYgKCFzY3JpcHRJbnN0YW5jZSkKICAgICAgICAgcmV0
dXJuIG5vdEhhbmRsZWRCeUludGVyY2VwdG9yKCk7CkBAIC02MCw3ICs2MCw3IEBAIE5BTUVEX1BS
T1BFUlRZX0dFVFRFUihIVE1MUGx1Z0luRWxlbWVudCkKIE5BTUVEX1BST1BFUlRZX1NFVFRFUihI
VE1MUGx1Z0luRWxlbWVudCkKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5IVE1MUGx1Z0luRWxlbWVu
dC5OYW1lZFByb3BlcnR5U2V0dGVyIik7Ci0gICAgSFRNTFBsdWdJbkVsZW1lbnQqIGltcCA9IFY4
UHJveHk6OmNvbnZlcnRET01XcmFwcGVyVG9Ob2RlPEhUTUxQbHVnSW5FbGVtZW50PihpbmZvLkhv
bGRlcigpKTsKKyAgICBIVE1MUGx1Z0luRWxlbWVudCogaW1wID0gVjhET01XcmFwcGVyOjpjb252
ZXJ0RE9NV3JhcHBlclRvTm9kZTxIVE1MUGx1Z0luRWxlbWVudD4oaW5mby5Ib2xkZXIoKSk7CiAg
ICAgU2NyaXB0SW5zdGFuY2Ugc2NyaXB0SW5zdGFuY2UgPSBpbXAtPmdldEluc3RhbmNlKCk7CiAg
ICAgaWYgKCFzY3JpcHRJbnN0YW5jZSkKICAgICAgICAgcmV0dXJuIG5vdEhhbmRsZWRCeUludGVy
Y2VwdG9yKCk7CkBAIC04MSw3ICs4MSw3IEBAIENBTExCQUNLX0ZVTkNfREVDTChIVE1MUGx1Z0lu
RWxlbWVudCkKIElOREVYRURfUFJPUEVSVFlfR0VUVEVSKEhUTUxQbHVnSW5FbGVtZW50KQogewog
ICAgIElOQ19TVEFUUygiRE9NLkhUTUxQbHVnSW5FbGVtZW50LkluZGV4ZWRQcm9wZXJ0eUdldHRl
ciIpOwotICAgIEhUTUxQbHVnSW5FbGVtZW50KiBpbXAgPSBWOFByb3h5Ojpjb252ZXJ0RE9NV3Jh
cHBlclRvTm9kZTxIVE1MUGx1Z0luRWxlbWVudD4oaW5mby5Ib2xkZXIoKSk7CisgICAgSFRNTFBs
dWdJbkVsZW1lbnQqIGltcCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydERPTVdyYXBwZXJUb05vZGU8
SFRNTFBsdWdJbkVsZW1lbnQ+KGluZm8uSG9sZGVyKCkpOwogICAgIFNjcmlwdEluc3RhbmNlIHNj
cmlwdEluc3RhbmNlID0gaW1wLT5nZXRJbnN0YW5jZSgpOwogICAgIGlmICghc2NyaXB0SW5zdGFu
Y2UpCiAgICAgICAgIHJldHVybiBub3RIYW5kbGVkQnlJbnRlcmNlcHRvcigpOwpAQCAtOTYsNyAr
OTYsNyBAQCBJTkRFWEVEX1BST1BFUlRZX0dFVFRFUihIVE1MUGx1Z0luRWxlbWVuCiBJTkRFWEVE
X1BST1BFUlRZX1NFVFRFUihIVE1MUGx1Z0luRWxlbWVudCkKIHsKICAgICBJTkNfU1RBVFMoIkRP
TS5IVE1MUGx1Z0luRWxlbWVudC5JbmRleGVkUHJvcGVydHlTZXR0ZXIiKTsKLSAgICBIVE1MUGx1
Z0luRWxlbWVudCogaW1wID0gVjhQcm94eTo6Y29udmVydERPTVdyYXBwZXJUb05vZGU8SFRNTFBs
dWdJbkVsZW1lbnQ+KGluZm8uSG9sZGVyKCkpOworICAgIEhUTUxQbHVnSW5FbGVtZW50KiBpbXAg
PSBWOERPTVdyYXBwZXI6OmNvbnZlcnRET01XcmFwcGVyVG9Ob2RlPEhUTUxQbHVnSW5FbGVtZW50
PihpbmZvLkhvbGRlcigpKTsKICAgICBTY3JpcHRJbnN0YW5jZSBzY3JpcHRJbnN0YW5jZSA9IGlt
cC0+Z2V0SW5zdGFuY2UoKTsKICAgICBpZiAoIXNjcmlwdEluc3RhbmNlKQogICAgICAgICByZXR1
cm4gbm90SGFuZGxlZEJ5SW50ZXJjZXB0b3IoKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4SFRNTFNlbGVjdEVsZW1lbnRDb2xsZWN0aW9uQ3VzdG9tLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxTZWxlY3RFbGVtZW50Q29sbGVj
dGlvbkN1c3RvbS5jcHAJKHJldmlzaW9uIDQ1NjUwKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9j
dXN0b20vVjhIVE1MU2VsZWN0RWxlbWVudENvbGxlY3Rpb25DdXN0b20uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00Myw3ICs0Myw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIE5BTUVEX1BST1BFUlRZ
X0dFVFRFUihIVE1MU2VsZWN0RWxlbWVudENvbGxlY3Rpb24pCiB7CiAgICAgSU5DX1NUQVRTKCJE
T00uSFRNTFNlbGVjdEVsZW1lbnRDb2xsZWN0aW9uLk5hbWVkUHJvcGVydHlTZXR0ZXIiKTsKLSAg
ICBIVE1MU2VsZWN0RWxlbWVudCogc2VsZWN0ID0gVjhQcm94eTo6Y29udmVydERPTVdyYXBwZXJU
b05vZGU8SFRNTFNlbGVjdEVsZW1lbnQ+KGluZm8uSG9sZGVyKCkpOworICAgIEhUTUxTZWxlY3RF
bGVtZW50KiBzZWxlY3QgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRET01XcmFwcGVyVG9Ob2RlPEhU
TUxTZWxlY3RFbGVtZW50PihpbmZvLkhvbGRlcigpKTsKICAgICB2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gdmFsdWUgPSBpbmZvLkhvbGRlcigpLT5HZXRSZWFsTmFtZWRQcm9wZXJ0eUluUHJvdG90eXBl
Q2hhaW4obmFtZSk7CiAKICAgICBpZiAoIXZhbHVlLklzRW1wdHkoKSkKQEAgLTYyLDE2ICs2Miwx
NiBAQCBOQU1FRF9QUk9QRVJUWV9HRVRURVIoSFRNTFNlbGVjdEVsZW1lbnRDCiAgICAgICAgIHJl
dHVybiBub3RIYW5kbGVkQnlJbnRlcmNlcHRvcigpOwogCiAgICAgaWYgKGl0ZW1zLnNpemUoKSA9
PSAxKQotICAgICAgICByZXR1cm4gVjhQcm94eTo6Y29udmVydE5vZGVUb1Y4T2JqZWN0KGl0ZW1z
LmF0KDApLmdldCgpKTsKKyAgICAgICAgcmV0dXJuIFY4RE9NV3JhcHBlcjo6Y29udmVydE5vZGVU
b1Y4T2JqZWN0KGl0ZW1zLmF0KDApLmdldCgpKTsKIAogICAgIE5vZGVMaXN0KiBsaXN0ID0gbmV3
IFY4TmFtZWROb2Rlc0NvbGxlY3Rpb24oaXRlbXMpOwotICAgIHJldHVybiBWOFByb3h5Ojpjb252
ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6Ok5PREVMSVNULCBsaXN0KTsKKyAgICByZXR1cm4g
VjhET01XcmFwcGVyOjpjb252ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6Ok5PREVMSVNULCBs
aXN0KTsKIH0KIAogSU5ERVhFRF9QUk9QRVJUWV9TRVRURVIoSFRNTFNlbGVjdEVsZW1lbnRDb2xs
ZWN0aW9uKQogewogICAgIElOQ19TVEFUUygiRE9NLkhUTUxTZWxlY3RFbGVtZW50Q29sbGVjdGlv
bi5JbmRleGVkUHJvcGVydHlTZXR0ZXIiKTsKLSAgICBIVE1MU2VsZWN0RWxlbWVudCogc2VsZWN0
ID0gVjhQcm94eTo6Y29udmVydERPTVdyYXBwZXJUb05vZGU8SFRNTFNlbGVjdEVsZW1lbnQ+KGlu
Zm8uSG9sZGVyKCkpOworICAgIEhUTUxTZWxlY3RFbGVtZW50KiBzZWxlY3QgPSBWOERPTVdyYXBw
ZXI6OmNvbnZlcnRET01XcmFwcGVyVG9Ob2RlPEhUTUxTZWxlY3RFbGVtZW50PihpbmZvLkhvbGRl
cigpKTsKICAgICByZXR1cm4gdG9PcHRpb25zQ29sbGVjdGlvblNldHRlcihpbmRleCwgdmFsdWUs
IHNlbGVjdCk7CiB9CiAKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTFNl
bGVjdEVsZW1lbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4SFRNTFNlbGVjdEVsZW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiA0NTY1MCkKKysr
IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTFNlbGVjdEVsZW1lbnRDdXN0b20uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00NCwxNCArNDQsMTQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
Q0FMTEJBQ0tfRlVOQ19ERUNMKEhUTUxTZWxlY3RFbGVtZW50UmVtb3ZlKQogewogICAgIElOQ19T
VEFUUygiRE9NLkhUTUxTZWxlY3RFbGVtZW50LnJlbW92ZSIpOwotICAgIEhUTUxTZWxlY3RFbGVt
ZW50KiBpbXAgPSBWOFByb3h5Ojpjb252ZXJ0RE9NV3JhcHBlclRvTm9kZTxIVE1MU2VsZWN0RWxl
bWVudD4oYXJncy5Ib2xkZXIoKSk7CisgICAgSFRNTFNlbGVjdEVsZW1lbnQqIGltcCA9IFY4RE9N
V3JhcHBlcjo6Y29udmVydERPTVdyYXBwZXJUb05vZGU8SFRNTFNlbGVjdEVsZW1lbnQ+KGFyZ3Mu
SG9sZGVyKCkpOwogICAgIHJldHVybiByZW1vdmVFbGVtZW50KGltcCwgYXJncyk7CiB9CiAKIHY4
OjpIYW5kbGU8djg6OlZhbHVlPiByZW1vdmVFbGVtZW50KEhUTUxTZWxlY3RFbGVtZW50KiBpbXAs
IGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpIAogewogICAgIGlmIChWOEhUTUxPcHRpb25FbGVt
ZW50OjpIYXNJbnN0YW5jZShhcmdzWzBdKSkgewotICAgICAgICBIVE1MT3B0aW9uRWxlbWVudCog
ZWxlbWVudCA9IFY4UHJveHk6OmNvbnZlcnRET01XcmFwcGVyVG9Ob2RlPEhUTUxPcHRpb25FbGVt
ZW50PihhcmdzWzBdKTsKKyAgICAgICAgSFRNTE9wdGlvbkVsZW1lbnQqIGVsZW1lbnQgPSBWOERP
TVdyYXBwZXI6OmNvbnZlcnRET01XcmFwcGVyVG9Ob2RlPEhUTUxPcHRpb25FbGVtZW50Pihhcmdz
WzBdKTsKICAgICAgICAgaW1wLT5yZW1vdmUoZWxlbWVudC0+aW5kZXgoKSk7CiAgICAgICAgIHJl
dHVybiB2ODo6VW5kZWZpbmVkKCk7CiAgICAgfQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9j
dXN0b20vVjhJbnNwZWN0b3JDb250cm9sbGVyQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEluc3BlY3RvckNvbnRyb2xsZXJDdXN0b20uY3BwCShy
ZXZpc2lvbiA0NTY1MCkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SW5zcGVjdG9y
Q29udHJvbGxlckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2LDExICs1NiwxMSBAQCBD
QUxMQkFDS19GVU5DX0RFQ0woSW5zcGVjdG9yQ29udHJvbGxlckhpCiAgICAgaWYgKGFyZ3MuTGVu
Z3RoKCkgPCAxKQogICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwogCi0gICAgTm9kZSog
bm9kZSA9IFY4UHJveHk6OmNvbnZlcnRET01XcmFwcGVyVG9Ob2RlPE5vZGU+KGFyZ3NbMF0pOwor
ICAgIE5vZGUqIG5vZGUgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRET01XcmFwcGVyVG9Ob2RlPE5v
ZGU+KGFyZ3NbMF0pOwogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmlu
ZWQoKTsKIAotICAgIEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNvbnRyb2xsZXIgPSBW
OFByb3h5Ojpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8SW5zcGVjdG9yQ29udHJvbGxlcj4oVjhDbGFz
c0luZGV4OjpJTlNQRUNUT1JDT05UUk9MTEVSLCBhcmdzLkhvbGRlcigpKTsKKyAgICBJbnNwZWN0
b3JDb250cm9sbGVyKiBpbnNwZWN0b3JDb250cm9sbGVyID0gVjhET01XcmFwcGVyOjpjb252ZXJ0
VG9OYXRpdmVPYmplY3Q8SW5zcGVjdG9yQ29udHJvbGxlcj4oVjhDbGFzc0luZGV4OjpJTlNQRUNU
T1JDT05UUk9MTEVSLCBhcmdzLkhvbGRlcigpKTsKICAgICBpbnNwZWN0b3JDb250cm9sbGVyLT5o
aWdobGlnaHQobm9kZSk7CiAKICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwpAQCAtNzgsNyAr
NzgsNyBAQCBDQUxMQkFDS19GVU5DX0RFQ0woSW5zcGVjdG9yQ29udHJvbGxlckdlCiAKICAgICB1
bnNpZ25lZCBpZGVudGlmaWVyID0gYXJnc1sxXS0+SW50MzJWYWx1ZSgpOwogCi0gICAgSW5zcGVj
dG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxlciA9IFY4UHJveHk6OmNvbnZlcnRUb05h
dGl2ZU9iamVjdDxJbnNwZWN0b3JDb250cm9sbGVyPihWOENsYXNzSW5kZXg6OklOU1BFQ1RPUkNP
TlRST0xMRVIsIGFyZ3MuSG9sZGVyKCkpOworICAgIEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3Bl
Y3RvckNvbnRyb2xsZXIgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxJbnNw
ZWN0b3JDb250cm9sbGVyPihWOENsYXNzSW5kZXg6OklOU1BFQ1RPUkNPTlRST0xMRVIsIGFyZ3Mu
SG9sZGVyKCkpOwogICAgIFJlZlB0cjxJbnNwZWN0b3JSZXNvdXJjZT4gcmVzb3VyY2UgPSBpbnNw
ZWN0b3JDb250cm9sbGVyLT5yZXNvdXJjZXMoKS5nZXQoaWRlbnRpZmllcik7CiAgICAgQVNTRVJU
KHJlc291cmNlKTsKICAgICBpZiAoIXJlc291cmNlKQpAQCAtOTAsNyArOTAsNyBAQCBDQUxMQkFD
S19GVU5DX0RFQ0woSW5zcGVjdG9yQ29udHJvbGxlckdlCiAgICAgaWYgKGRvY3VtZW50LT5pc1Bs
dWdpbkRvY3VtZW50KCkgfHwgZG9jdW1lbnQtPmlzSW1hZ2VEb2N1bWVudCgpIHx8IGRvY3VtZW50
LT5pc01lZGlhRG9jdW1lbnQoKSkKICAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKIAot
ICAgIHJldHVybiBWOFByb3h5Ojpjb252ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6OkRPQ1VN
RU5ULCBkb2N1bWVudCk7CisgICAgcmV0dXJuIFY4RE9NV3JhcHBlcjo6Y29udmVydFRvVjhPYmpl
Y3QoVjhDbGFzc0luZGV4OjpET0NVTUVOVCwgZG9jdW1lbnQpOwogfQogCiBDQUxMQkFDS19GVU5D
X0RFQ0woSW5zcGVjdG9yQ29udHJvbGxlclNlYXJjaCkKQEAgLTEwMCw3ICsxMDAsNyBAQCBDQUxM
QkFDS19GVU5DX0RFQ0woSW5zcGVjdG9yQ29udHJvbGxlclNlCiAgICAgaWYgKGFyZ3MuTGVuZ3Ro
KCkgPCAyKQogICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwogCi0gICAgTm9kZSogbm9k
ZSA9IFY4UHJveHk6OmNvbnZlcnRET01XcmFwcGVyVG9Ob2RlPE5vZGU+KGFyZ3NbMF0pOworICAg
IE5vZGUqIG5vZGUgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRET01XcmFwcGVyVG9Ob2RlPE5vZGU+
KGFyZ3NbMF0pOwogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQo
KTsKIApAQCAtMTI0LDcgKzEyNCw3IEBAIENBTExCQUNLX0ZVTkNfREVDTChJbnNwZWN0b3JDb250
cm9sbGVyU2UKICAgICAgICAgaWYgKG5ld1N0YXJ0ID09IHN0YXJ0VmlzaWJsZVBvc2l0aW9uKHNl
YXJjaFJhbmdlLmdldCgpLCBET1dOU1RSRUFNKSkKICAgICAgICAgICAgIGJyZWFrOwogCi0gICAg
ICAgIHJlc3VsdC0+U2V0KHY4OjpOdW1iZXI6Ok5ldyhpbmRleCsrKSwgVjhQcm94eTo6Y29udmVy
dFRvVjhPYmplY3Q8UmFuZ2U+KFY4Q2xhc3NJbmRleDo6UkFOR0UsIHJlc3VsdFJhbmdlLmdldCgp
KSk7CisgICAgICAgIHJlc3VsdC0+U2V0KHY4OjpOdW1iZXI6Ok5ldyhpbmRleCsrKSwgVjhET01X
cmFwcGVyOjpjb252ZXJ0VG9WOE9iamVjdDxSYW5nZT4oVjhDbGFzc0luZGV4OjpSQU5HRSwgcmVz
dWx0UmFuZ2UuZ2V0KCkpKTsKIAogICAgICAgICBzZXRTdGFydChzZWFyY2hSYW5nZS5nZXQoKSwg
bmV3U3RhcnQpOwogICAgIH0gd2hpbGUgKHRydWUpOwpAQCAtMTQ1LDggKzE0NSw4IEBAIENBTExC
QUNLX0ZVTkNfREVDTChJbnNwZWN0b3JDb250cm9sbGVySW4KIHsKICAgICBJTkNfU1RBVFMoIklu
c3BlY3RvckNvbnRyb2xsZXIuaW5zcGVjdGVkV2luZG93KCkiKTsKIAotICAgIEluc3BlY3RvckNv
bnRyb2xsZXIqIGluc3BlY3RvckNvbnRyb2xsZXIgPSBWOFByb3h5Ojpjb252ZXJ0VG9OYXRpdmVP
YmplY3Q8SW5zcGVjdG9yQ29udHJvbGxlcj4oVjhDbGFzc0luZGV4OjpJTlNQRUNUT1JDT05UUk9M
TEVSLCBhcmdzLkhvbGRlcigpKTsKLSAgICByZXR1cm4gVjhQcm94eTo6Y29udmVydFRvVjhPYmpl
Y3Q8RE9NV2luZG93PihWOENsYXNzSW5kZXg6OkRPTVdJTkRPVywgaW5zcGVjdG9yQ29udHJvbGxl
ci0+aW5zcGVjdGVkUGFnZSgpLT5tYWluRnJhbWUoKS0+ZG9tV2luZG93KCkpOworICAgIEluc3Bl
Y3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNvbnRyb2xsZXIgPSBWOERPTVdyYXBwZXI6OmNvbnZl
cnRUb05hdGl2ZU9iamVjdDxJbnNwZWN0b3JDb250cm9sbGVyPihWOENsYXNzSW5kZXg6OklOU1BF
Q1RPUkNPTlRST0xMRVIsIGFyZ3MuSG9sZGVyKCkpOworICAgIHJldHVybiBWOERPTVdyYXBwZXI6
OmNvbnZlcnRUb1Y4T2JqZWN0PERPTVdpbmRvdz4oVjhDbGFzc0luZGV4OjpET01XSU5ET1csIGlu
c3BlY3RvckNvbnRyb2xsZXItPmluc3BlY3RlZFBhZ2UoKS0+bWFpbkZyYW1lKCktPmRvbVdpbmRv
dygpKTsKIH0KIAogQ0FMTEJBQ0tfRlVOQ19ERUNMKEluc3BlY3RvckNvbnRyb2xsZXJTZXR0aW5n
KQpAQCAtMTYwLDcgKzE2MCw3IEBAIENBTExCQUNLX0ZVTkNfREVDTChJbnNwZWN0b3JDb250cm9s
bGVyU2UKICAgICBpZiAoa2V5LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmlu
ZWQoKTsKIAotICAgIEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNvbnRyb2xsZXIgPSBW
OFByb3h5Ojpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8SW5zcGVjdG9yQ29udHJvbGxlcj4oVjhDbGFz
c0luZGV4OjpJTlNQRUNUT1JDT05UUk9MTEVSLCBhcmdzLkhvbGRlcigpKTsKKyAgICBJbnNwZWN0
b3JDb250cm9sbGVyKiBpbnNwZWN0b3JDb250cm9sbGVyID0gVjhET01XcmFwcGVyOjpjb252ZXJ0
VG9OYXRpdmVPYmplY3Q8SW5zcGVjdG9yQ29udHJvbGxlcj4oVjhDbGFzc0luZGV4OjpJTlNQRUNU
T1JDT05UUk9MTEVSLCBhcmdzLkhvbGRlcigpKTsKICAgICBjb25zdCBJbnNwZWN0b3JDb250cm9s
bGVyOjpTZXR0aW5nJiBzZXR0aW5nID0gaW5zcGVjdG9yQ29udHJvbGxlciAtPnNldHRpbmcoa2V5
KTsKIAogICAgIHN3aXRjaCAoc2V0dGluZy50eXBlKCkpIHsKQEAgLTIyMSw3ICsyMjEsNyBAQCBD
QUxMQkFDS19GVU5DX0RFQ0woSW5zcGVjdG9yQ29udHJvbGxlclNlCiAgICAgfSBlbHNlCiAgICAg
ICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CiAKLSAgICBJbnNwZWN0b3JDb250cm9sbGVyKiBp
bnNwZWN0b3JDb250cm9sbGVyID0gVjhQcm94eTo6Y29udmVydFRvTmF0aXZlT2JqZWN0PEluc3Bl
Y3RvckNvbnRyb2xsZXI+KFY4Q2xhc3NJbmRleDo6SU5TUEVDVE9SQ09OVFJPTExFUiwgYXJncy5I
b2xkZXIoKSk7CisgICAgSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxlciA9
IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PEluc3BlY3RvckNvbnRyb2xsZXI+
KFY4Q2xhc3NJbmRleDo6SU5TUEVDVE9SQ09OVFJPTExFUiwgYXJncy5Ib2xkZXIoKSk7CiAgICAg
aW5zcGVjdG9yQ29udHJvbGxlci0+c2V0U2V0dGluZyhrZXksIHNldHRpbmcpOwogCiAgICAgcmV0
dXJuIHY4OjpVbmRlZmluZWQoKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4
TG9jYXRpb25DdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4TG9jYXRpb25DdXN0b20uY3BwCShyZXZpc2lvbiA0NTY1MCkKKysrIFdlYkNvcmUvYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4TG9jYXRpb25DdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02
Miw3ICs2Miw3IEBAIEFDQ0VTU09SX1NFVFRFUihMb2NhdGlvbkhhc2gpCiB7CiAgICAgSU5DX1NU
QVRTKCJET00uTG9jYXRpb24uaGFzaC5fc2V0Iik7CiAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0
PiBob2xkZXIgPSBpbmZvLkhvbGRlcigpOwotICAgIExvY2F0aW9uKiBpbXAgPSBWOFByb3h5Ojpj
b252ZXJ0VG9OYXRpdmVPYmplY3Q8TG9jYXRpb24+KFY4Q2xhc3NJbmRleDo6TE9DQVRJT04sIGhv
bGRlcik7CisgICAgTG9jYXRpb24qIGltcCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZl
T2JqZWN0PExvY2F0aW9uPihWOENsYXNzSW5kZXg6OkxPQ0FUSU9OLCBob2xkZXIpOwogICAgIFN0
cmluZyBoYXNoID0gdG9XZWJDb3JlU3RyaW5nKHZhbHVlKTsKIAogICAgIEZyYW1lKiBmcmFtZSA9
IGltcC0+ZnJhbWUoKTsKQEAgLTg1LDcgKzg1LDcgQEAgQUNDRVNTT1JfU0VUVEVSKExvY2F0aW9u
SG9zdCkKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5Mb2NhdGlvbi5ob3N0Ll9zZXQiKTsKICAgICB2
ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGhvbGRlciA9IGluZm8uSG9sZGVyKCk7Ci0gICAgTG9jYXRp
b24qIGltcCA9IFY4UHJveHk6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxMb2NhdGlvbj4oVjhDbGFz
c0luZGV4OjpMT0NBVElPTiwgaG9sZGVyKTsKKyAgICBMb2NhdGlvbiogaW1wID0gVjhET01XcmFw
cGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8TG9jYXRpb24+KFY4Q2xhc3NJbmRleDo6TE9DQVRJ
T04sIGhvbGRlcik7CiAgICAgU3RyaW5nIGhvc3QgPSB0b1dlYkNvcmVTdHJpbmcodmFsdWUpOwog
CiAgICAgRnJhbWUqIGZyYW1lID0gaW1wLT5mcmFtZSgpOwpAQCAtMTA1LDcgKzEwNSw3IEBAIEFD
Q0VTU09SX1NFVFRFUihMb2NhdGlvbkhvc3RuYW1lKQogewogICAgIElOQ19TVEFUUygiRE9NLkxv
Y2F0aW9uLmhvc3RuYW1lLl9zZXQiKTsKICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGhvbGRl
ciA9IGluZm8uSG9sZGVyKCk7Ci0gICAgTG9jYXRpb24qIGltcCA9IFY4UHJveHk6OmNvbnZlcnRU
b05hdGl2ZU9iamVjdDxMb2NhdGlvbj4oVjhDbGFzc0luZGV4OjpMT0NBVElPTiwgaG9sZGVyKTsK
KyAgICBMb2NhdGlvbiogaW1wID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8
TG9jYXRpb24+KFY4Q2xhc3NJbmRleDo6TE9DQVRJT04sIGhvbGRlcik7CiAgICAgU3RyaW5nIGhv
c3RuYW1lID0gdG9XZWJDb3JlU3RyaW5nKHZhbHVlKTsKIAogICAgIEZyYW1lKiBmcmFtZSA9IGlt
cC0+ZnJhbWUoKTsKQEAgLTEyMiw3ICsxMjIsNyBAQCBBQ0NFU1NPUl9TRVRURVIoTG9jYXRpb25I
cmVmKQogewogICAgIElOQ19TVEFUUygiRE9NLkxvY2F0aW9uLmhyZWYuX3NldCIpOwogICAgIHY4
OjpIYW5kbGU8djg6Ok9iamVjdD4gaG9sZGVyID0gaW5mby5Ib2xkZXIoKTsKLSAgICBMb2NhdGlv
biogaW1wID0gVjhQcm94eTo6Y29udmVydFRvTmF0aXZlT2JqZWN0PExvY2F0aW9uPihWOENsYXNz
SW5kZXg6OkxPQ0FUSU9OLCBob2xkZXIpOworICAgIExvY2F0aW9uKiBpbXAgPSBWOERPTVdyYXBw
ZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxMb2NhdGlvbj4oVjhDbGFzc0luZGV4OjpMT0NBVElP
TiwgaG9sZGVyKTsKIAogICAgIEZyYW1lKiBmcmFtZSA9IGltcC0+ZnJhbWUoKTsKICAgICBpZiAo
IWZyYW1lKQpAQCAtMTQyLDcgKzE0Miw3IEBAIEFDQ0VTU09SX1NFVFRFUihMb2NhdGlvblBhdGhu
YW1lKQogewogICAgIElOQ19TVEFUUygiRE9NLkxvY2F0aW9uLnBhdGhuYW1lLl9zZXQiKTsKICAg
ICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGhvbGRlciA9IGluZm8uSG9sZGVyKCk7Ci0gICAgTG9j
YXRpb24qIGltcCA9IFY4UHJveHk6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxMb2NhdGlvbj4oVjhD
bGFzc0luZGV4OjpMT0NBVElPTiwgaG9sZGVyKTsKKyAgICBMb2NhdGlvbiogaW1wID0gVjhET01X
cmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8TG9jYXRpb24+KFY4Q2xhc3NJbmRleDo6TE9D
QVRJT04sIGhvbGRlcik7CiAgICAgU3RyaW5nIHBhdGhuYW1lID0gdG9XZWJDb3JlU3RyaW5nKHZh
bHVlKTsKIAogICAgIEZyYW1lKiBmcmFtZSA9IGltcC0+ZnJhbWUoKTsKQEAgLTE1OSw3ICsxNTks
NyBAQCBBQ0NFU1NPUl9TRVRURVIoTG9jYXRpb25Qb3J0KQogewogICAgIElOQ19TVEFUUygiRE9N
LkxvY2F0aW9uLnBvcnQuX3NldCIpOwogICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gaG9sZGVy
ID0gaW5mby5Ib2xkZXIoKTsKLSAgICBMb2NhdGlvbiogaW1wID0gVjhQcm94eTo6Y29udmVydFRv
TmF0aXZlT2JqZWN0PExvY2F0aW9uPihWOENsYXNzSW5kZXg6OkxPQ0FUSU9OLCBob2xkZXIpOwor
ICAgIExvY2F0aW9uKiBpbXAgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxM
b2NhdGlvbj4oVjhDbGFzc0luZGV4OjpMT0NBVElPTiwgaG9sZGVyKTsKICAgICBTdHJpbmcgcG9y
dCA9IHRvV2ViQ29yZVN0cmluZyh2YWx1ZSk7CiAKICAgICBGcmFtZSogZnJhbWUgPSBpbXAtPmZy
YW1lKCk7CkBAIC0xNzYsNyArMTc2LDcgQEAgQUNDRVNTT1JfU0VUVEVSKExvY2F0aW9uUHJvdG9j
b2wpCiB7CiAgICAgSU5DX1NUQVRTKCJET00uTG9jYXRpb24ucHJvdG9jb2wuX3NldCIpOwogICAg
IHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gaG9sZGVyID0gaW5mby5Ib2xkZXIoKTsKLSAgICBMb2Nh
dGlvbiogaW1wID0gVjhQcm94eTo6Y29udmVydFRvTmF0aXZlT2JqZWN0PExvY2F0aW9uPihWOENs
YXNzSW5kZXg6OkxPQ0FUSU9OLCBob2xkZXIpOworICAgIExvY2F0aW9uKiBpbXAgPSBWOERPTVdy
YXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxMb2NhdGlvbj4oVjhDbGFzc0luZGV4OjpMT0NB
VElPTiwgaG9sZGVyKTsKICAgICBTdHJpbmcgcHJvdG9jb2wgPSB0b1dlYkNvcmVTdHJpbmcodmFs
dWUpOwogCiAgICAgRnJhbWUqIGZyYW1lID0gaW1wLT5mcmFtZSgpOwpAQCAtMTkzLDcgKzE5Myw3
IEBAIEFDQ0VTU09SX1NFVFRFUihMb2NhdGlvblNlYXJjaCkKIHsKICAgICBJTkNfU1RBVFMoIkRP
TS5Mb2NhdGlvbi5zZWFyY2guX3NldCIpOwogICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gaG9s
ZGVyID0gaW5mby5Ib2xkZXIoKTsKLSAgICBMb2NhdGlvbiogaW1wID0gVjhQcm94eTo6Y29udmVy
dFRvTmF0aXZlT2JqZWN0PExvY2F0aW9uPihWOENsYXNzSW5kZXg6OkxPQ0FUSU9OLCBob2xkZXIp
OworICAgIExvY2F0aW9uKiBpbXAgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVj
dDxMb2NhdGlvbj4oVjhDbGFzc0luZGV4OjpMT0NBVElPTiwgaG9sZGVyKTsKICAgICBTdHJpbmcg
cXVlcnkgPSB0b1dlYkNvcmVTdHJpbmcodmFsdWUpOwogCiAgICAgRnJhbWUqIGZyYW1lID0gaW1w
LT5mcmFtZSgpOwpAQCAtMjEwLDEzICsyMTAsMTMgQEAgQUNDRVNTT1JfR0VUVEVSKExvY2F0aW9u
UmVsb2FkKQogewogICAgIElOQ19TVEFUUygiRE9NLkxvY2F0aW9uLnJlbG9hZC5fZ2V0Iik7CiAg
ICAgc3RhdGljIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBwcml2YXRlVGVt
cGxhdGUgPSB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT46Ok5ldyh2ODo6RnVu
Y3Rpb25UZW1wbGF0ZTo6TmV3KHY4TG9jYXRpb25SZWxvYWRDYWxsYmFjaywgdjg6OkhhbmRsZTx2
ODo6VmFsdWU+KCksIHY4OjpTaWduYXR1cmU6Ok5ldyhWOExvY2F0aW9uOjpHZXRSYXdUZW1wbGF0
ZSgpKSkpOwotICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gaG9sZGVyID0gVjhQcm94eTo6bG9v
a3VwRE9NV3JhcHBlcihWOENsYXNzSW5kZXg6OkxPQ0FUSU9OLCBpbmZvLlRoaXMoKSk7CisgICAg
djg6OkhhbmRsZTx2ODo6T2JqZWN0PiBob2xkZXIgPSBWOERPTVdyYXBwZXI6Omxvb2t1cERPTVdy
YXBwZXIoVjhDbGFzc0luZGV4OjpMT0NBVElPTiwgaW5mby5UaGlzKCkpOwogICAgIGlmIChob2xk
ZXIuSXNFbXB0eSgpKSB7CiAgICAgICAgIC8vIGNhbiBvbmx5IHJlYWNoIGhlcmUgYnkgJ29iamVj
dC5fX3Byb3RvX18uZnVuYycsIGFuZCBpdCBzaG91bGQgcGFzc2VkCiAgICAgICAgIC8vIGRvbWFp
biBzZWN1cml0eSBjaGVjayBhbHJlYWR5CiAgICAgICAgIHJldHVybiBwcml2YXRlVGVtcGxhdGUt
PkdldEZ1bmN0aW9uKCk7CiAgICAgfQotICAgIExvY2F0aW9uKiBpbXAgPSBWOFByb3h5Ojpjb252
ZXJ0VG9OYXRpdmVPYmplY3Q8TG9jYXRpb24+KFY4Q2xhc3NJbmRleDo6TE9DQVRJT04sIGhvbGRl
cik7CisgICAgTG9jYXRpb24qIGltcCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2Jq
ZWN0PExvY2F0aW9uPihWOENsYXNzSW5kZXg6OkxPQ0FUSU9OLCBob2xkZXIpOwogICAgIGlmICgh
VjhQcm94eTo6Y2FuQWNjZXNzRnJhbWUoaW1wLT5mcmFtZSgpLCBmYWxzZSkpIHsKICAgICAgICAg
c3RhdGljIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBzaGFyZWRUZW1wbGF0
ZSA9IHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPjo6TmV3KHY4OjpGdW5jdGlv
blRlbXBsYXRlOjpOZXcodjhMb2NhdGlvblJlbG9hZENhbGxiYWNrLCB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4oKSwgdjg6OlNpZ25hdHVyZTo6TmV3KFY4TG9jYXRpb246OkdldFJhd1RlbXBsYXRlKCkp
KSk7CiAgICAgICAgIHJldHVybiBzaGFyZWRUZW1wbGF0ZS0+R2V0RnVuY3Rpb24oKTsKQEAgLTIy
OCwxMyArMjI4LDEzIEBAIEFDQ0VTU09SX0dFVFRFUihMb2NhdGlvblJlcGxhY2UpCiB7CiAgICAg
SU5DX1NUQVRTKCJET00uTG9jYXRpb24ucmVwbGFjZS5fZ2V0Iik7CiAgICAgc3RhdGljIHY4OjpQ
ZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBwcml2YXRlVGVtcGxhdGUgPSB2ODo6UGVy
c2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT46Ok5ldyh2ODo6RnVuY3Rpb25UZW1wbGF0ZTo6
TmV3KHY4TG9jYXRpb25SZXBsYWNlQ2FsbGJhY2ssIHY4OjpIYW5kbGU8djg6OlZhbHVlPigpLCB2
ODo6U2lnbmF0dXJlOjpOZXcoVjhMb2NhdGlvbjo6R2V0UmF3VGVtcGxhdGUoKSkpKTsKLSAgICB2
ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGhvbGRlciA9IFY4UHJveHk6Omxvb2t1cERPTVdyYXBwZXIo
VjhDbGFzc0luZGV4OjpMT0NBVElPTiwgaW5mby5UaGlzKCkpOworICAgIHY4OjpIYW5kbGU8djg6
Ok9iamVjdD4gaG9sZGVyID0gVjhET01XcmFwcGVyOjpsb29rdXBET01XcmFwcGVyKFY4Q2xhc3NJ
bmRleDo6TE9DQVRJT04sIGluZm8uVGhpcygpKTsKICAgICBpZiAoaG9sZGVyLklzRW1wdHkoKSkg
ewogICAgICAgICAvLyBjYW4gb25seSByZWFjaCBoZXJlIGJ5ICdvYmplY3QuX19wcm90b19fLmZ1
bmMnLCBhbmQgaXQgc2hvdWxkIHBhc3NlZAogICAgICAgICAvLyBkb21haW4gc2VjdXJpdHkgY2hl
Y2sgYWxyZWFkeQogICAgICAgICByZXR1cm4gcHJpdmF0ZVRlbXBsYXRlLT5HZXRGdW5jdGlvbigp
OwogICAgIH0KLSAgICBMb2NhdGlvbiogaW1wID0gVjhQcm94eTo6Y29udmVydFRvTmF0aXZlT2Jq
ZWN0PExvY2F0aW9uPihWOENsYXNzSW5kZXg6OkxPQ0FUSU9OLCBob2xkZXIpOworICAgIExvY2F0
aW9uKiBpbXAgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxMb2NhdGlvbj4o
VjhDbGFzc0luZGV4OjpMT0NBVElPTiwgaG9sZGVyKTsKICAgICBpZiAoIVY4UHJveHk6OmNhbkFj
Y2Vzc0ZyYW1lKGltcC0+ZnJhbWUoKSwgZmFsc2UpKSB7CiAgICAgICAgIHN0YXRpYyB2ODo6UGVy
c2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gc2hhcmVkVGVtcGxhdGUgPSB2ODo6UGVyc2lz
dGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT46Ok5ldyh2ODo6RnVuY3Rpb25UZW1wbGF0ZTo6TmV3
KHY4TG9jYXRpb25SZXBsYWNlQ2FsbGJhY2ssIHY4OjpIYW5kbGU8djg6OlZhbHVlPigpLCB2ODo6
U2lnbmF0dXJlOjpOZXcoVjhMb2NhdGlvbjo6R2V0UmF3VGVtcGxhdGUoKSkpKTsKICAgICAgICAg
cmV0dXJuIHNoYXJlZFRlbXBsYXRlLT5HZXRGdW5jdGlvbigpOwpAQCAtMjQ3LDEzICsyNDcsMTMg
QEAgQUNDRVNTT1JfR0VUVEVSKExvY2F0aW9uQXNzaWduKQogICAgIElOQ19TVEFUUygiRE9NLkxv
Y2F0aW9uLmFzc2lnbi5fZ2V0Iik7CiAgICAgc3RhdGljIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5j
dGlvblRlbXBsYXRlPiBwcml2YXRlVGVtcGxhdGUgPQogICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpG
dW5jdGlvblRlbXBsYXRlPjo6TmV3KHY4OjpGdW5jdGlvblRlbXBsYXRlOjpOZXcodjhMb2NhdGlv
bkFzc2lnbkNhbGxiYWNrLCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKSwgdjg6OlNpZ25hdHVyZTo6
TmV3KFY4TG9jYXRpb246OkdldFJhd1RlbXBsYXRlKCkpKSk7Ci0gICAgdjg6OkhhbmRsZTx2ODo6
T2JqZWN0PiBob2xkZXIgPSBWOFByb3h5Ojpsb29rdXBET01XcmFwcGVyKFY4Q2xhc3NJbmRleDo6
TE9DQVRJT04sIGluZm8uVGhpcygpKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGhvbGRl
ciA9IFY4RE9NV3JhcHBlcjo6bG9va3VwRE9NV3JhcHBlcihWOENsYXNzSW5kZXg6OkxPQ0FUSU9O
LCBpbmZvLlRoaXMoKSk7CiAgICAgaWYgKGhvbGRlci5Jc0VtcHR5KCkpIHsKICAgICAgICAgLy8g
Y2FuIG9ubHkgcmVhY2ggaGVyZSBieSAnb2JqZWN0Ll9fcHJvdG9fXy5mdW5jJywgYW5kIGl0IHNo
b3VsZCBwYXNzZWQKICAgICAgICAgLy8gZG9tYWluIHNlY3VyaXR5IGNoZWNrIGFscmVhZHkKICAg
ICAgICAgcmV0dXJuIHByaXZhdGVUZW1wbGF0ZS0+R2V0RnVuY3Rpb24oKTsKICAgICB9Ci0gICAg
TG9jYXRpb24qIGltcCA9IFY4UHJveHk6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxMb2NhdGlvbj4o
VjhDbGFzc0luZGV4OjpMT0NBVElPTiwgaG9sZGVyKTsKKyAgICBMb2NhdGlvbiogaW1wID0gVjhE
T01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8TG9jYXRpb24+KFY4Q2xhc3NJbmRleDo6
TE9DQVRJT04sIGhvbGRlcik7CiAgICAgaWYgKCFWOFByb3h5OjpjYW5BY2Nlc3NGcmFtZShpbXAt
PmZyYW1lKCksIGZhbHNlKSkgewogICAgICAgICBzdGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1
bmN0aW9uVGVtcGxhdGU+IHNoYXJlZFRlbXBsYXRlID0gdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0
aW9uVGVtcGxhdGU+OjpOZXcodjg6OkZ1bmN0aW9uVGVtcGxhdGU6Ok5ldyh2OExvY2F0aW9uQXNz
aWduQ2FsbGJhY2ssIHY4OjpIYW5kbGU8djg6OlZhbHVlPigpLCB2ODo6U2lnbmF0dXJlOjpOZXco
VjhMb2NhdGlvbjo6R2V0UmF3VGVtcGxhdGUoKSkpKTsKICAgICAgICAgcmV0dXJuIHNoYXJlZFRl
bXBsYXRlLT5HZXRGdW5jdGlvbigpOwpAQCAtMjY3LDcgKzI2Nyw3IEBAIENBTExCQUNLX0ZVTkNf
REVDTChMb2NhdGlvblJlbG9hZCkKIAogICAgIElOQ19TVEFUUygiRE9NLkxvY2F0aW9uLnJlbG9h
ZCIpOwogICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBob2xkZXIgPSBhcmdzLkhvbGRlcigpOwot
ICAgIExvY2F0aW9uKiBpbXAgPSBWOFByb3h5Ojpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8TG9jYXRp
b24+KFY4Q2xhc3NJbmRleDo6TE9DQVRJT04sIGhvbGRlcik7CisgICAgTG9jYXRpb24qIGltcCA9
IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PExvY2F0aW9uPihWOENsYXNzSW5k
ZXg6OkxPQ0FUSU9OLCBob2xkZXIpOwogCiAgICAgRnJhbWUqIGZyYW1lID0gaW1wLT5mcmFtZSgp
OwogICAgIGlmICghZnJhbWUgfHwgIVNjcmlwdENvbnRyb2xsZXI6OmlzU2FmZVNjcmlwdChmcmFt
ZSkpCkBAIC0yODIsNyArMjgyLDcgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKExvY2F0aW9uUmVwbGFj
ZSkKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5Mb2NhdGlvbi5yZXBsYWNlIik7CiAgICAgdjg6Okhh
bmRsZTx2ODo6VmFsdWU+IGhvbGRlciA9IGFyZ3MuSG9sZGVyKCk7Ci0gICAgTG9jYXRpb24qIGlt
cCA9IFY4UHJveHk6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxMb2NhdGlvbj4oVjhDbGFzc0luZGV4
OjpMT0NBVElPTiwgaG9sZGVyKTsKKyAgICBMb2NhdGlvbiogaW1wID0gVjhET01XcmFwcGVyOjpj
b252ZXJ0VG9OYXRpdmVPYmplY3Q8TG9jYXRpb24+KFY4Q2xhc3NJbmRleDo6TE9DQVRJT04sIGhv
bGRlcik7CiAKICAgICBGcmFtZSogZnJhbWUgPSBpbXAtPmZyYW1lKCk7CiAgICAgaWYgKCFmcmFt
ZSkKQEAgLTMwMyw3ICszMDMsNyBAQCBDQUxMQkFDS19GVU5DX0RFQ0woTG9jYXRpb25Bc3NpZ24p
CiB7CiAgICAgSU5DX1NUQVRTKCJET00uTG9jYXRpb24uYXNzaWduIik7CiAgICAgdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IGhvbGRlciA9IGFyZ3MuSG9sZGVyKCk7Ci0gICAgTG9jYXRpb24qIGltcCA9
IFY4UHJveHk6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxMb2NhdGlvbj4oVjhDbGFzc0luZGV4OjpM
T0NBVElPTiwgaG9sZGVyKTsKKyAgICBMb2NhdGlvbiogaW1wID0gVjhET01XcmFwcGVyOjpjb252
ZXJ0VG9OYXRpdmVPYmplY3Q8TG9jYXRpb24+KFY4Q2xhc3NJbmRleDo6TE9DQVRJT04sIGhvbGRl
cik7CiAKICAgICBGcmFtZSogZnJhbWUgPSBpbXAtPmZyYW1lKCk7CiAgICAgaWYgKCFmcmFtZSkK
QEAgLTMzNCw3ICszMzQsNyBAQCBDQUxMQkFDS19GVU5DX0RFQ0woTG9jYXRpb25Ub1N0cmluZykK
IHsKICAgICBJTkNfU1RBVFMoIkRPTS5Mb2NhdGlvbi50b1N0cmluZyIpOwogICAgIHY4OjpIYW5k
bGU8djg6OlZhbHVlPiBob2xkZXIgPSBhcmdzLkhvbGRlcigpOwotICAgIExvY2F0aW9uKiBpbXAg
PSBWOFByb3h5Ojpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8TG9jYXRpb24+KFY4Q2xhc3NJbmRleDo6
TE9DQVRJT04sIGhvbGRlcik7CisgICAgTG9jYXRpb24qIGltcCA9IFY4RE9NV3JhcHBlcjo6Y29u
dmVydFRvTmF0aXZlT2JqZWN0PExvY2F0aW9uPihWOENsYXNzSW5kZXg6OkxPQ0FUSU9OLCBob2xk
ZXIpOwogICAgIGlmICghVjhQcm94eTo6Y2FuQWNjZXNzRnJhbWUoaW1wLT5mcmFtZSgpLCB0cnVl
KSkKICAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKICAgICBTdHJpbmcgcmVzdWx0ID0g
aW1wLT5ocmVmKCk7CkBAIC0zNDUsNyArMzQ1LDcgQEAgSU5ERVhFRF9BQ0NFU1NfQ0hFQ0soTG9j
YXRpb24pCiB7CiAgICAgQVNTRVJUKFY4Q2xhc3NJbmRleDo6RnJvbUludChkYXRhLT5JbnQzMlZh
bHVlKCkpID09IFY4Q2xhc3NJbmRleDo6TE9DQVRJT04pOwogICAgIC8vIE9ubHkgYWxsb3cgc2Ft
ZSBvcmlnaW4gYWNjZXNzCi0gICAgTG9jYXRpb24qIGltcCA9ICBWOFByb3h5Ojpjb252ZXJ0VG9O
YXRpdmVPYmplY3Q8TG9jYXRpb24+KFY4Q2xhc3NJbmRleDo6TE9DQVRJT04sIGhvc3QpOworICAg
IExvY2F0aW9uKiBpbXAgPSAgVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8TG9j
YXRpb24+KFY4Q2xhc3NJbmRleDo6TE9DQVRJT04sIGhvc3QpOwogICAgIHJldHVybiBWOFByb3h5
OjpjYW5BY2Nlc3NGcmFtZShpbXAtPmZyYW1lKCksIGZhbHNlKTsKIH0KIApAQCAtMzUzLDcgKzM1
Myw3IEBAIE5BTUVEX0FDQ0VTU19DSEVDSyhMb2NhdGlvbikKIHsKICAgICBBU1NFUlQoVjhDbGFz
c0luZGV4OjpGcm9tSW50KGRhdGEtPkludDMyVmFsdWUoKSkgPT0gVjhDbGFzc0luZGV4OjpMT0NB
VElPTik7CiAgICAgLy8gT25seSBhbGxvdyBzYW1lIG9yaWdpbiBhY2Nlc3MKLSAgICBMb2NhdGlv
biogaW1wID0gVjhQcm94eTo6Y29udmVydFRvTmF0aXZlT2JqZWN0PExvY2F0aW9uPihWOENsYXNz
SW5kZXg6OkxPQ0FUSU9OLCBob3N0KTsKKyAgICBMb2NhdGlvbiogaW1wID0gVjhET01XcmFwcGVy
Ojpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8TG9jYXRpb24+KFY4Q2xhc3NJbmRleDo6TE9DQVRJT04s
IGhvc3QpOwogICAgIHJldHVybiBWOFByb3h5OjpjYW5BY2Nlc3NGcmFtZShpbXAtPmZyYW1lKCks
IGZhbHNlKTsKIH0KIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhNZXNzYWdl
Q2hhbm5lbENvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOE1lc3NhZ2VDaGFubmVsQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiA0NTY1MCkK
KysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4TWVzc2FnZUNoYW5uZWxDb25zdHJ1Y3Rv
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcyLDExICs3MiwxMSBAQCBDQUxMQkFDS19GVU5DX0RF
Q0woTWVzc2FnZUNoYW5uZWxDb25zdHJ1CiAgICAgLy8gQ3JlYXRlIHJlZmVyZW5jZXMgZnJvbSB0
aGUgTWVzc2FnZUNoYW5uZWwgd3JhcHBlciB0byB0aGUgdHdvCiAgICAgLy8gTWVzc2FnZVBvcnQg
d3JhcHBlcnMgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIE1lc3NhZ2VQb3J0IHdyYXBwZXJzCiAgICAg
Ly8gc3RheSBhbGl2ZSBhcyBsb25nIGFzIHRoZSBNZXNzYWdlQ2hhbm5lbCB3cmFwcGVyIGlzIGFy
b3VuZC4KLSAgICBtZXNzYWdlQ2hhbm5lbC0+U2V0SW50ZXJuYWxGaWVsZChrTWVzc2FnZUNoYW5u
ZWxQb3J0MUluZGV4LCBWOFByb3h5Ojpjb252ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6Ok1F
U1NBR0VQT1JULCBvYmotPnBvcnQxKCkpKTsKLSAgICBtZXNzYWdlQ2hhbm5lbC0+U2V0SW50ZXJu
YWxGaWVsZChrTWVzc2FnZUNoYW5uZWxQb3J0MkluZGV4LCBWOFByb3h5Ojpjb252ZXJ0VG9WOE9i
amVjdChWOENsYXNzSW5kZXg6Ok1FU1NBR0VQT1JULCBvYmotPnBvcnQyKCkpKTsKKyAgICBtZXNz
YWdlQ2hhbm5lbC0+U2V0SW50ZXJuYWxGaWVsZChrTWVzc2FnZUNoYW5uZWxQb3J0MUluZGV4LCBW
OERPTVdyYXBwZXI6OmNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6TUVTU0FHRVBPUlQs
IG9iai0+cG9ydDEoKSkpOworICAgIG1lc3NhZ2VDaGFubmVsLT5TZXRJbnRlcm5hbEZpZWxkKGtN
ZXNzYWdlQ2hhbm5lbFBvcnQySW5kZXgsIFY4RE9NV3JhcHBlcjo6Y29udmVydFRvVjhPYmplY3Qo
VjhDbGFzc0luZGV4OjpNRVNTQUdFUE9SVCwgb2JqLT5wb3J0MigpKSk7CiAKICAgICAvLyBTZXR1
cCB0aGUgc3RhbmRhcmQgd3JhcHBlciBvYmplY3QgaW50ZXJuYWwgZmllbGRzLgotICAgIFY4UHJv
eHk6OnNldERPTVdyYXBwZXIobWVzc2FnZUNoYW5uZWwsIFY4Q2xhc3NJbmRleDo6TUVTU0FHRUNI
QU5ORUwsIG9iai5nZXQoKSk7CisgICAgVjhET01XcmFwcGVyOjpzZXRET01XcmFwcGVyKG1lc3Nh
Z2VDaGFubmVsLCBWOENsYXNzSW5kZXg6Ok1FU1NBR0VDSEFOTkVMLCBvYmouZ2V0KCkpOwogICAg
IHJldHVybiB0b1Y4KG9iai5yZWxlYXNlKCksIG1lc3NhZ2VDaGFubmVsKTsKIH0KIApJbmRleDog
V2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhNZXNzYWdlUG9ydEN1c3RvbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhNZXNzYWdlUG9ydEN1c3RvbS5j
cHAJKHJldmlzaW9uIDQ1NjUwKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhNZXNz
YWdlUG9ydEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDE0ICs0MywxNCBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiBBQ0NFU1NPUl9HRVRURVIoTWVzc2FnZVBvcnRPbm1lc3NhZ2UpCiB7
CiAgICAgSU5DX1NUQVRTKCJET00uTWVzc2FnZVBvcnQub25tZXNzYWdlLl9nZXQiKTsKLSAgICBN
ZXNzYWdlUG9ydCogbWVzc2FnZVBvcnQgPSBWOFByb3h5Ojpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8
TWVzc2FnZVBvcnQ+KFY4Q2xhc3NJbmRleDo6TUVTU0FHRVBPUlQsIGluZm8uSG9sZGVyKCkpOwot
ICAgIHJldHVybiBWOFByb3h5Ojpjb252ZXJ0RXZlbnRMaXN0ZW5lclRvVjhPYmplY3QobWVzc2Fn
ZVBvcnQtPm9ubWVzc2FnZSgpKTsKKyAgICBNZXNzYWdlUG9ydCogbWVzc2FnZVBvcnQgPSBWOERP
TVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxNZXNzYWdlUG9ydD4oVjhDbGFzc0luZGV4
OjpNRVNTQUdFUE9SVCwgaW5mby5Ib2xkZXIoKSk7CisgICAgcmV0dXJuIFY4RE9NV3JhcHBlcjo6
Y29udmVydEV2ZW50TGlzdGVuZXJUb1Y4T2JqZWN0KG1lc3NhZ2VQb3J0LT5vbm1lc3NhZ2UoKSk7
CiB9CiAKIEFDQ0VTU09SX1NFVFRFUihNZXNzYWdlUG9ydE9ubWVzc2FnZSkKIHsKICAgICBJTkNf
U1RBVFMoIkRPTS5NZXNzYWdlUG9ydC5vbm1lc3NhZ2UuX3NldCIpOwotICAgIE1lc3NhZ2VQb3J0
KiBtZXNzYWdlUG9ydCA9IFY4UHJveHk6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxNZXNzYWdlUG9y
dD4oVjhDbGFzc0luZGV4OjpNRVNTQUdFUE9SVCwgaW5mby5Ib2xkZXIoKSk7CisgICAgTWVzc2Fn
ZVBvcnQqIG1lc3NhZ2VQb3J0ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8
TWVzc2FnZVBvcnQ+KFY4Q2xhc3NJbmRleDo6TUVTU0FHRVBPUlQsIGluZm8uSG9sZGVyKCkpOwog
ICAgIGlmICh2YWx1ZS0+SXNOdWxsKCkpIHsKICAgICAgICAgaWYgKG1lc3NhZ2VQb3J0LT5vbm1l
c3NhZ2UoKSkgewogICAgICAgICAgICAgVjhPYmplY3RFdmVudExpc3RlbmVyKiBsaXN0ZW5lciA9
IHN0YXRpY19jYXN0PFY4T2JqZWN0RXZlbnRMaXN0ZW5lcio+KG1lc3NhZ2VQb3J0LT5vbm1lc3Nh
Z2UoKSk7CkBAIC03Niw3ICs3Niw3IEBAIEFDQ0VTU09SX1NFVFRFUihNZXNzYWdlUG9ydE9ubWVz
c2FnZSkKIENBTExCQUNLX0ZVTkNfREVDTChNZXNzYWdlUG9ydEFkZEV2ZW50TGlzdGVuZXIpCiB7
CiAgICAgSU5DX1NUQVRTKCJET00uTWVzc2FnZVBvcnQuQWRkRXZlbnRMaXN0ZW5lcigpIik7Ci0g
ICAgTWVzc2FnZVBvcnQqIG1lc3NhZ2VQb3J0ID0gVjhQcm94eTo6Y29udmVydFRvTmF0aXZlT2Jq
ZWN0PE1lc3NhZ2VQb3J0PihWOENsYXNzSW5kZXg6Ok1FU1NBR0VQT1JULCBhcmdzLkhvbGRlcigp
KTsKKyAgICBNZXNzYWdlUG9ydCogbWVzc2FnZVBvcnQgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRU
b05hdGl2ZU9iamVjdDxNZXNzYWdlUG9ydD4oVjhDbGFzc0luZGV4OjpNRVNTQUdFUE9SVCwgYXJn
cy5Ib2xkZXIoKSk7CiAKICAgICBWOFByb3h5KiBwcm94eSA9IFY4UHJveHk6OnJldHJpZXZlKG1l
c3NhZ2VQb3J0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOwogICAgIGlmICghcHJveHkpCkBA
IC05Niw3ICs5Niw3IEBAIENBTExCQUNLX0ZVTkNfREVDTChNZXNzYWdlUG9ydEFkZEV2ZW50TGkK
IENBTExCQUNLX0ZVTkNfREVDTChNZXNzYWdlUG9ydFJlbW92ZUV2ZW50TGlzdGVuZXIpCiB7CiAg
ICAgSU5DX1NUQVRTKCJET00uTWVzc2FnZVBvcnQuUmVtb3ZlRXZlbnRMaXN0ZW5lcigpIik7Ci0g
ICAgTWVzc2FnZVBvcnQqIG1lc3NhZ2VQb3J0ID0gVjhQcm94eTo6Y29udmVydFRvTmF0aXZlT2Jq
ZWN0PE1lc3NhZ2VQb3J0PihWOENsYXNzSW5kZXg6Ok1FU1NBR0VQT1JULCBhcmdzLkhvbGRlcigp
KTsKKyAgICBNZXNzYWdlUG9ydCogbWVzc2FnZVBvcnQgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRU
b05hdGl2ZU9iamVjdDxNZXNzYWdlUG9ydD4oVjhDbGFzc0luZGV4OjpNRVNTQUdFUE9SVCwgYXJn
cy5Ib2xkZXIoKSk7CiAKICAgICBWOFByb3h5KiBwcm94eSA9IFY4UHJveHk6OnJldHJpZXZlKG1l
c3NhZ2VQb3J0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOwogICAgIGlmICghcHJveHkpCklu
ZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE5hbWVkTm9kZU1hcEN1c3RvbS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhOYW1lZE5vZGVNYXBD
dXN0b20uY3BwCShyZXZpc2lvbiA0NTY1MCkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9t
L1Y4TmFtZWROb2RlTWFwQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsMTIgKzQyLDEy
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIElOREVYRURfUFJPUEVSVFlfR0VUVEVSKE5hbWVkTm9k
ZU1hcCkKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5OYW1lZE5vZGVNYXAuSW5kZXhlZFByb3BlcnR5
R2V0dGVyIik7Ci0gICAgTmFtZWROb2RlTWFwKiBpbXAgPSBWOFByb3h5Ojpjb252ZXJ0VG9OYXRp
dmVPYmplY3Q8TmFtZWROb2RlTWFwPihWOENsYXNzSW5kZXg6Ok5BTUVETk9ERU1BUCwgaW5mby5I
b2xkZXIoKSk7CisgICAgTmFtZWROb2RlTWFwKiBpbXAgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRU
b05hdGl2ZU9iamVjdDxOYW1lZE5vZGVNYXA+KFY4Q2xhc3NJbmRleDo6TkFNRUROT0RFTUFQLCBp
bmZvLkhvbGRlcigpKTsKICAgICBSZWZQdHI8Tm9kZT4gcmVzdWx0ID0gaW1wLT5pdGVtKGluZGV4
KTsKICAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgcmV0dXJuIG5vdEhhbmRsZWRCeUludGVyY2Vw
dG9yKCk7CiAKLSAgICByZXR1cm4gVjhQcm94eTo6Y29udmVydE5vZGVUb1Y4T2JqZWN0KHJlc3Vs
dC5nZXQoKSk7CisgICAgcmV0dXJuIFY4RE9NV3JhcHBlcjo6Y29udmVydE5vZGVUb1Y4T2JqZWN0
KHJlc3VsdC5nZXQoKSk7CiB9CiAKIE5BTUVEX1BST1BFUlRZX0dFVFRFUihOYW1lZE5vZGVNYXAp
CkBAIC02MywxMiArNjMsMTIgQEAgTkFNRURfUFJPUEVSVFlfR0VUVEVSKE5hbWVkTm9kZU1hcCkK
ICAgICAgICAgcmV0dXJuIG5vdEhhbmRsZWRCeUludGVyY2VwdG9yKCk7CiAKICAgICAvLyBGaW5h
bGx5LCBzZWFyY2ggdGhlIERPTS4KLSAgICBOYW1lZE5vZGVNYXAqIGltcCA9IFY4UHJveHk6OmNv
bnZlcnRUb05hdGl2ZU9iamVjdDxOYW1lZE5vZGVNYXA+KFY4Q2xhc3NJbmRleDo6TkFNRUROT0RF
TUFQLCBpbmZvLkhvbGRlcigpKTsKKyAgICBOYW1lZE5vZGVNYXAqIGltcCA9IFY4RE9NV3JhcHBl
cjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PE5hbWVkTm9kZU1hcD4oVjhDbGFzc0luZGV4OjpOQU1F
RE5PREVNQVAsIGluZm8uSG9sZGVyKCkpOwogICAgIFJlZlB0cjxOb2RlPiByZXN1bHQgPSBpbXAt
PmdldE5hbWVkSXRlbSh0b1dlYkNvcmVTdHJpbmcobmFtZSkpOwogICAgIGlmICghcmVzdWx0KQog
ICAgICAgICByZXR1cm4gbm90SGFuZGxlZEJ5SW50ZXJjZXB0b3IoKTsKIAotICAgIHJldHVybiBW
OFByb3h5Ojpjb252ZXJ0Tm9kZVRvVjhPYmplY3QocmVzdWx0LmdldCgpKTsKKyAgICByZXR1cm4g
VjhET01XcmFwcGVyOjpjb252ZXJ0Tm9kZVRvVjhPYmplY3QocmVzdWx0LmdldCgpKTsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20v
VjhOYXZpZ2F0b3JDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4TmF2aWdhdG9yQ3VzdG9tLmNwcAkocmV2aXNpb24gNDU2NTApCisrKyBXZWJDb3Jl
L2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE5hdmlnYXRvckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQxLDcgKzQxLDcgQEAgQUNDRVNTT1JfR0VUVEVSKE5hdmlnYXRvckFwcFZlcnNpb24pCiB7
CiAgICAgSU5DX1NUQVRTKCJET00uTmF2aWdhdG9yLmFwcFZlcnNpb24iKTsKICAgICB2ODo6SGFu
ZGxlPHY4OjpPYmplY3Q+IGhvbGRlciA9IGluZm8uSG9sZGVyKCk7Ci0gICAgTmF2aWdhdG9yKiBu
YXZpZ2F0b3IgPSBWOFByb3h5Ojpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8TmF2aWdhdG9yPihWOENs
YXNzSW5kZXg6Ok5BVklHQVRPUiwgaG9sZGVyKTsKKyAgICBOYXZpZ2F0b3IqIG5hdmlnYXRvciA9
IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PE5hdmlnYXRvcj4oVjhDbGFzc0lu
ZGV4OjpOQVZJR0FUT1IsIGhvbGRlcik7CiAgICAgcmV0dXJuIHY4U3RyaW5nT3JVbmRlZmluZWQo
bmF2aWdhdG9yLT5hcHBWZXJzaW9uKCkpOwogfQogCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOE5vZGVDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mv
djgvY3VzdG9tL1Y4Tm9kZUN1c3RvbS5jcHAJKHJldmlzaW9uIDQ1NjUwKQorKysgV2ViQ29yZS9i
aW5kaW5ncy92OC9jdXN0b20vVjhOb2RlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcs
NyArNDcsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBDQUxMQkFDS19GVU5DX0RFQ0woTm9kZUFk
ZEV2ZW50TGlzdGVuZXIpCiB7CiAgICAgSU5DX1NUQVRTKCJET00uTm9kZS5hZGRFdmVudExpc3Rl
bmVyKCkiKTsKLSAgICBOb2RlKiBub2RlID0gVjhQcm94eTo6Y29udmVydERPTVdyYXBwZXJUb05v
ZGU8Tm9kZT4oYXJncy5Ib2xkZXIoKSk7CisgICAgTm9kZSogbm9kZSA9IFY4RE9NV3JhcHBlcjo6
Y29udmVydERPTVdyYXBwZXJUb05vZGU8Tm9kZT4oYXJncy5Ib2xkZXIoKSk7CiAKICAgICBWOFBy
b3h5KiBwcm94eSA9IFY4UHJveHk6OnJldHJpZXZlKG5vZGUtPmRvY3VtZW50KCktPmZyYW1lKCkp
OwogICAgIGlmICghcHJveHkpCkBAIC02NSw3ICs2NSw3IEBAIENBTExCQUNLX0ZVTkNfREVDTChO
b2RlQWRkRXZlbnRMaXN0ZW5lcikKIENBTExCQUNLX0ZVTkNfREVDTChOb2RlUmVtb3ZlRXZlbnRM
aXN0ZW5lcikKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5Ob2RlLnJlbW92ZUV2ZW50TGlzdGVuZXIo
KSIpOwotICAgIE5vZGUqIG5vZGUgPSBWOFByb3h5Ojpjb252ZXJ0RE9NV3JhcHBlclRvTm9kZTxO
b2RlPihhcmdzLkhvbGRlcigpKTsKKyAgICBOb2RlKiBub2RlID0gVjhET01XcmFwcGVyOjpjb252
ZXJ0RE9NV3JhcHBlclRvTm9kZTxOb2RlPihhcmdzLkhvbGRlcigpKTsKIAogICAgIFY4UHJveHkq
IHByb3h5ID0gVjhQcm94eTo6cmV0cmlldmUobm9kZS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKSk7CiAg
ICAgLy8gSXQgaXMgcG9zc2JpbGUgdGhhdCB0aGUgb3duZXIgZG9jdW1lbnQgb2YgdGhlIG5vZGUg
aXMgZGV0YWNoZWQKQEAgLTg5LDEwICs4OSwxMCBAQCBDQUxMQkFDS19GVU5DX0RFQ0woTm9kZUlu
c2VydEJlZm9yZSkKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5Ob2RlLmluc2VydEJlZm9yZSIpOwog
ICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBob2xkZXIgPSBhcmdzLkhvbGRlcigpOwotICAgIE5v
ZGUqIGltcCA9IFY4UHJveHk6OmNvbnZlcnRET01XcmFwcGVyVG9Ob2RlPE5vZGU+KGhvbGRlcik7
CisgICAgTm9kZSogaW1wID0gVjhET01XcmFwcGVyOjpjb252ZXJ0RE9NV3JhcHBlclRvTm9kZTxO
b2RlPihob2xkZXIpOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIE5vZGUqIG5ld0No
aWxkID0gVjhOb2RlOjpIYXNJbnN0YW5jZShhcmdzWzBdKSA/IFY4UHJveHk6OmNvbnZlcnRET01X
cmFwcGVyVG9Ob2RlPE5vZGU+KGFyZ3NbMF0pIDogMDsKLSAgICBOb2RlKiByZWZDaGlsZCA9IFY4
Tm9kZTo6SGFzSW5zdGFuY2UoYXJnc1sxXSkgPyBWOFByb3h5Ojpjb252ZXJ0RE9NV3JhcHBlclRv
Tm9kZTxOb2RlPihhcmdzWzFdKSA6IDA7CisgICAgTm9kZSogbmV3Q2hpbGQgPSBWOE5vZGU6Okhh
c0luc3RhbmNlKGFyZ3NbMF0pID8gVjhET01XcmFwcGVyOjpjb252ZXJ0RE9NV3JhcHBlclRvTm9k
ZTxOb2RlPihhcmdzWzBdKSA6IDA7CisgICAgTm9kZSogcmVmQ2hpbGQgPSBWOE5vZGU6Okhhc0lu
c3RhbmNlKGFyZ3NbMV0pID8gVjhET01XcmFwcGVyOjpjb252ZXJ0RE9NV3JhcHBlclRvTm9kZTxO
b2RlPihhcmdzWzFdKSA6IDA7CiAgICAgYm9vbCBzdWNjZXNzID0gaW1wLT5pbnNlcnRCZWZvcmUo
bmV3Q2hpbGQsIHJlZkNoaWxkLCBlYywgdHJ1ZSk7CiAgICAgaWYgKGVjKSB7CiAgICAgICAgIFY4
UHJveHk6OnNldERPTUV4Y2VwdGlvbihlYyk7CkBAIC0xMDgsMTAgKzEwOCwxMCBAQCBDQUxMQkFD
S19GVU5DX0RFQ0woTm9kZVJlcGxhY2VDaGlsZCkKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5Ob2Rl
LnJlcGxhY2VDaGlsZCIpOwogICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBob2xkZXIgPSBhcmdz
LkhvbGRlcigpOwotICAgIE5vZGUqIGltcCA9IFY4UHJveHk6OmNvbnZlcnRET01XcmFwcGVyVG9O
b2RlPE5vZGU+KGhvbGRlcik7CisgICAgTm9kZSogaW1wID0gVjhET01XcmFwcGVyOjpjb252ZXJ0
RE9NV3JhcHBlclRvTm9kZTxOb2RlPihob2xkZXIpOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAw
OwotICAgIE5vZGUqIG5ld0NoaWxkID0gVjhOb2RlOjpIYXNJbnN0YW5jZShhcmdzWzBdKSA/IFY4
UHJveHk6OmNvbnZlcnRET01XcmFwcGVyVG9Ob2RlPE5vZGU+KGFyZ3NbMF0pIDogMDsKLSAgICBO
b2RlKiBvbGRDaGlsZCA9IFY4Tm9kZTo6SGFzSW5zdGFuY2UoYXJnc1sxXSkgPyBWOFByb3h5Ojpj
b252ZXJ0RE9NV3JhcHBlclRvTm9kZTxOb2RlPihhcmdzWzFdKSA6IDA7CisgICAgTm9kZSogbmV3
Q2hpbGQgPSBWOE5vZGU6Okhhc0luc3RhbmNlKGFyZ3NbMF0pID8gVjhET01XcmFwcGVyOjpjb252
ZXJ0RE9NV3JhcHBlclRvTm9kZTxOb2RlPihhcmdzWzBdKSA6IDA7CisgICAgTm9kZSogb2xkQ2hp
bGQgPSBWOE5vZGU6Okhhc0luc3RhbmNlKGFyZ3NbMV0pID8gVjhET01XcmFwcGVyOjpjb252ZXJ0
RE9NV3JhcHBlclRvTm9kZTxOb2RlPihhcmdzWzFdKSA6IDA7CiAgICAgYm9vbCBzdWNjZXNzID0g
aW1wLT5yZXBsYWNlQ2hpbGQobmV3Q2hpbGQsIG9sZENoaWxkLCBlYywgdHJ1ZSk7CiAgICAgaWYg
KGVjKSB7CiAgICAgICAgIFY4UHJveHk6OnNldERPTUV4Y2VwdGlvbihlYyk7CkBAIC0xMjYsOSAr
MTI2LDkgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKE5vZGVSZW1vdmVDaGlsZCkKIHsKICAgICBJTkNf
U1RBVFMoIkRPTS5Ob2RlLnJlbW92ZUNoaWxkIik7CiAgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+
IGhvbGRlciA9IGFyZ3MuSG9sZGVyKCk7Ci0gICAgTm9kZSogaW1wID0gVjhQcm94eTo6Y29udmVy
dERPTVdyYXBwZXJUb05vZGU8Tm9kZT4oaG9sZGVyKTsKKyAgICBOb2RlKiBpbXAgPSBWOERPTVdy
YXBwZXI6OmNvbnZlcnRET01XcmFwcGVyVG9Ob2RlPE5vZGU+KGhvbGRlcik7CiAgICAgRXhjZXB0
aW9uQ29kZSBlYyA9IDA7Ci0gICAgTm9kZSogb2xkQ2hpbGQgPSBWOE5vZGU6Okhhc0luc3RhbmNl
KGFyZ3NbMF0pID8gVjhQcm94eTo6Y29udmVydERPTVdyYXBwZXJUb05vZGU8Tm9kZT4oYXJnc1sw
XSkgOiAwOworICAgIE5vZGUqIG9sZENoaWxkID0gVjhOb2RlOjpIYXNJbnN0YW5jZShhcmdzWzBd
KSA/IFY4RE9NV3JhcHBlcjo6Y29udmVydERPTVdyYXBwZXJUb05vZGU8Tm9kZT4oYXJnc1swXSkg
OiAwOwogICAgIGJvb2wgc3VjY2VzcyA9IGltcC0+cmVtb3ZlQ2hpbGQob2xkQ2hpbGQsIGVjKTsK
ICAgICBpZiAoZWMpIHsKICAgICAgICAgVjhQcm94eTo6c2V0RE9NRXhjZXB0aW9uKGVjKTsKQEAg
LTE0NCw5ICsxNDQsOSBAQCBDQUxMQkFDS19GVU5DX0RFQ0woTm9kZUFwcGVuZENoaWxkKQogewog
ICAgIElOQ19TVEFUUygiRE9NLk5vZGUuYXBwZW5kQ2hpbGQiKTsKICAgICB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gaG9sZGVyID0gYXJncy5Ib2xkZXIoKTsKLSAgICBOb2RlKiBpbXAgPSBWOFByb3h5
Ojpjb252ZXJ0RE9NV3JhcHBlclRvTm9kZTxOb2RlPihob2xkZXIpOworICAgIE5vZGUqIGltcCA9
IFY4RE9NV3JhcHBlcjo6Y29udmVydERPTVdyYXBwZXJUb05vZGU8Tm9kZT4oaG9sZGVyKTsKICAg
ICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBOb2RlKiBuZXdDaGlsZCA9IFY4Tm9kZTo6SGFz
SW5zdGFuY2UoYXJnc1swXSkgPyBWOFByb3h5Ojpjb252ZXJ0RE9NV3JhcHBlclRvTm9kZTxOb2Rl
PihhcmdzWzBdKSA6IDA7CisgICAgTm9kZSogbmV3Q2hpbGQgPSBWOE5vZGU6Okhhc0luc3RhbmNl
KGFyZ3NbMF0pID8gVjhET01XcmFwcGVyOjpjb252ZXJ0RE9NV3JhcHBlclRvTm9kZTxOb2RlPihh
cmdzWzBdKSA6IDA7CiAgICAgYm9vbCBzdWNjZXNzID0gaW1wLT5hcHBlbmRDaGlsZChuZXdDaGls
ZCwgZWMsIHRydWUgKTsKICAgICBpZiAoZWMpIHsKICAgICAgICAgVjhQcm94eTo6c2V0RE9NRXhj
ZXB0aW9uKGVjKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Tm9kZUl0ZXJh
dG9yQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9W
OE5vZGVJdGVyYXRvckN1c3RvbS5jcHAJKHJldmlzaW9uIDQ1NjUwKQorKysgV2ViQ29yZS9iaW5k
aW5ncy92OC9jdXN0b20vVjhOb2RlSXRlcmF0b3JDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01MywxMyArNTMsMTMgQEAgc3RhdGljIGlubGluZSB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9W
OAogICAgIGlmICghb2JqZWN0KQogICAgICAgICByZXR1cm4gdjg6Ok51bGwoKTsKIAotICAgIHJl
dHVybiBWOFByb3h5Ojpjb252ZXJ0Tm9kZVRvVjhPYmplY3Qob2JqZWN0LmdldCgpKTsKKyAgICBy
ZXR1cm4gVjhET01XcmFwcGVyOjpjb252ZXJ0Tm9kZVRvVjhPYmplY3Qob2JqZWN0LmdldCgpKTsK
IH0KIAogQ0FMTEJBQ0tfRlVOQ19ERUNMKE5vZGVJdGVyYXRvck5leHROb2RlKQogewogICAgIElO
Q19TVEFUUygiRE9NLk5vZGVJdGVyYXRvci5uZXh0Tm9kZSgpIik7Ci0gICAgTm9kZUl0ZXJhdG9y
KiBub2RlSXRlcmF0b3IgPSBWOFByb3h5Ojpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8Tm9kZUl0ZXJh
dG9yPihWOENsYXNzSW5kZXg6Ok5PREVJVEVSQVRPUiwgYXJncy5Ib2xkZXIoKSk7CisgICAgTm9k
ZUl0ZXJhdG9yKiBub2RlSXRlcmF0b3IgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9i
amVjdDxOb2RlSXRlcmF0b3I+KFY4Q2xhc3NJbmRleDo6Tk9ERUlURVJBVE9SLCBhcmdzLkhvbGRl
cigpKTsKIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIFNjcmlwdFN0YXRlIHN0YXRl
OwpAQCAtNzAsNyArNzAsNyBAQCBDQUxMQkFDS19GVU5DX0RFQ0woTm9kZUl0ZXJhdG9yTmV4dE5v
ZGUpCiBDQUxMQkFDS19GVU5DX0RFQ0woTm9kZUl0ZXJhdG9yUHJldmlvdXNOb2RlKQogewogICAg
IElOQ19TVEFUUygiRE9NLk5vZGVJdGVyYXRvci5wcmV2aW91c05vZGUoKSIpOwotICAgIE5vZGVJ
dGVyYXRvciogbm9kZUl0ZXJhdG9yID0gVjhQcm94eTo6Y29udmVydFRvTmF0aXZlT2JqZWN0PE5v
ZGVJdGVyYXRvcj4oVjhDbGFzc0luZGV4OjpOT0RFSVRFUkFUT1IsIGFyZ3MuSG9sZGVyKCkpOwor
ICAgIE5vZGVJdGVyYXRvciogbm9kZUl0ZXJhdG9yID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9O
YXRpdmVPYmplY3Q8Tm9kZUl0ZXJhdG9yPihWOENsYXNzSW5kZXg6Ok5PREVJVEVSQVRPUiwgYXJn
cy5Ib2xkZXIoKSk7CiAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBTY3JpcHRTdGF0
ZSBzdGF0ZTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Tm9kZUxpc3RDdXN0
b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Tm9kZUxp
c3RDdXN0b20uY3BwCShyZXZpc2lvbiA0NTY1MCkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4Tm9kZUxpc3RDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIE5BTUVEX1BST1BFUlRZX0dFVFRFUihOb2RlTGlzdCkKIHsK
ICAgICBJTkNfU1RBVFMoIkRPTS5Ob2RlTGlzdC5OYW1lZFByb3BlcnR5R2V0dGVyIik7Ci0gICAg
Tm9kZUxpc3QqIGxpc3QgPSBWOFByb3h5Ojpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8Tm9kZUxpc3Q+
KFY4Q2xhc3NJbmRleDo6Tk9ERUxJU1QsIGluZm8uSG9sZGVyKCkpOworICAgIE5vZGVMaXN0KiBs
aXN0ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8Tm9kZUxpc3Q+KFY4Q2xh
c3NJbmRleDo6Tk9ERUxJU1QsIGluZm8uSG9sZGVyKCkpOwogICAgIFN0cmluZyBrZXkgPSB0b1dl
YkNvcmVTdHJpbmcobmFtZSk7CiAKICAgICAvLyBMZW5ndGggcHJvcGVydHkgY2Fubm90IGJlIG92
ZXJyaWRkZW4uCkBAIC01Myw3ICs1Myw3IEBAIE5BTUVEX1BST1BFUlRZX0dFVFRFUihOb2RlTGlz
dCkKICAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgcmV0dXJuIG5vdEhhbmRsZWRCeUludGVyY2Vw
dG9yKCk7CiAKLSAgICByZXR1cm4gVjhQcm94eTo6Y29udmVydE5vZGVUb1Y4T2JqZWN0KHJlc3Vs
dC5nZXQoKSk7CisgICAgcmV0dXJuIFY4RE9NV3JhcHBlcjo6Y29udmVydE5vZGVUb1Y4T2JqZWN0
KHJlc3VsdC5nZXQoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNv
cmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4U1FMUmVzdWx0U2V0Um93TGlzdEN1c3RvbS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhTUUxSZXN1bHRTZXRSb3dM
aXN0Q3VzdG9tLmNwcAkocmV2aXNpb24gNDU2NTApCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1
c3RvbS9WOFNRTFJlc3VsdFNldFJvd0xpc3RDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
Myw3ICs1Myw3IEBAIENBTExCQUNLX0ZVTkNfREVDTChTUUxSZXN1bHRTZXRSb3dMaXN0SXQKICAg
ICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKICAgICB9CiAKLSAgICBTUUxSZXN1bHRTZXRS
b3dMaXN0KiByb3dMaXN0ID0gVjhQcm94eTo6Y29udmVydFRvTmF0aXZlT2JqZWN0PFNRTFJlc3Vs
dFNldFJvd0xpc3Q+KFY4Q2xhc3NJbmRleDo6U1FMUkVTVUxUU0VUUk9XTElTVCwgYXJncy5Ib2xk
ZXIoKSk7CisgICAgU1FMUmVzdWx0U2V0Um93TGlzdCogcm93TGlzdCA9IFY4RE9NV3JhcHBlcjo6
Y29udmVydFRvTmF0aXZlT2JqZWN0PFNRTFJlc3VsdFNldFJvd0xpc3Q+KFY4Q2xhc3NJbmRleDo6
U1FMUkVTVUxUU0VUUk9XTElTVCwgYXJncy5Ib2xkZXIoKSk7CiAKICAgICB1bnNpZ25lZCBsb25n
IGluZGV4ID0gYXJnc1swXS0+SW50ZWdlclZhbHVlKCk7CiAgICAgaWYgKGluZGV4IDwgMCB8fCBp
bmRleCA+PSByb3dMaXN0LT5sZW5ndGgoKSkgewpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9j
dXN0b20vVjhTUUxUcmFuc2FjdGlvbkN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9i
aW5kaW5ncy92OC9jdXN0b20vVjhTUUxUcmFuc2FjdGlvbkN1c3RvbS5jcHAJKHJldmlzaW9uIDQ1
NjUwKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhTUUxUcmFuc2FjdGlvbkN1c3Rv
bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc5LDcgKzc5LDcgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNM
KFNRTFRyYW5zYWN0aW9uRXhlY3V0ZQogICAgICAgICB9CiAgICAgfQogCi0gICAgU1FMVHJhbnNh
Y3Rpb24qIHRyYW5zYWN0aW9uID0gVjhQcm94eTo6Y29udmVydFRvTmF0aXZlT2JqZWN0PFNRTFRy
YW5zYWN0aW9uPihWOENsYXNzSW5kZXg6OlNRTFRSQU5TQUNUSU9OLCBhcmdzLkhvbGRlcigpKTsK
KyAgICBTUUxUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24gPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRU
b05hdGl2ZU9iamVjdDxTUUxUcmFuc2FjdGlvbj4oVjhDbGFzc0luZGV4OjpTUUxUUkFOU0FDVElP
TiwgYXJncy5Ib2xkZXIoKSk7CiAKICAgICBGcmFtZSogZnJhbWUgPSBWOFByb3h5OjpyZXRyaWV2
ZUZyYW1lKCk7CiAKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4U1ZHRWxlbWVu
dEluc3RhbmNlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1
c3RvbS9WOFNWR0VsZW1lbnRJbnN0YW5jZUN1c3RvbS5jcHAJKHJldmlzaW9uIDQ1NjUwKQorKysg
V2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhTVkdFbGVtZW50SW5zdGFuY2VDdXN0b20uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIENB
TExCQUNLX0ZVTkNfREVDTChTVkdFbGVtZW50SW5zdGFuY2VBZGRFdmVudExpc3RlbmVyKQogewog
ICAgIElOQ19TVEFUUygiRE9NLlNWR0VsZW1lbnRJbnN0YW5jZS5BZGRFdmVudExpc3RlbmVyKCki
KTsKLSAgICBTVkdFbGVtZW50SW5zdGFuY2UqIGluc3RhbmNlID0gVjhQcm94eTo6Y29udmVydERP
TVdyYXBwZXJUb05hdGl2ZTxTVkdFbGVtZW50SW5zdGFuY2U+KGFyZ3MuSG9sZGVyKCkpOworICAg
IFNWR0VsZW1lbnRJbnN0YW5jZSogaW5zdGFuY2UgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRET01X
cmFwcGVyVG9OYXRpdmU8U1ZHRWxlbWVudEluc3RhbmNlPihhcmdzLkhvbGRlcigpKTsKIAogICAg
IFY4UHJveHkqIHByb3h5ID0gVjhQcm94eTo6cmV0cmlldmUoaW5zdGFuY2UtPnNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKSk7CiAgICAgaWYgKCFwcm94eSkKQEAgLTY2LDcgKzY2LDcgQEAgQ0FMTEJB
Q0tfRlVOQ19ERUNMKFNWR0VsZW1lbnRJbnN0YW5jZUFkZAogQ0FMTEJBQ0tfRlVOQ19ERUNMKFNW
R0VsZW1lbnRJbnN0YW5jZVJlbW92ZUV2ZW50TGlzdGVuZXIpCiB7CiAgICAgSU5DX1NUQVRTKCJE
T00uU1ZHRWxlbWVudEluc3RhbmNlLlJlbW92ZUV2ZW50TGlzdGVuZXIoKSIpOwotICAgIFNWR0Vs
ZW1lbnRJbnN0YW5jZSogaW5zdGFuY2UgPSBWOFByb3h5Ojpjb252ZXJ0RE9NV3JhcHBlclRvTmF0
aXZlPFNWR0VsZW1lbnRJbnN0YW5jZT4oYXJncy5Ib2xkZXIoKSk7CisgICAgU1ZHRWxlbWVudElu
c3RhbmNlKiBpbnN0YW5jZSA9IFY4RE9NV3JhcHBlcjo6Y29udmVydERPTVdyYXBwZXJUb05hdGl2
ZTxTVkdFbGVtZW50SW5zdGFuY2U+KGFyZ3MuSG9sZGVyKCkpOwogCiAgICAgVjhQcm94eSogcHJv
eHkgPSBWOFByb3h5OjpyZXRyaWV2ZShpbnN0YW5jZS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
KTsKICAgICBpZiAoIXByb3h5KQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhT
VkdMZW5ndGhDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4U1ZHTGVuZ3RoQ3VzdG9tLmNwcAkocmV2aXNpb24gNDU2NTApCisrKyBXZWJDb3JlL2Jp
bmRpbmdzL3Y4L2N1c3RvbS9WOFNWR0xlbmd0aEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ0LDcgKzQ0LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogQUNDRVNTT1JfR0VUVEVSKFNWR0xl
bmd0aFZhbHVlKQogewogICAgIElOQ19TVEFUUygiRE9NLlNWR0xlbmd0aC52YWx1ZSIpOwotICAg
IFY4U1ZHUE9EVHlwZVdyYXBwZXI8U1ZHTGVuZ3RoPiogd3JhcHBlciA9IFY4UHJveHk6OmNvbnZl
cnRUb05hdGl2ZU9iamVjdDxWOFNWR1BPRFR5cGVXcmFwcGVyPFNWR0xlbmd0aD4gPihWOENsYXNz
SW5kZXg6OlNWR0xFTkdUSCwgaW5mby5Ib2xkZXIoKSk7CisgICAgVjhTVkdQT0RUeXBlV3JhcHBl
cjxTVkdMZW5ndGg+KiB3cmFwcGVyID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmpl
Y3Q8VjhTVkdQT0RUeXBlV3JhcHBlcjxTVkdMZW5ndGg+ID4oVjhDbGFzc0luZGV4OjpTVkdMRU5H
VEgsIGluZm8uSG9sZGVyKCkpOwogICAgIFNWR0xlbmd0aCBpbXAgPSAqd3JhcHBlcjsKICAgICBy
ZXR1cm4gdjg6Ok51bWJlcjo6TmV3KGltcC52YWx1ZShWOFByb3h5OjpzdmdDb250ZXh0KHdyYXBw
ZXIpKSk7CiB9CkBAIC01Miw3ICs1Miw3IEBAIEFDQ0VTU09SX0dFVFRFUihTVkdMZW5ndGhWYWx1
ZSkKIENBTExCQUNLX0ZVTkNfREVDTChTVkdMZW5ndGhDb252ZXJ0VG9TcGVjaWZpZWRVbml0cykK
IHsKICAgICBJTkNfU1RBVFMoIkRPTS5TVkdMZW5ndGguY29udmVydFRvU3BlY2lmaWVkVW5pdHMi
KTsKLSAgICBWOFNWR1BPRFR5cGVXcmFwcGVyPFNWR0xlbmd0aD4qIHdyYXBwZXIgPSBWOFByb3h5
Ojpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8VjhTVkdQT0RUeXBlV3JhcHBlcjxTVkdMZW5ndGg+ID4o
VjhDbGFzc0luZGV4OjpTVkdMRU5HVEgsIGFyZ3MuSG9sZGVyKCkpOworICAgIFY4U1ZHUE9EVHlw
ZVdyYXBwZXI8U1ZHTGVuZ3RoPiogd3JhcHBlciA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0
aXZlT2JqZWN0PFY4U1ZHUE9EVHlwZVdyYXBwZXI8U1ZHTGVuZ3RoPiA+KFY4Q2xhc3NJbmRleDo6
U1ZHTEVOR1RILCBhcmdzLkhvbGRlcigpKTsKICAgICBTVkdMZW5ndGggaW1wID0gKndyYXBwZXI7
CiAgICAgU1ZHRWxlbWVudCogY29udGV4dCA9IFY4UHJveHk6OnN2Z0NvbnRleHQod3JhcHBlcik7
CiAgICAgaW1wLmNvbnZlcnRUb1NwZWNpZmllZFVuaXRzKHRvSW50MzIoYXJnc1swXSksIGNvbnRl
eHQpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhTVkdNYXRyaXhDdXN0b20u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4U1ZHTWF0cml4
Q3VzdG9tLmNwcAkocmV2aXNpb24gNDU2NTApCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3Rv
bS9WOFNWR01hdHJpeEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogQ0FMTEJBQ0tfRlVOQ19ERUNMKFNWR01hdHJpeEludmVyc2Up
CiB7CiAgICAgSU5DX1NUQVRTKCJET00uU1ZHTWF0cml4LmludmVyc2UoKSIpOwotICAgIFRyYW5z
Zm9ybWF0aW9uTWF0cml4IG1hdHJpeCA9ICpWOFByb3h5Ojpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8
VjhTVkdQT0RUeXBlV3JhcHBlcjxUcmFuc2Zvcm1hdGlvbk1hdHJpeD4gPihWOENsYXNzSW5kZXg6
OlNWR01BVFJJWCwgYXJncy5Ib2xkZXIoKSk7CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0
cml4ID0gKlY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PFY4U1ZHUE9EVHlwZVdy
YXBwZXI8VHJhbnNmb3JtYXRpb25NYXRyaXg+ID4oVjhDbGFzc0luZGV4OjpTVkdNQVRSSVgsIGFy
Z3MuSG9sZGVyKCkpOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIFRyYW5zZm9ybWF0
aW9uTWF0cml4IHJlc3VsdCA9IG1hdHJpeC5pbnZlcnNlKCk7CiAKQEAgLTU4LDEzICs1OCwxMyBA
QCBDQUxMQkFDS19GVU5DX0RFQ0woU1ZHTWF0cml4SW52ZXJzZSkKICAgICAgICAgcmV0dXJuIHY4
OjpIYW5kbGU8djg6OlZhbHVlPigpOwogICAgIH0KIAotICAgIHJldHVybiBWOFByb3h5Ojpjb252
ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6OlNWR01BVFJJWCwgbmV3IFY4U1ZHU3RhdGljUE9E
VHlwZVdyYXBwZXI8VHJhbnNmb3JtYXRpb25NYXRyaXg+KHJlc3VsdCkpOworICAgIHJldHVybiBW
OERPTVdyYXBwZXI6OmNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6U1ZHTUFUUklYLCBu
ZXcgVjhTVkdTdGF0aWNQT0RUeXBlV3JhcHBlcjxUcmFuc2Zvcm1hdGlvbk1hdHJpeD4ocmVzdWx0
KSk7CiB9CiAKIENBTExCQUNLX0ZVTkNfREVDTChTVkdNYXRyaXhSb3RhdGVGcm9tVmVjdG9yKQog
ewogICAgIElOQ19TVEFUUygiRE9NLlNWR01hdHJpeC5yb3RhdGVGcm9tVmVjdG9yKCkiKTsKLSAg
ICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXggPSAqVjhQcm94eTo6Y29udmVydFRvTmF0aXZl
T2JqZWN0PFY4U1ZHUE9EVHlwZVdyYXBwZXI8VHJhbnNmb3JtYXRpb25NYXRyaXg+ID4oVjhDbGFz
c0luZGV4OjpTVkdNQVRSSVgsIGFyZ3MuSG9sZGVyKCkpOworICAgIFRyYW5zZm9ybWF0aW9uTWF0
cml4IG1hdHJpeCA9ICpWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxWOFNWR1BP
RFR5cGVXcmFwcGVyPFRyYW5zZm9ybWF0aW9uTWF0cml4PiA+KFY4Q2xhc3NJbmRleDo6U1ZHTUFU
UklYLCBhcmdzLkhvbGRlcigpKTsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBmbG9h
dCB4ID0gdG9GbG9hdChhcmdzWzBdKTsKICAgICBmbG9hdCB5ID0gdG9GbG9hdChhcmdzWzFdKTsK
QEAgLTc4LDcgKzc4LDcgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKFNWR01hdHJpeFJvdGF0ZUZyb21W
ZQogICAgICAgICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCk7CiAgICAgfQogCi0gICAg
cmV0dXJuIFY4UHJveHk6OmNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6U1ZHTUFUUklY
LCBuZXcgVjhTVkdTdGF0aWNQT0RUeXBlV3JhcHBlcjxUcmFuc2Zvcm1hdGlvbk1hdHJpeD4ocmVz
dWx0KSk7CisgICAgcmV0dXJuIFY4RE9NV3JhcHBlcjo6Y29udmVydFRvVjhPYmplY3QoVjhDbGFz
c0luZGV4OjpTVkdNQVRSSVgsIG5ldyBWOFNWR1N0YXRpY1BPRFR5cGVXcmFwcGVyPFRyYW5zZm9y
bWF0aW9uTWF0cml4PihyZXN1bHQpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhTdG9yYWdlQ3VzdG9tLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFN0b3JhZ2VDdXN0b20uY3BwCShy
ZXZpc2lvbiA0NTY1MCkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4U3RvcmFnZUN1
c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogLy8gR2V0IGFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIG5hbWVzIG9mIGluZGV4ZWQgcHJv
cGVydGllcyBpbiBhIGNvbGxlY3Rpb24uCiB2ODo6SGFuZGxlPHY4OjpBcnJheT4gVjhDdXN0b206
OnY4U3RvcmFnZU5hbWVkUHJvcGVydHlFbnVtZXJhdG9yKGNvbnN0IHY4OjpBY2Nlc3NvckluZm8m
IGluZm8pCiB7Ci0gICAgU3RvcmFnZSogc3RvcmFnZSA9IFY4UHJveHk6OmNvbnZlcnRUb05hdGl2
ZU9iamVjdDxTdG9yYWdlPihWOENsYXNzSW5kZXg6OlNUT1JBR0UsIGluZm8uSG9sZGVyKCkpOwor
ICAgIFN0b3JhZ2UqIHN0b3JhZ2UgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVj
dDxTdG9yYWdlPihWOENsYXNzSW5kZXg6OlNUT1JBR0UsIGluZm8uSG9sZGVyKCkpOwogICAgIHVu
c2lnbmVkIGludCBsZW5ndGggPSBzdG9yYWdlLT5sZW5ndGgoKTsKICAgICB2ODo6SGFuZGxlPHY4
OjpBcnJheT4gcHJvcGVydGllcyA9IHY4OjpBcnJheTo6TmV3KGxlbmd0aCk7CiAgICAgZm9yICh1
bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewpAQCAtNTgsNyArNTgsNyBAQCB2
ODo6SGFuZGxlPHY4OjpBcnJheT4gVjhDdXN0b206OnY4U3RvcmFnCiAKIHN0YXRpYyB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gc3RvcmFnZUdldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gdjhOYW1l
LCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQogewotICAgIFN0b3JhZ2UqIHN0b3JhZ2Ug
PSBWOFByb3h5Ojpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8U3RvcmFnZT4oVjhDbGFzc0luZGV4OjpT
VE9SQUdFLCBpbmZvLkhvbGRlcigpKTsKKyAgICBTdG9yYWdlKiBzdG9yYWdlID0gVjhET01XcmFw
cGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8U3RvcmFnZT4oVjhDbGFzc0luZGV4OjpTVE9SQUdF
LCBpbmZvLkhvbGRlcigpKTsKICAgICBTdHJpbmcgbmFtZSA9IHRvV2ViQ29yZVN0cmluZyh2OE5h
bWUpOwogCiAgICAgaWYgKHN0b3JhZ2UtPmNvbnRhaW5zKG5hbWUpKQpAQCAtODIsNyArODIsNyBA
QCBOQU1FRF9QUk9QRVJUWV9HRVRURVIoU3RvcmFnZSkKIAogc3RhdGljIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiBzdG9yYWdlU2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiB2OE5hbWUsIHY4OjpM
b2NhbDx2ODo6VmFsdWU+IHY4VmFsdWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCiB7
Ci0gICAgU3RvcmFnZSogc3RvcmFnZSA9IFY4UHJveHk6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxT
dG9yYWdlPihWOENsYXNzSW5kZXg6OlNUT1JBR0UsIGluZm8uSG9sZGVyKCkpOworICAgIFN0b3Jh
Z2UqIHN0b3JhZ2UgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxTdG9yYWdl
PihWOENsYXNzSW5kZXg6OlNUT1JBR0UsIGluZm8uSG9sZGVyKCkpOwogICAgIFN0cmluZyBuYW1l
ID0gdG9XZWJDb3JlU3RyaW5nKHY4TmFtZSk7CiAgICAgU3RyaW5nIHZhbHVlID0gdG9XZWJDb3Jl
U3RyaW5nKHY4VmFsdWUpOwogCkBAIC0xMTcsNyArMTE3LDcgQEAgTkFNRURfUFJPUEVSVFlfU0VU
VEVSKFN0b3JhZ2UpCiAKIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpCb29sZWFuPiBzdG9yYWdlRGVs
ZXRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gdjhOYW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZv
JiBpbmZvKQogewotICAgIFN0b3JhZ2UqIHN0b3JhZ2UgPSBWOFByb3h5Ojpjb252ZXJ0VG9OYXRp
dmVPYmplY3Q8U3RvcmFnZT4oVjhDbGFzc0luZGV4OjpTVE9SQUdFLCBpbmZvLkhvbGRlcigpKTsK
KyAgICBTdG9yYWdlKiBzdG9yYWdlID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmpl
Y3Q8U3RvcmFnZT4oVjhDbGFzc0luZGV4OjpTVE9SQUdFLCBpbmZvLkhvbGRlcigpKTsKICAgICBT
dHJpbmcgbmFtZSA9IHRvV2ViQ29yZVN0cmluZyh2OE5hbWUpOwogICAgIAogICAgIGlmIChzdG9y
YWdlLT5jb250YWlucyhuYW1lKSkgewpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20v
VjhTdHlsZVNoZWV0TGlzdEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5n
cy92OC9jdXN0b20vVjhTdHlsZVNoZWV0TGlzdEN1c3RvbS5jcHAJKHJldmlzaW9uIDQ1NjUwKQor
KysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhTdHlsZVNoZWV0TGlzdEN1c3RvbS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQ1LDEyICs0NSwxMiBAQCBOQU1FRF9QUk9QRVJUWV9HRVRURVIo
U3R5bGVTaGVldExpc3QpCiAgICAgICAgIHJldHVybiBub3RIYW5kbGVkQnlJbnRlcmNlcHRvcigp
OwogCiAgICAgLy8gU2VhcmNoIHN0eWxlIHNoZWV0LgotICAgIFN0eWxlU2hlZXRMaXN0KiBpbXAg
PSBWOFByb3h5Ojpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8U3R5bGVTaGVldExpc3Q+KFY4Q2xhc3NJ
bmRleDo6U1RZTEVTSEVFVExJU1QsIGluZm8uSG9sZGVyKCkpOworICAgIFN0eWxlU2hlZXRMaXN0
KiBpbXAgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxTdHlsZVNoZWV0TGlz
dD4oVjhDbGFzc0luZGV4OjpTVFlMRVNIRUVUTElTVCwgaW5mby5Ib2xkZXIoKSk7CiAgICAgSFRN
TFN0eWxlRWxlbWVudCogaXRlbSA9IGltcC0+Z2V0TmFtZWRJdGVtKHRvV2ViQ29yZVN0cmluZyhu
YW1lKSk7CiAgICAgaWYgKCFpdGVtKQogICAgICAgICByZXR1cm4gbm90SGFuZGxlZEJ5SW50ZXJj
ZXB0b3IoKTsKIAotICAgIHJldHVybiBWOFByb3h5Ojpjb252ZXJ0VG9WOE9iamVjdChWOENsYXNz
SW5kZXg6OkhUTUxTVFlMRUVMRU1FTlQsIGl0ZW0pOworICAgIHJldHVybiBWOERPTVdyYXBwZXI6
OmNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6SFRNTFNUWUxFRUxFTUVOVCwgaXRlbSk7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4VHJlZVdhbGtlckN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5k
aW5ncy92OC9jdXN0b20vVjhUcmVlV2Fsa2VyQ3VzdG9tLmNwcAkocmV2aXNpb24gNDU2NTApCisr
KyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFRyZWVXYWxrZXJDdXN0b20uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01MSwxMyArNTEsMTMgQEAgc3RhdGljIGlubGluZSB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gdG9WOAogICAgIGlmICghb2JqZWN0KQogICAgICAgICByZXR1cm4gdjg6Ok51bGwo
KTsKIAotICAgIHJldHVybiBWOFByb3h5Ojpjb252ZXJ0Tm9kZVRvVjhPYmplY3Qob2JqZWN0Lmdl
dCgpKTsKKyAgICByZXR1cm4gVjhET01XcmFwcGVyOjpjb252ZXJ0Tm9kZVRvVjhPYmplY3Qob2Jq
ZWN0LmdldCgpKTsKIH0KIAogQ0FMTEJBQ0tfRlVOQ19ERUNMKFRyZWVXYWxrZXJQYXJlbnROb2Rl
KQogewogICAgIElOQ19TVEFUUygiRE9NLlRyZWVXYWxrZXIucGFyZW50Tm9kZSgpIik7Ci0gICAg
VHJlZVdhbGtlciogdHJlZVdhbGtlciA9IFY4UHJveHk6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxU
cmVlV2Fsa2VyPihWOENsYXNzSW5kZXg6OlRSRUVXQUxLRVIsIGFyZ3MuSG9sZGVyKCkpOworICAg
IFRyZWVXYWxrZXIqIHRyZWVXYWxrZXIgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9i
amVjdDxUcmVlV2Fsa2VyPihWOENsYXNzSW5kZXg6OlRSRUVXQUxLRVIsIGFyZ3MuSG9sZGVyKCkp
OwogCiAgICAgU2NyaXB0U3RhdGUgc3RhdGU7CiAgICAgUmVmUHRyPE5vZGU+IHJlc3VsdCA9IHRy
ZWVXYWxrZXItPnBhcmVudE5vZGUoJnN0YXRlKTsKQEAgLTY3LDcgKzY3LDcgQEAgQ0FMTEJBQ0tf
RlVOQ19ERUNMKFRyZWVXYWxrZXJQYXJlbnROb2RlKQogQ0FMTEJBQ0tfRlVOQ19ERUNMKFRyZWVX
YWxrZXJGaXJzdENoaWxkKQogewogICAgIElOQ19TVEFUUygiRE9NLlRyZWVXYWxrZXIuZmlyc3RD
aGlsZCgpIik7Ci0gICAgVHJlZVdhbGtlciogdHJlZVdhbGtlciA9IFY4UHJveHk6OmNvbnZlcnRU
b05hdGl2ZU9iamVjdDxUcmVlV2Fsa2VyPihWOENsYXNzSW5kZXg6OlRSRUVXQUxLRVIsIGFyZ3Mu
SG9sZGVyKCkpOworICAgIFRyZWVXYWxrZXIqIHRyZWVXYWxrZXIgPSBWOERPTVdyYXBwZXI6OmNv
bnZlcnRUb05hdGl2ZU9iamVjdDxUcmVlV2Fsa2VyPihWOENsYXNzSW5kZXg6OlRSRUVXQUxLRVIs
IGFyZ3MuSG9sZGVyKCkpOwogCiAgICAgU2NyaXB0U3RhdGUgc3RhdGU7CiAgICAgUmVmUHRyPE5v
ZGU+IHJlc3VsdCA9IHRyZWVXYWxrZXItPmZpcnN0Q2hpbGQoJnN0YXRlKTsKQEAgLTc3LDcgKzc3
LDcgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKFRyZWVXYWxrZXJGaXJzdENoaWxkKQogQ0FMTEJBQ0tf
RlVOQ19ERUNMKFRyZWVXYWxrZXJMYXN0Q2hpbGQpCiB7CiAgICAgSU5DX1NUQVRTKCJET00uVHJl
ZVdhbGtlci5sYXN0Q2hpbGQoKSIpOwotICAgIFRyZWVXYWxrZXIqIHRyZWVXYWxrZXIgPSBWOFBy
b3h5Ojpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8VHJlZVdhbGtlcj4oVjhDbGFzc0luZGV4OjpUUkVF
V0FMS0VSLCBhcmdzLkhvbGRlcigpKTsKKyAgICBUcmVlV2Fsa2VyKiB0cmVlV2Fsa2VyID0gVjhE
T01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8VHJlZVdhbGtlcj4oVjhDbGFzc0luZGV4
OjpUUkVFV0FMS0VSLCBhcmdzLkhvbGRlcigpKTsKIAogICAgIFNjcmlwdFN0YXRlIHN0YXRlOwog
ICAgIFJlZlB0cjxOb2RlPiByZXN1bHQgPSB0cmVlV2Fsa2VyLT5sYXN0Q2hpbGQoJnN0YXRlKTsK
QEAgLTg3LDcgKzg3LDcgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKFRyZWVXYWxrZXJMYXN0Q2hpbGQp
CiBDQUxMQkFDS19GVU5DX0RFQ0woVHJlZVdhbGtlck5leHROb2RlKQogewogICAgIElOQ19TVEFU
UygiRE9NLlRyZWVXYWxrZXIubmV4dE5vZGUoKSIpOwotICAgIFRyZWVXYWxrZXIqIHRyZWVXYWxr
ZXIgPSBWOFByb3h5Ojpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8VHJlZVdhbGtlcj4oVjhDbGFzc0lu
ZGV4OjpUUkVFV0FMS0VSLCBhcmdzLkhvbGRlcigpKTsKKyAgICBUcmVlV2Fsa2VyKiB0cmVlV2Fs
a2VyID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8VHJlZVdhbGtlcj4oVjhD
bGFzc0luZGV4OjpUUkVFV0FMS0VSLCBhcmdzLkhvbGRlcigpKTsKIAogICAgIFNjcmlwdFN0YXRl
IHN0YXRlOwogICAgIFJlZlB0cjxOb2RlPiByZXN1bHQgPSB0cmVlV2Fsa2VyLT5uZXh0Tm9kZSgm
c3RhdGUpOwpAQCAtOTcsNyArOTcsNyBAQCBDQUxMQkFDS19GVU5DX0RFQ0woVHJlZVdhbGtlck5l
eHROb2RlKQogQ0FMTEJBQ0tfRlVOQ19ERUNMKFRyZWVXYWxrZXJQcmV2aW91c05vZGUpCiB7CiAg
ICAgSU5DX1NUQVRTKCJET00uVHJlZVdhbGtlci5wcmV2aW91c05vZGUoKSIpOwotICAgIFRyZWVX
YWxrZXIqIHRyZWVXYWxrZXIgPSBWOFByb3h5Ojpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8VHJlZVdh
bGtlcj4oVjhDbGFzc0luZGV4OjpUUkVFV0FMS0VSLCBhcmdzLkhvbGRlcigpKTsKKyAgICBUcmVl
V2Fsa2VyKiB0cmVlV2Fsa2VyID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8
VHJlZVdhbGtlcj4oVjhDbGFzc0luZGV4OjpUUkVFV0FMS0VSLCBhcmdzLkhvbGRlcigpKTsKIAog
ICAgIFNjcmlwdFN0YXRlIHN0YXRlOwogICAgIFJlZlB0cjxOb2RlPiByZXN1bHQgPSB0cmVlV2Fs
a2VyLT5wcmV2aW91c05vZGUoJnN0YXRlKTsKQEAgLTEwNyw3ICsxMDcsNyBAQCBDQUxMQkFDS19G
VU5DX0RFQ0woVHJlZVdhbGtlclByZXZpb3VzTm9kCiBDQUxMQkFDS19GVU5DX0RFQ0woVHJlZVdh
bGtlck5leHRTaWJsaW5nKQogewogICAgIElOQ19TVEFUUygiRE9NLlRyZWVXYWxrZXIubmV4dFNp
YmxpbmcoKSIpOwotICAgIFRyZWVXYWxrZXIqIHRyZWVXYWxrZXIgPSBWOFByb3h5Ojpjb252ZXJ0
VG9OYXRpdmVPYmplY3Q8VHJlZVdhbGtlcj4oVjhDbGFzc0luZGV4OjpUUkVFV0FMS0VSLCBhcmdz
LkhvbGRlcigpKTsKKyAgICBUcmVlV2Fsa2VyKiB0cmVlV2Fsa2VyID0gVjhET01XcmFwcGVyOjpj
b252ZXJ0VG9OYXRpdmVPYmplY3Q8VHJlZVdhbGtlcj4oVjhDbGFzc0luZGV4OjpUUkVFV0FMS0VS
LCBhcmdzLkhvbGRlcigpKTsKIAogICAgIFNjcmlwdFN0YXRlIHN0YXRlOwogICAgIFJlZlB0cjxO
b2RlPiByZXN1bHQgPSB0cmVlV2Fsa2VyLT5uZXh0U2libGluZygmc3RhdGUpOwpAQCAtMTE3LDcg
KzExNyw3IEBAIENBTExCQUNLX0ZVTkNfREVDTChUcmVlV2Fsa2VyTmV4dFNpYmxpbmcKIENBTExC
QUNLX0ZVTkNfREVDTChUcmVlV2Fsa2VyUHJldmlvdXNTaWJsaW5nKQogewogICAgIElOQ19TVEFU
UygiRE9NLlRyZWVXYWxrZXIucHJldmlvdXNTaWJsaW5nKCkiKTsKLSAgICBUcmVlV2Fsa2VyKiB0
cmVlV2Fsa2VyID0gVjhQcm94eTo6Y29udmVydFRvTmF0aXZlT2JqZWN0PFRyZWVXYWxrZXI+KFY4
Q2xhc3NJbmRleDo6VFJFRVdBTEtFUiwgYXJncy5Ib2xkZXIoKSk7CisgICAgVHJlZVdhbGtlciog
dHJlZVdhbGtlciA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PFRyZWVXYWxr
ZXI+KFY4Q2xhc3NJbmRleDo6VFJFRVdBTEtFUiwgYXJncy5Ib2xkZXIoKSk7CiAKICAgICBTY3Jp
cHRTdGF0ZSBzdGF0ZTsKICAgICBSZWZQdHI8Tm9kZT4gcmVzdWx0ID0gdHJlZVdhbGtlci0+cHJl
dmlvdXNTaWJsaW5nKCZzdGF0ZSk7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9W
OFdlYktpdENTU01hdHJpeENvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Jp
bmRpbmdzL3Y4L2N1c3RvbS9WOFdlYktpdENTU01hdHJpeENvbnN0cnVjdG9yLmNwcAkocmV2aXNp
b24gNDU2NTApCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYktpdENTU01hdHJp
eENvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTksNyArNTksNyBAQCBDQUxMQkFD
S19GVU5DX0RFQ0woV2ViS2l0Q1NTTWF0cml4Q29uc3RyCiAgICAgICAgIHRocm93RXJyb3IoZWMp
OwogCiAgICAgLy8gVHJhbnNmb3JtIHRoZSBob2xkZXIgaW50byBhIHdyYXBwZXIgb2JqZWN0IGZv
ciB0aGUgbWF0cml4LgotICAgIFY4UHJveHk6OnNldERPTVdyYXBwZXIoYXJncy5Ib2xkZXIoKSwg
VjhDbGFzc0luZGV4OjpUb0ludChWOENsYXNzSW5kZXg6OldFQktJVENTU01BVFJJWCksIG1hdHJp
eC5nZXQoKSk7CisgICAgVjhET01XcmFwcGVyOjpzZXRET01XcmFwcGVyKGFyZ3MuSG9sZGVyKCks
IFY4Q2xhc3NJbmRleDo6VG9JbnQoVjhDbGFzc0luZGV4OjpXRUJLSVRDU1NNQVRSSVgpLCBtYXRy
aXguZ2V0KCkpOwogICAgIHJldHVybiB0b1Y4KG1hdHJpeC5yZWxlYXNlKCksIGFyZ3MuSG9sZGVy
KCkpOwogfQogCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdvcmtlckNvbnRl
eHRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4
V29ya2VyQ29udGV4dEN1c3RvbS5jcHAJKHJldmlzaW9uIDQ1NjUwKQorKysgV2ViQ29yZS9iaW5k
aW5ncy92OC9jdXN0b20vVjhXb3JrZXJDb250ZXh0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDksMTQgKzQ5LDE0IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIEFDQ0VTU09SX0dFVFRFUihX
b3JrZXJDb250ZXh0U2VsZikKIHsKICAgICBJTkNfU1RBVFMoTCJET00uV29ya2VyQ29udGV4dC5z
ZWxmLl9nZXQiKTsKLSAgICBXb3JrZXJDb250ZXh0KiB3b3JrZXJDb250ZXh0ID0gVjhQcm94eTo6
Y29udmVydFRvTmF0aXZlT2JqZWN0PFdvcmtlckNvbnRleHQ+KFY4Q2xhc3NJbmRleDo6V09SS0VS
Q09OVEVYVCwgaW5mby5Ib2xkZXIoKSk7CisgICAgV29ya2VyQ29udGV4dCogd29ya2VyQ29udGV4
dCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PFdvcmtlckNvbnRleHQ+KFY4
Q2xhc3NJbmRleDo6V09SS0VSQ09OVEVYVCwgaW5mby5Ib2xkZXIoKSk7CiAgICAgcmV0dXJuIFdv
cmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTo6V29ya2VyQ29udGV4dFRvVjhPYmplY3Qod29ya2Vy
Q29udGV4dCk7CiB9CiAKIEFDQ0VTU09SX0dFVFRFUihXb3JrZXJDb250ZXh0T25tZXNzYWdlKQog
ewogICAgIElOQ19TVEFUUyhMIkRPTS5Xb3JrZXJDb250ZXh0Lm9ubWVzc2FnZS5fZ2V0Iik7Ci0g
ICAgV29ya2VyQ29udGV4dCogd29ya2VyQ29udGV4dCA9IFY4UHJveHk6OmNvbnZlcnRUb05hdGl2
ZU9iamVjdDxXb3JrZXJDb250ZXh0PihWOENsYXNzSW5kZXg6OldPUktFUkNPTlRFWFQsIGluZm8u
SG9sZGVyKCkpOworICAgIFdvcmtlckNvbnRleHQqIHdvcmtlckNvbnRleHQgPSBWOERPTVdyYXBw
ZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxXb3JrZXJDb250ZXh0PihWOENsYXNzSW5kZXg6OldP
UktFUkNPTlRFWFQsIGluZm8uSG9sZGVyKCkpOwogICAgIGlmICh3b3JrZXJDb250ZXh0LT5vbm1l
c3NhZ2UoKSkgewogICAgICAgICBWOFdvcmtlckNvbnRleHRFdmVudExpc3RlbmVyKiBsaXN0ZW5l
ciA9IHN0YXRpY19jYXN0PFY4V29ya2VyQ29udGV4dEV2ZW50TGlzdGVuZXIqPih3b3JrZXJDb250
ZXh0LT5vbm1lc3NhZ2UoKSk7CiAgICAgICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiB2OExpc3Rl
bmVyID0gbGlzdGVuZXItPmdldExpc3RlbmVyT2JqZWN0KCk7CkBAIC02OCw3ICs2OCw3IEBAIEFD
Q0VTU09SX0dFVFRFUihXb3JrZXJDb250ZXh0T25tZXNzYWdlKQogQUNDRVNTT1JfU0VUVEVSKFdv
cmtlckNvbnRleHRPbm1lc3NhZ2UpCiB7CiAgICAgSU5DX1NUQVRTKEwiRE9NLldvcmtlckNvbnRl
eHQub25tZXNzYWdlLl9zZXQiKTsKLSAgICBXb3JrZXJDb250ZXh0KiB3b3JrZXJDb250ZXh0ID0g
VjhQcm94eTo6Y29udmVydFRvTmF0aXZlT2JqZWN0PFdvcmtlckNvbnRleHQ+KFY4Q2xhc3NJbmRl
eDo6V09SS0VSQ09OVEVYVCwgaW5mby5Ib2xkZXIoKSk7CisgICAgV29ya2VyQ29udGV4dCogd29y
a2VyQ29udGV4dCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PFdvcmtlckNv
bnRleHQ+KFY4Q2xhc3NJbmRleDo6V09SS0VSQ09OVEVYVCwgaW5mby5Ib2xkZXIoKSk7CiAgICAg
VjhXb3JrZXJDb250ZXh0RXZlbnRMaXN0ZW5lciogb2xkTGlzdGVuZXIgPSBzdGF0aWNfY2FzdDxW
OFdvcmtlckNvbnRleHRFdmVudExpc3RlbmVyKj4od29ya2VyQ29udGV4dC0+b25tZXNzYWdlKCkp
OwogICAgIGlmICh2YWx1ZS0+SXNOdWxsKCkpIHsKICAgICAgICAgaWYgKHdvcmtlckNvbnRleHQt
Pm9ubWVzc2FnZSgpKSB7CkBAIC05NCw3ICs5NCw3IEBAIEFDQ0VTU09SX1NFVFRFUihXb3JrZXJD
b250ZXh0T25tZXNzYWdlKQogCiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gU2V0VGltZW91dE9ySW50
ZXJ2YWwoY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncywgYm9vbCBzaW5nbGVTaG90KQogewotICAg
IFdvcmtlckNvbnRleHQqIHdvcmtlckNvbnRleHQgPSBWOFByb3h5Ojpjb252ZXJ0VG9OYXRpdmVP
YmplY3Q8V29ya2VyQ29udGV4dD4oVjhDbGFzc0luZGV4OjpXT1JLRVJDT05URVhULCBhcmdzLkhv
bGRlcigpKTsKKyAgICBXb3JrZXJDb250ZXh0KiB3b3JrZXJDb250ZXh0ID0gVjhET01XcmFwcGVy
Ojpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8V29ya2VyQ29udGV4dD4oVjhDbGFzc0luZGV4OjpXT1JL
RVJDT05URVhULCBhcmdzLkhvbGRlcigpKTsKIAogICAgIGludCBhcmd1bWVudENvdW50ID0gYXJn
cy5MZW5ndGgoKTsKICAgICBpZiAoYXJndW1lbnRDb3VudCA8IDEpCkBAIC0xNDMsNyArMTQzLDcg
QEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKFdvcmtlckNvbnRleHRJbXBvcnRTYwogICAgICAgICB1cmxz
LmFwcGVuZCh0b1dlYkNvcmVTdHJpbmcoc2NyaXB0VXJsKSk7CiAgICAgfQogCi0gICAgV29ya2Vy
Q29udGV4dCogd29ya2VyQ29udGV4dCA9IFY4UHJveHk6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxX
b3JrZXJDb250ZXh0PihWOENsYXNzSW5kZXg6OldPUktFUkNPTlRFWFQsIGFyZ3MuSG9sZGVyKCkp
OworICAgIFdvcmtlckNvbnRleHQqIHdvcmtlckNvbnRleHQgPSBWOERPTVdyYXBwZXI6OmNvbnZl
cnRUb05hdGl2ZU9iamVjdDxXb3JrZXJDb250ZXh0PihWOENsYXNzSW5kZXg6OldPUktFUkNPTlRF
WFQsIGFyZ3MuSG9sZGVyKCkpOwogCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgd29y
a2VyQ29udGV4dC0+aW1wb3J0U2NyaXB0cyh1cmxzLCBjYWxsZXJVUkwsIGNhbGxlckxpbmUsIGVj
KTsKQEAgLTE2OCw3ICsxNjgsNyBAQCBDQUxMQkFDS19GVU5DX0RFQ0woV29ya2VyQ29udGV4dFNl
dEludGVyCiBDQUxMQkFDS19GVU5DX0RFQ0woV29ya2VyQ29udGV4dEFkZEV2ZW50TGlzdGVuZXIp
CiB7CiAgICAgSU5DX1NUQVRTKEwiRE9NLldvcmtlckNvbnRleHQuYWRkRXZlbnRMaXN0ZW5lcigp
Iik7Ci0gICAgV29ya2VyQ29udGV4dCogd29ya2VyQ29udGV4dCA9IFY4UHJveHk6OmNvbnZlcnRU
b05hdGl2ZU9iamVjdDxXb3JrZXJDb250ZXh0PihWOENsYXNzSW5kZXg6OldPUktFUkNPTlRFWFQs
IGFyZ3MuSG9sZGVyKCkpOworICAgIFdvcmtlckNvbnRleHQqIHdvcmtlckNvbnRleHQgPSBWOERP
TVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxXb3JrZXJDb250ZXh0PihWOENsYXNzSW5k
ZXg6OldPUktFUkNPTlRFWFQsIGFyZ3MuSG9sZGVyKCkpOwogCiAgICAgUmVmUHRyPFY4RXZlbnRM
aXN0ZW5lcj4gbGlzdGVuZXIgPSB3b3JrZXJDb250ZXh0LT5zY3JpcHQoKS0+cHJveHkoKS0+Zmlu
ZE9yQ3JlYXRlRXZlbnRMaXN0ZW5lcih2ODo6TG9jYWw8djg6Ok9iamVjdD46OkNhc3QoYXJnc1sx
XSksIGZhbHNlLCBmYWxzZSk7CiAKQEAgLTE4NSw3ICsxODUsNyBAQCBDQUxMQkFDS19GVU5DX0RF
Q0woV29ya2VyQ29udGV4dEFkZEV2ZW50CiBDQUxMQkFDS19GVU5DX0RFQ0woV29ya2VyQ29udGV4
dFJlbW92ZUV2ZW50TGlzdGVuZXIpCiB7CiAgICAgSU5DX1NUQVRTKEwiRE9NLldvcmtlckNvbnRl
eHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigpIik7Ci0gICAgV29ya2VyQ29udGV4dCogd29ya2VyQ29u
dGV4dCA9IFY4UHJveHk6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxXb3JrZXJDb250ZXh0PihWOENs
YXNzSW5kZXg6OldPUktFUkNPTlRFWFQsIGFyZ3MuSG9sZGVyKCkpOworICAgIFdvcmtlckNvbnRl
eHQqIHdvcmtlckNvbnRleHQgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxX
b3JrZXJDb250ZXh0PihWOENsYXNzSW5kZXg6OldPUktFUkNPTlRFWFQsIGFyZ3MuSG9sZGVyKCkp
OwogICAgIFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eSogcHJveHkgPSB3b3JrZXJDb250ZXh0
LT5zY3JpcHQoKS0+cHJveHkoKTsKIAogICAgIFJlZlB0cjxWOEV2ZW50TGlzdGVuZXI+IGxpc3Rl
bmVyID0gcHJveHktPmZpbmRPckNyZWF0ZUV2ZW50TGlzdGVuZXIodjg6OkxvY2FsPHY4OjpPYmpl
Y3Q+OjpDYXN0KGFyZ3NbMV0pLCBmYWxzZSwgdHJ1ZSk7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdz
L3Y4L2N1c3RvbS9WOFdvcmtlckN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5k
aW5ncy92OC9jdXN0b20vVjhXb3JrZXJDdXN0b20uY3BwCShyZXZpc2lvbiA0NTY1MCkKKysrIFdl
YkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V29ya2VyQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtODgsMTAgKzg4LDEwIEBAIENBTExCQUNLX0ZVTkNfREVDTChXb3JrZXJDb25zdHJ1Y3Rv
cikKIAogICAgIC8vIFNldHVwIHRoZSBzdGFuZGFyZCB3cmFwcGVyIG9iamVjdCBpbnRlcm5hbCBm
aWVsZHMuCiAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyT2JqZWN0ID0gYXJncy5I
b2xkZXIoKTsKLSAgICBWOFByb3h5OjpzZXRET01XcmFwcGVyKHdyYXBwZXJPYmplY3QsIFY4Q2xh
c3NJbmRleDo6V09SS0VSLCBvYmouZ2V0KCkpOworICAgIFY4RE9NV3JhcHBlcjo6c2V0RE9NV3Jh
cHBlcih3cmFwcGVyT2JqZWN0LCBWOENsYXNzSW5kZXg6OldPUktFUiwgb2JqLmdldCgpKTsKIAog
ICAgIG9iai0+cmVmKCk7Ci0gICAgVjhQcm94eTo6c2V0SlNXcmFwcGVyRm9yQWN0aXZlRE9NT2Jq
ZWN0KG9iai5nZXQoKSwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD46Ok5ldyh3cmFwcGVyT2Jq
ZWN0KSk7CisgICAgVjhET01XcmFwcGVyOjpzZXRKU1dyYXBwZXJGb3JBY3RpdmVET01PYmplY3Qo
b2JqLmdldCgpLCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0Pjo6TmV3KHdyYXBwZXJPYmplY3Qp
KTsKIAogICAgIHJldHVybiB3cmFwcGVyT2JqZWN0OwogfQpAQCAtMTE0LDcgKzExNCw3IEBAIFBh
c3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZ2V0RXZlbnRMaXN0ZW4KIEFDQ0VTU09SX0dFVFRFUihX
b3JrZXJPbm1lc3NhZ2UpCiB7CiAgICAgSU5DX1NUQVRTKEwiRE9NLldvcmtlci5vbm1lc3NhZ2Uu
X2dldCIpOwotICAgIFdvcmtlciogd29ya2VyID0gVjhQcm94eTo6Y29udmVydFRvTmF0aXZlT2Jq
ZWN0PFdvcmtlcj4oVjhDbGFzc0luZGV4OjpXT1JLRVIsIGluZm8uSG9sZGVyKCkpOworICAgIFdv
cmtlciogd29ya2VyID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8V29ya2Vy
PihWOENsYXNzSW5kZXg6OldPUktFUiwgaW5mby5Ib2xkZXIoKSk7CiAgICAgaWYgKHdvcmtlci0+
b25tZXNzYWdlKCkpIHsKICAgICAgICAgVjhPYmplY3RFdmVudExpc3RlbmVyKiBsaXN0ZW5lciA9
IHN0YXRpY19jYXN0PFY4T2JqZWN0RXZlbnRMaXN0ZW5lcio+KHdvcmtlci0+b25tZXNzYWdlKCkp
OwogICAgICAgICB2ODo6TG9jYWw8djg6Ok9iamVjdD4gdjhMaXN0ZW5lciA9IGxpc3RlbmVyLT5n
ZXRMaXN0ZW5lck9iamVjdCgpOwpAQCAtMTI2LDcgKzEyNiw3IEBAIEFDQ0VTU09SX0dFVFRFUihX
b3JrZXJPbm1lc3NhZ2UpCiBBQ0NFU1NPUl9TRVRURVIoV29ya2VyT25tZXNzYWdlKQogewogICAg
IElOQ19TVEFUUyhMIkRPTS5Xb3JrZXIub25tZXNzYWdlLl9zZXQiKTsKLSAgICBXb3JrZXIqIHdv
cmtlciA9IFY4UHJveHk6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxXb3JrZXI+KFY4Q2xhc3NJbmRl
eDo6V09SS0VSLCBpbmZvLkhvbGRlcigpKTsKKyAgICBXb3JrZXIqIHdvcmtlciA9IFY4RE9NV3Jh
cHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PFdvcmtlcj4oVjhDbGFzc0luZGV4OjpXT1JLRVIs
IGluZm8uSG9sZGVyKCkpOwogICAgIFY4T2JqZWN0RXZlbnRMaXN0ZW5lciogb2xkTGlzdGVuZXIg
PSBzdGF0aWNfY2FzdDxWOE9iamVjdEV2ZW50TGlzdGVuZXIqPih3b3JrZXItPm9ubWVzc2FnZSgp
KTsKICAgICBpZiAodmFsdWUtPklzTnVsbCgpKSB7CiAgICAgICAgIGlmIChvbGRMaXN0ZW5lcikg
ewpAQCAtMTUzLDcgKzE1Myw3IEBAIEFDQ0VTU09SX1NFVFRFUihXb3JrZXJPbm1lc3NhZ2UpCiBB
Q0NFU1NPUl9HRVRURVIoV29ya2VyT25lcnJvcikKIHsKICAgICBJTkNfU1RBVFMoTCJET00uV29y
a2VyLm9uZXJyb3IuX2dldCIpOwotICAgIFdvcmtlciogd29ya2VyID0gVjhQcm94eTo6Y29udmVy
dFRvTmF0aXZlT2JqZWN0PFdvcmtlcj4oVjhDbGFzc0luZGV4OjpXT1JLRVIsIGluZm8uSG9sZGVy
KCkpOworICAgIFdvcmtlciogd29ya2VyID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVP
YmplY3Q8V29ya2VyPihWOENsYXNzSW5kZXg6OldPUktFUiwgaW5mby5Ib2xkZXIoKSk7CiAgICAg
aWYgKHdvcmtlci0+b25lcnJvcigpKSB7CiAgICAgICAgIFY4T2JqZWN0RXZlbnRMaXN0ZW5lciog
bGlzdGVuZXIgPSBzdGF0aWNfY2FzdDxWOE9iamVjdEV2ZW50TGlzdGVuZXIqPih3b3JrZXItPm9u
ZXJyb3IoKSk7CiAgICAgICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiB2OExpc3RlbmVyID0gbGlz
dGVuZXItPmdldExpc3RlbmVyT2JqZWN0KCk7CkBAIC0xNjUsNyArMTY1LDcgQEAgQUNDRVNTT1Jf
R0VUVEVSKFdvcmtlck9uZXJyb3IpCiBBQ0NFU1NPUl9TRVRURVIoV29ya2VyT25lcnJvcikKIHsK
ICAgICBJTkNfU1RBVFMoTCJET00uV29ya2VyLm9uZXJyb3IuX3NldCIpOwotICAgIFdvcmtlciog
d29ya2VyID0gVjhQcm94eTo6Y29udmVydFRvTmF0aXZlT2JqZWN0PFdvcmtlcj4oVjhDbGFzc0lu
ZGV4OjpXT1JLRVIsIGluZm8uSG9sZGVyKCkpOworICAgIFdvcmtlciogd29ya2VyID0gVjhET01X
cmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8V29ya2VyPihWOENsYXNzSW5kZXg6OldPUktF
UiwgaW5mby5Ib2xkZXIoKSk7CiAgICAgVjhPYmplY3RFdmVudExpc3RlbmVyKiBvbGRMaXN0ZW5l
ciA9IHN0YXRpY19jYXN0PFY4T2JqZWN0RXZlbnRMaXN0ZW5lcio+KHdvcmtlci0+b25lcnJvcigp
KTsKICAgICBpZiAodmFsdWUtPklzTnVsbCgpKSB7CiAgICAgICAgIGlmIChvbGRMaXN0ZW5lcikg
ewpAQCAtMTkyLDcgKzE5Miw3IEBAIEFDQ0VTU09SX1NFVFRFUihXb3JrZXJPbmVycm9yKQogQ0FM
TEJBQ0tfRlVOQ19ERUNMKFdvcmtlckFkZEV2ZW50TGlzdGVuZXIpCiB7CiAgICAgSU5DX1NUQVRT
KEwiRE9NLldvcmtlci5hZGRFdmVudExpc3RlbmVyKCkiKTsKLSAgICBXb3JrZXIqIHdvcmtlciA9
IFY4UHJveHk6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxXb3JrZXI+KFY4Q2xhc3NJbmRleDo6V09S
S0VSLCBhcmdzLkhvbGRlcigpKTsKKyAgICBXb3JrZXIqIHdvcmtlciA9IFY4RE9NV3JhcHBlcjo6
Y29udmVydFRvTmF0aXZlT2JqZWN0PFdvcmtlcj4oVjhDbGFzc0luZGV4OjpXT1JLRVIsIGFyZ3Mu
SG9sZGVyKCkpOwogCiAgICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVyID0gZ2V0RXZl
bnRMaXN0ZW5lcih3b3JrZXIsIGFyZ3NbMV0sIGZhbHNlKTsKICAgICBpZiAobGlzdGVuZXIpIHsK
QEAgLTIwOCw3ICsyMDgsNyBAQCBDQUxMQkFDS19GVU5DX0RFQ0woV29ya2VyQWRkRXZlbnRMaXN0
ZW5lCiBDQUxMQkFDS19GVU5DX0RFQ0woV29ya2VyUmVtb3ZlRXZlbnRMaXN0ZW5lcikKIHsKICAg
ICBJTkNfU1RBVFMoTCJET00uV29ya2VyLnJlbW92ZUV2ZW50TGlzdGVuZXIoKSIpOwotICAgIFdv
cmtlciogd29ya2VyID0gVjhQcm94eTo6Y29udmVydFRvTmF0aXZlT2JqZWN0PFdvcmtlcj4oVjhD
bGFzc0luZGV4OjpXT1JLRVIsIGFyZ3MuSG9sZGVyKCkpOworICAgIFdvcmtlciogd29ya2VyID0g
VjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8V29ya2VyPihWOENsYXNzSW5kZXg6
OldPUktFUiwgYXJncy5Ib2xkZXIoKSk7CiAKICAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlz
dGVuZXIgPSBnZXRFdmVudExpc3RlbmVyKHdvcmtlciwgYXJnc1sxXSwgdHJ1ZSk7CiAgICAgaWYg
KGxpc3RlbmVyKSB7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFhNTEh0dHBS
ZXF1ZXN0Q29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4WE1MSHR0cFJlcXVlc3RDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDQ1NjUwKQor
KysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhYTUxIdHRwUmVxdWVzdENvbnN0cnVjdG9y
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTksMTEgKzU5LDExIEBAIENBTExCQUNLX0ZVTkNfREVD
TChYTUxIdHRwUmVxdWVzdENvbnN0cnUKICNlbmRpZgogICAgICAgICBjb250ZXh0ID0gVjhQcm94
eTo6cmV0cmlldmVGcmFtZSgpLT5kb2N1bWVudCgpOwogICAgIFJlZlB0cjxYTUxIdHRwUmVxdWVz
dD4geG1sSHR0cFJlcXVlc3QgPSBYTUxIdHRwUmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQpOwotICAg
IFY4UHJveHk6OnNldERPTVdyYXBwZXIoYXJncy5Ib2xkZXIoKSwgVjhDbGFzc0luZGV4OjpUb0lu
dChWOENsYXNzSW5kZXg6OlhNTEhUVFBSRVFVRVNUKSwgeG1sSHR0cFJlcXVlc3QuZ2V0KCkpOwor
ICAgIFY4RE9NV3JhcHBlcjo6c2V0RE9NV3JhcHBlcihhcmdzLkhvbGRlcigpLCBWOENsYXNzSW5k
ZXg6OlRvSW50KFY4Q2xhc3NJbmRleDo6WE1MSFRUUFJFUVVFU1QpLCB4bWxIdHRwUmVxdWVzdC5n
ZXQoKSk7CiAKICAgICAvLyBBZGQgb2JqZWN0IHRvIHRoZSB3cmFwcGVyIG1hcC4KICAgICB4bWxI
dHRwUmVxdWVzdC0+cmVmKCk7Ci0gICAgVjhQcm94eTo6c2V0SlNXcmFwcGVyRm9yQWN0aXZlRE9N
T2JqZWN0KHhtbEh0dHBSZXF1ZXN0LmdldCgpLCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0Pjo6
TmV3KGFyZ3MuSG9sZGVyKCkpKTsKKyAgICBWOERPTVdyYXBwZXI6OnNldEpTV3JhcHBlckZvckFj
dGl2ZURPTU9iamVjdCh4bWxIdHRwUmVxdWVzdC5nZXQoKSwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9i
amVjdD46Ok5ldyhhcmdzLkhvbGRlcigpKSk7CiAgICAgcmV0dXJuIGFyZ3MuSG9sZGVyKCk7CiB9
CiAKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4WE1MSHR0cFJlcXVlc3RDdXN0
b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4WE1MSHR0
cFJlcXVlc3RDdXN0b20uY3BwCShyZXZpc2lvbiA0NTY1MCkKKysrIFdlYkNvcmUvYmluZGluZ3Mv
djgvY3VzdG9tL1Y4WE1MSHR0cFJlcXVlc3RDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02
Miw3ICs2Miw3IEBAIFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gZ2V0RXZlbnRMaXN0ZW4KIEFD
Q0VTU09SX0dFVFRFUihYTUxIdHRwUmVxdWVzdE9uYWJvcnQpCiB7CiAgICAgSU5DX1NUQVRTKCJE
T00uWE1MSHR0cFJlcXVlc3Qub25hYm9ydC5fZ2V0Iik7Ci0gICAgWE1MSHR0cFJlcXVlc3QqIHht
bEh0dHBSZXF1ZXN0ID0gVjhQcm94eTo6Y29udmVydFRvTmF0aXZlT2JqZWN0PFhNTEh0dHBSZXF1
ZXN0PihWOENsYXNzSW5kZXg6OlhNTEhUVFBSRVFVRVNULCBpbmZvLkhvbGRlcigpKTsKKyAgICBY
TUxIdHRwUmVxdWVzdCogeG1sSHR0cFJlcXVlc3QgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05h
dGl2ZU9iamVjdDxYTUxIdHRwUmVxdWVzdD4oVjhDbGFzc0luZGV4OjpYTUxIVFRQUkVRVUVTVCwg
aW5mby5Ib2xkZXIoKSk7CiAgICAgaWYgKHhtbEh0dHBSZXF1ZXN0LT5vbmFib3J0KCkpIHsKICAg
ICAgICAgVjhPYmplY3RFdmVudExpc3RlbmVyKiBsaXN0ZW5lciA9IHN0YXRpY19jYXN0PFY4T2Jq
ZWN0RXZlbnRMaXN0ZW5lcio+KHhtbEh0dHBSZXF1ZXN0LT5vbmFib3J0KCkpOwogICAgICAgICB2
ODo6TG9jYWw8djg6Ok9iamVjdD4gdjhMaXN0ZW5lciA9IGxpc3RlbmVyLT5nZXRMaXN0ZW5lck9i
amVjdCgpOwpAQCAtNzQsNyArNzQsNyBAQCBBQ0NFU1NPUl9HRVRURVIoWE1MSHR0cFJlcXVlc3RP
bmFib3J0KQogQUNDRVNTT1JfU0VUVEVSKFhNTEh0dHBSZXF1ZXN0T25hYm9ydCkKIHsKICAgICBJ
TkNfU1RBVFMoIkRPTS5YTUxIdHRwUmVxdWVzdC5vbmFib3J0Ll9zZXQiKTsKLSAgICBYTUxIdHRw
UmVxdWVzdCogeG1sSHR0cFJlcXVlc3QgPSBWOFByb3h5Ojpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8
WE1MSHR0cFJlcXVlc3Q+KFY4Q2xhc3NJbmRleDo6WE1MSFRUUFJFUVVFU1QsIGluZm8uSG9sZGVy
KCkpOworICAgIFhNTEh0dHBSZXF1ZXN0KiB4bWxIdHRwUmVxdWVzdCA9IFY4RE9NV3JhcHBlcjo6
Y29udmVydFRvTmF0aXZlT2JqZWN0PFhNTEh0dHBSZXF1ZXN0PihWOENsYXNzSW5kZXg6OlhNTEhU
VFBSRVFVRVNULCBpbmZvLkhvbGRlcigpKTsKICAgICBpZiAodmFsdWUtPklzTnVsbCgpKSB7CiAg
ICAgICAgIGlmICh4bWxIdHRwUmVxdWVzdC0+b25hYm9ydCgpKSB7CiAgICAgICAgICAgICBWOE9i
amVjdEV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyID0gc3RhdGljX2Nhc3Q8VjhPYmplY3RFdmVudExp
c3RlbmVyKj4oeG1sSHR0cFJlcXVlc3QtPm9uYWJvcnQoKSk7CkBAIC05Niw3ICs5Niw3IEBAIEFD
Q0VTU09SX1NFVFRFUihYTUxIdHRwUmVxdWVzdE9uYWJvcnQpCiBBQ0NFU1NPUl9HRVRURVIoWE1M
SHR0cFJlcXVlc3RPbmVycm9yKQogewogICAgIElOQ19TVEFUUygiRE9NLlhNTEh0dHBSZXF1ZXN0
Lm9uZXJyb3IuX2dldCIpOwotICAgIFhNTEh0dHBSZXF1ZXN0KiB4bWxIdHRwUmVxdWVzdCA9IFY4
UHJveHk6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxYTUxIdHRwUmVxdWVzdD4oVjhDbGFzc0luZGV4
OjpYTUxIVFRQUkVRVUVTVCwgaW5mby5Ib2xkZXIoKSk7CisgICAgWE1MSHR0cFJlcXVlc3QqIHht
bEh0dHBSZXF1ZXN0ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8WE1MSHR0
cFJlcXVlc3Q+KFY4Q2xhc3NJbmRleDo6WE1MSFRUUFJFUVVFU1QsIGluZm8uSG9sZGVyKCkpOwog
ICAgIGlmICh4bWxIdHRwUmVxdWVzdC0+b25lcnJvcigpKSB7CiAgICAgICAgIFJlZlB0cjxWOE9i
amVjdEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVyID0gc3RhdGljX2Nhc3Q8VjhPYmplY3RFdmVudExp
c3RlbmVyKj4oeG1sSHR0cFJlcXVlc3QtPm9uZXJyb3IoKSk7CiAgICAgICAgIHY4OjpMb2NhbDx2
ODo6T2JqZWN0PiB2OExpc3RlbmVyID0gbGlzdGVuZXItPmdldExpc3RlbmVyT2JqZWN0KCk7CkBA
IC0xMDgsNyArMTA4LDcgQEAgQUNDRVNTT1JfR0VUVEVSKFhNTEh0dHBSZXF1ZXN0T25lcnJvcikK
IEFDQ0VTU09SX1NFVFRFUihYTUxIdHRwUmVxdWVzdE9uZXJyb3IpCiB7CiAgICAgSU5DX1NUQVRT
KCJET00uWE1MSHR0cFJlcXVlc3Qub25lcnJvci5fc2V0Iik7Ci0gICAgWE1MSHR0cFJlcXVlc3Qq
IHhtbEh0dHBSZXF1ZXN0ID0gVjhQcm94eTo6Y29udmVydFRvTmF0aXZlT2JqZWN0PFhNTEh0dHBS
ZXF1ZXN0PihWOENsYXNzSW5kZXg6OlhNTEhUVFBSRVFVRVNULCBpbmZvLkhvbGRlcigpKTsKKyAg
ICBYTUxIdHRwUmVxdWVzdCogeG1sSHR0cFJlcXVlc3QgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRU
b05hdGl2ZU9iamVjdDxYTUxIdHRwUmVxdWVzdD4oVjhDbGFzc0luZGV4OjpYTUxIVFRQUkVRVUVT
VCwgaW5mby5Ib2xkZXIoKSk7CiAgICAgaWYgKHZhbHVlLT5Jc051bGwoKSkgewogICAgICAgICBp
ZiAoeG1sSHR0cFJlcXVlc3QtPm9uZXJyb3IoKSkgewogICAgICAgICAgICAgVjhPYmplY3RFdmVu
dExpc3RlbmVyKiBsaXN0ZW5lciA9IHN0YXRpY19jYXN0PFY4T2JqZWN0RXZlbnRMaXN0ZW5lcio+
KHhtbEh0dHBSZXF1ZXN0LT5vbmVycm9yKCkpOwpAQCAtMTMwLDcgKzEzMCw3IEBAIEFDQ0VTU09S
X1NFVFRFUihYTUxIdHRwUmVxdWVzdE9uZXJyb3IpCiBBQ0NFU1NPUl9HRVRURVIoWE1MSHR0cFJl
cXVlc3RPbmxvYWQpCiB7CiAgICAgSU5DX1NUQVRTKCJET00uWE1MSHR0cFJlcXVlc3Qub25sb2Fk
Ll9nZXQiKTsKLSAgICBYTUxIdHRwUmVxdWVzdCogeG1sSHR0cFJlcXVlc3QgPSBWOFByb3h5Ojpj
b252ZXJ0VG9OYXRpdmVPYmplY3Q8WE1MSHR0cFJlcXVlc3Q+KFY4Q2xhc3NJbmRleDo6WE1MSFRU
UFJFUVVFU1QsIGluZm8uSG9sZGVyKCkpOworICAgIFhNTEh0dHBSZXF1ZXN0KiB4bWxIdHRwUmVx
dWVzdCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PFhNTEh0dHBSZXF1ZXN0
PihWOENsYXNzSW5kZXg6OlhNTEhUVFBSRVFVRVNULCBpbmZvLkhvbGRlcigpKTsKICAgICBpZiAo
eG1sSHR0cFJlcXVlc3QtPm9ubG9hZCgpKSB7CiAgICAgICAgIFY4T2JqZWN0RXZlbnRMaXN0ZW5l
ciogbGlzdGVuZXIgPSBzdGF0aWNfY2FzdDxWOE9iamVjdEV2ZW50TGlzdGVuZXIqPih4bWxIdHRw
UmVxdWVzdC0+b25sb2FkKCkpOwogICAgICAgICB2ODo6TG9jYWw8djg6Ok9iamVjdD4gdjhMaXN0
ZW5lciA9IGxpc3RlbmVyLT5nZXRMaXN0ZW5lck9iamVjdCgpOwpAQCAtMTQyLDcgKzE0Miw3IEBA
IEFDQ0VTU09SX0dFVFRFUihYTUxIdHRwUmVxdWVzdE9ubG9hZCkKIEFDQ0VTU09SX1NFVFRFUihY
TUxIdHRwUmVxdWVzdE9ubG9hZCkKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5YTUxIdHRwUmVxdWVz
dC5vbmxvYWQuX3NldCIpOwotICAgIFhNTEh0dHBSZXF1ZXN0KiB4bWxIdHRwUmVxdWVzdCA9IFY4
UHJveHk6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxYTUxIdHRwUmVxdWVzdD4oVjhDbGFzc0luZGV4
OjpYTUxIVFRQUkVRVUVTVCwgaW5mby5Ib2xkZXIoKSk7CisgICAgWE1MSHR0cFJlcXVlc3QqIHht
bEh0dHBSZXF1ZXN0ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8WE1MSHR0
cFJlcXVlc3Q+KFY4Q2xhc3NJbmRleDo6WE1MSFRUUFJFUVVFU1QsIGluZm8uSG9sZGVyKCkpOwog
ICAgIGlmICh2YWx1ZS0+SXNOdWxsKCkpIHsKICAgICAgICAgaWYgKHhtbEh0dHBSZXF1ZXN0LT5v
bmxvYWQoKSkgewogICAgICAgICAgICAgVjhPYmplY3RFdmVudExpc3RlbmVyKiBsaXN0ZW5lciA9
IHN0YXRpY19jYXN0PFY4T2JqZWN0RXZlbnRMaXN0ZW5lcio+KHhtbEh0dHBSZXF1ZXN0LT5vbmxv
YWQoKSk7CkBAIC0xNjQsNyArMTY0LDcgQEAgQUNDRVNTT1JfU0VUVEVSKFhNTEh0dHBSZXF1ZXN0
T25sb2FkKQogQUNDRVNTT1JfR0VUVEVSKFhNTEh0dHBSZXF1ZXN0T25sb2Fkc3RhcnQpCiB7CiAg
ICAgSU5DX1NUQVRTKCJET00uWE1MSHR0cFJlcXVlc3Qub25sb2Fkc3RhcnQuX2dldCIpOwotICAg
IFhNTEh0dHBSZXF1ZXN0KiB4bWxIdHRwUmVxdWVzdCA9IFY4UHJveHk6OmNvbnZlcnRUb05hdGl2
ZU9iamVjdDxYTUxIdHRwUmVxdWVzdD4oVjhDbGFzc0luZGV4OjpYTUxIVFRQUkVRVUVTVCwgaW5m
by5Ib2xkZXIoKSk7CisgICAgWE1MSHR0cFJlcXVlc3QqIHhtbEh0dHBSZXF1ZXN0ID0gVjhET01X
cmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8WE1MSHR0cFJlcXVlc3Q+KFY4Q2xhc3NJbmRl
eDo6WE1MSFRUUFJFUVVFU1QsIGluZm8uSG9sZGVyKCkpOwogICAgIGlmICh4bWxIdHRwUmVxdWVz
dC0+b25sb2Fkc3RhcnQoKSkgewogICAgICAgICBWOE9iamVjdEV2ZW50TGlzdGVuZXIqIGxpc3Rl
bmVyID0gc3RhdGljX2Nhc3Q8VjhPYmplY3RFdmVudExpc3RlbmVyKj4oeG1sSHR0cFJlcXVlc3Qt
Pm9ubG9hZHN0YXJ0KCkpOwogICAgICAgICB2ODo6TG9jYWw8djg6Ok9iamVjdD4gdjhMaXN0ZW5l
ciA9IGxpc3RlbmVyLT5nZXRMaXN0ZW5lck9iamVjdCgpOwpAQCAtMTc2LDcgKzE3Niw3IEBAIEFD
Q0VTU09SX0dFVFRFUihYTUxIdHRwUmVxdWVzdE9ubG9hZHN0YXIKIEFDQ0VTU09SX1NFVFRFUihY
TUxIdHRwUmVxdWVzdE9ubG9hZHN0YXJ0KQogewogICAgIElOQ19TVEFUUygiRE9NLlhNTEh0dHBS
ZXF1ZXN0Lm9ubG9hZHN0YXJ0Ll9zZXQiKTsKLSAgICBYTUxIdHRwUmVxdWVzdCogeG1sSHR0cFJl
cXVlc3QgPSBWOFByb3h5Ojpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8WE1MSHR0cFJlcXVlc3Q+KFY4
Q2xhc3NJbmRleDo6WE1MSFRUUFJFUVVFU1QsIGluZm8uSG9sZGVyKCkpOworICAgIFhNTEh0dHBS
ZXF1ZXN0KiB4bWxIdHRwUmVxdWVzdCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2Jq
ZWN0PFhNTEh0dHBSZXF1ZXN0PihWOENsYXNzSW5kZXg6OlhNTEhUVFBSRVFVRVNULCBpbmZvLkhv
bGRlcigpKTsKICAgICBpZiAodmFsdWUtPklzTnVsbCgpKSB7CiAgICAgICAgIGlmICh4bWxIdHRw
UmVxdWVzdC0+b25sb2Fkc3RhcnQoKSkgewogICAgICAgICAgICAgVjhPYmplY3RFdmVudExpc3Rl
bmVyKiBsaXN0ZW5lciA9IHN0YXRpY19jYXN0PFY4T2JqZWN0RXZlbnRMaXN0ZW5lcio+KHhtbEh0
dHBSZXF1ZXN0LT5vbmxvYWRzdGFydCgpKTsKQEAgLTE5OCw3ICsxOTgsNyBAQCBBQ0NFU1NPUl9T
RVRURVIoWE1MSHR0cFJlcXVlc3RPbmxvYWRzdGFyCiBBQ0NFU1NPUl9HRVRURVIoWE1MSHR0cFJl
cXVlc3RPbnByb2dyZXNzKQogewogICAgIElOQ19TVEFUUygiRE9NLlhNTEh0dHBSZXF1ZXN0Lm9u
cHJvZ3Jlc3MuX2dldCIpOwotICAgIFhNTEh0dHBSZXF1ZXN0KiB4bWxIdHRwUmVxdWVzdCA9IFY4
UHJveHk6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxYTUxIdHRwUmVxdWVzdD4oVjhDbGFzc0luZGV4
OjpYTUxIVFRQUkVRVUVTVCwgaW5mby5Ib2xkZXIoKSk7CisgICAgWE1MSHR0cFJlcXVlc3QqIHht
bEh0dHBSZXF1ZXN0ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8WE1MSHR0
cFJlcXVlc3Q+KFY4Q2xhc3NJbmRleDo6WE1MSFRUUFJFUVVFU1QsIGluZm8uSG9sZGVyKCkpOwog
ICAgIGlmICh4bWxIdHRwUmVxdWVzdC0+b25wcm9ncmVzcygpKSB7CiAgICAgICAgIFY4T2JqZWN0
RXZlbnRMaXN0ZW5lciogbGlzdGVuZXIgPSBzdGF0aWNfY2FzdDxWOE9iamVjdEV2ZW50TGlzdGVu
ZXIqPih4bWxIdHRwUmVxdWVzdC0+b25wcm9ncmVzcygpKTsKICAgICAgICAgdjg6OkxvY2FsPHY4
OjpPYmplY3Q+IHY4TGlzdGVuZXIgPSBsaXN0ZW5lci0+Z2V0TGlzdGVuZXJPYmplY3QoKTsKQEAg
LTIxMCw3ICsyMTAsNyBAQCBBQ0NFU1NPUl9HRVRURVIoWE1MSHR0cFJlcXVlc3RPbnByb2dyZXNz
CiBBQ0NFU1NPUl9TRVRURVIoWE1MSHR0cFJlcXVlc3RPbnByb2dyZXNzKQogewogICAgIElOQ19T
VEFUUygiRE9NLlhNTEh0dHBSZXF1ZXN0Lm9ucHJvZ3Jlc3MuX3NldCIpOwotICAgIFhNTEh0dHBS
ZXF1ZXN0KiB4bWxIdHRwUmVxdWVzdCA9IFY4UHJveHk6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxY
TUxIdHRwUmVxdWVzdD4oVjhDbGFzc0luZGV4OjpYTUxIVFRQUkVRVUVTVCwgaW5mby5Ib2xkZXIo
KSk7CisgICAgWE1MSHR0cFJlcXVlc3QqIHhtbEh0dHBSZXF1ZXN0ID0gVjhET01XcmFwcGVyOjpj
b252ZXJ0VG9OYXRpdmVPYmplY3Q8WE1MSHR0cFJlcXVlc3Q+KFY4Q2xhc3NJbmRleDo6WE1MSFRU
UFJFUVVFU1QsIGluZm8uSG9sZGVyKCkpOwogICAgIGlmICh2YWx1ZS0+SXNOdWxsKCkpIHsKICAg
ICAgICAgaWYgKHhtbEh0dHBSZXF1ZXN0LT5vbnByb2dyZXNzKCkpIHsKICAgICAgICAgICAgIFY4
T2JqZWN0RXZlbnRMaXN0ZW5lciogbGlzdGVuZXIgPSBzdGF0aWNfY2FzdDxWOE9iamVjdEV2ZW50
TGlzdGVuZXIqPih4bWxIdHRwUmVxdWVzdC0+b25wcm9ncmVzcygpKTsKQEAgLTIzMiw3ICsyMzIs
NyBAQCBBQ0NFU1NPUl9TRVRURVIoWE1MSHR0cFJlcXVlc3RPbnByb2dyZXNzCiBBQ0NFU1NPUl9H
RVRURVIoWE1MSHR0cFJlcXVlc3RPbnJlYWR5c3RhdGVjaGFuZ2UpCiB7CiAgICAgSU5DX1NUQVRT
KCJET00uWE1MSHR0cFJlcXVlc3Qub25yZWFkeXN0YXRlY2hhbmdlLl9nZXQiKTsKLSAgICBYTUxI
dHRwUmVxdWVzdCogeG1sSHR0cFJlcXVlc3QgPSBWOFByb3h5Ojpjb252ZXJ0VG9OYXRpdmVPYmpl
Y3Q8WE1MSHR0cFJlcXVlc3Q+KFY4Q2xhc3NJbmRleDo6WE1MSFRUUFJFUVVFU1QsIGluZm8uSG9s
ZGVyKCkpOworICAgIFhNTEh0dHBSZXF1ZXN0KiB4bWxIdHRwUmVxdWVzdCA9IFY4RE9NV3JhcHBl
cjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PFhNTEh0dHBSZXF1ZXN0PihWOENsYXNzSW5kZXg6OlhN
TEhUVFBSRVFVRVNULCBpbmZvLkhvbGRlcigpKTsKICAgICBpZiAoeG1sSHR0cFJlcXVlc3QtPm9u
cmVhZHlzdGF0ZWNoYW5nZSgpKSB7CiAgICAgICAgIFY4T2JqZWN0RXZlbnRMaXN0ZW5lciogbGlz
dGVuZXIgPSBzdGF0aWNfY2FzdDxWOE9iamVjdEV2ZW50TGlzdGVuZXIqPih4bWxIdHRwUmVxdWVz
dC0+b25yZWFkeXN0YXRlY2hhbmdlKCkpOwogICAgICAgICB2ODo6TG9jYWw8djg6Ok9iamVjdD4g
djhMaXN0ZW5lciA9IGxpc3RlbmVyLT5nZXRMaXN0ZW5lck9iamVjdCgpOwpAQCAtMjQ0LDcgKzI0
NCw3IEBAIEFDQ0VTU09SX0dFVFRFUihYTUxIdHRwUmVxdWVzdE9ucmVhZHlzdGEKIEFDQ0VTU09S
X1NFVFRFUihYTUxIdHRwUmVxdWVzdE9ucmVhZHlzdGF0ZWNoYW5nZSkKIHsKICAgICBJTkNfU1RB
VFMoIkRPTS5YTUxIdHRwUmVxdWVzdC5vbnJlYWR5c3RhdGVjaGFuZ2UuX3NldCIpOwotICAgIFhN
TEh0dHBSZXF1ZXN0KiB4bWxIdHRwUmVxdWVzdCA9IFY4UHJveHk6OmNvbnZlcnRUb05hdGl2ZU9i
amVjdDxYTUxIdHRwUmVxdWVzdD4oVjhDbGFzc0luZGV4OjpYTUxIVFRQUkVRVUVTVCwgaW5mby5I
b2xkZXIoKSk7CisgICAgWE1MSHR0cFJlcXVlc3QqIHhtbEh0dHBSZXF1ZXN0ID0gVjhET01XcmFw
cGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8WE1MSHR0cFJlcXVlc3Q+KFY4Q2xhc3NJbmRleDo6
WE1MSFRUUFJFUVVFU1QsIGluZm8uSG9sZGVyKCkpOwogICAgIGlmICh2YWx1ZS0+SXNOdWxsKCkp
IHsKICAgICAgICAgaWYgKHhtbEh0dHBSZXF1ZXN0LT5vbnJlYWR5c3RhdGVjaGFuZ2UoKSkgewog
ICAgICAgICAgICAgVjhPYmplY3RFdmVudExpc3RlbmVyKiBsaXN0ZW5lciA9IHN0YXRpY19jYXN0
PFY4T2JqZWN0RXZlbnRMaXN0ZW5lcio+KHhtbEh0dHBSZXF1ZXN0LT5vbnJlYWR5c3RhdGVjaGFu
Z2UoKSk7CkBAIC0yNjgsMTQgKzI2OCwxNCBAQCBBQ0NFU1NPUl9HRVRURVIoWE1MSHR0cFJlcXVl
c3RSZXNwb25zZVRlCiAgICAgLy8gRklYTUU6IFRoaXMgaXMgb25seSBuZWVkZWQgYmVjYXVzZSB3
ZWJraXQgc2V0IHRoaXMgZ2V0dGVyIGFzIGN1c3RvbS4KICAgICAvLyBTbyB3ZSBuZWVkIGEgY3Vz
dG9tIG1ldGhvZCB0byBhdm9pZCBmb3JraW5nIHRoZSBJREwgZmlsZS4KICAgICBJTkNfU1RBVFMo
IkRPTS5YTUxIdHRwUmVxdWVzdC5yZXNwb25zZXRleHQuX2dldCIpOwotICAgIFhNTEh0dHBSZXF1
ZXN0KiB4bWxIdHRwUmVxdWVzdCA9IFY4UHJveHk6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxYTUxI
dHRwUmVxdWVzdD4oVjhDbGFzc0luZGV4OjpYTUxIVFRQUkVRVUVTVCwgaW5mby5Ib2xkZXIoKSk7
CisgICAgWE1MSHR0cFJlcXVlc3QqIHhtbEh0dHBSZXF1ZXN0ID0gVjhET01XcmFwcGVyOjpjb252
ZXJ0VG9OYXRpdmVPYmplY3Q8WE1MSHR0cFJlcXVlc3Q+KFY4Q2xhc3NJbmRleDo6WE1MSFRUUFJF
UVVFU1QsIGluZm8uSG9sZGVyKCkpOwogICAgIHJldHVybiB2OFN0cmluZ09yTnVsbCh4bWxIdHRw
UmVxdWVzdC0+cmVzcG9uc2VUZXh0KCkpOwogfQogCiBDQUxMQkFDS19GVU5DX0RFQ0woWE1MSHR0
cFJlcXVlc3RBZGRFdmVudExpc3RlbmVyKQogewogICAgIElOQ19TVEFUUygiRE9NLlhNTEh0dHBS
ZXF1ZXN0LmFkZEV2ZW50TGlzdGVuZXIoKSIpOwotICAgIFhNTEh0dHBSZXF1ZXN0KiB4bWxIdHRw
UmVxdWVzdCA9IFY4UHJveHk6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxYTUxIdHRwUmVxdWVzdD4o
VjhDbGFzc0luZGV4OjpYTUxIVFRQUkVRVUVTVCwgYXJncy5Ib2xkZXIoKSk7CisgICAgWE1MSHR0
cFJlcXVlc3QqIHhtbEh0dHBSZXF1ZXN0ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVP
YmplY3Q8WE1MSHR0cFJlcXVlc3Q+KFY4Q2xhc3NJbmRleDo6WE1MSFRUUFJFUVVFU1QsIGFyZ3Mu
SG9sZGVyKCkpOwogCiAgICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVyID0gZ2V0RXZl
bnRMaXN0ZW5lcih4bWxIdHRwUmVxdWVzdCwgYXJnc1sxXSwgZmFsc2UpOwogICAgIGlmIChsaXN0
ZW5lcikgewpAQCAtMjkxLDcgKzI5MSw3IEBAIENBTExCQUNLX0ZVTkNfREVDTChYTUxIdHRwUmVx
dWVzdEFkZEV2ZW4KIENBTExCQUNLX0ZVTkNfREVDTChYTUxIdHRwUmVxdWVzdFJlbW92ZUV2ZW50
TGlzdGVuZXIpCiB7CiAgICAgSU5DX1NUQVRTKCJET00uWE1MSHR0cFJlcXVlc3QucmVtb3ZlRXZl
bnRMaXN0ZW5lcigpIik7Ci0gICAgWE1MSHR0cFJlcXVlc3QqIHhtbEh0dHBSZXF1ZXN0ID0gVjhQ
cm94eTo6Y29udmVydFRvTmF0aXZlT2JqZWN0PFhNTEh0dHBSZXF1ZXN0PihWOENsYXNzSW5kZXg6
OlhNTEhUVFBSRVFVRVNULCBhcmdzLkhvbGRlcigpKTsKKyAgICBYTUxIdHRwUmVxdWVzdCogeG1s
SHR0cFJlcXVlc3QgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxYTUxIdHRw
UmVxdWVzdD4oVjhDbGFzc0luZGV4OjpYTUxIVFRQUkVRVUVTVCwgYXJncy5Ib2xkZXIoKSk7CiAK
ICAgICBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIgPSBnZXRFdmVudExpc3RlbmVyKHht
bEh0dHBSZXF1ZXN0LCBhcmdzWzFdLCB0cnVlKTsKICAgICBpZiAobGlzdGVuZXIpIHsKQEAgLTMx
Nyw3ICszMTcsNyBAQCBDQUxMQkFDS19GVU5DX0RFQ0woWE1MSHR0cFJlcXVlc3RPcGVuKQogICAg
IGlmIChhcmdzLkxlbmd0aCgpIDwgMikKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoIk5vdCBl
bm91Z2ggYXJndW1lbnRzIiwgVjhQcm94eTo6U3ludGF4RXJyb3IpOwogCi0gICAgWE1MSHR0cFJl
cXVlc3QqIHhtbEh0dHBSZXF1ZXN0ID0gVjhQcm94eTo6Y29udmVydFRvTmF0aXZlT2JqZWN0PFhN
TEh0dHBSZXF1ZXN0PihWOENsYXNzSW5kZXg6OlhNTEhUVFBSRVFVRVNULCBhcmdzLkhvbGRlcigp
KTsKKyAgICBYTUxIdHRwUmVxdWVzdCogeG1sSHR0cFJlcXVlc3QgPSBWOERPTVdyYXBwZXI6OmNv
bnZlcnRUb05hdGl2ZU9iamVjdDxYTUxIdHRwUmVxdWVzdD4oVjhDbGFzc0luZGV4OjpYTUxIVFRQ
UkVRVUVTVCwgYXJncy5Ib2xkZXIoKSk7CiAKICAgICBTdHJpbmcgbWV0aG9kID0gdG9XZWJDb3Jl
U3RyaW5nKGFyZ3NbMF0pOwogICAgIFN0cmluZyB1cmxzdHJpbmcgPSB0b1dlYkNvcmVTdHJpbmco
YXJnc1sxXSk7CkBAIC0zNzAsNyArMzcwLDcgQEAgc3RhdGljIGJvb2wgSXNEb2N1bWVudFR5cGUo
djg6OkhhbmRsZTx2OAogQ0FMTEJBQ0tfRlVOQ19ERUNMKFhNTEh0dHBSZXF1ZXN0U2VuZCkKIHsK
ICAgICBJTkNfU1RBVFMoIkRPTS5YTUxIdHRwUmVxdWVzdC5zZW5kKCkiKTsKLSAgICBYTUxIdHRw
UmVxdWVzdCogeG1sSHR0cFJlcXVlc3QgPSBWOFByb3h5Ojpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8
WE1MSHR0cFJlcXVlc3Q+KFY4Q2xhc3NJbmRleDo6WE1MSFRUUFJFUVVFU1QsIGFyZ3MuSG9sZGVy
KCkpOworICAgIFhNTEh0dHBSZXF1ZXN0KiB4bWxIdHRwUmVxdWVzdCA9IFY4RE9NV3JhcHBlcjo6
Y29udmVydFRvTmF0aXZlT2JqZWN0PFhNTEh0dHBSZXF1ZXN0PihWOENsYXNzSW5kZXg6OlhNTEhU
VFBSRVFVRVNULCBhcmdzLkhvbGRlcigpKTsKIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwog
ICAgIGlmIChhcmdzLkxlbmd0aCgpIDwgMSkKQEAgLTM4MCw3ICszODAsNyBAQCBDQUxMQkFDS19G
VU5DX0RFQ0woWE1MSHR0cFJlcXVlc3RTZW5kKQogICAgICAgICAvLyBGSVhNRTogdXBzdHJlYW0g
aGFuZGxlcyAiRmlsZSIgb2JqZWN0cyB0b28uCiAgICAgICAgIGlmIChJc0RvY3VtZW50VHlwZShh
cmcpKSB7CiAgICAgICAgICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IG9iamVjdCA9IHY4OjpI
YW5kbGU8djg6Ok9iamVjdD46OkNhc3QoYXJnKTsKLSAgICAgICAgICAgIERvY3VtZW50KiBkb2N1
bWVudCA9IFY4UHJveHk6OmNvbnZlcnRET01XcmFwcGVyVG9Ob2RlPERvY3VtZW50PihvYmplY3Qp
OworICAgICAgICAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0
RE9NV3JhcHBlclRvTm9kZTxEb2N1bWVudD4ob2JqZWN0KTsKICAgICAgICAgICAgIEFTU0VSVChk
b2N1bWVudCk7CiAgICAgICAgICAgICB4bWxIdHRwUmVxdWVzdC0+c2VuZChkb2N1bWVudCwgZWMp
OwogICAgICAgICB9IGVsc2UKQEAgLTM5OCw3ICszOTgsNyBAQCBDQUxMQkFDS19GVU5DX0RFQ0wo
WE1MSHR0cFJlcXVlc3RTZXRSZXF1CiAgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPCAyKQogICAgICAg
ICByZXR1cm4gdGhyb3dFcnJvcigiTm90IGVub3VnaCBhcmd1bWVudHMiLCBWOFByb3h5OjpTeW50
YXhFcnJvcik7CiAKLSAgICBYTUxIdHRwUmVxdWVzdCogeG1sSHR0cFJlcXVlc3QgPSBWOFByb3h5
Ojpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8WE1MSHR0cFJlcXVlc3Q+KFY4Q2xhc3NJbmRleDo6WE1M
SFRUUFJFUVVFU1QsIGFyZ3MuSG9sZGVyKCkpOworICAgIFhNTEh0dHBSZXF1ZXN0KiB4bWxIdHRw
UmVxdWVzdCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PFhNTEh0dHBSZXF1
ZXN0PihWOENsYXNzSW5kZXg6OlhNTEhUVFBSRVFVRVNULCBhcmdzLkhvbGRlcigpKTsKICAgICBF
eGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBTdHJpbmcgaGVhZGVyID0gdG9XZWJDb3JlU3RyaW5n
KGFyZ3NbMF0pOwogICAgIFN0cmluZyB2YWx1ZSA9IHRvV2ViQ29yZVN0cmluZyhhcmdzWzFdKTsK
QEAgLTQxNCw3ICs0MTQsNyBAQCBDQUxMQkFDS19GVU5DX0RFQ0woWE1MSHR0cFJlcXVlc3RHZXRS
ZXNwCiAgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPCAxKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJv
cigiTm90IGVub3VnaCBhcmd1bWVudHMiLCBWOFByb3h5OjpTeW50YXhFcnJvcik7CiAKLSAgICBY
TUxIdHRwUmVxdWVzdCogeG1sSHR0cFJlcXVlc3QgPSBWOFByb3h5Ojpjb252ZXJ0VG9OYXRpdmVP
YmplY3Q8WE1MSHR0cFJlcXVlc3Q+KFY4Q2xhc3NJbmRleDo6WE1MSFRUUFJFUVVFU1QsIGFyZ3Mu
SG9sZGVyKCkpOworICAgIFhNTEh0dHBSZXF1ZXN0KiB4bWxIdHRwUmVxdWVzdCA9IFY4RE9NV3Jh
cHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PFhNTEh0dHBSZXF1ZXN0PihWOENsYXNzSW5kZXg6
OlhNTEhUVFBSRVFVRVNULCBhcmdzLkhvbGRlcigpKTsKICAgICBFeGNlcHRpb25Db2RlIGVjID0g
MDsKICAgICBTdHJpbmcgaGVhZGVyID0gdG9XZWJDb3JlU3RyaW5nKGFyZ3NbMF0pOwogICAgIFN0
cmluZyByZXN1bHQgPSB4bWxIdHRwUmVxdWVzdC0+Z2V0UmVzcG9uc2VIZWFkZXIoaGVhZGVyLCBl
Yyk7CkBAIC00MjksNyArNDI5LDcgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKFhNTEh0dHBSZXF1ZXN0
T3ZlcnJpZAogICAgIGlmIChhcmdzLkxlbmd0aCgpIDwgMSkKICAgICAgICAgcmV0dXJuIHRocm93
RXJyb3IoIk5vdCBlbm91Z2ggYXJndW1lbnRzIiwgVjhQcm94eTo6U3ludGF4RXJyb3IpOwogCi0g
ICAgWE1MSHR0cFJlcXVlc3QqIHhtbEh0dHBSZXF1ZXN0ID0gVjhQcm94eTo6Y29udmVydFRvTmF0
aXZlT2JqZWN0PFhNTEh0dHBSZXF1ZXN0PihWOENsYXNzSW5kZXg6OlhNTEhUVFBSRVFVRVNULCBh
cmdzLkhvbGRlcigpKTsKKyAgICBYTUxIdHRwUmVxdWVzdCogeG1sSHR0cFJlcXVlc3QgPSBWOERP
TVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxYTUxIdHRwUmVxdWVzdD4oVjhDbGFzc0lu
ZGV4OjpYTUxIVFRQUkVRVUVTVCwgYXJncy5Ib2xkZXIoKSk7CiAgICAgU3RyaW5nIHZhbHVlID0g
dG9XZWJDb3JlU3RyaW5nKGFyZ3NbMF0pOwogICAgIHhtbEh0dHBSZXF1ZXN0LT5vdmVycmlkZU1p
bWVUeXBlKHZhbHVlKTsKICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwpJbmRleDogV2ViQ29y
ZS9iaW5kaW5ncy92OC9jdXN0b20vVjhYTUxIdHRwUmVxdWVzdFVwbG9hZEN1c3RvbS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhYTUxIdHRwUmVxdWVzdFVw
bG9hZEN1c3RvbS5jcHAJKHJldmlzaW9uIDQ1NjUwKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9j
dXN0b20vVjhYTUxIdHRwUmVxdWVzdFVwbG9hZEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ2LDcgKzQ2LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogQUNDRVNTT1JfR0VUVEVSKFhNTEh0
dHBSZXF1ZXN0VXBsb2FkT25hYm9ydCkKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5YTUxIdHRwUmVx
dWVzdFVwbG9hZC5vbmFib3J0Ll9nZXQiKTsKLSAgICBYTUxIdHRwUmVxdWVzdFVwbG9hZCogeG1s
SHR0cFJlcXVlc3RVcGxvYWQgPSBWOFByb3h5Ojpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8WE1MSHR0
cFJlcXVlc3RVcGxvYWQ+KFY4Q2xhc3NJbmRleDo6WE1MSFRUUFJFUVVFU1RVUExPQUQsIGluZm8u
SG9sZGVyKCkpOworICAgIFhNTEh0dHBSZXF1ZXN0VXBsb2FkKiB4bWxIdHRwUmVxdWVzdFVwbG9h
ZCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PFhNTEh0dHBSZXF1ZXN0VXBs
b2FkPihWOENsYXNzSW5kZXg6OlhNTEhUVFBSRVFVRVNUVVBMT0FELCBpbmZvLkhvbGRlcigpKTsK
ICAgICBpZiAoeG1sSHR0cFJlcXVlc3RVcGxvYWQtPm9uYWJvcnQoKSkgewogICAgICAgICBWOE9i
amVjdEV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyID0gc3RhdGljX2Nhc3Q8VjhPYmplY3RFdmVudExp
c3RlbmVyKj4oeG1sSHR0cFJlcXVlc3RVcGxvYWQtPm9uYWJvcnQoKSk7CiAgICAgICAgIHY4OjpM
b2NhbDx2ODo6T2JqZWN0PiB2OExpc3RlbmVyID0gbGlzdGVuZXItPmdldExpc3RlbmVyT2JqZWN0
KCk7CkBAIC01OCw3ICs1OCw3IEBAIEFDQ0VTU09SX0dFVFRFUihYTUxIdHRwUmVxdWVzdFVwbG9h
ZE9uYWIKIEFDQ0VTU09SX1NFVFRFUihYTUxIdHRwUmVxdWVzdFVwbG9hZE9uYWJvcnQpCiB7CiAg
ICAgSU5DX1NUQVRTKCJET00uWE1MSHR0cFJlcXVlc3RVcGxvYWQub25hYm9ydC5fc2V0Iik7Ci0g
ICAgWE1MSHR0cFJlcXVlc3RVcGxvYWQqIHhtbEh0dHBSZXF1ZXN0VXBsb2FkID0gVjhQcm94eTo6
Y29udmVydFRvTmF0aXZlT2JqZWN0PFhNTEh0dHBSZXF1ZXN0VXBsb2FkPihWOENsYXNzSW5kZXg6
OlhNTEhUVFBSRVFVRVNUVVBMT0FELCBpbmZvLkhvbGRlcigpKTsKKyAgICBYTUxIdHRwUmVxdWVz
dFVwbG9hZCogeG1sSHR0cFJlcXVlc3RVcGxvYWQgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05h
dGl2ZU9iamVjdDxYTUxIdHRwUmVxdWVzdFVwbG9hZD4oVjhDbGFzc0luZGV4OjpYTUxIVFRQUkVR
VUVTVFVQTE9BRCwgaW5mby5Ib2xkZXIoKSk7CiAgICAgaWYgKHZhbHVlLT5Jc051bGwoKSkgewog
ICAgICAgICBpZiAoeG1sSHR0cFJlcXVlc3RVcGxvYWQtPm9uYWJvcnQoKSkgewogICAgICAgICAg
ICAgVjhPYmplY3RFdmVudExpc3RlbmVyKiBsaXN0ZW5lciA9IHN0YXRpY19jYXN0PFY4T2JqZWN0
RXZlbnRMaXN0ZW5lcio+KHhtbEh0dHBSZXF1ZXN0VXBsb2FkLT5vbmFib3J0KCkpOwpAQCAtODUs
NyArODUsNyBAQCBBQ0NFU1NPUl9TRVRURVIoWE1MSHR0cFJlcXVlc3RVcGxvYWRPbmFiCiBBQ0NF
U1NPUl9HRVRURVIoWE1MSHR0cFJlcXVlc3RVcGxvYWRPbmVycm9yKQogewogICAgIElOQ19TVEFU
UygiRE9NLlhNTEh0dHBSZXF1ZXN0VXBsb2FkLm9uZXJyb3IuX2dldCIpOwotICAgIFhNTEh0dHBS
ZXF1ZXN0VXBsb2FkKiB4bWxIdHRwUmVxdWVzdFVwbG9hZCA9IFY4UHJveHk6OmNvbnZlcnRUb05h
dGl2ZU9iamVjdDxYTUxIdHRwUmVxdWVzdFVwbG9hZD4oVjhDbGFzc0luZGV4OjpYTUxIVFRQUkVR
VUVTVFVQTE9BRCwgaW5mby5Ib2xkZXIoKSk7CisgICAgWE1MSHR0cFJlcXVlc3RVcGxvYWQqIHht
bEh0dHBSZXF1ZXN0VXBsb2FkID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8
WE1MSHR0cFJlcXVlc3RVcGxvYWQ+KFY4Q2xhc3NJbmRleDo6WE1MSFRUUFJFUVVFU1RVUExPQUQs
IGluZm8uSG9sZGVyKCkpOwogICAgIGlmICh4bWxIdHRwUmVxdWVzdFVwbG9hZC0+b25lcnJvcigp
KSB7CiAgICAgICAgIFY4T2JqZWN0RXZlbnRMaXN0ZW5lciogbGlzdGVuZXIgPSBzdGF0aWNfY2Fz
dDxWOE9iamVjdEV2ZW50TGlzdGVuZXIqPih4bWxIdHRwUmVxdWVzdFVwbG9hZC0+b25lcnJvcigp
KTsKICAgICAgICAgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IHY4TGlzdGVuZXIgPSBsaXN0ZW5lci0+
Z2V0TGlzdGVuZXJPYmplY3QoKTsKQEAgLTk3LDcgKzk3LDcgQEAgQUNDRVNTT1JfR0VUVEVSKFhN
TEh0dHBSZXF1ZXN0VXBsb2FkT25lcgogQUNDRVNTT1JfU0VUVEVSKFhNTEh0dHBSZXF1ZXN0VXBs
b2FkT25lcnJvcikKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5YTUxIdHRwUmVxdWVzdFVwbG9hZC5v
bmVycm9yLl9zZXQiKTsKLSAgICBYTUxIdHRwUmVxdWVzdFVwbG9hZCogeG1sSHR0cFJlcXVlc3RV
cGxvYWQgPSBWOFByb3h5Ojpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8WE1MSHR0cFJlcXVlc3RVcGxv
YWQ+KFY4Q2xhc3NJbmRleDo6WE1MSFRUUFJFUVVFU1RVUExPQUQsIGluZm8uSG9sZGVyKCkpOwor
ICAgIFhNTEh0dHBSZXF1ZXN0VXBsb2FkKiB4bWxIdHRwUmVxdWVzdFVwbG9hZCA9IFY4RE9NV3Jh
cHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PFhNTEh0dHBSZXF1ZXN0VXBsb2FkPihWOENsYXNz
SW5kZXg6OlhNTEhUVFBSRVFVRVNUVVBMT0FELCBpbmZvLkhvbGRlcigpKTsKICAgICBpZiAodmFs
dWUtPklzTnVsbCgpKSB7CiAgICAgICAgIGlmICh4bWxIdHRwUmVxdWVzdFVwbG9hZC0+b25lcnJv
cigpKSB7CiAgICAgICAgICAgICBWOE9iamVjdEV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyID0gc3Rh
dGljX2Nhc3Q8VjhPYmplY3RFdmVudExpc3RlbmVyKj4oeG1sSHR0cFJlcXVlc3RVcGxvYWQtPm9u
ZXJyb3IoKSk7CkBAIC0xMjQsNyArMTI0LDcgQEAgQUNDRVNTT1JfU0VUVEVSKFhNTEh0dHBSZXF1
ZXN0VXBsb2FkT25lcgogQUNDRVNTT1JfR0VUVEVSKFhNTEh0dHBSZXF1ZXN0VXBsb2FkT25sb2Fk
KQogewogICAgIElOQ19TVEFUUygiRE9NLlhNTEh0dHBSZXF1ZXN0VXBsb2FkLm9ubG9hZC5fZ2V0
Iik7Ci0gICAgWE1MSHR0cFJlcXVlc3RVcGxvYWQqIHhtbEh0dHBSZXF1ZXN0VXBsb2FkID0gVjhQ
cm94eTo6Y29udmVydFRvTmF0aXZlT2JqZWN0PFhNTEh0dHBSZXF1ZXN0VXBsb2FkPihWOENsYXNz
SW5kZXg6OlhNTEhUVFBSRVFVRVNUVVBMT0FELCBpbmZvLkhvbGRlcigpKTsKKyAgICBYTUxIdHRw
UmVxdWVzdFVwbG9hZCogeG1sSHR0cFJlcXVlc3RVcGxvYWQgPSBWOERPTVdyYXBwZXI6OmNvbnZl
cnRUb05hdGl2ZU9iamVjdDxYTUxIdHRwUmVxdWVzdFVwbG9hZD4oVjhDbGFzc0luZGV4OjpYTUxI
VFRQUkVRVUVTVFVQTE9BRCwgaW5mby5Ib2xkZXIoKSk7CiAgICAgaWYgKHhtbEh0dHBSZXF1ZXN0
VXBsb2FkLT5vbmxvYWQoKSkgewogICAgICAgICBWOE9iamVjdEV2ZW50TGlzdGVuZXIqIGxpc3Rl
bmVyID0gc3RhdGljX2Nhc3Q8VjhPYmplY3RFdmVudExpc3RlbmVyKj4oeG1sSHR0cFJlcXVlc3RV
cGxvYWQtPm9ubG9hZCgpKTsKICAgICAgICAgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IHY4TGlzdGVu
ZXIgPSBsaXN0ZW5lci0+Z2V0TGlzdGVuZXJPYmplY3QoKTsKQEAgLTEzNiw3ICsxMzYsNyBAQCBB
Q0NFU1NPUl9HRVRURVIoWE1MSHR0cFJlcXVlc3RVcGxvYWRPbmxvCiBBQ0NFU1NPUl9TRVRURVIo
WE1MSHR0cFJlcXVlc3RVcGxvYWRPbmxvYWQpCiB7CiAgICAgSU5DX1NUQVRTKCJET00uWE1MSHR0
cFJlcXVlc3RVcGxvYWQub25sb2FkLl9zZXQiKTsKLSAgICBYTUxIdHRwUmVxdWVzdFVwbG9hZCog
eG1sSHR0cFJlcXVlc3RVcGxvYWQgPSBWOFByb3h5Ojpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8WE1M
SHR0cFJlcXVlc3RVcGxvYWQ+KFY4Q2xhc3NJbmRleDo6WE1MSFRUUFJFUVVFU1RVUExPQUQsIGlu
Zm8uSG9sZGVyKCkpOworICAgIFhNTEh0dHBSZXF1ZXN0VXBsb2FkKiB4bWxIdHRwUmVxdWVzdFVw
bG9hZCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PFhNTEh0dHBSZXF1ZXN0
VXBsb2FkPihWOENsYXNzSW5kZXg6OlhNTEhUVFBSRVFVRVNUVVBMT0FELCBpbmZvLkhvbGRlcigp
KTsKICAgICBpZiAodmFsdWUtPklzTnVsbCgpKSB7CiAgICAgICAgIGlmICh4bWxIdHRwUmVxdWVz
dFVwbG9hZC0+b25sb2FkKCkpIHsKICAgICAgICAgICAgIFY4T2JqZWN0RXZlbnRMaXN0ZW5lciog
bGlzdGVuZXIgPSBzdGF0aWNfY2FzdDxWOE9iamVjdEV2ZW50TGlzdGVuZXIqPih4bWxIdHRwUmVx
dWVzdFVwbG9hZC0+b25sb2FkKCkpOwpAQCAtMTYzLDcgKzE2Myw3IEBAIEFDQ0VTU09SX1NFVFRF
UihYTUxIdHRwUmVxdWVzdFVwbG9hZE9ubG8KIEFDQ0VTU09SX0dFVFRFUihYTUxIdHRwUmVxdWVz
dFVwbG9hZE9ubG9hZHN0YXJ0KQogewogICAgIElOQ19TVEFUUygiRE9NLlhNTEh0dHBSZXF1ZXN0
VXBsb2FkLm9ubG9hZHN0YXJ0Ll9nZXQiKTsKLSAgICBYTUxIdHRwUmVxdWVzdFVwbG9hZCogeG1s
SHR0cFJlcXVlc3RVcGxvYWQgPSBWOFByb3h5Ojpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8WE1MSHR0
cFJlcXVlc3RVcGxvYWQ+KFY4Q2xhc3NJbmRleDo6WE1MSFRUUFJFUVVFU1RVUExPQUQsIGluZm8u
SG9sZGVyKCkpOworICAgIFhNTEh0dHBSZXF1ZXN0VXBsb2FkKiB4bWxIdHRwUmVxdWVzdFVwbG9h
ZCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PFhNTEh0dHBSZXF1ZXN0VXBs
b2FkPihWOENsYXNzSW5kZXg6OlhNTEhUVFBSRVFVRVNUVVBMT0FELCBpbmZvLkhvbGRlcigpKTsK
ICAgICBpZiAoeG1sSHR0cFJlcXVlc3RVcGxvYWQtPm9ubG9hZHN0YXJ0KCkpIHsKICAgICAgICAg
VjhPYmplY3RFdmVudExpc3RlbmVyKiBsaXN0ZW5lciA9IHN0YXRpY19jYXN0PFY4T2JqZWN0RXZl
bnRMaXN0ZW5lcio+KHhtbEh0dHBSZXF1ZXN0VXBsb2FkLT5vbmxvYWRzdGFydCgpKTsKICAgICAg
ICAgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IHY4TGlzdGVuZXIgPSBsaXN0ZW5lci0+Z2V0TGlzdGVu
ZXJPYmplY3QoKTsKQEAgLTE3NSw3ICsxNzUsNyBAQCBBQ0NFU1NPUl9HRVRURVIoWE1MSHR0cFJl
cXVlc3RVcGxvYWRPbmxvCiBBQ0NFU1NPUl9TRVRURVIoWE1MSHR0cFJlcXVlc3RVcGxvYWRPbmxv
YWRzdGFydCkKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5YTUxIdHRwUmVxdWVzdFVwbG9hZC5vbmxv
YWRzdGFydC5fc2V0Iik7Ci0gICAgWE1MSHR0cFJlcXVlc3RVcGxvYWQqIHhtbEh0dHBSZXF1ZXN0
VXBsb2FkID0gVjhQcm94eTo6Y29udmVydFRvTmF0aXZlT2JqZWN0PFhNTEh0dHBSZXF1ZXN0VXBs
b2FkPihWOENsYXNzSW5kZXg6OlhNTEhUVFBSRVFVRVNUVVBMT0FELCBpbmZvLkhvbGRlcigpKTsK
KyAgICBYTUxIdHRwUmVxdWVzdFVwbG9hZCogeG1sSHR0cFJlcXVlc3RVcGxvYWQgPSBWOERPTVdy
YXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxYTUxIdHRwUmVxdWVzdFVwbG9hZD4oVjhDbGFz
c0luZGV4OjpYTUxIVFRQUkVRVUVTVFVQTE9BRCwgaW5mby5Ib2xkZXIoKSk7CiAgICAgaWYgKHZh
bHVlLT5Jc051bGwoKSkgewogICAgICAgICBpZiAoeG1sSHR0cFJlcXVlc3RVcGxvYWQtPm9ubG9h
ZHN0YXJ0KCkpIHsKICAgICAgICAgICAgIFY4T2JqZWN0RXZlbnRMaXN0ZW5lciogbGlzdGVuZXIg
PSBzdGF0aWNfY2FzdDxWOE9iamVjdEV2ZW50TGlzdGVuZXIqPih4bWxIdHRwUmVxdWVzdFVwbG9h
ZC0+b25sb2Fkc3RhcnQoKSk7CkBAIC0yMDIsNyArMjAyLDcgQEAgQUNDRVNTT1JfU0VUVEVSKFhN
TEh0dHBSZXF1ZXN0VXBsb2FkT25sbwogQUNDRVNTT1JfR0VUVEVSKFhNTEh0dHBSZXF1ZXN0VXBs
b2FkT25wcm9ncmVzcykKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5YTUxIdHRwUmVxdWVzdFVwbG9h
ZC5vbnByb2dyZXNzLl9nZXQiKTsKLSAgICBYTUxIdHRwUmVxdWVzdFVwbG9hZCogeG1sSHR0cFJl
cXVlc3RVcGxvYWQgPSBWOFByb3h5Ojpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8WE1MSHR0cFJlcXVl
c3RVcGxvYWQ+KFY4Q2xhc3NJbmRleDo6WE1MSFRUUFJFUVVFU1RVUExPQUQsIGluZm8uSG9sZGVy
KCkpOworICAgIFhNTEh0dHBSZXF1ZXN0VXBsb2FkKiB4bWxIdHRwUmVxdWVzdFVwbG9hZCA9IFY4
RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PFhNTEh0dHBSZXF1ZXN0VXBsb2FkPihW
OENsYXNzSW5kZXg6OlhNTEhUVFBSRVFVRVNUVVBMT0FELCBpbmZvLkhvbGRlcigpKTsKICAgICBp
ZiAoeG1sSHR0cFJlcXVlc3RVcGxvYWQtPm9ucHJvZ3Jlc3MoKSkgewogICAgICAgICBWOE9iamVj
dEV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyID0gc3RhdGljX2Nhc3Q8VjhPYmplY3RFdmVudExpc3Rl
bmVyKj4oeG1sSHR0cFJlcXVlc3RVcGxvYWQtPm9ucHJvZ3Jlc3MoKSk7CiAgICAgICAgIHY4OjpM
b2NhbDx2ODo6T2JqZWN0PiB2OExpc3RlbmVyID0gbGlzdGVuZXItPmdldExpc3RlbmVyT2JqZWN0
KCk7CkBAIC0yMTQsNyArMjE0LDcgQEAgQUNDRVNTT1JfR0VUVEVSKFhNTEh0dHBSZXF1ZXN0VXBs
b2FkT25wcgogQUNDRVNTT1JfU0VUVEVSKFhNTEh0dHBSZXF1ZXN0VXBsb2FkT25wcm9ncmVzcykK
IHsKICAgICBJTkNfU1RBVFMoIkRPTS5YTUxIdHRwUmVxdWVzdFVwbG9hZC5vbnByb2dyZXNzLl9z
ZXQiKTsKLSAgICBYTUxIdHRwUmVxdWVzdFVwbG9hZCogeG1sSHR0cFJlcXVlc3RVcGxvYWQgPSBW
OFByb3h5Ojpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8WE1MSHR0cFJlcXVlc3RVcGxvYWQ+KFY4Q2xh
c3NJbmRleDo6WE1MSFRUUFJFUVVFU1RVUExPQUQsIGluZm8uSG9sZGVyKCkpOworICAgIFhNTEh0
dHBSZXF1ZXN0VXBsb2FkKiB4bWxIdHRwUmVxdWVzdFVwbG9hZCA9IFY4RE9NV3JhcHBlcjo6Y29u
dmVydFRvTmF0aXZlT2JqZWN0PFhNTEh0dHBSZXF1ZXN0VXBsb2FkPihWOENsYXNzSW5kZXg6OlhN
TEhUVFBSRVFVRVNUVVBMT0FELCBpbmZvLkhvbGRlcigpKTsKICAgICBpZiAodmFsdWUtPklzTnVs
bCgpKSB7CiAgICAgICAgIGlmICh4bWxIdHRwUmVxdWVzdFVwbG9hZC0+b25wcm9ncmVzcygpKSB7
CiAgICAgICAgICAgICBWOE9iamVjdEV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyID0gc3RhdGljX2Nh
c3Q8VjhPYmplY3RFdmVudExpc3RlbmVyKj4oeG1sSHR0cFJlcXVlc3RVcGxvYWQtPm9ucHJvZ3Jl
c3MoKSk7CkBAIC0yNDEsNyArMjQxLDcgQEAgQUNDRVNTT1JfU0VUVEVSKFhNTEh0dHBSZXF1ZXN0
VXBsb2FkT25wcgogQ0FMTEJBQ0tfRlVOQ19ERUNMKFhNTEh0dHBSZXF1ZXN0VXBsb2FkQWRkRXZl
bnRMaXN0ZW5lcikKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5YTUxIdHRwUmVxdWVzdFVwbG9hZC5h
ZGRFdmVudExpc3RlbmVyKCkiKTsKLSAgICBYTUxIdHRwUmVxdWVzdFVwbG9hZCogeG1sSHR0cFJl
cXVlc3RVcGxvYWQgPSBWOFByb3h5Ojpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8WE1MSHR0cFJlcXVl
c3RVcGxvYWQ+KFY4Q2xhc3NJbmRleDo6WE1MSFRUUFJFUVVFU1RVUExPQUQsIGFyZ3MuSG9sZGVy
KCkpOworICAgIFhNTEh0dHBSZXF1ZXN0VXBsb2FkKiB4bWxIdHRwUmVxdWVzdFVwbG9hZCA9IFY4
RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PFhNTEh0dHBSZXF1ZXN0VXBsb2FkPihW
OENsYXNzSW5kZXg6OlhNTEhUVFBSRVFVRVNUVVBMT0FELCBhcmdzLkhvbGRlcigpKTsKIAogICAg
IFhNTEh0dHBSZXF1ZXN0KiB4bWxIdHRwUmVxdWVzdCA9IHhtbEh0dHBSZXF1ZXN0VXBsb2FkLT5h
c3NvY2lhdGVkWE1MSHR0cFJlcXVlc3QoKTsKICAgICBWOFByb3h5KiBwcm94eSA9IFY4UHJveHk6
OnJldHJpZXZlKHhtbEh0dHBSZXF1ZXN0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOwpAQCAt
MjYyLDcgKzI2Miw3IEBAIENBTExCQUNLX0ZVTkNfREVDTChYTUxIdHRwUmVxdWVzdFVwbG9hZEEK
IENBTExCQUNLX0ZVTkNfREVDTChYTUxIdHRwUmVxdWVzdFVwbG9hZFJlbW92ZUV2ZW50TGlzdGVu
ZXIpCiB7CiAgICAgSU5DX1NUQVRTKCJET00uWE1MSHR0cFJlcXVlc3RVcGxvYWQucmVtb3ZlRXZl
bnRMaXN0ZW5lcigpIik7Ci0gICAgWE1MSHR0cFJlcXVlc3RVcGxvYWQqIHhtbEh0dHBSZXF1ZXN0
VXBsb2FkID0gVjhQcm94eTo6Y29udmVydFRvTmF0aXZlT2JqZWN0PFhNTEh0dHBSZXF1ZXN0VXBs
b2FkPihWOENsYXNzSW5kZXg6OlhNTEhUVFBSRVFVRVNUVVBMT0FELCBhcmdzLkhvbGRlcigpKTsK
KyAgICBYTUxIdHRwUmVxdWVzdFVwbG9hZCogeG1sSHR0cFJlcXVlc3RVcGxvYWQgPSBWOERPTVdy
YXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxYTUxIdHRwUmVxdWVzdFVwbG9hZD4oVjhDbGFz
c0luZGV4OjpYTUxIVFRQUkVRVUVTVFVQTE9BRCwgYXJncy5Ib2xkZXIoKSk7CiAKICAgICBYTUxI
dHRwUmVxdWVzdCogeG1sSHR0cFJlcXVlc3QgPSB4bWxIdHRwUmVxdWVzdFVwbG9hZC0+YXNzb2Np
YXRlZFhNTEh0dHBSZXF1ZXN0KCk7CiAgICAgVjhQcm94eSogcHJveHkgPSBWOFByb3h5OjpyZXRy
aWV2ZSh4bWxIdHRwUmVxdWVzdC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKSW5kZXg6IFdl
YkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4WFNMVFByb2Nlc3NvckN1c3RvbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhYU0xUUHJvY2Vzc29yQ3VzdG9t
LmNwcAkocmV2aXNpb24gNDU2NTApCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFhT
TFRQcm9jZXNzb3JDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OCw5ICs1OCw5IEBAIENB
TExCQUNLX0ZVTkNfREVDTChYU0xUUHJvY2Vzc29ySW1wb3J0U3QKICAgICBpZiAoIVY4Tm9kZTo6
SGFzSW5zdGFuY2UoYXJnc1swXSkpCiAgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CiAK
LSAgICBYU0xUUHJvY2Vzc29yKiBpbXAgPSBWOFByb3h5Ojpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8
WFNMVFByb2Nlc3Nvcj4oVjhDbGFzc0luZGV4OjpYU0xUUFJPQ0VTU09SLCBhcmdzLkhvbGRlcigp
KTsKKyAgICBYU0xUUHJvY2Vzc29yKiBpbXAgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2
ZU9iamVjdDxYU0xUUHJvY2Vzc29yPihWOENsYXNzSW5kZXg6OlhTTFRQUk9DRVNTT1IsIGFyZ3Mu
SG9sZGVyKCkpOwogCi0gICAgTm9kZSogbm9kZSA9IFY4UHJveHk6OmNvbnZlcnRET01XcmFwcGVy
VG9Ob2RlPE5vZGU+KGFyZ3NbMF0pOworICAgIE5vZGUqIG5vZGUgPSBWOERPTVdyYXBwZXI6OmNv
bnZlcnRET01XcmFwcGVyVG9Ob2RlPE5vZGU+KGFyZ3NbMF0pOwogICAgIGltcC0+aW1wb3J0U3R5
bGVzaGVldChub2RlKTsKICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwogfQpAQCAtNzIsMTIg
KzcyLDEyIEBAIENBTExCQUNLX0ZVTkNfREVDTChYU0xUUHJvY2Vzc29yVHJhbnNmb3IKICAgICBp
ZiAoIVY4Tm9kZTo6SGFzSW5zdGFuY2UoYXJnc1swXSkgfHwgIVY4RG9jdW1lbnQ6Okhhc0luc3Rh
bmNlKGFyZ3NbMV0pKQogICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwogCi0gICAgWFNM
VFByb2Nlc3NvciogaW1wID0gVjhQcm94eTo6Y29udmVydFRvTmF0aXZlT2JqZWN0PFhTTFRQcm9j
ZXNzb3I+KFY4Q2xhc3NJbmRleDo6WFNMVFBST0NFU1NPUiwgYXJncy5Ib2xkZXIoKSk7CisgICAg
WFNMVFByb2Nlc3NvciogaW1wID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8
WFNMVFByb2Nlc3Nvcj4oVjhDbGFzc0luZGV4OjpYU0xUUFJPQ0VTU09SLCBhcmdzLkhvbGRlcigp
KTsKIAotICAgIE5vZGUqIHNvdXJjZSA9IFY4UHJveHk6OmNvbnZlcnRET01XcmFwcGVyVG9Ob2Rl
PE5vZGU+KGFyZ3NbMF0pOwotICAgIERvY3VtZW50KiBvd25lciA9IFY4UHJveHk6OmNvbnZlcnRE
T01XcmFwcGVyVG9Ob2RlPERvY3VtZW50PihhcmdzWzFdKTsKKyAgICBOb2RlKiBzb3VyY2UgPSBW
OERPTVdyYXBwZXI6OmNvbnZlcnRET01XcmFwcGVyVG9Ob2RlPE5vZGU+KGFyZ3NbMF0pOworICAg
IERvY3VtZW50KiBvd25lciA9IFY4RE9NV3JhcHBlcjo6Y29udmVydERPTVdyYXBwZXJUb05vZGU8
RG9jdW1lbnQ+KGFyZ3NbMV0pOwogICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiByZXN1bHQg
PSBpbXAtPnRyYW5zZm9ybVRvRnJhZ21lbnQoc291cmNlLCBvd25lcik7Ci0gICAgcmV0dXJuIFY4
UHJveHk6OmNvbnZlcnROb2RlVG9WOE9iamVjdChyZXN1bHQuZ2V0KCkpOworICAgIHJldHVybiBW
OERPTVdyYXBwZXI6OmNvbnZlcnROb2RlVG9WOE9iamVjdChyZXN1bHQuZ2V0KCkpOwogfQogCiAK
QEAgLTg4LDkgKzg4LDkgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKFhTTFRQcm9jZXNzb3JUcmFuc2Zv
cgogICAgIGlmICghVjhOb2RlOjpIYXNJbnN0YW5jZShhcmdzWzBdKSkKICAgICAgICAgcmV0dXJu
IHY4OjpVbmRlZmluZWQoKTsKIAotICAgIFhTTFRQcm9jZXNzb3IqIGltcCA9IFY4UHJveHk6OmNv
bnZlcnRUb05hdGl2ZU9iamVjdDxYU0xUUHJvY2Vzc29yPihWOENsYXNzSW5kZXg6OlhTTFRQUk9D
RVNTT1IsIGFyZ3MuSG9sZGVyKCkpOworICAgIFhTTFRQcm9jZXNzb3IqIGltcCA9IFY4RE9NV3Jh
cHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PFhTTFRQcm9jZXNzb3I+KFY4Q2xhc3NJbmRleDo6
WFNMVFBST0NFU1NPUiwgYXJncy5Ib2xkZXIoKSk7CiAKLSAgICBOb2RlKiBzb3VyY2UgPSBWOFBy
b3h5Ojpjb252ZXJ0RE9NV3JhcHBlclRvTm9kZTxOb2RlPihhcmdzWzBdKTsKKyAgICBOb2RlKiBz
b3VyY2UgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRET01XcmFwcGVyVG9Ob2RlPE5vZGU+KGFyZ3Nb
MF0pOwogICAgIGlmICghc291cmNlKQogICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwog
CkBAIC05OCw3ICs5OCw3IEBAIENBTExCQUNLX0ZVTkNfREVDTChYU0xUUHJvY2Vzc29yVHJhbnNm
b3IKICAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKIAot
ICAgIHJldHVybiBWOFByb3h5Ojpjb252ZXJ0Tm9kZVRvVjhPYmplY3QocmVzdWx0LmdldCgpKTsK
KyAgICByZXR1cm4gVjhET01XcmFwcGVyOjpjb252ZXJ0Tm9kZVRvVjhPYmplY3QocmVzdWx0Lmdl
dCgpKTsKIH0KIAogCkBAIC0xMDgsNyArMTA4LDcgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKFhTTFRQ
cm9jZXNzb3JTZXRQYXJhbQogICAgIGlmIChpc1VuZGVmaW5lZE9yTnVsbChhcmdzWzFdKSB8fCBp
c1VuZGVmaW5lZE9yTnVsbChhcmdzWzJdKSkKICAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQo
KTsKIAotICAgIFhTTFRQcm9jZXNzb3IqIGltcCA9IFY4UHJveHk6OmNvbnZlcnRUb05hdGl2ZU9i
amVjdDxYU0xUUHJvY2Vzc29yPihWOENsYXNzSW5kZXg6OlhTTFRQUk9DRVNTT1IsIGFyZ3MuSG9s
ZGVyKCkpOworICAgIFhTTFRQcm9jZXNzb3IqIGltcCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRv
TmF0aXZlT2JqZWN0PFhTTFRQcm9jZXNzb3I+KFY4Q2xhc3NJbmRleDo6WFNMVFBST0NFU1NPUiwg
YXJncy5Ib2xkZXIoKSk7CiAKICAgICBTdHJpbmcgbmFtZXNwYWNlVVJJID0gdG9XZWJDb3JlU3Ry
aW5nKGFyZ3NbMF0pOwogICAgIFN0cmluZyBsb2NhbE5hbWUgPSB0b1dlYkNvcmVTdHJpbmcoYXJn
c1sxXSk7CkBAIC0xMjUsNyArMTI1LDcgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKFhTTFRQcm9jZXNz
b3JHZXRQYXJhbQogICAgIGlmIChpc1VuZGVmaW5lZE9yTnVsbChhcmdzWzFdKSkKICAgICAgICAg
cmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKIAotICAgIFhTTFRQcm9jZXNzb3IqIGltcCA9IFY4UHJv
eHk6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxYU0xUUHJvY2Vzc29yPihWOENsYXNzSW5kZXg6OlhT
TFRQUk9DRVNTT1IsIGFyZ3MuSG9sZGVyKCkpOworICAgIFhTTFRQcm9jZXNzb3IqIGltcCA9IFY4
RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PFhTTFRQcm9jZXNzb3I+KFY4Q2xhc3NJ
bmRleDo6WFNMVFBST0NFU1NPUiwgYXJncy5Ib2xkZXIoKSk7CiAKICAgICBTdHJpbmcgbmFtZXNw
YWNlVVJJID0gdG9XZWJDb3JlU3RyaW5nKGFyZ3NbMF0pOwogICAgIFN0cmluZyBsb2NhbE5hbWUg
PSB0b1dlYkNvcmVTdHJpbmcoYXJnc1sxXSk7CkBAIC0xNDIsNyArMTQyLDcgQEAgQ0FMTEJBQ0tf
RlVOQ19ERUNMKFhTTFRQcm9jZXNzb3JSZW1vdmVQYQogICAgIGlmIChpc1VuZGVmaW5lZE9yTnVs
bChhcmdzWzFdKSkKICAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKIAotICAgIFhTTFRQ
cm9jZXNzb3IqIGltcCA9IFY4UHJveHk6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxYU0xUUHJvY2Vz
c29yPihWOENsYXNzSW5kZXg6OlhTTFRQUk9DRVNTT1IsIGFyZ3MuSG9sZGVyKCkpOworICAgIFhT
TFRQcm9jZXNzb3IqIGltcCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PFhT
TFRQcm9jZXNzb3I+KFY4Q2xhc3NJbmRleDo6WFNMVFBST0NFU1NPUiwgYXJncy5Ib2xkZXIoKSk7
CiAKICAgICBTdHJpbmcgbmFtZXNwYWNlVVJJID0gdG9XZWJDb3JlU3RyaW5nKGFyZ3NbMF0pOwog
ICAgIFN0cmluZyBsb2NhbE5hbWUgPSB0b1dlYkNvcmVTdHJpbmcoYXJnc1sxXSk7Cg==
</data>
<flag name="review"
          id="16928"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>