<?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>99087</bug_id>
          
          <creation_ts>2012-10-11 10:51:16 -0700</creation_ts>
          <short_desc>[EFL][WK2] Implement Favicons API</short_desc>
          <delta_ts>2012-11-04 22:49:31 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit EFL</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>61838</blocked>
    
    <blocked>99265</blocked>
    
    <blocked>101182</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>gyuyoung.kim</cc>
    
    <cc>jesus</cc>
    
    <cc>jinwoo7.song</cc>
    
    <cc>kenneth</cc>
    
    <cc>laszlo.gombos</cc>
    
    <cc>ljaehun.lim</cc>
    
    <cc>lucas.de.marchi</cc>
    
    <cc>rafael.lobo</cc>
    
    <cc>rakuco</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>740135</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-10-11 10:51:16 -0700</bug_when>
    <thetext>We should implement the Favicons API so that clients can retrieve icons for specific URLs.

The GTK port added it recently via Bug 96476.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>740904</commentid>
    <comment_count>1</comment_count>
    <who name="Jinwoo Song">jinwoo7.song</who>
    <bug_when>2012-10-12 07:36:23 -0700</bug_when>
    <thetext>Chris, did you already work for a patch? AFAIK, Jaehun has been refactoring and prepared upstream the internal code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>740915</commentid>
    <comment_count>2</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-10-12 08:06:18 -0700</bug_when>
    <thetext>(In reply to comment #1)
&gt; Chris, did you already work for a patch? AFAIK, Jaehun has been refactoring and prepared upstream the internal code.

Yes, sorry. I have it implemented and I&apos;m in the middle of unit tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>740916</commentid>
    <comment_count>3</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-10-12 08:10:11 -0700</bug_when>
    <thetext>(In reply to comment #1)
&gt; Chris, did you already work for a patch? AFAIK, Jaehun has been refactoring and prepared upstream the internal code.

In the future, please file a bug upstream to indicate that you are working on it. This would minimize the risk of overlapping work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>740942</commentid>
    <comment_count>4</comment_count>
    <who name="Jinwoo Song">jinwoo7.song</who>
    <bug_when>2012-10-12 08:56:07 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (In reply to comment #1)
&gt; &gt; Chris, did you already work for a patch? AFAIK, Jaehun has been refactoring and prepared upstream the internal code.
&gt; 
&gt; In the future, please file a bug upstream to indicate that you are working on it. This would minimize the risk of overlapping work.

I see and I hope the overlapping work should not happen anymore. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>741469</commentid>
    <comment_count>5</comment_count>
      <attachid>168551</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-10-13 06:30:04 -0700</bug_when>
    <thetext>Created attachment 168551
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>741796</commentid>
    <comment_count>6</comment_count>
      <attachid>168551</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-10-15 00:10:00 -0700</bug_when>
    <thetext>Comment on attachment 168551
Patch

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

Just a general question; favicons can be animated and include multiple images (or be generated). Do we support this? and do we have a limit (there can be infinite new images which can fill up memory) I know this could be a security issue and other ports have limits.

&gt; Source/WebCore/platform/graphics/efl/EvasCairoUtilities.cpp:28
&gt; +#include &quot;config.h&quot;
&gt; +#include &quot;EvasCairoUtilities.h&quot;
&gt; +
&gt; +Evas_Object* cairoImageSurfaceToEvasObject(Evas* canvas, cairo_surface_t* surface)
&gt; +{
&gt; +    EINA_SAFETY_ON_NULL_RETURN_VAL(canvas, 0);
&gt; +    EINA_SAFETY_ON_NULL_RETURN_VAL(surface, 0);
&gt; +

We have similar methods (create cairo surface for edje object etc) in RenderThemeEfl, maybe they should be moved.

&gt; Source/WebKit/efl/ewk/ewk_history.cpp:358
&gt; +    return surface ? cairoImageSurfaceToEvasObject(canvas, surface) : 0;

wouldn&apos;t evasObjectFromCairoImageSurface not be a better name?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>741813</commentid>
    <comment_count>7</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-10-15 00:33:32 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 168551 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=168551&amp;action=review
&gt; 
&gt; Just a general question; favicons can be animated and include multiple images (or be generated). Do we support this? and do we have a limit (there can be infinite new images which can fill up memory) I know this could be a security issue and other ports have limits.

We don&apos;t support animated favicons at this point (neither does GTK port). We always return the first frame in the Image.

I cannot find the limit you are talking about in GTK or Qt port. Could you point me in the right direction? They do have functions to clear the icon database though (I&apos;m planning to add this as well but in a later patch for size reasons).


&gt; &gt; Source/WebCore/platform/graphics/efl/EvasCairoUtilities.cpp:28
&gt; &gt; +#include &quot;config.h&quot;
&gt; &gt; +#include &quot;EvasCairoUtilities.h&quot;
&gt; &gt; +
&gt; &gt; +Evas_Object* cairoImageSurfaceToEvasObject(Evas* canvas, cairo_surface_t* surface)
&gt; &gt; +{
&gt; &gt; +    EINA_SAFETY_ON_NULL_RETURN_VAL(canvas, 0);
&gt; &gt; +    EINA_SAFETY_ON_NULL_RETURN_VAL(surface, 0);
&gt; &gt; +
&gt; 
&gt; We have similar methods (create cairo surface for edje object etc) in RenderThemeEfl, maybe they should be moved.

Ok, I&apos;ll take a look, thanks. I&apos;ll probably rename the file to CairoUtilitiesEfl.cpp then.

&gt; 
&gt; &gt; Source/WebKit/efl/ewk/ewk_history.cpp:358
&gt; &gt; +    return surface ? cairoImageSurfaceToEvasObject(canvas, surface) : 0;
&gt; 
&gt; wouldn&apos;t evasObjectFromCairoImageSurface not be a better name?

Why not. I will change it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>741831</commentid>
    <comment_count>8</comment_count>
      <attachid>168643</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-10-15 01:02:30 -0700</bug_when>
    <thetext>Created attachment 168643
Patch

Take Kenneth&apos;s feedback into consideration except for limiting the number of icons.

I cannot find similar icon limiting API in other ports and there is already a mechanism in WebCore&apos;s IconDatabase to expire icons after 4 days.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>741852</commentid>
    <comment_count>9</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-10-15 01:51:26 -0700</bug_when>
    <thetext>&gt; We don&apos;t support animated favicons at this point (neither does GTK port). We always return the first frame in the Image.
&gt; 
&gt; I cannot find the limit you are talking about in GTK or Qt port. Could you point me in the right direction? They do have functions to clear the icon database though (I&apos;m planning to add this as well but in a later patch for size reasons).

Maybe it was never added, but I remember the bugzilla discussions. I think Jesus Sanchez-Palencia worked on it, but I might be wrong.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>741859</commentid>
    <comment_count>10</comment_count>
      <attachid>168643</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-10-15 01:58:57 -0700</bug_when>
    <thetext>Comment on attachment 168643
Patch

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

&gt; Source/WebKit2/UIProcess/API/efl/ewk_favicon_database.cpp:205
&gt; +    Evas_Object* icon = response-&gt;surface ? WebCore::evasObjectFromCairoImageSurface(response-&gt;callbackData.evas, response-&gt;surface.get()) : 0;

RefPtr? Evas_Object should support it

&gt; Source/WebKit2/UIProcess/API/efl/ewk_favicon_database.cpp:229
&gt; +    // If there&apos;s not a valid icon, but there&apos;s an iconURL registered,

If there is no valid icon?

&gt; Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_favicon_database.cpp:100
&gt; +    while (!iconChanged)
&gt; +        ecore_main_loop_iterate();

newline after this

&gt; Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_favicon_database.cpp:156
&gt; +    while (!data.icon)
&gt; +        ecore_main_loop_iterate();

newline

&gt; Source/WebKit2/UIProcess/efl/WebContextEfl.cpp:57
&gt; +    return String::fromUTF8(efreet_data_home_get()) + &quot;/WebKitEfl/IconDatabase&quot;;

so I suppose this is a hidden dir?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>741862</commentid>
    <comment_count>11</comment_count>
      <attachid>168643</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-10-15 02:01:44 -0700</bug_when>
    <thetext>Comment on attachment 168643
Patch

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

&gt;&gt; Source/WebKit2/UIProcess/efl/WebContextEfl.cpp:57
&gt;&gt; +    return String::fromUTF8(efreet_data_home_get()) + &quot;/WebKitEfl/IconDatabase&quot;;
&gt; 
&gt; so I suppose this is a hidden dir?

Yes. By default, efreet_data_home_get() (or XDG_DATA_HOME) is ~/.local/share</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>741872</commentid>
    <comment_count>12</comment_count>
      <attachid>168654</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-10-15 02:17:42 -0700</bug_when>
    <thetext>Created attachment 168654
Patch for landing

Take Kenneth&apos;s feedback into consideration.

Using RefPtr to Evas_Object looks much better indeed, thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>742030</commentid>
    <comment_count>13</comment_count>
    <who name="Jesus Sanchez-Palencia">jesus</who>
    <bug_when>2012-10-15 07:13:15 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; &gt; We don&apos;t support animated favicons at this point (neither does GTK port). We always return the first frame in the Image.
&gt; &gt; 
&gt; &gt; I cannot find the limit you are talking about in GTK or Qt port. Could you point me in the right direction? They do have functions to clear the icon database though (I&apos;m planning to add this as well but in a later patch for size reasons).
&gt; 
&gt; Maybe it was never added, but I remember the bugzilla discussions. I think Jesus Sanchez-Palencia worked on it, but I might be wrong.

It was Rafael who worked on it, Kenneth. He is now CC&apos;ed here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>742301</commentid>
    <comment_count>14</comment_count>
      <attachid>168654</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-15 12:44:11 -0700</bug_when>
    <thetext>Comment on attachment 168654
Patch for landing

Clearing flags on attachment: 168654

Committed r131337: &lt;http://trac.webkit.org/changeset/131337&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>742302</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-15 12:44:16 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>168551</attachid>
            <date>2012-10-13 06:30:04 -0700</date>
            <delta_ts>2012-10-15 01:02:30 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>99087_favicon_database.patch</filename>
            <type>text/plain</type>
            <size>56552</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAzYTcxMzA1Li4yMzk4YTM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEg
QEAKKzIwMTItMTAtMTMgIENocmlzdG9waGUgRHVtZXogIDxjaHJpc3RvcGhlLmR1bWV6QGludGVs
LmNvbT4KKworICAgICAgICBbRUZMXVtXSzJdIEltcGxlbWVudCBGYXZpY29ucyBBUEkKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk5MDg3CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92ZWQgZXdrX3V0aWwg
ZnJvbSBXZWJLaXQgdG8gV2ViQ29yZSBhbmQgcmVuYW1lIGl0CisgICAgICAgIHRvIEV2YXNDYWly
b1V0aWxpdGllcyBzbyB0aGF0IHRoZSBjb2RlIGNhbiBiZSBzaGFyZWQKKyAgICAgICAgYmV0d2Vl
biBXZWJLaXQxIGFuZCBXZWJLaXQyLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgbm8gYmVoYXZp
b3IgY2hhbmdlLgorCisgICAgICAgICogUGxhdGZvcm1FZmwuY21ha2U6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZWZsL0V2YXNDYWlyb1V0aWxpdGllcy5jcHA6IFJlbmFtZWQgZnJvbSBT
b3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3V0aWwuY3BwLgorICAgICAgICAoY2Fpcm9JbWFnZVN1
cmZhY2VUb0V2YXNPYmplY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2VmbC9FdmFz
Q2Fpcm9VdGlsaXRpZXMuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tf
dXRpbF9wcml2YXRlLmguCisKIDIwMTItMTAtMTIgIEFuZHJlYXMgS2xpbmcgIDxrbGluZ0B3ZWJr
aXQub3JnPgogCiAgICAgICAgIFJlbmRlckJSIHNob3VsZCBzaGFyZSBpdHMgY29uc3RhbnQgbmV3
bGluZSBzdHJpbmcgYmV0d2VlbiBpbnN0YW5jZXMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9QbGF0Zm9ybUVmbC5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlCmlu
ZGV4IDJhMTdjOWIuLmQwODE2OGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3Jt
RWZsLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlCkBAIC01Miw2
ICs1Miw3IEBAIExJU1QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICBwbGF0Zm9ybS9lZmwvVGVt
cG9yYXJ5TGlua1N0dWJzLmNwcAogICBwbGF0Zm9ybS9lZmwvV2lkZ2V0RWZsLmNwcAogICBwbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHAKKyAgcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0V2
YXNDYWlyb1V0aWxpdGllcy5jcHAKICAgcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0ljb25FZmwuY3Bw
CiAgIHBsYXRmb3JtL2dyYXBoaWNzL2VmbC9JbWFnZUVmbC5jcHAKICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvZWZsL0ludFBvaW50RWZsLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZWZsL0V2YXNDYWlyb1V0aWxpdGllcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9lZmwvRXZhc0NhaXJvVXRpbGl0aWVzLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi43MGIxYTNjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0V2YXNDYWlyb1V0aWxpdGllcy5jcHAKQEAg
LTAsMCArMSw4MyBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBQcm9GVVNJT04g
ZW1iZWRkZWQgc3lzdGVtcworICAgIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFNhbXN1bmcgRWxl
Y3Ryb25pY3MKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAg
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAg
ICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRXZhc0NhaXJvVXRp
bGl0aWVzLmgiCisKK0V2YXNfT2JqZWN0KiBjYWlyb0ltYWdlU3VyZmFjZVRvRXZhc09iamVjdChF
dmFzKiBjYW52YXMsIGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSkKK3sKKyAgICBFSU5BX1NBRkVU
WV9PTl9OVUxMX1JFVFVSTl9WQUwoY2FudmFzLCAwKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxM
X1JFVFVSTl9WQUwoc3VyZmFjZSwgMCk7CisKKyAgICBjYWlyb19zdGF0dXNfdCBzdGF0dXMgPSBj
YWlyb19zdXJmYWNlX3N0YXR1cyhzdXJmYWNlKTsKKyAgICBpZiAoc3RhdHVzICE9IENBSVJPX1NU
QVRVU19TVUNDRVNTKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiY2Fpcm8gc3VyZmFjZSBp
cyBpbnZhbGlkOiAlcyIsIGNhaXJvX3N0YXR1c190b19zdHJpbmcoc3RhdHVzKSk7CisgICAgICAg
IHJldHVybiAwOworICAgIH0KKworICAgIGNhaXJvX3N1cmZhY2VfdHlwZV90IHR5cGUgPSBjYWly
b19zdXJmYWNlX2dldF90eXBlKHN1cmZhY2UpOworICAgIGlmICh0eXBlICE9IENBSVJPX1NVUkZB
Q0VfVFlQRV9JTUFHRSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInVua25vd24gc3VyZmFj
ZSB0eXBlICVkLCByZXF1aXJlZCAlZCAoQ0FJUk9fU1VSRkFDRV9UWVBFX0lNQUdFKS4iLAorICAg
ICAgICAgICAgdHlwZSwgQ0FJUk9fU1VSRkFDRV9UWVBFX0lNQUdFKTsKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgfQorCisgICAgY2Fpcm9fZm9ybWF0X3QgZm9ybWF0ID0gY2Fpcm9faW1hZ2Vfc3Vy
ZmFjZV9nZXRfZm9ybWF0KHN1cmZhY2UpOworICAgIGlmIChmb3JtYXQgIT0gQ0FJUk9fRk9STUFU
X0FSR0IzMiAmJiBmb3JtYXQgIT0gQ0FJUk9fRk9STUFUX1JHQjI0KSB7CisgICAgICAgIGZwcmlu
dGYoc3RkZXJyLCAidW5rbm93biBzdXJmYWNlIGZvcm1hdCAlZCwgZXhwZWN0ZWQgJWQgb3IgJWQu
IiwKKyAgICAgICAgICAgIGZvcm1hdCwgQ0FJUk9fRk9STUFUX0FSR0IzMiwgQ0FJUk9fRk9STUFU
X1JHQjI0KTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgaW50IHdpZHRoID0gY2Fp
cm9faW1hZ2Vfc3VyZmFjZV9nZXRfd2lkdGgoc3VyZmFjZSk7CisgICAgaW50IGhlaWdodCA9IGNh
aXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2hlaWdodChzdXJmYWNlKTsKKyAgICBpbnQgc3RyaWRlID0g
Y2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfc3RyaWRlKHN1cmZhY2UpOworICAgIGlmICh3aWR0aCA8
PSAwIHx8IGhlaWdodCA8PSAwIHx8IHN0cmlkZSA8PSAwKSB7CisgICAgICAgIGZwcmludGYoc3Rk
ZXJyLCAiaW52YWxpZCBpbWFnZSBzaXplICVkeCVkLCBzdHJpZGU9JWQiLCB3aWR0aCwgaGVpZ2h0
LCBzdHJpZGUpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICB2b2lkKiBkYXRhID0g
Y2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShzdXJmYWNlKTsKKyAgICBpZiAoIWRhdGEpIHsK
KyAgICAgICAgZnByaW50ZihzdGRlcnIsICJjb3VsZCBub3QgZ2V0IHNvdXJjZSBkYXRhLiIpOwor
ICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBFdmFzX09iamVjdCogaW1hZ2UgPSBldmFz
X29iamVjdF9pbWFnZV9maWxsZWRfYWRkKGNhbnZhcyk7CisgICAgaWYgKCFpbWFnZSkgeworICAg
ICAgICBmcHJpbnRmKHN0ZGVyciwgImNvdWxkIG5vdCBhZGQgaW1hZ2UgdG8gY2FudmFzLiIpOwor
ICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBldmFzX29iamVjdF9pbWFnZV9jb2xvcnNw
YWNlX3NldChpbWFnZSwgRVZBU19DT0xPUlNQQUNFX0FSR0I4ODg4KTsKKyAgICBldmFzX29iamVj
dF9pbWFnZV9zaXplX3NldChpbWFnZSwgd2lkdGgsIGhlaWdodCk7CisgICAgZXZhc19vYmplY3Rf
aW1hZ2VfYWxwaGFfc2V0KGltYWdlLCBmb3JtYXQgPT0gQ0FJUk9fRk9STUFUX0FSR0IzMik7CisK
KyAgICBpZiAoZXZhc19vYmplY3RfaW1hZ2Vfc3RyaWRlX2dldChpbWFnZSkgIT0gc3RyaWRlKSB7
CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiZXZhcycgc3RyaWRlICVkIGRpdmVyZ2VzIGZyb20g
Y2Fpcm8ncyAlZC4iLAorICAgICAgICAgICAgZXZhc19vYmplY3RfaW1hZ2Vfc3RyaWRlX2dldChp
bWFnZSksIHN0cmlkZSk7CisgICAgICAgIGV2YXNfb2JqZWN0X2RlbChpbWFnZSk7CisgICAgICAg
IHJldHVybiAwOworICAgIH0KKworICAgIGV2YXNfb2JqZWN0X2ltYWdlX2RhdGFfY29weV9zZXQo
aW1hZ2UsIGRhdGEpOworCisgICAgcmV0dXJuIGltYWdlOworfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0V2YXNDYWlyb1V0aWxpdGllcy5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0V2YXNDYWlyb1V0aWxpdGllcy5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3ZmE0MmEKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvRXZhc0NhaXJvVXRpbGl0
aWVzLmgKQEAgLTAsMCArMSwyOSBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBQ
cm9GVVNJT04gZW1iZWRkZWQgc3lzdGVtcworICAgIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFNh
bXN1bmcgRWxlY3Ryb25pY3MKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisqLworCisjaWZuZGVmIEV2YXNDYWlyb1V0aWxpdGllc19oCisjZGVm
aW5lIEV2YXNDYWlyb1V0aWxpdGllc19oCisKKyNpbmNsdWRlIDxFdmFzLmg+CisjaW5jbHVkZSA8
Y2Fpcm8uaD4KKworRXZhc19PYmplY3QqIGNhaXJvSW1hZ2VTdXJmYWNlVG9FdmFzT2JqZWN0KEV2
YXMqIGNhbnZhcywgY2Fpcm9fc3VyZmFjZV90Kik7CisKKyNlbmRpZiAvLyBFdmFzQ2Fpcm9VdGls
aXRpZXNfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
S2l0L0NoYW5nZUxvZwppbmRleCBjMjlmOGI5Li5kOTE2YzNjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsx
LDE1IEBACisyMDEyLTEwLTEzICBDaHJpc3RvcGhlIER1bWV6ICA8Y2hyaXN0b3BoZS5kdW1lekBp
bnRlbC5jb20+CisKKyAgICAgICAgW0VGTF1bV0syXSBJbXBsZW1lbnQgRmF2aWNvbnMgQVBJCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05OTA4NworCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlbW92ZSBld2tf
dXRpbC5jcHAgZnJvbSBQbGF0Zm9ybUVmbC5jbWFrZSBub3cgdGhhdCBpdHMKKyAgICAgICAgY29k
ZSBoYXMgYmVlbiBtb3ZlZCB0byBXZWJDb3JlIHRvIGJlIHJldXNlZCBpbiBXSzIuCisKKyAgICAg
ICAgKiBQbGF0Zm9ybUVmbC5jbWFrZToKKwogMjAxMi0xMC0xMiAgU2hlcmlmZiBCb3QgIDx3ZWJr
aXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBv
dXQgcjEzMTE4OS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1FZmwuY21ha2Ug
Yi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtRWZsLmNtYWtlCmluZGV4IGY5Yjg4NTYuLjQxZWU5NDEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1FZmwuY21ha2UKKysrIGIvU291cmNl
L1dlYktpdC9QbGF0Zm9ybUVmbC5jbWFrZQpAQCAtMTI0LDcgKzEyNCw2IEBAIExJU1QoQVBQRU5E
IFdlYktpdF9TT1VSQ0VTCiAgICAgZWZsL2V3ay9ld2tfdGlsZWRfbWF0cml4LmNwcAogICAgIGVm
bC9ld2svZXdrX3RpbGVkX21vZGVsLmNwcAogICAgIGVmbC9ld2svZXdrX3RvdWNoX2V2ZW50LmNw
cAotICAgIGVmbC9ld2svZXdrX3V0aWwuY3BwCiAgICAgZWZsL2V3ay9ld2tfdmlldy5jcHAKICAg
ICBlZmwvZXdrL2V3a192aWV3X3NpbmdsZS5jcHAKICAgICBlZmwvZXdrL2V3a192aWV3X3RpbGVk
LmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvQ2hhbmdlTG9nIGIvU291cmNlL1dl
YktpdC9lZmwvQ2hhbmdlTG9nCmluZGV4IGY5NGI0Y2QuLjY0MTA5ZDkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvZWZsL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwxOCBAQAorMjAxMi0xMC0xMyAgQ2hyaXN0b3BoZSBEdW1leiAgPGNocmlz
dG9waGUuZHVtZXpAaW50ZWwuY29tPgorCisgICAgICAgIFtFRkxdW1dLMl0gSW1wbGVtZW50IEZh
dmljb25zIEFQSQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9OTkwODcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBSZW1vdmUgZXdrX3V0aWwgbm93IHRoYXQgaXRzIGNvZGUgaGFzIGJlZW4gbW92ZWQKKyAgICAg
ICAgdG8gRXZhc0NhaXJvVXRpbGl0aWVzIGluIFdlYkNvcmUuCisKKyAgICAgICAgKiBld2svZXdr
X2hpc3RvcnkuY3BwOgorICAgICAgICAoZXdrX2hpc3RvcnlfaXRlbV9pY29uX29iamVjdF9hZGQp
OgorICAgICAgICAqIGV3ay9ld2tfc2V0dGluZ3MuY3BwOgorICAgICAgICAoZXdrX3NldHRpbmdz
X2ljb25fZGF0YWJhc2VfaWNvbl9vYmplY3RfZ2V0KToKKwogMjAxMi0xMC0xMSAgR3l1eW91bmcg
S2ltICA8Z3l1eW91bmcua2ltQHNhbXN1bmcuY29tPgogCiAgICAgICAgIFtFRkxdIFJlbW92ZSAi
d2ViIiB3b3JkIGluIHdlYiBpbnNwZWN0b3IKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZs
L2V3ay9ld2tfaGlzdG9yeS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX2hpc3Rvcnku
Y3BwCmluZGV4IDBkYWUwM2QuLjM3NTBiYWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZWZs
L2V3ay9ld2tfaGlzdG9yeS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19oaXN0
b3J5LmNwcApAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgImV3a19oaXN0b3J5LmgiCiAKICNp
bmNsdWRlICJCYWNrRm9yd2FyZExpc3RJbXBsLmgiCisjaW5jbHVkZSAiRXZhc0NhaXJvVXRpbGl0
aWVzLmgiCiAjaW5jbHVkZSAiSGlzdG9yeUl0ZW0uaCIKICNpbmNsdWRlICJJY29uRGF0YWJhc2VC
YXNlLmgiCiAjaW5jbHVkZSAiSW1hZ2UuaCIKQEAgLTMwLDcgKzMxLDYgQEAKICNpbmNsdWRlICJQ
YWdlR3JvdXAuaCIKICNpbmNsdWRlICJld2tfaGlzdG9yeV9wcml2YXRlLmgiCiAjaW5jbHVkZSAi
ZXdrX3ByaXZhdGUuaCIKLSNpbmNsdWRlICJld2tfdXRpbF9wcml2YXRlLmgiCiAjaW5jbHVkZSA8
RWluYS5oPgogI2luY2x1ZGUgPGVpbmFfc2FmZXR5X2NoZWNrcy5oPgogI2luY2x1ZGUgPHd0Zi90
ZXh0L0NTdHJpbmcuaD4KQEAgLTM1NSw3ICszNTUsNyBAQCBFdmFzX09iamVjdCogZXdrX2hpc3Rv
cnlfaXRlbV9pY29uX29iamVjdF9hZGQoY29uc3QgRXdrX0hpc3RvcnlfSXRlbSogaXRlbSwgRXZh
cwogICAgIH0KIAogICAgIGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSA9IGljb24tPnN1cmZhY2Uo
KTsKLSAgICByZXR1cm4gc3VyZmFjZSA/IGV3a191dGlsX2ltYWdlX2Zyb21fY2Fpcm9fc3VyZmFj
ZV9hZGQoY2FudmFzLCBzdXJmYWNlKSA6IDA7CisgICAgcmV0dXJuIHN1cmZhY2UgPyBjYWlyb0lt
YWdlU3VyZmFjZVRvRXZhc09iamVjdChjYW52YXMsIHN1cmZhY2UpIDogMDsKIH0KIAogRWluYV9C
b29sIGV3a19oaXN0b3J5X2l0ZW1fcGFnZV9jYWNoZV9leGlzdHMoY29uc3QgRXdrX0hpc3Rvcnlf
SXRlbSogaXRlbSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfc2V0dGlu
Z3MuY3BwIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19zZXR0aW5ncy5jcHAKaW5kZXggZjEw
NTIzZC4uYmRmYmE3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19zZXR0
aW5ncy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19zZXR0aW5ncy5jcHAKQEAg
LTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlICJBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5oIgogI2lu
Y2x1ZGUgIkNyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGUuaCIKICNpbmNsdWRlICJEYXRh
YmFzZVRyYWNrZXIuaCIKKyNpbmNsdWRlICJFdmFzQ2Fpcm9VdGlsaXRpZXMuaCIKICNpbmNsdWRl
ICJGb250Q2FjaGUuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJJY29uRGF0
YWJhc2UuaCIKQEAgLTM4LDcgKzM5LDYgQEAKICNpbmNsdWRlICJTdG9yYWdlVHJhY2tlci5oIgog
I2luY2x1ZGUgIldlYktpdFZlcnNpb24uaCIKICNpbmNsdWRlICJld2tfcHJpdmF0ZS5oIgotI2lu
Y2x1ZGUgImV3a191dGlsX3ByaXZhdGUuaCIKICNpbmNsdWRlIDxFaW5hLmg+CiAjaW5jbHVkZSA8
ZWluYV9zYWZldHlfY2hlY2tzLmg+CiAjaW5jbHVkZSA8ZXJybm8uaD4KQEAgLTIyOSw3ICsyMjks
NyBAQCBFdmFzX09iamVjdCogZXdrX3NldHRpbmdzX2ljb25fZGF0YWJhc2VfaWNvbl9vYmplY3Rf
Z2V0KGNvbnN0IGNoYXIqIHVybCwgRXZhcyogYwogICAgIH0KIAogICAgIGNhaXJvX3N1cmZhY2Vf
dCogc3VyZmFjZSA9IGljb24tPnN1cmZhY2UoKTsKLSAgICByZXR1cm4gc3VyZmFjZSA/IGV3a191
dGlsX2ltYWdlX2Zyb21fY2Fpcm9fc3VyZmFjZV9hZGQoY2FudmFzLCBzdXJmYWNlKSA6IDA7Cisg
ICAgcmV0dXJuIHN1cmZhY2UgPyBjYWlyb0ltYWdlU3VyZmFjZVRvRXZhc09iamVjdChjYW52YXMs
IHN1cmZhY2UpIDogMDsKIH0KIAogdm9pZCBld2tfc2V0dGluZ3Nfb2JqZWN0X2NhY2hlX2NhcGFj
aXR5X3NldCh1bnNpZ25lZCBtaW5EZWFkQ2FwYWNpdHksIHVuc2lnbmVkIG1heERlYWRDYXBhY2l0
eSwgdW5zaWduZWQgdG90YWxDYXBhY2l0eSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZs
L2V3ay9ld2tfdXRpbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3V0aWwuY3BwCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YjZjZjAzLi4wMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJLaXQvZWZsL2V3ay9ld2tfdXRpbC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw5MyArMCww
IEBACi0vKgotICAgIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFByb0ZVU0lPTiBlbWJlZGRlZCBz
eXN0ZW1zCi0gICAgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcwot
Ci0gICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0g
ICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCi0gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2luY2x1ZGUgImV3a19wcml2YXRlLmgiCi0jaW5j
bHVkZSAiZXdrX3V0aWxfcHJpdmF0ZS5oIgotI2luY2x1ZGUgPGVpbmFfc2FmZXR5X2NoZWNrcy5o
PgotCi0vKioKLSAqIENvbnZlcnRzIGFuIGltYWdlIGZyb20gY2Fpcm9fc3VyZmFjZSB0byB0aGUg
RXZhc19PYmplY3QuCi0gKgotICogQHBhcmFtIGNhbnZhcyBkaXNwbGF5IGNhbnZhcwotICogQHBh
cmFtIHN1cmZhY2UgY2Fpcm8gcmVwcmVzZW50YXRpb24gb2YgYW4gaW1hZ2UKLSAqIEByZXR1cm4g
Y29udmVydGVkIGNhaXJvX3N1cmZhY2Ugb2JqZWN0IHRvIHRoZSBFdmFzX09iamVjdAotICovCi1F
dmFzX09iamVjdCogZXdrX3V0aWxfaW1hZ2VfZnJvbV9jYWlyb19zdXJmYWNlX2FkZChFdmFzKiBj
YW52YXMsIGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSkKLXsKLSAgICBFSU5BX1NBRkVUWV9PTl9O
VUxMX1JFVFVSTl9WQUwoY2FudmFzLCAwKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVS
Tl9WQUwoc3VyZmFjZSwgMCk7Ci0KLSAgICBjYWlyb19zdGF0dXNfdCBzdGF0dXMgPSBjYWlyb19z
dXJmYWNlX3N0YXR1cyhzdXJmYWNlKTsKLSAgICBpZiAoc3RhdHVzICE9IENBSVJPX1NUQVRVU19T
VUNDRVNTKSB7Ci0gICAgICAgIEVSUigiY2Fpcm8gc3VyZmFjZSBpcyBpbnZhbGlkOiAlcyIsIGNh
aXJvX3N0YXR1c190b19zdHJpbmcoc3RhdHVzKSk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0K
LQotICAgIGNhaXJvX3N1cmZhY2VfdHlwZV90IHR5cGUgPSBjYWlyb19zdXJmYWNlX2dldF90eXBl
KHN1cmZhY2UpOwotICAgIGlmICh0eXBlICE9IENBSVJPX1NVUkZBQ0VfVFlQRV9JTUFHRSkgewot
ICAgICAgICBFUlIoInVua25vd24gc3VyZmFjZSB0eXBlICVkLCByZXF1aXJlZCAlZCAoQ0FJUk9f
U1VSRkFDRV9UWVBFX0lNQUdFKS4iLAotICAgICAgICAgICAgdHlwZSwgQ0FJUk9fU1VSRkFDRV9U
WVBFX0lNQUdFKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgY2Fpcm9fZm9ybWF0
X3QgZm9ybWF0ID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZm9ybWF0KHN1cmZhY2UpOwotICAg
IGlmIChmb3JtYXQgIT0gQ0FJUk9fRk9STUFUX0FSR0IzMiAmJiBmb3JtYXQgIT0gQ0FJUk9fRk9S
TUFUX1JHQjI0KSB7Ci0gICAgICAgIEVSUigidW5rbm93biBzdXJmYWNlIGZvcm1hdCAlZCwgZXhw
ZWN0ZWQgJWQgb3IgJWQuIiwKLSAgICAgICAgICAgIGZvcm1hdCwgQ0FJUk9fRk9STUFUX0FSR0Iz
MiwgQ0FJUk9fRk9STUFUX1JHQjI0KTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAg
aW50IHdpZHRoID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfd2lkdGgoc3VyZmFjZSk7Ci0gICAg
aW50IGhlaWdodCA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2hlaWdodChzdXJmYWNlKTsKLSAg
ICBpbnQgc3RyaWRlID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfc3RyaWRlKHN1cmZhY2UpOwot
ICAgIGlmICh3aWR0aCA8PSAwIHx8IGhlaWdodCA8PSAwIHx8IHN0cmlkZSA8PSAwKSB7Ci0gICAg
ICAgIEVSUigiaW52YWxpZCBpbWFnZSBzaXplICVkeCVkLCBzdHJpZGU9JWQiLCB3aWR0aCwgaGVp
Z2h0LCBzdHJpZGUpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICB2b2lkKiBkYXRh
ID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShzdXJmYWNlKTsKLSAgICBpZiAoIWRhdGEp
IHsKLSAgICAgICAgRVJSKCJjb3VsZCBub3QgZ2V0IHNvdXJjZSBkYXRhLiIpOwotICAgICAgICBy
ZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBFdmFzX09iamVjdCogaW1hZ2UgPSBldmFzX29iamVjdF9p
bWFnZV9maWxsZWRfYWRkKGNhbnZhcyk7Ci0gICAgaWYgKCFpbWFnZSkgewotICAgICAgICBFUlIo
ImNvdWxkIG5vdCBhZGQgaW1hZ2UgdG8gY2FudmFzLiIpOwotICAgICAgICByZXR1cm4gMDsKLSAg
ICB9Ci0KLSAgICBldmFzX29iamVjdF9pbWFnZV9jb2xvcnNwYWNlX3NldChpbWFnZSwgRVZBU19D
T0xPUlNQQUNFX0FSR0I4ODg4KTsKLSAgICBldmFzX29iamVjdF9pbWFnZV9zaXplX3NldChpbWFn
ZSwgd2lkdGgsIGhlaWdodCk7Ci0gICAgZXZhc19vYmplY3RfaW1hZ2VfYWxwaGFfc2V0KGltYWdl
LCBmb3JtYXQgPT0gQ0FJUk9fRk9STUFUX0FSR0IzMik7Ci0KLSAgICBpZiAoZXZhc19vYmplY3Rf
aW1hZ2Vfc3RyaWRlX2dldChpbWFnZSkgIT0gc3RyaWRlKSB7Ci0gICAgICAgIEVSUigiZXZhcycg
c3RyaWRlICVkIGRpdmVyZ2VzIGZyb20gY2Fpcm8ncyAlZC4iLAotICAgICAgICAgICAgZXZhc19v
YmplY3RfaW1hZ2Vfc3RyaWRlX2dldChpbWFnZSksIHN0cmlkZSk7Ci0gICAgICAgIGV2YXNfb2Jq
ZWN0X2RlbChpbWFnZSk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIGV2YXNfb2Jq
ZWN0X2ltYWdlX2RhdGFfY29weV9zZXQoaW1hZ2UsIGRhdGEpOwotCi0gICAgcmV0dXJuIGltYWdl
OwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a191dGlsX3ByaXZhdGUu
aCBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdXRpbF9wcml2YXRlLmgKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGJlZTJkMGUuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9l
ZmwvZXdrL2V3a191dGlsX3ByaXZhdGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAK
LS8qCi0gICAgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgUHJvRlVTSU9OIGVtYmVkZGVkIHN5c3Rl
bXMKLSAgICBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzCi0KLSAg
ICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
LSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotKi8KLQot
I2lmbmRlZiBld2tfdXRpbF9wcml2YXRlX2gKLSNkZWZpbmUgZXdrX3V0aWxfcHJpdmF0ZV9oCi0K
LSNpbmNsdWRlIDxFdmFzLmg+Ci0jaW5jbHVkZSA8Y2Fpcm8uaD4KLQotRXZhc19PYmplY3QgKmV3
a191dGlsX2ltYWdlX2Zyb21fY2Fpcm9fc3VyZmFjZV9hZGQoRXZhcyAqY2FudmFzLCBjYWlyb19z
dXJmYWNlX3QgKnN1cmZhY2UpOwotCi0jZW5kaWYgLy8gZXdrX3V0aWxfcHJpdmF0ZV9oCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VM
b2cKaW5kZXggZTRhZjQ4ZC4uYzA5ZDg3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hh
bmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcwIEBACisy
MDEyLTEwLTEzICBDaHJpc3RvcGhlIER1bWV6ICA8Y2hyaXN0b3BoZS5kdW1lekBpbnRlbC5jb20+
CisKKyAgICAgICAgW0VGTF1bV0syXSBJbXBsZW1lbnQgRmF2aWNvbnMgQVBJCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05OTA4NworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBzdXBwb3J0IGZvciBmYXZp
Y29uIEFQSSB0byBFRkwgV0syIHBvcnQgdmlhCisgICAgICAgIEV3a19GYXZpY29uX0RhdGFiYXNl
LiBUaGUgQVBJIGNhbiBiZSB1c2VkIHRvCisgICAgICAgIHJldHJpZXZlIHRoZSBmYXZpY29uIFVS
TCBhbmQgZGF0YSBmb3IgYSBnaXZlbgorICAgICAgICBwYWdlIFVSTC4KKworICAgICAgICAqIFBs
YXRmb3JtRWZsLmNtYWtlOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL0VXZWJLaXQyLmg6
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuY3BwOgorICAgICAgICAo
X0V3a19Db250ZXh0KToKKyAgICAgICAgKF9Fd2tfQ29udGV4dDo6X0V3a19Db250ZXh0KToKKyAg
ICAgICAgKF9Fd2tfQ29udGV4dDo6fl9Fd2tfQ29udGV4dCk6CisgICAgICAgIChld2tfY29udGV4
dF9mYXZpY29uX2RhdGFiYXNlX2dldCk6IEFkZCBnZXR0ZXIgdG8gcmV0cmlldmUgdGhlIGZhdmlj
b24KKyAgICAgICAgZGF0YWJhc2UgaW5zdGFuY2UgZnJvbSB0aGUgY29udGV4dC4KKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvZWZsL2V3a19mYXZpY29uX2RhdGFiYXNlLmNwcDogQWRkZWQuCisgICAgICAgIChJY29uQ2hh
bmdlQ2FsbGJhY2tEYXRhKToKKyAgICAgICAgKEljb25DaGFuZ2VDYWxsYmFja0RhdGE6Okljb25D
aGFuZ2VDYWxsYmFja0RhdGEpOgorICAgICAgICAoSWNvblJlcXVlc3RDYWxsYmFja0RhdGEpOgor
ICAgICAgICAoSWNvblJlcXVlc3RDYWxsYmFja0RhdGE6Okljb25SZXF1ZXN0Q2FsbGJhY2tEYXRh
KToKKyAgICAgICAgKF9Fd2tfRmF2aWNvbl9EYXRhYmFzZSk6CisgICAgICAgIChfRXdrX0Zhdmlj
b25fRGF0YWJhc2U6Ol9Fd2tfRmF2aWNvbl9EYXRhYmFzZSk6CisgICAgICAgIChkaWRDaGFuZ2VJ
Y29uRm9yUGFnZVVSTCk6CisgICAgICAgIChnZXRJY29uU3VyZmFjZVN5bmNocm9ub3VzbHkpOgor
ICAgICAgICAoaWNvbkRhdGFSZWFkeUZvclBhZ2VVUkwpOgorICAgICAgICAoZXdrX2Zhdmljb25f
ZGF0YWJhc2VfbmV3KToKKyAgICAgICAgKGV3a19mYXZpY29uX2RhdGFiYXNlX2ZyZWUpOgorICAg
ICAgICAoZXdrX2Zhdmljb25fZGF0YWJhc2VfaWNvbl91cmxfZ2V0KToKKyAgICAgICAgKEFzeW5j
SWNvblJlcXVlc3RSZXNwb25zZSk6CisgICAgICAgIChBc3luY0ljb25SZXF1ZXN0UmVzcG9uc2U6
OkFzeW5jSWNvblJlcXVlc3RSZXNwb25zZSk6CisgICAgICAgIChyZXNwb25kX2ljb25fcmVxdWVz
dF9pZGxlKToKKyAgICAgICAgKGV3a19mYXZpY29uX2RhdGFiYXNlX2FzeW5jX2ljb25fZ2V0KToK
KyAgICAgICAgKGV3a19mYXZpY29uX2RhdGFiYXNlX2ljb25fY2hhbmdlX2NhbGxiYWNrX2FkZCk6
CisgICAgICAgIChld2tfZmF2aWNvbl9kYXRhYmFzZV9pY29uX2NoYW5nZV9jYWxsYmFja19kZWwp
OgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19mYXZpY29uX2RhdGFiYXNlLmg6IEFk
ZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19mYXZpY29uX2RhdGFiYXNlX3By
aXZhdGUuaDogQ29waWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJDb250
ZXh0RWZsLmNwcC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5jcHA6Cisg
ICAgICAgIChfRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhKToKKyAgICAgICAgKF9Fd2tfVmlld19Qcml2
YXRlX0RhdGE6On5fRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhKToKKyAgICAgICAgKF9ld2tfdmlld19v
bl9mYXZpY29uX2NoYW5nZWQpOgorICAgICAgICAoX2V3a192aWV3X2luaXRpYWxpemUpOgorICAg
ICAgICAoZXdrX3ZpZXdfdXJsX3VwZGF0ZSk6CisgICAgICAgIChld2tfdmlld19pY29uX3VybF9n
ZXQpOiBBZGQgYSBnZXR0ZXIgdG8gdGhlIHZpZXcgdG8gcmV0cmlldmUgdGhlIGljb24gVVJMIGZv
cgorICAgICAgICB0aGUgcGFnZSB0aGF0IGlzIGN1cnJlbnRseSBzaG93bi4KKyAgICAgICAgKGV3
a192aWV3X3VwZGF0ZV9pY29uKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmll
dy5oOiBFbWl0IGEgbmV3ICJpY29uLGNoYW5nZWQiIHNpZ25hbCBvbiB0aGUgdmlldyB3aGVuZXZl
cgorICAgICAgICB0aGUgdmlldydzIGljb24gaGFzIGNoYW5nZWQuCisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9lZmwvZXdrX3ZpZXdfcHJpdmF0ZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
ZWZsL3Rlc3RzL3Jlc291cmNlcy9ibGFuay5pY286IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvZWZsL3Rlc3RzL3Rlc3RfZXdrMl9jb250ZXh0LmNwcDogQWRkIHVuaXQgdGVzdCBmb3Ig
bmV3IGZhdmljb24gZGF0YWJhc2UgZ2V0dGVyLgorICAgICAgICAoVEVTVF9GKToKKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL2VmbC90ZXN0cy90ZXN0X2V3azJfZmF2aWNvbl9kYXRhYmFzZS5jcHA6
IEFkZGVkIHVuaXQgdGVzdHMgZm9yIHRoZSBuZXcgRXdrX0Zhdmljb25fRGF0YWJhc2UgQVBJLgor
ICAgICAgICAoc2VydmVyQ2FsbGJhY2spOgorICAgICAgICAob25JY29uQ2hhbmdlZCk6CisgICAg
ICAgIChURVNUX0YpOgorICAgICAgICAob25JY29uRGF0YVJlYWR5KToKKyAgICAgICAgKEljb25S
ZXF1ZXN0RGF0YSk6CisgICAgICAgIChyZXF1ZXN0RmF2aWNvbkRhdGEpOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9lZmwvV2ViQ29udGV4dEVmbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbnRl
eHQ6OnBsYXRmb3JtRGVmYXVsdEljb25EYXRhYmFzZVBhdGgpOiBSZXR1cm4gYSB2YWxpZCBkZWZh
dWx0IHBhdGggZm9yIHRoZSBpY29uIGRhdGFiYXNlLgorCiAyMDEyLTEwLTEyICBCcmFkeSBFaWRz
b24gIDxiZWlkc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgYSBiYXNpYyBOZXR3b3JrUHJv
Y2Vzcy5hcHAgdG8gdGhlIFdlYktpdDIgYnVpbGQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1BsYXRmb3JtRWZsLmNtYWtlIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UKaW5k
ZXggYTEyZjQ0YS4uZjY0NTFjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1F
ZmwuY21ha2UKKysrIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UKQEAgLTU1LDYg
KzU1LDcgQEAgTElTVChBUFBFTkQgV2ViS2l0Ml9TT1VSQ0VTCiAgICAgVUlQcm9jZXNzL0FQSS9l
ZmwvZXdrX2Nvb2tpZV9tYW5hZ2VyLmNwcAogICAgIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19kb3du
bG9hZF9qb2IuY3BwCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Vycm9yLmNwcAorICAgIFVJ
UHJvY2Vzcy9BUEkvZWZsL2V3a19mYXZpY29uX2RhdGFiYXNlLmNwcAogICAgIFVJUHJvY2Vzcy9B
UEkvZWZsL2V3a19mb3JtX3N1Ym1pc3Npb25fcmVxdWVzdC5jcHAKICAgICBVSVByb2Nlc3MvQVBJ
L2VmbC9ld2tfaW50ZW50LmNwcAogICAgIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19pbnRlbnRfc2Vy
dmljZS5jcHAKQEAgLTIzMSw2ICsyMzIsNyBAQCBTRVQgKEVXZWJLaXQyX0hFQURFUlMKICAgICAi
JHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb29raWVf
bWFuYWdlci5oIgogICAgICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vVUlQcm9jZXNzL0FQ
SS9lZmwvZXdrX2Rvd25sb2FkX2pvYi5oIgogICAgICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJ
Un0vVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Vycm9yLmgiCisgICAgIiR7Q01BS0VfQ1VSUkVOVF9T
T1VSQ0VfRElSfS9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfZmF2aWNvbl9kYXRhYmFzZS5oIgogICAg
ICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Zvcm1f
c3VibWlzc2lvbl9yZXF1ZXN0LmgiCiAgICAgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9V
SVByb2Nlc3MvQVBJL2VmbC9ld2tfaW50ZW50LmgiCiAgICAgIiR7Q01BS0VfQ1VSUkVOVF9TT1VS
Q0VfRElSfS9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfaW50ZW50X3NlcnZpY2UuaCIKQEAgLTMyOSw2
ICszMzEsNyBAQCBTRVQoRVdLMlVuaXRUZXN0c19CSU5BUklFUwogICAgIHRlc3RfZXdrMl9jb29r
aWVfbWFuYWdlcgogICAgIHRlc3RfZXdrMl9kb3dubG9hZF9qb2IKICAgICB0ZXN0X2V3azJfZWlu
YV9zaGFyZWRfc3RyaW5nCisgICAgdGVzdF9ld2syX2Zhdmljb25fZGF0YWJhc2UKICAgICB0ZXN0
X2V3azJfcmVmcHRyX2V2YXNfb2JqZWN0CiAgICAgdGVzdF9ld2syX2ludGVudHMKICAgICB0ZXN0
X2V3azJfc2V0dGluZ3MKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
ZWZsL0VXZWJLaXQyLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9FV2ViS2l0
Mi5oCmluZGV4IDAwZGQ4MTEuLjdkMmY4NzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZWZsL0VXZWJLaXQyLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9lZmwvRVdlYktpdDIuaApAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgImV3a19jb29r
aWVfbWFuYWdlci5oIgogI2luY2x1ZGUgImV3a19kb3dubG9hZF9qb2IuaCIKICNpbmNsdWRlICJl
d2tfZXJyb3IuaCIKKyNpbmNsdWRlICJld2tfZmF2aWNvbl9kYXRhYmFzZS5oIgogI2luY2x1ZGUg
ImV3a19mb3JtX3N1Ym1pc3Npb25fcmVxdWVzdC5oIgogI2luY2x1ZGUgImV3a19pbnRlbnQuaCIK
ICNpbmNsdWRlICJld2tfaW50ZW50X3NlcnZpY2UuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0LmNwcAppbmRleCAwMmVkZGI0Li5jMjI1MTQ2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5j
cHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuY3Bw
CkBAIC0zNyw3ICszNyw5IEBACiAjaW5jbHVkZSAiZXdrX2Nvb2tpZV9tYW5hZ2VyX3ByaXZhdGUu
aCIKICNpbmNsdWRlICJld2tfZG93bmxvYWRfam9iLmgiCiAjaW5jbHVkZSAiZXdrX2Rvd25sb2Fk
X2pvYl9wcml2YXRlLmgiCisjaW5jbHVkZSAiZXdrX2Zhdmljb25fZGF0YWJhc2VfcHJpdmF0ZS5o
IgogI2luY2x1ZGUgPFdlYkNvcmUvRmlsZVN5c3RlbS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSWNv
bkRhdGFiYXNlLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KIApAQCAtNjYsNiArNjgsNyBAQCBzdHJ1Y3QgX0V3a19Db250ZXh0IHsK
ICAgICBXS1JldGFpblB0cjxXS0NvbnRleHRSZWY+IGNvbnRleHQ7CiAKICAgICBFd2tfQ29va2ll
X01hbmFnZXIqIGNvb2tpZU1hbmFnZXI7CisgICAgRXdrX0Zhdmljb25fRGF0YWJhc2UqIGZhdmlj
b25EYXRhYmFzZTsKICNpZiBFTkFCTEUoQkFUVEVSWV9TVEFUVVMpCiAgICAgUmVmUHRyPEJhdHRl
cnlQcm92aWRlcj4gYmF0dGVyeVByb3ZpZGVyOwogI2VuZGlmCkBAIC04Niw2ICs4OSw3IEBAIHN0
cnVjdCBfRXdrX0NvbnRleHQgewogICAgICAgICA6IF9fcmVmKDEpCiAgICAgICAgICwgY29udGV4
dChjb250ZXh0UmVmKQogICAgICAgICAsIGNvb2tpZU1hbmFnZXIoMCkKKyAgICAgICAgLCBmYXZp
Y29uRGF0YWJhc2UoMCkKICAgICAgICAgLCByZXF1ZXN0TWFuYWdlcihXS0NvbnRleHRHZXRTb3Vw
UmVxdWVzdE1hbmFnZXIoY29udGV4dFJlZi5nZXQoKSkpCiAgICAgICAgICwgaGlzdG9yeUNsaWVu
dCgpCiAgICAgewpAQCAtMTIxLDYgKzEyNSw5IEBAIHN0cnVjdCBfRXdrX0NvbnRleHQgewogICAg
ICAgICBpZiAoY29va2llTWFuYWdlcikKICAgICAgICAgICAgIGV3a19jb29raWVfbWFuYWdlcl9m
cmVlKGNvb2tpZU1hbmFnZXIpOwogCisgICAgICAgIGlmIChmYXZpY29uRGF0YWJhc2UpCisgICAg
ICAgICAgICBld2tfZmF2aWNvbl9kYXRhYmFzZV9mcmVlKGZhdmljb25EYXRhYmFzZSk7CisKICAg
ICAgICAgSGFzaE1hcDx1aW50NjRfdCwgRXdrX0Rvd25sb2FkX0pvYio+OjppdGVyYXRvciBpdCA9
IGRvd25sb2FkSm9icy5iZWdpbigpOwogICAgICAgICBIYXNoTWFwPHVpbnQ2NF90LCBFd2tfRG93
bmxvYWRfSm9iKj46Oml0ZXJhdG9yIGVuZCA9IGRvd25sb2FkSm9icy5lbmQoKTsKICAgICAgICAg
Zm9yICggOyBpdCAhPSBlbmQ7ICsraXQpCkBAIC0xNTcsNiArMTY0LDIyIEBAIEV3a19Db29raWVf
TWFuYWdlciogZXdrX2NvbnRleHRfY29va2llX21hbmFnZXJfZ2V0KGNvbnN0IEV3a19Db250ZXh0
KiBld2tDb250ZXh0CiAgICAgcmV0dXJuIGV3a0NvbnRleHQtPmNvb2tpZU1hbmFnZXI7CiB9CiAK
K0V3a19GYXZpY29uX0RhdGFiYXNlKiBld2tfY29udGV4dF9mYXZpY29uX2RhdGFiYXNlX2dldChj
b25zdCBFd2tfQ29udGV4dCogZXdrQ29udGV4dCkKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxM
X1JFVFVSTl9WQUwoZXdrQ29udGV4dCwgMCk7CisKKyAgICBpZiAoIWV3a0NvbnRleHQtPmZhdmlj
b25EYXRhYmFzZSkgeworICAgICAgICAvLyBTZXQgZGF0YWJhc2UgcGF0aC4KKyAgICAgICAgV2Vi
Q29udGV4dCogd2ViQ29udGV4dCA9IHRvSW1wbChld2tDb250ZXh0LT5jb250ZXh0LmdldCgpKTsK
KyAgICAgICAgU3RyaW5nIGRhdGFiYXNlUGF0aCA9IHdlYkNvbnRleHQtPmljb25EYXRhYmFzZVBh
dGgoKSArICIvIiArIFdlYkNvcmU6Okljb25EYXRhYmFzZTo6ZGVmYXVsdERhdGFiYXNlRmlsZW5h
bWUoKTsKKyAgICAgICAgd2ViQ29udGV4dC0+c2V0SWNvbkRhdGFiYXNlUGF0aChkYXRhYmFzZVBh
dGgpOworCisgICAgICAgIGNvbnN0X2Nhc3Q8RXdrX0NvbnRleHQqPihld2tDb250ZXh0KS0+ZmF2
aWNvbkRhdGFiYXNlID0gZXdrX2Zhdmljb25fZGF0YWJhc2VfbmV3KFdLQ29udGV4dEdldEljb25E
YXRhYmFzZShld2tDb250ZXh0LT5jb250ZXh0LmdldCgpKSk7CisgICAgfQorCisgICAgcmV0dXJu
IGV3a0NvbnRleHQtPmZhdmljb25EYXRhYmFzZTsKK30KKwogV0tDb250ZXh0UmVmIGV3a19jb250
ZXh0X1dLQ29udGV4dF9nZXQoY29uc3QgRXdrX0NvbnRleHQqIGV3a0NvbnRleHQpCiB7CiAgICAg
cmV0dXJuIGV3a0NvbnRleHQtPmNvbnRleHQuZ2V0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5oIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuaAppbmRleCAzZjQ2ZDQ2Li44YzBmNjI4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5oCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0LmgKQEAgLTM4
LDYgKzM4LDcgQEAKICNkZWZpbmUgZXdrX2NvbnRleHRfaAogCiAjaW5jbHVkZSAiZXdrX2Nvb2tp
ZV9tYW5hZ2VyLmgiCisjaW5jbHVkZSAiZXdrX2Zhdmljb25fZGF0YWJhc2UuaCIKICNpbmNsdWRl
ICJld2tfbmF2aWdhdGlvbl9kYXRhLmgiCiAjaW5jbHVkZSAiZXdrX3VybF9zY2hlbWVfcmVxdWVz
dC5oIgogI2luY2x1ZGUgPEV2YXMuaD4KQEAgLTE2NSw2ICsxNjYsMTUgQEAgRUFQSSBFd2tfQ29u
dGV4dCAqZXdrX2NvbnRleHRfbmV3X3dpdGhfaW5qZWN0ZWRfYnVuZGxlX3BhdGgoY29uc3QgY2hh
ciAqcGF0aCk7CiBFQVBJIEV3a19Db29raWVfTWFuYWdlciAqZXdrX2NvbnRleHRfY29va2llX21h
bmFnZXJfZ2V0KGNvbnN0IEV3a19Db250ZXh0ICpjb250ZXh0KTsKIAogLyoqCisgKiBHZXRzIHRo
ZSBmYXZpY29uIGRhdGFiYXNlIGluc3RhbmNlIGZvciB0aGlzIEBhIGNvbnRleHQuCisgKgorICog
QHBhcmFtIGNvbnRleHQgY29udGV4dCBvYmplY3QgdG8gcXVlcnkuCisgKgorICogQHJldHVybiBF
d2tfRmF2aWNvbl9EYXRhYmFzZSBvYmplY3QgaW5zdGFuY2Ugb3IgQGMgTlVMTCBpbiBjYXNlIG9m
IGZhaWx1cmUuCisgKi8KK0VBUEkgRXdrX0Zhdmljb25fRGF0YWJhc2UgKmV3a19jb250ZXh0X2Zh
dmljb25fZGF0YWJhc2VfZ2V0KGNvbnN0IEV3a19Db250ZXh0ICpjb250ZXh0KTsKKworLyoqCiAg
KiBSZWdpc3RlciBAYSBzY2hlbWUgaW4gQGEgY29udGV4dC4KICAqCiAgKiBXaGVuIGFuIFVSTCBy
ZXF1ZXN0IHdpdGggQGEgc2NoZW1lIGlzIG1hZGUgaW4gdGhlICNFd2tfQ29udGV4dCwgdGhlIGNh
bGxiYWNrCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tf
ZmF2aWNvbl9kYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9l
d2tfZmF2aWNvbl9kYXRhYmFzZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uMWMyYTk3NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZWZsL2V3a19mYXZpY29uX2RhdGFiYXNlLmNwcApAQCAtMCwwICsxLDI2NiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgImV3a19mYXZpY29u
X2RhdGFiYXNlLmgiCisKKyNpbmNsdWRlICJXS0FQSUNhc3QuaCIKKyNpbmNsdWRlICJXS0ljb25E
YXRhYmFzZS5oIgorI2luY2x1ZGUgIldLUmV0YWluUHRyLmgiCisjaW5jbHVkZSAiV0tVUkwuaCIK
KyNpbmNsdWRlICJXZWJJY29uRGF0YWJhc2UuaCIKKyNpbmNsdWRlICJXZWJVUkwuaCIKKyNpbmNs
dWRlICJld2tfZmF2aWNvbl9kYXRhYmFzZV9wcml2YXRlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9F
dmFzQ2Fpcm9VdGlsaXRpZXMuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1JlZlB0ckNhaXJvLmg+Cisj
aW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7
CisKK3N0cnVjdCBJY29uQ2hhbmdlQ2FsbGJhY2tEYXRhIHsKKyAgICBFd2tfRmF2aWNvbl9EYXRh
YmFzZV9JY29uX0NoYW5nZV9DYiBjYWxsYmFjazsKKyAgICB2b2lkKiB1c2VyRGF0YTsKKworICAg
IEljb25DaGFuZ2VDYWxsYmFja0RhdGEoKQorICAgICAgICA6IGNhbGxiYWNrKDApCisgICAgICAg
ICwgdXNlckRhdGEoMCkKKyAgICB7IH0KKworICAgIEljb25DaGFuZ2VDYWxsYmFja0RhdGEoRXdr
X0Zhdmljb25fRGF0YWJhc2VfSWNvbl9DaGFuZ2VfQ2IgX2NhbGxiYWNrLCB2b2lkKiBfdXNlckRh
dGEpCisgICAgICAgIDogY2FsbGJhY2soX2NhbGxiYWNrKQorICAgICAgICAsIHVzZXJEYXRhKF91
c2VyRGF0YSkKKyAgICB7IH0KK307CisKK3N0cnVjdCBJY29uUmVxdWVzdENhbGxiYWNrRGF0YSB7
CisgICAgRXdrX0Zhdmljb25fRGF0YWJhc2VfQXN5bmNfSWNvbl9HZXRfQ2IgY2FsbGJhY2s7Cisg
ICAgdm9pZCogdXNlckRhdGE7CisgICAgRXZhcyogZXZhczsKKworICAgIEljb25SZXF1ZXN0Q2Fs
bGJhY2tEYXRhKCkKKyAgICAgICAgOiBjYWxsYmFjaygwKQorICAgICAgICAsIHVzZXJEYXRhKDAp
CisgICAgICAgICwgZXZhcygwKQorICAgIHsgfQorCisgICAgSWNvblJlcXVlc3RDYWxsYmFja0Rh
dGEoRXdrX0Zhdmljb25fRGF0YWJhc2VfQXN5bmNfSWNvbl9HZXRfQ2IgX2NhbGxiYWNrLCB2b2lk
KiBfdXNlckRhdGEsIEV2YXMqIF9ldmFzKQorICAgICAgICA6IGNhbGxiYWNrKF9jYWxsYmFjaykK
KyAgICAgICAgLCB1c2VyRGF0YShfdXNlckRhdGEpCisgICAgICAgICwgZXZhcyhfZXZhcykKKyAg
ICB7IH0KK307CisKK3N0YXRpYyB2b2lkIGRpZENoYW5nZUljb25Gb3JQYWdlVVJMKFdLSWNvbkRh
dGFiYXNlUmVmIGljb25EYXRhYmFzZSwgV0tVUkxSZWYgcGFnZVVSTCwgY29uc3Qgdm9pZCogY2xp
ZW50SW5mbyk7CitzdGF0aWMgdm9pZCBpY29uRGF0YVJlYWR5Rm9yUGFnZVVSTChXS0ljb25EYXRh
YmFzZVJlZiBpY29uRGF0YWJhc2UsIFdLVVJMUmVmIHBhZ2VVUkwsIGNvbnN0IHZvaWQqIGNsaWVu
dEluZm8pOworCit0eXBlZGVmIEhhc2hNYXA8RXdrX0Zhdmljb25fRGF0YWJhc2VfSWNvbl9DaGFu
Z2VfQ2IsIEljb25DaGFuZ2VDYWxsYmFja0RhdGE+IENoYW5nZUxpc3RlbmVyTWFwOwordHlwZWRl
ZiBWZWN0b3I8SWNvblJlcXVlc3RDYWxsYmFja0RhdGE+IFBlbmRpbmdJY29uUmVxdWVzdFZlY3Rv
cjsKK3R5cGVkZWYgSGFzaE1hcDxTdHJpbmcgLyogcGFnZVVSTCAqLywgUGVuZGluZ0ljb25SZXF1
ZXN0VmVjdG9yPiBQZW5kaW5nSWNvblJlcXVlc3RNYXA7CisKKy8qKgorICogXHN0cnVjdCAgX0V3
a19GYXZpY29uX0RhdGFiYXNlCisgKiBAYnJpZWYgICBDb250YWlucyB0aGUgZmF2aWNvbiBkYXRh
YmFzZSBkYXRhLgorICovCitzdHJ1Y3QgX0V3a19GYXZpY29uX0RhdGFiYXNlIHsKKyAgICBXS1Jl
dGFpblB0cjxXS0ljb25EYXRhYmFzZVJlZj4gd2tJY29uRGF0YWJhc2U7CisgICAgQ2hhbmdlTGlz
dGVuZXJNYXAgY2hhbmdlTGlzdGVuZXJzOworICAgIFBlbmRpbmdJY29uUmVxdWVzdE1hcCBpY29u
UmVxdWVzdHM7CisKKyAgICBfRXdrX0Zhdmljb25fRGF0YWJhc2UoV0tJY29uRGF0YWJhc2VSZWYg
aWNvbkRhdGFiYXNlUmVmKQorICAgICAgICA6ICB3a0ljb25EYXRhYmFzZShpY29uRGF0YWJhc2VS
ZWYpCisgICAgeworICAgICAgICBXS0ljb25EYXRhYmFzZUNsaWVudCBpY29uRGF0YWJhc2VDbGll
bnQ7CisgICAgICAgIG1lbXNldCgmaWNvbkRhdGFiYXNlQ2xpZW50LCAwLCBzaXplb2YoV0tJY29u
RGF0YWJhc2VDbGllbnQpKTsKKyAgICAgICAgaWNvbkRhdGFiYXNlQ2xpZW50LnZlcnNpb24gPSBr
V0tJY29uRGF0YWJhc2VDbGllbnRDdXJyZW50VmVyc2lvbjsKKyAgICAgICAgaWNvbkRhdGFiYXNl
Q2xpZW50LmNsaWVudEluZm8gPSB0aGlzOworICAgICAgICBpY29uRGF0YWJhc2VDbGllbnQuZGlk
Q2hhbmdlSWNvbkZvclBhZ2VVUkwgPSBkaWRDaGFuZ2VJY29uRm9yUGFnZVVSTDsKKyAgICAgICAg
aWNvbkRhdGFiYXNlQ2xpZW50Lmljb25EYXRhUmVhZHlGb3JQYWdlVVJMID0gaWNvbkRhdGFSZWFk
eUZvclBhZ2VVUkw7CisgICAgICAgIFdLSWNvbkRhdGFiYXNlU2V0SWNvbkRhdGFiYXNlQ2xpZW50
KHdrSWNvbkRhdGFiYXNlLmdldCgpLCAmaWNvbkRhdGFiYXNlQ2xpZW50KTsKKyAgICB9Cit9Owor
CitzdGF0aWMgdm9pZCBkaWRDaGFuZ2VJY29uRm9yUGFnZVVSTChXS0ljb25EYXRhYmFzZVJlZiwg
V0tVUkxSZWYgcGFnZVVSTFJlZiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICBjb25z
dCBFd2tfRmF2aWNvbl9EYXRhYmFzZSogZXdrSWNvbkRhdGFiYXNlID0gc3RhdGljX2Nhc3Q8Y29u
c3QgRXdrX0Zhdmljb25fRGF0YWJhc2UqPihjbGllbnRJbmZvKTsKKworICAgIGlmIChld2tJY29u
RGF0YWJhc2UtPmNoYW5nZUxpc3RlbmVycy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIENTdHJpbmcgcGFnZVVSTCA9IHRvSW1wbChwYWdlVVJMUmVmKS0+c3RyaW5nKCkudXRmOCgp
OworCisgICAgQ2hhbmdlTGlzdGVuZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gZXdrSWNvbkRh
dGFiYXNlLT5jaGFuZ2VMaXN0ZW5lcnMuYmVnaW4oKTsKKyAgICBDaGFuZ2VMaXN0ZW5lck1hcDo6
Y29uc3RfaXRlcmF0b3IgZW5kID0gZXdrSWNvbkRhdGFiYXNlLT5jaGFuZ2VMaXN0ZW5lcnMuZW5k
KCk7CisgICAgZm9yICg7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgaXQtPnZhbHVlLmNhbGxi
YWNrKHBhZ2VVUkwuZGF0YSgpLCBpdC0+dmFsdWUudXNlckRhdGEpOworfQorCitzdGF0aWMgY2Fp
cm9fc3VyZmFjZV90KiBnZXRJY29uU3VyZmFjZVN5bmNocm9ub3VzbHkoV2ViSWNvbkRhdGFiYXNl
KiB3ZWJJY29uRGF0YWJhc2UsIGNvbnN0IFN0cmluZyYgcGFnZVVSTCkKK3sKKyAgICB3ZWJJY29u
RGF0YWJhc2UtPnJldGFpbkljb25Gb3JQYWdlVVJMKHBhZ2VVUkwpOworCisgICAgV2ViQ29yZTo6
TmF0aXZlSW1hZ2VQdHIgaWNvbiA9IHdlYkljb25EYXRhYmFzZS0+bmF0aXZlSW1hZ2VGb3JQYWdl
VVJMKHBhZ2VVUkwpOworICAgIGlmICghaWNvbikgeworICAgICAgICB3ZWJJY29uRGF0YWJhc2Ut
PnJlbGVhc2VJY29uRm9yUGFnZVVSTChwYWdlVVJMKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
fQorCisgICAgcmV0dXJuIGljb24tPnN1cmZhY2UoKTsKK30KKworc3RhdGljIHZvaWQgaWNvbkRh
dGFSZWFkeUZvclBhZ2VVUkwoV0tJY29uRGF0YWJhc2VSZWYsIFdLVVJMUmVmIHBhZ2VVUkwsIGNv
bnN0IHZvaWQqIGNsaWVudEluZm8pCit7CisgICAgRXdrX0Zhdmljb25fRGF0YWJhc2UqIGV3a0lj
b25EYXRhYmFzZSA9IGNvbnN0X2Nhc3Q8RXdrX0Zhdmljb25fRGF0YWJhc2UqPihzdGF0aWNfY2Fz
dDxjb25zdCBFd2tfRmF2aWNvbl9EYXRhYmFzZSo+KGNsaWVudEluZm8pKTsKKworICAgIFN0cmlu
ZyB1cmxTdHJpbmcgPSB0b0ltcGwocGFnZVVSTCktPnN0cmluZygpOworICAgIGlmICghZXdrSWNv
bkRhdGFiYXNlLT5pY29uUmVxdWVzdHMuY29udGFpbnModXJsU3RyaW5nKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgV2ViSWNvbkRhdGFiYXNlKiB3ZWJJY29uRGF0YWJhc2UgPSB0b0ltcGwoZXdr
SWNvbkRhdGFiYXNlLT53a0ljb25EYXRhYmFzZS5nZXQoKSk7CisgICAgUmVmUHRyPGNhaXJvX3N1
cmZhY2VfdD4gc3VyZmFjZSA9IGdldEljb25TdXJmYWNlU3luY2hyb25vdXNseSh3ZWJJY29uRGF0
YWJhc2UsIHVybFN0cmluZyk7CisKKyAgICBQZW5kaW5nSWNvblJlcXVlc3RWZWN0b3IgcmVxdWVz
dHNGb3JVUkwgPSBld2tJY29uRGF0YWJhc2UtPmljb25SZXF1ZXN0cy50YWtlKHVybFN0cmluZyk7
CisgICAgc2l6ZV90IHJlcXVlc3RDb3VudCA9IHJlcXVlc3RzRm9yVVJMLnNpemUoKTsKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHJlcXVlc3RDb3VudDsgKytpKSB7CisgICAgICAgIGNvbnN0
IEljb25SZXF1ZXN0Q2FsbGJhY2tEYXRhJiBjYWxsYmFja0RhdGEgPSByZXF1ZXN0c0ZvclVSTFtp
XTsKKyAgICAgICAgRXZhc19PYmplY3QqIGljb24gPSBzdXJmYWNlID8gY2Fpcm9JbWFnZVN1cmZh
Y2VUb0V2YXNPYmplY3QoY2FsbGJhY2tEYXRhLmV2YXMsIHN1cmZhY2UuZ2V0KCkpIDogMDsKKyAg
ICAgICAgY2FsbGJhY2tEYXRhLmNhbGxiYWNrKHVybFN0cmluZy51dGY4KCkuZGF0YSgpLCBpY29u
LCBjYWxsYmFja0RhdGEudXNlckRhdGEpOworICAgICAgICBpZiAoaWNvbikKKyAgICAgICAgICAg
IGV2YXNfb2JqZWN0X3VucmVmKGljb24pOworICAgIH0KK30KKworLyoqCisgKiBAaW50ZXJuYWwK
KyAqIENvbnN0cnVjdHMgYSBFd2tfRmF2aWNvbl9EYXRhYmFzZSBpbnN0YW5jZS4KKyAqLworRXdr
X0Zhdmljb25fRGF0YWJhc2UqIGV3a19mYXZpY29uX2RhdGFiYXNlX25ldyhXS0ljb25EYXRhYmFz
ZVJlZiB3a0ljb25EYXRhYmFzZSkKK3sKKyAgICBBU1NFUlQod2tJY29uRGF0YWJhc2UpOworCisg
ICAgcmV0dXJuIG5ldyBFd2tfRmF2aWNvbl9EYXRhYmFzZSh3a0ljb25EYXRhYmFzZSk7Cit9CisK
Ky8qKgorICogQGludGVybmFsCisgKiBGcmVlcyBhIEV3a19GYXZpY29uX0RhdGFiYXNlIGluc3Rh
bmNlLgorICovCit2b2lkIGV3a19mYXZpY29uX2RhdGFiYXNlX2ZyZWUoRXdrX0Zhdmljb25fRGF0
YWJhc2UqIGV3a0ljb25EYXRhYmFzZSkKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVS
Tihld2tJY29uRGF0YWJhc2UpOworCisgICAgZGVsZXRlIGV3a0ljb25EYXRhYmFzZTsKK30KKwor
Y29uc3QgY2hhciogZXdrX2Zhdmljb25fZGF0YWJhc2VfaWNvbl91cmxfZ2V0KEV3a19GYXZpY29u
X0RhdGFiYXNlKiBld2tJY29uRGF0YWJhc2UsIGNvbnN0IGNoYXIqIHBhZ2VVUkwpCit7CisgICAg
RUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGV3a0ljb25EYXRhYmFzZSwgMCk7CisgICAg
RUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHBhZ2VVUkwsIDApOworCisgICAgU3RyaW5n
IGljb25VUkw7CisgICAgdG9JbXBsKGV3a0ljb25EYXRhYmFzZS0+d2tJY29uRGF0YWJhc2UuZ2V0
KCkpLT5zeW5jaHJvbm91c0ljb25VUkxGb3JQYWdlVVJMKHBhZ2VVUkwsIGljb25VUkwpOworCisg
ICAgcmV0dXJuIGVpbmFfc3RyaW5nc2hhcmVfYWRkKGljb25VUkwudXRmOCgpLmRhdGEoKSk7Cit9
CisKK3N0cnVjdCBBc3luY0ljb25SZXF1ZXN0UmVzcG9uc2UgeworICAgIFN0cmluZyBwYWdlVVJM
OworICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IHN1cmZhY2U7CisgICAgSWNvblJlcXVlc3RD
YWxsYmFja0RhdGEgY2FsbGJhY2tEYXRhOworCisgICAgQXN5bmNJY29uUmVxdWVzdFJlc3BvbnNl
KGNvbnN0IFN0cmluZyYgX3BhZ2VVUkwsIFBhc3NSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBfc3Vy
ZmFjZSwgY29uc3QgSWNvblJlcXVlc3RDYWxsYmFja0RhdGEmIF9jYWxsYmFja0RhdGEpCisgICAg
ICAgIDogcGFnZVVSTChfcGFnZVVSTCkKKyAgICAgICAgLCBzdXJmYWNlKF9zdXJmYWNlKQorICAg
ICAgICAsIGNhbGxiYWNrRGF0YShfY2FsbGJhY2tEYXRhKQorICAgIHsgfQorfTsKKworc3RhdGlj
IEVpbmFfQm9vbCByZXNwb25kX2ljb25fcmVxdWVzdF9pZGxlKHZvaWQqIGRhdGEpCit7CisgICAg
QXN5bmNJY29uUmVxdWVzdFJlc3BvbnNlKiByZXNwb25zZSA9IHN0YXRpY19jYXN0PEFzeW5jSWNv
blJlcXVlc3RSZXNwb25zZSo+KGRhdGEpOworCisgICAgRXZhc19PYmplY3QqIGljb24gPSByZXNw
b25zZS0+c3VyZmFjZSA/IGNhaXJvSW1hZ2VTdXJmYWNlVG9FdmFzT2JqZWN0KHJlc3BvbnNlLT5j
YWxsYmFja0RhdGEuZXZhcywgcmVzcG9uc2UtPnN1cmZhY2UuZ2V0KCkpIDogMDsKKyAgICByZXNw
b25zZS0+Y2FsbGJhY2tEYXRhLmNhbGxiYWNrKHJlc3BvbnNlLT5wYWdlVVJMLnV0ZjgoKS5kYXRh
KCksIGljb24sIHJlc3BvbnNlLT5jYWxsYmFja0RhdGEudXNlckRhdGEpOworCisgICAgaWYgKGlj
b24pCisgICAgICAgIGV2YXNfb2JqZWN0X3VucmVmKGljb24pOworCisgICAgZGVsZXRlIHJlc3Bv
bnNlOworCisgICAgcmV0dXJuIEVDT1JFX0NBTExCQUNLX0RPTkU7Cit9CisKK0VpbmFfQm9vbCBl
d2tfZmF2aWNvbl9kYXRhYmFzZV9hc3luY19pY29uX2dldChFd2tfRmF2aWNvbl9EYXRhYmFzZSog
ZXdrSWNvbkRhdGFiYXNlLCBjb25zdCBjaGFyKiBwYWdlX3VybCwgRXZhcyogZXZhcywgRXdrX0Zh
dmljb25fRGF0YWJhc2VfQXN5bmNfSWNvbl9HZXRfQ2IgY2FsbGJhY2ssIHZvaWQqIHVzZXJEYXRh
KQoreworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChld2tJY29uRGF0YWJhc2Us
IGZhbHNlKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwocGFnZV91cmwsIGZh
bHNlKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoZXZhcywgZmFsc2UpOwor
ICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChjYWxsYmFjaywgZmFsc2UpOworCisg
ICAgV2ViSWNvbkRhdGFiYXNlKiB3ZWJJY29uRGF0YWJhc2UgPSB0b0ltcGwoZXdrSWNvbkRhdGFi
YXNlLT53a0ljb25EYXRhYmFzZS5nZXQoKSk7CisKKyAgICAvLyBXZSBhc2sgZm9yIHRoZSBpY29u
IGRpcmVjdGx5LiBJZiB3ZSBkb24ndCBnZXQgdGhlIGljb24gZGF0YSBub3csCisgICAgLy8gd2Un
bGwgYmUgbm90aWZpZWQgbGF0ZXIgKGV2ZW4gaWYgdGhlIGRhdGFiYXNlIGlzIHN0aWxsIGltcG9y
dGluZyBpY29ucykuCisgICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gc3VyZmFjZSA9IGdldElj
b25TdXJmYWNlU3luY2hyb25vdXNseSh3ZWJJY29uRGF0YWJhc2UsIHBhZ2VfdXJsKTsKKworICAg
IC8vIElmIHRoZXJlJ3Mgbm90IGEgdmFsaWQgaWNvbiwgYnV0IHRoZXJlJ3MgYW4gaWNvblVSTCBy
ZWdpc3RlcmVkLAorICAgIC8vIG9yIGl0J3Mgc3RpbGwgbm90IHJlZ2lzdGVyZWQgYnV0IHRoZSBp
bXBvcnQgcHJvY2VzcyBoYXNuJ3QKKyAgICAvLyBmaW5pc2hlZCB5ZXQsIHdlIG5lZWQgdG8gd2Fp
dCBmb3IgaWNvbkRhdGFSZWFkeUZvclBhZ2VVUkwgdG8gYmUKKyAgICAvLyBjYWxsZWQgYmVmb3Jl
IG1ha2luZyBhbmQgaW5mb3JtZWQgZGVjaXNpb24uCisgICAgU3RyaW5nIGljb25VUkxGb3JQYWdl
VVJMOworICAgIHdlYkljb25EYXRhYmFzZS0+c3luY2hyb25vdXNJY29uVVJMRm9yUGFnZVVSTChw
YWdlX3VybCwgaWNvblVSTEZvclBhZ2VVUkwpOworICAgIGlmICghc3VyZmFjZSAmJiAoIWljb25V
UkxGb3JQYWdlVVJMLmlzRW1wdHkoKSB8fCAhd2ViSWNvbkRhdGFiYXNlLT5pc1VybEltcG9ydENv
bXBsZXRlZCgpKSkgeworICAgICAgICBQZW5kaW5nSWNvblJlcXVlc3RWZWN0b3IgcmVxdWVzdHMg
PSBld2tJY29uRGF0YWJhc2UtPmljb25SZXF1ZXN0cy5nZXQocGFnZV91cmwpOworICAgICAgICBy
ZXF1ZXN0cy5hcHBlbmQoSWNvblJlcXVlc3RDYWxsYmFja0RhdGEoY2FsbGJhY2ssIHVzZXJEYXRh
LCBldmFzKSk7CisgICAgICAgIGV3a0ljb25EYXRhYmFzZS0+aWNvblJlcXVlc3RzLnNldChwYWdl
X3VybCwgcmVxdWVzdHMpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICAvLyBS
ZXNwb25kIHdoZW4gaWRsZS4KKyAgICBBc3luY0ljb25SZXF1ZXN0UmVzcG9uc2UqIHJlc3BvbnNl
ID0gbmV3IEFzeW5jSWNvblJlcXVlc3RSZXNwb25zZShwYWdlX3VybCwgc3VyZmFjZS5yZWxlYXNl
KCksIEljb25SZXF1ZXN0Q2FsbGJhY2tEYXRhKGNhbGxiYWNrLCB1c2VyRGF0YSwgZXZhcykpOwor
ICAgIGVjb3JlX2lkbGVyX2FkZChyZXNwb25kX2ljb25fcmVxdWVzdF9pZGxlLCByZXNwb25zZSk7
CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBld2tfZmF2aWNvbl9kYXRhYmFzZV9pY29u
X2NoYW5nZV9jYWxsYmFja19hZGQoRXdrX0Zhdmljb25fRGF0YWJhc2UqIGV3a0ljb25EYXRhYmFz
ZSwgRXdrX0Zhdmljb25fRGF0YWJhc2VfSWNvbl9DaGFuZ2VfQ2IgY2FsbGJhY2ssIHZvaWQqIHVz
ZXJEYXRhKQoreworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKGV3a0ljb25EYXRhYmFz
ZSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oY2FsbGJhY2spOworCisgICAgaWYg
KGV3a0ljb25EYXRhYmFzZS0+Y2hhbmdlTGlzdGVuZXJzLmNvbnRhaW5zKGNhbGxiYWNrKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgZXdrSWNvbkRhdGFiYXNlLT5jaGFuZ2VMaXN0ZW5lcnMuYWRk
KGNhbGxiYWNrLCBJY29uQ2hhbmdlQ2FsbGJhY2tEYXRhKGNhbGxiYWNrLCB1c2VyRGF0YSkpOwor
fQorCit2b2lkIGV3a19mYXZpY29uX2RhdGFiYXNlX2ljb25fY2hhbmdlX2NhbGxiYWNrX2RlbChF
d2tfRmF2aWNvbl9EYXRhYmFzZSogZXdrSWNvbkRhdGFiYXNlLCBFd2tfRmF2aWNvbl9EYXRhYmFz
ZV9JY29uX0NoYW5nZV9DYiBjYWxsYmFjaykKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JF
VFVSTihld2tJY29uRGF0YWJhc2UpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKGNh
bGxiYWNrKTsKKworICAgIGV3a0ljb25EYXRhYmFzZS0+Y2hhbmdlTGlzdGVuZXJzLnJlbW92ZShj
YWxsYmFjayk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2Vm
bC9ld2tfZmF2aWNvbl9kYXRhYmFzZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9l
ZmwvZXdrX2Zhdmljb25fZGF0YWJhc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi5jM2Q0NGU0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9lZmwvZXdrX2Zhdmljb25fZGF0YWJhc2UuaApAQCAtMCwwICsxLDEwOCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZSAgICBld2tfZmF2aWNvbl9kYXRhYmFzZS5oCisg
KiBAYnJpZWYgICBEZXNjcmliZXMgdGhlIEV3ayBGYXZpY29uIERhdGFiYXNlIEFQSS4KKyAqLwor
CisjaWZuZGVmIGV3a19mYXZpY29uX2RhdGFiYXNlX2gKKyNkZWZpbmUgZXdrX2Zhdmljb25fZGF0
YWJhc2VfaAorCisjaW5jbHVkZSA8RXZhcy5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVy
biAiQyIgeworI2VuZGlmCisKKy8qKiBDcmVhdGVzIGEgdHlwZSBuYW1lIGZvciBAYSBfRXdrX0Zh
dmljb25fRGF0YWJhc2UuICovCit0eXBlZGVmIHN0cnVjdCBfRXdrX0Zhdmljb25fRGF0YWJhc2Ug
RXdrX0Zhdmljb25fRGF0YWJhc2U7CisKKy8qKgorICogQHR5cGVkZWYgRXdrX0Zhdmljb25fRGF0
YWJhc2VfSWNvbl9DaGFuZ2VfQ2IgRXdrX0Zhdmljb25fRGF0YWJhc2VfSWNvbl9DaGFuZ2VfQ2IK
KyAqIEBicmllZiBDYWxsYmFjayB0eXBlIGZvciB1c2Ugd2l0aCBld2tfZmF2aWNvbl9kYXRhYmFz
ZV9pY29uX2NoYW5nZV9jYWxsYmFja19hZGQgYW5kIGV3a19mYXZpY29uX2RhdGFiYXNlX2ljb25f
Y2hhbmdlX2NhbGxiYWNrX2RlbAorICovCit0eXBlZGVmIHZvaWQgKCpFd2tfRmF2aWNvbl9EYXRh
YmFzZV9JY29uX0NoYW5nZV9DYikoY29uc3QgY2hhciAqcGFnZV91cmwsIHZvaWQgKmV2ZW50X2lu
Zm8pOworCisvKioKKyAqIEB0eXBlZGVmIEV3a19GYXZpY29uX0RhdGFiYXNlX0FzeW5jX0ljb25f
R2V0X0NiIEV3a19GYXZpY29uX0RhdGFiYXNlX0FzeW5jX0ljb25fR2V0X0NiCisgKiBAYnJpZWYg
Q2FsbGJhY2sgdHlwZSBmb3IgdXNlIHdpdGggZXdrX2Zhdmljb25fZGF0YWJhc2VfYXN5bmNfaWNv
bl9nZXQKKyAqCisgKiBUaGUgQGEgaWNvbiBtYXkgYmUgTlVMTCBpZiB0aGVyZSBpcyBubyBmYXZp
Y29uIGFzc29jaWF0ZWQgdG8gdGhlIGdpdmVuIEBhIHBhZ2VfdXJsLgorICoKKyAqIFlvdSBuZWVk
IHRvIGNhbGwgZXZhc19vYmplY3RfcmVmKCkgb24gdGhlIEBhIGljb24gaWYgeW91IHdpc2ggdG8g
a2VlcCBpdCBhZnRlciB0aGUKKyAqIGNhbGxiYWNrIGlzIGV4ZWN1dGVkLgorICovCit0eXBlZGVm
IHZvaWQgKCpFd2tfRmF2aWNvbl9EYXRhYmFzZV9Bc3luY19JY29uX0dldF9DYikoY29uc3QgY2hh
ciAqcGFnZV91cmwsIEV2YXNfT2JqZWN0ICppY29uLCB2b2lkICpldmVudF9pbmZvKTsKKworLyoq
CisgKiBSZXRyaWV2ZXMgZnJvbSB0aGUgZGF0YWJhc2UgdGhlIGZhdmljb24gVVJMIGZvciB0aGUg
Z2l2ZW4gQGEgcGFnZV91cmwKKyAqCisgKiBAcGFyYW0gZGF0YWJhc2UgZGF0YWJhc2Ugb2JqZWN0
IHRvIHF1ZXJ5CisgKiBAcGFyYW0gcGFnZV91cmwgVVJMIG9mIHRoZSBwYWdlIHRvIGdldCB0aGUg
ZmF2aWNvbiBVUkwgZm9yCisgKgorICogQHJldHVybiB0aGUgZmF2aWNvbiBVUkwgcG9pbnRlciwg
dGhhdCBtYXkgYmUgQGMgTlVMTC4gVGhpcyBwb2ludGVyIGlzCisgKiAgICAgICAgIGd1YXJhbnRl
ZWQgdG8gYmUgZWluYV9zdHJpbmdzaGFyZSwgc28gd2hlbmV2ZXIgcG9zc2libGUKKyAqICAgICAg
ICAgc2F2ZSB5b3Vyc2VsZiBzb21lIGNwdSBjeWNsZXMgYW5kIHVzZQorICogICAgICAgICBlaW5h
X3N0cmluZ3NoYXJlX3JlZigpIGluc3RlYWQgb2YgZWluYV9zdHJpbmdzaGFyZV9hZGQoKSBvcgor
ICogICAgICAgICBzdHJkdXAoKQorICovCitFQVBJIGNvbnN0IGNoYXIgKmV3a19mYXZpY29uX2Rh
dGFiYXNlX2ljb25fdXJsX2dldChFd2tfRmF2aWNvbl9EYXRhYmFzZSAqZGF0YWJhc2UsIGNvbnN0
IGNoYXIgKnBhZ2VfdXJsKTsKKworLyoqCisgKiBSZXRyaWV2ZXMgYXN5bmNocm9ub3VzbHkgZnJv
bSB0aGUgZGF0YWJhc2UgdGhlIGZhdmljb24gZm9yIHRoZSBnaXZlbiBAYSBwYWdlX3VybAorICoK
KyAqIEBwYXJhbSBkYXRhYmFzZSBkYXRhYmFzZSBvYmplY3QgdG8gcXVlcnkKKyAqIEBwYXJhbSBw
YWdlX3VybCBVUkwgb2YgdGhlIHBhZ2UgdG8gZ2V0IHRoZSBmYXZpY29uIGZvcgorICogQHBhcmFt
IGV2YXMgVGhlIGNhbnZhcyB0byBhZGQgdGhlIGZhdmljb24gdG8KKyAqIEBwYXJhbSBjYWxsYmFj
ayBjYWxsYmFjayBmdW5jdGlvbiB0byBiZSBjYWxsZWQgd2hlbiB0aGUgaWNvbiBpcyByZXRyaWV2
ZWQKKyAqIEBwYXJhbSBkYXRhIHRoZSBkYXRhIHBvaW50ZXIgdGhhdCB3YXMgdG8gYmUgcGFzc2Vk
IHRvIHRoZSBjYWxsYmFjaworICoKKyAqIEByZXR1cm4gQGMgRUlOQV9UUlVFIGlmIHRoZSBpY29u
IHdhcyBzdWNjZXNzZnVseSByZXF1ZXN0ZWQsIEBjIEVJTkFfRkFMU0Ugb3RoZXJ3aXNlCisgKi8K
K0VBUEkgRWluYV9Cb29sIGV3a19mYXZpY29uX2RhdGFiYXNlX2FzeW5jX2ljb25fZ2V0KEV3a19G
YXZpY29uX0RhdGFiYXNlICpkYXRhYmFzZSwgY29uc3QgY2hhciAqcGFnZV91cmwsIEV2YXMgKmV2
YXMsIEV3a19GYXZpY29uX0RhdGFiYXNlX0FzeW5jX0ljb25fR2V0X0NiIGNhbGxiYWNrLCB2b2lk
ICpkYXRhKTsKKworLyoqCisgKiBBZGQgKHJlZ2lzdGVyKSBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRv
IGEgaWNvbiBjaGFuZ2UgZXZlbnQKKyAqCisgKiBAcGFyYW0gZGF0YWJhc2UgZGF0YWJhc2Ugb2Jq
ZWN0IHRvIHJlZ2lzdGVyIHRoZSBjYWxsYmFjaworICogQHBhcmFtIGNhbGxiYWNrIGNhbGxiYWNr
IGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuIGFuIGljb24gY2hhbmdlcworICogQHBhcmFtIGRh
dGEgdGhlIGRhdGEgcG9pbnRlciB0aGF0IHdhcyB0byBiZSBwYXNzZWQgdG8gdGhlIGNhbGxiYWNr
CisgKi8KK0VBUEkgdm9pZCBld2tfZmF2aWNvbl9kYXRhYmFzZV9pY29uX2NoYW5nZV9jYWxsYmFj
a19hZGQoRXdrX0Zhdmljb25fRGF0YWJhc2UgKmRhdGFiYXNlLCBFd2tfRmF2aWNvbl9EYXRhYmFz
ZV9JY29uX0NoYW5nZV9DYiBjYWxsYmFjaywgdm9pZCAqZGF0YSk7CisKKy8qKgorICogRGVsZXRl
ICh1bnJlZ2lzdGVyKSBhIGNhbGxiYWNrIGZ1bmN0aW9uIHJlZ2lzdGVyZWQgdG8gYSBpY29uIGNo
YW5nZSBldmVudAorICoKKyAqIEBwYXJhbSBkYXRhYmFzZSBkYXRhYmFzZSBvYmplY3QgdG8gdW5y
ZWdpc3RlciB0aGUgY2FsbGJhY2suCisgKiBAcGFyYW0gY2FsbGJhY2sgY2FsbGJhY2sgZnVuY3Rp
b24gdG8gdW5yZWdpc3RlcgorICovCitFQVBJIHZvaWQgZXdrX2Zhdmljb25fZGF0YWJhc2VfaWNv
bl9jaGFuZ2VfY2FsbGJhY2tfZGVsKEV3a19GYXZpY29uX0RhdGFiYXNlICpkYXRhYmFzZSwgRXdr
X0Zhdmljb25fRGF0YWJhc2VfSWNvbl9DaGFuZ2VfQ2IgY2FsbGJhY2spOworCisjaWZkZWYgX19j
cGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLy8gZXdrX2Zhdmljb25fZGF0YWJhc2VfaApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Zhdmljb25f
ZGF0YWJhc2VfcHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdr
X2Zhdmljb25fZGF0YWJhc2VfcHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjk4ZWNmOTAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2VmbC9ld2tfZmF2aWNvbl9kYXRhYmFzZV9wcml2YXRlLmgKQEAgLTAsMCArMSwzNCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBld2tfZmF2aWNvbl9kYXRhYmFzZV9wcml2
YXRlX2gKKyNkZWZpbmUgZXdrX2Zhdmljb25fZGF0YWJhc2VfcHJpdmF0ZV9oCisKKyNpbmNsdWRl
IDxXZWJLaXQyL1dLQmFzZS5oPgorCitFd2tfRmF2aWNvbl9EYXRhYmFzZSogZXdrX2Zhdmljb25f
ZGF0YWJhc2VfbmV3KFdLSWNvbkRhdGFiYXNlUmVmIHdrSWNvbkRhdGFiYXNlKTsKK3ZvaWQgZXdr
X2Zhdmljb25fZGF0YWJhc2VfZnJlZShFd2tfRmF2aWNvbl9EYXRhYmFzZSogZXdrSWNvbkRhdGFi
YXNlKTsKKworI2VuZGlmIC8vIGV3a19mYXZpY29uX2RhdGFiYXNlX3ByaXZhdGVfaApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuY3BwIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuY3BwCmluZGV4IDA3YTk0MjIu
LjY5NDI5NzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3
a192aWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmll
dy5jcHAKQEAgLTg1LDYgKzg1LDcgQEAgc3RhdGljIGNvbnN0IGludCBkZWZhdWx0Q3Vyc29yU2l6
ZSA9IDE2OwogCiB0eXBlZGVmIEhhc2hNYXA8dWludDY0X3QsIEV3a19SZXNvdXJjZSo+IExvYWRp
bmdSZXNvdXJjZXNNYXA7CiBzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfcHJpdl9sb2FkaW5nX3Jlc291
cmNlc19jbGVhcihMb2FkaW5nUmVzb3VyY2VzTWFwJiBsb2FkaW5nUmVzb3VyY2VzTWFwKTsKK3N0
YXRpYyB2b2lkIF9ld2tfdmlld19vbl9mYXZpY29uX2NoYW5nZWQoY29uc3QgY2hhciogcGFnZVVS
TCwgdm9pZCogZXZlbnRJbmZvKTsKIAogdHlwZWRlZiBIYXNoTWFwPGNvbnN0IFdlYlBhZ2VQcm94
eSosIGNvbnN0IEV2YXNfT2JqZWN0Kj4gUGFnZVZpZXdNYXA7CiAKQEAgLTEyMiw2ICsxMjMsNyBA
QCBzdHJ1Y3QgX0V3a19WaWV3X1ByaXZhdGVfRGF0YSB7CiAgICAgV0tFaW5hU2hhcmVkU3RyaW5n
IHRoZW1lOwogICAgIFdLRWluYVNoYXJlZFN0cmluZyBjdXN0b21FbmNvZGluZzsKICAgICBXS0Vp
bmFTaGFyZWRTdHJpbmcgY3Vyc29yR3JvdXA7CisgICAgV0tFaW5hU2hhcmVkU3RyaW5nIGZhdmlj
b25VUkw7CiAgICAgRXZhc19PYmplY3QqIGN1cnNvck9iamVjdDsKICAgICBMb2FkaW5nUmVzb3Vy
Y2VzTWFwIGxvYWRpbmdSZXNvdXJjZXNNYXA7CiAgICAgRXdrX0JhY2tfRm9yd2FyZF9MaXN0KiBi
YWNrRm9yd2FyZExpc3Q7CkBAIC0xNzEsNiArMTczLDEwIEBAIHN0cnVjdCBfRXdrX1ZpZXdfUHJp
dmF0ZV9EYXRhIHsKICAgICB7CiAgICAgICAgIF9ld2tfdmlld19wcml2X2xvYWRpbmdfcmVzb3Vy
Y2VzX2NsZWFyKGxvYWRpbmdSZXNvdXJjZXNNYXApOwogCisgICAgICAgIC8qIFVucmVnaXN0ZXIg
aWNvbiBjaGFuZ2UgY2FsbGJhY2sgKi8KKyAgICAgICAgRXdrX0Zhdmljb25fRGF0YWJhc2UqIGlj
b25EYXRhYmFzZSA9IGV3a19jb250ZXh0X2Zhdmljb25fZGF0YWJhc2VfZ2V0KGNvbnRleHQpOwor
ICAgICAgICBld2tfZmF2aWNvbl9kYXRhYmFzZV9pY29uX2NoYW5nZV9jYWxsYmFja19kZWwoaWNv
bkRhdGFiYXNlLCBfZXdrX3ZpZXdfb25fZmF2aWNvbl9jaGFuZ2VkKTsKKwogICAgICAgICBpZiAo
Y3Vyc29yT2JqZWN0KQogICAgICAgICAgICAgZXZhc19vYmplY3RfZGVsKGN1cnNvck9iamVjdCk7
CiAKQEAgLTI1MCw2ICsyNTYsMTcgQEAgc3RhdGljIHZvaWQgX2V3a192aWV3X3NtYXJ0X2NoYW5n
ZWQoRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhKQogICAgIGV2YXNfb2JqZWN0X3NtYXJ0
X2NoYW5nZWQoc21hcnREYXRhLT5zZWxmKTsKIH0KIAorc3RhdGljIHZvaWQgX2V3a192aWV3X29u
X2Zhdmljb25fY2hhbmdlZChjb25zdCBjaGFyKiBwYWdlVVJMLCB2b2lkKiBldmVudEluZm8pCit7
CisgICAgRXZhc19PYmplY3QqIGV3a1ZpZXcgPSBzdGF0aWNfY2FzdDxFdmFzX09iamVjdCo+KGV2
ZW50SW5mbyk7CisKKyAgICBjb25zdCBjaGFyKiB2aWV3X3VybCA9IGV3a192aWV3X3VybF9nZXQo
ZXdrVmlldyk7CisgICAgaWYgKHN0cmNhc2VjbXAodmlld191cmwsIHBhZ2VVUkwpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBld2tfdmlld191cGRhdGVfaWNvbihld2tWaWV3KTsKK30KKwogLy8g
RGVmYXVsdCBFdmVudCBIYW5kbGluZy4KIHN0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3NtYXJ0
X2ZvY3VzX2luKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSkKIHsKQEAgLTgzNCw2ICs4
NTEsMTAgQEAgc3RhdGljIHZvaWQgX2V3a192aWV3X2luaXRpYWxpemUoRXZhc19PYmplY3QqIGV3
a1ZpZXcsIEV3a19Db250ZXh0KiBjb250ZXh0LCBXS1AKICAgICBwcml2LT5wYWdlUHJveHktPmZ1
bGxTY3JlZW5NYW5hZ2VyKCktPnNldFdlYlZpZXcoZXdrVmlldyk7CiAgICAgZXdrX3NldHRpbmdz
X2Z1bGxzY3JlZW5fZW5hYmxlZF9zZXQocHJpdi0+c2V0dGluZ3MuZ2V0KCksIHRydWUpOwogI2Vu
ZGlmCisKKyAgICAvKiBMaXN0ZW4gZm9yIGZhdmljb24gY2hhbmdlcyAqLworICAgIEV3a19GYXZp
Y29uX0RhdGFiYXNlKiBpY29uRGF0YWJhc2UgPSBld2tfY29udGV4dF9mYXZpY29uX2RhdGFiYXNl
X2dldChwcml2LT5jb250ZXh0KTsKKyAgICBld2tfZmF2aWNvbl9kYXRhYmFzZV9pY29uX2NoYW5n
ZV9jYWxsYmFja19hZGQoaWNvbkRhdGFiYXNlLCBfZXdrX3ZpZXdfb25fZmF2aWNvbl9jaGFuZ2Vk
LCBld2tWaWV3KTsKIH0KIAogc3RhdGljIEV2YXNfT2JqZWN0KiBfZXdrX3ZpZXdfYWRkX3dpdGhf
c21hcnQoRXZhcyogY2FudmFzLCBFdmFzX1NtYXJ0KiBzbWFydCkKQEAgLTkzMSw2ICs5NTIsOSBA
QCB2b2lkIGV3a192aWV3X3VybF91cGRhdGUoRXZhc19PYmplY3QqIGV3a1ZpZXcpCiAgICAgcHJp
di0+dXJsID0gYWN0aXZlVVJMLnV0ZjgoKS5kYXRhKCk7CiAgICAgY29uc3QgY2hhciogY2FsbGJh
Y2tBcmd1bWVudCA9IHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihwcml2LT51cmwpOwogICAgIGV2
YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwoZXdrVmlldywgInVybCxjaGFuZ2VkIiwgY29u
c3RfY2FzdDxjaGFyKj4oY2FsbGJhY2tBcmd1bWVudCkpOworCisgICAgLy8gVXBkYXRlIHRoZSB2
aWV3J3MgZmF2aWNvbi4KKyAgICBld2tfdmlld191cGRhdGVfaWNvbihld2tWaWV3KTsKIH0KIAog
RWluYV9Cb29sIGV3a192aWV3X3VybF9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGNvbnN0IGNo
YXIqIHVybCkKQEAgLTk1Myw2ICs5NzcsMTQgQEAgY29uc3QgY2hhciogZXdrX3ZpZXdfdXJsX2dl
dChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKICAgICByZXR1cm4gcHJpdi0+dXJsOwogfQog
Citjb25zdCBjaGFyICpld2tfdmlld19pY29uX3VybF9nZXQoY29uc3QgRXZhc19PYmplY3QgKmV3
a1ZpZXcpCit7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERh
dGEsIDApOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYs
IDApOworCisgICAgcmV0dXJuIHByaXYtPmZhdmljb25VUkw7Cit9CisKIEVpbmFfQm9vbCBld2tf
dmlld19yZWxvYWQoRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7CiAgICAgRVdLX1ZJRVdfU0RfR0VU
X09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIGZhbHNlKTsKQEAgLTE1MzcsNiArMTU2OSwy
NiBAQCB2b2lkIGV3a192aWV3X2JhY2tfZm9yd2FyZF9saXN0X2NoYW5nZWQoRXZhc19PYmplY3Qq
IGV3a1ZpZXcpCiAKIC8qKgogICogQGludGVybmFsCisgKiBVcGRhdGUgdGhlIHZpZXcncyBmYXZp
Y29uIGFuZCBlbWl0cyBhICJpY29uLGNoYW5nZWQiIHNpZ25hbCBpZiBpdCBoYXMKKyAqIGNoYW5n
ZWQuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbmV2ZXIgdGhlIFVSTCBoYXMg
Y2hhbmdlZCBvciB3aGVuIHRoZSBpY29uIGZvcgorICogdGhlIGN1cnJlbnQgcGFnZSBVUkwgaGFz
IGNoYW5nZWQuCisgKi8KK3ZvaWQgZXdrX3ZpZXdfdXBkYXRlX2ljb24oRXZhc19PYmplY3QqIGV3
a1ZpZXcpCit7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERh
dGEpOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYpOwor
CisgICAgRXdrX0Zhdmljb25fRGF0YWJhc2UqIGljb25EYXRhYmFzZSA9IGV3a19jb250ZXh0X2Zh
dmljb25fZGF0YWJhc2VfZ2V0KHByaXYtPmNvbnRleHQpOworICAgIEFTU0VSVChpY29uRGF0YWJh
c2UpOworCisgICAgcHJpdi0+ZmF2aWNvblVSTCA9IGV3a19mYXZpY29uX2RhdGFiYXNlX2ljb25f
dXJsX2dldChpY29uRGF0YWJhc2UsIHByaXYtPnVybCk7CisgICAgZXZhc19vYmplY3Rfc21hcnRf
Y2FsbGJhY2tfY2FsbChld2tWaWV3LCAiaWNvbixjaGFuZ2VkIiwgMCk7Cit9CisKKy8qKgorICog
QGludGVybmFsCiAgKiBSZXBvcnRzIHRoYXQgYSBuYXZpZ2F0aW9uIHBvbGljeSBkZWNpc2lvbiBz
aG91bGQgYmUgdGFrZW4uCiAgKgogICogRW1pdHMgc2lnbmFsOiAicG9saWN5LGRlY2lzaW9uLG5h
dmlnYXRpb24iLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwv
ZXdrX3ZpZXcuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmgK
aW5kZXggZTljYmU0ZS4uMGUwZjJjYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9lZmwvZXdrX3ZpZXcuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2VmbC9ld2tfdmlldy5oCkBAIC00Myw2ICs0Myw3IEBACiAgKiAgIHdoZW4gZG9uZSB0byBjb250
aW51ZSB3aXRoIHRoZSBmb3JtIHN1Ym1pc3Npb24uIElmIHRoZSBsYXN0IHJlZmVyZW5jZSBpcyBy
ZW1vdmVkIG9uIGEKICAqICAgI0V3a19Gb3JtX1N1Ym1pc3Npb25fUmVxdWVzdCBhbmQgdGhlIGZv
cm0gaGFzIG5vdCBiZWVuIHN1Ym1pdHRlZCB5ZXQsCiAgKiAgIGV3a19mb3JtX3N1Ym1pc3Npb25f
cmVxdWVzdF9zdWJtaXQoKSB3aWxsIGJlIGNhbGxlZCBhdXRvbWF0aWNhbGx5LgorICogLSAiaWNv
bixjaGFuZ2VkIiwgdm9pZDogcmVwb3J0cyB0aGF0IHRoZSB2aWV3J3MgZmF2aWNvbiBoYXMgY2hh
bmdlZC4KICAqIC0gImludGVudCxyZXF1ZXN0LG5ldyIsIEV3a19JbnRlbnQqOiByZXBvcnRzIG5l
dyBXZWIgaW50ZW50IHJlcXVlc3QuCiAgKiAtICJpbnRlbnQsc2VydmljZSxyZWdpc3RlciIsIEV3
a19JbnRlbnRfU2VydmljZSo6IHJlcG9ydHMgbmV3IFdlYiBpbnRlbnQgc2VydmljZSByZWdpc3Ry
YXRpb24uCiAgKiAtICJsb2FkLGVycm9yIiwgY29uc3QgRXdrX0Vycm9yKjogcmVwb3J0cyBtYWlu
IGZyYW1lIGxvYWQgZmFpbGVkLgpAQCAtMzU3LDYgKzM1OCwxOCBAQCBFQVBJIEVpbmFfQm9vbCBl
d2tfdmlld191cmxfc2V0KEV2YXNfT2JqZWN0ICpvLCBjb25zdCBjaGFyICp1cmwpOwogRUFQSSBj
b25zdCBjaGFyICpld2tfdmlld191cmxfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0ICpvKTsKIAogLyoq
CisgKiBSZXR1cm5zIHRoZSBjdXJyZW50IGljb24gVVJMIG9mIHZpZXcgb2JqZWN0LgorICoKKyAq
IEl0IHJldHVybnMgYW4gaW50ZXJuYWwgc3RyaW5nIGFuZCBzaG91bGQgbm90CisgKiBiZSBtb2Rp
ZmllZC4gVGhlIHN0cmluZyBpcyBndWFyYW50ZWVkIHRvIGJlIHN0cmluZ3NoYXJlZC4KKyAqCisg
KiBAcGFyYW0gbyB2aWV3IG9iamVjdCB0byBnZXQgY3VycmVudCBpY29uIFVSTAorICoKKyAqIEBy
ZXR1cm4gY3VycmVudCBpY29uIFVSTCBvbiBzdWNjZXNzIG9yIEBjIE5VTEwgaWYgdW5hdmFpbGFi
bGUgb3Igb24gZmFpbHVyZQorICovCitFQVBJIGNvbnN0IGNoYXIgKmV3a192aWV3X2ljb25fdXJs
X2dldChjb25zdCBFdmFzX09iamVjdCAqbyk7CisKKy8qKgogICogQXNrcyB0aGUgbWFpbiBmcmFt
ZSB0byByZWxvYWQgdGhlIGN1cnJlbnQgZG9jdW1lbnQuCiAgKgogICogQHBhcmFtIG8gdmlldyBv
YmplY3QgdG8gcmVsb2FkIGN1cnJlbnQgZG9jdW1lbnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3X3ByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3X3ByaXZhdGUuaAppbmRleCA4ZWM5MWMxLi5iYjkz
ZjlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmll
d19wcml2YXRlLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3Zp
ZXdfcHJpdmF0ZS5oCkBAIC04NSw2ICs4NSw3IEBAIHZvaWQgZXdrX3ZpZXdfdGV4dF9mb3VuZChF
dmFzX09iamVjdCogZXdrVmlldywgdW5zaWduZWQgaW50IG1hdGNoQ291bnQpOwogdm9pZCBld2tf
dmlld191cmxfdXBkYXRlKEV2YXNfT2JqZWN0KiBld2tWaWV3KTsKIHZvaWQgZXdrX3ZpZXdfY29u
dGVudHNfc2l6ZV9jaGFuZ2VkKGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3LCBjb25zdCBXZWJD
b3JlOjpJbnRTaXplJik7CiB2b2lkIGV3a192aWV3X2JhY2tfZm9yd2FyZF9saXN0X2NoYW5nZWQo
RXZhc19PYmplY3QqIGV3a1ZpZXcpOwordm9pZCBld2tfdmlld191cGRhdGVfaWNvbihFdmFzX09i
amVjdCogZXdrVmlldyk7CiAKIEV2YXNfT2JqZWN0KiBld2tfdmlld19iYXNlX2FkZChFdmFzKiBj
YW52YXMsIFdLQ29udGV4dFJlZiwgV0tQYWdlR3JvdXBSZWYpOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC90ZXN0cy9yZXNvdXJjZXMvYmxhbmsuaWNvIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvdGVzdHMvcmVzb3VyY2VzL2JsYW5rLmlj
bwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5lYTg0OGI5OTE2ZTU5MDg0NDEzZmMxZTdhMDkwZGViZjVmNDkxNGRiCkdJ
VCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCAxOTgKcGNtWlF6VTw1KHwwVlhpTGZxe1dSNDJVJj1TT0FD
PmZFWGw/MztoNThBRDB3ZSNRfVJZMVZqSjsKCmxpdGVyYWwgMApIY21WP2QwMDAwMQoKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL3Rlc3RfZXdrMl9j
b250ZXh0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL3Rlc3Rf
ZXdrMl9jb250ZXh0LmNwcAppbmRleCBkZmY0ODUzNC4uM2RmNTc1YyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvdGVzdHMvdGVzdF9ld2syX2NvbnRleHQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL3Rlc3RfZXdrMl9j
b250ZXh0LmNwcApAQCAtNTMsNiArNTMsMTQgQEAgVEVTVF9GKEVXSzJVbml0VGVzdEJhc2UsIGV3
a19jb250ZXh0X2Nvb2tpZV9tYW5hZ2VyX2dldCkKICAgICBBU1NFUlRfRVEoY29va2llTWFuYWdl
ciwgZXdrX2NvbnRleHRfY29va2llX21hbmFnZXJfZ2V0KGNvbnRleHQpKTsKIH0KIAorVEVTVF9G
KEVXSzJVbml0VGVzdEJhc2UsIGV3a19jb250ZXh0X2Zhdmljb25fZGF0YWJhc2VfZ2V0KQorewor
ICAgIEV3a19Db250ZXh0KiBjb250ZXh0ID0gZXdrX3ZpZXdfY29udGV4dF9nZXQod2ViVmlldygp
KTsKKyAgICBFd2tfRmF2aWNvbl9EYXRhYmFzZSogZmF2aWNvbkRhdGFiYXNlID0gZXdrX2NvbnRl
eHRfZmF2aWNvbl9kYXRhYmFzZV9nZXQoY29udGV4dCk7CisgICAgQVNTRVJUX1RSVUUoZmF2aWNv
bkRhdGFiYXNlKTsKKyAgICBBU1NFUlRfRVEoZmF2aWNvbkRhdGFiYXNlLCBld2tfY29udGV4dF9m
YXZpY29uX2RhdGFiYXNlX2dldChjb250ZXh0KSk7Cit9CisKIHN0YXRpYyB2b2lkIHNjaGVtZVJl
cXVlc3RDYWxsYmFjayhFd2tfVXJsX1NjaGVtZV9SZXF1ZXN0KiByZXF1ZXN0LCB2b2lkKiB1c2Vy
RGF0YSkKIHsKICAgICBjb25zdCBjaGFyKiBzY2hlbWUgPSBld2tfdXJsX3NjaGVtZV9yZXF1ZXN0
X3NjaGVtZV9nZXQocmVxdWVzdCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2VmbC90ZXN0cy90ZXN0X2V3azJfZmF2aWNvbl9kYXRhYmFzZS5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC90ZXN0cy90ZXN0X2V3azJfZmF2aWNvbl9kYXRhYmFz
ZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2JhMmQ1ZgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL3Rlc3Rf
ZXdrMl9mYXZpY29uX2RhdGFiYXNlLmNwcApAQCAtMCwwICsxLDE2NyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiVW5pdFRlc3RVdGlscy9F
V0syVW5pdFRlc3RCYXNlLmgiCisjaW5jbHVkZSAiVW5pdFRlc3RVdGlscy9FV0syVW5pdFRlc3RF
bnZpcm9ubWVudC5oIgorI2luY2x1ZGUgIlVuaXRUZXN0VXRpbHMvRVdLMlVuaXRUZXN0U2VydmVy
LmgiCisjaW5jbHVkZSAiV0tFaW5hU2hhcmVkU3RyaW5nLmgiCisjaW5jbHVkZSA8RVdlYktpdDIu
aD4KKyNpbmNsdWRlIDxFY29yZS5oPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRl
IDx3dGYvUGFzc093blB0ci5oPgorCit1c2luZyBuYW1lc3BhY2UgRVdLMlVuaXRUZXN0OworCitl
eHRlcm4gRVdLMlVuaXRUZXN0RW52aXJvbm1lbnQqIGVudmlyb25tZW50OworCitzdGF0aWMgdm9p
ZCBzZXJ2ZXJDYWxsYmFjayhTb3VwU2VydmVyKiBodHRwU2VydmVyLCBTb3VwTWVzc2FnZSogbWVz
c2FnZSwgY29uc3QgY2hhciogcGF0aCwgR0hhc2hUYWJsZSosIFNvdXBDbGllbnRDb250ZXh0Kiwg
Z3BvaW50ZXIpCit7CisgICAgaWYgKG1lc3NhZ2UtPm1ldGhvZCAhPSBTT1VQX01FVEhPRF9HRVQp
IHsKKyAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNf
Tk9UX0lNUExFTUVOVEVEKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghc3Ry
Y21wKHBhdGgsICIvZmF2aWNvbi5pY28iKSkgeworICAgICAgICBDU3RyaW5nIGZhdmljb25QYXRo
ID0gZW52aXJvbm1lbnQtPnBhdGhGb3JSZXNvdXJjZSgiYmxhbmsuaWNvIik7CisgICAgICAgIEVp
bmFfRmlsZSogZiA9IGVpbmFfZmlsZV9vcGVuKGZhdmljb25QYXRoLmRhdGEoKSwgZmFsc2UpOwor
ICAgICAgICBpZiAoIWYpIHsKKyAgICAgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1l
c3NhZ2UsIFNPVVBfU1RBVFVTX05PVF9GT1VORCk7CisgICAgICAgICAgICBzb3VwX21lc3NhZ2Vf
Ym9keV9jb21wbGV0ZShtZXNzYWdlLT5yZXNwb25zZV9ib2R5KTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorCisgICAgICAgIHNpemVfdCBmaWxlU2l6ZSA9IGVpbmFfZmlsZV9zaXpl
X2dldChmKTsKKworICAgICAgICB2b2lkKiBjb250ZW50cyA9IGVpbmFfZmlsZV9tYXBfYWxsKGYs
IEVJTkFfRklMRV9QT1BVTEFURSk7CisgICAgICAgIGlmICghY29udGVudHMpIHsKKyAgICAgICAg
ICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX05PVF9GT1VO
RCk7CisgICAgICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9jb21wbGV0ZShtZXNzYWdlLT5yZXNw
b25zZV9ib2R5KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIHNv
dXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9S
WV9DT1BZLCBjb250ZW50cywgZmlsZVNpemUpOworICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0
YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19PSyk7CisgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5
X2NvbXBsZXRlKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHkpOworCisgICAgICAgIGVpbmFfZmlsZV9t
YXBfZnJlZShmLCBjb250ZW50cyk7CisgICAgICAgIGVpbmFfZmlsZV9jbG9zZShmKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIGNvbnN0IGNoYXIgY29udGVudHNbXSA9ICI8aHRtbD48
Ym9keT5mYXZpY29uIHRlc3Q8L2JvZHk+PC9odG1sPiI7CisgICAgc291cF9tZXNzYWdlX3NldF9z
dGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfT0spOworICAgIHNvdXBfbWVzc2FnZV9ib2R5X2Fw
cGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9DT1BZLCBjb250ZW50cywg
c3RybGVuKGNvbnRlbnRzKSk7CisgICAgc291cF9tZXNzYWdlX2JvZHlfY29tcGxldGUobWVzc2Fn
ZS0+cmVzcG9uc2VfYm9keSk7Cit9CisKK3N0YXRpYyB2b2lkIG9uSWNvbkNoYW5nZWQodm9pZCog
dXNlckRhdGEsIEV2YXNfT2JqZWN0Kiwgdm9pZCogZXZlbnRJbmZvKQoreworICAgIGJvb2wqIGlj
b25DaGFuZ2VkID0gc3RhdGljX2Nhc3Q8Ym9vbCo+KHVzZXJEYXRhKTsKKyAgICAqaWNvbkNoYW5n
ZWQgPSB0cnVlOworfQorCitURVNUX0YoRVdLMlVuaXRUZXN0QmFzZSwgZXdrX2Zhdmljb25fZGF0
YWJhc2VfdXJsX2dldCkKK3sKKyAgICBPd25QdHI8RVdLMlVuaXRUZXN0U2VydmVyPiBodHRwU2Vy
dmVyID0gYWRvcHRQdHIobmV3IEVXSzJVbml0VGVzdFNlcnZlcik7CisgICAgaHR0cFNlcnZlci0+
cnVuKHNlcnZlckNhbGxiYWNrKTsKKworICAgIGJvb2wgaWNvbkNoYW5nZWQgPSBmYWxzZTsKKyAg
ICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19hZGQod2ViVmlldygpLCAiaWNvbixjaGFuZ2Vk
Iiwgb25JY29uQ2hhbmdlZCwgJmljb25DaGFuZ2VkKTsKKworICAgIC8vIFdlIG5lZWQgdG8gbG9h
ZCB0aGUgcGFnZSBmaXJzdCB0byBlbnN1cmUgdGhlIGljb24gZGF0YSB3aWxsIGJlCisgICAgLy8g
aW4gdGhlIGRhdGFiYXNlIGluIGNhc2UgdGhlcmUncyBhbiBhc3NvY2lhdGVkIGZhdmljb24uCisg
ICAgQVNTRVJUX1RSVUUobG9hZFVybFN5bmMoaHR0cFNlcnZlci0+Z2V0VVJMRm9yUGF0aCgiLyIp
LmRhdGEoKSkpOworCisgICAgd2hpbGUgKCFpY29uQ2hhbmdlZCkKKyAgICAgICAgZWNvcmVfbWFp
bl9sb29wX2l0ZXJhdGUoKTsKKyAgICBBU1NFUlRfVFJVRShpY29uQ2hhbmdlZCk7CisgICAgZXZh
c19vYmplY3Rfc21hcnRfY2FsbGJhY2tfZGVsKHdlYlZpZXcoKSwgImljb24sY2hhbmdlZCIsIG9u
SWNvbkNoYW5nZWQpOworCisgICAgLy8gQ2hlY2sgdGhlIEFQSSByZXRyaWV2aW5nIGEgZmF2aWNv
biBVUkwuCisgICAgRXdrX0NvbnRleHQqIGNvbnRleHQgPSBld2tfdmlld19jb250ZXh0X2dldCh3
ZWJWaWV3KCkpOworICAgIEV3a19GYXZpY29uX0RhdGFiYXNlKiBmYXZpY29uRGF0YWJhc2UgPSBl
d2tfY29udGV4dF9mYXZpY29uX2RhdGFiYXNlX2dldChjb250ZXh0KTsKKyAgICBBU1NFUlRfVFJV
RShmYXZpY29uRGF0YWJhc2UpOworCisgICAgQ1N0cmluZyBleHBlY3RlZEZhdmljb25VUkwgPSBo
dHRwU2VydmVyLT5nZXRVUkxGb3JQYXRoKCIvZmF2aWNvbi5pY28iKTsKKyAgICBXS0VpbmFTaGFy
ZWRTdHJpbmcgaWNvblVSTCA9IGV3a19mYXZpY29uX2RhdGFiYXNlX2ljb25fdXJsX2dldChmYXZp
Y29uRGF0YWJhc2UsIGV3a192aWV3X3VybF9nZXQod2ViVmlldygpKSk7CisgICAgRVhQRUNUX1NU
UkVRKGV4cGVjdGVkRmF2aWNvblVSTC5kYXRhKCksIGljb25VUkwpOworCisgICAgY29uc3QgY2hh
ciogdmlld0ljb25VUkwgPSBld2tfdmlld19pY29uX3VybF9nZXQod2ViVmlldygpKTsKKyAgICBF
WFBFQ1RfU1RSRVEoZXhwZWN0ZWRGYXZpY29uVVJMLmRhdGEoKSwgdmlld0ljb25VUkwpOworfQor
CitzdGF0aWMgdm9pZCBvbkljb25EYXRhUmVhZHkoY29uc3QgY2hhciogcGFnZV91cmwsIEV2YXNf
T2JqZWN0KiBpY29uLCB2b2lkKiBldmVudF9pbmZvKQoreworICAgIEV2YXNfT2JqZWN0KiogcmV0
dXJuSWNvbiA9IHN0YXRpY19jYXN0PEV2YXNfT2JqZWN0Kio+KGV2ZW50X2luZm8pOworICAgIGlm
IChpY29uKQorICAgICAgICBldmFzX29iamVjdF9yZWYoaWNvbik7CisgICAgKnJldHVybkljb24g
PSBpY29uOworfQorCitzdHJ1Y3QgSWNvblJlcXVlc3REYXRhIHsKKyAgICBFdmFzX09iamVjdCog
dmlldzsKKyAgICBFdmFzX09iamVjdCogaWNvbjsKK307CisKK3N0YXRpYyB2b2lkIHJlcXVlc3RG
YXZpY29uRGF0YSh2b2lkKiB1c2VyRGF0YSwgRXZhc19PYmplY3QqLCB2b2lkKiBldmVudEluZm8p
Cit7CisgICAgSWNvblJlcXVlc3REYXRhKiBkYXRhID0gc3RhdGljX2Nhc3Q8SWNvblJlcXVlc3RE
YXRhKj4odXNlckRhdGEpOworCisgICAgLy8gQ2hlY2sgdGhlIEFQSSByZXRyaWV2aW5nIGEgdmFs
aWQgZmF2aWNvbi4KKyAgICBFd2tfQ29udGV4dCogY29udGV4dCA9IGV3a192aWV3X2NvbnRleHRf
Z2V0KGRhdGEtPnZpZXcpOworICAgIEV3a19GYXZpY29uX0RhdGFiYXNlKiBmYXZpY29uRGF0YWJh
c2UgPSBld2tfY29udGV4dF9mYXZpY29uX2RhdGFiYXNlX2dldChjb250ZXh0KTsKKyAgICBBU1NF
UlRfVFJVRShmYXZpY29uRGF0YWJhc2UpOworCisgICAgRXZhcyogZXZhcyA9IGV2YXNfb2JqZWN0
X2V2YXNfZ2V0KGRhdGEtPnZpZXcpOworICAgIEFTU0VSVF9UUlVFKGV3a19mYXZpY29uX2RhdGFi
YXNlX2FzeW5jX2ljb25fZ2V0KGZhdmljb25EYXRhYmFzZSwgZXdrX3ZpZXdfdXJsX2dldChkYXRh
LT52aWV3KSwgZXZhcywgb25JY29uRGF0YVJlYWR5LCAmZGF0YS0+aWNvbikpOworfQorCitURVNU
X0YoRVdLMlVuaXRUZXN0QmFzZSwgZXdrX2Zhdmljb25fZGF0YWJhc2VfYXN5bmNfaWNvbl9nZXQp
Cit7CisgICAgT3duUHRyPEVXSzJVbml0VGVzdFNlcnZlcj4gaHR0cFNlcnZlciA9IGFkb3B0UHRy
KG5ldyBFV0syVW5pdFRlc3RTZXJ2ZXIpOworICAgIGh0dHBTZXJ2ZXItPnJ1bihzZXJ2ZXJDYWxs
YmFjayk7CisKKyAgICBJY29uUmVxdWVzdERhdGEgZGF0YSA9IHsgd2ViVmlldygpLCAwIH07Cisg
ICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfYWRkKHdlYlZpZXcoKSwgImljb24sY2hhbmdl
ZCIsIHJlcXVlc3RGYXZpY29uRGF0YSwgJmRhdGEpOworCisgICAgLy8gV2UgbmVlZCB0byBsb2Fk
IHRoZSBwYWdlIGZpcnN0IHRvIGVuc3VyZSB0aGUgaWNvbiBkYXRhIHdpbGwgYmUKKyAgICAvLyBp
biB0aGUgZGF0YWJhc2UgaW4gY2FzZSB0aGVyZSdzIGFuIGFzc29jaWF0ZWQgZmF2aWNvbi4KKyAg
ICBBU1NFUlRfVFJVRShsb2FkVXJsU3luYyhodHRwU2VydmVyLT5nZXRVUkxGb3JQYXRoKCIvIiku
ZGF0YSgpKSk7CisKKyAgICB3aGlsZSAoIWRhdGEuaWNvbikKKyAgICAgICAgZWNvcmVfbWFpbl9s
b29wX2l0ZXJhdGUoKTsKKyAgICBBU1NFUlRfVFJVRShkYXRhLmljb24pOworICAgIGV2YXNfb2Jq
ZWN0X3NtYXJ0X2NhbGxiYWNrX2RlbCh3ZWJWaWV3KCksICJpY29uLGNoYW5nZWQiLCByZXF1ZXN0
RmF2aWNvbkRhdGEpOworCisgICAgLy8gSXQgaXMgYSAxNngxNiBmYXZpY29uLgorICAgIGludCB3
aWR0aCwgaGVpZ2h0OworICAgIGV2YXNfb2JqZWN0X2ltYWdlX3NpemVfZ2V0KGRhdGEuaWNvbiwg
JndpZHRoLCAmaGVpZ2h0KTsKKyAgICBFWFBFQ1RfRVEoMTYsIHdpZHRoKTsKKyAgICBFWFBFQ1Rf
RVEoMTYsIGhlaWdodCk7CisKKyAgICBldmFzX29iamVjdF91bnJlZihkYXRhLmljb24pOworfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJDb250ZXh0RWZsLmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViQ29udGV4dEVmbC5jcHAKaW5kZXgg
OGE0NzlkMi4uNWFmZDc5ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2Vm
bC9XZWJDb250ZXh0RWZsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dl
YkNvbnRleHRFZmwuY3BwCkBAIC01NCw4ICs1NCw3IEBAIFN0cmluZyBXZWJDb250ZXh0OjpwbGF0
Zm9ybURlZmF1bHREYXRhYmFzZURpcmVjdG9yeSgpIGNvbnN0CiAKIFN0cmluZyBXZWJDb250ZXh0
OjpwbGF0Zm9ybURlZmF1bHRJY29uRGF0YWJhc2VQYXRoKCkgY29uc3QKIHsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotICAgIHJldHVybiAiIjsKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChl
ZnJlZXRfZGF0YV9ob21lX2dldCgpKSArICIvV2ViS2l0RWZsL0ljb25EYXRhYmFzZSI7CiB9CiAK
IFN0cmluZyBXZWJDb250ZXh0OjpwbGF0Zm9ybURlZmF1bHRMb2NhbFN0b3JhZ2VEaXJlY3Rvcnko
KSBjb25zdAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>168643</attachid>
            <date>2012-10-15 01:02:30 -0700</date>
            <delta_ts>2012-10-15 02:17:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>99087_favicons_api2.patch</filename>
            <type>text/plain</type>
            <size>59276</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA2MTI3YzM1Li5jMjllYWJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjcg
QEAKKzIwMTItMTAtMTUgIENocmlzdG9waGUgRHVtZXogIDxjaHJpc3RvcGhlLmR1bWV6QGludGVs
LmNvbT4KKworICAgICAgICBbRUZMXVtXSzJdIEltcGxlbWVudCBGYXZpY29ucyBBUEkKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk5MDg3CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92ZWQgZXdrX3V0aWwg
ZnJvbSBXZWJLaXQgdG8gV2ViQ29yZSBhbmQgcmVuYW1lIGl0CisgICAgICAgIHRvIENhaXJvVXRp
bGl0eUVmbCBzbyB0aGF0IHRoZSBjb2RlIGNhbiBiZSBzaGFyZWQKKyAgICAgICAgYmV0d2VlbiBX
ZWJLaXQxIGFuZCBXZWJLaXQyLiBTb21lIHJlbGF0ZWQgdXRpbGl0eQorICAgICAgICBjb2RlIHdh
cyBhbHNvIG1vdmVkIGZyb20gUmVuZGVyVGhlbWVFZmwgdG8KKyAgICAgICAgQ2Fpcm9VdGlsaXR5
RWZsLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgbm8gYmVoYXZpb3IgY2hhbmdlLgorCisgICAg
ICAgICogUGxhdGZvcm1FZmwuY21ha2U6CisgICAgICAgICogcGxhdGZvcm0vZWZsL1JlbmRlclRo
ZW1lRWZsLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9lZmwvQ2Fpcm9VdGlsaXRp
ZXNFZmwuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a191dGlsLmNw
cC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6ZXZhc09iamVjdEZyb21D
YWlyb0ltYWdlU3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVTdXJmYWNlRm9yQmFj
a2luZ1N0b3JlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9lZmwvQ2Fpcm9VdGlsaXRp
ZXNFZmwuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdXRpbF9wcml2
YXRlLmguCisgICAgICAgIChXZWJDb3JlKToKKwogMjAxMi0xMC0xMiAgSWx5YSBUaWtob25vdnNr
eSAgPGxvaXNsb0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogTk1JIHJl
bW92ZSBoYW5kIG1hZGUgb2JqZWN0IGJ1aWxkZXJzIHdpdGggYXV0b21hdGljIGJ1aWxkZXIuCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFrZSBiL1NvdXJjZS9XZWJD
b3JlL1BsYXRmb3JtRWZsLmNtYWtlCmluZGV4IDJhMTdjOWIuLmE2ODA3MmYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1Bs
YXRmb3JtRWZsLmNtYWtlCkBAIC01Miw2ICs1Miw3IEBAIExJU1QoQVBQRU5EIFdlYkNvcmVfU09V
UkNFUwogICBwbGF0Zm9ybS9lZmwvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcAogICBwbGF0Zm9ybS9l
ZmwvV2lkZ2V0RWZsLmNwcAogICBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHAKKyAg
cGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0NhaXJvVXRpbGl0aWVzRWZsLmNwcAogICBwbGF0Zm9ybS9n
cmFwaGljcy9lZmwvSWNvbkVmbC5jcHAKICAgcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0ltYWdlRWZs
LmNwcAogICBwbGF0Zm9ybS9ncmFwaGljcy9lZmwvSW50UG9pbnRFZmwuY3BwCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvUmVuZGVyVGhlbWVFZmwuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZWZsL1JlbmRlclRoZW1lRWZsLmNwcAppbmRleCAyNmEwMzg2Li43
MjcyYjAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvUmVuZGVyVGhl
bWVFZmwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VmbC9SZW5kZXJUaGVtZUVm
bC5jcHAKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJSZW5kZXJUaGVtZUVmbC5oIgogCiAj
aW5jbHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgorI2luY2x1ZGUgIkNhaXJvVXRpbGl0aWVzRWZs
LmgiCiAjaW5jbHVkZSAiRm9udERlc2NyaXB0aW9uLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0LmgiCiAjaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgpAQCAtMTYyLDI3ICsxNjMsNiBA
QCB2b2lkIFJlbmRlclRoZW1lRWZsOjphZGp1c3RTaXplQ29uc3RyYWludHMoUmVuZGVyU3R5bGUq
IHN0eWxlLCBGb3JtVHlwZSB0eXBlKSBjbwogICAgIHN0eWxlLT5zZXRQYWRkaW5nUmlnaHQoZGVz
Yy0+cGFkZGluZy5yaWdodCgpKTsKIH0KIAotc3RhdGljIFBhc3NSZWZQdHI8Y2Fpcm9fc3VyZmFj
ZV90PiBjcmVhdGVTdXJmYWNlRm9yQmFja2luZ1N0b3JlKEVjb3JlX0V2YXMqIGVlKQotewotICAg
IEFTU0VSVChlZSk7Ci0KLSAgICBpbnQgd2lkdGg7Ci0gICAgaW50IGhlaWdodDsKLSAgICBlY29y
ZV9ldmFzX2dlb21ldHJ5X2dldChlZSwgMCwgMCwgJndpZHRoLCAmaGVpZ2h0KTsKLSAgICBBU1NF
UlQod2lkdGggPiAwICYmIGhlaWdodCA+IDApOwotCi0gICAgdW5zaWduZWQgY2hhciogYnVmZmVy
ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KGNvbnN0X2Nhc3Q8dm9pZCo+KGVjb3JlX2V2
YXNfYnVmZmVyX3BpeGVsc19nZXQoZWUpKSk7Ci0gICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4g
c3VyZmFjZSA9IGFkb3B0UmVmKGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlX2Zvcl9kYXRhKGJ1
ZmZlciwgQ0FJUk9fRk9STUFUX0FSR0IzMiwgd2lkdGgsIGhlaWdodCwgd2lkdGggKiA0KSk7Ci0K
LSAgICBjYWlyb19zdGF0dXNfdCBzdGF0dXMgPSBjYWlyb19zdXJmYWNlX3N0YXR1cyhzdXJmYWNl
LmdldCgpKTsKLSAgICBpZiAoc3RhdHVzICE9IENBSVJPX1NUQVRVU19TVUNDRVNTKSB7Ci0gICAg
ICAgIEVJTkFfTE9HX0VSUigiQ291bGQgbm90IGNyZWF0ZSBjYWlybyBzdXJmYWNlOiAlcyIsIGNh
aXJvX3N0YXR1c190b19zdHJpbmcoc3RhdHVzKSk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0K
LQotICAgIHJldHVybiBzdXJmYWNlOwotfQotCiBzdGF0aWMgYm9vbCBpc0Zvcm1FbGVtZW50VG9v
TGFyZ2VUb0Rpc3BsYXkoY29uc3QgSW50U2l6ZSYgZWxlbWVudFNpemUpCiB7CiAgICAgLy8gVGhp
cyBsaW1pdCBvZiAyMDAwMCBwaXhlbHMgaXMgaGFyZGNvZGVkIGluc2lkZSBlZGplIC0tIGFueXRo
aW5nIGFib3ZlIHRoaXMgc2l6ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZWZsL0NhaXJvVXRpbGl0aWVzRWZsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2VmbC9DYWlyb1V0aWxpdGllc0VmbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uMTUzYzY0YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9DYWlyb1V0aWxpdGllc0VmbC5jcHAKQEAgLTAsMCAr
MSwxMTAgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgUHJvRlVTSU9OIGVtYmVk
ZGVkIHN5c3RlbXMKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBTYW1zdW5nIEVsZWN0cm9u
aWNzCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNhaXJvVXRpbGl0aWVzRWZs
LmgiCisKKyNpbmNsdWRlICJSZWZQdHJDYWlyby5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K0V2YXNfT2JqZWN0KiBldmFzT2JqZWN0RnJvbUNhaXJvSW1hZ2VTdXJmYWNlKEV2YXMqIGNhbnZh
cywgY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlKQoreworICAgIEVJTkFfU0FGRVRZX09OX05VTExf
UkVUVVJOX1ZBTChjYW52YXMsIDApOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZB
TChzdXJmYWNlLCAwKTsKKworICAgIGNhaXJvX3N0YXR1c190IHN0YXR1cyA9IGNhaXJvX3N1cmZh
Y2Vfc3RhdHVzKHN1cmZhY2UpOworICAgIGlmIChzdGF0dXMgIT0gQ0FJUk9fU1RBVFVTX1NVQ0NF
U1MpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJjYWlybyBzdXJmYWNlIGlzIGludmFsaWQ6
ICVzIiwgY2Fpcm9fc3RhdHVzX3RvX3N0cmluZyhzdGF0dXMpKTsKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgfQorCisgICAgY2Fpcm9fc3VyZmFjZV90eXBlX3QgdHlwZSA9IGNhaXJvX3N1cmZhY2Vf
Z2V0X3R5cGUoc3VyZmFjZSk7CisgICAgaWYgKHR5cGUgIT0gQ0FJUk9fU1VSRkFDRV9UWVBFX0lN
QUdFKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAidW5rbm93biBzdXJmYWNlIHR5cGUgJWQs
IHJlcXVpcmVkICVkIChDQUlST19TVVJGQUNFX1RZUEVfSU1BR0UpLiIsCisgICAgICAgICAgICB0
eXBlLCBDQUlST19TVVJGQUNFX1RZUEVfSU1BR0UpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9
CisKKyAgICBjYWlyb19mb3JtYXRfdCBmb3JtYXQgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9m
b3JtYXQoc3VyZmFjZSk7CisgICAgaWYgKGZvcm1hdCAhPSBDQUlST19GT1JNQVRfQVJHQjMyICYm
IGZvcm1hdCAhPSBDQUlST19GT1JNQVRfUkdCMjQpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIs
ICJ1bmtub3duIHN1cmZhY2UgZm9ybWF0ICVkLCBleHBlY3RlZCAlZCBvciAlZC4iLAorICAgICAg
ICAgICAgZm9ybWF0LCBDQUlST19GT1JNQVRfQVJHQjMyLCBDQUlST19GT1JNQVRfUkdCMjQpOwor
ICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBpbnQgd2lkdGggPSBjYWlyb19pbWFnZV9z
dXJmYWNlX2dldF93aWR0aChzdXJmYWNlKTsKKyAgICBpbnQgaGVpZ2h0ID0gY2Fpcm9faW1hZ2Vf
c3VyZmFjZV9nZXRfaGVpZ2h0KHN1cmZhY2UpOworICAgIGludCBzdHJpZGUgPSBjYWlyb19pbWFn
ZV9zdXJmYWNlX2dldF9zdHJpZGUoc3VyZmFjZSk7CisgICAgaWYgKHdpZHRoIDw9IDAgfHwgaGVp
Z2h0IDw9IDAgfHwgc3RyaWRlIDw9IDApIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJpbnZh
bGlkIGltYWdlIHNpemUgJWR4JWQsIHN0cmlkZT0lZCIsIHdpZHRoLCBoZWlnaHQsIHN0cmlkZSk7
CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIHZvaWQqIGRhdGEgPSBjYWlyb19pbWFn
ZV9zdXJmYWNlX2dldF9kYXRhKHN1cmZhY2UpOworICAgIGlmICghZGF0YSkgeworICAgICAgICBm
cHJpbnRmKHN0ZGVyciwgImNvdWxkIG5vdCBnZXQgc291cmNlIGRhdGEuIik7CisgICAgICAgIHJl
dHVybiAwOworICAgIH0KKworICAgIEV2YXNfT2JqZWN0KiBpbWFnZSA9IGV2YXNfb2JqZWN0X2lt
YWdlX2ZpbGxlZF9hZGQoY2FudmFzKTsKKyAgICBpZiAoIWltYWdlKSB7CisgICAgICAgIGZwcmlu
dGYoc3RkZXJyLCAiY291bGQgbm90IGFkZCBpbWFnZSB0byBjYW52YXMuIik7CisgICAgICAgIHJl
dHVybiAwOworICAgIH0KKworICAgIGV2YXNfb2JqZWN0X2ltYWdlX2NvbG9yc3BhY2Vfc2V0KGlt
YWdlLCBFVkFTX0NPTE9SU1BBQ0VfQVJHQjg4ODgpOworICAgIGV2YXNfb2JqZWN0X2ltYWdlX3Np
emVfc2V0KGltYWdlLCB3aWR0aCwgaGVpZ2h0KTsKKyAgICBldmFzX29iamVjdF9pbWFnZV9hbHBo
YV9zZXQoaW1hZ2UsIGZvcm1hdCA9PSBDQUlST19GT1JNQVRfQVJHQjMyKTsKKworICAgIGlmIChl
dmFzX29iamVjdF9pbWFnZV9zdHJpZGVfZ2V0KGltYWdlKSAhPSBzdHJpZGUpIHsKKyAgICAgICAg
ZnByaW50ZihzdGRlcnIsICJldmFzJyBzdHJpZGUgJWQgZGl2ZXJnZXMgZnJvbSBjYWlybydzICVk
LiIsCisgICAgICAgICAgICBldmFzX29iamVjdF9pbWFnZV9zdHJpZGVfZ2V0KGltYWdlKSwgc3Ry
aWRlKTsKKyAgICAgICAgZXZhc19vYmplY3RfZGVsKGltYWdlKTsKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgfQorCisgICAgZXZhc19vYmplY3RfaW1hZ2VfZGF0YV9jb3B5X3NldChpbWFnZSwgZGF0
YSk7CisKKyAgICByZXR1cm4gaW1hZ2U7Cit9CisKK1Bhc3NSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90
PiBjcmVhdGVTdXJmYWNlRm9yQmFja2luZ1N0b3JlKEVjb3JlX0V2YXMqIGVlKQoreworICAgIEFT
U0VSVChlZSk7CisKKyAgICBpbnQgd2lkdGg7CisgICAgaW50IGhlaWdodDsKKyAgICBlY29yZV9l
dmFzX2dlb21ldHJ5X2dldChlZSwgMCwgMCwgJndpZHRoLCAmaGVpZ2h0KTsKKyAgICBBU1NFUlQo
d2lkdGggPiAwICYmIGhlaWdodCA+IDApOworCisgICAgdW5zaWduZWQgY2hhciogYnVmZmVyID0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KGNvbnN0X2Nhc3Q8dm9pZCo+KGVjb3JlX2V2YXNf
YnVmZmVyX3BpeGVsc19nZXQoZWUpKSk7CisgICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gc3Vy
ZmFjZSA9IGFkb3B0UmVmKGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlX2Zvcl9kYXRhKGJ1ZmZl
ciwgQ0FJUk9fRk9STUFUX0FSR0IzMiwgd2lkdGgsIGhlaWdodCwgd2lkdGggKiA0KSk7CisKKyAg
ICBjYWlyb19zdGF0dXNfdCBzdGF0dXMgPSBjYWlyb19zdXJmYWNlX3N0YXR1cyhzdXJmYWNlLmdl
dCgpKTsKKyAgICBpZiAoc3RhdHVzICE9IENBSVJPX1NUQVRVU19TVUNDRVNTKSB7CisgICAgICAg
IEVJTkFfTE9HX0VSUigiQ291bGQgbm90IGNyZWF0ZSBjYWlybyBzdXJmYWNlOiAlcyIsIGNhaXJv
X3N0YXR1c190b19zdHJpbmcoc3RhdHVzKSk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKwor
ICAgIHJldHVybiBzdXJmYWNlOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9lZmwvQ2Fpcm9VdGlsaXRpZXNFZmwuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9DYWlyb1V0aWxpdGllc0VmbC5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhMmMxYTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvQ2Fpcm9VdGlsaXRpZXNFZmwuaApAQCAtMCww
ICsxLDM2IEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFByb0ZVU0lPTiBlbWJl
ZGRlZCBzeXN0ZW1zCisgICAgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgU2Ftc3VuZyBFbGVjdHJv
bmljcworCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyovCisKKyNpZm5kZWYgQ2Fpcm9VdGlsaXRpZXNFZmxfaAorI2RlZmluZSBDYWlyb1V0aWxp
dGllc0VmbF9oCisKKyNpbmNsdWRlIDxFY29yZV9FdmFzLmg+CisjaW5jbHVkZSA8RXZhcy5oPgor
I2luY2x1ZGUgPGNhaXJvLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitFdmFzX09iamVjdCogZXZhc09iamVjdEZyb21DYWlyb0ltYWdlU3Vy
ZmFjZShFdmFzKiBjYW52YXMsIGNhaXJvX3N1cmZhY2VfdCopOworUGFzc1JlZlB0cjxjYWlyb19z
dXJmYWNlX3Q+IGNyZWF0ZVN1cmZhY2VGb3JCYWNraW5nU3RvcmUoRWNvcmVfRXZhcyogZWUpOwor
Cit9CisKKyNlbmRpZiAvLyBDYWlyb1V0aWxpdGllc0VmbF9oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGNmMzY5ODku
LmI4MDNhZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTItMTAtMTUgIENocmlzdG9w
aGUgRHVtZXogIDxjaHJpc3RvcGhlLmR1bWV6QGludGVsLmNvbT4KKworICAgICAgICBbRUZMXVtX
SzJdIEltcGxlbWVudCBGYXZpY29ucyBBUEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTk5MDg3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgUmVtb3ZlIGV3a191dGlsLmNwcCBmcm9tIFBsYXRmb3JtRWZsLmNt
YWtlIG5vdyB0aGF0IGl0cworICAgICAgICBjb2RlIGhhcyBiZWVuIG1vdmVkIHRvIFdlYkNvcmUg
dG8gYmUgcmV1c2VkIGluIFdLMi4KKworICAgICAgICAqIFBsYXRmb3JtRWZsLmNtYWtlOgorCiAy
MDEyLTEwLTEzICBKYWtvYiBQZXRzb3ZpdHMgIDxqcGV0c292aXRzQHJpbS5jb20+CiAKICAgICAg
ICAgW0JsYWNrQmVycnldIEZldGNoIGJsaXQgcmVjdHMgZnJvbSBhIHZpZXdwb3J0IGFjY2Vzc29y
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtRWZsLmNtYWtlIGIvU291cmNlL1dl
YktpdC9QbGF0Zm9ybUVmbC5jbWFrZQppbmRleCBmOWI4ODU2Li40MWVlOTQxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtRWZsLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxh
dGZvcm1FZmwuY21ha2UKQEAgLTEyNCw3ICsxMjQsNiBAQCBMSVNUKEFQUEVORCBXZWJLaXRfU09V
UkNFUwogICAgIGVmbC9ld2svZXdrX3RpbGVkX21hdHJpeC5jcHAKICAgICBlZmwvZXdrL2V3a190
aWxlZF9tb2RlbC5jcHAKICAgICBlZmwvZXdrL2V3a190b3VjaF9ldmVudC5jcHAKLSAgICBlZmwv
ZXdrL2V3a191dGlsLmNwcAogICAgIGVmbC9ld2svZXdrX3ZpZXcuY3BwCiAgICAgZWZsL2V3ay9l
d2tfdmlld19zaW5nbGUuY3BwCiAgICAgZWZsL2V3ay9ld2tfdmlld190aWxlZC5jcHAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvZWZsL0No
YW5nZUxvZwppbmRleCBlYWEyMzE2Li5kMjEyYzkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2VmbC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9lZmwvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMTggQEAKKzIwMTItMTAtMTUgIENocmlzdG9waGUgRHVtZXogIDxjaHJpc3RvcGhlLmR1bWV6
QGludGVsLmNvbT4KKworICAgICAgICBbRUZMXVtXSzJdIEltcGxlbWVudCBGYXZpY29ucyBBUEkK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk5MDg3CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVtb3ZlIGV3
a191dGlsIG5vdyB0aGF0IGl0cyBjb2RlIGhhcyBiZWVuIG1vdmVkCisgICAgICAgIHRvIENhaXJv
VXRpbGl0aWVzRWZsIGluIFdlYkNvcmUuCisKKyAgICAgICAgKiBld2svZXdrX2hpc3RvcnkuY3Bw
OgorICAgICAgICAoZXdrX2hpc3RvcnlfaXRlbV9pY29uX29iamVjdF9hZGQpOgorICAgICAgICAq
IGV3ay9ld2tfc2V0dGluZ3MuY3BwOgorICAgICAgICAoZXdrX3NldHRpbmdzX2ljb25fZGF0YWJh
c2VfaWNvbl9vYmplY3RfZ2V0KToKKwogMjAxMi0xMC0xNCAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJr
aXQub3JnPgogCiAgICAgICAgIE1ha2UgVXNlclNjcmlwdCBhbmQgVXNlclN0eWxlU2hlZXQgdmFs
dWUgb2JqZWN0cyB0aGF0IGFyZSBjb3B5YWJsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9l
ZmwvZXdrL2V3a19oaXN0b3J5LmNwcCBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfaGlzdG9y
eS5jcHAKaW5kZXggMGRhZTAzZC4uODRjZjljYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9l
ZmwvZXdrL2V3a19oaXN0b3J5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX2hp
c3RvcnkuY3BwCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSAiZXdrX2hpc3RvcnkuaCIKIAog
I2luY2x1ZGUgIkJhY2tGb3J3YXJkTGlzdEltcGwuaCIKKyNpbmNsdWRlICJDYWlyb1V0aWxpdGll
c0VmbC5oIgogI2luY2x1ZGUgIkhpc3RvcnlJdGVtLmgiCiAjaW5jbHVkZSAiSWNvbkRhdGFiYXNl
QmFzZS5oIgogI2luY2x1ZGUgIkltYWdlLmgiCkBAIC0zMCw3ICszMSw2IEBACiAjaW5jbHVkZSAi
UGFnZUdyb3VwLmgiCiAjaW5jbHVkZSAiZXdrX2hpc3RvcnlfcHJpdmF0ZS5oIgogI2luY2x1ZGUg
ImV3a19wcml2YXRlLmgiCi0jaW5jbHVkZSAiZXdrX3V0aWxfcHJpdmF0ZS5oIgogI2luY2x1ZGUg
PEVpbmEuaD4KICNpbmNsdWRlIDxlaW5hX3NhZmV0eV9jaGVja3MuaD4KICNpbmNsdWRlIDx3dGYv
dGV4dC9DU3RyaW5nLmg+CkBAIC0zNTUsNyArMzU1LDcgQEAgRXZhc19PYmplY3QqIGV3a19oaXN0
b3J5X2l0ZW1faWNvbl9vYmplY3RfYWRkKGNvbnN0IEV3a19IaXN0b3J5X0l0ZW0qIGl0ZW0sIEV2
YXMKICAgICB9CiAKICAgICBjYWlyb19zdXJmYWNlX3QqIHN1cmZhY2UgPSBpY29uLT5zdXJmYWNl
KCk7Ci0gICAgcmV0dXJuIHN1cmZhY2UgPyBld2tfdXRpbF9pbWFnZV9mcm9tX2NhaXJvX3N1cmZh
Y2VfYWRkKGNhbnZhcywgc3VyZmFjZSkgOiAwOworICAgIHJldHVybiBzdXJmYWNlID8gV2ViQ29y
ZTo6ZXZhc09iamVjdEZyb21DYWlyb0ltYWdlU3VyZmFjZShjYW52YXMsIHN1cmZhY2UpIDogMDsK
IH0KIAogRWluYV9Cb29sIGV3a19oaXN0b3J5X2l0ZW1fcGFnZV9jYWNoZV9leGlzdHMoY29uc3Qg
RXdrX0hpc3RvcnlfSXRlbSogaXRlbSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3
ay9ld2tfc2V0dGluZ3MuY3BwIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19zZXR0aW5ncy5j
cHAKaW5kZXggZjEwNTIzZC4uOTA5MTljYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9lZmwv
ZXdrL2V3a19zZXR0aW5ncy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19zZXR0
aW5ncy5jcHAKQEAgLTIzLDYgKzIzLDcgQEAKICNpbmNsdWRlICJld2tfc2V0dGluZ3MuaCIKIAog
I2luY2x1ZGUgIkFwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmgiCisjaW5jbHVkZSAiQ2Fpcm9VdGls
aXRpZXNFZmwuaCIKICNpbmNsdWRlICJDcm9zc09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlLmgi
CiAjaW5jbHVkZSAiRGF0YWJhc2VUcmFja2VyLmgiCiAjaW5jbHVkZSAiRm9udENhY2hlLmgiCkBA
IC0zOCw3ICszOSw2IEBACiAjaW5jbHVkZSAiU3RvcmFnZVRyYWNrZXIuaCIKICNpbmNsdWRlICJX
ZWJLaXRWZXJzaW9uLmgiCiAjaW5jbHVkZSAiZXdrX3ByaXZhdGUuaCIKLSNpbmNsdWRlICJld2tf
dXRpbF9wcml2YXRlLmgiCiAjaW5jbHVkZSA8RWluYS5oPgogI2luY2x1ZGUgPGVpbmFfc2FmZXR5
X2NoZWNrcy5oPgogI2luY2x1ZGUgPGVycm5vLmg+CkBAIC0yMjksNyArMjI5LDcgQEAgRXZhc19P
YmplY3QqIGV3a19zZXR0aW5nc19pY29uX2RhdGFiYXNlX2ljb25fb2JqZWN0X2dldChjb25zdCBj
aGFyKiB1cmwsIEV2YXMqIGMKICAgICB9CiAKICAgICBjYWlyb19zdXJmYWNlX3QqIHN1cmZhY2Ug
PSBpY29uLT5zdXJmYWNlKCk7Ci0gICAgcmV0dXJuIHN1cmZhY2UgPyBld2tfdXRpbF9pbWFnZV9m
cm9tX2NhaXJvX3N1cmZhY2VfYWRkKGNhbnZhcywgc3VyZmFjZSkgOiAwOworICAgIHJldHVybiBz
dXJmYWNlID8gV2ViQ29yZTo6ZXZhc09iamVjdEZyb21DYWlyb0ltYWdlU3VyZmFjZShjYW52YXMs
IHN1cmZhY2UpIDogMDsKIH0KIAogdm9pZCBld2tfc2V0dGluZ3Nfb2JqZWN0X2NhY2hlX2NhcGFj
aXR5X3NldCh1bnNpZ25lZCBtaW5EZWFkQ2FwYWNpdHksIHVuc2lnbmVkIG1heERlYWRDYXBhY2l0
eSwgdW5zaWduZWQgdG90YWxDYXBhY2l0eSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZs
L2V3ay9ld2tfdXRpbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3V0aWwuY3BwCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YjZjZjAzLi4wMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJLaXQvZWZsL2V3ay9ld2tfdXRpbC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw5MyArMCww
IEBACi0vKgotICAgIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFByb0ZVU0lPTiBlbWJlZGRlZCBz
eXN0ZW1zCi0gICAgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcwot
Ci0gICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0g
ICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCi0gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2luY2x1ZGUgImV3a19wcml2YXRlLmgiCi0jaW5j
bHVkZSAiZXdrX3V0aWxfcHJpdmF0ZS5oIgotI2luY2x1ZGUgPGVpbmFfc2FmZXR5X2NoZWNrcy5o
PgotCi0vKioKLSAqIENvbnZlcnRzIGFuIGltYWdlIGZyb20gY2Fpcm9fc3VyZmFjZSB0byB0aGUg
RXZhc19PYmplY3QuCi0gKgotICogQHBhcmFtIGNhbnZhcyBkaXNwbGF5IGNhbnZhcwotICogQHBh
cmFtIHN1cmZhY2UgY2Fpcm8gcmVwcmVzZW50YXRpb24gb2YgYW4gaW1hZ2UKLSAqIEByZXR1cm4g
Y29udmVydGVkIGNhaXJvX3N1cmZhY2Ugb2JqZWN0IHRvIHRoZSBFdmFzX09iamVjdAotICovCi1F
dmFzX09iamVjdCogZXdrX3V0aWxfaW1hZ2VfZnJvbV9jYWlyb19zdXJmYWNlX2FkZChFdmFzKiBj
YW52YXMsIGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSkKLXsKLSAgICBFSU5BX1NBRkVUWV9PTl9O
VUxMX1JFVFVSTl9WQUwoY2FudmFzLCAwKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVS
Tl9WQUwoc3VyZmFjZSwgMCk7Ci0KLSAgICBjYWlyb19zdGF0dXNfdCBzdGF0dXMgPSBjYWlyb19z
dXJmYWNlX3N0YXR1cyhzdXJmYWNlKTsKLSAgICBpZiAoc3RhdHVzICE9IENBSVJPX1NUQVRVU19T
VUNDRVNTKSB7Ci0gICAgICAgIEVSUigiY2Fpcm8gc3VyZmFjZSBpcyBpbnZhbGlkOiAlcyIsIGNh
aXJvX3N0YXR1c190b19zdHJpbmcoc3RhdHVzKSk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0K
LQotICAgIGNhaXJvX3N1cmZhY2VfdHlwZV90IHR5cGUgPSBjYWlyb19zdXJmYWNlX2dldF90eXBl
KHN1cmZhY2UpOwotICAgIGlmICh0eXBlICE9IENBSVJPX1NVUkZBQ0VfVFlQRV9JTUFHRSkgewot
ICAgICAgICBFUlIoInVua25vd24gc3VyZmFjZSB0eXBlICVkLCByZXF1aXJlZCAlZCAoQ0FJUk9f
U1VSRkFDRV9UWVBFX0lNQUdFKS4iLAotICAgICAgICAgICAgdHlwZSwgQ0FJUk9fU1VSRkFDRV9U
WVBFX0lNQUdFKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgY2Fpcm9fZm9ybWF0
X3QgZm9ybWF0ID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZm9ybWF0KHN1cmZhY2UpOwotICAg
IGlmIChmb3JtYXQgIT0gQ0FJUk9fRk9STUFUX0FSR0IzMiAmJiBmb3JtYXQgIT0gQ0FJUk9fRk9S
TUFUX1JHQjI0KSB7Ci0gICAgICAgIEVSUigidW5rbm93biBzdXJmYWNlIGZvcm1hdCAlZCwgZXhw
ZWN0ZWQgJWQgb3IgJWQuIiwKLSAgICAgICAgICAgIGZvcm1hdCwgQ0FJUk9fRk9STUFUX0FSR0Iz
MiwgQ0FJUk9fRk9STUFUX1JHQjI0KTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAg
aW50IHdpZHRoID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfd2lkdGgoc3VyZmFjZSk7Ci0gICAg
aW50IGhlaWdodCA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2hlaWdodChzdXJmYWNlKTsKLSAg
ICBpbnQgc3RyaWRlID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfc3RyaWRlKHN1cmZhY2UpOwot
ICAgIGlmICh3aWR0aCA8PSAwIHx8IGhlaWdodCA8PSAwIHx8IHN0cmlkZSA8PSAwKSB7Ci0gICAg
ICAgIEVSUigiaW52YWxpZCBpbWFnZSBzaXplICVkeCVkLCBzdHJpZGU9JWQiLCB3aWR0aCwgaGVp
Z2h0LCBzdHJpZGUpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICB2b2lkKiBkYXRh
ID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShzdXJmYWNlKTsKLSAgICBpZiAoIWRhdGEp
IHsKLSAgICAgICAgRVJSKCJjb3VsZCBub3QgZ2V0IHNvdXJjZSBkYXRhLiIpOwotICAgICAgICBy
ZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBFdmFzX09iamVjdCogaW1hZ2UgPSBldmFzX29iamVjdF9p
bWFnZV9maWxsZWRfYWRkKGNhbnZhcyk7Ci0gICAgaWYgKCFpbWFnZSkgewotICAgICAgICBFUlIo
ImNvdWxkIG5vdCBhZGQgaW1hZ2UgdG8gY2FudmFzLiIpOwotICAgICAgICByZXR1cm4gMDsKLSAg
ICB9Ci0KLSAgICBldmFzX29iamVjdF9pbWFnZV9jb2xvcnNwYWNlX3NldChpbWFnZSwgRVZBU19D
T0xPUlNQQUNFX0FSR0I4ODg4KTsKLSAgICBldmFzX29iamVjdF9pbWFnZV9zaXplX3NldChpbWFn
ZSwgd2lkdGgsIGhlaWdodCk7Ci0gICAgZXZhc19vYmplY3RfaW1hZ2VfYWxwaGFfc2V0KGltYWdl
LCBmb3JtYXQgPT0gQ0FJUk9fRk9STUFUX0FSR0IzMik7Ci0KLSAgICBpZiAoZXZhc19vYmplY3Rf
aW1hZ2Vfc3RyaWRlX2dldChpbWFnZSkgIT0gc3RyaWRlKSB7Ci0gICAgICAgIEVSUigiZXZhcycg
c3RyaWRlICVkIGRpdmVyZ2VzIGZyb20gY2Fpcm8ncyAlZC4iLAotICAgICAgICAgICAgZXZhc19v
YmplY3RfaW1hZ2Vfc3RyaWRlX2dldChpbWFnZSksIHN0cmlkZSk7Ci0gICAgICAgIGV2YXNfb2Jq
ZWN0X2RlbChpbWFnZSk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIGV2YXNfb2Jq
ZWN0X2ltYWdlX2RhdGFfY29weV9zZXQoaW1hZ2UsIGRhdGEpOwotCi0gICAgcmV0dXJuIGltYWdl
OwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a191dGlsX3ByaXZhdGUu
aCBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdXRpbF9wcml2YXRlLmgKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGJlZTJkMGUuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9l
ZmwvZXdrL2V3a191dGlsX3ByaXZhdGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAK
LS8qCi0gICAgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgUHJvRlVTSU9OIGVtYmVkZGVkIHN5c3Rl
bXMKLSAgICBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzCi0KLSAg
ICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
LSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotKi8KLQot
I2lmbmRlZiBld2tfdXRpbF9wcml2YXRlX2gKLSNkZWZpbmUgZXdrX3V0aWxfcHJpdmF0ZV9oCi0K
LSNpbmNsdWRlIDxFdmFzLmg+Ci0jaW5jbHVkZSA8Y2Fpcm8uaD4KLQotRXZhc19PYmplY3QgKmV3
a191dGlsX2ltYWdlX2Zyb21fY2Fpcm9fc3VyZmFjZV9hZGQoRXZhcyAqY2FudmFzLCBjYWlyb19z
dXJmYWNlX3QgKnN1cmZhY2UpOwotCi0jZW5kaWYgLy8gZXdrX3V0aWxfcHJpdmF0ZV9oCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VM
b2cKaW5kZXggZTY0YzYwMi4uOWI4YmRiZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hh
bmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcwIEBACisy
MDEyLTEwLTE1ICBDaHJpc3RvcGhlIER1bWV6ICA8Y2hyaXN0b3BoZS5kdW1lekBpbnRlbC5jb20+
CisKKyAgICAgICAgW0VGTF1bV0syXSBJbXBsZW1lbnQgRmF2aWNvbnMgQVBJCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05OTA4NworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBzdXBwb3J0IGZvciBmYXZp
Y29uIEFQSSB0byBFRkwgV0syIHBvcnQgdmlhCisgICAgICAgIEV3a19GYXZpY29uX0RhdGFiYXNl
LiBUaGUgQVBJIGNhbiBiZSB1c2VkIHRvCisgICAgICAgIHJldHJpZXZlIHRoZSBmYXZpY29uIFVS
TCBhbmQgZGF0YSBmb3IgYSBnaXZlbgorICAgICAgICBwYWdlIFVSTC4KKworICAgICAgICAqIFBs
YXRmb3JtRWZsLmNtYWtlOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL0VXZWJLaXQyLmg6
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuY3BwOgorICAgICAgICAo
X0V3a19Db250ZXh0KToKKyAgICAgICAgKF9Fd2tfQ29udGV4dDo6X0V3a19Db250ZXh0KToKKyAg
ICAgICAgKF9Fd2tfQ29udGV4dDo6fl9Fd2tfQ29udGV4dCk6CisgICAgICAgIChld2tfY29udGV4
dF9mYXZpY29uX2RhdGFiYXNlX2dldCk6IEFkZCBnZXR0ZXIgdG8gcmV0cmlldmUgdGhlIGZhdmlj
b24KKyAgICAgICAgZGF0YWJhc2UgaW5zdGFuY2UgZnJvbSB0aGUgY29udGV4dC4KKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvZWZsL2V3a19mYXZpY29uX2RhdGFiYXNlLmNwcDogQWRkZWQuCisgICAgICAgIChJY29uQ2hh
bmdlQ2FsbGJhY2tEYXRhKToKKyAgICAgICAgKEljb25DaGFuZ2VDYWxsYmFja0RhdGE6Okljb25D
aGFuZ2VDYWxsYmFja0RhdGEpOgorICAgICAgICAoSWNvblJlcXVlc3RDYWxsYmFja0RhdGEpOgor
ICAgICAgICAoSWNvblJlcXVlc3RDYWxsYmFja0RhdGE6Okljb25SZXF1ZXN0Q2FsbGJhY2tEYXRh
KToKKyAgICAgICAgKF9Fd2tfRmF2aWNvbl9EYXRhYmFzZSk6CisgICAgICAgIChfRXdrX0Zhdmlj
b25fRGF0YWJhc2U6Ol9Fd2tfRmF2aWNvbl9EYXRhYmFzZSk6CisgICAgICAgIChkaWRDaGFuZ2VJ
Y29uRm9yUGFnZVVSTCk6CisgICAgICAgIChnZXRJY29uU3VyZmFjZVN5bmNocm9ub3VzbHkpOgor
ICAgICAgICAoaWNvbkRhdGFSZWFkeUZvclBhZ2VVUkwpOgorICAgICAgICAoZXdrX2Zhdmljb25f
ZGF0YWJhc2VfbmV3KToKKyAgICAgICAgKGV3a19mYXZpY29uX2RhdGFiYXNlX2ZyZWUpOgorICAg
ICAgICAoZXdrX2Zhdmljb25fZGF0YWJhc2VfaWNvbl91cmxfZ2V0KToKKyAgICAgICAgKEFzeW5j
SWNvblJlcXVlc3RSZXNwb25zZSk6CisgICAgICAgIChBc3luY0ljb25SZXF1ZXN0UmVzcG9uc2U6
OkFzeW5jSWNvblJlcXVlc3RSZXNwb25zZSk6CisgICAgICAgIChyZXNwb25kX2ljb25fcmVxdWVz
dF9pZGxlKToKKyAgICAgICAgKGV3a19mYXZpY29uX2RhdGFiYXNlX2FzeW5jX2ljb25fZ2V0KToK
KyAgICAgICAgKGV3a19mYXZpY29uX2RhdGFiYXNlX2ljb25fY2hhbmdlX2NhbGxiYWNrX2FkZCk6
CisgICAgICAgIChld2tfZmF2aWNvbl9kYXRhYmFzZV9pY29uX2NoYW5nZV9jYWxsYmFja19kZWwp
OgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19mYXZpY29uX2RhdGFiYXNlLmg6IEFk
ZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19mYXZpY29uX2RhdGFiYXNlX3By
aXZhdGUuaDogQ29waWVkIGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJDb250
ZXh0RWZsLmNwcC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5jcHA6Cisg
ICAgICAgIChfRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhKToKKyAgICAgICAgKF9Fd2tfVmlld19Qcml2
YXRlX0RhdGE6On5fRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhKToKKyAgICAgICAgKF9ld2tfdmlld19v
bl9mYXZpY29uX2NoYW5nZWQpOgorICAgICAgICAoX2V3a192aWV3X2luaXRpYWxpemUpOgorICAg
ICAgICAoZXdrX3ZpZXdfdXJsX3VwZGF0ZSk6CisgICAgICAgIChld2tfdmlld19pY29uX3VybF9n
ZXQpOiBBZGQgYSBnZXR0ZXIgdG8gdGhlIHZpZXcgdG8gcmV0cmlldmUgdGhlIGljb24gVVJMIGZv
cgorICAgICAgICB0aGUgcGFnZSB0aGF0IGlzIGN1cnJlbnRseSBzaG93bi4KKyAgICAgICAgKGV3
a192aWV3X3VwZGF0ZV9pY29uKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmll
dy5oOiBFbWl0IGEgbmV3ICJpY29uLGNoYW5nZWQiIHNpZ25hbCBvbiB0aGUgdmlldyB3aGVuZXZl
cgorICAgICAgICB0aGUgdmlldydzIGljb24gaGFzIGNoYW5nZWQuCisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9lZmwvZXdrX3ZpZXdfcHJpdmF0ZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
ZWZsL3Rlc3RzL3Jlc291cmNlcy9ibGFuay5pY286IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvZWZsL3Rlc3RzL3Rlc3RfZXdrMl9jb250ZXh0LmNwcDogQWRkIHVuaXQgdGVzdCBmb3Ig
bmV3IGZhdmljb24gZGF0YWJhc2UgZ2V0dGVyLgorICAgICAgICAoVEVTVF9GKToKKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL2VmbC90ZXN0cy90ZXN0X2V3azJfZmF2aWNvbl9kYXRhYmFzZS5jcHA6
IEFkZGVkIHVuaXQgdGVzdHMgZm9yIHRoZSBuZXcgRXdrX0Zhdmljb25fRGF0YWJhc2UgQVBJLgor
ICAgICAgICAoc2VydmVyQ2FsbGJhY2spOgorICAgICAgICAob25JY29uQ2hhbmdlZCk6CisgICAg
ICAgIChURVNUX0YpOgorICAgICAgICAob25JY29uRGF0YVJlYWR5KToKKyAgICAgICAgKEljb25S
ZXF1ZXN0RGF0YSk6CisgICAgICAgIChyZXF1ZXN0RmF2aWNvbkRhdGEpOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9lZmwvV2ViQ29udGV4dEVmbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbnRl
eHQ6OnBsYXRmb3JtRGVmYXVsdEljb25EYXRhYmFzZVBhdGgpOiBSZXR1cm4gYSB2YWxpZCBkZWZh
dWx0IHBhdGggZm9yIHRoZSBpY29uIGRhdGFiYXNlLgorCiAyMDEyLTEwLTE0ICBBbmRlcnMgQ2Fy
bHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CiAKICAgICAgICAgRml4IHRoZSB3b3JsZC4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlIGIvU291cmNlL1dlYktp
dDIvUGxhdGZvcm1FZmwuY21ha2UKaW5kZXggYTEyZjQ0YS4uZjY0NTFjNCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UKKysrIGIvU291cmNlL1dlYktpdDIvUGxh
dGZvcm1FZmwuY21ha2UKQEAgLTU1LDYgKzU1LDcgQEAgTElTVChBUFBFTkQgV2ViS2l0Ml9TT1VS
Q0VTCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Nvb2tpZV9tYW5hZ2VyLmNwcAogICAgIFVJ
UHJvY2Vzcy9BUEkvZWZsL2V3a19kb3dubG9hZF9qb2IuY3BwCiAgICAgVUlQcm9jZXNzL0FQSS9l
ZmwvZXdrX2Vycm9yLmNwcAorICAgIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19mYXZpY29uX2RhdGFi
YXNlLmNwcAogICAgIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19mb3JtX3N1Ym1pc3Npb25fcmVxdWVz
dC5jcHAKICAgICBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfaW50ZW50LmNwcAogICAgIFVJUHJvY2Vz
cy9BUEkvZWZsL2V3a19pbnRlbnRfc2VydmljZS5jcHAKQEAgLTIzMSw2ICsyMzIsNyBAQCBTRVQg
KEVXZWJLaXQyX0hFQURFUlMKICAgICAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L1VJUHJv
Y2Vzcy9BUEkvZWZsL2V3a19jb29raWVfbWFuYWdlci5oIgogICAgICIke0NNQUtFX0NVUlJFTlRf
U09VUkNFX0RJUn0vVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Rvd25sb2FkX2pvYi5oIgogICAgICIk
e0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Vycm9yLmgi
CisgICAgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9VSVByb2Nlc3MvQVBJL2VmbC9ld2tf
ZmF2aWNvbl9kYXRhYmFzZS5oIgogICAgICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vVUlQ
cm9jZXNzL0FQSS9lZmwvZXdrX2Zvcm1fc3VibWlzc2lvbl9yZXF1ZXN0LmgiCiAgICAgIiR7Q01B
S0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfaW50ZW50LmgiCiAg
ICAgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfaW50
ZW50X3NlcnZpY2UuaCIKQEAgLTMyOSw2ICszMzEsNyBAQCBTRVQoRVdLMlVuaXRUZXN0c19CSU5B
UklFUwogICAgIHRlc3RfZXdrMl9jb29raWVfbWFuYWdlcgogICAgIHRlc3RfZXdrMl9kb3dubG9h
ZF9qb2IKICAgICB0ZXN0X2V3azJfZWluYV9zaGFyZWRfc3RyaW5nCisgICAgdGVzdF9ld2syX2Zh
dmljb25fZGF0YWJhc2UKICAgICB0ZXN0X2V3azJfcmVmcHRyX2V2YXNfb2JqZWN0CiAgICAgdGVz
dF9ld2syX2ludGVudHMKICAgICB0ZXN0X2V3azJfc2V0dGluZ3MKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0VXZWJLaXQyLmggYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2VmbC9FV2ViS2l0Mi5oCmluZGV4IDAwZGQ4MTEuLjdkMmY4NzkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0VXZWJLaXQyLmgKKysrIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRVdlYktpdDIuaApAQCAtMzQsNiArMzQs
NyBAQAogI2luY2x1ZGUgImV3a19jb29raWVfbWFuYWdlci5oIgogI2luY2x1ZGUgImV3a19kb3du
bG9hZF9qb2IuaCIKICNpbmNsdWRlICJld2tfZXJyb3IuaCIKKyNpbmNsdWRlICJld2tfZmF2aWNv
bl9kYXRhYmFzZS5oIgogI2luY2x1ZGUgImV3a19mb3JtX3N1Ym1pc3Npb25fcmVxdWVzdC5oIgog
I2luY2x1ZGUgImV3a19pbnRlbnQuaCIKICNpbmNsdWRlICJld2tfaW50ZW50X3NlcnZpY2UuaCIK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0LmNwcApp
bmRleCAwMmVkZGI0Li5jMjI1MTQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2VmbC9ld2tfY29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9lZmwvZXdrX2NvbnRleHQuY3BwCkBAIC0zNyw3ICszNyw5IEBACiAjaW5jbHVkZSAiZXdr
X2Nvb2tpZV9tYW5hZ2VyX3ByaXZhdGUuaCIKICNpbmNsdWRlICJld2tfZG93bmxvYWRfam9iLmgi
CiAjaW5jbHVkZSAiZXdrX2Rvd25sb2FkX2pvYl9wcml2YXRlLmgiCisjaW5jbHVkZSAiZXdrX2Zh
dmljb25fZGF0YWJhc2VfcHJpdmF0ZS5oIgogI2luY2x1ZGUgPFdlYkNvcmUvRmlsZVN5c3RlbS5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvSWNvbkRhdGFiYXNlLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hN
YXAuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIApAQCAtNjYsNiArNjgsNyBA
QCBzdHJ1Y3QgX0V3a19Db250ZXh0IHsKICAgICBXS1JldGFpblB0cjxXS0NvbnRleHRSZWY+IGNv
bnRleHQ7CiAKICAgICBFd2tfQ29va2llX01hbmFnZXIqIGNvb2tpZU1hbmFnZXI7CisgICAgRXdr
X0Zhdmljb25fRGF0YWJhc2UqIGZhdmljb25EYXRhYmFzZTsKICNpZiBFTkFCTEUoQkFUVEVSWV9T
VEFUVVMpCiAgICAgUmVmUHRyPEJhdHRlcnlQcm92aWRlcj4gYmF0dGVyeVByb3ZpZGVyOwogI2Vu
ZGlmCkBAIC04Niw2ICs4OSw3IEBAIHN0cnVjdCBfRXdrX0NvbnRleHQgewogICAgICAgICA6IF9f
cmVmKDEpCiAgICAgICAgICwgY29udGV4dChjb250ZXh0UmVmKQogICAgICAgICAsIGNvb2tpZU1h
bmFnZXIoMCkKKyAgICAgICAgLCBmYXZpY29uRGF0YWJhc2UoMCkKICAgICAgICAgLCByZXF1ZXN0
TWFuYWdlcihXS0NvbnRleHRHZXRTb3VwUmVxdWVzdE1hbmFnZXIoY29udGV4dFJlZi5nZXQoKSkp
CiAgICAgICAgICwgaGlzdG9yeUNsaWVudCgpCiAgICAgewpAQCAtMTIxLDYgKzEyNSw5IEBAIHN0
cnVjdCBfRXdrX0NvbnRleHQgewogICAgICAgICBpZiAoY29va2llTWFuYWdlcikKICAgICAgICAg
ICAgIGV3a19jb29raWVfbWFuYWdlcl9mcmVlKGNvb2tpZU1hbmFnZXIpOwogCisgICAgICAgIGlm
IChmYXZpY29uRGF0YWJhc2UpCisgICAgICAgICAgICBld2tfZmF2aWNvbl9kYXRhYmFzZV9mcmVl
KGZhdmljb25EYXRhYmFzZSk7CisKICAgICAgICAgSGFzaE1hcDx1aW50NjRfdCwgRXdrX0Rvd25s
b2FkX0pvYio+OjppdGVyYXRvciBpdCA9IGRvd25sb2FkSm9icy5iZWdpbigpOwogICAgICAgICBI
YXNoTWFwPHVpbnQ2NF90LCBFd2tfRG93bmxvYWRfSm9iKj46Oml0ZXJhdG9yIGVuZCA9IGRvd25s
b2FkSm9icy5lbmQoKTsKICAgICAgICAgZm9yICggOyBpdCAhPSBlbmQ7ICsraXQpCkBAIC0xNTcs
NiArMTY0LDIyIEBAIEV3a19Db29raWVfTWFuYWdlciogZXdrX2NvbnRleHRfY29va2llX21hbmFn
ZXJfZ2V0KGNvbnN0IEV3a19Db250ZXh0KiBld2tDb250ZXh0CiAgICAgcmV0dXJuIGV3a0NvbnRl
eHQtPmNvb2tpZU1hbmFnZXI7CiB9CiAKK0V3a19GYXZpY29uX0RhdGFiYXNlKiBld2tfY29udGV4
dF9mYXZpY29uX2RhdGFiYXNlX2dldChjb25zdCBFd2tfQ29udGV4dCogZXdrQ29udGV4dCkKK3sK
KyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoZXdrQ29udGV4dCwgMCk7CisKKyAg
ICBpZiAoIWV3a0NvbnRleHQtPmZhdmljb25EYXRhYmFzZSkgeworICAgICAgICAvLyBTZXQgZGF0
YWJhc2UgcGF0aC4KKyAgICAgICAgV2ViQ29udGV4dCogd2ViQ29udGV4dCA9IHRvSW1wbChld2tD
b250ZXh0LT5jb250ZXh0LmdldCgpKTsKKyAgICAgICAgU3RyaW5nIGRhdGFiYXNlUGF0aCA9IHdl
YkNvbnRleHQtPmljb25EYXRhYmFzZVBhdGgoKSArICIvIiArIFdlYkNvcmU6Okljb25EYXRhYmFz
ZTo6ZGVmYXVsdERhdGFiYXNlRmlsZW5hbWUoKTsKKyAgICAgICAgd2ViQ29udGV4dC0+c2V0SWNv
bkRhdGFiYXNlUGF0aChkYXRhYmFzZVBhdGgpOworCisgICAgICAgIGNvbnN0X2Nhc3Q8RXdrX0Nv
bnRleHQqPihld2tDb250ZXh0KS0+ZmF2aWNvbkRhdGFiYXNlID0gZXdrX2Zhdmljb25fZGF0YWJh
c2VfbmV3KFdLQ29udGV4dEdldEljb25EYXRhYmFzZShld2tDb250ZXh0LT5jb250ZXh0LmdldCgp
KSk7CisgICAgfQorCisgICAgcmV0dXJuIGV3a0NvbnRleHQtPmZhdmljb25EYXRhYmFzZTsKK30K
KwogV0tDb250ZXh0UmVmIGV3a19jb250ZXh0X1dLQ29udGV4dF9nZXQoY29uc3QgRXdrX0NvbnRl
eHQqIGV3a0NvbnRleHQpCiB7CiAgICAgcmV0dXJuIGV3a0NvbnRleHQtPmNvbnRleHQuZ2V0KCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4
dC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuaAppbmRl
eCAzZjQ2ZDQ2Li44YzBmNjI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2VmbC9ld2tfY29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
ZWZsL2V3a19jb250ZXh0LmgKQEAgLTM4LDYgKzM4LDcgQEAKICNkZWZpbmUgZXdrX2NvbnRleHRf
aAogCiAjaW5jbHVkZSAiZXdrX2Nvb2tpZV9tYW5hZ2VyLmgiCisjaW5jbHVkZSAiZXdrX2Zhdmlj
b25fZGF0YWJhc2UuaCIKICNpbmNsdWRlICJld2tfbmF2aWdhdGlvbl9kYXRhLmgiCiAjaW5jbHVk
ZSAiZXdrX3VybF9zY2hlbWVfcmVxdWVzdC5oIgogI2luY2x1ZGUgPEV2YXMuaD4KQEAgLTE2NSw2
ICsxNjYsMTUgQEAgRUFQSSBFd2tfQ29udGV4dCAqZXdrX2NvbnRleHRfbmV3X3dpdGhfaW5qZWN0
ZWRfYnVuZGxlX3BhdGgoY29uc3QgY2hhciAqcGF0aCk7CiBFQVBJIEV3a19Db29raWVfTWFuYWdl
ciAqZXdrX2NvbnRleHRfY29va2llX21hbmFnZXJfZ2V0KGNvbnN0IEV3a19Db250ZXh0ICpjb250
ZXh0KTsKIAogLyoqCisgKiBHZXRzIHRoZSBmYXZpY29uIGRhdGFiYXNlIGluc3RhbmNlIGZvciB0
aGlzIEBhIGNvbnRleHQuCisgKgorICogQHBhcmFtIGNvbnRleHQgY29udGV4dCBvYmplY3QgdG8g
cXVlcnkuCisgKgorICogQHJldHVybiBFd2tfRmF2aWNvbl9EYXRhYmFzZSBvYmplY3QgaW5zdGFu
Y2Ugb3IgQGMgTlVMTCBpbiBjYXNlIG9mIGZhaWx1cmUuCisgKi8KK0VBUEkgRXdrX0Zhdmljb25f
RGF0YWJhc2UgKmV3a19jb250ZXh0X2Zhdmljb25fZGF0YWJhc2VfZ2V0KGNvbnN0IEV3a19Db250
ZXh0ICpjb250ZXh0KTsKKworLyoqCiAgKiBSZWdpc3RlciBAYSBzY2hlbWUgaW4gQGEgY29udGV4
dC4KICAqCiAgKiBXaGVuIGFuIFVSTCByZXF1ZXN0IHdpdGggQGEgc2NoZW1lIGlzIG1hZGUgaW4g
dGhlICNFd2tfQ29udGV4dCwgdGhlIGNhbGxiYWNrCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfZmF2aWNvbl9kYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfZmF2aWNvbl9kYXRhYmFzZS5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzFkNzU5OAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19mYXZpY29uX2RhdGFiYXNlLmNwcApA
QCAtMCwwICsxLDI2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3Jh
dGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgImV3a19mYXZpY29uX2RhdGFiYXNlLmgiCisKKyNpbmNsdWRlICJXS0FQSUNh
c3QuaCIKKyNpbmNsdWRlICJXS0ljb25EYXRhYmFzZS5oIgorI2luY2x1ZGUgIldLUmV0YWluUHRy
LmgiCisjaW5jbHVkZSAiV0tVUkwuaCIKKyNpbmNsdWRlICJXZWJJY29uRGF0YWJhc2UuaCIKKyNp
bmNsdWRlICJXZWJVUkwuaCIKKyNpbmNsdWRlICJld2tfZmF2aWNvbl9kYXRhYmFzZV9wcml2YXRl
LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9DYWlyb1V0aWxpdGllc0VmbC5oPgorI2luY2x1ZGUgPFdl
YkNvcmUvUmVmUHRyQ2Fpcm8uaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKwor
dXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKKworc3RydWN0IEljb25DaGFuZ2VDYWxsYmFja0RhdGEg
eworICAgIEV3a19GYXZpY29uX0RhdGFiYXNlX0ljb25fQ2hhbmdlX0NiIGNhbGxiYWNrOworICAg
IHZvaWQqIHVzZXJEYXRhOworCisgICAgSWNvbkNoYW5nZUNhbGxiYWNrRGF0YSgpCisgICAgICAg
IDogY2FsbGJhY2soMCkKKyAgICAgICAgLCB1c2VyRGF0YSgwKQorICAgIHsgfQorCisgICAgSWNv
bkNoYW5nZUNhbGxiYWNrRGF0YShFd2tfRmF2aWNvbl9EYXRhYmFzZV9JY29uX0NoYW5nZV9DYiBf
Y2FsbGJhY2ssIHZvaWQqIF91c2VyRGF0YSkKKyAgICAgICAgOiBjYWxsYmFjayhfY2FsbGJhY2sp
CisgICAgICAgICwgdXNlckRhdGEoX3VzZXJEYXRhKQorICAgIHsgfQorfTsKKworc3RydWN0IElj
b25SZXF1ZXN0Q2FsbGJhY2tEYXRhIHsKKyAgICBFd2tfRmF2aWNvbl9EYXRhYmFzZV9Bc3luY19J
Y29uX0dldF9DYiBjYWxsYmFjazsKKyAgICB2b2lkKiB1c2VyRGF0YTsKKyAgICBFdmFzKiBldmFz
OworCisgICAgSWNvblJlcXVlc3RDYWxsYmFja0RhdGEoKQorICAgICAgICA6IGNhbGxiYWNrKDAp
CisgICAgICAgICwgdXNlckRhdGEoMCkKKyAgICAgICAgLCBldmFzKDApCisgICAgeyB9CisKKyAg
ICBJY29uUmVxdWVzdENhbGxiYWNrRGF0YShFd2tfRmF2aWNvbl9EYXRhYmFzZV9Bc3luY19JY29u
X0dldF9DYiBfY2FsbGJhY2ssIHZvaWQqIF91c2VyRGF0YSwgRXZhcyogX2V2YXMpCisgICAgICAg
IDogY2FsbGJhY2soX2NhbGxiYWNrKQorICAgICAgICAsIHVzZXJEYXRhKF91c2VyRGF0YSkKKyAg
ICAgICAgLCBldmFzKF9ldmFzKQorICAgIHsgfQorfTsKKworc3RhdGljIHZvaWQgZGlkQ2hhbmdl
SWNvbkZvclBhZ2VVUkwoV0tJY29uRGF0YWJhc2VSZWYgaWNvbkRhdGFiYXNlLCBXS1VSTFJlZiBw
YWdlVVJMLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKTsKK3N0YXRpYyB2b2lkIGljb25EYXRhUmVh
ZHlGb3JQYWdlVVJMKFdLSWNvbkRhdGFiYXNlUmVmIGljb25EYXRhYmFzZSwgV0tVUkxSZWYgcGFn
ZVVSTCwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7CisKK3R5cGVkZWYgSGFzaE1hcDxFd2tfRmF2
aWNvbl9EYXRhYmFzZV9JY29uX0NoYW5nZV9DYiwgSWNvbkNoYW5nZUNhbGxiYWNrRGF0YT4gQ2hh
bmdlTGlzdGVuZXJNYXA7Cit0eXBlZGVmIFZlY3RvcjxJY29uUmVxdWVzdENhbGxiYWNrRGF0YT4g
UGVuZGluZ0ljb25SZXF1ZXN0VmVjdG9yOwordHlwZWRlZiBIYXNoTWFwPFN0cmluZyAvKiBwYWdl
VVJMICovLCBQZW5kaW5nSWNvblJlcXVlc3RWZWN0b3I+IFBlbmRpbmdJY29uUmVxdWVzdE1hcDsK
KworLyoqCisgKiBcc3RydWN0ICBfRXdrX0Zhdmljb25fRGF0YWJhc2UKKyAqIEBicmllZiAgIENv
bnRhaW5zIHRoZSBmYXZpY29uIGRhdGFiYXNlIGRhdGEuCisgKi8KK3N0cnVjdCBfRXdrX0Zhdmlj
b25fRGF0YWJhc2UgeworICAgIFdLUmV0YWluUHRyPFdLSWNvbkRhdGFiYXNlUmVmPiB3a0ljb25E
YXRhYmFzZTsKKyAgICBDaGFuZ2VMaXN0ZW5lck1hcCBjaGFuZ2VMaXN0ZW5lcnM7CisgICAgUGVu
ZGluZ0ljb25SZXF1ZXN0TWFwIGljb25SZXF1ZXN0czsKKworICAgIF9Fd2tfRmF2aWNvbl9EYXRh
YmFzZShXS0ljb25EYXRhYmFzZVJlZiBpY29uRGF0YWJhc2VSZWYpCisgICAgICAgIDogIHdrSWNv
bkRhdGFiYXNlKGljb25EYXRhYmFzZVJlZikKKyAgICB7CisgICAgICAgIFdLSWNvbkRhdGFiYXNl
Q2xpZW50IGljb25EYXRhYmFzZUNsaWVudDsKKyAgICAgICAgbWVtc2V0KCZpY29uRGF0YWJhc2VD
bGllbnQsIDAsIHNpemVvZihXS0ljb25EYXRhYmFzZUNsaWVudCkpOworICAgICAgICBpY29uRGF0
YWJhc2VDbGllbnQudmVyc2lvbiA9IGtXS0ljb25EYXRhYmFzZUNsaWVudEN1cnJlbnRWZXJzaW9u
OworICAgICAgICBpY29uRGF0YWJhc2VDbGllbnQuY2xpZW50SW5mbyA9IHRoaXM7CisgICAgICAg
IGljb25EYXRhYmFzZUNsaWVudC5kaWRDaGFuZ2VJY29uRm9yUGFnZVVSTCA9IGRpZENoYW5nZUlj
b25Gb3JQYWdlVVJMOworICAgICAgICBpY29uRGF0YWJhc2VDbGllbnQuaWNvbkRhdGFSZWFkeUZv
clBhZ2VVUkwgPSBpY29uRGF0YVJlYWR5Rm9yUGFnZVVSTDsKKyAgICAgICAgV0tJY29uRGF0YWJh
c2VTZXRJY29uRGF0YWJhc2VDbGllbnQod2tJY29uRGF0YWJhc2UuZ2V0KCksICZpY29uRGF0YWJh
c2VDbGllbnQpOworICAgIH0KK307CisKK3N0YXRpYyB2b2lkIGRpZENoYW5nZUljb25Gb3JQYWdl
VVJMKFdLSWNvbkRhdGFiYXNlUmVmLCBXS1VSTFJlZiBwYWdlVVJMUmVmLCBjb25zdCB2b2lkKiBj
bGllbnRJbmZvKQoreworICAgIGNvbnN0IEV3a19GYXZpY29uX0RhdGFiYXNlKiBld2tJY29uRGF0
YWJhc2UgPSBzdGF0aWNfY2FzdDxjb25zdCBFd2tfRmF2aWNvbl9EYXRhYmFzZSo+KGNsaWVudElu
Zm8pOworCisgICAgaWYgKGV3a0ljb25EYXRhYmFzZS0+Y2hhbmdlTGlzdGVuZXJzLmlzRW1wdHko
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQ1N0cmluZyBwYWdlVVJMID0gdG9JbXBsKHBhZ2VV
UkxSZWYpLT5zdHJpbmcoKS51dGY4KCk7CisKKyAgICBDaGFuZ2VMaXN0ZW5lck1hcDo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBld2tJY29uRGF0YWJhc2UtPmNoYW5nZUxpc3RlbmVycy5iZWdpbigpOwor
ICAgIENoYW5nZUxpc3RlbmVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBld2tJY29uRGF0YWJh
c2UtPmNoYW5nZUxpc3RlbmVycy5lbmQoKTsKKyAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KQor
ICAgICAgICBpdC0+dmFsdWUuY2FsbGJhY2socGFnZVVSTC5kYXRhKCksIGl0LT52YWx1ZS51c2Vy
RGF0YSk7Cit9CisKK3N0YXRpYyBjYWlyb19zdXJmYWNlX3QqIGdldEljb25TdXJmYWNlU3luY2hy
b25vdXNseShXZWJJY29uRGF0YWJhc2UqIHdlYkljb25EYXRhYmFzZSwgY29uc3QgU3RyaW5nJiBw
YWdlVVJMKQoreworICAgIHdlYkljb25EYXRhYmFzZS0+cmV0YWluSWNvbkZvclBhZ2VVUkwocGFn
ZVVSTCk7CisKKyAgICBXZWJDb3JlOjpOYXRpdmVJbWFnZVB0ciBpY29uID0gd2ViSWNvbkRhdGFi
YXNlLT5uYXRpdmVJbWFnZUZvclBhZ2VVUkwocGFnZVVSTCk7CisgICAgaWYgKCFpY29uKSB7Cisg
ICAgICAgIHdlYkljb25EYXRhYmFzZS0+cmVsZWFzZUljb25Gb3JQYWdlVVJMKHBhZ2VVUkwpOwor
ICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICByZXR1cm4gaWNvbi0+c3VyZmFjZSgpOwor
fQorCitzdGF0aWMgdm9pZCBpY29uRGF0YVJlYWR5Rm9yUGFnZVVSTChXS0ljb25EYXRhYmFzZVJl
ZiwgV0tVUkxSZWYgcGFnZVVSTCwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICBFd2tf
RmF2aWNvbl9EYXRhYmFzZSogZXdrSWNvbkRhdGFiYXNlID0gY29uc3RfY2FzdDxFd2tfRmF2aWNv
bl9EYXRhYmFzZSo+KHN0YXRpY19jYXN0PGNvbnN0IEV3a19GYXZpY29uX0RhdGFiYXNlKj4oY2xp
ZW50SW5mbykpOworCisgICAgU3RyaW5nIHVybFN0cmluZyA9IHRvSW1wbChwYWdlVVJMKS0+c3Ry
aW5nKCk7CisgICAgaWYgKCFld2tJY29uRGF0YWJhc2UtPmljb25SZXF1ZXN0cy5jb250YWlucyh1
cmxTdHJpbmcpKQorICAgICAgICByZXR1cm47CisKKyAgICBXZWJJY29uRGF0YWJhc2UqIHdlYklj
b25EYXRhYmFzZSA9IHRvSW1wbChld2tJY29uRGF0YWJhc2UtPndrSWNvbkRhdGFiYXNlLmdldCgp
KTsKKyAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBzdXJmYWNlID0gZ2V0SWNvblN1cmZhY2VT
eW5jaHJvbm91c2x5KHdlYkljb25EYXRhYmFzZSwgdXJsU3RyaW5nKTsKKworICAgIFBlbmRpbmdJ
Y29uUmVxdWVzdFZlY3RvciByZXF1ZXN0c0ZvclVSTCA9IGV3a0ljb25EYXRhYmFzZS0+aWNvblJl
cXVlc3RzLnRha2UodXJsU3RyaW5nKTsKKyAgICBzaXplX3QgcmVxdWVzdENvdW50ID0gcmVxdWVz
dHNGb3JVUkwuc2l6ZSgpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVxdWVzdENvdW50
OyArK2kpIHsKKyAgICAgICAgY29uc3QgSWNvblJlcXVlc3RDYWxsYmFja0RhdGEmIGNhbGxiYWNr
RGF0YSA9IHJlcXVlc3RzRm9yVVJMW2ldOworICAgICAgICBFdmFzX09iamVjdCogaWNvbiA9IHN1
cmZhY2UgPyBXZWJDb3JlOjpldmFzT2JqZWN0RnJvbUNhaXJvSW1hZ2VTdXJmYWNlKGNhbGxiYWNr
RGF0YS5ldmFzLCBzdXJmYWNlLmdldCgpKSA6IDA7CisgICAgICAgIGNhbGxiYWNrRGF0YS5jYWxs
YmFjayh1cmxTdHJpbmcudXRmOCgpLmRhdGEoKSwgaWNvbiwgY2FsbGJhY2tEYXRhLnVzZXJEYXRh
KTsKKyAgICAgICAgaWYgKGljb24pCisgICAgICAgICAgICBldmFzX29iamVjdF91bnJlZihpY29u
KTsKKyAgICB9Cit9CisKKy8qKgorICogQGludGVybmFsCisgKiBDb25zdHJ1Y3RzIGEgRXdrX0Zh
dmljb25fRGF0YWJhc2UgaW5zdGFuY2UuCisgKi8KK0V3a19GYXZpY29uX0RhdGFiYXNlKiBld2tf
ZmF2aWNvbl9kYXRhYmFzZV9uZXcoV0tJY29uRGF0YWJhc2VSZWYgd2tJY29uRGF0YWJhc2UpCit7
CisgICAgQVNTRVJUKHdrSWNvbkRhdGFiYXNlKTsKKworICAgIHJldHVybiBuZXcgRXdrX0Zhdmlj
b25fRGF0YWJhc2Uod2tJY29uRGF0YWJhc2UpOworfQorCisvKioKKyAqIEBpbnRlcm5hbAorICog
RnJlZXMgYSBFd2tfRmF2aWNvbl9EYXRhYmFzZSBpbnN0YW5jZS4KKyAqLwordm9pZCBld2tfZmF2
aWNvbl9kYXRhYmFzZV9mcmVlKEV3a19GYXZpY29uX0RhdGFiYXNlKiBld2tJY29uRGF0YWJhc2Up
Cit7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oZXdrSWNvbkRhdGFiYXNlKTsKKwor
ICAgIGRlbGV0ZSBld2tJY29uRGF0YWJhc2U7Cit9CisKK2NvbnN0IGNoYXIqIGV3a19mYXZpY29u
X2RhdGFiYXNlX2ljb25fdXJsX2dldChFd2tfRmF2aWNvbl9EYXRhYmFzZSogZXdrSWNvbkRhdGFi
YXNlLCBjb25zdCBjaGFyKiBwYWdlVVJMKQoreworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVU
VVJOX1ZBTChld2tJY29uRGF0YWJhc2UsIDApOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVU
VVJOX1ZBTChwYWdlVVJMLCAwKTsKKworICAgIFN0cmluZyBpY29uVVJMOworICAgIHRvSW1wbChl
d2tJY29uRGF0YWJhc2UtPndrSWNvbkRhdGFiYXNlLmdldCgpKS0+c3luY2hyb25vdXNJY29uVVJM
Rm9yUGFnZVVSTChwYWdlVVJMLCBpY29uVVJMKTsKKworICAgIHJldHVybiBlaW5hX3N0cmluZ3No
YXJlX2FkZChpY29uVVJMLnV0ZjgoKS5kYXRhKCkpOworfQorCitzdHJ1Y3QgQXN5bmNJY29uUmVx
dWVzdFJlc3BvbnNlIHsKKyAgICBTdHJpbmcgcGFnZVVSTDsKKyAgICBSZWZQdHI8Y2Fpcm9fc3Vy
ZmFjZV90PiBzdXJmYWNlOworICAgIEljb25SZXF1ZXN0Q2FsbGJhY2tEYXRhIGNhbGxiYWNrRGF0
YTsKKworICAgIEFzeW5jSWNvblJlcXVlc3RSZXNwb25zZShjb25zdCBTdHJpbmcmIF9wYWdlVVJM
LCBQYXNzUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gX3N1cmZhY2UsIGNvbnN0IEljb25SZXF1ZXN0
Q2FsbGJhY2tEYXRhJiBfY2FsbGJhY2tEYXRhKQorICAgICAgICA6IHBhZ2VVUkwoX3BhZ2VVUkwp
CisgICAgICAgICwgc3VyZmFjZShfc3VyZmFjZSkKKyAgICAgICAgLCBjYWxsYmFja0RhdGEoX2Nh
bGxiYWNrRGF0YSkKKyAgICB7IH0KK307CisKK3N0YXRpYyBFaW5hX0Jvb2wgcmVzcG9uZF9pY29u
X3JlcXVlc3RfaWRsZSh2b2lkKiBkYXRhKQoreworICAgIEFzeW5jSWNvblJlcXVlc3RSZXNwb25z
ZSogcmVzcG9uc2UgPSBzdGF0aWNfY2FzdDxBc3luY0ljb25SZXF1ZXN0UmVzcG9uc2UqPihkYXRh
KTsKKworICAgIEV2YXNfT2JqZWN0KiBpY29uID0gcmVzcG9uc2UtPnN1cmZhY2UgPyBXZWJDb3Jl
OjpldmFzT2JqZWN0RnJvbUNhaXJvSW1hZ2VTdXJmYWNlKHJlc3BvbnNlLT5jYWxsYmFja0RhdGEu
ZXZhcywgcmVzcG9uc2UtPnN1cmZhY2UuZ2V0KCkpIDogMDsKKyAgICByZXNwb25zZS0+Y2FsbGJh
Y2tEYXRhLmNhbGxiYWNrKHJlc3BvbnNlLT5wYWdlVVJMLnV0ZjgoKS5kYXRhKCksIGljb24sIHJl
c3BvbnNlLT5jYWxsYmFja0RhdGEudXNlckRhdGEpOworCisgICAgaWYgKGljb24pCisgICAgICAg
IGV2YXNfb2JqZWN0X3VucmVmKGljb24pOworCisgICAgZGVsZXRlIHJlc3BvbnNlOworCisgICAg
cmV0dXJuIEVDT1JFX0NBTExCQUNLX0RPTkU7Cit9CisKK0VpbmFfQm9vbCBld2tfZmF2aWNvbl9k
YXRhYmFzZV9hc3luY19pY29uX2dldChFd2tfRmF2aWNvbl9EYXRhYmFzZSogZXdrSWNvbkRhdGFi
YXNlLCBjb25zdCBjaGFyKiBwYWdlX3VybCwgRXZhcyogZXZhcywgRXdrX0Zhdmljb25fRGF0YWJh
c2VfQXN5bmNfSWNvbl9HZXRfQ2IgY2FsbGJhY2ssIHZvaWQqIHVzZXJEYXRhKQoreworICAgIEVJ
TkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChld2tJY29uRGF0YWJhc2UsIGZhbHNlKTsKKyAg
ICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwocGFnZV91cmwsIGZhbHNlKTsKKyAgICBF
SU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoZXZhcywgZmFsc2UpOworICAgIEVJTkFfU0FG
RVRZX09OX05VTExfUkVUVVJOX1ZBTChjYWxsYmFjaywgZmFsc2UpOworCisgICAgV2ViSWNvbkRh
dGFiYXNlKiB3ZWJJY29uRGF0YWJhc2UgPSB0b0ltcGwoZXdrSWNvbkRhdGFiYXNlLT53a0ljb25E
YXRhYmFzZS5nZXQoKSk7CisKKyAgICAvLyBXZSBhc2sgZm9yIHRoZSBpY29uIGRpcmVjdGx5LiBJ
ZiB3ZSBkb24ndCBnZXQgdGhlIGljb24gZGF0YSBub3csCisgICAgLy8gd2UnbGwgYmUgbm90aWZp
ZWQgbGF0ZXIgKGV2ZW4gaWYgdGhlIGRhdGFiYXNlIGlzIHN0aWxsIGltcG9ydGluZyBpY29ucyku
CisgICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gc3VyZmFjZSA9IGdldEljb25TdXJmYWNlU3lu
Y2hyb25vdXNseSh3ZWJJY29uRGF0YWJhc2UsIHBhZ2VfdXJsKTsKKworICAgIC8vIElmIHRoZXJl
J3Mgbm90IGEgdmFsaWQgaWNvbiwgYnV0IHRoZXJlJ3MgYW4gaWNvblVSTCByZWdpc3RlcmVkLAor
ICAgIC8vIG9yIGl0J3Mgc3RpbGwgbm90IHJlZ2lzdGVyZWQgYnV0IHRoZSBpbXBvcnQgcHJvY2Vz
cyBoYXNuJ3QKKyAgICAvLyBmaW5pc2hlZCB5ZXQsIHdlIG5lZWQgdG8gd2FpdCBmb3IgaWNvbkRh
dGFSZWFkeUZvclBhZ2VVUkwgdG8gYmUKKyAgICAvLyBjYWxsZWQgYmVmb3JlIG1ha2luZyBhbmQg
aW5mb3JtZWQgZGVjaXNpb24uCisgICAgU3RyaW5nIGljb25VUkxGb3JQYWdlVVJMOworICAgIHdl
Ykljb25EYXRhYmFzZS0+c3luY2hyb25vdXNJY29uVVJMRm9yUGFnZVVSTChwYWdlX3VybCwgaWNv
blVSTEZvclBhZ2VVUkwpOworICAgIGlmICghc3VyZmFjZSAmJiAoIWljb25VUkxGb3JQYWdlVVJM
LmlzRW1wdHkoKSB8fCAhd2ViSWNvbkRhdGFiYXNlLT5pc1VybEltcG9ydENvbXBsZXRlZCgpKSkg
eworICAgICAgICBQZW5kaW5nSWNvblJlcXVlc3RWZWN0b3IgcmVxdWVzdHMgPSBld2tJY29uRGF0
YWJhc2UtPmljb25SZXF1ZXN0cy5nZXQocGFnZV91cmwpOworICAgICAgICByZXF1ZXN0cy5hcHBl
bmQoSWNvblJlcXVlc3RDYWxsYmFja0RhdGEoY2FsbGJhY2ssIHVzZXJEYXRhLCBldmFzKSk7Cisg
ICAgICAgIGV3a0ljb25EYXRhYmFzZS0+aWNvblJlcXVlc3RzLnNldChwYWdlX3VybCwgcmVxdWVz
dHMpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICAvLyBSZXNwb25kIHdoZW4g
aWRsZS4KKyAgICBBc3luY0ljb25SZXF1ZXN0UmVzcG9uc2UqIHJlc3BvbnNlID0gbmV3IEFzeW5j
SWNvblJlcXVlc3RSZXNwb25zZShwYWdlX3VybCwgc3VyZmFjZS5yZWxlYXNlKCksIEljb25SZXF1
ZXN0Q2FsbGJhY2tEYXRhKGNhbGxiYWNrLCB1c2VyRGF0YSwgZXZhcykpOworICAgIGVjb3JlX2lk
bGVyX2FkZChyZXNwb25kX2ljb25fcmVxdWVzdF9pZGxlLCByZXNwb25zZSk7CisKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKwordm9pZCBld2tfZmF2aWNvbl9kYXRhYmFzZV9pY29uX2NoYW5nZV9jYWxs
YmFja19hZGQoRXdrX0Zhdmljb25fRGF0YWJhc2UqIGV3a0ljb25EYXRhYmFzZSwgRXdrX0Zhdmlj
b25fRGF0YWJhc2VfSWNvbl9DaGFuZ2VfQ2IgY2FsbGJhY2ssIHZvaWQqIHVzZXJEYXRhKQorewor
ICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKGV3a0ljb25EYXRhYmFzZSk7CisgICAgRUlO
QV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oY2FsbGJhY2spOworCisgICAgaWYgKGV3a0ljb25EYXRh
YmFzZS0+Y2hhbmdlTGlzdGVuZXJzLmNvbnRhaW5zKGNhbGxiYWNrKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgZXdrSWNvbkRhdGFiYXNlLT5jaGFuZ2VMaXN0ZW5lcnMuYWRkKGNhbGxiYWNrLCBJ
Y29uQ2hhbmdlQ2FsbGJhY2tEYXRhKGNhbGxiYWNrLCB1c2VyRGF0YSkpOworfQorCit2b2lkIGV3
a19mYXZpY29uX2RhdGFiYXNlX2ljb25fY2hhbmdlX2NhbGxiYWNrX2RlbChFd2tfRmF2aWNvbl9E
YXRhYmFzZSogZXdrSWNvbkRhdGFiYXNlLCBFd2tfRmF2aWNvbl9EYXRhYmFzZV9JY29uX0NoYW5n
ZV9DYiBjYWxsYmFjaykKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihld2tJY29u
RGF0YWJhc2UpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKGNhbGxiYWNrKTsKKwor
ICAgIGV3a0ljb25EYXRhYmFzZS0+Y2hhbmdlTGlzdGVuZXJzLnJlbW92ZShjYWxsYmFjayk7Cit9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfZmF2aWNv
bl9kYXRhYmFzZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Zhdmlj
b25fZGF0YWJhc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jM2Q0NGU0
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdr
X2Zhdmljb25fZGF0YWJhc2UuaApAQCAtMCwwICsxLDEwOCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworLyoqCisgKiBAZmlsZSAgICBld2tfZmF2aWNvbl9kYXRhYmFzZS5oCisgKiBAYnJpZWYgICBE
ZXNjcmliZXMgdGhlIEV3ayBGYXZpY29uIERhdGFiYXNlIEFQSS4KKyAqLworCisjaWZuZGVmIGV3
a19mYXZpY29uX2RhdGFiYXNlX2gKKyNkZWZpbmUgZXdrX2Zhdmljb25fZGF0YWJhc2VfaAorCisj
aW5jbHVkZSA8RXZhcy5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2Vu
ZGlmCisKKy8qKiBDcmVhdGVzIGEgdHlwZSBuYW1lIGZvciBAYSBfRXdrX0Zhdmljb25fRGF0YWJh
c2UuICovCit0eXBlZGVmIHN0cnVjdCBfRXdrX0Zhdmljb25fRGF0YWJhc2UgRXdrX0Zhdmljb25f
RGF0YWJhc2U7CisKKy8qKgorICogQHR5cGVkZWYgRXdrX0Zhdmljb25fRGF0YWJhc2VfSWNvbl9D
aGFuZ2VfQ2IgRXdrX0Zhdmljb25fRGF0YWJhc2VfSWNvbl9DaGFuZ2VfQ2IKKyAqIEBicmllZiBD
YWxsYmFjayB0eXBlIGZvciB1c2Ugd2l0aCBld2tfZmF2aWNvbl9kYXRhYmFzZV9pY29uX2NoYW5n
ZV9jYWxsYmFja19hZGQgYW5kIGV3a19mYXZpY29uX2RhdGFiYXNlX2ljb25fY2hhbmdlX2NhbGxi
YWNrX2RlbAorICovCit0eXBlZGVmIHZvaWQgKCpFd2tfRmF2aWNvbl9EYXRhYmFzZV9JY29uX0No
YW5nZV9DYikoY29uc3QgY2hhciAqcGFnZV91cmwsIHZvaWQgKmV2ZW50X2luZm8pOworCisvKioK
KyAqIEB0eXBlZGVmIEV3a19GYXZpY29uX0RhdGFiYXNlX0FzeW5jX0ljb25fR2V0X0NiIEV3a19G
YXZpY29uX0RhdGFiYXNlX0FzeW5jX0ljb25fR2V0X0NiCisgKiBAYnJpZWYgQ2FsbGJhY2sgdHlw
ZSBmb3IgdXNlIHdpdGggZXdrX2Zhdmljb25fZGF0YWJhc2VfYXN5bmNfaWNvbl9nZXQKKyAqCisg
KiBUaGUgQGEgaWNvbiBtYXkgYmUgTlVMTCBpZiB0aGVyZSBpcyBubyBmYXZpY29uIGFzc29jaWF0
ZWQgdG8gdGhlIGdpdmVuIEBhIHBhZ2VfdXJsLgorICoKKyAqIFlvdSBuZWVkIHRvIGNhbGwgZXZh
c19vYmplY3RfcmVmKCkgb24gdGhlIEBhIGljb24gaWYgeW91IHdpc2ggdG8ga2VlcCBpdCBhZnRl
ciB0aGUKKyAqIGNhbGxiYWNrIGlzIGV4ZWN1dGVkLgorICovCit0eXBlZGVmIHZvaWQgKCpFd2tf
RmF2aWNvbl9EYXRhYmFzZV9Bc3luY19JY29uX0dldF9DYikoY29uc3QgY2hhciAqcGFnZV91cmws
IEV2YXNfT2JqZWN0ICppY29uLCB2b2lkICpldmVudF9pbmZvKTsKKworLyoqCisgKiBSZXRyaWV2
ZXMgZnJvbSB0aGUgZGF0YWJhc2UgdGhlIGZhdmljb24gVVJMIGZvciB0aGUgZ2l2ZW4gQGEgcGFn
ZV91cmwKKyAqCisgKiBAcGFyYW0gZGF0YWJhc2UgZGF0YWJhc2Ugb2JqZWN0IHRvIHF1ZXJ5Cisg
KiBAcGFyYW0gcGFnZV91cmwgVVJMIG9mIHRoZSBwYWdlIHRvIGdldCB0aGUgZmF2aWNvbiBVUkwg
Zm9yCisgKgorICogQHJldHVybiB0aGUgZmF2aWNvbiBVUkwgcG9pbnRlciwgdGhhdCBtYXkgYmUg
QGMgTlVMTC4gVGhpcyBwb2ludGVyIGlzCisgKiAgICAgICAgIGd1YXJhbnRlZWQgdG8gYmUgZWlu
YV9zdHJpbmdzaGFyZSwgc28gd2hlbmV2ZXIgcG9zc2libGUKKyAqICAgICAgICAgc2F2ZSB5b3Vy
c2VsZiBzb21lIGNwdSBjeWNsZXMgYW5kIHVzZQorICogICAgICAgICBlaW5hX3N0cmluZ3NoYXJl
X3JlZigpIGluc3RlYWQgb2YgZWluYV9zdHJpbmdzaGFyZV9hZGQoKSBvcgorICogICAgICAgICBz
dHJkdXAoKQorICovCitFQVBJIGNvbnN0IGNoYXIgKmV3a19mYXZpY29uX2RhdGFiYXNlX2ljb25f
dXJsX2dldChFd2tfRmF2aWNvbl9EYXRhYmFzZSAqZGF0YWJhc2UsIGNvbnN0IGNoYXIgKnBhZ2Vf
dXJsKTsKKworLyoqCisgKiBSZXRyaWV2ZXMgYXN5bmNocm9ub3VzbHkgZnJvbSB0aGUgZGF0YWJh
c2UgdGhlIGZhdmljb24gZm9yIHRoZSBnaXZlbiBAYSBwYWdlX3VybAorICoKKyAqIEBwYXJhbSBk
YXRhYmFzZSBkYXRhYmFzZSBvYmplY3QgdG8gcXVlcnkKKyAqIEBwYXJhbSBwYWdlX3VybCBVUkwg
b2YgdGhlIHBhZ2UgdG8gZ2V0IHRoZSBmYXZpY29uIGZvcgorICogQHBhcmFtIGV2YXMgVGhlIGNh
bnZhcyB0byBhZGQgdGhlIGZhdmljb24gdG8KKyAqIEBwYXJhbSBjYWxsYmFjayBjYWxsYmFjayBm
dW5jdGlvbiB0byBiZSBjYWxsZWQgd2hlbiB0aGUgaWNvbiBpcyByZXRyaWV2ZWQKKyAqIEBwYXJh
bSBkYXRhIHRoZSBkYXRhIHBvaW50ZXIgdGhhdCB3YXMgdG8gYmUgcGFzc2VkIHRvIHRoZSBjYWxs
YmFjaworICoKKyAqIEByZXR1cm4gQGMgRUlOQV9UUlVFIGlmIHRoZSBpY29uIHdhcyBzdWNjZXNz
ZnVseSByZXF1ZXN0ZWQsIEBjIEVJTkFfRkFMU0Ugb3RoZXJ3aXNlCisgKi8KK0VBUEkgRWluYV9C
b29sIGV3a19mYXZpY29uX2RhdGFiYXNlX2FzeW5jX2ljb25fZ2V0KEV3a19GYXZpY29uX0RhdGFi
YXNlICpkYXRhYmFzZSwgY29uc3QgY2hhciAqcGFnZV91cmwsIEV2YXMgKmV2YXMsIEV3a19GYXZp
Y29uX0RhdGFiYXNlX0FzeW5jX0ljb25fR2V0X0NiIGNhbGxiYWNrLCB2b2lkICpkYXRhKTsKKwor
LyoqCisgKiBBZGQgKHJlZ2lzdGVyKSBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGEgaWNvbiBjaGFu
Z2UgZXZlbnQKKyAqCisgKiBAcGFyYW0gZGF0YWJhc2UgZGF0YWJhc2Ugb2JqZWN0IHRvIHJlZ2lz
dGVyIHRoZSBjYWxsYmFjaworICogQHBhcmFtIGNhbGxiYWNrIGNhbGxiYWNrIGZ1bmN0aW9uIHRv
IGJlIGNhbGxlZCB3aGVuIGFuIGljb24gY2hhbmdlcworICogQHBhcmFtIGRhdGEgdGhlIGRhdGEg
cG9pbnRlciB0aGF0IHdhcyB0byBiZSBwYXNzZWQgdG8gdGhlIGNhbGxiYWNrCisgKi8KK0VBUEkg
dm9pZCBld2tfZmF2aWNvbl9kYXRhYmFzZV9pY29uX2NoYW5nZV9jYWxsYmFja19hZGQoRXdrX0Zh
dmljb25fRGF0YWJhc2UgKmRhdGFiYXNlLCBFd2tfRmF2aWNvbl9EYXRhYmFzZV9JY29uX0NoYW5n
ZV9DYiBjYWxsYmFjaywgdm9pZCAqZGF0YSk7CisKKy8qKgorICogRGVsZXRlICh1bnJlZ2lzdGVy
KSBhIGNhbGxiYWNrIGZ1bmN0aW9uIHJlZ2lzdGVyZWQgdG8gYSBpY29uIGNoYW5nZSBldmVudAor
ICoKKyAqIEBwYXJhbSBkYXRhYmFzZSBkYXRhYmFzZSBvYmplY3QgdG8gdW5yZWdpc3RlciB0aGUg
Y2FsbGJhY2suCisgKiBAcGFyYW0gY2FsbGJhY2sgY2FsbGJhY2sgZnVuY3Rpb24gdG8gdW5yZWdp
c3RlcgorICovCitFQVBJIHZvaWQgZXdrX2Zhdmljb25fZGF0YWJhc2VfaWNvbl9jaGFuZ2VfY2Fs
bGJhY2tfZGVsKEV3a19GYXZpY29uX0RhdGFiYXNlICpkYXRhYmFzZSwgRXdrX0Zhdmljb25fRGF0
YWJhc2VfSWNvbl9DaGFuZ2VfQ2IgY2FsbGJhY2spOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30K
KyNlbmRpZgorCisjZW5kaWYgLy8gZXdrX2Zhdmljb25fZGF0YWJhc2VfaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Zhdmljb25fZGF0YWJhc2VfcHJp
dmF0ZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Zhdmljb25fZGF0
YWJhc2VfcHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4ZWNm
OTAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9l
d2tfZmF2aWNvbl9kYXRhYmFzZV9wcml2YXRlLmgKQEAgLTAsMCArMSwzNCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmbmRlZiBld2tfZmF2aWNvbl9kYXRhYmFzZV9wcml2YXRlX2gKKyNkZWZp
bmUgZXdrX2Zhdmljb25fZGF0YWJhc2VfcHJpdmF0ZV9oCisKKyNpbmNsdWRlIDxXZWJLaXQyL1dL
QmFzZS5oPgorCitFd2tfRmF2aWNvbl9EYXRhYmFzZSogZXdrX2Zhdmljb25fZGF0YWJhc2VfbmV3
KFdLSWNvbkRhdGFiYXNlUmVmIHdrSWNvbkRhdGFiYXNlKTsKK3ZvaWQgZXdrX2Zhdmljb25fZGF0
YWJhc2VfZnJlZShFd2tfRmF2aWNvbl9EYXRhYmFzZSogZXdrSWNvbkRhdGFiYXNlKTsKKworI2Vu
ZGlmIC8vIGV3a19mYXZpY29uX2RhdGFiYXNlX3ByaXZhdGVfaApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuY3BwCmluZGV4IDA3YTk0MjIuLjY5NDI5NzIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5jcHAKQEAgLTg1
LDYgKzg1LDcgQEAgc3RhdGljIGNvbnN0IGludCBkZWZhdWx0Q3Vyc29yU2l6ZSA9IDE2OwogCiB0
eXBlZGVmIEhhc2hNYXA8dWludDY0X3QsIEV3a19SZXNvdXJjZSo+IExvYWRpbmdSZXNvdXJjZXNN
YXA7CiBzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfcHJpdl9sb2FkaW5nX3Jlc291cmNlc19jbGVhcihM
b2FkaW5nUmVzb3VyY2VzTWFwJiBsb2FkaW5nUmVzb3VyY2VzTWFwKTsKK3N0YXRpYyB2b2lkIF9l
d2tfdmlld19vbl9mYXZpY29uX2NoYW5nZWQoY29uc3QgY2hhciogcGFnZVVSTCwgdm9pZCogZXZl
bnRJbmZvKTsKIAogdHlwZWRlZiBIYXNoTWFwPGNvbnN0IFdlYlBhZ2VQcm94eSosIGNvbnN0IEV2
YXNfT2JqZWN0Kj4gUGFnZVZpZXdNYXA7CiAKQEAgLTEyMiw2ICsxMjMsNyBAQCBzdHJ1Y3QgX0V3
a19WaWV3X1ByaXZhdGVfRGF0YSB7CiAgICAgV0tFaW5hU2hhcmVkU3RyaW5nIHRoZW1lOwogICAg
IFdLRWluYVNoYXJlZFN0cmluZyBjdXN0b21FbmNvZGluZzsKICAgICBXS0VpbmFTaGFyZWRTdHJp
bmcgY3Vyc29yR3JvdXA7CisgICAgV0tFaW5hU2hhcmVkU3RyaW5nIGZhdmljb25VUkw7CiAgICAg
RXZhc19PYmplY3QqIGN1cnNvck9iamVjdDsKICAgICBMb2FkaW5nUmVzb3VyY2VzTWFwIGxvYWRp
bmdSZXNvdXJjZXNNYXA7CiAgICAgRXdrX0JhY2tfRm9yd2FyZF9MaXN0KiBiYWNrRm9yd2FyZExp
c3Q7CkBAIC0xNzEsNiArMTczLDEwIEBAIHN0cnVjdCBfRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhIHsK
ICAgICB7CiAgICAgICAgIF9ld2tfdmlld19wcml2X2xvYWRpbmdfcmVzb3VyY2VzX2NsZWFyKGxv
YWRpbmdSZXNvdXJjZXNNYXApOwogCisgICAgICAgIC8qIFVucmVnaXN0ZXIgaWNvbiBjaGFuZ2Ug
Y2FsbGJhY2sgKi8KKyAgICAgICAgRXdrX0Zhdmljb25fRGF0YWJhc2UqIGljb25EYXRhYmFzZSA9
IGV3a19jb250ZXh0X2Zhdmljb25fZGF0YWJhc2VfZ2V0KGNvbnRleHQpOworICAgICAgICBld2tf
ZmF2aWNvbl9kYXRhYmFzZV9pY29uX2NoYW5nZV9jYWxsYmFja19kZWwoaWNvbkRhdGFiYXNlLCBf
ZXdrX3ZpZXdfb25fZmF2aWNvbl9jaGFuZ2VkKTsKKwogICAgICAgICBpZiAoY3Vyc29yT2JqZWN0
KQogICAgICAgICAgICAgZXZhc19vYmplY3RfZGVsKGN1cnNvck9iamVjdCk7CiAKQEAgLTI1MCw2
ICsyNTYsMTcgQEAgc3RhdGljIHZvaWQgX2V3a192aWV3X3NtYXJ0X2NoYW5nZWQoRXdrX1ZpZXdf
U21hcnRfRGF0YSogc21hcnREYXRhKQogICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NoYW5nZWQoc21h
cnREYXRhLT5zZWxmKTsKIH0KIAorc3RhdGljIHZvaWQgX2V3a192aWV3X29uX2Zhdmljb25fY2hh
bmdlZChjb25zdCBjaGFyKiBwYWdlVVJMLCB2b2lkKiBldmVudEluZm8pCit7CisgICAgRXZhc19P
YmplY3QqIGV3a1ZpZXcgPSBzdGF0aWNfY2FzdDxFdmFzX09iamVjdCo+KGV2ZW50SW5mbyk7CisK
KyAgICBjb25zdCBjaGFyKiB2aWV3X3VybCA9IGV3a192aWV3X3VybF9nZXQoZXdrVmlldyk7Cisg
ICAgaWYgKHN0cmNhc2VjbXAodmlld191cmwsIHBhZ2VVUkwpKQorICAgICAgICByZXR1cm47CisK
KyAgICBld2tfdmlld191cGRhdGVfaWNvbihld2tWaWV3KTsKK30KKwogLy8gRGVmYXVsdCBFdmVu
dCBIYW5kbGluZy4KIHN0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3NtYXJ0X2ZvY3VzX2luKEV3
a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSkKIHsKQEAgLTgzNCw2ICs4NTEsMTAgQEAgc3Rh
dGljIHZvaWQgX2V3a192aWV3X2luaXRpYWxpemUoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEV3a19D
b250ZXh0KiBjb250ZXh0LCBXS1AKICAgICBwcml2LT5wYWdlUHJveHktPmZ1bGxTY3JlZW5NYW5h
Z2VyKCktPnNldFdlYlZpZXcoZXdrVmlldyk7CiAgICAgZXdrX3NldHRpbmdzX2Z1bGxzY3JlZW5f
ZW5hYmxlZF9zZXQocHJpdi0+c2V0dGluZ3MuZ2V0KCksIHRydWUpOwogI2VuZGlmCisKKyAgICAv
KiBMaXN0ZW4gZm9yIGZhdmljb24gY2hhbmdlcyAqLworICAgIEV3a19GYXZpY29uX0RhdGFiYXNl
KiBpY29uRGF0YWJhc2UgPSBld2tfY29udGV4dF9mYXZpY29uX2RhdGFiYXNlX2dldChwcml2LT5j
b250ZXh0KTsKKyAgICBld2tfZmF2aWNvbl9kYXRhYmFzZV9pY29uX2NoYW5nZV9jYWxsYmFja19h
ZGQoaWNvbkRhdGFiYXNlLCBfZXdrX3ZpZXdfb25fZmF2aWNvbl9jaGFuZ2VkLCBld2tWaWV3KTsK
IH0KIAogc3RhdGljIEV2YXNfT2JqZWN0KiBfZXdrX3ZpZXdfYWRkX3dpdGhfc21hcnQoRXZhcyog
Y2FudmFzLCBFdmFzX1NtYXJ0KiBzbWFydCkKQEAgLTkzMSw2ICs5NTIsOSBAQCB2b2lkIGV3a192
aWV3X3VybF91cGRhdGUoRXZhc19PYmplY3QqIGV3a1ZpZXcpCiAgICAgcHJpdi0+dXJsID0gYWN0
aXZlVVJMLnV0ZjgoKS5kYXRhKCk7CiAgICAgY29uc3QgY2hhciogY2FsbGJhY2tBcmd1bWVudCA9
IHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihwcml2LT51cmwpOwogICAgIGV2YXNfb2JqZWN0X3Nt
YXJ0X2NhbGxiYWNrX2NhbGwoZXdrVmlldywgInVybCxjaGFuZ2VkIiwgY29uc3RfY2FzdDxjaGFy
Kj4oY2FsbGJhY2tBcmd1bWVudCkpOworCisgICAgLy8gVXBkYXRlIHRoZSB2aWV3J3MgZmF2aWNv
bi4KKyAgICBld2tfdmlld191cGRhdGVfaWNvbihld2tWaWV3KTsKIH0KIAogRWluYV9Cb29sIGV3
a192aWV3X3VybF9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGNvbnN0IGNoYXIqIHVybCkKQEAg
LTk1Myw2ICs5NzcsMTQgQEAgY29uc3QgY2hhciogZXdrX3ZpZXdfdXJsX2dldChjb25zdCBFdmFz
X09iamVjdCogZXdrVmlldykKICAgICByZXR1cm4gcHJpdi0+dXJsOwogfQogCitjb25zdCBjaGFy
ICpld2tfdmlld19pY29uX3VybF9nZXQoY29uc3QgRXZhc19PYmplY3QgKmV3a1ZpZXcpCit7Cisg
ICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIDApOworICAg
IEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIDApOworCisgICAg
cmV0dXJuIHByaXYtPmZhdmljb25VUkw7Cit9CisKIEVpbmFfQm9vbCBld2tfdmlld19yZWxvYWQo
RXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7CiAgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihl
d2tWaWV3LCBzbWFydERhdGEsIGZhbHNlKTsKQEAgLTE1MzcsNiArMTU2OSwyNiBAQCB2b2lkIGV3
a192aWV3X2JhY2tfZm9yd2FyZF9saXN0X2NoYW5nZWQoRXZhc19PYmplY3QqIGV3a1ZpZXcpCiAK
IC8qKgogICogQGludGVybmFsCisgKiBVcGRhdGUgdGhlIHZpZXcncyBmYXZpY29uIGFuZCBlbWl0
cyBhICJpY29uLGNoYW5nZWQiIHNpZ25hbCBpZiBpdCBoYXMKKyAqIGNoYW5nZWQuCisgKgorICog
VGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbmV2ZXIgdGhlIFVSTCBoYXMgY2hhbmdlZCBvciB3
aGVuIHRoZSBpY29uIGZvcgorICogdGhlIGN1cnJlbnQgcGFnZSBVUkwgaGFzIGNoYW5nZWQuCisg
Ki8KK3ZvaWQgZXdrX3ZpZXdfdXBkYXRlX2ljb24oRXZhc19PYmplY3QqIGV3a1ZpZXcpCit7Cisg
ICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEpOworICAgIEVX
S19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYpOworCisgICAgRXdrX0Zh
dmljb25fRGF0YWJhc2UqIGljb25EYXRhYmFzZSA9IGV3a19jb250ZXh0X2Zhdmljb25fZGF0YWJh
c2VfZ2V0KHByaXYtPmNvbnRleHQpOworICAgIEFTU0VSVChpY29uRGF0YWJhc2UpOworCisgICAg
cHJpdi0+ZmF2aWNvblVSTCA9IGV3a19mYXZpY29uX2RhdGFiYXNlX2ljb25fdXJsX2dldChpY29u
RGF0YWJhc2UsIHByaXYtPnVybCk7CisgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2Fs
bChld2tWaWV3LCAiaWNvbixjaGFuZ2VkIiwgMCk7Cit9CisKKy8qKgorICogQGludGVybmFsCiAg
KiBSZXBvcnRzIHRoYXQgYSBuYXZpZ2F0aW9uIHBvbGljeSBkZWNpc2lvbiBzaG91bGQgYmUgdGFr
ZW4uCiAgKgogICogRW1pdHMgc2lnbmFsOiAicG9saWN5LGRlY2lzaW9uLG5hdmlnYXRpb24iLgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuaCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmgKaW5kZXggZTljYmU0
ZS4uMGUwZjJjYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwv
ZXdrX3ZpZXcuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmll
dy5oCkBAIC00Myw2ICs0Myw3IEBACiAgKiAgIHdoZW4gZG9uZSB0byBjb250aW51ZSB3aXRoIHRo
ZSBmb3JtIHN1Ym1pc3Npb24uIElmIHRoZSBsYXN0IHJlZmVyZW5jZSBpcyByZW1vdmVkIG9uIGEK
ICAqICAgI0V3a19Gb3JtX1N1Ym1pc3Npb25fUmVxdWVzdCBhbmQgdGhlIGZvcm0gaGFzIG5vdCBi
ZWVuIHN1Ym1pdHRlZCB5ZXQsCiAgKiAgIGV3a19mb3JtX3N1Ym1pc3Npb25fcmVxdWVzdF9zdWJt
aXQoKSB3aWxsIGJlIGNhbGxlZCBhdXRvbWF0aWNhbGx5LgorICogLSAiaWNvbixjaGFuZ2VkIiwg
dm9pZDogcmVwb3J0cyB0aGF0IHRoZSB2aWV3J3MgZmF2aWNvbiBoYXMgY2hhbmdlZC4KICAqIC0g
ImludGVudCxyZXF1ZXN0LG5ldyIsIEV3a19JbnRlbnQqOiByZXBvcnRzIG5ldyBXZWIgaW50ZW50
IHJlcXVlc3QuCiAgKiAtICJpbnRlbnQsc2VydmljZSxyZWdpc3RlciIsIEV3a19JbnRlbnRfU2Vy
dmljZSo6IHJlcG9ydHMgbmV3IFdlYiBpbnRlbnQgc2VydmljZSByZWdpc3RyYXRpb24uCiAgKiAt
ICJsb2FkLGVycm9yIiwgY29uc3QgRXdrX0Vycm9yKjogcmVwb3J0cyBtYWluIGZyYW1lIGxvYWQg
ZmFpbGVkLgpAQCAtMzU3LDYgKzM1OCwxOCBAQCBFQVBJIEVpbmFfQm9vbCBld2tfdmlld191cmxf
c2V0KEV2YXNfT2JqZWN0ICpvLCBjb25zdCBjaGFyICp1cmwpOwogRUFQSSBjb25zdCBjaGFyICpl
d2tfdmlld191cmxfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0ICpvKTsKIAogLyoqCisgKiBSZXR1cm5z
IHRoZSBjdXJyZW50IGljb24gVVJMIG9mIHZpZXcgb2JqZWN0LgorICoKKyAqIEl0IHJldHVybnMg
YW4gaW50ZXJuYWwgc3RyaW5nIGFuZCBzaG91bGQgbm90CisgKiBiZSBtb2RpZmllZC4gVGhlIHN0
cmluZyBpcyBndWFyYW50ZWVkIHRvIGJlIHN0cmluZ3NoYXJlZC4KKyAqCisgKiBAcGFyYW0gbyB2
aWV3IG9iamVjdCB0byBnZXQgY3VycmVudCBpY29uIFVSTAorICoKKyAqIEByZXR1cm4gY3VycmVu
dCBpY29uIFVSTCBvbiBzdWNjZXNzIG9yIEBjIE5VTEwgaWYgdW5hdmFpbGFibGUgb3Igb24gZmFp
bHVyZQorICovCitFQVBJIGNvbnN0IGNoYXIgKmV3a192aWV3X2ljb25fdXJsX2dldChjb25zdCBF
dmFzX09iamVjdCAqbyk7CisKKy8qKgogICogQXNrcyB0aGUgbWFpbiBmcmFtZSB0byByZWxvYWQg
dGhlIGN1cnJlbnQgZG9jdW1lbnQuCiAgKgogICogQHBhcmFtIG8gdmlldyBvYmplY3QgdG8gcmVs
b2FkIGN1cnJlbnQgZG9jdW1lbnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZWZsL2V3a192aWV3X3ByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZWZsL2V3a192aWV3X3ByaXZhdGUuaAppbmRleCA4ZWM5MWMxLi5iYjkzZjlmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlld19wcml2YXRlLmgK
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXdfcHJpdmF0ZS5o
CkBAIC04NSw2ICs4NSw3IEBAIHZvaWQgZXdrX3ZpZXdfdGV4dF9mb3VuZChFdmFzX09iamVjdCog
ZXdrVmlldywgdW5zaWduZWQgaW50IG1hdGNoQ291bnQpOwogdm9pZCBld2tfdmlld191cmxfdXBk
YXRlKEV2YXNfT2JqZWN0KiBld2tWaWV3KTsKIHZvaWQgZXdrX3ZpZXdfY29udGVudHNfc2l6ZV9j
aGFuZ2VkKGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3LCBjb25zdCBXZWJDb3JlOjpJbnRTaXpl
Jik7CiB2b2lkIGV3a192aWV3X2JhY2tfZm9yd2FyZF9saXN0X2NoYW5nZWQoRXZhc19PYmplY3Qq
IGV3a1ZpZXcpOwordm9pZCBld2tfdmlld191cGRhdGVfaWNvbihFdmFzX09iamVjdCogZXdrVmll
dyk7CiAKIEV2YXNfT2JqZWN0KiBld2tfdmlld19iYXNlX2FkZChFdmFzKiBjYW52YXMsIFdLQ29u
dGV4dFJlZiwgV0tQYWdlR3JvdXBSZWYpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2VmbC90ZXN0cy9yZXNvdXJjZXMvYmxhbmsuaWNvIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9lZmwvdGVzdHMvcmVzb3VyY2VzL2JsYW5rLmljbwpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5lYTg0OGI5OTE2ZTU5MDg0NDEzZmMxZTdhMDkwZGViZjVmNDkxNGRiCkdJVCBiaW5hcnkgcGF0
Y2gKbGl0ZXJhbCAxOTgKcGNtWlF6VTw1KHwwVlhpTGZxe1dSNDJVJj1TT0FDPmZFWGw/MztoNThB
RDB3ZSNRfVJZMVZqSjsKCmxpdGVyYWwgMApIY21WP2QwMDAwMQoKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL3Rlc3RfZXdrMl9jb250ZXh0LmNwcCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL3Rlc3RfZXdrMl9jb250ZXh0
LmNwcAppbmRleCBkZmY0ODUzNC4uM2RmNTc1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9lZmwvdGVzdHMvdGVzdF9ld2syX2NvbnRleHQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL3Rlc3RfZXdrMl9jb250ZXh0LmNwcApA
QCAtNTMsNiArNTMsMTQgQEAgVEVTVF9GKEVXSzJVbml0VGVzdEJhc2UsIGV3a19jb250ZXh0X2Nv
b2tpZV9tYW5hZ2VyX2dldCkKICAgICBBU1NFUlRfRVEoY29va2llTWFuYWdlciwgZXdrX2NvbnRl
eHRfY29va2llX21hbmFnZXJfZ2V0KGNvbnRleHQpKTsKIH0KIAorVEVTVF9GKEVXSzJVbml0VGVz
dEJhc2UsIGV3a19jb250ZXh0X2Zhdmljb25fZGF0YWJhc2VfZ2V0KQoreworICAgIEV3a19Db250
ZXh0KiBjb250ZXh0ID0gZXdrX3ZpZXdfY29udGV4dF9nZXQod2ViVmlldygpKTsKKyAgICBFd2tf
RmF2aWNvbl9EYXRhYmFzZSogZmF2aWNvbkRhdGFiYXNlID0gZXdrX2NvbnRleHRfZmF2aWNvbl9k
YXRhYmFzZV9nZXQoY29udGV4dCk7CisgICAgQVNTRVJUX1RSVUUoZmF2aWNvbkRhdGFiYXNlKTsK
KyAgICBBU1NFUlRfRVEoZmF2aWNvbkRhdGFiYXNlLCBld2tfY29udGV4dF9mYXZpY29uX2RhdGFi
YXNlX2dldChjb250ZXh0KSk7Cit9CisKIHN0YXRpYyB2b2lkIHNjaGVtZVJlcXVlc3RDYWxsYmFj
ayhFd2tfVXJsX1NjaGVtZV9SZXF1ZXN0KiByZXF1ZXN0LCB2b2lkKiB1c2VyRGF0YSkKIHsKICAg
ICBjb25zdCBjaGFyKiBzY2hlbWUgPSBld2tfdXJsX3NjaGVtZV9yZXF1ZXN0X3NjaGVtZV9nZXQo
cmVxdWVzdCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC90
ZXN0cy90ZXN0X2V3azJfZmF2aWNvbl9kYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2VmbC90ZXN0cy90ZXN0X2V3azJfZmF2aWNvbl9kYXRhYmFzZS5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2JhMmQ1ZgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL3Rlc3RfZXdrMl9mYXZpY29u
X2RhdGFiYXNlLmNwcApAQCAtMCwwICsxLDE2NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiVW5pdFRlc3RVdGlscy9FV0syVW5pdFRlc3RC
YXNlLmgiCisjaW5jbHVkZSAiVW5pdFRlc3RVdGlscy9FV0syVW5pdFRlc3RFbnZpcm9ubWVudC5o
IgorI2luY2x1ZGUgIlVuaXRUZXN0VXRpbHMvRVdLMlVuaXRUZXN0U2VydmVyLmgiCisjaW5jbHVk
ZSAiV0tFaW5hU2hhcmVkU3RyaW5nLmgiCisjaW5jbHVkZSA8RVdlYktpdDIuaD4KKyNpbmNsdWRl
IDxFY29yZS5oPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093
blB0ci5oPgorCit1c2luZyBuYW1lc3BhY2UgRVdLMlVuaXRUZXN0OworCitleHRlcm4gRVdLMlVu
aXRUZXN0RW52aXJvbm1lbnQqIGVudmlyb25tZW50OworCitzdGF0aWMgdm9pZCBzZXJ2ZXJDYWxs
YmFjayhTb3VwU2VydmVyKiBodHRwU2VydmVyLCBTb3VwTWVzc2FnZSogbWVzc2FnZSwgY29uc3Qg
Y2hhciogcGF0aCwgR0hhc2hUYWJsZSosIFNvdXBDbGllbnRDb250ZXh0KiwgZ3BvaW50ZXIpCit7
CisgICAgaWYgKG1lc3NhZ2UtPm1ldGhvZCAhPSBTT1VQX01FVEhPRF9HRVQpIHsKKyAgICAgICAg
c291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfTk9UX0lNUExFTUVO
VEVEKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghc3RyY21wKHBhdGgsICIv
ZmF2aWNvbi5pY28iKSkgeworICAgICAgICBDU3RyaW5nIGZhdmljb25QYXRoID0gZW52aXJvbm1l
bnQtPnBhdGhGb3JSZXNvdXJjZSgiYmxhbmsuaWNvIik7CisgICAgICAgIEVpbmFfRmlsZSogZiA9
IGVpbmFfZmlsZV9vcGVuKGZhdmljb25QYXRoLmRhdGEoKSwgZmFsc2UpOworICAgICAgICBpZiAo
IWYpIHsKKyAgICAgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBf
U1RBVFVTX05PVF9GT1VORCk7CisgICAgICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9jb21wbGV0
ZShtZXNzYWdlLT5yZXNwb25zZV9ib2R5KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorCisgICAgICAgIHNpemVfdCBmaWxlU2l6ZSA9IGVpbmFfZmlsZV9zaXplX2dldChmKTsKKwor
ICAgICAgICB2b2lkKiBjb250ZW50cyA9IGVpbmFfZmlsZV9tYXBfYWxsKGYsIEVJTkFfRklMRV9Q
T1BVTEFURSk7CisgICAgICAgIGlmICghY29udGVudHMpIHsKKyAgICAgICAgICAgIHNvdXBfbWVz
c2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX05PVF9GT1VORCk7CisgICAgICAg
ICAgICBzb3VwX21lc3NhZ2VfYm9keV9jb21wbGV0ZShtZXNzYWdlLT5yZXNwb25zZV9ib2R5KTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIHNvdXBfbWVzc2FnZV9i
b2R5X2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9DT1BZLCBjb250
ZW50cywgZmlsZVNpemUpOworICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdl
LCBTT1VQX1NUQVRVU19PSyk7CisgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2NvbXBsZXRlKG1l
c3NhZ2UtPnJlc3BvbnNlX2JvZHkpOworCisgICAgICAgIGVpbmFfZmlsZV9tYXBfZnJlZShmLCBj
b250ZW50cyk7CisgICAgICAgIGVpbmFfZmlsZV9jbG9zZShmKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGNvbnN0IGNoYXIgY29udGVudHNbXSA9ICI8aHRtbD48Ym9keT5mYXZpY29u
IHRlc3Q8L2JvZHk+PC9odG1sPiI7CisgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2Fn
ZSwgU09VUF9TVEFUVVNfT0spOworICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtZXNzYWdl
LT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9DT1BZLCBjb250ZW50cywgc3RybGVuKGNvbnRl
bnRzKSk7CisgICAgc291cF9tZXNzYWdlX2JvZHlfY29tcGxldGUobWVzc2FnZS0+cmVzcG9uc2Vf
Ym9keSk7Cit9CisKK3N0YXRpYyB2b2lkIG9uSWNvbkNoYW5nZWQodm9pZCogdXNlckRhdGEsIEV2
YXNfT2JqZWN0Kiwgdm9pZCogZXZlbnRJbmZvKQoreworICAgIGJvb2wqIGljb25DaGFuZ2VkID0g
c3RhdGljX2Nhc3Q8Ym9vbCo+KHVzZXJEYXRhKTsKKyAgICAqaWNvbkNoYW5nZWQgPSB0cnVlOwor
fQorCitURVNUX0YoRVdLMlVuaXRUZXN0QmFzZSwgZXdrX2Zhdmljb25fZGF0YWJhc2VfdXJsX2dl
dCkKK3sKKyAgICBPd25QdHI8RVdLMlVuaXRUZXN0U2VydmVyPiBodHRwU2VydmVyID0gYWRvcHRQ
dHIobmV3IEVXSzJVbml0VGVzdFNlcnZlcik7CisgICAgaHR0cFNlcnZlci0+cnVuKHNlcnZlckNh
bGxiYWNrKTsKKworICAgIGJvb2wgaWNvbkNoYW5nZWQgPSBmYWxzZTsKKyAgICBldmFzX29iamVj
dF9zbWFydF9jYWxsYmFja19hZGQod2ViVmlldygpLCAiaWNvbixjaGFuZ2VkIiwgb25JY29uQ2hh
bmdlZCwgJmljb25DaGFuZ2VkKTsKKworICAgIC8vIFdlIG5lZWQgdG8gbG9hZCB0aGUgcGFnZSBm
aXJzdCB0byBlbnN1cmUgdGhlIGljb24gZGF0YSB3aWxsIGJlCisgICAgLy8gaW4gdGhlIGRhdGFi
YXNlIGluIGNhc2UgdGhlcmUncyBhbiBhc3NvY2lhdGVkIGZhdmljb24uCisgICAgQVNTRVJUX1RS
VUUobG9hZFVybFN5bmMoaHR0cFNlcnZlci0+Z2V0VVJMRm9yUGF0aCgiLyIpLmRhdGEoKSkpOwor
CisgICAgd2hpbGUgKCFpY29uQ2hhbmdlZCkKKyAgICAgICAgZWNvcmVfbWFpbl9sb29wX2l0ZXJh
dGUoKTsKKyAgICBBU1NFUlRfVFJVRShpY29uQ2hhbmdlZCk7CisgICAgZXZhc19vYmplY3Rfc21h
cnRfY2FsbGJhY2tfZGVsKHdlYlZpZXcoKSwgImljb24sY2hhbmdlZCIsIG9uSWNvbkNoYW5nZWQp
OworCisgICAgLy8gQ2hlY2sgdGhlIEFQSSByZXRyaWV2aW5nIGEgZmF2aWNvbiBVUkwuCisgICAg
RXdrX0NvbnRleHQqIGNvbnRleHQgPSBld2tfdmlld19jb250ZXh0X2dldCh3ZWJWaWV3KCkpOwor
ICAgIEV3a19GYXZpY29uX0RhdGFiYXNlKiBmYXZpY29uRGF0YWJhc2UgPSBld2tfY29udGV4dF9m
YXZpY29uX2RhdGFiYXNlX2dldChjb250ZXh0KTsKKyAgICBBU1NFUlRfVFJVRShmYXZpY29uRGF0
YWJhc2UpOworCisgICAgQ1N0cmluZyBleHBlY3RlZEZhdmljb25VUkwgPSBodHRwU2VydmVyLT5n
ZXRVUkxGb3JQYXRoKCIvZmF2aWNvbi5pY28iKTsKKyAgICBXS0VpbmFTaGFyZWRTdHJpbmcgaWNv
blVSTCA9IGV3a19mYXZpY29uX2RhdGFiYXNlX2ljb25fdXJsX2dldChmYXZpY29uRGF0YWJhc2Us
IGV3a192aWV3X3VybF9nZXQod2ViVmlldygpKSk7CisgICAgRVhQRUNUX1NUUkVRKGV4cGVjdGVk
RmF2aWNvblVSTC5kYXRhKCksIGljb25VUkwpOworCisgICAgY29uc3QgY2hhciogdmlld0ljb25V
UkwgPSBld2tfdmlld19pY29uX3VybF9nZXQod2ViVmlldygpKTsKKyAgICBFWFBFQ1RfU1RSRVEo
ZXhwZWN0ZWRGYXZpY29uVVJMLmRhdGEoKSwgdmlld0ljb25VUkwpOworfQorCitzdGF0aWMgdm9p
ZCBvbkljb25EYXRhUmVhZHkoY29uc3QgY2hhciogcGFnZV91cmwsIEV2YXNfT2JqZWN0KiBpY29u
LCB2b2lkKiBldmVudF9pbmZvKQoreworICAgIEV2YXNfT2JqZWN0KiogcmV0dXJuSWNvbiA9IHN0
YXRpY19jYXN0PEV2YXNfT2JqZWN0Kio+KGV2ZW50X2luZm8pOworICAgIGlmIChpY29uKQorICAg
ICAgICBldmFzX29iamVjdF9yZWYoaWNvbik7CisgICAgKnJldHVybkljb24gPSBpY29uOworfQor
CitzdHJ1Y3QgSWNvblJlcXVlc3REYXRhIHsKKyAgICBFdmFzX09iamVjdCogdmlldzsKKyAgICBF
dmFzX09iamVjdCogaWNvbjsKK307CisKK3N0YXRpYyB2b2lkIHJlcXVlc3RGYXZpY29uRGF0YSh2
b2lkKiB1c2VyRGF0YSwgRXZhc19PYmplY3QqLCB2b2lkKiBldmVudEluZm8pCit7CisgICAgSWNv
blJlcXVlc3REYXRhKiBkYXRhID0gc3RhdGljX2Nhc3Q8SWNvblJlcXVlc3REYXRhKj4odXNlckRh
dGEpOworCisgICAgLy8gQ2hlY2sgdGhlIEFQSSByZXRyaWV2aW5nIGEgdmFsaWQgZmF2aWNvbi4K
KyAgICBFd2tfQ29udGV4dCogY29udGV4dCA9IGV3a192aWV3X2NvbnRleHRfZ2V0KGRhdGEtPnZp
ZXcpOworICAgIEV3a19GYXZpY29uX0RhdGFiYXNlKiBmYXZpY29uRGF0YWJhc2UgPSBld2tfY29u
dGV4dF9mYXZpY29uX2RhdGFiYXNlX2dldChjb250ZXh0KTsKKyAgICBBU1NFUlRfVFJVRShmYXZp
Y29uRGF0YWJhc2UpOworCisgICAgRXZhcyogZXZhcyA9IGV2YXNfb2JqZWN0X2V2YXNfZ2V0KGRh
dGEtPnZpZXcpOworICAgIEFTU0VSVF9UUlVFKGV3a19mYXZpY29uX2RhdGFiYXNlX2FzeW5jX2lj
b25fZ2V0KGZhdmljb25EYXRhYmFzZSwgZXdrX3ZpZXdfdXJsX2dldChkYXRhLT52aWV3KSwgZXZh
cywgb25JY29uRGF0YVJlYWR5LCAmZGF0YS0+aWNvbikpOworfQorCitURVNUX0YoRVdLMlVuaXRU
ZXN0QmFzZSwgZXdrX2Zhdmljb25fZGF0YWJhc2VfYXN5bmNfaWNvbl9nZXQpCit7CisgICAgT3du
UHRyPEVXSzJVbml0VGVzdFNlcnZlcj4gaHR0cFNlcnZlciA9IGFkb3B0UHRyKG5ldyBFV0syVW5p
dFRlc3RTZXJ2ZXIpOworICAgIGh0dHBTZXJ2ZXItPnJ1bihzZXJ2ZXJDYWxsYmFjayk7CisKKyAg
ICBJY29uUmVxdWVzdERhdGEgZGF0YSA9IHsgd2ViVmlldygpLCAwIH07CisgICAgZXZhc19vYmpl
Y3Rfc21hcnRfY2FsbGJhY2tfYWRkKHdlYlZpZXcoKSwgImljb24sY2hhbmdlZCIsIHJlcXVlc3RG
YXZpY29uRGF0YSwgJmRhdGEpOworCisgICAgLy8gV2UgbmVlZCB0byBsb2FkIHRoZSBwYWdlIGZp
cnN0IHRvIGVuc3VyZSB0aGUgaWNvbiBkYXRhIHdpbGwgYmUKKyAgICAvLyBpbiB0aGUgZGF0YWJh
c2UgaW4gY2FzZSB0aGVyZSdzIGFuIGFzc29jaWF0ZWQgZmF2aWNvbi4KKyAgICBBU1NFUlRfVFJV
RShsb2FkVXJsU3luYyhodHRwU2VydmVyLT5nZXRVUkxGb3JQYXRoKCIvIikuZGF0YSgpKSk7CisK
KyAgICB3aGlsZSAoIWRhdGEuaWNvbikKKyAgICAgICAgZWNvcmVfbWFpbl9sb29wX2l0ZXJhdGUo
KTsKKyAgICBBU1NFUlRfVFJVRShkYXRhLmljb24pOworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2Nh
bGxiYWNrX2RlbCh3ZWJWaWV3KCksICJpY29uLGNoYW5nZWQiLCByZXF1ZXN0RmF2aWNvbkRhdGEp
OworCisgICAgLy8gSXQgaXMgYSAxNngxNiBmYXZpY29uLgorICAgIGludCB3aWR0aCwgaGVpZ2h0
OworICAgIGV2YXNfb2JqZWN0X2ltYWdlX3NpemVfZ2V0KGRhdGEuaWNvbiwgJndpZHRoLCAmaGVp
Z2h0KTsKKyAgICBFWFBFQ1RfRVEoMTYsIHdpZHRoKTsKKyAgICBFWFBFQ1RfRVEoMTYsIGhlaWdo
dCk7CisKKyAgICBldmFzX29iamVjdF91bnJlZihkYXRhLmljb24pOworfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJDb250ZXh0RWZsLmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViQ29udGV4dEVmbC5jcHAKaW5kZXggOGE0NzlkMi4uNWFm
ZDc5ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJDb250ZXh0
RWZsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYkNvbnRleHRFZmwu
Y3BwCkBAIC01NCw4ICs1NCw3IEBAIFN0cmluZyBXZWJDb250ZXh0OjpwbGF0Zm9ybURlZmF1bHRE
YXRhYmFzZURpcmVjdG9yeSgpIGNvbnN0CiAKIFN0cmluZyBXZWJDb250ZXh0OjpwbGF0Zm9ybURl
ZmF1bHRJY29uRGF0YWJhc2VQYXRoKCkgY29uc3QKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwot
ICAgIHJldHVybiAiIjsKKyAgICByZXR1cm4gU3RyaW5nOjpmcm9tVVRGOChlZnJlZXRfZGF0YV9o
b21lX2dldCgpKSArICIvV2ViS2l0RWZsL0ljb25EYXRhYmFzZSI7CiB9CiAKIFN0cmluZyBXZWJD
b250ZXh0OjpwbGF0Zm9ybURlZmF1bHRMb2NhbFN0b3JhZ2VEaXJlY3RvcnkoKSBjb25zdAo=
</data>
<flag name="review"
          id="181683"
          type_id="1"
          status="+"
          setter="kenneth"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>168654</attachid>
            <date>2012-10-15 02:17:42 -0700</date>
            <delta_ts>2012-10-15 12:44:11 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>99087_favicons_api2.patch</filename>
            <type>text/plain</type>
            <size>59347</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA2MTI3YzM1Li5jZGFhNzdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjcg
QEAKKzIwMTItMTAtMTUgIENocmlzdG9waGUgRHVtZXogIDxjaHJpc3RvcGhlLmR1bWV6QGludGVs
LmNvbT4KKworICAgICAgICBbRUZMXVtXSzJdIEltcGxlbWVudCBGYXZpY29ucyBBUEkKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk5MDg3CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgS2VubmV0aCBSb2hkZSBDaHJpc3RpYW5zZW4uCisKKyAgICAgICAgTW92
ZWQgZXdrX3V0aWwgZnJvbSBXZWJLaXQgdG8gV2ViQ29yZSBhbmQgcmVuYW1lIGl0CisgICAgICAg
IHRvIENhaXJvVXRpbGl0eUVmbCBzbyB0aGF0IHRoZSBjb2RlIGNhbiBiZSBzaGFyZWQKKyAgICAg
ICAgYmV0d2VlbiBXZWJLaXQxIGFuZCBXZWJLaXQyLiBTb21lIHJlbGF0ZWQgdXRpbGl0eQorICAg
ICAgICBjb2RlIHdhcyBhbHNvIG1vdmVkIGZyb20gUmVuZGVyVGhlbWVFZmwgdG8KKyAgICAgICAg
Q2Fpcm9VdGlsaXR5RWZsLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgbm8gYmVoYXZpb3IgY2hh
bmdlLgorCisgICAgICAgICogUGxhdGZvcm1FZmwuY21ha2U6CisgICAgICAgICogcGxhdGZvcm0v
ZWZsL1JlbmRlclRoZW1lRWZsLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9lZmwv
Q2Fpcm9VdGlsaXRpZXNFZmwuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYktpdC9lZmwvZXdr
L2V3a191dGlsLmNwcC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6ZXZh
c09iamVjdEZyb21DYWlyb0ltYWdlU3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVT
dXJmYWNlRm9yQmFja2luZ1N0b3JlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9lZmwv
Q2Fpcm9VdGlsaXRpZXNFZmwuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvZWZsL2V3ay9l
d2tfdXRpbF9wcml2YXRlLmguCisgICAgICAgIChXZWJDb3JlKToKKwogMjAxMi0xMC0xMiAgSWx5
YSBUaWtob25vdnNreSAgPGxvaXNsb0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgV2ViIEluc3Bl
Y3RvcjogTk1JIHJlbW92ZSBoYW5kIG1hZGUgb2JqZWN0IGJ1aWxkZXJzIHdpdGggYXV0b21hdGlj
IGJ1aWxkZXIuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFrZSBi
L1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlCmluZGV4IDJhMTdjOWIuLmE2ODA3MmYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlCkBAIC01Miw2ICs1Miw3IEBAIExJU1QoQVBQRU5E
IFdlYkNvcmVfU09VUkNFUwogICBwbGF0Zm9ybS9lZmwvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcAog
ICBwbGF0Zm9ybS9lZmwvV2lkZ2V0RWZsLmNwcAogICBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNv
dXJjZS5jcHAKKyAgcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0NhaXJvVXRpbGl0aWVzRWZsLmNwcAog
ICBwbGF0Zm9ybS9ncmFwaGljcy9lZmwvSWNvbkVmbC5jcHAKICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
ZWZsL0ltYWdlRWZsLmNwcAogICBwbGF0Zm9ybS9ncmFwaGljcy9lZmwvSW50UG9pbnRFZmwuY3Bw
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvUmVuZGVyVGhlbWVFZmwu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZWZsL1JlbmRlclRoZW1lRWZsLmNwcAppbmRl
eCAyNmEwMzg2Li43MjcyYjAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9l
ZmwvUmVuZGVyVGhlbWVFZmwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VmbC9S
ZW5kZXJUaGVtZUVmbC5jcHAKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJSZW5kZXJUaGVt
ZUVmbC5oIgogCiAjaW5jbHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgorI2luY2x1ZGUgIkNhaXJv
VXRpbGl0aWVzRWZsLmgiCiAjaW5jbHVkZSAiRm9udERlc2NyaXB0aW9uLmgiCiAjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgpAQCAtMTYy
LDI3ICsxNjMsNiBAQCB2b2lkIFJlbmRlclRoZW1lRWZsOjphZGp1c3RTaXplQ29uc3RyYWludHMo
UmVuZGVyU3R5bGUqIHN0eWxlLCBGb3JtVHlwZSB0eXBlKSBjbwogICAgIHN0eWxlLT5zZXRQYWRk
aW5nUmlnaHQoZGVzYy0+cGFkZGluZy5yaWdodCgpKTsKIH0KIAotc3RhdGljIFBhc3NSZWZQdHI8
Y2Fpcm9fc3VyZmFjZV90PiBjcmVhdGVTdXJmYWNlRm9yQmFja2luZ1N0b3JlKEVjb3JlX0V2YXMq
IGVlKQotewotICAgIEFTU0VSVChlZSk7Ci0KLSAgICBpbnQgd2lkdGg7Ci0gICAgaW50IGhlaWdo
dDsKLSAgICBlY29yZV9ldmFzX2dlb21ldHJ5X2dldChlZSwgMCwgMCwgJndpZHRoLCAmaGVpZ2h0
KTsKLSAgICBBU1NFUlQod2lkdGggPiAwICYmIGhlaWdodCA+IDApOwotCi0gICAgdW5zaWduZWQg
Y2hhciogYnVmZmVyID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KGNvbnN0X2Nhc3Q8dm9p
ZCo+KGVjb3JlX2V2YXNfYnVmZmVyX3BpeGVsc19nZXQoZWUpKSk7Ci0gICAgUmVmUHRyPGNhaXJv
X3N1cmZhY2VfdD4gc3VyZmFjZSA9IGFkb3B0UmVmKGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRl
X2Zvcl9kYXRhKGJ1ZmZlciwgQ0FJUk9fRk9STUFUX0FSR0IzMiwgd2lkdGgsIGhlaWdodCwgd2lk
dGggKiA0KSk7Ci0KLSAgICBjYWlyb19zdGF0dXNfdCBzdGF0dXMgPSBjYWlyb19zdXJmYWNlX3N0
YXR1cyhzdXJmYWNlLmdldCgpKTsKLSAgICBpZiAoc3RhdHVzICE9IENBSVJPX1NUQVRVU19TVUND
RVNTKSB7Ci0gICAgICAgIEVJTkFfTE9HX0VSUigiQ291bGQgbm90IGNyZWF0ZSBjYWlybyBzdXJm
YWNlOiAlcyIsIGNhaXJvX3N0YXR1c190b19zdHJpbmcoc3RhdHVzKSk7Ci0gICAgICAgIHJldHVy
biAwOwotICAgIH0KLQotICAgIHJldHVybiBzdXJmYWNlOwotfQotCiBzdGF0aWMgYm9vbCBpc0Zv
cm1FbGVtZW50VG9vTGFyZ2VUb0Rpc3BsYXkoY29uc3QgSW50U2l6ZSYgZWxlbWVudFNpemUpCiB7
CiAgICAgLy8gVGhpcyBsaW1pdCBvZiAyMDAwMCBwaXhlbHMgaXMgaGFyZGNvZGVkIGluc2lkZSBl
ZGplIC0tIGFueXRoaW5nIGFib3ZlIHRoaXMgc2l6ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0NhaXJvVXRpbGl0aWVzRWZsLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9DYWlyb1V0aWxpdGllc0VmbC5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDcyMzI0MQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9DYWlyb1V0aWxpdGllc0VmbC5j
cHAKQEAgLTAsMCArMSwxMDkgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgUHJv
RlVTSU9OIGVtYmVkZGVkIHN5c3RlbXMKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBTYW1z
dW5nIEVsZWN0cm9uaWNzCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNhaXJv
VXRpbGl0aWVzRWZsLmgiCisKKyNpbmNsdWRlICJSZWZQdHJDYWlyby5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK1Bhc3NSZWZQdHI8RXZhc19PYmplY3Q+IGV2YXNPYmplY3RGcm9tQ2Fpcm9J
bWFnZVN1cmZhY2UoRXZhcyogY2FudmFzLCBjYWlyb19zdXJmYWNlX3QqIHN1cmZhY2UpCit7Cisg
ICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGNhbnZhcywgMCk7CisgICAgRUlOQV9T
QUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHN1cmZhY2UsIDApOworCisgICAgY2Fpcm9fc3RhdHVz
X3Qgc3RhdHVzID0gY2Fpcm9fc3VyZmFjZV9zdGF0dXMoc3VyZmFjZSk7CisgICAgaWYgKHN0YXR1
cyAhPSBDQUlST19TVEFUVVNfU1VDQ0VTUykgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImNh
aXJvIHN1cmZhY2UgaXMgaW52YWxpZDogJXMiLCBjYWlyb19zdGF0dXNfdG9fc3RyaW5nKHN0YXR1
cykpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBjYWlyb19zdXJmYWNlX3R5cGVf
dCB0eXBlID0gY2Fpcm9fc3VyZmFjZV9nZXRfdHlwZShzdXJmYWNlKTsKKyAgICBpZiAodHlwZSAh
PSBDQUlST19TVVJGQUNFX1RZUEVfSU1BR0UpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJ1
bmtub3duIHN1cmZhY2UgdHlwZSAlZCwgcmVxdWlyZWQgJWQgKENBSVJPX1NVUkZBQ0VfVFlQRV9J
TUFHRSkuIiwKKyAgICAgICAgICAgIHR5cGUsIENBSVJPX1NVUkZBQ0VfVFlQRV9JTUFHRSk7Cisg
ICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGNhaXJvX2Zvcm1hdF90IGZvcm1hdCA9IGNh
aXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2Zvcm1hdChzdXJmYWNlKTsKKyAgICBpZiAoZm9ybWF0ICE9
IENBSVJPX0ZPUk1BVF9BUkdCMzIgJiYgZm9ybWF0ICE9IENBSVJPX0ZPUk1BVF9SR0IyNCkgewor
ICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInVua25vd24gc3VyZmFjZSBmb3JtYXQgJWQsIGV4cGVj
dGVkICVkIG9yICVkLiIsCisgICAgICAgICAgICBmb3JtYXQsIENBSVJPX0ZPUk1BVF9BUkdCMzIs
IENBSVJPX0ZPUk1BVF9SR0IyNCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGlu
dCB3aWR0aCA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3dpZHRoKHN1cmZhY2UpOworICAgIGlu
dCBoZWlnaHQgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9oZWlnaHQoc3VyZmFjZSk7CisgICAg
aW50IHN0cmlkZSA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3N0cmlkZShzdXJmYWNlKTsKKyAg
ICBpZiAod2lkdGggPD0gMCB8fCBoZWlnaHQgPD0gMCB8fCBzdHJpZGUgPD0gMCkgeworICAgICAg
ICBmcHJpbnRmKHN0ZGVyciwgImludmFsaWQgaW1hZ2Ugc2l6ZSAlZHglZCwgc3RyaWRlPSVkIiwg
d2lkdGgsIGhlaWdodCwgc3RyaWRlKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAg
dm9pZCogZGF0YSA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEoc3VyZmFjZSk7CisgICAg
aWYgKCFkYXRhKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiY291bGQgbm90IGdldCBzb3Vy
Y2UgZGF0YS4iKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgUmVmUHRyPEV2YXNf
T2JqZWN0PiBpbWFnZSA9IGFkb3B0UmVmKGV2YXNfb2JqZWN0X2ltYWdlX2ZpbGxlZF9hZGQoY2Fu
dmFzKSk7CisgICAgaWYgKCFpbWFnZSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImNvdWxk
IG5vdCBhZGQgaW1hZ2UgdG8gY2FudmFzLiIpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisK
KyAgICBldmFzX29iamVjdF9pbWFnZV9jb2xvcnNwYWNlX3NldChpbWFnZS5nZXQoKSwgRVZBU19D
T0xPUlNQQUNFX0FSR0I4ODg4KTsKKyAgICBldmFzX29iamVjdF9pbWFnZV9zaXplX3NldChpbWFn
ZS5nZXQoKSwgd2lkdGgsIGhlaWdodCk7CisgICAgZXZhc19vYmplY3RfaW1hZ2VfYWxwaGFfc2V0
KGltYWdlLmdldCgpLCBmb3JtYXQgPT0gQ0FJUk9fRk9STUFUX0FSR0IzMik7CisKKyAgICBpZiAo
ZXZhc19vYmplY3RfaW1hZ2Vfc3RyaWRlX2dldChpbWFnZS5nZXQoKSkgIT0gc3RyaWRlKSB7Cisg
ICAgICAgIGZwcmludGYoc3RkZXJyLCAiZXZhcycgc3RyaWRlICVkIGRpdmVyZ2VzIGZyb20gY2Fp
cm8ncyAlZC4iLAorICAgICAgICAgICAgZXZhc19vYmplY3RfaW1hZ2Vfc3RyaWRlX2dldChpbWFn
ZS5nZXQoKSksIHN0cmlkZSk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGV2YXNf
b2JqZWN0X2ltYWdlX2RhdGFfY29weV9zZXQoaW1hZ2UuZ2V0KCksIGRhdGEpOworCisgICAgcmV0
dXJuIGltYWdlLnJlbGVhc2UoKTsKK30KKworUGFzc1JlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IGNy
ZWF0ZVN1cmZhY2VGb3JCYWNraW5nU3RvcmUoRWNvcmVfRXZhcyogZWUpCit7CisgICAgQVNTRVJU
KGVlKTsKKworICAgIGludCB3aWR0aDsKKyAgICBpbnQgaGVpZ2h0OworICAgIGVjb3JlX2V2YXNf
Z2VvbWV0cnlfZ2V0KGVlLCAwLCAwLCAmd2lkdGgsICZoZWlnaHQpOworICAgIEFTU0VSVCh3aWR0
aCA+IDAgJiYgaGVpZ2h0ID4gMCk7CisKKyAgICB1bnNpZ25lZCBjaGFyKiBidWZmZXIgPSBzdGF0
aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4oY29uc3RfY2FzdDx2b2lkKj4oZWNvcmVfZXZhc19idWZm
ZXJfcGl4ZWxzX2dldChlZSkpKTsKKyAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBzdXJmYWNl
ID0gYWRvcHRSZWYoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGVfZm9yX2RhdGEoYnVmZmVyLCBD
QUlST19GT1JNQVRfQVJHQjMyLCB3aWR0aCwgaGVpZ2h0LCB3aWR0aCAqIDQpKTsKKworICAgIGNh
aXJvX3N0YXR1c190IHN0YXR1cyA9IGNhaXJvX3N1cmZhY2Vfc3RhdHVzKHN1cmZhY2UuZ2V0KCkp
OworICAgIGlmIChzdGF0dXMgIT0gQ0FJUk9fU1RBVFVTX1NVQ0NFU1MpIHsKKyAgICAgICAgRUlO
QV9MT0dfRVJSKCJDb3VsZCBub3QgY3JlYXRlIGNhaXJvIHN1cmZhY2U6ICVzIiwgY2Fpcm9fc3Rh
dHVzX3RvX3N0cmluZyhzdGF0dXMpKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAg
cmV0dXJuIHN1cmZhY2U7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2VmbC9DYWlyb1V0aWxpdGllc0VmbC5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZWZsL0NhaXJvVXRpbGl0aWVzRWZsLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uYTVjZDJlMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2VmbC9DYWlyb1V0aWxpdGllc0VmbC5oCkBAIC0wLDAgKzEs
MzcgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgUHJvRlVTSU9OIGVtYmVkZGVk
IHN5c3RlbXMKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNz
CisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
Ki8KKworI2lmbmRlZiBDYWlyb1V0aWxpdGllc0VmbF9oCisjZGVmaW5lIENhaXJvVXRpbGl0aWVz
RWZsX2gKKworI2luY2x1ZGUgPEVjb3JlX0V2YXMuaD4KKyNpbmNsdWRlIDxFdmFzLmg+CisjaW5j
bHVkZSA8Y2Fpcm8uaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0
Zi9lZmwvUmVmUHRyRWZsLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGFzc1JlZlB0cjxF
dmFzX09iamVjdD4gZXZhc09iamVjdEZyb21DYWlyb0ltYWdlU3VyZmFjZShFdmFzKiBjYW52YXMs
IGNhaXJvX3N1cmZhY2VfdCopOworUGFzc1JlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IGNyZWF0ZVN1
cmZhY2VGb3JCYWNraW5nU3RvcmUoRWNvcmVfRXZhcyogZWUpOworCit9CisKKyNlbmRpZiAvLyBD
YWlyb1V0aWxpdGllc0VmbF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBi
L1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGNmMzY5ODkuLmM0MzM3MjggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMTUgQEAKKzIwMTItMTAtMTUgIENocmlzdG9waGUgRHVtZXogIDxjaHJpc3Rv
cGhlLmR1bWV6QGludGVsLmNvbT4KKworICAgICAgICBbRUZMXVtXSzJdIEltcGxlbWVudCBGYXZp
Y29ucyBBUEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTk5MDg3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgS2VubmV0aCBSb2hkZSBDaHJpc3RpYW5zZW4u
CisKKyAgICAgICAgUmVtb3ZlIGV3a191dGlsLmNwcCBmcm9tIFBsYXRmb3JtRWZsLmNtYWtlIG5v
dyB0aGF0IGl0cworICAgICAgICBjb2RlIGhhcyBiZWVuIG1vdmVkIHRvIFdlYkNvcmUgdG8gYmUg
cmV1c2VkIGluIFdLMi4KKworICAgICAgICAqIFBsYXRmb3JtRWZsLmNtYWtlOgorCiAyMDEyLTEw
LTEzICBKYWtvYiBQZXRzb3ZpdHMgIDxqcGV0c292aXRzQHJpbS5jb20+CiAKICAgICAgICAgW0Js
YWNrQmVycnldIEZldGNoIGJsaXQgcmVjdHMgZnJvbSBhIHZpZXdwb3J0IGFjY2Vzc29yCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtRWZsLmNtYWtlIGIvU291cmNlL1dlYktpdC9Q
bGF0Zm9ybUVmbC5jbWFrZQppbmRleCBmOWI4ODU2Li40MWVlOTQxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1BsYXRmb3JtRWZsLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1F
ZmwuY21ha2UKQEAgLTEyNCw3ICsxMjQsNiBAQCBMSVNUKEFQUEVORCBXZWJLaXRfU09VUkNFUwog
ICAgIGVmbC9ld2svZXdrX3RpbGVkX21hdHJpeC5jcHAKICAgICBlZmwvZXdrL2V3a190aWxlZF9t
b2RlbC5jcHAKICAgICBlZmwvZXdrL2V3a190b3VjaF9ldmVudC5jcHAKLSAgICBlZmwvZXdrL2V3
a191dGlsLmNwcAogICAgIGVmbC9ld2svZXdrX3ZpZXcuY3BwCiAgICAgZWZsL2V3ay9ld2tfdmll
d19zaW5nbGUuY3BwCiAgICAgZWZsL2V3ay9ld2tfdmlld190aWxlZC5jcHAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvZWZsL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvZWZsL0NoYW5nZUxv
ZwppbmRleCBlYWEyMzE2Li4xODY3NDViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2VmbC9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9lZmwvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTgg
QEAKKzIwMTItMTAtMTUgIENocmlzdG9waGUgRHVtZXogIDxjaHJpc3RvcGhlLmR1bWV6QGludGVs
LmNvbT4KKworICAgICAgICBbRUZMXVtXSzJdIEltcGxlbWVudCBGYXZpY29ucyBBUEkKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk5MDg3CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgS2VubmV0aCBSb2hkZSBDaHJpc3RpYW5zZW4uCisKKyAgICAgICAgUmVt
b3ZlIGV3a191dGlsIG5vdyB0aGF0IGl0cyBjb2RlIGhhcyBiZWVuIG1vdmVkCisgICAgICAgIHRv
IENhaXJvVXRpbGl0aWVzRWZsIGluIFdlYkNvcmUuCisKKyAgICAgICAgKiBld2svZXdrX2hpc3Rv
cnkuY3BwOgorICAgICAgICAoZXdrX2hpc3RvcnlfaXRlbV9pY29uX29iamVjdF9hZGQpOgorICAg
ICAgICAqIGV3ay9ld2tfc2V0dGluZ3MuY3BwOgorICAgICAgICAoZXdrX3NldHRpbmdzX2ljb25f
ZGF0YWJhc2VfaWNvbl9vYmplY3RfZ2V0KToKKwogMjAxMi0xMC0xNCAgU2FtIFdlaW5pZyAgPHNh
bUB3ZWJraXQub3JnPgogCiAgICAgICAgIE1ha2UgVXNlclNjcmlwdCBhbmQgVXNlclN0eWxlU2hl
ZXQgdmFsdWUgb2JqZWN0cyB0aGF0IGFyZSBjb3B5YWJsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9lZmwvZXdrL2V3a19oaXN0b3J5LmNwcCBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tf
aGlzdG9yeS5jcHAKaW5kZXggMGRhZTAzZC4uNDljM2ExYSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9lZmwvZXdrL2V3a19oaXN0b3J5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2sv
ZXdrX2hpc3RvcnkuY3BwCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSAiZXdrX2hpc3Rvcnku
aCIKIAogI2luY2x1ZGUgIkJhY2tGb3J3YXJkTGlzdEltcGwuaCIKKyNpbmNsdWRlICJDYWlyb1V0
aWxpdGllc0VmbC5oIgogI2luY2x1ZGUgIkhpc3RvcnlJdGVtLmgiCiAjaW5jbHVkZSAiSWNvbkRh
dGFiYXNlQmFzZS5oIgogI2luY2x1ZGUgIkltYWdlLmgiCkBAIC0zMCw3ICszMSw2IEBACiAjaW5j
bHVkZSAiUGFnZUdyb3VwLmgiCiAjaW5jbHVkZSAiZXdrX2hpc3RvcnlfcHJpdmF0ZS5oIgogI2lu
Y2x1ZGUgImV3a19wcml2YXRlLmgiCi0jaW5jbHVkZSAiZXdrX3V0aWxfcHJpdmF0ZS5oIgogI2lu
Y2x1ZGUgPEVpbmEuaD4KICNpbmNsdWRlIDxlaW5hX3NhZmV0eV9jaGVja3MuaD4KICNpbmNsdWRl
IDx3dGYvdGV4dC9DU3RyaW5nLmg+CkBAIC0zNTUsNyArMzU1LDcgQEAgRXZhc19PYmplY3QqIGV3
a19oaXN0b3J5X2l0ZW1faWNvbl9vYmplY3RfYWRkKGNvbnN0IEV3a19IaXN0b3J5X0l0ZW0qIGl0
ZW0sIEV2YXMKICAgICB9CiAKICAgICBjYWlyb19zdXJmYWNlX3QqIHN1cmZhY2UgPSBpY29uLT5z
dXJmYWNlKCk7Ci0gICAgcmV0dXJuIHN1cmZhY2UgPyBld2tfdXRpbF9pbWFnZV9mcm9tX2NhaXJv
X3N1cmZhY2VfYWRkKGNhbnZhcywgc3VyZmFjZSkgOiAwOworICAgIHJldHVybiBzdXJmYWNlID8g
V2ViQ29yZTo6ZXZhc09iamVjdEZyb21DYWlyb0ltYWdlU3VyZmFjZShjYW52YXMsIHN1cmZhY2Up
LmxlYWtSZWYoKSA6IDA7CiB9CiAKIEVpbmFfQm9vbCBld2tfaGlzdG9yeV9pdGVtX3BhZ2VfY2Fj
aGVfZXhpc3RzKGNvbnN0IEV3a19IaXN0b3J5X0l0ZW0qIGl0ZW0pCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2VmbC9ld2svZXdrX3NldHRpbmdzLmNwcCBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3
ay9ld2tfc2V0dGluZ3MuY3BwCmluZGV4IGYxMDUyM2QuLjk2Zjg5ZmYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfc2V0dGluZ3MuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
ZWZsL2V3ay9ld2tfc2V0dGluZ3MuY3BwCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5jbHVkZSAiZXdr
X3NldHRpbmdzLmgiCiAKICNpbmNsdWRlICJBcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5oIgorI2lu
Y2x1ZGUgIkNhaXJvVXRpbGl0aWVzRWZsLmgiCiAjaW5jbHVkZSAiQ3Jvc3NPcmlnaW5QcmVmbGln
aHRSZXN1bHRDYWNoZS5oIgogI2luY2x1ZGUgIkRhdGFiYXNlVHJhY2tlci5oIgogI2luY2x1ZGUg
IkZvbnRDYWNoZS5oIgpAQCAtMzgsNyArMzksNiBAQAogI2luY2x1ZGUgIlN0b3JhZ2VUcmFja2Vy
LmgiCiAjaW5jbHVkZSAiV2ViS2l0VmVyc2lvbi5oIgogI2luY2x1ZGUgImV3a19wcml2YXRlLmgi
Ci0jaW5jbHVkZSAiZXdrX3V0aWxfcHJpdmF0ZS5oIgogI2luY2x1ZGUgPEVpbmEuaD4KICNpbmNs
dWRlIDxlaW5hX3NhZmV0eV9jaGVja3MuaD4KICNpbmNsdWRlIDxlcnJuby5oPgpAQCAtMjI5LDcg
KzIyOSw3IEBAIEV2YXNfT2JqZWN0KiBld2tfc2V0dGluZ3NfaWNvbl9kYXRhYmFzZV9pY29uX29i
amVjdF9nZXQoY29uc3QgY2hhciogdXJsLCBFdmFzKiBjCiAgICAgfQogCiAgICAgY2Fpcm9fc3Vy
ZmFjZV90KiBzdXJmYWNlID0gaWNvbi0+c3VyZmFjZSgpOwotICAgIHJldHVybiBzdXJmYWNlID8g
ZXdrX3V0aWxfaW1hZ2VfZnJvbV9jYWlyb19zdXJmYWNlX2FkZChjYW52YXMsIHN1cmZhY2UpIDog
MDsKKyAgICByZXR1cm4gc3VyZmFjZSA/IFdlYkNvcmU6OmV2YXNPYmplY3RGcm9tQ2Fpcm9JbWFn
ZVN1cmZhY2UoY2FudmFzLCBzdXJmYWNlKS5sZWFrUmVmKCkgOiAwOwogfQogCiB2b2lkIGV3a19z
ZXR0aW5nc19vYmplY3RfY2FjaGVfY2FwYWNpdHlfc2V0KHVuc2lnbmVkIG1pbkRlYWRDYXBhY2l0
eSwgdW5zaWduZWQgbWF4RGVhZENhcGFjaXR5LCB1bnNpZ25lZCB0b3RhbENhcGFjaXR5KQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a191dGlsLmNwcCBiL1NvdXJjZS9XZWJL
aXQvZWZsL2V3ay9ld2tfdXRpbC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVi
NmNmMDMuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a191dGlsLmNwcAor
KysgL2Rldi9udWxsCkBAIC0xLDkzICswLDAgQEAKLS8qCi0gICAgQ29weXJpZ2h0IChDKSAyMDA5
LTIwMTAgUHJvRlVTSU9OIGVtYmVkZGVkIHN5c3RlbXMKLSAgICBDb3B5cmlnaHQgKEMpIDIwMDkt
MjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAg
ICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCi0gICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgotKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaW5j
bHVkZSAiZXdrX3ByaXZhdGUuaCIKLSNpbmNsdWRlICJld2tfdXRpbF9wcml2YXRlLmgiCi0jaW5j
bHVkZSA8ZWluYV9zYWZldHlfY2hlY2tzLmg+Ci0KLS8qKgotICogQ29udmVydHMgYW4gaW1hZ2Ug
ZnJvbSBjYWlyb19zdXJmYWNlIHRvIHRoZSBFdmFzX09iamVjdC4KLSAqCi0gKiBAcGFyYW0gY2Fu
dmFzIGRpc3BsYXkgY2FudmFzCi0gKiBAcGFyYW0gc3VyZmFjZSBjYWlybyByZXByZXNlbnRhdGlv
biBvZiBhbiBpbWFnZQotICogQHJldHVybiBjb252ZXJ0ZWQgY2Fpcm9fc3VyZmFjZSBvYmplY3Qg
dG8gdGhlIEV2YXNfT2JqZWN0Ci0gKi8KLUV2YXNfT2JqZWN0KiBld2tfdXRpbF9pbWFnZV9mcm9t
X2NhaXJvX3N1cmZhY2VfYWRkKEV2YXMqIGNhbnZhcywgY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNl
KQotewotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChjYW52YXMsIDApOwotICAg
IEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzdXJmYWNlLCAwKTsKLQotICAgIGNhaXJv
X3N0YXR1c190IHN0YXR1cyA9IGNhaXJvX3N1cmZhY2Vfc3RhdHVzKHN1cmZhY2UpOwotICAgIGlm
IChzdGF0dXMgIT0gQ0FJUk9fU1RBVFVTX1NVQ0NFU1MpIHsKLSAgICAgICAgRVJSKCJjYWlybyBz
dXJmYWNlIGlzIGludmFsaWQ6ICVzIiwgY2Fpcm9fc3RhdHVzX3RvX3N0cmluZyhzdGF0dXMpKTsK
LSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgY2Fpcm9fc3VyZmFjZV90eXBlX3QgdHlw
ZSA9IGNhaXJvX3N1cmZhY2VfZ2V0X3R5cGUoc3VyZmFjZSk7Ci0gICAgaWYgKHR5cGUgIT0gQ0FJ
Uk9fU1VSRkFDRV9UWVBFX0lNQUdFKSB7Ci0gICAgICAgIEVSUigidW5rbm93biBzdXJmYWNlIHR5
cGUgJWQsIHJlcXVpcmVkICVkIChDQUlST19TVVJGQUNFX1RZUEVfSU1BR0UpLiIsCi0gICAgICAg
ICAgICB0eXBlLCBDQUlST19TVVJGQUNFX1RZUEVfSU1BR0UpOwotICAgICAgICByZXR1cm4gMDsK
LSAgICB9Ci0KLSAgICBjYWlyb19mb3JtYXRfdCBmb3JtYXQgPSBjYWlyb19pbWFnZV9zdXJmYWNl
X2dldF9mb3JtYXQoc3VyZmFjZSk7Ci0gICAgaWYgKGZvcm1hdCAhPSBDQUlST19GT1JNQVRfQVJH
QjMyICYmIGZvcm1hdCAhPSBDQUlST19GT1JNQVRfUkdCMjQpIHsKLSAgICAgICAgRVJSKCJ1bmtu
b3duIHN1cmZhY2UgZm9ybWF0ICVkLCBleHBlY3RlZCAlZCBvciAlZC4iLAotICAgICAgICAgICAg
Zm9ybWF0LCBDQUlST19GT1JNQVRfQVJHQjMyLCBDQUlST19GT1JNQVRfUkdCMjQpOwotICAgICAg
ICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBpbnQgd2lkdGggPSBjYWlyb19pbWFnZV9zdXJmYWNl
X2dldF93aWR0aChzdXJmYWNlKTsKLSAgICBpbnQgaGVpZ2h0ID0gY2Fpcm9faW1hZ2Vfc3VyZmFj
ZV9nZXRfaGVpZ2h0KHN1cmZhY2UpOwotICAgIGludCBzdHJpZGUgPSBjYWlyb19pbWFnZV9zdXJm
YWNlX2dldF9zdHJpZGUoc3VyZmFjZSk7Ci0gICAgaWYgKHdpZHRoIDw9IDAgfHwgaGVpZ2h0IDw9
IDAgfHwgc3RyaWRlIDw9IDApIHsKLSAgICAgICAgRVJSKCJpbnZhbGlkIGltYWdlIHNpemUgJWR4
JWQsIHN0cmlkZT0lZCIsIHdpZHRoLCBoZWlnaHQsIHN0cmlkZSk7Ci0gICAgICAgIHJldHVybiAw
OwotICAgIH0KLQotICAgIHZvaWQqIGRhdGEgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRh
KHN1cmZhY2UpOwotICAgIGlmICghZGF0YSkgewotICAgICAgICBFUlIoImNvdWxkIG5vdCBnZXQg
c291cmNlIGRhdGEuIik7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIEV2YXNfT2Jq
ZWN0KiBpbWFnZSA9IGV2YXNfb2JqZWN0X2ltYWdlX2ZpbGxlZF9hZGQoY2FudmFzKTsKLSAgICBp
ZiAoIWltYWdlKSB7Ci0gICAgICAgIEVSUigiY291bGQgbm90IGFkZCBpbWFnZSB0byBjYW52YXMu
Iik7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIGV2YXNfb2JqZWN0X2ltYWdlX2Nv
bG9yc3BhY2Vfc2V0KGltYWdlLCBFVkFTX0NPTE9SU1BBQ0VfQVJHQjg4ODgpOwotICAgIGV2YXNf
b2JqZWN0X2ltYWdlX3NpemVfc2V0KGltYWdlLCB3aWR0aCwgaGVpZ2h0KTsKLSAgICBldmFzX29i
amVjdF9pbWFnZV9hbHBoYV9zZXQoaW1hZ2UsIGZvcm1hdCA9PSBDQUlST19GT1JNQVRfQVJHQjMy
KTsKLQotICAgIGlmIChldmFzX29iamVjdF9pbWFnZV9zdHJpZGVfZ2V0KGltYWdlKSAhPSBzdHJp
ZGUpIHsKLSAgICAgICAgRVJSKCJldmFzJyBzdHJpZGUgJWQgZGl2ZXJnZXMgZnJvbSBjYWlybydz
ICVkLiIsCi0gICAgICAgICAgICBldmFzX29iamVjdF9pbWFnZV9zdHJpZGVfZ2V0KGltYWdlKSwg
c3RyaWRlKTsKLSAgICAgICAgZXZhc19vYmplY3RfZGVsKGltYWdlKTsKLSAgICAgICAgcmV0dXJu
IDA7Ci0gICAgfQotCi0gICAgZXZhc19vYmplY3RfaW1hZ2VfZGF0YV9jb3B5X3NldChpbWFnZSwg
ZGF0YSk7Ci0KLSAgICByZXR1cm4gaW1hZ2U7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2VmbC9ld2svZXdrX3V0aWxfcHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a191
dGlsX3ByaXZhdGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmVlMmQwZS4uMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3V0aWxfcHJpdmF0ZS5oCisrKyAv
ZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotLyoKLSAgICBDb3B5cmlnaHQgKEMpIDIwMDktMjAx
MCBQcm9GVVNJT04gZW1iZWRkZWQgc3lzdGVtcwotICAgIENvcHlyaWdodCAoQykgMjAwOS0yMDEw
IFNhbXN1bmcgRWxlY3Ryb25pY3MKLQotICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAgIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICAgQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCi0qLwotCi0jaWZuZGVmIGV3a191dGlsX3ByaXZhdGVfaAotI2Rl
ZmluZSBld2tfdXRpbF9wcml2YXRlX2gKLQotI2luY2x1ZGUgPEV2YXMuaD4KLSNpbmNsdWRlIDxj
YWlyby5oPgotCi1FdmFzX09iamVjdCAqZXdrX3V0aWxfaW1hZ2VfZnJvbV9jYWlyb19zdXJmYWNl
X2FkZChFdmFzICpjYW52YXMsIGNhaXJvX3N1cmZhY2VfdCAqc3VyZmFjZSk7Ci0KLSNlbmRpZiAv
LyBld2tfdXRpbF9wcml2YXRlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxv
ZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCBlNjRjNjAyLi4wZDRlZTUwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsNzAgQEAKKzIwMTItMTAtMTUgIENocmlzdG9waGUgRHVtZXogIDxj
aHJpc3RvcGhlLmR1bWV6QGludGVsLmNvbT4KKworICAgICAgICBbRUZMXVtXSzJdIEltcGxlbWVu
dCBGYXZpY29ucyBBUEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTk5MDg3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgS2VubmV0aCBSb2hkZSBDaHJpc3Rp
YW5zZW4uCisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIGZhdmljb24gQVBJIHRvIEVGTCBXSzIg
cG9ydCB2aWEKKyAgICAgICAgRXdrX0Zhdmljb25fRGF0YWJhc2UuIFRoZSBBUEkgY2FuIGJlIHVz
ZWQgdG8KKyAgICAgICAgcmV0cmlldmUgdGhlIGZhdmljb24gVVJMIGFuZCBkYXRhIGZvciBhIGdp
dmVuCisgICAgICAgIHBhZ2UgVVJMLgorCisgICAgICAgICogUGxhdGZvcm1FZmwuY21ha2U6Cisg
ICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvRVdlYktpdDIuaDoKKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL2VmbC9ld2tfY29udGV4dC5jcHA6CisgICAgICAgIChfRXdrX0NvbnRleHQpOgorICAg
ICAgICAoX0V3a19Db250ZXh0OjpfRXdrX0NvbnRleHQpOgorICAgICAgICAoX0V3a19Db250ZXh0
Ojp+X0V3a19Db250ZXh0KToKKyAgICAgICAgKGV3a19jb250ZXh0X2Zhdmljb25fZGF0YWJhc2Vf
Z2V0KTogQWRkIGdldHRlciB0byByZXRyaWV2ZSB0aGUgZmF2aWNvbgorICAgICAgICBkYXRhYmFz
ZSBpbnN0YW5jZSBmcm9tIHRoZSBjb250ZXh0LgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZs
L2V3a19jb250ZXh0Lmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Zhdmljb25f
ZGF0YWJhc2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKEljb25DaGFuZ2VDYWxsYmFja0RhdGEpOgor
ICAgICAgICAoSWNvbkNoYW5nZUNhbGxiYWNrRGF0YTo6SWNvbkNoYW5nZUNhbGxiYWNrRGF0YSk6
CisgICAgICAgIChJY29uUmVxdWVzdENhbGxiYWNrRGF0YSk6CisgICAgICAgIChJY29uUmVxdWVz
dENhbGxiYWNrRGF0YTo6SWNvblJlcXVlc3RDYWxsYmFja0RhdGEpOgorICAgICAgICAoX0V3a19G
YXZpY29uX0RhdGFiYXNlKToKKyAgICAgICAgKF9Fd2tfRmF2aWNvbl9EYXRhYmFzZTo6X0V3a19G
YXZpY29uX0RhdGFiYXNlKToKKyAgICAgICAgKGRpZENoYW5nZUljb25Gb3JQYWdlVVJMKToKKyAg
ICAgICAgKGdldEljb25TdXJmYWNlU3luY2hyb25vdXNseSk6CisgICAgICAgIChpY29uRGF0YVJl
YWR5Rm9yUGFnZVVSTCk6CisgICAgICAgIChld2tfZmF2aWNvbl9kYXRhYmFzZV9uZXcpOgorICAg
ICAgICAoZXdrX2Zhdmljb25fZGF0YWJhc2VfZnJlZSk6CisgICAgICAgIChld2tfZmF2aWNvbl9k
YXRhYmFzZV9pY29uX3VybF9nZXQpOgorICAgICAgICAoQXN5bmNJY29uUmVxdWVzdFJlc3BvbnNl
KToKKyAgICAgICAgKEFzeW5jSWNvblJlcXVlc3RSZXNwb25zZTo6QXN5bmNJY29uUmVxdWVzdFJl
c3BvbnNlKToKKyAgICAgICAgKHJlc3BvbmRfaWNvbl9yZXF1ZXN0X2lkbGUpOgorICAgICAgICAo
ZXdrX2Zhdmljb25fZGF0YWJhc2VfYXN5bmNfaWNvbl9nZXQpOgorICAgICAgICAoZXdrX2Zhdmlj
b25fZGF0YWJhc2VfaWNvbl9jaGFuZ2VfY2FsbGJhY2tfYWRkKToKKyAgICAgICAgKGV3a19mYXZp
Y29uX2RhdGFiYXNlX2ljb25fY2hhbmdlX2NhbGxiYWNrX2RlbCk6CisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9lZmwvZXdrX2Zhdmljb25fZGF0YWJhc2UuaDogQWRkZWQuCisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9lZmwvZXdrX2Zhdmljb25fZGF0YWJhc2VfcHJpdmF0ZS5oOiBDb3BpZWQgZnJv
bSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYkNvbnRleHRFZmwuY3BwLgorICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmNwcDoKKyAgICAgICAgKF9Fd2tfVmlld19Q
cml2YXRlX0RhdGEpOgorICAgICAgICAoX0V3a19WaWV3X1ByaXZhdGVfRGF0YTo6fl9Fd2tfVmll
d19Qcml2YXRlX0RhdGEpOgorICAgICAgICAoX2V3a192aWV3X29uX2Zhdmljb25fY2hhbmdlZCk6
CisgICAgICAgIChfZXdrX3ZpZXdfaW5pdGlhbGl6ZSk6CisgICAgICAgIChld2tfdmlld191cmxf
dXBkYXRlKToKKyAgICAgICAgKGV3a192aWV3X2ljb25fdXJsX2dldCk6IEFkZCBhIGdldHRlciB0
byB0aGUgdmlldyB0byByZXRyaWV2ZSB0aGUgaWNvbiBVUkwgZm9yCisgICAgICAgIHRoZSBwYWdl
IHRoYXQgaXMgY3VycmVudGx5IHNob3duLgorICAgICAgICAoZXdrX3ZpZXdfdXBkYXRlX2ljb24p
OgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3Lmg6IEVtaXQgYSBuZXcgImlj
b24sY2hhbmdlZCIgc2lnbmFsIG9uIHRoZSB2aWV3IHdoZW5ldmVyCisgICAgICAgIHRoZSB2aWV3
J3MgaWNvbiBoYXMgY2hhbmdlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmll
d19wcml2YXRlLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvdGVzdHMvcmVzb3VyY2Vz
L2JsYW5rLmljbzogQWRkZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvdGVzdHMvdGVz
dF9ld2syX2NvbnRleHQuY3BwOiBBZGQgdW5pdCB0ZXN0IGZvciBuZXcgZmF2aWNvbiBkYXRhYmFz
ZSBnZXR0ZXIuCisgICAgICAgIChURVNUX0YpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZs
L3Rlc3RzL3Rlc3RfZXdrMl9mYXZpY29uX2RhdGFiYXNlLmNwcDogQWRkZWQgdW5pdCB0ZXN0cyBm
b3IgdGhlIG5ldyBFd2tfRmF2aWNvbl9EYXRhYmFzZSBBUEkuCisgICAgICAgIChzZXJ2ZXJDYWxs
YmFjayk6CisgICAgICAgIChvbkljb25DaGFuZ2VkKToKKyAgICAgICAgKFRFU1RfRik6CisgICAg
ICAgIChvbkljb25EYXRhUmVhZHkpOgorICAgICAgICAoSWNvblJlcXVlc3REYXRhKToKKyAgICAg
ICAgKHJlcXVlc3RGYXZpY29uRGF0YSk6CisgICAgICAgICogVUlQcm9jZXNzL2VmbC9XZWJDb250
ZXh0RWZsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViQ29udGV4dDo6cGxhdGZvcm1EZWZhdWx0
SWNvbkRhdGFiYXNlUGF0aCk6IFJldHVybiBhIHZhbGlkIGRlZmF1bHQgcGF0aCBmb3IgdGhlIGlj
b24gZGF0YWJhc2UuCisKIDIwMTItMTAtMTQgIEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFw
cGxlLmNvbT4KIAogICAgICAgICBGaXggdGhlIHdvcmxkLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvUGxhdGZvcm1FZmwuY21ha2UgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFr
ZQppbmRleCBhMTJmNDRhLi5mNjQ1MWM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0
Zm9ybUVmbC5jbWFrZQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQpAQCAt
NTUsNiArNTUsNyBAQCBMSVNUKEFQUEVORCBXZWJLaXQyX1NPVVJDRVMKICAgICBVSVByb2Nlc3Mv
QVBJL2VmbC9ld2tfY29va2llX21hbmFnZXIuY3BwCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdr
X2Rvd25sb2FkX2pvYi5jcHAKICAgICBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfZXJyb3IuY3BwCisg
ICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Zhdmljb25fZGF0YWJhc2UuY3BwCiAgICAgVUlQcm9j
ZXNzL0FQSS9lZmwvZXdrX2Zvcm1fc3VibWlzc2lvbl9yZXF1ZXN0LmNwcAogICAgIFVJUHJvY2Vz
cy9BUEkvZWZsL2V3a19pbnRlbnQuY3BwCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2ludGVu
dF9zZXJ2aWNlLmNwcApAQCAtMjMxLDYgKzIzMiw3IEBAIFNFVCAoRVdlYktpdDJfSEVBREVSUwog
ICAgICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Nv
b2tpZV9tYW5hZ2VyLmgiCiAgICAgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9VSVByb2Nl
c3MvQVBJL2VmbC9ld2tfZG93bmxvYWRfam9iLmgiCiAgICAgIiR7Q01BS0VfQ1VSUkVOVF9TT1VS
Q0VfRElSfS9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfZXJyb3IuaCIKKyAgICAiJHtDTUFLRV9DVVJS
RU5UX1NPVVJDRV9ESVJ9L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19mYXZpY29uX2RhdGFiYXNlLmgi
CiAgICAgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9VSVByb2Nlc3MvQVBJL2VmbC9ld2tf
Zm9ybV9zdWJtaXNzaW9uX3JlcXVlc3QuaCIKICAgICAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9E
SVJ9L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19pbnRlbnQuaCIKICAgICAiJHtDTUFLRV9DVVJSRU5U
X1NPVVJDRV9ESVJ9L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19pbnRlbnRfc2VydmljZS5oIgpAQCAt
MzI5LDYgKzMzMSw3IEBAIFNFVChFV0syVW5pdFRlc3RzX0JJTkFSSUVTCiAgICAgdGVzdF9ld2sy
X2Nvb2tpZV9tYW5hZ2VyCiAgICAgdGVzdF9ld2syX2Rvd25sb2FkX2pvYgogICAgIHRlc3RfZXdr
Ml9laW5hX3NoYXJlZF9zdHJpbmcKKyAgICB0ZXN0X2V3azJfZmF2aWNvbl9kYXRhYmFzZQogICAg
IHRlc3RfZXdrMl9yZWZwdHJfZXZhc19vYmplY3QKICAgICB0ZXN0X2V3azJfaW50ZW50cwogICAg
IHRlc3RfZXdrMl9zZXR0aW5ncwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9lZmwvRVdlYktpdDIuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0VX
ZWJLaXQyLmgKaW5kZXggMDBkZDgxMS4uN2QyZjg3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9lZmwvRVdlYktpdDIuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2VmbC9FV2ViS2l0Mi5oCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiZXdr
X2Nvb2tpZV9tYW5hZ2VyLmgiCiAjaW5jbHVkZSAiZXdrX2Rvd25sb2FkX2pvYi5oIgogI2luY2x1
ZGUgImV3a19lcnJvci5oIgorI2luY2x1ZGUgImV3a19mYXZpY29uX2RhdGFiYXNlLmgiCiAjaW5j
bHVkZSAiZXdrX2Zvcm1fc3VibWlzc2lvbl9yZXF1ZXN0LmgiCiAjaW5jbHVkZSAiZXdrX2ludGVu
dC5oIgogI2luY2x1ZGUgImV3a19pbnRlbnRfc2VydmljZS5oIgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuY3BwIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuY3BwCmluZGV4IDAyZWRkYjQuLmMyMjUx
NDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250
ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4
dC5jcHAKQEAgLTM3LDcgKzM3LDkgQEAKICNpbmNsdWRlICJld2tfY29va2llX21hbmFnZXJfcHJp
dmF0ZS5oIgogI2luY2x1ZGUgImV3a19kb3dubG9hZF9qb2IuaCIKICNpbmNsdWRlICJld2tfZG93
bmxvYWRfam9iX3ByaXZhdGUuaCIKKyNpbmNsdWRlICJld2tfZmF2aWNvbl9kYXRhYmFzZV9wcml2
YXRlLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9GaWxlU3lzdGVtLmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9JY29uRGF0YWJhc2UuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgogCkBAIC02Niw2ICs2OCw3IEBAIHN0cnVjdCBfRXdrX0NvbnRl
eHQgewogICAgIFdLUmV0YWluUHRyPFdLQ29udGV4dFJlZj4gY29udGV4dDsKIAogICAgIEV3a19D
b29raWVfTWFuYWdlciogY29va2llTWFuYWdlcjsKKyAgICBFd2tfRmF2aWNvbl9EYXRhYmFzZSog
ZmF2aWNvbkRhdGFiYXNlOwogI2lmIEVOQUJMRShCQVRURVJZX1NUQVRVUykKICAgICBSZWZQdHI8
QmF0dGVyeVByb3ZpZGVyPiBiYXR0ZXJ5UHJvdmlkZXI7CiAjZW5kaWYKQEAgLTg2LDYgKzg5LDcg
QEAgc3RydWN0IF9Fd2tfQ29udGV4dCB7CiAgICAgICAgIDogX19yZWYoMSkKICAgICAgICAgLCBj
b250ZXh0KGNvbnRleHRSZWYpCiAgICAgICAgICwgY29va2llTWFuYWdlcigwKQorICAgICAgICAs
IGZhdmljb25EYXRhYmFzZSgwKQogICAgICAgICAsIHJlcXVlc3RNYW5hZ2VyKFdLQ29udGV4dEdl
dFNvdXBSZXF1ZXN0TWFuYWdlcihjb250ZXh0UmVmLmdldCgpKSkKICAgICAgICAgLCBoaXN0b3J5
Q2xpZW50KCkKICAgICB7CkBAIC0xMjEsNiArMTI1LDkgQEAgc3RydWN0IF9Fd2tfQ29udGV4dCB7
CiAgICAgICAgIGlmIChjb29raWVNYW5hZ2VyKQogICAgICAgICAgICAgZXdrX2Nvb2tpZV9tYW5h
Z2VyX2ZyZWUoY29va2llTWFuYWdlcik7CiAKKyAgICAgICAgaWYgKGZhdmljb25EYXRhYmFzZSkK
KyAgICAgICAgICAgIGV3a19mYXZpY29uX2RhdGFiYXNlX2ZyZWUoZmF2aWNvbkRhdGFiYXNlKTsK
KwogICAgICAgICBIYXNoTWFwPHVpbnQ2NF90LCBFd2tfRG93bmxvYWRfSm9iKj46Oml0ZXJhdG9y
IGl0ID0gZG93bmxvYWRKb2JzLmJlZ2luKCk7CiAgICAgICAgIEhhc2hNYXA8dWludDY0X3QsIEV3
a19Eb3dubG9hZF9Kb2IqPjo6aXRlcmF0b3IgZW5kID0gZG93bmxvYWRKb2JzLmVuZCgpOwogICAg
ICAgICBmb3IgKCA7IGl0ICE9IGVuZDsgKytpdCkKQEAgLTE1Nyw2ICsxNjQsMjIgQEAgRXdrX0Nv
b2tpZV9NYW5hZ2VyKiBld2tfY29udGV4dF9jb29raWVfbWFuYWdlcl9nZXQoY29uc3QgRXdrX0Nv
bnRleHQqIGV3a0NvbnRleHQKICAgICByZXR1cm4gZXdrQ29udGV4dC0+Y29va2llTWFuYWdlcjsK
IH0KIAorRXdrX0Zhdmljb25fRGF0YWJhc2UqIGV3a19jb250ZXh0X2Zhdmljb25fZGF0YWJhc2Vf
Z2V0KGNvbnN0IEV3a19Db250ZXh0KiBld2tDb250ZXh0KQoreworICAgIEVJTkFfU0FGRVRZX09O
X05VTExfUkVUVVJOX1ZBTChld2tDb250ZXh0LCAwKTsKKworICAgIGlmICghZXdrQ29udGV4dC0+
ZmF2aWNvbkRhdGFiYXNlKSB7CisgICAgICAgIC8vIFNldCBkYXRhYmFzZSBwYXRoLgorICAgICAg
ICBXZWJDb250ZXh0KiB3ZWJDb250ZXh0ID0gdG9JbXBsKGV3a0NvbnRleHQtPmNvbnRleHQuZ2V0
KCkpOworICAgICAgICBTdHJpbmcgZGF0YWJhc2VQYXRoID0gd2ViQ29udGV4dC0+aWNvbkRhdGFi
YXNlUGF0aCgpICsgIi8iICsgV2ViQ29yZTo6SWNvbkRhdGFiYXNlOjpkZWZhdWx0RGF0YWJhc2VG
aWxlbmFtZSgpOworICAgICAgICB3ZWJDb250ZXh0LT5zZXRJY29uRGF0YWJhc2VQYXRoKGRhdGFi
YXNlUGF0aCk7CisKKyAgICAgICAgY29uc3RfY2FzdDxFd2tfQ29udGV4dCo+KGV3a0NvbnRleHQp
LT5mYXZpY29uRGF0YWJhc2UgPSBld2tfZmF2aWNvbl9kYXRhYmFzZV9uZXcoV0tDb250ZXh0R2V0
SWNvbkRhdGFiYXNlKGV3a0NvbnRleHQtPmNvbnRleHQuZ2V0KCkpKTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gZXdrQ29udGV4dC0+ZmF2aWNvbkRhdGFiYXNlOworfQorCiBXS0NvbnRleHRSZWYgZXdr
X2NvbnRleHRfV0tDb250ZXh0X2dldChjb25zdCBFd2tfQ29udGV4dCogZXdrQ29udGV4dCkKIHsK
ICAgICByZXR1cm4gZXdrQ29udGV4dC0+Y29udGV4dC5nZXQoKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0LmggYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5oCmluZGV4IDNmNDZkNDYuLjhjMGY2Mjgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0
LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuaApA
QCAtMzgsNiArMzgsNyBAQAogI2RlZmluZSBld2tfY29udGV4dF9oCiAKICNpbmNsdWRlICJld2tf
Y29va2llX21hbmFnZXIuaCIKKyNpbmNsdWRlICJld2tfZmF2aWNvbl9kYXRhYmFzZS5oIgogI2lu
Y2x1ZGUgImV3a19uYXZpZ2F0aW9uX2RhdGEuaCIKICNpbmNsdWRlICJld2tfdXJsX3NjaGVtZV9y
ZXF1ZXN0LmgiCiAjaW5jbHVkZSA8RXZhcy5oPgpAQCAtMTY1LDYgKzE2NiwxNSBAQCBFQVBJIEV3
a19Db250ZXh0ICpld2tfY29udGV4dF9uZXdfd2l0aF9pbmplY3RlZF9idW5kbGVfcGF0aChjb25z
dCBjaGFyICpwYXRoKTsKIEVBUEkgRXdrX0Nvb2tpZV9NYW5hZ2VyICpld2tfY29udGV4dF9jb29r
aWVfbWFuYWdlcl9nZXQoY29uc3QgRXdrX0NvbnRleHQgKmNvbnRleHQpOwogCiAvKioKKyAqIEdl
dHMgdGhlIGZhdmljb24gZGF0YWJhc2UgaW5zdGFuY2UgZm9yIHRoaXMgQGEgY29udGV4dC4KKyAq
CisgKiBAcGFyYW0gY29udGV4dCBjb250ZXh0IG9iamVjdCB0byBxdWVyeS4KKyAqCisgKiBAcmV0
dXJuIEV3a19GYXZpY29uX0RhdGFiYXNlIG9iamVjdCBpbnN0YW5jZSBvciBAYyBOVUxMIGluIGNh
c2Ugb2YgZmFpbHVyZS4KKyAqLworRUFQSSBFd2tfRmF2aWNvbl9EYXRhYmFzZSAqZXdrX2NvbnRl
eHRfZmF2aWNvbl9kYXRhYmFzZV9nZXQoY29uc3QgRXdrX0NvbnRleHQgKmNvbnRleHQpOworCisv
KioKICAqIFJlZ2lzdGVyIEBhIHNjaGVtZSBpbiBAYSBjb250ZXh0LgogICoKICAqIFdoZW4gYW4g
VVJMIHJlcXVlc3Qgd2l0aCBAYSBzY2hlbWUgaXMgbWFkZSBpbiB0aGUgI0V3a19Db250ZXh0LCB0
aGUgY2FsbGJhY2sKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZs
L2V3a19mYXZpY29uX2RhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
ZWZsL2V3a19mYXZpY29uX2RhdGFiYXNlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi44MGUwZTY0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9lZmwvZXdrX2Zhdmljb25fZGF0YWJhc2UuY3BwCkBAIC0wLDAgKzEsMjYxIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiZXdrX2Zh
dmljb25fZGF0YWJhc2UuaCIKKworI2luY2x1ZGUgIldLQVBJQ2FzdC5oIgorI2luY2x1ZGUgIldL
SWNvbkRhdGFiYXNlLmgiCisjaW5jbHVkZSAiV0tSZXRhaW5QdHIuaCIKKyNpbmNsdWRlICJXS1VS
TC5oIgorI2luY2x1ZGUgIldlYkljb25EYXRhYmFzZS5oIgorI2luY2x1ZGUgIldlYlVSTC5oIgor
I2luY2x1ZGUgImV3a19mYXZpY29uX2RhdGFiYXNlX3ByaXZhdGUuaCIKKyNpbmNsdWRlIDxXZWJD
b3JlL0NhaXJvVXRpbGl0aWVzRWZsLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9SZWZQdHJDYWlyby5o
PgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5o
PgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCit1c2luZyBuYW1lc3BhY2UgV2Vi
S2l0OworCitzdHJ1Y3QgSWNvbkNoYW5nZUNhbGxiYWNrRGF0YSB7CisgICAgRXdrX0Zhdmljb25f
RGF0YWJhc2VfSWNvbl9DaGFuZ2VfQ2IgY2FsbGJhY2s7CisgICAgdm9pZCogdXNlckRhdGE7CisK
KyAgICBJY29uQ2hhbmdlQ2FsbGJhY2tEYXRhKCkKKyAgICAgICAgOiBjYWxsYmFjaygwKQorICAg
ICAgICAsIHVzZXJEYXRhKDApCisgICAgeyB9CisKKyAgICBJY29uQ2hhbmdlQ2FsbGJhY2tEYXRh
KEV3a19GYXZpY29uX0RhdGFiYXNlX0ljb25fQ2hhbmdlX0NiIF9jYWxsYmFjaywgdm9pZCogX3Vz
ZXJEYXRhKQorICAgICAgICA6IGNhbGxiYWNrKF9jYWxsYmFjaykKKyAgICAgICAgLCB1c2VyRGF0
YShfdXNlckRhdGEpCisgICAgeyB9Cit9OworCitzdHJ1Y3QgSWNvblJlcXVlc3RDYWxsYmFja0Rh
dGEgeworICAgIEV3a19GYXZpY29uX0RhdGFiYXNlX0FzeW5jX0ljb25fR2V0X0NiIGNhbGxiYWNr
OworICAgIHZvaWQqIHVzZXJEYXRhOworICAgIEV2YXMqIGV2YXM7CisKKyAgICBJY29uUmVxdWVz
dENhbGxiYWNrRGF0YSgpCisgICAgICAgIDogY2FsbGJhY2soMCkKKyAgICAgICAgLCB1c2VyRGF0
YSgwKQorICAgICAgICAsIGV2YXMoMCkKKyAgICB7IH0KKworICAgIEljb25SZXF1ZXN0Q2FsbGJh
Y2tEYXRhKEV3a19GYXZpY29uX0RhdGFiYXNlX0FzeW5jX0ljb25fR2V0X0NiIF9jYWxsYmFjaywg
dm9pZCogX3VzZXJEYXRhLCBFdmFzKiBfZXZhcykKKyAgICAgICAgOiBjYWxsYmFjayhfY2FsbGJh
Y2spCisgICAgICAgICwgdXNlckRhdGEoX3VzZXJEYXRhKQorICAgICAgICAsIGV2YXMoX2V2YXMp
CisgICAgeyB9Cit9OworCitzdGF0aWMgdm9pZCBkaWRDaGFuZ2VJY29uRm9yUGFnZVVSTChXS0lj
b25EYXRhYmFzZVJlZiBpY29uRGF0YWJhc2UsIFdLVVJMUmVmIHBhZ2VVUkwsIGNvbnN0IHZvaWQq
IGNsaWVudEluZm8pOworc3RhdGljIHZvaWQgaWNvbkRhdGFSZWFkeUZvclBhZ2VVUkwoV0tJY29u
RGF0YWJhc2VSZWYgaWNvbkRhdGFiYXNlLCBXS1VSTFJlZiBwYWdlVVJMLCBjb25zdCB2b2lkKiBj
bGllbnRJbmZvKTsKKwordHlwZWRlZiBIYXNoTWFwPEV3a19GYXZpY29uX0RhdGFiYXNlX0ljb25f
Q2hhbmdlX0NiLCBJY29uQ2hhbmdlQ2FsbGJhY2tEYXRhPiBDaGFuZ2VMaXN0ZW5lck1hcDsKK3R5
cGVkZWYgVmVjdG9yPEljb25SZXF1ZXN0Q2FsbGJhY2tEYXRhPiBQZW5kaW5nSWNvblJlcXVlc3RW
ZWN0b3I7Cit0eXBlZGVmIEhhc2hNYXA8U3RyaW5nIC8qIHBhZ2VVUkwgKi8sIFBlbmRpbmdJY29u
UmVxdWVzdFZlY3Rvcj4gUGVuZGluZ0ljb25SZXF1ZXN0TWFwOworCisvKioKKyAqIFxzdHJ1Y3Qg
IF9Fd2tfRmF2aWNvbl9EYXRhYmFzZQorICogQGJyaWVmICAgQ29udGFpbnMgdGhlIGZhdmljb24g
ZGF0YWJhc2UgZGF0YS4KKyAqLworc3RydWN0IF9Fd2tfRmF2aWNvbl9EYXRhYmFzZSB7CisgICAg
V0tSZXRhaW5QdHI8V0tJY29uRGF0YWJhc2VSZWY+IHdrSWNvbkRhdGFiYXNlOworICAgIENoYW5n
ZUxpc3RlbmVyTWFwIGNoYW5nZUxpc3RlbmVyczsKKyAgICBQZW5kaW5nSWNvblJlcXVlc3RNYXAg
aWNvblJlcXVlc3RzOworCisgICAgX0V3a19GYXZpY29uX0RhdGFiYXNlKFdLSWNvbkRhdGFiYXNl
UmVmIGljb25EYXRhYmFzZVJlZikKKyAgICAgICAgOiAgd2tJY29uRGF0YWJhc2UoaWNvbkRhdGFi
YXNlUmVmKQorICAgIHsKKyAgICAgICAgV0tJY29uRGF0YWJhc2VDbGllbnQgaWNvbkRhdGFiYXNl
Q2xpZW50OworICAgICAgICBtZW1zZXQoJmljb25EYXRhYmFzZUNsaWVudCwgMCwgc2l6ZW9mKFdL
SWNvbkRhdGFiYXNlQ2xpZW50KSk7CisgICAgICAgIGljb25EYXRhYmFzZUNsaWVudC52ZXJzaW9u
ID0ga1dLSWNvbkRhdGFiYXNlQ2xpZW50Q3VycmVudFZlcnNpb247CisgICAgICAgIGljb25EYXRh
YmFzZUNsaWVudC5jbGllbnRJbmZvID0gdGhpczsKKyAgICAgICAgaWNvbkRhdGFiYXNlQ2xpZW50
LmRpZENoYW5nZUljb25Gb3JQYWdlVVJMID0gZGlkQ2hhbmdlSWNvbkZvclBhZ2VVUkw7CisgICAg
ICAgIGljb25EYXRhYmFzZUNsaWVudC5pY29uRGF0YVJlYWR5Rm9yUGFnZVVSTCA9IGljb25EYXRh
UmVhZHlGb3JQYWdlVVJMOworICAgICAgICBXS0ljb25EYXRhYmFzZVNldEljb25EYXRhYmFzZUNs
aWVudCh3a0ljb25EYXRhYmFzZS5nZXQoKSwgJmljb25EYXRhYmFzZUNsaWVudCk7CisgICAgfQor
fTsKKworc3RhdGljIHZvaWQgZGlkQ2hhbmdlSWNvbkZvclBhZ2VVUkwoV0tJY29uRGF0YWJhc2VS
ZWYsIFdLVVJMUmVmIHBhZ2VVUkxSZWYsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCit7CisgICAg
Y29uc3QgRXdrX0Zhdmljb25fRGF0YWJhc2UqIGV3a0ljb25EYXRhYmFzZSA9IHN0YXRpY19jYXN0
PGNvbnN0IEV3a19GYXZpY29uX0RhdGFiYXNlKj4oY2xpZW50SW5mbyk7CisKKyAgICBpZiAoZXdr
SWNvbkRhdGFiYXNlLT5jaGFuZ2VMaXN0ZW5lcnMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47
CisKKyAgICBDU3RyaW5nIHBhZ2VVUkwgPSB0b0ltcGwocGFnZVVSTFJlZiktPnN0cmluZygpLnV0
ZjgoKTsKKworICAgIENoYW5nZUxpc3RlbmVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGV3a0lj
b25EYXRhYmFzZS0+Y2hhbmdlTGlzdGVuZXJzLmJlZ2luKCk7CisgICAgQ2hhbmdlTGlzdGVuZXJN
YXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGV3a0ljb25EYXRhYmFzZS0+Y2hhbmdlTGlzdGVuZXJz
LmVuZCgpOworICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgIGl0LT52YWx1ZS5j
YWxsYmFjayhwYWdlVVJMLmRhdGEoKSwgaXQtPnZhbHVlLnVzZXJEYXRhKTsKK30KKworc3RhdGlj
IGNhaXJvX3N1cmZhY2VfdCogZ2V0SWNvblN1cmZhY2VTeW5jaHJvbm91c2x5KFdlYkljb25EYXRh
YmFzZSogd2ViSWNvbkRhdGFiYXNlLCBjb25zdCBTdHJpbmcmIHBhZ2VVUkwpCit7CisgICAgd2Vi
SWNvbkRhdGFiYXNlLT5yZXRhaW5JY29uRm9yUGFnZVVSTChwYWdlVVJMKTsKKworICAgIFdlYkNv
cmU6Ok5hdGl2ZUltYWdlUHRyIGljb24gPSB3ZWJJY29uRGF0YWJhc2UtPm5hdGl2ZUltYWdlRm9y
UGFnZVVSTChwYWdlVVJMKTsKKyAgICBpZiAoIWljb24pIHsKKyAgICAgICAgd2ViSWNvbkRhdGFi
YXNlLT5yZWxlYXNlSWNvbkZvclBhZ2VVUkwocGFnZVVSTCk7CisgICAgICAgIHJldHVybiAwOwor
ICAgIH0KKworICAgIHJldHVybiBpY29uLT5zdXJmYWNlKCk7Cit9CisKK3N0YXRpYyB2b2lkIGlj
b25EYXRhUmVhZHlGb3JQYWdlVVJMKFdLSWNvbkRhdGFiYXNlUmVmLCBXS1VSTFJlZiBwYWdlVVJM
LCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQoreworICAgIEV3a19GYXZpY29uX0RhdGFiYXNlKiBl
d2tJY29uRGF0YWJhc2UgPSBjb25zdF9jYXN0PEV3a19GYXZpY29uX0RhdGFiYXNlKj4oc3RhdGlj
X2Nhc3Q8Y29uc3QgRXdrX0Zhdmljb25fRGF0YWJhc2UqPihjbGllbnRJbmZvKSk7CisKKyAgICBT
dHJpbmcgdXJsU3RyaW5nID0gdG9JbXBsKHBhZ2VVUkwpLT5zdHJpbmcoKTsKKyAgICBpZiAoIWV3
a0ljb25EYXRhYmFzZS0+aWNvblJlcXVlc3RzLmNvbnRhaW5zKHVybFN0cmluZykpCisgICAgICAg
IHJldHVybjsKKworICAgIFdlYkljb25EYXRhYmFzZSogd2ViSWNvbkRhdGFiYXNlID0gdG9JbXBs
KGV3a0ljb25EYXRhYmFzZS0+d2tJY29uRGF0YWJhc2UuZ2V0KCkpOworICAgIFJlZlB0cjxjYWly
b19zdXJmYWNlX3Q+IHN1cmZhY2UgPSBnZXRJY29uU3VyZmFjZVN5bmNocm9ub3VzbHkod2ViSWNv
bkRhdGFiYXNlLCB1cmxTdHJpbmcpOworCisgICAgUGVuZGluZ0ljb25SZXF1ZXN0VmVjdG9yIHJl
cXVlc3RzRm9yVVJMID0gZXdrSWNvbkRhdGFiYXNlLT5pY29uUmVxdWVzdHMudGFrZSh1cmxTdHJp
bmcpOworICAgIHNpemVfdCByZXF1ZXN0Q291bnQgPSByZXF1ZXN0c0ZvclVSTC5zaXplKCk7Cisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZXF1ZXN0Q291bnQ7ICsraSkgeworICAgICAgICBj
b25zdCBJY29uUmVxdWVzdENhbGxiYWNrRGF0YSYgY2FsbGJhY2tEYXRhID0gcmVxdWVzdHNGb3JV
UkxbaV07CisgICAgICAgIFJlZlB0cjxFdmFzX09iamVjdD4gaWNvbiA9IHN1cmZhY2UgPyBXZWJD
b3JlOjpldmFzT2JqZWN0RnJvbUNhaXJvSW1hZ2VTdXJmYWNlKGNhbGxiYWNrRGF0YS5ldmFzLCBz
dXJmYWNlLmdldCgpKSA6IDA7CisgICAgICAgIGNhbGxiYWNrRGF0YS5jYWxsYmFjayh1cmxTdHJp
bmcudXRmOCgpLmRhdGEoKSwgaWNvbi5nZXQoKSwgY2FsbGJhY2tEYXRhLnVzZXJEYXRhKTsKKyAg
ICB9Cit9CisKKy8qKgorICogQGludGVybmFsCisgKiBDb25zdHJ1Y3RzIGEgRXdrX0Zhdmljb25f
RGF0YWJhc2UgaW5zdGFuY2UuCisgKi8KK0V3a19GYXZpY29uX0RhdGFiYXNlKiBld2tfZmF2aWNv
bl9kYXRhYmFzZV9uZXcoV0tJY29uRGF0YWJhc2VSZWYgd2tJY29uRGF0YWJhc2UpCit7CisgICAg
QVNTRVJUKHdrSWNvbkRhdGFiYXNlKTsKKworICAgIHJldHVybiBuZXcgRXdrX0Zhdmljb25fRGF0
YWJhc2Uod2tJY29uRGF0YWJhc2UpOworfQorCisvKioKKyAqIEBpbnRlcm5hbAorICogRnJlZXMg
YSBFd2tfRmF2aWNvbl9EYXRhYmFzZSBpbnN0YW5jZS4KKyAqLwordm9pZCBld2tfZmF2aWNvbl9k
YXRhYmFzZV9mcmVlKEV3a19GYXZpY29uX0RhdGFiYXNlKiBld2tJY29uRGF0YWJhc2UpCit7Cisg
ICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oZXdrSWNvbkRhdGFiYXNlKTsKKworICAgIGRl
bGV0ZSBld2tJY29uRGF0YWJhc2U7Cit9CisKK2NvbnN0IGNoYXIqIGV3a19mYXZpY29uX2RhdGFi
YXNlX2ljb25fdXJsX2dldChFd2tfRmF2aWNvbl9EYXRhYmFzZSogZXdrSWNvbkRhdGFiYXNlLCBj
b25zdCBjaGFyKiBwYWdlVVJMKQoreworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZB
TChld2tJY29uRGF0YWJhc2UsIDApOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZB
TChwYWdlVVJMLCAwKTsKKworICAgIFN0cmluZyBpY29uVVJMOworICAgIHRvSW1wbChld2tJY29u
RGF0YWJhc2UtPndrSWNvbkRhdGFiYXNlLmdldCgpKS0+c3luY2hyb25vdXNJY29uVVJMRm9yUGFn
ZVVSTChwYWdlVVJMLCBpY29uVVJMKTsKKworICAgIHJldHVybiBlaW5hX3N0cmluZ3NoYXJlX2Fk
ZChpY29uVVJMLnV0ZjgoKS5kYXRhKCkpOworfQorCitzdHJ1Y3QgQXN5bmNJY29uUmVxdWVzdFJl
c3BvbnNlIHsKKyAgICBTdHJpbmcgcGFnZVVSTDsKKyAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90
PiBzdXJmYWNlOworICAgIEljb25SZXF1ZXN0Q2FsbGJhY2tEYXRhIGNhbGxiYWNrRGF0YTsKKwor
ICAgIEFzeW5jSWNvblJlcXVlc3RSZXNwb25zZShjb25zdCBTdHJpbmcmIF9wYWdlVVJMLCBQYXNz
UmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gX3N1cmZhY2UsIGNvbnN0IEljb25SZXF1ZXN0Q2FsbGJh
Y2tEYXRhJiBfY2FsbGJhY2tEYXRhKQorICAgICAgICA6IHBhZ2VVUkwoX3BhZ2VVUkwpCisgICAg
ICAgICwgc3VyZmFjZShfc3VyZmFjZSkKKyAgICAgICAgLCBjYWxsYmFja0RhdGEoX2NhbGxiYWNr
RGF0YSkKKyAgICB7IH0KK307CisKK3N0YXRpYyBFaW5hX0Jvb2wgcmVzcG9uZF9pY29uX3JlcXVl
c3RfaWRsZSh2b2lkKiBkYXRhKQoreworICAgIEFzeW5jSWNvblJlcXVlc3RSZXNwb25zZSogcmVz
cG9uc2UgPSBzdGF0aWNfY2FzdDxBc3luY0ljb25SZXF1ZXN0UmVzcG9uc2UqPihkYXRhKTsKKwor
ICAgIFJlZlB0cjxFdmFzX09iamVjdD4gaWNvbiA9IHJlc3BvbnNlLT5zdXJmYWNlID8gV2ViQ29y
ZTo6ZXZhc09iamVjdEZyb21DYWlyb0ltYWdlU3VyZmFjZShyZXNwb25zZS0+Y2FsbGJhY2tEYXRh
LmV2YXMsIHJlc3BvbnNlLT5zdXJmYWNlLmdldCgpKSA6IDA7CisgICAgcmVzcG9uc2UtPmNhbGxi
YWNrRGF0YS5jYWxsYmFjayhyZXNwb25zZS0+cGFnZVVSTC51dGY4KCkuZGF0YSgpLCBpY29uLmdl
dCgpLCByZXNwb25zZS0+Y2FsbGJhY2tEYXRhLnVzZXJEYXRhKTsKKworICAgIGRlbGV0ZSByZXNw
b25zZTsKKworICAgIHJldHVybiBFQ09SRV9DQUxMQkFDS19ET05FOworfQorCitFaW5hX0Jvb2wg
ZXdrX2Zhdmljb25fZGF0YWJhc2VfYXN5bmNfaWNvbl9nZXQoRXdrX0Zhdmljb25fRGF0YWJhc2Uq
IGV3a0ljb25EYXRhYmFzZSwgY29uc3QgY2hhciogcGFnZV91cmwsIEV2YXMqIGV2YXMsIEV3a19G
YXZpY29uX0RhdGFiYXNlX0FzeW5jX0ljb25fR2V0X0NiIGNhbGxiYWNrLCB2b2lkKiB1c2VyRGF0
YSkKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoZXdrSWNvbkRhdGFiYXNl
LCBmYWxzZSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHBhZ2VfdXJsLCBm
YWxzZSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGV2YXMsIGZhbHNlKTsK
KyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoY2FsbGJhY2ssIGZhbHNlKTsKKwor
ICAgIFdlYkljb25EYXRhYmFzZSogd2ViSWNvbkRhdGFiYXNlID0gdG9JbXBsKGV3a0ljb25EYXRh
YmFzZS0+d2tJY29uRGF0YWJhc2UuZ2V0KCkpOworCisgICAgLy8gV2UgYXNrIGZvciB0aGUgaWNv
biBkaXJlY3RseS4gSWYgd2UgZG9uJ3QgZ2V0IHRoZSBpY29uIGRhdGEgbm93LAorICAgIC8vIHdl
J2xsIGJlIG5vdGlmaWVkIGxhdGVyIChldmVuIGlmIHRoZSBkYXRhYmFzZSBpcyBzdGlsbCBpbXBv
cnRpbmcgaWNvbnMpLgorICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IHN1cmZhY2UgPSBnZXRJ
Y29uU3VyZmFjZVN5bmNocm9ub3VzbHkod2ViSWNvbkRhdGFiYXNlLCBwYWdlX3VybCk7CisKKyAg
ICAvLyBJZiB0aGVyZSdzIG5vIHZhbGlkIGljb24sIGJ1dCB0aGVyZSdzIGFuIGljb25VUkwgcmVn
aXN0ZXJlZCwKKyAgICAvLyBvciBpdCdzIHN0aWxsIG5vdCByZWdpc3RlcmVkIGJ1dCB0aGUgaW1w
b3J0IHByb2Nlc3MgaGFzbid0CisgICAgLy8gZmluaXNoZWQgeWV0LCB3ZSBuZWVkIHRvIHdhaXQg
Zm9yIGljb25EYXRhUmVhZHlGb3JQYWdlVVJMIHRvIGJlCisgICAgLy8gY2FsbGVkIGJlZm9yZSBt
YWtpbmcgYW5kIGluZm9ybWVkIGRlY2lzaW9uLgorICAgIFN0cmluZyBpY29uVVJMRm9yUGFnZVVS
TDsKKyAgICB3ZWJJY29uRGF0YWJhc2UtPnN5bmNocm9ub3VzSWNvblVSTEZvclBhZ2VVUkwocGFn
ZV91cmwsIGljb25VUkxGb3JQYWdlVVJMKTsKKyAgICBpZiAoIXN1cmZhY2UgJiYgKCFpY29uVVJM
Rm9yUGFnZVVSTC5pc0VtcHR5KCkgfHwgIXdlYkljb25EYXRhYmFzZS0+aXNVcmxJbXBvcnRDb21w
bGV0ZWQoKSkpIHsKKyAgICAgICAgUGVuZGluZ0ljb25SZXF1ZXN0VmVjdG9yIHJlcXVlc3RzID0g
ZXdrSWNvbkRhdGFiYXNlLT5pY29uUmVxdWVzdHMuZ2V0KHBhZ2VfdXJsKTsKKyAgICAgICAgcmVx
dWVzdHMuYXBwZW5kKEljb25SZXF1ZXN0Q2FsbGJhY2tEYXRhKGNhbGxiYWNrLCB1c2VyRGF0YSwg
ZXZhcykpOworICAgICAgICBld2tJY29uRGF0YWJhc2UtPmljb25SZXF1ZXN0cy5zZXQocGFnZV91
cmwsIHJlcXVlc3RzKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgLy8gUmVz
cG9uZCB3aGVuIGlkbGUuCisgICAgQXN5bmNJY29uUmVxdWVzdFJlc3BvbnNlKiByZXNwb25zZSA9
IG5ldyBBc3luY0ljb25SZXF1ZXN0UmVzcG9uc2UocGFnZV91cmwsIHN1cmZhY2UucmVsZWFzZSgp
LCBJY29uUmVxdWVzdENhbGxiYWNrRGF0YShjYWxsYmFjaywgdXNlckRhdGEsIGV2YXMpKTsKKyAg
ICBlY29yZV9pZGxlcl9hZGQocmVzcG9uZF9pY29uX3JlcXVlc3RfaWRsZSwgcmVzcG9uc2UpOwor
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgZXdrX2Zhdmljb25fZGF0YWJhc2VfaWNvbl9j
aGFuZ2VfY2FsbGJhY2tfYWRkKEV3a19GYXZpY29uX0RhdGFiYXNlKiBld2tJY29uRGF0YWJhc2Us
IEV3a19GYXZpY29uX0RhdGFiYXNlX0ljb25fQ2hhbmdlX0NiIGNhbGxiYWNrLCB2b2lkKiB1c2Vy
RGF0YSkKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihld2tJY29uRGF0YWJhc2Up
OworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKGNhbGxiYWNrKTsKKworICAgIGlmIChl
d2tJY29uRGF0YWJhc2UtPmNoYW5nZUxpc3RlbmVycy5jb250YWlucyhjYWxsYmFjaykpCisgICAg
ICAgIHJldHVybjsKKworICAgIGV3a0ljb25EYXRhYmFzZS0+Y2hhbmdlTGlzdGVuZXJzLmFkZChj
YWxsYmFjaywgSWNvbkNoYW5nZUNhbGxiYWNrRGF0YShjYWxsYmFjaywgdXNlckRhdGEpKTsKK30K
Kwordm9pZCBld2tfZmF2aWNvbl9kYXRhYmFzZV9pY29uX2NoYW5nZV9jYWxsYmFja19kZWwoRXdr
X0Zhdmljb25fRGF0YWJhc2UqIGV3a0ljb25EYXRhYmFzZSwgRXdrX0Zhdmljb25fRGF0YWJhc2Vf
SWNvbl9DaGFuZ2VfQ2IgY2FsbGJhY2spCit7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRV
Uk4oZXdrSWNvbkRhdGFiYXNlKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihjYWxs
YmFjayk7CisKKyAgICBld2tJY29uRGF0YWJhc2UtPmNoYW5nZUxpc3RlbmVycy5yZW1vdmUoY2Fs
bGJhY2spOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwv
ZXdrX2Zhdmljb25fZGF0YWJhc2UuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZs
L2V3a19mYXZpY29uX2RhdGFiYXNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uYzNkNDRlNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZWZsL2V3a19mYXZpY29uX2RhdGFiYXNlLmgKQEAgLTAsMCArMSwxMDggQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKy8qKgorICogQGZpbGUgICAgZXdrX2Zhdmljb25fZGF0YWJhc2UuaAorICog
QGJyaWVmICAgRGVzY3JpYmVzIHRoZSBFd2sgRmF2aWNvbiBEYXRhYmFzZSBBUEkuCisgKi8KKwor
I2lmbmRlZiBld2tfZmF2aWNvbl9kYXRhYmFzZV9oCisjZGVmaW5lIGV3a19mYXZpY29uX2RhdGFi
YXNlX2gKKworI2luY2x1ZGUgPEV2YXMuaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4g
IkMiIHsKKyNlbmRpZgorCisvKiogQ3JlYXRlcyBhIHR5cGUgbmFtZSBmb3IgQGEgX0V3a19GYXZp
Y29uX0RhdGFiYXNlLiAqLwordHlwZWRlZiBzdHJ1Y3QgX0V3a19GYXZpY29uX0RhdGFiYXNlIEV3
a19GYXZpY29uX0RhdGFiYXNlOworCisvKioKKyAqIEB0eXBlZGVmIEV3a19GYXZpY29uX0RhdGFi
YXNlX0ljb25fQ2hhbmdlX0NiIEV3a19GYXZpY29uX0RhdGFiYXNlX0ljb25fQ2hhbmdlX0NiCisg
KiBAYnJpZWYgQ2FsbGJhY2sgdHlwZSBmb3IgdXNlIHdpdGggZXdrX2Zhdmljb25fZGF0YWJhc2Vf
aWNvbl9jaGFuZ2VfY2FsbGJhY2tfYWRkIGFuZCBld2tfZmF2aWNvbl9kYXRhYmFzZV9pY29uX2No
YW5nZV9jYWxsYmFja19kZWwKKyAqLwordHlwZWRlZiB2b2lkICgqRXdrX0Zhdmljb25fRGF0YWJh
c2VfSWNvbl9DaGFuZ2VfQ2IpKGNvbnN0IGNoYXIgKnBhZ2VfdXJsLCB2b2lkICpldmVudF9pbmZv
KTsKKworLyoqCisgKiBAdHlwZWRlZiBFd2tfRmF2aWNvbl9EYXRhYmFzZV9Bc3luY19JY29uX0dl
dF9DYiBFd2tfRmF2aWNvbl9EYXRhYmFzZV9Bc3luY19JY29uX0dldF9DYgorICogQGJyaWVmIENh
bGxiYWNrIHR5cGUgZm9yIHVzZSB3aXRoIGV3a19mYXZpY29uX2RhdGFiYXNlX2FzeW5jX2ljb25f
Z2V0CisgKgorICogVGhlIEBhIGljb24gbWF5IGJlIE5VTEwgaWYgdGhlcmUgaXMgbm8gZmF2aWNv
biBhc3NvY2lhdGVkIHRvIHRoZSBnaXZlbiBAYSBwYWdlX3VybC4KKyAqCisgKiBZb3UgbmVlZCB0
byBjYWxsIGV2YXNfb2JqZWN0X3JlZigpIG9uIHRoZSBAYSBpY29uIGlmIHlvdSB3aXNoIHRvIGtl
ZXAgaXQgYWZ0ZXIgdGhlCisgKiBjYWxsYmFjayBpcyBleGVjdXRlZC4KKyAqLwordHlwZWRlZiB2
b2lkICgqRXdrX0Zhdmljb25fRGF0YWJhc2VfQXN5bmNfSWNvbl9HZXRfQ2IpKGNvbnN0IGNoYXIg
KnBhZ2VfdXJsLCBFdmFzX09iamVjdCAqaWNvbiwgdm9pZCAqZXZlbnRfaW5mbyk7CisKKy8qKgor
ICogUmV0cmlldmVzIGZyb20gdGhlIGRhdGFiYXNlIHRoZSBmYXZpY29uIFVSTCBmb3IgdGhlIGdp
dmVuIEBhIHBhZ2VfdXJsCisgKgorICogQHBhcmFtIGRhdGFiYXNlIGRhdGFiYXNlIG9iamVjdCB0
byBxdWVyeQorICogQHBhcmFtIHBhZ2VfdXJsIFVSTCBvZiB0aGUgcGFnZSB0byBnZXQgdGhlIGZh
dmljb24gVVJMIGZvcgorICoKKyAqIEByZXR1cm4gdGhlIGZhdmljb24gVVJMIHBvaW50ZXIsIHRo
YXQgbWF5IGJlIEBjIE5VTEwuIFRoaXMgcG9pbnRlciBpcworICogICAgICAgICBndWFyYW50ZWVk
IHRvIGJlIGVpbmFfc3RyaW5nc2hhcmUsIHNvIHdoZW5ldmVyIHBvc3NpYmxlCisgKiAgICAgICAg
IHNhdmUgeW91cnNlbGYgc29tZSBjcHUgY3ljbGVzIGFuZCB1c2UKKyAqICAgICAgICAgZWluYV9z
dHJpbmdzaGFyZV9yZWYoKSBpbnN0ZWFkIG9mIGVpbmFfc3RyaW5nc2hhcmVfYWRkKCkgb3IKKyAq
ICAgICAgICAgc3RyZHVwKCkKKyAqLworRUFQSSBjb25zdCBjaGFyICpld2tfZmF2aWNvbl9kYXRh
YmFzZV9pY29uX3VybF9nZXQoRXdrX0Zhdmljb25fRGF0YWJhc2UgKmRhdGFiYXNlLCBjb25zdCBj
aGFyICpwYWdlX3VybCk7CisKKy8qKgorICogUmV0cmlldmVzIGFzeW5jaHJvbm91c2x5IGZyb20g
dGhlIGRhdGFiYXNlIHRoZSBmYXZpY29uIGZvciB0aGUgZ2l2ZW4gQGEgcGFnZV91cmwKKyAqCisg
KiBAcGFyYW0gZGF0YWJhc2UgZGF0YWJhc2Ugb2JqZWN0IHRvIHF1ZXJ5CisgKiBAcGFyYW0gcGFn
ZV91cmwgVVJMIG9mIHRoZSBwYWdlIHRvIGdldCB0aGUgZmF2aWNvbiBmb3IKKyAqIEBwYXJhbSBl
dmFzIFRoZSBjYW52YXMgdG8gYWRkIHRoZSBmYXZpY29uIHRvCisgKiBAcGFyYW0gY2FsbGJhY2sg
Y2FsbGJhY2sgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW4gdGhlIGljb24gaXMgcmV0cmlldmVk
CisgKiBAcGFyYW0gZGF0YSB0aGUgZGF0YSBwb2ludGVyIHRoYXQgd2FzIHRvIGJlIHBhc3NlZCB0
byB0aGUgY2FsbGJhY2sKKyAqCisgKiBAcmV0dXJuIEBjIEVJTkFfVFJVRSBpZiB0aGUgaWNvbiB3
YXMgc3VjY2Vzc2Z1bHkgcmVxdWVzdGVkLCBAYyBFSU5BX0ZBTFNFIG90aGVyd2lzZQorICovCitF
QVBJIEVpbmFfQm9vbCBld2tfZmF2aWNvbl9kYXRhYmFzZV9hc3luY19pY29uX2dldChFd2tfRmF2
aWNvbl9EYXRhYmFzZSAqZGF0YWJhc2UsIGNvbnN0IGNoYXIgKnBhZ2VfdXJsLCBFdmFzICpldmFz
LCBFd2tfRmF2aWNvbl9EYXRhYmFzZV9Bc3luY19JY29uX0dldF9DYiBjYWxsYmFjaywgdm9pZCAq
ZGF0YSk7CisKKy8qKgorICogQWRkIChyZWdpc3RlcikgYSBjYWxsYmFjayBmdW5jdGlvbiB0byBh
IGljb24gY2hhbmdlIGV2ZW50CisgKgorICogQHBhcmFtIGRhdGFiYXNlIGRhdGFiYXNlIG9iamVj
dCB0byByZWdpc3RlciB0aGUgY2FsbGJhY2sKKyAqIEBwYXJhbSBjYWxsYmFjayBjYWxsYmFjayBm
dW5jdGlvbiB0byBiZSBjYWxsZWQgd2hlbiBhbiBpY29uIGNoYW5nZXMKKyAqIEBwYXJhbSBkYXRh
IHRoZSBkYXRhIHBvaW50ZXIgdGhhdCB3YXMgdG8gYmUgcGFzc2VkIHRvIHRoZSBjYWxsYmFjawor
ICovCitFQVBJIHZvaWQgZXdrX2Zhdmljb25fZGF0YWJhc2VfaWNvbl9jaGFuZ2VfY2FsbGJhY2tf
YWRkKEV3a19GYXZpY29uX0RhdGFiYXNlICpkYXRhYmFzZSwgRXdrX0Zhdmljb25fRGF0YWJhc2Vf
SWNvbl9DaGFuZ2VfQ2IgY2FsbGJhY2ssIHZvaWQgKmRhdGEpOworCisvKioKKyAqIERlbGV0ZSAo
dW5yZWdpc3RlcikgYSBjYWxsYmFjayBmdW5jdGlvbiByZWdpc3RlcmVkIHRvIGEgaWNvbiBjaGFu
Z2UgZXZlbnQKKyAqCisgKiBAcGFyYW0gZGF0YWJhc2UgZGF0YWJhc2Ugb2JqZWN0IHRvIHVucmVn
aXN0ZXIgdGhlIGNhbGxiYWNrLgorICogQHBhcmFtIGNhbGxiYWNrIGNhbGxiYWNrIGZ1bmN0aW9u
IHRvIHVucmVnaXN0ZXIKKyAqLworRUFQSSB2b2lkIGV3a19mYXZpY29uX2RhdGFiYXNlX2ljb25f
Y2hhbmdlX2NhbGxiYWNrX2RlbChFd2tfRmF2aWNvbl9EYXRhYmFzZSAqZGF0YWJhc2UsIEV3a19G
YXZpY29uX0RhdGFiYXNlX0ljb25fQ2hhbmdlX0NiIGNhbGxiYWNrKTsKKworI2lmZGVmIF9fY3Bs
dXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8vIGV3a19mYXZpY29uX2RhdGFiYXNlX2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19mYXZpY29uX2Rh
dGFiYXNlX3ByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19m
YXZpY29uX2RhdGFiYXNlX3ByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi45OGVjZjkwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9lZmwvZXdrX2Zhdmljb25fZGF0YWJhc2VfcHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzQgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgZXdrX2Zhdmljb25fZGF0YWJhc2VfcHJpdmF0
ZV9oCisjZGVmaW5lIGV3a19mYXZpY29uX2RhdGFiYXNlX3ByaXZhdGVfaAorCisjaW5jbHVkZSA8
V2ViS2l0Mi9XS0Jhc2UuaD4KKworRXdrX0Zhdmljb25fRGF0YWJhc2UqIGV3a19mYXZpY29uX2Rh
dGFiYXNlX25ldyhXS0ljb25EYXRhYmFzZVJlZiB3a0ljb25EYXRhYmFzZSk7Cit2b2lkIGV3a19m
YXZpY29uX2RhdGFiYXNlX2ZyZWUoRXdrX0Zhdmljb25fRGF0YWJhc2UqIGV3a0ljb25EYXRhYmFz
ZSk7CisKKyNlbmRpZiAvLyBld2tfZmF2aWNvbl9kYXRhYmFzZV9wcml2YXRlX2gKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmNwcAppbmRleCAwN2E5NDIyLi42
OTQyOTcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tf
dmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcu
Y3BwCkBAIC04NSw2ICs4NSw3IEBAIHN0YXRpYyBjb25zdCBpbnQgZGVmYXVsdEN1cnNvclNpemUg
PSAxNjsKIAogdHlwZWRlZiBIYXNoTWFwPHVpbnQ2NF90LCBFd2tfUmVzb3VyY2UqPiBMb2FkaW5n
UmVzb3VyY2VzTWFwOwogc3RhdGljIHZvaWQgX2V3a192aWV3X3ByaXZfbG9hZGluZ19yZXNvdXJj
ZXNfY2xlYXIoTG9hZGluZ1Jlc291cmNlc01hcCYgbG9hZGluZ1Jlc291cmNlc01hcCk7CitzdGF0
aWMgdm9pZCBfZXdrX3ZpZXdfb25fZmF2aWNvbl9jaGFuZ2VkKGNvbnN0IGNoYXIqIHBhZ2VVUkws
IHZvaWQqIGV2ZW50SW5mbyk7CiAKIHR5cGVkZWYgSGFzaE1hcDxjb25zdCBXZWJQYWdlUHJveHkq
LCBjb25zdCBFdmFzX09iamVjdCo+IFBhZ2VWaWV3TWFwOwogCkBAIC0xMjIsNiArMTIzLDcgQEAg
c3RydWN0IF9Fd2tfVmlld19Qcml2YXRlX0RhdGEgewogICAgIFdLRWluYVNoYXJlZFN0cmluZyB0
aGVtZTsKICAgICBXS0VpbmFTaGFyZWRTdHJpbmcgY3VzdG9tRW5jb2Rpbmc7CiAgICAgV0tFaW5h
U2hhcmVkU3RyaW5nIGN1cnNvckdyb3VwOworICAgIFdLRWluYVNoYXJlZFN0cmluZyBmYXZpY29u
VVJMOwogICAgIEV2YXNfT2JqZWN0KiBjdXJzb3JPYmplY3Q7CiAgICAgTG9hZGluZ1Jlc291cmNl
c01hcCBsb2FkaW5nUmVzb3VyY2VzTWFwOwogICAgIEV3a19CYWNrX0ZvcndhcmRfTGlzdCogYmFj
a0ZvcndhcmRMaXN0OwpAQCAtMTcxLDYgKzE3MywxMCBAQCBzdHJ1Y3QgX0V3a19WaWV3X1ByaXZh
dGVfRGF0YSB7CiAgICAgewogICAgICAgICBfZXdrX3ZpZXdfcHJpdl9sb2FkaW5nX3Jlc291cmNl
c19jbGVhcihsb2FkaW5nUmVzb3VyY2VzTWFwKTsKIAorICAgICAgICAvKiBVbnJlZ2lzdGVyIGlj
b24gY2hhbmdlIGNhbGxiYWNrICovCisgICAgICAgIEV3a19GYXZpY29uX0RhdGFiYXNlKiBpY29u
RGF0YWJhc2UgPSBld2tfY29udGV4dF9mYXZpY29uX2RhdGFiYXNlX2dldChjb250ZXh0KTsKKyAg
ICAgICAgZXdrX2Zhdmljb25fZGF0YWJhc2VfaWNvbl9jaGFuZ2VfY2FsbGJhY2tfZGVsKGljb25E
YXRhYmFzZSwgX2V3a192aWV3X29uX2Zhdmljb25fY2hhbmdlZCk7CisKICAgICAgICAgaWYgKGN1
cnNvck9iamVjdCkKICAgICAgICAgICAgIGV2YXNfb2JqZWN0X2RlbChjdXJzb3JPYmplY3QpOwog
CkBAIC0yNTAsNiArMjU2LDE3IEBAIHN0YXRpYyB2b2lkIF9ld2tfdmlld19zbWFydF9jaGFuZ2Vk
KEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSkKICAgICBldmFzX29iamVjdF9zbWFydF9j
aGFuZ2VkKHNtYXJ0RGF0YS0+c2VsZik7CiB9CiAKK3N0YXRpYyB2b2lkIF9ld2tfdmlld19vbl9m
YXZpY29uX2NoYW5nZWQoY29uc3QgY2hhciogcGFnZVVSTCwgdm9pZCogZXZlbnRJbmZvKQorewor
ICAgIEV2YXNfT2JqZWN0KiBld2tWaWV3ID0gc3RhdGljX2Nhc3Q8RXZhc19PYmplY3QqPihldmVu
dEluZm8pOworCisgICAgY29uc3QgY2hhciogdmlld191cmwgPSBld2tfdmlld191cmxfZ2V0KGV3
a1ZpZXcpOworICAgIGlmIChzdHJjYXNlY21wKHZpZXdfdXJsLCBwYWdlVVJMKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgZXdrX3ZpZXdfdXBkYXRlX2ljb24oZXdrVmlldyk7Cit9CisKIC8vIERl
ZmF1bHQgRXZlbnQgSGFuZGxpbmcuCiBzdGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld19zbWFydF9m
b2N1c19pbihFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEpCiB7CkBAIC04MzQsNiArODUx
LDEwIEBAIHN0YXRpYyB2b2lkIF9ld2tfdmlld19pbml0aWFsaXplKEV2YXNfT2JqZWN0KiBld2tW
aWV3LCBFd2tfQ29udGV4dCogY29udGV4dCwgV0tQCiAgICAgcHJpdi0+cGFnZVByb3h5LT5mdWxs
U2NyZWVuTWFuYWdlcigpLT5zZXRXZWJWaWV3KGV3a1ZpZXcpOwogICAgIGV3a19zZXR0aW5nc19m
dWxsc2NyZWVuX2VuYWJsZWRfc2V0KHByaXYtPnNldHRpbmdzLmdldCgpLCB0cnVlKTsKICNlbmRp
ZgorCisgICAgLyogTGlzdGVuIGZvciBmYXZpY29uIGNoYW5nZXMgKi8KKyAgICBFd2tfRmF2aWNv
bl9EYXRhYmFzZSogaWNvbkRhdGFiYXNlID0gZXdrX2NvbnRleHRfZmF2aWNvbl9kYXRhYmFzZV9n
ZXQocHJpdi0+Y29udGV4dCk7CisgICAgZXdrX2Zhdmljb25fZGF0YWJhc2VfaWNvbl9jaGFuZ2Vf
Y2FsbGJhY2tfYWRkKGljb25EYXRhYmFzZSwgX2V3a192aWV3X29uX2Zhdmljb25fY2hhbmdlZCwg
ZXdrVmlldyk7CiB9CiAKIHN0YXRpYyBFdmFzX09iamVjdCogX2V3a192aWV3X2FkZF93aXRoX3Nt
YXJ0KEV2YXMqIGNhbnZhcywgRXZhc19TbWFydCogc21hcnQpCkBAIC05MzEsNiArOTUyLDkgQEAg
dm9pZCBld2tfdmlld191cmxfdXBkYXRlKEV2YXNfT2JqZWN0KiBld2tWaWV3KQogICAgIHByaXYt
PnVybCA9IGFjdGl2ZVVSTC51dGY4KCkuZGF0YSgpOwogICAgIGNvbnN0IGNoYXIqIGNhbGxiYWNr
QXJndW1lbnQgPSBzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4ocHJpdi0+dXJsKTsKICAgICBldmFz
X29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKGV3a1ZpZXcsICJ1cmwsY2hhbmdlZCIsIGNvbnN0
X2Nhc3Q8Y2hhcio+KGNhbGxiYWNrQXJndW1lbnQpKTsKKworICAgIC8vIFVwZGF0ZSB0aGUgdmll
dydzIGZhdmljb24uCisgICAgZXdrX3ZpZXdfdXBkYXRlX2ljb24oZXdrVmlldyk7CiB9CiAKIEVp
bmFfQm9vbCBld2tfdmlld191cmxfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBjb25zdCBjaGFy
KiB1cmwpCkBAIC05NTMsNiArOTc3LDE0IEBAIGNvbnN0IGNoYXIqIGV3a192aWV3X3VybF9nZXQo
Y29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiAgICAgcmV0dXJuIHByaXYtPnVybDsKIH0KIAor
Y29uc3QgY2hhciAqZXdrX3ZpZXdfaWNvbl91cmxfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0ICpld2tW
aWV3KQoreworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRh
LCAwKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCAw
KTsKKworICAgIHJldHVybiBwcml2LT5mYXZpY29uVVJMOworfQorCiBFaW5hX0Jvb2wgZXdrX3Zp
ZXdfcmVsb2FkKEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewogICAgIEVXS19WSUVXX1NEX0dFVF9P
Ul9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBmYWxzZSk7CkBAIC0xNTM3LDYgKzE1NjksMjYg
QEAgdm9pZCBld2tfdmlld19iYWNrX2ZvcndhcmRfbGlzdF9jaGFuZ2VkKEV2YXNfT2JqZWN0KiBl
d2tWaWV3KQogCiAvKioKICAqIEBpbnRlcm5hbAorICogVXBkYXRlIHRoZSB2aWV3J3MgZmF2aWNv
biBhbmQgZW1pdHMgYSAiaWNvbixjaGFuZ2VkIiBzaWduYWwgaWYgaXQgaGFzCisgKiBjaGFuZ2Vk
LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW5ldmVyIHRoZSBVUkwgaGFzIGNo
YW5nZWQgb3Igd2hlbiB0aGUgaWNvbiBmb3IKKyAqIHRoZSBjdXJyZW50IHBhZ2UgVVJMIGhhcyBj
aGFuZ2VkLgorICovCit2b2lkIGV3a192aWV3X3VwZGF0ZV9pY29uKEV2YXNfT2JqZWN0KiBld2tW
aWV3KQoreworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRh
KTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2KTsKKwor
ICAgIEV3a19GYXZpY29uX0RhdGFiYXNlKiBpY29uRGF0YWJhc2UgPSBld2tfY29udGV4dF9mYXZp
Y29uX2RhdGFiYXNlX2dldChwcml2LT5jb250ZXh0KTsKKyAgICBBU1NFUlQoaWNvbkRhdGFiYXNl
KTsKKworICAgIHByaXYtPmZhdmljb25VUkwgPSBld2tfZmF2aWNvbl9kYXRhYmFzZV9pY29uX3Vy
bF9nZXQoaWNvbkRhdGFiYXNlLCBwcml2LT51cmwpOworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2Nh
bGxiYWNrX2NhbGwoZXdrVmlldywgImljb24sY2hhbmdlZCIsIDApOworfQorCisvKioKKyAqIEBp
bnRlcm5hbAogICogUmVwb3J0cyB0aGF0IGEgbmF2aWdhdGlvbiBwb2xpY3kgZGVjaXNpb24gc2hv
dWxkIGJlIHRha2VuLgogICoKICAqIEVtaXRzIHNpZ25hbDogInBvbGljeSxkZWNpc2lvbixuYXZp
Z2F0aW9uIi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3
a192aWV3LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5oCmlu
ZGV4IGU5Y2JlNGUuLjBlMGYyY2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZWZsL2V3a192aWV3LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9l
ZmwvZXdrX3ZpZXcuaApAQCAtNDMsNiArNDMsNyBAQAogICogICB3aGVuIGRvbmUgdG8gY29udGlu
dWUgd2l0aCB0aGUgZm9ybSBzdWJtaXNzaW9uLiBJZiB0aGUgbGFzdCByZWZlcmVuY2UgaXMgcmVt
b3ZlZCBvbiBhCiAgKiAgICNFd2tfRm9ybV9TdWJtaXNzaW9uX1JlcXVlc3QgYW5kIHRoZSBmb3Jt
IGhhcyBub3QgYmVlbiBzdWJtaXR0ZWQgeWV0LAogICogICBld2tfZm9ybV9zdWJtaXNzaW9uX3Jl
cXVlc3Rfc3VibWl0KCkgd2lsbCBiZSBjYWxsZWQgYXV0b21hdGljYWxseS4KKyAqIC0gImljb24s
Y2hhbmdlZCIsIHZvaWQ6IHJlcG9ydHMgdGhhdCB0aGUgdmlldydzIGZhdmljb24gaGFzIGNoYW5n
ZWQuCiAgKiAtICJpbnRlbnQscmVxdWVzdCxuZXciLCBFd2tfSW50ZW50KjogcmVwb3J0cyBuZXcg
V2ViIGludGVudCByZXF1ZXN0LgogICogLSAiaW50ZW50LHNlcnZpY2UscmVnaXN0ZXIiLCBFd2tf
SW50ZW50X1NlcnZpY2UqOiByZXBvcnRzIG5ldyBXZWIgaW50ZW50IHNlcnZpY2UgcmVnaXN0cmF0
aW9uLgogICogLSAibG9hZCxlcnJvciIsIGNvbnN0IEV3a19FcnJvcio6IHJlcG9ydHMgbWFpbiBm
cmFtZSBsb2FkIGZhaWxlZC4KQEAgLTM1Nyw2ICszNTgsMTggQEAgRUFQSSBFaW5hX0Jvb2wgZXdr
X3ZpZXdfdXJsX3NldChFdmFzX09iamVjdCAqbywgY29uc3QgY2hhciAqdXJsKTsKIEVBUEkgY29u
c3QgY2hhciAqZXdrX3ZpZXdfdXJsX2dldChjb25zdCBFdmFzX09iamVjdCAqbyk7CiAKIC8qKgor
ICogUmV0dXJucyB0aGUgY3VycmVudCBpY29uIFVSTCBvZiB2aWV3IG9iamVjdC4KKyAqCisgKiBJ
dCByZXR1cm5zIGFuIGludGVybmFsIHN0cmluZyBhbmQgc2hvdWxkIG5vdAorICogYmUgbW9kaWZp
ZWQuIFRoZSBzdHJpbmcgaXMgZ3VhcmFudGVlZCB0byBiZSBzdHJpbmdzaGFyZWQuCisgKgorICog
QHBhcmFtIG8gdmlldyBvYmplY3QgdG8gZ2V0IGN1cnJlbnQgaWNvbiBVUkwKKyAqCisgKiBAcmV0
dXJuIGN1cnJlbnQgaWNvbiBVUkwgb24gc3VjY2VzcyBvciBAYyBOVUxMIGlmIHVuYXZhaWxhYmxl
IG9yIG9uIGZhaWx1cmUKKyAqLworRUFQSSBjb25zdCBjaGFyICpld2tfdmlld19pY29uX3VybF9n
ZXQoY29uc3QgRXZhc19PYmplY3QgKm8pOworCisvKioKICAqIEFza3MgdGhlIG1haW4gZnJhbWUg
dG8gcmVsb2FkIHRoZSBjdXJyZW50IGRvY3VtZW50LgogICoKICAqIEBwYXJhbSBvIHZpZXcgb2Jq
ZWN0IHRvIHJlbG9hZCBjdXJyZW50IGRvY3VtZW50CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlld19wcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlld19wcml2YXRlLmgKaW5kZXggOGVjOTFjMS4uYmI5M2Y5
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXdf
cHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3
X3ByaXZhdGUuaApAQCAtODUsNiArODUsNyBAQCB2b2lkIGV3a192aWV3X3RleHRfZm91bmQoRXZh
c19PYmplY3QqIGV3a1ZpZXcsIHVuc2lnbmVkIGludCBtYXRjaENvdW50KTsKIHZvaWQgZXdrX3Zp
ZXdfdXJsX3VwZGF0ZShFdmFzX09iamVjdCogZXdrVmlldyk7CiB2b2lkIGV3a192aWV3X2NvbnRl
bnRzX3NpemVfY2hhbmdlZChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldywgY29uc3QgV2ViQ29y
ZTo6SW50U2l6ZSYpOwogdm9pZCBld2tfdmlld19iYWNrX2ZvcndhcmRfbGlzdF9jaGFuZ2VkKEV2
YXNfT2JqZWN0KiBld2tWaWV3KTsKK3ZvaWQgZXdrX3ZpZXdfdXBkYXRlX2ljb24oRXZhc19PYmpl
Y3QqIGV3a1ZpZXcpOwogCiBFdmFzX09iamVjdCogZXdrX3ZpZXdfYmFzZV9hZGQoRXZhcyogY2Fu
dmFzLCBXS0NvbnRleHRSZWYsIFdLUGFnZUdyb3VwUmVmKTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvdGVzdHMvcmVzb3VyY2VzL2JsYW5rLmljbyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL3Jlc291cmNlcy9ibGFuay5pY28K
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uZWE4NDhiOTkxNmU1OTA4NDQxM2ZjMWU3YTA5MGRlYmY1ZjQ5MTRkYgpHSVQg
YmluYXJ5IHBhdGNoCmxpdGVyYWwgMTk4CnBjbVpRelU8NSh8MFZYaUxmcXtXUjQyVSY9U09BQz5m
RVhsPzM7aDU4QUQwd2UjUX1SWTFWako7CgpsaXRlcmFsIDAKSGNtVj9kMDAwMDEKCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC90ZXN0cy90ZXN0X2V3azJfY29u
dGV4dC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC90ZXN0cy90ZXN0X2V3
azJfY29udGV4dC5jcHAKaW5kZXggZGZmNDg1MzQuLjNkZjU3NWMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL3Rlc3RfZXdrMl9jb250ZXh0LmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC90ZXN0cy90ZXN0X2V3azJfY29u
dGV4dC5jcHAKQEAgLTUzLDYgKzUzLDE0IEBAIFRFU1RfRihFV0syVW5pdFRlc3RCYXNlLCBld2tf
Y29udGV4dF9jb29raWVfbWFuYWdlcl9nZXQpCiAgICAgQVNTRVJUX0VRKGNvb2tpZU1hbmFnZXIs
IGV3a19jb250ZXh0X2Nvb2tpZV9tYW5hZ2VyX2dldChjb250ZXh0KSk7CiB9CiAKK1RFU1RfRihF
V0syVW5pdFRlc3RCYXNlLCBld2tfY29udGV4dF9mYXZpY29uX2RhdGFiYXNlX2dldCkKK3sKKyAg
ICBFd2tfQ29udGV4dCogY29udGV4dCA9IGV3a192aWV3X2NvbnRleHRfZ2V0KHdlYlZpZXcoKSk7
CisgICAgRXdrX0Zhdmljb25fRGF0YWJhc2UqIGZhdmljb25EYXRhYmFzZSA9IGV3a19jb250ZXh0
X2Zhdmljb25fZGF0YWJhc2VfZ2V0KGNvbnRleHQpOworICAgIEFTU0VSVF9UUlVFKGZhdmljb25E
YXRhYmFzZSk7CisgICAgQVNTRVJUX0VRKGZhdmljb25EYXRhYmFzZSwgZXdrX2NvbnRleHRfZmF2
aWNvbl9kYXRhYmFzZV9nZXQoY29udGV4dCkpOworfQorCiBzdGF0aWMgdm9pZCBzY2hlbWVSZXF1
ZXN0Q2FsbGJhY2soRXdrX1VybF9TY2hlbWVfUmVxdWVzdCogcmVxdWVzdCwgdm9pZCogdXNlckRh
dGEpCiB7CiAgICAgY29uc3QgY2hhciogc2NoZW1lID0gZXdrX3VybF9zY2hlbWVfcmVxdWVzdF9z
Y2hlbWVfZ2V0KHJlcXVlc3QpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9lZmwvdGVzdHMvdGVzdF9ld2syX2Zhdmljb25fZGF0YWJhc2UuY3BwIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvdGVzdHMvdGVzdF9ld2syX2Zhdmljb25fZGF0YWJhc2Uu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhNTdiOTEKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC90ZXN0cy90ZXN0X2V3
azJfZmF2aWNvbl9kYXRhYmFzZS5jcHAKQEAgLTAsMCArMSwxNjkgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIlVuaXRUZXN0VXRpbHMvRVdL
MlVuaXRUZXN0QmFzZS5oIgorI2luY2x1ZGUgIlVuaXRUZXN0VXRpbHMvRVdLMlVuaXRUZXN0RW52
aXJvbm1lbnQuaCIKKyNpbmNsdWRlICJVbml0VGVzdFV0aWxzL0VXSzJVbml0VGVzdFNlcnZlci5o
IgorI2luY2x1ZGUgIldLRWluYVNoYXJlZFN0cmluZy5oIgorI2luY2x1ZGUgPEVXZWJLaXQyLmg+
CisjaW5jbHVkZSA8RWNvcmUuaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8
d3RmL1Bhc3NPd25QdHIuaD4KKwordXNpbmcgbmFtZXNwYWNlIEVXSzJVbml0VGVzdDsKKworZXh0
ZXJuIEVXSzJVbml0VGVzdEVudmlyb25tZW50KiBlbnZpcm9ubWVudDsKKworc3RhdGljIHZvaWQg
c2VydmVyQ2FsbGJhY2soU291cFNlcnZlciogaHR0cFNlcnZlciwgU291cE1lc3NhZ2UqIG1lc3Nh
Z2UsIGNvbnN0IGNoYXIqIHBhdGgsIEdIYXNoVGFibGUqLCBTb3VwQ2xpZW50Q29udGV4dCosIGdw
b2ludGVyKQoreworICAgIGlmIChtZXNzYWdlLT5tZXRob2QgIT0gU09VUF9NRVRIT0RfR0VUKSB7
CisgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX05P
VF9JTVBMRU1FTlRFRCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIXN0cmNt
cChwYXRoLCAiL2Zhdmljb24uaWNvIikpIHsKKyAgICAgICAgQ1N0cmluZyBmYXZpY29uUGF0aCA9
IGVudmlyb25tZW50LT5wYXRoRm9yUmVzb3VyY2UoImJsYW5rLmljbyIpOworICAgICAgICBFaW5h
X0ZpbGUqIGYgPSBlaW5hX2ZpbGVfb3BlbihmYXZpY29uUGF0aC5kYXRhKCksIGZhbHNlKTsKKyAg
ICAgICAgaWYgKCFmKSB7CisgICAgICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNz
YWdlLCBTT1VQX1NUQVRVU19OT1RfRk9VTkQpOworICAgICAgICAgICAgc291cF9tZXNzYWdlX2Jv
ZHlfY29tcGxldGUobWVzc2FnZS0+cmVzcG9uc2VfYm9keSk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKworICAgICAgICBzaXplX3QgZmlsZVNpemUgPSBlaW5hX2ZpbGVfc2l6ZV9n
ZXQoZik7CisKKyAgICAgICAgdm9pZCogY29udGVudHMgPSBlaW5hX2ZpbGVfbWFwX2FsbChmLCBF
SU5BX0ZJTEVfUE9QVUxBVEUpOworICAgICAgICBpZiAoIWNvbnRlbnRzKSB7CisgICAgICAgICAg
ICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19OT1RfRk9VTkQp
OworICAgICAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfY29tcGxldGUobWVzc2FnZS0+cmVzcG9u
c2VfYm9keSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBzb3Vw
X21lc3NhZ2VfYm9keV9hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllf
Q09QWSwgY29udGVudHMsIGZpbGVTaXplKTsKKyAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0
dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfT0spOworICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9j
b21wbGV0ZShtZXNzYWdlLT5yZXNwb25zZV9ib2R5KTsKKworICAgICAgICBlaW5hX2ZpbGVfbWFw
X2ZyZWUoZiwgY29udGVudHMpOworICAgICAgICBlaW5hX2ZpbGVfY2xvc2UoZik7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBjb25zdCBjaGFyIGNvbnRlbnRzW10gPSAiPGh0bWw+PGJv
ZHk+ZmF2aWNvbiB0ZXN0PC9ib2R5PjwvaHRtbD4iOworICAgIHNvdXBfbWVzc2FnZV9zZXRfc3Rh
dHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX09LKTsKKyAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBl
bmQobWVzc2FnZS0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfQ09QWSwgY29udGVudHMsIHN0
cmxlbihjb250ZW50cykpOworICAgIHNvdXBfbWVzc2FnZV9ib2R5X2NvbXBsZXRlKG1lc3NhZ2Ut
PnJlc3BvbnNlX2JvZHkpOworfQorCitzdGF0aWMgdm9pZCBvbkljb25DaGFuZ2VkKHZvaWQqIHVz
ZXJEYXRhLCBFdmFzX09iamVjdCosIHZvaWQqIGV2ZW50SW5mbykKK3sKKyAgICBib29sKiBpY29u
Q2hhbmdlZCA9IHN0YXRpY19jYXN0PGJvb2wqPih1c2VyRGF0YSk7CisgICAgKmljb25DaGFuZ2Vk
ID0gdHJ1ZTsKK30KKworVEVTVF9GKEVXSzJVbml0VGVzdEJhc2UsIGV3a19mYXZpY29uX2RhdGFi
YXNlX3VybF9nZXQpCit7CisgICAgT3duUHRyPEVXSzJVbml0VGVzdFNlcnZlcj4gaHR0cFNlcnZl
ciA9IGFkb3B0UHRyKG5ldyBFV0syVW5pdFRlc3RTZXJ2ZXIpOworICAgIGh0dHBTZXJ2ZXItPnJ1
bihzZXJ2ZXJDYWxsYmFjayk7CisKKyAgICBib29sIGljb25DaGFuZ2VkID0gZmFsc2U7CisgICAg
ZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfYWRkKHdlYlZpZXcoKSwgImljb24sY2hhbmdlZCIs
IG9uSWNvbkNoYW5nZWQsICZpY29uQ2hhbmdlZCk7CisKKyAgICAvLyBXZSBuZWVkIHRvIGxvYWQg
dGhlIHBhZ2UgZmlyc3QgdG8gZW5zdXJlIHRoZSBpY29uIGRhdGEgd2lsbCBiZQorICAgIC8vIGlu
IHRoZSBkYXRhYmFzZSBpbiBjYXNlIHRoZXJlJ3MgYW4gYXNzb2NpYXRlZCBmYXZpY29uLgorICAg
IEFTU0VSVF9UUlVFKGxvYWRVcmxTeW5jKGh0dHBTZXJ2ZXItPmdldFVSTEZvclBhdGgoIi8iKS5k
YXRhKCkpKTsKKworICAgIHdoaWxlICghaWNvbkNoYW5nZWQpCisgICAgICAgIGVjb3JlX21haW5f
bG9vcF9pdGVyYXRlKCk7CisKKyAgICBBU1NFUlRfVFJVRShpY29uQ2hhbmdlZCk7CisgICAgZXZh
c19vYmplY3Rfc21hcnRfY2FsbGJhY2tfZGVsKHdlYlZpZXcoKSwgImljb24sY2hhbmdlZCIsIG9u
SWNvbkNoYW5nZWQpOworCisgICAgLy8gQ2hlY2sgdGhlIEFQSSByZXRyaWV2aW5nIGEgZmF2aWNv
biBVUkwuCisgICAgRXdrX0NvbnRleHQqIGNvbnRleHQgPSBld2tfdmlld19jb250ZXh0X2dldCh3
ZWJWaWV3KCkpOworICAgIEV3a19GYXZpY29uX0RhdGFiYXNlKiBmYXZpY29uRGF0YWJhc2UgPSBl
d2tfY29udGV4dF9mYXZpY29uX2RhdGFiYXNlX2dldChjb250ZXh0KTsKKyAgICBBU1NFUlRfVFJV
RShmYXZpY29uRGF0YWJhc2UpOworCisgICAgQ1N0cmluZyBleHBlY3RlZEZhdmljb25VUkwgPSBo
dHRwU2VydmVyLT5nZXRVUkxGb3JQYXRoKCIvZmF2aWNvbi5pY28iKTsKKyAgICBXS0VpbmFTaGFy
ZWRTdHJpbmcgaWNvblVSTCA9IGV3a19mYXZpY29uX2RhdGFiYXNlX2ljb25fdXJsX2dldChmYXZp
Y29uRGF0YWJhc2UsIGV3a192aWV3X3VybF9nZXQod2ViVmlldygpKSk7CisgICAgRVhQRUNUX1NU
UkVRKGV4cGVjdGVkRmF2aWNvblVSTC5kYXRhKCksIGljb25VUkwpOworCisgICAgY29uc3QgY2hh
ciogdmlld0ljb25VUkwgPSBld2tfdmlld19pY29uX3VybF9nZXQod2ViVmlldygpKTsKKyAgICBF
WFBFQ1RfU1RSRVEoZXhwZWN0ZWRGYXZpY29uVVJMLmRhdGEoKSwgdmlld0ljb25VUkwpOworfQor
CitzdGF0aWMgdm9pZCBvbkljb25EYXRhUmVhZHkoY29uc3QgY2hhciogcGFnZV91cmwsIEV2YXNf
T2JqZWN0KiBpY29uLCB2b2lkKiBldmVudF9pbmZvKQoreworICAgIEV2YXNfT2JqZWN0KiogcmV0
dXJuSWNvbiA9IHN0YXRpY19jYXN0PEV2YXNfT2JqZWN0Kio+KGV2ZW50X2luZm8pOworICAgIGlm
IChpY29uKQorICAgICAgICBldmFzX29iamVjdF9yZWYoaWNvbik7CisgICAgKnJldHVybkljb24g
PSBpY29uOworfQorCitzdHJ1Y3QgSWNvblJlcXVlc3REYXRhIHsKKyAgICBFdmFzX09iamVjdCog
dmlldzsKKyAgICBFdmFzX09iamVjdCogaWNvbjsKK307CisKK3N0YXRpYyB2b2lkIHJlcXVlc3RG
YXZpY29uRGF0YSh2b2lkKiB1c2VyRGF0YSwgRXZhc19PYmplY3QqLCB2b2lkKiBldmVudEluZm8p
Cit7CisgICAgSWNvblJlcXVlc3REYXRhKiBkYXRhID0gc3RhdGljX2Nhc3Q8SWNvblJlcXVlc3RE
YXRhKj4odXNlckRhdGEpOworCisgICAgLy8gQ2hlY2sgdGhlIEFQSSByZXRyaWV2aW5nIGEgdmFs
aWQgZmF2aWNvbi4KKyAgICBFd2tfQ29udGV4dCogY29udGV4dCA9IGV3a192aWV3X2NvbnRleHRf
Z2V0KGRhdGEtPnZpZXcpOworICAgIEV3a19GYXZpY29uX0RhdGFiYXNlKiBmYXZpY29uRGF0YWJh
c2UgPSBld2tfY29udGV4dF9mYXZpY29uX2RhdGFiYXNlX2dldChjb250ZXh0KTsKKyAgICBBU1NF
UlRfVFJVRShmYXZpY29uRGF0YWJhc2UpOworCisgICAgRXZhcyogZXZhcyA9IGV2YXNfb2JqZWN0
X2V2YXNfZ2V0KGRhdGEtPnZpZXcpOworICAgIEFTU0VSVF9UUlVFKGV3a19mYXZpY29uX2RhdGFi
YXNlX2FzeW5jX2ljb25fZ2V0KGZhdmljb25EYXRhYmFzZSwgZXdrX3ZpZXdfdXJsX2dldChkYXRh
LT52aWV3KSwgZXZhcywgb25JY29uRGF0YVJlYWR5LCAmZGF0YS0+aWNvbikpOworfQorCitURVNU
X0YoRVdLMlVuaXRUZXN0QmFzZSwgZXdrX2Zhdmljb25fZGF0YWJhc2VfYXN5bmNfaWNvbl9nZXQp
Cit7CisgICAgT3duUHRyPEVXSzJVbml0VGVzdFNlcnZlcj4gaHR0cFNlcnZlciA9IGFkb3B0UHRy
KG5ldyBFV0syVW5pdFRlc3RTZXJ2ZXIpOworICAgIGh0dHBTZXJ2ZXItPnJ1bihzZXJ2ZXJDYWxs
YmFjayk7CisKKyAgICBJY29uUmVxdWVzdERhdGEgZGF0YSA9IHsgd2ViVmlldygpLCAwIH07Cisg
ICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfYWRkKHdlYlZpZXcoKSwgImljb24sY2hhbmdl
ZCIsIHJlcXVlc3RGYXZpY29uRGF0YSwgJmRhdGEpOworCisgICAgLy8gV2UgbmVlZCB0byBsb2Fk
IHRoZSBwYWdlIGZpcnN0IHRvIGVuc3VyZSB0aGUgaWNvbiBkYXRhIHdpbGwgYmUKKyAgICAvLyBp
biB0aGUgZGF0YWJhc2UgaW4gY2FzZSB0aGVyZSdzIGFuIGFzc29jaWF0ZWQgZmF2aWNvbi4KKyAg
ICBBU1NFUlRfVFJVRShsb2FkVXJsU3luYyhodHRwU2VydmVyLT5nZXRVUkxGb3JQYXRoKCIvIiku
ZGF0YSgpKSk7CisKKyAgICB3aGlsZSAoIWRhdGEuaWNvbikKKyAgICAgICAgZWNvcmVfbWFpbl9s
b29wX2l0ZXJhdGUoKTsKKworICAgIEFTU0VSVF9UUlVFKGRhdGEuaWNvbik7CisgICAgZXZhc19v
YmplY3Rfc21hcnRfY2FsbGJhY2tfZGVsKHdlYlZpZXcoKSwgImljb24sY2hhbmdlZCIsIHJlcXVl
c3RGYXZpY29uRGF0YSk7CisKKyAgICAvLyBJdCBpcyBhIDE2eDE2IGZhdmljb24uCisgICAgaW50
IHdpZHRoLCBoZWlnaHQ7CisgICAgZXZhc19vYmplY3RfaW1hZ2Vfc2l6ZV9nZXQoZGF0YS5pY29u
LCAmd2lkdGgsICZoZWlnaHQpOworICAgIEVYUEVDVF9FUSgxNiwgd2lkdGgpOworICAgIEVYUEVD
VF9FUSgxNiwgaGVpZ2h0KTsKKworICAgIGV2YXNfb2JqZWN0X3VucmVmKGRhdGEuaWNvbik7Cit9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYkNvbnRleHRFZmwu
Y3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJDb250ZXh0RWZsLmNwcAppbmRl
eCA4YTQ3OWQyLi41YWZkNzllIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
ZWZsL1dlYkNvbnRleHRFZmwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwv
V2ViQ29udGV4dEVmbC5jcHAKQEAgLTU0LDggKzU0LDcgQEAgU3RyaW5nIFdlYkNvbnRleHQ6OnBs
YXRmb3JtRGVmYXVsdERhdGFiYXNlRGlyZWN0b3J5KCkgY29uc3QKIAogU3RyaW5nIFdlYkNvbnRl
eHQ6OnBsYXRmb3JtRGVmYXVsdEljb25EYXRhYmFzZVBhdGgoKSBjb25zdAogewotICAgIG5vdElt
cGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuICIiOworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4
KGVmcmVldF9kYXRhX2hvbWVfZ2V0KCkpICsgIi9XZWJLaXRFZmwvSWNvbkRhdGFiYXNlIjsKIH0K
IAogU3RyaW5nIFdlYkNvbnRleHQ6OnBsYXRmb3JtRGVmYXVsdExvY2FsU3RvcmFnZURpcmVjdG9y
eSgpIGNvbnN0Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>