<?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>178236</bug_id>
          
          <creation_ts>2017-10-12 15:08:23 -0700</creation_ts>
          <short_desc>Implement listing origins for which CacheStorage is storing data</short_desc>
          <delta_ts>2017-10-13 16:47:36 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="youenn fablet">youennf</reporter>
          <assigned_to name="youenn fablet">youennf</assigned_to>
          <cc>achristensen</cc>
    
    <cc>beidson</cc>
    
    <cc>buildbot</cc>
    
    <cc>cdumez</cc>
    
    <cc>cgarcia</cc>
    
    <cc>commit-queue</cc>
    
    <cc>jlewis3</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1359764</commentid>
    <comment_count>0</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2017-10-12 15:08:23 -0700</bug_when>
    <thetext>Implement listing origins for which CacheStorage is storing data</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1359916</commentid>
    <comment_count>1</comment_count>
      <attachid>323632</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2017-10-12 21:49:12 -0700</bug_when>
    <thetext>Created attachment 323632
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1359917</commentid>
    <comment_count>2</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-10-12 21:50:12 -0700</bug_when>
    <thetext>Attachment 323632 did not pass style-queue:


ERROR: Source/WebKit/NetworkProcess/cache/CacheStorageEngineCaches.h:84:  The parameter name &quot;data&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 1 in 16 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1360040</commentid>
    <comment_count>3</comment_count>
      <attachid>323632</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-10-13 09:47:57 -0700</bug_when>
    <thetext>Comment on attachment 323632
Patch

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

r=me with comments.

&gt; Source/WebKit/NetworkProcess/cache/CacheStorageEngine.cpp:349
&gt; +    static Ref&lt;ReadOriginsTaskCounter&gt; create(WTF::CompletionHandler&lt;void(Vector&lt;WebsiteData::Entry&gt;)&gt;&amp;&amp; callback) { return adoptRef(*new ReadOriginsTaskCounter(WTFMove(callback))); }

Please indent code.

&gt; Source/WebKit/NetworkProcess/cache/CacheStorageEngine.cpp:350
&gt; +    ~ReadOriginsTaskCounter()

Please add lank line before this.

&gt; Source/WebKit/NetworkProcess/cache/CacheStorageEngine.cpp:366
&gt; +    WTF::CompletionHandler&lt;void(Vector&lt;WebsiteData::Entry&gt;)&gt; m_callback;

Should be Vector&lt;WebsiteData::Entry&gt;&amp;&amp; not Vector&lt;WebsiteData::Entry&gt; for clarity.

&gt; Source/WebKit/NetworkProcess/cache/CacheStorageEngine.cpp:373
&gt; +        Vector&lt;WebsiteData::Entry&gt; entries;

Should use reserveInitialCapacity() / uncheckedAppend().

&gt; Source/WebKit/NetworkProcess/cache/CacheStorageEngine.h:98
&gt; +    void fetchEntries(bool /* shouldComputeSize */, WTF::CompletionHandler&lt;void(Vector&lt;WebsiteData::Entry&gt;)&gt;&amp;&amp;);

We should really not use boolean parameter and opt for enum classes instead: enum class ShouldComputeSize { No, Yes };

&gt; Source/WebKit/NetworkProcess/cache/CacheStorageEngineCaches.cpp:57
&gt; +            completionHandler(std::nullopt);

Calling completionHandler on the wrong thread!

