<?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>178056</bug_id>
          
          <creation_ts>2017-10-07 18:27:13 -0700</creation_ts>
          <short_desc>dragenter and dragleave shouldn&apos;t use the same data transfer object</short_desc>
          <delta_ts>2017-10-09 11:55:16 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>UI Events</component>
          <version>WebKit 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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>178060</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>buildbot</cc>
    
    <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>dbates</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>jlewis3</cc>
    
    <cc>kangil.han</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>wenson_hsieh</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1357993</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-10-07 18:27:13 -0700</bug_when>
    <thetext>We&apos;re supposed to be creating a distinct DataTransfer object for each dragenter &amp; dragleave event we fire.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1357996</commentid>
    <comment_count>1</comment_count>
      <attachid>323111</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-10-07 18:39:12 -0700</bug_when>
    <thetext>Created attachment 323111
Fixes the bug and refactors code</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1358024</commentid>
    <comment_count>2</comment_count>
      <attachid>323117</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-10-07 20:25:47 -0700</bug_when>
    <thetext>Created attachment 323117
Skipped the test on Windows</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1358040</commentid>
    <comment_count>3</comment_count>
      <attachid>323117</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-10-07 23:41:04 -0700</bug_when>
    <thetext>Comment on attachment 323117
Skipped the test on Windows

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

&gt; Source/WebCore/page/DragController.cpp:697
&gt; +    if (!destinationOperation)
&gt; +        operation = defaultOperationForDrag(sourceOperation);
&gt; +    else if (!(sourceOperation &amp; *destinationOperation)) // The element picked an operation which is not supported by the source
&gt;          operation = DragOperationNone;
&gt; -    }
&gt; +    else
&gt; +        operation = *destinationOperation;

Stylistic question about * vs. using the value() function on optionals. I almost always use the named function, but I am not sure it’s better.

&gt; Source/WebCore/page/EventHandler.cpp:2277
&gt; +bool EventHandler::dispatchDragEnterOrDragOverEvent(const AtomicString&amp; eventType, Element&amp; target, const PlatformMouseEvent&amp; event,
&gt; +    std::unique_ptr&lt;Pasteboard&gt;&amp;&amp; pasteborad, DragOperation sourceOperation, bool draggingFiles, std::optional&lt;DragOperation&gt;&amp; destinationOperation)

Out arguments are kind of ugly. Sure would be nice if it could all be in the return value instead of a return value plus an out argument.

&gt; Source/WebCore/page/EventHandler.cpp:2289
&gt; +bool EventHandler::updateDragAndDrop(const PlatformMouseEvent&amp; event, std::function&lt;std::unique_ptr&lt;Pasteboard&gt;()&gt; makePasteboard, DragOperation sourceOperation, bool draggingFiles, std::optional&lt;DragOperation&gt;&amp; destinationOperation)

Ditto.

Also, a std::function can be expensive to copy, so it would be nice if it was a const&amp;, assuming it’s always called synchronously and not saved for later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1358050</commentid>
    <comment_count>4</comment_count>
      <attachid>323117</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2017-10-08 00:17:24 -0700</bug_when>
    <thetext>Comment on attachment 323117
Skipped the test on Windows

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

&gt;&gt; Source/WebCore/page/EventHandler.cpp:2277
&gt;&gt; +    std::unique_ptr&lt;Pasteboard&gt;&amp;&amp; pasteborad, DragOperation sourceOperation, bool draggingFiles, std::optional&lt;DragOperation&gt;&amp; destinationOperation)
&gt; 
&gt; Out arguments are kind of ugly. Sure would be nice if it could all be in the return value instead of a return value plus an out argument.

Nit - &quot;pasteborad&quot; =&gt; &quot;pasteboard&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1358052</commentid>
    <comment_count>5</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-10-08 00:22:29 -0700</bug_when>
    <thetext>$ git grep borad

Found this typo in ChangeLog, but not in any pre-existing code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1358059</commentid>
    <comment_count>6</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-10-08 00:52:27 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #3)
&gt; Comment on attachment 323117 [details]
&gt; Skipped the test on Windows
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=323117&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/page/DragController.cpp:697
&gt; &gt; +    if (!destinationOperation)
&gt; &gt; +        operation = defaultOperationForDrag(sourceOperation);
&gt; &gt; +    else if (!(sourceOperation &amp; *destinationOperation)) // The element picked an operation which is not supported by the source
&gt; &gt;          operation = DragOperationNone;
&gt; &gt; -    }
&gt; &gt; +    else
&gt; &gt; +        operation = *destinationOperation;
&gt; 
&gt; Stylistic question about * vs. using the value() function on optionals. I
&gt; almost always use the named function, but I am not sure it’s better.

Fixed to use .value().

&gt; &gt; Source/WebCore/page/EventHandler.cpp:2277
&gt; &gt; +bool EventHandler::dispatchDragEnterOrDragOverEvent(const AtomicString&amp; eventType, Element&amp; target, const PlatformMouseEvent&amp; event,
&gt; &gt; +    std::unique_ptr&lt;Pasteboard&gt;&amp;&amp; pasteborad, DragOperation sourceOperation, bool draggingFiles, std::optional&lt;DragOperation&gt;&amp; destinationOperation)
&gt; 
&gt; Out arguments are kind of ugly. Sure would be nice if it could all be in the
&gt; return value instead of a return value plus an out argument.

Okay. I&apos;m gonna add the following struct and make this function return that.

    struct DragTargetResponse {
        bool accept;
        std::optional&lt;DragOperation&gt; operation;
    };


&gt; &gt; Source/WebCore/page/EventHandler.cpp:2289
&gt; &gt; +bool EventHandler::updateDragAndDrop(const PlatformMouseEvent&amp; event, std::function&lt;std::unique_ptr&lt;Pasteboard&gt;()&gt; makePasteboard, DragOperation sourceOperation, bool draggingFiles, std::optional&lt;DragOperation&gt;&amp; destinationOperation)
&gt; 
&gt; Ditto.
&gt; 
&gt; Also, a std::function can be expensive to copy, so it would be nice if it
&gt; was a const&amp;, assuming it’s always called synchronously and not saved for
&gt; later.

Oops, that&apos;s a good catch. Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1358060</commentid>
    <comment_count>7</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-10-08 00:53:17 -0700</bug_when>
    <thetext>(In reply to Wenson Hsieh from comment #4)
&gt; Comment on attachment 323117 [details]
&gt; Skipped the test on Windows
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=323117&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebCore/page/EventHandler.cpp:2277
&gt; &gt;&gt; +    std::unique_ptr&lt;Pasteboard&gt;&amp;&amp; pasteborad, DragOperation sourceOperation, bool draggingFiles, std::optional&lt;DragOperation&gt;&amp; destinationOperation)
&gt; &gt; 
&gt; &gt; Out arguments are kind of ugly. Sure would be nice if it could all be in the return value instead of a return value plus an out argument.
&gt; 
&gt; Nit - &quot;pasteborad&quot; =&gt; &quot;pasteboard&quot;

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1358079</commentid>
    <comment_count>8</comment_count>
      <attachid>323132</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-10-08 02:29:26 -0700</bug_when>
    <thetext>Created attachment 323132
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1358082</commentid>
    <comment_count>9</comment_count>
      <attachid>323132</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-10-08 03:08:56 -0700</bug_when>
    <thetext>Comment on attachment 323132
Patch for landing

Clearing flags on attachment: 323132

Committed r223031: &lt;http://trac.webkit.org/changeset/223031&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1358083</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-10-08 03:08:58 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1358084</commentid>
    <comment_count>11</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-10-08 03:11:08 -0700</bug_when>
    <thetext>&lt;rdar://problem/34875120&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1358249</commentid>
    <comment_count>12</comment_count>
    <who name="Matt Lewis">jlewis3</who>
    <bug_when>2017-10-09 09:40:21 -0700</bug_when>
    <thetext>This patch caused a build break on windows:

https://build.webkit.org/builders/Apple%20Win%20Release%20%28Build%29/builds/5053
https://build.webkit.org/builders/Apple%20Win%20Release%20%28Build%29/builds/5053/steps/compile-webkit/logs/stdio

Error:

C:\cygwin\home\buildbot\slave\win-release\build\Source\WebCore\page\EventHandler.cpp(2285): error C2440: &apos;return&apos;: cannot convert from &apos;initializer list&apos; to &apos;WebCore::EventHandler::DragTargetResponse&apos; [C:\cygwin\home\buildbot\slave\win-release\build\WebKitBuild\Release\Source\WebCore\WebCore.vcxproj]
  C:\cygwin\home\buildbot\slave\win-release\build\Source\WebCore\page\EventHandler.cpp(2285): note: No constructor could take the source type, or constructor overload resolution was ambiguous

If this can&apos;t be addressed quickly, we will need to revert the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1358325</commentid>
    <comment_count>13</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-10-09 11:55:16 -0700</bug_when>
    <thetext>Wenson fixed it in
https://trac.webkit.org/changeset/223050
https://trac.webkit.org/changeset/223054

Thanks, Wenson!</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>323111</attachid>
            <date>2017-10-07 18:39:12 -0700</date>
            <delta_ts>2017-10-07 20:25:46 -0700</delta_ts>
            <desc>Fixes the bug and refactors code</desc>
            <filename>bug-178056-20171007183911.patch</filename>
            <type>text/plain</type>
            <size>29417</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyMzAyNCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ1IEBACisyMDE3LTEwLTA3ICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIGRyYWdlbnRlciBhbmQgZHJhZ2xl
