<?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>74753</bug_id>
          
          <creation_ts>2011-12-16 14:39:18 -0800</creation_ts>
          <short_desc>Add a pretty dumb tile cache to WebTileCacheLayer</short_desc>
          <delta_ts>2011-12-16 15:05:31 -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>New Bugs</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="Anders Carlsson">andersca</reporter>
          <assigned_to name="Anders Carlsson">andersca</assigned_to>
          <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>523042</commentid>
    <comment_count>0</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2011-12-16 14:39:18 -0800</bug_when>
    <thetext>Add a pretty dumb tile cache to WebTileCacheLayer</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>523053</commentid>
    <comment_count>1</comment_count>
      <attachid>119677</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2011-12-16 14:51:47 -0800</bug_when>
    <thetext>Created attachment 119677
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>523062</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-16 14:56:10 -0800</bug_when>
    <thetext>Attachment 119677 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Source/WebCore/platform/graphics/ca/mac/WebTileCacheLayer.h:30:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Source/WebCore/platform/graphics/ca/mac/WebTileLayer.h:30:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 2 in 12 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>523065</commentid>
    <comment_count>3</comment_count>
      <attachid>119677</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2011-12-16 14:57:07 -0800</bug_when>
    <thetext>Comment on attachment 119677
Patch

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

&gt; Source/WebCore/platform/graphics/ca/mac/TileCache.h:67
&gt; +    void getTileRangeForRect(const IntRect&amp;, IntPoint&amp; topLeft, IntPoint&amp; bottomRight);
&gt; +
&gt; +    IntSize numTilesForGridSize(const IntSize&amp;);

Can these be const?

&gt; Source/WebCore/platform/graphics/ca/mac/TileCache.h:70
&gt; +    WebTileLayer* tileLayerAtPosition(const IntPoint&amp;);

Make const?

&gt; Source/WebCore/platform/graphics/ca/mac/TileCache.mm:99
&gt; +        CGContextRestoreGState(context);

Tab here?

&gt; Source/WebCore/platform/graphics/ca/mac/WebTileCacheLayer.h:34
&gt; +    OwnPtr&lt;WebCore::TileCache&gt; _tileCache;

