<?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>4884</bug_id>
          
          <creation_ts>2005-09-08 05:27:59 -0700</creation_ts>
          <short_desc>Canvas element breaks when RenderObject creation is deferred by external CSS</short_desc>
          <delta_ts>2006-04-09 16:34:15 -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>Layout and Rendering</component>
          <version>412</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>HasReduction</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Martin Dittus">webcore</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>dacarson</cc>
    
    <cc>triptych</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>19090</commentid>
    <comment_count>0</comment_count>
    <who name="Martin Dittus">webcore</who>
    <bug_when>2005-09-08 05:27:59 -0700</bug_when>
    <thetext>Pages with a canvas element stop working in Safari as soon as you add an external CSS file to the page. 
The canvas is still correctly added to the page, but all drawing seems to be ignored.

This is reproducable in both 412 and 412+ builds.

I posted this to webkit-dev, here is Dave Hyatt&apos;s response: &quot;Yeah, clearly a bug in our code because we 
defer renderobject creation until stylesheets are loaded. Firefox doesn&apos;t exhibit the bug because it blocks 
its HTML parser while waiting for stylesheets to load.  We don&apos;t.&quot;

Test case attachment follows.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>19091</commentid>
    <comment_count>1</comment_count>
      <attachid>3814</attachid>
    <who name="Martin Dittus">webcore</who>
    <bug_when>2005-09-08 05:29:29 -0700</bug_when>
    <thetext>Created attachment 3814
Three simple test cases

Attaching three simple test cases:

test 1 - simple page with external CSS, and all canvas drawing done inline
test 2 - simple page without external CSS, and all canvas drawing done inline
test 3 - simple page with external CSS, and all canvas drawing done via
onload()

Both Safari 2.0.1 (412.5) and the most recent WebKit CVS version show
the same behavior:

test 1 doesn&apos;t work (blank canvas) 
test 2 works (canvas filled black)
test 3 works (canvas filled black)

Just to be sure I checked with a recent Firefox release, and all three
test cases worked fine (canvas filled black).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>27143</commentid>
    <comment_count>2</comment_count>
    <who name="Joost de Valk (AlthA)">joost</who>
    <bug_when>2005-12-29 07:25:10 -0800</bug_when>
    <thetext>Confirmed, good testcases. Reassigning to webkit-unassigned</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>35575</commentid>
    <comment_count>3</comment_count>
    <who name="David Carson">dacarson</who>
    <bug_when>2006-03-08 17:10:00 -0800</bug_when>
    <thetext>I believe the root cause of this problem is the same as:
http://bugzilla.opendarwin.org/show_bug.cgi?id=6291
ie the render object has not been constructed yet, and as such, there is bitmap to paint onto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>35580</commentid>
    <comment_count>4</comment_count>
    <who name="David Carson">dacarson</who>
    <bug_when>2006-03-08 18:27:37 -0800</bug_when>
    <thetext>*** Bug 6291 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>35581</commentid>
    <comment_count>5</comment_count>
    <who name="David Carson">dacarson</who>
    <bug_when>2006-03-08 18:29:29 -0800</bug_when>
    <thetext>Details copied from 6291:
The problem seems to be that the Canvas render object (RenderCanvasImage) has
not been created yet, although there is a valid DOM element. By memory, render
objects are not created until they are attached to the DOM tree. I believe this
is because the engine does not know how to provide the style information needed
to create a render object until it knows it&apos;s location within the tree.

So, although the getContext function will return with a valid canvas context,
no methods on that object will succeed until it is attached to the DOM.
I am not sure what can be done about this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>35586</commentid>
    <comment_count>6</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2006-03-08 21:51:25 -0800</bug_when>
    <thetext>We basically need the capability to stall script when it ends up needing style information.  Assuming improvements do not occur in this area (i.e., the JS engine), I&apos;ll probably be changing the engine to simply block on scripts until stylesheets have fully loaded.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>36157</commentid>
    <comment_count>7</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-03-13 16:51:05 -0800</bug_when>
    <thetext>Hyatt and I talked about this recently and we realized that the right way to fix this is to move the canvas bitmap buffer from the render object into the DOM object. I&apos;ll probably be doing that after I land the fix for bug 7749, although the fix for that will not resolve this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>38817</commentid>
    <comment_count>8</comment_count>
      <attachid>7592</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-04-08 20:04:21 -0700</bug_when>
    <thetext>Created attachment 7592
patch, including detailed change log and layout test</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>38829</commentid>
    <comment_count>9</comment_count>
      <attachid>7592</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2006-04-09 11:50:22 -0700</bug_when>
    <thetext>Comment on attachment 7592
patch, including detailed change log and layout test

While it does look like this change breaks backwards compatibility for &lt;canvas&gt; elements without any specified width or height, a) I don&apos;t think anyone is relying on that and b) following the standard is way better.

r=me</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>3814</attachid>
            <date>2005-09-08 05:29:29 -0700</date>
            <delta_ts>2005-09-08 05:29:29 -0700</delta_ts>
            <desc>Three simple test cases</desc>
            <filename>canvas-css-renderobject.zip</filename>
            <type>application/octet-stream</type>
            <size>1255</size>
            <attacher name="Martin Dittus">webcore</attacher>
            
              <data encoding="base64">UEsDBBQACAAIAKRuKDMAAAAAAAAAAAAAAAAKABAAc3R5bGVzLmNzc1VYDAA0JiBDJCYgQ/YBAADT
1+LiTM0tKKlUSMvMSeXS0gcAUEsHCGAZRlQTAAAAEQAAAFBLAwQUAAgACABUsiczAAAAAAAAAAAA
AAAACgAQAHRlc3QxLmh0bWxVWAwANCYgQx9LH0P2AfYBRVDBTsQgEL33KyacaqKl2XgTetB48Oof
IMwuuJQ2ZVzbv3coVQkJvJk3782M8jTGoVEejRsa4KNiSFdYMGqRaYuYPSIJ8AuefyOdzVkAbTNq
QbiSLJhFZFVRH5Pb+LEm3UyG4LQYtwoEfAdHXovHvmdNDBdPWpwYDEpWChdmu4SZDgMzzzFYQ2FK
cn34NEzZ02x4MwscJhrcZL9GTNRdkF4jlu/z9ubaf++7p1pBK9NrrJBfplSGaMXJMQUaznfnEOM7
Wmr7e+B7kPfe/1DtnkWVrB2VDRyjy32tP1BLBwjx2Epq3AAAAF0BAABQSwMEFAAIAAgAgLInMwAA
AAAAAAAAAAAAAAoAEAB0ZXN0Mi5odG1sVVgMADQmIENvSx9D9gH2AUWQTQ7CIBCF9z0FYVUTLU3j
ztKFxoVbb4CABUNp04613N5pIZqQPB7zzQ9TG+hck9VGC4XCkj56FVCk8LOYiFWcdiEaSj5WgeH0
WJaUGG1bA5xWaJqaRQQTJznaAQiEQXMqhsFZKcD2ni2Hl0BkC9Mmm8VIUhNOVC/fnfZQtBquTq/X
c7ip/N97d4oZsCAe31b40nvQC+S0UoiQDOPF0zp31xLyck/wJHib/efi9Fi0ZnGidQPp62xbzBdQ
SwcIi1sws7sAAAAfAQAAUEsDBBQACAAIAICyJzMAAAAAAAAAAAAAAAAKABAAdGVzdDMuaHRtbFVY
DAA0JiBDcEsfQ/YB9gFFUUFuwyAQvPsVK06O1NpW1FuxD6166LU/oLAONBgse5PYqvr3LsZNEQd2
dmYYFmlp8F0hLSrTFcBLehfOMKFvxUyrx9kikgA7Yf+HVHqeBdA6YisIF6pTzSazntxIe0ONo3da
kYuhXh6/1FXlNhP7S9AJBzOpW3n43u69qgm0CkyDFkzUlwEDVSekN4/p+LK+m1IMa+aIw/O/ihaW
ZDwJXmNIqUpxNEyDjcecqnfef6CmsnkA3rvg5gzZe2XRnSyx+U8h6xyYH1bn8cjPaFaIwUdlWpHD
p3fvsR2D93yw+bbiqWl4eJtrK45cdLLOlOSbDDf/9Au/UEsHCEiM7Vb3AAAAjAEAAFBLAQIVAxQA
CAAIAKRuKDNgGUZUEwAAABEAAAAKAAwAAAAAAAAAAECkgQAAAABzdHlsZXMuY3NzVVgIADQmIEMk
JiBDUEsBAhUDFAAIAAgAVLInM/HYSmrcAAAAXQEAAAoADAAAAAAAAAAAQKSBWwAAAHRlc3QxLmh0
bWxVWAgANCYgQx9LH0NQSwECFQMUAAgACACAsiczi1sws7sAAAAfAQAACgAMAAAAAAAAAABApIF/
AQAAdGVzdDIuaHRtbFVYCAA0JiBDb0sfQ1BLAQIVAxQACAAIAICyJzNIjO1W9wAAAIwBAAAKAAwA
AAAAAAAAAECkgYICAAB0ZXN0My5odG1sVVgIADQmIENwSx9DUEsFBgAAAAAEAAQAEAEAAMEDAAAA
AA==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>7592</attachid>
            <date>2006-04-08 20:04:21 -0700</date>
            <delta_ts>2006-04-09 11:50:22 -0700</delta_ts>
            <desc>patch, including detailed change log and layout test</desc>
            <filename>CanvasPatch.txt</filename>
            <type>text/plain</type>
            <size>41694</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAxMzc0MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsODEgQEAKKzIwMDYtMDQtMDggIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIC0gZml4