YXZlIHNob3VsZG4ndCB1c2UgdGhlIHNhbWUgZGF0YSB0cmFuc2ZlciBvYmplY3QKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3ODA1NgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggZml4ZXMg
dGhlIGJ1ZyB0aGF0IHdlIHdlcmUgdXNpbmcgYSBzaW5nbGUgRGF0YVRyYW5zZmVyIHRvIGZpcmUg
ZHJhZ2xlYXZlIGFuZCBkcmFnZW50ZXIgZXZlbnRzCisgICAgICAgIHdoZW4gdGhlIGRyYWcgdGFy
Z2V0IG1vdmVzIGZyb20gb25lIGVsZW1lbnQgdG8gYW5vdGhlci4KKworICAgICAgICBJdCBhbG9z
IHJlZmFjdG9ycyBEcmFnQ29udHJvbGxlciBhbmQgRXZlbnRIYW5kbGVyIGNvZGUgc28gdGhhdCB0
aGUgY29uc3RydWN0aW9uIG9mIERhdGFUcmFuc2ZlciBvYmplY3QKKyAgICAgICAgaGFwcGVucyBp
biBFdmVudEhhbmRsZXIgaW5zdGVhZCBvZiBEcmFnQ29udHJvbGxlciwgYW5kIGV4dHJhY3RzIGNy
ZWF0ZUZvclVwZGF0aW5nRHJvcFRhcmdldCBvdXQgb2YKKyAgICAgICAgY3JlYXRlRm9yRHJvcCB0
byBoYXZlIGEgYmV0dGVyIGVuY2Fwc3VsYXRpb24gb3ZlciB0aGUgZGF0YSBzdG9yZSBtb2RlLgor
CisgICAgICAgIGRyYWcgcmVsYXRlZCBmdW5jdGlvbnMgaW4gRXZlbnRIYW5kbGVyIG5vdyB0YWtl
cyBzdGQ6OnVuaXF1ZV9wdHI8UGFzdGVib2FyZD4mJiwgZHJhZyBvcGVyYXRpb24gbWFzayBzZXQK
KyAgICAgICAgYnkgdGhlIGRyYWcgc291cmNlLCBhbmQgYSBib29sZWFuIGluZGljYXRpbmcgd2hl
dGhlciB0aGlzIGRyYWcgJiBkcm9wIGlzIGZvciBmaWxlcyBvciBub3QuIHVwZGF0ZURyYWdBbmRE
cm9wCisgICAgICAgIHRha2VzIGEgY2xvc3VyZSB3aGljaCBtYWtlcyBhIHBhc3RlYm9hcmQgYmVj
YXVzZSBpdCBoYXMgdG8gY3JlYXRlIHR3byBpbnN0YW5jZXMgb2YgRGF0YVRyYW5zZmVyIG9uZSBm
b3IKKyAgICAgICAgZHJhZ2xlYXZlIGV2ZW50IGFuZCBhbm90aGVyIG9uZSBmb3IgZHJhZ2VudGVy
IGV2ZW50IGluIHNvbWUgY2FzZXMuCisKKyAgICAgICAgVGVzdDogZWRpdGluZy9wYXN0ZWJvYXJk
L2RhdGEtdHJhbnNmZXItaXMtdW5pcXVlLWZvci1kcmFnZW50ZXItYW5kLWRyYWdsZWF2ZS5odG1s
CisKKyAgICAgICAgKiBkb20vRGF0YVRyYW5zZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRh
dGFUcmFuc2Zlcjo6Y3JlYXRlRm9yRHJvcCk6IE5vdyB0YWtlcyBQYXN0ZWJvYXJkIGluc3RlYWQg
b2YgRHJhZ0RhdGEuCisgICAgICAgIChXZWJDb3JlOjpEYXRhVHJhbnNmZXI6OmNyZWF0ZUZvclVw
ZGF0aW5nRHJvcFRhcmdldCk6IEV4dHJhY3RlZCBvdXQgb2YgY3JlYXRlRm9yRHJvcC4gTW92ZWQg
dGhlIGNvZGUgdG8KKyAgICAgICAgdXNlIFJlYWRvbmx5IG1vZGUgaW4gZGFzaGJvYWQgaGVyZSBm
cm9tIGNyZWF0ZURhdGFUcmFuc2ZlclRvVXBkYXRlRHJhZyBpbiBEcmFnQ29udHJvbGxlci5jcHAu
CisgICAgICAgICogZG9tL0RhdGFUcmFuc2Zlci5oOgorICAgICAgICAqIHBhZ2UvRHJhZ0NvbnRy
b2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlRGF0YVRyYW5zZmVyVG9VcGRhdGVE
cmFnKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRyYWdDb250cm9sbGVyOjpkcmFnRXhp
dGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdDb250cm9sbGVyOjpwZXJmb3JtRHJhZ09wZXJh
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpEcmFnQ29udHJvbGxlcjo6dHJ5REhUTUxEcmFnKToK
KyAgICAgICAgKiBwYWdlL0V2ZW50SGFuZGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVu
dEhhbmRsZXI6OmRpc3BhdGNoRHJhZ0V2ZW50KTogTWFkZSB0aGlzIGZ1Y250aW9uIHRha2UgRGF0
YVRyYW5zZmVyJiBpbnN0ZWFkIG9mIERhdGFUcmFuc2ZlciouCisgICAgICAgIChXZWJDb3JlOjpm
aW5kRHJvcFpvbmUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6ZGlz
cGF0Y2hEcmFnRW50ZXJPckRyYWdPdmVyRXZlbnQpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkV2ZW50SGFuZGxlcjo6dXBkYXRlRHJhZ0FuZERyb3ApOgorICAgICAgICAoV2ViQ29yZTo6RXZl
bnRIYW5kbGVyOjpjYW5jZWxEcmFnQW5kRHJvcCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhh
bmRsZXI6OnBlcmZvcm1EcmFnQW5kRHJvcCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRs
ZXI6OmRpc3BhdGNoRHJhZ1NyY0V2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxl
cjo6ZGlzcGF0Y2hEcmFnU3RhcnRFdmVudE9uU291cmNlRWxlbWVudCk6CisgICAgICAgICogcGFn
ZS9FdmVudEhhbmRsZXIuaDoKKwogMjAxNy0xMC0wNyAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBs
ZS5jb20+CiAKICAgICAgICAgVXBkYXRlIERvY3VtZW50LmNyZWF0ZUV2ZW50IGZvciByZWNlbnQg
RE9NIHNwZWNpZmljYXRpb24gY2hhbmdlcwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RhdGFU
cmFuc2Zlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0RhdGFUcmFuc2Zl
ci5jcHAJKHJldmlzaW9uIDIyMzAyMSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9EYXRhVHJhbnNm
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMzcsMTAgKzMzNywyNSBAQCBSZWY8RGF0YVRyYW5z
ZmVyPiBEYXRhVHJhbnNmZXI6OmNyZWF0ZUZvCiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRGF0
YVRyYW5zZmVyKFN0b3JlTW9kZTo6UmVhZFdyaXRlLCBzdGQ6Om1ha2VfdW5pcXVlPFN0YXRpY1Bh
c3RlYm9hcmQ+KCksIFR5cGU6OkRyYWdBbmREcm9wRGF0YSkpOwogfQogCi1SZWY8RGF0YVRyYW5z
ZmVyPiBEYXRhVHJhbnNmZXI6OmNyZWF0ZUZvckRyb3AoU3RvcmVNb2RlIGFjY2Vzc01vZGUsIGNv
bnN0IERyYWdEYXRhJiBkcmFnRGF0YSkKK1JlZjxEYXRhVHJhbnNmZXI+IERhdGFUcmFuc2Zlcjo6
Y3JlYXRlRm9yRHJvcChzdGQ6OnVuaXF1ZV9wdHI8UGFzdGVib2FyZD4mJiBwYXN0ZWJvYXJkLCBE
cmFnT3BlcmF0aW9uIHNvdXJjZU9wZXJhdGlvbiwgYm9vbCBkcmFnZ2luZ0ZpbGVzKQogewotICAg
IGF1dG8gdHlwZSA9IGRyYWdEYXRhLmNvbnRhaW5zRmlsZXMoKSA/IFR5cGU6OkRyYWdBbmREcm9w
RmlsZXMgOiBUeXBlOjpEcmFnQW5kRHJvcERhdGE7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
RGF0YVRyYW5zZmVyKGFjY2Vzc01vZGUsIFBhc3RlYm9hcmQ6OmNyZWF0ZUZvckRyYWdBbmREcm9w
KGRyYWdEYXRhKSwgdHlwZSkpOworICAgIGF1dG8gZGF0YVRyYW5zZmVyID0gYWRvcHRSZWYoKm5l
dyBEYXRhVHJhbnNmZXIoRGF0YVRyYW5zZmVyOjpTdG9yZU1vZGU6OlJlYWRvbmx5LCBXVEZNb3Zl
KHBhc3RlYm9hcmQpLCBkcmFnZ2luZ0ZpbGVzID8gVHlwZTo6RHJhZ0FuZERyb3BGaWxlcyA6IFR5
cGU6OkRyYWdBbmREcm9wRGF0YSkpOworICAgIGRhdGFUcmFuc2Zlci0+c2V0U291cmNlT3BlcmF0
aW9uKHNvdXJjZU9wZXJhdGlvbik7CisgICAgcmV0dXJuIGRhdGFUcmFuc2ZlcjsKK30KKworUmVm
PERhdGFUcmFuc2Zlcj4gRGF0YVRyYW5zZmVyOjpjcmVhdGVGb3JVcGRhdGluZ0Ryb3BUYXJnZXQo
RG9jdW1lbnQmIGRvY3VtZW50LCBzdGQ6OnVuaXF1ZV9wdHI8UGFzdGVib2FyZD4mJiBwYXN0ZWJv
YXJkLCBEcmFnT3BlcmF0aW9uIHNvdXJjZU9wZXJhdGlvbiwgYm9vbCBkcmFnZ2luZ0ZpbGVzKQor
eworICAgIGF1dG8gbW9kZSA9IERhdGFUcmFuc2Zlcjo6U3RvcmVNb2RlOjpQcm90ZWN0ZWQ7Cisj
aWYgRU5BQkxFKERBU0hCT0FSRF9TVVBQT1JUKQorICAgIGlmIChkb2N1bWVudC5zZXR0aW5ncygp
LnVzZXNEYXNoYm9hcmRCYWNrd2FyZENvbXBhdGliaWxpdHlNb2RlKCkgJiYgZG9jdW1lbnQuc2Vj
dXJpdHlPcmlnaW4oKS5pc0xvY2FsKCkpCisgICAgICAgIG1vZGUgPSBEYXRhVHJhbnNmZXI6OlN0
b3JlTW9kZTo6UmVhZG9ubHk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShkb2N1bWVudCk7Cisj
ZW5kaWYKKyAgICBhdXRvIGRhdGFUcmFuc2ZlciA9IGFkb3B0UmVmKCpuZXcgRGF0YVRyYW5zZmVy
KG1vZGUsIFdURk1vdmUocGFzdGVib2FyZCksIGRyYWdnaW5nRmlsZXMgPyBUeXBlOjpEcmFnQW5k
RHJvcEZpbGVzIDogVHlwZTo6RHJhZ0FuZERyb3BEYXRhKSk7CisgICAgZGF0YVRyYW5zZmVyLT5z
ZXRTb3VyY2VPcGVyYXRpb24oc291cmNlT3BlcmF0aW9uKTsKKyAgICByZXR1cm4gZGF0YVRyYW5z
ZmVyOwogfQogCiB2b2lkIERhdGFUcmFuc2Zlcjo6c2V0RHJhZ0ltYWdlKEVsZW1lbnQqIGVsZW1l
bnQsIGludCB4LCBpbnQgeSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9EYXRhVHJhbnNmZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRGF0YVRyYW5zZmVyLmgJKHJldmlz
aW9uIDIyMzAyMSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9EYXRhVHJhbnNmZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENh
Y2hlZEltYWdlOwogY2xhc3MgRGF0YVRyYW5zZmVySXRlbUxpc3Q7CitjbGFzcyBEb2N1bWVudDsK
IGNsYXNzIERyYWdEYXRhOwogY2xhc3MgRHJhZ0ltYWdlTG9hZGVyOwogY2xhc3MgRWxlbWVudDsK
QEAgLTgzLDcgKzg0LDggQEAgcHVibGljOgogI2lmIEVOQUJMRShEUkFHX1NVUFBPUlQpCiAgICAg
c3RhdGljIFJlZjxEYXRhVHJhbnNmZXI+IGNyZWF0ZUZvckRyYWcoKTsKICAgICBzdGF0aWMgUmVm
PERhdGFUcmFuc2Zlcj4gY3JlYXRlRm9yRHJhZ1N0YXJ0RXZlbnQoKTsKLSAgICBzdGF0aWMgUmVm
PERhdGFUcmFuc2Zlcj4gY3JlYXRlRm9yRHJvcChTdG9yZU1vZGUsIGNvbnN0IERyYWdEYXRhJik7
CisgICAgc3RhdGljIFJlZjxEYXRhVHJhbnNmZXI+IGNyZWF0ZUZvckRyb3Aoc3RkOjp1bmlxdWVf
cHRyPFBhc3RlYm9hcmQ+JiYsIERyYWdPcGVyYXRpb24sIGJvb2wgZHJhZ2dpbmdGaWxlcyk7Cisg
ICAgc3RhdGljIFJlZjxEYXRhVHJhbnNmZXI+IGNyZWF0ZUZvclVwZGF0aW5nRHJvcFRhcmdldChE
b2N1bWVudCYsIHN0ZDo6dW5pcXVlX3B0cjxQYXN0ZWJvYXJkPiYmLCBEcmFnT3BlcmF0aW9uLCBi
b29sIGRyYWdnaW5nRmlsZXMpOwogCiAgICAgYm9vbCBkcm9wRWZmZWN0SXNVbmluaXRpYWxpemVk
KCkgY29uc3QgeyByZXR1cm4gbV9kcm9wRWZmZWN0ID09ICJ1bmluaXRpYWxpemVkIjsgfQogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMjIzMDIx
KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIyMCwzMSArMjIwLDExIEBAIERyYWdPcGVyYXRpb24gRHJhZ0NvbnRyb2xsZXI6OmRy
YWdFbnRlcmUKICAgICByZXR1cm4gZHJhZ0VudGVyZWRPclVwZGF0ZWQoZHJhZ0RhdGEpOwogfQog
Ci1zdGF0aWMgUmVmPERhdGFUcmFuc2Zlcj4gY3JlYXRlRGF0YVRyYW5zZmVyVG9VcGRhdGVEcmFn
KGNvbnN0IERyYWdEYXRhJiBkcmFnRGF0YSwgY29uc3QgU2V0dGluZ3MmIHNldHRpbmdzLCBSZWZQ
dHI8RG9jdW1lbnQ+JiYgZG9jdW1lbnRVbmRlck1vdXNlKQotewotICAgIGF1dG8gYWNjZXNzTW9k
ZSA9IERhdGFUcmFuc2Zlcjo6U3RvcmVNb2RlOjpQcm90ZWN0ZWQ7Ci0KLSNpZiBFTkFCTEUoREFT
SEJPQVJEX1NVUFBPUlQpCi0gICAgaWYgKHNldHRpbmdzLnVzZXNEYXNoYm9hcmRCYWNrd2FyZENv
bXBhdGliaWxpdHlNb2RlKCkgJiYgKCFkb2N1bWVudFVuZGVyTW91c2UgfHwgZG9jdW1lbnRVbmRl
ck1vdXNlLT5zZWN1cml0eU9yaWdpbigpLmlzTG9jYWwoKSkpCi0gICAgICAgIGFjY2Vzc01vZGUg
PSBEYXRhVHJhbnNmZXI6OlN0b3JlTW9kZTo6UmVhZG9ubHk7Ci0jZWxzZQotICAgIFVOVVNFRF9Q
QVJBTShzZXR0aW5ncyk7Ci0gICAgVU5VU0VEX1BBUkFNKGRvY3VtZW50VW5kZXJNb3VzZSk7Ci0j
ZW5kaWYKLQotICAgIGF1dG8gZGF0YVRyYW5zZmVyID0gRGF0YVRyYW5zZmVyOjpjcmVhdGVGb3JE
cm9wKGFjY2Vzc01vZGUsIGRyYWdEYXRhKTsKLSAgICBkYXRhVHJhbnNmZXItPnNldFNvdXJjZU9w
ZXJhdGlvbihkcmFnRGF0YS5kcmFnZ2luZ1NvdXJjZU9wZXJhdGlvbk1hc2soKSk7Ci0KLSAgICBy
ZXR1cm4gZGF0YVRyYW5zZmVyOwotfQotCiB2b2lkIERyYWdDb250cm9sbGVyOjpkcmFnRXhpdGVk
KGNvbnN0IERyYWdEYXRhJiBkcmFnRGF0YSkKIHsKLSAgICBpZiAoUmVmUHRyPEZyYW1lVmlldz4g
diA9IG1fcGFnZS5tYWluRnJhbWUoKS52aWV3KCkpIHsKLSAgICAgICAgYXV0byBkYXRhVHJhbnNm
ZXIgPSBjcmVhdGVEYXRhVHJhbnNmZXJUb1VwZGF0ZURyYWcoZHJhZ0RhdGEsIG1fcGFnZS5tYWlu
RnJhbWUoKS5zZXR0aW5ncygpLCBtX2RvY3VtZW50VW5kZXJNb3VzZS5jb3B5UmVmKCkpOwotICAg
ICAgICBtX3BhZ2UubWFpbkZyYW1lKCkuZXZlbnRIYW5kbGVyKCkuY2FuY2VsRHJhZ0FuZERyb3Ao
Y3JlYXRlTW91c2VFdmVudChkcmFnRGF0YSksIGRhdGFUcmFuc2Zlcik7Ci0gICAgICAgIGRhdGFU
cmFuc2Zlci0+bWFrZUludmFsaWRGb3JTZWN1cml0eSgpOwotICAgIH0KKyAgICBhdXRvJiBtYWlu
RnJhbWUgPSBtX3BhZ2UubWFpbkZyYW1lKCk7CisgICAgaWYgKG1haW5GcmFtZS52aWV3KCkpCisg
ICAgICAgIG1haW5GcmFtZS5ldmVudEhhbmRsZXIoKS5jYW5jZWxEcmFnQW5kRHJvcChjcmVhdGVN
b3VzZUV2ZW50KGRyYWdEYXRhKSwgUGFzdGVib2FyZDo6Y3JlYXRlRm9yRHJhZ0FuZERyb3AoZHJh
Z0RhdGEpLCBkcmFnRGF0YS5kcmFnZ2luZ1NvdXJjZU9wZXJhdGlvbk1hc2soKSwgZHJhZ0RhdGEu
Y29udGFpbnNGaWxlcygpKTsKICAgICBtb3VzZU1vdmVkSW50b0RvY3VtZW50KG51bGxwdHIpOwog
ICAgIGlmIChtX2ZpbGVJbnB1dEVsZW1lbnRVbmRlck1vdXNlKQogICAgICAgICBtX2ZpbGVJbnB1
dEVsZW1lbnRVbmRlck1vdXNlLT5zZXRDYW5SZWNlaXZlRHJvcHBlZEZpbGVzKGZhbHNlKTsKQEAg
LTI4MiwxMyArMjYyLDggQEAgYm9vbCBEcmFnQ29udHJvbGxlcjo6cGVyZm9ybURyYWdPcGVyYXRp
bwogICAgICAgICBtX2NsaWVudC53aWxsUGVyZm9ybURyYWdEZXN0aW5hdGlvbkFjdGlvbihEcmFn
RGVzdGluYXRpb25BY3Rpb25ESFRNTCwgZHJhZ0RhdGEpOwogICAgICAgICBSZWY8TWFpbkZyYW1l
PiBtYWluRnJhbWUobV9wYWdlLm1haW5GcmFtZSgpKTsKICAgICAgICAgYm9vbCBwcmV2ZW50ZWRE
ZWZhdWx0ID0gZmFsc2U7Ci0gICAgICAgIGlmIChtYWluRnJhbWUtPnZpZXcoKSkgewotICAgICAg
ICAgICAgLy8gU2VuZGluZyBhbiBldmVudCBjYW4gcmVzdWx0IGluIHRoZSBkZXN0cnVjdGlvbiBv
ZiB0aGUgdmlldyBhbmQgcGFydC4KLSAgICAgICAgICAgIGF1dG8gZGF0YVRyYW5zZmVyID0gRGF0
YVRyYW5zZmVyOjpjcmVhdGVGb3JEcm9wKERhdGFUcmFuc2Zlcjo6U3RvcmVNb2RlOjpSZWFkb25s
eSwgZHJhZ0RhdGEpOwotICAgICAgICAgICAgZGF0YVRyYW5zZmVyLT5zZXRTb3VyY2VPcGVyYXRp
b24oZHJhZ0RhdGEuZHJhZ2dpbmdTb3VyY2VPcGVyYXRpb25NYXNrKCkpOwotICAgICAgICAgICAg
cHJldmVudGVkRGVmYXVsdCA9IG1haW5GcmFtZS0+ZXZlbnRIYW5kbGVyKCkucGVyZm9ybURyYWdB
bmREcm9wKGNyZWF0ZU1vdXNlRXZlbnQoZHJhZ0RhdGEpLCBkYXRhVHJhbnNmZXIpOwotICAgICAg
ICAgICAgZGF0YVRyYW5zZmVyLT5tYWtlSW52YWxpZEZvclNlY3VyaXR5KCk7Ci0gICAgICAgIH0K
KyAgICAgICAgaWYgKG1haW5GcmFtZS0+dmlldygpKQorICAgICAgICAgICAgcHJldmVudGVkRGVm
YXVsdCA9IG1haW5GcmFtZS0+ZXZlbnRIYW5kbGVyKCkucGVyZm9ybURyYWdBbmREcm9wKGNyZWF0
ZU1vdXNlRXZlbnQoZHJhZ0RhdGEpLCBQYXN0ZWJvYXJkOjpjcmVhdGVGb3JEcmFnQW5kRHJvcChk
cmFnRGF0YSksIGRyYWdEYXRhLmRyYWdnaW5nU291cmNlT3BlcmF0aW9uTWFzaygpLCBkcmFnRGF0
YS5jb250YWluc0ZpbGVzKCkpOwogICAgICAgICBpZiAocHJldmVudGVkRGVmYXVsdCkgewogICAg
ICAgICAgICAgY2xlYXJEcmFnQ2FyZXQoKTsKICAgICAgICAgICAgIG1fZG9jdW1lbnRVbmRlck1v
dXNlID0gbnVsbHB0cjsKQEAgLTcwOSwyNCArNjg0LDE4IEBAIGJvb2wgRHJhZ0NvbnRyb2xsZXI6
OnRyeURIVE1MRHJhZyhjb25zdCAKICAgICBpZiAoIXZpZXdQcm90ZWN0b3IpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgIGF1dG8gZGF0YVRyYW5zZmVyID0gY3JlYXRlRGF0YVRyYW5zZmVy
VG9VcGRhdGVEcmFnKGRyYWdEYXRhLCBtYWluRnJhbWUtPnNldHRpbmdzKCksIG1fZG9jdW1lbnRV
bmRlck1vdXNlLmNvcHlSZWYoKSk7Ci0KLSAgICBQbGF0Zm9ybU1vdXNlRXZlbnQgZXZlbnQgPSBj
cmVhdGVNb3VzZUV2ZW50KGRyYWdEYXRhKTsKLSAgICBpZiAoIW1haW5GcmFtZS0+ZXZlbnRIYW5k
bGVyKCkudXBkYXRlRHJhZ0FuZERyb3AoZXZlbnQsIGRhdGFUcmFuc2ZlcikpIHsKLSAgICAgICAg
ZGF0YVRyYW5zZmVyLT5tYWtlSW52YWxpZEZvclNlY3VyaXR5KCk7CisgICAgRHJhZ09wZXJhdGlv
biBzb3VyY2VPcGVyYXRpb24gPSBkcmFnRGF0YS5kcmFnZ2luZ1NvdXJjZU9wZXJhdGlvbk1hc2so
KTsKKyAgICBzdGQ6Om9wdGlvbmFsPERyYWdPcGVyYXRpb24+IGRlc3RpbmF0aW9uT3BlcmF0aW9u
OworICAgIGlmICghbWFpbkZyYW1lLT5ldmVudEhhbmRsZXIoKS51cGRhdGVEcmFnQW5kRHJvcChj
cmVhdGVNb3VzZUV2ZW50KGRyYWdEYXRhKSwgWyZkcmFnRGF0YV0oKSB7IHJldHVybiBQYXN0ZWJv
YXJkOjpjcmVhdGVGb3JEcmFnQW5kRHJvcChkcmFnRGF0YSk7IH0sIHNvdXJjZU9wZXJhdGlvbiwg
ZHJhZ0RhdGEuY29udGFpbnNGaWxlcygpLCBkZXN0aW5hdGlvbk9wZXJhdGlvbikpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9CiAKLSAgICBvcGVyYXRpb24gPSBkYXRhVHJhbnNmZXItPmRl
c3RpbmF0aW9uT3BlcmF0aW9uKCk7Ci0gICAgRHJhZ09wZXJhdGlvbiBzcmNPcE1hc2sgPSBkcmFn
RGF0YS5kcmFnZ2luZ1NvdXJjZU9wZXJhdGlvbk1hc2soKTsKLSAgICBpZiAoZGF0YVRyYW5zZmVy
LT5kcm9wRWZmZWN0SXNVbmluaXRpYWxpemVkKCkpCi0gICAgICAgIG9wZXJhdGlvbiA9IGRlZmF1
bHRPcGVyYXRpb25Gb3JEcmFnKHNyY09wTWFzayk7Ci0gICAgZWxzZSBpZiAoIShzcmNPcE1hc2sg
JiBvcGVyYXRpb24pKSB7Ci0gICAgICAgIC8vIFRoZSBlbGVtZW50IHBpY2tlZCBhbiBvcGVyYXRp
b24gd2hpY2ggaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgc291cmNlCisgICAgaWYgKCFkZXN0aW5h
dGlvbk9wZXJhdGlvbikKKyAgICAgICAgb3BlcmF0aW9uID0gZGVmYXVsdE9wZXJhdGlvbkZvckRy
YWcoc291cmNlT3BlcmF0aW9uKTsKKyAgICBlbHNlIGlmICghKHNvdXJjZU9wZXJhdGlvbiAmICpk
ZXN0aW5hdGlvbk9wZXJhdGlvbikpIC8vIFRoZSBlbGVtZW50IHBpY2tlZCBhbiBvcGVyYXRpb24g
d2hpY2ggaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgc291cmNlCiAgICAgICAgIG9wZXJhdGlvbiA9
IERyYWdPcGVyYXRpb25Ob25lOwotICAgIH0KKyAgICBlbHNlCisgICAgICAgIG9wZXJhdGlvbiA9
ICpkZXN0aW5hdGlvbk9wZXJhdGlvbjsKIAotICAgIGRhdGFUcmFuc2Zlci0+bWFrZUludmFsaWRG
b3JTZWN1cml0eSgpOwogICAgIHJldHVybiB0cnVlOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFn
ZS9FdmVudEhhbmRsZXIuY3BwCShyZXZpc2lvbiAyMjMwMjEpCisrKyBTb3VyY2UvV2ViQ29yZS9w
YWdlL0V2ZW50SGFuZGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxODAsNyArMjE4MCw3IEBA
IGJvb2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVQYXN0ZUdsb2JhbFNlbGUKIAogI2lmIEVOQUJMRShE
UkFHX1NVUFBPUlQpCiAKLWJvb2wgRXZlbnRIYW5kbGVyOjpkaXNwYXRjaERyYWdFdmVudChjb25z
dCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgRWxlbWVudCYgZHJhZ1RhcmdldCwgY29uc3QgUGxh
dGZvcm1Nb3VzZUV2ZW50JiBldmVudCwgRGF0YVRyYW5zZmVyKiBkYXRhVHJhbnNmZXIpCitib29s
IEV2ZW50SGFuZGxlcjo6ZGlzcGF0Y2hEcmFnRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiBldmVu
dFR5cGUsIEVsZW1lbnQmIGRyYWdUYXJnZXQsIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgZXZl
bnQsIERhdGFUcmFuc2ZlciYgZGF0YVRyYW5zZmVyKQogewogICAgIFJlZjxGcmFtZT4gcHJvdGVj
dGVkRnJhbWUobV9mcmFtZSk7CiAgICAgRnJhbWVWaWV3KiB2aWV3ID0gbV9mcmFtZS52aWV3KCk7
CkBAIC0yMTk3LDcgKzIxOTcsNyBAQCBib29sIEV2ZW50SGFuZGxlcjo6ZGlzcGF0Y2hEcmFnRXZl
bnQoY29uCiAgICAgICAgIGV2ZW50Lm1vdmVtZW50RGVsdGEoKS54KCksIGV2ZW50Lm1vdmVtZW50
RGVsdGEoKS55KCksCiAjZW5kaWYKICAgICAgICAgZXZlbnQuY3RybEtleSgpLCBldmVudC5hbHRL
ZXkoKSwgZXZlbnQuc2hpZnRLZXkoKSwgZXZlbnQubWV0YUtleSgpLAotICAgICAgICAwLCAwLCBl
dmVudC5mb3JjZSgpLCBOb1RhcCwgZGF0YVRyYW5zZmVyKTsKKyAgICAgICAgMCwgMCwgZXZlbnQu
Zm9yY2UoKSwgTm9UYXAsICZkYXRhVHJhbnNmZXIpOwogCiAgICAgZHJhZ1RhcmdldC5kaXNwYXRj
aEV2ZW50KG1lKTsKICAgICByZXR1cm4gbWUtPmRlZmF1bHRQcmV2ZW50ZWQoKTsKQEAgLTIyNDgs
MTAgKzIyNDgsOSBAQCBzdGF0aWMgYm9vbCBoYXNEcm9wWm9uZVR5cGUoRGF0YVRyYW5zZmVyCiAg
ICAgcmV0dXJuIGZhbHNlOwogfQogCi1zdGF0aWMgYm9vbCBmaW5kRHJvcFpvbmUoTm9kZSogdGFy
Z2V0LCBEYXRhVHJhbnNmZXIqIGRhdGFUcmFuc2ZlcikKK3N0YXRpYyBib29sIGZpbmREcm9wWm9u
ZShOb2RlJiB0YXJnZXQsIERhdGFUcmFuc2ZlciYgZGF0YVRyYW5zZmVyKQogewotICAgIEFTU0VS
VCh0YXJnZXQpOwotICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBpczxFbGVtZW50PigqdGFyZ2V0KSA/
IGRvd25jYXN0PEVsZW1lbnQ+KHRhcmdldCkgOiB0YXJnZXQtPnBhcmVudEVsZW1lbnQoKTsKKyAg
ICBSZWZQdHI8RWxlbWVudD4gZWxlbWVudCA9IGlzPEVsZW1lbnQ+KHRhcmdldCkgPyAmZG93bmNh
c3Q8RWxlbWVudD4odGFyZ2V0KSA6IHRhcmdldC5wYXJlbnRFbGVtZW50KCk7CiAgICAgZm9yICg7
IGVsZW1lbnQ7IGVsZW1lbnQgPSBlbGVtZW50LT5wYXJlbnRFbGVtZW50KCkpIHsKICAgICAgICAg
U3BhY2VTcGxpdFN0cmluZyBrZXl3b3JkcyhlbGVtZW50LT5hdHRyaWJ1dGVXaXRob3V0U3luY2hy
b25pemF0aW9uKHdlYmtpdGRyb3B6b25lQXR0ciksIHRydWUpOwogICAgICAgICBib29sIG1hdGNo
ZWQgPSBmYWxzZTsKQEAgLTIyNjIsMTkgKzIyNjEsMzIgQEAgc3RhdGljIGJvb2wgZmluZERyb3Ba
b25lKE5vZGUqIHRhcmdldCwgRAogICAgICAgICAgICAgICAgIGlmIChkcmFnT3BlcmF0aW9uID09
IERyYWdPcGVyYXRpb25Ob25lKQogICAgICAgICAgICAgICAgICAgICBkcmFnT3BlcmF0aW9uID0g
b3A7CiAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICBtYXRjaGVkID0gbWF0Y2hl
ZCB8fCBoYXNEcm9wWm9uZVR5cGUoKmRhdGFUcmFuc2Zlciwga2V5d29yZHNbaV0uc3RyaW5nKCkp
OworICAgICAgICAgICAgICAgIG1hdGNoZWQgPSBtYXRjaGVkIHx8IGhhc0Ryb3Bab25lVHlwZShk
YXRhVHJhbnNmZXIsIGtleXdvcmRzW2ldLnN0cmluZygpKTsKICAgICAgICAgICAgIGlmIChtYXRj
aGVkICYmIGRyYWdPcGVyYXRpb24gIT0gRHJhZ09wZXJhdGlvbk5vbmUpCiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgaWYgKG1hdGNoZWQpIHsKLSAgICAgICAgICAg
IGRhdGFUcmFuc2Zlci0+c2V0RHJvcEVmZmVjdChjb252ZXJ0RHJhZ09wZXJhdGlvblRvRHJvcFpv
bmVPcGVyYXRpb24oZHJhZ09wZXJhdGlvbikpOworICAgICAgICAgICAgZGF0YVRyYW5zZmVyLnNl
dERyb3BFZmZlY3QoY29udmVydERyYWdPcGVyYXRpb25Ub0Ryb3Bab25lT3BlcmF0aW9uKGRyYWdP
cGVyYXRpb24pKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfQog
ICAgIHJldHVybiBmYWxzZTsKIH0KLSAgICAKLWJvb2wgRXZlbnRIYW5kbGVyOjp1cGRhdGVEcmFn
QW5kRHJvcChjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIGV2ZW50LCBEYXRhVHJhbnNmZXImIGRh
dGFUcmFuc2ZlcikKKworYm9vbCBFdmVudEhhbmRsZXI6OmRpc3BhdGNoRHJhZ0VudGVyT3JEcmFn
T3ZlckV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBFbGVtZW50JiB0YXJnZXQs
IGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgZXZlbnQsCisgICAgc3RkOjp1bmlxdWVfcHRyPFBh
c3RlYm9hcmQ+JiYgcGFzdGVib3JhZCwgRHJhZ09wZXJhdGlvbiBzb3VyY2VPcGVyYXRpb24sIGJv
b2wgZHJhZ2dpbmdGaWxlcywgc3RkOjpvcHRpb25hbDxEcmFnT3BlcmF0aW9uPiYgZGVzdGluYXRp
b25PcGVyYXRpb24pCit7CisgICAgYXV0byBkYXRhVHJhbnNmZXIgPSBEYXRhVHJhbnNmZXI6OmNy
ZWF0ZUZvclVwZGF0aW5nRHJvcFRhcmdldCh0YXJnZXQuZG9jdW1lbnQoKSwgV1RGTW92ZShwYXN0
ZWJvcmFkKSwgc291cmNlT3BlcmF0aW9uLCBkcmFnZ2luZ0ZpbGVzKTsKKyAgICBib29sIGFjY2Vw
dCA9IGRpc3BhdGNoRHJhZ0V2ZW50KGV2ZW50VHlwZSwgdGFyZ2V0LCBldmVudCwgZGF0YVRyYW5z
ZmVyLmdldCgpKTsKKyAgICBpZiAoIWFjY2VwdCkKKyAgICAgICAgYWNjZXB0ID0gZmluZERyb3Ba
b25lKHRhcmdldCwgZGF0YVRyYW5zZmVyKTsKKyAgICBkYXRhVHJhbnNmZXItPm1ha2VJbnZhbGlk
Rm9yU2VjdXJpdHkoKTsKKyAgICBpZiAoYWNjZXB0ICYmICFkYXRhVHJhbnNmZXItPmRyb3BFZmZl
Y3RJc1VuaW5pdGlhbGl6ZWQoKSkKKyAgICAgICAgZGVzdGluYXRpb25PcGVyYXRpb24gPSBkYXRh
VHJhbnNmZXItPmRlc3RpbmF0aW9uT3BlcmF0aW9uKCk7CisgICAgcmV0dXJuIGFjY2VwdDsKK30K
KworYm9vbCBFdmVudEhhbmRsZXI6OnVwZGF0ZURyYWdBbmREcm9wKGNvbnN0IFBsYXRmb3JtTW91
c2VFdmVudCYgZXZlbnQsIHN0ZDo6ZnVuY3Rpb248c3RkOjp1bmlxdWVfcHRyPFBhc3RlYm9hcmQ+
KCk+IG1ha2VQYXN0ZWJvYXJkLCBEcmFnT3BlcmF0aW9uIHNvdXJjZU9wZXJhdGlvbiwgYm9vbCBk
cmFnZ2luZ0ZpbGVzLCBzdGQ6Om9wdGlvbmFsPERyYWdPcGVyYXRpb24+JiBkZXN0aW5hdGlvbk9w
ZXJhdGlvbikKIHsKICAgICBSZWY8RnJhbWU+IHByb3RlY3RlZEZyYW1lKG1fZnJhbWUpOwogCkBA
IC0yMzA2LDIzICsyMzE4LDI1IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjp1cGRhdGVEcmFnQW5kRHJv
cChjb24KICAgICAgICAgRnJhbWUqIHRhcmdldEZyYW1lOwogICAgICAgICBpZiAodGFyZ2V0SXNG
cmFtZShuZXdUYXJnZXQuZ2V0KCksIHRhcmdldEZyYW1lKSkgewogICAgICAgICAgICAgaWYgKHRh
cmdldEZyYW1lKQotICAgICAgICAgICAgICAgIGFjY2VwdCA9IHRhcmdldEZyYW1lLT5ldmVudEhh
bmRsZXIoKS51cGRhdGVEcmFnQW5kRHJvcChldmVudCwgZGF0YVRyYW5zZmVyKTsKKyAgICAgICAg
ICAgICAgICBhY2NlcHQgPSB0YXJnZXRGcmFtZS0+ZXZlbnRIYW5kbGVyKCkudXBkYXRlRHJhZ0Fu
ZERyb3AoZXZlbnQsIG1ha2VQYXN0ZWJvYXJkLCBzb3VyY2VPcGVyYXRpb24sIGRyYWdnaW5nRmls
ZXMsIGRlc3RpbmF0aW9uT3BlcmF0aW9uKTsKICAgICAgICAgfSBlbHNlIGlmIChuZXdUYXJnZXQp
IHsKICAgICAgICAgICAgIC8vIEFzIHBlciBzZWN0aW9uIDcuOS40IG9mIHRoZSBIVE1MIDUgc3Bl
Yy4sIHdlIG11c3QgYWx3YXlzIGZpcmUgYSBkcmFnIGV2ZW50IGJlZm9yZSBmaXJpbmcgYSBkcmFn
ZW50ZXIsIGRyYWdsZWF2ZSwgb3IgZHJhZ292ZXIgZXZlbnQuCiAgICAgICAgICAgICBpZiAoZHJh
Z1N0YXRlKCkuc291cmNlICYmIGRyYWdTdGF0ZSgpLnNob3VsZERpc3BhdGNoRXZlbnRzKSB7CiAg
ICAgICAgICAgICAgICAgLy8gZm9yIG5vdyB3ZSBkb24ndCBjYXJlIGlmIGV2ZW50IGhhbmRsZXIg
Y2FuY2VscyBkZWZhdWx0IGJlaGF2aW9yLCBzaW5jZSB0aGVyZSBpcyBub25lCiAgICAgICAgICAg
ICAgICAgZGlzcGF0Y2hEcmFnU3JjRXZlbnQoZXZlbnROYW1lcygpLmRyYWdFdmVudCwgZXZlbnQp
OwogICAgICAgICAgICAgfQotICAgICAgICAgICAgYWNjZXB0ID0gZGlzcGF0Y2hEcmFnRXZlbnQo
ZXZlbnROYW1lcygpLmRyYWdlbnRlckV2ZW50LCAqbmV3VGFyZ2V0LCBldmVudCwgJmRhdGFUcmFu
c2Zlcik7Ci0gICAgICAgICAgICBpZiAoIWFjY2VwdCkKLSAgICAgICAgICAgICAgICBhY2NlcHQg
PSBmaW5kRHJvcFpvbmUobmV3VGFyZ2V0LmdldCgpLCAmZGF0YVRyYW5zZmVyKTsKKyAgICAgICAg
ICAgIGFjY2VwdCA9IGRpc3BhdGNoRHJhZ0VudGVyT3JEcmFnT3ZlckV2ZW50KGV2ZW50TmFtZXMo
KS5kcmFnZW50ZXJFdmVudCwgKm5ld1RhcmdldCwgZXZlbnQsIG1ha2VQYXN0ZWJvYXJkKCksIHNv
dXJjZU9wZXJhdGlvbiwgZHJhZ2dpbmdGaWxlcywgZGVzdGluYXRpb25PcGVyYXRpb24pOwogICAg
ICAgICB9CiAKICAgICAgICAgaWYgKHRhcmdldElzRnJhbWUobV9kcmFnVGFyZ2V0LmdldCgpLCB0
YXJnZXRGcmFtZSkpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBSZWN1cnNpbmcgYWdhaW4gaGVy
ZSBkb2Vzbid0IG1ha2Ugc2Vuc2UgaWYgdGhlIG5ld1RhcmdldCBhbmQgbV9kcmFnVGFyZ2V0IHdl
cmUgaW4gdGhlIHNhbWUgZnJhbWUuCiAgICAgICAgICAgICBpZiAodGFyZ2V0RnJhbWUpCi0gICAg
ICAgICAgICAgICAgYWNjZXB0ID0gdGFyZ2V0RnJhbWUtPmV2ZW50SGFuZGxlcigpLnVwZGF0ZURy
YWdBbmREcm9wKGV2ZW50LCBkYXRhVHJhbnNmZXIpOwotICAgICAgICB9IGVsc2UgaWYgKG1fZHJh
Z1RhcmdldCkKLSAgICAgICAgICAgIGRpc3BhdGNoRHJhZ0V2ZW50KGV2ZW50TmFtZXMoKS5kcmFn
bGVhdmVFdmVudCwgKm1fZHJhZ1RhcmdldCwgZXZlbnQsICZkYXRhVHJhbnNmZXIpOworICAgICAg
ICAgICAgICAgIGFjY2VwdCA9IHRhcmdldEZyYW1lLT5ldmVudEhhbmRsZXIoKS51cGRhdGVEcmFn
QW5kRHJvcChldmVudCwgbWFrZVBhc3RlYm9hcmQsIHNvdXJjZU9wZXJhdGlvbiwgZHJhZ2dpbmdG
aWxlcywgZGVzdGluYXRpb25PcGVyYXRpb24pOworICAgICAgICB9IGVsc2UgaWYgKG1fZHJhZ1Rh
cmdldCkgeworICAgICAgICAgICAgYXV0byBkYXRhVHJhbnNmZXIgPSBEYXRhVHJhbnNmZXI6OmNy
ZWF0ZUZvclVwZGF0aW5nRHJvcFRhcmdldChtX2RyYWdUYXJnZXQtPmRvY3VtZW50KCksIG1ha2VQ
YXN0ZWJvYXJkKCksIHNvdXJjZU9wZXJhdGlvbiwgZHJhZ2dpbmdGaWxlcyk7CisgICAgICAgICAg
ICBkaXNwYXRjaERyYWdFdmVudChldmVudE5hbWVzKCkuZHJhZ2xlYXZlRXZlbnQsICptX2RyYWdU
YXJnZXQsIGV2ZW50LCBkYXRhVHJhbnNmZXIuZ2V0KCkpOworICAgICAgICAgICAgZGF0YVRyYW5z
ZmVyLT5tYWtlSW52YWxpZEZvclNlY3VyaXR5KCk7CisgICAgICAgIH0KIAogICAgICAgICBpZiAo
bmV3VGFyZ2V0KSB7CiAgICAgICAgICAgICAvLyBXZSBkbyBub3QgZXhwbGljaXRseSBjYWxsIGRp
c3BhdGNoRHJhZ0V2ZW50IGhlcmUgYmVjYXVzZSBpdCBjb3VsZCB1bHRpbWF0ZWx5IHJlc3VsdCBp
biB0aGUgYXBwZWFyYW5jZSB0aGF0CkBAIC0yMzMzLDE2ICsyMzQ3LDE0IEBAIGJvb2wgRXZlbnRI
YW5kbGVyOjp1cGRhdGVEcmFnQW5kRHJvcChjb24KICAgICAgICAgRnJhbWUqIHRhcmdldEZyYW1l
OwogICAgICAgICBpZiAodGFyZ2V0SXNGcmFtZShuZXdUYXJnZXQuZ2V0KCksIHRhcmdldEZyYW1l
KSkgewogICAgICAgICAgICAgaWYgKHRhcmdldEZyYW1lKQotICAgICAgICAgICAgICAgIGFjY2Vw
dCA9IHRhcmdldEZyYW1lLT5ldmVudEhhbmRsZXIoKS51cGRhdGVEcmFnQW5kRHJvcChldmVudCwg
ZGF0YVRyYW5zZmVyKTsKKyAgICAgICAgICAgICAgICBhY2NlcHQgPSB0YXJnZXRGcmFtZS0+ZXZl
bnRIYW5kbGVyKCkudXBkYXRlRHJhZ0FuZERyb3AoZXZlbnQsIG1ha2VQYXN0ZWJvYXJkLCBzb3Vy
Y2VPcGVyYXRpb24sIGRyYWdnaW5nRmlsZXMsIGRlc3RpbmF0aW9uT3BlcmF0aW9uKTsKICAgICAg
ICAgfSBlbHNlIGlmIChuZXdUYXJnZXQpIHsKICAgICAgICAgICAgIC8vIE5vdGUsIHdoZW4gZGVh
bGluZyB3aXRoIHN1Yi1mcmFtZXMsIHdlIG1heSBuZWVkIHRvIGZpcmUgb25seSBhIGRyYWdvdmVy
IGV2ZW50IGFzIGEgZHJhZyBldmVudCBtYXkgaGF2ZSBiZWVuIGZpcmVkIGVhcmxpZXIuCiAgICAg
ICAgICAgICBpZiAoIW1fc2hvdWxkT25seUZpcmVEcmFnT3ZlckV2ZW50ICYmIGRyYWdTdGF0ZSgp
LnNvdXJjZSAmJiBkcmFnU3RhdGUoKS5zaG91bGREaXNwYXRjaEV2ZW50cykgewogICAgICAgICAg
ICAgICAgIC8vIGZvciBub3cgd2UgZG9uJ3QgY2FyZSBpZiBldmVudCBoYW5kbGVyIGNhbmNlbHMg
ZGVmYXVsdCBiZWhhdmlvciwgc2luY2UgdGhlcmUgaXMgbm9uZQogICAgICAgICAgICAgICAgIGRp
c3BhdGNoRHJhZ1NyY0V2ZW50KGV2ZW50TmFtZXMoKS5kcmFnRXZlbnQsIGV2ZW50KTsKICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGFjY2VwdCA9IGRpc3BhdGNoRHJhZ0V2ZW50KGV2ZW50TmFt
ZXMoKS5kcmFnb3ZlckV2ZW50LCAqbmV3VGFyZ2V0LCBldmVudCwgJmRhdGFUcmFuc2Zlcik7Ci0g
ICAgICAgICAgICBpZiAoIWFjY2VwdCkKLSAgICAgICAgICAgICAgICBhY2NlcHQgPSBmaW5kRHJv
cFpvbmUobmV3VGFyZ2V0LmdldCgpLCAmZGF0YVRyYW5zZmVyKTsKKyAgICAgICAgICAgIGFjY2Vw
dCA9IGRpc3BhdGNoRHJhZ0VudGVyT3JEcmFnT3ZlckV2ZW50KGV2ZW50TmFtZXMoKS5kcmFnb3Zl
ckV2ZW50LCAqbmV3VGFyZ2V0LCBldmVudCwgbWFrZVBhc3RlYm9hcmQoKSwgc291cmNlT3BlcmF0
aW9uLCBkcmFnZ2luZ0ZpbGVzLCBkZXN0aW5hdGlvbk9wZXJhdGlvbik7CiAgICAgICAgICAgICBt
X3Nob3VsZE9ubHlGaXJlRHJhZ092ZXJFdmVudCA9IGZhbHNlOwogICAgICAgICB9CiAgICAgfQpA
QCAtMjM1MCwyMyArMjM2MiwyNiBAQCBib29sIEV2ZW50SGFuZGxlcjo6dXBkYXRlRHJhZ0FuZERy
b3AoY29uCiAgICAgcmV0dXJuIGFjY2VwdDsKIH0KIAotdm9pZCBFdmVudEhhbmRsZXI6OmNhbmNl
bERyYWdBbmREcm9wKGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgZXZlbnQsIERhdGFUcmFuc2Zl
ciYgZGF0YVRyYW5zZmVyKQordm9pZCBFdmVudEhhbmRsZXI6OmNhbmNlbERyYWdBbmREcm9wKGNv
bnN0IFBsYXRmb3JtTW91c2VFdmVudCYgZXZlbnQsIHN0ZDo6dW5pcXVlX3B0cjxQYXN0ZWJvYXJk
PiYmIHBhc3RlYm9hcmQsIERyYWdPcGVyYXRpb24gc291cmNlT3BlcmF0aW9uLCBib29sIGRyYWdn
aW5nRmlsZXMpCiB7CiAgICAgUmVmPEZyYW1lPiBwcm90ZWN0ZWRGcmFtZShtX2ZyYW1lKTsKIAog
ICAgIEZyYW1lKiB0YXJnZXRGcmFtZTsKICAgICBpZiAodGFyZ2V0SXNGcmFtZShtX2RyYWdUYXJn
ZXQuZ2V0KCksIHRhcmdldEZyYW1lKSkgewogICAgICAgICBpZiAodGFyZ2V0RnJhbWUpCi0gICAg
ICAgICAgICB0YXJnZXRGcmFtZS0+ZXZlbnRIYW5kbGVyKCkuY2FuY2VsRHJhZ0FuZERyb3AoZXZl
bnQsIGRhdGFUcmFuc2Zlcik7CisgICAgICAgICAgICB0YXJnZXRGcmFtZS0+ZXZlbnRIYW5kbGVy
KCkuY2FuY2VsRHJhZ0FuZERyb3AoZXZlbnQsIFdURk1vdmUocGFzdGVib2FyZCksIHNvdXJjZU9w
ZXJhdGlvbiwgZHJhZ2dpbmdGaWxlcyk7CiAgICAgfSBlbHNlIGlmIChtX2RyYWdUYXJnZXQpIHsK
ICAgICAgICAgaWYgKGRyYWdTdGF0ZSgpLnNvdXJjZSAmJiBkcmFnU3RhdGUoKS5zaG91bGREaXNw
YXRjaEV2ZW50cykKICAgICAgICAgICAgIGRpc3BhdGNoRHJhZ1NyY0V2ZW50KGV2ZW50TmFtZXMo
KS5kcmFnRXZlbnQsIGV2ZW50KTsKLSAgICAgICAgZGlzcGF0Y2hEcmFnRXZlbnQoZXZlbnROYW1l
cygpLmRyYWdsZWF2ZUV2ZW50LCAqbV9kcmFnVGFyZ2V0LCBldmVudCwgJmRhdGFUcmFuc2Zlcik7
CisKKyAgICAgICAgYXV0byBkYXRhVHJhbnNmZXIgPSBEYXRhVHJhbnNmZXI6OmNyZWF0ZUZvclVw
ZGF0aW5nRHJvcFRhcmdldChtX2RyYWdUYXJnZXQtPmRvY3VtZW50KCksIFdURk1vdmUocGFzdGVi
b2FyZCksIHNvdXJjZU9wZXJhdGlvbiwgZHJhZ2dpbmdGaWxlcyk7CisgICAgICAgIGRpc3BhdGNo
RHJhZ0V2ZW50KGV2ZW50TmFtZXMoKS5kcmFnbGVhdmVFdmVudCwgKm1fZHJhZ1RhcmdldCwgZXZl
bnQsIGRhdGFUcmFuc2Zlci5nZXQoKSk7CisgICAgICAgIGRhdGFUcmFuc2Zlci0+bWFrZUludmFs
aWRGb3JTZWN1cml0eSgpOwogICAgIH0KICAgICBjbGVhckRyYWdTdGF0ZSgpOwogfQogCi1ib29s
IEV2ZW50SGFuZGxlcjo6cGVyZm9ybURyYWdBbmREcm9wKGNvbnN0IFBsYXRmb3JtTW91c2VFdmVu
dCYgZXZlbnQsIERhdGFUcmFuc2ZlciYgZGF0YVRyYW5zZmVyKQorYm9vbCBFdmVudEhhbmRsZXI6
OnBlcmZvcm1EcmFnQW5kRHJvcChjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIGV2ZW50LCBzdGQ6
OnVuaXF1ZV9wdHI8UGFzdGVib2FyZD4mJiBwYXN0ZWJvYXJkLCBEcmFnT3BlcmF0aW9uIHNvdXJj
ZU9wZXJhdGlvbiwgYm9vbCBkcmFnZ2luZ0ZpbGVzKQogewogICAgIFJlZjxGcmFtZT4gcHJvdGVj
dGVkRnJhbWUobV9mcmFtZSk7CiAKQEAgLTIzNzQsOSArMjM4OSwxMiBAQCBib29sIEV2ZW50SGFu
ZGxlcjo6cGVyZm9ybURyYWdBbmREcm9wKGNvCiAgICAgYm9vbCBwcmV2ZW50ZWREZWZhdWx0ID0g
ZmFsc2U7CiAgICAgaWYgKHRhcmdldElzRnJhbWUobV9kcmFnVGFyZ2V0LmdldCgpLCB0YXJnZXRG
cmFtZSkpIHsKICAgICAgICAgaWYgKHRhcmdldEZyYW1lKQotICAgICAgICAgICAgcHJldmVudGVk
RGVmYXVsdCA9IHRhcmdldEZyYW1lLT5ldmVudEhhbmRsZXIoKS5wZXJmb3JtRHJhZ0FuZERyb3Ao
ZXZlbnQsIGRhdGFUcmFuc2Zlcik7Ci0gICAgfSBlbHNlIGlmIChtX2RyYWdUYXJnZXQpCi0gICAg
ICAgIHByZXZlbnRlZERlZmF1bHQgPSBkaXNwYXRjaERyYWdFdmVudChldmVudE5hbWVzKCkuZHJv
cEV2ZW50LCAqbV9kcmFnVGFyZ2V0LCBldmVudCwgJmRhdGFUcmFuc2Zlcik7CisgICAgICAgICAg
ICBwcmV2ZW50ZWREZWZhdWx0ID0gdGFyZ2V0RnJhbWUtPmV2ZW50SGFuZGxlcigpLnBlcmZvcm1E
cmFnQW5kRHJvcChldmVudCwgV1RGTW92ZShwYXN0ZWJvYXJkKSwgc291cmNlT3BlcmF0aW9uLCBk
cmFnZ2luZ0ZpbGVzKTsKKyAgICB9IGVsc2UgaWYgKG1fZHJhZ1RhcmdldCkgeworICAgICAgICBh
dXRvIGRhdGFUcmFuc2ZlciA9IERhdGFUcmFuc2Zlcjo6Y3JlYXRlRm9yRHJvcChXVEZNb3ZlKHBh
c3RlYm9hcmQpLCBzb3VyY2VPcGVyYXRpb24sIGRyYWdnaW5nRmlsZXMpOworICAgICAgICBwcmV2
ZW50ZWREZWZhdWx0ID0gZGlzcGF0Y2hEcmFnRXZlbnQoZXZlbnROYW1lcygpLmRyb3BFdmVudCwg
Km1fZHJhZ1RhcmdldCwgZXZlbnQsIGRhdGFUcmFuc2Zlcik7CisgICAgICAgIGRhdGFUcmFuc2Zl
ci0+bWFrZUludmFsaWRGb3JTZWN1cml0eSgpOworICAgIH0KICAgICBjbGVhckRyYWdTdGF0ZSgp
OwogICAgIHJldHVybiBwcmV2ZW50ZWREZWZhdWx0OwogfQpAQCAtMzU0NSwxMiArMzU2MywxMyBA
QCB2b2lkIEV2ZW50SGFuZGxlcjo6dXBkYXRlRHJhZ1N0YXRlQWZ0ZXJFCiAvLyBSZXR1cm4gdmFs
dWUgaW5kaWNhdGVzIGlmIHdlIHNob3VsZCBjb250aW51ZSAiZGVmYXVsdCBwcm9jZXNzaW5nIiwg
aS5lLiwgd2hldGhlciBldmVudCBoYW5kbGVyIGNhbmNlbGVkLgogYm9vbCBFdmVudEhhbmRsZXI6
OmRpc3BhdGNoRHJhZ1NyY0V2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBjb25z
dCBQbGF0Zm9ybU1vdXNlRXZlbnQmIGV2ZW50KQogewotICAgIHJldHVybiAhZGlzcGF0Y2hEcmFn
RXZlbnQoZXZlbnRUeXBlLCAqZHJhZ1N0YXRlKCkuc291cmNlLCBldmVudCwgZHJhZ1N0YXRlKCku
ZGF0YVRyYW5zZmVyLmdldCgpKTsKKyAgICBBU1NFUlQoZHJhZ1N0YXRlKCkuZGF0YVRyYW5zZmVy
KTsKKyAgICByZXR1cm4gIWRpc3BhdGNoRHJhZ0V2ZW50KGV2ZW50VHlwZSwgKmRyYWdTdGF0ZSgp
LnNvdXJjZSwgZXZlbnQsICpkcmFnU3RhdGUoKS5kYXRhVHJhbnNmZXIpOwogfQogCiBib29sIEV2
ZW50SGFuZGxlcjo6ZGlzcGF0Y2hEcmFnU3RhcnRFdmVudE9uU291cmNlRWxlbWVudChEYXRhVHJh
bnNmZXImIGRhdGFUcmFuc2ZlcikKIHsKLSAgICByZXR1cm4gIWRpc3BhdGNoRHJhZ0V2ZW50KGV2
ZW50TmFtZXMoKS5kcmFnc3RhcnRFdmVudCwgKmRyYWdTdGF0ZSgpLnNvdXJjZSwgbV9tb3VzZURv
d24sICZkYXRhVHJhbnNmZXIpICYmICFtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlz
SW5QYXNzd29yZEZpZWxkKCk7CisgICAgcmV0dXJuICFkaXNwYXRjaERyYWdFdmVudChldmVudE5h
bWVzKCkuZHJhZ3N0YXJ0RXZlbnQsICpkcmFnU3RhdGUoKS5zb3VyY2UsIG1fbW91c2VEb3duLCBk
YXRhVHJhbnNmZXIpICYmICFtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzSW5QYXNz
d29yZEZpZWxkKCk7CiB9CiAgICAgCiBzdGF0aWMgYm9vbCBFeGFjdGx5T25lQml0U2V0KERyYWdT
b3VyY2VBY3Rpb24gbikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaAkocmV2aXNp
b24gMjIzMDIxKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNzUsNiArNzUsNyBAQCBjbGFzcyBIaXRUZXN0UmVzdWx0OwogY2xhc3MgS2V5
Ym9hcmRFdmVudDsKIGNsYXNzIE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHM7CiBjbGFzcyBO
b2RlOworY2xhc3MgUGFzdGVib2FyZDsKIGNsYXNzIFBsYXRmb3JtR2VzdHVyZUV2ZW50OwogY2xh
c3MgUGxhdGZvcm1LZXlib2FyZEV2ZW50OwogY2xhc3MgUGxhdGZvcm1Ub3VjaEV2ZW50OwpAQCAt
MTU1LDkgKzE1Niw5IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldENhcHR1
cmluZ01vdXNlRXZlbnRzRWxlbWVudChFbGVtZW50Kik7CiAKICNpZiBFTkFCTEUoRFJBR19TVVBQ
T1JUKQotICAgIGJvb2wgdXBkYXRlRHJhZ0FuZERyb3AoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50
JiwgRGF0YVRyYW5zZmVyJik7Ci0gICAgdm9pZCBjYW5jZWxEcmFnQW5kRHJvcChjb25zdCBQbGF0
Zm9ybU1vdXNlRXZlbnQmLCBEYXRhVHJhbnNmZXImKTsKLSAgICBib29sIHBlcmZvcm1EcmFnQW5k
RHJvcChjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmLCBEYXRhVHJhbnNmZXImKTsKKyAgICBib29s
IHVwZGF0ZURyYWdBbmREcm9wKGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYsIHN0ZDo6ZnVuY3Rp
b248c3RkOjp1bmlxdWVfcHRyPFBhc3RlYm9hcmQ+KCk+LCBEcmFnT3BlcmF0aW9uIHNvdXJjZU9w
ZXJhdGlvbiwgYm9vbCBkcmFnZ2luZ0ZpbGVzLCBzdGQ6Om9wdGlvbmFsPERyYWdPcGVyYXRpb24+
JiBkZXN0aW5hdGlvbk9wZXJhdGlvbik7CisgICAgdm9pZCBjYW5jZWxEcmFnQW5kRHJvcChjb25z
dCBQbGF0Zm9ybU1vdXNlRXZlbnQmLCBzdGQ6OnVuaXF1ZV9wdHI8UGFzdGVib2FyZD4mJiwgRHJh
Z09wZXJhdGlvbiwgYm9vbCBkcmFnZ2luZ0ZpbGVzKTsKKyAgICBib29sIHBlcmZvcm1EcmFnQW5k
RHJvcChjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmLCBzdGQ6OnVuaXF1ZV9wdHI8UGFzdGVib2Fy
ZD4mJiwgRHJhZ09wZXJhdGlvbiwgYm9vbCBkcmFnZ2luZ0ZpbGVzKTsKICAgICB2b2lkIHVwZGF0
ZURyYWdTdGF0ZUFmdGVyRWRpdERyYWdJZk5lZWRlZChFbGVtZW50JiByb290RWRpdGFibGVFbGVt
ZW50KTsKICAgICBSZWZQdHI8RWxlbWVudD4gZHJhZ2dlZEVsZW1lbnQoKSBjb25zdDsKICNlbmRp
ZgpAQCAtMzkyLDcgKzM5Myw4IEBAIHByaXZhdGU6CiAgICAgYm9vbCBkaXNwYXRjaE1vdXNlRXZl
bnQoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIE5vZGUqIHRhcmdldCwgYm9vbCBjYW5j
ZWxhYmxlLCBpbnQgY2xpY2tDb3VudCwgY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiwgYm9vbCBz
ZXRVbmRlcik7CiAKICNpZiBFTkFCTEUoRFJBR19TVVBQT1JUKQotICAgIGJvb2wgZGlzcGF0Y2hE
cmFnRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIEVsZW1lbnQmIHRhcmdldCwg
Y29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiwgRGF0YVRyYW5zZmVyKik7CisgICAgYm9vbCBkaXNw
YXRjaERyYWdFdmVudChjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgRWxlbWVudCYgdGFy
Z2V0LCBjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmLCBEYXRhVHJhbnNmZXImKTsKKyAgICBib29s
IGRpc3BhdGNoRHJhZ0VudGVyT3JEcmFnT3ZlckV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgZXZl
bnRUeXBlLCBFbGVtZW50JiB0YXJnZXQsIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYsIHN0ZDo6
dW5pcXVlX3B0cjxQYXN0ZWJvYXJkPiYmICwgRHJhZ09wZXJhdGlvbiwgYm9vbCBkcmFnZ2luZ0Zp
bGVzLCBzdGQ6Om9wdGlvbmFsPERyYWdPcGVyYXRpb24+JiBkZXN0aW5hdGlvbk9wZXJhdGlvbik7
CiAgICAgdm9pZCBpbnZhbGlkYXRlRGF0YVRyYW5zZmVyKCk7CiAKICAgICBib29sIGhhbmRsZURy
YWcoY29uc3QgTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYsIENoZWNrRHJhZ0h5c3RlcmVz
aXMpOwpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMjIzMDIxKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTggQEAKKzIwMTctMTAtMDcgIFJ5b3N1a2UgTml3
YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAgZHJhZ2VudGVyIGFuZCBkcmFnbGVhdmUg
c2hvdWxkbid0IHVzZSB0aGUgc2FtZSBkYXRhIHRyYW5zZmVyIG9iamVjdAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc4MDU2CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgYSByZWdyZXNzaW9uIHRl
c3QgZm9yIGNoZWNraW5nIHRoZSB1bmlxdWVuZXNzIG9mIGRhdGFUcmFuc2ZlciBvYmplY3QgZm9y
IGRyYWdlbnRlciBhbmQgZHJhZ2xlYXZlIGV2ZW50cy4KKyAgICAgICAgVW5mb3J0dW5hdGVseSwg
dGhlIHRlc3QgaXMgb25seSBydW5uYWJsZSBpbiBNYWMgV2ViS2l0MSBwb3J0IGR1ZSB0byB0aGUg
bGFjayBvZiBzdXBwb3J0IGluIFdlYktpdFRlc3RSdW5uZXIuCisKKyAgICAgICAgKiBUZXN0RXhw
ZWN0YXRpb25zOgorICAgICAgICAqIGVkaXRpbmcvcGFzdGVib2FyZC9kYXRhLXRyYW5zZmVyLWlz
LXVuaXF1ZS1mb3ItZHJhZ2VudGVyLWFuZC1kcmFnbGVhdmUtZXhwZWN0ZWQudHh0OiBBZGRlZC4K
KyAgICAgICAgKiBlZGl0aW5nL3Bhc3RlYm9hcmQvZGF0YS10cmFuc2Zlci1pcy11bmlxdWUtZm9y
LWRyYWdlbnRlci1hbmQtZHJhZ2xlYXZlLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3Jt
L21hYy13azEvVGVzdEV4cGVjdGF0aW9uczoKKwogMjAxNy0xMC0wNyAgQW5keSBFc3RlcyAgPGFl
c3Rlc0BhcHBsZS5jb20+CiAKICAgICAgICAgW1BheW1lbnQgUmVxdWVzdF0gSW1wbGVtZW50IFBh
eW1lbnRSZXF1ZXN0LnNob3coKSBhbmQgUGF5bWVudFJlcXVlc3QuaGlkZSgpCkluZGV4OiBMYXlv
dXRUZXN0cy9UZXN0RXhwZWN0YXRpb25zCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL1Rlc3RF
eHBlY3RhdGlvbnMJKHJldmlzaW9uIDIyMzAyMSkKKysrIExheW91dFRlc3RzL1Rlc3RFeHBlY3Rh
dGlvbnMJKHdvcmtpbmcgY29weSkKQEAgLTczLDYgKzczLDcgQEAgZWRpdGluZy9wYXN0ZWJvYXJk
L2RhdGEtdHJhbnNmZXItZ2V0LWRhdAogZWRpdGluZy9wYXN0ZWJvYXJkL2RhdGEtdHJhbnNmZXIt
Z2V0LWRhdGEtb24tZHJvcC1wbGFpbi10ZXh0Lmh0bWwgWyBTa2lwIF0KIGVkaXRpbmcvcGFzdGVi
b2FyZC9kYXRhLXRyYW5zZmVyLWdldC1kYXRhLW9uLWRyb3AtcmljaC10ZXh0Lmh0bWwgWyBTa2lw
IF0KIGVkaXRpbmcvcGFzdGVib2FyZC9kYXRhLXRyYW5zZmVyLWdldC1kYXRhLW9uLWRyb3AtdXJs
Lmh0bWwgWyBTa2lwIF0KK2VkaXRpbmcvcGFzdGVib2FyZC9kYXRhLXRyYW5zZmVyLWlzLXVuaXF1
ZS1mb3ItZHJhZ2VudGVyLWFuZC1kcmFnbGVhdmUuaHRtbCBbIFNraXAgXQogZWRpdGluZy9wYXN0
ZWJvYXJkL2RyYWctZW5kLWNyYXNoLWFjY2Vzc2luZy1pdGVtLWxpc3QuaHRtbCBbIFNraXAgXQog
ZWRpdGluZy9wYXN0ZWJvYXJkL2RhdGEtdHJhbnNmZXItaXRlbS1saXN0LWFkZC1maWxlLW9uLWRy
YWcuaHRtbCBbIFNraXAgXQogCkluZGV4OiBMYXlvdXRUZXN0cy9lZGl0aW5nL3Bhc3RlYm9hcmQv
ZGF0YS10cmFuc2Zlci1pcy11bmlxdWUtZm9yLWRyYWdlbnRlci1hbmQtZHJhZ2xlYXZlLWV4cGVj
dGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9lZGl0aW5nL3Bhc3RlYm9hcmQvZGF0
YS10cmFuc2Zlci1pcy11bmlxdWUtZm9yLWRyYWdlbnRlci1hbmQtZHJhZ2xlYXZlLWV4cGVjdGVk
LnR4dAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy9lZGl0aW5nL3Bhc3RlYm9hcmQvZGF0
YS10cmFuc2Zlci1pcy11bmlxdWUtZm9yLWRyYWdlbnRlci1hbmQtZHJhZ2xlYXZlLWV4cGVjdGVk
LnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDkgQEAKK1BBU1MgZHJhZ3N0YXJ0IGZvciBz
b3VyY2UgaGFkIGFuIHVuaXF1ZSBkYXRhVHJhbnNmZXIgb2JqZWN0CitQQVNTIGRyYWdlbnRlciBm
b3IgcGFzc292ZXIgaGFkIGFuIHVuaXF1ZSBkYXRhVHJhbnNmZXIgb2JqZWN0CitQQVNTIGRyYWdl
bnRlciBmb3IgZGVzdGluYXRpb24gaGFkIGFuIHVuaXF1ZSBkYXRhVHJhbnNmZXIgb2JqZWN0CitQ
QVNTIGRyYWdsZWF2ZSBmb3IgcGFzc292ZXIgaGFkIGFuIHVuaXF1ZSBkYXRhVHJhbnNmZXIgb2Jq
ZWN0CitQQVNTIGRyYWdsZWF2ZSBmb3IgZGVzdGluYXRpb24gaGFkIGFuIHVuaXF1ZSBkYXRhVHJh
bnNmZXIgb2JqZWN0CitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09N
UExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvZWRpdGluZy9wYXN0ZWJvYXJkL2RhdGEtdHJhbnNm
ZXItaXMtdW5pcXVlLWZvci1kcmFnZW50ZXItYW5kLWRyYWdsZWF2ZS5odG1sCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2VkaXRpbmcvcGFzdGVib2FyZC9kYXRhLXRyYW5zZmVyLWlzLXVuaXF1
ZS1mb3ItZHJhZ2VudGVyLWFuZC1kcmFnbGVhdmUuaHRtbAkobm9uZXhpc3RlbnQpCisrKyBMYXlv
dXRUZXN0cy9lZGl0aW5nL3Bhc3RlYm9hcmQvZGF0YS10cmFuc2Zlci1pcy11bmlxdWUtZm9yLWRy
YWdlbnRlci1hbmQtZHJhZ2xlYXZlLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2OCBA
QAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxib2R5PgorPHN0eWxlPgorI2NvbnRhaW5lciA+
IGRpdiB7IHdpZHRoOiAxMDBweDsgaGVpZ2h0OiA1MHB4OyBtYXJnaW46IDBweDsgfQorPC9zdHls
ZT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29udGFpbmVyIj4KKzxkaXYg
ZHJhZ2dhYmxlPSJ0cnVlIiBpZD0ic291cmNlIiBzdHlsZT0iYmFja2dyb3VuZDogIzljZiI+RHJh
ZyB0aGlzPC9kaXY+Cis8ZGl2IGlkPSJwYXNzb3ZlciIgc3R5bGU9ImJhY2tncm91bmQ6ICNmZjki
PkRyYWcgb3ZlciBoZXJlPC9kaXY+Cis8ZGl2IGlkPSJkZXN0aW5hdGlvbiIgc3R5bGU9ImJhY2tn
cm91bmQ6ICNmYzkiPkFuZCBkcm9wIGhlcmU8L2Rpdj4KKzwvZGl2PgorPGRpdiBpZD0iY29uc29s
ZSI+PC9kaXY+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48
L3NjcmlwdD4KKzxzY3JpcHQ+CisKK3ZhciBqc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKKworc291cmNl
LmFkZEV2ZW50TGlzdGVuZXIoImRyYWdzdGFydCIsIChldmVudCkgPT4geworICAgIGV2ZW50LmRh
dGFUcmFuc2Zlci5lZmZlY3RBbGxvd2VkID0gJ2NvcHknOworICAgIGV2ZW50LmRhdGFUcmFuc2Zl
ci5zZXREYXRhKCd0ZXh0JywgJ2hlbGxvLCB3b3JsZCcpOworICAgIGRhdGFUcmFuc2Zlck1hcC5j
bGVhcigpOworICAgIHRlc3RVbmlxdWVuZXNzQW5kQWRkKGV2ZW50LmRhdGFUcmFuc2ZlciwgJ3Nv
dXJjZScsICdkcmFnc3RhcnQnKTsKK30pOworCitjb25zdCBkYXRhVHJhbnNmZXJNYXAgPSBuZXcg
TWFwOworZnVuY3Rpb24gdGVzdFVuaXF1ZW5lc3NBbmRBZGQoZGF0YVRyYW5zZmVyLCBsYWJlbCwg
ZXZlbnRUeXBlKSB7CisgICAgY29uc3QgZXhpc3RpbmdFbnRyeSA9IGRhdGFUcmFuc2Zlck1hcC5n
ZXQoZGF0YVRyYW5zZmVyKTsKKyAgICBpZiAoZXhpc3RpbmdFbnRyeSkgeworICAgICAgICB0ZXN0
RmFpbGVkKGAke2V2ZW50VHlwZX0gZm9yICR7bGFiZWx9IGhhZCB0aGUgc2FtZSBkYXRhVHJhbnNm
ZXIgb2JqZWN0IGFzICR7ZXhpc3RpbmdFbnRyeS5ldmVudFR5cGV9IGZvciAke2V4aXN0aW5nRW50
cnkubGFiZWx9YCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgdGVzdFBhc3NlZChgJHtl
dmVudFR5cGV9IGZvciAke2xhYmVsfSBoYWQgYW4gdW5pcXVlIGRhdGFUcmFuc2ZlciBvYmplY3Rg
KTsKKyAgICBkYXRhVHJhbnNmZXJNYXAuc2V0KGRhdGFUcmFuc2Zlciwge2xhYmVsLCBldmVudFR5
cGV9KTsKK30KKworcGFzc292ZXIuYWRkRXZlbnRMaXN0ZW5lcigiZHJhZ2VudGVyIiwgKGV2ZW50
KSA9PiB7CisgICAgdGVzdFVuaXF1ZW5lc3NBbmRBZGQoZXZlbnQuZGF0YVRyYW5zZmVyLCAncGFz
c292ZXInLCAnZHJhZ2VudGVyJyk7Cit9KTsKK3Bhc3NvdmVyLmFkZEV2ZW50TGlzdGVuZXIoImRy
YWdsZWF2ZSIsIChldmVudCkgPT4geworICAgIHRlc3RVbmlxdWVuZXNzQW5kQWRkKGV2ZW50LmRh
dGFUcmFuc2ZlciwgJ3Bhc3NvdmVyJywgJ2RyYWdsZWF2ZScpOworfSk7CitkZXN0aW5hdGlvbi5h
ZGRFdmVudExpc3RlbmVyKCJkcmFnZW50ZXIiLCAoZXZlbnQpID0+IHsKKyAgICB0ZXN0VW5pcXVl
bmVzc0FuZEFkZChldmVudC5kYXRhVHJhbnNmZXIsICdkZXN0aW5hdGlvbicsICdkcmFnZW50ZXIn
KTsKK30pOworZGVzdGluYXRpb24uYWRkRXZlbnRMaXN0ZW5lcigiZHJhZ2xlYXZlIiwgKGV2ZW50
KSA9PiB7CisgICAgdGVzdFVuaXF1ZW5lc3NBbmRBZGQoZXZlbnQuZGF0YVRyYW5zZmVyLCAnZGVz
dGluYXRpb24nLCAnZHJhZ2xlYXZlJyk7Cit9KTsKK2Rlc3RpbmF0aW9uLmFkZEV2ZW50TGlzdGVu
ZXIoImRyb3AiLCAoZXZlbnQpID0+IHsKKyAgICB0ZXN0VW5pcXVlbmVzc0FuZEFkZChldmVudC5k
YXRhVHJhbnNmZXIsICdkZXN0aW5hdGlvbicsICdkcm9wJyk7CisgICAgZmluaXNoSlNUZXN0KCk7
Cit9KTsKKworaWYgKHdpbmRvdy5ldmVudFNlbmRlcikgeworICAgIGV2ZW50U2VuZGVyLm1vdXNl
TW92ZVRvKHNvdXJjZS5vZmZzZXRMZWZ0ICsgMTAsIHNvdXJjZS5vZmZzZXRUb3AgKyAxMCk7Cisg
ICAgZXZlbnRTZW5kZXIubW91c2VEb3duKCk7CisgICAgZXZlbnRTZW5kZXIubGVhcEZvcndhcmQo
NTAwKTsKKyAgICBldmVudFNlbmRlci5tb3VzZU1vdmVUbyhwYXNzb3Zlci5vZmZzZXRMZWZ0ICsg
MTAsIHBhc3NvdmVyLm9mZnNldFRvcCArIDEwKTsKKyAgICBldmVudFNlbmRlci5sZWFwRm9yd2Fy
ZCgxMDApOworICAgIGV2ZW50U2VuZGVyLm1vdXNlTW92ZVRvKGRlc3RpbmF0aW9uLm9mZnNldExl
ZnQgKyAxMCwgZGVzdGluYXRpb24ub2Zmc2V0VG9wICsgMTApOworICAgIGV2ZW50U2VuZGVyLm1v
dXNlVXAoKTsKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29udGFpbmVyJykucmVtb3Zl
KCk7Cit9CisKKzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0
LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMv
cGxhdGZvcm0vbWFjLXdrMS9UZXN0RXhwZWN0YXRpb25zCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL3BsYXRmb3JtL21hYy13azEvVGVzdEV4cGVjdGF0aW9ucwkocmV2aXNpb24gMjIzMDIxKQor
KysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjLXdrMS9UZXN0RXhwZWN0YXRpb25zCSh3b3JraW5n
IGNvcHkpCkBAIC0xMSw2ICsxMSw3IEBAIGVkaXRpbmcvcGFzdGVib2FyZC9kYXRhLXRyYW5zZmVy
LWdldC1kYXQKIGVkaXRpbmcvcGFzdGVib2FyZC9kYXRhLXRyYW5zZmVyLWdldC1kYXRhLW9uLWRy
b3AtcGxhaW4tdGV4dC5odG1sIFsgUGFzcyBdCiBlZGl0aW5nL3Bhc3RlYm9hcmQvZGF0YS10cmFu
c2Zlci1nZXQtZGF0YS1vbi1kcm9wLXJpY2gtdGV4dC5odG1sIFsgUGFzcyBdCiBlZGl0aW5nL3Bh
c3RlYm9hcmQvZGF0YS10cmFuc2Zlci1nZXQtZGF0YS1vbi1kcm9wLXVybC5odG1sIFsgUGFzcyBd
CitlZGl0aW5nL3Bhc3RlYm9hcmQvZGF0YS10cmFuc2Zlci1pcy11bmlxdWUtZm9yLWRyYWdlbnRl
ci1hbmQtZHJhZ2xlYXZlLmh0bWwgWyBQYXNzIF0KIGVkaXRpbmcvcGFzdGVib2FyZC9kcmFnLWVu
ZC1jcmFzaC1hY2Nlc3NpbmctaXRlbS1saXN0Lmh0bWwgWyBQYXNzIF0KIGVkaXRpbmcvcGFzdGVi
b2FyZC9kYXRhLXRyYW5zZmVyLWl0ZW0tbGlzdC1hZGQtZmlsZS1vbi1kcmFnLmh0bWwgWyBQYXNz
IF0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>323117</attachid>
            <date>2017-10-07 20:25:47 -0700</date>
            <delta_ts>2017-10-08 02:29:23 -0700</delta_ts>
            <desc>Skipped the test on Windows</desc>
            <filename>bug-178056-20171007202545.patch</filename>
            <type>text/plain</type>
            <size>30195</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyMzAyNCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ1IEBACisyMDE3LTEwLTA3ICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIGRyYWdlbnRlciBhbmQgZHJhZ2xl
