<?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>66890</bug_id>
          
          <creation_ts>2011-08-24 14:01:49 -0700</creation_ts>
          <short_desc>[GTK] Move drag-and-drop code which can be shared with WebKit2 to WebCore</short_desc>
          <delta_ts>2011-09-28 23:07:36 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKitGTK</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Gtk</keywords>
          <priority>P3</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>63706</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Martin Robinson">mrobinson</reporter>
          <assigned_to name="Martin Robinson">mrobinson</assigned_to>
          <cc>cgarcia</cc>
    
    <cc>gustavo</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>456398</commentid>
    <comment_count>0</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-08-24 14:01:49 -0700</bug_when>
    <thetext>This bug tracks the creation of a WebCore class holding drag-and-drop code which can be shared in common between WebKit and WebKit2.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>456492</commentid>
    <comment_count>1</comment_count>
      <attachid>105089</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-08-24 15:56:06 -0700</bug_when>
    <thetext>Created attachment 105089
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>465513</commentid>
    <comment_count>2</comment_count>
      <attachid>105089</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-09-12 00:14:43 -0700</bug_when>
    <thetext>Comment on attachment 105089
Patch

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

Patch looks good, but the name is a bit confusing to me, something called GtkWidget* makes me think it&apos;s a gtk widget. I would name it GtkDragAndDropHelper or something like that

&gt; Source/WebCore/platform/gtk/GtkWidgetDragAndDropGlue.cpp:56
&gt; +    DroppingContextMap::iterator endDroppingContexts = m_droppingContexts.end();
&gt; +    for (HashMap&lt;GdkDragContext*, DroppingContext*&gt;::iterator iter = m_droppingContexts.begin(); iter != endDroppingContexts; ++iter)
&gt; +        delete (iter-&gt;second);

I think you can use deleteAllPairSeconds()

&gt; Source/WebCore/platform/gtk/GtkWidgetDragAndDropGlue.cpp:123
&gt; +    g_timeout_add(0, reinterpret_cast&lt;GSourceFunc&gt;(handleDragLeaveLaterCallback), data);

Why not using an idle instead of a timeout with 0?

&gt; Source/WebCore/platform/gtk/GtkWidgetDragAndDropGlue.h:23
&gt; +#include &lt;gtk/gtk.h&gt;

Shouldn&apos;t we use forward declarations instead of including gtk.h?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>467081</commentid>
    <comment_count>3</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-09-14 09:40:45 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 105089 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=105089&amp;action=review
&gt; 

Thanks for the comments.

&gt; Patch looks good, but the name is a bit confusing to me, something called GtkWidget* makes me think it&apos;s a gtk widget. I would name it GtkDragAndDropHelper or something like that

I&apos;ve changed the name to GtkDragAndDropHelper.

&gt; &gt; Source/WebCore/platform/gtk/GtkWidgetDragAndDropGlue.cpp:56
&gt; &gt; +    DroppingContextMap::iterator endDroppingContexts = m_droppingContexts.end();
&gt; &gt; +    for (HashMap&lt;GdkDragContext*, DroppingContext*&gt;::iterator iter = m_droppingContexts.begin(); iter != endDroppingContexts; ++iter)
&gt; &gt; +        delete (iter-&gt;second);
&gt; I think you can use deleteAllPairSeconds()

I switched to using deleteAllValues here.

&gt; &gt; Source/WebCore/platform/gtk/GtkWidgetDragAndDropGlue.cpp:123
&gt; &gt; +    g_timeout_add(0, reinterpret_cast&lt;GSourceFunc&gt;(handleDragLeaveLaterCallback), data);
&gt; Why not using an idle instead of a timeout with 0?

g_timeout_add defaults to using a higher priority. I want this to happen sooner rather than later.

&gt; &gt; Source/WebCore/platform/gtk/GtkWidgetDragAndDropGlue.h:23
&gt; &gt; +#include &lt;gtk/gtk.h&gt;
&gt; Shouldn&apos;t we use forward declarations instead of including gtk.h?

Yes! Thanks for catching that. I just removed this line.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>467082</commentid>
    <comment_count>4</comment_count>
      <attachid>107343</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-09-14 09:41:07 -0700</bug_when>
    <thetext>Created attachment 107343
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>467493</commentid>
    <comment_count>5</comment_count>
      <attachid>107343</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2011-09-14 17:38:47 -0700</bug_when>
    <thetext>Comment on attachment 107343
Patch

Attachment 107343 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/9660816</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>467500</commentid>
    <comment_count>6</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-09-14 17:53:15 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 107343 [details])
&gt; Attachment 107343 [details] did not pass gtk-ews (gtk):
&gt; Output: http://queues.webkit.org/results/9660816

webkit-patch left out the new file. I&apos;ll reupload soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>467618</commentid>
    <comment_count>7</comment_count>
      <attachid>107454</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-09-14 21:54:38 -0700</bug_when>
    <thetext>Created attachment 107454
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>467670</commentid>
    <comment_count>8</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-09-14 23:53:25 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; &gt; &gt; Source/WebCore/platform/gtk/GtkWidgetDragAndDropGlue.cpp:123
&gt; &gt; &gt; +    g_timeout_add(0, reinterpret_cast&lt;GSourceFunc&gt;(handleDragLeaveLaterCallback), data);
&gt; &gt; Why not using an idle instead of a timeout with 0?
&gt; 
&gt; g_timeout_add defaults to using a higher priority. I want this to happen sooner rather than later.
&gt; 

You could use g_idle_add_full() passing G_PRIORITY_DEFAULT, so that it&apos;s clear what priority it&apos;s using.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>467671</commentid>
    <comment_count>9</comment_count>
      <attachid>107454</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-09-14 23:54:01 -0700</bug_when>
    <thetext>Comment on attachment 107454
Patch

Looks good to me. Great work!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>472197</commentid>
    <comment_count>10</comment_count>
      <attachid>107454</attachid>
    <who name="Alejandro G. Castro">alex</who>
    <bug_when>2011-09-23 06:21:45 -0700</bug_when>
    <thetext>Comment on attachment 107454
Patch

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

&gt; Source/WebKit/gtk/webkit/webkitwebview.cpp:1488
&gt; +static void dragExitedCallback(GtkWidget* widget, DragData* dragData, bool dropHappened)

