<?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>101608</bug_id>
          
          <creation_ts>2012-11-08 08:13:32 -0800</creation_ts>
          <short_desc>[BlackBerry] Rework the API to use document coordinates</short_desc>
          <delta_ts>2012-11-08 10:21:56 -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>WebKit BlackBerry</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</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="Jakob Petsovits">jpetsovits</reporter>
          <assigned_to name="Jakob Petsovits">jpetsovits</assigned_to>
          <cc>anilsson</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>feature-media-reviews</cc>
    
    <cc>manyoso</cc>
    
    <cc>mifenton</cc>
    
    <cc>rwlbuis</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>761814</commentid>
    <comment_count>0</comment_count>
    <who name="Jakob Petsovits">jpetsovits</who>
    <bug_when>2012-11-08 08:13:32 -0800</bug_when>
    <thetext>Scrolling and zooming APIs used to operate on transformed coordinates, which is a bad idea: The UI thread might long have moved on to a different scale and scroll position so outdated pixel coordinates are of limited value.

Moreover, more transformation calculations are needed than if we operate purely on document coordinates.

With webkitThreadViewportAccessor() exposed, the caller has a choice between how to handle coordinates and the means to perform conversions with little effort and overhead if needed. Therefore, we should remove pixel coordinates from the public API. The patch below makes this change.

Internally tracked as part of RIM PR 173292.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>761823</commentid>
    <comment_count>1</comment_count>
      <attachid>173049</attachid>
    <who name="Jakob Petsovits">jpetsovits</who>
    <bug_when>2012-11-08 08:26:21 -0800</bug_when>
    <thetext>Created attachment 173049
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>761847</commentid>
    <comment_count>2</comment_count>
      <attachid>173049</attachid>
    <who name="Adam Treat">manyoso</who>
    <bug_when>2012-11-08 08:54:20 -0800</bug_when>
    <thetext>Comment on attachment 173049
Patch

This is the way we are going so r+</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>761915</commentid>
    <comment_count>3</comment_count>
      <attachid>173049</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-08 10:21:53 -0800</bug_when>
    <thetext>Comment on attachment 173049
Patch

Clearing flags on attachment: 173049

Committed r133914: &lt;http://trac.webkit.org/changeset/133914&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>761916</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-08 10:21:56 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>173049</attachid>
            <date>2012-11-08 08:26:21 -0800</date>
            <delta_ts>2012-11-08 10:21:52 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-101608-20121108112422.patch</filename>
            <type>text/plain</type>
            <size>65870</size>
            <attacher name="Jakob Petsovits">jpetsovits</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMzODkzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjBjYzFlZWJiN2U3YTRi
