<?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>59896</bug_id>
          
          <creation_ts>2011-05-01 14:44:03 -0700</creation_ts>
          <short_desc>Remove JmpSrc/JmpDst types.</short_desc>
          <delta_ts>2013-04-30 05:02:22 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Gavin Barraclough">barraclough</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>fu</cc>
    
    <cc>talking1239</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>396050</commentid>
    <comment_count>0</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2011-05-01 14:44:03 -0700</bug_when>
    <thetext>The JmpSrc/JmpDst classes predate the MacroAssembler interface.  Having these object be per-assembler in unhelpful, causes unnecessary code duplication, and prevents the AssemblerBuffer from providing a richer type for labels.  The limited semantic meaning that they did convey is undermined by the manner in which their meanings have been overloaded (use of JmpSrc for Call, JmpDst for data labels).

Jumps on ARMv7 have had additional information added to the object via the ARMv7 JmpSrc.  This data should probably be in the instruction stream.  This patch does not fix the problem, and moves the data (ifdefed) to AbstractMacroAssembler::Jump (which is effectively where it was before!).  This at least closes the hole such that no further data may be added to JmpSrc, but this is unfortunate, and should be cleaned up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>396052</commentid>
    <comment_count>1</comment_count>
      <attachid>91847</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2011-05-01 14:46:19 -0700</bug_when>
    <thetext>Created attachment 91847
The patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>396053</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-05-01 14:48:00 -0700</bug_when>
    <thetext>Attachment 91847 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source...&quot; exit_code: 1

Source/JavaScriptCore/assembler/X86Assembler.h:1197:  jmp_r is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/assembler/AssemblerBuffer.h:40:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 2 in 14 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>396060</commentid>
    <comment_count>3</comment_count>
      <attachid>91847</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2011-05-01 14:57:57 -0700</bug_when>
    <thetext>Comment on attachment 91847
The patch

Please add a comment about why 2^32-1 is enough.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>396145</commentid>
    <comment_count>4</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2011-05-01 17:48:11 -0700</bug_when>
    <thetext>Fixed in r85432.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>396768</commentid>
    <comment_count>5</comment_count>
    <who name="Chao-ying Fu">fu</who>
    <bug_when>2011-05-02 16:25:35 -0700</bug_when>
    <thetext>Hi Gavin,

  For MIPS build, we need to switch the order of header files to get it compiled.  Thanks!

Regards,
Chao-ying

fu@debian:/disk/fu/dev/WebKit/Source/JavaScriptCore/assembler$ svn diff
Index: MacroAssemblerMIPS.h
===================================================================
--- MacroAssemblerMIPS.h        (revision 85498)
+++ MacroAssemblerMIPS.h        (working copy)
@@ -29,8 +29,8 @@

 #if ENABLE(ASSEMBLER) &amp;&amp; CPU(MIPS)

+#include &quot;MIPSAssembler.h&quot;
 #include &quot;AbstractMacroAssembler.h&quot;