Would it be an option to move this callback inside the helper?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>472199</commentid>
    <comment_count>11</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-09-23 06:27:32 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (From update of attachment 107454 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=107454&amp;action=review
&gt; 
&gt; &gt; Source/WebKit/gtk/webkit/webkitwebview.cpp:1488
&gt; &gt; +static void dragExitedCallback(GtkWidget* widget, DragData* dragData, bool dropHappened)
&gt; 
&gt; Would it be an option to move this callback inside the helper?

No, because in WebKit2 you don&apos;t have access to dragController() in the UI process, WebPageProxy is used instead to send a message to the web process.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>474792</commentid>
    <comment_count>12</comment_count>
      <attachid>107454</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2011-09-28 09:54:14 -0700</bug_when>
    <thetext>Comment on attachment 107454
Patch

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

Nice and clean refactoring! Just a little nit to fix in the ChangeLog before landing. Thanks!

&gt; Source/WebCore/ChangeLog:16
&gt; +        * GNUmakefile.list.am: Added the GtkWidgetDragAndDropGlue to the sources list.
&gt; +        * platform/gtk/GtkWidgetDragAndDropGlue.cpp: Added.
&gt; +        * platform/gtk/GtkWidgetDragAndDropGlue.h: Added.

Was this the first name of GtkDragAndDropHelper?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>475242</commentid>
    <comment_count>13</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-09-28 23:01:59 -0700</bug_when>
    <thetext>Committed r96299: &lt;http://trac.webkit.org/changeset/96299&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>105089</attachid>
            <date>2011-08-24 15:56:06 -0700</date>
            <delta_ts>2011-09-14 09:40:59 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-66890-20110824155605.patch</filename>
            <type>text/plain</type>
            <size>27200</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTM3MzMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA4Mzc4M2I5NTU2MzY1OTEz
MzI2OTE0ZDVmMDg4OWFlMTk3NmM0YzAzLi4zMmNmNjUyOGJlZmYwZDkwMDA4Y2I5ZWQ1MTRjZWRl
NDBiNjI1NmRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTEtMDgtMjQgIE1hcnRp
biBSb2JpbnNvbiAgPG1yb2JpbnNvbkBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdIE1vdmUg
ZHJhZy1hbmQtZHJvcCBjb2RlIHdoaWNoIGNhbiBiZSBzaGFyZWQgd2l0aCBXZWJLaXQyIHRvIFdl
YkNvcmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY2
ODkwCisKKyAgICAgICAgQWRkZWQgYSBHdGtXaWRnZXREcmFnQW5kRHJvcEdsdWUgY2xhc3MgdG8g
aG9sZCBhbGwgdGhlIGxvZ2ljIHRoYXQgaXMgY29tbW9uCisgICAgICAgIGJldHdlZW4gV2ViS2l0
MSBhbmQgV2ViS2l0Mi4gVGhpcyB3aWxsIGFsbG93IGdyZWF0ZXIgY29kZSBzaGFyaW5nIGJldHdl
ZW4KKyAgICAgICAgdGhlIHR3byBwb3J0cy4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMuIFRoaXMgcGF0Y2ggc2hvdWxkIG5vdCBj
aGFuZ2UgYmVoYXZpb3IuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOiBBZGRlZCB0
aGUgR3RrV2lkZ2V0RHJhZ0FuZERyb3BHbHVlIHRvIHRoZSBzb3VyY2VzIGxpc3QuCisgICAgICAg
ICogcGxhdGZvcm0vZ3RrL0d0a1dpZGdldERyYWdBbmREcm9wR2x1ZS5jcHA6IEFkZGVkLgorICAg
ICAgICAqIHBsYXRmb3JtL2d0ay9HdGtXaWRnZXREcmFnQW5kRHJvcEdsdWUuaDogQWRkZWQuCisK
IDIwMTEtMDgtMjQgIEFsZXhhbmRydSBDaGljdWxpdGEgIDxhY2hpY3VAYWRvYmUuY29tPgogCiAg
ICAgICAgIFtDU1NSZWdpb25zXSBGaXggRWxlbWVudDo6Z2V0Qm91bmRpbmdDbGllbnRSZWN0IGFu
ZCBFbGVtZW50OjpnZXRDbGllbnRSZWN0cyBmb3IgY29udGVudCBmbG93CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtIGIvU291cmNlL1dlYkNvcmUvR05VbWFr
ZWZpbGUubGlzdC5hbQppbmRleCBjNDQ4NWExOGEzMmMzYThiZDRjNDU0NWE4YjkwYTg3NDRjOTUz
NjE5Li5hNzQ5NjIyODMyMjg5YzNmMzE2M2JjN2ExYjFmMDk4NzI4YWE2OWFlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTM5NzQsNiArMzk3NCw4IEBAIHdlYmNvcmVndGtfc291
cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a1V0aWxpdGllcy5oIFwK
IAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrV2lkZ2V0QmFja2luZ1N0b3JlQ2Fpcm8u
Y3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrV2lkZ2V0QmFja2luZ1N0b3Jl
WDExLmNwcCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a1dpZGdldERyYWdBbmRE
cm9wR2x1ZS5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtXaWRnZXREcmFn
QW5kRHJvcEdsdWUuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0dlb2xvY2F0aW9u
U2VydmljZUd0ay5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HZW9sb2NhdGlv
blNlcnZpY2VHdGsuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0dPd25QdHJHdGsu
Y3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtXaWRnZXRE
cmFnQW5kRHJvcEdsdWUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a1dpZGdl
dERyYWdBbmREcm9wR2x1ZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTI1OGQyMjRkMDQ3Y2FkYjkwMTBmYjE1
ZjE3NjJkMTg5Yzk1MDkwOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2d0ay9HdGtXaWRnZXREcmFnQW5kRHJvcEdsdWUuY3BwCkBAIC0wLDAgKzEsMjAyIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDExLCBJZ2FsaWEgUy5MLgorICoKKyAqICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMw
MSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkd0a1dpZGdldERy
YWdBbmREcm9wR2x1ZS5oIgorCisjaW5jbHVkZSAiQ2xpcGJvYXJkVXRpbGl0aWVzR3RrLmgiCisj
aW5jbHVkZSAiRHJhZ0RhdGEuaCIKKyNpbmNsdWRlICJHdGtVdGlsaXRpZXMuaCIKKyNpbmNsdWRl
ICJQYXN0ZWJvYXJkSGVscGVyLmgiCisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHd0
Zi9QYXNzT3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RydWN0IERyb3BwaW5n
Q29udGV4dCB7CisgICAgRHJvcHBpbmdDb250ZXh0KEdka0RyYWdDb250ZXh0KiBnZGtDb250ZXh0
LCBjb25zdCBJbnRQb2ludCYgcG9zaXRpb24pCisgICAgICAgIDogZ2RrQ29udGV4dChnZGtDb250
ZXh0KQorICAgICAgICAsIGRhdGFPYmplY3QoRGF0YU9iamVjdEd0azo6Y3JlYXRlKCkpCisgICAg
ICAgICwgbGFzdE1vdGlvblBvc2l0aW9uKHBvc2l0aW9uKQorICAgICAgICAsIGRyb3BIYXBwZW5l
ZChmYWxzZSkKKyAgICAgICAgLCBleGl0ZWRDYWxsYmFjaygwKQorICAgIHsKKyAgICB9CisKKyAg
ICBHZGtEcmFnQ29udGV4dCogZ2RrQ29udGV4dDsKKyAgICBSZWZQdHI8V2ViQ29yZTo6RGF0YU9i
amVjdEd0az4gZGF0YU9iamVjdDsKKyAgICBXZWJDb3JlOjpJbnRQb2ludCBsYXN0TW90aW9uUG9z
aXRpb247CisgICAgaW50IHBlbmRpbmdEYXRhUmVxdWVzdHM7CisgICAgYm9vbCBkcm9wSGFwcGVu
ZWQ7CisgICAgRHJhZ0V4aXRlZENhbGxiYWNrIGV4aXRlZENhbGxiYWNrOworfTsKKwordHlwZWRl
ZiBIYXNoTWFwPEdka0RyYWdDb250ZXh0KiwgRHJvcHBpbmdDb250ZXh0Kj4gRHJvcHBpbmdDb250
ZXh0TWFwOwordHlwZWRlZiBIYXNoTWFwPEdka0RyYWdDb250ZXh0KiwgUmVmUHRyPERhdGFPYmpl
Y3RHdGs+ID4gRHJhZ2dpbmdEYXRhT2JqZWN0c01hcDsKKworR3RrV2lkZ2V0RHJhZ0FuZERyb3BH
bHVlOjp+R3RrV2lkZ2V0RHJhZ0FuZERyb3BHbHVlKCkKK3sKKyAgICBEcm9wcGluZ0NvbnRleHRN
YXA6Oml0ZXJhdG9yIGVuZERyb3BwaW5nQ29udGV4dHMgPSBtX2Ryb3BwaW5nQ29udGV4dHMuZW5k
KCk7CisgICAgZm9yIChIYXNoTWFwPEdka0RyYWdDb250ZXh0KiwgRHJvcHBpbmdDb250ZXh0Kj46
Oml0ZXJhdG9yIGl0ZXIgPSBtX2Ryb3BwaW5nQ29udGV4dHMuYmVnaW4oKTsgaXRlciAhPSBlbmRE
cm9wcGluZ0NvbnRleHRzOyArK2l0ZXIpCisgICAgICAgIGRlbGV0ZSAoaXRlci0+c2Vjb25kKTsK
K30KKworYm9vbCBHdGtXaWRnZXREcmFnQW5kRHJvcEdsdWU6OmhhbmRsZURyYWdFbmQoR2RrRHJh
Z0NvbnRleHQqIGRyYWdDb250ZXh0KQoreworICAgIERyYWdnaW5nRGF0YU9iamVjdHNNYXA6Oml0
ZXJhdG9yIGl0ZXJhdG9yID0gbV9kcmFnZ2luZ0RhdGFPYmplY3RzLmZpbmQoZHJhZ0NvbnRleHQp
OworICAgIGlmIChpdGVyYXRvciA9PSBtX2RyYWdnaW5nRGF0YU9iamVjdHMuZW5kKCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIG1fZHJhZ2dpbmdEYXRhT2JqZWN0cy5yZW1vdmUoaXRl
cmF0b3IpOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIEd0a1dpZGdldERyYWdBbmREcm9w
R2x1ZTo6aGFuZGxlR2V0RHJhZ0RhdGEoR2RrRHJhZ0NvbnRleHQqIGNvbnRleHQsIEd0a1NlbGVj
dGlvbkRhdGEqIHNlbGVjdGlvbkRhdGEsIGd1aW50IGluZm8pCit7CisgICAgRHJhZ2dpbmdEYXRh
T2JqZWN0c01hcDo6aXRlcmF0b3IgaXRlcmF0b3IgPSBtX2RyYWdnaW5nRGF0YU9iamVjdHMuZmlu
ZChjb250ZXh0KTsKKyAgICBpZiAoaXRlcmF0b3IgPT0gbV9kcmFnZ2luZ0RhdGFPYmplY3RzLmVu
ZCgpKQorICAgICAgICByZXR1cm47CisgICAgUGFzdGVib2FyZEhlbHBlcjo6ZGVmYXVsdFBhc3Rl
Ym9hcmRIZWxwZXIoKS0+ZmlsbFNlbGVjdGlvbkRhdGEoc2VsZWN0aW9uRGF0YSwgaW5mbywgaXRl
cmF0b3ItPnNlY29uZC5nZXQoKSk7Cit9CisKK3N0cnVjdCBIYW5kbGVEcmFnTGF0ZXJEYXRhIHsK
KyAgICBEcm9wcGluZ0NvbnRleHQqIGNvbnRleHQ7CisgICAgR3RrV2lkZ2V0RHJhZ0FuZERyb3BH
bHVlKiBnbHVlOworfTsKKworc3RhdGljIGdib29sZWFuIGhhbmRsZURyYWdMZWF2ZUxhdGVyQ2Fs
bGJhY2soSGFuZGxlRHJhZ0xhdGVyRGF0YSogZGF0YSkKK3sKKyAgICBkYXRhLT5nbHVlLT5oYW5k
bGVEcmFnTGVhdmVMYXRlcihkYXRhLT5jb250ZXh0KTsKKyAgICBkZWxldGUgZGF0YTsKKyAgICBy
ZXR1cm4gRkFMU0U7Cit9CisKK3ZvaWQgR3RrV2lkZ2V0RHJhZ0FuZERyb3BHbHVlOjpoYW5kbGVE
cmFnTGVhdmVMYXRlcihEcm9wcGluZ0NvbnRleHQqIGNvbnRleHQpCit7CisgICAgRHJvcHBpbmdD
b250ZXh0TWFwOjppdGVyYXRvciBpdGVyYXRvciA9IG1fZHJvcHBpbmdDb250ZXh0cy5maW5kKGNv
bnRleHQtPmdka0NvbnRleHQpOworICAgIGlmIChpdGVyYXRvciA9PSBtX2Ryb3BwaW5nQ29udGV4
dHMuZW5kKCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIElmIHRoZSB2aWV3IGRvZXNuJ3Qg
a25vdyBhYm91dCB0aGUgZHJhZyB5ZXQgKHRoZXJlIGFyZSBzdGlsbCBwZW5kaW5nIGRhdGEpCisg
ICAgLy8gcmVxdWVzdHMsIGRvbid0IHVwZGF0ZSBpdCB3aXRoIGluZm9ybWF0aW9uIGFib3V0IHRo
ZSBkcmFnLgorICAgIGlmIChjb250ZXh0LT5wZW5kaW5nRGF0YVJlcXVlc3RzKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBjb25zdCBJbnRQb2ludCYgcG9zaXRpb24gPSBjb250ZXh0LT5sYXN0TW90
aW9uUG9zaXRpb247CisgICAgRHJhZ0RhdGEgZHJhZ0RhdGEoY29udGV4dC0+ZGF0YU9iamVjdC5n
ZXQoKSwgcG9zaXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgY29udmVydFdpZGdldFBvaW50
VG9TY3JlZW5Qb2ludChtX3dpZGdldCwgcG9zaXRpb24pLAorICAgICAgICAgICAgICAgICAgICAg
IERyYWdPcGVyYXRpb25Ob25lKTsKKyAgICBjb250ZXh0LT5leGl0ZWRDYWxsYmFjayhtX3dpZGdl
dCwgJmRyYWdEYXRhLCBjb250ZXh0LT5kcm9wSGFwcGVuZWQpOworCisgICAgbV9kcm9wcGluZ0Nv
bnRleHRzLnJlbW92ZShpdGVyYXRvcik7CisgICAgZGVsZXRlIGNvbnRleHQ7Cit9CisKK3ZvaWQg
R3RrV2lkZ2V0RHJhZ0FuZERyb3BHbHVlOjpoYW5kbGVEcmFnTGVhdmUoR2RrRHJhZ0NvbnRleHQq
IGdka0NvbnRleHQsIERyYWdFeGl0ZWRDYWxsYmFjayBleGl0ZWRDYWxsYmFjaykKK3sKKyAgICBE
cm9wcGluZ0NvbnRleHRNYXA6Oml0ZXJhdG9yIGl0ZXJhdG9yID0gbV9kcm9wcGluZ0NvbnRleHRz
LmZpbmQoZ2RrQ29udGV4dCk7CisgICAgaWYgKGl0ZXJhdG9yID09IG1fZHJvcHBpbmdDb250ZXh0
cy5lbmQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gRHVyaW5nIGEgZHJvcCBHVEsrIHdp
bGwgZmlyZSBhIGRyYWctbGVhdmUgc2lnbmFsIHJpZ2h0IGJlZm9yZSBmaXJpbmcKKyAgICAvLyB0
aGUgZHJhZy1kcm9wIHNpZ25hbC4gV2Ugd2FudCB0aGUgYWN0aW9ucyBmb3IgZHJhZy1sZWF2ZSB0
byBoYXBwZW4gYWZ0ZXIKKyAgICAvLyB0aG9zZSBmb3IgZHJhZy1kcm9wLCBzbyBzY2hlZHVsZSB0
aGVtIHRvIGhhcHBlbiBhc3luY2hyb25vdXNseSBoZXJlLgorICAgIEhhbmRsZURyYWdMYXRlckRh
dGEqIGRhdGEgPSBuZXcgSGFuZGxlRHJhZ0xhdGVyRGF0YTsKKyAgICBkYXRhLT5jb250ZXh0ID0g
aXRlcmF0b3ItPnNlY29uZDsKKyAgICBkYXRhLT5jb250ZXh0LT5leGl0ZWRDYWxsYmFjayA9IGV4
aXRlZENhbGxiYWNrOworICAgIGRhdGEtPmdsdWUgPSB0aGlzOworICAgIGdfdGltZW91dF9hZGQo
MCwgcmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4oaGFuZGxlRHJhZ0xlYXZlTGF0ZXJDYWxs
YmFjayksIGRhdGEpOworfQorCitzdGF0aWMgdm9pZCBxdWVyeU5ld0Ryb3BDb250ZXh0RGF0YShE
cm9wcGluZ0NvbnRleHQqIGRyb3BDb250ZXh0LCBHdGtXaWRnZXQqIHdpZGdldCwgZ3VpbnQgdGlt
ZSkKK3sKKyAgICBHZGtEcmFnQ29udGV4dCogZ2RrQ29udGV4dCA9IGRyb3BDb250ZXh0LT5nZGtD
b250ZXh0OworICAgIFZlY3RvcjxHZGtBdG9tPiBhY2NlcHRhYmxlVGFyZ2V0cyhQYXN0ZWJvYXJk
SGVscGVyOjpkZWZhdWx0UGFzdGVib2FyZEhlbHBlcigpLT5kcm9wQXRvbXNGb3JDb250ZXh0KHdp
ZGdldCwgZ2RrQ29udGV4dCkpOworICAgIGRyb3BDb250ZXh0LT5wZW5kaW5nRGF0YVJlcXVlc3Rz
ID0gYWNjZXB0YWJsZVRhcmdldHMuc2l6ZSgpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
YWNjZXB0YWJsZVRhcmdldHMuc2l6ZSgpOyBpKyspCisgICAgICAgIGd0a19kcmFnX2dldF9kYXRh
KHdpZGdldCwgZ2RrQ29udGV4dCwgYWNjZXB0YWJsZVRhcmdldHMuYXQoaSksIHRpbWUpOworfQor
CitQYXNzT3duUHRyPERyYWdEYXRhPiBHdGtXaWRnZXREcmFnQW5kRHJvcEdsdWU6OmhhbmRsZURy
YWdNb3Rpb24oR2RrRHJhZ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFBvaW50JiBwb3NpdGlv
biwgdW5zaWduZWQgdGltZSkKK3sKKyAgICBEcm9wcGluZ0NvbnRleHQqIGRyb3BwaW5nQ29udGV4
dCA9IDA7CisgICAgRHJvcHBpbmdDb250ZXh0TWFwOjppdGVyYXRvciBpdGVyYXRvciA9IG1fZHJv
cHBpbmdDb250ZXh0cy5maW5kKGNvbnRleHQpOworICAgIGlmIChpdGVyYXRvciA9PSBtX2Ryb3Bw
aW5nQ29udGV4dHMuZW5kKCkpIHsKKyAgICAgICAgZHJvcHBpbmdDb250ZXh0ID0gbmV3IERyb3Bw
aW5nQ29udGV4dChjb250ZXh0LCBwb3NpdGlvbik7CisgICAgICAgIG1fZHJvcHBpbmdDb250ZXh0
cy5zZXQoY29udGV4dCwgZHJvcHBpbmdDb250ZXh0KTsKKyAgICAgICAgcXVlcnlOZXdEcm9wQ29u
dGV4dERhdGEoZHJvcHBpbmdDb250ZXh0LCBtX3dpZGdldCwgdGltZSk7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgZHJvcHBpbmdDb250ZXh0ID0gaXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAgZHJv
cHBpbmdDb250ZXh0LT5sYXN0TW90aW9uUG9zaXRpb24gPSBwb3NpdGlvbjsKKyAgICB9CisKKyAg
ICAvLyBEb24ndCBzZW5kIGFueSBkcmFnIGluZm9ybWF0aW9uIHRvIFdlYkNvcmUgdW50aWwgd2Un
dmUgcmV0cmlldmVkIGFsbAorICAgIC8vIHRoZSBkYXRhIGZvciB0aGlzIGRyYWcgb3BlcmF0aW9u
LiBPdGhlcndpc2Ugd2UnZCBoYXZlIHRvIGJsb2NrIHRvIHdhaXQKKyAgICAvLyBmb3IgdGhlIGRy
YWcncyBkYXRhLgorICAgIEFTU0VSVChkcm9wcGluZ0NvbnRleHQpOworICAgIGlmIChkcm9wcGlu
Z0NvbnRleHQtPnBlbmRpbmdEYXRhUmVxdWVzdHMgPiAwKQorICAgICAgICByZXR1cm4gYWRvcHRQ
dHIoc3RhdGljX2Nhc3Q8RHJhZ0RhdGEqPigwKSk7CisKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3
IERyYWdEYXRhKGRyb3BwaW5nQ29udGV4dC0+ZGF0YU9iamVjdC5nZXQoKSwgcG9zaXRpb24sCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb252ZXJ0V2lkZ2V0UG9pbnRUb1NjcmVl
blBvaW50KG1fd2lkZ2V0LCBwb3NpdGlvbiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBnZGtEcmFnQWN0aW9uVG9EcmFnT3BlcmF0aW9uKGdka19kcmFnX2NvbnRleHRfZ2V0X2Fj
dGlvbnMoY29udGV4dCkpKSk7Cit9CisKK1Bhc3NPd25QdHI8RHJhZ0RhdGE+IEd0a1dpZGdldERy
YWdBbmREcm9wR2x1ZTo6aGFuZGxlRHJhZ0RhdGFSZWNlaXZlZChHZGtEcmFnQ29udGV4dCogY29u
dGV4dCwgR3RrU2VsZWN0aW9uRGF0YSogc2VsZWN0aW9uRGF0YSwgZ3VpbnQgaW5mbykKK3sKKyAg
ICBEcm9wcGluZ0NvbnRleHRNYXA6Oml0ZXJhdG9yIGl0ZXJhdG9yID0gbV9kcm9wcGluZ0NvbnRl
eHRzLmZpbmQoY29udGV4dCk7CisgICAgaWYgKGl0ZXJhdG9yID09IG1fZHJvcHBpbmdDb250ZXh0
cy5lbmQoKSkKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKHN0YXRpY19jYXN0PERyYWdEYXRhKj4o
MCkpOworCisgICAgRHJvcHBpbmdDb250ZXh0KiBkcm9wcGluZ0NvbnRleHQgPSBpdGVyYXRvci0+
c2Vjb25kOworICAgIGRyb3BwaW5nQ29udGV4dC0+cGVuZGluZ0RhdGFSZXF1ZXN0cy0tOworICAg
IFBhc3RlYm9hcmRIZWxwZXI6OmRlZmF1bHRQYXN0ZWJvYXJkSGVscGVyKCktPmZpbGxEYXRhT2Jq
ZWN0RnJvbURyb3BEYXRhKHNlbGVjdGlvbkRhdGEsIGluZm8sIGRyb3BwaW5nQ29udGV4dC0+ZGF0
YU9iamVjdC5nZXQoKSk7CisKKyAgICBpZiAoZHJvcHBpbmdDb250ZXh0LT5wZW5kaW5nRGF0YVJl
cXVlc3RzKQorICAgICAgICByZXR1cm4gYWRvcHRQdHIoc3RhdGljX2Nhc3Q8RHJhZ0RhdGEqPigw
KSk7CisKKyAgICAvLyBUaGUgY29vcmRpbmF0ZXMgcGFzc2VkIHRvIGRyYWctZGF0YS1yZWNlaXZl
ZCBzaWduYWwgYXJlIHNvbWV0aW1lcworICAgIC8vIGluYWNjdXJhdGUgaW4gRFJULCBzbyB1c2Ug
dGhlIGNvb3JkaW5hdGVzIG9mIHRoZSBsYXN0IG1vdGlvbiBldmVudC4KKyAgICBjb25zdCBJbnRQ
b2ludCYgcG9zaXRpb24gPSBkcm9wcGluZ0NvbnRleHQtPmxhc3RNb3Rpb25Qb3NpdGlvbjsKKwor
ICAgIC8vIElmIHRoZXJlIGFyZSBubyBtb3JlIHBlbmRpbmcgcmVxdWVzdHMsIHN0YXJ0IHNlbmRp
bmcgZHJhZ2dpbmcgZGF0YSB0byBXZWJDb3JlLgorICAgIHJldHVybiBhZG9wdFB0cihuZXcgRHJh
Z0RhdGEoZHJvcHBpbmdDb250ZXh0LT5kYXRhT2JqZWN0LmdldCgpLCBwb3NpdGlvbiwgCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb252ZXJ0V2lkZ2V0UG9pbnRUb1NjcmVlblBv
aW50KG1fd2lkZ2V0LCBwb3NpdGlvbiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBnZGtEcmFnQWN0aW9uVG9EcmFnT3BlcmF0aW9uKGdka19kcmFnX2NvbnRleHRfZ2V0X2FjdGlv
bnMoY29udGV4dCkpKSk7Cit9CisKK1Bhc3NPd25QdHI8RHJhZ0RhdGE+IEd0a1dpZGdldERyYWdB
bmREcm9wR2x1ZTo6aGFuZGxlRHJhZ0Ryb3AoR2RrRHJhZ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0
IEludFBvaW50JiBwb3NpdGlvbikKK3sKKyAgICBEcm9wcGluZ0NvbnRleHRNYXA6Oml0ZXJhdG9y
IGl0ZXJhdG9yID0gbV9kcm9wcGluZ0NvbnRleHRzLmZpbmQoY29udGV4dCk7CisgICAgaWYgKGl0
ZXJhdG9yID09IG1fZHJvcHBpbmdDb250ZXh0cy5lbmQoKSkKKyAgICAgICAgcmV0dXJuIGFkb3B0
UHRyKHN0YXRpY19jYXN0PERyYWdEYXRhKj4oMCkpOworCisgICAgRHJvcHBpbmdDb250ZXh0KiBk
cm9wcGluZ0NvbnRleHQgPSBpdGVyYXRvci0+c2Vjb25kOworICAgIGRyb3BwaW5nQ29udGV4dC0+
ZHJvcEhhcHBlbmVkID0gdHJ1ZTsKKworICAgIHJldHVybiBhZG9wdFB0cihuZXcgRHJhZ0RhdGEo
ZHJvcHBpbmdDb250ZXh0LT5kYXRhT2JqZWN0LmdldCgpLCBwb3NpdGlvbiwgCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb252ZXJ0V2lkZ2V0UG9pbnRUb1NjcmVlblBvaW50KG1f
d2lkZ2V0LCBwb3NpdGlvbiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZGtE
cmFnQWN0aW9uVG9EcmFnT3BlcmF0aW9uKGdka19kcmFnX2NvbnRleHRfZ2V0X2FjdGlvbnMoY29u
dGV4dCkpKSk7Cit9CisKK3ZvaWQgR3RrV2lkZ2V0RHJhZ0FuZERyb3BHbHVlOjpzdGFydGVkRHJh
ZyhHZGtEcmFnQ29udGV4dCogY29udGV4dCwgRGF0YU9iamVjdEd0ayogZGF0YU9iamVjdCkKK3sK
KyAgICBtX2RyYWdnaW5nRGF0YU9iamVjdHMuc2V0KGNvbnRleHQsIGRhdGFPYmplY3QpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ndGsvR3RrV2lkZ2V0RHJhZ0FuZERyb3BHbHVlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ndGsvR3RrV2lkZ2V0RHJhZ0FuZERyb3BHbHVlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWVmNmQ0OTIy
OGE0MGI0MWZlMzM4NzEzOTY5MDFjYzlhMGI0ZTc5MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtXaWRnZXREcmFnQW5kRHJvcEdsdWUuaApAQCAtMCww
ICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExLCBJZ2FsaWEgUy5MLgorICoKKyAq
ICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBH
ZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBN
QSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2lmbmRlZiBHdGtXaWRnZXREcmFnQW5kRHJvcEds
dWVfaAorI2RlZmluZSBHdGtXaWRnZXREcmFnQW5kRHJvcEdsdWVfaAorCisjaW5jbHVkZSAiRGF0
YU9iamVjdEd0ay5oIgorI2luY2x1ZGUgPGd0ay9ndGsuaD4KKyNpbmNsdWRlIDx3dGYvRmFzdEFs
bG9jQmFzZS5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdHJ1Y3QgRHJvcHBpbmdD
b250ZXh0OworY2xhc3MgRHJhZ0RhdGE7CisKK3R5cGVkZWYgdm9pZCAoKkRyYWdFeGl0ZWRDYWxs
YmFjaykoR3RrV2lkZ2V0KiwgRHJhZ0RhdGEqLCBib29sIGRyb3BIYXBwZW5lZCk7CisKK2NsYXNz
IEd0a1dpZGdldERyYWdBbmREcm9wR2x1ZSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoR3Rr
V2lkZ2V0RHJhZ0FuZERyb3BHbHVlKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKwor
cHVibGljOgorICAgIEd0a1dpZGdldERyYWdBbmREcm9wR2x1ZSgpCisgICAgICAgIDogbV93aWRn
ZXQoMCkKKyAgICB7CisgICAgfQorICAgIH5HdGtXaWRnZXREcmFnQW5kRHJvcEdsdWUoKTsKKwor
ICAgIHZvaWQgc2V0V2lkZ2V0KEd0a1dpZGdldCogd2lkZ2V0KSB7IG1fd2lkZ2V0ID0gd2lkZ2V0
OyB9CisgICAgYm9vbCBoYW5kbGVEcmFnRW5kKEdka0RyYWdDb250ZXh0Kik7CisgICAgdm9pZCBo
YW5kbGVHZXREcmFnRGF0YShHZGtEcmFnQ29udGV4dCosIEd0a1NlbGVjdGlvbkRhdGEqLCBndWlu
dCBpbmZvKTsKKyAgICB2b2lkIGhhbmRsZURyYWdMZWF2ZShHZGtEcmFnQ29udGV4dCosIERyYWdF
eGl0ZWRDYWxsYmFjayk7CisgICAgdm9pZCBoYW5kbGVEcmFnTGVhdmVMYXRlcihEcm9wcGluZ0Nv
bnRleHQqKTsKKyAgICBQYXNzT3duUHRyPERyYWdEYXRhPiBoYW5kbGVEcmFnTW90aW9uKEdka0Ry
YWdDb250ZXh0KiwgY29uc3QgSW50UG9pbnQmLCB1bnNpZ25lZCB0aW1lKTsKKyAgICBQYXNzT3du
UHRyPERyYWdEYXRhPiBoYW5kbGVEcmFnRGF0YVJlY2VpdmVkKEdka0RyYWdDb250ZXh0KiwgR3Rr
U2VsZWN0aW9uRGF0YSosIGd1aW50IGluZm8pOworICAgIFBhc3NPd25QdHI8RHJhZ0RhdGE+IGhh
bmRsZURyYWdEcm9wKEdka0RyYWdDb250ZXh0KiwgY29uc3QgSW50UG9pbnQmKTsKKyAgICB2b2lk
IHN0YXJ0ZWREcmFnKEdka0RyYWdDb250ZXh0KiwgRGF0YU9iamVjdEd0ayopOworCitwcml2YXRl
OgorICAgIEd0a1dpZGdldCogbV93aWRnZXQ7CisgICAgSGFzaE1hcDxHZGtEcmFnQ29udGV4dCos
IERyb3BwaW5nQ29udGV4dCo+IG1fZHJvcHBpbmdDb250ZXh0czsKKyAgICBIYXNoTWFwPEdka0Ry
YWdDb250ZXh0KiwgUmVmUHRyPERhdGFPYmplY3RHdGs+ID4gbV9kcmFnZ2luZ0RhdGFPYmplY3Rz
OworfTsKKworfQorCisjZW5kaWYgLy8gRGF0YU9iamVjdEd0a19oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKaW5k
ZXggMWM4ZTMwZDY2ZWM3NTA2ZmViMTYyNjUwMmMxMWU2ZGMzOTQ3NGZmNy4uM2U0OTFjZTM5YzE2
MTk5MjE2N2NhZjY5Y2JmNDZlNTQ3MzdiNzBiYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9n
dGsvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDIwIEBACisyMDExLTA4LTI0ICBNYXJ0aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNv
bT4KKworICAgICAgICBbR1RLXSBNb3ZlIGRyYWctYW5kLWRyb3AgY29kZSB3aGljaCBjYW4gYmUg
c2hhcmVkIHdpdGggV2ViS2l0MiB0byBXZWJDb3JlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD02Njg5MAorCisgICAgICAgIFVzZSB0aGUgbmV3IEd0a1dp
ZGdldERyYWdBbmREcm9wR2x1ZSBjbGFzcyB0byBob2xkIHRoZSBsb2dpYyB0aGF0IHdpbGwgYmUK
KyAgICAgICAgY29tbW9uIGJldHdlZW4gV2ViS2l0MSBhbmQgV2ViS2l0Mi4gTW9kaWZ5IFdlYktp
dFdlYlZpZXcgdG8gdXNlIHRoaXMgY2xhc3MuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9EcmFnQ2xpZW50R3RrLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6RHJhZ0NsaWVudDo6c3RhcnREcmFnKTogSW5mb3JtIHRoZSBkcmFn
LWFuZC1kcm9wIGdsdWUgYWJvdXQgdGhlIGRyYWcuCisgICAgICAgICogd2Via2l0L3dlYmtpdHdl
YnZpZXcuY3BwOiBVc2UgR3RrV2lkZ2V0RHJhZ0FuZERyb3BHbHVlIHdoZXJldmVyIHRoaXMgY2xh
c3Mgd2FzCisgICAgICAgIG1haW50YWluaW5nIGRyYWctYW5kLWRyb3Agc3RhdGUgaXRzZWxmLgor
ICAgICAgICAqIHdlYmtpdC93ZWJraXR3ZWJ2aWV3cHJpdmF0ZS5oOiBTd2FwIG91dCB0aGUgZHJh
Zy1hbmQtZHJvcCBzdGF0ZSBmb3IgYW4gaW5zdGFuY2UKKyAgICAgICAgb2YgdGhlIGdsdWUgY2xh
c3MuCisKIDIwMTEtMDgtMTcgIEFsZWphbmRybyBHLiBDYXN0cm8gIDxhbGV4QGlnYWxpYS5jb20+
CiAKICAgICAgICAgW0dUS10gRml4IGNvbXBpbGF0aW9uIHByb2JsZW1zIHdpdGggZGVwcmVjYXRp
b25zIGluIGd0aysKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0
L0RyYWdDbGllbnRHdGsuY3BwIGIvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRHJh
Z0NsaWVudEd0ay5jcHAKaW5kZXggNDFhYzZlOTY3MDYyMjBkMzBkYjllNGE1NDhhNDM1NDAxYmQx
MTU3Ni4uNTk0ODQ5YTgwZjVlZGY3MTkyYTI5MDA0Y2ViYmM5MjYxNmE4NWM3NiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRHJhZ0NsaWVudEd0ay5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRHJhZ0NsaWVudEd0ay5jcHAKQEAg
LTEwNyw3ICsxMDcsNyBAQCB2b2lkIERyYWdDbGllbnQ6OnN0YXJ0RHJhZyhEcmFnSW1hZ2VSZWYg
aW1hZ2UsIGNvbnN0IEludFBvaW50JiBkcmFnSW1hZ2VPcmlnaW4sCiAgICAgR093blB0cjxHZGtF
dmVudD4gY3VycmVudEV2ZW50KGd0a19nZXRfY3VycmVudF9ldmVudCgpKTsKIAogICAgIEdka0Ry
YWdDb250ZXh0KiBjb250ZXh0ID0gZ3RrX2RyYWdfYmVnaW4oR1RLX1dJREdFVChtX3dlYlZpZXcp
LCB0YXJnZXRMaXN0LmdldCgpLCBkcmFnT3BlcmF0aW9uVG9HZGtEcmFnQWN0aW9ucyhjbGlwYm9h
cmQtPnNvdXJjZU9wZXJhdGlvbigpKSwgMSwgY3VycmVudEV2ZW50LmdldCgpKTsKLSAgICB3ZWJW
aWV3LT5wcml2LT5kcmFnZ2luZ0RhdGFPYmplY3RzLnNldChjb250ZXh0LCBkYXRhT2JqZWN0KTsK
KyAgICB3ZWJWaWV3LT5wcml2LT5kcmFnQW5kRHJvcEdsdWUuc3RhcnRlZERyYWcoY29udGV4dCwg
ZGF0YU9iamVjdC5nZXQoKSk7CiAKICAgICAvLyBBIGRyYWcgc3RhcnRpbmcgc2hvdWxkIHByZXZl
bnQgYSBkb3VibGUtY2xpY2sgZnJvbSBoYXBwZW5pbmcuIFRoaXMgbWlnaHQKICAgICAvLyBoYXBw
ZW4gaWYgYSBkcmFnIGlzIGZvbGxvd2VkIHZlcnkgcXVpY2tseSBieSBhbm90aGVyIGNsaWNrIChs
aWtlIGluIHRoZSBEUlQpLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dl
YmtpdHdlYnZpZXcuY3BwIGIvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcu
Y3BwCmluZGV4IDM4YmU1YTI5Nzg4ZDk4NmRkYTA1ZGFjMWQ4Yzk3MWUzNjMwODU2YjguLmRjOTcx
ZjNkZDlkZjJjNjg3N2FiY2JjMmNjZjM1ZWM3NDJlOWEyZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2d0
ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHAKQEAgLTc3OSw3ICs3NzksOCBAQCBzdGF0aWMgZ2Jv
b2xlYW4gd2Via2l0X3dlYl92aWV3X2J1dHRvbl9wcmVzc19ldmVudChHdGtXaWRnZXQqIHdpZGdl
dCwgR2RrRXZlbnRCdQogICAgICAgICByZXR1cm4gVFJVRTsKIAogICAgIFBsYXRmb3JtTW91c2VF
dmVudCBwbGF0Zm9ybUV2ZW50KGV2ZW50KTsKLSAgICBwbGF0Zm9ybUV2ZW50LnNldENsaWNrQ291
bnQocHJpdi0+Y2xpY2tDb3VudGVyLmNsaWNrQ291bnRGb3JHZGtCdXR0b25FdmVudCh3aWRnZXQs
IGV2ZW50KSk7CisgICAgaW50IGNvdW50ID0gcHJpdi0+Y2xpY2tDb3VudGVyLmNsaWNrQ291bnRG
b3JHZGtCdXR0b25FdmVudCh3aWRnZXQsIGV2ZW50KTsKKyAgICBwbGF0Zm9ybUV2ZW50LnNldENs
aWNrQ291bnQoY291bnQpOwogCiAgICAgaWYgKGV2ZW50LT5idXR0b24gPT0gMykKICAgICAgICAg
cmV0dXJuIHdlYmtpdF93ZWJfdmlld19mb3J3YXJkX2NvbnRleHRfbWVudV9ldmVudCh3ZWJWaWV3
LCBQbGF0Zm9ybU1vdXNlRXZlbnQoZXZlbnQpKTsKQEAgLTEzMzQsMTEgKzEzMzUsNiBAQCBzdGF0
aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfZGlzcG9zZShHT2JqZWN0KiBvYmplY3QpCiAgICAgcHJp
di0+bWFpblJlc291cmNlLmNsZWFyKCk7CiAgICAgcHJpdi0+c3ViUmVzb3VyY2VzLmNsZWFyKCk7
CiAKLSAgICBIYXNoTWFwPEdka0RyYWdDb250ZXh0KiwgRHJvcHBpbmdDb250ZXh0Kj46Oml0ZXJh
dG9yIGVuZERyb3BwaW5nQ29udGV4dHMgPSBwcml2LT5kcm9wcGluZ0NvbnRleHRzLmVuZCgpOwot
ICAgIGZvciAoSGFzaE1hcDxHZGtEcmFnQ29udGV4dCosIERyb3BwaW5nQ29udGV4dCo+OjppdGVy
YXRvciBpdGVyID0gcHJpdi0+ZHJvcHBpbmdDb250ZXh0cy5iZWdpbigpOyBpdGVyICE9IGVuZERy
b3BwaW5nQ29udGV4dHM7ICsraXRlcikKLSAgICAgICAgZGVsZXRlIChpdGVyLT5zZWNvbmQpOwot
ICAgIHByaXYtPmRyb3BwaW5nQ29udGV4dHMuY2xlYXIoKTsKLQogICAgIEdfT0JKRUNUX0NMQVNT
KHdlYmtpdF93ZWJfdmlld19wYXJlbnRfY2xhc3MpLT5kaXNwb3NlKG9iamVjdCk7CiB9CiAKQEAg
LTE0NTEsMTkgKzE0NDcsMTQgQEAgc3RhdGljIHZvaWQgd2Via2l0X3dlYl92aWV3X3NjcmVlbl9j
aGFuZ2VkKEd0a1dpZGdldCogd2lkZ2V0LCBHZGtTY3JlZW4qIHByZXZpb3UKIHN0YXRpYyB2b2lk
IHdlYmtpdF93ZWJfdmlld19kcmFnX2VuZChHdGtXaWRnZXQqIHdpZGdldCwgR2RrRHJhZ0NvbnRl
eHQqIGNvbnRleHQpCiB7CiAgICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IFdFQktJVF9XRUJf
VklFVyh3aWRnZXQpOwotICAgIFdlYktpdFdlYlZpZXdQcml2YXRlKiBwcml2ID0gd2ViVmlldy0+
cHJpdjsKLQotICAgIC8vIFRoaXMgbWlnaHQgaGFwcGVuIGlmIGEgZHJhZyBpcyBzdGlsbCBpbiBw
cm9ncmVzcyBhZnRlciBhIFdlYktpdFdlYlZpZXcKLSAgICAvLyBpcyBkaXNwb3NlZCBhbmQgYmVm
b3JlIGl0IGlzIGZpbmFsaXplZC4KLSAgICBpZiAoIXByaXYtPmRyYWdnaW5nRGF0YU9iamVjdHMu
Y29udGFpbnMoY29udGV4dCkpCisgICAgaWYgKCF3ZWJWaWV3LT5wcml2LT5kcmFnQW5kRHJvcEds
dWUuaGFuZGxlRHJhZ0VuZChjb250ZXh0KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgcHJpdi0+
ZHJhZ2dpbmdEYXRhT2JqZWN0cy5yZW1vdmUoY29udGV4dCk7Ci0KICAgICBGcmFtZSogZnJhbWUg
PSBjb3JlKHdlYlZpZXcpLT5mb2N1c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZE9yTWFpbkZyYW1lKCk7
CiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuOwogCisgICAgLy8gU3ludGhlc2l6ZSBh
IGJ1dHRvbiByZWxlYXNlIGV2ZW50IHRvIHNlbmQgd2l0aCB0aGUgZHJhZyBlbmQgYWN0aW9uLgog
ICAgIEdPd25QdHI8R2RrRXZlbnQ+IGV2ZW50KGdka19ldmVudF9uZXcoR0RLX0JVVFRPTl9SRUxF
QVNFKSk7CiAgICAgaW50IHgsIHksIHhSb290LCB5Um9vdDsKICAgICBHZGtNb2RpZmllclR5cGUg
bW9kaWZpZXJzID0gc3RhdGljX2Nhc3Q8R2RrTW9kaWZpZXJUeXBlPigwKTsKQEAgLTE0OTEsMTM2
ICsxNDgyLDU0IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfdmlld19kcmFnX2VuZChHdGtXaWRn
ZXQqIHdpZGdldCwgR2RrRHJhZ0NvbnRleHQqIGNvbnRleHQpCiAKIHN0YXRpYyB2b2lkIHdlYmtp
dF93ZWJfdmlld19kcmFnX2RhdGFfZ2V0KEd0a1dpZGdldCogd2lkZ2V0LCBHZGtEcmFnQ29udGV4
dCogY29udGV4dCwgR3RrU2VsZWN0aW9uRGF0YSogc2VsZWN0aW9uRGF0YSwgZ3VpbnQgaW5mbywg
Z3VpbnQpCiB7Ci0gICAgV2ViS2l0V2ViVmlld1ByaXZhdGUqIHByaXYgPSBXRUJLSVRfV0VCX1ZJ
RVcod2lkZ2V0KS0+cHJpdjsKLQotICAgIC8vIFRoaXMgbWlnaHQgaGFwcGVuIGlmIGEgZHJhZyBp
cyBzdGlsbCBpbiBwcm9ncmVzcyBhZnRlciBhIFdlYktpdFdlYlZpZXcKLSAgICAvLyBpcyBkaXBv
c2VkIGFuZCBiZWZvcmUgaXQgaXMgZmluYWxpemVkLgotICAgIGlmICghcHJpdi0+ZHJhZ2dpbmdE
YXRhT2JqZWN0cy5jb250YWlucyhjb250ZXh0KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUGFz
dGVib2FyZEhlbHBlcjo6ZGVmYXVsdFBhc3RlYm9hcmRIZWxwZXIoKS0+ZmlsbFNlbGVjdGlvbkRh
dGEoc2VsZWN0aW9uRGF0YSwgaW5mbywgcHJpdi0+ZHJhZ2dpbmdEYXRhT2JqZWN0cy5nZXQoY29u
dGV4dCkuZ2V0KCkpOworICAgIFdFQktJVF9XRUJfVklFVyh3aWRnZXQpLT5wcml2LT5kcmFnQW5k
RHJvcEdsdWUuaGFuZGxlR2V0RHJhZ0RhdGEoY29udGV4dCwgc2VsZWN0aW9uRGF0YSwgaW5mbyk7
CiB9CiAKLXN0YXRpYyBnYm9vbGVhbiBkb0RyYWdMZWF2ZUxhdGVyKERyb3BwaW5nQ29udGV4dCog
Y29udGV4dCkKK3N0YXRpYyB2b2lkIGRyYWdFeGl0ZWRDYWxsYmFjayhHdGtXaWRnZXQqIHdpZGdl
dCwgRHJhZ0RhdGEqIGRyYWdEYXRhLCBib29sIGRyb3BIYXBwZW5lZCkKIHsKLSAgICBXZWJLaXRX
ZWJWaWV3KiB3ZWJWaWV3ID0gY29udGV4dC0+d2ViVmlldzsKLSAgICBXZWJLaXRXZWJWaWV3UHJp
dmF0ZSogcHJpdiA9IHdlYlZpZXctPnByaXY7Ci0KLSAgICBpZiAoIXByaXYtPmRyb3BwaW5nQ29u
dGV4dHMuY29udGFpbnMoY29udGV4dC0+Z2RrQ29udGV4dCkpCi0gICAgICAgIHJldHVybiBGQUxT
RTsKLQotICAgIC8vIElmIHRoZSB2aWV3IGRvZXNuJ3Qga25vdyBhYm91dCB0aGUgZHJhZyB5ZXQg
KHRoZXJlIGFyZSBzdGlsbCBwZW5kaW5nIGRhdGEpCi0gICAgLy8gcmVxdWVzdHMsIGRvbid0IHVw
ZGF0ZSBpdCB3aXRoIGluZm9ybWF0aW9uIGFib3V0IHRoZSBkcmFnLgotICAgIGlmIChjb250ZXh0
LT5wZW5kaW5nRGF0YVJlcXVlc3RzKQotICAgICAgICByZXR1cm4gRkFMU0U7Ci0KICAgICAvLyBE
b24ndCBjYWxsIGRyYWdFeGl0ZWQgaWYgd2UgaGF2ZSBqdXN0IHJlY2VpdmVkIGEgZHJhZy1kcm9w
IHNpZ25hbC4gVGhpcwogICAgIC8vIGhhcHBlbnMgaW4gdGhlIGNhc2Ugb2YgYSBzdWNjZXNzZnVs
IGRyb3Agb250byB0aGUgdmlldy4KLSAgICBpZiAoIWNvbnRleHQtPmRyb3BIYXBwZW5lZCkgewot
ICAgICAgICBjb25zdCBJbnRQb2ludCYgcG9zaXRpb24gPSBjb250ZXh0LT5sYXN0TW90aW9uUG9z
aXRpb247Ci0gICAgICAgIERyYWdEYXRhIGRyYWdEYXRhKGNvbnRleHQtPmRhdGFPYmplY3QuZ2V0
KCksIHBvc2l0aW9uLCBjb252ZXJ0V2lkZ2V0UG9pbnRUb1NjcmVlblBvaW50KEdUS19XSURHRVQo
d2ViVmlldyksIHBvc2l0aW9uKSwgRHJhZ09wZXJhdGlvbk5vbmUpOwotICAgICAgICBjb3JlKHdl
YlZpZXcpLT5kcmFnQ29udHJvbGxlcigpLT5kcmFnRXhpdGVkKCZkcmFnRGF0YSk7Ci0gICAgfQot
Ci0gICAgY29yZSh3ZWJWaWV3KS0+ZHJhZ0NvbnRyb2xsZXIoKS0+ZHJhZ0VuZGVkKCk7Ci0gICAg
cHJpdi0+ZHJvcHBpbmdDb250ZXh0cy5yZW1vdmUoY29udGV4dC0+Z2RrQ29udGV4dCk7Ci0gICAg
ZGVsZXRlIGNvbnRleHQ7Ci0gICAgcmV0dXJuIEZBTFNFOworICAgIGlmICghZHJvcEhhcHBlbmVk
KQorICAgICAgICBjb3JlKFdFQktJVF9XRUJfVklFVyh3aWRnZXQpKS0+ZHJhZ0NvbnRyb2xsZXIo
KS0+ZHJhZ0V4aXRlZChkcmFnRGF0YSk7CisgICAgY29yZShXRUJLSVRfV0VCX1ZJRVcod2lkZ2V0
KSktPmRyYWdDb250cm9sbGVyKCktPmRyYWdFbmRlZCgpOwogfQogCiBzdGF0aWMgdm9pZCB3ZWJr
aXRfd2ViX3ZpZXdfZHJhZ19sZWF2ZShHdGtXaWRnZXQqIHdpZGdldCwgR2RrRHJhZ0NvbnRleHQq
IGNvbnRleHQsIGd1aW50IHRpbWUpCiB7Ci0gICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IFdF
QktJVF9XRUJfVklFVyh3aWRnZXQpOwotICAgIFdlYktpdFdlYlZpZXdQcml2YXRlKiBwcml2ID0g
d2ViVmlldy0+cHJpdjsKLQotICAgIGlmICghcHJpdi0+ZHJvcHBpbmdDb250ZXh0cy5jb250YWlu
cyhjb250ZXh0KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gRHVyaW5nIGEgZHJvcCBHVEsr
IHdpbGwgZmlyZSBhIGRyYWctbGVhdmUgc2lnbmFsIHJpZ2h0IGJlZm9yZSBmaXJpbmcKLSAgICAv
LyB0aGUgZHJhZy1kcm9wIHNpZ25hbC4gV2Ugd2FudCB0aGUgYWN0aW9ucyBmb3IgZHJhZy1sZWF2
ZSB0byBoYXBwZW4gYWZ0ZXIKLSAgICAvLyB0aG9zZSBmb3IgZHJhZy1kcm9wLCBzbyBzY2hlZHVs
ZSB0aGVtIHRvIGhhcHBlbiBhc3luY2hyb25vdXNseSBoZXJlLgotICAgIGdfdGltZW91dF9hZGQo
MCwgcmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4oZG9EcmFnTGVhdmVMYXRlciksIHByaXYt
PmRyb3BwaW5nQ29udGV4dHMuZ2V0KGNvbnRleHQpKTsKKyAgICBXRUJLSVRfV0VCX1ZJRVcod2lk
Z2V0KS0+cHJpdi0+ZHJhZ0FuZERyb3BHbHVlLmhhbmRsZURyYWdMZWF2ZShjb250ZXh0LCBkcmFn
RXhpdGVkQ2FsbGJhY2spOwogfQogCiBzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X3dlYl92aWV3X2Ry
YWdfbW90aW9uKEd0a1dpZGdldCogd2lkZ2V0LCBHZGtEcmFnQ29udGV4dCogY29udGV4dCwgZ2lu
dCB4LCBnaW50IHksIGd1aW50IHRpbWUpCiB7CiAgICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9
IFdFQktJVF9XRUJfVklFVyh3aWRnZXQpOwotICAgIFdlYktpdFdlYlZpZXdQcml2YXRlKiBwcml2
ID0gd2ViVmlldy0+cHJpdjsKLQotICAgIERyb3BwaW5nQ29udGV4dCogZHJvcHBpbmdDb250ZXh0
ID0gMDsKLSAgICBJbnRQb2ludCBwb3NpdGlvbiA9IEludFBvaW50KHgsIHkpOwotICAgIGlmICgh
cHJpdi0+ZHJvcHBpbmdDb250ZXh0cy5jb250YWlucyhjb250ZXh0KSkgewotICAgICAgICBkcm9w
cGluZ0NvbnRleHQgPSBuZXcgRHJvcHBpbmdDb250ZXh0OwotICAgICAgICBkcm9wcGluZ0NvbnRl
eHQtPndlYlZpZXcgPSB3ZWJWaWV3OwotICAgICAgICBkcm9wcGluZ0NvbnRleHQtPmdka0NvbnRl
eHQgPSBjb250ZXh0OwotICAgICAgICBkcm9wcGluZ0NvbnRleHQtPmRhdGFPYmplY3QgPSBXZWJD
b3JlOjpEYXRhT2JqZWN0R3RrOjpjcmVhdGUoKTsKLSAgICAgICAgZHJvcHBpbmdDb250ZXh0LT5k
cm9wSGFwcGVuZWQgPSBmYWxzZTsKLSAgICAgICAgZHJvcHBpbmdDb250ZXh0LT5sYXN0TW90aW9u
UG9zaXRpb24gPSBwb3NpdGlvbjsKLSAgICAgICAgcHJpdi0+ZHJvcHBpbmdDb250ZXh0cy5zZXQo
Y29udGV4dCwgZHJvcHBpbmdDb250ZXh0KTsKLQotICAgICAgICBWZWN0b3I8R2RrQXRvbT4gYWNj
ZXB0YWJsZVRhcmdldHMoUGFzdGVib2FyZEhlbHBlcjo6ZGVmYXVsdFBhc3RlYm9hcmRIZWxwZXIo
KS0+ZHJvcEF0b21zRm9yQ29udGV4dCh3aWRnZXQsIGNvbnRleHQpKTsKLSAgICAgICAgZHJvcHBp
bmdDb250ZXh0LT5wZW5kaW5nRGF0YVJlcXVlc3RzID0gYWNjZXB0YWJsZVRhcmdldHMuc2l6ZSgp
OwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFjY2VwdGFibGVUYXJnZXRzLnNpemUo
KTsgaSsrKQotICAgICAgICAgICAgZ3RrX2RyYWdfZ2V0X2RhdGEod2lkZ2V0LCBjb250ZXh0LCBh
Y2NlcHRhYmxlVGFyZ2V0cy5hdChpKSwgdGltZSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZHJv
cHBpbmdDb250ZXh0ID0gcHJpdi0+ZHJvcHBpbmdDb250ZXh0cy5nZXQoY29udGV4dCk7Ci0gICAg
ICAgIGRyb3BwaW5nQ29udGV4dC0+bGFzdE1vdGlvblBvc2l0aW9uID0gcG9zaXRpb247Ci0gICAg
fQotCi0gICAgLy8gRG9uJ3Qgc2VuZCBhbnkgZHJhZyBpbmZvcm1hdGlvbiB0byBXZWJDb3JlIHVu
dGlsIHdlJ3ZlIHJldHJpZXZlZCBhbGwKLSAgICAvLyB0aGUgZGF0YSBmb3IgdGhpcyBkcmFnIG9w
ZXJhdGlvbi4gT3RoZXJ3aXNlIHdlJ2QgaGF2ZSB0byBibG9jayB0byB3YWl0Ci0gICAgLy8gZm9y
IHRoZSBkcmFnJ3MgZGF0YS4KLSAgICBBU1NFUlQoZHJvcHBpbmdDb250ZXh0KTsKLSAgICBpZiAo
ZHJvcHBpbmdDb250ZXh0LT5wZW5kaW5nRGF0YVJlcXVlc3RzID4gMCkKKyAgICBPd25QdHI8RHJh
Z0RhdGE+IGRyYWdEYXRhKHdlYlZpZXctPnByaXYtPmRyYWdBbmREcm9wR2x1ZS5oYW5kbGVEcmFn
TW90aW9uKGNvbnRleHQsIEludFBvaW50KHgsIHkpLCB0aW1lKSk7CisgICAgaWYgKCFkcmFnRGF0
YSkKICAgICAgICAgcmV0dXJuIFRSVUU7CiAKLSAgICBEcmFnRGF0YSBkcmFnRGF0YShkcm9wcGlu
Z0NvbnRleHQtPmRhdGFPYmplY3QuZ2V0KCksIHBvc2l0aW9uLCBjb252ZXJ0V2lkZ2V0UG9pbnRU
b1NjcmVlblBvaW50KHdpZGdldCwgcG9zaXRpb24pLCBnZGtEcmFnQWN0aW9uVG9EcmFnT3BlcmF0
aW9uKGdka19kcmFnX2NvbnRleHRfZ2V0X2FjdGlvbnMoY29udGV4dCkpKTsKLSAgICBEcmFnT3Bl
cmF0aW9uIG9wZXJhdGlvbiA9IGNvcmUod2ViVmlldyktPmRyYWdDb250cm9sbGVyKCktPmRyYWdV
cGRhdGVkKCZkcmFnRGF0YSk7CisgICAgRHJhZ09wZXJhdGlvbiBvcGVyYXRpb24gPSBjb3JlKHdl
YlZpZXcpLT5kcmFnQ29udHJvbGxlcigpLT5kcmFnVXBkYXRlZChkcmFnRGF0YS5nZXQoKSk7CiAg
ICAgZ2RrX2RyYWdfc3RhdHVzKGNvbnRleHQsIGRyYWdPcGVyYXRpb25Ub1NpbmdsZUdka0RyYWdB
Y3Rpb24ob3BlcmF0aW9uKSwgdGltZSk7Ci0KICAgICByZXR1cm4gVFJVRTsKIH0KIAogc3RhdGlj
IHZvaWQgd2Via2l0X3dlYl92aWV3X2RyYWdfZGF0YV9yZWNlaXZlZChHdGtXaWRnZXQqIHdpZGdl
dCwgR2RrRHJhZ0NvbnRleHQqIGNvbnRleHQsIGdpbnQgeCwgZ2ludCB5LCBHdGtTZWxlY3Rpb25E
YXRhKiBzZWxlY3Rpb25EYXRhLCBndWludCBpbmZvLCBndWludCB0aW1lKQogewogICAgIFdlYktp
dFdlYlZpZXcqIHdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2lkZ2V0KTsKLSAgICBXZWJLaXRX
ZWJWaWV3UHJpdmF0ZSogcHJpdiA9IHdlYlZpZXctPnByaXY7Ci0KLSAgICBpZiAoIXByaXYtPmRy
b3BwaW5nQ29udGV4dHMuY29udGFpbnMoY29udGV4dCkpCisgICAgT3duUHRyPERyYWdEYXRhPiBk
cmFnRGF0YSh3ZWJWaWV3LT5wcml2LT5kcmFnQW5kRHJvcEdsdWUuaGFuZGxlRHJhZ0RhdGFSZWNl
aXZlZChjb250ZXh0LCBzZWxlY3Rpb25EYXRhLCBpbmZvKSk7CisgICAgaWYgKCFkcmFnRGF0YSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgRHJvcHBpbmdDb250ZXh0KiBkcm9wcGluZ0NvbnRleHQg
PSBwcml2LT5kcm9wcGluZ0NvbnRleHRzLmdldChjb250ZXh0KTsKLSAgICBkcm9wcGluZ0NvbnRl
eHQtPnBlbmRpbmdEYXRhUmVxdWVzdHMtLTsKLSAgICBQYXN0ZWJvYXJkSGVscGVyOjpkZWZhdWx0
UGFzdGVib2FyZEhlbHBlcigpLT5maWxsRGF0YU9iamVjdEZyb21Ecm9wRGF0YShzZWxlY3Rpb25E
YXRhLCBpbmZvLCBkcm9wcGluZ0NvbnRleHQtPmRhdGFPYmplY3QuZ2V0KCkpOwotCi0gICAgaWYg
KGRyb3BwaW5nQ29udGV4dC0+cGVuZGluZ0RhdGFSZXF1ZXN0cykKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgLy8gVGhlIGNvb3JkaW5hdGVzIHBhc3NlZCB0byBkcmFnLWRhdGEtcmVjZWl2ZWQgc2ln
bmFsIGFyZSBzb21ldGltZXMKLSAgICAvLyBpbmFjY3VyYXRlIGluIERSVCwgc28gdXNlIHRoZSBj
b29yZGluYXRlcyBvZiB0aGUgbGFzdCBtb3Rpb24gZXZlbnQuCi0gICAgY29uc3QgSW50UG9pbnQm
IHBvc2l0aW9uID0gZHJvcHBpbmdDb250ZXh0LT5sYXN0TW90aW9uUG9zaXRpb247Ci0KLSAgICAv
LyBJZiB0aGVyZSBhcmUgbm8gbW9yZSBwZW5kaW5nIHJlcXVlc3RzLCBzdGFydCBzZW5kaW5nIGRy
YWdnaW5nIGRhdGEgdG8gV2ViQ29yZS4KLSAgICBEcmFnRGF0YSBkcmFnRGF0YShkcm9wcGluZ0Nv
bnRleHQtPmRhdGFPYmplY3QuZ2V0KCksIHBvc2l0aW9uLCBjb252ZXJ0V2lkZ2V0UG9pbnRUb1Nj
cmVlblBvaW50KHdpZGdldCwgcG9zaXRpb24pLCBnZGtEcmFnQWN0aW9uVG9EcmFnT3BlcmF0aW9u
KGdka19kcmFnX2NvbnRleHRfZ2V0X2FjdGlvbnMoY29udGV4dCkpKTsKLSAgICBEcmFnT3BlcmF0
aW9uIG9wZXJhdGlvbiA9IGNvcmUod2ViVmlldyktPmRyYWdDb250cm9sbGVyKCktPmRyYWdFbnRl
cmVkKCZkcmFnRGF0YSk7CisgICAgRHJhZ09wZXJhdGlvbiBvcGVyYXRpb24gPSBjb3JlKHdlYlZp
ZXcpLT5kcmFnQ29udHJvbGxlcigpLT5kcmFnRW50ZXJlZChkcmFnRGF0YS5nZXQoKSk7CiAgICAg
Z2RrX2RyYWdfc3RhdHVzKGNvbnRleHQsIGRyYWdPcGVyYXRpb25Ub1NpbmdsZUdka0RyYWdBY3Rp
b24ob3BlcmF0aW9uKSwgdGltZSk7CiB9CiAKIHN0YXRpYyBnYm9vbGVhbiB3ZWJraXRfd2ViX3Zp
ZXdfZHJhZ19kcm9wKEd0a1dpZGdldCogd2lkZ2V0LCBHZGtEcmFnQ29udGV4dCogY29udGV4dCwg
Z2ludCB4LCBnaW50IHksIGd1aW50IHRpbWUpCiB7CiAgICAgV2ViS2l0V2ViVmlldyogd2ViVmll
dyA9IFdFQktJVF9XRUJfVklFVyh3aWRnZXQpOwotICAgIFdlYktpdFdlYlZpZXdQcml2YXRlKiBw
cml2ID0gd2ViVmlldy0+cHJpdjsKLQotICAgIGlmICghcHJpdi0+ZHJvcHBpbmdDb250ZXh0cy5j
b250YWlucyhjb250ZXh0KSkKKyAgICBPd25QdHI8RHJhZ0RhdGE+IGRyYWdEYXRhKHdlYlZpZXct
PnByaXYtPmRyYWdBbmREcm9wR2x1ZS5oYW5kbGVEcmFnRHJvcChjb250ZXh0LCBJbnRQb2ludCh4
LCB5KSkpOworICAgIGlmICghZHJhZ0RhdGEpCiAgICAgICAgIHJldHVybiBGQUxTRTsKIAotICAg
IERyb3BwaW5nQ29udGV4dCogZHJvcHBpbmdDb250ZXh0ID0gcHJpdi0+ZHJvcHBpbmdDb250ZXh0
cy5nZXQoY29udGV4dCk7Ci0gICAgZHJvcHBpbmdDb250ZXh0LT5kcm9wSGFwcGVuZWQgPSB0cnVl
OwotCi0gICAgSW50UG9pbnQgcG9zaXRpb24oeCwgeSk7Ci0gICAgRHJhZ0RhdGEgZHJhZ0RhdGEo
ZHJvcHBpbmdDb250ZXh0LT5kYXRhT2JqZWN0LmdldCgpLCBwb3NpdGlvbiwgY29udmVydFdpZGdl
dFBvaW50VG9TY3JlZW5Qb2ludCh3aWRnZXQsIHBvc2l0aW9uKSwgZ2RrRHJhZ0FjdGlvblRvRHJh
Z09wZXJhdGlvbihnZGtfZHJhZ19jb250ZXh0X2dldF9hY3Rpb25zKGNvbnRleHQpKSk7Ci0gICAg
Y29yZSh3ZWJWaWV3KS0+ZHJhZ0NvbnRyb2xsZXIoKS0+cGVyZm9ybURyYWcoJmRyYWdEYXRhKTsK
LQorICAgIGNvcmUod2ViVmlldyktPmRyYWdDb250cm9sbGVyKCktPnBlcmZvcm1EcmFnKGRyYWdE
YXRhLmdldCgpKTsKICAgICBndGtfZHJhZ19maW5pc2goY29udGV4dCwgVFJVRSwgRkFMU0UsIHRp
bWUpOwogICAgIHJldHVybiBUUlVFOwogfQpAQCAtMzQzOSw2ICszMzQ4LDcgQEAgc3RhdGljIHZv
aWQgd2Via2l0X3dlYl92aWV3X2luaXQoV2ViS2l0V2ViVmlldyogd2ViVmlldykKIAogICAgIHBy
aXYtPnN1YlJlc291cmNlcyA9IGFkb3B0R1JlZihnX2hhc2hfdGFibGVfbmV3X2Z1bGwoZ19zdHJf
aGFzaCwgZ19zdHJfZXF1YWwsIGdfZnJlZSwgZ19vYmplY3RfdW5yZWYpKTsKIAorICAgIHByaXYt
PmRyYWdBbmREcm9wR2x1ZS5zZXRXaWRnZXQoR1RLX1dJREdFVCh3ZWJWaWV3KSk7CiAgICAgZ3Rr
X2RyYWdfZGVzdF9zZXQoR1RLX1dJREdFVCh3ZWJWaWV3KSwgc3RhdGljX2Nhc3Q8R3RrRGVzdERl
ZmF1bHRzPigwKSwgMCwgMCwgc3RhdGljX2Nhc3Q8R2RrRHJhZ0FjdGlvbj4oR0RLX0FDVElPTl9D
T1BZIHwgR0RLX0FDVElPTl9DT1BZIHwgR0RLX0FDVElPTl9NT1ZFIHwgR0RLX0FDVElPTl9MSU5L
IHwgR0RLX0FDVElPTl9QUklWQVRFKSk7CiAgICAgZ3RrX2RyYWdfZGVzdF9zZXRfdGFyZ2V0X2xp
c3QoR1RLX1dJREdFVCh3ZWJWaWV3KSwgUGFzdGVib2FyZEhlbHBlcjo6ZGVmYXVsdFBhc3RlYm9h
cmRIZWxwZXIoKS0+dGFyZ2V0TGlzdCgpKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9n
dGsvd2Via2l0L3dlYmtpdHdlYnZpZXdwcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJr
aXQvd2Via2l0d2Vidmlld3ByaXZhdGUuaAppbmRleCA0OGI0NzE0NjY5MjEwZGQ4NGRhZmY3ZDg3
NzY0MjQ4ZDA4M2ZlZGJlLi5hOGE3ZWY4YjhjNGI2M2QyN2UwZmFiMWZlYjk2YjhiNDYzMDE0ZDc0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlld3ByaXZh
dGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlld3ByaXZhdGUu
aApAQCAtMjMsMjkgKzIzLDE3IEBACiAjaWZuZGVmIHdlYmtpdHdlYnZpZXdwcml2YXRlX2gKICNk
ZWZpbmUgd2Via2l0d2Vidmlld3ByaXZhdGVfaAogCi0jaW5jbHVkZSAiRGF0YU9iamVjdEd0ay5o
IgogI2luY2x1ZGUgIkZ1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJHdGtD
bGlja0NvdW50ZXIuaCIKKyNpbmNsdWRlICJHdGtXaWRnZXREcmFnQW5kRHJvcEdsdWUuaCIKICNp
bmNsdWRlICJHT3duUHRyLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlJlc291cmNl
SGFuZGxlLmgiCiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdHdlYnZpZXcuaD4KIAogbmFtZXNwYWNl
IFdlYktpdCB7Ci0KIFdlYkNvcmU6OlBhZ2UqIGNvcmUoV2ViS2l0V2ViVmlldyopOwogV2ViS2l0
V2ViVmlldyoga2l0KFdlYkNvcmU6OlBhZ2UqKTsKLQotCi10eXBlZGVmIHN0cnVjdCBEcm9wcGlu
Z0NvbnRleHRfIHsKLSAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3OwotICAgIEdka0RyYWdDb250
ZXh0KiBnZGtDb250ZXh0OwotICAgIFJlZlB0cjxXZWJDb3JlOjpEYXRhT2JqZWN0R3RrPiBkYXRh
T2JqZWN0OwotICAgIFdlYkNvcmU6OkludFBvaW50IGxhc3RNb3Rpb25Qb3NpdGlvbjsKLSAgICBp
bnQgcGVuZGluZ0RhdGFSZXF1ZXN0czsKLSAgICBib29sIGRyb3BIYXBwZW5lZDsKLX0gRHJvcHBp
bmdDb250ZXh0OwotCiB9CiAKIGV4dGVybiAiQyIgewpAQCAtMTAwLDkgKzg4LDcgQEAgc3RydWN0
IF9XZWJLaXRXZWJWaWV3UHJpdmF0ZSB7CiAgICAgV2ViQ29yZTo6SW50UmVjdCB0b29sdGlwQXJl
YTsKIAogICAgIFdlYkNvcmU6Okd0a0NsaWNrQ291bnRlciBjbGlja0NvdW50ZXI7Ci0gICAgSGFz
aE1hcDxHZGtEcmFnQ29udGV4dCosIFJlZlB0cjxXZWJDb3JlOjpEYXRhT2JqZWN0R3RrPiA+IGRy
YWdnaW5nRGF0YU9iamVjdHM7Ci0gICAgSGFzaE1hcDxHZGtEcmFnQ29udGV4dCosIFdlYktpdDo6
RHJvcHBpbmdDb250ZXh0Kj4gZHJvcHBpbmdDb250ZXh0czsKLQorICAgIFdlYkNvcmU6Okd0a1dp
ZGdldERyYWdBbmREcm9wR2x1ZSBkcmFnQW5kRHJvcEdsdWU7CiAgICAgYm9vbCBzZWxmU2Nyb2xs
aW5nOwogfTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>107343</attachid>
            <date>2011-09-14 09:41:07 -0700</date>
            <delta_ts>2011-09-14 21:54:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-66890-20110914094101.patch</filename>
            <type>text/plain</type>
            <size>15777</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTUwOTQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAzMDEzODM3YTg0MWQ1NzQy
NTIxNTNmOTIxYjgzZjI0YTAwZTE3ZmRkLi43ZmE2NThhMDVlZjQxYzM5ODE0MDMyOWEyMWUxMzVm
MTRjMDI3Y2NkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTEtMDktMTQgIE1hcnRp
biBSb2JpbnNvbiAgPG1yb2JpbnNvbkBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdIE1vdmUg
ZHJhZy1hbmQtZHJvcCBjb2RlIHdoaWNoIGNhbiBiZSBzaGFyZWQgd2l0aCBXZWJLaXQyIHRvIFdl
YkNvcmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY2
ODkwCisKKyAgICAgICAgQWRkZWQgYSBHdGtXaWRnZXREcmFnQW5kRHJvcEdsdWUgY2xhc3MgdG8g
aG9sZCBhbGwgdGhlIGxvZ2ljIHRoYXQgaXMgY29tbW9uCisgICAgICAgIGJldHdlZW4gV2ViS2l0
MSBhbmQgV2ViS2l0Mi4gVGhpcyB3aWxsIGFsbG93IGdyZWF0ZXIgY29kZSBzaGFyaW5nIGJldHdl
ZW4KKyAgICAgICAgdGhlIHR3byBwb3J0cy4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMuIFRoaXMgcGF0Y2ggc2hvdWxkIG5vdCBj
aGFuZ2UgYmVoYXZpb3IuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOiBBZGRlZCB0
aGUgR3RrV2lkZ2V0RHJhZ0FuZERyb3BHbHVlIHRvIHRoZSBzb3VyY2VzIGxpc3QuCisgICAgICAg
ICogcGxhdGZvcm0vZ3RrL0d0a1dpZGdldERyYWdBbmREcm9wR2x1ZS5jcHA6IEFkZGVkLgorICAg
ICAgICAqIHBsYXRmb3JtL2d0ay9HdGtXaWRnZXREcmFnQW5kRHJvcEdsdWUuaDogQWRkZWQuCisK
IDIwMTEtMDktMTMgIFBhdmVsIEZlbGRtYW4gIDxwZmVsZG1hbkBnb29nbGUuY29tPgogCiAgICAg
ICAgIFdlYiBJbnNwZWN0b3I6IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZnJhbWVEZXN0cm95
ZWQgaXMgY2FsbGVkIGFmdGVyIG1fcGFnZSBoYXMgYmVlbiByZXNldC4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtl
ZmlsZS5saXN0LmFtCmluZGV4IDllNWUzYTk0ZTE0ZmNhOTk3NzIwMDI5YjZjYmYzZDZhNDQwNmFi
MWQuLmE2ODhhNzI2ODhhYmZkMzMxMWRhMzA4Mjc1Zjg1NjFmZWIwYTIxZjYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNlL1dlYkNvcmUv
R05VbWFrZWZpbGUubGlzdC5hbQpAQCAtMzk4Niw2ICszOTg2LDggQEAgd2ViY29yZWd0a19zb3Vy
Y2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrVXRpbGl0aWVzLmggXAog
CVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtXaWRnZXRCYWNraW5nU3RvcmVDYWlyby5j
cHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtXaWRnZXRCYWNraW5nU3RvcmVY
MTEuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrRHJhZ0FuZERyb3BIZWxw
ZXIuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrRHJhZ0FuZERyb3BIZWxw
ZXIuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0dlb2xvY2F0aW9uU2VydmljZUd0
ay5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HZW9sb2NhdGlvblNlcnZpY2VH
dGsuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0dPd25QdHJHdGsuY3BwIFwKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvZ3Rr
L0NoYW5nZUxvZwppbmRleCBhM2M4MmYzN2Y5NGRlMjI4OGFiYTZkODEzMzMzNmU1NDJmNzc2MzU5
Li4zOGM5MTc0YTRlNTIzZTI5OGExYzA0OGRlNDdmNjA4ZTM5YjdhZGFhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTEtMDktMTQgIE1hcnRpbiBSb2JpbnNvbiAgPG1yb2Jp
bnNvbkBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdIE1vdmUgZHJhZy1hbmQtZHJvcCBjb2Rl
IHdoaWNoIGNhbiBiZSBzaGFyZWQgd2l0aCBXZWJLaXQyIHRvIFdlYkNvcmUKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY2ODkwCisKKyAgICAgICAgVXNl
IHRoZSBuZXcgR3RrV2lkZ2V0RHJhZ0FuZERyb3BHbHVlIGNsYXNzIHRvIGhvbGQgdGhlIGxvZ2lj
IHRoYXQgd2lsbCBiZQorICAgICAgICBjb21tb24gYmV0d2VlbiBXZWJLaXQxIGFuZCBXZWJLaXQy
LiBNb2RpZnkgV2ViS2l0V2ViVmlldyB0byB1c2UgdGhpcyBjbGFzcy4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0RyYWdD
bGllbnRHdGsuY3BwOgorICAgICAgICAoV2ViS2l0OjpEcmFnQ2xpZW50OjpzdGFydERyYWcpOiBJ
bmZvcm0gdGhlIGRyYWctYW5kLWRyb3AgZ2x1ZSBhYm91dCB0aGUgZHJhZy4KKyAgICAgICAgKiB3
ZWJraXQvd2Via2l0d2Vidmlldy5jcHA6IFVzZSBHdGtXaWRnZXREcmFnQW5kRHJvcEdsdWUgd2hl
cmV2ZXIgdGhpcyBjbGFzcyB3YXMKKyAgICAgICAgbWFpbnRhaW5pbmcgZHJhZy1hbmQtZHJvcCBz
dGF0ZSBpdHNlbGYuCisgICAgICAgICogd2Via2l0L3dlYmtpdHdlYnZpZXdwcml2YXRlLmg6IFN3
YXAgb3V0IHRoZSBkcmFnLWFuZC1kcm9wIHN0YXRlIGZvciBhbiBpbnN0YW5jZQorICAgICAgICBv
ZiB0aGUgZ2x1ZSBjbGFzcy4KKwogMjAxMS0wOS0xMCAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJr
aXQub3JnPgogCiAgICAgICAgIEZpeCBidWlsZCBicmVhay4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0RyYWdDbGllbnRHdGsuY3BwIGIvU291cmNlL1dlYktp
dC9ndGsvV2ViQ29yZVN1cHBvcnQvRHJhZ0NsaWVudEd0ay5jcHAKaW5kZXggNDFhYzZlOTY3MDYy
MjBkMzBkYjllNGE1NDhhNDM1NDAxYmQxMTU3Ni4uMjBjOGQ3N2I5ZGIzZTM1MWRmMjUzN2IwMWNm
ZmEzYzE3ZTNiN2M1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBv
cnQvRHJhZ0NsaWVudEd0ay5jcHAKKysrIGIvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBv
cnQvRHJhZ0NsaWVudEd0ay5jcHAKQEAgLTEwNyw3ICsxMDcsNyBAQCB2b2lkIERyYWdDbGllbnQ6
OnN0YXJ0RHJhZyhEcmFnSW1hZ2VSZWYgaW1hZ2UsIGNvbnN0IEludFBvaW50JiBkcmFnSW1hZ2VP
cmlnaW4sCiAgICAgR093blB0cjxHZGtFdmVudD4gY3VycmVudEV2ZW50KGd0a19nZXRfY3VycmVu
dF9ldmVudCgpKTsKIAogICAgIEdka0RyYWdDb250ZXh0KiBjb250ZXh0ID0gZ3RrX2RyYWdfYmVn
aW4oR1RLX1dJREdFVChtX3dlYlZpZXcpLCB0YXJnZXRMaXN0LmdldCgpLCBkcmFnT3BlcmF0aW9u
VG9HZGtEcmFnQWN0aW9ucyhjbGlwYm9hcmQtPnNvdXJjZU9wZXJhdGlvbigpKSwgMSwgY3VycmVu
dEV2ZW50LmdldCgpKTsKLSAgICB3ZWJWaWV3LT5wcml2LT5kcmFnZ2luZ0RhdGFPYmplY3RzLnNl
dChjb250ZXh0LCBkYXRhT2JqZWN0KTsKKyAgICB3ZWJWaWV3LT5wcml2LT5kcmFnQW5kRHJvcEhl
bHBlci5zdGFydGVkRHJhZyhjb250ZXh0LCBkYXRhT2JqZWN0LmdldCgpKTsKIAogICAgIC8vIEEg
ZHJhZyBzdGFydGluZyBzaG91bGQgcHJldmVudCBhIGRvdWJsZS1jbGljayBmcm9tIGhhcHBlbmlu
Zy4gVGhpcyBtaWdodAogICAgIC8vIGhhcHBlbiBpZiBhIGRyYWcgaXMgZm9sbG93ZWQgdmVyeSBx
dWlja2x5IGJ5IGFub3RoZXIgY2xpY2sgKGxpa2UgaW4gdGhlIERSVCkuCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0
L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHAKaW5kZXggZTJlZGQ4NDljNmIyY2Q5ZDYwZjA0
ZmNjNjA1ZDlkMzk1NWU3NmRiZC4uMzQ3NGNhNjFmYzdhMTQ2YjY4N2NhMmFhMGVkYWJiN2Q5NDU2
OTJlYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcApAQCAt
Nzc5LDcgKzc3OSw4IEBAIHN0YXRpYyBnYm9vbGVhbiB3ZWJraXRfd2ViX3ZpZXdfYnV0dG9uX3By
ZXNzX2V2ZW50KEd0a1dpZGdldCogd2lkZ2V0LCBHZGtFdmVudEJ1CiAgICAgICAgIHJldHVybiBU
UlVFOwogCiAgICAgUGxhdGZvcm1Nb3VzZUV2ZW50IHBsYXRmb3JtRXZlbnQoZXZlbnQpOwotICAg
IHBsYXRmb3JtRXZlbnQuc2V0Q2xpY2tDb3VudChwcml2LT5jbGlja0NvdW50ZXIuY2xpY2tDb3Vu
dEZvckdka0J1dHRvbkV2ZW50KHdpZGdldCwgZXZlbnQpKTsKKyAgICBpbnQgY291bnQgPSBwcml2
LT5jbGlja0NvdW50ZXIuY2xpY2tDb3VudEZvckdka0J1dHRvbkV2ZW50KHdpZGdldCwgZXZlbnQp
OworICAgIHBsYXRmb3JtRXZlbnQuc2V0Q2xpY2tDb3VudChjb3VudCk7CiAKICAgICBpZiAoZXZl
bnQtPmJ1dHRvbiA9PSAzKQogICAgICAgICByZXR1cm4gd2Via2l0X3dlYl92aWV3X2ZvcndhcmRf
Y29udGV4dF9tZW51X2V2ZW50KHdlYlZpZXcsIFBsYXRmb3JtTW91c2VFdmVudChldmVudCkpOwpA
QCAtMTMzNCwxMSArMTMzNSw2IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfdmlld19kaXNwb3Nl
KEdPYmplY3QqIG9iamVjdCkKICAgICBwcml2LT5tYWluUmVzb3VyY2UuY2xlYXIoKTsKICAgICBw
cml2LT5zdWJSZXNvdXJjZXMuY2xlYXIoKTsKIAotICAgIEhhc2hNYXA8R2RrRHJhZ0NvbnRleHQq
LCBEcm9wcGluZ0NvbnRleHQqPjo6aXRlcmF0b3IgZW5kRHJvcHBpbmdDb250ZXh0cyA9IHByaXYt
PmRyb3BwaW5nQ29udGV4dHMuZW5kKCk7Ci0gICAgZm9yIChIYXNoTWFwPEdka0RyYWdDb250ZXh0
KiwgRHJvcHBpbmdDb250ZXh0Kj46Oml0ZXJhdG9yIGl0ZXIgPSBwcml2LT5kcm9wcGluZ0NvbnRl
eHRzLmJlZ2luKCk7IGl0ZXIgIT0gZW5kRHJvcHBpbmdDb250ZXh0czsgKytpdGVyKQotICAgICAg
ICBkZWxldGUgKGl0ZXItPnNlY29uZCk7Ci0gICAgcHJpdi0+ZHJvcHBpbmdDb250ZXh0cy5jbGVh
cigpOwotCiAgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X3dlYl92aWV3X3BhcmVudF9jbGFzcykt
PmRpc3Bvc2Uob2JqZWN0KTsKIH0KIApAQCAtMTQ1MSwxOSArMTQ0NywxNCBAQCBzdGF0aWMgdm9p
ZCB3ZWJraXRfd2ViX3ZpZXdfc2NyZWVuX2NoYW5nZWQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdka1Nj
cmVlbiogcHJldmlvdQogc3RhdGljIHZvaWQgd2Via2l0X3dlYl92aWV3X2RyYWdfZW5kKEd0a1dp
ZGdldCogd2lkZ2V0LCBHZGtEcmFnQ29udGV4dCogY29udGV4dCkKIHsKICAgICBXZWJLaXRXZWJW
aWV3KiB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdpZGdldCk7Ci0gICAgV2ViS2l0V2ViVmll
d1ByaXZhdGUqIHByaXYgPSB3ZWJWaWV3LT5wcml2OwotCi0gICAgLy8gVGhpcyBtaWdodCBoYXBw
ZW4gaWYgYSBkcmFnIGlzIHN0aWxsIGluIHByb2dyZXNzIGFmdGVyIGEgV2ViS2l0V2ViVmlldwot
ICAgIC8vIGlzIGRpc3Bvc2VkIGFuZCBiZWZvcmUgaXQgaXMgZmluYWxpemVkLgotICAgIGlmICgh
cHJpdi0+ZHJhZ2dpbmdEYXRhT2JqZWN0cy5jb250YWlucyhjb250ZXh0KSkKKyAgICBpZiAoIXdl
YlZpZXctPnByaXYtPmRyYWdBbmREcm9wSGVscGVyLmhhbmRsZURyYWdFbmQoY29udGV4dCkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIHByaXYtPmRyYWdnaW5nRGF0YU9iamVjdHMucmVtb3ZlKGNv
bnRleHQpOwotCiAgICAgRnJhbWUqIGZyYW1lID0gY29yZSh3ZWJWaWV3KS0+Zm9jdXNDb250cm9s
bGVyKCktPmZvY3VzZWRPck1haW5GcmFtZSgpOwogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJl
dHVybjsKIAorICAgIC8vIFN5bnRoZXNpemUgYSBidXR0b24gcmVsZWFzZSBldmVudCB0byBzZW5k
IHdpdGggdGhlIGRyYWcgZW5kIGFjdGlvbi4KICAgICBHT3duUHRyPEdka0V2ZW50PiBldmVudChn
ZGtfZXZlbnRfbmV3KEdES19CVVRUT05fUkVMRUFTRSkpOwogICAgIGludCB4LCB5LCB4Um9vdCwg
eVJvb3Q7CiAgICAgR2RrTW9kaWZpZXJUeXBlIG1vZGlmaWVycyA9IHN0YXRpY19jYXN0PEdka01v
ZGlmaWVyVHlwZT4oMCk7CkBAIC0xNDkxLDEzNiArMTQ4Miw1NCBAQCBzdGF0aWMgdm9pZCB3ZWJr
aXRfd2ViX3ZpZXdfZHJhZ19lbmQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0RyYWdDb250ZXh0KiBj
b250ZXh0KQogCiBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfZHJhZ19kYXRhX2dldChHdGtX
aWRnZXQqIHdpZGdldCwgR2RrRHJhZ0NvbnRleHQqIGNvbnRleHQsIEd0a1NlbGVjdGlvbkRhdGEq
IHNlbGVjdGlvbkRhdGEsIGd1aW50IGluZm8sIGd1aW50KQogewotICAgIFdlYktpdFdlYlZpZXdQ
cml2YXRlKiBwcml2ID0gV0VCS0lUX1dFQl9WSUVXKHdpZGdldCktPnByaXY7Ci0KLSAgICAvLyBU
aGlzIG1pZ2h0IGhhcHBlbiBpZiBhIGRyYWcgaXMgc3RpbGwgaW4gcHJvZ3Jlc3MgYWZ0ZXIgYSBX
ZWJLaXRXZWJWaWV3Ci0gICAgLy8gaXMgZGlwb3NlZCBhbmQgYmVmb3JlIGl0IGlzIGZpbmFsaXpl
ZC4KLSAgICBpZiAoIXByaXYtPmRyYWdnaW5nRGF0YU9iamVjdHMuY29udGFpbnMoY29udGV4dCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIFBhc3RlYm9hcmRIZWxwZXI6OmRlZmF1bHRQYXN0ZWJv
YXJkSGVscGVyKCktPmZpbGxTZWxlY3Rpb25EYXRhKHNlbGVjdGlvbkRhdGEsIGluZm8sIHByaXYt
PmRyYWdnaW5nRGF0YU9iamVjdHMuZ2V0KGNvbnRleHQpLmdldCgpKTsKKyAgICBXRUJLSVRfV0VC
X1ZJRVcod2lkZ2V0KS0+cHJpdi0+ZHJhZ0FuZERyb3BIZWxwZXIuaGFuZGxlR2V0RHJhZ0RhdGEo
Y29udGV4dCwgc2VsZWN0aW9uRGF0YSwgaW5mbyk7CiB9CiAKLXN0YXRpYyBnYm9vbGVhbiBkb0Ry
YWdMZWF2ZUxhdGVyKERyb3BwaW5nQ29udGV4dCogY29udGV4dCkKK3N0YXRpYyB2b2lkIGRyYWdF
eGl0ZWRDYWxsYmFjayhHdGtXaWRnZXQqIHdpZGdldCwgRHJhZ0RhdGEqIGRyYWdEYXRhLCBib29s
IGRyb3BIYXBwZW5lZCkKIHsKLSAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gY29udGV4dC0+
d2ViVmlldzsKLSAgICBXZWJLaXRXZWJWaWV3UHJpdmF0ZSogcHJpdiA9IHdlYlZpZXctPnByaXY7
Ci0KLSAgICBpZiAoIXByaXYtPmRyb3BwaW5nQ29udGV4dHMuY29udGFpbnMoY29udGV4dC0+Z2Rr
Q29udGV4dCkpCi0gICAgICAgIHJldHVybiBGQUxTRTsKLQotICAgIC8vIElmIHRoZSB2aWV3IGRv
ZXNuJ3Qga25vdyBhYm91dCB0aGUgZHJhZyB5ZXQgKHRoZXJlIGFyZSBzdGlsbCBwZW5kaW5nIGRh
dGEpCi0gICAgLy8gcmVxdWVzdHMsIGRvbid0IHVwZGF0ZSBpdCB3aXRoIGluZm9ybWF0aW9uIGFi
b3V0IHRoZSBkcmFnLgotICAgIGlmIChjb250ZXh0LT5wZW5kaW5nRGF0YVJlcXVlc3RzKQotICAg
ICAgICByZXR1cm4gRkFMU0U7Ci0KICAgICAvLyBEb24ndCBjYWxsIGRyYWdFeGl0ZWQgaWYgd2Ug
aGF2ZSBqdXN0IHJlY2VpdmVkIGEgZHJhZy1kcm9wIHNpZ25hbC4gVGhpcwogICAgIC8vIGhhcHBl
bnMgaW4gdGhlIGNhc2Ugb2YgYSBzdWNjZXNzZnVsIGRyb3Agb250byB0aGUgdmlldy4KLSAgICBp
ZiAoIWNvbnRleHQtPmRyb3BIYXBwZW5lZCkgewotICAgICAgICBjb25zdCBJbnRQb2ludCYgcG9z
aXRpb24gPSBjb250ZXh0LT5sYXN0TW90aW9uUG9zaXRpb247Ci0gICAgICAgIERyYWdEYXRhIGRy
YWdEYXRhKGNvbnRleHQtPmRhdGFPYmplY3QuZ2V0KCksIHBvc2l0aW9uLCBjb252ZXJ0V2lkZ2V0
UG9pbnRUb1NjcmVlblBvaW50KEdUS19XSURHRVQod2ViVmlldyksIHBvc2l0aW9uKSwgRHJhZ09w
ZXJhdGlvbk5vbmUpOwotICAgICAgICBjb3JlKHdlYlZpZXcpLT5kcmFnQ29udHJvbGxlcigpLT5k
cmFnRXhpdGVkKCZkcmFnRGF0YSk7Ci0gICAgfQotCi0gICAgY29yZSh3ZWJWaWV3KS0+ZHJhZ0Nv
bnRyb2xsZXIoKS0+ZHJhZ0VuZGVkKCk7Ci0gICAgcHJpdi0+ZHJvcHBpbmdDb250ZXh0cy5yZW1v
dmUoY29udGV4dC0+Z2RrQ29udGV4dCk7Ci0gICAgZGVsZXRlIGNvbnRleHQ7Ci0gICAgcmV0dXJu
IEZBTFNFOworICAgIGlmICghZHJvcEhhcHBlbmVkKQorICAgICAgICBjb3JlKFdFQktJVF9XRUJf
VklFVyh3aWRnZXQpKS0+ZHJhZ0NvbnRyb2xsZXIoKS0+ZHJhZ0V4aXRlZChkcmFnRGF0YSk7Cisg
ICAgY29yZShXRUJLSVRfV0VCX1ZJRVcod2lkZ2V0KSktPmRyYWdDb250cm9sbGVyKCktPmRyYWdF
bmRlZCgpOwogfQogCiBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfZHJhZ19sZWF2ZShHdGtX
aWRnZXQqIHdpZGdldCwgR2RrRHJhZ0NvbnRleHQqIGNvbnRleHQsIGd1aW50IHRpbWUpCiB7Ci0g
ICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3aWRnZXQpOwotICAg
IFdlYktpdFdlYlZpZXdQcml2YXRlKiBwcml2ID0gd2ViVmlldy0+cHJpdjsKLQotICAgIGlmICgh
cHJpdi0+ZHJvcHBpbmdDb250ZXh0cy5jb250YWlucyhjb250ZXh0KSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgLy8gRHVyaW5nIGEgZHJvcCBHVEsrIHdpbGwgZmlyZSBhIGRyYWctbGVhdmUgc2ln
bmFsIHJpZ2h0IGJlZm9yZSBmaXJpbmcKLSAgICAvLyB0aGUgZHJhZy1kcm9wIHNpZ25hbC4gV2Ug
d2FudCB0aGUgYWN0aW9ucyBmb3IgZHJhZy1sZWF2ZSB0byBoYXBwZW4gYWZ0ZXIKLSAgICAvLyB0
aG9zZSBmb3IgZHJhZy1kcm9wLCBzbyBzY2hlZHVsZSB0aGVtIHRvIGhhcHBlbiBhc3luY2hyb25v
dXNseSBoZXJlLgotICAgIGdfdGltZW91dF9hZGQoMCwgcmVpbnRlcnByZXRfY2FzdDxHU291cmNl
RnVuYz4oZG9EcmFnTGVhdmVMYXRlciksIHByaXYtPmRyb3BwaW5nQ29udGV4dHMuZ2V0KGNvbnRl
eHQpKTsKKyAgICBXRUJLSVRfV0VCX1ZJRVcod2lkZ2V0KS0+cHJpdi0+ZHJhZ0FuZERyb3BIZWxw
ZXIuaGFuZGxlRHJhZ0xlYXZlKGNvbnRleHQsIGRyYWdFeGl0ZWRDYWxsYmFjayk7CiB9CiAKIHN0
YXRpYyBnYm9vbGVhbiB3ZWJraXRfd2ViX3ZpZXdfZHJhZ19tb3Rpb24oR3RrV2lkZ2V0KiB3aWRn
ZXQsIEdka0RyYWdDb250ZXh0KiBjb250ZXh0LCBnaW50IHgsIGdpbnQgeSwgZ3VpbnQgdGltZSkK
IHsKICAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdpZGdldCk7
Ci0gICAgV2ViS2l0V2ViVmlld1ByaXZhdGUqIHByaXYgPSB3ZWJWaWV3LT5wcml2OwotCi0gICAg
RHJvcHBpbmdDb250ZXh0KiBkcm9wcGluZ0NvbnRleHQgPSAwOwotICAgIEludFBvaW50IHBvc2l0
aW9uID0gSW50UG9pbnQoeCwgeSk7Ci0gICAgaWYgKCFwcml2LT5kcm9wcGluZ0NvbnRleHRzLmNv
bnRhaW5zKGNvbnRleHQpKSB7Ci0gICAgICAgIGRyb3BwaW5nQ29udGV4dCA9IG5ldyBEcm9wcGlu
Z0NvbnRleHQ7Ci0gICAgICAgIGRyb3BwaW5nQ29udGV4dC0+d2ViVmlldyA9IHdlYlZpZXc7Ci0g
ICAgICAgIGRyb3BwaW5nQ29udGV4dC0+Z2RrQ29udGV4dCA9IGNvbnRleHQ7Ci0gICAgICAgIGRy
b3BwaW5nQ29udGV4dC0+ZGF0YU9iamVjdCA9IFdlYkNvcmU6OkRhdGFPYmplY3RHdGs6OmNyZWF0
ZSgpOwotICAgICAgICBkcm9wcGluZ0NvbnRleHQtPmRyb3BIYXBwZW5lZCA9IGZhbHNlOwotICAg
ICAgICBkcm9wcGluZ0NvbnRleHQtPmxhc3RNb3Rpb25Qb3NpdGlvbiA9IHBvc2l0aW9uOwotICAg
ICAgICBwcml2LT5kcm9wcGluZ0NvbnRleHRzLnNldChjb250ZXh0LCBkcm9wcGluZ0NvbnRleHQp
OwotCi0gICAgICAgIFZlY3RvcjxHZGtBdG9tPiBhY2NlcHRhYmxlVGFyZ2V0cyhQYXN0ZWJvYXJk
SGVscGVyOjpkZWZhdWx0UGFzdGVib2FyZEhlbHBlcigpLT5kcm9wQXRvbXNGb3JDb250ZXh0KHdp
ZGdldCwgY29udGV4dCkpOwotICAgICAgICBkcm9wcGluZ0NvbnRleHQtPnBlbmRpbmdEYXRhUmVx
dWVzdHMgPSBhY2NlcHRhYmxlVGFyZ2V0cy5zaXplKCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgYWNjZXB0YWJsZVRhcmdldHMuc2l6ZSgpOyBpKyspCi0gICAgICAgICAgICBndGtf
ZHJhZ19nZXRfZGF0YSh3aWRnZXQsIGNvbnRleHQsIGFjY2VwdGFibGVUYXJnZXRzLmF0KGkpLCB0
aW1lKTsKLSAgICB9IGVsc2UgewotICAgICAgICBkcm9wcGluZ0NvbnRleHQgPSBwcml2LT5kcm9w
cGluZ0NvbnRleHRzLmdldChjb250ZXh0KTsKLSAgICAgICAgZHJvcHBpbmdDb250ZXh0LT5sYXN0
TW90aW9uUG9zaXRpb24gPSBwb3NpdGlvbjsKLSAgICB9Ci0KLSAgICAvLyBEb24ndCBzZW5kIGFu
eSBkcmFnIGluZm9ybWF0aW9uIHRvIFdlYkNvcmUgdW50aWwgd2UndmUgcmV0cmlldmVkIGFsbAot
ICAgIC8vIHRoZSBkYXRhIGZvciB0aGlzIGRyYWcgb3BlcmF0aW9uLiBPdGhlcndpc2Ugd2UnZCBo
YXZlIHRvIGJsb2NrIHRvIHdhaXQKLSAgICAvLyBmb3IgdGhlIGRyYWcncyBkYXRhLgotICAgIEFT
U0VSVChkcm9wcGluZ0NvbnRleHQpOwotICAgIGlmIChkcm9wcGluZ0NvbnRleHQtPnBlbmRpbmdE
YXRhUmVxdWVzdHMgPiAwKQorICAgIE93blB0cjxEcmFnRGF0YT4gZHJhZ0RhdGEod2ViVmlldy0+
cHJpdi0+ZHJhZ0FuZERyb3BIZWxwZXIuaGFuZGxlRHJhZ01vdGlvbihjb250ZXh0LCBJbnRQb2lu
dCh4LCB5KSwgdGltZSkpOworICAgIGlmICghZHJhZ0RhdGEpCiAgICAgICAgIHJldHVybiBUUlVF
OwogCi0gICAgRHJhZ0RhdGEgZHJhZ0RhdGEoZHJvcHBpbmdDb250ZXh0LT5kYXRhT2JqZWN0Lmdl
dCgpLCBwb3NpdGlvbiwgY29udmVydFdpZGdldFBvaW50VG9TY3JlZW5Qb2ludCh3aWRnZXQsIHBv
c2l0aW9uKSwgZ2RrRHJhZ0FjdGlvblRvRHJhZ09wZXJhdGlvbihnZGtfZHJhZ19jb250ZXh0X2dl
dF9hY3Rpb25zKGNvbnRleHQpKSk7Ci0gICAgRHJhZ09wZXJhdGlvbiBvcGVyYXRpb24gPSBjb3Jl
KHdlYlZpZXcpLT5kcmFnQ29udHJvbGxlcigpLT5kcmFnVXBkYXRlZCgmZHJhZ0RhdGEpOworICAg
IERyYWdPcGVyYXRpb24gb3BlcmF0aW9uID0gY29yZSh3ZWJWaWV3KS0+ZHJhZ0NvbnRyb2xsZXIo
KS0+ZHJhZ1VwZGF0ZWQoZHJhZ0RhdGEuZ2V0KCkpOwogICAgIGdka19kcmFnX3N0YXR1cyhjb250
ZXh0LCBkcmFnT3BlcmF0aW9uVG9TaW5nbGVHZGtEcmFnQWN0aW9uKG9wZXJhdGlvbiksIHRpbWUp
OwotCiAgICAgcmV0dXJuIFRSVUU7CiB9CiAKIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfdmlld19k
cmFnX2RhdGFfcmVjZWl2ZWQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0RyYWdDb250ZXh0KiBjb250
ZXh0LCBnaW50IHgsIGdpbnQgeSwgR3RrU2VsZWN0aW9uRGF0YSogc2VsZWN0aW9uRGF0YSwgZ3Vp
bnQgaW5mbywgZ3VpbnQgdGltZSkKIHsKICAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gV0VC
S0lUX1dFQl9WSUVXKHdpZGdldCk7Ci0gICAgV2ViS2l0V2ViVmlld1ByaXZhdGUqIHByaXYgPSB3
ZWJWaWV3LT5wcml2OwotCi0gICAgaWYgKCFwcml2LT5kcm9wcGluZ0NvbnRleHRzLmNvbnRhaW5z
KGNvbnRleHQpKQorICAgIE93blB0cjxEcmFnRGF0YT4gZHJhZ0RhdGEod2ViVmlldy0+cHJpdi0+
ZHJhZ0FuZERyb3BIZWxwZXIuaGFuZGxlRHJhZ0RhdGFSZWNlaXZlZChjb250ZXh0LCBzZWxlY3Rp
b25EYXRhLCBpbmZvKSk7CisgICAgaWYgKCFkcmFnRGF0YSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgRHJvcHBpbmdDb250ZXh0KiBkcm9wcGluZ0NvbnRleHQgPSBwcml2LT5kcm9wcGluZ0NvbnRl
eHRzLmdldChjb250ZXh0KTsKLSAgICBkcm9wcGluZ0NvbnRleHQtPnBlbmRpbmdEYXRhUmVxdWVz
dHMtLTsKLSAgICBQYXN0ZWJvYXJkSGVscGVyOjpkZWZhdWx0UGFzdGVib2FyZEhlbHBlcigpLT5m
aWxsRGF0YU9iamVjdEZyb21Ecm9wRGF0YShzZWxlY3Rpb25EYXRhLCBpbmZvLCBkcm9wcGluZ0Nv
bnRleHQtPmRhdGFPYmplY3QuZ2V0KCkpOwotCi0gICAgaWYgKGRyb3BwaW5nQ29udGV4dC0+cGVu
ZGluZ0RhdGFSZXF1ZXN0cykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gVGhlIGNvb3JkaW5h
dGVzIHBhc3NlZCB0byBkcmFnLWRhdGEtcmVjZWl2ZWQgc2lnbmFsIGFyZSBzb21ldGltZXMKLSAg
ICAvLyBpbmFjY3VyYXRlIGluIERSVCwgc28gdXNlIHRoZSBjb29yZGluYXRlcyBvZiB0aGUgbGFz
dCBtb3Rpb24gZXZlbnQuCi0gICAgY29uc3QgSW50UG9pbnQmIHBvc2l0aW9uID0gZHJvcHBpbmdD
b250ZXh0LT5sYXN0TW90aW9uUG9zaXRpb247Ci0KLSAgICAvLyBJZiB0aGVyZSBhcmUgbm8gbW9y
ZSBwZW5kaW5nIHJlcXVlc3RzLCBzdGFydCBzZW5kaW5nIGRyYWdnaW5nIGRhdGEgdG8gV2ViQ29y
ZS4KLSAgICBEcmFnRGF0YSBkcmFnRGF0YShkcm9wcGluZ0NvbnRleHQtPmRhdGFPYmplY3QuZ2V0
KCksIHBvc2l0aW9uLCBjb252ZXJ0V2lkZ2V0UG9pbnRUb1NjcmVlblBvaW50KHdpZGdldCwgcG9z
aXRpb24pLCBnZGtEcmFnQWN0aW9uVG9EcmFnT3BlcmF0aW9uKGdka19kcmFnX2NvbnRleHRfZ2V0
X2FjdGlvbnMoY29udGV4dCkpKTsKLSAgICBEcmFnT3BlcmF0aW9uIG9wZXJhdGlvbiA9IGNvcmUo
d2ViVmlldyktPmRyYWdDb250cm9sbGVyKCktPmRyYWdFbnRlcmVkKCZkcmFnRGF0YSk7CisgICAg
RHJhZ09wZXJhdGlvbiBvcGVyYXRpb24gPSBjb3JlKHdlYlZpZXcpLT5kcmFnQ29udHJvbGxlcigp
LT5kcmFnRW50ZXJlZChkcmFnRGF0YS5nZXQoKSk7CiAgICAgZ2RrX2RyYWdfc3RhdHVzKGNvbnRl
eHQsIGRyYWdPcGVyYXRpb25Ub1NpbmdsZUdka0RyYWdBY3Rpb24ob3BlcmF0aW9uKSwgdGltZSk7
CiB9CiAKIHN0YXRpYyBnYm9vbGVhbiB3ZWJraXRfd2ViX3ZpZXdfZHJhZ19kcm9wKEd0a1dpZGdl
dCogd2lkZ2V0LCBHZGtEcmFnQ29udGV4dCogY29udGV4dCwgZ2ludCB4LCBnaW50IHksIGd1aW50
IHRpbWUpCiB7CiAgICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3
aWRnZXQpOwotICAgIFdlYktpdFdlYlZpZXdQcml2YXRlKiBwcml2ID0gd2ViVmlldy0+cHJpdjsK
LQotICAgIGlmICghcHJpdi0+ZHJvcHBpbmdDb250ZXh0cy5jb250YWlucyhjb250ZXh0KSkKKyAg
ICBPd25QdHI8RHJhZ0RhdGE+IGRyYWdEYXRhKHdlYlZpZXctPnByaXYtPmRyYWdBbmREcm9wSGVs
cGVyLmhhbmRsZURyYWdEcm9wKGNvbnRleHQsIEludFBvaW50KHgsIHkpKSk7CisgICAgaWYgKCFk
cmFnRGF0YSkKICAgICAgICAgcmV0dXJuIEZBTFNFOwogCi0gICAgRHJvcHBpbmdDb250ZXh0KiBk
cm9wcGluZ0NvbnRleHQgPSBwcml2LT5kcm9wcGluZ0NvbnRleHRzLmdldChjb250ZXh0KTsKLSAg
ICBkcm9wcGluZ0NvbnRleHQtPmRyb3BIYXBwZW5lZCA9IHRydWU7Ci0KLSAgICBJbnRQb2ludCBw
b3NpdGlvbih4LCB5KTsKLSAgICBEcmFnRGF0YSBkcmFnRGF0YShkcm9wcGluZ0NvbnRleHQtPmRh
dGFPYmplY3QuZ2V0KCksIHBvc2l0aW9uLCBjb252ZXJ0V2lkZ2V0UG9pbnRUb1NjcmVlblBvaW50
KHdpZGdldCwgcG9zaXRpb24pLCBnZGtEcmFnQWN0aW9uVG9EcmFnT3BlcmF0aW9uKGdka19kcmFn
X2NvbnRleHRfZ2V0X2FjdGlvbnMoY29udGV4dCkpKTsKLSAgICBjb3JlKHdlYlZpZXcpLT5kcmFn
Q29udHJvbGxlcigpLT5wZXJmb3JtRHJhZygmZHJhZ0RhdGEpOwotCisgICAgY29yZSh3ZWJWaWV3
KS0+ZHJhZ0NvbnRyb2xsZXIoKS0+cGVyZm9ybURyYWcoZHJhZ0RhdGEuZ2V0KCkpOwogICAgIGd0
a19kcmFnX2ZpbmlzaChjb250ZXh0LCBUUlVFLCBGQUxTRSwgdGltZSk7CiAgICAgcmV0dXJuIFRS
VUU7CiB9CkBAIC0zNDM5LDYgKzMzNDgsNyBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdf
aW5pdChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQogCiAgICAgcHJpdi0+c3ViUmVzb3VyY2VzID0g
YWRvcHRHUmVmKGdfaGFzaF90YWJsZV9uZXdfZnVsbChnX3N0cl9oYXNoLCBnX3N0cl9lcXVhbCwg
Z19mcmVlLCBnX29iamVjdF91bnJlZikpOwogCisgICAgcHJpdi0+ZHJhZ0FuZERyb3BIZWxwZXIu
c2V0V2lkZ2V0KEdUS19XSURHRVQod2ViVmlldykpOwogICAgIGd0a19kcmFnX2Rlc3Rfc2V0KEdU
S19XSURHRVQod2ViVmlldyksIHN0YXRpY19jYXN0PEd0a0Rlc3REZWZhdWx0cz4oMCksIDAsIDAs
IHN0YXRpY19jYXN0PEdka0RyYWdBY3Rpb24+KEdES19BQ1RJT05fQ09QWSB8IEdES19BQ1RJT05f
Q09QWSB8IEdES19BQ1RJT05fTU9WRSB8IEdES19BQ1RJT05fTElOSyB8IEdES19BQ1RJT05fUFJJ
VkFURSkpOwogICAgIGd0a19kcmFnX2Rlc3Rfc2V0X3RhcmdldF9saXN0KEdUS19XSURHRVQod2Vi
VmlldyksIFBhc3RlYm9hcmRIZWxwZXI6OmRlZmF1bHRQYXN0ZWJvYXJkSGVscGVyKCktPnRhcmdl
dExpc3QoKSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3
ZWJ2aWV3cHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXdw
cml2YXRlLmgKaW5kZXggNDhiNDcxNDY2OTIxMGRkODRkYWZmN2Q4Nzc2NDI0OGQwODNmZWRiZS4u
OTk0NDRhYTNhODRmMWY5MTgwZWViNDgyZmM1OGRlM2ZlMWFlNmM0ZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXdwcml2YXRlLmgKKysrIGIvU291cmNl
L1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXdwcml2YXRlLmgKQEAgLTIzLDI5ICsyMywx
NyBAQAogI2lmbmRlZiB3ZWJraXR3ZWJ2aWV3cHJpdmF0ZV9oCiAjZGVmaW5lIHdlYmtpdHdlYnZp
ZXdwcml2YXRlX2gKIAotI2luY2x1ZGUgIkRhdGFPYmplY3RHdGsuaCIKICNpbmNsdWRlICJGdWxs
c2NyZWVuVmlkZW9Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiR3RrQ2xpY2tDb3VudGVyLmgiCisj
aW5jbHVkZSAiR3RrRHJhZ0FuZERyb3BIZWxwZXIuaCIKICNpbmNsdWRlICJHT3duUHRyLmgiCiAj
aW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlLmgiCiAjaW5jbHVkZSA8
d2Via2l0L3dlYmtpdHdlYnZpZXcuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7Ci0KIFdlYkNvcmU6
OlBhZ2UqIGNvcmUoV2ViS2l0V2ViVmlldyopOwogV2ViS2l0V2ViVmlldyoga2l0KFdlYkNvcmU6
OlBhZ2UqKTsKLQotCi10eXBlZGVmIHN0cnVjdCBEcm9wcGluZ0NvbnRleHRfIHsKLSAgICBXZWJL
aXRXZWJWaWV3KiB3ZWJWaWV3OwotICAgIEdka0RyYWdDb250ZXh0KiBnZGtDb250ZXh0OwotICAg
IFJlZlB0cjxXZWJDb3JlOjpEYXRhT2JqZWN0R3RrPiBkYXRhT2JqZWN0OwotICAgIFdlYkNvcmU6
OkludFBvaW50IGxhc3RNb3Rpb25Qb3NpdGlvbjsKLSAgICBpbnQgcGVuZGluZ0RhdGFSZXF1ZXN0
czsKLSAgICBib29sIGRyb3BIYXBwZW5lZDsKLX0gRHJvcHBpbmdDb250ZXh0OwotCiB9CiAKIGV4
dGVybiAiQyIgewpAQCAtMTAwLDkgKzg4LDcgQEAgc3RydWN0IF9XZWJLaXRXZWJWaWV3UHJpdmF0
ZSB7CiAgICAgV2ViQ29yZTo6SW50UmVjdCB0b29sdGlwQXJlYTsKIAogICAgIFdlYkNvcmU6Okd0
a0NsaWNrQ291bnRlciBjbGlja0NvdW50ZXI7Ci0gICAgSGFzaE1hcDxHZGtEcmFnQ29udGV4dCos
IFJlZlB0cjxXZWJDb3JlOjpEYXRhT2JqZWN0R3RrPiA+IGRyYWdnaW5nRGF0YU9iamVjdHM7Ci0g
ICAgSGFzaE1hcDxHZGtEcmFnQ29udGV4dCosIFdlYktpdDo6RHJvcHBpbmdDb250ZXh0Kj4gZHJv
cHBpbmdDb250ZXh0czsKLQorICAgIFdlYkNvcmU6Okd0a0RyYWdBbmREcm9wSGVscGVyIGRyYWdB
bmREcm9wSGVscGVyOwogICAgIGJvb2wgc2VsZlNjcm9sbGluZzsKIH07CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>107454</attachid>
            <date>2011-09-14 21:54:38 -0700</date>
            <delta_ts>2011-09-28 23:07:36 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-66890-20110914215437.patch</filename>
            <type>text/plain</type>
            <size>26829</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTUwOTQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAzMDEzODM3YTg0MWQ1NzQy
NTIxNTNmOTIxYjgzZjI0YTAwZTE3ZmRkLi43ZmE2NThhMDVlZjQxYzM5ODE0MDMyOWEyMWUxMzVm
MTRjMDI3Y2NkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTEtMDktMTQgIE1hcnRp
biBSb2JpbnNvbiAgPG1yb2JpbnNvbkBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdIE1vdmUg
ZHJhZy1hbmQtZHJvcCBjb2RlIHdoaWNoIGNhbiBiZSBzaGFyZWQgd2l0aCBXZWJLaXQyIHRvIFdl
YkNvcmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY2
ODkwCisKKyAgICAgICAgQWRkZWQgYSBHdGtXaWRnZXREcmFnQW5kRHJvcEdsdWUgY2xhc3MgdG8g
aG9sZCBhbGwgdGhlIGxvZ2ljIHRoYXQgaXMgY29tbW9uCisgICAgICAgIGJldHdlZW4gV2ViS2l0
MSBhbmQgV2ViS2l0Mi4gVGhpcyB3aWxsIGFsbG93IGdyZWF0ZXIgY29kZSBzaGFyaW5nIGJldHdl
ZW4KKyAgICAgICAgdGhlIHR3byBwb3J0cy4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMuIFRoaXMgcGF0Y2ggc2hvdWxkIG5vdCBj
aGFuZ2UgYmVoYXZpb3IuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOiBBZGRlZCB0
aGUgR3RrV2lkZ2V0RHJhZ0FuZERyb3BHbHVlIHRvIHRoZSBzb3VyY2VzIGxpc3QuCisgICAgICAg
ICogcGxhdGZvcm0vZ3RrL0d0a1dpZGdldERyYWdBbmREcm9wR2x1ZS5jcHA6IEFkZGVkLgorICAg
ICAgICAqIHBsYXRmb3JtL2d0ay9HdGtXaWRnZXREcmFnQW5kRHJvcEdsdWUuaDogQWRkZWQuCisK
IDIwMTEtMDktMTMgIFBhdmVsIEZlbGRtYW4gIDxwZmVsZG1hbkBnb29nbGUuY29tPgogCiAgICAg
ICAgIFdlYiBJbnNwZWN0b3I6IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZnJhbWVEZXN0cm95
ZWQgaXMgY2FsbGVkIGFmdGVyIG1fcGFnZSBoYXMgYmVlbiByZXNldC4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtl
ZmlsZS5saXN0LmFtCmluZGV4IDllNWUzYTk0ZTE0ZmNhOTk3NzIwMDI5YjZjYmYzZDZhNDQwNmFi
MWQuLmE2ODhhNzI2ODhhYmZkMzMxMWRhMzA4Mjc1Zjg1NjFmZWIwYTIxZjYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNlL1dlYkNvcmUv
R05VbWFrZWZpbGUubGlzdC5hbQpAQCAtMzk4Niw2ICszOTg2LDggQEAgd2ViY29yZWd0a19zb3Vy
Y2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrVXRpbGl0aWVzLmggXAog
CVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtXaWRnZXRCYWNraW5nU3RvcmVDYWlyby5j
cHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtXaWRnZXRCYWNraW5nU3RvcmVY
MTEuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrRHJhZ0FuZERyb3BIZWxw
ZXIuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrRHJhZ0FuZERyb3BIZWxw
ZXIuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0dlb2xvY2F0aW9uU2VydmljZUd0
ay5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HZW9sb2NhdGlvblNlcnZpY2VH
dGsuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0dPd25QdHJHdGsuY3BwIFwKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtEcmFnQW5kRHJvcEhlbHBl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrRHJhZ0FuZERyb3BIZWxwZXIu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjBiMjZiNmM5NTU5YTE4YjViMjRkMzAwZjRlNjQyYjZhOThlMmY0OTYK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrRHJhZ0Fu
ZERyb3BIZWxwZXIuY3BwCkBAIC0wLDAgKzEsMjAwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDExLCBJZ2FsaWEgUy5MLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
KyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRo
ZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkd0a0RyYWdBbmREcm9wSGVscGVyLmgiCisKKyNpbmNs
dWRlICJDbGlwYm9hcmRVdGlsaXRpZXNHdGsuaCIKKyNpbmNsdWRlICJEcmFnRGF0YS5oIgorI2lu
Y2x1ZGUgIkd0a1V0aWxpdGllcy5oIgorI2luY2x1ZGUgIlBhc3RlYm9hcmRIZWxwZXIuaCIKKyNp
bmNsdWRlIDxndGsvZ3RrLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitzdHJ1Y3QgRHJvcHBpbmdDb250ZXh0IHsKKyAgICBEcm9wcGluZ0Nv
bnRleHQoR2RrRHJhZ0NvbnRleHQqIGdka0NvbnRleHQsIGNvbnN0IEludFBvaW50JiBwb3NpdGlv
bikKKyAgICAgICAgOiBnZGtDb250ZXh0KGdka0NvbnRleHQpCisgICAgICAgICwgZGF0YU9iamVj
dChEYXRhT2JqZWN0R3RrOjpjcmVhdGUoKSkKKyAgICAgICAgLCBsYXN0TW90aW9uUG9zaXRpb24o
cG9zaXRpb24pCisgICAgICAgICwgZHJvcEhhcHBlbmVkKGZhbHNlKQorICAgICAgICAsIGV4aXRl
ZENhbGxiYWNrKDApCisgICAgeworICAgIH0KKworICAgIEdka0RyYWdDb250ZXh0KiBnZGtDb250
ZXh0OworICAgIFJlZlB0cjxXZWJDb3JlOjpEYXRhT2JqZWN0R3RrPiBkYXRhT2JqZWN0OworICAg
IFdlYkNvcmU6OkludFBvaW50IGxhc3RNb3Rpb25Qb3NpdGlvbjsKKyAgICBpbnQgcGVuZGluZ0Rh
dGFSZXF1ZXN0czsKKyAgICBib29sIGRyb3BIYXBwZW5lZDsKKyAgICBEcmFnRXhpdGVkQ2FsbGJh
Y2sgZXhpdGVkQ2FsbGJhY2s7Cit9OworCit0eXBlZGVmIEhhc2hNYXA8R2RrRHJhZ0NvbnRleHQq
LCBEcm9wcGluZ0NvbnRleHQqPiBEcm9wcGluZ0NvbnRleHRNYXA7Cit0eXBlZGVmIEhhc2hNYXA8
R2RrRHJhZ0NvbnRleHQqLCBSZWZQdHI8RGF0YU9iamVjdEd0az4gPiBEcmFnZ2luZ0RhdGFPYmpl
Y3RzTWFwOworCitHdGtEcmFnQW5kRHJvcEhlbHBlcjo6fkd0a0RyYWdBbmREcm9wSGVscGVyKCkK
K3sKKyAgICBkZWxldGVBbGxWYWx1ZXMobV9kcm9wcGluZ0NvbnRleHRzKTsKK30KKworYm9vbCBH
dGtEcmFnQW5kRHJvcEhlbHBlcjo6aGFuZGxlRHJhZ0VuZChHZGtEcmFnQ29udGV4dCogZHJhZ0Nv
bnRleHQpCit7CisgICAgRHJhZ2dpbmdEYXRhT2JqZWN0c01hcDo6aXRlcmF0b3IgaXRlcmF0b3Ig
PSBtX2RyYWdnaW5nRGF0YU9iamVjdHMuZmluZChkcmFnQ29udGV4dCk7CisgICAgaWYgKGl0ZXJh
dG9yID09IG1fZHJhZ2dpbmdEYXRhT2JqZWN0cy5lbmQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgbV9kcmFnZ2luZ0RhdGFPYmplY3RzLnJlbW92ZShpdGVyYXRvcik7CisgICAgcmV0
dXJuIHRydWU7Cit9CisKK3ZvaWQgR3RrRHJhZ0FuZERyb3BIZWxwZXI6OmhhbmRsZUdldERyYWdE
YXRhKEdka0RyYWdDb250ZXh0KiBjb250ZXh0LCBHdGtTZWxlY3Rpb25EYXRhKiBzZWxlY3Rpb25E
YXRhLCBndWludCBpbmZvKQoreworICAgIERyYWdnaW5nRGF0YU9iamVjdHNNYXA6Oml0ZXJhdG9y
IGl0ZXJhdG9yID0gbV9kcmFnZ2luZ0RhdGFPYmplY3RzLmZpbmQoY29udGV4dCk7CisgICAgaWYg
KGl0ZXJhdG9yID09IG1fZHJhZ2dpbmdEYXRhT2JqZWN0cy5lbmQoKSkKKyAgICAgICAgcmV0dXJu
OworICAgIFBhc3RlYm9hcmRIZWxwZXI6OmRlZmF1bHRQYXN0ZWJvYXJkSGVscGVyKCktPmZpbGxT
ZWxlY3Rpb25EYXRhKHNlbGVjdGlvbkRhdGEsIGluZm8sIGl0ZXJhdG9yLT5zZWNvbmQuZ2V0KCkp
OworfQorCitzdHJ1Y3QgSGFuZGxlRHJhZ0xhdGVyRGF0YSB7CisgICAgRHJvcHBpbmdDb250ZXh0
KiBjb250ZXh0OworICAgIEd0a0RyYWdBbmREcm9wSGVscGVyKiBnbHVlOworfTsKKworc3RhdGlj
IGdib29sZWFuIGhhbmRsZURyYWdMZWF2ZUxhdGVyQ2FsbGJhY2soSGFuZGxlRHJhZ0xhdGVyRGF0
YSogZGF0YSkKK3sKKyAgICBkYXRhLT5nbHVlLT5oYW5kbGVEcmFnTGVhdmVMYXRlcihkYXRhLT5j
b250ZXh0KTsKKyAgICBkZWxldGUgZGF0YTsKKyAgICByZXR1cm4gRkFMU0U7Cit9CisKK3ZvaWQg
R3RrRHJhZ0FuZERyb3BIZWxwZXI6OmhhbmRsZURyYWdMZWF2ZUxhdGVyKERyb3BwaW5nQ29udGV4
dCogY29udGV4dCkKK3sKKyAgICBEcm9wcGluZ0NvbnRleHRNYXA6Oml0ZXJhdG9yIGl0ZXJhdG9y
ID0gbV9kcm9wcGluZ0NvbnRleHRzLmZpbmQoY29udGV4dC0+Z2RrQ29udGV4dCk7CisgICAgaWYg
KGl0ZXJhdG9yID09IG1fZHJvcHBpbmdDb250ZXh0cy5lbmQoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgLy8gSWYgdGhlIHZpZXcgZG9lc24ndCBrbm93IGFib3V0IHRoZSBkcmFnIHlldCAodGhl
cmUgYXJlIHN0aWxsIHBlbmRpbmcgZGF0YSkKKyAgICAvLyByZXF1ZXN0cywgZG9uJ3QgdXBkYXRl
IGl0IHdpdGggaW5mb3JtYXRpb24gYWJvdXQgdGhlIGRyYWcuCisgICAgaWYgKGNvbnRleHQtPnBl
bmRpbmdEYXRhUmVxdWVzdHMpCisgICAgICAgIHJldHVybjsKKworICAgIGNvbnN0IEludFBvaW50
JiBwb3NpdGlvbiA9IGNvbnRleHQtPmxhc3RNb3Rpb25Qb3NpdGlvbjsKKyAgICBEcmFnRGF0YSBk
cmFnRGF0YShjb250ZXh0LT5kYXRhT2JqZWN0LmdldCgpLCBwb3NpdGlvbiwKKyAgICAgICAgICAg
ICAgICAgICAgICBjb252ZXJ0V2lkZ2V0UG9pbnRUb1NjcmVlblBvaW50KG1fd2lkZ2V0LCBwb3Np
dGlvbiksCisgICAgICAgICAgICAgICAgICAgICAgRHJhZ09wZXJhdGlvbk5vbmUpOworICAgIGNv
bnRleHQtPmV4aXRlZENhbGxiYWNrKG1fd2lkZ2V0LCAmZHJhZ0RhdGEsIGNvbnRleHQtPmRyb3BI
YXBwZW5lZCk7CisKKyAgICBtX2Ryb3BwaW5nQ29udGV4dHMucmVtb3ZlKGl0ZXJhdG9yKTsKKyAg
ICBkZWxldGUgY29udGV4dDsKK30KKwordm9pZCBHdGtEcmFnQW5kRHJvcEhlbHBlcjo6aGFuZGxl
RHJhZ0xlYXZlKEdka0RyYWdDb250ZXh0KiBnZGtDb250ZXh0LCBEcmFnRXhpdGVkQ2FsbGJhY2sg
ZXhpdGVkQ2FsbGJhY2spCit7CisgICAgRHJvcHBpbmdDb250ZXh0TWFwOjppdGVyYXRvciBpdGVy
YXRvciA9IG1fZHJvcHBpbmdDb250ZXh0cy5maW5kKGdka0NvbnRleHQpOworICAgIGlmIChpdGVy
YXRvciA9PSBtX2Ryb3BwaW5nQ29udGV4dHMuZW5kKCkpCisgICAgICAgIHJldHVybjsKKworICAg
IC8vIER1cmluZyBhIGRyb3AgR1RLKyB3aWxsIGZpcmUgYSBkcmFnLWxlYXZlIHNpZ25hbCByaWdo
dCBiZWZvcmUgZmlyaW5nCisgICAgLy8gdGhlIGRyYWctZHJvcCBzaWduYWwuIFdlIHdhbnQgdGhl
IGFjdGlvbnMgZm9yIGRyYWctbGVhdmUgdG8gaGFwcGVuIGFmdGVyCisgICAgLy8gdGhvc2UgZm9y
IGRyYWctZHJvcCwgc28gc2NoZWR1bGUgdGhlbSB0byBoYXBwZW4gYXN5bmNocm9ub3VzbHkgaGVy
ZS4KKyAgICBIYW5kbGVEcmFnTGF0ZXJEYXRhKiBkYXRhID0gbmV3IEhhbmRsZURyYWdMYXRlckRh
dGE7CisgICAgZGF0YS0+Y29udGV4dCA9IGl0ZXJhdG9yLT5zZWNvbmQ7CisgICAgZGF0YS0+Y29u
dGV4dC0+ZXhpdGVkQ2FsbGJhY2sgPSBleGl0ZWRDYWxsYmFjazsKKyAgICBkYXRhLT5nbHVlID0g
dGhpczsKKyAgICBnX3RpbWVvdXRfYWRkKDAsIHJlaW50ZXJwcmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+
KGhhbmRsZURyYWdMZWF2ZUxhdGVyQ2FsbGJhY2spLCBkYXRhKTsKK30KKworc3RhdGljIHZvaWQg
cXVlcnlOZXdEcm9wQ29udGV4dERhdGEoRHJvcHBpbmdDb250ZXh0KiBkcm9wQ29udGV4dCwgR3Rr
V2lkZ2V0KiB3aWRnZXQsIGd1aW50IHRpbWUpCit7CisgICAgR2RrRHJhZ0NvbnRleHQqIGdka0Nv
bnRleHQgPSBkcm9wQ29udGV4dC0+Z2RrQ29udGV4dDsKKyAgICBWZWN0b3I8R2RrQXRvbT4gYWNj
ZXB0YWJsZVRhcmdldHMoUGFzdGVib2FyZEhlbHBlcjo6ZGVmYXVsdFBhc3RlYm9hcmRIZWxwZXIo
KS0+ZHJvcEF0b21zRm9yQ29udGV4dCh3aWRnZXQsIGdka0NvbnRleHQpKTsKKyAgICBkcm9wQ29u
dGV4dC0+cGVuZGluZ0RhdGFSZXF1ZXN0cyA9IGFjY2VwdGFibGVUYXJnZXRzLnNpemUoKTsKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFjY2VwdGFibGVUYXJnZXRzLnNpemUoKTsgaSsrKQor
ICAgICAgICBndGtfZHJhZ19nZXRfZGF0YSh3aWRnZXQsIGdka0NvbnRleHQsIGFjY2VwdGFibGVU
YXJnZXRzLmF0KGkpLCB0aW1lKTsKK30KKworUGFzc093blB0cjxEcmFnRGF0YT4gR3RrRHJhZ0Fu
ZERyb3BIZWxwZXI6OmhhbmRsZURyYWdNb3Rpb24oR2RrRHJhZ0NvbnRleHQqIGNvbnRleHQsIGNv
bnN0IEludFBvaW50JiBwb3NpdGlvbiwgdW5zaWduZWQgdGltZSkKK3sKKyAgICBEcm9wcGluZ0Nv
bnRleHQqIGRyb3BwaW5nQ29udGV4dCA9IDA7CisgICAgRHJvcHBpbmdDb250ZXh0TWFwOjppdGVy
YXRvciBpdGVyYXRvciA9IG1fZHJvcHBpbmdDb250ZXh0cy5maW5kKGNvbnRleHQpOworICAgIGlm
IChpdGVyYXRvciA9PSBtX2Ryb3BwaW5nQ29udGV4dHMuZW5kKCkpIHsKKyAgICAgICAgZHJvcHBp
bmdDb250ZXh0ID0gbmV3IERyb3BwaW5nQ29udGV4dChjb250ZXh0LCBwb3NpdGlvbik7CisgICAg
ICAgIG1fZHJvcHBpbmdDb250ZXh0cy5zZXQoY29udGV4dCwgZHJvcHBpbmdDb250ZXh0KTsKKyAg
ICAgICAgcXVlcnlOZXdEcm9wQ29udGV4dERhdGEoZHJvcHBpbmdDb250ZXh0LCBtX3dpZGdldCwg
dGltZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZHJvcHBpbmdDb250ZXh0ID0gaXRlcmF0b3It
PnNlY29uZDsKKyAgICAgICAgZHJvcHBpbmdDb250ZXh0LT5sYXN0TW90aW9uUG9zaXRpb24gPSBw
b3NpdGlvbjsKKyAgICB9CisKKyAgICAvLyBEb24ndCBzZW5kIGFueSBkcmFnIGluZm9ybWF0aW9u
IHRvIFdlYkNvcmUgdW50aWwgd2UndmUgcmV0cmlldmVkIGFsbAorICAgIC8vIHRoZSBkYXRhIGZv
ciB0aGlzIGRyYWcgb3BlcmF0aW9uLiBPdGhlcndpc2Ugd2UnZCBoYXZlIHRvIGJsb2NrIHRvIHdh
aXQKKyAgICAvLyBmb3IgdGhlIGRyYWcncyBkYXRhLgorICAgIEFTU0VSVChkcm9wcGluZ0NvbnRl
eHQpOworICAgIGlmIChkcm9wcGluZ0NvbnRleHQtPnBlbmRpbmdEYXRhUmVxdWVzdHMgPiAwKQor
ICAgICAgICByZXR1cm4gYWRvcHRQdHIoc3RhdGljX2Nhc3Q8RHJhZ0RhdGEqPigwKSk7CisKKyAg
ICByZXR1cm4gYWRvcHRQdHIobmV3IERyYWdEYXRhKGRyb3BwaW5nQ29udGV4dC0+ZGF0YU9iamVj
dC5nZXQoKSwgcG9zaXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb252
ZXJ0V2lkZ2V0UG9pbnRUb1NjcmVlblBvaW50KG1fd2lkZ2V0LCBwb3NpdGlvbiksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBnZGtEcmFnQWN0aW9uVG9EcmFnT3BlcmF0aW9uKGdk
a19kcmFnX2NvbnRleHRfZ2V0X2FjdGlvbnMoY29udGV4dCkpKSk7Cit9CisKK1Bhc3NPd25QdHI8
RHJhZ0RhdGE+IEd0a0RyYWdBbmREcm9wSGVscGVyOjpoYW5kbGVEcmFnRGF0YVJlY2VpdmVkKEdk
a0RyYWdDb250ZXh0KiBjb250ZXh0LCBHdGtTZWxlY3Rpb25EYXRhKiBzZWxlY3Rpb25EYXRhLCBn
dWludCBpbmZvKQoreworICAgIERyb3BwaW5nQ29udGV4dE1hcDo6aXRlcmF0b3IgaXRlcmF0b3Ig
PSBtX2Ryb3BwaW5nQ29udGV4dHMuZmluZChjb250ZXh0KTsKKyAgICBpZiAoaXRlcmF0b3IgPT0g
bV9kcm9wcGluZ0NvbnRleHRzLmVuZCgpKQorICAgICAgICByZXR1cm4gYWRvcHRQdHIoc3RhdGlj
X2Nhc3Q8RHJhZ0RhdGEqPigwKSk7CisKKyAgICBEcm9wcGluZ0NvbnRleHQqIGRyb3BwaW5nQ29u
dGV4dCA9IGl0ZXJhdG9yLT5zZWNvbmQ7CisgICAgZHJvcHBpbmdDb250ZXh0LT5wZW5kaW5nRGF0
YVJlcXVlc3RzLS07CisgICAgUGFzdGVib2FyZEhlbHBlcjo6ZGVmYXVsdFBhc3RlYm9hcmRIZWxw
ZXIoKS0+ZmlsbERhdGFPYmplY3RGcm9tRHJvcERhdGEoc2VsZWN0aW9uRGF0YSwgaW5mbywgZHJv
cHBpbmdDb250ZXh0LT5kYXRhT2JqZWN0LmdldCgpKTsKKworICAgIGlmIChkcm9wcGluZ0NvbnRl
eHQtPnBlbmRpbmdEYXRhUmVxdWVzdHMpCisgICAgICAgIHJldHVybiBhZG9wdFB0cihzdGF0aWNf
Y2FzdDxEcmFnRGF0YSo+KDApKTsKKworICAgIC8vIFRoZSBjb29yZGluYXRlcyBwYXNzZWQgdG8g
ZHJhZy1kYXRhLXJlY2VpdmVkIHNpZ25hbCBhcmUgc29tZXRpbWVzCisgICAgLy8gaW5hY2N1cmF0
ZSBpbiBEUlQsIHNvIHVzZSB0aGUgY29vcmRpbmF0ZXMgb2YgdGhlIGxhc3QgbW90aW9uIGV2ZW50
LgorICAgIGNvbnN0IEludFBvaW50JiBwb3NpdGlvbiA9IGRyb3BwaW5nQ29udGV4dC0+bGFzdE1v
dGlvblBvc2l0aW9uOworCisgICAgLy8gSWYgdGhlcmUgYXJlIG5vIG1vcmUgcGVuZGluZyByZXF1
ZXN0cywgc3RhcnQgc2VuZGluZyBkcmFnZ2luZyBkYXRhIHRvIFdlYkNvcmUuCisgICAgcmV0dXJu
IGFkb3B0UHRyKG5ldyBEcmFnRGF0YShkcm9wcGluZ0NvbnRleHQtPmRhdGFPYmplY3QuZ2V0KCks
IHBvc2l0aW9uLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnZlcnRXaWRn
ZXRQb2ludFRvU2NyZWVuUG9pbnQobV93aWRnZXQsIHBvc2l0aW9uKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGdka0RyYWdBY3Rpb25Ub0RyYWdPcGVyYXRpb24oZ2RrX2RyYWdf
Y29udGV4dF9nZXRfYWN0aW9ucyhjb250ZXh0KSkpKTsKK30KKworUGFzc093blB0cjxEcmFnRGF0
YT4gR3RrRHJhZ0FuZERyb3BIZWxwZXI6OmhhbmRsZURyYWdEcm9wKEdka0RyYWdDb250ZXh0KiBj
b250ZXh0LCBjb25zdCBJbnRQb2ludCYgcG9zaXRpb24pCit7CisgICAgRHJvcHBpbmdDb250ZXh0
TWFwOjppdGVyYXRvciBpdGVyYXRvciA9IG1fZHJvcHBpbmdDb250ZXh0cy5maW5kKGNvbnRleHQp
OworICAgIGlmIChpdGVyYXRvciA9PSBtX2Ryb3BwaW5nQ29udGV4dHMuZW5kKCkpCisgICAgICAg
IHJldHVybiBhZG9wdFB0cihzdGF0aWNfY2FzdDxEcmFnRGF0YSo+KDApKTsKKworICAgIERyb3Bw
aW5nQ29udGV4dCogZHJvcHBpbmdDb250ZXh0ID0gaXRlcmF0b3ItPnNlY29uZDsKKyAgICBkcm9w
cGluZ0NvbnRleHQtPmRyb3BIYXBwZW5lZCA9IHRydWU7CisKKyAgICByZXR1cm4gYWRvcHRQdHIo
bmV3IERyYWdEYXRhKGRyb3BwaW5nQ29udGV4dC0+ZGF0YU9iamVjdC5nZXQoKSwgcG9zaXRpb24s
IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udmVydFdpZGdldFBvaW50VG9T
Y3JlZW5Qb2ludChtX3dpZGdldCwgcG9zaXRpb24pLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZ2RrRHJhZ0FjdGlvblRvRHJhZ09wZXJhdGlvbihnZGtfZHJhZ19jb250ZXh0X2dl
dF9hY3Rpb25zKGNvbnRleHQpKSkpOworfQorCit2b2lkIEd0a0RyYWdBbmREcm9wSGVscGVyOjpz
dGFydGVkRHJhZyhHZGtEcmFnQ29udGV4dCogY29udGV4dCwgRGF0YU9iamVjdEd0ayogZGF0YU9i
amVjdCkKK3sKKyAgICBtX2RyYWdnaW5nRGF0YU9iamVjdHMuc2V0KGNvbnRleHQsIGRhdGFPYmpl
Y3QpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ndGsvR3RrRHJhZ0FuZERyb3BIZWxwZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2d0ay9HdGtEcmFnQW5kRHJvcEhlbHBlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjkwZTg0YzFk
ZWY2YmFmYWI1MjA4YTRiMWFmZTQ4NDc0OTFmZjZkZDAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrRHJhZ0FuZERyb3BIZWxwZXIuaApAQCAtMCwwICsx
LDYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExLCBJZ2FsaWEgUy5MLgorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAg
MDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2lmbmRlZiBHdGtEcmFnQW5kRHJvcEhlbHBlcl9oCisj
ZGVmaW5lIEd0a0RyYWdBbmREcm9wSGVscGVyX2gKKworI2luY2x1ZGUgIkRhdGFPYmplY3RHdGsu
aCIKKyNpbmNsdWRlIDx3dGYvRmFzdEFsbG9jQmFzZS5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5
YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitzdHJ1Y3QgRHJvcHBpbmdDb250ZXh0OworY2xhc3MgRHJhZ0RhdGE7CisKK3R5cGVk
ZWYgdm9pZCAoKkRyYWdFeGl0ZWRDYWxsYmFjaykoR3RrV2lkZ2V0KiwgRHJhZ0RhdGEqLCBib29s
IGRyb3BIYXBwZW5lZCk7CisKK2NsYXNzIEd0a0RyYWdBbmREcm9wSGVscGVyIHsKKyAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShHdGtEcmFnQW5kRHJvcEhlbHBlcik7CisgICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CisKK3B1YmxpYzoKKyAgICBHdGtEcmFnQW5kRHJvcEhlbHBlcigpCisgICAg
ICAgIDogbV93aWRnZXQoMCkKKyAgICB7CisgICAgfQorICAgIH5HdGtEcmFnQW5kRHJvcEhlbHBl
cigpOworCisgICAgdm9pZCBzZXRXaWRnZXQoR3RrV2lkZ2V0KiB3aWRnZXQpIHsgbV93aWRnZXQg
PSB3aWRnZXQ7IH0KKyAgICBib29sIGhhbmRsZURyYWdFbmQoR2RrRHJhZ0NvbnRleHQqKTsKKyAg
ICB2b2lkIGhhbmRsZUdldERyYWdEYXRhKEdka0RyYWdDb250ZXh0KiwgR3RrU2VsZWN0aW9uRGF0
YSosIGd1aW50IGluZm8pOworICAgIHZvaWQgaGFuZGxlRHJhZ0xlYXZlKEdka0RyYWdDb250ZXh0
KiwgRHJhZ0V4aXRlZENhbGxiYWNrKTsKKyAgICB2b2lkIGhhbmRsZURyYWdMZWF2ZUxhdGVyKERy
b3BwaW5nQ29udGV4dCopOworICAgIFBhc3NPd25QdHI8RHJhZ0RhdGE+IGhhbmRsZURyYWdNb3Rp
b24oR2RrRHJhZ0NvbnRleHQqLCBjb25zdCBJbnRQb2ludCYsIHVuc2lnbmVkIHRpbWUpOworICAg
IFBhc3NPd25QdHI8RHJhZ0RhdGE+IGhhbmRsZURyYWdEYXRhUmVjZWl2ZWQoR2RrRHJhZ0NvbnRl
eHQqLCBHdGtTZWxlY3Rpb25EYXRhKiwgZ3VpbnQgaW5mbyk7CisgICAgUGFzc093blB0cjxEcmFn
RGF0YT4gaGFuZGxlRHJhZ0Ryb3AoR2RrRHJhZ0NvbnRleHQqLCBjb25zdCBJbnRQb2ludCYpOwor
ICAgIHZvaWQgc3RhcnRlZERyYWcoR2RrRHJhZ0NvbnRleHQqLCBEYXRhT2JqZWN0R3RrKik7CisK
K3ByaXZhdGU6CisgICAgR3RrV2lkZ2V0KiBtX3dpZGdldDsKKyAgICBIYXNoTWFwPEdka0RyYWdD
b250ZXh0KiwgRHJvcHBpbmdDb250ZXh0Kj4gbV9kcm9wcGluZ0NvbnRleHRzOworICAgIEhhc2hN
YXA8R2RrRHJhZ0NvbnRleHQqLCBSZWZQdHI8RGF0YU9iamVjdEd0az4gPiBtX2RyYWdnaW5nRGF0
YU9iamVjdHM7Cit9OworCit9CisKKyNlbmRpZiAvLyBEYXRhT2JqZWN0R3RrX2gKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5n
ZUxvZwppbmRleCBhM2M4MmYzN2Y5NGRlMjI4OGFiYTZkODEzMzMzNmU1NDJmNzc2MzU5Li4zOGM5
MTc0YTRlNTIzZTI5OGExYzA0OGRlNDdmNjA4ZTM5YjdhZGFhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2d0ay9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMjAgQEAKKzIwMTEtMDktMTQgIE1hcnRpbiBSb2JpbnNvbiAgPG1yb2JpbnNvbkBp
Z2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdIE1vdmUgZHJhZy1hbmQtZHJvcCBjb2RlIHdoaWNo
IGNhbiBiZSBzaGFyZWQgd2l0aCBXZWJLaXQyIHRvIFdlYkNvcmUKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY2ODkwCisKKyAgICAgICAgVXNlIHRoZSBu
ZXcgR3RrV2lkZ2V0RHJhZ0FuZERyb3BHbHVlIGNsYXNzIHRvIGhvbGQgdGhlIGxvZ2ljIHRoYXQg
d2lsbCBiZQorICAgICAgICBjb21tb24gYmV0d2VlbiBXZWJLaXQxIGFuZCBXZWJLaXQyLiBNb2Rp
ZnkgV2ViS2l0V2ViVmlldyB0byB1c2UgdGhpcyBjbGFzcy4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0RyYWdDbGllbnRH
dGsuY3BwOgorICAgICAgICAoV2ViS2l0OjpEcmFnQ2xpZW50OjpzdGFydERyYWcpOiBJbmZvcm0g
dGhlIGRyYWctYW5kLWRyb3AgZ2x1ZSBhYm91dCB0aGUgZHJhZy4KKyAgICAgICAgKiB3ZWJraXQv
d2Via2l0d2Vidmlldy5jcHA6IFVzZSBHdGtXaWRnZXREcmFnQW5kRHJvcEdsdWUgd2hlcmV2ZXIg
dGhpcyBjbGFzcyB3YXMKKyAgICAgICAgbWFpbnRhaW5pbmcgZHJhZy1hbmQtZHJvcCBzdGF0ZSBp
dHNlbGYuCisgICAgICAgICogd2Via2l0L3dlYmtpdHdlYnZpZXdwcml2YXRlLmg6IFN3YXAgb3V0
IHRoZSBkcmFnLWFuZC1kcm9wIHN0YXRlIGZvciBhbiBpbnN0YW5jZQorICAgICAgICBvZiB0aGUg
Z2x1ZSBjbGFzcy4KKwogMjAxMS0wOS0xMCAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3Jn
PgogCiAgICAgICAgIEZpeCBidWlsZCBicmVhay4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Z3RrL1dlYkNvcmVTdXBwb3J0L0RyYWdDbGllbnRHdGsuY3BwIGIvU291cmNlL1dlYktpdC9ndGsv
V2ViQ29yZVN1cHBvcnQvRHJhZ0NsaWVudEd0ay5jcHAKaW5kZXggNDFhYzZlOTY3MDYyMjBkMzBk
YjllNGE1NDhhNDM1NDAxYmQxMTU3Ni4uMjBjOGQ3N2I5ZGIzZTM1MWRmMjUzN2IwMWNmZmEzYzE3
ZTNiN2M1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRHJh
Z0NsaWVudEd0ay5jcHAKKysrIGIvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRHJh
Z0NsaWVudEd0ay5jcHAKQEAgLTEwNyw3ICsxMDcsNyBAQCB2b2lkIERyYWdDbGllbnQ6OnN0YXJ0
RHJhZyhEcmFnSW1hZ2VSZWYgaW1hZ2UsIGNvbnN0IEludFBvaW50JiBkcmFnSW1hZ2VPcmlnaW4s
CiAgICAgR093blB0cjxHZGtFdmVudD4gY3VycmVudEV2ZW50KGd0a19nZXRfY3VycmVudF9ldmVu
dCgpKTsKIAogICAgIEdka0RyYWdDb250ZXh0KiBjb250ZXh0ID0gZ3RrX2RyYWdfYmVnaW4oR1RL
X1dJREdFVChtX3dlYlZpZXcpLCB0YXJnZXRMaXN0LmdldCgpLCBkcmFnT3BlcmF0aW9uVG9HZGtE
cmFnQWN0aW9ucyhjbGlwYm9hcmQtPnNvdXJjZU9wZXJhdGlvbigpKSwgMSwgY3VycmVudEV2ZW50
LmdldCgpKTsKLSAgICB3ZWJWaWV3LT5wcml2LT5kcmFnZ2luZ0RhdGFPYmplY3RzLnNldChjb250
ZXh0LCBkYXRhT2JqZWN0KTsKKyAgICB3ZWJWaWV3LT5wcml2LT5kcmFnQW5kRHJvcEhlbHBlci5z
dGFydGVkRHJhZyhjb250ZXh0LCBkYXRhT2JqZWN0LmdldCgpKTsKIAogICAgIC8vIEEgZHJhZyBz
dGFydGluZyBzaG91bGQgcHJldmVudCBhIGRvdWJsZS1jbGljayBmcm9tIGhhcHBlbmluZy4gVGhp
cyBtaWdodAogICAgIC8vIGhhcHBlbiBpZiBhIGRyYWcgaXMgZm9sbG93ZWQgdmVyeSBxdWlja2x5
IGJ5IGFub3RoZXIgY2xpY2sgKGxpa2UgaW4gdGhlIERSVCkuCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0L2d0ay93
ZWJraXQvd2Via2l0d2Vidmlldy5jcHAKaW5kZXggZTJlZGQ4NDljNmIyY2Q5ZDYwZjA0ZmNjNjA1
ZDlkMzk1NWU3NmRiZC4uMzQ3NGNhNjFmYzdhMTQ2YjY4N2NhMmFhMGVkYWJiN2Q5NDU2OTJlYSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcApAQCAtNzc5LDcg
Kzc3OSw4IEBAIHN0YXRpYyBnYm9vbGVhbiB3ZWJraXRfd2ViX3ZpZXdfYnV0dG9uX3ByZXNzX2V2
ZW50KEd0a1dpZGdldCogd2lkZ2V0LCBHZGtFdmVudEJ1CiAgICAgICAgIHJldHVybiBUUlVFOwog
CiAgICAgUGxhdGZvcm1Nb3VzZUV2ZW50IHBsYXRmb3JtRXZlbnQoZXZlbnQpOwotICAgIHBsYXRm
b3JtRXZlbnQuc2V0Q2xpY2tDb3VudChwcml2LT5jbGlja0NvdW50ZXIuY2xpY2tDb3VudEZvckdk
a0J1dHRvbkV2ZW50KHdpZGdldCwgZXZlbnQpKTsKKyAgICBpbnQgY291bnQgPSBwcml2LT5jbGlj
a0NvdW50ZXIuY2xpY2tDb3VudEZvckdka0J1dHRvbkV2ZW50KHdpZGdldCwgZXZlbnQpOworICAg
IHBsYXRmb3JtRXZlbnQuc2V0Q2xpY2tDb3VudChjb3VudCk7CiAKICAgICBpZiAoZXZlbnQtPmJ1
dHRvbiA9PSAzKQogICAgICAgICByZXR1cm4gd2Via2l0X3dlYl92aWV3X2ZvcndhcmRfY29udGV4
dF9tZW51X2V2ZW50KHdlYlZpZXcsIFBsYXRmb3JtTW91c2VFdmVudChldmVudCkpOwpAQCAtMTMz
NCwxMSArMTMzNSw2IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfdmlld19kaXNwb3NlKEdPYmpl
Y3QqIG9iamVjdCkKICAgICBwcml2LT5tYWluUmVzb3VyY2UuY2xlYXIoKTsKICAgICBwcml2LT5z
dWJSZXNvdXJjZXMuY2xlYXIoKTsKIAotICAgIEhhc2hNYXA8R2RrRHJhZ0NvbnRleHQqLCBEcm9w
cGluZ0NvbnRleHQqPjo6aXRlcmF0b3IgZW5kRHJvcHBpbmdDb250ZXh0cyA9IHByaXYtPmRyb3Bw
aW5nQ29udGV4dHMuZW5kKCk7Ci0gICAgZm9yIChIYXNoTWFwPEdka0RyYWdDb250ZXh0KiwgRHJv
cHBpbmdDb250ZXh0Kj46Oml0ZXJhdG9yIGl0ZXIgPSBwcml2LT5kcm9wcGluZ0NvbnRleHRzLmJl
Z2luKCk7IGl0ZXIgIT0gZW5kRHJvcHBpbmdDb250ZXh0czsgKytpdGVyKQotICAgICAgICBkZWxl
dGUgKGl0ZXItPnNlY29uZCk7Ci0gICAgcHJpdi0+ZHJvcHBpbmdDb250ZXh0cy5jbGVhcigpOwot
CiAgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X3dlYl92aWV3X3BhcmVudF9jbGFzcyktPmRpc3Bv
c2Uob2JqZWN0KTsKIH0KIApAQCAtMTQ1MSwxOSArMTQ0NywxNCBAQCBzdGF0aWMgdm9pZCB3ZWJr
aXRfd2ViX3ZpZXdfc2NyZWVuX2NoYW5nZWQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdka1NjcmVlbiog
cHJldmlvdQogc3RhdGljIHZvaWQgd2Via2l0X3dlYl92aWV3X2RyYWdfZW5kKEd0a1dpZGdldCog
d2lkZ2V0LCBHZGtEcmFnQ29udGV4dCogY29udGV4dCkKIHsKICAgICBXZWJLaXRXZWJWaWV3KiB3
ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdpZGdldCk7Ci0gICAgV2ViS2l0V2ViVmlld1ByaXZh
dGUqIHByaXYgPSB3ZWJWaWV3LT5wcml2OwotCi0gICAgLy8gVGhpcyBtaWdodCBoYXBwZW4gaWYg
YSBkcmFnIGlzIHN0aWxsIGluIHByb2dyZXNzIGFmdGVyIGEgV2ViS2l0V2ViVmlldwotICAgIC8v
IGlzIGRpc3Bvc2VkIGFuZCBiZWZvcmUgaXQgaXMgZmluYWxpemVkLgotICAgIGlmICghcHJpdi0+
ZHJhZ2dpbmdEYXRhT2JqZWN0cy5jb250YWlucyhjb250ZXh0KSkKKyAgICBpZiAoIXdlYlZpZXct
PnByaXYtPmRyYWdBbmREcm9wSGVscGVyLmhhbmRsZURyYWdFbmQoY29udGV4dCkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIHByaXYtPmRyYWdnaW5nRGF0YU9iamVjdHMucmVtb3ZlKGNvbnRleHQp
OwotCiAgICAgRnJhbWUqIGZyYW1lID0gY29yZSh3ZWJWaWV3KS0+Zm9jdXNDb250cm9sbGVyKCkt
PmZvY3VzZWRPck1haW5GcmFtZSgpOwogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybjsK
IAorICAgIC8vIFN5bnRoZXNpemUgYSBidXR0b24gcmVsZWFzZSBldmVudCB0byBzZW5kIHdpdGgg
dGhlIGRyYWcgZW5kIGFjdGlvbi4KICAgICBHT3duUHRyPEdka0V2ZW50PiBldmVudChnZGtfZXZl
bnRfbmV3KEdES19CVVRUT05fUkVMRUFTRSkpOwogICAgIGludCB4LCB5LCB4Um9vdCwgeVJvb3Q7
CiAgICAgR2RrTW9kaWZpZXJUeXBlIG1vZGlmaWVycyA9IHN0YXRpY19jYXN0PEdka01vZGlmaWVy
VHlwZT4oMCk7CkBAIC0xNDkxLDEzNiArMTQ4Miw1NCBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfd2Vi
X3ZpZXdfZHJhZ19lbmQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0RyYWdDb250ZXh0KiBjb250ZXh0
KQogCiBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfZHJhZ19kYXRhX2dldChHdGtXaWRnZXQq
IHdpZGdldCwgR2RrRHJhZ0NvbnRleHQqIGNvbnRleHQsIEd0a1NlbGVjdGlvbkRhdGEqIHNlbGVj
dGlvbkRhdGEsIGd1aW50IGluZm8sIGd1aW50KQogewotICAgIFdlYktpdFdlYlZpZXdQcml2YXRl
KiBwcml2ID0gV0VCS0lUX1dFQl9WSUVXKHdpZGdldCktPnByaXY7Ci0KLSAgICAvLyBUaGlzIG1p
Z2h0IGhhcHBlbiBpZiBhIGRyYWcgaXMgc3RpbGwgaW4gcHJvZ3Jlc3MgYWZ0ZXIgYSBXZWJLaXRX
ZWJWaWV3Ci0gICAgLy8gaXMgZGlwb3NlZCBhbmQgYmVmb3JlIGl0IGlzIGZpbmFsaXplZC4KLSAg
ICBpZiAoIXByaXYtPmRyYWdnaW5nRGF0YU9iamVjdHMuY29udGFpbnMoY29udGV4dCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIFBhc3RlYm9hcmRIZWxwZXI6OmRlZmF1bHRQYXN0ZWJvYXJkSGVs
cGVyKCktPmZpbGxTZWxlY3Rpb25EYXRhKHNlbGVjdGlvbkRhdGEsIGluZm8sIHByaXYtPmRyYWdn
aW5nRGF0YU9iamVjdHMuZ2V0KGNvbnRleHQpLmdldCgpKTsKKyAgICBXRUJLSVRfV0VCX1ZJRVco
d2lkZ2V0KS0+cHJpdi0+ZHJhZ0FuZERyb3BIZWxwZXIuaGFuZGxlR2V0RHJhZ0RhdGEoY29udGV4
dCwgc2VsZWN0aW9uRGF0YSwgaW5mbyk7CiB9CiAKLXN0YXRpYyBnYm9vbGVhbiBkb0RyYWdMZWF2
ZUxhdGVyKERyb3BwaW5nQ29udGV4dCogY29udGV4dCkKK3N0YXRpYyB2b2lkIGRyYWdFeGl0ZWRD
YWxsYmFjayhHdGtXaWRnZXQqIHdpZGdldCwgRHJhZ0RhdGEqIGRyYWdEYXRhLCBib29sIGRyb3BI
YXBwZW5lZCkKIHsKLSAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gY29udGV4dC0+d2ViVmll
dzsKLSAgICBXZWJLaXRXZWJWaWV3UHJpdmF0ZSogcHJpdiA9IHdlYlZpZXctPnByaXY7Ci0KLSAg
ICBpZiAoIXByaXYtPmRyb3BwaW5nQ29udGV4dHMuY29udGFpbnMoY29udGV4dC0+Z2RrQ29udGV4
dCkpCi0gICAgICAgIHJldHVybiBGQUxTRTsKLQotICAgIC8vIElmIHRoZSB2aWV3IGRvZXNuJ3Qg
a25vdyBhYm91dCB0aGUgZHJhZyB5ZXQgKHRoZXJlIGFyZSBzdGlsbCBwZW5kaW5nIGRhdGEpCi0g
ICAgLy8gcmVxdWVzdHMsIGRvbid0IHVwZGF0ZSBpdCB3aXRoIGluZm9ybWF0aW9uIGFib3V0IHRo
ZSBkcmFnLgotICAgIGlmIChjb250ZXh0LT5wZW5kaW5nRGF0YVJlcXVlc3RzKQotICAgICAgICBy
ZXR1cm4gRkFMU0U7Ci0KICAgICAvLyBEb24ndCBjYWxsIGRyYWdFeGl0ZWQgaWYgd2UgaGF2ZSBq
dXN0IHJlY2VpdmVkIGEgZHJhZy1kcm9wIHNpZ25hbC4gVGhpcwogICAgIC8vIGhhcHBlbnMgaW4g
dGhlIGNhc2Ugb2YgYSBzdWNjZXNzZnVsIGRyb3Agb250byB0aGUgdmlldy4KLSAgICBpZiAoIWNv
bnRleHQtPmRyb3BIYXBwZW5lZCkgewotICAgICAgICBjb25zdCBJbnRQb2ludCYgcG9zaXRpb24g
PSBjb250ZXh0LT5sYXN0TW90aW9uUG9zaXRpb247Ci0gICAgICAgIERyYWdEYXRhIGRyYWdEYXRh
KGNvbnRleHQtPmRhdGFPYmplY3QuZ2V0KCksIHBvc2l0aW9uLCBjb252ZXJ0V2lkZ2V0UG9pbnRU
b1NjcmVlblBvaW50KEdUS19XSURHRVQod2ViVmlldyksIHBvc2l0aW9uKSwgRHJhZ09wZXJhdGlv
bk5vbmUpOwotICAgICAgICBjb3JlKHdlYlZpZXcpLT5kcmFnQ29udHJvbGxlcigpLT5kcmFnRXhp
dGVkKCZkcmFnRGF0YSk7Ci0gICAgfQotCi0gICAgY29yZSh3ZWJWaWV3KS0+ZHJhZ0NvbnRyb2xs
ZXIoKS0+ZHJhZ0VuZGVkKCk7Ci0gICAgcHJpdi0+ZHJvcHBpbmdDb250ZXh0cy5yZW1vdmUoY29u
dGV4dC0+Z2RrQ29udGV4dCk7Ci0gICAgZGVsZXRlIGNvbnRleHQ7Ci0gICAgcmV0dXJuIEZBTFNF
OworICAgIGlmICghZHJvcEhhcHBlbmVkKQorICAgICAgICBjb3JlKFdFQktJVF9XRUJfVklFVyh3
aWRnZXQpKS0+ZHJhZ0NvbnRyb2xsZXIoKS0+ZHJhZ0V4aXRlZChkcmFnRGF0YSk7CisgICAgY29y
ZShXRUJLSVRfV0VCX1ZJRVcod2lkZ2V0KSktPmRyYWdDb250cm9sbGVyKCktPmRyYWdFbmRlZCgp
OwogfQogCiBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfZHJhZ19sZWF2ZShHdGtXaWRnZXQq
IHdpZGdldCwgR2RrRHJhZ0NvbnRleHQqIGNvbnRleHQsIGd1aW50IHRpbWUpCiB7Ci0gICAgV2Vi
S2l0V2ViVmlldyogd2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3aWRnZXQpOwotICAgIFdlYktp
dFdlYlZpZXdQcml2YXRlKiBwcml2ID0gd2ViVmlldy0+cHJpdjsKLQotICAgIGlmICghcHJpdi0+
ZHJvcHBpbmdDb250ZXh0cy5jb250YWlucyhjb250ZXh0KSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgLy8gRHVyaW5nIGEgZHJvcCBHVEsrIHdpbGwgZmlyZSBhIGRyYWctbGVhdmUgc2lnbmFsIHJp
Z2h0IGJlZm9yZSBmaXJpbmcKLSAgICAvLyB0aGUgZHJhZy1kcm9wIHNpZ25hbC4gV2Ugd2FudCB0
aGUgYWN0aW9ucyBmb3IgZHJhZy1sZWF2ZSB0byBoYXBwZW4gYWZ0ZXIKLSAgICAvLyB0aG9zZSBm
b3IgZHJhZy1kcm9wLCBzbyBzY2hlZHVsZSB0aGVtIHRvIGhhcHBlbiBhc3luY2hyb25vdXNseSBo
ZXJlLgotICAgIGdfdGltZW91dF9hZGQoMCwgcmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4o
ZG9EcmFnTGVhdmVMYXRlciksIHByaXYtPmRyb3BwaW5nQ29udGV4dHMuZ2V0KGNvbnRleHQpKTsK
KyAgICBXRUJLSVRfV0VCX1ZJRVcod2lkZ2V0KS0+cHJpdi0+ZHJhZ0FuZERyb3BIZWxwZXIuaGFu
ZGxlRHJhZ0xlYXZlKGNvbnRleHQsIGRyYWdFeGl0ZWRDYWxsYmFjayk7CiB9CiAKIHN0YXRpYyBn
Ym9vbGVhbiB3ZWJraXRfd2ViX3ZpZXdfZHJhZ19tb3Rpb24oR3RrV2lkZ2V0KiB3aWRnZXQsIEdk
a0RyYWdDb250ZXh0KiBjb250ZXh0LCBnaW50IHgsIGdpbnQgeSwgZ3VpbnQgdGltZSkKIHsKICAg
ICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdpZGdldCk7Ci0gICAg
V2ViS2l0V2ViVmlld1ByaXZhdGUqIHByaXYgPSB3ZWJWaWV3LT5wcml2OwotCi0gICAgRHJvcHBp
bmdDb250ZXh0KiBkcm9wcGluZ0NvbnRleHQgPSAwOwotICAgIEludFBvaW50IHBvc2l0aW9uID0g
SW50UG9pbnQoeCwgeSk7Ci0gICAgaWYgKCFwcml2LT5kcm9wcGluZ0NvbnRleHRzLmNvbnRhaW5z
KGNvbnRleHQpKSB7Ci0gICAgICAgIGRyb3BwaW5nQ29udGV4dCA9IG5ldyBEcm9wcGluZ0NvbnRl
eHQ7Ci0gICAgICAgIGRyb3BwaW5nQ29udGV4dC0+d2ViVmlldyA9IHdlYlZpZXc7Ci0gICAgICAg
IGRyb3BwaW5nQ29udGV4dC0+Z2RrQ29udGV4dCA9IGNvbnRleHQ7Ci0gICAgICAgIGRyb3BwaW5n
Q29udGV4dC0+ZGF0YU9iamVjdCA9IFdlYkNvcmU6OkRhdGFPYmplY3RHdGs6OmNyZWF0ZSgpOwot
ICAgICAgICBkcm9wcGluZ0NvbnRleHQtPmRyb3BIYXBwZW5lZCA9IGZhbHNlOwotICAgICAgICBk
cm9wcGluZ0NvbnRleHQtPmxhc3RNb3Rpb25Qb3NpdGlvbiA9IHBvc2l0aW9uOwotICAgICAgICBw
cml2LT5kcm9wcGluZ0NvbnRleHRzLnNldChjb250ZXh0LCBkcm9wcGluZ0NvbnRleHQpOwotCi0g
ICAgICAgIFZlY3RvcjxHZGtBdG9tPiBhY2NlcHRhYmxlVGFyZ2V0cyhQYXN0ZWJvYXJkSGVscGVy
OjpkZWZhdWx0UGFzdGVib2FyZEhlbHBlcigpLT5kcm9wQXRvbXNGb3JDb250ZXh0KHdpZGdldCwg
Y29udGV4dCkpOwotICAgICAgICBkcm9wcGluZ0NvbnRleHQtPnBlbmRpbmdEYXRhUmVxdWVzdHMg
PSBhY2NlcHRhYmxlVGFyZ2V0cy5zaXplKCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgYWNjZXB0YWJsZVRhcmdldHMuc2l6ZSgpOyBpKyspCi0gICAgICAgICAgICBndGtfZHJhZ19n
ZXRfZGF0YSh3aWRnZXQsIGNvbnRleHQsIGFjY2VwdGFibGVUYXJnZXRzLmF0KGkpLCB0aW1lKTsK
LSAgICB9IGVsc2UgewotICAgICAgICBkcm9wcGluZ0NvbnRleHQgPSBwcml2LT5kcm9wcGluZ0Nv
bnRleHRzLmdldChjb250ZXh0KTsKLSAgICAgICAgZHJvcHBpbmdDb250ZXh0LT5sYXN0TW90aW9u
UG9zaXRpb24gPSBwb3NpdGlvbjsKLSAgICB9Ci0KLSAgICAvLyBEb24ndCBzZW5kIGFueSBkcmFn
IGluZm9ybWF0aW9uIHRvIFdlYkNvcmUgdW50aWwgd2UndmUgcmV0cmlldmVkIGFsbAotICAgIC8v
IHRoZSBkYXRhIGZvciB0aGlzIGRyYWcgb3BlcmF0aW9uLiBPdGhlcndpc2Ugd2UnZCBoYXZlIHRv
IGJsb2NrIHRvIHdhaXQKLSAgICAvLyBmb3IgdGhlIGRyYWcncyBkYXRhLgotICAgIEFTU0VSVChk
cm9wcGluZ0NvbnRleHQpOwotICAgIGlmIChkcm9wcGluZ0NvbnRleHQtPnBlbmRpbmdEYXRhUmVx
dWVzdHMgPiAwKQorICAgIE93blB0cjxEcmFnRGF0YT4gZHJhZ0RhdGEod2ViVmlldy0+cHJpdi0+
ZHJhZ0FuZERyb3BIZWxwZXIuaGFuZGxlRHJhZ01vdGlvbihjb250ZXh0LCBJbnRQb2ludCh4LCB5
KSwgdGltZSkpOworICAgIGlmICghZHJhZ0RhdGEpCiAgICAgICAgIHJldHVybiBUUlVFOwogCi0g
ICAgRHJhZ0RhdGEgZHJhZ0RhdGEoZHJvcHBpbmdDb250ZXh0LT5kYXRhT2JqZWN0LmdldCgpLCBw
b3NpdGlvbiwgY29udmVydFdpZGdldFBvaW50VG9TY3JlZW5Qb2ludCh3aWRnZXQsIHBvc2l0aW9u
KSwgZ2RrRHJhZ0FjdGlvblRvRHJhZ09wZXJhdGlvbihnZGtfZHJhZ19jb250ZXh0X2dldF9hY3Rp
b25zKGNvbnRleHQpKSk7Ci0gICAgRHJhZ09wZXJhdGlvbiBvcGVyYXRpb24gPSBjb3JlKHdlYlZp
ZXcpLT5kcmFnQ29udHJvbGxlcigpLT5kcmFnVXBkYXRlZCgmZHJhZ0RhdGEpOworICAgIERyYWdP
cGVyYXRpb24gb3BlcmF0aW9uID0gY29yZSh3ZWJWaWV3KS0+ZHJhZ0NvbnRyb2xsZXIoKS0+ZHJh
Z1VwZGF0ZWQoZHJhZ0RhdGEuZ2V0KCkpOwogICAgIGdka19kcmFnX3N0YXR1cyhjb250ZXh0LCBk
cmFnT3BlcmF0aW9uVG9TaW5nbGVHZGtEcmFnQWN0aW9uKG9wZXJhdGlvbiksIHRpbWUpOwotCiAg
ICAgcmV0dXJuIFRSVUU7CiB9CiAKIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfdmlld19kcmFnX2Rh
dGFfcmVjZWl2ZWQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0RyYWdDb250ZXh0KiBjb250ZXh0LCBn
aW50IHgsIGdpbnQgeSwgR3RrU2VsZWN0aW9uRGF0YSogc2VsZWN0aW9uRGF0YSwgZ3VpbnQgaW5m
bywgZ3VpbnQgdGltZSkKIHsKICAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gV0VCS0lUX1dF
Ql9WSUVXKHdpZGdldCk7Ci0gICAgV2ViS2l0V2ViVmlld1ByaXZhdGUqIHByaXYgPSB3ZWJWaWV3
LT5wcml2OwotCi0gICAgaWYgKCFwcml2LT5kcm9wcGluZ0NvbnRleHRzLmNvbnRhaW5zKGNvbnRl
eHQpKQorICAgIE93blB0cjxEcmFnRGF0YT4gZHJhZ0RhdGEod2ViVmlldy0+cHJpdi0+ZHJhZ0Fu
ZERyb3BIZWxwZXIuaGFuZGxlRHJhZ0RhdGFSZWNlaXZlZChjb250ZXh0LCBzZWxlY3Rpb25EYXRh
LCBpbmZvKSk7CisgICAgaWYgKCFkcmFnRGF0YSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgRHJv
cHBpbmdDb250ZXh0KiBkcm9wcGluZ0NvbnRleHQgPSBwcml2LT5kcm9wcGluZ0NvbnRleHRzLmdl
dChjb250ZXh0KTsKLSAgICBkcm9wcGluZ0NvbnRleHQtPnBlbmRpbmdEYXRhUmVxdWVzdHMtLTsK
LSAgICBQYXN0ZWJvYXJkSGVscGVyOjpkZWZhdWx0UGFzdGVib2FyZEhlbHBlcigpLT5maWxsRGF0
YU9iamVjdEZyb21Ecm9wRGF0YShzZWxlY3Rpb25EYXRhLCBpbmZvLCBkcm9wcGluZ0NvbnRleHQt
PmRhdGFPYmplY3QuZ2V0KCkpOwotCi0gICAgaWYgKGRyb3BwaW5nQ29udGV4dC0+cGVuZGluZ0Rh
dGFSZXF1ZXN0cykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gVGhlIGNvb3JkaW5hdGVzIHBh
c3NlZCB0byBkcmFnLWRhdGEtcmVjZWl2ZWQgc2lnbmFsIGFyZSBzb21ldGltZXMKLSAgICAvLyBp
bmFjY3VyYXRlIGluIERSVCwgc28gdXNlIHRoZSBjb29yZGluYXRlcyBvZiB0aGUgbGFzdCBtb3Rp
b24gZXZlbnQuCi0gICAgY29uc3QgSW50UG9pbnQmIHBvc2l0aW9uID0gZHJvcHBpbmdDb250ZXh0
LT5sYXN0TW90aW9uUG9zaXRpb247Ci0KLSAgICAvLyBJZiB0aGVyZSBhcmUgbm8gbW9yZSBwZW5k
aW5nIHJlcXVlc3RzLCBzdGFydCBzZW5kaW5nIGRyYWdnaW5nIGRhdGEgdG8gV2ViQ29yZS4KLSAg
ICBEcmFnRGF0YSBkcmFnRGF0YShkcm9wcGluZ0NvbnRleHQtPmRhdGFPYmplY3QuZ2V0KCksIHBv
c2l0aW9uLCBjb252ZXJ0V2lkZ2V0UG9pbnRUb1NjcmVlblBvaW50KHdpZGdldCwgcG9zaXRpb24p
LCBnZGtEcmFnQWN0aW9uVG9EcmFnT3BlcmF0aW9uKGdka19kcmFnX2NvbnRleHRfZ2V0X2FjdGlv
bnMoY29udGV4dCkpKTsKLSAgICBEcmFnT3BlcmF0aW9uIG9wZXJhdGlvbiA9IGNvcmUod2ViVmll
dyktPmRyYWdDb250cm9sbGVyKCktPmRyYWdFbnRlcmVkKCZkcmFnRGF0YSk7CisgICAgRHJhZ09w
ZXJhdGlvbiBvcGVyYXRpb24gPSBjb3JlKHdlYlZpZXcpLT5kcmFnQ29udHJvbGxlcigpLT5kcmFn
RW50ZXJlZChkcmFnRGF0YS5nZXQoKSk7CiAgICAgZ2RrX2RyYWdfc3RhdHVzKGNvbnRleHQsIGRy
YWdPcGVyYXRpb25Ub1NpbmdsZUdka0RyYWdBY3Rpb24ob3BlcmF0aW9uKSwgdGltZSk7CiB9CiAK
IHN0YXRpYyBnYm9vbGVhbiB3ZWJraXRfd2ViX3ZpZXdfZHJhZ19kcm9wKEd0a1dpZGdldCogd2lk
Z2V0LCBHZGtEcmFnQ29udGV4dCogY29udGV4dCwgZ2ludCB4LCBnaW50IHksIGd1aW50IHRpbWUp
CiB7CiAgICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3aWRnZXQp
OwotICAgIFdlYktpdFdlYlZpZXdQcml2YXRlKiBwcml2ID0gd2ViVmlldy0+cHJpdjsKLQotICAg
IGlmICghcHJpdi0+ZHJvcHBpbmdDb250ZXh0cy5jb250YWlucyhjb250ZXh0KSkKKyAgICBPd25Q
dHI8RHJhZ0RhdGE+IGRyYWdEYXRhKHdlYlZpZXctPnByaXYtPmRyYWdBbmREcm9wSGVscGVyLmhh
bmRsZURyYWdEcm9wKGNvbnRleHQsIEludFBvaW50KHgsIHkpKSk7CisgICAgaWYgKCFkcmFnRGF0
YSkKICAgICAgICAgcmV0dXJuIEZBTFNFOwogCi0gICAgRHJvcHBpbmdDb250ZXh0KiBkcm9wcGlu
Z0NvbnRleHQgPSBwcml2LT5kcm9wcGluZ0NvbnRleHRzLmdldChjb250ZXh0KTsKLSAgICBkcm9w
cGluZ0NvbnRleHQtPmRyb3BIYXBwZW5lZCA9IHRydWU7Ci0KLSAgICBJbnRQb2ludCBwb3NpdGlv
bih4LCB5KTsKLSAgICBEcmFnRGF0YSBkcmFnRGF0YShkcm9wcGluZ0NvbnRleHQtPmRhdGFPYmpl
Y3QuZ2V0KCksIHBvc2l0aW9uLCBjb252ZXJ0V2lkZ2V0UG9pbnRUb1NjcmVlblBvaW50KHdpZGdl
dCwgcG9zaXRpb24pLCBnZGtEcmFnQWN0aW9uVG9EcmFnT3BlcmF0aW9uKGdka19kcmFnX2NvbnRl
eHRfZ2V0X2FjdGlvbnMoY29udGV4dCkpKTsKLSAgICBjb3JlKHdlYlZpZXcpLT5kcmFnQ29udHJv
bGxlcigpLT5wZXJmb3JtRHJhZygmZHJhZ0RhdGEpOwotCisgICAgY29yZSh3ZWJWaWV3KS0+ZHJh
Z0NvbnRyb2xsZXIoKS0+cGVyZm9ybURyYWcoZHJhZ0RhdGEuZ2V0KCkpOwogICAgIGd0a19kcmFn
X2ZpbmlzaChjb250ZXh0LCBUUlVFLCBGQUxTRSwgdGltZSk7CiAgICAgcmV0dXJuIFRSVUU7CiB9
CkBAIC0zNDM5LDYgKzMzNDgsNyBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfaW5pdChX
ZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQogCiAgICAgcHJpdi0+c3ViUmVzb3VyY2VzID0gYWRvcHRH
UmVmKGdfaGFzaF90YWJsZV9uZXdfZnVsbChnX3N0cl9oYXNoLCBnX3N0cl9lcXVhbCwgZ19mcmVl
LCBnX29iamVjdF91bnJlZikpOwogCisgICAgcHJpdi0+ZHJhZ0FuZERyb3BIZWxwZXIuc2V0V2lk
Z2V0KEdUS19XSURHRVQod2ViVmlldykpOwogICAgIGd0a19kcmFnX2Rlc3Rfc2V0KEdUS19XSURH
RVQod2ViVmlldyksIHN0YXRpY19jYXN0PEd0a0Rlc3REZWZhdWx0cz4oMCksIDAsIDAsIHN0YXRp
Y19jYXN0PEdka0RyYWdBY3Rpb24+KEdES19BQ1RJT05fQ09QWSB8IEdES19BQ1RJT05fQ09QWSB8
IEdES19BQ1RJT05fTU9WRSB8IEdES19BQ1RJT05fTElOSyB8IEdES19BQ1RJT05fUFJJVkFURSkp
OwogICAgIGd0a19kcmFnX2Rlc3Rfc2V0X3RhcmdldF9saXN0KEdUS19XSURHRVQod2ViVmlldyks
IFBhc3RlYm9hcmRIZWxwZXI6OmRlZmF1bHRQYXN0ZWJvYXJkSGVscGVyKCktPnRhcmdldExpc3Qo
KSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3
cHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXdwcml2YXRl
LmgKaW5kZXggNDhiNDcxNDY2OTIxMGRkODRkYWZmN2Q4Nzc2NDI0OGQwODNmZWRiZS4uOTk0NDRh
YTNhODRmMWY5MTgwZWViNDgyZmM1OGRlM2ZlMWFlNmM0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXdwcml2YXRlLmgKKysrIGIvU291cmNlL1dlYktp
dC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXdwcml2YXRlLmgKQEAgLTIzLDI5ICsyMywxNyBAQAog
I2lmbmRlZiB3ZWJraXR3ZWJ2aWV3cHJpdmF0ZV9oCiAjZGVmaW5lIHdlYmtpdHdlYnZpZXdwcml2
YXRlX2gKIAotI2luY2x1ZGUgIkRhdGFPYmplY3RHdGsuaCIKICNpbmNsdWRlICJGdWxsc2NyZWVu
VmlkZW9Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiR3RrQ2xpY2tDb3VudGVyLmgiCisjaW5jbHVk
ZSAiR3RrRHJhZ0FuZERyb3BIZWxwZXIuaCIKICNpbmNsdWRlICJHT3duUHRyLmgiCiAjaW5jbHVk
ZSAiUGFnZS5oIgogI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlLmgiCiAjaW5jbHVkZSA8d2Via2l0
L3dlYmtpdHdlYnZpZXcuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7Ci0KIFdlYkNvcmU6OlBhZ2Uq
IGNvcmUoV2ViS2l0V2ViVmlldyopOwogV2ViS2l0V2ViVmlldyoga2l0KFdlYkNvcmU6OlBhZ2Uq
KTsKLQotCi10eXBlZGVmIHN0cnVjdCBEcm9wcGluZ0NvbnRleHRfIHsKLSAgICBXZWJLaXRXZWJW
aWV3KiB3ZWJWaWV3OwotICAgIEdka0RyYWdDb250ZXh0KiBnZGtDb250ZXh0OwotICAgIFJlZlB0
cjxXZWJDb3JlOjpEYXRhT2JqZWN0R3RrPiBkYXRhT2JqZWN0OwotICAgIFdlYkNvcmU6OkludFBv
aW50IGxhc3RNb3Rpb25Qb3NpdGlvbjsKLSAgICBpbnQgcGVuZGluZ0RhdGFSZXF1ZXN0czsKLSAg
ICBib29sIGRyb3BIYXBwZW5lZDsKLX0gRHJvcHBpbmdDb250ZXh0OwotCiB9CiAKIGV4dGVybiAi
QyIgewpAQCAtMTAwLDkgKzg4LDcgQEAgc3RydWN0IF9XZWJLaXRXZWJWaWV3UHJpdmF0ZSB7CiAg
ICAgV2ViQ29yZTo6SW50UmVjdCB0b29sdGlwQXJlYTsKIAogICAgIFdlYkNvcmU6Okd0a0NsaWNr
Q291bnRlciBjbGlja0NvdW50ZXI7Ci0gICAgSGFzaE1hcDxHZGtEcmFnQ29udGV4dCosIFJlZlB0
cjxXZWJDb3JlOjpEYXRhT2JqZWN0R3RrPiA+IGRyYWdnaW5nRGF0YU9iamVjdHM7Ci0gICAgSGFz
aE1hcDxHZGtEcmFnQ29udGV4dCosIFdlYktpdDo6RHJvcHBpbmdDb250ZXh0Kj4gZHJvcHBpbmdD
b250ZXh0czsKLQorICAgIFdlYkNvcmU6Okd0a0RyYWdBbmREcm9wSGVscGVyIGRyYWdBbmREcm9w
SGVscGVyOwogICAgIGJvb2wgc2VsZlNjcm9sbGluZzsKIH07CiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>