NmY2NjJlNWJiZGUxYTVkYmYzNDEzNGRjOC4uODk5ZTY4ZGU1ODJmNGFiN2I4YWU2NmIzYTdiZWEw
ZjhiMzQ3Mzk5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDEyLTExLTA4ICBKYWtv
YiBQZXRzb3ZpdHMgIDxqcGV0c292aXRzQHJpbS5jb20+CisKKyAgICAgICAgW0JsYWNrQmVycnld
IFJld29yayB0aGUgQVBJIHRvIHVzZSBkb2N1bWVudCBjb29yZGluYXRlcworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAxNjA4CisgICAgICAgIFJJTSBQ
UiAxNzMyOTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBQcm92aWRlIGEgYmV0dGVyIEFQSSBmb3IgV2ViUGFnZSB0byByZWxheS4KKyAgICAgICAgU2Vl
IFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9DaGFuZ2VMb2cgZm9yIGRldGFpbHMuCisKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L01lZGlhUGxheWVyUHJpdmF0ZUJsYWNr
QmVycnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlOjpnZXRXaW5k
b3dTY3JlZW5SZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L01l
ZGlhUGxheWVyUHJpdmF0ZUJsYWNrQmVycnkuaDoKKyAgICAgICAgKFBsYXRmb3JtKToKKyAgICAg
ICAgKEJsYWNrQmVycnkpOgorICAgICAgICAoTWVkaWFQbGF5ZXJQcml2YXRlKToKKwogMjAxMi0x
MS0wOCAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAg
ICAgW0dUS10gQ2xlYW4gdXAgaW5jbHVkZXMgaW4gR09iamVjdCBET00gYmluZGluZ3MgY29kZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0NoYW5nZUxvZyBiL1NvdXJjZS9X
ZWJLaXQvYmxhY2tiZXJyeS9DaGFuZ2VMb2cKaW5kZXggOWZkZThhZjhmZmE4YWJmYjFhNTIyN2Vi
MDgwZGI5N2ZiZTdiYTAxYS4uZTdlNjUzMjFmM2M2MmQ0ODA2M2U1YTdjNWI0YjQ4YzRhY2ExZDE1
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0NoYW5nZUxvZworKysgYi9T
b3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODIgQEAKKzIwMTIt
MTEtMDggIEpha29iIFBldHNvdml0cyAgPGpwZXRzb3ZpdHNAcmltLmNvbT4KKworICAgICAgICBb
QmxhY2tCZXJyeV0gUmV3b3JrIHRoZSBBUEkgdG8gdXNlIGRvY3VtZW50IGNvb3JkaW5hdGVzCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDE2MDgKKyAg
ICAgICAgUklNIFBSIDE3MzI5MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFNjcm9sbGluZyBhbmQgem9vbWluZyBBUElzIHVzZWQgdG8gb3BlcmF0ZSBv
bgorICAgICAgICB0cmFuc2Zvcm1lZCBjb29yZGluYXRlcywgd2hpY2ggaXMgYSBiYWQgaWRlYToK
KyAgICAgICAgVGhlIFVJIHRocmVhZCBtaWdodCBsb25nIGhhdmUgbW92ZWQgb24gdG8gYQorICAg
ICAgICBkaWZmZXJlbnQgc2NhbGUgYW5kIHNjcm9sbCBwb3NpdGlvbiBzbyBvdXRkYXRlZAorICAg
ICAgICBwaXhlbCBjb29yZGluYXRlcyBhcmUgb2YgbGltaXRlZCB2YWx1ZS4KKworICAgICAgICBN
b3Jlb3ZlciwgbW9yZSB0cmFuc2Zvcm1hdGlvbiBjYWxjdWxhdGlvbnMgYXJlCisgICAgICAgIG5l
ZWRlZCB0aGFuIGlmIHdlIG9wZXJhdGUgcHVyZWx5IG9uIGRvY3VtZW50CisgICAgICAgIGNvb3Jk
aW5hdGVzLgorCisgICAgICAgIFdpdGggd2Via2l0VGhyZWFkVmlld3BvcnRBY2Nlc3NvcigpIGV4
cG9zZWQsCisgICAgICAgIHRoZSBjYWxsZXIgaGFzIGEgY2hvaWNlIGJldHdlZW4gaG93IHRvIGhh
bmRsZQorICAgICAgICBjb29yZGluYXRlcyBhbmQgdGhlIG1lYW5zIHRvIHBlcmZvcm0gY29udmVy
c2lvbnMKKyAgICAgICAgd2l0aCBsaXR0bGUgZWZmb3J0IGFuZCBvdmVyaGVhZCBpZiBuZWVkZWQu
CisgICAgICAgIFRoZXJlZm9yZSwgd2Ugc2hvdWxkIHJlbW92ZSBwaXhlbCBjb29yZGluYXRlcwor
ICAgICAgICBmcm9tIHRoZSBwdWJsaWMgQVBJLiBUaGlzIGNvbW1pdCBtYWtlcyB0aGlzIGNoYW5n
ZS4KKworICAgICAgICAqIEFwaS9CYWNraW5nU3RvcmUuY3BwOgorICAgICAgICAoQmxhY2tCZXJy
eTo6V2ViS2l0OjpCYWNraW5nU3RvcmVQcml2YXRlOjpyZXBhaW50KToKKyAgICAgICAgKEJsYWNr
QmVycnk6OldlYktpdDo6QmFja2luZ1N0b3JlUHJpdmF0ZTo6ZGlkUmVuZGVyQ29udGVudCk6Cisg
ICAgICAgICogQXBpL0luUmVnaW9uU2Nyb2xsZXIuY3BwOgorICAgICAgICAoQmxhY2tCZXJyeTo6
V2ViS2l0OjpJblJlZ2lvblNjcm9sbGVyOjpzZXREb2N1bWVudFNjcm9sbFBvc2l0aW9uQ29tcG9z
aXRpbmdUaHJlYWQpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpJblJlZ2lvblNjcm9s
bGVyOjpzZXREb2N1bWVudFNjcm9sbFBvc2l0aW9uV2ViS2l0VGhyZWFkKToKKyAgICAgICAgKEJs
YWNrQmVycnk6OldlYktpdDo6SW5SZWdpb25TY3JvbGxlclByaXZhdGU6OmNhbGN1bGF0ZUluUmVn
aW9uU2Nyb2xsYWJsZUFyZWFzRm9yUG9pbnQpOgorICAgICAgICAqIEFwaS9JblJlZ2lvblNjcm9s
bGVyLmg6CisgICAgICAgICogQXBpL1dlYlBhZ2UuY3BwOgorICAgICAgICAoQmxhY2tCZXJyeTo6
V2ViS2l0OjpXZWJQYWdlUHJpdmF0ZTo6V2ViUGFnZVByaXZhdGUpOgorICAgICAgICAoQmxhY2tC
ZXJyeTo6V2ViS2l0OjpXZWJQYWdlUHJpdmF0ZTo6c2V0TG9hZFN0YXRlKToKKyAgICAgICAgKEJs
YWNrQmVycnk6OldlYktpdDo6V2ViUGFnZVByaXZhdGU6OnNob3VsZFpvb21BYm91dFBvaW50KToK
KyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViUGFnZVByaXZhdGU6Onpvb21BYm91dFBv
aW50KToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViUGFnZTo6c2V0RG9jdW1lbnRT
Y3JvbGxQb3NpdGlvbik6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYlBhZ2VQcml2
YXRlOjpoYXNWaXJ0dWFsVmlld3BvcnQpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpX
ZWJQYWdlUHJpdmF0ZTo6bm90aWZ5VHJhbnNmb3JtZWRDb250ZW50c1NpemVDaGFuZ2VkKToKKyAg
ICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViUGFnZVByaXZhdGU6Om5vdGlmeVRyYW5zZm9y
bWVkU2Nyb2xsQ2hhbmdlZCk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYlBhZ2VQ
cml2YXRlOjpzZXRDdXJzb3IpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJQYWdl
UHJpdmF0ZTo6bm90aWZ5UG9wdXBBdXRvZmlsbERpYWxvZyk6CisgICAgICAgIChCbGFja0JlcnJ5
OjpXZWJLaXQ6OldlYlBhZ2VQcml2YXRlOjpmaXhlZExheW91dFNpemUpOgorICAgICAgICAoQmxh
Y2tCZXJyeTo6V2ViS2l0OjpXZWJQYWdlUHJpdmF0ZTo6YmVzdE5vZGVGb3Jab29tVW5kZXJQb2lu
dCk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYlBhZ2VQcml2YXRlOjpibG9ja1pv
b21SZWN0Rm9yTm9kZSk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYlBhZ2VQcml2
YXRlOjp6b29tQmxvY2spOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJQYWdlOjpz
ZXRWaXJ0dWFsVmlld3BvcnRTaXplKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2Vi
UGFnZVByaXZhdGU6OnJlY29tcHV0ZVZpcnR1YWxWaWV3cG9ydEZyb21WaWV3cG9ydEFyZ3VtZW50
cyk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYlBhZ2VQcml2YXRlOjpkaXNwYXRj
aFZpZXdwb3J0UHJvcGVydGllc0RpZENoYW5nZSk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJL
aXQ6OldlYlBhZ2VQcml2YXRlOjpyZXN1bWVCYWNraW5nU3RvcmUpOgorICAgICAgICAoQmxhY2tC
ZXJyeTo6V2ViS2l0OjpXZWJQYWdlUHJpdmF0ZTo6c2V0Vmlld3BvcnRTaXplKToKKyAgICAgICAg
KEJsYWNrQmVycnk6OldlYktpdDo6V2ViUGFnZTo6c2V0RGVmYXVsdExheW91dFNpemUpOgorICAg
ICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJQYWdlUHJpdmF0ZTo6c2V0U2Nyb2xsT3JpZ2lu
UG9pbnQpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJQYWdlOjpzZXREb2N1bWVu
dFNjcm9sbE9yaWdpblBvaW50KToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6aGFuZGxl
U2Nyb2xsaW5nKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViUGFnZTo6c2VsZWN0
aW9uQ29udGFpbnNEb2N1bWVudFBvaW50KToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6
V2ViUGFnZTo6c2V0RG9jdW1lbnRTZWxlY3Rpb24pOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2Vi
S2l0OjpXZWJQYWdlOjpzZXREb2N1bWVudENhcmV0UG9zaXRpb24pOgorICAgICAgICAoQmxhY2tC
ZXJyeTo6V2ViS2l0OjpXZWJQYWdlOjpzZWxlY3RBdERvY3VtZW50UG9pbnQpOgorICAgICAgICAo
QmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJQYWdlUHJpdmF0ZTo6c2V0VGV4dFJlZmxvd0FuY2hvclBv
aW50KToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6V2ViUGFnZTo6cGluY2hab29tQWJv
dXRQb2ludCk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYlBhZ2U6OmJsb2NrWm9v
bSk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OldlYlBhZ2U6Om5vZGVBdERvY3VtZW50
UG9pbnQpOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpXZWJQYWdlUHJpdmF0ZTo6ZW50
ZXJGdWxsc2NyZWVuRm9yTm9kZSk6CisgICAgICAgICogQXBpL1dlYlBhZ2UuaDoKKyAgICAgICAg
KFBsYXRmb3JtKToKKyAgICAgICAgKiBBcGkvV2ViUGFnZUNsaWVudC5oOgorICAgICAgICAqIEFw
aS9XZWJQYWdlX3AuaDoKKyAgICAgICAgKFdlYlBhZ2VQcml2YXRlKToKKyAgICAgICAgKiBXZWJD
b3JlU3VwcG9ydC9BdXRvZmlsbE1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXV0b2Zp
bGxNYW5hZ2VyOjpkaWRDaGFuZ2VJblRleHRGaWVsZCk6CisgICAgICAgICogV2ViQ29yZVN1cHBv
cnQvRnJhbWVMb2FkZXJDbGllbnRCbGFja0JlcnJ5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZy
YW1lTG9hZGVyQ2xpZW50QmxhY2tCZXJyeTo6ZGlzcGF0Y2hEaWRMYXlvdXQpOgorICAgICAgICAq
IFdlYktpdFN1cHBvcnQvU2VsZWN0aW9uSGFuZGxlci5jcHA6CisgICAgICAgIChCbGFja0JlcnJ5
OjpXZWJLaXQ6OlNlbGVjdGlvbkhhbmRsZXI6OnNlbGVjdGlvblBvc2l0aW9uQ2hhbmdlZCk6Cisg
ICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OlNlbGVjdGlvbkhhbmRsZXI6OmNhcmV0UG9zaXRp
b25DaGFuZ2VkKToKKwogMjAxMi0xMS0wNyAgUm9iIEJ1aXMgIDxyYnVpc0ByaW0uY29tPgogCiAg
ICAgICAgIFtCbGFja0JlcnJ5XSBSZW1vdmUgc2V0VXNlclN0eWxlU2hlZXRTdHJpbmcvdXNlclN0
eWxlU2hlZXRTdHJpbmcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2JsYWNrYmVycnkvTWVkaWFQbGF5ZXJQcml2YXRlQmxhY2tCZXJyeS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L01lZGlhUGxheWVyUHJpdmF0ZUJs
YWNrQmVycnkuY3BwCmluZGV4IDdhOWU0ODRiNTZjYmNiZjBjNWFjZTBkOTdiZWY2N2E3MGFjOGZj
ODkuLjQzMWU5NjU0NWU0OTc0ZDA2NTE2ZjMxYmI2ODY0ZjJhNzk0ZjI1NGUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2JsYWNrYmVycnkvTWVkaWFQbGF5ZXJQ
cml2YXRlQmxhY2tCZXJyeS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvYmxhY2tiZXJyeS9NZWRpYVBsYXllclByaXZhdGVCbGFja0JlcnJ5LmNwcApAQCAtNDAsNiAr
NDAsNyBAQAogI2luY2x1ZGUgIldlYlBhZ2VDbGllbnQuaCIKIAogI2luY2x1ZGUgPEJsYWNrQmVy
cnlQbGF0Zm9ybURldmljZUluZm8uaD4KKyNpbmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1Qcmlt
aXRpdmVzLmg+CiAjaW5jbHVkZSA8QmxhY2tCZXJyeVBsYXRmb3JtU2V0dGluZ3MuaD4KICNpbmNs
dWRlIDxGcmFtZUxvYWRlckNsaWVudEJsYWNrQmVycnkuaD4KICNpbmNsdWRlIDxzZXQ+CkBAIC00
NjUsOSArNDY2LDExIEBAIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpHcmFwaGljczo6V2luZG93KiBN
ZWRpYVBsYXllclByaXZhdGU6OmdldFBlZXJXaW5kb3coY29uc3QKICAgICByZXR1cm4gbV9wbGF0
Zm9ybVBsYXllci0+Z2V0UGVlcldpbmRvdyh1bmlxdWVJRCk7CiB9CiAKLWludCBNZWRpYVBsYXll
clByaXZhdGU6OmdldFdpbmRvd1Bvc2l0aW9uKHVuc2lnbmVkJiB4LCB1bnNpZ25lZCYgeSwgdW5z
aWduZWQmIHdpZHRoLCB1bnNpZ25lZCYgaGVpZ2h0KSBjb25zdAorQmxhY2tCZXJyeTo6UGxhdGZv
cm06OkludFJlY3QgTWVkaWFQbGF5ZXJQcml2YXRlOjpnZXRXaW5kb3dTY3JlZW5SZWN0KCkgY29u
c3QKIHsKLSAgICByZXR1cm4gbV9wbGF0Zm9ybVBsYXllci0+Z2V0V2luZG93UG9zaXRpb24oeCwg
eSwgd2lkdGgsIGhlaWdodCk7CisgICAgdW5zaWduZWQgeCwgeSwgd2lkdGgsIGhlaWdodDsKKyAg
ICBtX3BsYXRmb3JtUGxheWVyLT5nZXRXaW5kb3dQb3NpdGlvbih4LCB5LCB3aWR0aCwgaGVpZ2h0
KTsKKyAgICByZXR1cm4gQmxhY2tCZXJyeTo6UGxhdGZvcm06OkludFJlY3QoeCwgeSwgd2lkdGgs
IGhlaWdodCk7CiB9CiAKIGNvbnN0IGNoYXIqIE1lZGlhUGxheWVyUHJpdmF0ZTo6bW1yQ29udGV4
dE5hbWUoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYmxh
Y2tiZXJyeS9NZWRpYVBsYXllclByaXZhdGVCbGFja0JlcnJ5LmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L01lZGlhUGxheWVyUHJpdmF0ZUJsYWNrQmVycnku
aAppbmRleCBjMDU1YWJjNWViZDQzNTRmMDQ2ZTg3MTYwZDZhN2FjZmYwODQyYzlkLi4zMDNjNTdh
NTFlNDViOWRlM2E4NDJjZWMxMGQzMWNkZGQzNjdjMDYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5L01lZGlhUGxheWVyUHJpdmF0ZUJsYWNr
QmVycnkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ibGFja2JlcnJ5
L01lZGlhUGxheWVyUHJpdmF0ZUJsYWNrQmVycnkuaApAQCAtMjYsNiArMjYsMTAgQEAKICNpbmNs
dWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1QbGF5ZXIuaD4KIAogbmFtZXNwYWNlIEJsYWNrQmVycnkg
eworbmFtZXNwYWNlIFBsYXRmb3JtIHsKK2NsYXNzIEludFJlY3Q7Cit9CisKIG5hbWVzcGFjZSBX
ZWJLaXQgewogY2xhc3MgV2ViUGFnZUNsaWVudDsKIH0KQEAgLTEwOSw3ICsxMTMsNyBAQCBwdWJs
aWM6CiAgICAgdm9pZCBzZXRGdWxsc2NyZWVuV2ViUGFnZUNsaWVudChCbGFja0JlcnJ5OjpXZWJL
aXQ6OldlYlBhZ2VDbGllbnQqKTsKICAgICBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6R3JhcGhpY3M6
OldpbmRvdyogZ2V0V2luZG93KCk7CiAgICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkdyYXBoaWNz
OjpXaW5kb3cqIGdldFBlZXJXaW5kb3coY29uc3QgY2hhciopIGNvbnN0OwotICAgIGludCBnZXRX
aW5kb3dQb3NpdGlvbih1bnNpZ25lZCYgeCwgdW5zaWduZWQmIHksIHVuc2lnbmVkJiB3aWR0aCwg
dW5zaWduZWQmIGhlaWdodCkgY29uc3Q7CisgICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06OkludFJl
Y3QgZ2V0V2luZG93U2NyZWVuUmVjdCgpIGNvbnN0OwogICAgIGNvbnN0IGNoYXIqIG1tckNvbnRl
eHROYW1lKCk7CiAgICAgZmxvYXQgcGVyY2VudExvYWRlZCgpOwogICAgIHVuc2lnbmVkIHNvdXJj
ZVdpZHRoKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL0JhY2tp
bmdTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL0JhY2tpbmdTdG9yZS5j
cHAKaW5kZXggMGRhYzljYjMxMmVlOGFlYjA4YTRmZjU0N2NhMDdkMWUzNzE4NGYzZC4uNjFiOTBj
YzI0MTVmYTlhZDc3ODYzMmUwODViZmNlODVhZGQ3MGEzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9ibGFja2JlcnJ5L0FwaS9CYWNraW5nU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
YmxhY2tiZXJyeS9BcGkvQmFja2luZ1N0b3JlLmNwcApAQCAtNDA5LDcgKzQwOSw3IEBAIHZvaWQg
QmFja2luZ1N0b3JlUHJpdmF0ZTo6cmVwYWludChjb25zdCBQbGF0Zm9ybTo6SW50UmVjdCYgd2lu
ZG93UmVjdCwKICAgICAgICAgICAgIGlmIChyZW5kZXIocmVjdCkpIHsKICAgICAgICAgICAgICAg
ICBpZiAoIXNob3VsZERpcmVjdFJlbmRlcmluZ1RvV2luZG93KCkgJiYgIW1fd2ViUGFnZS0+ZC0+
Y29tbWl0Um9vdExheWVySWZOZWVkZWQoKSkKICAgICAgICAgICAgICAgICAgICAgYmxpdFZpc2li
bGVDb250ZW50cygpOwotICAgICAgICAgICAgICAgIG1fd2ViUGFnZS0+ZC0+bV9jbGllbnQtPm5v
dGlmeUNvbnRlbnRSZW5kZXJlZChyZWN0KTsKKyAgICAgICAgICAgICAgICBtX3dlYlBhZ2UtPmQt
Pm1fY2xpZW50LT5ub3RpZnlQaXhlbENvbnRlbnRSZW5kZXJlZChyZWN0KTsKICAgICAgICAgICAg
IH0KICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBtX3JlbmRlclF1ZXVlLT5hZGRUb1F1ZXVl
KFJlbmRlclF1ZXVlOjpSZWd1bGFyUmVuZGVyLCByZWN0KTsKQEAgLTI1NzAsNyArMjU3MCw3IEBA
IHZvaWQgQmFja2luZ1N0b3JlUHJpdmF0ZTo6ZGlkUmVuZGVyQ29udGVudChjb25zdCBQbGF0Zm9y
bTo6SW50UmVjdCYgcmVuZGVyZWRSZWN0CiAgICAgfSBlbHNlCiAgICAgICAgIGludmFsaWRhdGVX
aW5kb3coKTsKIAotICAgIG1fd2ViUGFnZS0+Y2xpZW50KCktPm5vdGlmeUNvbnRlbnRSZW5kZXJl
ZChyZW5kZXJlZFJlY3QpOworICAgIG1fd2ViUGFnZS0+Y2xpZW50KCktPm5vdGlmeVBpeGVsQ29u
dGVudFJlbmRlcmVkKHJlbmRlcmVkUmVjdCk7CiB9CiAKIEJhY2tpbmdTdG9yZTo6QmFja2luZ1N0
b3JlKFdlYlBhZ2UqIHdlYlBhZ2UsIEJhY2tpbmdTdG9yZUNsaWVudCogY2xpZW50KQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9JblJlZ2lvblNjcm9sbGVyLmNwcCBi
L1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvSW5SZWdpb25TY3JvbGxlci5jcHAKaW5kZXgg
ZGI2NTZhOTMyMzliNTFmMWJmNzAxMWVjMGM4YjE2ODRiNWY2MGNjMi4uODliZDVlYzRjODkwOTNl
MDAxMzU4NzBlMjMyZWFmZWYxNGM3ZTA2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ibGFj
a2JlcnJ5L0FwaS9JblJlZ2lvblNjcm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2JsYWNr
YmVycnkvQXBpL0luUmVnaW9uU2Nyb2xsZXIuY3BwCkBAIC01NywyMSArNTcsMTkgQEAgSW5SZWdp
b25TY3JvbGxlcjo6fkluUmVnaW9uU2Nyb2xsZXIoKQogICAgIGRlbGV0ZSBkOwogfQogCi1ib29s
IEluUmVnaW9uU2Nyb2xsZXI6OnNldFNjcm9sbFBvc2l0aW9uQ29tcG9zaXRpbmdUaHJlYWQodW5z
aWduZWQgY2Ftb3VmbGFnZWRMYXllciwgY29uc3QgUGxhdGZvcm06OkludFBvaW50JiBzY3JvbGxQ
b3NpdGlvbikKK2Jvb2wgSW5SZWdpb25TY3JvbGxlcjo6c2V0RG9jdW1lbnRTY3JvbGxQb3NpdGlv
bkNvbXBvc2l0aW5nVGhyZWFkKHVuc2lnbmVkIGNhbW91ZmxhZ2VkTGF5ZXIsIGNvbnN0IFBsYXRm
b3JtOjpJbnRQb2ludCYgZG9jdW1lbnRTY3JvbGxQb3NpdGlvbikKIHsKICAgICBBU1NFUlQoUGxh
dGZvcm06OnVzZXJJbnRlcmZhY2VUaHJlYWRNZXNzYWdlQ2xpZW50KCktPmlzQ3VycmVudFRocmVh
ZCgpKTsKIAotICAgIC8vIEZJWE1FOiBOZWdhdGl2ZSB2YWx1ZXMgd29uJ3Qgd29yayB3aXRoIG1h
cHtUbyxGcm9tfVRyYW5zZm9ybSBtZXRob2RzLgotICAgIHJldHVybiBkLT5zZXRTY3JvbGxQb3Np
dGlvbkNvbXBvc2l0aW5nVGhyZWFkKGNhbW91ZmxhZ2VkTGF5ZXIsIGQtPm1fd2ViUGFnZS0+bWFw
RnJvbVRyYW5zZm9ybWVkKHNjcm9sbFBvc2l0aW9uKSk7CisgICAgcmV0dXJuIGQtPnNldFNjcm9s
bFBvc2l0aW9uQ29tcG9zaXRpbmdUaHJlYWQoY2Ftb3VmbGFnZWRMYXllciwgZG9jdW1lbnRTY3Jv
bGxQb3NpdGlvbik7CiB9CiAKLWJvb2wgSW5SZWdpb25TY3JvbGxlcjo6c2V0U2Nyb2xsUG9zaXRp
b25XZWJLaXRUaHJlYWQodW5zaWduZWQgY2Ftb3VmbGFnZWRMYXllciwgY29uc3QgUGxhdGZvcm06
OkludFBvaW50JiBzY3JvbGxQb3NpdGlvbiwKK2Jvb2wgSW5SZWdpb25TY3JvbGxlcjo6c2V0RG9j
dW1lbnRTY3JvbGxQb3NpdGlvbldlYktpdFRocmVhZCh1bnNpZ25lZCBjYW1vdWZsYWdlZExheWVy
LCBjb25zdCBQbGF0Zm9ybTo6SW50UG9pbnQmIGRvY3VtZW50U2Nyb2xsUG9zaXRpb24sCiAgICAg
Ym9vbCBzdXBwb3J0c0FjY2VsZXJhdGVkU2Nyb2xsaW5nLCBQbGF0Zm9ybTo6U2Nyb2xsVmlld0Jh
c2U6OlNjcm9sbFRhcmdldCBzY3JvbGxUYXJnZXQpCiB7CiAgICAgQVNTRVJUKFBsYXRmb3JtOjp3
ZWJLaXRUaHJlYWRNZXNzYWdlQ2xpZW50KCktPmlzQ3VycmVudFRocmVhZCgpKTsKIAotICAgIC8v
IEZJWE1FOiBOZWdhdGl2ZSB2YWx1ZXMgd29uJ3Qgd29yayB3aXRoIG1hcHtUbyxGcm9tfVRyYW5z
Zm9ybSBtZXRob2RzLgotICAgIHJldHVybiBkLT5zZXRTY3JvbGxQb3NpdGlvbldlYktpdFRocmVh
ZChjYW1vdWZsYWdlZExheWVyLCBkLT5tX3dlYlBhZ2UtPm1hcEZyb21UcmFuc2Zvcm1lZChzY3Jv
bGxQb3NpdGlvbiksIHN1cHBvcnRzQWNjZWxlcmF0ZWRTY3JvbGxpbmcsIHNjcm9sbFRhcmdldCk7
CisgICAgcmV0dXJuIGQtPnNldFNjcm9sbFBvc2l0aW9uV2ViS2l0VGhyZWFkKGNhbW91ZmxhZ2Vk
TGF5ZXIsIGRvY3VtZW50U2Nyb2xsUG9zaXRpb24sIHN1cHBvcnRzQWNjZWxlcmF0ZWRTY3JvbGxp
bmcsIHNjcm9sbFRhcmdldCk7CiB9CiAKIEluUmVnaW9uU2Nyb2xsZXJQcml2YXRlOjpJblJlZ2lv
blNjcm9sbGVyUHJpdmF0ZShXZWJQYWdlUHJpdmF0ZSogd2ViUGFnZVByaXZhdGUpCkBAIC0xOTYs
MTIgKzE5NCwxMiBAQCB2b2lkIEluUmVnaW9uU2Nyb2xsZXJQcml2YXRlOjpjYWxjdWxhdGVBY3Rp
dmVBbmRTaHJpbmtDYWNoZWRTY3JvbGxhYmxlQXJlYXMoUmVuZAogICAgIG1fbmVlZHNBY3RpdmVT
Y3JvbGxhYmxlQXJlYUNhbGN1bGF0aW9uID0gZmFsc2U7CiB9CiAKLXZvaWQgSW5SZWdpb25TY3Jv
bGxlclByaXZhdGU6OmNhbGN1bGF0ZUluUmVnaW9uU2Nyb2xsYWJsZUFyZWFzRm9yUG9pbnQoY29u
c3QgV2ViQ29yZTo6SW50UG9pbnQmIHBvaW50KQordm9pZCBJblJlZ2lvblNjcm9sbGVyUHJpdmF0
ZTo6Y2FsY3VsYXRlSW5SZWdpb25TY3JvbGxhYmxlQXJlYXNGb3JQb2ludChjb25zdCBXZWJDb3Jl
OjpJbnRQb2ludCYgZG9jdW1lbnRQb2ludCkKIHsKICAgICBBU1NFUlQobV9hY3RpdmVJblJlZ2lv
blNjcm9sbGFibGVBcmVhcy5lbXB0eSgpKTsKICAgICBtX25lZWRzQWN0aXZlU2Nyb2xsYWJsZUFy
ZWFDYWxjdWxhdGlvbiA9IGZhbHNlOwogCi0gICAgY29uc3QgSGl0VGVzdFJlc3VsdCYgcmVzdWx0
ID0gbV93ZWJQYWdlLT5oaXRUZXN0UmVzdWx0KG1fd2ViUGFnZS0+bWFwRnJvbVZpZXdwb3J0VG9D
b250ZW50cyhwb2ludCkpOworICAgIGNvbnN0IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCA9IG1fd2Vi
UGFnZS0+aGl0VGVzdFJlc3VsdChkb2N1bWVudFBvaW50KTsKICAgICBOb2RlKiBub2RlID0gcmVz
dWx0LmlubmVyTm9uU2hhcmVkTm9kZSgpOwogICAgIGlmICghbm9kZSB8fCAhbm9kZS0+cmVuZGVy
ZXIoKSkKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ibGFja2Jl
cnJ5L0FwaS9JblJlZ2lvblNjcm9sbGVyLmggYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBp
L0luUmVnaW9uU2Nyb2xsZXIuaAppbmRleCA1OTE3YmFhZjZjZTMxMGU0Y2U1YzI2MDUyZDI0ZDU2
MDI2MGE4YTZmLi44MTY4YzNjZmM5ZWY2OTQ2NTI2MTZkNjRlYjc0NTQ4MjI4YTNhMTQwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL0luUmVnaW9uU2Nyb2xsZXIuaAor
KysgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL0luUmVnaW9uU2Nyb2xsZXIuaApAQCAt
MzYsOSArMzYsOSBAQCBwdWJsaWM6CiAgICAgSW5SZWdpb25TY3JvbGxlcihXZWJQYWdlUHJpdmF0
ZSopOwogICAgIH5JblJlZ2lvblNjcm9sbGVyKCk7CiAKLSAgICBib29sIHNldFNjcm9sbFBvc2l0
aW9uQ29tcG9zaXRpbmdUaHJlYWQodW5zaWduZWQgY2Ftb3VmbGFnZWRMYXllciwgY29uc3QgUGxh
dGZvcm06OkludFBvaW50JiAvKnNjcm9sbFBvc2l0aW9uKi8pOwotICAgIGJvb2wgc2V0U2Nyb2xs
UG9zaXRpb25XZWJLaXRUaHJlYWQodW5zaWduZWQgY2Ftb3VmbGFnZWRMYXllciwgY29uc3QgUGxh
dGZvcm06OkludFBvaW50JiAvKnNjcm9sbFBvc2l0aW9uKi8sCi0gICAgICAgIGJvb2wgLyphY2Nl
bGVyYXRlZFNjcm9sbGluZyovLCBQbGF0Zm9ybTo6U2Nyb2xsVmlld0Jhc2U6OlNjcm9sbFRhcmdl
dCk7CisgICAgYm9vbCBzZXREb2N1bWVudFNjcm9sbFBvc2l0aW9uQ29tcG9zaXRpbmdUaHJlYWQo
dW5zaWduZWQgY2Ftb3VmbGFnZWRMYXllciwgY29uc3QgUGxhdGZvcm06OkludFBvaW50JiBkb2N1
bWVudFNjcm9sbFBvc2l0aW9uKTsKKyAgICBib29sIHNldERvY3VtZW50U2Nyb2xsUG9zaXRpb25X
ZWJLaXRUaHJlYWQodW5zaWduZWQgY2Ftb3VmbGFnZWRMYXllciwgY29uc3QgUGxhdGZvcm06Oklu
dFBvaW50JiBkb2N1bWVudFNjcm9sbFBvc2l0aW9uLAorICAgICAgICBib29sIGFjY2VsZXJhdGVk
U2Nyb2xsaW5nLCBQbGF0Zm9ybTo6U2Nyb2xsVmlld0Jhc2U6OlNjcm9sbFRhcmdldCk7CiAKIHBy
aXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIFdlYlBhZ2VQcml2YXRlOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9XZWJQYWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQvYmxh
Y2tiZXJyeS9BcGkvV2ViUGFnZS5jcHAKaW5kZXggNjliN2I1NzA1YTVlNThiMWM3MTQwNjFjNmQx
MmNlNmMyYzJmOTk3Ny4uYTJiMzU0YTVjY2JkYTQ5MDAxMDI2ODg2YWQ0NDUzZWYzZDMxOGUwOCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9XZWJQYWdlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYlBhZ2UuY3BwCkBAIC0xOTEsNyArMTkx
LDYgQEAKICNpbmNsdWRlICJQbGF0Zm9ybVNjcmVlbi5oIgogI2VuZGlmCiAKLSNkZWZpbmUgREVC
VUdfQkxPQ0tfWk9PTSAwCiAjZGVmaW5lIERFQlVHX1RPVUNIX0VWRU5UUyAwCiAjZGVmaW5lIERF
QlVHX1dFQlBBR0VfTE9BRCAwCiAjZGVmaW5lIERFQlVHX0FDX0NPTU1JVCAwCkBAIC0zNzksOCAr
Mzc4LDYgQEAgV2ViUGFnZVByaXZhdGU6OldlYlBhZ2VQcml2YXRlKFdlYlBhZ2UqIHdlYlBhZ2Us
IFdlYlBhZ2VDbGllbnQqIGNsaWVudCwgY29uc3QgSW4KICAgICAsIG1fbmVzdGVkTGF5b3V0Rmlu
aXNoZWRDb3VudCgwKQogICAgICwgbV9hY3R1YWxWaXNpYmxlV2lkdGgocmVjdC53aWR0aCgpKQog
ICAgICwgbV9hY3R1YWxWaXNpYmxlSGVpZ2h0KHJlY3QuaGVpZ2h0KCkpCi0gICAgLCBtX3ZpcnR1
YWxWaWV3cG9ydFdpZHRoKDApCi0gICAgLCBtX3ZpcnR1YWxWaWV3cG9ydEhlaWdodCgwKQogICAg
ICwgbV9kZWZhdWx0TGF5b3V0U2l6ZShtaW5pbXVtTGF5b3V0U2l6ZSkKICAgICAsIG1fZGlkUmVz
dG9yZUZyb21QYWdlQ2FjaGUoZmFsc2UpCiAgICAgLCBtX3ZpZXdNb2RlKFdlYlBhZ2VQcml2YXRl
OjpEZXNrdG9wKSAvLyBEZWZhdWx0IHRvIERlc2t0b3AgbW9kZSBmb3IgUEIuCkBAIC0xMDc4LDE0
ICsxMDc1LDExIEBAIHZvaWQgV2ViUGFnZVByaXZhdGU6OnNldExvYWRTdGF0ZShMb2FkU3RhdGUg
c3RhdGUpCiAgICAgICAgICAgICBtX3VzZXJQZXJmb3JtZWRNYW51YWxab29tID0gZmFsc2U7CiAg
ICAgICAgICAgICBtX3VzZXJQZXJmb3JtZWRNYW51YWxTY3JvbGwgPSBmYWxzZTsKICAgICAgICAg
ICAgIG1fc2hvdWxkVXNlRml4ZWREZXNrdG9wTW9kZSA9IGZhbHNlOwotICAgICAgICAgICAgaWYg
KG1fcmVzZXRWaXJ0dWFsVmlld3BvcnRPbkNvbW1pdHRlZCkgeyAvLyBGb3IgRFJULgotICAgICAg
ICAgICAgICAgIG1fdmlydHVhbFZpZXdwb3J0V2lkdGggPSAwOwotICAgICAgICAgICAgICAgIG1f
dmlydHVhbFZpZXdwb3J0SGVpZ2h0ID0gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlm
IChtX3dlYlNldHRpbmdzLT52aWV3cG9ydFdpZHRoKCkgPiAwKSB7Ci0gICAgICAgICAgICAgICAg
bV92aXJ0dWFsVmlld3BvcnRXaWR0aCA9IG1fd2ViU2V0dGluZ3MtPnZpZXdwb3J0V2lkdGgoKTsK
LSAgICAgICAgICAgICAgICBtX3ZpcnR1YWxWaWV3cG9ydEhlaWdodCA9IG1fZGVmYXVsdExheW91
dFNpemUuaGVpZ2h0KCk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobV9yZXNldFZp
cnR1YWxWaWV3cG9ydE9uQ29tbWl0dGVkKSAvLyBGb3IgRFJULgorICAgICAgICAgICAgICAgIG1f
dmlydHVhbFZpZXdwb3J0U2l6ZSA9IEludFNpemUoKTsKKyAgICAgICAgICAgIGlmIChtX3dlYlNl
dHRpbmdzLT52aWV3cG9ydFdpZHRoKCkgPiAwKQorICAgICAgICAgICAgICAgIG1fdmlydHVhbFZp
ZXdwb3J0U2l6ZSA9IEludFNpemUobV93ZWJTZXR0aW5ncy0+dmlld3BvcnRXaWR0aCgpLCBtX2Rl
ZmF1bHRMYXlvdXRTaXplLmhlaWdodCgpKTsKKwogICAgICAgICAgICAgLy8gQ2hlY2sgaWYgd2Ug
aGF2ZSBhbHJlYWR5IHByb2Nlc3MgdGhlIG1ldGEgdmlld3BvcnQgdGFnLCB0aGlzIG9ubHkgaGFw
cGVucyBvbiBoaXN0b3J5IG5hdmlnYXRpb24uCiAgICAgICAgICAgICAvLyBGb3IgYmFjay9mb3J3
YXJkIGhpc3RvcnkgbmF2aWdhdGlvbiwgd2Ugc2hvdWxkIG9ubHkga2VlcCB0aGVzZSBwcmV2aW91
cyB2YWx1ZXMgaWYgdGhlIGRvY3VtZW50CiAgICAgICAgICAgICAvLyBoYXMgdGhlIG1ldGEgdmll
d3BvcnQgdGFnIHdoZW4gdGhlIHN0YXRlIGlzIENvbW1pdHRlZCBpbiBzZXRMb2FkU3RhdGUuCkBA
IC0xMTAzLDggKzEwOTcsOCBAQCB2b2lkIFdlYlBhZ2VQcml2YXRlOjpzZXRMb2FkU3RhdGUoTG9h
ZFN0YXRlIHN0YXRlKQogICAgICAgICAgICAgICAgIC8vIGNvbnRlbnQgaXQgd2lsbCBvdmVyd3Jp
dGUgdGhlIGZhbGxiYWNrIGFyZ3VtZW50cyBzb29uLgogICAgICAgICAgICAgICAgIGRpc3BhdGNo
Vmlld3BvcnRQcm9wZXJ0aWVzRGlkQ2hhbmdlKG1fdXNlclZpZXdwb3J0QXJndW1lbnRzKTsKICAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgSW50U2l6ZSB2aXJ0dWFsVmlld3Bv
cnQgPSByZWNvbXB1dGVWaXJ0dWFsVmlld3BvcnRGcm9tVmlld3BvcnRBcmd1bWVudHMoKTsKLSAg
ICAgICAgICAgICAgICBtX3dlYlBhZ2UtPnNldFZpcnR1YWxWaWV3cG9ydFNpemUodmlydHVhbFZp
ZXdwb3J0LndpZHRoKCksIHZpcnR1YWxWaWV3cG9ydC5oZWlnaHQoKSk7CisgICAgICAgICAgICAg
ICAgUGxhdGZvcm06OkludFNpemUgdmlydHVhbFZpZXdwb3J0ID0gcmVjb21wdXRlVmlydHVhbFZp
ZXdwb3J0RnJvbVZpZXdwb3J0QXJndW1lbnRzKCk7CisgICAgICAgICAgICAgICAgbV93ZWJQYWdl
LT5zZXRWaXJ0dWFsVmlld3BvcnRTaXplKHZpcnR1YWxWaWV3cG9ydCk7CiAgICAgICAgICAgICB9
CiAKICNpZiBFTkFCTEUoRVZFTlRfTU9ERV9NRVRBVEFHUykKQEAgLTExNDQsNyArMTEzOCw3IEBA
IHZvaWQgV2ViUGFnZVByaXZhdGU6OnNldExvYWRTdGF0ZShMb2FkU3RhdGUgc3RhdGUpCiAgICAg
Y2FzZSBGaW5pc2hlZDoKICAgICBjYXNlIEZhaWxlZDoKICAgICAgICAgLy8gTm90aWZ5IGNsaWVu
dCBvZiB0aGUgaW5pdGlhbCB6b29tIGNoYW5nZS4KLSAgICAgICAgbV9jbGllbnQtPnpvb21DaGFu
Z2VkKG1fd2ViUGFnZS0+aXNNaW5ab29tZWQoKSwgbV93ZWJQYWdlLT5pc01heFpvb21lZCgpLCAh
c2hvdWxkWm9vbU9uRXNjYXBlKCksIGN1cnJlbnRTY2FsZSgpKTsKKyAgICAgICAgbV9jbGllbnQt
PnNjYWxlQ2hhbmdlZCgpOwogICAgICAgICBtX2JhY2tpbmdTdG9yZS0+ZC0+dXBkYXRlVGlsZXMo
dHJ1ZSAvKiB1cGRhdGVWaXNpYmxlICovLCBmYWxzZSAvKiBpbW1lZGlhdGUgKi8pOwogICAgICAg
ICBicmVhazsKICAgICBkZWZhdWx0OgpAQCAtMTE3Myw3ICsxMTY3LDcgQEAgYm9vbCBXZWJQYWdl
UHJpdmF0ZTo6c2hvdWxkWm9vbUFib3V0UG9pbnQoZG91YmxlIHNjYWxlLCBjb25zdCBGbG9hdFBv
aW50JiwgYm9vbAogICAgICpjbGFtcGVkU2NhbGUgPSBzY2FsZTsKIAogICAgIGlmIChjdXJyZW50
U2NhbGUoKSA9PSBzY2FsZSkgewotICAgICAgICBtX2NsaWVudC0+em9vbUNoYW5nZWQobV93ZWJQ
YWdlLT5pc01pblpvb21lZCgpLCBtX3dlYlBhZ2UtPmlzTWF4Wm9vbWVkKCksICFzaG91bGRab29t
T25Fc2NhcGUoKSwgY3VycmVudFNjYWxlKCkpOworICAgICAgICBtX2NsaWVudC0+c2NhbGVDaGFu
Z2VkKCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKQEAgLTEyNjQsNyArMTI1OCw3
IEBAIGJvb2wgV2ViUGFnZVByaXZhdGU6Onpvb21BYm91dFBvaW50KGRvdWJsZSB1bmNsYW1wZWRT
Y2FsZSwgY29uc3QgRmxvYXRQb2ludCYgYW5jCiAgICAgICAgIG1fYmFja2luZ1N0b3JlLT5kLT5j
bGVhclZpc2libGVab29tKCk7CiAgICAgfQogCi0gICAgbV9jbGllbnQtPnpvb21DaGFuZ2VkKG1f
d2ViUGFnZS0+aXNNaW5ab29tZWQoKSwgbV93ZWJQYWdlLT5pc01heFpvb21lZCgpLCAhc2hvdWxk
Wm9vbU9uRXNjYXBlKCksIGN1cnJlbnRTY2FsZSgpKTsKKyAgICBtX2NsaWVudC0+c2NhbGVDaGFu
Z2VkKCk7CiAKICAgICBpZiAobV9wZW5kaW5nT3JpZW50YXRpb24gIT0gLTEpCiAgICAgICAgIG1f
Y2xpZW50LT51cGRhdGVJbnRlcmFjdGlvblZpZXdzKCk7CkBAIC0xMzM0LDkgKzEzMjgsMTAgQEAg
dm9pZCBXZWJQYWdlUHJpdmF0ZTo6c2V0U2Nyb2xsUG9zaXRpb24oY29uc3QgSW50UG9pbnQmIHBv
cykKIH0KIAogLy8gU2V0dGluZyB0aGUgc2Nyb2xsIHBvc2l0aW9uIGlzIGluIHRyYW5zZm9ybWVk
IGNvb3JkaW5hdGVzLgotdm9pZCBXZWJQYWdlOjpzZXRTY3JvbGxQb3NpdGlvbihjb25zdCBQbGF0
Zm9ybTo6SW50UG9pbnQmIHBvaW50KQordm9pZCBXZWJQYWdlOjpzZXREb2N1bWVudFNjcm9sbFBv
c2l0aW9uKGNvbnN0IFBsYXRmb3JtOjpJbnRQb2ludCYgZG9jdW1lbnRTY3JvbGxQb3NpdGlvbikK
IHsKLSAgICBpZiAoZC0+dHJhbnNmb3JtZWRQb2ludEVxdWFsc1VudHJhbnNmb3JtZWRQb2ludChw
b2ludCwgZC0+c2Nyb2xsUG9zaXRpb24oKSkpCisgICAgV2ViQ29yZTo6SW50UG9pbnQgc2Nyb2xs
UG9zaXRpb24gPSBkb2N1bWVudFNjcm9sbFBvc2l0aW9uOworICAgIGlmIChzY3JvbGxQb3NpdGlv
biA9PSBkLT5zY3JvbGxQb3NpdGlvbigpKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBJZiB0
aGUgdXNlciByZWNlbnRseSBwZXJmb3JtZWQgYW4gZXZlbnQsIHRoaXMgbmV3IHNjcm9sbCBwb3Np
dGlvbgpAQCAtMTM1Miw3ICsxMzQ3LDcgQEAgdm9pZCBXZWJQYWdlOjpzZXRTY3JvbGxQb3NpdGlv
bihjb25zdCBQbGF0Zm9ybTo6SW50UG9pbnQmIHBvaW50KQogICAgIC8vIFdlYktpdCB0aHJlYWQg
dG8gYXZvaWQgc2Nyb2xsIHBvc2l0aW9uIGNsYW1waW5nIGR1cmluZyBzY3JvbGxpbmcsIGFuZCBy
ZXN0b3JlIGl0IHRvIHdoYXQgaXQgd2FzIGFmdGVyIHRoYXQuCiAgICAgYm9vbCBjb25zdHJhaW5z
U2Nyb2xsaW5nVG9Db250ZW50RWRnZSA9IGQtPm1fbWFpbkZyYW1lLT52aWV3KCktPmNvbnN0cmFp
bnNTY3JvbGxpbmdUb0NvbnRlbnRFZGdlKCk7CiAgICAgZC0+bV9tYWluRnJhbWUtPnZpZXcoKS0+
c2V0Q29uc3RyYWluc1Njcm9sbGluZ1RvQ29udGVudEVkZ2UoZmFsc2UpOwotICAgIGQtPnNldFNj
cm9sbFBvc2l0aW9uKGQtPm1hcEZyb21UcmFuc2Zvcm1lZChwb2ludCkpOworICAgIGQtPnNldFNj
cm9sbFBvc2l0aW9uKHNjcm9sbFBvc2l0aW9uKTsKICAgICBkLT5tX21haW5GcmFtZS0+dmlldygp
LT5zZXRDb25zdHJhaW5zU2Nyb2xsaW5nVG9Db250ZW50RWRnZShjb25zdHJhaW5zU2Nyb2xsaW5n
VG9Db250ZW50RWRnZSk7CiAKICAgICBkLT5tX2JhY2tpbmdTdG9yZUNsaWVudC0+c2V0SXNDbGll
bnRHZW5lcmF0ZWRTY3JvbGwoZmFsc2UpOwpAQCAtMTQxNCwxOSArMTQwOSw2IEBAIHZvaWQgV2Vi
UGFnZVByaXZhdGU6OmRlZmVycmVkVGFza3NUaW1lckZpcmVkKFdlYkNvcmU6OlRpbWVyPFdlYlBh
Z2VQcml2YXRlPiopCiAgICAgdGFzay0+cGVyZm9ybSh0aGlzKTsKIH0KIAotdm9pZCBXZWJQYWdl
UHJpdmF0ZTo6c2Nyb2xsQnkoaW50IGRlbHRhWCwgaW50IGRlbHRhWSkKLXsKLSAgICBJbnRTaXpl
IGRlbHRhKGRlbHRhWCwgZGVsdGFZKTsKLSAgICBzZXRTY3JvbGxQb3NpdGlvbihzY3JvbGxQb3Np
dGlvbigpICsgZGVsdGEpOwotfQotCi12b2lkIFdlYlBhZ2U6OnNjcm9sbEJ5KGNvbnN0IFBsYXRm
b3JtOjpJbnRTaXplJiBkZWx0YSkKLXsKLSAgICBkLT5tX2JhY2tpbmdTdG9yZUNsaWVudC0+c2V0
SXNDbGllbnRHZW5lcmF0ZWRTY3JvbGwodHJ1ZSk7Ci0gICAgZC0+c2Nyb2xsQnkoZGVsdGEud2lk
dGgoKSwgZGVsdGEuaGVpZ2h0KCkpOwotICAgIGQtPm1fYmFja2luZ1N0b3JlQ2xpZW50LT5zZXRJ
c0NsaWVudEdlbmVyYXRlZFNjcm9sbChmYWxzZSk7Ci19Ci0KIHZvaWQgV2ViUGFnZVByaXZhdGU6
Om5vdGlmeUluUmVnaW9uU2Nyb2xsU3RvcHBlZCgpCiB7CiAgICAgaWYgKG1faW5SZWdpb25TY3Jv
bGxlci0+ZC0+aXNBY3RpdmUoKSkgewpAQCAtMTQ2MCw3ICsxNDQyLDcgQEAgSW50U2l6ZSBXZWJQ
YWdlUHJpdmF0ZTo6YWN0dWFsVmlzaWJsZVNpemUoKSBjb25zdAogCiBib29sIFdlYlBhZ2VQcml2
YXRlOjpoYXNWaXJ0dWFsVmlld3BvcnQoKSBjb25zdAogewotICAgIHJldHVybiBtX3ZpcnR1YWxW
aWV3cG9ydFdpZHRoICYmIG1fdmlydHVhbFZpZXdwb3J0SGVpZ2h0OworICAgIHJldHVybiAhbV92
aXJ0dWFsVmlld3BvcnRTaXplLmlzRW1wdHkoKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJpdmF0ZTo6
dXBkYXRlVmlld3BvcnRTaXplKGJvb2wgc2V0Rml4ZWRSZXBvcnRlZFNpemUsIGJvb2wgc2VuZFJl
c2l6ZUV2ZW50KQpAQCAtMTY4NiwxMSArMTY2OCw2IEBAIGRvdWJsZSBXZWJQYWdlUHJpdmF0ZTo6
em9vbVRvRml0U2NhbGUoKSBjb25zdAogICAgIHJldHVybiBzdGQ6Om1heCh6b29tVG9GaXRTY2Fs
ZSwgbWluaW11bVpvb21Ub0ZpdFNjYWxlKTsKIH0KIAotZG91YmxlIFdlYlBhZ2U6Onpvb21Ub0Zp
dFNjYWxlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZC0+em9vbVRvRml0U2NhbGUoKTsKLX0KLQog
ZG91YmxlIFdlYlBhZ2VQcml2YXRlOjppbml0aWFsU2NhbGUoKSBjb25zdAogewogICAgIGlmICht
X2luaXRpYWxTY2FsZSA+IDAuMCkKQEAgLTE3NzgsMTIgKzE3NTUsNiBAQCBJbnRQb2ludCBXZWJQ
YWdlUHJpdmF0ZTo6dHJhbnNmb3JtZWRTY3JvbGxQb3NpdGlvbigpIGNvbnN0CiAgICAgcmV0dXJu
IG1fYmFja2luZ1N0b3JlQ2xpZW50LT50cmFuc2Zvcm1lZFNjcm9sbFBvc2l0aW9uKCk7CiB9CiAK
LS8vIFJldHVybmVkIHNjcm9sbCBwb3NpdGlvbiBpcyBpbiB0cmFuc2Zvcm1lZCBjb29yZGluYXRl
cy4KLVBsYXRmb3JtOjpJbnRQb2ludCBXZWJQYWdlOjpzY3JvbGxQb3NpdGlvbigpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIGQtPnRyYW5zZm9ybWVkU2Nyb2xsUG9zaXRpb24oKTsKLX0KLQogSW50UG9p
bnQgV2ViUGFnZVByaXZhdGU6OnRyYW5zZm9ybWVkTWF4aW11bVNjcm9sbFBvc2l0aW9uKCkgY29u
c3QKIHsKICAgICByZXR1cm4gbV9iYWNraW5nU3RvcmVDbGllbnQtPnRyYW5zZm9ybWVkTWF4aW11
bVNjcm9sbFBvc2l0aW9uKCk7CkBAIC0xOTY3LDE0ICsxOTM4LDE0IEBAIHZvaWQgV2ViUGFnZVBy
aXZhdGU6Om5vdGlmeVRyYW5zZm9ybWVkQ29udGVudHNTaXplQ2hhbmdlZCgpCiAKICAgICBjb25z
dCBJbnRTaXplIHNpemUgPSB0cmFuc2Zvcm1lZENvbnRlbnRzU2l6ZSgpOwogICAgIG1fYmFja2lu
Z1N0b3JlLT5kLT5jb250ZW50c1NpemVDaGFuZ2VkKHNpemUpOwotICAgIG1fY2xpZW50LT5jb250
ZW50c1NpemVDaGFuZ2VkKHNpemUpOworICAgIG1fY2xpZW50LT5jb250ZW50c1NpemVDaGFuZ2Vk
KCk7CiB9CiAKIHZvaWQgV2ViUGFnZVByaXZhdGU6Om5vdGlmeVRyYW5zZm9ybWVkU2Nyb2xsQ2hh
bmdlZCgpCiB7CiAgICAgY29uc3QgSW50UG9pbnQgcG9zID0gdHJhbnNmb3JtZWRTY3JvbGxQb3Np
dGlvbigpOwogICAgIG1fYmFja2luZ1N0b3JlLT5kLT5zY3JvbGxDaGFuZ2VkKHBvcyk7Ci0gICAg
bV9jbGllbnQtPnNjcm9sbENoYW5nZWQocG9zKTsKKyAgICBtX2NsaWVudC0+c2Nyb2xsQ2hhbmdl
ZCgpOwogfQogCiBib29sIFdlYlBhZ2VQcml2YXRlOjpzZXRWaWV3TW9kZShWaWV3TW9kZSBtb2Rl
KQpAQCAtMjAzMSw3ICsyMDAyLDcgQEAgdm9pZCBXZWJQYWdlUHJpdmF0ZTo6c2V0Q3Vyc29yKFBs
YXRmb3JtQ3Vyc29yIGhhbmRsZSkKIHsKICAgICBpZiAobV9jdXJyZW50Q3Vyc29yLnR5cGUoKSAh
PSBoYW5kbGUudHlwZSgpKSB7CiAgICAgICAgIG1fY3VycmVudEN1cnNvciA9IGhhbmRsZTsKLSAg
ICAgICAgbV9jbGllbnQtPmN1cnNvckNoYW5nZWQoaGFuZGxlLnR5cGUoKSwgaGFuZGxlLnVybCgp
LmNfc3RyKCksIGhhbmRsZS5ob3RzcG90KCkueCgpLCBoYW5kbGUuaG90c3BvdCgpLnkoKSk7Cisg
ICAgICAgIG1fY2xpZW50LT5jdXJzb3JDaGFuZ2VkKGhhbmRsZS50eXBlKCksIGhhbmRsZS51cmwo
KS5jX3N0cigpLCBoYW5kbGUuaG90c3BvdCgpKTsKICAgICB9CiB9CiAKQEAgLTIyMjcsMTIgKzIx
OTgsMTIgQEAgdm9pZCBXZWJQYWdlUHJpdmF0ZTo6c3luY1Byb3h5Q3JlZGVudGlhbChjb25zdCBX
ZWJDb3JlOjpDcmVkZW50aWFsJiBjcmVkZW50aWFsKQogICAgIG1fY2xpZW50LT5zeW5jUHJveHlD
cmVkZW50aWFsKGNyZWRlbnRpYWwudXNlcigpLCBjcmVkZW50aWFsLnBhc3N3b3JkKCkpOwogfQog
Ci12b2lkIFdlYlBhZ2VQcml2YXRlOjpub3RpZnlQb3B1cEF1dG9maWxsRGlhbG9nKGNvbnN0IFZl
Y3RvcjxTdHJpbmc+JiBjYW5kaWRhdGVzLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBzY3JlZW5S
ZWN0KQordm9pZCBXZWJQYWdlUHJpdmF0ZTo6bm90aWZ5UG9wdXBBdXRvZmlsbERpYWxvZyhjb25z
dCBWZWN0b3I8U3RyaW5nPiYgY2FuZGlkYXRlcykKIHsKICAgICB2ZWN0b3I8QmxhY2tCZXJyeTo6
UGxhdGZvcm06OlN0cmluZz4gdGV4dEl0ZW1zOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
Y2FuZGlkYXRlcy5zaXplKCk7IGkrKykKICAgICAgICAgdGV4dEl0ZW1zLnB1c2hfYmFjayhjYW5k
aWRhdGVzW2ldKTsKLSAgICBtX2NsaWVudC0+bm90aWZ5UG9wdXBBdXRvZmlsbERpYWxvZyh0ZXh0
SXRlbXMsIHNjcmVlblJlY3QpOworICAgIG1fY2xpZW50LT5ub3RpZnlQb3B1cEF1dG9maWxsRGlh
bG9nKHRleHRJdGVtcyk7CiB9CiAKIHZvaWQgV2ViUGFnZVByaXZhdGU6Om5vdGlmeURpc21pc3NB
dXRvZmlsbERpYWxvZygpCkBAIC0yNDA1LDcgKzIzNzYsNyBAQCB2b2lkIFdlYlBhZ2VQcml2YXRl
Ojp1cGRhdGVDdXJzb3IoKQogSW50U2l6ZSBXZWJQYWdlUHJpdmF0ZTo6Zml4ZWRMYXlvdXRTaXpl
KGJvb2wgc25hcFRvSW5jcmVtZW50KSBjb25zdAogewogICAgIGlmIChoYXNWaXJ0dWFsVmlld3Bv
cnQoKSkKLSAgICAgICAgcmV0dXJuIEludFNpemUobV92aXJ0dWFsVmlld3BvcnRXaWR0aCwgbV92
aXJ0dWFsVmlld3BvcnRIZWlnaHQpOworICAgICAgICByZXR1cm4gbV92aXJ0dWFsVmlld3BvcnRT
aXplOwogCiAgICAgY29uc3QgaW50IGRlZmF1bHRMYXlvdXRXaWR0aCA9IG1fZGVmYXVsdExheW91
dFNpemUud2lkdGgoKTsKICAgICBjb25zdCBpbnQgZGVmYXVsdExheW91dEhlaWdodCA9IG1fZGVm
YXVsdExheW91dFNpemUuaGVpZ2h0KCk7CkBAIC0yNjc2LDExICsyNjQ3LDEwIEBAIHN0YXRpYyBp
bmxpbmUgaW50IGRpc3RhbmNlQmV0d2VlblBvaW50cyhJbnRQb2ludCBwMSwgSW50UG9pbnQgcDIp
CiAgICAgcmV0dXJuIHNxcnQoKGR4ICogZHgpICsgKGR5ICogZHkpKTsKIH0KIAotTm9kZSogV2Vi
UGFnZVByaXZhdGU6OmJlc3ROb2RlRm9yWm9vbVVuZGVyUG9pbnQoY29uc3QgSW50UG9pbnQmIHBv
aW50KQorTm9kZSogV2ViUGFnZVByaXZhdGU6OmJlc3ROb2RlRm9yWm9vbVVuZGVyUG9pbnQoY29u
c3QgSW50UG9pbnQmIGRvY3VtZW50UG9pbnQpCiB7Ci0gICAgSW50UG9pbnQgcHQgPSBtYXBGcm9t
VHJhbnNmb3JtZWQocG9pbnQpOwotICAgIEludFJlY3QgY2xpY2tSZWN0KHB0LngoKSAtIGJsb2Nr
Q2xpY2tSYWRpdXMsIHB0LnkoKSAtIGJsb2NrQ2xpY2tSYWRpdXMsIDIgKiBibG9ja0NsaWNrUmFk
aXVzLCAyICogYmxvY2tDbGlja1JhZGl1cyk7Ci0gICAgTm9kZSogb3JpZ2luYWxOb2RlID0gbm9k
ZUZvclpvb21VbmRlclBvaW50KHBvaW50KTsKKyAgICBJbnRSZWN0IGNsaWNrUmVjdChkb2N1bWVu
dFBvaW50LngoKSAtIGJsb2NrQ2xpY2tSYWRpdXMsIGRvY3VtZW50UG9pbnQueSgpIC0gYmxvY2tD
bGlja1JhZGl1cywgMiAqIGJsb2NrQ2xpY2tSYWRpdXMsIDIgKiBibG9ja0NsaWNrUmFkaXVzKTsK
KyAgICBOb2RlKiBvcmlnaW5hbE5vZGUgPSBub2RlRm9yWm9vbVVuZGVyUG9pbnQoZG9jdW1lbnRQ
b2ludCk7CiAgICAgaWYgKCFvcmlnaW5hbE5vZGUpCiAgICAgICAgIHJldHVybiAwOwogICAgIE5v
ZGUqIG5vZGUgPSBiZXN0Q2hpbGROb2RlRm9yQ2xpY2tSZWN0KG9yaWdpbmFsTm9kZSwgY2xpY2tS
ZWN0KTsKQEAgLTI5MzksMjggKzI5MDksNiBAQCBJbnRSZWN0IFdlYlBhZ2VQcml2YXRlOjpibG9j
a1pvb21SZWN0Rm9yTm9kZShOb2RlKiBub2RlKQogICAgIGJsb2NrUmVjdCA9IG1hcFRvVHJhbnNm
b3JtZWQoYmxvY2tSZWN0KTsKICAgICBjbGlwVG9UcmFuc2Zvcm1lZENvbnRlbnRzUmVjdChibG9j
a1JlY3QpOwogCi0jaWYgREVCVUdfQkxPQ0tfWk9PTQotICAgIGlmICghbV9iYWNraW5nU3RvcmUt
PmQtPmlzU3VzcGVuZGVkKCkpIHsKLSAgICAgICAgLy8gUmUtcGFpbnQgdGhlIGJhY2tpbmdzdG9y
ZSB0byBzY3JlZW4gdG8gZXJhc2Ugb3RoZXIgYW5ub3RhdGlvbnMuCi0gICAgICAgIGlmIChtX2Jh
Y2tpbmdTdG9yZS0+ZC0+c2hvdWxkRGlyZWN0UmVuZGVyaW5nVG9XaW5kb3coKSkKLSAgICAgICAg
ICAgIG1fYmFja2luZ1N0b3JlLT5kLT5yZW5kZXJWaXNpYmxlQ29udGVudHMoKTsKLSAgICAgICAg
ZWxzZQotICAgICAgICAgICAgbV9iYWNraW5nU3RvcmUtPmQtPmJsaXRWaXNpYmxlQ29udGVudHMo
KTsKLQotICAgICAgICAvLyBSZW5kZXIgYSBibGFjayBzcXVhcmUgb3ZlciB0aGUgY2FsY3VsYXRl
ZCBibG9jayBhbmQgYSBncmF5IHNxdWFyZSBvdmVyIHRoZSBvcmlnaW5hbCBibG9jayBmb3Igdmlz
dWFsIGluc3BlY3Rpb24uCi0gICAgICAgIG9yaWdpbmFsUmVjdCA9IG1hcFRvVHJhbnNmb3JtZWQo
b3JpZ2luYWxSZWN0KTsKLSAgICAgICAgY2xpcFRvVHJhbnNmb3JtZWRDb250ZW50c1JlY3Qob3Jp
Z2luYWxSZWN0KTsKLSAgICAgICAgSW50UmVjdCByZW5kZXJSZWN0ID0gbWFwRnJvbVRyYW5zZm9y
bWVkQ29udGVudHNUb1RyYW5zZm9ybWVkVmlld3BvcnQoYmxvY2tSZWN0KTsKLSAgICAgICAgSW50
UmVjdCBvcmlnaW5hbFJlbmRlclJlY3QgPSBtYXBGcm9tVHJhbnNmb3JtZWRDb250ZW50c1RvVHJh
bnNmb3JtZWRWaWV3cG9ydChvcmlnaW5hbFJlY3QpOwotICAgICAgICBJbnRTaXplIHZpZXdwb3J0
U2l6ZSA9IHRyYW5zZm9ybWVkVmlld3BvcnRTaXplKCk7Ci0gICAgICAgIHJlbmRlclJlY3QuaW50
ZXJzZWN0KEludFJlY3QoMCwgMCwgdmlld3BvcnRTaXplLndpZHRoKCksIHZpZXdwb3J0U2l6ZS5o
ZWlnaHQoKSkpOwotICAgICAgICBvcmlnaW5hbFJlbmRlclJlY3QuaW50ZXJzZWN0KEludFJlY3Qo
MCwgMCwgdmlld3BvcnRTaXplLndpZHRoKCksIHZpZXdwb3J0U2l6ZS5oZWlnaHQoKSkpOwotICAg
ICAgICBtX2JhY2tpbmdTdG9yZS0+ZC0+Y2xlYXJXaW5kb3cocmVuZGVyUmVjdCwgMCwgMCwgMCk7
Ci0gICAgICAgIG1fYmFja2luZ1N0b3JlLT5kLT5jbGVhcldpbmRvdyhvcmlnaW5hbFJlbmRlclJl
Y3QsIDEyMCwgMTIwLCAxMjApOwotICAgICAgICBtX2JhY2tpbmdTdG9yZS0+ZC0+aW52YWxpZGF0
ZVdpbmRvdyhyZW5kZXJSZWN0KTsKLSAgICB9Ci0jZW5kaWYKLQogICAgIHJldHVybiBibG9ja1Jl
Y3Q7CiB9CiAKQEAgLTI5NzEsNyArMjkxOSw3IEBAIHZvaWQgV2ViUGFnZVByaXZhdGU6Onpvb21C
bG9jaygpCiAgICAgaWYgKCFtX21haW5GcmFtZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgSW50
UG9pbnQgYW5jaG9yKHJvdW5kVW50cmFuc2Zvcm1lZFBvaW50KG1hcEZyb21UcmFuc2Zvcm1lZEZs
b2F0UG9pbnQobV9maW5hbEJsb2NrUG9pbnQpKSk7CisgICAgSW50UG9pbnQgYW5jaG9yKHJvdW5k
VW50cmFuc2Zvcm1lZFBvaW50KG1fZmluYWxCbG9ja1BvaW50KSk7CiAgICAgYm9vbCB3aWxsVXNl
VGV4dFJlZmxvdyA9IGZhbHNlOwogCiAjaWYgRU5BQkxFKFZJRVdQT1JUX1JFRkxPVykKQEAgLTMw
NDAsNyArMjk4OCw3IEBAIHZvaWQgV2ViUGFnZVByaXZhdGU6Onpvb21CbG9jaygpCiAgICAgfQog
CiAgICAgbm90aWZ5VHJhbnNmb3JtQ2hhbmdlZCgpOwotICAgIG1fY2xpZW50LT56b29tQ2hhbmdl
ZChtX3dlYlBhZ2UtPmlzTWluWm9vbWVkKCksIG1fd2ViUGFnZS0+aXNNYXhab29tZWQoKSwgIXNo
b3VsZFpvb21PbkVzY2FwZSgpLCBjdXJyZW50U2NhbGUoKSk7CisgICAgbV9jbGllbnQtPnNjYWxl
Q2hhbmdlZCgpOwogICAgIG1fYmFja2luZ1N0b3JlLT5kLT5yZXN1bWVTY3JlZW5BbmRCYWNraW5n
U3RvcmVVcGRhdGVzKEJhY2tpbmdTdG9yZTo6UmVuZGVyQW5kQmxpdCk7CiB9CiAKQEAgLTM0MDks
MTAgKzMzNTcsOSBAQCB2b2lkIFdlYlBhZ2U6OnNldENvbG9ySW5wdXQoY29uc3QgQmxhY2tCZXJy
eTo6UGxhdGZvcm06OlN0cmluZyYgdmFsdWUpCiAgICAgZC0+bV9pbnB1dEhhbmRsZXItPnNldElu
cHV0VmFsdWUodmFsdWUpOwogfQogCi12b2lkIFdlYlBhZ2U6OnNldFZpcnR1YWxWaWV3cG9ydFNp
emUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQordm9pZCBXZWJQYWdlOjpzZXRWaXJ0dWFsVmlld3Bv
cnRTaXplKGNvbnN0IFBsYXRmb3JtOjpJbnRTaXplJiBzaXplKQogewotICAgIGQtPm1fdmlydHVh
bFZpZXdwb3J0V2lkdGggPSB3aWR0aDsKLSAgICBkLT5tX3ZpcnR1YWxWaWV3cG9ydEhlaWdodCA9
IGhlaWdodDsKKyAgICBkLT5tX3ZpcnR1YWxWaWV3cG9ydFNpemUgPSBXZWJDb3JlOjpJbnRTaXpl
KHNpemUpOwogfQogCiB2b2lkIFdlYlBhZ2U6OnJlc2V0VmlydHVhbFZpZXdwb3J0T25Db21taXR0
ZWQoYm9vbCByZXNldCkKQEAgLTM0MjAsNyArMzM2Nyw3IEBAIHZvaWQgV2ViUGFnZTo6cmVzZXRW
aXJ0dWFsVmlld3BvcnRPbkNvbW1pdHRlZChib29sIHJlc2V0KQogICAgIGQtPm1fcmVzZXRWaXJ0
dWFsVmlld3BvcnRPbkNvbW1pdHRlZCA9IHJlc2V0OwogfQogCi1JbnRTaXplIFdlYlBhZ2VQcml2
YXRlOjpyZWNvbXB1dGVWaXJ0dWFsVmlld3BvcnRGcm9tVmlld3BvcnRBcmd1bWVudHMoKQorUGxh
dGZvcm06OkludFNpemUgV2ViUGFnZVByaXZhdGU6OnJlY29tcHV0ZVZpcnR1YWxWaWV3cG9ydEZy
b21WaWV3cG9ydEFyZ3VtZW50cygpCiB7CiAgICAgc3RhdGljIGNvbnN0IFZpZXdwb3J0QXJndW1l
bnRzIGRlZmF1bHRWaWV3cG9ydEFyZ3VtZW50czsKICAgICBpZiAobV92aWV3cG9ydEFyZ3VtZW50
cyA9PSBkZWZhdWx0Vmlld3BvcnRBcmd1bWVudHMpCkBAIC0zNDQxLDcgKzMzODgsNyBAQCBJbnRT
aXplIFdlYlBhZ2VQcml2YXRlOjpyZWNvbXB1dGVWaXJ0dWFsVmlld3BvcnRGcm9tVmlld3BvcnRB
cmd1bWVudHMoKQogICAgIGlmIChyZXN1bHQubWF4aW11bVNjYWxlID4gMCkKICAgICAgICAgc2V0
TWF4aW11bVNjYWxlKHJlc3VsdC5tYXhpbXVtU2NhbGUgKiBkZXZpY2VQaXhlbFJhdGlvKTsKIAot
ICAgIHJldHVybiBJbnRTaXplKHJlc3VsdC5sYXlvdXRTaXplLndpZHRoKCksIHJlc3VsdC5sYXlv
dXRTaXplLmhlaWdodCgpKTsKKyAgICByZXR1cm4gUGxhdGZvcm06OkludFNpemUocmVzdWx0Lmxh
eW91dFNpemUud2lkdGgoKSwgcmVzdWx0LmxheW91dFNpemUuaGVpZ2h0KCkpOwogfQogCiAjaWYg
RU5BQkxFKEVWRU5UX01PREVfTUVUQVRBR1MpCkBAIC0zNDgzLDggKzM0MzAsOCBAQCB2b2lkIFdl
YlBhZ2VQcml2YXRlOjpkaXNwYXRjaFZpZXdwb3J0UHJvcGVydGllc0RpZENoYW5nZShjb25zdCBW
aWV3cG9ydEFyZ3VtZW50cwogICAgIGlmICghbV92aWV3cG9ydEFyZ3VtZW50cy5oZWlnaHQpCiAg
ICAgICAgIG1fdmlld3BvcnRBcmd1bWVudHMuaGVpZ2h0ID0gVmlld3BvcnRBcmd1bWVudHM6OlZh
bHVlRGV2aWNlSGVpZ2h0OwogCi0gICAgSW50U2l6ZSB2aXJ0dWFsVmlld3BvcnQgPSByZWNvbXB1
dGVWaXJ0dWFsVmlld3BvcnRGcm9tVmlld3BvcnRBcmd1bWVudHMoKTsKLSAgICBtX3dlYlBhZ2Ut
PnNldFZpcnR1YWxWaWV3cG9ydFNpemUodmlydHVhbFZpZXdwb3J0LndpZHRoKCksIHZpcnR1YWxW
aWV3cG9ydC5oZWlnaHQoKSk7CisgICAgUGxhdGZvcm06OkludFNpemUgdmlydHVhbFZpZXdwb3J0
ID0gcmVjb21wdXRlVmlydHVhbFZpZXdwb3J0RnJvbVZpZXdwb3J0QXJndW1lbnRzKCk7CisgICAg
bV93ZWJQYWdlLT5zZXRWaXJ0dWFsVmlld3BvcnRTaXplKHZpcnR1YWxWaWV3cG9ydCk7CiAKICAg
ICBpZiAobG9hZFN0YXRlKCkgPT0gV2ViS2l0OjpXZWJQYWdlUHJpdmF0ZTo6Q29tbWl0dGVkKQog
ICAgICAgICB6b29tVG9Jbml0aWFsU2NhbGVPbkxvYWQoKTsKQEAgLTM1NDMsNyArMzQ5MCw3IEBA
IHZvaWQgV2ViUGFnZVByaXZhdGU6OnJlc3VtZUJhY2tpbmdTdG9yZSgpCiAgICAgICAgIGlmICht
X2JhY2tpbmdTdG9yZS0+ZC0+cmVuZGVyVmlzaWJsZUNvbnRlbnRzKCkpIHsKICAgICAgICAgICAg
IGlmICghbV9iYWNraW5nU3RvcmUtPmQtPmlzU3VzcGVuZGVkKCkgJiYgIWRpcmVjdFJlbmRlcmlu
ZykKICAgICAgICAgICAgICAgICBtX2JhY2tpbmdTdG9yZS0+ZC0+YmxpdFZpc2libGVDb250ZW50
cygpOwotICAgICAgICAgICAgbV9jbGllbnQtPm5vdGlmeUNvbnRlbnRSZW5kZXJlZChtX2JhY2tp
bmdTdG9yZS0+ZC0+dmlzaWJsZUNvbnRlbnRzUmVjdCgpKTsKKyAgICAgICAgICAgIG1fY2xpZW50
LT5ub3RpZnlQaXhlbENvbnRlbnRSZW5kZXJlZChtX2JhY2tpbmdTdG9yZS0+ZC0+dmlzaWJsZUNv
bnRlbnRzUmVjdCgpKTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmIChtX2Jh
Y2tpbmdTdG9yZS0+ZC0+aXNPcGVuR0xDb21wb3NpdGluZygpKQpAQCAtMzY1Niw5ICszNjAzLDkg
QEAgdm9pZCBXZWJQYWdlUHJpdmF0ZTo6c2V0Vmlld3BvcnRTaXplKGNvbnN0IEludFNpemUmIHRy
YW5zZm9ybWVkQWN0dWFsVmlzaWJsZVNpemUKICAgICBzdGF0aWMgVmlld3BvcnRBcmd1bWVudHMg
ZGVmYXVsdFZpZXdwb3J0QXJndW1lbnRzOwogICAgIGlmIChtX3ZpZXdwb3J0QXJndW1lbnRzICE9
IGRlZmF1bHRWaWV3cG9ydEFyZ3VtZW50cykgewogICAgICAgICAvLyBXZSBtYXkgbmVlZCB0byBp
bmZlciB0aGUgd2lkdGggYW5kIGhlaWdodCBmb3IgdGhlIHZpZXdwb3J0IHdpdGggcmVzcGVjdCB0
byB0aGUgcm90YXRpb24uCi0gICAgICAgIEludFNpemUgbmV3VmlydHVhbFZpZXdwb3J0ID0gcmVj
b21wdXRlVmlydHVhbFZpZXdwb3J0RnJvbVZpZXdwb3J0QXJndW1lbnRzKCk7CisgICAgICAgIFBs
YXRmb3JtOjpJbnRTaXplIG5ld1ZpcnR1YWxWaWV3cG9ydCA9IHJlY29tcHV0ZVZpcnR1YWxWaWV3
cG9ydEZyb21WaWV3cG9ydEFyZ3VtZW50cygpOwogICAgICAgICBBU1NFUlQoIW5ld1ZpcnR1YWxW
aWV3cG9ydC5pc0VtcHR5KCkpOwotICAgICAgICBtX3dlYlBhZ2UtPnNldFZpcnR1YWxWaWV3cG9y
dFNpemUobmV3VmlydHVhbFZpZXdwb3J0LndpZHRoKCksIG5ld1ZpcnR1YWxWaWV3cG9ydC5oZWln
aHQoKSk7CisgICAgICAgIG1fd2ViUGFnZS0+c2V0VmlydHVhbFZpZXdwb3J0U2l6ZShuZXdWaXJ0
dWFsVmlld3BvcnQpOwogICAgICAgICBtX21haW5GcmFtZS0+dmlldygpLT5zZXRVc2VGaXhlZExh
eW91dCh1c2VGaXhlZExheW91dCgpKTsKICAgICAgICAgbV9tYWluRnJhbWUtPnZpZXcoKS0+c2V0
Rml4ZWRMYXlvdXRTaXplKGZpeGVkTGF5b3V0U2l6ZSgpKTsKICAgICAgICAgbmVlZHNMYXlvdXQg
PSB0cnVlOwpAQCAtMzY3MSwzMyArMzYxOCwzNCBAQCB2b2lkIFdlYlBhZ2VQcml2YXRlOjpzZXRW
aWV3cG9ydFNpemUoY29uc3QgSW50U2l6ZSYgdHJhbnNmb3JtZWRBY3R1YWxWaXNpYmxlU2l6ZQog
CiAgICAgSW50U2l6ZSB2aWV3cG9ydFNpemVBZnRlciA9IGFjdHVhbFZpc2libGVTaXplKCk7CiAK
LSAgICBJbnRQb2ludCBvZmZzZXQocm91bmRmKCh2aWV3cG9ydFNpemVCZWZvcmUud2lkdGgoKSAt
IHZpZXdwb3J0U2l6ZUFmdGVyLndpZHRoKCkpIC8gMi4wKSwKLSAgICAgICAgICAgICAgICAgICAg
cm91bmRmKCh2aWV3cG9ydFNpemVCZWZvcmUuaGVpZ2h0KCkgLSB2aWV3cG9ydFNpemVBZnRlci5o
ZWlnaHQoKSkgLyAyLjApKTsKKyAgICBJbnRTaXplIG9mZnNldCgKKyAgICAgICAgcm91bmRmKCh2
aWV3cG9ydFNpemVCZWZvcmUud2lkdGgoKSAtIHZpZXdwb3J0U2l6ZUFmdGVyLndpZHRoKCkpIC8g
Mi4wKSwKKyAgICAgICAgcm91bmRmKCh2aWV3cG9ydFNpemVCZWZvcmUuaGVpZ2h0KCkgLSB2aWV3
cG9ydFNpemVBZnRlci5oZWlnaHQoKSkgLyAyLjApKTsKIAogICAgIC8vIEFzIGEgc3BlY2lhbCBj
YXNlLCBpZiB3ZSB3ZXJlIGFuY2hvcmVkIHRvIHRoZSB0b3AgbGVmdCBwb3NpdGlvbiBhdAogICAg
IC8vIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHJvdGF0aW9uIHRoZW4gcHJlc2VydmUgdGhhdCBhbmNo
b3IuCiAgICAgaWYgKGF0VG9wKQotICAgICAgICBvZmZzZXQuc2V0WSgwKTsKKyAgICAgICAgb2Zm
c2V0LnNldEhlaWdodCgwKTsKICAgICBpZiAoYXRMZWZ0KQotICAgICAgICBvZmZzZXQuc2V0WCgw
KTsKKyAgICAgICAgb2Zmc2V0LnNldFdpZHRoKDApOwogCiAgICAgLy8gSWYgd2UncmUgYWJvdXQg
dG8gb3ZlcnNjcm9sbCwgY2FwIHRoZSBvZmZzZXQgdG8gdmFsaWQgY29udGVudC4KICAgICBJbnRQ
b2ludCBib3R0b21SaWdodCgKICAgICAgICAgc2Nyb2xsUG9zaXRpb24oKS54KCkgKyB2aWV3cG9y
dFNpemVBZnRlci53aWR0aCgpLAogICAgICAgICBzY3JvbGxQb3NpdGlvbigpLnkoKSArIHZpZXdw
b3J0U2l6ZUFmdGVyLmhlaWdodCgpKTsKIAotICAgIGlmIChib3R0b21SaWdodC54KCkgKyBvZmZz
ZXQueCgpID4gY29udGVudHNTaXplKCkud2lkdGgoKSkKLSAgICAgICAgb2Zmc2V0LnNldFgoY29u
dGVudHNTaXplKCkud2lkdGgoKSAtIGJvdHRvbVJpZ2h0LngoKSk7Ci0gICAgaWYgKGJvdHRvbVJp
Z2h0LnkoKSArIG9mZnNldC55KCkgPiBjb250ZW50c1NpemUoKS5oZWlnaHQoKSkKLSAgICAgICAg
b2Zmc2V0LnNldFkoY29udGVudHNTaXplKCkuaGVpZ2h0KCkgLSBib3R0b21SaWdodC55KCkpOwot
ICAgIGlmIChzY3JvbGxQb3NpdGlvbigpLngoKSArIG9mZnNldC54KCkgPCAwKQotICAgICAgICBv
ZmZzZXQuc2V0WCgtc2Nyb2xsUG9zaXRpb24oKS54KCkpOwotICAgIGlmIChzY3JvbGxQb3NpdGlv
bigpLnkoKSArIG9mZnNldC55KCkgPCAwKQotICAgICAgICBvZmZzZXQuc2V0WSgtc2Nyb2xsUG9z
aXRpb24oKS55KCkpOworICAgIGlmIChib3R0b21SaWdodC54KCkgKyBvZmZzZXQud2lkdGgoKSA+
IGNvbnRlbnRzU2l6ZSgpLndpZHRoKCkpCisgICAgICAgIG9mZnNldC5zZXRXaWR0aChjb250ZW50
c1NpemUoKS53aWR0aCgpIC0gYm90dG9tUmlnaHQueCgpKTsKKyAgICBpZiAoYm90dG9tUmlnaHQu
eSgpICsgb2Zmc2V0LmhlaWdodCgpID4gY29udGVudHNTaXplKCkuaGVpZ2h0KCkpCisgICAgICAg
IG9mZnNldC5zZXRIZWlnaHQoY29udGVudHNTaXplKCkuaGVpZ2h0KCkgLSBib3R0b21SaWdodC55
KCkpOworICAgIGlmIChzY3JvbGxQb3NpdGlvbigpLngoKSArIG9mZnNldC53aWR0aCgpIDwgMCkK
KyAgICAgICAgb2Zmc2V0LnNldFdpZHRoKC1zY3JvbGxQb3NpdGlvbigpLngoKSk7CisgICAgaWYg
KHNjcm9sbFBvc2l0aW9uKCkueSgpICsgb2Zmc2V0LmhlaWdodCgpIDwgMCkKKyAgICAgICAgb2Zm
c2V0LnNldEhlaWdodCgtc2Nyb2xsUG9zaXRpb24oKS55KCkpOwogCiAgICAgLy8gLi4uYmVmb3Jl
IHNjcm9sbGluZywgYmVjYXVzZSB0aGUgYmFja2luZyBzdG9yZSB3aWxsIGFsaWduIGl0cwogICAg
IC8vIHRpbGUgbWF0cml4IHdpdGggdGhlIHZpZXdwb3J0IGFzIHJlcG9ydGVkIGJ5IHRoZSBTY3Jv
bGxWaWV3LgotICAgIHNjcm9sbEJ5KG9mZnNldC54KCksIG9mZnNldC55KCkpOworICAgIHNldFNj
cm9sbFBvc2l0aW9uKHNjcm9sbFBvc2l0aW9uKCkgKyBvZmZzZXQpOwogICAgIG5vdGlmeVRyYW5z
Zm9ybWVkU2Nyb2xsQ2hhbmdlZCgpOwogCiAgICAgbV9iYWNraW5nU3RvcmUtPmQtPm9yaWVudGF0
aW9uQ2hhbmdlZCgpOwpAQCAtMzg0OSw5ICszNzk3LDkgQEAgdm9pZCBXZWJQYWdlUHJpdmF0ZTo6
c2V0RGVmYXVsdExheW91dFNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKICAgICBtX2RlZmF1bHRM
YXlvdXRTaXplID0gc2l6ZS5leHBhbmRlZFRvKG1pbmltdW1MYXlvdXRTaXplKS5zaHJ1bmtUbyhz
Y3JlZW5TaXplKTsKIH0KIAotdm9pZCBXZWJQYWdlOjpzZXREZWZhdWx0TGF5b3V0U2l6ZShpbnQg
d2lkdGgsIGludCBoZWlnaHQpCit2b2lkIFdlYlBhZ2U6OnNldERlZmF1bHRMYXlvdXRTaXplKGNv
bnN0IFBsYXRmb3JtOjpJbnRTaXplJiBwbGF0Zm9ybVNpemUpCiB7Ci0gICAgSW50U2l6ZSBzaXpl
KHdpZHRoLCBoZWlnaHQpOworICAgIFdlYkNvcmU6OkludFNpemUgc2l6ZSA9IHBsYXRmb3JtU2l6
ZTsKICAgICBpZiAoc2l6ZSA9PSBkLT5tX2RlZmF1bHRMYXlvdXRTaXplKQogICAgICAgICByZXR1
cm47CiAKQEAgLTQwNjksNyArNDAxNyw3IEBAIGJvb2wgV2ViUGFnZTo6dG91Y2hFdmVudChjb25z
dCBQbGF0Zm9ybTo6VG91Y2hFdmVudCYgZXZlbnQpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12
b2lkIFdlYlBhZ2VQcml2YXRlOjpzZXRTY3JvbGxPcmlnaW5Qb2ludChjb25zdCBQbGF0Zm9ybTo6
SW50UG9pbnQmIHBvaW50KQordm9pZCBXZWJQYWdlUHJpdmF0ZTo6c2V0U2Nyb2xsT3JpZ2luUG9p
bnQoY29uc3QgUGxhdGZvcm06OkludFBvaW50JiBkb2N1bWVudFNjcm9sbE9yaWdpbikKIHsKICAg
ICBtX2luUmVnaW9uU2Nyb2xsZXItPmQtPnJlc2V0KCk7CiAKQEAgLTQwNzcsMTYgKzQwMjUsMTUg
QEAgdm9pZCBXZWJQYWdlUHJpdmF0ZTo6c2V0U2Nyb2xsT3JpZ2luUG9pbnQoY29uc3QgUGxhdGZv
cm06OkludFBvaW50JiBwb2ludCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgcG9zdHBvbmVEb2N1
bWVudFN0eWxlUmVjYWxjKCk7Ci0gICAgbV9pblJlZ2lvblNjcm9sbGVyLT5kLT5jYWxjdWxhdGVJ
blJlZ2lvblNjcm9sbGFibGVBcmVhc0ZvclBvaW50KHBvaW50KTsKKyAgICBtX2luUmVnaW9uU2Ny
b2xsZXItPmQtPmNhbGN1bGF0ZUluUmVnaW9uU2Nyb2xsYWJsZUFyZWFzRm9yUG9pbnQoZG9jdW1l
bnRTY3JvbGxPcmlnaW4pOwogICAgIGlmICghbV9pblJlZ2lvblNjcm9sbGVyLT5kLT5hY3RpdmVJ
blJlZ2lvblNjcm9sbGFibGVBcmVhcygpLmVtcHR5KCkpCiAgICAgICAgIG1fY2xpZW50LT5ub3Rp
ZnlJblJlZ2lvblNjcm9sbGFibGVBcmVhc0NoYW5nZWQobV9pblJlZ2lvblNjcm9sbGVyLT5kLT5h
Y3RpdmVJblJlZ2lvblNjcm9sbGFibGVBcmVhcygpKTsKICAgICByZXN1bWVEb2N1bWVudFN0eWxl
UmVjYWxjKCk7CiB9CiAKLXZvaWQgV2ViUGFnZTo6c2V0U2Nyb2xsT3JpZ2luUG9pbnQoY29uc3Qg
UGxhdGZvcm06OkludFBvaW50JiBwb2ludCkKK3ZvaWQgV2ViUGFnZTo6c2V0RG9jdW1lbnRTY3Jv
bGxPcmlnaW5Qb2ludChjb25zdCBQbGF0Zm9ybTo6SW50UG9pbnQmIGRvY3VtZW50U2Nyb2xsT3Jp
Z2luKQogewotICAgIFBsYXRmb3JtOjpJbnRQb2ludCB1bnRyYW5zZm9ybWVkUG9pbnQgPSBkLT5t
YXBGcm9tVHJhbnNmb3JtZWQocG9pbnQpOwotICAgIGQtPnNldFNjcm9sbE9yaWdpblBvaW50KHVu
dHJhbnNmb3JtZWRQb2ludCk7CisgICAgZC0+c2V0U2Nyb2xsT3JpZ2luUG9pbnQoZG9jdW1lbnRT
Y3JvbGxPcmlnaW4pOwogfQogCiBib29sIFdlYlBhZ2VQcml2YXRlOjpkaXNwYXRjaFRvdWNoRXZl
bnRUb0Z1bGxTY3JlZW5QbHVnaW4oUGx1Z2luVmlldyogcGx1Z2luLCBjb25zdCBQbGF0Zm9ybTo6
VG91Y2hFdmVudCYgZXZlbnQpCkBAIC00Mjk0LDcgKzQyNDEsNyBAQCBzdGF0aWMgdm9pZCBoYW5k
bGVTY3JvbGxpbmcodW5zaWduZWQgc2hvcnQgY2hhcmFjdGVyLCBXZWJQYWdlUHJpdmF0ZSogc2Ny
b2xsZXIpCiAgICAgICAgICAgICBwb3Muc2V0WShzY3JvbGxlci0+Y29udGVudHNTaXplKCkuaGVp
Z2h0KCkgLSBzY3JvbGxlci0+YWN0dWFsVmlzaWJsZVNpemUoKS5oZWlnaHQoKSk7CiAKICAgICAg
ICAgc2Nyb2xsZXItPm1fbWFpbkZyYW1lLT52aWV3KCktPnNldFNjcm9sbFBvc2l0aW9uKHBvcyk7
Ci0gICAgICAgIHNjcm9sbGVyLT5tX2NsaWVudC0+c2Nyb2xsQ2hhbmdlZChwb3MpOworICAgICAg
ICBzY3JvbGxlci0+bV9jbGllbnQtPnNjcm9sbENoYW5nZWQoKTsKICAgICB9CiB9CiAKQEAgLTQ0
MDksOSArNDM1Niw5IEBAIHZvaWQgV2ViUGFnZTo6c2VsZWN0aW9uQ2FuY2VsbGVkKCkKICAgICBk
LT5tX3NlbGVjdGlvbkhhbmRsZXItPmNhbmNlbFNlbGVjdGlvbigpOwogfQogCi1ib29sIFdlYlBh
Z2U6OnNlbGVjdGlvbkNvbnRhaW5zKGNvbnN0IFBsYXRmb3JtOjpJbnRQb2ludCYgcG9pbnQpCiti
b29sIFdlYlBhZ2U6OnNlbGVjdGlvbkNvbnRhaW5zRG9jdW1lbnRQb2ludChjb25zdCBQbGF0Zm9y
bTo6SW50UG9pbnQmIHBvaW50KQogewotICAgIHJldHVybiBkLT5tX3NlbGVjdGlvbkhhbmRsZXIt
PnNlbGVjdGlvbkNvbnRhaW5zKGQtPm1hcEZyb21UcmFuc2Zvcm1lZChwb2ludCkpOworICAgIHJl
dHVybiBkLT5tX3NlbGVjdGlvbkhhbmRsZXItPnNlbGVjdGlvbkNvbnRhaW5zKHBvaW50KTsKIH0K
IAogQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyBXZWJQYWdlOjp0aXRsZSgpIGNvbnN0CkBA
IC00NDc0LDQzICs0NDIxLDI5IEBAIHZvaWQgV2ViUGFnZTo6c2VsZWN0QWxsKCkKICAgICBkLT5t
X2lucHV0SGFuZGxlci0+c2VsZWN0QWxsKCk7CiB9CiAKLXZvaWQgV2ViUGFnZTo6c2V0U2VsZWN0
aW9uKGNvbnN0IFBsYXRmb3JtOjpJbnRQb2ludCYgc3RhcnRQb2ludCwgY29uc3QgUGxhdGZvcm06
OkludFBvaW50JiBlbmRQb2ludCkKK3ZvaWQgV2ViUGFnZTo6c2V0RG9jdW1lbnRTZWxlY3Rpb24o
Y29uc3QgUGxhdGZvcm06OkludFBvaW50JiBkb2N1bWVudFN0YXJ0UG9pbnQsIGNvbnN0IFBsYXRm
b3JtOjpJbnRQb2ludCYgZG9jdW1lbnRFbmRQb2ludCkKIHsKICAgICBpZiAoZC0+bV9wYWdlLT5k
ZWZlcnNMb2FkaW5nKCkpCiAgICAgICAgIHJldHVybjsKLSAgICAvLyBUcmFuc2Zvcm0gdGhpcyBl
dmVudHMgY29vcmRpbmF0ZXMgdG8gd2Via2l0IGNvbnRlbnQgY29vcmRpbmF0ZXMuCi0gICAgLy8g
RklYTUU6IERvbid0IHRyYW5zZm9ybSB0aGUgc2VudGluZWwsIGJlY2F1c2UgaXQgbWF5IGJlIHRy
YW5zZm9ybWVkIHRvIGEgZmxvYXRpbmcgbnVtYmVyCi0gICAgLy8gd2hpY2ggY291bGQgYmUgcm91
bmRlZCB0byAwIG9yIG90aGVyIG51bWJlcnMuIFRoaXMgd29ya2Fyb3VuZCBzaG91bGQgYmUgcmVt
b3ZlZCBhZnRlcgotICAgIC8vIHRoZSBlcnJvciBvZiByb3VuZFVudHJhbnNmb3JtZWRQb2ludCgp
IGlzIGZpeGVkLgotICAgIGJvb2wgaW52YWxpZFBvaW50ID0gSW50UG9pbnQoc3RhcnRQb2ludCkg
PT0gRE9NU3VwcG9ydDo6SW52YWxpZFBvaW50OwotICAgIEludFBvaW50IHN0YXJ0ID0gaW52YWxp
ZFBvaW50ID8gRE9NU3VwcG9ydDo6SW52YWxpZFBvaW50IDogZC0+bWFwRnJvbVRyYW5zZm9ybWVk
KHN0YXJ0UG9pbnQpOwotICAgIGludmFsaWRQb2ludCA9IEludFBvaW50KGVuZFBvaW50KSA9PSBE
T01TdXBwb3J0OjpJbnZhbGlkUG9pbnQ7Ci0gICAgSW50UG9pbnQgZW5kID0gaW52YWxpZFBvaW50
ID8gRE9NU3VwcG9ydDo6SW52YWxpZFBvaW50IDogZC0+bWFwRnJvbVRyYW5zZm9ybWVkKGVuZFBv
aW50KTsKIAotICAgIGQtPm1fc2VsZWN0aW9uSGFuZGxlci0+c2V0U2VsZWN0aW9uKHN0YXJ0LCBl
bmQpOworICAgIGQtPm1fc2VsZWN0aW9uSGFuZGxlci0+c2V0U2VsZWN0aW9uKGRvY3VtZW50U3Rh
cnRQb2ludCwgZG9jdW1lbnRFbmRQb2ludCk7CiB9CiAKLXZvaWQgV2ViUGFnZTo6c2V0Q2FyZXRQ
b3NpdGlvbihjb25zdCBQbGF0Zm9ybTo6SW50UG9pbnQmIHBvc2l0aW9uKQordm9pZCBXZWJQYWdl
OjpzZXREb2N1bWVudENhcmV0UG9zaXRpb24oY29uc3QgUGxhdGZvcm06OkludFBvaW50JiBkb2N1
bWVudENhcmV0UG9zaXRpb24pCiB7CiAgICAgaWYgKGQtPm1fcGFnZS0+ZGVmZXJzTG9hZGluZygp
KQogICAgICAgICByZXR1cm47CisKICAgICAvLyBIYW5kbGVkIGJ5IHNlbGVjdGlvbiBoYW5kbGVy
IGFzIGl0J3MgcG9pbnQgYmFzZWQuCi0gICAgLy8gVHJhbnNmb3JtIHRoaXMgZXZlbnRzIGNvb3Jk
aW5hdGVzIHRvIHdlYmtpdCBjb250ZW50IGNvb3JkaW5hdGVzLgotICAgIGQtPm1fc2VsZWN0aW9u
SGFuZGxlci0+c2V0Q2FyZXRQb3NpdGlvbihkLT5tYXBGcm9tVHJhbnNmb3JtZWQocG9zaXRpb24p
KTsKKyAgICBkLT5tX3NlbGVjdGlvbkhhbmRsZXItPnNldENhcmV0UG9zaXRpb24oZG9jdW1lbnRD
YXJldFBvc2l0aW9uKTsKIH0KIAotdm9pZCBXZWJQYWdlOjpzZWxlY3RBdFBvaW50KGNvbnN0IFBs
YXRmb3JtOjpJbnRQb2ludCYgbG9jYXRpb24pCit2b2lkIFdlYlBhZ2U6OnNlbGVjdEF0RG9jdW1l
bnRQb2ludChjb25zdCBQbGF0Zm9ybTo6SW50UG9pbnQmIGRvY3VtZW50UG9pbnQpCiB7CiAgICAg
aWYgKGQtPm1fcGFnZS0+ZGVmZXJzTG9hZGluZygpKQogICAgICAgICByZXR1cm47Ci0gICAgLy8g
VHJhbnNmb3JtIHRoaXMgZXZlbnRzIGNvb3JkaW5hdGVzIHRvIHdlYmtpdCBjb250ZW50IGNvb3Jk
aW5hdGVzIGlmIGl0Ci0gICAgLy8gaXMgbm90IHRoZSBzZW50aW5lbCB2YWx1ZS4KLSAgICBJbnRQ
b2ludCBzZWxlY3Rpb25Mb2NhdGlvbiA9Ci0gICAgICAgICAgICBJbnRQb2ludChsb2NhdGlvbikg
PT0gRE9NU3VwcG9ydDo6SW52YWxpZFBvaW50ID8KLSAgICAgICAgICAgIERPTVN1cHBvcnQ6Oklu
dmFsaWRQb2ludCA6Ci0gICAgICAgICAgICBkLT5tYXBGcm9tVHJhbnNmb3JtZWQobG9jYXRpb24p
OwogCi0gICAgZC0+bV9zZWxlY3Rpb25IYW5kbGVyLT5zZWxlY3RBdFBvaW50KHNlbGVjdGlvbkxv
Y2F0aW9uKTsKKyAgICBkLT5tX3NlbGVjdGlvbkhhbmRsZXItPnNlbGVjdEF0UG9pbnQoZG9jdW1l
bnRQb2ludCk7CiB9CiAKIEJhY2tpbmdTdG9yZSogV2ViUGFnZTo6YmFja2luZ1N0b3JlKCkgY29u
c3QKQEAgLTQ1MjMsNDYgKzQ0NTYsMzUgQEAgSW5SZWdpb25TY3JvbGxlciogV2ViUGFnZTo6aW5S
ZWdpb25TY3JvbGxlcigpIGNvbnN0CiAgICAgcmV0dXJuIGQtPm1faW5SZWdpb25TY3JvbGxlci5n
ZXQoKTsKIH0KIAotYm9vbCBXZWJQYWdlOjp6b29tVG9GaXQoKQotewotICAgIGlmIChkLT5jb250
ZW50c1NpemUoKS5pc0VtcHR5KCkgfHwgIWQtPmlzVXNlclNjYWxhYmxlKCkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIGQtPm1fdXNlclBlcmZvcm1lZE1hbnVhbFpvb20gPSB0cnVlOwot
Ci0gICAgLy8gVE9ETzogV2UgbWF5IG5lZWQgdG8gdXNlICgwLDApIGFzIHRoZSBhbmNob3IgcG9p
bnQgd2hlbiB0ZXh0UmVmbG93IGlzIGVuYWJsZWQuCi0gICAgLy8gSUYgdGhlIG1pbmltdW0gZm9u
dCBzaXplIGlzIGdpbm9ybW91cywgd2UgbWF5IHN0aWxsIHdhbnQgdGhlIHNjcm9sbCBwb3NpdGlv
biB0byBiZSAwLDAuCi0gICAgcmV0dXJuIGQtPnpvb21BYm91dFBvaW50KGQtPnpvb21Ub0ZpdFNj
YWxlKCksIGQtPmNlbnRlck9mVmlzaWJsZUNvbnRlbnRzUmVjdCgpKTsKLX0KLQotdm9pZCBXZWJQ
YWdlUHJpdmF0ZTo6c2V0VGV4dFJlZmxvd0FuY2hvclBvaW50KGNvbnN0IFBsYXRmb3JtOjpJbnRQ
b2ludCYgZm9jYWxQb2ludCkKK3ZvaWQgV2ViUGFnZVByaXZhdGU6OnNldFRleHRSZWZsb3dBbmNo
b3JQb2ludChjb25zdCBQbGF0Zm9ybTo6SW50UG9pbnQmIGRvY3VtZW50Rm9jYWxQb2ludCkKIHsK
ICAgICAvLyBTaG91bGQgb25seSBiZSBpbnZva2VkIHdoZW4gdGV4dCByZWZsb3cgaXMgZW5hYmxl
ZC4KICAgICBBU1NFUlQobV93ZWJQYWdlLT5zZXR0aW5ncygpLT50ZXh0UmVmbG93TW9kZSgpID09
IFdlYlNldHRpbmdzOjpUZXh0UmVmbG93RW5hYmxlZCk7CiAKLSAgICBtX2N1cnJlbnRQaW5jaFpv
b21Ob2RlID0gYmVzdE5vZGVGb3Jab29tVW5kZXJQb2ludChmb2NhbFBvaW50KTsKKyAgICBtX2N1
cnJlbnRQaW5jaFpvb21Ob2RlID0gYmVzdE5vZGVGb3Jab29tVW5kZXJQb2ludChkb2N1bWVudEZv
Y2FsUG9pbnQpOwogICAgIGlmICghbV9jdXJyZW50UGluY2hab29tTm9kZSkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgSW50UmVjdCBub2RlUmVjdCA9IHJlY3RGb3JOb2RlKG1fY3VycmVudFBpbmNo
Wm9vbU5vZGUuZ2V0KCkpOwotICAgIG1fYW5jaG9ySW5Ob2RlUmVjdFJhdGlvLnNldChzdGF0aWNf
Y2FzdDxmbG9hdD4obWFwRnJvbVRyYW5zZm9ybWVkKGZvY2FsUG9pbnQpLngoKSAtIG5vZGVSZWN0
LngoKSkgLyBub2RlUmVjdC53aWR0aCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdGF0aWNfY2FzdDxmbG9hdD4obWFwRnJvbVRyYW5zZm9ybWVkKGZvY2FsUG9pbnQpLnkoKSAt
IG5vZGVSZWN0LnkoKSkgLyBub2RlUmVjdC5oZWlnaHQoKSk7CisgICAgbV9hbmNob3JJbk5vZGVS
ZWN0UmF0aW8uc2V0KAorICAgICAgICBzdGF0aWNfY2FzdDxmbG9hdD4oZG9jdW1lbnRGb2NhbFBv
aW50LngoKSAtIG5vZGVSZWN0LngoKSkgLyBub2RlUmVjdC53aWR0aCgpLAorICAgICAgICBzdGF0
aWNfY2FzdDxmbG9hdD4oZG9jdW1lbnRGb2NhbFBvaW50LnkoKSAtIG5vZGVSZWN0LnkoKSkgLyBu
b2RlUmVjdC5oZWlnaHQoKSk7CiB9CiAKLWJvb2wgV2ViUGFnZTo6cGluY2hab29tQWJvdXRQb2lu
dChkb3VibGUgc2NhbGUsIGludCB4LCBpbnQgeSkKK2Jvb2wgV2ViUGFnZTo6cGluY2hab29tQWJv
dXRQb2ludChkb3VibGUgc2NhbGUsIGNvbnN0IFBsYXRmb3JtOjpGbG9hdFBvaW50JiBkb2N1bWVu
dEZvY2FsUG9pbnQpCiB7Ci0gICAgSW50UG9pbnQgYW5jaG9yKHgsIHkpOwogICAgIGQtPm1fdXNl
clBlcmZvcm1lZE1hbnVhbFpvb20gPSB0cnVlOwogICAgIGQtPm1fdXNlclBlcmZvcm1lZE1hbnVh
bFNjcm9sbCA9IHRydWU7CiAKICAgICBpZiAoZC0+bV93ZWJQYWdlLT5zZXR0aW5ncygpLT50ZXh0
UmVmbG93TW9kZSgpID09IFdlYlNldHRpbmdzOjpUZXh0UmVmbG93RW5hYmxlZCkgewotICAgICAg
ICBkLT5zZXRUZXh0UmVmbG93QW5jaG9yUG9pbnQoYW5jaG9yKTsKLSAgICAgICAgLy8gVGhlb3Jl
dGljYWxseSwgZC0+bm9kZUZvclpvb21VbmRlclBvaW50KGFuY2hvcikgY2FuIHJldHVybiBudWxs
LgorICAgICAgICBkLT5zZXRUZXh0UmVmbG93QW5jaG9yUG9pbnQod2Via2l0VGhyZWFkVmlld3Bv
cnRBY2Nlc3NvcigpLT5yb3VuZGVkRG9jdW1lbnRDb250ZW50cyhkb2N1bWVudEZvY2FsUG9pbnQp
KTsKKworICAgICAgICAvLyBUaGVvcmV0aWNhbGx5LCBkLT5ub2RlRm9yWm9vbVVuZGVyUG9pbnQo
ZG9jdW1lbnRGb2NhbFBvaW50KSBjYW4gcmV0dXJuIG51bGwuCiAgICAgICAgIGlmICghZC0+bV9j
dXJyZW50UGluY2hab29tTm9kZSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAK
LSAgICByZXR1cm4gZC0+em9vbUFib3V0UG9pbnQoc2NhbGUsIGQtPm1hcEZyb21UcmFuc2Zvcm1l
ZChhbmNob3IpKTsKKyAgICByZXR1cm4gZC0+em9vbUFib3V0UG9pbnQoc2NhbGUsIGRvY3VtZW50
Rm9jYWxQb2ludCk7CiB9CiAKICNpZiBFTkFCTEUoVklFV1BPUlRfUkVGTE9XKQpAQCAtNDU3Mywx
MiArNDQ5NSwxMiBAQCB2b2lkIFdlYlBhZ2VQcml2YXRlOjp0b2dnbGVUZXh0UmVmbG93SWZFbmFi
bGVkRm9yQmxvY2tab29tT25seShib29sIHNob3VsZEVuYWJsZQogfQogI2VuZGlmCiAKLWJvb2wg
V2ViUGFnZTo6YmxvY2tab29tKGludCB4LCBpbnQgeSkKK2Jvb2wgV2ViUGFnZTo6YmxvY2tab29t
KGNvbnN0IFBsYXRmb3JtOjpJbnRQb2ludCYgZG9jdW1lbnRUYXJnZXRQb2ludCkKIHsKICAgICBp
ZiAoIWQtPm1fbWFpbkZyYW1lLT52aWV3KCkgfHwgIWQtPmlzVXNlclNjYWxhYmxlKCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgIE5vZGUqIG5vZGUgPSBkLT5iZXN0Tm9kZUZvclpvb21V
bmRlclBvaW50KEludFBvaW50KHgsIHkpKTsKKyAgICBOb2RlKiBub2RlID0gZC0+YmVzdE5vZGVG
b3Jab29tVW5kZXJQb2ludChkb2N1bWVudFRhcmdldFBvaW50KTsKICAgICBpZiAoIW5vZGUpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtNDYyNywyMCArNDU0OSw2IEBAIGJvb2wgV2ViUGFn
ZTo6YmxvY2tab29tKGludCB4LCBpbnQgeSkKICAgICBuZXdTY2FsZSA9IHN0ZDo6bWluKGQtPm5l
d1NjYWxlRm9yQmxvY2tab29tUmVjdChibG9ja1JlY3QsIG9sZFNjYWxlLCBtYXJnaW4pLCBkLT5t
YXhCbG9ja1pvb21TY2FsZSgpKTsKICAgICBuZXdTY2FsZSA9IHN0ZDo6bWF4KG5ld1NjYWxlLCBt
aW5pbXVtU2NhbGUoKSk7CiAKLSNpZiBERUJVR19CTE9DS19aT09NCi0gICAgLy8gUmVuZGVyIHRo
ZSBkb3VibGUgdGFwIHBvaW50IGZvciB2aXN1YWwgcmVmZXJlbmNlLgotICAgIEludFJlY3QgcmVu
ZGVyUmVjdCh4LCB5LCAxLCAxKTsKLSAgICByZW5kZXJSZWN0ID0gZC0+bWFwRnJvbVRyYW5zZm9y
bWVkQ29udGVudHNUb1RyYW5zZm9ybWVkVmlld3BvcnQocmVuZGVyUmVjdCk7Ci0gICAgSW50U2l6
ZSB2aWV3cG9ydFNpemUgPSBkLT50cmFuc2Zvcm1lZFZpZXdwb3J0U2l6ZSgpOwotICAgIHJlbmRl
clJlY3QuaW50ZXJzZWN0KEludFJlY3QoMCwgMCwgdmlld3BvcnRTaXplLndpZHRoKCksIHZpZXdw
b3J0U2l6ZS5oZWlnaHQoKSkpOwotICAgIGQtPm1fYmFja2luZ1N0b3JlLT5kLT5jbGVhcldpbmRv
dyhyZW5kZXJSZWN0LCAwLCAwLCAwKTsKLSAgICBkLT5tX2JhY2tpbmdTdG9yZS0+ZC0+aW52YWxp
ZGF0ZVdpbmRvdyhyZW5kZXJSZWN0KTsKLQotICAgIC8vIFVuY29tbWVudCB0aGlzIHRvIHJldHVy
biBpbiBvcmRlciB0byBzZWUgdGhlIGJsb2NrcyBiZWluZyBzZWxlY3RlZC4KLSAgICAvLyBkLT5t
X2NsaWVudC0+em9vbUNoYW5nZWQoaXNNaW5ab29tZWQoKSwgaXNNYXhab29tZWQoKSwgaXNBdElu
aXRpYWxab29tKCksIGN1cnJlbnRab29tTGV2ZWwoKSk7Ci0gICAgLy8gcmV0dXJuIHRydWU7Ci0j
ZW5kaWYKLQogI2lmIEVOQUJMRShWSUVXUE9SVF9SRUZMT1cpCiAgICAgLy8gSWYgcmVmbG93aW5n
LCBhZGp1c3QgdGhlIHJlZmxvdy13aWR0aCBvZiB0ZXh0IG5vZGUgdG8gbWFrZSBzdXJlIHRoZSBm
b250IGlzIGEgcmVhc29uYWJsZSBzaXplLgogICAgIGlmIChkLT5tX2N1cnJlbnRCbG9ja1pvb21O
b2RlICYmIGQtPm1fc2hvdWxkUmVmbG93QmxvY2sgJiYgc2V0dGluZ3MoKS0+dGV4dFJlZmxvd01v
ZGUoKSAhPSBXZWJTZXR0aW5nczo6VGV4dFJlZmxvd0Rpc2FibGVkKSB7CkBAIC00NzE2LDEwICs0
NjI0LDkgQEAgYm9vbCBXZWJQYWdlOjpibG9ja1pvb20oaW50IHgsIGludCB5KQogICAgIC8vIE1h
a2Ugc3VyZSB0aGF0IHRoZSBvcmlnaW5hbCBub2RlIHJlY3QgaXMgdmlzaWJsZSBpbiB0aGUgc2Ny
ZWVuIGFmdGVyIHRoZSB6b29tLiBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHRoZSBpZGVudGlm
aWVkIGJsb2NrIHJlY3QgbWlnaHQKICAgICAvLyBub3QgYmUgdGhlIHNhbWUgYXMgdGhlIG9yaWdp
bmFsIG5vZGUgcmVjdCwgYW5kIGl0IGNvdWxkIGZvcmNlIHRoZSBvcmlnaW5hbCBub2RlIHJlY3Qg
b2ZmIHRoZSBzY3JlZW4uCiAgICAgRmxvYXRSZWN0IGJyKGFuY2hvciwgRmxvYXRTaXplKHNjYWxl
ZFZpZXdwb3J0V2lkdGgsIHNjYWxlZFZpZXdwb3J0SGVpZ2h0KSk7Ci0gICAgSW50UG9pbnQgY2xp
Y2tQb2ludCA9IGQtPm1hcEZyb21UcmFuc2Zvcm1lZChJbnRQb2ludCh4LCB5KSk7Ci0gICAgaWYg
KCFici5jb250YWlucyhjbGlja1BvaW50KSkgewotICAgICAgICBkLT5tX2ZpbmFsQmxvY2tQb2lu
dFJlZmxvd09mZnNldC5tb3ZlKDAsIChjbGlja1BvaW50LnkoKSAtIHNjYWxlZFZpZXdwb3J0SGVp
Z2h0IC8gMikgLSBkLT5tX2ZpbmFsQmxvY2tQb2ludC55KCkpOwotICAgICAgICBkLT5tX2ZpbmFs
QmxvY2tQb2ludCA9IEZsb2F0UG9pbnQoZC0+bV9maW5hbEJsb2NrUG9pbnQueCgpLCBjbGlja1Bv
aW50LnkoKSAtIHNjYWxlZFZpZXdwb3J0SGVpZ2h0IC8gMik7CisgICAgaWYgKCFici5jb250YWlu
cyhJbnRQb2ludChkb2N1bWVudFRhcmdldFBvaW50KSkpIHsKKyAgICAgICAgZC0+bV9maW5hbEJs
b2NrUG9pbnRSZWZsb3dPZmZzZXQubW92ZSgwLCAoZG9jdW1lbnRUYXJnZXRQb2ludC55KCkgLSBz
Y2FsZWRWaWV3cG9ydEhlaWdodCAvIDIpIC0gZC0+bV9maW5hbEJsb2NrUG9pbnQueSgpKTsKKyAg
ICAgICAgZC0+bV9maW5hbEJsb2NrUG9pbnQgPSBGbG9hdFBvaW50KGQtPm1fZmluYWxCbG9ja1Bv
aW50LngoKSwgZG9jdW1lbnRUYXJnZXRQb2ludC55KCkgLSBzY2FsZWRWaWV3cG9ydEhlaWdodCAv
IDIpOwogICAgIH0KIAogICAgIC8vIENsYW1wIHRoZSBmaW5hbEJsb2NrUG9pbnQgdG8gbm90IGNh
dXNlIGFueSBvdmVyZmxvdyBzY3JvbGxpbmcuCkBAIC00NzM5LDIwICs0NjQ2LDE4IEBAIGJvb2wg
V2ViUGFnZTo6YmxvY2tab29tKGludCB4LCBpbnQgeSkKICAgICAgICAgZC0+bV9maW5hbEJsb2Nr
UG9pbnRSZWZsb3dPZmZzZXQuc2V0WSgwKTsKICAgICB9CiAKLSAgICBkLT5tX2ZpbmFsQmxvY2tQ
b2ludCA9IGQtPm1hcFRvVHJhbnNmb3JtZWRGbG9hdFBvaW50KGQtPm1fZmluYWxCbG9ja1BvaW50
KTsKLQogICAgIC8vIERvbid0IGJsb2NrIHpvb20gaWYgdGhlIHVzZXIgaXMgem9vbWluZyBhbmQg
dGhlIG5ldyBzY2FsZSBpcyBvbmx5IG1hcmdpbmFsbHkgZGlmZmVyZW50IGZyb20gdGhlCiAgICAg
Ly8gb2xkU2NhbGUgd2l0aCBvbmx5IGEgbWFyZ2luYWwgY2hhbmdlIGluIHNjcm9sbCBwb3NpdGlv
bi4gSWdub3JlIHNjcm9sbCBkaWZmZXJlbmNlIGluIHRoZSBzcGVjaWFsIGNhc2UKICAgICAvLyB0
aGF0IHRoZSB6b29tIGxldmVsIGlzIHRoZSBtaW5pbXVtU2NhbGUuCiAgICAgaWYgKCFlbmRPZkJs
b2NrWm9vbU1vZGUgJiYgYWJzKG5ld1NjYWxlIC0gb2xkU2NhbGUpIC8gb2xkU2NhbGUgPCBtaW5p
bXVtRXhwYW5kaW5nUmF0aW8pIHsKLSAgICAgICAgY29uc3QgZG91YmxlIG1pbmltdW1EaXNwbGFj
ZW1lbnQgPSBtaW5pbXVtRXhwYW5kaW5nUmF0aW8gKiBkLT50cmFuc2Zvcm1lZEFjdHVhbFZpc2li
bGVTaXplKCkud2lkdGgoKTsKLSAgICAgICAgaWYgKG9sZFNjYWxlID09IGQtPm1pbmltdW1TY2Fs
ZSgpIHx8IChkaXN0YW5jZUJldHdlZW5Qb2ludHMocm91bmRUcmFuc2Zvcm1lZFBvaW50KGQtPm1h
cFRvVHJhbnNmb3JtZWQoZC0+c2Nyb2xsUG9zaXRpb24oKSkpLCByb3VuZFRyYW5zZm9ybWVkUG9p
bnQoZC0+bV9maW5hbEJsb2NrUG9pbnQpKSA8IG1pbmltdW1EaXNwbGFjZW1lbnQgJiYgYWJzKG5l
d1NjYWxlIC0gb2xkU2NhbGUpIC8gb2xkU2NhbGUgPCAwLjEwKSkgeworICAgICAgICBjb25zdCBk
b3VibGUgbWluaW11bURpc3BsYWNlbWVudCA9IG1pbmltdW1FeHBhbmRpbmdSYXRpbyAqIHdlYmtp
dFRocmVhZFZpZXdwb3J0QWNjZXNzb3IoKS0+ZG9jdW1lbnRWaWV3cG9ydFNpemUoKS53aWR0aCgp
OworICAgICAgICBpZiAob2xkU2NhbGUgPT0gZC0+bWluaW11bVNjYWxlKCkgfHwgKGRpc3RhbmNl
QmV0d2VlblBvaW50cyhkLT5zY3JvbGxQb3NpdGlvbigpLCByb3VuZFVudHJhbnNmb3JtZWRQb2lu
dChkLT5tX2ZpbmFsQmxvY2tQb2ludCkpIDwgbWluaW11bURpc3BsYWNlbWVudCAmJiBhYnMobmV3
U2NhbGUgLSBvbGRTY2FsZSkgLyBvbGRTY2FsZSA8IDAuMTApKSB7CiAgICAgICAgICAgICBpZiAo
aXNGaXJzdFpvb20pIHsKICAgICAgICAgICAgICAgICBkLT5yZXNldEJsb2NrWm9vbSgpOwogICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIC8v
IFpvb20gb3V0IG9mIGJsb2NrIHpvb20uCi0gICAgICAgICAgICBibG9ja1pvb20oeCwgeSk7Cisg
ICAgICAgICAgICBibG9ja1pvb20oZG9jdW1lbnRUYXJnZXRQb2ludCk7CiAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KQEAgLTQ3NjIsNyArNDY2Nyw3IEBAIGJvb2wg
V2ViUGFnZTo6YmxvY2tab29tKGludCB4LCBpbnQgeSkKICAgICAvLyBXZSBzZXQgdGhpcyBoZXJl
IHRvIG1ha2Ugc3VyZSB3ZSBkb24ndCB0cnkgdG8gcmUtcmVuZGVyIHRoZSBwYWdlIGF0IGEgZGlm
ZmVyZW50IHpvb20gbGV2ZWwgZHVyaW5nIGxvYWRpbmcuCiAgICAgZC0+bV91c2VyUGVyZm9ybWVk
TWFudWFsWm9vbSA9IHRydWU7CiAgICAgZC0+bV91c2VyUGVyZm9ybWVkTWFudWFsU2Nyb2xsID0g
dHJ1ZTsKLSAgICBkLT5tX2NsaWVudC0+YW5pbWF0ZUJsb2NrWm9vbShkLT5tX2ZpbmFsQmxvY2tQ
b2ludCwgZC0+bV9ibG9ja1pvb21GaW5hbFNjYWxlKTsKKyAgICBkLT5tX2NsaWVudC0+YW5pbWF0
ZUJsb2NrWm9vbShkLT5tX2Jsb2NrWm9vbUZpbmFsU2NhbGUsIGQtPm1fZmluYWxCbG9ja1BvaW50
KTsKIAogICAgIHJldHVybiB0cnVlOwogfQpAQCAtNDc4MiwzOSArNDY4Nyw2IEBAIGJvb2wgV2Vi
UGFnZTo6aXNBdEluaXRpYWxab29tKCkgY29uc3QKICAgICByZXR1cm4gKGQtPmN1cnJlbnRTY2Fs
ZSgpID09IGQtPmluaXRpYWxTY2FsZSgpKSB8fCAhZC0+aXNVc2VyU2NhbGFibGUoKTsKIH0KIAot
Ym9vbCBXZWJQYWdlUHJpdmF0ZTo6c2hvdWxkWm9vbU9uRXNjYXBlKCkgY29uc3QKLXsKLSAgICBp
ZiAoIWlzVXNlclNjYWxhYmxlKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIElm
IHRoZSBpbml0aWFsIHNjYWxlIGlzIG5vdCByZWFjaGFibGUsIGRvbid0IHRyeSB0byB6b29tLgot
ICAgIGlmIChpbml0aWFsU2NhbGUoKSA8IG1pbmltdW1TY2FsZSgpIHx8IGluaXRpYWxTY2FsZSgp
ID4gbWF4aW11bVNjYWxlKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIERvbid0
IGV2ZXIgem9vbSBpbiB3aGVuIHdlIHByZXNzIGVzY2FwZS4KLSAgICBpZiAoaW5pdGlhbFNjYWxl
KCkgPj0gY3VycmVudFNjYWxlKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVy
biBjdXJyZW50U2NhbGUoKSAhPSBpbml0aWFsU2NhbGUoKTsKLX0KLQotdm9pZCBXZWJQYWdlOjp6
b29tVG9Jbml0aWFsU2NhbGUoKQotewotICAgIGlmICghZC0+aXNVc2VyU2NhbGFibGUoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgZC0+em9vbUFib3V0UG9pbnQoZC0+aW5pdGlhbFNjYWxlKCks
IGQtPmNlbnRlck9mVmlzaWJsZUNvbnRlbnRzUmVjdCgpKTsKLX0KLQotYm9vbCBXZWJQYWdlOjp6
b29tVG9PbmVPbmUoKQotewotICAgIGlmICghZC0+aXNVc2VyU2NhbGFibGUoKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgZG91YmxlIHNjYWxlID0gMTsKLSAgICByZXR1cm4gZC0+em9v
bUFib3V0UG9pbnQoc2NhbGUsIGQtPmNlbnRlck9mVmlzaWJsZUNvbnRlbnRzUmVjdCgpKTsKLX0K
LQogY2xhc3MgRGVmZXJyZWRUYXNrU2V0Rm9jdXNlZDogcHVibGljIERlZmVycmVkVGFzazwmV2Vi
UGFnZVByaXZhdGU6Om1fd291bGRTZXRGb2N1c2VkPiB7CiBwdWJsaWM6CiAgICAgZXhwbGljaXQg
RGVmZXJyZWRUYXNrU2V0Rm9jdXNlZChXZWJQYWdlUHJpdmF0ZSogd2ViUGFnZVByaXZhdGUsIGJv
b2wgZm9jdXNlZCkKQEAgLTUwMjksOSArNDkwMSw5IEBAIFdlYkRPTURvY3VtZW50IFdlYlBhZ2U6
OmRvY3VtZW50KCkgY29uc3QKICAgICByZXR1cm4gV2ViRE9NRG9jdW1lbnQoZC0+bV9tYWluRnJh
bWUtPmRvY3VtZW50KCkpOwogfQogCi1XZWJET01Ob2RlIFdlYlBhZ2U6Om5vZGVBdFBvaW50KGlu
dCB4LCBpbnQgeSkKK1dlYkRPTU5vZGUgV2ViUGFnZTo6bm9kZUF0RG9jdW1lbnRQb2ludChjb25z
dCBQbGF0Zm9ybTo6SW50UG9pbnQmIGRvY3VtZW50UG9pbnQpCiB7Ci0gICAgSGl0VGVzdFJlc3Vs
dCByZXN1bHQgPSBkLT5tX21haW5GcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmhpdFRlc3RSZXN1bHRB
dFBvaW50KGQtPm1hcEZyb21UcmFuc2Zvcm1lZChJbnRQb2ludCh4LCB5KSksIGZhbHNlKTsKKyAg
ICBIaXRUZXN0UmVzdWx0IHJlc3VsdCA9IGQtPm1fbWFpbkZyYW1lLT5ldmVudEhhbmRsZXIoKS0+
aGl0VGVzdFJlc3VsdEF0UG9pbnQoV2ViQ29yZTo6SW50UG9pbnQoZG9jdW1lbnRQb2ludCksIGZh
bHNlKTsKICAgICBOb2RlKiBub2RlID0gcmVzdWx0LmlubmVyTm9uU2hhcmVkTm9kZSgpOwogICAg
IHJldHVybiBXZWJET01Ob2RlKG5vZGUpOwogfQpAQCAtNTc1MiwxNiArNTYyNCwxMyBAQCB2b2lk
IFdlYlBhZ2VQcml2YXRlOjplbnRlckZ1bGxzY3JlZW5Gb3JOb2RlKE5vZGUqIG5vZGUpCiAgICAg
aWYgKCF3aW5kb3cpCiAgICAgICAgIHJldHVybjsKIAotICAgIHVuc2lnbmVkIHgsIHksIHdpZHRo
LCBoZWlnaHQ7Ci0gICAgbW1yUGxheWVyLT5nZXRXaW5kb3dQb3NpdGlvbih4LCB5LCB3aWR0aCwg
aGVpZ2h0KTsKLQogICAgIGNvbnN0IGNoYXIqIGNvbnRleHROYW1lID0gbW1yUGxheWVyLT5tbXJD
b250ZXh0TmFtZSgpOwogICAgIGlmICghY29udGV4dE5hbWUpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIG1tclBsYXllci0+c2V0RnVsbHNjcmVlbldlYlBhZ2VDbGllbnQobV9jbGllbnQpOwogICAg
IG1fZnVsbHNjcmVlblZpZGVvTm9kZSA9IG5vZGU7Ci0gICAgbV9jbGllbnQtPmZ1bGxzY3JlZW5T
dGFydChjb250ZXh0TmFtZSwgd2luZG93LCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICBtX2Ns
aWVudC0+ZnVsbHNjcmVlblN0YXJ0KGNvbnRleHROYW1lLCB3aW5kb3csIG1tclBsYXllci0+Z2V0
V2luZG93U2NyZWVuUmVjdCgpKTsKICNlbmRpZgogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2JsYWNrYmVycnkvQXBpL1dlYlBhZ2UuaCBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9B
cGkvV2ViUGFnZS5oCmluZGV4IGFlNTlkOGY3YTVlOTkxYWZlNzJmNTM5MTEzZjI4OGYyZjQxNjg3
NmMuLmE4OTk5ZGIzN2I5OThjNDk3MTA2MmZkY2Q4MGMzZDI5ZTg0ZWYwNDYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViUGFnZS5oCisrKyBiL1NvdXJjZS9XZWJL
aXQvYmxhY2tiZXJyeS9BcGkvV2ViUGFnZS5oCkBAIC01MCw2ICs1MCw3IEBAIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+IGNsYXNzIFNoYXJlZEFycmF5OwogCiBuYW1lc3BhY2UgQmxhY2tCZXJyeSB7CiBu
YW1lc3BhY2UgUGxhdGZvcm0geworY2xhc3MgRmxvYXRQb2ludDsKIGNsYXNzIEludFBvaW50Owog
Y2xhc3MgSW50UmVjdDsKIGNsYXNzIEludFNpemU7CkBAIC0xMzksMTMgKzE0MCwxMyBAQCBwdWJs
aWM6CiAKICAgICBQbGF0Zm9ybTo6Vmlld3BvcnRBY2Nlc3Nvciogd2Via2l0VGhyZWFkVmlld3Bv
cnRBY2Nlc3NvcigpIGNvbnN0OwogICAgIFBsYXRmb3JtOjpJbnRTaXplIHZpZXdwb3J0U2l6ZSgp
IGNvbnN0OwotICAgIHZvaWQgc2V0Vmlld3BvcnRTaXplKGNvbnN0IFBsYXRmb3JtOjpJbnRTaXpl
JiB2aWV3cG9ydFNpemUsIGJvb2wgZW5zdXJlRm9jdXNFbGVtZW50VmlzaWJsZSA9IHRydWUpOwor
ICAgIHZvaWQgc2V0Vmlld3BvcnRTaXplKGNvbnN0IFBsYXRmb3JtOjpJbnRTaXplJiwgYm9vbCBl
bnN1cmVGb2N1c0VsZW1lbnRWaXNpYmxlID0gdHJ1ZSk7CiAKICAgICB2b2lkIHJlc2V0VmlydHVh
bFZpZXdwb3J0T25Db21taXR0ZWQoYm9vbCByZXNldCk7Ci0gICAgdm9pZCBzZXRWaXJ0dWFsVmll
d3BvcnRTaXplKGludCB3aWR0aCwgaW50IGhlaWdodCk7CisgICAgdm9pZCBzZXRWaXJ0dWFsVmll
d3BvcnRTaXplKGNvbnN0IFBsYXRmb3JtOjpJbnRTaXplJik7CiAKICAgICAvLyBVc2VkIGZvciBk
ZWZhdWx0IGxheW91dCBzaXplIHVubGVzcyBvdmVycmlkZGVuIGJ5IHdlYiBjb250ZW50IG9yIGJ5
IG90aGVyIEFQSXMuCi0gICAgdm9pZCBzZXREZWZhdWx0TGF5b3V0U2l6ZShpbnQgd2lkdGgsIGlu
dCBoZWlnaHQpOworICAgIHZvaWQgc2V0RGVmYXVsdExheW91dFNpemUoY29uc3QgUGxhdGZvcm06
OkludFNpemUmKTsKIAogICAgIGJvb2wgbW91c2VFdmVudChjb25zdCBQbGF0Zm9ybTo6TW91c2VF
dmVudCYsIGJvb2wqIHdoZWVsRGVsdGFBY2NlcHRlZCA9IDApOwogCkBAIC0xNzUsMjggKzE3Niwy
MyBAQCBwdWJsaWM6CiAgICAgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyBmb3JjZWRUZXh0
RW5jb2RpbmcoKTsKICAgICB2b2lkIHNldEZvcmNlZFRleHRFbmNvZGluZyhjb25zdCBCbGFja0Jl
cnJ5OjpQbGF0Zm9ybTo6U3RyaW5nJik7CiAKLSAgICAvLyBTY3JvbGwgcG9zaXRpb24gcmV0dXJu
ZWQgaXMgaW4gdHJhbnNmb3JtZWQgY29vcmRpbmF0ZXMuCi0gICAgUGxhdGZvcm06OkludFBvaW50
IHNjcm9sbFBvc2l0aW9uKCkgY29uc3Q7Ci0gICAgLy8gU2Nyb2xsIHBvc2l0aW9uIHByb3ZpZGVk
IHNob3VsZCBiZSBpbiB0cmFuc2Zvcm1lZCBjb29yZGluYXRlcy4KLSAgICB2b2lkIHNldFNjcm9s
bFBvc2l0aW9uKGNvbnN0IFBsYXRmb3JtOjpJbnRQb2ludCYpOwotICAgIHZvaWQgc2Nyb2xsQnko
Y29uc3QgUGxhdGZvcm06OkludFNpemUmKTsKKyAgICAvLyBTY3JvbGwgcG9zaXRpb24gcHJvdmlk
ZWQgc2hvdWxkIGJlIGluIGRvY3VtZW50IGNvb3JkaW5hdGVzLgorICAgIC8vIFVzZSB3ZWJraXRU
aHJlYWRWaWV3cG9ydEFjY2Vzc29yKCkgdG8gcmV0cmlldmUgdGhlIHNjcm9sbCBwb3NpdGlvbi4K
KyAgICB2b2lkIHNldERvY3VtZW50U2Nyb2xsUG9zaXRpb24oY29uc3QgUGxhdGZvcm06OkludFBv
aW50Jik7CiAgICAgdm9pZCBub3RpZnlJblJlZ2lvblNjcm9sbFN0b3BwZWQoKTsKLSAgICB2b2lk
IHNldFNjcm9sbE9yaWdpblBvaW50KGNvbnN0IFBsYXRmb3JtOjpJbnRQb2ludCYpOworICAgIHZv
aWQgc2V0RG9jdW1lbnRTY3JvbGxPcmlnaW5Qb2ludChjb25zdCBQbGF0Zm9ybTo6SW50UG9pbnQm
KTsKIAogICAgIEJhY2tpbmdTdG9yZSogYmFja2luZ1N0b3JlKCkgY29uc3Q7CiAKICAgICBJblJl
Z2lvblNjcm9sbGVyKiBpblJlZ2lvblNjcm9sbGVyKCkgY29uc3Q7CiAKLSAgICBib29sIHpvb21U
b0ZpdCgpOwotICAgIGJvb2wgem9vbVRvT25lT25lKCk7Ci0gICAgdm9pZCB6b29tVG9Jbml0aWFs
U2NhbGUoKTsKLSAgICBib29sIGJsb2NrWm9vbShpbnQgeCwgaW50IHkpOworICAgIGJvb2wgYmxv
Y2tab29tKGNvbnN0IFBsYXRmb3JtOjpJbnRQb2ludCYgZG9jdW1lbnRUYXJnZXRQb2ludCk7CiAg
ICAgdm9pZCBibG9ja1pvb21BbmltYXRpb25GaW5pc2hlZCgpOwogICAgIHZvaWQgcmVzZXRCbG9j
a1pvb20oKTsKICAgICBib29sIGlzQXRJbml0aWFsWm9vbSgpIGNvbnN0OwogICAgIGJvb2wgaXNN
YXhab29tZWQoKSBjb25zdDsKICAgICBib29sIGlzTWluWm9vbWVkKCkgY29uc3Q7Ci0gICAgYm9v
bCBwaW5jaFpvb21BYm91dFBvaW50KGRvdWJsZSBzY2FsZSwgaW50IHgsIGludCB5KTsKKyAgICBi
b29sIHBpbmNoWm9vbUFib3V0UG9pbnQoZG91YmxlIHNjYWxlLCBjb25zdCBQbGF0Zm9ybTo6Rmxv
YXRQb2ludCYgZG9jdW1lbnRGb2NhbFBvaW50KTsKIAogICAgIGJvb2wgaXNVc2VyU2NhbGFibGUo
KSBjb25zdDsKICAgICB2b2lkIHNldFVzZXJTY2FsYWJsZShib29sKTsKQEAgLTI1NCwxMSArMjUw
LDExIEBAIHB1YmxpYzoKICAgICB2b2lkIHNwZWxsQ2hlY2tpbmdSZXF1ZXN0UHJvY2Vzc2VkKGlu
dDMyX3QgdHJhbnNhY3Rpb25JZCwgc3Bhbm5hYmxlX3N0cmluZ190Kik7CiAgICAgdm9pZCBzcGVs
bENoZWNraW5nUmVxdWVzdENhbmNlbGxlZChpbnQzMl90IHRyYW5zYWN0aW9uSWQpOwogCi0gICAg
dm9pZCBzZXRTZWxlY3Rpb24oY29uc3QgUGxhdGZvcm06OkludFBvaW50JiBzdGFydFBvaW50LCBj
b25zdCBQbGF0Zm9ybTo6SW50UG9pbnQmIGVuZFBvaW50KTsKLSAgICB2b2lkIHNldENhcmV0UG9z
aXRpb24oY29uc3QgUGxhdGZvcm06OkludFBvaW50Jik7Ci0gICAgdm9pZCBzZWxlY3RBdFBvaW50
KGNvbnN0IFBsYXRmb3JtOjpJbnRQb2ludCYpOworICAgIHZvaWQgc2V0RG9jdW1lbnRTZWxlY3Rp
b24oY29uc3QgUGxhdGZvcm06OkludFBvaW50JiBkb2N1bWVudFN0YXJ0UG9pbnQsIGNvbnN0IFBs
YXRmb3JtOjpJbnRQb2ludCYgZG9jdW1lbnRFbmRQb2ludCk7CisgICAgdm9pZCBzZXREb2N1bWVu
dENhcmV0UG9zaXRpb24oY29uc3QgUGxhdGZvcm06OkludFBvaW50Jik7CisgICAgdm9pZCBzZWxl
Y3RBdERvY3VtZW50UG9pbnQoY29uc3QgUGxhdGZvcm06OkludFBvaW50Jik7CiAgICAgdm9pZCBz
ZWxlY3Rpb25DYW5jZWxsZWQoKTsKLSAgICBib29sIHNlbGVjdGlvbkNvbnRhaW5zKGNvbnN0IFBs
YXRmb3JtOjpJbnRQb2ludCYpOworICAgIGJvb2wgc2VsZWN0aW9uQ29udGFpbnNEb2N1bWVudFBv
aW50KGNvbnN0IFBsYXRmb3JtOjpJbnRQb2ludCYpOwogCiAgICAgdm9pZCBwb3B1cExpc3RDbG9z
ZWQoaW50IHNpemUsIGNvbnN0IGJvb2wqIHNlbGVjdGVkcyk7CiAgICAgdm9pZCBwb3B1cExpc3RD
bG9zZWQoaW50IGluZGV4KTsKQEAgLTMwMCw3ICsyOTYsNyBAQCBwdWJsaWM6CiAKICNpZiBkZWZp
bmVkKEVOQUJMRV9XRUJET00pICYmIEVOQUJMRV9XRUJET00KICAgICBXZWJET01Eb2N1bWVudCBk
b2N1bWVudCgpIGNvbnN0OwotICAgIFdlYkRPTU5vZGUgbm9kZUF0UG9pbnQoaW50IHgsIGludCB5
KTsKKyAgICBXZWJET01Ob2RlIG5vZGVBdERvY3VtZW50UG9pbnQoY29uc3QgUGxhdGZvcm06Oklu
dFBvaW50Jik7CiAgICAgYm9vbCBnZXROb2RlUmVjdChjb25zdCBXZWJET01Ob2RlJiwgUGxhdGZv
cm06OkludFJlY3QmIHJlc3VsdCk7CiAgICAgYm9vbCBzZXROb2RlRm9jdXMoY29uc3QgV2ViRE9N
Tm9kZSYsIGJvb2wgb24pOwogICAgIGJvb2wgc2V0Tm9kZUhvdmVyZWQoY29uc3QgV2ViRE9NTm9k
ZSYsIGJvb2wgb24pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9X
ZWJQYWdlQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYlBhZ2VDbGll
bnQuaAppbmRleCA4ZGE0YTRmOTNjNTM3NTQ2YWEwNjRiYzE1MzVlMTQyZjAxOTg0ZjQwLi5jYzgy
N2Q3MjY3YjhmNTQ0ZWYzNGVkZTVhZjllZTY1OTFlYTIxYjI1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYlBhZ2VDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0
L2JsYWNrYmVycnkvQXBpL1dlYlBhZ2VDbGllbnQuaApAQCAtMTI4LDEwICsxMjgsMTAgQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgdm9pZCBqYXZhc2NyaXB0UGF1c2VkKGNvbnN0IHVuc2lnbmVkIHNo
b3J0KiBzdGFjaywgdW5zaWduZWQgc3RhY2tMZW5ndGgpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQg
amF2YXNjcmlwdENvbnRpbnVlZCgpID0gMDsKIAotICAgIC8vIEFsbCBvZiB0aGVzZSBtZXRob2Rz
IHVzZSB0cmFuc2Zvcm1lZCBjb29yZGluYXRlcy4KLSAgICB2aXJ0dWFsIHZvaWQgY29udGVudHNT
aXplQ2hhbmdlZChjb25zdCBQbGF0Zm9ybTo6SW50U2l6ZSYpIGNvbnN0ID0gMDsKLSAgICB2aXJ0
dWFsIHZvaWQgc2Nyb2xsQ2hhbmdlZChjb25zdCBQbGF0Zm9ybTo6SW50UG9pbnQmKSBjb25zdCA9
IDA7Ci0gICAgdmlydHVhbCB2b2lkIHpvb21DaGFuZ2VkKGJvb2wgaXNNaW5ab29tZWQsIGJvb2wg
aXNNYXhab29tZWQsIGJvb2wgaXNBdEluaXRpYWxab29tLCBkb3VibGUgbmV3Wm9vbSkgY29uc3Qg
PSAwOworICAgIHZpcnR1YWwgdm9pZCBjb250ZW50c1NpemVDaGFuZ2VkKCkgPSAwOworICAgIHZp
cnR1YWwgdm9pZCBzY3JvbGxDaGFuZ2VkKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzY2FsZUNo
YW5nZWQoKSA9IDA7CisKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlSW50ZXJhY3Rpb25WaWV3cygp
ID0gMDsKIAogICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0VXBkYXRlVmlld3BvcnQoaW50IHdpZHRo
LCBpbnQgaGVpZ2h0KSA9IDA7CkBAIC0xNDAsNyArMTQwLDcgQEAgcHVibGljOgogCiAgICAgdmly
dHVhbCBQbGF0Zm9ybTo6R3JhcGhpY3M6OldpbmRvdyogd2luZG93KCkgY29uc3QgPSAwOwogCi0g
ICAgdmlydHVhbCB2b2lkIG5vdGlmeUNvbnRlbnRSZW5kZXJlZChjb25zdCBQbGF0Zm9ybTo6SW50
UmVjdCYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5UGl4ZWxDb250ZW50UmVuZGVyZWQo
Y29uc3QgUGxhdGZvcm06OkludFJlY3QmKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHJlc2l6ZVN1
cmZhY2VJZk5lZWRlZCgpID0gMDsKIAogICAgIHZpcnR1YWwgdm9pZCBpbnB1dEZvY3VzR2FpbmVk
KGludDY0X3QgaW5wdXRTdHlsZSwgUGxhdGZvcm06OlZpcnR1YWxLZXlib2FyZFR5cGUsIFBsYXRm
b3JtOjpWaXJ0dWFsS2V5Ym9hcmRFbnRlcktleVR5cGUpID0gMDsKQEAgLTE1NCwxMiArMTU0LDEy
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcmVxdWVzdFNwZWxsaW5nQ2hlY2tpbmdPcHRp
b25zKGltZl9zcF90ZXh0X3QmKSA9IDA7CiAgICAgdmlydHVhbCBpbnQzMl90IGNoZWNrU3BlbGxp
bmdPZlN0cmluZ0FzeW5jKHdjaGFyX3QqIHRleHQsIGludCBsZW5ndGgpID0gMDsKIAotICAgIHZp
cnR1YWwgdm9pZCBub3RpZnlTZWxlY3Rpb25EZXRhaWxzQ2hhbmdlZChjb25zdCBQbGF0Zm9ybTo6
SW50UmVjdCYgc3RhcnQsIGNvbnN0IFBsYXRmb3JtOjpJbnRSZWN0JiBlbmQsIGNvbnN0IFBsYXRm
b3JtOjpJbnRSZWN0UmVnaW9uJiwgYm9vbCBvdmVycmlkZVRvdWNoSGFuZGxpbmcgPSBmYWxzZSkg
PSAwOworICAgIHZpcnR1YWwgdm9pZCBub3RpZnlTZWxlY3Rpb25EZXRhaWxzQ2hhbmdlZChjb25z
dCBQbGF0Zm9ybTo6SW50UmVjdCYgZG9jdW1lbnRTdGFydFJlY3QsIGNvbnN0IFBsYXRmb3JtOjpJ
bnRSZWN0JiBkb2N1bWVudEVuZFJlY3QsIGNvbnN0IFBsYXRmb3JtOjpJbnRSZWN0UmVnaW9uJiBk
b2N1bWVudFJlZ2lvbiwgYm9vbCBvdmVycmlkZVRvdWNoSGFuZGxpbmcgPSBmYWxzZSkgPSAwOwog
ICAgIHZpcnR1YWwgdm9pZCBjYW5jZWxTZWxlY3Rpb25WaXN1YWxzKCkgPSAwOwogICAgIHZpcnR1
YWwgdm9pZCBub3RpZnlTZWxlY3Rpb25IYW5kbGVzUmV2ZXJzZWQoKSA9IDA7Ci0gICAgdmlydHVh
bCB2b2lkIG5vdGlmeUNhcmV0Q2hhbmdlZChjb25zdCBQbGF0Zm9ybTo6SW50UmVjdCYgY2FyZXQs
IGJvb2wgdXNlclRvdWNoVHJpZ2dlcmVkLCBib29sIHNpbmdsZUxpbmVJbnB1dCA9IGZhbHNlLCBj
b25zdCBQbGF0Zm9ybTo6SW50UmVjdCYgc2luZ2xlTGluZUJvdW5kaW5nQm94ID0gUGxhdGZvcm06
OkludFJlY3QoKSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBub3RpZnlDYXJldENoYW5nZWQoY29u
c3QgUGxhdGZvcm06OkludFJlY3QmIGRvY3VtZW50Q2FyZXRSZWN0LCBib29sIHVzZXJUb3VjaFRy
aWdnZXJlZCwgYm9vbCBpc1NpbmdsZUxpbmVJbnB1dCA9IGZhbHNlLCBjb25zdCBQbGF0Zm9ybTo6
SW50UmVjdCYgc2luZ2xlTGluZURvY3VtZW50Qm91bmRpbmdCb3ggPSBQbGF0Zm9ybTo6SW50UmVj
dCgpKSA9IDA7CiAKLSAgICB2aXJ0dWFsIHZvaWQgY3Vyc29yQ2hhbmdlZChQbGF0Zm9ybTo6Q3Vy
c29yVHlwZSwgY29uc3QgY2hhciogdXJsLCBpbnQgeCwgaW50IHkpID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgY3Vyc29yQ2hhbmdlZChQbGF0Zm9ybTo6Q3Vyc29yVHlwZSwgY29uc3QgY2hhciogdXJs
LCBjb25zdCBQbGF0Zm9ybTo6SW50UG9pbnQmIGhvdFNwb3RJbkltYWdlKSA9IDA7CiAKICAgICB2
aXJ0dWFsIHZvaWQgcmVxdWVzdEdsb2JhbExvY2FsU2VydmljZVBlcm1pc3Npb24oUGxhdGZvcm06
Okdlb1RyYWNrZXJMaXN0ZW5lciosIGNvbnN0IEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcm
IG9yaWdpbikgPSAwOwogCkBAIC0xNzUsMTYgKzE3NSw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IHZvaWQgb3BlblBvcHVwTGlzdChib29sIG11bHRpcGxlLCBpbnQgc2l6ZSwgY29uc3QgU2NvcGVB
cnJheTxCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nPiYgbGFiZWxzLCBjb25zdCBib29sKiBl
bmFibGVkcywgY29uc3QgaW50KiBpdGVtVHlwZSwgY29uc3QgYm9vbCogc2VsZWN0ZWRzKSA9IDA7
CiAgICAgdmlydHVhbCBib29sIGNob29zZUZpbGVuYW1lcyhib29sIGFsbG93TXVsdGlwbGUsIGNv
bnN0IFNoYXJlZEFycmF5PEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmc+JiBhY2NlcHRUeXBl
cywgY29uc3QgU2hhcmVkQXJyYXk8QmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZz4mIGluaXRp
YWxGaWxlcywgY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyYgY2FwdHVyZSwgU2hh
cmVkQXJyYXk8QmxhY2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZz4mIGNob3NlbkZpbGVzKSA9IDA7
CiAKLSAgICB2aXJ0dWFsIHZvaWQgbG9hZFBsdWdpbkZvck1pbWV0eXBlKGludCwgaW50IHdpZHRo
LCBpbnQgaGVpZ2h0LCBjb25zdCBTaGFyZWRBcnJheTxCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3Ry
aW5nPiYgcGFyYW1OYW1lcywgY29uc3QgU2hhcmVkQXJyYXk8QmxhY2tCZXJyeTo6UGxhdGZvcm06
OlN0cmluZz4mIHBhcmFtVmFsdWVzLCBjb25zdCBjaGFyKiB1cmwpID0gMDsKLSAgICB2aXJ0dWFs
IHZvaWQgbm90aWZ5UGx1Z2luUmVjdENoYW5nZWQoaW50LCBQbGF0Zm9ybTo6SW50UmVjdCByZWN0
Q2hhbmdlZCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95UGx1Z2luKGludCkgPSAwOwot
ICAgIHZpcnR1YWwgdm9pZCBwbGF5TWVkaWEoaW50KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHBh
dXNlTWVkaWEoaW50KSA9IDA7Ci0gICAgdmlydHVhbCBmbG9hdCBnZXRUaW1lKGludCkgPSAwOwot
ICAgIHZpcnR1YWwgdm9pZCBzZXRUaW1lKGludCwgZmxvYXQpID0gMDsKLSAgICB2aXJ0dWFsIHZv
aWQgc2V0Vm9sdW1lKGludCwgZmxvYXQpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0TXV0ZWQo
aW50LCBib29sKSA9IDA7Ci0KICAgICB2aXJ0dWFsIFdlYlBhZ2UqIGNyZWF0ZVdpbmRvdyhpbnQg
eCwgaW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCwgdW5zaWduZWQgZmxhZ3MsIGNvbnN0IEJs
YWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcmIHVybCwgY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZv
cm06OlN0cmluZyYgd2luZG93TmFtZSkgPSAwOwogCiAgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxl
Q2xvc2VXaW5kb3coKSA9IDA7CkBAIC0yMTMsMTMgKzIwMywxMyBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6Vmlld3BvcnRBY2Nlc3NvciogdXNlckludGVyZmFj
ZVZpZXdwb3J0QWNjZXNzb3IoKSBjb25zdCA9IDA7CiAKICAgICB2aXJ0dWFsIHZvaWQgcmVzZXRC
aXRtYXBab29tU2NhbGUoZG91YmxlIHNjYWxlKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGFuaW1h
dGVCbG9ja1pvb20oY29uc3QgUGxhdGZvcm06OkZsb2F0UG9pbnQmIGZpbmFsUG9pbnQsIGRvdWJs
ZSBmaW5hbFNjYWxlKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGFuaW1hdGVCbG9ja1pvb20oZG91
YmxlIGZpbmFsU2NhbGUsIGNvbnN0IFBsYXRmb3JtOjpGbG9hdFBvaW50JiBmaW5hbERvY3VtZW50
U2Nyb2xsUG9zaXRpb24pID0gMDsKIAogICAgIHZpcnR1YWwgdm9pZCBzZXRQcmV2ZW50c1NjcmVl
bklkbGVEaW1taW5nKGJvb2wgbm9EaW1taW5nKSA9IDA7CiAgICAgdmlydHVhbCBib29sIGF1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlKGNvbnN0IHVuc2lnbmVkIHNob3J0KiByZWFsbSwgdW5zaWduZWQg
cmVhbG1MZW5ndGgsIEJsYWNrQmVycnk6OlBsYXRmb3JtOjpTdHJpbmcmIHVzZXJuYW1lLCBCbGFj
a0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5nJiBwYXNzd29yZCkgPSAwOwogICAgIHZpcnR1YWwgU2F2
ZUNyZWRlbnRpYWxUeXBlIG5vdGlmeVNob3VsZFNhdmVDcmVkZW50aWFsKGJvb2wgaXNOZXcpID0g
MDsKICAgICB2aXJ0dWFsIHZvaWQgc3luY1Byb3h5Q3JlZGVudGlhbChjb25zdCBCbGFja0JlcnJ5
OjpQbGF0Zm9ybTo6U3RyaW5nJiB1c2VybmFtZSwgY29uc3QgQmxhY2tCZXJyeTo6UGxhdGZvcm06
OlN0cmluZyYgcGFzc3dvcmQpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5UG9wdXBBdXRv
ZmlsbERpYWxvZyhjb25zdCBzdGQ6OnZlY3RvcjxCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6U3RyaW5n
PiYsIGNvbnN0IFBsYXRmb3JtOjpJbnRSZWN0JikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBub3Rp
ZnlQb3B1cEF1dG9maWxsRGlhbG9nKGNvbnN0IHN0ZDo6dmVjdG9yPEJsYWNrQmVycnk6OlBsYXRm
b3JtOjpTdHJpbmc+JikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBub3RpZnlEaXNtaXNzQXV0b2Zp
bGxEaWFsb2coKSA9IDA7CiAKICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkUGx1Z2luRW50ZXJGdWxs
U2NyZWVuKCkgPSAwOwpAQCAtMjQyLDExICsyMzIsMTEgQEAgcHVibGljOgogICAgIHZpcnR1YWwg
dm9pZCBkb3dubG9hZFJlcXVlc3RlZChQbGF0Zm9ybTo6RmlsdGVyU3RyZWFtKiwgY29uc3QgQmxh
Y2tCZXJyeTo6UGxhdGZvcm06OlN0cmluZyYgc3VnZ2VzdGVkRmlsZW5hbWUpID0gMDsKIAogICAg
IHZpcnR1YWwgaW50IGZ1bGxzY3JlZW5TdGFydCgpID0gMDsKLSAgICB2aXJ0dWFsIGludCBmdWxs
c2NyZWVuU3RhcnQoY29uc3QgY2hhciogY29udGV4dE5hbWUsIFBsYXRmb3JtOjpHcmFwaGljczo6
V2luZG93KiwgdW5zaWduZWQgeCwgdW5zaWduZWQgeSwgdW5zaWduZWQgd2lkdGgsIHVuc2lnbmVk
IGhlaWdodCkgPSAwOworICAgIHZpcnR1YWwgaW50IGZ1bGxzY3JlZW5TdGFydChjb25zdCBjaGFy
KiBjb250ZXh0TmFtZSwgUGxhdGZvcm06OkdyYXBoaWNzOjpXaW5kb3cqLCBjb25zdCBCbGFja0Jl
cnJ5OjpQbGF0Zm9ybTo6SW50UmVjdCYgd2luZG93U2NyZWVuUmVjdCkgPSAwOwogCiAgICAgdmly
dHVhbCBpbnQgZnVsbHNjcmVlblN0b3AoKSA9IDA7CiAKLSAgICB2aXJ0dWFsIGludCBmdWxsc2Ny
ZWVuV2luZG93U2V0KHVuc2lnbmVkIHgsIHVuc2lnbmVkIHksIHVuc2lnbmVkIHdpZHRoLCB1bnNp
Z25lZCBoZWlnaHQpID0gMDsKKyAgICB2aXJ0dWFsIGludCBmdWxsc2NyZWVuU2V0V2luZG93UmVj
dChjb25zdCBCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6SW50UmVjdCYgbmV3V2luZG93U2NyZWVuUmVj
dCkgPSAwOwogCiAgICAgdmlydHVhbCB2b2lkIGRyYXdWZXJ0aWNhbFNjcm9sbGJhcigpID0gMDsK
ICAgICB2aXJ0dWFsIHZvaWQgZHJhd0hvcml6b250YWxTY3JvbGxiYXIoKSA9IDA7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYlBhZ2VfcC5oIGIvU291cmNlL1dl
YktpdC9ibGFja2JlcnJ5L0FwaS9XZWJQYWdlX3AuaAppbmRleCBkZTMyMTI4ZjBiNzY1ZGI0MmMx
YTE2YzlmYzY5MzZlNDM1NTYzZTE0Li40MzMxYjNlZDkyMGMyZDViMDNlZTU3YmM3NGYzNTQzZTY1
YjkwZWZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL1dlYlBhZ2Vf
cC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvV2ViUGFnZV9wLmgKQEAgLTE1
Miw3ICsxNTIsNiBAQCBwdWJsaWM6CiAgICAgV2ViQ29yZTo6SW50UG9pbnQgc2Nyb2xsUG9zaXRp
b24oKSBjb25zdDsKICAgICBXZWJDb3JlOjpJbnRQb2ludCBtYXhpbXVtU2Nyb2xsUG9zaXRpb24o
KSBjb25zdDsKICAgICB2b2lkIHNldFNjcm9sbFBvc2l0aW9uKGNvbnN0IFdlYkNvcmU6OkludFBv
aW50Jik7Ci0gICAgdm9pZCBzY3JvbGxCeShpbnQgZGVsdGFYLCBpbnQgZGVsdGFZKTsKIAogICAg
IHZvaWQgbm90aWZ5SW5SZWdpb25TY3JvbGxTdG9wcGVkKCk7CiAgICAgdm9pZCBzZXRTY3JvbGxP
cmlnaW5Qb2ludChjb25zdCBQbGF0Zm9ybTo6SW50UG9pbnQmKTsKQEAgLTIxOCw3ICsyMTcsNyBA
QCBwdWJsaWM6CiAgICAgdm9pZCBvdmVyZmxvd0V4Y2VlZHNDb250ZW50c1NpemUoKSB7IG1fb3Zl
cmZsb3dFeGNlZWRzQ29udGVudHNTaXplID0gdHJ1ZTsgfQogICAgIHZvaWQgbGF5b3V0RmluaXNo
ZWQoKTsKICAgICB2b2lkIHNldE5lZWRUb3VjaEV2ZW50cyhib29sKTsKLSAgICB2b2lkIG5vdGlm
eVBvcHVwQXV0b2ZpbGxEaWFsb2coY29uc3QgVmVjdG9yPFN0cmluZz4mLCBjb25zdCBXZWJDb3Jl
OjpJbnRSZWN0Jik7CisgICAgdm9pZCBub3RpZnlQb3B1cEF1dG9maWxsRGlhbG9nKGNvbnN0IFZl
Y3RvcjxTdHJpbmc+Jik7CiAgICAgdm9pZCBub3RpZnlEaXNtaXNzQXV0b2ZpbGxEaWFsb2coKTsK
IAogICAgIGJvb2wgc2hvdWxkWm9vbVRvSW5pdGlhbFNjYWxlT25Mb2FkKCkgY29uc3QgeyByZXR1
cm4gbG9hZFN0YXRlKCkgPT0gQ29tbWl0dGVkIHx8IG1fc2hvdWxkWm9vbVRvSW5pdGlhbFNjYWxl
QWZ0ZXJMb2FkRmluaXNoZWQ7IH0KQEAgLTMwNCw5ICszMDMsNiBAQCBwdWJsaWM6CiAgICAgZG91
YmxlIG5ld1NjYWxlRm9yQmxvY2tab29tUmVjdChjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiwgZG91
YmxlIG9sZFNjYWxlLCBkb3VibGUgbWFyZ2luKTsKICAgICBkb3VibGUgbWF4QmxvY2tab29tU2Nh
bGUoKSBjb25zdDsKIAotICAgIC8vIFBsdWdpbiBNZXRob2RzLgotICAgIHZvaWQgbm90aWZ5UGx1
Z2luUmVjdENoYW5nZWQoaW50IGlkLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiByZWN0Q2hhbmdl
ZCk7Ci0KICAgICAvLyBDb250ZXh0IE1ldGhvZHMuCiAgICAgUGxhdGZvcm06OldlYkNvbnRleHQg
d2ViQ29udGV4dChUYXJnZXREZXRlY3Rpb25TdHJhdGVneSk7CiAgICAgUGFzc1JlZlB0cjxXZWJD
b3JlOjpOb2RlPiBjb250ZXh0Tm9kZShUYXJnZXREZXRlY3Rpb25TdHJhdGVneSk7CkBAIC0zNDcs
NyArMzQzLDcgQEAgcHVibGljOgogI2VuZGlmCiAKICAgICB2b2lkIGRpc3BhdGNoVmlld3BvcnRQ
cm9wZXJ0aWVzRGlkQ2hhbmdlKGNvbnN0IFdlYkNvcmU6OlZpZXdwb3J0QXJndW1lbnRzJik7Ci0g
ICAgV2ViQ29yZTo6SW50U2l6ZSByZWNvbXB1dGVWaXJ0dWFsVmlld3BvcnRGcm9tVmlld3BvcnRB
cmd1bWVudHMoKTsKKyAgICBQbGF0Zm9ybTo6SW50U2l6ZSByZWNvbXB1dGVWaXJ0dWFsVmlld3Bv
cnRGcm9tVmlld3BvcnRBcmd1bWVudHMoKTsKIAogICAgIHZvaWQgcmVzZXRCbG9ja1pvb20oKTsK
IApAQCAtMzc4LDkgKzM3NCw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHdpbGxEZWZlckxvYWRpbmco
KTsKICAgICB2b2lkIGRpZFJlc3VtZUxvYWRpbmcoKTsKIAotICAgIC8vIFJldHVybnMgdHJ1ZSBp
ZiB0aGUgZXNjYXBlIGtleSBoYW5kbGVyIHNob3VsZCB6b29tLgotICAgIGJvb2wgc2hvdWxkWm9v
bU9uRXNjYXBlKCkgY29uc3Q7Ci0KICAgICBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCog
dHJhbnNmb3JtYXRpb25NYXRyaXgoKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIG1fdHJh
bnNmb3JtYXRpb25NYXRyaXg7CkBAIC01MDEsOCArNDk0LDcgQEAgcHVibGljOgogICAgIFdlYkNv
cmU6OkludFNpemUgbV9wcmV2aW91c0NvbnRlbnRzU2l6ZTsKICAgICBpbnQgbV9hY3R1YWxWaXNp
YmxlV2lkdGg7CiAgICAgaW50IG1fYWN0dWFsVmlzaWJsZUhlaWdodDsKLSAgICBpbnQgbV92aXJ0
dWFsVmlld3BvcnRXaWR0aDsKLSAgICBpbnQgbV92aXJ0dWFsVmlld3BvcnRIZWlnaHQ7CisgICAg
V2ViQ29yZTo6SW50U2l6ZSBtX3ZpcnR1YWxWaWV3cG9ydFNpemU7CiAgICAgV2ViQ29yZTo6SW50
U2l6ZSBtX2RlZmF1bHRMYXlvdXRTaXplOwogICAgIFdlYkNvcmU6OlZpZXdwb3J0QXJndW1lbnRz
IG1fdmlld3BvcnRBcmd1bWVudHM7IC8vIFdlIGtlZXAgdGhpcyBhcm91bmQgc2luY2Ugd2UgbWF5
IG5lZWQgdG8gcmUtZXZhbHVhdGUgdGhlIGFyZ3VtZW50cyBvbiByb3RhdGlvbi4KICAgICBXZWJD
b3JlOjpWaWV3cG9ydEFyZ3VtZW50cyBtX3VzZXJWaWV3cG9ydEFyZ3VtZW50czsgLy8gQSBmYWxs
YmFjayBzZXQgb2YgVmlld3BvcnQgQXJndW1lbnRzIHN1cHBsaWVkIGJ5IHRoZSBXZWJQYWdlQ2xp
ZW50CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1cHBvcnQv
QXV0b2ZpbGxNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJDb3JlU3Vw
cG9ydC9BdXRvZmlsbE1hbmFnZXIuY3BwCmluZGV4IDQ0YTA1ZjJmNGZmMzY1MGQyOTk3MWFiNjBk
M2UyNDBhMzIwNGYwOGQuLjFiNzllM2VlYTc1YmI4YTUzNjU1MTQ1ZDJkNTlhZDExZWIzZTM5OTIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJDb3JlU3VwcG9ydC9BdXRv
ZmlsbE1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9XZWJDb3JlU3Vw
cG9ydC9BdXRvZmlsbE1hbmFnZXIuY3BwCkBAIC00OCw3ICs0OCw3IEBAIHZvaWQgQXV0b2ZpbGxN
YW5hZ2VyOjpkaWRDaGFuZ2VJblRleHRGaWVsZChIVE1MSW5wdXRFbGVtZW50KiBlbGVtZW50KQog
ICAgICAgICBtX2VsZW1lbnQgPSBlbGVtZW50OwogCiAgICAgVmVjdG9yPFN0cmluZz4gY2FuZGlk
YXRlcyA9IGF1dG9maWxsQmFja2luZ1N0b3JlKCkuZ2V0KGVsZW1lbnQtPmdldEF0dHJpYnV0ZShI
VE1MTmFtZXM6Om5hbWVBdHRyKS5zdHJpbmcoKSwgZWxlbWVudC0+dmFsdWUoKSk7Ci0gICAgbV93
ZWJQYWdlUHJpdmF0ZS0+bm90aWZ5UG9wdXBBdXRvZmlsbERpYWxvZyhjYW5kaWRhdGVzLCBlbGVt
ZW50LT5zY3JlZW5SZWN0KCkpOworICAgIG1fd2ViUGFnZVByaXZhdGUtPm5vdGlmeVBvcHVwQXV0
b2ZpbGxEaWFsb2coY2FuZGlkYXRlcyk7CiB9CiAKIHZvaWQgQXV0b2ZpbGxNYW5hZ2VyOjp0ZXh0
RmllbGREaWRFbmRFZGl0aW5nKEhUTUxJbnB1dEVsZW1lbnQqKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9ibGFja2JlcnJ5L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50QmxhY2tC
ZXJyeS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1cHBvcnQvRnJhbWVM
b2FkZXJDbGllbnRCbGFja0JlcnJ5LmNwcAppbmRleCA0YjBmZDliNGE0NTc5NGNmZGU3MmRjYTU1
NjNkYzQwYTkzNWRjMzEzLi45NjY5YzkzOGJkODk4MTRhOGNmMzE2ZDc5MzA5MDJmZTQ5NDM5OTdk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViQ29yZVN1cHBvcnQvRnJh
bWVMb2FkZXJDbGllbnRCbGFja0JlcnJ5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVy
cnkvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRCbGFja0JlcnJ5LmNwcApAQCAtODgz
LDcgKzg4Myw3IEBAIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRCbGFja0JlcnJ5OjpkaXNwYXRjaERp
ZExheW91dChMYXlvdXRNaWxlc3RvbmVzIG1pbGVzdG9uZXMpCiAgICAgICAgICAgICBpZiAoYmFj
a2luZ1N0b3JlUHJpdmF0ZS0+cmVuZGVyVmlzaWJsZUNvbnRlbnRzKCkpIHsKICAgICAgICAgICAg
ICAgICBpZiAoIWJhY2tpbmdTdG9yZVByaXZhdGUtPnNob3VsZERpcmVjdFJlbmRlcmluZ1RvV2lu
ZG93KCkpCiAgICAgICAgICAgICAgICAgICAgIGJhY2tpbmdTdG9yZVByaXZhdGUtPmJsaXRWaXNp
YmxlQ29udGVudHMoKTsKLSAgICAgICAgICAgICAgICBtX3dlYlBhZ2VQcml2YXRlLT5tX2NsaWVu
dC0+bm90aWZ5Q29udGVudFJlbmRlcmVkKGJhY2tpbmdTdG9yZVByaXZhdGUtPnZpc2libGVDb250
ZW50c1JlY3QoKSk7CisgICAgICAgICAgICAgICAgbV93ZWJQYWdlUHJpdmF0ZS0+bV9jbGllbnQt
Pm5vdGlmeVBpeGVsQ29udGVudFJlbmRlcmVkKGJhY2tpbmdTdG9yZVByaXZhdGUtPnZpc2libGVD
b250ZW50c1JlY3QoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9ibGFja2JlcnJ5L1dlYktpdFN1cHBvcnQvU2VsZWN0aW9uSGFuZGxlci5j
cHAgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9TZWxlY3Rpb25IYW5k
bGVyLmNwcAppbmRleCAxMGUwNzM1OWU1MjJlZDE1ZDNhYjcwZjlmMGFkOWQyOTBjYTRkN2Q1Li5m
Y2QyZTdlMTA4ODUzODcxYzIwZmQ1N2U0YWQyYzEwN2FiNWJhYTQ0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9TZWxlY3Rpb25IYW5kbGVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvV2ViS2l0U3VwcG9ydC9TZWxlY3Rpb25IYW5k
bGVyLmNwcApAQCAtOTM3LDE3ICs5MzcsNiBAQCB2b2lkIFNlbGVjdGlvbkhhbmRsZXI6OnNlbGVj
dGlvblBvc2l0aW9uQ2hhbmdlZChib29sIGZvcmNlVXBkYXRlV2l0aG91dENoYW5nZSkKIAogICAg
ICAgICAgICAgLy8gRmluZCB0aGUgdG9wIGNvcm5lciBhbmQgYm90dG9tIGNvcm5lci4KICAgICAg
ICAgICAgIGFkanVzdENhcmV0UmVjdHMoc3RhcnRDYXJldCwgc2hvdWxkQ2xpcFN0YXJ0Q2FyZXQs
IGVuZENhcmV0LCBzaG91bGRDbGlwRW5kQ2FyZXQsIHZpc2libGVTZWxlY3Rpb25SZWdpb24ucmVj
dHMoKSwgc3RhcnRDYXJldFJlZmVyZW5jZVBvaW50LCBlbmRDYXJldFJlZmVyZW5jZVBvaW50LCBp
c1JUTCk7Ci0KLSAgICAgICAgICAgIC8vIFRyYW5zbGF0ZSB0aGUgY2FyZXQgdmFsdWVzIGFzIHRo
ZXkgbXVzdCBiZSBpbiB0cmFuc2Zvcm1lZCBjb29yZGluYXRlcy4KLSAgICAgICAgICAgIGlmICgh
c2hvdWxkQ2xpcFN0YXJ0Q2FyZXQpIHsKLSAgICAgICAgICAgICAgICBzdGFydENhcmV0ID0gbV93
ZWJQYWdlLT5tYXBUb1RyYW5zZm9ybWVkKHN0YXJ0Q2FyZXQpOwotICAgICAgICAgICAgICAgIG1f
d2ViUGFnZS0+Y2xpcFRvVHJhbnNmb3JtZWRDb250ZW50c1JlY3Qoc3RhcnRDYXJldCk7Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghc2hvdWxkQ2xpcEVuZENhcmV0KSB7Ci0gICAg
ICAgICAgICAgICAgZW5kQ2FyZXQgPSBtX3dlYlBhZ2UtPm1hcFRvVHJhbnNmb3JtZWQoZW5kQ2Fy
ZXQpOwotICAgICAgICAgICAgICAgIG1fd2ViUGFnZS0+Y2xpcFRvVHJhbnNmb3JtZWRDb250ZW50
c1JlY3QoZW5kQ2FyZXQpOwotICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCkBAIC05
NzIsNyArOTYxLDYgQEAgdm9pZCBTZWxlY3Rpb25IYW5kbGVyOjpub3RpZnlDYXJldFBvc2l0aW9u
Q2hhbmdlZElmTmVlZGVkKCkKICAgICB9CiB9CiAKLS8vIE5PVEU6IFRoaXMgZnVuY3Rpb24gaXMg
bm90IGluIFdlYktpdCBjb29yZGluYXRlcy4KIHZvaWQgU2VsZWN0aW9uSGFuZGxlcjo6Y2FyZXRQ
b3NpdGlvbkNoYW5nZWQoKQogewogICAgIFNlbGVjdGlvbkxvZyhMb2dMZXZlbEluZm8sICJTZWxl
Y3Rpb25IYW5kbGVyOjpjYXJldFBvc2l0aW9uQ2hhbmdlZCIpOwpAQCAtMTAwOSwyNiArOTk3LDIw
IEBAIHZvaWQgU2VsZWN0aW9uSGFuZGxlcjo6Y2FyZXRQb3NpdGlvbkNoYW5nZWQoKQogICAgIFNl
bGVjdGlvbkxvZyhMb2dMZXZlbEluZm8sICJTZWxlY3Rpb25IYW5kbGVyOjpjYXJldFBvc2l0aW9u
Q2hhbmdlZCBjYXJldCBSZWN0ICVkLCAlZCwgJWR4JWQiLAogICAgICAgICAgICAgICAgICAgICAg
ICAgY2FyZXRMb2NhdGlvbi54KCksIGNhcmV0TG9jYXRpb24ueSgpLCBjYXJldExvY2F0aW9uLndp
ZHRoKCksIGNhcmV0TG9jYXRpb24uaGVpZ2h0KCkpOwogCi0gICAgY2FyZXRMb2NhdGlvbiA9IG1f
d2ViUGFnZS0+bWFwVG9UcmFuc2Zvcm1lZChjYXJldExvY2F0aW9uKTsKLSAgICBtX3dlYlBhZ2Ut
PmNsaXBUb1RyYW5zZm9ybWVkQ29udGVudHNSZWN0KGNhcmV0TG9jYXRpb24pOwotCi0gICAgYm9v
bCBzaW5nbGVMaW5lSW5wdXQgPSAhbV93ZWJQYWdlLT5tX2lucHV0SGFuZGxlci0+aXNNdWx0aWxp
bmVJbnB1dE1vZGUoKTsKLSAgICBXZWJDb3JlOjpJbnRSZWN0IG5vZGVCb3VuZGluZ0JveCA9IHNp
bmdsZUxpbmVJbnB1dCA/IG1fd2ViUGFnZS0+bV9pbnB1dEhhbmRsZXItPmJvdW5kaW5nQm94Rm9y
SW5wdXRGaWVsZCgpIDogV2ViQ29yZTo6SW50UmVjdCgpOworICAgIGJvb2wgaXNTaW5nbGVMaW5l
SW5wdXQgPSAhbV93ZWJQYWdlLT5tX2lucHV0SGFuZGxlci0+aXNNdWx0aWxpbmVJbnB1dE1vZGUo
KTsKKyAgICBXZWJDb3JlOjpJbnRSZWN0IG5vZGVCb3VuZGluZ0JveCA9IGlzU2luZ2xlTGluZUlu
cHV0ID8gbV93ZWJQYWdlLT5tX2lucHV0SGFuZGxlci0+Ym91bmRpbmdCb3hGb3JJbnB1dEZpZWxk
KCkgOiBXZWJDb3JlOjpJbnRSZWN0KCk7CiAKICAgICBpZiAoIW5vZGVCb3VuZGluZ0JveC5pc0Vt
cHR5KCkpIHsKICAgICAgICAgbm9kZUJvdW5kaW5nQm94Lm1vdmUoZnJhbWVPZmZzZXQueCgpLCBm
cmFtZU9mZnNldC55KCkpOwogCiAgICAgICAgIC8vIENsaXAgYWdhaW5zdCB0aGUgY29udGFpbmlu
ZyBmcmFtZSBhbmQgbm9kZSBib3VuZGFyaWVzLgogICAgICAgICBub2RlQm91bmRpbmdCb3guaW50
ZXJzZWN0KGNsaXBwaW5nUmVjdEZvckNvbnRlbnQpOwotCi0gICAgICAgIG5vZGVCb3VuZGluZ0Jv
eCA9IG1fd2ViUGFnZS0+bWFwVG9UcmFuc2Zvcm1lZChub2RlQm91bmRpbmdCb3gpOwotICAgICAg
ICBtX3dlYlBhZ2UtPmNsaXBUb1RyYW5zZm9ybWVkQ29udGVudHNSZWN0KG5vZGVCb3VuZGluZ0Jv
eCk7CiAgICAgfQogCi0gICAgU2VsZWN0aW9uTG9nKExvZ0xldmVsSW5mbywgIlNlbGVjdGlvbkhh
bmRsZXI6OnNpbmdsZSBsaW5lICVzIHNpbmdsZSBsaW5lIGJvdW5kaW5nIGJveCAlZCwgJWQsICVk
eCVkIiwKLSAgICAgICAgICAgICAgICAgICAgc2luZ2xlTGluZUlucHV0ID8gInRydWUiIDogImZh
bHNlIiwgbm9kZUJvdW5kaW5nQm94LngoKSwgbm9kZUJvdW5kaW5nQm94LnkoKSwgbm9kZUJvdW5k
aW5nQm94LndpZHRoKCksIG5vZGVCb3VuZGluZ0JveC5oZWlnaHQoKSk7CisgICAgU2VsZWN0aW9u
TG9nKExvZ0xldmVsSW5mbywgIlNlbGVjdGlvbkhhbmRsZXI6OmNhcmV0UG9zaXRpb25DaGFuZ2Vk
OiAlcyBsaW5lIGlucHV0LCBzaW5nbGUgbGluZSBib3VuZGluZyBib3ggKCVkLCAlZCkgJWR4JWQi
LAorICAgICAgICBpc1NpbmdsZUxpbmVJbnB1dCA/ICJzaW5nbGUiIDogIm11bHRpIiwgbm9kZUJv
dW5kaW5nQm94LngoKSwgbm9kZUJvdW5kaW5nQm94LnkoKSwgbm9kZUJvdW5kaW5nQm94LndpZHRo
KCksIG5vZGVCb3VuZGluZ0JveC5oZWlnaHQoKSk7CiAKLSAgICBtX3dlYlBhZ2UtPm1fY2xpZW50
LT5ub3RpZnlDYXJldENoYW5nZWQoY2FyZXRMb2NhdGlvbiwgbV93ZWJQYWdlLT5tX3RvdWNoRXZl
bnRIYW5kbGVyLT5sYXN0RmF0RmluZ2Vyc1Jlc3VsdCgpLmlzVGV4dElucHV0KCkgLyogdXNlclRv
dWNoVHJpZ2dlcmVkICovLCBzaW5nbGVMaW5lSW5wdXQsIG5vZGVCb3VuZGluZ0JveCk7CisgICAg
bV93ZWJQYWdlLT5tX2NsaWVudC0+bm90aWZ5Q2FyZXRDaGFuZ2VkKGNhcmV0TG9jYXRpb24sIG1f
d2ViUGFnZS0+bV90b3VjaEV2ZW50SGFuZGxlci0+bGFzdEZhdEZpbmdlcnNSZXN1bHQoKS5pc1Rl
eHRJbnB1dCgpIC8qIHVzZXJUb3VjaFRyaWdnZXJlZCAqLywgaXNTaW5nbGVMaW5lSW5wdXQsIG5v
ZGVCb3VuZGluZ0JveCk7CiB9CiAKIGJvb2wgU2VsZWN0aW9uSGFuZGxlcjo6c2VsZWN0aW9uQ29u
dGFpbnMoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHBvaW50KQpkaWZmIC0tZ2l0IGEvVG9vbHMv
Q2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDkwYTAwNDFmOGY4ZGM0ZGU2MTZiMGE3
ZDMwYTg1N2QzYmQwYWZiOWIuLjVkMWQwYTU5MDMzMDVlNjg5ZjEyMjk2MDg0ZTAxZmRjOTUwYTBh
ZDUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwxOCBAQAorMjAxMi0xMS0wOCAgSmFrb2IgUGV0c292aXRzICA8anBldHNvdml0c0By
aW0uY29tPgorCisgICAgICAgIFtCbGFja0JlcnJ5XSBSZXdvcmsgdGhlIEFQSSB0byB1c2UgZG9j
dW1lbnQgY29vcmRpbmF0ZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEwMTYwOAorICAgICAgICBSSU0gUFIgMTczMjkyCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRhcHQgdG8gY2hhbmdlZCBXZWJQYWdl
IEFQSS4KKyAgICAgICAgU2VlIFNvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9DaGFuZ2VMb2cgZm9y
IGRldGFpbHMuCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9ibGFja2JlcnJ5L0R1bXBSZW5k
ZXJUcmVlLmNwcDoKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6RHVtcFJlbmRlclRyZWU6
OkR1bXBSZW5kZXJUcmVlKToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6RHVtcFJlbmRl
clRyZWU6OnJlc2V0VG9Db25zaXN0ZW50U3RhdGVCZWZvcmVUZXN0aW5nKToKKwogMjAxMi0xMS0w
OCAgRG9taW5payBSw7Z0dHNjaGVzICA8ZG9taW5pay5yb3R0c2NoZXNAaW50ZWwuY29tPgogCiAg
ICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxMzM4NTkuCmRpZmYgLS1naXQgYS9Ub29s
cy9EdW1wUmVuZGVyVHJlZS9ibGFja2JlcnJ5L0R1bXBSZW5kZXJUcmVlLmNwcCBiL1Rvb2xzL0R1
bXBSZW5kZXJUcmVlL2JsYWNrYmVycnkvRHVtcFJlbmRlclRyZWUuY3BwCmluZGV4IGE2MjA4M2Zh
OTJhNTcwOGRhZGU1OTEwMWI0NzcwN2U5NDY5NzE3MmYuLmQ2NzRhYjVlNzY2MDY4YWY1OTE0MmIy
ODY1YTVhODcwNWYwMmZlNDIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2JsYWNr
YmVycnkvRHVtcFJlbmRlclRyZWUuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2JsYWNr
YmVycnkvRHVtcFJlbmRlclRyZWUuY3BwCkBAIC01OSw2ICs1OSw3IEBACiAjaW5jbHVkZSAiV29y
a1F1ZXVlLmgiCiAjaW5jbHVkZSAiV29ya1F1ZXVlSXRlbS5oIgogI2luY2x1ZGUgPEJsYWNrQmVy
cnlQbGF0Zm9ybUxheW91dFRlc3QuaD4KKyNpbmNsdWRlIDxCbGFja0JlcnJ5UGxhdGZvcm1Qcmlt
aXRpdmVzLmg+CiAjaW5jbHVkZSA8V2ViU2V0dGluZ3MuaD4KICNpbmNsdWRlIDxzdGRpby5oPgog
I2luY2x1ZGUgPHN5cy9zdGF0Lmg+CkBAIC0xNjQsNyArMTY1LDcgQEAgRHVtcFJlbmRlclRyZWU6
OkR1bXBSZW5kZXJUcmVlKEJsYWNrQmVycnk6OldlYktpdDo6V2ViUGFnZSogcGFnZSkKICAgICBt
X2RvbmVGaWxlID0gc2RjYXJkUGF0aCArICIvZG9uZSIgKyB3b3JrZXJOdW1iZXI7CiAgICAgbV9j
dXJyZW50VGVzdEZpbGUgPSBzZGNhcmRQYXRoICsgIi9jdXJyZW50IiArIHdvcmtlck51bWJlciAr
ICIuZHJ0IjsKICAgICBtX3BhZ2UtPnJlc2V0VmlydHVhbFZpZXdwb3J0T25Db21taXR0ZWQoZmFs
c2UpOwotICAgIG1fcGFnZS0+c2V0VmlydHVhbFZpZXdwb3J0U2l6ZSg4MDAsIDYwMCk7CisgICAg
bV9wYWdlLT5zZXRWaXJ0dWFsVmlld3BvcnRTaXplKFBsYXRmb3JtOjpJbnRTaXplKDgwMCwgNjAw
KSk7CiAgICAgc19jdXJyZW50SW5zdGFuY2UgPSB0aGlzOwogfQogCkBAIC0yOTIsNyArMjkzLDcg
QEAgdm9pZCBEdW1wUmVuZGVyVHJlZTo6cmVzZXRUb0NvbnNpc3RlbnRTdGF0ZUJlZm9yZVRlc3Rp
bmcoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnMKICAgICBzZXRBY2NlcHRzRWRpdGluZyh0cnVlKTsK
ICAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnQ6OnNldExpbmtzSW5jbHVkZWRJbkZvY3VzQ2hhaW4o
dHJ1ZSk7CiAKLSAgICBtX3BhZ2UtPnNldFZpcnR1YWxWaWV3cG9ydFNpemUoODAwLCA2MDApOwor
ICAgIG1fcGFnZS0+c2V0VmlydHVhbFZpZXdwb3J0U2l6ZShQbGF0Zm9ybTo6SW50U2l6ZSg4MDAs
IDYwMCkpOwogICAgIG1fcGFnZS0+cmVzZXRWaXJ0dWFsVmlld3BvcnRPbkNvbW1pdHRlZChmYWxz
ZSk7CiAgICAgbV9wYWdlLT5zZXRVc2VyU2NhbGFibGUodHJ1ZSk7CiAgICAgbV9wYWdlLT5zZXRK
YXZhU2NyaXB0Q2FuQWNjZXNzQ2xpcGJvYXJkKHRydWUpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>