YXZlIHNob3VsZG4ndCB1c2UgdGhlIHNhbWUgZGF0YSB0cmFuc2ZlciBvYmplY3QKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3ODA1NgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggZml4ZXMg
dGhlIGJ1ZyB0aGF0IHdlIHdlcmUgdXNpbmcgYSBzaW5nbGUgRGF0YVRyYW5zZmVyIHRvIGZpcmUg
ZHJhZ2xlYXZlIGFuZCBkcmFnZW50ZXIgZXZlbnRzCisgICAgICAgIHdoZW4gdGhlIGRyYWcgdGFy
Z2V0IG1vdmVzIGZyb20gb25lIGVsZW1lbnQgdG8gYW5vdGhlci4KKworICAgICAgICBJdCBhbG9z
IHJlZmFjdG9ycyBEcmFnQ29udHJvbGxlciBhbmQgRXZlbnRIYW5kbGVyIGNvZGUgc28gdGhhdCB0
aGUgY29uc3RydWN0aW9uIG9mIERhdGFUcmFuc2ZlciBvYmplY3QKKyAgICAgICAgaGFwcGVucyBp
biBFdmVudEhhbmRsZXIgaW5zdGVhZCBvZiBEcmFnQ29udHJvbGxlciwgYW5kIGV4dHJhY3RzIGNy
ZWF0ZUZvclVwZGF0aW5nRHJvcFRhcmdldCBvdXQgb2YKKyAgICAgICAgY3JlYXRlRm9yRHJvcCB0
byBoYXZlIGEgYmV0dGVyIGVuY2Fwc3VsYXRpb24gb3ZlciB0aGUgZGF0YSBzdG9yZSBtb2RlLgor
CisgICAgICAgIGRyYWcgcmVsYXRlZCBmdW5jdGlvbnMgaW4gRXZlbnRIYW5kbGVyIG5vdyB0YWtl
cyBzdGQ6OnVuaXF1ZV9wdHI8UGFzdGVib2FyZD4mJiwgZHJhZyBvcGVyYXRpb24gbWFzayBzZXQK
KyAgICAgICAgYnkgdGhlIGRyYWcgc291cmNlLCBhbmQgYSBib29sZWFuIGluZGljYXRpbmcgd2hl
dGhlciB0aGlzIGRyYWcgJiBkcm9wIGlzIGZvciBmaWxlcyBvciBub3QuIHVwZGF0ZURyYWdBbmRE
cm9wCisgICAgICAgIHRha2VzIGEgY2xvc3VyZSB3aGljaCBtYWtlcyBhIHBhc3RlYm9hcmQgYmVj
YXVzZSBpdCBoYXMgdG8gY3JlYXRlIHR3byBpbnN0YW5jZXMgb2YgRGF0YVRyYW5zZmVyIG9uZSBm
b3IKKyAgICAgICAgZHJhZ2xlYXZlIGV2ZW50IGFuZCBhbm90aGVyIG9uZSBmb3IgZHJhZ2VudGVy
IGV2ZW50IGluIHNvbWUgY2FzZXMuCisKKyAgICAgICAgVGVzdDogZWRpdGluZy9wYXN0ZWJvYXJk
L2RhdGEtdHJhbnNmZXItaXMtdW5pcXVlLWZvci1kcmFnZW50ZXItYW5kLWRyYWdsZWF2ZS5odG1s
CisKKyAgICAgICAgKiBkb20vRGF0YVRyYW5zZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRh
dGFUcmFuc2Zlcjo6Y3JlYXRlRm9yRHJvcCk6IE5vdyB0YWtlcyBQYXN0ZWJvYXJkIGluc3RlYWQg
b2YgRHJhZ0RhdGEuCisgICAgICAgIChXZWJDb3JlOjpEYXRhVHJhbnNmZXI6OmNyZWF0ZUZvclVw
ZGF0aW5nRHJvcFRhcmdldCk6IEV4dHJhY3RlZCBvdXQgb2YgY3JlYXRlRm9yRHJvcC4gTW92ZWQg
dGhlIGNvZGUgdG8KKyAgICAgICAgdXNlIFJlYWRvbmx5IG1vZGUgaW4gZGFzaGJvYWQgaGVyZSBm
cm9tIGNyZWF0ZURhdGFUcmFuc2ZlclRvVXBkYXRlRHJhZyBpbiBEcmFnQ29udHJvbGxlci5jcHAu
CisgICAgICAgICogZG9tL0RhdGFUcmFuc2Zlci5oOgorICAgICAgICAqIHBhZ2UvRHJhZ0NvbnRy
b2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlRGF0YVRyYW5zZmVyVG9VcGRhdGVE
cmFnKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRyYWdDb250cm9sbGVyOjpkcmFnRXhp
dGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdDb250cm9sbGVyOjpwZXJmb3JtRHJhZ09wZXJh
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpEcmFnQ29udHJvbGxlcjo6dHJ5REhUTUxEcmFnKToK
KyAgICAgICAgKiBwYWdlL0V2ZW50SGFuZGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVu
dEhhbmRsZXI6OmRpc3BhdGNoRHJhZ0V2ZW50KTogTWFkZSB0aGlzIGZ1Y250aW9uIHRha2UgRGF0
YVRyYW5zZmVyJiBpbnN0ZWFkIG9mIERhdGFUcmFuc2ZlciouCisgICAgICAgIChXZWJDb3JlOjpm
aW5kRHJvcFpvbmUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6ZGlz
cGF0Y2hEcmFnRW50ZXJPckRyYWdPdmVyRXZlbnQpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkV2ZW50SGFuZGxlcjo6dXBkYXRlRHJhZ0FuZERyb3ApOgorICAgICAgICAoV2ViQ29yZTo6RXZl
bnRIYW5kbGVyOjpjYW5jZWxEcmFnQW5kRHJvcCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhh
bmRsZXI6OnBlcmZvcm1EcmFnQW5kRHJvcCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRs
ZXI6OmRpc3BhdGNoRHJhZ1NyY0V2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxl
cjo6ZGlzcGF0Y2hEcmFnU3RhcnRFdmVudE9uU291cmNlRWxlbWVudCk6CisgICAgICAgICogcGFn
ZS9FdmVudEhhbmRsZXIuaDoKKwogMjAxNy0xMC0wNyAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBs
ZS5jb20+CiAKICAgICAgICAgVXBkYXRlIERvY3VtZW50LmNyZWF0ZUV2ZW50IGZvciByZWNlbnQg
RE9NIHNwZWNpZmljYXRpb24gY2hhbmdlcwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RhdGFU
cmFuc2Zlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0RhdGFUcmFuc2Zl
ci5jcHAJKHJldmlzaW9uIDIyMzAyMSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9EYXRhVHJhbnNm
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMzcsMTAgKzMzNywyNSBAQCBSZWY8RGF0YVRyYW5z
ZmVyPiBEYXRhVHJhbnNmZXI6OmNyZWF0ZUZvCiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRGF0
YVRyYW5zZmVyKFN0b3JlTW9kZTo6UmVhZFdyaXRlLCBzdGQ6Om1ha2VfdW5pcXVlPFN0YXRpY1Bh
c3RlYm9hcmQ+KCksIFR5cGU6OkRyYWdBbmREcm9wRGF0YSkpOwogfQogCi1SZWY8RGF0YVRyYW5z
ZmVyPiBEYXRhVHJhbnNmZXI6OmNyZWF0ZUZvckRyb3AoU3RvcmVNb2RlIGFjY2Vzc01vZGUsIGNv
bnN0IERyYWdEYXRhJiBkcmFnRGF0YSkKK1JlZjxEYXRhVHJhbnNmZXI+IERhdGFUcmFuc2Zlcjo6
Y3JlYXRlRm9yRHJvcChzdGQ6OnVuaXF1ZV9wdHI8UGFzdGVib2FyZD4mJiBwYXN0ZWJvYXJkLCBE
cmFnT3BlcmF0aW9uIHNvdXJjZU9wZXJhdGlvbiwgYm9vbCBkcmFnZ2luZ0ZpbGVzKQogewotICAg
IGF1dG8gdHlwZSA9IGRyYWdEYXRhLmNvbnRhaW5zRmlsZXMoKSA/IFR5cGU6OkRyYWdBbmREcm9w
RmlsZXMgOiBUeXBlOjpEcmFnQW5kRHJvcERhdGE7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
RGF0YVRyYW5zZmVyKGFjY2Vzc01vZGUsIFBhc3RlYm9hcmQ6OmNyZWF0ZUZvckRyYWdBbmREcm9w
KGRyYWdEYXRhKSwgdHlwZSkpOworICAgIGF1dG8gZGF0YVRyYW5zZmVyID0gYWRvcHRSZWYoKm5l
dyBEYXRhVHJhbnNmZXIoRGF0YVRyYW5zZmVyOjpTdG9yZU1vZGU6OlJlYWRvbmx5LCBXVEZNb3Zl
KHBhc3RlYm9hcmQpLCBkcmFnZ2luZ0ZpbGVzID8gVHlwZTo6RHJhZ0FuZERyb3BGaWxlcyA6IFR5
cGU6OkRyYWdBbmREcm9wRGF0YSkpOworICAgIGRhdGFUcmFuc2Zlci0+c2V0U291cmNlT3BlcmF0
aW9uKHNvdXJjZU9wZXJhdGlvbik7CisgICAgcmV0dXJuIGRhdGFUcmFuc2ZlcjsKK30KKworUmVm
PERhdGFUcmFuc2Zlcj4gRGF0YVRyYW5zZmVyOjpjcmVhdGVGb3JVcGRhdGluZ0Ryb3BUYXJnZXQo
RG9jdW1lbnQmIGRvY3VtZW50LCBzdGQ6OnVuaXF1ZV9wdHI8UGFzdGVib2FyZD4mJiBwYXN0ZWJv
YXJkLCBEcmFnT3BlcmF0aW9uIHNvdXJjZU9wZXJhdGlvbiwgYm9vbCBkcmFnZ2luZ0ZpbGVzKQor
eworICAgIGF1dG8gbW9kZSA9IERhdGFUcmFuc2Zlcjo6U3RvcmVNb2RlOjpQcm90ZWN0ZWQ7Cisj
aWYgRU5BQkxFKERBU0hCT0FSRF9TVVBQT1JUKQorICAgIGlmIChkb2N1bWVudC5zZXR0aW5ncygp
LnVzZXNEYXNoYm9hcmRCYWNrd2FyZENvbXBhdGliaWxpdHlNb2RlKCkgJiYgZG9jdW1lbnQuc2Vj
dXJpdHlPcmlnaW4oKS5pc0xvY2FsKCkpCisgICAgICAgIG1vZGUgPSBEYXRhVHJhbnNmZXI6OlN0
b3JlTW9kZTo6UmVhZG9ubHk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShkb2N1bWVudCk7Cisj
ZW5kaWYKKyAgICBhdXRvIGRhdGFUcmFuc2ZlciA9IGFkb3B0UmVmKCpuZXcgRGF0YVRyYW5zZmVy
KG1vZGUsIFdURk1vdmUocGFzdGVib2FyZCksIGRyYWdnaW5nRmlsZXMgPyBUeXBlOjpEcmFnQW5k
RHJvcEZpbGVzIDogVHlwZTo6RHJhZ0FuZERyb3BEYXRhKSk7CisgICAgZGF0YVRyYW5zZmVyLT5z
ZXRTb3VyY2VPcGVyYXRpb24oc291cmNlT3BlcmF0aW9uKTsKKyAgICByZXR1cm4gZGF0YVRyYW5z
ZmVyOwogfQogCiB2b2lkIERhdGFUcmFuc2Zlcjo6c2V0RHJhZ0ltYWdlKEVsZW1lbnQqIGVsZW1l
bnQsIGludCB4LCBpbnQgeSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9EYXRhVHJhbnNmZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRGF0YVRyYW5zZmVyLmgJKHJldmlz
aW9uIDIyMzAyMSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9EYXRhVHJhbnNmZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENh
Y2hlZEltYWdlOwogY2xhc3MgRGF0YVRyYW5zZmVySXRlbUxpc3Q7CitjbGFzcyBEb2N1bWVudDsK
IGNsYXNzIERyYWdEYXRhOwogY2xhc3MgRHJhZ0ltYWdlTG9hZGVyOwogY2xhc3MgRWxlbWVudDsK
QEAgLTgzLDcgKzg0LDggQEAgcHVibGljOgogI2lmIEVOQUJMRShEUkFHX1NVUFBPUlQpCiAgICAg
c3RhdGljIFJlZjxEYXRhVHJhbnNmZXI+IGNyZWF0ZUZvckRyYWcoKTsKICAgICBzdGF0aWMgUmVm
PERhdGFUcmFuc2Zlcj4gY3JlYXRlRm9yRHJhZ1N0YXJ0RXZlbnQoKTsKLSAgICBzdGF0aWMgUmVm
PERhdGFUcmFuc2Zlcj4gY3JlYXRlRm9yRHJvcChTdG9yZU1vZGUsIGNvbnN0IERyYWdEYXRhJik7
CisgICAgc3RhdGljIFJlZjxEYXRhVHJhbnNmZXI+IGNyZWF0ZUZvckRyb3Aoc3RkOjp1bmlxdWVf
cHRyPFBhc3RlYm9hcmQ+JiYsIERyYWdPcGVyYXRpb24sIGJvb2wgZHJhZ2dpbmdGaWxlcyk7Cisg
ICAgc3RhdGljIFJlZjxEYXRhVHJhbnNmZXI+IGNyZWF0ZUZvclVwZGF0aW5nRHJvcFRhcmdldChE
b2N1bWVudCYsIHN0ZDo6dW5pcXVlX3B0cjxQYXN0ZWJvYXJkPiYmLCBEcmFnT3BlcmF0aW9uLCBi
b29sIGRyYWdnaW5nRmlsZXMpOwogCiAgICAgYm9vbCBkcm9wRWZmZWN0SXNVbmluaXRpYWxpemVk
KCkgY29uc3QgeyByZXR1cm4gbV9kcm9wRWZmZWN0ID09ICJ1bmluaXRpYWxpemVkIjsgfQogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMjIzMDIx
KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIyMCwzMSArMjIwLDExIEBAIERyYWdPcGVyYXRpb24gRHJhZ0NvbnRyb2xsZXI6OmRy
YWdFbnRlcmUKICAgICByZXR1cm4gZHJhZ0VudGVyZWRPclVwZGF0ZWQoZHJhZ0RhdGEpOwogfQog
Ci1zdGF0aWMgUmVmPERhdGFUcmFuc2Zlcj4gY3JlYXRlRGF0YVRyYW5zZmVyVG9VcGRhdGVEcmFn
KGNvbnN0IERyYWdEYXRhJiBkcmFnRGF0YSwgY29uc3QgU2V0dGluZ3MmIHNldHRpbmdzLCBSZWZQ
dHI8RG9jdW1lbnQ+JiYgZG9jdW1lbnRVbmRlck1vdXNlKQotewotICAgIGF1dG8gYWNjZXNzTW9k
ZSA9IERhdGFUcmFuc2Zlcjo6U3RvcmVNb2RlOjpQcm90ZWN0ZWQ7Ci0KLSNpZiBFTkFCTEUoREFT
SEJPQVJEX1NVUFBPUlQpCi0gICAgaWYgKHNldHRpbmdzLnVzZXNEYXNoYm9hcmRCYWNrd2FyZENv
bXBhdGliaWxpdHlNb2RlKCkgJiYgKCFkb2N1bWVudFVuZGVyTW91c2UgfHwgZG9jdW1lbnRVbmRl
ck1vdXNlLT5zZWN1cml0eU9yaWdpbigpLmlzTG9jYWwoKSkpCi0gICAgICAgIGFjY2Vzc01vZGUg
PSBEYXRhVHJhbnNmZXI6OlN0b3JlTW9kZTo6UmVhZG9ubHk7Ci0jZWxzZQotICAgIFVOVVNFRF9Q
QVJBTShzZXR0aW5ncyk7Ci0gICAgVU5VU0VEX1BBUkFNKGRvY3VtZW50VW5kZXJNb3VzZSk7Ci0j
ZW5kaWYKLQotICAgIGF1dG8gZGF0YVRyYW5zZmVyID0gRGF0YVRyYW5zZmVyOjpjcmVhdGVGb3JE
cm9wKGFjY2Vzc01vZGUsIGRyYWdEYXRhKTsKLSAgICBkYXRhVHJhbnNmZXItPnNldFNvdXJjZU9w
ZXJhdGlvbihkcmFnRGF0YS5kcmFnZ2luZ1NvdXJjZU9wZXJhdGlvbk1hc2soKSk7Ci0KLSAgICBy
ZXR1cm4gZGF0YVRyYW5zZmVyOwotfQotCiB2b2lkIERyYWdDb250cm9sbGVyOjpkcmFnRXhpdGVk
KGNvbnN0IERyYWdEYXRhJiBkcmFnRGF0YSkKIHsKLSAgICBpZiAoUmVmUHRyPEZyYW1lVmlldz4g
diA9IG1fcGFnZS5tYWluRnJhbWUoKS52aWV3KCkpIHsKLSAgICAgICAgYXV0byBkYXRhVHJhbnNm
ZXIgPSBjcmVhdGVEYXRhVHJhbnNmZXJUb1VwZGF0ZURyYWcoZHJhZ0RhdGEsIG1fcGFnZS5tYWlu
RnJhbWUoKS5zZXR0aW5ncygpLCBtX2RvY3VtZW50VW5kZXJNb3VzZS5jb3B5UmVmKCkpOwotICAg
ICAgICBtX3BhZ2UubWFpbkZyYW1lKCkuZXZlbnRIYW5kbGVyKCkuY2FuY2VsRHJhZ0FuZERyb3Ao
Y3JlYXRlTW91c2VFdmVudChkcmFnRGF0YSksIGRhdGFUcmFuc2Zlcik7Ci0gICAgICAgIGRhdGFU
cmFuc2Zlci0+bWFrZUludmFsaWRGb3JTZWN1cml0eSgpOwotICAgIH0KKyAgICBhdXRvJiBtYWlu
RnJhbWUgPSBtX3BhZ2UubWFpbkZyYW1lKCk7CisgICAgaWYgKG1haW5GcmFtZS52aWV3KCkpCisg
ICAgICAgIG1haW5GcmFtZS5ldmVudEhhbmRsZXIoKS5jYW5jZWxEcmFnQW5kRHJvcChjcmVhdGVN
b3VzZUV2ZW50KGRyYWdEYXRhKSwgUGFzdGVib2FyZDo6Y3JlYXRlRm9yRHJhZ0FuZERyb3AoZHJh
Z0RhdGEpLCBkcmFnRGF0YS5kcmFnZ2luZ1NvdXJjZU9wZXJhdGlvbk1hc2soKSwgZHJhZ0RhdGEu
Y29udGFpbnNGaWxlcygpKTsKICAgICBtb3VzZU1vdmVkSW50b0RvY3VtZW50KG51bGxwdHIpOwog
ICAgIGlmIChtX2ZpbGVJbnB1dEVsZW1lbnRVbmRlck1vdXNlKQogICAgICAgICBtX2ZpbGVJbnB1
dEVsZW1lbnRVbmRlck1vdXNlLT5zZXRDYW5SZWNlaXZlRHJvcHBlZEZpbGVzKGZhbHNlKTsKQEAg
LTI4MiwxMyArMjYyLDggQEAgYm9vbCBEcmFnQ29udHJvbGxlcjo6cGVyZm9ybURyYWdPcGVyYXRp
bwogICAgICAgICBtX2NsaWVudC53aWxsUGVyZm9ybURyYWdEZXN0aW5hdGlvbkFjdGlvbihEcmFn
RGVzdGluYXRpb25BY3Rpb25ESFRNTCwgZHJhZ0RhdGEpOwogICAgICAgICBSZWY8TWFpbkZyYW1l
PiBtYWluRnJhbWUobV9wYWdlLm1haW5GcmFtZSgpKTsKICAgICAgICAgYm9vbCBwcmV2ZW50ZWRE
ZWZhdWx0ID0gZmFsc2U7Ci0gICAgICAgIGlmIChtYWluRnJhbWUtPnZpZXcoKSkgewotICAgICAg
ICAgICAgLy8gU2VuZGluZyBhbiBldmVudCBjYW4gcmVzdWx0IGluIHRoZSBkZXN0cnVjdGlvbiBv
ZiB0aGUgdmlldyBhbmQgcGFydC4KLSAgICAgICAgICAgIGF1dG8gZGF0YVRyYW5zZmVyID0gRGF0
YVRyYW5zZmVyOjpjcmVhdGVGb3JEcm9wKERhdGFUcmFuc2Zlcjo6U3RvcmVNb2RlOjpSZWFkb25s
eSwgZHJhZ0RhdGEpOwotICAgICAgICAgICAgZGF0YVRyYW5zZmVyLT5zZXRTb3VyY2VPcGVyYXRp
b24oZHJhZ0RhdGEuZHJhZ2dpbmdTb3VyY2VPcGVyYXRpb25NYXNrKCkpOwotICAgICAgICAgICAg
cHJldmVudGVkRGVmYXVsdCA9IG1haW5GcmFtZS0+ZXZlbnRIYW5kbGVyKCkucGVyZm9ybURyYWdB
bmREcm9wKGNyZWF0ZU1vdXNlRXZlbnQoZHJhZ0RhdGEpLCBkYXRhVHJhbnNmZXIpOwotICAgICAg
ICAgICAgZGF0YVRyYW5zZmVyLT5tYWtlSW52YWxpZEZvclNlY3VyaXR5KCk7Ci0gICAgICAgIH0K
KyAgICAgICAgaWYgKG1haW5GcmFtZS0+dmlldygpKQorICAgICAgICAgICAgcHJldmVudGVkRGVm
YXVsdCA9IG1haW5GcmFtZS0+ZXZlbnRIYW5kbGVyKCkucGVyZm9ybURyYWdBbmREcm9wKGNyZWF0
ZU1vdXNlRXZlbnQoZHJhZ0RhdGEpLCBQYXN0ZWJvYXJkOjpjcmVhdGVGb3JEcmFnQW5kRHJvcChk
cmFnRGF0YSksIGRyYWdEYXRhLmRyYWdnaW5nU291cmNlT3BlcmF0aW9uTWFzaygpLCBkcmFnRGF0
YS5jb250YWluc0ZpbGVzKCkpOwogICAgICAgICBpZiAocHJldmVudGVkRGVmYXVsdCkgewogICAg
ICAgICAgICAgY2xlYXJEcmFnQ2FyZXQoKTsKICAgICAgICAgICAgIG1fZG9jdW1lbnRVbmRlck1v
dXNlID0gbnVsbHB0cjsKQEAgLTcwOSwyNCArNjg0LDE4IEBAIGJvb2wgRHJhZ0NvbnRyb2xsZXI6
OnRyeURIVE1MRHJhZyhjb25zdCAKICAgICBpZiAoIXZpZXdQcm90ZWN0b3IpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgIGF1dG8gZGF0YVRyYW5zZmVyID0gY3JlYXRlRGF0YVRyYW5zZmVy
VG9VcGRhdGVEcmFnKGRyYWdEYXRhLCBtYWluRnJhbWUtPnNldHRpbmdzKCksIG1fZG9jdW1lbnRV
bmRlck1vdXNlLmNvcHlSZWYoKSk7Ci0KLSAgICBQbGF0Zm9ybU1vdXNlRXZlbnQgZXZlbnQgPSBj
cmVhdGVNb3VzZUV2ZW50KGRyYWdEYXRhKTsKLSAgICBpZiAoIW1haW5GcmFtZS0+ZXZlbnRIYW5k
bGVyKCkudXBkYXRlRHJhZ0FuZERyb3AoZXZlbnQsIGRhdGFUcmFuc2ZlcikpIHsKLSAgICAgICAg
ZGF0YVRyYW5zZmVyLT5tYWtlSW52YWxpZEZvclNlY3VyaXR5KCk7CisgICAgRHJhZ09wZXJhdGlv
biBzb3VyY2VPcGVyYXRpb24gPSBkcmFnRGF0YS5kcmFnZ2luZ1NvdXJjZU9wZXJhdGlvbk1hc2so
KTsKKyAgICBzdGQ6Om9wdGlvbmFsPERyYWdPcGVyYXRpb24+IGRlc3RpbmF0aW9uT3BlcmF0aW9u
OworICAgIGlmICghbWFpbkZyYW1lLT5ldmVudEhhbmRsZXIoKS51cGRhdGVEcmFnQW5kRHJvcChj
cmVhdGVNb3VzZUV2ZW50KGRyYWdEYXRhKSwgWyZkcmFnRGF0YV0oKSB7IHJldHVybiBQYXN0ZWJv
YXJkOjpjcmVhdGVGb3JEcmFnQW5kRHJvcChkcmFnRGF0YSk7IH0sIHNvdXJjZU9wZXJhdGlvbiwg
ZHJhZ0RhdGEuY29udGFpbnNGaWxlcygpLCBkZXN0aW5hdGlvbk9wZXJhdGlvbikpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9CiAKLSAgICBvcGVyYXRpb24gPSBkYXRhVHJhbnNmZXItPmRl
c3RpbmF0aW9uT3BlcmF0aW9uKCk7Ci0gICAgRHJhZ09wZXJhdGlvbiBzcmNPcE1hc2sgPSBkcmFn
RGF0YS5kcmFnZ2luZ1NvdXJjZU9wZXJhdGlvbk1hc2soKTsKLSAgICBpZiAoZGF0YVRyYW5zZmVy
LT5kcm9wRWZmZWN0SXNVbmluaXRpYWxpemVkKCkpCi0gICAgICAgIG9wZXJhdGlvbiA9IGRlZmF1
bHRPcGVyYXRpb25Gb3JEcmFnKHNyY09wTWFzayk7Ci0gICAgZWxzZSBpZiAoIShzcmNPcE1hc2sg
JiBvcGVyYXRpb24pKSB7Ci0gICAgICAgIC8vIFRoZSBlbGVtZW50IHBpY2tlZCBhbiBvcGVyYXRp
b24gd2hpY2ggaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgc291cmNlCisgICAgaWYgKCFkZXN0aW5h
dGlvbk9wZXJhdGlvbikKKyAgICAgICAgb3BlcmF0aW9uID0gZGVmYXVsdE9wZXJhdGlvbkZvckRy
YWcoc291cmNlT3BlcmF0aW9uKTsKKyAgICBlbHNlIGlmICghKHNvdXJjZU9wZXJhdGlvbiAmICpk
ZXN0aW5hdGlvbk9wZXJhdGlvbikpIC8vIFRoZSBlbGVtZW50IHBpY2tlZCBhbiBvcGVyYXRpb24g
d2hpY2ggaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgc291cmNlCiAgICAgICAgIG9wZXJhdGlvbiA9
IERyYWdPcGVyYXRpb25Ob25lOwotICAgIH0KKyAgICBlbHNlCisgICAgICAgIG9wZXJhdGlvbiA9
ICpkZXN0aW5hdGlvbk9wZXJhdGlvbjsKIAotICAgIGRhdGFUcmFuc2Zlci0+bWFrZUludmFsaWRG
b3JTZWN1cml0eSgpOwogICAgIHJldHVybiB0cnVlOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFn
ZS9FdmVudEhhbmRsZXIuY3BwCShyZXZpc2lvbiAyMjMwMjEpCisrKyBTb3VyY2UvV2ViQ29yZS9w
YWdlL0V2ZW50SGFuZGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxODAsNyArMjE4MCw3IEBA
IGJvb2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVQYXN0ZUdsb2JhbFNlbGUKIAogI2lmIEVOQUJMRShE
UkFHX1NVUFBPUlQpCiAKLWJvb2wgRXZlbnRIYW5kbGVyOjpkaXNwYXRjaERyYWdFdmVudChjb25z
dCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgRWxlbWVudCYgZHJhZ1RhcmdldCwgY29uc3QgUGxh
dGZvcm1Nb3VzZUV2ZW50JiBldmVudCwgRGF0YVRyYW5zZmVyKiBkYXRhVHJhbnNmZXIpCitib29s
IEV2ZW50SGFuZGxlcjo6ZGlzcGF0Y2hEcmFnRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiBldmVu
dFR5cGUsIEVsZW1lbnQmIGRyYWdUYXJnZXQsIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgZXZl
bnQsIERhdGFUcmFuc2ZlciYgZGF0YVRyYW5zZmVyKQogewogICAgIFJlZjxGcmFtZT4gcHJvdGVj
dGVkRnJhbWUobV9mcmFtZSk7CiAgICAgRnJhbWVWaWV3KiB2aWV3ID0gbV9mcmFtZS52aWV3KCk7
CkBAIC0yMTk3LDcgKzIxOTcsNyBAQCBib29sIEV2ZW50SGFuZGxlcjo6ZGlzcGF0Y2hEcmFnRXZl
bnQoY29uCiAgICAgICAgIGV2ZW50Lm1vdmVtZW50RGVsdGEoKS54KCksIGV2ZW50Lm1vdmVtZW50
RGVsdGEoKS55KCksCiAjZW5kaWYKICAgICAgICAgZXZlbnQuY3RybEtleSgpLCBldmVudC5hbHRL
ZXkoKSwgZXZlbnQuc2hpZnRLZXkoKSwgZXZlbnQubWV0YUtleSgpLAotICAgICAgICAwLCAwLCBl
dmVudC5mb3JjZSgpLCBOb1RhcCwgZGF0YVRyYW5zZmVyKTsKKyAgICAgICAgMCwgMCwgZXZlbnQu
Zm9yY2UoKSwgTm9UYXAsICZkYXRhVHJhbnNmZXIpOwogCiAgICAgZHJhZ1RhcmdldC5kaXNwYXRj
aEV2ZW50KG1lKTsKICAgICByZXR1cm4gbWUtPmRlZmF1bHRQcmV2ZW50ZWQoKTsKQEAgLTIyNDgs
MTAgKzIyNDgsOSBAQCBzdGF0aWMgYm9vbCBoYXNEcm9wWm9uZVR5cGUoRGF0YVRyYW5zZmVyCiAg
ICAgcmV0dXJuIGZhbHNlOwogfQogCi1zdGF0aWMgYm9vbCBmaW5kRHJvcFpvbmUoTm9kZSogdGFy
Z2V0LCBEYXRhVHJhbnNmZXIqIGRhdGFUcmFuc2ZlcikKK3N0YXRpYyBib29sIGZpbmREcm9wWm9u
ZShOb2RlJiB0YXJnZXQsIERhdGFUcmFuc2ZlciYgZGF0YVRyYW5zZmVyKQogewotICAgIEFTU0VS
VCh0YXJnZXQpOwotICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBpczxFbGVtZW50PigqdGFyZ2V0KSA/
IGRvd25jYXN0PEVsZW1lbnQ+KHRhcmdldCkgOiB0YXJnZXQtPnBhcmVudEVsZW1lbnQoKTsKKyAg
ICBSZWZQdHI8RWxlbWVudD4gZWxlbWVudCA9IGlzPEVsZW1lbnQ+KHRhcmdldCkgPyAmZG93bmNh
c3Q8RWxlbWVudD4odGFyZ2V0KSA6IHRhcmdldC5wYXJlbnRFbGVtZW50KCk7CiAgICAgZm9yICg7
IGVsZW1lbnQ7IGVsZW1lbnQgPSBlbGVtZW50LT5wYXJlbnRFbGVtZW50KCkpIHsKICAgICAgICAg
U3BhY2VTcGxpdFN0cmluZyBrZXl3b3JkcyhlbGVtZW50LT5hdHRyaWJ1dGVXaXRob3V0U3luY2hy
b25pemF0aW9uKHdlYmtpdGRyb3B6b25lQXR0ciksIHRydWUpOwogICAgICAgICBib29sIG1hdGNo
ZWQgPSBmYWxzZTsKQEAgLTIyNjIsMTkgKzIyNjEsMzIgQEAgc3RhdGljIGJvb2wgZmluZERyb3Ba
b25lKE5vZGUqIHRhcmdldCwgRAogICAgICAgICAgICAgICAgIGlmIChkcmFnT3BlcmF0aW9uID09
IERyYWdPcGVyYXRpb25Ob25lKQogICAgICAgICAgICAgICAgICAgICBkcmFnT3BlcmF0aW9uID0g
b3A7CiAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICBtYXRjaGVkID0gbWF0Y2hl
ZCB8fCBoYXNEcm9wWm9uZVR5cGUoKmRhdGFUcmFuc2Zlciwga2V5d29yZHNbaV0uc3RyaW5nKCkp
OworICAgICAgICAgICAgICAgIG1hdGNoZWQgPSBtYXRjaGVkIHx8IGhhc0Ryb3Bab25lVHlwZShk
YXRhVHJhbnNmZXIsIGtleXdvcmRzW2ldLnN0cmluZygpKTsKICAgICAgICAgICAgIGlmIChtYXRj
aGVkICYmIGRyYWdPcGVyYXRpb24gIT0gRHJhZ09wZXJhdGlvbk5vbmUpCiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgaWYgKG1hdGNoZWQpIHsKLSAgICAgICAgICAg
IGRhdGFUcmFuc2Zlci0+c2V0RHJvcEVmZmVjdChjb252ZXJ0RHJhZ09wZXJhdGlvblRvRHJvcFpv
bmVPcGVyYXRpb24oZHJhZ09wZXJhdGlvbikpOworICAgICAgICAgICAgZGF0YVRyYW5zZmVyLnNl
dERyb3BFZmZlY3QoY29udmVydERyYWdPcGVyYXRpb25Ub0Ryb3Bab25lT3BlcmF0aW9uKGRyYWdP
cGVyYXRpb24pKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfQog
ICAgIHJldHVybiBmYWxzZTsKIH0KLSAgICAKLWJvb2wgRXZlbnRIYW5kbGVyOjp1cGRhdGVEcmFn
QW5kRHJvcChjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIGV2ZW50LCBEYXRhVHJhbnNmZXImIGRh
dGFUcmFuc2ZlcikKKworYm9vbCBFdmVudEhhbmRsZXI6OmRpc3BhdGNoRHJhZ0VudGVyT3JEcmFn
T3ZlckV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBFbGVtZW50JiB0YXJnZXQs
IGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgZXZlbnQsCisgICAgc3RkOjp1bmlxdWVfcHRyPFBh
c3RlYm9hcmQ+JiYgcGFzdGVib3JhZCwgRHJhZ09wZXJhdGlvbiBzb3VyY2VPcGVyYXRpb24sIGJv
b2wgZHJhZ2dpbmdGaWxlcywgc3RkOjpvcHRpb25hbDxEcmFnT3BlcmF0aW9uPiYgZGVzdGluYXRp
b25PcGVyYXRpb24pCit7CisgICAgYXV0byBkYXRhVHJhbnNmZXIgPSBEYXRhVHJhbnNmZXI6OmNy
ZWF0ZUZvclVwZGF0aW5nRHJvcFRhcmdldCh0YXJnZXQuZG9jdW1lbnQoKSwgV1RGTW92ZShwYXN0
ZWJvcmFkKSwgc291cmNlT3BlcmF0aW9uLCBkcmFnZ2luZ0ZpbGVzKTsKKyAgICBib29sIGFjY2Vw
dCA9IGRpc3BhdGNoRHJhZ0V2ZW50KGV2ZW50VHlwZSwgdGFyZ2V0LCBldmVudCwgZGF0YVRyYW5z
ZmVyLmdldCgpKTsKKyAgICBpZiAoIWFjY2VwdCkKKyAgICAgICAgYWNjZXB0ID0gZmluZERyb3Ba
b25lKHRhcmdldCwgZGF0YVRyYW5zZmVyKTsKKyAgICBkYXRhVHJhbnNmZXItPm1ha2VJbnZhbGlk
Rm9yU2VjdXJpdHkoKTsKKyAgICBpZiAoYWNjZXB0ICYmICFkYXRhVHJhbnNmZXItPmRyb3BFZmZl
Y3RJc1VuaW5pdGlhbGl6ZWQoKSkKKyAgICAgICAgZGVzdGluYXRpb25PcGVyYXRpb24gPSBkYXRh
VHJhbnNmZXItPmRlc3RpbmF0aW9uT3BlcmF0aW9uKCk7CisgICAgcmV0dXJuIGFjY2VwdDsKK30K
KworYm9vbCBFdmVudEhhbmRsZXI6OnVwZGF0ZURyYWdBbmREcm9wKGNvbnN0IFBsYXRmb3JtTW91
c2VFdmVudCYgZXZlbnQsIHN0ZDo6ZnVuY3Rpb248c3RkOjp1bmlxdWVfcHRyPFBhc3RlYm9hcmQ+
KCk+IG1ha2VQYXN0ZWJvYXJkLCBEcmFnT3BlcmF0aW9uIHNvdXJjZU9wZXJhdGlvbiwgYm9vbCBk
cmFnZ2luZ0ZpbGVzLCBzdGQ6Om9wdGlvbmFsPERyYWdPcGVyYXRpb24+JiBkZXN0aW5hdGlvbk9w
ZXJhdGlvbikKIHsKICAgICBSZWY8RnJhbWU+IHByb3RlY3RlZEZyYW1lKG1fZnJhbWUpOwogCkBA
IC0yMzA2LDIzICsyMzE4LDI1IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjp1cGRhdGVEcmFnQW5kRHJv
cChjb24KICAgICAgICAgRnJhbWUqIHRhcmdldEZyYW1lOwogICAgICAgICBpZiAodGFyZ2V0SXNG
cmFtZShuZXdUYXJnZXQuZ2V0KCksIHRhcmdldEZyYW1lKSkgewogICAgICAgICAgICAgaWYgKHRh
cmdldEZyYW1lKQotICAgICAgICAgICAgICAgIGFjY2VwdCA9IHRhcmdldEZyYW1lLT5ldmVudEhh
bmRsZXIoKS51cGRhdGVEcmFnQW5kRHJvcChldmVudCwgZGF0YVRyYW5zZmVyKTsKKyAgICAgICAg
ICAgICAgICBhY2NlcHQgPSB0YXJnZXRGcmFtZS0+ZXZlbnRIYW5kbGVyKCkudXBkYXRlRHJhZ0Fu
ZERyb3AoZXZlbnQsIG1ha2VQYXN0ZWJvYXJkLCBzb3VyY2VPcGVyYXRpb24sIGRyYWdnaW5nRmls
ZXMsIGRlc3RpbmF0aW9uT3BlcmF0aW9uKTsKICAgICAgICAgfSBlbHNlIGlmIChuZXdUYXJnZXQp
IHsKICAgICAgICAgICAgIC8vIEFzIHBlciBzZWN0aW9uIDcuOS40IG9mIHRoZSBIVE1MIDUgc3Bl
Yy4sIHdlIG11c3QgYWx3YXlzIGZpcmUgYSBkcmFnIGV2ZW50IGJlZm9yZSBmaXJpbmcgYSBkcmFn
ZW50ZXIsIGRyYWdsZWF2ZSwgb3IgZHJhZ292ZXIgZXZlbnQuCiAgICAgICAgICAgICBpZiAoZHJh
Z1N0YXRlKCkuc291cmNlICYmIGRyYWdTdGF0ZSgpLnNob3VsZERpc3BhdGNoRXZlbnRzKSB7CiAg
ICAgICAgICAgICAgICAgLy8gZm9yIG5vdyB3ZSBkb24ndCBjYXJlIGlmIGV2ZW50IGhhbmRsZXIg
Y2FuY2VscyBkZWZhdWx0IGJlaGF2aW9yLCBzaW5jZSB0aGVyZSBpcyBub25lCiAgICAgICAgICAg
ICAgICAgZGlzcGF0Y2hEcmFnU3JjRXZlbnQoZXZlbnROYW1lcygpLmRyYWdFdmVudCwgZXZlbnQp
OwogICAgICAgICAgICAgfQotICAgICAgICAgICAgYWNjZXB0ID0gZGlzcGF0Y2hEcmFnRXZlbnQo
ZXZlbnROYW1lcygpLmRyYWdlbnRlckV2ZW50LCAqbmV3VGFyZ2V0LCBldmVudCwgJmRhdGFUcmFu
c2Zlcik7Ci0gICAgICAgICAgICBpZiAoIWFjY2VwdCkKLSAgICAgICAgICAgICAgICBhY2NlcHQg
PSBmaW5kRHJvcFpvbmUobmV3VGFyZ2V0LmdldCgpLCAmZGF0YVRyYW5zZmVyKTsKKyAgICAgICAg
ICAgIGFjY2VwdCA9IGRpc3BhdGNoRHJhZ0VudGVyT3JEcmFnT3ZlckV2ZW50KGV2ZW50TmFtZXMo
KS5kcmFnZW50ZXJFdmVudCwgKm5ld1RhcmdldCwgZXZlbnQsIG1ha2VQYXN0ZWJvYXJkKCksIHNv
dXJjZU9wZXJhdGlvbiwgZHJhZ2dpbmdGaWxlcywgZGVzdGluYXRpb25PcGVyYXRpb24pOwogICAg
ICAgICB9CiAKICAgICAgICAgaWYgKHRhcmdldElzRnJhbWUobV9kcmFnVGFyZ2V0LmdldCgpLCB0
YXJnZXRGcmFtZSkpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBSZWN1cnNpbmcgYWdhaW4gaGVy
ZSBkb2Vzbid0IG1ha2Ugc2Vuc2UgaWYgdGhlIG5ld1RhcmdldCBhbmQgbV9kcmFnVGFyZ2V0IHdl
cmUgaW4gdGhlIHNhbWUgZnJhbWUuCiAgICAgICAgICAgICBpZiAodGFyZ2V0RnJhbWUpCi0gICAg
ICAgICAgICAgICAgYWNjZXB0ID0gdGFyZ2V0RnJhbWUtPmV2ZW50SGFuZGxlcigpLnVwZGF0ZURy
YWdBbmREcm9wKGV2ZW50LCBkYXRhVHJhbnNmZXIpOwotICAgICAgICB9IGVsc2UgaWYgKG1fZHJh
Z1RhcmdldCkKLSAgICAgICAgICAgIGRpc3BhdGNoRHJhZ0V2ZW50KGV2ZW50TmFtZXMoKS5kcmFn
bGVhdmVFdmVudCwgKm1fZHJhZ1RhcmdldCwgZXZlbnQsICZkYXRhVHJhbnNmZXIpOworICAgICAg
ICAgICAgICAgIGFjY2VwdCA9IHRhcmdldEZyYW1lLT5ldmVudEhhbmRsZXIoKS51cGRhdGVEcmFn
QW5kRHJvcChldmVudCwgbWFrZVBhc3RlYm9hcmQsIHNvdXJjZU9wZXJhdGlvbiwgZHJhZ2dpbmdG
aWxlcywgZGVzdGluYXRpb25PcGVyYXRpb24pOworICAgICAgICB9IGVsc2UgaWYgKG1fZHJhZ1Rh
cmdldCkgeworICAgICAgICAgICAgYXV0byBkYXRhVHJhbnNmZXIgPSBEYXRhVHJhbnNmZXI6OmNy
ZWF0ZUZvclVwZGF0aW5nRHJvcFRhcmdldChtX2RyYWdUYXJnZXQtPmRvY3VtZW50KCksIG1ha2VQ
YXN0ZWJvYXJkKCksIHNvdXJjZU9wZXJhdGlvbiwgZHJhZ2dpbmdGaWxlcyk7CisgICAgICAgICAg
ICBkaXNwYXRjaERyYWdFdmVudChldmVudE5hbWVzKCkuZHJhZ2xlYXZlRXZlbnQsICptX2RyYWdU
YXJnZXQsIGV2ZW50LCBkYXRhVHJhbnNmZXIuZ2V0KCkpOworICAgICAgICAgICAgZGF0YVRyYW5z
ZmVyLT5tYWtlSW52YWxpZEZvclNlY3VyaXR5KCk7CisgICAgICAgIH0KIAogICAgICAgICBpZiAo
bmV3VGFyZ2V0KSB7CiAgICAgICAgICAgICAvLyBXZSBkbyBub3QgZXhwbGljaXRseSBjYWxsIGRp
c3BhdGNoRHJhZ0V2ZW50IGhlcmUgYmVjYXVzZSBpdCBjb3VsZCB1bHRpbWF0ZWx5IHJlc3VsdCBp
biB0aGUgYXBwZWFyYW5jZSB0aGF0CkBAIC0yMzMzLDE2ICsyMzQ3LDE0IEBAIGJvb2wgRXZlbnRI
YW5kbGVyOjp1cGRhdGVEcmFnQW5kRHJvcChjb24KICAgICAgICAgRnJhbWUqIHRhcmdldEZyYW1l
OwogICAgICAgICBpZiAodGFyZ2V0SXNGcmFtZShuZXdUYXJnZXQuZ2V0KCksIHRhcmdldEZyYW1l
KSkgewogICAgICAgICAgICAgaWYgKHRhcmdldEZyYW1lKQotICAgICAgICAgICAgICAgIGFjY2Vw
dCA9IHRhcmdldEZyYW1lLT5ldmVudEhhbmRsZXIoKS51cGRhdGVEcmFnQW5kRHJvcChldmVudCwg
ZGF0YVRyYW5zZmVyKTsKKyAgICAgICAgICAgICAgICBhY2NlcHQgPSB0YXJnZXRGcmFtZS0+ZXZl
bnRIYW5kbGVyKCkudXBkYXRlRHJhZ0FuZERyb3AoZXZlbnQsIG1ha2VQYXN0ZWJvYXJkLCBzb3Vy
Y2VPcGVyYXRpb24sIGRyYWdnaW5nRmlsZXMsIGRlc3RpbmF0aW9uT3BlcmF0aW9uKTsKICAgICAg
ICAgfSBlbHNlIGlmIChuZXdUYXJnZXQpIHsKICAgICAgICAgICAgIC8vIE5vdGUsIHdoZW4gZGVh
bGluZyB3aXRoIHN1Yi1mcmFtZXMsIHdlIG1heSBuZWVkIHRvIGZpcmUgb25seSBhIGRyYWdvdmVy
IGV2ZW50IGFzIGEgZHJhZyBldmVudCBtYXkgaGF2ZSBiZWVuIGZpcmVkIGVhcmxpZXIuCiAgICAg
ICAgICAgICBpZiAoIW1fc2hvdWxkT25seUZpcmVEcmFnT3ZlckV2ZW50ICYmIGRyYWdTdGF0ZSgp
LnNvdXJjZSAmJiBkcmFnU3RhdGUoKS5zaG91bGREaXNwYXRjaEV2ZW50cykgewogICAgICAgICAg
ICAgICAgIC8vIGZvciBub3cgd2UgZG9uJ3QgY2FyZSBpZiBldmVudCBoYW5kbGVyIGNhbmNlbHMg
ZGVmYXVsdCBiZWhhdmlvciwgc2luY2UgdGhlcmUgaXMgbm9uZQogICAgICAgICAgICAgICAgIGRp
c3BhdGNoRHJhZ1NyY0V2ZW50KGV2ZW50TmFtZXMoKS5kcmFnRXZlbnQsIGV2ZW50KTsKICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGFjY2VwdCA9IGRpc3BhdGNoRHJhZ0V2ZW50KGV2ZW50TmFt
ZXMoKS5kcmFnb3ZlckV2ZW50LCAqbmV3VGFyZ2V0LCBldmVudCwgJmRhdGFUcmFuc2Zlcik7Ci0g
ICAgICAgICAgICBpZiAoIWFjY2VwdCkKLSAgICAgICAgICAgICAgICBhY2NlcHQgPSBmaW5kRHJv
cFpvbmUobmV3VGFyZ2V0LmdldCgpLCAmZGF0YVRyYW5zZmVyKTsKKyAgICAgICAgICAgIGFjY2Vw
dCA9IGRpc3BhdGNoRHJhZ0VudGVyT3JEcmFnT3ZlckV2ZW50KGV2ZW50TmFtZXMoKS5kcmFnb3Zl
ckV2ZW50LCAqbmV3VGFyZ2V0LCBldmVudCwgbWFrZVBhc3RlYm9hcmQoKSwgc291cmNlT3BlcmF0
aW9uLCBkcmFnZ2luZ0ZpbGVzLCBkZXN0aW5hdGlvbk9wZXJhdGlvbik7CiAgICAgICAgICAgICBt
X3Nob3VsZE9ubHlGaXJlRHJhZ092ZXJFdmVudCA9IGZhbHNlOwogICAgICAgICB9CiAgICAgfQpA
QCAtMjM1MCwyMyArMjM2MiwyNiBAQCBib29sIEV2ZW50SGFuZGxlcjo6dXBkYXRlRHJhZ0FuZERy
b3AoY29uCiAgICAgcmV0dXJuIGFjY2VwdDsKIH0KIAotdm9pZCBFdmVudEhhbmRsZXI6OmNhbmNl
bERyYWdBbmREcm9wKGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgZXZlbnQsIERhdGFUcmFuc2Zl
ciYgZGF0YVRyYW5zZmVyKQordm9pZCBFdmVudEhhbmRsZXI6OmNhbmNlbERyYWdBbmREcm9wKGNv
bnN0IFBsYXRmb3JtTW91c2VFdmVudCYgZXZlbnQsIHN0ZDo6dW5pcXVlX3B0cjxQYXN0ZWJvYXJk
PiYmIHBhc3RlYm9hcmQsIERyYWdPcGVyYXRpb24gc291cmNlT3BlcmF0aW9uLCBib29sIGRyYWdn
aW5nRmlsZXMpCiB7CiAgICAgUmVmPEZyYW1lPiBwcm90ZWN0ZWRGcmFtZShtX2ZyYW1lKTsKIAog
ICAgIEZyYW1lKiB0YXJnZXRGcmFtZTsKICAgICBpZiAodGFyZ2V0SXNGcmFtZShtX2RyYWdUYXJn
ZXQuZ2V0KCksIHRhcmdldEZyYW1lKSkgewogICAgICAgICBpZiAodGFyZ2V0RnJhbWUpCi0gICAg
ICAgICAgICB0YXJnZXRGcmFtZS0+ZXZlbnRIYW5kbGVyKCkuY2FuY2VsRHJhZ0FuZERyb3AoZXZl
bnQsIGRhdGFUcmFuc2Zlcik7CisgICAgICAgICAgICB0YXJnZXRGcmFtZS0+ZXZlbnRIYW5kbGVy
KCkuY2FuY2VsRHJhZ0FuZERyb3AoZXZlbnQsIFdURk1vdmUocGFzdGVib2FyZCksIHNvdXJjZU9w
ZXJhdGlvbiwgZHJhZ2dpbmdGaWxlcyk7CiAgICAgfSBlbHNlIGlmIChtX2RyYWdUYXJnZXQpIHsK
ICAgICAgICAgaWYgKGRyYWdTdGF0ZSgpLnNvdXJjZSAmJiBkcmFnU3RhdGUoKS5zaG91bGREaXNw
YXRjaEV2ZW50cykKICAgICAgICAgICAgIGRpc3BhdGNoRHJhZ1NyY0V2ZW50KGV2ZW50TmFtZXMo
KS5kcmFnRXZlbnQsIGV2ZW50KTsKLSAgICAgICAgZGlzcGF0Y2hEcmFnRXZlbnQoZXZlbnROYW1l
cygpLmRyYWdsZWF2ZUV2ZW50LCAqbV9kcmFnVGFyZ2V0LCBldmVudCwgJmRhdGFUcmFuc2Zlcik7
CisKKyAgICAgICAgYXV0byBkYXRhVHJhbnNmZXIgPSBEYXRhVHJhbnNmZXI6OmNyZWF0ZUZvclVw
ZGF0aW5nRHJvcFRhcmdldChtX2RyYWdUYXJnZXQtPmRvY3VtZW50KCksIFdURk1vdmUocGFzdGVi
b2FyZCksIHNvdXJjZU9wZXJhdGlvbiwgZHJhZ2dpbmdGaWxlcyk7CisgICAgICAgIGRpc3BhdGNo
RHJhZ0V2ZW50KGV2ZW50TmFtZXMoKS5kcmFnbGVhdmVFdmVudCwgKm1fZHJhZ1RhcmdldCwgZXZl
bnQsIGRhdGFUcmFuc2Zlci5nZXQoKSk7CisgICAgICAgIGRhdGFUcmFuc2Zlci0+bWFrZUludmFs
aWRGb3JTZWN1cml0eSgpOwogICAgIH0KICAgICBjbGVhckRyYWdTdGF0ZSgpOwogfQogCi1ib29s
IEV2ZW50SGFuZGxlcjo6cGVyZm9ybURyYWdBbmREcm9wKGNvbnN0IFBsYXRmb3JtTW91c2VFdmVu
dCYgZXZlbnQsIERhdGFUcmFuc2ZlciYgZGF0YVRyYW5zZmVyKQorYm9vbCBFdmVudEhhbmRsZXI6
OnBlcmZvcm1EcmFnQW5kRHJvcChjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIGV2ZW50LCBzdGQ6
OnVuaXF1ZV9wdHI8UGFzdGVib2FyZD4mJiBwYXN0ZWJvYXJkLCBEcmFnT3BlcmF0aW9uIHNvdXJj
ZU9wZXJhdGlvbiwgYm9vbCBkcmFnZ2luZ0ZpbGVzKQogewogICAgIFJlZjxGcmFtZT4gcHJvdGVj
dGVkRnJhbWUobV9mcmFtZSk7CiAKQEAgLTIzNzQsOSArMjM4OSwxMiBAQCBib29sIEV2ZW50SGFu
ZGxlcjo6cGVyZm9ybURyYWdBbmREcm9wKGNvCiAgICAgYm9vbCBwcmV2ZW50ZWREZWZhdWx0ID0g
ZmFsc2U7CiAgICAgaWYgKHRhcmdldElzRnJhbWUobV9kcmFnVGFyZ2V0LmdldCgpLCB0YXJnZXRG
cmFtZSkpIHsKICAgICAgICAgaWYgKHRhcmdldEZyYW1lKQotICAgICAgICAgICAgcHJldmVudGVk
RGVmYXVsdCA9IHRhcmdldEZyYW1lLT5ldmVudEhhbmRsZXIoKS5wZXJmb3JtRHJhZ0FuZERyb3Ao
ZXZlbnQsIGRhdGFUcmFuc2Zlcik7Ci0gICAgfSBlbHNlIGlmIChtX2RyYWdUYXJnZXQpCi0gICAg
ICAgIHByZXZlbnRlZERlZmF1bHQgPSBkaXNwYXRjaERyYWdFdmVudChldmVudE5hbWVzKCkuZHJv
cEV2ZW50LCAqbV9kcmFnVGFyZ2V0LCBldmVudCwgJmRhdGFUcmFuc2Zlcik7CisgICAgICAgICAg
ICBwcmV2ZW50ZWREZWZhdWx0ID0gdGFyZ2V0RnJhbWUtPmV2ZW50SGFuZGxlcigpLnBlcmZvcm1E
cmFnQW5kRHJvcChldmVudCwgV1RGTW92ZShwYXN0ZWJvYXJkKSwgc291cmNlT3BlcmF0aW9uLCBk
cmFnZ2luZ0ZpbGVzKTsKKyAgICB9IGVsc2UgaWYgKG1fZHJhZ1RhcmdldCkgeworICAgICAgICBh
dXRvIGRhdGFUcmFuc2ZlciA9IERhdGFUcmFuc2Zlcjo6Y3JlYXRlRm9yRHJvcChXVEZNb3ZlKHBh
c3RlYm9hcmQpLCBzb3VyY2VPcGVyYXRpb24sIGRyYWdnaW5nRmlsZXMpOworICAgICAgICBwcmV2
ZW50ZWREZWZhdWx0ID0gZGlzcGF0Y2hEcmFnRXZlbnQoZXZlbnROYW1lcygpLmRyb3BFdmVudCwg
Km1fZHJhZ1RhcmdldCwgZXZlbnQsIGRhdGFUcmFuc2Zlcik7CisgICAgICAgIGRhdGFUcmFuc2Zl
ci0+bWFrZUludmFsaWRGb3JTZWN1cml0eSgpOworICAgIH0KICAgICBjbGVhckRyYWdTdGF0ZSgp
OwogICAgIHJldHVybiBwcmV2ZW50ZWREZWZhdWx0OwogfQpAQCAtMzU0NSwxMiArMzU2MywxMyBA
QCB2b2lkIEV2ZW50SGFuZGxlcjo6dXBkYXRlRHJhZ1N0YXRlQWZ0ZXJFCiAvLyBSZXR1cm4gdmFs
dWUgaW5kaWNhdGVzIGlmIHdlIHNob3VsZCBjb250aW51ZSAiZGVmYXVsdCBwcm9jZXNzaW5nIiwg
aS5lLiwgd2hldGhlciBldmVudCBoYW5kbGVyIGNhbmNlbGVkLgogYm9vbCBFdmVudEhhbmRsZXI6
OmRpc3BhdGNoRHJhZ1NyY0V2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBjb25z
dCBQbGF0Zm9ybU1vdXNlRXZlbnQmIGV2ZW50KQogewotICAgIHJldHVybiAhZGlzcGF0Y2hEcmFn
RXZlbnQoZXZlbnRUeXBlLCAqZHJhZ1N0YXRlKCkuc291cmNlLCBldmVudCwgZHJhZ1N0YXRlKCku
ZGF0YVRyYW5zZmVyLmdldCgpKTsKKyAgICBBU1NFUlQoZHJhZ1N0YXRlKCkuZGF0YVRyYW5zZmVy
KTsKKyAgICByZXR1cm4gIWRpc3BhdGNoRHJhZ0V2ZW50KGV2ZW50VHlwZSwgKmRyYWdTdGF0ZSgp
LnNvdXJjZSwgZXZlbnQsICpkcmFnU3RhdGUoKS5kYXRhVHJhbnNmZXIpOwogfQogCiBib29sIEV2
ZW50SGFuZGxlcjo6ZGlzcGF0Y2hEcmFnU3RhcnRFdmVudE9uU291cmNlRWxlbWVudChEYXRhVHJh
bnNmZXImIGRhdGFUcmFuc2ZlcikKIHsKLSAgICByZXR1cm4gIWRpc3BhdGNoRHJhZ0V2ZW50KGV2
ZW50TmFtZXMoKS5kcmFnc3RhcnRFdmVudCwgKmRyYWdTdGF0ZSgpLnNvdXJjZSwgbV9tb3VzZURv
d24sICZkYXRhVHJhbnNmZXIpICYmICFtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlz
SW5QYXNzd29yZEZpZWxkKCk7CisgICAgcmV0dXJuICFkaXNwYXRjaERyYWdFdmVudChldmVudE5h
bWVzKCkuZHJhZ3N0YXJ0RXZlbnQsICpkcmFnU3RhdGUoKS5zb3VyY2UsIG1fbW91c2VEb3duLCBk
YXRhVHJhbnNmZXIpICYmICFtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzSW5QYXNz
d29yZEZpZWxkKCk7CiB9CiAgICAgCiBzdGF0aWMgYm9vbCBFeGFjdGx5T25lQml0U2V0KERyYWdT
b3VyY2VBY3Rpb24gbikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaAkocmV2aXNp
b24gMjIzMDIxKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNzUsNiArNzUsNyBAQCBjbGFzcyBIaXRUZXN0UmVzdWx0OwogY2xhc3MgS2V5
Ym9hcmRFdmVudDsKIGNsYXNzIE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHM7CiBjbGFzcyBO
b2RlOworY2xhc3MgUGFzdGVib2FyZDsKIGNsYXNzIFBsYXRmb3JtR2VzdHVyZUV2ZW50OwogY2xh
c3MgUGxhdGZvcm1LZXlib2FyZEV2ZW50OwogY2xhc3MgUGxhdGZvcm1Ub3VjaEV2ZW50OwpAQCAt
MTU1LDkgKzE1Niw5IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldENhcHR1
cmluZ01vdXNlRXZlbnRzRWxlbWVudChFbGVtZW50Kik7CiAKICNpZiBFTkFCTEUoRFJBR19TVVBQ
T1JUKQotICAgIGJvb2wgdXBkYXRlRHJhZ0FuZERyb3AoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50
JiwgRGF0YVRyYW5zZmVyJik7Ci0gICAgdm9pZCBjYW5jZWxEcmFnQW5kRHJvcChjb25zdCBQbGF0
Zm9ybU1vdXNlRXZlbnQmLCBEYXRhVHJhbnNmZXImKTsKLSAgICBib29sIHBlcmZvcm1EcmFnQW5k
RHJvcChjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmLCBEYXRhVHJhbnNmZXImKTsKKyAgICBib29s
IHVwZGF0ZURyYWdBbmREcm9wKGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYsIHN0ZDo6ZnVuY3Rp
b248c3RkOjp1bmlxdWVfcHRyPFBhc3RlYm9hcmQ+KCk+LCBEcmFnT3BlcmF0aW9uIHNvdXJjZU9w
ZXJhdGlvbiwgYm9vbCBkcmFnZ2luZ0ZpbGVzLCBzdGQ6Om9wdGlvbmFsPERyYWdPcGVyYXRpb24+
JiBkZXN0aW5hdGlvbk9wZXJhdGlvbik7CisgICAgdm9pZCBjYW5jZWxEcmFnQW5kRHJvcChjb25z
dCBQbGF0Zm9ybU1vdXNlRXZlbnQmLCBzdGQ6OnVuaXF1ZV9wdHI8UGFzdGVib2FyZD4mJiwgRHJh
Z09wZXJhdGlvbiwgYm9vbCBkcmFnZ2luZ0ZpbGVzKTsKKyAgICBib29sIHBlcmZvcm1EcmFnQW5k
RHJvcChjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmLCBzdGQ6OnVuaXF1ZV9wdHI8UGFzdGVib2Fy
ZD4mJiwgRHJhZ09wZXJhdGlvbiwgYm9vbCBkcmFnZ2luZ0ZpbGVzKTsKICAgICB2b2lkIHVwZGF0
ZURyYWdTdGF0ZUFmdGVyRWRpdERyYWdJZk5lZWRlZChFbGVtZW50JiByb290RWRpdGFibGVFbGVt
ZW50KTsKICAgICBSZWZQdHI8RWxlbWVudD4gZHJhZ2dlZEVsZW1lbnQoKSBjb25zdDsKICNlbmRp
ZgpAQCAtMzkyLDcgKzM5Myw4IEBAIHByaXZhdGU6CiAgICAgYm9vbCBkaXNwYXRjaE1vdXNlRXZl
bnQoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIE5vZGUqIHRhcmdldCwgYm9vbCBjYW5j
ZWxhYmxlLCBpbnQgY2xpY2tDb3VudCwgY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiwgYm9vbCBz
ZXRVbmRlcik7CiAKICNpZiBFTkFCTEUoRFJBR19TVVBQT1JUKQotICAgIGJvb2wgZGlzcGF0Y2hE
cmFnRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIEVsZW1lbnQmIHRhcmdldCwg
Y29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiwgRGF0YVRyYW5zZmVyKik7CisgICAgYm9vbCBkaXNw
YXRjaERyYWdFdmVudChjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgRWxlbWVudCYgdGFy
Z2V0LCBjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmLCBEYXRhVHJhbnNmZXImKTsKKyAgICBib29s
IGRpc3BhdGNoRHJhZ0VudGVyT3JEcmFnT3ZlckV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgZXZl
bnRUeXBlLCBFbGVtZW50JiB0YXJnZXQsIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYsIHN0ZDo6
dW5pcXVlX3B0cjxQYXN0ZWJvYXJkPiYmICwgRHJhZ09wZXJhdGlvbiwgYm9vbCBkcmFnZ2luZ0Zp
bGVzLCBzdGQ6Om9wdGlvbmFsPERyYWdPcGVyYXRpb24+JiBkZXN0aW5hdGlvbk9wZXJhdGlvbik7
CiAgICAgdm9pZCBpbnZhbGlkYXRlRGF0YVRyYW5zZmVyKCk7CiAKICAgICBib29sIGhhbmRsZURy
YWcoY29uc3QgTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYsIENoZWNrRHJhZ0h5c3RlcmVz
aXMpOwpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMjIzMDIxKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTggQEAKKzIwMTctMTAtMDcgIFJ5b3N1a2UgTml3
YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAgZHJhZ2VudGVyIGFuZCBkcmFnbGVhdmUg
c2hvdWxkbid0IHVzZSB0aGUgc2FtZSBkYXRhIHRyYW5zZmVyIG9iamVjdAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc4MDU2CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgYSByZWdyZXNzaW9uIHRl
c3QgZm9yIGNoZWNraW5nIHRoZSB1bmlxdWVuZXNzIG9mIGRhdGFUcmFuc2ZlciBvYmplY3QgZm9y
IGRyYWdlbnRlciBhbmQgZHJhZ2xlYXZlIGV2ZW50cy4KKyAgICAgICAgVW5mb3J0dW5hdGVseSwg
dGhlIHRlc3QgaXMgb25seSBydW5uYWJsZSBpbiBNYWMgV2ViS2l0MSBwb3J0IGR1ZSB0byB0aGUg
bGFjayBvZiBzdXBwb3J0IGluIFdlYktpdFRlc3RSdW5uZXIuCisKKyAgICAgICAgKiBUZXN0RXhw
ZWN0YXRpb25zOgorICAgICAgICAqIGVkaXRpbmcvcGFzdGVib2FyZC9kYXRhLXRyYW5zZmVyLWlz
LXVuaXF1ZS1mb3ItZHJhZ2VudGVyLWFuZC1kcmFnbGVhdmUtZXhwZWN0ZWQudHh0OiBBZGRlZC4K
KyAgICAgICAgKiBlZGl0aW5nL3Bhc3RlYm9hcmQvZGF0YS10cmFuc2Zlci1pcy11bmlxdWUtZm9y
LWRyYWdlbnRlci1hbmQtZHJhZ2xlYXZlLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3Jt
L21hYy13azEvVGVzdEV4cGVjdGF0aW9uczoKKwogMjAxNy0xMC0wNyAgQW5keSBFc3RlcyAgPGFl
c3Rlc0BhcHBsZS5jb20+CiAKICAgICAgICAgW1BheW1lbnQgUmVxdWVzdF0gSW1wbGVtZW50IFBh
eW1lbnRSZXF1ZXN0LnNob3coKSBhbmQgUGF5bWVudFJlcXVlc3QuaGlkZSgpCkluZGV4OiBMYXlv
dXRUZXN0cy9UZXN0RXhwZWN0YXRpb25zCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL1Rlc3RF
eHBlY3RhdGlvbnMJKHJldmlzaW9uIDIyMzAyMSkKKysrIExheW91dFRlc3RzL1Rlc3RFeHBlY3Rh
dGlvbnMJKHdvcmtpbmcgY29weSkKQEAgLTczLDYgKzczLDcgQEAgZWRpdGluZy9wYXN0ZWJvYXJk
L2RhdGEtdHJhbnNmZXItZ2V0LWRhdAogZWRpdGluZy9wYXN0ZWJvYXJkL2RhdGEtdHJhbnNmZXIt
Z2V0LWRhdGEtb24tZHJvcC1wbGFpbi10ZXh0Lmh0bWwgWyBTa2lwIF0KIGVkaXRpbmcvcGFzdGVi
b2FyZC9kYXRhLXRyYW5zZmVyLWdldC1kYXRhLW9uLWRyb3AtcmljaC10ZXh0Lmh0bWwgWyBTa2lw
IF0KIGVkaXRpbmcvcGFzdGVib2FyZC9kYXRhLXRyYW5zZmVyLWdldC1kYXRhLW9uLWRyb3AtdXJs
Lmh0bWwgWyBTa2lwIF0KK2VkaXRpbmcvcGFzdGVib2FyZC9kYXRhLXRyYW5zZmVyLWlzLXVuaXF1
ZS1mb3ItZHJhZ2VudGVyLWFuZC1kcmFnbGVhdmUuaHRtbCBbIFNraXAgXQogZWRpdGluZy9wYXN0
ZWJvYXJkL2RyYWctZW5kLWNyYXNoLWFjY2Vzc2luZy1pdGVtLWxpc3QuaHRtbCBbIFNraXAgXQog
ZWRpdGluZy9wYXN0ZWJvYXJkL2RhdGEtdHJhbnNmZXItaXRlbS1saXN0LWFkZC1maWxlLW9uLWRy
YWcuaHRtbCBbIFNraXAgXQogCkluZGV4OiBMYXlvdXRUZXN0cy9lZGl0aW5nL3Bhc3RlYm9hcmQv
ZGF0YS10cmFuc2Zlci1pcy11bmlxdWUtZm9yLWRyYWdlbnRlci1hbmQtZHJhZ2xlYXZlLWV4cGVj
dGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9lZGl0aW5nL3Bhc3RlYm9hcmQvZGF0
YS10cmFuc2Zlci1pcy11bmlxdWUtZm9yLWRyYWdlbnRlci1hbmQtZHJhZ2xlYXZlLWV4cGVjdGVk
LnR4dAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy9lZGl0aW5nL3Bhc3RlYm9hcmQvZGF0
YS10cmFuc2Zlci1pcy11bmlxdWUtZm9yLWRyYWdlbnRlci1hbmQtZHJhZ2xlYXZlLWV4cGVjdGVk
LnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDkgQEAKK1BBU1MgZHJhZ3N0YXJ0IGZvciBz
b3VyY2UgaGFkIGFuIHVuaXF1ZSBkYXRhVHJhbnNmZXIgb2JqZWN0CitQQVNTIGRyYWdlbnRlciBm
b3IgcGFzc292ZXIgaGFkIGFuIHVuaXF1ZSBkYXRhVHJhbnNmZXIgb2JqZWN0CitQQVNTIGRyYWdl
bnRlciBmb3IgZGVzdGluYXRpb24gaGFkIGFuIHVuaXF1ZSBkYXRhVHJhbnNmZXIgb2JqZWN0CitQ
QVNTIGRyYWdsZWF2ZSBmb3IgcGFzc292ZXIgaGFkIGFuIHVuaXF1ZSBkYXRhVHJhbnNmZXIgb2Jq
ZWN0CitQQVNTIGRyYWdsZWF2ZSBmb3IgZGVzdGluYXRpb24gaGFkIGFuIHVuaXF1ZSBkYXRhVHJh
bnNmZXIgb2JqZWN0CitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09N
UExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvZWRpdGluZy9wYXN0ZWJvYXJkL2RhdGEtdHJhbnNm
ZXItaXMtdW5pcXVlLWZvci1kcmFnZW50ZXItYW5kLWRyYWdsZWF2ZS5odG1sCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2VkaXRpbmcvcGFzdGVib2FyZC9kYXRhLXRyYW5zZmVyLWlzLXVuaXF1
ZS1mb3ItZHJhZ2VudGVyLWFuZC1kcmFnbGVhdmUuaHRtbAkobm9uZXhpc3RlbnQpCisrKyBMYXlv
dXRUZXN0cy9lZGl0aW5nL3Bhc3RlYm9hcmQvZGF0YS10cmFuc2Zlci1pcy11bmlxdWUtZm9yLWRy
YWdlbnRlci1hbmQtZHJhZ2xlYXZlLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2OCBA
QAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxib2R5PgorPHN0eWxlPgorI2NvbnRhaW5lciA+
IGRpdiB7IHdpZHRoOiAxMDBweDsgaGVpZ2h0OiA1MHB4OyBtYXJnaW46IDBweDsgfQorPC9zdHls
ZT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29udGFpbmVyIj4KKzxkaXYg
ZHJhZ2dhYmxlPSJ0cnVlIiBpZD0ic291cmNlIiBzdHlsZT0iYmFja2dyb3VuZDogIzljZiI+RHJh
ZyB0aGlzPC9kaXY+Cis8ZGl2IGlkPSJwYXNzb3ZlciIgc3R5bGU9ImJhY2tncm91bmQ6ICNmZjki
PkRyYWcgb3ZlciBoZXJlPC9kaXY+Cis8ZGl2IGlkPSJkZXN0aW5hdGlvbiIgc3R5bGU9ImJhY2tn
cm91bmQ6ICNmYzkiPkFuZCBkcm9wIGhlcmU8L2Rpdj4KKzwvZGl2PgorPGRpdiBpZD0iY29uc29s
ZSI+PC9kaXY+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48
L3NjcmlwdD4KKzxzY3JpcHQ+CisKK3ZhciBqc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKKworc291cmNl
LmFkZEV2ZW50TGlzdGVuZXIoImRyYWdzdGFydCIsIChldmVudCkgPT4geworICAgIGV2ZW50LmRh
dGFUcmFuc2Zlci5lZmZlY3RBbGxvd2VkID0gJ2NvcHknOworICAgIGV2ZW50LmRhdGFUcmFuc2Zl
ci5zZXREYXRhKCd0ZXh0JywgJ2hlbGxvLCB3b3JsZCcpOworICAgIGRhdGFUcmFuc2Zlck1hcC5j
bGVhcigpOworICAgIHRlc3RVbmlxdWVuZXNzQW5kQWRkKGV2ZW50LmRhdGFUcmFuc2ZlciwgJ3Nv
dXJjZScsICdkcmFnc3RhcnQnKTsKK30pOworCitjb25zdCBkYXRhVHJhbnNmZXJNYXAgPSBuZXcg
TWFwOworZnVuY3Rpb24gdGVzdFVuaXF1ZW5lc3NBbmRBZGQoZGF0YVRyYW5zZmVyLCBsYWJlbCwg
ZXZlbnRUeXBlKSB7CisgICAgY29uc3QgZXhpc3RpbmdFbnRyeSA9IGRhdGFUcmFuc2Zlck1hcC5n
ZXQoZGF0YVRyYW5zZmVyKTsKKyAgICBpZiAoZXhpc3RpbmdFbnRyeSkgeworICAgICAgICB0ZXN0
RmFpbGVkKGAke2V2ZW50VHlwZX0gZm9yICR7bGFiZWx9IGhhZCB0aGUgc2FtZSBkYXRhVHJhbnNm
ZXIgb2JqZWN0IGFzICR7ZXhpc3RpbmdFbnRyeS5ldmVudFR5cGV9IGZvciAke2V4aXN0aW5nRW50
cnkubGFiZWx9YCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgdGVzdFBhc3NlZChgJHtl
dmVudFR5cGV9IGZvciAke2xhYmVsfSBoYWQgYW4gdW5pcXVlIGRhdGFUcmFuc2ZlciBvYmplY3Rg
KTsKKyAgICBkYXRhVHJhbnNmZXJNYXAuc2V0KGRhdGFUcmFuc2Zlciwge2xhYmVsLCBldmVudFR5
cGV9KTsKK30KKworcGFzc292ZXIuYWRkRXZlbnRMaXN0ZW5lcigiZHJhZ2VudGVyIiwgKGV2ZW50
KSA9PiB7CisgICAgdGVzdFVuaXF1ZW5lc3NBbmRBZGQoZXZlbnQuZGF0YVRyYW5zZmVyLCAncGFz
c292ZXInLCAnZHJhZ2VudGVyJyk7Cit9KTsKK3Bhc3NvdmVyLmFkZEV2ZW50TGlzdGVuZXIoImRy
YWdsZWF2ZSIsIChldmVudCkgPT4geworICAgIHRlc3RVbmlxdWVuZXNzQW5kQWRkKGV2ZW50LmRh
dGFUcmFuc2ZlciwgJ3Bhc3NvdmVyJywgJ2RyYWdsZWF2ZScpOworfSk7CitkZXN0aW5hdGlvbi5h
ZGRFdmVudExpc3RlbmVyKCJkcmFnZW50ZXIiLCAoZXZlbnQpID0+IHsKKyAgICB0ZXN0VW5pcXVl
bmVzc0FuZEFkZChldmVudC5kYXRhVHJhbnNmZXIsICdkZXN0aW5hdGlvbicsICdkcmFnZW50ZXIn
KTsKK30pOworZGVzdGluYXRpb24uYWRkRXZlbnRMaXN0ZW5lcigiZHJhZ2xlYXZlIiwgKGV2ZW50
KSA9PiB7CisgICAgdGVzdFVuaXF1ZW5lc3NBbmRBZGQoZXZlbnQuZGF0YVRyYW5zZmVyLCAnZGVz
dGluYXRpb24nLCAnZHJhZ2xlYXZlJyk7Cit9KTsKK2Rlc3RpbmF0aW9uLmFkZEV2ZW50TGlzdGVu
ZXIoImRyb3AiLCAoZXZlbnQpID0+IHsKKyAgICB0ZXN0VW5pcXVlbmVzc0FuZEFkZChldmVudC5k
YXRhVHJhbnNmZXIsICdkZXN0aW5hdGlvbicsICdkcm9wJyk7CisgICAgZmluaXNoSlNUZXN0KCk7
Cit9KTsKKworaWYgKHdpbmRvdy5ldmVudFNlbmRlcikgeworICAgIGV2ZW50U2VuZGVyLm1vdXNl
TW92ZVRvKHNvdXJjZS5vZmZzZXRMZWZ0ICsgMTAsIHNvdXJjZS5vZmZzZXRUb3AgKyAxMCk7Cisg
ICAgZXZlbnRTZW5kZXIubW91c2VEb3duKCk7CisgICAgZXZlbnRTZW5kZXIubGVhcEZvcndhcmQo
NTAwKTsKKyAgICBldmVudFNlbmRlci5tb3VzZU1vdmVUbyhwYXNzb3Zlci5vZmZzZXRMZWZ0ICsg
MTAsIHBhc3NvdmVyLm9mZnNldFRvcCArIDEwKTsKKyAgICBldmVudFNlbmRlci5sZWFwRm9yd2Fy
ZCgxMDApOworICAgIGV2ZW50U2VuZGVyLm1vdXNlTW92ZVRvKGRlc3RpbmF0aW9uLm9mZnNldExl
ZnQgKyAxMCwgZGVzdGluYXRpb24ub2Zmc2V0VG9wICsgMTApOworICAgIGV2ZW50U2VuZGVyLm1v
dXNlVXAoKTsKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29udGFpbmVyJykucmVtb3Zl
KCk7Cit9CisKKzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0
LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMv
cGxhdGZvcm0vbWFjLXdrMS9UZXN0RXhwZWN0YXRpb25zCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL3BsYXRmb3JtL21hYy13azEvVGVzdEV4cGVjdGF0aW9ucwkocmV2aXNpb24gMjIzMDIxKQor
KysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjLXdrMS9UZXN0RXhwZWN0YXRpb25zCSh3b3JraW5n
IGNvcHkpCkBAIC0xMSw2ICsxMSw3IEBAIGVkaXRpbmcvcGFzdGVib2FyZC9kYXRhLXRyYW5zZmVy
LWdldC1kYXQKIGVkaXRpbmcvcGFzdGVib2FyZC9kYXRhLXRyYW5zZmVyLWdldC1kYXRhLW9uLWRy
b3AtcGxhaW4tdGV4dC5odG1sIFsgUGFzcyBdCiBlZGl0aW5nL3Bhc3RlYm9hcmQvZGF0YS10cmFu
c2Zlci1nZXQtZGF0YS1vbi1kcm9wLXJpY2gtdGV4dC5odG1sIFsgUGFzcyBdCiBlZGl0aW5nL3Bh
c3RlYm9hcmQvZGF0YS10cmFuc2Zlci1nZXQtZGF0YS1vbi1kcm9wLXVybC5odG1sIFsgUGFzcyBd
CitlZGl0aW5nL3Bhc3RlYm9hcmQvZGF0YS10cmFuc2Zlci1pcy11bmlxdWUtZm9yLWRyYWdlbnRl
ci1hbmQtZHJhZ2xlYXZlLmh0bWwgWyBQYXNzIF0KIGVkaXRpbmcvcGFzdGVib2FyZC9kcmFnLWVu
ZC1jcmFzaC1hY2Nlc3NpbmctaXRlbS1saXN0Lmh0bWwgWyBQYXNzIF0KIGVkaXRpbmcvcGFzdGVi
b2FyZC9kYXRhLXRyYW5zZmVyLWl0ZW0tbGlzdC1hZGQtZmlsZS1vbi1kcmFnLmh0bWwgWyBQYXNz
IF0KIApJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luL1Rlc3RFeHBlY3RhdGlvbnMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luL1Rlc3RFeHBlY3RhdGlvbnMJKHJl
dmlzaW9uIDIyMzAyMSkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9UZXN0RXhwZWN0YXRp
b25zCSh3b3JraW5nIGNvcHkpCkBAIC0xMTU1LDYgKzExNTUsNyBAQCBlZGl0aW5nL3Bhc3RlYm9h
cmQvcGFzdGUtZ2xvYmFsLXNlbGVjdGlvCiB3ZWJraXQub3JnL2IvMTE2NTY0IGVkaXRpbmcvcGFz
dGVib2FyZC9jb3B5LXdpdGhvdXQtc2VsZWN0aW9uLmh0bWwgWyBTa2lwIF0KIGVkaXRpbmcvcGFz
dGVib2FyZC9zbWFydC1wYXN0ZS0wMDQuaHRtbCBbIEZhaWx1cmUgXQogIyBUT0RPIERyYWcgJiBE
cm9wIGRvZXNuJ3Qgd29yayBjb3JyZWN0bHkgaW4gRFJUIDxyZGFyOi8vNTYyMTI0ND4KK2VkaXRp
bmcvcGFzdGVib2FyZC9kYXRhLXRyYW5zZmVyLWlzLXVuaXF1ZS1mb3ItZHJhZ2VudGVyLWFuZC1k
cmFnbGVhdmUuaHRtbCBbIFNraXAgXQogZWRpdGluZy9wYXN0ZWJvYXJkL2RyYWctYW5kLWRyb3At
b2JqZWN0aW1hZ2UtY29udGVudGVkaXRhYmxlLmh0bWwgWyBTa2lwIF0KIGVkaXRpbmcvcGFzdGVi
b2FyZC9kcmFnLWltYWdlLWluLWFib3V0LWJsYW5rLWZyYW1lLmh0bWwgWyBTa2lwIF0KIGVkaXRp
bmcvcGFzdGVib2FyZC9kcm9wLWZpbGUtc3ZnLmh0bWwgWyBTa2lwIF0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>323132</attachid>
            <date>2017-10-08 02:29:26 -0700</date>
            <delta_ts>2017-10-08 03:08:56 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-178056-20171008022924.patch</filename>
            <type>text/plain</type>
            <size>31061</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyMzAyNCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ1IEBACisyMDE3LTEwLTA3ICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIGRyYWdlbnRlciBhbmQgZHJhZ2xl