-#include &quot;MIPSAssembler.h&quot;

 namespace JSC {</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>883019</commentid>
    <comment_count>6</comment_count>
    <who name="石梦军">talking1239</who>
    <bug_when>2013-04-30 05:02:22 -0700</bug_when>
    <thetext>is exist some reason for using char* to replace void* in the getRelocatedAddress function of the sh4assembler.h file?</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>91847</attachid>
            <date>2011-05-01 14:46:19 -0700</date>
            <delta_ts>2011-05-01 14:57:56 -0700</delta_ts>
            <desc>The patch</desc>
            <filename>59896.patch</filename>
            <type>text/plain</type>
            <size>61741</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gODU0MzEpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQ5IEBA
CisyMDExLTA1LTAxICBHYXZpbiBCYXJyYWNsb3VnaCAgPGJhcnJhY2xvdWdoQGFwcGxlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTk4OTYKKyAgICAgICAgUmVtb3ZlIEpt
cFNyYy9KbXBEc3QgdHlwZXMuCisKKyAgICAgICAgVGhlIEptcFNyYy9KbXBEc3QgY2xhc3NlcyBw
cmVkYXRlIHRoZSBNYWNyb0Fzc2VtYmxlciBpbnRlcmZhY2UuIEhhdmluZyB0aGVzZQorICAgICAg
ICBvYmplY3QgYmUgcGVyLWFzc2VtYmxlciBpbiB1bmhlbHBmdWwsIGNhdXNlcyB1bm5lY2Vzc2Fy
eSBjb2RlIGR1cGxpY2F0aW9uLAorICAgICAgICBhbmQgcHJldmVudHMgdGhlIEFzc2VtYmxlckJ1
ZmZlciBmcm9tIHByb3ZpZGluZyBhIHJpY2hlciB0eXBlIGZvciBsYWJlbHMuCisgICAgICAgIFRo
ZSBsaW1pdGVkIHNlbWFudGljIG1lYW5pbmcgdGhhdCB0aGV5IGRpZCBjb252ZXkgaXMgdW5kZXJt
aW5lZCBieSB0aGUgbWFubmVyCisgICAgICAgIGluIHdoaWNoIHRoZWlyIG1lYW5pbmdzIGhhdmUg
YmVlbiBvdmVybG9hZGVkICh1c2Ugb2YgSm1wU3JjIGZvciBDYWxsLCBKbXBEc3QKKyAgICAgICAg
Zm9yIGRhdGEgbGFiZWxzKS4KKworICAgICAgICBKdW1wcyBvbiBBUk12NyBoYXZlIGhhZCBhZGRp
dGlvbmFsIGluZm9ybWF0aW9uIGFkZGVkIHRvIHRoZSBvYmplY3QgdmlhIHRoZQorICAgICAgICBB
Uk12NyBKbXBTcmMuIFRoaXMgZGF0YSBzaG91bGQgcHJvYmFibHkgYmUgaW4gdGhlIGluc3RydWN0
aW9uIHN0cmVhbS4gVGhpcworICAgICAgICBwYXRjaCBkb2VzIG5vdCBmaXggdGhlIHByb2JsZW0s
IGFuZCBtb3ZlcyB0aGUgZGF0YSAoaWZkZWZlZCkgdG8KKyAgICAgICAgQWJzdHJhY3RNYWNyb0Fz
c2VtYmxlcjo6SnVtcCAod2hpY2ggaXMgZWZmZWN0aXZlbHkgd2hlcmUgaXQgd2FzIGJlZm9yZSEp
LgorICAgICAgICBUaGlzIGF0IGxlYXN0IGNsb3NlcyB0aGUgaG9sZSBzdWNoIHRoYXQgbm8gZnVy
dGhlciBkYXRhIG1heSBiZSBhZGRlZCB0byBKbXBTcmMsCisgICAgICAgIGJ1dCB0aGlzIGlzIHVu
Zm9ydHVuYXRlLCBhbmQgc2hvdWxkIGJlIGNsZWFuZWQgdXAuCisKKyAgICAgICAgKiBhc3NlbWJs
ZXIvQVJNQXNzZW1ibGVyLmg6CisgICAgICAgIChKU0M6OkFSTUFzc2VtYmxlcjo6Ymx4KToKKyAg
ICAgICAgKEpTQzo6QVJNQXNzZW1ibGVyOjpsYWJlbCk6CisgICAgICAgIChKU0M6OkFSTUFzc2Vt
Ymxlcjo6YWxpZ24pOgorICAgICAgICAoSlNDOjpBUk1Bc3NlbWJsZXI6OmxvYWRCcmFuY2hUYXJn
ZXQpOgorICAgICAgICAoSlNDOjpBUk1Bc3NlbWJsZXI6OmptcCk6CisgICAgICAgIChKU0M6OkFS
TUFzc2VtYmxlcjo6bGlua1BvaW50ZXIpOgorICAgICAgICAoSlNDOjpBUk1Bc3NlbWJsZXI6Omxp
bmtKdW1wKToKKyAgICAgICAgKEpTQzo6QVJNQXNzZW1ibGVyOjpsaW5rQ2FsbCk6CisgICAgICAg
IChKU0M6OkFSTUFzc2VtYmxlcjo6Z2V0UmVsb2NhdGVkQWRkcmVzcyk6CisgICAgICAgIChKU0M6
OkFSTUFzc2VtYmxlcjo6Z2V0RGlmZmVyZW5jZUJldHdlZW5MYWJlbHMpOgorICAgICAgICAoSlND
OjpBUk1Bc3NlbWJsZXI6OmdldENhbGxSZXR1cm5PZmZzZXQpOgorICAgICAgICAqIGFzc2VtYmxl
ci9BUk12N0Fzc2VtYmxlci5oOgorICAgICAgICAoSlNDOjpBUk12N0Fzc2VtYmxlcjo6Yik6Cisg
ICAgICAgIChKU0M6OkFSTXY3QXNzZW1ibGVyOjpibHgpOgorICAgICAgICAoSlNDOjpBUk12N0Fz
c2VtYmxlcjo6YngpOgorICAgICAgICAoSlNDOjpBUk12N0Fzc2VtYmxlcjo6bGFiZWwpOgorICAg
ICAgICAoSlNDOjpBUk12N0Fzc2VtYmxlcjo6YWxpZ24pOgorICAgICAgICAoSlNDOjpBUk12N0Fz
c2VtYmxlcjo6Z2V0UmVsb2NhdGVkQWRkcmVzcyk6CisgICAgICAgIChKU0M6OkFSTXY3QXNzZW1i
bGVyOjpnZXREaWZmZXJlbmNlQmV0d2VlbkxhYmVscyk6CisgICAgICAgIChKU0M6OkFSTXY3QXNz
ZW1ibGVyOjpnZXRDYWxsUmV0dXJuT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6QVJNdjdBc3NlbWJs
ZXI6OmxpbmtKdW1wKToKKyAgICAgICAgKEpTQzo6QVJNdjdBc3NlbWJsZXI6OmxpbmtDYWxsKToK
KyAgICAgICAgKEpTQzo6QVJNdjdBc3NlbWJsZXI6OmxpbmtQb2ludGVyKToKKyAgICAgICAgKiBh
c3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oOgorICAgICAgICAoSlNDOjpBYnN0cmFj
dE1hY3JvQXNzZW1ibGVyOjpMYWJlbDo6aXNTZXQpOgorICAgICAgICAoSlNDOjpBYnN0cmFjdE1h
Y3JvQXNzZW1ibGVyOjpDYWxsOjpDYWxsKToKKyAgICAgICAgKEpTQzo6QWJzdHJhY3RNYWNyb0Fz
c2VtYmxlcjo6SnVtcDo6SnVtcCk6CisgICAgICAgIChKU0M6OkFic3RyYWN0TWFjcm9Bc3NlbWJs
ZXI6Okp1bXA6OmxpbmspOgorICAgICAgICAoSlNDOjpBYnN0cmFjdE1hY3JvQXNzZW1ibGVyOjpK
dW1wOjpsaW5rVG8pOgorICAgICAgICAoSlNDOjpBYnN0cmFjdE1hY3JvQXNzZW1ibGVyOjpsaW5r
UG9pbnRlcik6CisgICAgICAgIChKU0M6OkFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6OmdldExpbmtl
ckFkZHJlc3MpOgorICAgICAgICAqIGFzc2VtYmxlci9Bc3NlbWJsZXJCdWZmZXIuaDoKKyAgICAg
ICAgKEpTQzo6QXNzZW1ibGVyTGFiZWw6OkFzc2VtYmxlckxhYmVsKToKKyAgICAgICAgKEpTQzo6
QXNzZW1ibGVyTGFiZWw6OmlzU2V0KToKKyAgICAgICAgKiBhc3NlbWJsZXIvTGlua0J1ZmZlci5o
OgorICAgICAgICAoSlNDOjpMaW5rQnVmZmVyOjpwYXRjaCk6CisgICAgICAgICogYXNzZW1ibGVy
L01JUFNBc3NlbWJsZXIuaDoKKyAgICAgICAgKEpTQzo6TUlQU0Fzc2VtYmxlcjo6bGFiZWwpOgor
ICAgICAgICAoSlNDOjpNSVBTQXNzZW1ibGVyOjphbGlnbik6CisgICAgICAgIChKU0M6Ok1JUFNB
c3NlbWJsZXI6OmdldFJlbG9jYXRlZEFkZHJlc3MpOgorICAgICAgICAoSlNDOjpNSVBTQXNzZW1i
bGVyOjpnZXREaWZmZXJlbmNlQmV0d2VlbkxhYmVscyk6CisgICAgICAgIChKU0M6Ok1JUFNBc3Nl
bWJsZXI6OmdldENhbGxSZXR1cm5PZmZzZXQpOgorICAgICAgICAoSlNDOjpNSVBTQXNzZW1ibGVy
OjpsaW5rSnVtcCk6CisgICAgICAgIChKU0M6Ok1JUFNBc3NlbWJsZXI6OmxpbmtDYWxsKToKKyAg
ICAgICAgKEpTQzo6TUlQU0Fzc2VtYmxlcjo6bGlua1BvaW50ZXIpOgorICAgICAgICAqIGFzc2Vt
Ymxlci9NYWNyb0Fzc2VtYmxlckFSTXY3Lmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVy
QVJNdjc6OmJyYW5jaERvdWJsZSk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNdjc6
OmJyYW5jaERvdWJsZVplcm9Pck5hTik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJN
djc6Omp1bXApOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTXY3OjpuZWFyQ2FsbCk6
CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNdjc6OmNhbGwpOgorICAgICAgICAoSlND
OjpNYWNyb0Fzc2VtYmxlckFSTXY3OjpyZXQpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxl
ckFSTXY3Ojp0YWlsUmVjdXJzaXZlQ2FsbCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVy
QVJNdjc6Om1ha2VCcmFuY2gpOgorICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlck1J
UFMuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJNSVBTOjpuZWFyQ2FsbCk6CisgICAg
ICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyTUlQUzo6Y2FsbCk6CisgICAgICAgIChKU0M6Ok1hY3Jv
QXNzZW1ibGVyTUlQUzo6dGFpbFJlY3Vyc2l2ZUNhbGwpOgorICAgICAgICAoSlNDOjpNYWNyb0Fz
c2VtYmxlck1JUFM6OmJyYW5jaFRydWUpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlck1J
UFM6OmJyYW5jaEZhbHNlKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJNSVBTOjpicmFu
Y2hFcXVhbCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyTUlQUzo6YnJhbmNoTm90RXF1
YWwpOgorICAgICAgICAqIGFzc2VtYmxlci9TSDRBc3NlbWJsZXIuaDoKKyAgICAgICAgKEpTQzo6
U0g0QXNzZW1ibGVyOjpjYWxsKToKKyAgICAgICAgKEpTQzo6U0g0QXNzZW1ibGVyOjpqbXApOgor
ICAgICAgICAoSlNDOjpTSDRBc3NlbWJsZXI6OmpuZSk6CisgICAgICAgIChKU0M6OlNINEFzc2Vt
Ymxlcjo6amUpOgorICAgICAgICAoSlNDOjpTSDRBc3NlbWJsZXI6OmxhYmVsKToKKyAgICAgICAg
KEpTQzo6U0g0QXNzZW1ibGVyOjphbGlnbik6CisgICAgICAgIChKU0M6OlNINEFzc2VtYmxlcjo6
bGlua0p1bXApOgorICAgICAgICAoSlNDOjpTSDRBc3NlbWJsZXI6OmxpbmtDYWxsKToKKyAgICAg
ICAgKEpTQzo6U0g0QXNzZW1ibGVyOjpsaW5rUG9pbnRlcik6CisgICAgICAgIChKU0M6OlNINEFz
c2VtYmxlcjo6Z2V0Q2FsbFJldHVybk9mZnNldCk6CisgICAgICAgIChKU0M6OlNINEFzc2VtYmxl
cjo6Z2V0UmVsb2NhdGVkQWRkcmVzcyk6CisgICAgICAgIChKU0M6OlNINEFzc2VtYmxlcjo6Z2V0
RGlmZmVyZW5jZUJldHdlZW5MYWJlbHMpOgorICAgICAgICAoSlNDOjpTSDRBc3NlbWJsZXI6OnBh
dGNoUG9pbnRlcik6CisgICAgICAgICogYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oOgorICAgICAg
ICAoSlNDOjpYODZBc3NlbWJsZXI6OmNhbGwpOgorICAgICAgICAoSlNDOjpYODZBc3NlbWJsZXI6
OmptcCk6CisgICAgICAgIChKU0M6Olg4NkFzc2VtYmxlcjo6am1wX3IpOgorICAgICAgICAoSlND
OjpYODZBc3NlbWJsZXI6OmpuZSk6CisgICAgICAgIChKU0M6Olg4NkFzc2VtYmxlcjo6am56KToK
KyAgICAgICAgKEpTQzo6WDg2QXNzZW1ibGVyOjpqZSk6CisgICAgICAgIChKU0M6Olg4NkFzc2Vt
Ymxlcjo6anopOgorICAgICAgICAoSlNDOjpYODZBc3NlbWJsZXI6OmpsKToKKyAgICAgICAgKEpT
Qzo6WDg2QXNzZW1ibGVyOjpqYik6CisgICAgICAgIChKU0M6Olg4NkFzc2VtYmxlcjo6amxlKToK
KyAgICAgICAgKEpTQzo6WDg2QXNzZW1ibGVyOjpqYmUpOgorICAgICAgICAoSlNDOjpYODZBc3Nl
bWJsZXI6OmpnZSk6CisgICAgICAgIChKU0M6Olg4NkFzc2VtYmxlcjo6amcpOgorICAgICAgICAo
SlNDOjpYODZBc3NlbWJsZXI6OmphKToKKyAgICAgICAgKEpTQzo6WDg2QXNzZW1ibGVyOjpqYWUp
OgorICAgICAgICAoSlNDOjpYODZBc3NlbWJsZXI6OmpvKToKKyAgICAgICAgKEpTQzo6WDg2QXNz
ZW1ibGVyOjpqcCk6CisgICAgICAgIChKU0M6Olg4NkFzc2VtYmxlcjo6anMpOgorICAgICAgICAo
SlNDOjpYODZBc3NlbWJsZXI6OmpDQyk6CisgICAgICAgIChKU0M6Olg4NkFzc2VtYmxlcjo6bGFi
ZWwpOgorICAgICAgICAoSlNDOjpYODZBc3NlbWJsZXI6OmxhYmVsRm9yKToKKyAgICAgICAgKEpT
Qzo6WDg2QXNzZW1ibGVyOjphbGlnbik6CisgICAgICAgIChKU0M6Olg4NkFzc2VtYmxlcjo6bGlu
a0p1bXApOgorICAgICAgICAoSlNDOjpYODZBc3NlbWJsZXI6OmxpbmtDYWxsKToKKyAgICAgICAg
KEpTQzo6WDg2QXNzZW1ibGVyOjpsaW5rUG9pbnRlcik6CisgICAgICAgIChKU0M6Olg4NkFzc2Vt
Ymxlcjo6Z2V0Q2FsbFJldHVybk9mZnNldCk6CisgICAgICAgIChKU0M6Olg4NkFzc2VtYmxlcjo6
Z2V0UmVsb2NhdGVkQWRkcmVzcyk6CisgICAgICAgIChKU0M6Olg4NkFzc2VtYmxlcjo6Z2V0RGlm
ZmVyZW5jZUJldHdlZW5MYWJlbHMpOgorICAgICAgICAoSlNDOjpYODZBc3NlbWJsZXI6OnJld2lu
ZFRvTGFiZWwpOgorICAgICAgICAoSlNDOjpYODZBc3NlbWJsZXI6Olg4Nkluc3RydWN0aW9uRm9y
bWF0dGVyOjppbW1lZGlhdGVSZWwzMik6CisgICAgICAgIChKU0M6Olg4NkFzc2VtYmxlcjo6WDg2
SW5zdHJ1Y3Rpb25Gb3JtYXR0ZXI6OnJld2luZFRvTGFiZWwpOgorICAgICAgICAqIGppdC9KSVQu
Y3BwOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MpOgorICAgICAg
ICAqIGppdC9KSVQuaDoKKyAgICAgICAgKiBqaXQvSklUSW5saW5lTWV0aG9kcy5oOgorICAgICAg
ICAoSlNDOjpKSVQ6OmF0SnVtcFRhcmdldCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcik6CisgICAgICAgICogaml0L0pJVE9wY29kZXMuY3BwOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3Bfam1wKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2pmYWxz
ZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qZXFfbnVsbCk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9vcF9qbmVxX251bGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfam5l
cV9wdHIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfanNyKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X29wX2p0cnVlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2ptcF9zY29w
ZXMpOgorCiAyMDExLTA1LTAxICBDaGFvLXlpbmcgRnUgIDxmdUBtaXBzLmNvbT4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBFcmljIFNlaWRlbC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvQVJNQXNzZW1ibGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci9BUk1Bc3NlbWJsZXIuaAkocmV2aXNpb24gODU0MDMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0FSTUFzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yMTMsNDcgKzIxMyw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdGF0aWMgY29uc3Qg
QVJNV29yZCBJbnZhbGlkQnJhbmNoVGFyZ2V0ID0gMHhmZmZmZmZmZjsKICAgICAgICAgc3RhdGlj
IGNvbnN0IGludCBEZWZhdWx0UHJlZmV0Y2hpbmcgPSAyOwogCi0gICAgICAgIGNsYXNzIEptcFNy
YyB7Ci0gICAgICAgICAgICBmcmllbmQgY2xhc3MgQVJNQXNzZW1ibGVyOwotICAgICAgICBwdWJs
aWM6Ci0gICAgICAgICAgICBKbXBTcmMoKQotICAgICAgICAgICAgICAgIDogbV9vZmZzZXQoLTEp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZToKLSAgICAg
ICAgICAgIEptcFNyYyhpbnQgb2Zmc2V0KQotICAgICAgICAgICAgICAgIDogbV9vZmZzZXQob2Zm
c2V0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpbnQgbV9v
ZmZzZXQ7Ci0gICAgICAgIH07Ci0KLSAgICAgICAgY2xhc3MgSm1wRHN0IHsKLSAgICAgICAgICAg
IGZyaWVuZCBjbGFzcyBBUk1Bc3NlbWJsZXI7Ci0gICAgICAgIHB1YmxpYzoKLSAgICAgICAgICAg
IEptcERzdCgpCi0gICAgICAgICAgICAgICAgOiBtX29mZnNldCgtMSkKLSAgICAgICAgICAgICAg
ICAsIG1fdXNlZChmYWxzZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgYm9vbCBpc1VzZWQoKSBjb25zdCB7IHJldHVybiBtX3VzZWQ7IH0KLSAgICAgICAgICAg
IGJvb2wgaXNTZXQoKSBjb25zdCB7IHJldHVybiAobV9vZmZzZXQgIT0gLTEpOyB9Ci0gICAgICAg
ICAgICB2b2lkIHVzZWQoKSB7IG1fdXNlZCA9IHRydWU7IH0KLSAgICAgICAgcHJpdmF0ZToKLSAg
ICAgICAgICAgIEptcERzdChpbnQgb2Zmc2V0KQotICAgICAgICAgICAgICAgIDogbV9vZmZzZXQo
b2Zmc2V0KQotICAgICAgICAgICAgICAgICwgbV91c2VkKGZhbHNlKQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIEFTU0VSVChtX29mZnNldCA9PSBvZmZzZXQpOwotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICBzaWduZWQgaW50IG1fb2Zmc2V0IDogMzE7Ci0gICAgICAgICAgICBp
bnQgbV91c2VkIDogMTsKLSAgICAgICAgfTsKLQogICAgICAgICAvLyBJbnN0cnVjdGlvbiBmb3Jt
YXRpbmcKIAogICAgICAgICB2b2lkIGVtaXRJbnN0KEFSTVdvcmQgb3AsIGludCByZCwgaW50IHJu
LCBBUk1Xb3JkIG9wMikKQEAgLTYyMiw3ICs1ODEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICNlbmRp
ZgogICAgICAgICB9CiAKLSAgICAgICAgSm1wU3JjIGJseChpbnQgcm0sIENvbmRpdGlvbiBjYyA9
IEFMKQorICAgICAgICBBc3NlbWJsZXJMYWJlbCBibHgoaW50IHJtLCBDb25kaXRpb24gY2MgPSBB
TCkKICAgICAgICAgewogI2lmIFdURl9BUk1fQVJDSF9BVF9MRUFTVCg1KQogICAgICAgICAgICAg
ZW1pdEluc3Qoc3RhdGljX2Nhc3Q8QVJNV29yZD4oY2MpIHwgQkxYLCAwLCAwLCBSTShybSkpOwpA
QCAtNjMyLDcgKzU5MSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgbW92X3IoQVJN
UmVnaXN0ZXJzOjpsciwgQVJNUmVnaXN0ZXJzOjpwYywgY2MpOwogICAgICAgICAgICAgYngocm0s
IGNjKTsKICNlbmRpZgotICAgICAgICAgICAgcmV0dXJuIEptcFNyYyhtX2J1ZmZlci5sYWJlbCgp
KTsKKyAgICAgICAgICAgIHJldHVybiBBc3NlbWJsZXJMYWJlbChtX2J1ZmZlci5sYWJlbCgpKTsK
ICAgICAgICAgfQogCiAgICAgICAgIHN0YXRpYyBBUk1Xb3JkIGxzbChpbnQgcmVnLCBBUk1Xb3Jk
IHZhbHVlKQpAQCAtNjk0LDEzICs2NTMsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAg
ICByZXR1cm4gbV9idWZmZXIuc2l6ZU9mQ29uc3RhbnRQb29sKCk7CiAgICAgICAgIH0KIAotICAg
ICAgICBKbXBEc3QgbGFiZWwoKQorICAgICAgICBBc3NlbWJsZXJMYWJlbCBsYWJlbCgpCiAgICAg
ICAgIHsKICAgICAgICAgICAgIG1fYnVmZmVyLmVuc3VyZVNwYWNlRm9yQW55T25lSW5zdHJ1Y3Rp
b24oKTsKLSAgICAgICAgICAgIHJldHVybiBKbXBEc3QobV9idWZmZXIubGFiZWwoKSk7CisgICAg
ICAgICAgICByZXR1cm4gQXNzZW1ibGVyTGFiZWwobV9idWZmZXIubGFiZWwoKSk7CiAgICAgICAg
IH0KIAotICAgICAgICBKbXBEc3QgYWxpZ24oaW50IGFsaWdubWVudCkKKyAgICAgICAgQXNzZW1i
bGVyTGFiZWwgYWxpZ24oaW50IGFsaWdubWVudCkKICAgICAgICAgewogICAgICAgICAgICAgd2hp
bGUgKCFtX2J1ZmZlci5pc0FsaWduZWQoYWxpZ25tZW50KSkKICAgICAgICAgICAgICAgICBtb3Zf
cihBUk1SZWdpc3RlcnM6OnIwLCBBUk1SZWdpc3RlcnM6OnIwKTsKQEAgLTcwOCwxNSArNjY3LDE1
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuIGxhYmVsKCk7CiAgICAgICAg
IH0KIAotICAgICAgICBKbXBTcmMgbG9hZEJyYW5jaFRhcmdldChpbnQgcmQsIENvbmRpdGlvbiBj
YyA9IEFMLCBpbnQgdXNlQ29uc3RhbnRQb29sID0gMCkKKyAgICAgICAgQXNzZW1ibGVyTGFiZWwg
bG9hZEJyYW5jaFRhcmdldChpbnQgcmQsIENvbmRpdGlvbiBjYyA9IEFMLCBpbnQgdXNlQ29uc3Rh
bnRQb29sID0gMCkKICAgICAgICAgewogICAgICAgICAgICAgZW5zdXJlU3BhY2Uoc2l6ZW9mKEFS
TVdvcmQpLCBzaXplb2YoQVJNV29yZCkpOwogICAgICAgICAgICAgbV9qdW1wcy5hcHBlbmQobV9i
dWZmZXIubGFiZWwoKSB8ICh1c2VDb25zdGFudFBvb2wgJiAweDEpKTsKICAgICAgICAgICAgIGxk
cl91bl9pbW0ocmQsIEludmFsaWRCcmFuY2hUYXJnZXQsIGNjKTsKLSAgICAgICAgICAgIHJldHVy
biBKbXBTcmMobV9idWZmZXIubGFiZWwoKSk7CisgICAgICAgICAgICByZXR1cm4gQXNzZW1ibGVy
TGFiZWwobV9idWZmZXIubGFiZWwoKSk7CiAgICAgICAgIH0KIAotICAgICAgICBKbXBTcmMgam1w
KENvbmRpdGlvbiBjYyA9IEFMLCBpbnQgdXNlQ29uc3RhbnRQb29sID0gMCkKKyAgICAgICAgQXNz
ZW1ibGVyTGFiZWwgam1wKENvbmRpdGlvbiBjYyA9IEFMLCBpbnQgdXNlQ29uc3RhbnRQb29sID0g
MCkKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIGxvYWRCcmFuY2hUYXJnZXQoQVJNUmVn
aXN0ZXJzOjpwYywgY2MsIHVzZUNvbnN0YW50UG9vbCk7CiAgICAgICAgIH0KQEAgLTc3Niw3ICs3
MzUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICAvLyBQYXRjaCBwb2ludGVycwogCi0g
ICAgICAgIHN0YXRpYyB2b2lkIGxpbmtQb2ludGVyKHZvaWQqIGNvZGUsIEptcERzdCBmcm9tLCB2
b2lkKiB0bykKKyAgICAgICAgc3RhdGljIHZvaWQgbGlua1BvaW50ZXIodm9pZCogY29kZSwgQXNz
ZW1ibGVyTGFiZWwgZnJvbSwgdm9pZCogdG8pCiAgICAgICAgIHsKICAgICAgICAgICAgIHBhdGNo
UG9pbnRlckludGVybmFsKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGNvZGUpICsgZnJvbS5t
X29mZnNldCwgdG8pOwogICAgICAgICB9CkBAIC03OTcsMTQgKzc1NiwxNCBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGludHB0cl90PihiYXNl
KSArIG9mZnNldCAtIHNpemVvZihBUk1Xb3JkKTsKICAgICAgICAgfQogCi0gICAgICAgIHZvaWQg
bGlua0p1bXAoSm1wU3JjIGZyb20sIEptcERzdCB0bykKKyAgICAgICAgdm9pZCBsaW5rSnVtcChB
c3NlbWJsZXJMYWJlbCBmcm9tLCBBc3NlbWJsZXJMYWJlbCB0bykKICAgICAgICAgewogICAgICAg
ICAgICAgQVJNV29yZCogaW5zbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8QVJNV29yZCo+KGdldEFic29s
dXRlSnVtcEFkZHJlc3MobV9idWZmZXIuZGF0YSgpLCBmcm9tLm1fb2Zmc2V0KSk7CiAgICAgICAg
ICAgICBBUk1Xb3JkKiBhZGRyID0gZ2V0TGRySW1tQWRkcmVzc09uUG9vbChpbnNuLCBtX2J1ZmZl
ci5wb29sQWRkcmVzcygpKTsKICAgICAgICAgICAgICphZGRyID0gc3RhdGljX2Nhc3Q8QVJNV29y
ZD4odG8ubV9vZmZzZXQpOwogICAgICAgICB9CiAKLSAgICAgICAgc3RhdGljIHZvaWQgbGlua0p1
bXAodm9pZCogY29kZSwgSm1wU3JjIGZyb20sIHZvaWQqIHRvKQorICAgICAgICBzdGF0aWMgdm9p
ZCBsaW5rSnVtcCh2b2lkKiBjb2RlLCBBc3NlbWJsZXJMYWJlbCBmcm9tLCB2b2lkKiB0bykKICAg
ICAgICAgewogICAgICAgICAgICAgcGF0Y2hQb2ludGVySW50ZXJuYWwoZ2V0QWJzb2x1dGVKdW1w
QWRkcmVzcyhjb2RlLCBmcm9tLm1fb2Zmc2V0KSwgdG8pOwogICAgICAgICB9CkBAIC04MTQsNyAr
NzczLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBwYXRjaFBvaW50ZXJJbnRlcm5h
bChnZXRBYnNvbHV0ZUp1bXBBZGRyZXNzKGZyb20pLCB0byk7CiAgICAgICAgIH0KIAotICAgICAg
ICBzdGF0aWMgdm9pZCBsaW5rQ2FsbCh2b2lkKiBjb2RlLCBKbXBTcmMgZnJvbSwgdm9pZCogdG8p
CisgICAgICAgIHN0YXRpYyB2b2lkIGxpbmtDYWxsKHZvaWQqIGNvZGUsIEFzc2VtYmxlckxhYmVs
IGZyb20sIHZvaWQqIHRvKQogICAgICAgICB7CiAgICAgICAgICAgICBwYXRjaFBvaW50ZXJJbnRl
cm5hbChnZXRBYnNvbHV0ZUp1bXBBZGRyZXNzKGNvZGUsIGZyb20ubV9vZmZzZXQpLCB0byk7CiAg
ICAgICAgIH0KQEAgLTgyNiwyOSArNzg1LDE5IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAg
IC8vIEFkZHJlc3Mgb3BlcmF0aW9ucwogCi0gICAgICAgIHN0YXRpYyB2b2lkKiBnZXRSZWxvY2F0
ZWRBZGRyZXNzKHZvaWQqIGNvZGUsIEptcFNyYyBqdW1wKQotICAgICAgICB7Ci0gICAgICAgICAg
ICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4o
Y29kZSkgKyBqdW1wLm1fb2Zmc2V0KTsKLSAgICAgICAgfQotCi0gICAgICAgIHN0YXRpYyB2b2lk
KiBnZXRSZWxvY2F0ZWRBZGRyZXNzKHZvaWQqIGNvZGUsIEptcERzdCBsYWJlbCkKKyAgICAgICAg
c3RhdGljIHZvaWQqIGdldFJlbG9jYXRlZEFkZHJlc3Modm9pZCogY29kZSwgQXNzZW1ibGVyTGFi
ZWwgbGFiZWwpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0
PHZvaWQqPihyZWludGVycHJldF9jYXN0PGNoYXIqPihjb2RlKSArIGxhYmVsLm1fb2Zmc2V0KTsK
ICAgICAgICAgfQogCiAgICAgICAgIC8vIEFkZHJlc3MgZGlmZmVyZW5jZXMKIAotICAgICAgICBz
dGF0aWMgaW50IGdldERpZmZlcmVuY2VCZXR3ZWVuTGFiZWxzKEptcERzdCBmcm9tLCBKbXBTcmMg
dG8pCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiB0by5tX29mZnNldCAtIGZyb20ubV9v
ZmZzZXQ7Ci0gICAgICAgIH0KLQotICAgICAgICBzdGF0aWMgaW50IGdldERpZmZlcmVuY2VCZXR3
ZWVuTGFiZWxzKEptcERzdCBmcm9tLCBKbXBEc3QgdG8pCisgICAgICAgIHN0YXRpYyBpbnQgZ2V0
RGlmZmVyZW5jZUJldHdlZW5MYWJlbHMoQXNzZW1ibGVyTGFiZWwgYSwgQXNzZW1ibGVyTGFiZWwg
YikKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIHRvLm1fb2Zmc2V0IC0gZnJvbS5tX29m
ZnNldDsKKyAgICAgICAgICAgIHJldHVybiBiLm1fb2Zmc2V0IC0gYS5tX29mZnNldDsKICAgICAg
ICAgfQogCi0gICAgICAgIHN0YXRpYyB1bnNpZ25lZCBnZXRDYWxsUmV0dXJuT2Zmc2V0KEptcFNy
YyBjYWxsKQorICAgICAgICBzdGF0aWMgdW5zaWduZWQgZ2V0Q2FsbFJldHVybk9mZnNldChBc3Nl
bWJsZXJMYWJlbCBjYWxsKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gY2FsbC5tX29m
ZnNldDsKICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9B
Uk12N0Fzc2VtYmxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvQVJNdjdBc3NlbWJsZXIuaAkocmV2aXNpb24gODU0MDMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL0FSTXY3QXNzZW1ibGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3
Miw2NSArNDcyLDYgQEAgcHVibGljOgogICAgICAgICBKdW1wTGlua1R5cGUgbV9saW5rVHlwZSA6
IDQ7CiAgICAgICAgIENvbmRpdGlvbiBtX2NvbmRpdGlvbiA6IDE2OwogICAgIH07Ci0gICAgCi0g
ICAgY2xhc3MgSm1wU3JjIHsKLSAgICAgICAgZnJpZW5kIGNsYXNzIEFSTXY3QXNzZW1ibGVyOwot
ICAgICAgICBmcmllbmQgY2xhc3MgQVJNSW5zdHJ1Y3Rpb25Gb3JtYXR0ZXI7Ci0gICAgICAgIGZy
aWVuZCBjbGFzcyBMaW5rQnVmZmVyOwotICAgIHB1YmxpYzoKLSAgICAgICAgSm1wU3JjKCkKLSAg
ICAgICAgICAgIDogbV9vZmZzZXQoLTEpCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgcHJp
dmF0ZToKLSAgICAgICAgSm1wU3JjKGludCBvZmZzZXQsIEp1bXBUeXBlIHR5cGUpCi0gICAgICAg
ICAgICA6IG1fb2Zmc2V0KG9mZnNldCkKLSAgICAgICAgICAgICwgbV9jb25kaXRpb24oQ29uZGl0
aW9uSW52YWxpZCkKLSAgICAgICAgICAgICwgbV90eXBlKHR5cGUpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIEFTU0VSVChtX3R5cGUgPT0gSnVtcEZpeGVkIHx8IG1fdHlwZSA9PSBKdW1wTm9Db25k
aXRpb24gfHwgbV90eXBlID09IEp1bXBOb0NvbmRpdGlvbkZpeGVkU2l6ZSk7Ci0gICAgICAgIH0K
LQotICAgICAgICBKbXBTcmMoaW50IG9mZnNldCwgSnVtcFR5cGUgdHlwZSwgQ29uZGl0aW9uIGNv
bmRpdGlvbikKLSAgICAgICAgICAgIDogbV9vZmZzZXQob2Zmc2V0KQotICAgICAgICAgICAgLCBt
X2NvbmRpdGlvbihjb25kaXRpb24pCi0gICAgICAgICAgICAsIG1fdHlwZSh0eXBlKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBBU1NFUlQobV90eXBlID09IEp1bXBGaXhlZCB8fCBtX3R5cGUgPT0g
SnVtcENvbmRpdGlvbiB8fCBtX3R5cGUgPT0gSnVtcENvbmRpdGlvbkZpeGVkU2l6ZSk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBpbnQgbV9vZmZzZXQ7Ci0gICAgICAgIENvbmRpdGlvbiBtX2NvbmRp
dGlvbiA6IDE2OwotICAgICAgICBKdW1wVHlwZSBtX3R5cGUgOiAxNjsKLSAgICAgICAgCi0gICAg
fTsKLSAgICAKLSAgICBjbGFzcyBKbXBEc3QgewotICAgICAgICBmcmllbmQgY2xhc3MgQVJNdjdB
c3NlbWJsZXI7Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBBUk1JbnN0cnVjdGlvbkZvcm1hdHRlcjsK
LSAgICAgICAgZnJpZW5kIGNsYXNzIExpbmtCdWZmZXI7Ci0gICAgcHVibGljOgotICAgICAgICBK
bXBEc3QoKQotICAgICAgICAgICAgOiBtX29mZnNldCgtMSkKLSAgICAgICAgICAgICwgbV91c2Vk
KGZhbHNlKQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICBib29sIGlzVXNlZCgpIGNv
bnN0IHsgcmV0dXJuIG1fdXNlZDsgfQotICAgICAgICBib29sIGlzU2V0KCkgY29uc3QgeyByZXR1
cm4gKG1fb2Zmc2V0ICE9IC0xKTsgfQotICAgICAgICB2b2lkIHVzZWQoKSB7IG1fdXNlZCA9IHRy
dWU7IH0KLSAgICBwcml2YXRlOgotICAgICAgICBKbXBEc3QoaW50IG9mZnNldCkKLSAgICAgICAg
ICAgIDogbV9vZmZzZXQob2Zmc2V0KQotICAgICAgICAgICAgLCBtX3VzZWQoZmFsc2UpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChtX29mZnNldCA9PSBvZmZzZXQpOwotICAgICAgICB9
Ci0KLSAgICAgICAgc2lnbmVkIGludCBtX29mZnNldCA6IDMxOwotICAgICAgICBpbnQgbV91c2Vk
IDogMTsKLSAgICB9OwogCiBwcml2YXRlOgogCkBAIC04ODIsMzEgKzgyMywyNSBAQCBwdWJsaWM6
CiAgICAgfQogICAgIAogICAgIC8vIE9ubHkgYWxsb3dlZCBpbiBJVCAoaWYgdGhlbikgYmxvY2sg
aWYgbGFzdCBpbnN0cnVjdGlvbi4KLSAgICBKbXBTcmMgYihKdW1wVHlwZSB0eXBlKQorICAgIEFz
c2VtYmxlckxhYmVsIGIoKQogICAgIHsKICAgICAgICAgbV9mb3JtYXR0ZXIudHdvV29yZE9wMTZP
cDE2KE9QX0JfVDRhLCBPUF9CX1Q0Yik7Ci0gICAgICAgIHJldHVybiBKbXBTcmMobV9mb3JtYXR0
ZXIubGFiZWwoKSwgdHlwZSk7CisgICAgICAgIHJldHVybiBBc3NlbWJsZXJMYWJlbChtX2Zvcm1h
dHRlci5sYWJlbCgpKTsKICAgICB9CiAgICAgCiAgICAgLy8gT25seSBhbGxvd2VkIGluIElUIChp
ZiB0aGVuKSBibG9jayBpZiBsYXN0IGluc3RydWN0aW9uLgotICAgIEptcFNyYyBibHgoUmVnaXN0
ZXJJRCBybSwgSnVtcFR5cGUgdHlwZSkKKyAgICBBc3NlbWJsZXJMYWJlbCBibHgoUmVnaXN0ZXJJ
RCBybSkKICAgICB7CiAgICAgICAgIEFTU0VSVChybSAhPSBBUk1SZWdpc3RlcnM6OnBjKTsKICAg
ICAgICAgbV9mb3JtYXR0ZXIub25lV29yZE9wOFJlZ1JlZzE0MyhPUF9CTFgsIHJtLCAoUmVnaXN0
ZXJJRCk4KTsKLSAgICAgICAgcmV0dXJuIEptcFNyYyhtX2Zvcm1hdHRlci5sYWJlbCgpLCB0eXBl
KTsKKyAgICAgICAgcmV0dXJuIEFzc2VtYmxlckxhYmVsKG1fZm9ybWF0dGVyLmxhYmVsKCkpOwog
ICAgIH0KIAogICAgIC8vIE9ubHkgYWxsb3dlZCBpbiBJVCAoaWYgdGhlbikgYmxvY2sgaWYgbGFz
dCBpbnN0cnVjdGlvbi4KLSAgICBKbXBTcmMgYngoUmVnaXN0ZXJJRCBybSwgSnVtcFR5cGUgdHlw
ZSwgQ29uZGl0aW9uIGNvbmRpdGlvbikKKyAgICBBc3NlbWJsZXJMYWJlbCBieChSZWdpc3RlcklE
IHJtKQogICAgIHsKICAgICAgICAgbV9mb3JtYXR0ZXIub25lV29yZE9wOFJlZ1JlZzE0MyhPUF9C
WCwgcm0sIChSZWdpc3RlcklEKTApOwotICAgICAgICByZXR1cm4gSm1wU3JjKG1fZm9ybWF0dGVy
LmxhYmVsKCksIHR5cGUsIGNvbmRpdGlvbik7Ci0gICAgfQotCi0gICAgSm1wU3JjIGJ4KFJlZ2lz
dGVySUQgcm0sIEp1bXBUeXBlIHR5cGUpCi0gICAgewotICAgICAgICBtX2Zvcm1hdHRlci5vbmVX
b3JkT3A4UmVnUmVnMTQzKE9QX0JYLCBybSwgKFJlZ2lzdGVySUQpMCk7Ci0gICAgICAgIHJldHVy
biBKbXBTcmMobV9mb3JtYXR0ZXIubGFiZWwoKSwgdHlwZSk7CisgICAgICAgIHJldHVybiBBc3Nl
bWJsZXJMYWJlbChtX2Zvcm1hdHRlci5sYWJlbCgpKTsKICAgICB9CiAKICAgICB2b2lkIGJrcHQo
dWludDhfdCBpbW09MCkKQEAgLTE1OTEsMTIgKzE1MjYsMTIgQEAgcHVibGljOgogICAgICAgICBt
X2Zvcm1hdHRlci52ZnBPcChPUF9WU1VCX1QyLCBPUF9WU1VCX1QyYiwgdHJ1ZSwgcm4sIHJkLCBy
bSk7CiAgICAgfQogCi0gICAgSm1wRHN0IGxhYmVsKCkKKyAgICBBc3NlbWJsZXJMYWJlbCBsYWJl
bCgpCiAgICAgewotICAgICAgICByZXR1cm4gSm1wRHN0KG1fZm9ybWF0dGVyLmxhYmVsKCkpOwor
ICAgICAgICByZXR1cm4gQXNzZW1ibGVyTGFiZWwobV9mb3JtYXR0ZXIubGFiZWwoKSk7CiAgICAg
fQogICAgIAotICAgIEptcERzdCBhbGlnbihpbnQgYWxpZ25tZW50KQorICAgIEFzc2VtYmxlckxh
YmVsIGFsaWduKGludCBhbGlnbm1lbnQpCiAgICAgewogICAgICAgICB3aGlsZSAoIW1fZm9ybWF0
dGVyLmlzQWxpZ25lZChhbGlnbm1lbnQpKQogICAgICAgICAgICAgYmtwdCgpOwpAQCAtMTYwNCwz
MyArMTUzOSwxNSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBsYWJlbCgpOwogICAgIH0KICAg
ICAKLSAgICBzdGF0aWMgdm9pZCogZ2V0UmVsb2NhdGVkQWRkcmVzcyh2b2lkKiBjb2RlLCBKbXBT
cmMganVtcCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChqdW1wLm1fb2Zmc2V0ICE9IC0xKTsKLQot
ICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDxw
dHJkaWZmX3Q+KGNvZGUpICsganVtcC5tX29mZnNldCk7Ci0gICAgfQotICAgIAotICAgIHN0YXRp
YyB2b2lkKiBnZXRSZWxvY2F0ZWRBZGRyZXNzKHZvaWQqIGNvZGUsIEptcERzdCBkZXN0aW5hdGlv
bikKLSAgICB7Ci0gICAgICAgIEFTU0VSVChkZXN0aW5hdGlvbi5tX29mZnNldCAhPSAtMSk7Ci0K
LSAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8
cHRyZGlmZl90Pihjb2RlKSArIGRlc3RpbmF0aW9uLm1fb2Zmc2V0KTsKLSAgICB9Ci0gICAgCi0g
ICAgc3RhdGljIGludCBnZXREaWZmZXJlbmNlQmV0d2VlbkxhYmVscyhKbXBEc3Qgc3JjLCBKbXBE
c3QgZHN0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGRzdC5tX29mZnNldCAtIHNyYy5tX29mZnNl
dDsKLSAgICB9Ci0gICAgCi0gICAgc3RhdGljIGludCBnZXREaWZmZXJlbmNlQmV0d2VlbkxhYmVs
cyhKbXBEc3Qgc3JjLCBKbXBTcmMgZHN0KQorICAgIHN0YXRpYyB2b2lkKiBnZXRSZWxvY2F0ZWRB
ZGRyZXNzKHZvaWQqIGNvZGUsIEFzc2VtYmxlckxhYmVsIGxhYmVsKQogICAgIHsKLSAgICAgICAg
cmV0dXJuIGRzdC5tX29mZnNldCAtIHNyYy5tX29mZnNldDsKKyAgICAgICAgQVNTRVJUKGxhYmVs
LmlzU2V0KCkpOworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRl
cnByZXRfY2FzdDxwdHJkaWZmX3Q+KGNvZGUpICsgbGFiZWwubV9vZmZzZXQpOwogICAgIH0KICAg
ICAKLSAgICBzdGF0aWMgaW50IGdldERpZmZlcmVuY2VCZXR3ZWVuTGFiZWxzKEptcFNyYyBzcmMs
IEptcERzdCBkc3QpCisgICAgc3RhdGljIGludCBnZXREaWZmZXJlbmNlQmV0d2VlbkxhYmVscyhB
c3NlbWJsZXJMYWJlbCBhLCBBc3NlbWJsZXJMYWJlbCBiKQogICAgIHsKLSAgICAgICAgcmV0dXJu
IGRzdC5tX29mZnNldCAtIHNyYy5tX29mZnNldDsKKyAgICAgICAgcmV0dXJuIGIubV9vZmZzZXQg
LSBhLm1fb2Zmc2V0OwogICAgIH0KIAogICAgIGludCBleGVjdXRhYmxlT2Zmc2V0Rm9yKGludCBs
b2NhdGlvbikKQEAgLTE3NjQsOSArMTY4MSw5IEBAIHB1YmxpYzoKICAgICB2b2lkKiB1bmxpbmtl
ZENvZGUoKSB7IHJldHVybiBtX2Zvcm1hdHRlci5kYXRhKCk7IH0KICAgICBzaXplX3QgY29kZVNp
emUoKSBjb25zdCB7IHJldHVybiBtX2Zvcm1hdHRlci5jb2RlU2l6ZSgpOyB9CiAKLSAgICBzdGF0
aWMgdW5zaWduZWQgZ2V0Q2FsbFJldHVybk9mZnNldChKbXBTcmMgY2FsbCkKKyAgICBzdGF0aWMg
dW5zaWduZWQgZ2V0Q2FsbFJldHVybk9mZnNldChBc3NlbWJsZXJMYWJlbCBjYWxsKQogICAgIHsK
LSAgICAgICAgQVNTRVJUKGNhbGwubV9vZmZzZXQgPj0gMCk7CisgICAgICAgIEFTU0VSVChjYWxs
LmlzU2V0KCkpOwogICAgICAgICByZXR1cm4gY2FsbC5tX29mZnNldDsKICAgICB9CiAKQEAgLTE3
NzgsMzMgKzE2OTUsMzEgQEAgcHVibGljOgogICAgIC8vIHdyaXRhYmxlIHJlZ2lvbiBvZiBtZW1v
cnk7IHRvIG1vZGlmeSB0aGUgY29kZSBpbiBhbiBleGVjdXRlLW9ubHkgZXhlY3VhYmxlCiAgICAg
Ly8gcG9vbCB0aGUgJ3JlcGF0Y2gnIGFuZCAncmVsaW5rJyBtZXRob2RzIHNob3VsZCBiZSB1c2Vk
LgogCi0gICAgdm9pZCBsaW5rSnVtcChKbXBTcmMgZnJvbSwgSm1wRHN0IHRvKQorICAgIHZvaWQg
bGlua0p1bXAoQXNzZW1ibGVyTGFiZWwgZnJvbSwgQXNzZW1ibGVyTGFiZWwgdG8sIEp1bXBUeXBl
IHR5cGUsIENvbmRpdGlvbiBjb25kaXRpb24pCiAgICAgewotICAgICAgICBBU1NFUlQodG8ubV9v
ZmZzZXQgIT0gLTEpOwotICAgICAgICBBU1NFUlQoZnJvbS5tX29mZnNldCAhPSAtMSk7Ci0gICAg
ICAgIG1fanVtcHNUb0xpbmsuYXBwZW5kKExpbmtSZWNvcmQoZnJvbS5tX29mZnNldCwgdG8ubV9v
ZmZzZXQsIGZyb20ubV90eXBlLCBmcm9tLm1fY29uZGl0aW9uKSk7CisgICAgICAgIEFTU0VSVCh0
by5pc1NldCgpKTsKKyAgICAgICAgQVNTRVJUKGZyb20uaXNTZXQoKSk7CisgICAgICAgIG1fanVt
cHNUb0xpbmsuYXBwZW5kKExpbmtSZWNvcmQoZnJvbS5tX29mZnNldCwgdG8ubV9vZmZzZXQsIHR5
cGUsIGNvbmRpdGlvbikpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGxpbmtKdW1wKHZvaWQq
IGNvZGUsIEptcFNyYyBmcm9tLCB2b2lkKiB0bykKKyAgICBzdGF0aWMgdm9pZCBsaW5rSnVtcCh2
b2lkKiBjb2RlLCBBc3NlbWJsZXJMYWJlbCBmcm9tLCB2b2lkKiB0bykKICAgICB7Ci0gICAgICAg
IEFTU0VSVChmcm9tLm1fb2Zmc2V0ICE9IC0xKTsKKyAgICAgICAgQVNTRVJUKGZyb20uaXNTZXQo
KSk7CiAgICAgICAgIAogICAgICAgICB1aW50MTZfdCogbG9jYXRpb24gPSByZWludGVycHJldF9j
YXN0PHVpbnQxNl90Kj4ocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oY29kZSkgKyBmcm9tLm1f
b2Zmc2V0KTsKICAgICAgICAgbGlua0p1bXBBYnNvbHV0ZShsb2NhdGlvbiwgdG8pOwogICAgIH0K
IAotICAgIC8vIGJhaCwgdGhpcyBtYXRob2Qgc2hvdWxkIHJlYWxseSBiZSBzdGF0aWMsIHNpbmNl
IGl0IGlzIHVzZWQgYnkgdGhlIExpbmtCdWZmZXIuCi0gICAgLy8gcmV0dXJuIGEgYm9vbCBzYXlp
bmcgd2hldGhlciB0aGUgbGluayB3YXMgc3VjY2Vzc2Z1bD8KLSAgICBzdGF0aWMgdm9pZCBsaW5r
Q2FsbCh2b2lkKiBjb2RlLCBKbXBTcmMgZnJvbSwgdm9pZCogdG8pCisgICAgc3RhdGljIHZvaWQg
bGlua0NhbGwodm9pZCogY29kZSwgQXNzZW1ibGVyTGFiZWwgZnJvbSwgdm9pZCogdG8pCiAgICAg
ewogICAgICAgICBBU1NFUlQoIShyZWludGVycHJldF9jYXN0PGludHB0cl90Pihjb2RlKSAmIDEp
KTsKLSAgICAgICAgQVNTRVJUKGZyb20ubV9vZmZzZXQgIT0gLTEpOworICAgICAgICBBU1NFUlQo
ZnJvbS5pc1NldCgpKTsKICAgICAgICAgQVNTRVJUKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+
KHRvKSAmIDEpOwogCiAgICAgICAgIHNldFBvaW50ZXIocmVpbnRlcnByZXRfY2FzdDx1aW50MTZf
dCo+KHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGNvZGUpICsgZnJvbS5tX29mZnNldCkgLSAx
LCB0byk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgbGlua1BvaW50ZXIodm9pZCogY29kZSwg
Sm1wRHN0IHdoZXJlLCB2b2lkKiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBsaW5rUG9pbnRlcih2
b2lkKiBjb2RlLCBBc3NlbWJsZXJMYWJlbCB3aGVyZSwgdm9pZCogdmFsdWUpCiAgICAgewogICAg
ICAgICBzZXRQb2ludGVyKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGNvZGUpICsgd2hlcmUubV9v
ZmZzZXQsIHZhbHVlKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAkocmV2aXNpb24gODU0
MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3Nl
bWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDksOSArNDksNiBAQCBwdWJsaWM6CiAgICAgY2xh
c3MgSnVtcDsKIAogICAgIHR5cGVkZWYgdHlwZW5hbWUgQXNzZW1ibGVyVHlwZTo6UmVnaXN0ZXJJ
RCBSZWdpc3RlcklEOwotICAgIHR5cGVkZWYgdHlwZW5hbWUgQXNzZW1ibGVyVHlwZTo6Sm1wU3Jj
IEptcFNyYzsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIEFzc2VtYmxlclR5cGU6OkptcERzdCBKbXBE
c3Q7Ci0KIAogICAgIC8vIFNlY3Rpb24gMTogTWFjcm9Bc3NlbWJsZXIgb3BlcmFuZCB0eXBlcwog
ICAgIC8vCkBAIC0yNjAsMTEgKzI1Nyw5IEBAIHB1YmxpYzoKICAgICAgICAgewogICAgICAgICB9
CiAgICAgICAgIAotICAgICAgICBib29sIGlzVXNlZCgpIGNvbnN0IHsgcmV0dXJuIG1fbGFiZWwu
aXNVc2VkKCk7IH0KICAgICAgICAgYm9vbCBpc1NldCgpIGNvbnN0IHsgcmV0dXJuIG1fbGFiZWwu
aXNTZXQoKTsgfQotICAgICAgICB2b2lkIHVzZWQoKSB7IG1fbGFiZWwudXNlZCgpOyB9CiAgICAg
cHJpdmF0ZToKLSAgICAgICAgSm1wRHN0IG1fbGFiZWw7CisgICAgICAgIEFzc2VtYmxlckxhYmVs
IG1fbGFiZWw7CiAgICAgfTsKIAogICAgIC8vIERhdGFMYWJlbFB0cjoKQEAgLTI4OCw3ICsyODMs
NyBAQCBwdWJsaWM6CiAgICAgICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7IHJldHVybiBtX2xhYmVs
LmlzU2V0KCk7IH0KICAgICAgICAgCiAgICAgcHJpdmF0ZToKLSAgICAgICAgSm1wRHN0IG1fbGFi
ZWw7CisgICAgICAgIEFzc2VtYmxlckxhYmVsIG1fbGFiZWw7CiAgICAgfTsKIAogICAgIC8vIERh
dGFMYWJlbDMyOgpAQCAtMzEwLDcgKzMwNSw3IEBAIHB1YmxpYzoKICAgICAgICAgfQogCiAgICAg
cHJpdmF0ZToKLSAgICAgICAgSm1wRHN0IG1fbGFiZWw7CisgICAgICAgIEFzc2VtYmxlckxhYmVs
IG1fbGFiZWw7CiAgICAgfTsKIAogICAgIC8vIENhbGw6CkBAIC0zMzYsNyArMzMxLDcgQEAgcHVi
bGljOgogICAgICAgICB7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIENhbGwoSm1wU3Jj
IGptcCwgRmxhZ3MgZmxhZ3MpCisgICAgICAgIENhbGwoQXNzZW1ibGVyTGFiZWwgam1wLCBGbGFn
cyBmbGFncykKICAgICAgICAgICAgIDogbV9qbXAoam1wKQogICAgICAgICAgICAgLCBtX2ZsYWdz
KGZsYWdzKQogICAgICAgICB7CkBAIC0zNTIsNyArMzQ3LDcgQEAgcHVibGljOgogICAgICAgICAg
ICAgcmV0dXJuIENhbGwoanVtcC5tX2ptcCwgTGlua2FibGUpOwogICAgICAgICB9CiAKLSAgICAg
ICAgSm1wU3JjIG1fam1wOworICAgICAgICBBc3NlbWJsZXJMYWJlbCBtX2ptcDsKICAgICBwcml2
YXRlOgogICAgICAgICBGbGFncyBtX2ZsYWdzOwogICAgIH07CkBAIC0zNzMsMjUgKzM2OCw0NyBA
QCBwdWJsaWM6CiAgICAgICAgIHsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgSnVtcChK
bXBTcmMgam1wKSAgICAKKyNpZiBDUFUoQVJNdjcpCisgICAgICAgIC8vIEZpeG1lOiB0aGlzIGlu
Zm9ybWF0aW9uIHNob3VsZCBiZSBzdG9yZWQgaW4gdGhlIGluc3RydWN0aW9uIHN0cmVhbSwgbm90
IGluIHRoZSBKdW1wIG9iamVjdC4KKyAgICAgICAgSnVtcChBc3NlbWJsZXJMYWJlbCBqbXAsIEFS
TXY3QXNzZW1ibGVyOjpKdW1wVHlwZSB0eXBlLCBBUk12N0Fzc2VtYmxlcjo6Q29uZGl0aW9uIGNv
bmRpdGlvbiA9IEFSTXY3QXNzZW1ibGVyOjpDb25kaXRpb25JbnZhbGlkKQogICAgICAgICAgICAg
OiBtX2ptcChqbXApCisgICAgICAgICAgICAsIG1fdHlwZSh0eXBlKQorICAgICAgICAgICAgLCBt
X2NvbmRpdGlvbihjb25kaXRpb24pCiAgICAgICAgIHsKICAgICAgICAgfQotICAgICAgICAKKyNl
bHNlCisgICAgICAgIEp1bXAoQXNzZW1ibGVyTGFiZWwgam1wKSAgICAKKyAgICAgICAgICAgIDog
bV9qbXAoam1wKQorICAgICAgICB7CisgICAgICAgIH0KKyNlbmRpZgorCiAgICAgICAgIHZvaWQg
bGluayhBYnN0cmFjdE1hY3JvQXNzZW1ibGVyPEFzc2VtYmxlclR5cGU+KiBtYXNtKSBjb25zdAog
ICAgICAgICB7CisjaWYgQ1BVKEFSTXY3KQorICAgICAgICAgICAgbWFzbS0+bV9hc3NlbWJsZXIu
bGlua0p1bXAobV9qbXAsIG1hc20tPm1fYXNzZW1ibGVyLmxhYmVsKCksIG1fdHlwZSwgbV9jb25k
aXRpb24pOworI2Vsc2UKICAgICAgICAgICAgIG1hc20tPm1fYXNzZW1ibGVyLmxpbmtKdW1wKG1f
am1wLCBtYXNtLT5tX2Fzc2VtYmxlci5sYWJlbCgpKTsKKyNlbmRpZgogICAgICAgICB9CiAgICAg
ICAgIAogICAgICAgICB2b2lkIGxpbmtUbyhMYWJlbCBsYWJlbCwgQWJzdHJhY3RNYWNyb0Fzc2Vt
YmxlcjxBc3NlbWJsZXJUeXBlPiogbWFzbSkgY29uc3QKICAgICAgICAgeworI2lmIENQVShBUk12
NykKKyAgICAgICAgICAgIG1hc20tPm1fYXNzZW1ibGVyLmxpbmtKdW1wKG1fam1wLCBsYWJlbC5t
X2xhYmVsLCBtX2ptcC5tX3R5cGUsIG1fam1wLm1fY29uZGl0aW9uKTsKKyNlbHNlCiAgICAgICAg
ICAgICBtYXNtLT5tX2Fzc2VtYmxlci5saW5rSnVtcChtX2ptcCwgbGFiZWwubV9sYWJlbCk7Cisj
ZW5kaWYKICAgICAgICAgfQogCiAgICAgICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7IHJldHVybiBt
X2ptcC5pc1NldCgpOyB9CiAKICAgICBwcml2YXRlOgotICAgICAgICBKbXBTcmMgbV9qbXA7Cisg
ICAgICAgIEFzc2VtYmxlckxhYmVsIG1fam1wOworI2lmIENQVShBUk12NykKKyAgICAgICAgQVJN
djdBc3NlbWJsZXI6Okp1bXBUeXBlIG1fdHlwZTsKKyAgICAgICAgQVJNdjdBc3NlbWJsZXI6OkNv
bmRpdGlvbiBtX2NvbmRpdGlvbjsKKyNlbmRpZgogICAgIH07CiAKICAgICAvLyBKdW1wTGlzdDoK
QEAgLTUyMiwxNyArNTM5LDEyIEBAIHByb3RlY3RlZDoKICAgICAgICAgQXNzZW1ibGVyVHlwZTo6
bGlua0p1bXAoY29kZSwganVtcC5tX2ptcCwgdGFyZ2V0LmRhdGFMb2NhdGlvbigpKTsKICAgICB9
CiAKLSAgICBzdGF0aWMgdm9pZCBsaW5rUG9pbnRlcih2b2lkKiBjb2RlLCB0eXBlbmFtZSBBc3Nl
bWJsZXJUeXBlOjpKbXBEc3QgbGFiZWwsIHZvaWQqIHZhbHVlKQorICAgIHN0YXRpYyB2b2lkIGxp
bmtQb2ludGVyKHZvaWQqIGNvZGUsIEFzc2VtYmxlckxhYmVsIGxhYmVsLCB2b2lkKiB2YWx1ZSkK
ICAgICB7CiAgICAgICAgIEFzc2VtYmxlclR5cGU6OmxpbmtQb2ludGVyKGNvZGUsIGxhYmVsLCB2
YWx1ZSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQqIGdldExpbmtlckFkZHJlc3Modm9pZCog
Y29kZSwgdHlwZW5hbWUgQXNzZW1ibGVyVHlwZTo6Sm1wU3JjIGxhYmVsKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIEFzc2VtYmxlclR5cGU6OmdldFJlbG9jYXRlZEFkZHJlc3MoY29kZSwgbGFiZWwp
OwotICAgIH0KLQotICAgIHN0YXRpYyB2b2lkKiBnZXRMaW5rZXJBZGRyZXNzKHZvaWQqIGNvZGUs
IHR5cGVuYW1lIEFzc2VtYmxlclR5cGU6OkptcERzdCBsYWJlbCkKKyAgICBzdGF0aWMgdm9pZCog
Z2V0TGlua2VyQWRkcmVzcyh2b2lkKiBjb2RlLCBBc3NlbWJsZXJMYWJlbCBsYWJlbCkKICAgICB7
CiAgICAgICAgIHJldHVybiBBc3NlbWJsZXJUeXBlOjpnZXRSZWxvY2F0ZWRBZGRyZXNzKGNvZGUs
IGxhYmVsKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fz
c2VtYmxlckJ1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvQXNzZW1ibGVyQnVmZmVyLmgJKHJldmlzaW9uIDg1NDAzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9Bc3NlbWJsZXJCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
MzcsNiArMzcsMTcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKKyAgICBzdHJ1Y3QgQXNzZW1ibGVy
TGFiZWwgeworICAgICAgICBBc3NlbWJsZXJMYWJlbCh1aW50MzJfdCBvZmZzZXQgPSBzdGQ6Om51
bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCkpCisgICAgICAgICAgICA6IG1fb2Zmc2V0KG9m
ZnNldCkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBpc1NldCgpIGNvbnN0
IHsgcmV0dXJuIChtX29mZnNldCAhPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4
KCkpOyB9CisgICAgICAgIAorICAgICAgICB1aW50MzJfdCBtX29mZnNldDsKKyAgICB9OworCiAg
ICAgY2xhc3MgQXNzZW1ibGVyQnVmZmVyIHsKICAgICAgICAgc3RhdGljIGNvbnN0IGludCBpbmxp
bmVDYXBhY2l0eSA9IDEyOCAtIHNpemVvZihjaGFyKikgLSAyICogc2l6ZW9mKGludCk7CiAgICAg
cHVibGljOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVm
ZmVyLmgJKHJldmlzaW9uIDg1NDAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9MaW5rQnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTYwLDcgKzYwLDYgQEAgY2xhc3MgTGlu
a0J1ZmZlciB7CiAgICAgdHlwZWRlZiBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBDYWxsOwogICAgIHR5
cGVkZWYgTWFjcm9Bc3NlbWJsZXI6OkRhdGFMYWJlbDMyIERhdGFMYWJlbDMyOwogICAgIHR5cGVk
ZWYgTWFjcm9Bc3NlbWJsZXI6OkRhdGFMYWJlbFB0ciBEYXRhTGFiZWxQdHI7Ci0gICAgdHlwZWRl
ZiBNYWNyb0Fzc2VtYmxlcjo6Sm1wRHN0IEptcERzdDsKICNpZiBFTkFCTEUoQlJBTkNIX0NPTVBB
Q1RJT04pCiAgICAgdHlwZWRlZiBNYWNyb0Fzc2VtYmxlcjo6TGlua1JlY29yZCBMaW5rUmVjb3Jk
OwogICAgIHR5cGVkZWYgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaW5rVHlwZSBKdW1wTGlua1R5cGU7
CkBAIC0xMTksMTMgKzExOCwxMyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHBhdGNoKERhdGFMYWJl
bFB0ciBsYWJlbCwgdm9pZCogdmFsdWUpCiAgICAgewotICAgICAgICBKbXBEc3QgdGFyZ2V0ID0g
YXBwbHlPZmZzZXQobGFiZWwubV9sYWJlbCk7CisgICAgICAgIEFzc2VtYmxlckxhYmVsIHRhcmdl
dCA9IGFwcGx5T2Zmc2V0KGxhYmVsLm1fbGFiZWwpOwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
bGlua1BvaW50ZXIoY29kZSgpLCB0YXJnZXQsIHZhbHVlKTsKICAgICB9CiAKICAgICB2b2lkIHBh
dGNoKERhdGFMYWJlbFB0ciBsYWJlbCwgQ29kZUxvY2F0aW9uTGFiZWwgdmFsdWUpCiAgICAgewot
ICAgICAgICBKbXBEc3QgdGFyZ2V0ID0gYXBwbHlPZmZzZXQobGFiZWwubV9sYWJlbCk7CisgICAg
ICAgIEFzc2VtYmxlckxhYmVsIHRhcmdldCA9IGFwcGx5T2Zmc2V0KGxhYmVsLm1fbGFiZWwpOwog
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6bGlua1BvaW50ZXIoY29kZSgpLCB0YXJnZXQsIHZhbHVl
LmV4ZWN1dGFibGVBZGRyZXNzKCkpOwogICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci9NSVBTQXNzZW1ibGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9NSVBTQXNzZW1ibGVyLmgJKHJldmlzaW9uIDg1NDAzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NSVBTQXNzZW1ibGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTE2Niw0NyArMTY2LDYgQEAgcHVibGljOgogICAgICAgICBPUF9TSF9GVCA9IDE2
CiAgICAgfTsKIAotICAgIGNsYXNzIEptcFNyYyB7Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBNSVBT
QXNzZW1ibGVyOwotICAgIHB1YmxpYzoKLSAgICAgICAgSm1wU3JjKCkKLSAgICAgICAgICAgIDog
bV9vZmZzZXQoLTEpCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgcHJpdmF0ZToKLSAgICAg
ICAgSm1wU3JjKGludCBvZmZzZXQpCi0gICAgICAgICAgICA6IG1fb2Zmc2V0KG9mZnNldCkKLSAg
ICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAgaW50IG1fb2Zmc2V0OwotICAgIH07Ci0KLSAg
ICBjbGFzcyBKbXBEc3QgewotICAgICAgICBmcmllbmQgY2xhc3MgTUlQU0Fzc2VtYmxlcjsKLSAg
ICBwdWJsaWM6Ci0gICAgICAgIEptcERzdCgpCi0gICAgICAgICAgICA6IG1fb2Zmc2V0KC0xKQot
ICAgICAgICAgICAgLCBtX3VzZWQoZmFsc2UpCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0gICAg
ICAgIGJvb2wgaXNVc2VkKCkgY29uc3QgeyByZXR1cm4gbV91c2VkOyB9Ci0gICAgICAgIGJvb2wg
aXNTZXQoKSBjb25zdCB7IHJldHVybiAobV9vZmZzZXQgIT0gLTEpOyB9Ci0gICAgICAgIHZvaWQg
dXNlZCgpIHsgbV91c2VkID0gdHJ1ZTsgfQotICAgIHByaXZhdGU6Ci0gICAgICAgIEptcERzdChp
bnQgb2Zmc2V0KQotICAgICAgICAgICAgOiBtX29mZnNldChvZmZzZXQpCi0gICAgICAgICAgICAs
IG1fdXNlZChmYWxzZSkKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKG1fb2Zmc2V0ID09
IG9mZnNldCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpbnQgbV9vZmZzZXQgOiAzMTsKLSAgICAg
ICAgaW50IG1fdXNlZCA6IDE7Ci0gICAgfTsKLQogICAgIHZvaWQgZW1pdEluc3QoTUlQU1dvcmQg
b3ApCiAgICAgewogICAgICAgICB2b2lkKiBvbGRCYXNlID0gbV9idWZmZXIuZGF0YSgpOwpAQCAt
NTAyLDExICs0NjEsNiBAQCBwdWJsaWM6CiAgICAgICAgIGVtaXRJbnN0KDB4NDUwMDAwMDApOwog
ICAgIH0KIAotICAgIEptcFNyYyBuZXdKbXBTcmMoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEpt
cFNyYyhtX2J1ZmZlci5sYWJlbCgpKTsKLSAgICB9Ci0KICAgICB2b2lkIGFwcGVuZEp1bXAoKQog
ICAgIHsKICAgICAgICAgbV9qdW1wcy5hcHBlbmQobV9idWZmZXIubGFiZWwoKSk7CkBAIC02NjEs
MTIgKzYxNSwxMiBAQCBwdWJsaWM6CiAKICAgICAvLyBHZW5lcmFsIGhlbHBlcnMKIAotICAgIEpt
cERzdCBsYWJlbCgpCisgICAgQXNzZW1ibGVyTGFiZWwgbGFiZWwoKQogICAgIHsKLSAgICAgICAg
cmV0dXJuIEptcERzdChtX2J1ZmZlci5sYWJlbCgpKTsKKyAgICAgICAgcmV0dXJuIEFzc2VtYmxl
ckxhYmVsKG1fYnVmZmVyLmxhYmVsKCkpOwogICAgIH0KIAotICAgIEptcERzdCBhbGlnbihpbnQg
YWxpZ25tZW50KQorICAgIEFzc2VtYmxlckxhYmVsIGFsaWduKGludCBhbGlnbm1lbnQpCiAgICAg
ewogICAgICAgICB3aGlsZSAoIW1fYnVmZmVyLmlzQWxpZ25lZChhbGlnbm1lbnQpKQogICAgICAg
ICAgICAgYmtwdCgpOwpAQCAtNjc0LDMyICs2MjgsMTQgQEAgcHVibGljOgogICAgICAgICByZXR1
cm4gbGFiZWwoKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCogZ2V0UmVsb2NhdGVkQWRkcmVz
cyh2b2lkKiBjb2RlLCBKbXBTcmMganVtcCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChqdW1wLm1f
b2Zmc2V0ICE9IC0xKTsKLSAgICAgICAgdm9pZCogYiA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+
KChyZWludGVycHJldF9jYXN0PGludHB0cl90Pihjb2RlKSkgKyBqdW1wLm1fb2Zmc2V0KTsKLSAg
ICAgICAgcmV0dXJuIGI7Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQqIGdldFJlbG9jYXRlZEFk
ZHJlc3Modm9pZCogY29kZSwgSm1wRHN0IGxhYmVsKQotICAgIHsKLSAgICAgICAgdm9pZCogYiA9
IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KChyZWludGVycHJldF9jYXN0PGludHB0cl90Pihjb2Rl
KSkgKyBsYWJlbC5tX29mZnNldCk7Ci0gICAgICAgIHJldHVybiBiOwotICAgIH0KLQotICAgIHN0
YXRpYyBpbnQgZ2V0RGlmZmVyZW5jZUJldHdlZW5MYWJlbHMoSm1wRHN0IGZyb20sIEptcERzdCB0
bykKLSAgICB7Ci0gICAgICAgIHJldHVybiB0by5tX29mZnNldCAtIGZyb20ubV9vZmZzZXQ7Ci0g
ICAgfQotCi0gICAgc3RhdGljIGludCBnZXREaWZmZXJlbmNlQmV0d2VlbkxhYmVscyhKbXBEc3Qg
ZnJvbSwgSm1wU3JjIHRvKQorICAgIHN0YXRpYyB2b2lkKiBnZXRSZWxvY2F0ZWRBZGRyZXNzKHZv
aWQqIGNvZGUsIEFzc2VtYmxlckxhYmVsIGxhYmVsKQogICAgIHsKLSAgICAgICAgcmV0dXJuIHRv
Lm1fb2Zmc2V0IC0gZnJvbS5tX29mZnNldDsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nh
c3Q8dm9pZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGNvZGUpICsgbGFiZWwubV9vZmZzZXQp
OwogICAgIH0KIAotICAgIHN0YXRpYyBpbnQgZ2V0RGlmZmVyZW5jZUJldHdlZW5MYWJlbHMoSm1w
U3JjIGZyb20sIEptcERzdCB0bykKKyAgICBzdGF0aWMgaW50IGdldERpZmZlcmVuY2VCZXR3ZWVu
TGFiZWxzKEFzc2VtYmxlckxhYmVsIGEsIEFzc2VtYmxlckxhYmVsIGIpCiAgICAgewotICAgICAg
ICByZXR1cm4gdG8ubV9vZmZzZXQgLSBmcm9tLm1fb2Zmc2V0OworICAgICAgICByZXR1cm4gYi5t
X29mZnNldCAtIGEubV9vZmZzZXQ7CiAgICAgfQogCiAgICAgLy8gQXNzZW1ibGVyIGFkbWluIG1l
dGhvZHM6CkBAIC03MjMsNyArNjU5LDcgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIGRlYnVnT2Zm
c2V0KCkgeyByZXR1cm4gbV9mb3JtYXR0ZXIuZGVidWdPZmZzZXQoKTsgfQogI2VuZGlmCiAKLSAg
ICBzdGF0aWMgdW5zaWduZWQgZ2V0Q2FsbFJldHVybk9mZnNldChKbXBTcmMgY2FsbCkKKyAgICBz
dGF0aWMgdW5zaWduZWQgZ2V0Q2FsbFJldHVybk9mZnNldChBc3NlbWJsZXJMYWJlbCBjYWxsKQog
ICAgIHsKICAgICAgICAgLy8gVGhlIHJldHVybiBhZGRyZXNzIGlzIGFmdGVyIGEgY2FsbCBhbmQg
YSBkZWxheSBzbG90IGluc3RydWN0aW9uCiAgICAgICAgIHJldHVybiBjYWxsLm1fb2Zmc2V0OwpA
QCAtNzM3LDEwICs2NzMsMTAgQEAgcHVibGljOgogICAgIC8vIHdyaXRhYmxlIHJlZ2lvbiBvZiBt
ZW1vcnk7IHRvIG1vZGlmeSB0aGUgY29kZSBpbiBhbiBleGVjdXRlLW9ubHkgZXhlY3VhYmxlCiAg
ICAgLy8gcG9vbCB0aGUgJ3JlcGF0Y2gnIGFuZCAncmVsaW5rJyBtZXRob2RzIHNob3VsZCBiZSB1
c2VkLgogCi0gICAgdm9pZCBsaW5rSnVtcChKbXBTcmMgZnJvbSwgSm1wRHN0IHRvKQorICAgIHZv
aWQgbGlua0p1bXAoQXNzZW1ibGVyTGFiZWwgZnJvbSwgQXNzZW1ibGVyTGFiZWwgdG8pCiAgICAg
ewotICAgICAgICBBU1NFUlQodG8ubV9vZmZzZXQgIT0gLTEpOwotICAgICAgICBBU1NFUlQoZnJv
bS5tX29mZnNldCAhPSAtMSk7CisgICAgICAgIEFTU0VSVCh0by5pc1NldCgpKTsKKyAgICAgICAg
QVNTRVJUKGZyb20uaXNTZXQoKSk7CiAgICAgICAgIE1JUFNXb3JkKiBpbnNuID0gcmVpbnRlcnBy
ZXRfY2FzdDxNSVBTV29yZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KG1fYnVmZmVyLmRh
dGEoKSkgKyBmcm9tLm1fb2Zmc2V0KTsKICAgICAgICAgTUlQU1dvcmQqIHRvUG9zID0gcmVpbnRl
cnByZXRfY2FzdDxNSVBTV29yZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KG1fYnVmZmVy
LmRhdGEoKSkgKyB0by5tX29mZnNldCk7CiAKQEAgLTc0OSw5ICs2ODUsOSBAQCBwdWJsaWM6CiAg
ICAgICAgIGxpbmtXaXRoT2Zmc2V0KGluc24sIHRvUG9zKTsKICAgICB9CiAKLSAgICBzdGF0aWMg
dm9pZCBsaW5rSnVtcCh2b2lkKiBjb2RlLCBKbXBTcmMgZnJvbSwgdm9pZCogdG8pCisgICAgc3Rh
dGljIHZvaWQgbGlua0p1bXAodm9pZCogY29kZSwgQXNzZW1ibGVyTGFiZWwgZnJvbSwgdm9pZCog
dG8pCiAgICAgewotICAgICAgICBBU1NFUlQoZnJvbS5tX29mZnNldCAhPSAtMSk7CisgICAgICAg
IEFTU0VSVChmcm9tLmlzU2V0KCkpOwogICAgICAgICBNSVBTV29yZCogaW5zbiA9IHJlaW50ZXJw
cmV0X2Nhc3Q8TUlQU1dvcmQqPihyZWludGVycHJldF9jYXN0PGludHB0cl90Pihjb2RlKSArIGZy
b20ubV9vZmZzZXQpOwogCiAgICAgICAgIEFTU0VSVCghKCooaW5zbiAtIDEpKSAmJiAhKCooaW5z
biAtIDIpKSAmJiAhKCooaW5zbiAtIDMpKSAmJiAhKCooaW5zbiAtIDUpKSk7CkBAIC03NTksMTMg
KzY5NSwxMyBAQCBwdWJsaWM6CiAgICAgICAgIGxpbmtXaXRoT2Zmc2V0KGluc24sIHRvKTsKICAg
ICB9CiAKLSAgICBzdGF0aWMgdm9pZCBsaW5rQ2FsbCh2b2lkKiBjb2RlLCBKbXBTcmMgZnJvbSwg
dm9pZCogdG8pCisgICAgc3RhdGljIHZvaWQgbGlua0NhbGwodm9pZCogY29kZSwgQXNzZW1ibGVy
TGFiZWwgZnJvbSwgdm9pZCogdG8pCiAgICAgewogICAgICAgICBNSVBTV29yZCogaW5zbiA9IHJl
aW50ZXJwcmV0X2Nhc3Q8TUlQU1dvcmQqPihyZWludGVycHJldF9jYXN0PGludHB0cl90Pihjb2Rl
KSArIGZyb20ubV9vZmZzZXQpOwogICAgICAgICBsaW5rQ2FsbEludGVybmFsKGluc24sIHRvKTsK
ICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBsaW5rUG9pbnRlcih2b2lkKiBjb2RlLCBKbXBEc3Qg
ZnJvbSwgdm9pZCogdG8pCisgICAgc3RhdGljIHZvaWQgbGlua1BvaW50ZXIodm9pZCogY29kZSwg
QXNzZW1ibGVyTGFiZWwgZnJvbSwgdm9pZCogdG8pCiAgICAgewogICAgICAgICBNSVBTV29yZCog
aW5zbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8TUlQU1dvcmQqPihyZWludGVycHJldF9jYXN0PGludHB0
cl90Pihjb2RlKSArIGZyb20ubV9vZmZzZXQpOwogICAgICAgICBBU1NFUlQoKCppbnNuICYgMHhm
ZmUwMDAwMCkgPT0gMHgzYzAwMDAwMCk7IC8vIGx1aQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTXY3LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTXY3LmgJKHJldmlzaW9u
IDg1NDAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxl
ckFSTXY3LmgJKHdvcmtpbmcgY29weSkKQEAgLTY3Myw3ICs2NzMsNyBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICBKdW1wIG5vdEVxdWFsID0gbWFrZUJyYW5jaChBUk12N0Fzc2VtYmxlcjo6Q29uZGl0
aW9uTkUpOwogICAgICAgICAgICAgdW5vcmRlcmVkLmxpbmsodGhpcyk7CiAgICAgICAgICAgICAv
LyBXZSBnZXQgaGVyZSBpZiBlaXRoZXIgdW5vcmRlcmVkIG9yIGVxdWFsLgotICAgICAgICAgICAg
SnVtcCByZXN1bHQgPSBtYWtlSnVtcCgpOworICAgICAgICAgICAgSnVtcCByZXN1bHQgPSBqdW1w
KCk7CiAgICAgICAgICAgICBub3RFcXVhbC5saW5rKHRoaXMpOwogICAgICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKICAgICAgICAgfQpAQCAtNzIxLDcgKzcyMSw3IEBAIHB1YmxpYzoKICAgICAgICAg
SnVtcCBub3RFcXVhbCA9IG1ha2VCcmFuY2goQVJNdjdBc3NlbWJsZXI6OkNvbmRpdGlvbk5FKTsK
ICAgICAgICAgdW5vcmRlcmVkLmxpbmsodGhpcyk7CiAgICAgICAgIC8vIFdlIGdldCBoZXJlIGlm
IGVpdGhlciB1bm9yZGVyZWQgb3IgZXF1YWwuCi0gICAgICAgIEp1bXAgcmVzdWx0ID0gbWFrZUp1
bXAoKTsKKyAgICAgICAgSnVtcCByZXN1bHQgPSBqdW1wKCk7CiAgICAgICAgIG5vdEVxdWFsLmxp
bmsodGhpcyk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQpAQCAtOTk1LDIxICs5OTUs
MTYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYnJhbmNoVGVzdDgoY29uZCwgYWRkcmVzc1Rl
bXBSZWdpc3RlciwgbWFzayk7CiAgICAgfQogCi0gICAgSnVtcCBqdW1wKCkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBKdW1wKG1ha2VKdW1wKCkpOwotICAgIH0KLQogICAgIHZvaWQganVtcChSZWdp
c3RlcklEIHRhcmdldCkKICAgICB7Ci0gICAgICAgIG1fYXNzZW1ibGVyLmJ4KHRhcmdldCwgQVJN
djdBc3NlbWJsZXI6Okp1bXBGaXhlZCk7CisgICAgICAgIG1fYXNzZW1ibGVyLmJ4KHRhcmdldCk7
CiAgICAgfQogCiAgICAgLy8gQWRkcmVzcyBpcyBhIG1lbW9yeSBsb2NhdGlvbiBjb250YWluaW5n
IHRoZSBhZGRyZXNzIHRvIGp1bXAgdG8KICAgICB2b2lkIGp1bXAoQWRkcmVzcyBhZGRyZXNzKQog
ICAgIHsKICAgICAgICAgbG9hZDMyKGFkZHJlc3MsIGRhdGFUZW1wUmVnaXN0ZXIpOwotICAgICAg
ICBtX2Fzc2VtYmxlci5ieChkYXRhVGVtcFJlZ2lzdGVyLCBBUk12N0Fzc2VtYmxlcjo6SnVtcEZp
eGVkKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuYngoZGF0YVRlbXBSZWdpc3Rlcik7CiAgICAgfQog
CiAKQEAgLTExMTEsMjkgKzExMDYsMjkgQEAgcHVibGljOgogICAgIENhbGwgbmVhckNhbGwoKQog
ICAgIHsKICAgICAgICAgbW92ZUZpeGVkV2lkdGhFbmNvZGluZyhUcnVzdGVkSW1tMzIoMCksIGRh
dGFUZW1wUmVnaXN0ZXIpOwotICAgICAgICByZXR1cm4gQ2FsbChtX2Fzc2VtYmxlci5ibHgoZGF0
YVRlbXBSZWdpc3RlciwgQVJNdjdBc3NlbWJsZXI6Okp1bXBGaXhlZCksIENhbGw6OkxpbmthYmxl
TmVhcik7CisgICAgICAgIHJldHVybiBDYWxsKG1fYXNzZW1ibGVyLmJseChkYXRhVGVtcFJlZ2lz
dGVyKSwgQ2FsbDo6TGlua2FibGVOZWFyKTsKICAgICB9CiAKICAgICBDYWxsIGNhbGwoKQogICAg
IHsKICAgICAgICAgbW92ZUZpeGVkV2lkdGhFbmNvZGluZyhUcnVzdGVkSW1tMzIoMCksIGRhdGFU
ZW1wUmVnaXN0ZXIpOwotICAgICAgICByZXR1cm4gQ2FsbChtX2Fzc2VtYmxlci5ibHgoZGF0YVRl
bXBSZWdpc3RlciwgQVJNdjdBc3NlbWJsZXI6Okp1bXBGaXhlZCksIENhbGw6OkxpbmthYmxlKTsK
KyAgICAgICAgcmV0dXJuIENhbGwobV9hc3NlbWJsZXIuYmx4KGRhdGFUZW1wUmVnaXN0ZXIpLCBD
YWxsOjpMaW5rYWJsZSk7CiAgICAgfQogCiAgICAgQ2FsbCBjYWxsKFJlZ2lzdGVySUQgdGFyZ2V0
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIENhbGwobV9hc3NlbWJsZXIuYmx4KHRhcmdldCwgQVJN
djdBc3NlbWJsZXI6Okp1bXBGaXhlZCksIENhbGw6Ok5vbmUpOworICAgICAgICByZXR1cm4gQ2Fs
bChtX2Fzc2VtYmxlci5ibHgodGFyZ2V0KSwgQ2FsbDo6Tm9uZSk7CiAgICAgfQogCiAgICAgQ2Fs
bCBjYWxsKEFkZHJlc3MgYWRkcmVzcykKICAgICB7CiAgICAgICAgIGxvYWQzMihhZGRyZXNzLCBk
YXRhVGVtcFJlZ2lzdGVyKTsKLSAgICAgICAgcmV0dXJuIENhbGwobV9hc3NlbWJsZXIuYmx4KGRh
dGFUZW1wUmVnaXN0ZXIsIEFSTXY3QXNzZW1ibGVyOjpKdW1wRml4ZWQpLCBDYWxsOjpOb25lKTsK
KyAgICAgICAgcmV0dXJuIENhbGwobV9hc3NlbWJsZXIuYmx4KGRhdGFUZW1wUmVnaXN0ZXIpLCBD
YWxsOjpOb25lKTsKICAgICB9CiAKICAgICB2b2lkIHJldCgpCiAgICAgewotICAgICAgICBtX2Fz
c2VtYmxlci5ieChsaW5rUmVnaXN0ZXIsIEFSTXY3QXNzZW1ibGVyOjpKdW1wRml4ZWQpOworICAg
ICAgICBtX2Fzc2VtYmxlci5ieChsaW5rUmVnaXN0ZXIpOwogICAgIH0KIAogICAgIHZvaWQgY29t
cGFyZTMyKFJlbGF0aW9uYWxDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBsZWZ0LCBSZWdpc3Rl
cklEIHJpZ2h0LCBSZWdpc3RlcklEIGRlc3QpCkBAIC0xMjE4LDcgKzEyMTMsNyBAQCBwdWJsaWM6
CiAgICAgewogICAgICAgICAvLyBMaWtlIGEgbm9ybWFsIGNhbGwsIGJ1dCBkb24ndCBsaW5rLgog
ICAgICAgICBtb3ZlRml4ZWRXaWR0aEVuY29kaW5nKFRydXN0ZWRJbW0zMigwKSwgZGF0YVRlbXBS
ZWdpc3Rlcik7Ci0gICAgICAgIHJldHVybiBDYWxsKG1fYXNzZW1ibGVyLmJ4KGRhdGFUZW1wUmVn
aXN0ZXIsIEFSTXY3QXNzZW1ibGVyOjpKdW1wRml4ZWQpLCBDYWxsOjpMaW5rYWJsZSk7CisgICAg
ICAgIHJldHVybiBDYWxsKG1fYXNzZW1ibGVyLmJ4KGRhdGFUZW1wUmVnaXN0ZXIpLCBDYWxsOjpM
aW5rYWJsZSk7CiAgICAgfQogCiAgICAgQ2FsbCBtYWtlVGFpbFJlY3Vyc2l2ZUNhbGwoSnVtcCBv
bGRKdW1wKQpAQCAtMTIzOSwyMSArMTIzNCwyMSBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIHJldHVy
biBtX2luVW5pbnRlcnJ1cHRlZFNlcXVlbmNlOwogICAgIH0KIAotICAgIEFSTXY3QXNzZW1ibGVy
OjpKbXBTcmMgbWFrZUp1bXAoKQorICAgIEp1bXAganVtcCgpCiAgICAgewogICAgICAgICBtb3Zl
Rml4ZWRXaWR0aEVuY29kaW5nKFRydXN0ZWRJbW0zMigwKSwgZGF0YVRlbXBSZWdpc3Rlcik7Ci0g
ICAgICAgIHJldHVybiBtX2Fzc2VtYmxlci5ieChkYXRhVGVtcFJlZ2lzdGVyLCBpblVuaW50ZXJy
dXB0ZWRTZXF1ZW5jZSgpID8gQVJNdjdBc3NlbWJsZXI6Okp1bXBOb0NvbmRpdGlvbkZpeGVkU2l6
ZSA6IEFSTXY3QXNzZW1ibGVyOjpKdW1wTm9Db25kaXRpb24pOworICAgICAgICByZXR1cm4gSnVt
cChtX2Fzc2VtYmxlci5ieChkYXRhVGVtcFJlZ2lzdGVyKSwgaW5VbmludGVycnVwdGVkU2VxdWVu
Y2UoKSA/IEFSTXY3QXNzZW1ibGVyOjpKdW1wTm9Db25kaXRpb25GaXhlZFNpemUgOiBBUk12N0Fz
c2VtYmxlcjo6SnVtcE5vQ29uZGl0aW9uKTsKICAgICB9CiAKLSAgICBBUk12N0Fzc2VtYmxlcjo6
Sm1wU3JjIG1ha2VCcmFuY2goQVJNdjdBc3NlbWJsZXI6OkNvbmRpdGlvbiBjb25kKQorICAgIEp1
bXAgbWFrZUJyYW5jaChBUk12N0Fzc2VtYmxlcjo6Q29uZGl0aW9uIGNvbmQpCiAgICAgewogICAg
ICAgICBtX2Fzc2VtYmxlci5pdChjb25kLCB0cnVlLCB0cnVlKTsKICAgICAgICAgbW92ZUZpeGVk
V2lkdGhFbmNvZGluZyhUcnVzdGVkSW1tMzIoMCksIGRhdGFUZW1wUmVnaXN0ZXIpOwotICAgICAg
ICByZXR1cm4gbV9hc3NlbWJsZXIuYngoZGF0YVRlbXBSZWdpc3RlciwgaW5VbmludGVycnVwdGVk
U2VxdWVuY2UoKSA/IEFSTXY3QXNzZW1ibGVyOjpKdW1wQ29uZGl0aW9uRml4ZWRTaXplIDogQVJN
djdBc3NlbWJsZXI6Okp1bXBDb25kaXRpb24sIGNvbmQpOworICAgICAgICByZXR1cm4gSnVtcCht
X2Fzc2VtYmxlci5ieChkYXRhVGVtcFJlZ2lzdGVyKSwgaW5VbmludGVycnVwdGVkU2VxdWVuY2Uo
KSA/IEFSTXY3QXNzZW1ibGVyOjpKdW1wQ29uZGl0aW9uRml4ZWRTaXplIDogQVJNdjdBc3NlbWJs
ZXI6Okp1bXBDb25kaXRpb24sIGNvbmQpOwogICAgIH0KLSAgICBBUk12N0Fzc2VtYmxlcjo6Sm1w
U3JjIG1ha2VCcmFuY2goUmVsYXRpb25hbENvbmRpdGlvbiBjb25kKSB7IHJldHVybiBtYWtlQnJh
bmNoKGFybVY3Q29uZGl0aW9uKGNvbmQpKTsgfQotICAgIEFSTXY3QXNzZW1ibGVyOjpKbXBTcmMg
bWFrZUJyYW5jaChSZXN1bHRDb25kaXRpb24gY29uZCkgeyByZXR1cm4gbWFrZUJyYW5jaChhcm1W
N0NvbmRpdGlvbihjb25kKSk7IH0KLSAgICBBUk12N0Fzc2VtYmxlcjo6Sm1wU3JjIG1ha2VCcmFu
Y2goRG91YmxlQ29uZGl0aW9uIGNvbmQpIHsgcmV0dXJuIG1ha2VCcmFuY2goYXJtVjdDb25kaXRp
b24oY29uZCkpOyB9CisgICAgSnVtcCBtYWtlQnJhbmNoKFJlbGF0aW9uYWxDb25kaXRpb24gY29u
ZCkgeyByZXR1cm4gbWFrZUJyYW5jaChhcm1WN0NvbmRpdGlvbihjb25kKSk7IH0KKyAgICBKdW1w
IG1ha2VCcmFuY2goUmVzdWx0Q29uZGl0aW9uIGNvbmQpIHsgcmV0dXJuIG1ha2VCcmFuY2goYXJt
VjdDb25kaXRpb24oY29uZCkpOyB9CisgICAgSnVtcCBtYWtlQnJhbmNoKERvdWJsZUNvbmRpdGlv
biBjb25kKSB7IHJldHVybiBtYWtlQnJhbmNoKGFybVY3Q29uZGl0aW9uKGNvbmQpKTsgfQogCiAg
ICAgQXJtQWRkcmVzcyBzZXR1cEFybUFkZHJlc3MoQmFzZUluZGV4IGFkZHJlc3MpCiAgICAgewpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlck1JUFMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNz
ZW1ibGVyTUlQUy5oCShyZXZpc2lvbiA4NTQwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJNSVBTLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzMjMsNyAr
MTMyMyw3IEBAIHB1YmxpYzoKICAgICAgICAgbV9hc3NlbWJsZXIubm9wKCk7CiAgICAgICAgIG1f
YXNzZW1ibGVyLmphbCgpOwogICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKLSAgICAgICAgcmV0
dXJuIENhbGwobV9hc3NlbWJsZXIubmV3Sm1wU3JjKCksIENhbGw6OkxpbmthYmxlTmVhcik7Cisg
ICAgICAgIHJldHVybiBDYWxsKG1fYXNzZW1ibGVyLmxhYmVsKCksIENhbGw6OkxpbmthYmxlTmVh
cik7CiAgICAgfQogCiAgICAgQ2FsbCBjYWxsKCkKQEAgLTEzMzIsMTQgKzEzMzIsMTQgQEAgcHVi
bGljOgogICAgICAgICBtX2Fzc2VtYmxlci5vcmkoTUlQU1JlZ2lzdGVyczo6dDksIE1JUFNSZWdp
c3RlcnM6OnQ5LCAwKTsKICAgICAgICAgbV9hc3NlbWJsZXIuamFscihNSVBTUmVnaXN0ZXJzOjp0
OSk7CiAgICAgICAgIG1fYXNzZW1ibGVyLm5vcCgpOwotICAgICAgICByZXR1cm4gQ2FsbChtX2Fz
c2VtYmxlci5uZXdKbXBTcmMoKSwgQ2FsbDo6TGlua2FibGUpOworICAgICAgICByZXR1cm4gQ2Fs
bChtX2Fzc2VtYmxlci5sYWJlbCgpLCBDYWxsOjpMaW5rYWJsZSk7CiAgICAgfQogCiAgICAgQ2Fs
bCBjYWxsKFJlZ2lzdGVySUQgdGFyZ2V0KQogICAgIHsKICAgICAgICAgbV9hc3NlbWJsZXIuamFs
cih0YXJnZXQpOwogICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsKLSAgICAgICAgcmV0dXJuIENh
bGwobV9hc3NlbWJsZXIubmV3Sm1wU3JjKCksIENhbGw6Ok5vbmUpOworICAgICAgICByZXR1cm4g
Q2FsbChtX2Fzc2VtYmxlci5sYWJlbCgpLCBDYWxsOjpOb25lKTsKICAgICB9CiAKICAgICBDYWxs
IGNhbGwoQWRkcmVzcyBhZGRyZXNzKQpAQCAtMTM0OSw3ICsxMzQ5LDcgQEAgcHVibGljOgogICAg
ICAgICBtX2Fzc2VtYmxlci5qYWxyKE1JUFNSZWdpc3RlcnM6OnQ5KTsKICAgICAgICAgbV9hc3Nl
bWJsZXIubm9wKCk7CiAgICAgICAgIG1fZml4ZWRXaWR0aCA9IGZhbHNlOwotICAgICAgICByZXR1
cm4gQ2FsbChtX2Fzc2VtYmxlci5uZXdKbXBTcmMoKSwgQ2FsbDo6Tm9uZSk7CisgICAgICAgIHJl
dHVybiBDYWxsKG1fYXNzZW1ibGVyLmxhYmVsKCksIENhbGw6Ok5vbmUpOwogICAgIH0KIAogICAg
IHZvaWQgcmV0KCkKQEAgLTE1MTQsNyArMTUxNCw3IEBAIHB1YmxpYzoKICAgICAgICAgbV9hc3Nl
bWJsZXIuanIoTUlQU1JlZ2lzdGVyczo6dDkpOwogICAgICAgICBtX2Fzc2VtYmxlci5ub3AoKTsK
ICAgICAgICAgbV9maXhlZFdpZHRoID0gZmFsc2U7Ci0gICAgICAgIHJldHVybiBDYWxsKG1fYXNz
ZW1ibGVyLm5ld0ptcFNyYygpLCBDYWxsOjpMaW5rYWJsZSk7CisgICAgICAgIHJldHVybiBDYWxs
KG1fYXNzZW1ibGVyLmxhYmVsKCksIENhbGw6OkxpbmthYmxlKTsKICAgICB9CiAKICAgICBDYWxs
IG1ha2VUYWlsUmVjdXJzaXZlQ2FsbChKdW1wIG9sZEp1bXApCkBAIC0xNjc4LDcgKzE2NzgsNyBA
QCBwdWJsaWM6CiAgICAgICAgIG1fYXNzZW1ibGVyLmJjMXQoKTsKICAgICAgICAgbV9hc3NlbWJs
ZXIubm9wKCk7CiAgICAgICAgIGluc2VydFJlbGF4YXRpb25Xb3JkcygpOwotICAgICAgICByZXR1
cm4gSnVtcChtX2Fzc2VtYmxlci5uZXdKbXBTcmMoKSk7CisgICAgICAgIHJldHVybiBKdW1wKG1f
YXNzZW1ibGVyLmxhYmVsKCkpOwogICAgIH0KIAogICAgIEp1bXAgYnJhbmNoRmFsc2UoKQpAQCAt
MTY4Nyw3ICsxNjg3LDcgQEAgcHVibGljOgogICAgICAgICBtX2Fzc2VtYmxlci5iYzFmKCk7CiAg
ICAgICAgIG1fYXNzZW1ibGVyLm5vcCgpOwogICAgICAgICBpbnNlcnRSZWxheGF0aW9uV29yZHMo
KTsKLSAgICAgICAgcmV0dXJuIEp1bXAobV9hc3NlbWJsZXIubmV3Sm1wU3JjKCkpOworICAgICAg
ICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5sYWJlbCgpKTsKICAgICB9CiAKICAgICBKdW1wIGJy
YW5jaEVxdWFsKFJlZ2lzdGVySUQgcnMsIFJlZ2lzdGVySUQgcnQpCkBAIC0xNjk2LDcgKzE2OTYs
NyBAQCBwdWJsaWM6CiAgICAgICAgIG1fYXNzZW1ibGVyLmJlcShycywgcnQsIDApOwogICAgICAg
ICBtX2Fzc2VtYmxlci5ub3AoKTsKICAgICAgICAgaW5zZXJ0UmVsYXhhdGlvbldvcmRzKCk7Ci0g
ICAgICAgIHJldHVybiBKdW1wKG1fYXNzZW1ibGVyLm5ld0ptcFNyYygpKTsKKyAgICAgICAgcmV0
dXJuIEp1bXAobV9hc3NlbWJsZXIubGFiZWwoKSk7CiAgICAgfQogCiAgICAgSnVtcCBicmFuY2hO
b3RFcXVhbChSZWdpc3RlcklEIHJzLCBSZWdpc3RlcklEIHJ0KQpAQCAtMTcwNSw3ICsxNzA1LDcg
QEAgcHVibGljOgogICAgICAgICBtX2Fzc2VtYmxlci5ibmUocnMsIHJ0LCAwKTsKICAgICAgICAg
bV9hc3NlbWJsZXIubm9wKCk7CiAgICAgICAgIGluc2VydFJlbGF4YXRpb25Xb3JkcygpOwotICAg
ICAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5uZXdKbXBTcmMoKSk7CisgICAgICAgIHJldHVy
biBKdW1wKG1fYXNzZW1ibGVyLmxhYmVsKCkpOwogICAgIH0KIAogICAgIEp1bXAgYnJhbmNoRG91
YmxlKERvdWJsZUNvbmRpdGlvbiBjb25kLCBGUFJlZ2lzdGVySUQgbGVmdCwgRlBSZWdpc3RlcklE
IHJpZ2h0KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9TSDRBc3NlbWJs
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1NINEFz
c2VtYmxlci5oCShyZXZpc2lvbiA4NTQwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvU0g0QXNzZW1ibGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1MSw0OCArMzUxLDYgQEAg
cHVibGljOgogCiAgICAgLy8gT3BhcXVlIGxhYmVsIHR5cGVzCiBwdWJsaWM6Ci0gICAgY2xhc3Mg
Sm1wU3JjIHsKLSAgICAgICAgZnJpZW5kIGNsYXNzIFNINEFzc2VtYmxlcjsKLSAgICBwdWJsaWM6
Ci0gICAgICAgIEptcFNyYygpCi0gICAgICAgICAgICA6IG1fb2Zmc2V0KC0xKQotICAgICAgICB7
Ci0gICAgICAgIH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAgIEptcFNyYyhpbnQgb2Zmc2V0KQot
ICAgICAgICAgICAgOiBtX29mZnNldChvZmZzZXQpCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0g
ICAgICAgIGludCBtX29mZnNldDsKLSAgICB9OwotCi0gICAgY2xhc3MgSm1wRHN0IHsKLSAgICAg
ICAgZnJpZW5kIGNsYXNzIFNINEFzc2VtYmxlcjsKLSAgICBwdWJsaWM6Ci0gICAgICAgIEptcERz
dCgpCi0gICAgICAgICAgICA6IG1fb2Zmc2V0KC0xKQotICAgICAgICAgICAgLCBtX3VzZWQoZmFs
c2UpCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgICAgIGJvb2wgaXNVc2VkKCkgY29uc3Qg
eyByZXR1cm4gbV91c2VkOyB9Ci0gICAgICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7IHJldHVybiAo
bV9vZmZzZXQgIT0gLTEpOyB9Ci0gICAgICAgIHZvaWQgdXNlZCgpIHsgbV91c2VkID0gdHJ1ZTsg
fQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgSm1wRHN0KGludCBvZmZzZXQpCi0gICAgICAgICAg
ICA6IG1fb2Zmc2V0KG9mZnNldCkKLSAgICAgICAgICAgICwgbV91c2VkKGZhbHNlKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBBU1NFUlQobV9vZmZzZXQgPT0gb2Zmc2V0KTsKLSAgICAgICAgfQot
Ci0gICAgICAgIGludCBtX29mZnNldCA6IDMxOwotICAgICAgICBpbnQgbV91c2VkIDogMTsKLSAg
ICB9OwotCiAgICAgYm9vbCBpc0ltbWVkaWF0ZShpbnQgY29uc3RhbnQpCiAgICAgewogICAgICAg
ICByZXR1cm4gKChjb25zdGFudCA8PSAxMjcpICYmIChjb25zdGFudCA+PSAtMTI4KSk7CkBAIC0x
MTg0LDcgKzExNDIsNyBAQCBwdWJsaWM6CiAKICAgICAvLyBGbG93IGNvbnRyb2wKIAotICAgIEpt
cFNyYyBjYWxsKCkKKyAgICBBc3NlbWJsZXJMYWJlbCBjYWxsKCkKICAgICB7CiAgICAgICAgIFJl
Z2lzdGVySUQgc2NyID0gY2xhaW1TY3JhdGNoKCk7CiAgICAgICAgIG1fYnVmZmVyLmVuc3VyZVNw
YWNlKG1heEluc3RydWN0aW9uU2l6ZSArIDQsIHNpemVvZih1aW50MzJfdCkpOwpAQCAtMTE5Miwx
OCArMTE1MCwxOCBAQCBwdWJsaWM6CiAgICAgICAgIGJyYW5jaChKU1JfT1BDT0RFLCBzY3IpOwog
ICAgICAgICBub3AoKTsKICAgICAgICAgcmVsZWFzZVNjcmF0Y2goc2NyKTsKLSAgICAgICAgcmV0
dXJuIEptcFNyYyhtX2J1ZmZlci5sYWJlbCgpKTsKKyAgICAgICAgcmV0dXJuIEFzc2VtYmxlckxh
YmVsKG1fYnVmZmVyLmxhYmVsKCkpOwogICAgIH0KIAotICAgIEptcFNyYyBjYWxsKFJlZ2lzdGVy
SUQgZHN0KQorICAgIEFzc2VtYmxlckxhYmVsIGNhbGwoUmVnaXN0ZXJJRCBkc3QpCiAgICAgewog
ICAgICAgICBtX2J1ZmZlci5lbnN1cmVTcGFjZShtYXhJbnN0cnVjdGlvblNpemUgKyAyKTsKICAg
ICAgICAgYnJhbmNoKEpTUl9PUENPREUsIGRzdCk7CiAgICAgICAgIG5vcCgpOwotICAgICAgICBy
ZXR1cm4gSm1wU3JjKG1fYnVmZmVyLmxhYmVsKCkpOworICAgICAgICByZXR1cm4gQXNzZW1ibGVy
TGFiZWwobV9idWZmZXIubGFiZWwoKSk7CiAgICAgfQogCi0gICAgSm1wU3JjIGptcCgpCisgICAg
QXNzZW1ibGVyTGFiZWwgam1wKCkKICAgICB7CiAgICAgICAgIFJlZ2lzdGVySUQgc2NyID0gY2xh
aW1TY3JhdGNoKCk7CiAgICAgICAgIG1fYnVmZmVyLmVuc3VyZVNwYWNlKG1heEluc3RydWN0aW9u
U2l6ZSArIDQsIHNpemVvZih1aW50MzJfdCkpOwpAQCAtMTIxMiwxMyArMTE3MCwxMyBAQCBwdWJs
aWM6CiAgICAgICAgIGJyYW5jaChCUkFGX09QQ09ERSwgc2NyKTsKICAgICAgICAgbm9wKCk7CiAg
ICAgICAgIHJlbGVhc2VTY3JhdGNoKHNjcik7Ci0gICAgICAgIHJldHVybiBKbXBTcmMobV9zaXpl
KTsKKyAgICAgICAgcmV0dXJuIEFzc2VtYmxlckxhYmVsKG1fc2l6ZSk7CiAgICAgfQogCi0gICAg
Sm1wU3JjIGptcChSZWdpc3RlcklEIGRzdCkKKyAgICBBc3NlbWJsZXJMYWJlbCBqbXAoUmVnaXN0
ZXJJRCBkc3QpCiAgICAgewogICAgICAgICBqbXBSZWcoZHN0KTsKLSAgICAgICAgcmV0dXJuIEpt
cFNyYyhtX2J1ZmZlci5sYWJlbCgpKTsKKyAgICAgICAgcmV0dXJuIEFzc2VtYmxlckxhYmVsKG1f
YnVmZmVyLmxhYmVsKCkpOwogICAgIH0KIAogICAgIHZvaWQgam1wUmVnKFJlZ2lzdGVySUQgZHN0
KQpAQCAtMTIyOCwxOCArMTE4NiwxOCBAQCBwdWJsaWM6CiAgICAgICAgIG5vcCgpOwogICAgIH0K
IAotICAgIEptcFNyYyBqbmUoKQorICAgIEFzc2VtYmxlckxhYmVsIGpuZSgpCiAgICAgewogICAg
ICAgICBpbnQgbV9zaXplID0gbV9idWZmZXIubGFiZWwoKTsKICAgICAgICAgYnJhbmNoKEJGX09Q
Q09ERSwgMCk7Ci0gICAgICAgIHJldHVybiBKbXBTcmMobV9zaXplKTsKKyAgICAgICAgcmV0dXJu
IEFzc2VtYmxlckxhYmVsKG1fc2l6ZSk7CiAgICAgfQogCi0gICAgSm1wU3JjIGplKCkKKyAgICBB
c3NlbWJsZXJMYWJlbCBqZSgpCiAgICAgewogICAgICAgICBpbnQgbV9zaXplID0gbV9idWZmZXIu
bGFiZWwoKTsKICAgICAgICAgYnJhbmNoKEJUX09QQ09ERSwgMCk7Ci0gICAgICAgIHJldHVybiBK
bXBTcmMobV9zaXplKTsKKyAgICAgICAgcmV0dXJuIEFzc2VtYmxlckxhYmVsKG1fc2l6ZSk7CiAg
ICAgfQogCiAgICAgdm9pZCByZXQoKQpAQCAtMTI0OCwxMCArMTIwNiwxMCBAQCBwdWJsaWM6CiAg
ICAgICAgIG9uZVNob3J0T3AoUlRTX09QQ09ERSwgZmFsc2UpOwogICAgIH0KIAotICAgIEptcERz
dCBsYWJlbCgpCisgICAgQXNzZW1ibGVyTGFiZWwgbGFiZWwoKQogICAgIHsKICAgICAgICAgbV9i
dWZmZXIuZW5zdXJlU3BhY2VGb3JBbnlPbmVJbnN0cnVjdGlvbigpOwotICAgICAgICByZXR1cm4g
Sm1wRHN0KG1fYnVmZmVyLmxhYmVsKCkpOworICAgICAgICByZXR1cm4gQXNzZW1ibGVyTGFiZWwo
bV9idWZmZXIubGFiZWwoKSk7CiAgICAgfQogCiAgICAgaW50IHNpemVPZkNvbnN0YW50UG9vbCgp
CkBAIC0xMjU5LDcgKzEyMTcsNyBAQCBwdWJsaWM6CiAgICAgICAgICByZXR1cm4gbV9idWZmZXIu
c2l6ZU9mQ29uc3RhbnRQb29sKCk7CiAgICAgfQogCi0gICAgSm1wRHN0IGFsaWduKGludCBhbGln
bm1lbnQpCisgICAgQXNzZW1ibGVyTGFiZWwgYWxpZ24oaW50IGFsaWdubWVudCkKICAgICB7CiAg
ICAgICAgIG1fYnVmZmVyLmVuc3VyZVNwYWNlKG1heEluc3RydWN0aW9uU2l6ZSArIDIpOwogICAg
ICAgICB3aGlsZSAoIW1fYnVmZmVyLmlzQWxpZ25lZChhbGlnbm1lbnQpKSB7CkBAIC0xMjgwLDkg
KzEyMzgsOSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PHVpbnQx
Nl90Kj4gKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3Q+KGNvZGUpICsgb2Zmc2V0KTsKICAgICB9
CiAKLSAgICBzdGF0aWMgdm9pZCBsaW5rSnVtcCh2b2lkKiBjb2RlLCBKbXBTcmMgZnJvbSwgdm9p
ZCogdG8pCisgICAgc3RhdGljIHZvaWQgbGlua0p1bXAodm9pZCogY29kZSwgQXNzZW1ibGVyTGFi
ZWwgZnJvbSwgdm9pZCogdG8pCiAgICAgewotICAgICAgICBBU1NFUlQoZnJvbS5tX29mZnNldCAh
PSAtMSk7CisgICAgICAgIEFTU0VSVChmcm9tLmlzU2V0KCkpOwogCiAgICAgICAgIHVpbnQxNl90
KiBpbnN0cnVjdGlvblB0ciA9IGdldEluc3RydWN0aW9uUHRyKGNvZGUsIGZyb20ubV9vZmZzZXQp
OwogICAgICAgICB1aW50MTZfdCBpbnN0cnVjdGlvbiA9ICppbnN0cnVjdGlvblB0cjsKQEAgLTEz
MjIsMjIgKzEyODAsMjIgQEAgcHVibGljOgogICAgICAgICBwcmludEluc3RyKCppbnN0cnVjdGlv
blB0ciwgZnJvbS5tX29mZnNldCArIDIpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGxpbmtD
YWxsKHZvaWQqIGNvZGUsIEptcFNyYyBmcm9tLCB2b2lkKiB0bykKKyAgICBzdGF0aWMgdm9pZCBs
aW5rQ2FsbCh2b2lkKiBjb2RlLCBBc3NlbWJsZXJMYWJlbCBmcm9tLCB2b2lkKiB0bykKICAgICB7
CiAgICAgICAgIHVpbnQxNl90KiBpbnN0cnVjdGlvblB0ciA9IGdldEluc3RydWN0aW9uUHRyKGNv
ZGUsIGZyb20ubV9vZmZzZXQpOwogICAgICAgICBpbnN0cnVjdGlvblB0ciAtPSAzOwogICAgICAg
ICBjaGFuZ2VQQ3JlbGF0aXZlQWRkcmVzcygoKmluc3RydWN0aW9uUHRyICYgMHhmZiksIGluc3Ry
dWN0aW9uUHRyLCByZWludGVycHJldF9jYXN0PHVpbnQzMl90Pih0bykpOwogICAgIH0KIAotICAg
IHN0YXRpYyB2b2lkIGxpbmtQb2ludGVyKHZvaWQqIGNvZGUsIEptcERzdCB3aGVyZSwgdm9pZCog
dmFsdWUpCisgICAgc3RhdGljIHZvaWQgbGlua1BvaW50ZXIodm9pZCogY29kZSwgQXNzZW1ibGVy
TGFiZWwgd2hlcmUsIHZvaWQqIHZhbHVlKQogICAgIHsKICAgICAgICAgdWludDE2X3QqIGluc3Ry
dWN0aW9uUHRyID0gZ2V0SW5zdHJ1Y3Rpb25QdHIoY29kZSwgd2hlcmUubV9vZmZzZXQpOwogICAg
ICAgICBjaGFuZ2VQQ3JlbGF0aXZlQWRkcmVzcygoKmluc3RydWN0aW9uUHRyICYgMHhmZiksIGlu
c3RydWN0aW9uUHRyLCByZWludGVycHJldF9jYXN0PHVpbnQzMl90Pih2YWx1ZSkpOwogICAgIH0K
IAotICAgIHN0YXRpYyB1bnNpZ25lZCBnZXRDYWxsUmV0dXJuT2Zmc2V0KEptcFNyYyBjYWxsKQor
ICAgIHN0YXRpYyB1bnNpZ25lZCBnZXRDYWxsUmV0dXJuT2Zmc2V0KEFzc2VtYmxlckxhYmVsIGNh
bGwpCiAgICAgewotICAgICAgICBBU1NFUlQoY2FsbC5tX29mZnNldCA+PSAwKTsKKyAgICAgICAg
QVNTRVJUKGNhbGwuaXNTZXQoKSk7CiAgICAgICAgIHJldHVybiBjYWxsLm1fb2Zmc2V0OwogICAg
IH0KIApAQCAtMTQzMiwxMCArMTM5MCwxMCBAQCBwdWJsaWM6CiAKICAgICAvLyBMaW5raW5nICYg
cGF0Y2hpbmcKIAotICAgIHZvaWQgbGlua0p1bXAoSm1wU3JjIGZyb20sIEptcERzdCB0bykKKyAg
ICB2b2lkIGxpbmtKdW1wKEFzc2VtYmxlckxhYmVsIGZyb20sIEFzc2VtYmxlckxhYmVsIHRvKQog
ICAgIHsKLSAgICAgICAgQVNTRVJUKHRvLm1fb2Zmc2V0ICE9IC0xKTsKLSAgICAgICAgQVNTRVJU
KGZyb20ubV9vZmZzZXQgIT0gLTEpOworICAgICAgICBBU1NFUlQodG8uaXNTZXQoKSk7CisgICAg
ICAgIEFTU0VSVChmcm9tLmlzU2V0KCkpOwogCiAgICAgICAgIHVpbnQxNl90KiBpbnN0cnVjdGlv
blB0ciA9IGdldEluc3RydWN0aW9uUHRyKGRhdGEoKSwgZnJvbS5tX29mZnNldCk7CiAgICAgICAg
IHVpbnQxNl90IGluc3RydWN0aW9uID0gKmluc3RydWN0aW9uUHRyOwpAQCAtMTQ4NiwzMyArMTQ0
NCwxNyBAQCBwdWJsaWM6CiAgICAgICAgIHByaW50SW5zdHIoKmluc3RydWN0aW9uUHRyLCBmcm9t
Lm1fb2Zmc2V0ICsgMik7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQqIGdldFJlbG9jYXRlZEFk
ZHJlc3Modm9pZCogY29kZSwgSm1wU3JjIGp1bXApCi0gICAgewotICAgICAgICByZXR1cm4gcmVp
bnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdD4oY29kZSkgKyBq
dW1wLm1fb2Zmc2V0KTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgdm9pZCogZ2V0UmVsb2NhdGVkQWRk
cmVzcyh2b2lkKiBjb2RlLCBKbXBEc3QgZGVzdGluYXRpb24pCi0gICAgewotICAgICAgICBBU1NF
UlQoZGVzdGluYXRpb24ubV9vZmZzZXQgIT0gLTEpOwotICAgICAgICByZXR1cm4gcmVpbnRlcnBy
ZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdD4oY29kZSkgKyBkZXN0aW5h
dGlvbi5tX29mZnNldCk7Ci0gICAgfQotCi0gICAgc3RhdGljIGludCBnZXREaWZmZXJlbmNlQmV0
d2VlbkxhYmVscyhKbXBEc3Qgc3JjLCBKbXBEc3QgZHN0KQotICAgIHsKLSAgICAgICAgcmV0dXJu
IGRzdC5tX29mZnNldCAtIHNyYy5tX29mZnNldDsKLSAgICB9Ci0KLSAgICBzdGF0aWMgaW50IGdl
dERpZmZlcmVuY2VCZXR3ZWVuTGFiZWxzKEptcERzdCBzcmMsIEptcFNyYyBkc3QpCisgICAgc3Rh
dGljIHZvaWQqIGdldFJlbG9jYXRlZEFkZHJlc3Modm9pZCogY29kZSwgQXNzZW1ibGVyTGFiZWwg
bGFiZWwpCiAgICAgewotICAgICAgICByZXR1cm4gZHN0Lm1fb2Zmc2V0IC0gc3JjLm1fb2Zmc2V0
OworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2Fz
dDxjaGFyKj4oY29kZSkgKyBsYWJlbC5tX29mZnNldCk7CiAgICAgfQogCi0gICAgc3RhdGljIGlu
dCBnZXREaWZmZXJlbmNlQmV0d2VlbkxhYmVscyhKbXBTcmMgc3JjLCBKbXBEc3QgZHN0KQorICAg
IHN0YXRpYyBpbnQgZ2V0RGlmZmVyZW5jZUJldHdlZW5MYWJlbHMoQXNzZW1ibGVyTGFiZWwgYSwg
QXNzZW1ibGVyTGFiZWwgYikKICAgICB7Ci0gICAgICAgIHJldHVybiBkc3QubV9vZmZzZXQgLSBz
cmMubV9vZmZzZXQ7CisgICAgICAgIHJldHVybiBiLm1fb2Zmc2V0IC0gYS5tX29mZnNldDsKICAg
ICB9CiAKLSAgICBzdGF0aWMgdm9pZCBwYXRjaFBvaW50ZXIodm9pZCogY29kZSwgSm1wRHN0IHdo
ZXJlLCB2b2lkKiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBwYXRjaFBvaW50ZXIodm9pZCogY29k
ZSwgQXNzZW1ibGVyTGFiZWwgd2hlcmUsIHZvaWQqIHZhbHVlKQogICAgIHsKICAgICAgICAgcGF0
Y2hQb2ludGVyKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihjb2RlKSArIHdoZXJlLm1fb2Zm
c2V0LCB2YWx1ZSk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9YODZBc3NlbWJsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL1g4NkFzc2VtYmxlci5oCShyZXZpc2lvbiA4NTQwMykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTIyMCw1
MSArMjIwLDYgQEAgcHJpdmF0ZToKICAgICBjbGFzcyBYODZJbnN0cnVjdGlvbkZvcm1hdHRlcjsK
IHB1YmxpYzoKIAotICAgIGNsYXNzIEptcFNyYyB7Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBYODZB
c3NlbWJsZXI7Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBYODZJbnN0cnVjdGlvbkZvcm1hdHRlcjsK
LSAgICBwdWJsaWM6Ci0gICAgICAgIEptcFNyYygpCi0gICAgICAgICAgICA6IG1fb2Zmc2V0KC0x
KQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICBib29sIGlzU2V0KCkgY29uc3QgeyBy
ZXR1cm4gKG1fb2Zmc2V0ICE9IC0xKTsgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgSm1wU3Jj
KGludCBvZmZzZXQpCi0gICAgICAgICAgICA6IG1fb2Zmc2V0KG9mZnNldCkKLSAgICAgICAgewot
ICAgICAgICB9Ci0KLSAgICAgICAgaW50IG1fb2Zmc2V0OwotICAgIH07Ci0gICAgCi0gICAgY2xh
c3MgSm1wRHN0IHsKLSAgICAgICAgZnJpZW5kIGNsYXNzIFg4NkFzc2VtYmxlcjsKLSAgICAgICAg
ZnJpZW5kIGNsYXNzIFg4Nkluc3RydWN0aW9uRm9ybWF0dGVyOwotICAgIHB1YmxpYzoKLSAgICAg
ICAgSm1wRHN0KCkKLSAgICAgICAgICAgIDogbV9vZmZzZXQoLTEpCi0gICAgICAgICAgICAsIG1f
dXNlZChmYWxzZSkKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAgYm9vbCBpc1VzZWQo
KSBjb25zdCB7IHJldHVybiBtX3VzZWQ7IH0KLSAgICAgICAgYm9vbCBpc1NldCgpIGNvbnN0IHsg
cmV0dXJuIChtX29mZnNldCAhPSAtMSk7IH0KLSAgICAgICAgdm9pZCB1c2VkKCkgeyBtX3VzZWQg
PSB0cnVlOyB9Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgSm1wRHN0KGludCBvZmZzZXQpCi0gICAg
ICAgICAgICA6IG1fb2Zmc2V0KG9mZnNldCkKLSAgICAgICAgICAgICwgbV91c2VkKGZhbHNlKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQobV9vZmZzZXQgPT0gb2Zmc2V0KTsKLSAgICAg
ICAgfQotCi0gICAgICAgIGludCBtX29mZnNldCA6IDMxOwotICAgICAgICBib29sIG1fdXNlZCA6
IDE7Ci0gICAgfTsKLQogICAgIFg4NkFzc2VtYmxlcigpCiAgICAgewogICAgIH0KQEAgLTEyMTMs
MTYgKzExNjgsMTYgQEAgcHVibGljOgogCiAgICAgLy8gRmxvdyBjb250cm9sOgogCi0gICAgSm1w
U3JjIGNhbGwoKQorICAgIEFzc2VtYmxlckxhYmVsIGNhbGwoKQogICAgIHsKICAgICAgICAgbV9m
b3JtYXR0ZXIub25lQnl0ZU9wKE9QX0NBTExfcmVsMzIpOwogICAgICAgICByZXR1cm4gbV9mb3Jt
YXR0ZXIuaW1tZWRpYXRlUmVsMzIoKTsKICAgICB9CiAgICAgCi0gICAgSm1wU3JjIGNhbGwoUmVn
aXN0ZXJJRCBkc3QpCisgICAgQXNzZW1ibGVyTGFiZWwgY2FsbChSZWdpc3RlcklEIGRzdCkKICAg
ICB7CiAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9HUk9VUDVfRXYsIEdST1VQNV9P
UF9DQUxMTiwgZHN0KTsKLSAgICAgICAgcmV0dXJuIEptcFNyYyhtX2Zvcm1hdHRlci5sYWJlbCgp
KTsKKyAgICAgICAgcmV0dXJuIEFzc2VtYmxlckxhYmVsKG1fZm9ybWF0dGVyLmxhYmVsKCkpOwog
ICAgIH0KICAgICAKICAgICB2b2lkIGNhbGxfbShpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGJhc2Up
CkBAIC0xMjMwLDE5ICsxMTg1LDE5IEBAIHB1YmxpYzoKICAgICAgICAgbV9mb3JtYXR0ZXIub25l
Qnl0ZU9wKE9QX0dST1VQNV9FdiwgR1JPVVA1X09QX0NBTExOLCBiYXNlLCBvZmZzZXQpOwogICAg
IH0KIAotICAgIEptcFNyYyBqbXAoKQorICAgIEFzc2VtYmxlckxhYmVsIGptcCgpCiAgICAgewog
ICAgICAgICBtX2Zvcm1hdHRlci5vbmVCeXRlT3AoT1BfSk1QX3JlbDMyKTsKICAgICAgICAgcmV0
dXJuIG1fZm9ybWF0dGVyLmltbWVkaWF0ZVJlbDMyKCk7CiAgICAgfQogICAgIAotICAgIC8vIFJl
dHVybiBhIEptcFNyYyBzbyB3ZSBoYXZlIGEgbGFiZWwgdG8gdGhlIGp1bXAsIHNvIHdlIGNhbiB1
c2UgdGhpcworICAgIC8vIFJldHVybiBhIEFzc2VtYmxlckxhYmVsIHNvIHdlIGhhdmUgYSBsYWJl
bCB0byB0aGUganVtcCwgc28gd2UgY2FuIHVzZSB0aGlzCiAgICAgLy8gVG8gbWFrZSBhIHRhaWwg
cmVjdXJzaXZlIGNhbGwgb24geDg2LTY0LiAgVGhlIE1hY3JvQXNzZW1ibGVyCiAgICAgLy8gcmVh
bGx5IHNob3VsZG4ndCB3cmFwIHRoaXMgYXMgYSBKdW1wLCBzaW5jZSBpdCBjYW4ndCBiZSBsaW5r
ZWQuIDotLwotICAgIEptcFNyYyBqbXBfcihSZWdpc3RlcklEIGRzdCkKKyAgICBBc3NlbWJsZXJM
YWJlbCBqbXBfcihSZWdpc3RlcklEIGRzdCkKICAgICB7CiAgICAgICAgIG1fZm9ybWF0dGVyLm9u
ZUJ5dGVPcChPUF9HUk9VUDVfRXYsIEdST1VQNV9PUF9KTVBOLCBkc3QpOwotICAgICAgICByZXR1
cm4gSm1wU3JjKG1fZm9ybWF0dGVyLmxhYmVsKCkpOworICAgICAgICByZXR1cm4gQXNzZW1ibGVy
TGFiZWwobV9mb3JtYXR0ZXIubGFiZWwoKSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgam1wX20o
aW50IG9mZnNldCwgUmVnaXN0ZXJJRCBiYXNlKQpAQCAtMTI1MCw5NSArMTIwNSw5NSBAQCBwdWJs
aWM6CiAgICAgICAgIG1fZm9ybWF0dGVyLm9uZUJ5dGVPcChPUF9HUk9VUDVfRXYsIEdST1VQNV9P
UF9KTVBOLCBiYXNlLCBvZmZzZXQpOwogICAgIH0KIAotICAgIEptcFNyYyBqbmUoKQorICAgIEFz
c2VtYmxlckxhYmVsIGpuZSgpCiAgICAgewogICAgICAgICBtX2Zvcm1hdHRlci50d29CeXRlT3Ao
amNjUmVsMzIoQ29uZGl0aW9uTkUpKTsKICAgICAgICAgcmV0dXJuIG1fZm9ybWF0dGVyLmltbWVk
aWF0ZVJlbDMyKCk7CiAgICAgfQogICAgIAotICAgIEptcFNyYyBqbnooKQorICAgIEFzc2VtYmxl
ckxhYmVsIGpueigpCiAgICAgewogICAgICAgICByZXR1cm4gam5lKCk7CiAgICAgfQogCi0gICAg
Sm1wU3JjIGplKCkKKyAgICBBc3NlbWJsZXJMYWJlbCBqZSgpCiAgICAgewogICAgICAgICBtX2Zv
cm1hdHRlci50d29CeXRlT3AoamNjUmVsMzIoQ29uZGl0aW9uRSkpOwogICAgICAgICByZXR1cm4g
bV9mb3JtYXR0ZXIuaW1tZWRpYXRlUmVsMzIoKTsKICAgICB9CiAgICAgCi0gICAgSm1wU3JjIGp6
KCkKKyAgICBBc3NlbWJsZXJMYWJlbCBqeigpCiAgICAgewogICAgICAgICByZXR1cm4gamUoKTsK
ICAgICB9CiAKLSAgICBKbXBTcmMgamwoKQorICAgIEFzc2VtYmxlckxhYmVsIGpsKCkKICAgICB7
CiAgICAgICAgIG1fZm9ybWF0dGVyLnR3b0J5dGVPcChqY2NSZWwzMihDb25kaXRpb25MKSk7CiAg
ICAgICAgIHJldHVybiBtX2Zvcm1hdHRlci5pbW1lZGlhdGVSZWwzMigpOwogICAgIH0KICAgICAK
LSAgICBKbXBTcmMgamIoKQorICAgIEFzc2VtYmxlckxhYmVsIGpiKCkKICAgICB7CiAgICAgICAg
IG1fZm9ybWF0dGVyLnR3b0J5dGVPcChqY2NSZWwzMihDb25kaXRpb25CKSk7CiAgICAgICAgIHJl
dHVybiBtX2Zvcm1hdHRlci5pbW1lZGlhdGVSZWwzMigpOwogICAgIH0KICAgICAKLSAgICBKbXBT
cmMgamxlKCkKKyAgICBBc3NlbWJsZXJMYWJlbCBqbGUoKQogICAgIHsKICAgICAgICAgbV9mb3Jt
YXR0ZXIudHdvQnl0ZU9wKGpjY1JlbDMyKENvbmRpdGlvbkxFKSk7CiAgICAgICAgIHJldHVybiBt
X2Zvcm1hdHRlci5pbW1lZGlhdGVSZWwzMigpOwogICAgIH0KICAgICAKLSAgICBKbXBTcmMgamJl
KCkKKyAgICBBc3NlbWJsZXJMYWJlbCBqYmUoKQogICAgIHsKICAgICAgICAgbV9mb3JtYXR0ZXIu
dHdvQnl0ZU9wKGpjY1JlbDMyKENvbmRpdGlvbkJFKSk7CiAgICAgICAgIHJldHVybiBtX2Zvcm1h
dHRlci5pbW1lZGlhdGVSZWwzMigpOwogICAgIH0KICAgICAKLSAgICBKbXBTcmMgamdlKCkKKyAg
ICBBc3NlbWJsZXJMYWJlbCBqZ2UoKQogICAgIHsKICAgICAgICAgbV9mb3JtYXR0ZXIudHdvQnl0
ZU9wKGpjY1JlbDMyKENvbmRpdGlvbkdFKSk7CiAgICAgICAgIHJldHVybiBtX2Zvcm1hdHRlci5p
bW1lZGlhdGVSZWwzMigpOwogICAgIH0KIAotICAgIEptcFNyYyBqZygpCisgICAgQXNzZW1ibGVy
TGFiZWwgamcoKQogICAgIHsKICAgICAgICAgbV9mb3JtYXR0ZXIudHdvQnl0ZU9wKGpjY1JlbDMy
KENvbmRpdGlvbkcpKTsKICAgICAgICAgcmV0dXJuIG1fZm9ybWF0dGVyLmltbWVkaWF0ZVJlbDMy
KCk7CiAgICAgfQogCi0gICAgSm1wU3JjIGphKCkKKyAgICBBc3NlbWJsZXJMYWJlbCBqYSgpCiAg
ICAgewogICAgICAgICBtX2Zvcm1hdHRlci50d29CeXRlT3AoamNjUmVsMzIoQ29uZGl0aW9uQSkp
OwogICAgICAgICByZXR1cm4gbV9mb3JtYXR0ZXIuaW1tZWRpYXRlUmVsMzIoKTsKICAgICB9CiAg
ICAgCi0gICAgSm1wU3JjIGphZSgpCisgICAgQXNzZW1ibGVyTGFiZWwgamFlKCkKICAgICB7CiAg
ICAgICAgIG1fZm9ybWF0dGVyLnR3b0J5dGVPcChqY2NSZWwzMihDb25kaXRpb25BRSkpOwogICAg
ICAgICByZXR1cm4gbV9mb3JtYXR0ZXIuaW1tZWRpYXRlUmVsMzIoKTsKICAgICB9CiAgICAgCi0g
ICAgSm1wU3JjIGpvKCkKKyAgICBBc3NlbWJsZXJMYWJlbCBqbygpCiAgICAgewogICAgICAgICBt
X2Zvcm1hdHRlci50d29CeXRlT3AoamNjUmVsMzIoQ29uZGl0aW9uTykpOwogICAgICAgICByZXR1
cm4gbV9mb3JtYXR0ZXIuaW1tZWRpYXRlUmVsMzIoKTsKICAgICB9CiAKLSAgICBKbXBTcmMganAo
KQorICAgIEFzc2VtYmxlckxhYmVsIGpwKCkKICAgICB7CiAgICAgICAgIG1fZm9ybWF0dGVyLnR3
b0J5dGVPcChqY2NSZWwzMihDb25kaXRpb25QKSk7CiAgICAgICAgIHJldHVybiBtX2Zvcm1hdHRl
ci5pbW1lZGlhdGVSZWwzMigpOwogICAgIH0KICAgICAKLSAgICBKbXBTcmMganMoKQorICAgIEFz
c2VtYmxlckxhYmVsIGpzKCkKICAgICB7CiAgICAgICAgIG1fZm9ybWF0dGVyLnR3b0J5dGVPcChq
Y2NSZWwzMihDb25kaXRpb25TKSk7CiAgICAgICAgIHJldHVybiBtX2Zvcm1hdHRlci5pbW1lZGlh
dGVSZWwzMigpOwogICAgIH0KIAotICAgIEptcFNyYyBqQ0MoQ29uZGl0aW9uIGNvbmQpCisgICAg
QXNzZW1ibGVyTGFiZWwgakNDKENvbmRpdGlvbiBjb25kKQogICAgIHsKICAgICAgICAgbV9mb3Jt
YXR0ZXIudHdvQnl0ZU9wKGpjY1JlbDMyKGNvbmQpKTsKICAgICAgICAgcmV0dXJuIG1fZm9ybWF0
dGVyLmltbWVkaWF0ZVJlbDMyKCk7CkBAIC0xNTIxLDE3ICsxNDc2LDE3IEBAIHB1YmxpYzoKICAg
ICAgICAgcmV0dXJuIG1fZm9ybWF0dGVyLmNvZGVTaXplKCk7CiAgICAgfQogCi0gICAgSm1wRHN0
IGxhYmVsKCkKKyAgICBBc3NlbWJsZXJMYWJlbCBsYWJlbCgpCiAgICAgewotICAgICAgICByZXR1
cm4gSm1wRHN0KG1fZm9ybWF0dGVyLmxhYmVsKCkpOworICAgICAgICByZXR1cm4gQXNzZW1ibGVy
TGFiZWwobV9mb3JtYXR0ZXIubGFiZWwoKSk7CiAgICAgfQogICAgIAotICAgIHN0YXRpYyBKbXBE
c3QgbGFiZWxGb3IoSm1wU3JjIGp1bXAsIGludHB0cl90IG9mZnNldCA9IDApCisgICAgc3RhdGlj
IEFzc2VtYmxlckxhYmVsIGxhYmVsRm9yKEFzc2VtYmxlckxhYmVsIGp1bXAsIGludHB0cl90IG9m
ZnNldCA9IDApCiAgICAgewotICAgICAgICByZXR1cm4gSm1wRHN0KGp1bXAubV9vZmZzZXQgKyBv
ZmZzZXQpOworICAgICAgICByZXR1cm4gQXNzZW1ibGVyTGFiZWwoanVtcC5tX29mZnNldCArIG9m
ZnNldCk7CiAgICAgfQogICAgIAotICAgIEptcERzdCBhbGlnbihpbnQgYWxpZ25tZW50KQorICAg
IEFzc2VtYmxlckxhYmVsIGFsaWduKGludCBhbGlnbm1lbnQpCiAgICAgewogICAgICAgICB3aGls
ZSAoIW1fZm9ybWF0dGVyLmlzQWxpZ25lZChhbGlnbm1lbnQpKQogICAgICAgICAgICAgbV9mb3Jt
YXR0ZXIub25lQnl0ZU9wKE9QX0hMVCk7CkBAIC0xNTQ3LDMzICsxNTAyLDMzIEBAIHB1YmxpYzoK
ICAgICAvLyB3cml0YWJsZSByZWdpb24gb2YgbWVtb3J5OyB0byBtb2RpZnkgdGhlIGNvZGUgaW4g
YW4gZXhlY3V0ZS1vbmx5IGV4ZWN1YWJsZQogICAgIC8vIHBvb2wgdGhlICdyZXBhdGNoJyBhbmQg
J3JlbGluaycgbWV0aG9kcyBzaG91bGQgYmUgdXNlZC4KIAotICAgIHZvaWQgbGlua0p1bXAoSm1w
U3JjIGZyb20sIEptcERzdCB0bykKKyAgICB2b2lkIGxpbmtKdW1wKEFzc2VtYmxlckxhYmVsIGZy
b20sIEFzc2VtYmxlckxhYmVsIHRvKQogICAgIHsKLSAgICAgICAgQVNTRVJUKGZyb20ubV9vZmZz
ZXQgIT0gLTEpOwotICAgICAgICBBU1NFUlQodG8ubV9vZmZzZXQgIT0gLTEpOworICAgICAgICBB
U1NFUlQoZnJvbS5pc1NldCgpKTsKKyAgICAgICAgQVNTRVJUKHRvLmlzU2V0KCkpOwogCiAgICAg
ICAgIGNoYXIqIGNvZGUgPSByZWludGVycHJldF9jYXN0PGNoYXIqPihtX2Zvcm1hdHRlci5kYXRh
KCkpOwogICAgICAgICBBU1NFUlQoIXJlaW50ZXJwcmV0X2Nhc3Q8aW50MzJfdCo+KGNvZGUgKyBm
cm9tLm1fb2Zmc2V0KVstMV0pOwogICAgICAgICBzZXRSZWwzMihjb2RlICsgZnJvbS5tX29mZnNl
dCwgY29kZSArIHRvLm1fb2Zmc2V0KTsKICAgICB9CiAgICAgCi0gICAgc3RhdGljIHZvaWQgbGlu
a0p1bXAodm9pZCogY29kZSwgSm1wU3JjIGZyb20sIHZvaWQqIHRvKQorICAgIHN0YXRpYyB2b2lk
IGxpbmtKdW1wKHZvaWQqIGNvZGUsIEFzc2VtYmxlckxhYmVsIGZyb20sIHZvaWQqIHRvKQogICAg
IHsKLSAgICAgICAgQVNTRVJUKGZyb20ubV9vZmZzZXQgIT0gLTEpOworICAgICAgICBBU1NFUlQo
ZnJvbS5pc1NldCgpKTsKIAogICAgICAgICBzZXRSZWwzMihyZWludGVycHJldF9jYXN0PGNoYXIq
Pihjb2RlKSArIGZyb20ubV9vZmZzZXQsIHRvKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBs
aW5rQ2FsbCh2b2lkKiBjb2RlLCBKbXBTcmMgZnJvbSwgdm9pZCogdG8pCisgICAgc3RhdGljIHZv
aWQgbGlua0NhbGwodm9pZCogY29kZSwgQXNzZW1ibGVyTGFiZWwgZnJvbSwgdm9pZCogdG8pCiAg
ICAgewotICAgICAgICBBU1NFUlQoZnJvbS5tX29mZnNldCAhPSAtMSk7CisgICAgICAgIEFTU0VS
VChmcm9tLmlzU2V0KCkpOwogCiAgICAgICAgIHNldFJlbDMyKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hh
cio+KGNvZGUpICsgZnJvbS5tX29mZnNldCwgdG8pOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lk
IGxpbmtQb2ludGVyKHZvaWQqIGNvZGUsIEptcERzdCB3aGVyZSwgdm9pZCogdmFsdWUpCisgICAg
c3RhdGljIHZvaWQgbGlua1BvaW50ZXIodm9pZCogY29kZSwgQXNzZW1ibGVyTGFiZWwgd2hlcmUs
IHZvaWQqIHZhbHVlKQogICAgIHsKLSAgICAgICAgQVNTRVJUKHdoZXJlLm1fb2Zmc2V0ICE9IC0x
KTsKKyAgICAgICAgQVNTRVJUKHdoZXJlLmlzU2V0KCkpOwogCiAgICAgICAgIHNldFBvaW50ZXIo
cmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oY29kZSkgKyB3aGVyZS5tX29mZnNldCwgdmFsdWUpOwog
ICAgIH0KQEAgLTE1OTgsMzkgKzE1NTMsMjEgQEAgcHVibGljOgogICAgICAgICBzZXRQb2ludGVy
KHdoZXJlLCB2YWx1ZSk7CiAgICAgfQogCi0gICAgc3RhdGljIHVuc2lnbmVkIGdldENhbGxSZXR1
cm5PZmZzZXQoSm1wU3JjIGNhbGwpCisgICAgc3RhdGljIHVuc2lnbmVkIGdldENhbGxSZXR1cm5P
ZmZzZXQoQXNzZW1ibGVyTGFiZWwgY2FsbCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChjYWxsLm1f
b2Zmc2V0ID49IDApOworICAgICAgICBBU1NFUlQoY2FsbC5pc1NldCgpKTsKICAgICAgICAgcmV0
dXJuIGNhbGwubV9vZmZzZXQ7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQqIGdldFJlbG9jYXRl
ZEFkZHJlc3Modm9pZCogY29kZSwgSm1wU3JjIGp1bXApCi0gICAgewotICAgICAgICBBU1NFUlQo
anVtcC5tX29mZnNldCAhPSAtMSk7Ci0KLSAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8
dm9pZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8cHRyZGlmZl90Pihjb2RlKSArIGp1bXAubV9vZmZzZXQp
OwotICAgIH0KLSAgICAKLSAgICBzdGF0aWMgdm9pZCogZ2V0UmVsb2NhdGVkQWRkcmVzcyh2b2lk
KiBjb2RlLCBKbXBEc3QgZGVzdGluYXRpb24pCi0gICAgewotICAgICAgICBBU1NFUlQoZGVzdGlu
YXRpb24ubV9vZmZzZXQgIT0gLTEpOwotCi0gICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0
PHZvaWQqPihyZWludGVycHJldF9jYXN0PHB0cmRpZmZfdD4oY29kZSkgKyBkZXN0aW5hdGlvbi5t
X29mZnNldCk7Ci0gICAgfQotICAgIAotICAgIHN0YXRpYyBpbnQgZ2V0RGlmZmVyZW5jZUJldHdl
ZW5MYWJlbHMoSm1wRHN0IHNyYywgSm1wRHN0IGRzdCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBk
c3QubV9vZmZzZXQgLSBzcmMubV9vZmZzZXQ7Ci0gICAgfQotICAgIAotICAgIHN0YXRpYyBpbnQg
Z2V0RGlmZmVyZW5jZUJldHdlZW5MYWJlbHMoSm1wRHN0IHNyYywgSm1wU3JjIGRzdCkKKyAgICBz
dGF0aWMgdm9pZCogZ2V0UmVsb2NhdGVkQWRkcmVzcyh2b2lkKiBjb2RlLCBBc3NlbWJsZXJMYWJl
bCBsYWJlbCkKICAgICB7Ci0gICAgICAgIHJldHVybiBkc3QubV9vZmZzZXQgLSBzcmMubV9vZmZz
ZXQ7CisgICAgICAgIEFTU0VSVChsYWJlbC5pc1NldCgpKTsKKyAgICAgICAgcmV0dXJuIHJlaW50
ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8cHRyZGlmZl90Pihjb2RlKSArIGxh
YmVsLm1fb2Zmc2V0KTsKICAgICB9CiAgICAgCi0gICAgc3RhdGljIGludCBnZXREaWZmZXJlbmNl
QmV0d2VlbkxhYmVscyhKbXBTcmMgc3JjLCBKbXBEc3QgZHN0KQorICAgIHN0YXRpYyBpbnQgZ2V0
RGlmZmVyZW5jZUJldHdlZW5MYWJlbHMoQXNzZW1ibGVyTGFiZWwgYSwgQXNzZW1ibGVyTGFiZWwg
YikKICAgICB7Ci0gICAgICAgIHJldHVybiBkc3QubV9vZmZzZXQgLSBzcmMubV9vZmZzZXQ7Cisg
ICAgICAgIHJldHVybiBiLm1fb2Zmc2V0IC0gYS5tX29mZnNldDsKICAgICB9CiAgICAgCiAgICAg
dm9pZCogZXhlY3V0YWJsZUNvcHkoRXhlY3V0YWJsZVBvb2wqIGFsbG9jYXRvcikKQEAgLTE2Mzgs
NyArMTU3NSw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fZm9ybWF0dGVyLmV4ZWN1dGFi
bGVDb3B5KGFsbG9jYXRvcik7CiAgICAgfQogCi0gICAgdm9pZCByZXdpbmRUb0xhYmVsKEptcERz
dCByZXdpbmRUbykgeyBtX2Zvcm1hdHRlci5yZXdpbmRUb0xhYmVsKHJld2luZFRvKTsgfQorICAg
IHZvaWQgcmV3aW5kVG9MYWJlbChBc3NlbWJsZXJMYWJlbCByZXdpbmRUbykgeyBtX2Zvcm1hdHRl
ci5yZXdpbmRUb0xhYmVsKHJld2luZFRvKTsgfQogCiAjaWZuZGVmIE5ERUJVRwogICAgIHVuc2ln
bmVkIGRlYnVnT2Zmc2V0KCkgeyByZXR1cm4gbV9mb3JtYXR0ZXIuZGVidWdPZmZzZXQoKTsgfQpA
QCAtMTkzMCwxMCArMTg2NywxMCBAQCBwcml2YXRlOgogICAgICAgICAgICAgbV9idWZmZXIucHV0
SW50NjRVbmNoZWNrZWQoaW1tKTsKICAgICAgICAgfQogCi0gICAgICAgIEptcFNyYyBpbW1lZGlh
dGVSZWwzMigpCisgICAgICAgIEFzc2VtYmxlckxhYmVsIGltbWVkaWF0ZVJlbDMyKCkKICAgICAg
ICAgewogICAgICAgICAgICAgbV9idWZmZXIucHV0SW50VW5jaGVja2VkKDApOwotICAgICAgICAg
ICAgcmV0dXJuIEptcFNyYyhsYWJlbCgpKTsKKyAgICAgICAgICAgIHJldHVybiBBc3NlbWJsZXJM
YWJlbChsYWJlbCgpKTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIEFkbWluaXN0cmF0aXZlIG1l
dGhvZHM6CkBAIC0xOTQ4LDcgKzE4ODUsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmV0dXJu
IG1fYnVmZmVyLmV4ZWN1dGFibGVDb3B5KGFsbG9jYXRvcik7CiAgICAgICAgIH0KIAotICAgICAg
ICB2b2lkIHJld2luZFRvTGFiZWwoSm1wRHN0IHJld2luZFRvKSB7IG1fYnVmZmVyLnJld2luZFRv
T2Zmc2V0KHJld2luZFRvLm1fb2Zmc2V0KTsgfQorICAgICAgICB2b2lkIHJld2luZFRvTGFiZWwo
QXNzZW1ibGVyTGFiZWwgcmV3aW5kVG8pIHsgbV9idWZmZXIucmV3aW5kVG9PZmZzZXQocmV3aW5k
VG8ubV9vZmZzZXQpOyB9CiAKICNpZm5kZWYgTkRFQlVHCiAgICAgICAgIHVuc2lnbmVkIGRlYnVn
T2Zmc2V0KCkgeyByZXR1cm4gbV9idWZmZXIuZGVidWdPZmZzZXQoKTsgfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklULmNwcAkocmV2aXNpb24gODU0MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4Myw3ICsxODMsNyBAQCB2b2lk
IEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAjZW5kaWYKIAogI2lmIFVTRShKU1ZBTFVF
NjQpCi0gICAgICAgIGlmIChtX2xhYmVsc1ttX2J5dGVjb2RlT2Zmc2V0XS5pc1VzZWQoKSkKKyAg
ICAgICAgaWYgKGF0SnVtcFRhcmdldCgpKQogICAgICAgICAgICAga2lsbExhc3RSZXN1bHRSZWdp
c3RlcigpOwogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkocmV2aXNpb24g
ODU0MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNvcHkp
CkBAIC05MDcsNiArOTA3LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgaXNPcGVy
YW5kQ29uc3RhbnRJbW1lZGlhdGVJbnQodW5zaWduZWQgc3JjKTsKICAgICAgICAgYm9vbCBpc09w
ZXJhbmRDb25zdGFudEltbWVkaWF0ZUNoYXIodW5zaWduZWQgc3JjKTsKIAorICAgICAgICBib29s
IGF0SnVtcFRhcmdldCgpOworCiAgICAgICAgIEp1bXAgZ2V0U2xvd0Nhc2UoVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJu
IGl0ZXIrKy0+ZnJvbTsKQEAgLTk4NCw4ICs5ODYsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgUmVnaXN0ZXJJRCBtX21hcHBlZFBheWxvYWQ7CiAjZWxzZQogICAgICAgICBpbnQgbV9sYXN0
UmVzdWx0Qnl0ZWNvZGVSZWdpc3RlcjsKLSAgICAgICAgdW5zaWduZWQgbV9qdW1wVGFyZ2V0c1Bv
c2l0aW9uOwogI2VuZGlmCisgICAgICAgIHVuc2lnbmVkIG1fanVtcFRhcmdldHNQb3NpdGlvbjsK
IAogI2lmbmRlZiBOREVCVUcKICNpZiBkZWZpbmVkKEFTU0VNQkxFUl9IQVNfQ09OU1RBTlRfUE9P
TCkgJiYgQVNTRU1CTEVSX0hBU19DT05TVEFOVF9QT09MCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVElubGluZU1ldGhvZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVElubGluZU1ldGhvZHMuaAkocmV2aXNpb24gODU0MDIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZU1ldGhvZHMuaAkod29ya2luZyBjb3B5KQpA
QCAtMTA5LDYgKzEwOSwxNiBAQCBBTFdBWVNfSU5MSU5FIEpJVDo6Q2FsbCBKSVQ6OmVtaXROYWtl
ZENhCiAgICAgcmV0dXJuIG5ha2VkQ2FsbDsKIH0KIAorQUxXQVlTX0lOTElORSBib29sIEpJVDo6
YXRKdW1wVGFyZ2V0KCkKK3sKKyAgICB3aGlsZSAobV9qdW1wVGFyZ2V0c1Bvc2l0aW9uIDwgbV9j
b2RlQmxvY2stPm51bWJlck9mSnVtcFRhcmdldHMoKSAmJiBtX2NvZGVCbG9jay0+anVtcFRhcmdl
dChtX2p1bXBUYXJnZXRzUG9zaXRpb24pIDw9IG1fYnl0ZWNvZGVPZmZzZXQpIHsKKyAgICAgICAg
aWYgKG1fY29kZUJsb2NrLT5qdW1wVGFyZ2V0KG1fanVtcFRhcmdldHNQb3NpdGlvbikgPT0gbV9i
eXRlY29kZU9mZnNldCkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICArK21fanVt
cFRhcmdldHNQb3NpdGlvbjsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCiAjaWYgZGVm
aW5lZChBU1NFTUJMRVJfSEFTX0NPTlNUQU5UX1BPT0wpICYmIEFTU0VNQkxFUl9IQVNfQ09OU1RB
TlRfUE9PTAogCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpiZWdpblVuaW50ZXJydXB0ZWRTZXF1
ZW5jZShpbnQgaW5zblNwYWNlLCBpbnQgY29uc3RTcGFjZSkKQEAgLTY1MSwyMSArNjYxLDEyIEBA
IEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRWaXJ0dWFsUmUKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIGlmIChzcmMgPT0gbV9sYXN0UmVzdWx0Qnl0ZWNvZGVSZWdpc3RlciAm
JiBtX2NvZGVCbG9jay0+aXNUZW1wb3JhcnlSZWdpc3RlckluZGV4KHNyYykpIHsKLSAgICAgICAg
Ym9vbCBhdEp1bXBUYXJnZXQgPSBmYWxzZTsKLSAgICAgICAgd2hpbGUgKG1fanVtcFRhcmdldHNQ
b3NpdGlvbiA8IG1fY29kZUJsb2NrLT5udW1iZXJPZkp1bXBUYXJnZXRzKCkgJiYgbV9jb2RlQmxv
Y2stPmp1bXBUYXJnZXQobV9qdW1wVGFyZ2V0c1Bvc2l0aW9uKSA8PSBtX2J5dGVjb2RlT2Zmc2V0
KSB7Ci0gICAgICAgICAgICBpZiAobV9jb2RlQmxvY2stPmp1bXBUYXJnZXQobV9qdW1wVGFyZ2V0
c1Bvc2l0aW9uKSA9PSBtX2J5dGVjb2RlT2Zmc2V0KQotICAgICAgICAgICAgICAgIGF0SnVtcFRh
cmdldCA9IHRydWU7Ci0gICAgICAgICAgICArK21fanVtcFRhcmdldHNQb3NpdGlvbjsKLSAgICAg
ICAgfQotCi0gICAgICAgIGlmICghYXRKdW1wVGFyZ2V0KSB7Ci0gICAgICAgICAgICAvLyBUaGUg
YXJndW1lbnQgd2Ugd2FudCBpcyBhbHJlYWR5IHN0b3JlZCBpbiBlYXgKLSAgICAgICAgICAgIGlm
IChkc3QgIT0gY2FjaGVkUmVzdWx0UmVnaXN0ZXIpCi0gICAgICAgICAgICAgICAgbW92ZShjYWNo
ZWRSZXN1bHRSZWdpc3RlciwgZHN0KTsKLSAgICAgICAgICAgIGtpbGxMYXN0UmVzdWx0UmVnaXN0
ZXIoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQorICAgIGlmIChzcmMgPT0gbV9s
YXN0UmVzdWx0Qnl0ZWNvZGVSZWdpc3RlciAmJiBtX2NvZGVCbG9jay0+aXNUZW1wb3JhcnlSZWdp
c3RlckluZGV4KHNyYykgJiYgIWF0SnVtcFRhcmdldCgpKSB7CisgICAgICAgIC8vIFRoZSBhcmd1
bWVudCB3ZSB3YW50IGlzIGFscmVhZHkgc3RvcmVkIGluIGVheAorICAgICAgICBpZiAoZHN0ICE9
IGNhY2hlZFJlc3VsdFJlZ2lzdGVyKQorICAgICAgICAgICAgbW92ZShjYWNoZWRSZXN1bHRSZWdp
c3RlciwgZHN0KTsKKyAgICAgICAga2lsbExhc3RSZXN1bHRSZWdpc3RlcigpOworICAgICAgICBy
ZXR1cm47CiAgICAgfQogCiAgICAgbG9hZFB0cihBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCBz
cmMgKiBzaXplb2YoUmVnaXN0ZXIpKSwgZHN0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUT3Bjb2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRPcGNvZGVzLmNwcAkocmV2aXNpb24gODU0MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVE9wY29kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw5ICs0MSw2IEBA
IG5hbWVzcGFjZSBKU0MgewogCiAjaWYgVVNFKEpTVkFMVUU2NCkKIAotI2RlZmluZSBSRUNPUkRf
SlVNUF9UQVJHRVQodGFyZ2V0T2Zmc2V0KSBcCi0gICBkbyB7IG1fbGFiZWxzW21fYnl0ZWNvZGVP
ZmZzZXQgKyAodGFyZ2V0T2Zmc2V0KV0udXNlZCgpOyB9IHdoaWxlIChmYWxzZSkKLQogdm9pZCBK
SVQ6OnByaXZhdGVDb21waWxlQ1RJTWFjaGluZVRyYW1wb2xpbmVzKFJlZlB0cjxFeGVjdXRhYmxl
UG9vbD4qIGV4ZWN1dGFibGVQb29sLCBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIFRyYW1wb2xp
bmVTdHJ1Y3R1cmUgKnRyYW1wb2xpbmVzKQogewogI2lmIEVOQUJMRShKSVRfT1BUSU1JWkVfUFJP
UEVSVFlfQUNDRVNTKQpAQCAtMzQwLDcgKzMzNyw2IEBAIHZvaWQgSklUOjplbWl0X29wX2ptcChJ
bnN0cnVjdGlvbiogY3VycmUKIHsKICAgICB1bnNpZ25lZCB0YXJnZXQgPSBjdXJyZW50SW5zdHJ1
Y3Rpb25bMV0udS5vcGVyYW5kOwogICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOwotICAgIFJF
Q09SRF9KVU1QX1RBUkdFVCh0YXJnZXQpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9sb29wX2lm
X2xlc3NlcShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNzE4LDcgKzcxNCw2
IEBAIHZvaWQgSklUOjplbWl0X29wX2pmYWxzZShJbnN0cnVjdGlvbiogY3UKICAgICBhZGRTbG93
Q2FzZShicmFuY2hQdHIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKEpTVmFsdWU6OmVu
Y29kZShqc0Jvb2xlYW4odHJ1ZSkpKSkpOwogCiAgICAgaXNOb25aZXJvLmxpbmsodGhpcyk7Ci0g
ICAgUkVDT1JEX0pVTVBfVEFSR0VUKHRhcmdldCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2pl
cV9udWxsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC03NDAsNyArNzM1LDYg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfamVxX251bGwoSW5zdHJ1Y3Rpb24qIAogICAgIGFkZEp1bXAo
YnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0cihKU1ZhbHVlOjplbmNvZGUoanNO
dWxsKCkpKSksIHRhcmdldCk7ICAgICAgICAgICAgCiAKICAgICB3YXNOb3RJbW1lZGlhdGUubGlu
ayh0aGlzKTsKLSAgICBSRUNPUkRfSlVNUF9UQVJHRVQodGFyZ2V0KTsKIH07CiB2b2lkIEpJVDo6
ZW1pdF9vcF9qbmVxX251bGwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKQEAg
LTc2MSw3ICs3NTUsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX251bGwoSW5zdHJ1Y3Rpb24q
CiAgICAgYWRkSnVtcChicmFuY2hQdHIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKEpT
VmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsgICAgICAgICAgICAKIAogICAgIHdh
c05vdEltbWVkaWF0ZS5saW5rKHRoaXMpOwotICAgIFJFQ09SRF9KVU1QX1RBUkdFVCh0YXJnZXQp
OwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX3B0cihJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQpAQCAtNzcyLDggKzc2NSw2IEBAIHZvaWQgSklUOjplbWl0X29wX2puZXFfcHRy
KEluc3RydWN0aW9uKiAKICAgICAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVn
VDApOwogICAgIGFkZEp1bXAoYnJhbmNoUHRyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0
cihKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZShwdHIpKSkpLCB0YXJnZXQpOyAgICAgICAgICAgIAot
Ci0gICAgUkVDT1JEX0pVTVBfVEFSR0VUKHRhcmdldCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29w
X2pzcihJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtNzg0LDcgKzc3NSw2IEBA
IHZvaWQgSklUOjplbWl0X29wX2pzcihJbnN0cnVjdGlvbiogY3VycmUKICAgICBhZGRKdW1wKGp1
bXAoKSwgdGFyZ2V0KTsKICAgICBtX2pzclNpdGVzLmFwcGVuZChKU1JJbmZvKHN0b3JlTG9jYXRp
b24sIGxhYmVsKCkpKTsKICAgICBraWxsTGFzdFJlc3VsdFJlZ2lzdGVyKCk7Ci0gICAgUkVDT1JE
X0pVTVBfVEFSR0VUKHRhcmdldCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX3NyZXQoSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTgzOCw3ICs4MjgsNiBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9qdHJ1ZShJbnN0cnVjdGlvbiogY3VyCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoUHRy
KE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0cihKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFu
KGZhbHNlKSkpKSk7CiAKICAgICBpc1plcm8ubGluayh0aGlzKTsKLSAgICBSRUNPUkRfSlVNUF9U
QVJHRVQodGFyZ2V0KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfbmVxKEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMDc2LDcgKzEwNjUsNiBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9qbXBfc2NvcGVzKEluc3RydWN0aW9uCiAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoSW1tMzIo
Y3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCkpOwogICAgIHN0dWJDYWxsLmNhbGwoKTsK
ICAgICBhZGRKdW1wKGp1bXAoKSwgY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7Ci0g
ICAgUkVDT1JEX0pVTVBfVEFSR0VUKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwog
fQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfaW1tKEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCg==
</data>
<flag name="review"
          id="84742"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>