&gt; Source/WebKit/NetworkProcess/cache/CacheStorageEngineCaches.cpp:62
&gt; +        if (channel-&gt;fileDescriptor() &lt; 0) {

I don&apos;t think we need our own error handling here, IOChannel does this for us and passes an error code to the read() callback below.

&gt; Source/WebKit/NetworkProcess/cache/CacheStorageEngineCaches.cpp:70
&gt; +            ASSERT(RunLoop::isMain());

Not checking for error? Data may be empty and error may be set.

&gt; Source/WebKit/NetworkProcess/cache/CacheStorageEngineCaches.cpp:86
&gt; +    WTF::Persistence::Encoder encoder;

Maybe we should assert that we are not on the main thread?

&gt; Source/WebKit/NetworkProcess/cache/CacheStorageEngineCaches.cpp:95
&gt; +std::optional&lt;WebCore::SecurityOriginData&gt; Caches::readOrigin(const Data&amp; data)

Maybe we should assert that we are not on the main thread?

&gt; Source/WebKit/NetworkProcess/cache/CacheStorageEngineCaches.cpp:97
&gt; +    // FIXME: We should be able to use modern decoders for Persistent.

Persistent -&gt; persistence ?

&gt; Source/WebKit/NetworkProcess/cache/CacheStorageEngineCaches.h:69
&gt; +    WebCore::SecurityOriginData origin() const { return m_origin; }

const WebCore::SecurityOriginData&amp; ?

&gt; Tools/WebKitTestRunner/TestController.cpp:2357
&gt; +    for (size_t cptr = 0; cptr &lt; WKArrayGetSize(origins) &amp;&amp; !context-&gt;result; ++cptr) {

Bad name: cptr
I would suggest caching WKArrayGetSize(origins) before the loop.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1360089</commentid>
    <comment_count>4</comment_count>
      <attachid>323703</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2017-10-13 10:56:43 -0700</bug_when>
    <thetext>Created attachment 323703
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1360191</commentid>
    <comment_count>5</comment_count>
      <attachid>323703</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-10-13 13:31:37 -0700</bug_when>
    <thetext>Comment on attachment 323703
Patch

Clearing flags on attachment: 323703

Committed r223299: &lt;https://trac.webkit.org/changeset/223299&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1360192</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-10-13 13:31:39 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1360195</commentid>
    <comment_count>7</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-10-13 13:32:23 -0700</bug_when>
    <thetext>&lt;rdar://problem/34984542&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1360318</commentid>
    <comment_count>8</comment_count>
    <who name="Matt Lewis">jlewis3</who>
    <bug_when>2017-10-13 16:47:36 -0700</bug_when>
    <thetext>The test changed in this revision http/tests/cache-storage/cache-clearing-origin.https.html has become extremely flaky on macOS. 

https://webkit-test-results.webkit.org/dashboards/flakiness_dashboard.html#showAllRuns=true&amp;tests=http%2Ftests%2Fcache-storage%2Fcache-clearing-origin.https.html

https://build.webkit.org/results/Apple%20Sierra%20Debug%20WK2%20(Tests)/r223296%20(3517)/results.html
https://build.webkit.org/builders/Apple%20Sierra%20Debug%20WK2%20(Tests)/builds/3517

Diff:
--- /Volumes/Data/slave/sierra-debug-tests-wk2/build/layout-test-results/http/tests/cache-storage/cache-clearing-origin.https-expected.txt
+++ /Volumes/Data/slave/sierra-debug-tests-wk2/build/layout-test-results/http/tests/cache-storage/cache-clearing-origin.https-actual.txt
@@ -1,4 +1,4 @@
 
 PASS Cleaning existing caches 
-PASS Clearing disk cache of a given origin 
+FAIL Clearing disk cache of a given origin promise_test: Unhandled rejection with value: object &quot;TypeError: Failed reading data from the file system&quot;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>323632</attachid>
            <date>2017-10-12 21:49:12 -0700</date>
            <delta_ts>2017-10-13 10:56:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-178236-20171012214911.patch</filename>
            <type>text/plain</type>
            <size>25097</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIzMjcxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGU2NWY5NzBhNzY0NzdkZmVl
MjM5MDUxMGZkMjZjYTIyYzE2YTA1ZWYuLjJmYjU5MmE0ZmQxNjBmODZlNDJiZDhiOTcwMDllNTU2
OWUxNGE3MTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzkgQEAKKzIwMTctMTAtMTIgIFlvdWVubiBG
YWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29tPgorCisgICAgICAgIEltcGxlbWVudCBsaXN0aW5nIG9y
aWdpbnMgZm9yIHdoaWNoIENhY2hlU3RvcmFnZSBpcyBzdG9yaW5nIGRhdGEKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3ODIzNgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENhY2hlIHN0b3JhZ2UgaXMgc3Bs
aXQgb24gcGVyLW9yaWdpbiBmb2xkZXJzIHdoaWNoIG5hbWUgaXMgb2JmdXNjYXRlZCB0aHJvdWdo
IHNhbHRpbmcuCisgICAgICAgIFRvIHJldHJpZXZlIHRoZSBvcmlnaW4gZm9yIGVhY2ggZm9sZGVy
LCBhbiBvcmlnaW4gZmlsZSBpcyBub3cgc3RvcmVkIHdpdGhpbiBlYWNoIGZvbGRlci4KKyAgICAg
ICAgVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBhY3R1YWwgb3JpZ2luLgorCisgICAgICAgIEFkZGlu
ZyBzdXBwb3J0IHRvIGdldCB0aGUgbGlzdCBvZiBvcmlnaW4gYnkgaXRlcmF0aW5nIHRocm91Z2gg
ZWFjaCBmb2xkZXIgYW5kCisgICAgICAgIGdldHRpbmcgdGhlIGFjdHVhbCBvcmlnaW4gYnkgcmVh
ZGluZyB0aGUgY29udGVudCBvZiB0aGUgJ29yaWdpbicgZmlsZS4KKworICAgICAgICBBZGRpbmcg
QyBBUEkgZm9yIFdlYktpdFRlc3RSdW5uZXIuCisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9j
YWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmUuY3BwOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3Jh
Z2U6OkVuZ2luZTo6ZmV0Y2hFbnRyaWVzKToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdl
OjpSZWFkT3JpZ2luc1Rhc2tDb3VudGVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpDYWNo
ZVN0b3JhZ2U6OlJlYWRPcmlnaW5zVGFza0NvdW50ZXI6On5SZWFkT3JpZ2luc1Rhc2tDb3VudGVy
KToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpSZWFkT3JpZ2luc1Rhc2tDb3VudGVy
OjphZGRPcmlnaW4pOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OlJlYWRPcmlnaW5z
VGFza0NvdW50ZXI6OlJlYWRPcmlnaW5zVGFza0NvdW50ZXIpOgorICAgICAgICAqIE5ldHdvcmtQ
cm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZS5oOgorICAgICAgICAqIE5ldHdvcmtQcm9j
ZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlcy5jcHA6CisgICAgICAgIChXZWJLaXQ6
OkNhY2hlU3RvcmFnZTo6Y2FjaGVzT3JpZ2luRmlsZW5hbWUpOgorICAgICAgICAoV2ViS2l0OjpD
YWNoZVN0b3JhZ2U6OkNhY2hlczo6cmV0cmlldmVPcmlnaW5Gcm9tRGlyZWN0b3J5KToKKyAgICAg
ICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZXM6OkNhY2hlcyk6CisgICAgICAgIChXZWJL
aXQ6OkNhY2hlU3RvcmFnZTo6Q2FjaGVzOjpzdG9yZU9yaWdpbik6CisgICAgICAgIChXZWJLaXQ6
OkNhY2hlU3RvcmFnZTo6Q2FjaGVzOjpyZWFkT3JpZ2luKToKKyAgICAgICAgKFdlYktpdDo6Q2Fj
aGVTdG9yYWdlOjpDYWNoZXM6OmluaXRpYWxpemUpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNz
L2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlcy5oOgorICAgICAgICAoV2ViS2l0OjpDYWNo
ZVN0b3JhZ2U6OkNhY2hlczo6b3JpZ2luIGNvbnN0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L0MvV0tXZWJzaXRlRGF0YVN0b3JlUmVmLmNwcDoKKyAgICAgICAgKFdLV2Vic2l0ZURhdGFTdG9y
ZUdldEZldGNoQ2FjaGVPcmlnaW5zKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tXZWJz
aXRlRGF0YVN0b3JlUmVmLmg6CisKIDIwMTctMTAtMTIgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hy
aXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBSZW1vdmUgdW5uZWNlc3NhcnkgaW5jbHVk
ZXMgaW4gV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2Nh
Y2hlL0NhY2hlU3RvcmFnZUVuZ2luZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZS5jcHAKaW5kZXggMmU5Y2IyOWU5ZDdlM2I3MTBkZGYz
NjMxMjM0ZGZlODM0YjFjNTFhOC4uOGVhODkxZWM0OGI5ZTJlYzMyNGUzOWNiNDU5YTc0Y2Q4NTdl
ZGRhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNo
ZVN0b3JhZ2VFbmdpbmUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2Fj
aGUvQ2FjaGVTdG9yYWdlRW5naW5lLmNwcApAQCAtMjksOCArMjksOSBAQAogI2luY2x1ZGUgIk5l
dHdvcmtDYWNoZUZpbGVTeXN0ZW0uaCIKICNpbmNsdWRlICJOZXR3b3JrQ2FjaGVJT0NoYW5uZWwu
aCIKICNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzcy5oIgorI2luY2x1ZGUgIldlYnNpdGVEYXRhVHlw
ZS5oIgogI2luY2x1ZGUgPFdlYkNvcmUvQ2FjaGVRdWVyeU9wdGlvbnMuaD4KLSNpbmNsdWRlIDxX
ZWJDb3JlL05vdEltcGxlbWVudGVkLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TZWN1cml0eU9yaWdp
bi5oPgogI2luY2x1ZGUgPHBhbC9TZXNzaW9uSUQuaD4KICNpbmNsdWRlIDx3dGYvQ2FsbGJhY2tB
Z2dyZWdhdG9yLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CkBAIC04MCwxMSAr
ODEsOSBAQCB2b2lkIEVuZ2luZTo6ZGVzdHJveUVuZ2luZShQQUw6OlNlc3Npb25JRCBzZXNzaW9u
SUQpCiAgICAgZ2xvYmFsRW5naW5lTWFwKCkucmVtb3ZlKHNlc3Npb25JRCk7CiB9CiAKLXZvaWQg
RW5naW5lOjpmZXRjaEVudHJpZXMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBib29sIHNob3Vs
ZENvbXB1dGVTaXplLCBXVEY6OkZ1bmN0aW9uPHZvaWQoVmVjdG9yPFdlYnNpdGVEYXRhOjpFbnRy
eT4pPiYmIGNvbXBsZXRpb25IYW5kbGVyKQordm9pZCBFbmdpbmU6OmZldGNoRW50cmllcyhQQUw6
OlNlc3Npb25JRCBzZXNzaW9uSUQsIGJvb2wgc2hvdWxkQ29tcHV0ZVNpemUsIFdURjo6Q29tcGxl
dGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8V2Vic2l0ZURhdGE6OkVudHJ5Pik+JiYgY29tcGxldGlv
bkhhbmRsZXIpCiB7Ci0gICAgLy8gRklYTUU6IFN1cHBvcnQgZmV0Y2hpbmcgZW50cmllcwotICAg
IG5vdEltcGxlbWVudGVkKCk7Ci0gICAgY29tcGxldGlvbkhhbmRsZXIoeyB9KTsKKyAgICBmcm9t
KHNlc3Npb25JRCkuZmV0Y2hFbnRyaWVzKHNob3VsZENvbXB1dGVTaXplLCBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgRW5naW5lOjpjbGVhckFsbEVuZ2luZXMoV1RGOjpG
dW5jdGlvbjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0zNDUsNiArMzQ0LDUxIEBA
IHZvaWQgRW5naW5lOjpyZW1vdmVDYWNoZXMoY29uc3QgU3RyaW5nJiBvcmlnaW4pCiAgICAgbV9j
YWNoZXMucmVtb3ZlKG9yaWdpbik7CiB9CiAKK2NsYXNzIFJlYWRPcmlnaW5zVGFza0NvdW50ZXIg
OiBwdWJsaWMgUmVmQ291bnRlZDxSZWFkT3JpZ2luc1Rhc2tDb3VudGVyPiB7CitwdWJsaWM6Cisg
ICAgc3RhdGljIFJlZjxSZWFkT3JpZ2luc1Rhc2tDb3VudGVyPiBjcmVhdGUoV1RGOjpDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxXZWJzaXRlRGF0YTo6RW50cnk+KT4mJiBjYWxsYmFjaykg
eyByZXR1cm4gYWRvcHRSZWYoKm5ldyBSZWFkT3JpZ2luc1Rhc2tDb3VudGVyKFdURk1vdmUoY2Fs
bGJhY2spKSk7IH0KKyAgICB+UmVhZE9yaWdpbnNUYXNrQ291bnRlcigpCisgICAgeworICAgICAg
ICBtX2NhbGxiYWNrKFdURk1vdmUobV9lbnRyaWVzKSk7CisgICAgfQorCisgICAgdm9pZCBhZGRP
cmlnaW4oV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhJiYgb3JpZ2luKQorICAgIHsKKyAgICAg
ICAgbV9lbnRyaWVzLmFwcGVuZChXZWJzaXRlRGF0YTo6RW50cnkgeyBXVEZNb3ZlKG9yaWdpbiks
IFdlYnNpdGVEYXRhVHlwZTo6RE9NQ2FjaGUsIDAgfSk7CisgICAgfQorCitwcml2YXRlOgorICAg
IGV4cGxpY2l0IFJlYWRPcmlnaW5zVGFza0NvdW50ZXIoV1RGOjpDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKFZlY3RvcjxXZWJzaXRlRGF0YTo6RW50cnk+KT4mJiBjYWxsYmFjaykKKyAgICAgICAgOiBt
X2NhbGxiYWNrKFdURk1vdmUoY2FsbGJhY2spKQorICAgIHsKKyAgICB9CisKKyAgICBXVEY6OkNv
bXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFdlYnNpdGVEYXRhOjpFbnRyeT4pPiBtX2NhbGxi
YWNrOworICAgIFZlY3RvcjxXZWJzaXRlRGF0YTo6RW50cnk+IG1fZW50cmllczsKK307CisKK3Zv
aWQgRW5naW5lOjpmZXRjaEVudHJpZXMoYm9vbCAvKiBzaG91bGRDb21wdXRlU2l6ZSAqLywgV1RG
OjpDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxXZWJzaXRlRGF0YTo6RW50cnk+KT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBpZiAoIXNob3VsZFBlcnNpc3QoKSkgeworICAgICAg
ICBWZWN0b3I8V2Vic2l0ZURhdGE6OkVudHJ5PiBlbnRyaWVzOworICAgICAgICBmb3IgKGF1dG8m
IGNhY2hlcyA6IG1fY2FjaGVzLnZhbHVlcygpKQorICAgICAgICAgICAgZW50cmllcy5hcHBlbmQo
V2Vic2l0ZURhdGE6OkVudHJ5IHsgY2FjaGVzLT5vcmlnaW4oKSwgV2Vic2l0ZURhdGFUeXBlOjpE
T01DYWNoZSwgMCB9KTsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShlbnRyaWVz
KSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBhdXRvIHRhc2tDb3VudGVyID0gUmVh
ZE9yaWdpbnNUYXNrQ291bnRlcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
KyAgICBmb3IgKGF1dG8mIGZvbGRlclBhdGggOiBXZWJDb3JlOjpsaXN0RGlyZWN0b3J5KG1fcm9v
dFBhdGgsICIqIikpIHsKKyAgICAgICAgaWYgKCFXZWJDb3JlOjpmaWxlSXNEaXJlY3RvcnkoZm9s
ZGVyUGF0aCwgV2ViQ29yZTo6U2hvdWxkRm9sbG93U3ltYm9saWNMaW5rczo6Tm8pKQorICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgIENhY2hlczo6cmV0cmlldmVPcmlnaW5Gcm9tRGlyZWN0
b3J5KGZvbGRlclBhdGgsICptX2lvUXVldWUsIFt0YXNrQ291bnRlciA9IHRhc2tDb3VudGVyLmNv
cHlSZWYoKV0gKHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhPiYmIG9y
aWdpbikgbXV0YWJsZSB7CisgICAgICAgICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwor
ICAgICAgICAgICAgaWYgKG9yaWdpbikKKyAgICAgICAgICAgICAgICB0YXNrQ291bnRlci0+YWRk
T3JpZ2luKFdURk1vdmUob3JpZ2luLnZhbHVlKCkpKTsKKyAgICAgICAgfSk7CisgICAgfQorfQor
CiB2b2lkIEVuZ2luZTo6Y2xlYXJBbGxDYWNoZXMoQ2FsbGJhY2tBZ2dyZWdhdG9yJiB0YXNrSGFu
ZGxlcikKIHsKICAgICBmb3IgKGF1dG8mIGNhY2hlcyA6IG1fY2FjaGVzLnZhbHVlcygpKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VF
bmdpbmUuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdl
RW5naW5lLmgKaW5kZXggZjE5YTE4NTM2MDM1NjRiMjY3M2ZjMzVhOGI5ZjUzNDFjYWQ5NzJmNC4u
ZWM4ODQzYWNhNmFhNjQ5NDBhZGEwMjFjY2QzMTk4NTVkMmIzZTdkNCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmUuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZS5o
CkBAIC01OSw3ICs1OSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95RW5naW5l
KFBBTDo6U2Vzc2lvbklEKTsKICAgICBzdGF0aWMgdm9pZCBjbGVhckFsbEVuZ2luZXMoV1RGOjpG
dW5jdGlvbjx2b2lkKCk+JiYpOwogICAgIHN0YXRpYyB2b2lkIGNsZWFyRW5naW5lc0Zvck9yaWdp
bnMoY29uc3QgVmVjdG9yPFN0cmluZz4mIG9yaWdpbnMsIFdURjo6RnVuY3Rpb248dm9pZCgpPiYm
KTsKLSAgICBzdGF0aWMgdm9pZCBmZXRjaEVudHJpZXMoUEFMOjpTZXNzaW9uSUQsIGJvb2wgc2hv
dWxkQ29tcHV0ZVNpemUsIFdURjo6RnVuY3Rpb248dm9pZChWZWN0b3I8V2Vic2l0ZURhdGE6OkVu
dHJ5Pik+JiYpOworICAgIHN0YXRpYyB2b2lkIGZldGNoRW50cmllcyhQQUw6OlNlc3Npb25JRCwg
Ym9vbCBzaG91bGRDb21wdXRlU2l6ZSwgV1RGOjpDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3Rv
cjxXZWJzaXRlRGF0YTo6RW50cnk+KT4mJik7CiAKICAgICBzdGF0aWMgUmVmPEVuZ2luZT4gY3Jl
YXRlKFN0cmluZyYmIHJvb3RQYXRoKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IEVuZ2luZShXVEZN
b3ZlKHJvb3RQYXRoKSkpOyB9CiAKQEAgLTk1LDYgKzk1LDggQEAgcHJpdmF0ZToKIAogICAgIFN0
cmluZyBjYWNoZXNSb290UGF0aChjb25zdCBTdHJpbmcmIG9yaWdpbik7CiAKKyAgICB2b2lkIGZl
dGNoRW50cmllcyhib29sIC8qIHNob3VsZENvbXB1dGVTaXplICovLCBXVEY6OkNvbXBsZXRpb25I
YW5kbGVyPHZvaWQoVmVjdG9yPFdlYnNpdGVEYXRhOjpFbnRyeT4pPiYmKTsKKwogICAgIHZvaWQg
aW5pdGlhbGl6ZShXVEY6OkZ1bmN0aW9uPHZvaWQoc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpET01D
YWNoZUVuZ2luZTo6RXJyb3I+JiYpPiYmKTsKICAgICB2b2lkIGNsZWFyQWxsQ2FjaGVzKFdURjo6
Q2FsbGJhY2tBZ2dyZWdhdG9yJik7CiAgICAgdm9pZCBjbGVhckNhY2hlc0Zvck9yaWdpbihjb25z
dCBTdHJpbmcmIG9yaWdpbiwgV1RGOjpDYWxsYmFja0FnZ3JlZ2F0b3ImKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2Fj
aGVzLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdl
RW5naW5lQ2FjaGVzLmNwcAppbmRleCA2ZDIxYmVjY2RjZDkyN2QxMTk0ZjgzYWRjYzNjZWU5YmJk
OWQ2YTUwLi5mNDRhNDQzZTYzMWNkODJjZTUzNTFkOTA2NmVkYmE4MzlmYWU1OWU1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2lu
ZUNhY2hlcy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNo
ZVN0b3JhZ2VFbmdpbmVDYWNoZXMuY3BwCkBAIC0yNyw2ICsyNyw4IEBACiAjaW5jbHVkZSAiQ2Fj
aGVTdG9yYWdlRW5naW5lLmgiCiAKICNpbmNsdWRlICJOZXR3b3JrQ2FjaGVDb2RlcnMuaCIKKyNp
bmNsdWRlICJOZXR3b3JrQ2FjaGVJT0NoYW5uZWwuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL1NlY3Vy
aXR5T3JpZ2luLmg+CiAjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KICNpbmNsdWRlIDx3dGYvVVVJ
RC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KQEAgLTQzLDE0ICs0NSw2
OCBAQCBzdGF0aWMgaW5saW5lIFN0cmluZyBjYWNoZXNMaXN0RmlsZW5hbWUoY29uc3QgU3RyaW5n
JiBjYWNoZXNSb290UGF0aCkKICAgICByZXR1cm4gV2ViQ29yZTo6cGF0aEJ5QXBwZW5kaW5nQ29t
cG9uZW50KGNhY2hlc1Jvb3RQYXRoLCBBU0NJSUxpdGVyYWwoImNhY2hlc2xpc3QiKSk7CiB9CiAK
K3N0YXRpYyBpbmxpbmUgU3RyaW5nIGNhY2hlc09yaWdpbkZpbGVuYW1lKGNvbnN0IFN0cmluZyYg
Y2FjaGVzUm9vdFBhdGgpCit7CisgICAgcmV0dXJuIFdlYkNvcmU6OnBhdGhCeUFwcGVuZGluZ0Nv
bXBvbmVudChjYWNoZXNSb290UGF0aCwgQVNDSUlMaXRlcmFsKCJvcmlnaW4iKSk7Cit9CisKK3Zv
aWQgQ2FjaGVzOjpyZXRyaWV2ZU9yaWdpbkZyb21EaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBmb2xk
ZXJQYXRoLCBXb3JrUXVldWUmIHF1ZXVlLCBXVEY6OkNvbXBsZXRpb25IYW5kbGVyPHZvaWQoc3Rk
OjpvcHRpb25hbDxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGE+JiYpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQoreworICAgIHF1ZXVlLmRpc3BhdGNoKFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpLCBmb2xkZXJQYXRoID0gZm9sZGVyUGF0aC5pc29sYXRlZENv
cHkoKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgaWYgKCFXZWJDb3JlOjpmaWxlRXhpc3RzKGNhY2hl
c0xpc3RGaWxlbmFtZShmb2xkZXJQYXRoKSkpIHsKKyAgICAgICAgICAgIGNvbXBsZXRpb25IYW5k
bGVyKHN0ZDo6bnVsbG9wdCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAg
ICAgICBhdXRvIGNoYW5uZWwgPSBJT0NoYW5uZWw6Om9wZW4oY2FjaGVzT3JpZ2luRmlsZW5hbWUo
Zm9sZGVyUGF0aCksIElPQ2hhbm5lbDo6VHlwZTo6UmVhZCk7CisgICAgICAgIGlmIChjaGFubmVs
LT5maWxlRGVzY3JpcHRvcigpIDwgMCkgeworICAgICAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRp
c3BhdGNoKFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSgp
IG11dGFibGUgeworICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHN0ZDo6bnVsbG9w
dCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisg
ICAgICAgIGNoYW5uZWwtPnJlYWQoMCwgc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgo
KSwgbnVsbHB0ciwgW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cildKGNvbnN0IERhdGEmIGRhdGEsIGludCBlcnJvcikgbXV0YWJsZSB7CisgICAgICAgICAgICBB
U1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIo
cmVhZE9yaWdpbihkYXRhKSk7CisgICAgICAgIH0pOworICAgIH0pOworfQorCiBDYWNoZXM6OkNh
Y2hlcyhFbmdpbmUmIGVuZ2luZSwgU3RyaW5nJiYgb3JpZ2luLCBTdHJpbmcmJiByb290UGF0aCwg
dWludDY0X3QgcXVvdGEpCiAgICAgOiBtX2VuZ2luZSgmZW5naW5lKQotICAgICwgbV9vcmlnaW4o
V1RGTW92ZShvcmlnaW4pKQorICAgICwgbV9vcmlnaW4oV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5E
YXRhOjpmcm9tU2VjdXJpdHlPcmlnaW4oV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW46OmNyZWF0ZUZy
b21TdHJpbmcob3JpZ2luKSkpCiAgICAgLCBtX3Jvb3RQYXRoKFdURk1vdmUocm9vdFBhdGgpKQog
ICAgICwgbV9xdW90YShxdW90YSkKIHsKIH0KIAordm9pZCBDYWNoZXM6OnN0b3JlT3JpZ2luKENv
bXBsZXRpb25DYWxsYmFjayYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIFdURjo6UGVyc2lz
dGVuY2U6OkVuY29kZXIgZW5jb2RlcjsKKyAgICBlbmNvZGVyIDw8IG1fb3JpZ2luLnByb3RvY29s
OworICAgIGVuY29kZXIgPDwgbV9vcmlnaW4uaG9zdDsKKyAgICBlbmNvZGVyIDw8IG1fb3JpZ2lu
LnBvcnQ7CisgICAgbV9lbmdpbmUtPndyaXRlRmlsZShjYWNoZXNPcmlnaW5GaWxlbmFtZShtX3Jv
b3RQYXRoKSwgRGF0YSB7IGVuY29kZXIuYnVmZmVyKCksIGVuY29kZXIuYnVmZmVyU2l6ZSgpIH0s
IFtwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcildIChzdGQ6Om9wdGlvbmFsPEVycm9yPiYmIGVycm9yKSBt
dXRhYmxlIHsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShlcnJvcikpOworICAg
IH0pOworfQorCitzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YT4gQ2Fj
aGVzOjpyZWFkT3JpZ2luKGNvbnN0IERhdGEmIGRhdGEpCit7CisgICAgLy8gRklYTUU6IFdlIHNo
b3VsZCBiZSBhYmxlIHRvIHVzZSBtb2Rlcm4gZGVjb2RlcnMgZm9yIFBlcnNpc3RlbnQuCisgICAg
V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhIG9yaWdpbjsKKyAgICBXVEY6OlBlcnNpc3RlbmNl
OjpEZWNvZGVyIGRlY29kZXIoZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpKTsKKworICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGUob3JpZ2luLnByb3RvY29sKSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKG9yaWdpbi5ob3N0KSkKKyAgICAgICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKG9yaWdpbi5wb3J0KSkK
KyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICByZXR1cm4gV1RGTW92ZShvcmlnaW4p
OworfQorCiB2b2lkIENhY2hlczo6aW5pdGlhbGl6ZShXZWJDb3JlOjpET01DYWNoZUVuZ2luZTo6
Q29tcGxldGlvbkNhbGxiYWNrJiYgY2FsbGJhY2spCiB7CiAgICAgaWYgKG1faXNJbml0aWFsaXpl
ZCkgewpAQCAtNzcsMTkgKzEzMywyOCBAQCB2b2lkIENhY2hlczo6aW5pdGlhbGl6ZShXZWJDb3Jl
OjpET01DYWNoZUVuZ2luZTo6Q29tcGxldGlvbkNhbGxiYWNrJiYgY2FsbGJhY2spCiAgICAgfQog
ICAgIG1fc3RvcmFnZSA9IHN0b3JhZ2UucmVsZWFzZU5vbk51bGwoKTsKICAgICBtX3N0b3JhZ2Ut
PndyaXRlV2l0aG91dFdhaXRpbmcoKTsKLSAgICByZWFkQ2FjaGVzRnJvbURpc2soW3RoaXMsIGNh
bGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldKEV4cGVjdGVkPFZlY3RvcjxDYWNoZT4sIEVycm9y
PiYmIHJlc3VsdCkgbXV0YWJsZSB7Ci0gICAgICAgIG1ha2VEaXJ0eSgpOwotCi0gICAgICAgIGlm
ICghcmVzdWx0Lmhhc1ZhbHVlKCkpIHsKLSAgICAgICAgICAgIGNhbGxiYWNrKHJlc3VsdC5lcnJv
cigpKTsKIAotICAgICAgICAgICAgYXV0byBwZW5kaW5nQ2FsbGJhY2tzID0gV1RGTW92ZShtX3Bl
bmRpbmdJbml0aWFsaXphdGlvbkNhbGxiYWNrcyk7Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIGNh
bGxiYWNrIDogcGVuZGluZ0NhbGxiYWNrcykKLSAgICAgICAgICAgICAgICBjYWxsYmFjayhyZXN1
bHQuZXJyb3IoKSk7CisgICAgc3RvcmVPcmlnaW4oW3RoaXMsIGNhbGxiYWNrID0gV1RGTW92ZShj
YWxsYmFjayldIChzdGQ6Om9wdGlvbmFsPEVycm9yPiYmIGVycm9yKSBtdXRhYmxlIHsKKyAgICAg
ICAgaWYgKGVycm9yKSB7CisgICAgICAgICAgICBjYWxsYmFjayhFcnJvcjo6V3JpdGVEaXNrKTsK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBtX2NhY2hlcyA9IFdURk1v
dmUocmVzdWx0LnZhbHVlKCkpOwotICAgICAgICBpbml0aWFsaXplU2l6ZShXVEZNb3ZlKGNhbGxi
YWNrKSk7CisKKyAgICAgICAgcmVhZENhY2hlc0Zyb21EaXNrKFt0aGlzLCBjYWxsYmFjayA9IFdU
Rk1vdmUoY2FsbGJhY2spXShFeHBlY3RlZDxWZWN0b3I8Q2FjaGU+LCBFcnJvcj4mJiByZXN1bHQp
IG11dGFibGUgeworICAgICAgICAgICAgbWFrZURpcnR5KCk7CisKKyAgICAgICAgICAgIGlmICgh
cmVzdWx0Lmhhc1ZhbHVlKCkpIHsKKyAgICAgICAgICAgICAgICBjYWxsYmFjayhyZXN1bHQuZXJy
b3IoKSk7CisKKyAgICAgICAgICAgICAgICBhdXRvIHBlbmRpbmdDYWxsYmFja3MgPSBXVEZNb3Zl
KG1fcGVuZGluZ0luaXRpYWxpemF0aW9uQ2FsbGJhY2tzKTsKKyAgICAgICAgICAgICAgICBmb3Ig
KGF1dG8mIGNhbGxiYWNrIDogcGVuZGluZ0NhbGxiYWNrcykKKyAgICAgICAgICAgICAgICAgICAg
Y2FsbGJhY2socmVzdWx0LmVycm9yKCkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIG1fY2FjaGVzID0gV1RGTW92ZShyZXN1bHQudmFsdWUoKSk7
CisKKyAgICAgICAgICAgIGluaXRpYWxpemVTaXplKFdURk1vdmUoY2FsbGJhY2spKTsKKyAgICAg
ICAgfSk7CiAgICAgfSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGVzLmggYi9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlcy5oCmluZGV4IDY3MWMz
MTk5OWNkOTE3ODhiMTIxNjdhNGI2Y2Y4MmI5ODU4Y2FjN2MuLjZhZmYyMmJiMGNlYmVkYzU2Y2Yz
NGQ0NzA0MzY2OTQ3NTk3ZjY1MzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGVzLmgKKysrIGIvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuaApAQCAtMjcs
NiArMjcsNyBAQAogCiAjaW5jbHVkZSAiQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGUuaCIKICNpbmNs
dWRlICJOZXR3b3JrQ2FjaGVTdG9yYWdlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9TZWN1cml0eU9y
aWdpbkRhdGEuaD4KICNpbmNsdWRlIDx3dGYvQ29tcGxldGlvbkhhbmRsZXIuaD4KIAogbmFtZXNw
YWNlIFdlYktpdCB7CkBAIC0zOSw2ICs0MCw4IEBAIGNsYXNzIENhY2hlcyA6IHB1YmxpYyBSZWZD
b3VudGVkPENhY2hlcz4gewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8Q2FjaGVzPiBjcmVhdGUo
RW5naW5lJiBlbmdpbmUsIFN0cmluZyYmIG9yaWdpbiwgU3RyaW5nJiYgcm9vdFBhdGgsIHVpbnQ2
NF90IHF1b3RhKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IENhY2hlcyB7IGVuZ2luZSwgV1RGTW92
ZShvcmlnaW4pLCBXVEZNb3ZlKHJvb3RQYXRoKSwgcXVvdGEgfSk7IH0KIAorICAgIHN0YXRpYyB2
b2lkIHJldHJpZXZlT3JpZ2luRnJvbURpcmVjdG9yeShjb25zdCBTdHJpbmcmIGZvbGRlclBhdGgs
IFdvcmtRdWV1ZSYsIFdURjo6Q29tcGxldGlvbkhhbmRsZXI8dm9pZChzdGQ6Om9wdGlvbmFsPFdl
YkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YT4mJik+JiYpOworCiAgICAgdm9pZCBpbml0aWFsaXpl
KFdlYkNvcmU6OkRPTUNhY2hlRW5naW5lOjpDb21wbGV0aW9uQ2FsbGJhY2smJik7CiAgICAgdm9p
ZCBvcGVuKGNvbnN0IFN0cmluZyYgbmFtZSwgV2ViQ29yZTo6RE9NQ2FjaGVFbmdpbmU6OkNhY2hl
SWRlbnRpZmllckNhbGxiYWNrJiYpOwogICAgIHZvaWQgcmVtb3ZlKHVpbnQ2NF90IGlkZW50aWZp
ZXIsIFdlYkNvcmU6OkRPTUNhY2hlRW5naW5lOjpDYWNoZUlkZW50aWZpZXJDYWxsYmFjayYmKTsK
QEAgLTYzLDYgKzY2LDcgQEAgcHVibGljOgogICAgIHZvaWQgcmVtb3ZlUmVjb3JkKGNvbnN0IFJl
Y29yZEluZm9ybWF0aW9uJik7CiAKICAgICBjb25zdCBOZXR3b3JrQ2FjaGU6OlNhbHQmIHNhbHQo
KSBjb25zdDsKKyAgICBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEgb3JpZ2luKCkgY29uc3Qg
eyByZXR1cm4gbV9vcmlnaW47IH0KIAogICAgIGJvb2wgc2hvdWxkUGVyc2lzdCgpIGNvbnN0IHsg
cmV0dXJuICFtX3Jvb3RQYXRoLmlzTnVsbCgpOyB9CiAKQEAgLTc2LDYgKzgwLDkgQEAgcHJpdmF0
ZToKICAgICB2b2lkIHJlYWRDYWNoZXNGcm9tRGlzayhXVEY6OkZ1bmN0aW9uPHZvaWQoRXhwZWN0
ZWQ8VmVjdG9yPENhY2hlPiwgV2ViQ29yZTo6RE9NQ2FjaGVFbmdpbmU6OkVycm9yPiYmKT4mJik7
CiAgICAgdm9pZCB3cml0ZUNhY2hlc1RvRGlzayhXZWJDb3JlOjpET01DYWNoZUVuZ2luZTo6Q29t
cGxldGlvbkNhbGxiYWNrJiYpOwogCisgICAgdm9pZCBzdG9yZU9yaWdpbihXZWJDb3JlOjpET01D
YWNoZUVuZ2luZTo6Q29tcGxldGlvbkNhbGxiYWNrJiYpOworICAgIHN0YXRpYyBzdGQ6Om9wdGlv
bmFsPFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YT4gcmVhZE9yaWdpbihjb25zdCBOZXR3b3Jr
Q2FjaGU6OkRhdGEmIGRhdGEpOworCiAgICAgQ2FjaGUqIGZpbmQoY29uc3QgU3RyaW5nJiBuYW1l
KTsKIAogICAgIHZvaWQgbWFrZURpcnR5KCkgeyArK21fdXBkYXRlQ291bnRlcjsgfQpAQCAtODQs
NyArOTEsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9pc0luaXRpYWxpemVkIHsgZmFsc2UgfTsK
ICAgICBFbmdpbmUqIG1fZW5naW5lIHsgbnVsbHB0ciB9OwogICAgIHVpbnQ2NF90IG1fdXBkYXRl
Q291bnRlciB7IDAgfTsKLSAgICBTdHJpbmcgbV9vcmlnaW47CisgICAgV2ViQ29yZTo6U2VjdXJp
dHlPcmlnaW5EYXRhIG1fb3JpZ2luOwogICAgIFN0cmluZyBtX3Jvb3RQYXRoOwogICAgIHVpbnQ2
NF90IG1fcXVvdGEgeyAwIH07CiAgICAgdWludDY0X3QgbV9zaXplIHsgMCB9OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0b3JlUmVmLmNw
cCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLV2Vic2l0ZURhdGFTdG9yZVJlZi5j
cHAKaW5kZXggNDhmYTU0ODEwYmQ0NjRmYmUwOTEzNTExNGVhODQ1YTA4MWQxOGUyNC4uY2ViZjY4
OWE3Y2QzNzliN2ExNWUxYmE1NGYzOTJkYTg5MjExZGU4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0b3JlUmVmLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1dlYnNpdGVEYXRhU3RvcmVSZWYuY3BwCkBAIC0y
Niw2ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiV0tXZWJzaXRlRGF0
YVN0b3JlUmVmLmgiCiAKKyNpbmNsdWRlICJBUElBcnJheS5oIgogI2luY2x1ZGUgIkFQSVdlYnNp
dGVEYXRhU3RvcmUuaCIKICNpbmNsdWRlICJXS0FQSUNhc3QuaCIKICNpbmNsdWRlICJXZWJSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaCIKQEAgLTM1NSwzICszNTYsMTUgQEAgdm9pZCBXS1dl
YnNpdGVEYXRhU3RvcmVSZW1vdmVBbGxTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9ucyhXS1dlYnNp
dGVEYXRhU3RvcmVSZWYKICAgICBVTlVTRURfUEFSQU0oZGF0YVN0b3JlUmVmKTsKICNlbmRpZgog
fQorCit2b2lkIFdLV2Vic2l0ZURhdGFTdG9yZUdldEZldGNoQ2FjaGVPcmlnaW5zKFdLV2Vic2l0
ZURhdGFTdG9yZVJlZiBkYXRhU3RvcmVSZWYsIHZvaWQqIGNvbnRleHQsIFdLV2Vic2l0ZURhdGFT
dG9yZUdldEZldGNoQ2FjaGVPcmlnaW5zRnVuY3Rpb24gY2FsbGJhY2spCit7CisgICAgV2ViS2l0
Ojp0b0ltcGwoZGF0YVN0b3JlUmVmKS0+d2Vic2l0ZURhdGFTdG9yZSgpLmZldGNoRGF0YShXZWJL
aXQ6OldlYnNpdGVEYXRhVHlwZTo6RE9NQ2FjaGUsIHsgfSwgW2NvbnRleHQsIGNhbGxiYWNrXSAo
YXV0byBkYXRhUmVjb3JkcykgeworICAgICAgICBWZWN0b3I8UmVmUHRyPEFQSTo6T2JqZWN0Pj4g
c2VjdXJpdHlPcmlnaW5zOworICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGRhdGFSZWNvcmQgOiBk
YXRhUmVjb3JkcykgeworICAgICAgICAgICAgZm9yIChjb25zdCBhdXRvJiBvcmlnaW4gOiBkYXRh
UmVjb3JkLm9yaWdpbnMpCisgICAgICAgICAgICAgICAgc2VjdXJpdHlPcmlnaW5zLmFwcGVuZChB
UEk6OlNlY3VyaXR5T3JpZ2luOjpjcmVhdGUob3JpZ2luLnNlY3VyaXR5T3JpZ2luKCkpKTsKKyAg
ICAgICAgfQorICAgICAgICBjYWxsYmFjayhXZWJLaXQ6OnRvQVBJKEFQSTo6QXJyYXk6OmNyZWF0
ZShXVEZNb3ZlKHNlY3VyaXR5T3JpZ2lucykpLnB0cigpKSwgY29udGV4dCk7CisgICAgfSk7Cit9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1dlYnNpdGVEYXRh
U3RvcmVSZWYuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLV2Vic2l0ZURhdGFT
dG9yZVJlZi5oCmluZGV4IDUzODIzNGI5Y2YwMDhiNzlmOTgxODhlMTliNzY0ZjllMDFjNjk0MTMu
Ljg3ODA2MzgyY2NkY2ExZThmYTA5MGMwMjUzZTI2OTJjNjk2YjlhODQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLV2Vic2l0ZURhdGFTdG9yZVJlZi5oCisrKyBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLV2Vic2l0ZURhdGFTdG9yZVJlZi5oCkBA
IC03OCw2ICs3OCw5IEBAIFdLX0VYUE9SVCB2b2lkIFdLV2Vic2l0ZURhdGFTdG9yZVJlbW92ZUFs
bEZldGNoQ2FjaGVzKFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBkYXRhCiBXS19FWFBPUlQgdm9pZCBX
S1dlYnNpdGVEYXRhU3RvcmVSZW1vdmVBbGxJbmRleGVkRGF0YWJhc2VzKFdLV2Vic2l0ZURhdGFT
dG9yZVJlZiBkYXRhU3RvcmVSZWYpOwogV0tfRVhQT1JUIHZvaWQgV0tXZWJzaXRlRGF0YVN0b3Jl
UmVtb3ZlQWxsU2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbnMoV0tXZWJzaXRlRGF0YVN0b3JlUmVm
IGRhdGFTdG9yZVJlZik7CiAKK3R5cGVkZWYgdm9pZCAoKldLV2Vic2l0ZURhdGFTdG9yZUdldEZl
dGNoQ2FjaGVPcmlnaW5zRnVuY3Rpb24pKFdLQXJyYXlSZWYsIHZvaWQqKTsKK1dLX0VYUE9SVCB2
b2lkIFdLV2Vic2l0ZURhdGFTdG9yZUdldEZldGNoQ2FjaGVPcmlnaW5zKFdLV2Vic2l0ZURhdGFT
dG9yZVJlZiBkYXRhU3RvcmVSZWYsIHZvaWQqIGNvbnRleHQsIFdLV2Vic2l0ZURhdGFTdG9yZUdl
dEZldGNoQ2FjaGVPcmlnaW5zRnVuY3Rpb24gZnVuY3Rpb24pOworCiAjaWZkZWYgX19jcGx1c3Bs
dXMKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdl
TG9nCmluZGV4IDg2OGYyZWEwODNlMDg4MGQyMWFlM2Q0MGEwY2IzNjY2YzRlZDg1MzkuLmYwOGY2
NjU3ODc5Y2QwYmQ5MjAwMzhmZjRhNjQ0ZTY2YWYwNWZhZDcgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0No
YW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsNSArMSwyNiBAQAogMjAxNy0xMC0x
MiAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CiAKKyAgICAgICAgSW1wbGVtZW50
IGxpc3Rpbmcgb3JpZ2lucyBmb3Igd2hpY2ggQ2FjaGVTdG9yYWdlIGlzIHN0b3JpbmcgZGF0YQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc4MjM2CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkaW5nIGhh
c0RPTUNhY2hlIEFQSSBmb3IgY2hlY2tpbmcgd2hldGhlciBvcmlnaW4gaXMgc3RvcmluZyBkYXRh
IHRocm91Z2ggQ2FjaGUgQVBJLgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3Rl
ZEJ1bmRsZS9CaW5kaW5ncy9UZXN0UnVubmVyLmlkbDoKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVu
bmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuY3BwOgorICAgICAgICAoV1RSOjpUZXN0UnVu
bmVyOjpoYXNET01DYWNoZSk6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1
bmRsZS9UZXN0UnVubmVyLmg6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJv
bGxlci5jcHA6CisgICAgICAgIChXVFI6OkZldGNoQ2FjaGVPcmlnaW5zQ2FsbGJhY2tDb250ZXh0
OjpGZXRjaENhY2hlT3JpZ2luc0NhbGxiYWNrQ29udGV4dCk6CisgICAgICAgIChXVFI6OmZldGNo
Q2FjaGVPcmlnaW5zQ2FsbGJhY2spOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6aGFz
RE9NQ2FjaGUpOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuaDoK
KyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0aW9uLmNwcDoKKyAgICAgICAg
KFdUUjo6VGVzdEludm9jYXRpb246OmRpZFJlY2VpdmVTeW5jaHJvbm91c01lc3NhZ2VGcm9tSW5q
ZWN0ZWRCdW5kbGUpOgorCisyMDE3LTEwLTEyICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxl
LmNvbT4KKwogICAgICAgICBMYXlvdXQgVGVzdCBodHRwL3Rlc3RzL2NhY2hlLXN0b3JhZ2UvY2Fj
aGUtY2xlYXJpbmcuaHR0cHMuaHRtbCBpcyBmYWlsaW5nCiAgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzgyMDAKIApkaWZmIC0tZ2l0IGEvVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9CaW5kaW5ncy9UZXN0UnVubmVyLmlkbCBiL1Rv
b2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmluZGluZ3MvVGVzdFJ1bm5lci5p
ZGwKaW5kZXggNmZlNTZmNjcyN2I2YTRjNWU2MGQwYWY1N2MyNThjOTg3MDBhZjA0My4uMWNkYzYx
NmJlYjgzZWMxM2Q3OWQ4ODBmYjZiZWYxM2Q5MTIwNmE2YSAxMDA2NDQKLS0tIGEvVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9CaW5kaW5ncy9UZXN0UnVubmVyLmlkbAorKysg
Yi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0JpbmRpbmdzL1Rlc3RSdW5u
ZXIuaWRsCkBAIC01OCw2ICs1OCw3IEBAIGludGVyZmFjZSBUZXN0UnVubmVyIHsKICAgICB2b2lk
IGR1bXBQb2xpY3lEZWxlZ2F0ZUNhbGxiYWNrcygpOwogCiAgICAgdm9pZCBjbGVhckRPTUNhY2hl
KERPTVN0cmluZyBvcmlnaW4pOworICAgIGJvb2xlYW4gaGFzRE9NQ2FjaGUoRE9NU3RyaW5nIG9y
aWdpbik7CiAKICAgICAvLyBTcGVjaWFsIG9wdGlvbnMuCiAgICAgdm9pZCBrZWVwV2ViSGlzdG9y
eSgpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9U
ZXN0UnVubmVyLmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVz
dFJ1bm5lci5jcHAKaW5kZXggZDUzOGI3MTU2NjE3N2QwZTg3M2M4YmEwMGI2NmJkZDc3ZDg4OGIx
YS4uZTY1ODVmNDVmYzRmZWQ3MDYwZDU3OGZiM2YyYmIwZTNhMjYwNTY0YiAxMDA2NDQKLS0tIGEv
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmNwcAorKysg
Yi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuY3BwCkBA
IC0xODM2LDQgKzE4MzYsMTMgQEAgdm9pZCBUZXN0UnVubmVyOjpjbGVhckRPTUNhY2hlKEpTU3Ry
aW5nUmVmIG9yaWdpbikKICAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0
ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2Fn
ZUJvZHkuZ2V0KCksIG51bGxwdHIpOwogfQogCitib29sIFRlc3RSdW5uZXI6Omhhc0RPTUNhY2hl
KEpTU3RyaW5nUmVmIG9yaWdpbikKK3sKKyAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVz
c2FnZU5hbWUoQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkhhc0RPTUNh
Y2hlIikpOworICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlQm9keShBZG9wdFdL
LCBXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyhvcmlnaW4pKTsKKyAgICBXS1R5cGVSZWYgcmV0
dXJuRGF0YSA9IDA7CisgICAgV0tCdW5kbGVQYWdlUG9zdFN5bmNocm9ub3VzTWVzc2FnZUZvclRl
c3RpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBtZXNzYWdl
TmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksICZyZXR1cm5EYXRhKTsKKyAgICByZXR1cm4g
V0tCb29sZWFuR2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihyZXR1cm5EYXRhKSk7
Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdUUgpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmggYi9Ub29scy9XZWJLaXRUZXN0UnVubmVy
L0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuaAppbmRleCBlOGVkNjE2MGVlZTBkNmIwOWZjOGRl
ZDJkOTkwYjE2MzJmN2FmMTQ1Li41YzcwYzkzYzU2YzQ2MDNhMTRkMDQyZjg5ODIyZDdkODE4OWQ1
YmVkIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rl
c3RSdW5uZXIuaAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rl
c3RSdW5uZXIuaApAQCAtMTY1LDYgKzE2NSw3IEBAIHB1YmxpYzoKICAgICBKU1ZhbHVlUmVmIG9y
aWdpbnNXaXRoQXBwbGljYXRpb25DYWNoZSgpOwogCiAgICAgdm9pZCBjbGVhckRPTUNhY2hlKEpT
U3RyaW5nUmVmIG9yaWdpbik7CisgICAgYm9vbCBoYXNET01DYWNoZShKU1N0cmluZ1JlZiBvcmln
aW4pOwogCiAgICAgLy8gRmFpbGVkIGxvYWQgY29uZGl0aW9uIHRlc3RpbmcKICAgICB2b2lkIGZv
cmNlSW1tZWRpYXRlQ29tcGxldGlvbigpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9UZXN0Q29udHJvbGxlci5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250
cm9sbGVyLmNwcAppbmRleCBlZjBlNWNlMzBiYzc5NzFlODQ3MWY0NWU2MDg1YmQ2ZjQ3ZmM1Y2Ez
Li41NDY0MGNkMzg5N2JmNzg4YjFlZWVlMmI1Y2Q5MjBhYmU3M2IyZGFkIDEwMDY0NAotLS0gYS9U
b29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcAorKysgYi9Ub29scy9XZWJL
aXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcApAQCAtMjMzNSw2ICsyMzM1LDQzIEBAIHZv
aWQgVGVzdENvbnRyb2xsZXI6OmNsZWFyRE9NQ2FjaGUoV0tTdHJpbmdSZWYgb3JpZ2luKQogI2Vu
ZGlmCiB9CiAKK3N0cnVjdCBGZXRjaENhY2hlT3JpZ2luc0NhbGxiYWNrQ29udGV4dCB7CisgICAg
RmV0Y2hDYWNoZU9yaWdpbnNDYWxsYmFja0NvbnRleHQoVGVzdENvbnRyb2xsZXImIGNvbnRyb2xs
ZXIsIFdLU3RyaW5nUmVmIG9yaWdpbikKKyAgICAgICAgOiB0ZXN0Q29udHJvbGxlcihjb250cm9s
bGVyKQorICAgICAgICAsIG9yaWdpbihvcmlnaW4pCisgICAgeworICAgIH0KKworICAgIFRlc3RD
b250cm9sbGVyJiB0ZXN0Q29udHJvbGxlcjsKKyAgICBXS1N0cmluZ1JlZiBvcmlnaW47CisKKyAg
ICBib29sIGRvbmUgeyBmYWxzZSB9OworICAgIGJvb2wgcmVzdWx0IHsgZmFsc2UgfTsKK307CisK
K3N0YXRpYyB2b2lkIGZldGNoQ2FjaGVPcmlnaW5zQ2FsbGJhY2soV0tBcnJheVJlZiBvcmlnaW5z
LCB2b2lkKiB1c2VyRGF0YSkKK3sKKyAgICBhdXRvKiBjb250ZXh0ID0gc3RhdGljX2Nhc3Q8RmV0
Y2hDYWNoZU9yaWdpbnNDYWxsYmFja0NvbnRleHQqPih1c2VyRGF0YSk7CisgICAgY29udGV4dC0+
ZG9uZSA9IHRydWU7CisKKyAgICBmb3IgKHNpemVfdCBjcHRyID0gMDsgY3B0ciA8IFdLQXJyYXlH
ZXRTaXplKG9yaWdpbnMpICYmICFjb250ZXh0LT5yZXN1bHQ7ICsrY3B0cikgeworICAgICAgICBX
S1NlY3VyaXR5T3JpZ2luUmVmIHNlY3VyaXR5T3JpZ2luID0gcmVpbnRlcnByZXRfY2FzdDxXS1Nl
Y3VyaXR5T3JpZ2luUmVmPihXS0FycmF5R2V0SXRlbUF0SW5kZXgob3JpZ2lucywgY3B0cikpOwor
ICAgICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsKGNvbnRleHQtPm9yaWdpbiwgYWRvcHRXSyhXS1Nl
Y3VyaXR5T3JpZ2luQ29weVRvU3RyaW5nKHNlY3VyaXR5T3JpZ2luKSkuZ2V0KCkpKQorICAgICAg
ICAgICAgY29udGV4dC0+cmVzdWx0ID0gdHJ1ZTsKKyAgICB9CisgICAgY29udGV4dC0+dGVzdENv
bnRyb2xsZXIubm90aWZ5RG9uZSgpOworfQorCitib29sIFRlc3RDb250cm9sbGVyOjpoYXNET01D
YWNoZShXS1N0cmluZ1JlZiBvcmlnaW4pCit7CisgICAgYXV0byogZGF0YVN0b3JlID0gV0tDb250
ZXh0R2V0V2Vic2l0ZURhdGFTdG9yZShwbGF0Zm9ybUNvbnRleHQoKSk7CisgICAgRmV0Y2hDYWNo
ZU9yaWdpbnNDYWxsYmFja0NvbnRleHQgY29udGV4dCgqdGhpcywgb3JpZ2luKTsKKyAgICBXS1dl
YnNpdGVEYXRhU3RvcmVHZXRGZXRjaENhY2hlT3JpZ2lucyhkYXRhU3RvcmUsICZjb250ZXh0LCBm
ZXRjaENhY2hlT3JpZ2luc0NhbGxiYWNrKTsKKyAgICBpZiAoIWNvbnRleHQuZG9uZSkKKyAgICAg
ICAgcnVuVW50aWwoY29udGV4dC5kb25lLCBtX2N1cnJlbnRJbnZvY2F0aW9uLT5zaG9ydFRpbWVv
dXQoKSk7CisgICAgcmV0dXJuIGNvbnRleHQucmVzdWx0OworfQorCiAjaWYgIVBMQVRGT1JNKENP
Q09BKSB8fCAhV0tfQVBJX0VOQUJMRUQKIAogdm9pZCBUZXN0Q29udHJvbGxlcjo6c2V0U3RhdGlz
dGljc0xhc3RTZWVuKFdLU3RyaW5nUmVmIGhvc3QsIGRvdWJsZSBzZWNvbmRzKQpkaWZmIC0tZ2l0
IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5oIGIvVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5oCmluZGV4IDQ3NDliZGRhNDNmZTBhYTRiNTY5NmY1
NzAyYmJjNDRiNjYxNGI3YmEuLjliNTg2NjliZWUzYjRhYmY5ZWE0MTNkNDFhMWZmMzc2NDVhOTVm
OGUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuaAor
KysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmgKQEAgLTE4Myw2ICsx
ODMsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzdGF0aXN0aWNzQ2xlYXJUaHJvdWdoV2Vic2l0ZURh
dGFSZW1vdmFsKCk7CiAgICAgdm9pZCBzdGF0aXN0aWNzUmVzZXRUb0NvbnNpc3RlbnRTdGF0ZSgp
OwogCisgICAgYm9vbCBoYXNET01DYWNoZShXS1N0cmluZ1JlZik7CisKICAgICBXS0FycmF5UmVm
IG9wZW5QYW5lbEZpbGVVUkxzKCkgY29uc3QgeyByZXR1cm4gbV9vcGVuUGFuZWxGaWxlVVJMcy5n
ZXQoKTsgfQogICAgIHZvaWQgc2V0T3BlblBhbmVsRmlsZVVSTHMoV0tBcnJheVJlZiBmaWxlVVJM
cykgeyBtX29wZW5QYW5lbEZpbGVVUkxzID0gZmlsZVVSTHM7IH0KIApkaWZmIC0tZ2l0IGEvVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5jcHAgYi9Ub29scy9XZWJLaXRUZXN0
UnVubmVyL1Rlc3RJbnZvY2F0aW9uLmNwcAppbmRleCBjNzkzYTA0MjI1NDFlZmZkZWJhMWEyMGYw
MzI1YjYwNzJkMjQzNDMzLi5mNmI3NzhjMmJmNGY3ZmMwNDdkZTJhYTA0NmJkZDQ3MGU4NzQxNmIx
IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0aW9uLmNwcAor
KysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0aW9uLmNwcApAQCAtMTIxMCw2
ICsxMjEwLDE1IEBAIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gVGVzdEludm9jYXRpb246OmRpZFJl
Y2VpdmVTeW5jaHJvbm91c01lc3NhZ2VGcm9tSW5qZWN0ZWRCCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgIH0KIAorICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3Nh
Z2VOYW1lLCAiSGFzRE9NQ2FjaGUiKSkgeworICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVz
c2FnZUJvZHkpID09IFdLU3RyaW5nR2V0VHlwZUlEKCkpOworICAgICAgICBXS1N0cmluZ1JlZiBv
cmlnaW4gPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4obWVzc2FnZUJvZHkpOworCisgICAgICAg
IGJvb2wgaGFzRE9NQ2FjaGUgPSBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuaGFzRE9NQ2Fj
aGUob3JpZ2luKTsKKyAgICAgICAgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiByZXN1bHQoQWRvcHRX
SywgV0tCb29sZWFuQ3JlYXRlKGhhc0RPTUNhY2hlKSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgfQorCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIG51bGxwdHI7
CiB9CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cKaW5kZXggMTExZjUzOWUwNDM3N2M3Y2E1N2Q3MjI0NDRjOTQ0ZjBlYjNhMjI0Ni4uN2E1
Mjc3OWYzMGQ5ZWU1ODFjNTI4NTg2MjI0YTY3MjI1YTBiNzUzMSAxMDA2NDQKLS0tIGEvTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEy
IEBACisyMDE3LTEwLTEyICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KKworICAg
ICAgICBJbXBsZW1lbnQgbGlzdGluZyBvcmlnaW5zIGZvciB3aGljaCBDYWNoZVN0b3JhZ2UgaXMg
c3RvcmluZyBkYXRhCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNzgyMzYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICAqIGh0dHAvdGVzdHMvY2FjaGUtc3RvcmFnZS9jYWNoZS1jbGVhcmluZy5odHRwcy5odG1s
OgorCiAyMDE3LTEwLTEyICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5v
cmc+CiAKICAgICAgICAgVXNlIGFzeW5jaHJvbm91cyBSZXNvdXJjZUhhbmRsZUNsaWVudCBjYWxs
cyBmb3IgV2ViS2l0MQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9jYWNoZS1z
dG9yYWdlL2NhY2hlLWNsZWFyaW5nLW9yaWdpbi5odHRwcy5odG1sIGIvTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy9jYWNoZS1zdG9yYWdlL2NhY2hlLWNsZWFyaW5nLW9yaWdpbi5odHRwcy5odG1sCmlu
ZGV4IGVhYjkxNzMwYTFjYTEwMTE4YmI4MjQ5YmU0MjIyNDI2ZTk2ZTYzMDYuLmVhNmI2ZDBkZWJm
YjAwMDg3YzgxZjliODUxNzcxODgzYTU2YjAyYzMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2h0
dHAvdGVzdHMvY2FjaGUtc3RvcmFnZS9jYWNoZS1jbGVhcmluZy1vcmlnaW4uaHR0cHMuaHRtbAor
KysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2NhY2hlLXN0b3JhZ2UvY2FjaGUtY2xlYXJpbmct
b3JpZ2luLmh0dHBzLmh0bWwKQEAgLTUzLDEwICs1MywxMiBAQCBwcm9taXNlX3Rlc3QoKCkgPT4g
ewogICAgIH0pLnRoZW4oKCkgPT4gewogICAgICAgICBpZiAoIXdpbmRvdy50ZXN0UnVubmVyKQog
ICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KCJ0ZXN0IHJ1bm5lciBuZWVkZWQiKTsK
KyAgICAgICAgYXNzZXJ0X2ZhbHNlKHRlc3RSdW5uZXIuaGFzRE9NQ2FjaGUoJ2h0dHBzOi8vbG9j
YWxob3N0OjgwJyksICdoYXNET01DYWNoZSB3aXRoIGZha2Ugb3JpZ2luJyk7CiAgICAgICAgIHRl
c3RSdW5uZXIuY2xlYXJET01DYWNoZSgnaHR0cHM6Ly9sb2NhbGhvc3Q6ODAnKTsKICAgICAgICAg
cmV0dXJuIHZhbGlkYXRlQ2FjaGVzRW1wdHluZXNzKGZhbHNlKTsKICAgICB9KS50aGVuKHJlc3Vs
dCA9PiB7CiAgICAgICAgIGFzc2VydF90cnVlKHJlc3VsdCwgImNhY2hlcyBzaG91bGQgbm90IGJl
IGVtcHR5Iik7CisgICAgICAgIGFzc2VydF90cnVlKHRlc3RSdW5uZXIuaGFzRE9NQ2FjaGUod2lu
ZG93LmxvY2F0aW9uLm9yaWdpbiksICJoYXNET01DYWNoZSB3aXRoIGFjdHVhbCBvcmlnaW4iKTsK
ICAgICAgICAgdGVzdFJ1bm5lci5jbGVhckRPTUNhY2hlKHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4p
OwogICAgICAgICByZXR1cm4gdmFsaWRhdGVDYWNoZXNFbXB0eW5lc3ModHJ1ZSk7CiAgICAgfSku
dGhlbihyZXN1bHQgPT4gewo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>323703</attachid>
            <date>2017-10-13 10:56:43 -0700</date>
            <delta_ts>2017-10-13 13:31:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-178236-20171013105642.patch</filename>
            <type>text/plain</type>
            <size>25151</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIzMjc5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGFhNDM3NGViYjgwNGFmODhh
YWE3NTNmNmI4Mzk0Y2MwMWRmMzc5ZDAuLjc4MWRiZDM2ZjMzMjU5Mzg2ZmExZDU0NzIxMjg3MzQ5
NzMxNDI0NTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzkgQEAKKzIwMTctMTAtMTMgIFlvdWVubiBG
YWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29tPgorCisgICAgICAgIEltcGxlbWVudCBsaXN0aW5nIG9y
aWdpbnMgZm9yIHdoaWNoIENhY2hlU3RvcmFnZSBpcyBzdG9yaW5nIGRhdGEKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3ODIzNgorCisgICAgICAgIFJl
dmlld2VkIGJ5IENocmlzIER1bWV6LgorCisgICAgICAgIENhY2hlIHN0b3JhZ2UgaXMgc3BsaXQg
b24gcGVyLW9yaWdpbiBmb2xkZXJzIHdoaWNoIG5hbWUgaXMgb2JmdXNjYXRlZCB0aHJvdWdoIHNh
bHRpbmcuCisgICAgICAgIFRvIHJldHJpZXZlIHRoZSBvcmlnaW4gZm9yIGVhY2ggZm9sZGVyLCBh
biBvcmlnaW4gZmlsZSBpcyBub3cgc3RvcmVkIHdpdGhpbiBlYWNoIGZvbGRlci4KKyAgICAgICAg
VGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBhY3R1YWwgb3JpZ2luLgorCisgICAgICAgIEFkZGluZyBz
dXBwb3J0IHRvIGdldCB0aGUgbGlzdCBvZiBvcmlnaW4gYnkgaXRlcmF0aW5nIHRocm91Z2ggZWFj
aCBmb2xkZXIgYW5kCisgICAgICAgIGdldHRpbmcgdGhlIGFjdHVhbCBvcmlnaW4gYnkgcmVhZGlu
ZyB0aGUgY29udGVudCBvZiB0aGUgJ29yaWdpbicgZmlsZS4KKworICAgICAgICBBZGRpbmcgQyBB
UEkgZm9yIFdlYktpdFRlc3RSdW5uZXIuCisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNo
ZS9DYWNoZVN0b3JhZ2VFbmdpbmUuY3BwOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6
OkVuZ2luZTo6ZmV0Y2hFbnRyaWVzKToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpS
ZWFkT3JpZ2luc1Rhc2tDb3VudGVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0
b3JhZ2U6OlJlYWRPcmlnaW5zVGFza0NvdW50ZXI6On5SZWFkT3JpZ2luc1Rhc2tDb3VudGVyKToK
KyAgICAgICAgKFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpSZWFkT3JpZ2luc1Rhc2tDb3VudGVyOjph
ZGRPcmlnaW4pOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0b3JhZ2U6OlJlYWRPcmlnaW5zVGFz
a0NvdW50ZXI6OlJlYWRPcmlnaW5zVGFza0NvdW50ZXIpOgorICAgICAgICAqIE5ldHdvcmtQcm9j
ZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZS5oOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNz
L2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlcy5jcHA6CisgICAgICAgIChXZWJLaXQ6OkNh
Y2hlU3RvcmFnZTo6Y2FjaGVzT3JpZ2luRmlsZW5hbWUpOgorICAgICAgICAoV2ViS2l0OjpDYWNo
ZVN0b3JhZ2U6OkNhY2hlczo6cmV0cmlldmVPcmlnaW5Gcm9tRGlyZWN0b3J5KToKKyAgICAgICAg
KFdlYktpdDo6Q2FjaGVTdG9yYWdlOjpDYWNoZXM6OkNhY2hlcyk6CisgICAgICAgIChXZWJLaXQ6
OkNhY2hlU3RvcmFnZTo6Q2FjaGVzOjpzdG9yZU9yaWdpbik6CisgICAgICAgIChXZWJLaXQ6OkNh
Y2hlU3RvcmFnZTo6Q2FjaGVzOjpyZWFkT3JpZ2luKToKKyAgICAgICAgKFdlYktpdDo6Q2FjaGVT
dG9yYWdlOjpDYWNoZXM6OmluaXRpYWxpemUpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2Nh
Y2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlcy5oOgorICAgICAgICAoV2ViS2l0OjpDYWNoZVN0
b3JhZ2U6OkNhY2hlczo6b3JpZ2luIGNvbnN0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0Mv
V0tXZWJzaXRlRGF0YVN0b3JlUmVmLmNwcDoKKyAgICAgICAgKFdLV2Vic2l0ZURhdGFTdG9yZUdl
dEZldGNoQ2FjaGVPcmlnaW5zKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRl
RGF0YVN0b3JlUmVmLmg6CisKIDIwMTctMTAtMTIgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBw
bGUuY29tPgogCiAgICAgICAgIFNXICJIZWxsbyB3b3JsZCIuCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZS5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZS5jcHAKaW5k
ZXggMmU5Y2IyOWU5ZDdlM2I3MTBkZGYzNjMxMjM0ZGZlODM0YjFjNTFhOC4uNGQyYWI0NGM4NzMz
ZTcxYzE0NWM5OGE5NzI5OTA0NWVhMzdkNTgzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmUuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lLmNwcApAQCAtMjks
OCArMjksOSBAQAogI2luY2x1ZGUgIk5ldHdvcmtDYWNoZUZpbGVTeXN0ZW0uaCIKICNpbmNsdWRl
ICJOZXR3b3JrQ2FjaGVJT0NoYW5uZWwuaCIKICNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzcy5oIgor
I2luY2x1ZGUgIldlYnNpdGVEYXRhVHlwZS5oIgogI2luY2x1ZGUgPFdlYkNvcmUvQ2FjaGVRdWVy
eU9wdGlvbnMuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+CisjaW5jbHVk
ZSA8V2ViQ29yZS9TZWN1cml0eU9yaWdpbi5oPgogI2luY2x1ZGUgPHBhbC9TZXNzaW9uSUQuaD4K
ICNpbmNsdWRlIDx3dGYvQ2FsbGJhY2tBZ2dyZWdhdG9yLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVy
RGVzdHJveWVkLmg+CkBAIC04MCwxMSArODEsOSBAQCB2b2lkIEVuZ2luZTo6ZGVzdHJveUVuZ2lu
ZShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCiAgICAgZ2xvYmFsRW5naW5lTWFwKCkucmVtb3Zl
KHNlc3Npb25JRCk7CiB9CiAKLXZvaWQgRW5naW5lOjpmZXRjaEVudHJpZXMoUEFMOjpTZXNzaW9u
SUQgc2Vzc2lvbklELCBib29sIHNob3VsZENvbXB1dGVTaXplLCBXVEY6OkZ1bmN0aW9uPHZvaWQo
VmVjdG9yPFdlYnNpdGVEYXRhOjpFbnRyeT4pPiYmIGNvbXBsZXRpb25IYW5kbGVyKQordm9pZCBF
bmdpbmU6OmZldGNoRW50cmllcyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGJvb2wgc2hvdWxk
Q29tcHV0ZVNpemUsIFdURjo6Q29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0b3I8V2Vic2l0ZURh
dGE6OkVudHJ5Pik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgLy8gRklYTUU6IFN1cHBv
cnQgZmV0Y2hpbmcgZW50cmllcwotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgY29tcGxldGlv
bkhhbmRsZXIoeyB9KTsKKyAgICBmcm9tKHNlc3Npb25JRCkuZmV0Y2hFbnRyaWVzKHNob3VsZENv
bXB1dGVTaXplLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKIHZvaWQgRW5naW5l
OjpjbGVhckFsbEVuZ2luZXMoV1RGOjpGdW5jdGlvbjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCkBAIC0zNDUsNiArMzQ0LDU0IEBAIHZvaWQgRW5naW5lOjpyZW1vdmVDYWNoZXMoY29uc3Qg
U3RyaW5nJiBvcmlnaW4pCiAgICAgbV9jYWNoZXMucmVtb3ZlKG9yaWdpbik7CiB9CiAKK2NsYXNz
IFJlYWRPcmlnaW5zVGFza0NvdW50ZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxSZWFkT3JpZ2luc1Rh
c2tDb3VudGVyPiB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxSZWFkT3JpZ2luc1Rhc2tDb3Vu
dGVyPiBjcmVhdGUoV1RGOjpDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxXZWJzaXRlRGF0
YTo6RW50cnk+KT4mJiBjYWxsYmFjaykKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IFJlYWRPcmlnaW5zVGFza0NvdW50ZXIoV1RGTW92ZShjYWxsYmFjaykpKTt9CisKKyAgICB+
UmVhZE9yaWdpbnNUYXNrQ291bnRlcigpCisgICAgeworICAgICAgICBtX2NhbGxiYWNrKFdURk1v
dmUobV9lbnRyaWVzKSk7CisgICAgfQorCisgICAgdm9pZCBhZGRPcmlnaW4oV2ViQ29yZTo6U2Vj
dXJpdHlPcmlnaW5EYXRhJiYgb3JpZ2luKQorICAgIHsKKyAgICAgICAgbV9lbnRyaWVzLmFwcGVu
ZChXZWJzaXRlRGF0YTo6RW50cnkgeyBXVEZNb3ZlKG9yaWdpbiksIFdlYnNpdGVEYXRhVHlwZTo6
RE9NQ2FjaGUsIDAgfSk7CisgICAgfQorCitwcml2YXRlOgorICAgIGV4cGxpY2l0IFJlYWRPcmln
aW5zVGFza0NvdW50ZXIoV1RGOjpDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxXZWJzaXRl
RGF0YTo6RW50cnk+KT4mJiBjYWxsYmFjaykKKyAgICAgICAgOiBtX2NhbGxiYWNrKFdURk1vdmUo
Y2FsbGJhY2spKQorICAgIHsKKyAgICB9CisKKyAgICBXVEY6OkNvbXBsZXRpb25IYW5kbGVyPHZv
aWQoVmVjdG9yPFdlYnNpdGVEYXRhOjpFbnRyeT4pPiBtX2NhbGxiYWNrOworICAgIFZlY3RvcjxX
ZWJzaXRlRGF0YTo6RW50cnk+IG1fZW50cmllczsKK307CisKK3ZvaWQgRW5naW5lOjpmZXRjaEVu
dHJpZXMoYm9vbCAvKiBzaG91bGRDb21wdXRlU2l6ZSAqLywgV1RGOjpDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKFZlY3RvcjxXZWJzaXRlRGF0YTo6RW50cnk+KT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
K3sKKyAgICBpZiAoIXNob3VsZFBlcnNpc3QoKSkgeworICAgICAgICBhdXRvIGVudHJpZXMgPSBX
VEY6Om1hcChtX2NhY2hlcywgW10gKGF1dG8mIHBhaXIpIHsKKyAgICAgICAgICAgIHJldHVybiBX
ZWJzaXRlRGF0YTo6RW50cnkgeyBwYWlyLnZhbHVlLT5vcmlnaW4oKSwgV2Vic2l0ZURhdGFUeXBl
OjpET01DYWNoZSwgMCB9OworICAgICAgICB9KTsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIo
V1RGTW92ZShlbnRyaWVzKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBhdXRvIHRh
c2tDb3VudGVyID0gUmVhZE9yaWdpbnNUYXNrQ291bnRlcjo6Y3JlYXRlKFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKKyAgICBmb3IgKGF1dG8mIGZvbGRlclBhdGggOiBXZWJDb3JlOjpsaXN0
RGlyZWN0b3J5KG1fcm9vdFBhdGgsICIqIikpIHsKKyAgICAgICAgaWYgKCFXZWJDb3JlOjpmaWxl
SXNEaXJlY3RvcnkoZm9sZGVyUGF0aCwgV2ViQ29yZTo6U2hvdWxkRm9sbG93U3ltYm9saWNMaW5r
czo6Tm8pKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIENhY2hlczo6cmV0cmlldmVP
cmlnaW5Gcm9tRGlyZWN0b3J5KGZvbGRlclBhdGgsICptX2lvUXVldWUsIFt0YXNrQ291bnRlciA9
IHRhc2tDb3VudGVyLmNvcHlSZWYoKV0gKHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6U2VjdXJpdHlP
cmlnaW5EYXRhPiYmIG9yaWdpbikgbXV0YWJsZSB7CisgICAgICAgICAgICBBU1NFUlQoUnVuTG9v
cDo6aXNNYWluKCkpOworICAgICAgICAgICAgaWYgKG9yaWdpbikKKyAgICAgICAgICAgICAgICB0
YXNrQ291bnRlci0+YWRkT3JpZ2luKFdURk1vdmUob3JpZ2luLnZhbHVlKCkpKTsKKyAgICAgICAg
fSk7CisgICAgfQorfQorCiB2b2lkIEVuZ2luZTo6Y2xlYXJBbGxDYWNoZXMoQ2FsbGJhY2tBZ2dy
ZWdhdG9yJiB0YXNrSGFuZGxlcikKIHsKICAgICBmb3IgKGF1dG8mIGNhY2hlcyA6IG1fY2FjaGVz
LnZhbHVlcygpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNo
ZS9DYWNoZVN0b3JhZ2VFbmdpbmUuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2Fj
aGUvQ2FjaGVTdG9yYWdlRW5naW5lLmgKaW5kZXggZjE5YTE4NTM2MDM1NjRiMjY3M2ZjMzVhOGI5
ZjUzNDFjYWQ5NzJmNC4uZWM4ODQzYWNhNmFhNjQ5NDBhZGEwMjFjY2QzMTk4NTVkMmIzZTdkNCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3Jh
Z2VFbmdpbmUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hl
U3RvcmFnZUVuZ2luZS5oCkBAIC01OSw3ICs1OSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9p
ZCBkZXN0cm95RW5naW5lKFBBTDo6U2Vzc2lvbklEKTsKICAgICBzdGF0aWMgdm9pZCBjbGVhckFs
bEVuZ2luZXMoV1RGOjpGdW5jdGlvbjx2b2lkKCk+JiYpOwogICAgIHN0YXRpYyB2b2lkIGNsZWFy
RW5naW5lc0Zvck9yaWdpbnMoY29uc3QgVmVjdG9yPFN0cmluZz4mIG9yaWdpbnMsIFdURjo6RnVu
Y3Rpb248dm9pZCgpPiYmKTsKLSAgICBzdGF0aWMgdm9pZCBmZXRjaEVudHJpZXMoUEFMOjpTZXNz
aW9uSUQsIGJvb2wgc2hvdWxkQ29tcHV0ZVNpemUsIFdURjo6RnVuY3Rpb248dm9pZChWZWN0b3I8
V2Vic2l0ZURhdGE6OkVudHJ5Pik+JiYpOworICAgIHN0YXRpYyB2b2lkIGZldGNoRW50cmllcyhQ
QUw6OlNlc3Npb25JRCwgYm9vbCBzaG91bGRDb21wdXRlU2l6ZSwgV1RGOjpDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKFZlY3RvcjxXZWJzaXRlRGF0YTo6RW50cnk+KT4mJik7CiAKICAgICBzdGF0aWMg
UmVmPEVuZ2luZT4gY3JlYXRlKFN0cmluZyYmIHJvb3RQYXRoKSB7IHJldHVybiBhZG9wdFJlZigq
bmV3IEVuZ2luZShXVEZNb3ZlKHJvb3RQYXRoKSkpOyB9CiAKQEAgLTk1LDYgKzk1LDggQEAgcHJp
dmF0ZToKIAogICAgIFN0cmluZyBjYWNoZXNSb290UGF0aChjb25zdCBTdHJpbmcmIG9yaWdpbik7
CiAKKyAgICB2b2lkIGZldGNoRW50cmllcyhib29sIC8qIHNob3VsZENvbXB1dGVTaXplICovLCBX
VEY6OkNvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPFdlYnNpdGVEYXRhOjpFbnRyeT4pPiYm
KTsKKwogICAgIHZvaWQgaW5pdGlhbGl6ZShXVEY6OkZ1bmN0aW9uPHZvaWQoc3RkOjpvcHRpb25h
bDxXZWJDb3JlOjpET01DYWNoZUVuZ2luZTo6RXJyb3I+JiYpPiYmKTsKICAgICB2b2lkIGNsZWFy
QWxsQ2FjaGVzKFdURjo6Q2FsbGJhY2tBZ2dyZWdhdG9yJik7CiAgICAgdm9pZCBjbGVhckNhY2hl
c0Zvck9yaWdpbihjb25zdCBTdHJpbmcmIG9yaWdpbiwgV1RGOjpDYWxsYmFja0FnZ3JlZ2F0b3Im
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVT
dG9yYWdlRW5naW5lQ2FjaGVzLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2Fj
aGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGVzLmNwcAppbmRleCA2ZDIxYmVjY2RjZDkyN2QxMTk0
ZjgzYWRjYzNjZWU5YmJkOWQ2YTUwLi4zODI1MTI4Y2I2ZDE3NTlhMGY5OWM5MjUyYjllMzA0NzAw
N2E4YmU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL0Nh
Y2hlU3RvcmFnZUVuZ2luZUNhY2hlcy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuY3BwCkBAIC0yNyw2ICsyNyw4IEBA
CiAjaW5jbHVkZSAiQ2FjaGVTdG9yYWdlRW5naW5lLmgiCiAKICNpbmNsdWRlICJOZXR3b3JrQ2Fj
aGVDb2RlcnMuaCIKKyNpbmNsdWRlICJOZXR3b3JrQ2FjaGVJT0NoYW5uZWwuaCIKKyNpbmNsdWRl
IDxXZWJDb3JlL1NlY3VyaXR5T3JpZ2luLmg+CiAjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KICNp
bmNsdWRlIDx3dGYvVVVJRC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4K
QEAgLTQzLDE0ICs0NSw2NyBAQCBzdGF0aWMgaW5saW5lIFN0cmluZyBjYWNoZXNMaXN0RmlsZW5h
bWUoY29uc3QgU3RyaW5nJiBjYWNoZXNSb290UGF0aCkKICAgICByZXR1cm4gV2ViQ29yZTo6cGF0
aEJ5QXBwZW5kaW5nQ29tcG9uZW50KGNhY2hlc1Jvb3RQYXRoLCBBU0NJSUxpdGVyYWwoImNhY2hl
c2xpc3QiKSk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgU3RyaW5nIGNhY2hlc09yaWdpbkZpbGVuYW1l
KGNvbnN0IFN0cmluZyYgY2FjaGVzUm9vdFBhdGgpCit7CisgICAgcmV0dXJuIFdlYkNvcmU6OnBh
dGhCeUFwcGVuZGluZ0NvbXBvbmVudChjYWNoZXNSb290UGF0aCwgQVNDSUlMaXRlcmFsKCJvcmln
aW4iKSk7Cit9CisKK3ZvaWQgQ2FjaGVzOjpyZXRyaWV2ZU9yaWdpbkZyb21EaXJlY3RvcnkoY29u
c3QgU3RyaW5nJiBmb2xkZXJQYXRoLCBXb3JrUXVldWUmIHF1ZXVlLCBXVEY6OkNvbXBsZXRpb25I
YW5kbGVyPHZvaWQoc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGE+JiYp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIHF1ZXVlLmRpc3BhdGNoKFtjb21wbGV0aW9u
SGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBmb2xkZXJQYXRoID0gZm9sZGVy
UGF0aC5pc29sYXRlZENvcHkoKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgaWYgKCFXZWJDb3JlOjpm
aWxlRXhpc3RzKGNhY2hlc0xpc3RGaWxlbmFtZShmb2xkZXJQYXRoKSkpIHsKKyAgICAgICAgICAg
IFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgICAgICAgICBjb21wbGV0aW9u
SGFuZGxlcihzdGQ6Om51bGxvcHQpOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKworICAgICAgICBhdXRvIGNoYW5uZWwgPSBJT0NoYW5uZWw6Om9wZW4o
Y2FjaGVzT3JpZ2luRmlsZW5hbWUoZm9sZGVyUGF0aCksIElPQ2hhbm5lbDo6VHlwZTo6UmVhZCk7
CisgICAgICAgIGNoYW5uZWwtPnJlYWQoMCwgc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+Ojpt
YXgoKSwgbnVsbHB0ciwgW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcildKGNvbnN0IERhdGEmIGRhdGEsIGludCBlcnJvcikgbXV0YWJsZSB7CisgICAgICAgICAg
ICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOworICAgICAgICAgICAgaWYgKGVycm9yKSB7Cisg
ICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoc3RkOjpudWxsb3B0KTsKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjb21wbGV0aW9uSGFu
ZGxlcihyZWFkT3JpZ2luKGRhdGEpKTsKKyAgICAgICAgfSk7CisgICAgfSk7Cit9CisKIENhY2hl
czo6Q2FjaGVzKEVuZ2luZSYgZW5naW5lLCBTdHJpbmcmJiBvcmlnaW4sIFN0cmluZyYmIHJvb3RQ
YXRoLCB1aW50NjRfdCBxdW90YSkKICAgICA6IG1fZW5naW5lKCZlbmdpbmUpCi0gICAgLCBtX29y
aWdpbihXVEZNb3ZlKG9yaWdpbikpCisgICAgLCBtX29yaWdpbihXZWJDb3JlOjpTZWN1cml0eU9y
aWdpbkRhdGE6OmZyb21TZWN1cml0eU9yaWdpbihXZWJDb3JlOjpTZWN1cml0eU9yaWdpbjo6Y3Jl
YXRlRnJvbVN0cmluZyhvcmlnaW4pKSkKICAgICAsIG1fcm9vdFBhdGgoV1RGTW92ZShyb290UGF0
aCkpCiAgICAgLCBtX3F1b3RhKHF1b3RhKQogewogfQogCit2b2lkIENhY2hlczo6c3RvcmVPcmln
aW4oQ29tcGxldGlvbkNhbGxiYWNrJiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgV1RGOjpQ
ZXJzaXN0ZW5jZTo6RW5jb2RlciBlbmNvZGVyOworICAgIGVuY29kZXIgPDwgbV9vcmlnaW4ucHJv
dG9jb2w7CisgICAgZW5jb2RlciA8PCBtX29yaWdpbi5ob3N0OworICAgIGVuY29kZXIgPDwgbV9v
cmlnaW4ucG9ydDsKKyAgICBtX2VuZ2luZS0+d3JpdGVGaWxlKGNhY2hlc09yaWdpbkZpbGVuYW1l
KG1fcm9vdFBhdGgpLCBEYXRhIHsgZW5jb2Rlci5idWZmZXIoKSwgZW5jb2Rlci5idWZmZXJTaXpl
KCkgfSwgW3Byb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY29tcGxldGlvbkhhbmRsZXIg
PSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKHN0ZDo6b3B0aW9uYWw8RXJyb3I+JiYgZXJy
b3IpIG11dGFibGUgeworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKGVycm9yKSk7
CisgICAgfSk7Cit9CisKK3N0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRh
PiBDYWNoZXM6OnJlYWRPcmlnaW4oY29uc3QgRGF0YSYgZGF0YSkKK3sKKyAgICAvLyBGSVhNRTog
V2Ugc2hvdWxkIGJlIGFibGUgdG8gdXNlIG1vZGVybiBkZWNvZGVycyBmb3IgcGVyc2lzdGVudCBk
YXRhLgorICAgIFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSBvcmlnaW47CisgICAgV1RGOjpQ
ZXJzaXN0ZW5jZTo6RGVjb2RlciBkZWNvZGVyKGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSk7CisK
KyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKG9yaWdpbi5wcm90b2NvbCkpCisgICAgICAgIHJldHVy
biBzdGQ6Om51bGxvcHQ7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShvcmlnaW4uaG9zdCkpCisg
ICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShvcmln
aW4ucG9ydCkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgcmV0dXJuIFdURk1v
dmUob3JpZ2luKTsKK30KKwogdm9pZCBDYWNoZXM6OmluaXRpYWxpemUoV2ViQ29yZTo6RE9NQ2Fj
aGVFbmdpbmU6OkNvbXBsZXRpb25DYWxsYmFjayYmIGNhbGxiYWNrKQogewogICAgIGlmIChtX2lz
SW5pdGlhbGl6ZWQpIHsKQEAgLTc3LDE5ICsxMzIsMjggQEAgdm9pZCBDYWNoZXM6OmluaXRpYWxp
emUoV2ViQ29yZTo6RE9NQ2FjaGVFbmdpbmU6OkNvbXBsZXRpb25DYWxsYmFjayYmIGNhbGxiYWNr
KQogICAgIH0KICAgICBtX3N0b3JhZ2UgPSBzdG9yYWdlLnJlbGVhc2VOb25OdWxsKCk7CiAgICAg
bV9zdG9yYWdlLT53cml0ZVdpdGhvdXRXYWl0aW5nKCk7Ci0gICAgcmVhZENhY2hlc0Zyb21EaXNr
KFt0aGlzLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShFeHBlY3RlZDxWZWN0b3I8Q2Fj
aGU+LCBFcnJvcj4mJiByZXN1bHQpIG11dGFibGUgewotICAgICAgICBtYWtlRGlydHkoKTsKLQot
ICAgICAgICBpZiAoIXJlc3VsdC5oYXNWYWx1ZSgpKSB7Ci0gICAgICAgICAgICBjYWxsYmFjayhy
ZXN1bHQuZXJyb3IoKSk7CiAKLSAgICAgICAgICAgIGF1dG8gcGVuZGluZ0NhbGxiYWNrcyA9IFdU
Rk1vdmUobV9wZW5kaW5nSW5pdGlhbGl6YXRpb25DYWxsYmFja3MpOwotICAgICAgICAgICAgZm9y
IChhdXRvJiBjYWxsYmFjayA6IHBlbmRpbmdDYWxsYmFja3MpCi0gICAgICAgICAgICAgICAgY2Fs
bGJhY2socmVzdWx0LmVycm9yKCkpOworICAgIHN0b3JlT3JpZ2luKFt0aGlzLCBjYWxsYmFjayA9
IFdURk1vdmUoY2FsbGJhY2spXSAoc3RkOjpvcHRpb25hbDxFcnJvcj4mJiBlcnJvcikgbXV0YWJs
ZSB7CisgICAgICAgIGlmIChlcnJvcikgeworICAgICAgICAgICAgY2FsbGJhY2soRXJyb3I6Oldy
aXRlRGlzayk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgbV9jYWNo
ZXMgPSBXVEZNb3ZlKHJlc3VsdC52YWx1ZSgpKTsKLSAgICAgICAgaW5pdGlhbGl6ZVNpemUoV1RG
TW92ZShjYWxsYmFjaykpOworCisgICAgICAgIHJlYWRDYWNoZXNGcm9tRGlzayhbdGhpcywgY2Fs
bGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oRXhwZWN0ZWQ8VmVjdG9yPENhY2hlPiwgRXJyb3I+
JiYgcmVzdWx0KSBtdXRhYmxlIHsKKyAgICAgICAgICAgIG1ha2VEaXJ0eSgpOworCisgICAgICAg
ICAgICBpZiAoIXJlc3VsdC5oYXNWYWx1ZSgpKSB7CisgICAgICAgICAgICAgICAgY2FsbGJhY2so
cmVzdWx0LmVycm9yKCkpOworCisgICAgICAgICAgICAgICAgYXV0byBwZW5kaW5nQ2FsbGJhY2tz
ID0gV1RGTW92ZShtX3BlbmRpbmdJbml0aWFsaXphdGlvbkNhbGxiYWNrcyk7CisgICAgICAgICAg
ICAgICAgZm9yIChhdXRvJiBjYWxsYmFjayA6IHBlbmRpbmdDYWxsYmFja3MpCisgICAgICAgICAg
ICAgICAgICAgIGNhbGxiYWNrKHJlc3VsdC5lcnJvcigpKTsKKyAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtX2NhY2hlcyA9IFdURk1vdmUocmVzdWx0
LnZhbHVlKCkpOworCisgICAgICAgICAgICBpbml0aWFsaXplU2l6ZShXVEZNb3ZlKGNhbGxiYWNr
KSk7CisgICAgICAgIH0pOwogICAgIH0pOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlcy5oIGIvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9DYWNoZVN0b3JhZ2VFbmdpbmVDYWNoZXMuaApp
bmRleCA2NzFjMzE5OTljZDkxNzg4YjEyMTY3YTRiNmNmODJiOTg1OGNhYzdjLi4xZjA1N2JlZWIy
NWE5ZTE1OWNhNGYxMTg4ZGJhYjI1MmU1ZDg1NmE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL2NhY2hlL0NhY2hlU3RvcmFnZUVuZ2luZUNhY2hlcy5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvQ2FjaGVTdG9yYWdlRW5naW5lQ2FjaGVz
LmgKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2luY2x1ZGUgIkNhY2hlU3RvcmFnZUVuZ2luZUNhY2hl
LmgiCiAjaW5jbHVkZSAiTmV0d29ya0NhY2hlU3RvcmFnZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUv
U2VjdXJpdHlPcmlnaW5EYXRhLmg+CiAjaW5jbHVkZSA8d3RmL0NvbXBsZXRpb25IYW5kbGVyLmg+
CiAKIG5hbWVzcGFjZSBXZWJLaXQgewpAQCAtMzksNiArNDAsOCBAQCBjbGFzcyBDYWNoZXMgOiBw
dWJsaWMgUmVmQ291bnRlZDxDYWNoZXM+IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPENhY2hl
cz4gY3JlYXRlKEVuZ2luZSYgZW5naW5lLCBTdHJpbmcmJiBvcmlnaW4sIFN0cmluZyYmIHJvb3RQ
YXRoLCB1aW50NjRfdCBxdW90YSkgeyByZXR1cm4gYWRvcHRSZWYoKm5ldyBDYWNoZXMgeyBlbmdp
bmUsIFdURk1vdmUob3JpZ2luKSwgV1RGTW92ZShyb290UGF0aCksIHF1b3RhIH0pOyB9CiAKKyAg
ICBzdGF0aWMgdm9pZCByZXRyaWV2ZU9yaWdpbkZyb21EaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBm
b2xkZXJQYXRoLCBXb3JrUXVldWUmLCBXVEY6OkNvbXBsZXRpb25IYW5kbGVyPHZvaWQoc3RkOjpv
cHRpb25hbDxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGE+JiYpPiYmKTsKKwogICAgIHZvaWQg
aW5pdGlhbGl6ZShXZWJDb3JlOjpET01DYWNoZUVuZ2luZTo6Q29tcGxldGlvbkNhbGxiYWNrJiYp
OwogICAgIHZvaWQgb3Blbihjb25zdCBTdHJpbmcmIG5hbWUsIFdlYkNvcmU6OkRPTUNhY2hlRW5n
aW5lOjpDYWNoZUlkZW50aWZpZXJDYWxsYmFjayYmKTsKICAgICB2b2lkIHJlbW92ZSh1aW50NjRf
dCBpZGVudGlmaWVyLCBXZWJDb3JlOjpET01DYWNoZUVuZ2luZTo6Q2FjaGVJZGVudGlmaWVyQ2Fs
bGJhY2smJik7CkBAIC02Myw2ICs2Niw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlbW92ZVJlY29y
ZChjb25zdCBSZWNvcmRJbmZvcm1hdGlvbiYpOwogCiAgICAgY29uc3QgTmV0d29ya0NhY2hlOjpT
YWx0JiBzYWx0KCkgY29uc3Q7CisgICAgY29uc3QgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRh
JiBvcmlnaW4oKSBjb25zdCB7IHJldHVybiBtX29yaWdpbjsgfQogCiAgICAgYm9vbCBzaG91bGRQ
ZXJzaXN0KCkgY29uc3QgeyByZXR1cm4gIW1fcm9vdFBhdGguaXNOdWxsKCk7IH0KIApAQCAtNzYs
NiArODAsOSBAQCBwcml2YXRlOgogICAgIHZvaWQgcmVhZENhY2hlc0Zyb21EaXNrKFdURjo6RnVu
Y3Rpb248dm9pZChFeHBlY3RlZDxWZWN0b3I8Q2FjaGU+LCBXZWJDb3JlOjpET01DYWNoZUVuZ2lu
ZTo6RXJyb3I+JiYpPiYmKTsKICAgICB2b2lkIHdyaXRlQ2FjaGVzVG9EaXNrKFdlYkNvcmU6OkRP
TUNhY2hlRW5naW5lOjpDb21wbGV0aW9uQ2FsbGJhY2smJik7CiAKKyAgICB2b2lkIHN0b3JlT3Jp
Z2luKFdlYkNvcmU6OkRPTUNhY2hlRW5naW5lOjpDb21wbGV0aW9uQ2FsbGJhY2smJik7CisgICAg
c3RhdGljIHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhPiByZWFkT3Jp
Z2luKGNvbnN0IE5ldHdvcmtDYWNoZTo6RGF0YSYpOworCiAgICAgQ2FjaGUqIGZpbmQoY29uc3Qg
U3RyaW5nJiBuYW1lKTsKIAogICAgIHZvaWQgbWFrZURpcnR5KCkgeyArK21fdXBkYXRlQ291bnRl
cjsgfQpAQCAtODQsNyArOTEsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9pc0luaXRpYWxpemVk
IHsgZmFsc2UgfTsKICAgICBFbmdpbmUqIG1fZW5naW5lIHsgbnVsbHB0ciB9OwogICAgIHVpbnQ2
NF90IG1fdXBkYXRlQ291bnRlciB7IDAgfTsKLSAgICBTdHJpbmcgbV9vcmlnaW47CisgICAgV2Vi
Q29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhIG1fb3JpZ2luOwogICAgIFN0cmluZyBtX3Jvb3RQYXRo
OwogICAgIHVpbnQ2NF90IG1fcXVvdGEgeyAwIH07CiAgICAgdWludDY0X3QgbV9zaXplIHsgMCB9
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0
YVN0b3JlUmVmLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLV2Vic2l0ZURh
dGFTdG9yZVJlZi5jcHAKaW5kZXggNDhmYTU0ODEwYmQ0NjRmYmUwOTEzNTExNGVhODQ1YTA4MWQx
OGUyNC4uY2ViZjY4OWE3Y2QzNzliN2ExNWUxYmE1NGYzOTJkYTg5MjExZGU4OCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRlRGF0YVN0b3JlUmVmLmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1dlYnNpdGVEYXRhU3RvcmVS
ZWYuY3BwCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAi
V0tXZWJzaXRlRGF0YVN0b3JlUmVmLmgiCiAKKyNpbmNsdWRlICJBUElBcnJheS5oIgogI2luY2x1
ZGUgIkFQSVdlYnNpdGVEYXRhU3RvcmUuaCIKICNpbmNsdWRlICJXS0FQSUNhc3QuaCIKICNpbmNs
dWRlICJXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUuaCIKQEAgLTM1NSwzICszNTYsMTUg
QEAgdm9pZCBXS1dlYnNpdGVEYXRhU3RvcmVSZW1vdmVBbGxTZXJ2aWNlV29ya2VyUmVnaXN0cmF0
aW9ucyhXS1dlYnNpdGVEYXRhU3RvcmVSZWYKICAgICBVTlVTRURfUEFSQU0oZGF0YVN0b3JlUmVm
KTsKICNlbmRpZgogfQorCit2b2lkIFdLV2Vic2l0ZURhdGFTdG9yZUdldEZldGNoQ2FjaGVPcmln
aW5zKFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBkYXRhU3RvcmVSZWYsIHZvaWQqIGNvbnRleHQsIFdL
V2Vic2l0ZURhdGFTdG9yZUdldEZldGNoQ2FjaGVPcmlnaW5zRnVuY3Rpb24gY2FsbGJhY2spCit7
CisgICAgV2ViS2l0Ojp0b0ltcGwoZGF0YVN0b3JlUmVmKS0+d2Vic2l0ZURhdGFTdG9yZSgpLmZl
dGNoRGF0YShXZWJLaXQ6OldlYnNpdGVEYXRhVHlwZTo6RE9NQ2FjaGUsIHsgfSwgW2NvbnRleHQs
IGNhbGxiYWNrXSAoYXV0byBkYXRhUmVjb3JkcykgeworICAgICAgICBWZWN0b3I8UmVmUHRyPEFQ
STo6T2JqZWN0Pj4gc2VjdXJpdHlPcmlnaW5zOworICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGRh
dGFSZWNvcmQgOiBkYXRhUmVjb3JkcykgeworICAgICAgICAgICAgZm9yIChjb25zdCBhdXRvJiBv
cmlnaW4gOiBkYXRhUmVjb3JkLm9yaWdpbnMpCisgICAgICAgICAgICAgICAgc2VjdXJpdHlPcmln
aW5zLmFwcGVuZChBUEk6OlNlY3VyaXR5T3JpZ2luOjpjcmVhdGUob3JpZ2luLnNlY3VyaXR5T3Jp
Z2luKCkpKTsKKyAgICAgICAgfQorICAgICAgICBjYWxsYmFjayhXZWJLaXQ6OnRvQVBJKEFQSTo6
QXJyYXk6OmNyZWF0ZShXVEZNb3ZlKHNlY3VyaXR5T3JpZ2lucykpLnB0cigpKSwgY29udGV4dCk7
CisgICAgfSk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9X
S1dlYnNpdGVEYXRhU3RvcmVSZWYuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dL
V2Vic2l0ZURhdGFTdG9yZVJlZi5oCmluZGV4IDUzODIzNGI5Y2YwMDhiNzlmOTgxODhlMTliNzY0
ZjllMDFjNjk0MTMuLjg3ODA2MzgyY2NkY2ExZThmYTA5MGMwMjUzZTI2OTJjNjk2YjlhODQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLV2Vic2l0ZURhdGFTdG9y
ZVJlZi5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLV2Vic2l0ZURhdGFT
dG9yZVJlZi5oCkBAIC03OCw2ICs3OCw5IEBAIFdLX0VYUE9SVCB2b2lkIFdLV2Vic2l0ZURhdGFT
dG9yZVJlbW92ZUFsbEZldGNoQ2FjaGVzKFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBkYXRhCiBXS19F
WFBPUlQgdm9pZCBXS1dlYnNpdGVEYXRhU3RvcmVSZW1vdmVBbGxJbmRleGVkRGF0YWJhc2VzKFdL
V2Vic2l0ZURhdGFTdG9yZVJlZiBkYXRhU3RvcmVSZWYpOwogV0tfRVhQT1JUIHZvaWQgV0tXZWJz
aXRlRGF0YVN0b3JlUmVtb3ZlQWxsU2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbnMoV0tXZWJzaXRl
RGF0YVN0b3JlUmVmIGRhdGFTdG9yZVJlZik7CiAKK3R5cGVkZWYgdm9pZCAoKldLV2Vic2l0ZURh
dGFTdG9yZUdldEZldGNoQ2FjaGVPcmlnaW5zRnVuY3Rpb24pKFdLQXJyYXlSZWYsIHZvaWQqKTsK
K1dLX0VYUE9SVCB2b2lkIFdLV2Vic2l0ZURhdGFTdG9yZUdldEZldGNoQ2FjaGVPcmlnaW5zKFdL
V2Vic2l0ZURhdGFTdG9yZVJlZiBkYXRhU3RvcmVSZWYsIHZvaWQqIGNvbnRleHQsIFdLV2Vic2l0
ZURhdGFTdG9yZUdldEZldGNoQ2FjaGVPcmlnaW5zRnVuY3Rpb24gZnVuY3Rpb24pOworCiAjaWZk
ZWYgX19jcGx1c3BsdXMKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIv
VG9vbHMvQ2hhbmdlTG9nCmluZGV4IDUwYWVjNTMwOGQ4MmZlNDhiOTVlNGY3ODEzZDNmMzkxOTBm
MDE0ZmQuLjVkNzNhYWM1YzJlZDgyMzQyYmVhODFjMjEzYzE2MTkxMjYyNDhlYTAgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNCBA
QAorMjAxNy0xMC0xMyAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CisKKyAgICAg
ICAgSW1wbGVtZW50IGxpc3Rpbmcgb3JpZ2lucyBmb3Igd2hpY2ggQ2FjaGVTdG9yYWdlIGlzIHN0
b3JpbmcgZGF0YQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTc4MjM2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQ2hyaXMgRHVtZXouCisKKyAgICAgICAg
QWRkaW5nIGhhc0RPTUNhY2hlIEFQSSBmb3IgY2hlY2tpbmcgd2hldGhlciBvcmlnaW4gaXMgc3Rv
cmluZyBkYXRhIHRocm91Z2ggQ2FjaGUgQVBJLgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5l
ci9JbmplY3RlZEJ1bmRsZS9CaW5kaW5ncy9UZXN0UnVubmVyLmlkbDoKKyAgICAgICAgKiBXZWJL
aXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuY3BwOgorICAgICAgICAoV1RS
OjpUZXN0UnVubmVyOjpoYXNET01DYWNoZSk6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9J
bmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmg6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9U
ZXN0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXVFI6OkZldGNoQ2FjaGVPcmlnaW5zQ2FsbGJh
Y2tDb250ZXh0OjpGZXRjaENhY2hlT3JpZ2luc0NhbGxiYWNrQ29udGV4dCk6CisgICAgICAgIChX
VFI6OmZldGNoQ2FjaGVPcmlnaW5zQ2FsbGJhY2spOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJv
bGxlcjo6aGFzRE9NQ2FjaGUpOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRy
b2xsZXIuaDoKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0aW9uLmNwcDoK
KyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246OmRpZFJlY2VpdmVTeW5jaHJvbm91c01lc3Nh
Z2VGcm9tSW5qZWN0ZWRCdW5kbGUpOgorCiAyMDE3LTEwLTEyICBDaHJpcyBEdW1leiAgPGNkdW1l
ekBhcHBsZS5jb20+CiAKICAgICAgICAgaW1wb3J0LXczYy10ZXN0cyBtb2RpZmllcyB0ZXN0IHNv
dXJjZXMgYW5kIHNvbWV0aW1lcyBjYXVzZXMgdGhlbSB0byBmYWlsCmRpZmYgLS1naXQgYS9Ub29s
cy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0JpbmRpbmdzL1Rlc3RSdW5uZXIuaWRs
IGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9CaW5kaW5ncy9UZXN0UnVu
bmVyLmlkbAppbmRleCA2ZmU1NmY2NzI3YjZhNGM1ZTYwZDBhZjU3YzI1OGM5ODcwMGFmMDQzLi4x
Y2RjNjE2YmViODNlYzEzZDc5ZDg4MGZiNmJlZjEzZDkxMjA2YTZhIDEwMDY0NAotLS0gYS9Ub29s
cy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0JpbmRpbmdzL1Rlc3RSdW5uZXIuaWRs
CisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmluZGluZ3MvVGVz
dFJ1bm5lci5pZGwKQEAgLTU4LDYgKzU4LDcgQEAgaW50ZXJmYWNlIFRlc3RSdW5uZXIgewogICAg
IHZvaWQgZHVtcFBvbGljeURlbGVnYXRlQ2FsbGJhY2tzKCk7CiAKICAgICB2b2lkIGNsZWFyRE9N
Q2FjaGUoRE9NU3RyaW5nIG9yaWdpbik7CisgICAgYm9vbGVhbiBoYXNET01DYWNoZShET01TdHJp
bmcgb3JpZ2luKTsKIAogICAgIC8vIFNwZWNpYWwgb3B0aW9ucy4KICAgICB2b2lkIGtlZXBXZWJI
aXN0b3J5KCk7CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVu
ZGxlL1Rlc3RSdW5uZXIuY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRs
ZS9UZXN0UnVubmVyLmNwcAppbmRleCBkNTM4YjcxNTY2MTc3ZDBlODczYzhiYTAwYjY2YmRkNzdk
ODg4YjFhLi5lNjU4NWY0NWZjNGZlZDcwNjBkNTc4ZmIzZjJiYjBlM2EyNjA1NjRiIDEwMDY0NAot
LS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuY3Bw
CisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5j
cHAKQEAgLTE4MzYsNCArMTgzNiwxMyBAQCB2b2lkIFRlc3RSdW5uZXI6OmNsZWFyRE9NQ2FjaGUo
SlNTdHJpbmdSZWYgb3JpZ2luKQogICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJ
bmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBt
ZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0cik7CiB9CiAKK2Jvb2wgVGVzdFJ1bm5lcjo6aGFzRE9N
Q2FjaGUoSlNTdHJpbmdSZWYgb3JpZ2luKQoreworICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBtZXNzYWdlTmFtZShBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiSGFz
RE9NQ2FjaGUiKSk7CisgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VCb2R5KEFk
b3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKG9yaWdpbikpOworICAgIFdLVHlwZVJl
ZiByZXR1cm5EYXRhID0gMDsKKyAgICBXS0J1bmRsZVBhZ2VQb3N0U3luY2hyb25vdXNNZXNzYWdl
Rm9yVGVzdGluZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIG1l
c3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgJnJldHVybkRhdGEpOworICAgIHJl
dHVybiBXS0Jvb2xlYW5HZXRWYWx1ZShzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KHJldHVybkRh
dGEpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV1RSCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRU
ZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuaCBiL1Rvb2xzL1dlYktpdFRlc3RS
dW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5oCmluZGV4IGU4ZWQ2MTYwZWVlMGQ2YjA5
ZmM4ZGVkMmQ5OTBiMTYzMmY3YWYxNDUuLjVjNzBjOTNjNTZjNDYwM2ExNGQwNDJmODk4MjJkN2Q4
MTg5ZDViZWQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5k
bGUvVGVzdFJ1bm5lci5oCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5k
bGUvVGVzdFJ1bm5lci5oCkBAIC0xNjUsNiArMTY1LDcgQEAgcHVibGljOgogICAgIEpTVmFsdWVS
ZWYgb3JpZ2luc1dpdGhBcHBsaWNhdGlvbkNhY2hlKCk7CiAKICAgICB2b2lkIGNsZWFyRE9NQ2Fj
aGUoSlNTdHJpbmdSZWYgb3JpZ2luKTsKKyAgICBib29sIGhhc0RPTUNhY2hlKEpTU3RyaW5nUmVm
IG9yaWdpbik7CiAKICAgICAvLyBGYWlsZWQgbG9hZCBjb25kaXRpb24gdGVzdGluZwogICAgIHZv
aWQgZm9yY2VJbW1lZGlhdGVDb21wbGV0aW9uKCk7CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRU
ZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVz
dENvbnRyb2xsZXIuY3BwCmluZGV4IGVmMGU1Y2UzMGJjNzk3MWU4NDcxZjQ1ZTYwODViZDZmNDdm
YzVjYTMuLmRjNzg1YmNkZDQ0YTkzNTkwZmMyM2E4YjJiZmVhY2Q3MzVkOTkwMTUgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCisrKyBiL1Rvb2xz
L1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCkBAIC0yMzM1LDYgKzIzMzUsNDQg
QEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6Y2xlYXJET01DYWNoZShXS1N0cmluZ1JlZiBvcmlnaW4p
CiAjZW5kaWYKIH0KIAorc3RydWN0IEZldGNoQ2FjaGVPcmlnaW5zQ2FsbGJhY2tDb250ZXh0IHsK
KyAgICBGZXRjaENhY2hlT3JpZ2luc0NhbGxiYWNrQ29udGV4dChUZXN0Q29udHJvbGxlciYgY29u
dHJvbGxlciwgV0tTdHJpbmdSZWYgb3JpZ2luKQorICAgICAgICA6IHRlc3RDb250cm9sbGVyKGNv
bnRyb2xsZXIpCisgICAgICAgICwgb3JpZ2luKG9yaWdpbikKKyAgICB7CisgICAgfQorCisgICAg
VGVzdENvbnRyb2xsZXImIHRlc3RDb250cm9sbGVyOworICAgIFdLU3RyaW5nUmVmIG9yaWdpbjsK
KworICAgIGJvb2wgZG9uZSB7IGZhbHNlIH07CisgICAgYm9vbCByZXN1bHQgeyBmYWxzZSB9Owor
fTsKKworc3RhdGljIHZvaWQgZmV0Y2hDYWNoZU9yaWdpbnNDYWxsYmFjayhXS0FycmF5UmVmIG9y
aWdpbnMsIHZvaWQqIHVzZXJEYXRhKQoreworICAgIGF1dG8qIGNvbnRleHQgPSBzdGF0aWNfY2Fz
dDxGZXRjaENhY2hlT3JpZ2luc0NhbGxiYWNrQ29udGV4dCo+KHVzZXJEYXRhKTsKKyAgICBjb250
ZXh0LT5kb25lID0gdHJ1ZTsKKworICAgIGF1dG8gc2l6ZSA9IFdLQXJyYXlHZXRTaXplKG9yaWdp
bnMpOworICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBzaXplICYmICFjb250ZXh0
LT5yZXN1bHQ7ICsraW5kZXgpIHsKKyAgICAgICAgV0tTZWN1cml0eU9yaWdpblJlZiBzZWN1cml0
eU9yaWdpbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8V0tTZWN1cml0eU9yaWdpblJlZj4oV0tBcnJheUdl
dEl0ZW1BdEluZGV4KG9yaWdpbnMsIGluZGV4KSk7CisgICAgICAgIGlmIChXS1N0cmluZ0lzRXF1
YWwoY29udGV4dC0+b3JpZ2luLCBhZG9wdFdLKFdLU2VjdXJpdHlPcmlnaW5Db3B5VG9TdHJpbmco
c2VjdXJpdHlPcmlnaW4pKS5nZXQoKSkpCisgICAgICAgICAgICBjb250ZXh0LT5yZXN1bHQgPSB0
cnVlOworICAgIH0KKyAgICBjb250ZXh0LT50ZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Cit9
CisKK2Jvb2wgVGVzdENvbnRyb2xsZXI6Omhhc0RPTUNhY2hlKFdLU3RyaW5nUmVmIG9yaWdpbikK
K3sKKyAgICBhdXRvKiBkYXRhU3RvcmUgPSBXS0NvbnRleHRHZXRXZWJzaXRlRGF0YVN0b3JlKHBs
YXRmb3JtQ29udGV4dCgpKTsKKyAgICBGZXRjaENhY2hlT3JpZ2luc0NhbGxiYWNrQ29udGV4dCBj
b250ZXh0KCp0aGlzLCBvcmlnaW4pOworICAgIFdLV2Vic2l0ZURhdGFTdG9yZUdldEZldGNoQ2Fj
aGVPcmlnaW5zKGRhdGFTdG9yZSwgJmNvbnRleHQsIGZldGNoQ2FjaGVPcmlnaW5zQ2FsbGJhY2sp
OworICAgIGlmICghY29udGV4dC5kb25lKQorICAgICAgICBydW5VbnRpbChjb250ZXh0LmRvbmUs
IG1fY3VycmVudEludm9jYXRpb24tPnNob3J0VGltZW91dCgpKTsKKyAgICByZXR1cm4gY29udGV4
dC5yZXN1bHQ7Cit9CisKICNpZiAhUExBVEZPUk0oQ09DT0EpIHx8ICFXS19BUElfRU5BQkxFRAog
CiB2b2lkIFRlc3RDb250cm9sbGVyOjpzZXRTdGF0aXN0aWNzTGFzdFNlZW4oV0tTdHJpbmdSZWYg
aG9zdCwgZG91YmxlIHNlY29uZHMpCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVy
L1Rlc3RDb250cm9sbGVyLmggYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVy
LmgKaW5kZXggNDc0OWJkZGE0M2ZlMGFhNGI1Njk2ZjU3MDJiYmM0NGI2NjE0YjdiYS4uOWI1ODY2
OWJlZTNiNGFiZjllYTQxM2Q0MWExZmYzNzY0NWE5NWY4ZSAxMDA2NDQKLS0tIGEvVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5oCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvVGVzdENvbnRyb2xsZXIuaApAQCAtMTgzLDYgKzE4Myw4IEBAIHB1YmxpYzoKICAgICB2b2lk
IHN0YXRpc3RpY3NDbGVhclRocm91Z2hXZWJzaXRlRGF0YVJlbW92YWwoKTsKICAgICB2b2lkIHN0
YXRpc3RpY3NSZXNldFRvQ29uc2lzdGVudFN0YXRlKCk7CiAKKyAgICBib29sIGhhc0RPTUNhY2hl
KFdLU3RyaW5nUmVmKTsKKwogICAgIFdLQXJyYXlSZWYgb3BlblBhbmVsRmlsZVVSTHMoKSBjb25z
dCB7IHJldHVybiBtX29wZW5QYW5lbEZpbGVVUkxzLmdldCgpOyB9CiAgICAgdm9pZCBzZXRPcGVu
UGFuZWxGaWxlVVJMcyhXS0FycmF5UmVmIGZpbGVVUkxzKSB7IG1fb3BlblBhbmVsRmlsZVVSTHMg
PSBmaWxlVVJMczsgfQogCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RJ
bnZvY2F0aW9uLmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdEludm9jYXRpb24uY3Bw
CmluZGV4IGM3OTNhMDQyMjU0MWVmZmRlYmExYTIwZjAzMjViNjA3MmQyNDM0MzMuLmY2Yjc3OGMy
YmY0ZjdmYzA0N2RlMmFhMDQ2YmRkNDcwZTg3NDE2YjEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktp
dFRlc3RSdW5uZXIvVGVzdEludm9jYXRpb24uY3BwCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvVGVzdEludm9jYXRpb24uY3BwCkBAIC0xMjEwLDYgKzEyMTAsMTUgQEAgV0tSZXRhaW5QdHI8
V0tUeXBlUmVmPiBUZXN0SW52b2NhdGlvbjo6ZGlkUmVjZWl2ZVN5bmNocm9ub3VzTWVzc2FnZUZy
b21JbmplY3RlZEIKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCisgICAgaWYgKFdL
U3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJIYXNET01DYWNoZSIpKSB7
CisgICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tTdHJpbmdHZXRU
eXBlSUQoKSk7CisgICAgICAgIFdLU3RyaW5nUmVmIG9yaWdpbiA9IHN0YXRpY19jYXN0PFdLU3Ry
aW5nUmVmPihtZXNzYWdlQm9keSk7CisKKyAgICAgICAgYm9vbCBoYXNET01DYWNoZSA9IFRlc3RD
b250cm9sbGVyOjpzaW5nbGV0b24oKS5oYXNET01DYWNoZShvcmlnaW4pOworICAgICAgICBXS1Jl
dGFpblB0cjxXS1R5cGVSZWY+IHJlc3VsdChBZG9wdFdLLCBXS0Jvb2xlYW5DcmVhdGUoaGFzRE9N
Q2FjaGUpKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBmMmEzMTRlNTg5MTNi
YTEwOTg4ZGNiNDIyNGE2YjNiOGNjYzM0MWNiLi5hMzYyZjczODg5ZDcxNzk0MTVkYjMxMTIwNzNk
NDljNTNhNjNjM2MyIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMTQgQEAKIDIwMTctMTAtMTMgIFlvdWVubiBG
YWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29tPgogCisgICAgICAgIEltcGxlbWVudCBsaXN0aW5nIG9y
aWdpbnMgZm9yIHdoaWNoIENhY2hlU3RvcmFnZSBpcyBzdG9yaW5nIGRhdGEKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3ODIzNgorCisgICAgICAgIFJl
dmlld2VkIGJ5IENocmlzIER1bWV6LgorCisgICAgICAgICogaHR0cC90ZXN0cy9jYWNoZS1zdG9y
YWdlL2NhY2hlLWNsZWFyaW5nLW9yaWdpbi5odHRwcy5odG1sOgorCisyMDE3LTEwLTEzICBZb3Vl
bm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KKwogICAgICAgICBodHRwL3Rlc3RzL2NhY2hl
LXN0b3JhZ2UvY2FjaGUtb3JpZ2lucy5odHRwcy5odG1sIGlzIGZsYWt5CiAgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzgyNjYKIApkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9jYWNoZS1zdG9yYWdlL2NhY2hlLWNsZWFyaW5nLW9yaWdp
bi5odHRwcy5odG1sIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9jYWNoZS1zdG9yYWdlL2NhY2hl
LWNsZWFyaW5nLW9yaWdpbi5odHRwcy5odG1sCmluZGV4IDFhZDdiNDIyNjM5ZmZiMTNmOTQ3MDI5
OTA2ZTQwNDBhMmI1OTQzZWUuLjA5MGI2NWU2NzQ3MDI0MmNiZWZhMTY3ZTU2ZGZhODA4ZGNiMWVj
ZmQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvY2FjaGUtc3RvcmFnZS9jYWNo
ZS1jbGVhcmluZy1vcmlnaW4uaHR0cHMuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L2NhY2hlLXN0b3JhZ2UvY2FjaGUtY2xlYXJpbmctb3JpZ2luLmh0dHBzLmh0bWwKQEAgLTIyLDEy
ICsyMiwxOCBAQCBwcm9taXNlX3Rlc3QoYXN5bmMgdGVzdCA9PiB7CiAKICAgICBpZiAoIXdpbmRv
dy50ZXN0UnVubmVyKQogICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoInRlc3QgcnVubmVy
IG5lZWRlZCIpOworCisgICAgYXNzZXJ0X2ZhbHNlKHRlc3RSdW5uZXIuaGFzRE9NQ2FjaGUoJ2h0
dHBzOi8vbG9jYWxob3N0OjgwJyksICdoYXNET01DYWNoZSB3aXRoIGZha2Ugb3JpZ2luJyk7Cisg
ICAgYXNzZXJ0X3RydWUodGVzdFJ1bm5lci5oYXNET01DYWNoZSh3aW5kb3cubG9jYXRpb24ub3Jp
Z2luKSwgImhhc0RPTUNhY2hlIHdpdGggYWN0dWFsIG9yaWdpbiIpOworCiAgICAgdGVzdFJ1bm5l
ci5jbGVhckRPTUNhY2hlKCdodHRwczovL2xvY2FsaG9zdDo4MCcpOwogCiAgICAgdmFyIGtleXMg
PSBhd2FpdCBzZWxmLmNhY2hlcy5rZXlzKCk7CiAgICAgYXNzZXJ0X25vdF9lcXVhbHMoa2V5cy5s
ZW5ndGgsIDAsICJrZXlzIHNob3VsZCBub3QgYmUgZW1wdHkiKTsKIAogICAgIHRlc3RSdW5uZXIu
Y2xlYXJET01DYWNoZSh3aW5kb3cubG9jYXRpb24ub3JpZ2luKTsKKyAgICBhc3NlcnRfZmFsc2Uo
dGVzdFJ1bm5lci5oYXNET01DYWNoZSh3aW5kb3cubG9jYXRpb24ub3JpZ2luKSwgIkFjdHVhbCBv
cmlnaW4gY2FjaGUgaXMgY2xlYXJlZCIpOworCiAgICAga2V5cyA9IGF3YWl0IHNlbGYuY2FjaGVz
LmtleXMoKTsKICAgICBhc3NlcnRfZXF1YWxzKGtleXMubGVuZ3RoLCAwLCAia2V5cyBzaG91bGQg
YmUgZW1wdHkiKTsKIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>