<?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>27485</bug_id>
          
          <creation_ts>2009-07-21 00:07:48 -0700</creation_ts>
          <short_desc>Move LinkBuffer/RepatchBuffer out of AbstractMacroAssembler.</short_desc>
          <delta_ts>2009-07-21 17:42:33 -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="Gavin Barraclough">barraclough</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>133382</commentid>
    <comment_count>0</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2009-07-21 00:07:48 -0700</bug_when>
    <thetext>Some code that is really related to architecture-specific MacroAssemblers is currently residing in the AbstractMacroAssembler, and in the architecture specific assembler classes.  By moving these classes up the food chain we can then split the implementation methods out to the appropriate MacroAssemblers, to resolve these issues.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133383</commentid>
    <comment_count>1</comment_count>
      <attachid>33150</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2009-07-21 00:16:28 -0700</bug_when>
    <thetext>Created attachment 33150
The patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133403</commentid>
    <comment_count>2</comment_count>
      <attachid>33150</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2009-07-21 01:35:36 -0700</bug_when>
    <thetext>Comment on attachment 33150
The patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133669</commentid>
    <comment_count>3</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2009-07-21 17:42:33 -0700</bug_when>
    <thetext>Sending        JavaScriptCore/ChangeLog
Sending        JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj
Sending        JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj
Sending        JavaScriptCore/assembler/ARMAssembler.h
Sending        JavaScriptCore/assembler/ARMv7Assembler.h
Sending        JavaScriptCore/assembler/AbstractMacroAssembler.h
Adding         JavaScriptCore/assembler/LinkBuffer.h
Adding         JavaScriptCore/assembler/RepatchBuffer.h
Sending        JavaScriptCore/assembler/X86Assembler.h
Sending        JavaScriptCore/jit/JIT.cpp
Sending        JavaScriptCore/jit/JITPropertyAccess.cpp
Sending        JavaScriptCore/yarr/RegexJIT.cpp
Transmitting file data ............
Committed revision 46202.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>33150</attachid>
            <date>2009-07-21 00:16:28 -0700</date>
            <delta_ts>2009-07-21 01:35:36 -0700</delta_ts>
            <desc>The patch</desc>
            <filename>patch.linkrepatch.txt</filename>
            <type>text/plain</type>
            <size>41356</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDQ2MTU2KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsOTMgQEAKKzIwMDktMDctMjEgIEdhdmluIEJh