YXZlIHNob3VsZG4ndCB1c2UgdGhlIHNhbWUgZGF0YSB0cmFuc2ZlciBvYmplY3QKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3ODA1NgorCisgICAgICAg
IFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgorCisgICAgICAgIFRoaXMgcGF0Y2ggZml4ZXMgdGhl
IGJ1ZyB0aGF0IHdlIHdlcmUgdXNpbmcgYSBzaW5nbGUgRGF0YVRyYW5zZmVyIHRvIGZpcmUgZHJh
Z2xlYXZlIGFuZCBkcmFnZW50ZXIgZXZlbnRzCisgICAgICAgIHdoZW4gdGhlIGRyYWcgdGFyZ2V0
IG1vdmVzIGZyb20gb25lIGVsZW1lbnQgdG8gYW5vdGhlci4KKworICAgICAgICBJdCBhbG9zIHJl
ZmFjdG9ycyBEcmFnQ29udHJvbGxlciBhbmQgRXZlbnRIYW5kbGVyIGNvZGUgc28gdGhhdCB0aGUg
Y29uc3RydWN0aW9uIG9mIERhdGFUcmFuc2ZlciBvYmplY3QKKyAgICAgICAgaGFwcGVucyBpbiBF
dmVudEhhbmRsZXIgaW5zdGVhZCBvZiBEcmFnQ29udHJvbGxlciwgYW5kIGV4dHJhY3RzIGNyZWF0
ZUZvclVwZGF0aW5nRHJvcFRhcmdldCBvdXQgb2YKKyAgICAgICAgY3JlYXRlRm9yRHJvcCB0byBo
YXZlIGEgYmV0dGVyIGVuY2Fwc3VsYXRpb24gb3ZlciB0aGUgZGF0YSBzdG9yZSBtb2RlLgorCisg
ICAgICAgIGRyYWcgcmVsYXRlZCBmdW5jdGlvbnMgaW4gRXZlbnRIYW5kbGVyIG5vdyB0YWtlcyBz
dGQ6OnVuaXF1ZV9wdHI8UGFzdGVib2FyZD4mJiwgZHJhZyBvcGVyYXRpb24gbWFzayBzZXQKKyAg
ICAgICAgYnkgdGhlIGRyYWcgc291cmNlLCBhbmQgYSBib29sZWFuIGluZGljYXRpbmcgd2hldGhl
ciB0aGlzIGRyYWcgJiBkcm9wIGlzIGZvciBmaWxlcyBvciBub3QuIHVwZGF0ZURyYWdBbmREcm9w
CisgICAgICAgIHRha2VzIGEgY2xvc3VyZSB3aGljaCBtYWtlcyBhIHBhc3RlYm9hcmQgYmVjYXVz
ZSBpdCBoYXMgdG8gY3JlYXRlIHR3byBpbnN0YW5jZXMgb2YgRGF0YVRyYW5zZmVyIG9uZSBmb3IK
KyAgICAgICAgZHJhZ2xlYXZlIGV2ZW50IGFuZCBhbm90aGVyIG9uZSBmb3IgZHJhZ2VudGVyIGV2
ZW50IGluIHNvbWUgY2FzZXMuCisKKyAgICAgICAgVGVzdDogZWRpdGluZy9wYXN0ZWJvYXJkL2Rh
dGEtdHJhbnNmZXItaXMtdW5pcXVlLWZvci1kcmFnZW50ZXItYW5kLWRyYWdsZWF2ZS5odG1sCisK
KyAgICAgICAgKiBkb20vRGF0YVRyYW5zZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFU
cmFuc2Zlcjo6Y3JlYXRlRm9yRHJvcCk6IE5vdyB0YWtlcyBQYXN0ZWJvYXJkIGluc3RlYWQgb2Yg
RHJhZ0RhdGEuCisgICAgICAgIChXZWJDb3JlOjpEYXRhVHJhbnNmZXI6OmNyZWF0ZUZvclVwZGF0
aW5nRHJvcFRhcmdldCk6IEV4dHJhY3RlZCBvdXQgb2YgY3JlYXRlRm9yRHJvcC4gTW92ZWQgdGhl
IGNvZGUgdG8KKyAgICAgICAgdXNlIFJlYWRvbmx5IG1vZGUgaW4gZGFzaGJvYWQgaGVyZSBmcm9t
IGNyZWF0ZURhdGFUcmFuc2ZlclRvVXBkYXRlRHJhZyBpbiBEcmFnQ29udHJvbGxlci5jcHAuCisg
ICAgICAgICogZG9tL0RhdGFUcmFuc2Zlci5oOgorICAgICAgICAqIHBhZ2UvRHJhZ0NvbnRyb2xs
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlRGF0YVRyYW5zZmVyVG9VcGRhdGVEcmFn
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRyYWdDb250cm9sbGVyOjpkcmFnRXhpdGVk
KToKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdDb250cm9sbGVyOjpwZXJmb3JtRHJhZ09wZXJhdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpEcmFnQ29udHJvbGxlcjo6dHJ5REhUTUxEcmFnKToKKyAg
ICAgICAgKiBwYWdlL0V2ZW50SGFuZGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhh
bmRsZXI6OmRpc3BhdGNoRHJhZ0V2ZW50KTogTWFkZSB0aGlzIGZ1Y250aW9uIHRha2UgRGF0YVRy
YW5zZmVyJiBpbnN0ZWFkIG9mIERhdGFUcmFuc2ZlciouCisgICAgICAgIChXZWJDb3JlOjpmaW5k
RHJvcFpvbmUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6ZGlzcGF0
Y2hEcmFnRW50ZXJPckRyYWdPdmVyRXZlbnQpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkV2
ZW50SGFuZGxlcjo6dXBkYXRlRHJhZ0FuZERyb3ApOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRI
YW5kbGVyOjpjYW5jZWxEcmFnQW5kRHJvcCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRs
ZXI6OnBlcmZvcm1EcmFnQW5kRHJvcCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6
OmRpc3BhdGNoRHJhZ1NyY0V2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6
ZGlzcGF0Y2hEcmFnU3RhcnRFdmVudE9uU291cmNlRWxlbWVudCk6CisgICAgICAgICogcGFnZS9F
dmVudEhhbmRsZXIuaDoKKwogMjAxNy0xMC0wNyAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5j
b20+CiAKICAgICAgICAgVXBkYXRlIERvY3VtZW50LmNyZWF0ZUV2ZW50IGZvciByZWNlbnQgRE9N
IHNwZWNpZmljYXRpb24gY2hhbmdlcwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RhdGFUcmFu
c2Zlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0RhdGFUcmFuc2Zlci5j
cHAJKHJldmlzaW9uIDIyMzAyMSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9EYXRhVHJhbnNmZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMzcsMTAgKzMzNywyNSBAQCBSZWY8RGF0YVRyYW5zZmVy
PiBEYXRhVHJhbnNmZXI6OmNyZWF0ZUZvCiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRGF0YVRy
YW5zZmVyKFN0b3JlTW9kZTo6UmVhZFdyaXRlLCBzdGQ6Om1ha2VfdW5pcXVlPFN0YXRpY1Bhc3Rl
Ym9hcmQ+KCksIFR5cGU6OkRyYWdBbmREcm9wRGF0YSkpOwogfQogCi1SZWY8RGF0YVRyYW5zZmVy
PiBEYXRhVHJhbnNmZXI6OmNyZWF0ZUZvckRyb3AoU3RvcmVNb2RlIGFjY2Vzc01vZGUsIGNvbnN0
IERyYWdEYXRhJiBkcmFnRGF0YSkKK1JlZjxEYXRhVHJhbnNmZXI+IERhdGFUcmFuc2Zlcjo6Y3Jl
YXRlRm9yRHJvcChzdGQ6OnVuaXF1ZV9wdHI8UGFzdGVib2FyZD4mJiBwYXN0ZWJvYXJkLCBEcmFn
T3BlcmF0aW9uIHNvdXJjZU9wZXJhdGlvbiwgYm9vbCBkcmFnZ2luZ0ZpbGVzKQogewotICAgIGF1
dG8gdHlwZSA9IGRyYWdEYXRhLmNvbnRhaW5zRmlsZXMoKSA/IFR5cGU6OkRyYWdBbmREcm9wRmls
ZXMgOiBUeXBlOjpEcmFnQW5kRHJvcERhdGE7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRGF0
YVRyYW5zZmVyKGFjY2Vzc01vZGUsIFBhc3RlYm9hcmQ6OmNyZWF0ZUZvckRyYWdBbmREcm9wKGRy
YWdEYXRhKSwgdHlwZSkpOworICAgIGF1dG8gZGF0YVRyYW5zZmVyID0gYWRvcHRSZWYoKm5ldyBE
YXRhVHJhbnNmZXIoRGF0YVRyYW5zZmVyOjpTdG9yZU1vZGU6OlJlYWRvbmx5LCBXVEZNb3ZlKHBh
c3RlYm9hcmQpLCBkcmFnZ2luZ0ZpbGVzID8gVHlwZTo6RHJhZ0FuZERyb3BGaWxlcyA6IFR5cGU6
OkRyYWdBbmREcm9wRGF0YSkpOworICAgIGRhdGFUcmFuc2Zlci0+c2V0U291cmNlT3BlcmF0aW9u
KHNvdXJjZU9wZXJhdGlvbik7CisgICAgcmV0dXJuIGRhdGFUcmFuc2ZlcjsKK30KKworUmVmPERh
dGFUcmFuc2Zlcj4gRGF0YVRyYW5zZmVyOjpjcmVhdGVGb3JVcGRhdGluZ0Ryb3BUYXJnZXQoRG9j
dW1lbnQmIGRvY3VtZW50LCBzdGQ6OnVuaXF1ZV9wdHI8UGFzdGVib2FyZD4mJiBwYXN0ZWJvYXJk
LCBEcmFnT3BlcmF0aW9uIHNvdXJjZU9wZXJhdGlvbiwgYm9vbCBkcmFnZ2luZ0ZpbGVzKQorewor
ICAgIGF1dG8gbW9kZSA9IERhdGFUcmFuc2Zlcjo6U3RvcmVNb2RlOjpQcm90ZWN0ZWQ7CisjaWYg
RU5BQkxFKERBU0hCT0FSRF9TVVBQT1JUKQorICAgIGlmIChkb2N1bWVudC5zZXR0aW5ncygpLnVz
ZXNEYXNoYm9hcmRCYWNrd2FyZENvbXBhdGliaWxpdHlNb2RlKCkgJiYgZG9jdW1lbnQuc2VjdXJp
dHlPcmlnaW4oKS5pc0xvY2FsKCkpCisgICAgICAgIG1vZGUgPSBEYXRhVHJhbnNmZXI6OlN0b3Jl
TW9kZTo6UmVhZG9ubHk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShkb2N1bWVudCk7CisjZW5k
aWYKKyAgICBhdXRvIGRhdGFUcmFuc2ZlciA9IGFkb3B0UmVmKCpuZXcgRGF0YVRyYW5zZmVyKG1v
ZGUsIFdURk1vdmUocGFzdGVib2FyZCksIGRyYWdnaW5nRmlsZXMgPyBUeXBlOjpEcmFnQW5kRHJv
cEZpbGVzIDogVHlwZTo6RHJhZ0FuZERyb3BEYXRhKSk7CisgICAgZGF0YVRyYW5zZmVyLT5zZXRT
b3VyY2VPcGVyYXRpb24oc291cmNlT3BlcmF0aW9uKTsKKyAgICByZXR1cm4gZGF0YVRyYW5zZmVy
OwogfQogCiB2b2lkIERhdGFUcmFuc2Zlcjo6c2V0RHJhZ0ltYWdlKEVsZW1lbnQqIGVsZW1lbnQs
IGludCB4LCBpbnQgeSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9EYXRhVHJhbnNmZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRGF0YVRyYW5zZmVyLmgJKHJldmlzaW9u
IDIyMzAyMSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9EYXRhVHJhbnNmZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtMzIsNiArMzIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENhY2hl
ZEltYWdlOwogY2xhc3MgRGF0YVRyYW5zZmVySXRlbUxpc3Q7CitjbGFzcyBEb2N1bWVudDsKIGNs
YXNzIERyYWdEYXRhOwogY2xhc3MgRHJhZ0ltYWdlTG9hZGVyOwogY2xhc3MgRWxlbWVudDsKQEAg
LTgzLDcgKzg0LDggQEAgcHVibGljOgogI2lmIEVOQUJMRShEUkFHX1NVUFBPUlQpCiAgICAgc3Rh
dGljIFJlZjxEYXRhVHJhbnNmZXI+IGNyZWF0ZUZvckRyYWcoKTsKICAgICBzdGF0aWMgUmVmPERh
dGFUcmFuc2Zlcj4gY3JlYXRlRm9yRHJhZ1N0YXJ0RXZlbnQoKTsKLSAgICBzdGF0aWMgUmVmPERh
dGFUcmFuc2Zlcj4gY3JlYXRlRm9yRHJvcChTdG9yZU1vZGUsIGNvbnN0IERyYWdEYXRhJik7Cisg
ICAgc3RhdGljIFJlZjxEYXRhVHJhbnNmZXI+IGNyZWF0ZUZvckRyb3Aoc3RkOjp1bmlxdWVfcHRy
PFBhc3RlYm9hcmQ+JiYsIERyYWdPcGVyYXRpb24sIGJvb2wgZHJhZ2dpbmdGaWxlcyk7CisgICAg
c3RhdGljIFJlZjxEYXRhVHJhbnNmZXI+IGNyZWF0ZUZvclVwZGF0aW5nRHJvcFRhcmdldChEb2N1
bWVudCYsIHN0ZDo6dW5pcXVlX3B0cjxQYXN0ZWJvYXJkPiYmLCBEcmFnT3BlcmF0aW9uLCBib29s
IGRyYWdnaW5nRmlsZXMpOwogCiAgICAgYm9vbCBkcm9wRWZmZWN0SXNVbmluaXRpYWxpemVkKCkg
Y29uc3QgeyByZXR1cm4gbV9kcm9wRWZmZWN0ID09ICJ1bmluaXRpYWxpemVkIjsgfQogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMjIzMDIxKQor
KysgU291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIyMCwzMSArMjIwLDExIEBAIERyYWdPcGVyYXRpb24gRHJhZ0NvbnRyb2xsZXI6OmRyYWdF
bnRlcmUKICAgICByZXR1cm4gZHJhZ0VudGVyZWRPclVwZGF0ZWQoZHJhZ0RhdGEpOwogfQogCi1z
dGF0aWMgUmVmPERhdGFUcmFuc2Zlcj4gY3JlYXRlRGF0YVRyYW5zZmVyVG9VcGRhdGVEcmFnKGNv
bnN0IERyYWdEYXRhJiBkcmFnRGF0YSwgY29uc3QgU2V0dGluZ3MmIHNldHRpbmdzLCBSZWZQdHI8
RG9jdW1lbnQ+JiYgZG9jdW1lbnRVbmRlck1vdXNlKQotewotICAgIGF1dG8gYWNjZXNzTW9kZSA9
IERhdGFUcmFuc2Zlcjo6U3RvcmVNb2RlOjpQcm90ZWN0ZWQ7Ci0KLSNpZiBFTkFCTEUoREFTSEJP
QVJEX1NVUFBPUlQpCi0gICAgaWYgKHNldHRpbmdzLnVzZXNEYXNoYm9hcmRCYWNrd2FyZENvbXBh
dGliaWxpdHlNb2RlKCkgJiYgKCFkb2N1bWVudFVuZGVyTW91c2UgfHwgZG9jdW1lbnRVbmRlck1v
dXNlLT5zZWN1cml0eU9yaWdpbigpLmlzTG9jYWwoKSkpCi0gICAgICAgIGFjY2Vzc01vZGUgPSBE
YXRhVHJhbnNmZXI6OlN0b3JlTW9kZTo6UmVhZG9ubHk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJB
TShzZXR0aW5ncyk7Ci0gICAgVU5VU0VEX1BBUkFNKGRvY3VtZW50VW5kZXJNb3VzZSk7Ci0jZW5k
aWYKLQotICAgIGF1dG8gZGF0YVRyYW5zZmVyID0gRGF0YVRyYW5zZmVyOjpjcmVhdGVGb3JEcm9w
KGFjY2Vzc01vZGUsIGRyYWdEYXRhKTsKLSAgICBkYXRhVHJhbnNmZXItPnNldFNvdXJjZU9wZXJh
dGlvbihkcmFnRGF0YS5kcmFnZ2luZ1NvdXJjZU9wZXJhdGlvbk1hc2soKSk7Ci0KLSAgICByZXR1
cm4gZGF0YVRyYW5zZmVyOwotfQotCiB2b2lkIERyYWdDb250cm9sbGVyOjpkcmFnRXhpdGVkKGNv
bnN0IERyYWdEYXRhJiBkcmFnRGF0YSkKIHsKLSAgICBpZiAoUmVmUHRyPEZyYW1lVmlldz4gdiA9
IG1fcGFnZS5tYWluRnJhbWUoKS52aWV3KCkpIHsKLSAgICAgICAgYXV0byBkYXRhVHJhbnNmZXIg
PSBjcmVhdGVEYXRhVHJhbnNmZXJUb1VwZGF0ZURyYWcoZHJhZ0RhdGEsIG1fcGFnZS5tYWluRnJh
bWUoKS5zZXR0aW5ncygpLCBtX2RvY3VtZW50VW5kZXJNb3VzZS5jb3B5UmVmKCkpOwotICAgICAg
ICBtX3BhZ2UubWFpbkZyYW1lKCkuZXZlbnRIYW5kbGVyKCkuY2FuY2VsRHJhZ0FuZERyb3AoY3Jl
YXRlTW91c2VFdmVudChkcmFnRGF0YSksIGRhdGFUcmFuc2Zlcik7Ci0gICAgICAgIGRhdGFUcmFu
c2Zlci0+bWFrZUludmFsaWRGb3JTZWN1cml0eSgpOwotICAgIH0KKyAgICBhdXRvJiBtYWluRnJh
bWUgPSBtX3BhZ2UubWFpbkZyYW1lKCk7CisgICAgaWYgKG1haW5GcmFtZS52aWV3KCkpCisgICAg
ICAgIG1haW5GcmFtZS5ldmVudEhhbmRsZXIoKS5jYW5jZWxEcmFnQW5kRHJvcChjcmVhdGVNb3Vz
ZUV2ZW50KGRyYWdEYXRhKSwgUGFzdGVib2FyZDo6Y3JlYXRlRm9yRHJhZ0FuZERyb3AoZHJhZ0Rh
dGEpLCBkcmFnRGF0YS5kcmFnZ2luZ1NvdXJjZU9wZXJhdGlvbk1hc2soKSwgZHJhZ0RhdGEuY29u
dGFpbnNGaWxlcygpKTsKICAgICBtb3VzZU1vdmVkSW50b0RvY3VtZW50KG51bGxwdHIpOwogICAg
IGlmIChtX2ZpbGVJbnB1dEVsZW1lbnRVbmRlck1vdXNlKQogICAgICAgICBtX2ZpbGVJbnB1dEVs
ZW1lbnRVbmRlck1vdXNlLT5zZXRDYW5SZWNlaXZlRHJvcHBlZEZpbGVzKGZhbHNlKTsKQEAgLTI4
MiwxMyArMjYyLDggQEAgYm9vbCBEcmFnQ29udHJvbGxlcjo6cGVyZm9ybURyYWdPcGVyYXRpbwog
ICAgICAgICBtX2NsaWVudC53aWxsUGVyZm9ybURyYWdEZXN0aW5hdGlvbkFjdGlvbihEcmFnRGVz
dGluYXRpb25BY3Rpb25ESFRNTCwgZHJhZ0RhdGEpOwogICAgICAgICBSZWY8TWFpbkZyYW1lPiBt
YWluRnJhbWUobV9wYWdlLm1haW5GcmFtZSgpKTsKICAgICAgICAgYm9vbCBwcmV2ZW50ZWREZWZh
dWx0ID0gZmFsc2U7Ci0gICAgICAgIGlmIChtYWluRnJhbWUtPnZpZXcoKSkgewotICAgICAgICAg
ICAgLy8gU2VuZGluZyBhbiBldmVudCBjYW4gcmVzdWx0IGluIHRoZSBkZXN0cnVjdGlvbiBvZiB0
aGUgdmlldyBhbmQgcGFydC4KLSAgICAgICAgICAgIGF1dG8gZGF0YVRyYW5zZmVyID0gRGF0YVRy
YW5zZmVyOjpjcmVhdGVGb3JEcm9wKERhdGFUcmFuc2Zlcjo6U3RvcmVNb2RlOjpSZWFkb25seSwg
ZHJhZ0RhdGEpOwotICAgICAgICAgICAgZGF0YVRyYW5zZmVyLT5zZXRTb3VyY2VPcGVyYXRpb24o
ZHJhZ0RhdGEuZHJhZ2dpbmdTb3VyY2VPcGVyYXRpb25NYXNrKCkpOwotICAgICAgICAgICAgcHJl
dmVudGVkRGVmYXVsdCA9IG1haW5GcmFtZS0+ZXZlbnRIYW5kbGVyKCkucGVyZm9ybURyYWdBbmRE
cm9wKGNyZWF0ZU1vdXNlRXZlbnQoZHJhZ0RhdGEpLCBkYXRhVHJhbnNmZXIpOwotICAgICAgICAg
ICAgZGF0YVRyYW5zZmVyLT5tYWtlSW52YWxpZEZvclNlY3VyaXR5KCk7Ci0gICAgICAgIH0KKyAg
ICAgICAgaWYgKG1haW5GcmFtZS0+dmlldygpKQorICAgICAgICAgICAgcHJldmVudGVkRGVmYXVs
dCA9IG1haW5GcmFtZS0+ZXZlbnRIYW5kbGVyKCkucGVyZm9ybURyYWdBbmREcm9wKGNyZWF0ZU1v
dXNlRXZlbnQoZHJhZ0RhdGEpLCBQYXN0ZWJvYXJkOjpjcmVhdGVGb3JEcmFnQW5kRHJvcChkcmFn
RGF0YSksIGRyYWdEYXRhLmRyYWdnaW5nU291cmNlT3BlcmF0aW9uTWFzaygpLCBkcmFnRGF0YS5j
b250YWluc0ZpbGVzKCkpOwogICAgICAgICBpZiAocHJldmVudGVkRGVmYXVsdCkgewogICAgICAg
ICAgICAgY2xlYXJEcmFnQ2FyZXQoKTsKICAgICAgICAgICAgIG1fZG9jdW1lbnRVbmRlck1vdXNl
ID0gbnVsbHB0cjsKQEAgLTcwOSwyNCArNjg0LDE4IEBAIGJvb2wgRHJhZ0NvbnRyb2xsZXI6OnRy
eURIVE1MRHJhZyhjb25zdCAKICAgICBpZiAoIXZpZXdQcm90ZWN0b3IpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAotICAgIGF1dG8gZGF0YVRyYW5zZmVyID0gY3JlYXRlRGF0YVRyYW5zZmVyVG9V
cGRhdGVEcmFnKGRyYWdEYXRhLCBtYWluRnJhbWUtPnNldHRpbmdzKCksIG1fZG9jdW1lbnRVbmRl
ck1vdXNlLmNvcHlSZWYoKSk7Ci0KLSAgICBQbGF0Zm9ybU1vdXNlRXZlbnQgZXZlbnQgPSBjcmVh
dGVNb3VzZUV2ZW50KGRyYWdEYXRhKTsKLSAgICBpZiAoIW1haW5GcmFtZS0+ZXZlbnRIYW5kbGVy
KCkudXBkYXRlRHJhZ0FuZERyb3AoZXZlbnQsIGRhdGFUcmFuc2ZlcikpIHsKLSAgICAgICAgZGF0
YVRyYW5zZmVyLT5tYWtlSW52YWxpZEZvclNlY3VyaXR5KCk7CisgICAgRHJhZ09wZXJhdGlvbiBz
b3VyY2VPcGVyYXRpb24gPSBkcmFnRGF0YS5kcmFnZ2luZ1NvdXJjZU9wZXJhdGlvbk1hc2soKTsK
KyAgICBhdXRvIHRhcmdldFJlc3BvbnNlID0gbWFpbkZyYW1lLT5ldmVudEhhbmRsZXIoKS51cGRh
dGVEcmFnQW5kRHJvcChjcmVhdGVNb3VzZUV2ZW50KGRyYWdEYXRhKSwgWyZkcmFnRGF0YV0oKSB7
IHJldHVybiBQYXN0ZWJvYXJkOjpjcmVhdGVGb3JEcmFnQW5kRHJvcChkcmFnRGF0YSk7IH0sIHNv
dXJjZU9wZXJhdGlvbiwgZHJhZ0RhdGEuY29udGFpbnNGaWxlcygpKTsKKyAgICBpZiAoIXRhcmdl
dFJlc3BvbnNlLmFjY2VwdCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KIAotICAgIG9w
ZXJhdGlvbiA9IGRhdGFUcmFuc2Zlci0+ZGVzdGluYXRpb25PcGVyYXRpb24oKTsKLSAgICBEcmFn
T3BlcmF0aW9uIHNyY09wTWFzayA9IGRyYWdEYXRhLmRyYWdnaW5nU291cmNlT3BlcmF0aW9uTWFz
aygpOwotICAgIGlmIChkYXRhVHJhbnNmZXItPmRyb3BFZmZlY3RJc1VuaW5pdGlhbGl6ZWQoKSkK
LSAgICAgICAgb3BlcmF0aW9uID0gZGVmYXVsdE9wZXJhdGlvbkZvckRyYWcoc3JjT3BNYXNrKTsK
LSAgICBlbHNlIGlmICghKHNyY09wTWFzayAmIG9wZXJhdGlvbikpIHsKLSAgICAgICAgLy8gVGhl
IGVsZW1lbnQgcGlja2VkIGFuIG9wZXJhdGlvbiB3aGljaCBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRo
ZSBzb3VyY2UKKyAgICBpZiAoIXRhcmdldFJlc3BvbnNlLm9wZXJhdGlvbikKKyAgICAgICAgb3Bl
cmF0aW9uID0gZGVmYXVsdE9wZXJhdGlvbkZvckRyYWcoc291cmNlT3BlcmF0aW9uKTsKKyAgICBl
bHNlIGlmICghKHNvdXJjZU9wZXJhdGlvbiAmIHRhcmdldFJlc3BvbnNlLm9wZXJhdGlvbi52YWx1
ZSgpKSkgLy8gVGhlIGVsZW1lbnQgcGlja2VkIGFuIG9wZXJhdGlvbiB3aGljaCBpcyBub3Qgc3Vw
cG9ydGVkIGJ5IHRoZSBzb3VyY2UKICAgICAgICAgb3BlcmF0aW9uID0gRHJhZ09wZXJhdGlvbk5v
bmU7Ci0gICAgfQorICAgIGVsc2UKKyAgICAgICAgb3BlcmF0aW9uID0gdGFyZ2V0UmVzcG9uc2Uu
b3BlcmF0aW9uLnZhbHVlKCk7CiAKLSAgICBkYXRhVHJhbnNmZXItPm1ha2VJbnZhbGlkRm9yU2Vj
dXJpdHkoKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGFn
ZS9FdmVudEhhbmRsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRXZl
bnRIYW5kbGVyLmNwcAkocmV2aXNpb24gMjIzMDIxKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9F
dmVudEhhbmRsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTgwLDcgKzIxODAsNyBAQCBib29s
IEV2ZW50SGFuZGxlcjo6aGFuZGxlUGFzdGVHbG9iYWxTZWxlCiAKICNpZiBFTkFCTEUoRFJBR19T
VVBQT1JUKQogCi1ib29sIEV2ZW50SGFuZGxlcjo6ZGlzcGF0Y2hEcmFnRXZlbnQoY29uc3QgQXRv
bWljU3RyaW5nJiBldmVudFR5cGUsIEVsZW1lbnQmIGRyYWdUYXJnZXQsIGNvbnN0IFBsYXRmb3Jt
TW91c2VFdmVudCYgZXZlbnQsIERhdGFUcmFuc2ZlciogZGF0YVRyYW5zZmVyKQorYm9vbCBFdmVu
dEhhbmRsZXI6OmRpc3BhdGNoRHJhZ0V2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBl
LCBFbGVtZW50JiBkcmFnVGFyZ2V0LCBjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIGV2ZW50LCBE
YXRhVHJhbnNmZXImIGRhdGFUcmFuc2ZlcikKIHsKICAgICBSZWY8RnJhbWU+IHByb3RlY3RlZEZy
YW1lKG1fZnJhbWUpOwogICAgIEZyYW1lVmlldyogdmlldyA9IG1fZnJhbWUudmlldygpOwpAQCAt
MjE5Nyw3ICsyMTk3LDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmRpc3BhdGNoRHJhZ0V2ZW50KGNv
bgogICAgICAgICBldmVudC5tb3ZlbWVudERlbHRhKCkueCgpLCBldmVudC5tb3ZlbWVudERlbHRh
KCkueSgpLAogI2VuZGlmCiAgICAgICAgIGV2ZW50LmN0cmxLZXkoKSwgZXZlbnQuYWx0S2V5KCks
IGV2ZW50LnNoaWZ0S2V5KCksIGV2ZW50Lm1ldGFLZXkoKSwKLSAgICAgICAgMCwgMCwgZXZlbnQu
Zm9yY2UoKSwgTm9UYXAsIGRhdGFUcmFuc2Zlcik7CisgICAgICAgIDAsIDAsIGV2ZW50LmZvcmNl
KCksIE5vVGFwLCAmZGF0YVRyYW5zZmVyKTsKIAogICAgIGRyYWdUYXJnZXQuZGlzcGF0Y2hFdmVu
dChtZSk7CiAgICAgcmV0dXJuIG1lLT5kZWZhdWx0UHJldmVudGVkKCk7CkBAIC0yMjQ4LDEwICsy
MjQ4LDkgQEAgc3RhdGljIGJvb2wgaGFzRHJvcFpvbmVUeXBlKERhdGFUcmFuc2ZlcgogICAgIHJl
dHVybiBmYWxzZTsKIH0KIAotc3RhdGljIGJvb2wgZmluZERyb3Bab25lKE5vZGUqIHRhcmdldCwg
RGF0YVRyYW5zZmVyKiBkYXRhVHJhbnNmZXIpCitzdGF0aWMgYm9vbCBmaW5kRHJvcFpvbmUoTm9k
ZSYgdGFyZ2V0LCBEYXRhVHJhbnNmZXImIGRhdGFUcmFuc2ZlcikKIHsKLSAgICBBU1NFUlQodGFy
Z2V0KTsKLSAgICBFbGVtZW50KiBlbGVtZW50ID0gaXM8RWxlbWVudD4oKnRhcmdldCkgPyBkb3du
Y2FzdDxFbGVtZW50Pih0YXJnZXQpIDogdGFyZ2V0LT5wYXJlbnRFbGVtZW50KCk7CisgICAgUmVm
UHRyPEVsZW1lbnQ+IGVsZW1lbnQgPSBpczxFbGVtZW50Pih0YXJnZXQpID8gJmRvd25jYXN0PEVs
ZW1lbnQ+KHRhcmdldCkgOiB0YXJnZXQucGFyZW50RWxlbWVudCgpOwogICAgIGZvciAoOyBlbGVt
ZW50OyBlbGVtZW50ID0gZWxlbWVudC0+cGFyZW50RWxlbWVudCgpKSB7CiAgICAgICAgIFNwYWNl
U3BsaXRTdHJpbmcga2V5d29yZHMoZWxlbWVudC0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXph
dGlvbih3ZWJraXRkcm9wem9uZUF0dHIpLCB0cnVlKTsKICAgICAgICAgYm9vbCBtYXRjaGVkID0g
ZmFsc2U7CkBAIC0yMjYyLDI2ICsyMjYxLDM2IEBAIHN0YXRpYyBib29sIGZpbmREcm9wWm9uZShO
b2RlKiB0YXJnZXQsIEQKICAgICAgICAgICAgICAgICBpZiAoZHJhZ09wZXJhdGlvbiA9PSBEcmFn
T3BlcmF0aW9uTm9uZSkKICAgICAgICAgICAgICAgICAgICAgZHJhZ09wZXJhdGlvbiA9IG9wOwog
ICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgbWF0Y2hlZCA9IG1hdGNoZWQgfHwg
aGFzRHJvcFpvbmVUeXBlKCpkYXRhVHJhbnNmZXIsIGtleXdvcmRzW2ldLnN0cmluZygpKTsKKyAg
ICAgICAgICAgICAgICBtYXRjaGVkID0gbWF0Y2hlZCB8fCBoYXNEcm9wWm9uZVR5cGUoZGF0YVRy
YW5zZmVyLCBrZXl3b3Jkc1tpXS5zdHJpbmcoKSk7CiAgICAgICAgICAgICBpZiAobWF0Y2hlZCAm
JiBkcmFnT3BlcmF0aW9uICE9IERyYWdPcGVyYXRpb25Ob25lKQogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CiAgICAgICAgIGlmIChtYXRjaGVkKSB7Ci0gICAgICAgICAgICBkYXRh
VHJhbnNmZXItPnNldERyb3BFZmZlY3QoY29udmVydERyYWdPcGVyYXRpb25Ub0Ryb3Bab25lT3Bl
cmF0aW9uKGRyYWdPcGVyYXRpb24pKTsKKyAgICAgICAgICAgIGRhdGFUcmFuc2Zlci5zZXREcm9w
RWZmZWN0KGNvbnZlcnREcmFnT3BlcmF0aW9uVG9Ecm9wWm9uZU9wZXJhdGlvbihkcmFnT3BlcmF0
aW9uKSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KICAgICBy
ZXR1cm4gZmFsc2U7CiB9Ci0gICAgCi1ib29sIEV2ZW50SGFuZGxlcjo6dXBkYXRlRHJhZ0FuZERy
b3AoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBldmVudCwgRGF0YVRyYW5zZmVyJiBkYXRhVHJh
bnNmZXIpCi17Ci0gICAgUmVmPEZyYW1lPiBwcm90ZWN0ZWRGcmFtZShtX2ZyYW1lKTsKIAotICAg
IGJvb2wgYWNjZXB0ID0gZmFsc2U7CitFdmVudEhhbmRsZXI6OkRyYWdUYXJnZXRSZXNwb25zZSBF
dmVudEhhbmRsZXI6OmRpc3BhdGNoRHJhZ0VudGVyT3JEcmFnT3ZlckV2ZW50KGNvbnN0IEF0b21p
Y1N0cmluZyYgZXZlbnRUeXBlLCBFbGVtZW50JiB0YXJnZXQsIGNvbnN0IFBsYXRmb3JtTW91c2VF
dmVudCYgZXZlbnQsCisgICAgc3RkOjp1bmlxdWVfcHRyPFBhc3RlYm9hcmQ+JiYgcGFzdGVib2Fy
ZCwgRHJhZ09wZXJhdGlvbiBzb3VyY2VPcGVyYXRpb24sIGJvb2wgZHJhZ2dpbmdGaWxlcykKK3sK
KyAgICBhdXRvIGRhdGFUcmFuc2ZlciA9IERhdGFUcmFuc2Zlcjo6Y3JlYXRlRm9yVXBkYXRpbmdE
cm9wVGFyZ2V0KHRhcmdldC5kb2N1bWVudCgpLCBXVEZNb3ZlKHBhc3RlYm9hcmQpLCBzb3VyY2VP
cGVyYXRpb24sIGRyYWdnaW5nRmlsZXMpOworICAgIGJvb2wgYWNjZXB0ID0gZGlzcGF0Y2hEcmFn
RXZlbnQoZXZlbnRUeXBlLCB0YXJnZXQsIGV2ZW50LCBkYXRhVHJhbnNmZXIuZ2V0KCkpOworICAg
IGlmICghYWNjZXB0KQorICAgICAgICBhY2NlcHQgPSBmaW5kRHJvcFpvbmUodGFyZ2V0LCBkYXRh
VHJhbnNmZXIpOworICAgIGRhdGFUcmFuc2Zlci0+bWFrZUludmFsaWRGb3JTZWN1cml0eSgpOwor
ICAgIGlmIChhY2NlcHQgJiYgIWRhdGFUcmFuc2Zlci0+ZHJvcEVmZmVjdElzVW5pbml0aWFsaXpl
ZCgpKQorICAgICAgICByZXR1cm4geyB0cnVlLCBkYXRhVHJhbnNmZXItPmRlc3RpbmF0aW9uT3Bl
cmF0aW9uKCkgfTsKKyAgICByZXR1cm4geyBhY2NlcHQsIHN0ZDo6bnVsbG9wdCB9OworfQogCitF
dmVudEhhbmRsZXI6OkRyYWdUYXJnZXRSZXNwb25zZSBFdmVudEhhbmRsZXI6OnVwZGF0ZURyYWdB
bmREcm9wKGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgZXZlbnQsIGNvbnN0IHN0ZDo6ZnVuY3Rp
b248c3RkOjp1bmlxdWVfcHRyPFBhc3RlYm9hcmQ+KCk+JiBtYWtlUGFzdGVib2FyZCwgRHJhZ09w
ZXJhdGlvbiBzb3VyY2VPcGVyYXRpb24sIGJvb2wgZHJhZ2dpbmdGaWxlcykKK3sKKyAgICBSZWY8
RnJhbWU+IHByb3RlY3RlZEZyYW1lKG1fZnJhbWUpOwogICAgIGlmICghbV9mcmFtZS52aWV3KCkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIEhpdFRl
c3RSZXF1ZXN0IHJlcXVlc3QoSGl0VGVzdFJlcXVlc3Q6OlJlYWRPbmx5IHwgSGl0VGVzdFJlcXVl
c3Q6OkRpc2FsbG93VXNlckFnZW50U2hhZG93Q29udGVudCk7CiAgICAgTW91c2VFdmVudFdpdGhI
aXRUZXN0UmVzdWx0cyBtb3VzZUV2ZW50ID0gcHJlcGFyZU1vdXNlRXZlbnQocmVxdWVzdCwgZXZl
bnQpOwpAQCAtMjI5Nyw2ICsyMzA2LDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6OnVwZGF0ZURyYWdB
bmREcm9wKGNvbgogCiAgICAgbV9hdXRvc2Nyb2xsQ29udHJvbGxlci0+dXBkYXRlRHJhZ0FuZERy
b3AobmV3VGFyZ2V0LmdldCgpLCBldmVudC5wb3NpdGlvbigpLCBldmVudC50aW1lc3RhbXAoKSk7
CiAKKyAgICBEcmFnVGFyZ2V0UmVzcG9uc2UgcmVzcG9uc2U7CiAgICAgaWYgKG1fZHJhZ1Rhcmdl
dCAhPSBuZXdUYXJnZXQpIHsKICAgICAgICAgLy8gRklYTUU6IHRoaXMgb3JkZXJpbmcgd2FzIGV4
cGxpY2l0bHkgY2hvc2VuIHRvIG1hdGNoIFdpbklFLiBIb3dldmVyLAogICAgICAgICAvLyBpdCBp
cyBzb21ldGltZXMgaW5jb3JyZWN0IHdoZW4gZHJhZ2dpbmcgd2l0aGluIHN1YmZyYW1lcywgYXMg
c2VlbiB3aXRoCkBAIC0yMzA2LDIzICsyMzE2LDI1IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjp1cGRh
dGVEcmFnQW5kRHJvcChjb24KICAgICAgICAgRnJhbWUqIHRhcmdldEZyYW1lOwogICAgICAgICBp
ZiAodGFyZ2V0SXNGcmFtZShuZXdUYXJnZXQuZ2V0KCksIHRhcmdldEZyYW1lKSkgewogICAgICAg
ICAgICAgaWYgKHRhcmdldEZyYW1lKQotICAgICAgICAgICAgICAgIGFjY2VwdCA9IHRhcmdldEZy
YW1lLT5ldmVudEhhbmRsZXIoKS51cGRhdGVEcmFnQW5kRHJvcChldmVudCwgZGF0YVRyYW5zZmVy
KTsKKyAgICAgICAgICAgICAgICByZXNwb25zZSA9IHRhcmdldEZyYW1lLT5ldmVudEhhbmRsZXIo
KS51cGRhdGVEcmFnQW5kRHJvcChldmVudCwgbWFrZVBhc3RlYm9hcmQsIHNvdXJjZU9wZXJhdGlv
biwgZHJhZ2dpbmdGaWxlcyk7CiAgICAgICAgIH0gZWxzZSBpZiAobmV3VGFyZ2V0KSB7CiAgICAg
ICAgICAgICAvLyBBcyBwZXIgc2VjdGlvbiA3LjkuNCBvZiB0aGUgSFRNTCA1IHNwZWMuLCB3ZSBt
dXN0IGFsd2F5cyBmaXJlIGEgZHJhZyBldmVudCBiZWZvcmUgZmlyaW5nIGEgZHJhZ2VudGVyLCBk
cmFnbGVhdmUsIG9yIGRyYWdvdmVyIGV2ZW50LgogICAgICAgICAgICAgaWYgKGRyYWdTdGF0ZSgp
LnNvdXJjZSAmJiBkcmFnU3RhdGUoKS5zaG91bGREaXNwYXRjaEV2ZW50cykgewogICAgICAgICAg
ICAgICAgIC8vIGZvciBub3cgd2UgZG9uJ3QgY2FyZSBpZiBldmVudCBoYW5kbGVyIGNhbmNlbHMg
ZGVmYXVsdCBiZWhhdmlvciwgc2luY2UgdGhlcmUgaXMgbm9uZQogICAgICAgICAgICAgICAgIGRp
c3BhdGNoRHJhZ1NyY0V2ZW50KGV2ZW50TmFtZXMoKS5kcmFnRXZlbnQsIGV2ZW50KTsKICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGFjY2VwdCA9IGRpc3BhdGNoRHJhZ0V2ZW50KGV2ZW50TmFt
ZXMoKS5kcmFnZW50ZXJFdmVudCwgKm5ld1RhcmdldCwgZXZlbnQsICZkYXRhVHJhbnNmZXIpOwot
ICAgICAgICAgICAgaWYgKCFhY2NlcHQpCi0gICAgICAgICAgICAgICAgYWNjZXB0ID0gZmluZERy
b3Bab25lKG5ld1RhcmdldC5nZXQoKSwgJmRhdGFUcmFuc2Zlcik7CisgICAgICAgICAgICByZXNw
b25zZSA9IGRpc3BhdGNoRHJhZ0VudGVyT3JEcmFnT3ZlckV2ZW50KGV2ZW50TmFtZXMoKS5kcmFn
ZW50ZXJFdmVudCwgKm5ld1RhcmdldCwgZXZlbnQsIG1ha2VQYXN0ZWJvYXJkKCksIHNvdXJjZU9w
ZXJhdGlvbiwgZHJhZ2dpbmdGaWxlcyk7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAodGFyZ2V0
SXNGcmFtZShtX2RyYWdUYXJnZXQuZ2V0KCksIHRhcmdldEZyYW1lKSkgeworICAgICAgICAgICAg
Ly8gRklYTUU6IFJlY3Vyc2luZyBhZ2FpbiBoZXJlIGRvZXNuJ3QgbWFrZSBzZW5zZSBpZiB0aGUg
bmV3VGFyZ2V0IGFuZCBtX2RyYWdUYXJnZXQgd2VyZSBpbiB0aGUgc2FtZSBmcmFtZS4KICAgICAg
ICAgICAgIGlmICh0YXJnZXRGcmFtZSkKLSAgICAgICAgICAgICAgICBhY2NlcHQgPSB0YXJnZXRG
cmFtZS0+ZXZlbnRIYW5kbGVyKCkudXBkYXRlRHJhZ0FuZERyb3AoZXZlbnQsIGRhdGFUcmFuc2Zl
cik7Ci0gICAgICAgIH0gZWxzZSBpZiAobV9kcmFnVGFyZ2V0KQotICAgICAgICAgICAgZGlzcGF0
Y2hEcmFnRXZlbnQoZXZlbnROYW1lcygpLmRyYWdsZWF2ZUV2ZW50LCAqbV9kcmFnVGFyZ2V0LCBl
dmVudCwgJmRhdGFUcmFuc2Zlcik7CisgICAgICAgICAgICAgICAgcmVzcG9uc2UgPSB0YXJnZXRG
cmFtZS0+ZXZlbnRIYW5kbGVyKCkudXBkYXRlRHJhZ0FuZERyb3AoZXZlbnQsIG1ha2VQYXN0ZWJv
YXJkLCBzb3VyY2VPcGVyYXRpb24sIGRyYWdnaW5nRmlsZXMpOworICAgICAgICB9IGVsc2UgaWYg
KG1fZHJhZ1RhcmdldCkgeworICAgICAgICAgICAgYXV0byBkYXRhVHJhbnNmZXIgPSBEYXRhVHJh
bnNmZXI6OmNyZWF0ZUZvclVwZGF0aW5nRHJvcFRhcmdldChtX2RyYWdUYXJnZXQtPmRvY3VtZW50
KCksIG1ha2VQYXN0ZWJvYXJkKCksIHNvdXJjZU9wZXJhdGlvbiwgZHJhZ2dpbmdGaWxlcyk7Cisg
ICAgICAgICAgICBkaXNwYXRjaERyYWdFdmVudChldmVudE5hbWVzKCkuZHJhZ2xlYXZlRXZlbnQs
ICptX2RyYWdUYXJnZXQsIGV2ZW50LCBkYXRhVHJhbnNmZXIuZ2V0KCkpOworICAgICAgICAgICAg
ZGF0YVRyYW5zZmVyLT5tYWtlSW52YWxpZEZvclNlY3VyaXR5KCk7CisgICAgICAgIH0KIAogICAg
ICAgICBpZiAobmV3VGFyZ2V0KSB7CiAgICAgICAgICAgICAvLyBXZSBkbyBub3QgZXhwbGljaXRs
eSBjYWxsIGRpc3BhdGNoRHJhZ0V2ZW50IGhlcmUgYmVjYXVzZSBpdCBjb3VsZCB1bHRpbWF0ZWx5
IHJlc3VsdCBpbiB0aGUgYXBwZWFyYW5jZSB0aGF0CkBAIC0yMzMzLDQwICsyMzQ1LDQxIEBAIGJv
b2wgRXZlbnRIYW5kbGVyOjp1cGRhdGVEcmFnQW5kRHJvcChjb24KICAgICAgICAgRnJhbWUqIHRh
cmdldEZyYW1lOwogICAgICAgICBpZiAodGFyZ2V0SXNGcmFtZShuZXdUYXJnZXQuZ2V0KCksIHRh
cmdldEZyYW1lKSkgewogICAgICAgICAgICAgaWYgKHRhcmdldEZyYW1lKQotICAgICAgICAgICAg
ICAgIGFjY2VwdCA9IHRhcmdldEZyYW1lLT5ldmVudEhhbmRsZXIoKS51cGRhdGVEcmFnQW5kRHJv
cChldmVudCwgZGF0YVRyYW5zZmVyKTsKKyAgICAgICAgICAgICAgICByZXNwb25zZSA9IHRhcmdl
dEZyYW1lLT5ldmVudEhhbmRsZXIoKS51cGRhdGVEcmFnQW5kRHJvcChldmVudCwgbWFrZVBhc3Rl
Ym9hcmQsIHNvdXJjZU9wZXJhdGlvbiwgZHJhZ2dpbmdGaWxlcyk7CiAgICAgICAgIH0gZWxzZSBp
ZiAobmV3VGFyZ2V0KSB7CiAgICAgICAgICAgICAvLyBOb3RlLCB3aGVuIGRlYWxpbmcgd2l0aCBz
dWItZnJhbWVzLCB3ZSBtYXkgbmVlZCB0byBmaXJlIG9ubHkgYSBkcmFnb3ZlciBldmVudCBhcyBh
IGRyYWcgZXZlbnQgbWF5IGhhdmUgYmVlbiBmaXJlZCBlYXJsaWVyLgogICAgICAgICAgICAgaWYg
KCFtX3Nob3VsZE9ubHlGaXJlRHJhZ092ZXJFdmVudCAmJiBkcmFnU3RhdGUoKS5zb3VyY2UgJiYg
ZHJhZ1N0YXRlKCkuc2hvdWxkRGlzcGF0Y2hFdmVudHMpIHsKICAgICAgICAgICAgICAgICAvLyBm
b3Igbm93IHdlIGRvbid0IGNhcmUgaWYgZXZlbnQgaGFuZGxlciBjYW5jZWxzIGRlZmF1bHQgYmVo
YXZpb3IsIHNpbmNlIHRoZXJlIGlzIG5vbmUKICAgICAgICAgICAgICAgICBkaXNwYXRjaERyYWdT
cmNFdmVudChldmVudE5hbWVzKCkuZHJhZ0V2ZW50LCBldmVudCk7CiAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBhY2NlcHQgPSBkaXNwYXRjaERyYWdFdmVudChldmVudE5hbWVzKCkuZHJhZ292
ZXJFdmVudCwgKm5ld1RhcmdldCwgZXZlbnQsICZkYXRhVHJhbnNmZXIpOwotICAgICAgICAgICAg
aWYgKCFhY2NlcHQpCi0gICAgICAgICAgICAgICAgYWNjZXB0ID0gZmluZERyb3Bab25lKG5ld1Rh
cmdldC5nZXQoKSwgJmRhdGFUcmFuc2Zlcik7CisgICAgICAgICAgICByZXNwb25zZSA9IGRpc3Bh
dGNoRHJhZ0VudGVyT3JEcmFnT3ZlckV2ZW50KGV2ZW50TmFtZXMoKS5kcmFnb3ZlckV2ZW50LCAq
bmV3VGFyZ2V0LCBldmVudCwgbWFrZVBhc3RlYm9hcmQoKSwgc291cmNlT3BlcmF0aW9uLCBkcmFn
Z2luZ0ZpbGVzKTsKICAgICAgICAgICAgIG1fc2hvdWxkT25seUZpcmVEcmFnT3ZlckV2ZW50ID0g
ZmFsc2U7CiAgICAgICAgIH0KICAgICB9CiAgICAgbV9kcmFnVGFyZ2V0ID0gV1RGTW92ZShuZXdU
YXJnZXQpOwotICAgIHJldHVybiBhY2NlcHQ7CisgICAgcmV0dXJuIHJlc3BvbnNlOwogfQogCi12
b2lkIEV2ZW50SGFuZGxlcjo6Y2FuY2VsRHJhZ0FuZERyb3AoY29uc3QgUGxhdGZvcm1Nb3VzZUV2
ZW50JiBldmVudCwgRGF0YVRyYW5zZmVyJiBkYXRhVHJhbnNmZXIpCit2b2lkIEV2ZW50SGFuZGxl
cjo6Y2FuY2VsRHJhZ0FuZERyb3AoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBldmVudCwgc3Rk
Ojp1bmlxdWVfcHRyPFBhc3RlYm9hcmQ+JiYgcGFzdGVib2FyZCwgRHJhZ09wZXJhdGlvbiBzb3Vy
Y2VPcGVyYXRpb24sIGJvb2wgZHJhZ2dpbmdGaWxlcykKIHsKICAgICBSZWY8RnJhbWU+IHByb3Rl
Y3RlZEZyYW1lKG1fZnJhbWUpOwogCiAgICAgRnJhbWUqIHRhcmdldEZyYW1lOwogICAgIGlmICh0
YXJnZXRJc0ZyYW1lKG1fZHJhZ1RhcmdldC5nZXQoKSwgdGFyZ2V0RnJhbWUpKSB7CiAgICAgICAg
IGlmICh0YXJnZXRGcmFtZSkKLSAgICAgICAgICAgIHRhcmdldEZyYW1lLT5ldmVudEhhbmRsZXIo
KS5jYW5jZWxEcmFnQW5kRHJvcChldmVudCwgZGF0YVRyYW5zZmVyKTsKKyAgICAgICAgICAgIHRh
cmdldEZyYW1lLT5ldmVudEhhbmRsZXIoKS5jYW5jZWxEcmFnQW5kRHJvcChldmVudCwgV1RGTW92
ZShwYXN0ZWJvYXJkKSwgc291cmNlT3BlcmF0aW9uLCBkcmFnZ2luZ0ZpbGVzKTsKICAgICB9IGVs
c2UgaWYgKG1fZHJhZ1RhcmdldCkgewogICAgICAgICBpZiAoZHJhZ1N0YXRlKCkuc291cmNlICYm
IGRyYWdTdGF0ZSgpLnNob3VsZERpc3BhdGNoRXZlbnRzKQogICAgICAgICAgICAgZGlzcGF0Y2hE
cmFnU3JjRXZlbnQoZXZlbnROYW1lcygpLmRyYWdFdmVudCwgZXZlbnQpOwotICAgICAgICBkaXNw
YXRjaERyYWdFdmVudChldmVudE5hbWVzKCkuZHJhZ2xlYXZlRXZlbnQsICptX2RyYWdUYXJnZXQs
IGV2ZW50LCAmZGF0YVRyYW5zZmVyKTsKKworICAgICAgICBhdXRvIGRhdGFUcmFuc2ZlciA9IERh
dGFUcmFuc2Zlcjo6Y3JlYXRlRm9yVXBkYXRpbmdEcm9wVGFyZ2V0KG1fZHJhZ1RhcmdldC0+ZG9j
dW1lbnQoKSwgV1RGTW92ZShwYXN0ZWJvYXJkKSwgc291cmNlT3BlcmF0aW9uLCBkcmFnZ2luZ0Zp
bGVzKTsKKyAgICAgICAgZGlzcGF0Y2hEcmFnRXZlbnQoZXZlbnROYW1lcygpLmRyYWdsZWF2ZUV2
ZW50LCAqbV9kcmFnVGFyZ2V0LCBldmVudCwgZGF0YVRyYW5zZmVyLmdldCgpKTsKKyAgICAgICAg
ZGF0YVRyYW5zZmVyLT5tYWtlSW52YWxpZEZvclNlY3VyaXR5KCk7CiAgICAgfQogICAgIGNsZWFy
RHJhZ1N0YXRlKCk7CiB9CiAKLWJvb2wgRXZlbnRIYW5kbGVyOjpwZXJmb3JtRHJhZ0FuZERyb3Ao
Y29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBldmVudCwgRGF0YVRyYW5zZmVyJiBkYXRhVHJhbnNm
ZXIpCitib29sIEV2ZW50SGFuZGxlcjo6cGVyZm9ybURyYWdBbmREcm9wKGNvbnN0IFBsYXRmb3Jt
TW91c2VFdmVudCYgZXZlbnQsIHN0ZDo6dW5pcXVlX3B0cjxQYXN0ZWJvYXJkPiYmIHBhc3RlYm9h
cmQsIERyYWdPcGVyYXRpb24gc291cmNlT3BlcmF0aW9uLCBib29sIGRyYWdnaW5nRmlsZXMpCiB7
CiAgICAgUmVmPEZyYW1lPiBwcm90ZWN0ZWRGcmFtZShtX2ZyYW1lKTsKIApAQCAtMjM3NCw5ICsy
Mzg3LDEyIEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpwZXJmb3JtRHJhZ0FuZERyb3AoY28KICAgICBi
b29sIHByZXZlbnRlZERlZmF1bHQgPSBmYWxzZTsKICAgICBpZiAodGFyZ2V0SXNGcmFtZShtX2Ry
YWdUYXJnZXQuZ2V0KCksIHRhcmdldEZyYW1lKSkgewogICAgICAgICBpZiAodGFyZ2V0RnJhbWUp
Ci0gICAgICAgICAgICBwcmV2ZW50ZWREZWZhdWx0ID0gdGFyZ2V0RnJhbWUtPmV2ZW50SGFuZGxl
cigpLnBlcmZvcm1EcmFnQW5kRHJvcChldmVudCwgZGF0YVRyYW5zZmVyKTsKLSAgICB9IGVsc2Ug
aWYgKG1fZHJhZ1RhcmdldCkKLSAgICAgICAgcHJldmVudGVkRGVmYXVsdCA9IGRpc3BhdGNoRHJh
Z0V2ZW50KGV2ZW50TmFtZXMoKS5kcm9wRXZlbnQsICptX2RyYWdUYXJnZXQsIGV2ZW50LCAmZGF0
YVRyYW5zZmVyKTsKKyAgICAgICAgICAgIHByZXZlbnRlZERlZmF1bHQgPSB0YXJnZXRGcmFtZS0+
ZXZlbnRIYW5kbGVyKCkucGVyZm9ybURyYWdBbmREcm9wKGV2ZW50LCBXVEZNb3ZlKHBhc3RlYm9h
cmQpLCBzb3VyY2VPcGVyYXRpb24sIGRyYWdnaW5nRmlsZXMpOworICAgIH0gZWxzZSBpZiAobV9k
cmFnVGFyZ2V0KSB7CisgICAgICAgIGF1dG8gZGF0YVRyYW5zZmVyID0gRGF0YVRyYW5zZmVyOjpj
cmVhdGVGb3JEcm9wKFdURk1vdmUocGFzdGVib2FyZCksIHNvdXJjZU9wZXJhdGlvbiwgZHJhZ2dp
bmdGaWxlcyk7CisgICAgICAgIHByZXZlbnRlZERlZmF1bHQgPSBkaXNwYXRjaERyYWdFdmVudChl
dmVudE5hbWVzKCkuZHJvcEV2ZW50LCAqbV9kcmFnVGFyZ2V0LCBldmVudCwgZGF0YVRyYW5zZmVy
KTsKKyAgICAgICAgZGF0YVRyYW5zZmVyLT5tYWtlSW52YWxpZEZvclNlY3VyaXR5KCk7CisgICAg
fQogICAgIGNsZWFyRHJhZ1N0YXRlKCk7CiAgICAgcmV0dXJuIHByZXZlbnRlZERlZmF1bHQ7CiB9
CkBAIC0zNTQ1LDEyICszNTYxLDEzIEBAIHZvaWQgRXZlbnRIYW5kbGVyOjp1cGRhdGVEcmFnU3Rh
dGVBZnRlckUKIC8vIFJldHVybiB2YWx1ZSBpbmRpY2F0ZXMgaWYgd2Ugc2hvdWxkIGNvbnRpbnVl
ICJkZWZhdWx0IHByb2Nlc3NpbmciLCBpLmUuLCB3aGV0aGVyIGV2ZW50IGhhbmRsZXIgY2FuY2Vs
ZWQuCiBib29sIEV2ZW50SGFuZGxlcjo6ZGlzcGF0Y2hEcmFnU3JjRXZlbnQoY29uc3QgQXRvbWlj
U3RyaW5nJiBldmVudFR5cGUsIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgZXZlbnQpCiB7Ci0g
ICAgcmV0dXJuICFkaXNwYXRjaERyYWdFdmVudChldmVudFR5cGUsICpkcmFnU3RhdGUoKS5zb3Vy
Y2UsIGV2ZW50LCBkcmFnU3RhdGUoKS5kYXRhVHJhbnNmZXIuZ2V0KCkpOworICAgIEFTU0VSVChk
cmFnU3RhdGUoKS5kYXRhVHJhbnNmZXIpOworICAgIHJldHVybiAhZGlzcGF0Y2hEcmFnRXZlbnQo
ZXZlbnRUeXBlLCAqZHJhZ1N0YXRlKCkuc291cmNlLCBldmVudCwgKmRyYWdTdGF0ZSgpLmRhdGFU
cmFuc2Zlcik7CiB9CiAKIGJvb2wgRXZlbnRIYW5kbGVyOjpkaXNwYXRjaERyYWdTdGFydEV2ZW50
T25Tb3VyY2VFbGVtZW50KERhdGFUcmFuc2ZlciYgZGF0YVRyYW5zZmVyKQogewotICAgIHJldHVy
biAhZGlzcGF0Y2hEcmFnRXZlbnQoZXZlbnROYW1lcygpLmRyYWdzdGFydEV2ZW50LCAqZHJhZ1N0
YXRlKCkuc291cmNlLCBtX21vdXNlRG93biwgJmRhdGFUcmFuc2ZlcikgJiYgIW1fZnJhbWUuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNJblBhc3N3b3JkRmllbGQoKTsKKyAgICByZXR1cm4gIWRp
c3BhdGNoRHJhZ0V2ZW50KGV2ZW50TmFtZXMoKS5kcmFnc3RhcnRFdmVudCwgKmRyYWdTdGF0ZSgp
LnNvdXJjZSwgbV9tb3VzZURvd24sIGRhdGFUcmFuc2ZlcikgJiYgIW1fZnJhbWUuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCkuaXNJblBhc3N3b3JkRmllbGQoKTsKIH0KICAgICAKIHN0YXRpYyBib29s
IEV4YWN0bHlPbmVCaXRTZXQoRHJhZ1NvdXJjZUFjdGlvbiBuKQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGFnZS9FdmVudEhhbmRsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdl
L0V2ZW50SGFuZGxlci5oCShyZXZpc2lvbiAyMjMwMjEpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdl
L0V2ZW50SGFuZGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC03NSw2ICs3NSw3IEBAIGNsYXNzIEhp
dFRlc3RSZXN1bHQ7CiBjbGFzcyBLZXlib2FyZEV2ZW50OwogY2xhc3MgTW91c2VFdmVudFdpdGhI
aXRUZXN0UmVzdWx0czsKIGNsYXNzIE5vZGU7CitjbGFzcyBQYXN0ZWJvYXJkOwogY2xhc3MgUGxh
dGZvcm1HZXN0dXJlRXZlbnQ7CiBjbGFzcyBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ7CiBjbGFzcyBQ
bGF0Zm9ybVRvdWNoRXZlbnQ7CkBAIC0xNTUsOSArMTU2LDEzIEBAIHB1YmxpYzoKICAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIHNldENhcHR1cmluZ01vdXNlRXZlbnRzRWxlbWVudChFbGVtZW50Kik7
CiAKICNpZiBFTkFCTEUoRFJBR19TVVBQT1JUKQotICAgIGJvb2wgdXBkYXRlRHJhZ0FuZERyb3Ao
Y29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiwgRGF0YVRyYW5zZmVyJik7Ci0gICAgdm9pZCBjYW5j
ZWxEcmFnQW5kRHJvcChjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmLCBEYXRhVHJhbnNmZXImKTsK
LSAgICBib29sIHBlcmZvcm1EcmFnQW5kRHJvcChjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmLCBE
YXRhVHJhbnNmZXImKTsKKyAgICBzdHJ1Y3QgRHJhZ1RhcmdldFJlc3BvbnNlIHsKKyAgICAgICAg
Ym9vbCBhY2NlcHQgeyBmYWxzZSB9OworICAgICAgICBzdGQ6Om9wdGlvbmFsPERyYWdPcGVyYXRp
b24+IG9wZXJhdGlvbjsKKyAgICB9OworICAgIERyYWdUYXJnZXRSZXNwb25zZSB1cGRhdGVEcmFn
QW5kRHJvcChjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmLCBjb25zdCBzdGQ6OmZ1bmN0aW9uPHN0
ZDo6dW5pcXVlX3B0cjxQYXN0ZWJvYXJkPigpPiYsIERyYWdPcGVyYXRpb24gc291cmNlT3BlcmF0
aW9uLCBib29sIGRyYWdnaW5nRmlsZXMpOworICAgIHZvaWQgY2FuY2VsRHJhZ0FuZERyb3AoY29u
c3QgUGxhdGZvcm1Nb3VzZUV2ZW50Jiwgc3RkOjp1bmlxdWVfcHRyPFBhc3RlYm9hcmQ+JiYsIERy
YWdPcGVyYXRpb24sIGJvb2wgZHJhZ2dpbmdGaWxlcyk7CisgICAgYm9vbCBwZXJmb3JtRHJhZ0Fu
ZERyb3AoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50Jiwgc3RkOjp1bmlxdWVfcHRyPFBhc3RlYm9h
cmQ+JiYsIERyYWdPcGVyYXRpb24sIGJvb2wgZHJhZ2dpbmdGaWxlcyk7CiAgICAgdm9pZCB1cGRh
dGVEcmFnU3RhdGVBZnRlckVkaXREcmFnSWZOZWVkZWQoRWxlbWVudCYgcm9vdEVkaXRhYmxlRWxl
bWVudCk7CiAgICAgUmVmUHRyPEVsZW1lbnQ+IGRyYWdnZWRFbGVtZW50KCkgY29uc3Q7CiAjZW5k
aWYKQEAgLTM5Miw3ICszOTcsOCBAQCBwcml2YXRlOgogICAgIGJvb2wgZGlzcGF0Y2hNb3VzZUV2
ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBOb2RlKiB0YXJnZXQsIGJvb2wgY2Fu
Y2VsYWJsZSwgaW50IGNsaWNrQ291bnQsIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYsIGJvb2wg
c2V0VW5kZXIpOwogCiAjaWYgRU5BQkxFKERSQUdfU1VQUE9SVCkKLSAgICBib29sIGRpc3BhdGNo
RHJhZ0V2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBFbGVtZW50JiB0YXJnZXQs
IGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYsIERhdGFUcmFuc2ZlciopOworICAgIGJvb2wgZGlz
cGF0Y2hEcmFnRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIEVsZW1lbnQmIHRh
cmdldCwgY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiwgRGF0YVRyYW5zZmVyJik7CisgICAgRHJh
Z1RhcmdldFJlc3BvbnNlIGRpc3BhdGNoRHJhZ0VudGVyT3JEcmFnT3ZlckV2ZW50KGNvbnN0IEF0
b21pY1N0cmluZyYgZXZlbnRUeXBlLCBFbGVtZW50JiB0YXJnZXQsIGNvbnN0IFBsYXRmb3JtTW91
c2VFdmVudCYsIHN0ZDo6dW5pcXVlX3B0cjxQYXN0ZWJvYXJkPiYmICwgRHJhZ09wZXJhdGlvbiwg
Ym9vbCBkcmFnZ2luZ0ZpbGVzKTsKICAgICB2b2lkIGludmFsaWRhdGVEYXRhVHJhbnNmZXIoKTsK
IAogICAgIGJvb2wgaGFuZGxlRHJhZyhjb25zdCBNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRz
JiwgQ2hlY2tEcmFnSHlzdGVyZXNpcyk7CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMjMwMjEpCisrKyBM
YXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxOCBAQAorMjAx
Ny0xMC0wNyAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAgICBkcmFn
ZW50ZXIgYW5kIGRyYWdsZWF2ZSBzaG91bGRuJ3QgdXNlIHRoZSBzYW1lIGRhdGEgdHJhbnNmZXIg
b2JqZWN0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NzgwNTYKKworICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KKworICAgICAgICBBZGRl
ZCBhIHJlZ3Jlc3Npb24gdGVzdCBmb3IgY2hlY2tpbmcgdGhlIHVuaXF1ZW5lc3Mgb2YgZGF0YVRy
YW5zZmVyIG9iamVjdCBmb3IgZHJhZ2VudGVyIGFuZCBkcmFnbGVhdmUgZXZlbnRzLgorICAgICAg
ICBVbmZvcnR1bmF0ZWx5LCB0aGUgdGVzdCBpcyBvbmx5IHJ1bm5hYmxlIGluIE1hYyBXZWJLaXQx
IHBvcnQgZHVlIHRvIHRoZSBsYWNrIG9mIHN1cHBvcnQgaW4gV2ViS2l0VGVzdFJ1bm5lci4KKwor
ICAgICAgICAqIFRlc3RFeHBlY3RhdGlvbnM6CisgICAgICAgICogZWRpdGluZy9wYXN0ZWJvYXJk
L2RhdGEtdHJhbnNmZXItaXMtdW5pcXVlLWZvci1kcmFnZW50ZXItYW5kLWRyYWdsZWF2ZS1leHBl
Y3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGVkaXRpbmcvcGFzdGVib2FyZC9kYXRhLXRyYW5z
ZmVyLWlzLXVuaXF1ZS1mb3ItZHJhZ2VudGVyLWFuZC1kcmFnbGVhdmUuaHRtbDogQWRkZWQuCisg
ICAgICAgICogcGxhdGZvcm0vbWFjLXdrMS9UZXN0RXhwZWN0YXRpb25zOgorCiAyMDE3LTEwLTA3
ICBBbmR5IEVzdGVzICA8YWVzdGVzQGFwcGxlLmNvbT4KIAogICAgICAgICBbUGF5bWVudCBSZXF1
ZXN0XSBJbXBsZW1lbnQgUGF5bWVudFJlcXVlc3Quc2hvdygpIGFuZCBQYXltZW50UmVxdWVzdC5o
aWRlKCkKSW5kZXg6IExheW91dFRlc3RzL1Rlc3RFeHBlY3RhdGlvbnMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvVGVzdEV4cGVjdGF0aW9ucwkocmV2aXNpb24gMjIzMDIxKQorKysgTGF5b3V0
VGVzdHMvVGVzdEV4cGVjdGF0aW9ucwkod29ya2luZyBjb3B5KQpAQCAtNzMsNiArNzMsNyBAQCBl
ZGl0aW5nL3Bhc3RlYm9hcmQvZGF0YS10cmFuc2Zlci1nZXQtZGF0CiBlZGl0aW5nL3Bhc3RlYm9h
cmQvZGF0YS10cmFuc2Zlci1nZXQtZGF0YS1vbi1kcm9wLXBsYWluLXRleHQuaHRtbCBbIFNraXAg
XQogZWRpdGluZy9wYXN0ZWJvYXJkL2RhdGEtdHJhbnNmZXItZ2V0LWRhdGEtb24tZHJvcC1yaWNo
LXRleHQuaHRtbCBbIFNraXAgXQogZWRpdGluZy9wYXN0ZWJvYXJkL2RhdGEtdHJhbnNmZXItZ2V0
LWRhdGEtb24tZHJvcC11cmwuaHRtbCBbIFNraXAgXQorZWRpdGluZy9wYXN0ZWJvYXJkL2RhdGEt
dHJhbnNmZXItaXMtdW5pcXVlLWZvci1kcmFnZW50ZXItYW5kLWRyYWdsZWF2ZS5odG1sIFsgU2tp
cCBdCiBlZGl0aW5nL3Bhc3RlYm9hcmQvZHJhZy1lbmQtY3Jhc2gtYWNjZXNzaW5nLWl0ZW0tbGlz
dC5odG1sIFsgU2tpcCBdCiBlZGl0aW5nL3Bhc3RlYm9hcmQvZGF0YS10cmFuc2Zlci1pdGVtLWxp
c3QtYWRkLWZpbGUtb24tZHJhZy5odG1sIFsgU2tpcCBdCiAKSW5kZXg6IExheW91dFRlc3RzL2Vk
aXRpbmcvcGFzdGVib2FyZC9kYXRhLXRyYW5zZmVyLWlzLXVuaXF1ZS1mb3ItZHJhZ2VudGVyLWFu
ZC1kcmFnbGVhdmUtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2VkaXRp
bmcvcGFzdGVib2FyZC9kYXRhLXRyYW5zZmVyLWlzLXVuaXF1ZS1mb3ItZHJhZ2VudGVyLWFuZC1k
cmFnbGVhdmUtZXhwZWN0ZWQudHh0CShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL2VkaXRp
bmcvcGFzdGVib2FyZC9kYXRhLXRyYW5zZmVyLWlzLXVuaXF1ZS1mb3ItZHJhZ2VudGVyLWFuZC1k
cmFnbGVhdmUtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAgQEAKK1BB
U1MgZHJhZ3N0YXJ0IGZvciBzb3VyY2UgaGFkIGFuIHVuaXF1ZSBkYXRhVHJhbnNmZXIgb2JqZWN0
CitQQVNTIGRyYWdlbnRlciBmb3IgcGFzc292ZXIgaGFkIGFuIHVuaXF1ZSBkYXRhVHJhbnNmZXIg
b2JqZWN0CitQQVNTIGRyYWdlbnRlciBmb3IgZGVzdGluYXRpb24gaGFkIGFuIHVuaXF1ZSBkYXRh
VHJhbnNmZXIgb2JqZWN0CitQQVNTIGRyYWdsZWF2ZSBmb3IgcGFzc292ZXIgaGFkIGFuIHVuaXF1
ZSBkYXRhVHJhbnNmZXIgb2JqZWN0CitQQVNTIGRyYWdvdmVyIGZvciBkZXN0aW5hdGlvbiBoYWQg
YW4gdW5pcXVlIGRhdGFUcmFuc2ZlciBvYmplY3QKK1BBU1MgZHJvcCBmb3IgZGVzdGluYXRpb24g
aGFkIGFuIHVuaXF1ZSBkYXRhVHJhbnNmZXIgb2JqZWN0CitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNl
ZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvZWRpdGluZy9w
YXN0ZWJvYXJkL2RhdGEtdHJhbnNmZXItaXMtdW5pcXVlLWZvci1kcmFnZW50ZXItYW5kLWRyYWds
ZWF2ZS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2VkaXRpbmcvcGFzdGVib2FyZC9k
YXRhLXRyYW5zZmVyLWlzLXVuaXF1ZS1mb3ItZHJhZ2VudGVyLWFuZC1kcmFnbGVhdmUuaHRtbAko
bm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy9lZGl0aW5nL3Bhc3RlYm9hcmQvZGF0YS10cmFu
c2Zlci1pcy11bmlxdWUtZm9yLWRyYWdlbnRlci1hbmQtZHJhZ2xlYXZlLmh0bWwJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw3MSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxib2R5Pgor
PHN0eWxlPgorI2NvbnRhaW5lciA+IGRpdiB7IHdpZHRoOiAxMDBweDsgaGVpZ2h0OiA1MHB4OyBt
YXJnaW46IDBweDsgfQorPC9zdHlsZT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBp
ZD0iY29udGFpbmVyIj4KKzxkaXYgZHJhZ2dhYmxlPSJ0cnVlIiBpZD0ic291cmNlIiBzdHlsZT0i
YmFja2dyb3VuZDogIzljZiI+RHJhZyB0aGlzPC9kaXY+Cis8ZGl2IGlkPSJwYXNzb3ZlciIgc3R5
bGU9ImJhY2tncm91bmQ6ICNmZjkiPkRyYWcgb3ZlciBoZXJlPC9kaXY+Cis8ZGl2IGlkPSJkZXN0
aW5hdGlvbiIgc3R5bGU9ImJhY2tncm91bmQ6ICNmYzkiPkFuZCBkcm9wIGhlcmU8L2Rpdj4KKzwv
ZGl2PgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3Vy
Y2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+CisKK3ZhciBqc1Rlc3RJc0Fz
eW5jID0gdHJ1ZTsKKworc291cmNlLmFkZEV2ZW50TGlzdGVuZXIoImRyYWdzdGFydCIsIChldmVu
dCkgPT4geworICAgIGV2ZW50LmRhdGFUcmFuc2Zlci5lZmZlY3RBbGxvd2VkID0gJ2NvcHknOwor
ICAgIGV2ZW50LmRhdGFUcmFuc2Zlci5zZXREYXRhKCd0ZXh0JywgJ2hlbGxvLCB3b3JsZCcpOwor
ICAgIGRhdGFUcmFuc2Zlck1hcC5jbGVhcigpOworICAgIHRlc3RVbmlxdWVuZXNzQW5kQWRkKGV2
ZW50LmRhdGFUcmFuc2ZlciwgJ3NvdXJjZScsICdkcmFnc3RhcnQnKTsKK30pOworCitjb25zdCBk
YXRhVHJhbnNmZXJNYXAgPSBuZXcgTWFwOworZnVuY3Rpb24gdGVzdFVuaXF1ZW5lc3NBbmRBZGQo
ZGF0YVRyYW5zZmVyLCBsYWJlbCwgZXZlbnRUeXBlKSB7CisgICAgY29uc3QgZXhpc3RpbmdFbnRy
eSA9IGRhdGFUcmFuc2Zlck1hcC5nZXQoZGF0YVRyYW5zZmVyKTsKKyAgICBpZiAoZXhpc3RpbmdF
bnRyeSkgeworICAgICAgICB0ZXN0RmFpbGVkKGAke2V2ZW50VHlwZX0gZm9yICR7bGFiZWx9IGhh
ZCB0aGUgc2FtZSBkYXRhVHJhbnNmZXIgb2JqZWN0IGFzICR7ZXhpc3RpbmdFbnRyeS5ldmVudFR5
cGV9IGZvciAke2V4aXN0aW5nRW50cnkubGFiZWx9YCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgdGVzdFBhc3NlZChgJHtldmVudFR5cGV9IGZvciAke2xhYmVsfSBoYWQgYW4gdW5pcXVl
IGRhdGFUcmFuc2ZlciBvYmplY3RgKTsKKyAgICBkYXRhVHJhbnNmZXJNYXAuc2V0KGRhdGFUcmFu
c2Zlciwge2xhYmVsLCBldmVudFR5cGV9KTsKK30KKworcGFzc292ZXIuYWRkRXZlbnRMaXN0ZW5l
cigiZHJhZ2VudGVyIiwgKGV2ZW50KSA9PiB7CisgICAgdGVzdFVuaXF1ZW5lc3NBbmRBZGQoZXZl
bnQuZGF0YVRyYW5zZmVyLCAncGFzc292ZXInLCAnZHJhZ2VudGVyJyk7Cit9KTsKK3Bhc3NvdmVy
LmFkZEV2ZW50TGlzdGVuZXIoImRyYWdsZWF2ZSIsIChldmVudCkgPT4geworICAgIHRlc3RVbmlx
dWVuZXNzQW5kQWRkKGV2ZW50LmRhdGFUcmFuc2ZlciwgJ3Bhc3NvdmVyJywgJ2RyYWdsZWF2ZScp
OworfSk7CitkZXN0aW5hdGlvbi5hZGRFdmVudExpc3RlbmVyKCJkcmFnZW50ZXIiLCAoZXZlbnQp
ID0+IHsKKyAgICB0ZXN0VW5pcXVlbmVzc0FuZEFkZChldmVudC5kYXRhVHJhbnNmZXIsICdkZXN0
aW5hdGlvbicsICdkcmFnZW50ZXInKTsKK30pOworZGVzdGluYXRpb24uYWRkRXZlbnRMaXN0ZW5l
cigiZHJhZ2xlYXZlIiwgKGV2ZW50KSA9PiB7CisgICAgdGVzdFVuaXF1ZW5lc3NBbmRBZGQoZXZl
bnQuZGF0YVRyYW5zZmVyLCAnZGVzdGluYXRpb24nLCAnZHJhZ2xlYXZlJyk7Cit9KTsKK2Rlc3Rp
bmF0aW9uLmFkZEV2ZW50TGlzdGVuZXIoImRyYWdvdmVyIiwgKGV2ZW50KSA9PiB7CisgICAgdGVz
dFVuaXF1ZW5lc3NBbmRBZGQoZXZlbnQuZGF0YVRyYW5zZmVyLCAnZGVzdGluYXRpb24nLCAnZHJh
Z292ZXInKTsKKyAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOworfSk7CitkZXN0aW5hdGlvbi5h
ZGRFdmVudExpc3RlbmVyKCJkcm9wIiwgKGV2ZW50KSA9PiB7CisgICAgdGVzdFVuaXF1ZW5lc3NB
bmRBZGQoZXZlbnQuZGF0YVRyYW5zZmVyLCAnZGVzdGluYXRpb24nLCAnZHJvcCcpOworICAgIGZp
bmlzaEpTVGVzdCgpOworfSk7CisKK2lmICh3aW5kb3cuZXZlbnRTZW5kZXIpIHsKKyAgICBldmVu
dFNlbmRlci5tb3VzZU1vdmVUbyhzb3VyY2Uub2Zmc2V0TGVmdCArIDEwLCBzb3VyY2Uub2Zmc2V0
VG9wICsgMTApOworICAgIGV2ZW50U2VuZGVyLm1vdXNlRG93bigpOworICAgIGV2ZW50U2VuZGVy
LmxlYXBGb3J3YXJkKDUwMCk7CisgICAgZXZlbnRTZW5kZXIubW91c2VNb3ZlVG8ocGFzc292ZXIu
b2Zmc2V0TGVmdCArIDEwLCBwYXNzb3Zlci5vZmZzZXRUb3AgKyAxMCk7CisgICAgZXZlbnRTZW5k
ZXIubGVhcEZvcndhcmQoMTAwKTsKKyAgICBldmVudFNlbmRlci5tb3VzZU1vdmVUbyhkZXN0aW5h
dGlvbi5vZmZzZXRMZWZ0ICsgMTAsIGRlc3RpbmF0aW9uLm9mZnNldFRvcCArIDEwKTsKKyAgICBl
dmVudFNlbmRlci5tb3VzZVVwKCk7CisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnRh
aW5lcicpLnJlbW92ZSgpOworfQorPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3Vy
Y2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBM
YXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMtd2sxL1Rlc3RFeHBlY3RhdGlvbnMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjLXdrMS9UZXN0RXhwZWN0YXRpb25zCShyZXZpc2lv
biAyMjMwMjEpCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMtd2sxL1Rlc3RFeHBlY3RhdGlv
bnMJKHdvcmtpbmcgY29weSkKQEAgLTExLDYgKzExLDcgQEAgZWRpdGluZy9wYXN0ZWJvYXJkL2Rh
dGEtdHJhbnNmZXItZ2V0LWRhdAogZWRpdGluZy9wYXN0ZWJvYXJkL2RhdGEtdHJhbnNmZXItZ2V0
LWRhdGEtb24tZHJvcC1wbGFpbi10ZXh0Lmh0bWwgWyBQYXNzIF0KIGVkaXRpbmcvcGFzdGVib2Fy
ZC9kYXRhLXRyYW5zZmVyLWdldC1kYXRhLW9uLWRyb3AtcmljaC10ZXh0Lmh0bWwgWyBQYXNzIF0K
IGVkaXRpbmcvcGFzdGVib2FyZC9kYXRhLXRyYW5zZmVyLWdldC1kYXRhLW9uLWRyb3AtdXJsLmh0
bWwgWyBQYXNzIF0KK2VkaXRpbmcvcGFzdGVib2FyZC9kYXRhLXRyYW5zZmVyLWlzLXVuaXF1ZS1m
b3ItZHJhZ2VudGVyLWFuZC1kcmFnbGVhdmUuaHRtbCBbIFBhc3MgXQogZWRpdGluZy9wYXN0ZWJv
YXJkL2RyYWctZW5kLWNyYXNoLWFjY2Vzc2luZy1pdGVtLWxpc3QuaHRtbCBbIFBhc3MgXQogZWRp
dGluZy9wYXN0ZWJvYXJkL2RhdGEtdHJhbnNmZXItaXRlbS1saXN0LWFkZC1maWxlLW9uLWRyYWcu
aHRtbCBbIFBhc3MgXQogCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vVGVzdEV4cGVj
dGF0aW9ucwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vVGVzdEV4cGVj
dGF0aW9ucwkocmV2aXNpb24gMjIzMDIxKQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luL1Rl
c3RFeHBlY3RhdGlvbnMJKHdvcmtpbmcgY29weSkKQEAgLTExNTUsNiArMTE1NSw3IEBAIGVkaXRp
bmcvcGFzdGVib2FyZC9wYXN0ZS1nbG9iYWwtc2VsZWN0aW8KIHdlYmtpdC5vcmcvYi8xMTY1NjQg
ZWRpdGluZy9wYXN0ZWJvYXJkL2NvcHktd2l0aG91dC1zZWxlY3Rpb24uaHRtbCBbIFNraXAgXQog
ZWRpdGluZy9wYXN0ZWJvYXJkL3NtYXJ0LXBhc3RlLTAwNC5odG1sIFsgRmFpbHVyZSBdCiAjIFRP
RE8gRHJhZyAmIERyb3AgZG9lc24ndCB3b3JrIGNvcnJlY3RseSBpbiBEUlQgPHJkYXI6Ly81NjIx
MjQ0PgorZWRpdGluZy9wYXN0ZWJvYXJkL2RhdGEtdHJhbnNmZXItaXMtdW5pcXVlLWZvci1kcmFn
ZW50ZXItYW5kLWRyYWdsZWF2ZS5odG1sIFsgU2tpcCBdCiBlZGl0aW5nL3Bhc3RlYm9hcmQvZHJh
Zy1hbmQtZHJvcC1vYmplY3RpbWFnZS1jb250ZW50ZWRpdGFibGUuaHRtbCBbIFNraXAgXQogZWRp
dGluZy9wYXN0ZWJvYXJkL2RyYWctaW1hZ2UtaW4tYWJvdXQtYmxhbmstZnJhbWUuaHRtbCBbIFNr
aXAgXQogZWRpdGluZy9wYXN0ZWJvYXJkL2Ryb3AtZmlsZS1zdmcuaHRtbCBbIFNraXAgXQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>