<?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>22671</bug_id>
          
          <creation_ts>2008-12-04 21:44:21 -0800</creation_ts>
          <short_desc>Port the JIT to use the MacroAssembler, stage 1 of N.</short_desc>
          <delta_ts>2008-12-04 22:59:24 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</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>101436</commentid>
    <comment_count>0</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2008-12-04 21:44:21 -0800</bug_when>
    <thetext>Note to self: come back later, edit the bug, update the value of N – look like you totally guessed ahead oh time how many patches this would take.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101437</commentid>
    <comment_count>1</comment_count>
      <attachid>25761</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2008-12-04 22:08:04 -0800</bug_when>
    <thetext>Created attachment 25761
The patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101438</commentid>
    <comment_count>2</comment_count>
      <attachid>25761</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2008-12-04 22:18:36 -0800</bug_when>
    <thetext>Comment on attachment 25761
The patch

r=me

Personally, I don&apos;t think we gain anything by changing things like &quot;mov&quot; and &quot;jo&quot; in the assembler to &quot;move&quot; and &quot;jover&quot; in the macro assembler. I think &quot;jzSub32&quot; and &quot;joAdd32&quot; are probably better names than &quot;jzeroSub32&quot; and &quot;joverAdd32.&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>101441</commentid>
    <comment_count>3</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2008-12-04 22:59:24 -0800</bug_when>
    <thetext>Sending        JavaScriptCore/ChangeLog
Sending        JavaScriptCore/assembler/MacroAssembler.h
Sending        JavaScriptCore/assembler/X86Assembler.h
Sending        JavaScriptCore/jit/JIT.cpp
Sending        JavaScriptCore/jit/JIT.h
Sending        JavaScriptCore/jit/JITArithmetic.cpp
Sending        JavaScriptCore/jit/JITInlineMethods.h
Sending        JavaScriptCore/jit/JITPropertyAccess.cpp
Transmitting file data ........
Committed revision 39020.

