<?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>117451</bug_id>
          
          <creation_ts>2013-06-10 17:18:51 -0700</creation_ts>
          <short_desc>[BlackBerry] Smarter algorithm to determine the backingstore rect</short_desc>
          <delta_ts>2013-06-12 09:07:05 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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>cgarcia</cc>
    
    <cc>commit-queue</cc>
    
    <cc>manyoso</cc>
    
    <cc>rwlbuis</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>898847</commentid>
    <comment_count>0</comment_count>
    <who name="Jakob Petsovits">jpetsovits</who>
    <bug_when>2013-06-10 17:18:51 -0700</bug_when>
    <thetext>So far, the backingstore tile geometry allocation was pretty straightforward: We would start off from the current viewport and append all available tiles into the current scrolling direction from there. This will usually work well enough, but has the downside of discarding all the tiles in the opposite direction. Also, tiles very close to the viewport will often get discarded even if the user only scrolls very slowly.

The patch below completely revamps the algorithm for determining where the backingstore should be positioned.

The general idea is that we construct a &quot;desired rect&quot; based on the viewport and inflate it into all four directions according to the current scroll momentum. This rectangle will be similarly large as a backingstore tile geometry rectangle might be, by using the approximate number of pixels that are available in the given number of tiles. The proportions for extending the rectangle from the viewport are influenced by different factors, including scroll momentum, viewport ratio, available space in the overall contents rectangle, and natural bias for the &quot;down&quot; direction.

In practice, this results in a backingstore that is roughly evenly distributed around the viewport when no movement is happening, and will gradually narrow down and extend into the scroll direction at a higher momentum.

The final tile geometry is constructed by trying fit the tiles into the desired rect in a way that maximizes the area of its intersection. There are a few parameters that can be tweaked, the ones in this patch seem to handle most cases well enough to minimize checkerboarding. As an additional bonus, a rectangle-based tiling strategy can more easily be adopted for accelerated compositing, which currently operates on a simpler algorithm that also inflates the viewport but does not take scrolling into account.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>898849</commentid>
    <comment_count>1</comment_count>
      <attachid>204231</attachid>
    <who name="Jakob Petsovits">jpetsovits</who>
    <bug_when>2013-06-10 17:28:05 -0700</bug_when>
    <thetext>Created attachment 204231
Patch

The style checker is complaining about a variable named &apos;l&apos;. I believe that in the context (l/r/u/d for left/right/up/down), that&apos;s clear and optimal. Hopefully it&apos;ll still go through the bots (and review), or something.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>898851</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-06-10 17:29:48 -0700</bug_when>
    <thetext>Attachment 204231 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebKit/blackberry/Api/BackingStore.cpp&apos;, u&apos;Source/WebKit/blackberry/Api/BackingStore_p.h&apos;, u&apos;Source/WebKit/blackberry/ChangeLog&apos;]&quot; exit_code: 1
Source/WebKit/blackberry/Api/BackingStore.cpp:855:  l is incorrectly named. Don&apos;t use the single letter &apos;l&apos; as an identifier name.  [readability/naming] [4]
Total errors found: 1 in 3 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>899014</commentid>
    <comment_count>3</comment_count>
      <attachid>204231</attachid>
    <who name="Arvid Nilsson">anilsson</who>
    <bug_when>2013-06-10 22:03:03 -0700</bug_when>
    <thetext>Comment on attachment 204231
Patch

This looks great! Like you said, this algorithm would apply to AC layer scrolling too, once the visibility patch lands, and visibility is represented as a simple rect. Perhaps we can extract this algorithm into a reusable class in the future and use it in the AC code too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>899560</commentid>
    <comment_count>4</comment_count>
      <attachid>204231</attachid>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2013-06-12 08:38:57 -0700</bug_when>
    <thetext>Comment on attachment 204231
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=204231&amp;action=review

Looks good, please think about the more verbose naming before landing.

&gt;&gt; Source/WebKit/blackberry/Api/BackingStore.cpp:855
&gt;&gt; +        const float l = expandLeft;
&gt; 
&gt; l is incorrectly named. Don&apos;t use the single letter &apos;l&apos; as an identifier name.  [readability/naming] [4]

More verbose would be better but up to you.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>899568</commentid>
    <comment_count>5</comment_count>
      <attachid>204231</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-06-12 09:07:02 -0700</bug_when>
    <thetext>Comment on attachment 204231
Patch

Clearing flags on attachment: 204231

Committed r151503: &lt;http://trac.webkit.org/changeset/151503&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>899569</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-06-12 09:07:05 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>204231</attachid>
            <date>2013-06-10 17:28:05 -0700</date>
            <delta_ts>2013-06-12 09:07:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-117451-20130611002603.patch</filename>
            <type>text/plain</type>
            <size>38886</size>
            <attacher name="Jakob Petsovits">jpetsovits</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTUwOTE2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Js
YWNrYmVycnkvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0NoYW5nZUxvZwpp
bmRleCA3NDAwYzdmOGE3ODBjMTg0NDZiNjcxMjY1ZDg3MDg0ZjE5OTEzN2MxLi41ZDY1MTMxMDA5
ZDM2YTY2ZTkzY2IwYjBjZTVhYmY5NDRlYmNlOWNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2JsYWNrYmVycnkvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvYmxhY2tiZXJyeS9DaGFu
Z2VMb2cKQEAgLTEsMyArMSw3MSBAQAorMjAxMy0wNi0xMCAgSmFrb2IgUGV0c292aXRzICA8anBl
dHNvdml0c0BibGFja2JlcnJ5LmNvbT4KKworICAgICAgICBbQmxhY2tCZXJyeV0gU21hcnRlciBh
bGdvcml0aG0gdG8gZGV0ZXJtaW5lIHRoZSBiYWNraW5nc3RvcmUgcmVjdAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE3NDUxCisKKyAgICAgICAgSklS
QTExNTY0NAorICAgICAgICBodHRwczovL2ppcmEuYmJxbngubmV0L2Jyb3dzZS9CUldTUi03MDI4
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU28gZmFy
LCB0aGUgYmFja2luZ3N0b3JlIHRpbGUgZ2VvbWV0cnkgYWxsb2NhdGlvbiB3YXMKKyAgICAgICAg
cHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDogV2Ugd291bGQgc3RhcnQgb2ZmIGZyb20gdGhlCisgICAg
ICAgIGN1cnJlbnQgdmlld3BvcnQgYW5kIGFwcGVuZCBhbGwgYXZhaWxhYmxlIHRpbGVzIGludG8K
KyAgICAgICAgdGhlIGN1cnJlbnQgc2Nyb2xsaW5nIGRpcmVjdGlvbiBmcm9tIHRoZXJlLgorCisg
ICAgICAgIFRoaXMgd2lsbCB1c3VhbGx5IHdvcmsgd2VsbCBlbm91Z2gsIGJ1dCBoYXMgdGhlIGRv
d25zaWRlCisgICAgICAgIG9mIGRpc2NhcmRpbmcgYWxsIHRoZSB0aWxlcyBpbiB0aGUgb3Bwb3Np
dGUgZGlyZWN0aW9uLgorICAgICAgICBBbHNvLCB0aWxlcyB2ZXJ5IGNsb3NlIHRvIHRoZSB2aWV3
cG9ydCB3aWxsIG9mdGVuIGdldAorICAgICAgICBkaXNjYXJkZWQgZXZlbiBpZiB0aGUgdXNlciBv
bmx5IHNjcm9sbHMgdmVyeSBzbG93bHkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBjb21wbGV0ZWx5
IHJldmFtcHMgdGhlIGFsZ29yaXRobSBmb3IKKyAgICAgICAgZGV0ZXJtaW5pbmcgd2hlcmUgdGhl
IGJhY2tpbmdzdG9yZSBzaG91bGQgYmUgcG9zaXRpb25lZC4KKworICAgICAgICBUaGUgZ2VuZXJh
bCBpZGVhIGlzIHRoYXQgd2UgY29uc3RydWN0IGEgImRlc2lyZWQgcmVjdCIKKyAgICAgICAgYmFz
ZWQgb24gdGhlIHZpZXdwb3J0IGFuZCBpbmZsYXRlIGl0IGludG8gYWxsIGZvdXIKKyAgICAgICAg
ZGlyZWN0aW9ucyBhY2NvcmRpbmcgdG8gdGhlIGN1cnJlbnQgc2Nyb2xsIG1vbWVudHVtLgorICAg
ICAgICBUaGlzIHJlY3RhbmdsZSB3aWxsIGJlIHNpbWlsYXJseSBsYXJnZSBhcyBhIGJhY2tpbmdz
dG9yZQorICAgICAgICB0aWxlIGdlb21ldHJ5IHJlY3RhbmdsZSBtaWdodCBiZSwgYnkgdXNpbmcg
dGhlCisgICAgICAgIGFwcHJveGltYXRlIG51bWJlciBvZiBwaXhlbHMgdGhhdCBhcmUgYXZhaWxh
YmxlIGluIHRoZQorICAgICAgICBnaXZlbiBudW1iZXIgb2YgdGlsZXMuCisKKyAgICAgICAgVGhl
IHByb3BvcnRpb25zIGZvciBleHRlbmRpbmcgdGhlIHJlY3RhbmdsZSBmcm9tIHRoZQorICAgICAg
ICB2aWV3cG9ydCBhcmUgaW5mbHVlbmNlZCBieSBkaWZmZXJlbnQgZmFjdG9ycywgaW5jbHVkaW5n
CisgICAgICAgIHNjcm9sbCBtb21lbnR1bSwgdmlld3BvcnQgcmF0aW8sIGF2YWlsYWJsZSBzcGFj
ZSBpbiB0aGUKKyAgICAgICAgb3ZlcmFsbCBjb250ZW50cyByZWN0YW5nbGUsIGFuZCBuYXR1cmFs
IGJpYXMgZm9yIHRoZQorICAgICAgICAiZG93biIgZGlyZWN0aW9uLgorCisgICAgICAgIEluIHBy
YWN0aWNlLCB0aGlzIHJlc3VsdHMgaW4gYSBiYWNraW5nc3RvcmUgdGhhdCBpcworICAgICAgICBy
b3VnaGx5IGV2ZW5seSBkaXN0cmlidXRlZCBhcm91bmQgdGhlIHZpZXdwb3J0IHdoZW4gbm8KKyAg
ICAgICAgbW92ZW1lbnQgaXMgaGFwcGVuaW5nLCBhbmQgd2lsbCBncmFkdWFsbHkgbmFycm93IGRv
d24KKyAgICAgICAgYW5kIGV4dGVuZCBpbnRvIHRoZSBzY3JvbGwgZGlyZWN0aW9uIGF0IGEgaGln
aGVyIG1vbWVudHVtLgorCisgICAgICAgIFRoZSBmaW5hbCB0aWxlIGdlb21ldHJ5IGlzIGNvbnN0
cnVjdGVkIGJ5IHRyeWluZyBmaXQKKyAgICAgICAgdGhlIHRpbGVzIGludG8gdGhlIGRlc2lyZWQg
cmVjdCBpbiBhIHdheSB0aGF0IG1heGltaXplcworICAgICAgICB0aGUgYXJlYSBvZiBpdHMgaW50
ZXJzZWN0aW9uLiBUaGVyZSBhcmUgYSBmZXcgcGFyYW1ldGVycworICAgICAgICB0aGF0IGNhbiBi
ZSB0d2Vha2VkLCB0aGUgb25lcyBpbiB0aGlzIHBhdGNoIHNlZW0gdG8KKyAgICAgICAgaGFuZGxl
IG1vc3QgY2FzZXMgd2VsbCBlbm91Z2ggdG8gbWluaW1pemUgY2hlY2tlcmJvYXJkaW5nLgorCisg
ICAgICAgIEFzIGFuIGFkZGl0aW9uYWwgYm9udXMsIGEgcmVjdGFuZ2xlLWJhc2VkIHRpbGluZyBz
dHJhdGVneQorICAgICAgICBjYW4gbW9yZSBlYXNpbHkgYmUgYWRvcHRlZCBmb3IgYWNjZWxlcmF0
ZWQgY29tcG9zaXRpbmcsCisgICAgICAgIHdoaWNoIGN1cnJlbnRseSBvcGVyYXRlcyBvbiBhIHNp
bXBsZXIgYWxnb3JpdGhtIHRoYXQgYWxzbworICAgICAgICBpbmZsYXRlcyB0aGUgdmlld3BvcnQg
YnV0IGRvZXMgbm90IHRha2Ugc2Nyb2xsaW5nIGludG8KKyAgICAgICAgYWNjb3VudC4KKworICAg
ICAgICAqIEFwaS9CYWNraW5nU3RvcmUuY3BwOgorICAgICAgICAoQmxhY2tCZXJyeTo6V2ViS2l0
OjpCYWNraW5nU3RvcmVQcml2YXRlOjpCYWNraW5nU3RvcmVQcml2YXRlKToKKyAgICAgICAgKEJs
YWNrQmVycnk6OldlYktpdDo6QmFja2luZ1N0b3JlUHJpdmF0ZTo6ZXhwYW5kZWRDb250ZW50c1Np
emUpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKEJsYWNrQmVycnk6OldlYktpdDo6QmFj
a2luZ1N0b3JlUHJpdmF0ZTo6bm9uT3ZlcnNjcm9sbGVkKToKKyAgICAgICAgKEJsYWNrQmVycnk6
OldlYktpdDo6QmFja2luZ1N0b3JlUHJpdmF0ZTo6ZW5jbG9zaW5nVGlsZVJlY3QpOgorICAgICAg
ICAoQmxhY2tCZXJyeTo6V2ViS2l0OjpCYWNraW5nU3RvcmVQcml2YXRlOjpkZXNpcmVkQmFja2lu
Z1N0b3JlUmVjdCk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OkJhY2tpbmdTdG9yZVBy
aXZhdGU6Om1lcmdlRGVzaXJlZEJhY2tpbmdTdG9yZVJlY3QpOgorICAgICAgICAoQmxhY2tCZXJy
eTo6V2ViS2l0OjpCYWNraW5nU3RvcmVQcml2YXRlOjpsYXJnZXN0VGlsZVJlY3RGb3JEZXNpcmVk
UmVjdCk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OkJhY2tpbmdTdG9yZVByaXZhdGU6
OnNjcm9sbEJhY2tpbmdTdG9yZSk6CisgICAgICAgIChCbGFja0JlcnJ5OjpXZWJLaXQ6OkJhY2tp
bmdTdG9yZVByaXZhdGU6OmNyZWF0ZVN1cmZhY2VzKToKKyAgICAgICAgKiBBcGkvQmFja2luZ1N0
b3JlX3AuaDoKKyAgICAgICAgKEJhY2tpbmdTdG9yZVByaXZhdGUpOgorCiAyMDEzLTA1LTI5ICBP
dHRvIERlcmVrIENoZXVuZyAgPG90Y2hldW5nQHJpbS5jb20+CiAKICAgICAgICAgW0JsYWNrQmVy
cnldIEFkZCBtb3JlIGNlbGx1bGFyIHRlY2hub2xvZ2llcyBpbnRvIHRoZSBOZXR3b3JrSW5mbyBl
bnVtCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL0JhY2tpbmdTdG9y
ZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL0JhY2tpbmdTdG9yZS5jcHAKaW5k
ZXggNGNjOGVjZmQ5MThlYmExYTdkNjdkZmIzNjZjNjA0Y2QyYzJiMjFjZi4uNjhjODg5NWNiOTY1
MmQ0NmFkYjIyMzQ5ZGMzMWU3ZGRmZmZhNTExOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9i
bGFja2JlcnJ5L0FwaS9CYWNraW5nU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvYmxhY2ti
ZXJyeS9BcGkvQmFja2luZ1N0b3JlLmNwcApAQCAtODksODYgKzg5LDYgQEAgc3RhdGljIERpdmlz
b3JMaXN0IGRpdmlzb3JzKHVuc2lnbmVkIG4pCiAgICAgcmV0dXJuIGRpdmlzb3JzOwogfQogCi1z
dGF0aWMgYm9vbCBkaXZpc29ySXNQZXJmZWN0V2lkdGgoRGl2aXNvciBkaXZpc29yLCBQbGF0Zm9y
bTo6SW50U2l6ZSBzaXplLCBpbnQgdGlsZVdpZHRoKQotewotICAgIHJldHVybiBzaXplLndpZHRo
KCkgPD0gZGl2aXNvci5maXJzdCAqIHRpbGVXaWR0aCAmJiBhYnMoc2l6ZS53aWR0aCgpIC0gZGl2
aXNvci5maXJzdCAqIHRpbGVXaWR0aCkgPCB0aWxlV2lkdGg7Ci19Ci0KLXN0YXRpYyBib29sIGRp
dmlzb3JJc1BlcmZlY3RIZWlnaHQoRGl2aXNvciBkaXZpc29yLCBQbGF0Zm9ybTo6SW50U2l6ZSBz
aXplLCBpbnQgdGlsZUhlaWdodCkKLXsKLSAgICByZXR1cm4gc2l6ZS5oZWlnaHQoKSA8PSBkaXZp
c29yLnNlY29uZCAqIHRpbGVIZWlnaHQgJiYgYWJzKHNpemUuaGVpZ2h0KCkgLSBkaXZpc29yLnNl
Y29uZCAqIHRpbGVIZWlnaHQpIDwgdGlsZUhlaWdodDsKLX0KLQotc3RhdGljIGJvb2wgZGl2aXNv
cklzUHJlZmVycmVkRGlyZWN0aW9uKERpdmlzb3IgZGl2aXNvciwgQmFja2luZ1N0b3JlUHJpdmF0
ZTo6VGlsZU1hdHJpeERpcmVjdGlvbiBkaXJlY3Rpb24pCi17Ci0gICAgaWYgKGRpcmVjdGlvbiA9
PSBCYWNraW5nU3RvcmVQcml2YXRlOjpWZXJ0aWNhbCkKLSAgICAgICAgcmV0dXJuIGRpdmlzb3Iu
c2Vjb25kID4gZGl2aXNvci5maXJzdDsKLSAgICByZXR1cm4gZGl2aXNvci5maXJzdCA+IGRpdmlz
b3Iuc2Vjb25kOwotfQotCi0vLyBDb21wdXRlIGJlc3QgZGl2aXNvciBnaXZlbiB0aGUgcmF0aW8g
ZGV0ZXJtaW5lZCBieSBzaXplLgotc3RhdGljIERpdmlzb3IgYmVzdERpdmlzb3IoUGxhdGZvcm06
OkludFNpemUgc2l6ZSwgaW50IHRpbGVXaWR0aCwgaW50IHRpbGVIZWlnaHQsCi0gICAgaW50IG1p
bmltdW1OdW1iZXJPZlRpbGVzV2lkZSwgaW50IG1pbmltdW1OdW1iZXJPZlRpbGVzSGlnaCwKLSAg
ICBCYWNraW5nU3RvcmVQcml2YXRlOjpUaWxlTWF0cml4RGlyZWN0aW9uIGRpcmVjdGlvbikKLXsK
LSAgICAvLyBUaGUgcG9pbnQgb2YgdGhpcyBmdW5jdGlvbiBpcyB0byBkZXRlcm1pbmUgdGhlIG51
bWJlciBvZiB0aWxlcyBpbiBlYWNoCi0gICAgLy8gZGltZW5zaW9uLiBXZSBkbyB0aGlzIGJ5IGxv
b2tpbmcgdG8gbWF0Y2ggdGhlIHRpbGUgbWF0cml4IHdpZHRoL2hlaWdodAotICAgIC8vIHJhdGlv
IGFzIGNsb3NlbHkgYXMgcG9zc2libGUgd2l0aCB0aGUgd2lkdGgvaGVpZ2h0IHJhdGlvIG9mIHRo
ZSBjb250ZW50cy4KLSAgICAvLyBXZSBhbHNvIGxvb2sgYXQgdGhlIGRpcmVjdGlvbiBwYXNzZWQg
dG8gZ2l2ZSBwcmVmZXJlbmNlIHRvIG9uZSBkaW1lbnNpb24KLSAgICAvLyBvdmVyIGFub3RoZXIu
IFRoaXMgbWV0aG9kIGNvdWxkIHByb2JhYmx5IGJlIG1hZGUgZmFzdGVyLCBidXQgaXQgZ2V0cyB0
aGUKLSAgICAvLyBqb2IgZG9uZS4KLSAgICBTdXJmYWNlUG9vbCogc3VyZmFjZVBvb2wgPSBTdXJm
YWNlUG9vbDo6Z2xvYmFsU3VyZmFjZVBvb2woKTsKLSAgICBBU1NFUlQoIXN1cmZhY2VQb29sLT5p
c0VtcHR5KCkpOwotCi0gICAgLy8gU3RvcmUgYSBzdGF0aWMgbGlzdCBvZiBwb3NzaWJsZSBkaXZp
c29ycy4KLSAgICBzdGF0aWMgRGl2aXNvckxpc3QgZGl2aXNvckxpc3QgPSBkaXZpc29ycyhzdXJm
YWNlUG9vbC0+bnVtYmVyT2ZCYWNraW5nU3RvcmVGcm9udEJ1ZmZlcnMoKSk7Ci0KLSAgICAvLyBU
aGUgcmF0aW8gd2UncmUgbG9va2luZyB0byBiZXN0IGltaXRhdGUuCi0gICAgZmxvYXQgcmF0aW8g
PSBzdGF0aWNfY2FzdDxmbG9hdD4oc2l6ZS53aWR0aCgpKSAvIHN0YXRpY19jYXN0PGZsb2F0Pihz
aXplLmhlaWdodCgpKTsKLQotICAgIERpdmlzb3IgYmVzdERpdmlzb3I7Ci0gICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBkaXZpc29yTGlzdC5zaXplKCk7ICsraSkgewotICAgICAgICBEaXZpc29y
IGRpdmlzb3IgPSBkaXZpc29yTGlzdFtpXTsKLQotICAgICAgICBjb25zdCBib29sIGlzUGVyZmVj
dFdpZHRoID0gZGl2aXNvcklzUGVyZmVjdFdpZHRoKGRpdmlzb3IsIHNpemUsIHRpbGVXaWR0aCk7
Ci0gICAgICAgIGNvbnN0IGJvb2wgaXNQZXJmZWN0SGVpZ2h0ID0gZGl2aXNvcklzUGVyZmVjdEhl
aWdodChkaXZpc29yLCBzaXplLCB0aWxlSGVpZ2h0KTsKLSAgICAgICAgY29uc3QgYm9vbCBpc1Zh
bGlkV2lkdGggPSBkaXZpc29yLmZpcnN0ID49IG1pbmltdW1OdW1iZXJPZlRpbGVzV2lkZSB8fCBp
c1BlcmZlY3RXaWR0aDsKLSAgICAgICAgY29uc3QgYm9vbCBpc1ZhbGlkSGVpZ2h0ID0gZGl2aXNv
ci5zZWNvbmQgPj0gbWluaW11bU51bWJlck9mVGlsZXNIaWdoIHx8IGlzUGVyZmVjdEhlaWdodDsK
LSAgICAgICAgaWYgKCFpc1ZhbGlkV2lkdGggfHwgIWlzVmFsaWRIZWlnaHQpCi0gICAgICAgICAg
ICBjb250aW51ZTsKLQotICAgICAgICBpZiAoaXNQZXJmZWN0V2lkdGggfHwgaXNQZXJmZWN0SGVp
Z2h0KSB7Ci0gICAgICAgICAgICBiZXN0RGl2aXNvciA9IGRpdmlzb3I7IC8vIEZvdW5kIGEgcGVy
ZmVjdCBmaXQhCi0jaWYgREVCVUdfVElMRU1BVFJJWAotICAgICAgICAgICAgUGxhdGZvcm06Omxv
Z0Fsd2F5cyhQbGF0Zm9ybTo6TG9nTGV2ZWxDcml0aWNhbCwKLSAgICAgICAgICAgICAgICAiYmVz
dERpdmlzb3IgZm91bmQgcGVyZmVjdCBzaXplIGlzUGVyZmVjdFdpZHRoPSVzIGlzUGVyZmVjdEhl
aWdodD0lcyIsCi0gICAgICAgICAgICAgICAgaXNQZXJmZWN0V2lkdGggPyAidHJ1ZSIgOiAiZmFs
c2UiLAotICAgICAgICAgICAgICAgIGlzUGVyZmVjdEhlaWdodCA/ICJ0cnVlIiA6ICJmYWxzZSIp
OwotI2VuZGlmCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFN0
b3JlIGJhc2lzIG9mIGNvbXBhcmlzb24uCi0gICAgICAgIGlmICghYmVzdERpdmlzb3IuZmlyc3Qg
fHwgIWJlc3REaXZpc29yLnNlY29uZCkgewotICAgICAgICAgICAgYmVzdERpdmlzb3IgPSBkaXZp
c29yOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBJZiB0
aGUgY3VycmVudCBiZXN0IGRpdmlzb3IgYWdyZWVzIHdpdGggdGhlIHByZWZlcnJlZCB0aWxlIG1h
dHJpeCBkaXJlY3Rpb24sCi0gICAgICAgIC8vIHRoZW4gY29udGludWUgaWYgdGhlIGN1cnJlbnQg
Y2FuZGlkYXRlIGRvZXMgbm90LgotICAgICAgICBpZiAoZGl2aXNvcklzUHJlZmVycmVkRGlyZWN0
aW9uKGJlc3REaXZpc29yLCBkaXJlY3Rpb24pICYmICFkaXZpc29ySXNQcmVmZXJyZWREaXJlY3Rp
b24oZGl2aXNvciwgZGlyZWN0aW9uKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAg
IC8vIENvbXBhcmUgcmF0aW9zLgotICAgICAgICBmbG9hdCBkaWZmMSA9IGZhYnMoKHN0YXRpY19j
YXN0PGZsb2F0PihkaXZpc29yLmZpcnN0KSAvIHN0YXRpY19jYXN0PGZsb2F0PihkaXZpc29yLnNl
Y29uZCkpIC0gcmF0aW8pOwotICAgICAgICBmbG9hdCBkaWZmMiA9IGZhYnMoKHN0YXRpY19jYXN0
PGZsb2F0PihiZXN0RGl2aXNvci5maXJzdCkgLyBzdGF0aWNfY2FzdDxmbG9hdD4oYmVzdERpdmlz
b3Iuc2Vjb25kKSkgLSByYXRpbyk7Ci0gICAgICAgIGlmIChkaWZmMSA8IGRpZmYyKQotICAgICAg
ICAgICAgYmVzdERpdmlzb3IgPSBkaXZpc29yOwotICAgIH0KLQotICAgIHJldHVybiBiZXN0RGl2
aXNvcjsKLX0KLQogUGxhdGZvcm06OkludFJlY3QgQmFja2luZ1N0b3JlR2VvbWV0cnk6OmJhY2tp
bmdTdG9yZVJlY3QoKSBjb25zdAogewogICAgIHJldHVybiBQbGF0Zm9ybTo6SW50UmVjdChiYWNr
aW5nU3RvcmVPZmZzZXQoKSwgYmFja2luZ1N0b3JlU2l6ZSgpKTsKQEAgLTIwMyw3ICsxMjMsNiBA
QCBCYWNraW5nU3RvcmVQcml2YXRlOjpCYWNraW5nU3RvcmVQcml2YXRlKCkKICAgICAsIG1fcmVu
ZGVyUXVldWUoYWRvcHRQdHIobmV3IFJlbmRlclF1ZXVlKHRoaXMpKSkKICAgICAsIG1faGFzQmxp
dEpvYnMoZmFsc2UpCiAgICAgLCBtX3dlYlBhZ2VCYWNrZ3JvdW5kQ29sb3IoV2ViQ29yZTo6Q29s
b3I6OndoaXRlKQotICAgICwgbV9wcmVmZXJyZWRUaWxlTWF0cml4RGltZW5zaW9uKFZlcnRpY2Fs
KQogewogICAgIG1fZnJvbnRTdGF0ZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQ+KG5ldyBC
YWNraW5nU3RvcmVHZW9tZXRyeSk7CiB9CkBAIC01ODQsNiArNTAzLDEyIEBAIHZvaWQgQmFja2lu
Z1N0b3JlUHJpdmF0ZTo6cmVuZGVySm9iKCkKICAgICAgICAgZGlzcGF0Y2hSZW5kZXJKb2IoKTsK
IH0KIAorUGxhdGZvcm06OkludFNpemUgQmFja2luZ1N0b3JlUHJpdmF0ZTo6ZXhwYW5kZWRDb250
ZW50c1NpemUoKSBjb25zdAoreworICAgIGNvbnN0IFBsYXRmb3JtOjpWaWV3cG9ydEFjY2Vzc29y
KiB2aWV3cG9ydEFjY2Vzc29yID0gbV93ZWJQYWdlLT53ZWJraXRUaHJlYWRWaWV3cG9ydEFjY2Vz
c29yKCk7CisgICAgcmV0dXJuIG1fY2xpZW50LT50cmFuc2Zvcm1lZFZpZXdwb3J0U2l6ZSgpLmV4
cGFuZGVkVG8odmlld3BvcnRBY2Nlc3Nvci0+cGl4ZWxDb250ZW50c1NpemUoKSk7Cit9CisKIFBs
YXRmb3JtOjpJbnRSZWN0IEJhY2tpbmdTdG9yZVByaXZhdGU6OmV4cGFuZGVkQ29udGVudHNSZWN0
KCkgY29uc3QKIHsKICAgICByZXR1cm4gUGxhdGZvcm06OkludFJlY3QoUGxhdGZvcm06OkludFBv
aW50KDAsIDApLCBleHBhbmRlZENvbnRlbnRzU2l6ZSgpKTsKQEAgLTU5NywxMzUgKzUyMiw2IEBA
IFBsYXRmb3JtOjpJbnRSZWN0IEJhY2tpbmdTdG9yZVByaXZhdGU6OnZpc2libGVDb250ZW50c1Jl
Y3QoKSBjb25zdAogICAgIHJldHVybiByZWN0OwogfQogCi1QbGF0Zm9ybTo6SW50UmVjdCBCYWNr
aW5nU3RvcmVQcml2YXRlOjp1bmNsaXBwZWRWaXNpYmxlQ29udGVudHNSZWN0KCkgY29uc3QKLXsK
LSAgICBjb25zdCBQbGF0Zm9ybTo6Vmlld3BvcnRBY2Nlc3Nvciogdmlld3BvcnRBY2Nlc3NvciA9
IG1fd2ViUGFnZS0+d2Via2l0VGhyZWFkVmlld3BvcnRBY2Nlc3NvcigpOwotICAgIHJldHVybiB2
aWV3cG9ydEFjY2Vzc29yLT5waXhlbFZpZXdwb3J0UmVjdCgpOwotfQotCi1ib29sIEJhY2tpbmdT
dG9yZVByaXZhdGU6OnNob3VsZE1vdmVMZWZ0KGNvbnN0IFBsYXRmb3JtOjpJbnRSZWN0JiBiYWNr
aW5nU3RvcmVSZWN0KSBjb25zdAotewotICAgIHJldHVybiBjYW5Nb3ZlWChiYWNraW5nU3RvcmVS
ZWN0KQotICAgICAgICAmJiBiYWNraW5nU3RvcmVSZWN0LngoKSA+IHZpc2libGVDb250ZW50c1Jl
Y3QoKS54KCkKLSAgICAgICAgJiYgYmFja2luZ1N0b3JlUmVjdC54KCkgPiBleHBhbmRlZENvbnRl
bnRzUmVjdCgpLngoKTsKLX0KLQotYm9vbCBCYWNraW5nU3RvcmVQcml2YXRlOjpzaG91bGRNb3Zl
UmlnaHQoY29uc3QgUGxhdGZvcm06OkludFJlY3QmIGJhY2tpbmdTdG9yZVJlY3QpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIGNhbk1vdmVYKGJhY2tpbmdTdG9yZVJlY3QpCi0gICAgICAgICYmIGJhY2tp
bmdTdG9yZVJlY3QucmlnaHQoKSA8IHZpc2libGVDb250ZW50c1JlY3QoKS5yaWdodCgpCi0gICAg
ICAgICYmIGJhY2tpbmdTdG9yZVJlY3QucmlnaHQoKSA8IGV4cGFuZGVkQ29udGVudHNSZWN0KCku
cmlnaHQoKTsKLX0KLQotYm9vbCBCYWNraW5nU3RvcmVQcml2YXRlOjpzaG91bGRNb3ZlVXAoY29u
c3QgUGxhdGZvcm06OkludFJlY3QmIGJhY2tpbmdTdG9yZVJlY3QpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIGNhbk1vdmVZKGJhY2tpbmdTdG9yZVJlY3QpCi0gICAgICAgICYmIGJhY2tpbmdTdG9yZVJl
Y3QueSgpID4gdmlzaWJsZUNvbnRlbnRzUmVjdCgpLnkoKQotICAgICAgICAmJiBiYWNraW5nU3Rv
cmVSZWN0LnkoKSA+IGV4cGFuZGVkQ29udGVudHNSZWN0KCkueSgpOwotfQotCi1ib29sIEJhY2tp
bmdTdG9yZVByaXZhdGU6OnNob3VsZE1vdmVEb3duKGNvbnN0IFBsYXRmb3JtOjpJbnRSZWN0JiBi
YWNraW5nU3RvcmVSZWN0KSBjb25zdAotewotICAgIHJldHVybiBjYW5Nb3ZlWShiYWNraW5nU3Rv
cmVSZWN0KQotICAgICAgICAmJiBiYWNraW5nU3RvcmVSZWN0LmJvdHRvbSgpIDwgdmlzaWJsZUNv
bnRlbnRzUmVjdCgpLmJvdHRvbSgpCi0gICAgICAgICYmIGJhY2tpbmdTdG9yZVJlY3QuYm90dG9t
KCkgPCBleHBhbmRlZENvbnRlbnRzUmVjdCgpLmJvdHRvbSgpOwotfQotCi1ib29sIEJhY2tpbmdT
dG9yZVByaXZhdGU6OmNhbk1vdmVYKGNvbnN0IFBsYXRmb3JtOjpJbnRSZWN0JiBiYWNraW5nU3Rv
cmVSZWN0KSBjb25zdAotewotICAgIHJldHVybiBiYWNraW5nU3RvcmVSZWN0LndpZHRoKCkgPiB2
aXNpYmxlQ29udGVudHNSZWN0KCkud2lkdGgoKTsKLX0KLQotYm9vbCBCYWNraW5nU3RvcmVQcml2
YXRlOjpjYW5Nb3ZlWShjb25zdCBQbGF0Zm9ybTo6SW50UmVjdCYgYmFja2luZ1N0b3JlUmVjdCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gYmFja2luZ1N0b3JlUmVjdC5oZWlnaHQoKSA+IHZpc2libGVD
b250ZW50c1JlY3QoKS5oZWlnaHQoKTsKLX0KLQotYm9vbCBCYWNraW5nU3RvcmVQcml2YXRlOjpj
YW5Nb3ZlTGVmdChjb25zdCBQbGF0Zm9ybTo6SW50UmVjdCYgcmVjdCkgY29uc3QKLXsKLSAgICBQ
bGF0Zm9ybTo6SW50UmVjdCBiYWNraW5nU3RvcmVSZWN0ID0gcmVjdDsKLSAgICBQbGF0Zm9ybTo6
SW50UmVjdCB2aXNpYmxlQ29udGVudHNSZWN0ID0gdGhpcy0+dmlzaWJsZUNvbnRlbnRzUmVjdCgp
OwotICAgIFBsYXRmb3JtOjpJbnRSZWN0IGNvbnRlbnRzUmVjdCA9IHRoaXMtPmV4cGFuZGVkQ29u
dGVudHNSZWN0KCk7Ci0gICAgYmFja2luZ1N0b3JlUmVjdC5tb3ZlKC10aWxlV2lkdGgoKSwgMCk7
Ci0gICAgcmV0dXJuIGJhY2tpbmdTdG9yZVJlY3QucmlnaHQoKSA+PSB2aXNpYmxlQ29udGVudHNS
ZWN0LnJpZ2h0KCkKLSAgICAgICAgJiYgYmFja2luZ1N0b3JlUmVjdC54KCkgPj0gY29udGVudHNS
ZWN0LngoKTsKLX0KLQotYm9vbCBCYWNraW5nU3RvcmVQcml2YXRlOjpjYW5Nb3ZlUmlnaHQoY29u
c3QgUGxhdGZvcm06OkludFJlY3QmIHJlY3QpIGNvbnN0Ci17Ci0gICAgUGxhdGZvcm06OkludFJl
Y3QgYmFja2luZ1N0b3JlUmVjdCA9IHJlY3Q7Ci0gICAgUGxhdGZvcm06OkludFJlY3QgdmlzaWJs
ZUNvbnRlbnRzUmVjdCA9IHRoaXMtPnZpc2libGVDb250ZW50c1JlY3QoKTsKLSAgICBQbGF0Zm9y
bTo6SW50UmVjdCBjb250ZW50c1JlY3QgPSB0aGlzLT5leHBhbmRlZENvbnRlbnRzUmVjdCgpOwot
ICAgIGJhY2tpbmdTdG9yZVJlY3QubW92ZSh0aWxlV2lkdGgoKSwgMCk7Ci0gICAgcmV0dXJuIGJh
Y2tpbmdTdG9yZVJlY3QueCgpIDw9IHZpc2libGVDb250ZW50c1JlY3QueCgpCi0gICAgICAgICYm
IChiYWNraW5nU3RvcmVSZWN0LnJpZ2h0KCkgPD0gY29udGVudHNSZWN0LnJpZ2h0KCkKLSAgICAg
ICAgfHwgKGJhY2tpbmdTdG9yZVJlY3QucmlnaHQoKSAtIGNvbnRlbnRzUmVjdC5yaWdodCgpKSA8
IHRpbGVXaWR0aCgpKTsKLX0KLQotYm9vbCBCYWNraW5nU3RvcmVQcml2YXRlOjpjYW5Nb3ZlVXAo
Y29uc3QgUGxhdGZvcm06OkludFJlY3QmIHJlY3QpIGNvbnN0Ci17Ci0gICAgUGxhdGZvcm06Oklu
dFJlY3QgYmFja2luZ1N0b3JlUmVjdCA9IHJlY3Q7Ci0gICAgUGxhdGZvcm06OkludFJlY3Qgdmlz
aWJsZUNvbnRlbnRzUmVjdCA9IHRoaXMtPnZpc2libGVDb250ZW50c1JlY3QoKTsKLSAgICBQbGF0
Zm9ybTo6SW50UmVjdCBjb250ZW50c1JlY3QgPSB0aGlzLT5leHBhbmRlZENvbnRlbnRzUmVjdCgp
OwotICAgIGJhY2tpbmdTdG9yZVJlY3QubW92ZSgwLCAtdGlsZUhlaWdodCgpKTsKLSAgICByZXR1
cm4gYmFja2luZ1N0b3JlUmVjdC5ib3R0b20oKSA+PSB2aXNpYmxlQ29udGVudHNSZWN0LmJvdHRv
bSgpCi0gICAgICAgICYmIGJhY2tpbmdTdG9yZVJlY3QueSgpID49IGNvbnRlbnRzUmVjdC55KCk7
Ci19Ci0KLWJvb2wgQmFja2luZ1N0b3JlUHJpdmF0ZTo6Y2FuTW92ZURvd24oY29uc3QgUGxhdGZv
cm06OkludFJlY3QmIHJlY3QpIGNvbnN0Ci17Ci0gICAgUGxhdGZvcm06OkludFJlY3QgYmFja2lu
Z1N0b3JlUmVjdCA9IHJlY3Q7Ci0gICAgUGxhdGZvcm06OkludFJlY3QgdmlzaWJsZUNvbnRlbnRz
UmVjdCA9IHRoaXMtPnZpc2libGVDb250ZW50c1JlY3QoKTsKLSAgICBQbGF0Zm9ybTo6SW50UmVj
dCBjb250ZW50c1JlY3QgPSB0aGlzLT5leHBhbmRlZENvbnRlbnRzUmVjdCgpOwotICAgIGJhY2tp
bmdTdG9yZVJlY3QubW92ZSgwLCB0aWxlSGVpZ2h0KCkpOwotICAgIHJldHVybiBiYWNraW5nU3Rv
cmVSZWN0LnkoKSA8PSB2aXNpYmxlQ29udGVudHNSZWN0LnkoKQotICAgICAgICAmJiAoYmFja2lu
Z1N0b3JlUmVjdC5ib3R0b20oKSA8PSBjb250ZW50c1JlY3QuYm90dG9tKCkKLSAgICAgICAgfHwg
KGJhY2tpbmdTdG9yZVJlY3QuYm90dG9tKCkgLSBjb250ZW50c1JlY3QuYm90dG9tKCkpIDwgdGls
ZUhlaWdodCgpKTsKLX0KLQotUGxhdGZvcm06OkludFJlY3QgQmFja2luZ1N0b3JlUHJpdmF0ZTo6
YmFja2luZ1N0b3JlUmVjdEZvclNjcm9sbChpbnQgZGVsdGFYLCBpbnQgZGVsdGFZLCBjb25zdCBQ
bGF0Zm9ybTo6SW50UmVjdCYgcmVjdCkgY29uc3QKLXsKLSAgICAvLyBUaGUgY3VycmVudCByZWN0
LgotICAgIFBsYXRmb3JtOjpJbnRSZWN0IGJhY2tpbmdTdG9yZVJlY3QgPSByZWN0OwotCi0gICAg
Ly8gVGhpcyBtZXRob2QgdXNlcyB0aGUgZGVsdGEgdmFsdWVzIHRvIGRlc2NyaWJlIHRoZSBiYWNr
aW5nc3RvcmUgcmVjdAotICAgIC8vIGdpdmVuIHRoZSBjdXJyZW50IHNjcm9sbCBkaXJlY3Rpb24g
YW5kIHRoZSB2aWV3cG9ydCBwb3NpdGlvbi4gSG93ZXZlciwKLSAgICAvLyB0aGlzIG1ldGhvZCBj
YW4gYmUgY2FsbGVkIHdpdGggbm8gZGVsdGFzIHdoYXRzb2V2ZXIgZm9yIGluc3RhbmNlIHdoZW4K
LSAgICAvLyB0aGUgY29udGVudHMgc2l6ZSBjaGFuZ2VzIG9yIHRoZSBvcmllbnRhdGlvbiBjaGFu
Z2VzLiBJbiB0aGlzIGNhc2UsIHdlCi0gICAgLy8gd2FudCB0byB1c2UgdGhlIHByZXZpb3VzIHNj
cm9sbCBkaXJlY3Rpb24gdG8gZGVzY3JpYmUgdGhlIGJhY2tpbmdzdG9yZQotICAgIC8vIHJlY3Qu
IFRoaXMgd2lsbCByZXN1bHQgaW4gbGVzcyBjaGVja2VyYm9hcmQuCi0gICAgaWYgKCFkZWx0YVgg
JiYgIWRlbHRhWSkgewotICAgICAgICBkZWx0YVggPSBtX3ByZXZpb3VzRGVsdGEud2lkdGgoKTsK
LSAgICAgICAgZGVsdGFZID0gbV9wcmV2aW91c0RlbHRhLmhlaWdodCgpOwotICAgIH0KLSAgICBt
X3ByZXZpb3VzRGVsdGEgPSBQbGF0Zm9ybTo6SW50U2l6ZShkZWx0YVgsIGRlbHRhWSk7Ci0KLSAg
ICAvLyBSZXR1cm4gdG8gb3JpZ2luIGlmIG5lZWQgYmUuCi0gICAgaWYgKCFjYW5Nb3ZlWChiYWNr
aW5nU3RvcmVSZWN0KSAmJiBiYWNraW5nU3RvcmVSZWN0LngoKSkKLSAgICAgICAgYmFja2luZ1N0
b3JlUmVjdC5zZXRYKDApOwotCi0gICAgaWYgKCFjYW5Nb3ZlWShiYWNraW5nU3RvcmVSZWN0KSAm
JiBiYWNraW5nU3RvcmVSZWN0LnkoKSkKLSAgICAgICAgYmFja2luZ1N0b3JlUmVjdC5zZXRZKDAp
OwotCi0gICAgLy8gTW92ZSB0aGUgcmVjdCBsZWZ0LgotICAgIHdoaWxlIChzaG91bGRNb3ZlTGVm
dChiYWNraW5nU3RvcmVSZWN0KSB8fCAoZGVsdGFYID4gMCAmJiBjYW5Nb3ZlTGVmdChiYWNraW5n
U3RvcmVSZWN0KSkpCi0gICAgICAgIGJhY2tpbmdTdG9yZVJlY3QubW92ZSgtdGlsZVdpZHRoKCks
IDApOwotCi0gICAgLy8gTW92ZSB0aGUgcmVjdCByaWdodC4KLSAgICB3aGlsZSAoc2hvdWxkTW92
ZVJpZ2h0KGJhY2tpbmdTdG9yZVJlY3QpIHx8IChkZWx0YVggPCAwICYmIGNhbk1vdmVSaWdodChi
YWNraW5nU3RvcmVSZWN0KSkpCi0gICAgICAgIGJhY2tpbmdTdG9yZVJlY3QubW92ZSh0aWxlV2lk
dGgoKSwgMCk7Ci0KLSAgICAvLyBNb3ZlIHRoZSByZWN0IHVwLgotICAgIHdoaWxlIChzaG91bGRN
b3ZlVXAoYmFja2luZ1N0b3JlUmVjdCkgfHwgKGRlbHRhWSA+IDAgJiYgY2FuTW92ZVVwKGJhY2tp
bmdTdG9yZVJlY3QpKSkKLSAgICAgICAgYmFja2luZ1N0b3JlUmVjdC5tb3ZlKDAsIC10aWxlSGVp
Z2h0KCkpOwotCi0gICAgLy8gTW92ZSB0aGUgcmVjdCBkb3duLgotICAgIHdoaWxlIChzaG91bGRN
b3ZlRG93bihiYWNraW5nU3RvcmVSZWN0KSB8fCAoZGVsdGFZIDwgMCAmJiBjYW5Nb3ZlRG93bihi
YWNraW5nU3RvcmVSZWN0KSkpCi0gICAgICAgIGJhY2tpbmdTdG9yZVJlY3QubW92ZSgwLCB0aWxl
SGVpZ2h0KCkpOwotCi0gICAgcmV0dXJuIGJhY2tpbmdTdG9yZVJlY3Q7Ci19Ci0KIHZvaWQgQmFj
a2luZ1N0b3JlUHJpdmF0ZTo6c2V0QmFja2luZ1N0b3JlUmVjdChjb25zdCBQbGF0Zm9ybTo6SW50
UmVjdCYgYmFja2luZ1N0b3JlUmVjdCwgZG91YmxlIHNjYWxlKQogewogICAgIGlmICghbV93ZWJQ
YWdlLT5pc1Zpc2libGUoKSkKQEAgLTk0NCw2ICs3NDAsMzAyIEBAIGJvb2wgQmFja2luZ1N0b3Jl
UHJpdmF0ZTo6aXNDdXJyZW50VmlzaWJsZUpvYihjb25zdCBUaWxlSW5kZXgmIGluZGV4LCBCYWNr
aW5nU3RvCiAgICAgICAgIHx8IG1fcmVuZGVyUXVldWUtPmlzQ3VycmVudFJlZ3VsYXJSZW5kZXJK
b2IoaW5kZXgsIGdlb21ldHJ5KTsKIH0KIAorUGxhdGZvcm06OkludFJlY3QgQmFja2luZ1N0b3Jl
UHJpdmF0ZTo6bm9uT3ZlcnNjcm9sbGVkKGNvbnN0IFBsYXRmb3JtOjpJbnRSZWN0JiB2aWV3cG9y
dFJlY3QsIGNvbnN0IFBsYXRmb3JtOjpJbnRSZWN0JiBjb250ZW50c1JlY3QpCit7CisgICAgY29u
c3QgUGxhdGZvcm06OkludFBvaW50IG1heGltdW1SZWFzb25hYmxlVmlld3BvcnRMb2NhdGlvbigK
KyAgICAgICAgY29udGVudHNSZWN0LnJpZ2h0KCkgLSB2aWV3cG9ydFJlY3Qud2lkdGgoKSwKKyAg
ICAgICAgY29udGVudHNSZWN0LmJvdHRvbSgpIC0gdmlld3BvcnRSZWN0LmhlaWdodCgpKTsKKwor
ICAgIGNvbnN0IFBsYXRmb3JtOjpJbnRQb2ludCBtaW5pbXVtUmVjdExvY2F0aW9uKAorICAgICAg
ICBzdGQ6Om1heCgwLCBzdGQ6Om1pbihtYXhpbXVtUmVhc29uYWJsZVZpZXdwb3J0TG9jYXRpb24u
eCgpLCB2aWV3cG9ydFJlY3QueCgpKSksCisgICAgICAgIHN0ZDo6bWF4KDAsIHN0ZDo6bWluKG1h
eGltdW1SZWFzb25hYmxlVmlld3BvcnRMb2NhdGlvbi55KCksIHZpZXdwb3J0UmVjdC55KCkpKSk7
CisKKyAgICByZXR1cm4gUGxhdGZvcm06OkludFJlY3QobWluaW11bVJlY3RMb2NhdGlvbiwgdmll
d3BvcnRSZWN0LnNpemUoKSk7Cit9CisKK1BsYXRmb3JtOjpJbnRSZWN0IEJhY2tpbmdTdG9yZVBy
aXZhdGU6OmVuY2xvc2luZ1RpbGVSZWN0KGNvbnN0IFBsYXRmb3JtOjpJbnRSZWN0JiBwaXhlbENv
bnRlbnRzUmVjdCkKK3sKKyAgICBQbGF0Zm9ybTo6SW50UG9pbnQgbG9jYXRpb24oCisgICAgICAg
IHRpbGVXaWR0aCgpICogKHBpeGVsQ29udGVudHNSZWN0LngoKSAvIHRpbGVXaWR0aCgpKSwKKyAg
ICAgICAgdGlsZUhlaWdodCgpICogKHBpeGVsQ29udGVudHNSZWN0LnkoKSAvIHRpbGVIZWlnaHQo
KSkpOworCisgICAgcmV0dXJuIFBsYXRmb3JtOjpJbnRSZWN0KGxvY2F0aW9uLCBQbGF0Zm9ybTo6
SW50U2l6ZSgKKyAgICAgICAgdGlsZVdpZHRoKCkgKiAoKHBpeGVsQ29udGVudHNSZWN0LnJpZ2h0
KCkgLSBsb2NhdGlvbi54KCkgLSAxKSAvIHRpbGVXaWR0aCgpICsgMSksCisgICAgICAgIHRpbGVI
ZWlnaHQoKSAqICgocGl4ZWxDb250ZW50c1JlY3QuYm90dG9tKCkgLSBsb2NhdGlvbi55KCkgLSAx
KSAvIHRpbGVIZWlnaHQoKSArIDEpKSk7Cit9CisKK1BsYXRmb3JtOjpJbnRSZWN0IEJhY2tpbmdT
dG9yZVByaXZhdGU6OmRlc2lyZWRCYWNraW5nU3RvcmVSZWN0KGNvbnN0IFBsYXRmb3JtOjpJbnRS
ZWN0JiBwaXhlbFZpZXdwb3J0UmVjdCwgY29uc3QgUGxhdGZvcm06OkludFJlY3QmIG1heGltdW1S
ZWFzb25hYmxlUmVjdCwgaW50IGRlbHRhWCwgaW50IGRlbHRhWSkKK3sKKyAgICBjb25zdCBpbnQg
c2Nyb2xsRGVsdGFDdXRvZmYgPSAzMDsKKyAgICBjb25zdCBmbG9hdCBtdWx0aXBsaWVyRG93bkF0
U3RhbmRzdGlsbCA9IDIuMGY7CisKKyAgICBQbGF0Zm9ybTo6SW50UmVjdCBkZXNpcmVkUmVjdCA9
IHBpeGVsVmlld3BvcnRSZWN0OworICAgIGRlc2lyZWRSZWN0LmluZmxhdGUodGlsZVdpZHRoKCkg
LyAyLCB0aWxlSGVpZ2h0KCkgLyAyKTsKKyAgICBkZXNpcmVkUmVjdC5pbnRlcnNlY3QobWF4aW11
bVJlYXNvbmFibGVSZWN0KTsKKworICAgIC8vIEdldCBhIHBpY3R1cmUgb2YgdGhlIHNjcm9sbGlu
ZyBtb21lbnR1bSwgbGltaXRlZCB0byBiZXR3ZWVuIC0xLjAgYW5kIDEuMCBvbiBib3RoIHggYW5k
IHkgYXhlcy4KKyAgICBjb25zdCBmbG9hdCBleHBhbmRYID0gc3RkOjptYXgoLXNjcm9sbERlbHRh
Q3V0b2ZmLCBzdGQ6Om1pbihzY3JvbGxEZWx0YUN1dG9mZiwgLWRlbHRhWCkpIC8gc3RhdGljX2Nh
c3Q8ZmxvYXQ+KHNjcm9sbERlbHRhQ3V0b2ZmKTsKKyAgICBjb25zdCBmbG9hdCBleHBhbmRZID0g
c3RkOjptYXgoLXNjcm9sbERlbHRhQ3V0b2ZmLCBzdGQ6Om1pbihzY3JvbGxEZWx0YUN1dG9mZiwg
LWRlbHRhWSkpIC8gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHNjcm9sbERlbHRhQ3V0b2ZmKTsKKyAgICBj
b25zdCBmbG9hdCBtb21lbnR1bSA9IHN0ZDo6bWF4KGV4cGFuZFgsIGV4cGFuZFkpOworCisgICAg
Ly8gSWYgbm8gc2Nyb2xsaW5nIG9jY3VycywgdXNlIHRoZSB2aWV3cG9ydCByYXRpbyBhcyBkZWZh
dWx0IHByb3BvcnRpb24uCisgICAgLy8gQXQgbWF4aW11bSBtb21lbnR1bSAoMS4wKSwgZGlzcmVn
YXJkIHRoZSB2aWV3cG9ydCByYXRpbyBjb21wbGV0ZWx5IChtdWx0aXBseSBieSAxLjApLgorICAg
IC8vIEluIGJldHdlZW4sIGludGVycG9sYXRlLgorICAgIGNvbnN0IGZsb2F0IHZpZXdwb3J0UmF0
aW8gPSBwaXhlbFZpZXdwb3J0UmVjdC5pc0VtcHR5KCkgPyAxLjBmIDogKHBpeGVsVmlld3BvcnRS
ZWN0LndpZHRoKCkgLyBzdGF0aWNfY2FzdDxmbG9hdD4ocGl4ZWxWaWV3cG9ydFJlY3QuaGVpZ2h0
KCkpKTsKKyAgICBjb25zdCBmbG9hdCB2aWV3cG9ydFJhdGlvTXVsdGlwbGllciA9IHZpZXdwb3J0
UmF0aW8gKyBtb21lbnR1bSAqICgxLjBmIC0gdmlld3BvcnRSYXRpbyk7CisKKyAgICAvLyBJbiB0
aGUgc2FtZSBtYW5uZXIsIHdlIHByaW9yaXRpemUgdGhlICJkb3duIiBkaXJlY3Rpb24gaWYgbm8g
b3RoZXIKKyAgICAvLyBtb21lbnR1bSBvdmVycG93ZXJzIGl0LCBiZWNhdXNlIHRoZSB1c2VyIHdp
bGwgbW9zdCBsaWtlbHkgc2Nyb2xsCisgICAgLy8gaW4gdGhhdCBkaXJlY3Rpb24uCisgICAgY29u
c3QgZmxvYXQgbXVsdGlwbGllckRvd24gPSBtdWx0aXBsaWVyRG93bkF0U3RhbmRzdGlsbCArIG1v
bWVudHVtICogKDEuMGYgLSBtdWx0aXBsaWVyRG93bkF0U3RhbmRzdGlsbCk7CisKKyAgICAvLyBU
aGUgc3Ryb25nZXIgdGhlIG1vbWVudHVtIGlzIG9mIG9uZSBheGlzLCB0aGUgbGVzc2VyIGltcG9y
dGFuY2Ugd2lsbCBiZQorICAgIC8vIHBsYWNlZCBvbiB0aGUgb3RoZXIgb25lLiBBbHNvLCBpZiB0
aGUgcmVjdGFuZ2xlIGFscmVhZHkgY292ZXJzIHRoZSB3aG9sZQorICAgIC8vIHdpZHRoIG9yIGhl
aWdodCB0aGVuIHdlIGRvbid0IGhhdmUgdG8gaW5jcmVhc2UgaXQgb24gdGhhdCBheGlzLgorICAg
IGZsb2F0IGltcG9ydGFuY2VYID0gZGVzaXJlZFJlY3Qud2lkdGgoKSA9PSBtYXhpbXVtUmVhc29u
YWJsZVJlY3Qud2lkdGgoKSA/IDAuMGYgOiAoMS4wZiAtIGZhYnMoZXhwYW5kWSkpOworICAgIGZs
b2F0IGltcG9ydGFuY2VZID0gZGVzaXJlZFJlY3QuaGVpZ2h0KCkgPT0gbWF4aW11bVJlYXNvbmFi
bGVSZWN0LmhlaWdodCgpID8gMC4wZiA6ICgxLjBmIC0gZmFicyhleHBhbmRYKSk7CisgICAgaWYg
KGltcG9ydGFuY2VYIDw9IEZMVF9FUFNJTE9OICYmIGltcG9ydGFuY2VZIDw9IEZMVF9FUFNJTE9O
KSB7CisgICAgICAgIGltcG9ydGFuY2VYID0gMS4wZjsKKyAgICAgICAgaW1wb3J0YW5jZVkgPSAx
LjBmOworICAgIH0KKyAgICBpbXBvcnRhbmNlWCAqPSB2aWV3cG9ydFJhdGlvTXVsdGlwbGllcjsK
KworICAgIC8vIFdlIHVzZSBheGlzIGltcG9ydGFuY2UgdG8gY2FsY3VsYXRlIHRoZSByYXRpbyBi
ZXR3ZWVuIHggYW5kIHkgYXhlcy4KKyAgICAvLyBJZiB0aGUgaW1wb3J0YW5jZSBvZiBvbmUgYXhp
cyBpcyAwIGFuZCB0aGUgb3RoZXIgaXMgcG9zaXRpdmUsIG9uZSBtdWx0aXBsaWVyIHdpbGwgYmUg
MCBhbmQgdGhlIG90aGVyIHdpbGwgYmUgMS4KKyAgICBjb25zdCBmbG9hdCBtdWx0aXBsaWVyWCA9
IGltcG9ydGFuY2VZID8gKGltcG9ydGFuY2VYIC8gaW1wb3J0YW5jZVkpIDogMS4wZjsKKyAgICBj
b25zdCBmbG9hdCBtdWx0aXBsaWVyWSA9IGltcG9ydGFuY2VYID8gKGltcG9ydGFuY2VZIC8gaW1w
b3J0YW5jZVgpIDogMS4wZjsKKworICAgIC8vIFRyeSB0byBhc3NpZ24gcHJvcG9ydGlvbmFsIHZh
bHVlcyBmb3IgZXh0ZW5kaW5nIHRoZSBkZXNpcmVkCisgICAgLy8gYmFja2luZ3N0b3JlIHJlY3Qg
aW50byB0aGUgZm91ciBkaXJlY3Rpb25zLiBJdCBkb2Vzbid0IG1hdHRlciBob3cgYmlnCisgICAg
Ly8gdGhlc2UgdmFsdWVzIGFyZSBhcyBsb25nIGFzIHRoZXkncmUgcHJvcG9ydGlvbmFsIGFuZCA+
PSAwLiBSYXRpb25hbGU6CisgICAgLy8gKiBBbGxvY2F0ZSBtb3JlIHRpbGUgc3BhY2UgZm9yIHRo
ZSBheGlzIHRoYXQgaXMgYmVpbmcgc2Nyb2xsZWQuCisgICAgLy8gKiBBbGxvY2F0ZSBhbG1vc3Qg
YWxsIHNwYWNlIG9mIG9uZSBheGlzIGlmIHNjcm9sbGluZyBpbiBvbmUgZGlyZWN0aW9uIGhpdHMg
dGhlIGN1dG9mZiB2YWx1ZSwgbGVhdmUgdGhlIHJlc3QgZm9yIHRoZSBvcHBvc2l0ZSBkaXJlY3Rp
b24uCisgICAgZmxvYXQgZXhwYW5kUmlnaHQgPSAoMC41ZiArICgwLjRmICogZXhwYW5kWCkpICog
bXVsdGlwbGllclg7CisgICAgZmxvYXQgZXhwYW5kTGVmdCA9ICgwLjVmICsgKC0wLjRmICogZXhw
YW5kWCkpICogbXVsdGlwbGllclg7CisgICAgZmxvYXQgZXhwYW5kRG93biA9ICgwLjVmICsgKDAu
NGYgKiBleHBhbmRZKSkgKiBtdWx0aXBsaWVyWSAqIG11bHRpcGxpZXJEb3duOworICAgIGZsb2F0
IGV4cGFuZFVwID0gKDAuNWYgKyAoLTAuNGYgKiBleHBhbmRZKSkgKiBtdWx0aXBsaWVyWTsKKwor
ICAgIC8vIENhbGN1bGF0ZSBob3cgbWFueSBwaXhlbHMgd2UgaGF2ZSBsZWZ0IHRvIHNwYXJlIGFu
ZCBob3cgbWFueSBvZiB0aGVzZQorICAgIC8vIHdlIGlkZWFsbHkgd2FudCB0byBhbGxvY2F0ZSBp
biBhbnkgZ2l2ZW4gZGlyZWN0aW9uLgorICAgIGludCByZW1haW5pbmdOdW1iZXJPZlRpbGVQaXhl
bHMgPQorICAgICAgICBTdXJmYWNlUG9vbDo6Z2xvYmFsU3VyZmFjZVBvb2woKS0+bnVtYmVyT2ZC
YWNraW5nU3RvcmVGcm9udEJ1ZmZlcnMoKSAqIHRpbGVXaWR0aCgpICogdGlsZUhlaWdodCgpCisg
ICAgICAgIC0gZGVzaXJlZFJlY3QuYXJlYSgpOworCisgICAgd2hpbGUgKGV4cGFuZFJpZ2h0ID4g
RkxUX0VQU0lMT04gfHwgZXhwYW5kTGVmdCA+IEZMVF9FUFNJTE9OIHx8IGV4cGFuZERvd24gPiBG
TFRfRVBTSUxPTiB8fCBleHBhbmRVcCA+IEZMVF9FUFNJTE9OKSB7CisgICAgICAgIGludCBwcmV2
aW91c1JlbWFpbmluZ051bWJlck9mVGlsZVBpeGVscyA9IHJlbWFpbmluZ051bWJlck9mVGlsZVBp
eGVsczsKKworICAgICAgICAvLyBFeGN1cnNpb24gaW50byBtYXRoZW1hdGljYWwgZm9ybXVsYXMg
dG8gYmUgc29sdmVkLgorICAgICAgICAvLyBXZSBub3cgaGF2ZSBwcm9wb3J0aW9uYWwgZmFjdG9y
cyBmb3IgaG93IG11Y2ggZmFyIHRoZSBpZGVhbAorICAgICAgICAvLyB0aWxlIGdlb21ldHJ5IHJl
Y3QgZXh0ZW5kcyBpbnRvIGVhY2ggZGlyZWN0aW9uLCB3aGF0IHdlIG5lZWQgaXMgdG8gZmluZAor
ICAgICAgICAvLyBhIGNvbnN0YW50ICJjIiB0aGF0IHRyYW5zbGF0ZXMgdGhlc2UgZmFjdG9ycyBp
bnRvIGFjdHVhbCBwaXhlbCB2YWx1ZXMuCisgICAgICAgIC8vCisgICAgICAgIC8vIHB4UmlnaHQg
PT0gYyAqIGV4cGFuZFJpZ2h0CisgICAgICAgIC8vIHB4TGVmdCAgPT0gYyAqIGV4cGFuZExlZnQK
KyAgICAgICAgLy8gcHhEb3duICA9PSBjICogZXhwYW5kRG93bgorICAgICAgICAvLyBweFVwICAg
ID09IGMgKiBleHBhbmRVcAorICAgICAgICAvLworICAgICAgICAvLyByZW1haW5pbmdOdW1iZXJP
ZlRpbGVQaXhlbHMgPT0KKyAgICAgICAgLy8gICAgICAgcHhVcCAgICogKHB4TGVmdCArIGluaXRp
YWxXaWR0aCArIHB4UmlnaHQpCisgICAgICAgIC8vICAgICArIHB4RG93biAqIChweExlZnQgKyBp
bml0aWFsV2lkdGggKyBweFJpZ2h0KQorICAgICAgICAvLyAgICAgKyBpbml0aWFsSGVpZ2h0ICog
KHB4TGVmdCArIHB4UmlnaHQpCisgICAgICAgIC8vCisgICAgICAgIC8vIFdvbGZyYW0gQWxwaGE6
IHNvbHZlIHAgPSBjICogdSAqIChjICogbCArIHcgKyBjICogcikgKyBjICogZCAqIChjICogbCAr
IHcgKyBjICogcikgKyBoICogKGMgKiBsICsgYyAqIHIpIGZvciBjCisgICAgICAgIC8vIGxlYWRz
IHRvIHRoZSBmb2xsb3dpbmcgcmVzb2x1dGlvbiAoZGlzY291bnRpbmcgdGhlIG5lZ2F0aXZlIG9u
ZSk6CisgICAgICAgIC8vIChkK3UpKGwrcikgIT0gMCBhbmQgYyA9IChzcXJ0KChkIHcgKyBoIGwg
KyBoIHIgKyB1IHcpXjIgKyA0IHAgKGQgbCArIGQgciArIGwgdSArIHIgdSkpIC0gZCB3IC0gaCBs
IC0gaCByIC0gdSB3KSAvICgyIChkK3UpIChsK3IpKQorICAgICAgICAvLworICAgICAgICAvLyBb
bXVsdGlwbGllclggPT0gMF06IHJlbWFpbmluZ051bWJlck9mVGlsZVBpeGVscyA9PSBpbml0aWFs
V2lkdGggKiAocHhVcCArIHB4RG93bikKKyAgICAgICAgLy8gICBzb2x2ZSBwID0gdyAqIGMgKiAo
dSArIGQpIGZvciBjICA9PiAgdyAoZCt1KSAhPSAwIGFuZCBjID0gcCAvICh3IChkK3UpKQorICAg
ICAgICAvLyBbbXVsdGlwbGllclkgPT0gMF06IHJlbWFpbmluZ051bWJlck9mVGlsZVBpeGVscyA9
PSBpbml0aWFsSGVpZ2h0ICogKHB4TGVmdCArIHB4UmlnaHQpCisgICAgICAgIC8vICAgc29sdmUg
cCA9IGggKiBjICogKGwgKyByKSBmb3IgYyAgPT4gIGggKGwrcikgIT0gMCBhbmQgYyA9IHAgLyAo
aCAobCtyKSkKKworICAgICAgICBjb25zdCBpbnQgcCA9IHJlbWFpbmluZ051bWJlck9mVGlsZVBp
eGVsczsKKyAgICAgICAgY29uc3QgaW50IHcgPSBkZXNpcmVkUmVjdC53aWR0aCgpOworICAgICAg
ICBjb25zdCBpbnQgaCA9IGRlc2lyZWRSZWN0LmhlaWdodCgpOworICAgICAgICBjb25zdCBmbG9h
dCByID0gZXhwYW5kUmlnaHQ7CisgICAgICAgIGNvbnN0IGZsb2F0IGwgPSBleHBhbmRMZWZ0Owor
ICAgICAgICBjb25zdCBmbG9hdCBkID0gZXhwYW5kRG93bjsKKyAgICAgICAgY29uc3QgZmxvYXQg
dSA9IGV4cGFuZFVwOworICAgICAgICBpbnQgcHhMZWZ0ID0gMDsKKyAgICAgICAgaW50IHB4Umln
aHQgPSAwOworICAgICAgICBpbnQgcHhEb3duID0gMDsKKyAgICAgICAgaW50IHB4VXAgPSAwOwor
CisgICAgICAgIGlmIChsICsgciA8PSBGTFRfRVBTSUxPTikgeyAvLyBtdWx0aXBsaWVyWCA9PSAw
CisgICAgICAgICAgICBBU1NFUlQoZCArIHUgPiBGTFRfRVBTSUxPTik7CisgICAgICAgICAgICBj
b25zdCBmbG9hdCBjID0gcCAvICh3ICogKGQgKyB1KSk7CisgICAgICAgICAgICBweERvd24gPSBz
dGF0aWNfY2FzdDxpbnQ+KGMgKiBleHBhbmREb3duKTsKKyAgICAgICAgICAgIHB4VXAgPSBzdGF0
aWNfY2FzdDxpbnQ+KGMgKiBleHBhbmRVcCk7CisgICAgICAgIH0gZWxzZSBpZiAodSArIGQgPD0g
RkxUX0VQU0lMT04pIHsgLy8gbXVsdGlwbGllclkgPT0gMAorICAgICAgICAgICAgQVNTRVJUKGwg
KyByID4gRkxUX0VQU0lMT04pOworICAgICAgICAgICAgY29uc3QgZmxvYXQgYyA9IHAgLyAoaCAq
IChsICsgcikpOworICAgICAgICAgICAgcHhMZWZ0ID0gc3RhdGljX2Nhc3Q8aW50PihjICogZXhw
YW5kTGVmdCk7CisgICAgICAgICAgICBweFJpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50PihjICogZXhw
YW5kUmlnaHQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgY29uc3QgZmxvYXQgYyA9
IChzcXJ0KHBvdyh3ICogKGQgKyB1KSArIGggKiAobCArIHIpLCAyLjApICsgNC4wZiAqIHAgKiAo
ZCArIHUpICogKGwgKyByKSkgLSB3ICogKGQgKyB1KSAtIGggKiAobCArIHIpKSAvICgyLjBmICog
KGQgKyB1KSAqIChsICsgcikpOworICAgICAgICAgICAgcHhSaWdodCA9IHN0YXRpY19jYXN0PGlu
dD4oYyAqIGV4cGFuZFJpZ2h0KTsKKyAgICAgICAgICAgIHB4TGVmdCA9IHN0YXRpY19jYXN0PGlu
dD4oYyAqIGV4cGFuZExlZnQpOworICAgICAgICAgICAgcHhEb3duID0gc3RhdGljX2Nhc3Q8aW50
PihjICogZXhwYW5kRG93bik7CisgICAgICAgICAgICBweFVwID0gc3RhdGljX2Nhc3Q8aW50Pihj
ICogZXhwYW5kVXApOworICAgICAgICB9CisKKyAgICAgICAgZGVzaXJlZFJlY3Quc2V0WChkZXNp
cmVkUmVjdC54KCkgLSBweExlZnQpOworICAgICAgICBkZXNpcmVkUmVjdC5zZXRXaWR0aChkZXNp
cmVkUmVjdC53aWR0aCgpICsgcHhMZWZ0ICsgcHhSaWdodCk7CisgICAgICAgIGRlc2lyZWRSZWN0
LnNldFkoZGVzaXJlZFJlY3QueSgpIC0gcHhVcCk7CisgICAgICAgIGRlc2lyZWRSZWN0LnNldEhl
aWdodChkZXNpcmVkUmVjdC5oZWlnaHQoKSArIHB4VXAgKyBweERvd24pOworCisgICAgICAgIC8v
IElmIHdlIGhhdmUgZW5vdWdoIHBpeGVscyBsZWZ0IGZvciBhbm90aGVyIGxvb3AsIGlnbm9yZSBk
aXJlY3Rpb25zCisgICAgICAgIC8vIHRoYXQgY2FuJ3QgcmVhc29uYWJseSBleHBhbmQgYW55IGZ1
cnRoZXIuCisgICAgICAgIGlmIChkZXNpcmVkUmVjdC5yaWdodCgpID49IG1heGltdW1SZWFzb25h
YmxlUmVjdC5yaWdodCgpKQorICAgICAgICAgICAgZXhwYW5kUmlnaHQgPSAwLjBmOworICAgICAg
ICBpZiAoZGVzaXJlZFJlY3QueCgpID49IG1heGltdW1SZWFzb25hYmxlUmVjdC54KCkpCisgICAg
ICAgICAgICBleHBhbmRMZWZ0ID0gMC4wZjsKKyAgICAgICAgaWYgKGRlc2lyZWRSZWN0LmJvdHRv
bSgpID49IG1heGltdW1SZWFzb25hYmxlUmVjdC5ib3R0b20oKSkKKyAgICAgICAgICAgIGV4cGFu
ZERvd24gPSAwLjBmOworICAgICAgICBpZiAoZGVzaXJlZFJlY3QueSgpID49IG1heGltdW1SZWFz
b25hYmxlUmVjdC55KCkpCisgICAgICAgICAgICBleHBhbmRVcCA9IDAuMGY7CisKKyAgICAgICAg
ZGVzaXJlZFJlY3QuaW50ZXJzZWN0KG1heGltdW1SZWFzb25hYmxlUmVjdCk7CisKKyAgICAgICAg
cmVtYWluaW5nTnVtYmVyT2ZUaWxlUGl4ZWxzID0KKyAgICAgICAgICAgIFN1cmZhY2VQb29sOjpn
bG9iYWxTdXJmYWNlUG9vbCgpLT5udW1iZXJPZkJhY2tpbmdTdG9yZUZyb250QnVmZmVycygpICog
dGlsZVdpZHRoKCkgKiB0aWxlSGVpZ2h0KCkKKyAgICAgICAgICAgIC0gZGVzaXJlZFJlY3QuYXJl
YSgpOworCisgICAgICAgIC8vIElmIHdlIGRvbid0IGhhdmUgZW5vdWdoIHBpeGVscyBsZWZ0IHRv
IGV4cGFuZCB0aGUgcmVjdGFuZ2xlIGFueW1vcmUsCisgICAgICAgIC8vIGp1c3QgbGVhdmUgaXQg
YW5kIHN0aWNrIHdpdGggdGhlIGN1cnJlbnQgb25lLgorICAgICAgICBpZiAocHJldmlvdXNSZW1h
aW5pbmdOdW1iZXJPZlRpbGVQaXhlbHMgPT0gcmVtYWluaW5nTnVtYmVyT2ZUaWxlUGl4ZWxzKQor
ICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIGRlc2lyZWRSZWN0OworfQor
Cit2b2lkIEJhY2tpbmdTdG9yZVByaXZhdGU6Om1lcmdlRGVzaXJlZEJhY2tpbmdTdG9yZVJlY3Qo
Y29uc3QgUGxhdGZvcm06OkludFJlY3QmIGRlc2lyZWRSZWN0LCBjb25zdCBQbGF0Zm9ybTo6SW50
UmVjdCYgcGl4ZWxWaWV3cG9ydEZvckRlc2lyZWRSZWN0KQoreworICAgIGRvdWJsZSBjdXJyZW50
U2NhbGUgPSBtX3dlYlBhZ2UtPmQtPmN1cnJlbnRTY2FsZSgpOworCisgICAgaWYgKG1fZGVzaXJl
ZEJhY2tpbmdTdG9yZVJlY3QuaXNFbXB0eSgpIHx8IG1fZGVzaXJlZEJhY2tpbmdTdG9yZVJlY3RT
Y2FsZSAhPSBjdXJyZW50U2NhbGUpCisgICAgICAgIG1fZGVzaXJlZEJhY2tpbmdTdG9yZVJlY3Qg
PSBkZXNpcmVkUmVjdDsKKyAgICBlbHNlIHsKKyAgICAgICAgLy8gQXZlcmFnZSBvdXQgc3VkZGVu
IHNwaWtlcyBpbiBzY3JvbGxpbmcgZGVsdGFzIGJ5IHRha2luZyBoYWxmIG9mIHRoZQorICAgICAg
ICAvLyBwcmV2aW91cyBkZXNpcmVkIHJlY3QncyBzaGFwZS4KKyAgICAgICAgUGxhdGZvcm06Oklu
dFJlY3QgcHJldmlvdXNSZWN0QXRDdXJyZW50TG9jYXRpb24gPSBtX2Rlc2lyZWRCYWNraW5nU3Rv
cmVSZWN0OworICAgICAgICBwcmV2aW91c1JlY3RBdEN1cnJlbnRMb2NhdGlvbi5tb3ZlKAorICAg
ICAgICAgICAgLW1fZGVzaXJlZEJhY2tpbmdTdG9yZVJlY3RWaWV3cG9ydExvY2F0aW9uLngoKSAr
IHBpeGVsVmlld3BvcnRGb3JEZXNpcmVkUmVjdC54KCksCisgICAgICAgICAgICAtbV9kZXNpcmVk
QmFja2luZ1N0b3JlUmVjdFZpZXdwb3J0TG9jYXRpb24ueSgpICsgcGl4ZWxWaWV3cG9ydEZvckRl
c2lyZWRSZWN0LnkoKSk7CisKKyAgICAgICAgLy8gUm91bmQgdXAgYmVjYXVzZSB3ZSdyZSBtb3Jl
IGxpa2VseSB0byBzY3JvbGwgZG93biBhbmQgcmlnaHQsIGluIGdlbmVyYWwuCisgICAgICAgIFBs
YXRmb3JtOjpJbnRQb2ludCBsb2NhdGlvbigKKyAgICAgICAgICAgIChkZXNpcmVkUmVjdC54KCkg
KyBwcmV2aW91c1JlY3RBdEN1cnJlbnRMb2NhdGlvbi54KCkgKyAxKSAvIDIsCisgICAgICAgICAg
ICAoZGVzaXJlZFJlY3QueSgpICsgcHJldmlvdXNSZWN0QXRDdXJyZW50TG9jYXRpb24ueSgpICsg
MSkgLyAyKTsKKyAgICAgICAgUGxhdGZvcm06OkludFBvaW50IGJvdHRvbVJpZ2h0KAorICAgICAg
ICAgICAgKGRlc2lyZWRSZWN0LnJpZ2h0KCkgKyBwcmV2aW91c1JlY3RBdEN1cnJlbnRMb2NhdGlv
bi5yaWdodCgpICsgMSkgLyAyLAorICAgICAgICAgICAgKGRlc2lyZWRSZWN0LmJvdHRvbSgpICsg
cHJldmlvdXNSZWN0QXRDdXJyZW50TG9jYXRpb24uYm90dG9tKCkgKyAxKSAvIDIpOworCisgICAg
ICAgIG1fZGVzaXJlZEJhY2tpbmdTdG9yZVJlY3QgPSBQbGF0Zm9ybTo6SW50UmVjdChsb2NhdGlv
biwKKyAgICAgICAgICAgIFBsYXRmb3JtOjpJbnRTaXplKGJvdHRvbVJpZ2h0LngoKSAtIGxvY2F0
aW9uLngoKSwgYm90dG9tUmlnaHQueSgpIC0gbG9jYXRpb24ueSgpKSk7CisgICAgfQorCisgICAg
bV9kZXNpcmVkQmFja2luZ1N0b3JlUmVjdFNjYWxlID0gY3VycmVudFNjYWxlOworICAgIG1fZGVz
aXJlZEJhY2tpbmdTdG9yZVJlY3RWaWV3cG9ydExvY2F0aW9uID0gcGl4ZWxWaWV3cG9ydEZvckRl
c2lyZWRSZWN0LmxvY2F0aW9uKCk7Cit9CisKK1BsYXRmb3JtOjpJbnRSZWN0IEJhY2tpbmdTdG9y
ZVByaXZhdGU6Omxhcmdlc3RUaWxlUmVjdEZvckRlc2lyZWRSZWN0KGNvbnN0IFBsYXRmb3JtOjpJ
bnRSZWN0JiBtaW5pbXVtUmVjdCwgY29uc3QgUGxhdGZvcm06OkludFJlY3QmIGRlc2lyZWRSZWN0
KQoreworICAgIC8vIFN0b3JlIGEgc3RhdGljIGxpc3Qgb2YgcG9zc2libGUgZGl2aXNvcnMuCisg
ICAgU3VyZmFjZVBvb2wqIHN1cmZhY2VQb29sID0gU3VyZmFjZVBvb2w6Omdsb2JhbFN1cmZhY2VQ
b29sKCk7CisgICAgQVNTRVJUKCFzdXJmYWNlUG9vbC0+aXNFbXB0eSgpKTsKKyAgICBzdGF0aWMg
RGl2aXNvckxpc3QgZGl2aXNvckxpc3QgPSBkaXZpc29ycyhzdXJmYWNlUG9vbC0+bnVtYmVyT2ZC
YWNraW5nU3RvcmVGcm9udEJ1ZmZlcnMoKSk7CisKKyAgICBjb25zdCBQbGF0Zm9ybTo6SW50UmVj
dCBtaW5pbXVtVGlsZVJlY3QgPSBlbmNsb3NpbmdUaWxlUmVjdChtaW5pbXVtUmVjdCk7CisgICAg
Y29uc3QgRGl2aXNvciBtaW5pbXVtVGlsZVJlY3REaXZpc29yKG1pbmltdW1UaWxlUmVjdC53aWR0
aCgpIC8gdGlsZVdpZHRoKCksIG1pbmltdW1UaWxlUmVjdC5oZWlnaHQoKSAvIHRpbGVIZWlnaHQo
KSk7CisKKyAgICBEaXZpc29yIGJlc3RSZWN0RGl2aXNvcjsKKyAgICBib29sIGJlc3RSZWN0Q29u
dGFpbnNNaW5pbXVtUmVjdCA9IGZhbHNlOworICAgIGludCBiZXN0UmVjdEFyZWEgPSAwOworICAg
IGludCBiZXN0UmVjdERpc3RhbmNlRnJvbU1pbmltdW1SZWN0ID0gMDsKKyAgICBQbGF0Zm9ybTo6
SW50UmVjdCBiZXN0QmFja2luZ1N0b3JlUmVjdDsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgZGl2aXNvckxpc3Quc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgRGl2aXNvciBkaXZpc29yID0g
ZGl2aXNvckxpc3RbaV07CisKKyAgICAgICAgaW50IHJlbWFpbmluZ1RpbGVzWCA9IHN0ZDo6bWF4
KDAsIGRpdmlzb3IuZmlyc3QgLSBtaW5pbXVtVGlsZVJlY3REaXZpc29yLmZpcnN0KTsKKyAgICAg
ICAgaW50IHJlbWFpbmluZ1RpbGVzWSA9IHN0ZDo6bWF4KDAsIGRpdmlzb3Iuc2Vjb25kIC0gbWlu
aW11bVRpbGVSZWN0RGl2aXNvci5zZWNvbmQpOworCisgICAgICAgIFBsYXRmb3JtOjpJbnRTaXpl
IGRpdmlzb3JCYWNraW5nU3RvcmVSZWN0U2l6ZShkaXZpc29yLmZpcnN0ICogdGlsZVdpZHRoKCks
IGRpdmlzb3Iuc2Vjb25kICogdGlsZUhlaWdodCgpKTsKKworICAgICAgICBmb3IgKGludCBkeSA9
IDA7IGR5IDw9IHJlbWFpbmluZ1RpbGVzWTsgKytkeSkgeworICAgICAgICAgICAgZm9yIChpbnQg
ZHggPSAwOyBkeCA8PSByZW1haW5pbmdUaWxlc1g7ICsrZHgpIHsKKyAgICAgICAgICAgICAgICBj
b25zdCBQbGF0Zm9ybTo6SW50UmVjdCBwb3NzaWJsZUJhY2tpbmdTdG9yZVJlY3QoCisgICAgICAg
ICAgICAgICAgICAgIFBsYXRmb3JtOjpJbnRQb2ludChtaW5pbXVtVGlsZVJlY3QueCgpIC0gZHgg
KiB0aWxlV2lkdGgoKSwgbWluaW11bVRpbGVSZWN0LnkoKSAtIGR5ICogdGlsZUhlaWdodCgpKSwK
KyAgICAgICAgICAgICAgICAgICAgZGl2aXNvckJhY2tpbmdTdG9yZVJlY3RTaXplKTsKKworICAg
ICAgICAgICAgICAgIFBsYXRmb3JtOjpJbnRSZWN0IHJlbGV2YW50UmVjdCA9IHBvc3NpYmxlQmFj
a2luZ1N0b3JlUmVjdDsKKyAgICAgICAgICAgICAgICByZWxldmFudFJlY3QuaW50ZXJzZWN0KGRl
c2lyZWRSZWN0KTsKKyAgICAgICAgICAgICAgICBpbnQgYXJlYSA9IHJlbGV2YW50UmVjdC5hcmVh
KCk7CisKKyAgICAgICAgICAgICAgICBib29sIGJldHRlclRoYW5QcmV2aW91c1JlY3QgPSBmYWxz
ZTsKKyAgICAgICAgICAgICAgICBib29sIGNvbnRhaW5zTWluaW11bVJlY3QgPSBwb3NzaWJsZUJh
Y2tpbmdTdG9yZVJlY3QuY29udGFpbnMobWluaW11bVJlY3QpOworICAgICAgICAgICAgICAgIGlu
dCBkaXN0YW5jZUZyb21NaW5pbXVtUmVjdCA9IGJlc3RSZWN0RGlzdGFuY2VGcm9tTWluaW11bVJl
Y3QgLSAxOworCisgICAgICAgICAgICAgICAgLy8gUGljayB0aGUgYmVzdCBkaXZpc29yIGJhc2Vk
IG9uIHRoZSBmb2xsb3dpbmcgY3JpdGVyaWEsIGluIG9yZGVyIG9mIGltcG9ydGFuY2U6CisgICAg
ICAgICAgICAgICAgLy8gMS4gQ29tcGxldGVseSBjb250YWlucyBtaW5pbXVtVGlsZVJlY3QuCisg
ICAgICAgICAgICAgICAgLy8gMi4gQ292ZXJzIHRoZSBsYXJnZXN0IGFyZWEgd2l0aGluIGRlc2ly
ZWRSZWN0LgorICAgICAgICAgICAgICAgIC8vIDMuIFRoZSBjbG9zZXN0IGJvcmRlciBpcyBmYXJ0
aGVzdCBmcm9tIHRoZSBjb3JyZXNwb25kaW5nIGJvcmRlciBvZiBtaW5pbXVtUmVjdC4KKyAgICAg
ICAgICAgICAgICAvLyA0LiBSYW5kb20gcHJlZmVyZW5jZSBvZiByZWN0YW5nbGVzIGluIHRoZSBm
b2xsb3dpbmcgZGlyZWN0aW9ucywgaW4gb3JkZXI6IGRvd24sIHJpZ2h0LCBsZWZ0LCB1cC4KKwor
ICAgICAgICAgICAgICAgIGlmICghYmVzdFJlY3RBcmVhKSAvLyBiZXN0QmFja2luZ1N0b3JlUmVj
dCBpcyB1bmluaXRpYWxpemVkCisgICAgICAgICAgICAgICAgICAgIGJldHRlclRoYW5QcmV2aW91
c1JlY3QgPSB0cnVlOworICAgICAgICAgICAgICAgIGlmICghYmVzdFJlY3RDb250YWluc01pbmlt
dW1SZWN0ICYmIGNvbnRhaW5zTWluaW11bVJlY3QpCisgICAgICAgICAgICAgICAgICAgIGJldHRl
clRoYW5QcmV2aW91c1JlY3QgPSB0cnVlOworICAgICAgICAgICAgICAgIGlmIChiZXN0UmVjdENv
bnRhaW5zTWluaW11bVJlY3QgJiYgYXJlYSA+IGJlc3RSZWN0QXJlYSkKKyAgICAgICAgICAgICAg
ICAgICAgYmV0dGVyVGhhblByZXZpb3VzUmVjdCA9IHRydWU7CisgICAgICAgICAgICAgICAgaWYg
KGJlc3RSZWN0Q29udGFpbnNNaW5pbXVtUmVjdCAmJiBhcmVhID09IGJlc3RSZWN0QXJlYSkgewor
ICAgICAgICAgICAgICAgICAgICAvLyBMZWZ0L3VwIGRpc3RhbmNlLgorICAgICAgICAgICAgICAg
ICAgICBkaXN0YW5jZUZyb21NaW5pbXVtUmVjdCA9IHN0ZDo6bWluKAorICAgICAgICAgICAgICAg
ICAgICAgICAgbWluaW11bVJlY3QueCgpIC0gcG9zc2libGVCYWNraW5nU3RvcmVSZWN0LngoKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgIG1pbmltdW1SZWN0LnkoKSAtIHBvc3NpYmxlQmFja2lu
Z1N0b3JlUmVjdC55KCkpOworICAgICAgICAgICAgICAgICAgICAvLyBSaWdodC9kb3duIGRpc3Rh
bmNlLgorICAgICAgICAgICAgICAgICAgICBkaXN0YW5jZUZyb21NaW5pbXVtUmVjdCA9IHN0ZDo6
bWluKGRpc3RhbmNlRnJvbU1pbmltdW1SZWN0LCBzdGQ6Om1pbigKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHBvc3NpYmxlQmFja2luZ1N0b3JlUmVjdC5yaWdodCgpIC0gbWluaW11bVJlY3Qucmln
aHQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHBvc3NpYmxlQmFja2luZ1N0b3JlUmVjdC5i
b3R0b20oKSAtIG1pbmltdW1SZWN0LmJvdHRvbSgpKSk7CisKKyAgICAgICAgICAgICAgICAgICAg
aWYgKGRpc3RhbmNlRnJvbU1pbmltdW1SZWN0ID4gYmVzdFJlY3REaXN0YW5jZUZyb21NaW5pbXVt
UmVjdCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJldHRlclRoYW5QcmV2aW91c1JlY3QgPSB0
cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoYmVzdFJlY3RDb250
YWluc01pbmltdW1SZWN0ICYmIGFyZWEgPT0gYmVzdFJlY3RBcmVhICYmIGRpc3RhbmNlRnJvbU1p
bmltdW1SZWN0ID09IGJlc3RSZWN0RGlzdGFuY2VGcm9tTWluaW11bVJlY3QpIHsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKHBvc3NpYmxlQmFja2luZ1N0b3JlUmVjdC55KCkgPiBiZXN0QmFja2lu
Z1N0b3JlUmVjdC55KCkpCisgICAgICAgICAgICAgICAgICAgICAgICBiZXR0ZXJUaGFuUHJldmlv
dXNSZWN0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAocG9zc2libGVCYWNr
aW5nU3RvcmVSZWN0LnkoKSA9PSBiZXN0QmFja2luZ1N0b3JlUmVjdC55KCkgJiYgcG9zc2libGVC
YWNraW5nU3RvcmVSZWN0LngoKSA+IGJlc3RCYWNraW5nU3RvcmVSZWN0LngoKSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGJldHRlclRoYW5QcmV2aW91c1JlY3QgPSB0cnVlOworICAgICAgICAg
ICAgICAgIH0KKworI2lmIERFQlVHX1RJTEVNQVRSSVgKKyAgICAgICAgICAgICAgICBQbGF0Zm9y
bTo6bG9nQWx3YXlzKFBsYXRmb3JtOjpMb2dMZXZlbENyaXRpY2FsLAorICAgICAgICAgICAgICAg
ICAgICAiRGVzaXJlZCByZWN0ICVzOiBQb3RlbnRpYWwgcmVjdCAlcyAoJWR4JWQpIGlzICVzIHRo
YW4gcHJldmlvdXMgYmVzdCByZWN0ICVzICglZHglZCkuIEFyZWE6ICVkIHZzLiAlZC4gRGlzdGFu
Y2U6ICVkIHZzLiAlZC4iLAorICAgICAgICAgICAgICAgICAgICBkZXNpcmVkUmVjdC50b1N0cmlu
ZygpLmNfc3RyKCksCisgICAgICAgICAgICAgICAgICAgIHBvc3NpYmxlQmFja2luZ1N0b3JlUmVj
dC50b1N0cmluZygpLmNfc3RyKCksCisgICAgICAgICAgICAgICAgICAgIGRpdmlzb3IuZmlyc3Qs
IGRpdmlzb3Iuc2Vjb25kLAorICAgICAgICAgICAgICAgICAgICBiZXR0ZXJUaGFuUHJldmlvdXNS
ZWN0ID8gImJldHRlciIgOiAid29yc2UiLAorICAgICAgICAgICAgICAgICAgICBiZXN0QmFja2lu
Z1N0b3JlUmVjdC50b1N0cmluZygpLmNfc3RyKCksCisgICAgICAgICAgICAgICAgICAgIGJlc3RS
ZWN0RGl2aXNvci5maXJzdCwgYmVzdFJlY3REaXZpc29yLnNlY29uZCwKKyAgICAgICAgICAgICAg
ICAgICAgYXJlYSwgYmVzdFJlY3RBcmVhLAorICAgICAgICAgICAgICAgICAgICBkaXN0YW5jZUZy
b21NaW5pbXVtUmVjdCwgYmVzdFJlY3REaXN0YW5jZUZyb21NaW5pbXVtUmVjdCk7CisjZW5kaWYK
KworICAgICAgICAgICAgICAgIGlmIChiZXR0ZXJUaGFuUHJldmlvdXNSZWN0KSB7CisgICAgICAg
ICAgICAgICAgICAgIGJlc3RSZWN0RGl2aXNvciA9IGRpdmlzb3I7CisgICAgICAgICAgICAgICAg
ICAgIGJlc3RSZWN0Q29udGFpbnNNaW5pbXVtUmVjdCA9IGNvbnRhaW5zTWluaW11bVJlY3Q7Cisg
ICAgICAgICAgICAgICAgICAgIGJlc3RSZWN0QXJlYSA9IGFyZWE7CisgICAgICAgICAgICAgICAg
ICAgIGJlc3RSZWN0RGlzdGFuY2VGcm9tTWluaW11bVJlY3QgPSBkaXN0YW5jZUZyb21NaW5pbXVt
UmVjdDsKKyAgICAgICAgICAgICAgICAgICAgYmVzdEJhY2tpbmdTdG9yZVJlY3QgPSBwb3NzaWJs
ZUJhY2tpbmdTdG9yZVJlY3Q7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGJlc3RCYWNraW5nU3RvcmVSZWN0OworfQorCiB2
b2lkIEJhY2tpbmdTdG9yZVByaXZhdGU6OnNjcm9sbEJhY2tpbmdTdG9yZShpbnQgZGVsdGFYLCBp
bnQgZGVsdGFZKQogewogICAgIEFTU0VSVChCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6d2ViS2l0VGhy
ZWFkTWVzc2FnZUNsaWVudCgpLT5pc0N1cnJlbnRUaHJlYWQoKSk7CkBAIC05NTYsMzEgKzEwNDgs
MzIgQEAgdm9pZCBCYWNraW5nU3RvcmVQcml2YXRlOjpzY3JvbGxCYWNraW5nU3RvcmUoaW50IGRl
bHRhWCwgaW50IGRlbHRhWSkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIC8vIENhbGN1
bGF0ZSBvdXIgbmV3IHByZWZlcnJlZCBtYXRyaXggZGltZW5zaW9uLgotICAgIGlmIChkZWx0YVgg
fHwgZGVsdGFZKQotICAgICAgICBtX3ByZWZlcnJlZFRpbGVNYXRyaXhEaW1lbnNpb24gPSBhYnMo
ZGVsdGFYKSA+IGFicyhkZWx0YVkpID8gSG9yaXpvbnRhbCA6IFZlcnRpY2FsOworICAgIFBsYXRm
b3JtOjpWaWV3cG9ydEFjY2Vzc29yKiB2aWV3cG9ydEFjY2Vzc29yID0gbV93ZWJQYWdlLT53ZWJr
aXRUaHJlYWRWaWV3cG9ydEFjY2Vzc29yKCk7CisKKyAgICBQbGF0Zm9ybTo6SW50UmVjdCBwaXhl
bENvbnRlbnRzUmVjdCA9IGV4cGFuZGVkQ29udGVudHNSZWN0KCk7CisgICAgUGxhdGZvcm06Oklu
dFJlY3Qgbm9uT3ZlcnNjcm9sbGVkUGl4ZWxWaWV3cG9ydFJlY3QgPSBub25PdmVyc2Nyb2xsZWQo
dmlld3BvcnRBY2Nlc3Nvci0+cGl4ZWxWaWV3cG9ydFJlY3QoKSwgcGl4ZWxDb250ZW50c1JlY3Qp
OworCisgICAgLy8gRXhwYW5kIHRoZSBtaW5pbWFsIHJlY3Qgc28gdGhhdCBpdCBpbmNsdWRlcyB0
aGUgd2hvbGUgc2V0IG9mIHRpbGVzIGNvdmVyaW5nIHRoYXQgYXJlYS4KKyAgICBjb25zdCBQbGF0
Zm9ybTo6SW50UmVjdCBtYXhpbXVtUmVhc29uYWJsZVJlY3QgPSBlbmNsb3NpbmdUaWxlUmVjdChw
aXhlbENvbnRlbnRzUmVjdCk7CisgICAgUGxhdGZvcm06OkludFJlY3QgZGVzaXJlZFJlY3QgPSBk
ZXNpcmVkQmFja2luZ1N0b3JlUmVjdChub25PdmVyc2Nyb2xsZWRQaXhlbFZpZXdwb3J0UmVjdCwg
bWF4aW11bVJlYXNvbmFibGVSZWN0LCBkZWx0YVgsIGRlbHRhWSk7CisKKyAgICBtZXJnZURlc2ly
ZWRCYWNraW5nU3RvcmVSZWN0KGRlc2lyZWRSZWN0LCBub25PdmVyc2Nyb2xsZWRQaXhlbFZpZXdw
b3J0UmVjdCk7CiAKLSAgICAvLyBDYWxjdWxhdGUgb3VyIHByZWZlcnJlZCBtYXRyaXggZ2VvbWV0
cnkuCi0gICAgRGl2aXNvciBkaXZpc29yID0gYmVzdERpdmlzb3IoZXhwYW5kZWRDb250ZW50c1Np
emUoKSwKLSAgICAgICAgdGlsZVdpZHRoKCksIHRpbGVIZWlnaHQoKSwKLSAgICAgICAgbWluaW11
bU51bWJlck9mVGlsZXNXaWRlKCksIG1pbmltdW1OdW1iZXJPZlRpbGVzSGlnaCgpLAotICAgICAg
ICBtX3ByZWZlcnJlZFRpbGVNYXRyaXhEaW1lbnNpb24pOworICAgIGNvbnN0IFBsYXRmb3JtOjpJ
bnRSZWN0IGJhY2tpbmdTdG9yZVJlY3QgPSBsYXJnZXN0VGlsZVJlY3RGb3JEZXNpcmVkUmVjdChu
b25PdmVyc2Nyb2xsZWRQaXhlbFZpZXdwb3J0UmVjdCwgbV9kZXNpcmVkQmFja2luZ1N0b3JlUmVj
dCk7CiAKICNpZiBERUJVR19USUxFTUFUUklYCiAgICAgUGxhdGZvcm06OmxvZ0Fsd2F5cyhQbGF0
Zm9ybTo6TG9nTGV2ZWxDcml0aWNhbCwKLSAgICAgICAgIkJhY2tpbmdTdG9yZVByaXZhdGU6OnNj
cm9sbEJhY2tpbmdTdG9yZSBkaXZpc29yICVkeCVkIiwKLSAgICAgICAgZGl2aXNvci5maXJzdCwg
ZGl2aXNvci5zZWNvbmQpOworICAgICAgICAiQmFja2luZ1N0b3JlUHJpdmF0ZTo6c2Nyb2xsQmFj
a2luZ1N0b3JlIG5vbk92ZXJzY3JvbGxlZFBpeGVsVmlld3BvcnRSZWN0PSVzLCBkZXNpcmVkUmVj
dD0lcywgcGl4ZWxDb250ZW50c1JlY3Q9JXMsIG1heGltdW1SZWFzb25hYmxlUmVjdD0lcywgYmFj
a2luZ1N0b3JlUmVjdD0lcyIsCisgICAgICAgIG5vbk92ZXJzY3JvbGxlZFBpeGVsVmlld3BvcnRS
ZWN0LnRvU3RyaW5nKCkuY19zdHIoKSwKKyAgICAgICAgbV9kZXNpcmVkQmFja2luZ1N0b3JlUmVj
dC50b1N0cmluZygpLmNfc3RyKCksCisgICAgICAgIHBpeGVsQ29udGVudHNSZWN0LnRvU3RyaW5n
KCkuY19zdHIoKSwKKyAgICAgICAgbWF4aW11bVJlYXNvbmFibGVSZWN0LnRvU3RyaW5nKCkuY19z
dHIoKSwKKyAgICAgICAgYmFja2luZ1N0b3JlUmVjdC50b1N0cmluZygpLmNfc3RyKCkpOwogI2Vu
ZGlmCiAKLSAgICAvLyBJbml0aWFsaXplIGEgcmVjdCB3aXRoIHRoYXQgbmV3IGdlb21ldHJ5Lgot
ICAgIFBsYXRmb3JtOjpJbnRSZWN0IGJhY2tpbmdTdG9yZVJlY3QoMCwgMCwgZGl2aXNvci5maXJz
dCAqIHRpbGVXaWR0aCgpLCBkaXZpc29yLnNlY29uZCAqIHRpbGVIZWlnaHQoKSk7Ci0KLSAgICAv
LyBTY3JvbGwgdGhhdCByZWN0IHNvIHRoYXQgaXQgZml0cyBvdXIgY29udGVudHMgYW5kIHZpZXdw
b3J0IGFuZCBzY3JvbGwgZGVsdGEuCi0gICAgYmFja2luZ1N0b3JlUmVjdCA9IGJhY2tpbmdTdG9y
ZVJlY3RGb3JTY3JvbGwoZGVsdGFYLCBkZWx0YVksIGJhY2tpbmdTdG9yZVJlY3QpOwotCiAgICAg
QVNTRVJUKCFiYWNraW5nU3RvcmVSZWN0LmlzRW1wdHkoKSk7CiAKLSAgICBzZXRCYWNraW5nU3Rv
cmVSZWN0KGJhY2tpbmdTdG9yZVJlY3QsIG1fd2ViUGFnZS0+ZC0+Y3VycmVudFNjYWxlKCkpOwor
ICAgIHNldEJhY2tpbmdTdG9yZVJlY3QoYmFja2luZ1N0b3JlUmVjdCwgbV9kZXNpcmVkQmFja2lu
Z1N0b3JlUmVjdFNjYWxlKTsKIH0KIAogVGlsZUluZGV4TGlzdCBCYWNraW5nU3RvcmVQcml2YXRl
OjpyZW5kZXIoY29uc3QgVGlsZUluZGV4TGlzdCYgdGlsZUluZGV4TGlzdCkKQEAgLTE3MTcsNyAr
MTgxMCw5IEBAIHZvaWQgQmFja2luZ1N0b3JlUHJpdmF0ZTo6Y3JlYXRlU3VyZmFjZXMoKQogICAg
IGlmIChzdXJmYWNlUG9vbC0+aXNFbXB0eSgpKSAvLyBTZXR0aW5ncyBzcGVjaWZ5IDAgdGlsZXMg
LyBubyBiYWNraW5nIHN0b3JlLgogICAgICAgICByZXR1cm47CiAKLSAgICBjb25zdCBEaXZpc29y
IGRpdmlzb3IgPSBiZXN0RGl2aXNvcihleHBhbmRlZENvbnRlbnRzU2l6ZSgpLCB0aWxlV2lkdGgo
KSwgdGlsZUhlaWdodCgpLCBtaW5pbXVtTnVtYmVyT2ZUaWxlc1dpZGUoKSwgbWluaW11bU51bWJl
ck9mVGlsZXNIaWdoKCksIG1fcHJlZmVycmVkVGlsZU1hdHJpeERpbWVuc2lvbik7CisgICAgLy8g
UGljayBhIHJhbmRvbSBkaXZpc29yIHRvIGluaXRpYWxpemUgdGhlIHRpbGUgbWFwLgorICAgIERp
dmlzb3JMaXN0IGRpdmlzb3JMaXN0ID0gZGl2aXNvcnMoc3VyZmFjZVBvb2wtPm51bWJlck9mQmFj
a2luZ1N0b3JlRnJvbnRCdWZmZXJzKCkpOworICAgIGNvbnN0IERpdmlzb3IgZGl2aXNvciA9IGRp
dmlzb3JMaXN0WzBdOwogCiAgICAgaW50IG51bWJlck9mVGlsZXNXaWRlID0gZGl2aXNvci5maXJz
dDsKICAgICBpbnQgbnVtYmVyT2ZUaWxlc0hpZ2ggPSBkaXZpc29yLnNlY29uZDsKQEAgLTE3NDUs
MjQgKzE4NDAsNiBAQCBQbGF0Zm9ybTo6SW50UG9pbnQgQmFja2luZ1N0b3JlR2VvbWV0cnk6Om9y
aWdpbk9mVGlsZShjb25zdCBUaWxlSW5kZXgmIGluZGV4KSBjbwogICAgICAgICBiYWNraW5nU3Rv
cmVSZWN0KCkueSgpICsgKGluZGV4LmooKSAqIEJhY2tpbmdTdG9yZVByaXZhdGU6OnRpbGVIZWln
aHQoKSkpOwogfQogCi1pbnQgQmFja2luZ1N0b3JlUHJpdmF0ZTo6bWluaW11bU51bWJlck9mVGls
ZXNXaWRlKCkgY29uc3QKLXsKLSAgICAvLyBUaGUgbWluaW11bSBudW1iZXIgb2YgdGlsZXMgd2lk
ZSByZXF1aXJlZCB0byBmaWxsIHRoZSB2aWV3cG9ydCArIDEgdGlsZSBleHRyYSB0byBhbGxvdyBz
Y3JvbGxpbmcuCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4oY2VpbGYobV9jbGllbnQtPnRy
YW5zZm9ybWVkVmlld3BvcnRTaXplKCkud2lkdGgoKSAvIHN0YXRpY19jYXN0PGZsb2F0Pih0aWxl
V2lkdGgoKSkpKSArIDE7Ci19Ci0KLWludCBCYWNraW5nU3RvcmVQcml2YXRlOjptaW5pbXVtTnVt
YmVyT2ZUaWxlc0hpZ2goKSBjb25zdAotewotICAgIC8vIFRoZSBtaW5pbXVtIG51bWJlciBvZiB0
aWxlcyBoaWdoIHJlcXVpcmVkIHRvIGZpbGwgdGhlIHZpZXdwb3J0ICsgMSB0aWxlIGV4dHJhIHRv
IGFsbG93IHNjcm9sbGluZy4KLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihjZWlsZihtX2Ns
aWVudC0+dHJhbnNmb3JtZWRWaWV3cG9ydFNpemUoKS5oZWlnaHQoKSAvIHN0YXRpY19jYXN0PGZs
b2F0Pih0aWxlSGVpZ2h0KCkpKSkgKyAxOwotfQotCi1QbGF0Zm9ybTo6SW50U2l6ZSBCYWNraW5n
U3RvcmVQcml2YXRlOjpleHBhbmRlZENvbnRlbnRzU2l6ZSgpIGNvbnN0Ci17Ci0gICAgY29uc3Qg
UGxhdGZvcm06OlZpZXdwb3J0QWNjZXNzb3IqIHZpZXdwb3J0QWNjZXNzb3IgPSBtX3dlYlBhZ2Ut
PndlYmtpdFRocmVhZFZpZXdwb3J0QWNjZXNzb3IoKTsKLSAgICByZXR1cm4gbV9jbGllbnQtPnRy
YW5zZm9ybWVkVmlld3BvcnRTaXplKCkuZXhwYW5kZWRUbyh2aWV3cG9ydEFjY2Vzc29yLT5waXhl
bENvbnRlbnRzU2l6ZSgpKTsKLX0KLQogaW50IEJhY2tpbmdTdG9yZVByaXZhdGU6OnRpbGVXaWR0
aCgpCiB7CiAgICAgcmV0dXJuIHRpbGVTaXplKCkud2lkdGgoKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvYmxhY2tiZXJyeS9BcGkvQmFja2luZ1N0b3JlX3AuaCBiL1NvdXJjZS9XZWJLaXQv
YmxhY2tiZXJyeS9BcGkvQmFja2luZ1N0b3JlX3AuaAppbmRleCAzZmYzZjliNmJhNDM1ZmUyYzA5
OTBkNGM4MmYwZjFlYjRhYzdlZmEyLi5mZDNjZDFhYzBmZDg4NzI0NWM2MGQxOWE0NDc3NGM5NWI1
YjIyMmI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2JsYWNrYmVycnkvQXBpL0JhY2tpbmdT
dG9yZV9wLmgKKysrIGIvU291cmNlL1dlYktpdC9ibGFja2JlcnJ5L0FwaS9CYWNraW5nU3RvcmVf
cC5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCwgMjAx
MSwgMjAxMiBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCwgMjAxMSwgMjAxMiwgMjAxMyBSZXNlYXJjaCBJ
biBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj
CkBAIC0xMzgsMjMgKzEzOCwxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBkaXNwYXRjaFJlbmRlckpv
YigpOwogICAgIHZvaWQgcmVuZGVySm9iKCk7CiAKLSAgICAvLyBTZXQgb2YgaGVscGVyIG1ldGhv
ZHMgZm9yIHRoZSBzY3JvbGxCYWNraW5nU3RvcmUoKSBtZXRob2QuCi0gICAgUGxhdGZvcm06Oklu
dFJlY3QgY29udGVudHNSZWN0KCkgY29uc3Q7CisgICAgLy8gVmFyaW91cyBjYWxjdWxhdGlvbnMg
b2YgcXVhbnRpdGllcyByZWxldmFudCB0byBiYWNraW5nIHN0b3JlLgorICAgIFBsYXRmb3JtOjpJ
bnRTaXplIGV4cGFuZGVkQ29udGVudHNTaXplKCkgY29uc3Q7CiAgICAgUGxhdGZvcm06OkludFJl
Y3QgZXhwYW5kZWRDb250ZW50c1JlY3QoKSBjb25zdDsKICAgICBQbGF0Zm9ybTo6SW50UmVjdCB2
aXNpYmxlQ29udGVudHNSZWN0KCkgY29uc3Q7Ci0gICAgUGxhdGZvcm06OkludFJlY3QgdW5jbGlw
cGVkVmlzaWJsZUNvbnRlbnRzUmVjdCgpIGNvbnN0OwotICAgIGJvb2wgc2hvdWxkTW92ZUxlZnQo
Y29uc3QgUGxhdGZvcm06OkludFJlY3QmKSBjb25zdDsKLSAgICBib29sIHNob3VsZE1vdmVSaWdo
dChjb25zdCBQbGF0Zm9ybTo6SW50UmVjdCYpIGNvbnN0OwotICAgIGJvb2wgc2hvdWxkTW92ZVVw
KGNvbnN0IFBsYXRmb3JtOjpJbnRSZWN0JikgY29uc3Q7Ci0gICAgYm9vbCBzaG91bGRNb3ZlRG93
bihjb25zdCBQbGF0Zm9ybTo6SW50UmVjdCYpIGNvbnN0OwotICAgIGJvb2wgY2FuTW92ZVgoY29u
c3QgUGxhdGZvcm06OkludFJlY3QmKSBjb25zdDsKLSAgICBib29sIGNhbk1vdmVZKGNvbnN0IFBs
YXRmb3JtOjpJbnRSZWN0JikgY29uc3Q7Ci0gICAgYm9vbCBjYW5Nb3ZlTGVmdChjb25zdCBQbGF0
Zm9ybTo6SW50UmVjdCYpIGNvbnN0OwotICAgIGJvb2wgY2FuTW92ZVJpZ2h0KGNvbnN0IFBsYXRm
b3JtOjpJbnRSZWN0JikgY29uc3Q7Ci0gICAgYm9vbCBjYW5Nb3ZlVXAoY29uc3QgUGxhdGZvcm06
OkludFJlY3QmKSBjb25zdDsKLSAgICBib29sIGNhbk1vdmVEb3duKGNvbnN0IFBsYXRmb3JtOjpJ
bnRSZWN0JikgY29uc3Q7Ci0KLSAgICBQbGF0Zm9ybTo6SW50UmVjdCBiYWNraW5nU3RvcmVSZWN0
Rm9yU2Nyb2xsKGludCBkZWx0YVgsIGludCBkZWx0YVksIGNvbnN0IFBsYXRmb3JtOjpJbnRSZWN0
JikgY29uc3Q7CisKICAgICB2b2lkIHNldEJhY2tpbmdTdG9yZVJlY3QoY29uc3QgUGxhdGZvcm06
OkludFJlY3QmLCBkb3VibGUgc2NhbGUpOwogICAgIHZvaWQgdXBkYXRlVGlsZXNBZnRlckJhY2tp
bmdTdG9yZVJlY3RDaGFuZ2UoKTsKIApAQCAtMTcwLDYgKzE1OCwxMSBAQCBwdWJsaWM6CiAKICAg
ICAvLyBSZXNwb25zaWJsZSBmb3Igc2Nyb2xsaW5nIHRoZSBiYWNraW5nIHN0b3JlIGFuZCB1cGRh
dGluZyB0aGUKICAgICAvLyB0aWxlIG1hdHJpeCBnZW9tZXRyeS4KKyAgICBQbGF0Zm9ybTo6SW50
UmVjdCBub25PdmVyc2Nyb2xsZWQoY29uc3QgUGxhdGZvcm06OkludFJlY3QmIHZpZXdwb3J0UmVj
dCwgY29uc3QgUGxhdGZvcm06OkludFJlY3QmIGNvbnRlbnRzUmVjdCk7CisgICAgUGxhdGZvcm06
OkludFJlY3QgZW5jbG9zaW5nVGlsZVJlY3QoY29uc3QgUGxhdGZvcm06OkludFJlY3QmIHBpeGVs
Q29udGVudHNSZWN0KTsKKyAgICBQbGF0Zm9ybTo6SW50UmVjdCBkZXNpcmVkQmFja2luZ1N0b3Jl
UmVjdChjb25zdCBQbGF0Zm9ybTo6SW50UmVjdCYgcGl4ZWxWaWV3cG9ydFJlY3QsIGNvbnN0IFBs
YXRmb3JtOjpJbnRSZWN0JiBtYXhpbXVtUmVhc29uYWJsZVJlY3QsIGludCBkZWx0YVgsIGludCBk
ZWx0YVkpOworICAgIHZvaWQgbWVyZ2VEZXNpcmVkQmFja2luZ1N0b3JlUmVjdChjb25zdCBQbGF0
Zm9ybTo6SW50UmVjdCYgZGVzaXJlZFJlY3QsIGNvbnN0IFBsYXRmb3JtOjpJbnRSZWN0JiBwaXhl
bFZpZXdwb3J0Rm9yRGVzaXJlZFJlY3QpOworICAgIFBsYXRmb3JtOjpJbnRSZWN0IGxhcmdlc3RU
aWxlUmVjdEZvckRlc2lyZWRSZWN0KGNvbnN0IFBsYXRmb3JtOjpJbnRSZWN0JiBtaW5pbXVtUmVj
dCwgY29uc3QgUGxhdGZvcm06OkludFJlY3QmIGRlc2lyZWRSZWN0KTsKICAgICB2b2lkIHNjcm9s
bEJhY2tpbmdTdG9yZShpbnQgZGVsdGFYLCBpbnQgZGVsdGFZKTsKIAogICAgIC8vIFJlbmRlciB0
aGUgZ2l2ZW4gdGlsZXMgaWYgZW5vdWdoIGJhY2sgYnVmZmVycyBhcmUgYXZhaWxhYmxlLgpAQCAt
MjYzLDExICsyNTYsNiBAQCBwdWJsaWM6CiAgICAgLy8gQ3JlYXRlIHRoZSBzdXJmYWNlcyBvZiB0
aGUgYmFja2luZyBzdG9yZS4KICAgICB2b2lkIGNyZWF0ZVN1cmZhY2VzKCk7CiAKLSAgICAvLyBW
YXJpb3VzIGNhbGN1bGF0aW9ucyBvZiBxdWFudGl0aWVzIHJlbGV2YW50IHRvIGJhY2tpbmcgc3Rv
cmUuCi0gICAgaW50IG1pbmltdW1OdW1iZXJPZlRpbGVzV2lkZSgpIGNvbnN0OwotICAgIGludCBt
aW5pbXVtTnVtYmVyT2ZUaWxlc0hpZ2goKSBjb25zdDsKLSAgICBQbGF0Zm9ybTo6SW50U2l6ZSBl
eHBhbmRlZENvbnRlbnRzU2l6ZSgpIGNvbnN0OwotCiAgICAgLy8gVGhlIHRpbGUgZ2VvbWV0cnkg
bWV0aG9kcyBhcmUgYWxsIHN0YXRpYyBmdW5jdGlvbi4KICAgICBzdGF0aWMgaW50IHRpbGVXaWR0
aCgpOwogICAgIHN0YXRpYyBpbnQgdGlsZUhlaWdodCgpOwpAQCAtMzE1LDcgKzMwMyw2IEBAIHB1
YmxpYzoKICAgICBXZWJQYWdlKiBtX3dlYlBhZ2U7CiAgICAgQmFja2luZ1N0b3JlQ2xpZW50KiBt
X2NsaWVudDsKICAgICBPd25QdHI8UmVuZGVyUXVldWU+IG1fcmVuZGVyUXVldWU7Ci0gICAgbXV0
YWJsZSBQbGF0Zm9ybTo6SW50U2l6ZSBtX3ByZXZpb3VzRGVsdGE7CiAKICAgICBib29sIG1faGFz
QmxpdEpvYnM7CiAKQEAgLTMyMyw5ICszMTAsOSBAQCBwdWJsaWM6CiAKICAgICBtdXRhYmxlIHVu
c2lnbmVkIG1fZnJvbnRTdGF0ZTsKIAotICAgIFRpbGVNYXRyaXhEaXJlY3Rpb24gbV9wcmVmZXJy
ZWRUaWxlTWF0cml4RGltZW5zaW9uOwotCi0gICAgUGxhdGZvcm06OkludFJlY3QgbV92aXNpYmxl
VGlsZUJ1ZmZlclJlY3Q7CisgICAgUGxhdGZvcm06OkludFJlY3QgbV9kZXNpcmVkQmFja2luZ1N0
b3JlUmVjdDsKKyAgICBQbGF0Zm9ybTo6SW50UG9pbnQgbV9kZXNpcmVkQmFja2luZ1N0b3JlUmVj
dFZpZXdwb3J0TG9jYXRpb247CisgICAgZG91YmxlIG1fZGVzaXJlZEJhY2tpbmdTdG9yZVJlY3RT
Y2FsZTsKIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICAgICBtdXRhYmxlIGJv
b2wgbV9uZWVkc0RyYXdMYXllcnNPbkNvbW1pdDsgLy8gTm90IHRocmVhZCBzYWZlLCBXZWJLaXQg
dGhyZWFkIG9ubHkK
</data>

          </attachment>
      

    </bug>

</bugzilla>