<?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>31217</bug_id>
          
          <creation_ts>2009-11-06 16:53:08 -0800</creation_ts>
          <short_desc>Optimize code size of V8 DOM bindings</short_desc>
          <delta_ts>2009-11-12 16:28:09 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</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>P3</priority>
          <bug_severity>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>31362</dependson>
    
    <dependson>31368</dependson>
    
    <dependson>31383</dependson>
    
    <dependson>31420</dependson>
    
    <dependson>31443</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jens Alfke">jens</reporter>
          <assigned_to name="Jens Alfke">jens</assigned_to>
          <cc>abarth</cc>
    
    <cc>dglazkov</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>161271</commentid>
    <comment_count>0</comment_count>
      <attachid>42675</attachid>
    <who name="Jens Alfke">jens</who>
    <bug_when>2009-11-06 16:53:08 -0800</bug_when>
    <thetext>Created attachment 42675
Description of changes to CodeGeneratorV8

The V8 DOM bindings (generated by CodeGeneratorV8.pm) are a surprisingly large amount of code. I haven&apos;t measured their total size (that would require some tricky parsing of the link map) but as a data point, compiling just those bindings with -Os instead of the usual -O3 (i.e. optimize for size, not speed) reduces the overall size of the Chrome binary for Mac by 1MB. That implies there&apos;s a very large amount of stuff being inlined.

1MB isn&apos;t huge in the grand scheme of things, but larger bindings reduce locality of reference and get in the way of the CPU caches. The code size is also significant on Android, where the ROM is of limited capacity.

Just changing the compiler flag reduces Dromaeo benchmark performance, though. So instead I looked at what constructs are generating the most machine code and tried to fix those, while also adding a few speed optimizations I found along the way. I made non-inlined equivalents of many of the utility methods the bindings call, and created some new functions for them to call instead of inlining common sequences of calls. I also made more of the class initialization table-driven.

The overall result is that I&apos;ve shrunk the code size by about 600k, with no significant effect on the Dromaeo benchmarks. (3 of the 4 core DOM scores went up by 1-4%, and one went down 2%.)

I&apos;ve attached a text document that describes the types of changes I made to the code generator.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161648</commentid>
    <comment_count>1</comment_count>
      <attachid>42770</attachid>
    <who name="Jens Alfke">jens</who>
    <bug_when>2009-11-09 11:03:08 -0800</bug_when>
    <thetext>Created attachment 42770
patch

Here&apos;s the patch. Please read the text document (attached) first, as it describes at a high level what I changed.

I think it might be best to do an in-person walkthrough review of at least CodeGeneratorV8.pm, since the changes are quite numerous and sometimes complex.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161665</commentid>
    <comment_count>2</comment_count>
    <who name="Jens Alfke">jens</who>
    <bug_when>2009-11-09 11:26:05 -0800</bug_when>
    <thetext>I&apos;ve put copies of the generated bindings, both with and without my
code-generator change, in my home dir on the Google corp network, at
/home/snej/V8Bindings/. Looking at the differences should help clear up what
the code-generator changes are doing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161699</commentid>
    <comment_count>3</comment_count>
      <attachid>42770</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-11-09 12:24:52 -0800</bug_when>
    <thetext>Comment on attachment 42770
patch

I haven&apos;t looked at the code yet, but there&apos;s no changelog.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161771</commentid>
    <comment_count>4</comment_count>
    <who name="Jens Alfke">jens</who>
    <bug_when>2009-11-09 13:48:14 -0800</bug_when>
    <thetext>Dimitri is already reviewing this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161773</commentid>
    <comment_count>5</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-11-09 13:51:59 -0800</bug_when>
    <thetext>Still needs a ChangeLog ;)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161781</commentid>
    <comment_count>6</comment_count>
      <attachid>42800</attachid>
    <who name="Jens Alfke">jens</who>
    <bug_when>2009-11-09 14:04:03 -0800</bug_when>
    <thetext>Created attachment 42800
patch 2

A few helper functions renamed to remove &quot;v8&quot; prefix at Dimitri&apos;s suggestion.
Added Changelog.

Note: dglazkov is reviewing this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>162511</commentid>
    <comment_count>7</comment_count>
      <attachid>42800</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-11-11 09:33:10 -0800</bug_when>
    <thetext>Comment on attachment 42800
patch 2

Ok, this is epic-sized. I see a bunch of smaller patches in it:

1) Converting v8::Undefied to empty -- awesome!
    I would be very careful about this. Returning empty vs. Undefined actually does matter in cases where the callback an interceptor.
    We even have a helper called notHandledByInterceptor to distinguish that case.

2) Introducing transferHiddenDependency -- great!

3) Optimizing exception case -- super-duper!

4) Optimizing &quot;Reflect&quot; case -- even better!

5) Deinlining

6) ...

Let&apos;s try to break them up into incremental chunks. This way, if something goes awry, we won&apos;t have to revert the whole thing, and we can observe perf/size changes more granularly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>163103</commentid>
    <comment_count>8</comment_count>
    <who name="Jens Alfke">jens</who>
    <bug_when>2009-11-12 16:24:44 -0800</bug_when>
    <thetext>This</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>163104</commentid>
    <comment_count>9</comment_count>
    <who name="Jens Alfke">jens</who>
    <bug_when>2009-11-12 16:28:09 -0800</bug_when>
    <thetext>Oops, sorry that got cut off.
This is now all checked in -- it was broken up into five patches/bugs at Dimitri&apos;s request. See the &quot;Depends on&quot; list above.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>42675</attachid>
            <date>2009-11-06 16:53:08 -0800</date>
            <delta_ts>2009-11-06 16:53:08 -0800</delta_ts>
            <desc>Description of changes to CodeGeneratorV8</desc>
            <filename>Optimizations.txt</filename>
            <type>text/plain</type>
            <size>7083</size>
            <attacher name="Jens Alfke">jens</attacher>
            
              <data encoding="base64">Q2hhbmdlcyBUbyBUaGUgVjgvRE9NIEJpbmRpbmdzCkplbnMgQWxma2UgLSA2IE5vdiAyMDA5CgpJ
J3ZlIG1hZGUgYSBudW1iZXIgb2YgY2hhbmdlcyB0byB0aGUgYmluZGluZyBjb2RlIGdlbmVyYXRv
ciAoQ29kZUdlbmVyYXRvclY4LnBtKSB0byByZWR1Y2UgdGhlIHNpemUgb2YgdGhlIGdlbmVyYXRl
ZCBjb2RlIGJ5IGFib3V0IDYwMGtieXRlcywgYW5kIHRvIHNvbWUgZGVncmVlIHRvIG1ha2UgaXQg
ZmFzdGVyLgoKClsxXSBOT04tSU5MSU5FIE1FVEhPRFMKClRoZSBtYWluIHJlYXNvbiB0aGUgRE9N
IGJpbmRpbmdzIGFyZSBzbyBodWdlIGlzIHRoYXQgbW9zdCBvZiB0aGUgZnVuY3Rpb24gY2FsbHMg
dGhleSBnZW5lcmF0ZSBhcmUgZXhwYW5kZWQgaW5saW5lLiBBIGxvdCBvZiB0aGVzZSBhcmUgVjhE
T01XcmFwcGVyIG1ldGhvZHMsIHN1Y2ggYXMgY29udmVydERPTVdyYXBwZXJUb05vZGUoKS4gSSd2
ZSBjcmVhdGVkIGVxdWl2YWxlbnQgZnVuY3Rpb25zIHRvIGEgbnVtYmVyIG9mIHRoZXNlLCB3aGlj
aCBhcmUgbm90IGlubGluZSwgYW5kIHB1dCB0aGVtIGluIFY4QmluZGluZ3MuaC4gRm9yIGV4YW1w
bGUsIGNvbnZlcnRET01XcmFwcGVyVG9Ob2RlKCkgaXMgcmVwbGFjZWQgYnkgdjhET01XcmFwcGVy
VG9Ob2RlLgoKU29tZSBvZiB0aGVzZSBuZXcgZnVuY3Rpb25zIGRpcmVjdGx5IHRha2UgdGhlIHY4
OjpBY2Nlc3NvckluZm8gYXMgYSBwYXJhbWV0ZXIsIHNvIHRoZSBnbHVlIGNvZGUgY2FuIHBhc3Mg
dGhhdCBkaXJlY3RseSBpbnN0ZWFkIG9mIGhhdmluZyB0byBjYWxsIEhvbGRlcigpIG9uIGl0LgoK
U29tZSBvZiB0aGVzZSBmdW5jdGlvbnMgdGhhdCBhcmUgb2Z0ZW4gY2FsbGVkIG9uIGFyZ3VtZW50
cyBjYW4gb3B0aW9uYWxseSB0YWtlIHRoZSBBcmd1bWVudHMgb2JqZWN0IGFuZCBhbiBpbmRleCBk
aXJlY3RseSwgc28gdGhhdCB0aGUgYXJndW1lbnQgYWNjZXNzIGNvZGUgaXNuJ3QgaW5saW5lZC4g
KFRoaXMgaXMgZWZmZWN0aXZlbHkgZnJlZSwgaXQncyBqdXN0IG1vdmluZyB0aGUgYWNjZXNzaW5n
IGNvZGUgZnJvbSBvbmUgcGxhY2UgdG8gYW5vdGhlciB3aXRob3V0IGdlbmVyYXRpbmcgYW55IGFk
ZGl0aW9uYWwgZnVuY3Rpb24gY2FsbHMuKSBFeGFtcGxlOgogICAgU3RyaW5nIHNlbGVjdG9ycyA9
IHRvV2ViQ29yZVN0cmluZyhhcmdzWzBdKTsKYmVjb21lczoKICAgIFN0cmluZyBzZWxlY3RvcnMg
PSB0b1dlYkNvcmVTdHJpbmcoYXJncywgMCk7CgoKWzJdIEFCU1RSQUNUSU5HIE9VVCBHRU5FUkFU
RUQgQ09ERQoKSW4gb3RoZXIgY2FzZXMgdGhlIGdlbmVyYXRvciB3YXMgd3JpdGluZyBvdXQgaW5s
aW5lZCBjb2RlIGRpcmVjdGx5LCB3aGljaCBJJ3ZlIHB1bGxlZCBvdXQgaW50byBmdW5jdGlvbiBj
YWxscy4gRm9yIGV4YW1wbGUsIHRvIHJldHVybiBhIEpTIGJvb2xlYW4gdmFsdWUgaXQgd291bGQg
ZW5kIGEgZnVuY3Rpb24gd2l0aAogICAgcmV0dXJuIHJlc3VsdCA/IHY4OjpUcnVlKCkgOiB2ODo6
RmFsc2UoKTsKTm93IGl0IHVzZXMKICAgIHJldHVybiB2OEJvb2xlYW4ocmVzdWx0KTsKICAgIApB
bm90aGVyIGV4YW1wbGUgaXMgdGhlIGNvZGUgdG8gc2V0IGFuIGV2ZW50IGxpc3RlbmVyIHByb3Bl
cnR5LiBUaGVyZSB1c2VkIHRvIGJlIDIzMSBzZXR0ZXJzIGNvbnRhaW5pbmcgY29kZSBsaWtlIHRo
aXM6CgogICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IHYgPSBWOERPTVdyYXBwZXI6OmdldEV2ZW50
TGlzdGVuZXIoaW1wLCB2YWx1ZSwgdHJ1ZSwgTGlzdGVuZXJGaW5kT3JDcmVhdGUpOwogICAgUmVm
UHRyPEV2ZW50TGlzdGVuZXI+IG9sZCA9IGltcC0+b25hYm9ydCgpOwogICAgVjhBYnN0cmFjdEV2
ZW50TGlzdGVuZXIqIG9sZExpc3RlbmVyID0gb2xkID8gVjhBYnN0cmFjdEV2ZW50TGlzdGVuZXI6
OmNhc3Qob2xkLmdldCgpKSA6IDA7CiAgICBpZiAob2xkTGlzdGVuZXIpIHsKICAgICAgdjg6Okxv
Y2FsPHY4OjpPYmplY3Q+IG9sZExpc3RlbmVyT2JqZWN0ID0gb2xkTGlzdGVuZXItPmdldEV4aXN0
aW5nTGlzdGVuZXJPYmplY3QoKTsKICAgICAgaWYgKCFvbGRMaXN0ZW5lck9iamVjdC5Jc0VtcHR5
KCkpCiAgICAgICAgcmVtb3ZlSGlkZGVuRGVwZW5kZW5jeShob2xkZXIsIG9sZExpc3RlbmVyT2Jq
ZWN0LCBWOEN1c3RvbTo6a05vZGVFdmVudExpc3RlbmVyQ2FjaGVJbmRleCk7CiAgICB9CiAgICBp
bXAtPnNldE9uYWJvcnQoV1RGOjpnZXRQdHIodikpOwogICAgaWYgKFdURjo6Z2V0UHRyKHYpKQog
ICAgICBjcmVhdGVIaWRkZW5EZXBlbmRlbmN5KGhvbGRlciwgdmFsdWUsIFY4Q3VzdG9tOjprTm9k
ZUV2ZW50TGlzdGVuZXJDYWNoZUluZGV4KTsKCkkgcHVsbGVkIHRoZSAnaGlkZGVuIGRlcGVuZGVu
Y3knIGNvZGUgb3V0IGludG8gYSBmdW5jdGlvbiwgc28gbm93IHRoZSBnZW5lcmF0ZWQgY29kZSBp
cyBqdXN0OgoKICAgIHRyYW5zZmVySGlkZGVuRGVwZW5kZW5jeShob2xkZXIsIGltcC0+b25hYm9y
dCgpLCB2YWx1ZSwgVjhDdXN0b206OmtET01XaW5kb3dFdmVudExpc3RlbmVyQ2FjaGVJbmRleCk7
CiAgICBpbXAtPnNldE9uYWJvcnQoVjhET01XcmFwcGVyOjpnZXRFdmVudExpc3RlbmVyKGltcCwg
dmFsdWUsIHRydWUsIExpc3RlbmVyRmluZE9yQ3JlYXRlKSk7CgoKWzNdIEVMRU1FTlQgUFJPUEVS
VFkgQUNDRVNTT1JTCgpUaGVyZSBhcmUgYSBodWdlIG51bWJlciBvZiBnZW5lcmF0ZWQgZnVuY3Rp
b25zIHRoYXQgZ2V0IGFuZCBzZXQgbmFtZWQgc3RyaW5nLXZhbHVlZCBwcm9wZXJ0aWVzIG9mIEVs
ZW1lbnQgc3ViY2xhc3Nlcy4gQWxsIG9mIHRoZXNlIGFyZSBuZWFybHkgaWRlbnRpY2FsLCBhbmQg
ZnVubmVsIGludG8gdGhlIG1ldGhvZHMgV2ViQ29yZTo6RWxlbWVudDo6Z2V0L3NldEF0dHJpYnV0
ZSgpLiBJIGFic3RyYWN0ZWQgdGhlbSBvdXQgaW50byBhIGhlbHBlciBmdW5jdGlvbiB2OEdldEVs
ZW1lbnRTdHJpbmdBdHRyKCkuCgpUaGUgY29kZSBmb3IgZ2V0dGluZyBIVE1MRWxlbWVudC5pZCB1
c2VkIHRvIGxvb2sgbGlrZToKICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gaG9sZGVyID0gaW5m
by5Ib2xkZXIoKTsKICAgIEhUTUxFbGVtZW50KiBpbXAgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRE
T01XcmFwcGVyVG9Ob2RlPEhUTUxFbGVtZW50Pihob2xkZXIpOwogICAgcmV0dXJuIHY4U3RyaW5n
KHRvU3RyaW5nKGltcC0+Z2V0QXR0cmlidXRlKEhUTUxOYW1lczo6aWRBdHRyKSkpOwoKTm93IGl0
J3M6CiAgICByZXR1cm4gdjhHZXRFbGVtZW50U3RyaW5nQXR0cihpbmZvLCBIVE1MTmFtZXM6Omlk
QXR0cik7CgpUaGVyZSBhcmUgYWJvdXQgMTgwIG9mIHRoZXNlLCBhbmQgaXQgbG9va3MgbGlrZSBh
Ym91dCAyMDAgbW9yZSBmdW5jdGlvbnMgY291bGQgYmUgY29udmVydGVkIHRvIHRoaXMgZm9ybSBi
eSBjaGFuZ2luZyB0aGUgIlJlZmxlY3QiIGF0dHJpYnV0ZSBpbiB0aGVpciBJREwgZGVjbGFyYXRp
b25zLgoKCls0XSBFUlJPUiBIQU5ETElORwoKSSBjaGFuZ2VkIHRoZSBjb250cm9sIGZsb3cgc28g
YW55IGdlbmVyYXRlZCBmdW5jdGlvbiBvbmx5IGNhbGxzIFY4UHJveHk6OnNldERPTUV4Y2VwdGlv
bigpIGF0IG1vc3Qgb25jZS4gRm9yIGV4YW1wbGUsIGhlcmUncyB3aGF0IG9uZSBmdW5jdGlvbiB1
c2VkIHRvIGxvb2sgbGlrZToKCiAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHJlbW92
ZUF0dHJpYnV0ZU5vZGVDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKSB7CiAgICAg
IElOQ19TVEFUUygiRE9NLkVsZW1lbnQucmVtb3ZlQXR0cmlidXRlTm9kZSIpOwogICAgICB2ODo6
SGFuZGxlPHY4OjpPYmplY3Q+IGhvbGRlciA9IGFyZ3MuSG9sZGVyKCk7CiAgICAgIEVsZW1lbnQq
IGltcCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydERPTVdyYXBwZXJUb05vZGU8RWxlbWVudD4oaG9s
ZGVyKTsKICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgIEF0dHIqIG9sZEF0dHIgPSBW
OEF0dHI6Okhhc0luc3RhbmNlKGFyZ3NbMF0pID8gVjhET01XcmFwcGVyOjpjb252ZXJ0RE9NV3Jh
cHBlclRvTm9kZTxBdHRyPih2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KGFyZ3NbMF0pKSA6
IDA7CiAgICAgIGlmIChVTkxJS0VMWSghb2xkQXR0cikpIHsKICAgICAgICBWOFByb3h5OjpzZXRE
T01FeGNlcHRpb24oVFlQRV9NSVNNQVRDSF9FUlIpOwogICAgICAgIHJldHVybiB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4oKTsKICAgICAgfQogICAgICBSZWZQdHI8QXR0cj4gcmVzdWx0ID0gaW1wLT5y
ZW1vdmVBdHRyaWJ1dGVOb2RlKG9sZEF0dHIsIGVjKTsKICAgICAgaWYgKFVOTElLRUxZKGVjKSkg
ewogICAgICAgICAgVjhQcm94eTo6c2V0RE9NRXhjZXB0aW9uKGVjKTsKICAgICAgICAgIHJldHVy
biB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsKICAgICAgfQogICAgICByZXR1cm4gVjhET01XcmFw
cGVyOjpjb252ZXJ0Tm9kZVRvVjhPYmplY3QocmVzdWx0LnJlbGVhc2UoKSk7CiAgICB9CgpJdCBu
b3cgbG9va3MgbGlrZToKCiAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHJlbW92ZUF0
dHJpYnV0ZU5vZGVDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKSB7CiAgICAgIElO
Q19TVEFUUygiRE9NLkVsZW1lbnQucmVtb3ZlQXR0cmlidXRlTm9kZSIpOwogICAgICB2ODo6SGFu
ZGxlPHY4OjpPYmplY3Q+IGhvbGRlciA9IGFyZ3MuSG9sZGVyKCk7CiAgICAgIEVsZW1lbnQqIGlt
cCA9IHY4RE9NV3JhcHBlclRvTm9kZTxFbGVtZW50Pihob2xkZXIpOwogICAgICBFeGNlcHRpb25D
b2RlIGVjID0gMDsKICAgICAgewogICAgICAgIEF0dHIqIG9sZEF0dHIgPSBWOEF0dHI6Okhhc0lu
c3RhbmNlKGFyZ3NbMF0pID8gdjhET01XcmFwcGVyVG9Ob2RlPEF0dHI+KHY4OjpIYW5kbGU8djg6
Ok9iamVjdD46OkNhc3QoYXJnc1swXSkpIDogMDsKICAgICAgICBpZiAoVU5MSUtFTFkoIW9sZEF0
dHIpKSB7CiAgICAgICAgICBlYyA9IFRZUEVfTUlTTUFUQ0hfRVJSOwogICAgICAgICAgZ290byBm
YWlsOwogICAgICAgIH0KICAgICAgICBSZWZQdHI8QXR0cj4gcmVzdWx0ID0gaW1wLT5yZW1vdmVB
dHRyaWJ1dGVOb2RlKG9sZEF0dHIsIGVjKTsKICAgICAgICBpZiAoVU5MSUtFTFkoZWMpKSBnb3Rv
IGZhaWw7CiAgICAgICAgcmV0dXJuIFY4RE9NV3JhcHBlcjo6Y29udmVydE5vZGVUb1Y4T2JqZWN0
KHJlc3VsdC5yZWxlYXNlKCkpOwogICAgICB9CiAgICBmYWlsOgogICAgICBWOFByb3h5OjpzZXRE
T01FeGNlcHRpb24oZWMpOwogICAgICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCk7CiAg
ICB9CgooVGhlIGV4dHJhIHBhaXIgb2YgYnJhY2VzIGFyZSB0byBlbnN1cmUgdGhhdCB0aGUgJ2dv
dG8nIGRvZXNuJ3QgaWxsZWdhbGx5IGp1bXAgdG8gYmV0d2VlbiBhIGNvbnN0cnVjdG9yIGFuZCBk
ZXN0cnVjdG9yLCBmb3IgZXhhbXBsZSBvZiB0aGUgUmVmUHRyIGluIHRoZSBhYm92ZSBmdW5jdGlv
bi4pCgoKWzVdIFVOTkVDRVNTQVJZIENBTExTCgpXaGVuIHJldHVybmluZyBmcm9tIGEgYmluZGlu
ZyB0aGF0IGhhcyBubyBKUyByZXR1cm4gdmFsdWUsIHRoZSBnZW5lcmF0ZWQgY29kZSB3b3VsZCBy
ZXR1cm4KICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7Ck5vdyBpdCByZXR1cm5zCiAgICByZXR1
cm4gdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCk7CndoaWNoIGlzIHRyZWF0ZWQgZXF1aXZhbGVudGx5
IGJ5IFY4LgoKSSBhbHNvIHJlbW92ZWQgdGhlIHRvU3RyaW5nKGNvbnN0IFN0cmluZyYpIGZ1bmN0
aW9uIC0tIGl0J3MgYSBuby1vcCwgYW5kIG5vdCBuZWVkZWQgYW55bW9yZS4KCgpbNl0gVEVNUExB
VEUgQ09ORklHVVJBVElPTgoKVGhlIGJpbmRpbmdzIHdlcmUgYWxyZWFkeSBmYWlybHkgZWZmaWNp
ZW50IGFib3V0IGNvbmZpZ3VyaW5nIGF0dHJpYnV0ZXMsIHVzaW5nIGEgc3RhdGljIGRhdGEgdGFi
bGUgYW5kIGEgYmF0Y2hDb25maWd1cmVBdHRyaWJ1dGVzKCkgZnVuY3Rpb24uIEJ1dCBjYWxsYmFj
ayBmdW5jdGlvbnMgd2VyZSBlYWNoIGRlY2xhcmVkIHdpdGggaW5kaXZpZHVhbCBjYWxscyB0byB2
ODo6T2JqZWN0VGVtcGxhdGU6OlNldCgpLiBWOEVsZW1lbnQuY3BwIGFsb25lIGNvbnRhaW5lZCBv
dmVyIDE1MCBsaW5lcyBvZiB0aGVzZS4KCkkgd3JvdGUgYSB0YWJsZS1kcml2ZW4gYmF0Y2hDb25m
aWd1cmVDYWxsYmFja3MgZnVuY3Rpb24gdGhhdCByZXBsYWNlcyBtb3N0IG9mIHRob3NlIGNhbGxz
IHdpdGggYSBDIGFycmF5OgoKICAgIHN0YXRpYyBjb25zdCBCYXRjaGVkQ2FsbGJhY2sgRE9NV2lu
ZG93X2NhbGxiYWNrc1tdID0gewogICAgICB7ImdldFNlbGVjdGlvbiIsIERPTVdpbmRvd0ludGVy
bmFsOjpnZXRTZWxlY3Rpb25DYWxsYmFja30sCiAgICAgIHsicHJpbnQiLCBET01XaW5kb3dJbnRl
cm5hbDo6cHJpbnRDYWxsYmFja30sCiAgICAgIHsic3RvcCIsIERPTVdpbmRvd0ludGVybmFsOjpz
dG9wQ2FsbGJhY2t9LAogICAgLi4uCgpTb21lIG9mIHRoZSBjYWxsYmFja3MgdXNlIGEgbm9uc3Rh
bmRhcmQgY29uZmlndXJhdGlvbiwgdGhvdWdoIChlc3BlY2lhbGx5IHRoZSBmdW5jdGlvbiBzaWdu
YXR1cmUpIGFuZCBzdGlsbCBoYXZlIHRvIGJlIHNldCB1cCBtYW51YWxseS4gVG8gbWFrZSB0aGVz
ZSBzbWFsbGVyIEkgd3JvdGUgYSB2OENyZWF0ZUNhbGxiYWNrIGZ1bmN0aW9uIGNvbnRhaW5pbmcg
dGhlIGNvZGUgdGhhdCB1c2VkIHRvIGJlIGlubGluZWQ7IHNvIGV2ZW4gYSBjdXN0b20gaW5pdGlh
bGl6YXRpb24gaXMganVzdCBvbmUgY2FsbCB0byB0aGlzIGZ1bmN0aW9uIHdpdGggbm8gZXh0cmEg
d29yay4KQmVmb3JlOgogICAgcHJvdG8tPlNldCgKICAgICAgIHY4OjpTdHJpbmc6Ok5ldygiZ2V0
QXR0cmlidXRlIiksCiAgICAgICB2ODo6RnVuY3Rpb25UZW1wbGF0ZTo6TmV3KEVsZW1lbnRJbnRl
cm5hbDo6Z2V0QXR0cmlidXRlQ2FsbGJhY2ssIHY4OjpIYW5kbGU8djg6OlZhbHVlPigpLCBkZWZh
dWx0X3NpZ25hdHVyZSksCiAgICAgICBzdGF0aWNfY2FzdDx2ODo6UHJvcGVydHlBdHRyaWJ1dGU+
KHY4OjpEb250RGVsZXRlKSk7CkFmdGVyOgogICAgdjhDcmVhdGVDYWxsYmFjayhwcm90bywgImdl
dEF0dHJpYnV0ZSIsIEVsZW1lbnRJbnRlcm5hbDo6Z2V0QXR0cmlidXRlQ2FsbGJhY2ssIGRlZmF1
bHRfc2lnbmF0dXJlKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>42770</attachid>
            <date>2009-11-09 11:03:08 -0800</date>
            <delta_ts>2009-11-09 14:04:03 -0800</delta_ts>
            <desc>patch</desc>
            <filename>bindings2.patch</filename>
            <type>text/plain</type>
            <size>58878</size>
            <attacher name="Jens Alfke">jens</attacher>
            
              <data encoding="base64">SW5kZXg6IC9Wb2x1bWVzL1l0dHJpdW0vc3JjL3RoaXJkX3BhcnR5L1dlYktpdC9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIC9Wb2x1bWVz
L1l0dHJpdW0vc3JjL3RoaXJkX3BhcnR5L1dlYktpdC9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
Q29kZUdlbmVyYXRvclY4LnBtCShyZXZpc2lvbiA1MDY2NCkKKysrIC9Wb2x1bWVzL1l0dHJpdW0v
c3JjL3RoaXJkX3BhcnR5L1dlYktpdC9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVy
YXRvclY4LnBtCSh3b3JraW5nIGNvcHkpCkBAIC0zNTAsMTUgKzM1MCwxNiBAQAogICAgIG15ICRk
YXRhTm9kZSA9IHNoaWZ0OwogICAgIG15ICRpbXBsQ2xhc3NOYW1lID0gc2hpZnQ7CiAgICAgbXkg
JGNsYXNzSW5kZXggPSBzaGlmdDsKKyAgICBteSAkaG9sZGVyID0gc2hpZnQgfHwgImhvbGRlciI7
ICAgIyBvcHRpb25hbCBwYXJhbQogCiAgICAgaWYgKElzTm9kZVN1YlR5cGUoJGRhdGFOb2RlKSkg
ewogICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCA8PEVORCk7Ci0gICAgJGltcGxDbGFz
c05hbWUqIGltcCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydERPTVdyYXBwZXJUb05vZGU8JGltcGxD
bGFzc05hbWU+KGhvbGRlcik7CisgICAgJGltcGxDbGFzc05hbWUqIGltcCA9IHY4RE9NV3JhcHBl
clRvTm9kZTwkaW1wbENsYXNzTmFtZT4oJGhvbGRlcik7CiBFTkQKIAogICAgIH0gZWxzZSB7CiAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsIDw8RU5EKTsKLSAgICAkaW1wbENsYXNzTmFt
ZSogaW1wID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8JGltcGxDbGFzc05h
bWU+KFY4Q2xhc3NJbmRleDo6JGNsYXNzSW5kZXgsIGhvbGRlcik7CisgICAgJGltcGxDbGFzc05h
bWUqIGltcCA9IHY4RE9NV3JhcHBlclRvPCRpbXBsQ2xhc3NOYW1lPihWOENsYXNzSW5kZXg6OiRj
bGFzc0luZGV4LCAkaG9sZGVyKTsKIEVORAogCiAgIH0KQEAgLTM5Nyw3ICszOTgsNyBAQAogICAg
IH0KIEVORAogCi0gIEhvbGRlclRvTmF0aXZlKCRkYXRhTm9kZSwgJGltcGxDbGFzc05hbWUsICRj
bGFzc0luZGV4KTsKKyAgICBIb2xkZXJUb05hdGl2ZSgkZGF0YU5vZGUsICRpbXBsQ2xhc3NOYW1l
LCAkY2xhc3NJbmRleCk7CiAKICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCA8PEVORCk7CiAg
ICAgaWYgKCFWOFByb3h5OjpjYW5BY2Nlc3NGcmFtZShpbXAtPmZyYW1lKCksIGZhbHNlKSkgewpA
QCAtNDI4LDcgKzQyOSw3IEBACiAKICAgICBpZiAoJGNsYXNzSW5kZXggZXEgIkRPTVdJTkRPVyIp
IHsKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgPDxFTkQpOwotICAgIERPTVdpbmRv
dyogd2luZG93ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8RE9NV2luZG93
PihWOENsYXNzSW5kZXg6OkRPTVdJTkRPVywgaW5mby5Ib2xkZXIoKSk7CisgICAgRE9NV2luZG93
KiB3aW5kb3cgPSB2OERPTVdyYXBwZXJUbzxET01XaW5kb3c+KFY4Q2xhc3NJbmRleDo6RE9NV0lO
RE9XLCBpbmZvLkhvbGRlcigpKTsKICAgICAvLyBHZXQgdGhlIHByb3h5IGNvcnJlc3BvbmRpbmcg
dG8gdGhlIERPTVdpbmRvdyBpZiBwb3NzaWJsZSB0bwogICAgIC8vIG1ha2Ugc3VyZSB0aGF0IHRo
ZSBjb25zdHJ1Y3RvciBmdW5jdGlvbiBpcyBjb25zdHJ1Y3RlZCBpbiB0aGUKICAgICAvLyBjb250
ZXh0IG9mIHRoZSBET01XaW5kb3cgYW5kIG5vdCBpbiB0aGUgY29udGV4dCBvZiB0aGUgY2FsbGVy
LgpAQCAtNDM3LDExICs0MzgsMTEgQEAKICAgICB9IGVsc2lmICgkY2xhc3NJbmRleCBlcSAiREVE
SUNBVEVEV09SS0VSQ09OVEVYVCIgb3IgJGNsYXNzSW5kZXggZXEgIldPUktFUkNPTlRFWFQiIG9y
ICRjbGFzc0luZGV4IGVxICJTSEFSRURXT1JLRVJDT05URVhUIikgewogICAgICAgICAkaW1wbElu
Y2x1ZGVzeyJXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuaCJ9ID0gMTsKICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnREZWNscywgPDxFTkQpOwotICAgIFdvcmtlckNvbnRleHQqIHdvcmtlckNv
bnRleHQgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxXb3JrZXJDb250ZXh0
PihWOENsYXNzSW5kZXg6OldPUktFUkNPTlRFWFQsIGluZm8uSG9sZGVyKCkpOworICAgIFdvcmtl
ckNvbnRleHQqIHdvcmtlckNvbnRleHQgPSB2OERPTVdyYXBwZXJUbzxXb3JrZXJDb250ZXh0PihW
OENsYXNzSW5kZXg6OldPUktFUkNPTlRFWFQsIGluZm8uSG9sZGVyKCkpOwogICAgIHJldHVybiBW
OERPTVdyYXBwZXI6OmdldENvbnN0cnVjdG9yKHR5cGUsIHdvcmtlckNvbnRleHQpOwogRU5ECiAg
ICAgfSBlbHNlIHsKLSAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICByZXR1cm4g
djg6OlVuZGVmaW5lZCgpOyIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAg
IHJldHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsiKTsKICAgICB9CiAKICAgICBwdXNoKEBp
bXBsQ29udGVudERlY2xzLCA8PEVORCk7CkBAIC01MDQsNyArNTA1LDcgQEAKIAogICAgIGlmICgk
aXNQb2RUeXBlKSB7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsIDw8RU5EKTsKLSAg
ICBWOFNWR1BPRFR5cGVXcmFwcGVyPCRpbXBsQ2xhc3NOYW1lPiogaW1wX3dyYXBwZXIgPSBWOERP
TVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxWOFNWR1BPRFR5cGVXcmFwcGVyPCRpbXBs
Q2xhc3NOYW1lPiA+KFY4Q2xhc3NJbmRleDo6JGNsYXNzSW5kZXgsIGluZm8uSG9sZGVyKCkpOwor
ICAgIFY4U1ZHUE9EVHlwZVdyYXBwZXI8JGltcGxDbGFzc05hbWU+KiBpbXBfd3JhcHBlciA9IHY4
RE9NV3JhcHBlclRvPFY4U1ZHUE9EVHlwZVdyYXBwZXI8JGltcGxDbGFzc05hbWU+ID4oVjhDbGFz
c0luZGV4OjokY2xhc3NJbmRleCwgaW5mby5Ib2xkZXIoKSk7CiAgICAgJGltcGxDbGFzc05hbWUg
aW1wX2luc3RhbmNlID0gKmltcF93cmFwcGVyOwogRU5ECiAgICAgICAgIGlmICgkZ2V0dGVyU3Ry
aW5nVXNlc0ltcCkgewpAQCAtNTIyLDIyICs1MjMsMzQgQEAKICAgICAgICAgIyBwZXJmb3JtIGxv
b2t1cCBmaXJzdAogICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCA8PEVORCk7CiAgICAg
djg6OkhhbmRsZTx2ODo6T2JqZWN0PiBob2xkZXIgPSBWOERPTVdyYXBwZXI6Omxvb2t1cERPTVdy
YXBwZXIoVjhDbGFzc0luZGV4OjokY2xhc3NJbmRleCwgaW5mby5UaGlzKCkpOwotICAgIGlmICho
b2xkZXIuSXNFbXB0eSgpKSByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworICAgIGlmIChob2xkZXIu
SXNFbXB0eSgpKSByZXR1cm4gdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCk7CiBFTkQKICAgICAgIH0K
LSAgICAgICAgSG9sZGVyVG9OYXRpdmUoJGRhdGFOb2RlLCAkaW1wbENsYXNzTmFtZSwgJGNsYXNz
SW5kZXgpOworICAgICAgICBIb2xkZXJUb05hdGl2ZSgkZGF0YU5vZGUsICRpbXBsQ2xhc3NOYW1l
LCAkY2xhc3NJbmRleCwgImluZm8iKTsKICAgICB9IGVsc2UgeworICAgICAgICBteSAkcmVmbGVj
dCA9ICRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IlJlZmxlY3Qi
fTsKKyAgICAgICAgaWYgKCRnZXR0ZXJTdHJpbmdVc2VzSW1wICYmICRyZWZsZWN0ICYmIElzTm9k
ZVN1YlR5cGUoJGRhdGFOb2RlKSAmJiAkY29kZUdlbmVyYXRvci0+SXNTdHJpbmdUeXBlKCRhdHRy
VHlwZSkpIHsKKyAgICAgICAgICAgICMgR2VuZXJhdGUgc3VwZXItY29tcGFjdCBjYWxsIGZvciBy
ZWd1bGFyIGF0dHJpYnV0ZSBnZXR0ZXI6CisgICAgICAgICAgICBteSAkY29udGVudEF0dHJpYnV0
ZU5hbWUgPSAkcmVmbGVjdCBlcSAiMSIgPyAkYXR0ck5hbWUgOiAkcmVmbGVjdDsKKyAgICAgICAg
ICAgIG15ICRuYW1lc3BhY2UgPSAkY29kZUdlbmVyYXRvci0+TmFtZXNwYWNlRm9yQXR0cmlidXRl
TmFtZSgkaW50ZXJmYWNlTmFtZSwgJGNvbnRlbnRBdHRyaWJ1dGVOYW1lKTsKKyAgICAgICAgICAg
ICRpbXBsSW5jbHVkZXN7IiR7bmFtZXNwYWNlfS5oIn0gPSAxOworICAgICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnREZWNscywgIiAgICByZXR1cm4gdjhHZXRFbGVtZW50U3RyaW5nQXR0cihpbmZv
LCAke25hbWVzcGFjZX06OiR7Y29udGVudEF0dHJpYnV0ZU5hbWV9QXR0cik7XG4iKTsKKyAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgIH1cblxuIik7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICAjIFNraXAgdGhlIHJlc3Qgb2YgdGhlIGZ1bmN0aW9uIQorICAg
ICAgICB9CisgICAgICAgIAogICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCA8PEVORCk7
CiAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBob2xkZXIgPSBpbmZvLkhvbGRlcigpOwogRU5E
Ci0gICAgICAgIEhvbGRlclRvTmF0aXZlKCRkYXRhTm9kZSwgJGltcGxDbGFzc05hbWUsICRjbGFz
c0luZGV4KTsKKyAgICAgICAgSG9sZGVyVG9OYXRpdmUoJGRhdGFOb2RlLCAkaW1wbENsYXNzTmFt
ZSwgJGNsYXNzSW5kZXgsICJpbmZvIik7CiAgICAgfQogCiAgICAgIyBHZW5lcmF0ZSBzZWN1cml0
eSBjaGVja3MgaWYgbmVjZXNzYXJ5CiAgICAgaWYgKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0
ZW5kZWRBdHRyaWJ1dGVzLT57IkNoZWNrTm9kZVNlY3VyaXR5In0pIHsKLSAgICAgICAgcHVzaChA
aW1wbENvbnRlbnREZWNscywgIiAgICBpZiAoIVY4UHJveHk6OmNoZWNrTm9kZVNlY3VyaXR5KGlt
cC0+JGF0dHJOYW1lKCkpKSByZXR1cm4gdjg6OlVuZGVmaW5lZCgpO1xuXG4iKTsKKyAgICAgICAg
cHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICBpZiAoIVY4UHJveHk6OmNoZWNrTm9kZVNlY3Vy
aXR5KGltcC0+JGF0dHJOYW1lKCkpKSByZXR1cm4gdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCk7XG5c
biIpOwogICAgIH0gZWxzaWYgKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1
dGVzLT57IkNoZWNrRnJhbWVTZWN1cml0eSJ9KSB7Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50
RGVjbHMsICIgICAgaWYgKCFWOFByb3h5OjpjaGVja05vZGVTZWN1cml0eShpbXAtPmNvbnRlbnRE
b2N1bWVudCgpKSkgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTtcblxuIik7CisgICAgICAgIHB1c2go
QGltcGxDb250ZW50RGVjbHMsICIgICAgaWYgKCFWOFByb3h5OjpjaGVja05vZGVTZWN1cml0eShp
bXAtPmNvbnRlbnREb2N1bWVudCgpKSkgcmV0dXJuIHY4OjpIYW5kbGU8djg6OlZhbHVlPigpO1xu
XG4iKTsKICAgICB9CiAKICAgICBteSAkdXNlRXhjZXB0aW9ucyA9IDEgaWYgQHskYXR0cmlidXRl
LT5nZXR0ZXJFeGNlcHRpb25zfSBhbmQgISgkaXNQb2RUeXBlKTsKQEAgLTU3NywxMCArNTkwLDYg
QEAKICAgICAgICAgJGdldHRlclN0cmluZyA9ICJpbXBfaW5zdGFuY2UiOwogICAgIH0KIAotICAg
IGlmICgkbmF0aXZlVHlwZSBlcSAiU3RyaW5nIikgewotICAgICAgICAkZ2V0dGVyU3RyaW5nID0g
InRvU3RyaW5nKCRnZXR0ZXJTdHJpbmcpIjsKLSAgICB9Ci0KICAgICBteSAkcmVzdWx0OwogICAg
IG15ICR3cmFwcGVyOwogCkBAIC02MTcsNyArNjI2LDcgQEAKICAgICB9IGVsc2UgewogICAgICAg
ICBpZiAoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT50eXBlIGVxICJFdmVudExpc3RlbmVyIiAmJiAk
ZGF0YU5vZGUtPm5hbWUgZXEgIkRPTVdpbmRvdyIpIHsKICAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50RGVjbHMsICIgICAgaWYgKCFpbXAtPmRvY3VtZW50KCkpXG4iKTsKLSAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpO1xu
Iik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgICAgcmV0dXJuIHY4
OjpIYW5kbGU8djg6OlZhbHVlPigpO1xuIik7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoJHVz
ZUV4Y2VwdGlvbnMpIHsKQEAgLTY5NCw3ICs3MDMsNyBAQAogICAgIGlmICgkaXNQb2RUeXBlKSB7
CiAgICAgICAgICRpbXBsQ2xhc3NOYW1lID0gR2V0TmF0aXZlVHlwZSgkaW1wbENsYXNzTmFtZSk7
CiAgICAgICAgICRpbXBsSW5jbHVkZXN7IlY4U1ZHUE9EVHlwZVdyYXBwZXIuaCJ9ID0gMTsKLSAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICBWOFNWR1BPRFR5cGVXcmFwcGVyPCRp
bXBsQ2xhc3NOYW1lPiogd3JhcHBlciA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2Jq
ZWN0PFY4U1ZHUE9EVHlwZVdyYXBwZXI8JGltcGxDbGFzc05hbWU+ID4oVjhDbGFzc0luZGV4Ojok
Y2xhc3NJbmRleCwgaW5mby5Ib2xkZXIoKSk7XG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRl
bnREZWNscywgIiAgICBWOFNWR1BPRFR5cGVXcmFwcGVyPCRpbXBsQ2xhc3NOYW1lPiogd3JhcHBl
ciA9IHY4RE9NV3JhcHBlclRvPFY4U1ZHUE9EVHlwZVdyYXBwZXI8JGltcGxDbGFzc05hbWU+ID4o
VjhDbGFzc0luZGV4OjokY2xhc3NJbmRleCwgaW5mby5Ib2xkZXIoKSk7XG4iKTsKICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICAkaW1wbENsYXNzTmFtZSBpbXBfaW5zdGFuY2Ug
PSAqd3JhcHBlcjtcbiIpOwogICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgICRp
bXBsQ2xhc3NOYW1lKiBpbXAgPSAmaW1wX2luc3RhbmNlO1xuIik7CiAKQEAgLTcxMCwxMiArNzE5
LDI2IEBACiAgICAgaWYgKGhvbGRlci5Jc0VtcHR5KCkpIHJldHVybjsKIEVORAogICAgICAgfQot
ICAgICAgICBIb2xkZXJUb05hdGl2ZSgkZGF0YU5vZGUsICRpbXBsQ2xhc3NOYW1lLCAkY2xhc3NJ
bmRleCk7CisgICAgICAgIEhvbGRlclRvTmF0aXZlKCRkYXRhTm9kZSwgJGltcGxDbGFzc05hbWUs
ICRjbGFzc0luZGV4LCAiaW5mbyIpOwogICAgIH0gZWxzZSB7CisgICAgICAgIG15ICRhdHRyVHlw
ZSA9IEdldFR5cGVGcm9tU2lnbmF0dXJlKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZSk7CisgICAgICAg
IG15ICRyZWZsZWN0ID0gJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMt
PnsiUmVmbGVjdCJ9OworICAgICAgICBteSAkcmVmbGVjdFVSTCA9ICRhdHRyaWJ1dGUtPnNpZ25h
dHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IlJlZmxlY3RVUkwifTsKKyAgICAgICAgaWYgKCgk
cmVmbGVjdCB8fCAkcmVmbGVjdFVSTCkgJiYgSXNOb2RlU3ViVHlwZSgkZGF0YU5vZGUpICYmICRj
b2RlR2VuZXJhdG9yLT5Jc1N0cmluZ1R5cGUoJGF0dHJUeXBlKSkgeworICAgICAgICAgICAgIyBH
ZW5lcmF0ZSBzdXBlci1jb21wYWN0IGNhbGwgZm9yIHJlZ3VsYXIgYXR0cmlidXRlIHNldHRlcjoK
KyAgICAgICAgICAgIG15ICRjb250ZW50QXR0cmlidXRlTmFtZSA9ICgkcmVmbGVjdCB8fCAkcmVm
bGVjdFVSTCkgZXEgIjEiID8gJGF0dHJOYW1lIDogKCRyZWZsZWN0IHx8ICRyZWZsZWN0VVJMKTsK
KyAgICAgICAgICAgIG15ICRuYW1lc3BhY2UgPSAkY29kZUdlbmVyYXRvci0+TmFtZXNwYWNlRm9y
QXR0cmlidXRlTmFtZSgkaW50ZXJmYWNlTmFtZSwgJGNvbnRlbnRBdHRyaWJ1dGVOYW1lKTsKKyAg
ICAgICAgICAgICRpbXBsSW5jbHVkZXN7IiR7bmFtZXNwYWNlfS5oIn0gPSAxOworICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICB2OFNldEVsZW1lbnRTdHJpbmdBdHRyKGlu
Zm8sICR7bmFtZXNwYWNlfTo6JHtjb250ZW50QXR0cmlidXRlTmFtZX1BdHRyLCB2YWx1ZSk7XG4i
KTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgIH1cblxuIik7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICAjIFNraXAgdGhlIHJlc3Qgb2YgdGhlIGZ1bmN0
aW9uIQorICAgICAgICB9CisKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgPDxFTkQp
OwogICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gaG9sZGVyID0gaW5mby5Ib2xkZXIoKTsKIEVO
RAotICAgICAgICBIb2xkZXJUb05hdGl2ZSgkZGF0YU5vZGUsICRpbXBsQ2xhc3NOYW1lLCAkY2xh
c3NJbmRleCk7CisgICAgICAgIEhvbGRlclRvTmF0aXZlKCRkYXRhTm9kZSwgJGltcGxDbGFzc05h
bWUsICRjbGFzc0luZGV4LCAiaW5mbyIpOwogICAgIH0KIAogICAgIG15ICRuYXRpdmVUeXBlID0g
R2V0TmF0aXZlVHlwZUZyb21TaWduYXR1cmUoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLCAwKTsKQEAg
LTcyNCw3ICs3NDcsNiBAQAogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAg
ICBpZiAoIWltcC0+ZG9jdW1lbnQoKSlcbiIpOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnREZWNscywgIiAgICAgIHJldHVybjtcbiIpOwogICAgICAgICB9Ci0gICAgICAgIHB1c2goQGlt
cGxDb250ZW50RGVjbHMsICIgICAgJG5hdGl2ZVR5cGUgdiA9IFY4RE9NV3JhcHBlcjo6Z2V0RXZl
bnRMaXN0ZW5lcihpbXAsIHZhbHVlLCB0cnVlLCBMaXN0ZW5lckZpbmRPckNyZWF0ZSk7XG4iKTsK
ICAgICB9IGVsc2UgewogICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgICRuYXRp
dmVUeXBlIHYgPSAiIC4gSlNWYWx1ZVRvTmF0aXZlKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZSwgInZh
bHVlIikgLiAiO1xuIik7CiAgICAgfQpAQCAtNzY0LDE4ICs3ODYsMTAgQEAKICAgICAgICAgICAg
ICRpbXBsSW5jbHVkZXN7IlY4QWJzdHJhY3RFdmVudExpc3RlbmVyLmgifSA9IDE7CiAgICAgICAg
ICAgICAkaW1wbEluY2x1ZGVzeyJWOEN1c3RvbUJpbmRpbmcuaCJ9ID0gMTsKICAgICAgICAgICAg
ICRjYWNoZUluZGV4ID0gR2V0SGlkZGVuRGVwZW5kZW5jeUluZGV4KCRkYXRhTm9kZSwgJGF0dHJO
YW1lKTsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgJG5hdGl2ZVR5
cGUgb2xkID0gaW1wLT4kYXR0ck5hbWUoKTtcbiIpOwotICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnREZWNscywgIiAgICBWOEFic3RyYWN0RXZlbnRMaXN0ZW5lciogb2xkTGlzdGVuZXIgPSBv
bGQgPyBWOEFic3RyYWN0RXZlbnRMaXN0ZW5lcjo6Y2FzdChvbGQuZ2V0KCkpIDogMDtcbiIpOwot
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICBpZiAob2xkTGlzdGVuZXIp
IHtcbiIpOwotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICAgIHY4OjpM
b2NhbDx2ODo6T2JqZWN0PiBvbGRMaXN0ZW5lck9iamVjdCA9IG9sZExpc3RlbmVyLT5nZXRFeGlz
dGluZ0xpc3RlbmVyT2JqZWN0KCk7XG4iKTsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
RGVjbHMsICIgICAgICBpZiAoIW9sZExpc3RlbmVyT2JqZWN0LklzRW1wdHkoKSlcbiIpOwotICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICAgICAgcmVtb3ZlSGlkZGVuRGVw
ZW5kZW5jeShob2xkZXIsIG9sZExpc3RlbmVyT2JqZWN0LCAkY2FjaGVJbmRleCk7XG4iKTsKLSAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgfVxuIik7Ci0gICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgIGltcC0+c2V0JGltcGxTZXR0ZXJGdW5jdGlv
bk5hbWUoJHJlc3VsdCk7XG4iKTsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMs
ICIgICAgaWYgKCRyZXN1bHQpXG4iKTsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVj
bHMsICIgICAgICBjcmVhdGVIaWRkZW5EZXBlbmRlbmN5KGhvbGRlciwgdmFsdWUsICRjYWNoZUlu
ZGV4Iik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgIHRyYW5zZmVy
SGlkZGVuRGVwZW5kZW5jeShob2xkZXIsIGltcC0+JGF0dHJOYW1lKCksIHZhbHVlLCAkY2FjaGVJ
bmRleCk7XG4iKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgaW1w
LT5zZXQkaW1wbFNldHRlckZ1bmN0aW9uTmFtZShWOERPTVdyYXBwZXI6OmdldEV2ZW50TGlzdGVu
ZXIoaW1wLCB2YWx1ZSwgdHJ1ZSwgTGlzdGVuZXJGaW5kT3JDcmVhdGUpIik7CiAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgIGltcC0+c2V0
JGltcGxTZXR0ZXJGdW5jdGlvbk5hbWUoIiAuICRyZXN1bHQpOworICAgICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnREZWNscywgIiAgICBpbXAtPnNldCRpbXBsU2V0dGVyRnVuY3Rpb25OYW1lKCRy
ZXN1bHQiKTsKICAgICAgICAgfQogICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiLCBl
YyIpIGlmICR1c2VFeGNlcHRpb25zOwogICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAi
KTtcbiIpOwpAQCAtODA1LDEyICs4MTksMTEgQEAKICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xz
LCAiICB9XG5cbiIpOyAgIyBlbmQgb2Ygc2V0dGVyCiB9CiAKLXN1YiBHZW5lcmF0ZU5ld0Z1bmN0
aW9uVGVtcGxhdGUKK3N1YiBHZXRGdW5jdGlvblRlbXBsYXRlQ2FsbGJhY2tOYW1lCiB7CiAgICAg
JGZ1bmN0aW9uID0gc2hpZnQ7CiAgICAgJGRhdGFOb2RlID0gc2hpZnQ7Ci0gICAgJHNpZ25hdHVy
ZSA9IHNoaWZ0OwotCisgICAgCiAgICAgbXkgJGludGVyZmFjZU5hbWUgPSAkZGF0YU5vZGUtPm5h
bWU7CiAgICAgbXkgJG5hbWUgPSAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+bmFtZTsKIApAQCAtODI1
LDEyICs4MzgsMjIgQEAKICAgICAgICAgaWYgKCRjdXN0b21GdW5jIGVxIDEpIHsKICAgICAgICAg
ICAgICRjdXN0b21GdW5jID0gJGludGVyZmFjZU5hbWUgLiAkY29kZUdlbmVyYXRvci0+V0tfdWNm
aXJzdCgkbmFtZSk7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuICJ2ODo6RnVuY3Rpb25UZW1w
bGF0ZTo6TmV3KFY4Q3VzdG9tOjp2OCR7Y3VzdG9tRnVuY31DYWxsYmFjaywgdjg6OkhhbmRsZTx2
ODo6VmFsdWU+KCksICRzaWduYXR1cmUpIjsKKyAgICAgICAgcmV0dXJuICJWOEN1c3RvbTo6djgk
e2N1c3RvbUZ1bmN9Q2FsbGJhY2siOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIHJldHVybiAidjg6
OkZ1bmN0aW9uVGVtcGxhdGU6Ok5ldygke2ludGVyZmFjZU5hbWV9SW50ZXJuYWw6OiR7bmFtZX1D
YWxsYmFjaywgdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCksICRzaWduYXR1cmUpIjsKKyAgICAgICAg
cmV0dXJuICIke2ludGVyZmFjZU5hbWV9SW50ZXJuYWw6OiR7bmFtZX1DYWxsYmFjayI7CiAgICAg
fQogfQogCitzdWIgR2VuZXJhdGVOZXdGdW5jdGlvblRlbXBsYXRlCit7CisgICAgJGZ1bmN0aW9u
ID0gc2hpZnQ7CisgICAgJGRhdGFOb2RlID0gc2hpZnQ7CisgICAgJHNpZ25hdHVyZSA9IHNoaWZ0
OworCisgICAgbXkgJGNhbGxiYWNrID0gR2V0RnVuY3Rpb25UZW1wbGF0ZUNhbGxiYWNrTmFtZSgk
ZnVuY3Rpb24sICRkYXRhTm9kZSk7CisgICAgcmV0dXJuICJ2ODo6RnVuY3Rpb25UZW1wbGF0ZTo6
TmV3KCRjYWxsYmFjaywgdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCksICRzaWduYXR1cmUpIjsKK30K
Kwogc3ViIEdlbmVyYXRlRnVuY3Rpb25DYWxsYmFjawogewogICAgIG15ICRmdW5jdGlvbiA9IHNo
aWZ0OwpAQCAtODQ5LDEyICs4NzIsMTIgQEAKIAogICAgIGlmICgkZnVuY3Rpb24tPnNpZ25hdHVy
ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IlJlcXVpcmVzQWxsQXJndW1lbnRzIn0pIHsKICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnREZWNscywKLSAgICAgICAgICAgICIgICAgaWYgKGFyZ3MuTGVu
Z3RoKCkgPCAkbnVtUGFyYW1ldGVycykgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTtcbiIpOworICAg
ICAgICAgICAgIiAgICBpZiAoYXJncy5MZW5ndGgoKSA8ICRudW1QYXJhbWV0ZXJzKSByZXR1cm4g
djg6OkhhbmRsZTx2ODo6VmFsdWU+KCk7XG4iKTsKICAgICB9CiAKICAgICBpZiAoSXNQb2RUeXBl
KCRpbXBsQ2xhc3NOYW1lKSkgewogICAgICAgICBteSAkbmF0aXZlQ2xhc3NOYW1lID0gR2V0TmF0
aXZlVHlwZSgkaW1wbENsYXNzTmFtZSk7Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMs
ICIgICAgVjhTVkdQT0RUeXBlV3JhcHBlcjwkbmF0aXZlQ2xhc3NOYW1lPiogaW1wX3dyYXBwZXIg
PSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxWOFNWR1BPRFR5cGVXcmFwcGVy
PCRuYXRpdmVDbGFzc05hbWU+ID4oVjhDbGFzc0luZGV4OjokY2xhc3NJbmRleCwgYXJncy5Ib2xk
ZXIoKSk7XG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICBWOFNWR1BP
RFR5cGVXcmFwcGVyPCRuYXRpdmVDbGFzc05hbWU+KiBpbXBfd3JhcHBlciA9IHY4RE9NV3JhcHBl
clRvPFY4U1ZHUE9EVHlwZVdyYXBwZXI8JG5hdGl2ZUNsYXNzTmFtZT4gPihWOENsYXNzSW5kZXg6
OiRjbGFzc0luZGV4LCBhcmdzLkhvbGRlcigpKTtcbiIpOwogICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudERlY2xzLCAiICAgICRuYXRpdmVDbGFzc05hbWUgaW1wX2luc3RhbmNlID0gKmltcF93cmFw
cGVyO1xuIik7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgJG5hdGl2ZUNs
YXNzTmFtZSogaW1wID0gJmltcF9pbnN0YW5jZTtcbiIpOwogICAgIH0gZWxzZSB7CkBAIC04NzEs
MTQgKzg5NCwyNiBAQAogICAgICMgV2UgaGF2ZSBub3QgZmluZCByZWFsIHVzZSBjYXNlcyB5ZXQu
CiAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywKICIgICAgaWYgKCFWOFByb3h5OjpjYW5BY2Nl
c3NGcmFtZShpbXAtPmZyYW1lKCksIHRydWUpKSB7XG4iLgotIiAgICAgIHJldHVybiB2ODo6VW5k
ZWZpbmVkKCk7XG4iIC4KKyIgICAgICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCk7XG4i
IC4KICIgICAgfVxuIik7CiAgICAgfQorICAgIAorICAgIG15ICRyYWlzZXNFeGNlcHRpb25zID0g
QHskZnVuY3Rpb24tPnJhaXNlc0V4Y2VwdGlvbnN9OworICAgIGlmICghJHJhaXNlc0V4Y2VwdGlv
bnMpIHsKKyAgICAgICAgZm9yZWFjaCBteSAkcGFyYW1ldGVyIChAeyRmdW5jdGlvbi0+cGFyYW1l
dGVyc30pIHsKKyAgICAgICAgICAgIGlmIChUeXBlQ2FuRmFpbENvbnZlcnNpb24oJHBhcmFtZXRl
cikgb3IgJHBhcmFtZXRlci0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IklzSW5kZXgifSkgeworICAg
ICAgICAgICAgICAgICRyYWlzZXNFeGNlcHRpb25zID0gMTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH0KIAotCi0gICAgaWYgKEB7JGZ1bmN0aW9uLT5yYWlzZXNFeGNlcHRpb25zfSkg
eworICAgIGlmICgkcmFpc2VzRXhjZXB0aW9ucykgewogICAgICAgICAkaW1wbEluY2x1ZGVzeyJF
eGNlcHRpb25Db2RlLmgifSA9IDE7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIg
ICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7XG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnRE
ZWNscywgIiAgICB7XG4iKTsKKyAgICAgICAgIyBUaGUgYnJhY2UgaGVyZSBpcyBuZWVkZWQgdG8g
cHJldmVudCB0aGUgZW5zdWluZyAnZ290byBmYWlsJ3MgZnJvbSBqdW1waW5nIHBhc3QgY29uc3Ry
dWN0b3JzCisgICAgICAgICMgb2Ygb2JqZWN0cyAobGlrZSBTdHJpbmdzKSBkZWNsYXJlZCBsYXRl
ciwgY2F1c2luZyBjb21waWxlIGVycm9ycy4gVGhlIGJsb2NrIHNjb3BlIGVuZHMKKyAgICAgICAg
IyByaWdodCBiZWZvcmUgdGhlIGxhYmVsICdmYWlsOicuCiAgICAgfQogCiAgICAgaWYgKCRmdW5j
dGlvbi0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tQXJndW1lbnRIYW5k
bGluZyJ9KSB7CkBAIC04OTEsNyArOTI2LDcgQEAKICAgICBpZiAoJGZ1bmN0aW9uLT5zaWduYXR1
cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJTVkdDaGVja1NlY3VyaXR5RG9jdW1lbnQifSkgewog
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLAogIiAgICBpZiAoIVY4UHJveHk6OmNoZWNr
Tm9kZVNlY3VyaXR5KGltcC0+Z2V0U1ZHRG9jdW1lbnQoZWMpKSlcbiIgLgotIiAgICAgIHJldHVy
biB2ODo6VW5kZWZpbmVkKCk7XG4iKTsKKyIgICAgICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6VmFs
dWU+KCk7XG4iKTsKICAgICB9CiAKICAgICBteSAkcGFyYW1JbmRleCA9IDA7CkBAIC05MjAsOCAr
OTU1LDggQEAKICAgICAgICAgICAgICRpbXBsSW5jbHVkZXN7IkV4Y2VwdGlvbkNvZGUuaCJ9ID0g
MTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsCiAiICAgIGlmIChVTkxJS0VM
WSghJHBhcmFtZXRlck5hbWUiIC4gKEJhc2ljVHlwZUNhbkZhaWxDb252ZXJzaW9uKCRwYXJhbWV0
ZXIpID8gIk9rIiA6ICIiKSAuICIpKSB7XG4iIC4KLSIgICAgICBWOFByb3h5OjpzZXRET01FeGNl
cHRpb24oVFlQRV9NSVNNQVRDSF9FUlIpO1xuIiAuCi0iICAgICAgcmV0dXJuIHY4OjpIYW5kbGU8
djg6OlZhbHVlPigpO1xuIiAuCisiICAgICAgZWMgPSBUWVBFX01JU01BVENIX0VSUjtcbiIgLgor
IiAgICAgIGdvdG8gZmFpbDtcbiIgLgogIiAgICB9XG4iKTsKICAgICAgICAgfQogCkBAIC05Mjks
OCArOTY0LDggQEAKICAgICAgICAgICAgICRpbXBsSW5jbHVkZXN7IkV4Y2VwdGlvbkNvZGUuaCJ9
ID0gMTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsCiAiICAgIGlmIChVTkxJ
S0VMWSgkcGFyYW1ldGVyTmFtZSA8IDApKSB7XG4iIC4KLSIgICAgICBWOFByb3h5OjpzZXRET01F
eGNlcHRpb24oSU5ERVhfU0laRV9FUlIpO1xuIiAuCi0iICAgICAgcmV0dXJuIHY4OjpIYW5kbGU8
djg6OlZhbHVlPigpO1xuIiAuCisiICAgICAgZWMgPSBJTkRFWF9TSVpFX0VSUjtcbiIgLgorIiAg
ICAgIGdvdG8gZmFpbDtcbiIgLgogIiAgICB9XG4iKTsKICAgICAgICAgfQogCkBAIC05NDAsNiAr
OTc1LDE0IEBACiAgICAgIyBCdWlsZCB0aGUgZnVuY3Rpb24gY2FsbCBzdHJpbmcuCiAgICAgbXkg
JGNhbGxTdHJpbmcgPSBHZW5lcmF0ZUZ1bmN0aW9uQ2FsbFN0cmluZygkZnVuY3Rpb24sICRwYXJh
bUluZGV4LCAiICAgICIsICRpbXBsQ2xhc3NOYW1lKTsKICAgICBwdXNoKEBpbXBsQ29udGVudERl
Y2xzLCAiJGNhbGxTdHJpbmciKTsKKworICAgIGlmICgkcmFpc2VzRXhjZXB0aW9ucykgeworICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgIH1cbiIpOworICAgICAgICBwdXNoKEBp
bXBsQ29udGVudERlY2xzLCAiICBmYWlsOlxuIik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50
RGVjbHMsICIgICAgVjhQcm94eTo6c2V0RE9NRXhjZXB0aW9uKGVjKTtcbiIpOworICAgICAgICBw
dXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4o
KTtcbiIpOworICAgIH0KKyAgICAKICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICB9XG5c
biIpOwogfQogCkBAIC0xMjE4LDYgKzEyNjEsMzggQEAKICAgICAgICAgR2VuZXJhdGVCYXRjaGVk
QXR0cmlidXRlRGF0YSgkZGF0YU5vZGUsICRhdHRyaWJ1dGVzKTsKICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnQsICJ9O1xuIik7CiAgICAgfQorICAgIAorICAgICMgU2V0dXAgdGFibGUgb2Ygc3Rh
bmRhcmQgY2FsbGJhY2sgZnVuY3Rpb25zCisgICAgJG51bV9jYWxsYmFja3MgPSAwOworICAgICRo
YXNfY2FsbGJhY2tzID0gMDsKKyAgICBmb3JlYWNoIG15ICRmdW5jdGlvbiAoQHskZGF0YU5vZGUt
PmZ1bmN0aW9uc30pIHsKKyAgICAgICAgbXkgJGF0dHJFeHQgPSAkZnVuY3Rpb24tPnNpZ25hdHVy
ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzOworICAgICAgICAjIERvbid0IHB1dCBhbnkgbm9uc3RhbmRh
cmQgZnVuY3Rpb25zIGludG8gdGhpcyB0YWJsZToKKyAgICAgICAgaWYgKCRhdHRyRXh0LT57IlY4
T25JbnN0YW5jZSJ9KSB7CisgICAgICAgICAgICBuZXh0OworICAgICAgICB9CisgICAgICAgIGlm
ICgkYXR0ckV4dC0+eyJFbmFibGVkQXRSdW50aW1lIn0gfHwgUmVxdWlyZXNDdXN0b21TaWduYXR1
cmUoJGZ1bmN0aW9uKSB8fCAkYXR0ckV4dC0+eyJWOERvTm90Q2hlY2tTaWduYXR1cmUifSkgewor
ICAgICAgICAgICAgbmV4dDsKKyAgICAgICAgfQorICAgICAgICBpZiAoJGF0dHJFeHQtPnsiRG9O
b3RDaGVja0RvbWFpblNlY3VyaXR5In0gJiYKKyAgICAgICAgICAgICgkZGF0YU5vZGUtPmV4dGVu
ZGVkQXR0cmlidXRlcy0+eyJDaGVja0RvbWFpblNlY3VyaXR5In0gfHwgJGludGVyZmFjZU5hbWUg
ZXEgIkRPTVdpbmRvdyIpKSB7CisgICAgICAgICAgICBuZXh0OworICAgICAgICB9CisgICAgICAg
IGlmICgkYXR0ckV4dC0+eyJEb250RW51bSJ9IHx8ICRhdHRyRXh0LT57IlY4UmVhZE9ubHkifSkg
eworICAgICAgICAgICAgbmV4dDsKKyAgICAgICAgfQorICAgICAgICBpZiAoISRoYXNfY2FsbGJh
Y2tzKSB7CisgICAgICAgICAgICAkaGFzX2NhbGxiYWNrcyA9IDE7CisgICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgInN0YXRpYyBjb25zdCBCYXRjaGVkQ2FsbGJhY2sgJHtpbnRlcmZhY2VO
YW1lfV9jYWxsYmFja3NbXSA9IHtcbiIpOworICAgICAgICB9CisgICAgICAgIG15ICRuYW1lID0g
JGZ1bmN0aW9uLT5zaWduYXR1cmUtPm5hbWU7CisgICAgICAgIG15ICRjYWxsYmFjayA9IEdldEZ1
bmN0aW9uVGVtcGxhdGVDYWxsYmFja05hbWUoJGZ1bmN0aW9uLCAkZGF0YU5vZGUpOworICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgPDxFTkQpOworICB7IiRuYW1lIiwgJGNhbGxiYWNrfSwKK0VO
RAorICAgICAgICAkbnVtX2NhbGxiYWNrcysrOworICAgIH0KKyAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIn07XG4iKSAgaWYgJGhhc19jYWxsYmFja3M7CiAKICAgICAjIFNldHVwIGNvbnN0YW50cwog
ICAgIG15ICRoYXNfY29uc3RhbnRzID0gMDsKQEAgLTEyNDEsNyArMTMxNiw3IEBACiAKICAgICBw
dXNoKEBpbXBsQ29udGVudERlY2xzLCAifSAvLyBuYW1lc3BhY2UgJHtpbnRlcmZhY2VOYW1lfUlu
dGVybmFsXG5cbiIpOwogCi0gICAgbXkgJGFjY2Vzc19jaGVjayA9ICIvKiBubyBhY2Nlc3MgY2hl
Y2sgKi8iOworICAgIG15ICRhY2Nlc3NfY2hlY2sgPSAiIjsKICAgICBpZiAoJGRhdGFOb2RlLT5l
eHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ2hlY2tEb21haW5TZWN1cml0eSJ9ICYmICEoJGludGVyZmFj
ZU5hbWUgZXEgIkRPTVdpbmRvdyIpKSB7CiAgICAgICAgICRhY2Nlc3NfY2hlY2sgPSAiaW5zdGFu
Y2UtPlNldEFjY2Vzc0NoZWNrQ2FsbGJhY2tzKFY4Q3VzdG9tOjp2OCR7aW50ZXJmYWNlTmFtZX1O
YW1lZFNlY3VyaXR5Q2hlY2ssIFY4Q3VzdG9tOjp2OCR7aW50ZXJmYWNlTmFtZX1JbmRleGVkU2Vj
dXJpdHlDaGVjaywgdjg6OkludGVnZXI6Ok5ldyhWOENsYXNzSW5kZXg6OlRvSW50KFY4Q2xhc3NJ
bmRleDo6JHtjbGFzc0luZGV4fSkpKTsiOwogICAgIH0KQEAgLTEyNjAsMzUgKzEzMzUsNTkgQEAK
IEVORAogICAgIH0KIAorICAgICMgZmluZCB0aGUgc3VwZXIgZGVzY3JpcHRvcgorICAgIG15ICRw
YXJlbnRDbGFzc0luZGV4ID0gIklOVkFMSURfQ0xBU1NfSU5ERVgiOworICAgIGZvcmVhY2ggKEB7
JGRhdGFOb2RlLT5wYXJlbnRzfSkgeworICAgICAgICBteSAkcGFyZW50ID0gJGNvZGVHZW5lcmF0
b3ItPlN0cmlwTW9kdWxlKCRfKTsKKyAgICAgICAgaWYgKCRwYXJlbnQgZXEgIkV2ZW50VGFyZ2V0
IikgeyBuZXh0OyB9CisgICAgICAgICRpbXBsSW5jbHVkZXN7IlY4JHtwYXJlbnR9LmgifSA9IDE7
CisgICAgICAgICRwYXJlbnRDbGFzc0luZGV4ID0gdWMoJGNvZGVHZW5lcmF0b3ItPlN0cmlwTW9k
dWxlKCRwYXJlbnQpKTsKKyAgICAgICAgbGFzdDsKKyAgICB9CisKKyAgICAjIGZpbmQgdGhlIGZp
ZWxkIGNvdW50CisgICAgbXkgJGZpZWxkQ291bnQgPSAiVjhDdXN0b206OmtEZWZhdWx0V3JhcHBl
ckludGVybmFsRmllbGRDb3VudCI7CisgICAgaWYgKElzTm9kZVN1YlR5cGUoJGRhdGFOb2RlKSkg
eworICAgICAgICAkZmllbGRDb3VudCA9ICJWOEN1c3RvbTo6a05vZGVNaW5pbXVtSW50ZXJuYWxG
aWVsZENvdW50IjsKKyAgICB9CisgICAgCiAgICAgIyBHZW5lcmF0ZSB0aGUgdGVtcGxhdGUgY29u
ZmlndXJhdGlvbiBtZXRob2QKICAgICBwdXNoKEBpbXBsQ29udGVudCwgIDw8RU5EKTsKIHN0YXRp
YyB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gQ29uZmlndXJlJHtjbGFzc05h
bWV9VGVtcGxhdGUodjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IGRlc2MpIHsK
LSAgdjg6OkxvY2FsPHY4OjpPYmplY3RUZW1wbGF0ZT4gaW5zdGFuY2UgPSBkZXNjLT5JbnN0YW5j
ZVRlbXBsYXRlKCk7CisgIHY4OjpMb2NhbDx2ODo6U2lnbmF0dXJlPiBkZWZhdWx0X3NpZ25hdHVy
ZSA9IHY4Q29uZmlndXJlVGVtcGxhdGUoZGVzYywgXCIke2ludGVyZmFjZU5hbWV9XCIsCisgICAg
ICBWOENsYXNzSW5kZXg6OiRwYXJlbnRDbGFzc0luZGV4LCAkZmllbGRDb3VudCwKIEVORAotICAg
IGlmIChJc05vZGVTdWJUeXBlKCRkYXRhTm9kZSkpIHsKKworICAgICMgU2V0IHVwIG91ciBhdHRy
aWJ1dGVzIGlmIHdlIGhhdmUgdGhlbQorICAgIGlmICgkaGFzX2F0dHJpYnV0ZXMpIHsKICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsIDw8RU5EKTsKLSAgaW5zdGFuY2UtPlNldEludGVybmFsRmll
bGRDb3VudChWOEN1c3RvbTo6a05vZGVNaW5pbXVtSW50ZXJuYWxGaWVsZENvdW50KTsKKyAgICAg
ICR7aW50ZXJmYWNlTmFtZX1fYXR0cnMsIHNpemVvZigke2ludGVyZmFjZU5hbWV9X2F0dHJzKS9z
aXplb2YoKiR7aW50ZXJmYWNlTmFtZX1fYXR0cnMpLAogRU5ECiAgICAgfSBlbHNlIHsKICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsIDw8RU5EKTsKLSAgaW5zdGFuY2UtPlNldEludGVybmFsRmll
bGRDb3VudChWOEN1c3RvbTo6a0RlZmF1bHRXcmFwcGVySW50ZXJuYWxGaWVsZENvdW50KTsKKyAg
ICAgIE5VTEwsIDAsCiBFTkQKICAgICB9CisgICAgCisgICAgaWYgKCRoYXNfY2FsbGJhY2tzKSB7
CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCA8PEVORCk7CisgICAgICAke2ludGVyZmFjZU5h
bWV9X2NhbGxiYWNrcywgc2l6ZW9mKCR7aW50ZXJmYWNlTmFtZX1fY2FsbGJhY2tzKS9zaXplb2Yo
KiR7aW50ZXJmYWNlTmFtZX1fY2FsbGJhY2tzKSk7CitFTkQKKyAgICB9IGVsc2UgeworICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgPDxFTkQpOworICAgICAgTlVMTCwgMCk7CitFTkQKKyAgICB9
CiAKKyAgICBpZiAoJGFjY2Vzc19jaGVjayBvciBAZW5hYmxlZEF0UnVudGltZSBvciBAeyRkYXRh
Tm9kZS0+ZnVuY3Rpb25zfSBvciAkaGFzX2NvbnN0YW50cykgewogICAgIHB1c2goQGltcGxDb250
ZW50LCAgPDxFTkQpOwotICB2ODo6TG9jYWw8djg6OlNpZ25hdHVyZT4gZGVmYXVsdF9zaWduYXR1
cmUgPSB2ODo6U2lnbmF0dXJlOjpOZXcoZGVzYyk7CisgIHY4OjpMb2NhbDx2ODo6T2JqZWN0VGVt
cGxhdGU+IGluc3RhbmNlID0gZGVzYy0+SW5zdGFuY2VUZW1wbGF0ZSgpOwogICB2ODo6TG9jYWw8
djg6Ok9iamVjdFRlbXBsYXRlPiBwcm90byA9IGRlc2MtPlByb3RvdHlwZVRlbXBsYXRlKCk7Ci0g
ICRhY2Nlc3NfY2hlY2sKIEVORAotCi0KLSAgICAjIFNldCB1cCBvdXIgYXR0cmlidXRlcyBpZiB3
ZSBoYXZlIHRoZW0KLSAgICBpZiAoJGhhc19hdHRyaWJ1dGVzKSB7Ci0gICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCA8PEVORCk7Ci0gIGJhdGNoQ29uZmlndXJlQXR0cmlidXRlcyhpbnN0YW5jZSwg
cHJvdG8sICR7aW50ZXJmYWNlTmFtZX1fYXR0cnMsIHNpemVvZigke2ludGVyZmFjZU5hbWV9X2F0
dHJzKS9zaXplb2YoKiR7aW50ZXJmYWNlTmFtZX1fYXR0cnMpKTsKLUVORAogICAgIH0KIAorICAg
IHB1c2goQGltcGxDb250ZW50LCAgIiAgJGFjY2Vzc19jaGVja1xuIik7CisgICAgCiAgICAgIyBT
ZXR1cCB0aGUgZW5hYmxlLWF0LXJ1bnRpbWUgYXR0cnMgaWYgd2UgaGF2ZSB0aGVtCiAgICAgZm9y
ZWFjaCBteSAkcnVudGltZV9hdHRyIChAZW5hYmxlZEF0UnVudGltZSkgewogICAgICAgICAkZW5h
YmxlX2Z1bmN0aW9uID0gJGludGVyZmFjZU5hbWUgLiAkY29kZUdlbmVyYXRvci0+V0tfdWNmaXJz
dCgkcnVudGltZV9hdHRyLT5zaWduYXR1cmUtPm5hbWUpOwpAQCAtMTMwNSw3ICsxNDA0LDkgQEAK
ICAgICB9CiAKICAgICAjIERlZmluZSBvdXIgZnVuY3Rpb25zIHdpdGggU2V0KCkgb3IgU2V0QWNj
ZXNzb3IoKQorICAgICR0b3RhbF9mdW5jdGlvbnMgPSAwOwogICAgIGZvcmVhY2ggbXkgJGZ1bmN0
aW9uIChAeyRkYXRhTm9kZS0+ZnVuY3Rpb25zfSkgeworICAgICAgICAkdG90YWxfZnVuY3Rpb25z
Kys7CiAgICAgICAgIG15ICRhdHRyRXh0ID0gJGZ1bmN0aW9uLT5zaWduYXR1cmUtPmV4dGVuZGVk
QXR0cmlidXRlczsKICAgICAgICAgbXkgJG5hbWUgPSAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+bmFt
ZTsKIApAQCAtMTM1OSw2ICsxNDYwLDcgQEAKICAgICAgIHY4OjpBTExfQ0FOX1JFQUQsCiAgICAg
ICBzdGF0aWNfY2FzdDx2ODo6UHJvcGVydHlBdHRyaWJ1dGU+KCRwcm9wZXJ0eV9hdHRyaWJ1dGVz
KSk7CiBFTkQKKyAgICAgICAgICAkbnVtX2NhbGxiYWNrcysrOwogICAgICAgICAgIG5leHQ7CiAg
ICAgICB9CiAKQEAgLTEzNzMsMzIgKzE0NzUsMjcgQEAKICAgICAgIH0KIAogICAgICAgIyBOb3Jt
YWwgZnVuY3Rpb24gY2FsbCBpcyBhIHRlbXBsYXRlCi0gICAgICBteSAkdGVtcGxhdGVGdW5jdGlv
biA9IEdlbmVyYXRlTmV3RnVuY3Rpb25UZW1wbGF0ZSgkZnVuY3Rpb24sICRkYXRhTm9kZSwgJHNp
Z25hdHVyZSk7Ci0KLQorICAgICAgbXkgJGNhbGxiYWNrID0gR2V0RnVuY3Rpb25UZW1wbGF0ZUNh
bGxiYWNrTmFtZSgkZnVuY3Rpb24sICRkYXRhTm9kZSk7CisgICAgICAKKyAgICAgIGlmICgkcHJv
cGVydHlfYXR0cmlidXRlcyBlcSAidjg6OkRvbnREZWxldGUiKSB7CisgICAgICAgICAgJHByb3Bl
cnR5X2F0dHJpYnV0ZXMgPSAiIjsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgICAgJHByb3BlcnR5
X2F0dHJpYnV0ZXMgPSAiLCBzdGF0aWNfY2FzdDx2ODo6UHJvcGVydHlBdHRyaWJ1dGU+KCRwcm9w
ZXJ0eV9hdHRyaWJ1dGVzKSI7CisgICAgICB9CisgICAgICAKKyAgICAgIGlmICgkdGVtcGxhdGUg
ZXEgInByb3RvIiAmJiAkY29uZGl0aW9uYWwgZXEgIiIgJiYgJHNpZ25hdHVyZSBlcSAiZGVmYXVs
dF9zaWduYXR1cmUiICYmICRwcm9wZXJ0eV9hdHRyaWJ1dGVzIGVxICIiKSB7CisgICAgICAgICAg
IyBTdGFuZGFyZCB0eXBlIG9mIGNhbGxiYWNrLCBhbHJlYWR5IGNyZWF0ZWQgaW4gdGhlIGJhdGNo
LCBzbyBza2lwIGl0IGhlcmUuCisgICAgICAgICAgbmV4dDsKKyAgICAgIH0KKyAgICAgIAogICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsIDw8RU5EKTsKLQotICAvLyAkY29tbWVudEluZm8KLSAgJGNv
bmRpdGlvbmFsICR7dGVtcGxhdGV9LT5TZXQoCi0gICAgICB2ODo6U3RyaW5nOjpOZXcoIiRuYW1l
IiksCi0gICAgICAkdGVtcGxhdGVGdW5jdGlvbiwKLSAgICAgIHN0YXRpY19jYXN0PHY4OjpQcm9w
ZXJ0eUF0dHJpYnV0ZT4oJHByb3BlcnR5X2F0dHJpYnV0ZXMpKTsKKyAgJHtjb25kaXRpb25hbH12
OENyZWF0ZUNhbGxiYWNrKCR0ZW1wbGF0ZSwgIiRuYW1lIiwgJGNhbGxiYWNrLCAke3NpZ25hdHVy
ZX0kcHJvcGVydHlfYXR0cmlidXRlcyk7CiBFTkQKKyAgICAgICRudW1fY2FsbGJhY2tzKys7CiAg
ICAgfQorICAgIAorICAgIGRpZSAiV3JvbmcgbnVtYmVyIG9mIGNhbGxiYWNrcyBnZW5lcmF0ZWQg
Zm9yICRpbnRlcmZhY2VOYW1lICgkbnVtX2NhbGxiYWNrcywgc2hvdWxkIGJlICR0b3RhbF9mdW5j
dGlvbnMpIiBpZiAkbnVtX2NhbGxiYWNrcyAhPSAkdG90YWxfZnVuY3Rpb25zOwogCi0gICAgIyBz
ZXQgdGhlIHN1cGVyIGRlc2NyaXB0b3IKLSAgICBmb3JlYWNoIChAeyRkYXRhTm9kZS0+cGFyZW50
c30pIHsKLSAgICAgICAgbXkgJHBhcmVudCA9ICRjb2RlR2VuZXJhdG9yLT5TdHJpcE1vZHVsZSgk
Xyk7Ci0gICAgICAgIGlmICgkcGFyZW50IGVxICJFdmVudFRhcmdldCIpIHsgbmV4dDsgfQotICAg
ICAgICAkaW1wbEluY2x1ZGVzeyJWOCR7cGFyZW50fS5oIn0gPSAxOwotICAgICAgICBteSAkcGFy
ZW50Q2xhc3NJbmRleCA9IHVjKCRjb2RlR2VuZXJhdG9yLT5TdHJpcE1vZHVsZSgkcGFyZW50KSk7
Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICBkZXNjLT5Jbmhlcml0KFY4RE9NV3JhcHBl
cjo6Z2V0VGVtcGxhdGUoVjhDbGFzc0luZGV4Ojoke3BhcmVudENsYXNzSW5kZXh9KSk7XG4iKTsK
LSAgICAgICAgbGFzdDsKLSAgICB9Ci0KLSAgICAjIFNldCB0aGUgY2xhc3MgbmFtZS4gIFRoaXMg
aXMgdXNlZCB3aGVuIHByaW50aW5nIG9iamVjdHMuCi0gICAgcHVzaChAaW1wbENvbnRlbnQsICIg
IGRlc2MtPlNldENsYXNzTmFtZSh2ODo6U3RyaW5nOjpOZXcoXCIke2ludGVyZmFjZU5hbWV9XCIp
KTtcbiIpOwotCiAgICAgaWYgKCRoYXNfY29uc3RhbnRzKSB7CiAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCA8PEVORCk7CiAgIGJhdGNoQ29uZmlndXJlQ29uc3RhbnRzKGRlc2MsIHByb3RvLCAk
e2ludGVyZmFjZU5hbWV9X2NvbnN0cywgc2l6ZW9mKCR7aW50ZXJmYWNlTmFtZX1fY29uc3RzKS9z
aXplb2YoKiR7aW50ZXJmYWNlTmFtZX1fY29uc3RzKSk7CkBAIC0xNDEwLDE5ICsxNTA3LDEyIEBA
CiB9CiAKIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiAke2NsYXNzTmFtZX06
OkdldFJhd1RlbXBsYXRlKCkgewotICBzdGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9u
VGVtcGxhdGU+ICR7Y2xhc3NOYW1lfV9yYXdfY2FjaGVfOwotICBpZiAoJHtjbGFzc05hbWV9X3Jh
d19jYWNoZV8uSXNFbXB0eSgpKSB7Ci0gICAgdjg6OkhhbmRsZVNjb3BlIHNjb3BlOwotICAgIHY4
OjpMb2NhbDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gcmVzdWx0ID0gdjg6OkZ1bmN0aW9uVGVtcGxh
dGU6Ok5ldyhWOFByb3h5OjpjaGVja05ld0xlZ2FsKTsKLSAgICAke2NsYXNzTmFtZX1fcmF3X2Nh
Y2hlXyA9IHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPjo6TmV3KHJlc3VsdCk7
Ci0gIH0KKyAgc3RhdGljIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiAke2Ns
YXNzTmFtZX1fcmF3X2NhY2hlXyA9IHY4Q3JlYXRlUmF3VGVtcGxhdGUoKTsKICAgcmV0dXJuICR7
Y2xhc3NOYW1lfV9yYXdfY2FjaGVfOwogfQogCiB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25U
ZW1wbGF0ZT4gJHtjbGFzc05hbWV9OjpHZXRUZW1wbGF0ZSgpIHsKLSAgc3RhdGljIHY4OjpQZXJz
aXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiAke2NsYXNzTmFtZX1fY2FjaGVfOwotICBpZiAo
JHtjbGFzc05hbWV9X2NhY2hlXy5Jc0VtcHR5KCkpCi0gICAgJHtjbGFzc05hbWV9X2NhY2hlXyA9
IENvbmZpZ3VyZSR7Y2xhc3NOYW1lfVRlbXBsYXRlKEdldFJhd1RlbXBsYXRlKCkpOworICBzdGF0
aWMgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+ICR7Y2xhc3NOYW1lfV9jYWNo
ZV8gPSBDb25maWd1cmUke2NsYXNzTmFtZX1UZW1wbGF0ZShHZXRSYXdUZW1wbGF0ZSgpKTsKICAg
cmV0dXJuICR7Y2xhc3NOYW1lfV9jYWNoZV87CiB9CiAKQEAgLTE1NDcsNyArMTYzNyw3IEBACiAg
ICAgICAgICMgYXBwZW5kQ2hpbGQgZnVuY3Rpb25zIGZyb20gTm9kZS4KICAgICAgICAgJHJlc3Vs
dCAuPSAkaW5kZW50IC4gImJvb2wgc3VjY2VzcyA9ICRmdW5jdGlvblN0cmluZztcbiI7CiAgICAg
ICAgIGlmIChAeyRmdW5jdGlvbi0+cmFpc2VzRXhjZXB0aW9uc30pIHsKLSAgICAgICAgICAgICRy
ZXN1bHQgLj0gR2VuZXJhdGVTZXRET01FeGNlcHRpb24oJGluZGVudCk7CisgICAgICAgICAgICAk
cmVzdWx0IC49ICRpbmRlbnQgLiAiaWYgKFVOTElLRUxZKGVjKSkgZ290byBmYWlsO1xuIjsKICAg
ICAgICAgfQogICAgICAgICAkcmVzdWx0IC49ICRpbmRlbnQgLiAiaWYgKHN1Y2Nlc3MpXG4iOwog
ICAgICAgICAkcmVzdWx0IC49ICRpbmRlbnQgLiAiICAgICIgLgpAQCAtMTU3MSw3ICsxNjYxLDcg
QEAKICAgICB9CiAKICAgICBpZiAoQHskZnVuY3Rpb24tPnJhaXNlc0V4Y2VwdGlvbnN9KSB7Ci0g
ICAgICAgICRyZXN1bHQgLj0gR2VuZXJhdGVTZXRET01FeGNlcHRpb24oJGluZGVudCk7CisgICAg
ICAgICRyZXN1bHQgLj0gJGluZGVudCAuICJpZiAoVU5MSUtFTFkoZWMpKSBnb3RvIGZhaWw7XG4i
OwogICAgIH0KIAogICAgICMgSWYgdGhlIHJldHVybiB0eXBlIGlzIGEgUE9EIHR5cGUsIHNlcGFy
YXRlIG91dCB0aGUgd3JhcHBlciBnZW5lcmF0aW9uCkBAIC0xNjI5LDcgKzE3MTksNyBAQAogICAg
IG15ICRzaWduYXR1cmUgPSBzaGlmdDsKIAogICAgIG15ICR0eXBlID0gJGNvZGVHZW5lcmF0b3It
PlN0cmlwTW9kdWxlKCRzaWduYXR1cmUtPnR5cGUpOwotICAgIGlmICgoJHR5cGUgZXEgIkRPTVN0
cmluZyIpICYmICRzaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJIaW50QXRvbWljIn0p
IHsKKyAgICBpZiAoKCR0eXBlIGVxICJET01TdHJpbmciKSAmJiAoJHNpZ25hdHVyZS0+ZXh0ZW5k
ZWRBdHRyaWJ1dGVzLT57IkhpbnRBdG9taWMifSB8fCAkc2lnbmF0dXJlLT5leHRlbmRlZEF0dHJp
YnV0ZXMtPnsiUmVmbGVjdCJ9KSkgewogICAgICAgICAkdHlwZSA9ICJBdG9taWNTdHJpbmciOwog
ICAgIH0KIApAQCAtMTkyNiwxMCArMjAxNiwxNSBAQAogICAgICAgICByZXR1cm4gInY4VmFsdWVU
b0F0b21pY1dlYkNvcmVTdHJpbmcoJHZhbHVlKSI7CiAgICAgfQogCi0gICAgcmV0dXJuICJ0b1dl
YkNvcmVTdHJpbmcoJHZhbHVlKSIgaWYgJHR5cGUgZXEgIkRPTVVzZXJEYXRhIjsKKyAgICBpZiAo
JHR5cGUgZXEgIkRPTVVzZXJEYXRhIikgeworICAgICAgICByZXR1cm4gInRvV2ViQ29yZVN0cmlu
ZyhhcmdzLCAkMSkiIGlmICR2YWx1ZSA9fiAvYXJnc1xbKFxkKyldLzsKKyAgICAgICAgcmV0dXJu
ICJ0b1dlYkNvcmVTdHJpbmcoJHZhbHVlKSI7CisgICAgfQogICAgIGlmICgkdHlwZSBlcSAiRE9N
U3RyaW5nIikgewogICAgICAgICByZXR1cm4gInRvV2ViQ29yZVN0cmluZ1dpdGhOdWxsQ2hlY2so
JHZhbHVlKSIgaWYgJHNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNvbnZlcnROdWxs
VG9OdWxsU3RyaW5nIn07CiAgICAgICAgIHJldHVybiAidG9XZWJDb3JlU3RyaW5nV2l0aE51bGxP
clVuZGVmaW5lZENoZWNrKCR2YWx1ZSkiIGlmICRzaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRl
cy0+eyJDb252ZXJ0VW5kZWZpbmVkT3JOdWxsVG9OdWxsU3RyaW5nIn07CisgICAgICAgIAorICAg
ICAgICByZXR1cm4gInRvV2ViQ29yZVN0cmluZyhhcmdzLCAkMSkiIGlmICR2YWx1ZSA9fiAvYXJn
c1xbKFxkKyldLzsKICAgICAgICAgcmV0dXJuICJ0b1dlYkNvcmVTdHJpbmcoJHZhbHVlKSI7CiAg
ICAgfQogCkBAIC0xOTU2LDcgKzIwNTEsNyBAQAogICAgICAgICAkaW1wbEluY2x1ZGVzeyJWOE5v
ZGUuaCJ9ID0gMTsKIAogICAgICAgICAjIEV2ZW50VGFyZ2V0IGlzIG5vdCBpbiBET00gaGllcmFy
Y2h5LCBidXQgYWxsIE5vZGVzIGFyZSBFdmVudFRhcmdldC4KLSAgICAgICAgcmV0dXJuICJWOE5v
ZGU6Okhhc0luc3RhbmNlKCR2YWx1ZSkgPyBWOERPTVdyYXBwZXI6OmNvbnZlcnRET01XcmFwcGVy
VG9Ob2RlPE5vZGU+KHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QoJHZhbHVlKSkgOiAwIjsK
KyAgICAgICAgcmV0dXJuICJWOE5vZGU6Okhhc0luc3RhbmNlKCR2YWx1ZSkgPyB2OERPTVdyYXBw
ZXJUb05vZGU8Tm9kZT4odjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdCgkdmFsdWUpKSA6IDAi
OwogICAgIH0KIAogICAgIGlmICgkdHlwZSBlcSAiWFBhdGhOU1Jlc29sdmVyIikgewpAQCAtMTk3
MSw3ICsyMDY2LDcgQEAKIAogICAgICAgICAjIFBlcmZvcm0gdHlwZSBjaGVja3Mgb24gdGhlIHBh
cmFtZXRlciwgaWYgaXQgaXMgZXhwZWN0ZWQgTm9kZSB0eXBlLAogICAgICAgICAjIHJldHVybiBO
VUxMLgotICAgICAgICByZXR1cm4gIlY4JHt0eXBlfTo6SGFzSW5zdGFuY2UoJHZhbHVlKSA/IFY4
RE9NV3JhcHBlcjo6Y29udmVydERPTVdyYXBwZXJUb05vZGU8JHt0eXBlfT4odjg6OkhhbmRsZTx2
ODo6T2JqZWN0Pjo6Q2FzdCgkdmFsdWUpKSA6IDAiOworICAgICAgICByZXR1cm4gIlY4JHt0eXBl
fTo6SGFzSW5zdGFuY2UoJHZhbHVlKSA/IHY4RE9NV3JhcHBlclRvTm9kZTwke3R5cGV9Pih2ODo6
SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KCR2YWx1ZSkpIDogMCI7CiAgICAgfSBlbHNlIHsKICAg
ICAgICAgIyBUT0RPOiBUZW1wb3JhcnkgdG8gYXZvaWQgV2luZG93IG5hbWUgY29uZmxpY3QuCiAg
ICAgICAgIG15ICRjbGFzc0luZGV4ID0gdWMoJHR5cGUpOwpAQCAtMTk5MCw3ICsyMDg1LDcgQEAK
IAogICAgICAgICAjIFBlcmZvcm0gdHlwZSBjaGVja3Mgb24gdGhlIHBhcmFtZXRlciwgaWYgaXQg
aXMgZXhwZWN0ZWQgTm9kZSB0eXBlLAogICAgICAgICAjIHJldHVybiBOVUxMLgotICAgICAgICBy
ZXR1cm4gIlY4JHt0eXBlfTo6SGFzSW5zdGFuY2UoJHZhbHVlKSA/IFY4RE9NV3JhcHBlcjo6Y29u
dmVydFRvTmF0aXZlT2JqZWN0PCR7aW1wbENsYXNzTmFtZX0+KFY4Q2xhc3NJbmRleDo6JHtjbGFz
c0luZGV4fSwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdCgkdmFsdWUpKSA6IDAiOworICAg
ICAgICByZXR1cm4gIlY4JHt0eXBlfTo6SGFzSW5zdGFuY2UoJHZhbHVlKSA/IHY4RE9NV3JhcHBl
clRvPCR7aW1wbENsYXNzTmFtZX0+KFY4Q2xhc3NJbmRleDo6JHtjbGFzc0luZGV4fSwgdjg6Okhh
bmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdCgkdmFsdWUpKSA6IDAiOwogICAgIH0KIH0KIApAQCAtMjEy
Myw4ICsyMjE4LDggQEAKICAgICBteSAkY2xhc3NOYW1lPSAiVjgkdHlwZSI7CiAKICAgICByZXR1
cm4gInJldHVybiB2ODo6RGF0ZTo6TmV3KHN0YXRpY19jYXN0PGRvdWJsZT4oJHZhbHVlKSkiIGlm
ICR0eXBlIGVxICJET01UaW1lU3RhbXAiOwotICAgIHJldHVybiAicmV0dXJuICR2YWx1ZSA/IHY4
OjpUcnVlKCkgOiB2ODo6RmFsc2UoKSIgaWYgJHR5cGUgZXEgImJvb2xlYW4iOwotICAgIHJldHVy
biAicmV0dXJuIHY4OjpVbmRlZmluZWQoKSIgaWYgJHR5cGUgZXEgInZvaWQiOworICAgIHJldHVy
biAicmV0dXJuIHY4Qm9vbGVhbigkdmFsdWUpIiBpZiAkdHlwZSBlcSAiYm9vbGVhbiI7CisgICAg
cmV0dXJuICJyZXR1cm4gdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCkiIGlmICR0eXBlIGVxICJ2b2lk
IjsgICAgICMgZXF1aXZhbGVudCB0byB2ODo6VW5kZWZpbmVkKCkKIAogICAgICMgRm9yIGFsbCB0
aGUgdHlwZXMgd2hlcmUgd2UgdXNlICdpbnQnIGFzIHRoZSByZXByZXNlbnRhdGlvbiB0eXBlLAog
ICAgICMgd2UgdXNlIEludGVnZXI6Ok5ldyB3aGljaCBoYXMgYSBmYXN0IFNtaSBjb252ZXJzaW9u
IGNoZWNrLgpJbmRleDogL1ZvbHVtZXMvWXR0cml1bS9zcmMvdGhpcmRfcGFydHkvV2ViS2l0L1dl
YkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSAvVm9sdW1l
cy9ZdHRyaXVtL3NyYy90aGlyZF9wYXJ0eS9XZWJLaXQvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERP
TVdyYXBwZXIuY3BwCShyZXZpc2lvbiA1MDY2NCkKKysrIC9Wb2x1bWVzL1l0dHJpdW0vc3JjL3Ro
aXJkX3BhcnR5L1dlYktpdC9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJDYW52YXNBcnJheS5oIgog
I2luY2x1ZGUgIkNTU011dGFibGVTdHlsZURlY2xhcmF0aW9uLmgiCiAjaW5jbHVkZSAiQ2hyb21p
dW1CcmlkZ2UuaCIKKyNpbmNsdWRlICJET01EYXRhLmgiCiAjaW5jbHVkZSAiRE9NT2JqZWN0c0lu
Y2x1ZGUuaCIKICNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgogI2luY2x1ZGUgIkZyYW1lTG9h
ZGVyQ2xpZW50LmgiCkBAIC0xMzA0LDYgKzEzMDUsMjggQEAKIAogICAgIHJldHVybiB3cmFwcGVy
OwogfQorICAgIAordjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4RE9NV3JhcHBlcjo6Y29udmVydE5v
ZGVUb1Y4T2JqZWN0KE5vZGUqIG5vZGUpCit7CisgICAgaWYgKCFub2RlKQorICAgICAgICByZXR1
cm4gdjg6Ok51bGwoKTsKKyAgICAKKyAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBub2RlLT5kb2N1
bWVudCgpOworICAgIGlmIChub2RlID09IGRvY3VtZW50KQorICAgICAgICByZXR1cm4gY29udmVy
dERvY3VtZW50VG9WOE9iamVjdChkb2N1bWVudCk7CisgICAgCisgICAgRE9NV3JhcHBlck1hcDxO
b2RlPiYgZG9tTm9kZU1hcCA9IGdldERPTU5vZGVNYXAoKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpP
YmplY3Q+IHdyYXBwZXIgPSBkb21Ob2RlTWFwLmdldChub2RlKTsKKyAgICBpZiAod3JhcHBlci5J
c0VtcHR5KCkpCisgICAgICAgIHJldHVybiBjb252ZXJ0TmV3Tm9kZVRvVjhPYmplY3Qobm9kZSwg
MCwgZG9tTm9kZU1hcCk7CisgICAgCisgICAgcmV0dXJuIHdyYXBwZXI7Cit9CisgICAgCit2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4gVjhET01XcmFwcGVyOjpjb252ZXJ0TmV3Tm9kZVRvVjhPYmplY3Qo
Tm9kZSogbm9kZSkKK3sKKyAgICByZXR1cm4gY29udmVydE5ld05vZGVUb1Y4T2JqZWN0KG5vZGUs
IDAsIGdldERPTU5vZGVNYXAoKSk7Cit9CiAKIC8vIENhbGxlciBjaGVja3Mgbm9kZSBpcyBub3Qg
bnVsbC4KIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOERPTVdyYXBwZXI6OmNvbnZlcnROZXdOb2Rl
VG9WOE9iamVjdChOb2RlKiBub2RlLCBWOFByb3h5KiBwcm94eSwgRE9NV3JhcHBlck1hcDxOb2Rl
PiYgZG9tTm9kZU1hcCkKSW5kZXg6IC9Wb2x1bWVzL1l0dHJpdW0vc3JjL3RoaXJkX3BhcnR5L1dl
YktpdC9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSAvVm9sdW1l
cy9ZdHRyaXVtL3NyYy90aGlyZF9wYXJ0eS9XZWJLaXQvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFBy
b3h5LmgJKHJldmlzaW9uIDUwNjY0KQorKysgL1ZvbHVtZXMvWXR0cml1bS9zcmMvdGhpcmRfcGFy
dHkvV2ViS2l0L1dlYkNvcmUvYmluZGluZ3MvdjgvVjhQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDIsNiArMTAyLDE3IEBACiAKICAgICB2b2lkIGJhdGNoQ29uZmlndXJlQ29uc3RhbnRzKHY4
OjpIYW5kbGU8djg6OkZ1bmN0aW9uVGVtcGxhdGU+LCB2ODo6SGFuZGxlPHY4OjpPYmplY3RUZW1w
bGF0ZT4sIGNvbnN0IEJhdGNoZWRDb25zdGFudCosIHNpemVfdCBjb25zdGFudENvdW50KTsKIAor
ICAgIHN0cnVjdCBCYXRjaGVkQ2FsbGJhY2sgeworICAgICAgICBjb25zdCBjaGFyKiBjb25zdCBu
YW1lOworICAgICAgICB2ODo6SW52b2NhdGlvbkNhbGxiYWNrIGNhbGxiYWNrOworICAgIH07CisK
KyAgICB2b2lkIGJhdGNoQ29uZmlndXJlQ2FsbGJhY2tzKHY4OjpIYW5kbGU8djg6Ok9iamVjdFRl
bXBsYXRlPiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ODo6SGFuZGxlPHY4
OjpTaWduYXR1cmU+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdjg6OlByb3Bl
cnR5QXR0cmlidXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQmF0
Y2hlZENhbGxiYWNrKiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qg
Y2FsbGJhY2tDb3VudCk7CisKICAgICBjb25zdCBpbnQga01heFJlY3Vyc2lvbkRlcHRoID0gMjA7
CiAKICAgICAvLyBJbmZvcm1hdGlvbiBhYm91dCBhbiBleHRlbnNpb24gdGhhdCBpcyByZWdpc3Rl
cmVkIGZvciB1c2Ugd2l0aCBWOC4gSWYKSW5kZXg6IC9Wb2x1bWVzL1l0dHJpdW0vc3JjL3RoaXJk
X3BhcnR5L1dlYktpdC9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIC9Wb2x1bWVzL1l0dHJpdW0vc3JjL3RoaXJkX3BhcnR5L1dlYktpdC9XZWJDb3JlL2JpbmRp
bmdzL3Y4L1Y4UHJveHkuY3BwCShyZXZpc2lvbiA1MDY2NCkKKysrIC9Wb2x1bWVzL1l0dHJpdW0v
c3JjL3RoaXJkX3BhcnR5L1dlYktpdC9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC03MiwxNCArNzIsMzUgQEAKIGNvbnN0IGNoYXIqIFY4UHJveHk6OmtD
b250ZXh0RGVidWdEYXRhVHlwZSA9ICJ0eXBlIjsKIGNvbnN0IGNoYXIqIFY4UHJveHk6OmtDb250
ZXh0RGVidWdEYXRhVmFsdWUgPSAidmFsdWUiOwogCi12b2lkIGJhdGNoQ29uZmlndXJlQXR0cmli
dXRlcyh2ODo6SGFuZGxlPHY4OjpPYmplY3RUZW1wbGF0ZT4gaW5zdGFuY2UsIHY4OjpIYW5kbGU8
djg6Ok9iamVjdFRlbXBsYXRlPiBwcm90bywgY29uc3QgQmF0Y2hlZEF0dHJpYnV0ZSogYXR0cmli
dXRlcywgc2l6ZV90IGF0dHJpYnV0ZUNvdW50KQordm9pZCBiYXRjaENvbmZpZ3VyZUF0dHJpYnV0
ZXModjg6OkhhbmRsZTx2ODo6T2JqZWN0VGVtcGxhdGU+IGluc3RhbmNlLCAKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdFRlbXBsYXRlPiBwcm90bywg
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBCYXRjaGVkQXR0cmlidXRlKiBh
dHRyaWJ1dGVzLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBhdHRyaWJ1
dGVDb3VudCkKIHsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGF0dHJpYnV0ZUNvdW50OyAr
K2kpCiAgICAgICAgIGNvbmZpZ3VyZUF0dHJpYnV0ZShpbnN0YW5jZSwgcHJvdG8sIGF0dHJpYnV0
ZXNbaV0pOwogfQogCi12b2lkIGJhdGNoQ29uZmlndXJlQ29uc3RhbnRzKHY4OjpIYW5kbGU8djg6
OkZ1bmN0aW9uVGVtcGxhdGU+IGZ1bmN0aW9uRGVzY3JpcHRvciwgdjg6OkhhbmRsZTx2ODo6T2Jq
ZWN0VGVtcGxhdGU+IHByb3RvLCBjb25zdCBCYXRjaGVkQ29uc3RhbnQqIGNvbnN0YW50cywgc2l6
ZV90IGNvbnN0YW50Q291bnQpCit2b2lkIGJhdGNoQ29uZmlndXJlQ2FsbGJhY2tzKHY4OjpIYW5k
bGU8djg6Ok9iamVjdFRlbXBsYXRlPiBwcm90bywgCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHY4OjpIYW5kbGU8djg6OlNpZ25hdHVyZT4gc2lnbmF0dXJlLCAKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdjg6OlByb3BlcnR5QXR0cmlidXRlIGF0dHJpYnV0ZXMsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEJhdGNoZWRDYWxsYmFjayogY2FsbGJhY2tzLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgY2FsbGJhY2tDb3VudCkKIHsKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNhbGxiYWNrQ291bnQ7ICsraSkgeworICAgICAgICBw
cm90by0+U2V0KHY4OjpTdHJpbmc6Ok5ldyhjYWxsYmFja3NbaV0ubmFtZSksCisgICAgICAgICAg
ICAgICAgICAgdjg6OkZ1bmN0aW9uVGVtcGxhdGU6Ok5ldyhjYWxsYmFja3NbaV0uY2FsbGJhY2ss
IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzaWduYXR1cmUpLAorICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMpOworICAgIH0K
K30KKwordm9pZCBiYXRjaENvbmZpZ3VyZUNvbnN0YW50cyh2ODo6SGFuZGxlPHY4OjpGdW5jdGlv
blRlbXBsYXRlPiBmdW5jdGlvbkRlc2NyaXB0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdFRlbXBsYXRlPiBwcm90bywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgQmF0Y2hlZENvbnN0YW50KiBjb25zdGFudHMsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBjb25zdGFudENvdW50KQorewogICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgY29uc3RhbnRDb3VudDsgKytpKSB7CiAgICAgICAgIGNvbnN0IEJh
dGNoZWRDb25zdGFudCogY29uc3RhbnQgPSAmY29uc3RhbnRzW2ldOwogICAgICAgICBmdW5jdGlv
bkRlc2NyaXB0b3ItPlNldCh2ODo6U3RyaW5nOjpOZXcoY29uc3RhbnQtPm5hbWUpLCB2ODo6SW50
ZWdlcjo6TmV3KGNvbnN0YW50LT52YWx1ZSksIHY4OjpSZWFkT25seSk7CkluZGV4OiAvVm9sdW1l
cy9ZdHRyaXVtL3NyYy90aGlyZF9wYXJ0eS9XZWJLaXQvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERP
TVdyYXBwZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSAvVm9sdW1lcy9ZdHRyaXVtL3NyYy90aGlyZF9wYXJ0
eS9XZWJLaXQvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdyYXBwZXIuaAkocmV2aXNpb24gNTA2
NjQpCisrKyAvVm9sdW1lcy9ZdHRyaXVtL3NyYy90aGlyZF9wYXJ0eS9XZWJLaXQvV2ViQ29yZS9i
aW5kaW5ncy92OC9WOERPTVdyYXBwZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTQ3LDIzICsxNDcs
OCBAQAogICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnROb2RlVG9WOE9iamVjdChub2RlLmdldCgp
KTsKICAgICAgICAgfQogCi0gICAgICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY29u
dmVydE5vZGVUb1Y4T2JqZWN0KE5vZGUqIG5vZGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlm
ICghbm9kZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gdjg6Ok51bGwoKTsKKyAgICAgICAgc3Rh
dGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjb252ZXJ0Tm9kZVRvVjhPYmplY3QoTm9kZSogbm9k
ZSk7CiAKLSAgICAgICAgICAgIERvY3VtZW50KiBkb2N1bWVudCA9IG5vZGUtPmRvY3VtZW50KCk7
Ci0gICAgICAgICAgICBpZiAobm9kZSA9PSBkb2N1bWVudCkKLSAgICAgICAgICAgICAgICByZXR1
cm4gY29udmVydERvY3VtZW50VG9WOE9iamVjdChkb2N1bWVudCk7Ci0KLSAgICAgICAgICAgIERP
TVdyYXBwZXJNYXA8Tm9kZT4mIGRvbU5vZGVNYXAgPSBnZXRET01Ob2RlTWFwKCk7Ci0gICAgICAg
ICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBwZXIgPSBkb21Ob2RlTWFwLmdldChub2Rl
KTsKLSAgICAgICAgICAgIGlmICh3cmFwcGVyLklzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gY29udmVydE5ld05vZGVUb1Y4T2JqZWN0KG5vZGUsIDAsIGRvbU5vZGVNYXApOwotCi0g
ICAgICAgICAgICByZXR1cm4gd3JhcHBlcjsKLSAgICAgICAgfQotCiAgICAgICAgIHN0YXRpYyB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY29udmVydERvY3VtZW50VG9WOE9iamVjdChEb2N1bWVudCop
OwogCiAgICAgICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY29udmVydE5ld05vZGVU
b1Y4T2JqZWN0KFBhc3NSZWZQdHI8Tm9kZT4gbm9kZSkKQEAgLTE3MSwxMCArMTU2LDcgQEAKICAg
ICAgICAgICAgIHJldHVybiBjb252ZXJ0TmV3Tm9kZVRvVjhPYmplY3Qobm9kZS5nZXQoKSk7CiAg
ICAgICAgIH0KIAotICAgICAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNvbnZlcnRO
ZXdOb2RlVG9WOE9iamVjdChOb2RlKiBub2RlKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm4gY29udmVydE5ld05vZGVUb1Y4T2JqZWN0KG5vZGUsIDAsIGdldERPTU5vZGVNYXAoKSk7Ci0g
ICAgICAgIH0KKyAgICAgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjb252ZXJ0TmV3
Tm9kZVRvVjhPYmplY3QoTm9kZSopOwogCiAgICAgICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gY29udmVydE5ld05vZGVUb1Y4T2JqZWN0KE5vZGUqLCBWOFByb3h5KiwgRE9NV3JhcHBl
ck1hcDxOb2RlPiYpOwogCkluZGV4OiAvVm9sdW1lcy9ZdHRyaXVtL3NyYy90aGlyZF9wYXJ0eS9X
ZWJLaXQvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFV0aWxpdGllcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIC9W
b2x1bWVzL1l0dHJpdW0vc3JjL3RoaXJkX3BhcnR5L1dlYktpdC9XZWJDb3JlL2JpbmRpbmdzL3Y4
L1Y4VXRpbGl0aWVzLmgJKHJldmlzaW9uIDUwNjY0KQorKysgL1ZvbHVtZXMvWXR0cml1bS9zcmMv
dGhpcmRfcGFydHkvV2ViS2l0L1dlYkNvcmUvYmluZGluZ3MvdjgvVjhVdGlsaXRpZXMuaAkod29y
a2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKyAg
ICBjbGFzcyBFdmVudExpc3RlbmVyOwogICAgIGNsYXNzIEZyYW1lOwogICAgIGNsYXNzIEtVUkw7
CiAgICAgY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKQEAgLTQ0LDcgKzQ1LDEwIEBACiAg
ICAgLy8gVXNlIGFuIGFycmF5IHRvIGhvbGQgZGVwZW5kZW50cy4gSXQgd29ya3MgbGlrZSBhIHJl
Zi1jb3VudGVkIHNjaGVtZS4gQSB2YWx1ZSBjYW4gYmUgYWRkZWQgbW9yZSB0aGFuIG9uY2UgdG8g
dGhlIERPTSBvYmplY3QuCiAgICAgdm9pZCBjcmVhdGVIaWRkZW5EZXBlbmRlbmN5KHY4OjpIYW5k
bGU8djg6Ok9iamVjdD4sIHY4OjpMb2NhbDx2ODo6VmFsdWU+LCBpbnQgY2FjaGVJbmRleCk7CiAg
ICAgdm9pZCByZW1vdmVIaWRkZW5EZXBlbmRlbmN5KHY4OjpIYW5kbGU8djg6Ok9iamVjdD4sIHY4
OjpMb2NhbDx2ODo6VmFsdWU+LCBpbnQgY2FjaGVJbmRleCk7Ci0KKyAgICAKKyAgICAvLyBDb21i
byBjcmVhdGUvcmVtb3ZlLCBmb3IgZ2VuZXJhdGVkIGV2ZW50LWhhbmRsZXItc2V0dGVyIGJpbmRp
bmdzOgorICAgIHZvaWQgdHJhbnNmZXJIaWRkZW5EZXBlbmRlbmN5KHY4OjpIYW5kbGU8djg6Ok9i
amVjdD4sIEV2ZW50TGlzdGVuZXIqIG9sZFZhbHVlLCB2ODo6TG9jYWw8djg6OlZhbHVlPiBuZXdW
YWx1ZSwgaW50IGNhY2hlSW5kZXgpOworICAgIAogICAgIGJvb2wgcHJvY2Vzc2luZ1VzZXJHZXN0
dXJlKCk7CiAgICAgYm9vbCBzaG91bGRBbGxvd05hdmlnYXRpb24oRnJhbWUqKTsKICAgICBLVVJM
IGNvbXBsZXRlVVJMKGNvbnN0IFN0cmluZyYgcmVsYXRpdmVVUkwpOwpJbmRleDogL1ZvbHVtZXMv
WXR0cml1bS9zcmMvdGhpcmRfcGFydHkvV2ViS2l0L1dlYkNvcmUvYmluZGluZ3MvdjgvVjhCaW5k
aW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSAvVm9sdW1lcy9ZdHRyaXVtL3NyYy90aGlyZF9wYXJ0eS9X
ZWJLaXQvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEJpbmRpbmcuY3BwCShyZXZpc2lvbiA1MDY2NCkK
KysrIC9Wb2x1bWVzL1l0dHJpdW0vc3JjL3RoaXJkX3BhcnR5L1dlYktpdC9XZWJDb3JlL2JpbmRp
bmdzL3Y4L1Y4QmluZGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDggKzMzLDEwIEBACiAK
ICNpbmNsdWRlICJBdG9taWNTdHJpbmcuaCIKICNpbmNsdWRlICJDU3RyaW5nLmgiCisjaW5jbHVk
ZSAiRWxlbWVudC5oIgogI2luY2x1ZGUgIk1hdGhFeHRyYXMuaCIKICNpbmNsdWRlICJQbGF0Zm9y
bVN0cmluZy5oIgorI2luY2x1ZGUgIlF1YWxpZmllZE5hbWUuaCIKICNpbmNsdWRlICJTdGRMaWJF
eHRyYXMuaCIKICNpbmNsdWRlICJTdHJpbmdCdWZmZXIuaCIKICNpbmNsdWRlICJTdHJpbmdIYXNo
LmgiCkBAIC0xMjgsMTMgKzEzMCwxMjIgQEAKICNlbmRpZgogfTsKIAotZW51bSBFeHRlcm5hbE1v
ZGUgewotICAgIEV4dGVybmFsaXplLAotICAgIERvTm90RXh0ZXJuYWxpemUKLX07CiAKK3ZvaWQq
IHY4RE9NV3JhcHBlclRvTmF0aXZlKHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gb2JqZWN0KSB7Cisg
ICAgcmV0dXJuIG9iamVjdC0+R2V0UG9pbnRlckZyb21JbnRlcm5hbEZpZWxkKFY4Q3VzdG9tOjpr
RE9NV3JhcHBlck9iamVjdEluZGV4KTsKK30KKyAgICAKK3ZvaWQqIHY4RE9NV3JhcHBlclRvTmF0
aXZlKGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pIHsKKyAgICByZXR1cm4gaW5mby5Ib2xk
ZXIoKS0+R2V0UG9pbnRlckZyb21JbnRlcm5hbEZpZWxkKFY4Q3VzdG9tOjprRE9NV3JhcHBlck9i
amVjdEluZGV4KTsKK30KKyAgICAKKworU3RyaW5nIHY4VmFsdWVUb1dlYkNvcmVTdHJpbmcodjg6
OkhhbmRsZTx2ODo6VmFsdWU+IHZhbHVlKQoreworICAgIGlmICh2YWx1ZS0+SXNTdHJpbmcoKSkK
KyAgICAgICAgcmV0dXJuIHY4U3RyaW5nVG9XZWJDb3JlU3RyaW5nKHY4OjpIYW5kbGU8djg6OlN0
cmluZz46OkNhc3QodmFsdWUpKTsKKyAgICByZXR1cm4gdjhOb25TdHJpbmdWYWx1ZVRvV2ViQ29y
ZVN0cmluZyh2YWx1ZSk7Cit9CisKK0F0b21pY1N0cmluZyB2OFZhbHVlVG9BdG9taWNXZWJDb3Jl
U3RyaW5nKHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUtPklz
U3RyaW5nKCkpCisgICAgICAgIHJldHVybiB2OFN0cmluZ1RvQXRvbWljV2ViQ29yZVN0cmluZyh2
ODo6SGFuZGxlPHY4OjpTdHJpbmc+OjpDYXN0KHZhbHVlKSk7CisgICAgcmV0dXJuIHY4Tm9uU3Ry
aW5nVmFsdWVUb0F0b21pY1dlYkNvcmVTdHJpbmcodmFsdWUpOworfQorCitpbnQgdG9JbnQzMih2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUsIGJvb2wmIG9rKQoreworICAgIG9rID0gdHJ1ZTsK
KyAgICAKKyAgICAvLyBGYXN0IGNhc2UuICBUaGUgdmFsdWUgaXMgYWxyZWFkeSBhIDMyLWJpdCBp
bnRlZ2VyLgorICAgIGlmICh2YWx1ZS0+SXNJbnQzMigpKQorICAgICAgICByZXR1cm4gdmFsdWUt
PkludDMyVmFsdWUoKTsKKyAgICAKKyAgICAvLyBDYW4gdGhlIHZhbHVlIGJlIGNvbnZlcnRlZCB0
byBhIG51bWJlcj8KKyAgICB2ODo6TG9jYWw8djg6Ok51bWJlcj4gbnVtYmVyT2JqZWN0ID0gdmFs
dWUtPlRvTnVtYmVyKCk7CisgICAgaWYgKG51bWJlck9iamVjdC5Jc0VtcHR5KCkpIHsKKyAgICAg
ICAgb2sgPSBmYWxzZTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIAorICAgIC8vIERv
ZXMgdGhlIHZhbHVlIGNvbnZlcnQgdG8gbmFuIG9yIHRvIGFuIGluZmluaXR5PworICAgIGRvdWJs
ZSBudW1iZXJWYWx1ZSA9IG51bWJlck9iamVjdC0+VmFsdWUoKTsKKyAgICBpZiAoaXNuYW4obnVt
YmVyVmFsdWUpIHx8IGlzaW5mKG51bWJlclZhbHVlKSkgeworICAgICAgICBvayA9IGZhbHNlOwor
ICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgCisgICAgLy8gQ2FuIHRoZSB2YWx1ZSBiZSBj
b252ZXJ0ZWQgdG8gYSAzMi1iaXQgaW50ZWdlcj8KKyAgICB2ODo6TG9jYWw8djg6OkludDMyPiBp
bnRWYWx1ZSA9IHZhbHVlLT5Ub0ludDMyKCk7CisgICAgaWYgKGludFZhbHVlLklzRW1wdHkoKSkg
eworICAgICAgICBvayA9IGZhbHNlOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgCisg
ICAgLy8gUmV0dXJuIHRoZSByZXN1bHQgb2YgdGhlIGludDMyIGNvbnZlcnNpb24uCisgICAgcmV0
dXJuIGludFZhbHVlLT5WYWx1ZSgpOworfQorICAgIAorU3RyaW5nIHRvV2ViQ29yZVN0cmluZyhj
b25zdCB2ODo6QXJndW1lbnRzJiBhcmdzLCBpbnQgaW5kZXgpIHsKKyAgICByZXR1cm4gdjhWYWx1
ZVRvV2ViQ29yZVN0cmluZyhhcmdzW2luZGV4XSk7Cit9CisKKyAgICAKK1N0cmluZyB0b1dlYkNv
cmVTdHJpbmdXaXRoTnVsbENoZWNrKHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSkKK3sKKyAg
ICBpZiAodmFsdWUtPklzTnVsbCgpKSAKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgIHJl
dHVybiB2OFZhbHVlVG9XZWJDb3JlU3RyaW5nKHZhbHVlKTsKK30KKworQXRvbWljU3RyaW5nIHY4
VmFsdWVUb0F0b21pY1dlYkNvcmVTdHJpbmdXaXRoTnVsbENoZWNrKHY4OjpIYW5kbGU8djg6OlZh
bHVlPiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUtPklzTnVsbCgpKQorICAgICAgICByZXR1cm4g
QXRvbWljU3RyaW5nKCk7CisgICAgcmV0dXJuIHY4VmFsdWVUb0F0b21pY1dlYkNvcmVTdHJpbmco
dmFsdWUpOworfQorCitTdHJpbmcgdG9XZWJDb3JlU3RyaW5nV2l0aE51bGxPclVuZGVmaW5lZENo
ZWNrKHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUtPklzTnVs
bCgpIHx8IHZhbHVlLT5Jc1VuZGVmaW5lZCgpKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7Cisg
ICAgcmV0dXJuIHRvV2ViQ29yZVN0cmluZyh2YWx1ZSk7Cit9CisKK2Jvb2wgaXNVbmRlZmluZWRP
ck51bGwodjg6OkhhbmRsZTx2ODo6VmFsdWU+IHZhbHVlKQoreworICAgIHJldHVybiB2YWx1ZS0+
SXNOdWxsKCkgfHwgdmFsdWUtPklzVW5kZWZpbmVkKCk7Cit9CisKK3Y4OjpIYW5kbGU8djg6OkJv
b2xlYW4+IHY4Qm9vbGVhbihib29sIHZhbHVlKQoreworICAgIHJldHVybiB2YWx1ZSA/IHY4OjpU
cnVlKCkgOiB2ODo6RmFsc2UoKTsKK30KKwordjg6OkhhbmRsZTx2ODo6U3RyaW5nPiB2OFVuZGV0
ZWN0YWJsZVN0cmluZyhjb25zdCBTdHJpbmcmIHN0cikKK3sKKyAgICByZXR1cm4gdjg6OlN0cmlu
Zzo6TmV3VW5kZXRlY3RhYmxlKGZyb21XZWJDb3JlU3RyaW5nKHN0ciksIHN0ci5sZW5ndGgoKSk7
Cit9CisKK3Y4OjpIYW5kbGU8djg6OlZhbHVlPiB2OFN0cmluZ09yTnVsbChjb25zdCBTdHJpbmcm
IHN0cikKK3sKKyAgICByZXR1cm4gc3RyLmlzTnVsbCgpID8gdjg6OkhhbmRsZTx2ODo6VmFsdWU+
KHY4OjpOdWxsKCkpIDogdjg6OkhhbmRsZTx2ODo6VmFsdWU+KHY4U3RyaW5nKHN0cikpOworfQor
Cit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdjhTdHJpbmdPclVuZGVmaW5lZChjb25zdCBTdHJpbmcm
IHN0cikKK3sKKyAgICByZXR1cm4gc3RyLmlzTnVsbCgpID8gdjg6OkhhbmRsZTx2ODo6VmFsdWU+
KHY4OjpVbmRlZmluZWQoKSkgOiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4odjhTdHJpbmcoc3RyKSk7
Cit9CisKK3Y4OjpIYW5kbGU8djg6OlZhbHVlPiB2OFN0cmluZ09yRmFsc2UoY29uc3QgU3RyaW5n
JiBzdHIpCit7CisgICAgcmV0dXJuIHN0ci5pc051bGwoKSA/IHY4OjpIYW5kbGU8djg6OlZhbHVl
Pih2ODo6RmFsc2UoKSkgOiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4odjhTdHJpbmcoc3RyKSk7Cit9
CisKKwogdGVtcGxhdGUgPHR5cGVuYW1lIFN0cmluZ1R5cGU+Ci1zdGF0aWMgU3RyaW5nVHlwZSB2
OFN0cmluZ1RvV2ViQ29yZVN0cmluZyh2ODo6SGFuZGxlPHY4OjpTdHJpbmc+IHY4U3RyaW5nLCBF
eHRlcm5hbE1vZGUgZXh0ZXJuYWwpCitTdHJpbmdUeXBlIHY4U3RyaW5nVG9XZWJDb3JlU3RyaW5n
KHY4OjpIYW5kbGU8djg6OlN0cmluZz4gdjhTdHJpbmcsIEV4dGVybmFsTW9kZSBleHRlcm5hbCkK
IHsKICAgICBXZWJDb3JlU3RyaW5nUmVzb3VyY2UqIHN0cmluZ1Jlc291cmNlID0gV2ViQ29yZVN0
cmluZ1Jlc291cmNlOjp0b1N0cmluZ1Jlc291cmNlKHY4U3RyaW5nKTsKICAgICBpZiAoc3RyaW5n
UmVzb3VyY2UpCkBAIC0xNjksMTYgKzI4MCw2IEBACiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAot
U3RyaW5nIHY4U3RyaW5nVG9XZWJDb3JlU3RyaW5nKHY4OjpIYW5kbGU8djg6OlN0cmluZz4gdjhT
dHJpbmcpCi17Ci0gICAgcmV0dXJuIHY4U3RyaW5nVG9XZWJDb3JlU3RyaW5nPFN0cmluZz4odjhT
dHJpbmcsIEV4dGVybmFsaXplKTsKLX0KLQotQXRvbWljU3RyaW5nIHY4U3RyaW5nVG9BdG9taWNX
ZWJDb3JlU3RyaW5nKHY4OjpIYW5kbGU8djg6OlN0cmluZz4gdjhTdHJpbmcpCi17Ci0gICAgcmV0
dXJuIHY4U3RyaW5nVG9XZWJDb3JlU3RyaW5nPEF0b21pY1N0cmluZz4odjhTdHJpbmcsIEV4dGVy
bmFsaXplKTsKLX0KLQogU3RyaW5nIHY4Tm9uU3RyaW5nVmFsdWVUb1dlYkNvcmVTdHJpbmcodjg6
OkhhbmRsZTx2ODo6VmFsdWU+IG9iamVjdCkKIHsKICAgICBBU1NFUlQoIW9iamVjdC0+SXNTdHJp
bmcoKSk7CkBAIC0yNTQsMTMgKzM1NSwxMyBAQAogCiB2ODo6TG9jYWw8djg6OlN0cmluZz4gdjhF
eHRlcm5hbFN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZykKIHsKLSAgICBpZiAoIXN0cmluZy5s
ZW5ndGgoKSkKKyAgICBTdHJpbmdJbXBsKiBzdHJpbmdJbXBsID0gc3RyaW5nLmltcGwoKTsKKyAg
ICBpZiAoIXN0cmluZ0ltcGwgfHwgIXN0cmluZ0ltcGwtPmxlbmd0aCgpKQogICAgICAgICByZXR1
cm4gdjg6OlN0cmluZzo6RW1wdHkoKTsKIAogICAgIGlmICghc3RyaW5nSW1wbENhY2hlRW5hYmxl
ZCkKICAgICAgICAgcmV0dXJuIG1ha2VFeHRlcm5hbFN0cmluZyhzdHJpbmcpOwogCi0gICAgU3Ry
aW5nSW1wbCogc3RyaW5nSW1wbCA9IHN0cmluZy5pbXBsKCk7CiAgICAgU3RyaW5nQ2FjaGUmIHN0
cmluZ0NhY2hlID0gZ2V0U3RyaW5nQ2FjaGUoKTsKICAgICB2ODo6U3RyaW5nKiBjYWNoZWRWOFN0
cmluZyA9IHN0cmluZ0NhY2hlLmdldChzdHJpbmdJbXBsKTsKICAgICBpZiAoY2FjaGVkVjhTdHJp
bmcpCkBAIC0yODAsNSArMzgxLDY2IEBACiAKICAgICByZXR1cm4gbmV3U3RyaW5nOwogfQorICAg
IAordjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHY4Q3JlYXRlUmF3VGVtcGxh
dGUoKQoreworICAgIHY4OjpIYW5kbGVTY29wZSBzY29wZTsKKyAgICB2ODo6TG9jYWw8djg6OkZ1
bmN0aW9uVGVtcGxhdGU+IHJlc3VsdCA9IHY4OjpGdW5jdGlvblRlbXBsYXRlOjpOZXcoVjhQcm94
eTo6Y2hlY2tOZXdMZWdhbCk7CisgICAgcmV0dXJuIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlv
blRlbXBsYXRlPjo6TmV3KHJlc3VsdCk7Cit9ICAgICAgICAKIAordjg6OkxvY2FsPHY4OjpTaWdu
YXR1cmU+IHY4Q29uZmlndXJlVGVtcGxhdGUodjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVt
cGxhdGU+ZGVzYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IGNoYXIgKmludGVyZmFjZU5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBWOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5cGUgcGFyZW50Q2xhc3NJ
bmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBm
aWVsZENvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgQmF0Y2hlZEF0dHJpYnV0ZSogYXR0cmlidXRlcywgCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgYXR0cmlidXRlQ291bnQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBCYXRjaGVkQ2FsbGJh
Y2sqIGNhbGxiYWNrcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNpemVfdCBjYWxsYmFja0NvdW50KQoreworICAgIGRlc2MtPlNldENsYXNzTmFtZSh2ODo6
U3RyaW5nOjpOZXcoaW50ZXJmYWNlTmFtZSkpOworICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0VGVt
cGxhdGU+IGluc3RhbmNlID0gZGVzYy0+SW5zdGFuY2VUZW1wbGF0ZSgpOworICAgIGluc3RhbmNl
LT5TZXRJbnRlcm5hbEZpZWxkQ291bnQoZmllbGRDb3VudCk7CisgICAgaWYgKHBhcmVudENsYXNz
SW5kZXgpCisgICAgICAgIGRlc2MtPkluaGVyaXQoVjhET01XcmFwcGVyOjpnZXRUZW1wbGF0ZShw
YXJlbnRDbGFzc0luZGV4KSk7CisgICAgaWYgKGF0dHJpYnV0ZUNvdW50KQorICAgICAgICBiYXRj
aENvbmZpZ3VyZUF0dHJpYnV0ZXMoaW5zdGFuY2UsIGRlc2MtPlByb3RvdHlwZVRlbXBsYXRlKCks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzLCBhdHRyaWJ1dGVD
b3VudCk7CisgICAgdjg6OkxvY2FsPHY4OjpTaWduYXR1cmU+IGRlZmF1bHRfc2lnbmF0dXJlID0g
djg6OlNpZ25hdHVyZTo6TmV3KGRlc2MpOworICAgIGlmIChjYWxsYmFja0NvdW50KQorICAgICAg
ICBiYXRjaENvbmZpZ3VyZUNhbGxiYWNrcyhkZXNjLT5Qcm90b3R5cGVUZW1wbGF0ZSgpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0X3NpZ25hdHVyZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8djg6OlByb3BlcnR5QXR0cmlidXRl
Pih2ODo6RG9udERlbGV0ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxi
YWNrcywgY2FsbGJhY2tDb3VudCk7CisgICAgcmV0dXJuIGRlZmF1bHRfc2lnbmF0dXJlOworfQor
Cit2b2lkIHY4Q3JlYXRlQ2FsbGJhY2sodjg6OkxvY2FsPHY4OjpPYmplY3RUZW1wbGF0ZT4gcHJv
dG8sCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbmFtZSwKKyAgICAgICAgICAg
ICAgICAgICAgICB2ODo6SW52b2NhdGlvbkNhbGxiYWNrIGNhbGxiYWNrLAorICAgICAgICAgICAg
ICAgICAgICAgIHY4OjpIYW5kbGU8djg6OlNpZ25hdHVyZT4gc2lnbmF0dXJlLAorICAgICAgICAg
ICAgICAgICAgICAgIHY4OjpQcm9wZXJ0eUF0dHJpYnV0ZSBhdHRyaWJ1dGUpCit7CisgICAgcHJv
dG8tPlNldCh2ODo6U3RyaW5nOjpOZXcobmFtZSksCisgICAgICAgICAgICAgICB2ODo6RnVuY3Rp
b25UZW1wbGF0ZTo6TmV3KGNhbGxiYWNrLCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKSwgc2lnbmF0
dXJlKSwKKyAgICAgICAgICAgICAgIGF0dHJpYnV0ZSk7Cit9CisgICAgCit2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gdjhHZXRFbGVtZW50U3RyaW5nQXR0cihjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBp
bmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
UXVhbGlmaWVkTmFtZSYgbmFtZSkgCit7CisgICAgRWxlbWVudCAqaW1wID0gdjhET01XcmFwcGVy
VG9Ob2RlPEVsZW1lbnQ+KGluZm8pOworICAgIHJldHVybiB2OFN0cmluZyhpbXAtPmdldEF0dHJp
YnV0ZShuYW1lKSk7Cit9CisKK3ZvaWQgdjhTZXRFbGVtZW50U3RyaW5nQXR0cihjb25zdCB2ODo6
QWNjZXNzb3JJbmZvJiBpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFF1
YWxpZmllZE5hbWUmIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdjg6OkxvY2Fs
PHY4OjpWYWx1ZT4gdmFsdWUpCit7CisgICAgRWxlbWVudCogaW1wID0gdjhET01XcmFwcGVyVG9O
b2RlPEVsZW1lbnQ+KGluZm8pOworICAgIEF0b21pY1N0cmluZyB2ID0gdjhWYWx1ZVRvQXRvbWlj
V2ViQ29yZVN0cmluZ1dpdGhOdWxsQ2hlY2sodmFsdWUpOworICAgIGltcC0+c2V0QXR0cmlidXRl
KG5hbWUsIHYpOworfQorCisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IC9Wb2x1bWVz
L1l0dHJpdW0vc3JjL3RoaXJkX3BhcnR5L1dlYktpdC9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4VXRp
bGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSAvVm9sdW1lcy9ZdHRyaXVtL3NyYy90aGlyZF9wYXJ0
eS9XZWJLaXQvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFV0aWxpdGllcy5jcHAJKHJldmlzaW9uIDUw
NjY0KQorKysgL1ZvbHVtZXMvWXR0cml1bS9zcmMvdGhpcmRfcGFydHkvV2ViS2l0L1dlYkNvcmUv
YmluZGluZ3MvdjgvVjhVdGlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Niw2ICs3Niwy
NCBAQAogICAgICAgICB9CiAgICAgfQogfQorICAgIAordm9pZCB0cmFuc2ZlckhpZGRlbkRlcGVu
ZGVuY3kodjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBvYmplY3QsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBFdmVudExpc3RlbmVyKiBvbGRWYWx1ZSwgCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB2ODo6TG9jYWw8djg6OlZhbHVlPiBuZXdWYWx1ZSwgCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgY2FjaGVJbmRleCkKK3sKKyAgICBpZiAob2xkVmFsdWUpIHsK
KyAgICAgICAgVjhBYnN0cmFjdEV2ZW50TGlzdGVuZXIqIG9sZExpc3RlbmVyID0gVjhBYnN0cmFj
dEV2ZW50TGlzdGVuZXI6OmNhc3Qob2xkVmFsdWUpOworICAgICAgICBpZiAob2xkTGlzdGVuZXIp
IHsKKyAgICAgICAgICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBvbGRMaXN0ZW5lck9iamVjdCA9
IG9sZExpc3RlbmVyLT5nZXRFeGlzdGluZ0xpc3RlbmVyT2JqZWN0KCk7CisgICAgICAgICAgICBp
ZiAoIW9sZExpc3RlbmVyT2JqZWN0LklzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICByZW1vdmVI
aWRkZW5EZXBlbmRlbmN5KG9iamVjdCwgb2xkTGlzdGVuZXJPYmplY3QsIGNhY2hlSW5kZXgpOwor
ICAgICAgICB9CisgICAgfQorICAgIGlmICghbmV3VmFsdWUtPklzTnVsbCgpICYmICFuZXdWYWx1
ZS0+SXNVbmRlZmluZWQoKSkKKyAgICAgICAgY3JlYXRlSGlkZGVuRGVwZW5kZW5jeShvYmplY3Qs
IG5ld1ZhbHVlLCBjYWNoZUluZGV4KTsKK30KKyAgICAKIAogYm9vbCBwcm9jZXNzaW5nVXNlckdl
c3R1cmUoKQogewpJbmRleDogL1ZvbHVtZXMvWXR0cml1bS9zcmMvdGhpcmRfcGFydHkvV2ViS2l0
L1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RWxlbWVudEN1c3RvbS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gL1ZvbHVtZXMvWXR0cml1bS9zcmMvdGhpcmRfcGFydHkvV2ViS2l0L1dlYkNvcmUvYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4RWxlbWVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDUwNjY0KQorKysg
L1ZvbHVtZXMvWXR0cml1bS9zcmMvdGhpcmRfcGFydHkvV2ViS2l0L1dlYkNvcmUvYmluZGluZ3Mv
djgvY3VzdG9tL1Y4RWxlbWVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyLDM2ICs1
MiwzNiBAQAogewogICAgIElOQ19TVEFUUygiRE9NLkVsZW1lbnQuc2V0QXR0cmlidXRlKCkiKTsK
ICAgICBFbGVtZW50KiBlbGVtZW50ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0RE9NV3JhcHBlclRv
Tm9kZTxFbGVtZW50PihhcmdzLkhvbGRlcigpKTsKLSAgICBTdHJpbmcgbmFtZSA9IHRvV2ViQ29y
ZVN0cmluZyhhcmdzWzBdKTsKLSAgICBTdHJpbmcgdmFsdWUgPSB0b1dlYkNvcmVTdHJpbmcoYXJn
c1sxXSk7CisgICAgQXRvbWljU3RyaW5nIG5hbWUgPSB2OFZhbHVlVG9BdG9taWNXZWJDb3JlU3Ry
aW5nKGFyZ3NbMF0pOworICAgIEF0b21pY1N0cmluZyB2YWx1ZSA9IHY4VmFsdWVUb0F0b21pY1dl
YkNvcmVTdHJpbmcoYXJnc1sxXSk7CiAKLSAgICBpZiAoIWFsbG93U2V0dGluZ1NyY1RvSmF2YXNj
cmlwdFVSTChlbGVtZW50LCBuYW1lLCB2YWx1ZSkpCi0gICAgICAgIHJldHVybiB2ODo6VW5kZWZp
bmVkKCk7CisgICAgaWYgKFVOTElLRUxZKCFhbGxvd1NldHRpbmdTcmNUb0phdmFzY3JpcHRVUkwo
ZWxlbWVudCwgbmFtZSwgdmFsdWUpKSkKKyAgICAgICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6OlZh
bHVlPigpOwogCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgZWxlbWVudC0+c2V0QXR0
cmlidXRlKG5hbWUsIHZhbHVlLCBlYyk7Ci0gICAgaWYgKGVjKQotICAgICAgICByZXR1cm4gdGhy
b3dFcnJvcihlYyk7CisgICAgaWYgKFVOTElLRUxZKGVjKSkKKyAgICAgICAgdGhyb3dFcnJvcihl
Yyk7CiAKLSAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworICAgIHJldHVybiB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4oKTsKIH0KIAogQ0FMTEJBQ0tfRlVOQ19ERUNMKEVsZW1lbnRTZXRBdHRyaWJ1
dGVOb2RlKQogewogICAgIElOQ19TVEFUUygiRE9NLkVsZW1lbnQuc2V0QXR0cmlidXRlTm9kZSgp
Iik7Ci0gICAgaWYgKCFWOEF0dHI6Okhhc0luc3RhbmNlKGFyZ3NbMF0pKQorICAgIGlmIChVTkxJ
S0VMWSghVjhBdHRyOjpIYXNJbnN0YW5jZShhcmdzWzBdKSkpCiAgICAgICAgIHJldHVybiB0aHJv
d0Vycm9yKFRZUEVfTUlTTUFUQ0hfRVJSKTsKIAorICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBWOERP
TVdyYXBwZXI6OmNvbnZlcnRET01XcmFwcGVyVG9Ob2RlPEVsZW1lbnQ+KGFyZ3MuSG9sZGVyKCkp
OwogICAgIEF0dHIqIG5ld0F0dHIgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRET01XcmFwcGVyVG9O
b2RlPEF0dHI+KHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QoYXJnc1swXSkpOwotICAgIEVs
ZW1lbnQqIGVsZW1lbnQgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRET01XcmFwcGVyVG9Ob2RlPEVs
ZW1lbnQ+KGFyZ3MuSG9sZGVyKCkpOwogCi0gICAgaWYgKCFhbGxvd1NldHRpbmdTcmNUb0phdmFz
Y3JpcHRVUkwoZWxlbWVudCwgbmV3QXR0ci0+bmFtZSgpLCBuZXdBdHRyLT52YWx1ZSgpKSkKLSAg
ICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKKyAgICBpZiAoVU5MSUtFTFkoIWFsbG93U2V0
dGluZ1NyY1RvSmF2YXNjcmlwdFVSTChlbGVtZW50LCBuZXdBdHRyLT5uYW1lKCksIG5ld0F0dHIt
PnZhbHVlKCkpKSkKKyAgICAgICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6OlZhbHVlPigpOwogCiAg
ICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgUmVmUHRyPEF0dHI+IHJlc3VsdCA9IGVsZW1l
bnQtPnNldEF0dHJpYnV0ZU5vZGUobmV3QXR0ciwgZWMpOwotICAgIGlmIChlYykKLSAgICAgICAg
dGhyb3dFcnJvcihlYyk7CisgICAgaWYgKFVOTElLRUxZKGVjKSkKKyAgICAgICAgcmV0dXJuIHRo
cm93RXJyb3IoZWMpOwogCiAgICAgcmV0dXJuIFY4RE9NV3JhcHBlcjo6Y29udmVydE5vZGVUb1Y4
T2JqZWN0KHJlc3VsdC5yZWxlYXNlKCkpOwogfQpAQCAtOTAsMzcgKzkwLDM3IEBACiB7CiAgICAg
SU5DX1NUQVRTKCJET00uRWxlbWVudC5zZXRBdHRyaWJ1dGVOUygpIik7CiAgICAgRWxlbWVudCog
ZWxlbWVudCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydERPTVdyYXBwZXJUb05vZGU8RWxlbWVudD4o
YXJncy5Ib2xkZXIoKSk7Ci0gICAgU3RyaW5nIG5hbWVzcGFjZVVSSSA9IHRvV2ViQ29yZVN0cmlu
Z1dpdGhOdWxsQ2hlY2soYXJnc1swXSk7Ci0gICAgU3RyaW5nIHF1YWxpZmllZE5hbWUgPSB0b1dl
YkNvcmVTdHJpbmcoYXJnc1sxXSk7Ci0gICAgU3RyaW5nIHZhbHVlID0gdG9XZWJDb3JlU3RyaW5n
KGFyZ3NbMl0pOworICAgIEF0b21pY1N0cmluZyBuYW1lc3BhY2VVUkkgPSB2OFZhbHVlVG9BdG9t
aWNXZWJDb3JlU3RyaW5nV2l0aE51bGxDaGVjayhhcmdzWzBdKTsKKyAgICBBdG9taWNTdHJpbmcg
cXVhbGlmaWVkTmFtZSA9IHY4VmFsdWVUb0F0b21pY1dlYkNvcmVTdHJpbmcoYXJnc1sxXSk7Cisg
ICAgQXRvbWljU3RyaW5nIHZhbHVlID0gdjhWYWx1ZVRvQXRvbWljV2ViQ29yZVN0cmluZyhhcmdz
WzJdKTsKIAotICAgIGlmICghYWxsb3dTZXR0aW5nU3JjVG9KYXZhc2NyaXB0VVJMKGVsZW1lbnQs
IHF1YWxpZmllZE5hbWUsIHZhbHVlKSkKKyAgICBpZiAoVU5MSUtFTFkoIWFsbG93U2V0dGluZ1Ny
Y1RvSmF2YXNjcmlwdFVSTChlbGVtZW50LCBxdWFsaWZpZWROYW1lLCB2YWx1ZSkpKQogICAgICAg
ICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwogCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAg
ICAgZWxlbWVudC0+c2V0QXR0cmlidXRlTlMobmFtZXNwYWNlVVJJLCBxdWFsaWZpZWROYW1lLCB2
YWx1ZSwgZWMpOwotICAgIGlmIChlYykKKyAgICBpZiAoVU5MSUtFTFkoZWMpKQogICAgICAgICB0
aHJvd0Vycm9yKGVjKTsKIAotICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CisgICAgcmV0dXJu
IHY4OjpIYW5kbGU8djg6OlZhbHVlPigpOwogfQogCiBDQUxMQkFDS19GVU5DX0RFQ0woRWxlbWVu
dFNldEF0dHJpYnV0ZU5vZGVOUykKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5FbGVtZW50LnNldEF0
dHJpYnV0ZU5vZGVOUygpIik7Ci0gICAgaWYgKCFWOEF0dHI6Okhhc0luc3RhbmNlKGFyZ3NbMF0p
KQorICAgIGlmIChVTkxJS0VMWSghVjhBdHRyOjpIYXNJbnN0YW5jZShhcmdzWzBdKSkpCiAgICAg
ICAgIHJldHVybiB0aHJvd0Vycm9yKFRZUEVfTUlTTUFUQ0hfRVJSKTsKIAogICAgIEF0dHIqIG5l
d0F0dHIgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRET01XcmFwcGVyVG9Ob2RlPEF0dHI+KHY4OjpI
YW5kbGU8djg6Ok9iamVjdD46OkNhc3QoYXJnc1swXSkpOwogICAgIEVsZW1lbnQqIGVsZW1lbnQg
PSBWOERPTVdyYXBwZXI6OmNvbnZlcnRET01XcmFwcGVyVG9Ob2RlPEVsZW1lbnQ+KGFyZ3MuSG9s
ZGVyKCkpOwogCi0gICAgaWYgKCFhbGxvd1NldHRpbmdTcmNUb0phdmFzY3JpcHRVUkwoZWxlbWVu
dCwgbmV3QXR0ci0+bmFtZSgpLCBuZXdBdHRyLT52YWx1ZSgpKSkKLSAgICAgICAgcmV0dXJuIHY4
OjpVbmRlZmluZWQoKTsKKyAgICBpZiAoVU5MSUtFTFkoIWFsbG93U2V0dGluZ1NyY1RvSmF2YXNj
cmlwdFVSTChlbGVtZW50LCBuZXdBdHRyLT5uYW1lKCksIG5ld0F0dHItPnZhbHVlKCkpKSkKKyAg
ICAgICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6OlZhbHVlPigpOwogCiAgICAgRXhjZXB0aW9uQ29k
ZSBlYyA9IDA7CiAgICAgUmVmUHRyPEF0dHI+IHJlc3VsdCA9IGVsZW1lbnQtPnNldEF0dHJpYnV0
ZU5vZGVOUyhuZXdBdHRyLCBlYyk7Ci0gICAgaWYgKGVjKQotICAgICAgICB0aHJvd0Vycm9yKGVj
KTsKKyAgICBpZiAoVU5MSUtFTFkoZWMpKQorICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihlYyk7
CiAKICAgICByZXR1cm4gVjhET01XcmFwcGVyOjpjb252ZXJ0Tm9kZVRvVjhPYmplY3QocmVzdWx0
LnJlbGVhc2UoKSk7CiB9CkluZGV4OiAvVm9sdW1lcy9ZdHRyaXVtL3NyYy90aGlyZF9wYXJ0eS9X
ZWJLaXQvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEJpbmRpbmcuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSAvVm9s
dW1lcy9ZdHRyaXVtL3NyYy90aGlyZF9wYXJ0eS9XZWJLaXQvV2ViQ29yZS9iaW5kaW5ncy92OC9W
OEJpbmRpbmcuaAkocmV2aXNpb24gNTA2NjQpCisrKyAvVm9sdW1lcy9ZdHRyaXVtL3NyYy90aGly
ZF9wYXJ0eS9XZWJLaXQvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEJpbmRpbmcuaAkod29ya2luZyBj
b3B5KQpAQCAtMzQsMzggKzM0LDEwOCBAQAogI2luY2x1ZGUgIkF0b21pY1N0cmluZy5oIgogI2lu
Y2x1ZGUgIk1hdGhFeHRyYXMuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1
ZGUgIlY4RE9NV3JhcHBlci5oIgorI2luY2x1ZGUgIlY4SW5kZXguaCIKIAogI2luY2x1ZGUgPHY4
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICAKKyAgICBjbGFzcyBFdmVudExpc3RlbmVy
OworICAgIGNsYXNzIEV2ZW50VGFyZ2V0OworICAgIAorICAgIC8vIEEgaGVscGVyIGZ1bmN0aW9u
IGV4dHJhY3QgbmF0aXZlIG9iamVjdCBwb2ludGVyIGZyb20gYSBET00gd3JhcHBlcgorICAgIC8v
IGFuZCBjYXN0IHRvIHRoZSBzcGVjaWZpZWQgdHlwZS4KKyAgICB2b2lkKiB2OERPTVdyYXBwZXJU
b05hdGl2ZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+KTsKKyAgICAKKyAgICB0ZW1wbGF0ZSA8Y2xh
c3MgQz4KKyAgICBDKiB2OERPTVdyYXBwZXJUbyh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IG9iamVj
dCkKKyAgICB7CisgICAgICAgIEFTU0VSVChWOERPTVdyYXBwZXI6Om1heWJlRE9NV3JhcHBlcihv
YmplY3QpKTsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Qyo+KHY4RE9NV3JhcHBl
clRvTmF0aXZlKG9iamVjdCkpOworICAgIH0KKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgQz4KKyAgICBD
KiB2OERPTVdyYXBwZXJUb05vZGUodjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBvYmplY3QpCisgICAg
eworICAgICAgICBBU1NFUlQoVjhET01XcmFwcGVyOjptYXliZURPTVdyYXBwZXIob2JqZWN0KSk7
CisgICAgICAgIEFTU0VSVChWOERPTVdyYXBwZXI6OmRvbVdyYXBwZXJUeXBlKG9iamVjdCkgPT0g
VjhDbGFzc0luZGV4OjpOT0RFKTsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Qyo+
KHY4RE9NV3JhcHBlclRvTmF0aXZlKG9iamVjdCkpOworICAgIH0KKyAgICAKKyAgICB2b2lkKiB2
OERPTVdyYXBwZXJUb05hdGl2ZShjb25zdCB2ODo6QWNjZXNzb3JJbmZvJik7CisgICAgCisgICAg
dGVtcGxhdGUgPGNsYXNzIEM+CisgICAgQyogdjhET01XcmFwcGVyVG8oY29uc3Qgdjg6OkFjY2Vz
c29ySW5mbyYgaW5mbykgeworICAgICAgICBBU1NFUlQoVjhET01XcmFwcGVyOjptYXliZURPTVdy
YXBwZXIoaW5mby5Ib2xkZXIoKSkpOworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxD
Kj4odjhET01XcmFwcGVyVG9OYXRpdmUoaW5mbykpOworICAgIH0KKyAgICB0ZW1wbGF0ZSA8Y2xh
c3MgQz4KKyAgICBDKiB2OERPTVdyYXBwZXJUb05vZGUoY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYg
aW5mbykgeworICAgICAgICBBU1NFUlQoVjhET01XcmFwcGVyOjpkb21XcmFwcGVyVHlwZShpbmZv
LkhvbGRlcigpKSA9PSBWOENsYXNzSW5kZXg6Ok5PREUpOworICAgICAgICByZXR1cm4gcmVpbnRl
cnByZXRfY2FzdDxDKj4odjhET01XcmFwcGVyVG9OYXRpdmUoaW5mbykpOworICAgIH0KKyAgICAK
KyAgICB0ZW1wbGF0ZSA8Y2xhc3MgQz4KKyAgICBDKiB2OERPTVdyYXBwZXJUbyhWOENsYXNzSW5k
ZXg6OlY4V3JhcHBlclR5cGUgdHlwZSwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBvYmplY3QpCisg
ICAgeworICAgICAgICAvLyBOYXRpdmUgZXZlbnQgbGlzdGVuZXIgaXMgcGVyIGZyYW1lLCBpdCBj
YW5ub3QgYmUgaGFuZGxlZCBieSB0aGlzIGdlbmVyaWMgZnVuY3Rpb24uCisgICAgICAgIEFTU0VS
VCh0eXBlICE9IFY4Q2xhc3NJbmRleDo6RVZFTlRMSVNURU5FUik7CisgICAgICAgIEFTU0VSVCh0
eXBlICE9IFY4Q2xhc3NJbmRleDo6RVZFTlRUQVJHRVQpOworICAgICAgICAKKyAgICAgICAgQVNT
RVJUKFY4RE9NV3JhcHBlcjo6bWF5YmVET01XcmFwcGVyKG9iamVjdCkpOworICAgICAgICAKKyNp
Zm5kZWYgTkRFQlVHCisgICAgICAgIGNvbnN0IGJvb2wgdHlwZUlzVmFsaWQgPQorI2RlZmluZSBN
QUtFX0NBU0UoVFlQRSwgTkFNRSkgKHR5cGUgIT0gVjhDbGFzc0luZGV4OjpUWVBFKSAmJgorICAg
ICAgICBET01fTk9ERV9UWVBFUyhNQUtFX0NBU0UpCisjaWYgRU5BQkxFKFNWRykKKyAgICAgICAg
U1ZHX05PREVfVFlQRVMoTUFLRV9DQVNFKQorI2VuZGlmCisjdW5kZWYgTUFLRV9DQVNFCisgICAg
ICAgIHRydWU7CisgICAgICAgIEFTU0VSVCh0eXBlSXNWYWxpZCk7CisjZW5kaWYKKyAgICAgICAg
CisgICAgICAgIHJldHVybiB2OERPTVdyYXBwZXJUbzxDPihvYmplY3QpOworICAgIH0KKyAgICAK
KyAgICB0ZW1wbGF0ZSA8Y2xhc3MgQz4KKyAgICBDKiB2OERPTVdyYXBwZXJUbyhWOENsYXNzSW5k
ZXg6OlY4V3JhcHBlclR5cGUgdHlwZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKKyAg
ICB7CisjaWZuZGVmIE5ERUJVRworICAgICAgICByZXR1cm4gdjhET01XcmFwcGVyVG88Qz4odHlw
ZSwgaW5mby5Ib2xkZXIoKSk7CisjZWxzZQorICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2Fz
dDxDKj4odjhET01XcmFwcGVyVG9OYXRpdmUoaW5mbykpOworI2VuZGlmCisgICAgfQogCisgICAg
CisgICAgZW51bSBFeHRlcm5hbE1vZGUgeworICAgICAgICBFeHRlcm5hbGl6ZSwKKyAgICAgICAg
RG9Ob3RFeHRlcm5hbGl6ZQorICAgIH07CisgICAgCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFN0
cmluZ1R5cGU+CisgICAgU3RyaW5nVHlwZSB2OFN0cmluZ1RvV2ViQ29yZVN0cmluZyh2ODo6SGFu
ZGxlPHY4OjpTdHJpbmc+IHY4U3RyaW5nLCBFeHRlcm5hbE1vZGUgZXh0ZXJuYWwpOworCiAgICAg
Ly8gQ29udmVydCB2OCB0eXBlcyB0byBhIFdlYkNvcmU6OlN0cmluZy4gSWYgdGhlIFY4IHN0cmlu
ZyBpcyBub3QgYWxyZWFkeQogICAgIC8vIGFuIGV4dGVybmFsIHN0cmluZyB0aGVuIGl0IGlzIHRy
YW5zZm9ybWVkIGludG8gYW4gZXh0ZXJuYWwgc3RyaW5nIGF0IHRoaXMKICAgICAvLyBwb2ludCB0
byBhdm9pZCByZXBlYXRlZCBjb252ZXJzaW9ucy4KLSAgICBTdHJpbmcgdjhTdHJpbmdUb1dlYkNv
cmVTdHJpbmcodjg6OkhhbmRsZTx2ODo6U3RyaW5nPik7Ci0gICAgU3RyaW5nIHY4Tm9uU3RyaW5n
VmFsdWVUb1dlYkNvcmVTdHJpbmcodjg6OkhhbmRsZTx2ODo6VmFsdWU+KTsKLSAgICBpbmxpbmUg
U3RyaW5nIHY4VmFsdWVUb1dlYkNvcmVTdHJpbmcodjg6OkhhbmRsZTx2ODo6VmFsdWU+IHZhbHVl
KQorICAgIGlubGluZSBTdHJpbmcgdjhTdHJpbmdUb1dlYkNvcmVTdHJpbmcodjg6OkhhbmRsZTx2
ODo6U3RyaW5nPiB2OFN0cmluZykKICAgICB7Ci0gICAgICAgIGlmICh2YWx1ZS0+SXNTdHJpbmco
KSkKLSAgICAgICAgICAgIHJldHVybiB2OFN0cmluZ1RvV2ViQ29yZVN0cmluZyh2ODo6SGFuZGxl
PHY4OjpTdHJpbmc+OjpDYXN0KHZhbHVlKSk7Ci0gICAgICAgIHJldHVybiB2OE5vblN0cmluZ1Zh
bHVlVG9XZWJDb3JlU3RyaW5nKHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHY4U3RyaW5nVG9XZWJD
b3JlU3RyaW5nPFN0cmluZz4odjhTdHJpbmcsIEV4dGVybmFsaXplKTsKICAgICB9CisgICAgU3Ry
aW5nIHY4Tm9uU3RyaW5nVmFsdWVUb1dlYkNvcmVTdHJpbmcodjg6OkhhbmRsZTx2ODo6VmFsdWU+
KTsKKyAgICBTdHJpbmcgdjhWYWx1ZVRvV2ViQ29yZVN0cmluZyh2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gdmFsdWUpOwogCiAgICAgLy8gQ29udmVydCB2OCB0eXBlcyB0byBhIFdlYkNvcmU6OkF0b21p
Y1N0cmluZy4KLSAgICBBdG9taWNTdHJpbmcgdjhTdHJpbmdUb0F0b21pY1dlYkNvcmVTdHJpbmco
djg6OkhhbmRsZTx2ODo6U3RyaW5nPik7Ci0gICAgQXRvbWljU3RyaW5nIHY4Tm9uU3RyaW5nVmFs
dWVUb0F0b21pY1dlYkNvcmVTdHJpbmcodjg6OkhhbmRsZTx2ODo6VmFsdWU+KTsKLSAgICBpbmxp
bmUgQXRvbWljU3RyaW5nIHY4VmFsdWVUb0F0b21pY1dlYkNvcmVTdHJpbmcodjg6OkhhbmRsZTx2
ODo6VmFsdWU+IHZhbHVlKQorICAgIGlubGluZSBBdG9taWNTdHJpbmcgdjhTdHJpbmdUb0F0b21p
Y1dlYkNvcmVTdHJpbmcodjg6OkhhbmRsZTx2ODo6U3RyaW5nPiB2OFN0cmluZykKICAgICB7Ci0g
ICAgICAgIGlmICh2YWx1ZS0+SXNTdHJpbmcoKSkKLSAgICAgICAgICAgIHJldHVybiB2OFN0cmlu
Z1RvQXRvbWljV2ViQ29yZVN0cmluZyh2ODo6SGFuZGxlPHY4OjpTdHJpbmc+OjpDYXN0KHZhbHVl
KSk7Ci0gICAgICAgIHJldHVybiB2OE5vblN0cmluZ1ZhbHVlVG9BdG9taWNXZWJDb3JlU3RyaW5n
KHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHY4U3RyaW5nVG9XZWJDb3JlU3RyaW5nPEF0b21pY1N0
cmluZz4odjhTdHJpbmcsIEV4dGVybmFsaXplKTsKICAgICB9CisgICAgQXRvbWljU3RyaW5nIHY4
Tm9uU3RyaW5nVmFsdWVUb0F0b21pY1dlYkNvcmVTdHJpbmcodjg6OkhhbmRsZTx2ODo6VmFsdWU+
KTsKKyAgICBBdG9taWNTdHJpbmcgdjhWYWx1ZVRvQXRvbWljV2ViQ29yZVN0cmluZyh2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gdmFsdWUpOwogCi0gICAgaW5saW5lIGNvbnN0IFN0cmluZyYgdG9TdHJp
bmcoY29uc3QgU3RyaW5nJiBzdHJpbmcpCi0gICAgewotICAgICAgICByZXR1cm4gc3RyaW5nOwot
ICAgIH0KLQogICAgIC8vIFJldHVybiBhIFY4IGV4dGVybmFsIHN0cmluZyB0aGF0IHNoYXJlcyB0
aGUgdW5kZXJseWluZyBidWZmZXIgd2l0aCB0aGUgZ2l2ZW4KICAgICAvLyBXZWJDb3JlIHN0cmlu
Zy4gVGhlIHJlZmVyZW5jZSBjb3VudGluZyBtZWNoYW5pc20gaXMgdXNlZCB0byBrZWVwIHRoZQog
ICAgIC8vIHVuZGVybHlpbmcgYnVmZmVyIGFsaXZlIHdoaWxlIHRoZSBzdHJpbmcgaXMgc3RpbGwg
bGl2ZSBpbiB0aGUgVjggZW5naW5lLgpAQCAtODQsMzkgKzE1NCw4IEBACiAKICAgICAvLyBDb252
ZXJ0IGEgdmFsdWUgdG8gYSAzMi1iaXQgaW50ZWdlci4gIFRoZSBjb252ZXJzaW9uIGZhaWxzIGlm
IHRoZQogICAgIC8vIHZhbHVlIGNhbm5vdCBiZSBjb252ZXJ0ZWQgdG8gYW4gaW50ZWdlciBvciBj
b252ZXJ0cyB0byBuYW4gb3IgdG8gYW4gaW5maW5pdHkuCi0gICAgaW5saW5lIGludCB0b0ludDMy
KHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSwgYm9vbCYgb2spCi0gICAgewotICAgICAgICBv
ayA9IHRydWU7CisgICAgaW50IHRvSW50MzIodjg6OkhhbmRsZTx2ODo6VmFsdWU+IHZhbHVlLCBi
b29sJiBvayk7CiAKLSAgICAgICAgLy8gRmFzdCBjYXNlLiAgVGhlIHZhbHVlIGlzIGFscmVhZHkg
YSAzMi1iaXQgaW50ZWdlci4KLSAgICAgICAgaWYgKHZhbHVlLT5Jc0ludDMyKCkpCi0gICAgICAg
ICAgICByZXR1cm4gdmFsdWUtPkludDMyVmFsdWUoKTsKLQotICAgICAgICAvLyBDYW4gdGhlIHZh
bHVlIGJlIGNvbnZlcnRlZCB0byBhIG51bWJlcj8KLSAgICAgICAgdjg6OkxvY2FsPHY4OjpOdW1i
ZXI+IG51bWJlck9iamVjdCA9IHZhbHVlLT5Ub051bWJlcigpOwotICAgICAgICBpZiAobnVtYmVy
T2JqZWN0LklzRW1wdHkoKSkgewotICAgICAgICAgICAgb2sgPSBmYWxzZTsKLSAgICAgICAgICAg
IHJldHVybiAwOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gRG9lcyB0aGUgdmFsdWUgY29udmVy
dCB0byBuYW4gb3IgdG8gYW4gaW5maW5pdHk/Ci0gICAgICAgIGRvdWJsZSBudW1iZXJWYWx1ZSA9
IG51bWJlck9iamVjdC0+VmFsdWUoKTsKLSAgICAgICAgaWYgKGlzbmFuKG51bWJlclZhbHVlKSB8
fCBpc2luZihudW1iZXJWYWx1ZSkpIHsKLSAgICAgICAgICAgIG9rID0gZmFsc2U7Ci0gICAgICAg
ICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIENhbiB0aGUgdmFsdWUgYmUg
Y29udmVydGVkIHRvIGEgMzItYml0IGludGVnZXI/Ci0gICAgICAgIHY4OjpMb2NhbDx2ODo6SW50
MzI+IGludFZhbHVlID0gdmFsdWUtPlRvSW50MzIoKTsKLSAgICAgICAgaWYgKGludFZhbHVlLklz
RW1wdHkoKSkgewotICAgICAgICAgICAgb2sgPSBmYWxzZTsKLSAgICAgICAgICAgIHJldHVybiAw
OwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gUmV0dXJuIHRoZSByZXN1bHQgb2YgdGhlIGludDMy
IGNvbnZlcnNpb24uCi0gICAgICAgIHJldHVybiBpbnRWYWx1ZS0+VmFsdWUoKTsKLSAgICB9Ci0K
ICAgICAvLyBDb252ZXJ0IGEgdmFsdWUgdG8gYSAzMi1iaXQgaW50ZWdlciBhc3N1bWluZyB0aGUg
Y29udmVyc2lvbiBjYW5ub3QgZmFpbC4KICAgICBpbmxpbmUgaW50IHRvSW50MzIodjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IHZhbHVlKQogICAgIHsKQEAgLTEzNCw2ICsxNzMsNyBAQAogICAgIHsKICAg
ICAgICAgcmV0dXJuIHY4VmFsdWVUb1dlYkNvcmVTdHJpbmcob2JqZWN0KTsKICAgICB9CisgICAg
U3RyaW5nIHRvV2ViQ29yZVN0cmluZyhjb25zdCB2ODo6QXJndW1lbnRzJiwgaW50IGluZGV4KTsK
IAogICAgIC8vIFRoZSBzdHJpbmcgcmV0dXJuZWQgYnkgdGhpcyBmdW5jdGlvbiBpcyBzdGlsbCBv
d25lZCBieSB0aGUgYXJndW1lbnQKICAgICAvLyBhbmQgd2lsbCBiZSBkZWFsbG9jYXRlZCB3aGVu
IHRoZSBhcmd1bWVudCBpcyBkZWFsbG9jYXRlZC4KQEAgLTE0Miw1NiArMTgyLDUwIEBACiAgICAg
ICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQxNl90Kj4oc3RyLmNoYXJhY3Rl
cnMoKSk7CiAgICAgfQogCi0gICAgaW5saW5lIGJvb2wgaXNVbmRlZmluZWRPck51bGwodjg6Okhh
bmRsZTx2ODo6VmFsdWU+IHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHZhbHVlLT5Jc051
bGwoKSB8fCB2YWx1ZS0+SXNVbmRlZmluZWQoKTsKLSAgICB9CisgICAgYm9vbCBpc1VuZGVmaW5l
ZE9yTnVsbCh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUpOwogCi0gICAgaW5saW5lIHY4OjpI
YW5kbGU8djg6OkJvb2xlYW4+IHY4Qm9vbGVhbihib29sIHZhbHVlKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIHZhbHVlID8gdjg6OlRydWUoKSA6IHY4OjpGYWxzZSgpOwotICAgIH0KKyAgICB2ODo6
SGFuZGxlPHY4OjpCb29sZWFuPiB2OEJvb2xlYW4oYm9vbCB2YWx1ZSk7CiAKLSAgICBpbmxpbmUg
U3RyaW5nIHRvV2ViQ29yZVN0cmluZ1dpdGhOdWxsQ2hlY2sodjg6OkhhbmRsZTx2ODo6VmFsdWU+
IHZhbHVlKQotICAgIHsKLSAgICAgICAgaWYgKHZhbHVlLT5Jc051bGwoKSkgCi0gICAgICAgICAg
ICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgICAgIHJldHVybiB2OFZhbHVlVG9XZWJDb3JlU3RyaW5n
KHZhbHVlKTsKLSAgICB9CisgICAgU3RyaW5nIHRvV2ViQ29yZVN0cmluZ1dpdGhOdWxsQ2hlY2so
djg6OkhhbmRsZTx2ODo6VmFsdWU+IHZhbHVlKTsKIAotICAgIGlubGluZSBBdG9taWNTdHJpbmcg
djhWYWx1ZVRvQXRvbWljV2ViQ29yZVN0cmluZ1dpdGhOdWxsQ2hlY2sodjg6OkhhbmRsZTx2ODo6
VmFsdWU+IHZhbHVlKQotICAgIHsKLSAgICAgICAgaWYgKHZhbHVlLT5Jc051bGwoKSkKLSAgICAg
ICAgICAgIHJldHVybiBBdG9taWNTdHJpbmcoKTsKLSAgICAgICAgcmV0dXJuIHY4VmFsdWVUb0F0
b21pY1dlYkNvcmVTdHJpbmcodmFsdWUpOwotICAgIH0KKyAgICBBdG9taWNTdHJpbmcgdjhWYWx1
ZVRvQXRvbWljV2ViQ29yZVN0cmluZ1dpdGhOdWxsQ2hlY2sodjg6OkhhbmRsZTx2ODo6VmFsdWU+
IHZhbHVlKTsKIAotICAgIGlubGluZSBTdHJpbmcgdG9XZWJDb3JlU3RyaW5nV2l0aE51bGxPclVu
ZGVmaW5lZENoZWNrKHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSkKLSAgICB7Ci0gICAgICAg
IGlmICh2YWx1ZS0+SXNOdWxsKCkgfHwgdmFsdWUtPklzVW5kZWZpbmVkKCkpCi0gICAgICAgICAg
ICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgICAgIHJldHVybiB0b1dlYkNvcmVTdHJpbmcodmFsdWUp
OwotICAgIH0KKyAgICBTdHJpbmcgdG9XZWJDb3JlU3RyaW5nV2l0aE51bGxPclVuZGVmaW5lZENo
ZWNrKHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSk7CiAgCi0gICAgaW5saW5lIHY4OjpIYW5k
bGU8djg6OlN0cmluZz4gdjhVbmRldGVjdGFibGVTdHJpbmcoY29uc3QgU3RyaW5nJiBzdHIpCi0g
ICAgewotICAgICAgICByZXR1cm4gdjg6OlN0cmluZzo6TmV3VW5kZXRlY3RhYmxlKGZyb21XZWJD
b3JlU3RyaW5nKHN0ciksIHN0ci5sZW5ndGgoKSk7Ci0gICAgfQorICAgIHY4OjpIYW5kbGU8djg6
OlN0cmluZz4gdjhVbmRldGVjdGFibGVTdHJpbmcoY29uc3QgU3RyaW5nJiBzdHIpOwogCi0gICAg
aW5saW5lIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2OFN0cmluZ09yTnVsbChjb25zdCBTdHJpbmcm
IHN0cikKLSAgICB7Ci0gICAgICAgIHJldHVybiBzdHIuaXNOdWxsKCkgPyB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4odjg6Ok51bGwoKSkgOiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4odjhTdHJpbmcoc3Ry
KSk7Ci0gICAgfQorICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2OFN0cmluZ09yTnVsbChjb25z
dCBTdHJpbmcmIHN0cik7CiAKLSAgICBpbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHY4U3Ry
aW5nT3JVbmRlZmluZWQoY29uc3QgU3RyaW5nJiBzdHIpCi0gICAgewotICAgICAgICByZXR1cm4g
c3RyLmlzTnVsbCgpID8gdjg6OkhhbmRsZTx2ODo6VmFsdWU+KHY4OjpVbmRlZmluZWQoKSkgOiB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4odjhTdHJpbmcoc3RyKSk7Ci0gICAgfQorICAgIHY4OjpIYW5k
bGU8djg6OlZhbHVlPiB2OFN0cmluZ09yVW5kZWZpbmVkKGNvbnN0IFN0cmluZyYgc3RyKTsKIAot
ICAgIGlubGluZSB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdjhTdHJpbmdPckZhbHNlKGNvbnN0IFN0
cmluZyYgc3RyKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHN0ci5pc051bGwoKSA/IHY4OjpIYW5k
bGU8djg6OlZhbHVlPih2ODo6RmFsc2UoKSkgOiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4odjhTdHJp
bmcoc3RyKSk7Ci0gICAgfQorICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2OFN0cmluZ09yRmFs
c2UoY29uc3QgU3RyaW5nJiBzdHIpOworICAgIAorICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5j
dGlvblRlbXBsYXRlPiB2OENyZWF0ZVJhd1RlbXBsYXRlKCk7CisKKyAgICBzdHJ1Y3QgQmF0Y2hl
ZEF0dHJpYnV0ZTsKKyAgICBzdHJ1Y3QgQmF0Y2hlZENhbGxiYWNrOworICAgIAorICAgIHY4OjpM
b2NhbDx2ODo6U2lnbmF0dXJlPiB2OENvbmZpZ3VyZVRlbXBsYXRlKHY4OjpQZXJzaXN0ZW50PHY4
OjpGdW5jdGlvblRlbXBsYXRlPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBjaGFyICppbnRlcmZhY2VOYW1lLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVy
VHlwZSBwYXJlbnRDbGFzc0luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCBmaWVsZENvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEJhdGNoZWRBdHRyaWJ1dGUqLCAKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgYXR0cmli
dXRlQ291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgQmF0Y2hlZENhbGxiYWNrKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzaXplX3QgY2FsbGJhY2tDb3VudCk7CisgICAgCisgICAgdm9p
ZCB2OENyZWF0ZUNhbGxiYWNrKHY4OjpMb2NhbDx2ODo6T2JqZWN0VGVtcGxhdGU+IHByb3RvLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpuYW1lLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICB2ODo6SW52b2NhdGlvbkNhbGxiYWNrIGNhbGxiYWNrLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICB2ODo6SGFuZGxlPHY4OjpTaWduYXR1cmU+IHNpZ25hdHVyZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgdjg6OlByb3BlcnR5QXR0cmlidXRlIGF0dHJpYnV0ZSA9
IHY4OjpEb250RGVsZXRlKTsKKyAgICAKKyAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdjhHZXRF
bGVtZW50U3RyaW5nQXR0cihjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBRdWFsaWZpZWROYW1lJik7
CisgICAgdm9pZCB2OFNldEVsZW1lbnRTdHJpbmdBdHRyKGNvbnN0IHY4OjpBY2Nlc3NvckluZm8m
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBRdWFsaWZpZWROYW1lJiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4pOwor
ICAgIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gVjhCaW5kaW5nX2gK
</data>
<flag name="review"
          id="24340"
          type_id="1"
          status="-"
          setter="abarth"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>42800</attachid>
            <date>2009-11-09 14:04:03 -0800</date>
            <delta_ts>2009-11-11 09:33:10 -0800</delta_ts>
            <desc>patch 2</desc>
            <filename>textmate stdin NQPM45.txt</filename>
            <type>text/plain</type>
            <size>62899</size>
            <attacher name="Jens Alfke">jens</attacher>
            
              <data encoding="base64">SW5kZXg6IC9Wb2x1bWVzL1l0dHJpdW0vc3JjL3RoaXJkX3BhcnR5L1dlYktpdC9XZWJDb3JlL0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSAvVm9sdW1lcy9ZdHRyaXVtL3NyYy90aGlyZF9wYXJ0eS9X
ZWJLaXQvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDUwNjg3KQorKysgL1ZvbHVtZXMvWXR0
cml1bS9zcmMvdGhpcmRfcGFydHkvV2ViS2l0L1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsNTYgQEAKKzIwMDktMTEtMDkgIEplbnMgQWxma2UgIDxzbmVqQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBDb2RlLXNpemUgb3B0aW1pemF0aW9ucyB0byBnZW5lcmF0ZWQgVjggYmluZGluZ3MsIG1vc3Rs
eSBkZS1pbmxpbmluZywgc2F2aW5nIDYwMGsgb2YgY29kZSBvbiB4ODYvTWFjLgorICAgICAgICBT
b21lIHRhcmdldGVkIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbnMgdG8gc2FtZSwgdG8gZW5zdXJl
IGJlbmNobWFya3Mgc2NvcmVzIGRvbid0IHJlZ3Jlc3MuCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMTIxNworCisgICAgICAgIE5vIG5ldyB0ZXN0cyBz
aW5jZSBubyBuZXcgZnVuY3Rpb25hbGl0eS4KKworICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMv
Q29kZUdlbmVyYXRvclY4LnBtOiAgTWFueSBjaGFuZ2VzIHRvIHNocmluayBnZW5lcmF0ZWQgY29k
ZSBzaXplLgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4QmluZGluZy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjp2OERPTVdyYXBwZXJUb05hdGl2ZSk6ICBEZS1pbmxpbmVkLgorICAgICAgICAoV2Vi
Q29yZTo6djhWYWx1ZVRvV2ViQ29yZVN0cmluZyk6ICBEZS1pbmxpbmVkLgorICAgICAgICAoV2Vi
Q29yZTo6djhWYWx1ZVRvQXRvbWljV2ViQ29yZVN0cmluZyk6ICBEZS1pbmxpbmVkLgorICAgICAg
ICAoV2ViQ29yZTo6dG9JbnQzMik6ICBEZS1pbmxpbmVkLgorICAgICAgICAoV2ViQ29yZTo6dG9X
ZWJDb3JlU3RyaW5nKTogIERlLWlubGluZWQuCisgICAgICAgIChXZWJDb3JlOjp0b1dlYkNvcmVT
dHJpbmdXaXRoTnVsbENoZWNrKTogIERlLWlubGluZWQuCisgICAgICAgIChXZWJDb3JlOjp0b0F0
b21pY1dlYkNvcmVTdHJpbmdXaXRoTnVsbENoZWNrKTogIERlLWlubGluZWQuCisgICAgICAgIChX
ZWJDb3JlOjp0b1dlYkNvcmVTdHJpbmdXaXRoTnVsbE9yVW5kZWZpbmVkQ2hlY2spOiAgRGUtaW5s
aW5lZC4KKyAgICAgICAgKFdlYkNvcmU6OmlzVW5kZWZpbmVkT3JOdWxsKTogIERlLWlubGluZWQu
CisgICAgICAgIChXZWJDb3JlOjp2OEJvb2xlYW4pOiAgTmV3IHN1YnJvdXRpbmUgY2FsbGVkIGJ5
IGdlbmVyYXRlZCBiaW5kaW5ncyB0aGF0IHJldHVybiBib29sZWFuLgorICAgICAgICAoV2ViQ29y
ZTo6djhVbmRldGVjdGFibGVTdHJpbmcpOiAgRGUtaW5saW5lZC4KKyAgICAgICAgKFdlYkNvcmU6
OnY4U3RyaW5nT3JOdWxsKTogIERlLWlubGluZWQuCisgICAgICAgIChXZWJDb3JlOjp2OFN0cmlu
Z09yVW5kZWZpbmVkKTogIERlLWlubGluZWQuCisgICAgICAgIChXZWJDb3JlOjp2OFN0cmluZ09y
RmFsc2UpOiAgRGUtaW5saW5lZC4KKyAgICAgICAgKFdlYkNvcmU6OnY4U3RyaW5nVG9XZWJDb3Jl
U3RyaW5nKTogIE1hZGUgbm9uLXN0YXRpYyBiZWNhdXNlIGl0J3MgY2FsbGVkIG5vdyBmcm9tIHRo
ZSBoZWFkZXIgZmlsZS4KKyAgICAgICAgKFdlYkNvcmU6OnY4RXh0ZXJuYWxTdHJpbmcpOiAgUGVy
Zm9ybWFuY2Ugb3B0aW1pemF0aW9uLgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlUmF3VGVtcGxh
dGUpOiAgTmV3IHN1YnJvdXRpbmUgY2FsbGVkIGJ5IGdlbmVyYXRlZCBiaW5kaW5ncy4KKyAgICAg
ICAgKFdlYkNvcmU6OmNvbmZpZ3VyZVRlbXBsYXRlKTogIE5ldyBzdWJyb3V0aW5lIGNhbGxlZCBi
eSBnZW5lcmF0ZWQgYmluZGluZ3MuCisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVDYWxsYmFjayk6
ICBOZXcgc3Vicm91dGluZSBjYWxsZWQgYnkgZ2VuZXJhdGVkIGJpbmRpbmdzLgorICAgICAgICAo
V2ViQ29yZTo6Z2V0RWxlbWVudFN0cmluZ0F0dHIpOiAgTmV3IHN1YnJvdXRpbmUgY2FsbGVkIGJ5
IGdlbmVyYXRlZCBiaW5kaW5ncy4KKyAgICAgICAgKFdlYkNvcmU6OnNldEVsZW1lbnRTdHJpbmdB
dHRyKTogIE5ldyBzdWJyb3V0aW5lIGNhbGxlZCBieSBnZW5lcmF0ZWQgYmluZGluZ3MuCisgICAg
ICAgICogYmluZGluZ3MvdjgvVjhCaW5kaW5nLmg6CisgICAgICAgIChXZWJDb3JlOjp2OERPTVdy
YXBwZXJUbyk6ICBOZXcgc3Vicm91dGluZSBjYWxsZWQgYnkgZ2VuZXJhdGVkIGJpbmRpbmdzLgor
ICAgICAgICAoV2ViQ29yZTo6djhET01XcmFwcGVyVG9Ob2RlKTogIE5ldyBzdWJyb3V0aW5lIGNh
bGxlZCBieSBnZW5lcmF0ZWQgYmluZGluZ3MuCisgICAgICAgIChXZWJDb3JlOjp2OFN0cmluZ1Rv
V2ViQ29yZVN0cmluZyk6ICBEZWZpbmUgaW5saW5lIGluIHRlcm1zIG9mIHY4U3RyaW5nVG9XZWJD
b3JlU3RyaW5nPFN0cmluZz4uCisgICAgICAgIChXZWJDb3JlOjp2OFN0cmluZ1RvQXRvbWljV2Vi
Q29yZVN0cmluZyk6ICBEZWZpbmUgaW5saW5lIGluIHRlcm1zIG9mIHY4U3RyaW5nVG9XZWJDb3Jl
U3RyaW5nPEF0b21pY1N0cmluZz4uCisgICAgICAgICogYmluZGluZ3MvdjgvVjhET01XcmFwcGVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4RE9NV3JhcHBlcjo6Y29udmVydE5vZGVUb1Y4T2Jq
ZWN0KTogIERlLWlubGluZWQuCisgICAgICAgIChXZWJDb3JlOjpWOERPTVdyYXBwZXI6OmNvbnZl
cnROZXdOb2RlVG9WOE9iamVjdCk6ICBEZS1pbmxpbmVkLgorICAgICAgICAqIGJpbmRpbmdzL3Y4
L1Y4RE9NV3JhcHBlci5oOiAgRGUtaW5saW5lZCBtZXRob2RzLgorICAgICAgICAqIGJpbmRpbmdz
L3Y4L1Y4UHJveHkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YmF0Y2hDb25maWd1cmVBdHRyaWJ1
dGVzKTogIFdyYXBwZWQgbGluZXMgZm9yIHJlYWRhYmlsaXR5LgorICAgICAgICAoV2ViQ29yZTo6
YmF0Y2hDb25maWd1cmVDYWxsYmFja3MpOiAgTmV3IHN1YnJvdXRpbmUgY2FsbGVkIGJ5IGdlbmVy
YXRlZCBiaW5kaW5ncy4KKyAgICAgICAgKFdlYkNvcmU6OmJhdGNoQ29uZmlndXJlQ29uc3RhbnRz
KTogIFdyYXBwZWQgbGluZXMgZm9yIHJlYWRhYmlsaXR5LgorICAgICAgICAqIGJpbmRpbmdzL3Y4
L1Y4UHJveHkuaDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOFV0aWxpdGllcy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjp0cmFuc2ZlckhpZGRlbkRlcGVuZGVuY3kpOiAgTmV3IHN1YnJvdXRpbmUg
Y2FsbGVkIGJ5IGdlbmVyYXRlZCBiaW5kaW5ncy4KKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOFV0
aWxpdGllcy5oOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEVsZW1lbnRDdXN0b20u
Y3BwOiAgT3B0aW1pemVkIC0tIGF2b2lkIFN0cmluZy9BdG9taWNTdHJpbmcgY29udmVyc2lvbnMs
IAorICAgICAgICAgICAgdXNlIFVOTElLRUxZIG1hY3JvLCByZXR1cm4gZW1wdHkgVmFsdWUgaW5z
dGVhZCBvZiBjYWxsaW5nIFVuZGVmaW5lZCgpLgorCiAyMDA5LTExLTA5ICBMYXN6bG8gR29tYm9z
ICA8bGFzemxvLjEuZ29tYm9zQG5va2lhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBLZW5u
ZXRoIFJvaGRlIENocmlzdGlhbnNlbi4KSW5kZXg6IC9Wb2x1bWVzL1l0dHJpdW0vc3JjL3RoaXJk
X3BhcnR5L1dlYktpdC9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBt
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIC9Wb2x1bWVzL1l0dHJpdW0vc3JjL3RoaXJkX3BhcnR5L1dlYktpdC9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCShyZXZpc2lvbiA1MDY2
NCkKKysrIC9Wb2x1bWVzL1l0dHJpdW0vc3JjL3RoaXJkX3BhcnR5L1dlYktpdC9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCSh3b3JraW5nIGNvcHkpCkBAIC0zNTAs
MTUgKzM1MCwxNiBAQAogICAgIG15ICRkYXRhTm9kZSA9IHNoaWZ0OwogICAgIG15ICRpbXBsQ2xh
c3NOYW1lID0gc2hpZnQ7CiAgICAgbXkgJGNsYXNzSW5kZXggPSBzaGlmdDsKKyAgICBteSAkaG9s
ZGVyID0gc2hpZnQgfHwgImhvbGRlciI7ICAgIyBvcHRpb25hbCBwYXJhbQogCiAgICAgaWYgKElz
Tm9kZVN1YlR5cGUoJGRhdGFOb2RlKSkgewogICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xz
LCA8PEVORCk7Ci0gICAgJGltcGxDbGFzc05hbWUqIGltcCA9IFY4RE9NV3JhcHBlcjo6Y29udmVy
dERPTVdyYXBwZXJUb05vZGU8JGltcGxDbGFzc05hbWU+KGhvbGRlcik7CisgICAgJGltcGxDbGFz
c05hbWUqIGltcCA9IHY4RE9NV3JhcHBlclRvTm9kZTwkaW1wbENsYXNzTmFtZT4oJGhvbGRlcik7
CiBFTkQKIAogICAgIH0gZWxzZSB7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsIDw8
RU5EKTsKLSAgICAkaW1wbENsYXNzTmFtZSogaW1wID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9O
YXRpdmVPYmplY3Q8JGltcGxDbGFzc05hbWU+KFY4Q2xhc3NJbmRleDo6JGNsYXNzSW5kZXgsIGhv
bGRlcik7CisgICAgJGltcGxDbGFzc05hbWUqIGltcCA9IHY4RE9NV3JhcHBlclRvPCRpbXBsQ2xh
c3NOYW1lPihWOENsYXNzSW5kZXg6OiRjbGFzc0luZGV4LCAkaG9sZGVyKTsKIEVORAogCiAgIH0K
QEAgLTM5Nyw3ICszOTgsNyBAQAogICAgIH0KIEVORAogCi0gIEhvbGRlclRvTmF0aXZlKCRkYXRh
Tm9kZSwgJGltcGxDbGFzc05hbWUsICRjbGFzc0luZGV4KTsKKyAgICBIb2xkZXJUb05hdGl2ZSgk
ZGF0YU5vZGUsICRpbXBsQ2xhc3NOYW1lLCAkY2xhc3NJbmRleCk7CiAKICAgICBwdXNoKEBpbXBs
Q29udGVudERlY2xzLCA8PEVORCk7CiAgICAgaWYgKCFWOFByb3h5OjpjYW5BY2Nlc3NGcmFtZShp
bXAtPmZyYW1lKCksIGZhbHNlKSkgewpAQCAtNDI4LDcgKzQyOSw3IEBACiAKICAgICBpZiAoJGNs
YXNzSW5kZXggZXEgIkRPTVdJTkRPVyIpIHsKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNs
cywgPDxFTkQpOwotICAgIERPTVdpbmRvdyogd2luZG93ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0
VG9OYXRpdmVPYmplY3Q8RE9NV2luZG93PihWOENsYXNzSW5kZXg6OkRPTVdJTkRPVywgaW5mby5I
b2xkZXIoKSk7CisgICAgRE9NV2luZG93KiB3aW5kb3cgPSB2OERPTVdyYXBwZXJUbzxET01XaW5k
b3c+KFY4Q2xhc3NJbmRleDo6RE9NV0lORE9XLCBpbmZvLkhvbGRlcigpKTsKICAgICAvLyBHZXQg
dGhlIHByb3h5IGNvcnJlc3BvbmRpbmcgdG8gdGhlIERPTVdpbmRvdyBpZiBwb3NzaWJsZSB0bwog
ICAgIC8vIG1ha2Ugc3VyZSB0aGF0IHRoZSBjb25zdHJ1Y3RvciBmdW5jdGlvbiBpcyBjb25zdHJ1
Y3RlZCBpbiB0aGUKICAgICAvLyBjb250ZXh0IG9mIHRoZSBET01XaW5kb3cgYW5kIG5vdCBpbiB0
aGUgY29udGV4dCBvZiB0aGUgY2FsbGVyLgpAQCAtNDM3LDExICs0MzgsMTEgQEAKICAgICB9IGVs
c2lmICgkY2xhc3NJbmRleCBlcSAiREVESUNBVEVEV09SS0VSQ09OVEVYVCIgb3IgJGNsYXNzSW5k
ZXggZXEgIldPUktFUkNPTlRFWFQiIG9yICRjbGFzc0luZGV4IGVxICJTSEFSRURXT1JLRVJDT05U
RVhUIikgewogICAgICAgICAkaW1wbEluY2x1ZGVzeyJXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJv
eHkuaCJ9ID0gMTsKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgPDxFTkQpOwotICAg
IFdvcmtlckNvbnRleHQqIHdvcmtlckNvbnRleHQgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05h
dGl2ZU9iamVjdDxXb3JrZXJDb250ZXh0PihWOENsYXNzSW5kZXg6OldPUktFUkNPTlRFWFQsIGlu
Zm8uSG9sZGVyKCkpOworICAgIFdvcmtlckNvbnRleHQqIHdvcmtlckNvbnRleHQgPSB2OERPTVdy
YXBwZXJUbzxXb3JrZXJDb250ZXh0PihWOENsYXNzSW5kZXg6OldPUktFUkNPTlRFWFQsIGluZm8u
SG9sZGVyKCkpOwogICAgIHJldHVybiBWOERPTVdyYXBwZXI6OmdldENvbnN0cnVjdG9yKHR5cGUs
IHdvcmtlckNvbnRleHQpOwogRU5ECiAgICAgfSBlbHNlIHsKLSAgICAgICAgcHVzaChAaW1wbENv
bnRlbnREZWNscywgIiAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOyIpOworICAgICAgICBwdXNo
KEBpbXBsQ29udGVudERlY2xzLCAiICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsi
KTsKICAgICB9CiAKICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCA8PEVORCk7CkBAIC01MDQs
NyArNTA1LDcgQEAKIAogICAgIGlmICgkaXNQb2RUeXBlKSB7CiAgICAgICAgIHB1c2goQGltcGxD
b250ZW50RGVjbHMsIDw8RU5EKTsKLSAgICBWOFNWR1BPRFR5cGVXcmFwcGVyPCRpbXBsQ2xhc3NO
YW1lPiogaW1wX3dyYXBwZXIgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxW
OFNWR1BPRFR5cGVXcmFwcGVyPCRpbXBsQ2xhc3NOYW1lPiA+KFY4Q2xhc3NJbmRleDo6JGNsYXNz
SW5kZXgsIGluZm8uSG9sZGVyKCkpOworICAgIFY4U1ZHUE9EVHlwZVdyYXBwZXI8JGltcGxDbGFz
c05hbWU+KiBpbXBfd3JhcHBlciA9IHY4RE9NV3JhcHBlclRvPFY4U1ZHUE9EVHlwZVdyYXBwZXI8
JGltcGxDbGFzc05hbWU+ID4oVjhDbGFzc0luZGV4OjokY2xhc3NJbmRleCwgaW5mby5Ib2xkZXIo
KSk7CiAgICAgJGltcGxDbGFzc05hbWUgaW1wX2luc3RhbmNlID0gKmltcF93cmFwcGVyOwogRU5E
CiAgICAgICAgIGlmICgkZ2V0dGVyU3RyaW5nVXNlc0ltcCkgewpAQCAtNTIyLDIyICs1MjMsMzQg
QEAKICAgICAgICAgIyBwZXJmb3JtIGxvb2t1cCBmaXJzdAogICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudERlY2xzLCA8PEVORCk7CiAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBob2xkZXIgPSBW
OERPTVdyYXBwZXI6Omxvb2t1cERPTVdyYXBwZXIoVjhDbGFzc0luZGV4OjokY2xhc3NJbmRleCwg
aW5mby5UaGlzKCkpOwotICAgIGlmIChob2xkZXIuSXNFbXB0eSgpKSByZXR1cm4gdjg6OlVuZGVm
aW5lZCgpOworICAgIGlmIChob2xkZXIuSXNFbXB0eSgpKSByZXR1cm4gdjg6OkhhbmRsZTx2ODo6
VmFsdWU+KCk7CiBFTkQKICAgICAgIH0KLSAgICAgICAgSG9sZGVyVG9OYXRpdmUoJGRhdGFOb2Rl
LCAkaW1wbENsYXNzTmFtZSwgJGNsYXNzSW5kZXgpOworICAgICAgICBIb2xkZXJUb05hdGl2ZSgk
ZGF0YU5vZGUsICRpbXBsQ2xhc3NOYW1lLCAkY2xhc3NJbmRleCwgImluZm8iKTsKICAgICB9IGVs
c2UgeworICAgICAgICBteSAkcmVmbGVjdCA9ICRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5k
ZWRBdHRyaWJ1dGVzLT57IlJlZmxlY3QifTsKKyAgICAgICAgaWYgKCRnZXR0ZXJTdHJpbmdVc2Vz
SW1wICYmICRyZWZsZWN0ICYmIElzTm9kZVN1YlR5cGUoJGRhdGFOb2RlKSAmJiAkY29kZUdlbmVy
YXRvci0+SXNTdHJpbmdUeXBlKCRhdHRyVHlwZSkpIHsKKyAgICAgICAgICAgICMgR2VuZXJhdGUg
c3VwZXItY29tcGFjdCBjYWxsIGZvciByZWd1bGFyIGF0dHJpYnV0ZSBnZXR0ZXI6CisgICAgICAg
ICAgICBteSAkY29udGVudEF0dHJpYnV0ZU5hbWUgPSAkcmVmbGVjdCBlcSAiMSIgPyAkYXR0ck5h
bWUgOiAkcmVmbGVjdDsKKyAgICAgICAgICAgIG15ICRuYW1lc3BhY2UgPSAkY29kZUdlbmVyYXRv
ci0+TmFtZXNwYWNlRm9yQXR0cmlidXRlTmFtZSgkaW50ZXJmYWNlTmFtZSwgJGNvbnRlbnRBdHRy
aWJ1dGVOYW1lKTsKKyAgICAgICAgICAgICRpbXBsSW5jbHVkZXN7IiR7bmFtZXNwYWNlfS5oIn0g
PSAxOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICByZXR1cm4gZ2V0
RWxlbWVudFN0cmluZ0F0dHIoaW5mbywgJHtuYW1lc3BhY2V9Ojoke2NvbnRlbnRBdHRyaWJ1dGVO
YW1lfUF0dHIpO1xuIik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICB9
XG5cbiIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgIyBTa2lwIHRoZSByZXN0
IG9mIHRoZSBmdW5jdGlvbiEKKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnREZWNscywgPDxFTkQpOwogICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gaG9sZGVy
ID0gaW5mby5Ib2xkZXIoKTsKIEVORAotICAgICAgICBIb2xkZXJUb05hdGl2ZSgkZGF0YU5vZGUs
ICRpbXBsQ2xhc3NOYW1lLCAkY2xhc3NJbmRleCk7CisgICAgICAgIEhvbGRlclRvTmF0aXZlKCRk
YXRhTm9kZSwgJGltcGxDbGFzc05hbWUsICRjbGFzc0luZGV4LCAiaW5mbyIpOwogICAgIH0KIAog
ICAgICMgR2VuZXJhdGUgc2VjdXJpdHkgY2hlY2tzIGlmIG5lY2Vzc2FyeQogICAgIGlmICgkYXR0
cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDaGVja05vZGVTZWN1cml0
eSJ9KSB7Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgaWYgKCFWOFByb3h5
OjpjaGVja05vZGVTZWN1cml0eShpbXAtPiRhdHRyTmFtZSgpKSkgcmV0dXJuIHY4OjpVbmRlZmlu
ZWQoKTtcblxuIik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgaWYgKCFW
OFByb3h5OjpjaGVja05vZGVTZWN1cml0eShpbXAtPiRhdHRyTmFtZSgpKSkgcmV0dXJuIHY4OjpI
YW5kbGU8djg6OlZhbHVlPigpO1xuXG4iKTsKICAgICB9IGVsc2lmICgkYXR0cmlidXRlLT5zaWdu
YXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDaGVja0ZyYW1lU2VjdXJpdHkifSkgewotICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgIGlmICghVjhQcm94eTo6Y2hlY2tOb2Rl
U2VjdXJpdHkoaW1wLT5jb250ZW50RG9jdW1lbnQoKSkpIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7
XG5cbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgIGlmICghVjhQcm94
eTo6Y2hlY2tOb2RlU2VjdXJpdHkoaW1wLT5jb250ZW50RG9jdW1lbnQoKSkpIHJldHVybiB2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4oKTtcblxuIik7CiAgICAgfQogCiAgICAgbXkgJHVzZUV4Y2VwdGlv
bnMgPSAxIGlmIEB7JGF0dHJpYnV0ZS0+Z2V0dGVyRXhjZXB0aW9uc30gYW5kICEoJGlzUG9kVHlw
ZSk7CkBAIC01NzcsMTAgKzU5MCw2IEBACiAgICAgICAgICRnZXR0ZXJTdHJpbmcgPSAiaW1wX2lu
c3RhbmNlIjsKICAgICB9CiAKLSAgICBpZiAoJG5hdGl2ZVR5cGUgZXEgIlN0cmluZyIpIHsKLSAg
ICAgICAgJGdldHRlclN0cmluZyA9ICJ0b1N0cmluZygkZ2V0dGVyU3RyaW5nKSI7Ci0gICAgfQot
CiAgICAgbXkgJHJlc3VsdDsKICAgICBteSAkd3JhcHBlcjsKIApAQCAtNjE3LDcgKzYyNiw3IEBA
CiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+dHlwZSBl
cSAiRXZlbnRMaXN0ZW5lciIgJiYgJGRhdGFOb2RlLT5uYW1lIGVxICJET01XaW5kb3ciKSB7CiAg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgIGlmICghaW1wLT5kb2N1bWVu
dCgpKVxuIik7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgICAgcmV0
dXJuIHY4OjpVbmRlZmluZWQoKTtcbiIpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnRE
ZWNscywgIiAgICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTtcbiIpOwogICAgICAg
ICB9CiAKICAgICAgICAgaWYgKCR1c2VFeGNlcHRpb25zKSB7CkBAIC02OTQsNyArNzAzLDcgQEAK
ICAgICBpZiAoJGlzUG9kVHlwZSkgewogICAgICAgICAkaW1wbENsYXNzTmFtZSA9IEdldE5hdGl2
ZVR5cGUoJGltcGxDbGFzc05hbWUpOwogICAgICAgICAkaW1wbEluY2x1ZGVzeyJWOFNWR1BPRFR5
cGVXcmFwcGVyLmgifSA9IDE7Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAg
VjhTVkdQT0RUeXBlV3JhcHBlcjwkaW1wbENsYXNzTmFtZT4qIHdyYXBwZXIgPSBWOERPTVdyYXBw
ZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxWOFNWR1BPRFR5cGVXcmFwcGVyPCRpbXBsQ2xhc3NO
YW1lPiA+KFY4Q2xhc3NJbmRleDo6JGNsYXNzSW5kZXgsIGluZm8uSG9sZGVyKCkpO1xuIik7Cisg
ICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgVjhTVkdQT0RUeXBlV3JhcHBlcjwk
aW1wbENsYXNzTmFtZT4qIHdyYXBwZXIgPSB2OERPTVdyYXBwZXJUbzxWOFNWR1BPRFR5cGVXcmFw
cGVyPCRpbXBsQ2xhc3NOYW1lPiA+KFY4Q2xhc3NJbmRleDo6JGNsYXNzSW5kZXgsIGluZm8uSG9s
ZGVyKCkpO1xuIik7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgJGltcGxD
bGFzc05hbWUgaW1wX2luc3RhbmNlID0gKndyYXBwZXI7XG4iKTsKICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnREZWNscywgIiAgICAkaW1wbENsYXNzTmFtZSogaW1wID0gJmltcF9pbnN0YW5jZTtc
biIpOwogCkBAIC03MTAsMTIgKzcxOSwyNiBAQAogICAgIGlmIChob2xkZXIuSXNFbXB0eSgpKSBy
ZXR1cm47CiBFTkQKICAgICAgIH0KLSAgICAgICAgSG9sZGVyVG9OYXRpdmUoJGRhdGFOb2RlLCAk
aW1wbENsYXNzTmFtZSwgJGNsYXNzSW5kZXgpOworICAgICAgICBIb2xkZXJUb05hdGl2ZSgkZGF0
YU5vZGUsICRpbXBsQ2xhc3NOYW1lLCAkY2xhc3NJbmRleCwgImluZm8iKTsKICAgICB9IGVsc2Ug
eworICAgICAgICBteSAkYXR0clR5cGUgPSBHZXRUeXBlRnJvbVNpZ25hdHVyZSgkYXR0cmlidXRl
LT5zaWduYXR1cmUpOworICAgICAgICBteSAkcmVmbGVjdCA9ICRhdHRyaWJ1dGUtPnNpZ25hdHVy
ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IlJlZmxlY3QifTsKKyAgICAgICAgbXkgJHJlZmxlY3RV
UkwgPSAkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJSZWZsZWN0
VVJMIn07CisgICAgICAgIGlmICgoJHJlZmxlY3QgfHwgJHJlZmxlY3RVUkwpICYmIElzTm9kZVN1
YlR5cGUoJGRhdGFOb2RlKSAmJiAkY29kZUdlbmVyYXRvci0+SXNTdHJpbmdUeXBlKCRhdHRyVHlw
ZSkpIHsKKyAgICAgICAgICAgICMgR2VuZXJhdGUgc3VwZXItY29tcGFjdCBjYWxsIGZvciByZWd1
bGFyIGF0dHJpYnV0ZSBzZXR0ZXI6CisgICAgICAgICAgICBteSAkY29udGVudEF0dHJpYnV0ZU5h
bWUgPSAoJHJlZmxlY3QgfHwgJHJlZmxlY3RVUkwpIGVxICIxIiA/ICRhdHRyTmFtZSA6ICgkcmVm
bGVjdCB8fCAkcmVmbGVjdFVSTCk7CisgICAgICAgICAgICBteSAkbmFtZXNwYWNlID0gJGNvZGVH
ZW5lcmF0b3ItPk5hbWVzcGFjZUZvckF0dHJpYnV0ZU5hbWUoJGludGVyZmFjZU5hbWUsICRjb250
ZW50QXR0cmlidXRlTmFtZSk7CisgICAgICAgICAgICAkaW1wbEluY2x1ZGVzeyIke25hbWVzcGFj
ZX0uaCJ9ID0gMTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgc2V0
RWxlbWVudFN0cmluZ0F0dHIoaW5mbywgJHtuYW1lc3BhY2V9Ojoke2NvbnRlbnRBdHRyaWJ1dGVO
YW1lfUF0dHIsIHZhbHVlKTtcbiIpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNs
cywgIiAgfVxuXG4iKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICMgU2tpcCB0
aGUgcmVzdCBvZiB0aGUgZnVuY3Rpb24hCisgICAgICAgIH0KKwogICAgICAgICBwdXNoKEBpbXBs
Q29udGVudERlY2xzLCA8PEVORCk7CiAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBob2xkZXIg
PSBpbmZvLkhvbGRlcigpOwogRU5ECi0gICAgICAgIEhvbGRlclRvTmF0aXZlKCRkYXRhTm9kZSwg
JGltcGxDbGFzc05hbWUsICRjbGFzc0luZGV4KTsKKyAgICAgICAgSG9sZGVyVG9OYXRpdmUoJGRh
dGFOb2RlLCAkaW1wbENsYXNzTmFtZSwgJGNsYXNzSW5kZXgsICJpbmZvIik7CiAgICAgfQogCiAg
ICAgbXkgJG5hdGl2ZVR5cGUgPSBHZXROYXRpdmVUeXBlRnJvbVNpZ25hdHVyZSgkYXR0cmlidXRl
LT5zaWduYXR1cmUsIDApOwpAQCAtNzI0LDcgKzc0Nyw2IEBACiAgICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudERlY2xzLCAiICAgIGlmICghaW1wLT5kb2N1bWVudCgpKVxuIik7CiAgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgICAgcmV0dXJuO1xuIik7CiAgICAgICAg
IH0KLSAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICAkbmF0aXZlVHlwZSB2ID0g
VjhET01XcmFwcGVyOjpnZXRFdmVudExpc3RlbmVyKGltcCwgdmFsdWUsIHRydWUsIExpc3RlbmVy
RmluZE9yQ3JlYXRlKTtcbiIpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIHB1c2goQGltcGxDb250
ZW50RGVjbHMsICIgICAgJG5hdGl2ZVR5cGUgdiA9ICIgLiBKU1ZhbHVlVG9OYXRpdmUoJGF0dHJp
YnV0ZS0+c2lnbmF0dXJlLCAidmFsdWUiKSAuICI7XG4iKTsKICAgICB9CkBAIC03NjQsMTggKzc4
NiwxMCBAQAogICAgICAgICAgICAgJGltcGxJbmNsdWRlc3siVjhBYnN0cmFjdEV2ZW50TGlzdGVu
ZXIuaCJ9ID0gMTsKICAgICAgICAgICAgICRpbXBsSW5jbHVkZXN7IlY4Q3VzdG9tQmluZGluZy5o
In0gPSAxOwogICAgICAgICAgICAgJGNhY2hlSW5kZXggPSBHZXRIaWRkZW5EZXBlbmRlbmN5SW5k
ZXgoJGRhdGFOb2RlLCAkYXR0ck5hbWUpOwotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnRE
ZWNscywgIiAgICAkbmF0aXZlVHlwZSBvbGQgPSBpbXAtPiRhdHRyTmFtZSgpO1xuIik7Ci0gICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgIFY4QWJzdHJhY3RFdmVudExpc3Rl
bmVyKiBvbGRMaXN0ZW5lciA9IG9sZCA/IFY4QWJzdHJhY3RFdmVudExpc3RlbmVyOjpjYXN0KG9s
ZC5nZXQoKSkgOiAwO1xuIik7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAi
ICAgIGlmIChvbGRMaXN0ZW5lcikge1xuIik7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dERlY2xzLCAiICAgICAgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IG9sZExpc3RlbmVyT2JqZWN0ID0g
b2xkTGlzdGVuZXItPmdldEV4aXN0aW5nTGlzdGVuZXJPYmplY3QoKTtcbiIpOwotICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICAgIGlmICghb2xkTGlzdGVuZXJPYmplY3Qu
SXNFbXB0eSgpKVxuIik7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAg
ICAgICByZW1vdmVIaWRkZW5EZXBlbmRlbmN5KGhvbGRlciwgb2xkTGlzdGVuZXJPYmplY3QsICRj
YWNoZUluZGV4KTtcbiIpOwotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAg
ICB9XG4iKTsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgaW1wLT5z
ZXQkaW1wbFNldHRlckZ1bmN0aW9uTmFtZSgkcmVzdWx0KTtcbiIpOwotICAgICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnREZWNscywgIiAgICBpZiAoJHJlc3VsdClcbiIpOwotICAgICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICAgIGNyZWF0ZUhpZGRlbkRlcGVuZGVuY3koaG9s
ZGVyLCB2YWx1ZSwgJGNhY2hlSW5kZXgiKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
RGVjbHMsICIgICAgdHJhbnNmZXJIaWRkZW5EZXBlbmRlbmN5KGhvbGRlciwgaW1wLT4kYXR0ck5h
bWUoKSwgdmFsdWUsICRjYWNoZUluZGV4KTtcbiIpOworICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnREZWNscywgIiAgICBpbXAtPnNldCRpbXBsU2V0dGVyRnVuY3Rpb25OYW1lKFY4RE9NV3Jh
cHBlcjo6Z2V0RXZlbnRMaXN0ZW5lcihpbXAsIHZhbHVlLCB0cnVlLCBMaXN0ZW5lckZpbmRPckNy
ZWF0ZSkiKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
RGVjbHMsICIgICAgaW1wLT5zZXQkaW1wbFNldHRlckZ1bmN0aW9uTmFtZSgiIC4gJHJlc3VsdCk7
CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgIGltcC0+c2V0JGltcGxT
ZXR0ZXJGdW5jdGlvbk5hbWUoJHJlc3VsdCIpOwogICAgICAgICB9CiAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50RGVjbHMsICIsIGVjIikgaWYgJHVzZUV4Y2VwdGlvbnM7CiAgICAgICAgIHB1c2go
QGltcGxDb250ZW50RGVjbHMsICIpO1xuIik7CkBAIC04MDUsMTIgKzgxOSwxMSBAQAogICAgIHB1
c2goQGltcGxDb250ZW50RGVjbHMsICIgIH1cblxuIik7ICAjIGVuZCBvZiBzZXR0ZXIKIH0KIAot
c3ViIEdlbmVyYXRlTmV3RnVuY3Rpb25UZW1wbGF0ZQorc3ViIEdldEZ1bmN0aW9uVGVtcGxhdGVD
YWxsYmFja05hbWUKIHsKICAgICAkZnVuY3Rpb24gPSBzaGlmdDsKICAgICAkZGF0YU5vZGUgPSBz
aGlmdDsKLSAgICAkc2lnbmF0dXJlID0gc2hpZnQ7Ci0KKyAgICAKICAgICBteSAkaW50ZXJmYWNl
TmFtZSA9ICRkYXRhTm9kZS0+bmFtZTsKICAgICBteSAkbmFtZSA9ICRmdW5jdGlvbi0+c2lnbmF0
dXJlLT5uYW1lOwogCkBAIC04MjUsMTIgKzgzOCwyMiBAQAogICAgICAgICBpZiAoJGN1c3RvbUZ1
bmMgZXEgMSkgewogICAgICAgICAgICAgJGN1c3RvbUZ1bmMgPSAkaW50ZXJmYWNlTmFtZSAuICRj
b2RlR2VuZXJhdG9yLT5XS191Y2ZpcnN0KCRuYW1lKTsKICAgICAgICAgfQotICAgICAgICByZXR1
cm4gInY4OjpGdW5jdGlvblRlbXBsYXRlOjpOZXcoVjhDdXN0b206OnY4JHtjdXN0b21GdW5jfUNh
bGxiYWNrLCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKSwgJHNpZ25hdHVyZSkiOworICAgICAgICBy
ZXR1cm4gIlY4Q3VzdG9tOjp2OCR7Y3VzdG9tRnVuY31DYWxsYmFjayI7CiAgICAgfSBlbHNlIHsK
LSAgICAgICAgcmV0dXJuICJ2ODo6RnVuY3Rpb25UZW1wbGF0ZTo6TmV3KCR7aW50ZXJmYWNlTmFt
ZX1JbnRlcm5hbDo6JHtuYW1lfUNhbGxiYWNrLCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKSwgJHNp
Z25hdHVyZSkiOworICAgICAgICByZXR1cm4gIiR7aW50ZXJmYWNlTmFtZX1JbnRlcm5hbDo6JHtu
YW1lfUNhbGxiYWNrIjsKICAgICB9CiB9CiAKK3N1YiBHZW5lcmF0ZU5ld0Z1bmN0aW9uVGVtcGxh
dGUKK3sKKyAgICAkZnVuY3Rpb24gPSBzaGlmdDsKKyAgICAkZGF0YU5vZGUgPSBzaGlmdDsKKyAg
ICAkc2lnbmF0dXJlID0gc2hpZnQ7CisKKyAgICBteSAkY2FsbGJhY2sgPSBHZXRGdW5jdGlvblRl
bXBsYXRlQ2FsbGJhY2tOYW1lKCRmdW5jdGlvbiwgJGRhdGFOb2RlKTsKKyAgICByZXR1cm4gInY4
OjpGdW5jdGlvblRlbXBsYXRlOjpOZXcoJGNhbGxiYWNrLCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4o
KSwgJHNpZ25hdHVyZSkiOworfQorCiBzdWIgR2VuZXJhdGVGdW5jdGlvbkNhbGxiYWNrCiB7CiAg
ICAgbXkgJGZ1bmN0aW9uID0gc2hpZnQ7CkBAIC04NDksMTIgKzg3MiwxMiBAQAogCiAgICAgaWYg
KCRmdW5jdGlvbi0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiUmVxdWlyZXNBbGxB
cmd1bWVudHMifSkgewogICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLAotICAgICAgICAg
ICAgIiAgICBpZiAoYXJncy5MZW5ndGgoKSA8ICRudW1QYXJhbWV0ZXJzKSByZXR1cm4gdjg6OlVu
ZGVmaW5lZCgpO1xuIik7CisgICAgICAgICAgICAiICAgIGlmIChhcmdzLkxlbmd0aCgpIDwgJG51
bVBhcmFtZXRlcnMpIHJldHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTtcbiIpOwogICAgIH0K
IAogICAgIGlmIChJc1BvZFR5cGUoJGltcGxDbGFzc05hbWUpKSB7CiAgICAgICAgIG15ICRuYXRp
dmVDbGFzc05hbWUgPSBHZXROYXRpdmVUeXBlKCRpbXBsQ2xhc3NOYW1lKTsKLSAgICAgICAgcHVz
aChAaW1wbENvbnRlbnREZWNscywgIiAgICBWOFNWR1BPRFR5cGVXcmFwcGVyPCRuYXRpdmVDbGFz
c05hbWU+KiBpbXBfd3JhcHBlciA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0
PFY4U1ZHUE9EVHlwZVdyYXBwZXI8JG5hdGl2ZUNsYXNzTmFtZT4gPihWOENsYXNzSW5kZXg6OiRj
bGFzc0luZGV4LCBhcmdzLkhvbGRlcigpKTtcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dERlY2xzLCAiICAgIFY4U1ZHUE9EVHlwZVdyYXBwZXI8JG5hdGl2ZUNsYXNzTmFtZT4qIGltcF93
cmFwcGVyID0gdjhET01XcmFwcGVyVG88VjhTVkdQT0RUeXBlV3JhcHBlcjwkbmF0aXZlQ2xhc3NO
YW1lPiA+KFY4Q2xhc3NJbmRleDo6JGNsYXNzSW5kZXgsIGFyZ3MuSG9sZGVyKCkpO1xuIik7CiAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgJG5hdGl2ZUNsYXNzTmFtZSBpbXBf
aW5zdGFuY2UgPSAqaW1wX3dyYXBwZXI7XG4iKTsKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnRE
ZWNscywgIiAgICAkbmF0aXZlQ2xhc3NOYW1lKiBpbXAgPSAmaW1wX2luc3RhbmNlO1xuIik7CiAg
ICAgfSBlbHNlIHsKQEAgLTg3MSwxNCArODk0LDI2IEBACiAgICAgIyBXZSBoYXZlIG5vdCBmaW5k
IHJlYWwgdXNlIGNhc2VzIHlldC4KICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLAogIiAgICBp
ZiAoIVY4UHJveHk6OmNhbkFjY2Vzc0ZyYW1lKGltcC0+ZnJhbWUoKSwgdHJ1ZSkpIHtcbiIuCi0i
ICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTtcbiIgLgorIiAgICAgIHJldHVybiB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4oKTtcbiIgLgogIiAgICB9XG4iKTsKICAgICB9CisgICAgCisgICAgbXkg
JHJhaXNlc0V4Y2VwdGlvbnMgPSBAeyRmdW5jdGlvbi0+cmFpc2VzRXhjZXB0aW9uc307CisgICAg
aWYgKCEkcmFpc2VzRXhjZXB0aW9ucykgeworICAgICAgICBmb3JlYWNoIG15ICRwYXJhbWV0ZXIg
KEB7JGZ1bmN0aW9uLT5wYXJhbWV0ZXJzfSkgeworICAgICAgICAgICAgaWYgKFR5cGVDYW5GYWls
Q29udmVyc2lvbigkcGFyYW1ldGVyKSBvciAkcGFyYW1ldGVyLT5leHRlbmRlZEF0dHJpYnV0ZXMt
PnsiSXNJbmRleCJ9KSB7CisgICAgICAgICAgICAgICAgJHJhaXNlc0V4Y2VwdGlvbnMgPSAxOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQogCi0KLSAgICBpZiAoQHskZnVuY3Rpb24t
PnJhaXNlc0V4Y2VwdGlvbnN9KSB7CisgICAgaWYgKCRyYWlzZXNFeGNlcHRpb25zKSB7CiAgICAg
ICAgICRpbXBsSW5jbHVkZXN7IkV4Y2VwdGlvbkNvZGUuaCJ9ID0gMTsKICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnREZWNscywgIiAgICBFeGNlcHRpb25Db2RlIGVjID0gMDtcbiIpOworICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgIHtcbiIpOworICAgICAgICAjIFRoZSBicmFj
ZSBoZXJlIGlzIG5lZWRlZCB0byBwcmV2ZW50IHRoZSBlbnN1aW5nICdnb3RvIGZhaWwncyBmcm9t
IGp1bXBpbmcgcGFzdCBjb25zdHJ1Y3RvcnMKKyAgICAgICAgIyBvZiBvYmplY3RzIChsaWtlIFN0
cmluZ3MpIGRlY2xhcmVkIGxhdGVyLCBjYXVzaW5nIGNvbXBpbGUgZXJyb3JzLiBUaGUgYmxvY2sg
c2NvcGUgZW5kcworICAgICAgICAjIHJpZ2h0IGJlZm9yZSB0aGUgbGFiZWwgJ2ZhaWw6Jy4KICAg
ICB9CiAKICAgICBpZiAoJGZ1bmN0aW9uLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+
eyJDdXN0b21Bcmd1bWVudEhhbmRsaW5nIn0pIHsKQEAgLTg5MSw3ICs5MjYsNyBAQAogICAgIGlm
ICgkZnVuY3Rpb24tPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IlNWR0NoZWNrU2Vj
dXJpdHlEb2N1bWVudCJ9KSB7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsCiAiICAg
IGlmICghVjhQcm94eTo6Y2hlY2tOb2RlU2VjdXJpdHkoaW1wLT5nZXRTVkdEb2N1bWVudChlYykp
KVxuIiAuCi0iICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTtcbiIpOworIiAgICAgIHJldHVy
biB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTtcbiIpOwogICAgIH0KIAogICAgIG15ICRwYXJhbUlu
ZGV4ID0gMDsKQEAgLTkyMCw4ICs5NTUsOCBAQAogICAgICAgICAgICAgJGltcGxJbmNsdWRlc3si
RXhjZXB0aW9uQ29kZS5oIn0gPSAxOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNs
cywKICIgICAgaWYgKFVOTElLRUxZKCEkcGFyYW1ldGVyTmFtZSIgLiAoQmFzaWNUeXBlQ2FuRmFp
bENvbnZlcnNpb24oJHBhcmFtZXRlcikgPyAiT2siIDogIiIpIC4gIikpIHtcbiIgLgotIiAgICAg
IFY4UHJveHk6OnNldERPTUV4Y2VwdGlvbihUWVBFX01JU01BVENIX0VSUik7XG4iIC4KLSIgICAg
ICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCk7XG4iIC4KKyIgICAgICBlYyA9IFRZUEVf
TUlTTUFUQ0hfRVJSO1xuIiAuCisiICAgICAgZ290byBmYWlsO1xuIiAuCiAiICAgIH1cbiIpOwog
ICAgICAgICB9CiAKQEAgLTkyOSw4ICs5NjQsOCBAQAogICAgICAgICAgICAgJGltcGxJbmNsdWRl
c3siRXhjZXB0aW9uQ29kZS5oIn0gPSAxOwogICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnRE
ZWNscywKICIgICAgaWYgKFVOTElLRUxZKCRwYXJhbWV0ZXJOYW1lIDwgMCkpIHtcbiIgLgotIiAg
ICAgIFY4UHJveHk6OnNldERPTUV4Y2VwdGlvbihJTkRFWF9TSVpFX0VSUik7XG4iIC4KLSIgICAg
ICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCk7XG4iIC4KKyIgICAgICBlYyA9IElOREVY
X1NJWkVfRVJSO1xuIiAuCisiICAgICAgZ290byBmYWlsO1xuIiAuCiAiICAgIH1cbiIpOwogICAg
ICAgICB9CiAKQEAgLTk0MCw2ICs5NzUsMTQgQEAKICAgICAjIEJ1aWxkIHRoZSBmdW5jdGlvbiBj
YWxsIHN0cmluZy4KICAgICBteSAkY2FsbFN0cmluZyA9IEdlbmVyYXRlRnVuY3Rpb25DYWxsU3Ry
aW5nKCRmdW5jdGlvbiwgJHBhcmFtSW5kZXgsICIgICAgIiwgJGltcGxDbGFzc05hbWUpOwogICAg
IHB1c2goQGltcGxDb250ZW50RGVjbHMsICIkY2FsbFN0cmluZyIpOworCisgICAgaWYgKCRyYWlz
ZXNFeGNlcHRpb25zKSB7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgfVxu
Iik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgIGZhaWw6XG4iKTsKKyAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICBWOFByb3h5OjpzZXRET01FeGNlcHRpb24o
ZWMpO1xuIik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgcmV0dXJuIHY4
OjpIYW5kbGU8djg6OlZhbHVlPigpO1xuIik7CisgICAgfQorICAgIAogICAgIHB1c2goQGltcGxD
b250ZW50RGVjbHMsICIgIH1cblxuIik7CiB9CiAKQEAgLTEyMTgsNiArMTI2MSwzOCBAQAogICAg
ICAgICBHZW5lcmF0ZUJhdGNoZWRBdHRyaWJ1dGVEYXRhKCRkYXRhTm9kZSwgJGF0dHJpYnV0ZXMp
OwogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIn07XG4iKTsKICAgICB9CisgICAgCisgICAg
IyBTZXR1cCB0YWJsZSBvZiBzdGFuZGFyZCBjYWxsYmFjayBmdW5jdGlvbnMKKyAgICAkbnVtX2Nh
bGxiYWNrcyA9IDA7CisgICAgJGhhc19jYWxsYmFja3MgPSAwOworICAgIGZvcmVhY2ggbXkgJGZ1
bmN0aW9uIChAeyRkYXRhTm9kZS0+ZnVuY3Rpb25zfSkgeworICAgICAgICBteSAkYXR0ckV4dCA9
ICRmdW5jdGlvbi0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXM7CisgICAgICAgICMgRG9u
J3QgcHV0IGFueSBub25zdGFuZGFyZCBmdW5jdGlvbnMgaW50byB0aGlzIHRhYmxlOgorICAgICAg
ICBpZiAoJGF0dHJFeHQtPnsiVjhPbkluc3RhbmNlIn0pIHsKKyAgICAgICAgICAgIG5leHQ7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKCRhdHRyRXh0LT57IkVuYWJsZWRBdFJ1bnRpbWUifSB8fCBS
ZXF1aXJlc0N1c3RvbVNpZ25hdHVyZSgkZnVuY3Rpb24pIHx8ICRhdHRyRXh0LT57IlY4RG9Ob3RD
aGVja1NpZ25hdHVyZSJ9KSB7CisgICAgICAgICAgICBuZXh0OworICAgICAgICB9CisgICAgICAg
IGlmICgkYXR0ckV4dC0+eyJEb05vdENoZWNrRG9tYWluU2VjdXJpdHkifSAmJgorICAgICAgICAg
ICAgKCRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNoZWNrRG9tYWluU2VjdXJpdHki
fSB8fCAkaW50ZXJmYWNlTmFtZSBlcSAiRE9NV2luZG93IikpIHsKKyAgICAgICAgICAgIG5leHQ7
CisgICAgICAgIH0KKyAgICAgICAgaWYgKCRhdHRyRXh0LT57IkRvbnRFbnVtIn0gfHwgJGF0dHJF
eHQtPnsiVjhSZWFkT25seSJ9KSB7CisgICAgICAgICAgICBuZXh0OworICAgICAgICB9CisgICAg
ICAgIGlmICghJGhhc19jYWxsYmFja3MpIHsKKyAgICAgICAgICAgICRoYXNfY2FsbGJhY2tzID0g
MTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAic3RhdGljIGNvbnN0IEJhdGNoZWRD
YWxsYmFjayAke2ludGVyZmFjZU5hbWV9X2NhbGxiYWNrc1tdID0ge1xuIik7CisgICAgICAgIH0K
KyAgICAgICAgbXkgJG5hbWUgPSAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+bmFtZTsKKyAgICAgICAg
bXkgJGNhbGxiYWNrID0gR2V0RnVuY3Rpb25UZW1wbGF0ZUNhbGxiYWNrTmFtZSgkZnVuY3Rpb24s
ICRkYXRhTm9kZSk7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCA8PEVORCk7CisgIHsiJG5h
bWUiLCAkY2FsbGJhY2t9LAorRU5ECisgICAgICAgICRudW1fY2FsbGJhY2tzKys7CisgICAgfQor
ICAgIHB1c2goQGltcGxDb250ZW50LCAifTtcbiIpICBpZiAkaGFzX2NhbGxiYWNrczsKIAogICAg
ICMgU2V0dXAgY29uc3RhbnRzCiAgICAgbXkgJGhhc19jb25zdGFudHMgPSAwOwpAQCAtMTI0MSw3
ICsxMzE2LDcgQEAKIAogICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICJ9IC8vIG5hbWVzcGFj
ZSAke2ludGVyZmFjZU5hbWV9SW50ZXJuYWxcblxuIik7CiAKLSAgICBteSAkYWNjZXNzX2NoZWNr
ID0gIi8qIG5vIGFjY2VzcyBjaGVjayAqLyI7CisgICAgbXkgJGFjY2Vzc19jaGVjayA9ICIiOwog
ICAgIGlmICgkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDaGVja0RvbWFpblNlY3Vy
aXR5In0gJiYgISgkaW50ZXJmYWNlTmFtZSBlcSAiRE9NV2luZG93IikpIHsKICAgICAgICAgJGFj
Y2Vzc19jaGVjayA9ICJpbnN0YW5jZS0+U2V0QWNjZXNzQ2hlY2tDYWxsYmFja3MoVjhDdXN0b206
OnY4JHtpbnRlcmZhY2VOYW1lfU5hbWVkU2VjdXJpdHlDaGVjaywgVjhDdXN0b206OnY4JHtpbnRl
cmZhY2VOYW1lfUluZGV4ZWRTZWN1cml0eUNoZWNrLCB2ODo6SW50ZWdlcjo6TmV3KFY4Q2xhc3NJ
bmRleDo6VG9JbnQoVjhDbGFzc0luZGV4Ojoke2NsYXNzSW5kZXh9KSkpOyI7CiAgICAgfQpAQCAt
MTI2MCwzNSArMTMzNSw1OSBAQAogRU5ECiAgICAgfQogCisgICAgIyBmaW5kIHRoZSBzdXBlciBk
ZXNjcmlwdG9yCisgICAgbXkgJHBhcmVudENsYXNzSW5kZXggPSAiSU5WQUxJRF9DTEFTU19JTkRF
WCI7CisgICAgZm9yZWFjaCAoQHskZGF0YU5vZGUtPnBhcmVudHN9KSB7CisgICAgICAgIG15ICRw
YXJlbnQgPSAkY29kZUdlbmVyYXRvci0+U3RyaXBNb2R1bGUoJF8pOworICAgICAgICBpZiAoJHBh
cmVudCBlcSAiRXZlbnRUYXJnZXQiKSB7IG5leHQ7IH0KKyAgICAgICAgJGltcGxJbmNsdWRlc3si
Vjgke3BhcmVudH0uaCJ9ID0gMTsKKyAgICAgICAgJHBhcmVudENsYXNzSW5kZXggPSB1YygkY29k
ZUdlbmVyYXRvci0+U3RyaXBNb2R1bGUoJHBhcmVudCkpOworICAgICAgICBsYXN0OworICAgIH0K
KworICAgICMgZmluZCB0aGUgZmllbGQgY291bnQKKyAgICBteSAkZmllbGRDb3VudCA9ICJWOEN1
c3RvbTo6a0RlZmF1bHRXcmFwcGVySW50ZXJuYWxGaWVsZENvdW50IjsKKyAgICBpZiAoSXNOb2Rl
U3ViVHlwZSgkZGF0YU5vZGUpKSB7CisgICAgICAgICRmaWVsZENvdW50ID0gIlY4Q3VzdG9tOjpr
Tm9kZU1pbmltdW1JbnRlcm5hbEZpZWxkQ291bnQiOworICAgIH0KKyAgICAKICAgICAjIEdlbmVy
YXRlIHRoZSB0ZW1wbGF0ZSBjb25maWd1cmF0aW9uIG1ldGhvZAogICAgIHB1c2goQGltcGxDb250
ZW50LCAgPDxFTkQpOwogc3RhdGljIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRl
PiBDb25maWd1cmUke2NsYXNzTmFtZX1UZW1wbGF0ZSh2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rp
b25UZW1wbGF0ZT4gZGVzYykgewotICB2ODo6TG9jYWw8djg6Ok9iamVjdFRlbXBsYXRlPiBpbnN0
YW5jZSA9IGRlc2MtPkluc3RhbmNlVGVtcGxhdGUoKTsKKyAgdjg6OkxvY2FsPHY4OjpTaWduYXR1
cmU+IGRlZmF1bHRfc2lnbmF0dXJlID0gY29uZmlndXJlVGVtcGxhdGUoZGVzYywgXCIke2ludGVy
ZmFjZU5hbWV9XCIsCisgICAgICBWOENsYXNzSW5kZXg6OiRwYXJlbnRDbGFzc0luZGV4LCAkZmll
bGRDb3VudCwKIEVORAotICAgIGlmIChJc05vZGVTdWJUeXBlKCRkYXRhTm9kZSkpIHsKKworICAg
ICMgU2V0IHVwIG91ciBhdHRyaWJ1dGVzIGlmIHdlIGhhdmUgdGhlbQorICAgIGlmICgkaGFzX2F0
dHJpYnV0ZXMpIHsKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsIDw8RU5EKTsKLSAgaW5zdGFu
Y2UtPlNldEludGVybmFsRmllbGRDb3VudChWOEN1c3RvbTo6a05vZGVNaW5pbXVtSW50ZXJuYWxG
aWVsZENvdW50KTsKKyAgICAgICR7aW50ZXJmYWNlTmFtZX1fYXR0cnMsIHNpemVvZigke2ludGVy
ZmFjZU5hbWV9X2F0dHJzKS9zaXplb2YoKiR7aW50ZXJmYWNlTmFtZX1fYXR0cnMpLAogRU5ECiAg
ICAgfSBlbHNlIHsKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsIDw8RU5EKTsKLSAgaW5zdGFu
Y2UtPlNldEludGVybmFsRmllbGRDb3VudChWOEN1c3RvbTo6a0RlZmF1bHRXcmFwcGVySW50ZXJu
YWxGaWVsZENvdW50KTsKKyAgICAgIE5VTEwsIDAsCiBFTkQKICAgICB9CisgICAgCisgICAgaWYg
KCRoYXNfY2FsbGJhY2tzKSB7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCA8PEVORCk7Cisg
ICAgICAke2ludGVyZmFjZU5hbWV9X2NhbGxiYWNrcywgc2l6ZW9mKCR7aW50ZXJmYWNlTmFtZX1f
Y2FsbGJhY2tzKS9zaXplb2YoKiR7aW50ZXJmYWNlTmFtZX1fY2FsbGJhY2tzKSk7CitFTkQKKyAg
ICB9IGVsc2UgeworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgPDxFTkQpOworICAgICAgTlVM
TCwgMCk7CitFTkQKKyAgICB9CiAKKyAgICBpZiAoJGFjY2Vzc19jaGVjayBvciBAZW5hYmxlZEF0
UnVudGltZSBvciBAeyRkYXRhTm9kZS0+ZnVuY3Rpb25zfSBvciAkaGFzX2NvbnN0YW50cykgewog
ICAgIHB1c2goQGltcGxDb250ZW50LCAgPDxFTkQpOwotICB2ODo6TG9jYWw8djg6OlNpZ25hdHVy
ZT4gZGVmYXVsdF9zaWduYXR1cmUgPSB2ODo6U2lnbmF0dXJlOjpOZXcoZGVzYyk7CisgIHY4OjpM
b2NhbDx2ODo6T2JqZWN0VGVtcGxhdGU+IGluc3RhbmNlID0gZGVzYy0+SW5zdGFuY2VUZW1wbGF0
ZSgpOwogICB2ODo6TG9jYWw8djg6Ok9iamVjdFRlbXBsYXRlPiBwcm90byA9IGRlc2MtPlByb3Rv
dHlwZVRlbXBsYXRlKCk7Ci0gICRhY2Nlc3NfY2hlY2sKIEVORAotCi0KLSAgICAjIFNldCB1cCBv
dXIgYXR0cmlidXRlcyBpZiB3ZSBoYXZlIHRoZW0KLSAgICBpZiAoJGhhc19hdHRyaWJ1dGVzKSB7
Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50LCA8PEVORCk7Ci0gIGJhdGNoQ29uZmlndXJlQXR0
cmlidXRlcyhpbnN0YW5jZSwgcHJvdG8sICR7aW50ZXJmYWNlTmFtZX1fYXR0cnMsIHNpemVvZigk
e2ludGVyZmFjZU5hbWV9X2F0dHJzKS9zaXplb2YoKiR7aW50ZXJmYWNlTmFtZX1fYXR0cnMpKTsK
LUVORAogICAgIH0KIAorICAgIHB1c2goQGltcGxDb250ZW50LCAgIiAgJGFjY2Vzc19jaGVja1xu
Iik7CisgICAgCiAgICAgIyBTZXR1cCB0aGUgZW5hYmxlLWF0LXJ1bnRpbWUgYXR0cnMgaWYgd2Ug
aGF2ZSB0aGVtCiAgICAgZm9yZWFjaCBteSAkcnVudGltZV9hdHRyIChAZW5hYmxlZEF0UnVudGlt
ZSkgewogICAgICAgICAkZW5hYmxlX2Z1bmN0aW9uID0gJGludGVyZmFjZU5hbWUgLiAkY29kZUdl
bmVyYXRvci0+V0tfdWNmaXJzdCgkcnVudGltZV9hdHRyLT5zaWduYXR1cmUtPm5hbWUpOwpAQCAt
MTMwNSw3ICsxNDA0LDkgQEAKICAgICB9CiAKICAgICAjIERlZmluZSBvdXIgZnVuY3Rpb25zIHdp
dGggU2V0KCkgb3IgU2V0QWNjZXNzb3IoKQorICAgICR0b3RhbF9mdW5jdGlvbnMgPSAwOwogICAg
IGZvcmVhY2ggbXkgJGZ1bmN0aW9uIChAeyRkYXRhTm9kZS0+ZnVuY3Rpb25zfSkgeworICAgICAg
ICAkdG90YWxfZnVuY3Rpb25zKys7CiAgICAgICAgIG15ICRhdHRyRXh0ID0gJGZ1bmN0aW9uLT5z
aWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlczsKICAgICAgICAgbXkgJG5hbWUgPSAkZnVuY3Rp
b24tPnNpZ25hdHVyZS0+bmFtZTsKIApAQCAtMTM1OSw2ICsxNDYwLDcgQEAKICAgICAgIHY4OjpB
TExfQ0FOX1JFQUQsCiAgICAgICBzdGF0aWNfY2FzdDx2ODo6UHJvcGVydHlBdHRyaWJ1dGU+KCRw
cm9wZXJ0eV9hdHRyaWJ1dGVzKSk7CiBFTkQKKyAgICAgICAgICAkbnVtX2NhbGxiYWNrcysrOwog
ICAgICAgICAgIG5leHQ7CiAgICAgICB9CiAKQEAgLTEzNzMsMzIgKzE0NzUsMjcgQEAKICAgICAg
IH0KIAogICAgICAgIyBOb3JtYWwgZnVuY3Rpb24gY2FsbCBpcyBhIHRlbXBsYXRlCi0gICAgICBt
eSAkdGVtcGxhdGVGdW5jdGlvbiA9IEdlbmVyYXRlTmV3RnVuY3Rpb25UZW1wbGF0ZSgkZnVuY3Rp
b24sICRkYXRhTm9kZSwgJHNpZ25hdHVyZSk7Ci0KLQorICAgICAgbXkgJGNhbGxiYWNrID0gR2V0
RnVuY3Rpb25UZW1wbGF0ZUNhbGxiYWNrTmFtZSgkZnVuY3Rpb24sICRkYXRhTm9kZSk7CisgICAg
ICAKKyAgICAgIGlmICgkcHJvcGVydHlfYXR0cmlidXRlcyBlcSAidjg6OkRvbnREZWxldGUiKSB7
CisgICAgICAgICAgJHByb3BlcnR5X2F0dHJpYnV0ZXMgPSAiIjsKKyAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgJHByb3BlcnR5X2F0dHJpYnV0ZXMgPSAiLCBzdGF0aWNfY2FzdDx2ODo6UHJvcGVy
dHlBdHRyaWJ1dGU+KCRwcm9wZXJ0eV9hdHRyaWJ1dGVzKSI7CisgICAgICB9CisgICAgICAKKyAg
ICAgIGlmICgkdGVtcGxhdGUgZXEgInByb3RvIiAmJiAkY29uZGl0aW9uYWwgZXEgIiIgJiYgJHNp
Z25hdHVyZSBlcSAiZGVmYXVsdF9zaWduYXR1cmUiICYmICRwcm9wZXJ0eV9hdHRyaWJ1dGVzIGVx
ICIiKSB7CisgICAgICAgICAgIyBTdGFuZGFyZCB0eXBlIG9mIGNhbGxiYWNrLCBhbHJlYWR5IGNy
ZWF0ZWQgaW4gdGhlIGJhdGNoLCBzbyBza2lwIGl0IGhlcmUuCisgICAgICAgICAgbmV4dDsKKyAg
ICAgIH0KKyAgICAgIAogICAgICAgcHVzaChAaW1wbENvbnRlbnQsIDw8RU5EKTsKLQotICAvLyAk
Y29tbWVudEluZm8KLSAgJGNvbmRpdGlvbmFsICR7dGVtcGxhdGV9LT5TZXQoCi0gICAgICB2ODo6
U3RyaW5nOjpOZXcoIiRuYW1lIiksCi0gICAgICAkdGVtcGxhdGVGdW5jdGlvbiwKLSAgICAgIHN0
YXRpY19jYXN0PHY4OjpQcm9wZXJ0eUF0dHJpYnV0ZT4oJHByb3BlcnR5X2F0dHJpYnV0ZXMpKTsK
KyAgJHtjb25kaXRpb25hbH1jcmVhdGVDYWxsYmFjaygkdGVtcGxhdGUsICIkbmFtZSIsICRjYWxs
YmFjaywgJHtzaWduYXR1cmV9JHByb3BlcnR5X2F0dHJpYnV0ZXMpOwogRU5ECisgICAgICAkbnVt
X2NhbGxiYWNrcysrOwogICAgIH0KKyAgICAKKyAgICBkaWUgIldyb25nIG51bWJlciBvZiBjYWxs
YmFja3MgZ2VuZXJhdGVkIGZvciAkaW50ZXJmYWNlTmFtZSAoJG51bV9jYWxsYmFja3MsIHNob3Vs
ZCBiZSAkdG90YWxfZnVuY3Rpb25zKSIgaWYgJG51bV9jYWxsYmFja3MgIT0gJHRvdGFsX2Z1bmN0
aW9uczsKIAotICAgICMgc2V0IHRoZSBzdXBlciBkZXNjcmlwdG9yCi0gICAgZm9yZWFjaCAoQHsk
ZGF0YU5vZGUtPnBhcmVudHN9KSB7Ci0gICAgICAgIG15ICRwYXJlbnQgPSAkY29kZUdlbmVyYXRv
ci0+U3RyaXBNb2R1bGUoJF8pOwotICAgICAgICBpZiAoJHBhcmVudCBlcSAiRXZlbnRUYXJnZXQi
KSB7IG5leHQ7IH0KLSAgICAgICAgJGltcGxJbmNsdWRlc3siVjgke3BhcmVudH0uaCJ9ID0gMTsK
LSAgICAgICAgbXkgJHBhcmVudENsYXNzSW5kZXggPSB1YygkY29kZUdlbmVyYXRvci0+U3RyaXBN
b2R1bGUoJHBhcmVudCkpOwotICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgZGVzYy0+SW5o
ZXJpdChWOERPTVdyYXBwZXI6OmdldFRlbXBsYXRlKFY4Q2xhc3NJbmRleDo6JHtwYXJlbnRDbGFz
c0luZGV4fSkpO1xuIik7Ci0gICAgICAgIGxhc3Q7Ci0gICAgfQotCi0gICAgIyBTZXQgdGhlIGNs
YXNzIG5hbWUuICBUaGlzIGlzIHVzZWQgd2hlbiBwcmludGluZyBvYmplY3RzLgotICAgIHB1c2go
QGltcGxDb250ZW50LCAiICBkZXNjLT5TZXRDbGFzc05hbWUodjg6OlN0cmluZzo6TmV3KFwiJHtp
bnRlcmZhY2VOYW1lfVwiKSk7XG4iKTsKLQogICAgIGlmICgkaGFzX2NvbnN0YW50cykgewogICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgPDxFTkQpOwogICBiYXRjaENvbmZpZ3VyZUNvbnN0YW50
cyhkZXNjLCBwcm90bywgJHtpbnRlcmZhY2VOYW1lfV9jb25zdHMsIHNpemVvZigke2ludGVyZmFj
ZU5hbWV9X2NvbnN0cykvc2l6ZW9mKCoke2ludGVyZmFjZU5hbWV9X2NvbnN0cykpOwpAQCAtMTQx
MCwxOSArMTUwNywxMiBAQAogfQogCiB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0
ZT4gJHtjbGFzc05hbWV9OjpHZXRSYXdUZW1wbGF0ZSgpIHsKLSAgc3RhdGljIHY4OjpQZXJzaXN0
ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiAke2NsYXNzTmFtZX1fcmF3X2NhY2hlXzsKLSAgaWYg
KCR7Y2xhc3NOYW1lfV9yYXdfY2FjaGVfLklzRW1wdHkoKSkgewotICAgIHY4OjpIYW5kbGVTY29w
ZSBzY29wZTsKLSAgICB2ODo6TG9jYWw8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHJlc3VsdCA9IHY4
OjpGdW5jdGlvblRlbXBsYXRlOjpOZXcoVjhQcm94eTo6Y2hlY2tOZXdMZWdhbCk7Ci0gICAgJHtj
bGFzc05hbWV9X3Jhd19jYWNoZV8gPSB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0
ZT46Ok5ldyhyZXN1bHQpOwotICB9CisgIHN0YXRpYyB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rp
b25UZW1wbGF0ZT4gJHtjbGFzc05hbWV9X3Jhd19jYWNoZV8gPSBjcmVhdGVSYXdUZW1wbGF0ZSgp
OwogICByZXR1cm4gJHtjbGFzc05hbWV9X3Jhd19jYWNoZV87CiB9CiAKIHY4OjpQZXJzaXN0ZW50
PHY4OjpGdW5jdGlvblRlbXBsYXRlPiAke2NsYXNzTmFtZX06OkdldFRlbXBsYXRlKCkgewotICBz
dGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+ICR7Y2xhc3NOYW1lfV9j
YWNoZV87Ci0gIGlmICgke2NsYXNzTmFtZX1fY2FjaGVfLklzRW1wdHkoKSkKLSAgICAke2NsYXNz
TmFtZX1fY2FjaGVfID0gQ29uZmlndXJlJHtjbGFzc05hbWV9VGVtcGxhdGUoR2V0UmF3VGVtcGxh
dGUoKSk7CisgIHN0YXRpYyB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gJHtj
bGFzc05hbWV9X2NhY2hlXyA9IENvbmZpZ3VyZSR7Y2xhc3NOYW1lfVRlbXBsYXRlKEdldFJhd1Rl
bXBsYXRlKCkpOwogICByZXR1cm4gJHtjbGFzc05hbWV9X2NhY2hlXzsKIH0KIApAQCAtMTU0Nyw3
ICsxNjM3LDcgQEAKICAgICAgICAgIyBhcHBlbmRDaGlsZCBmdW5jdGlvbnMgZnJvbSBOb2RlLgog
ICAgICAgICAkcmVzdWx0IC49ICRpbmRlbnQgLiAiYm9vbCBzdWNjZXNzID0gJGZ1bmN0aW9uU3Ry
aW5nO1xuIjsKICAgICAgICAgaWYgKEB7JGZ1bmN0aW9uLT5yYWlzZXNFeGNlcHRpb25zfSkgewot
ICAgICAgICAgICAgJHJlc3VsdCAuPSBHZW5lcmF0ZVNldERPTUV4Y2VwdGlvbigkaW5kZW50KTsK
KyAgICAgICAgICAgICRyZXN1bHQgLj0gJGluZGVudCAuICJpZiAoVU5MSUtFTFkoZWMpKSBnb3Rv
IGZhaWw7XG4iOwogICAgICAgICB9CiAgICAgICAgICRyZXN1bHQgLj0gJGluZGVudCAuICJpZiAo
c3VjY2VzcylcbiI7CiAgICAgICAgICRyZXN1bHQgLj0gJGluZGVudCAuICIgICAgIiAuCkBAIC0x
NTcxLDcgKzE2NjEsNyBAQAogICAgIH0KIAogICAgIGlmIChAeyRmdW5jdGlvbi0+cmFpc2VzRXhj
ZXB0aW9uc30pIHsKLSAgICAgICAgJHJlc3VsdCAuPSBHZW5lcmF0ZVNldERPTUV4Y2VwdGlvbigk
aW5kZW50KTsKKyAgICAgICAgJHJlc3VsdCAuPSAkaW5kZW50IC4gImlmIChVTkxJS0VMWShlYykp
IGdvdG8gZmFpbDtcbiI7CiAgICAgfQogCiAgICAgIyBJZiB0aGUgcmV0dXJuIHR5cGUgaXMgYSBQ
T0QgdHlwZSwgc2VwYXJhdGUgb3V0IHRoZSB3cmFwcGVyIGdlbmVyYXRpb24KQEAgLTE2MjksNyAr
MTcxOSw3IEBACiAgICAgbXkgJHNpZ25hdHVyZSA9IHNoaWZ0OwogCiAgICAgbXkgJHR5cGUgPSAk
Y29kZUdlbmVyYXRvci0+U3RyaXBNb2R1bGUoJHNpZ25hdHVyZS0+dHlwZSk7Ci0gICAgaWYgKCgk
dHlwZSBlcSAiRE9NU3RyaW5nIikgJiYgJHNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57
IkhpbnRBdG9taWMifSkgeworICAgIGlmICgoJHR5cGUgZXEgIkRPTVN0cmluZyIpICYmICgkc2ln
bmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiSGludEF0b21pYyJ9IHx8ICRzaWduYXR1cmUt
PmV4dGVuZGVkQXR0cmlidXRlcy0+eyJSZWZsZWN0In0pKSB7CiAgICAgICAgICR0eXBlID0gIkF0
b21pY1N0cmluZyI7CiAgICAgfQogCkBAIC0xOTIyLDE0ICsyMDEyLDE5IEBACiAgICAgcmV0dXJu
ICJzdGF0aWNfY2FzdDxTVkdQYWludDo6U1ZHUGFpbnRUeXBlPigkdmFsdWUtPlRvSW50MzIoKS0+
SW50MzJWYWx1ZSgpKSIgaWYgJHR5cGUgZXEgIlNWR1BhaW50VHlwZSI7CiAKICAgICBpZiAoJHR5
cGUgZXEgIkF0b21pY1N0cmluZyIpIHsKLSAgICAgICAgcmV0dXJuICJ2OFZhbHVlVG9BdG9taWNX
ZWJDb3JlU3RyaW5nV2l0aE51bGxDaGVjaygkdmFsdWUpIiBpZiAkc2lnbmF0dXJlLT5leHRlbmRl
ZEF0dHJpYnV0ZXMtPnsiQ29udmVydE51bGxUb051bGxTdHJpbmcifTsKKyAgICAgICAgcmV0dXJu
ICJ0b0F0b21pY1dlYkNvcmVTdHJpbmdXaXRoTnVsbENoZWNrKCR2YWx1ZSkiIGlmICRzaWduYXR1
cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDb252ZXJ0TnVsbFRvTnVsbFN0cmluZyJ9OwogICAg
ICAgICByZXR1cm4gInY4VmFsdWVUb0F0b21pY1dlYkNvcmVTdHJpbmcoJHZhbHVlKSI7CiAgICAg
fQogCi0gICAgcmV0dXJuICJ0b1dlYkNvcmVTdHJpbmcoJHZhbHVlKSIgaWYgJHR5cGUgZXEgIkRP
TVVzZXJEYXRhIjsKKyAgICBpZiAoJHR5cGUgZXEgIkRPTVVzZXJEYXRhIikgeworICAgICAgICBy
ZXR1cm4gInRvV2ViQ29yZVN0cmluZyhhcmdzLCAkMSkiIGlmICR2YWx1ZSA9fiAvYXJnc1xbKFxk
KyldLzsKKyAgICAgICAgcmV0dXJuICJ0b1dlYkNvcmVTdHJpbmcoJHZhbHVlKSI7CisgICAgfQog
ICAgIGlmICgkdHlwZSBlcSAiRE9NU3RyaW5nIikgewogICAgICAgICByZXR1cm4gInRvV2ViQ29y
ZVN0cmluZ1dpdGhOdWxsQ2hlY2soJHZhbHVlKSIgaWYgJHNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRy
aWJ1dGVzLT57IkNvbnZlcnROdWxsVG9OdWxsU3RyaW5nIn07CiAgICAgICAgIHJldHVybiAidG9X
ZWJDb3JlU3RyaW5nV2l0aE51bGxPclVuZGVmaW5lZENoZWNrKCR2YWx1ZSkiIGlmICRzaWduYXR1
cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDb252ZXJ0VW5kZWZpbmVkT3JOdWxsVG9OdWxsU3Ry
aW5nIn07CisgICAgICAgIAorICAgICAgICByZXR1cm4gInRvV2ViQ29yZVN0cmluZyhhcmdzLCAk
MSkiIGlmICR2YWx1ZSA9fiAvYXJnc1xbKFxkKyldLzsKICAgICAgICAgcmV0dXJuICJ0b1dlYkNv
cmVTdHJpbmcoJHZhbHVlKSI7CiAgICAgfQogCkBAIC0xOTU2LDcgKzIwNTEsNyBAQAogICAgICAg
ICAkaW1wbEluY2x1ZGVzeyJWOE5vZGUuaCJ9ID0gMTsKIAogICAgICAgICAjIEV2ZW50VGFyZ2V0
IGlzIG5vdCBpbiBET00gaGllcmFyY2h5LCBidXQgYWxsIE5vZGVzIGFyZSBFdmVudFRhcmdldC4K
LSAgICAgICAgcmV0dXJuICJWOE5vZGU6Okhhc0luc3RhbmNlKCR2YWx1ZSkgPyBWOERPTVdyYXBw
ZXI6OmNvbnZlcnRET01XcmFwcGVyVG9Ob2RlPE5vZGU+KHY4OjpIYW5kbGU8djg6Ok9iamVjdD46
OkNhc3QoJHZhbHVlKSkgOiAwIjsKKyAgICAgICAgcmV0dXJuICJWOE5vZGU6Okhhc0luc3RhbmNl
KCR2YWx1ZSkgPyB2OERPTVdyYXBwZXJUb05vZGU8Tm9kZT4odjg6OkhhbmRsZTx2ODo6T2JqZWN0
Pjo6Q2FzdCgkdmFsdWUpKSA6IDAiOwogICAgIH0KIAogICAgIGlmICgkdHlwZSBlcSAiWFBhdGhO
U1Jlc29sdmVyIikgewpAQCAtMTk3MSw3ICsyMDY2LDcgQEAKIAogICAgICAgICAjIFBlcmZvcm0g
dHlwZSBjaGVja3Mgb24gdGhlIHBhcmFtZXRlciwgaWYgaXQgaXMgZXhwZWN0ZWQgTm9kZSB0eXBl
LAogICAgICAgICAjIHJldHVybiBOVUxMLgotICAgICAgICByZXR1cm4gIlY4JHt0eXBlfTo6SGFz
SW5zdGFuY2UoJHZhbHVlKSA/IFY4RE9NV3JhcHBlcjo6Y29udmVydERPTVdyYXBwZXJUb05vZGU8
JHt0eXBlfT4odjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdCgkdmFsdWUpKSA6IDAiOworICAg
ICAgICByZXR1cm4gIlY4JHt0eXBlfTo6SGFzSW5zdGFuY2UoJHZhbHVlKSA/IHY4RE9NV3JhcHBl
clRvTm9kZTwke3R5cGV9Pih2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KCR2YWx1ZSkpIDog
MCI7CiAgICAgfSBlbHNlIHsKICAgICAgICAgIyBUT0RPOiBUZW1wb3JhcnkgdG8gYXZvaWQgV2lu
ZG93IG5hbWUgY29uZmxpY3QuCiAgICAgICAgIG15ICRjbGFzc0luZGV4ID0gdWMoJHR5cGUpOwpA
QCAtMTk5MCw3ICsyMDg1LDcgQEAKIAogICAgICAgICAjIFBlcmZvcm0gdHlwZSBjaGVja3Mgb24g
dGhlIHBhcmFtZXRlciwgaWYgaXQgaXMgZXhwZWN0ZWQgTm9kZSB0eXBlLAogICAgICAgICAjIHJl
dHVybiBOVUxMLgotICAgICAgICByZXR1cm4gIlY4JHt0eXBlfTo6SGFzSW5zdGFuY2UoJHZhbHVl
KSA/IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PCR7aW1wbENsYXNzTmFtZX0+
KFY4Q2xhc3NJbmRleDo6JHtjbGFzc0luZGV4fSwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2Fz
dCgkdmFsdWUpKSA6IDAiOworICAgICAgICByZXR1cm4gIlY4JHt0eXBlfTo6SGFzSW5zdGFuY2Uo
JHZhbHVlKSA/IHY4RE9NV3JhcHBlclRvPCR7aW1wbENsYXNzTmFtZX0+KFY4Q2xhc3NJbmRleDo6
JHtjbGFzc0luZGV4fSwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdCgkdmFsdWUpKSA6IDAi
OwogICAgIH0KIH0KIApAQCAtMjEyMyw4ICsyMjE4LDggQEAKICAgICBteSAkY2xhc3NOYW1lPSAi
VjgkdHlwZSI7CiAKICAgICByZXR1cm4gInJldHVybiB2ODo6RGF0ZTo6TmV3KHN0YXRpY19jYXN0
PGRvdWJsZT4oJHZhbHVlKSkiIGlmICR0eXBlIGVxICJET01UaW1lU3RhbXAiOwotICAgIHJldHVy
biAicmV0dXJuICR2YWx1ZSA/IHY4OjpUcnVlKCkgOiB2ODo6RmFsc2UoKSIgaWYgJHR5cGUgZXEg
ImJvb2xlYW4iOwotICAgIHJldHVybiAicmV0dXJuIHY4OjpVbmRlZmluZWQoKSIgaWYgJHR5cGUg
ZXEgInZvaWQiOworICAgIHJldHVybiAicmV0dXJuIHY4Qm9vbGVhbigkdmFsdWUpIiBpZiAkdHlw
ZSBlcSAiYm9vbGVhbiI7CisgICAgcmV0dXJuICJyZXR1cm4gdjg6OkhhbmRsZTx2ODo6VmFsdWU+
KCkiIGlmICR0eXBlIGVxICJ2b2lkIjsgICAgICMgZXF1aXZhbGVudCB0byB2ODo6VW5kZWZpbmVk
KCkKIAogICAgICMgRm9yIGFsbCB0aGUgdHlwZXMgd2hlcmUgd2UgdXNlICdpbnQnIGFzIHRoZSBy
ZXByZXNlbnRhdGlvbiB0eXBlLAogICAgICMgd2UgdXNlIEludGVnZXI6Ok5ldyB3aGljaCBoYXMg
YSBmYXN0IFNtaSBjb252ZXJzaW9uIGNoZWNrLgpJbmRleDogL1ZvbHVtZXMvWXR0cml1bS9zcmMv
dGhpcmRfcGFydHkvV2ViS2l0L1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSAvVm9sdW1lcy9ZdHRyaXVtL3NyYy90aGlyZF9wYXJ0eS9XZWJLaXQvV2Vi
Q29yZS9iaW5kaW5ncy92OC9WOERPTVdyYXBwZXIuY3BwCShyZXZpc2lvbiA1MDY2NCkKKysrIC9W
b2x1bWVzL1l0dHJpdW0vc3JjL3RoaXJkX3BhcnR5L1dlYktpdC9XZWJDb3JlL2JpbmRpbmdzL3Y4
L1Y4RE9NV3JhcHBlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNs
dWRlICJDYW52YXNBcnJheS5oIgogI2luY2x1ZGUgIkNTU011dGFibGVTdHlsZURlY2xhcmF0aW9u
LmgiCiAjaW5jbHVkZSAiQ2hyb21pdW1CcmlkZ2UuaCIKKyNpbmNsdWRlICJET01EYXRhLmgiCiAj
aW5jbHVkZSAiRE9NT2JqZWN0c0luY2x1ZGUuaCIKICNpbmNsdWRlICJEb2N1bWVudExvYWRlci5o
IgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCkBAIC0xMzA0LDYgKzEzMDUsMjggQEAK
IAogICAgIHJldHVybiB3cmFwcGVyOwogfQorICAgIAordjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4
RE9NV3JhcHBlcjo6Y29udmVydE5vZGVUb1Y4T2JqZWN0KE5vZGUqIG5vZGUpCit7CisgICAgaWYg
KCFub2RlKQorICAgICAgICByZXR1cm4gdjg6Ok51bGwoKTsKKyAgICAKKyAgICBEb2N1bWVudCog
ZG9jdW1lbnQgPSBub2RlLT5kb2N1bWVudCgpOworICAgIGlmIChub2RlID09IGRvY3VtZW50KQor
ICAgICAgICByZXR1cm4gY29udmVydERvY3VtZW50VG9WOE9iamVjdChkb2N1bWVudCk7CisgICAg
CisgICAgRE9NV3JhcHBlck1hcDxOb2RlPiYgZG9tTm9kZU1hcCA9IGdldERPTU5vZGVNYXAoKTsK
KyAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBwZXIgPSBkb21Ob2RlTWFwLmdldChub2Rl
KTsKKyAgICBpZiAod3JhcHBlci5Jc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBjb252ZXJ0TmV3
Tm9kZVRvVjhPYmplY3Qobm9kZSwgMCwgZG9tTm9kZU1hcCk7CisgICAgCisgICAgcmV0dXJuIHdy
YXBwZXI7Cit9CisgICAgCit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhET01XcmFwcGVyOjpjb252
ZXJ0TmV3Tm9kZVRvVjhPYmplY3QoTm9kZSogbm9kZSkKK3sKKyAgICByZXR1cm4gY29udmVydE5l
d05vZGVUb1Y4T2JqZWN0KG5vZGUsIDAsIGdldERPTU5vZGVNYXAoKSk7Cit9CiAKIC8vIENhbGxl
ciBjaGVja3Mgbm9kZSBpcyBub3QgbnVsbC4KIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOERPTVdy
YXBwZXI6OmNvbnZlcnROZXdOb2RlVG9WOE9iamVjdChOb2RlKiBub2RlLCBWOFByb3h5KiBwcm94
eSwgRE9NV3JhcHBlck1hcDxOb2RlPiYgZG9tTm9kZU1hcCkKSW5kZXg6IC9Wb2x1bWVzL1l0dHJp
dW0vc3JjL3RoaXJkX3BhcnR5L1dlYktpdC9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSAvVm9sdW1lcy9ZdHRyaXVtL3NyYy90aGlyZF9wYXJ0eS9XZWJLaXQvV2Vi
Q29yZS9iaW5kaW5ncy92OC9WOFByb3h5LmgJKHJldmlzaW9uIDUwNjY0KQorKysgL1ZvbHVtZXMv
WXR0cml1bS9zcmMvdGhpcmRfcGFydHkvV2ViS2l0L1dlYkNvcmUvYmluZGluZ3MvdjgvVjhQcm94
eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIsNiArMTAyLDE3IEBACiAKICAgICB2b2lkIGJhdGNo
Q29uZmlndXJlQ29uc3RhbnRzKHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uVGVtcGxhdGU+LCB2ODo6
SGFuZGxlPHY4OjpPYmplY3RUZW1wbGF0ZT4sIGNvbnN0IEJhdGNoZWRDb25zdGFudCosIHNpemVf
dCBjb25zdGFudENvdW50KTsKIAorICAgIHN0cnVjdCBCYXRjaGVkQ2FsbGJhY2sgeworICAgICAg
ICBjb25zdCBjaGFyKiBjb25zdCBuYW1lOworICAgICAgICB2ODo6SW52b2NhdGlvbkNhbGxiYWNr
IGNhbGxiYWNrOworICAgIH07CisKKyAgICB2b2lkIGJhdGNoQ29uZmlndXJlQ2FsbGJhY2tzKHY4
OjpIYW5kbGU8djg6Ok9iamVjdFRlbXBsYXRlPiwgCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB2ODo6SGFuZGxlPHY4OjpTaWduYXR1cmU+LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdjg6OlByb3BlcnR5QXR0cmlidXRlLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgQmF0Y2hlZENhbGxiYWNrKiwgCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzaXplX3QgY2FsbGJhY2tDb3VudCk7CisKICAgICBjb25zdCBpbnQga01h
eFJlY3Vyc2lvbkRlcHRoID0gMjA7CiAKICAgICAvLyBJbmZvcm1hdGlvbiBhYm91dCBhbiBleHRl
bnNpb24gdGhhdCBpcyByZWdpc3RlcmVkIGZvciB1c2Ugd2l0aCBWOC4gSWYKSW5kZXg6IC9Wb2x1
bWVzL1l0dHJpdW0vc3JjL3RoaXJkX3BhcnR5L1dlYktpdC9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4
UHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIC9Wb2x1bWVzL1l0dHJpdW0vc3JjL3RoaXJkX3BhcnR5
L1dlYktpdC9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuY3BwCShyZXZpc2lvbiA1MDY2NCkK
KysrIC9Wb2x1bWVzL1l0dHJpdW0vc3JjL3RoaXJkX3BhcnR5L1dlYktpdC9XZWJDb3JlL2JpbmRp
bmdzL3Y4L1Y4UHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MiwxNCArNzIsMzUgQEAKIGNv
bnN0IGNoYXIqIFY4UHJveHk6OmtDb250ZXh0RGVidWdEYXRhVHlwZSA9ICJ0eXBlIjsKIGNvbnN0
IGNoYXIqIFY4UHJveHk6OmtDb250ZXh0RGVidWdEYXRhVmFsdWUgPSAidmFsdWUiOwogCi12b2lk
IGJhdGNoQ29uZmlndXJlQXR0cmlidXRlcyh2ODo6SGFuZGxlPHY4OjpPYmplY3RUZW1wbGF0ZT4g
aW5zdGFuY2UsIHY4OjpIYW5kbGU8djg6Ok9iamVjdFRlbXBsYXRlPiBwcm90bywgY29uc3QgQmF0
Y2hlZEF0dHJpYnV0ZSogYXR0cmlidXRlcywgc2l6ZV90IGF0dHJpYnV0ZUNvdW50KQordm9pZCBi
YXRjaENvbmZpZ3VyZUF0dHJpYnV0ZXModjg6OkhhbmRsZTx2ODo6T2JqZWN0VGVtcGxhdGU+IGlu
c3RhbmNlLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHY4OjpIYW5kbGU8djg6Ok9i
amVjdFRlbXBsYXRlPiBwcm90bywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBCYXRjaGVkQXR0cmlidXRlKiBhdHRyaWJ1dGVzLCAKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNpemVfdCBhdHRyaWJ1dGVDb3VudCkKIHsKICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGF0dHJpYnV0ZUNvdW50OyArK2kpCiAgICAgICAgIGNvbmZpZ3VyZUF0dHJpYnV0ZShpbnN0
YW5jZSwgcHJvdG8sIGF0dHJpYnV0ZXNbaV0pOwogfQogCi12b2lkIGJhdGNoQ29uZmlndXJlQ29u
c3RhbnRzKHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IGZ1bmN0aW9uRGVzY3JpcHRv
ciwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0VGVtcGxhdGU+IHByb3RvLCBjb25zdCBCYXRjaGVkQ29u
c3RhbnQqIGNvbnN0YW50cywgc2l6ZV90IGNvbnN0YW50Q291bnQpCit2b2lkIGJhdGNoQ29uZmln
dXJlQ2FsbGJhY2tzKHY4OjpIYW5kbGU8djg6Ok9iamVjdFRlbXBsYXRlPiBwcm90bywgCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHY4OjpIYW5kbGU8djg6OlNpZ25hdHVyZT4gc2lnbmF0
dXJlLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdjg6OlByb3BlcnR5QXR0cmlidXRl
IGF0dHJpYnV0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEJhdGNoZWRD
YWxsYmFjayogY2FsbGJhY2tzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qg
Y2FsbGJhY2tDb3VudCkKIHsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNhbGxiYWNrQ291
bnQ7ICsraSkgeworICAgICAgICBwcm90by0+U2V0KHY4OjpTdHJpbmc6Ok5ldyhjYWxsYmFja3Nb
aV0ubmFtZSksCisgICAgICAgICAgICAgICAgICAgdjg6OkZ1bmN0aW9uVGVtcGxhdGU6Ok5ldyhj
YWxsYmFja3NbaV0uY2FsbGJhY2ssIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduYXR1cmUpLAorICAgICAgICAgICAgICAgICAg
IGF0dHJpYnV0ZXMpOworICAgIH0KK30KKwordm9pZCBiYXRjaENvbmZpZ3VyZUNvbnN0YW50cyh2
ODo6SGFuZGxlPHY4OjpGdW5jdGlvblRlbXBsYXRlPiBmdW5jdGlvbkRlc2NyaXB0b3IsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdFRlbXBsYXRlPiBw
cm90bywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQmF0Y2hlZENvbnN0YW50
KiBjb25zdGFudHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBjb25zdGFu
dENvdW50KQorewogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY29uc3RhbnRDb3VudDsgKytp
KSB7CiAgICAgICAgIGNvbnN0IEJhdGNoZWRDb25zdGFudCogY29uc3RhbnQgPSAmY29uc3RhbnRz
W2ldOwogICAgICAgICBmdW5jdGlvbkRlc2NyaXB0b3ItPlNldCh2ODo6U3RyaW5nOjpOZXcoY29u
c3RhbnQtPm5hbWUpLCB2ODo6SW50ZWdlcjo6TmV3KGNvbnN0YW50LT52YWx1ZSksIHY4OjpSZWFk
T25seSk7CkluZGV4OiAvVm9sdW1lcy9ZdHRyaXVtL3NyYy90aGlyZF9wYXJ0eS9XZWJLaXQvV2Vi
Q29yZS9iaW5kaW5ncy92OC9WOERPTVdyYXBwZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSAvVm9sdW1lcy9Z
dHRyaXVtL3NyYy90aGlyZF9wYXJ0eS9XZWJLaXQvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdy
YXBwZXIuaAkocmV2aXNpb24gNTA2NjQpCisrKyAvVm9sdW1lcy9ZdHRyaXVtL3NyYy90aGlyZF9w
YXJ0eS9XZWJLaXQvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdyYXBwZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtMTQ3LDIzICsxNDcsOCBAQAogICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnROb2Rl
VG9WOE9iamVjdChub2RlLmdldCgpKTsKICAgICAgICAgfQogCi0gICAgICAgIHN0YXRpYyB2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4gY29udmVydE5vZGVUb1Y4T2JqZWN0KE5vZGUqIG5vZGUpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIGlmICghbm9kZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gdjg6
Ok51bGwoKTsKKyAgICAgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjb252ZXJ0Tm9k
ZVRvVjhPYmplY3QoTm9kZSogbm9kZSk7CiAKLSAgICAgICAgICAgIERvY3VtZW50KiBkb2N1bWVu
dCA9IG5vZGUtPmRvY3VtZW50KCk7Ci0gICAgICAgICAgICBpZiAobm9kZSA9PSBkb2N1bWVudCkK
LSAgICAgICAgICAgICAgICByZXR1cm4gY29udmVydERvY3VtZW50VG9WOE9iamVjdChkb2N1bWVu
dCk7Ci0KLSAgICAgICAgICAgIERPTVdyYXBwZXJNYXA8Tm9kZT4mIGRvbU5vZGVNYXAgPSBnZXRE
T01Ob2RlTWFwKCk7Ci0gICAgICAgICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBwZXIg
PSBkb21Ob2RlTWFwLmdldChub2RlKTsKLSAgICAgICAgICAgIGlmICh3cmFwcGVyLklzRW1wdHko
KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gY29udmVydE5ld05vZGVUb1Y4T2JqZWN0KG5vZGUs
IDAsIGRvbU5vZGVNYXApOwotCi0gICAgICAgICAgICByZXR1cm4gd3JhcHBlcjsKLSAgICAgICAg
fQotCiAgICAgICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY29udmVydERvY3VtZW50
VG9WOE9iamVjdChEb2N1bWVudCopOwogCiAgICAgICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gY29udmVydE5ld05vZGVUb1Y4T2JqZWN0KFBhc3NSZWZQdHI8Tm9kZT4gbm9kZSkKQEAg
LTE3MSwxMCArMTU2LDcgQEAKICAgICAgICAgICAgIHJldHVybiBjb252ZXJ0TmV3Tm9kZVRvVjhP
YmplY3Qobm9kZS5nZXQoKSk7CiAgICAgICAgIH0KIAotICAgICAgICBzdGF0aWMgdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IGNvbnZlcnROZXdOb2RlVG9WOE9iamVjdChOb2RlKiBub2RlKQotICAgICAg
ICB7Ci0gICAgICAgICAgICByZXR1cm4gY29udmVydE5ld05vZGVUb1Y4T2JqZWN0KG5vZGUsIDAs
IGdldERPTU5vZGVNYXAoKSk7Ci0gICAgICAgIH0KKyAgICAgICAgc3RhdGljIHY4OjpIYW5kbGU8
djg6OlZhbHVlPiBjb252ZXJ0TmV3Tm9kZVRvVjhPYmplY3QoTm9kZSopOwogCiAgICAgICAgIHN0
YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY29udmVydE5ld05vZGVUb1Y4T2JqZWN0KE5vZGUq
LCBWOFByb3h5KiwgRE9NV3JhcHBlck1hcDxOb2RlPiYpOwogCkluZGV4OiAvVm9sdW1lcy9ZdHRy
aXVtL3NyYy90aGlyZF9wYXJ0eS9XZWJLaXQvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFV0aWxpdGll
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIC9Wb2x1bWVzL1l0dHJpdW0vc3JjL3RoaXJkX3BhcnR5L1dlYktp
dC9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4VXRpbGl0aWVzLmgJKHJldmlzaW9uIDUwNjY0KQorKysg
L1ZvbHVtZXMvWXR0cml1bS9zcmMvdGhpcmRfcGFydHkvV2ViS2l0L1dlYkNvcmUvYmluZGluZ3Mv
djgvVjhVdGlsaXRpZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKKyAgICBjbGFzcyBFdmVudExpc3RlbmVyOwogICAgIGNsYXNzIEZy
YW1lOwogICAgIGNsYXNzIEtVUkw7CiAgICAgY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsK
QEAgLTQ0LDcgKzQ1LDEwIEBACiAgICAgLy8gVXNlIGFuIGFycmF5IHRvIGhvbGQgZGVwZW5kZW50
cy4gSXQgd29ya3MgbGlrZSBhIHJlZi1jb3VudGVkIHNjaGVtZS4gQSB2YWx1ZSBjYW4gYmUgYWRk
ZWQgbW9yZSB0aGFuIG9uY2UgdG8gdGhlIERPTSBvYmplY3QuCiAgICAgdm9pZCBjcmVhdGVIaWRk
ZW5EZXBlbmRlbmN5KHY4OjpIYW5kbGU8djg6Ok9iamVjdD4sIHY4OjpMb2NhbDx2ODo6VmFsdWU+
LCBpbnQgY2FjaGVJbmRleCk7CiAgICAgdm9pZCByZW1vdmVIaWRkZW5EZXBlbmRlbmN5KHY4OjpI
YW5kbGU8djg6Ok9iamVjdD4sIHY4OjpMb2NhbDx2ODo6VmFsdWU+LCBpbnQgY2FjaGVJbmRleCk7
Ci0KKyAgICAKKyAgICAvLyBDb21ibyBjcmVhdGUvcmVtb3ZlLCBmb3IgZ2VuZXJhdGVkIGV2ZW50
LWhhbmRsZXItc2V0dGVyIGJpbmRpbmdzOgorICAgIHZvaWQgdHJhbnNmZXJIaWRkZW5EZXBlbmRl
bmN5KHY4OjpIYW5kbGU8djg6Ok9iamVjdD4sIEV2ZW50TGlzdGVuZXIqIG9sZFZhbHVlLCB2ODo6
TG9jYWw8djg6OlZhbHVlPiBuZXdWYWx1ZSwgaW50IGNhY2hlSW5kZXgpOworICAgIAogICAgIGJv
b2wgcHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCk7CiAgICAgYm9vbCBzaG91bGRBbGxvd05hdmlnYXRp
b24oRnJhbWUqKTsKICAgICBLVVJMIGNvbXBsZXRlVVJMKGNvbnN0IFN0cmluZyYgcmVsYXRpdmVV
UkwpOwpJbmRleDogL1ZvbHVtZXMvWXR0cml1bS9zcmMvdGhpcmRfcGFydHkvV2ViS2l0L1dlYkNv
cmUvYmluZGluZ3MvdjgvVjhCaW5kaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSAvVm9sdW1lcy9ZdHRy
aXVtL3NyYy90aGlyZF9wYXJ0eS9XZWJLaXQvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEJpbmRpbmcu
Y3BwCShyZXZpc2lvbiA1MDY2NCkKKysrIC9Wb2x1bWVzL1l0dHJpdW0vc3JjL3RoaXJkX3BhcnR5
L1dlYktpdC9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4QmluZGluZy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMzLDggKzMzLDEwIEBACiAKICNpbmNsdWRlICJBdG9taWNTdHJpbmcuaCIKICNpbmNsdWRl
ICJDU3RyaW5nLmgiCisjaW5jbHVkZSAiRWxlbWVudC5oIgogI2luY2x1ZGUgIk1hdGhFeHRyYXMu
aCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIlF1YWxpZmllZE5hbWUu
aCIKICNpbmNsdWRlICJTdGRMaWJFeHRyYXMuaCIKICNpbmNsdWRlICJTdHJpbmdCdWZmZXIuaCIK
ICNpbmNsdWRlICJTdHJpbmdIYXNoLmgiCkBAIC0xMjgsMTMgKzEzMCwxMjIgQEAKICNlbmRpZgog
fTsKIAotZW51bSBFeHRlcm5hbE1vZGUgewotICAgIEV4dGVybmFsaXplLAotICAgIERvTm90RXh0
ZXJuYWxpemUKLX07CiAKK3ZvaWQqIHY4RE9NV3JhcHBlclRvTmF0aXZlKHY4OjpIYW5kbGU8djg6
Ok9iamVjdD4gb2JqZWN0KSB7CisgICAgcmV0dXJuIG9iamVjdC0+R2V0UG9pbnRlckZyb21JbnRl
cm5hbEZpZWxkKFY4Q3VzdG9tOjprRE9NV3JhcHBlck9iamVjdEluZGV4KTsKK30KKyAgICAKK3Zv
aWQqIHY4RE9NV3JhcHBlclRvTmF0aXZlKGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pIHsK
KyAgICByZXR1cm4gaW5mby5Ib2xkZXIoKS0+R2V0UG9pbnRlckZyb21JbnRlcm5hbEZpZWxkKFY4
Q3VzdG9tOjprRE9NV3JhcHBlck9iamVjdEluZGV4KTsKK30KKyAgICAKKworU3RyaW5nIHY4VmFs
dWVUb1dlYkNvcmVTdHJpbmcodjg6OkhhbmRsZTx2ODo6VmFsdWU+IHZhbHVlKQoreworICAgIGlm
ICh2YWx1ZS0+SXNTdHJpbmcoKSkKKyAgICAgICAgcmV0dXJuIHY4U3RyaW5nVG9XZWJDb3JlU3Ry
aW5nKHY4OjpIYW5kbGU8djg6OlN0cmluZz46OkNhc3QodmFsdWUpKTsKKyAgICByZXR1cm4gdjhO
b25TdHJpbmdWYWx1ZVRvV2ViQ29yZVN0cmluZyh2YWx1ZSk7Cit9CisKK0F0b21pY1N0cmluZyB2
OFZhbHVlVG9BdG9taWNXZWJDb3JlU3RyaW5nKHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSkK
K3sKKyAgICBpZiAodmFsdWUtPklzU3RyaW5nKCkpCisgICAgICAgIHJldHVybiB2OFN0cmluZ1Rv
QXRvbWljV2ViQ29yZVN0cmluZyh2ODo6SGFuZGxlPHY4OjpTdHJpbmc+OjpDYXN0KHZhbHVlKSk7
CisgICAgcmV0dXJuIHY4Tm9uU3RyaW5nVmFsdWVUb0F0b21pY1dlYkNvcmVTdHJpbmcodmFsdWUp
OworfQorCitpbnQgdG9JbnQzMih2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUsIGJvb2wmIG9r
KQoreworICAgIG9rID0gdHJ1ZTsKKyAgICAKKyAgICAvLyBGYXN0IGNhc2UuICBUaGUgdmFsdWUg
aXMgYWxyZWFkeSBhIDMyLWJpdCBpbnRlZ2VyLgorICAgIGlmICh2YWx1ZS0+SXNJbnQzMigpKQor
ICAgICAgICByZXR1cm4gdmFsdWUtPkludDMyVmFsdWUoKTsKKyAgICAKKyAgICAvLyBDYW4gdGhl
IHZhbHVlIGJlIGNvbnZlcnRlZCB0byBhIG51bWJlcj8KKyAgICB2ODo6TG9jYWw8djg6Ok51bWJl
cj4gbnVtYmVyT2JqZWN0ID0gdmFsdWUtPlRvTnVtYmVyKCk7CisgICAgaWYgKG51bWJlck9iamVj
dC5Jc0VtcHR5KCkpIHsKKyAgICAgICAgb2sgPSBmYWxzZTsKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgfQorICAgIAorICAgIC8vIERvZXMgdGhlIHZhbHVlIGNvbnZlcnQgdG8gbmFuIG9yIHRvIGFu
IGluZmluaXR5PworICAgIGRvdWJsZSBudW1iZXJWYWx1ZSA9IG51bWJlck9iamVjdC0+VmFsdWUo
KTsKKyAgICBpZiAoaXNuYW4obnVtYmVyVmFsdWUpIHx8IGlzaW5mKG51bWJlclZhbHVlKSkgewor
ICAgICAgICBvayA9IGZhbHNlOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgCisgICAg
Ly8gQ2FuIHRoZSB2YWx1ZSBiZSBjb252ZXJ0ZWQgdG8gYSAzMi1iaXQgaW50ZWdlcj8KKyAgICB2
ODo6TG9jYWw8djg6OkludDMyPiBpbnRWYWx1ZSA9IHZhbHVlLT5Ub0ludDMyKCk7CisgICAgaWYg
KGludFZhbHVlLklzRW1wdHkoKSkgeworICAgICAgICBvayA9IGZhbHNlOworICAgICAgICByZXR1
cm4gMDsKKyAgICB9CisgICAgCisgICAgLy8gUmV0dXJuIHRoZSByZXN1bHQgb2YgdGhlIGludDMy
IGNvbnZlcnNpb24uCisgICAgcmV0dXJuIGludFZhbHVlLT5WYWx1ZSgpOworfQorICAgIAorU3Ry
aW5nIHRvV2ViQ29yZVN0cmluZyhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzLCBpbnQgaW5kZXgp
IHsKKyAgICByZXR1cm4gdjhWYWx1ZVRvV2ViQ29yZVN0cmluZyhhcmdzW2luZGV4XSk7Cit9CisK
KyAgICAKK1N0cmluZyB0b1dlYkNvcmVTdHJpbmdXaXRoTnVsbENoZWNrKHY4OjpIYW5kbGU8djg6
OlZhbHVlPiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUtPklzTnVsbCgpKSAKKyAgICAgICAgcmV0
dXJuIFN0cmluZygpOworICAgIHJldHVybiB2OFZhbHVlVG9XZWJDb3JlU3RyaW5nKHZhbHVlKTsK
K30KKworQXRvbWljU3RyaW5nIHRvQXRvbWljV2ViQ29yZVN0cmluZ1dpdGhOdWxsQ2hlY2sodjg6
OkhhbmRsZTx2ODo6VmFsdWU+IHZhbHVlKQoreworICAgIGlmICh2YWx1ZS0+SXNOdWxsKCkpCisg
ICAgICAgIHJldHVybiBBdG9taWNTdHJpbmcoKTsKKyAgICByZXR1cm4gdjhWYWx1ZVRvQXRvbWlj
V2ViQ29yZVN0cmluZyh2YWx1ZSk7Cit9CisKK1N0cmluZyB0b1dlYkNvcmVTdHJpbmdXaXRoTnVs
bE9yVW5kZWZpbmVkQ2hlY2sodjg6OkhhbmRsZTx2ODo6VmFsdWU+IHZhbHVlKQoreworICAgIGlm
ICh2YWx1ZS0+SXNOdWxsKCkgfHwgdmFsdWUtPklzVW5kZWZpbmVkKCkpCisgICAgICAgIHJldHVy
biBTdHJpbmcoKTsKKyAgICByZXR1cm4gdG9XZWJDb3JlU3RyaW5nKHZhbHVlKTsKK30KKworYm9v
bCBpc1VuZGVmaW5lZE9yTnVsbCh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUpCit7CisgICAg
cmV0dXJuIHZhbHVlLT5Jc051bGwoKSB8fCB2YWx1ZS0+SXNVbmRlZmluZWQoKTsKK30KKwordjg6
OkhhbmRsZTx2ODo6Qm9vbGVhbj4gdjhCb29sZWFuKGJvb2wgdmFsdWUpCit7CisgICAgcmV0dXJu
IHZhbHVlID8gdjg6OlRydWUoKSA6IHY4OjpGYWxzZSgpOworfQorCit2ODo6SGFuZGxlPHY4OjpT
dHJpbmc+IHY4VW5kZXRlY3RhYmxlU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyKQoreworICAgIHJl
dHVybiB2ODo6U3RyaW5nOjpOZXdVbmRldGVjdGFibGUoZnJvbVdlYkNvcmVTdHJpbmcoc3RyKSwg
c3RyLmxlbmd0aCgpKTsKK30KKwordjg6OkhhbmRsZTx2ODo6VmFsdWU+IHY4U3RyaW5nT3JOdWxs
KGNvbnN0IFN0cmluZyYgc3RyKQoreworICAgIHJldHVybiBzdHIuaXNOdWxsKCkgPyB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4odjg6Ok51bGwoKSkgOiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4odjhTdHJp
bmcoc3RyKSk7Cit9CisKK3Y4OjpIYW5kbGU8djg6OlZhbHVlPiB2OFN0cmluZ09yVW5kZWZpbmVk
KGNvbnN0IFN0cmluZyYgc3RyKQoreworICAgIHJldHVybiBzdHIuaXNOdWxsKCkgPyB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4odjg6OlVuZGVmaW5lZCgpKSA6IHY4OjpIYW5kbGU8djg6OlZhbHVlPih2
OFN0cmluZyhzdHIpKTsKK30KKwordjg6OkhhbmRsZTx2ODo6VmFsdWU+IHY4U3RyaW5nT3JGYWxz
ZShjb25zdCBTdHJpbmcmIHN0cikKK3sKKyAgICByZXR1cm4gc3RyLmlzTnVsbCgpID8gdjg6Okhh
bmRsZTx2ODo6VmFsdWU+KHY4OjpGYWxzZSgpKSA6IHY4OjpIYW5kbGU8djg6OlZhbHVlPih2OFN0
cmluZyhzdHIpKTsKK30KKworCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgU3RyaW5nVHlwZT4KLXN0YXRp
YyBTdHJpbmdUeXBlIHY4U3RyaW5nVG9XZWJDb3JlU3RyaW5nKHY4OjpIYW5kbGU8djg6OlN0cmlu
Zz4gdjhTdHJpbmcsIEV4dGVybmFsTW9kZSBleHRlcm5hbCkKK1N0cmluZ1R5cGUgdjhTdHJpbmdU
b1dlYkNvcmVTdHJpbmcodjg6OkhhbmRsZTx2ODo6U3RyaW5nPiB2OFN0cmluZywgRXh0ZXJuYWxN
b2RlIGV4dGVybmFsKQogewogICAgIFdlYkNvcmVTdHJpbmdSZXNvdXJjZSogc3RyaW5nUmVzb3Vy
Y2UgPSBXZWJDb3JlU3RyaW5nUmVzb3VyY2U6OnRvU3RyaW5nUmVzb3VyY2UodjhTdHJpbmcpOwog
ICAgIGlmIChzdHJpbmdSZXNvdXJjZSkKQEAgLTE2OSwxNiArMjgwLDYgQEAKICAgICByZXR1cm4g
cmVzdWx0OwogfQogCi1TdHJpbmcgdjhTdHJpbmdUb1dlYkNvcmVTdHJpbmcodjg6OkhhbmRsZTx2
ODo6U3RyaW5nPiB2OFN0cmluZykKLXsKLSAgICByZXR1cm4gdjhTdHJpbmdUb1dlYkNvcmVTdHJp
bmc8U3RyaW5nPih2OFN0cmluZywgRXh0ZXJuYWxpemUpOwotfQotCi1BdG9taWNTdHJpbmcgdjhT
dHJpbmdUb0F0b21pY1dlYkNvcmVTdHJpbmcodjg6OkhhbmRsZTx2ODo6U3RyaW5nPiB2OFN0cmlu
ZykKLXsKLSAgICByZXR1cm4gdjhTdHJpbmdUb1dlYkNvcmVTdHJpbmc8QXRvbWljU3RyaW5nPih2
OFN0cmluZywgRXh0ZXJuYWxpemUpOwotfQotCiBTdHJpbmcgdjhOb25TdHJpbmdWYWx1ZVRvV2Vi
Q29yZVN0cmluZyh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gb2JqZWN0KQogewogICAgIEFTU0VSVCgh
b2JqZWN0LT5Jc1N0cmluZygpKTsKQEAgLTI1NCwxMyArMzU1LDEzIEBACiAKIHY4OjpMb2NhbDx2
ODo6U3RyaW5nPiB2OEV4dGVybmFsU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nKQogewotICAg
IGlmICghc3RyaW5nLmxlbmd0aCgpKQorICAgIFN0cmluZ0ltcGwqIHN0cmluZ0ltcGwgPSBzdHJp
bmcuaW1wbCgpOworICAgIGlmICghc3RyaW5nSW1wbCB8fCAhc3RyaW5nSW1wbC0+bGVuZ3RoKCkp
CiAgICAgICAgIHJldHVybiB2ODo6U3RyaW5nOjpFbXB0eSgpOwogCiAgICAgaWYgKCFzdHJpbmdJ
bXBsQ2FjaGVFbmFibGVkKQogICAgICAgICByZXR1cm4gbWFrZUV4dGVybmFsU3RyaW5nKHN0cmlu
Zyk7CiAKLSAgICBTdHJpbmdJbXBsKiBzdHJpbmdJbXBsID0gc3RyaW5nLmltcGwoKTsKICAgICBT
dHJpbmdDYWNoZSYgc3RyaW5nQ2FjaGUgPSBnZXRTdHJpbmdDYWNoZSgpOwogICAgIHY4OjpTdHJp
bmcqIGNhY2hlZFY4U3RyaW5nID0gc3RyaW5nQ2FjaGUuZ2V0KHN0cmluZ0ltcGwpOwogICAgIGlm
IChjYWNoZWRWOFN0cmluZykKQEAgLTI4MCw1ICszODEsNjYgQEAKIAogICAgIHJldHVybiBuZXdT
dHJpbmc7CiB9CisgICAgCit2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gY3Jl
YXRlUmF3VGVtcGxhdGUoKQoreworICAgIHY4OjpIYW5kbGVTY29wZSBzY29wZTsKKyAgICB2ODo6
TG9jYWw8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHJlc3VsdCA9IHY4OjpGdW5jdGlvblRlbXBsYXRl
OjpOZXcoVjhQcm94eTo6Y2hlY2tOZXdMZWdhbCk7CisgICAgcmV0dXJuIHY4OjpQZXJzaXN0ZW50
PHY4OjpGdW5jdGlvblRlbXBsYXRlPjo6TmV3KHJlc3VsdCk7Cit9ICAgICAgICAKIAordjg6Okxv
Y2FsPHY4OjpTaWduYXR1cmU+IGNvbmZpZ3VyZVRlbXBsYXRlKHY4OjpQZXJzaXN0ZW50PHY4OjpG
dW5jdGlvblRlbXBsYXRlPmRlc2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgY2hhciAqaW50ZXJmYWNlTmFtZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBWOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5cGUgcGFyZW50
Q2xhc3NJbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgZmllbGRDb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBCYXRjaGVkQXR0cmlidXRlKiBhdHRyaWJ1dGVzLCAKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgYXR0cmlidXRlQ291bnQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQmF0Y2hlZENhbGxiYWNr
KiBjYWxsYmFja3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2l6ZV90IGNhbGxiYWNrQ291bnQpCit7CisgICAgZGVzYy0+U2V0Q2xhc3NOYW1lKHY4OjpTdHJp
bmc6Ok5ldyhpbnRlcmZhY2VOYW1lKSk7CisgICAgdjg6OkxvY2FsPHY4OjpPYmplY3RUZW1wbGF0
ZT4gaW5zdGFuY2UgPSBkZXNjLT5JbnN0YW5jZVRlbXBsYXRlKCk7CisgICAgaW5zdGFuY2UtPlNl
dEludGVybmFsRmllbGRDb3VudChmaWVsZENvdW50KTsKKyAgICBpZiAocGFyZW50Q2xhc3NJbmRl
eCkKKyAgICAgICAgZGVzYy0+SW5oZXJpdChWOERPTVdyYXBwZXI6OmdldFRlbXBsYXRlKHBhcmVu
dENsYXNzSW5kZXgpKTsKKyAgICBpZiAoYXR0cmlidXRlQ291bnQpCisgICAgICAgIGJhdGNoQ29u
ZmlndXJlQXR0cmlidXRlcyhpbnN0YW5jZSwgZGVzYy0+UHJvdG90eXBlVGVtcGxhdGUoKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMsIGF0dHJpYnV0ZUNvdW50
KTsKKyAgICB2ODo6TG9jYWw8djg6OlNpZ25hdHVyZT4gZGVmYXVsdF9zaWduYXR1cmUgPSB2ODo6
U2lnbmF0dXJlOjpOZXcoZGVzYyk7CisgICAgaWYgKGNhbGxiYWNrQ291bnQpCisgICAgICAgIGJh
dGNoQ29uZmlndXJlQ2FsbGJhY2tzKGRlc2MtPlByb3RvdHlwZVRlbXBsYXRlKCksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRfc2lnbmF0dXJlLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDx2ODo6UHJvcGVydHlBdHRyaWJ1dGU+KHY4
OjpEb250RGVsZXRlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tz
LCBjYWxsYmFja0NvdW50KTsKKyAgICByZXR1cm4gZGVmYXVsdF9zaWduYXR1cmU7Cit9CisKK3Zv
aWQgY3JlYXRlQ2FsbGJhY2sodjg6OkxvY2FsPHY4OjpPYmplY3RUZW1wbGF0ZT4gcHJvdG8sCisg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm5hbWUsCisgICAgICAgICAgICAgICAgICAg
IHY4OjpJbnZvY2F0aW9uQ2FsbGJhY2sgY2FsbGJhY2ssCisgICAgICAgICAgICAgICAgICAgIHY4
OjpIYW5kbGU8djg6OlNpZ25hdHVyZT4gc2lnbmF0dXJlLAorICAgICAgICAgICAgICAgICAgICB2
ODo6UHJvcGVydHlBdHRyaWJ1dGUgYXR0cmlidXRlKQoreworICAgIHByb3RvLT5TZXQodjg6OlN0
cmluZzo6TmV3KG5hbWUpLAorICAgICAgICAgICAgICAgdjg6OkZ1bmN0aW9uVGVtcGxhdGU6Ok5l
dyhjYWxsYmFjaywgdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCksIHNpZ25hdHVyZSksCisgICAgICAg
ICAgICAgICBhdHRyaWJ1dGUpOworfQorICAgIAordjg6OkhhbmRsZTx2ODo6VmFsdWU+IGdldEVs
ZW1lbnRTdHJpbmdBdHRyKGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8sCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFt
ZSkgCit7CisgICAgRWxlbWVudCAqaW1wID0gdjhET01XcmFwcGVyVG9Ob2RlPEVsZW1lbnQ+KGlu
Zm8pOworICAgIHJldHVybiB2OFN0cmluZyhpbXAtPmdldEF0dHJpYnV0ZShuYW1lKSk7Cit9CisK
K3ZvaWQgc2V0RWxlbWVudFN0cmluZ0F0dHIoY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUpCit7Cisg
ICAgRWxlbWVudCogaW1wID0gdjhET01XcmFwcGVyVG9Ob2RlPEVsZW1lbnQ+KGluZm8pOworICAg
IEF0b21pY1N0cmluZyB2ID0gdG9BdG9taWNXZWJDb3JlU3RyaW5nV2l0aE51bGxDaGVjayh2YWx1
ZSk7CisgICAgaW1wLT5zZXRBdHRyaWJ1dGUobmFtZSwgdik7Cit9CisKKwogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpJbmRleDogL1ZvbHVtZXMvWXR0cml1bS9zcmMvdGhpcmRfcGFydHkvV2ViS2l0
L1dlYkNvcmUvYmluZGluZ3MvdjgvVjhVdGlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIC9Wb2x1
bWVzL1l0dHJpdW0vc3JjL3RoaXJkX3BhcnR5L1dlYktpdC9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4
VXRpbGl0aWVzLmNwcAkocmV2aXNpb24gNTA2NjQpCisrKyAvVm9sdW1lcy9ZdHRyaXVtL3NyYy90
aGlyZF9wYXJ0eS9XZWJLaXQvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFV0aWxpdGllcy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTc2LDYgKzc2LDI0IEBACiAgICAgICAgIH0KICAgICB9CiB9CisgICAg
Cit2b2lkIHRyYW5zZmVySGlkZGVuRGVwZW5kZW5jeSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IG9i
amVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV2ZW50TGlzdGVuZXIqIG9sZFZh
bHVlLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+
IG5ld1ZhbHVlLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjYWNoZUluZGV4
KQoreworICAgIGlmIChvbGRWYWx1ZSkgeworICAgICAgICBWOEFic3RyYWN0RXZlbnRMaXN0ZW5l
ciogb2xkTGlzdGVuZXIgPSBWOEFic3RyYWN0RXZlbnRMaXN0ZW5lcjo6Y2FzdChvbGRWYWx1ZSk7
CisgICAgICAgIGlmIChvbGRMaXN0ZW5lcikgeworICAgICAgICAgICAgdjg6OkxvY2FsPHY4OjpP
YmplY3Q+IG9sZExpc3RlbmVyT2JqZWN0ID0gb2xkTGlzdGVuZXItPmdldEV4aXN0aW5nTGlzdGVu
ZXJPYmplY3QoKTsKKyAgICAgICAgICAgIGlmICghb2xkTGlzdGVuZXJPYmplY3QuSXNFbXB0eSgp
KQorICAgICAgICAgICAgICAgIHJlbW92ZUhpZGRlbkRlcGVuZGVuY3kob2JqZWN0LCBvbGRMaXN0
ZW5lck9iamVjdCwgY2FjaGVJbmRleCk7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKCFuZXdW
YWx1ZS0+SXNOdWxsKCkgJiYgIW5ld1ZhbHVlLT5Jc1VuZGVmaW5lZCgpKQorICAgICAgICBjcmVh
dGVIaWRkZW5EZXBlbmRlbmN5KG9iamVjdCwgbmV3VmFsdWUsIGNhY2hlSW5kZXgpOworfQorICAg
IAogCiBib29sIHByb2Nlc3NpbmdVc2VyR2VzdHVyZSgpCiB7CkluZGV4OiAvVm9sdW1lcy9ZdHRy
aXVtL3NyYy90aGlyZF9wYXJ0eS9XZWJLaXQvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhF
bGVtZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSAvVm9sdW1lcy9ZdHRyaXVtL3NyYy90aGly
ZF9wYXJ0eS9XZWJLaXQvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhFbGVtZW50Q3VzdG9t
LmNwcAkocmV2aXNpb24gNTA2NjQpCisrKyAvVm9sdW1lcy9ZdHRyaXVtL3NyYy90aGlyZF9wYXJ0
eS9XZWJLaXQvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhFbGVtZW50Q3VzdG9tLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTIsMzYgKzUyLDM2IEBACiB7CiAgICAgSU5DX1NUQVRTKCJET00u
RWxlbWVudC5zZXRBdHRyaWJ1dGUoKSIpOwogICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBWOERPTVdy
YXBwZXI6OmNvbnZlcnRET01XcmFwcGVyVG9Ob2RlPEVsZW1lbnQ+KGFyZ3MuSG9sZGVyKCkpOwot
ICAgIFN0cmluZyBuYW1lID0gdG9XZWJDb3JlU3RyaW5nKGFyZ3NbMF0pOwotICAgIFN0cmluZyB2
YWx1ZSA9IHRvV2ViQ29yZVN0cmluZyhhcmdzWzFdKTsKKyAgICBBdG9taWNTdHJpbmcgbmFtZSA9
IHY4VmFsdWVUb0F0b21pY1dlYkNvcmVTdHJpbmcoYXJnc1swXSk7CisgICAgQXRvbWljU3RyaW5n
IHZhbHVlID0gdjhWYWx1ZVRvQXRvbWljV2ViQ29yZVN0cmluZyhhcmdzWzFdKTsKIAotICAgIGlm
ICghYWxsb3dTZXR0aW5nU3JjVG9KYXZhc2NyaXB0VVJMKGVsZW1lbnQsIG5hbWUsIHZhbHVlKSkK
LSAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKKyAgICBpZiAoVU5MSUtFTFkoIWFsbG93
U2V0dGluZ1NyY1RvSmF2YXNjcmlwdFVSTChlbGVtZW50LCBuYW1lLCB2YWx1ZSkpKQorICAgICAg
ICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCk7CiAKICAgICBFeGNlcHRpb25Db2RlIGVj
ID0gMDsKICAgICBlbGVtZW50LT5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUsIGVjKTsKLSAgICBp
ZiAoZWMpCi0gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGVjKTsKKyAgICBpZiAoVU5MSUtFTFko
ZWMpKQorICAgICAgICB0aHJvd0Vycm9yKGVjKTsKIAotICAgIHJldHVybiB2ODo6VW5kZWZpbmVk
KCk7CisgICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6OlZhbHVlPigpOwogfQogCiBDQUxMQkFDS19G
VU5DX0RFQ0woRWxlbWVudFNldEF0dHJpYnV0ZU5vZGUpCiB7CiAgICAgSU5DX1NUQVRTKCJET00u
RWxlbWVudC5zZXRBdHRyaWJ1dGVOb2RlKCkiKTsKLSAgICBpZiAoIVY4QXR0cjo6SGFzSW5zdGFu
Y2UoYXJnc1swXSkpCisgICAgaWYgKFVOTElLRUxZKCFWOEF0dHI6Okhhc0luc3RhbmNlKGFyZ3Nb
MF0pKSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoVFlQRV9NSVNNQVRDSF9FUlIpOwogCisg
ICAgRWxlbWVudCogZWxlbWVudCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydERPTVdyYXBwZXJUb05v
ZGU8RWxlbWVudD4oYXJncy5Ib2xkZXIoKSk7CiAgICAgQXR0ciogbmV3QXR0ciA9IFY4RE9NV3Jh
cHBlcjo6Y29udmVydERPTVdyYXBwZXJUb05vZGU8QXR0cj4odjg6OkhhbmRsZTx2ODo6T2JqZWN0
Pjo6Q2FzdChhcmdzWzBdKSk7Ci0gICAgRWxlbWVudCogZWxlbWVudCA9IFY4RE9NV3JhcHBlcjo6
Y29udmVydERPTVdyYXBwZXJUb05vZGU8RWxlbWVudD4oYXJncy5Ib2xkZXIoKSk7CiAKLSAgICBp
ZiAoIWFsbG93U2V0dGluZ1NyY1RvSmF2YXNjcmlwdFVSTChlbGVtZW50LCBuZXdBdHRyLT5uYW1l
KCksIG5ld0F0dHItPnZhbHVlKCkpKQotICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwor
ICAgIGlmIChVTkxJS0VMWSghYWxsb3dTZXR0aW5nU3JjVG9KYXZhc2NyaXB0VVJMKGVsZW1lbnQs
IG5ld0F0dHItPm5hbWUoKSwgbmV3QXR0ci0+dmFsdWUoKSkpKQorICAgICAgICByZXR1cm4gdjg6
OkhhbmRsZTx2ODo6VmFsdWU+KCk7CiAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBS
ZWZQdHI8QXR0cj4gcmVzdWx0ID0gZWxlbWVudC0+c2V0QXR0cmlidXRlTm9kZShuZXdBdHRyLCBl
Yyk7Ci0gICAgaWYgKGVjKQotICAgICAgICB0aHJvd0Vycm9yKGVjKTsKKyAgICBpZiAoVU5MSUtF
TFkoZWMpKQorICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihlYyk7CiAKICAgICByZXR1cm4gVjhE
T01XcmFwcGVyOjpjb252ZXJ0Tm9kZVRvVjhPYmplY3QocmVzdWx0LnJlbGVhc2UoKSk7CiB9CkBA
IC05MCwzNyArOTAsMzcgQEAKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5FbGVtZW50LnNldEF0dHJp
YnV0ZU5TKCkiKTsKICAgICBFbGVtZW50KiBlbGVtZW50ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0
RE9NV3JhcHBlclRvTm9kZTxFbGVtZW50PihhcmdzLkhvbGRlcigpKTsKLSAgICBTdHJpbmcgbmFt
ZXNwYWNlVVJJID0gdG9XZWJDb3JlU3RyaW5nV2l0aE51bGxDaGVjayhhcmdzWzBdKTsKLSAgICBT
dHJpbmcgcXVhbGlmaWVkTmFtZSA9IHRvV2ViQ29yZVN0cmluZyhhcmdzWzFdKTsKLSAgICBTdHJp
bmcgdmFsdWUgPSB0b1dlYkNvcmVTdHJpbmcoYXJnc1syXSk7CisgICAgQXRvbWljU3RyaW5nIG5h
bWVzcGFjZVVSSSA9IHRvQXRvbWljV2ViQ29yZVN0cmluZ1dpdGhOdWxsQ2hlY2soYXJnc1swXSk7
CisgICAgQXRvbWljU3RyaW5nIHF1YWxpZmllZE5hbWUgPSB2OFZhbHVlVG9BdG9taWNXZWJDb3Jl
U3RyaW5nKGFyZ3NbMV0pOworICAgIEF0b21pY1N0cmluZyB2YWx1ZSA9IHY4VmFsdWVUb0F0b21p
Y1dlYkNvcmVTdHJpbmcoYXJnc1syXSk7CiAKLSAgICBpZiAoIWFsbG93U2V0dGluZ1NyY1RvSmF2
YXNjcmlwdFVSTChlbGVtZW50LCBxdWFsaWZpZWROYW1lLCB2YWx1ZSkpCisgICAgaWYgKFVOTElL
RUxZKCFhbGxvd1NldHRpbmdTcmNUb0phdmFzY3JpcHRVUkwoZWxlbWVudCwgcXVhbGlmaWVkTmFt
ZSwgdmFsdWUpKSkKICAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKIAogICAgIEV4Y2Vw
dGlvbkNvZGUgZWMgPSAwOwogICAgIGVsZW1lbnQtPnNldEF0dHJpYnV0ZU5TKG5hbWVzcGFjZVVS
SSwgcXVhbGlmaWVkTmFtZSwgdmFsdWUsIGVjKTsKLSAgICBpZiAoZWMpCisgICAgaWYgKFVOTElL
RUxZKGVjKSkKICAgICAgICAgdGhyb3dFcnJvcihlYyk7CiAKLSAgICByZXR1cm4gdjg6OlVuZGVm
aW5lZCgpOworICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsKIH0KIAogQ0FMTEJB
Q0tfRlVOQ19ERUNMKEVsZW1lbnRTZXRBdHRyaWJ1dGVOb2RlTlMpCiB7CiAgICAgSU5DX1NUQVRT
KCJET00uRWxlbWVudC5zZXRBdHRyaWJ1dGVOb2RlTlMoKSIpOwotICAgIGlmICghVjhBdHRyOjpI
YXNJbnN0YW5jZShhcmdzWzBdKSkKKyAgICBpZiAoVU5MSUtFTFkoIVY4QXR0cjo6SGFzSW5zdGFu
Y2UoYXJnc1swXSkpKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihUWVBFX01JU01BVENIX0VS
Uik7CiAKICAgICBBdHRyKiBuZXdBdHRyID0gVjhET01XcmFwcGVyOjpjb252ZXJ0RE9NV3JhcHBl
clRvTm9kZTxBdHRyPih2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KGFyZ3NbMF0pKTsKICAg
ICBFbGVtZW50KiBlbGVtZW50ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0RE9NV3JhcHBlclRvTm9k
ZTxFbGVtZW50PihhcmdzLkhvbGRlcigpKTsKIAotICAgIGlmICghYWxsb3dTZXR0aW5nU3JjVG9K
YXZhc2NyaXB0VVJMKGVsZW1lbnQsIG5ld0F0dHItPm5hbWUoKSwgbmV3QXR0ci0+dmFsdWUoKSkp
Ci0gICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CisgICAgaWYgKFVOTElLRUxZKCFhbGxv
d1NldHRpbmdTcmNUb0phdmFzY3JpcHRVUkwoZWxlbWVudCwgbmV3QXR0ci0+bmFtZSgpLCBuZXdB
dHRyLT52YWx1ZSgpKSkpCisgICAgICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsK
IAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIFJlZlB0cjxBdHRyPiByZXN1bHQgPSBl
bGVtZW50LT5zZXRBdHRyaWJ1dGVOb2RlTlMobmV3QXR0ciwgZWMpOwotICAgIGlmIChlYykKLSAg
ICAgICAgdGhyb3dFcnJvcihlYyk7CisgICAgaWYgKFVOTElLRUxZKGVjKSkKKyAgICAgICAgcmV0
dXJuIHRocm93RXJyb3IoZWMpOwogCiAgICAgcmV0dXJuIFY4RE9NV3JhcHBlcjo6Y29udmVydE5v
ZGVUb1Y4T2JqZWN0KHJlc3VsdC5yZWxlYXNlKCkpOwogfQpJbmRleDogL1ZvbHVtZXMvWXR0cml1
bS9zcmMvdGhpcmRfcGFydHkvV2ViS2l0L1dlYkNvcmUvYmluZGluZ3MvdjgvVjhCaW5kaW5nLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gL1ZvbHVtZXMvWXR0cml1bS9zcmMvdGhpcmRfcGFydHkvV2ViS2l0L1dl
YkNvcmUvYmluZGluZ3MvdjgvVjhCaW5kaW5nLmgJKHJldmlzaW9uIDUwNjY0KQorKysgL1ZvbHVt
ZXMvWXR0cml1bS9zcmMvdGhpcmRfcGFydHkvV2ViS2l0L1dlYkNvcmUvYmluZGluZ3MvdjgvVjhC
aW5kaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDM4ICszNCwxMDggQEAKICNpbmNsdWRlICJB
dG9taWNTdHJpbmcuaCIKICNpbmNsdWRlICJNYXRoRXh0cmFzLmgiCiAjaW5jbHVkZSAiUGxhdGZv
cm1TdHJpbmcuaCIKKyNpbmNsdWRlICJWOERPTVdyYXBwZXIuaCIKKyNpbmNsdWRlICJWOEluZGV4
LmgiCiAKICNpbmNsdWRlIDx2OC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgCisgICAg
Y2xhc3MgRXZlbnRMaXN0ZW5lcjsKKyAgICBjbGFzcyBFdmVudFRhcmdldDsKKyAgICAKKyAgICAv
LyBBIGhlbHBlciBmdW5jdGlvbiBleHRyYWN0IG5hdGl2ZSBvYmplY3QgcG9pbnRlciBmcm9tIGEg
RE9NIHdyYXBwZXIKKyAgICAvLyBhbmQgY2FzdCB0byB0aGUgc3BlY2lmaWVkIHR5cGUuCisgICAg
dm9pZCogdjhET01XcmFwcGVyVG9OYXRpdmUodjg6OkhhbmRsZTx2ODo6T2JqZWN0Pik7CisgICAg
CisgICAgdGVtcGxhdGUgPGNsYXNzIEM+CisgICAgQyogdjhET01XcmFwcGVyVG8odjg6OkhhbmRs
ZTx2ODo6T2JqZWN0PiBvYmplY3QpCisgICAgeworICAgICAgICBBU1NFUlQoVjhET01XcmFwcGVy
OjptYXliZURPTVdyYXBwZXIob2JqZWN0KSk7CisgICAgICAgIHJldHVybiByZWludGVycHJldF9j
YXN0PEMqPih2OERPTVdyYXBwZXJUb05hdGl2ZShvYmplY3QpKTsKKyAgICB9CisgICAgdGVtcGxh
dGUgPGNsYXNzIEM+CisgICAgQyogdjhET01XcmFwcGVyVG9Ob2RlKHY4OjpIYW5kbGU8djg6Ok9i
amVjdD4gb2JqZWN0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKFY4RE9NV3JhcHBlcjo6bWF5YmVE
T01XcmFwcGVyKG9iamVjdCkpOworICAgICAgICBBU1NFUlQoVjhET01XcmFwcGVyOjpkb21XcmFw
cGVyVHlwZShvYmplY3QpID09IFY4Q2xhc3NJbmRleDo6Tk9ERSk7CisgICAgICAgIHJldHVybiBy
ZWludGVycHJldF9jYXN0PEMqPih2OERPTVdyYXBwZXJUb05hdGl2ZShvYmplY3QpKTsKKyAgICB9
CisgICAgCisgICAgdm9pZCogdjhET01XcmFwcGVyVG9OYXRpdmUoY29uc3Qgdjg6OkFjY2Vzc29y
SW5mbyYpOworICAgIAorICAgIHRlbXBsYXRlIDxjbGFzcyBDPgorICAgIEMqIHY4RE9NV3JhcHBl
clRvKGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pIHsKKyAgICAgICAgQVNTRVJUKFY4RE9N
V3JhcHBlcjo6bWF5YmVET01XcmFwcGVyKGluZm8uSG9sZGVyKCkpKTsKKyAgICAgICAgcmV0dXJu
IHJlaW50ZXJwcmV0X2Nhc3Q8Qyo+KHY4RE9NV3JhcHBlclRvTmF0aXZlKGluZm8pKTsKKyAgICB9
CisgICAgdGVtcGxhdGUgPGNsYXNzIEM+CisgICAgQyogdjhET01XcmFwcGVyVG9Ob2RlKGNvbnN0
IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pIHsKKyAgICAgICAgQVNTRVJUKFY4RE9NV3JhcHBlcjo6
ZG9tV3JhcHBlclR5cGUoaW5mby5Ib2xkZXIoKSkgPT0gVjhDbGFzc0luZGV4OjpOT0RFKTsKKyAg
ICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Qyo+KHY4RE9NV3JhcHBlclRvTmF0aXZlKGlu
Zm8pKTsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGUgPGNsYXNzIEM+CisgICAgQyogdjhET01X
cmFwcGVyVG8oVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlIHR5cGUsIHY4OjpIYW5kbGU8djg6
Ok9iamVjdD4gb2JqZWN0KQorICAgIHsKKyAgICAgICAgLy8gTmF0aXZlIGV2ZW50IGxpc3RlbmVy
IGlzIHBlciBmcmFtZSwgaXQgY2Fubm90IGJlIGhhbmRsZWQgYnkgdGhpcyBnZW5lcmljIGZ1bmN0
aW9uLgorICAgICAgICBBU1NFUlQodHlwZSAhPSBWOENsYXNzSW5kZXg6OkVWRU5UTElTVEVORVIp
OworICAgICAgICBBU1NFUlQodHlwZSAhPSBWOENsYXNzSW5kZXg6OkVWRU5UVEFSR0VUKTsKKyAg
ICAgICAgCisgICAgICAgIEFTU0VSVChWOERPTVdyYXBwZXI6Om1heWJlRE9NV3JhcHBlcihvYmpl
Y3QpKTsKKyAgICAgICAgCisjaWZuZGVmIE5ERUJVRworICAgICAgICBjb25zdCBib29sIHR5cGVJ
c1ZhbGlkID0KKyNkZWZpbmUgTUFLRV9DQVNFKFRZUEUsIE5BTUUpICh0eXBlICE9IFY4Q2xhc3NJ
bmRleDo6VFlQRSkgJiYKKyAgICAgICAgRE9NX05PREVfVFlQRVMoTUFLRV9DQVNFKQorI2lmIEVO
QUJMRShTVkcpCisgICAgICAgIFNWR19OT0RFX1RZUEVTKE1BS0VfQ0FTRSkKKyNlbmRpZgorI3Vu
ZGVmIE1BS0VfQ0FTRQorICAgICAgICB0cnVlOworICAgICAgICBBU1NFUlQodHlwZUlzVmFsaWQp
OworI2VuZGlmCisgICAgICAgIAorICAgICAgICByZXR1cm4gdjhET01XcmFwcGVyVG88Qz4ob2Jq
ZWN0KTsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGUgPGNsYXNzIEM+CisgICAgQyogdjhET01X
cmFwcGVyVG8oVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlIHR5cGUsIGNvbnN0IHY4OjpBY2Nl
c3NvckluZm8mIGluZm8pCisgICAgeworI2lmbmRlZiBOREVCVUcKKyAgICAgICAgcmV0dXJuIHY4
RE9NV3JhcHBlclRvPEM+KHR5cGUsIGluZm8uSG9sZGVyKCkpOworI2Vsc2UKKyAgICAgICAgcmV0
dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Qyo+KHY4RE9NV3JhcHBlclRvTmF0aXZlKGluZm8pKTsKKyNl
bmRpZgorICAgIH0KIAorICAgIAorICAgIGVudW0gRXh0ZXJuYWxNb2RlIHsKKyAgICAgICAgRXh0
ZXJuYWxpemUsCisgICAgICAgIERvTm90RXh0ZXJuYWxpemUKKyAgICB9OworICAgIAorICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBTdHJpbmdUeXBlPgorICAgIFN0cmluZ1R5cGUgdjhTdHJpbmdUb1dl
YkNvcmVTdHJpbmcodjg6OkhhbmRsZTx2ODo6U3RyaW5nPiB2OFN0cmluZywgRXh0ZXJuYWxNb2Rl
IGV4dGVybmFsKTsKKwogICAgIC8vIENvbnZlcnQgdjggdHlwZXMgdG8gYSBXZWJDb3JlOjpTdHJp
bmcuIElmIHRoZSBWOCBzdHJpbmcgaXMgbm90IGFscmVhZHkKICAgICAvLyBhbiBleHRlcm5hbCBz
dHJpbmcgdGhlbiBpdCBpcyB0cmFuc2Zvcm1lZCBpbnRvIGFuIGV4dGVybmFsIHN0cmluZyBhdCB0
aGlzCiAgICAgLy8gcG9pbnQgdG8gYXZvaWQgcmVwZWF0ZWQgY29udmVyc2lvbnMuCi0gICAgU3Ry
aW5nIHY4U3RyaW5nVG9XZWJDb3JlU3RyaW5nKHY4OjpIYW5kbGU8djg6OlN0cmluZz4pOwotICAg
IFN0cmluZyB2OE5vblN0cmluZ1ZhbHVlVG9XZWJDb3JlU3RyaW5nKHY4OjpIYW5kbGU8djg6OlZh
bHVlPik7Ci0gICAgaW5saW5lIFN0cmluZyB2OFZhbHVlVG9XZWJDb3JlU3RyaW5nKHY4OjpIYW5k
bGU8djg6OlZhbHVlPiB2YWx1ZSkKKyAgICBpbmxpbmUgU3RyaW5nIHY4U3RyaW5nVG9XZWJDb3Jl
U3RyaW5nKHY4OjpIYW5kbGU8djg6OlN0cmluZz4gdjhTdHJpbmcpCiAgICAgewotICAgICAgICBp
ZiAodmFsdWUtPklzU3RyaW5nKCkpCi0gICAgICAgICAgICByZXR1cm4gdjhTdHJpbmdUb1dlYkNv
cmVTdHJpbmcodjg6OkhhbmRsZTx2ODo6U3RyaW5nPjo6Q2FzdCh2YWx1ZSkpOwotICAgICAgICBy
ZXR1cm4gdjhOb25TdHJpbmdWYWx1ZVRvV2ViQ29yZVN0cmluZyh2YWx1ZSk7CisgICAgICAgIHJl
dHVybiB2OFN0cmluZ1RvV2ViQ29yZVN0cmluZzxTdHJpbmc+KHY4U3RyaW5nLCBFeHRlcm5hbGl6
ZSk7CiAgICAgfQorICAgIFN0cmluZyB2OE5vblN0cmluZ1ZhbHVlVG9XZWJDb3JlU3RyaW5nKHY4
OjpIYW5kbGU8djg6OlZhbHVlPik7CisgICAgU3RyaW5nIHY4VmFsdWVUb1dlYkNvcmVTdHJpbmco
djg6OkhhbmRsZTx2ODo6VmFsdWU+IHZhbHVlKTsKIAogICAgIC8vIENvbnZlcnQgdjggdHlwZXMg
dG8gYSBXZWJDb3JlOjpBdG9taWNTdHJpbmcuCi0gICAgQXRvbWljU3RyaW5nIHY4U3RyaW5nVG9B
dG9taWNXZWJDb3JlU3RyaW5nKHY4OjpIYW5kbGU8djg6OlN0cmluZz4pOwotICAgIEF0b21pY1N0
cmluZyB2OE5vblN0cmluZ1ZhbHVlVG9BdG9taWNXZWJDb3JlU3RyaW5nKHY4OjpIYW5kbGU8djg6
OlZhbHVlPik7Ci0gICAgaW5saW5lIEF0b21pY1N0cmluZyB2OFZhbHVlVG9BdG9taWNXZWJDb3Jl
U3RyaW5nKHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSkKKyAgICBpbmxpbmUgQXRvbWljU3Ry
aW5nIHY4U3RyaW5nVG9BdG9taWNXZWJDb3JlU3RyaW5nKHY4OjpIYW5kbGU8djg6OlN0cmluZz4g
djhTdHJpbmcpCiAgICAgewotICAgICAgICBpZiAodmFsdWUtPklzU3RyaW5nKCkpCi0gICAgICAg
ICAgICByZXR1cm4gdjhTdHJpbmdUb0F0b21pY1dlYkNvcmVTdHJpbmcodjg6OkhhbmRsZTx2ODo6
U3RyaW5nPjo6Q2FzdCh2YWx1ZSkpOwotICAgICAgICByZXR1cm4gdjhOb25TdHJpbmdWYWx1ZVRv
QXRvbWljV2ViQ29yZVN0cmluZyh2YWx1ZSk7CisgICAgICAgIHJldHVybiB2OFN0cmluZ1RvV2Vi
Q29yZVN0cmluZzxBdG9taWNTdHJpbmc+KHY4U3RyaW5nLCBFeHRlcm5hbGl6ZSk7CiAgICAgfQor
ICAgIEF0b21pY1N0cmluZyB2OE5vblN0cmluZ1ZhbHVlVG9BdG9taWNXZWJDb3JlU3RyaW5nKHY4
OjpIYW5kbGU8djg6OlZhbHVlPik7CisgICAgQXRvbWljU3RyaW5nIHY4VmFsdWVUb0F0b21pY1dl
YkNvcmVTdHJpbmcodjg6OkhhbmRsZTx2ODo6VmFsdWU+IHZhbHVlKTsKIAotICAgIGlubGluZSBj
b25zdCBTdHJpbmcmIHRvU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIHN0cmluZzsKLSAgICB9Ci0KICAgICAvLyBSZXR1cm4gYSBWOCBleHRlcm5hbCBz
dHJpbmcgdGhhdCBzaGFyZXMgdGhlIHVuZGVybHlpbmcgYnVmZmVyIHdpdGggdGhlIGdpdmVuCiAg
ICAgLy8gV2ViQ29yZSBzdHJpbmcuIFRoZSByZWZlcmVuY2UgY291bnRpbmcgbWVjaGFuaXNtIGlz
IHVzZWQgdG8ga2VlcCB0aGUKICAgICAvLyB1bmRlcmx5aW5nIGJ1ZmZlciBhbGl2ZSB3aGlsZSB0
aGUgc3RyaW5nIGlzIHN0aWxsIGxpdmUgaW4gdGhlIFY4IGVuZ2luZS4KQEAgLTg0LDM5ICsxNTQs
OCBAQAogCiAgICAgLy8gQ29udmVydCBhIHZhbHVlIHRvIGEgMzItYml0IGludGVnZXIuICBUaGUg
Y29udmVyc2lvbiBmYWlscyBpZiB0aGUKICAgICAvLyB2YWx1ZSBjYW5ub3QgYmUgY29udmVydGVk
IHRvIGFuIGludGVnZXIgb3IgY29udmVydHMgdG8gbmFuIG9yIHRvIGFuIGluZmluaXR5LgotICAg
IGlubGluZSBpbnQgdG9JbnQzMih2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUsIGJvb2wmIG9r
KQotICAgIHsKLSAgICAgICAgb2sgPSB0cnVlOworICAgIGludCB0b0ludDMyKHY4OjpIYW5kbGU8
djg6OlZhbHVlPiB2YWx1ZSwgYm9vbCYgb2spOwogCi0gICAgICAgIC8vIEZhc3QgY2FzZS4gIFRo
ZSB2YWx1ZSBpcyBhbHJlYWR5IGEgMzItYml0IGludGVnZXIuCi0gICAgICAgIGlmICh2YWx1ZS0+
SXNJbnQzMigpKQotICAgICAgICAgICAgcmV0dXJuIHZhbHVlLT5JbnQzMlZhbHVlKCk7Ci0KLSAg
ICAgICAgLy8gQ2FuIHRoZSB2YWx1ZSBiZSBjb252ZXJ0ZWQgdG8gYSBudW1iZXI/Ci0gICAgICAg
IHY4OjpMb2NhbDx2ODo6TnVtYmVyPiBudW1iZXJPYmplY3QgPSB2YWx1ZS0+VG9OdW1iZXIoKTsK
LSAgICAgICAgaWYgKG51bWJlck9iamVjdC5Jc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIG9rID0g
ZmFsc2U7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIERv
ZXMgdGhlIHZhbHVlIGNvbnZlcnQgdG8gbmFuIG9yIHRvIGFuIGluZmluaXR5PwotICAgICAgICBk
b3VibGUgbnVtYmVyVmFsdWUgPSBudW1iZXJPYmplY3QtPlZhbHVlKCk7Ci0gICAgICAgIGlmIChp
c25hbihudW1iZXJWYWx1ZSkgfHwgaXNpbmYobnVtYmVyVmFsdWUpKSB7Ci0gICAgICAgICAgICBv
ayA9IGZhbHNlOwotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLQotICAgICAgICAv
LyBDYW4gdGhlIHZhbHVlIGJlIGNvbnZlcnRlZCB0byBhIDMyLWJpdCBpbnRlZ2VyPwotICAgICAg
ICB2ODo6TG9jYWw8djg6OkludDMyPiBpbnRWYWx1ZSA9IHZhbHVlLT5Ub0ludDMyKCk7Ci0gICAg
ICAgIGlmIChpbnRWYWx1ZS5Jc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIG9rID0gZmFsc2U7Ci0g
ICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFJldHVybiB0aGUg
cmVzdWx0IG9mIHRoZSBpbnQzMiBjb252ZXJzaW9uLgotICAgICAgICByZXR1cm4gaW50VmFsdWUt
PlZhbHVlKCk7Ci0gICAgfQotCiAgICAgLy8gQ29udmVydCBhIHZhbHVlIHRvIGEgMzItYml0IGlu
dGVnZXIgYXNzdW1pbmcgdGhlIGNvbnZlcnNpb24gY2Fubm90IGZhaWwuCiAgICAgaW5saW5lIGlu
dCB0b0ludDMyKHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSkKICAgICB7CkBAIC0xMzQsNiAr
MTczLDcgQEAKICAgICB7CiAgICAgICAgIHJldHVybiB2OFZhbHVlVG9XZWJDb3JlU3RyaW5nKG9i
amVjdCk7CiAgICAgfQorICAgIFN0cmluZyB0b1dlYkNvcmVTdHJpbmcoY29uc3Qgdjg6OkFyZ3Vt
ZW50cyYsIGludCBpbmRleCk7CiAKICAgICAvLyBUaGUgc3RyaW5nIHJldHVybmVkIGJ5IHRoaXMg
ZnVuY3Rpb24gaXMgc3RpbGwgb3duZWQgYnkgdGhlIGFyZ3VtZW50CiAgICAgLy8gYW5kIHdpbGwg
YmUgZGVhbGxvY2F0ZWQgd2hlbiB0aGUgYXJndW1lbnQgaXMgZGVhbGxvY2F0ZWQuCkBAIC0xNDIs
NTYgKzE4Miw1MCBAQAogICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50
MTZfdCo+KHN0ci5jaGFyYWN0ZXJzKCkpOwogICAgIH0KIAotICAgIGlubGluZSBib29sIGlzVW5k
ZWZpbmVkT3JOdWxsKHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSkKLSAgICB7Ci0gICAgICAg
IHJldHVybiB2YWx1ZS0+SXNOdWxsKCkgfHwgdmFsdWUtPklzVW5kZWZpbmVkKCk7Ci0gICAgfQor
ICAgIGJvb2wgaXNVbmRlZmluZWRPck51bGwodjg6OkhhbmRsZTx2ODo6VmFsdWU+IHZhbHVlKTsK
IAotICAgIGlubGluZSB2ODo6SGFuZGxlPHY4OjpCb29sZWFuPiB2OEJvb2xlYW4oYm9vbCB2YWx1
ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB2YWx1ZSA/IHY4OjpUcnVlKCkgOiB2ODo6RmFsc2Uo
KTsKLSAgICB9CisgICAgdjg6OkhhbmRsZTx2ODo6Qm9vbGVhbj4gdjhCb29sZWFuKGJvb2wgdmFs
dWUpOwogCi0gICAgaW5saW5lIFN0cmluZyB0b1dlYkNvcmVTdHJpbmdXaXRoTnVsbENoZWNrKHY4
OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGlmICh2YWx1ZS0+SXNO
dWxsKCkpIAotICAgICAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgICAgICByZXR1cm4gdjhW
YWx1ZVRvV2ViQ29yZVN0cmluZyh2YWx1ZSk7Ci0gICAgfQorICAgIFN0cmluZyB0b1dlYkNvcmVT
dHJpbmdXaXRoTnVsbENoZWNrKHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSk7CiAKLSAgICBp
bmxpbmUgQXRvbWljU3RyaW5nIHY4VmFsdWVUb0F0b21pY1dlYkNvcmVTdHJpbmdXaXRoTnVsbENo
ZWNrKHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGlmICh2YWx1
ZS0+SXNOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gQXRvbWljU3RyaW5nKCk7Ci0gICAgICAg
IHJldHVybiB2OFZhbHVlVG9BdG9taWNXZWJDb3JlU3RyaW5nKHZhbHVlKTsKLSAgICB9CisgICAg
QXRvbWljU3RyaW5nIHRvQXRvbWljV2ViQ29yZVN0cmluZ1dpdGhOdWxsQ2hlY2sodjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IHZhbHVlKTsKIAotICAgIGlubGluZSBTdHJpbmcgdG9XZWJDb3JlU3RyaW5n
V2l0aE51bGxPclVuZGVmaW5lZENoZWNrKHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSkKLSAg
ICB7Ci0gICAgICAgIGlmICh2YWx1ZS0+SXNOdWxsKCkgfHwgdmFsdWUtPklzVW5kZWZpbmVkKCkp
Ci0gICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgICAgIHJldHVybiB0b1dlYkNvcmVT
dHJpbmcodmFsdWUpOwotICAgIH0KKyAgICBTdHJpbmcgdG9XZWJDb3JlU3RyaW5nV2l0aE51bGxP
clVuZGVmaW5lZENoZWNrKHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSk7CiAgCi0gICAgaW5s
aW5lIHY4OjpIYW5kbGU8djg6OlN0cmluZz4gdjhVbmRldGVjdGFibGVTdHJpbmcoY29uc3QgU3Ry
aW5nJiBzdHIpCi0gICAgewotICAgICAgICByZXR1cm4gdjg6OlN0cmluZzo6TmV3VW5kZXRlY3Rh
YmxlKGZyb21XZWJDb3JlU3RyaW5nKHN0ciksIHN0ci5sZW5ndGgoKSk7Ci0gICAgfQorICAgIHY4
OjpIYW5kbGU8djg6OlN0cmluZz4gdjhVbmRldGVjdGFibGVTdHJpbmcoY29uc3QgU3RyaW5nJiBz
dHIpOwogCi0gICAgaW5saW5lIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2OFN0cmluZ09yTnVsbChj
b25zdCBTdHJpbmcmIHN0cikKLSAgICB7Ci0gICAgICAgIHJldHVybiBzdHIuaXNOdWxsKCkgPyB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4odjg6Ok51bGwoKSkgOiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4o
djhTdHJpbmcoc3RyKSk7Ci0gICAgfQorICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2OFN0cmlu
Z09yTnVsbChjb25zdCBTdHJpbmcmIHN0cik7CiAKLSAgICBpbmxpbmUgdjg6OkhhbmRsZTx2ODo6
VmFsdWU+IHY4U3RyaW5nT3JVbmRlZmluZWQoY29uc3QgU3RyaW5nJiBzdHIpCi0gICAgewotICAg
ICAgICByZXR1cm4gc3RyLmlzTnVsbCgpID8gdjg6OkhhbmRsZTx2ODo6VmFsdWU+KHY4OjpVbmRl
ZmluZWQoKSkgOiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4odjhTdHJpbmcoc3RyKSk7Ci0gICAgfQor
ICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2OFN0cmluZ09yVW5kZWZpbmVkKGNvbnN0IFN0cmlu
ZyYgc3RyKTsKIAotICAgIGlubGluZSB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdjhTdHJpbmdPckZh
bHNlKGNvbnN0IFN0cmluZyYgc3RyKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHN0ci5pc051bGwo
KSA/IHY4OjpIYW5kbGU8djg6OlZhbHVlPih2ODo6RmFsc2UoKSkgOiB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4odjhTdHJpbmcoc3RyKSk7Ci0gICAgfQorICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2
OFN0cmluZ09yRmFsc2UoY29uc3QgU3RyaW5nJiBzdHIpOworICAgIAorICAgIHY4OjpQZXJzaXN0
ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBjcmVhdGVSYXdUZW1wbGF0ZSgpOworCisgICAgc3Ry
dWN0IEJhdGNoZWRBdHRyaWJ1dGU7CisgICAgc3RydWN0IEJhdGNoZWRDYWxsYmFjazsKKyAgICAK
KyAgICB2ODo6TG9jYWw8djg6OlNpZ25hdHVyZT4gY29uZmlndXJlVGVtcGxhdGUodjg6OlBlcnNp
c3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICppbnRlcmZhY2VOYW1lLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWOENsYXNzSW5kZXg6OlY4V3Jh
cHBlclR5cGUgcGFyZW50Q2xhc3NJbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IGZpZWxkQ291bnQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEJhdGNoZWRBdHRyaWJ1dGUqLCAKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGF0dHJpYnV0
ZUNvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBCYXRjaGVkQ2FsbGJhY2sqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzaXplX3QgY2FsbGJhY2tDb3VudCk7CisgICAgCisgICAgdm9pZCBjcmVh
dGVDYWxsYmFjayh2ODo6TG9jYWw8djg6Ok9iamVjdFRlbXBsYXRlPiBwcm90bywKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAg
ICB2ODo6SW52b2NhdGlvbkNhbGxiYWNrIGNhbGxiYWNrLAorICAgICAgICAgICAgICAgICAgICAg
ICAgdjg6OkhhbmRsZTx2ODo6U2lnbmF0dXJlPiBzaWduYXR1cmUsCisgICAgICAgICAgICAgICAg
ICAgICAgICB2ODo6UHJvcGVydHlBdHRyaWJ1dGUgYXR0cmlidXRlID0gdjg6OkRvbnREZWxldGUp
OworICAgIAorICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBnZXRFbGVtZW50U3RyaW5nQXR0cihj
b25zdCB2ODo6QWNjZXNzb3JJbmZvJiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgUXVhbGlmaWVkTmFtZSYpOworICAgIHZvaWQgc2V0RWxlbWVu
dFN0cmluZ0F0dHIoY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBRdWFsaWZpZWROYW1lJiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+KTsKKyAgICAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKIAogI2VuZGlmIC8vIFY4QmluZGluZ19oCg==
</data>
<flag name="review"
          id="24383"
          type_id="1"
          status="-"
          setter="dglazkov"
    />
          </attachment>
      

    </bug>

</bugzilla>