<?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>127438</bug_id>
          
          <creation_ts>2014-01-22 11:49:58 -0800</creation_ts>
          <short_desc>WebKit2 View Gestures (Swipe): Add a simple cache of view snapshots</short_desc>
          <delta_ts>2014-01-24 10:52:17 -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>WebKit2</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>
          
          <blocked>127363</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Tim Horton">thorton</reporter>
          <assigned_to name="Tim Horton">thorton</assigned_to>
          <cc>andersca</cc>
    
    <cc>sam</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>970803</commentid>
    <comment_count>0</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-01-22 11:49:58 -0800</bug_when>
    <thetext>This is a cache of bitmap snapshots of the WKView, for use in the forthcoming fluid swipe implementation. For now, it just stores all snapshots forever.

https://bugs.webkit.org/show_bug.cgi?id=127389 and https://bugs.webkit.org/show_bug.cgi?id=127390 track improvements.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>970817</commentid>
    <comment_count>1</comment_count>
      <attachid>221887</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-01-22 12:06:53 -0800</bug_when>
    <thetext>Created attachment 221887
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>970823</commentid>
    <comment_count>2</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-01-22 12:20:58 -0800</bug_when>
    <thetext>Errm, I need a way to make us not take snapshots if swiping isn&apos;t enabled.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>970842</commentid>
    <comment_count>3</comment_count>
      <attachid>221897</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-01-22 13:04:09 -0800</bug_when>
    <thetext>Created attachment 221897
patch disabled by default</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>971015</commentid>
    <comment_count>4</comment_count>
      <attachid>221897</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2014-01-22 21:10:16 -0800</bug_when>
    <thetext>Comment on attachment 221897
patch disabled by default

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

&gt; Source/WebKit2/UIProcess/mac/ViewSnapshotStore.h:48
&gt; +    CGImageRef getSnapshotAndRenderTreeSize(WebBackForwardListItem*, uint64_t&amp; renderTreeSize);

This should return a std::pair&lt;RetainPtr&lt;CGImageRef&gt;, uint64_t&gt;

&gt; Source/WebKit2/UIProcess/mac/ViewSnapshotStore.mm:76
&gt; +    WKView *wkView = webPageProxy.wkView();

This class should not know about WKView! Instead, takeSnapshot() should really do all its work through the PageClient interface.  Is there a WebCore image type we could use for this kind of thing instead of CGImageRef directly?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>971078</commentid>
    <comment_count>5</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-01-23 01:26:17 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 221897 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=221897&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/mac/ViewSnapshotStore.h:48
&gt; &gt; +    CGImageRef getSnapshotAndRenderTreeSize(WebBackForwardListItem*, uint64_t&amp; renderTreeSize);
&gt; 
&gt; This should return a std::pair&lt;RetainPtr&lt;CGImageRef&gt;, uint64_t&gt;

So much better.

&gt; &gt; Source/WebKit2/UIProcess/mac/ViewSnapshotStore.mm:76
&gt; &gt; +    WKView *wkView = webPageProxy.wkView();
&gt; 
&gt; This class should not know about WKView! Instead, takeSnapshot() should really do all its work through the PageClient interface.

OK.

&gt; Is there a WebCore image type we could use for this kind of thing instead of CGImageRef directly?

I didn&apos;t want to get too locked into something like that until we figure out the purgeability story.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>971249</commentid>
    <comment_count>6</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2014-01-23 11:27:30 -0800</bug_when>
    <thetext>&gt; &gt; Is there a WebCore image type we could use for this kind of thing instead of CGImageRef directly?
&gt; 
&gt; I didn&apos;t want to get too locked into something like that until we figure out the purgeability story.

Ok.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>971250</commentid>
    <comment_count>7</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2014-01-23 11:29:14 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; &gt; 
&gt; &gt; This class should not know about WKView! Instead, takeSnapshot() should really do all its work through the PageClient interface.
&gt; 