Do we still do underscores on Obj-C member vars? Is ugly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>523070</commentid>
    <comment_count>4</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2011-12-16 15:01:38 -0800</bug_when>
    <thetext>(In reply to comment #3)/ca/mac/WebTileCacheLayer.h:34
&gt; &gt; +    OwnPtr&lt;WebCore::TileCache&gt; _tileCache;
&gt; 
&gt; Do we still do underscores on Obj-C member vars? Is ugly.

That is the Objective-C convention, ugly or not :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>523075</commentid>
    <comment_count>5</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2011-12-16 15:05:31 -0800</bug_when>
    <thetext>Committed r103114: &lt;http://trac.webkit.org/changeset/103114&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>119677</attachid>
            <date>2011-12-16 14:51:47 -0800</date>
            <delta_ts>2011-12-16 14:57:07 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-74753-20111216145150.patch</filename>
            <type>text/plain</type>
            <size>27769</size>
            <attacher name="Anders Carlsson">andersca</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAzMTAzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODFlMzA0NTNhZTRkMTEy
NWRjZDcyZDY1MTE5ODk2NTJmOGNmZmM4My4uYmE5NDQwYWM0MTI3ZTdiMTBiOGU0OGNmNjQ2YmM2
YTBkZTBmMDM2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY2IEBACisyMDExLTEyLTE2ICBBbmRl
cnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIGEgcHJldHR5
IGR1bWIgdGlsZSBjYWNoZSB0byBXZWJUaWxlQ2FjaGVMYXllcgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ3NTMKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0Eu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjpyZXF1aXJlc1RpbGVkTGF5
ZXIpOgorICAgICAgICBJZiBhIGxheWVyIGlzIGEgdGlsZSBjYWNoZSBsYXllciwgd2UgbmV2ZXIg
d2FudCB0byBzd2FwIGl0IG91dCBmb3IgYSB0aWxlZCBsYXllci4KKworICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NMYXllckNBOjpzd2FwRnJvbU9yVG9UaWxlZExheWVyKToKKyAgICAgICAgQXNz
ZXJ0IHRoYXQgd2UgZG9uJ3QgaGF2ZSBhIHRpbGUgY2FjaGUgbGF5ZXIuCisKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvUGxhdGZvcm1DQUxheWVyTWFjLm1tOgorICAgICAgICAo
UGxhdGZvcm1DQUxheWVyOjpQbGF0Zm9ybUNBTGF5ZXIpOgorICAgICAgICBJZiB3ZSBoYXZlIGEg
dGlsZSBjYWNoZSBsYXllciwgYWRkIGl0cyB0aWxlIGNvbnRhaW5lciB0byB0aGUgbGlzdCBvZiBj
dXN0b20gc3VibGF5ZXJzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL1Rp
bGVDYWNoZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRpbGVDYWNoZTo6dGlsZUNvbnRh
aW5lckxheWVyKToKKyAgICAgICAgUmV0dXJuIHRoZSB0aWxlIGNvbnRhaW5lciBsYXllci4KKwor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9UaWxlQ2FjaGUubW06IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6VGlsZUNhY2hlOjp0aWxlQ2FjaGVMYXllckJvdW5kc0NoYW5nZWQp
OgorICAgICAgICBSZXNpemUgdGhlIHRpbGUgZ3JpZCBpZiBuZWNlc3NhcnkuCisKKyAgICAgICAg
KFdlYkNvcmU6OlRpbGVDYWNoZTo6c2V0TmVlZHNEaXNwbGF5SW5SZWN0KToKKyAgICAgICAgSW52
YWxpZGF0ZSB0aGUgbmVjZXNzYXJ5IHRpbGVzLgorCisgICAgICAgIChXZWJDb3JlOjpUaWxlQ2Fj
aGU6OmRyYXdMYXllcik6CisgICAgICAgIFNldCB1cCB0aGUgdHJhbnNmb3JtIGFuZCBkcmF3IHRo
ZSBsYXllci4KKworICAgICAgICAoV2ViQ29yZTo6VGlsZUNhY2hlOjpnZXRUaWxlUmFuZ2VGb3JS
ZWN0KToKKyAgICAgICAgR2l2ZW4gYSByZWN0LCByZXR1cm4gdGhlIHJhbmdlIG9mIHRpbGVzIHRo
YXQgaXQgY292ZXJzLgorCisgICAgICAgIChXZWJDb3JlOjpUaWxlQ2FjaGU6Om51bVRpbGVzRm9y
R3JpZFNpemUpOgorICAgICAgICBHaXZlbiBhIHNpemUsIHJldHVybiBob3cgbWFueSB0aWxlcyBh
cmUgbmVlZGVkIHRvIGNvbXBsZXRlbHkgY292ZXIgaXQuCisKKyAgICAgICAgKFdlYkNvcmU6OlRp
bGVDYWNoZTo6cmVzaXplVGlsZUdyaWQpOgorICAgICAgICBDcmVhdGUgbmV3IHRpbGUgbGF5ZXJz
IGlmIG5lZWRlZCwgb3IgcmV1c2UgYWxyZWFkeSBleGlzdGluZyBvbmVzLgorCisgICAgICAgIChX
ZWJDb3JlOjpUaWxlQ2FjaGU6OnRpbGVMYXllckF0UG9zaXRpb24pOgorICAgICAgICBHaXZlbiBh
IHBvc2l0aW9uIGluIHRoZSBncmlkLCByZXR1cm4gdGhlIHRpbGUgbGF5ZXIuCisKKyAgICAgICAg
KFdlYkNvcmU6OlRpbGVDYWNoZTo6Y3JlYXRlVGlsZUxheWVyKToKKyAgICAgICAgQ3JlYXRlIGEg
V2ViVGlsZUxheWVyIGFuZCBzZXQgaXQgdXAuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jYS9tYWMvV2ViVGlsZUNhY2hlTGF5ZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jYS9tYWMvV2ViVGlsZUNhY2hlTGF5ZXIubW06CisgICAgICAgICgtW1dlYlRpbGVDYWNoZUxh
eWVyIHNldEJvdW5kczpdKToKKyAgICAgICAgKC1bV2ViVGlsZUNhY2hlTGF5ZXIgc2V0TmVlZHNE
aXNwbGF5SW5SZWN0Ol0pOgorICAgICAgICAoLVtXZWJUaWxlQ2FjaGVMYXllciB0aWxlQ29udGFp
bmVyTGF5ZXJdKToKKyAgICAgICAgQ2FsbCBkb3duIHRvIHRoZSB0aWxlIGNhY2hlIG9iamVjdC4K
KworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9XZWJUaWxlTGF5ZXIuaDogQWRk
ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL1dlYlRpbGVMYXllci5tbTog
QWRkZWQuCisKKyAgICAgICAgKC1bV2ViVGlsZUxheWVyIGRyYXdJbkNvbnRleHQ6XSk6CisgICAg
ICAgIEFzayB0aGUgdGlsZSBjYWNoZSB0byBkcmF3IHRoZSBnaXZlbiBsYXllci4KKworICAgICAg
ICAoLVtXZWJUaWxlTGF5ZXIgc2V0VGlsZUNhY2hlOldlYkNvcmU6Ol0pOgorCiAyMDExLTEyLTE2
ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAgIEFsbG93
IGEgUGxhdGZvcm1DQUxheWVyIHRvIG93biBpdHMgb3duIHN1YmxheWVycwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4
IDY4NjFkZmQyMmNiYjdmYjc3Njg4Y2VjZjRjZTFmMjk3ODkzMGUxMWIuLmQwYTI0YjdiMGU2ODMy
NTZiOWZhZjc4N2QwYzViNTI3YzRkYTc5ZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsNSArMSwxNiBAQAog
MjAxMS0xMi0xNiAgQW5kZXJzIENhcmxzc29uICA8YW5kZXJzY2FAYXBwbGUuY29tPgogCisgICAg
ICAgIEFkZCBhIHByZXR0eSBkdW1iIHRpbGUgY2FjaGUgdG8gV2ViVGlsZUNhY2hlTGF5ZXIKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc0NzUzCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJQcm9jZXNz
L1dlYlBhZ2UvbWFjL1RpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhLm1tOgorICAgICAgICAo
V2ViS2l0OjpUaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYTo6Zmx1c2hMYXllcnMpOgorICAg
ICAgICBBbHdheXMgZG8gYSBsYXlvdXQgaGVyZSwgdG8gcHJldmVudCBhbiBBU1NFUlQoIW5lZWRz
TGF5b3V0KCkpIHdoZW4gcGFpbnRpbmcuCisKKzIwMTEtMTItMTYgIEFuZGVycyBDYXJsc3NvbiAg
PGFuZGVyc2NhQGFwcGxlLmNvbT4KKwogICAgICAgICBUaWxlZENvcmVBbmltYXRpb25EcmF3aW5n
QXJlYSBzaG91bGQgZW5hYmxlIHRoZSBzY3JvbGxpbmcgY29vcmRpbmF0b3IKICAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc0NzI0CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA4ZmQ5NGVm
N2FiYjIxZmE5MTJlZDlhNzU2OWY2MWM1ODM3NGM2YjhmLi5iY2RjMjQ5NzBjMDc4ZDkxNTY5Y2Yw
M2VkNDY5OWQwYTIzNzNmNTczIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC00NzcsNiArNDc3LDkgQEAKIAkJMUE5MjdGRDMxNDE2
QTE1QjAwM0E4M0M4IC8qIG5wcnVudGltZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMUE5MjdGRDAxNDE2QTE1QjAwM0E4M0M4IC8qIG5wcnVudGltZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTFBOTI3
RkQ0MTQxNkExNUIwMDNBODNDOCAvKiBucHR5cGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTkyN0ZEMTE0MTZBMTVCMDAzQTgzQzggLyogbnB0eXBl
cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTFB
OTg5NTZCMEFBNzhGODAwMDVFRjVFRiAvKiBLVVJMQ0ZOZXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE5ODk1NkEwQUE3OEY4MDAwNUVGNUVGIC8q
IEtVUkxDRk5ldC5jcHAgKi87IH07CisJCTFBQTcxNjBBMTQ5QkM0REIwMDE2RUMxOSAvKiBUaWxl
Q2FjaGUubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAx
QUE3MTYwODE0OUJDNERBMDAxNkVDMTkgLyogVGlsZUNhY2hlLm1tICovOyB9OworCQkxQUE3MTYw
QjE0OUJDNERCMDAxNkVDMTkgLyogVGlsZUNhY2hlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQUE3MTYwOTE0OUJDNERCMDAxNkVDMTkgLyogVGlsZUNh
Y2hlLmggKi87IH07CisJCTFBQTcxNjFFMTQ5QkYyRkEwMDE2RUMxOSAvKiBXZWJUaWxlTGF5ZXIu
bW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQUE3MTYx
QzE0OUJGMkZBMDAxNkVDMTkgLyogV2ViVGlsZUxheWVyLm1tICovOyB9OwogCQkxQUE4NEYwNDE0
M0JBN0JEMDA1MUQxNTMgLyogU2Nyb2xsRWxhc3RpY2l0eUNvbnRyb2xsZXIubW0gaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQUE4NEYwMjE0M0JBN0JEMDA1
MUQxNTMgLyogU2Nyb2xsRWxhc3RpY2l0eUNvbnRyb2xsZXIubW0gKi87IH07CiAJCTFBQTg0RjA1
MTQzQkE3QkQwMDUxRDE1MyAvKiBTY3JvbGxFbGFzdGljaXR5Q29udHJvbGxlci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFBODRGMDMxNDNCQTdCRDAw
NTFEMTUzIC8qIFNjcm9sbEVsYXN0aWNpdHlDb250cm9sbGVyLmggKi87IH07CiAJCTFBQTg3OTkw
MTFDQkU4NDYwMDNDNjY0RiAvKiBQbHVnaW5TdHJhdGVneS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFBODc5OEYxMUNCRTg0NjAwM0M2NjRGIC8qIFBs
dWdpblN0cmF0ZWd5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKQEAgLTc2MDcsNiArNzYxMCwxMCBAQAogCQkxQTkyN0ZEMDE0MTZBMTVCMDAzQTgzQzgg
LyogbnBydW50aW1lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IG5wcnVudGlt
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQTkyN0ZEMTE0MTZBMTVCMDAzQTgz
QzggLyogbnB0eXBlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBucHR5cGVz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBOTg5NTZBMEFBNzhGODAwMDVFRjVF
RiAvKiBLVVJMQ0ZOZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEtVUkxDRk5ldC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFBQTcxNjA4MTQ5
QkM0REEwMDE2RUMxOSAvKiBUaWxlQ2FjaGUubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5v
YmpjcHA7IG5hbWUgPSBUaWxlQ2FjaGUubW07IHBhdGggPSBjYS9tYWMvVGlsZUNhY2hlLm1tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQUE3MTYwOTE0OUJDNERCMDAxNkVDMTkgLyog
VGlsZUNhY2hlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFRpbGVDYWNoZS5o
OyBwYXRoID0gY2EvbWFjL1RpbGVDYWNoZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkxQUE3MTYxQzE0OUJGMkZBMDAxNkVDMTkgLyogV2ViVGlsZUxheWVyLm1tICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gV2ViVGlsZUxheWVyLm1tOyBwYXRoID0gY2Ev
bWFjL1dlYlRpbGVMYXllci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUFBNzE2
MjUxNDlCRkZCMjAwMTZFQzE5IC8qIFdlYlRpbGVMYXllci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBXZWJUaWxlTGF5ZXIuaDsgcGF0aCA9IGNhL21hYy9XZWJUaWxlTGF5ZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUFBODRGMDIxNDNCQTdCRDAwNTFEMTUz
IC8qIFNjcm9sbEVsYXN0aWNpdHlDb250cm9sbGVyLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAub2JqY3BwOyBwYXRoID0gU2Nyb2xsRWxhc3RpY2l0eUNvbnRyb2xsZXIubW07IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBQTg0RjAzMTQzQkE3QkQwMDUxRDE1MyAvKiBTY3JvbGxF
bGFzdGljaXR5Q29udHJvbGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBT
Y3JvbGxFbGFzdGljaXR5Q29udHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkxQUE4Nzk4RjExQ0JFODQ2MDAzQzY2NEYgLyogUGx1Z2luU3RyYXRlZ3kuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGx1Z2luU3RyYXRlZ3kuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTE1MDcyLDggKzE1MDc5LDEyIEBACiAJCQkJMjkxN0I1NjUxNDczNDk5
NTAwNTJDOUQwIC8qIExheWVyRmx1c2hTY2hlZHVsZXJNYWMuY3BwICovLAogCQkJCTQ5NTg3ODFG
MTJBNTdEREYwMDcyMzhBQyAvKiBQbGF0Zm9ybUNBQW5pbWF0aW9uTWFjLm1tICovLAogCQkJCTQ5
NTg3ODIwMTJBNTdEREYwMDcyMzhBQyAvKiBQbGF0Zm9ybUNBTGF5ZXJNYWMubW0gKi8sCisJCQkJ
MUFBNzE2MDkxNDlCQzREQjAwMTZFQzE5IC8qIFRpbGVDYWNoZS5oICovLAorCQkJCTFBQTcxNjA4
MTQ5QkM0REEwMDE2RUMxOSAvKiBUaWxlQ2FjaGUubW0gKi8sCiAJCQkJMEY1ODBGQTExNDk2OTM5
MTAwRkI1QkQ4IC8qIFdlYlRpbGVDYWNoZUxheWVyLmggKi8sCiAJCQkJMEY1ODBGQTIxNDk2OTM5
MTAwRkI1QkQ4IC8qIFdlYlRpbGVDYWNoZUxheWVyLm1tICovLAorCQkJCTFBQTcxNjI1MTQ5QkZG
QjIwMDE2RUMxOSAvKiBXZWJUaWxlTGF5ZXIuaCAqLywKKwkJCQkxQUE3MTYxQzE0OUJGMkZBMDAx
NkVDMTkgLyogV2ViVGlsZUxheWVyLm1tICovLAogCQkJKTsKIAkJCW5hbWUgPSBtYWM7CiAJCQlz
b3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtMjQ4ODIsNiArMjQ4OTMsNyBAQAogCQkJCTQ5RUNF
QjZBMTQ5OTc5MEQwMENERDNBNCAvKiBGRUdhdXNzaWFuQmx1ck5FT04uaCBpbiBIZWFkZXJzICov
LAogCQkJCTQ5RUNFQjZDMTQ5OTc5MEQwMENERDNBNCAvKiBGRUxpZ2h0aW5nTkVPTi5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMUEyRjlEN0ExNDk2OEM3NDAwNjVBQzYzIC8qIFNjcm9sbGluZ0Nvb3Jk
aW5hdG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQkxQUE3MTYwQjE0OUJDNERCMDAxNkVDMTkgLyog
VGlsZUNhY2hlLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVu
dFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTI3Nzc2LDYgKzI3Nzg4LDggQEAKIAkJCQk0
OUVDRUI2RDE0OTk3OTBEMDBDREQzQTQgLyogRmlsdGVyT3BlcmF0aW9uLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTQ5RUNFQjZGMTQ5OTc5MEQwMENERDNBNCAvKiBGaWx0ZXJPcGVyYXRpb25zLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTFBMkY5RDc5MTQ5NjhDNzQwMDY1QUM2MyAvKiBTY3JvbGxp
bmdDb29yZGluYXRvci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkxQUE3MTYwQTE0OUJDNERCMDAx
NkVDMTkgLyogVGlsZUNhY2hlLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJMUFBNzE2MUUxNDlCRjJG
QTAwMTZFQzE5IC8qIFdlYlRpbGVMYXllci5tbSBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1
bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHAK
aW5kZXggZjc0NzJkMzg1YmFmZTMzYTljNDEzZDRjN2Y3MTk1YmVkNjgwNTQxOS4uYzZmOWIxMjRi
MzllOThjOTBmODA4MGVhYmZhNjg0NDVkZjMxNTk2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwCkBAIC0yMTM4
LDcgKzIxMzgsNyBAQCBGbG9hdFNpemUgR3JhcGhpY3NMYXllckNBOjpjb25zdHJhaW5lZFNpemUo
KSBjb25zdAogCiBib29sIEdyYXBoaWNzTGF5ZXJDQTo6cmVxdWlyZXNUaWxlZExheWVyKGZsb2F0
IHBhZ2VTY2FsZUZhY3RvcikgY29uc3QKIHsKLSAgICBpZiAoIW1fZHJhd3NDb250ZW50IHx8ICFt
X2FsbG93VGlsZWRMYXllcikKKyAgICBpZiAoIW1fZHJhd3NDb250ZW50IHx8ICFtX2FsbG93VGls
ZWRMYXllciB8fCBtX2xheWVyLT5sYXllclR5cGUoKSA9PSBQbGF0Zm9ybUNBTGF5ZXI6OkxheWVy
VHlwZVRpbGVDYWNoZUxheWVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBmbG9hdCBj
b250ZW50c1NjYWxlID0gcGFnZVNjYWxlRmFjdG9yICogZGV2aWNlU2NhbGVGYWN0b3IoKTsKQEAg
LTIxNDksNiArMjE0OSw3IEBAIGJvb2wgR3JhcGhpY3NMYXllckNBOjpyZXF1aXJlc1RpbGVkTGF5
ZXIoZmxvYXQgcGFnZVNjYWxlRmFjdG9yKSBjb25zdAogCiB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6
c3dhcEZyb21PclRvVGlsZWRMYXllcihib29sIHVzZVRpbGVkTGF5ZXIsIGZsb2F0IHBhZ2VTY2Fs
ZUZhY3RvciwgY29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb25SZWxhdGl2ZVRvQmFzZSkKIHsKKyAg
ICBBU1NFUlQobV9sYXllci0+bGF5ZXJUeXBlKCkgIT0gUGxhdGZvcm1DQUxheWVyOjpMYXllclR5
cGVUaWxlQ2FjaGVMYXllcik7CiAgICAgQVNTRVJUKHVzZVRpbGVkTGF5ZXIgIT0gbV91c2luZ1Rp
bGVkTGF5ZXIpOwogICAgIFJlZlB0cjxQbGF0Zm9ybUNBTGF5ZXI+IG9sZExheWVyID0gbV9sYXll
cjsKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
L21hYy9QbGF0Zm9ybUNBTGF5ZXJNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYS9tYWMvUGxhdGZvcm1DQUxheWVyTWFjLm1tCmluZGV4IGViOTJjMjBkNWMyNDQwNDc4
ODNlN2NkMDNmZWE1YzUwZmI4NGIwYzUuLmQ4MzZiY2VkNjEwNDkyMzdjZTM4YmU1ZGQ0ODQ5ZWNj
N2Q1ZTUyMGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
L21hYy9QbGF0Zm9ybUNBTGF5ZXJNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2EvbWFjL1BsYXRmb3JtQ0FMYXllck1hYy5tbQpAQCAtMjE3LDEwICsyMTcsOSBA
QCBQbGF0Zm9ybUNBTGF5ZXI6OlBsYXRmb3JtQ0FMYXllcihMYXllclR5cGUgbGF5ZXJUeXBlLCBQ
bGF0Zm9ybUxheWVyKiBsYXllciwgUGxhdAogICAgIH0KICAgICAKICAgICBpZiAobV9sYXllclR5
cGUgPT0gTGF5ZXJUeXBlVGlsZUNhY2hlTGF5ZXIpIHsKLSAgICAgICAgLy8gRklYTUU6IGhvb2sg
dGhpcyB1cCB0byB0aGUgdGlsZSBjYWNoZS4KLS8vICAgICAgICBtX2N1c3RvbVN1YmxheWVycyA9
IGFkb3B0UHRyKG5ldyBQbGF0Zm9ybUNBTGF5ZXJMaXN0KDEpKTsKLS8vICAgICAgICBDQUxheWVy
KiB0aWxlQ2FjaGVUaWxlQ29udGFpbmVyTGF5ZXIgPSBbc3RhdGljX2Nhc3Q8V2ViVGlsZUNhY2hl
TGF5ZXIgKj4obV9sYXllci5nZXQoKSkgdGlsZUNvbnRhaW5lckxheWVyXTsKLS8vICAgICAgICBt
X2N1c3RvbVN1YmxheWVycy0+YXBwZW5kKFBsYXRmb3JtQ0FMYXllcjo6Y3JlYXRlKHRpbGVDYWNo
ZVRpbGVDb250YWluZXJMYXllciwgMCkpOworICAgICAgICBtX2N1c3RvbVN1YmxheWVycyA9IGFk
b3B0UHRyKG5ldyBQbGF0Zm9ybUNBTGF5ZXJMaXN0KDEpKTsKKyAgICAgICAgQ0FMYXllciogdGls
ZUNhY2hlVGlsZUNvbnRhaW5lckxheWVyID0gW3N0YXRpY19jYXN0PFdlYlRpbGVDYWNoZUxheWVy
ICo+KG1fbGF5ZXIuZ2V0KCkpIHRpbGVDb250YWluZXJMYXllcl07CisgICAgICAgICgqbV9jdXN0
b21TdWJsYXllcnMpWzBdID0gUGxhdGZvcm1DQUxheWVyOjpjcmVhdGUodGlsZUNhY2hlVGlsZUNv
bnRhaW5lckxheWVyLCAwKTsKICAgICB9CiAgICAgCiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBU
SU9OUwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFj
L1RpbGVDYWNoZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL1Rp
bGVDYWNoZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjYyOTU5YzBhZDMxODkxZTdiMzI5ODRmMDUwYmQzYTE5YTU0
YTM5MzQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYS9tYWMvVGlsZUNhY2hlLmgKQEAgLTAsMCArMSw4NCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5k
ZWYgVGlsZUNhY2hlX2gKKyNkZWZpbmUgVGlsZUNhY2hlX2gKKworI2luY2x1ZGUgIkludFNpemUu
aCIKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0
ci5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKworI2lmZGVmIF9fT0JKQ19fCitAY2xh
c3MgQ0FMYXllcjsKK0BjbGFzcyBXZWJUaWxlQ2FjaGVMYXllcjsKK0BjbGFzcyBXZWJUaWxlTGF5
ZXI7CisjZWxzZQorY2xhc3MgQ0FMYXllcjsKK2NsYXNzIFdlYlRpbGVDYWNoZUxheWVyOworY2xh
c3MgV2ViVGlsZUxheWVyOworI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
SW50UG9pbnQ7CitjbGFzcyBJbnRSZWN0OworCitjbGFzcyBUaWxlQ2FjaGUgeworICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKFRpbGVDYWNoZSk7CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093
blB0cjxUaWxlQ2FjaGU+IGNyZWF0ZShXZWJUaWxlQ2FjaGVMYXllciosIGNvbnN0IEludFNpemUm
IHRpbGVTaXplKTsKKworICAgIHZvaWQgdGlsZUNhY2hlTGF5ZXJCb3VuZHNDaGFuZ2VkKCk7Cisg
ICAgdm9pZCBzZXROZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgSW50UmVjdCYpOworICAgIHZvaWQg
ZHJhd0xheWVyKFdlYlRpbGVMYXllciosIENHQ29udGV4dFJlZik7CisKKyAgICBDQUxheWVyICp0
aWxlQ29udGFpbmVyTGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX3RpbGVDb250YWluZXJMYXllci5n
ZXQoKTsgfQorCitwcml2YXRlOgorICAgIFRpbGVDYWNoZShXZWJUaWxlQ2FjaGVMYXllciosIGNv
bnN0IEludFNpemUmIHRpbGVTaXplKTsKKworICAgIEludFJlY3QgYm91bmRzKCkgY29uc3Q7Cisg
ICAgdm9pZCBnZXRUaWxlUmFuZ2VGb3JSZWN0KGNvbnN0IEludFJlY3QmLCBJbnRQb2ludCYgdG9w
TGVmdCwgSW50UG9pbnQmIGJvdHRvbVJpZ2h0KTsKKworICAgIEludFNpemUgbnVtVGlsZXNGb3JH
cmlkU2l6ZShjb25zdCBJbnRTaXplJik7CisgICAgdm9pZCByZXNpemVUaWxlR3JpZChjb25zdCBJ
bnRTaXplJiBudW1UaWxlcyk7CisKKyAgICBXZWJUaWxlTGF5ZXIqIHRpbGVMYXllckF0UG9zaXRp
b24oY29uc3QgSW50UG9pbnQmKTsKKyAgICBSZXRhaW5QdHI8V2ViVGlsZUxheWVyPiBjcmVhdGVU
aWxlTGF5ZXIoKTsKKworICAgIFdlYlRpbGVDYWNoZUxheWVyKiBtX3RpbGVDYWNoZUxheWVyOwor
ICAgIGNvbnN0IEludFNpemUgbV90aWxlU2l6ZTsKKworICAgIFJldGFpblB0cjxDQUxheWVyPiBt
X3RpbGVDb250YWluZXJMYXllcjsKKworICAgIC8vIE51bWJlciBvZiB0aWxlcyBpbiBlYWNoIGRp
bWVuc2lvbi4KKyAgICBJbnRTaXplIG1fbnVtVGlsZXNJbkdyaWQ7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBUaWxlQ2FjaGVfaApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL1RpbGVDYWNoZS5tbSBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9UaWxlQ2FjaGUubW0KbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
ZDNkZGJhNGM4YTYyZGFlODJiMTg0YTE0NWJkZjA3ZGEyNzk1NjU5OQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9UaWxlQ2FjaGUubW0K
QEAgLTAsMCArMSwxNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBv
cnQgIlRpbGVDYWNoZS5oIgorCisjaW1wb3J0ICJJbnRSZWN0LmgiCisjaW1wb3J0ICJQbGF0Zm9y
bUNBTGF5ZXIuaCIKKyNpbXBvcnQgIldlYkxheWVyLmgiCisjaW1wb3J0ICJXZWJUaWxlQ2FjaGVM
YXllci5oIgorI2ltcG9ydCAiV2ViVGlsZUxheWVyLmgiCisjaW1wb3J0IDx1dGlsaXR5PgorCit1
c2luZyBuYW1lc3BhY2Ugc3RkOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bhc3NPd25QdHI8
VGlsZUNhY2hlPiBUaWxlQ2FjaGU6OmNyZWF0ZShXZWJUaWxlQ2FjaGVMYXllciogdGlsZUNhY2hl
TGF5ZXIsIGNvbnN0IEludFNpemUmIHRpbGVTaXplKQoreworICAgIHJldHVybiBhZG9wdFB0cihu
ZXcgVGlsZUNhY2hlKHRpbGVDYWNoZUxheWVyLCB0aWxlU2l6ZSkpOworfQorCitUaWxlQ2FjaGU6
OlRpbGVDYWNoZShXZWJUaWxlQ2FjaGVMYXllciogdGlsZUNhY2hlTGF5ZXIsIGNvbnN0IEludFNp
emUmIHRpbGVTaXplKQorICAgIDogbV90aWxlQ2FjaGVMYXllcih0aWxlQ2FjaGVMYXllcikKKyAg
ICAsIG1fdGlsZVNpemUodGlsZVNpemUpCisgICAgLCBtX3RpbGVDb250YWluZXJMYXllcihhZG9w
dENGKFtbQ0FMYXllciBhbGxvY10gaW5pdF0pKQoreworICAgIFtDQVRyYW5zYWN0aW9uIGJlZ2lu
XTsKKyAgICBbQ0FUcmFuc2FjdGlvbiBzZXREaXNhYmxlQWN0aW9uczpZRVNdOworICAgIFttX3Rp
bGVDYWNoZUxheWVyIGFkZFN1YmxheWVyOm1fdGlsZUNvbnRhaW5lckxheWVyLmdldCgpXTsKKyAg
ICBbQ0FUcmFuc2FjdGlvbiBjb21taXRdOworfQorCit2b2lkIFRpbGVDYWNoZTo6dGlsZUNhY2hl
TGF5ZXJCb3VuZHNDaGFuZ2VkKCkKK3sKKyAgICBJbnRTaXplIG51bVRpbGVzSW5HcmlkID0gbnVt
VGlsZXNGb3JHcmlkU2l6ZShib3VuZHMoKS5zaXplKCkpOworICAgIGlmIChudW1UaWxlc0luR3Jp
ZCA9PSBtX251bVRpbGVzSW5HcmlkKQorICAgICAgICByZXR1cm47CisKKyAgICByZXNpemVUaWxl
R3JpZChudW1UaWxlc0luR3JpZCk7Cit9CisKK3ZvaWQgVGlsZUNhY2hlOjpzZXROZWVkc0Rpc3Bs
YXlJblJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAobV9udW1UaWxlc0luR3Jp
ZC5pc1plcm8oKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gRmluZCB0aGUgdGlsZXMgdGhh
dCBuZWVkIHRvIGJlIGludmFsaWRhdGVkLgorICAgIEludFBvaW50IHRvcExlZnQ7CisgICAgSW50
UG9pbnQgYm90dG9tUmlnaHQ7CisgICAgZ2V0VGlsZVJhbmdlRm9yUmVjdChyZWN0LCB0b3BMZWZ0
LCBib3R0b21SaWdodCk7CisKKyAgICBmb3IgKGludCB5ID0gdG9wTGVmdC55KCk7IHkgPD0gYm90
dG9tUmlnaHQueSgpOyArK3kpIHsKKyAgICAgICAgZm9yIChpbnQgeCA9IHRvcExlZnQueCgpOyB4
IDw9IGJvdHRvbVJpZ2h0LngoKTsgKyt4KSB7CisgICAgICAgICAgICBXZWJUaWxlTGF5ZXIqIHRp
bGVMYXllciA9IHRpbGVMYXllckF0UG9zaXRpb24oSW50UG9pbnQoeCwgeSkpOworCisgICAgICAg
ICAgICBDR1JlY3QgdGlsZVJlY3QgPSBbbV90aWxlQ2FjaGVMYXllciBjb252ZXJ0UmVjdDpyZWN0
IHRvTGF5ZXI6dGlsZUxheWVyXTsKKworICAgICAgICAgICAgaWYgKCFDR1JlY3RJc0VtcHR5KHRp
bGVSZWN0KSkKKyAgICAgICAgICAgICAgICBbdGlsZUxheWVyIHNldE5lZWRzRGlzcGxheUluUmVj
dDp0aWxlUmVjdF07CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgVGlsZUNhY2hlOjpkcmF3
TGF5ZXIoV2ViVGlsZUxheWVyKiBsYXllciwgQ0dDb250ZXh0UmVmIGNvbnRleHQpCit7CisgICAg
UGxhdGZvcm1DQUxheWVyKiBwbGF0Zm9ybUxheWVyID0gUGxhdGZvcm1DQUxheWVyOjpwbGF0Zm9y
bUNBTGF5ZXIobV90aWxlQ2FjaGVMYXllcik7CisgICAgaWYgKCFwbGF0Zm9ybUxheWVyKQorICAg
ICAgICByZXR1cm47CisKKyAgICBDR0NvbnRleHRTYXZlR1N0YXRlKGNvbnRleHQpOworCisgICAg
Q0dQb2ludCBsYXllck9yaWdpbiA9IFtsYXllciBmcmFtZV0ub3JpZ2luOworICAgIENHQ29udGV4
dFRyYW5zbGF0ZUNUTShjb250ZXh0LCAtbGF5ZXJPcmlnaW4ueCwgLWxheWVyT3JpZ2luLnkpOwor
ICAgIGRyYXdMYXllckNvbnRlbnRzKGNvbnRleHQsIGxheWVyLCBwbGF0Zm9ybUxheWVyKTsKKwor
ICAgICAgICBDR0NvbnRleHRSZXN0b3JlR1N0YXRlKGNvbnRleHQpOworfQorCitJbnRSZWN0IFRp
bGVDYWNoZTo6Ym91bmRzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gSW50UmVjdChJbnRQb2ludCgp
LCBJbnRTaXplKFttX3RpbGVDYWNoZUxheWVyIGJvdW5kc10uc2l6ZSkpOworfQorCit2b2lkIFRp
bGVDYWNoZTo6Z2V0VGlsZVJhbmdlRm9yUmVjdChjb25zdCBJbnRSZWN0JiByZWN0LCBJbnRQb2lu
dCYgdG9wTGVmdCwgSW50UG9pbnQmIGJvdHRvbVJpZ2h0KQoreworICAgIHRvcExlZnQuc2V0WCht
YXgocmVjdC54KCkgLyBtX3RpbGVTaXplLndpZHRoKCksIDApKTsKKyAgICB0b3BMZWZ0LnNldFko
bWF4KHJlY3QueSgpIC8gbV90aWxlU2l6ZS5oZWlnaHQoKSwgMCkpOworICAgIGJvdHRvbVJpZ2h0
LnNldFgobWluKHJlY3QubWF4WCgpIC8gbV90aWxlU2l6ZS53aWR0aCgpLCBtX251bVRpbGVzSW5H
cmlkLndpZHRoKCkgLSAxKSk7CisgICAgYm90dG9tUmlnaHQuc2V0WShtaW4ocmVjdC5tYXhZKCkg
LyBtX3RpbGVTaXplLmhlaWdodCgpLCBtX251bVRpbGVzSW5HcmlkLmhlaWdodCgpIC0gMSkpOwor
fQorCitJbnRTaXplIFRpbGVDYWNoZTo6bnVtVGlsZXNGb3JHcmlkU2l6ZShjb25zdCBJbnRTaXpl
JiBncmlkU2l6ZSkKK3sKKyAgICBpbnQgbnVtWFRpbGVzID0gY2VpbChzdGF0aWNfY2FzdDxkb3Vi
bGU+KGdyaWRTaXplLndpZHRoKCkpIC8gbV90aWxlU2l6ZS53aWR0aCgpKTsKKyAgICBpbnQgbnVt
WVRpbGVzID0gY2VpbChzdGF0aWNfY2FzdDxkb3VibGU+KGdyaWRTaXplLmhlaWdodCgpKSAvIG1f
dGlsZVNpemUuaGVpZ2h0KCkpOworCisgICAgcmV0dXJuIEludFNpemUobnVtWFRpbGVzLCBudW1Z
VGlsZXMpOworfQorCit2b2lkIFRpbGVDYWNoZTo6cmVzaXplVGlsZUdyaWQoY29uc3QgSW50U2l6
ZSYgbnVtVGlsZXNJbkdyaWQpCit7CisgICAgW0NBVHJhbnNhY3Rpb24gYmVnaW5dOworICAgIFtD
QVRyYW5zYWN0aW9uIHNldERpc2FibGVBY3Rpb25zOllFU107CisKKyAgICBSZXRhaW5QdHI8TlNN
dXRhYmxlQXJyYXk+IG5ld1N1YmxheWVycyA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxv
Y10gaW5pdFdpdGhDYXBhY2l0eTpudW1UaWxlc0luR3JpZC53aWR0aCgpICogbnVtVGlsZXNJbkdy
aWQuaGVpZ2h0KCldKTsKKworICAgIGZvciAoaW50IHkgPSAwOyB5IDwgbnVtVGlsZXNJbkdyaWQu
aGVpZ2h0KCk7ICsreSkgeworICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IG51bVRpbGVzSW5H
cmlkLndpZHRoKCk7ICsreCkgeworICAgICAgICAgICAgUmV0YWluUHRyPFdlYlRpbGVMYXllcj4g
dGlsZUxheWVyOworCisgICAgICAgICAgICBpZiAoeCA8IG1fbnVtVGlsZXNJbkdyaWQud2lkdGgo
KSAmJiB5IDwgbV9udW1UaWxlc0luR3JpZC5oZWlnaHQoKSkgeworICAgICAgICAgICAgICAgIC8v
IFdlIGNhbiByZXVzZSB0aGUgdGlsZSBsYXllciBhdCB0aGlzIHBvc2l0aW9uLgorICAgICAgICAg
ICAgICAgIHRpbGVMYXllciA9IHRpbGVMYXllckF0UG9zaXRpb24oSW50UG9pbnQoeCwgeSkpOwor
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB0aWxlTGF5ZXIgPSBjcmVhdGVU
aWxlTGF5ZXIoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgW3RpbGVMYXllci5nZXQo
KSBzZXRQb3NpdGlvbjpDR1BvaW50TWFrZSh4ICogbV90aWxlU2l6ZS53aWR0aCgpLCB5ICogbV90
aWxlU2l6ZS5oZWlnaHQoKSldOworICAgICAgICAgICAgW25ld1N1YmxheWVycy5nZXQoKSBhZGRP
YmplY3Q6dGlsZUxheWVyLmdldCgpXTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIEZJWE1F
OiBNYWtlIHN1cmUgdG8gY2FsbCBzZXRUaWxlQ2FjaGU6MCBvbiB0aGUgbGF5ZXJzIHRoYXQgZ2V0
IHRocm93biBhd2F5IGhlcmUuCisgICAgW21fdGlsZUNvbnRhaW5lckxheWVyLmdldCgpIHNldFN1
YmxheWVyczpuZXdTdWJsYXllcnMuZ2V0KCldOworICAgIG1fbnVtVGlsZXNJbkdyaWQgPSBudW1U
aWxlc0luR3JpZDsKKworICAgIFtDQVRyYW5zYWN0aW9uIGNvbW1pdF07Cit9CisKK1dlYlRpbGVM
YXllciogVGlsZUNhY2hlOjp0aWxlTGF5ZXJBdFBvc2l0aW9uKGNvbnN0IEludFBvaW50JiBwb2lu
dCkKK3sKKyAgICBBU1NFUlQocG9pbnQueCgpID49IDApOworICAgIEFTU0VSVChwb2ludC54KCkg
PD0gbV9udW1UaWxlc0luR3JpZC53aWR0aCgpKTsKKyAgICBBU1NFUlQocG9pbnQueSgpID49IDAp
OworICAgIEFTU0VSVChwb2ludC55KCkgPD0gbV9udW1UaWxlc0luR3JpZC5oZWlnaHQoKSk7CisK
KyAgICByZXR1cm4gW1ttX3RpbGVDb250YWluZXJMYXllci5nZXQoKSBzdWJsYXllcnNdIG9iamVj
dEF0SW5kZXg6cG9pbnQueSgpICogbV9udW1UaWxlc0luR3JpZC53aWR0aCgpICsgcG9pbnQueCgp
XTsKK30KKworUmV0YWluUHRyPFdlYlRpbGVMYXllcj4gVGlsZUNhY2hlOjpjcmVhdGVUaWxlTGF5
ZXIoKQoreworICAgIFJldGFpblB0cjxXZWJUaWxlTGF5ZXI+IGxheWVyID0gYWRvcHROUyhbW1dl
YlRpbGVMYXllciBhbGxvY10gaW5pdF0pOworICAgIFtsYXllci5nZXQoKSBzZXRCb3VuZHM6Q0dS
ZWN0TWFrZSgwLCAwLCBtX3RpbGVTaXplLndpZHRoKCksIG1fdGlsZVNpemUuaGVpZ2h0KCkpXTsK
KyAgICBbbGF5ZXIuZ2V0KCkgc2V0QW5jaG9yUG9pbnQ6Q0dQb2ludFplcm9dOworICAgIFtsYXll
ci5nZXQoKSBzZXRUaWxlQ2FjaGU6dGhpc107CisKKyAgICByZXR1cm4gbGF5ZXI7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhL21hYy9XZWJUaWxlQ2FjaGVMYXllci5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2EvbWFjL1dlYlRpbGVDYWNoZUxheWVyLmgKaW5kZXggYzU4OTg5NmVh
YzhkZGQ2YmNhMDBhMGQ1MDI4YjE5NmQ1YjY5ZWIwMy4uNzcxMjZjMGFhNzljZjZmZWRlOTU4NjU2
Y2Q2ZGZmYTVmNGEyYThiZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2EvbWFjL1dlYlRpbGVDYWNoZUxheWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2EvbWFjL1dlYlRpbGVDYWNoZUxheWVyLmgKQEAgLTIzLDggKzIzLDE2
IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCi0jaW1wb3J0ICJXZWJUaWxlZExheWVyLmgiCisj
aW1wb3J0IDxRdWFydHpDb3JlL1F1YXJ0ekNvcmUuaD4KKyNpbXBvcnQgPHd0Zi9Pd25QdHIuaD4K
IAotQGludGVyZmFjZSBXZWJUaWxlQ2FjaGVMYXllciA6IFdlYlRpbGVkTGF5ZXIKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKyAgICBjbGFzcyBUaWxlQ2FjaGU7Cit9CiAKK0BpbnRlcmZhY2UgV2ViVGls
ZUNhY2hlTGF5ZXIgOiBDQUxheWVyIHsKKyAgICBPd25QdHI8V2ViQ29yZTo6VGlsZUNhY2hlPiBf
dGlsZUNhY2hlOworfQorCistIChDQUxheWVyICopdGlsZUNvbnRhaW5lckxheWVyOwogQGVuZApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL1dlYlRp
bGVDYWNoZUxheWVyLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFj
L1dlYlRpbGVDYWNoZUxheWVyLm1tCmluZGV4IDFiNTdkM2UyYjA2NTVmNjc5Yjk4OTBjNzA5MGE5
ODczYzllNjAzOWMuLjNlMjkyZTljZmE0NDI3NjI1ZmM0ZTZjODU5ZjVjOTA5NGE3ODdkNTUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9XZWJUaWxl
Q2FjaGVMYXllci5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9t
YWMvV2ViVGlsZUNhY2hlTGF5ZXIubW0KQEAgLTI0LDEwICsyNCw0MiBAQAogICovCiAKICNpbXBv
cnQgImNvbmZpZy5oIgotCiAjaW1wb3J0ICJXZWJUaWxlQ2FjaGVMYXllci5oIgogCisjaW1wb3J0
ICJJbnRSZWN0LmgiCisjaW1wb3J0ICJUaWxlQ2FjaGUuaCIKKwordXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7CisKIEBpbXBsZW1lbnRhdGlvbiBXZWJUaWxlQ2FjaGVMYXllcgogCistIChpZClpbml0
Cit7CisgICAgc2VsZiA9IFtzdXBlciBpbml0XTsKKyAgICBpZiAoIXNlbGYpCisgICAgICAgIHJl
dHVybiBuaWw7CisKKyAgICAvLyBGSVhNRTogVGhlIHRpbGUgc2l6ZSBzaG91bGQgYmUgY29uZmln
dXJhYmxlLgorICAgIF90aWxlQ2FjaGUgPSBUaWxlQ2FjaGU6OmNyZWF0ZShzZWxmLCBJbnRTaXpl
KDUxMiwgNTEyKSk7CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClzZXRCb3VuZHM6
KENHUmVjdClib3VuZHMKK3sKKyAgICBbc3VwZXIgc2V0Qm91bmRzOmJvdW5kc107CisKKyAgICBf
dGlsZUNhY2hlLT50aWxlQ2FjaGVMYXllckJvdW5kc0NoYW5nZWQoKTsKK30KKworLSAodm9pZClz
ZXROZWVkc0Rpc3BsYXlJblJlY3Q6KENHUmVjdClyZWN0Cit7CisgICAgX3RpbGVDYWNoZS0+c2V0
TmVlZHNEaXNwbGF5SW5SZWN0KGVuY2xvc2luZ0ludFJlY3QocmVjdCkpOworfQorCistIChDQUxh
eWVyICopdGlsZUNvbnRhaW5lckxheWVyCit7CisgICAgcmV0dXJuIF90aWxlQ2FjaGUtPnRpbGVD
b250YWluZXJMYXllcigpOworfQogCiBAZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvV2ViVGlsZUxheWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvV2ViVGlsZUxheWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2I1MmMx
Y2JkMGNlYTFjM2M3ZmM1YTM4YjlkOTU3NGExYjY4NjJmMQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9XZWJUaWxlTGF5ZXIuaApAQCAt
MCwwICsxLDQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJUaWxlTGF5ZXJfaAorI2RlZmlu
ZSBXZWJUaWxlTGF5ZXJfaAorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgY2xhc3MgVGlsZUNh
Y2hlOworfQorCitAaW50ZXJmYWNlIFdlYlRpbGVMYXllciA6IENBTGF5ZXIgeworICAgIFdlYkNv
cmU6OlRpbGVDYWNoZSogX3RpbGVDYWNoZTsKK30KKy0gKHZvaWQpc2V0VGlsZUNhY2hlOihXZWJD
b3JlOjpUaWxlQ2FjaGUqKXRpbGVDYWNoZTsKK0BlbmQKKworCisjZW5kaWYgLy8gV2ViVGlsZUxh
eWVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21h
Yy9XZWJUaWxlTGF5ZXIubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9t
YWMvV2ViVGlsZUxheWVyLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVmNDJkN2M2N2NiNjcyYzM5ZDA4YjczOTY1
NGU5NDY5OTRlZGRjMzEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYS9tYWMvV2ViVGlsZUxheWVyLm1tCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIldlYlRpbGVMYXllci5oIgorCisj
aW1wb3J0ICJUaWxlQ2FjaGUuaCIKKyNpbXBvcnQgPHd0Zi9VbnVzZWRQYXJhbS5oPgorCit1c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworQGltcGxlbWVudGF0aW9uIFdlYlRpbGVMYXllcgorCist
IChpZDxDQUFjdGlvbj4pYWN0aW9uRm9yS2V5OihOU1N0cmluZyAqKWtleQoreworICAgIFVOVVNF
RF9QQVJBTShrZXkpOworICAgIAorICAgIC8vIERpc2FibGUgYWxsIGFuaW1hdGlvbnMuCisgICAg
cmV0dXJuIG5pbDsKK30KKworLSAodm9pZClkcmF3SW5Db250ZXh0OihDR0NvbnRleHRSZWYpY29u
dGV4dAoreworICAgIGlmIChfdGlsZUNhY2hlKQorICAgICAgICBfdGlsZUNhY2hlLT5kcmF3TGF5
ZXIoc2VsZiwgY29udGV4dCk7Cit9CisKKy0gKHZvaWQpc2V0VGlsZUNhY2hlOihXZWJDb3JlOjpU
aWxlQ2FjaGUqKXRpbGVDYWNoZQoreworICAgIF90aWxlQ2FjaGUgPSB0aWxlQ2FjaGU7Cit9CisK
K0BlbmQKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21h
Yy9UaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYS5tbSBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9tYWMvVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWEubW0KaW5kZXgg
ZDFiMWM2MWZiMzUwNDBkZjBiMGIwN2ViZWQ1ODdkMGM1YjBkMThiZC4uY2NkMTUzOGNlYzQ0MDMw
ZTFkYjZkNThkZDRhZGUzMTgzNTgwMmM1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL21hYy9UaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYS5tbQorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1RpbGVkQ29yZUFuaW1hdGlv
bkRyYXdpbmdBcmVhLm1tCkBAIC0xMTgsNiArMTE4LDggQEAgYm9vbCBUaWxlZENvcmVBbmltYXRp
b25EcmF3aW5nQXJlYTo6Zmx1c2hMYXllcnMoKQogICAgIC8vIFRoaXMgZ2V0cyBjYWxsZWQgb3V0
c2lkZSBvZiB0aGUgbm9ybWFsIGV2ZW50IGxvb3Agc28gd3JhcCBpbiBhbiBhdXRvcmVsZWFzZSBw
b29sCiAgICAgTlNBdXRvcmVsZWFzZVBvb2wgKnBvb2wgPSBbW05TQXV0b3JlbGVhc2VQb29sIGFs
bG9jXSBpbml0XTsKIAorICAgIG1fd2ViUGFnZS0+bGF5b3V0SWZOZWVkZWQoKTsKKwogICAgIGJv
b2wgcmV0dXJuVmFsdWUgPSBtX3dlYlBhZ2UtPmNvcmVQYWdlKCktPm1haW5GcmFtZSgpLT52aWV3
KCktPnN5bmNDb21wb3NpdGluZ1N0YXRlSW5jbHVkaW5nU3ViZnJhbWVzKCk7CiAKICAgICBbcG9v
bCBkcmFpbl07Cg==
</data>
<flag name="review"
          id="119767"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
          </attachment>
      

    </bug>

</bugzilla>