IGh0dHA6Ly9idWd6aWxsYS5vcGVuZGFyd2luLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDg4NAorICAg
ICAgICAgIENhbnZhcyBlbGVtZW50IGJyZWFrcyB3aGVuIFJlbmRlck9iamVjdCBjcmVhdGlvbiBp
cyBkZWZlcnJlZCBieSBleHRlcm5hbCBDU1MKKworICAgICAgICBUZXN0OiBmYXN0L2NhbnZhcy9j
YW52YXMtYmVmb3JlLWNzcy5odG1sCisKKyAgICAgICAgVGhpcyBwYXRjaCBtYWtlcyB1cyBtYXRj
aCB0aGUgY2FudmFzIGRvY3VtZW50YXRpb24gaW4gSGl4aWUncworICAgICAgICBXZWIgQXBwbGlj
YXRpb25zIGRyYWZ0IGFzIGZhciBhcyB3aGVuIHRoZSBjYW52YXMgaXMgY3JlYXRlZAorICAgICAg
ICBhbmQgcmVjcmVhdGVkIGFuZCBob3cgaXQncyBzaXplZC4gSXQgYWxzbyBnZXRzIHJpZCBvZiB0
aGUKKyAgICAgICAgY29tcG9zaXRlT3BlcmF0aW9uIGF0dHJpYnV0ZSBvZiB0aGUgY2FudmFzIGVs
ZW1lbnQuIFdlIGNhbiBhZGQKKyAgICAgICAgdGhhdCBiYWNrIGlmIHdlIG5lZWQgaXQuCisKKyAg
ICAgICAgKiBodG1sL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oOiBBZGRlZCBvdmVybG9hZHMg
b2YgZHJhd0ltYWdlIHRoYXQgdGFrZQorICAgICAgICBIVE1MQ2FudmFzRWxlbWVudCwgd2hpY2gg
aXMgbm8gbG9uZ2VyIGRlcml2ZWQgZnJvbSBIVE1MSW1hZ2VFbGVtZW50LgorICAgICAgICAqIGh0
bWwvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmltYWdl
U2l6ZSk6IFJlbmFtZWQgZnJvbSBpbWFnZU9yQ2FudmFzU2l6ZS4gTm93IHVzZWQgZm9yIGltYWdl
cyBvbmx5LAorICAgICAgICBiZWNhdXNlIGNhbnZhcyBpcyBubyBsb25nZXIgZGVyaXZlZCBmcm9t
IGltYWdlLgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpkcmF3
SW1hZ2UpOiBTcGxpdCB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhpcworICAgICAgICBmb3IgaW1h
Z2Ugc291cmNlcyBmcm9tIHRoZSBpbXBsZW1lbnRhdGlvbiBmb3IgY2FudmFzIHNvdXJjZXMuCisg
ICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OndpbGxEcmF3KTogQ2hh
bmdlZCB0byBjYWxsIGEgbmV3IHdpbGxEcmF3CisgICAgICAgIGZ1bmN0aW9uIG9uIHRoZSBjYW52
YXMgZWxlbWVudC4KKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6
ZHJhd2luZ0NvbnRleHQpOiBDaGFuZ2VkIHRvIGNhbGwgZHJhd2luZ0NvbnRleHQKKyAgICAgICAg
b24gdGhlIGNhbnZhcyBlbGVtZW50IHJhdGhlciB0aGFuIHRoZSByZW5kZXJlci4KKworICAgICAg
ICAqIGh0bWwvSFRNTENhbnZhc0VsZW1lbnQuaDogQ2hhbmdlZCBIVE1MQ2FudmFzRWxlbWVudCB0
byBkZXJpdmUgZnJvbSBIVE1MRWxlbWVudAorICAgICAgICBpbnN0ZWFkIG9mIEhUTUxJbWFnZUVs
ZW1lbnQuIEFkZGVkIHdpZHRoLCBoZWlnaHQsIHNldFdpZHRoLCBzZXRIZWlnaHQsIHdpbGxEcmF3
LAorICAgICAgICBwYWludCwgZHJhd2luZ0NvbnRleHQsIGNyZWF0ZURyYXdpbmdDb250ZXh0LCBh
bmQgcmVzZXQgZnVuY3Rpb25zLiBBZGRlZCBtX3NpemUsCisgICAgICAgIG1fY3JlYXRlZERyYXdp
bmdDb250ZXh0LCBtX2RhdGEsIGFuZCBtX2RyYXdpbmdDb250ZXh0IGRhdGEgbWVtYmVycy4gUmVt
b3ZlZAorICAgICAgICBtYXBUb0VudHJ5LCBhdHRhY2gsIGRldGFjaCwgYW5kIGlzVVJMQXR0cmli
dXRlIGZ1bmN0aW5zLgorCisgICAgICAgICogaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6SFRNTENhbnZhc0VsZW1lbnQpOiBB
ZGRlZCBpbml0aWFsaXplcnMgZm9yIG5ldyBtX3NpemUsCisgICAgICAgIG1fY3JlYXRlZERyYXdp
bmdDb250ZXh0LCBtX2RhdGEsIGFuZCBtX2RyYXdpbmdDb250ZXh0IGRhdGEgbWVtYmVycy4KKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50Ojp+SFRNTENhbnZhc0VsZW1lbnQpOiBG
cmVlIG1fZGF0YSBhbmQgbV9kcmF3aW5nQ29udGV4dC4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxD
YW52YXNFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6IEdvdCByaWQgb2Ygc3BlY2lhbCBj
YXNlIGZvcgorICAgICAgICBzcmNBdHRyLCB3aGljaCBpcyBubyBsb25nZXIgbmVlZGVkIHNpbmNl
IHdlIGFyZW4ndCBkZXJpdmluZyBmcm9tIEhUTUxJbWFnZUVsZW1lbnQuCisgICAgICAgIEFkZGVk
IGNvZGUgdGhhdCB0cmlnZ2VycyBhIHJlc2V0IHdoZW4gZWl0aGVyIHdpZHRoIG9yIGhlaWdodCBp
cyBzZXQuCisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6Y3JlYXRlUmVuZGVy
ZXIpOiBBZGRlZCBjb2RlIHRvIHNldCB0aGUgaW50cmluc2ljCisgICAgICAgIHdpZHRoIGFuZCBo
ZWlnaHQgb2YgdGhlIHJlbmRlcmVyIHRvIHRoZSBzaXplIG9mIHRoZSBlbGVtZW50LgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OnNldEhlaWdodCk6IEFkZGVkLiBTZXRzIHRo
ZSBoZWlnaHQgYXR0cmlidXRlLgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6
OnNldFdpZHRoKTogQWRkZWQuIFNldHMgdGhlIHdpZHRoIGF0dHJpYnV0ZS4KKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxDYW52YXNFbGVtZW50Ojp3aWxsRHJhdyk6IEFkZGVkLiBUZWxscyB0aGUgcmVu
ZGVyZXIgdG8gcmVwYWludC4KKyAgICAgICAgQWxzbyBoYXMgRklYTUUgbWVudGlvbmluZyB3ZSBj
b3VsZCBkaXJ0eSBvbmx5IHRoZSBwYXJ0IHRoYXQgaGFzIGNoYW5nZWQgaW4gdGhlIGZ1dHVyZS4K
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjpyZXNldCk6IEFkZGVkLiBTZXRz
IHRoZSBzaXplIG9mIHRoZSBjYW52YXMgYW5kIGRpc2NhcmRzCisgICAgICAgIHRoZSBvbGQgYnVm
ZmVyLCB3aGljaCBpcyBhbiBpbmRpcmVjdCB3YXkgb2YgcmVzZXR0aW5nIHRoZSBidWZmZXIgdG8g
dHJhbnNwYXJlbnQgYmxhY2suCisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6
cGFpbnQpOiBBZGRlZC4gRHJhd3MgdGhlIGNhbnZhcyBpbWFnZSBpbnRvIHRoZSBncmFwaGljcwor
ICAgICAgICBjb250ZXh0IHRoYXQncyBwYXNzZWQgaW4uCisgICAgICAgIChXZWJDb3JlOjpIVE1M
Q2FudmFzRWxlbWVudDo6Y3JlYXRlRHJhd2luZ0NvbnRleHQpOiBBZGRlZC4gQWxsb2NhdGVzIGEg
YnVmZmVyIGZvcgorICAgICAgICB0aGUgYml0cywgdGhlbiBjcmVhdGVzIGEgYml0bWFwIGNvbnRl
eHQgZm9yIGRyYXdpbmcgaW50byB0aGUgYnVmZmVyLgorICAgICAgICAoV2ViQ29yZTo6SFRNTENh
bnZhc0VsZW1lbnQ6OmRyYXdpbmdDb250ZXh0KTogQWRkZWQuIENhbGxzIGNyZWF0ZURyYXdpbmdD
b250ZXh0IGlmCisgICAgICAgIG5lZWRlZCwgdGhlbiByZXR1cm5zIHRoZSBjdXJyZW50IGRyYXdp
bmcgY29udGV4dC4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjpjcmVhdGVQ
bGF0Zm9ybUltYWdlKTogQ2hhbmdlZCB0byBhbHdheXMgY2FsbCBDR0NvbnRleHRGbHVzaAorICAg
ICAgICBhbmQgdG8gY3JlYXRlIHRoZSBpbWFnZSBmcm9tIHRoZSBjb250ZXh0IGluIHRoaXMgY2xh
c3MuCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVySFRNTENhbnZhcy5oOiBSZW1vdmUgYWxt
b3N0IGFsbCBvZiB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlLgorICAgICAgICBSZW1vdmVkIH5S
ZW5kZXJIVE1MQ2FudmFzLCBzZXROZWVkc0ltYWdlVXBkYXRlLCBlbGVtZW50LCB1cGRhdGVEcmF3
bkltYWdlLCBkcmF3aW5nQ29udGV4dCwKKyAgICAgICAgY3JlYXRlRHJhd2luZ0NvbnRleHQsIGFu
ZCBkcmF3bkltYWdlIGZ1bmN0aW9ucyBhbmQgX2RyYXdpbmdDb250ZXh0LCBfZHJhd2luZ0NvbnRl
eHREYXRhLAorICAgICAgICBfZHJhd25JbWFnZSwgYW5kIF9uZWVkc0ltYWdlVXBkYXRlIGJvb2xl
YW5zLiBDaGFuZ2VkIFJlbmRlckhUTUxDYW52YXMgdG8gZGVyaXZlIGZyb20KKyAgICAgICAgUmVu
ZGVyUmVwbGFjZWQgaW5zdGVhZCBvZiBSZW5kZXJJbWFnZS4KKworICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJIVE1MQ2FudmFzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckhUTUxDYW52
YXM6OlJlbmRlckhUTUxDYW52YXMpOiBDaGFuZ2VkIHRvIG9ubHkgaW5pdGlhbGl6ZSBSZW5kZXJS
ZXBsYWNlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckhUTUxDYW52YXM6OnJlbmRlck5hbWUp
OiBNb3ZlZCB0aGlzIGluIGhlcmUsIHNpbmNlIHRoZXJlJ3Mgbm8gZ29vZCByZWFzb24KKyAgICAg
ICAgdG8gaGF2ZSB0aGlzIHZpcnR1YWwgZnVuY3Rpb24gaW5saW5lZC4KKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckhUTUxDYW52YXM6OnBhaW50KTogQ2hhbmdlZCBpbXBsZW1lbnRhdGlvbiB0byB1
c2UgSFRNTENhbnZhc0VsZW1lbnQ6OnBhaW50CisgICAgICAgIGluc3RlYWQgb2ZjYWxsaW5nIENH
Q29udGV4dERyYXdJbWFnZSBkaXJlY3RseS4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckhUTUxD
YW52YXM6OmxheW91dCk6IFJlbW92ZWQgdGhlIGNvZGUgdGhhdCBkZXRlY3RzIGNoYW5nZXMgaW4g
d2lkdGggYW5kCisgICAgICAgIGNhdXNlcyB0aGUgZHJhd2luZyBjb250ZXh0IHRvIGJlIHJlY3Jl
YXRlZDsgaW5zdGVhZCwgaWYgdGhlIHdpZHRoIGFuZCBoZWlnaHQgY2hhbmdlcyB3ZQorICAgICAg
ICBzY2FsZSB3aGVuIHdlIHBhaW50IHRoZSBjYW52YXMuCisKKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9KU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlUHJvdG9GdW5jOjpjYWxsQXNGdW5jdGlvbik6
CisgICAgICAgIFNlcGFyYXRlZCBvdXQgaGFuZGxpbmcgZm9yIDxjYW52YXM+IHZzLiA8aW1nPiBl
bGVtZW50cyBpbiBkcmF3UmVjdCwgc2luY2UKKyAgICAgICAgSFRNTENhbnZhc0VsZW1lbnQgaXMg
bm8gbG9uZ2VyIGRlcml2ZWQgZnJvbSBIVE1MSW1hZ2VFbGVtZW50LgorCiAyMDA2LTA0LTA3ICBE
YXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBIeWF0
dC4KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRC
YXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEQmFzZS5jcHAJKHJldmlzaW9uIDEzNzM5KQorKysgV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xNyw4ICsxNyw2IEBACiAgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KICAqLwogCi0v
LyBUaGlzIGZpbGUgbmVlZHMgdG8gYmUgdG91Y2hlZCBldmVyeSBvbmNlIGluIGEgd2hpbGUuCi0K
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQy
REJhc2UuaCIKIApAQCAtMjYsNiArMjQsNyBAQAogI2luY2x1ZGUgIkNhbnZhc1BhdHRlcm4uaCIK
ICNpbmNsdWRlICJDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaCIKICNpbmNsdWRlICJDYW52YXNT
dHlsZS5oIgorI2luY2x1ZGUgIkhUTUxDYW52YXNFbGVtZW50LmgiCiAjaW5jbHVkZSAiSlNDYW52
YXNHcmFkaWVudC5oIgogI2luY2x1ZGUgIkpTQ2FudmFzUGF0dGVybi5oIgogI2luY2x1ZGUgImh0
bWxfaW1hZ2VpbXBsLmgiCkBAIC0xNzgsMzUgKzE3Nyw1NyBAQAogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpEcmF3SW1hZ2U6
IHsKICAgICAgICAgICAgIC8vIERyYXdJbWFnZSBoYXMgdGhyZWUgdmFyaWFudHM6Ci0gICAgICAg
ICAgICAvLyBkcmF3SW1hZ2UoaW1nLCBkeCwgZHkpCi0gICAgICAgICAgICAvLyBkcmF3SW1hZ2Uo
aW1nLCBkeCwgZHksIGR3LCBkaCkKLSAgICAgICAgICAgIC8vIGRyYXdJbWFnZShpbWcsIHN4LCBz
eSwgc3csIHNoLCBkeCwgZHksIGR3LCBkaCkKLSAgICAgICAgICAgIC8vIGNvbXBvc2l0ZSBvcGVy
YXRpb24gaXMgc3BlY2lmaWVkIHdpdGggZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uCi0gICAgICAg
ICAgICAvLyBpbWcgcGFyYW1ldGVyIGNhbiBiZSBhIEphdmFTY3JpcHQgSW1hZ2UsIDxpbWc+LCBv
ciBhIDxjYW52YXM+CisgICAgICAgICAgICAvLyAgICAgZHJhd0ltYWdlKGltZywgZHgsIGR5KQor
ICAgICAgICAgICAgLy8gICAgIGRyYXdJbWFnZShpbWcsIGR4LCBkeSwgZHcsIGRoKQorICAgICAg
ICAgICAgLy8gICAgIGRyYXdJbWFnZShpbWcsIHN4LCBzeSwgc3csIHNoLCBkeCwgZHksIGR3LCBk
aCkKKyAgICAgICAgICAgIC8vIENvbXBvc2l0ZSBvcGVyYXRpb24gaXMgc3BlY2lmaWVkIHdpdGgg
Z2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uLgorICAgICAgICAgICAgLy8gVGhlIGltZyBwYXJhbWV0
ZXIgY2FuIGJlIGEgPGltZz4gb3IgPGNhbnZhcz4gZWxlbWVudC4KICAgICAgICAgICAgIEpTT2Jq
ZWN0KiBvID0gc3RhdGljX2Nhc3Q8SlNPYmplY3QqPihhcmdzWzBdKTsKICAgICAgICAgICAgIGlm
ICghby0+aXNPYmplY3QoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVj
LCBUeXBlRXJyb3IpOwotICAgICAgICAgICAgaWYgKCEoby0+aW5oZXJpdHMoJkpTSFRNTEVsZW1l
bnQ6OmltZ19pbmZvKSB8fCBvLT5pbmhlcml0cygmSlNIVE1MRWxlbWVudDo6Y2FudmFzX2luZm8p
KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwot
ICAgICAgICAgICAgSFRNTEltYWdlRWxlbWVudCogaW1nRWx0ID0gc3RhdGljX2Nhc3Q8SFRNTElt
YWdlRWxlbWVudCo+KHN0YXRpY19jYXN0PEpTSFRNTEVsZW1lbnQqPihhcmdzWzBdKS0+aW1wbCgp
KTsKLSAgICAgICAgICAgIHN3aXRjaCAoYXJncy5zaXplKCkpIHsKLSAgICAgICAgICAgICAgICBj
YXNlIDM6Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmRyYXdJbWFnZShpbWdFbHQsIGFy
Z3NbMV0tPnRvTnVtYmVyKGV4ZWMpLCBhcmdzWzJdLT50b051bWJlcihleGVjKSk7Ci0gICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgNToKLSAgICAgICAgICAg
ICAgICAgICAgY29udGV4dC0+ZHJhd0ltYWdlKGltZ0VsdCwgYXJnc1sxXS0+dG9OdW1iZXIoZXhl
YyksIGFyZ3NbMl0tPnRvTnVtYmVyKGV4ZWMpLAotICAgICAgICAgICAgICAgICAgICAgICAgYXJn
c1szXS0+dG9OdW1iZXIoZXhlYyksIGFyZ3NbNF0tPnRvTnVtYmVyKGV4ZWMpKTsKLSAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSA5OgotICAgICAgICAgICAg
ICAgICAgICBjb250ZXh0LT5kcmF3SW1hZ2UoaW1nRWx0LCBhcmdzWzFdLT50b051bWJlcihleGVj
KSwgYXJnc1syXS0+dG9OdW1iZXIoZXhlYyksCi0gICAgICAgICAgICAgICAgICAgICAgICBhcmdz
WzNdLT50b051bWJlcihleGVjKSwgYXJnc1s0XS0+dG9OdW1iZXIoZXhlYyksCi0gICAgICAgICAg
ICAgICAgICAgICAgICBhcmdzWzVdLT50b051bWJlcihleGVjKSwgYXJnc1s2XS0+dG9OdW1iZXIo
ZXhlYyksCi0gICAgICAgICAgICAgICAgICAgICAgICBhcmdzWzddLT50b051bWJlcihleGVjKSwg
YXJnc1s4XS0+dG9OdW1iZXIoZXhlYykpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dF
cnJvcihleGVjLCBTeW50YXhFcnJvcik7CisgICAgICAgICAgICBpZiAoby0+aW5oZXJpdHMoJkpT
SFRNTEVsZW1lbnQ6OmltZ19pbmZvKSkgeworICAgICAgICAgICAgICAgIEhUTUxJbWFnZUVsZW1l
bnQqIGltZ0VsdCA9IHN0YXRpY19jYXN0PEhUTUxJbWFnZUVsZW1lbnQqPihzdGF0aWNfY2FzdDxK
U0hUTUxFbGVtZW50Kj4oYXJnc1swXSktPmltcGwoKSk7CisgICAgICAgICAgICAgICAgc3dpdGNo
IChhcmdzLnNpemUoKSkgeworICAgICAgICAgICAgICAgICAgICBjYXNlIDM6CisgICAgICAgICAg
ICAgICAgICAgICAgICBjb250ZXh0LT5kcmF3SW1hZ2UoaW1nRWx0LCBhcmdzWzFdLT50b051bWJl
cihleGVjKSwgYXJnc1syXS0+dG9OdW1iZXIoZXhlYykpOworICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgNToKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnRleHQtPmRyYXdJbWFnZShpbWdFbHQsIGFyZ3NbMV0tPnRvTnVtYmVyKGV4ZWMp
LCBhcmdzWzJdLT50b051bWJlcihleGVjKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBh
cmdzWzNdLT50b051bWJlcihleGVjKSwgYXJnc1s0XS0+dG9OdW1iZXIoZXhlYykpOworICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgOToKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmRyYXdJbWFnZShpbWdFbHQsIGFyZ3NbMV0t
PnRvTnVtYmVyKGV4ZWMpLCBhcmdzWzJdLT50b051bWJlcihleGVjKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBhcmdzWzNdLT50b051bWJlcihleGVjKSwgYXJnc1s0XS0+dG9OdW1iZXIo
ZXhlYyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnc1s1XS0+dG9OdW1iZXIoZXhl
YyksIGFyZ3NbNl0tPnRvTnVtYmVyKGV4ZWMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGFyZ3NbN10tPnRvTnVtYmVyKGV4ZWMpLCBhcmdzWzhdLT50b051bWJlcihleGVjKSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFN5bnRheEVy
cm9yKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChvLT5pbmhlcml0cygm
SlNIVE1MRWxlbWVudDo6Y2FudmFzX2luZm8pKSB7CisgICAgICAgICAgICAgICAgSFRNTENhbnZh
c0VsZW1lbnQqIGNhbnZhcyA9IHN0YXRpY19jYXN0PEhUTUxDYW52YXNFbGVtZW50Kj4oc3RhdGlj
X2Nhc3Q8SlNIVE1MRWxlbWVudCo+KGFyZ3NbMF0pLT5pbXBsKCkpOworICAgICAgICAgICAgICAg
IHN3aXRjaCAoYXJncy5zaXplKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAzOgorICAg
ICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+ZHJhd0ltYWdlKGNhbnZhcywgYXJnc1sxXS0+
dG9OdW1iZXIoZXhlYyksIGFyZ3NbMl0tPnRvTnVtYmVyKGV4ZWMpKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIDU6CisgICAgICAgICAg
ICAgICAgICAgICAgICBjb250ZXh0LT5kcmF3SW1hZ2UoY2FudmFzLCBhcmdzWzFdLT50b051bWJl
cihleGVjKSwgYXJnc1syXS0+dG9OdW1iZXIoZXhlYyksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYXJnc1szXS0+dG9OdW1iZXIoZXhlYyksIGFyZ3NbNF0tPnRvTnVtYmVyKGV4ZWMpKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNl
IDk6CisgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5kcmF3SW1hZ2UoY2FudmFzLCBh
cmdzWzFdLT50b051bWJlcihleGVjKSwgYXJnc1syXS0+dG9OdW1iZXIoZXhlYyksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYXJnc1szXS0+dG9OdW1iZXIoZXhlYyksIGFyZ3NbNF0tPnRv
TnVtYmVyKGV4ZWMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3NbNV0tPnRvTnVt
YmVyKGV4ZWMpLCBhcmdzWzZdLT50b051bWJlcihleGVjKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBhcmdzWzddLT50b051bWJlcihleGVjKSwgYXJnc1s4XS0+dG9OdW1iZXIoZXhlYykp
OworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBT
eW50YXhFcnJvcik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVy
cm9yKTsKICAgICAgICAgfQogICAgICAgICBjYXNlIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
QmFzZTo6RHJhd0ltYWdlRnJvbVJlY3Q6IHsKICAgICAgICAgICAgIEpTT2JqZWN0KiBvID0gc3Rh
dGljX2Nhc3Q8SlNPYmplY3QqPihhcmdzWzBdKTsKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MQ2Fu
dmFzRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVu
dC5oCShyZXZpc2lvbiAxMzczOSkKKysrIFdlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw4IEBACiAjaW5jbHVkZSAiaHRtbF9pbWFnZWlt
cGwuaCIKIAogI2lmIF9fQVBQTEVfXworLy8gRklYTUU6IE1hYy1zcGVjaWZpYyBwYXJ0cyBuZWVk
IHRvIG1vdmUgdG8gdGhlIHBsYXRmb3JtIGRpcmVjdG9yeS4KK3R5cGVkZWYgc3RydWN0IENHQ29u
dGV4dCogQ0dDb250ZXh0UmVmOwogdHlwZWRlZiBzdHJ1Y3QgQ0dJbWFnZSogQ0dJbWFnZVJlZjsK
ICNlbmRpZgogCkBAIC0zNywzNSArMzksNDggQEAKIGNsYXNzIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRDsKIHR5cGVkZWYgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQ7CiAKLS8vIEZJWE1FOiBTaG91bGQgaW5oZXJpdCBmcm9tIEhUTUxFbGVtZW50IGluc3Rl
YWQgb2YgSFRNTEltYWdlRWxlbWVudC4KLWNsYXNzIEhUTUxDYW52YXNFbGVtZW50IDogcHVibGlj
IEhUTUxJbWFnZUVsZW1lbnQgeworY2xhc3MgSFRNTENhbnZhc0VsZW1lbnQgOiBwdWJsaWMgSFRN
TEVsZW1lbnQgewogcHVibGljOgogICAgIEhUTUxDYW52YXNFbGVtZW50KERvY3VtZW50Kik7Ci0g
ICAgfkhUTUxDYW52YXNFbGVtZW50KCk7CisgICAgdmlydHVhbCB+SFRNTENhbnZhc0VsZW1lbnQo
KTsKIAorICAgIGludCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZS53aWR0aCgpOyB9Cisg
ICAgaW50IGhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZS5oZWlnaHQoKTsgfQorICAgIHZv
aWQgc2V0V2lkdGgoaW50KTsKKyAgICB2b2lkIHNldEhlaWdodChpbnQpOworCiAgICAgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dCogZ2V0Q29udGV4dChjb25zdCBTdHJpbmcmKTsKLQogICAgIC8vIEZJ
WE1FOiBXZWIgQXBwbGljYXRpb25zIDEuMCBkZXNjcmliZXMgYSB0b0RhdGFVUkwgZnVuY3Rpb24u
CiAKLSAgICB2aXJ0dWFsIGJvb2wgbWFwVG9FbnRyeShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRy
TmFtZSwgTWFwcGVkQXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3Q7CiAgICAgdmlydHVhbCB2
b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSopOwotCi0gICAgdmlydHVh
bCB2b2lkIGF0dGFjaCgpOwogICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0KiBjcmVhdGVSZW5kZXJl
cihSZW5kZXJBcmVuYSosIFJlbmRlclN0eWxlKik7Ci0gICAgdmlydHVhbCB2b2lkIGRldGFjaCgp
OwotICAgIAotICAgIHZpcnR1YWwgYm9vbCBpc1VSTEF0dHJpYnV0ZShBdHRyaWJ1dGUqKSBjb25z
dDsKIAotICAgIEludFNpemUgc2l6ZSgpIGNvbnN0OworICAgIEludFNpemUgc2l6ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fc2l6ZTsgfQorICAgIHZvaWQgd2lsbERyYXcoY29uc3QgRmxvYXRSZWN0Jik7
CiAKKyAgICB2b2lkIHBhaW50KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmKTsKKwog
I2lmIF9fQVBQTEVfXwogICAgIENHSW1hZ2VSZWYgY3JlYXRlUGxhdGZvcm1JbWFnZSgpIGNvbnN0
OworICAgIENHQ29udGV4dFJlZiBkcmF3aW5nQ29udGV4dCgpIGNvbnN0OwogI2VuZGlmCiAKIHBy
aXZhdGU6CisgICAgdm9pZCBjcmVhdGVEcmF3aW5nQ29udGV4dCgpIGNvbnN0OworICAgIHZvaWQg
cmVzZXQoKTsKKwogICAgIFJlZlB0cjxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+IG1fMkRDb250
ZXh0OwotICAgIC8vIEZJWE1FOiBXZWIgQXBwbGljYXRpb25zIDEuMCBkZXNjcmliZXMgYSBzZWN1
cml0eSBmZWF0dXJlIHdoZXJlIHdlIHRyYWNrIGlmIHdlIGV2ZXIgZHJldwotICAgIC8vIGFueSBp
bWFnZXMgb3V0c2lkZSB0aGUgZG9tYWluLgorICAgIEludFNpemUgbV9zaXplOworCisgICAgLy8g
RklYTUU6IFdlYiBBcHBsaWNhdGlvbnMgMS4wIGRlc2NyaWJlcyBhIHNlY3VyaXR5IGZlYXR1cmUg
d2hlcmUgd2UgdHJhY2sKKyAgICAvLyBpZiB3ZSBldmVyIGRyZXcgYW55IGltYWdlcyBvdXRzaWRl
IHRoZSBkb21haW4sIHNvIHdlIGNhbiBkaXNhYmxlIHRvRGF0YVVSTC4KKworICAgIG11dGFibGUg
Ym9vbCBtX2NyZWF0ZWREcmF3aW5nQ29udGV4dDsKKyAgICBtdXRhYmxlIHZvaWQqIG1fZGF0YTsK
KworI2lmIF9fQVBQTEVfXworICAgIG11dGFibGUgQ0dDb250ZXh0UmVmIG1fZHJhd2luZ0NvbnRl
eHQ7CisjZW5kaWYKIH07CiAKIH0gLy9uYW1lc3BhY2UKSW5kZXg6IFdlYkNvcmUvaHRtbC9DYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9DYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCShyZXZpc2lvbiAxMzczOSkKKysrIFdlYkNvcmUvaHRt
bC9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NzAsMTAg
Kzc3MCw4IEBACiB9CiAKIC8vIEZJWE1FOiBUaGlzIG9ubHkgZXhpc3RzIGJlY2F1c2UgY2FudmFz
IGlzIGEgc3ViY2xhc3Mgb2YgaW1hZ2UuCi1zdGF0aWMgSW50U2l6ZSBpbWFnZU9yQ2FudmFzU2l6
ZShIVE1MSW1hZ2VFbGVtZW50KiBpbWFnZSkKK3N0YXRpYyBJbnRTaXplIGltYWdlU2l6ZShIVE1M
SW1hZ2VFbGVtZW50KiBpbWFnZSkKIHsKLSAgICBpZiAoaW1hZ2UtPmhhc0xvY2FsTmFtZShjYW52
YXNUYWcpKQotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTENhbnZhc0VsZW1lbnQqPihp
bWFnZSktPnNpemUoKTsKICAgICBpZiAoQ2FjaGVkSW1hZ2UqIGNhY2hlZEltYWdlID0gaW1hZ2Ut
PmNhY2hlZEltYWdlKCkpCiAgICAgICAgIHJldHVybiBjYWNoZWRJbWFnZS0+aW1hZ2VTaXplKCk7
CiAgICAgcmV0dXJuIEludFNpemUoKTsKQEAgLTc4Myw3ICs3ODEsNyBAQAogewogICAgIGlmICgh
aW1hZ2UpCiAgICAgICAgIHJldHVybjsKLSAgICBJbnRTaXplIHNpemUgPSBpbWFnZU9yQ2FudmFz
U2l6ZShpbWFnZSk7CisgICAgSW50U2l6ZSBzaXplID0gaW1hZ2VTaXplKGltYWdlKTsKICAgICBk
cmF3SW1hZ2UoaW1hZ2UsIDAsIDAsIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSwgeCwgeSwg
c2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsKIH0KIApAQCAtNzkxLDcgKzc4OSw3IEBACiB7
CiAgICAgaWYgKCFpbWFnZSkKICAgICAgICAgcmV0dXJuOwotICAgIEludFNpemUgc2l6ZSA9IGlt
YWdlT3JDYW52YXNTaXplKGltYWdlKTsKKyAgICBJbnRTaXplIHNpemUgPSBpbWFnZVNpemUoaW1h
Z2UpOwogICAgIGRyYXdJbWFnZShpbWFnZSwgMCwgMCwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdo
dCgpLCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKIH0KIApAQCAtODA4LDIzICs4MDYsNDkgQEAKICAg
ICBpZiAoIWMpCiAgICAgICAgIHJldHVybjsKIAorICAgIENhY2hlZEltYWdlKiBjYWNoZWRJbWFn
ZSA9IGltYWdlLT5jYWNoZWRJbWFnZSgpOworICAgIGlmICghY2FjaGVkSW1hZ2UpCisgICAgICAg
IHJldHVybjsKKwogICAgIEZsb2F0UmVjdCBkZXN0UmVjdCA9IEZsb2F0UmVjdChkeCwgZHksIGR3
LCBkaCk7CisgICAgd2lsbERyYXcoZGVzdFJlY3QpOworICAgIGNhY2hlZEltYWdlLT5pbWFnZSgp
LT5kcmF3SW5SZWN0KGRlc3RSZWN0LCBGbG9hdFJlY3Qoc3gsIHN5LCBzdywgc2gpLAorICAgICAg
ICBJbWFnZTo6Y29tcG9zaXRlT3BlcmF0b3JGcm9tU3RyaW5nKHN0YXRlKCkubV9nbG9iYWxDb21w
b3NpdGUpLCBjKTsKKyNlbmRpZgorfQogCi0gICAgaWYgKCFpbWFnZS0+aGFzTG9jYWxOYW1lKGNh
bnZhc1RhZykpIHsKLSAgICAgICAgQ2FjaGVkSW1hZ2UqIGNhY2hlZEltYWdlID0gaW1hZ2UtPmNh
Y2hlZEltYWdlKCk7Ci0gICAgICAgIGlmICghY2FjaGVkSW1hZ2UpCi0gICAgICAgICAgICByZXR1
cm47Cit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZHJhd0ltYWdlKEhUTUxDYW52YXNF
bGVtZW50KiBjYW52YXMsIGZsb2F0IHgsIGZsb2F0IHkpCit7CisgICAgaWYgKCFjYW52YXMpCisg
ICAgICAgIHJldHVybjsKKyAgICBkcmF3SW1hZ2UoY2FudmFzLCAwLCAwLCBjYW52YXMtPndpZHRo
KCksIGNhbnZhcy0+aGVpZ2h0KCksIHgsIHksIGNhbnZhcy0+d2lkdGgoKSwgY2FudmFzLT5oZWln
aHQoKSk7Cit9CiAKLSAgICAgICAgd2lsbERyYXcoZGVzdFJlY3QpOwotICAgICAgICBjYWNoZWRJ
bWFnZS0+aW1hZ2UoKS0+ZHJhd0luUmVjdChkZXN0UmVjdCwgRmxvYXRSZWN0KHN4LCBzeSwgc3cs
IHNoKSwKLSAgICAgICAgICAgIEltYWdlOjpjb21wb3NpdGVPcGVyYXRvckZyb21TdHJpbmcoc3Rh
dGUoKS5tX2dsb2JhbENvbXBvc2l0ZSksIGMpOwordm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQ6OmRyYXdJbWFnZShIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzLCBmbG9hdCB4LCBmbG9hdCB5
LCBmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0KQoreworICAgIGlmICghY2FudmFzKQogICAgICAg
ICByZXR1cm47Ci0gICAgfQorICAgIGRyYXdJbWFnZShjYW52YXMsIDAsIDAsIGNhbnZhcy0+d2lk
dGgoKSwgY2FudmFzLT5oZWlnaHQoKSwgeCwgeSwgd2lkdGgsIGhlaWdodCk7Cit9CiAKLSAgICBD
R0ltYWdlUmVmIHBsYXRmb3JtSW1hZ2UgPSBzdGF0aWNfY2FzdDxIVE1MQ2FudmFzRWxlbWVudCo+
KGltYWdlKS0+Y3JlYXRlUGxhdGZvcm1JbWFnZSgpOwordm9pZCBDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQ6OmRyYXdJbWFnZShIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzLAorICAgIGZsb2F0IHN4
LCBmbG9hdCBzeSwgZmxvYXQgc3csIGZsb2F0IHNoLAorICAgIGZsb2F0IGR4LCBmbG9hdCBkeSwg
ZmxvYXQgZHcsIGZsb2F0IGRoKQoreworICAgIGlmICghY2FudmFzKQorICAgICAgICByZXR1cm47
CisKKyAgICAvLyBGSVhNRTogRG8gdGhpcyB0aHJvdWdoIHBsYXRmb3JtLWluZGVwZW5kZW50IEdy
YXBoaWNzQ29udGV4dCBBUEkuCisjaWYgX19BUFBMRV9fCisgICAgQ0dDb250ZXh0UmVmIGMgPSBk
cmF3aW5nQ29udGV4dCgpOworICAgIGlmICghYykKKyAgICAgICAgcmV0dXJuOworCisgICAgQ0dJ
bWFnZVJlZiBwbGF0Zm9ybUltYWdlID0gY2FudmFzLT5jcmVhdGVQbGF0Zm9ybUltYWdlKCk7CiAg
ICAgaWYgKCFwbGF0Zm9ybUltYWdlKQogICAgICAgICByZXR1cm47CiAKKyAgICBGbG9hdFJlY3Qg
ZGVzdFJlY3QgPSBGbG9hdFJlY3QoZHgsIGR5LCBkdywgZGgpOwogICAgIHdpbGxEcmF3KGRlc3RS
ZWN0KTsKIAogICAgIGZsb2F0IGl3ID0gQ0dJbWFnZUdldFdpZHRoKHBsYXRmb3JtSW1hZ2UpOwpA
QCAtODcxLDIxICs4OTUsMTcgQEAKICAgICBpZiAoIWltYWdlKQogICAgICAgICByZXR1cm47CiAK
KyAgICBDYWNoZWRJbWFnZSogY2FjaGVkSW1hZ2UgPSBpbWFnZS0+Y2FjaGVkSW1hZ2UoKTsKKyAg
ICBpZiAoIWNhY2hlZEltYWdlKQorICAgICAgICByZXR1cm47CisKICAgICAvLyBGSVhNRTogRG8g
dGhpcyB0aHJvdWdoIHBsYXRmb3JtLWluZGVwZW5kZW50IEdyYXBoaWNzQ29udGV4dCBBUEkuCisg
ICAgRmxvYXRSZWN0IGRlc3RSZWN0ID0gRmxvYXRSZWN0KGR4LCBkeSwgZHcsIGRoKTsKKyAgICB3
aWxsRHJhdyhkZXN0UmVjdCk7CiAjaWYgX19BUFBMRV9fCiAgICAgQ0dDb250ZXh0UmVmIGMgPSBk
cmF3aW5nQ29udGV4dCgpOwogICAgIGlmICghYykKICAgICAgICAgcmV0dXJuOwotCi0gICAgRmxv
YXRSZWN0IGRlc3RSZWN0ID0gRmxvYXRSZWN0KGR4LCBkeSwgZHcsIGRoKTsKLQotICAgIC8vIEZJ
WE1FOiBEb2VzIG5vdCBzdXBwb3J0IHVzaW5nIGEgY2FudmFzIGFzIGEgc291cmNlIGltYWdlLgot
ICAgIENhY2hlZEltYWdlKiBjYWNoZWRJbWFnZSA9IGltYWdlLT5jYWNoZWRJbWFnZSgpOwotICAg
IGlmICghY2FjaGVkSW1hZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIHdpbGxEcmF3KGRlc3RS
ZWN0KTsKLQogICAgIGNhY2hlZEltYWdlLT5pbWFnZSgpLT5kcmF3SW5SZWN0KGRlc3RSZWN0LCBG
bG9hdFJlY3Qoc3gsIHN5LCBzdywgc2gpLAogICAgICAgICBJbWFnZTo6Y29tcG9zaXRlT3BlcmF0
b3JGcm9tU3RyaW5nKGNvbXBvc2l0ZU9wZXJhdGlvbiksIGMpOwogI2VuZGlmCkBAIC05MTYsMTMg
KzkzNiwxMSBAQAogICAgIHJldHVybiBuZXcgQ2FudmFzUGF0dGVybihpbWFnZSA/IGltYWdlLT5j
YWNoZWRJbWFnZSgpIDogMCwgcmVwZXRpdGlvblR5cGUpOwogfQogCi12b2lkIENhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRDo6d2lsbERyYXcoY29uc3QgRmxvYXRSZWN0JikKK3ZvaWQgQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEOjp3aWxsRHJhdyhjb25zdCBGbG9hdFJlY3QmIHIpCiB7CiAgICAgaWYg
KCFtX2NhbnZhcykKICAgICAgICAgcmV0dXJuOwotICAgIFJlbmRlckhUTUxDYW52YXMqIHJlbmRl
cmVyID0gc3RhdGljX2Nhc3Q8UmVuZGVySFRNTENhbnZhcyo+KG1fY2FudmFzLT5yZW5kZXJlcigp
KTsKLSAgICBpZiAocmVuZGVyZXIpCi0gICAgICAgIHJlbmRlcmVyLT5zZXROZWVkc0ltYWdlVXBk
YXRlKCk7CisgICAgbV9jYW52YXMtPndpbGxEcmF3KHIpOwogfQogCiAjaWYgX19BUFBMRV9fCkBA
IC05MzEsMTAgKzk0OSw3IEBACiB7CiAgICAgaWYgKCFtX2NhbnZhcykKICAgICAgICAgcmV0dXJu
IDA7Ci0gICAgUmVuZGVySFRNTENhbnZhcyogcmVuZGVyZXIgPSBzdGF0aWNfY2FzdDxSZW5kZXJI
VE1MQ2FudmFzKj4obV9jYW52YXMtPnJlbmRlcmVyKCkpOwotICAgIGlmICghcmVuZGVyZXIpCi0g
ICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiByZW5kZXJlci0+ZHJhd2luZ0NvbnRleHQoKTsK
KyAgICByZXR1cm4gbV9jYW52YXMtPmRyYXdpbmdDb250ZXh0KCk7CiB9CiAKIHZvaWQgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEOjphcHBseVN0cm9rZVBhdHRlcm4oKQpJbmRleDogV2ViQ29yZS9o
dG1sL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRt
bC9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaAkocmV2aXNpb24gMTM3MzkpCisrKyBXZWJDb3Jl
L2h0bWwvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmgJKHdvcmtpbmcgY29weSkKQEAgLTE0Miw2
ICsxNDIsMTAgQEAKICAgICAgICAgdm9pZCBkcmF3SW1hZ2UoSFRNTEltYWdlRWxlbWVudCosIGZs
b2F0IHgsIGZsb2F0IHksIGZsb2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQpOwogICAgICAgICB2b2lk
IGRyYXdJbWFnZShIVE1MSW1hZ2VFbGVtZW50KiwgZmxvYXQgc3gsIGZsb2F0IHN5LCBmbG9hdCBz
dywgZmxvYXQgc2gsCiAgICAgICAgICAgICBmbG9hdCBkeCwgZmxvYXQgZHksIGZsb2F0IGR3LCBm
bG9hdCBkaCk7CisgICAgICAgIHZvaWQgZHJhd0ltYWdlKEhUTUxDYW52YXNFbGVtZW50KiwgZmxv
YXQgeCwgZmxvYXQgeSk7CisgICAgICAgIHZvaWQgZHJhd0ltYWdlKEhUTUxDYW52YXNFbGVtZW50
KiwgZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCk7CisgICAgICAg
IHZvaWQgZHJhd0ltYWdlKEhUTUxDYW52YXNFbGVtZW50KiwgZmxvYXQgc3gsIGZsb2F0IHN5LCBm
bG9hdCBzdywgZmxvYXQgc2gsCisgICAgICAgICAgICBmbG9hdCBkeCwgZmxvYXQgZHksIGZsb2F0
IGR3LCBmbG9hdCBkaCk7CiAKICAgICAgICAgdm9pZCBkcmF3SW1hZ2VGcm9tUmVjdChIVE1MSW1h
Z2VFbGVtZW50KiwgZmxvYXQgc3gsIGZsb2F0IHN5LCBmbG9hdCBzdywgZmxvYXQgc2gsCiAgICAg
ICAgICAgICBmbG9hdCBkeCwgZmxvYXQgZHksIGZsb2F0IGR3LCBmbG9hdCBkaCwgY29uc3QgU3Ry
aW5nJiBjb21wb3NpdGVPcGVyYXRpb24pOwpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxDYW52YXNF
bGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQu
Y3BwCShyZXZpc2lvbiAxMzczOSkKKysrIFdlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJDYW52YXNQYXR0
ZXJuLmgiCiAjaW5jbHVkZSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmgiCiAjaW5jbHVkZSAi
Q2FudmFzU3R5bGUuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJI
VE1MTmFtZXMuaCIKICNpbmNsdWRlICJSZW5kZXJIVE1MQ2FudmFzLmgiCiAKQEAgLTM3LDggKzM4
LDE2IEBACiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKLUhUTUxDYW52YXNFbGVtZW50
OjpIVE1MQ2FudmFzRWxlbWVudChEb2N1bWVudCAqZG9jKQotICAgIDogSFRNTEltYWdlRWxlbWVu
dChjYW52YXNUYWcsIGRvYyksIG1fMkRDb250ZXh0KDApCisvLyBUaGVzZSB2YWx1ZSBjb21lIGZy
b20gdGhlIHNwZWNpZmljYXRpb24uCitjb25zdCBpbnQgZGVmYXVsdFdpZHRoID0gMzAwOworY29u
c3QgaW50IGRlZmF1bHRIZWlnaHQgPSAxNTA7CisKK0hUTUxDYW52YXNFbGVtZW50OjpIVE1MQ2Fu
dmFzRWxlbWVudChEb2N1bWVudCogZG9jKQorICAgIDogSFRNTEVsZW1lbnQoY2FudmFzVGFnLCBk
b2MpLCBtX3NpemUoZGVmYXVsdFdpZHRoLCBkZWZhdWx0SGVpZ2h0KQorICAgICwgbV9jcmVhdGVk
RHJhd2luZ0NvbnRleHQoZmFsc2UpLCBtX2RhdGEoMCkKKyNpZiBfX0FQUExFX18KKyAgICAsIG1f
ZHJhd2luZ0NvbnRleHQoMCkKKyNlbmRpZgogewogfQogCkBAIC00Niw1MCArNTUsMzggQEAKIHsK
ICAgICBpZiAobV8yRENvbnRleHQpCiAgICAgICAgIG1fMkRDb250ZXh0LT5kZXRhY2hDYW52YXMo
KTsKKyAgICBmYXN0RnJlZShtX2RhdGEpOworI2lmIF9fQVBQTEVfXworICAgIENHQ29udGV4dFJl
bGVhc2UobV9kcmF3aW5nQ29udGV4dCk7CisjZW5kaWYKIH0KIAotYm9vbCBIVE1MQ2FudmFzRWxl
bWVudDo6bWFwVG9FbnRyeShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSwgTWFwcGVkQXR0
cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3QKK3ZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6OnBhcnNl
TWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSogYXR0cikKIHsKLSAgICBpZiAoYXR0ck5h
bWUgIT0gc3JjQXR0cikgLy8gSWdub3JlIHRoZSBzcmMgYXR0cmlidXRlCi0gICAgICAgIHJldHVy
biBIVE1MSW1hZ2VFbGVtZW50OjptYXBUb0VudHJ5KGF0dHJOYW1lLCByZXN1bHQpOwotICAgIHJl
dHVybiBmYWxzZTsKKyAgICBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSA9IGF0dHItPm5h
bWUoKTsKKyAgICBpZiAoYXR0ck5hbWUgPT0gd2lkdGhBdHRyIHx8IGF0dHJOYW1lID09IGhlaWdo
dEF0dHIpCisgICAgICAgIHJlc2V0KCk7CisgICAgSFRNTEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0
cmlidXRlKGF0dHIpOwogfQogCi12b2lkIEhUTUxDYW52YXNFbGVtZW50OjpwYXJzZU1hcHBlZEF0
dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpCitSZW5kZXJPYmplY3QqIEhUTUxDYW52YXNF
bGVtZW50OjpjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSAqYXJlbmEsIFJlbmRlclN0eWxlICpz
dHlsZSkKIHsKLSAgICBpZiAoYXR0ci0+bmFtZSgpICE9IHNyY0F0dHIpIC8vIENhbnZhcyBpZ25v
cmVzIHRoZSBzcmMgYXR0cmlidXRlCi0gICAgICAgIEhUTUxJbWFnZUVsZW1lbnQ6OnBhcnNlTWFw
cGVkQXR0cmlidXRlKGF0dHIpOworICAgIFJlbmRlckhUTUxDYW52YXMqIHIgPSBuZXcgKGFyZW5h
KSBSZW5kZXJIVE1MQ2FudmFzKHRoaXMpOworICAgIHItPnNldEludHJpbnNpY1dpZHRoKHdpZHRo
KCkpOworICAgIHItPnNldEludHJpbnNpY0hlaWdodChoZWlnaHQoKSk7CisgICAgcmV0dXJuIHI7
CiB9CiAKLVJlbmRlck9iamVjdCAqSFRNTENhbnZhc0VsZW1lbnQ6OmNyZWF0ZVJlbmRlcmVyKFJl
bmRlckFyZW5hICphcmVuYSwgUmVuZGVyU3R5bGUgKnN0eWxlKQordm9pZCBIVE1MQ2FudmFzRWxl
bWVudDo6c2V0SGVpZ2h0KGludCB2YWx1ZSkKIHsKLSNpZiBfX0FQUExFX18KLSAgICByZXR1cm4g
bmV3IChhcmVuYSkgUmVuZGVySFRNTENhbnZhcyh0aGlzKTsKLSNlbHNlCi0gICAgcmV0dXJuIDA7
Ci0jZW5kaWYKKyAgICBzZXRBdHRyaWJ1dGUoaGVpZ2h0QXR0ciwgU3RyaW5nOjpudW1iZXIodmFs
dWUpKTsKIH0KIAotdm9pZCBIVE1MQ2FudmFzRWxlbWVudDo6YXR0YWNoKCkKK3ZvaWQgSFRNTENh
bnZhc0VsZW1lbnQ6OnNldFdpZHRoKGludCB2YWx1ZSkKIHsKLSAgICAvLyBEb24ndCB3YW50IHRv
IGNhbGwgaW1hZ2UncyBhdHRhY2goKS4KLSAgICBIVE1MRWxlbWVudDo6YXR0YWNoKCk7CisgICAg
c2V0QXR0cmlidXRlKHdpZHRoQXR0ciwgU3RyaW5nOjpudW1iZXIodmFsdWUpKTsKIH0KIAotdm9p
ZCBIVE1MQ2FudmFzRWxlbWVudDo6ZGV0YWNoKCkKLXsKLSAgICAvLyBEb24ndCB3YW50IHRvIGNh
bGwgaW1hZ2UncyBkZXRhY2goKS4KLSAgICBIVE1MRWxlbWVudDo6ZGV0YWNoKCk7Ci0KLSAgICBp
ZiAobV8yRENvbnRleHQpCi0gICAgICAgIG1fMkRDb250ZXh0LT5yZXNldCgpOwotfQotCi1ib29s
IEhUTUxDYW52YXNFbGVtZW50Ojppc1VSTEF0dHJpYnV0ZShBdHRyaWJ1dGUgKmF0dHIpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuICgoYXR0ci0+bmFtZSgpID09IHVzZW1hcEF0dHIgJiYgYXR0ci0+dmFs
dWUoKS5kb21TdHJpbmcoKVswXSAhPSAnIycpKTsKLX0KLQogQ2FudmFzUmVuZGVyaW5nQ29udGV4
dCogSFRNTENhbnZhc0VsZW1lbnQ6OmdldENvbnRleHQoY29uc3QgU3RyaW5nJiB0eXBlKQogewog
ICAgIC8vIEZJWE1FOiBXZWIgQXBwbGljYXRpb25zIDEuMCBzYXlzICIyZCIgb25seSwgYnV0IHRo
ZSBjb2RlIGhlcmUgbWF0Y2hlcyBoaXN0b3JpY2FsIGJlaGF2aW9yIG9mIFdlYktpdC4KQEAgLTEw
MSwyOCArOTgsOTEgQEAKICAgICByZXR1cm4gMDsKIH0KIAotSW50U2l6ZSBIVE1MQ2FudmFzRWxl
bWVudDo6c2l6ZSgpIGNvbnN0Cit2b2lkIEhUTUxDYW52YXNFbGVtZW50Ojp3aWxsRHJhdyhjb25z
dCBGbG9hdFJlY3QmKQogewotICAgIFJlbmRlckhUTUxDYW52YXMqIGNhbnZhc1JlbmRlcmVyID0g
c3RhdGljX2Nhc3Q8UmVuZGVySFRNTENhbnZhcyo+KHJlbmRlcmVyKCkpOwotICAgIGlmICghY2Fu
dmFzUmVuZGVyZXIpCi0gICAgICAgIHJldHVybiBJbnRTaXplKCk7CisgICAgLy8gRklYTUU6IENo
YW5nZSB0byByZXBhaW50IGp1c3QgdGhlIGRpcnR5IHJlY3QgZm9yIHNwZWVkLgorICAgIC8vIFVu
dGlsIHdlIHN0YXJ0IGRvaW5nIHRoaXMsIHdlIHdvbid0IGtub3cgaWYgdGhlIHJlY3RzIHBhc3Nl
ZCBpbiBhcmUKKyAgICAvLyBhY2N1cmF0ZS4gQWxzbyBkb24ndCBmb3JnZXQgdG8gdGFrZSBpbnRv
IGFjY291bnQgdGhlIHRyYW5zZm9ybQorICAgIC8vIG9uIHRoZSBjb250ZXh0IHdoZW4gZGV0ZXJt
aW5pbmcgd2hhdCBuZWVkcyB0byBiZSByZXBhaW50ZWQuCisgICAgaWYgKHJlbmRlcmVyKCkpCisg
ICAgICAgIHJlbmRlcmVyKCktPnJlcGFpbnQoKTsKK30KKwordm9pZCBIVE1MQ2FudmFzRWxlbWVu
dDo6cmVzZXQoKQoreworICAgIGJvb2wgb2s7CisgICAgaW50IHcgPSBnZXRBdHRyaWJ1dGUod2lk
dGhBdHRyKS50b0ludCgmb2spOworICAgIGlmICghb2spCisgICAgICAgIHcgPSBkZWZhdWx0V2lk
dGg7CisgICAgaW50IGggPSBnZXRBdHRyaWJ1dGUoaGVpZ2h0QXR0cikudG9JbnQoJm9rKTsKKyAg
ICBpZiAoIW9rKQorICAgICAgICBoID0gZGVmYXVsdEhlaWdodDsKKyAgICBtX3NpemUgPSBJbnRT
aXplKHcsIGgpOworCisgICAgUmVuZGVySFRNTENhbnZhcyogciA9IHN0YXRpY19jYXN0PFJlbmRl
ckhUTUxDYW52YXMqPihyZW5kZXJlcigpKTsKKyAgICBpZiAocikgeworICAgICAgICByLT5zZXRJ
bnRyaW5zaWNXaWR0aCh3KTsKKyAgICAgICAgci0+c2V0SW50cmluc2ljSGVpZ2h0KGgpOworICAg
ICAgICByLT5yZXBhaW50KCk7CisgICAgfQorCisgICAgbV9jcmVhdGVkRHJhd2luZ0NvbnRleHQg
PSBmYWxzZTsKKyAgICBDR0NvbnRleHRSZWxlYXNlKG1fZHJhd2luZ0NvbnRleHQpOworICAgIG1f
ZHJhd2luZ0NvbnRleHQgPSAwOworICAgIGZhc3RGcmVlKG1fZGF0YSk7CisgICAgbV9kYXRhID0g
MDsKK30KKwordm9pZCBIVE1MQ2FudmFzRWxlbWVudDo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBw
LCBjb25zdCBJbnRSZWN0JiByKQoreworICAgIGlmIChwLT5wYWludGluZ0Rpc2FibGVkKCkpCisg
ICAgICAgIHJldHVybjsKICNpZiBfX0FQUExFX18KLSAgICBpZiAoQ0dDb250ZXh0UmVmIGNvbnRl
eHQgPSBjYW52YXNSZW5kZXJlci0+ZHJhd2luZ0NvbnRleHQoKSkKLSAgICAgICAgcmV0dXJuIElu
dFNpemUoQ0dCaXRtYXBDb250ZXh0R2V0V2lkdGgoY29udGV4dCksIENHQml0bWFwQ29udGV4dEdl
dEhlaWdodChjb250ZXh0KSk7CisgICAgaWYgKENHSW1hZ2VSZWYgaW1hZ2UgPSBjcmVhdGVQbGF0
Zm9ybUltYWdlKCkpIHsKKyAgICAgICAgQ0dDb250ZXh0RHJhd0ltYWdlKHAtPmN1cnJlbnRDR0Nv
bnRleHQoKSwgciwgaW1hZ2UpOworICAgICAgICBDR0ltYWdlUmVsZWFzZShpbWFnZSk7CisgICAg
fQogI2VuZGlmCi0gICAgcmV0dXJuIEludFNpemUoKTsKIH0KIAordm9pZCBIVE1MQ2FudmFzRWxl
bWVudDo6Y3JlYXRlRHJhd2luZ0NvbnRleHQoKSBjb25zdAoreworICAgIEFTU0VSVCghbV9jcmVh
dGVkRHJhd2luZ0NvbnRleHQpOworICAgIEFTU0VSVCghbV9kYXRhKTsKKworICAgIG1fY3JlYXRl
ZERyYXdpbmdDb250ZXh0ID0gdHJ1ZTsKKworICAgIGlmICh3aWR0aCgpIDw9IDAgfHwgaGVpZ2h0
KCkgPD0gMCkKKyAgICAgICAgcmV0dXJuOworICAgIHVuc2lnbmVkIHcgPSB3aWR0aCgpOworICAg
IHNpemVfdCBieXRlc1BlclJvdyA9IHcgKiA0OworICAgIGlmIChieXRlc1BlclJvdyAvIDQgIT0g
dykgLy8gY2hlY2sgZm9yIG92ZXJmbG93CisgICAgICAgIHJldHVybjsKKyAgICBtX2RhdGEgPSBm
YXN0Q2FsbG9jKGhlaWdodCgpLCBieXRlc1BlclJvdyk7CisgICAgaWYgKCFtX2RhdGEpCisgICAg
ICAgIHJldHVybjsKICNpZiBfX0FQUExFX18KKyAgICBDR0NvbG9yU3BhY2VSZWYgY29sb3JTcGFj
ZSA9IENHQ29sb3JTcGFjZUNyZWF0ZURldmljZVJHQigpOworICAgIG1fZHJhd2luZ0NvbnRleHQg
PSBDR0JpdG1hcENvbnRleHRDcmVhdGUobV9kYXRhLCB3LCBoZWlnaHQoKSwgOCwgYnl0ZXNQZXJS
b3csIGNvbG9yU3BhY2UsIGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFzdCk7CisgICAgQ0dD
b2xvclNwYWNlUmVsZWFzZShjb2xvclNwYWNlKTsKKyNlbmRpZgorfQogCisjaWYgX19BUFBMRV9f
CisKK0NHQ29udGV4dFJlZiBIVE1MQ2FudmFzRWxlbWVudDo6ZHJhd2luZ0NvbnRleHQoKSBjb25z
dAoreworICAgIGlmICghbV9jcmVhdGVkRHJhd2luZ0NvbnRleHQpCisgICAgICAgIGNyZWF0ZURy
YXdpbmdDb250ZXh0KCk7CisgICAgcmV0dXJuIG1fZHJhd2luZ0NvbnRleHQ7Cit9CisKIENHSW1h
Z2VSZWYgSFRNTENhbnZhc0VsZW1lbnQ6OmNyZWF0ZVBsYXRmb3JtSW1hZ2UoKSBjb25zdAogewot
ICAgIFJlbmRlckhUTUxDYW52YXMqIGNhbnZhc1JlbmRlcmVyID0gc3RhdGljX2Nhc3Q8UmVuZGVy
SFRNTENhbnZhcyo+KHJlbmRlcmVyKCkpOwotICAgIGlmICghY2FudmFzUmVuZGVyZXIpCi0gICAg
ICAgIHJldHVybiAwOwotICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gY2FudmFzUmVuZGVyZXIt
PmRyYXdpbmdDb250ZXh0KCk7CisgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBkcmF3aW5nQ29u
dGV4dCgpOwogICAgIGlmICghY29udGV4dCkKICAgICAgICAgcmV0dXJuIDA7CisgICAgQ0dDb250
ZXh0Rmx1c2goY29udGV4dCk7CiAgICAgcmV0dXJuIENHQml0bWFwQ29udGV4dENyZWF0ZUltYWdl
KGNvbnRleHQpOwogfQogCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJIVE1MQ2FudmFz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJIVE1MQ2FudmFzLmNw
cAkocmV2aXNpb24gMTM3MzkpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJIVE1MQ2FudmFz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMsMTQgKzIzLDkgQEAKICAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAog
ICovCiAKLS8vI2RlZmluZSBERUJVR19MQVlPVVQKLQogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIlJlbmRlckhUTUxDYW52YXMuaCIKIAotI2lmIF9fQVBQTEVfXwotCi0jaW5jbHVkZSAi
RG9jdW1lbnQuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJIVE1M
Q2FudmFzRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgpAQCAtMzksMTA0ICszNCwy
OSBAQAogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCi1SZW5kZXJIVE1MQ2FudmFzOjpS
ZW5kZXJIVE1MQ2FudmFzKE5vZGUgKl9ub2RlKQotICAgIDogUmVuZGVySW1hZ2UoX25vZGUpLCBf
ZHJhd2luZ0NvbnRleHQoMCksIF9kcmF3aW5nQ29udGV4dERhdGEoMCksIF9kcmF3bkltYWdlKDAp
LCBfbmVlZHNJbWFnZVVwZGF0ZSgwKQorUmVuZGVySFRNTENhbnZhczo6UmVuZGVySFRNTENhbnZh
cyhOb2RlKiBuKQorICAgIDogUmVuZGVyUmVwbGFjZWQobikKIHsKIH0KIAotUmVuZGVySFRNTENh
bnZhczo6flJlbmRlckhUTUxDYW52YXMoKQorY29uc3QgY2hhciogUmVuZGVySFRNTENhbnZhczo6
cmVuZGVyTmFtZSgpIGNvbnN0CiB7Ci0gICAgaWYgKF9kcmF3aW5nQ29udGV4dCkgewotICAgICAg
ICBDRlJlbGVhc2UgKF9kcmF3aW5nQ29udGV4dCk7Ci0gICAgICAgIF9kcmF3aW5nQ29udGV4dCA9
IDA7Ci0gICAgfQotICAgIAotICAgIGZhc3RGcmVlKF9kcmF3aW5nQ29udGV4dERhdGEpOwotICAg
IF9kcmF3aW5nQ29udGV4dERhdGEgPSAwOwotICAgIAotICAgIGlmIChfZHJhd25JbWFnZSkgewot
ICAgICAgICBDRlJlbGVhc2UgKF9kcmF3bkltYWdlKTsKLSAgICAgICAgX2RyYXduSW1hZ2UgPSAw
OwotICAgIH0KKyAgICByZXR1cm4gIlJlbmRlckhUTUxDYW52YXMiOwogfQogCi0jZGVmaW5lIEJJ
VFNfUEVSX0NPTVBPTkVOVCA4Ci0jZGVmaW5lIEJZVEVTX1BFUl9ST1cod2lkdGgsYml0c1BlckNv
bXBvbmVudCxudW1Db21wb25lbnRzKSAoKHdpZHRoICogYml0c1BlckNvbXBvbmVudCAqIG51bUNv
bXBvbmVudHMgKyA3KS84KQotCi12b2lkIFJlbmRlckhUTUxDYW52YXM6OmNyZWF0ZURyYXdpbmdD
b250ZXh0KCkKK3ZvaWQgUmVuZGVySFRNTENhbnZhczo6cGFpbnQoUGFpbnRJbmZvJiBpLCBpbnQg
dHgsIGludCB0eSkKIHsKLSAgICBpZiAoX2RyYXdpbmdDb250ZXh0KSB7Ci0gICAgICAgIENGUmVs
ZWFzZSAoX2RyYXdpbmdDb250ZXh0KTsKLSAgICAgICAgX2RyYXdpbmdDb250ZXh0ID0gMDsKLSAg
ICB9Ci0gICAgZmFzdEZyZWUoX2RyYXdpbmdDb250ZXh0RGF0YSk7Ci0gICAgQ0dDb2xvclNwYWNl
UmVmIGNvbG9yU3BhY2UgPSBDR0NvbG9yU3BhY2VDcmVhdGVEZXZpY2VSR0IoKTsKLQotICAgIGlu
dCBjV2lkdGggPSBjb250ZW50V2lkdGgoKTsKLSAgICBpbnQgY0hlaWdodCA9IGNvbnRlbnRIZWln
aHQoKTsKLSAgICBzaXplX3QgbnVtQ29tcG9uZW50cyA9IENHQ29sb3JTcGFjZUdldE51bWJlck9m
Q29tcG9uZW50cyhjb2xvclNwYWNlKTsKLSAgICBzaXplX3QgYnl0ZXNQZXJSb3cgPSBCWVRFU19Q
RVJfUk9XKGNXaWR0aCxCSVRTX1BFUl9DT01QT05FTlQsKG51bUNvbXBvbmVudHMrMSkpOyAvLyAr
IDEgZm9yIGFscGhhCi0gICAgX2RyYXdpbmdDb250ZXh0RGF0YSA9IGZhc3RDYWxsb2MoaGVpZ2h0
KCksIGJ5dGVzUGVyUm93KTsKLSAgICBfZHJhd2luZ0NvbnRleHQgPSBDR0JpdG1hcENvbnRleHRD
cmVhdGUoX2RyYXdpbmdDb250ZXh0RGF0YSwgY1dpZHRoLCBjSGVpZ2h0LCBCSVRTX1BFUl9DT01Q
T05FTlQsIGJ5dGVzUGVyUm93LCBjb2xvclNwYWNlLCBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGll
ZExhc3QpOwotICAgIAotI2lmZGVmIERFQlVHX0NBTlZBU19CQUNLR1JPVU5ECi0gICAgQ0dDb250
ZXh0U2V0UkdCRmlsbENvbG9yKF9kcmF3aW5nQ29udGV4dCwgMS4wLCAwLiwgMC4sIDEuKTsKLSAg
ICBDR0NvbnRleHRGaWxsUmVjdCAoX2RyYXdpbmdDb250ZXh0LCBDR1JlY3RNYWtlICgwLCAwLCB3
aWR0aCgpLCBoZWlnaHQoKSkpOwotICAgIENHQ29udGV4dEZsdXNoIChfZHJhd2luZ0NvbnRleHQp
OwotI2VuZGlmCi0gICAgCi0gICAgdXBkYXRlRHJhd25JbWFnZSgpOwotICAgIAotICAgIENGUmVs
ZWFzZSAoY29sb3JTcGFjZSk7Ci19Ci0KLUNHQ29udGV4dFJlZiBSZW5kZXJIVE1MQ2FudmFzOjpk
cmF3aW5nQ29udGV4dCgpCi17Ci0gICAgaWYgKCFfZHJhd2luZ0NvbnRleHQpIHsKLSAgICAgICAg
ZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0KCk7Ci0gICAgICAgIGNyZWF0ZURyYXdpbmdDb250ZXh0
KCk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBfZHJhd2luZ0NvbnRleHQ7Ci19Ci0KLXZvaWQg
UmVuZGVySFRNTENhbnZhczo6c2V0TmVlZHNJbWFnZVVwZGF0ZSgpCi17Ci0gICAgX25lZWRzSW1h
Z2VVcGRhdGUgPSB0cnVlOwotICAgIHJlcGFpbnQoKTsKLX0KLQotCi12b2lkIFJlbmRlckhUTUxD
YW52YXM6OnVwZGF0ZURyYXduSW1hZ2UoKQotewotICAgIGlmIChfZHJhd25JbWFnZSkKLSAgICAg
ICAgQ0ZSZWxlYXNlIChfZHJhd25JbWFnZSk7Ci0gICAgQ0dDb250ZXh0Rmx1c2ggKF9kcmF3aW5n
Q29udGV4dCk7Ci0gICAgX2RyYXduSW1hZ2UgPSBDR0JpdG1hcENvbnRleHRDcmVhdGVJbWFnZSAo
X2RyYXdpbmdDb250ZXh0KTsKLX0KLQotQ0dJbWFnZVJlZiBSZW5kZXJIVE1MQ2FudmFzOjpkcmF3
bkltYWdlKCkKLXsKLSAgICByZXR1cm4gX2RyYXduSW1hZ2U7Ci19Ci0KLXZvaWQgUmVuZGVySFRN
TENhbnZhczo6cGFpbnQoUGFpbnRJbmZvJiBpLCBpbnQgX3R4LCBpbnQgX3R5KQotewotICAgIGlm
ICghc2hvdWxkUGFpbnQoaSwgX3R4LCBfdHkpKQorICAgIGlmICghc2hvdWxkUGFpbnQoaSwgdHgs
IHR5KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaW50IHggPSBfdHggKyBtX3g7Ci0gICAgaW50
IHkgPSBfdHkgKyBtX3k7CisgICAgaW50IHggPSB0eCArIG1feDsKKyAgICBpbnQgeSA9IHR5ICsg
bV95OwogCiAgICAgaWYgKHNob3VsZFBhaW50QmFja2dyb3VuZE9yQm9yZGVyKCkgJiYgKGkucGhh
c2UgPT0gUGFpbnRQaGFzZUZvcmVncm91bmQgfHwgaS5waGFzZSA9PSBQYWludFBoYXNlU2VsZWN0
aW9uKSkgCiAgICAgICAgIHBhaW50Qm94RGVjb3JhdGlvbnMoaSwgeCwgeSk7CiAKLSAgICBHcmFw
aGljc0NvbnRleHQqIHAgPSBpLnA7Ci0gICAgaWYgKHAtPnBhaW50aW5nRGlzYWJsZWQoKSkKLSAg
ICAgICAgcmV0dXJuOwotICAgIAogICAgIGlmICgoaS5waGFzZSA9PSBQYWludFBoYXNlT3V0bGlu
ZSB8fCBpLnBoYXNlID09IFBhaW50UGhhc2VTZWxmT3V0bGluZSkgJiYgc3R5bGUoKS0+b3V0bGlu
ZVdpZHRoKCkgJiYgc3R5bGUoKS0+dmlzaWJpbGl0eSgpID09IFZJU0lCTEUpCi0gICAgICAgIHBh
aW50T3V0bGluZShwLCB4LCB5LCB3aWR0aCgpLCBoZWlnaHQoKSwgc3R5bGUoKSk7CisgICAgICAg
IHBhaW50T3V0bGluZShpLnAsIHgsIHksIHdpZHRoKCksIGhlaWdodCgpLCBzdHlsZSgpKTsKICAg
ICAKICAgICBpZiAoaS5waGFzZSAhPSBQYWludFBoYXNlRm9yZWdyb3VuZCAmJiBpLnBoYXNlICE9
IFBhaW50UGhhc2VTZWxlY3Rpb24pCiAgICAgICAgIHJldHVybjsKQEAgLTE0NCw3MSArNjQsMzYg
QEAKICAgICBpZiAoIXNob3VsZFBhaW50V2l0aGluUm9vdChpKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgYm9vbCBpc1ByaW50aW5nID0gaS5wLT5wcmludGluZygpOwotICAgIGJvb2wgZHJhd1Nl
bGVjdGlvblRpbnQgPSAoc2VsZWN0aW9uU3RhdGUoKSAhPSBTZWxlY3Rpb25Ob25lKSAmJiAhaXNQ
cmludGluZzsKKyAgICBib29sIGRyYXdTZWxlY3Rpb25UaW50ID0gc2VsZWN0aW9uU3RhdGUoKSAh
PSBTZWxlY3Rpb25Ob25lICYmICFpLnAtPnByaW50aW5nKCk7CiAgICAgaWYgKGkucGhhc2UgPT0g
UGFpbnRQaGFzZVNlbGVjdGlvbikgewogICAgICAgICBpZiAoc2VsZWN0aW9uU3RhdGUoKSA9PSBT
ZWxlY3Rpb25Ob25lKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBkcmF3U2VsZWN0aW9u
VGludCA9IGZhbHNlOwogICAgIH0KIAotICAgIGludCBjV2lkdGggPSBjb250ZW50V2lkdGgoKTsK
LSAgICBpbnQgY0hlaWdodCA9IGNvbnRlbnRIZWlnaHQoKTsKLSAgICBpbnQgbGVmdEJvcmRlciA9
IGJvcmRlckxlZnQoKTsKLSAgICBpbnQgdG9wQm9yZGVyID0gYm9yZGVyVG9wKCk7Ci0gICAgaW50
IGxlZnRQYWQgPSBwYWRkaW5nTGVmdCgpOwotICAgIGludCB0b3BQYWQgPSBwYWRkaW5nVG9wKCk7
CisgICAgaWYgKGVsZW1lbnQoKSAmJiBlbGVtZW50KCktPmhhc1RhZ05hbWUoY2FudmFzVGFnKSkK
KyAgICAgICAgc3RhdGljX2Nhc3Q8SFRNTENhbnZhc0VsZW1lbnQqPihlbGVtZW50KCkpLT5wYWlu
dChpLnAsCisgICAgICAgICAgICBJbnRSZWN0KHggKyBib3JkZXJMZWZ0KCkgKyBwYWRkaW5nTGVm
dCgpLCB5ICsgYm9yZGVyVG9wKCkgKyBwYWRkaW5nVG9wKCksIGNvbnRlbnRXaWR0aCgpLCBjb250
ZW50SGVpZ2h0KCkpKTsKIAotICAgIHggKz0gbGVmdEJvcmRlciArIGxlZnRQYWQ7Ci0gICAgeSAr
PSB0b3BCb3JkZXIgKyB0b3BQYWQ7Ci0gICAgCi0gICAgaWYgKF9uZWVkc0ltYWdlVXBkYXRlKSB7
Ci0gICAgICAgIHVwZGF0ZURyYXduSW1hZ2UoKTsKLSAgICAgICAgX25lZWRzSW1hZ2VVcGRhdGUg
PSBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKGRyYXduSW1hZ2UoKSkgewotICAgICAgICBI
VE1MQ2FudmFzRWxlbWVudCogaSA9IChlbGVtZW50KCkgJiYgZWxlbWVudCgpLT5oYXNUYWdOYW1l
KGNhbnZhc1RhZykpID8gc3RhdGljX2Nhc3Q8SFRNTENhbnZhc0VsZW1lbnQqPihlbGVtZW50KCkp
IDogMDsKLSAgICAgICAgaW50IG9sZE9wZXJhdGlvbiA9IDA7Ci0gICAgICAgIGlmIChpKSB7Ci0g
ICAgICAgICAgICBvbGRPcGVyYXRpb24gPSBHcmFwaGljc0NvbnRleHQ6OmdldENvbXBvc2l0ZU9w
ZXJhdGlvbihHcmFwaGljc0NvbnRleHQ6OmN1cnJlbnRDR0NvbnRleHQoKSk7Ci0gICAgICAgICAg
ICBHcmFwaGljc0NvbnRleHQ6OnNldENvbXBvc2l0ZU9wZXJhdGlvbihHcmFwaGljc0NvbnRleHQ6
OmN1cnJlbnRDR0NvbnRleHQoKSwgaS0+Y29tcG9zaXRlT3BlcmF0b3IoKSk7Ci0gICAgICAgIH0K
LSAgICAgICAgQ0dDb250ZXh0RHJhd0ltYWdlKEdyYXBoaWNzQ29udGV4dDo6Y3VycmVudENHQ29u
dGV4dCgpLCBDR1JlY3RNYWtlKHgsIHksIGNXaWR0aCwgY0hlaWdodCksIGRyYXduSW1hZ2UoKSk7
Ci0gICAgICAgIGlmIChpKQotICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0OjpzZXRDb21wb3Np
dGVPcGVyYXRpb24oR3JhcGhpY3NDb250ZXh0OjpjdXJyZW50Q0dDb250ZXh0KCksIG9sZE9wZXJh
dGlvbik7Ci0gICAgfQotCiAgICAgaWYgKGRyYXdTZWxlY3Rpb25UaW50KQotICAgICAgICBwLT5m
aWxsUmVjdChzZWxlY3Rpb25SZWN0KCksIHNlbGVjdGlvbkNvbG9yKHApKTsKKyAgICAgICAgaS5w
LT5maWxsUmVjdChzZWxlY3Rpb25SZWN0KCksIHNlbGVjdGlvbkNvbG9yKGkucCkpOwogfQogCiB2
b2lkIFJlbmRlckhUTUxDYW52YXM6OmxheW91dCgpCiB7Ci0gICAgS0hUTUxBc3NlcnQobmVlZHNM
YXlvdXQoKSk7Ci0gICAgS0hUTUxBc3NlcnQobWluTWF4S25vd24oKSk7CisgICAgQVNTRVJUKG5l
ZWRzTGF5b3V0KCkpOworICAgIEFTU0VSVChtaW5NYXhLbm93bigpKTsKIAogICAgIEludFJlY3Qg
b2xkQm91bmRzOwogICAgIGJvb2wgY2hlY2tGb3JSZXBhaW50ID0gY2hlY2tGb3JSZXBhaW50RHVy
aW5nTGF5b3V0KCk7CiAgICAgaWYgKGNoZWNrRm9yUmVwYWludCkKICAgICAgICAgb2xkQm91bmRz
ID0gZ2V0QWJzb2x1dGVSZXBhaW50UmVjdCgpOwotCi0gICAgaW50IG9sZHdpZHRoID0gbV93aWR0
aDsKLSAgICBpbnQgb2xkaGVpZ2h0ID0gbV9oZWlnaHQ7Ci0gICAgCiAgICAgY2FsY1dpZHRoKCk7
CiAgICAgY2FsY0hlaWdodCgpOwotCi0gICAgaWYgKCBtX3dpZHRoICE9IG9sZHdpZHRoIHx8IG1f
aGVpZ2h0ICE9IG9sZGhlaWdodCApIHsKLSAgICAgICAgY3JlYXRlRHJhd2luZ0NvbnRleHQoKTsK
LSAgICB9Ci0KICAgICBpZiAoY2hlY2tGb3JSZXBhaW50KQogICAgICAgICByZXBhaW50QWZ0ZXJM
YXlvdXRJZk5lZWRlZChvbGRCb3VuZHMsIG9sZEJvdW5kcyk7Ci0gICAgCisKICAgICBzZXROZWVk
c0xheW91dChmYWxzZSk7CiB9CiAKIH0KLQotI2VuZGlmCkluZGV4OiBXZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJIVE1MQ2FudmFzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVySFRNTENhbnZhcy5oCShyZXZpc2lvbiAxMzczOSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckhUTUxDYW52YXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjMsNTYgKzIzLDIxIEBACiAgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKICAqLwogCi0jaWZuZGVmIFJFTkRFUl9DQU5WQVNJTUFHRV9ICi0jZGVmaW5l
IFJFTkRFUl9DQU5WQVNJTUFHRV9ICisjaWZuZGVmIFJFTkRFUkhUTUxDQU5WQVNfSAorI2RlZmlu
ZSBSRU5ERVJIVE1MQ0FOVkFTX0gKIAorI2luY2x1ZGUgInJlbmRlcl9yZXBsYWNlZC5oIgogCi0j
aW5jbHVkZSAiSFRNTEVsZW1lbnQuaCIKLSNpbmNsdWRlICJSZW5kZXJJbWFnZS5oIgotCi0jaWYg
X19BUFBMRV9fCi0vLyBGSVhNRTogTWFjLXNwZWNpZmljIHBhcnRzIG5lZWQgdG8gbW92ZSB0byB0
aGUgcGxhdGZvcm0gZGlyZWN0b3J5LgotI2luY2x1ZGUgPEFwcGxpY2F0aW9uU2VydmljZXMvQXBw
bGljYXRpb25TZXJ2aWNlcy5oPgotI2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xh
c3MgRG9jTG9hZGVyOworICAgIGNsYXNzIFJlbmRlckhUTUxDYW52YXMgOiBwdWJsaWMgUmVuZGVy
UmVwbGFjZWQgeworICAgIHB1YmxpYzoKKyAgICAgICAgUmVuZGVySFRNTENhbnZhcyhOb2RlKik7
CisgICAgICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0OworICAgICAg
ICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgaW50IHR4LCBpbnQgdHkpOworICAgICAg
ICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7CisgICAgfTsKIAotY2xhc3MgUmVuZGVySFRNTENhbnZh
cyA6IHB1YmxpYyBSZW5kZXJJbWFnZQotewotcHVibGljOgotICAgIFJlbmRlckhUTUxDYW52YXMo
Tm9kZSopOwotICAgIHZpcnR1YWwgflJlbmRlckhUTUxDYW52YXMoKTsKLQotICAgIHZpcnR1YWwg
Y29uc3QgY2hhciAqcmVuZGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJSZW5kZXJDYW52YXNJbWFn
ZSI7IH0KLSAgICAKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiBpLCBpbnQgdHgs
IGludCB0eSk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7Ci0KLSAgICB2b2lkIHNldE5l
ZWRzSW1hZ2VVcGRhdGUoKTsKLSAgICAKLSAgICAvLyBkb24ndCBldmVuIHRoaW5rIGFib3V0IG1h
a2luZyB0aGlzIG1ldGhvZCB2aXJ0dWFsIQotICAgIEhUTUxFbGVtZW50KiBlbGVtZW50KCkgY29u
c3QKLSAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQqPihSZW5kZXJJbWFn
ZTo6ZWxlbWVudCgpKTsgfQotICAgIAotI2lmIF9fQVBQTEVfXwotICAgIHZvaWQgdXBkYXRlRHJh
d25JbWFnZSgpOwotICAgIENHQ29udGV4dFJlZiBkcmF3aW5nQ29udGV4dCgpOwotICAgIAotcHJp
dmF0ZToKLSAgICB2b2lkIGNyZWF0ZURyYXdpbmdDb250ZXh0KCk7Ci0gICAgQ0dJbWFnZVJlZiBk
cmF3bkltYWdlKCk7Ci0KLSAgICBDR0NvbnRleHRSZWYgX2RyYXdpbmdDb250ZXh0OwotICAgIHZv
aWQgKl9kcmF3aW5nQ29udGV4dERhdGE7Ci0gICAgQ0dJbWFnZVJlZiBfZHJhd25JbWFnZTsKLSAg
ICAKLSAgICBib29sIF9uZWVkc0ltYWdlVXBkYXRlIDogMTsKLSNlbmRpZgotfTsKLQogfSAvL25h
bWVzcGFjZQogCiAjZW5kaWYKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzNzM5KQorKysgTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjQgQEAKKzIwMDYtMDQtMDgg
IERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIC0gdGVzdCBjaGFuZ2VzIGZvciBodHRwOi8vYnVnemls
bGEub3BlbmRhcndpbi5vcmcvc2hvd19idWcuY2dpP2lkPTQ4ODQKKyAgICAgICAgICBDYW52YXMg
ZWxlbWVudCBicmVha3Mgd2hlbiBSZW5kZXJPYmplY3QgY3JlYXRpb24gaXMgZGVmZXJyZWQgYnkg
ZXh0ZXJuYWwgQ1NTCisKKyAgICAgICAgKiBmYXN0L2NhbnZhcy9jYW52YXMtYmVmb3JlLWNzcy1l
eHBlY3RlZC5jaGVja3N1bTogQWRkZWQuCisgICAgICAgICogZmFzdC9jYW52YXMvY2FudmFzLWJl
Zm9yZS1jc3MtZXhwZWN0ZWQucG5nOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2NhbnZhcy9jYW52
YXMtYmVmb3JlLWNzcy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvY2FudmFz
L2NhbnZhcy1iZWZvcmUtY3NzLmh0bWw6IEFkZGVkLgorCisgICAgICAgICogZmFzdC9jYW52YXMv
aW1hZ2Utb2JqZWN0LWluLWNhbnZhcy5odG1sOiBUZXN0IGhhZCBhIGJ1ZyB3aGVyZSBpdCB1c2Vk
IDxjYW52YXM+CisgICAgICAgIHdpdGhvdXQgYSA8L2NhbnZhcz4gdGFnLiBDaGFuZ2VkIHRlc3Qg
dG8gaW5jbHVkZSBhIDwvY2FudmFzPiB0YWcuCisKKyAgICAgICAgKiBmYXN0L2NhbnZhcy9wYXR0
ZXJuZmlsbC1yZXBlYXQtZXhwZWN0ZWQudHh0OiBVcGRhdGVkIGZvciBuYW1lIGNoYW5nZSBmcm9t
CisgICAgICAgIFJlbmRlckNhbnZhc0ltYWdlIHRvIFJlbmRlckhUTUxDYW52YXMuCisgICAgICAg
ICogZmFzdC9jYW52YXMvaW1hZ2Utb2JqZWN0LWluLWNhbnZhcy1leHBlY3RlZC50eHQ6IERpdHRv
LgorICAgICAgICAqIGZhc3QvY2FudmFzL2ZpbGxyZWN0X2dyYWRpZW50LWV4cGVjdGVkLnR4dDog
RGl0dG8uCisgICAgICAgICogZmFzdC9jYW52YXMvcXVhZHJhdGljQ3VydmVUby1leHBlY3RlZC50
eHQ6IERpdHRvLgorCiAyMDA2LTA0LTA3ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4K
IAogICAgICAgICBSZXZpZXdlZCBieSBIeWF0dC4KQEAgLTEwLDYgKzMxLDE4IEBACiAgICAgICAg
ICogZmFzdC9mb3Jtcy9pbnB1dC10ZXh0LWRyYWctZG93bi1leHBlY3RlZC50eHQ6IEFkZGVkLgog
ICAgICAgICAqIGZhc3QvZm9ybXMvaW5wdXQtdGV4dC1kcmFnLWRvd24uaHRtbDogQWRkZWQuCiAK
KzIwMDYtMDQtMDcgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IEh5YXR0LgorCisgICAgICAgIC0gdGVzdCBmb3IgaHR0cDovL2J1Z3ppbGxhLm9w
ZW5kYXJ3aW4ub3JnL3Nob3dfYnVnLmNnaT9pZD04MTM0CisgICAgICAgICAgUkVHUkVTU0lPTjog
ZHJhZ2dpbmcgZG93biBmcm9tIHRoZSBtaWRkbGUgb2YgYSB0ZXh0IGZpZWxkIGRvZXMgbm90IHNl
bGVjdCB0byBlbmQgb2YgZmllbGQKKworICAgICAgICAqIGZhc3QvZm9ybXMvaW5wdXQtdGV4dC1k
cmFnLWRvd24tZXhwZWN0ZWQuY2hlY2tzdW06IEFkZGVkLgorICAgICAgICAqIGZhc3QvZm9ybXMv
aW5wdXQtdGV4dC1kcmFnLWRvd24tZXhwZWN0ZWQucG5nOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0
L2Zvcm1zL2lucHV0LXRleHQtZHJhZy1kb3duLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAg
ICogZmFzdC9mb3Jtcy9pbnB1dC10ZXh0LWRyYWctZG93bi5odG1sOiBBZGRlZC4KKwogMjAwNi0w
NC0wNyAgTWFjaWVqIFN0YWNob3dpYWsgIDxtanNAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IERhcmluLgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvcGF0dGVybmZpbGwt
cmVwZWF0LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2NhbnZh
cy9wYXR0ZXJuZmlsbC1yZXBlYXQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAxMzczOSkKKysrIExh
eW91dFRlc3RzL2Zhc3QvY2FudmFzL3BhdHRlcm5maWxsLXJlcGVhdC1leHBlY3RlZC50eHQJKHdv
cmtpbmcgY29weSkKQEAgLTEwLDQgKzEwLDQgQEAKICAgICAgICAgICB0ZXh0IHJ1biBhdCAoMCwz
Nikgd2lkdGggNzY0OiAiQm90dG9tIGxlZnQgc3F1YXJlIHNob3VsZCBiZSBvbmUgcm93IHdpdGgg
dGhyZWUgQXBwbGUgaW1hZ2VzIGFsb25nIHRoZSB0b3Agb2YgdGhlIHNxdWFyZS4gQm90dG9tIHJp
Z2h0IHNxdWFyZSBzaG91bGQgYmUiCiAgICAgICAgICAgdGV4dCBydW4gYXQgKDAsNTQpIHdpZHRo
IDIyMDogIm9uZSBBcHBsZSBpbWFnZSBpbiB0b3AgbGVmdCBjb3JuZXIuIgogICAgICAgUmVuZGVy
QmxvY2sge1B9IGF0ICgwLDg4KSBzaXplIDc4NHgzNDAKLSAgICAgICAgUmVuZGVyQ2FudmFzSW1h
Z2Uge0NBTlZBU30gYXQgKDAsMCkgc2l6ZSAzMzZ4MzM2IFtib3JkZXI6ICgzcHggc29saWQgIzAw
MDAwMCldCisgICAgICAgIFJlbmRlckhUTUxDYW52YXMge0NBTlZBU30gYXQgKDAsMCkgc2l6ZSAz
MzZ4MzM2IFtib3JkZXI6ICgzcHggc29saWQgIzAwMDAwMCldCkluZGV4OiBMYXlvdXRUZXN0cy9m
YXN0L2NhbnZhcy9pbWFnZS1vYmplY3QtaW4tY2FudmFzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy9pbWFnZS1vYmplY3QtaW4tY2FudmFzLWV4cGVj
dGVkLnR4dAkocmV2aXNpb24gMTM3MzkpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy9pbWFn
ZS1vYmplY3QtaW4tY2FudmFzLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtOCwxNSAr
OCwxNSBAQAogICAgICAgICAgIHRleHQgcnVuIGF0ICgwLDApIHdpZHRoIDc3OTogIlRoaXMgdGVz
dHMgdGhhdCB0aGUgSW1hZ2UgSmF2YVNjcmlwdCBvYmplY3Qgd29ya3MgYXMgZXhwZWN0ZWQgd2hl
biB1c2VkIGluIGEgY2FudmFzLiBJZiB0aGUgdGVzdCBpcyBzdWNjZXNzZnVsLCB0aGUgQXBwbGUg
bG9nbyIKICAgICAgICAgICB0ZXh0IHJ1biBhdCAoMCwxOCkgd2lkdGggMzU0OiAic2hvdWxkIGFw
cGVhciBzY2FsZWQsIG5vcm1hbCBhbmQgZmluYWxseSB0aWxlZCBpbiBhIGNpcmNsZS4iCiAgICAg
ICBSZW5kZXJCbG9jayB7RElWfSBhdCAoMCw1Mikgc2l6ZSA3ODR4MTU0Ci0gICAgICAgIFJlbmRl
ckNhbnZhc0ltYWdlIHtDQU5WQVN9IGF0ICgwLDApIHNpemUgMTUweDE1MAorICAgICAgICBSZW5k
ZXJIVE1MQ2FudmFzIHtDQU5WQVN9IGF0ICgwLDApIHNpemUgMTUweDE1MAogICAgICAgICBSZW5k
ZXJUZXh0IHtURVhUfSBhdCAoMTUwLDEzNikgc2l6ZSAxMTd4MTgKICAgICAgICAgICB0ZXh0IHJ1
biBhdCAoMTUwLDEzNikgd2lkdGggMTE3OiAiVXNpbmcgZHJhd0ltYWdlLiIKICAgICAgIFJlbmRl
ckJsb2NrIHtESVZ9IGF0ICgwLDIwNikgc2l6ZSA3ODR4MTU0Ci0gICAgICAgIFJlbmRlckNhbnZh
c0ltYWdlIHtDQU5WQVN9IGF0ICgwLDApIHNpemUgMTUweDE1MAorICAgICAgICBSZW5kZXJIVE1M
Q2FudmFzIHtDQU5WQVN9IGF0ICgwLDApIHNpemUgMTUweDE1MAogICAgICAgICBSZW5kZXJUZXh0
IHtURVhUfSBhdCAoMTUwLDEzNikgc2l6ZSAxODB4MTgKICAgICAgICAgICB0ZXh0IHJ1biBhdCAo
MTUwLDEzNikgd2lkdGggMTgwOiAiVXNpbmcgZHJhd0ltYWdlRnJvbVJlY3QuIgogICAgICAgUmVu
ZGVyQmxvY2sge0RJVn0gYXQgKDAsMzYwKSBzaXplIDc4NHgxNTQKLSAgICAgICAgUmVuZGVyQ2Fu
dmFzSW1hZ2Uge0NBTlZBU30gYXQgKDAsMCkgc2l6ZSAxNTB4MTUwCisgICAgICAgIFJlbmRlckhU
TUxDYW52YXMge0NBTlZBU30gYXQgKDAsMCkgc2l6ZSAxNTB4MTUwCiAgICAgICAgIFJlbmRlclRl
eHQge1RFWFR9IGF0ICgxNTAsMTM2KSBzaXplIDEyOXgxOAogICAgICAgICAgIHRleHQgcnVuIGF0
ICgxNTAsMTM2KSB3aWR0aCAxMjk6ICJVc2luZyBJbWFnZVBhdHRlcm4uIgogICAgICAgUmVuZGVy
QmxvY2sge1BSRX0gYXQgKDAsNTI3KSBzaXplIDc4NHgwCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0
L2NhbnZhcy9maWxscmVjdF9ncmFkaWVudC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvZmFzdC9jYW52YXMvZmlsbHJlY3RfZ3JhZGllbnQtZXhwZWN0ZWQudHh0CShyZXZp
c2lvbiAxMzczOSkKKysrIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL2ZpbGxyZWN0X2dyYWRpZW50
LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNSw3ICs1LDcgQEAKICAgICBSZW5kZXJC
b2R5IHtCT0RZfSBhdCAoOCw4KSBzaXplIDc4NHg1ODQKICAgICAgIFJlbmRlclRleHQge1RFWFR9
IGF0ICgwLDApIHNpemUgNzIyeDE4CiAgICAgICAgIHRleHQgcnVuIGF0ICgwLDApIHdpZHRoIDcy
MjogIlRoZSBjYW52YXMgYmVsb3cgc2hvdWxkIHNob3cgYSBncmFkaWVudCwgc3RhcnRpbmcgYXQg
Z3JlZW4gYXQgdGhlIHRvcCBhbmQgZmFkaW5nIHRvIHdoaXRlIGF0IHRoZSBib3R0b20gb2YgdGhl
IHJlY3QuICIKLSAgICAgIFJlbmRlckNhbnZhc0ltYWdlIHtDQU5WQVN9IGF0ICgwLDE4KSBzaXpl
IDE1MHgxNTAKKyAgICAgIFJlbmRlckhUTUxDYW52YXMge0NBTlZBU30gYXQgKDAsMTgpIHNpemUg
MTUweDE1MAogICAgICAgUmVuZGVyVGV4dCB7VEVYVH0gYXQgKDAsMCkgc2l6ZSAweDAKICAgICAg
IFJlbmRlclRleHQge1RFWFR9IGF0ICgwLDApIHNpemUgMHgwCiAgICAgICBSZW5kZXJUZXh0IHtU
RVhUfSBhdCAoMCwwKSBzaXplIDB4MApJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvY2Fu
dmFzLWJlZm9yZS1jc3MtZXhwZWN0ZWQuY2hlY2tzdW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvZmFzdC9jYW52YXMvY2FudmFzLWJlZm9yZS1jc3MtZXhwZWN0ZWQuY2hlY2tzdW0JKHJldmlz
aW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy9jYW52YXMtYmVmb3JlLWNzcy1leHBl
Y3RlZC5jaGVja3N1bQkocmV2aXNpb24gMCkKQEAgLTAsMCArMSBAQAorOTI5NWFlOTJjZjQ0ZTli
OTQxMjI2ZjQxZmMwNDdiYTEKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCkluZGV4OiBMYXlv
dXRUZXN0cy9mYXN0L2NhbnZhcy9xdWFkcmF0aWNDdXJ2ZVRvLWV4cGVjdGVkLnR4dAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy9xdWFkcmF0aWNDdXJ2ZVRvLWV4cGVjdGVk
LnR4dAkocmV2aXNpb24gMTM3MzkpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy9xdWFkcmF0
aWNDdXJ2ZVRvLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNyw0ICs3LDQgQEAKICAg
ICAgICAgUmVuZGVyVGV4dCB7VEVYVH0gYXQgKDAsMCkgc2l6ZSA0MTZ4MTgKICAgICAgICAgICB0
ZXh0IHJ1biBhdCAoMCwwKSB3aWR0aCA0MTY6ICJUaGlzIHRlc3QgY2FzZSBzaG91bGQgcHJvZHVj
ZSBhIHNpbmUtd2F2ZSBzdHJva2VkIHdpdGggMXB4IGJsYWNrLiIKICAgICBSZW5kZXJCbG9jayAo
YW5vbnltb3VzKSBhdCAoMCw1MCkgc2l6ZSA4MDB4MzY0Ci0gICAgICBSZW5kZXJDYW52YXNJbWFn
ZSB7Q0FOVkFTfSBhdCAoMCwwKSBzaXplIDQ4MHgzNjAKKyAgICAgIFJlbmRlckhUTUxDYW52YXMg
e0NBTlZBU30gYXQgKDAsMCkgc2l6ZSA0ODB4MzYwCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2Nh
bnZhcy9jYW52YXMtYmVmb3JlLWNzcy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zh
c3QvY2FudmFzL2NhbnZhcy1iZWZvcmUtY3NzLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRU
ZXN0cy9mYXN0L2NhbnZhcy9jYW52YXMtYmVmb3JlLWNzcy5odG1sCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDEzIEBACis8aHRtbD4KKzxoZWFkPgorICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIg
aHJlZj0iYWJvdXQ6YmxhbmsiIHR5cGU9InRleHQvY3NzIj4KKzwvaGVhZD4KKzxib2R5PgorICAg
IDxwPklmIHRoZSBjYW52YXMgYmVsb3cgaXMgYmxhY2ssIHRoZW4gd2UgbWFuYWdlZCB0byBkcmF3
IGJlZm9yZSBsb2FkaW5nIHN0eWxlc2hlZXRzLiBIb29yYXkhPC9wPgorICAgIDxjYW52YXMgaWQ9
Im15Y2FudmFzIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjIwMCI+PC9jYW52YXM+CisgICAgPHNjcmlw
dCB0eXBlPSJhcHBsaWNhdGlvbi94LWphdmFzY3JpcHQiPgorICAgICAgICB2YXIgY2FudmFzID0g
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm15Y2FudmFzIik7CisgICAgICAgIGNhbnZhcy5nZXRD
b250ZXh0KCIyZCIpLmZpbGxSZWN0KDAsIDAsIGNhbnZhcy53aWR0aCwgY2FudmFzLmhlaWdodCk7
CisgICAgPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0
L2NhbnZhcy9pbWFnZS1vYmplY3QtaW4tY2FudmFzLmh0bWwKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvZmFzdC9jYW52YXMvaW1hZ2Utb2JqZWN0LWluLWNhbnZhcy5odG1sCShyZXZpc2lvbiAx
MzczOSkKKysrIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL2ltYWdlLW9iamVjdC1pbi1jYW52YXMu
aHRtbAkod29ya2luZyBjb3B5KQpAQCAtNDYsOSArNDYsOSBAQAogPC9oZWFkPgogPGJvZHkgb25s
b2FkPSJydW5UZXN0cygpOyI+CiA8cD5UaGlzIHRlc3RzIHRoYXQgdGhlIEltYWdlIEphdmFTY3Jp
cHQgb2JqZWN0IHdvcmtzIGFzIGV4cGVjdGVkIHdoZW4gdXNlZCBpbiBhIGNhbnZhcy4gSWYgdGhl
IHRlc3QgaXMgc3VjY2Vzc2Z1bCwgdGhlIEFwcGxlIGxvZ28gc2hvdWxkIGFwcGVhciBzY2FsZWQs
IG5vcm1hbCBhbmQgZmluYWxseSB0aWxlZCBpbiBhIGNpcmNsZS48L3A+Ci08ZGl2PjxjYW52YXMg
aWQ9ImNhbnZhczEiIHdpZHRoPSIxNTAiIGhlaWdodD0iMTUwIi8+VXNpbmcgZHJhd0ltYWdlLjwv
ZGl2PgotPGRpdj48Y2FudmFzIGlkPSJjYW52YXMyIiB3aWR0aD0iMTUwIiBoZWlnaHQ9IjE1MCIv
PlVzaW5nIGRyYXdJbWFnZUZyb21SZWN0LjwvZGl2PgotPGRpdj48Y2FudmFzIGlkPSJjYW52YXMz
IiB3aWR0aD0iMTUwIiBoZWlnaHQ9IjE1MCIvPlVzaW5nIEltYWdlUGF0dGVybi48L2Rpdj4KKzxk
aXY+PGNhbnZhcyBpZD0iY2FudmFzMSIgd2lkdGg9IjE1MCIgaGVpZ2h0PSIxNTAiPjwvY2FudmFz
PlVzaW5nIGRyYXdJbWFnZS48L2Rpdj4KKzxkaXY+PGNhbnZhcyBpZD0iY2FudmFzMiIgd2lkdGg9
IjE1MCIgaGVpZ2h0PSIxNTAiPjwvY2FudmFzPlVzaW5nIGRyYXdJbWFnZUZyb21SZWN0LjwvZGl2
PgorPGRpdj48Y2FudmFzIGlkPSJjYW52YXMzIiB3aWR0aD0iMTUwIiBoZWlnaHQ9IjE1MCI+PC9j
YW52YXM+VXNpbmcgSW1hZ2VQYXR0ZXJuLjwvZGl2PgogCiA8cHJlIGlkPSJjb25zb2xlIj4KIDwv
cHJlPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvY2FudmFzLWJlZm9yZS1jc3MtZXhw
ZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL2NhbnZhcy1i
ZWZvcmUtY3NzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qv
Y2FudmFzL2NhbnZhcy1iZWZvcmUtY3NzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwxNCBAQAorbGF5ZXIgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCisgIFJlbmRlckNhbnZhcyBh
dCAoMCwwKSBzaXplIDgwMHg2MDAKK2xheWVyIGF0ICgwLDApIHNpemUgODAweDYwMAorICBSZW5k
ZXJCbG9jayB7SFRNTH0gYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCisgICAgUmVuZGVyQm9keSB7Qk9E
WX0gYXQgKDgsOCkgc2l6ZSA3ODR4NTg0CisgICAgICBSZW5kZXJCbG9jayB7UH0gYXQgKDAsMCkg
c2l6ZSA3ODR4MTgKKyAgICAgICAgUmVuZGVyVGV4dCB7VEVYVH0gYXQgKDAsMCkgc2l6ZSA1NzN4
MTgKKyAgICAgICAgICB0ZXh0IHJ1biBhdCAoMCwwKSB3aWR0aCA1NzM6ICJJZiB0aGUgY2FudmFz
IGJlbG93IGlzIGJsYWNrLCB0aGVuIHdlIG1hbmFnZWQgdG8gZHJhdyBiZWZvcmUgbG9hZGluZyBz
dHlsZXNoZWV0cy4gSG9vcmF5ISIKKyAgICAgIFJlbmRlckJsb2NrIChhbm9ueW1vdXMpIGF0ICgw
LDM0KSBzaXplIDc4NHgyMDAKKyAgICAgICAgUmVuZGVySFRNTENhbnZhcyB7Q0FOVkFTfSBhdCAo
MCwwKSBzaXplIDQwMHgyMDAKKyAgICAgICAgUmVuZGVyVGV4dCB7VEVYVH0gYXQgKDAsMCkgc2l6
ZSAweDAKKyAgICAgICAgUmVuZGVyVGV4dCB7VEVYVH0gYXQgKDAsMCkgc2l6ZSAweDAKKyAgICAg
ICAgUmVuZGVyVGV4dCB7VEVYVH0gYXQgKDAsMCkgc2l6ZSAweDAKKyAgICAgICAgUmVuZGVyVGV4
dCB7VEVYVH0gYXQgKDAsMCkgc2l6ZSAweDAK
</data>
<flag name="review"
          id="2076"
          type_id="1"
          status="+"
          setter="andersca"
    />
          </attachment>
      

    </bug>

</bugzilla>