</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>25761</attachid>
            <date>2008-12-04 22:08:04 -0800</date>
            <delta_ts>2008-12-04 22:18:36 -0800</delta_ts>
            <desc>The patch</desc>
            <filename>patch.macrojit.txt</filename>
            <type>text/plain</type>
            <size>43615</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDM5MDE5
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNzAgQEAKKzIwMDgtMTIt
MDQgIEdhdmluIEJhcnJhY2xvdWdoICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFN0YXJ0IHBvcnRpbmcgdGhl
IEpJVCB0byB1c2UgdGhlIE1hY3JvQXNzZW1ibGVyLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjY3MQorICAgICAgICBObyBjaGFuZ2UgaW4gcGVy
Zm9ybWFuY2UuCisKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaDoKKyAgICAg
ICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXI6Okp1bXA6Om9wZXJhdG9yIFg4NkFzc2VtYmxlcjo6Sm1w
U3JjKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXI6OmFkZDMyKToKKyAgICAgICAgKEpT
Qzo6TWFjcm9Bc3NlbWJsZXI6OmFuZDMyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXI6
OmxzaGlmdDMyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXI6OnJzaGlmdDMyKToKKyAg
ICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXI6OnN0b3JlUHRyKToKKyAgICAgICAgKEpTQzo6TWFj
cm9Bc3NlbWJsZXI6OnN0b3JlMzIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlcjo6cG9r
ZSk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyOjptb3ZlKToKKyAgICAgICAgKEpTQzo6
TWFjcm9Bc3NlbWJsZXI6OmNvbXBhcmVJbW0zMkZvckJyYW5jaEVxdWFsaXR5KToKKyAgICAgICAg
KEpTQzo6TWFjcm9Bc3NlbWJsZXI6OmpuZVB0cik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1i
bGVyOjpqbnNldDMyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXI6OmpzZXQzMik6Cisg
ICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyOjpqemVyb1N1YjMyKToKKyAgICAgICAgKEpTQzo6
TWFjcm9Bc3NlbWJsZXI6OmpvdmVyQWRkMzIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxl
cjo6Y2FsbCk6CisgICAgICAgICogYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oOgorICAgICAgICAo
SlNDOjpYODZBc3NlbWJsZXI6OnNobGxfaThyKToKKyAgICAgICAgKiBqaXQvSklULmNwcDoKKyAg
ICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKToKKyAgICAgICAgKEpTQzo6
SklUOjpwcml2YXRlQ29tcGlsZSk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVD
VElNYWNoaW5lVHJhbXBvbGluZXMpOgorICAgICAgICAqIGppdC9KSVQuaDoKKyAgICAgICAgKiBq
aXQvSklUQXJpdGhtZXRpYy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZUJpbmFyeUFy
aXRoT3ApOgorICAgICAgICAqIGppdC9KSVRJbmxpbmVNZXRob2RzLmg6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFB1
dENUSUFyZyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFB1dENUSUFyZ0NvbnN0YW50KToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0R2V0Q1RJQXJnKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
UHV0Q1RJQXJnRnJvbVZpcnR1YWxSZWdpc3Rlcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFB1
dENUSVBhcmFtKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0R2V0Q1RJUGFyYW0pOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcik6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdFB1dEltbWVkaWF0ZVRvQ2FsbEZyYW1lSGVhZGVyKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEluaXRSZWdpc3Rlcik6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdE5ha2VkQ2FsbCk6CisgICAgICAgIChKU0M6OkpJVDo6
cmVzdG9yZUFyZ3VtZW50UmVmZXJlbmNlKToKKyAgICAgICAgKEpTQzo6SklUOjpyZXN0b3JlQXJn
dW1lbnRSZWZlcmVuY2VGb3JUcmFtcG9saW5lKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0Q1RJ
Q2FsbCk6CisgICAgICAgIChKU0M6OkpJVDo6Y2hlY2tTdHJ1Y3R1cmUpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbCk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tTnVtKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0SnVt
cFNsb3dDYXNlSWZOb3RJbW1OdW1zKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0RmFzdEFyaXRo
RGVUYWdJbW1lZGlhdGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRGYXN0QXJpdGhEZVRhZ0lt
bWVkaWF0ZUp1bXBJZlplcm8pOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRGYXN0QXJpdGhSZVRh
Z0ltbWVkaWF0ZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEZhc3RBcml0aFBvdGVudGlhbGx5
UmVUYWdJbW1lZGlhdGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRGYXN0QXJpdGhJbW1Ub0lu
dCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEZhc3RBcml0aEludFRvSW1tT3JTbG93Q2FzZSk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEZhc3RBcml0aEludFRvSW1tTm9DaGVjayk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdFRhZ0FzQm9vbEltbWVkaWF0ZSk6CisgICAgICAgICogaml0L0pJ
VFByb3BlcnR5QWNjZXNzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZVB1
dEJ5SWRUcmFuc2l0aW9uKToKKwogMjAwOC0xMi0wNCAgR2VvZmZyZXkgR2FyZW4gIDxnZ2FyZW5A
YXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE9saXZlciBIdW50LgpJbmRleDogYXNz
ZW1ibGVyL01hY3JvQXNzZW1ibGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gYXNzZW1ibGVyL01hY3JvQXNz
ZW1ibGVyLmgJKHJldmlzaW9uIDM5MDA1KQorKysgYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTE4OCw2ICsxODgsMTIgQEAgcHVibGljOgogICAgICAgICAgICAg
QVNTRVJUKG1fYXNzZW1ibGVyKTsKICAgICAgICAgICAgIG1fYXNzZW1ibGVyLT5saW5rKG1fam1w
LCBsYWJlbC5tX2xhYmVsKTsKICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gRklYTUU6
IHRyYW5zaXRpb25hcnkgbWV0aG9kLCB3aGlsZSB3ZSByZXBsYWNlIEptcFNyY2VzIHdpdGggSnVt
cHMuCisgICAgICAgIG9wZXJhdG9yIFg4NkFzc2VtYmxlcjo6Sm1wU3JjKCkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIG1fam1wOworICAgICAgICB9CiAKICAgICBwcml2YXRlOgogICAg
ICAgICBYODZBc3NlbWJsZXIqIG1fYXNzZW1ibGVyOwpAQCAtMjY4LDYgKzI3NCwxMSBAQCBwdWJs
aWM6CiAjZW5kaWYKICAgICB9CiAKKyAgICB2b2lkIGFkZDMyKFJlZ2lzdGVySUQgc3JjLCBSZWdp
c3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5hZGRsX3JyKHNyYywgZGVz
dCk7CisgICAgfQorCiAgICAgdm9pZCBhZGQzMihJbW0zMiBpbW0sIFJlZ2lzdGVySUQgZGVzdCkK
ICAgICB7CiAgICAgICAgIGlmIChDQU5fU0lHTl9FWFRFTkRfOF8zMihpbW0ubV92YWx1ZSkpCkBA
IC0yODEsNiArMjkyLDE2IEBAIHB1YmxpYzoKICAgICAgICAgbV9hc3NlbWJsZXIuYWRkbF9tcihz
cmMub2Zmc2V0LCBzcmMuYmFzZSwgZGVzdCk7CiAgICAgfQogICAgIAorICAgIHZvaWQgYW5kMzIo
UmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1i
bGVyLmFuZGxfcnIoc3JjLCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIGxzaGlmdDMyKEltbTMy
IGltbSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuc2hsbF9p
OHIoaW1tLm1fdmFsdWUsIGRlc3QpOworICAgIH0KKyAgICAKICAgICB2b2lkIG9yMzIoSW1tMzIg
aW1tLCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewogICAgICAgICBpZiAoQ0FOX1NJR05fRVhURU5E
XzhfMzIoaW1tLm1fdmFsdWUpKQpAQCAtMjg5LDYgKzMxMCwxMSBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICBtX2Fzc2VtYmxlci5vcmxfaTMycihpbW0ubV92YWx1ZSwgZGVzdCk7CiAgICAgfQogCisg
ICAgdm9pZCByc2hpZnQzMihJbW0zMiBpbW0sIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAg
ICAgIG1fYXNzZW1ibGVyLnNhcmxfaThyKGltbS5tX3ZhbHVlLCBkZXN0KTsKKyAgICB9CisKICAg
ICB2b2lkIHN1YjMyKEltbTMyIGltbSwgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKICAgICAgICAg
aWYgKENBTl9TSUdOX0VYVEVORF84XzMyKGltbS5tX3ZhbHVlKSkKQEAgLTM2NCw2ICszOTAsMTYg
QEAgcHVibGljOgogI2VuZGlmCiAgICAgfQogICAgIAorI2lmICFQTEFURk9STShYODZfNjQpCisg
ICAgdm9pZCBzdG9yZVB0cih2b2lkKiB2YWx1ZSwgSW1wbGljaXRBZGRyZXNzIGFkZHJlc3MpCisg
ICAgeworICAgICAgICBpZiAoYWRkcmVzcy5vZmZzZXQpCisgICAgICAgICAgICBtX2Fzc2VtYmxl
ci5tb3ZsX2kzMm0ocmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZD4odmFsdWUpLCBhZGRyZXNzLm9m
ZnNldCwgYWRkcmVzcy5iYXNlKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9hc3NlbWJs
ZXIubW92bF9pMzJtKHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQ+KHZhbHVlKSwgYWRkcmVzcy5i
YXNlKTsKKyAgICB9CisjZW5kaWYKKyAgICAKICAgICB2b2lkIHN0b3JlMzIoUmVnaXN0ZXJJRCBz
cmMsIEltcGxpY2l0QWRkcmVzcyBhZGRyZXNzKQogICAgIHsKICAgICAgICAgaWYgKGFkZHJlc3Mu
b2Zmc2V0KQpAQCAtMzc0LDkgKzQxMCwxOCBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBzdG9y
ZTMyKEltbTMyIGltbSwgSW1wbGljaXRBZGRyZXNzIGFkZHJlc3MpCiAgICAgewotICAgICAgICAv
LyBGSVhNRTogYWRkIGEgdmVyc2lvbiB0aGF0IGRvZXNuJ3QgdGFrZSBhbiBvZmZzZXQKLSAgICAg
ICAgbV9hc3NlbWJsZXIubW92bF9pMzJtKGltbS5tX3ZhbHVlLCBhZGRyZXNzLm9mZnNldCwgYWRk
cmVzcy5iYXNlKTsKKyAgICAgICAgaWYgKGFkZHJlc3Mub2Zmc2V0KQorICAgICAgICAgICAgbV9h
c3NlbWJsZXIubW92bF9pMzJtKGltbS5tX3ZhbHVlLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5i
YXNlKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9hc3NlbWJsZXIubW92bF9pMzJtKGlt
bS5tX3ZhbHVlLCBhZGRyZXNzLmJhc2UpOworICAgIH0KKyAgICAKKyNpZiAhUExBVEZPUk0oWDg2
XzY0KQorICAgIHZvaWQgc3RvcmUzMihJbW0zMiBpbW0sIHZvaWQqIGFkZHJlc3MpCisgICAgewor
ICAgICAgICBtX2Fzc2VtYmxlci5tb3ZsX2kzMm0oaW1tLm1fdmFsdWUsIGFkZHJlc3MpOwogICAg
IH0KKyNlbmRpZgogCiAKICAgICAvLyBTdGFjayBtYW5pcHVsYXRpb24gb3BlcmF0aW9uczoKQEAg
LTQyMCw2ICs0NjUsMTcgQEAgcHVibGljOgogICAgICAgICBzdG9yZVB0cihzcmMsIEFkZHJlc3Mo
WDg2Ojplc3AsIChpbmRleCAqIHNpemVvZih2b2lkICopKSkpOwogICAgIH0KIAorICAgIHZvaWQg
cG9rZShJbW0zMiB2YWx1ZSwgaW50IGluZGV4ID0gMCkKKyAgICB7CisgICAgICAgIHN0b3JlMzIo
dmFsdWUsIEFkZHJlc3MoWDg2Ojplc3AsIChpbmRleCAqIHNpemVvZih2b2lkICopKSkpOworICAg
IH0KKworI2lmICFQTEFURk9STShYODZfNjQpCisgICAgdm9pZCBwb2tlKHZvaWQqIHZhbHVlLCBp
bnQgaW5kZXggPSAwKQorICAgIHsKKyAgICAgICAgc3RvcmVQdHIodmFsdWUsIEFkZHJlc3MoWDg2
Ojplc3AsIChpbmRleCAqIHNpemVvZih2b2lkICopKSkpOworICAgIH0KKyNlbmRpZgogCiAgICAg
Ly8gUmVnaXN0ZXIgbW92ZSBvcGVyYXRpb25zOgogICAgIC8vCkBAIC00NDYsNiArNTAyLDEzIEBA
IHB1YmxpYzoKICNlbmRpZgogICAgIH0KIAorI2lmICFQTEFURk9STShYODZfNjQpCisgICAgdm9p
ZCBtb3ZlKHZvaWQqIHZhbHVlLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fz
c2VtYmxlci5tb3ZsX2kzMnIocmVpbnRlcnByZXRfY2FzdDxpbnQzMl90Pih2YWx1ZSksIGRlc3Qp
OworICAgIH0KKyNlbmRpZgorCiAKICAgICAvLyBGb3J3YXJkcyAvIGV4dGVybmFsIGNvbnRyb2wg
ZmxvdyBvcGVyYXRpb25zOgogICAgIC8vCkBAIC00ODEsNiArNTQ0LDIxIEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICBtX2Fzc2VtYmxlci5jbXBsX2kzMnIoaW1tLCByZWcpOwogICAgIH0KIAorICAg
IHZvaWQgY29tcGFyZUltbTMyRm9yQnJhbmNoRXF1YWxpdHkoQWRkcmVzcyBhZGRyZXNzLCBpbnQz
Ml90IGltbSkKKyAgICB7CisgICAgICAgIGlmIChDQU5fU0lHTl9FWFRFTkRfOF8zMihpbW0pKSB7
CisgICAgICAgICAgICBpZiAoYWRkcmVzcy5vZmZzZXQpCisgICAgICAgICAgICAgICAgbV9hc3Nl
bWJsZXIuY21wbF9pOG0oaW1tLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlKTsKKyAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX2Fzc2VtYmxlci5jbXBsX2k4bShpbW0sIGFk
ZHJlc3MuYmFzZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoYWRkcmVzcy5v
ZmZzZXQpCisgICAgICAgICAgICAgICAgbV9hc3NlbWJsZXIuY21wbF9pMzJtKGltbSwgYWRkcmVz
cy5vZmZzZXQsIGFkZHJlc3MuYmFzZSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgbV9hc3NlbWJsZXIuY21wbF9pMzJtKGltbSwgYWRkcmVzcy5iYXNlKTsKKyAgICAgICAgfQor
ICAgIH0KKwogcHVibGljOgogICAgIEp1bXAgamFlMzIoUmVnaXN0ZXJJRCBsZWZ0LCBJbW0zMiBy
aWdodCkKICAgICB7CkBAIC01NTEsNyArNjI5LDE1IEBAIHB1YmxpYzoKICAgICAgICAgY29tcGFy
ZUltbTMyRm9yQnJhbmNoKGxlZnQsIHJpZ2h0Lm1fdmFsdWUpOwogICAgICAgICByZXR1cm4gSnVt
cChtX2Fzc2VtYmxlciwgbV9hc3NlbWJsZXIuamxlKCkpOwogICAgIH0KLSAgICAKKworI2lmICFQ
TEFURk9STShYODZfNjQpCisgICAgSnVtcCBqbmVQdHIodm9pZCogcHRyLCBBZGRyZXNzIGFkZHJl
c3MpCisgICAgeworICAgICAgICBjb21wYXJlSW1tMzJGb3JCcmFuY2hFcXVhbGl0eShhZGRyZXNz
LCByZWludGVycHJldF9jYXN0PHVpbnQzMl90PihwdHIpKTsKKyAgICAgICAgcmV0dXJuIEp1bXAo
bV9hc3NlbWJsZXIsIG1fYXNzZW1ibGVyLmpuZSgpKTsKKyAgICB9CisjZW5kaWYKKwogICAgIEp1
bXAgam5lMzIoUmVnaXN0ZXJJRCBvcDEsIFJlZ2lzdGVySUQgb3AyKQogICAgIHsKICAgICAgICAg
bV9hc3NlbWJsZXIuY21wbF9ycihvcDEsIG9wMik7CkBAIC01NjQsNiArNjUwLDI2IEBAIHB1Ymxp
YzoKICAgICAgICAgcmV0dXJuIEp1bXAobV9hc3NlbWJsZXIsIG1fYXNzZW1ibGVyLmpuZSgpKTsK
ICAgICB9CiAKKyAgICBKdW1wIGpuc2V0MzIoSW1tMzIgaW1tLCBSZWdpc3RlcklEIHJlZykKKyAg
ICB7CisgICAgICAgIC8vIGlmIHdlIGFyZSBvbmx5IGludGVyZXN0ZWQgaW4gdGhlIGxvdyBzZXZl
biBiaXRzLCB0aGlzIGNhbiBiZSB0ZXN0ZWQgd2l0aCBhIHRlc3RiCisgICAgICAgIGlmICgoaW1t
Lm1fdmFsdWUgJiB+MHg3ZikgPT0gMCkKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnRlc3RiX2k4
cihpbW0ubV92YWx1ZSwgcmVnKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9hc3NlbWJs
ZXIudGVzdGxfaTMycihpbW0ubV92YWx1ZSwgcmVnKTsKKyAgICAgICAgcmV0dXJuIEp1bXAobV9h
c3NlbWJsZXIsIG1fYXNzZW1ibGVyLmplKCkpOworICAgIH0KKworICAgIEp1bXAganNldDMyKElt
bTMyIGltbSwgUmVnaXN0ZXJJRCByZWcpCisgICAgeworICAgICAgICAvLyBpZiB3ZSBhcmUgb25s
eSBpbnRlcmVzdGVkIGluIHRoZSBsb3cgc2V2ZW4gYml0cywgdGhpcyBjYW4gYmUgdGVzdGVkIHdp
dGggYSB0ZXN0YgorICAgICAgICBpZiAoKGltbS5tX3ZhbHVlICYgfjB4N2YpID09IDApCisgICAg
ICAgICAgICBtX2Fzc2VtYmxlci50ZXN0Yl9pOHIoaW1tLm1fdmFsdWUsIHJlZyk7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnRlc3RsX2kzMnIoaW1tLm1fdmFsdWUsIHJl
Zyk7CisgICAgICAgIHJldHVybiBKdW1wKG1fYXNzZW1ibGVyLCBtX2Fzc2VtYmxlci5qbmUoKSk7
CisgICAgfQorCiAgICAgSnVtcCBqdW1wKCkKICAgICB7CiAgICAgICAgIHJldHVybiBKdW1wKG1f
YXNzZW1ibGVyLCBtX2Fzc2VtYmxlci5qbXAoKSk7CkBAIC02MjYsNiArNzMyLDMyIEBAIHB1Ymxp
YzoKICAgICB9CiAKIAorICAgIC8vIEFyaXRobWV0aWMgY29udHJvbCBmbG93IG9wZXJhdGlvbnM6
CisgICAgLy8KKyAgICAvLyBUaGlzIHNldCBvZiBjb25kaXRpb25hbCBicmFuY2ggb3BlcmF0aW9u
cyBicmFuY2ggYmFzZWQKKyAgICAvLyBvbiB0aGUgcmVzdWx0IG9mIGFuIGFyaXRobWV0aWMgb3Bl
cmF0aW9uLiAgVGhlIG9wZXJhdGlvbgorICAgIC8vIGlzIHBlcmZvcm1lZCBhcyBub3JtYWwsIHN0
b3JpbmcgdGhlIHJlc3VsdC4KKyAgICAvLworICAgIC8vICoganplcm8gb3BlcmF0aW9ucyBicmFu
Y2ggaWYgdGhlIHJlc3VsdCBpcyB6ZXJvLgorICAgIC8vICogam92ZXIgb3BlcmF0aW9ucyBicmFu
Y2ggaWYgdGhlIChzaWduZWQpIGFyaXRobWV0aWMKKyAgICAvLyAgIG9wZXJhdGlvbiBjYXVzZWQg
YW4gb3ZlcmZsb3cgdG8gb2NjdXIuCisKKyAgICBKdW1wIGp6ZXJvU3ViMzIoSW1tMzIgaW1tLCBS
ZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBpZiAoQ0FOX1NJR05fRVhURU5EXzhfMzIo
aW1tLm1fdmFsdWUpKQorICAgICAgICAgICAgbV9hc3NlbWJsZXIuc3VibF9pOHIoaW1tLm1fdmFs
dWUsIGRlc3QpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5zdWJsX2kz
MnIoaW1tLm1fdmFsdWUsIGRlc3QpOworICAgICAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlciwg
bV9hc3NlbWJsZXIuamUoKSk7CisgICAgfQorICAgIAorICAgIEp1bXAgam92ZXJBZGQzMihSZWdp
c3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIu
YWRkbF9ycihzcmMsIGRlc3QpOworICAgICAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlciwgbV9h
c3NlbWJsZXIuam8oKSk7CisgICAgfQorICAgIAorCiAgICAgLy8gTWlzY2VsbGFuZW91cyBvcGVy
YXRpb25zOgogCiAgICAgdm9pZCBicmVha3BvaW50KCkKQEAgLTYzMyw2ICs3NjUsMTYgQEAgcHVi
bGljOgogICAgICAgICBtX2Fzc2VtYmxlci5pbnQzKCk7CiAgICAgfQogCisgICAgSnVtcCBjYWxs
KCkKKyAgICB7CisgICAgICAgIHJldHVybiBKdW1wKG1fYXNzZW1ibGVyLCBtX2Fzc2VtYmxlci5j
YWxsKCkpOworICAgIH0KKworICAgIEp1bXAgY2FsbChSZWdpc3RlcklEIHRhcmdldCkKKyAgICB7
CisgICAgICAgIHJldHVybiBKdW1wKG1fYXNzZW1ibGVyLCBtX2Fzc2VtYmxlci5jYWxsKHRhcmdl
dCkpOworICAgIH0KKwogICAgIHZvaWQgcmV0KCkKICAgICB7CiAgICAgICAgIG1fYXNzZW1ibGVy
LnJldCgpOwpJbmRleDogYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGFz
c2VtYmxlci9YODZBc3NlbWJsZXIuaAkocmV2aXNpb24gMzkwMDUpCisrKyBhc3NlbWJsZXIvWDg2
QXNzZW1ibGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTExNCw2ICsxMTQsNyBAQCBwdWJsaWM6CiAg
ICAgICAgIE9QX0pNUF9yZWwzMiAgICAgICAgICAgICAgICAgICAgPSAweEU5LAogICAgICAgICBQ
UkVfU1NFX0YyICAgICAgICAgICAgICAgICAgICAgID0gMHhGMiwKICAgICAgICAgT1BfSExUICAg
ICAgICAgICAgICAgICAgICAgICAgICA9IDB4RjQsCisgICAgICAgIE9QX0dST1VQM19FYkliICAg
ICAgICAgICAgICAgICAgPSAweEY2LAogICAgICAgICBPUF9HUk9VUDNfRXYgICAgICAgICAgICAg
ICAgICAgID0gMHhGNywKICAgICAgICAgT1BfR1JPVVAzX0V2SXogICAgICAgICAgICAgICAgICA9
IDB4RjcsIC8vIE9QX0dST1VQM19FdiBoYXMgYW4gaW1tZWRpYXRlLCB3aGVuIGluc3RydWN0aW9u
IGlzIGEgdGVzdC4gCiAgICAgICAgIE9QX0dST1VQNV9FdiAgICAgICAgICAgICAgICAgICAgPSAw
eEZGLApAQCAtMzkwLDYgKzM5MSwyMCBAQCBwdWJsaWM6CiAgICAgfQogI2VuZGlmCiAKKyAgICB2
b2lkIGNtcGxfaThtKGludCBpbW0sIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgbV9i
dWZmZXIucHV0Qnl0ZShPUF9HUk9VUDFfRXZJYik7CisgICAgICAgIG1vZFJtX29wbShHUk9VUDFf
T1BfQ01QLCBkc3QpOworICAgICAgICBtX2J1ZmZlci5wdXRCeXRlKGltbSk7CisgICAgfQorCisg
ICAgdm9pZCBjbXBsX2k4bShpbnQgaW1tLCBpbnQgb2Zmc2V0LCBSZWdpc3RlcklEIGRzdCkKKyAg
ICB7CisgICAgICAgIG1fYnVmZmVyLnB1dEJ5dGUoT1BfR1JPVVAxX0V2SWIpOworICAgICAgICBt
b2RSbV9vcG0oR1JPVVAxX09QX0NNUCwgZHN0LCBvZmZzZXQpOworICAgICAgICBtX2J1ZmZlci5w
dXRCeXRlKGltbSk7CisgICAgfQorCiAgICAgdm9pZCBjbXBsX2k4bShpbnQgaW1tLCBpbnQgb2Zm
c2V0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgsIGludCBzY2FsZSkKICAgICB7
CiAgICAgICAgIG1fYnVmZmVyLnB1dEJ5dGUoT1BfR1JPVVAxX0V2SWIpOwpAQCAtNDk2LDYgKzUx
MSwxNCBAQCBwdWJsaWM6CiAgICAgICAgIG1vZFJtX3JtKGRzdCwgYmFzZSwgb2Zmc2V0KTsKICAg
ICB9CiAKKyAgICB2b2lkIHRlc3RiX2k4cihpbnQgaW1tLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7
CisgICAgICAgIG1fYnVmZmVyLmVuc3VyZVNwYWNlKG1heEluc3RydWN0aW9uU2l6ZSk7CisgICAg
ICAgIG1fYnVmZmVyLnB1dEJ5dGVVbmNoZWNrZWQoT1BfR1JPVVAzX0ViSWIpOworICAgICAgICBt
b2RSbV9vcHJfVW5jaGVja2VkKEdST1VQM19PUF9URVNULCBkc3QpOworICAgICAgICBtX2J1ZmZl
ci5wdXRCeXRlVW5jaGVja2VkKGltbSk7CisgICAgfQorCiAgICAgdm9pZCB0ZXN0bF9pMzJyKGlu
dCBpbW0sIFJlZ2lzdGVySUQgZHN0KQogICAgIHsKICAgICAgICAgbV9idWZmZXIuZW5zdXJlU3Bh
Y2UobWF4SW5zdHJ1Y3Rpb25TaXplKTsKQEAgLTU1NSw3ICs1NzgsNyBAQCBwdWJsaWM6CiAgICAg
ICAgIG1vZFJtX29wcihHUk9VUDJfT1BfU0FSLCBkc3QpOwogICAgIH0KIAotICAgIHZvaWQgc2hs
X2k4cihpbnQgaW1tLCBSZWdpc3RlcklEIGRzdCkKKyAgICB2b2lkIHNobGxfaThyKGludCBpbW0s
IFJlZ2lzdGVySUQgZHN0KQogICAgIHsKICAgICAgICAgaWYgKGltbSA9PSAxKSB7CiAgICAgICAg
ICAgICBtX2J1ZmZlci5wdXRCeXRlKE9QX0dST1VQMl9FdjEpOwpAQCAtNzE5LDYgKzc0MiwxNCBA
QCBwdWJsaWM6CiAgICAgICAgIG1fYnVmZmVyLnB1dEludChpbW0pOwogICAgIH0KIAorICAgIHZv
aWQgbW92bF9pMzJtKGludCBpbW0sIFJlZ2lzdGVySUQgYmFzZSkKKyAgICB7CisgICAgICAgIG1f
YnVmZmVyLmVuc3VyZVNwYWNlKG1heEluc3RydWN0aW9uU2l6ZSk7CisgICAgICAgIG1fYnVmZmVy
LnB1dEJ5dGVVbmNoZWNrZWQoT1BfR1JPVVAxMV9Fdkl6KTsKKyAgICAgICAgbW9kUm1fb3BtX1Vu
Y2hlY2tlZChHUk9VUDExX01PViwgYmFzZSk7CisgICAgICAgIG1fYnVmZmVyLnB1dEludFVuY2hl
Y2tlZChpbW0pOworICAgIH0KKwogICAgIHZvaWQgbW92bF9pMzJtKGludCBpbW0sIGludCBvZmZz
ZXQsIFJlZ2lzdGVySUQgYmFzZSkKICAgICB7CiAgICAgICAgIG1fYnVmZmVyLmVuc3VyZVNwYWNl
KG1heEluc3RydWN0aW9uU2l6ZSk7CkBAIC0xMDg5LDI4ICsxMTIwLDYgQEAgcHVibGljOgogICAg
ICAgICByZXR1cm4gY29weTsKICAgICB9CiAKLSNpZiBVU0UoQ1RJX0FSR1VNRU5UKQotICAgIHZv
aWQgcmVzdG9yZUFyZ3VtZW50UmVmZXJlbmNlKCkKLSAgICB7Ci0jaWYgVVNFKEZBU1RfQ0FMTF9D
VElfQVJHVU1FTlQpCi0gICAgICAgIG1vdmxfcnIoWDg2Ojplc3AsIFg4Njo6ZWN4KTsKLSNlbHNl
Ci0gICAgICAgIG1vdmxfcm0oWDg2Ojplc3AsIDAsIFg4Njo6ZXNwKTsKLSNlbmRpZgotICAgIH0K
LQotICAgIHZvaWQgcmVzdG9yZUFyZ3VtZW50UmVmZXJlbmNlRm9yVHJhbXBvbGluZSgpCi0gICAg
ewotI2lmIFVTRShGQVNUX0NBTExfQ1RJX0FSR1VNRU5UKQotICAgICAgICBtb3ZsX3JyKFg4Njo6
ZXNwLCBYODY6OmVjeCk7Ci0gICAgICAgIGFkZGxfaTMycig0LCBYODY6OmVjeCk7Ci0jZW5kaWYK
LSAgICB9Ci0jZWxzZQotICAgIHZvaWQgcmVzdG9yZUFyZ3VtZW50UmVmZXJlbmNlKCkge30KLSAg
ICB2b2lkIHJlc3RvcmVBcmd1bWVudFJlZmVyZW5jZUZvclRyYW1wb2xpbmUoKSB7fQotI2VuZGlm
Ci0KIHByaXZhdGU6CiAgICAgdm9pZCBtb2RSbV9ycihSZWdpc3RlcklEIHJlZywgUmVnaXN0ZXJJ
RCBybSkKICAgICB7CkBAIC0xMTMxLDYgKzExNDAsMTYgQEAgcHJpdmF0ZToKICAgICB9CiAjZW5k
aWYKIAorICAgIHZvaWQgbW9kUm1fcm1fVW5jaGVja2VkKFJlZ2lzdGVySUQgcmVnLCBSZWdpc3Rl
cklEIGJhc2UpCisgICAgeworICAgICAgICBpZiAoYmFzZSA9PSBYODY6OmVzcCkgeworICAgICAg
ICAgICAgbV9idWZmZXIucHV0Qnl0ZVVuY2hlY2tlZChNT0RSTSgwLCByZWcsIFg4Njo6aGFzU2li
KSk7CisgICAgICAgICAgICBtX2J1ZmZlci5wdXRCeXRlVW5jaGVja2VkKFNJQigwLCBYODY6Om5v
U2NhbGUsIFg4Njo6ZXNwKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX2J1ZmZl
ci5wdXRCeXRlVW5jaGVja2VkKE1PRFJNKDAsIHJlZywgYmFzZSkpOworICAgICAgICB9CisgICAg
fQorCiAgICAgdm9pZCBtb2RSbV9ybShSZWdpc3RlcklEIHJlZywgUmVnaXN0ZXJJRCBiYXNlKQog
ICAgIHsKICAgICAgICAgaWYgKGJhc2UgPT0gWDg2Ojplc3ApIHsKQEAgLTEyMTIsNiArMTIzMSwx
MSBAQCBwcml2YXRlOgogICAgICAgICBtb2RSbV9ybShzdGF0aWNfY2FzdDxSZWdpc3RlcklEPihv
cGNvZGVJRCksIGJhc2UpOwogICAgIH0KIAorICAgIHZvaWQgbW9kUm1fb3BtX1VuY2hlY2tlZChP
cGNvZGVJRCBvcGNvZGVJRCwgUmVnaXN0ZXJJRCBiYXNlKQorICAgIHsKKyAgICAgICAgbW9kUm1f
cm1fVW5jaGVja2VkKHN0YXRpY19jYXN0PFJlZ2lzdGVySUQ+KG9wY29kZUlEKSwgYmFzZSk7Cisg
ICAgfQorCiAgICAgdm9pZCBtb2RSbV9vcG1fVW5jaGVja2VkKE9wY29kZUlEIG9wY29kZUlELCBS
ZWdpc3RlcklEIGJhc2UsIGludCBvZmZzZXQpCiAgICAgewogICAgICAgICBtb2RSbV9ybV9VbmNo
ZWNrZWQoc3RhdGljX2Nhc3Q8UmVnaXN0ZXJJRD4ob3Bjb2RlSUQpLCBiYXNlLCBvZmZzZXQpOwpJ
bmRleDogaml0L0pJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gaml0L0pJVC5jcHAJKHJldmlzaW9uIDM5
MDA1KQorKysgaml0L0pJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2NSw3ICs1NjUsNyBAQCB2
b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgICAgIGNhc2Ugb3BfZ2V0X3Nj
b3BlZF92YXI6IHsKICAgICAgICAgICAgIGludCBza2lwID0gaW5zdHJ1Y3Rpb25baSArIDNdLnUu
b3BlcmFuZCArIG1fY29kZUJsb2NrLT5uZWVkc0Z1bGxTY29wZUNoYWluOwogCi0gICAgICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKFJlZ2lzdGVyRmlsZTo6U2NvcGVDaGFpbiwgWDg2Ojpl
YXgsIGkpOworICAgICAgICAgICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJG
aWxlOjpTY29wZUNoYWluLCBYODY6OmVheCk7CiAgICAgICAgICAgICB3aGlsZSAoc2tpcC0tKQog
ICAgICAgICAgICAgICAgIF9fIG1vdmxfbXIoRklFTERfT0ZGU0VUKFNjb3BlQ2hhaW5Ob2RlLCBu
ZXh0KSwgWDg2OjplYXgsIFg4Njo6ZWF4KTsKIApAQCAtNTc4LDcgKzU3OCw3IEBAIHZvaWQgSklU
Ojpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKICAgICAgICAgY2FzZSBvcF9wdXRfc2NvcGVkX3Zh
cjogewogICAgICAgICAgICAgaW50IHNraXAgPSBpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5k
ICsgbV9jb2RlQmxvY2stPm5lZWRzRnVsbFNjb3BlQ2hhaW47CiAKLSAgICAgICAgICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoUmVnaXN0ZXJGaWxlOjpTY29wZUNoYWluLCBYODY6OmVkeCwgaSk7
CisgICAgICAgICAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlcihSZWdpc3RlckZpbGU6OlNj
b3BlQ2hhaW4sIFg4Njo6ZWR4KTsKICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
aW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZCwgWDg2OjplYXgsIGkpOwogICAgICAgICAgICAg
d2hpbGUgKHNraXAtLSkKICAgICAgICAgICAgICAgICBfXyBtb3ZsX21yKEZJRUxEX09GRlNFVChT
Y29wZUNoYWluTm9kZSwgbmV4dCksIFg4Njo6ZWR4LCBYODY6OmVkeCk7CkBAIC02MDgsMTAgKzYw
OCwxMCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uW2kgKyAxXS51Lm9wZXJhbmQsIFg4Njo6
ZWF4LCBpKTsKIAogICAgICAgICAgICAgLy8gR3JhYiB0aGUgcmV0dXJuIGFkZHJlc3MuCi0gICAg
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKFJlZ2lzdGVyRmlsZTo6UmV0dXJuUEMsIFg4
Njo6ZWR4LCBpKTsKKyAgICAgICAgICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyKFJlZ2lz
dGVyRmlsZTo6UmV0dXJuUEMsIFg4Njo6ZWR4KTsKIAogICAgICAgICAgICAgLy8gUmVzdG9yZSBv
dXIgY2FsbGVyJ3MgInIiLgotICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihSZWdp
c3RlckZpbGU6OkNhbGxlckZyYW1lLCBYODY6OmVkaSwgaSk7CisgICAgICAgICAgICBlbWl0R2V0
RnJvbUNhbGxGcmFtZUhlYWRlcihSZWdpc3RlckZpbGU6OkNhbGxlckZyYW1lLCBYODY6OmVkaSk7
CiAKICAgICAgICAgICAgIC8vIFJldHVybi4KICAgICAgICAgICAgIF9fIHB1c2hsX3IoWDg2Ojpl
ZHgpOwpAQCAtOTQ3LDcgKzk0Nyw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNz
KCkKICAgICAgICAgfQogICAgICAgICBjYXNlIG9wX2VxOiB7CiAgICAgICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVycyhpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kLCBYODY6OmVheCwg
aW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZCwgWDg2OjplZHgsIGkpOwotICAgICAgICAgICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tTnVtcyhYODY6OmVheCwgWDg2OjplZHgsIGkpOworICAg
ICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tTnVtcyhYODY6OmVheCwgWDg2OjplZHgs
IFg4Njo6ZWN4LCBpKTsKICAgICAgICAgICAgIF9fIGNtcGxfcnIoWDg2OjplZHgsIFg4Njo6ZWF4
KTsKICAgICAgICAgICAgIF9fIHNldGVfcihYODY6OmVheCk7CiAgICAgICAgICAgICBfXyBtb3Z6
YmxfcnIoWDg2OjplYXgsIFg4Njo6ZWF4KTsKQEAgLTEwNzEsNyArMTA3MSw3IEBAIHZvaWQgSklU
Ojpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKICAgICAgICAgQ1RJX0NPTVBJTEVfQklOQVJZX09Q
KG9wX2xlc3MpCiAgICAgICAgIGNhc2Ugb3BfbmVxOiB7CiAgICAgICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVycyhpbnN0cnVjdGlvbltpICsgMl0udS5vcGVyYW5kLCBYODY6OmVheCwgaW5z
dHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZCwgWDg2OjplZHgsIGkpOwotICAgICAgICAgICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SW1tTnVtcyhYODY6OmVheCwgWDg2OjplZHgsIGkpOworICAgICAg
ICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tTnVtcyhYODY6OmVheCwgWDg2OjplZHgsIFg4
Njo6ZWN4LCBpKTsKICAgICAgICAgICAgIF9fIGNtcGxfcnIoWDg2OjplYXgsIFg4Njo6ZWR4KTsK
IAogICAgICAgICAgICAgX18gc2V0bmVfcihYODY6OmVheCk7CkBAIC0xMDk4LDcgKzEwOTgsNyBA
QCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgICAgIENUSV9DT01QSUxF
X0JJTkFSWV9PUChvcF91cnNoaWZ0KQogICAgICAgICBjYXNlIG9wX2JpdHhvcjogewogICAgICAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoaW5zdHJ1Y3Rpb25baSArIDJdLnUub3BlcmFu
ZCwgWDg2OjplYXgsIGluc3RydWN0aW9uW2kgKyAzXS51Lm9wZXJhbmQsIFg4Njo6ZWR4LCBpKTsK
LSAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbU51bXMoWDg2OjplYXgsIFg4Njo6
ZWR4LCBpKTsKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbU51bXMoWDg2Ojpl
YXgsIFg4Njo6ZWR4LCBYODY6OmVjeCwgaSk7CiAgICAgICAgICAgICBfXyB4b3JsX3JyKFg4Njo6
ZWR4LCBYODY6OmVheCk7CiAgICAgICAgICAgICBlbWl0RmFzdEFyaXRoUmVUYWdJbW1lZGlhdGUo
WDg2OjplYXgpOwogICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlv
bltpICsgMV0udS5vcGVyYW5kKTsKQEAgLTExMTUsNyArMTExNSw3IEBAIHZvaWQgSklUOjpwcml2
YXRlQ29tcGlsZU1haW5QYXNzKCkKICAgICAgICAgfQogICAgICAgICBjYXNlIG9wX2JpdG9yOiB7
CiAgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhpbnN0cnVjdGlvbltpICsgMl0u
dS5vcGVyYW5kLCBYODY6OmVheCwgaW5zdHJ1Y3Rpb25baSArIDNdLnUub3BlcmFuZCwgWDg2Ojpl
ZHgsIGkpOwotICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tTnVtcyhYODY6OmVh
eCwgWDg2OjplZHgsIGkpOworICAgICAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tTnVt
cyhYODY6OmVheCwgWDg2OjplZHgsIFg4Njo6ZWN4LCBpKTsKICAgICAgICAgICAgIF9fIG9ybF9y
cihYODY6OmVkeCwgWDg2OjplYXgpOwogICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihpbnN0cnVjdGlvbltpICsgMV0udS5vcGVyYW5kKTsKICAgICAgICAgICAgIGkgKz0gNTsKQEAg
LTIwMDUsNyArMjAwNSw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZSgpCiAgICAgSm1wRHN0
IGFmdGVyUmVnaXN0ZXJGaWxlQ2hlY2s7CiAgICAgaWYgKG1fY29kZUJsb2NrLT5jb2RlVHlwZSA9
PSBGdW5jdGlvbkNvZGUpIHsKICAgICAgICAgLy8gSW4gdGhlIGNhc2Ugb2YgYSBmYXN0IGxpbmtl
ZCBjYWxsLCB3ZSBkbyBub3Qgc2V0IHRoaXMgdXAgaW4gdGhlIGNhbGxlci4KLSAgICAgICAgX18g
bW92bF9pMzJtKHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQ+KG1fY29kZUJsb2NrKSwgUmVnaXN0
ZXJGaWxlOjpDb2RlQmxvY2sgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpLCBY
ODY6OmVkaSk7CisgICAgICAgIGVtaXRQdXRJbW1lZGlhdGVUb0NhbGxGcmFtZUhlYWRlcihtX2Nv
ZGVCbG9jaywgUmVnaXN0ZXJGaWxlOjpDb2RlQmxvY2spOwogCiAgICAgICAgIGVtaXRHZXRDVElQ
YXJhbShDVElfQVJHU19yZWdpc3RlckZpbGUsIFg4Njo6ZWF4KTsKICAgICAgICAgX18gbGVhbF9t
cihtX2NvZGVCbG9jay0+bnVtQ2FsbGVlUmVnaXN0ZXJzICogc2l6ZW9mKFJlZ2lzdGVyKSwgWDg2
OjplZGksIFg4Njo6ZWR4KTsKQEAgLTIxNDAsNyArMjE0MCw3IEBAIHZvaWQgSklUOjpwcml2YXRl
Q29tcGlsZUNUSU1hY2hpbmVUcmFtcG8KICAgICBfXyB0ZXN0bF9ycihYODY6OmVheCwgWDg2Ojpl
YXgpOwogICAgIEptcFNyYyBoYXNDb2RlQmxvY2sxID0gX18gam5lKCk7CiAgICAgX18gcG9wbF9y
KFg4Njo6ZWJ4KTsKLSAgICBfXyByZXN0b3JlQXJndW1lbnRSZWZlcmVuY2UoKTsKKyAgICByZXN0
b3JlQXJndW1lbnRSZWZlcmVuY2UoKTsKICAgICBlbWl0UHV0Q1RJUGFyYW0oWDg2OjplZGksIENU
SV9BUkdTX2NhbGxGcmFtZSk7CiAgICAgSm1wU3JjIGNhbGxKU0Z1bmN0aW9uMSA9IF9fIGNhbGwo
KTsKICAgICBlbWl0R2V0Q1RJQXJnKDAsIFg4Njo6ZWN4KTsKQEAgLTIxNTQsNyArMjE1NCw3IEBA
IHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUNUSU1hY2hpbmVUcmFtcG8KICAgICBfXyBwb3BsX3Io
WDg2OjplYngpOwogICAgIGVtaXRQdXRDVElBcmcoWDg2OjplYngsIDQpOwogICAgIGVtaXRQdXRD
VElBcmcoWDg2OjplYXgsIDEyKTsKLSAgICBfXyByZXN0b3JlQXJndW1lbnRSZWZlcmVuY2UoKTsK
KyAgICByZXN0b3JlQXJndW1lbnRSZWZlcmVuY2UoKTsKICAgICBlbWl0UHV0Q1RJUGFyYW0oWDg2
OjplZGksIENUSV9BUkdTX2NhbGxGcmFtZSk7CiAgICAgSm1wU3JjIGNhbGxBcml0eUNoZWNrMSA9
IF9fIGNhbGwoKTsKICAgICBfXyBtb3ZsX3JyKFg4Njo6ZWR4LCBYODY6OmVkaSk7CkBAIC0yMTY3
LDcgKzIxNjcsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVDVElNYWNoaW5lVHJhbXBvCiAK
ICAgICBfXyBwb3BsX3IoWDg2OjplYngpOwogICAgIGVtaXRQdXRDVElBcmcoWDg2OjplYngsIDQp
OwotICAgIF9fIHJlc3RvcmVBcmd1bWVudFJlZmVyZW5jZSgpOworICAgIHJlc3RvcmVBcmd1bWVu
dFJlZmVyZW5jZSgpOwogICAgIGVtaXRQdXRDVElQYXJhbShYODY6OmVkaSwgQ1RJX0FSR1NfY2Fs
bEZyYW1lKTsKICAgICBKbXBTcmMgY2FsbERvbnRMYXp5TGlua0NhbGwgPSBfXyBjYWxsKCk7CiAg
ICAgX18gcHVzaGxfcihYODY6OmVieCk7CkBAIC0yMTgyLDcgKzIxODIsNyBAQCB2b2lkIEpJVDo6
cHJpdmF0ZUNvbXBpbGVDVElNYWNoaW5lVHJhbXBvCiAgICAgX18gdGVzdGxfcnIoWDg2OjplYXgs
IFg4Njo6ZWF4KTsKICAgICBKbXBTcmMgaGFzQ29kZUJsb2NrMiA9IF9fIGpuZSgpOwogICAgIF9f
IHBvcGxfcihYODY6OmVieCk7Ci0gICAgX18gcmVzdG9yZUFyZ3VtZW50UmVmZXJlbmNlKCk7Cisg
ICAgcmVzdG9yZUFyZ3VtZW50UmVmZXJlbmNlKCk7CiAgICAgZW1pdFB1dENUSVBhcmFtKFg4Njo6
ZWRpLCBDVElfQVJHU19jYWxsRnJhbWUpOwogICAgIEptcFNyYyBjYWxsSlNGdW5jdGlvbjIgPSBf
XyBjYWxsKCk7CiAgICAgZW1pdEdldENUSUFyZygwLCBYODY6OmVjeCk7CkBAIC0yMTk2LDcgKzIx
OTYsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVDVElNYWNoaW5lVHJhbXBvCiAgICAgX18g
cG9wbF9yKFg4Njo6ZWJ4KTsKICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWJ4LCA0KTsKICAgICBl
bWl0UHV0Q1RJQXJnKFg4Njo6ZWF4LCAxMik7Ci0gICAgX18gcmVzdG9yZUFyZ3VtZW50UmVmZXJl
bmNlKCk7CisgICAgcmVzdG9yZUFyZ3VtZW50UmVmZXJlbmNlKCk7CiAgICAgZW1pdFB1dENUSVBh
cmFtKFg4Njo6ZWRpLCBDVElfQVJHU19jYWxsRnJhbWUpOwogICAgIEptcFNyYyBjYWxsQXJpdHlD
aGVjazIgPSBfXyBjYWxsKCk7CiAgICAgX18gbW92bF9ycihYODY6OmVkeCwgWDg2OjplZGkpOwpA
QCAtMjIwOSw3ICsyMjA5LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlQ1RJTWFjaGluZVRy
YW1wbwogCiAgICAgX18gcG9wbF9yKFg4Njo6ZWJ4KTsKICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6
ZWJ4LCA0KTsKLSAgICBfXyByZXN0b3JlQXJndW1lbnRSZWZlcmVuY2UoKTsKKyAgICByZXN0b3Jl
QXJndW1lbnRSZWZlcmVuY2UoKTsKICAgICBlbWl0UHV0Q1RJUGFyYW0oWDg2OjplZGksIENUSV9B
UkdTX2NhbGxGcmFtZSk7CiAgICAgSm1wU3JjIGNhbGxMYXp5TGlua0NhbGwgPSBfXyBjYWxsKCk7
CiAgICAgX18gcHVzaGxfcihYODY6OmVieCk7CkBAIC0yMjI0LDcgKzIyMjQsNyBAQCB2b2lkIEpJ
VDo6cHJpdmF0ZUNvbXBpbGVDVElNYWNoaW5lVHJhbXBvCiAgICAgX18gdGVzdGxfcnIoWDg2Ojpl
YXgsIFg4Njo6ZWF4KTsKICAgICBKbXBTcmMgaGFzQ29kZUJsb2NrMyA9IF9fIGpuZSgpOwogICAg
IF9fIHBvcGxfcihYODY6OmVieCk7Ci0gICAgX18gcmVzdG9yZUFyZ3VtZW50UmVmZXJlbmNlKCk7
CisgICAgcmVzdG9yZUFyZ3VtZW50UmVmZXJlbmNlKCk7CiAgICAgZW1pdFB1dENUSVBhcmFtKFg4
Njo6ZWRpLCBDVElfQVJHU19jYWxsRnJhbWUpOwogICAgIEptcFNyYyBjYWxsSlNGdW5jdGlvbjMg
PSBfXyBjYWxsKCk7CiAgICAgZW1pdEdldENUSUFyZygwLCBYODY6OmVjeCk7CkBAIC0yMjM4LDcg
KzIyMzgsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVDVElNYWNoaW5lVHJhbXBvCiAgICAg
X18gcG9wbF9yKFg4Njo6ZWJ4KTsKICAgICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWJ4LCA0KTsKICAg
ICBlbWl0UHV0Q1RJQXJnKFg4Njo6ZWF4LCAxMik7Ci0gICAgX18gcmVzdG9yZUFyZ3VtZW50UmVm
ZXJlbmNlKCk7CisgICAgcmVzdG9yZUFyZ3VtZW50UmVmZXJlbmNlKCk7CiAgICAgZW1pdFB1dENU
SVBhcmFtKFg4Njo6ZWRpLCBDVElfQVJHU19jYWxsRnJhbWUpOwogICAgIEptcFNyYyBjYWxsQXJp
dHlDaGVjazMgPSBfXyBjYWxsKCk7CiAgICAgX18gbW92bF9ycihYODY6OmVkeCwgWDg2OjplZGkp
OwpJbmRleDogaml0L0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGppdC9KSVQuaAkocmV2aXNpb24gMzkw
MDUpCisrKyBqaXQvSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDcgQEAKICNpbmNs
dWRlICJJbnRlcnByZXRlci5oIgogI2luY2x1ZGUgIk9wY29kZS5oIgogI2luY2x1ZGUgIlJlZ2lz
dGVyRmlsZS5oIgotI2luY2x1ZGUgIlg4NkFzc2VtYmxlci5oIgorI2luY2x1ZGUgIk1hY3JvQXNz
ZW1ibGVyLmgiCiAjaW5jbHVkZSAiUHJvZmlsZXIuaCIKICNpbmNsdWRlIDx3dGYvQWx3YXlzSW5s
aW5lLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgpAQCAtMjYwLDEyICsyNjAsMTQgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgdm9pZCBjdGlTZXRSZXR1cm5BZGRyZXNzKHZvaWQqKiB3aGVyZSwg
dm9pZCogd2hhdCk7CiAgICAgdm9pZCBjdGlSZXBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyh2b2lk
KiB3aGVyZSwgdm9pZCogd2hhdCk7CiAKLSAgICBjbGFzcyBKSVQgeworICAgIGNsYXNzIEpJVCA6
IHByaXZhdGUgTWFjcm9Bc3NlbWJsZXIgewogICAgICAgICB0eXBlZGVmIFg4NkFzc2VtYmxlcjo6
UmVnaXN0ZXJJRCBSZWdpc3RlcklEOwogICAgICAgICB0eXBlZGVmIFg4NkFzc2VtYmxlcjo6WE1N
UmVnaXN0ZXJJRCBYTU1SZWdpc3RlcklEOwogICAgICAgICB0eXBlZGVmIFg4NkFzc2VtYmxlcjo6
Sm1wU3JjIEptcFNyYzsKICAgICAgICAgdHlwZWRlZiBYODZBc3NlbWJsZXI6OkptcERzdCBKbXBE
c3Q7CiAKKyAgICAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgY2FsbEZyYW1lUmVnaXN0ZXIg
PSBYODY6OmVkaTsKKwogICAgICAgICBzdGF0aWMgY29uc3QgaW50IHJlcGF0Y2hHZXRCeUlkRGVm
YXVsdFN0cnVjdHVyZSA9IC0xOwogICAgICAgICAvLyBNYWdpYyBudW1iZXIgLSBpbml0aWFsIG9m
ZnNldCBjYW5ub3QgYmUgcmVwcmVzZW50YWJsZSBhcyBhIHNpZ25lZCA4Yml0IHZhbHVlLCBvciB0
aGUgWDg2QXNzZW1ibGVyCiAgICAgICAgIC8vIHdpbGwgY29tcHJlc3MgdGhlIGRpc3BsYWNlbWVu
dCwgYW5kIHdlIG1heSBub3QgYmUgYWJsZSB0byBmaXQgYSByZXBhdGNoZWQgb2Zmc2V0LgpAQCAt
NDE1LDYgKzQxNyw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRQdXRDVElB
cmcoUmVnaXN0ZXJJRCBzcmMsIHVuc2lnbmVkIG9mZnNldCk7CiAgICAgICAgIHZvaWQgZW1pdFB1
dENUSUFyZ0Zyb21WaXJ0dWFsUmVnaXN0ZXIodW5zaWduZWQgc3JjLCB1bnNpZ25lZCBvZmZzZXQs
IFJlZ2lzdGVySUQgc2NyYXRjaCk7CiAgICAgICAgIHZvaWQgZW1pdFB1dENUSUFyZ0NvbnN0YW50
KHVuc2lnbmVkIHZhbHVlLCB1bnNpZ25lZCBvZmZzZXQpOworICAgICAgICB2b2lkIGVtaXRQdXRD
VElBcmdDb25zdGFudCh2b2lkKiB2YWx1ZSwgdW5zaWduZWQgb2Zmc2V0KTsKICAgICAgICAgdm9p
ZCBlbWl0R2V0Q1RJQXJnKHVuc2lnbmVkIG9mZnNldCwgUmVnaXN0ZXJJRCBkc3QpOwogCiAgICAg
ICAgIHZvaWQgZW1pdEluaXRSZWdpc3Rlcih1bnNpZ25lZCBkc3QpOwpAQCAtNDI0LDYgKzQyNyw3
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRHZXRDVElQYXJhbSh1bnNpZ25l
ZCBuYW1lLCBSZWdpc3RlcklEIHRvKTsKIAogICAgICAgICB2b2lkIGVtaXRQdXRUb0NhbGxGcmFt
ZUhlYWRlcihSZWdpc3RlcklEIGZyb20sIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyRW50
cnkgZW50cnkpOworICAgICAgICB2b2lkIGVtaXRQdXRJbW1lZGlhdGVUb0NhbGxGcmFtZUhlYWRl
cih2b2lkKiB2YWx1ZSwgUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJFbnRyeSBlbnRyeSk7
CiAgICAgICAgIHZvaWQgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXIoUmVnaXN0ZXJGaWxlOjpD
YWxsRnJhbWVIZWFkZXJFbnRyeSBlbnRyeSwgUmVnaXN0ZXJJRCB0byk7CiAKICAgICAgICAgSlNW
YWx1ZSogZ2V0Q29uc3RhbnRJbW1lZGlhdGVOdW1lcmljQXJnKHVuc2lnbmVkIHNyYyk7CkBAIC00
MzQsNyArNDM4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKFJlZ2lzdGVySUQsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsIGludCBW
UmVnKTsKIAogICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbU51bShSZWdpc3Rl
cklELCB1bnNpZ25lZCBieXRlY29kZUluZGV4KTsKLSAgICAgICAgdm9pZCBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RJbW1OdW1zKFJlZ2lzdGVySUQsIFJlZ2lzdGVySUQsIHVuc2lnbmVkIGJ5dGVjb2Rl
SW5kZXgpOworICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbU51bXMoUmVnaXN0
ZXJJRCwgUmVnaXN0ZXJJRCwgUmVnaXN0ZXJJRCwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCk7CiAK
ICAgICAgICAgSm1wU3JjIGNoZWNrU3RydWN0dXJlKFJlZ2lzdGVySUQgcmVnLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSk7CiAKQEAgLTQ0OCw2ICs0NTIsOSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAg
ICAgICB2b2lkIGVtaXRUYWdBc0Jvb2xJbW1lZGlhdGUoUmVnaXN0ZXJJRCByZWcpOwogCisgICAg
ICAgIHZvaWQgcmVzdG9yZUFyZ3VtZW50UmVmZXJlbmNlKCk7CisgICAgICAgIHZvaWQgcmVzdG9y
ZUFyZ3VtZW50UmVmZXJlbmNlRm9yVHJhbXBvbGluZSgpOworCiAgICAgICAgIEptcFNyYyBlbWl0
TmFrZWRDYWxsKHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsIFJlZ2lzdGVySUQpOwogICAgICAgICBK
bXBTcmMgZW1pdE5ha2VkQ2FsbCh1bnNpZ25lZCBieXRlY29kZUluZGV4LCB2b2lkKiBmdW5jdGlv
bik7CiAgICAgICAgIEptcFNyYyBlbWl0Q1RJQ2FsbCh1bnNpZ25lZCBieXRlY29kZUluZGV4LCBD
VElIZWxwZXJfaik7CkBAIC00NjgsNyArNDc1LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAg
ICAgdm9pZCBraWxsTGFzdFJlc3VsdFJlZ2lzdGVyKCk7CiAKLSAgICAgICAgWDg2QXNzZW1ibGVy
IG1fYXNzZW1ibGVyOwogICAgICAgICBJbnRlcnByZXRlciogbV9pbnRlcnByZXRlcjsKICAgICAg
ICAgSlNHbG9iYWxEYXRhKiBtX2dsb2JhbERhdGE7CiAgICAgICAgIENvZGVCbG9jayogbV9jb2Rl
QmxvY2s7CkluZGV4OiBqaXQvSklUQXJpdGhtZXRpYy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gaml0L0pJ
VEFyaXRobWV0aWMuY3BwCShyZXZpc2lvbiAzOTAwNSkKKysrIGppdC9KSVRBcml0aG1ldGljLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjU0LDcgKzI1NCw3IEBAIHZvaWQgSklUOjpjb21waWxlQmlu
YXJ5QXJpdGhPcChPcGNvZGVJRCAKICAgICAgICAgX18gbGluayhvcDFpbW0sIF9fIGxhYmVsKCkp
OwogICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1OdW0oWDg2OjplZHgsIGkpOwogICAg
IH0gZWxzZQotICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1OdW1zKFg4Njo6ZWF4LCBY
ODY6OmVkeCwgaSk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbU51bXMoWDg2Ojpl
YXgsIFg4Njo6ZWR4LCBYODY6OmVjeCwgaSk7CiAKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfYWRk
KSB7CiAgICAgICAgIGVtaXRGYXN0QXJpdGhEZVRhZ0ltbWVkaWF0ZShYODY6OmVheCk7CkluZGV4
OiBqaXQvSklUSW5saW5lTWV0aG9kcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGppdC9KSVRJbmxpbmVNZXRo
b2RzLmgJKHJldmlzaW9uIDM5MDA1KQorKysgaml0L0pJVElubGluZU1ldGhvZHMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQAogCiAjaWYgRU5BQkxFKEpJVCkKIAotI2RlZmluZSBf
XyBtX2Fzc2VtYmxlci4gCisjZGVmaW5lIF9fIG1fYXNzZW1ibGVyLgogCiAjaWYgUExBVEZPUk0o
V0lOKQogI3VuZGVmIEZJRUxEX09GRlNFVCAvLyBGaXggY29uZmxpY3Qgd2l0aCB3aW5udC5oLgpA
QCAtNjEsNyArNjEsNyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0VmlydHVhbFJl
CiAgICAgLy8gVE9ETzogd2Ugd2FudCB0byByZXVzZSB2YWx1ZXMgdGhhdCBhcmUgYWxyZWFkeSBp
biByZWdpc3RlcnMgaWYgd2UgY2FuIC0gYWRkIGEgcmVnaXN0ZXIgYWxsb2NhdG9yIQogICAgIGlm
IChtX2NvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoc3JjKSkgewogICAgICAgICBK
U1ZhbHVlKiB2YWx1ZSA9IG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOwotICAgICAgICBf
XyBtb3ZsX2kzMnIoYXNJbnRlZ2VyKHZhbHVlKSwgZHN0KTsKKyAgICAgICAgbW92ZSh2YWx1ZSwg
ZHN0KTsKICAgICAgICAga2lsbExhc3RSZXN1bHRSZWdpc3RlcigpOwogICAgICAgICByZXR1cm47
CiAgICAgfQpAQCAtNzcsMTMgKzc3LDEzIEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRH
ZXRWaXJ0dWFsUmUKICAgICAgICAgaWYgKCFhdEp1bXBUYXJnZXQpIHsKICAgICAgICAgICAgIC8v
IFRoZSBhcmd1bWVudCB3ZSB3YW50IGlzIGFscmVhZHkgc3RvcmVkIGluIGVheAogICAgICAgICAg
ICAgaWYgKGRzdCAhPSBYODY6OmVheCkKLSAgICAgICAgICAgICAgICBfXyBtb3ZsX3JyKFg4Njo6
ZWF4LCBkc3QpOworICAgICAgICAgICAgICAgIG1vdmUoWDg2OjplYXgsIGRzdCk7CiAgICAgICAg
ICAgICBraWxsTGFzdFJlc3VsdFJlZ2lzdGVyKCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KICAgICB9CiAKLSAgICBfXyBtb3ZsX21yKHNyYyAqIHNpemVvZihSZWdpc3RlciksIFg4
Njo6ZWRpLCBkc3QpOworICAgIGxvYWRQdHIoQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3Rlciwgc3Jj
ICogc2l6ZW9mKFJlZ2lzdGVyKSksIGRzdCk7CiAgICAga2lsbExhc3RSZXN1bHRSZWdpc3Rlcigp
OwogfQogCkBAIC05OCwzNSArOTgsMjUgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEdl
dFZpcnR1YWxSZQogICAgIH0KIH0KIAotLy8gZ2V0IGFyZyBwdXRzIGFuIGFyZyBmcm9tIHRoZSBT
RiByZWdpc3RlciBhcnJheSBvbnRvIHRoZSBzdGFjaywgYXMgYW4gYXJnIHRvIGEgY29udGV4dCB0
aHJlYWRlZCBmdW5jdGlvbi4KLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRQdXRDVElBcmdG
cm9tVmlydHVhbFJlZ2lzdGVyKHVuc2lnbmVkIHNyYywgdW5zaWduZWQgb2Zmc2V0LCBSZWdpc3Rl
cklEIHNjcmF0Y2gpCi17Ci0gICAgaWYgKG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJ
bmRleChzcmMpKSB7Ci0gICAgICAgIEpTVmFsdWUqIHZhbHVlID0gbV9jb2RlQmxvY2stPmdldENv
bnN0YW50KHNyYyk7Ci0gICAgICAgIF9fIG1vdmxfaTMybShhc0ludGVnZXIodmFsdWUpLCBvZmZz
ZXQgKyBzaXplb2Yodm9pZCopLCBYODY6OmVzcCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgX18g
bW92bF9tcihzcmMgKiBzaXplb2YoUmVnaXN0ZXIpLCBYODY6OmVkaSwgc2NyYXRjaCk7Ci0gICAg
ICAgIF9fIG1vdmxfcm0oc2NyYXRjaCwgb2Zmc2V0ICsgc2l6ZW9mKHZvaWQqKSwgWDg2Ojplc3Ap
OwotICAgIH0KLQotICAgIGtpbGxMYXN0UmVzdWx0UmVnaXN0ZXIoKTsKLX0KLQogLy8gcHV0cyBh
biBhcmcgb250byB0aGUgc3RhY2ssIGFzIGFuIGFyZyB0byBhIGNvbnRleHQgdGhyZWFkZWQgZnVu
Y3Rpb24uCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0UHV0Q1RJQXJnKFJlZ2lzdGVySUQg
c3JjLCB1bnNpZ25lZCBvZmZzZXQpCiB7Ci0gICAgX18gbW92bF9ybShzcmMsIG9mZnNldCArIHNp
emVvZih2b2lkKiksIFg4Njo6ZXNwKTsKKyAgICBwb2tlKHNyYywgKG9mZnNldCAvIHNpemVvZih2
b2lkKikpICsgMSk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRHZXRDVElBcmco
dW5zaWduZWQgb2Zmc2V0LCBSZWdpc3RlcklEIGRzdCkKK0FMV0FZU19JTkxJTkUgdm9pZCBKSVQ6
OmVtaXRQdXRDVElBcmdDb25zdGFudCh1bnNpZ25lZCB2YWx1ZSwgdW5zaWduZWQgb2Zmc2V0KQog
ewotICAgIF9fIG1vdmxfbXIob2Zmc2V0ICsgc2l6ZW9mKHZvaWQqKSwgWDg2Ojplc3AsIGRzdCk7
CisgICAgcG9rZShJbW0zMih2YWx1ZSksIChvZmZzZXQgLyBzaXplb2Yodm9pZCopKSArIDEpOwog
fQogCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0UHV0Q1RJQXJnQ29uc3RhbnQodm9pZCog
dmFsdWUsIHVuc2lnbmVkIG9mZnNldCkKK3sKKyAgICBwb2tlKHZhbHVlLCAob2Zmc2V0IC8gc2l6
ZW9mKHZvaWQqKSkgKyAxKTsKK30KIAotQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdFB1dENU
SUFyZ0NvbnN0YW50KHVuc2lnbmVkIHZhbHVlLCB1bnNpZ25lZCBvZmZzZXQpCitBTFdBWVNfSU5M
SU5FIHZvaWQgSklUOjplbWl0R2V0Q1RJQXJnKHVuc2lnbmVkIG9mZnNldCwgUmVnaXN0ZXJJRCBk
c3QpCiB7Ci0gICAgX18gbW92bF9pMzJtKHZhbHVlLCBvZmZzZXQgKyBzaXplb2Yodm9pZCopLCBY
ODY6OmVzcCk7CisgICAgcGVlayhkc3QsIChvZmZzZXQgLyBzaXplb2Yodm9pZCopKSArIDEpOwog
fQogCiBBTFdBWVNfSU5MSU5FIEpTVmFsdWUqIEpJVDo6Z2V0Q29uc3RhbnRJbW1lZGlhdGVOdW1l
cmljQXJnKHVuc2lnbmVkIHNyYykKQEAgLTEzOCwxOTAgKzEyOCwyMjYgQEAgQUxXQVlTX0lOTElO
RSBKU1ZhbHVlKiBKSVQ6OmdldENvbnN0YW50SQogICAgIHJldHVybiBub1ZhbHVlKCk7CiB9CiAK
Ky8vIGdldCBhcmcgcHV0cyBhbiBhcmcgZnJvbSB0aGUgU0YgcmVnaXN0ZXIgYXJyYXkgb250byB0
aGUgc3RhY2ssIGFzIGFuIGFyZyB0byBhIGNvbnRleHQgdGhyZWFkZWQgZnVuY3Rpb24uCitBTFdB
WVNfSU5MSU5FIHZvaWQgSklUOjplbWl0UHV0Q1RJQXJnRnJvbVZpcnR1YWxSZWdpc3Rlcih1bnNp
Z25lZCBzcmMsIHVuc2lnbmVkIG9mZnNldCwgUmVnaXN0ZXJJRCBzY3JhdGNoKQoreworICAgIGlm
IChtX2NvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoc3JjKSkgeworICAgICAgICBK
U1ZhbHVlKiB2YWx1ZSA9IG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChzcmMpOworICAgICAgICBl
bWl0UHV0Q1RJQXJnQ29uc3RhbnQodmFsdWUsIG9mZnNldCk7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgbG9hZFB0cihBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCBzcmMgKiBzaXplb2YoUmVnaXN0
ZXIpKSwgc2NyYXRjaCk7CisgICAgICAgIGVtaXRQdXRDVElBcmcoc2NyYXRjaCwgb2Zmc2V0KTsK
KyAgICB9CisKKyAgICBraWxsTGFzdFJlc3VsdFJlZ2lzdGVyKCk7Cit9CisKIEFMV0FZU19JTkxJ
TkUgdm9pZCBKSVQ6OmVtaXRQdXRDVElQYXJhbSh2b2lkKiB2YWx1ZSwgdW5zaWduZWQgbmFtZSkK
IHsKLSAgICBfXyBtb3ZsX2kzMm0ocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4odmFsdWUpLCBu
YW1lICogc2l6ZW9mKHZvaWQqKSwgWDg2Ojplc3ApOworICAgIHBva2UodmFsdWUsIG5hbWUpOwog
fQogCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0UHV0Q1RJUGFyYW0oUmVnaXN0ZXJJRCBm
cm9tLCB1bnNpZ25lZCBuYW1lKQogewotICAgIF9fIG1vdmxfcm0oZnJvbSwgbmFtZSAqIHNpemVv
Zih2b2lkKiksIFg4Njo6ZXNwKTsKKyAgICBwb2tlKGZyb20sIG5hbWUpOwogfQogCiBBTFdBWVNf
SU5MSU5FIHZvaWQgSklUOjplbWl0R2V0Q1RJUGFyYW0odW5zaWduZWQgbmFtZSwgUmVnaXN0ZXJJ
RCB0bykKIHsKLSAgICBfXyBtb3ZsX21yKG5hbWUgKiBzaXplb2Yodm9pZCopLCBYODY6OmVzcCwg
dG8pOworICAgIHBlZWsodG8sIG5hbWUpOwogICAgIGtpbGxMYXN0UmVzdWx0UmVnaXN0ZXIoKTsK
IH0KIAogQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKFJl
Z2lzdGVySUQgZnJvbSwgUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJFbnRyeSBlbnRyeSkK
IHsKLSAgICBfXyBtb3ZsX3JtKGZyb20sIGVudHJ5ICogc2l6ZW9mKFJlZ2lzdGVyKSwgWDg2Ojpl
ZGkpOworICAgIHN0b3JlUHRyKGZyb20sIEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIGVudHJ5
ICogc2l6ZW9mKFJlZ2lzdGVyKSkpOworfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0
UHV0SW1tZWRpYXRlVG9DYWxsRnJhbWVIZWFkZXIodm9pZCogdmFsdWUsIFJlZ2lzdGVyRmlsZTo6
Q2FsbEZyYW1lSGVhZGVyRW50cnkgZW50cnkpCit7CisgICAgc3RvcmVQdHIodmFsdWUsIEFkZHJl
c3MoY2FsbEZyYW1lUmVnaXN0ZXIsIGVudHJ5ICogc2l6ZW9mKFJlZ2lzdGVyKSkpOwogfQogCiBB
TFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlcihSZWdpc3Rl
ckZpbGU6OkNhbGxGcmFtZUhlYWRlckVudHJ5IGVudHJ5LCBSZWdpc3RlcklEIHRvKQogewotICAg
IF9fIG1vdmxfbXIoZW50cnkgKiBzaXplb2YoUmVnaXN0ZXIpLCBYODY6OmVkaSwgdG8pOworICAg
IGxvYWRQdHIoQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3RlciwgZW50cnkgKiBzaXplb2YoUmVnaXN0
ZXIpKSwgdG8pOwogICAgIGtpbGxMYXN0UmVzdWx0UmVnaXN0ZXIoKTsKIH0KIAogQUxXQVlTX0lO
TElORSB2b2lkIEpJVDo6ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcih1bnNpZ25lZCBkc3QsIFJlZ2lz
dGVySUQgZnJvbSkKIHsKLSAgICBfXyBtb3ZsX3JtKGZyb20sIGRzdCAqIHNpemVvZihSZWdpc3Rl
ciksIFg4Njo6ZWRpKTsKKyAgICBzdG9yZVB0cihmcm9tLCBBZGRyZXNzKGNhbGxGcmFtZVJlZ2lz
dGVyLCBkc3QgKiBzaXplb2YoUmVnaXN0ZXIpKSk7CiAgICAgbV9sYXN0UmVzdWx0Qnl0ZWNvZGVS
ZWdpc3RlciA9IChmcm9tID09IFg4Njo6ZWF4KSA/IGRzdCA6IHN0ZDo6bnVtZXJpY19saW1pdHM8
aW50Pjo6bWF4KCk7CiAgICAgLy8gRklYTUU6ICNpZm5kZWYgTkRFQlVHLCBXcml0ZSB0aGUgY29y
cmVjdCBtX3R5cGUgdG8gdGhlIHJlZ2lzdGVyLgogfQogCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklU
OjplbWl0SW5pdFJlZ2lzdGVyKHVuc2lnbmVkIGRzdCkKIHsKLSAgICBfXyBtb3ZsX2kzMm0oYXNJ
bnRlZ2VyKGpzVW5kZWZpbmVkKCkpLCBkc3QgKiBzaXplb2YoUmVnaXN0ZXIpLCBYODY6OmVkaSk7
CisgICAgc3RvcmVQdHIoanNVbmRlZmluZWQoKSwgQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3Rlciwg
ZHN0ICogc2l6ZW9mKFJlZ2lzdGVyKSkpOwogICAgIC8vIEZJWE1FOiAjaWZuZGVmIE5ERUJVRywg
V3JpdGUgdGhlIGNvcnJlY3QgbV90eXBlIHRvIHRoZSByZWdpc3Rlci4KIH0KIAogQUxXQVlTX0lO
TElORSBKbXBTcmMgSklUOjplbWl0TmFrZWRDYWxsKHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsIFg4
Njo6UmVnaXN0ZXJJRCByKQogewotICAgIEptcFNyYyBjYWxsID0gX18gY2FsbChyKTsKLSAgICBt
X2NhbGxzLmFwcGVuZChDYWxsUmVjb3JkKGNhbGwsIGJ5dGVjb2RlSW5kZXgpKTsKKyAgICBKbXBT
cmMgbmFrZWRDYWxsID0gY2FsbChyKTsKKyAgICBtX2NhbGxzLmFwcGVuZChDYWxsUmVjb3JkKG5h
a2VkQ2FsbCwgYnl0ZWNvZGVJbmRleCkpOworICAgIHJldHVybiBuYWtlZENhbGw7Cit9CisKK0FM
V0FZU19JTkxJTkUgSm1wU3JjIEpJVDo6ZW1pdE5ha2VkQ2FsbCh1bnNpZ25lZCBieXRlY29kZUlu
ZGV4LCB2b2lkKiBmdW5jdGlvbikKK3sKKyAgICBKbXBTcmMgbmFrZWRDYWxsID0gY2FsbCgpOwor
ICAgIG1fY2FsbHMuYXBwZW5kKENhbGxSZWNvcmQobmFrZWRDYWxsLCByZWludGVycHJldF9jYXN0
PENUSUhlbHBlcl92PihmdW5jdGlvbiksIGJ5dGVjb2RlSW5kZXgpKTsKKyAgICByZXR1cm4gbmFr
ZWRDYWxsOworfQogCi0gICAgcmV0dXJuIGNhbGw7CitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpy
ZXN0b3JlQXJndW1lbnRSZWZlcmVuY2UoKQoreworI2lmIFVTRShDVElfQVJHVU1FTlQpCisjaWYg
VVNFKEZBU1RfQ0FMTF9DVElfQVJHVU1FTlQpCisgICAgbW92bF9ycihYODY6OmVzcCwgWDg2Ojpl
Y3gpOworI2Vsc2UKKyAgICBtb3ZsX3JtKFg4Njo6ZXNwLCAwLCBYODY6OmVzcCk7CisjZW5kaWYK
KyNlbmRpZgogfQogCi1BTFdBWVNfSU5MSU5FICBKbXBTcmMgSklUOjplbWl0TmFrZWRDYWxsKHVu
c2lnbmVkIGJ5dGVjb2RlSW5kZXgsIHZvaWQqIGZ1bmN0aW9uKQorQUxXQVlTX0lOTElORSB2b2lk
IEpJVDo6cmVzdG9yZUFyZ3VtZW50UmVmZXJlbmNlRm9yVHJhbXBvbGluZSgpCiB7Ci0gICAgSm1w
U3JjIGNhbGwgPSBfXyBjYWxsKCk7Ci0gICAgbV9jYWxscy5hcHBlbmQoQ2FsbFJlY29yZChjYWxs
LCByZWludGVycHJldF9jYXN0PENUSUhlbHBlcl92PihmdW5jdGlvbiksIGJ5dGVjb2RlSW5kZXgp
KTsKLSAgICByZXR1cm4gY2FsbDsKKyNpZiBVU0UoQ1RJX0FSR1VNRU5UKSAmJiBVU0UoRkFTVF9D
QUxMX0NUSV9BUkdVTUVOVCkKKyAgICBtb3ZsX3JyKFg4Njo6ZXNwLCBYODY6OmVjeCk7CisgICAg
YWRkbF9pMzJyKDQsIFg4Njo6ZWN4KTsKKyNlbmRpZgogfQogCisKIEFMV0FZU19JTkxJTkUgSm1w
U3JjIEpJVDo6ZW1pdENUSUNhbGwodW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgQ1RJSGVscGVyX2og
aGVscGVyKQogewogI2lmIEVOQUJMRShPUENPREVfU0FNUExJTkcpCi0gICAgX18gbW92bF9pMzJt
KG1faW50ZXJwcmV0ZXItPnNhbXBsZXIoKS0+ZW5jb2RlU2FtcGxlKG1fY29kZUJsb2NrLT5pbnN0
cnVjdGlvbnMuYmVnaW4oKSArIGJ5dGVjb2RlSW5kZXgsIHRydWUpLCBtX2ludGVycHJldGVyLT5z
YW1wbGVyKCktPnNhbXBsZVNsb3QoKSk7CisgICAgc3RvcmUzMihJbW0zMihtX2ludGVycHJldGVy
LT5zYW1wbGVyKCktPmVuY29kZVNhbXBsZShtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zLmJlZ2lu
KCkgKyBieXRlY29kZUluZGV4LCB0cnVlKSksIG1faW50ZXJwcmV0ZXItPnNhbXBsZXIoKS0+c2Ft
cGxlU2xvdCgpKTsKICNlbmRpZgotICAgIF9fIHJlc3RvcmVBcmd1bWVudFJlZmVyZW5jZSgpOwot
ICAgIGVtaXRQdXRDVElQYXJhbShYODY6OmVkaSwgQ1RJX0FSR1NfY2FsbEZyYW1lKTsKLSAgICBK
bXBTcmMgY2FsbCA9IF9fIGNhbGwoKTsKLSAgICBtX2NhbGxzLmFwcGVuZChDYWxsUmVjb3JkKGNh
bGwsIGhlbHBlciwgYnl0ZWNvZGVJbmRleCkpOworICAgIHJlc3RvcmVBcmd1bWVudFJlZmVyZW5j
ZSgpOworICAgIGVtaXRQdXRDVElQYXJhbShjYWxsRnJhbWVSZWdpc3RlciwgQ1RJX0FSR1NfY2Fs
bEZyYW1lKTsKKyAgICBKbXBTcmMgY3RpQ2FsbCA9IGNhbGwoKTsKKyAgICBtX2NhbGxzLmFwcGVu
ZChDYWxsUmVjb3JkKGN0aUNhbGwsIGhlbHBlciwgYnl0ZWNvZGVJbmRleCkpOwogI2lmIEVOQUJM
RShPUENPREVfU0FNUExJTkcpCi0gICAgX18gbW92bF9pMzJtKG1faW50ZXJwcmV0ZXItPnNhbXBs
ZXIoKS0+ZW5jb2RlU2FtcGxlKG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMuYmVnaW4oKSArIGJ5
dGVjb2RlSW5kZXgsIGZhbHNlKSwgbV9pbnRlcnByZXRlci0+c2FtcGxlcigpLT5zYW1wbGVTbG90
KCkpOworICAgIHN0b3JlMzIoSW1tMzIobV9pbnRlcnByZXRlci0+c2FtcGxlcigpLT5lbmNvZGVT
YW1wbGUobV9jb2RlQmxvY2stPmluc3RydWN0aW9ucy5iZWdpbigpICsgYnl0ZWNvZGVJbmRleCwg
ZmFsc2UpKSwgbV9pbnRlcnByZXRlci0+c2FtcGxlcigpLT5zYW1wbGVTbG90KCkpOwogI2VuZGlm
CiAgICAga2lsbExhc3RSZXN1bHRSZWdpc3RlcigpOwogCi0gICAgcmV0dXJuIGNhbGw7CisgICAg
cmV0dXJuIGN0aUNhbGw7CiB9CiAKIEFMV0FZU19JTkxJTkUgSm1wU3JjIEpJVDo6ZW1pdENUSUNh
bGwodW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgQ1RJSGVscGVyX28gaGVscGVyKQogewogI2lmIEVO
QUJMRShPUENPREVfU0FNUExJTkcpCi0gICAgX18gbW92bF9pMzJtKG1faW50ZXJwcmV0ZXItPnNh
bXBsZXIoKS0+ZW5jb2RlU2FtcGxlKG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMuYmVnaW4oKSAr
IGJ5dGVjb2RlSW5kZXgsIHRydWUpLCBtX2ludGVycHJldGVyLT5zYW1wbGVyKCktPnNhbXBsZVNs
b3QoKSk7CisgICAgc3RvcmUzMihJbW0zMihtX2ludGVycHJldGVyLT5zYW1wbGVyKCktPmVuY29k
ZVNhbXBsZShtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zLmJlZ2luKCkgKyBieXRlY29kZUluZGV4
LCB0cnVlKSksIG1faW50ZXJwcmV0ZXItPnNhbXBsZXIoKS0+c2FtcGxlU2xvdCgpKTsKICNlbmRp
ZgotICAgIF9fIHJlc3RvcmVBcmd1bWVudFJlZmVyZW5jZSgpOwotICAgIGVtaXRQdXRDVElQYXJh
bShYODY6OmVkaSwgQ1RJX0FSR1NfY2FsbEZyYW1lKTsKLSAgICBKbXBTcmMgY2FsbCA9IF9fIGNh
bGwoKTsKLSAgICBtX2NhbGxzLmFwcGVuZChDYWxsUmVjb3JkKGNhbGwsIGhlbHBlciwgYnl0ZWNv
ZGVJbmRleCkpOworICAgIHJlc3RvcmVBcmd1bWVudFJlZmVyZW5jZSgpOworICAgIGVtaXRQdXRD
VElQYXJhbShjYWxsRnJhbWVSZWdpc3RlciwgQ1RJX0FSR1NfY2FsbEZyYW1lKTsKKyAgICBKbXBT
cmMgY3RpQ2FsbCA9IGNhbGwoKTsKKyAgICBtX2NhbGxzLmFwcGVuZChDYWxsUmVjb3JkKGN0aUNh
bGwsIGhlbHBlciwgYnl0ZWNvZGVJbmRleCkpOwogI2lmIEVOQUJMRShPUENPREVfU0FNUExJTkcp
Ci0gICAgX18gbW92bF9pMzJtKG1faW50ZXJwcmV0ZXItPnNhbXBsZXIoKS0+ZW5jb2RlU2FtcGxl
KG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMuYmVnaW4oKSArIGJ5dGVjb2RlSW5kZXgsIGZhbHNl
KSwgbV9pbnRlcnByZXRlci0+c2FtcGxlcigpLT5zYW1wbGVTbG90KCkpOworICAgIHN0b3JlMzIo
SW1tMzIobV9pbnRlcnByZXRlci0+c2FtcGxlcigpLT5lbmNvZGVTYW1wbGUobV9jb2RlQmxvY2st
Pmluc3RydWN0aW9ucy5iZWdpbigpICsgYnl0ZWNvZGVJbmRleCwgZmFsc2UpKSwgbV9pbnRlcnBy
ZXRlci0+c2FtcGxlcigpLT5zYW1wbGVTbG90KCkpOwogI2VuZGlmCiAgICAga2lsbExhc3RSZXN1
bHRSZWdpc3RlcigpOwogCi0gICAgcmV0dXJuIGNhbGw7CisgICAgcmV0dXJuIGN0aUNhbGw7CiB9
CiAKIEFMV0FZU19JTkxJTkUgSm1wU3JjIEpJVDo6ZW1pdENUSUNhbGwodW5zaWduZWQgYnl0ZWNv
ZGVJbmRleCwgQ1RJSGVscGVyX3AgaGVscGVyKQogewogI2lmIEVOQUJMRShPUENPREVfU0FNUExJ
TkcpCi0gICAgX18gbW92bF9pMzJtKG1faW50ZXJwcmV0ZXItPnNhbXBsZXIoKS0+ZW5jb2RlU2Ft
cGxlKG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMuYmVnaW4oKSArIGJ5dGVjb2RlSW5kZXgsIHRy
dWUpLCBtX2ludGVycHJldGVyLT5zYW1wbGVyKCktPnNhbXBsZVNsb3QoKSk7CisgICAgc3RvcmUz
MihJbW0zMihtX2ludGVycHJldGVyLT5zYW1wbGVyKCktPmVuY29kZVNhbXBsZShtX2NvZGVCbG9j
ay0+aW5zdHJ1Y3Rpb25zLmJlZ2luKCkgKyBieXRlY29kZUluZGV4LCB0cnVlKSksIG1faW50ZXJw
cmV0ZXItPnNhbXBsZXIoKS0+c2FtcGxlU2xvdCgpKTsKICNlbmRpZgotICAgIF9fIHJlc3RvcmVB
cmd1bWVudFJlZmVyZW5jZSgpOwotICAgIGVtaXRQdXRDVElQYXJhbShYODY6OmVkaSwgQ1RJX0FS
R1NfY2FsbEZyYW1lKTsKLSAgICBKbXBTcmMgY2FsbCA9IF9fIGNhbGwoKTsKLSAgICBtX2NhbGxz
LmFwcGVuZChDYWxsUmVjb3JkKGNhbGwsIGhlbHBlciwgYnl0ZWNvZGVJbmRleCkpOworICAgIHJl
c3RvcmVBcmd1bWVudFJlZmVyZW5jZSgpOworICAgIGVtaXRQdXRDVElQYXJhbShjYWxsRnJhbWVS
ZWdpc3RlciwgQ1RJX0FSR1NfY2FsbEZyYW1lKTsKKyAgICBKbXBTcmMgY3RpQ2FsbCA9IGNhbGwo
KTsKKyAgICBtX2NhbGxzLmFwcGVuZChDYWxsUmVjb3JkKGN0aUNhbGwsIGhlbHBlciwgYnl0ZWNv
ZGVJbmRleCkpOwogI2lmIEVOQUJMRShPUENPREVfU0FNUExJTkcpCi0gICAgX18gbW92bF9pMzJt
KG1faW50ZXJwcmV0ZXItPnNhbXBsZXIoKS0+ZW5jb2RlU2FtcGxlKG1fY29kZUJsb2NrLT5pbnN0
cnVjdGlvbnMuYmVnaW4oKSArIGJ5dGVjb2RlSW5kZXgsIGZhbHNlKSwgbV9pbnRlcnByZXRlci0+
c2FtcGxlcigpLT5zYW1wbGVTbG90KCkpOworICAgIHN0b3JlMzIoSW1tMzIobV9pbnRlcnByZXRl
ci0+c2FtcGxlcigpLT5lbmNvZGVTYW1wbGUobV9jb2RlQmxvY2stPmluc3RydWN0aW9ucy5iZWdp
bigpICsgYnl0ZWNvZGVJbmRleCwgZmFsc2UpKSwgbV9pbnRlcnByZXRlci0+c2FtcGxlcigpLT5z
YW1wbGVTbG90KCkpOwogI2VuZGlmCiAgICAga2lsbExhc3RSZXN1bHRSZWdpc3RlcigpOwogCi0g
ICAgcmV0dXJuIGNhbGw7CisgICAgcmV0dXJuIGN0aUNhbGw7CiB9CiAKIEFMV0FZU19JTkxJTkUg
Sm1wU3JjIEpJVDo6ZW1pdENUSUNhbGwodW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgQ1RJSGVscGVy
X2IgaGVscGVyKQogewogI2lmIEVOQUJMRShPUENPREVfU0FNUExJTkcpCi0gICAgX18gbW92bF9p
MzJtKG1faW50ZXJwcmV0ZXItPnNhbXBsZXIoKS0+ZW5jb2RlU2FtcGxlKG1fY29kZUJsb2NrLT5p
bnN0cnVjdGlvbnMuYmVnaW4oKSArIGJ5dGVjb2RlSW5kZXgsIHRydWUpLCBtX2ludGVycHJldGVy
LT5zYW1wbGVyKCktPnNhbXBsZVNsb3QoKSk7CisgICAgc3RvcmUzMihJbW0zMihtX2ludGVycHJl
dGVyLT5zYW1wbGVyKCktPmVuY29kZVNhbXBsZShtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zLmJl
Z2luKCkgKyBieXRlY29kZUluZGV4LCB0cnVlKSksIG1faW50ZXJwcmV0ZXItPnNhbXBsZXIoKS0+
c2FtcGxlU2xvdCgpKTsKICNlbmRpZgotICAgIF9fIHJlc3RvcmVBcmd1bWVudFJlZmVyZW5jZSgp
OwotICAgIGVtaXRQdXRDVElQYXJhbShYODY6OmVkaSwgQ1RJX0FSR1NfY2FsbEZyYW1lKTsKLSAg
ICBKbXBTcmMgY2FsbCA9IF9fIGNhbGwoKTsKLSAgICBtX2NhbGxzLmFwcGVuZChDYWxsUmVjb3Jk
KGNhbGwsIGhlbHBlciwgYnl0ZWNvZGVJbmRleCkpOworICAgIHJlc3RvcmVBcmd1bWVudFJlZmVy
ZW5jZSgpOworICAgIGVtaXRQdXRDVElQYXJhbShjYWxsRnJhbWVSZWdpc3RlciwgQ1RJX0FSR1Nf
Y2FsbEZyYW1lKTsKKyAgICBKbXBTcmMgY3RpQ2FsbCA9IGNhbGwoKTsKKyAgICBtX2NhbGxzLmFw
cGVuZChDYWxsUmVjb3JkKGN0aUNhbGwsIGhlbHBlciwgYnl0ZWNvZGVJbmRleCkpOwogI2lmIEVO
QUJMRShPUENPREVfU0FNUExJTkcpCi0gICAgX18gbW92bF9pMzJtKG1faW50ZXJwcmV0ZXItPnNh
bXBsZXIoKS0+ZW5jb2RlU2FtcGxlKG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMuYmVnaW4oKSAr
IGJ5dGVjb2RlSW5kZXgsIGZhbHNlKSwgbV9pbnRlcnByZXRlci0+c2FtcGxlcigpLT5zYW1wbGVT
bG90KCkpOworICAgIHN0b3JlMzIoSW1tMzIobV9pbnRlcnByZXRlci0+c2FtcGxlcigpLT5lbmNv
ZGVTYW1wbGUobV9jb2RlQmxvY2stPmluc3RydWN0aW9ucy5iZWdpbigpICsgYnl0ZWNvZGVJbmRl
eCwgZmFsc2UpKSwgbV9pbnRlcnByZXRlci0+c2FtcGxlcigpLT5zYW1wbGVTbG90KCkpOwogI2Vu
ZGlmCiAgICAga2lsbExhc3RSZXN1bHRSZWdpc3RlcigpOwogCi0gICAgcmV0dXJuIGNhbGw7Cisg
ICAgcmV0dXJuIGN0aUNhbGw7CiB9CiAKIEFMV0FZU19JTkxJTkUgSm1wU3JjIEpJVDo6ZW1pdENU
SUNhbGwodW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgQ1RJSGVscGVyX3YgaGVscGVyKQogewogI2lm
IEVOQUJMRShPUENPREVfU0FNUExJTkcpCi0gICAgX18gbW92bF9pMzJtKG1faW50ZXJwcmV0ZXIt
PnNhbXBsZXIoKS0+ZW5jb2RlU2FtcGxlKG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMuYmVnaW4o
KSArIGJ5dGVjb2RlSW5kZXgsIHRydWUpLCBtX2ludGVycHJldGVyLT5zYW1wbGVyKCktPnNhbXBs
ZVNsb3QoKSk7CisgICAgc3RvcmUzMihJbW0zMihtX2ludGVycHJldGVyLT5zYW1wbGVyKCktPmVu
Y29kZVNhbXBsZShtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zLmJlZ2luKCkgKyBieXRlY29kZUlu
ZGV4LCB0cnVlKSksIG1faW50ZXJwcmV0ZXItPnNhbXBsZXIoKS0+c2FtcGxlU2xvdCgpKTsKICNl
bmRpZgotICAgIF9fIHJlc3RvcmVBcmd1bWVudFJlZmVyZW5jZSgpOwotICAgIGVtaXRQdXRDVElQ
YXJhbShYODY6OmVkaSwgQ1RJX0FSR1NfY2FsbEZyYW1lKTsKLSAgICBKbXBTcmMgY2FsbCA9IF9f
IGNhbGwoKTsKLSAgICBtX2NhbGxzLmFwcGVuZChDYWxsUmVjb3JkKGNhbGwsIGhlbHBlciwgYnl0
ZWNvZGVJbmRleCkpOworICAgIHJlc3RvcmVBcmd1bWVudFJlZmVyZW5jZSgpOworICAgIGVtaXRQ
dXRDVElQYXJhbShjYWxsRnJhbWVSZWdpc3RlciwgQ1RJX0FSR1NfY2FsbEZyYW1lKTsKKyAgICBK
bXBTcmMgY3RpQ2FsbCA9IGNhbGwoKTsKKyAgICBtX2NhbGxzLmFwcGVuZChDYWxsUmVjb3JkKGN0
aUNhbGwsIGhlbHBlciwgYnl0ZWNvZGVJbmRleCkpOwogI2lmIEVOQUJMRShPUENPREVfU0FNUExJ
TkcpCi0gICAgX18gbW92bF9pMzJtKG1faW50ZXJwcmV0ZXItPnNhbXBsZXIoKS0+ZW5jb2RlU2Ft
cGxlKG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMuYmVnaW4oKSArIGJ5dGVjb2RlSW5kZXgsIGZh
bHNlKSwgbV9pbnRlcnByZXRlci0+c2FtcGxlcigpLT5zYW1wbGVTbG90KCkpOworICAgIHN0b3Jl
MzIoSW1tMzIobV9pbnRlcnByZXRlci0+c2FtcGxlcigpLT5lbmNvZGVTYW1wbGUobV9jb2RlQmxv
Y2stPmluc3RydWN0aW9ucy5iZWdpbigpICsgYnl0ZWNvZGVJbmRleCwgZmFsc2UpKSwgbV9pbnRl
cnByZXRlci0+c2FtcGxlcigpLT5zYW1wbGVTbG90KCkpOwogI2VuZGlmCiAgICAga2lsbExhc3RS
ZXN1bHRSZWdpc3RlcigpOwogCi0gICAgcmV0dXJuIGNhbGw7CisgICAgcmV0dXJuIGN0aUNhbGw7
CiB9CiAKIEFMV0FZU19JTkxJTkUgSm1wU3JjIEpJVDo6ZW1pdENUSUNhbGwodW5zaWduZWQgYnl0
ZWNvZGVJbmRleCwgQ1RJSGVscGVyX3MgaGVscGVyKQogewogI2lmIEVOQUJMRShPUENPREVfU0FN
UExJTkcpCi0gICAgX18gbW92bF9pMzJtKG1faW50ZXJwcmV0ZXItPnNhbXBsZXIoKS0+ZW5jb2Rl
U2FtcGxlKG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMuYmVnaW4oKSArIGJ5dGVjb2RlSW5kZXgs
IHRydWUpLCBtX2ludGVycHJldGVyLT5zYW1wbGVyKCktPnNhbXBsZVNsb3QoKSk7CisgICAgc3Rv
cmUzMihJbW0zMihtX2ludGVycHJldGVyLT5zYW1wbGVyKCktPmVuY29kZVNhbXBsZShtX2NvZGVC
bG9jay0+aW5zdHJ1Y3Rpb25zLmJlZ2luKCkgKyBieXRlY29kZUluZGV4LCB0cnVlKSksIG1faW50
ZXJwcmV0ZXItPnNhbXBsZXIoKS0+c2FtcGxlU2xvdCgpKTsKICNlbmRpZgotICAgIF9fIHJlc3Rv
cmVBcmd1bWVudFJlZmVyZW5jZSgpOwotICAgIGVtaXRQdXRDVElQYXJhbShYODY6OmVkaSwgQ1RJ
X0FSR1NfY2FsbEZyYW1lKTsKLSAgICBKbXBTcmMgY2FsbCA9IF9fIGNhbGwoKTsKLSAgICBtX2Nh
bGxzLmFwcGVuZChDYWxsUmVjb3JkKGNhbGwsIGhlbHBlciwgYnl0ZWNvZGVJbmRleCkpOworICAg
IHJlc3RvcmVBcmd1bWVudFJlZmVyZW5jZSgpOworICAgIGVtaXRQdXRDVElQYXJhbShjYWxsRnJh
bWVSZWdpc3RlciwgQ1RJX0FSR1NfY2FsbEZyYW1lKTsKKyAgICBKbXBTcmMgY3RpQ2FsbCA9IGNh
bGwoKTsKKyAgICBtX2NhbGxzLmFwcGVuZChDYWxsUmVjb3JkKGN0aUNhbGwsIGhlbHBlciwgYnl0
ZWNvZGVJbmRleCkpOwogI2lmIEVOQUJMRShPUENPREVfU0FNUExJTkcpCi0gICAgX18gbW92bF9p
MzJtKG1faW50ZXJwcmV0ZXItPnNhbXBsZXIoKS0+ZW5jb2RlU2FtcGxlKG1fY29kZUJsb2NrLT5p
bnN0cnVjdGlvbnMuYmVnaW4oKSArIGJ5dGVjb2RlSW5kZXgsIGZhbHNlKSwgbV9pbnRlcnByZXRl
ci0+c2FtcGxlcigpLT5zYW1wbGVTbG90KCkpOworICAgIHN0b3JlMzIoSW1tMzIobV9pbnRlcnBy
ZXRlci0+c2FtcGxlcigpLT5lbmNvZGVTYW1wbGUobV9jb2RlQmxvY2stPmluc3RydWN0aW9ucy5i
ZWdpbigpICsgYnl0ZWNvZGVJbmRleCwgZmFsc2UpKSwgbV9pbnRlcnByZXRlci0+c2FtcGxlcigp
LT5zYW1wbGVTbG90KCkpOwogI2VuZGlmCiAgICAga2lsbExhc3RSZXN1bHRSZWdpc3RlcigpOwog
Ci0gICAgcmV0dXJuIGNhbGw7CisgICAgcmV0dXJuIGN0aUNhbGw7CiB9CiAKIEFMV0FZU19JTkxJ
TkUgSm1wU3JjIEpJVDo6ZW1pdENUSUNhbGwodW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgQ1RJSGVs
cGVyXzIgaGVscGVyKQogewogI2lmIEVOQUJMRShPUENPREVfU0FNUExJTkcpCi0gICAgX18gbW92
bF9pMzJtKG1faW50ZXJwcmV0ZXItPnNhbXBsZXIoKS0+ZW5jb2RlU2FtcGxlKG1fY29kZUJsb2Nr
LT5pbnN0cnVjdGlvbnMuYmVnaW4oKSArIGJ5dGVjb2RlSW5kZXgsIHRydWUpLCBtX2ludGVycHJl
dGVyLT5zYW1wbGVyKCktPnNhbXBsZVNsb3QoKSk7CisgICAgc3RvcmUzMihJbW0zMihtX2ludGVy
cHJldGVyLT5zYW1wbGVyKCktPmVuY29kZVNhbXBsZShtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25z
LmJlZ2luKCkgKyBieXRlY29kZUluZGV4LCB0cnVlKSksIG1faW50ZXJwcmV0ZXItPnNhbXBsZXIo
KS0+c2FtcGxlU2xvdCgpKTsKICNlbmRpZgotICAgIF9fIHJlc3RvcmVBcmd1bWVudFJlZmVyZW5j
ZSgpOwotICAgIGVtaXRQdXRDVElQYXJhbShYODY6OmVkaSwgQ1RJX0FSR1NfY2FsbEZyYW1lKTsK
LSAgICBKbXBTcmMgY2FsbCA9IF9fIGNhbGwoKTsKLSAgICBtX2NhbGxzLmFwcGVuZChDYWxsUmVj
b3JkKGNhbGwsIGhlbHBlciwgYnl0ZWNvZGVJbmRleCkpOworICAgIHJlc3RvcmVBcmd1bWVudFJl
ZmVyZW5jZSgpOworICAgIGVtaXRQdXRDVElQYXJhbShjYWxsRnJhbWVSZWdpc3RlciwgQ1RJX0FS
R1NfY2FsbEZyYW1lKTsKKyAgICBKbXBTcmMgY3RpQ2FsbCA9IGNhbGwoKTsKKyAgICBtX2NhbGxz
LmFwcGVuZChDYWxsUmVjb3JkKGN0aUNhbGwsIGhlbHBlciwgYnl0ZWNvZGVJbmRleCkpOwogI2lm
IEVOQUJMRShPUENPREVfU0FNUExJTkcpCi0gICAgX18gbW92bF9pMzJtKG1faW50ZXJwcmV0ZXIt
PnNhbXBsZXIoKS0+ZW5jb2RlU2FtcGxlKG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMuYmVnaW4o
KSArIGJ5dGVjb2RlSW5kZXgsIGZhbHNlKSwgbV9pbnRlcnByZXRlci0+c2FtcGxlcigpLT5zYW1w
bGVTbG90KCkpOworICAgIHN0b3JlMzIoSW1tMzIobV9pbnRlcnByZXRlci0+c2FtcGxlcigpLT5l
bmNvZGVTYW1wbGUobV9jb2RlQmxvY2stPmluc3RydWN0aW9ucy5iZWdpbigpICsgYnl0ZWNvZGVJ
bmRleCwgZmFsc2UpKSwgbV9pbnRlcnByZXRlci0+c2FtcGxlcigpLT5zYW1wbGVTbG90KCkpOwog
I2VuZGlmCiAgICAga2lsbExhc3RSZXN1bHRSZWdpc3RlcigpOwogCi0gICAgcmV0dXJuIGNhbGw7
CisgICAgcmV0dXJuIGN0aUNhbGw7CiB9CiAKIEFMV0FZU19JTkxJTkUgSm1wU3JjIEpJVDo6Y2hl
Y2tTdHJ1Y3R1cmUoUmVnaXN0ZXJJRCByZWcsIFN0cnVjdHVyZSogc3RydWN0dXJlKQogewotICAg
IF9fIGNtcGxfaTMybShyZWludGVycHJldF9jYXN0PHVpbnQzMl90PihzdHJ1Y3R1cmUpLCBGSUVM
RF9PRkZTRVQoSlNDZWxsLCBtX3N0cnVjdHVyZSksIHJlZyk7Ci0gICAgcmV0dXJuIF9fIGpuZSgp
OworICAgIHJldHVybiBqbmVQdHIoc3RydWN0dXJlLCBBZGRyZXNzKHJlZywgRklFTERfT0ZGU0VU
KEpTQ2VsbCwgbV9zdHJ1Y3R1cmUpKSk7CiB9CiAKIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChSZWdpc3RlcklEIHJlZywgdW5zaWduZWQgYnl0ZWNv
ZGVJbmRleCkKIHsKLSAgICBfXyB0ZXN0bF9pMzJyKEpTSW1tZWRpYXRlOjpUYWdNYXNrLCByZWcp
OwotICAgIG1fc2xvd0Nhc2VzLmFwcGVuZChTbG93Q2FzZUVudHJ5KF9fIGpuZSgpLCBieXRlY29k
ZUluZGV4KSk7CisgICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50cnkoanNldDMyKElt
bTMyKEpTSW1tZWRpYXRlOjpUYWdNYXNrKSwgcmVnKSwgYnl0ZWNvZGVJbmRleCkpOwogfQogCiBB
TFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoUmVnaXN0
ZXJJRCByZWcsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsIGludCB2UmVnKQpAQCAtMzQzLDE1ICsz
NjksMTQgQEAgQUxXQVlTX0lOTElORSBib29sIEpJVDo6bGlua1Nsb3dDYXNlSWZObwogCiBBTFdB
WVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1OdW0oUmVnaXN0ZXJJ
RCByZWcsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCiB7Ci0gICAgX18gdGVzdGxfaTMycihKU0lt
bWVkaWF0ZTo6VGFnQml0VHlwZUludGVnZXIsIHJlZyk7Ci0gICAgbV9zbG93Q2FzZXMuYXBwZW5k
KFNsb3dDYXNlRW50cnkoX18gamUoKSwgYnl0ZWNvZGVJbmRleCkpOworICAgIG1fc2xvd0Nhc2Vz
LmFwcGVuZChTbG93Q2FzZUVudHJ5KGpuc2V0MzIoSW1tMzIoSlNJbW1lZGlhdGU6OlRhZ0JpdFR5
cGVJbnRlZ2VyKSwgcmVnKSwgYnl0ZWNvZGVJbmRleCkpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZv
aWQgSklUOjplbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1OdW1zKFJlZ2lzdGVySUQgcmVnMSwgUmVn
aXN0ZXJJRCByZWcyLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KQorQUxXQVlTX0lOTElORSB2b2lk
IEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tTnVtcyhSZWdpc3RlcklEIHJlZzEsIFJlZ2lz
dGVySUQgcmVnMiwgUmVnaXN0ZXJJRCBzY3JhdGNoLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KQog
ewotICAgIF9fIG1vdmxfcnIocmVnMSwgWDg2OjplY3gpOwotICAgIF9fIGFuZGxfcnIocmVnMiwg
WDg2OjplY3gpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbU51bShYODY6OmVjeCwgYnl0
ZWNvZGVJbmRleCk7CisgICAgbW92ZShyZWcxLCBzY3JhdGNoKTsKKyAgICBhbmQzMihyZWcyLCBz
Y3JhdGNoKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1OdW0oc2NyYXRjaCwgYnl0ZWNv
ZGVJbmRleCk7CiB9CiAKIEFMV0FZU19JTkxJTkUgdW5zaWduZWQgSklUOjpnZXREZVRhZ2dlZENv
bnN0YW50SW1tZWRpYXRlKEpTVmFsdWUqIGltbSkKQEAgLTM2Miw0NyArMzg3LDQ1IEBAIEFMV0FZ
U19JTkxJTkUgdW5zaWduZWQgSklUOjpnZXREZVRhZ2dlZEMKIAogQUxXQVlTX0lOTElORSB2b2lk
IEpJVDo6ZW1pdEZhc3RBcml0aERlVGFnSW1tZWRpYXRlKFJlZ2lzdGVySUQgcmVnKQogewotICAg
IF9fIHN1YmxfaThyKEpTSW1tZWRpYXRlOjpUYWdCaXRUeXBlSW50ZWdlciwgcmVnKTsKKyAgICBz
dWIzMihJbW0zMihKU0ltbWVkaWF0ZTo6VGFnQml0VHlwZUludGVnZXIpLCByZWcpOwogfQogCiBB
TFdBWVNfSU5MSU5FIEptcFNyYyBKSVQ6OmVtaXRGYXN0QXJpdGhEZVRhZ0ltbWVkaWF0ZUp1bXBJ
Zlplcm8oUmVnaXN0ZXJJRCByZWcpCiB7Ci0gICAgX18gc3VibF9pOHIoSlNJbW1lZGlhdGU6OlRh
Z0JpdFR5cGVJbnRlZ2VyLCByZWcpOwotICAgIHJldHVybiBfXyBqZSgpOworICAgIHJldHVybiBq
emVyb1N1YjMyKEltbTMyKEpTSW1tZWRpYXRlOjpUYWdCaXRUeXBlSW50ZWdlciksIHJlZyk7CiB9
CiAKIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRGYXN0QXJpdGhSZVRhZ0ltbWVkaWF0ZShS
ZWdpc3RlcklEIHJlZykKIHsKLSAgICBfXyBhZGRsX2k4cihKU0ltbWVkaWF0ZTo6VGFnQml0VHlw
ZUludGVnZXIsIHJlZyk7CisgICAgYWRkMzIoSW1tMzIoSlNJbW1lZGlhdGU6OlRhZ0JpdFR5cGVJ
bnRlZ2VyKSwgcmVnKTsKIH0KIAogQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEZhc3RBcml0
aFBvdGVudGlhbGx5UmVUYWdJbW1lZGlhdGUoUmVnaXN0ZXJJRCByZWcpCiB7Ci0gICAgX18gb3Js
X2k4cihKU0ltbWVkaWF0ZTo6VGFnQml0VHlwZUludGVnZXIsIHJlZyk7CisgICAgb3IzMihJbW0z
MihKU0ltbWVkaWF0ZTo6VGFnQml0VHlwZUludGVnZXIpLCByZWcpOwogfQogCiBBTFdBWVNfSU5M
SU5FIHZvaWQgSklUOjplbWl0RmFzdEFyaXRoSW1tVG9JbnQoUmVnaXN0ZXJJRCByZWcpCiB7Ci0g
ICAgX18gc2FybF9pOHIoMSwgcmVnKTsKKyAgICByc2hpZnQzMihJbW0zMigxKSwgcmVnKTsKIH0K
IAogQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEZhc3RBcml0aEludFRvSW1tT3JTbG93Q2Fz
ZShSZWdpc3RlcklEIHJlZywgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKIHsKLSAgICBfXyBhZGRs
X3JyKHJlZywgcmVnKTsKLSAgICBtX3Nsb3dDYXNlcy5hcHBlbmQoU2xvd0Nhc2VFbnRyeShfXyBq
bygpLCBieXRlY29kZUluZGV4KSk7CisgICAgbV9zbG93Q2FzZXMuYXBwZW5kKFNsb3dDYXNlRW50
cnkoam92ZXJBZGQzMihyZWcsIHJlZyksIGJ5dGVjb2RlSW5kZXgpKTsKICAgICBlbWl0RmFzdEFy
aXRoUmVUYWdJbW1lZGlhdGUocmVnKTsKIH0KIAogQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1p
dEZhc3RBcml0aEludFRvSW1tTm9DaGVjayhSZWdpc3RlcklEIHJlZykKIHsKLSAgICBfXyBhZGRs
X3JyKHJlZywgcmVnKTsKKyAgICBhZGQzMihyZWcsIHJlZyk7CiAgICAgZW1pdEZhc3RBcml0aFJl
VGFnSW1tZWRpYXRlKHJlZyk7CiB9CiAKIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVtaXRUYWdB
c0Jvb2xJbW1lZGlhdGUoUmVnaXN0ZXJJRCByZWcpCiB7Ci0gICAgX18gc2hsX2k4cihKU0ltbWVk
aWF0ZTo6RXh0ZW5kZWRQYXlsb2FkU2hpZnQsIHJlZyk7Ci0gICAgX18gb3JsX2k4cihKU0ltbWVk
aWF0ZTo6RnVsbFRhZ1R5cGVCb29sLCByZWcpOworICAgIGxzaGlmdDMyKEltbTMyKEpTSW1tZWRp
YXRlOjpFeHRlbmRlZFBheWxvYWRTaGlmdCksIHJlZyk7CisgICAgb3IzMihJbW0zMihKU0ltbWVk
aWF0ZTo6RnVsbFRhZ1R5cGVCb29sKSwgcmVnKTsKIH0KIAogfQpJbmRleDogaml0L0pJVFByb3Bl
cnR5QWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBqaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCShy
ZXZpc2lvbiAzOTAwNSkKKysrIGppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI4MSw3ICsyODEsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeUlkVHJh
bnNpdGlvCiAgICAgaWYgKGZhaWx1cmVDYXNlcy5zaXplKCkpIHsKICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGZhaWx1cmVDYXNlcy5zaXplKCk7ICsraSkKICAgICAgICAgICAgIF9f
IGxpbmsoZmFpbHVyZUNhc2VzW2ldLCBfXyBsYWJlbCgpKTsKLSAgICAgICAgX18gcmVzdG9yZUFy
Z3VtZW50UmVmZXJlbmNlRm9yVHJhbXBvbGluZSgpOworICAgICAgICByZXN0b3JlQXJndW1lbnRS
ZWZlcmVuY2VGb3JUcmFtcG9saW5lKCk7CiAgICAgICAgIGZhaWx1cmVKdW1wID0gX18gam1wKCk7
CiAgICAgfQogCg==
</data>
<flag name="review"
          id="12054"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>