For classes that are Mac only I see no problem exposing the view directly. Maybe this is not a Mac only class though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>971251</commentid>
    <comment_count>8</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2014-01-23 11:35:57 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; (In reply to comment #5)
&gt; &gt; &gt; 
&gt; &gt; &gt; This class should not know about WKView! Instead, takeSnapshot() should really do all its work through the PageClient interface.
&gt; &gt; 
&gt; 
&gt; For classes that are Mac only I see no problem exposing the view directly. Maybe this is not a Mac only class though.

I have been trying to keep a division still.  If something wants to know about the WKView, it should be in UIProcess/API/Cocoa or UIProcess/API/Mac.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>971262</commentid>
    <comment_count>9</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2014-01-23 12:03:05 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; (In reply to comment #7)
&gt; &gt; (In reply to comment #5)
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; This class should not know about WKView! Instead, takeSnapshot() should really do all its work through the PageClient interface.
&gt; &gt; &gt; 
&gt; &gt; 
&gt; &gt; For classes that are Mac only I see no problem exposing the view directly. Maybe this is not a Mac only class though.
&gt; 
&gt; I have been trying to keep a division still.  If something wants to know about the WKView, it should be in UIProcess/API/Cocoa or UIProcess/API/Mac.

And that&apos;s why PageClient is a clusterfuck of random unrelated functions...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>971427</commentid>
    <comment_count>10</comment_count>
      <attachid>222054</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-01-23 18:00:13 -0800</bug_when>
    <thetext>Created attachment 222054
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>971655</commentid>
    <comment_count>11</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-01-24 10:52:17 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/162710</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>221887</attachid>
            <date>2014-01-22 12:06:53 -0800</date>
            <delta_ts>2014-01-22 13:04:09 -0800</delta_ts>
            <desc>patch</desc>
            <filename>snapshotting.diff</filename>
            <type>text/plain</type>
            <size>25176</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA3NTcwZDNmLi5lMDE5ZWI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsNTkg
QEAKIDIwMTQtMDEtMjIgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CiAK
KyAgICAgICAgV2ViS2l0MiBWaWV3IEdlc3R1cmVzIChTd2lwZSk6IEFkZCBhIHNpbXBsZSBjYWNo
ZSBvZiB2aWV3IHNuYXBzaG90cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTI3NDM4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgQWRkIGEgY2FjaGUgb2YgYml0bWFwIHNuYXBzaG90cyBvZiB0aGUgV0tWaWV3
LCB0YWtlbiB2aWEgT1MgWCdzIHdpbmRvdyBzZXJ2ZXIKKyAgICAgICAgc25hcHNob3R0aW5nIG1l
Y2hhbmlzbS4gRm9yIG5vdywgd2Ugc3RvcmUgYWxsIHNuYXBzaG90czsgcmVmaW5lbWVudHMgdG8g
dGhlCisgICAgICAgIGNhY2hpbmcgc3RyYXRlZ3kgKG9yIHJlYWxseSBoYXZpbmcgb25lIGF0IGFs
bCkgd2lsbCBjb21lIGluIGZ1dHVyZSBwYXRjaGVzLgorCisgICAgICAgIFNuYXBzaG90cyBhcmUg
c3RvcmVkIGluIGEgc2lkZSBtYXAsIHdpdGggYSBVVUlEIHRoYXQgYWxsb3dzIHJlZmVyZW5jZXMK
KyAgICAgICAgdG8gYmUgc3RvcmVkIGluc2lkZSBXZWJCYWNrRm9yd2FyZExpc3RJdGVtIChhbmQg
c2VyaWFsaXplZCBhbG9uZyB3aXRoCisgICAgICAgIHRoZSBiYWNrLWZvcndhcmQgbGlzdCB3aGVu
IGl0IGlzIGNvcGllZCkuCisKKyAgICAgICAgKiBTaGFyZWQvV2ViQmFja0ZvcndhcmRMaXN0SXRl
bS5oOgorICAgICAgICAoV2ViS2l0OjpXZWJCYWNrRm9yd2FyZExpc3RJdGVtOjpzZXRTbmFwc2hv
dFVVSUQpOgorICAgICAgICAoV2ViS2l0OjpXZWJCYWNrRm9yd2FyZExpc3RJdGVtOjpzbmFwc2hv
dFVVSUQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9jZi9XZWJCYWNrRm9yd2FyZExpc3RDRi5jcHA6
CisgICAgICAgIChXZWJLaXQ6OldlYkJhY2tGb3J3YXJkTGlzdDo6Y3JlYXRlQ0ZEaWN0aW9uYXJ5
UmVwcmVzZW50YXRpb24pOgorICAgICAgICAoV2ViS2l0OjpleHRyYWN0QmFja0ZvcndhcmRMaXN0
RW50cmllc0Zyb21BcnJheSk6CisgICAgICAgIFN0b3JlIGFuZCBzZXJpYWxpemUgYSBVVUlEIGFs
b25nIHdpdGggZWFjaCBiYWNrLWZvcndhcmQgbGlzdCBpdGVtIHdoaWNoCisgICAgICAgIGlkZW50
aWZpZXMgdGhhdCBpdGVtJ3MgdmlldyBzbmFwc2hvdCBpbiB0aGUgVmlld1NuYXBzaG90U3RvcmUu
CisKKyAgICAgICAgKiBVSVByb2Nlc3MvY2YvV2ViUGFnZVByb3h5Q0YuY3BwOgorICAgICAgICBC
dW1wIHRoZSBzZXNzaW9uIHN0YXRlIGRhdGEgdmVyc2lvbiwgYXMgd2UgY2hhbmdlZCB0aGUgV2Vi
QmFja0ZvcndhcmRMaXN0IGZvcm1hdC4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2Ev
V0tWaWV3UHJpdmF0ZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbToK
KyAgICAgICAgKC1bV0tWaWV3IHNhdmVCYWNrRm9yd2FyZFNuYXBzaG90Rm9yQ3VycmVudEl0ZW1d
KToKKyAgICAgICAgQWRkIHNhdmVCYWNrRm9yd2FyZFNuYXBzaG90Rm9yQ3VycmVudEl0ZW0gU1BJ
LCB3aGljaCBjbGllbnRzIGNvdWxkIHBvdGVudGlhbGx5CisgICAgICAgIHVzZSB3aGVuIHRoZXkg
a25vdyB0aGV5J3JlIGFib3V0IHRvIG1hbmlwdWxhdGUgdGhlIHZpZXcgaGllcmFyY2h5IGluIHN1
Y2ggYSB3YXkKKyAgICAgICAgdGhhdCB0aGV5IHdhbnQgdGhlIGN1cnJlbnQgYmFjay1mb3J3YXJk
IGl0ZW0ncyBzbmFwc2hvdCB0byBiZSB1cCB0byBkYXRlLgorCisgICAgICAgICogVUlQcm9jZXNz
L1dlYlBhZ2VQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6dGFrZVZp
ZXdTbmFwc2hvdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6Z29Gb3J3YXJkKToK
KyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojpnb0JhY2spOgorICAgICAgICAoV2ViS2l0
OjpXZWJQYWdlUHJveHk6OmdvVG9CYWNrRm9yd2FyZEl0ZW0pOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQYWdlUHJveHk6OmRpZFN0YXJ0UHJvdmlzaW9uYWxMb2FkRm9yRnJhbWUpOgorICAgICAgICAq
IFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaDoKKyAgICAgICAgVXBkYXRlIHRoZSBjdXJyZW50IGJh
Y2stZm9yd2FyZCBpdGVtJ3Mgc25hcHNob3QgaW1tZWRpYXRlbHkgYmVmb3JlIG5hdmlnYXRpbmcu
CisKKyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL1ZpZXdTbmFwc2hvdFN0b3JlLmg6IEFkZGVkLgor
ICAgICAgICAoV2ViS2l0OjpWaWV3U25hcHNob3RTdG9yZTo6ZGlzYWJsZVNuYXBzaG90dGluZyk6
CisgICAgICAgIChXZWJLaXQ6OlZpZXdTbmFwc2hvdFN0b3JlOjplbmFibGVTbmFwc2hvdHRpbmcp
OgorICAgICAgICAqIFVJUHJvY2Vzcy9tYWMvVmlld1NuYXBzaG90U3RvcmUubW06IEFkZGVkLgor
ICAgICAgICAoV2ViS2l0OjpWaWV3U25hcHNob3RTdG9yZTo6Vmlld1NuYXBzaG90U3RvcmUpOgor
ICAgICAgICAoV2ViS2l0OjpWaWV3U25hcHNob3RTdG9yZTo6flZpZXdTbmFwc2hvdFN0b3JlKToK
KyAgICAgICAgKFdlYktpdDo6Vmlld1NuYXBzaG90U3RvcmU6OnNoYXJlZCk6CisgICAgICAgIChX
ZWJLaXQ6OlZpZXdTbmFwc2hvdFN0b3JlOjp0YWtlU25hcHNob3QpOgorICAgICAgICAoV2ViS2l0
OjpWaWV3U25hcHNob3RTdG9yZTo6Z2V0U25hcHNob3RBbmRSZW5kZXJUcmVlU2l6ZSk6CisgICAg
ICAgICogV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorCisyMDE0LTAxLTIyICBU
aW0gSG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgorCiAgICAgICAgIFt3azJdIFNj
cm9sbCBwaW5uaW5nIHN0YXRlIGlzIHdyb25nIHVudGlsIHRoZSBmaXJzdCBzY3JvbGwgZXZlbnQK
ICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNzQzNwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViQmFja0ZvcndhcmRMaXN0SXRl
bS5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkJhY2tGb3J3YXJkTGlzdEl0ZW0uaAppbmRl
eCBiMTM5ZmEwLi41YWJjOTViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2Vi
QmFja0ZvcndhcmRMaXN0SXRlbS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJCYWNr
Rm9yd2FyZExpc3RJdGVtLmgKQEAgLTYwLDYgKzYwLDkgQEAgcHVibGljOgogICAgIHZvaWQgc2V0
QmFja0ZvcndhcmREYXRhKGNvbnN0IHVpbnQ4X3QqIGJ1ZmZlciwgc2l6ZV90IHNpemUpOwogICAg
IGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgYmFja0ZvcndhcmREYXRhKCkgY29uc3QgeyByZXR1cm4g
bV9iYWNrRm9yd2FyZERhdGE7IH0KIAorICAgIHZvaWQgc2V0U25hcHNob3RVVUlEKGNvbnN0IFN0
cmluZyYgdXVpZCkgeyBtX3NuYXBzaG90VVVJRCA9IHV1aWQ7IH0KKyAgICBjb25zdCBTdHJpbmcm
IHNuYXBzaG90VVVJRCgpIGNvbnN0IHsgcmV0dXJuIG1fc25hcHNob3RVVUlEOyB9CisKICAgICB2
b2lkIGVuY29kZShJUEM6OkFyZ3VtZW50RW5jb2RlciYpIGNvbnN0OwogICAgIHN0YXRpYyBQYXNz
UmVmUHRyPFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0+IGRlY29kZShJUEM6OkFyZ3VtZW50RGVjb2Rl
ciYpOwogCkBAIC03Myw2ICs3Niw3IEBAIHByaXZhdGU6CiAgICAgU3RyaW5nIG1fdGl0bGU7CiAg
ICAgdWludDY0X3QgbV9pdGVtSUQ7CiAgICAgVmVjdG9yPHVpbnQ4X3Q+IG1fYmFja0ZvcndhcmRE
YXRhOworICAgIFN0cmluZyBtX3NuYXBzaG90VVVJRDsKIH07CiAKIHR5cGVkZWYgVmVjdG9yPFJl
ZlB0cjxXZWJCYWNrRm9yd2FyZExpc3RJdGVtPj4gQmFja0ZvcndhcmRMaXN0SXRlbVZlY3RvcjsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tWaWV3UHJp
dmF0ZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1ZpZXdQcml2YXRl
LmgKaW5kZXggMGY3OGMwZC4uMDkzZjBkMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9Db2NvYS9XS1ZpZXdQcml2YXRlLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9Db2NvYS9XS1ZpZXdQcml2YXRlLmgKQEAgLTg1LDYgKzg1LDggQEAKIAogLSAo
dm9pZClzZXRNYWduaWZpY2F0aW9uOihkb3VibGUpbWFnbmlmaWNhdGlvbiBjZW50ZXJlZEF0UG9p
bnQ6KE5TUG9pbnQpcG9pbnQ7CiAKKy0gKHZvaWQpc2F2ZUJhY2tGb3J3YXJkU25hcHNob3RGb3JD
dXJyZW50SXRlbTsKKwogI2VuZGlmCiAKIEBlbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvbWFjL1dLVmlldy5tbQppbmRleCAzZmZlODM0Li5lMjI1ZDg0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW0KKysrIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3Lm1tCkBAIC01MCw2ICs1MCw3IEBACiAjaW1wb3J0
ICJUZXh0Q2hlY2tlclN0YXRlLmgiCiAjaW1wb3J0ICJUaWxlZENvcmVBbmltYXRpb25EcmF3aW5n
QXJlYVByb3h5LmgiCiAjaW1wb3J0ICJWaWV3R2VzdHVyZUNvbnRyb2xsZXIuaCIKKyNpbXBvcnQg
IlZpZXdTbmFwc2hvdFN0b3JlLmgiCiAjaW1wb3J0ICJXS0FQSUNhc3QuaCIKICNpbXBvcnQgIldL
RnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIuaCIKICNpbXBvcnQgIldLUHJpbnRpbmdWaWV3Lmgi
CkBAIC01Nyw2ICs1OCw3IEBACiAjaW1wb3J0ICJXS1RleHRJbnB1dFdpbmRvd0NvbnRyb2xsZXIu
aCIKICNpbXBvcnQgIldLVmlld0ludGVybmFsLmgiCiAjaW1wb3J0ICJXS1ZpZXdQcml2YXRlLmgi
CisjaW1wb3J0ICJXZWJCYWNrRm9yd2FyZExpc3QuaCIKICNpbXBvcnQgIldlYkNvbnRleHQuaCIK
ICNpbXBvcnQgIldlYkV2ZW50RmFjdG9yeS5oIgogI2ltcG9ydCAiV2ViS2l0MkluaXRpYWxpemUu
aCIKQEAgLTI4MjMsNiArMjgyNSwxMSBAQCBzdGF0aWMgTlNTdHJpbmcgKnBhdGhXaXRoVW5pcXVl
RmlsZW5hbWVGb3JQYXRoKE5TU3RyaW5nICpwYXRoKQogCiBAaW1wbGVtZW50YXRpb24gV0tWaWV3
IChQcml2YXRlKQogCistICh2b2lkKXNhdmVCYWNrRm9yd2FyZFNuYXBzaG90Rm9yQ3VycmVudEl0
ZW0KK3sKKyAgICBWaWV3U25hcHNob3RTdG9yZTo6c2hhcmVkKCkudGFrZVNuYXBzaG90KCpfZGF0
YS0+X3BhZ2UpOworfQorCiAtICh2b2lkKV9yZWdpc3RlckRyYWdnZWRUeXBlcwogewogICAgIE5T
TXV0YWJsZVNldCAqdHlwZXMgPSBbW05TTXV0YWJsZVNldCBhbGxvY10gaW5pdFdpdGhBcnJheTpQ
YXN0ZWJvYXJkVHlwZXM6OmZvckVkaXRpbmcoKV07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9X
ZWJQYWdlUHJveHkuY3BwCmluZGV4IGQyM2RmMjcuLjQ4OWM5ZTcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCkBAIC0xMTgsNiArMTE4LDEwIEBACiAjaW5jbHVk
ZSA8d3RmL1JlZkNvdW50ZWRMZWFrQ291bnRlci5oPgogI2VuZGlmCiAKKyNpZiBQTEFURk9STShN
QUMpCisjaW5jbHVkZSAiVmlld1NuYXBzaG90U3RvcmUuaCIKKyNlbmRpZgorCiAvLyBUaGlzIGNv
bnRyb2xzIHdoYXQgc3RyYXRlZ3kgd2UgdXNlIGZvciBtb3VzZSB3aGVlbCBjb2FsZXNjaW5nLgog
I2RlZmluZSBNRVJHRV9XSEVFTF9FVkVOVFMgMQogCkBAIC03MzgsNiArNzQyLDEzIEBAIHZvaWQg
V2ViUGFnZVByb3h5OjpyZWxvYWQoYm9vbCByZWxvYWRGcm9tT3JpZ2luKQogICAgIG1fcHJvY2Vz
cy0+cmVzcG9uc2l2ZW5lc3NUaW1lcigpLT5zdGFydCgpOwogfQogCit2b2lkIFdlYlBhZ2VQcm94
eTo6dGFrZVZpZXdTbmFwc2hvdCgpCit7CisjaWYgUExBVEZPUk0oTUFDKQorICAgIFZpZXdTbmFw
c2hvdFN0b3JlOjpzaGFyZWQoKS50YWtlU25hcHNob3QoKnRoaXMpOworI2VuZGlmCit9CisKIHZv
aWQgV2ViUGFnZVByb3h5Ojpnb0ZvcndhcmQoKQogewogICAgIGlmIChpc1ZhbGlkKCkgJiYgIWNh
bkdvRm9yd2FyZCgpKQpAQCAtNzQ3LDYgKzc1OCw4IEBAIHZvaWQgV2ViUGFnZVByb3h5Ojpnb0Zv
cndhcmQoKQogICAgIGlmICghZm9yd2FyZEl0ZW0pCiAgICAgICAgIHJldHVybjsKIAorICAgIHRh
a2VWaWV3U25hcHNob3QoKTsKKwogICAgIGF1dG8gdHJhbnNhY3Rpb24gPSBtX3BhZ2VMb2FkU3Rh
dGUudHJhbnNhY3Rpb24oKTsKIAogICAgIG1fcGFnZUxvYWRTdGF0ZS5zZXRQZW5kaW5nQVBJUmVx
dWVzdFVSTCh0cmFuc2FjdGlvbiwgZm9yd2FyZEl0ZW0tPnVybCgpKTsKQEAgLTc3NCw2ICs3ODcs
OCBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6Z29CYWNrKCkKICAgICBpZiAoIWJhY2tJdGVtKQogICAg
ICAgICByZXR1cm47CiAKKyAgICB0YWtlVmlld1NuYXBzaG90KCk7CisKICAgICBhdXRvIHRyYW5z
YWN0aW9uID0gbV9wYWdlTG9hZFN0YXRlLnRyYW5zYWN0aW9uKCk7CiAKICAgICBtX3BhZ2VMb2Fk
U3RhdGUuc2V0UGVuZGluZ0FQSVJlcXVlc3RVUkwodHJhbnNhY3Rpb24sIGJhY2tJdGVtLT51cmwo
KSk7CkBAIC03OTgsNiArODEzLDggQEAgdm9pZCBXZWJQYWdlUHJveHk6OmdvVG9CYWNrRm9yd2Fy
ZEl0ZW0oV2ViQmFja0ZvcndhcmRMaXN0SXRlbSogaXRlbSkKICAgICAgICAgcmVhdHRhY2hUb1dl
YlByb2Nlc3NXaXRoSXRlbShpdGVtKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KKworICAgIHRh
a2VWaWV3U25hcHNob3QoKTsKICAgICAKICAgICBhdXRvIHRyYW5zYWN0aW9uID0gbV9wYWdlTG9h
ZFN0YXRlLnRyYW5zYWN0aW9uKCk7CiAKQEAgLTIxMDAsOCArMjExNywxMCBAQCB2b2lkIFdlYlBh
Z2VQcm94eTo6ZGlkU3RhcnRQcm92aXNpb25hbExvYWRGb3JGcmFtZSh1aW50NjRfdCBmcmFtZUlE
LCBjb25zdCBTdHJpbgogICAgIE1FU1NBR0VfQ0hFQ0soZnJhbWUpOwogICAgIE1FU1NBR0VfQ0hF
Q0tfVVJMKHVybCk7CiAKLSAgICBpZiAoZnJhbWUtPmlzTWFpbkZyYW1lKCkpCisgICAgaWYgKGZy
YW1lLT5pc01haW5GcmFtZSgpKSB7CisgICAgICAgIHRha2VWaWV3U25hcHNob3QoKTsKICAgICAg
ICAgbV9wYWdlTG9hZFN0YXRlLmRpZFN0YXJ0UHJvdmlzaW9uYWxMb2FkKHRyYW5zYWN0aW9uLCB1
cmwsIHVucmVhY2hhYmxlVVJMKTsKKyAgICB9CiAKICAgICBmcmFtZS0+c2V0VW5yZWFjaGFibGVV
UkwodW5yZWFjaGFibGVVUkwpOwogICAgIGZyYW1lLT5kaWRTdGFydFByb3Zpc2lvbmFsTG9hZCh1
cmwpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5o
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCmluZGV4IDcyNDBkYzIu
LjcxZTA0MDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJv
eHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKQEAgLTEx
NjAsNiArMTE2MCw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBmaW5kUGx1Z2luKGNvbnN0IFN0cmlu
ZyYgbWltZVR5cGUsIHVpbnQzMl90IHByb2Nlc3NUeXBlLCBjb25zdCBTdHJpbmcmIHVybFN0cmlu
ZywgY29uc3QgU3RyaW5nJiBmcmFtZVVSTFN0cmluZywgY29uc3QgU3RyaW5nJiBwYWdlVVJMU3Ry
aW5nLCBib29sIGFsbG93T25seUFwcGxpY2F0aW9uUGx1Z2lucywgdWludDY0X3QmIHBsdWdpblBy
b2Nlc3NUb2tlbiwgU3RyaW5nJiBuZXdNSU1FVHlwZSwgdWludDMyX3QmIHBsdWdpbkxvYWRQb2xp
Y3ksIFN0cmluZyYgdW5hdmFpbGFiaWxpdHlEZXNjcmlwdGlvbik7CiAjZW5kaWYKIAorICAgIHZv
aWQgdGFrZVZpZXdTbmFwc2hvdCgpOworCiAgICAgUGFnZUNsaWVudCYgbV9wYWdlQ2xpZW50Owog
ICAgIFdlYkxvYWRlckNsaWVudCBtX2xvYWRlckNsaWVudDsKICAgICBXZWJQb2xpY3lDbGllbnQg
bV9wb2xpY3lDbGllbnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvY2Yv
V2ViQmFja0ZvcndhcmRMaXN0Q0YuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2NmL1dl
YkJhY2tGb3J3YXJkTGlzdENGLmNwcAppbmRleCAwOGE0NmUyLi5lZDIyMTE3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvY2YvV2ViQmFja0ZvcndhcmRMaXN0Q0YuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9jZi9XZWJCYWNrRm9yd2FyZExpc3RDRi5jcHAK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExLCAyMDEyIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAx
MSwgMjAxMiwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU4LDYgKzU4LDcgQEAgc3RhdGljIENGU3RyaW5nUmVm
IHNlc3Npb25IaXN0b3J5RW50cnlUaXRsZUtleSA9IENGU1RSKCJTZXNzaW9uSGlzdG9yeUVudHJ5
VGl0bGUKIHN0YXRpYyBDRlN0cmluZ1JlZiBzZXNzaW9uSGlzdG9yeUVudHJ5VVJMS2V5ID0gQ0ZT
VFIoIlNlc3Npb25IaXN0b3J5RW50cnlVUkwiKTsKIHN0YXRpYyBDRlN0cmluZ1JlZiBzZXNzaW9u
SGlzdG9yeUVudHJ5T3JpZ2luYWxVUkxLZXkgPSBDRlNUUigiU2Vzc2lvbkhpc3RvcnlFbnRyeU9y
aWdpbmFsVVJMIik7CiBzdGF0aWMgQ0ZTdHJpbmdSZWYgc2Vzc2lvbkhpc3RvcnlFbnRyeURhdGFL
ZXkgPSBDRlNUUigiU2Vzc2lvbkhpc3RvcnlFbnRyeURhdGEiKTsKK3N0YXRpYyBDRlN0cmluZ1Jl
ZiBzZXNzaW9uSGlzdG9yeUVudHJ5U25hcHNob3RVVUlES2V5ID0gQ0ZTVFIoIlNlc3Npb25IaXN0
b3J5RW50cnlTbmFwc2hvdFVVSUQiKTsKIAogc3RhdGljIGJvb2wgZXh0cmFjdEJhY2tGb3J3YXJk
TGlzdEVudHJpZXNGcm9tQXJyYXkoQ0ZBcnJheVJlZiwgQmFja0ZvcndhcmRMaXN0SXRlbVZlY3Rv
ciYpOwogCkBAIC0xMDQsMTUgKzEwNSwxNiBAQCBDRkRpY3Rpb25hcnlSZWYgV2ViQmFja0Zvcndh
cmRMaXN0OjpjcmVhdGVDRkRpY3Rpb25hcnlSZXByZXNlbnRhdGlvbihXZWJQYWdlUHJveAogICAg
ICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHVybCA9IG1fZW50cmllc1tpXS0+dXJsKCkuY3Jl
YXRlQ0ZTdHJpbmcoKTsKICAgICAgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiB0aXRsZSA9IG1f
ZW50cmllc1tpXS0+dGl0bGUoKS5jcmVhdGVDRlN0cmluZygpOwogICAgICAgICBSZXRhaW5QdHI8
Q0ZTdHJpbmdSZWY+IG9yaWdpbmFsVVJMID0gbV9lbnRyaWVzW2ldLT5vcmlnaW5hbFVSTCgpLmNy
ZWF0ZUNGU3RyaW5nKCk7CisgICAgICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gdXVpZCA9IG1f
ZW50cmllc1tpXS0+c25hcHNob3RVVUlEKCkuY3JlYXRlQ0ZTdHJpbmcoKTsKIAogICAgICAgICAv
LyBGSVhNRTogVGhpcyB1c2VzIHRoZSBJUEMgZGF0YSBlbmNvZGluZyBmb3JtYXQsIHdoaWNoIG1l
YW5zIHRoYXQgd2hlbmV2ZXIgd2UgY2hhbmdlIHRoZSBJUEMgZW5jb2Rpbmcgd2UgbmVlZCB0byBi
dW1wIHRoZSBDdXJyZW50U2Vzc2lvblN0YXRlRGF0YVZlcnNpb24KICAgICAgICAgLy8gY29uc3Rh
bnQgaW4gV2ViUGFnZVByb3h5Q0YuY3BwLiBUaGUgSVBDIGRhdGEgZm9ybWF0IGlzIG1lYW50IHRv
IGJlIGFuIGltcGxlbWVudGF0aW9uIGRldGFpbCwgYW5kIG5vdCBzb21ldGhpbmcgdGhhdCBzaG91
bGQgYmUgd3JpdHRlbiB0byBkaXNrLgogICAgICAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBlbnRy
eURhdGEgPSBhZG9wdENGKENGRGF0YUNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBtX2VudHJp
ZXNbaV0tPmJhY2tGb3J3YXJkRGF0YSgpLmRhdGEoKSwgbV9lbnRyaWVzW2ldLT5iYWNrRm9yd2Fy
ZERhdGEoKS5zaXplKCkpKTsKLSAgICAgICAgCi0gICAgICAgIGNvbnN0IHZvaWQqIGtleXNbNF0g
PSB7IHNlc3Npb25IaXN0b3J5RW50cnlVUkxLZXksIHNlc3Npb25IaXN0b3J5RW50cnlUaXRsZUtl
eSwgc2Vzc2lvbkhpc3RvcnlFbnRyeU9yaWdpbmFsVVJMS2V5LCBzZXNzaW9uSGlzdG9yeUVudHJ5
RGF0YUtleSB9OwotICAgICAgICBjb25zdCB2b2lkKiB2YWx1ZXNbNF0gPSB7IHVybC5nZXQoKSwg
dGl0bGUuZ2V0KCksIG9yaWdpbmFsVVJMLmdldCgpLCBlbnRyeURhdGEuZ2V0KCkgfTsKIAotICAg
ICAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBlbnRyeURpY3Rpb25hcnkgPSBhZG9wdENG
KENGRGljdGlvbmFyeUNyZWF0ZSgwLCBrZXlzLCB2YWx1ZXMsIDQsICZrQ0ZUeXBlRGljdGlvbmFy
eUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsKKyAgICAg
ICAgY29uc3Qgdm9pZCoga2V5c1s1XSA9IHsgc2Vzc2lvbkhpc3RvcnlFbnRyeVVSTEtleSwgc2Vz
c2lvbkhpc3RvcnlFbnRyeVRpdGxlS2V5LCBzZXNzaW9uSGlzdG9yeUVudHJ5T3JpZ2luYWxVUkxL
ZXksIHNlc3Npb25IaXN0b3J5RW50cnlEYXRhS2V5LCBzZXNzaW9uSGlzdG9yeUVudHJ5U25hcHNo
b3RVVUlES2V5IH07CisgICAgICAgIGNvbnN0IHZvaWQqIHZhbHVlc1s1XSA9IHsgdXJsLmdldCgp
LCB0aXRsZS5nZXQoKSwgb3JpZ2luYWxVUkwuZ2V0KCksIGVudHJ5RGF0YS5nZXQoKSwgdXVpZC5n
ZXQoKSB9OworCisgICAgICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IGVudHJ5RGljdGlv
bmFyeSA9IGFkb3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRlKDAsIGtleXMsIHZhbHVlcywgNSwgJmtD
RlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxC
YWNrcykpOwogICAgICAgICBDRkFycmF5QXBwZW5kVmFsdWUoZW50cmllcy5nZXQoKSwgZW50cnlE
aWN0aW9uYXJ5LmdldCgpKTsKICAgICB9CiAgICAgICAgIApAQCAtMzA5LDEzICszMTEsMjEgQEAg
c3RhdGljIGJvb2wgZXh0cmFjdEJhY2tGb3J3YXJkTGlzdEVudHJpZXNGcm9tQXJyYXkoQ0ZBcnJh
eVJlZiBjZkVudHJpZXMsIEJhY2tGb3IKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgfQogCisgICAgICAgIENGU3RyaW5nUmVmIHNuYXBzaG90VVVJRCA9IChDRlN0cmluZ1JlZilD
RkRpY3Rpb25hcnlHZXRWYWx1ZShlbnRyeURpY3Rpb25hcnksIHNlc3Npb25IaXN0b3J5RW50cnlT
bmFwc2hvdFVVSURLZXkpOworICAgICAgICBpZiAoIXNuYXBzaG90VVVJRCB8fCBDRkdldFR5cGVJ
RChzbmFwc2hvdFVVSUQpICE9IENGU3RyaW5nR2V0VHlwZUlEKCkpIHsKKyAgICAgICAgICAgIExP
RyhTZXNzaW9uU3RhdGUsICJXZWJCYWNrRm9yd2FyZExpc3QgZW50cnkgYXQgaW5kZXggJWkgZG9l
cyBub3QgaGF2ZSBhIHZhbGlkIHNuYXBzaG90IFVVSUQiLCAoaW50KWkpOworICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICB9CisKICAgICAgICAgQ0ZEYXRhUmVmIGJhY2tGb3J3YXJk
RGF0YSA9IChDRkRhdGFSZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZW50cnlEaWN0aW9uYXJ5LCBz
ZXNzaW9uSGlzdG9yeUVudHJ5RGF0YUtleSk7CiAgICAgICAgIGlmICghYmFja0ZvcndhcmREYXRh
IHx8IENGR2V0VHlwZUlEKGJhY2tGb3J3YXJkRGF0YSkgIT0gQ0ZEYXRhR2V0VHlwZUlEKCkpIHsK
ICAgICAgICAgICAgIExPRyhTZXNzaW9uU3RhdGUsICJXZWJCYWNrRm9yd2FyZExpc3QgZW50cnkg
YXQgaW5kZXggJWkgZG9lcyBub3QgaGF2ZSBiYWNrL2ZvcndhcmQgZGF0YSIsIChpbnQpaSk7CiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGVu
dHJpZXMuYXBwZW5kKFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW06OmNyZWF0ZShvcmlnaW5hbFVSTCwg
ZW50cnlVUkwsIGVudHJ5VGl0bGUsIENGRGF0YUdldEJ5dGVQdHIoYmFja0ZvcndhcmREYXRhKSwg
Q0ZEYXRhR2V0TGVuZ3RoKGJhY2tGb3J3YXJkRGF0YSksIGdlbmVyYXRlV2ViQmFja0ZvcndhcmRJ
dGVtSUQoKSkpOworCisgICAgICAgIGF1dG8gaXRlbSA9IFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW06
OmNyZWF0ZShvcmlnaW5hbFVSTCwgZW50cnlVUkwsIGVudHJ5VGl0bGUsIENGRGF0YUdldEJ5dGVQ
dHIoYmFja0ZvcndhcmREYXRhKSwgQ0ZEYXRhR2V0TGVuZ3RoKGJhY2tGb3J3YXJkRGF0YSksIGdl
bmVyYXRlV2ViQmFja0ZvcndhcmRJdGVtSUQoKSk7CisgICAgICAgIGl0ZW0tPnNldFNuYXBzaG90
VVVJRChzbmFwc2hvdFVVSUQpOworICAgICAgICBlbnRyaWVzLmFwcGVuZChpdGVtKTsKICAgICB9
CiAKICAgICByZXR1cm4gdHJ1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9jZi9XZWJQYWdlUHJveHlDRi5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvY2YvV2Vi
UGFnZVByb3h5Q0YuY3BwCmluZGV4IDI5NzI4OTYuLmZjODFjM2YgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9jZi9XZWJQYWdlUHJveHlDRi5jcHAKKysrIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL2NmL1dlYlBhZ2VQcm94eUNGLmNwcApAQCAtNDQsNyArNDQsNyBAQCBu
YW1lc3BhY2UgV2ViS2l0IHsKIHN0YXRpYyBDRlN0cmluZ1JlZiBzZXNzaW9uSGlzdG9yeUtleSA9
IENGU1RSKCJTZXNzaW9uSGlzdG9yeSIpOwogc3RhdGljIENGU3RyaW5nUmVmIHByb3Zpc2lvbmFs
VVJMS2V5ID0gQ0ZTVFIoIlByb3Zpc2lvbmFsVVJMIik7CiAKLXN0YXRpYyBjb25zdCBVSW50MzIg
Q3VycmVudFNlc3Npb25TdGF0ZURhdGFWZXJzaW9uID0gMjsKK3N0YXRpYyBjb25zdCBVSW50MzIg
Q3VycmVudFNlc3Npb25TdGF0ZURhdGFWZXJzaW9uID0gMzsKIAogUGFzc1JlZlB0cjxBUEk6OkRh
dGE+IFdlYlBhZ2VQcm94eTo6c2Vzc2lvblN0YXRlRGF0YShXZWJQYWdlUHJveHlTZXNzaW9uU3Rh
dGVGaWx0ZXJDYWxsYmFjayBmaWx0ZXIsIHZvaWQqIGNvbnRleHQpIGNvbnN0CiB7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1ZpZXdTbmFwc2hvdFN0b3JlLmggYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1ZpZXdTbmFwc2hvdFN0b3JlLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjA4YjdkMAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvVmlld1NuYXBzaG90U3RvcmUuaApAQCAtMCwwICsx
LDYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBWaWV3U25hcHNob3RTdG9yZV9oCisjZGVmaW5l
IFZpZXdTbmFwc2hvdFN0b3JlX2gKKworI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVk
ZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3Mg
V2ViQmFja0ZvcndhcmRMaXN0SXRlbTsKK2NsYXNzIFdlYlBhZ2VQcm94eTsKKworY2xhc3MgVmll
d1NuYXBzaG90U3RvcmUgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFZpZXdTbmFwc2hvdFN0
b3JlKTsKK3B1YmxpYzoKKyAgICBWaWV3U25hcHNob3RTdG9yZSgpOworICAgIH5WaWV3U25hcHNo
b3RTdG9yZSgpOworCisgICAgc3RhdGljIFZpZXdTbmFwc2hvdFN0b3JlJiBzaGFyZWQoKTsKKwor
ICAgIHZvaWQgdGFrZVNuYXBzaG90KFdlYlBhZ2VQcm94eSYpOworICAgIENHSW1hZ2VSZWYgZ2V0
U25hcHNob3RBbmRSZW5kZXJUcmVlU2l6ZShXZWJCYWNrRm9yd2FyZExpc3RJdGVtKiwgdWludDY0
X3QmIHJlbmRlclRyZWVTaXplKTsKKworICAgIHZvaWQgZGlzYWJsZVNuYXBzaG90dGluZygpIHsg
bV9lbmFibGVkID0gZmFsc2U7IH0KKyAgICB2b2lkIGVuYWJsZVNuYXBzaG90dGluZygpIHsgbV9l
bmFibGVkID0gdHJ1ZTsgfQorCitwcml2YXRlOgorICAgIEhhc2hNYXA8U3RyaW5nLCBzdGQ6OnBh
aXI8UmV0YWluUHRyPENHSW1hZ2VSZWY+LCB1aW50NjRfdD4+IG1fc25hcHNob3RNYXA7CisKKyAg
ICBib29sIG1fZW5hYmxlZDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYg
Ly8gVmlld1NuYXBzaG90U3RvcmVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL21hYy9WaWV3U25hcHNob3RTdG9yZS5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9t
YWMvVmlld1NuYXBzaG90U3RvcmUubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uMzc3MTBjZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9t
YWMvVmlld1NuYXBzaG90U3RvcmUubW0KQEAgLTAsMCArMSwxMTUgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlZpZXdTbmFwc2hvdFN0b3JlLmgiCisKKyNpbXBv
cnQgIldlYkJhY2tGb3J3YXJkTGlzdC5oIgorI2ltcG9ydCAiV2ViUGFnZVByb3h5LmgiCisjaW1w
b3J0ICJXS1ZpZXcuaCIKKyNpbXBvcnQgPENvcmVHcmFwaGljcy9Db3JlR3JhcGhpY3MuaD4KKyNp
bXBvcnQgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+CisjaW1wb3J0IDxXZWJDb3JlL1VVSUQu
aD4KKworI2lmIGRlZmluZWQoX19oYXNfaW5jbHVkZSkgJiYgX19oYXNfaW5jbHVkZSg8Q29yZUdy
YXBoaWNzL0NvcmVHcmFwaGljc1ByaXZhdGUuaD4pCisjaW1wb3J0IDxDb3JlR3JhcGhpY3MvQ29y
ZUdyYXBoaWNzUHJpdmF0ZS5oPgorI2VuZGlmCisKK2V4dGVybiAiQyIgewordHlwZWRlZiB1aW50
MzJfdCBDR1NDb25uZWN0aW9uSUQ7Cit0eXBlZGVmIHVpbnQzMl90IENHU1dpbmRvd0lEOworQ0dT
Q29ubmVjdGlvbklEIENHU01haW5Db25uZWN0aW9uSUQodm9pZCk7CitDR0Vycm9yIENHU0dldFNj
cmVlblJlY3RGb3JXaW5kb3coQ0dTQ29ubmVjdGlvbklEIGNpZCwgQ0dTV2luZG93SUQgd2lkLCBD
R1JlY3QgKnJlY3QpOworfTsKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFj
ZSBXZWJLaXQgeworCitWaWV3U25hcHNob3RTdG9yZTo6Vmlld1NuYXBzaG90U3RvcmUoKQorICAg
IDogbV9lbmFibGVkKHRydWUpCit7Cit9CisKK1ZpZXdTbmFwc2hvdFN0b3JlOjp+Vmlld1NuYXBz
aG90U3RvcmUoKQoreworfQorCitWaWV3U25hcHNob3RTdG9yZSYgVmlld1NuYXBzaG90U3RvcmU6
OnNoYXJlZCgpCit7CisgICAgc3RhdGljIFZpZXdTbmFwc2hvdFN0b3JlJiBzdG9yZSA9ICpuZXcg
Vmlld1NuYXBzaG90U3RvcmU7CisgICAgcmV0dXJuIHN0b3JlOworfQorCit2b2lkIFZpZXdTbmFw
c2hvdFN0b3JlOjp0YWtlU25hcHNob3QoV2ViUGFnZVByb3h5JiB3ZWJQYWdlUHJveHkpCit7Cisg
ICAgUmVmUHRyPFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0+IGl0ZW0gPSB3ZWJQYWdlUHJveHkuYmFj
a0ZvcndhcmRMaXN0KCkuY3VycmVudEl0ZW0oKTsKKworICAgIGlmICghbV9lbmFibGVkKQorICAg
ICAgICByZXR1cm47CisKKyAgICBpZiAoIWl0ZW0pCisgICAgICAgIHJldHVybjsKKworICAgIFdL
VmlldyAqd2tWaWV3ID0gd2ViUGFnZVByb3h5LndrVmlldygpOworICAgIE5TV2luZG93ICp3aW5k
b3cgPSB3a1ZpZXcud2luZG93OworCisgICAgaWYgKCFbd2luZG93IHdpbmRvd051bWJlcl0pCisg
ICAgICAgIHJldHVybjsKKworICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiB3aW5kb3dTbmFwc2hv
dEltYWdlID0gYWRvcHRDRihDR1dpbmRvd0xpc3RDcmVhdGVJbWFnZShDR1JlY3ROdWxsLCBrQ0dX
aW5kb3dMaXN0T3B0aW9uSW5jbHVkaW5nV2luZG93LCBbd2luZG93IHdpbmRvd051bWJlcl0sIGtD
R1dpbmRvd0ltYWdlQm91bmRzSWdub3JlRnJhbWluZyB8IGtDR1dpbmRvd0ltYWdlU2hvdWxkQmVP
cGFxdWUpKTsKKworICAgIE5TUmVjdCB3aW5kb3dDYXB0dXJlUmVjdCA9IFt3a1ZpZXcgY29udmVy
dFJlY3Q6W3drVmlldyBib3VuZHNdIHRvVmlldzpuaWxdOworICAgIE5TUmVjdCB3aW5kb3dDYXB0
dXJlU2NyZWVuUmVjdCA9IFt3aW5kb3cgY29udmVydFJlY3RUb1NjcmVlbjp3aW5kb3dDYXB0dXJl
UmVjdF07CisgICAgQ0dSZWN0IHdpbmRvd1NjcmVlblJlY3Q7CisgICAgQ0dTR2V0U2NyZWVuUmVj
dEZvcldpbmRvdyhDR1NNYWluQ29ubmVjdGlvbklEKCksIChDR1NXaW5kb3dJRClbd2luZG93IHdp
bmRvd051bWJlcl0sICZ3aW5kb3dTY3JlZW5SZWN0KTsKKworICAgIE5TUmVjdCBjcm9wcGVkSW1h
Z2VSZWN0ID0gd2luZG93Q2FwdHVyZVJlY3Q7CisgICAgY3JvcHBlZEltYWdlUmVjdC5vcmlnaW4u
eSA9IHdpbmRvd1NjcmVlblJlY3Quc2l6ZS5oZWlnaHQgLSB3aW5kb3dDYXB0dXJlU2NyZWVuUmVj
dC5zaXplLmhlaWdodCAtIE5TTWluWSh3aW5kb3dDYXB0dXJlUmVjdCk7CisKKyAgICBSZXRhaW5Q
dHI8Q0dJbWFnZVJlZj4gY3JvcHBlZEltYWdlID0gYWRvcHRDRihDR0ltYWdlQ3JlYXRlV2l0aElt
YWdlSW5SZWN0KHdpbmRvd1NuYXBzaG90SW1hZ2UuZ2V0KCksIE5TUmVjdFRvQ0dSZWN0KFt3aW5k
b3cgY29udmVydFJlY3RUb0JhY2tpbmc6Y3JvcHBlZEltYWdlUmVjdF0pKSk7CisKKyAgICBTdHJp
bmcgb2xkU25hcHNob3RVVUlEID0gaXRlbS0+c25hcHNob3RVVUlEKCk7CisgICAgaWYgKCFvbGRT
bmFwc2hvdFVVSUQuaXNFbXB0eSgpKQorICAgICAgICBtX3NuYXBzaG90TWFwLnJlbW92ZShvbGRT
bmFwc2hvdFVVSUQpOworCisgICAgaXRlbS0+c2V0U25hcHNob3RVVUlEKGNyZWF0ZUNhbm9uaWNh
bFVVSURTdHJpbmcoKSk7CisgICAgbV9zbmFwc2hvdE1hcC5hZGQoaXRlbS0+c25hcHNob3RVVUlE
KCksIHN0ZDo6bWFrZV9wYWlyKGNyb3BwZWRJbWFnZSwgd2ViUGFnZVByb3h5LnJlbmRlclRyZWVT
aXplKCkpKTsKK30KKworQ0dJbWFnZVJlZiBWaWV3U25hcHNob3RTdG9yZTo6Z2V0U25hcHNob3RB
bmRSZW5kZXJUcmVlU2l6ZShXZWJCYWNrRm9yd2FyZExpc3RJdGVtKiBpdGVtLCB1aW50NjRfdCYg
cmVuZGVyVHJlZVNpemUpCit7CisgICAgY29uc3QgYXV0byYgc25hcHNob3RBbmRSZW5kZXJUcmVl
U2l6ZSA9IG1fc25hcHNob3RNYXAuZmluZChpdGVtLT5zbmFwc2hvdFVVSUQoKSk7CisKKyAgICBp
ZiAoc25hcHNob3RBbmRSZW5kZXJUcmVlU2l6ZSA9PSBtX3NuYXBzaG90TWFwLmVuZCgpKSB7Cisg
ICAgICAgIHJlbmRlclRyZWVTaXplID0gMDsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
fQorCisgICAgcmVuZGVyVHJlZVNpemUgPSBzbmFwc2hvdEFuZFJlbmRlclRyZWVTaXplLT52YWx1
ZS5zZWNvbmQ7CisgICAgcmV0dXJuIHNuYXBzaG90QW5kUmVuZGVyVHJlZVNpemUtPnZhbHVlLmZp
cnN0LmdldCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJL
aXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA1MmFiYzFkLi44OTlm
ODM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKKysrIGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCkBAIC00MDUsNiArNDA1LDggQEAKIAkJMkQ0MjlCRkQxNzIxRTJDNzAwRUM2ODFGIC8q
IFBERlBsdWdpblBhc3N3b3JkRmllbGQubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAyRDQyOUJGQjE3MjFFMkJBMDBFQzY4MUYgLyogUERGUGx1Z2luUGFz
c3dvcmRGaWVsZC5tbSAqLzsgfTsKIAkJMkQ0N0I1NkMxODEwNzE0RTAwM0EzQUVFIC8qIFJlbW90
ZUxheWVyQmFja2luZ1N0b3JlLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMkQ0N0I1NkExODEwNzE0RTAwM0EzQUVFIC8qIFJlbW90ZUxheWVyQmFja2lu
Z1N0b3JlLm1tICovOyB9OwogCQkyRDQ3QjU2RDE4MTA3MTRFMDAzQTNBRUUgLyogUmVtb3RlTGF5
ZXJCYWNraW5nU3RvcmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDJENDdCNTZCMTgxMDcxNEUwMDNBM0FFRSAvKiBSZW1vdGVMYXllckJhY2tpbmdTdG9y
ZS5oICovOyB9OworCQkyRDZDRDExOTE4OTA1OEE1MDBFNUE0QTAgLyogVmlld1NuYXBzaG90U3Rv
cmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJENkNE
MTE3MTg5MDU4QTUwMEU1QTRBMCAvKiBWaWV3U25hcHNob3RTdG9yZS5oICovOyB9OworCQkyRDZD
RDExQTE4OTA1OEE1MDBFNUE0QTAgLyogVmlld1NuYXBzaG90U3RvcmUubW0gaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDZDRDExODE4OTA1OEE1MDBFNUE0
QTAgLyogVmlld1NuYXBzaG90U3RvcmUubW0gKi87IH07CiAJCTJEODE5QjlFMTg2MjdFRTkwMDFG
MDNEMSAvKiBWaWV3R2VzdHVyZUdlb21ldHJ5Q29sbGVjdG9yLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEODE5Qjk5MTg2Mjc1QjMwMDFGMDNEMSAv
KiBWaWV3R2VzdHVyZUdlb21ldHJ5Q29sbGVjdG9yLmNwcCAqLzsgfTsKIAkJMkQ4MTlCQTExODYy
ODAwRTAwMUYwM0QxIC8qIFZpZXdHZXN0dXJlR2VvbWV0cnlDb2xsZWN0b3JNZXNzYWdlUmVjZWl2
ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkQ4
MTlCOUYxODYyODAwRTAwMUYwM0QxIC8qIFZpZXdHZXN0dXJlR2VvbWV0cnlDb2xsZWN0b3JNZXNz
YWdlUmVjZWl2ZXIuY3BwICovOyB9OwogCQkyRDgxOUJBMjE4NjI4MDBFMDAxRjAzRDEgLyogVmll
d0dlc3R1cmVHZW9tZXRyeUNvbGxlY3Rvck1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDgxOUJBMDE4NjI4MDBFMDAxRjAzRDEgLyogVmll
d0dlc3R1cmVHZW9tZXRyeUNvbGxlY3Rvck1lc3NhZ2VzLmggKi87IH07CkBAIC0yMDUxLDYgKzIw
NTMsOCBAQAogCQkyRDQyOUJGQjE3MjFFMkJBMDBFQzY4MUYgLyogUERGUGx1Z2luUGFzc3dvcmRG
aWVsZC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IFBERlBsdWdp
blBhc3N3b3JkRmllbGQubW07IHBhdGggPSBQREYvUERGUGx1Z2luUGFzc3dvcmRGaWVsZC5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkQ0N0I1NkExODEwNzE0RTAwM0EzQUVFIC8q
IFJlbW90ZUxheWVyQmFja2luZ1N0b3JlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2Jq
Y3BwOyBwYXRoID0gUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmUubW07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTJENDdCNTZCMTgxMDcxNEUwMDNBM0FFRSAvKiBSZW1vdGVMYXllckJhY2tp
bmdTdG9yZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW1vdGVMYXllckJh
Y2tpbmdTdG9yZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyRDZDRDExNzE4OTA1
OEE1MDBFNUE0QTAgLyogVmlld1NuYXBzaG90U3RvcmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gVmlld1NuYXBzaG90U3RvcmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMkQ2Q0QxMTgxODkwNThBNTAwRTVBNEEwIC8qIFZpZXdTbmFwc2hvdFN0b3JlLm1tICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gVmlld1NuYXBzaG90U3RvcmUu
bW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJEODE5Qjk5MTg2Mjc1QjMwMDFGMDNE
MSAvKiBWaWV3R2VzdHVyZUdlb21ldHJ5Q29sbGVjdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFZpZXdHZXN0dXJlR2VvbWV0cnlDb2xsZWN0b3IuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRDgxOUI5QTE4NjI3NUIzMDAxRjAzRDEgLyogVmll
d0dlc3R1cmVHZW9tZXRyeUNvbGxlY3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBWaWV3R2VzdHVyZUdlb21ldHJ5Q29sbGVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTJEODE5QjlCMTg2Mjc1QjMwMDFGMDNEMSAvKiBWaWV3R2VzdHVyZUdlb21ldHJ5
Q29sbGVjdG9yLm1lc3NhZ2VzLmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFZpZXdHZXN0dXJl
R2VvbWV0cnlDb2xsZWN0b3IubWVzc2FnZXMuaW47IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC01NjY5LDYgKzU2NzMsOCBAQAogCQkJCTJEMTI1QzVDMTg1N0VBMDUwMDNCQTNDQiAvKiBW
aWV3R2VzdHVyZUNvbnRyb2xsZXIuaCAqLywKIAkJCQkyRDEyNUM1RDE4NTdFQTA1MDAzQkEzQ0Ig
LyogVmlld0dlc3R1cmVDb250cm9sbGVyLm1tICovLAogCQkJCTJEMUI1RDVBMTg1ODY1OTkwMDZD
NjU5NiAvKiBWaWV3R2VzdHVyZUNvbnRyb2xsZXIubWVzc2FnZXMuaW4gKi8sCisJCQkJMkQ2Q0Qx
MTcxODkwNThBNTAwRTVBNEEwIC8qIFZpZXdTbmFwc2hvdFN0b3JlLmggKi8sCisJCQkJMkQ2Q0Qx
MTgxODkwNThBNTAwRTVBNEEwIC8qIFZpZXdTbmFwc2hvdFN0b3JlLm1tICovLAogCQkJCTcyOEU4
NkVGMTc5NTE4OEMwMDg3ODc5RSAvKiBXZWJDb2xvclBpY2tlck1hYy5oICovLAogCQkJCTcyOEU4
NkYwMTc5NTE4OEMwMDg3ODc5RSAvKiBXZWJDb2xvclBpY2tlck1hYy5tbSAqLywKIAkJCQkxQTFD
NjQ4NjExRjQxNUI3MDA1NTNDMTkgLyogV2ViQ29udGV4dE1hYy5tbSAqLywKQEAgLTY2MzcsNiAr
NjY0Myw3IEBACiAJCQkJQkM4NTdGRTYxMkI4NDNEODAwRURFQjJFIC8qIFdLT3BlblBhbmVsUGFy
YW1ldGVycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxREZFOEYxMkIzMUNBODAwNURGNzMwIC8q
IFdLT3BlblBhbmVsUmVzdWx0TGlzdGVuZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRDU5N0Q3
MTEyQjU2REMwMEVDOEMyMyAvKiBXS1BhZ2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTJENkNEMTE5
MTg5MDU4QTUwMEU1QTRBMCAvKiBWaWV3U25hcHNob3RTdG9yZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQkM3QjYzMzcxMkE0NUFCQTAwRDE3NEE0IC8qIFdLUGFnZUdyb3VwLmggaW4gSGVhZGVycyAq
LywKIAkJCQlCQzJEMDIxOTEyQUM0MjZDMDBFNzMyQTMgLyogV0tQYWdlTG9hZFR5cGVzLmggaW4g
SGVhZGVycyAqLywKIAkJCQk5M0JERUIwMTE3MUREN0FGMDBCRkVFMUIgLyogV0tQYWdlTG9hZFR5
cGVzUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC03NDY4LDYgKzc0NzUsNyBAQAogCQkJCUJD
RTgxRDk4MTMxQUUwMjEwMDI0MTkxMCAvKiBEaWN0aW9uYXJ5UG9wdXBJbmZvLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTUxNjdFRUExMTcwMzc3QkYwMDc2ODFDQSAvKiBEaXNrQ2FjaGVNb25pdG9y
Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMkRBOTQ0OEYxODg0RTNCNTAwRUQ4NkRCIC8qIFdLR2Vv
bG9jYXRpb25Qcm92aWRlcklPUy5tbSBpbiBTb3VyY2VzICovLAorCQkJCTJENkNEMTFBMTg5MDU4
QTUwMEU1QTRBMCAvKiBWaWV3U25hcHNob3RTdG9yZS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTUx
OEU4RjA3MTZCMjA5MzcwMEU5MTQyOSAvKiBEb3dubG9hZC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkyRDQ3QjU2QzE4MTA3MTRFMDAzQTNBRUUgLyogUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmUubW0g
aW4gU291cmNlcyAqLywKIAkJCQk1MThFOEYwOTE2QjIwOTM3MDBFOTE0MjkgLyogRG93bmxvYWRB
dXRoZW50aWNhdGlvbkNsaWVudC5jcHAgaW4gU291cmNlcyAqLywK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>221897</attachid>
            <date>2014-01-22 13:04:09 -0800</date>
            <delta_ts>2014-01-23 18:00:13 -0800</delta_ts>
            <desc>patch disabled by default</desc>
            <filename>snapshotting.diff</filename>
            <type>text/plain</type>
            <size>26297</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA3NTcwZDNmLi42ZmFhN2U1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsNjQg
QEAKIDIwMTQtMDEtMjIgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CiAK
KyAgICAgICAgV2ViS2l0MiBWaWV3IEdlc3R1cmVzIChTd2lwZSk6IEFkZCBhIHNpbXBsZSBjYWNo
ZSBvZiB2aWV3IHNuYXBzaG90cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTI3NDM4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgQWRkIGEgY2FjaGUgb2YgYml0bWFwIHNuYXBzaG90cyBvZiB0aGUgV0tWaWV3
LCB0YWtlbiB2aWEgT1MgWCdzIHdpbmRvdyBzZXJ2ZXIKKyAgICAgICAgc25hcHNob3R0aW5nIG1l
Y2hhbmlzbS4gRm9yIG5vdywgd2Ugc3RvcmUgYWxsIHNuYXBzaG90czsgcmVmaW5lbWVudHMgdG8g
dGhlCisgICAgICAgIGNhY2hpbmcgc3RyYXRlZ3kgKG9yIHJlYWxseSBoYXZpbmcgb25lIGF0IGFs
bCkgd2lsbCBjb21lIGluIGZ1dHVyZSBwYXRjaGVzLgorCisgICAgICAgIFNuYXBzaG90cyBhcmUg
c3RvcmVkIGluIGEgc2lkZSBtYXAsIHdpdGggYSBVVUlEIHRoYXQgYWxsb3dzIHJlZmVyZW5jZXMK
KyAgICAgICAgdG8gYmUgc3RvcmVkIGluc2lkZSBXZWJCYWNrRm9yd2FyZExpc3RJdGVtIChhbmQg
c2VyaWFsaXplZCBhbG9uZyB3aXRoCisgICAgICAgIHRoZSBiYWNrLWZvcndhcmQgbGlzdCB3aGVu
IGl0IGlzIGNvcGllZCkuCisKKyAgICAgICAgKiBTaGFyZWQvV2ViQmFja0ZvcndhcmRMaXN0SXRl
bS5oOgorICAgICAgICAoV2ViS2l0OjpXZWJCYWNrRm9yd2FyZExpc3RJdGVtOjpzZXRTbmFwc2hv
dFVVSUQpOgorICAgICAgICAoV2ViS2l0OjpXZWJCYWNrRm9yd2FyZExpc3RJdGVtOjpzbmFwc2hv
dFVVSUQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9jZi9XZWJCYWNrRm9yd2FyZExpc3RDRi5jcHA6
CisgICAgICAgIChXZWJLaXQ6OldlYkJhY2tGb3J3YXJkTGlzdDo6Y3JlYXRlQ0ZEaWN0aW9uYXJ5
UmVwcmVzZW50YXRpb24pOgorICAgICAgICAoV2ViS2l0OjpleHRyYWN0QmFja0ZvcndhcmRMaXN0
RW50cmllc0Zyb21BcnJheSk6CisgICAgICAgIFN0b3JlIGFuZCBzZXJpYWxpemUgYSBVVUlEIGFs
b25nIHdpdGggZWFjaCBiYWNrLWZvcndhcmQgbGlzdCBpdGVtIHdoaWNoCisgICAgICAgIGlkZW50
aWZpZXMgdGhhdCBpdGVtJ3MgdmlldyBzbmFwc2hvdCBpbiB0aGUgVmlld1NuYXBzaG90U3RvcmUu
CisKKyAgICAgICAgKiBVSVByb2Nlc3MvY2YvV2ViUGFnZVByb3h5Q0YuY3BwOgorICAgICAgICBC
dW1wIHRoZSBzZXNzaW9uIHN0YXRlIGRhdGEgdmVyc2lvbiwgYXMgd2UgY2hhbmdlZCB0aGUgV2Vi
QmFja0ZvcndhcmRMaXN0IGZvcm1hdC4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2Ev
V0tWaWV3UHJpdmF0ZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbToK
KyAgICAgICAgKC1bV0tWaWV3IHNhdmVCYWNrRm9yd2FyZFNuYXBzaG90Rm9yQ3VycmVudEl0ZW1d
KToKKyAgICAgICAgQWRkIHNhdmVCYWNrRm9yd2FyZFNuYXBzaG90Rm9yQ3VycmVudEl0ZW0gU1BJ
LCB3aGljaCBjbGllbnRzIGNvdWxkIHBvdGVudGlhbGx5CisgICAgICAgIHVzZSB3aGVuIHRoZXkg
a25vdyB0aGV5J3JlIGFib3V0IHRvIG1hbmlwdWxhdGUgdGhlIHZpZXcgaGllcmFyY2h5IGluIHN1
Y2ggYSB3YXkKKyAgICAgICAgdGhhdCB0aGV5IHdhbnQgdGhlIGN1cnJlbnQgYmFjay1mb3J3YXJk
IGl0ZW0ncyBzbmFwc2hvdCB0byBiZSB1cCB0byBkYXRlLgorCisgICAgICAgICogVUlQcm9jZXNz
L1dlYlBhZ2VQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6dGFrZVZp
ZXdTbmFwc2hvdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6Z29Gb3J3YXJkKToK
KyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojpnb0JhY2spOgorICAgICAgICAoV2ViS2l0
OjpXZWJQYWdlUHJveHk6OmdvVG9CYWNrRm9yd2FyZEl0ZW0pOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQYWdlUHJveHk6OmRpZFN0YXJ0UHJvdmlzaW9uYWxMb2FkRm9yRnJhbWUpOgorICAgICAgICAq
IFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaDoKKyAgICAgICAgVXBkYXRlIHRoZSBjdXJyZW50IGJh
Y2stZm9yd2FyZCBpdGVtJ3Mgc25hcHNob3QgaW1tZWRpYXRlbHkgYmVmb3JlIG5hdmlnYXRpbmcu
CisKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpzaG91bGRUYWtlVmlld1NuYXBzaG90
c09uTmF2aWdhdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2V0U2hvdWxk
VGFrZVZpZXdTbmFwc2hvdHNPbk5hdmlnYXRpb24pOgorICAgICAgICBFeHBvc2UgdGhlIGFiaWxp
dHkgdG8gZW5hYmxlIHRha2luZyB2aWV3IHNuYXBzaG90cyBvbiBldmVyeSBuYXZpZ2F0aW9uLgor
ICAgICAgICBUaGlzIGlzIG9mZiBieSBkZWZhdWx0LCBzbyB3ZSB3b24ndCBiZSB0YWtpbmcgYW55
IHNuYXBzaG90cyB5ZXQuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL1ZpZXdTbmFwc2hvdFN0
b3JlLmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpWaWV3U25hcHNob3RTdG9yZTo6ZGlzYWJs
ZVNuYXBzaG90dGluZyk6CisgICAgICAgIChXZWJLaXQ6OlZpZXdTbmFwc2hvdFN0b3JlOjplbmFi
bGVTbmFwc2hvdHRpbmcpOgorICAgICAgICAqIFVJUHJvY2Vzcy9tYWMvVmlld1NuYXBzaG90U3Rv
cmUubW06IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpWaWV3U25hcHNob3RTdG9yZTo6Vmlld1Nu
YXBzaG90U3RvcmUpOgorICAgICAgICAoV2ViS2l0OjpWaWV3U25hcHNob3RTdG9yZTo6flZpZXdT
bmFwc2hvdFN0b3JlKToKKyAgICAgICAgKFdlYktpdDo6Vmlld1NuYXBzaG90U3RvcmU6OnNoYXJl
ZCk6CisgICAgICAgIChXZWJLaXQ6OlZpZXdTbmFwc2hvdFN0b3JlOjp0YWtlU25hcHNob3QpOgor
ICAgICAgICAoV2ViS2l0OjpWaWV3U25hcHNob3RTdG9yZTo6Z2V0U25hcHNob3RBbmRSZW5kZXJU
cmVlU2l6ZSk6CisgICAgICAgICogV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgor
CisyMDE0LTAxLTIyICBUaW0gSG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgorCiAg
ICAgICAgIFt3azJdIFNjcm9sbCBwaW5uaW5nIHN0YXRlIGlzIHdyb25nIHVudGlsIHRoZSBmaXJz
dCBzY3JvbGwgZXZlbnQKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTEyNzQzNwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViQmFj
a0ZvcndhcmRMaXN0SXRlbS5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkJhY2tGb3J3YXJk
TGlzdEl0ZW0uaAppbmRleCBiMTM5ZmEwLi41YWJjOTViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvV2ViQmFja0ZvcndhcmRMaXN0SXRlbS5oCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1NoYXJlZC9XZWJCYWNrRm9yd2FyZExpc3RJdGVtLmgKQEAgLTYwLDYgKzYwLDkgQEAgcHVibGlj
OgogICAgIHZvaWQgc2V0QmFja0ZvcndhcmREYXRhKGNvbnN0IHVpbnQ4X3QqIGJ1ZmZlciwgc2l6
ZV90IHNpemUpOwogICAgIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgYmFja0ZvcndhcmREYXRhKCkg
Y29uc3QgeyByZXR1cm4gbV9iYWNrRm9yd2FyZERhdGE7IH0KIAorICAgIHZvaWQgc2V0U25hcHNo
b3RVVUlEKGNvbnN0IFN0cmluZyYgdXVpZCkgeyBtX3NuYXBzaG90VVVJRCA9IHV1aWQ7IH0KKyAg
ICBjb25zdCBTdHJpbmcmIHNuYXBzaG90VVVJRCgpIGNvbnN0IHsgcmV0dXJuIG1fc25hcHNob3RV
VUlEOyB9CisKICAgICB2b2lkIGVuY29kZShJUEM6OkFyZ3VtZW50RW5jb2RlciYpIGNvbnN0Owog
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0+IGRlY29kZShJUEM6
OkFyZ3VtZW50RGVjb2RlciYpOwogCkBAIC03Myw2ICs3Niw3IEBAIHByaXZhdGU6CiAgICAgU3Ry
aW5nIG1fdGl0bGU7CiAgICAgdWludDY0X3QgbV9pdGVtSUQ7CiAgICAgVmVjdG9yPHVpbnQ4X3Q+
IG1fYmFja0ZvcndhcmREYXRhOworICAgIFN0cmluZyBtX3NuYXBzaG90VVVJRDsKIH07CiAKIHR5
cGVkZWYgVmVjdG9yPFJlZlB0cjxXZWJCYWNrRm9yd2FyZExpc3RJdGVtPj4gQmFja0ZvcndhcmRM
aXN0SXRlbVZlY3RvcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Q29jb2EvV0tWaWV3UHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2Nv
YS9XS1ZpZXdQcml2YXRlLmgKaW5kZXggMGY3OGMwZC4uMDkzZjBkMSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1ZpZXdQcml2YXRlLmgKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1ZpZXdQcml2YXRlLmgKQEAgLTg1LDYg
Kzg1LDggQEAKIAogLSAodm9pZClzZXRNYWduaWZpY2F0aW9uOihkb3VibGUpbWFnbmlmaWNhdGlv
biBjZW50ZXJlZEF0UG9pbnQ6KE5TUG9pbnQpcG9pbnQ7CiAKKy0gKHZvaWQpc2F2ZUJhY2tGb3J3
YXJkU25hcHNob3RGb3JDdXJyZW50SXRlbTsKKwogI2VuZGlmCiAKIEBlbmQKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbSBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbQppbmRleCAzZmZlODM0Li4xZjE5YzhiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW0KKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3Lm1tCkBAIC01MCw2ICs1
MCw3IEBACiAjaW1wb3J0ICJUZXh0Q2hlY2tlclN0YXRlLmgiCiAjaW1wb3J0ICJUaWxlZENvcmVB
bmltYXRpb25EcmF3aW5nQXJlYVByb3h5LmgiCiAjaW1wb3J0ICJWaWV3R2VzdHVyZUNvbnRyb2xs
ZXIuaCIKKyNpbXBvcnQgIlZpZXdTbmFwc2hvdFN0b3JlLmgiCiAjaW1wb3J0ICJXS0FQSUNhc3Qu
aCIKICNpbXBvcnQgIldLRnVsbFNjcmVlbldpbmRvd0NvbnRyb2xsZXIuaCIKICNpbXBvcnQgIldL
UHJpbnRpbmdWaWV3LmgiCkBAIC01Nyw2ICs1OCw3IEBACiAjaW1wb3J0ICJXS1RleHRJbnB1dFdp
bmRvd0NvbnRyb2xsZXIuaCIKICNpbXBvcnQgIldLVmlld0ludGVybmFsLmgiCiAjaW1wb3J0ICJX
S1ZpZXdQcml2YXRlLmgiCisjaW1wb3J0ICJXZWJCYWNrRm9yd2FyZExpc3QuaCIKICNpbXBvcnQg
IldlYkNvbnRleHQuaCIKICNpbXBvcnQgIldlYkV2ZW50RmFjdG9yeS5oIgogI2ltcG9ydCAiV2Vi
S2l0MkluaXRpYWxpemUuaCIKQEAgLTI4MjMsNiArMjgyNSwxMSBAQCBzdGF0aWMgTlNTdHJpbmcg
KnBhdGhXaXRoVW5pcXVlRmlsZW5hbWVGb3JQYXRoKE5TU3RyaW5nICpwYXRoKQogCiBAaW1wbGVt
ZW50YXRpb24gV0tWaWV3IChQcml2YXRlKQogCistICh2b2lkKXNhdmVCYWNrRm9yd2FyZFNuYXBz
aG90Rm9yQ3VycmVudEl0ZW0KK3sKKyAgICBfZGF0YS0+X3BhZ2UtPnRha2VWaWV3U25hcHNob3Qo
KTsKK30KKwogLSAodm9pZClfcmVnaXN0ZXJEcmFnZ2VkVHlwZXMKIHsKICAgICBOU011dGFibGVT
ZXQgKnR5cGVzID0gW1tOU011dGFibGVTZXQgYWxsb2NdIGluaXRXaXRoQXJyYXk6UGFzdGVib2Fy
ZFR5cGVzOjpmb3JFZGl0aW5nKCldOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL1dlYlBhZ2VQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVBy
b3h5LmNwcAppbmRleCBkMjNkZjI3Li4yNjVlOTk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvV2ViUGFnZVByb3h5LmNwcApAQCAtMTE4LDYgKzExOCwxMCBAQAogI2luY2x1ZGUgPHd0Zi9S
ZWZDb3VudGVkTGVha0NvdW50ZXIuaD4KICNlbmRpZgogCisjaWYgUExBVEZPUk0oTUFDKQorI2lu
Y2x1ZGUgIlZpZXdTbmFwc2hvdFN0b3JlLmgiCisjZW5kaWYKKwogLy8gVGhpcyBjb250cm9scyB3
aGF0IHN0cmF0ZWd5IHdlIHVzZSBmb3IgbW91c2Ugd2hlZWwgY29hbGVzY2luZy4KICNkZWZpbmUg
TUVSR0VfV0hFRUxfRVZFTlRTIDEKIApAQCAtMzAxLDYgKzMwNSw3IEBAIFdlYlBhZ2VQcm94eTo6
V2ViUGFnZVByb3h5KFBhZ2VDbGllbnQmIHBhZ2VDbGllbnQsIFdlYlByb2Nlc3NQcm94eSYgcHJv
Y2VzcywgV2ViCiAgICAgLCBtX3J1YmJlckJhbmRzQXRCb3R0b20odHJ1ZSkKICAgICAsIG1fYmFj
a2dyb3VuZEV4dGVuZHNCZXlvbmRQYWdlKGZhbHNlKQogICAgICwgbV9tYWluRnJhbWVJblZpZXdT
b3VyY2VNb2RlKGZhbHNlKQorICAgICwgbV9zaG91bGRUYWtlVmlld1NuYXBzaG90c09uTmF2aWdh
dGlvbihmYWxzZSkKICAgICAsIG1fcGFnZUNvdW50KDApCiAgICAgLCBtX3JlbmRlclRyZWVTaXpl
KDApCiAgICAgLCBtX3Nob3VsZFNlbmRFdmVudHNTeW5jaHJvbm91c2x5KGZhbHNlKQpAQCAtNzM4
LDYgKzc0MywxNiBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6cmVsb2FkKGJvb2wgcmVsb2FkRnJvbU9y
aWdpbikKICAgICBtX3Byb2Nlc3MtPnJlc3BvbnNpdmVuZXNzVGltZXIoKS0+c3RhcnQoKTsKIH0K
IAordm9pZCBXZWJQYWdlUHJveHk6OnRha2VWaWV3U25hcHNob3QoKQoreworICAgIGlmICghbV9z
aG91bGRUYWtlVmlld1NuYXBzaG90c09uTmF2aWdhdGlvbikKKyAgICAgICAgcmV0dXJuOworCisj
aWYgUExBVEZPUk0oTUFDKQorICAgIFZpZXdTbmFwc2hvdFN0b3JlOjpzaGFyZWQoKS50YWtlU25h
cHNob3QoKnRoaXMpOworI2VuZGlmCit9CisKIHZvaWQgV2ViUGFnZVByb3h5Ojpnb0ZvcndhcmQo
KQogewogICAgIGlmIChpc1ZhbGlkKCkgJiYgIWNhbkdvRm9yd2FyZCgpKQpAQCAtNzQ3LDYgKzc2
Miw4IEBAIHZvaWQgV2ViUGFnZVByb3h5Ojpnb0ZvcndhcmQoKQogICAgIGlmICghZm9yd2FyZEl0
ZW0pCiAgICAgICAgIHJldHVybjsKIAorICAgIHRha2VWaWV3U25hcHNob3QoKTsKKwogICAgIGF1
dG8gdHJhbnNhY3Rpb24gPSBtX3BhZ2VMb2FkU3RhdGUudHJhbnNhY3Rpb24oKTsKIAogICAgIG1f
cGFnZUxvYWRTdGF0ZS5zZXRQZW5kaW5nQVBJUmVxdWVzdFVSTCh0cmFuc2FjdGlvbiwgZm9yd2Fy
ZEl0ZW0tPnVybCgpKTsKQEAgLTc3NCw2ICs3OTEsOCBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6Z29C
YWNrKCkKICAgICBpZiAoIWJhY2tJdGVtKQogICAgICAgICByZXR1cm47CiAKKyAgICB0YWtlVmll
d1NuYXBzaG90KCk7CisKICAgICBhdXRvIHRyYW5zYWN0aW9uID0gbV9wYWdlTG9hZFN0YXRlLnRy
YW5zYWN0aW9uKCk7CiAKICAgICBtX3BhZ2VMb2FkU3RhdGUuc2V0UGVuZGluZ0FQSVJlcXVlc3RV
UkwodHJhbnNhY3Rpb24sIGJhY2tJdGVtLT51cmwoKSk7CkBAIC03OTgsNiArODE3LDggQEAgdm9p
ZCBXZWJQYWdlUHJveHk6OmdvVG9CYWNrRm9yd2FyZEl0ZW0oV2ViQmFja0ZvcndhcmRMaXN0SXRl
bSogaXRlbSkKICAgICAgICAgcmVhdHRhY2hUb1dlYlByb2Nlc3NXaXRoSXRlbShpdGVtKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KKworICAgIHRha2VWaWV3U25hcHNob3QoKTsKICAgICAKICAg
ICBhdXRvIHRyYW5zYWN0aW9uID0gbV9wYWdlTG9hZFN0YXRlLnRyYW5zYWN0aW9uKCk7CiAKQEAg
LTIxMDAsOCArMjEyMSwxMCBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkU3RhcnRQcm92aXNpb25h
bExvYWRGb3JGcmFtZSh1aW50NjRfdCBmcmFtZUlELCBjb25zdCBTdHJpbgogICAgIE1FU1NBR0Vf
Q0hFQ0soZnJhbWUpOwogICAgIE1FU1NBR0VfQ0hFQ0tfVVJMKHVybCk7CiAKLSAgICBpZiAoZnJh
bWUtPmlzTWFpbkZyYW1lKCkpCisgICAgaWYgKGZyYW1lLT5pc01haW5GcmFtZSgpKSB7CisgICAg
ICAgIHRha2VWaWV3U25hcHNob3QoKTsKICAgICAgICAgbV9wYWdlTG9hZFN0YXRlLmRpZFN0YXJ0
UHJvdmlzaW9uYWxMb2FkKHRyYW5zYWN0aW9uLCB1cmwsIHVucmVhY2hhYmxlVVJMKTsKKyAgICB9
CiAKICAgICBmcmFtZS0+c2V0VW5yZWFjaGFibGVVUkwodW5yZWFjaGFibGVVUkwpOwogICAgIGZy
YW1lLT5kaWRTdGFydFByb3Zpc2lvbmFsTG9hZCh1cmwpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L1dlYlBhZ2VQcm94eS5oCmluZGV4IDcyNDBkYzIuLjQxNjk0NTEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKQEAgLTg1Niw3ICs4NTYsMTEgQEAgcHVibGljOgogICAg
ICAgICAKICAgICB2b2lkIHNldFNjcm9sbFBpbm5pbmdCZWhhdmlvcihXZWJDb3JlOjpTY3JvbGxQ
aW5uaW5nQmVoYXZpb3IpOwogICAgIFdlYkNvcmU6OlNjcm9sbFBpbm5pbmdCZWhhdmlvciBzY3Jv
bGxQaW5uaW5nQmVoYXZpb3IoKSB7IHJldHVybiBtX3Njcm9sbFBpbm5pbmdCZWhhdmlvcjsgfQot
ICAgICAgICAKKworICAgIGJvb2wgc2hvdWxkVGFrZVZpZXdTbmFwc2hvdHNPbk5hdmlnYXRpb24o
KSBjb25zdCB7IHJldHVybiBtX3Nob3VsZFRha2VWaWV3U25hcHNob3RzT25OYXZpZ2F0aW9uOyB9
CisgICAgdm9pZCBzZXRTaG91bGRUYWtlVmlld1NuYXBzaG90c09uTmF2aWdhdGlvbihib29sIHNo
b3VsZFRha2VTbmFwc2hvdHMpIHsgbV9zaG91bGRUYWtlVmlld1NuYXBzaG90c09uTmF2aWdhdGlv
biA9IHNob3VsZFRha2VTbmFwc2hvdHM7IH0KKyAgICB2b2lkIHRha2VWaWV3U25hcHNob3QoKTsK
KwogcHJpdmF0ZToKICAgICBXZWJQYWdlUHJveHkoUGFnZUNsaWVudCYsIFdlYlByb2Nlc3NQcm94
eSYsIFdlYlBhZ2VHcm91cCYsIEFQSTo6U2Vzc2lvbiYsIHVpbnQ2NF90IHBhZ2VJRCk7CiAgICAg
dm9pZCBwbGF0Zm9ybUluaXRpYWxpemUoKTsKQEAgLTEzNTcsNyArMTM2MSw5IEBAIHByaXZhdGU6
CiAgICAgYm9vbCBtX2JhY2tncm91bmRFeHRlbmRzQmV5b25kUGFnZTsKIAogICAgIGJvb2wgbV9t
YWluRnJhbWVJblZpZXdTb3VyY2VNb2RlOwotICAgICAgICAKKworICAgIGJvb2wgbV9zaG91bGRU
YWtlVmlld1NuYXBzaG90c09uTmF2aWdhdGlvbjsKKwogICAgIHVuc2lnbmVkIG1fcGFnZUNvdW50
OwogCiAgICAgV2ViQ29yZTo6SW50UmVjdCBtX3Zpc2libGVTY3JvbGxlclRodW1iUmVjdDsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9jZi9XZWJCYWNrRm9yd2FyZExpc3RD
Ri5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvY2YvV2ViQmFja0ZvcndhcmRMaXN0Q0Yu
Y3BwCmluZGV4IDA4YTQ2ZTIuLmVkMjIxMTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9jZi9XZWJCYWNrRm9yd2FyZExpc3RDRi5jcHAKKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL2NmL1dlYkJhY2tGb3J3YXJkTGlzdENGLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExLCAyMDEyLCAyMDE0IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtNTgsNiArNTgsNyBAQCBzdGF0aWMgQ0ZTdHJpbmdSZWYgc2Vzc2lvbkhpc3RvcnlFbnRy
eVRpdGxlS2V5ID0gQ0ZTVFIoIlNlc3Npb25IaXN0b3J5RW50cnlUaXRsZQogc3RhdGljIENGU3Ry
aW5nUmVmIHNlc3Npb25IaXN0b3J5RW50cnlVUkxLZXkgPSBDRlNUUigiU2Vzc2lvbkhpc3RvcnlF
bnRyeVVSTCIpOwogc3RhdGljIENGU3RyaW5nUmVmIHNlc3Npb25IaXN0b3J5RW50cnlPcmlnaW5h
bFVSTEtleSA9IENGU1RSKCJTZXNzaW9uSGlzdG9yeUVudHJ5T3JpZ2luYWxVUkwiKTsKIHN0YXRp
YyBDRlN0cmluZ1JlZiBzZXNzaW9uSGlzdG9yeUVudHJ5RGF0YUtleSA9IENGU1RSKCJTZXNzaW9u
SGlzdG9yeUVudHJ5RGF0YSIpOworc3RhdGljIENGU3RyaW5nUmVmIHNlc3Npb25IaXN0b3J5RW50
cnlTbmFwc2hvdFVVSURLZXkgPSBDRlNUUigiU2Vzc2lvbkhpc3RvcnlFbnRyeVNuYXBzaG90VVVJ
RCIpOwogCiBzdGF0aWMgYm9vbCBleHRyYWN0QmFja0ZvcndhcmRMaXN0RW50cmllc0Zyb21BcnJh
eShDRkFycmF5UmVmLCBCYWNrRm9yd2FyZExpc3RJdGVtVmVjdG9yJik7CiAKQEAgLTEwNCwxNSAr
MTA1LDE2IEBAIENGRGljdGlvbmFyeVJlZiBXZWJCYWNrRm9yd2FyZExpc3Q6OmNyZWF0ZUNGRGlj
dGlvbmFyeVJlcHJlc2VudGF0aW9uKFdlYlBhZ2VQcm94CiAgICAgICAgIFJldGFpblB0cjxDRlN0
cmluZ1JlZj4gdXJsID0gbV9lbnRyaWVzW2ldLT51cmwoKS5jcmVhdGVDRlN0cmluZygpOwogICAg
ICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHRpdGxlID0gbV9lbnRyaWVzW2ldLT50aXRsZSgp
LmNyZWF0ZUNGU3RyaW5nKCk7CiAgICAgICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gb3JpZ2lu
YWxVUkwgPSBtX2VudHJpZXNbaV0tPm9yaWdpbmFsVVJMKCkuY3JlYXRlQ0ZTdHJpbmcoKTsKKyAg
ICAgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiB1dWlkID0gbV9lbnRyaWVzW2ldLT5zbmFwc2hv
dFVVSUQoKS5jcmVhdGVDRlN0cmluZygpOwogCiAgICAgICAgIC8vIEZJWE1FOiBUaGlzIHVzZXMg
dGhlIElQQyBkYXRhIGVuY29kaW5nIGZvcm1hdCwgd2hpY2ggbWVhbnMgdGhhdCB3aGVuZXZlciB3
ZSBjaGFuZ2UgdGhlIElQQyBlbmNvZGluZyB3ZSBuZWVkIHRvIGJ1bXAgdGhlIEN1cnJlbnRTZXNz
aW9uU3RhdGVEYXRhVmVyc2lvbgogICAgICAgICAvLyBjb25zdGFudCBpbiBXZWJQYWdlUHJveHlD
Ri5jcHAuIFRoZSBJUEMgZGF0YSBmb3JtYXQgaXMgbWVhbnQgdG8gYmUgYW4gaW1wbGVtZW50YXRp
b24gZGV0YWlsLCBhbmQgbm90IHNvbWV0aGluZyB0aGF0IHNob3VsZCBiZSB3cml0dGVuIHRvIGRp
c2suCiAgICAgICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IGVudHJ5RGF0YSA9IGFkb3B0Q0YoQ0ZE
YXRhQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIG1fZW50cmllc1tpXS0+YmFja0ZvcndhcmRE
YXRhKCkuZGF0YSgpLCBtX2VudHJpZXNbaV0tPmJhY2tGb3J3YXJkRGF0YSgpLnNpemUoKSkpOwot
ICAgICAgICAKLSAgICAgICAgY29uc3Qgdm9pZCoga2V5c1s0XSA9IHsgc2Vzc2lvbkhpc3RvcnlF
bnRyeVVSTEtleSwgc2Vzc2lvbkhpc3RvcnlFbnRyeVRpdGxlS2V5LCBzZXNzaW9uSGlzdG9yeUVu
dHJ5T3JpZ2luYWxVUkxLZXksIHNlc3Npb25IaXN0b3J5RW50cnlEYXRhS2V5IH07Ci0gICAgICAg
IGNvbnN0IHZvaWQqIHZhbHVlc1s0XSA9IHsgdXJsLmdldCgpLCB0aXRsZS5nZXQoKSwgb3JpZ2lu
YWxVUkwuZ2V0KCksIGVudHJ5RGF0YS5nZXQoKSB9OwogCi0gICAgICAgIFJldGFpblB0cjxDRkRp
Y3Rpb25hcnlSZWY+IGVudHJ5RGljdGlvbmFyeSA9IGFkb3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRl
KDAsIGtleXMsIHZhbHVlcywgNCwgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NG
VHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcykpOworICAgICAgICBjb25zdCB2b2lkKiBrZXlz
WzVdID0geyBzZXNzaW9uSGlzdG9yeUVudHJ5VVJMS2V5LCBzZXNzaW9uSGlzdG9yeUVudHJ5VGl0
bGVLZXksIHNlc3Npb25IaXN0b3J5RW50cnlPcmlnaW5hbFVSTEtleSwgc2Vzc2lvbkhpc3RvcnlF
bnRyeURhdGFLZXksIHNlc3Npb25IaXN0b3J5RW50cnlTbmFwc2hvdFVVSURLZXkgfTsKKyAgICAg
ICAgY29uc3Qgdm9pZCogdmFsdWVzWzVdID0geyB1cmwuZ2V0KCksIHRpdGxlLmdldCgpLCBvcmln
aW5hbFVSTC5nZXQoKSwgZW50cnlEYXRhLmdldCgpLCB1dWlkLmdldCgpIH07CisKKyAgICAgICAg
UmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gZW50cnlEaWN0aW9uYXJ5ID0gYWRvcHRDRihDRkRp
Y3Rpb25hcnlDcmVhdGUoMCwga2V5cywgdmFsdWVzLCA1LCAma0NGVHlwZURpY3Rpb25hcnlLZXlD
YWxsQmFja3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7CiAgICAgICAgIENG
QXJyYXlBcHBlbmRWYWx1ZShlbnRyaWVzLmdldCgpLCBlbnRyeURpY3Rpb25hcnkuZ2V0KCkpOwog
ICAgIH0KICAgICAgICAgCkBAIC0zMDksMTMgKzMxMSwyMSBAQCBzdGF0aWMgYm9vbCBleHRyYWN0
QmFja0ZvcndhcmRMaXN0RW50cmllc0Zyb21BcnJheShDRkFycmF5UmVmIGNmRW50cmllcywgQmFj
a0ZvcgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAKKyAgICAgICAgQ0ZT
dHJpbmdSZWYgc25hcHNob3RVVUlEID0gKENGU3RyaW5nUmVmKUNGRGljdGlvbmFyeUdldFZhbHVl
KGVudHJ5RGljdGlvbmFyeSwgc2Vzc2lvbkhpc3RvcnlFbnRyeVNuYXBzaG90VVVJREtleSk7Cisg
ICAgICAgIGlmICghc25hcHNob3RVVUlEIHx8IENGR2V0VHlwZUlEKHNuYXBzaG90VVVJRCkgIT0g
Q0ZTdHJpbmdHZXRUeXBlSUQoKSkgeworICAgICAgICAgICAgTE9HKFNlc3Npb25TdGF0ZSwgIldl
YkJhY2tGb3J3YXJkTGlzdCBlbnRyeSBhdCBpbmRleCAlaSBkb2VzIG5vdCBoYXZlIGEgdmFsaWQg
c25hcHNob3QgVVVJRCIsIChpbnQpaSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIH0KKwogICAgICAgICBDRkRhdGFSZWYgYmFja0ZvcndhcmREYXRhID0gKENGRGF0YVJlZilD
RkRpY3Rpb25hcnlHZXRWYWx1ZShlbnRyeURpY3Rpb25hcnksIHNlc3Npb25IaXN0b3J5RW50cnlE
YXRhS2V5KTsKICAgICAgICAgaWYgKCFiYWNrRm9yd2FyZERhdGEgfHwgQ0ZHZXRUeXBlSUQoYmFj
a0ZvcndhcmREYXRhKSAhPSBDRkRhdGFHZXRUeXBlSUQoKSkgewogICAgICAgICAgICAgTE9HKFNl
c3Npb25TdGF0ZSwgIldlYkJhY2tGb3J3YXJkTGlzdCBlbnRyeSBhdCBpbmRleCAlaSBkb2VzIG5v
dCBoYXZlIGJhY2svZm9yd2FyZCBkYXRhIiwgKGludClpKTsKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgZW50cmllcy5hcHBlbmQoV2ViQmFj
a0ZvcndhcmRMaXN0SXRlbTo6Y3JlYXRlKG9yaWdpbmFsVVJMLCBlbnRyeVVSTCwgZW50cnlUaXRs
ZSwgQ0ZEYXRhR2V0Qnl0ZVB0cihiYWNrRm9yd2FyZERhdGEpLCBDRkRhdGFHZXRMZW5ndGgoYmFj
a0ZvcndhcmREYXRhKSwgZ2VuZXJhdGVXZWJCYWNrRm9yd2FyZEl0ZW1JRCgpKSk7CisKKyAgICAg
ICAgYXV0byBpdGVtID0gV2ViQmFja0ZvcndhcmRMaXN0SXRlbTo6Y3JlYXRlKG9yaWdpbmFsVVJM
LCBlbnRyeVVSTCwgZW50cnlUaXRsZSwgQ0ZEYXRhR2V0Qnl0ZVB0cihiYWNrRm9yd2FyZERhdGEp
LCBDRkRhdGFHZXRMZW5ndGgoYmFja0ZvcndhcmREYXRhKSwgZ2VuZXJhdGVXZWJCYWNrRm9yd2Fy
ZEl0ZW1JRCgpKTsKKyAgICAgICAgaXRlbS0+c2V0U25hcHNob3RVVUlEKHNuYXBzaG90VVVJRCk7
CisgICAgICAgIGVudHJpZXMuYXBwZW5kKGl0ZW0pOwogICAgIH0KIAogICAgIHJldHVybiB0cnVl
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2NmL1dlYlBhZ2VQcm94eUNG
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9jZi9XZWJQYWdlUHJveHlDRi5jcHAKaW5k
ZXggMjk3Mjg5Ni4uZmM4MWMzZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L2NmL1dlYlBhZ2VQcm94eUNGLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvY2Yv
V2ViUGFnZVByb3h5Q0YuY3BwCkBAIC00NCw3ICs0NCw3IEBAIG5hbWVzcGFjZSBXZWJLaXQgewog
c3RhdGljIENGU3RyaW5nUmVmIHNlc3Npb25IaXN0b3J5S2V5ID0gQ0ZTVFIoIlNlc3Npb25IaXN0
b3J5Iik7CiBzdGF0aWMgQ0ZTdHJpbmdSZWYgcHJvdmlzaW9uYWxVUkxLZXkgPSBDRlNUUigiUHJv
dmlzaW9uYWxVUkwiKTsKIAotc3RhdGljIGNvbnN0IFVJbnQzMiBDdXJyZW50U2Vzc2lvblN0YXRl
RGF0YVZlcnNpb24gPSAyOworc3RhdGljIGNvbnN0IFVJbnQzMiBDdXJyZW50U2Vzc2lvblN0YXRl
RGF0YVZlcnNpb24gPSAzOwogCiBQYXNzUmVmUHRyPEFQSTo6RGF0YT4gV2ViUGFnZVByb3h5Ojpz
ZXNzaW9uU3RhdGVEYXRhKFdlYlBhZ2VQcm94eVNlc3Npb25TdGF0ZUZpbHRlckNhbGxiYWNrIGZp
bHRlciwgdm9pZCogY29udGV4dCkgY29uc3QKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9tYWMvVmlld1NuYXBzaG90U3RvcmUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9tYWMvVmlld1NuYXBzaG90U3RvcmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi4yMDhiN2QwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL21hYy9WaWV3U25hcHNob3RTdG9yZS5oCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaWZuZGVmIFZpZXdTbmFwc2hvdFN0b3JlX2gKKyNkZWZpbmUgVmlld1NuYXBzaG90U3RvcmVf
aAorCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUu
aD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJCYWNrRm9yd2FyZExpc3RJ
dGVtOworY2xhc3MgV2ViUGFnZVByb3h5OworCitjbGFzcyBWaWV3U25hcHNob3RTdG9yZSB7Cisg
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoVmlld1NuYXBzaG90U3RvcmUpOworcHVibGljOgorICAg
IFZpZXdTbmFwc2hvdFN0b3JlKCk7CisgICAgflZpZXdTbmFwc2hvdFN0b3JlKCk7CisKKyAgICBz
dGF0aWMgVmlld1NuYXBzaG90U3RvcmUmIHNoYXJlZCgpOworCisgICAgdm9pZCB0YWtlU25hcHNo
b3QoV2ViUGFnZVByb3h5Jik7CisgICAgQ0dJbWFnZVJlZiBnZXRTbmFwc2hvdEFuZFJlbmRlclRy
ZWVTaXplKFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0qLCB1aW50NjRfdCYgcmVuZGVyVHJlZVNpemUp
OworCisgICAgdm9pZCBkaXNhYmxlU25hcHNob3R0aW5nKCkgeyBtX2VuYWJsZWQgPSBmYWxzZTsg
fQorICAgIHZvaWQgZW5hYmxlU25hcHNob3R0aW5nKCkgeyBtX2VuYWJsZWQgPSB0cnVlOyB9CisK
K3ByaXZhdGU6CisgICAgSGFzaE1hcDxTdHJpbmcsIHN0ZDo6cGFpcjxSZXRhaW5QdHI8Q0dJbWFn
ZVJlZj4sIHVpbnQ2NF90Pj4gbV9zbmFwc2hvdE1hcDsKKworICAgIGJvb2wgbV9lbmFibGVkOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBWaWV3U25hcHNob3RTdG9y
ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1ZpZXdTbmFwc2hv
dFN0b3JlLm1tIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9WaWV3U25hcHNob3RTdG9y
ZS5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzcxMGNkCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9WaWV3U25hcHNob3RTdG9y
ZS5tbQpAQCAtMCwwICsxLDExNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgor
I2ltcG9ydCAiVmlld1NuYXBzaG90U3RvcmUuaCIKKworI2ltcG9ydCAiV2ViQmFja0ZvcndhcmRM
aXN0LmgiCisjaW1wb3J0ICJXZWJQYWdlUHJveHkuaCIKKyNpbXBvcnQgIldLVmlldy5oIgorI2lt
cG9ydCA8Q29yZUdyYXBoaWNzL0NvcmVHcmFwaGljcy5oPgorI2ltcG9ydCA8V2ViQ29yZS9HcmFw
aGljc0NvbnRleHQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvVVVJRC5oPgorCisjaWYgZGVmaW5lZChf
X2hhc19pbmNsdWRlKSAmJiBfX2hhc19pbmNsdWRlKDxDb3JlR3JhcGhpY3MvQ29yZUdyYXBoaWNz
UHJpdmF0ZS5oPikKKyNpbXBvcnQgPENvcmVHcmFwaGljcy9Db3JlR3JhcGhpY3NQcml2YXRlLmg+
CisjZW5kaWYKKworZXh0ZXJuICJDIiB7Cit0eXBlZGVmIHVpbnQzMl90IENHU0Nvbm5lY3Rpb25J
RDsKK3R5cGVkZWYgdWludDMyX3QgQ0dTV2luZG93SUQ7CitDR1NDb25uZWN0aW9uSUQgQ0dTTWFp
bkNvbm5lY3Rpb25JRCh2b2lkKTsKK0NHRXJyb3IgQ0dTR2V0U2NyZWVuUmVjdEZvcldpbmRvdyhD
R1NDb25uZWN0aW9uSUQgY2lkLCBDR1NXaW5kb3dJRCB3aWQsIENHUmVjdCAqcmVjdCk7Cit9Owor
Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1ZpZXdT
bmFwc2hvdFN0b3JlOjpWaWV3U25hcHNob3RTdG9yZSgpCisgICAgOiBtX2VuYWJsZWQodHJ1ZSkK
K3sKK30KKworVmlld1NuYXBzaG90U3RvcmU6On5WaWV3U25hcHNob3RTdG9yZSgpCit7Cit9CisK
K1ZpZXdTbmFwc2hvdFN0b3JlJiBWaWV3U25hcHNob3RTdG9yZTo6c2hhcmVkKCkKK3sKKyAgICBz
dGF0aWMgVmlld1NuYXBzaG90U3RvcmUmIHN0b3JlID0gKm5ldyBWaWV3U25hcHNob3RTdG9yZTsK
KyAgICByZXR1cm4gc3RvcmU7Cit9CisKK3ZvaWQgVmlld1NuYXBzaG90U3RvcmU6OnRha2VTbmFw
c2hvdChXZWJQYWdlUHJveHkmIHdlYlBhZ2VQcm94eSkKK3sKKyAgICBSZWZQdHI8V2ViQmFja0Zv
cndhcmRMaXN0SXRlbT4gaXRlbSA9IHdlYlBhZ2VQcm94eS5iYWNrRm9yd2FyZExpc3QoKS5jdXJy
ZW50SXRlbSgpOworCisgICAgaWYgKCFtX2VuYWJsZWQpCisgICAgICAgIHJldHVybjsKKworICAg
IGlmICghaXRlbSkKKyAgICAgICAgcmV0dXJuOworCisgICAgV0tWaWV3ICp3a1ZpZXcgPSB3ZWJQ
YWdlUHJveHkud2tWaWV3KCk7CisgICAgTlNXaW5kb3cgKndpbmRvdyA9IHdrVmlldy53aW5kb3c7
CisKKyAgICBpZiAoIVt3aW5kb3cgd2luZG93TnVtYmVyXSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IHdpbmRvd1NuYXBzaG90SW1hZ2UgPSBhZG9wdENGKENH
V2luZG93TGlzdENyZWF0ZUltYWdlKENHUmVjdE51bGwsIGtDR1dpbmRvd0xpc3RPcHRpb25JbmNs
dWRpbmdXaW5kb3csIFt3aW5kb3cgd2luZG93TnVtYmVyXSwga0NHV2luZG93SW1hZ2VCb3VuZHNJ
Z25vcmVGcmFtaW5nIHwga0NHV2luZG93SW1hZ2VTaG91bGRCZU9wYXF1ZSkpOworCisgICAgTlNS
ZWN0IHdpbmRvd0NhcHR1cmVSZWN0ID0gW3drVmlldyBjb252ZXJ0UmVjdDpbd2tWaWV3IGJvdW5k
c10gdG9WaWV3Om5pbF07CisgICAgTlNSZWN0IHdpbmRvd0NhcHR1cmVTY3JlZW5SZWN0ID0gW3dp
bmRvdyBjb252ZXJ0UmVjdFRvU2NyZWVuOndpbmRvd0NhcHR1cmVSZWN0XTsKKyAgICBDR1JlY3Qg
d2luZG93U2NyZWVuUmVjdDsKKyAgICBDR1NHZXRTY3JlZW5SZWN0Rm9yV2luZG93KENHU01haW5D
b25uZWN0aW9uSUQoKSwgKENHU1dpbmRvd0lEKVt3aW5kb3cgd2luZG93TnVtYmVyXSwgJndpbmRv
d1NjcmVlblJlY3QpOworCisgICAgTlNSZWN0IGNyb3BwZWRJbWFnZVJlY3QgPSB3aW5kb3dDYXB0
dXJlUmVjdDsKKyAgICBjcm9wcGVkSW1hZ2VSZWN0Lm9yaWdpbi55ID0gd2luZG93U2NyZWVuUmVj
dC5zaXplLmhlaWdodCAtIHdpbmRvd0NhcHR1cmVTY3JlZW5SZWN0LnNpemUuaGVpZ2h0IC0gTlNN
aW5ZKHdpbmRvd0NhcHR1cmVSZWN0KTsKKworICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBjcm9w
cGVkSW1hZ2UgPSBhZG9wdENGKENHSW1hZ2VDcmVhdGVXaXRoSW1hZ2VJblJlY3Qod2luZG93U25h
cHNob3RJbWFnZS5nZXQoKSwgTlNSZWN0VG9DR1JlY3QoW3dpbmRvdyBjb252ZXJ0UmVjdFRvQmFj
a2luZzpjcm9wcGVkSW1hZ2VSZWN0XSkpKTsKKworICAgIFN0cmluZyBvbGRTbmFwc2hvdFVVSUQg
PSBpdGVtLT5zbmFwc2hvdFVVSUQoKTsKKyAgICBpZiAoIW9sZFNuYXBzaG90VVVJRC5pc0VtcHR5
KCkpCisgICAgICAgIG1fc25hcHNob3RNYXAucmVtb3ZlKG9sZFNuYXBzaG90VVVJRCk7CisKKyAg
ICBpdGVtLT5zZXRTbmFwc2hvdFVVSUQoY3JlYXRlQ2Fub25pY2FsVVVJRFN0cmluZygpKTsKKyAg
ICBtX3NuYXBzaG90TWFwLmFkZChpdGVtLT5zbmFwc2hvdFVVSUQoKSwgc3RkOjptYWtlX3BhaXIo
Y3JvcHBlZEltYWdlLCB3ZWJQYWdlUHJveHkucmVuZGVyVHJlZVNpemUoKSkpOworfQorCitDR0lt
YWdlUmVmIFZpZXdTbmFwc2hvdFN0b3JlOjpnZXRTbmFwc2hvdEFuZFJlbmRlclRyZWVTaXplKFdl
YkJhY2tGb3J3YXJkTGlzdEl0ZW0qIGl0ZW0sIHVpbnQ2NF90JiByZW5kZXJUcmVlU2l6ZSkKK3sK
KyAgICBjb25zdCBhdXRvJiBzbmFwc2hvdEFuZFJlbmRlclRyZWVTaXplID0gbV9zbmFwc2hvdE1h
cC5maW5kKGl0ZW0tPnNuYXBzaG90VVVJRCgpKTsKKworICAgIGlmIChzbmFwc2hvdEFuZFJlbmRl
clRyZWVTaXplID09IG1fc25hcHNob3RNYXAuZW5kKCkpIHsKKyAgICAgICAgcmVuZGVyVHJlZVNp
emUgPSAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICByZW5kZXJUcmVl
U2l6ZSA9IHNuYXBzaG90QW5kUmVuZGVyVHJlZVNpemUtPnZhbHVlLnNlY29uZDsKKyAgICByZXR1
cm4gc25hcHNob3RBbmRSZW5kZXJUcmVlU2l6ZS0+dmFsdWUuZmlyc3QuZ2V0KCk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDUyYWJjMWQuLjg5OWY4MzQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTQwNSw2ICs0
MDUsOCBAQAogCQkyRDQyOUJGRDE3MjFFMkM3MDBFQzY4MUYgLyogUERGUGx1Z2luUGFzc3dvcmRG
aWVsZC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJE
NDI5QkZCMTcyMUUyQkEwMEVDNjgxRiAvKiBQREZQbHVnaW5QYXNzd29yZEZpZWxkLm1tICovOyB9
OwogCQkyRDQ3QjU2QzE4MTA3MTRFMDAzQTNBRUUgLyogUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmUu
bW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDQ3QjU2
QTE4MTA3MTRFMDAzQTNBRUUgLyogUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmUubW0gKi87IH07CiAJ
CTJENDdCNTZEMTgxMDcxNEUwMDNBM0FFRSAvKiBSZW1vdGVMYXllckJhY2tpbmdTdG9yZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkQ0N0I1NkIxODEw
NzE0RTAwM0EzQUVFIC8qIFJlbW90ZUxheWVyQmFja2luZ1N0b3JlLmggKi87IH07CisJCTJENkNE
MTE5MTg5MDU4QTUwMEU1QTRBMCAvKiBWaWV3U25hcHNob3RTdG9yZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkQ2Q0QxMTcxODkwNThBNTAwRTVBNEEw
IC8qIFZpZXdTbmFwc2hvdFN0b3JlLmggKi87IH07CisJCTJENkNEMTFBMTg5MDU4QTUwMEU1QTRB
MCAvKiBWaWV3U25hcHNob3RTdG9yZS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDJENkNEMTE4MTg5MDU4QTUwMEU1QTRBMCAvKiBWaWV3U25hcHNob3RT
dG9yZS5tbSAqLzsgfTsKIAkJMkQ4MTlCOUUxODYyN0VFOTAwMUYwM0QxIC8qIFZpZXdHZXN0dXJl
R2VvbWV0cnlDb2xsZWN0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMkQ4MTlCOTkxODYyNzVCMzAwMUYwM0QxIC8qIFZpZXdHZXN0dXJlR2VvbWV0
cnlDb2xsZWN0b3IuY3BwICovOyB9OwogCQkyRDgxOUJBMTE4NjI4MDBFMDAxRjAzRDEgLyogVmll
d0dlc3R1cmVHZW9tZXRyeUNvbGxlY3Rvck1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDgxOUI5RjE4NjI4MDBFMDAxRjAz
RDEgLyogVmlld0dlc3R1cmVHZW9tZXRyeUNvbGxlY3Rvck1lc3NhZ2VSZWNlaXZlci5jcHAgKi87
IH07CiAJCTJEODE5QkEyMTg2MjgwMEUwMDFGMDNEMSAvKiBWaWV3R2VzdHVyZUdlb21ldHJ5Q29s
bGVjdG9yTWVzc2FnZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDJEODE5QkEwMTg2MjgwMEUwMDFGMDNEMSAvKiBWaWV3R2VzdHVyZUdlb21ldHJ5Q29s
bGVjdG9yTWVzc2FnZXMuaCAqLzsgfTsKQEAgLTIwNTEsNiArMjA1Myw4IEBACiAJCTJENDI5QkZC
MTcyMUUyQkEwMEVDNjgxRiAvKiBQREZQbHVnaW5QYXNzd29yZEZpZWxkLm1tICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gUERGUGx1Z2luUGFzc3dvcmRGaWVsZC5tbTsg
cGF0aCA9IFBERi9QREZQbHVnaW5QYXNzd29yZEZpZWxkLm1tOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkyRDQ3QjU2QTE4MTA3MTRFMDAzQTNBRUUgLyogUmVtb3RlTGF5ZXJCYWNraW5n
U3RvcmUubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBSZW1vdGVM
YXllckJhY2tpbmdTdG9yZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkQ0N0I1
NkIxODEwNzE0RTAwM0EzQUVFIC8qIFJlbW90ZUxheWVyQmFja2luZ1N0b3JlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbW90ZUxheWVyQmFja2luZ1N0b3JlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTJENkNEMTE3MTg5MDU4QTUwMEU1QTRBMCAvKiBWaWV3
U25hcHNob3RTdG9yZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWaWV3U25h
cHNob3RTdG9yZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyRDZDRDExODE4OTA1
OEE1MDBFNUE0QTAgLyogVmlld1NuYXBzaG90U3RvcmUubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5vYmpjcHA7IHBhdGggPSBWaWV3U25hcHNob3RTdG9yZS5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMkQ4MTlCOTkxODYyNzVCMzAwMUYwM0QxIC8qIFZpZXdHZXN0dXJlR2Vv
bWV0cnlDb2xsZWN0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
Vmlld0dlc3R1cmVHZW9tZXRyeUNvbGxlY3Rvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTJEODE5QjlBMTg2Mjc1QjMwMDFGMDNEMSAvKiBWaWV3R2VzdHVyZUdlb21ldHJ5Q29s
bGVjdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZpZXdHZXN0dXJlR2Vv
bWV0cnlDb2xsZWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkQ4MTlCOUIx
ODYyNzVCMzAwMUYwM0QxIC8qIFZpZXdHZXN0dXJlR2VvbWV0cnlDb2xsZWN0b3IubWVzc2FnZXMu
aW4gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gVmlld0dlc3R1cmVHZW9tZXRyeUNvbGxlY3Rvci5t
ZXNzYWdlcy5pbjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTU2NjksNiArNTY3Myw4
IEBACiAJCQkJMkQxMjVDNUMxODU3RUEwNTAwM0JBM0NCIC8qIFZpZXdHZXN0dXJlQ29udHJvbGxl
ci5oICovLAogCQkJCTJEMTI1QzVEMTg1N0VBMDUwMDNCQTNDQiAvKiBWaWV3R2VzdHVyZUNvbnRy
b2xsZXIubW0gKi8sCiAJCQkJMkQxQjVENUExODU4NjU5OTAwNkM2NTk2IC8qIFZpZXdHZXN0dXJl
Q29udHJvbGxlci5tZXNzYWdlcy5pbiAqLywKKwkJCQkyRDZDRDExNzE4OTA1OEE1MDBFNUE0QTAg
LyogVmlld1NuYXBzaG90U3RvcmUuaCAqLywKKwkJCQkyRDZDRDExODE4OTA1OEE1MDBFNUE0QTAg
LyogVmlld1NuYXBzaG90U3RvcmUubW0gKi8sCiAJCQkJNzI4RTg2RUYxNzk1MTg4QzAwODc4NzlF
IC8qIFdlYkNvbG9yUGlja2VyTWFjLmggKi8sCiAJCQkJNzI4RTg2RjAxNzk1MTg4QzAwODc4NzlF
IC8qIFdlYkNvbG9yUGlja2VyTWFjLm1tICovLAogCQkJCTFBMUM2NDg2MTFGNDE1QjcwMDU1M0Mx
OSAvKiBXZWJDb250ZXh0TWFjLm1tICovLApAQCAtNjYzNyw2ICs2NjQzLDcgQEAKIAkJCQlCQzg1
N0ZFNjEyQjg0M0Q4MDBFREVCMkUgLyogV0tPcGVuUGFuZWxQYXJhbWV0ZXJzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlCQzFERkU4RjEyQjMxQ0E4MDA1REY3MzAgLyogV0tPcGVuUGFuZWxSZXN1bHRM
aXN0ZW5lci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNENTk3RDcxMTJCNTZEQzAwRUM4QzIzIC8q
IFdLUGFnZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMkQ2Q0QxMTkxODkwNThBNTAwRTVBNEEwIC8q
IFZpZXdTbmFwc2hvdFN0b3JlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzdCNjMzNzEyQTQ1QUJB
MDBEMTc0QTQgLyogV0tQYWdlR3JvdXAuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMkQwMjE5MTJB
QzQyNkMwMEU3MzJBMyAvKiBXS1BhZ2VMb2FkVHlwZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTkz
QkRFQjAxMTcxREQ3QUYwMEJGRUUxQiAvKiBXS1BhZ2VMb2FkVHlwZXNQcml2YXRlLmggaW4gSGVh
ZGVycyAqLywKQEAgLTc0NjgsNiArNzQ3NSw3IEBACiAJCQkJQkNFODFEOTgxMzFBRTAyMTAwMjQx
OTEwIC8qIERpY3Rpb25hcnlQb3B1cEluZm8uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE2N0VF
QTExNzAzNzdCRjAwNzY4MUNBIC8qIERpc2tDYWNoZU1vbml0b3IubW0gaW4gU291cmNlcyAqLywK
IAkJCQkyREE5NDQ4RjE4ODRFM0I1MDBFRDg2REIgLyogV0tHZW9sb2NhdGlvblByb3ZpZGVySU9T
Lm1tIGluIFNvdXJjZXMgKi8sCisJCQkJMkQ2Q0QxMUExODkwNThBNTAwRTVBNEEwIC8qIFZpZXdT
bmFwc2hvdFN0b3JlLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE4RThGMDcxNkIyMDkzNzAwRTkx
NDI5IC8qIERvd25sb2FkLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJENDdCNTZDMTgxMDcxNEUw
MDNBM0FFRSAvKiBSZW1vdGVMYXllckJhY2tpbmdTdG9yZS5tbSBpbiBTb3VyY2VzICovLAogCQkJ
CTUxOEU4RjA5MTZCMjA5MzcwMEU5MTQyOSAvKiBEb3dubG9hZEF1dGhlbnRpY2F0aW9uQ2xpZW50
LmNwcCBpbiBTb3VyY2VzICovLAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>222054</attachid>
            <date>2014-01-23 18:00:13 -0800</date>
            <delta_ts>2014-01-24 10:46:36 -0800</delta_ts>
            <desc>patch</desc>
            <filename>snapshotting.diff</filename>
            <type>text/plain</type>
            <size>30209</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA3Y2QwODg1Li43NWYyNDA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzUg
QEAKKzIwMTQtMDEtMjMgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CisK
KyAgICAgICAgV2ViS2l0MiBWaWV3IEdlc3R1cmVzIChTd2lwZSk6IEFkZCBhIHNpbXBsZSBjYWNo
ZSBvZiB2aWV3IHNuYXBzaG90cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTI3NDM4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgQWRkIGEgY2FjaGUgb2YgYml0bWFwIHNuYXBzaG90cyBvZiB0aGUgV0tWaWV3
LCB0YWtlbiB2aWEgT1MgWCdzIHdpbmRvdyBzZXJ2ZXIKKyAgICAgICAgc25hcHNob3R0aW5nIG1l
Y2hhbmlzbS4gRm9yIG5vdywgd2Ugc3RvcmUgYWxsIHNuYXBzaG90czsgcmVmaW5lbWVudHMgdG8g
dGhlCisgICAgICAgIGNhY2hpbmcgc3RyYXRlZ3kgKG9yIHJlYWxseSBoYXZpbmcgb25lIGF0IGFs
bCkgd2lsbCBjb21lIGluIGZ1dHVyZSBwYXRjaGVzLgorCisgICAgICAgIFNuYXBzaG90cyBhcmUg
c3RvcmVkIGluIGEgc2lkZSBtYXAsIHdpdGggYSBVVUlEIHRoYXQgYWxsb3dzIHJlZmVyZW5jZXMK
KyAgICAgICAgdG8gYmUgc3RvcmVkIGluc2lkZSBXZWJCYWNrRm9yd2FyZExpc3RJdGVtIChhbmQg
c2VyaWFsaXplZCBhbG9uZyB3aXRoCisgICAgICAgIHRoZSBiYWNrLWZvcndhcmQgbGlzdCB3aGVu
IGl0IGlzIGNvcGllZCkuCisKKyAgICAgICAgKiBTaGFyZWQvV2ViQmFja0ZvcndhcmRMaXN0SXRl
bS5oOgorICAgICAgICAoV2ViS2l0OjpXZWJCYWNrRm9yd2FyZExpc3RJdGVtOjpzZXRTbmFwc2hv
dFVVSUQpOgorICAgICAgICAoV2ViS2l0OjpXZWJCYWNrRm9yd2FyZExpc3RJdGVtOjpzbmFwc2hv
dFVVSUQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9jZi9XZWJCYWNrRm9yd2FyZExpc3RDRi5jcHA6
CisgICAgICAgIChXZWJLaXQ6OldlYkJhY2tGb3J3YXJkTGlzdDo6Y3JlYXRlQ0ZEaWN0aW9uYXJ5
UmVwcmVzZW50YXRpb24pOgorICAgICAgICAoV2ViS2l0OjpleHRyYWN0QmFja0ZvcndhcmRMaXN0
RW50cmllc0Zyb21BcnJheSk6CisgICAgICAgIFN0b3JlIGFuZCBzZXJpYWxpemUgYSBVVUlEIGFs
b25nIHdpdGggZWFjaCBiYWNrLWZvcndhcmQgbGlzdCBpdGVtIHdoaWNoCisgICAgICAgIGlkZW50
aWZpZXMgdGhhdCBpdGVtJ3MgdmlldyBzbmFwc2hvdCBpbiB0aGUgVmlld1NuYXBzaG90U3RvcmUu
CisKKyAgICAgICAgKiBVSVByb2Nlc3MvY2YvV2ViUGFnZVByb3h5Q0YuY3BwOgorICAgICAgICBC
dW1wIHRoZSBzZXNzaW9uIHN0YXRlIGRhdGEgdmVyc2lvbiwgYXMgd2UgY2hhbmdlZCB0aGUgV2Vi
QmFja0ZvcndhcmRMaXN0IGZvcm1hdC4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2Ev
V0tWaWV3UHJpdmF0ZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvbWFjL1BhZ2VDbGllbnRJ
bXBsLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9tYWMvUGFnZUNsaWVudEltcGwubW06Cisg
ICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjp0YWtlVmlld1NuYXBzaG90KToKKworICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbToKKyAgICAgICAgKC1bV0tWaWV3IF90
YWtlVmlld1NuYXBzaG90XSk6CisgICAgICAgIEFkZCBfdGFrZVZpZXdTbmFwc2hvdCBJUEksIHdo
aWNoIGlzIHVzZWQgYnkgVmlld1NuYXBzaG90U3RvcmUgdmlhIHRoZSBQYWdlQ2xpZW50CisgICAg
ICAgIHRvIHRha2UgYSBzbmFwc2hvdCBvZiB0aGUgdmlldy4KKworICAgICAgICAoLVtXS1ZpZXcg
c2F2ZUJhY2tGb3J3YXJkU25hcHNob3RGb3JDdXJyZW50SXRlbV0pOgorICAgICAgICBBZGQgc2F2
ZUJhY2tGb3J3YXJkU25hcHNob3RGb3JDdXJyZW50SXRlbSBTUEksIHdoaWNoIGNsaWVudHMgY291
bGQgcG90ZW50aWFsbHkKKyAgICAgICAgdXNlIHdoZW4gdGhleSBrbm93IHRoZXkncmUgYWJvdXQg
dG8gbWFuaXB1bGF0ZSB0aGUgdmlldyBoaWVyYXJjaHkgaW4gc3VjaCBhIHdheQorICAgICAgICB0
aGF0IHRoZXkgd2FudCB0aGUgY3VycmVudCBiYWNrLWZvcndhcmQgaXRlbSdzIHNuYXBzaG90IHRv
IGJlIHVwIHRvIGRhdGUuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXdJbnRl
cm5hbC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9QYWdlQ2xpZW50Lmg6CisgICAgICAgICogVUlQ
cm9jZXNzL1dlYlBhZ2VQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6
V2ViUGFnZVByb3h5KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpyZWNvcmROYXZp
Z2F0aW9uU25hcHNob3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmdvRm9yd2Fy
ZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6Z29CYWNrKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUGFnZVByb3h5Ojpnb1RvQmFja0ZvcndhcmRJdGVtKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUGFnZVByb3h5OjpkaWRTdGFydFByb3Zpc2lvbmFsTG9hZEZvckZyYW1lKToKKyAgICAg
ICAgVXBkYXRlIHRoZSBjdXJyZW50IGJhY2stZm9yd2FyZCBpdGVtJ3Mgc25hcHNob3QgaW1tZWRp
YXRlbHkgYmVmb3JlIG5hdmlnYXRpbmcuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVBy
b3h5Lmg6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2hvdWxkUmVjb3JkTmF2aWdh
dGlvblNuYXBzaG90cyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2V0U2hvdWxk
UmVjb3JkTmF2aWdhdGlvblNuYXBzaG90cyk6CisgICAgICAgIEV4cG9zZSB0aGUgYWJpbGl0eSB0
byBlbmFibGUgdGFraW5nIHZpZXcgc25hcHNob3RzIG9uIGV2ZXJ5IG5hdmlnYXRpb24uCisgICAg
ICAgIFRoaXMgaXMgb2ZmIGJ5IGRlZmF1bHQsIHNvIHdlIHdvbid0IGJlIHRha2luZyBhbnkgc25h
cHNob3RzIHlldC4KKworICAgICAgICAqIFVJUHJvY2Vzcy9tYWMvVmlld1NuYXBzaG90U3RvcmUu
aDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlZpZXdTbmFwc2hvdFN0b3JlOjpkaXNhYmxlU25h
cHNob3R0aW5nKToKKyAgICAgICAgKFdlYktpdDo6Vmlld1NuYXBzaG90U3RvcmU6OmVuYWJsZVNu
YXBzaG90dGluZyk6CisgICAgICAgICogVUlQcm9jZXNzL21hYy9WaWV3U25hcHNob3RTdG9yZS5t
bTogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlZpZXdTbmFwc2hvdFN0b3JlOjpWaWV3U25hcHNo
b3RTdG9yZSk6CisgICAgICAgIChXZWJLaXQ6OlZpZXdTbmFwc2hvdFN0b3JlOjp+Vmlld1NuYXBz
aG90U3RvcmUpOgorICAgICAgICAoV2ViS2l0OjpWaWV3U25hcHNob3RTdG9yZTo6c2hhcmVkKToK
KyAgICAgICAgKFdlYktpdDo6Vmlld1NuYXBzaG90U3RvcmU6OnJlY29yZFNuYXBzaG90KToKKyAg
ICAgICAgKFdlYktpdDo6Vmlld1NuYXBzaG90U3RvcmU6OnNuYXBzaG90QW5kUmVuZGVyVHJlZVNp
emUpOgorICAgICAgICAqIFVJUHJvY2Vzcy9tYWMvV2ViUGFnZVByb3h5TWFjLm1tOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnRha2VWaWV3U25hcHNob3QpOgorICAgICAgICAqIFdl
YktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKwogMjAxNC0wMS0yMiAgQ2FybG9zIEdh
cmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dMSUJdIFVzZSBH
VW5pcXVlUHRyIGluc3RlYWQgb2YgR093blB0cgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
U2hhcmVkL1dlYkJhY2tGb3J3YXJkTGlzdEl0ZW0uaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9X
ZWJCYWNrRm9yd2FyZExpc3RJdGVtLmgKaW5kZXggYjEzOWZhMC4uNWFiYzk1YiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkJhY2tGb3J3YXJkTGlzdEl0ZW0uaAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViQmFja0ZvcndhcmRMaXN0SXRlbS5oCkBAIC02MCw2ICs2
MCw5IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEJhY2tGb3J3YXJkRGF0YShjb25zdCB1aW50OF90
KiBidWZmZXIsIHNpemVfdCBzaXplKTsKICAgICBjb25zdCBWZWN0b3I8dWludDhfdD4mIGJhY2tG
b3J3YXJkRGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fYmFja0ZvcndhcmREYXRhOyB9CiAKKyAgICB2
b2lkIHNldFNuYXBzaG90VVVJRChjb25zdCBTdHJpbmcmIHV1aWQpIHsgbV9zbmFwc2hvdFVVSUQg
PSB1dWlkOyB9CisgICAgY29uc3QgU3RyaW5nJiBzbmFwc2hvdFVVSUQoKSBjb25zdCB7IHJldHVy
biBtX3NuYXBzaG90VVVJRDsgfQorCiAgICAgdm9pZCBlbmNvZGUoSVBDOjpBcmd1bWVudEVuY29k
ZXImKSBjb25zdDsKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJCYWNrRm9yd2FyZExpc3RJdGVt
PiBkZWNvZGUoSVBDOjpBcmd1bWVudERlY29kZXImKTsKIApAQCAtNzMsNiArNzYsNyBAQCBwcml2
YXRlOgogICAgIFN0cmluZyBtX3RpdGxlOwogICAgIHVpbnQ2NF90IG1faXRlbUlEOwogICAgIFZl
Y3Rvcjx1aW50OF90PiBtX2JhY2tGb3J3YXJkRGF0YTsKKyAgICBTdHJpbmcgbV9zbmFwc2hvdFVV
SUQ7CiB9OwogCiB0eXBlZGVmIFZlY3RvcjxSZWZQdHI8V2ViQmFja0ZvcndhcmRMaXN0SXRlbT4+
IEJhY2tGb3J3YXJkTGlzdEl0ZW1WZWN0b3I7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL0NvY29hL1dLVmlld1ByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvQ29jb2EvV0tWaWV3UHJpdmF0ZS5oCmluZGV4IDFkZGY0OWYuLjA5ZDQxZWMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tWaWV3UHJpdmF0
ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tWaWV3UHJpdmF0
ZS5oCkBAIC04OSw2ICs4OSw4IEBACiAKIC0gKHZvaWQpc2V0TWFnbmlmaWNhdGlvbjooZG91Ymxl
KW1hZ25pZmljYXRpb24gY2VudGVyZWRBdFBvaW50OihOU1BvaW50KXBvaW50OwogCistICh2b2lk
KXNhdmVCYWNrRm9yd2FyZFNuYXBzaG90Rm9yQ3VycmVudEl0ZW07CisKICNlbmRpZgogCiBAZW5k
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9QYWdlQ2xpZW50
SW1wbC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvUGFnZUNsaWVudEltcGwu
aAppbmRleCBjMTYyNjlmLi5jMzRlMGQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL21hYy9QYWdlQ2xpZW50SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvbWFjL1BhZ2VDbGllbnRJbXBsLmgKQEAgLTExMyw2ICsxMTMsOCBAQCBwcml2YXRl
OgogICAgIHZpcnR1YWwgdm9pZCBleGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKTsKICAg
ICB2aXJ0dWFsIHZvaWQgdXBkYXRlQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoY29uc3QgTGF5
ZXJUcmVlQ29udGV4dCYpOwogCisgICAgdmlydHVhbCBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gdGFr
ZVZpZXdTbmFwc2hvdCgpIG92ZXJyaWRlOworCiAgICAgdmlydHVhbCB2b2lkIGFjY2Vzc2liaWxp
dHlXZWJQcm9jZXNzVG9rZW5SZWNlaXZlZChjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmKTsKIAog
ICAgIHZpcnR1YWwgdm9pZCBwbHVnaW5Gb2N1c09yV2luZG93Rm9jdXNDaGFuZ2VkKHVpbnQ2NF90
IHBsdWdpbkNvbXBsZXhUZXh0SW5wdXRJZGVudGlmaWVyLCBib29sIHBsdWdpbkhhc0ZvY3VzQW5k
V2luZG93SGFzRm9jdXMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9tYWMvUGFnZUNsaWVudEltcGwubW0gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21h
Yy9QYWdlQ2xpZW50SW1wbC5tbQppbmRleCA5ZDNiMThiLi44N2VhODAzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9QYWdlQ2xpZW50SW1wbC5tbQorKysgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9QYWdlQ2xpZW50SW1wbC5tbQpAQCAtNDM0
LDYgKzQzNCwxMSBAQCB2b2lkIFBhZ2VDbGllbnRJbXBsOjpzZXRBY2NlbGVyYXRlZENvbXBvc2l0
aW5nUm9vdExheWVyKENBTGF5ZXIgKnJvb3RMYXllcikKICAgICBbbV93a1ZpZXcgX3NldEFjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmdNb2RlUm9vdExheWVyOnJvb3RMYXllcl07CiB9CiAKK1JldGFpblB0
cjxDR0ltYWdlUmVmPiBQYWdlQ2xpZW50SW1wbDo6dGFrZVZpZXdTbmFwc2hvdCgpCit7CisgICAg
cmV0dXJuIFttX3drVmlldyBfdGFrZVZpZXdTbmFwc2hvdF07Cit9CisKIHZvaWQgUGFnZUNsaWVu
dEltcGw6OnBsdWdpbkZvY3VzT3JXaW5kb3dGb2N1c0NoYW5nZWQodWludDY0X3QgcGx1Z2luQ29t
cGxleFRleHRJbnB1dElkZW50aWZpZXIsIGJvb2wgcGx1Z2luSGFzRm9jdXNBbmRXaW5kb3dIYXNG
b2N1cykKIHsKICAgICBbbV93a1ZpZXcgX3BsdWdpbkZvY3VzT3JXaW5kb3dGb2N1c0NoYW5nZWQ6
cGx1Z2luSGFzRm9jdXNBbmRXaW5kb3dIYXNGb2N1cyBwbHVnaW5Db21wbGV4VGV4dElucHV0SWRl
bnRpZmllcjpwbHVnaW5Db21wbGV4VGV4dElucHV0SWRlbnRpZmllcl07CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW0gYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW0KaW5kZXggZDIwMzczNy4uMDU4YTI2OSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3Lm1tCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbQpAQCAtNTAsNiArNTAs
NyBAQAogI2ltcG9ydCAiVGV4dENoZWNrZXJTdGF0ZS5oIgogI2ltcG9ydCAiVGlsZWRDb3JlQW5p
bWF0aW9uRHJhd2luZ0FyZWFQcm94eS5oIgogI2ltcG9ydCAiVmlld0dlc3R1cmVDb250cm9sbGVy
LmgiCisjaW1wb3J0ICJWaWV3U25hcHNob3RTdG9yZS5oIgogI2ltcG9ydCAiV0tBUElDYXN0Lmgi
CiAjaW1wb3J0ICJXS0Z1bGxTY3JlZW5XaW5kb3dDb250cm9sbGVyLmgiCiAjaW1wb3J0ICJXS1By
aW50aW5nVmlldy5oIgpAQCAtNTcsNiArNTgsNyBAQAogI2ltcG9ydCAiV0tUZXh0SW5wdXRXaW5k
b3dDb250cm9sbGVyLmgiCiAjaW1wb3J0ICJXS1ZpZXdJbnRlcm5hbC5oIgogI2ltcG9ydCAiV0tW
aWV3UHJpdmF0ZS5oIgorI2ltcG9ydCAiV2ViQmFja0ZvcndhcmRMaXN0LmgiCiAjaW1wb3J0ICJX
ZWJDb250ZXh0LmgiCiAjaW1wb3J0ICJXZWJFdmVudEZhY3RvcnkuaCIKICNpbXBvcnQgIldlYktp
dDJJbml0aWFsaXplLmgiCkBAIC0xMTMsNiArMTE1LDE3IEBACiAtICh2b2lkKV9tYXNrUm91bmRl
ZEJvdHRvbUNvcm5lcnM6KE5TUmVjdCljbGlwUmVjdDsKIEBlbmQKIAorI2lmIGRlZmluZWQoX19o
YXNfaW5jbHVkZSkgJiYgX19oYXNfaW5jbHVkZSg8Q29yZUdyYXBoaWNzL0NvcmVHcmFwaGljc1By
aXZhdGUuaD4pCisjaW1wb3J0IDxDb3JlR3JhcGhpY3MvQ29yZUdyYXBoaWNzUHJpdmF0ZS5oPgor
I2VuZGlmCisKK2V4dGVybiAiQyIgewordHlwZWRlZiB1aW50MzJfdCBDR1NDb25uZWN0aW9uSUQ7
Cit0eXBlZGVmIHVpbnQzMl90IENHU1dpbmRvd0lEOworQ0dTQ29ubmVjdGlvbklEIENHU01haW5D
b25uZWN0aW9uSUQodm9pZCk7CitDR0Vycm9yIENHU0dldFNjcmVlblJlY3RGb3JXaW5kb3coQ0dT
Q29ubmVjdGlvbklEIGNpZCwgQ0dTV2luZG93SUQgd2lkLCBDR1JlY3QgKnJlY3QpOworfTsKKwog
dXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCkBAIC0y
NTE1LDYgKzI1MjgsMjYgQEAgc3RhdGljIE5TU3RyaW5nICogY29uc3QgYmFja2luZ1Byb3BlcnR5
T2xkU2NhbGVGYWN0b3JLZXkgPSBAIk5TQmFja2luZ1Byb3BlcnR5T2wKICAgICBbQ0FUcmFuc2Fj
dGlvbiBjb21taXRdOwogfQogCistIChSZXRhaW5QdHI8Q0dJbWFnZVJlZj4pX3Rha2VWaWV3U25h
cHNob3QKK3sKKyAgICBOU1dpbmRvdyAqd2luZG93ID0gc2VsZi53aW5kb3c7CisKKyAgICBpZiAo
IVt3aW5kb3cgd2luZG93TnVtYmVyXSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBS
ZXRhaW5QdHI8Q0dJbWFnZVJlZj4gd2luZG93U25hcHNob3RJbWFnZSA9IGFkb3B0Q0YoQ0dXaW5k
b3dMaXN0Q3JlYXRlSW1hZ2UoQ0dSZWN0TnVsbCwga0NHV2luZG93TGlzdE9wdGlvbkluY2x1ZGlu
Z1dpbmRvdywgW3dpbmRvdyB3aW5kb3dOdW1iZXJdLCBrQ0dXaW5kb3dJbWFnZUJvdW5kc0lnbm9y
ZUZyYW1pbmcgfCBrQ0dXaW5kb3dJbWFnZVNob3VsZEJlT3BhcXVlKSk7CisKKyAgICBOU1JlY3Qg
d2luZG93Q2FwdHVyZVJlY3QgPSBbc2VsZiBjb252ZXJ0UmVjdDpzZWxmLmJvdW5kcyB0b1ZpZXc6
bmlsXTsKKyAgICBOU1JlY3Qgd2luZG93Q2FwdHVyZVNjcmVlblJlY3QgPSBbd2luZG93IGNvbnZl
cnRSZWN0VG9TY3JlZW46d2luZG93Q2FwdHVyZVJlY3RdOworICAgIENHUmVjdCB3aW5kb3dTY3Jl
ZW5SZWN0OworICAgIENHU0dldFNjcmVlblJlY3RGb3JXaW5kb3coQ0dTTWFpbkNvbm5lY3Rpb25J
RCgpLCAoQ0dTV2luZG93SUQpW3dpbmRvdyB3aW5kb3dOdW1iZXJdLCAmd2luZG93U2NyZWVuUmVj
dCk7CisKKyAgICBOU1JlY3QgY3JvcHBlZEltYWdlUmVjdCA9IHdpbmRvd0NhcHR1cmVSZWN0Owor
ICAgIGNyb3BwZWRJbWFnZVJlY3Qub3JpZ2luLnkgPSB3aW5kb3dTY3JlZW5SZWN0LnNpemUuaGVp
Z2h0IC0gd2luZG93Q2FwdHVyZVNjcmVlblJlY3Quc2l6ZS5oZWlnaHQgLSBOU01pblkod2luZG93
Q2FwdHVyZVJlY3QpOworCisgICAgcmV0dXJuIGFkb3B0Q0YoQ0dJbWFnZUNyZWF0ZVdpdGhJbWFn
ZUluUmVjdCh3aW5kb3dTbmFwc2hvdEltYWdlLmdldCgpLCBOU1JlY3RUb0NHUmVjdChbd2luZG93
IGNvbnZlcnRSZWN0VG9CYWNraW5nOmNyb3BwZWRJbWFnZVJlY3RdKSkpOworfQorCiAtICh2b2lk
KV9zZXRBY2Nlc3NpYmlsaXR5V2ViUHJvY2Vzc1Rva2VuOihOU0RhdGEgKilkYXRhCiB7CiAgICAg
X2RhdGEtPl9yZW1vdGVBY2Nlc3NpYmlsaXR5Q2hpbGQgPSBXS0FYUmVtb3RlRWxlbWVudEZvclRv
a2VuKGRhdGEpOwpAQCAtMjgzMSw2ICsyODY0LDExIEBAIHN0YXRpYyBOU1N0cmluZyAqcGF0aFdp
dGhVbmlxdWVGaWxlbmFtZUZvclBhdGgoTlNTdHJpbmcgKnBhdGgpCiAKIEBpbXBsZW1lbnRhdGlv
biBXS1ZpZXcgKFByaXZhdGUpCiAKKy0gKHZvaWQpc2F2ZUJhY2tGb3J3YXJkU25hcHNob3RGb3JD
dXJyZW50SXRlbQoreworICAgIF9kYXRhLT5fcGFnZS0+cmVjb3JkTmF2aWdhdGlvblNuYXBzaG90
KCk7Cit9CisKIC0gKHZvaWQpX3JlZ2lzdGVyRHJhZ2dlZFR5cGVzCiB7CiAgICAgTlNNdXRhYmxl
U2V0ICp0eXBlcyA9IFtbTlNNdXRhYmxlU2V0IGFsbG9jXSBpbml0V2l0aEFycmF5OlBhc3RlYm9h
cmRUeXBlczo6Zm9yRWRpdGluZygpXTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvbWFjL1dLVmlld0ludGVybmFsLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL21hYy9XS1ZpZXdJbnRlcm5hbC5oCmluZGV4IDQ4ZTZiOTMuLjFiYzAyOGQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlld0ludGVybmFsLmgKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3SW50ZXJuYWwuaApAQCAt
NzAsNiArNzAsOCBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogLSAodm9pZClfc2V0QWNjZWxlcmF0
ZWRDb21wb3NpdGluZ01vZGVSb290TGF5ZXI6KENBTGF5ZXIgKilyb290TGF5ZXI7CiAKKy0gKFJl
dGFpblB0cjxDR0ltYWdlUmVmPilfdGFrZVZpZXdTbmFwc2hvdDsKKwogLSAodm9pZClfc2V0QWNj
ZXNzaWJpbGl0eVdlYlByb2Nlc3NUb2tlbjooTlNEYXRhICopZGF0YTsKIAogLSAodm9pZClfcGx1
Z2luRm9jdXNPcldpbmRvd0ZvY3VzQ2hhbmdlZDooQk9PTClwbHVnaW5IYXNGb2N1c0FuZFdpbmRv
d0hhc0ZvY3VzIHBsdWdpbkNvbXBsZXhUZXh0SW5wdXRJZGVudGlmaWVyOih1aW50NjRfdClwbHVn
aW5Db21wbGV4VGV4dElucHV0SWRlbnRpZmllcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGFnZUNs
aWVudC5oCmluZGV4IGFjNzM0OTkuLjhmMTY2ZDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1Bh
Z2VDbGllbnQuaApAQCAtMTcyLDYgKzE3Miw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQg
bm90aWZ5SW5wdXRDb250ZXh0QWJvdXREaXNjYXJkZWRDb21wb3NpdGlvbigpID0gMDsKICAgICB2
aXJ0dWFsIHZvaWQgbWFrZUZpcnN0UmVzcG9uZGVyKCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBz
ZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nUm9vdExheWVyKENBTGF5ZXIgKikgPSAwOworICAgIHZp
cnR1YWwgUmV0YWluUHRyPENHSW1hZ2VSZWY+IHRha2VWaWV3U25hcHNob3QoKSA9IDA7CiAjZW5k
aWYKIAogI2lmIFVTRShBUFBLSVQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvV2ViUGFnZVByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJv
eHkuY3BwCmluZGV4IDZkMTFmZDEuLmI4YWVmOTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9XZWJQYWdlUHJveHkuY3BwCkBAIC0xMjIsNiArMTIyLDEwIEBACiAjaW5jbHVkZSAiTmV0d29y
a1Byb2Nlc3NNZXNzYWdlcy5oIgogI2VuZGlmCiAKKyNpZiBQTEFURk9STShNQUMpCisjaW5jbHVk
ZSAiVmlld1NuYXBzaG90U3RvcmUuaCIKKyNlbmRpZgorCiAvLyBUaGlzIGNvbnRyb2xzIHdoYXQg
c3RyYXRlZ3kgd2UgdXNlIGZvciBtb3VzZSB3aGVlbCBjb2FsZXNjaW5nLgogI2RlZmluZSBNRVJH
RV9XSEVFTF9FVkVOVFMgMQogCkBAIC0zMDUsNiArMzA5LDcgQEAgV2ViUGFnZVByb3h5OjpXZWJQ
YWdlUHJveHkoUGFnZUNsaWVudCYgcGFnZUNsaWVudCwgV2ViUHJvY2Vzc1Byb3h5JiBwcm9jZXNz
LCBXZWIKICAgICAsIG1fcnViYmVyQmFuZHNBdEJvdHRvbSh0cnVlKQogICAgICwgbV9iYWNrZ3Jv
dW5kRXh0ZW5kc0JleW9uZFBhZ2UoZmFsc2UpCiAgICAgLCBtX21haW5GcmFtZUluVmlld1NvdXJj
ZU1vZGUoZmFsc2UpCisgICAgLCBtX3Nob3VsZFJlY29yZE5hdmlnYXRpb25TbmFwc2hvdHMoZmFs
c2UpCiAgICAgLCBtX3BhZ2VDb3VudCgwKQogICAgICwgbV9yZW5kZXJUcmVlU2l6ZSgwKQogICAg
ICwgbV9zaG91bGRTZW5kRXZlbnRzU3luY2hyb25vdXNseShmYWxzZSkKQEAgLTc1Myw2ICs3NTgs
MTYgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnJlbG9hZChib29sIHJlbG9hZEZyb21PcmlnaW4pCiAg
ICAgbV9wcm9jZXNzLT5yZXNwb25zaXZlbmVzc1RpbWVyKCktPnN0YXJ0KCk7CiB9CiAKK3ZvaWQg
V2ViUGFnZVByb3h5OjpyZWNvcmROYXZpZ2F0aW9uU25hcHNob3QoKQoreworICAgIGlmICghbV9z
aG91bGRSZWNvcmROYXZpZ2F0aW9uU25hcHNob3RzKQorICAgICAgICByZXR1cm47CisKKyNpZiBQ
TEFURk9STShNQUMpCisgICAgVmlld1NuYXBzaG90U3RvcmU6OnNoYXJlZCgpLnJlY29yZFNuYXBz
aG90KCp0aGlzKTsKKyNlbmRpZgorfQorCiB2b2lkIFdlYlBhZ2VQcm94eTo6Z29Gb3J3YXJkKCkK
IHsKICAgICBpZiAoaXNWYWxpZCgpICYmICFjYW5Hb0ZvcndhcmQoKSkKQEAgLTc2Miw2ICs3Nzcs
OCBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6Z29Gb3J3YXJkKCkKICAgICBpZiAoIWZvcndhcmRJdGVt
KQogICAgICAgICByZXR1cm47CiAKKyAgICByZWNvcmROYXZpZ2F0aW9uU25hcHNob3QoKTsKKwog
ICAgIGF1dG8gdHJhbnNhY3Rpb24gPSBtX3BhZ2VMb2FkU3RhdGUudHJhbnNhY3Rpb24oKTsKIAog
ICAgIG1fcGFnZUxvYWRTdGF0ZS5zZXRQZW5kaW5nQVBJUmVxdWVzdFVSTCh0cmFuc2FjdGlvbiwg
Zm9yd2FyZEl0ZW0tPnVybCgpKTsKQEAgLTc4OSw2ICs4MDYsOCBAQCB2b2lkIFdlYlBhZ2VQcm94
eTo6Z29CYWNrKCkKICAgICBpZiAoIWJhY2tJdGVtKQogICAgICAgICByZXR1cm47CiAKKyAgICBy
ZWNvcmROYXZpZ2F0aW9uU25hcHNob3QoKTsKKwogICAgIGF1dG8gdHJhbnNhY3Rpb24gPSBtX3Bh
Z2VMb2FkU3RhdGUudHJhbnNhY3Rpb24oKTsKIAogICAgIG1fcGFnZUxvYWRTdGF0ZS5zZXRQZW5k
aW5nQVBJUmVxdWVzdFVSTCh0cmFuc2FjdGlvbiwgYmFja0l0ZW0tPnVybCgpKTsKQEAgLTgxMyw2
ICs4MzIsOCBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6Z29Ub0JhY2tGb3J3YXJkSXRlbShXZWJCYWNr
Rm9yd2FyZExpc3RJdGVtKiBpdGVtKQogICAgICAgICByZWF0dGFjaFRvV2ViUHJvY2Vzc1dpdGhJ
dGVtKGl0ZW0pOwogICAgICAgICByZXR1cm47CiAgICAgfQorCisgICAgcmVjb3JkTmF2aWdhdGlv
blNuYXBzaG90KCk7CiAgICAgCiAgICAgYXV0byB0cmFuc2FjdGlvbiA9IG1fcGFnZUxvYWRTdGF0
ZS50cmFuc2FjdGlvbigpOwogCkBAIC0yMTE1LDggKzIxMzYsMTAgQEAgdm9pZCBXZWJQYWdlUHJv
eHk6OmRpZFN0YXJ0UHJvdmlzaW9uYWxMb2FkRm9yRnJhbWUodWludDY0X3QgZnJhbWVJRCwgY29u
c3QgU3RyaW4KICAgICBNRVNTQUdFX0NIRUNLKGZyYW1lKTsKICAgICBNRVNTQUdFX0NIRUNLX1VS
TCh1cmwpOwogCi0gICAgaWYgKGZyYW1lLT5pc01haW5GcmFtZSgpKQorICAgIGlmIChmcmFtZS0+
aXNNYWluRnJhbWUoKSkgeworICAgICAgICByZWNvcmROYXZpZ2F0aW9uU25hcHNob3QoKTsKICAg
ICAgICAgbV9wYWdlTG9hZFN0YXRlLmRpZFN0YXJ0UHJvdmlzaW9uYWxMb2FkKHRyYW5zYWN0aW9u
LCB1cmwsIHVucmVhY2hhYmxlVVJMKTsKKyAgICB9CiAKICAgICBmcmFtZS0+c2V0VW5yZWFjaGFi
bGVVUkwodW5yZWFjaGFibGVVUkwpOwogICAgIGZyYW1lLT5kaWRTdGFydFByb3Zpc2lvbmFsTG9h
ZCh1cmwpOwpAQCAtNDM3MCw2ICs0MzkzLDExIEBAIHZvaWQgV2ViUGFnZVByb3h5OjpkaWN0YXRp
b25BbHRlcm5hdGl2ZXModWludDY0X3QgZGljdGF0aW9uQ29udGV4dCwgVmVjdG9yPFN0cmluCiB9
CiAjZW5kaWYKIAorUmV0YWluUHRyPENHSW1hZ2VSZWY+IFdlYlBhZ2VQcm94eTo6dGFrZVZpZXdT
bmFwc2hvdCgpCit7CisgICAgcmV0dXJuIG1fcGFnZUNsaWVudC50YWtlVmlld1NuYXBzaG90KCk7
Cit9CisKICNlbmRpZiAvLyBQTEFURk9STShNQUMpCiAKICNpZiBVU0UoU09VUCkgJiYgIUVOQUJM
RShDVVNUT01fUFJPVE9DT0xTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L1dlYlBhZ2VQcm94eS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5o
CmluZGV4IGZjYTIxMDIuLmYwMGQxNTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9XZWJQYWdlUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFn
ZVByb3h5LmgKQEAgLTg1OCw3ICs4NTgsMTUgQEAgcHVibGljOgogICAgICAgICAKICAgICB2b2lk
IHNldFNjcm9sbFBpbm5pbmdCZWhhdmlvcihXZWJDb3JlOjpTY3JvbGxQaW5uaW5nQmVoYXZpb3Ip
OwogICAgIFdlYkNvcmU6OlNjcm9sbFBpbm5pbmdCZWhhdmlvciBzY3JvbGxQaW5uaW5nQmVoYXZp
b3IoKSB7IHJldHVybiBtX3Njcm9sbFBpbm5pbmdCZWhhdmlvcjsgfQotICAgICAgICAKKworICAg
IGJvb2wgc2hvdWxkUmVjb3JkTmF2aWdhdGlvblNuYXBzaG90cygpIGNvbnN0IHsgcmV0dXJuIG1f
c2hvdWxkUmVjb3JkTmF2aWdhdGlvblNuYXBzaG90czsgfQorICAgIHZvaWQgc2V0U2hvdWxkUmVj
b3JkTmF2aWdhdGlvblNuYXBzaG90cyhib29sIHNob3VsZFJlY29yZFNuYXBzaG90cykgeyBtX3No
b3VsZFJlY29yZE5hdmlnYXRpb25TbmFwc2hvdHMgPSBzaG91bGRSZWNvcmRTbmFwc2hvdHM7IH0K
KyAgICB2b2lkIHJlY29yZE5hdmlnYXRpb25TbmFwc2hvdCgpOworCisjaWYgUExBVEZPUk0oTUFD
KQorICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiB0YWtlVmlld1NuYXBzaG90KCk7CisjZW5kaWYK
KwogcHJpdmF0ZToKICAgICBXZWJQYWdlUHJveHkoUGFnZUNsaWVudCYsIFdlYlByb2Nlc3NQcm94
eSYsIFdlYlBhZ2VHcm91cCYsIEFQSTo6U2Vzc2lvbiYsIHVpbnQ2NF90IHBhZ2VJRCk7CiAgICAg
dm9pZCBwbGF0Zm9ybUluaXRpYWxpemUoKTsKQEAgLTEzNTksNyArMTM2Nyw5IEBAIHByaXZhdGU6
CiAgICAgYm9vbCBtX2JhY2tncm91bmRFeHRlbmRzQmV5b25kUGFnZTsKIAogICAgIGJvb2wgbV9t
YWluRnJhbWVJblZpZXdTb3VyY2VNb2RlOwotICAgICAgICAKKworICAgIGJvb2wgbV9zaG91bGRS
ZWNvcmROYXZpZ2F0aW9uU25hcHNob3RzOworCiAgICAgdW5zaWduZWQgbV9wYWdlQ291bnQ7CiAK
ICAgICBXZWJDb3JlOjpJbnRSZWN0IG1fdmlzaWJsZVNjcm9sbGVyVGh1bWJSZWN0OwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2NmL1dlYkJhY2tGb3J3YXJkTGlzdENGLmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9jZi9XZWJCYWNrRm9yd2FyZExpc3RDRi5jcHAK
aW5kZXggMDhhNDZlMi4uZWQyMjExNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL2NmL1dlYkJhY2tGb3J3YXJkTGlzdENGLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvY2YvV2ViQmFja0ZvcndhcmRMaXN0Q0YuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMCwgMjAxMSwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEsIDIwMTIsIDIwMTQgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC01OCw2ICs1OCw3IEBAIHN0YXRpYyBDRlN0cmluZ1JlZiBzZXNzaW9uSGlzdG9yeUVudHJ5VGl0
bGVLZXkgPSBDRlNUUigiU2Vzc2lvbkhpc3RvcnlFbnRyeVRpdGxlCiBzdGF0aWMgQ0ZTdHJpbmdS
ZWYgc2Vzc2lvbkhpc3RvcnlFbnRyeVVSTEtleSA9IENGU1RSKCJTZXNzaW9uSGlzdG9yeUVudHJ5
VVJMIik7CiBzdGF0aWMgQ0ZTdHJpbmdSZWYgc2Vzc2lvbkhpc3RvcnlFbnRyeU9yaWdpbmFsVVJM
S2V5ID0gQ0ZTVFIoIlNlc3Npb25IaXN0b3J5RW50cnlPcmlnaW5hbFVSTCIpOwogc3RhdGljIENG
U3RyaW5nUmVmIHNlc3Npb25IaXN0b3J5RW50cnlEYXRhS2V5ID0gQ0ZTVFIoIlNlc3Npb25IaXN0
b3J5RW50cnlEYXRhIik7CitzdGF0aWMgQ0ZTdHJpbmdSZWYgc2Vzc2lvbkhpc3RvcnlFbnRyeVNu
YXBzaG90VVVJREtleSA9IENGU1RSKCJTZXNzaW9uSGlzdG9yeUVudHJ5U25hcHNob3RVVUlEIik7
CiAKIHN0YXRpYyBib29sIGV4dHJhY3RCYWNrRm9yd2FyZExpc3RFbnRyaWVzRnJvbUFycmF5KENG
QXJyYXlSZWYsIEJhY2tGb3J3YXJkTGlzdEl0ZW1WZWN0b3ImKTsKIApAQCAtMTA0LDE1ICsxMDUs
MTYgQEAgQ0ZEaWN0aW9uYXJ5UmVmIFdlYkJhY2tGb3J3YXJkTGlzdDo6Y3JlYXRlQ0ZEaWN0aW9u
YXJ5UmVwcmVzZW50YXRpb24oV2ViUGFnZVByb3gKICAgICAgICAgUmV0YWluUHRyPENGU3RyaW5n
UmVmPiB1cmwgPSBtX2VudHJpZXNbaV0tPnVybCgpLmNyZWF0ZUNGU3RyaW5nKCk7CiAgICAgICAg
IFJldGFpblB0cjxDRlN0cmluZ1JlZj4gdGl0bGUgPSBtX2VudHJpZXNbaV0tPnRpdGxlKCkuY3Jl
YXRlQ0ZTdHJpbmcoKTsKICAgICAgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBvcmlnaW5hbFVS
TCA9IG1fZW50cmllc1tpXS0+b3JpZ2luYWxVUkwoKS5jcmVhdGVDRlN0cmluZygpOworICAgICAg
ICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHV1aWQgPSBtX2VudHJpZXNbaV0tPnNuYXBzaG90VVVJ
RCgpLmNyZWF0ZUNGU3RyaW5nKCk7CiAKICAgICAgICAgLy8gRklYTUU6IFRoaXMgdXNlcyB0aGUg
SVBDIGRhdGEgZW5jb2RpbmcgZm9ybWF0LCB3aGljaCBtZWFucyB0aGF0IHdoZW5ldmVyIHdlIGNo
YW5nZSB0aGUgSVBDIGVuY29kaW5nIHdlIG5lZWQgdG8gYnVtcCB0aGUgQ3VycmVudFNlc3Npb25T
dGF0ZURhdGFWZXJzaW9uCiAgICAgICAgIC8vIGNvbnN0YW50IGluIFdlYlBhZ2VQcm94eUNGLmNw
cC4gVGhlIElQQyBkYXRhIGZvcm1hdCBpcyBtZWFudCB0byBiZSBhbiBpbXBsZW1lbnRhdGlvbiBk
ZXRhaWwsIGFuZCBub3Qgc29tZXRoaW5nIHRoYXQgc2hvdWxkIGJlIHdyaXR0ZW4gdG8gZGlzay4K
ICAgICAgICAgUmV0YWluUHRyPENGRGF0YVJlZj4gZW50cnlEYXRhID0gYWRvcHRDRihDRkRhdGFD
cmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgbV9lbnRyaWVzW2ldLT5iYWNrRm9yd2FyZERhdGEo
KS5kYXRhKCksIG1fZW50cmllc1tpXS0+YmFja0ZvcndhcmREYXRhKCkuc2l6ZSgpKSk7Ci0gICAg
ICAgIAotICAgICAgICBjb25zdCB2b2lkKiBrZXlzWzRdID0geyBzZXNzaW9uSGlzdG9yeUVudHJ5
VVJMS2V5LCBzZXNzaW9uSGlzdG9yeUVudHJ5VGl0bGVLZXksIHNlc3Npb25IaXN0b3J5RW50cnlP
cmlnaW5hbFVSTEtleSwgc2Vzc2lvbkhpc3RvcnlFbnRyeURhdGFLZXkgfTsKLSAgICAgICAgY29u
c3Qgdm9pZCogdmFsdWVzWzRdID0geyB1cmwuZ2V0KCksIHRpdGxlLmdldCgpLCBvcmlnaW5hbFVS
TC5nZXQoKSwgZW50cnlEYXRhLmdldCgpIH07CiAKLSAgICAgICAgUmV0YWluUHRyPENGRGljdGlv
bmFyeVJlZj4gZW50cnlEaWN0aW9uYXJ5ID0gYWRvcHRDRihDRkRpY3Rpb25hcnlDcmVhdGUoMCwg
a2V5cywgdmFsdWVzLCA0LCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBl
RGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7CisgICAgICAgIGNvbnN0IHZvaWQqIGtleXNbNV0g
PSB7IHNlc3Npb25IaXN0b3J5RW50cnlVUkxLZXksIHNlc3Npb25IaXN0b3J5RW50cnlUaXRsZUtl
eSwgc2Vzc2lvbkhpc3RvcnlFbnRyeU9yaWdpbmFsVVJMS2V5LCBzZXNzaW9uSGlzdG9yeUVudHJ5
RGF0YUtleSwgc2Vzc2lvbkhpc3RvcnlFbnRyeVNuYXBzaG90VVVJREtleSB9OworICAgICAgICBj
b25zdCB2b2lkKiB2YWx1ZXNbNV0gPSB7IHVybC5nZXQoKSwgdGl0bGUuZ2V0KCksIG9yaWdpbmFs
VVJMLmdldCgpLCBlbnRyeURhdGEuZ2V0KCksIHV1aWQuZ2V0KCkgfTsKKworICAgICAgICBSZXRh
aW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBlbnRyeURpY3Rpb25hcnkgPSBhZG9wdENGKENGRGljdGlv
bmFyeUNyZWF0ZSgwLCBrZXlzLCB2YWx1ZXMsIDUsICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxC
YWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsKICAgICAgICAgQ0ZBcnJh
eUFwcGVuZFZhbHVlKGVudHJpZXMuZ2V0KCksIGVudHJ5RGljdGlvbmFyeS5nZXQoKSk7CiAgICAg
fQogICAgICAgICAKQEAgLTMwOSwxMyArMzExLDIxIEBAIHN0YXRpYyBib29sIGV4dHJhY3RCYWNr
Rm9yd2FyZExpc3RFbnRyaWVzRnJvbUFycmF5KENGQXJyYXlSZWYgY2ZFbnRyaWVzLCBCYWNrRm9y
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KIAorICAgICAgICBDRlN0cmlu
Z1JlZiBzbmFwc2hvdFVVSUQgPSAoQ0ZTdHJpbmdSZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZW50
cnlEaWN0aW9uYXJ5LCBzZXNzaW9uSGlzdG9yeUVudHJ5U25hcHNob3RVVUlES2V5KTsKKyAgICAg
ICAgaWYgKCFzbmFwc2hvdFVVSUQgfHwgQ0ZHZXRUeXBlSUQoc25hcHNob3RVVUlEKSAhPSBDRlN0
cmluZ0dldFR5cGVJRCgpKSB7CisgICAgICAgICAgICBMT0coU2Vzc2lvblN0YXRlLCAiV2ViQmFj
a0ZvcndhcmRMaXN0IGVudHJ5IGF0IGluZGV4ICVpIGRvZXMgbm90IGhhdmUgYSB2YWxpZCBzbmFw
c2hvdCBVVUlEIiwgKGludClpKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
fQorCiAgICAgICAgIENGRGF0YVJlZiBiYWNrRm9yd2FyZERhdGEgPSAoQ0ZEYXRhUmVmKUNGRGlj
dGlvbmFyeUdldFZhbHVlKGVudHJ5RGljdGlvbmFyeSwgc2Vzc2lvbkhpc3RvcnlFbnRyeURhdGFL
ZXkpOwogICAgICAgICBpZiAoIWJhY2tGb3J3YXJkRGF0YSB8fCBDRkdldFR5cGVJRChiYWNrRm9y
d2FyZERhdGEpICE9IENGRGF0YUdldFR5cGVJRCgpKSB7CiAgICAgICAgICAgICBMT0coU2Vzc2lv
blN0YXRlLCAiV2ViQmFja0ZvcndhcmRMaXN0IGVudHJ5IGF0IGluZGV4ICVpIGRvZXMgbm90IGhh
dmUgYmFjay9mb3J3YXJkIGRhdGEiLCAoaW50KWkpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBlbnRyaWVzLmFwcGVuZChXZWJCYWNrRm9y
d2FyZExpc3RJdGVtOjpjcmVhdGUob3JpZ2luYWxVUkwsIGVudHJ5VVJMLCBlbnRyeVRpdGxlLCBD
RkRhdGFHZXRCeXRlUHRyKGJhY2tGb3J3YXJkRGF0YSksIENGRGF0YUdldExlbmd0aChiYWNrRm9y
d2FyZERhdGEpLCBnZW5lcmF0ZVdlYkJhY2tGb3J3YXJkSXRlbUlEKCkpKTsKKworICAgICAgICBh
dXRvIGl0ZW0gPSBXZWJCYWNrRm9yd2FyZExpc3RJdGVtOjpjcmVhdGUob3JpZ2luYWxVUkwsIGVu
dHJ5VVJMLCBlbnRyeVRpdGxlLCBDRkRhdGFHZXRCeXRlUHRyKGJhY2tGb3J3YXJkRGF0YSksIENG
RGF0YUdldExlbmd0aChiYWNrRm9yd2FyZERhdGEpLCBnZW5lcmF0ZVdlYkJhY2tGb3J3YXJkSXRl
bUlEKCkpOworICAgICAgICBpdGVtLT5zZXRTbmFwc2hvdFVVSUQoc25hcHNob3RVVUlEKTsKKyAg
ICAgICAgZW50cmllcy5hcHBlbmQoaXRlbSk7CiAgICAgfQogCiAgICAgcmV0dXJuIHRydWU7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvY2YvV2ViUGFnZVByb3h5Q0YuY3Bw
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2NmL1dlYlBhZ2VQcm94eUNGLmNwcAppbmRleCAy
OTcyODk2Li5mYzgxYzNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvY2Yv
V2ViUGFnZVByb3h5Q0YuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9jZi9XZWJQ
YWdlUHJveHlDRi5jcHAKQEAgLTQ0LDcgKzQ0LDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiBzdGF0
aWMgQ0ZTdHJpbmdSZWYgc2Vzc2lvbkhpc3RvcnlLZXkgPSBDRlNUUigiU2Vzc2lvbkhpc3Rvcnki
KTsKIHN0YXRpYyBDRlN0cmluZ1JlZiBwcm92aXNpb25hbFVSTEtleSA9IENGU1RSKCJQcm92aXNp
b25hbFVSTCIpOwogCi1zdGF0aWMgY29uc3QgVUludDMyIEN1cnJlbnRTZXNzaW9uU3RhdGVEYXRh
VmVyc2lvbiA9IDI7CitzdGF0aWMgY29uc3QgVUludDMyIEN1cnJlbnRTZXNzaW9uU3RhdGVEYXRh
VmVyc2lvbiA9IDM7CiAKIFBhc3NSZWZQdHI8QVBJOjpEYXRhPiBXZWJQYWdlUHJveHk6OnNlc3Np
b25TdGF0ZURhdGEoV2ViUGFnZVByb3h5U2Vzc2lvblN0YXRlRmlsdGVyQ2FsbGJhY2sgZmlsdGVy
LCB2b2lkKiBjb250ZXh0KSBjb25zdAogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL21hYy9WaWV3U25hcHNob3RTdG9yZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L21hYy9WaWV3U25hcHNob3RTdG9yZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLmZkYjQxMDAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
bWFjL1ZpZXdTbmFwc2hvdFN0b3JlLmgKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
Zm5kZWYgVmlld1NuYXBzaG90U3RvcmVfaAorI2RlZmluZSBWaWV3U25hcHNob3RTdG9yZV9oCisK
KyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgor
I2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW07
CitjbGFzcyBXZWJQYWdlUHJveHk7CisKK2NsYXNzIFZpZXdTbmFwc2hvdFN0b3JlIHsKKyAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShWaWV3U25hcHNob3RTdG9yZSk7CitwdWJsaWM6CisgICAgVmll
d1NuYXBzaG90U3RvcmUoKTsKKyAgICB+Vmlld1NuYXBzaG90U3RvcmUoKTsKKworICAgIHN0YXRp
YyBWaWV3U25hcHNob3RTdG9yZSYgc2hhcmVkKCk7CisKKyAgICB2b2lkIHJlY29yZFNuYXBzaG90
KFdlYlBhZ2VQcm94eSYpOworICAgIHN0ZDo6cGFpcjxSZXRhaW5QdHI8Q0dJbWFnZVJlZj4sIHVp
bnQ2NF90PiBzbmFwc2hvdEFuZFJlbmRlclRyZWVTaXplKFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0q
KTsKKworICAgIHZvaWQgZGlzYWJsZVNuYXBzaG90dGluZygpIHsgbV9lbmFibGVkID0gZmFsc2U7
IH0KKyAgICB2b2lkIGVuYWJsZVNuYXBzaG90dGluZygpIHsgbV9lbmFibGVkID0gdHJ1ZTsgfQor
Citwcml2YXRlOgorICAgIEhhc2hNYXA8U3RyaW5nLCBzdGQ6OnBhaXI8UmV0YWluUHRyPENHSW1h
Z2VSZWY+LCB1aW50NjRfdD4+IG1fc25hcHNob3RNYXA7CisKKyAgICBib29sIG1fZW5hYmxlZDsK
K307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gVmlld1NuYXBzaG90U3Rv
cmVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9WaWV3U25hcHNo
b3RTdG9yZS5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvVmlld1NuYXBzaG90U3Rv
cmUubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGRiOWFiNwotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvVmlld1NuYXBzaG90U3Rv
cmUubW0KQEAgLTAsMCArMSw4MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgor
I2ltcG9ydCAiVmlld1NuYXBzaG90U3RvcmUuaCIKKworI2ltcG9ydCAiV2ViQmFja0ZvcndhcmRM
aXN0LmgiCisjaW1wb3J0ICJXZWJQYWdlUHJveHkuaCIKKyNpbXBvcnQgPENvcmVHcmFwaGljcy9D
b3JlR3JhcGhpY3MuaD4KKyNpbXBvcnQgPFdlYkNvcmUvVVVJRC5oPgorCit1c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1ZpZXdTbmFwc2hvdFN0b3JlOjpW
aWV3U25hcHNob3RTdG9yZSgpCisgICAgOiBtX2VuYWJsZWQodHJ1ZSkKK3sKK30KKworVmlld1Nu
YXBzaG90U3RvcmU6On5WaWV3U25hcHNob3RTdG9yZSgpCit7Cit9CisKK1ZpZXdTbmFwc2hvdFN0
b3JlJiBWaWV3U25hcHNob3RTdG9yZTo6c2hhcmVkKCkKK3sKKyAgICBzdGF0aWMgVmlld1NuYXBz
aG90U3RvcmUmIHN0b3JlID0gKm5ldyBWaWV3U25hcHNob3RTdG9yZTsKKyAgICByZXR1cm4gc3Rv
cmU7Cit9CisKK3ZvaWQgVmlld1NuYXBzaG90U3RvcmU6OnJlY29yZFNuYXBzaG90KFdlYlBhZ2VQ
cm94eSYgd2ViUGFnZVByb3h5KQoreworICAgIFJlZlB0cjxXZWJCYWNrRm9yd2FyZExpc3RJdGVt
PiBpdGVtID0gd2ViUGFnZVByb3h5LmJhY2tGb3J3YXJkTGlzdCgpLmN1cnJlbnRJdGVtKCk7CisK
KyAgICBpZiAoIW1fZW5hYmxlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFpdGVtKQor
ICAgICAgICByZXR1cm47CisKKyAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gc25hcHNob3QgPSB3
ZWJQYWdlUHJveHkudGFrZVZpZXdTbmFwc2hvdCgpOworCisgICAgU3RyaW5nIG9sZFNuYXBzaG90
VVVJRCA9IGl0ZW0tPnNuYXBzaG90VVVJRCgpOworICAgIGlmICghb2xkU25hcHNob3RVVUlELmlz
RW1wdHkoKSkKKyAgICAgICAgbV9zbmFwc2hvdE1hcC5yZW1vdmUob2xkU25hcHNob3RVVUlEKTsK
KworICAgIGl0ZW0tPnNldFNuYXBzaG90VVVJRChjcmVhdGVDYW5vbmljYWxVVUlEU3RyaW5nKCkp
OworICAgIG1fc25hcHNob3RNYXAuYWRkKGl0ZW0tPnNuYXBzaG90VVVJRCgpLCBzdGQ6Om1ha2Vf
cGFpcihzbmFwc2hvdCwgd2ViUGFnZVByb3h5LnJlbmRlclRyZWVTaXplKCkpKTsKK30KKworc3Rk
OjpwYWlyPFJldGFpblB0cjxDR0ltYWdlUmVmPiwgdWludDY0X3Q+IFZpZXdTbmFwc2hvdFN0b3Jl
OjpzbmFwc2hvdEFuZFJlbmRlclRyZWVTaXplKFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0qIGl0ZW0p
Cit7CisgICAgY29uc3QgYXV0byYgc25hcHNob3RBbmRSZW5kZXJUcmVlU2l6ZSA9IG1fc25hcHNo
b3RNYXAuZmluZChpdGVtLT5zbmFwc2hvdFVVSUQoKSk7CisKKyAgICBpZiAoc25hcHNob3RBbmRS
ZW5kZXJUcmVlU2l6ZSA9PSBtX3NuYXBzaG90TWFwLmVuZCgpKQorICAgICAgICByZXR1cm4gc3Rk
OjptYWtlX3BhaXIobnVsbHB0ciwgMCk7CisKKyAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoc25h
cHNob3RBbmRSZW5kZXJUcmVlU2l6ZS0+dmFsdWUuZmlyc3QuZ2V0KCksIHNuYXBzaG90QW5kUmVu
ZGVyVHJlZVNpemUtPnZhbHVlLnNlY29uZCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qIGIvU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmlu
ZGV4IDM3NDBhZDQuLjc2ZmRkNTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTQxMiw2ICs0MTIsOCBAQAogCQkyRDQyOUJGRDE3
MjFFMkM3MDBFQzY4MUYgLyogUERGUGx1Z2luUGFzc3dvcmRGaWVsZC5tbSBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJENDI5QkZCMTcyMUUyQkEwMEVDNjgx
RiAvKiBQREZQbHVnaW5QYXNzd29yZEZpZWxkLm1tICovOyB9OwogCQkyRDQ3QjU2QzE4MTA3MTRF
MDAzQTNBRUUgLyogUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmUubW0gaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDQ3QjU2QTE4MTA3MTRFMDAzQTNBRUUgLyog
UmVtb3RlTGF5ZXJCYWNraW5nU3RvcmUubW0gKi87IH07CiAJCTJENDdCNTZEMTgxMDcxNEUwMDNB
M0FFRSAvKiBSZW1vdGVMYXllckJhY2tpbmdTdG9yZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkQ0N0I1NkIxODEwNzE0RTAwM0EzQUVFIC8qIFJlbW90
ZUxheWVyQmFja2luZ1N0b3JlLmggKi87IH07CisJCTJENkNEMTE5MTg5MDU4QTUwMEU1QTRBMCAv
KiBWaWV3U25hcHNob3RTdG9yZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMkQ2Q0QxMTcxODkwNThBNTAwRTVBNEEwIC8qIFZpZXdTbmFwc2hvdFN0b3Jl
LmggKi87IH07CisJCTJENkNEMTFBMTg5MDU4QTUwMEU1QTRBMCAvKiBWaWV3U25hcHNob3RTdG9y
ZS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJENkNE
MTE4MTg5MDU4QTUwMEU1QTRBMCAvKiBWaWV3U25hcHNob3RTdG9yZS5tbSAqLzsgfTsKIAkJMkQ4
MTlCOUUxODYyN0VFOTAwMUYwM0QxIC8qIFZpZXdHZXN0dXJlR2VvbWV0cnlDb2xsZWN0b3IuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkQ4MTlCOTkx
ODYyNzVCMzAwMUYwM0QxIC8qIFZpZXdHZXN0dXJlR2VvbWV0cnlDb2xsZWN0b3IuY3BwICovOyB9
OwogCQkyRDgxOUJBMTE4NjI4MDBFMDAxRjAzRDEgLyogVmlld0dlc3R1cmVHZW9tZXRyeUNvbGxl
Y3Rvck1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAyRDgxOUI5RjE4NjI4MDBFMDAxRjAzRDEgLyogVmlld0dlc3R1cmVHZW9t
ZXRyeUNvbGxlY3Rvck1lc3NhZ2VSZWNlaXZlci5jcHAgKi87IH07CiAJCTJEODE5QkEyMTg2Mjgw
MEUwMDFGMDNEMSAvKiBWaWV3R2VzdHVyZUdlb21ldHJ5Q29sbGVjdG9yTWVzc2FnZXMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEODE5QkEwMTg2Mjgw
MEUwMDFGMDNEMSAvKiBWaWV3R2VzdHVyZUdlb21ldHJ5Q29sbGVjdG9yTWVzc2FnZXMuaCAqLzsg
fTsKQEAgLTIwNjQsNiArMjA2Niw4IEBACiAJCTJENDI5QkZCMTcyMUUyQkEwMEVDNjgxRiAvKiBQ
REZQbHVnaW5QYXNzd29yZEZpZWxkLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBuYW1lID0gUERGUGx1Z2luUGFzc3dvcmRGaWVsZC5tbTsgcGF0aCA9IFBERi9QREZQbHVnaW5Q
YXNzd29yZEZpZWxkLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRDQ3QjU2QTE4
MTA3MTRFMDAzQTNBRUUgLyogUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmUubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBSZW1vdGVMYXllckJhY2tpbmdTdG9yZS5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkQ0N0I1NkIxODEwNzE0RTAwM0EzQUVFIC8q
IFJlbW90ZUxheWVyQmFja2luZ1N0b3JlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFJlbW90ZUxheWVyQmFja2luZ1N0b3JlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTJENkNEMTE3MTg5MDU4QTUwMEU1QTRBMCAvKiBWaWV3U25hcHNob3RTdG9yZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWaWV3U25hcHNob3RTdG9yZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkyRDZDRDExODE4OTA1OEE1MDBFNUE0QTAgLyogVmlld1Nu
YXBzaG90U3RvcmUubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBW
aWV3U25hcHNob3RTdG9yZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkQ4MTlC
OTkxODYyNzVCMzAwMUYwM0QxIC8qIFZpZXdHZXN0dXJlR2VvbWV0cnlDb2xsZWN0b3IuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVmlld0dlc3R1cmVHZW9tZXRyeUNv
bGxlY3Rvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJEODE5QjlBMTg2Mjc1
QjMwMDFGMDNEMSAvKiBWaWV3R2VzdHVyZUdlb21ldHJ5Q29sbGVjdG9yLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZpZXdHZXN0dXJlR2VvbWV0cnlDb2xsZWN0b3IuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkQ4MTlCOUIxODYyNzVCMzAwMUYwM0QxIC8qIFZp
ZXdHZXN0dXJlR2VvbWV0cnlDb2xsZWN0b3IubWVzc2FnZXMuaW4gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBw
YXRoID0gVmlld0dlc3R1cmVHZW9tZXRyeUNvbGxlY3Rvci5tZXNzYWdlcy5pbjsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTU2ODcsNiArNTY5MSw4IEBACiAJCQkJMkQxMjVDNUMxODU3
RUEwNTAwM0JBM0NCIC8qIFZpZXdHZXN0dXJlQ29udHJvbGxlci5oICovLAogCQkJCTJEMTI1QzVE
MTg1N0VBMDUwMDNCQTNDQiAvKiBWaWV3R2VzdHVyZUNvbnRyb2xsZXIubW0gKi8sCiAJCQkJMkQx
QjVENUExODU4NjU5OTAwNkM2NTk2IC8qIFZpZXdHZXN0dXJlQ29udHJvbGxlci5tZXNzYWdlcy5p
biAqLywKKwkJCQkyRDZDRDExNzE4OTA1OEE1MDBFNUE0QTAgLyogVmlld1NuYXBzaG90U3RvcmUu
aCAqLywKKwkJCQkyRDZDRDExODE4OTA1OEE1MDBFNUE0QTAgLyogVmlld1NuYXBzaG90U3RvcmUu
bW0gKi8sCiAJCQkJNzI4RTg2RUYxNzk1MTg4QzAwODc4NzlFIC8qIFdlYkNvbG9yUGlja2VyTWFj
LmggKi8sCiAJCQkJNzI4RTg2RjAxNzk1MTg4QzAwODc4NzlFIC8qIFdlYkNvbG9yUGlja2VyTWFj
Lm1tICovLAogCQkJCTFBMUM2NDg2MTFGNDE1QjcwMDU1M0MxOSAvKiBXZWJDb250ZXh0TWFjLm1t
ICovLApAQCAtNjY1OSw2ICs2NjY1LDcgQEAKIAkJCQlCQzg1N0ZFNjEyQjg0M0Q4MDBFREVCMkUg
LyogV0tPcGVuUGFuZWxQYXJhbWV0ZXJzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzFERkU4RjEy
QjMxQ0E4MDA1REY3MzAgLyogV0tPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQkNENTk3RDcxMTJCNTZEQzAwRUM4QzIzIC8qIFdLUGFnZS5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJMkQ2Q0QxMTkxODkwNThBNTAwRTVBNEEwIC8qIFZpZXdTbmFwc2hvdFN0b3JlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlCQzdCNjMzNzEyQTQ1QUJBMDBEMTc0QTQgLyogV0tQYWdlR3Jv
dXAuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMkQwMjE5MTJBQzQyNkMwMEU3MzJBMyAvKiBXS1Bh
Z2VMb2FkVHlwZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzQkRFQjAxMTcxREQ3QUYwMEJGRUUx
QiAvKiBXS1BhZ2VMb2FkVHlwZXNQcml2YXRlLmggaW4gSGVhZGVycyAqLywKQEAgLTc0ODksNiAr
NzQ5Niw3IEBACiAJCQkJQkNFODFEOTgxMzFBRTAyMTAwMjQxOTEwIC8qIERpY3Rpb25hcnlQb3B1
cEluZm8uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE2N0VFQTExNzAzNzdCRjAwNzY4MUNBIC8q
IERpc2tDYWNoZU1vbml0b3IubW0gaW4gU291cmNlcyAqLywKIAkJCQkyREE5NDQ4RjE4ODRFM0I1
MDBFRDg2REIgLyogV0tHZW9sb2NhdGlvblByb3ZpZGVySU9TLm1tIGluIFNvdXJjZXMgKi8sCisJ
CQkJMkQ2Q0QxMUExODkwNThBNTAwRTVBNEEwIC8qIFZpZXdTbmFwc2hvdFN0b3JlLm1tIGluIFNv
dXJjZXMgKi8sCiAJCQkJNTE4RThGMDcxNkIyMDkzNzAwRTkxNDI5IC8qIERvd25sb2FkLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTJENDdCNTZDMTgxMDcxNEUwMDNBM0FFRSAvKiBSZW1vdGVMYXll
ckJhY2tpbmdTdG9yZS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTUxOEU4RjA5MTZCMjA5MzcwMEU5
MTQyOSAvKiBEb3dubG9hZEF1dGhlbnRpY2F0aW9uQ2xpZW50LmNwcCBpbiBTb3VyY2VzICovLAo=
</data>
<flag name="review"
          id="246031"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>