cnJhY2xvdWdoICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1vdmUgTGlua0J1ZmZlci9SZXBhdGNoQnVmZmVy
IG91dCBvZiBBYnN0cmFjdE1hY3JvQXNzZW1ibGVyLgorICAgICAgICAoIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNzQ4NSApCisKKyAgICAgICAgVGhpcyBjaGFuZ2Ug
aXMgdGhlIGZpcnN0IHN0ZXAgaW4gYSBwcm9jZXNzIHRvIG1vdmUgY29kZSB0aGF0IHNob3VsZCBi
ZSBpbgorICAgICAgICB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIE1hY3JvQXNzZW1ibGVyIGNs
YXNzZXMgdXAgb3V0IG9mIEFzc21ibGVyIGFuZAorICAgICAgICBBYnN0cmFjdE1hY3JvQXNzZW1i
bGVyLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ajoKKyAgICAgICAgICAgIC0gYWRkZWQgbmV3IGZpbGVzCisgICAgICAgIAorICAgICAgICAqIGFz
c2VtYmxlci9BUk1Bc3NlbWJsZXIuaDoKKyAgICAgICAgKEpTQzo6QVJNQXNzZW1ibGVyOjpsaW5r
UG9pbnRlcik6CisgICAgICAgICAgICAtIHJlbmFtZSBwYXRjaFBvaW50ZXIgdG8gYnJpbmcgaXQg
aW4gbGluZSB3aXRoIHRoZSBjdXJyZW50IGxpbmsvcmVwYXRjaCBuYW1pbmcgc2NoZW1lCisgICAg
ICAgIAorICAgICAgICAqIGFzc2VtYmxlci9BUk12N0Fzc2VtYmxlci5oOgorICAgICAgICAoSlND
OjpBUk12N0Fzc2VtYmxlcjo6bGlua0NhbGwpOgorICAgICAgICAoSlNDOjpBUk12N0Fzc2VtYmxl
cjo6bGlua1BvaW50ZXIpOgorICAgICAgICAoSlNDOjpBUk12N0Fzc2VtYmxlcjo6cmVsaW5rQ2Fs
bCk6CisgICAgICAgIChKU0M6OkFSTXY3QXNzZW1ibGVyOjpyZXBhdGNoSW50MzIpOgorICAgICAg
ICAoSlNDOjpBUk12N0Fzc2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIpOgorICAgICAgICAoSlNDOjpB
Uk12N0Fzc2VtYmxlcjo6c2V0SW50MzIpOgorICAgICAgICAoSlNDOjpBUk12N0Fzc2VtYmxlcjo6
c2V0UG9pbnRlcik6CisgICAgICAgICAgICAtIHJlbmFtZSBwYXRjaFBvaW50ZXIgdG8gYnJpbmcg
aXQgaW4gbGluZSB3aXRoIHRoZSBjdXJyZW50IGxpbmsvcmVwYXRjaCBuYW1pbmcgc2NoZW1lCisK
KyAgICAgICAgKiBhc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oOgorICAgICAgICAo
SlNDOjpBYnN0cmFjdE1hY3JvQXNzZW1ibGVyOjpsaW5rSnVtcCk6CisgICAgICAgIChKU0M6OkFi
c3RyYWN0TWFjcm9Bc3NlbWJsZXI6OmxpbmtDYWxsKToKKyAgICAgICAgKEpTQzo6QWJzdHJhY3RN
YWNyb0Fzc2VtYmxlcjo6bGlua1BvaW50ZXIpOgorICAgICAgICAoSlNDOjpBYnN0cmFjdE1hY3Jv
QXNzZW1ibGVyOjpnZXRMaW5rZXJBZGRyZXNzKToKKyAgICAgICAgKEpTQzo6QWJzdHJhY3RNYWNy
b0Fzc2VtYmxlcjo6Z2V0TGlua2VyQ2FsbFJldHVybk9mZnNldCk6CisgICAgICAgIChKU0M6OkFi
c3RyYWN0TWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hKdW1wKToKKyAgICAgICAgKEpTQzo6QWJzdHJh
Y3RNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENhbGwpOgorICAgICAgICAoSlNDOjpBYnN0cmFjdE1h
Y3JvQXNzZW1ibGVyOjpyZXBhdGNoTmVhckNhbGwpOgorICAgICAgICAoSlNDOjpBYnN0cmFjdE1h
Y3JvQXNzZW1ibGVyOjpyZXBhdGNoSW50MzIpOgorICAgICAgICAoSlNDOjpBYnN0cmFjdE1hY3Jv
QXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcik6CisgICAgICAgIChKU0M6OkFic3RyYWN0TWFjcm9B
c3NlbWJsZXI6OnJlcGF0Y2hMb2FkUHRyVG9MRUEpOgorICAgICAgICAgICAgLSByZW1vdmUgdGhl
IExpbmtCdWZmZXIvUmVwYXRjaEJ1ZmZlciBjbGFzc2VzLCBidXQgbGVhdmUgYSBzZXQgb2YgKHBy
aXZhdGUsIGZyaWVuZGVkKSBtZXRob2RzIHRvIGludGVyZmFjZSB0byB0aGUgQXNzZW1ibGVyCisK
KyAgICAgICAgKiBhc3NlbWJsZXIvTGlua0J1ZmZlci5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6
TGlua0J1ZmZlcjo6TGlua0J1ZmZlcik6CisgICAgICAgIChKU0M6OkxpbmtCdWZmZXI6On5MaW5r
QnVmZmVyKToKKyAgICAgICAgKEpTQzo6TGlua0J1ZmZlcjo6bGluayk6CisgICAgICAgIChKU0M6
OkxpbmtCdWZmZXI6OnBhdGNoKToKKyAgICAgICAgKEpTQzo6TGlua0J1ZmZlcjo6bG9jYXRpb25P
Zik6CisgICAgICAgIChKU0M6OkxpbmtCdWZmZXI6OmxvY2F0aW9uT2ZOZWFyQ2FsbCk6CisgICAg
ICAgIChKU0M6OkxpbmtCdWZmZXI6OnJldHVybkFkZHJlc3NPZmZzZXQpOgorICAgICAgICAoSlND
OjpMaW5rQnVmZmVyOjpmaW5hbGl6ZUNvZGUpOgorICAgICAgICAoSlNDOjpMaW5rQnVmZmVyOjpm
aW5hbGl6ZUNvZGVBZGRlbmR1bSk6CisgICAgICAgIChKU0M6OkxpbmtCdWZmZXI6OmNvZGUpOgor
ICAgICAgICAoSlNDOjpMaW5rQnVmZmVyOjpwZXJmb3JtRmluYWxpemF0aW9uKToKKyAgICAgICAg
ICAgIC0gbmV3IGZpbGUgY29udGFpbmluZyB0aGUgTGlua0J1ZmZlciBjbGFzcywgcHJldmlvdXNs
eSBhIG1lbWJlciBvZiBBYnN0cmFjdE1hY3JvQXNzZW1ibGVyCisKKyAgICAgICAgKiBhc3NlbWJs
ZXIvUmVwYXRjaEJ1ZmZlci5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6UmVwYXRjaEJ1ZmZlcjo6
UmVwYXRjaEJ1ZmZlcik6CisgICAgICAgIChKU0M6OlJlcGF0Y2hCdWZmZXI6OnJlbGluayk6Cisg
ICAgICAgIChKU0M6OlJlcGF0Y2hCdWZmZXI6OnJlcGF0Y2gpOgorICAgICAgICAoSlNDOjpSZXBh
dGNoQnVmZmVyOjpyZXBhdGNoTG9hZFB0clRvTEVBKToKKyAgICAgICAgKEpTQzo6UmVwYXRjaEJ1
ZmZlcjo6cmVsaW5rQ2FsbGVyVG9UcmFtcG9saW5lKToKKyAgICAgICAgKEpTQzo6UmVwYXRjaEJ1
ZmZlcjo6cmVsaW5rQ2FsbGVyVG9GdW5jdGlvbik6CisgICAgICAgIChKU0M6OlJlcGF0Y2hCdWZm
ZXI6OnJlbGlua05lYXJDYWxsZXJUb1RyYW1wb2xpbmUpOgorICAgICAgICAgICAgLSBuZXcgZmls
ZSBjb250YWluaW5nIHRoZSBSZXBhdGNoQnVmZmVyIGNsYXNzLCBwcmV2aW91c2x5IGEgbWVtYmVy
IG9mIEFic3RyYWN0TWFjcm9Bc3NlbWJsZXIKKworICAgICAgICAqIGFzc2VtYmxlci9YODZBc3Nl
bWJsZXIuaDoKKyAgICAgICAgKEpTQzo6WDg2QXNzZW1ibGVyOjpsaW5rSnVtcCk6CisgICAgICAg
IChKU0M6Olg4NkFzc2VtYmxlcjo6bGlua0NhbGwpOgorICAgICAgICAoSlNDOjpYODZBc3NlbWJs
ZXI6OmxpbmtQb2ludGVyRm9yQ2FsbCk6CisgICAgICAgIChKU0M6Olg4NkFzc2VtYmxlcjo6bGlu
a1BvaW50ZXIpOgorICAgICAgICAoSlNDOjpYODZBc3NlbWJsZXI6OnJlbGlua0p1bXApOgorICAg
ICAgICAoSlNDOjpYODZBc3NlbWJsZXI6OnJlbGlua0NhbGwpOgorICAgICAgICAoSlNDOjpYODZB
c3NlbWJsZXI6OnJlcGF0Y2hJbnQzMik6CisgICAgICAgIChKU0M6Olg4NkFzc2VtYmxlcjo6cmVw
YXRjaFBvaW50ZXIpOgorICAgICAgICAoSlNDOjpYODZBc3NlbWJsZXI6OnNldFBvaW50ZXIpOgor
ICAgICAgICAoSlNDOjpYODZBc3NlbWJsZXI6OnNldEludDMyKToKKyAgICAgICAgKEpTQzo6WDg2
QXNzZW1ibGVyOjpzZXRSZWwzMik6CisgICAgICAgICAgICAtIHJlbmFtZSBwYXRjaFBvaW50ZXIg
dG8gYnJpbmcgaXQgaW4gbGluZSB3aXRoIHRoZSBjdXJyZW50IGxpbmsvcmVwYXRjaCBuYW1pbmcg
c2NoZW1lCisKKyAgICAgICAgKiBqaXQvSklULmNwcDoKKyAgICAgICAgKEpTQzo6Y3RpUGF0Y2hO
ZWFyQ2FsbEJ5UmV0dXJuQWRkcmVzcyk6CisgICAgICAgIChKU0M6OmN0aVBhdGNoQ2FsbEJ5UmV0
dXJuQWRkcmVzcyk6CisgICAgICAgICAgICAtIGluY2x1ZGUgbmV3IGhlYWRlcnMKKyAgICAgICAg
ICAgIC0gcmVtb3ZlIE1hY3JvQXNzZW1ibGVyOjogc3BlY2lmaWNhdGlvbiBmcm9tIFJlcGF0Y2hC
dWZmZXIgdXNhZ2UKKworICAgICAgICAqIGppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHA6CisgICAg
ICAgICogeWFyci9SZWdleEpJVC5jcHA6CisgICAgICAgICAgICAtIGluY2x1ZGUgbmV3IGhlYWRl
cnMKKwogMjAwOS0wNy0yMCAgT2xpdmVyIEh1bnQgIDxvbGl2ZXJAYXBwbGUuY29tPgogCiAgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoQnVpbGQgZml4KS4KSW5kZXg6IEphdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
cmV2aXNpb24gNDYxNDkpCisrKyBKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMzksNiArMTM5LDggQEAKIAkJ
ODZEM0IyQzQxMDE1NkJERTAwMjg2NUU3IC8qIEFSTUFzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZEM0IyQzAxMDE1NkJERTAwMjg2NUU3
IC8qIEFSTUFzc2VtYmxlci5oICovOyB9OwogCQk4NkQzQjJDNTEwMTU2QkRFMDAyODY1RTcgLyog
QXNzZW1ibGVyQnVmZmVyV2l0aENvbnN0YW50UG9vbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZEM0IyQzExMDE1NkJERTAwMjg2NUU3IC8qIEFzc2Vt
YmxlckJ1ZmZlcldpdGhDb25zdGFudFBvb2wuaCAqLzsgfTsKIAkJODZEM0IyQzYxMDE1NkJERTAw
Mjg2NUU3IC8qIE1hY3JvQXNzZW1ibGVyQVJNLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA4NkQzQjJDMjEwMTU2QkRFMDAyODY1RTcgLyogTWFjcm9Bc3Nl
bWJsZXJBUk0uaCAqLzsgfTsKKwkJODZEM0IzQzMxMDE1OUQ3RjAwMjg2NUU3IC8qIExpbmtCdWZm
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2RDNC
M0MxMTAxNTlEN0YwMDI4NjVFNyAvKiBMaW5rQnVmZmVyLmggKi87IH07CisJCTg2RDNCM0M0MTAx
NTlEN0YwMDI4NjVFNyAvKiBSZXBhdGNoQnVmZmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkQzQjNDMjEwMTU5RDdGMDAyODY1RTcgLyogUmVwYXRj
aEJ1ZmZlci5oICovOyB9OwogCQk4NkRCNjQ2NDBGOTVDNkZDMDBEN0Q5MjEgLyogRXhlY3V0YWJs
ZUFsbG9jYXRvckZpeGVkVk1Qb29sLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDg2REI2NDYzMEY5NUM2RkMwMEQ3RDkyMSAvKiBFeGVjdXRhYmxlQWxs
b2NhdG9yRml4ZWRWTVBvb2wuY3BwICovOyB9OwogCQk4NkUxMTZCMTBGRTc1QUM4MDBCNTEyQkMg
LyogQ29kZUxvY2F0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA4NkUxMTZCMDBGRTc1QUM4MDBCNTEyQkMgLyogQ29kZUxvY2F0aW9uLmggKi87IH07
CiAJCTg2RUFDNDk1MEY5M0U4RDEwMDhFQzk0OCAvKiBSZWdleENvbXBpbGVyLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2RUFDNDhEMEY5M0U4RDEw
MDhFQzk0OCAvKiBSZWdleENvbXBpbGVyLmNwcCAqLzsgfTsKQEAgLTY0OCw2ICs2NTAsOCBAQAog
CQk4NkQzQjJDMDEwMTU2QkRFMDAyODY1RTcgLyogQVJNQXNzZW1ibGVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFSTUFzc2VtYmxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk4NkQzQjJDMTEwMTU2QkRFMDAyODY1RTcgLyogQXNzZW1ibGVyQnVmZmVyV2l0
aENvbnN0YW50UG9vbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBc3NlbWJs
ZXJCdWZmZXJXaXRoQ29uc3RhbnRQb29sLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTg2RDNCMkMyMTAxNTZCREUwMDI4NjVFNyAvKiBNYWNyb0Fzc2VtYmxlckFSTS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYWNyb0Fzc2VtYmxlckFSTS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk4NkQzQjNDMTEwMTU5RDdGMDAyODY1RTcgLyogTGlua0J1ZmZl
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMaW5rQnVmZmVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTg2RDNCM0MyMTAxNTlEN0YwMDI4NjVFNyAvKiBSZXBh
dGNoQnVmZmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlcGF0Y2hCdWZm
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODZEQjY0NUYwRjk1NEU5MTAwRDdE
OTIxIC8qIEV4ZWN1dGFibGVBbGxvY2F0b3JXaW4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gRXhlY3V0YWJsZUFsbG9jYXRvcldpbi5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTg2REI2NDYzMEY5NUM2RkMwMEQ3RDkyMSAvKiBFeGVjdXRhYmxlQWxs
b2NhdG9yRml4ZWRWTVBvb2wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gRXhlY3V0YWJsZUFsbG9jYXRvckZpeGVkVk1Qb29sLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJODZFMTE2QjAwRkU3NUFDODAwQjUxMkJDIC8qIENvZGVMb2NhdGlvbi5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb2RlTG9jYXRpb24uaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE1NjgsNiArMTU3Miw4IEBACiAJCQkJODYwMTYxRTAwRjNB
ODNDMTAwRjg0NzEwIC8qIE1hY3JvQXNzZW1ibGVyWDg2LmggKi8sCiAJCQkJODYwMTYxRTEwRjNB
ODNDMTAwRjg0NzEwIC8qIE1hY3JvQXNzZW1ibGVyWDg2XzY0LmggKi8sCiAJCQkJODZDMzZFRTkw
RUUxMjg5RDAwQjNERjU5IC8qIE1hY3JvQXNzZW1ibGVyLmggKi8sCisJCQkJODZEM0IzQzExMDE1
OUQ3RjAwMjg2NUU3IC8qIExpbmtCdWZmZXIuaCAqLywKKwkJCQk4NkQzQjNDMjEwMTU5RDdGMDAy
ODY1RTcgLyogUmVwYXRjaEJ1ZmZlci5oICovLAogCQkJKTsKIAkJCXBhdGggPSBhc3NlbWJsZXI7
CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtMTg3OCw2ICsxODg0LDggQEAKIAkJCQk4
NkQzQjJDNDEwMTU2QkRFMDAyODY1RTcgLyogQVJNQXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLywK
IAkJCQk4NkQzQjJDNTEwMTU2QkRFMDAyODY1RTcgLyogQXNzZW1ibGVyQnVmZmVyV2l0aENvbnN0
YW50UG9vbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZEM0IyQzYxMDE1NkJERTAwMjg2NUU3IC8q
IE1hY3JvQXNzZW1ibGVyQVJNLmggaW4gSGVhZGVycyAqLywKKwkJCQk4NkQzQjNDMzEwMTU5RDdG
MDAyODY1RTcgLyogTGlua0J1ZmZlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJODZEM0IzQzQxMDE1
OUQ3RjAwMjg2NUU3IC8qIFJlcGF0Y2hCdWZmZXIuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJ
CXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDogSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL0FSTUFzc2VtYmxlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9BUk1Bc3NlbWJsZXIuaAkocmV2aXNpb24gNDYxNDcpCisrKyBK
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJNQXNzZW1ibGVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTU1NCw3ICs1NTQsNyBAQCBuYW1lc3BhY2UgQVJNIHsKIAogICAgICAgICAvLyBQYXRjaCBwb2lu
dGVycwogCi0gICAgICAgIHN0YXRpYyB2b2lkIHBhdGNoUG9pbnRlcih2b2lkKiBjb2RlLCBKbXBE
c3QgZnJvbSwgdm9pZCogdG8pCisgICAgICAgIHN0YXRpYyB2b2lkIGxpbmtQb2ludGVyKHZvaWQq
IGNvZGUsIEptcERzdCBmcm9tLCB2b2lkKiB0bykKICAgICAgICAgewogICAgICAgICAgICAgcGF0
Y2hQb2ludGVySW50ZXJuYWwocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oY29kZSkgKyBmcm9t
Lm1fb2Zmc2V0LCB0byk7CiAgICAgICAgIH0KSW5kZXg6IEphdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9BUk12N0Fzc2VtYmxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9BUk12N0Fzc2VtYmxlci5oCShyZXZpc2lvbiA0NjE0NykKKysrIEphdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9BUk12N0Fzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTI5LDEyICsxNTI5
LDEyIEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKGZyb20ubV9vZmZzZXQgIT0gLTEpOwogICAg
ICAgICBBU1NFUlQocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4odG8pICYgMSk7CiAKLSAgICAg
ICAgcGF0Y2hQb2ludGVyKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDE2X3QqPihyZWludGVycHJldF9j
YXN0PGludHB0cl90Pihjb2RlKSArIGZyb20ubV9vZmZzZXQpIC0gMSwgdG8pOworICAgICAgICBz
ZXRQb2ludGVyKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDE2X3QqPihyZWludGVycHJldF9jYXN0PGlu
dHB0cl90Pihjb2RlKSArIGZyb20ubV9vZmZzZXQpIC0gMSwgdG8pOwogICAgIH0KIAotICAgIHN0
YXRpYyB2b2lkIHBhdGNoUG9pbnRlcih2b2lkKiBjb2RlLCBKbXBEc3Qgd2hlcmUsIHZvaWQqIHZh
bHVlKQorICAgIHN0YXRpYyB2b2lkIGxpbmtQb2ludGVyKHZvaWQqIGNvZGUsIEptcERzdCB3aGVy
ZSwgdm9pZCogdmFsdWUpCiAgICAgewotICAgICAgICBwYXRjaFBvaW50ZXIocmVpbnRlcnByZXRf
Y2FzdDxjaGFyKj4oY29kZSkgKyB3aGVyZS5tX29mZnNldCwgdmFsdWUpOworICAgICAgICBzZXRQ
b2ludGVyKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGNvZGUpICsgd2hlcmUubV9vZmZzZXQsIHZh
bHVlKTsKICAgICB9CiAKICAgICBzdGF0aWMgdm9pZCByZWxpbmtKdW1wKHZvaWQqIGZyb20sIHZv
aWQqIHRvKQpAQCAtMTU1NSw3ICsxNTU1LDcgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQoIShy
ZWludGVycHJldF9jYXN0PGludHB0cl90Pihmcm9tKSAmIDEpKTsKICAgICAgICAgQVNTRVJUKHJl
aW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHRvKSAmIDEpOwogCi0gICAgICAgIHBhdGNoUG9pbnRl
cihyZWludGVycHJldF9jYXN0PHVpbnQxNl90Kj4oZnJvbSkgLSAxLCB0byk7CisgICAgICAgIHNl
dFBvaW50ZXIocmVpbnRlcnByZXRfY2FzdDx1aW50MTZfdCo+KGZyb20pIC0gMSwgdG8pOwogICAg
IH0KIAogICAgIHN0YXRpYyB2b2lkIHJlcGF0Y2hJbnQzMih2b2lkKiB3aGVyZSwgaW50MzJfdCB2
YWx1ZSkKQEAgLTE1NjQsNyArMTU2NCw3IEBAIHB1YmxpYzoKIAogICAgICAgICBBU1NFUlQoIShy
ZWludGVycHJldF9jYXN0PGludHB0cl90Pih3aGVyZSkgJiAxKSk7CiAgICAgICAgIAotICAgICAg
ICBwYXRjaEludDMyKHdoZXJlLCB2YWx1ZSk7CisgICAgICAgIHNldEludDMyKHdoZXJlLCB2YWx1
ZSk7CiAgICAgfQogCiAgICAgc3RhdGljIHZvaWQgcmVwYXRjaFBvaW50ZXIodm9pZCogd2hlcmUs
IHZvaWQqIHZhbHVlKQpAQCAtMTU3Myw3ICsxNTczLDcgQEAgcHVibGljOgogCiAgICAgICAgIEFT
U0VSVCghKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHdoZXJlKSAmIDEpKTsKICAgICAgICAg
Ci0gICAgICAgIHBhdGNoUG9pbnRlcih3aGVyZSwgdmFsdWUpOworICAgICAgICBzZXRQb2ludGVy
KHdoZXJlLCB2YWx1ZSk7CiAgICAgfQogCiAgICAgc3RhdGljIHZvaWQgcmVwYXRjaExvYWRQdHJU
b0xFQSh2b2lkKiB3aGVyZSkKQEAgLTE2MTEsNyArMTYxMSw3IEBAIHByaXZhdGU6CiAgICAgICAg
IG1fZm9ybWF0dGVyLnZmcE9wKDB4MGIwMGVkMDAgfCBvZmZzZXQgfCAodXAgPDwgNykgfCAoaXNM
b2FkIDw8IDQpIHwgZG91YmxlUmVnaXN0ZXJNYXNrKHJkLCA2LCAyOCkgfCBybik7CiAgICAgfQog
Ci0gICAgc3RhdGljIHZvaWQgcGF0Y2hJbnQzMih2b2lkKiBjb2RlLCB1aW50MzJfdCB2YWx1ZSkK
KyAgICBzdGF0aWMgdm9pZCBzZXRJbnQzMih2b2lkKiBjb2RlLCB1aW50MzJfdCB2YWx1ZSkKICAg
ICB7CiAgICAgICAgIHVpbnQxNl90KiBsb2NhdGlvbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDE2
X3QqPihjb2RlKTsKIApAQCAtMTYyNiw5ICsxNjI2LDkgQEAgcHJpdmF0ZToKICAgICAgICAgc3Bs
aWNlTG8xMShsb2NhdGlvbiAtIDEsIGhpMTYpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHBh
dGNoUG9pbnRlcih2b2lkKiBjb2RlLCB2b2lkKiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBzZXRQ
b2ludGVyKHZvaWQqIGNvZGUsIHZvaWQqIHZhbHVlKQogICAgIHsKLSAgICAgICAgcGF0Y2hJbnQz
Mihjb2RlLCByZWludGVycHJldF9jYXN0PHVpbnQzMl90Pih2YWx1ZSkpOworICAgICAgICBzZXRJ
bnQzMihjb2RlLCByZWludGVycHJldF9jYXN0PHVpbnQzMl90Pih2YWx1ZSkpOwogICAgIH0KIAog
ICAgIC8vIExpbmtpbmcgJiBwYXRjaGluZzoKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAkocmV2aXNpb24gNDYxNDcpCisrKyBK
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC00MiwxNSArNDIsMTggQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIExp
bmtCdWZmZXI7CitjbGFzcyBSZXBhdGNoQnVmZmVyOworCiB0ZW1wbGF0ZSA8Y2xhc3MgQXNzZW1i
bGVyVHlwZT4KIGNsYXNzIEFic3RyYWN0TWFjcm9Bc3NlbWJsZXIgewogcHVibGljOgorICAgIHR5
cGVkZWYgQXNzZW1ibGVyVHlwZSBBc3NlbWJsZXJUeXBlX1Q7CisKICAgICB0eXBlZGVmIE1hY3Jv
QXNzZW1ibGVyQ29kZVB0ciBDb2RlUHRyOwogICAgIHR5cGVkZWYgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmIENvZGVSZWY7CiAKICAgICBjbGFzcyBKdW1wOwotICAgIGNsYXNzIExpbmtCdWZmZXI7Ci0g
ICAgY2xhc3MgUmVwYXRjaEJ1ZmZlcjsKIAogICAgIHR5cGVkZWYgdHlwZW5hbWUgQXNzZW1ibGVy
VHlwZTo6UmVnaXN0ZXJJRCBSZWdpc3RlcklEOwogICAgIHR5cGVkZWYgdHlwZW5hbWUgQXNzZW1i
bGVyVHlwZTo6RlBSZWdpc3RlcklEIEZQUmVnaXN0ZXJJRDsKQEAgLTQxNiwyNTQgKzQxOSwxMyBA
QCBwdWJsaWM6CiAgICAgfTsKIAogCi0gICAgLy8gU2VjdGlvbiAzOiBMaW5rQnVmZmVyIC0gdXRp
bGl0eSB0byBmaW5hbGl6ZSBjb2RlIGdlbmVyYXRpb24uCisgICAgLy8gU2VjdGlvbiAzOiBNaXNj
IGFkbWluIG1ldGhvZHMKIAogICAgIHN0YXRpYyBDb2RlUHRyIHRyYW1wb2xpbmVBdChDb2RlUmVm
IHJlZiwgTGFiZWwgbGFiZWwpCiAgICAgewogICAgICAgICByZXR1cm4gQ29kZVB0cihBc3NlbWJs
ZXJUeXBlOjpnZXRSZWxvY2F0ZWRBZGRyZXNzKHJlZi5tX2NvZGUuZGF0YUxvY2F0aW9uKCksIGxh
YmVsLm1fbGFiZWwpKTsKICAgICB9CiAKLSAgICAvLyBMaW5rQnVmZmVyOgotICAgIC8vCi0gICAg
Ly8gVGhpcyBjbGFzcyBhc3Npc3RzIGluIGxpbmtpbmcgY29kZSBnZW5lcmF0ZWQgYnkgdGhlIG1h
Y3JvIGFzc2VtYmxlciwgb25jZSBjb2RlIGdlbmVyYXRpb24KLSAgICAvLyBoYXMgYmVlbiBjb21w
bGV0ZWQsIGFuZCB0aGUgY29kZSBoYXMgYmVlbiBjb3BpZWQgdG8gaXMgZmluYWwgbG9jYXRpb24g
aW4gbWVtb3J5LiAgQXQgdGhpcwotICAgIC8vIHRpbWUgcG9pbnRlcnMgdG8gbGFiZWxzIHdpdGhp
biB0aGUgY29kZSBtYXkgYmUgcmVzb2x2ZWQsIGFuZCByZWxhdGl2ZSBvZmZzZXRzIHRvIGV4dGVy
bmFsCi0gICAgLy8gYWRkcmVzc2VzIG1heSBiZSBmaXhlZC4KLSAgICAvLwotICAgIC8vIFNwZWNp
ZmljYWxseToKLSAgICAvLyAgICogSnVtcCBvYmplY3RzIG1heSBiZSBsaW5rZWQgdG8gZXh0ZXJu
YWwgdGFyZ2V0cywKLSAgICAvLyAgICogVGhlIGFkZHJlc3Mgb2YgSnVtcCBvYmplY3RzIG1heSB0
YWtlbiwgc3VjaCB0aGF0IGl0IGNhbiBsYXRlciBiZSByZWxpbmtlZC4KLSAgICAvLyAgICogVGhl
IHJldHVybiBhZGRyZXNzIG9mIGEgSnVtcCBvYmplY3QgcmVwcmVzZW50aW5nIGEgY2FsbCBtYXkg
YmUgYWNxdWlyZWQuCi0gICAgLy8gICAqIFRoZSBhZGRyZXNzIG9mIGEgTGFiZWwgcG9pbnRpbmcg
aW50byB0aGUgY29kZSBtYXkgYmUgcmVzb2x2ZWQuCi0gICAgLy8gICAqIFRoZSB2YWx1ZSByZWZl
cmVuY2VkIGJ5IGEgRGF0YUxhYmVsIG1heSBiZSBmaXhlZC4KLSAgICAvLwotICAgIC8vIEZJWE1F
OiBkaXN0aW5ndWlzaCBiZXR3ZWVuIENhbGxzICYgSnVtcHMgKG1ha2UgYSBzcGVjaWZpYyBjYWxs
IHRvIG9idGFpbiB0aGUgcmV0dXJuCi0gICAgLy8gYWRkcmVzcyBvZiBjYWxscywgYXMgb3Bwb3Nl
ZCB0byBhIHBvaW50IHRoYXQgY2FuIGJlIHVzZWQgdG8gbGF0ZXIgcmVsaW5rIGEgSnVtcCAtCi0g
ICAgLy8gcG9zc2libHkgd3JhcCB0aGUgbGF0ZXIgdXAgaW4gYW4gb2JqZWN0IHRoYXQgY2FuIGRv
IGp1c3QgdGhhdCkuCi0gICAgY2xhc3MgTGlua0J1ZmZlciA6IHB1YmxpYyBOb25jb3B5YWJsZSB7
Ci0gICAgcHVibGljOgotICAgICAgICAvLyBOb3RlOiBJbml0aWFsaXphdGlvbiBzZXF1ZW5jZSBp
cyBzaWduaWZpY2FudCwgc2luY2UgZXhlY3V0YWJsZVBvb2wgaXMgYSBQYXNzUmVmUHRyLgotICAg
ICAgICAvLyAgICAgICBGaXJzdCwgZXhlY3V0YWJsZVBvb2wgaXMgY29waWVkIGludG8gbV9leGVj
dXRhYmxlUG9vbCwgdGhlbiB0aGUgaW5pdGlhbGl6YXRpb24gb2YKLSAgICAgICAgLy8gICAgICAg
bV9jb2RlIHVzZXMgbV9leGVjdXRhYmxlUG9vbCwgKm5vdCogZXhlY3V0YWJsZVBvb2wsIHNpbmNl
IHRoaXMgaXMgbm8gbG9uZ2VyIHZhbGlkLgotICAgICAgICBMaW5rQnVmZmVyKEFic3RyYWN0TWFj
cm9Bc3NlbWJsZXI8QXNzZW1ibGVyVHlwZT4qIG1hc20sIFBhc3NSZWZQdHI8RXhlY3V0YWJsZVBv
b2w+IGV4ZWN1dGFibGVQb29sKQotICAgICAgICAgICAgOiBtX2V4ZWN1dGFibGVQb29sKGV4ZWN1
dGFibGVQb29sKQotICAgICAgICAgICAgLCBtX2NvZGUobWFzbS0+bV9hc3NlbWJsZXIuZXhlY3V0
YWJsZUNvcHkobV9leGVjdXRhYmxlUG9vbC5nZXQoKSkpCi0gICAgICAgICAgICAsIG1fc2l6ZSht
YXNtLT5tX2Fzc2VtYmxlci5zaXplKCkpCi0jaWZuZGVmIE5ERUJVRwotICAgICAgICAgICAgLCBt
X2NvbXBsZXRlZChmYWxzZSkKLSNlbmRpZgotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAg
ICB+TGlua0J1ZmZlcigpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChtX2NvbXBsZXRl
ZCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBUaGVzZSBtZXRob2RzIGFyZSB1c2VkIHRvIGxp
bmsgb3Igc2V0IHZhbHVlcyBhdCBjb2RlIGdlbmVyYXRpb24gdGltZS4KLQotICAgICAgICB2b2lk
IGxpbmsoQ2FsbCBjYWxsLCBGdW5jdGlvblB0ciBmdW5jdGlvbikKLSAgICAgICAgewotICAgICAg
ICAgICAgQVNTRVJUKGNhbGwuaXNGbGFnU2V0KENhbGw6OkxpbmthYmxlKSk7Ci0jaWYgUExBVEZP
Uk0oWDg2XzY0KQotICAgICAgICAgICAgaWYgKCFjYWxsLmlzRmxhZ1NldChDYWxsOjpOZWFyKSkg
ewotICAgICAgICAgICAgICAgIGNoYXIqIGNhbGxMb2NhdGlvbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8
Y2hhcio+KEFzc2VtYmxlclR5cGU6OmdldFJlbG9jYXRlZEFkZHJlc3MoY29kZSgpLCBjYWxsLm1f
am1wKSkgLSBSRVBUQUNIX09GRlNFVF9DQUxMX1IxMTsKLSAgICAgICAgICAgICAgICBBc3NlbWJs
ZXJUeXBlOjpwYXRjaFBvaW50ZXJGb3JDYWxsKGNhbGxMb2NhdGlvbiwgZnVuY3Rpb24udmFsdWUo
KSk7Ci0gICAgICAgICAgICB9IGVsc2UKLSNlbmRpZgotICAgICAgICAgICAgQXNzZW1ibGVyVHlw
ZTo6bGlua0NhbGwoY29kZSgpLCBjYWxsLm1fam1wLCBmdW5jdGlvbi52YWx1ZSgpKTsKLSAgICAg
ICAgfQotICAgICAgICAKLSAgICAgICAgdm9pZCBsaW5rKEp1bXAganVtcCwgQ29kZUxvY2F0aW9u
TGFiZWwgbGFiZWwpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFzc2VtYmxlclR5cGU6OmxpbmtK
dW1wKGNvZGUoKSwganVtcC5tX2ptcCwgbGFiZWwuZGF0YUxvY2F0aW9uKCkpOwotICAgICAgICB9
Ci0KLSAgICAgICAgdm9pZCBsaW5rKEp1bXBMaXN0IGxpc3QsIENvZGVMb2NhdGlvbkxhYmVsIGxh
YmVsKQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGlz
dC5tX2p1bXBzLnNpemUoKTsgKytpKQotICAgICAgICAgICAgICAgIEFzc2VtYmxlclR5cGU6Omxp
bmtKdW1wKGNvZGUoKSwgbGlzdC5tX2p1bXBzW2ldLm1fam1wLCBsYWJlbC5kYXRhTG9jYXRpb24o
KSk7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIHBhdGNoKERhdGFMYWJlbFB0ciBsYWJlbCwg
dm9pZCogdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFzc2VtYmxlclR5cGU6OnBhdGNo
UG9pbnRlcihjb2RlKCksIGxhYmVsLm1fbGFiZWwsIHZhbHVlKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIHZvaWQgcGF0Y2goRGF0YUxhYmVsUHRyIGxhYmVsLCBDb2RlTG9jYXRpb25MYWJlbCB2YWx1
ZSkKLSAgICAgICAgewotICAgICAgICAgICAgQXNzZW1ibGVyVHlwZTo6cGF0Y2hQb2ludGVyKGNv
ZGUoKSwgbGFiZWwubV9sYWJlbCwgdmFsdWUuZXhlY3V0YWJsZUFkZHJlc3MoKSk7Ci0gICAgICAg
IH0KLQotICAgICAgICAvLyBUaGVzZSBtZXRob2RzIGFyZSB1c2VkIHRvIG9idGFpbiBoYW5kbGVz
IHRvIGFsbG93IHRoZSBjb2RlIHRvIGJlIHJlbGlua2VkIC8gcmVwYXRjaGVkIGxhdGVyLgotCi0g
ICAgICAgIENvZGVMb2NhdGlvbkNhbGwgbG9jYXRpb25PZihDYWxsIGNhbGwpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIEFTU0VSVChjYWxsLmlzRmxhZ1NldChDYWxsOjpMaW5rYWJsZSkpOwotICAg
ICAgICAgICAgQVNTRVJUKCFjYWxsLmlzRmxhZ1NldChDYWxsOjpOZWFyKSk7Ci0gICAgICAgICAg
ICByZXR1cm4gQ29kZUxvY2F0aW9uQ2FsbChBc3NlbWJsZXJUeXBlOjpnZXRSZWxvY2F0ZWRBZGRy
ZXNzKGNvZGUoKSwgY2FsbC5tX2ptcCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgQ29kZUxvY2F0
aW9uTmVhckNhbGwgbG9jYXRpb25PZk5lYXJDYWxsKENhbGwgY2FsbCkKLSAgICAgICAgewotICAg
ICAgICAgICAgQVNTRVJUKGNhbGwuaXNGbGFnU2V0KENhbGw6OkxpbmthYmxlKSk7Ci0gICAgICAg
ICAgICBBU1NFUlQoY2FsbC5pc0ZsYWdTZXQoQ2FsbDo6TmVhcikpOwotICAgICAgICAgICAgcmV0
dXJuIENvZGVMb2NhdGlvbk5lYXJDYWxsKEFzc2VtYmxlclR5cGU6OmdldFJlbG9jYXRlZEFkZHJl
c3MoY29kZSgpLCBjYWxsLm1fam1wKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBDb2RlTG9jYXRp
b25MYWJlbCBsb2NhdGlvbk9mKExhYmVsIGxhYmVsKQotICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXR1cm4gQ29kZUxvY2F0aW9uTGFiZWwoQXNzZW1ibGVyVHlwZTo6Z2V0UmVsb2NhdGVkQWRkcmVz
cyhjb2RlKCksIGxhYmVsLm1fbGFiZWwpKTsKLSAgICAgICAgfQotCi0gICAgICAgIENvZGVMb2Nh
dGlvbkRhdGFMYWJlbFB0ciBsb2NhdGlvbk9mKERhdGFMYWJlbFB0ciBsYWJlbCkKLSAgICAgICAg
ewotICAgICAgICAgICAgcmV0dXJuIENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cihBc3NlbWJsZXJU
eXBlOjpnZXRSZWxvY2F0ZWRBZGRyZXNzKGNvZGUoKSwgbGFiZWwubV9sYWJlbCkpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgQ29kZUxvY2F0aW9uRGF0YUxhYmVsMzIgbG9jYXRpb25PZihEYXRhTGFi
ZWwzMiBsYWJlbCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIENvZGVMb2NhdGlvbkRh
dGFMYWJlbDMyKEFzc2VtYmxlclR5cGU6OmdldFJlbG9jYXRlZEFkZHJlc3MoY29kZSgpLCBsYWJl
bC5tX2xhYmVsKSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBUaGlzIG1ldGhvZCBvYnRhaW5z
IHRoZSByZXR1cm4gYWRkcmVzcyBvZiB0aGUgY2FsbCwgZ2l2ZW4gYXMgYW4gb2Zmc2V0IGZyb20K
LSAgICAgICAgLy8gdGhlIHN0YXJ0IG9mIHRoZSBjb2RlLgotICAgICAgICB1bnNpZ25lZCByZXR1
cm5BZGRyZXNzT2Zmc2V0KENhbGwgY2FsbCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
IEFzc2VtYmxlclR5cGU6OmdldENhbGxSZXR1cm5PZmZzZXQoY2FsbC5tX2ptcCk7Ci0gICAgICAg
IH0KLQotICAgICAgICAvLyBVcG9uIGNvbXBsZXRpb24gb2YgYWxsIHBhdGNoaW5nIGVpdGhlciAn
ZmluYWxpemVDb2RlKCknIG9yICdmaW5hbGl6ZUNvZGVBZGRlbmR1bSgpJyBzaG91bGQgYmUgY2Fs
bGVkCi0gICAgICAgIC8vIG9uY2UgdG8gY29tcGxldGUgZ2VuZXJhdGlvbiBvZiB0aGUgY29kZS4g
ICdmaW5hbGl6ZUNvZGUoKScgaXMgc3VpdGVkIHRvIHNpdHVhdGlvbnMKLSAgICAgICAgLy8gd2hl
cmUgdGhlIGV4ZWN1dGFibGUgcG9vbCBtdXN0IGFsc28gYmUgcmV0YWluZWQsIHRoZSBsaWdodGVy
LXdlaWdodCAnZmluYWxpemVDb2RlQWRkZW5kdW0oKScgaXMKLSAgICAgICAgLy8gc3VpdGVkIHRv
IGFkZGluZyB0byBhbiBleGlzdGluZyBhbGxvY2F0aW9uLgotICAgICAgICBDb2RlUmVmIGZpbmFs
aXplQ29kZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHBlcmZvcm1GaW5hbGl6YXRpb24oKTsK
LQotICAgICAgICAgICAgcmV0dXJuIENvZGVSZWYobV9jb2RlLCBtX2V4ZWN1dGFibGVQb29sLCBt
X3NpemUpOwotICAgICAgICB9Ci0gICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIGZpbmFsaXplQ29k
ZUFkZGVuZHVtKCkKLSAgICAgICAgewotICAgICAgICAgICAgcGVyZm9ybUZpbmFsaXphdGlvbigp
OwotCi0gICAgICAgICAgICByZXR1cm4gQ29kZUxvY2F0aW9uTGFiZWwoY29kZSgpKTsKLSAgICAg
ICAgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgLy8gS2VlcCB0aGlzIHByaXZhdGUhIC0gdGhl
IHVuZGVybHlpbmcgY29kZSBzaG91bGQgb25seSBiZSBvYnRhaW5lZCBleHRlcm5hbGx5IHZpYSAK
LSAgICAgICAgLy8gZmluYWxpemVDb2RlKCkgb3IgZmluYWxpemVDb2RlQWRkZW5kdW0oKS4KLSAg
ICAgICAgdm9pZCogY29kZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtX2NvZGU7
Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIHBlcmZvcm1GaW5hbGl6YXRpb24oKQotICAgICAg
ICB7Ci0jaWZuZGVmIE5ERUJVRwotICAgICAgICAgICAgQVNTRVJUKCFtX2NvbXBsZXRlZCk7Ci0g
ICAgICAgICAgICBtX2NvbXBsZXRlZCA9IHRydWU7Ci0jZW5kaWYKLQotICAgICAgICAgICAgRXhl
Y3V0YWJsZUFsbG9jYXRvcjo6bWFrZUV4ZWN1dGFibGUoY29kZSgpLCBtX3NpemUpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgUmVmUHRyPEV4ZWN1dGFibGVQb29sPiBtX2V4ZWN1dGFibGVQb29sOwot
ICAgICAgICB2b2lkKiBtX2NvZGU7Ci0gICAgICAgIHNpemVfdCBtX3NpemU7Ci0jaWZuZGVmIE5E
RUJVRwotICAgICAgICBib29sIG1fY29tcGxldGVkOwotI2VuZGlmCi0gICAgfTsKLQotICAgIGNs
YXNzIFJlcGF0Y2hCdWZmZXIgewotICAgIHB1YmxpYzoKLSAgICAgICAgUmVwYXRjaEJ1ZmZlcigp
Ci0gICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgcmVsaW5rKENvZGVMb2NhdGlv
bkp1bXAganVtcCwgQ29kZUxvY2F0aW9uTGFiZWwgZGVzdGluYXRpb24pCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIEFzc2VtYmxlclR5cGU6OnJlbGlua0p1bXAoanVtcC5kYXRhTG9jYXRpb24oKSwg
ZGVzdGluYXRpb24uZGF0YUxvY2F0aW9uKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBy
ZWxpbmsoQ29kZUxvY2F0aW9uQ2FsbCBjYWxsLCBDb2RlTG9jYXRpb25MYWJlbCBkZXN0aW5hdGlv
bikKLSAgICAgICAgewotI2lmIFBMQVRGT1JNKFg4Nl82NCkKLSAgICAgICAgICAgIHJlcGF0Y2go
Y2FsbC5kYXRhTGFiZWxQdHJBdE9mZnNldCgtUkVQVEFDSF9PRkZTRVRfQ0FMTF9SMTEpLCBkZXN0
aW5hdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKTsKLSNlbHNlCi0gICAgICAgICAgICBBc3NlbWJs
ZXJUeXBlOjpyZWxpbmtDYWxsKGNhbGwuZGF0YUxvY2F0aW9uKCksIGRlc3RpbmF0aW9uLmV4ZWN1
dGFibGVBZGRyZXNzKCkpOwotI2VuZGlmCi0gICAgICAgIH0KLQotICAgICAgICB2b2lkIHJlbGlu
ayhDb2RlTG9jYXRpb25DYWxsIGNhbGwsIEZ1bmN0aW9uUHRyIGRlc3RpbmF0aW9uKQotICAgICAg
ICB7Ci0jaWYgUExBVEZPUk0oWDg2XzY0KQotICAgICAgICAgICAgcmVwYXRjaChjYWxsLmRhdGFM
YWJlbFB0ckF0T2Zmc2V0KC1SRVBUQUNIX09GRlNFVF9DQUxMX1IxMSksIGRlc3RpbmF0aW9uLmV4
ZWN1dGFibGVBZGRyZXNzKCkpOwotI2Vsc2UKLSAgICAgICAgICAgIEFzc2VtYmxlclR5cGU6OnJl
bGlua0NhbGwoY2FsbC5kYXRhTG9jYXRpb24oKSwgZGVzdGluYXRpb24uZXhlY3V0YWJsZUFkZHJl
c3MoKSk7Ci0jZW5kaWYKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgcmVsaW5rKENvZGVMb2Nh
dGlvbk5lYXJDYWxsIG5lYXJDYWxsLCBDb2RlUHRyIGRlc3RpbmF0aW9uKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBBc3NlbWJsZXJUeXBlOjpyZWxpbmtDYWxsKG5lYXJDYWxsLmRhdGFMb2NhdGlv
bigpLCBkZXN0aW5hdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIHZvaWQgcmVsaW5rKENvZGVMb2NhdGlvbk5lYXJDYWxsIG5lYXJDYWxsLCBDb2RlTG9jYXRp
b25MYWJlbCBkZXN0aW5hdGlvbikKLSAgICAgICAgewotICAgICAgICAgICAgQXNzZW1ibGVyVHlw
ZTo6cmVsaW5rQ2FsbChuZWFyQ2FsbC5kYXRhTG9jYXRpb24oKSwgZGVzdGluYXRpb24uZXhlY3V0
YWJsZUFkZHJlc3MoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIHJlbGluayhDb2RlTG9j
YXRpb25OZWFyQ2FsbCBuZWFyQ2FsbCwgRnVuY3Rpb25QdHIgZGVzdGluYXRpb24pCi0gICAgICAg
IHsKLSAgICAgICAgICAgIEFzc2VtYmxlclR5cGU6OnJlbGlua0NhbGwobmVhckNhbGwuZGF0YUxv
Y2F0aW9uKCksIGRlc3RpbmF0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwotICAgICAgICB9Ci0K
LSAgICAgICAgdm9pZCByZXBhdGNoKENvZGVMb2NhdGlvbkRhdGFMYWJlbDMyIGRhdGFMYWJlbDMy
LCBpbnQzMl90IHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBBc3NlbWJsZXJUeXBlOjpy
ZXBhdGNoSW50MzIoZGF0YUxhYmVsMzIuZGF0YUxvY2F0aW9uKCksIHZhbHVlKTsKLSAgICAgICAg
fQotCi0gICAgICAgIHZvaWQgcmVwYXRjaChDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHIgZGF0YUxh
YmVsUHRyLCB2b2lkKiB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgQXNzZW1ibGVyVHlw
ZTo6cmVwYXRjaFBvaW50ZXIoZGF0YUxhYmVsUHRyLmRhdGFMb2NhdGlvbigpLCB2YWx1ZSk7Ci0g
ICAgICAgIH0KLQotICAgICAgICB2b2lkIHJlbGlua0NhbGxlclRvVHJhbXBvbGluZShSZXR1cm5B
ZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIENvZGVMb2NhdGlvbkxhYmVsIGxhYmVsKQotICAgICAg
ICB7Ci0gICAgICAgICAgICByZWxpbmsoQ29kZUxvY2F0aW9uQ2FsbChDb2RlUHRyKHJldHVybkFk
ZHJlc3MpKSwgbGFiZWwpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICB2b2lkIHJlbGlu
a0NhbGxlclRvVHJhbXBvbGluZShSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIENvZGVQ
dHIgbmV3Q2FsbGVlRnVuY3Rpb24pCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJlbGlua0NhbGxl
clRvVHJhbXBvbGluZShyZXR1cm5BZGRyZXNzLCBDb2RlTG9jYXRpb25MYWJlbChuZXdDYWxsZWVG
dW5jdGlvbikpOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCByZWxpbmtDYWxsZXJUb0Z1bmN0
aW9uKFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgRnVuY3Rpb25QdHIgZnVuY3Rpb24p
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJlbGluayhDb2RlTG9jYXRpb25DYWxsKENvZGVQdHIo
cmV0dXJuQWRkcmVzcykpLCBmdW5jdGlvbik7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAg
IHZvaWQgcmVsaW5rTmVhckNhbGxlclRvVHJhbXBvbGluZShSZXR1cm5BZGRyZXNzUHRyIHJldHVy
bkFkZHJlc3MsIENvZGVMb2NhdGlvbkxhYmVsIGxhYmVsKQotICAgICAgICB7Ci0gICAgICAgICAg
ICByZWxpbmsoQ29kZUxvY2F0aW9uTmVhckNhbGwoQ29kZVB0cihyZXR1cm5BZGRyZXNzKSksIGxh
YmVsKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgdm9pZCByZWxpbmtOZWFyQ2FsbGVy
VG9UcmFtcG9saW5lKFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgQ29kZVB0ciBuZXdD
YWxsZWVGdW5jdGlvbikKLSAgICAgICAgewotICAgICAgICAgICAgcmVsaW5rTmVhckNhbGxlclRv
VHJhbXBvbGluZShyZXR1cm5BZGRyZXNzLCBDb2RlTG9jYXRpb25MYWJlbChuZXdDYWxsZWVGdW5j
dGlvbikpOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCByZXBhdGNoTG9hZFB0clRvTEVBKENv
ZGVMb2NhdGlvbkluc3RydWN0aW9uIGluc3RydWN0aW9uKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBBc3NlbWJsZXJUeXBlOjpyZXBhdGNoTG9hZFB0clRvTEVBKGluc3RydWN0aW9uLmRhdGFMb2Nh
dGlvbigpKTsKLSAgICAgICAgfQotICAgIH07Ci0KLQotICAgIC8vIFNlY3Rpb24gNDogTWlzYyBh
ZG1pbiBtZXRob2RzCi0KICAgICBzaXplX3Qgc2l6ZSgpCiAgICAgewogICAgICAgICByZXR1cm4g
bV9hc3NlbWJsZXIuc2l6ZSgpOwpAQCAtNzIyLDYgKzQ4NCw4OSBAQCBwdWJsaWM6CiAKIHByb3Rl
Y3RlZDoKICAgICBBc3NlbWJsZXJUeXBlIG1fYXNzZW1ibGVyOworCitwcml2YXRlOgorICAgIGZy
aWVuZCBjbGFzcyBMaW5rQnVmZmVyOworICAgIGZyaWVuZCBjbGFzcyBSZXBhdGNoQnVmZmVyOwor
CisgICAgc3RhdGljIHZvaWQgbGlua0p1bXAodm9pZCogY29kZSwgSnVtcCBqdW1wLCBDb2RlTG9j
YXRpb25MYWJlbCB0YXJnZXQpCisgICAgeworICAgICAgICBBc3NlbWJsZXJUeXBlOjpsaW5rSnVt
cChjb2RlLCBqdW1wLm1fam1wLCB0YXJnZXQuZGF0YUxvY2F0aW9uKCkpOworICAgIH0KKworICAg
IHN0YXRpYyB2b2lkIGxpbmtDYWxsKHZvaWQqIGNvZGUsIENhbGwgY2FsbCwgRnVuY3Rpb25QdHIg
ZnVuY3Rpb24pCisgICAgeworI2lmIFBMQVRGT1JNKFg4Nl82NCkKKyAgICAgICAgaWYgKCFjYWxs
LmlzRmxhZ1NldChDYWxsOjpOZWFyKSkgeworICAgICAgICAgICAgY2hhciogY2FsbExvY2F0aW9u
ID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oZ2V0TGlua2VyQWRkcmVzcyhjb2RlLCBjYWxsLm1f
am1wKSkgLSBSRVBUQUNIX09GRlNFVF9DQUxMX1IxMTsKKyAgICAgICAgICAgIEFzc2VtYmxlclR5
cGU6OmxpbmtQb2ludGVyRm9yQ2FsbChjYWxsTG9jYXRpb24sIGZ1bmN0aW9uLnZhbHVlKCkpOwor
ICAgICAgICB9IGVsc2UKKyNlbmRpZgorICAgICAgICBBc3NlbWJsZXJUeXBlOjpsaW5rQ2FsbChj
b2RlLCBjYWxsLm1fam1wLCBmdW5jdGlvbi52YWx1ZSgpKTsKKyAgICB9CisKKyAgICBzdGF0aWMg
dm9pZCBsaW5rUG9pbnRlcih2b2lkKiBjb2RlLCB0eXBlbmFtZSBBc3NlbWJsZXJUeXBlOjpKbXBE
c3QgbGFiZWwsIHZvaWQqIHZhbHVlKQorICAgIHsKKyAgICAgICAgQXNzZW1ibGVyVHlwZTo6bGlu
a1BvaW50ZXIoY29kZSwgbGFiZWwsIHZhbHVlKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCog
Z2V0TGlua2VyQWRkcmVzcyh2b2lkKiBjb2RlLCB0eXBlbmFtZSBBc3NlbWJsZXJUeXBlOjpKbXBT
cmMgbGFiZWwpCisgICAgeworICAgICAgICByZXR1cm4gQXNzZW1ibGVyVHlwZTo6Z2V0UmVsb2Nh
dGVkQWRkcmVzcyhjb2RlLCBsYWJlbCk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQqIGdldExp
bmtlckFkZHJlc3Modm9pZCogY29kZSwgdHlwZW5hbWUgQXNzZW1ibGVyVHlwZTo6Sm1wRHN0IGxh
YmVsKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEFzc2VtYmxlclR5cGU6OmdldFJlbG9jYXRlZEFk
ZHJlc3MoY29kZSwgbGFiZWwpOworICAgIH0KKworICAgIHN0YXRpYyB1bnNpZ25lZCBnZXRMaW5r
ZXJDYWxsUmV0dXJuT2Zmc2V0KENhbGwgY2FsbCkKKyAgICB7CisgICAgICAgIHJldHVybiBBc3Nl
bWJsZXJUeXBlOjpnZXRDYWxsUmV0dXJuT2Zmc2V0KGNhbGwubV9qbXApOworICAgIH0KKworICAg
IHN0YXRpYyB2b2lkIHJlcGF0Y2hKdW1wKENvZGVMb2NhdGlvbkp1bXAganVtcCwgQ29kZUxvY2F0
aW9uTGFiZWwgZGVzdGluYXRpb24pCisgICAgeworICAgICAgICBBc3NlbWJsZXJUeXBlOjpyZWxp
bmtKdW1wKGp1bXAuZGF0YUxvY2F0aW9uKCksIGRlc3RpbmF0aW9uLmRhdGFMb2NhdGlvbigpKTsK
KyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCByZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25DYWxsIGNh
bGwsIENvZGVMb2NhdGlvbkxhYmVsIGRlc3RpbmF0aW9uKQorICAgIHsKKyNpZiBQTEFURk9STShY
ODZfNjQpCisgICAgICAgIEFzc2VtYmxlclR5cGU6OnJlcGF0Y2hQb2ludGVyKGNhbGwuZGF0YUxh
YmVsUHRyQXRPZmZzZXQoLVJFUFRBQ0hfT0ZGU0VUX0NBTExfUjExKS5kYXRhTG9jYXRpb24oKSwg
ZGVzdGluYXRpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisjZWxzZQorICAgICAgICBBc3NlbWJs
ZXJUeXBlOjpyZWxpbmtDYWxsKGNhbGwuZGF0YUxvY2F0aW9uKCksIGRlc3RpbmF0aW9uLmV4ZWN1
dGFibGVBZGRyZXNzKCkpOworI2VuZGlmCisgICAgfQorCisgICAgc3RhdGljIHZvaWQgcmVwYXRj
aENhbGwoQ29kZUxvY2F0aW9uQ2FsbCBjYWxsLCBGdW5jdGlvblB0ciBkZXN0aW5hdGlvbikKKyAg
ICB7CisjaWYgUExBVEZPUk0oWDg2XzY0KQorICAgICAgICBBc3NlbWJsZXJUeXBlOjpyZXBhdGNo
UG9pbnRlcihjYWxsLmRhdGFMYWJlbFB0ckF0T2Zmc2V0KC1SRVBUQUNIX09GRlNFVF9DQUxMX1Ix
MSkuZGF0YUxvY2F0aW9uKCksIGRlc3RpbmF0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworI2Vs
c2UKKyAgICAgICAgQXNzZW1ibGVyVHlwZTo6cmVsaW5rQ2FsbChjYWxsLmRhdGFMb2NhdGlvbigp
LCBkZXN0aW5hdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyNlbmRpZgorICAgIH0KKworICAg
IHN0YXRpYyB2b2lkIHJlcGF0Y2hOZWFyQ2FsbChDb2RlTG9jYXRpb25OZWFyQ2FsbCBuZWFyQ2Fs
bCwgQ29kZUxvY2F0aW9uTGFiZWwgZGVzdGluYXRpb24pCisgICAgeworICAgICAgICBBc3NlbWJs
ZXJUeXBlOjpyZWxpbmtDYWxsKG5lYXJDYWxsLmRhdGFMb2NhdGlvbigpLCBkZXN0aW5hdGlvbi5l
eGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCByZXBhdGNoSW50
MzIoQ29kZUxvY2F0aW9uRGF0YUxhYmVsMzIgZGF0YUxhYmVsMzIsIGludDMyX3QgdmFsdWUpCisg
ICAgeworICAgICAgICBBc3NlbWJsZXJUeXBlOjpyZXBhdGNoSW50MzIoZGF0YUxhYmVsMzIuZGF0
YUxvY2F0aW9uKCksIHZhbHVlKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCByZXBhdGNoUG9p
bnRlcihDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHIgZGF0YUxhYmVsUHRyLCB2b2lkKiB2YWx1ZSkK
KyAgICB7CisgICAgICAgIEFzc2VtYmxlclR5cGU6OnJlcGF0Y2hQb2ludGVyKGRhdGFMYWJlbFB0
ci5kYXRhTG9jYXRpb24oKSwgdmFsdWUpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIHJlcGF0
Y2hMb2FkUHRyVG9MRUEoQ29kZUxvY2F0aW9uSW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24pCisgICAg
eworICAgICAgICBBc3NlbWJsZXJUeXBlOjpyZXBhdGNoTG9hZFB0clRvTEVBKGluc3RydWN0aW9u
LmRhdGFMb2NhdGlvbigpKTsKKyAgICB9CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6
IEphdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuaAkocmV2aXNpb24gMCkKKysrIEphdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
MTk0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgTGlua0J1ZmZlcl9oCisjZGVmaW5lIExpbmtCdWZmZXJfaAorCisjaW5jbHVkZSA8d3Rm
L1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoQVNTRU1CTEVSKQorCisjaW5jbHVkZSA8TWFjcm9B
c3NlbWJsZXIuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKworbmFtZXNwYWNlIEpT
QyB7CisKKy8vIExpbmtCdWZmZXI6CisvLworLy8gVGhpcyBjbGFzcyBhc3Npc3RzIGluIGxpbmtp
bmcgY29kZSBnZW5lcmF0ZWQgYnkgdGhlIG1hY3JvIGFzc2VtYmxlciwgb25jZSBjb2RlIGdlbmVy
YXRpb24KKy8vIGhhcyBiZWVuIGNvbXBsZXRlZCwgYW5kIHRoZSBjb2RlIGhhcyBiZWVuIGNvcGll
ZCB0byBpcyBmaW5hbCBsb2NhdGlvbiBpbiBtZW1vcnkuICBBdCB0aGlzCisvLyB0aW1lIHBvaW50
ZXJzIHRvIGxhYmVscyB3aXRoaW4gdGhlIGNvZGUgbWF5IGJlIHJlc29sdmVkLCBhbmQgcmVsYXRp
dmUgb2Zmc2V0cyB0byBleHRlcm5hbAorLy8gYWRkcmVzc2VzIG1heSBiZSBmaXhlZC4KKy8vCisv
LyBTcGVjaWZpY2FsbHk6CisvLyAgICogSnVtcCBvYmplY3RzIG1heSBiZSBsaW5rZWQgdG8gZXh0
ZXJuYWwgdGFyZ2V0cywKKy8vICAgKiBUaGUgYWRkcmVzcyBvZiBKdW1wIG9iamVjdHMgbWF5IHRh
a2VuLCBzdWNoIHRoYXQgaXQgY2FuIGxhdGVyIGJlIHJlbGlua2VkLgorLy8gICAqIFRoZSByZXR1
cm4gYWRkcmVzcyBvZiBhIENhbGwgbWF5IGJlIGFjcXVpcmVkLgorLy8gICAqIFRoZSBhZGRyZXNz
IG9mIGEgTGFiZWwgcG9pbnRpbmcgaW50byB0aGUgY29kZSBtYXkgYmUgcmVzb2x2ZWQuCisvLyAg
ICogVGhlIHZhbHVlIHJlZmVyZW5jZWQgYnkgYSBEYXRhTGFiZWwgbWF5IGJlIHNldC4KKy8vCitj
bGFzcyBMaW5rQnVmZmVyIDogcHVibGljIE5vbmNvcHlhYmxlIHsKKyAgICB0eXBlZGVmIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZiBDb2RlUmVmOworICAgIHR5cGVkZWYgTWFjcm9Bc3NlbWJsZXI6Okxh
YmVsIExhYmVsOworICAgIHR5cGVkZWYgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgSnVtcDsKKyAgICB0
eXBlZGVmIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBKdW1wTGlzdDsKKyAgICB0eXBlZGVmIE1h
Y3JvQXNzZW1ibGVyOjpDYWxsIENhbGw7CisgICAgdHlwZWRlZiBNYWNyb0Fzc2VtYmxlcjo6RGF0
YUxhYmVsMzIgRGF0YUxhYmVsMzI7CisgICAgdHlwZWRlZiBNYWNyb0Fzc2VtYmxlcjo6RGF0YUxh
YmVsUHRyIERhdGFMYWJlbFB0cjsKKworcHVibGljOgorICAgIC8vIE5vdGU6IEluaXRpYWxpemF0
aW9uIHNlcXVlbmNlIGlzIHNpZ25pZmljYW50LCBzaW5jZSBleGVjdXRhYmxlUG9vbCBpcyBhIFBh
c3NSZWZQdHIuCisgICAgLy8gICAgICAgRmlyc3QsIGV4ZWN1dGFibGVQb29sIGlzIGNvcGllZCBp
bnRvIG1fZXhlY3V0YWJsZVBvb2wsIHRoZW4gdGhlIGluaXRpYWxpemF0aW9uIG9mCisgICAgLy8g
ICAgICAgbV9jb2RlIHVzZXMgbV9leGVjdXRhYmxlUG9vbCwgKm5vdCogZXhlY3V0YWJsZVBvb2ws
IHNpbmNlIHRoaXMgaXMgbm8gbG9uZ2VyIHZhbGlkLgorICAgIExpbmtCdWZmZXIoTWFjcm9Bc3Nl
bWJsZXIqIG1hc20sIFBhc3NSZWZQdHI8RXhlY3V0YWJsZVBvb2w+IGV4ZWN1dGFibGVQb29sKQor
ICAgICAgICA6IG1fZXhlY3V0YWJsZVBvb2woZXhlY3V0YWJsZVBvb2wpCisgICAgICAgICwgbV9j
b2RlKG1hc20tPm1fYXNzZW1ibGVyLmV4ZWN1dGFibGVDb3B5KG1fZXhlY3V0YWJsZVBvb2wuZ2V0
KCkpKQorICAgICAgICAsIG1fc2l6ZShtYXNtLT5tX2Fzc2VtYmxlci5zaXplKCkpCisjaWZuZGVm
IE5ERUJVRworICAgICAgICAsIG1fY29tcGxldGVkKGZhbHNlKQorI2VuZGlmCisgICAgeworICAg
IH0KKworICAgIH5MaW5rQnVmZmVyKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2NvbXBsZXRl
ZCk7CisgICAgfQorCisgICAgLy8gVGhlc2UgbWV0aG9kcyBhcmUgdXNlZCB0byBsaW5rIG9yIHNl
dCB2YWx1ZXMgYXQgY29kZSBnZW5lcmF0aW9uIHRpbWUuCisKKyAgICB2b2lkIGxpbmsoQ2FsbCBj
YWxsLCBGdW5jdGlvblB0ciBmdW5jdGlvbikKKyAgICB7CisgICAgICAgIEFTU0VSVChjYWxsLmlz
RmxhZ1NldChDYWxsOjpMaW5rYWJsZSkpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6bGlua0Nh
bGwoY29kZSgpLCBjYWxsLCBmdW5jdGlvbik7CisgICAgfQorICAgIAorICAgIHZvaWQgbGluayhK
dW1wIGp1bXAsIENvZGVMb2NhdGlvbkxhYmVsIGxhYmVsKQorICAgIHsKKyAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OmxpbmtKdW1wKGNvZGUoKSwganVtcCwgbGFiZWwpOworICAgIH0KKworICAgIHZv
aWQgbGluayhKdW1wTGlzdCBsaXN0LCBDb2RlTG9jYXRpb25MYWJlbCBsYWJlbCkKKyAgICB7Cisg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsaXN0Lm1fanVtcHMuc2l6ZSgpOyArK2kp
CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6bGlua0p1bXAoY29kZSgpLCBsaXN0Lm1fanVt
cHNbaV0sIGxhYmVsKTsKKyAgICB9CisKKyAgICB2b2lkIHBhdGNoKERhdGFMYWJlbFB0ciBsYWJl
bCwgdm9pZCogdmFsdWUpCisgICAgeworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6bGlua1BvaW50
ZXIoY29kZSgpLCBsYWJlbC5tX2xhYmVsLCB2YWx1ZSk7CisgICAgfQorCisgICAgdm9pZCBwYXRj
aChEYXRhTGFiZWxQdHIgbGFiZWwsIENvZGVMb2NhdGlvbkxhYmVsIHZhbHVlKQorICAgIHsKKyAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OmxpbmtQb2ludGVyKGNvZGUoKSwgbGFiZWwubV9sYWJlbCwg
dmFsdWUuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgfQorCisgICAgLy8gVGhlc2UgbWV0aG9k
cyBhcmUgdXNlZCB0byBvYnRhaW4gaGFuZGxlcyB0byBhbGxvdyB0aGUgY29kZSB0byBiZSByZWxp
bmtlZCAvIHJlcGF0Y2hlZCBsYXRlci4KKworICAgIENvZGVMb2NhdGlvbkNhbGwgbG9jYXRpb25P
ZihDYWxsIGNhbGwpCisgICAgeworICAgICAgICBBU1NFUlQoY2FsbC5pc0ZsYWdTZXQoQ2FsbDo6
TGlua2FibGUpKTsKKyAgICAgICAgQVNTRVJUKCFjYWxsLmlzRmxhZ1NldChDYWxsOjpOZWFyKSk7
CisgICAgICAgIHJldHVybiBDb2RlTG9jYXRpb25DYWxsKE1hY3JvQXNzZW1ibGVyOjpnZXRMaW5r
ZXJBZGRyZXNzKGNvZGUoKSwgY2FsbC5tX2ptcCkpOworICAgIH0KKworICAgIENvZGVMb2NhdGlv
bk5lYXJDYWxsIGxvY2F0aW9uT2ZOZWFyQ2FsbChDYWxsIGNhbGwpCisgICAgeworICAgICAgICBB
U1NFUlQoY2FsbC5pc0ZsYWdTZXQoQ2FsbDo6TGlua2FibGUpKTsKKyAgICAgICAgQVNTRVJUKGNh
bGwuaXNGbGFnU2V0KENhbGw6Ok5lYXIpKTsKKyAgICAgICAgcmV0dXJuIENvZGVMb2NhdGlvbk5l
YXJDYWxsKE1hY3JvQXNzZW1ibGVyOjpnZXRMaW5rZXJBZGRyZXNzKGNvZGUoKSwgY2FsbC5tX2pt
cCkpOworICAgIH0KKworICAgIENvZGVMb2NhdGlvbkxhYmVsIGxvY2F0aW9uT2YoTGFiZWwgbGFi
ZWwpCisgICAgeworICAgICAgICByZXR1cm4gQ29kZUxvY2F0aW9uTGFiZWwoTWFjcm9Bc3NlbWJs
ZXI6OmdldExpbmtlckFkZHJlc3MoY29kZSgpLCBsYWJlbC5tX2xhYmVsKSk7CisgICAgfQorCisg
ICAgQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyIGxvY2F0aW9uT2YoRGF0YUxhYmVsUHRyIGxhYmVs
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0cihNYWNyb0Fz
c2VtYmxlcjo6Z2V0TGlua2VyQWRkcmVzcyhjb2RlKCksIGxhYmVsLm1fbGFiZWwpKTsKKyAgICB9
CisKKyAgICBDb2RlTG9jYXRpb25EYXRhTGFiZWwzMiBsb2NhdGlvbk9mKERhdGFMYWJlbDMyIGxh
YmVsKQorICAgIHsKKyAgICAgICAgcmV0dXJuIENvZGVMb2NhdGlvbkRhdGFMYWJlbDMyKE1hY3Jv
QXNzZW1ibGVyOjpnZXRMaW5rZXJBZGRyZXNzKGNvZGUoKSwgbGFiZWwubV9sYWJlbCkpOworICAg
IH0KKworICAgIC8vIFRoaXMgbWV0aG9kIG9idGFpbnMgdGhlIHJldHVybiBhZGRyZXNzIG9mIHRo
ZSBjYWxsLCBnaXZlbiBhcyBhbiBvZmZzZXQgZnJvbQorICAgIC8vIHRoZSBzdGFydCBvZiB0aGUg
Y29kZS4KKyAgICB1bnNpZ25lZCByZXR1cm5BZGRyZXNzT2Zmc2V0KENhbGwgY2FsbCkKKyAgICB7
CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlcjo6Z2V0TGlua2VyQ2FsbFJldHVybk9mZnNl
dChjYWxsKTsKKyAgICB9CisKKyAgICAvLyBVcG9uIGNvbXBsZXRpb24gb2YgYWxsIHBhdGNoaW5n
IGVpdGhlciAnZmluYWxpemVDb2RlKCknIG9yICdmaW5hbGl6ZUNvZGVBZGRlbmR1bSgpJyBzaG91
bGQgYmUgY2FsbGVkCisgICAgLy8gb25jZSB0byBjb21wbGV0ZSBnZW5lcmF0aW9uIG9mIHRoZSBj
b2RlLiAgJ2ZpbmFsaXplQ29kZSgpJyBpcyBzdWl0ZWQgdG8gc2l0dWF0aW9ucworICAgIC8vIHdo
ZXJlIHRoZSBleGVjdXRhYmxlIHBvb2wgbXVzdCBhbHNvIGJlIHJldGFpbmVkLCB0aGUgbGlnaHRl
ci13ZWlnaHQgJ2ZpbmFsaXplQ29kZUFkZGVuZHVtKCknIGlzCisgICAgLy8gc3VpdGVkIHRvIGFk
ZGluZyB0byBhbiBleGlzdGluZyBhbGxvY2F0aW9uLgorICAgIENvZGVSZWYgZmluYWxpemVDb2Rl
KCkKKyAgICB7CisgICAgICAgIHBlcmZvcm1GaW5hbGl6YXRpb24oKTsKKworICAgICAgICByZXR1
cm4gQ29kZVJlZihtX2NvZGUsIG1fZXhlY3V0YWJsZVBvb2wsIG1fc2l6ZSk7CisgICAgfQorICAg
IENvZGVMb2NhdGlvbkxhYmVsIGZpbmFsaXplQ29kZUFkZGVuZHVtKCkKKyAgICB7CisgICAgICAg
IHBlcmZvcm1GaW5hbGl6YXRpb24oKTsKKworICAgICAgICByZXR1cm4gQ29kZUxvY2F0aW9uTGFi
ZWwoY29kZSgpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgLy8gS2VlcCB0aGlzIHByaXZhdGUh
IC0gdGhlIHVuZGVybHlpbmcgY29kZSBzaG91bGQgb25seSBiZSBvYnRhaW5lZCBleHRlcm5hbGx5
IHZpYSAKKyAgICAvLyBmaW5hbGl6ZUNvZGUoKSBvciBmaW5hbGl6ZUNvZGVBZGRlbmR1bSgpLgor
ICAgIHZvaWQqIGNvZGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fY29kZTsKKyAgICB9CisK
KyAgICB2b2lkIHBlcmZvcm1GaW5hbGl6YXRpb24oKQorICAgIHsKKyNpZm5kZWYgTkRFQlVHCisg
ICAgICAgIEFTU0VSVCghbV9jb21wbGV0ZWQpOworICAgICAgICBtX2NvbXBsZXRlZCA9IHRydWU7
CisjZW5kaWYKKworICAgICAgICBFeGVjdXRhYmxlQWxsb2NhdG9yOjptYWtlRXhlY3V0YWJsZShj
b2RlKCksIG1fc2l6ZSk7CisgICAgfQorCisgICAgUmVmUHRyPEV4ZWN1dGFibGVQb29sPiBtX2V4
ZWN1dGFibGVQb29sOworICAgIHZvaWQqIG1fY29kZTsKKyAgICBzaXplX3QgbV9zaXplOworI2lm
bmRlZiBOREVCVUcKKyAgICBib29sIG1fY29tcGxldGVkOworI2VuZGlmCit9OworCit9IC8vIG5h
bWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShBU1NFTUJMRVIpCisKKyNlbmRpZiAvLyBM
aW5rQnVmZmVyX2gKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9SZXBhdGNoQnVmZmVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1JlcGF0Y2hCdWZmZXIu
aAkocmV2aXNpb24gMCkKKysrIEphdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9SZXBhdGNoQnVmZmVy
LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTIyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgUmVwYXRjaEJ1ZmZlcl9oCisjZGVmaW5l
IFJlcGF0Y2hCdWZmZXJfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFC
TEUoQVNTRU1CTEVSKQorCisjaW5jbHVkZSA8TWFjcm9Bc3NlbWJsZXIuaD4KKyNpbmNsdWRlIDx3
dGYvTm9uY29weWFibGUuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKKy8vIFJlcGF0Y2hCdWZmZXI6
CisvLworLy8gVGhpcyBjbGFzcyBpcyB1c2VkIHRvIG1vZGlmeSBjb2RlIGFmdGVyIGNvZGUgZ2Vu
ZXJhdGlvbiBoYXMgYmVlbiBjb21wbGV0ZWQsCisvLyBhbmQgYWZ0ZXIgdGhlIGNvZGUgaGFzIHBv
dGVudGlhbGx5IGFscmVhZHkgYmVlbiBleGVjdXRlZC4gIFRoaXMgbWVjaGFuaXNtIGlzCisvLyB1
c2VkIHRvIGFwcGx5IG9wdGltaXphdGlvbnMgdG8gdGhlIGNvZGUuCisvLworY2xhc3MgUmVwYXRj
aEJ1ZmZlciB7CisgICAgdHlwZWRlZiBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgQ29kZVB0cjsKKwor
cHVibGljOgorICAgIFJlcGF0Y2hCdWZmZXIoKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIHJl
bGluayhDb2RlTG9jYXRpb25KdW1wIGp1bXAsIENvZGVMb2NhdGlvbkxhYmVsIGRlc3RpbmF0aW9u
KQorICAgIHsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hKdW1wKGp1bXAsIGRlc3Rp
bmF0aW9uKTsKKyAgICB9CisKKyAgICB2b2lkIHJlbGluayhDb2RlTG9jYXRpb25DYWxsIGNhbGws
IENvZGVMb2NhdGlvbkxhYmVsIGRlc3RpbmF0aW9uKQorICAgIHsKKyAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OnJlcGF0Y2hDYWxsKGNhbGwsIGRlc3RpbmF0aW9uKTsKKyAgICB9CisKKyAgICB2b2lk
IHJlbGluayhDb2RlTG9jYXRpb25DYWxsIGNhbGwsIEZ1bmN0aW9uUHRyIGRlc3RpbmF0aW9uKQor
ICAgIHsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDYWxsKGNhbGwsIGRlc3RpbmF0
aW9uKTsKKyAgICB9CisKKyAgICB2b2lkIHJlbGluayhDb2RlTG9jYXRpb25OZWFyQ2FsbCBuZWFy
Q2FsbCwgQ29kZVB0ciBkZXN0aW5hdGlvbikKKyAgICB7CisgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpyZXBhdGNoTmVhckNhbGwobmVhckNhbGwsIENvZGVMb2NhdGlvbkxhYmVsKGRlc3RpbmF0aW9u
KSk7CisgICAgfQorCisgICAgdm9pZCByZWxpbmsoQ29kZUxvY2F0aW9uTmVhckNhbGwgbmVhckNh
bGwsIENvZGVMb2NhdGlvbkxhYmVsIGRlc3RpbmF0aW9uKQorICAgIHsKKyAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OnJlcGF0Y2hOZWFyQ2FsbChuZWFyQ2FsbCwgZGVzdGluYXRpb24pOworICAgIH0K
KworICAgIHZvaWQgcmVwYXRjaChDb2RlTG9jYXRpb25EYXRhTGFiZWwzMiBkYXRhTGFiZWwzMiwg
aW50MzJfdCB2YWx1ZSkKKyAgICB7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSW50
MzIoZGF0YUxhYmVsMzIsIHZhbHVlKTsKKyAgICB9CisKKyAgICB2b2lkIHJlcGF0Y2goQ29kZUxv
Y2F0aW9uRGF0YUxhYmVsUHRyIGRhdGFMYWJlbFB0ciwgdm9pZCogdmFsdWUpCisgICAgeworICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIoZGF0YUxhYmVsUHRyLCB2YWx1ZSk7
CisgICAgfQorCisgICAgdm9pZCByZXBhdGNoTG9hZFB0clRvTEVBKENvZGVMb2NhdGlvbkluc3Ry
dWN0aW9uIGluc3RydWN0aW9uKQorICAgIHsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0
Y2hMb2FkUHRyVG9MRUEoaW5zdHJ1Y3Rpb24pOworICAgIH0KKworICAgIHZvaWQgcmVsaW5rQ2Fs
bGVyVG9UcmFtcG9saW5lKFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgQ29kZUxvY2F0
aW9uTGFiZWwgbGFiZWwpCisgICAgeworICAgICAgICByZWxpbmsoQ29kZUxvY2F0aW9uQ2FsbChD
b2RlUHRyKHJldHVybkFkZHJlc3MpKSwgbGFiZWwpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHJl
bGlua0NhbGxlclRvVHJhbXBvbGluZShSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIENv
ZGVQdHIgbmV3Q2FsbGVlRnVuY3Rpb24pCisgICAgeworICAgICAgICByZWxpbmtDYWxsZXJUb1Ry
YW1wb2xpbmUocmV0dXJuQWRkcmVzcywgQ29kZUxvY2F0aW9uTGFiZWwobmV3Q2FsbGVlRnVuY3Rp
b24pKTsKKyAgICB9CisKKyAgICB2b2lkIHJlbGlua0NhbGxlclRvRnVuY3Rpb24oUmV0dXJuQWRk
cmVzc1B0ciByZXR1cm5BZGRyZXNzLCBGdW5jdGlvblB0ciBmdW5jdGlvbikKKyAgICB7CisgICAg
ICAgIHJlbGluayhDb2RlTG9jYXRpb25DYWxsKENvZGVQdHIocmV0dXJuQWRkcmVzcykpLCBmdW5j
dGlvbik7CisgICAgfQorICAgIAorICAgIHZvaWQgcmVsaW5rTmVhckNhbGxlclRvVHJhbXBvbGlu
ZShSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIENvZGVMb2NhdGlvbkxhYmVsIGxhYmVs
KQorICAgIHsKKyAgICAgICAgcmVsaW5rKENvZGVMb2NhdGlvbk5lYXJDYWxsKENvZGVQdHIocmV0
dXJuQWRkcmVzcykpLCBsYWJlbCk7CisgICAgfQorICAgIAorICAgIHZvaWQgcmVsaW5rTmVhckNh
bGxlclRvVHJhbXBvbGluZShSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIENvZGVQdHIg
bmV3Q2FsbGVlRnVuY3Rpb24pCisgICAgeworICAgICAgICByZWxpbmtOZWFyQ2FsbGVyVG9UcmFt
cG9saW5lKHJldHVybkFkZHJlc3MsIENvZGVMb2NhdGlvbkxhYmVsKG5ld0NhbGxlZUZ1bmN0aW9u
KSk7CisgICAgfQorfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUo
QVNTRU1CTEVSKQorCisjZW5kaWYgLy8gUmVwYXRjaEJ1ZmZlcl9oCkluZGV4OiBKYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oCShyZXZpc2lvbiA0NjE0NykKKysrIEphdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9YODZBc3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTM2Nyw1
OSArMTM2Nyw1OSBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVCh0by5tX29mZnNldCAhPSAtMSk7
CiAKICAgICAgICAgY2hhciogY29kZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG1fZm9ybWF0
dGVyLmRhdGEoKSk7Ci0gICAgICAgIHBhdGNoUmVsMzIoY29kZSArIGZyb20ubV9vZmZzZXQsIGNv
ZGUgKyB0by5tX29mZnNldCk7CisgICAgICAgIHNldFJlbDMyKGNvZGUgKyBmcm9tLm1fb2Zmc2V0
LCBjb2RlICsgdG8ubV9vZmZzZXQpOwogICAgIH0KICAgICAKICAgICBzdGF0aWMgdm9pZCBsaW5r
SnVtcCh2b2lkKiBjb2RlLCBKbXBTcmMgZnJvbSwgdm9pZCogdG8pCiAgICAgewogICAgICAgICBB
U1NFUlQoZnJvbS5tX29mZnNldCAhPSAtMSk7CiAKLSAgICAgICAgcGF0Y2hSZWwzMihyZWludGVy
cHJldF9jYXN0PGNoYXIqPihjb2RlKSArIGZyb20ubV9vZmZzZXQsIHRvKTsKKyAgICAgICAgc2V0
UmVsMzIocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oY29kZSkgKyBmcm9tLm1fb2Zmc2V0LCB0byk7
CiAgICAgfQogCiAgICAgc3RhdGljIHZvaWQgbGlua0NhbGwodm9pZCogY29kZSwgSm1wU3JjIGZy
b20sIHZvaWQqIHRvKQogICAgIHsKICAgICAgICAgQVNTRVJUKGZyb20ubV9vZmZzZXQgIT0gLTEp
OwogCi0gICAgICAgIHBhdGNoUmVsMzIocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oY29kZSkgKyBm
cm9tLm1fb2Zmc2V0LCB0byk7CisgICAgICAgIHNldFJlbDMyKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hh
cio+KGNvZGUpICsgZnJvbS5tX29mZnNldCwgdG8pOwogICAgIH0KIAogI2lmIFBMQVRGT1JNKFg4
Nl82NCkKLSAgICBzdGF0aWMgdm9pZCBwYXRjaFBvaW50ZXJGb3JDYWxsKHZvaWQqIHdoZXJlLCB2
b2lkKiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBsaW5rUG9pbnRlckZvckNhbGwodm9pZCogd2hl
cmUsIHZvaWQqIHZhbHVlKQogICAgIHsKICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+
KHdoZXJlKVstMV0gPSB2YWx1ZTsKICAgICB9CiAjZW5kaWYKIAotICAgIHN0YXRpYyB2b2lkIHBh
dGNoUG9pbnRlcih2b2lkKiBjb2RlLCBKbXBEc3Qgd2hlcmUsIHZvaWQqIHZhbHVlKQorICAgIHN0
YXRpYyB2b2lkIGxpbmtQb2ludGVyKHZvaWQqIGNvZGUsIEptcERzdCB3aGVyZSwgdm9pZCogdmFs
dWUpCiAgICAgewogICAgICAgICBBU1NFUlQod2hlcmUubV9vZmZzZXQgIT0gLTEpOwogCi0gICAg
ICAgIHBhdGNoUG9pbnRlcihyZWludGVycHJldF9jYXN0PGNoYXIqPihjb2RlKSArIHdoZXJlLm1f
b2Zmc2V0LCB2YWx1ZSk7CisgICAgICAgIHNldFBvaW50ZXIocmVpbnRlcnByZXRfY2FzdDxjaGFy
Kj4oY29kZSkgKyB3aGVyZS5tX29mZnNldCwgdmFsdWUpOwogICAgIH0KIAogICAgIHN0YXRpYyB2
b2lkIHJlbGlua0p1bXAodm9pZCogZnJvbSwgdm9pZCogdG8pCiAgICAgewogICAgICAgICBFeGVj
dXRhYmxlQWxsb2NhdG9yOjpNYWtlV3JpdGFibGUgdW5wcm90ZWN0KHJlaW50ZXJwcmV0X2Nhc3Q8
Y2hhcio+KGZyb20pIC0gc2l6ZW9mKGludDMyX3QpLCBzaXplb2YoaW50MzJfdCkpOwotICAgICAg
ICBwYXRjaFJlbDMyKGZyb20sIHRvKTsKKyAgICAgICAgc2V0UmVsMzIoZnJvbSwgdG8pOwogICAg
IH0KICAgICAKICAgICBzdGF0aWMgdm9pZCByZWxpbmtDYWxsKHZvaWQqIGZyb20sIHZvaWQqIHRv
KQogICAgIHsKICAgICAgICAgRXhlY3V0YWJsZUFsbG9jYXRvcjo6TWFrZVdyaXRhYmxlIHVucHJv
dGVjdChyZWludGVycHJldF9jYXN0PGNoYXIqPihmcm9tKSAtIHNpemVvZihpbnQzMl90KSwgc2l6
ZW9mKGludDMyX3QpKTsKLSAgICAgICAgcGF0Y2hSZWwzMihmcm9tLCB0byk7CisgICAgICAgIHNl
dFJlbDMyKGZyb20sIHRvKTsKICAgICB9CiAKICAgICBzdGF0aWMgdm9pZCByZXBhdGNoSW50MzIo
dm9pZCogd2hlcmUsIGludDMyX3QgdmFsdWUpCiAgICAgewogICAgICAgICBFeGVjdXRhYmxlQWxs
b2NhdG9yOjpNYWtlV3JpdGFibGUgdW5wcm90ZWN0KHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHdo
ZXJlKSAtIHNpemVvZihpbnQzMl90KSwgc2l6ZW9mKGludDMyX3QpKTsKLSAgICAgICAgcGF0Y2hJ
bnQzMih3aGVyZSwgdmFsdWUpOworICAgICAgICBzZXRJbnQzMih3aGVyZSwgdmFsdWUpOwogICAg
IH0KIAogICAgIHN0YXRpYyB2b2lkIHJlcGF0Y2hQb2ludGVyKHZvaWQqIHdoZXJlLCB2b2lkKiB2
YWx1ZSkKICAgICB7CiAgICAgICAgIEV4ZWN1dGFibGVBbGxvY2F0b3I6Ok1ha2VXcml0YWJsZSB1
bnByb3RlY3QocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4od2hlcmUpIC0gc2l6ZW9mKHZvaWQqKSwg
c2l6ZW9mKHZvaWQqKSk7Ci0gICAgICAgIHBhdGNoUG9pbnRlcih3aGVyZSwgdmFsdWUpOworICAg
ICAgICBzZXRQb2ludGVyKHdoZXJlLCB2YWx1ZSk7CiAgICAgfQogCiAgICAgc3RhdGljIHZvaWQg
cmVwYXRjaExvYWRQdHJUb0xFQSh2b2lkKiB3aGVyZSkKQEAgLTE0NzcsMjIgKzE0NzcsMjIgQEAg
cHVibGljOgogCiBwcml2YXRlOgogCi0gICAgc3RhdGljIHZvaWQgcGF0Y2hQb2ludGVyKHZvaWQq
IHdoZXJlLCB2b2lkKiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBzZXRQb2ludGVyKHZvaWQqIHdo
ZXJlLCB2b2lkKiB2YWx1ZSkKICAgICB7CiAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoq
Pih3aGVyZSlbLTFdID0gdmFsdWU7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgcGF0Y2hJbnQz
Mih2b2lkKiB3aGVyZSwgaW50MzJfdCB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBzZXRJbnQzMih2
b2lkKiB3aGVyZSwgaW50MzJfdCB2YWx1ZSkKICAgICB7CiAgICAgICAgIHJlaW50ZXJwcmV0X2Nh
c3Q8aW50MzJfdCo+KHdoZXJlKVstMV0gPSB2YWx1ZTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9p
ZCBwYXRjaFJlbDMyKHZvaWQqIGZyb20sIHZvaWQqIHRvKQorICAgIHN0YXRpYyB2b2lkIHNldFJl
bDMyKHZvaWQqIGZyb20sIHZvaWQqIHRvKQogICAgIHsKICAgICAgICAgaW50cHRyX3Qgb2Zmc2V0
ID0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4odG8pIC0gcmVpbnRlcnByZXRfY2FzdDxpbnRw
dHJfdD4oZnJvbSk7CiAgICAgICAgIEFTU0VSVChvZmZzZXQgPT0gc3RhdGljX2Nhc3Q8aW50MzJf
dD4ob2Zmc2V0KSk7CiAKLSAgICAgICAgcGF0Y2hJbnQzMihmcm9tLCBvZmZzZXQpOworICAgICAg
ICBzZXRJbnQzMihmcm9tLCBvZmZzZXQpOwogICAgIH0KIAogICAgIGNsYXNzIFg4Nkluc3RydWN0
aW9uRm9ybWF0dGVyIHsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIEphdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCShyZXZpc2lvbiA0NjE0NykKKysrIEph
dmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw4IEBA
CiAjaW5jbHVkZSAiSklUU3R1YkNhbGwuaCIKICNpbmNsdWRlICJKU0FycmF5LmgiCiAjaW5jbHVk
ZSAiSlNGdW5jdGlvbi5oIgorI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKKyNpbmNsdWRlICJSZXBh
dGNoQnVmZmVyLmgiCiAjaW5jbHVkZSAiUmVzdWx0VHlwZS5oIgogI2luY2x1ZGUgIlNhbXBsaW5n
VG9vbC5oIgogCkBAIC00NywxOSArNDksMTkgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIHZvaWQgY3Rp
UGF0Y2hOZWFyQ2FsbEJ5UmV0dXJuQWRkcmVzcyhSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJl
c3MsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBuZXdDYWxsZWVGdW5jdGlvbikKIHsKLSAgICBNYWNy
b0Fzc2VtYmxlcjo6UmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyOworICAgIFJlcGF0Y2hCdWZm
ZXIgcmVwYXRjaEJ1ZmZlcjsKICAgICByZXBhdGNoQnVmZmVyLnJlbGlua05lYXJDYWxsZXJUb1Ry
YW1wb2xpbmUocmV0dXJuQWRkcmVzcywgbmV3Q2FsbGVlRnVuY3Rpb24pOwogfQogCiB2b2lkIGN0
aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3Ms
IE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBuZXdDYWxsZWVGdW5jdGlvbikKIHsKLSAgICBNYWNyb0Fz
c2VtYmxlcjo6UmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyOworICAgIFJlcGF0Y2hCdWZmZXIg
cmVwYXRjaEJ1ZmZlcjsKICAgICByZXBhdGNoQnVmZmVyLnJlbGlua0NhbGxlclRvVHJhbXBvbGlu
ZShyZXR1cm5BZGRyZXNzLCBuZXdDYWxsZWVGdW5jdGlvbik7CiB9CiAKIHZvaWQgY3RpUGF0Y2hD
YWxsQnlSZXR1cm5BZGRyZXNzKFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgRnVuY3Rp
b25QdHIgbmV3Q2FsbGVlRnVuY3Rpb24pCiB7Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OlJlcGF0Y2hC
dWZmZXIgcmVwYXRjaEJ1ZmZlcjsKKyAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXI7CiAg
ICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmtDYWxsZXJUb0Z1bmN0aW9uKHJldHVybkFkZHJlc3MsIG5l
d0NhbGxlZUZ1bmN0aW9uKTsKIH0KIApJbmRleDogSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3Bl
cnR5QWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVy
dHlBY2Nlc3MuY3BwCShyZXZpc2lvbiA0NjE0NykKKysrIEphdmFTY3JpcHRDb3JlL2ppdC9KSVRQ
cm9wZXJ0eUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDggQEAKICNpbmNs
dWRlICJKU0FycmF5LmgiCiAjaW5jbHVkZSAiSlNGdW5jdGlvbi5oIgogI2luY2x1ZGUgIkludGVy
cHJldGVyLmgiCisjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgorI2luY2x1ZGUgIlJlcGF0Y2hCdWZm
ZXIuaCIKICNpbmNsdWRlICJSZXN1bHRUeXBlLmgiCiAjaW5jbHVkZSAiU2FtcGxpbmdUb29sLmgi
CiAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3lhcnIvUmVnZXhKSVQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IEphdmFTY3JpcHRDb3JlL3lhcnIvUmVnZXhKSVQuY3BwCShyZXZpc2lvbiA0NjE0NykKKysrIEph
dmFTY3JpcHRDb3JlL3lhcnIvUmVnZXhKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsy
OCw3IEBACiAKICNpbmNsdWRlICJBU0NJSUNUeXBlLmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxEYXRh
LmgiCisjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgogI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyLmgi
CiAjaW5jbHVkZSAiUmVnZXhDb21waWxlci5oIgogCg==
</data>
<flag name="review"
          id="17472"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>