<?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>212482</bug_id>
          
          <creation_ts>2020-05-28 11:51:44 -0700</creation_ts>
          <short_desc>[macOS] Drag/drop an image of a unsupported format to an file input element should convert it to a supported format</short_desc>
          <delta_ts>2020-08-09 22:12:40 -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>Images</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>
          <dependson>212489</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Said Abou-Hallawa">sabouhallawa</reporter>
          <assigned_to name="Said Abou-Hallawa">sabouhallawa</assigned_to>
          <cc>cdumez</cc>
    
    <cc>changseok</cc>
    
    <cc>darin</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>mifenton</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>wenson_hsieh</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1656946</commentid>
    <comment_count>0</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-05-28 11:51:44 -0700</bug_when>
    <thetext>If a page has an &lt;input&gt; file element which accepts an image like one of these:

&lt;input type=&quot;file&quot; accept=&quot;image/*&quot;&gt;
&lt;input type=&quot;file&quot; accept=&quot;image/png, image/jpeg&quot;&gt;

And the user drags/drops an image of unsupported format, HEIF for example, the image should be converted to one of the formats in the &quot;accept&quot; attribute if possible. This will be similar to what happens when dragging and dropping a photo from the &quot;Photos&quot; app which is converting the HEIF image to JPEG image.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1657004</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-05-28 13:56:10 -0700</bug_when>
    <thetext>&lt;rdar://problem/63731672&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1664896</commentid>
    <comment_count>2</comment_count>
      <attachid>402432</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-06-21 15:47:52 -0700</bug_when>
    <thetext>Created attachment 402432
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1678091</commentid>
    <comment_count>3</comment_count>
      <attachid>406041</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-08-05 14:40:50 -0700</bug_when>
    <thetext>Created attachment 406041
Patch

WIP patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1678093</commentid>
    <comment_count>4</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-08-05 14:42:31 -0700</bug_when>
    <thetext>This patch is mostly working. It still needs some clean-up and maybe threading.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1678097</commentid>
    <comment_count>5</comment_count>
      <attachid>406044</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-08-05 14:51:36 -0700</bug_when>
    <thetext>Created attachment 406044
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1678102</commentid>
    <comment_count>6</comment_count>
      <attachid>406047</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-08-05 15:05:00 -0700</bug_when>
    <thetext>Created attachment 406047
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1678115</commentid>
    <comment_count>7</comment_count>
      <attachid>406051</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-08-05 15:32:19 -0700</bug_when>
    <thetext>Created attachment 406051
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1678489</commentid>
    <comment_count>8</comment_count>
      <attachid>406141</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-08-06 18:03:37 -0700</bug_when>
    <thetext>Created attachment 406141
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1678493</commentid>
    <comment_count>9</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-08-06 18:07:02 -0700</bug_when>
    <thetext>Layout test were added.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1678838</commentid>
    <comment_count>10</comment_count>
      <attachid>406235</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-08-07 17:30:12 -0700</bug_when>
    <thetext>Created attachment 406235
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1678909</commentid>
    <comment_count>11</comment_count>
      <attachid>406235</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-08-08 11:25:27 -0700</bug_when>
    <thetext>Comment on attachment 406235
Patch

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

&gt; Source/WebCore/html/FileInputType.cpp:504
&gt; +    sharedImageTranscodingQueue()-&gt;dispatch([this, protectedThis = makeRef(*this), paths = paths.isolatedCopy(), transcodingPaths = transcodingPaths.isolatedCopy(), transcodingUTI = transcodingUTI.isolatedCopy(), transcodingExtension = transcodingExtension.isolatedCopy()]() mutable {

Not 100% sure about the efficiency/thread-safety here.

With protectedThis seems like we are carefully passing this in a way that does not require a thread-safe reference count. Perhaps we could use the same approach with &quot;paths&quot; that we use with protectedThis, and not make an isolated copy, since it’s only going to be used back on the main thread. I think that means that here we would write &quot;paths&quot; and below we would write paths = WTFMove(paths) and it would be safe for the same reason that protectedThis is safe.

Alternatively we could change InputType to use ThreadSafeRefCounted, to make this more obviously thread safe.

Maybe another way to write this that’s more obviously safe would be to create another inner lambda, one that takes a replacementPaths argument, as a local variable and capture *that* in the the outer lambda. Then we would not need to capture &quot;this&quot;, &quot;protectedThis&quot;, or &quot;paths&quot; in the outer lambda:

    auto callFilesChosen = [protectedThis = makeRef(this), paths] (const Vector&lt;String&gt;&amp; replacementPaths) {
        protectedThis-&gt;filesChosen(paths, replacementPaths);
    };
    sharedImageTranscodingQueue()-&gt;dispatch([callFilesChosen = WTFMove(callFilesChosen), transcodingPaths = transcodingPaths.isolatedCopy(), transcodingUTI = transcodingUTI.isolatedCopy(), transcodingExtension = transcodingExtension.isolatedCopy()]() mutable {
        ASSERT(!RunLoop::isMain());
        auto replacementPaths = transcodeImages(transcodingPaths, transcodingUTI, transcodingExtension);
        ASSERT(transcodingPaths.size() == replacementPaths.size());
        RunLoop::main().dispatch([callFilesChosen = WTFMove(callFilesChosen), replacementPaths = replacementPaths.isolatedCopy()]() {
            callFilesChosen(replacementPaths);
        });
    });

I think the thread safety is easier to understand in that version.

&gt; Source/WebCore/platform/graphics/ImageUtilities.h:30
&gt; +WEBCORE_EXPORT Ref&lt;WorkQueue&gt; sharedImageTranscodingQueue();

I suggest this return WorkQueue&amp; instead of Ref&lt;WorkQueue&gt; since the queue in question is global and immortal. No reason to return a newly protected pointer each time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1678989</commentid>
    <comment_count>12</comment_count>
      <attachid>406273</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-08-09 15:06:08 -0700</bug_when>
    <thetext>Created attachment 406273
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1679002</commentid>
    <comment_count>13</comment_count>
      <attachid>406235</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-08-09 21:44:45 -0700</bug_when>
    <thetext>Comment on attachment 406235
Patch

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

&gt;&gt; Source/WebCore/html/FileInputType.cpp:504
&gt;&gt; +    sharedImageTranscodingQueue()-&gt;dispatch([this, protectedThis = makeRef(*this), paths = paths.isolatedCopy(), transcodingPaths = transcodingPaths.isolatedCopy(), transcodingUTI = transcodingUTI.isolatedCopy(), transcodingExtension = transcodingExtension.isolatedCopy()]() mutable {
&gt; 
&gt; Not 100% sure about the efficiency/thread-safety here.
&gt; 
&gt; With protectedThis seems like we are carefully passing this in a way that does not require a thread-safe reference count. Perhaps we could use the same approach with &quot;paths&quot; that we use with protectedThis, and not make an isolated copy, since it’s only going to be used back on the main thread. I think that means that here we would write &quot;paths&quot; and below we would write paths = WTFMove(paths) and it would be safe for the same reason that protectedThis is safe.
&gt; 
&gt; Alternatively we could change InputType to use ThreadSafeRefCounted, to make this more obviously thread safe.
&gt; 
&gt; Maybe another way to write this that’s more obviously safe would be to create another inner lambda, one that takes a replacementPaths argument, as a local variable and capture *that* in the the outer lambda. Then we would not need to capture &quot;this&quot;, &quot;protectedThis&quot;, or &quot;paths&quot; in the outer lambda:
&gt; 
&gt;     auto callFilesChosen = [protectedThis = makeRef(this), paths] (const Vector&lt;String&gt;&amp; replacementPaths) {
&gt;         protectedThis-&gt;filesChosen(paths, replacementPaths);
&gt;     };
&gt;     sharedImageTranscodingQueue()-&gt;dispatch([callFilesChosen = WTFMove(callFilesChosen), transcodingPaths = transcodingPaths.isolatedCopy(), transcodingUTI = transcodingUTI.isolatedCopy(), transcodingExtension = transcodingExtension.isolatedCopy()]() mutable {
&gt;         ASSERT(!RunLoop::isMain());
&gt;         auto replacementPaths = transcodeImages(transcodingPaths, transcodingUTI, transcodingExtension);
&gt;         ASSERT(transcodingPaths.size() == replacementPaths.size());
&gt;         RunLoop::main().dispatch([callFilesChosen = WTFMove(callFilesChosen), replacementPaths = replacementPaths.isolatedCopy()]() {
&gt;             callFilesChosen(replacementPaths);
&gt;         });
&gt;     });
&gt; 
&gt; I think the thread safety is easier to understand in that version.

This is neat.

I have just realized that lambda captures its parameters when it&apos;s defined not when it is called. Using this solution, we do not have to capture *this&quot; twice: (1) from the main thread to the transcoding thread and (2) form the transcoding thread back to the main thread.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1679008</commentid>
    <comment_count>14</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-08-09 22:12:40 -0700</bug_when>
    <thetext>Committed r265422: &lt;https://trac.webkit.org/changeset/265422&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 406273.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>402432</attachid>
            <date>2020-06-21 15:47:52 -0700</date>
            <delta_ts>2020-06-21 15:48:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-212482-20200621154751.patch</filename>
            <type>text/plain</type>
            <size>52690</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYyOTE1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjI3ZjViMDc5OGIzZDkz
MWYyNjIyOTg0YWYzMDcxZDQ5ZDlkYTk1OS4uOTk1MjIwZTI5ZjJiYWRkOGVkYzlmZDAwMWI2Zjhj
ZjZlNzcxNjhjZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDczIEBACisyMDIwLTA2LTIxICBTYWlk
IEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgW21hY09T
XSBEcmFnL2Ryb3AgYW4gaW1hZ2Ugb2YgYSB1bnN1cHBvcnRlZCBmb3JtYXQgdG8gYW4gPGlucHV0
IHR5cGU9ImZpbGUiPiBlbGVtZW50IHNob3VsZCBjb252ZXJ0IGl0IHRvIGEgc3VwcG9ydGVkIGZv
cm1hdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEy
NDgyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSWYg
dGhlIHR5cGUgb2YgdGhlIHNlbGVjdGVkIGltYWdlIGlzIG5vdCBvbmUgb2YgdGhlIGFsbG93ZWQg
dHlwZXMsIHRoZQorICAgICAgICBpbWFnZSB3aWxsIGJlIGNvbnZlcnRlZCB0byB0aGUgZmlyc3Qg
ZGVzdGluYXRpb24gYWxsb3dlZCBpbWFnZSB0eXBlIGFuZAorICAgICAgICBpdCB3aWxsIGJlIHdy
aXR0ZW4gdG8gYSB0ZW1wb3JhcnkgZmlsZS4gVGhpcyBmaWxlIGlzIGEgcmVwbGFjZW1lbnQgdG8g
dGhlCisgICAgICAgIG9yaWdpbmFsIGltYWdlLCBzbyB0aGUgdHlwZSwgdGhlIHNpemUgYW5kIHRo
ZSBkYXRhIHdpbGwgYmUgcmVhZCBmcm9tIGl0CisgICAgICAgIGluc3RlYWQgb2YgdGhlIHNlbGVj
dGVkIGltYWdlLgorCisgICAgICAgICogZmlsZWFwaS9CbG9iLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkJsb2I6OkJsb2IpOgorICAgICAgICAqIGZpbGVhcGkvQmxvYi5oOgorICAgICAgICAoV2Vi
Q29yZTo6QmxvYjo6dHlwZSBjb25zdCk6CisgICAgICAgICogZmlsZWFwaS9GaWxlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkZpbGU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGaWxlOjpG
aWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbGU6OmNvbnRlbnRUeXBlRm9yRmlsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpGaWxlOjpkZXN0aW5hdGlvblR5cGVGb3JGaWxlKToKKyAgICAgICAgKFdl
YkNvcmU6OkZpbGU6Om5hbWVGb3JGaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbGU6OmNvbXB1
dGVOYW1lQW5kQ29udGVudFR5cGUpOiBEZWxldGVkLgorICAgICAgICAqIGZpbGVhcGkvRmlsZS5o
OgorICAgICAgICAqIGZpbGVhcGkvRmlsZUNvY29hLm1tOgorICAgICAgICAoV2ViQ29yZTo6Rmls
ZTo6aXNGaWxlVHlwZVBhY2thZ2UpOgorICAgICAgICAoV2ViQ29yZTo6RmlsZTo6c2hvdWxkUmVw
bGFjZUZpbGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsZTo6Y29tcHV0ZU5hbWVB
bmRDb250ZW50VHlwZUZvclJlcGxhY2VkRmlsZSk6IERlbGV0ZWQuCisgICAgICAgICogZmlsZWFw
aS9UaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRocmVhZGFi
bGVCbG9iUmVnaXN0cnk6OnJlZ2lzdGVyRmlsZUJsb2JVUkwpOgorICAgICAgICAqIGZpbGVhcGkv
VGhyZWFkYWJsZUJsb2JSZWdpc3RyeS5oOgorICAgICAgICAqIGh0bWwvRmlsZUlucHV0VHlwZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpGaWxlSW5wdXRUeXBlOjpmaWxlc0Nob3Nlbik6CisgICAg
ICAgICogaHRtbC9GaWxlSW5wdXRUeXBlLmg6CisgICAgICAgICogaHRtbC9GaWxlTGlzdENyZWF0
b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RmlsZUxpc3RDcmVhdG9yOjpGaWxlTGlzdENyZWF0
b3IpOgorICAgICAgICAoV2ViQ29yZTo6RmlsZUxpc3RDcmVhdG9yOjpjcmVhdGVGaWxlTGlzdCk6
CisgICAgICAgICogaHRtbC9GaWxlTGlzdENyZWF0b3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZp
bGVMaXN0Q3JlYXRvcjo6Y3JlYXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9GaWxlQ2hvb3Nlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpGaWxlQ2hvb3Nlcjo6YWxsb3dlZFR5cGVzIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZpbGVDaG9vc2VyOjpjaG9vc2VGaWxlcyk6CisgICAgICAgICog
cGxhdGZvcm0vRmlsZUNob29zZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVDaG9vc2VyQ2xp
ZW50OjpmaWxlc0Nob3Nlbik6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9CbG9iRGF0YUZp
bGVSZWZlcmVuY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QmxvYkRhdGFGaWxlUmVmZXJlbmNl
OjpCbG9iRGF0YUZpbGVSZWZlcmVuY2UpOgorICAgICAgICAoV2ViQ29yZTo6QmxvYkRhdGFGaWxl
UmVmZXJlbmNlOjp+QmxvYkRhdGFGaWxlUmVmZXJlbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkJs
b2JEYXRhRmlsZVJlZmVyZW5jZTo6cGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpCbG9iRGF0YUZp
bGVSZWZlcmVuY2U6OnNpemUpOgorICAgICAgICAoV2ViQ29yZTo6QmxvYkRhdGFGaWxlUmVmZXJl
bmNlOjpleHBlY3RlZE1vZGlmaWNhdGlvblRpbWUpOgorICAgICAgICAoV2ViQ29yZTo6QmxvYkRh
dGFGaWxlUmVmZXJlbmNlOjpzdGFydFRyYWNraW5nTW9kaWZpY2F0aW9ucyk6CisgICAgICAgICog
cGxhdGZvcm0vbmV0d29yay9CbG9iRGF0YUZpbGVSZWZlcmVuY2UuaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9uZXR3b3JrL21hYy9CbG9iRGF0YUZpbGVSZWZlcmVuY2VNYWMubW06CisgICAgICAgIChX
ZWJDb3JlOjpCbG9iRGF0YUZpbGVSZWZlcmVuY2U6OmdlbmVyYXRlUmVwbGFjZW1lbnRGaWxlKToK
KworMjAyMC0wNi0xNiAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29t
PgorCisgICAgICAgIFttYWNPU106IFRoZSBGaWxlIFBpY2tlciBvZiB0aGUgPGlucHV0PiBmaWxl
IGVsZW1lbnQgYWxsb3cgc2VsZWN0aW5nIGFsbCBmaWxlcyB3aGljaCBjYW4gYmUgY29udmVydGVk
IHRvIGFueSBvZiB0aGUgImFjY2VwdCIgYXR0cmlidXRlIGZvcm1hdHMKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMjQ4OQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogZW4ubHByb2ovTG9jYWxpemFibGUu
c3RyaW5nczoKKyAgICAgICAgQWRkIGxvY2FsaXphYmxlIHN0cmluZ3MgZm9yIHRoZSBPcGVuUGFu
ZWwgZmlsdGVyLgorCisgICAgICAgICogcGxhdGZvcm0vTUlNRVR5cGVSZWdpc3RyeS5oOgorICAg
ICAgICBFeHBvcnQgYSBNSU1FVHlwZVJlZ2lzdHJ5IEFQSSB0byBiZSByZWZlcmVuY2VkIGZyb20g
V2ViS2l0IHByb2plY3QuCisKKwogMjAyMC0wNi0xMSAgQmV0aCBEYWtpbiAgPGJkYWtpbkBhcHBs
ZS5jb20+CiAKICAgICAgICAgUmVtb3ZlIHJlZmVyZW5jZXMgdG8gInNsYXZlIiBpbiBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hh
bmdlTG9nCmluZGV4IDMxNWYxZTI1ODk1MmYyMmU3OWQ5ZmZlNjlhY2QyNjdlMTc2N2M3OTIuLmVj
M2YyMjQ0YzRiNjkyN2ZmYWEyMjZlZDBlZmM5Zjk3NWNkMjY4ZDIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMTkgQEAKKzIwMjAtMDYtMTYgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2Fib3VoYWxsYXdhQGFw
cGxlLmNvbT4KKworICAgICAgICBbbWFjT1NdOiBUaGUgRmlsZSBQaWNrZXIgb2YgdGhlIDxpbnB1
dD4gZmlsZSBlbGVtZW50IGFsbG93IHNlbGVjdGluZyBhbGwgZmlsZXMgd2hpY2ggY2FuIGJlIGNv
bnZlcnRlZCB0byBhbnkgb2YgdGhlICJhY2NlcHQiIGF0dHJpYnV0ZSBmb3JtYXRzCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTI0ODkKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJZiBvbmUgb2YgdGhlIG1p
bWUgdHlwZXMgaW4gdGhlICJhY2NlcHQiIGF0dHJpYnV0ZSBpcyBhbiBhbGxvd2VkIGRlc3RlbmF0
aW9uCisgICAgICAgIGltYWdlIGZvcm1hdCwgYWRkIGEgbmV3IGl0ZW0gaW4gdGhlIE9wZW5QYW5l
bCBmaWx0ZXIgbmFtZWQgIkltYWdlIEZpbGVzIi4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
Q29jb2EvV0tPcGVuUGFuZWxQYXJhbWV0ZXJzLm1tOgorICAgICAgICAobWltZVR5cGVGb3JFeHRl
bnNpb24pOgorICAgICAgICAoLVtXS09wZW5QYW5lbFBhcmFtZXRlcnMgX2FsbEltYWdlRmlsZUV4
dGVuc2lvbnNdKToKKyAgICAgICAgKC1bV0tPcGVuUGFuZWxQYXJhbWV0ZXJzIF9hbGxvd2VkRmls
ZUV4dGVuc2lvbnNUaXRsZXNdKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLT3Bl
blBhbmVsUGFyYW1ldGVyc1ByaXZhdGUuaDoKKwogMjAyMC0wNi0xMSAgSm9uYXRoYW4gQmVkYXJk
ICA8amJlZGFyZEBhcHBsZS5jb20+CiAKICAgICAgICAgV2ViS2l0OiBBZGQgVUlLaXQgU1BJIGZv
ciB3YXRjaE9TIGFuZCB0dk9TCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lbi5scHJvai9M
b2NhbGl6YWJsZS5zdHJpbmdzIGIvU291cmNlL1dlYkNvcmUvZW4ubHByb2ovTG9jYWxpemFibGUu
c3RyaW5ncwppbmRleCAxNjQ3ZDIzZmZhYWNmZDM4ZDQ1MTJiM2ZmNDZiOTAwNGRkOTkzZmU1Li5k
MzYwYTAzODAyZDgyZWU5YzQ5MWQ5YjU0NWFhNjNmNGQ4MjczMTY2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9lbi5scHJvai9Mb2NhbGl6YWJsZS5zdHJpbmdzCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2VuLmxwcm9qL0xvY2FsaXphYmxlLnN0cmluZ3MKQEAgLTYxLDYgKzYxLDE1IEBACiAvKiBO
YW1lIG9mIGFwcGxpY2F0aW9uJ3Mgc2luZ2xlIFdlYkNyeXB0byBtYXN0ZXIga2V5IGluIEtleWNo
YWluICovCiAiJUAgV2ViQ3J5cHRvIE1hc3RlciBLZXkiID0gIiVAIFdlYkNyeXB0byBNYXN0ZXIg
S2V5IjsKIAorLyogQXVkaW8gZm9ybWF0IHR5cGUgaW4gZmlsZSBwaWNrZXIgKi8KKyIlQCBhdWRp
byIgPSAiJUAgYXVkaW8iOworCisvKiBJbWFnZSBmb3JtYXQgdHlwZSBpbiBmaWxlIHBpY2tlciAq
LworIiVAIGltYWdlIiA9ICIlQCBpbWFnZSI7CisKKy8qIFZpZGVvIGZvcm1hdCB0eXBlIGluIGZp
bGUgcGlja2VyICovCisiJUAgdmlkZW8iID0gIiVAIHZpZGVvIjsKKwogLyogTGFiZWwgdG8gZGVz
Y3JpYmUgdGhlIG51bWJlciBvZiBmaWxlcyBzZWxlY3RlZCBpbiBhIGZpbGUgdXBsb2FkIGNvbnRy
b2wgdGhhdCBhbGxvd3MgbXVsdGlwbGUgZmlsZXMgKi8KICIlZCBmaWxlcyIgPSAiJWQgZmlsZXMi
OwogCkBAIC0xMTUsNiArMTI0LDkgQEAKIC8qIFVuZG8gYWN0aW9uIG5hbWUgKi8KICJBbGlnbiBS
aWdodCAoVW5kbyBhY3Rpb24gbmFtZSkiID0gIkFsaWduIFJpZ2h0IjsKIAorLyogQWxsIEZpbGVz
IGluIGZpbGVyIHBpY2tlciAqLworIkFsbCBGaWxlcyIgPSAiQWxsIEZpbGVzIjsKKwogLyogQnV0
dG9uIHRpdGxlIGluIFN0b3JhZ2UgQWNjZXNzIEFQSSBwcm9tcHQgKi8KICJBbGxvdyAoY3Jvc3Mt
c2l0ZSBjb29raWUgYW5kIHdlYnNpdGUgZGF0YSBhY2Nlc3MpIiA9ICJBbGxvdyI7CiAKQEAgLTEz
Niw2ICsxNDgsOSBAQAogLyogV0tFcnJvckF0dHJpYnV0ZWRTdHJpbmdDb250ZW50RmFpbGVkVG9M
b2FkIGRlc2NyaXB0aW9uICovCiAiQXR0cmlidXRlZCBzdHJpbmcgY29udGVudCBmYWlsZWQgdG8g
bG9hZCIgPSAiQXR0cmlidXRlZCBzdHJpbmcgY29udGVudCBmYWlsZWQgdG8gbG9hZCI7CiAKKy8q
IEF1ZGlvIEZpbGVzIGluIGZpbGVyIHBpY2tlciAqLworIkF1ZGlvIEZpbGVzIiA9ICJBdWRpbyBG
aWxlcyI7CisKIC8qIE1lbnUgaXRlbSBsYWJlbCBmb3IgYXV0b21hdGljIHRyYWNrIHNlbGVjdGlv
biBiZWhhdmlvciAqLwogIkF1dG8gKFJlY29tbWVuZGVkKSIgPSAiQXV0byAoUmVjb21tZW5kZWQp
IjsKIApAQCAtMjY1LDYgKzI4MCw5IEBACiAvKiBVbmRvIGFjdGlvbiBuYW1lICovCiAiQ3JlYXRl
IExpbmsgKFVuZG8gYWN0aW9uIG5hbWUpIiA9ICJDcmVhdGUgTGluayI7CiAKKy8qIEN1c3RvbSBG
aWxlcyBpbiBmaWxlciBwaWNrZXIgKi8KKyJDdXN0b20gRmlsZXMiID0gIkN1c3RvbSBGaWxlcyI7
CisKIC8qIEN1dCBjb250ZXh0IG1lbnUgaXRlbSAqLwogIkN1dCIgPSAiQ3V0IjsKIApAQCAtNDA5
LDYgKzQyNyw5IEBACiAvKiBJZ25vcmUgU3BlbGxpbmcgY29udGV4dCBtZW51IGl0ZW0gKi8KICJJ
Z25vcmUgU3BlbGxpbmciID0gIklnbm9yZSBTcGVsbGluZyI7CiAKKy8qIEltYWdlIEZpbGVzIGlu
IGZpbGVyIHBpY2tlciAqLworIkltYWdlIEZpbGVzIiA9ICJJbWFnZSBGaWxlcyI7CisKIC8qIFVu
ZG8gYWN0aW9uIG5hbWUgKi8KICJJbmRlbnQgKFVuZG8gYWN0aW9uIG5hbWUpIiA9ICJJbmRlbnQi
OwogCkBAIC05OTEsNiArMTAxMiw5IEBACiAvKiBWYWxpZGF0aW9uIG1lc3NhZ2UgZm9yIGlucHV0
IGZvcm0gY29udHJvbHMgd2l0aCB2YWx1ZSBoaWdoZXIgdGhhbiBhbGxvd2VkIG1heGltdW0gKi8K
ICJWYWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcyIgPSAiVmFsdWUgbXVzdCBi
ZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMiOwogCisvKiBWaWRlbyBGaWxlcyBpbiBmaWxlciBw
aWNrZXIgKi8KKyJWaWRlbyBGaWxlcyIgPSAiVmlkZW8gRmlsZXMiOworCiAvKiBQaGlzaGluZyB3
YXJuaW5nIGRlc2NyaXB0aW9uICovCiAiV2FybmluZ3MgYXJlIHNob3duIGZvciB3ZWJzaXRlcyB0
aGF0IGhhdmUgYmVlbiByZXBvcnRlZCBhcyBkZWNlcHRpdmUuIERlY2VwdGl2ZSB3ZWJzaXRlcyB0
cnkgdG8gdHJpY2sgeW91IGludG8gYmVsaWV2aW5nIHRoZXkgYXJlIGxlZ2l0aW1hdGUgd2Vic2l0
ZXMgeW91IHRydXN0LiIgPSAiV2FybmluZ3MgYXJlIHNob3duIGZvciB3ZWJzaXRlcyB0aGF0IGhh
dmUgYmVlbiByZXBvcnRlZCBhcyBkZWNlcHRpdmUuIERlY2VwdGl2ZSB3ZWJzaXRlcyB0cnkgdG8g
dHJpY2sgeW91IGludG8gYmVsaWV2aW5nIHRoZXkgYXJlIGxlZ2l0aW1hdGUgd2Vic2l0ZXMgeW91
IHRydXN0LiI7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvQmxvYi5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0Jsb2IuY3BwCmluZGV4IDMyYTNiNjk4OWZhYjZlZDY0
MDQxYjkwYjlkZWM0OTNmNjQwMzExNTYuLmI3NzI0ZTgxYWY4MjhhMDFlMTY4OGJhZDY2ZWU5Y2Qw
NmJjZTBlYTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvQmxvYi5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9CbG9iLmNwcApAQCAtNzIsOSArNzIsMTAgQEAgVVJM
UmVnaXN0cnkmIEJsb2JVUkxSZWdpc3RyeTo6cmVnaXN0cnkoKQogICAgIHJldHVybiBpbnN0YW5j
ZTsKIH0KIAotQmxvYjo6QmxvYihVbmluaXRpYWxpemVkQ29udHJ1Y3RvciwgVVJMJiYgdXJsLCBT
dHJpbmcmJiB0eXBlKQorQmxvYjo6QmxvYihVbmluaXRpYWxpemVkQ29udHJ1Y3RvciwgVVJMJiYg
dXJsLCBTdHJpbmcmJiB0eXBlLCBTdHJpbmcmJiBkZXN0aW5hdGlvblR5cGUpCiAgICAgOiBtX2lu
dGVybmFsVVJMKFdURk1vdmUodXJsKSkKICAgICAsIG1fdHlwZShXVEZNb3ZlKHR5cGUpKQorICAg
ICwgbV9kZXN0aW5hdGlvblR5cGUoV1RGTW92ZShkZXN0aW5hdGlvblR5cGUpKQogewogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0Jsb2IuaCBiL1NvdXJjZS9XZWJDb3Jl
L2ZpbGVhcGkvQmxvYi5oCmluZGV4IDYxNGQ4MDlkMjA4OTNkNWVmZTAwYzgzOTJiM2FlMzY1MmJk
YTJhYzUuLmIyMjQ3OTRlODA5YjQ3MTZiMjFkZTJhNGU3NDdlYmViMjgyYTdiNWIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvQmxvYi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Zp
bGVhcGkvQmxvYi5oCkBAIC04NCw3ICs4NCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5CbG9i
KCk7CiAKICAgICBjb25zdCBVUkwmIHVybCgpIGNvbnN0IHsgcmV0dXJuIG1faW50ZXJuYWxVUkw7
IH0KLSAgICBjb25zdCBTdHJpbmcmIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KKyAg
ICBjb25zdCBTdHJpbmcmIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX2Rlc3RpbmF0aW9uVHlwZS5p
c051bGwoKSA/IG1fdHlwZSA6IG1fZGVzdGluYXRpb25UeXBlOyB9CiAKICAgICBXRUJDT1JFX0VY
UE9SVCB1bnNpZ25lZCBsb25nIGxvbmcgc2l6ZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBp
c0ZpbGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQpAQCAtMTE2LDcgKzExNiw3IEBAIHByb3Rl
Y3RlZDoKICAgICBCbG9iKFJlZmVyZW5jaW5nRXhpc3RpbmdCbG9iQ29uc3RydWN0b3IsIGNvbnN0
IEJsb2ImKTsKIAogICAgIGVudW0gVW5pbml0aWFsaXplZENvbnRydWN0b3IgeyB1bmluaXRpYWxp
emVkQ29udHJ1Y3RvciB9OwotICAgIEJsb2IoVW5pbml0aWFsaXplZENvbnRydWN0b3IsIFVSTCYm
LCBTdHJpbmcmJiB0eXBlKTsKKyAgICBCbG9iKFVuaW5pdGlhbGl6ZWRDb250cnVjdG9yLCBVUkwm
JiwgU3RyaW5nJiYgdHlwZSwgU3RyaW5nJiYgZGVzdGluYXRpb25UeXBlKTsKIAogICAgIGVudW0g
RGVzZXJpYWxpemF0aW9uQ29udHJ1Y3RvciB7IGRlc2VyaWFsaXphdGlvbkNvbnRydWN0b3IgfTsK
ICAgICBCbG9iKERlc2VyaWFsaXphdGlvbkNvbnRydWN0b3IsIGNvbnN0IFVSTCYgc3JjVVJMLCBj
b25zdCBTdHJpbmcmIHR5cGUsIE9wdGlvbmFsPHVuc2lnbmVkIGxvbmcgbG9uZz4gc2l6ZSwgY29u
c3QgU3RyaW5nJiBmaWxlQmFja2VkUGF0aCk7CkBAIC0xMzEsNiArMTMxLDcgQEAgcHJpdmF0ZToK
ICAgICBVUkwgbV9pbnRlcm5hbFVSTDsKIAogICAgIFN0cmluZyBtX3R5cGU7CisgICAgU3RyaW5n
IG1fZGVzdGluYXRpb25UeXBlOwogCiAgICAgbXV0YWJsZSBPcHRpb25hbDx1bnNpZ25lZCBsb25n
IGxvbmc+IG1fc2l6ZTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0Zp
bGUuY3BwIGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlLmNwcAppbmRleCA4ZDZlMzg3Mzg1
NTEzZGRkNDFlMDM3MjQwOThiNDMyZWFjZWNlYmMwLi4xZjU0YWE3NWQwZDEwYzIwMzRhMDIzZDA3
ZDkxOGUyZjY5NDgzMTAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGUu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZS5jcHAKQEAgLTQ2LDIwICs0Niwy
MSBAQCBSZWY8RmlsZT4gRmlsZTo6Y3JlYXRlV2l0aFJlbGF0aXZlUGF0aChjb25zdCBTdHJpbmcm
IHBhdGgsIGNvbnN0IFN0cmluZyYgcmVsYXRpdgogICAgIHJldHVybiBmaWxlOwogfQogCi1SZWY8
RmlsZT4gRmlsZTo6Y3JlYXRlKGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgU3RyaW5nJiBuYW1l
T3ZlcnJpZGUpCitSZWY8RmlsZT4gRmlsZTo6Y3JlYXRlKGNvbnN0IFN0cmluZyYgcGF0aCwgY29u
c3QgU3RyaW5nJiBuYW1lT3ZlcnJpZGUsIGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgYWxsb3dlZFR5
cGVzKQogewotICAgIFN0cmluZyBuYW1lOwotICAgIFN0cmluZyB0eXBlOwotICAgIGNvbXB1dGVO
YW1lQW5kQ29udGVudFR5cGUocGF0aCwgbmFtZU92ZXJyaWRlLCBuYW1lLCB0eXBlKTsKKyAgICBT
dHJpbmcgdHlwZSA9IGNvbnRlbnRUeXBlRm9yRmlsZShwYXRoLCBuYW1lT3ZlcnJpZGUpOworICAg
IFN0cmluZyBkZXN0aW5hdGlvblR5cGUgPSBkZXN0aW5hdGlvblR5cGVGb3JGaWxlKHBhdGgsIHR5
cGUsIGFsbG93ZWRUeXBlcyk7CisgICAgU3RyaW5nIG5hbWUgPSBuYW1lRm9yRmlsZShwYXRoLCBu
YW1lT3ZlcnJpZGUsIHR5cGUsIGRlc3RpbmF0aW9uVHlwZSk7CiAKICAgICBhdXRvIGludGVybmFs
VVJMID0gQmxvYlVSTDo6Y3JlYXRlSW50ZXJuYWxVUkwoKTsKLSAgICBUaHJlYWRhYmxlQmxvYlJl
Z2lzdHJ5OjpyZWdpc3RlckZpbGVCbG9iVVJMKGludGVybmFsVVJMLCBwYXRoLCB0eXBlKTsKIAot
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEZpbGUoV1RGTW92ZShpbnRlcm5hbFVSTCksIFdURk1v
dmUodHlwZSksIFN0cmluZyB7IHBhdGggfSwgV1RGTW92ZShuYW1lKSkpOworICAgIFRocmVhZGFi
bGVCbG9iUmVnaXN0cnk6OnJlZ2lzdGVyRmlsZUJsb2JVUkwoaW50ZXJuYWxVUkwsIHBhdGgsIG5h
bWUsIHR5cGUsIGRlc3RpbmF0aW9uVHlwZSk7CisKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBG
aWxlKFdURk1vdmUoaW50ZXJuYWxVUkwpLCBTdHJpbmcgeyBwYXRoIH0sIFdURk1vdmUobmFtZSks
IFdURk1vdmUodHlwZSksIFdURk1vdmUoZGVzdGluYXRpb25UeXBlKSkpOwogfQogCi1GaWxlOjpG
aWxlKFVSTCYmIHVybCwgU3RyaW5nJiYgdHlwZSwgU3RyaW5nJiYgcGF0aCwgU3RyaW5nJiYgbmFt
ZSkKLSAgICA6IEJsb2IodW5pbml0aWFsaXplZENvbnRydWN0b3IsIFdURk1vdmUodXJsKSwgV1RG
TW92ZSh0eXBlKSkKK0ZpbGU6OkZpbGUoVVJMJiYgdXJsLCBTdHJpbmcmJiBwYXRoLCBTdHJpbmcm
JiBuYW1lLCBTdHJpbmcmJiB0eXBlLCBTdHJpbmcmJiBkZXN0aW5hdGlvblR5cGUpCisgICAgOiBC
bG9iKHVuaW5pdGlhbGl6ZWRDb250cnVjdG9yLCBXVEZNb3ZlKHVybCksIFdURk1vdmUodHlwZSks
IFdURk1vdmUoZGVzdGluYXRpb25UeXBlKSkKICAgICAsIG1fcGF0aChXVEZNb3ZlKHBhdGgpKQog
ICAgICwgbV9uYW1lKFdURk1vdmUobmFtZSkpCiB7CkBAIC0xMjMsMzIgKzEyNCw1MiBAQCBpbnQ2
NF90IEZpbGU6Omxhc3RNb2RpZmllZCgpIGNvbnN0CiAgICAgcmV0dXJuIFdURjo6dGltZUNsaXAo
cmVzdWx0KTsKIH0KIAotdm9pZCBGaWxlOjpjb21wdXRlTmFtZUFuZENvbnRlbnRUeXBlKGNvbnN0
IFN0cmluZyYgcGF0aCwgY29uc3QgU3RyaW5nJiBuYW1lT3ZlcnJpZGUsIFN0cmluZyYgZWZmZWN0
aXZlTmFtZSwgU3RyaW5nJiBlZmZlY3RpdmVDb250ZW50VHlwZSkKK1N0cmluZyBGaWxlOjpjb250
ZW50VHlwZUZvckZpbGUoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBTdHJpbmcmIG5hbWVPdmVy
cmlkZSkKIHsKLSNpZiBFTkFCTEUoRklMRV9SRVBMQUNFTUVOVCkKLSAgICBpZiAoc2hvdWxkUmVw
bGFjZUZpbGUocGF0aCkpIHsKLSAgICAgICAgY29tcHV0ZU5hbWVBbmRDb250ZW50VHlwZUZvclJl
cGxhY2VkRmlsZShwYXRoLCBuYW1lT3ZlcnJpZGUsIGVmZmVjdGl2ZU5hbWUsIGVmZmVjdGl2ZUNv
bnRlbnRUeXBlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgotICAgIGVmZmVjdGl2
ZU5hbWUgPSBuYW1lT3ZlcnJpZGUuaXNFbXB0eSgpID8gRmlsZVN5c3RlbTo6cGF0aEdldEZpbGVO
YW1lKHBhdGgpIDogbmFtZU92ZXJyaWRlOwotICAgIHNpemVfdCBpbmRleCA9IGVmZmVjdGl2ZU5h
bWUucmV2ZXJzZUZpbmQoJy4nKTsKKyAgICBTdHJpbmcgbmFtZSA9IG5hbWVPdmVycmlkZS5pc0Vt
cHR5KCkgPyBGaWxlU3lzdGVtOjpwYXRoR2V0RmlsZU5hbWUocGF0aCkgOiBuYW1lT3ZlcnJpZGU7
CisgICAgU3RyaW5nIG1pbWVUeXBlOworICAgIHNpemVfdCBpbmRleCA9IG5hbWUucmV2ZXJzZUZp
bmQoJy4nKTsKICAgICBpZiAoaW5kZXggIT0gbm90Rm91bmQpIHsKLSAgICAgICAgY2FsbE9uTWFp
blRocmVhZEFuZFdhaXQoWyZlZmZlY3RpdmVDb250ZW50VHlwZSwgJmVmZmVjdGl2ZU5hbWUsIGlu
ZGV4XSB7Ci0gICAgICAgICAgICBlZmZlY3RpdmVDb250ZW50VHlwZSA9IE1JTUVUeXBlUmVnaXN0
cnk6OmdldE1JTUVUeXBlRm9yRXh0ZW5zaW9uKGVmZmVjdGl2ZU5hbWUuc3Vic3RyaW5nKGluZGV4
ICsgMSkpLmlzb2xhdGVkQ29weSgpOworICAgICAgICBjYWxsT25NYWluVGhyZWFkQW5kV2FpdChb
Jm1pbWVUeXBlLCAmbmFtZSwgaW5kZXhdIHsKKyAgICAgICAgICAgIG1pbWVUeXBlID0gTUlNRVR5
cGVSZWdpc3RyeTo6Z2V0TUlNRVR5cGVGb3JFeHRlbnNpb24obmFtZS5zdWJzdHJpbmcoaW5kZXgg
KyAxKSkuaXNvbGF0ZWRDb3B5KCk7CiAgICAgICAgIH0pOwogICAgIH0KKyAgICByZXR1cm4gbWlt
ZVR5cGU7CiB9CiAKLVN0cmluZyBGaWxlOjpjb250ZW50VHlwZUZvckZpbGUoY29uc3QgU3RyaW5n
JiBwYXRoKQorU3RyaW5nIEZpbGU6OmRlc3RpbmF0aW9uVHlwZUZvckZpbGUoY29uc3QgU3RyaW5n
JiBwYXRoLCBjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgYWxsb3dl
ZFR5cGVzKQogewotICAgIFN0cmluZyBuYW1lOwotICAgIFN0cmluZyB0eXBlOwotICAgIGNvbXB1
dGVOYW1lQW5kQ29udGVudFR5cGUocGF0aCwgU3RyaW5nKCksIG5hbWUsIHR5cGUpOwotCisjaWYg
RU5BQkxFKEZJTEVfUkVQTEFDRU1FTlQpCisgICAgaWYgKGlzRmlsZVR5cGVQYWNrYWdlKHBhdGgp
KQorICAgICAgICByZXR1cm4gImFwcGxpY2F0aW9uL3ppcCJfczsKKworICAgIGlmIChhbGxvd2Vk
VHlwZXMuY29udGFpbnModHlwZSkpCisgICAgICAgIHJldHVybiB0eXBlOworICAgIAorICAgIGZv
ciAoYXV0byYgYWxsb3dlZFR5cGUgOiBhbGxvd2VkVHlwZXMpIHsKKyAgICAgICAgaWYgKGFsbG93
ZWRUeXBlID09ICJpbWFnZS8qIikKKyAgICAgICAgICAgIHJldHVybiB0eXBlOworICAgICAgICBp
ZiAoTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlRm9yRW5jb2Rpbmco
YWxsb3dlZFR5cGUpKQorICAgICAgICAgICAgcmV0dXJuIGFsbG93ZWRUeXBlOworICAgIH0KKyNl
bmRpZgogICAgIHJldHVybiB0eXBlOwogfQogCitTdHJpbmcgRmlsZTo6bmFtZUZvckZpbGUoY29u
c3QgU3RyaW5nJiBwYXRoLCBjb25zdCBTdHJpbmcmIG5hbWVPdmVycmlkZSwgY29uc3QgU3RyaW5n
JiB0eXBlLCBjb25zdCBTdHJpbmcmIGRlc3RpbmF0aW9uVHlwZSkKK3sKKyAgICBTdHJpbmcgbmFt
ZSA9IG5hbWVPdmVycmlkZS5pc0VtcHR5KCkgPyBGaWxlU3lzdGVtOjpwYXRoR2V0RmlsZU5hbWUo
cGF0aCkgOiBuYW1lT3ZlcnJpZGU7CisjaWYgRU5BQkxFKEZJTEVfUkVQTEFDRU1FTlQpCisgICAg
aWYgKGRlc3RpbmF0aW9uVHlwZSA9PSAiYXBwbGljYXRpb24vemlwIl9zKQorICAgICAgICBuYW1l
ID0gbWFrZVN0cmluZyhuYW1lLCAiLnppcCJfcyk7CisgICAgZWxzZSBpZiAoIWRlc3RpbmF0aW9u
VHlwZS5pc0VtcHR5KCkgJiYgdHlwZSAhPSBkZXN0aW5hdGlvblR5cGUpIHsKKyAgICAgICAgYXV0
byBleHRlbnNpb25zID0gTUlNRVR5cGVSZWdpc3RyeTo6Z2V0RXh0ZW5zaW9uc0Zvck1JTUVUeXBl
KGRlc3RpbmF0aW9uVHlwZSk7CisgICAgICAgIG5hbWUgPSBtYWtlU3RyaW5nKG5hbWUsICIuIl9z
LCBleHRlbnNpb25zWzBdKTsKKyAgICB9CisjZW5kaWYKKyAgICByZXR1cm4gbmFtZTsKK30KKwog
Ym9vbCBGaWxlOjppc0RpcmVjdG9yeSgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2lzRGlyZWN0b3J5
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlLmggYi9Tb3VyY2UvV2Vi
Q29yZS9maWxlYXBpL0ZpbGUuaAppbmRleCBkMmY5MzhiNDIwZDNhNjBmYjkzZjc0MGJjYjA0ZDc0
MWY4M2VmZjc4Li44ZmRhYmMxZmNiZGI0MTJhZmQ3NzBlNzlkZjM3ZWU2NWQwZjNlODc3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGUuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9maWxlYXBpL0ZpbGUuaApAQCAtNDIsNyArNDIsNyBAQCBwdWJsaWM6CiAgICAgfTsKIAogICAg
IC8vIENyZWF0ZSBhIGZpbGUgd2l0aCBhbiBvcHRpb25hbCBuYW1lIGV4cG9zZWQgdG8gdGhlIGF1
dGhvciAodmlhIEZpbGUubmFtZSBhbmQgYXNzb2NpYXRlZCBET00gcHJvcGVydGllcykgdGhhdCBk
aWZmZXJzIGZyb20gdGhlIG9uZSBwcm92aWRlZCBpbiB0aGUgcGF0aC4KLSAgICBXRUJDT1JFX0VY
UE9SVCBzdGF0aWMgUmVmPEZpbGU+IGNyZWF0ZShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0
cmluZyYgbmFtZU92ZXJyaWRlID0geyB9KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVm
PEZpbGU+IGNyZWF0ZShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0cmluZyYgbmFtZU92ZXJy
aWRlID0geyB9LCBjb25zdCBIYXNoU2V0PFN0cmluZz4mIGFsbG93ZWRUeXBlcyA9IHsgfSk7CiAK
ICAgICAvLyBDcmVhdGUgYSBGaWxlIHVzaW5nIHRoZSAnbmV3IEZpbGUnIGNvbnN0cnVjdG9yLgog
ICAgIHN0YXRpYyBSZWY8RmlsZT4gY3JlYXRlKFZlY3RvcjxCbG9iUGFydFZhcmlhbnQ+JiYgYmxv
YlBhcnRWYXJpYW50cywgY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgY29uc3QgUHJvcGVydHlCYWcm
IHByb3BlcnR5QmFnKQpAQCAtNzYsMjggKzc2LDI1IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VY
UE9SVCBpbnQ2NF90IGxhc3RNb2RpZmllZCgpIGNvbnN0OyAvLyBOdW1iZXIgb2YgbWlsbGlzZWNv
bmRzIHNpbmNlIEVwb2NoLgogICAgIGNvbnN0IE9wdGlvbmFsPGludDY0X3Q+JiBsYXN0TW9kaWZp
ZWRPdmVycmlkZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGFzdE1vZGlmaWVkRGF0ZU92ZXJyaWRlOyB9
IC8vIE51bWJlciBvZiBtaWxsaXNlY29uZHMgc2luY2UgRXBvY2guCiAKLSAgICBzdGF0aWMgU3Ry
aW5nIGNvbnRlbnRUeXBlRm9yRmlsZShjb25zdCBTdHJpbmcmIHBhdGgpOworICAgIHN0YXRpYyBT
dHJpbmcgY29udGVudFR5cGVGb3JGaWxlKGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgU3RyaW5n
JiBuYW1lT3ZlcnJpZGUgPSB7IH0pOworICAgIHN0YXRpYyBTdHJpbmcgZGVzdGluYXRpb25UeXBl
Rm9yRmlsZShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0cmluZyYgdHlwZSA9IHsgfSwgY29u
c3QgSGFzaFNldDxTdHJpbmc+JiBhbGxvd2VkVHlwZXMgPSB7IH0pOworICAgIHN0YXRpYyBTdHJp
bmcgbmFtZUZvckZpbGUoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBTdHJpbmcmIG5hbWVPdmVy
cmlkZSA9IHsgfSwgY29uc3QgU3RyaW5nJiB0eXBlID0geyB9LCBjb25zdCBTdHJpbmcmIGRlc3Rp
bmF0aW9uVHlwZSA9IHsgfSk7CiAKICNpZiBFTkFCTEUoRklMRV9SRVBMQUNFTUVOVCkKLSAgICBz
dGF0aWMgYm9vbCBzaG91bGRSZXBsYWNlRmlsZShjb25zdCBTdHJpbmcmIHBhdGgpOworICAgIHN0
YXRpYyBib29sIGlzRmlsZVR5cGVQYWNrYWdlKGNvbnN0IFN0cmluZyYgcGF0aCk7CiAjZW5kaWYK
IAogICAgIGJvb2wgaXNEaXJlY3RvcnkoKSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBXRUJDT1JF
X0VYUE9SVCBleHBsaWNpdCBGaWxlKGNvbnN0IFN0cmluZyYgcGF0aCk7Ci0gICAgRmlsZShVUkwm
JiwgU3RyaW5nJiYgdHlwZSwgU3RyaW5nJiYgcGF0aCwgU3RyaW5nJiYgbmFtZSk7CisgICAgRmls
ZShVUkwmJiwgU3RyaW5nJiYgcGF0aCwgU3RyaW5nJiYgbmFtZSwgU3RyaW5nJiYgdHlwZSwgU3Ry
aW5nJiYgZGVzdGluYXRpb25UeXBlKTsKICAgICBGaWxlKFZlY3RvcjxCbG9iUGFydFZhcmlhbnQ+
JiYgYmxvYlBhcnRWYXJpYW50cywgY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgY29uc3QgUHJvcGVy
dHlCYWcmKTsKICAgICBGaWxlKGNvbnN0IEJsb2ImLCBjb25zdCBTdHJpbmcmIG5hbWUpOwogICAg
IEZpbGUoY29uc3QgRmlsZSYsIGNvbnN0IFN0cmluZyYgbmFtZSk7CiAKICAgICBGaWxlKERlc2Vy
aWFsaXphdGlvbkNvbnRydWN0b3IsIGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgVVJMJiBzcmNV
UkwsIGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBPcHRpb25h
bDxpbnQ2NF90PiYgbGFzdE1vZGlmaWVkKTsKIAotICAgIHN0YXRpYyB2b2lkIGNvbXB1dGVOYW1l
QW5kQ29udGVudFR5cGUoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBTdHJpbmcmIG5hbWVPdmVy
cmlkZSwgU3RyaW5nJiBlZmZlY3RpdmVOYW1lLCBTdHJpbmcmIGVmZmVjdGl2ZUNvbnRlbnRUeXBl
KTsKLSNpZiBFTkFCTEUoRklMRV9SRVBMQUNFTUVOVCkKLSAgICBzdGF0aWMgdm9pZCBjb21wdXRl
TmFtZUFuZENvbnRlbnRUeXBlRm9yUmVwbGFjZWRGaWxlKGNvbnN0IFN0cmluZyYgcGF0aCwgY29u
c3QgU3RyaW5nJiBuYW1lT3ZlcnJpZGUsIFN0cmluZyYgZWZmZWN0aXZlTmFtZSwgU3RyaW5nJiBl
ZmZlY3RpdmVDb250ZW50VHlwZSk7Ci0jZW5kaWYKLQogICAgIFN0cmluZyBtX3BhdGg7CiAgICAg
U3RyaW5nIG1fcmVsYXRpdmVQYXRoOwogICAgIFN0cmluZyBtX25hbWU7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVDb2NvYS5tbSBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVh
cGkvRmlsZUNvY29hLm1tCmluZGV4IDY2NGY5YTUzNjEzZGYyNmNhMTdjNzA3YzIxYjUwYzY0NjQ1
MjA0ZTYuLjEwNTQ5OGJlY2FmYTgwYjI3MTY3NGExYzMxNDQ3NDAzMTcxNWQwZWMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZUNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2ZpbGVhcGkvRmlsZUNvY29hLm1tCkBAIC0zNiw3ICszNiw3IEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotYm9vbCBGaWxlOjpzaG91bGRSZXBsYWNlRmlsZShjb25zdCBTdHJpbmcmIHBh
dGgpCitib29sIEZpbGU6OmlzRmlsZVR5cGVQYWNrYWdlKGNvbnN0IFN0cmluZyYgcGF0aCkKIHsK
ICAgICBpZiAocGF0aC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTU3LDEz
ICs1Nyw2IEBAIGJvb2wgRmlsZTo6c2hvdWxkUmVwbGFjZUZpbGUoY29uc3QgU3RyaW5nJiBwYXRo
KQogICAgIHJldHVybiBVVFR5cGVDb25mb3Jtc1RvKChfX2JyaWRnZSBDRlN0cmluZ1JlZil1dGks
IGtVVFR5cGVQYWNrYWdlKTsKIH0KIAotdm9pZCBGaWxlOjpjb21wdXRlTmFtZUFuZENvbnRlbnRU
eXBlRm9yUmVwbGFjZWRGaWxlKGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgU3RyaW5nJiBuYW1l
T3ZlcnJpZGUsIFN0cmluZyYgZWZmZWN0aXZlTmFtZSwgU3RyaW5nJiBlZmZlY3RpdmVDb250ZW50
VHlwZSkKLXsKLSAgICBBU1NFUlQoIUZpbGVTeXN0ZW06OnBhdGhHZXRGaWxlTmFtZShwYXRoKS5l
bmRzV2l0aCgnLycpKTsgLy8gRXhwZWN0aW5nIHRvIGdldCBhIHBhdGggd2l0aG91dCB0cmFpbGlu
ZyBzbGFzaCwgZXZlbiBmb3IgZGlyZWN0b3JpZXMuCi0gICAgZWZmZWN0aXZlQ29udGVudFR5cGUg
PSAiYXBwbGljYXRpb24vemlwIl9zOwotICAgIGVmZmVjdGl2ZU5hbWUgPSBtYWtlU3RyaW5nKChu
YW1lT3ZlcnJpZGUuaXNOdWxsKCkgPyBGaWxlU3lzdGVtOjpwYXRoR2V0RmlsZU5hbWUocGF0aCkg
OiBuYW1lT3ZlcnJpZGUpLCAiLnppcCJfcyk7Ci19Ci0KIH0KIAogI2VuZGlmIC8vIEVOQUJMRShG
SUxFX1JFUExBQ0VNRU5UKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9UaHJl
YWRhYmxlQmxvYlJlZ2lzdHJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvVGhyZWFkYWJs
ZUJsb2JSZWdpc3RyeS5jcHAKaW5kZXggNWUxZDRjMDBhOWMwNjhjODAzMWMyNGNjZDYwYWIyMGE2
YWZhMDYwYi4uMTNjODYyNzk3YTIzNDRjMWZlNzk1MjA2NjE2Yjc0MDJjMTVmZmJiNCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9UaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL1RocmVhZGFibGVCbG9iUmVnaXN0cnkuY3BwCkBA
IC02NCwxNSArNjQsMTUgQEAgc3RhdGljIFRocmVhZFNwZWNpZmljPEJsb2JVcmxPcmlnaW5NYXA+
JiBvcmlnaW5NYXAoKQogICAgIHJldHVybiAqbWFwOwogfQogCi12b2lkIFRocmVhZGFibGVCbG9i
UmVnaXN0cnk6OnJlZ2lzdGVyRmlsZUJsb2JVUkwoY29uc3QgVVJMJiB1cmwsIGNvbnN0IFN0cmlu
ZyYgcGF0aCwgY29uc3QgU3RyaW5nJiBjb250ZW50VHlwZSkKK3ZvaWQgVGhyZWFkYWJsZUJsb2JS
ZWdpc3RyeTo6cmVnaXN0ZXJGaWxlQmxvYlVSTChjb25zdCBVUkwmIHVybCwgY29uc3QgU3RyaW5n
JiBwYXRoLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgY29udGVudFR5cGUsIGNv
bnN0IFN0cmluZyYgZGVzdGluYXRpb25UeXBlKQogewogICAgIGlmIChpc01haW5UaHJlYWQoKSkg
ewotICAgICAgICBibG9iUmVnaXN0cnkoKS5yZWdpc3RlckZpbGVCbG9iVVJMKHVybCwgQmxvYkRh
dGFGaWxlUmVmZXJlbmNlOjpjcmVhdGUocGF0aCksIGNvbnRlbnRUeXBlKTsKKyAgICAgICAgYmxv
YlJlZ2lzdHJ5KCkucmVnaXN0ZXJGaWxlQmxvYlVSTCh1cmwsIEJsb2JEYXRhRmlsZVJlZmVyZW5j
ZTo6Y3JlYXRlKHBhdGgsIG5hbWUsIGNvbnRlbnRUeXBlLCBkZXN0aW5hdGlvblR5cGUpLCBjb250
ZW50VHlwZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBjYWxsT25NYWluVGhyZWFk
KFt1cmwgPSB1cmwuaXNvbGF0ZWRDb3B5KCksIHBhdGggPSBwYXRoLmlzb2xhdGVkQ29weSgpLCBj
b250ZW50VHlwZSA9IGNvbnRlbnRUeXBlLmlzb2xhdGVkQ29weSgpXSB7Ci0gICAgICAgIGJsb2JS
ZWdpc3RyeSgpLnJlZ2lzdGVyRmlsZUJsb2JVUkwodXJsLCBCbG9iRGF0YUZpbGVSZWZlcmVuY2U6
OmNyZWF0ZShwYXRoKSwgY29udGVudFR5cGUpOworICAgIGNhbGxPbk1haW5UaHJlYWQoW3VybCA9
IHVybC5pc29sYXRlZENvcHkoKSwgcGF0aCA9IHBhdGguaXNvbGF0ZWRDb3B5KCksIG5hbWUgPSBu
YW1lLmlzb2xhdGVkQ29weSgpLCBjb250ZW50VHlwZSA9IGNvbnRlbnRUeXBlLmlzb2xhdGVkQ29w
eSgpLCBkZXN0aW5hdGlvblR5cGUgPSBkZXN0aW5hdGlvblR5cGUuaXNvbGF0ZWRDb3B5KCldIHsK
KyAgICAgICAgYmxvYlJlZ2lzdHJ5KCkucmVnaXN0ZXJGaWxlQmxvYlVSTCh1cmwsIEJsb2JEYXRh
RmlsZVJlZmVyZW5jZTo6Y3JlYXRlKHBhdGgsIG5hbWUsIGRlc3RpbmF0aW9uVHlwZSksIGNvbnRl
bnRUeXBlKTsKICAgICB9KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZmlsZWFw
aS9UaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5LmggYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL1RocmVh
ZGFibGVCbG9iUmVnaXN0cnkuaAppbmRleCBhOWM3OWZlMjI5MmY4OTViMzFjNjBmNzU2N2ZmZDA0
OTNmZWRjODMyLi4wZTBmNmYzYmU4YTM5ZmM4Mzk2ZjFiOTNiYWE4M2M5MzkyNzAzMjgxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL1RocmVhZGFibGVCbG9iUmVnaXN0cnkuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL1RocmVhZGFibGVCbG9iUmVnaXN0cnkuaApAQCAt
NDAsNyArNDAsNyBAQCBjbGFzcyBTZWN1cml0eU9yaWdpbjsKIAogY2xhc3MgVGhyZWFkYWJsZUJs
b2JSZWdpc3RyeSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJGaWxlQmxvYlVS
TChjb25zdCBVUkwmLCBjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0cmluZyYgY29udGVudFR5
cGUpOworICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyRmlsZUJsb2JVUkwoY29uc3QgVVJMJiwgY29u
c3QgU3RyaW5nJiBwYXRoLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgY29udGVu
dFR5cGUsIGNvbnN0IFN0cmluZyYgZGVzdGluYXRpb25UeXBlKTsKICAgICBzdGF0aWMgdm9pZCBy
ZWdpc3RlckJsb2JVUkwoY29uc3QgVVJMJiwgVmVjdG9yPEJsb2JQYXJ0PiYmIGJsb2JQYXJ0cywg
Y29uc3QgU3RyaW5nJiBjb250ZW50VHlwZSk7CiAgICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJCbG9i
VVJMKFNlY3VyaXR5T3JpZ2luKiwgY29uc3QgVVJMJiwgY29uc3QgVVJMJiBzcmNVUkwpOwogICAg
IHN0YXRpYyB2b2lkIHJlZ2lzdGVyQmxvYlVSTE9wdGlvbmFsbHlGaWxlQmFja2VkKGNvbnN0IFVS
TCYsIGNvbnN0IFVSTCYgc3JjVVJMLCBjb25zdCBTdHJpbmcmIGZpbGVCYWNrZWRQYXRoLCBjb25z
dCBTdHJpbmcmIGNvbnRlbnRUeXBlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
RmlsZUlucHV0VHlwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0ZpbGVJbnB1dFR5cGUuY3Bw
CmluZGV4IDNlMmY5YmVhZjAwZDI1ODYwNDM2YjdiNjA4YmZlOWZiMjMxOTViYWUuLmQzZDVhOTc4
ZDUzZjVmMjljODBmMTgwNjYwNWI1YzU4OTZkYjk5NjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvRmlsZUlucHV0VHlwZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9GaWxl
SW5wdXRUeXBlLmNwcApAQCAtNDA3LDcgKzQwNyw3IEBAIHZvaWQgRmlsZUlucHV0VHlwZTo6c2V0
RmlsZXMoUmVmUHRyPEZpbGVMaXN0PiYmIGZpbGVzLCBSZXF1ZXN0SWNvbiBzaG91bGRSZXF1ZXN0
CiAgICAgcHJvdGVjdGVkSW5wdXRFbGVtZW50LT5zZXRDaGFuZ2VkU2luY2VMYXN0Rm9ybUNvbnRy
b2xDaGFuZ2VFdmVudChmYWxzZSk7CiB9CiAKLXZvaWQgRmlsZUlucHV0VHlwZTo6ZmlsZXNDaG9z
ZW4oY29uc3QgVmVjdG9yPEZpbGVDaG9vc2VyRmlsZUluZm8+JiBwYXRocywgY29uc3QgU3RyaW5n
JiBkaXNwbGF5U3RyaW5nLCBJY29uKiBpY29uKQordm9pZCBGaWxlSW5wdXRUeXBlOjpmaWxlc0No
b3Nlbihjb25zdCBWZWN0b3I8RmlsZUNob29zZXJGaWxlSW5mbz4mIHBhdGhzLCBjb25zdCBIYXNo
U2V0PFN0cmluZz4mIGFsbG93ZWRUeXBlcywgY29uc3QgU3RyaW5nJiBkaXNwbGF5U3RyaW5nLCBJ
Y29uKiBpY29uKQogewogICAgIGlmICghZGlzcGxheVN0cmluZy5pc0VtcHR5KCkpCiAgICAgICAg
IG1fZGlzcGxheVN0cmluZyA9IGRpc3BsYXlTdHJpbmc7CkBAIC00MTcsNyArNDE3LDcgQEAgdm9p
ZCBGaWxlSW5wdXRUeXBlOjpmaWxlc0Nob3Nlbihjb25zdCBWZWN0b3I8RmlsZUNob29zZXJGaWxl
SW5mbz4mIHBhdGhzLCBjb25zdAogCiAgICAgYXV0byBzaG91bGRSZXNvbHZlRGlyZWN0b3JpZXMg
PSBhbGxvd3NEaXJlY3RvcmllcygpID8gRmlsZUxpc3RDcmVhdG9yOjpTaG91bGRSZXNvbHZlRGly
ZWN0b3JpZXM6OlllcyA6IEZpbGVMaXN0Q3JlYXRvcjo6U2hvdWxkUmVzb2x2ZURpcmVjdG9yaWVz
OjpObzsKICAgICBhdXRvIHNob3VsZFJlcXVlc3RJY29uID0gaWNvbiA/IFJlcXVlc3RJY29uOjpZ
ZXMgOiBSZXF1ZXN0SWNvbjo6Tm87Ci0gICAgbV9maWxlTGlzdENyZWF0b3IgPSBGaWxlTGlzdENy
ZWF0b3I6OmNyZWF0ZShwYXRocywgc2hvdWxkUmVzb2x2ZURpcmVjdG9yaWVzLCBbdGhpcywgc2hv
dWxkUmVxdWVzdEljb25dKFJlZjxGaWxlTGlzdD4mJiBmaWxlTGlzdCkgeworICAgIG1fZmlsZUxp
c3RDcmVhdG9yID0gRmlsZUxpc3RDcmVhdG9yOjpjcmVhdGUocGF0aHMsIGFsbG93ZWRUeXBlcywg
c2hvdWxkUmVzb2x2ZURpcmVjdG9yaWVzLCBbdGhpcywgc2hvdWxkUmVxdWVzdEljb25dKFJlZjxG
aWxlTGlzdD4mJiBmaWxlTGlzdCkgewogICAgICAgICBzZXRGaWxlcyhXVEZNb3ZlKGZpbGVMaXN0
KSwgc2hvdWxkUmVxdWVzdEljb24pOwogICAgICAgICBtX2ZpbGVMaXN0Q3JlYXRvciA9IG51bGxw
dHI7CiAgICAgfSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0ZpbGVJbnB1dFR5
cGUuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvRmlsZUlucHV0VHlwZS5oCmluZGV4IDgyNmFjMjhl
MzFlODZlZDlhMWNjOTlhMTU2ZDQ2N2U5NGIwMzE1NWIuLjcyZjUxMmEwNmNlMDQ5Nzg4ZDlmYjVm
NjU2OTYzNGMwY2UzMjM3YzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvRmlsZUlu
cHV0VHlwZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvRmlsZUlucHV0VHlwZS5oCkBAIC04
MCw3ICs4MCw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBhdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1
YWxpZmllZE5hbWUmKSBmaW5hbDsKICAgICBTdHJpbmcgZGVmYXVsdFRvb2xUaXAoKSBjb25zdCBm
aW5hbDsKIAotICAgIHZvaWQgZmlsZXNDaG9zZW4oY29uc3QgVmVjdG9yPEZpbGVDaG9vc2VyRmls
ZUluZm8+JiwgY29uc3QgU3RyaW5nJiBkaXNwbGF5U3RyaW5nID0geyB9LCBJY29uKiA9IG51bGxw
dHIpIGZpbmFsOworICAgIHZvaWQgZmlsZXNDaG9zZW4oY29uc3QgVmVjdG9yPEZpbGVDaG9vc2Vy
RmlsZUluZm8+JiwgY29uc3QgSGFzaFNldDxTdHJpbmc+JiBhbGxvd2VkVHlwZXMgPSB7IH0sIGNv
bnN0IFN0cmluZyYgZGlzcGxheVN0cmluZyA9IHsgfSwgSWNvbiogPSBudWxscHRyKSBmaW5hbDsK
IAogICAgIC8vIEZpbGVJY29uTG9hZGVyQ2xpZW50IGltcGxlbWVudGF0aW9uLgogICAgIHZvaWQg
aWNvbkxvYWRlZChSZWZQdHI8SWNvbj4mJikgZmluYWw7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0ZpbGVMaXN0Q3JlYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0ZpbGVM
aXN0Q3JlYXRvci5jcHAKaW5kZXggZGM2Mjg1YmM5YjU4MzUwNmUzZDZkMjBlMDk1MTY1MWNlOTBk
ZWNkYi4uMWUxNzQ3NzE2NWI1NzhlMzY0ZDJjOGU4MmQ2YmJjNzFkYjJiZjI5NSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9GaWxlTGlzdENyZWF0b3IuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvRmlsZUxpc3RDcmVhdG9yLmNwcApAQCAtNTcsMTYgKzU3LDE2IEBAIHN0YXRp
YyB2b2lkIGFwcGVuZERpcmVjdG9yeUZpbGVzKGNvbnN0IFN0cmluZyYgZGlyZWN0b3J5LCBjb25z
dCBTdHJpbmcmIHJlbGF0aXZlCiAgICAgfQogfQogCi1GaWxlTGlzdENyZWF0b3I6OkZpbGVMaXN0
Q3JlYXRvcihjb25zdCBWZWN0b3I8RmlsZUNob29zZXJGaWxlSW5mbz4mIHBhdGhzLCBTaG91bGRS
ZXNvbHZlRGlyZWN0b3JpZXMgc2hvdWxkUmVzb2x2ZURpcmVjdG9yaWVzLCBDb21wbGV0aW9uSGFu
ZGxlciYmIGNvbXBsZXRpb25IYW5kbGVyKQorRmlsZUxpc3RDcmVhdG9yOjpGaWxlTGlzdENyZWF0
b3IoY29uc3QgVmVjdG9yPEZpbGVDaG9vc2VyRmlsZUluZm8+JiBwYXRocywgY29uc3QgSGFzaFNl
dDxTdHJpbmc+JiBhbGxvd2VkVHlwZXMsIFNob3VsZFJlc29sdmVEaXJlY3RvcmllcyBzaG91bGRS
ZXNvbHZlRGlyZWN0b3JpZXMsIENvbXBsZXRpb25IYW5kbGVyJiYgY29tcGxldGlvbkhhbmRsZXIp
CiB7CiAgICAgaWYgKHNob3VsZFJlc29sdmVEaXJlY3RvcmllcyA9PSBTaG91bGRSZXNvbHZlRGly
ZWN0b3JpZXM6Ok5vKQotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihjcmVhdGVGaWxlTGlzdDxT
aG91bGRSZXNvbHZlRGlyZWN0b3JpZXM6Ok5vPihwYXRocykpOworICAgICAgICBjb21wbGV0aW9u
SGFuZGxlcihjcmVhdGVGaWxlTGlzdDxTaG91bGRSZXNvbHZlRGlyZWN0b3JpZXM6Ok5vPihwYXRo
cywgYWxsb3dlZFR5cGVzKSk7CiAgICAgZWxzZSB7CiAgICAgICAgIC8vIFJlc29sdmUgZGlyZWN0
b3JpZXMgb24gYSBiYWNrZ3JvdW5kIHRocmVhZCB0byBhdm9pZCBibG9ja2luZyB0aGUgbWFpbiB0
aHJlYWQuCiAgICAgICAgIG1fY29tcGxldGlvbkhhbmRlciA9IFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpOwogICAgICAgICBtX3dvcmtRdWV1ZSA9IFdvcmtRdWV1ZTo6Y3JlYXRlKCJGaWxlTGlz
dENyZWF0b3IgV29yayBRdWV1ZSIpOwotICAgICAgICBtX3dvcmtRdWV1ZS0+ZGlzcGF0Y2goW3Ro
aXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgcGF0aHMgPSBjcm9zc1RocmVhZENv
cHkocGF0aHMpXSgpIG11dGFibGUgewotICAgICAgICAgICAgYXV0byBmaWxlTGlzdCA9IGNyZWF0
ZUZpbGVMaXN0PFNob3VsZFJlc29sdmVEaXJlY3Rvcmllczo6WWVzPihwYXRocyk7CisgICAgICAg
IG1fd29ya1F1ZXVlLT5kaXNwYXRjaChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRo
aXMpLCBwYXRocyA9IGNyb3NzVGhyZWFkQ29weShwYXRocyksIGFsbG93ZWRUeXBlcyA9IGNyb3Nz
VGhyZWFkQ29weShhbGxvd2VkVHlwZXMpXSgpIG11dGFibGUgeworICAgICAgICAgICAgYXV0byBm
aWxlTGlzdCA9IGNyZWF0ZUZpbGVMaXN0PFNob3VsZFJlc29sdmVEaXJlY3Rvcmllczo6WWVzPihw
YXRocywgYWxsb3dlZFR5cGVzKTsKICAgICAgICAgICAgIGNhbGxPbk1haW5UaHJlYWQoW3RoaXMs
IHByb3RlY3RlZFRoaXMgPSBXVEZNb3ZlKHByb3RlY3RlZFRoaXMpLCBmaWxlTGlzdCA9IFdURk1v
dmUoZmlsZUxpc3QpXSgpIG11dGFibGUgewogICAgICAgICAgICAgICAgIGlmIChhdXRvIGNvbXBs
ZXRpb25IYW5kZXIgPSBXVEZNb3ZlKG1fY29tcGxldGlvbkhhbmRlcikpCiAgICAgICAgICAgICAg
ICAgICAgIGNvbXBsZXRpb25IYW5kZXIoV1RGTW92ZShmaWxlTGlzdCkpOwpAQCAtNzYsMTQgKzc2
LDE0IEBAIEZpbGVMaXN0Q3JlYXRvcjo6RmlsZUxpc3RDcmVhdG9yKGNvbnN0IFZlY3RvcjxGaWxl
Q2hvb3NlckZpbGVJbmZvPiYgcGF0aHMsIFNob3VsCiB9CiAKIHRlbXBsYXRlPEZpbGVMaXN0Q3Jl
YXRvcjo6U2hvdWxkUmVzb2x2ZURpcmVjdG9yaWVzIHNob3VsZFJlc29sdmVEaXJlY3Rvcmllcz4K
LVJlZjxGaWxlTGlzdD4gRmlsZUxpc3RDcmVhdG9yOjpjcmVhdGVGaWxlTGlzdChjb25zdCBWZWN0
b3I8RmlsZUNob29zZXJGaWxlSW5mbz4mIHBhdGhzKQorUmVmPEZpbGVMaXN0PiBGaWxlTGlzdENy
ZWF0b3I6OmNyZWF0ZUZpbGVMaXN0KGNvbnN0IFZlY3RvcjxGaWxlQ2hvb3NlckZpbGVJbmZvPiYg
cGF0aHMsIGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgYWxsb3dlZFR5cGVzKQogewogICAgIFZlY3Rv
cjxSZWY8RmlsZT4+IGZpbGVPYmplY3RzOwogICAgIGZvciAoYXV0byYgaW5mbyA6IHBhdGhzKSB7
CiAgICAgICAgIGlmIChzaG91bGRSZXNvbHZlRGlyZWN0b3JpZXMgPT0gU2hvdWxkUmVzb2x2ZURp
cmVjdG9yaWVzOjpZZXMgJiYgRmlsZVN5c3RlbTo6ZmlsZUlzRGlyZWN0b3J5KGluZm8ucGF0aCwg
RmlsZVN5c3RlbTo6U2hvdWxkRm9sbG93U3ltYm9saWNMaW5rczo6Tm8pKQogICAgICAgICAgICAg
YXBwZW5kRGlyZWN0b3J5RmlsZXMoaW5mby5wYXRoLCBGaWxlU3lzdGVtOjpwYXRoR2V0RmlsZU5h
bWUoaW5mby5wYXRoKSwgZmlsZU9iamVjdHMpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBm
aWxlT2JqZWN0cy5hcHBlbmQoRmlsZTo6Y3JlYXRlKGluZm8ucGF0aCwgaW5mby5kaXNwbGF5TmFt
ZSkpOworICAgICAgICAgICAgZmlsZU9iamVjdHMuYXBwZW5kKEZpbGU6OmNyZWF0ZShpbmZvLnBh
dGgsIGluZm8uZGlzcGxheU5hbWUsIGFsbG93ZWRUeXBlcykpOwogICAgIH0KICAgICByZXR1cm4g
RmlsZUxpc3Q6OmNyZWF0ZShXVEZNb3ZlKGZpbGVPYmplY3RzKSk7CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9odG1sL0ZpbGVMaXN0Q3JlYXRvci5oIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9GaWxlTGlzdENyZWF0b3IuaAppbmRleCA3N2MwYTAzOTBmYjExNzA1ZmFmZjk1NGYxNWNhZmRl
NjhhZmFjMjI1Li5lNzY1NzA5ZmQxNDBjZmIyNDRmYjZiMTYwOWQ1ODg5ODEyYjkzNjM1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0ZpbGVMaXN0Q3JlYXRvci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvRmlsZUxpc3RDcmVhdG9yLmgKQEAgLTQxLDkgKzQxLDkgQEAgcHVibGlj
OgogICAgIHVzaW5nIENvbXBsZXRpb25IYW5kbGVyID0gRnVuY3Rpb248dm9pZChSZWY8RmlsZUxp
c3Q+JiYpPjsKIAogICAgIGVudW0gY2xhc3MgU2hvdWxkUmVzb2x2ZURpcmVjdG9yaWVzIHsgTm8s
IFllcyB9OwotICAgIHN0YXRpYyBSZWY8RmlsZUxpc3RDcmVhdG9yPiBjcmVhdGUoY29uc3QgVmVj
dG9yPEZpbGVDaG9vc2VyRmlsZUluZm8+JiBwYXRocywgU2hvdWxkUmVzb2x2ZURpcmVjdG9yaWVz
IHNob3VsZFJlc29sdmVEaXJlY3RvcmllcywgQ29tcGxldGlvbkhhbmRsZXImJiBjb21wbGV0aW9u
SGFuZGxlcikKKyAgICBzdGF0aWMgUmVmPEZpbGVMaXN0Q3JlYXRvcj4gY3JlYXRlKGNvbnN0IFZl
Y3RvcjxGaWxlQ2hvb3NlckZpbGVJbmZvPiYgcGF0aHMsIGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYg
YWxsb3dlZFR5cGVzLCBTaG91bGRSZXNvbHZlRGlyZWN0b3JpZXMgc2hvdWxkUmVzb2x2ZURpcmVj
dG9yaWVzLCBDb21wbGV0aW9uSGFuZGxlciYmIGNvbXBsZXRpb25IYW5kbGVyKQogICAgIHsKLSAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRmlsZUxpc3RDcmVhdG9yKHBhdGhzLCBzaG91bGRS
ZXNvbHZlRGlyZWN0b3JpZXMsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKSk7CisgICAgICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IEZpbGVMaXN0Q3JlYXRvcihwYXRocywgYWxsb3dlZFR5cGVz
LCBzaG91bGRSZXNvbHZlRGlyZWN0b3JpZXMsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKSk7
CiAgICAgfQogCiAgICAgfkZpbGVMaXN0Q3JlYXRvcigpOwpAQCAtNTEsMTAgKzUxLDEwIEBAIHB1
YmxpYzoKICAgICB2b2lkIGNhbmNlbCgpOwogCiBwcml2YXRlOgotICAgIEZpbGVMaXN0Q3JlYXRv
cihjb25zdCBWZWN0b3I8RmlsZUNob29zZXJGaWxlSW5mbz4mIHBhdGhzLCBTaG91bGRSZXNvbHZl
RGlyZWN0b3JpZXMsIENvbXBsZXRpb25IYW5kbGVyJiYpOworICAgIEZpbGVMaXN0Q3JlYXRvcihj
b25zdCBWZWN0b3I8RmlsZUNob29zZXJGaWxlSW5mbz4mIHBhdGhzLCBjb25zdCBIYXNoU2V0PFN0
cmluZz4mIGFsbG93ZWRUeXBlcywgU2hvdWxkUmVzb2x2ZURpcmVjdG9yaWVzLCBDb21wbGV0aW9u
SGFuZGxlciYmKTsKIAogICAgIHRlbXBsYXRlPFNob3VsZFJlc29sdmVEaXJlY3RvcmllcyBzaG91
bGRSZXNvbHZlRGlyZWN0b3JpZXM+Ci0gICAgc3RhdGljIFJlZjxGaWxlTGlzdD4gY3JlYXRlRmls
ZUxpc3QoY29uc3QgVmVjdG9yPEZpbGVDaG9vc2VyRmlsZUluZm8+Jik7CisgICAgc3RhdGljIFJl
ZjxGaWxlTGlzdD4gY3JlYXRlRmlsZUxpc3QoY29uc3QgVmVjdG9yPEZpbGVDaG9vc2VyRmlsZUlu
Zm8+JiwgY29uc3QgSGFzaFNldDxTdHJpbmc+JiBhbGxvd2VkVHlwZXMpOwogCiAgICAgUmVmUHRy
PFdvcmtRdWV1ZT4gbV93b3JrUXVldWU7CiAgICAgQ29tcGxldGlvbkhhbmRsZXIgbV9jb21wbGV0
aW9uSGFuZGVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRmlsZUNob29z
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRmlsZUNob29zZXIuY3BwCmluZGV4IGFj
N2Y1ZDQ3YmNmNDUzOGZlZDgwYzYyYjk5YzI0NzM1MDQ3NDg4NWIuLjVjOTAzZTk1NWJmNzlhMTM5
ZmNlOWUyMWU0MmFjOGFlYWEyM2Q1ZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL0ZpbGVDaG9vc2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GaWxlQ2hv
b3Nlci5jcHAKQEAgLTI5LDYgKzI5LDggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRl
ICJGaWxlQ2hvb3Nlci5oIgogCisjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgorCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIEZpbGVDaG9vc2VyOjpGaWxlQ2hvb3NlcihGaWxlQ2hvb3NlckNs
aWVudCogY2xpZW50LCBjb25zdCBGaWxlQ2hvb3NlclNldHRpbmdzJiBzZXR0aW5ncykKQEAgLTQ0
LDYgKzQ2LDE5IEBAIFJlZjxGaWxlQ2hvb3Nlcj4gRmlsZUNob29zZXI6OmNyZWF0ZShGaWxlQ2hv
b3NlckNsaWVudCogY2xpZW50LCBjb25zdCBGaWxlQ2hvb3NlCiAKIEZpbGVDaG9vc2VyOjp+Rmls
ZUNob29zZXIoKSA9IGRlZmF1bHQ7CiAKK0hhc2hTZXQ8U3RyaW5nPiBGaWxlQ2hvb3Nlcjo6YWxs
b3dlZFR5cGVzKCkgY29uc3QKK3sKKyAgICBIYXNoU2V0PFN0cmluZz4gYWxsb3dlZFR5cGVzOwor
ICAgIGZvciAoYXV0byYgdHlwZSA6IG1fc2V0dGluZ3MuYWNjZXB0TUlNRVR5cGVzKQorICAgICAg
ICBhbGxvd2VkVHlwZXMuYWRkKHR5cGUpOworICAgIGZvciAoYXV0byYgZXh0ZW5zaW9uIDogbV9z
ZXR0aW5ncy5hY2NlcHRGaWxlRXh0ZW5zaW9ucykgeworICAgICAgICBhdXRvIHR5cGUgPSBNSU1F
VHlwZVJlZ2lzdHJ5OjpnZXRNSU1FVHlwZUZvckV4dGVuc2lvbihleHRlbnNpb24uc3RhcnRzV2l0
aCgnLicpID8gZXh0ZW5zaW9uLnJpZ2h0KGV4dGVuc2lvbi5sZW5ndGgoKSAtIDEpIDogZXh0ZW5z
aW9uKTsKKyAgICAgICAgaWYgKCF0eXBlLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGFsbG93ZWRU
eXBlcy5hZGQodHlwZSk7CisgICAgfQorICAgIHJldHVybiBhbGxvd2VkVHlwZXM7Cit9CisKIHZv
aWQgRmlsZUNob29zZXI6OmludmFsaWRhdGUoKQogewogICAgIEFTU0VSVChtX2NsaWVudCk7CkBA
IC03MCw3ICs4NSw3IEBAIHZvaWQgRmlsZUNob29zZXI6OmNob29zZUZpbGVzKGNvbnN0IFZlY3Rv
cjxTdHJpbmc+JiBmaWxlbmFtZXMpCiAgICAgVmVjdG9yPEZpbGVDaG9vc2VyRmlsZUluZm8+IGZp
bGVzOwogICAgIGZvciAoYXV0byYgZmlsZW5hbWUgOiBmaWxlbmFtZXMpCiAgICAgICAgIGZpbGVz
LmFwcGVuZChGaWxlQ2hvb3NlckZpbGVJbmZvKGZpbGVuYW1lKSk7Ci0gICAgbV9jbGllbnQtPmZp
bGVzQ2hvc2VuKGZpbGVzKTsKKyAgICBtX2NsaWVudC0+ZmlsZXNDaG9zZW4oZmlsZXMsIGFsbG93
ZWRUeXBlcygpKTsKIH0KIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GaWxlQ2hvb3Nlci5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vRmlsZUNob29zZXIuaAppbmRleCBlMjRlZDI4Y2FkMjhiZDNkYmU5YWQ5OWQxZjllYTg0
NGIxNmQ1NjU0Li4zZGY1NGYwNTE1YmRmZjQ1MDIxMDQ4NmE1MjYyZDg4NGI4OTQ5YmZkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GaWxlQ2hvb3Nlci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL0ZpbGVDaG9vc2VyLmgKQEAgLTMwLDYgKzMwLDcgQEAKICNpZm5k
ZWYgRmlsZUNob29zZXJfaAogI2RlZmluZSBGaWxlQ2hvb3Nlcl9oCiAKKyNpbmNsdWRlIDx3dGYv
SGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpAQCAtNzYsNyArNzcsNyBA
QCBjbGFzcyBGaWxlQ2hvb3NlckNsaWVudCB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+RmlsZUNo
b29zZXJDbGllbnQoKSA9IGRlZmF1bHQ7CiAKLSAgICB2aXJ0dWFsIHZvaWQgZmlsZXNDaG9zZW4o
Y29uc3QgVmVjdG9yPEZpbGVDaG9vc2VyRmlsZUluZm8+JiwgY29uc3QgU3RyaW5nJiBkaXNwbGF5
U3RyaW5nID0geyB9LCBJY29uKiA9IG51bGxwdHIpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZmls
ZXNDaG9zZW4oY29uc3QgVmVjdG9yPEZpbGVDaG9vc2VyRmlsZUluZm8+JiwgY29uc3QgSGFzaFNl
dDxTdHJpbmc+JiBhbGxvd2VkVHlwZXMgPSB7IH0sIGNvbnN0IFN0cmluZyYgZGlzcGxheVN0cmlu
ZyA9IHsgfSwgSWNvbiogPSBudWxscHRyKSA9IDA7CiB9OwogCiBjbGFzcyBGaWxlQ2hvb3NlciA6
IHB1YmxpYyBSZWZDb3VudGVkPEZpbGVDaG9vc2VyPiB7CkBAIC0xMDIsNiArMTAzLDggQEAgcHVi
bGljOgogcHJpdmF0ZToKICAgICBGaWxlQ2hvb3NlcihGaWxlQ2hvb3NlckNsaWVudCosIGNvbnN0
IEZpbGVDaG9vc2VyU2V0dGluZ3MmKTsKIAorICAgIEhhc2hTZXQ8U3RyaW5nPiBhbGxvd2VkVHlw
ZXMoKSBjb25zdDsKKwogICAgIEZpbGVDaG9vc2VyQ2xpZW50KiBtX2NsaWVudCB7IG51bGxwdHIg
fTsKICAgICBGaWxlQ2hvb3NlclNldHRpbmdzIG1fc2V0dGluZ3M7CiB9OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTUlNRVR5cGVSZWdpc3RyeS5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vTUlNRVR5cGVSZWdpc3RyeS5oCmluZGV4IDk5NmVlNzg0ZWRlMmFkYjAxYTE1
NTBlMmZlNTBkNTA2NDNiM2ZhM2YuLjEzZTI1MTZmOTYxMjY1NjdlMTU5ZWFlNWY1NWMyMjRiMDkw
ZWQ4NDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL01JTUVUeXBlUmVnaXN0
cnkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9NSU1FVHlwZVJlZ2lzdHJ5LmgKQEAg
LTc0LDcgKzc0LDcgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBib29sIGlz
U3VwcG9ydGVkSW1hZ2VWaWRlb09yU1ZHTUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSk7
CiAKICAgICAvLyBDaGVjayB0byBzZWUgaWYgYSBNSU1FIHR5cGUgaXMgc3VpdGFibGUgZm9yIGJl
aW5nIGVuY29kZWQuCi0gICAgc3RhdGljIGJvb2wgaXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlRm9y
RW5jb2RpbmcoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSk7CisgICAgV0VCQ09SRV9FWFBPUlQgc3Rh
dGljIGJvb2wgaXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlRm9yRW5jb2RpbmcoY29uc3QgU3RyaW5n
JiBtaW1lVHlwZSk7CiAKICAgICAvLyBDaGVjayB0byBzZWUgaWYgYSBNSU1FIHR5cGUgaXMgc3Vp
dGFibGUgZm9yIGJlaW5nIGxvYWRlZCBhcyBhIEphdmFTY3JpcHQgb3IgSlNPTiByZXNvdXJjZS4K
ICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgYm9vbCBpc1N1cHBvcnRlZEphdmFTY3JpcHRNSU1F
VHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvQmxvYkRhdGFGaWxlUmVmZXJlbmNlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYkRhdGFGaWxlUmVmZXJlbmNlLmNwcAppbmRleCA1YWJm
ZDc1Y2I0OTQ1NmU0MmQzOWQ0NGQzYmMyMjU5YWFmZmE1MjI2Li5hNzI2ZTcyNTU3MTE1OTY0ODVj
ZGFhMTQ5OTZiMzhhZjBkZGY0MGM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL0Jsb2JEYXRhRmlsZVJlZmVyZW5jZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9CbG9iRGF0YUZpbGVSZWZlcmVuY2UuY3BwCkBAIC0zMiwxNSArMzIs
MTggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1CbG9iRGF0YUZpbGVSZWZlcmVuY2U6OkJs
b2JEYXRhRmlsZVJlZmVyZW5jZShjb25zdCBTdHJpbmcmIHBhdGgpCitCbG9iRGF0YUZpbGVSZWZl
cmVuY2U6OkJsb2JEYXRhRmlsZVJlZmVyZW5jZShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0
cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGRlc3RpbmF0aW9u
VHlwZSkKICAgICA6IG1fcGF0aChwYXRoKQorICAgICwgbV9uYW1lKG5hbWUpCisgICAgLCBtX3R5
cGUodHlwZSkKKyAgICAsIG1fZGVzdGluYXRpb25UeXBlKGRlc3RpbmF0aW9uVHlwZSkKIHsKIH0K
IAogQmxvYkRhdGFGaWxlUmVmZXJlbmNlOjp+QmxvYkRhdGFGaWxlUmVmZXJlbmNlKCkKIHsKICNp
ZiBFTkFCTEUoRklMRV9SRVBMQUNFTUVOVCkKLSAgICBpZiAoIW1fcmVwbGFjZW1lbnRQYXRoLmlz
TnVsbCgpKQorICAgIGlmICghbV9yZXBsYWNlbWVudFBhdGguaXNOdWxsKCkgJiYgbV9kZXN0aW5h
dGlvblR5cGUgPT0gImFwcGxpY2F0aW9uL3ppcCJfcykKICAgICAgICAgRmlsZVN5c3RlbTo6ZGVs
ZXRlRmlsZShtX3JlcGxhY2VtZW50UGF0aCk7CiAjZW5kaWYKIH0KQEAgLTQ4LDcgKzUxLDcgQEAg
QmxvYkRhdGFGaWxlUmVmZXJlbmNlOjp+QmxvYkRhdGFGaWxlUmVmZXJlbmNlKCkKIGNvbnN0IFN0
cmluZyYgQmxvYkRhdGFGaWxlUmVmZXJlbmNlOjpwYXRoKCkKIHsKICNpZiBFTkFCTEUoRklMRV9S
RVBMQUNFTUVOVCkKLSAgICBpZiAobV9yZXBsYWNlbWVudFNob3VsZEJlR2VuZXJhdGVkKQorICAg
IGlmIChyZXBsYWNlbWVudFNob3VsZEJlR2VuZXJhdGVkKCkpCiAgICAgICAgIGdlbmVyYXRlUmVw
bGFjZW1lbnRGaWxlKCk7CiAKICAgICBpZiAoIW1fcmVwbGFjZW1lbnRQYXRoLmlzTnVsbCgpKQpA
QCAtNjEsNyArNjQsNyBAQCBjb25zdCBTdHJpbmcmIEJsb2JEYXRhRmlsZVJlZmVyZW5jZTo6cGF0
aCgpCiB1bnNpZ25lZCBsb25nIGxvbmcgQmxvYkRhdGFGaWxlUmVmZXJlbmNlOjpzaXplKCkKIHsK
ICNpZiBFTkFCTEUoRklMRV9SRVBMQUNFTUVOVCkKLSAgICBpZiAobV9yZXBsYWNlbWVudFNob3Vs
ZEJlR2VuZXJhdGVkKQorICAgIGlmIChyZXBsYWNlbWVudFNob3VsZEJlR2VuZXJhdGVkKCkpCiAg
ICAgICAgIGdlbmVyYXRlUmVwbGFjZW1lbnRGaWxlKCk7CiAjZW5kaWYKIApAQCAtNzMsNyArNzYs
NyBAQCBPcHRpb25hbDxXYWxsVGltZT4gQmxvYkRhdGFGaWxlUmVmZXJlbmNlOjpleHBlY3RlZE1v
ZGlmaWNhdGlvblRpbWUoKQogI2lmIEVOQUJMRShGSUxFX1JFUExBQ0VNRU5UKQogICAgIC8vIFdl
IGRvIG5vdCBjdXJyZW50bHkgdHJhY2sgbW9kaWZpY2F0aW9ucyBmb3IgZ2VuZXJhdGVkIGZpbGVz
LCBiZWNhdXNlIHdlIGhhdmUgYSBzbmFwc2hvdC4KICAgICAvLyBVbmZvcnR1bmF0ZWx5LCB0aGlz
IGlzIGluY29uc2lzdGVudCB3aXRoIHJlZ3VsYXIgZmlsZSBoYW5kbGluZyAtIEZpbGUgb2JqZWN0
cyBzaG91bGQgYmUgaW52YWxpZGF0ZWQgd2hlbiB1bmRlcmx5aW5nIGZpbGVzIGNoYW5nZS4KLSAg
ICBpZiAobV9yZXBsYWNlbWVudFNob3VsZEJlR2VuZXJhdGVkIHx8ICFtX3JlcGxhY2VtZW50UGF0
aC5pc051bGwoKSkKKyAgICBpZiAoIW1fZGVzdGluYXRpb25UeXBlLmlzTnVsbCgpIHx8ICFtX3Jl
cGxhY2VtZW50UGF0aC5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICNl
bmRpZgogICAgIHJldHVybiBtX2V4cGVjdGVkTW9kaWZpY2F0aW9uVGltZTsKQEAgLTg2LDcgKzg5
LDggQEAgdm9pZCBCbG9iRGF0YUZpbGVSZWZlcmVuY2U6OnN0YXJ0VHJhY2tpbmdNb2RpZmljYXRp
b25zKCkKICAgICAvLyB0aGUgY29zdCBvZiB0cmFja2luZyBmaWxlIG1vZGlmaWNhdGlvbnMuCiAK
ICNpZiBFTkFCTEUoRklMRV9SRVBMQUNFTUVOVCkKLSAgICBtX3JlcGxhY2VtZW50U2hvdWxkQmVH
ZW5lcmF0ZWQgPSBGaWxlOjpzaG91bGRSZXBsYWNlRmlsZShtX3BhdGgpOworICAgIGlmIChGaWxl
Ojppc0ZpbGVUeXBlUGFja2FnZShtX3BhdGgpKQorICAgICAgICBtX2Rlc3RpbmF0aW9uVHlwZSA9
ICJhcHBsaWNhdGlvbi96aXAiX3M7CiAjZW5kaWYKIAogICAgIC8vIEZJWE1FOiBTb21lIHBsYXRm
b3JtcyBwcm92aWRlIGJldHRlciB3YXlzIHRvIGxpc3RlbiBmb3IgZmlsZSBzeXN0ZW0gb2JqZWN0
IGNoYW5nZXMsIGNvbnNpZGVyIHVzaW5nIHRoZXNlLgpAQCAtOTcsNyArMTAxLDcgQEAgdm9pZCBC
bG9iRGF0YUZpbGVSZWZlcmVuY2U6OnN0YXJ0VHJhY2tpbmdNb2RpZmljYXRpb25zKCkKICAgICBt
X2V4cGVjdGVkTW9kaWZpY2F0aW9uVGltZSA9IG1ldGFkYXRhLnZhbHVlKCkubW9kaWZpY2F0aW9u
VGltZTsKIAogI2lmIEVOQUJMRShGSUxFX1JFUExBQ0VNRU5UKQotICAgIGlmIChtX3JlcGxhY2Vt
ZW50U2hvdWxkQmVHZW5lcmF0ZWQpCisgICAgaWYgKHJlcGxhY2VtZW50U2hvdWxkQmVHZW5lcmF0
ZWQoKSkKICAgICAgICAgcmV0dXJuOwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYkRhdGFGaWxlUmVmZXJlbmNlLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JEYXRhRmlsZVJlZmVyZW5jZS5oCmluZGV4IDY1ODgy
OWQwN2ZjZmJkNmIwMmEyMGUxY2IwMWZkYzlkNmRjYzA3YzkuLmJkZDFlZjgyOTUyZWY0MTQxMTc2
ZDNjNjliODE3YTEzMjJjMzE3YjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvQmxvYkRhdGFGaWxlUmVmZXJlbmNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9CbG9iRGF0YUZpbGVSZWZlcmVuY2UuaApAQCAtMjMsOCArMjMsNyBAQAog
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgQmxvYkRh
dGFGaWxlUmVmZXJlbmNlX2gKLSNkZWZpbmUgQmxvYkRhdGFGaWxlUmVmZXJlbmNlX2gKKyNwcmFn
bWEgb25jZQogCiAjaW5jbHVkZSA8d3RmL01hcmthYmxlLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNv
dW50ZWQuaD4KQEAgLTM1LDkgKzM0LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBX
RUJDT1JFX0VYUE9SVCBCbG9iRGF0YUZpbGVSZWZlcmVuY2UgOiBwdWJsaWMgUmVmQ291bnRlZDxC
bG9iRGF0YUZpbGVSZWZlcmVuY2U+IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEJsb2JEYXRh
RmlsZVJlZmVyZW5jZT4gY3JlYXRlKGNvbnN0IFN0cmluZyYgcGF0aCkKKyAgICBzdGF0aWMgUmVm
PEJsb2JEYXRhRmlsZVJlZmVyZW5jZT4gY3JlYXRlKGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3Qg
U3RyaW5nJiBuYW1lID0geyB9LCBjb25zdCBTdHJpbmcmIHR5cGUgPSB7IH0sIGNvbnN0IFN0cmlu
ZyYgZGVzdGluYXRpb25UeXBlID0geyB9KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgQmxvYkRhdGFGaWxlUmVmZXJlbmNlKHBhdGgpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgQmxvYkRhdGFGaWxlUmVmZXJlbmNlKHBhdGgsIG5hbWUsIHR5cGUsIGRlc3RpbmF0
aW9uVHlwZSkpOwogICAgIH0KIAogICAgIHZpcnR1YWwgfkJsb2JEYXRhRmlsZVJlZmVyZW5jZSgp
OwpAQCAtNTIsMjIgKzUxLDIzIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcmV2b2tlRmls
ZUFjY2VzcygpOwogCiBwcm90ZWN0ZWQ6Ci0gICAgQmxvYkRhdGFGaWxlUmVmZXJlbmNlKGNvbnN0
IFN0cmluZyYgcGF0aCk7CisgICAgQmxvYkRhdGFGaWxlUmVmZXJlbmNlKGNvbnN0IFN0cmluZyYg
cGF0aCwgY29uc3QgU3RyaW5nJiBuYW1lID0geyB9LCBjb25zdCBTdHJpbmcmIHR5cGUgPSB7IH0s
IGNvbnN0IFN0cmluZyYgZGVzdGluYXRpb25UeXBlID0geyB9KTsKIAogcHJpdmF0ZToKICNpZiBF
TkFCTEUoRklMRV9SRVBMQUNFTUVOVCkKKyAgICBib29sIHJlcGxhY2VtZW50U2hvdWxkQmVHZW5l
cmF0ZWQoKSBjb25zdDsKICAgICB2b2lkIGdlbmVyYXRlUmVwbGFjZW1lbnRGaWxlKCk7CiAjZW5k
aWYKIAogICAgIFN0cmluZyBtX3BhdGg7CisgICAgU3RyaW5nIG1fbmFtZTsKKyAgICBTdHJpbmcg
bV90eXBlOworICAgIFN0cmluZyBtX2Rlc3RpbmF0aW9uVHlwZTsKICNpZiBFTkFCTEUoRklMRV9S
RVBMQUNFTUVOVCkKICAgICBTdHJpbmcgbV9yZXBsYWNlbWVudFBhdGg7Ci0gICAgYm9vbCBtX3Jl
cGxhY2VtZW50U2hvdWxkQmVHZW5lcmF0ZWQgeyBmYWxzZSB9OwogI2VuZGlmCiAgICAgdW5zaWdu
ZWQgbG9uZyBsb25nIG1fc2l6ZSB7IDAgfTsKICAgICBNYXJrYWJsZTxXYWxsVGltZSwgV2FsbFRp
bWU6Ok1hcmthYmxlVHJhaXRzPiBtX2V4cGVjdGVkTW9kaWZpY2F0aW9uVGltZTsKIH07CiAKIH0K
LQotI2VuZGlmIC8vIEJsb2JEYXRhRmlsZVJlZmVyZW5jZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9CbG9iRGF0YUZpbGVSZWZlcmVuY2VNYWMubW0g
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9CbG9iRGF0YUZpbGVSZWZlcmVu
Y2VNYWMubW0KaW5kZXggNWVjNzc3YTg2OTkwNjcxMThjYmNkNTUyOGU4ZjRmZmU5MmE0NDg2Yi4u
MWUxYmNjMWJiMWFiYzJiNTZhMmE1NDEyZGM4OTZjZjg5OGYxMTk0MCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvQmxvYkRhdGFGaWxlUmVmZXJlbmNlTWFj
Lm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL0Jsb2JEYXRhRmls
ZVJlZmVyZW5jZU1hYy5tbQpAQCAtMjgsMjUgKzI4LDU5IEBACiAKICNpZiBFTkFCTEUoRklMRV9S
RVBMQUNFTUVOVCkKIAorI2ltcG9ydCAiVVRJVXRpbGl0aWVzLmgiCiAjaW1wb3J0IDx3dGYvRmls
ZU1ldGFkYXRhLmg+CiAjaW1wb3J0IDx3dGYvRmlsZVN5c3RlbS5oPgogI2ltcG9ydCA8d3RmL3Rl
eHQvQ1N0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2Jvb2wgQmxvYkRhdGFGaWxl
UmVmZXJlbmNlOjpyZXBsYWNlbWVudFNob3VsZEJlR2VuZXJhdGVkKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV90eXBlICE9IG1fZGVzdGluYXRpb25UeXBlICYmIG1fcmVwbGFjZW1lbnRQYXRoLmlz
TnVsbCgpOworfQorCiB2b2lkIEJsb2JEYXRhRmlsZVJlZmVyZW5jZTo6Z2VuZXJhdGVSZXBsYWNl
bWVudEZpbGUoKQogewotICAgIEFTU0VSVChtX3JlcGxhY2VtZW50UGF0aC5pc051bGwoKSk7Ci0g
ICAgQVNTRVJUKG1fcmVwbGFjZW1lbnRTaG91bGRCZUdlbmVyYXRlZCk7CisgICAgQVNTRVJUKHJl
cGxhY2VtZW50U2hvdWxkQmVHZW5lcmF0ZWQoKSk7CiAKICAgICBwcmVwYXJlRm9yRmlsZUFjY2Vz
cygpOwogCi0gICAgYXV0byBnZW5lcmF0ZWRGaWxlID0gRmlsZVN5c3RlbTo6Y3JlYXRlVGVtcG9y
YXJ5WmlwQXJjaGl2ZShtX3BhdGgpOwotICAgIGlmICghZ2VuZXJhdGVkRmlsZS5pc051bGwoKSkK
LSAgICAgICAgbV9yZXBsYWNlbWVudFBhdGggPSBXVEZNb3ZlKGdlbmVyYXRlZEZpbGUpOworICAg
IFN0cmluZyBnZW5lcmF0ZWRGaWxlOworICAgIGlmIChtX2Rlc3RpbmF0aW9uVHlwZSA9PSAiYXBw
bGljYXRpb24vemlwIl9zKQorICAgICAgICBnZW5lcmF0ZWRGaWxlID0gRmlsZVN5c3RlbTo6Y3Jl
YXRlVGVtcG9yYXJ5WmlwQXJjaGl2ZShtX3BhdGgpOworICAgIGVsc2UgeworICAgICAgICBBU1NF
UlQobV90eXBlICE9IG1fZGVzdGluYXRpb25UeXBlKTsKKyAgICAgICAgQVNTRVJUKG1fZGVzdGlu
YXRpb25UeXBlLnN0YXJ0c1dpdGgoImltYWdlLyJfcykpOworCisgICAgICAgIC8vIENyZWF0ZSB0
aGUgaW1hZ2Ugc291cmNlLgorICAgICAgICBhdXRvIHNvdXJjZVVSTCA9IGFkb3B0Q0YoQ0ZVUkxD
cmVhdGVXaXRoRmlsZVN5c3RlbVBhdGgoa0NGQWxsb2NhdG9yRGVmYXVsdCwgbV9wYXRoLmNyZWF0
ZUNGU3RyaW5nKCkuZ2V0KCksIGtDRlVSTFBPU0lYUGF0aFN0eWxlLCBmYWxzZSkpOworICAgICAg
ICBhdXRvIHNvdXJjZSA9IGFkb3B0Q0YoQ0dJbWFnZVNvdXJjZUNyZWF0ZVdpdGhVUkwoc291cmNl
VVJMLmdldCgpLCBOVUxMKSk7CisKKyAgICAgICAgLy8gQ3JlYXRlIGEgdGVtcG9yYXJ5IGZpbGUu
CisgICAgICAgIEZpbGVTeXN0ZW06OlBsYXRmb3JtRmlsZUhhbmRsZSBwbGF0Zm9ybUZpbGVIYW5k
bGU7CisgICAgICAgIGdlbmVyYXRlZEZpbGUgPSBGaWxlU3lzdGVtOjpvcGVuVGVtcG9yYXJ5Rmls
ZShtX25hbWUsIHBsYXRmb3JtRmlsZUhhbmRsZSk7CiAKLSAgICBtX3JlcGxhY2VtZW50U2hvdWxk
QmVHZW5lcmF0ZWQgPSBmYWxzZTsKLSAgICBpZiAoIW1fcmVwbGFjZW1lbnRQYXRoLmlzTnVsbCgp
KSB7CisgICAgICAgIC8vIENyZWF0ZSB0aGUgZGF0YSBjb25zdW1lci4KKyAgICAgICAgQ0dEYXRh
Q29uc3VtZXJDYWxsYmFja3MgY2FsbGJhY2tzID0geyBbXSh2b2lkICppbmZvLCBjb25zdCB2b2lk
KiBidWZmZXIsIHNpemVfdCBjb3VudCkgLT4gc2l6ZV90IHsKKyAgICAgICAgICAgIGF1dG8gcGxh
dGZvcm1GaWxlSGFuZGxlID0gKnN0YXRpY19jYXN0PEZpbGVTeXN0ZW06OlBsYXRmb3JtRmlsZUhh
bmRsZSo+KGluZm8pOworICAgICAgICAgICAgcmV0dXJuIEZpbGVTeXN0ZW06OndyaXRlVG9GaWxl
KHBsYXRmb3JtRmlsZUhhbmRsZSwgc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KGJ1ZmZlciksIGNv
dW50KTsKKyAgICAgICAgfSwgTlVMTCB9OworCisgICAgICAgIGF1dG8gY29uc3VtZXIgPSBhZG9w
dENGKENHRGF0YUNvbnN1bWVyQ3JlYXRlKCZwbGF0Zm9ybUZpbGVIYW5kbGUsICZjYWxsYmFja3Mp
KTsKKworICAgICAgICAvLyBDcmVhdGUgdGhlIGltYWdlIGRlc3RpbmF0aW9uLgorICAgICAgICBh
dXRvIHV0aSA9IFVUSUZyb21NSU1FVHlwZShtX2Rlc3RpbmF0aW9uVHlwZSk7CisgICAgICAgIGF1
dG8gZGVzdGluYXRpb24gPSBhZG9wdENGKENHSW1hZ2VEZXN0aW5hdGlvbkNyZWF0ZVdpdGhEYXRh
Q29uc3VtZXIoY29uc3VtZXIuZ2V0KCksIHV0aS5jcmVhdGVDRlN0cmluZygpLmdldCgpLCAxLCBO
VUxMKSk7CisKKyAgICAgICAgLy8gV3JpdGUgdGhlIGltYWdlIHNvdXJjZSB0byB0aGUgaW1hZ2Ug
ZGVzdGluYXRpb24uCisgICAgICAgIENHSW1hZ2VEZXN0aW5hdGlvbkFkZEltYWdlRnJvbVNvdXJj
ZShkZXN0aW5hdGlvbi5nZXQoKSwgc291cmNlLmdldCgpLCAwLCBudWxscHRyKTsKKyAgICAgICAg
Q0dJbWFnZURlc3RpbmF0aW9uRmluYWxpemUoZGVzdGluYXRpb24uZ2V0KCkpOworICAgICAgICBG
aWxlU3lzdGVtOjpjbG9zZUZpbGUocGxhdGZvcm1GaWxlSGFuZGxlKTsKKyAgICB9CisKKyAgICBp
ZiAoIWdlbmVyYXRlZEZpbGUuaXNOdWxsKCkpIHsKKyAgICAgICAgbV9yZXBsYWNlbWVudFBhdGgg
PSBXVEZNb3ZlKGdlbmVyYXRlZEZpbGUpOwogICAgICAgICBpZiAoYXV0byBtZXRhZGF0YSA9IEZp
bGVTeXN0ZW06OmZpbGVNZXRhZGF0YUZvbGxvd2luZ1N5bWxpbmtzKG1fcmVwbGFjZW1lbnRQYXRo
KSkKICAgICAgICAgICAgIG1fc2l6ZSA9IG1ldGFkYXRhLnZhbHVlKCkubGVuZ3RoOwogICAgIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS09wZW5QYW5l
bFBhcmFtZXRlcnMubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tPcGVu
UGFuZWxQYXJhbWV0ZXJzLm1tCmluZGV4IGQ5MDBmOWU4ZDY3NTQxY2I4YzI5ZWQ0MjhhMWU5YjAw
OGIxNDg4MjMuLjg2YTI0NTg4YTcxZDMwYzU2MTViMzM2ZWZkYjBkNjY3YjdiNjk3ZDIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS09wZW5QYW5lbFBhcmFt
ZXRlcnMubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLT3BlblBh
bmVsUGFyYW1ldGVycy5tbQpAQCAtMjUsNiArMjUsOCBAQAogCiAjaW1wb3J0ICJjb25maWcuaCIK
ICNpbXBvcnQgIldLT3BlblBhbmVsUGFyYW1ldGVyc0ludGVybmFsLmgiCisjaW1wb3J0IDxXZWJD
b3JlL0xvY2FsaXplZFN0cmluZ3MuaD4KKyNpbXBvcnQgPFdlYkNvcmUvTUlNRVR5cGVSZWdpc3Ry
eS5oPgogI2ltcG9ydCA8cGFsL3NwaS9jb2NvYS9Db3JlU2VydmljZXNTUEkuaD4KIAogI2lmIFBM
QVRGT1JNKE1BQykKQEAgLTYyLDExICs2NCwxMyBAQCBzdGF0aWMgTlNEaWN0aW9uYXJ5PE5TU3Ry
aW5nICosIE5TU2V0PE5TU3RyaW5nICo+ICo+ICpleHRlbnNpb25zRm9yTUlNRVR5cGVNYXAoKQog
ICAgICAgICAgICAgaWYgKCFtaW1lVHlwZSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgICAgIGF1dG8gZXh0ZW5zaW9ucyA9IGFkb3B0Q0YoVVRUeXBlQ29weUFsbFRhZ3NXaXRo
Q2xhc3ModXRpLCBrVVRUYWdDbGFzc0ZpbGVuYW1lRXh0ZW5zaW9uKSk7CisgICAgICAgICAgICBp
ZiAoIWV4dGVuc2lvbnMgfHwgIUNGQXJyYXlHZXRDb3VudChleHRlbnNpb25zLmdldCgpKSkKKyAg
ICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGFkZEV4dGVuc2lvbnNGb3JNSU1F
VHlwZSgoX19icmlkZ2UgTlNTdHJpbmcgKiltaW1lVHlwZS5nZXQoKSwgKF9fYnJpZGdlIE5TQXJy
YXk8TlNTdHJpbmcgKj4gKilleHRlbnNpb25zLmdldCgpKTsKICAgICAgICAgfQogCiAgICAgICAg
IC8vIEFkZCBhZGRpdGlvbmFsIG1pbWUgdHlwZXMgd2hpY2ggX1VUQ29weURlY2xhcmVkVHlwZUlk
ZW50aWZpZXJzKCkgbWF5IG5vdCByZXR1cm4uCi0gICAgICAgIGFkZEV4dGVuc2lvbkZvck1JTUVU
eXBlKEAiaW1hZ2Uvd2VicCIsIEAid2VicCIpOworICAgICAgICBhZGRFeHRlbnNpb25zRm9yTUlN
RVR5cGUoQCJpbWFnZS93ZWJwIiwgQFtAIndlYnAiXSk7CiAKICAgICAgICAgcmV0dXJuIGV4dGVu
c2lvbnNGb3JNSU1FVHlwZU1hcDsKICAgICB9KCkpOwpAQCAtNzksNiArODMsMTggQEAgc3RhdGlj
IE5TU2V0PE5TU3RyaW5nICo+ICpleHRlbnNpb25zRm9yTUlNRVR5cGUoTlNTdHJpbmcgKm1pbWV0
eXBlKQogICAgIHJldHVybiBbZXh0ZW5zaW9uc0Zvck1JTUVUeXBlTWFwKCkgb2JqZWN0Rm9yS2V5
Om1pbWV0eXBlXTsKIH0KIAorc3RhdGljIE5TU3RyaW5nICptaW1lVHlwZUZvckV4dGVuc2lvbihO
U1N0cmluZyAqZXh0ZW5zaW9uKQoreworICAgIE5TU2V0PE5TU3RyaW5nICo+ICptaW1lVHlwZXMg
PSBbZXh0ZW5zaW9uc0Zvck1JTUVUeXBlTWFwKCkga2V5c09mRW50cmllc1Bhc3NpbmdUZXN0Ol5C
T09MKE5TU3RyaW5nICptaW1lVHlwZSwgTlNTZXQ8TlNTdHJpbmcgKj4gKmV4dGVuc2lvbnMsIEJP
T0wgKikgeworICAgICAgICBpZiAoW21pbWVUeXBlIGhhc1N1ZmZpeDpAIioiXSkKKyAgICAgICAg
ICAgIHJldHVybiBOTzsKKyAgICAgICAgaWYgKFtleHRlbnNpb24gY2hhcmFjdGVyQXRJbmRleDow
XSA9PSAnLicpCisgICAgICAgICAgICByZXR1cm4gW2V4dGVuc2lvbnMgY29udGFpbnNPYmplY3Q6
W2V4dGVuc2lvbiBzdWJzdHJpbmdGcm9tSW5kZXg6MV1dOworICAgICAgICByZXR1cm4gW2V4dGVu
c2lvbnMgY29udGFpbnNPYmplY3Q6ZXh0ZW5zaW9uXTsKKyAgICB9XTsKKyAgICByZXR1cm4gW21p
bWVUeXBlcyBhbnlPYmplY3RdOworfQorCiBAaW1wbGVtZW50YXRpb24gV0tPcGVuUGFuZWxQYXJh
bWV0ZXJzCiAKIC0gKEJPT0wpYWxsb3dzTXVsdGlwbGVTZWxlY3Rpb24KQEAgLTEzNiwzNiArMTUy
LDExOCBAQCBzdGF0aWMgTlNTZXQ8TlNTdHJpbmcgKj4gKmV4dGVuc2lvbnNGb3JNSU1FVHlwZShO
U1N0cmluZyAqbWltZXR5cGUpCiAgICAgcmV0dXJuIFthbGxvd2VkRmlsZUV4dGVuc2lvbnMgYWxs
T2JqZWN0c107CiB9CiAKLS0gKE5TQXJyYXk8TlNTdHJpbmcgKj4gKilfYWxsb3dlZEZpbGVFeHRl
bnNpb25zVGl0bGVzCistIChOU0FycmF5PE5TU3RyaW5nICo+ICopX2FsbEltYWdlRmlsZUV4dGVu
c2lvbnMKIHsKLSAgICBhdXRvIGFjY2VwdGVkTUlNRVR5cGVzID0gW3NlbGYgX2FjY2VwdGVkTUlN
RVR5cGVzXTsKLSAgICBhdXRvIGFjY2VwdGVkRmlsZUV4dGVuc2lvbnMgPSBbc2VsZiBfYWNjZXB0
ZWRGaWxlRXh0ZW5zaW9uc107CisgICAgcmV0dXJuIFtleHRlbnNpb25zRm9yTUlNRVR5cGUoQCJp
bWFnZS8qIikgYWxsT2JqZWN0c107Cit9CiAKLSAgICBjb25zdGV4cHIgYXV0byBBbGxGaWxlc1Rp
dGxlID0gQCJBbGwgRmlsZXMiOwotICAgIGNvbnN0ZXhwciBhdXRvIEN1c3RvbUZpbGVzVGl0bGUg
PSBAIkN1c3RvbSBGaWxlcyI7CistIChOU0FycmF5PE5TU3RyaW5nICo+ICopX2FsbG93ZWRGaWxl
RXh0ZW5zaW9uc1RpdGxlcworeworICAgIE5TU3RyaW5nICphbGxGaWxlc1RpdGxlID0gV0VCX1VJ
X1NUUklORygiQWxsIEZpbGVzIiwgIkFsbCBGaWxlcyBpbiBmaWxlciBwaWNrZXIiKTsKKyAgICBO
U1N0cmluZyAqYWxsSW1hZ2VGaWxlc1RpdGxlID0gV0VCX1VJX1NUUklORygiSW1hZ2UgRmlsZXMi
LCAiSW1hZ2UgRmlsZXMgaW4gZmlsZXIgcGlja2VyIik7CisgICAgTlNTdHJpbmcgKmFsbFZpZGVv
RmlsZXNUaXRsZSA9IFdFQl9VSV9TVFJJTkcoIlZpZGVvIEZpbGVzIiwgIlZpZGVvIEZpbGVzIGlu
IGZpbGVyIHBpY2tlciIpOworICAgIE5TU3RyaW5nICphbGxBdWRpb0ZpbGVzVGl0bGUgPSBXRUJf
VUlfU1RSSU5HKCJBdWRpbyBGaWxlcyIsICJBdWRpbyBGaWxlcyBpbiBmaWxlciBwaWNrZXIiKTsK
KyAgICBOU1N0cmluZyAqY3VzdG9tRmlsZXNUaXRsZSA9IFdFQl9VSV9TVFJJTkcoIkN1c3RvbSBG
aWxlcyIsICJDdXN0b20gRmlsZXMgaW4gZmlsZXIgcGlja2VyIik7CisgICAgTlNTdHJpbmcgKmlt
YWdlVGl0bGUgPSBXRUJfVUlfU1RSSU5HKCIlQCBpbWFnZSIsICJJbWFnZSBmb3JtYXQgdHlwZSBp
biBmaWxlIHBpY2tlciIpOworICAgIE5TU3RyaW5nICp2aWRlb1RpdGxlID0gV0VCX1VJX1NUUklO
RygiJUAgdmlkZW8iLCAiVmlkZW8gZm9ybWF0IHR5cGUgaW4gZmlsZSBwaWNrZXIiKTsKKyAgICBO
U1N0cmluZyAqYXVkaW9UaXRsZSA9IFdFQl9VSV9TVFJJTkcoIiVAIGF1ZGlvIiwgIkF1ZGlvIGZv
cm1hdCB0eXBlIGluIGZpbGUgcGlja2VyIik7CisgICAgCisgICAgY29uc3RleHByIGF1dG8gaW1h
Z2VUeXBlID0gQCJpbWFnZSI7CisgICAgY29uc3RleHByIGF1dG8gdmlkZW9UeXBlID0gQCJ2aWRl
byI7CisgICAgY29uc3RleHByIGF1dG8gYXVkaW9UeXBlID0gQCJhdWRpbyI7CisgICAgY29uc3Rl
eHByIGF1dG8gY3VzdG9tVHlwZSA9IEAiY3VzdG9tIjsKICAgICAKLSAgICBpZiAoIVthY2NlcHRl
ZE1JTUVUeXBlcyBjb3VudF0gJiYgIVthY2NlcHRlZEZpbGVFeHRlbnNpb25zIGNvdW50XSkKLSAg
ICAgICAgcmV0dXJuIEBbQWxsRmlsZXNUaXRsZV07CisgICAgYXV0byBjb21wb3NlVGl0bGVzID0g
XihOU1N0cmluZyAqdHlwZSwgTlNTdHJpbmcgKnN1YlR5cGUsIE5TU3RyaW5nICphbGxUeXBlKSB7
CisgICAgICAgIE5TTXV0YWJsZUFycmF5KiB0aXRsZXMgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXld
OworCisgICAgICAgIC8vIGlmIHsgdHlwZSBzdWJUeXBlIH0gPT0gImltYWdlL3BuZyIgdGhlbiBh
ZGQgIlBORyBJbWFnZSIKKyAgICAgICAgaWYgKFtzdWJUeXBlIGxlbmd0aF0pIHsKKyAgICAgICAg
ICAgIE5TU3RyaW5nICp0eXBlVGl0bGUgPSBbdHlwZSBpc0VxdWFsVG9TdHJpbmc6aW1hZ2VUeXBl
XSA/IGltYWdlVGl0bGUgOiAoW3R5cGUgaXNFcXVhbFRvU3RyaW5nOnZpZGVvVHlwZV0gPyB2aWRl
b1RpdGxlIDogYXVkaW9UaXRsZSk7CisgICAgICAgICAgICBpZiAoW3N1YlR5cGUgbGVuZ3RoXSA8
PSA0KQorICAgICAgICAgICAgICAgIFt0aXRsZXMgYWRkT2JqZWN0OltOU1N0cmluZyBzdHJpbmdX
aXRoRm9ybWF0OnR5cGVUaXRsZSwgW3N1YlR5cGUgdXBwZXJjYXNlU3RyaW5nXV1dOworICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgIFt0aXRsZXMgYWRkT2JqZWN0OltOU1N0cmluZyBz
dHJpbmdXaXRoRm9ybWF0OnR5cGVUaXRsZSwgc3ViVHlwZV1dOworICAgICAgICB9IGVsc2UgaWYg
KFt0eXBlIGlzRXF1YWxUb1N0cmluZzpjdXN0b21UeXBlXSkgeworICAgICAgICAgICAgLy8gaWYg
eyB0eXBlIHN1YlR5cGUgfSA9PSAiQ3VzdG9tIEZpbGVzIiB0aGVuIGFkZCAiQ3VzdG9tIEZpbGVz
IgorICAgICAgICAgICAgW3RpdGxlcyBhZGRPYmplY3Q6Y3VzdG9tRmlsZXNUaXRsZV07CisgICAg
ICAgIH0KIAotICAgIGlmICghKFthY2NlcHRlZE1JTUVUeXBlcyBjb3VudF0gPT0gMSAmJiAhW2Fj
Y2VwdGVkRmlsZUV4dGVuc2lvbnMgY291bnRdKSkKLSAgICAgICAgcmV0dXJuIEBbQ3VzdG9tRmls
ZXNUaXRsZSwgQWxsRmlsZXNUaXRsZV07CisgICAgICAgIC8vIGlmIGFsbFR5cGUgPT0gImltYWdl
IiB0aGVuIGFkZCAiSW1hZ2UgRmlsZXMiCisgICAgICAgIGlmIChbYWxsVHlwZSBsZW5ndGhdKSB7
CisgICAgICAgICAgICBOU1N0cmluZyAqYWxsVHlwZVRpdGxlID0gW2FsbFR5cGUgaXNFcXVhbFRv
U3RyaW5nOmltYWdlVHlwZV0gPyBhbGxJbWFnZUZpbGVzVGl0bGUgOiAoW2FsbFR5cGUgaXNFcXVh
bFRvU3RyaW5nOnZpZGVvVHlwZV0gPyBhbGxWaWRlb0ZpbGVzVGl0bGUgOiBhbGxBdWRpb0ZpbGVz
VGl0bGUpOworICAgICAgICAgICAgW3RpdGxlcyBhZGRPYmplY3Q6YWxsVHlwZVRpdGxlXTsKKyAg
ICAgICAgfQogCi0gICAgYXV0byBtaW1lVHlwZSA9IFthY2NlcHRlZE1JTUVUeXBlcyBmaXJzdE9i
amVjdF07Ci0gICAgYXV0byByYW5nZSA9IFttaW1lVHlwZSByYW5nZU9mU3RyaW5nOkAiLyJdOwot
ICAgIAotICAgIGlmICghcmFuZ2UubGVuZ3RoKQotICAgICAgICByZXR1cm4gQFtDdXN0b21GaWxl
c1RpdGxlLCBBbGxGaWxlc1RpdGxlXTsKLSAgICAKLSAgICBhdXRvIG1pbWVUeXBlUHJlZml4ID0g
W21pbWVUeXBlIHN1YnN0cmluZ1RvSW5kZXg6cmFuZ2UubG9jYXRpb25dOwotICAgIGF1dG8gbWlt
ZVR5cGVTdWZmaXggPSBbbWltZVR5cGUgc3Vic3RyaW5nRnJvbUluZGV4OnJhbmdlLmxvY2F0aW9u
ICsgMV07Ci0gICAgCi0gICAgaWYgKFttaW1lVHlwZVN1ZmZpeCBpc0VxdWFsVG9TdHJpbmc6QCIq
Il0pCi0gICAgICAgIHJldHVybiBAW1tOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJUAlQCBG
aWxlcyIsIFtbbWltZVR5cGVQcmVmaXggc3Vic3RyaW5nVG9JbmRleDoxXSB1cHBlcmNhc2VTdHJp
bmddLCBbbWltZVR5cGVQcmVmaXggc3Vic3RyaW5nRnJvbUluZGV4OjFdXSwgQWxsRmlsZXNUaXRs
ZV07CisgICAgICAgIC8vIEluIGFsbCBjYXNlcyBhZGQgIkFsbCBGaWxlcyIKKyAgICAgICAgW3Rp
dGxlcyBhZGRPYmplY3Q6YWxsRmlsZXNUaXRsZV07CisgICAgICAgIHJldHVybiB0aXRsZXM7Cisg
ICAgfTsKKworICAgIC8vIE5vIGFjY2VwdCBhdHRyaWJ1dGU6IDxpbnB1dCB0eXBlPSJmaWxlIj4K
KyAgICBpZiAoIVtbc2VsZiBfYWNjZXB0ZWRNSU1FVHlwZXNdIGNvdW50XSAmJiAhW1tzZWxmIF9h
Y2NlcHRlZEZpbGVFeHRlbnNpb25zXSBjb3VudF0pCisgICAgICAgIHJldHVybiBjb21wb3NlVGl0
bGVzKEAiIiwgQCIiLCBAIiIpOworCisgICAgYXV0byBhY2NlcHRlZE1JTUVUeXBlcyA9IGFkb3B0
TlMoW1tOU011dGFibGVTZXQgYWxsb2NdIGluaXRXaXRoQXJyYXk6W3NlbGYgX2FjY2VwdGVkTUlN
RVR5cGVzXV0pOworCisgICAgZm9yIChOU1N0cmluZyAqZXh0ZW5zaW9uIGluIFtzZWxmIF9hY2Nl
cHRlZEZpbGVFeHRlbnNpb25zXSkgeworICAgICAgICBpZiAoIWV4dGVuc2lvbikKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworCisgICAgICAgIE5TU3RyaW5nICptaW1lVHlwZSA9IG1pbWVUeXBlRm9y
RXh0ZW5zaW9uKFtleHRlbnNpb24gc3Vic3RyaW5nRnJvbUluZGV4OjFdKTsKKworICAgICAgICAv
LyBVbmtub3duIGZpbGUgZXh0ZW5zaW9uOiA8aW5wdXQgdHlwZT0iZmlsZSIgYWNjZXB0PSIueHl6
Ij4KKyAgICAgICAgaWYgKCFtaW1lVHlwZSkKKyAgICAgICAgICAgIHJldHVybiBjb21wb3NlVGl0
bGVzKGN1c3RvbVR5cGUsIEAiIiwgQCIiKTsKKworICAgICAgICBbYWNjZXB0ZWRNSU1FVHlwZXMg
YWRkT2JqZWN0Om1pbWVUeXBlXTsKKyAgICB9CisKKyAgICBOU1N0cmluZyAqdHlwZSA9IG5pbDsK
KyAgICBOU1N0cmluZyAqc3ViVHlwZSA9IG5pbDsKKyAgICBOU1N0cmluZyAqYWxsVHlwZSA9IG5p
bDsKKworICAgIGZvciAoTlNTdHJpbmcgKm1pbWVUeXBlIGluIGFjY2VwdGVkTUlNRVR5cGVzLmdl
dCgpKSB7CisgICAgICAgIE5TUmFuZ2UgcmFuZ2UgPSBbbWltZVR5cGUgcmFuZ2VPZlN0cmluZzpA
Ii8iXTsKKyAgICAgICAgaWYgKCFyYW5nZS5sZW5ndGgpCisgICAgICAgICAgICBjb250aW51ZTsK
KworICAgICAgICBhdXRvIG1pbWVUeXBlUHJlZml4ID0gW21pbWVUeXBlIHN1YnN0cmluZ1RvSW5k
ZXg6cmFuZ2UubG9jYXRpb25dOworICAgICAgICBhdXRvIG1pbWVUeXBlU3VmZml4ID0gW21pbWVU
eXBlIHN1YnN0cmluZ0Zyb21JbmRleDpyYW5nZS5sb2NhdGlvbiArIDFdOworCisgICAgICAgIC8v
IE9ubHkgaW1hZ2UsIHZpZGVvIGFuZCBhdWRpbyBtaW1lIHR5cGVzIHdpbGwgaGF2ZSBkZXNjcmlw
dGl2ZSB0aXRsZXMuIE90aGVyIHR5cGVzIHdpbGwgYmUgc2hvd24KKyAgICAgICAgLy8gYXMgIkN1
c3RvbSBGaWxlcyIuICJDdXN0b20gRmlsZXMiIHdpbGwgYmUgc2hvd24gYWxzbyBpZiBtb3JlIHRo
YW4gYSBtaW1lIHR5cGUgaXMgc3BlY2lmaWVkLgorICAgICAgICBpZiAoIVttaW1lVHlwZVByZWZp
eCBpc0VxdWFsVG9TdHJpbmc6aW1hZ2VUeXBlXSAmJiAhW21pbWVUeXBlUHJlZml4IGlzRXF1YWxU
b1N0cmluZzp2aWRlb1R5cGVdICYmICFbbWltZVR5cGVQcmVmaXggaXNFcXVhbFRvU3RyaW5nOmF1
ZGlvVHlwZV0pCisgICAgICAgICAgICB0eXBlID0gY3VzdG9tVHlwZTsKKyAgICAgICAgZWxzZSBp
ZiAoIXR5cGUpCisgICAgICAgICAgICB0eXBlID0gbWltZVR5cGVQcmVmaXg7CisgICAgICAgIGVs
c2UgaWYgKCFbdHlwZSBpc0VxdWFsVG9TdHJpbmc6bWltZVR5cGVQcmVmaXhdKQorICAgICAgICAg
ICAgdHlwZSA9IGN1c3RvbVR5cGU7CisKKyAgICAgICAgLy8gIkN1c3RvbSBGaWxlcyIgYWxzbyB3
aWxsIGJlIHNob3duIGlmIG1vcmUgdGhhbiBvbmUgc3ViLXR5cGUgaXMgc3BlY2lmaWVkIHVubGVz
cyAiKiIgaXMgc3BlY2lmaWVkLgorICAgICAgICBpZiAoIXN1YlR5cGUgfHwgW21pbWVUeXBlU3Vm
Zml4IGlzRXF1YWxUb1N0cmluZzpAIioiXSkKKyAgICAgICAgICAgIHN1YlR5cGUgPSBtaW1lVHlw
ZVN1ZmZpeDsKKyAgICAgICAgZWxzZSBpZiAoIVtzdWJUeXBlIGlzRXF1YWxUb1N0cmluZzpAIioi
XSAmJiAhW3N1YlR5cGUgaXNFcXVhbFRvU3RyaW5nOm1pbWVUeXBlU3VmZml4XSkKKyAgICAgICAg
ICAgIHN1YlR5cGUgPSBjdXN0b21UeXBlOworCisgICAgICAgIC8vIEFkZCAiSW1hZ2UgRmlsZXMi
IHRpdGxlIGlmIG1pbWVUeXBlIGlzIGFsbG93ZWQgZGVzdGVuYXRpb24gaW1hZ2UgZm9ybWF0Lgor
ICAgICAgICBpZiAoV2ViQ29yZTo6TUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFnZU1J
TUVUeXBlRm9yRW5jb2RpbmcobWltZVR5cGUpKQorICAgICAgICAgICAgYWxsVHlwZSA9IGltYWdl
VHlwZTsKKyAgICB9CisKKyAgICAvLyBDdXN0b20gRmlsZXMsIEFsbCBGaWxlczogYWNjZXB0PSJh
dWRpby8qLGltYWdlL3BuZyIgb3IgYWNjZXB0PSJhcHBsaWNhdGlvbi9wZGYiLgorICAgIGlmIChb
dHlwZSBpc0VxdWFsVG9TdHJpbmc6Y3VzdG9tVHlwZV0pCisgICAgICAgIHJldHVybiBjb21wb3Nl
VGl0bGVzKGN1c3RvbVR5cGUsIEAiIiwgQCIiKTsKKworICAgIC8vICdUeXBlJyBGaWxlcywgQWxs
IEZpbGVzOiBhY2NlcHQ9ImltYWdlLyoiIG9yIGFjY2VwdD0iYXVkaW8vKiIuCisgICAgaWYgKFtz
dWJUeXBlIGlzRXF1YWxUb1N0cmluZzpAIioiXSkKKyAgICAgICAgcmV0dXJuIGNvbXBvc2VUaXRs
ZXMoQCIiLCBAIiIsIHR5cGUpOwogCi0gICAgaWYgKFttaW1lVHlwZVN1ZmZpeCBsZW5ndGhdIDw9
IDQpCi0gICAgICAgIHJldHVybiBAW1tOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJUAgJUAi
LCBbbWltZVR5cGVTdWZmaXggdXBwZXJjYXNlU3RyaW5nXSwgbWltZVR5cGVQcmVmaXhdLCBBbGxG
aWxlc1RpdGxlXTsKKyAgICAvLyBDdXN0b20gRmlsZXMsICdUeXBlJyBGaWxlcywgQWxsIEZpbGVz
OiBhY2NlcHQ9ImltYWdlL2pwZWcsaW1hZ2UvcG5nIi4KKyAgICBpZiAoW3N1YlR5cGUgaXNFcXVh
bFRvU3RyaW5nOmN1c3RvbVR5cGVdKQorICAgICAgICByZXR1cm4gY29tcG9zZVRpdGxlcyhjdXN0
b21UeXBlLCBAIiIsIGFsbFR5cGUpOwogCi0gICAgcmV0dXJuIEBbW05TU3RyaW5nIHN0cmluZ1dp
dGhGb3JtYXQ6QCIlQCAlQCIsIG1pbWVUeXBlU3VmZml4LCBtaW1lVHlwZVByZWZpeF0sIEFsbEZp
bGVzVGl0bGVdOworICAgIC8vICdTdWItdHlwZSBUeXBlJywgJ1R5cGUnIEZpbGVzLCBBbGwgRmls
ZXM6IGFjY2VwdD0iaW1hZ2UvcG5nIi4KKyAgICByZXR1cm4gY29tcG9zZVRpdGxlcyh0eXBlLCBz
dWJUeXBlLCBhbGxUeXBlKTsKIH0KIAogQGVuZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL0NvY29hL1dLT3BlblBhbmVsUGFyYW1ldGVyc1ByaXZhdGUuaCBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS09wZW5QYW5lbFBhcmFtZXRlcnNQcml2YXRl
LmgKaW5kZXggMjllZTgxMjBlNGFmMWJhZWEyMmMwNjI0YWMyZTIzYjRlMWJkNGFkNi4uN2MxZmNk
MWIyYTcxZWE1NWFlNmE1Yzc0OTc2NDJlYjUxOGM4ODc1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLT3BlblBhbmVsUGFyYW1ldGVyc1ByaXZhdGUuaAor
KysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tPcGVuUGFuZWxQYXJhbWV0
ZXJzUHJpdmF0ZS5oCkBAIC0zMSw4ICszMSw5IEBACiAKIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBy
ZWFkb25seSwgY29weSkgTlNBcnJheTxOU1N0cmluZyAqPiAqX2FjY2VwdGVkTUlNRVR5cGVzIFdL
X0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMuNCkpOwogQHByb3BlcnR5IChub25hdG9taWMsIHJl
YWRvbmx5LCBjb3B5KSBOU0FycmF5PE5TU3RyaW5nICo+ICpfYWNjZXB0ZWRGaWxlRXh0ZW5zaW9u
cyBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEzLjQpKTsKLUBwcm9wZXJ0eSAobm9uYXRvbWlj
LCByZWFkb25seSwgY29weSkgTlNBcnJheTxOU1N0cmluZyAqPiAqX2FsbG93ZWRGaWxlRXh0ZW5z
aW9ucyBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEzLjQpKTsKLUBwcm9wZXJ0eSAobm9uYXRv
bWljLCByZWFkb25seSwgY29weSkgTlNBcnJheTxOU1N0cmluZyAqPiAqX2FsbG93ZWRGaWxlRXh0
ZW5zaW9uc1RpdGxlcyBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEzLjQpKTsKK0Bwcm9wZXJ0
eSAobm9uYXRvbWljLCByZWFkb25seSwgY29weSkgTlNBcnJheTxOU1N0cmluZyAqPiAqX2FsbG93
ZWRGaWxlRXh0ZW5zaW9ucyBXS19BUElfQVZBSUxBQkxFKG1hY29zKFdLX01BQ19UQkEpKTsKK0Bw
cm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSwgY29weSkgTlNBcnJheTxOU1N0cmluZyAqPiAq
X2FsbEltYWdlRmlsZUV4dGVuc2lvbnMgV0tfQVBJX0FWQUlMQUJMRShtYWNvcyhXS19NQUNfVEJB
KSk7CitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHksIGNvcHkpIE5TQXJyYXk8TlNTdHJp
bmcgKj4gKl9hbGxvd2VkRmlsZUV4dGVuc2lvbnNUaXRsZXMgV0tfQVBJX0FWQUlMQUJMRShtYWNv
cyhXS19NQUNfVEJBKSk7CiAKIEBlbmQKIApkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIv
VG9vbHMvQ2hhbmdlTG9nCmluZGV4IGY1ZWEyZDMxM2I1M2RkZTBjMmVlZDQ4YjExZjcyNTQyNzcz
NzBmZDAuLmE5YmRlMjFkNjQxYzJkODYyN2RiN2UzMDg4MmZmNjNhMGI2OWQ4MzYgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMSBA
QAorMjAyMC0wNi0xNiAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29t
PgorCisgICAgICAgIFttYWNPU106IFRoZSBGaWxlIFBpY2tlciBvZiB0aGUgPGlucHV0PiBmaWxl
IGVsZW1lbnQgYWxsb3cgc2VsZWN0aW5nIGFsbCBmaWxlcyB3aGljaCBjYW4gYmUgY29udmVydGVk
IHRvIGFueSBvZiB0aGUgImFjY2VwdCIgYXR0cmlidXRlIGZvcm1hdHMKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMjQ4OQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIElmIHRoZSBudW1iZXIgb2YgdGhlIGZp
bGUgZXh0ZW5zaW9ucycgdGl0bGVzIGlzIHRocmVlLCBzZW5kIGFuIGFycmF5IG9mIAorICAgICAg
ICBhbGxJbWFnZUZpbGVFeHRlbnNpb25zIHRvIEZpbGVFeHRlbnNpb25zUG9wdXBUYXJnZXQuIEFs
c28gc2V0IHRoZSBpbml0aWFsCisgICAgICAgIHNlbGVjdGlvbiBvZiB0aGUgZmlsdGVyIHRvIHRo
ZSBpdGVtIG5hbWVkICJJbWFnZSBGaWxlcyIuCisKKyAgICAgICAgKiBNaW5pQnJvd3Nlci9tYWMv
V0syQnJvd3NlcldpbmRvd0NvbnRyb2xsZXIubToKKyAgICAgICAgKC1bRmlsZUV4dGVuc2lvbnNQ
b3B1cFRhcmdldCBpbml0V2l0aE9wZW5QYW5lbDphbGxvd2VkRmlsZUV4dGVuc2lvbnM6YWxsSW1h
Z2VGaWxlRXh0ZW5zaW9uczpdKToKKyAgICAgICAgKC1bRmlsZUV4dGVuc2lvbnNQb3B1cFRhcmdl
dCBwb3B1cEFjdGlvbjpdKToKKyAgICAgICAgKC1bV0syQnJvd3NlcldpbmRvd0NvbnRyb2xsZXIg
Y3JlYXRlRmlsdGVyVmlldzpwb3B1cFRhcmdldDpdKToKKyAgICAgICAgKC1bV0syQnJvd3Nlcldp
bmRvd0NvbnRyb2xsZXIgd2ViVmlldzpydW5PcGVuUGFuZWxXaXRoUGFyYW1ldGVyczppbml0aWF0
ZWRCeUZyYW1lOmNvbXBsZXRpb25IYW5kbGVyOndlYlZpZXc6cnVuT3BlblBhbmVsV2l0aFBhcmFt
ZXRlcnM6aW5pdGlhdGVkQnlGcmFtZTpjb21wbGV0aW9uSGFuZGxlcjpdKToKKyAgICAgICAgKC1b
RmlsZUV4dGVuc2lvbnNQb3B1cFRhcmdldCBpbml0V2l0aE9wZW5QYW5lbDphbGxvd2VkRmlsZUV4
dGVuc2lvbnM6XSk6IERlbGV0ZWQuCisKIDIwMjAtMDYtMTEgIFNlcmdpbyBWaWxsYXIgU2VuaW4g
IDxzdmlsbGFyQGlnYWxpYS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgdXBkYXRlZCBsaWJz
b3VwIGRlcGVuZGVuY3kgaW4gamhidWlsZC4KZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93c2Vy
L21hYy9XSzJCcm93c2VyV2luZG93Q29udHJvbGxlci5tIGIvVG9vbHMvTWluaUJyb3dzZXIvbWFj
L1dLMkJyb3dzZXJXaW5kb3dDb250cm9sbGVyLm0KaW5kZXggNTcwYWFhNTRkYjk3MGU0NzQyNDg5
NGY3YmQ4NzFhNzNmMmM3ZGQwZS4uZGJmOWQyYTYwNDQyY2NjMmQ2MmI4Nzg4NmViMGNhZTFmYzFh
NWZiYyAxMDA2NDQKLS0tIGEvVG9vbHMvTWluaUJyb3dzZXIvbWFjL1dLMkJyb3dzZXJXaW5kb3dD
b250cm9sbGVyLm0KKysrIGIvVG9vbHMvTWluaUJyb3dzZXIvbWFjL1dLMkJyb3dzZXJXaW5kb3dD
b250cm9sbGVyLm0KQEAgLTc3LDE1ICs3NywxNyBAQCBAaW50ZXJmYWNlIEZpbGVFeHRlbnNpb25z
UG9wdXBUYXJnZXQgOiBOU09iamVjdCB7CiBAcHJpdmF0ZQogICAgIE5TT3BlblBhbmVsICpfb3Bl
blBhbmVsOwogICAgIE5TQXJyYXk8TlNTdHJpbmcgKj4gKl9hbGxvd2VkRmlsZUV4dGVuc2lvbnM7
CisgICAgTlNBcnJheTxOU1N0cmluZyAqPiAqX2FsbEltYWdlRmlsZUV4dGVuc2lvbnM7CiB9CiBA
ZW5kCiAKIEBpbXBsZW1lbnRhdGlvbiBGaWxlRXh0ZW5zaW9uc1BvcHVwVGFyZ2V0CiAKLS0gKGlk
KWluaXRXaXRoT3BlblBhbmVsOihOU09wZW5QYW5lbCopb3BlblBhbmVsIGFsbG93ZWRGaWxlRXh0
ZW5zaW9uczooTlNBcnJheTxOU1N0cmluZyAqPiAqKWFsbG93ZWRGaWxlRXh0ZW5zaW9ucyB7Cist
IChpZClpbml0V2l0aE9wZW5QYW5lbDooTlNPcGVuUGFuZWwqKW9wZW5QYW5lbCBhbGxvd2VkRmls
ZUV4dGVuc2lvbnM6KE5TQXJyYXk8TlNTdHJpbmcgKj4gKilhbGxvd2VkRmlsZUV4dGVuc2lvbnMg
YWxsSW1hZ2VGaWxlRXh0ZW5zaW9uczogKE5TQXJyYXk8TlNTdHJpbmcgKj4gKilhbGxJbWFnZUZp
bGVFeHRlbnNpb25zIHsKICAgICBpZiAoKHNlbGYgPSBbc3VwZXIgaW5pdF0pKSB7CiAgICAgICAg
IF9vcGVuUGFuZWwgPSBvcGVuUGFuZWw7CiAgICAgICAgIF9hbGxvd2VkRmlsZUV4dGVuc2lvbnMg
PSBbYWxsb3dlZEZpbGVFeHRlbnNpb25zIGNvcHldOworICAgICAgICBfYWxsSW1hZ2VGaWxlRXh0
ZW5zaW9ucyA9IFthbGxJbWFnZUZpbGVFeHRlbnNpb25zIGNvcHldOwogICAgIH0KICAgICByZXR1
cm4gc2VsZjsKIH0KQEAgLTEwMCw2ICsxMDIsMTIgQEAgLSAodm9pZClwb3B1cEFjdGlvbjooaWQp
c2VuZGVyIHsKICAgICAgICAgICAgIFtfb3BlblBhbmVsIHNldEFsbG93ZWRGaWxlVHlwZXM6QFtA
IiJdXTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgW19vcGVuUGFuZWwgc2V0QWxsb3dlZEZp
bGVUeXBlczpfYWxsb3dlZEZpbGVFeHRlbnNpb25zXTsKKyAgICB9IGVsc2UgeworICAgICAgICAv
LyBNaWRkbGUgaXRlbS4KKyAgICAgICAgaWYgKCFbX2FsbEltYWdlRmlsZUV4dGVuc2lvbnMgY291
bnRdKQorICAgICAgICAgICAgW19vcGVuUGFuZWwgc2V0QWxsb3dlZEZpbGVUeXBlczpAW0AiIl1d
OworICAgICAgICBlbHNlCisgICAgICAgICAgICBbX29wZW5QYW5lbCBzZXRBbGxvd2VkRmlsZVR5
cGVzOl9hbGxJbWFnZUZpbGVFeHRlbnNpb25zXTsKICAgICB9CiB9CiAKQEAgLTY0NCw3ICs2NTIs
NyBAQCAtIChudWxsYWJsZSBOU1ZpZXcgKiljcmVhdGVGaWx0ZXJWaWV3OihOU0FycmF5ICopdGl0
bGVzIHBvcHVwVGFyZ2V0OihGaWxlRXh0ZW5zaQogICAgIFtidXR0b24gc2V0VGFyZ2V0OnBvcHVw
VGFyZ2V0XTsKICAgICBbYnV0dG9uIHNldEFjdGlvbjpAc2VsZWN0b3IocG9wdXBBY3Rpb246KV07
CiAgICAgW2J1dHRvbiBzaXplVG9GaXRdOwotICAgIFtidXR0b24gc2VsZWN0SXRlbUF0SW5kZXg6
MF07CisgICAgW2J1dHRvbiBzZWxlY3RJdGVtQXRJbmRleDpbdGl0bGVzIGNvdW50XSA8PSAyID8g
MCA6IDFdOwogICAgIFtwb3B1cFRhcmdldCBwb3B1cEFjdGlvbjpidXR0b25dOwogICAgIAogICAg
IE5TVmlldyogZmlsdGVyVmlldyA9IFtbW05TVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpOU1pl
cm9SZWN0XSBhdXRvcmVsZWFzZV07CkBAIC02ODcsMTAgKzY5NSwxMyBAQCAtICh2b2lkKXdlYlZp
ZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgcnVuT3BlblBhbmVsV2l0aFBhcmFtZXRlcnM6KFdLT3Bl
blBhbmVsUGFyYQogCiAgICAgb3BlblBhbmVsLmFsbG93c011bHRpcGxlU2VsZWN0aW9uID0gcGFy
YW1ldGVycy5hbGxvd3NNdWx0aXBsZVNlbGVjdGlvbjsKIAorICAgIE5TQXJyYXkgKmFsbG93ZWRG
aWxlRXh0ZW5zaW9uc1RpdGxlcyA9IHBhcmFtZXRlcnMuX2FsbG93ZWRGaWxlRXh0ZW5zaW9uc1Rp
dGxlczsKKyAgICBOU0FycmF5ICphbGxvd2VkRmlsZUV4dGVuc2lvbnMgPSBwYXJhbWV0ZXJzLl9h
bGxvd2VkRmlsZUV4dGVuc2lvbnM7CisgICAgTlNBcnJheSAqYWxsSW1hZ2VGaWxlRXh0ZW5zaW9u
cyA9IFthbGxvd2VkRmlsZUV4dGVuc2lvbnNUaXRsZXMgY291bnRdID09IDIgPyBAW10gOiBwYXJh
bWV0ZXJzLl9hbGxJbWFnZUZpbGVFeHRlbnNpb25zOworICAgIAogICAgIFtfZmlsZUV4dGVuc2lv
bnNQb3B1cFRhcmdldCByZWxlYXNlXTsKLSAgICBfZmlsZUV4dGVuc2lvbnNQb3B1cFRhcmdldCA9
IFtbRmlsZUV4dGVuc2lvbnNQb3B1cFRhcmdldCBhbGxvY10gaW5pdFdpdGhPcGVuUGFuZWw6IG9w
ZW5QYW5lbCBhbGxvd2VkRmlsZUV4dGVuc2lvbnM6IHBhcmFtZXRlcnMuX2FsbG93ZWRGaWxlRXh0
ZW5zaW9uc107CisgICAgX2ZpbGVFeHRlbnNpb25zUG9wdXBUYXJnZXQgPSBbW0ZpbGVFeHRlbnNp
b25zUG9wdXBUYXJnZXQgYWxsb2NdIGluaXRXaXRoT3BlblBhbmVsOiBvcGVuUGFuZWwgYWxsb3dl
ZEZpbGVFeHRlbnNpb25zOiBhbGxvd2VkRmlsZUV4dGVuc2lvbnMgYWxsSW1hZ2VGaWxlRXh0ZW5z
aW9uczogYWxsSW1hZ2VGaWxlRXh0ZW5zaW9uc107CiAKLSAgICBOU0FycmF5ICphbGxvd2VkRmls
ZUV4dGVuc2lvbnNUaXRsZXMgPSBwYXJhbWV0ZXJzLl9hbGxvd2VkRmlsZUV4dGVuc2lvbnNUaXRs
ZXM7CiAgICAgTlNWaWV3ICpmaWx0ZXJWaWV3ID0gW3NlbGYgY3JlYXRlRmlsdGVyVmlldzphbGxv
d2VkRmlsZUV4dGVuc2lvbnNUaXRsZXMgcG9wdXBUYXJnZXQ6X2ZpbGVFeHRlbnNpb25zUG9wdXBU
YXJnZXRdOwogICAgIGlmIChmaWx0ZXJWaWV3KQogICAgICAgICBbb3BlblBhbmVsIHNldEFjY2Vz
c29yeVZpZXc6ZmlsdGVyVmlld107Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>406041</attachid>
            <date>2020-08-05 14:40:50 -0700</date>
            <delta_ts>2020-08-05 14:51:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-212482-20200805144050.patch</filename>
            <type>text/plain</type>
            <size>34868</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2NTA3NikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI2IEBACisyMDIwLTA4LTA1ICBTYWlkIEFi
b3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgW21hY09TXSBE
cmFnL2Ryb3AgYW4gaW1hZ2Ugb2YgYSB1bnN1cHBvcnRlZCBmb3JtYXQgdG8gYW4gPGlucHV0IHR5
cGU9ImZpbGUiPiBlbGVtZW50IHNob3VsZCBjb252ZXJ0IGl0IHRvIGEgc3VwcG9ydGVkIGZvcm1h
dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEyNDgy
CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS82MzczMTY3Mj4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNvdXJjZXNDb2NvYS50eHQ6CisgICAgICAg
ICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGh0bWwvRmls
ZUlucHV0VHlwZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGaWxlSW5wdXRUeXBlOjpoYW5kbGVE
T01BY3RpdmF0ZUV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVJbnB1dFR5cGU6OmZpbGVD
aG9vc2VyU2V0dGluZ3MgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsZUlucHV0VHlwZTo6
YXBwbHlGaWxlQ2hvb3NlclNldHRpbmdzKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVJbnB1dFR5
cGU6OnRyYW5zY29kZURyb3BwZWRJbWFnZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Rmls
ZUlucHV0VHlwZTo6cmVjZWl2ZURyb3BwZWRGaWxlcyk6CisgICAgICAgICogaHRtbC9GaWxlSW5w
dXRUeXBlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VVdGlsaXRpZXMuaDog
QWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VVdGlsaXRpZXNDRy5j
cHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6dHJhbnNjb2RlSW1hZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6ZmluZEltYWdlc0ZvclRyYW5zY29kaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OnRy
YW5zY29kZUltYWdlcyk6CisKIDIwMjAtMDctMjkgIEpvb25naHVuIFBhcmsgIDxqaDcxOC5wYXJr
QHNhbXN1bmcuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQuIFJlbW92ZSB0aGUgYnVpbGQgd2Fy
bmluZyBiZWxvdyBzaW5jZSByMjY1MDYyLgpJbmRleDogU291cmNlL1dlYkNvcmUvU291cmNlc0Nv
Y29hLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0CShy
ZXZpc2lvbiAyNjUwNzYpCisrKyBTb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0CSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMjYsNiArMzI2LDcgQEAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VC
dWZmZXJJT1N1cmZhYwogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXND
Ry5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlRGVjb2RlckNHLmNwcAogcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvSW1hZ2VTb3VyY2VDR01hYy5tbQorcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1h
Z2VVdGlsaXRpZXNDRy5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ludFBvaW50Q0cuY3BwCiBw
bGF0Zm9ybS9ncmFwaGljcy9jZy9JbnRSZWN0Q0cuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9J
bnRTaXplQ0cuY3BwCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyNjUwNzYpCisrKyBTb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTE3NTUs
NiArMTc1NSw3IEBACiAJCTU1QUQwOTQwMjQwODk2NDAwMERFNEQyRiAvKiBEaXNwbGF5TGlzdERy
YXdpbmdDb250ZXh0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA3MkVBMDlGOTIzRkNDQzZBMDA4NTA0QTUgLyogRGlzcGxheUxpc3REcmF3aW5nQ29udGV4
dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTU1
QUQwOTQxMjQwODk2NEEwMERFNEQyRiAvKiBDb25jcmV0ZUltYWdlQnVmZmVyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkJBQzNBNzIzRTE3MzI4MDA4
RDc0MUMgLyogQ29uY3JldGVJbWFnZUJ1ZmZlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTU1QUYxNEU2MUVBQUM1OUIwMDI2RUVBQSAvKiBVVElS
ZWdpc3RyeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTVBRjE0RTQxRUFBQzU5QjAwMjZFRUFBIC8qIFVUSVJlZ2lzdHJ5LmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNTVCQkQ0MjkyNERCNTYwNDAwQkI2
RTBDIC8qIEltYWdlVXRpbGl0aWVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1NUJCRDQyODI0REI1M0EyMDBCQjZFMEMgLyogSW1hZ2VVdGlsaXRpZXMu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1NURD
QzUyODIyNDA3QjIwMDBDMjZFMzIgLyogU1ZHUHJpbWl0aXZlTGlzdC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTVEQ0M1MjUyMjQwNzQ5RTAwQzI2RTMy
IC8qIFNWR1ByaW1pdGl2ZUxpc3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQk1NURDQzUyOTIyNDA3QjJBMDBDMjZFMzIgLyogU1ZHTGlzdC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTVEQ0M1MjMyMjQw
NzNGRTAwQzI2RTMyIC8qIFNWR0xpc3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQk1NUVDOTU5OTIwNkFBN0EwMDA3REQwQTkgLyogUGFpbnRGcmVx
dWVuY3lUcmFja2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1NUVDOTU5NzIwNjlDOTJEMDA3REQwQTkgLyogUGFpbnRGcmVxdWVuY3lUcmFja2VyLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTg4MDQs
NiArODgwNSw4IEBACiAJCTU1QTMzNkY4MUQ4MjFFM0MwMDIyQzRDNyAvKiBJbWFnZUJhY2tpbmdT
dG9yZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZUJhY2tpbmdTdG9y
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NUFGMTRFMzFFQUFDNTlCMDAyNkVF
QUEgLyogVVRJUmVnaXN0cnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVVRJUmVnaXN0cnkuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NUFGMTRFNDFFQUFDNTlCMDAyNkVFQUEg
LyogVVRJUmVnaXN0cnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVVRJUmVnaXN0cnkuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTVCQkQ0MjYyNERCNTM0MzAwQkI2RTBDIC8qIEltYWdlVXRp
bGl0aWVzQ0cuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2VVdGlsaXRpZXNDRy5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTU1QkJENDI4MjREQjUzQTIwMEJCNkUwQyAvKiBJ
bWFnZVV0aWxpdGllcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZVV0aWxpdGllcy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk1NUJFMDI1NzIyM0IyOUMwMDAzMkYwOEEgLyogU1ZHUHJv
cGVydHlSZWdpc3RyeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdQcm9wZXJ0eVJlZ2lzdHJ5Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU1QkUwMjU5MjIzQjI5QzEwMDMyRjA4QSAvKiBT
VkdBbmltYXRpb25BZGRpdGl2ZVZhbHVlRnVuY3Rpb25JbXBsLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNW
R0FuaW1hdGlvbkFkZGl0aXZlVmFsdWVGdW5jdGlvbkltcGwuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNTVCRTAyNUEyMjNCMjlDMjAwMzJGMDhBIC8qIFNWR1BvaW50ZXJNZW1iZXJB
Y2Nlc3Nvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdQb2ludGVyTWVtYmVyQWNjZXNzb3IuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI1NTI4LDYgKzI1NTMxLDcgQEAKIAkJCQk1NTVC
ODdFQjFDQUFGMEFCMDAzNDk0MjUgLyogSW1hZ2VEZWNvZGVyQ0cuaCAqLywKIAkJCQk0QjM0ODA5
MjBFRUY1MEQ0MDBBQzFCNDEgLyogSW1hZ2VTb3VyY2VDRy5oICovLAogCQkJCTRCMzQ4MDkxMEVF
RjUwRDQwMEFDMUI0MSAvKiBJbWFnZVNvdXJjZUNHTWFjLm1tICovLAorCQkJCTU1QkJENDI2MjRE
QjUzNDMwMEJCNkUwQyAvKiBJbWFnZVV0aWxpdGllc0NHLmNwcCAqLywKIAkJCQlCMjc1MzUzMjBC
MDUzODE0MDAyQ0U2NEYgLyogSW50UG9pbnRDRy5jcHAgKi8sCiAJCQkJQjI3NTM1MzMwQjA1Mzgx
NDAwMkNFNjRGIC8qIEludFJlY3RDRy5jcHAgKi8sCiAJCQkJQjI3NTM1MzQwQjA1MzgxNDAwMkNF
NjRGIC8qIEludFNpemVDRy5jcHAgKi8sCkBAIC0yNTczMSw2ICsyNTczNSw3IEBACiAJCQkJNTU0
Njc1NzcxRkQxRkMxQTAwM0IxMEIwIC8qIEltYWdlU291cmNlLmNwcCAqLywKIAkJCQk1NTQ2NzU3
ODFGRDFGQzFBMDAzQjEwQjAgLyogSW1hZ2VTb3VyY2UuaCAqLywKIAkJCQk1NTUwQ0I0MTFFOTU1
RTNDMDAxMTFBQTAgLyogSW1hZ2VUeXBlcy5oICovLAorCQkJCTU1QkJENDI4MjREQjUzQTIwMEJC
NkUwQyAvKiBJbWFnZVV0aWxpdGllcy5oICovLAogCQkJCTA3ODYzM0Y4MjQwNzE1RDIwMDg3QUUy
MSAvKiBJbmJhbmRHZW5lcmljQ3VlLmNwcCAqLywKIAkJCQkwNzg2MzNERTIzRkVERjIyMDA4N0FF
MjEgLyogSW5iYW5kR2VuZXJpY0N1ZS5oICovLAogCQkJCTA3MDZBMEQ3MjQwODMwQTYwMEU5Mzgx
OCAvKiBJbmJhbmRHZW5lcmljQ3VlSWRlbnRpZmllci5oICovLApAQCAtMzEyNzQsNiArMzEyNzks
NyBAQAogCQkJCTRCMzQ4MDk0MEVFRjUwRDQwMEFDMUI0MSAvKiBJbWFnZVNvdXJjZUNHLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwNzhFRDE5MzIxNkQwNzk1MDA3NzVCMzMgLyogSW1hZ2VUcmFuc2Zl
clNlc3Npb25WVC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTU1MENCNDIxRTk1NUUzQzAwMTExQUEw
IC8qIEltYWdlVHlwZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTU1QkJENDI5MjREQjU2MDQwMEJC
NkUwQyAvKiBJbWFnZVV0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMjZGNzU2QjMxQjNC
NjZGNzAwMDVERDc5IC8qIEltbXV0YWJsZU5GQS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMjZGNzU2
QjUxQjNCNjhGMjAwMDVERDc5IC8qIEltbXV0YWJsZU5GQU5vZGVCdWlsZGVyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkzMTZGRTExODBFNkUxREE3MDBCRjYwODggLyogSW1wbGljaXRBbmltYXRpb24u
aCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9GaWxlSW5wdXRUeXBl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0ZpbGVJbnB1dFR5cGUuY3Bw
CShyZXZpc2lvbiAyNjUwNzYpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0ZpbGVJbnB1dFR5cGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSAiSWNvbi5oIgog
I2luY2x1ZGUgIklucHV0VHlwZU5hbWVzLmgiCiAjaW5jbHVkZSAiTG9jYWxpemVkU3RyaW5ncy5o
IgorI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKICNpbmNsdWRlICJSZW5kZXJGaWxlVXBs
b2FkQ29udHJvbC5oIgogI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKICNpbmNs
dWRlICJTZXR0aW5ncy5oIgpAQCAtNDcsNiArNDgsMTEgQEAKICNpbmNsdWRlIDx3dGYvVHlwZUNh
c3RzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCisjaWYgUExBVEZP
Uk0oTUFDKQorI2luY2x1ZGUgIkltYWdlVXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiVVRJVXRpbGl0
aWVzLmgiCisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgVXBsb2FkQnV0dG9u
RWxlbWVudDsKIH0KQEAgLTIwNCwxNiArMjEwLDcgQEAgdm9pZCBGaWxlSW5wdXRUeXBlOjpoYW5k
bGVET01BY3RpdmF0ZUV2ZQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoYXV0byogY2hyb21l
ID0gdGhpcy0+Y2hyb21lKCkpIHsKLSAgICAgICAgRmlsZUNob29zZXJTZXR0aW5ncyBzZXR0aW5n
czsKLSAgICAgICAgc2V0dGluZ3MuYWxsb3dzRGlyZWN0b3JpZXMgPSBhbGxvd3NEaXJlY3Rvcmll
cygpOwotICAgICAgICBzZXR0aW5ncy5hbGxvd3NNdWx0aXBsZUZpbGVzID0gaW5wdXQuaGFzQXR0
cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihtdWx0aXBsZUF0dHIpOwotICAgICAgICBzZXR0
aW5ncy5hY2NlcHRNSU1FVHlwZXMgPSBpbnB1dC5hY2NlcHRNSU1FVHlwZXMoKTsKLSAgICAgICAg
c2V0dGluZ3MuYWNjZXB0RmlsZUV4dGVuc2lvbnMgPSBpbnB1dC5hY2NlcHRGaWxlRXh0ZW5zaW9u
cygpOwotICAgICAgICBzZXR0aW5ncy5zZWxlY3RlZEZpbGVzID0gbV9maWxlTGlzdC0+cGF0aHMo
KTsKLSNpZiBFTkFCTEUoTUVESUFfQ0FQVFVSRSkKLSAgICAgICAgc2V0dGluZ3MubWVkaWFDYXB0
dXJlVHlwZSA9IGlucHV0Lm1lZGlhQ2FwdHVyZVR5cGUoKTsKLSNlbmRpZgotICAgICAgICBhcHBs
eUZpbGVDaG9vc2VyU2V0dGluZ3Moc2V0dGluZ3MpOworICAgICAgICBhcHBseUZpbGVDaG9vc2Vy
U2V0dGluZ3MoKTsKICAgICAgICAgY2hyb21lLT5ydW5PcGVuUGFuZWwoKmlucHV0LmRvY3VtZW50
KCkuZnJhbWUoKSwgKm1fZmlsZUNob29zZXIpOwogICAgIH0KIApAQCAtMzMyLDEyICszMjksMjkg
QEAgdm9pZCBGaWxlSW5wdXRUeXBlOjpyZXF1ZXN0SWNvbihjb25zdCBWZQogICAgIGNocm9tZS0+
bG9hZEljb25Gb3JGaWxlcyhwYXRocywgKm1fZmlsZUljb25Mb2FkZXIpOwogfQogCi12b2lkIEZp
bGVJbnB1dFR5cGU6OmFwcGx5RmlsZUNob29zZXJTZXR0aW5ncyhjb25zdCBGaWxlQ2hvb3NlclNl
dHRpbmdzJiBzZXR0aW5ncykKK0ZpbGVDaG9vc2VyU2V0dGluZ3MgRmlsZUlucHV0VHlwZTo6Zmls
ZUNob29zZXJTZXR0aW5ncygpIGNvbnN0Cit7CisgICAgQVNTRVJUKGVsZW1lbnQoKSk7CisgICAg
YXV0byYgaW5wdXQgPSAqZWxlbWVudCgpOworCisgICAgRmlsZUNob29zZXJTZXR0aW5ncyBzZXR0
aW5nczsKKyAgICBzZXR0aW5ncy5hbGxvd3NEaXJlY3RvcmllcyA9IGFsbG93c0RpcmVjdG9yaWVz
KCk7CisgICAgc2V0dGluZ3MuYWxsb3dzTXVsdGlwbGVGaWxlcyA9IGlucHV0Lmhhc0F0dHJpYnV0
ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24obXVsdGlwbGVBdHRyKTsKKyAgICBzZXR0aW5ncy5hY2Nl
cHRNSU1FVHlwZXMgPSBpbnB1dC5hY2NlcHRNSU1FVHlwZXMoKTsKKyAgICBzZXR0aW5ncy5hY2Nl
cHRGaWxlRXh0ZW5zaW9ucyA9IGlucHV0LmFjY2VwdEZpbGVFeHRlbnNpb25zKCk7CisgICAgc2V0
dGluZ3Muc2VsZWN0ZWRGaWxlcyA9IG1fZmlsZUxpc3QtPnBhdGhzKCk7CisjaWYgRU5BQkxFKE1F
RElBX0NBUFRVUkUpCisgICAgc2V0dGluZ3MubWVkaWFDYXB0dXJlVHlwZSA9IGlucHV0Lm1lZGlh
Q2FwdHVyZVR5cGUoKTsKKyNlbmRpZgorICAgIHJldHVybiBzZXR0aW5nczsKK30KKwordm9pZCBG
aWxlSW5wdXRUeXBlOjphcHBseUZpbGVDaG9vc2VyU2V0dGluZ3MoKQogewogICAgIGlmIChtX2Zp
bGVDaG9vc2VyKQogICAgICAgICBtX2ZpbGVDaG9vc2VyLT5pbnZhbGlkYXRlKCk7CiAKLSAgICBt
X2ZpbGVDaG9vc2VyID0gRmlsZUNob29zZXI6OmNyZWF0ZSh0aGlzLCBzZXR0aW5ncyk7CisgICAg
bV9maWxlQ2hvb3NlciA9IEZpbGVDaG9vc2VyOjpjcmVhdGUodGhpcywgZmlsZUNob29zZXJTZXR0
aW5ncygpKTsKIH0KIAogYm9vbCBGaWxlSW5wdXRUeXBlOjphbGxvd3NEaXJlY3RvcmllcygpIGNv
bnN0CkBAIC00NTQsMjIgKzQ2OCw0NCBAQCB2b2lkIEZpbGVJbnB1dFR5cGU6Omljb25Mb2FkZWQo
UmVmUHRyPEljCiB9CiAKICNpZiBFTkFCTEUoRFJBR19TVVBQT1JUKQorCitWZWN0b3I8U3RyaW5n
PiBGaWxlSW5wdXRUeXBlOjp0cmFuc2NvZGVEcm9wcGVkSW1hZ2VzKGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiBwYXRocykgY29uc3QKK3sKKyAgICBhdXRvIHNldHRpbmdzID0gZmlsZUNob29zZXJTZXR0
aW5ncygpOworICAgIGF1dG8gYWxsb3dlZE1JTUVUeXBlcyA9IE1JTUVUeXBlUmVnaXN0cnk6OmFs
bG93ZWRNSU1FVHlwZXMoc2V0dGluZ3MuYWNjZXB0TUlNRVR5cGVzLCBzZXR0aW5ncy5hY2NlcHRG
aWxlRXh0ZW5zaW9ucyk7CisKKyAgICBhdXRvIHRyYW5zY29kaW5nUGF0aHMgPSBmaW5kSW1hZ2Vz
Rm9yVHJhbnNjb2RpbmcocGF0aHMsIGFsbG93ZWRNSU1FVHlwZXMpOworICAgIGlmICh0cmFuc2Nv
ZGluZ1BhdGhzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIGF1dG8gdHJh
bnNjb2RpbmdNSU1FVHlwZSA9IE1JTUVUeXBlUmVnaXN0cnk6OnByZWZlcnJlZEltYWdlTUlNRVR5
cGVGb3JFbmNvZGluZyhhbGxvd2VkTUlNRVR5cGVzLCB7IH0pOworICAgIGlmICh0cmFuc2NvZGlu
Z01JTUVUeXBlLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgYXV0byB0cmFu
c2NvZGluZ1VUSSA9IFVUSUZyb21NSU1FVHlwZSh0cmFuc2NvZGluZ01JTUVUeXBlKTsKKyAgICBh
dXRvIHRyYW5zY29kaW5nRXh0ZW5zaW9uID0gV2ViQ29yZTo6TUlNRVR5cGVSZWdpc3RyeTo6cHJl
ZmVycmVkRXh0ZW5zaW9uRm9yTUlNRVR5cGUodHJhbnNjb2RpbmdNSU1FVHlwZSk7CisKKyAgICBy
ZXR1cm4gdHJhbnNjb2RlSW1hZ2VzKHRyYW5zY29kaW5nUGF0aHMsIHRyYW5zY29kaW5nVVRJLCB0
cmFuc2NvZGluZ0V4dGVuc2lvbik7Cit9CisKIGJvb2wgRmlsZUlucHV0VHlwZTo6cmVjZWl2ZURy
b3BwZWRGaWxlcyhjb25zdCBEcmFnRGF0YSYgZHJhZ0RhdGEpCiB7CiAgICAgYXV0byBwYXRocyA9
IGRyYWdEYXRhLmFzRmlsZW5hbWVzKCk7CiAgICAgaWYgKHBhdGhzLmlzRW1wdHkoKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCisgICAgYXV0byByZXBsYWNlbWVudFBhdGhzID0gdHJhbnNjb2Rl
RHJvcHBlZEltYWdlcyhwYXRocyk7CisgICAgCiAgICAgQVNTRVJUKGVsZW1lbnQoKSk7CiAgICAg
aWYgKGVsZW1lbnQoKS0+aGFzQXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihtdWx0aXBs
ZUF0dHIpKSB7CiAgICAgICAgIFZlY3RvcjxGaWxlQ2hvb3NlckZpbGVJbmZvPiBmaWxlczsKICAg
ICAgICAgZmlsZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShwYXRocy5zaXplKCkpOwotICAgICAg
ICBmb3IgKGF1dG8mIHBhdGggOiBwYXRocykKLSAgICAgICAgICAgIGZpbGVzLnVuY2hlY2tlZEFw
cGVuZCh7IHBhdGgsIHsgfSwgeyB9IH0pOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMCwgc2l6
ZSA9IHBhdGhzLnNpemUoKTsgaSA8IHNpemU7ICsraSkKKyAgICAgICAgICAgIGZpbGVzLnVuY2hl
Y2tlZEFwcGVuZCh7IHBhdGhzW2ldLCBpIDwgcmVwbGFjZW1lbnRQYXRocy5zaXplKCkgPyByZXBs
YWNlbWVudFBhdGhzW2ldIDogbnVsbFN0cmluZygpLCB7IH0gfSk7CiAKICAgICAgICAgZmlsZXND
aG9zZW4oZmlsZXMpOwogICAgIH0gZWxzZQotICAgICAgICBmaWxlc0Nob3Nlbih7IHsgcGF0aHNb
MF0sIHsgfSwgeyB9IH0gfSk7CisgICAgICAgIGZpbGVzQ2hvc2VuKHsgeyBwYXRoc1swXSwgcmVw
bGFjZW1lbnRQYXRoc1swXSwgeyB9IH0gfSk7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2h0bWwvRmlsZUlucHV0VHlwZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvRmlsZUlucHV0VHlwZS5oCShyZXZpc2lvbiAyNjUwNzYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0ZpbGVJbnB1dFR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtNzEsNiAr
NzEsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgc2V0VmFsdWUoY29uc3QgU3RyaW5nJiwgYm9vbCB2
YWx1ZUNoYW5nZWQsIFRleHRGaWVsZEV2ZW50QmVoYXZpb3IpIGZpbmFsOwogCiAjaWYgRU5BQkxF
KERSQUdfU1VQUE9SVCkKKyAgICBWZWN0b3I8U3RyaW5nPiB0cmFuc2NvZGVEcm9wcGVkSW1hZ2Vz
KGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBmaWxlbmFtZXMpIGNvbnN0OwogICAgIGJvb2wgcmVjZWl2
ZURyb3BwZWRGaWxlcyhjb25zdCBEcmFnRGF0YSYpIGZpbmFsOwogI2VuZGlmCiAKQEAgLTg2LDcg
Kzg3LDggQEAgcHJpdmF0ZToKICAgICAvLyBGaWxlSWNvbkxvYWRlckNsaWVudCBpbXBsZW1lbnRh
dGlvbi4KICAgICB2b2lkIGljb25Mb2FkZWQoUmVmUHRyPEljb24+JiYpIGZpbmFsOwogCi0gICAg
dm9pZCBhcHBseUZpbGVDaG9vc2VyU2V0dGluZ3MoY29uc3QgRmlsZUNob29zZXJTZXR0aW5ncyYp
OworICAgIEZpbGVDaG9vc2VyU2V0dGluZ3MgZmlsZUNob29zZXJTZXR0aW5ncygpIGNvbnN0Owor
ICAgIHZvaWQgYXBwbHlGaWxlQ2hvb3NlclNldHRpbmdzKCk7CiAgICAgdm9pZCBkaWRDcmVhdGVG
aWxlTGlzdChSZWY8RmlsZUxpc3Q+JiYsIFJlZlB0cjxJY29uPiYmKTsKICAgICB2b2lkIHJlcXVl
c3RJY29uKGNvbnN0IFZlY3RvcjxTdHJpbmc+Jik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ltYWdlVXRpbGl0aWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VVdGlsaXRpZXMuaAkobm9uZXhpc3RlbnQpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVV0aWxpdGllcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBHaXZlbiBhIGxpc3Qgb2YgZmlsZXMnICdwYXRocycg
YW5kICdhbGxvd2VkTUlNRVR5cGVzJywgdGhlIGZ1bmN0aW9uIHJldHVybnMgYSBsaXN0CisvLyBv
ZiBzdHJpbmdzIHdob3NlIHNpemUgaXMgdGhlIHNhbWUgYXMgdGhlIHNpemUgb2YgJ3BhdGhzJyBh
bmQgaXRzIGVudHJpZXMgYXJlIGFsbAorLy8gbnVsbCBzdHJpbmdzIGV4Y2VwdCB0aGUgb25lcyB3
aG9zZSBNSU1FIHR5cGVzIGFyZSBub3QgaW4gJ2FsbG93ZWRNSU1FVHlwZXMnLgorV0VCQ09SRV9F
WFBPUlQgVmVjdG9yPFN0cmluZz4gZmluZEltYWdlc0ZvclRyYW5zY29kaW5nKGNvbnN0IFZlY3Rv
cjxTdHJpbmc+JiBwYXRocywgY29uc3QgVmVjdG9yPFN0cmluZz4mIGFsbG93ZWRNSU1FVHlwZXMp
OworCisvLyBHaXZlbiBhIGxpc3Qgb2YgaW1hZ2VzJyAncGF0aHMnLCB0aGlzIGZ1bmN0aW9uIHRy
YW5zY29kZXMgdGhlc2UgaW1hZ2VzIHRvIGEgbmV3CisvLyBmb3JtYXQgd2hvc2UgVVRJIGlzIGRl
c3RpbmF0aW9uVVRJLiBUaGUgcmVzdWx0IG9mIHRoZSB0cmFuc2NvZGluZyB3aWxsIGJlIHdyaXR0
ZW4KKy8vIHRvIHRlbXBvcmFyeSBmaWxlcyB3aG9zZSBleHRlbnNpb25zIGFyZSAnZGVzdGluYXRp
b25FeHRlbnNpb24nLiBJdCByZXR1cm5zIGEgbGlzdAorLy8gb2YgcGF0aHMgdG8gdGhlIHJlc3Vs
dCB0ZW1wb3JhcnkgZmlsZXMuIElmIGFuIGVudHJ5IGluICdwYXRocycgaXMgbnVsbCBvciBhbiBl
cnJvcgorLy8gaGFwcGVucyB3aGlsZSB0cmFuc2NvZGluZywgYSBudWxsIHN0cmluZyB3aWxsIGJl
IGFkZGVkIHRvIHRoZSByZXR1cm5lZCBsaXN0LgorV0VCQ09SRV9FWFBPUlQgVmVjdG9yPFN0cmlu
Zz4gdHJhbnNjb2RlSW1hZ2VzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXRocywgY29uc3QgU3Ry
aW5nJiBkZXN0aW5hdGlvblVUSSwgY29uc3QgU3RyaW5nJiBkZXN0aW5hdGlvbkV4dGVuc2lvbik7
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSW1hZ2VVdGlsaXRpZXNDRy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VVdGlsaXRpZXNDRy5jcHAJKG5vbmV4
aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VVdGls
aXRpZXNDRy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjIgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VVdGlsaXRpZXMuaCIKKworI2lu
Y2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCisjaW5jbHVk
ZSA8SW1hZ2VJTy9JbWFnZUlPLmg+CisjaW5jbHVkZSA8d3RmL0ZpbGVTeXN0ZW0uaD4KKyNpbmNs
dWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGlj
IFN0cmluZyB0cmFuc2NvZGVJbWFnZShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0cmluZyYg
ZGVzdGluYXRpb25VVEksIGNvbnN0IFN0cmluZyYgZGVzdGluYXRpb25FeHRlbnNpb24pCit7Cisg
ICAgYXV0byBzb3VyY2VVUkwgPSBhZG9wdENGKENGVVJMQ3JlYXRlV2l0aEZpbGVTeXN0ZW1QYXRo
KGtDRkFsbG9jYXRvckRlZmF1bHQsIHBhdGguY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSwga0NGVVJM
UE9TSVhQYXRoU3R5bGUsIGZhbHNlKSk7CisgICAgYXV0byBzb3VyY2UgPSBhZG9wdENGKENHSW1h
Z2VTb3VyY2VDcmVhdGVXaXRoVVJMKHNvdXJjZVVSTC5nZXQoKSwgbnVsbHB0cikpOworICAgIGlm
ICghc291cmNlKQorICAgICAgICByZXR1cm4gbnVsbFN0cmluZygpOworCisgICAgYXV0byBzb3Vy
Y2VVVEkgPSBTdHJpbmcoQ0dJbWFnZVNvdXJjZUdldFR5cGUoc291cmNlLmdldCgpKSk7CisgICAg
aWYgKHNvdXJjZVVUSSA9PSBkZXN0aW5hdGlvblVUSSkKKyAgICAgICAgcmV0dXJuIG51bGxTdHJp
bmcoKTsKKworICAgIC8vIEl0IGlzIGltcG9ydGFudCB0byBhZGQgdGhlIGFwcHJvcHJpYXRlIGZp
bGUgZXh0ZW5zaW9uIHRvIHRoZSB0ZW1wb3JhcnkgZmlsZSBwYXRoLgorICAgIC8vIFRoZSBGaWxl
IG9iamVjdCBkZXBlbmRzIHNvbGVseSBvbiB0aGUgZXh0ZW5zaW9uIHRvIGtub3cgdGhlIE1JTUUg
dHlwZSBvZiB0aGUgZmlsZS4KKyAgICBhdXRvIHN1ZmZpeCA9IG1ha2VTdHJpbmcoJy4nLCBkZXN0
aW5hdGlvbkV4dGVuc2lvbik7CisKKyAgICBGaWxlU3lzdGVtOjpQbGF0Zm9ybUZpbGVIYW5kbGUg
ZGVzdGluYXRpb25GaWxlSGFuZGxlOworICAgIFN0cmluZyBkZXN0aW5hdGlvblBhdGggPSBGaWxl
U3lzdGVtOjpvcGVuVGVtcG9yYXJ5RmlsZSgidGVtcEltYWdlIl9zLCBkZXN0aW5hdGlvbkZpbGVI
YW5kbGUsIHN1ZmZpeCk7CisgICAgaWYgKGRlc3RpbmF0aW9uRmlsZUhhbmRsZSA9PSBGaWxlU3lz
dGVtOjppbnZhbGlkUGxhdGZvcm1GaWxlSGFuZGxlKSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VS
Uk9SKEltYWdlcywgInRyYW5zY29kZUltYWdlOiBEZXN0aW5hdGlvbiBpbWFnZSBjb3VsZCBub3Qg
YmUgY3JlYXRlZDogJXMgJXNcbiIsIHBhdGgudXRmOCgpLmRhdGEoKSwgZGVzdGluYXRpb25VVEku
dXRmOCgpLmRhdGEoKSk7CisgICAgICAgIHJldHVybiBudWxsU3RyaW5nKCk7CisgICAgfQorCisg
ICAgQ0dEYXRhQ29uc3VtZXJDYWxsYmFja3MgY2FsbGJhY2tzID0geworICAgICAgICBbXSh2b2lk
KiBpbmZvLCBjb25zdCB2b2lkKiBidWZmZXIsIHNpemVfdCBjb3VudCkgLT4gc2l6ZV90IHsKKyAg
ICAgICAgICAgIGF1dG8gaGFuZGxlID0gKnN0YXRpY19jYXN0PEZpbGVTeXN0ZW06OlBsYXRmb3Jt
RmlsZUhhbmRsZSo+KGluZm8pOworICAgICAgICAgICAgcmV0dXJuIEZpbGVTeXN0ZW06OndyaXRl
VG9GaWxlKGhhbmRsZSwgc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KGJ1ZmZlciksIGNvdW50KTsK
KyAgICAgICAgfSwKKyAgICAgICAgbnVsbHB0cgorICAgIH07CisKKyAgICBhdXRvIGNvbnN1bWVy
ID0gYWRvcHRDRihDR0RhdGFDb25zdW1lckNyZWF0ZSgmZGVzdGluYXRpb25GaWxlSGFuZGxlLCAm
Y2FsbGJhY2tzKSk7CisgICAgYXV0byBkZXN0aW5hdGlvbiA9IGFkb3B0Q0YoQ0dJbWFnZURlc3Rp
bmF0aW9uQ3JlYXRlV2l0aERhdGFDb25zdW1lcihjb25zdW1lci5nZXQoKSwgZGVzdGluYXRpb25V
VEkuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSwgMSwgbnVsbHB0cikpOworCisgICAgQ0dJbWFnZURl
c3RpbmF0aW9uQWRkSW1hZ2VGcm9tU291cmNlKGRlc3RpbmF0aW9uLmdldCgpLCBzb3VyY2UuZ2V0
KCksIDAsIG51bGxwdHIpOworCisgICAgaWYgKCFDR0ltYWdlRGVzdGluYXRpb25GaW5hbGl6ZShk
ZXN0aW5hdGlvbi5nZXQoKSkpIHsKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoSW1hZ2VzLCAi
dHJhbnNjb2RlSW1hZ2U6IEltYWdlIHRyYW5zY29kaW5nIGZhaWxzOiAlcyAlc1xuIiwgcGF0aC51
dGY4KCkuZGF0YSgpLCBkZXN0aW5hdGlvblVUSS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgRmls
ZVN5c3RlbTo6Y2xvc2VGaWxlKGRlc3RpbmF0aW9uRmlsZUhhbmRsZSk7CisgICAgICAgIEZpbGVT
eXN0ZW06OmRlbGV0ZUZpbGUoZGVzdGluYXRpb25QYXRoKTsKKyAgICAgICAgcmV0dXJuIG51bGxT
dHJpbmcoKTsKKyAgICB9CisKKyAgICBGaWxlU3lzdGVtOjpjbG9zZUZpbGUoZGVzdGluYXRpb25G
aWxlSGFuZGxlKTsKKyAgICByZXR1cm4gZGVzdGluYXRpb25QYXRoOworfQorCitWZWN0b3I8U3Ry
aW5nPiBmaW5kSW1hZ2VzRm9yVHJhbnNjb2RpbmcoY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhdGhz
LCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYWxsb3dlZE1JTUVUeXBlcykKK3sKKyAgICBWZWN0b3I8
U3RyaW5nPiB0cmFuc2NvZGluZ1BhdGhzOworICAgIHRyYW5zY29kaW5nUGF0aHMucmVzZXJ2ZUlu
aXRpYWxDYXBhY2l0eShwYXRocy5zaXplKCkpOworCisgICAgYm9vbCBuZWVkc1RyYW5zY29kaW5n
ID0gZmFsc2U7CisKKyAgICBmb3IgKGF1dG8mIHBhdGggOiBwYXRocykgeworICAgICAgICAvLyBB
cHBlbmQgYSBwYXRoIG9mIHRoZSBpbWFnZSB3aGljaCBuZWVkcyB0cmFuc2NvZGluZy4gT3RoZXJ3
aXNlIGFwcGVuZCBhIG51bGwgc3RyaW5nLgorICAgICAgICBpZiAoIWFsbG93ZWRNSU1FVHlwZXMu
Y29udGFpbnMoV2ViQ29yZTo6TUlNRVR5cGVSZWdpc3RyeTo6bWltZVR5cGVGb3JQYXRoKHBhdGgp
KSkgeworICAgICAgICAgICAgdHJhbnNjb2RpbmdQYXRocy51bmNoZWNrZWRBcHBlbmQocGF0aCk7
CisgICAgICAgICAgICBuZWVkc1RyYW5zY29kaW5nID0gdHJ1ZTsKKyAgICAgICAgfSBlbHNlCisg
ICAgICAgICAgICB0cmFuc2NvZGluZ1BhdGhzLnVuY2hlY2tlZEFwcGVuZChudWxsU3RyaW5nKCkp
OworICAgIH0KKworICAgIC8vIElmIG5vbmUgb2YgdGhlIGZpbGVzIG5lZWRzIGltYWdlIHRyYW5z
Y29kaW5nLCByZXR1cm4gYW4gZW1wdHkgVmVjdG9yLgorICAgIHJldHVybiBuZWVkc1RyYW5zY29k
aW5nID8gdHJhbnNjb2RpbmdQYXRocyA6IFZlY3RvcjxTdHJpbmc+KCk7Cit9CisKK1ZlY3RvcjxT
dHJpbmc+IHRyYW5zY29kZUltYWdlcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGF0aHMsIGNvbnN0
IFN0cmluZyYgZGVzdGluYXRpb25VVEksIGNvbnN0IFN0cmluZyYgZGVzdGluYXRpb25FeHRlbnNp
b24pCit7CisgICAgQVNTRVJUKCFkZXN0aW5hdGlvblVUSS5pc051bGwoKSk7CisgICAgQVNTRVJU
KCFkZXN0aW5hdGlvbkV4dGVuc2lvbi5pc051bGwoKSk7CisgICAgCisgICAgVmVjdG9yPFN0cmlu
Zz4gdHJhbnNjb2RlZFBhdGhzOworICAgIHRyYW5zY29kZWRQYXRocy5yZXNlcnZlSW5pdGlhbENh
cGFjaXR5KHBhdGhzLnNpemUoKSk7CisKKyAgICBmb3IgKGF1dG8mIHBhdGggOiBwYXRocykgewor
ICAgICAgICAvLyBBcHBlbmQgdGhlIHRyYW5zY29kZWQgcGF0aCBpZiB0aGUgaW1hZ2UgbmVlZHMg
dHJhbnNjb2RpbmcuIE90aGVyd2lzZSBhcHBlbmQgYSBudWxsIHN0cmluZy4KKyAgICAgICAgaWYg
KCFwYXRoLmlzTnVsbCgpKQorICAgICAgICAgICAgdHJhbnNjb2RlZFBhdGhzLnVuY2hlY2tlZEFw
cGVuZCh0cmFuc2NvZGVJbWFnZShwYXRoLCBkZXN0aW5hdGlvblVUSSwgZGVzdGluYXRpb25FeHRl
bnNpb24pKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdHJhbnNjb2RlZFBhdGhzLnVuY2hl
Y2tlZEFwcGVuZChudWxsU3RyaW5nKCkpOworICAgIH0KKworICAgIHJldHVybiB0cmFuc2NvZGVk
UGF0aHM7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
Q2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCShyZXZpc2lv
biAyNjUzMDYpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDE3IEBACisyMDIwLTA4LTA1ICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3
YUBhcHBsZS5jb20+CisKKyAgICAgICAgW21hY09TXSBEcmFnL2Ryb3AgYW4gaW1hZ2Ugb2YgYSB1
bnN1cHBvcnRlZCBmb3JtYXQgdG8gYW4gPGlucHV0IHR5cGU9ImZpbGUiPiBlbGVtZW50IHNob3Vs
ZCBjb252ZXJ0IGl0IHRvIGEgc3VwcG9ydGVkIGZvcm1hdAorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEyNDgyCisgICAgICAgIDxyZGFyOi8vcHJvYmxl
bS82MzczMTY3Mj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICAqIFBsYXRmb3JtL0ltYWdlVXRpbGl0aWVzLmg6IFJlbW92ZWQuCisgICAgICAgICogUGxh
dGZvcm0vY2c6IFJlbW92ZWQuCisgICAgICAgICogU291cmNlc0NvY29hLnR4dDoKKyAgICAgICAg
KiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcDoKKyAgICAgICAgKiBXZWJLaXQueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvajoKKwogMjAyMC0wOC0wNSAgUGVyIEFybmUgVm9sbGFuICA8cHZvbGxh
bkBhcHBsZS5jb20+CiAKICAgICAgICAgW0NvY29hXSBTYW5kYm94IGV4dGVuc2lvbiB0b2tlbiBu
b3QgY2xlYXJlZCBmcm9tIG1lbW9yeQpJbmRleDogU291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2Eu
dHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dAkocmV2aXNp
b24gMjY1MDc2KQorKysgU291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0CSh3b3JraW5nIGNv
cHkpCkBAIC02NSw4ICs2NSw2IEBAIEdQVVByb2Nlc3Mvd2VicnRjL0xpYldlYlJUQ0NvZGVjc1By
b3h5Lm0KIAogUGxhdGZvcm0vY2YvTW9kdWxlQ0YuY3BwCiAKLVBsYXRmb3JtL2NnL0ltYWdlVXRp
bGl0aWVzQ0cuY3BwCi0KIFBsYXRmb3JtL2NsYXNzaWZpZXIvY29jb2EvUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0NsYXNzaWZpZXJDb2NvYS5jcHAKIFBsYXRmb3JtL2NsYXNzaWZpZXIvUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0NsYXNzaWZpZXIuY3BwCiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvUGxhdGZv
cm0vSW1hZ2VVdGlsaXRpZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1BsYXRmb3Jt
L0ltYWdlVXRpbGl0aWVzLmgJKHJldmlzaW9uIDI2NTA3NikKKysrIFNvdXJjZS9XZWJLaXQvUGxh
dGZvcm0vSW1hZ2VVdGlsaXRpZXMuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDQyICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLS8vIEdpdmVu
IGEgbGlzdCBvZiBmaWxlcycgJ3BhdGhzJyBhbmQgJ2FsbG93ZWRNSU1FVHlwZXMnLCB0aGUgZnVu
Y3Rpb24gcmV0dXJucyBhIGxpc3QKLS8vIG9mIHN0cmluZ3Mgd2hvc2Ugc2l6ZSBpcyB0aGUgc2Ft
ZSBhcyB0aGUgc2l6ZSBvZiAncGF0aHMnIGFuZCBpdHMgZW50cmllcyBhcmUgYWxsCi0vLyBudWxs
IHN0cmluZ3MgZXhjZXB0IHRoZSBvbmVzIHdob3NlIE1JTUUgdHlwZXMgYXJlIG5vdCBpbiAnYWxs
b3dlZE1JTUVUeXBlcycuCi1WZWN0b3I8U3RyaW5nPiBmaW5kSW1hZ2VzRm9yVHJhbnNjb2Rpbmco
Y29uc3QgVmVjdG9yPFN0cmluZz4mIHBhdGhzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYWxsb3dl
ZE1JTUVUeXBlcyk7Ci0KLS8vIEdpdmVuIGEgbGlzdCBvZiBpbWFnZXMnICdwYXRocycsIHRoaXMg
ZnVuY3Rpb24gdHJhbnNjb2RlcyB0aGVzZSBpbWFnZXMgdG8gYSBuZXcKLS8vIGZvcm1hdCB3aG9z
ZSBVVEkgaXMgZGVzdGluYXRpb25VVEkuIFRoZSByZXN1bHQgb2YgdGhlIHRyYW5zY29kaW5nIHdp
bGwgYmUgd3JpdHRlbgotLy8gdG8gdGVtcG9yYXJ5IGZpbGVzIHdob3NlIGV4dGVuc2lvbnMgYXJl
ICdkZXN0aW5hdGlvbkV4dGVuc2lvbicuIEl0IHJldHVybnMgYSBsaXN0Ci0vLyBvZiBwYXRocyB0
byB0aGUgcmVzdWx0IHRlbXBvcmFyeSBmaWxlcy4gSWYgYW4gZW50cnkgaW4gJ3BhdGhzJyBpcyBu
dWxsIG9yIGFuIGVycm9yCi0vLyBoYXBwZW5zIHdoaWxlIHRyYW5zY29kaW5nLCBhIG51bGwgc3Ry
aW5nIHdpbGwgYmUgYWRkZWQgdG8gdGhlIHJldHVybmVkIGxpc3QuCi1WZWN0b3I8U3RyaW5nPiB0
cmFuc2NvZGVJbWFnZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhdGhzLCBjb25zdCBTdHJpbmcm
IGRlc3RpbmF0aW9uVVRJLCBjb25zdCBTdHJpbmcmIGRlc3RpbmF0aW9uRXh0ZW5zaW9uKTsKLQot
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViS2l0
L1BsYXRmb3JtL0ltYWdlVXRpbGl0aWVzLmgKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpEZWxldGVkOiBzdm46ZW9sLXN0
eWxlCiMjIC0xICswLDAgIyMKLW5hdGl2ZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5
CkluZGV4OiBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL2NnL0ltYWdlVXRpbGl0aWVzQ0cuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vY2cvSW1hZ2VVdGlsaXRpZXNDRy5j
cHAJKHJldmlzaW9uIDI2NTA3NikKKysrIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vY2cvSW1hZ2VV
dGlsaXRpZXNDRy5jcHAJKG5vbmV4aXN0ZW50KQpAQCAtMSwxMjIgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJbWFnZVV0aWxpdGllcy5oIgotCi0j
aW5jbHVkZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUgPEltYWdlSU8vSW1hZ2VJTy5oPgotI2luY2x1
ZGUgPFdlYkNvcmUvTUlNRVR5cGVSZWdpc3RyeS5oPgotI2luY2x1ZGUgPHd0Zi9GaWxlU3lzdGVt
Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsK
LQotc3RhdGljIFN0cmluZyB0cmFuc2NvZGVJbWFnZShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0
IFN0cmluZyYgZGVzdGluYXRpb25VVEksIGNvbnN0IFN0cmluZyYgZGVzdGluYXRpb25FeHRlbnNp
b24pCi17Ci0gICAgYXV0byBzb3VyY2VVUkwgPSBhZG9wdENGKENGVVJMQ3JlYXRlV2l0aEZpbGVT
eXN0ZW1QYXRoKGtDRkFsbG9jYXRvckRlZmF1bHQsIHBhdGguY3JlYXRlQ0ZTdHJpbmcoKS5nZXQo
KSwga0NGVVJMUE9TSVhQYXRoU3R5bGUsIGZhbHNlKSk7Ci0gICAgYXV0byBzb3VyY2UgPSBhZG9w
dENGKENHSW1hZ2VTb3VyY2VDcmVhdGVXaXRoVVJMKHNvdXJjZVVSTC5nZXQoKSwgbnVsbHB0cikp
OwotICAgIGlmICghc291cmNlKQotICAgICAgICByZXR1cm4gbnVsbFN0cmluZygpOwotCi0gICAg
YXV0byBzb3VyY2VVVEkgPSBTdHJpbmcoQ0dJbWFnZVNvdXJjZUdldFR5cGUoc291cmNlLmdldCgp
KSk7Ci0gICAgaWYgKHNvdXJjZVVUSSA9PSBkZXN0aW5hdGlvblVUSSkKLSAgICAgICAgcmV0dXJu
IG51bGxTdHJpbmcoKTsKLQotICAgIC8vIEl0IGlzIGltcG9ydGFudCB0byBhZGQgdGhlIGFwcHJv
cHJpYXRlIGZpbGUgZXh0ZW5zaW9uIHRvIHRoZSB0ZW1wb3JhcnkgZmlsZSBwYXRoLgotICAgIC8v
IFRoZSBGaWxlIG9iamVjdCBkZXBlbmRzIHNvbGVseSBvbiB0aGUgZXh0ZW5zaW9uIHRvIGtub3cg
dGhlIE1JTUUgdHlwZSBvZiB0aGUgZmlsZS4KLSAgICBhdXRvIHN1ZmZpeCA9IG1ha2VTdHJpbmco
Jy4nLCBkZXN0aW5hdGlvbkV4dGVuc2lvbik7Ci0KLSAgICBGaWxlU3lzdGVtOjpQbGF0Zm9ybUZp
bGVIYW5kbGUgZGVzdGluYXRpb25GaWxlSGFuZGxlOwotICAgIFN0cmluZyBkZXN0aW5hdGlvblBh
dGggPSBGaWxlU3lzdGVtOjpvcGVuVGVtcG9yYXJ5RmlsZSgidGVtcEltYWdlIl9zLCBkZXN0aW5h
dGlvbkZpbGVIYW5kbGUsIHN1ZmZpeCk7Ci0gICAgaWYgKGRlc3RpbmF0aW9uRmlsZUhhbmRsZSA9
PSBGaWxlU3lzdGVtOjppbnZhbGlkUGxhdGZvcm1GaWxlSGFuZGxlKSB7Ci0gICAgICAgIFJFTEVB
U0VfTE9HX0VSUk9SKEltYWdlcywgInRyYW5zY29kZUltYWdlOiBEZXN0aW5hdGlvbiBpbWFnZSBj
b3VsZCBub3QgYmUgY3JlYXRlZDogJXMgJXNcbiIsIHBhdGgudXRmOCgpLmRhdGEoKSwgZGVzdGlu
YXRpb25VVEkudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgIHJldHVybiBudWxsU3RyaW5nKCk7Ci0g
ICAgfQotCi0gICAgQ0dEYXRhQ29uc3VtZXJDYWxsYmFja3MgY2FsbGJhY2tzID0gewotICAgICAg
ICBbXSh2b2lkKiBpbmZvLCBjb25zdCB2b2lkKiBidWZmZXIsIHNpemVfdCBjb3VudCkgLT4gc2l6
ZV90IHsKLSAgICAgICAgICAgIGF1dG8gaGFuZGxlID0gKnN0YXRpY19jYXN0PEZpbGVTeXN0ZW06
OlBsYXRmb3JtRmlsZUhhbmRsZSo+KGluZm8pOwotICAgICAgICAgICAgcmV0dXJuIEZpbGVTeXN0
ZW06OndyaXRlVG9GaWxlKGhhbmRsZSwgc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KGJ1ZmZlciks
IGNvdW50KTsKLSAgICAgICAgfSwKLSAgICAgICAgbnVsbHB0cgotICAgIH07Ci0KLSAgICBhdXRv
IGNvbnN1bWVyID0gYWRvcHRDRihDR0RhdGFDb25zdW1lckNyZWF0ZSgmZGVzdGluYXRpb25GaWxl
SGFuZGxlLCAmY2FsbGJhY2tzKSk7Ci0gICAgYXV0byBkZXN0aW5hdGlvbiA9IGFkb3B0Q0YoQ0dJ
bWFnZURlc3RpbmF0aW9uQ3JlYXRlV2l0aERhdGFDb25zdW1lcihjb25zdW1lci5nZXQoKSwgZGVz
dGluYXRpb25VVEkuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSwgMSwgbnVsbHB0cikpOwotCi0gICAg
Q0dJbWFnZURlc3RpbmF0aW9uQWRkSW1hZ2VGcm9tU291cmNlKGRlc3RpbmF0aW9uLmdldCgpLCBz
b3VyY2UuZ2V0KCksIDAsIG51bGxwdHIpOwotCi0gICAgaWYgKCFDR0ltYWdlRGVzdGluYXRpb25G
aW5hbGl6ZShkZXN0aW5hdGlvbi5nZXQoKSkpIHsKLSAgICAgICAgUkVMRUFTRV9MT0dfRVJST1Io
SW1hZ2VzLCAidHJhbnNjb2RlSW1hZ2U6IEltYWdlIHRyYW5zY29kaW5nIGZhaWxzOiAlcyAlc1xu
IiwgcGF0aC51dGY4KCkuZGF0YSgpLCBkZXN0aW5hdGlvblVUSS51dGY4KCkuZGF0YSgpKTsKLSAg
ICAgICAgRmlsZVN5c3RlbTo6Y2xvc2VGaWxlKGRlc3RpbmF0aW9uRmlsZUhhbmRsZSk7Ci0gICAg
ICAgIEZpbGVTeXN0ZW06OmRlbGV0ZUZpbGUoZGVzdGluYXRpb25QYXRoKTsKLSAgICAgICAgcmV0
dXJuIG51bGxTdHJpbmcoKTsKLSAgICB9Ci0KLSAgICBGaWxlU3lzdGVtOjpjbG9zZUZpbGUoZGVz
dGluYXRpb25GaWxlSGFuZGxlKTsKLSAgICByZXR1cm4gZGVzdGluYXRpb25QYXRoOwotfQotCi1W
ZWN0b3I8U3RyaW5nPiBmaW5kSW1hZ2VzRm9yVHJhbnNjb2RpbmcoY29uc3QgVmVjdG9yPFN0cmlu
Zz4mIHBhdGhzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYWxsb3dlZE1JTUVUeXBlcykKLXsKLSAg
ICBWZWN0b3I8U3RyaW5nPiB0cmFuc2NvZGluZ1BhdGhzOwotICAgIHRyYW5zY29kaW5nUGF0aHMu
cmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShwYXRocy5zaXplKCkpOwotCi0gICAgYm9vbCBuZWVkc1Ry
YW5zY29kaW5nID0gZmFsc2U7Ci0KLSAgICBmb3IgKGF1dG8mIHBhdGggOiBwYXRocykgewotICAg
ICAgICAvLyBBcHBlbmQgYSBwYXRoIG9mIHRoZSBpbWFnZSB3aGljaCBuZWVkcyB0cmFuc2NvZGlu
Zy4gT3RoZXJ3aXNlIGFwcGVuZCBhIG51bGwgc3RyaW5nLgotICAgICAgICBpZiAoIWFsbG93ZWRN
SU1FVHlwZXMuY29udGFpbnMoV2ViQ29yZTo6TUlNRVR5cGVSZWdpc3RyeTo6bWltZVR5cGVGb3JQ
YXRoKHBhdGgpKSkgewotICAgICAgICAgICAgdHJhbnNjb2RpbmdQYXRocy51bmNoZWNrZWRBcHBl
bmQocGF0aCk7Ci0gICAgICAgICAgICBuZWVkc1RyYW5zY29kaW5nID0gdHJ1ZTsKLSAgICAgICAg
fSBlbHNlCi0gICAgICAgICAgICB0cmFuc2NvZGluZ1BhdGhzLnVuY2hlY2tlZEFwcGVuZChudWxs
U3RyaW5nKCkpOwotICAgIH0KLQotICAgIC8vIElmIG5vbmUgb2YgdGhlIGZpbGVzIG5lZWRzIGlt
YWdlIHRyYW5zY29kaW5nLCByZXR1cm4gYW4gZW1wdHkgVmVjdG9yLgotICAgIHJldHVybiBuZWVk
c1RyYW5zY29kaW5nID8gdHJhbnNjb2RpbmdQYXRocyA6IFZlY3RvcjxTdHJpbmc+KCk7Ci19Ci0K
LVZlY3RvcjxTdHJpbmc+IHRyYW5zY29kZUltYWdlcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGF0
aHMsIGNvbnN0IFN0cmluZyYgZGVzdGluYXRpb25VVEksIGNvbnN0IFN0cmluZyYgZGVzdGluYXRp
b25FeHRlbnNpb24pCi17Ci0gICAgQVNTRVJUKCFkZXN0aW5hdGlvblVUSS5pc051bGwoKSk7Ci0g
ICAgQVNTRVJUKCFkZXN0aW5hdGlvbkV4dGVuc2lvbi5pc051bGwoKSk7Ci0gICAgCi0gICAgVmVj
dG9yPFN0cmluZz4gdHJhbnNjb2RlZFBhdGhzOwotICAgIHRyYW5zY29kZWRQYXRocy5yZXNlcnZl
SW5pdGlhbENhcGFjaXR5KHBhdGhzLnNpemUoKSk7Ci0KLSAgICBmb3IgKGF1dG8mIHBhdGggOiBw
YXRocykgewotICAgICAgICAvLyBBcHBlbmQgdGhlIHRyYW5zY29kZWQgcGF0aCBpZiB0aGUgaW1h
Z2UgbmVlZHMgdHJhbnNjb2RpbmcuIE90aGVyd2lzZSBhcHBlbmQgYSBudWxsIHN0cmluZy4KLSAg
ICAgICAgaWYgKCFwYXRoLmlzTnVsbCgpKQotICAgICAgICAgICAgdHJhbnNjb2RlZFBhdGhzLnVu
Y2hlY2tlZEFwcGVuZCh0cmFuc2NvZGVJbWFnZShwYXRoLCBkZXN0aW5hdGlvblVUSSwgZGVzdGlu
YXRpb25FeHRlbnNpb24pKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgdHJhbnNjb2RlZFBh
dGhzLnVuY2hlY2tlZEFwcGVuZChudWxsU3RyaW5nKCkpOwotICAgIH0KLQotICAgIHJldHVybiB0
cmFuc2NvZGVkUGF0aHM7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCShyZXZpc2lvbiAyNjUwNzYpCisrKyBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yMTcsNyArMjE3LDcgQEAKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oTUFDKQotI2luY2x1ZGUg
IkltYWdlVXRpbGl0aWVzLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9JbWFnZVV0aWxpdGllcy5oPgog
I2luY2x1ZGUgPFdlYkNvcmUvVVRJVXRpbGl0aWVzLmg+CiAjZW5kaWYKIApJbmRleDogU291cmNl
L1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAy
NjUwNzYpCisrKyBTb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CSh3b3JraW5nIGNvcHkpCkBAIC0yOTAsNyArMjkwLDYgQEAKIAkJMUE5RkJBOEQxM0ZGMDRFNjAw
REVFRDY3IC8qIFBsdWdpbkNvbXBsZXhUZXh0SW5wdXRTdGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE5RkJBOEMxM0ZGMDRFNjAwREVFRDY3IC8q
IFBsdWdpbkNvbXBsZXhUZXh0SW5wdXRTdGF0ZS5oICovOyB9OwogCQkxQUExMzIxMjE5MUQ1OTI0
MDA5QzE0ODkgLyogV0tOYXZpZ2F0aW9uUmVzcG9uc2VQcml2YXRlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQUExMzIxMTE5MUQ1OTI0MDA5QzE0ODkg
LyogV0tOYXZpZ2F0aW9uUmVzcG9uc2VQcml2YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMUFBMjBENTExOEFENTBFMDAwNUQxRUQ0IC8qIFdL
TmF2aWdhdGlvbkRlbGVnYXRlUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMUFBMjBENTAxOEFENTBFMDAwNUQxRUQ0IC8qIFdLTmF2aWdhdGlv
bkRlbGVnYXRlUHJpdmF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07Ci0JCTFBQTJFNTFEMTJFNEMwNUUwMEJDNDk2NiAvKiBJbWFnZVV0aWxpdGllcy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFBMkU1MUIx
MkU0QzA1RTAwQkM0OTY2IC8qIEltYWdlVXRpbGl0aWVzLmggKi87IH07CiAJCTFBQTJFNTY3MThE
Nzc1MDgwMDM4MTRCRCAvKiBXS1dlYlByb2Nlc3NCdW5kbGVQYXJhbWV0ZXJzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQUEyRTU2NTE4RDc3NTA4MDAz
ODE0QkQgLyogV0tXZWJQcm9jZXNzQnVuZGxlUGFyYW1ldGVycy5oICovOyB9OwogCQkxQUEzRDc1
QzE2NTFCNDRGMDA4NzEzRDAgLyogUmVtb3RlTGF5ZXJUcmVlSG9zdC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFBM0Q3NUExNjUxQjQ0RjAwODcxM0Qw
IC8qIFJlbW90ZUxheWVyVHJlZUhvc3QuaCAqLzsgfTsKIAkJMUFBNDE3Q0IxMkMwMENDQTAwMkJF
NjdCIC8qIFRleHRDaGVja2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAxQUE0MTdDOTEyQzAwQ0NBMDAyQkU2N0IgLyogVGV4dENoZWNrZXIuaCAqLzsg
fTsKQEAgLTI1MTQsOCArMjUxMyw2IEBACiAJCTFBQTFDQzVDMTAwRkExQTEwMDc4REVCQyAvKiBR
dWFydHpDb3JlLmZyYW1ld29yayAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHdyYXBwZXIuZnJhbWV3b3JrOyBuYW1lID0gUXVhcnR6Q29yZS5mcmFtZXdv
cms7IHBhdGggPSAvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9RdWFydHpDb3JlLmZyYW1ld29y
azsgc291cmNlVHJlZSA9ICI8YWJzb2x1dGU+IjsgfTsKIAkJMUFBMUNEMDYxMDBGQTFCQTAwNzhE
RUJDIC8qIENhcmJvbi5mcmFtZXdvcmsgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSB3cmFwcGVyLmZyYW1ld29yazsgbmFtZSA9IENhcmJvbi5mcmFtZXdv
cms7IHBhdGggPSAvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9DYXJib24uZnJhbWV3b3JrOyBz
b3VyY2VUcmVlID0gIjxhYnNvbHV0ZT4iOyB9OwogCQkxQUEyMEQ1MDE4QUQ1MEUwMDA1RDFFRDQg
LyogV0tOYXZpZ2F0aW9uRGVsZWdhdGVQcml2YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFdLTmF2aWdhdGlvbkRlbGVnYXRlUHJpdmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQkxQUEyRTUxQjEyRTRDMDVFMDBCQzQ5NjYgLyogSW1hZ2VVdGlsaXRpZXMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VVdGlsaXRpZXMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUFBMkU1MUMxMkU0QzA1RTAwQkM0OTY2IC8qIElt
YWdlVXRpbGl0aWVzQ0cuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SW1hZ2VVdGlsaXRpZXNDRy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBQTJF
NTY0MThENzc1MDgwMDM4MTRCRCAvKiBXS1dlYlByb2Nlc3NCdW5kbGVQYXJhbWV0ZXJzLm1tICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV0tXZWJQcm9jZXNzQnVuZGxl
UGFyYW1ldGVycy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUFBMkU1NjUxOEQ3
NzUwODAwMzgxNEJEIC8qIFdLV2ViUHJvY2Vzc0J1bmRsZVBhcmFtZXRlcnMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tXZWJQcm9jZXNzQnVuZGxlUGFyYW1ldGVycy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQUEzRDc1OTE2NTFCNDRGMDA4NzEzRDAgLyog
UmVtb3RlTGF5ZXJUcmVlSG9zdC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsg
cGF0aCA9IFJlbW90ZUxheWVyVHJlZUhvc3QubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC01OTU0LDE0ICs1OTUxLDYgQEAKIAkJCXBhdGggPSBtYWM7CiAJCQlzb3VyY2VUcmVlID0g
Ijxncm91cD4iOwogCQl9OwotCQkxQUEyRTUxQTEyRTRDMDU2MDBCQzQ5NjYgLyogY2cgKi8gPSB7
Ci0JCQlpc2EgPSBQQlhHcm91cDsKLQkJCWNoaWxkcmVuID0gKAotCQkJCTFBQTJFNTFDMTJFNEMw
NUUwMEJDNDk2NiAvKiBJbWFnZVV0aWxpdGllc0NHLmNwcCAqLywKLQkJCSk7Ci0JCQlwYXRoID0g
Y2c7Ci0JCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwotCQl9OwogCQkxQUFDNERERTE2QjFDQkY2
MDA5NDI1RTMgLyogV2ViU3RvcmFnZSAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hp
bGRyZW4gPSAoCkBAIC05NTgyLDcgKzk1NzEsNiBAQAogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQlj
aGlsZHJlbiA9ICgKIAkJCQkzNzA5NTA0MTE4QTg4QkE0MDA4N0FFNUQgLyogY2YgKi8sCi0JCQkJ
MUFBMkU1MUExMkU0QzA1NjAwQkM0OTY2IC8qIGNnICovLAogCQkJCTZCRTk2OUMyMUU1NEQ0Njcw
MDhCNzQ4MyAvKiBjbGFzc2lmaWVyICovLAogCQkJCTQ0NTBBRUJFMURDM0ZBQUMwMDk5NDNGMiAv
KiBjb2NvYSAqLywKIAkJCQkzNzA5NTA0MjE4QTg4Q0RFMDA4N0FFNUQgLyogZm91bmRhdGlvbiAq
LywKQEAgLTk1OTMsNyArOTU4MSw2IEBACiAJCQkJNTFCMTVBN0QxMzg0MzlCMjAwMzIxQUQ4IC8q
IHVuaXggKi8sCiAJCQkJRUNBNjgwRDMxRTY5MDRCNTAwNzMxRDIwIC8qIEV4dHJhUHJpdmF0ZVN5
bWJvbHNGb3JUQVBJLmggKi8sCiAJCQkJRUNCRkMxREIxRTZBNEQ2NjAwMDMwMEM3IC8qIEV4dHJh
UHVibGljU3ltYm9sc0ZvclRBUEkuaCAqLywKLQkJCQkxQUEyRTUxQjEyRTRDMDVFMDBCQzQ5NjYg
LyogSW1hZ2VVdGlsaXRpZXMuaCAqLywKIAkJCQk1MUE3RjJGNDEyNUJGOEQ0MDA4QUVCMUQgLyog
TG9nZ2luZy5jcHAgKi8sCiAJCQkJNTFBN0YyRjIxMjVCRjgyMDAwOEFFQjFEIC8qIExvZ2dpbmcu
aCAqLywKIAkJCQkwRkRDRDdGNjFENDdFOTJBMDA5RjA4QkMgLyogTG9nSW5pdGlhbGl6YXRpb24u
aCAqLywKQEAgLTEwODU1LDcgKzEwODQyLDYgQEAKIAkJCQk1MUMwQzk3NDFEREQ3NjAwMDAzMkNB
RDMgLyogSWNvbkxvYWRpbmdEZWxlZ2F0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTFFMzUxQ0Ix
ODBGMkNDQzAwRTUzQkU5IC8qIElEQlV0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkND
RjZCMjUxMkM5M0U3QTAwOEY5QzM1IC8qIEltYWdlT3B0aW9ucy5oIGluIEhlYWRlcnMgKi8sCi0J
CQkJMUFBMkU1MUQxMkU0QzA1RTAwQkM0OTY2IC8qIEltYWdlVXRpbGl0aWVzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkxQTFFQzY5RTE4NzIwOTIxMDBCOTUxRjAgLyogSW1wb3J0YW5jZUFzc2VydGlv
bi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMyMDRFRTMxMUM4M0U5ODAwOEYzMzc1IC8qIEluamVj
dGVkQnVuZGxlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0VFN0RDNTEyOEI2NDVEMDA5ODI3REEg
LyogSW5qZWN0ZWRCdW5kbGVDbGllbnQuaCBpbiBIZWFkZXJzICovLAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>406044</attachid>
            <date>2020-08-05 14:51:36 -0700</date>
            <delta_ts>2020-08-05 15:04:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-212482-20200805145135.patch</filename>
            <type>text/plain</type>
            <size>34958</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2NTA3NikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI2IEBACisyMDIwLTA4LTA1ICBTYWlkIEFi
b3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgW21hY09TXSBE
cmFnL2Ryb3AgYW4gaW1hZ2Ugb2YgYSB1bnN1cHBvcnRlZCBmb3JtYXQgdG8gYW4gPGlucHV0IHR5
cGU9ImZpbGUiPiBlbGVtZW50IHNob3VsZCBjb252ZXJ0IGl0IHRvIGEgc3VwcG9ydGVkIGZvcm1h
dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEyNDgy
CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS82MzczMTY3Mj4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNvdXJjZXNDb2NvYS50eHQ6CisgICAgICAg
ICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGh0bWwvRmls
ZUlucHV0VHlwZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGaWxlSW5wdXRUeXBlOjpoYW5kbGVE
T01BY3RpdmF0ZUV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVJbnB1dFR5cGU6OmZpbGVD
aG9vc2VyU2V0dGluZ3MgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsZUlucHV0VHlwZTo6
YXBwbHlGaWxlQ2hvb3NlclNldHRpbmdzKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVJbnB1dFR5
cGU6OnRyYW5zY29kZURyb3BwZWRJbWFnZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Rmls
ZUlucHV0VHlwZTo6cmVjZWl2ZURyb3BwZWRGaWxlcyk6CisgICAgICAgICogaHRtbC9GaWxlSW5w
dXRUeXBlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VVdGlsaXRpZXMuaDog
QWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VVdGlsaXRpZXNDRy5j
cHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6dHJhbnNjb2RlSW1hZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6ZmluZEltYWdlc0ZvclRyYW5zY29kaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OnRy
YW5zY29kZUltYWdlcyk6CisKIDIwMjAtMDctMjkgIEpvb25naHVuIFBhcmsgIDxqaDcxOC5wYXJr
QHNhbXN1bmcuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQuIFJlbW92ZSB0aGUgYnVpbGQgd2Fy
bmluZyBiZWxvdyBzaW5jZSByMjY1MDYyLgpJbmRleDogU291cmNlL1dlYkNvcmUvU291cmNlc0Nv
Y29hLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0CShy
ZXZpc2lvbiAyNjUwNzYpCisrKyBTb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0CSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMjYsNiArMzI2LDcgQEAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VC
dWZmZXJJT1N1cmZhYwogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXND
Ry5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlRGVjb2RlckNHLmNwcAogcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvSW1hZ2VTb3VyY2VDR01hYy5tbQorcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1h
Z2VVdGlsaXRpZXNDRy5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ludFBvaW50Q0cuY3BwCiBw
bGF0Zm9ybS9ncmFwaGljcy9jZy9JbnRSZWN0Q0cuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9J
bnRTaXplQ0cuY3BwCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyNjUwNzYpCisrKyBTb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTE3NTUs
NiArMTc1NSw3IEBACiAJCTU1QUQwOTQwMjQwODk2NDAwMERFNEQyRiAvKiBEaXNwbGF5TGlzdERy
YXdpbmdDb250ZXh0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA3MkVBMDlGOTIzRkNDQzZBMDA4NTA0QTUgLyogRGlzcGxheUxpc3REcmF3aW5nQ29udGV4
dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTU1
QUQwOTQxMjQwODk2NEEwMERFNEQyRiAvKiBDb25jcmV0ZUltYWdlQnVmZmVyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkJBQzNBNzIzRTE3MzI4MDA4
RDc0MUMgLyogQ29uY3JldGVJbWFnZUJ1ZmZlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTU1QUYxNEU2MUVBQUM1OUIwMDI2RUVBQSAvKiBVVElS
ZWdpc3RyeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTVBRjE0RTQxRUFBQzU5QjAwMjZFRUFBIC8qIFVUSVJlZ2lzdHJ5LmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNTVCQkQ0MjkyNERCNTYwNDAwQkI2
RTBDIC8qIEltYWdlVXRpbGl0aWVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1NUJCRDQyODI0REI1M0EyMDBCQjZFMEMgLyogSW1hZ2VVdGlsaXRpZXMu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1NURD
QzUyODIyNDA3QjIwMDBDMjZFMzIgLyogU1ZHUHJpbWl0aXZlTGlzdC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTVEQ0M1MjUyMjQwNzQ5RTAwQzI2RTMy
IC8qIFNWR1ByaW1pdGl2ZUxpc3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQk1NURDQzUyOTIyNDA3QjJBMDBDMjZFMzIgLyogU1ZHTGlzdC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTVEQ0M1MjMyMjQw
NzNGRTAwQzI2RTMyIC8qIFNWR0xpc3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQk1NUVDOTU5OTIwNkFBN0EwMDA3REQwQTkgLyogUGFpbnRGcmVx
dWVuY3lUcmFja2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1NUVDOTU5NzIwNjlDOTJEMDA3REQwQTkgLyogUGFpbnRGcmVxdWVuY3lUcmFja2VyLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTg4MDQs
NiArODgwNSw4IEBACiAJCTU1QTMzNkY4MUQ4MjFFM0MwMDIyQzRDNyAvKiBJbWFnZUJhY2tpbmdT
dG9yZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZUJhY2tpbmdTdG9y
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NUFGMTRFMzFFQUFDNTlCMDAyNkVF
QUEgLyogVVRJUmVnaXN0cnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVVRJUmVnaXN0cnkuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NUFGMTRFNDFFQUFDNTlCMDAyNkVFQUEg
LyogVVRJUmVnaXN0cnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVVRJUmVnaXN0cnkuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTVCQkQ0MjYyNERCNTM0MzAwQkI2RTBDIC8qIEltYWdlVXRp
bGl0aWVzQ0cuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2VVdGlsaXRpZXNDRy5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTU1QkJENDI4MjREQjUzQTIwMEJCNkUwQyAvKiBJ
bWFnZVV0aWxpdGllcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZVV0aWxpdGllcy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk1NUJFMDI1NzIyM0IyOUMwMDAzMkYwOEEgLyogU1ZHUHJv
cGVydHlSZWdpc3RyeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdQcm9wZXJ0eVJlZ2lzdHJ5Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU1QkUwMjU5MjIzQjI5QzEwMDMyRjA4QSAvKiBT
VkdBbmltYXRpb25BZGRpdGl2ZVZhbHVlRnVuY3Rpb25JbXBsLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNW
R0FuaW1hdGlvbkFkZGl0aXZlVmFsdWVGdW5jdGlvbkltcGwuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNTVCRTAyNUEyMjNCMjlDMjAwMzJGMDhBIC8qIFNWR1BvaW50ZXJNZW1iZXJB
Y2Nlc3Nvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdQb2ludGVyTWVtYmVyQWNjZXNzb3IuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI1NTI4LDYgKzI1NTMxLDcgQEAKIAkJCQk1NTVC
ODdFQjFDQUFGMEFCMDAzNDk0MjUgLyogSW1hZ2VEZWNvZGVyQ0cuaCAqLywKIAkJCQk0QjM0ODA5
MjBFRUY1MEQ0MDBBQzFCNDEgLyogSW1hZ2VTb3VyY2VDRy5oICovLAogCQkJCTRCMzQ4MDkxMEVF
RjUwRDQwMEFDMUI0MSAvKiBJbWFnZVNvdXJjZUNHTWFjLm1tICovLAorCQkJCTU1QkJENDI2MjRE
QjUzNDMwMEJCNkUwQyAvKiBJbWFnZVV0aWxpdGllc0NHLmNwcCAqLywKIAkJCQlCMjc1MzUzMjBC
MDUzODE0MDAyQ0U2NEYgLyogSW50UG9pbnRDRy5jcHAgKi8sCiAJCQkJQjI3NTM1MzMwQjA1Mzgx
NDAwMkNFNjRGIC8qIEludFJlY3RDRy5jcHAgKi8sCiAJCQkJQjI3NTM1MzQwQjA1MzgxNDAwMkNF
NjRGIC8qIEludFNpemVDRy5jcHAgKi8sCkBAIC0yNTczMSw2ICsyNTczNSw3IEBACiAJCQkJNTU0
Njc1NzcxRkQxRkMxQTAwM0IxMEIwIC8qIEltYWdlU291cmNlLmNwcCAqLywKIAkJCQk1NTQ2NzU3
ODFGRDFGQzFBMDAzQjEwQjAgLyogSW1hZ2VTb3VyY2UuaCAqLywKIAkJCQk1NTUwQ0I0MTFFOTU1
RTNDMDAxMTFBQTAgLyogSW1hZ2VUeXBlcy5oICovLAorCQkJCTU1QkJENDI4MjREQjUzQTIwMEJC
NkUwQyAvKiBJbWFnZVV0aWxpdGllcy5oICovLAogCQkJCTA3ODYzM0Y4MjQwNzE1RDIwMDg3QUUy
MSAvKiBJbmJhbmRHZW5lcmljQ3VlLmNwcCAqLywKIAkJCQkwNzg2MzNERTIzRkVERjIyMDA4N0FF
MjEgLyogSW5iYW5kR2VuZXJpY0N1ZS5oICovLAogCQkJCTA3MDZBMEQ3MjQwODMwQTYwMEU5Mzgx
OCAvKiBJbmJhbmRHZW5lcmljQ3VlSWRlbnRpZmllci5oICovLApAQCAtMzEyNzQsNiArMzEyNzks
NyBAQAogCQkJCTRCMzQ4MDk0MEVFRjUwRDQwMEFDMUI0MSAvKiBJbWFnZVNvdXJjZUNHLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwNzhFRDE5MzIxNkQwNzk1MDA3NzVCMzMgLyogSW1hZ2VUcmFuc2Zl
clNlc3Npb25WVC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTU1MENCNDIxRTk1NUUzQzAwMTExQUEw
IC8qIEltYWdlVHlwZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTU1QkJENDI5MjREQjU2MDQwMEJC
NkUwQyAvKiBJbWFnZVV0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMjZGNzU2QjMxQjNC
NjZGNzAwMDVERDc5IC8qIEltbXV0YWJsZU5GQS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMjZGNzU2
QjUxQjNCNjhGMjAwMDVERDc5IC8qIEltbXV0YWJsZU5GQU5vZGVCdWlsZGVyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkzMTZGRTExODBFNkUxREE3MDBCRjYwODggLyogSW1wbGljaXRBbmltYXRpb24u
aCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9GaWxlSW5wdXRUeXBl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0ZpbGVJbnB1dFR5cGUuY3Bw
CShyZXZpc2lvbiAyNjUwNzYpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0ZpbGVJbnB1dFR5cGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSAiSWNvbi5oIgog
I2luY2x1ZGUgIklucHV0VHlwZU5hbWVzLmgiCiAjaW5jbHVkZSAiTG9jYWxpemVkU3RyaW5ncy5o
IgorI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKICNpbmNsdWRlICJSZW5kZXJGaWxlVXBs
b2FkQ29udHJvbC5oIgogI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKICNpbmNs
dWRlICJTZXR0aW5ncy5oIgpAQCAtNDcsNiArNDgsMTEgQEAKICNpbmNsdWRlIDx3dGYvVHlwZUNh
c3RzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCisjaWYgUExBVEZP
Uk0oTUFDKQorI2luY2x1ZGUgIkltYWdlVXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiVVRJVXRpbGl0
aWVzLmgiCisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgVXBsb2FkQnV0dG9u
RWxlbWVudDsKIH0KQEAgLTIwNCwxNiArMjEwLDcgQEAgdm9pZCBGaWxlSW5wdXRUeXBlOjpoYW5k
bGVET01BY3RpdmF0ZUV2ZQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoYXV0byogY2hyb21l
ID0gdGhpcy0+Y2hyb21lKCkpIHsKLSAgICAgICAgRmlsZUNob29zZXJTZXR0aW5ncyBzZXR0aW5n
czsKLSAgICAgICAgc2V0dGluZ3MuYWxsb3dzRGlyZWN0b3JpZXMgPSBhbGxvd3NEaXJlY3Rvcmll
cygpOwotICAgICAgICBzZXR0aW5ncy5hbGxvd3NNdWx0aXBsZUZpbGVzID0gaW5wdXQuaGFzQXR0
cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihtdWx0aXBsZUF0dHIpOwotICAgICAgICBzZXR0
aW5ncy5hY2NlcHRNSU1FVHlwZXMgPSBpbnB1dC5hY2NlcHRNSU1FVHlwZXMoKTsKLSAgICAgICAg
c2V0dGluZ3MuYWNjZXB0RmlsZUV4dGVuc2lvbnMgPSBpbnB1dC5hY2NlcHRGaWxlRXh0ZW5zaW9u
cygpOwotICAgICAgICBzZXR0aW5ncy5zZWxlY3RlZEZpbGVzID0gbV9maWxlTGlzdC0+cGF0aHMo
KTsKLSNpZiBFTkFCTEUoTUVESUFfQ0FQVFVSRSkKLSAgICAgICAgc2V0dGluZ3MubWVkaWFDYXB0
dXJlVHlwZSA9IGlucHV0Lm1lZGlhQ2FwdHVyZVR5cGUoKTsKLSNlbmRpZgotICAgICAgICBhcHBs
eUZpbGVDaG9vc2VyU2V0dGluZ3Moc2V0dGluZ3MpOworICAgICAgICBhcHBseUZpbGVDaG9vc2Vy
U2V0dGluZ3MoKTsKICAgICAgICAgY2hyb21lLT5ydW5PcGVuUGFuZWwoKmlucHV0LmRvY3VtZW50
KCkuZnJhbWUoKSwgKm1fZmlsZUNob29zZXIpOwogICAgIH0KIApAQCAtMzMyLDEyICszMjksMjkg
QEAgdm9pZCBGaWxlSW5wdXRUeXBlOjpyZXF1ZXN0SWNvbihjb25zdCBWZQogICAgIGNocm9tZS0+
bG9hZEljb25Gb3JGaWxlcyhwYXRocywgKm1fZmlsZUljb25Mb2FkZXIpOwogfQogCi12b2lkIEZp
bGVJbnB1dFR5cGU6OmFwcGx5RmlsZUNob29zZXJTZXR0aW5ncyhjb25zdCBGaWxlQ2hvb3NlclNl
dHRpbmdzJiBzZXR0aW5ncykKK0ZpbGVDaG9vc2VyU2V0dGluZ3MgRmlsZUlucHV0VHlwZTo6Zmls
ZUNob29zZXJTZXR0aW5ncygpIGNvbnN0Cit7CisgICAgQVNTRVJUKGVsZW1lbnQoKSk7CisgICAg
YXV0byYgaW5wdXQgPSAqZWxlbWVudCgpOworCisgICAgRmlsZUNob29zZXJTZXR0aW5ncyBzZXR0
aW5nczsKKyAgICBzZXR0aW5ncy5hbGxvd3NEaXJlY3RvcmllcyA9IGFsbG93c0RpcmVjdG9yaWVz
KCk7CisgICAgc2V0dGluZ3MuYWxsb3dzTXVsdGlwbGVGaWxlcyA9IGlucHV0Lmhhc0F0dHJpYnV0
ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24obXVsdGlwbGVBdHRyKTsKKyAgICBzZXR0aW5ncy5hY2Nl
cHRNSU1FVHlwZXMgPSBpbnB1dC5hY2NlcHRNSU1FVHlwZXMoKTsKKyAgICBzZXR0aW5ncy5hY2Nl
cHRGaWxlRXh0ZW5zaW9ucyA9IGlucHV0LmFjY2VwdEZpbGVFeHRlbnNpb25zKCk7CisgICAgc2V0
dGluZ3Muc2VsZWN0ZWRGaWxlcyA9IG1fZmlsZUxpc3QtPnBhdGhzKCk7CisjaWYgRU5BQkxFKE1F
RElBX0NBUFRVUkUpCisgICAgc2V0dGluZ3MubWVkaWFDYXB0dXJlVHlwZSA9IGlucHV0Lm1lZGlh
Q2FwdHVyZVR5cGUoKTsKKyNlbmRpZgorICAgIHJldHVybiBzZXR0aW5nczsKK30KKwordm9pZCBG
aWxlSW5wdXRUeXBlOjphcHBseUZpbGVDaG9vc2VyU2V0dGluZ3MoKQogewogICAgIGlmIChtX2Zp
bGVDaG9vc2VyKQogICAgICAgICBtX2ZpbGVDaG9vc2VyLT5pbnZhbGlkYXRlKCk7CiAKLSAgICBt
X2ZpbGVDaG9vc2VyID0gRmlsZUNob29zZXI6OmNyZWF0ZSh0aGlzLCBzZXR0aW5ncyk7CisgICAg
bV9maWxlQ2hvb3NlciA9IEZpbGVDaG9vc2VyOjpjcmVhdGUodGhpcywgZmlsZUNob29zZXJTZXR0
aW5ncygpKTsKIH0KIAogYm9vbCBGaWxlSW5wdXRUeXBlOjphbGxvd3NEaXJlY3RvcmllcygpIGNv
bnN0CkBAIC00NTQsMjIgKzQ2OCw0NyBAQCB2b2lkIEZpbGVJbnB1dFR5cGU6Omljb25Mb2FkZWQo
UmVmUHRyPEljCiB9CiAKICNpZiBFTkFCTEUoRFJBR19TVVBQT1JUKQorVmVjdG9yPFN0cmluZz4g
RmlsZUlucHV0VHlwZTo6dHJhbnNjb2RlRHJvcHBlZEltYWdlcyhjb25zdCBWZWN0b3I8U3RyaW5n
PiYgcGF0aHMpIGNvbnN0Cit7CisjaWYgUExBVEZPUk0oTUFDKQorICAgIGF1dG8gc2V0dGluZ3Mg
PSBmaWxlQ2hvb3NlclNldHRpbmdzKCk7CisgICAgYXV0byBhbGxvd2VkTUlNRVR5cGVzID0gTUlN
RVR5cGVSZWdpc3RyeTo6YWxsb3dlZE1JTUVUeXBlcyhzZXR0aW5ncy5hY2NlcHRNSU1FVHlwZXMs
IHNldHRpbmdzLmFjY2VwdEZpbGVFeHRlbnNpb25zKTsKKworICAgIGF1dG8gdHJhbnNjb2RpbmdQ
YXRocyA9IGZpbmRJbWFnZXNGb3JUcmFuc2NvZGluZyhwYXRocywgYWxsb3dlZE1JTUVUeXBlcyk7
CisgICAgaWYgKHRyYW5zY29kaW5nUGF0aHMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4geyB9
OworCisgICAgYXV0byB0cmFuc2NvZGluZ01JTUVUeXBlID0gTUlNRVR5cGVSZWdpc3RyeTo6cHJl
ZmVycmVkSW1hZ2VNSU1FVHlwZUZvckVuY29kaW5nKGFsbG93ZWRNSU1FVHlwZXMsIHsgfSk7Cisg
ICAgaWYgKHRyYW5zY29kaW5nTUlNRVR5cGUuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiB7IH07
CisKKyAgICBhdXRvIHRyYW5zY29kaW5nVVRJID0gVVRJRnJvbU1JTUVUeXBlKHRyYW5zY29kaW5n
TUlNRVR5cGUpOworICAgIGF1dG8gdHJhbnNjb2RpbmdFeHRlbnNpb24gPSBXZWJDb3JlOjpNSU1F
VHlwZVJlZ2lzdHJ5OjpwcmVmZXJyZWRFeHRlbnNpb25Gb3JNSU1FVHlwZSh0cmFuc2NvZGluZ01J
TUVUeXBlKTsKKworICAgIHJldHVybiB0cmFuc2NvZGVJbWFnZXModHJhbnNjb2RpbmdQYXRocywg
dHJhbnNjb2RpbmdVVEksIHRyYW5zY29kaW5nRXh0ZW5zaW9uKTsKKyNlbHNlCisgICAgcmV0dXJu
IHsgfTsKKyNlbmRpZgorfQorCiBib29sIEZpbGVJbnB1dFR5cGU6OnJlY2VpdmVEcm9wcGVkRmls
ZXMoY29uc3QgRHJhZ0RhdGEmIGRyYWdEYXRhKQogewogICAgIGF1dG8gcGF0aHMgPSBkcmFnRGF0
YS5hc0ZpbGVuYW1lcygpOwogICAgIGlmIChwYXRocy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAorICAgIGF1dG8gcmVwbGFjZW1lbnRQYXRocyA9IHRyYW5zY29kZURyb3BwZWRJ
bWFnZXMocGF0aHMpOworICAgIAogICAgIEFTU0VSVChlbGVtZW50KCkpOwogICAgIGlmIChlbGVt
ZW50KCktPmhhc0F0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24obXVsdGlwbGVBdHRyKSkg
ewogICAgICAgICBWZWN0b3I8RmlsZUNob29zZXJGaWxlSW5mbz4gZmlsZXM7CiAgICAgICAgIGZp
bGVzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkocGF0aHMuc2l6ZSgpKTsKLSAgICAgICAgZm9yIChh
dXRvJiBwYXRoIDogcGF0aHMpCi0gICAgICAgICAgICBmaWxlcy51bmNoZWNrZWRBcHBlbmQoeyBw
YXRoLCB7IH0sIHsgfSB9KTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDAsIHNpemUgPSBwYXRo
cy5zaXplKCk7IGkgPCBzaXplOyArK2kpCisgICAgICAgICAgICBmaWxlcy51bmNoZWNrZWRBcHBl
bmQoeyBwYXRoc1tpXSwgaSA8IHJlcGxhY2VtZW50UGF0aHMuc2l6ZSgpID8gcmVwbGFjZW1lbnRQ
YXRoc1tpXSA6IG51bGxTdHJpbmcoKSwgeyB9IH0pOwogCiAgICAgICAgIGZpbGVzQ2hvc2VuKGZp
bGVzKTsKICAgICB9IGVsc2UKLSAgICAgICAgZmlsZXNDaG9zZW4oeyB7IHBhdGhzWzBdLCB7IH0s
IHsgfSB9IH0pOworICAgICAgICBmaWxlc0Nob3Nlbih7IHsgcGF0aHNbMF0sIHJlcGxhY2VtZW50
UGF0aHMuc2l6ZSgpID8gcmVwbGFjZW1lbnRQYXRoc1swXSA6IG51bGxTdHJpbmcoKSwgeyB9IH0g
fSk7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvRmls
ZUlucHV0VHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvRmlsZUlucHV0
VHlwZS5oCShyZXZpc2lvbiAyNjUwNzYpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0ZpbGVJbnB1
dFR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtNzEsNiArNzEsNyBAQCBwcml2YXRlOgogICAgIHZv
aWQgc2V0VmFsdWUoY29uc3QgU3RyaW5nJiwgYm9vbCB2YWx1ZUNoYW5nZWQsIFRleHRGaWVsZEV2
ZW50QmVoYXZpb3IpIGZpbmFsOwogCiAjaWYgRU5BQkxFKERSQUdfU1VQUE9SVCkKKyAgICBWZWN0
b3I8U3RyaW5nPiB0cmFuc2NvZGVEcm9wcGVkSW1hZ2VzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBm
aWxlbmFtZXMpIGNvbnN0OwogICAgIGJvb2wgcmVjZWl2ZURyb3BwZWRGaWxlcyhjb25zdCBEcmFn
RGF0YSYpIGZpbmFsOwogI2VuZGlmCiAKQEAgLTg2LDcgKzg3LDggQEAgcHJpdmF0ZToKICAgICAv
LyBGaWxlSWNvbkxvYWRlckNsaWVudCBpbXBsZW1lbnRhdGlvbi4KICAgICB2b2lkIGljb25Mb2Fk
ZWQoUmVmUHRyPEljb24+JiYpIGZpbmFsOwogCi0gICAgdm9pZCBhcHBseUZpbGVDaG9vc2VyU2V0
dGluZ3MoY29uc3QgRmlsZUNob29zZXJTZXR0aW5ncyYpOworICAgIEZpbGVDaG9vc2VyU2V0dGlu
Z3MgZmlsZUNob29zZXJTZXR0aW5ncygpIGNvbnN0OworICAgIHZvaWQgYXBwbHlGaWxlQ2hvb3Nl
clNldHRpbmdzKCk7CiAgICAgdm9pZCBkaWRDcmVhdGVGaWxlTGlzdChSZWY8RmlsZUxpc3Q+JiYs
IFJlZlB0cjxJY29uPiYmKTsKICAgICB2b2lkIHJlcXVlc3RJY29uKGNvbnN0IFZlY3RvcjxTdHJp
bmc+Jik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlVXRp
bGl0aWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
SW1hZ2VVdGlsaXRpZXMuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZVV0aWxpdGllcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDMg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisv
LyBHaXZlbiBhIGxpc3Qgb2YgZmlsZXMnICdwYXRocycgYW5kICdhbGxvd2VkTUlNRVR5cGVzJywg
dGhlIGZ1bmN0aW9uIHJldHVybnMgYSBsaXN0CisvLyBvZiBzdHJpbmdzIHdob3NlIHNpemUgaXMg
dGhlIHNhbWUgYXMgdGhlIHNpemUgb2YgJ3BhdGhzJyBhbmQgaXRzIGVudHJpZXMgYXJlIGFsbAor
Ly8gbnVsbCBzdHJpbmdzIGV4Y2VwdCB0aGUgb25lcyB3aG9zZSBNSU1FIHR5cGVzIGFyZSBub3Qg
aW4gJ2FsbG93ZWRNSU1FVHlwZXMnLgorV0VCQ09SRV9FWFBPUlQgVmVjdG9yPFN0cmluZz4gZmlu
ZEltYWdlc0ZvclRyYW5zY29kaW5nKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXRocywgY29uc3Qg
VmVjdG9yPFN0cmluZz4mIGFsbG93ZWRNSU1FVHlwZXMpOworCisvLyBHaXZlbiBhIGxpc3Qgb2Yg
aW1hZ2VzJyAncGF0aHMnLCB0aGlzIGZ1bmN0aW9uIHRyYW5zY29kZXMgdGhlc2UgaW1hZ2VzIHRv
IGEgbmV3CisvLyBmb3JtYXQgd2hvc2UgVVRJIGlzIGRlc3RpbmF0aW9uVVRJLiBUaGUgcmVzdWx0
IG9mIHRoZSB0cmFuc2NvZGluZyB3aWxsIGJlIHdyaXR0ZW4KKy8vIHRvIHRlbXBvcmFyeSBmaWxl
cyB3aG9zZSBleHRlbnNpb25zIGFyZSAnZGVzdGluYXRpb25FeHRlbnNpb24nLiBJdCByZXR1cm5z
IGEgbGlzdAorLy8gb2YgcGF0aHMgdG8gdGhlIHJlc3VsdCB0ZW1wb3JhcnkgZmlsZXMuIElmIGFu
IGVudHJ5IGluICdwYXRocycgaXMgbnVsbCBvciBhbiBlcnJvcgorLy8gaGFwcGVucyB3aGlsZSB0
cmFuc2NvZGluZywgYSBudWxsIHN0cmluZyB3aWxsIGJlIGFkZGVkIHRvIHRoZSByZXR1cm5lZCBs
aXN0LgorV0VCQ09SRV9FWFBPUlQgVmVjdG9yPFN0cmluZz4gdHJhbnNjb2RlSW1hZ2VzKGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiBwYXRocywgY29uc3QgU3RyaW5nJiBkZXN0aW5hdGlvblVUSSwgY29u
c3QgU3RyaW5nJiBkZXN0aW5hdGlvbkV4dGVuc2lvbik7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VVdGls
aXRpZXNDRy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvSW1hZ2VVdGlsaXRpZXNDRy5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VVdGlsaXRpZXNDRy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxMjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiSW1hZ2VVdGlsaXRpZXMuaCIKKworI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNs
dWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCisjaW5jbHVkZSA8SW1hZ2VJTy9JbWFnZUlPLmg+Cisj
aW5jbHVkZSA8d3RmL0ZpbGVTeXN0ZW0uaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIFN0cmluZyB0cmFuc2NvZGVJbWFnZShj
b25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0cmluZyYgZGVzdGluYXRpb25VVEksIGNvbnN0IFN0
cmluZyYgZGVzdGluYXRpb25FeHRlbnNpb24pCit7CisgICAgYXV0byBzb3VyY2VVUkwgPSBhZG9w
dENGKENGVVJMQ3JlYXRlV2l0aEZpbGVTeXN0ZW1QYXRoKGtDRkFsbG9jYXRvckRlZmF1bHQsIHBh
dGguY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSwga0NGVVJMUE9TSVhQYXRoU3R5bGUsIGZhbHNlKSk7
CisgICAgYXV0byBzb3VyY2UgPSBhZG9wdENGKENHSW1hZ2VTb3VyY2VDcmVhdGVXaXRoVVJMKHNv
dXJjZVVSTC5nZXQoKSwgbnVsbHB0cikpOworICAgIGlmICghc291cmNlKQorICAgICAgICByZXR1
cm4gbnVsbFN0cmluZygpOworCisgICAgYXV0byBzb3VyY2VVVEkgPSBTdHJpbmcoQ0dJbWFnZVNv
dXJjZUdldFR5cGUoc291cmNlLmdldCgpKSk7CisgICAgaWYgKHNvdXJjZVVUSSA9PSBkZXN0aW5h
dGlvblVUSSkKKyAgICAgICAgcmV0dXJuIG51bGxTdHJpbmcoKTsKKworICAgIC8vIEl0IGlzIGlt
cG9ydGFudCB0byBhZGQgdGhlIGFwcHJvcHJpYXRlIGZpbGUgZXh0ZW5zaW9uIHRvIHRoZSB0ZW1w
b3JhcnkgZmlsZSBwYXRoLgorICAgIC8vIFRoZSBGaWxlIG9iamVjdCBkZXBlbmRzIHNvbGVseSBv
biB0aGUgZXh0ZW5zaW9uIHRvIGtub3cgdGhlIE1JTUUgdHlwZSBvZiB0aGUgZmlsZS4KKyAgICBh
dXRvIHN1ZmZpeCA9IG1ha2VTdHJpbmcoJy4nLCBkZXN0aW5hdGlvbkV4dGVuc2lvbik7CisKKyAg
ICBGaWxlU3lzdGVtOjpQbGF0Zm9ybUZpbGVIYW5kbGUgZGVzdGluYXRpb25GaWxlSGFuZGxlOwor
ICAgIFN0cmluZyBkZXN0aW5hdGlvblBhdGggPSBGaWxlU3lzdGVtOjpvcGVuVGVtcG9yYXJ5Rmls
ZSgidGVtcEltYWdlIl9zLCBkZXN0aW5hdGlvbkZpbGVIYW5kbGUsIHN1ZmZpeCk7CisgICAgaWYg
KGRlc3RpbmF0aW9uRmlsZUhhbmRsZSA9PSBGaWxlU3lzdGVtOjppbnZhbGlkUGxhdGZvcm1GaWxl
SGFuZGxlKSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKEltYWdlcywgInRyYW5zY29kZUlt
YWdlOiBEZXN0aW5hdGlvbiBpbWFnZSBjb3VsZCBub3QgYmUgY3JlYXRlZDogJXMgJXNcbiIsIHBh
dGgudXRmOCgpLmRhdGEoKSwgZGVzdGluYXRpb25VVEkudXRmOCgpLmRhdGEoKSk7CisgICAgICAg
IHJldHVybiBudWxsU3RyaW5nKCk7CisgICAgfQorCisgICAgQ0dEYXRhQ29uc3VtZXJDYWxsYmFj
a3MgY2FsbGJhY2tzID0geworICAgICAgICBbXSh2b2lkKiBpbmZvLCBjb25zdCB2b2lkKiBidWZm
ZXIsIHNpemVfdCBjb3VudCkgLT4gc2l6ZV90IHsKKyAgICAgICAgICAgIGF1dG8gaGFuZGxlID0g
KnN0YXRpY19jYXN0PEZpbGVTeXN0ZW06OlBsYXRmb3JtRmlsZUhhbmRsZSo+KGluZm8pOworICAg
ICAgICAgICAgcmV0dXJuIEZpbGVTeXN0ZW06OndyaXRlVG9GaWxlKGhhbmRsZSwgc3RhdGljX2Nh
c3Q8Y29uc3QgY2hhcio+KGJ1ZmZlciksIGNvdW50KTsKKyAgICAgICAgfSwKKyAgICAgICAgbnVs
bHB0cgorICAgIH07CisKKyAgICBhdXRvIGNvbnN1bWVyID0gYWRvcHRDRihDR0RhdGFDb25zdW1l
ckNyZWF0ZSgmZGVzdGluYXRpb25GaWxlSGFuZGxlLCAmY2FsbGJhY2tzKSk7CisgICAgYXV0byBk
ZXN0aW5hdGlvbiA9IGFkb3B0Q0YoQ0dJbWFnZURlc3RpbmF0aW9uQ3JlYXRlV2l0aERhdGFDb25z
dW1lcihjb25zdW1lci5nZXQoKSwgZGVzdGluYXRpb25VVEkuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQo
KSwgMSwgbnVsbHB0cikpOworCisgICAgQ0dJbWFnZURlc3RpbmF0aW9uQWRkSW1hZ2VGcm9tU291
cmNlKGRlc3RpbmF0aW9uLmdldCgpLCBzb3VyY2UuZ2V0KCksIDAsIG51bGxwdHIpOworCisgICAg
aWYgKCFDR0ltYWdlRGVzdGluYXRpb25GaW5hbGl6ZShkZXN0aW5hdGlvbi5nZXQoKSkpIHsKKyAg
ICAgICAgUkVMRUFTRV9MT0dfRVJST1IoSW1hZ2VzLCAidHJhbnNjb2RlSW1hZ2U6IEltYWdlIHRy
YW5zY29kaW5nIGZhaWxzOiAlcyAlc1xuIiwgcGF0aC51dGY4KCkuZGF0YSgpLCBkZXN0aW5hdGlv
blVUSS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgRmlsZVN5c3RlbTo6Y2xvc2VGaWxlKGRlc3Rp
bmF0aW9uRmlsZUhhbmRsZSk7CisgICAgICAgIEZpbGVTeXN0ZW06OmRlbGV0ZUZpbGUoZGVzdGlu
YXRpb25QYXRoKTsKKyAgICAgICAgcmV0dXJuIG51bGxTdHJpbmcoKTsKKyAgICB9CisKKyAgICBG
aWxlU3lzdGVtOjpjbG9zZUZpbGUoZGVzdGluYXRpb25GaWxlSGFuZGxlKTsKKyAgICByZXR1cm4g
ZGVzdGluYXRpb25QYXRoOworfQorCitWZWN0b3I8U3RyaW5nPiBmaW5kSW1hZ2VzRm9yVHJhbnNj
b2RpbmcoY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhdGhzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYg
YWxsb3dlZE1JTUVUeXBlcykKK3sKKyAgICBWZWN0b3I8U3RyaW5nPiB0cmFuc2NvZGluZ1BhdGhz
OworICAgIHRyYW5zY29kaW5nUGF0aHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShwYXRocy5zaXpl
KCkpOworCisgICAgYm9vbCBuZWVkc1RyYW5zY29kaW5nID0gZmFsc2U7CisKKyAgICBmb3IgKGF1
dG8mIHBhdGggOiBwYXRocykgeworICAgICAgICAvLyBBcHBlbmQgYSBwYXRoIG9mIHRoZSBpbWFn
ZSB3aGljaCBuZWVkcyB0cmFuc2NvZGluZy4gT3RoZXJ3aXNlIGFwcGVuZCBhIG51bGwgc3RyaW5n
LgorICAgICAgICBpZiAoIWFsbG93ZWRNSU1FVHlwZXMuY29udGFpbnMoV2ViQ29yZTo6TUlNRVR5
cGVSZWdpc3RyeTo6bWltZVR5cGVGb3JQYXRoKHBhdGgpKSkgeworICAgICAgICAgICAgdHJhbnNj
b2RpbmdQYXRocy51bmNoZWNrZWRBcHBlbmQocGF0aCk7CisgICAgICAgICAgICBuZWVkc1RyYW5z
Y29kaW5nID0gdHJ1ZTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICB0cmFuc2NvZGluZ1Bh
dGhzLnVuY2hlY2tlZEFwcGVuZChudWxsU3RyaW5nKCkpOworICAgIH0KKworICAgIC8vIElmIG5v
bmUgb2YgdGhlIGZpbGVzIG5lZWRzIGltYWdlIHRyYW5zY29kaW5nLCByZXR1cm4gYW4gZW1wdHkg
VmVjdG9yLgorICAgIHJldHVybiBuZWVkc1RyYW5zY29kaW5nID8gdHJhbnNjb2RpbmdQYXRocyA6
IFZlY3RvcjxTdHJpbmc+KCk7Cit9CisKK1ZlY3RvcjxTdHJpbmc+IHRyYW5zY29kZUltYWdlcyhj
b25zdCBWZWN0b3I8U3RyaW5nPiYgcGF0aHMsIGNvbnN0IFN0cmluZyYgZGVzdGluYXRpb25VVEks
IGNvbnN0IFN0cmluZyYgZGVzdGluYXRpb25FeHRlbnNpb24pCit7CisgICAgQVNTRVJUKCFkZXN0
aW5hdGlvblVUSS5pc051bGwoKSk7CisgICAgQVNTRVJUKCFkZXN0aW5hdGlvbkV4dGVuc2lvbi5p
c051bGwoKSk7CisgICAgCisgICAgVmVjdG9yPFN0cmluZz4gdHJhbnNjb2RlZFBhdGhzOworICAg
IHRyYW5zY29kZWRQYXRocy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHBhdGhzLnNpemUoKSk7CisK
KyAgICBmb3IgKGF1dG8mIHBhdGggOiBwYXRocykgeworICAgICAgICAvLyBBcHBlbmQgdGhlIHRy
YW5zY29kZWQgcGF0aCBpZiB0aGUgaW1hZ2UgbmVlZHMgdHJhbnNjb2RpbmcuIE90aGVyd2lzZSBh
cHBlbmQgYSBudWxsIHN0cmluZy4KKyAgICAgICAgaWYgKCFwYXRoLmlzTnVsbCgpKQorICAgICAg
ICAgICAgdHJhbnNjb2RlZFBhdGhzLnVuY2hlY2tlZEFwcGVuZCh0cmFuc2NvZGVJbWFnZShwYXRo
LCBkZXN0aW5hdGlvblVUSSwgZGVzdGluYXRpb25FeHRlbnNpb24pKTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgdHJhbnNjb2RlZFBhdGhzLnVuY2hlY2tlZEFwcGVuZChudWxsU3RyaW5nKCkp
OworICAgIH0KKworICAgIHJldHVybiB0cmFuc2NvZGVkUGF0aHM7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNjUzMDYpCisrKyBTb3VyY2UvV2Vi
S2l0L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDIwLTA4LTA1
ICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAg
W21hY09TXSBEcmFnL2Ryb3AgYW4gaW1hZ2Ugb2YgYSB1bnN1cHBvcnRlZCBmb3JtYXQgdG8gYW4g
PGlucHV0IHR5cGU9ImZpbGUiPiBlbGVtZW50IHNob3VsZCBjb252ZXJ0IGl0IHRvIGEgc3VwcG9y
dGVkIGZvcm1hdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjEyNDgyCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS82MzczMTY3Mj4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFBsYXRmb3JtL0ltYWdlVXRp
bGl0aWVzLmg6IFJlbW92ZWQuCisgICAgICAgICogUGxhdGZvcm0vY2c6IFJlbW92ZWQuCisgICAg
ICAgICogU291cmNlc0NvY29hLnR4dDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5
LmNwcDoKKyAgICAgICAgKiBXZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKwogMjAy
MC0wOC0wNSAgUGVyIEFybmUgVm9sbGFuICA8cHZvbGxhbkBhcHBsZS5jb20+CiAKICAgICAgICAg
W0NvY29hXSBTYW5kYm94IGV4dGVuc2lvbiB0b2tlbiBub3QgY2xlYXJlZCBmcm9tIG1lbW9yeQpJ
bmRleDogU291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dAkocmV2aXNpb24gMjY1MDc2KQorKysgU291cmNlL1dl
YktpdC9Tb3VyY2VzQ29jb2EudHh0CSh3b3JraW5nIGNvcHkpCkBAIC02NSw4ICs2NSw2IEBAIEdQ
VVByb2Nlc3Mvd2VicnRjL0xpYldlYlJUQ0NvZGVjc1Byb3h5Lm0KIAogUGxhdGZvcm0vY2YvTW9k
dWxlQ0YuY3BwCiAKLVBsYXRmb3JtL2NnL0ltYWdlVXRpbGl0aWVzQ0cuY3BwCi0KIFBsYXRmb3Jt
L2NsYXNzaWZpZXIvY29jb2EvUmVzb3VyY2VMb2FkU3RhdGlzdGljc0NsYXNzaWZpZXJDb2NvYS5j
cHAKIFBsYXRmb3JtL2NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc0NsYXNzaWZpZXIu
Y3BwCiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSW1hZ2VVdGlsaXRpZXMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0ltYWdlVXRpbGl0aWVzLmgJKHJldmlz
aW9uIDI2NTA3NikKKysrIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSW1hZ2VVdGlsaXRpZXMuaAko
bm9uZXhpc3RlbnQpCkBAIC0xLDQyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UK
LQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLS8vIEdpdmVuIGEgbGlzdCBvZiBmaWxlcycgJ3BhdGhz
JyBhbmQgJ2FsbG93ZWRNSU1FVHlwZXMnLCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhIGxpc3QKLS8v
IG9mIHN0cmluZ3Mgd2hvc2Ugc2l6ZSBpcyB0aGUgc2FtZSBhcyB0aGUgc2l6ZSBvZiAncGF0aHMn
IGFuZCBpdHMgZW50cmllcyBhcmUgYWxsCi0vLyBudWxsIHN0cmluZ3MgZXhjZXB0IHRoZSBvbmVz
IHdob3NlIE1JTUUgdHlwZXMgYXJlIG5vdCBpbiAnYWxsb3dlZE1JTUVUeXBlcycuCi1WZWN0b3I8
U3RyaW5nPiBmaW5kSW1hZ2VzRm9yVHJhbnNjb2RpbmcoY29uc3QgVmVjdG9yPFN0cmluZz4mIHBh
dGhzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYWxsb3dlZE1JTUVUeXBlcyk7Ci0KLS8vIEdpdmVu
IGEgbGlzdCBvZiBpbWFnZXMnICdwYXRocycsIHRoaXMgZnVuY3Rpb24gdHJhbnNjb2RlcyB0aGVz
ZSBpbWFnZXMgdG8gYSBuZXcKLS8vIGZvcm1hdCB3aG9zZSBVVEkgaXMgZGVzdGluYXRpb25VVEku
IFRoZSByZXN1bHQgb2YgdGhlIHRyYW5zY29kaW5nIHdpbGwgYmUgd3JpdHRlbgotLy8gdG8gdGVt
cG9yYXJ5IGZpbGVzIHdob3NlIGV4dGVuc2lvbnMgYXJlICdkZXN0aW5hdGlvbkV4dGVuc2lvbicu
IEl0IHJldHVybnMgYSBsaXN0Ci0vLyBvZiBwYXRocyB0byB0aGUgcmVzdWx0IHRlbXBvcmFyeSBm
aWxlcy4gSWYgYW4gZW50cnkgaW4gJ3BhdGhzJyBpcyBudWxsIG9yIGFuIGVycm9yCi0vLyBoYXBw
ZW5zIHdoaWxlIHRyYW5zY29kaW5nLCBhIG51bGwgc3RyaW5nIHdpbGwgYmUgYWRkZWQgdG8gdGhl
IHJldHVybmVkIGxpc3QuCi1WZWN0b3I8U3RyaW5nPiB0cmFuc2NvZGVJbWFnZXMoY29uc3QgVmVj
dG9yPFN0cmluZz4mIHBhdGhzLCBjb25zdCBTdHJpbmcmIGRlc3RpbmF0aW9uVVRJLCBjb25zdCBT
dHJpbmcmIGRlc3RpbmF0aW9uRXh0ZW5zaW9uKTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CgpQ
cm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0ltYWdlVXRpbGl0aWVz
LmgKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fXwpEZWxldGVkOiBzdm46ZW9sLXN0eWxlCiMjIC0xICswLDAgIyMKLW5hdGl2
ZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBTb3VyY2UvV2ViS2l0L1Bs
YXRmb3JtL2NnL0ltYWdlVXRpbGl0aWVzQ0cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvUGxhdGZvcm0vY2cvSW1hZ2VVdGlsaXRpZXNDRy5jcHAJKHJldmlzaW9uIDI2NTA3NikKKysr
IFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vY2cvSW1hZ2VVdGlsaXRpZXNDRy5jcHAJKG5vbmV4aXN0
ZW50KQpAQCAtMSwxMjIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJJbWFnZVV0aWxpdGllcy5oIgotCi0jaW5jbHVkZSAiTG9nZ2luZy5oIgotI2lu
Y2x1ZGUgPEltYWdlSU8vSW1hZ2VJTy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvTUlNRVR5cGVSZWdp
c3RyeS5oPgotI2luY2x1ZGUgPHd0Zi9GaWxlU3lzdGVtLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQv
Q1N0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotc3RhdGljIFN0cmluZyB0cmFuc2Nv
ZGVJbWFnZShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0cmluZyYgZGVzdGluYXRpb25VVEks
IGNvbnN0IFN0cmluZyYgZGVzdGluYXRpb25FeHRlbnNpb24pCi17Ci0gICAgYXV0byBzb3VyY2VV
UkwgPSBhZG9wdENGKENGVVJMQ3JlYXRlV2l0aEZpbGVTeXN0ZW1QYXRoKGtDRkFsbG9jYXRvckRl
ZmF1bHQsIHBhdGguY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSwga0NGVVJMUE9TSVhQYXRoU3R5bGUs
IGZhbHNlKSk7Ci0gICAgYXV0byBzb3VyY2UgPSBhZG9wdENGKENHSW1hZ2VTb3VyY2VDcmVhdGVX
aXRoVVJMKHNvdXJjZVVSTC5nZXQoKSwgbnVsbHB0cikpOwotICAgIGlmICghc291cmNlKQotICAg
ICAgICByZXR1cm4gbnVsbFN0cmluZygpOwotCi0gICAgYXV0byBzb3VyY2VVVEkgPSBTdHJpbmco
Q0dJbWFnZVNvdXJjZUdldFR5cGUoc291cmNlLmdldCgpKSk7Ci0gICAgaWYgKHNvdXJjZVVUSSA9
PSBkZXN0aW5hdGlvblVUSSkKLSAgICAgICAgcmV0dXJuIG51bGxTdHJpbmcoKTsKLQotICAgIC8v
IEl0IGlzIGltcG9ydGFudCB0byBhZGQgdGhlIGFwcHJvcHJpYXRlIGZpbGUgZXh0ZW5zaW9uIHRv
IHRoZSB0ZW1wb3JhcnkgZmlsZSBwYXRoLgotICAgIC8vIFRoZSBGaWxlIG9iamVjdCBkZXBlbmRz
IHNvbGVseSBvbiB0aGUgZXh0ZW5zaW9uIHRvIGtub3cgdGhlIE1JTUUgdHlwZSBvZiB0aGUgZmls
ZS4KLSAgICBhdXRvIHN1ZmZpeCA9IG1ha2VTdHJpbmcoJy4nLCBkZXN0aW5hdGlvbkV4dGVuc2lv
bik7Ci0KLSAgICBGaWxlU3lzdGVtOjpQbGF0Zm9ybUZpbGVIYW5kbGUgZGVzdGluYXRpb25GaWxl
SGFuZGxlOwotICAgIFN0cmluZyBkZXN0aW5hdGlvblBhdGggPSBGaWxlU3lzdGVtOjpvcGVuVGVt
cG9yYXJ5RmlsZSgidGVtcEltYWdlIl9zLCBkZXN0aW5hdGlvbkZpbGVIYW5kbGUsIHN1ZmZpeCk7
Ci0gICAgaWYgKGRlc3RpbmF0aW9uRmlsZUhhbmRsZSA9PSBGaWxlU3lzdGVtOjppbnZhbGlkUGxh
dGZvcm1GaWxlSGFuZGxlKSB7Ci0gICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKEltYWdlcywgInRy
YW5zY29kZUltYWdlOiBEZXN0aW5hdGlvbiBpbWFnZSBjb3VsZCBub3QgYmUgY3JlYXRlZDogJXMg
JXNcbiIsIHBhdGgudXRmOCgpLmRhdGEoKSwgZGVzdGluYXRpb25VVEkudXRmOCgpLmRhdGEoKSk7
Ci0gICAgICAgIHJldHVybiBudWxsU3RyaW5nKCk7Ci0gICAgfQotCi0gICAgQ0dEYXRhQ29uc3Vt
ZXJDYWxsYmFja3MgY2FsbGJhY2tzID0gewotICAgICAgICBbXSh2b2lkKiBpbmZvLCBjb25zdCB2
b2lkKiBidWZmZXIsIHNpemVfdCBjb3VudCkgLT4gc2l6ZV90IHsKLSAgICAgICAgICAgIGF1dG8g
aGFuZGxlID0gKnN0YXRpY19jYXN0PEZpbGVTeXN0ZW06OlBsYXRmb3JtRmlsZUhhbmRsZSo+KGlu
Zm8pOwotICAgICAgICAgICAgcmV0dXJuIEZpbGVTeXN0ZW06OndyaXRlVG9GaWxlKGhhbmRsZSwg
c3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KGJ1ZmZlciksIGNvdW50KTsKLSAgICAgICAgfSwKLSAg
ICAgICAgbnVsbHB0cgotICAgIH07Ci0KLSAgICBhdXRvIGNvbnN1bWVyID0gYWRvcHRDRihDR0Rh
dGFDb25zdW1lckNyZWF0ZSgmZGVzdGluYXRpb25GaWxlSGFuZGxlLCAmY2FsbGJhY2tzKSk7Ci0g
ICAgYXV0byBkZXN0aW5hdGlvbiA9IGFkb3B0Q0YoQ0dJbWFnZURlc3RpbmF0aW9uQ3JlYXRlV2l0
aERhdGFDb25zdW1lcihjb25zdW1lci5nZXQoKSwgZGVzdGluYXRpb25VVEkuY3JlYXRlQ0ZTdHJp
bmcoKS5nZXQoKSwgMSwgbnVsbHB0cikpOwotCi0gICAgQ0dJbWFnZURlc3RpbmF0aW9uQWRkSW1h
Z2VGcm9tU291cmNlKGRlc3RpbmF0aW9uLmdldCgpLCBzb3VyY2UuZ2V0KCksIDAsIG51bGxwdHIp
OwotCi0gICAgaWYgKCFDR0ltYWdlRGVzdGluYXRpb25GaW5hbGl6ZShkZXN0aW5hdGlvbi5nZXQo
KSkpIHsKLSAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoSW1hZ2VzLCAidHJhbnNjb2RlSW1hZ2U6
IEltYWdlIHRyYW5zY29kaW5nIGZhaWxzOiAlcyAlc1xuIiwgcGF0aC51dGY4KCkuZGF0YSgpLCBk
ZXN0aW5hdGlvblVUSS51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgRmlsZVN5c3RlbTo6Y2xvc2VG
aWxlKGRlc3RpbmF0aW9uRmlsZUhhbmRsZSk7Ci0gICAgICAgIEZpbGVTeXN0ZW06OmRlbGV0ZUZp
bGUoZGVzdGluYXRpb25QYXRoKTsKLSAgICAgICAgcmV0dXJuIG51bGxTdHJpbmcoKTsKLSAgICB9
Ci0KLSAgICBGaWxlU3lzdGVtOjpjbG9zZUZpbGUoZGVzdGluYXRpb25GaWxlSGFuZGxlKTsKLSAg
ICByZXR1cm4gZGVzdGluYXRpb25QYXRoOwotfQotCi1WZWN0b3I8U3RyaW5nPiBmaW5kSW1hZ2Vz
Rm9yVHJhbnNjb2RpbmcoY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhdGhzLCBjb25zdCBWZWN0b3I8
U3RyaW5nPiYgYWxsb3dlZE1JTUVUeXBlcykKLXsKLSAgICBWZWN0b3I8U3RyaW5nPiB0cmFuc2Nv
ZGluZ1BhdGhzOwotICAgIHRyYW5zY29kaW5nUGF0aHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShw
YXRocy5zaXplKCkpOwotCi0gICAgYm9vbCBuZWVkc1RyYW5zY29kaW5nID0gZmFsc2U7Ci0KLSAg
ICBmb3IgKGF1dG8mIHBhdGggOiBwYXRocykgewotICAgICAgICAvLyBBcHBlbmQgYSBwYXRoIG9m
IHRoZSBpbWFnZSB3aGljaCBuZWVkcyB0cmFuc2NvZGluZy4gT3RoZXJ3aXNlIGFwcGVuZCBhIG51
bGwgc3RyaW5nLgotICAgICAgICBpZiAoIWFsbG93ZWRNSU1FVHlwZXMuY29udGFpbnMoV2ViQ29y
ZTo6TUlNRVR5cGVSZWdpc3RyeTo6bWltZVR5cGVGb3JQYXRoKHBhdGgpKSkgewotICAgICAgICAg
ICAgdHJhbnNjb2RpbmdQYXRocy51bmNoZWNrZWRBcHBlbmQocGF0aCk7Ci0gICAgICAgICAgICBu
ZWVkc1RyYW5zY29kaW5nID0gdHJ1ZTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICB0cmFu
c2NvZGluZ1BhdGhzLnVuY2hlY2tlZEFwcGVuZChudWxsU3RyaW5nKCkpOwotICAgIH0KLQotICAg
IC8vIElmIG5vbmUgb2YgdGhlIGZpbGVzIG5lZWRzIGltYWdlIHRyYW5zY29kaW5nLCByZXR1cm4g
YW4gZW1wdHkgVmVjdG9yLgotICAgIHJldHVybiBuZWVkc1RyYW5zY29kaW5nID8gdHJhbnNjb2Rp
bmdQYXRocyA6IFZlY3RvcjxTdHJpbmc+KCk7Ci19Ci0KLVZlY3RvcjxTdHJpbmc+IHRyYW5zY29k
ZUltYWdlcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGF0aHMsIGNvbnN0IFN0cmluZyYgZGVzdGlu
YXRpb25VVEksIGNvbnN0IFN0cmluZyYgZGVzdGluYXRpb25FeHRlbnNpb24pCi17Ci0gICAgQVNT
RVJUKCFkZXN0aW5hdGlvblVUSS5pc051bGwoKSk7Ci0gICAgQVNTRVJUKCFkZXN0aW5hdGlvbkV4
dGVuc2lvbi5pc051bGwoKSk7Ci0gICAgCi0gICAgVmVjdG9yPFN0cmluZz4gdHJhbnNjb2RlZFBh
dGhzOwotICAgIHRyYW5zY29kZWRQYXRocy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHBhdGhzLnNp
emUoKSk7Ci0KLSAgICBmb3IgKGF1dG8mIHBhdGggOiBwYXRocykgewotICAgICAgICAvLyBBcHBl
bmQgdGhlIHRyYW5zY29kZWQgcGF0aCBpZiB0aGUgaW1hZ2UgbmVlZHMgdHJhbnNjb2RpbmcuIE90
aGVyd2lzZSBhcHBlbmQgYSBudWxsIHN0cmluZy4KLSAgICAgICAgaWYgKCFwYXRoLmlzTnVsbCgp
KQotICAgICAgICAgICAgdHJhbnNjb2RlZFBhdGhzLnVuY2hlY2tlZEFwcGVuZCh0cmFuc2NvZGVJ
bWFnZShwYXRoLCBkZXN0aW5hdGlvblVUSSwgZGVzdGluYXRpb25FeHRlbnNpb24pKTsKLSAgICAg
ICAgZWxzZQotICAgICAgICAgICAgdHJhbnNjb2RlZFBhdGhzLnVuY2hlY2tlZEFwcGVuZChudWxs
U3RyaW5nKCkpOwotICAgIH0KLQotICAgIHJldHVybiB0cmFuc2NvZGVkUGF0aHM7Ci19Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFn
ZVByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdl
UHJveHkuY3BwCShyZXZpc2lvbiAyNjUwNzYpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJQYWdlUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTcsNyArMjE3LDcgQEAKICNlbmRp
ZgogCiAjaWYgUExBVEZPUk0oTUFDKQotI2luY2x1ZGUgIkltYWdlVXRpbGl0aWVzLmgiCisjaW5j
bHVkZSA8V2ViQ29yZS9JbWFnZVV0aWxpdGllcy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvVVRJVXRp
bGl0aWVzLmg+CiAjZW5kaWYKIApJbmRleDogU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYktpdC54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyNjUwNzYpCisrKyBTb3VyY2UvV2ViS2l0
L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yOTAs
NyArMjkwLDYgQEAKIAkJMUE5RkJBOEQxM0ZGMDRFNjAwREVFRDY3IC8qIFBsdWdpbkNvbXBsZXhU
ZXh0SW5wdXRTdGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMUE5RkJBOEMxM0ZGMDRFNjAwREVFRDY3IC8qIFBsdWdpbkNvbXBsZXhUZXh0SW5wdXRT
dGF0ZS5oICovOyB9OwogCQkxQUExMzIxMjE5MUQ1OTI0MDA5QzE0ODkgLyogV0tOYXZpZ2F0aW9u
UmVzcG9uc2VQcml2YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAxQUExMzIxMTE5MUQ1OTI0MDA5QzE0ODkgLyogV0tOYXZpZ2F0aW9uUmVzcG9uc2VQ
cml2YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMUFBMjBENTExOEFENTBFMDAwNUQxRUQ0IC8qIFdLTmF2aWdhdGlvbkRlbGVnYXRlUHJpdmF0
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFBMjBE
NTAxOEFENTBFMDAwNUQxRUQ0IC8qIFdLTmF2aWdhdGlvbkRlbGVnYXRlUHJpdmF0ZS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTFBQTJFNTFEMTJF
NEMwNUUwMEJDNDk2NiAvKiBJbWFnZVV0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFBMkU1MUIxMkU0QzA1RTAwQkM0OTY2IC8qIEltYWdl
VXRpbGl0aWVzLmggKi87IH07CiAJCTFBQTJFNTY3MThENzc1MDgwMDM4MTRCRCAvKiBXS1dlYlBy
b2Nlc3NCdW5kbGVQYXJhbWV0ZXJzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAxQUEyRTU2NTE4RDc3NTA4MDAzODE0QkQgLyogV0tXZWJQcm9jZXNzQnVu
ZGxlUGFyYW1ldGVycy5oICovOyB9OwogCQkxQUEzRDc1QzE2NTFCNDRGMDA4NzEzRDAgLyogUmVt
b3RlTGF5ZXJUcmVlSG9zdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMUFBM0Q3NUExNjUxQjQ0RjAwODcxM0QwIC8qIFJlbW90ZUxheWVyVHJlZUhvc3Qu
aCAqLzsgfTsKIAkJMUFBNDE3Q0IxMkMwMENDQTAwMkJFNjdCIC8qIFRleHRDaGVja2VyLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQUE0MTdDOTEyQzAw
Q0NBMDAyQkU2N0IgLyogVGV4dENoZWNrZXIuaCAqLzsgfTsKQEAgLTI1MTQsOCArMjUxMyw2IEBA
CiAJCTFBQTFDQzVDMTAwRkExQTEwMDc4REVCQyAvKiBRdWFydHpDb3JlLmZyYW1ld29yayAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHdyYXBwZXIuZnJh
bWV3b3JrOyBuYW1lID0gUXVhcnR6Q29yZS5mcmFtZXdvcms7IHBhdGggPSAvU3lzdGVtL0xpYnJh
cnkvRnJhbWV3b3Jrcy9RdWFydHpDb3JlLmZyYW1ld29yazsgc291cmNlVHJlZSA9ICI8YWJzb2x1
dGU+IjsgfTsKIAkJMUFBMUNEMDYxMDBGQTFCQTAwNzhERUJDIC8qIENhcmJvbi5mcmFtZXdvcmsg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB3cmFwcGVy
LmZyYW1ld29yazsgbmFtZSA9IENhcmJvbi5mcmFtZXdvcms7IHBhdGggPSAvU3lzdGVtL0xpYnJh
cnkvRnJhbWV3b3Jrcy9DYXJib24uZnJhbWV3b3JrOyBzb3VyY2VUcmVlID0gIjxhYnNvbHV0ZT4i
OyB9OwogCQkxQUEyMEQ1MDE4QUQ1MEUwMDA1RDFFRDQgLyogV0tOYXZpZ2F0aW9uRGVsZWdhdGVQ
cml2YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLTmF2aWdhdGlvbkRl
bGVnYXRlUHJpdmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxQUEyRTUxQjEy
RTRDMDVFMDBCQzQ5NjYgLyogSW1hZ2VVdGlsaXRpZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSW1hZ2VVdGlsaXRpZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJMUFBMkU1MUMxMkU0QzA1RTAwQkM0OTY2IC8qIEltYWdlVXRpbGl0aWVzQ0cuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2VVdGlsaXRpZXNDRy5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBQTJFNTY0MThENzc1MDgwMDM4MTRCRCAvKiBX
S1dlYlByb2Nlc3NCdW5kbGVQYXJhbWV0ZXJzLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
b2JqY3BwOyBwYXRoID0gV0tXZWJQcm9jZXNzQnVuZGxlUGFyYW1ldGVycy5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUFBMkU1NjUxOEQ3NzUwODAwMzgxNEJEIC8qIFdLV2ViUHJv
Y2Vzc0J1bmRsZVBhcmFtZXRlcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
V0tXZWJQcm9jZXNzQnVuZGxlUGFyYW1ldGVycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkxQUEzRDc1OTE2NTFCNDRGMDA4NzEzRDAgLyogUmVtb3RlTGF5ZXJUcmVlSG9zdC5tbSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFJlbW90ZUxheWVyVHJlZUhv
c3QubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01OTU0LDE0ICs1OTUxLDYgQEAK
IAkJCXBhdGggPSBtYWM7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9OwotCQkxQUEy
RTUxQTEyRTRDMDU2MDBCQzQ5NjYgLyogY2cgKi8gPSB7Ci0JCQlpc2EgPSBQQlhHcm91cDsKLQkJ
CWNoaWxkcmVuID0gKAotCQkJCTFBQTJFNTFDMTJFNEMwNUUwMEJDNDk2NiAvKiBJbWFnZVV0aWxp
dGllc0NHLmNwcCAqLywKLQkJCSk7Ci0JCQlwYXRoID0gY2c7Ci0JCQlzb3VyY2VUcmVlID0gIjxn
cm91cD4iOwotCQl9OwogCQkxQUFDNERERTE2QjFDQkY2MDA5NDI1RTMgLyogV2ViU3RvcmFnZSAq
LyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCkBAIC05NTgyLDcgKzk1
NzEsNiBAQAogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKIAkJCQkzNzA5NTA0
MTE4QTg4QkE0MDA4N0FFNUQgLyogY2YgKi8sCi0JCQkJMUFBMkU1MUExMkU0QzA1NjAwQkM0OTY2
IC8qIGNnICovLAogCQkJCTZCRTk2OUMyMUU1NEQ0NjcwMDhCNzQ4MyAvKiBjbGFzc2lmaWVyICov
LAogCQkJCTQ0NTBBRUJFMURDM0ZBQUMwMDk5NDNGMiAvKiBjb2NvYSAqLywKIAkJCQkzNzA5NTA0
MjE4QTg4Q0RFMDA4N0FFNUQgLyogZm91bmRhdGlvbiAqLywKQEAgLTk1OTMsNyArOTU4MSw2IEBA
CiAJCQkJNTFCMTVBN0QxMzg0MzlCMjAwMzIxQUQ4IC8qIHVuaXggKi8sCiAJCQkJRUNBNjgwRDMx
RTY5MDRCNTAwNzMxRDIwIC8qIEV4dHJhUHJpdmF0ZVN5bWJvbHNGb3JUQVBJLmggKi8sCiAJCQkJ
RUNCRkMxREIxRTZBNEQ2NjAwMDMwMEM3IC8qIEV4dHJhUHVibGljU3ltYm9sc0ZvclRBUEkuaCAq
LywKLQkJCQkxQUEyRTUxQjEyRTRDMDVFMDBCQzQ5NjYgLyogSW1hZ2VVdGlsaXRpZXMuaCAqLywK
IAkJCQk1MUE3RjJGNDEyNUJGOEQ0MDA4QUVCMUQgLyogTG9nZ2luZy5jcHAgKi8sCiAJCQkJNTFB
N0YyRjIxMjVCRjgyMDAwOEFFQjFEIC8qIExvZ2dpbmcuaCAqLywKIAkJCQkwRkRDRDdGNjFENDdF
OTJBMDA5RjA4QkMgLyogTG9nSW5pdGlhbGl6YXRpb24uaCAqLywKQEAgLTEwODU1LDcgKzEwODQy
LDYgQEAKIAkJCQk1MUMwQzk3NDFEREQ3NjAwMDAzMkNBRDMgLyogSWNvbkxvYWRpbmdEZWxlZ2F0
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTFFMzUxQ0IxODBGMkNDQzAwRTUzQkU5IC8qIElEQlV0
aWxpdGllcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNDRjZCMjUxMkM5M0U3QTAwOEY5QzM1IC8q
IEltYWdlT3B0aW9ucy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMUFBMkU1MUQxMkU0QzA1RTAwQkM0
OTY2IC8qIEltYWdlVXRpbGl0aWVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTFFQzY5RTE4NzIw
OTIxMDBCOTUxRjAgLyogSW1wb3J0YW5jZUFzc2VydGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QkMyMDRFRTMxMUM4M0U5ODAwOEYzMzc1IC8qIEluamVjdGVkQnVuZGxlLmggaW4gSGVhZGVycyAq
LywKIAkJCQlCQ0VFN0RDNTEyOEI2NDVEMDA5ODI3REEgLyogSW5qZWN0ZWRCdW5kbGVDbGllbnQu
aCBpbiBIZWFkZXJzICovLAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>406047</attachid>
            <date>2020-08-05 15:05:00 -0700</date>
            <delta_ts>2020-08-05 15:32:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-212482-20200805150500.patch</filename>
            <type>text/plain</type>
            <size>34940</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2NTA3NikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI2IEBACisyMDIwLTA4LTA1ICBTYWlkIEFi
b3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgW21hY09TXSBE
cmFnL2Ryb3AgYW4gaW1hZ2Ugb2YgYSB1bnN1cHBvcnRlZCBmb3JtYXQgdG8gYW4gZmlsZSBpbnB1
dCBlbGVtZW50IHNob3VsZCBjb252ZXJ0IGl0IHRvIGEgc3VwcG9ydGVkIGZvcm1hdAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEyNDgyCisgICAgICAg
IDxyZGFyOi8vcHJvYmxlbS82MzczMTY3Mj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIFNvdXJjZXNDb2NvYS50eHQ6CisgICAgICAgICogV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGh0bWwvRmlsZUlucHV0VHlw
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGaWxlSW5wdXRUeXBlOjpoYW5kbGVET01BY3RpdmF0
ZUV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVJbnB1dFR5cGU6OmZpbGVDaG9vc2VyU2V0
dGluZ3MgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsZUlucHV0VHlwZTo6YXBwbHlGaWxl
Q2hvb3NlclNldHRpbmdzKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVJbnB1dFR5cGU6OnRyYW5z
Y29kZURyb3BwZWRJbWFnZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsZUlucHV0VHlw
ZTo6cmVjZWl2ZURyb3BwZWRGaWxlcyk6CisgICAgICAgICogaHRtbC9GaWxlSW5wdXRUeXBlLmg6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VVdGlsaXRpZXMuaDogQWRkZWQuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VVdGlsaXRpZXNDRy5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6dHJhbnNjb2RlSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
ZmluZEltYWdlc0ZvclRyYW5zY29kaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OnRyYW5zY29kZUlt
YWdlcyk6CisKIDIwMjAtMDctMjkgIEpvb25naHVuIFBhcmsgIDxqaDcxOC5wYXJrQHNhbXN1bmcu
Y29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQuIFJlbW92ZSB0aGUgYnVpbGQgd2FybmluZyBiZWxv
dyBzaW5jZSByMjY1MDYyLgpJbmRleDogU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0CShyZXZpc2lvbiAy
NjUwNzYpCisrKyBTb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0CSh3b3JraW5nIGNvcHkp
CkBAIC0zMjYsNiArMzI2LDcgQEAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1
cmZhYwogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5jcHAKIHBs
YXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlRGVjb2RlckNHLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvSW1hZ2VTb3VyY2VDR01hYy5tbQorcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VVdGlsaXRp
ZXNDRy5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ludFBvaW50Q0cuY3BwCiBwbGF0Zm9ybS9n
cmFwaGljcy9jZy9JbnRSZWN0Q0cuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbnRTaXplQ0cu
Y3BwCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCShyZXZpc2lvbiAyNjUwNzYpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTE3NTUsNiArMTc1NSw3
IEBACiAJCTU1QUQwOTQwMjQwODk2NDAwMERFNEQyRiAvKiBEaXNwbGF5TGlzdERyYXdpbmdDb250
ZXh0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkVB
MDlGOTIzRkNDQzZBMDA4NTA0QTUgLyogRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTU1QUQwOTQxMjQw
ODk2NEEwMERFNEQyRiAvKiBDb25jcmV0ZUltYWdlQnVmZmVyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkJBQzNBNzIzRTE3MzI4MDA4RDc0MUMgLyog
Q29uY3JldGVJbWFnZUJ1ZmZlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTU1QUYxNEU2MUVBQUM1OUIwMDI2RUVBQSAvKiBVVElSZWdpc3RyeS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTVBRjE0RTQx
RUFBQzU5QjAwMjZFRUFBIC8qIFVUSVJlZ2lzdHJ5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNTVCQkQ0MjkyNERCNTYwNDAwQkI2RTBDIC8qIElt
YWdlVXRpbGl0aWVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1NUJCRDQyODI0REI1M0EyMDBCQjZFMEMgLyogSW1hZ2VVdGlsaXRpZXMuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1NURDQzUyODIyNDA3
QjIwMDBDMjZFMzIgLyogU1ZHUHJpbWl0aXZlTGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTVEQ0M1MjUyMjQwNzQ5RTAwQzI2RTMyIC8qIFNWR1By
aW1pdGl2ZUxpc3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQk1NURDQzUyOTIyNDA3QjJBMDBDMjZFMzIgLyogU1ZHTGlzdC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTVEQ0M1MjMyMjQwNzNGRTAwQzI2
RTMyIC8qIFNWR0xpc3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQk1NUVDOTU5OTIwNkFBN0EwMDA3REQwQTkgLyogUGFpbnRGcmVxdWVuY3lUcmFj
a2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NUVD
OTU5NzIwNjlDOTJEMDA3REQwQTkgLyogUGFpbnRGcmVxdWVuY3lUcmFja2VyLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTg4MDQsNiArODgwNSw4
IEBACiAJCTU1QTMzNkY4MUQ4MjFFM0MwMDIyQzRDNyAvKiBJbWFnZUJhY2tpbmdTdG9yZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZUJhY2tpbmdTdG9yZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NUFGMTRFMzFFQUFDNTlCMDAyNkVFQUEgLyogVVRJ
UmVnaXN0cnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVVRJUmVnaXN0cnkuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk1NUFGMTRFNDFFQUFDNTlCMDAyNkVFQUEgLyogVVRJUmVn
aXN0cnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVVRJUmVnaXN0cnkuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNTVCQkQ0MjYyNERCNTM0MzAwQkI2RTBDIC8qIEltYWdlVXRpbGl0aWVzQ0cu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2VVdGlsaXRpZXNDRy5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTU1QkJENDI4MjREQjUzQTIwMEJCNkUwQyAvKiBJbWFnZVV0aWxp
dGllcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZVV0aWxpdGllcy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk1NUJFMDI1NzIyM0IyOUMwMDAzMkYwOEEgLyogU1ZHUHJvcGVydHlSZWdp
c3RyeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdQcm9wZXJ0eVJlZ2lzdHJ5Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTU1QkUwMjU5MjIzQjI5QzEwMDMyRjA4QSAvKiBTVkdBbmltYXRp
b25BZGRpdGl2ZVZhbHVlRnVuY3Rpb25JbXBsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0FuaW1hdGlv
bkFkZGl0aXZlVmFsdWVGdW5jdGlvbkltcGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNTVCRTAyNUEyMjNCMjlDMjAwMzJGMDhBIC8qIFNWR1BvaW50ZXJNZW1iZXJBY2Nlc3Nvci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBTVkdQb2ludGVyTWVtYmVyQWNjZXNzb3IuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTI1NTI4LDYgKzI1NTMxLDcgQEAKIAkJCQk1NTVCODdFQjFDQUFG
MEFCMDAzNDk0MjUgLyogSW1hZ2VEZWNvZGVyQ0cuaCAqLywKIAkJCQk0QjM0ODA5MjBFRUY1MEQ0
MDBBQzFCNDEgLyogSW1hZ2VTb3VyY2VDRy5oICovLAogCQkJCTRCMzQ4MDkxMEVFRjUwRDQwMEFD
MUI0MSAvKiBJbWFnZVNvdXJjZUNHTWFjLm1tICovLAorCQkJCTU1QkJENDI2MjREQjUzNDMwMEJC
NkUwQyAvKiBJbWFnZVV0aWxpdGllc0NHLmNwcCAqLywKIAkJCQlCMjc1MzUzMjBCMDUzODE0MDAy
Q0U2NEYgLyogSW50UG9pbnRDRy5jcHAgKi8sCiAJCQkJQjI3NTM1MzMwQjA1MzgxNDAwMkNFNjRG
IC8qIEludFJlY3RDRy5jcHAgKi8sCiAJCQkJQjI3NTM1MzQwQjA1MzgxNDAwMkNFNjRGIC8qIElu
dFNpemVDRy5jcHAgKi8sCkBAIC0yNTczMSw2ICsyNTczNSw3IEBACiAJCQkJNTU0Njc1NzcxRkQx
RkMxQTAwM0IxMEIwIC8qIEltYWdlU291cmNlLmNwcCAqLywKIAkJCQk1NTQ2NzU3ODFGRDFGQzFB
MDAzQjEwQjAgLyogSW1hZ2VTb3VyY2UuaCAqLywKIAkJCQk1NTUwQ0I0MTFFOTU1RTNDMDAxMTFB
QTAgLyogSW1hZ2VUeXBlcy5oICovLAorCQkJCTU1QkJENDI4MjREQjUzQTIwMEJCNkUwQyAvKiBJ
bWFnZVV0aWxpdGllcy5oICovLAogCQkJCTA3ODYzM0Y4MjQwNzE1RDIwMDg3QUUyMSAvKiBJbmJh
bmRHZW5lcmljQ3VlLmNwcCAqLywKIAkJCQkwNzg2MzNERTIzRkVERjIyMDA4N0FFMjEgLyogSW5i
YW5kR2VuZXJpY0N1ZS5oICovLAogCQkJCTA3MDZBMEQ3MjQwODMwQTYwMEU5MzgxOCAvKiBJbmJh
bmRHZW5lcmljQ3VlSWRlbnRpZmllci5oICovLApAQCAtMzEyNzQsNiArMzEyNzksNyBAQAogCQkJ
CTRCMzQ4MDk0MEVFRjUwRDQwMEFDMUI0MSAvKiBJbWFnZVNvdXJjZUNHLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwNzhFRDE5MzIxNkQwNzk1MDA3NzVCMzMgLyogSW1hZ2VUcmFuc2ZlclNlc3Npb25W
VC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTU1MENCNDIxRTk1NUUzQzAwMTExQUEwIC8qIEltYWdl
VHlwZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTU1QkJENDI5MjREQjU2MDQwMEJCNkUwQyAvKiBJ
bWFnZVV0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMjZGNzU2QjMxQjNCNjZGNzAwMDVE
RDc5IC8qIEltbXV0YWJsZU5GQS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMjZGNzU2QjUxQjNCNjhG
MjAwMDVERDc5IC8qIEltbXV0YWJsZU5GQU5vZGVCdWlsZGVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkzMTZGRTExODBFNkUxREE3MDBCRjYwODggLyogSW1wbGljaXRBbmltYXRpb24uaCBpbiBIZWFk
ZXJzICovLApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9GaWxlSW5wdXRUeXBlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0ZpbGVJbnB1dFR5cGUuY3BwCShyZXZpc2lv
biAyNjUwNzYpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0ZpbGVJbnB1dFR5cGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSAiSWNvbi5oIgogI2luY2x1ZGUg
IklucHV0VHlwZU5hbWVzLmgiCiAjaW5jbHVkZSAiTG9jYWxpemVkU3RyaW5ncy5oIgorI2luY2x1
ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKICNpbmNsdWRlICJSZW5kZXJGaWxlVXBsb2FkQ29udHJv
bC5oIgogI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKICNpbmNsdWRlICJTZXR0
aW5ncy5oIgpAQCAtNDcsNiArNDgsMTEgQEAKICNpbmNsdWRlIDx3dGYvVHlwZUNhc3RzLmg+CiAj
aW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCisjaWYgUExBVEZPUk0oTUFDKQor
I2luY2x1ZGUgIkltYWdlVXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiVVRJVXRpbGl0aWVzLmgiCisj
ZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgVXBsb2FkQnV0dG9uRWxlbWVudDsK
IH0KQEAgLTIwNCwxNiArMjEwLDcgQEAgdm9pZCBGaWxlSW5wdXRUeXBlOjpoYW5kbGVET01BY3Rp
dmF0ZUV2ZQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoYXV0byogY2hyb21lID0gdGhpcy0+
Y2hyb21lKCkpIHsKLSAgICAgICAgRmlsZUNob29zZXJTZXR0aW5ncyBzZXR0aW5nczsKLSAgICAg
ICAgc2V0dGluZ3MuYWxsb3dzRGlyZWN0b3JpZXMgPSBhbGxvd3NEaXJlY3RvcmllcygpOwotICAg
ICAgICBzZXR0aW5ncy5hbGxvd3NNdWx0aXBsZUZpbGVzID0gaW5wdXQuaGFzQXR0cmlidXRlV2l0
aG91dFN5bmNocm9uaXphdGlvbihtdWx0aXBsZUF0dHIpOwotICAgICAgICBzZXR0aW5ncy5hY2Nl
cHRNSU1FVHlwZXMgPSBpbnB1dC5hY2NlcHRNSU1FVHlwZXMoKTsKLSAgICAgICAgc2V0dGluZ3Mu
YWNjZXB0RmlsZUV4dGVuc2lvbnMgPSBpbnB1dC5hY2NlcHRGaWxlRXh0ZW5zaW9ucygpOwotICAg
ICAgICBzZXR0aW5ncy5zZWxlY3RlZEZpbGVzID0gbV9maWxlTGlzdC0+cGF0aHMoKTsKLSNpZiBF
TkFCTEUoTUVESUFfQ0FQVFVSRSkKLSAgICAgICAgc2V0dGluZ3MubWVkaWFDYXB0dXJlVHlwZSA9
IGlucHV0Lm1lZGlhQ2FwdHVyZVR5cGUoKTsKLSNlbmRpZgotICAgICAgICBhcHBseUZpbGVDaG9v
c2VyU2V0dGluZ3Moc2V0dGluZ3MpOworICAgICAgICBhcHBseUZpbGVDaG9vc2VyU2V0dGluZ3Mo
KTsKICAgICAgICAgY2hyb21lLT5ydW5PcGVuUGFuZWwoKmlucHV0LmRvY3VtZW50KCkuZnJhbWUo
KSwgKm1fZmlsZUNob29zZXIpOwogICAgIH0KIApAQCAtMzMyLDEyICszMjksMjkgQEAgdm9pZCBG
aWxlSW5wdXRUeXBlOjpyZXF1ZXN0SWNvbihjb25zdCBWZQogICAgIGNocm9tZS0+bG9hZEljb25G
b3JGaWxlcyhwYXRocywgKm1fZmlsZUljb25Mb2FkZXIpOwogfQogCi12b2lkIEZpbGVJbnB1dFR5
cGU6OmFwcGx5RmlsZUNob29zZXJTZXR0aW5ncyhjb25zdCBGaWxlQ2hvb3NlclNldHRpbmdzJiBz
ZXR0aW5ncykKK0ZpbGVDaG9vc2VyU2V0dGluZ3MgRmlsZUlucHV0VHlwZTo6ZmlsZUNob29zZXJT
ZXR0aW5ncygpIGNvbnN0Cit7CisgICAgQVNTRVJUKGVsZW1lbnQoKSk7CisgICAgYXV0byYgaW5w
dXQgPSAqZWxlbWVudCgpOworCisgICAgRmlsZUNob29zZXJTZXR0aW5ncyBzZXR0aW5nczsKKyAg
ICBzZXR0aW5ncy5hbGxvd3NEaXJlY3RvcmllcyA9IGFsbG93c0RpcmVjdG9yaWVzKCk7CisgICAg
c2V0dGluZ3MuYWxsb3dzTXVsdGlwbGVGaWxlcyA9IGlucHV0Lmhhc0F0dHJpYnV0ZVdpdGhvdXRT
eW5jaHJvbml6YXRpb24obXVsdGlwbGVBdHRyKTsKKyAgICBzZXR0aW5ncy5hY2NlcHRNSU1FVHlw
ZXMgPSBpbnB1dC5hY2NlcHRNSU1FVHlwZXMoKTsKKyAgICBzZXR0aW5ncy5hY2NlcHRGaWxlRXh0
ZW5zaW9ucyA9IGlucHV0LmFjY2VwdEZpbGVFeHRlbnNpb25zKCk7CisgICAgc2V0dGluZ3Muc2Vs
ZWN0ZWRGaWxlcyA9IG1fZmlsZUxpc3QtPnBhdGhzKCk7CisjaWYgRU5BQkxFKE1FRElBX0NBUFRV
UkUpCisgICAgc2V0dGluZ3MubWVkaWFDYXB0dXJlVHlwZSA9IGlucHV0Lm1lZGlhQ2FwdHVyZVR5
cGUoKTsKKyNlbmRpZgorICAgIHJldHVybiBzZXR0aW5nczsKK30KKwordm9pZCBGaWxlSW5wdXRU
eXBlOjphcHBseUZpbGVDaG9vc2VyU2V0dGluZ3MoKQogewogICAgIGlmIChtX2ZpbGVDaG9vc2Vy
KQogICAgICAgICBtX2ZpbGVDaG9vc2VyLT5pbnZhbGlkYXRlKCk7CiAKLSAgICBtX2ZpbGVDaG9v
c2VyID0gRmlsZUNob29zZXI6OmNyZWF0ZSh0aGlzLCBzZXR0aW5ncyk7CisgICAgbV9maWxlQ2hv
b3NlciA9IEZpbGVDaG9vc2VyOjpjcmVhdGUodGhpcywgZmlsZUNob29zZXJTZXR0aW5ncygpKTsK
IH0KIAogYm9vbCBGaWxlSW5wdXRUeXBlOjphbGxvd3NEaXJlY3RvcmllcygpIGNvbnN0CkBAIC00
NTQsMjIgKzQ2OCw0NyBAQCB2b2lkIEZpbGVJbnB1dFR5cGU6Omljb25Mb2FkZWQoUmVmUHRyPElj
CiB9CiAKICNpZiBFTkFCTEUoRFJBR19TVVBQT1JUKQorVmVjdG9yPFN0cmluZz4gRmlsZUlucHV0
VHlwZTo6dHJhbnNjb2RlRHJvcHBlZEltYWdlcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGF0aHMp
IGNvbnN0Cit7CisjaWYgUExBVEZPUk0oTUFDKQorICAgIGF1dG8gc2V0dGluZ3MgPSBmaWxlQ2hv
b3NlclNldHRpbmdzKCk7CisgICAgYXV0byBhbGxvd2VkTUlNRVR5cGVzID0gTUlNRVR5cGVSZWdp
c3RyeTo6YWxsb3dlZE1JTUVUeXBlcyhzZXR0aW5ncy5hY2NlcHRNSU1FVHlwZXMsIHNldHRpbmdz
LmFjY2VwdEZpbGVFeHRlbnNpb25zKTsKKworICAgIGF1dG8gdHJhbnNjb2RpbmdQYXRocyA9IGZp
bmRJbWFnZXNGb3JUcmFuc2NvZGluZyhwYXRocywgYWxsb3dlZE1JTUVUeXBlcyk7CisgICAgaWYg
KHRyYW5zY29kaW5nUGF0aHMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4geyB9OworCisgICAg
YXV0byB0cmFuc2NvZGluZ01JTUVUeXBlID0gTUlNRVR5cGVSZWdpc3RyeTo6cHJlZmVycmVkSW1h
Z2VNSU1FVHlwZUZvckVuY29kaW5nKGFsbG93ZWRNSU1FVHlwZXMsIHsgfSk7CisgICAgaWYgKHRy
YW5zY29kaW5nTUlNRVR5cGUuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBh
dXRvIHRyYW5zY29kaW5nVVRJID0gVVRJRnJvbU1JTUVUeXBlKHRyYW5zY29kaW5nTUlNRVR5cGUp
OworICAgIGF1dG8gdHJhbnNjb2RpbmdFeHRlbnNpb24gPSBXZWJDb3JlOjpNSU1FVHlwZVJlZ2lz
dHJ5OjpwcmVmZXJyZWRFeHRlbnNpb25Gb3JNSU1FVHlwZSh0cmFuc2NvZGluZ01JTUVUeXBlKTsK
KworICAgIHJldHVybiB0cmFuc2NvZGVJbWFnZXModHJhbnNjb2RpbmdQYXRocywgdHJhbnNjb2Rp
bmdVVEksIHRyYW5zY29kaW5nRXh0ZW5zaW9uKTsKKyNlbHNlCisgICAgcmV0dXJuIHsgfTsKKyNl
bmRpZgorfQorCiBib29sIEZpbGVJbnB1dFR5cGU6OnJlY2VpdmVEcm9wcGVkRmlsZXMoY29uc3Qg
RHJhZ0RhdGEmIGRyYWdEYXRhKQogewogICAgIGF1dG8gcGF0aHMgPSBkcmFnRGF0YS5hc0ZpbGVu
YW1lcygpOwogICAgIGlmIChwYXRocy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAorICAgIGF1dG8gcmVwbGFjZW1lbnRQYXRocyA9IHRyYW5zY29kZURyb3BwZWRJbWFnZXMocGF0
aHMpOworICAgIAogICAgIEFTU0VSVChlbGVtZW50KCkpOwogICAgIGlmIChlbGVtZW50KCktPmhh
c0F0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24obXVsdGlwbGVBdHRyKSkgewogICAgICAg
ICBWZWN0b3I8RmlsZUNob29zZXJGaWxlSW5mbz4gZmlsZXM7CiAgICAgICAgIGZpbGVzLnJlc2Vy
dmVJbml0aWFsQ2FwYWNpdHkocGF0aHMuc2l6ZSgpKTsKLSAgICAgICAgZm9yIChhdXRvJiBwYXRo
IDogcGF0aHMpCi0gICAgICAgICAgICBmaWxlcy51bmNoZWNrZWRBcHBlbmQoeyBwYXRoLCB7IH0s
IHsgfSB9KTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDAsIHNpemUgPSBwYXRocy5zaXplKCk7
IGkgPCBzaXplOyArK2kpCisgICAgICAgICAgICBmaWxlcy51bmNoZWNrZWRBcHBlbmQoeyBwYXRo
c1tpXSwgaSA8IHJlcGxhY2VtZW50UGF0aHMuc2l6ZSgpID8gcmVwbGFjZW1lbnRQYXRoc1tpXSA6
IG51bGxTdHJpbmcoKSwgeyB9IH0pOwogCiAgICAgICAgIGZpbGVzQ2hvc2VuKGZpbGVzKTsKICAg
ICB9IGVsc2UKLSAgICAgICAgZmlsZXNDaG9zZW4oeyB7IHBhdGhzWzBdLCB7IH0sIHsgfSB9IH0p
OworICAgICAgICBmaWxlc0Nob3Nlbih7IHsgcGF0aHNbMF0sIHJlcGxhY2VtZW50UGF0aHMuc2l6
ZSgpID8gcmVwbGFjZW1lbnRQYXRoc1swXSA6IG51bGxTdHJpbmcoKSwgeyB9IH0gfSk7CiAKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvRmlsZUlucHV0VHlw
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvRmlsZUlucHV0VHlwZS5oCShy
ZXZpc2lvbiAyNjUwNzYpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0ZpbGVJbnB1dFR5cGUuaAko
d29ya2luZyBjb3B5KQpAQCAtNzEsNiArNzEsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgc2V0VmFs
dWUoY29uc3QgU3RyaW5nJiwgYm9vbCB2YWx1ZUNoYW5nZWQsIFRleHRGaWVsZEV2ZW50QmVoYXZp
b3IpIGZpbmFsOwogCiAjaWYgRU5BQkxFKERSQUdfU1VQUE9SVCkKKyAgICBWZWN0b3I8U3RyaW5n
PiB0cmFuc2NvZGVEcm9wcGVkSW1hZ2VzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBmaWxlbmFtZXMp
IGNvbnN0OwogICAgIGJvb2wgcmVjZWl2ZURyb3BwZWRGaWxlcyhjb25zdCBEcmFnRGF0YSYpIGZp
bmFsOwogI2VuZGlmCiAKQEAgLTg2LDcgKzg3LDggQEAgcHJpdmF0ZToKICAgICAvLyBGaWxlSWNv
bkxvYWRlckNsaWVudCBpbXBsZW1lbnRhdGlvbi4KICAgICB2b2lkIGljb25Mb2FkZWQoUmVmUHRy
PEljb24+JiYpIGZpbmFsOwogCi0gICAgdm9pZCBhcHBseUZpbGVDaG9vc2VyU2V0dGluZ3MoY29u
c3QgRmlsZUNob29zZXJTZXR0aW5ncyYpOworICAgIEZpbGVDaG9vc2VyU2V0dGluZ3MgZmlsZUNo
b29zZXJTZXR0aW5ncygpIGNvbnN0OworICAgIHZvaWQgYXBwbHlGaWxlQ2hvb3NlclNldHRpbmdz
KCk7CiAgICAgdm9pZCBkaWRDcmVhdGVGaWxlTGlzdChSZWY8RmlsZUxpc3Q+JiYsIFJlZlB0cjxJ
Y29uPiYmKTsKICAgICB2b2lkIHJlcXVlc3RJY29uKGNvbnN0IFZlY3RvcjxTdHJpbmc+Jik7CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlVXRpbGl0aWVzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VVdGls
aXRpZXMuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZVV0aWxpdGllcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjcHJhZ21hIG9uY2UKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBHaXZlbiBh
IGxpc3Qgb2YgZmlsZXMnICdwYXRocycgYW5kICdhbGxvd2VkTUlNRVR5cGVzJywgdGhlIGZ1bmN0
aW9uIHJldHVybnMgYSBsaXN0CisvLyBvZiBzdHJpbmdzIHdob3NlIHNpemUgaXMgdGhlIHNhbWUg
YXMgdGhlIHNpemUgb2YgJ3BhdGhzJyBhbmQgaXRzIGVudHJpZXMgYXJlIGFsbAorLy8gbnVsbCBz
dHJpbmdzIGV4Y2VwdCB0aGUgb25lcyB3aG9zZSBNSU1FIHR5cGVzIGFyZSBub3QgaW4gJ2FsbG93
ZWRNSU1FVHlwZXMnLgorV0VCQ09SRV9FWFBPUlQgVmVjdG9yPFN0cmluZz4gZmluZEltYWdlc0Zv
clRyYW5zY29kaW5nKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXRocywgY29uc3QgVmVjdG9yPFN0
cmluZz4mIGFsbG93ZWRNSU1FVHlwZXMpOworCisvLyBHaXZlbiBhIGxpc3Qgb2YgaW1hZ2VzJyAn
cGF0aHMnLCB0aGlzIGZ1bmN0aW9uIHRyYW5zY29kZXMgdGhlc2UgaW1hZ2VzIHRvIGEgbmV3Cisv
LyBmb3JtYXQgd2hvc2UgVVRJIGlzIGRlc3RpbmF0aW9uVVRJLiBUaGUgcmVzdWx0IG9mIHRoZSB0
cmFuc2NvZGluZyB3aWxsIGJlIHdyaXR0ZW4KKy8vIHRvIHRlbXBvcmFyeSBmaWxlcyB3aG9zZSBl
eHRlbnNpb25zIGFyZSAnZGVzdGluYXRpb25FeHRlbnNpb24nLiBJdCByZXR1cm5zIGEgbGlzdAor
Ly8gb2YgcGF0aHMgdG8gdGhlIHJlc3VsdCB0ZW1wb3JhcnkgZmlsZXMuIElmIGFuIGVudHJ5IGlu
ICdwYXRocycgaXMgbnVsbCBvciBhbiBlcnJvcgorLy8gaGFwcGVucyB3aGlsZSB0cmFuc2NvZGlu
ZywgYSBudWxsIHN0cmluZyB3aWxsIGJlIGFkZGVkIHRvIHRoZSByZXR1cm5lZCBsaXN0LgorV0VC
Q09SRV9FWFBPUlQgVmVjdG9yPFN0cmluZz4gdHJhbnNjb2RlSW1hZ2VzKGNvbnN0IFZlY3RvcjxT
dHJpbmc+JiBwYXRocywgY29uc3QgU3RyaW5nJiBkZXN0aW5hdGlvblVUSSwgY29uc3QgU3RyaW5n
JiBkZXN0aW5hdGlvbkV4dGVuc2lvbik7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VVdGlsaXRpZXNDRy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1h
Z2VVdGlsaXRpZXNDRy5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSW1hZ2VVdGlsaXRpZXNDRy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwxMjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
SW1hZ2VVdGlsaXRpZXMuaCIKKworI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJNSU1F
VHlwZVJlZ2lzdHJ5LmgiCisjaW5jbHVkZSA8SW1hZ2VJTy9JbWFnZUlPLmg+CisjaW5jbHVkZSA8
d3RmL0ZpbGVTeXN0ZW0uaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworc3RhdGljIFN0cmluZyB0cmFuc2NvZGVJbWFnZShjb25zdCBTdHJp
bmcmIHBhdGgsIGNvbnN0IFN0cmluZyYgZGVzdGluYXRpb25VVEksIGNvbnN0IFN0cmluZyYgZGVz
dGluYXRpb25FeHRlbnNpb24pCit7CisgICAgYXV0byBzb3VyY2VVUkwgPSBhZG9wdENGKENGVVJM
Q3JlYXRlV2l0aEZpbGVTeXN0ZW1QYXRoKGtDRkFsbG9jYXRvckRlZmF1bHQsIHBhdGguY3JlYXRl
Q0ZTdHJpbmcoKS5nZXQoKSwga0NGVVJMUE9TSVhQYXRoU3R5bGUsIGZhbHNlKSk7CisgICAgYXV0
byBzb3VyY2UgPSBhZG9wdENGKENHSW1hZ2VTb3VyY2VDcmVhdGVXaXRoVVJMKHNvdXJjZVVSTC5n
ZXQoKSwgbnVsbHB0cikpOworICAgIGlmICghc291cmNlKQorICAgICAgICByZXR1cm4gbnVsbFN0
cmluZygpOworCisgICAgYXV0byBzb3VyY2VVVEkgPSBTdHJpbmcoQ0dJbWFnZVNvdXJjZUdldFR5
cGUoc291cmNlLmdldCgpKSk7CisgICAgaWYgKHNvdXJjZVVUSSA9PSBkZXN0aW5hdGlvblVUSSkK
KyAgICAgICAgcmV0dXJuIG51bGxTdHJpbmcoKTsKKworICAgIC8vIEl0IGlzIGltcG9ydGFudCB0
byBhZGQgdGhlIGFwcHJvcHJpYXRlIGZpbGUgZXh0ZW5zaW9uIHRvIHRoZSB0ZW1wb3JhcnkgZmls
ZSBwYXRoLgorICAgIC8vIFRoZSBGaWxlIG9iamVjdCBkZXBlbmRzIHNvbGVseSBvbiB0aGUgZXh0
ZW5zaW9uIHRvIGtub3cgdGhlIE1JTUUgdHlwZSBvZiB0aGUgZmlsZS4KKyAgICBhdXRvIHN1ZmZp
eCA9IG1ha2VTdHJpbmcoJy4nLCBkZXN0aW5hdGlvbkV4dGVuc2lvbik7CisKKyAgICBGaWxlU3lz
dGVtOjpQbGF0Zm9ybUZpbGVIYW5kbGUgZGVzdGluYXRpb25GaWxlSGFuZGxlOworICAgIFN0cmlu
ZyBkZXN0aW5hdGlvblBhdGggPSBGaWxlU3lzdGVtOjpvcGVuVGVtcG9yYXJ5RmlsZSgidGVtcElt
YWdlIl9zLCBkZXN0aW5hdGlvbkZpbGVIYW5kbGUsIHN1ZmZpeCk7CisgICAgaWYgKGRlc3RpbmF0
aW9uRmlsZUhhbmRsZSA9PSBGaWxlU3lzdGVtOjppbnZhbGlkUGxhdGZvcm1GaWxlSGFuZGxlKSB7
CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKEltYWdlcywgInRyYW5zY29kZUltYWdlOiBEZXN0
aW5hdGlvbiBpbWFnZSBjb3VsZCBub3QgYmUgY3JlYXRlZDogJXMgJXNcbiIsIHBhdGgudXRmOCgp
LmRhdGEoKSwgZGVzdGluYXRpb25VVEkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIHJldHVybiBu
dWxsU3RyaW5nKCk7CisgICAgfQorCisgICAgQ0dEYXRhQ29uc3VtZXJDYWxsYmFja3MgY2FsbGJh
Y2tzID0geworICAgICAgICBbXSh2b2lkKiBpbmZvLCBjb25zdCB2b2lkKiBidWZmZXIsIHNpemVf
dCBjb3VudCkgLT4gc2l6ZV90IHsKKyAgICAgICAgICAgIGF1dG8gaGFuZGxlID0gKnN0YXRpY19j
YXN0PEZpbGVTeXN0ZW06OlBsYXRmb3JtRmlsZUhhbmRsZSo+KGluZm8pOworICAgICAgICAgICAg
cmV0dXJuIEZpbGVTeXN0ZW06OndyaXRlVG9GaWxlKGhhbmRsZSwgc3RhdGljX2Nhc3Q8Y29uc3Qg
Y2hhcio+KGJ1ZmZlciksIGNvdW50KTsKKyAgICAgICAgfSwKKyAgICAgICAgbnVsbHB0cgorICAg
IH07CisKKyAgICBhdXRvIGNvbnN1bWVyID0gYWRvcHRDRihDR0RhdGFDb25zdW1lckNyZWF0ZSgm
ZGVzdGluYXRpb25GaWxlSGFuZGxlLCAmY2FsbGJhY2tzKSk7CisgICAgYXV0byBkZXN0aW5hdGlv
biA9IGFkb3B0Q0YoQ0dJbWFnZURlc3RpbmF0aW9uQ3JlYXRlV2l0aERhdGFDb25zdW1lcihjb25z
dW1lci5nZXQoKSwgZGVzdGluYXRpb25VVEkuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSwgMSwgbnVs
bHB0cikpOworCisgICAgQ0dJbWFnZURlc3RpbmF0aW9uQWRkSW1hZ2VGcm9tU291cmNlKGRlc3Rp
bmF0aW9uLmdldCgpLCBzb3VyY2UuZ2V0KCksIDAsIG51bGxwdHIpOworCisgICAgaWYgKCFDR0lt
YWdlRGVzdGluYXRpb25GaW5hbGl6ZShkZXN0aW5hdGlvbi5nZXQoKSkpIHsKKyAgICAgICAgUkVM
RUFTRV9MT0dfRVJST1IoSW1hZ2VzLCAidHJhbnNjb2RlSW1hZ2U6IEltYWdlIHRyYW5zY29kaW5n
IGZhaWxzOiAlcyAlc1xuIiwgcGF0aC51dGY4KCkuZGF0YSgpLCBkZXN0aW5hdGlvblVUSS51dGY4
KCkuZGF0YSgpKTsKKyAgICAgICAgRmlsZVN5c3RlbTo6Y2xvc2VGaWxlKGRlc3RpbmF0aW9uRmls
ZUhhbmRsZSk7CisgICAgICAgIEZpbGVTeXN0ZW06OmRlbGV0ZUZpbGUoZGVzdGluYXRpb25QYXRo
KTsKKyAgICAgICAgcmV0dXJuIG51bGxTdHJpbmcoKTsKKyAgICB9CisKKyAgICBGaWxlU3lzdGVt
OjpjbG9zZUZpbGUoZGVzdGluYXRpb25GaWxlSGFuZGxlKTsKKyAgICByZXR1cm4gZGVzdGluYXRp
b25QYXRoOworfQorCitWZWN0b3I8U3RyaW5nPiBmaW5kSW1hZ2VzRm9yVHJhbnNjb2RpbmcoY29u
c3QgVmVjdG9yPFN0cmluZz4mIHBhdGhzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYWxsb3dlZE1J
TUVUeXBlcykKK3sKKyAgICBWZWN0b3I8U3RyaW5nPiB0cmFuc2NvZGluZ1BhdGhzOworICAgIHRy
YW5zY29kaW5nUGF0aHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShwYXRocy5zaXplKCkpOworCisg
ICAgYm9vbCBuZWVkc1RyYW5zY29kaW5nID0gZmFsc2U7CisKKyAgICBmb3IgKGF1dG8mIHBhdGgg
OiBwYXRocykgeworICAgICAgICAvLyBBcHBlbmQgYSBwYXRoIG9mIHRoZSBpbWFnZSB3aGljaCBu
ZWVkcyB0cmFuc2NvZGluZy4gT3RoZXJ3aXNlIGFwcGVuZCBhIG51bGwgc3RyaW5nLgorICAgICAg
ICBpZiAoIWFsbG93ZWRNSU1FVHlwZXMuY29udGFpbnMoV2ViQ29yZTo6TUlNRVR5cGVSZWdpc3Ry
eTo6bWltZVR5cGVGb3JQYXRoKHBhdGgpKSkgeworICAgICAgICAgICAgdHJhbnNjb2RpbmdQYXRo
cy51bmNoZWNrZWRBcHBlbmQocGF0aCk7CisgICAgICAgICAgICBuZWVkc1RyYW5zY29kaW5nID0g
dHJ1ZTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICB0cmFuc2NvZGluZ1BhdGhzLnVuY2hl
Y2tlZEFwcGVuZChudWxsU3RyaW5nKCkpOworICAgIH0KKworICAgIC8vIElmIG5vbmUgb2YgdGhl
IGZpbGVzIG5lZWRzIGltYWdlIHRyYW5zY29kaW5nLCByZXR1cm4gYW4gZW1wdHkgVmVjdG9yLgor
ICAgIHJldHVybiBuZWVkc1RyYW5zY29kaW5nID8gdHJhbnNjb2RpbmdQYXRocyA6IFZlY3RvcjxT
dHJpbmc+KCk7Cit9CisKK1ZlY3RvcjxTdHJpbmc+IHRyYW5zY29kZUltYWdlcyhjb25zdCBWZWN0
b3I8U3RyaW5nPiYgcGF0aHMsIGNvbnN0IFN0cmluZyYgZGVzdGluYXRpb25VVEksIGNvbnN0IFN0
cmluZyYgZGVzdGluYXRpb25FeHRlbnNpb24pCit7CisgICAgQVNTRVJUKCFkZXN0aW5hdGlvblVU
SS5pc051bGwoKSk7CisgICAgQVNTRVJUKCFkZXN0aW5hdGlvbkV4dGVuc2lvbi5pc051bGwoKSk7
CisgICAgCisgICAgVmVjdG9yPFN0cmluZz4gdHJhbnNjb2RlZFBhdGhzOworICAgIHRyYW5zY29k
ZWRQYXRocy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHBhdGhzLnNpemUoKSk7CisKKyAgICBmb3Ig
KGF1dG8mIHBhdGggOiBwYXRocykgeworICAgICAgICAvLyBBcHBlbmQgdGhlIHRyYW5zY29kZWQg
cGF0aCBpZiB0aGUgaW1hZ2UgbmVlZHMgdHJhbnNjb2RpbmcuIE90aGVyd2lzZSBhcHBlbmQgYSBu
dWxsIHN0cmluZy4KKyAgICAgICAgaWYgKCFwYXRoLmlzTnVsbCgpKQorICAgICAgICAgICAgdHJh
bnNjb2RlZFBhdGhzLnVuY2hlY2tlZEFwcGVuZCh0cmFuc2NvZGVJbWFnZShwYXRoLCBkZXN0aW5h
dGlvblVUSSwgZGVzdGluYXRpb25FeHRlbnNpb24pKTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgdHJhbnNjb2RlZFBhdGhzLnVuY2hlY2tlZEFwcGVuZChudWxsU3RyaW5nKCkpOworICAgIH0K
KworICAgIHJldHVybiB0cmFuc2NvZGVkUGF0aHM7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNjUzMDYpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDIwLTA4LTA1ICBTYWlkIEFi
b3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgW21hY09TXSBE
cmFnL2Ryb3AgYW4gaW1hZ2Ugb2YgYSB1bnN1cHBvcnRlZCBmb3JtYXQgdG8gYW4gZmlsZSBpbnB1
dCBlbGVtZW50IHNob3VsZCBjb252ZXJ0IGl0IHRvIGEgc3VwcG9ydGVkIGZvcm1hdAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEyNDgyCisgICAgICAg
IDxyZGFyOi8vcHJvYmxlbS82MzczMTY3Mj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIFBsYXRmb3JtL0ltYWdlVXRpbGl0aWVzLmg6IFJlbW92ZWQu
CisgICAgICAgICogUGxhdGZvcm0vY2c6IFJlbW92ZWQuCisgICAgICAgICogU291cmNlc0NvY29h
LnR4dDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcDoKKyAgICAgICAgKiBX
ZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKwogMjAyMC0wOC0wNSAgUGVyIEFybmUg
Vm9sbGFuICA8cHZvbGxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgW0NvY29hXSBTYW5kYm94IGV4
dGVuc2lvbiB0b2tlbiBub3QgY2xlYXJlZCBmcm9tIG1lbW9yeQpJbmRleDogU291cmNlL1dlYktp
dC9Tb3VyY2VzQ29jb2EudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvU291cmNlc0Nv
Y29hLnR4dAkocmV2aXNpb24gMjY1MDc2KQorKysgU291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2Eu
dHh0CSh3b3JraW5nIGNvcHkpCkBAIC02NSw4ICs2NSw2IEBAIEdQVVByb2Nlc3Mvd2VicnRjL0xp
YldlYlJUQ0NvZGVjc1Byb3h5Lm0KIAogUGxhdGZvcm0vY2YvTW9kdWxlQ0YuY3BwCiAKLVBsYXRm
b3JtL2NnL0ltYWdlVXRpbGl0aWVzQ0cuY3BwCi0KIFBsYXRmb3JtL2NsYXNzaWZpZXIvY29jb2Ev
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0NsYXNzaWZpZXJDb2NvYS5jcHAKIFBsYXRmb3JtL2NsYXNz
aWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGljc0NsYXNzaWZpZXIuY3BwCiAKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvUGxhdGZvcm0vSW1hZ2VVdGlsaXRpZXMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L1BsYXRmb3JtL0ltYWdlVXRpbGl0aWVzLmgJKHJldmlzaW9uIDI2NTA3NikKKysrIFNv
dXJjZS9XZWJLaXQvUGxhdGZvcm0vSW1hZ2VVdGlsaXRpZXMuaAkobm9uZXhpc3RlbnQpCkBAIC0x
LDQyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotbmFtZXNwYWNlIFdlYktp
dCB7Ci0KLS8vIEdpdmVuIGEgbGlzdCBvZiBmaWxlcycgJ3BhdGhzJyBhbmQgJ2FsbG93ZWRNSU1F
VHlwZXMnLCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhIGxpc3QKLS8vIG9mIHN0cmluZ3Mgd2hvc2Ug
c2l6ZSBpcyB0aGUgc2FtZSBhcyB0aGUgc2l6ZSBvZiAncGF0aHMnIGFuZCBpdHMgZW50cmllcyBh
cmUgYWxsCi0vLyBudWxsIHN0cmluZ3MgZXhjZXB0IHRoZSBvbmVzIHdob3NlIE1JTUUgdHlwZXMg
YXJlIG5vdCBpbiAnYWxsb3dlZE1JTUVUeXBlcycuCi1WZWN0b3I8U3RyaW5nPiBmaW5kSW1hZ2Vz
Rm9yVHJhbnNjb2RpbmcoY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhdGhzLCBjb25zdCBWZWN0b3I8
U3RyaW5nPiYgYWxsb3dlZE1JTUVUeXBlcyk7Ci0KLS8vIEdpdmVuIGEgbGlzdCBvZiBpbWFnZXMn
ICdwYXRocycsIHRoaXMgZnVuY3Rpb24gdHJhbnNjb2RlcyB0aGVzZSBpbWFnZXMgdG8gYSBuZXcK
LS8vIGZvcm1hdCB3aG9zZSBVVEkgaXMgZGVzdGluYXRpb25VVEkuIFRoZSByZXN1bHQgb2YgdGhl
IHRyYW5zY29kaW5nIHdpbGwgYmUgd3JpdHRlbgotLy8gdG8gdGVtcG9yYXJ5IGZpbGVzIHdob3Nl
IGV4dGVuc2lvbnMgYXJlICdkZXN0aW5hdGlvbkV4dGVuc2lvbicuIEl0IHJldHVybnMgYSBsaXN0
Ci0vLyBvZiBwYXRocyB0byB0aGUgcmVzdWx0IHRlbXBvcmFyeSBmaWxlcy4gSWYgYW4gZW50cnkg
aW4gJ3BhdGhzJyBpcyBudWxsIG9yIGFuIGVycm9yCi0vLyBoYXBwZW5zIHdoaWxlIHRyYW5zY29k
aW5nLCBhIG51bGwgc3RyaW5nIHdpbGwgYmUgYWRkZWQgdG8gdGhlIHJldHVybmVkIGxpc3QuCi1W
ZWN0b3I8U3RyaW5nPiB0cmFuc2NvZGVJbWFnZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhdGhz
LCBjb25zdCBTdHJpbmcmIGRlc3RpbmF0aW9uVVRJLCBjb25zdCBTdHJpbmcmIGRlc3RpbmF0aW9u
RXh0ZW5zaW9uKTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0CgpQcm9wZXJ0eSBjaGFuZ2VzIG9u
OiBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0ltYWdlVXRpbGl0aWVzLmgKX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpEZWxl
dGVkOiBzdm46ZW9sLXN0eWxlCiMjIC0xICswLDAgIyMKLW5hdGl2ZQpcIE5vIG5ld2xpbmUgYXQg
ZW5kIG9mIHByb3BlcnR5CkluZGV4OiBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL2NnL0ltYWdlVXRp
bGl0aWVzQ0cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vY2cvSW1h
Z2VVdGlsaXRpZXNDRy5jcHAJKHJldmlzaW9uIDI2NTA3NikKKysrIFNvdXJjZS9XZWJLaXQvUGxh
dGZvcm0vY2cvSW1hZ2VVdGlsaXRpZXNDRy5jcHAJKG5vbmV4aXN0ZW50KQpAQCAtMSwxMjIgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJbWFnZVV0
aWxpdGllcy5oIgotCi0jaW5jbHVkZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUgPEltYWdlSU8vSW1h
Z2VJTy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvTUlNRVR5cGVSZWdpc3RyeS5oPgotI2luY2x1ZGUg
PHd0Zi9GaWxlU3lzdGVtLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1l
c3BhY2UgV2ViS2l0IHsKLQotc3RhdGljIFN0cmluZyB0cmFuc2NvZGVJbWFnZShjb25zdCBTdHJp
bmcmIHBhdGgsIGNvbnN0IFN0cmluZyYgZGVzdGluYXRpb25VVEksIGNvbnN0IFN0cmluZyYgZGVz
dGluYXRpb25FeHRlbnNpb24pCi17Ci0gICAgYXV0byBzb3VyY2VVUkwgPSBhZG9wdENGKENGVVJM
Q3JlYXRlV2l0aEZpbGVTeXN0ZW1QYXRoKGtDRkFsbG9jYXRvckRlZmF1bHQsIHBhdGguY3JlYXRl
Q0ZTdHJpbmcoKS5nZXQoKSwga0NGVVJMUE9TSVhQYXRoU3R5bGUsIGZhbHNlKSk7Ci0gICAgYXV0
byBzb3VyY2UgPSBhZG9wdENGKENHSW1hZ2VTb3VyY2VDcmVhdGVXaXRoVVJMKHNvdXJjZVVSTC5n
ZXQoKSwgbnVsbHB0cikpOwotICAgIGlmICghc291cmNlKQotICAgICAgICByZXR1cm4gbnVsbFN0
cmluZygpOwotCi0gICAgYXV0byBzb3VyY2VVVEkgPSBTdHJpbmcoQ0dJbWFnZVNvdXJjZUdldFR5
cGUoc291cmNlLmdldCgpKSk7Ci0gICAgaWYgKHNvdXJjZVVUSSA9PSBkZXN0aW5hdGlvblVUSSkK
LSAgICAgICAgcmV0dXJuIG51bGxTdHJpbmcoKTsKLQotICAgIC8vIEl0IGlzIGltcG9ydGFudCB0
byBhZGQgdGhlIGFwcHJvcHJpYXRlIGZpbGUgZXh0ZW5zaW9uIHRvIHRoZSB0ZW1wb3JhcnkgZmls
ZSBwYXRoLgotICAgIC8vIFRoZSBGaWxlIG9iamVjdCBkZXBlbmRzIHNvbGVseSBvbiB0aGUgZXh0
ZW5zaW9uIHRvIGtub3cgdGhlIE1JTUUgdHlwZSBvZiB0aGUgZmlsZS4KLSAgICBhdXRvIHN1ZmZp
eCA9IG1ha2VTdHJpbmcoJy4nLCBkZXN0aW5hdGlvbkV4dGVuc2lvbik7Ci0KLSAgICBGaWxlU3lz
dGVtOjpQbGF0Zm9ybUZpbGVIYW5kbGUgZGVzdGluYXRpb25GaWxlSGFuZGxlOwotICAgIFN0cmlu
ZyBkZXN0aW5hdGlvblBhdGggPSBGaWxlU3lzdGVtOjpvcGVuVGVtcG9yYXJ5RmlsZSgidGVtcElt
YWdlIl9zLCBkZXN0aW5hdGlvbkZpbGVIYW5kbGUsIHN1ZmZpeCk7Ci0gICAgaWYgKGRlc3RpbmF0
aW9uRmlsZUhhbmRsZSA9PSBGaWxlU3lzdGVtOjppbnZhbGlkUGxhdGZvcm1GaWxlSGFuZGxlKSB7
Ci0gICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKEltYWdlcywgInRyYW5zY29kZUltYWdlOiBEZXN0
aW5hdGlvbiBpbWFnZSBjb3VsZCBub3QgYmUgY3JlYXRlZDogJXMgJXNcbiIsIHBhdGgudXRmOCgp
LmRhdGEoKSwgZGVzdGluYXRpb25VVEkudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgIHJldHVybiBu
dWxsU3RyaW5nKCk7Ci0gICAgfQotCi0gICAgQ0dEYXRhQ29uc3VtZXJDYWxsYmFja3MgY2FsbGJh
Y2tzID0gewotICAgICAgICBbXSh2b2lkKiBpbmZvLCBjb25zdCB2b2lkKiBidWZmZXIsIHNpemVf
dCBjb3VudCkgLT4gc2l6ZV90IHsKLSAgICAgICAgICAgIGF1dG8gaGFuZGxlID0gKnN0YXRpY19j
YXN0PEZpbGVTeXN0ZW06OlBsYXRmb3JtRmlsZUhhbmRsZSo+KGluZm8pOwotICAgICAgICAgICAg
cmV0dXJuIEZpbGVTeXN0ZW06OndyaXRlVG9GaWxlKGhhbmRsZSwgc3RhdGljX2Nhc3Q8Y29uc3Qg
Y2hhcio+KGJ1ZmZlciksIGNvdW50KTsKLSAgICAgICAgfSwKLSAgICAgICAgbnVsbHB0cgotICAg
IH07Ci0KLSAgICBhdXRvIGNvbnN1bWVyID0gYWRvcHRDRihDR0RhdGFDb25zdW1lckNyZWF0ZSgm
ZGVzdGluYXRpb25GaWxlSGFuZGxlLCAmY2FsbGJhY2tzKSk7Ci0gICAgYXV0byBkZXN0aW5hdGlv
biA9IGFkb3B0Q0YoQ0dJbWFnZURlc3RpbmF0aW9uQ3JlYXRlV2l0aERhdGFDb25zdW1lcihjb25z
dW1lci5nZXQoKSwgZGVzdGluYXRpb25VVEkuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSwgMSwgbnVs
bHB0cikpOwotCi0gICAgQ0dJbWFnZURlc3RpbmF0aW9uQWRkSW1hZ2VGcm9tU291cmNlKGRlc3Rp
bmF0aW9uLmdldCgpLCBzb3VyY2UuZ2V0KCksIDAsIG51bGxwdHIpOwotCi0gICAgaWYgKCFDR0lt
YWdlRGVzdGluYXRpb25GaW5hbGl6ZShkZXN0aW5hdGlvbi5nZXQoKSkpIHsKLSAgICAgICAgUkVM
RUFTRV9MT0dfRVJST1IoSW1hZ2VzLCAidHJhbnNjb2RlSW1hZ2U6IEltYWdlIHRyYW5zY29kaW5n
IGZhaWxzOiAlcyAlc1xuIiwgcGF0aC51dGY4KCkuZGF0YSgpLCBkZXN0aW5hdGlvblVUSS51dGY4
KCkuZGF0YSgpKTsKLSAgICAgICAgRmlsZVN5c3RlbTo6Y2xvc2VGaWxlKGRlc3RpbmF0aW9uRmls
ZUhhbmRsZSk7Ci0gICAgICAgIEZpbGVTeXN0ZW06OmRlbGV0ZUZpbGUoZGVzdGluYXRpb25QYXRo
KTsKLSAgICAgICAgcmV0dXJuIG51bGxTdHJpbmcoKTsKLSAgICB9Ci0KLSAgICBGaWxlU3lzdGVt
OjpjbG9zZUZpbGUoZGVzdGluYXRpb25GaWxlSGFuZGxlKTsKLSAgICByZXR1cm4gZGVzdGluYXRp
b25QYXRoOwotfQotCi1WZWN0b3I8U3RyaW5nPiBmaW5kSW1hZ2VzRm9yVHJhbnNjb2RpbmcoY29u
c3QgVmVjdG9yPFN0cmluZz4mIHBhdGhzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYWxsb3dlZE1J
TUVUeXBlcykKLXsKLSAgICBWZWN0b3I8U3RyaW5nPiB0cmFuc2NvZGluZ1BhdGhzOwotICAgIHRy
YW5zY29kaW5nUGF0aHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShwYXRocy5zaXplKCkpOwotCi0g
ICAgYm9vbCBuZWVkc1RyYW5zY29kaW5nID0gZmFsc2U7Ci0KLSAgICBmb3IgKGF1dG8mIHBhdGgg
OiBwYXRocykgewotICAgICAgICAvLyBBcHBlbmQgYSBwYXRoIG9mIHRoZSBpbWFnZSB3aGljaCBu
ZWVkcyB0cmFuc2NvZGluZy4gT3RoZXJ3aXNlIGFwcGVuZCBhIG51bGwgc3RyaW5nLgotICAgICAg
ICBpZiAoIWFsbG93ZWRNSU1FVHlwZXMuY29udGFpbnMoV2ViQ29yZTo6TUlNRVR5cGVSZWdpc3Ry
eTo6bWltZVR5cGVGb3JQYXRoKHBhdGgpKSkgewotICAgICAgICAgICAgdHJhbnNjb2RpbmdQYXRo
cy51bmNoZWNrZWRBcHBlbmQocGF0aCk7Ci0gICAgICAgICAgICBuZWVkc1RyYW5zY29kaW5nID0g
dHJ1ZTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICB0cmFuc2NvZGluZ1BhdGhzLnVuY2hl
Y2tlZEFwcGVuZChudWxsU3RyaW5nKCkpOwotICAgIH0KLQotICAgIC8vIElmIG5vbmUgb2YgdGhl
IGZpbGVzIG5lZWRzIGltYWdlIHRyYW5zY29kaW5nLCByZXR1cm4gYW4gZW1wdHkgVmVjdG9yLgot
ICAgIHJldHVybiBuZWVkc1RyYW5zY29kaW5nID8gdHJhbnNjb2RpbmdQYXRocyA6IFZlY3RvcjxT
dHJpbmc+KCk7Ci19Ci0KLVZlY3RvcjxTdHJpbmc+IHRyYW5zY29kZUltYWdlcyhjb25zdCBWZWN0
b3I8U3RyaW5nPiYgcGF0aHMsIGNvbnN0IFN0cmluZyYgZGVzdGluYXRpb25VVEksIGNvbnN0IFN0
cmluZyYgZGVzdGluYXRpb25FeHRlbnNpb24pCi17Ci0gICAgQVNTRVJUKCFkZXN0aW5hdGlvblVU
SS5pc051bGwoKSk7Ci0gICAgQVNTRVJUKCFkZXN0aW5hdGlvbkV4dGVuc2lvbi5pc051bGwoKSk7
Ci0gICAgCi0gICAgVmVjdG9yPFN0cmluZz4gdHJhbnNjb2RlZFBhdGhzOwotICAgIHRyYW5zY29k
ZWRQYXRocy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHBhdGhzLnNpemUoKSk7Ci0KLSAgICBmb3Ig
KGF1dG8mIHBhdGggOiBwYXRocykgewotICAgICAgICAvLyBBcHBlbmQgdGhlIHRyYW5zY29kZWQg
cGF0aCBpZiB0aGUgaW1hZ2UgbmVlZHMgdHJhbnNjb2RpbmcuIE90aGVyd2lzZSBhcHBlbmQgYSBu
dWxsIHN0cmluZy4KLSAgICAgICAgaWYgKCFwYXRoLmlzTnVsbCgpKQotICAgICAgICAgICAgdHJh
bnNjb2RlZFBhdGhzLnVuY2hlY2tlZEFwcGVuZCh0cmFuc2NvZGVJbWFnZShwYXRoLCBkZXN0aW5h
dGlvblVUSSwgZGVzdGluYXRpb25FeHRlbnNpb24pKTsKLSAgICAgICAgZWxzZQotICAgICAgICAg
ICAgdHJhbnNjb2RlZFBhdGhzLnVuY2hlY2tlZEFwcGVuZChudWxsU3RyaW5nKCkpOwotICAgIH0K
LQotICAgIHJldHVybiB0cmFuc2NvZGVkUGF0aHM7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktp
dApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCShyZXZpc2lv
biAyNjUwNzYpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yMTcsNyArMjE3LDcgQEAKICNlbmRpZgogCiAjaWYgUExBVEZPUk0o
TUFDKQotI2luY2x1ZGUgIkltYWdlVXRpbGl0aWVzLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9JbWFn
ZVV0aWxpdGllcy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvVVRJVXRpbGl0aWVzLmg+CiAjZW5kaWYK
IApJbmRleDogU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCShyZXZpc2lvbiAyNjUwNzYpCisrKyBTb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yOTAsNyArMjkwLDYgQEAKIAkJMUE5
RkJBOEQxM0ZGMDRFNjAwREVFRDY3IC8qIFBsdWdpbkNvbXBsZXhUZXh0SW5wdXRTdGF0ZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE5RkJBOEMxM0ZG
MDRFNjAwREVFRDY3IC8qIFBsdWdpbkNvbXBsZXhUZXh0SW5wdXRTdGF0ZS5oICovOyB9OwogCQkx
QUExMzIxMjE5MUQ1OTI0MDA5QzE0ODkgLyogV0tOYXZpZ2F0aW9uUmVzcG9uc2VQcml2YXRlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQUExMzIxMTE5
MUQ1OTI0MDA5QzE0ODkgLyogV0tOYXZpZ2F0aW9uUmVzcG9uc2VQcml2YXRlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMUFBMjBENTExOEFENTBF
MDAwNUQxRUQ0IC8qIFdLTmF2aWdhdGlvbkRlbGVnYXRlUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFBMjBENTAxOEFENTBFMDAwNUQxRUQ0
IC8qIFdLTmF2aWdhdGlvbkRlbGVnYXRlUHJpdmF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTFBQTJFNTFEMTJFNEMwNUUwMEJDNDk2NiAvKiBJ
bWFnZVV0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMUFBMkU1MUIxMkU0QzA1RTAwQkM0OTY2IC8qIEltYWdlVXRpbGl0aWVzLmggKi87IH07
CiAJCTFBQTJFNTY3MThENzc1MDgwMDM4MTRCRCAvKiBXS1dlYlByb2Nlc3NCdW5kbGVQYXJhbWV0
ZXJzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQUEy
RTU2NTE4RDc3NTA4MDAzODE0QkQgLyogV0tXZWJQcm9jZXNzQnVuZGxlUGFyYW1ldGVycy5oICov
OyB9OwogCQkxQUEzRDc1QzE2NTFCNDRGMDA4NzEzRDAgLyogUmVtb3RlTGF5ZXJUcmVlSG9zdC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFBM0Q3NUEx
NjUxQjQ0RjAwODcxM0QwIC8qIFJlbW90ZUxheWVyVHJlZUhvc3QuaCAqLzsgfTsKIAkJMUFBNDE3
Q0IxMkMwMENDQTAwMkJFNjdCIC8qIFRleHRDaGVja2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQUE0MTdDOTEyQzAwQ0NBMDAyQkU2N0IgLyogVGV4
dENoZWNrZXIuaCAqLzsgfTsKQEAgLTI1MTQsOCArMjUxMyw2IEBACiAJCTFBQTFDQzVDMTAwRkEx
QTEwMDc4REVCQyAvKiBRdWFydHpDb3JlLmZyYW1ld29yayAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHdyYXBwZXIuZnJhbWV3b3JrOyBuYW1lID0gUXVh
cnR6Q29yZS5mcmFtZXdvcms7IHBhdGggPSAvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9RdWFy
dHpDb3JlLmZyYW1ld29yazsgc291cmNlVHJlZSA9ICI8YWJzb2x1dGU+IjsgfTsKIAkJMUFBMUNE
MDYxMDBGQTFCQTAwNzhERUJDIC8qIENhcmJvbi5mcmFtZXdvcmsgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB3cmFwcGVyLmZyYW1ld29yazsgbmFtZSA9
IENhcmJvbi5mcmFtZXdvcms7IHBhdGggPSAvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9DYXJi
b24uZnJhbWV3b3JrOyBzb3VyY2VUcmVlID0gIjxhYnNvbHV0ZT4iOyB9OwogCQkxQUEyMEQ1MDE4
QUQ1MEUwMDA1RDFFRDQgLyogV0tOYXZpZ2F0aW9uRGVsZWdhdGVQcml2YXRlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLTmF2aWdhdGlvbkRlbGVnYXRlUHJpdmF0ZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxQUEyRTUxQjEyRTRDMDVFMDBCQzQ5NjYgLyog
SW1hZ2VVdGlsaXRpZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VV
dGlsaXRpZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUFBMkU1MUMxMkU0QzA1
RTAwQkM0OTY2IC8qIEltYWdlVXRpbGl0aWVzQ0cuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gSW1hZ2VVdGlsaXRpZXNDRy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTFBQTJFNTY0MThENzc1MDgwMDM4MTRCRCAvKiBXS1dlYlByb2Nlc3NCdW5kbGVQ
YXJhbWV0ZXJzLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV0tX
ZWJQcm9jZXNzQnVuZGxlUGFyYW1ldGVycy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMUFBMkU1NjUxOEQ3NzUwODAwMzgxNEJEIC8qIFdLV2ViUHJvY2Vzc0J1bmRsZVBhcmFtZXRl
cnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tXZWJQcm9jZXNzQnVuZGxl
UGFyYW1ldGVycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQUEzRDc1OTE2NTFC
NDRGMDA4NzEzRDAgLyogUmVtb3RlTGF5ZXJUcmVlSG9zdC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLm9iamNwcDsgcGF0aCA9IFJlbW90ZUxheWVyVHJlZUhvc3QubW07IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC01OTU0LDE0ICs1OTUxLDYgQEAKIAkJCXBhdGggPSBtYWM7CiAJ
CQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9OwotCQkxQUEyRTUxQTEyRTRDMDU2MDBCQzQ5
NjYgLyogY2cgKi8gPSB7Ci0JCQlpc2EgPSBQQlhHcm91cDsKLQkJCWNoaWxkcmVuID0gKAotCQkJ
CTFBQTJFNTFDMTJFNEMwNUUwMEJDNDk2NiAvKiBJbWFnZVV0aWxpdGllc0NHLmNwcCAqLywKLQkJ
CSk7Ci0JCQlwYXRoID0gY2c7Ci0JCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwotCQl9OwogCQkx
QUFDNERERTE2QjFDQkY2MDA5NDI1RTMgLyogV2ViU3RvcmFnZSAqLyA9IHsKIAkJCWlzYSA9IFBC
WEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCkBAIC05NTgyLDcgKzk1NzEsNiBAQAogCQkJaXNhID0g
UEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKIAkJCQkzNzA5NTA0MTE4QTg4QkE0MDA4N0FFNUQg
LyogY2YgKi8sCi0JCQkJMUFBMkU1MUExMkU0QzA1NjAwQkM0OTY2IC8qIGNnICovLAogCQkJCTZC
RTk2OUMyMUU1NEQ0NjcwMDhCNzQ4MyAvKiBjbGFzc2lmaWVyICovLAogCQkJCTQ0NTBBRUJFMURD
M0ZBQUMwMDk5NDNGMiAvKiBjb2NvYSAqLywKIAkJCQkzNzA5NTA0MjE4QTg4Q0RFMDA4N0FFNUQg
LyogZm91bmRhdGlvbiAqLywKQEAgLTk1OTMsNyArOTU4MSw2IEBACiAJCQkJNTFCMTVBN0QxMzg0
MzlCMjAwMzIxQUQ4IC8qIHVuaXggKi8sCiAJCQkJRUNBNjgwRDMxRTY5MDRCNTAwNzMxRDIwIC8q
IEV4dHJhUHJpdmF0ZVN5bWJvbHNGb3JUQVBJLmggKi8sCiAJCQkJRUNCRkMxREIxRTZBNEQ2NjAw
MDMwMEM3IC8qIEV4dHJhUHVibGljU3ltYm9sc0ZvclRBUEkuaCAqLywKLQkJCQkxQUEyRTUxQjEy
RTRDMDVFMDBCQzQ5NjYgLyogSW1hZ2VVdGlsaXRpZXMuaCAqLywKIAkJCQk1MUE3RjJGNDEyNUJG
OEQ0MDA4QUVCMUQgLyogTG9nZ2luZy5jcHAgKi8sCiAJCQkJNTFBN0YyRjIxMjVCRjgyMDAwOEFF
QjFEIC8qIExvZ2dpbmcuaCAqLywKIAkJCQkwRkRDRDdGNjFENDdFOTJBMDA5RjA4QkMgLyogTG9n
SW5pdGlhbGl6YXRpb24uaCAqLywKQEAgLTEwODU1LDcgKzEwODQyLDYgQEAKIAkJCQk1MUMwQzk3
NDFEREQ3NjAwMDAzMkNBRDMgLyogSWNvbkxvYWRpbmdEZWxlZ2F0ZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNTFFMzUxQ0IxODBGMkNDQzAwRTUzQkU5IC8qIElEQlV0aWxpdGllcy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkNDRjZCMjUxMkM5M0U3QTAwOEY5QzM1IC8qIEltYWdlT3B0aW9ucy5oIGlu
IEhlYWRlcnMgKi8sCi0JCQkJMUFBMkU1MUQxMkU0QzA1RTAwQkM0OTY2IC8qIEltYWdlVXRpbGl0
aWVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTFFQzY5RTE4NzIwOTIxMDBCOTUxRjAgLyogSW1w
b3J0YW5jZUFzc2VydGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMyMDRFRTMxMUM4M0U5ODAw
OEYzMzc1IC8qIEluamVjdGVkQnVuZGxlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0VFN0RDNTEy
OEI2NDVEMDA5ODI3REEgLyogSW5qZWN0ZWRCdW5kbGVDbGllbnQuaCBpbiBIZWFkZXJzICovLAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>406051</attachid>
            <date>2020-08-05 15:32:19 -0700</date>
            <delta_ts>2020-08-06 18:03:36 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-212482-20200805153219.patch</filename>
            <type>text/plain</type>
            <size>34947</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2NTMwOCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI2IEBACisyMDIwLTA4LTA1ICBTYWlkIEFi
b3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgW21hY09TXSBE
cmFnL2Ryb3AgYW4gaW1hZ2Ugb2YgYSB1bnN1cHBvcnRlZCBmb3JtYXQgdG8gYW4gZmlsZSBpbnB1
dCBlbGVtZW50IHNob3VsZCBjb252ZXJ0IGl0IHRvIGEgc3VwcG9ydGVkIGZvcm1hdAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEyNDgyCisgICAgICAg
IDxyZGFyOi8vcHJvYmxlbS82MzczMTY3Mj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIFNvdXJjZXNDb2NvYS50eHQ6CisgICAgICAgICogV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGh0bWwvRmlsZUlucHV0VHlw
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGaWxlSW5wdXRUeXBlOjpoYW5kbGVET01BY3RpdmF0
ZUV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVJbnB1dFR5cGU6OmZpbGVDaG9vc2VyU2V0
dGluZ3MgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsZUlucHV0VHlwZTo6YXBwbHlGaWxl
Q2hvb3NlclNldHRpbmdzKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVJbnB1dFR5cGU6OnRyYW5z
Y29kZURyb3BwZWRJbWFnZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsZUlucHV0VHlw
ZTo6cmVjZWl2ZURyb3BwZWRGaWxlcyk6CisgICAgICAgICogaHRtbC9GaWxlSW5wdXRUeXBlLmg6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VVdGlsaXRpZXMuaDogQWRkZWQuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VVdGlsaXRpZXNDRy5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6dHJhbnNjb2RlSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
ZmluZEltYWdlc0ZvclRyYW5zY29kaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OnRyYW5zY29kZUlt
YWdlcyk6CisKIDIwMjAtMDgtMDUgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAog
ICAgICAgICBBZGQgY29uc3RydWN0b3IgZm9yIER5bmFtaWNzQ29tcHJlc3Nvck5vZGUKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvU291cmNlc0NvY29hLnR4dAkocmV2aXNpb24gMjY1MzA4KQorKysgU291cmNlL1dlYkNv
cmUvU291cmNlc0NvY29hLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMzMxLDYgKzMzMSw3IEBAIHBs
YXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWMKIHBsYXRmb3JtL2dyYXBoaWNz
L2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFn
ZURlY29kZXJDRy5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlU291cmNlQ0dNYWMubW0K
K3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlVXRpbGl0aWVzQ0cuY3BwCiBwbGF0Zm9ybS9ncmFw
aGljcy9jZy9JbnRQb2ludENHLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW50UmVjdENHLmNw
cAogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW50U2l6ZUNHLmNwcApJbmRleDogU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjY1
MzA4KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CSh3b3JraW5nIGNvcHkpCkBAIC0xNzYyLDYgKzE3NjIsNyBAQAogCQk1NUFEMDk0MDI0MDg5NjQw
MDBERTREMkYgLyogRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJFQTA5RjkyM0ZDQ0M2QTAwODUwNEE1IC8q
IERpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQk1NUFEMDk0MTI0MDg5NjRBMDBERTREMkYgLyogQ29uY3Jl
dGVJbWFnZUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNzJCQUMzQTcyM0UxNzMyODAwOEQ3NDFDIC8qIENvbmNyZXRlSW1hZ2VCdWZmZXIuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1NUFGMTRF
NjFFQUFDNTlCMDAyNkVFQUEgLyogVVRJUmVnaXN0cnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1QUYxNEU0MUVBQUM1OUIwMDI2RUVBQSAvKiBVVElS
ZWdpc3RyeS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CisJCTU1QkJENDI5MjREQjU2MDQwMEJCNkUwQyAvKiBJbWFnZVV0aWxpdGllcy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTVCQkQ0MjgyNERCNTNBMjAw
QkI2RTBDIC8qIEltYWdlVXRpbGl0aWVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTVEQ0M1MjgyMjQwN0IyMDAwQzI2RTMyIC8qIFNWR1ByaW1p
dGl2ZUxpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDU1RENDNTI1MjI0MDc0OUUwMEMyNkUzMiAvKiBTVkdQcmltaXRpdmVMaXN0LmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTVEQ0M1MjkyMjQwN0Iy
QTAwQzI2RTMyIC8qIFNWR0xpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDU1RENDNTIzMjI0MDczRkUwMEMyNkUzMiAvKiBTVkdMaXN0LmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTVFQzk1OTkyMDZB
QTdBMDAwN0REMEE5IC8qIFBhaW50RnJlcXVlbmN5VHJhY2tlci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTVFQzk1OTcyMDY5QzkyRDAwN0REMEE5IC8q
IFBhaW50RnJlcXVlbmN5VHJhY2tlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CkBAIC04ODQ0LDYgKzg4NDUsOCBAQAogCQk1NUEzMzZGODFEODIxRTND
MDAyMkM0QzcgLyogSW1hZ2VCYWNraW5nU3RvcmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSW1hZ2VCYWNraW5nU3RvcmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNTVBRjE0RTMxRUFBQzU5QjAwMjZFRUFBIC8qIFVUSVJlZ2lzdHJ5LmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFVUSVJlZ2lzdHJ5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NTVBRjE0RTQxRUFBQzU5QjAwMjZFRUFBIC8qIFVUSVJlZ2lzdHJ5LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFVUSVJlZ2lzdHJ5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTU1QkJENDI2MjRE
QjUzNDMwMEJCNkUwQyAvKiBJbWFnZVV0aWxpdGllc0NHLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEltYWdlVXRpbGl0aWVzQ0cuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1NUJC
RDQyODI0REI1M0EyMDBCQjZFMEMgLyogSW1hZ2VVdGlsaXRpZXMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SW1hZ2VVdGlsaXRpZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTVCRTAyNTcy
MjNCMjlDMDAwMzJGMDhBIC8qIFNWR1Byb3BlcnR5UmVnaXN0cnkuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
U1ZHUHJvcGVydHlSZWdpc3RyeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NUJF
MDI1OTIyM0IyOUMxMDAzMkYwOEEgLyogU1ZHQW5pbWF0aW9uQWRkaXRpdmVWYWx1ZUZ1bmN0aW9u
SW1wbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdBbmltYXRpb25BZGRpdGl2ZVZhbHVlRnVuY3Rpb25J
bXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU1QkUwMjVBMjIzQjI5QzIwMDMy
RjA4QSAvKiBTVkdQb2ludGVyTWVtYmVyQWNjZXNzb3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHUG9p
bnRlck1lbWJlckFjY2Vzc29yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNTYx
NSw2ICsyNTYxOCw3IEBACiAJCQkJNTU1Qjg3RUIxQ0FBRjBBQjAwMzQ5NDI1IC8qIEltYWdlRGVj
b2RlckNHLmggKi8sCiAJCQkJNEIzNDgwOTIwRUVGNTBENDAwQUMxQjQxIC8qIEltYWdlU291cmNl
Q0cuaCAqLywKIAkJCQk0QjM0ODA5MTBFRUY1MEQ0MDBBQzFCNDEgLyogSW1hZ2VTb3VyY2VDR01h
Yy5tbSAqLywKKwkJCQk1NUJCRDQyNjI0REI1MzQzMDBCQjZFMEMgLyogSW1hZ2VVdGlsaXRpZXND
Ry5jcHAgKi8sCiAJCQkJQjI3NTM1MzIwQjA1MzgxNDAwMkNFNjRGIC8qIEludFBvaW50Q0cuY3Bw
ICovLAogCQkJCUIyNzUzNTMzMEIwNTM4MTQwMDJDRTY0RiAvKiBJbnRSZWN0Q0cuY3BwICovLAog
CQkJCUIyNzUzNTM0MEIwNTM4MTQwMDJDRTY0RiAvKiBJbnRTaXplQ0cuY3BwICovLApAQCAtMjU4
MTgsNiArMjU4MjIsNyBAQAogCQkJCTU1NDY3NTc3MUZEMUZDMUEwMDNCMTBCMCAvKiBJbWFnZVNv
dXJjZS5jcHAgKi8sCiAJCQkJNTU0Njc1NzgxRkQxRkMxQTAwM0IxMEIwIC8qIEltYWdlU291cmNl
LmggKi8sCiAJCQkJNTU1MENCNDExRTk1NUUzQzAwMTExQUEwIC8qIEltYWdlVHlwZXMuaCAqLywK
KwkJCQk1NUJCRDQyODI0REI1M0EyMDBCQjZFMEMgLyogSW1hZ2VVdGlsaXRpZXMuaCAqLywKIAkJ
CQkwNzg2MzNGODI0MDcxNUQyMDA4N0FFMjEgLyogSW5iYW5kR2VuZXJpY0N1ZS5jcHAgKi8sCiAJ
CQkJMDc4NjMzREUyM0ZFREYyMjAwODdBRTIxIC8qIEluYmFuZEdlbmVyaWNDdWUuaCAqLywKIAkJ
CQkwNzA2QTBENzI0MDgzMEE2MDBFOTM4MTggLyogSW5iYW5kR2VuZXJpY0N1ZUlkZW50aWZpZXIu
aCAqLywKQEAgLTMxNDAzLDYgKzMxNDA4LDcgQEAKIAkJCQk0QjM0ODA5NDBFRUY1MEQ0MDBBQzFC
NDEgLyogSW1hZ2VTb3VyY2VDRy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDc4RUQxOTMyMTZEMDc5
NTAwNzc1QjMzIC8qIEltYWdlVHJhbnNmZXJTZXNzaW9uVlQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTU1NTBDQjQyMUU5NTVFM0MwMDExMUFBMCAvKiBJbWFnZVR5cGVzLmggaW4gSGVhZGVycyAqLywK
KwkJCQk1NUJCRDQyOTI0REI1NjA0MDBCQjZFMEMgLyogSW1hZ2VVdGlsaXRpZXMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTI2Rjc1NkIzMUIzQjY2RjcwMDA1REQ3OSAvKiBJbW11dGFibGVORkEuaCBp
biBIZWFkZXJzICovLAogCQkJCTI2Rjc1NkI1MUIzQjY4RjIwMDA1REQ3OSAvKiBJbW11dGFibGVO
RkFOb2RlQnVpbGRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzE2RkUxMTgwRTZFMURBNzAwQkY2
MDg4IC8qIEltcGxpY2l0QW5pbWF0aW9uLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2h0bWwvRmlsZUlucHV0VHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvaHRtbC9GaWxlSW5wdXRUeXBlLmNwcAkocmV2aXNpb24gMjY1MzA4KQorKysgU291cmNlL1dl
YkNvcmUvaHRtbC9GaWxlSW5wdXRUeXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcs
NyBAQAogI2luY2x1ZGUgIkljb24uaCIKICNpbmNsdWRlICJJbnB1dFR5cGVOYW1lcy5oIgogI2lu
Y2x1ZGUgIkxvY2FsaXplZFN0cmluZ3MuaCIKKyNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5Lmgi
CiAjaW5jbHVkZSAiUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuaCIKICNpbmNsdWRlICJSdW50aW1l
RW5hYmxlZEZlYXR1cmVzLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKQEAgLTQ3LDYgKzQ4LDEx
IEBACiAjaW5jbHVkZSA8d3RmL1R5cGVDYXN0cy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmlu
Z0J1aWxkZXIuaD4KIAorI2lmIFBMQVRGT1JNKE1BQykKKyNpbmNsdWRlICJJbWFnZVV0aWxpdGll
cy5oIgorI2luY2x1ZGUgIlVUSVV0aWxpdGllcy5oIgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIGNsYXNzIFVwbG9hZEJ1dHRvbkVsZW1lbnQ7CiB9CkBAIC0yMDQsMTYgKzIxMCw3IEBA
IHZvaWQgRmlsZUlucHV0VHlwZTo6aGFuZGxlRE9NQWN0aXZhdGVFdmUKICAgICAgICAgcmV0dXJu
OwogCiAgICAgaWYgKGF1dG8qIGNocm9tZSA9IHRoaXMtPmNocm9tZSgpKSB7Ci0gICAgICAgIEZp
bGVDaG9vc2VyU2V0dGluZ3Mgc2V0dGluZ3M7Ci0gICAgICAgIHNldHRpbmdzLmFsbG93c0RpcmVj
dG9yaWVzID0gYWxsb3dzRGlyZWN0b3JpZXMoKTsKLSAgICAgICAgc2V0dGluZ3MuYWxsb3dzTXVs
dGlwbGVGaWxlcyA9IGlucHV0Lmhhc0F0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24obXVs
dGlwbGVBdHRyKTsKLSAgICAgICAgc2V0dGluZ3MuYWNjZXB0TUlNRVR5cGVzID0gaW5wdXQuYWNj
ZXB0TUlNRVR5cGVzKCk7Ci0gICAgICAgIHNldHRpbmdzLmFjY2VwdEZpbGVFeHRlbnNpb25zID0g
aW5wdXQuYWNjZXB0RmlsZUV4dGVuc2lvbnMoKTsKLSAgICAgICAgc2V0dGluZ3Muc2VsZWN0ZWRG
aWxlcyA9IG1fZmlsZUxpc3QtPnBhdGhzKCk7Ci0jaWYgRU5BQkxFKE1FRElBX0NBUFRVUkUpCi0g
ICAgICAgIHNldHRpbmdzLm1lZGlhQ2FwdHVyZVR5cGUgPSBpbnB1dC5tZWRpYUNhcHR1cmVUeXBl
KCk7Ci0jZW5kaWYKLSAgICAgICAgYXBwbHlGaWxlQ2hvb3NlclNldHRpbmdzKHNldHRpbmdzKTsK
KyAgICAgICAgYXBwbHlGaWxlQ2hvb3NlclNldHRpbmdzKCk7CiAgICAgICAgIGNocm9tZS0+cnVu
T3BlblBhbmVsKCppbnB1dC5kb2N1bWVudCgpLmZyYW1lKCksICptX2ZpbGVDaG9vc2VyKTsKICAg
ICB9CiAKQEAgLTMzMiwxMiArMzI5LDI5IEBAIHZvaWQgRmlsZUlucHV0VHlwZTo6cmVxdWVzdElj
b24oY29uc3QgVmUKICAgICBjaHJvbWUtPmxvYWRJY29uRm9yRmlsZXMocGF0aHMsICptX2ZpbGVJ
Y29uTG9hZGVyKTsKIH0KIAotdm9pZCBGaWxlSW5wdXRUeXBlOjphcHBseUZpbGVDaG9vc2VyU2V0
dGluZ3MoY29uc3QgRmlsZUNob29zZXJTZXR0aW5ncyYgc2V0dGluZ3MpCitGaWxlQ2hvb3NlclNl
dHRpbmdzIEZpbGVJbnB1dFR5cGU6OmZpbGVDaG9vc2VyU2V0dGluZ3MoKSBjb25zdAoreworICAg
IEFTU0VSVChlbGVtZW50KCkpOworICAgIGF1dG8mIGlucHV0ID0gKmVsZW1lbnQoKTsKKworICAg
IEZpbGVDaG9vc2VyU2V0dGluZ3Mgc2V0dGluZ3M7CisgICAgc2V0dGluZ3MuYWxsb3dzRGlyZWN0
b3JpZXMgPSBhbGxvd3NEaXJlY3RvcmllcygpOworICAgIHNldHRpbmdzLmFsbG93c011bHRpcGxl
RmlsZXMgPSBpbnB1dC5oYXNBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKG11bHRpcGxl
QXR0cik7CisgICAgc2V0dGluZ3MuYWNjZXB0TUlNRVR5cGVzID0gaW5wdXQuYWNjZXB0TUlNRVR5
cGVzKCk7CisgICAgc2V0dGluZ3MuYWNjZXB0RmlsZUV4dGVuc2lvbnMgPSBpbnB1dC5hY2NlcHRG
aWxlRXh0ZW5zaW9ucygpOworICAgIHNldHRpbmdzLnNlbGVjdGVkRmlsZXMgPSBtX2ZpbGVMaXN0
LT5wYXRocygpOworI2lmIEVOQUJMRShNRURJQV9DQVBUVVJFKQorICAgIHNldHRpbmdzLm1lZGlh
Q2FwdHVyZVR5cGUgPSBpbnB1dC5tZWRpYUNhcHR1cmVUeXBlKCk7CisjZW5kaWYKKyAgICByZXR1
cm4gc2V0dGluZ3M7Cit9CisKK3ZvaWQgRmlsZUlucHV0VHlwZTo6YXBwbHlGaWxlQ2hvb3NlclNl
dHRpbmdzKCkKIHsKICAgICBpZiAobV9maWxlQ2hvb3NlcikKICAgICAgICAgbV9maWxlQ2hvb3Nl
ci0+aW52YWxpZGF0ZSgpOwogCi0gICAgbV9maWxlQ2hvb3NlciA9IEZpbGVDaG9vc2VyOjpjcmVh
dGUodGhpcywgc2V0dGluZ3MpOworICAgIG1fZmlsZUNob29zZXIgPSBGaWxlQ2hvb3Nlcjo6Y3Jl
YXRlKHRoaXMsIGZpbGVDaG9vc2VyU2V0dGluZ3MoKSk7CiB9CiAKIGJvb2wgRmlsZUlucHV0VHlw
ZTo6YWxsb3dzRGlyZWN0b3JpZXMoKSBjb25zdApAQCAtNDU0LDIyICs0NjgsNDggQEAgdm9pZCBG
aWxlSW5wdXRUeXBlOjppY29uTG9hZGVkKFJlZlB0cjxJYwogfQogCiAjaWYgRU5BQkxFKERSQUdf
U1VQUE9SVCkKK1ZlY3RvcjxTdHJpbmc+IEZpbGVJbnB1dFR5cGU6OnRyYW5zY29kZURyb3BwZWRJ
bWFnZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhdGhzKSBjb25zdAoreworI2lmIFBMQVRGT1JN
KE1BQykKKyAgICBhdXRvIHNldHRpbmdzID0gZmlsZUNob29zZXJTZXR0aW5ncygpOworICAgIGF1
dG8gYWxsb3dlZE1JTUVUeXBlcyA9IE1JTUVUeXBlUmVnaXN0cnk6OmFsbG93ZWRNSU1FVHlwZXMo
c2V0dGluZ3MuYWNjZXB0TUlNRVR5cGVzLCBzZXR0aW5ncy5hY2NlcHRGaWxlRXh0ZW5zaW9ucyk7
CisKKyAgICBhdXRvIHRyYW5zY29kaW5nUGF0aHMgPSBmaW5kSW1hZ2VzRm9yVHJhbnNjb2Rpbmco
cGF0aHMsIGFsbG93ZWRNSU1FVHlwZXMpOworICAgIGlmICh0cmFuc2NvZGluZ1BhdGhzLmlzRW1w
dHkoKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIGF1dG8gdHJhbnNjb2RpbmdNSU1FVHlw
ZSA9IE1JTUVUeXBlUmVnaXN0cnk6OnByZWZlcnJlZEltYWdlTUlNRVR5cGVGb3JFbmNvZGluZyhh
bGxvd2VkTUlNRVR5cGVzLCB7IH0pOworICAgIGlmICh0cmFuc2NvZGluZ01JTUVUeXBlLmlzTnVs
bCgpKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgYXV0byB0cmFuc2NvZGluZ1VUSSA9IFVU
SUZyb21NSU1FVHlwZSh0cmFuc2NvZGluZ01JTUVUeXBlKTsKKyAgICBhdXRvIHRyYW5zY29kaW5n
RXh0ZW5zaW9uID0gV2ViQ29yZTo6TUlNRVR5cGVSZWdpc3RyeTo6cHJlZmVycmVkRXh0ZW5zaW9u
Rm9yTUlNRVR5cGUodHJhbnNjb2RpbmdNSU1FVHlwZSk7CisKKyAgICByZXR1cm4gdHJhbnNjb2Rl
SW1hZ2VzKHRyYW5zY29kaW5nUGF0aHMsIHRyYW5zY29kaW5nVVRJLCB0cmFuc2NvZGluZ0V4dGVu
c2lvbik7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShwYXRocyk7CisgICAgcmV0dXJuIHsgfTsK
KyNlbmRpZgorfQorCiBib29sIEZpbGVJbnB1dFR5cGU6OnJlY2VpdmVEcm9wcGVkRmlsZXMoY29u
c3QgRHJhZ0RhdGEmIGRyYWdEYXRhKQogewogICAgIGF1dG8gcGF0aHMgPSBkcmFnRGF0YS5hc0Zp
bGVuYW1lcygpOwogICAgIGlmIChwYXRocy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAorICAgIGF1dG8gcmVwbGFjZW1lbnRQYXRocyA9IHRyYW5zY29kZURyb3BwZWRJbWFnZXMo
cGF0aHMpOworICAgIAogICAgIEFTU0VSVChlbGVtZW50KCkpOwogICAgIGlmIChlbGVtZW50KCkt
Pmhhc0F0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24obXVsdGlwbGVBdHRyKSkgewogICAg
ICAgICBWZWN0b3I8RmlsZUNob29zZXJGaWxlSW5mbz4gZmlsZXM7CiAgICAgICAgIGZpbGVzLnJl
c2VydmVJbml0aWFsQ2FwYWNpdHkocGF0aHMuc2l6ZSgpKTsKLSAgICAgICAgZm9yIChhdXRvJiBw
YXRoIDogcGF0aHMpCi0gICAgICAgICAgICBmaWxlcy51bmNoZWNrZWRBcHBlbmQoeyBwYXRoLCB7
IH0sIHsgfSB9KTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDAsIHNpemUgPSBwYXRocy5zaXpl
KCk7IGkgPCBzaXplOyArK2kpCisgICAgICAgICAgICBmaWxlcy51bmNoZWNrZWRBcHBlbmQoeyBw
YXRoc1tpXSwgaSA8IHJlcGxhY2VtZW50UGF0aHMuc2l6ZSgpID8gcmVwbGFjZW1lbnRQYXRoc1tp
XSA6IG51bGxTdHJpbmcoKSwgeyB9IH0pOwogCiAgICAgICAgIGZpbGVzQ2hvc2VuKGZpbGVzKTsK
ICAgICB9IGVsc2UKLSAgICAgICAgZmlsZXNDaG9zZW4oeyB7IHBhdGhzWzBdLCB7IH0sIHsgfSB9
IH0pOworICAgICAgICBmaWxlc0Nob3Nlbih7IHsgcGF0aHNbMF0sICFyZXBsYWNlbWVudFBhdGhz
LmlzRW1wdHkoKSA/IHJlcGxhY2VtZW50UGF0aHNbMF0gOiBudWxsU3RyaW5nKCksIHsgfSB9IH0p
OwogCiAgICAgcmV0dXJuIHRydWU7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0ZpbGVJ
bnB1dFR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0ZpbGVJbnB1dFR5
cGUuaAkocmV2aXNpb24gMjY1MzA4KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9GaWxlSW5wdXRU
eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTcxLDYgKzcxLDcgQEAgcHJpdmF0ZToKICAgICB2b2lk
IHNldFZhbHVlKGNvbnN0IFN0cmluZyYsIGJvb2wgdmFsdWVDaGFuZ2VkLCBUZXh0RmllbGRFdmVu
dEJlaGF2aW9yKSBmaW5hbDsKIAogI2lmIEVOQUJMRShEUkFHX1NVUFBPUlQpCisgICAgVmVjdG9y
PFN0cmluZz4gdHJhbnNjb2RlRHJvcHBlZEltYWdlcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgZmls
ZW5hbWVzKSBjb25zdDsKICAgICBib29sIHJlY2VpdmVEcm9wcGVkRmlsZXMoY29uc3QgRHJhZ0Rh
dGEmKSBmaW5hbDsKICNlbmRpZgogCkBAIC04Niw3ICs4Nyw4IEBAIHByaXZhdGU6CiAgICAgLy8g
RmlsZUljb25Mb2FkZXJDbGllbnQgaW1wbGVtZW50YXRpb24uCiAgICAgdm9pZCBpY29uTG9hZGVk
KFJlZlB0cjxJY29uPiYmKSBmaW5hbDsKIAotICAgIHZvaWQgYXBwbHlGaWxlQ2hvb3NlclNldHRp
bmdzKGNvbnN0IEZpbGVDaG9vc2VyU2V0dGluZ3MmKTsKKyAgICBGaWxlQ2hvb3NlclNldHRpbmdz
IGZpbGVDaG9vc2VyU2V0dGluZ3MoKSBjb25zdDsKKyAgICB2b2lkIGFwcGx5RmlsZUNob29zZXJT
ZXR0aW5ncygpOwogICAgIHZvaWQgZGlkQ3JlYXRlRmlsZUxpc3QoUmVmPEZpbGVMaXN0PiYmLCBS
ZWZQdHI8SWNvbj4mJik7CiAgICAgdm9pZCByZXF1ZXN0SWNvbihjb25zdCBWZWN0b3I8U3RyaW5n
PiYpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVV0aWxp
dGllcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0lt
YWdlVXRpbGl0aWVzLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvSW1hZ2VVdGlsaXRpZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQzIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8g
R2l2ZW4gYSBsaXN0IG9mIGZpbGVzJyAncGF0aHMnIGFuZCAnYWxsb3dlZE1JTUVUeXBlcycsIHRo
ZSBmdW5jdGlvbiByZXR1cm5zIGEgbGlzdAorLy8gb2Ygc3RyaW5ncyB3aG9zZSBzaXplIGlzIHRo
ZSBzYW1lIGFzIHRoZSBzaXplIG9mICdwYXRocycgYW5kIGl0cyBlbnRyaWVzIGFyZSBhbGwKKy8v
IG51bGwgc3RyaW5ncyBleGNlcHQgdGhlIG9uZXMgd2hvc2UgTUlNRSB0eXBlcyBhcmUgbm90IGlu
ICdhbGxvd2VkTUlNRVR5cGVzJy4KK1dFQkNPUkVfRVhQT1JUIFZlY3RvcjxTdHJpbmc+IGZpbmRJ
bWFnZXNGb3JUcmFuc2NvZGluZyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGF0aHMsIGNvbnN0IFZl
Y3RvcjxTdHJpbmc+JiBhbGxvd2VkTUlNRVR5cGVzKTsKKworLy8gR2l2ZW4gYSBsaXN0IG9mIGlt
YWdlcycgJ3BhdGhzJywgdGhpcyBmdW5jdGlvbiB0cmFuc2NvZGVzIHRoZXNlIGltYWdlcyB0byBh
IG5ldworLy8gZm9ybWF0IHdob3NlIFVUSSBpcyBkZXN0aW5hdGlvblVUSS4gVGhlIHJlc3VsdCBv
ZiB0aGUgdHJhbnNjb2Rpbmcgd2lsbCBiZSB3cml0dGVuCisvLyB0byB0ZW1wb3JhcnkgZmlsZXMg
d2hvc2UgZXh0ZW5zaW9ucyBhcmUgJ2Rlc3RpbmF0aW9uRXh0ZW5zaW9uJy4gSXQgcmV0dXJucyBh
IGxpc3QKKy8vIG9mIHBhdGhzIHRvIHRoZSByZXN1bHQgdGVtcG9yYXJ5IGZpbGVzLiBJZiBhbiBl
bnRyeSBpbiAncGF0aHMnIGlzIG51bGwgb3IgYW4gZXJyb3IKKy8vIGhhcHBlbnMgd2hpbGUgdHJh
bnNjb2RpbmcsIGEgbnVsbCBzdHJpbmcgd2lsbCBiZSBhZGRlZCB0byB0aGUgcmV0dXJuZWQgbGlz
dC4KK1dFQkNPUkVfRVhQT1JUIFZlY3RvcjxTdHJpbmc+IHRyYW5zY29kZUltYWdlcyhjb25zdCBW
ZWN0b3I8U3RyaW5nPiYgcGF0aHMsIGNvbnN0IFN0cmluZyYgZGVzdGluYXRpb25VVEksIGNvbnN0
IFN0cmluZyYgZGVzdGluYXRpb25FeHRlbnNpb24pOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlVXRpbGl0
aWVzQ0cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NnL0ltYWdlVXRpbGl0aWVzQ0cuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlVXRpbGl0aWVzQ0cuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMTIyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkltYWdlVXRpbGl0aWVzLmgiCisKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVk
ZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgorI2luY2x1ZGUgPEltYWdlSU8vSW1hZ2VJTy5oPgorI2lu
Y2x1ZGUgPHd0Zi9GaWxlU3lzdGVtLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBTdHJpbmcgdHJhbnNjb2RlSW1hZ2UoY29u
c3QgU3RyaW5nJiBwYXRoLCBjb25zdCBTdHJpbmcmIGRlc3RpbmF0aW9uVVRJLCBjb25zdCBTdHJp
bmcmIGRlc3RpbmF0aW9uRXh0ZW5zaW9uKQoreworICAgIGF1dG8gc291cmNlVVJMID0gYWRvcHRD
RihDRlVSTENyZWF0ZVdpdGhGaWxlU3lzdGVtUGF0aChrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBwYXRo
LmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCksIGtDRlVSTFBPU0lYUGF0aFN0eWxlLCBmYWxzZSkpOwor
ICAgIGF1dG8gc291cmNlID0gYWRvcHRDRihDR0ltYWdlU291cmNlQ3JlYXRlV2l0aFVSTChzb3Vy
Y2VVUkwuZ2V0KCksIG51bGxwdHIpKTsKKyAgICBpZiAoIXNvdXJjZSkKKyAgICAgICAgcmV0dXJu
IG51bGxTdHJpbmcoKTsKKworICAgIGF1dG8gc291cmNlVVRJID0gU3RyaW5nKENHSW1hZ2VTb3Vy
Y2VHZXRUeXBlKHNvdXJjZS5nZXQoKSkpOworICAgIGlmIChzb3VyY2VVVEkgPT0gZGVzdGluYXRp
b25VVEkpCisgICAgICAgIHJldHVybiBudWxsU3RyaW5nKCk7CisKKyAgICAvLyBJdCBpcyBpbXBv
cnRhbnQgdG8gYWRkIHRoZSBhcHByb3ByaWF0ZSBmaWxlIGV4dGVuc2lvbiB0byB0aGUgdGVtcG9y
YXJ5IGZpbGUgcGF0aC4KKyAgICAvLyBUaGUgRmlsZSBvYmplY3QgZGVwZW5kcyBzb2xlbHkgb24g
dGhlIGV4dGVuc2lvbiB0byBrbm93IHRoZSBNSU1FIHR5cGUgb2YgdGhlIGZpbGUuCisgICAgYXV0
byBzdWZmaXggPSBtYWtlU3RyaW5nKCcuJywgZGVzdGluYXRpb25FeHRlbnNpb24pOworCisgICAg
RmlsZVN5c3RlbTo6UGxhdGZvcm1GaWxlSGFuZGxlIGRlc3RpbmF0aW9uRmlsZUhhbmRsZTsKKyAg
ICBTdHJpbmcgZGVzdGluYXRpb25QYXRoID0gRmlsZVN5c3RlbTo6b3BlblRlbXBvcmFyeUZpbGUo
InRlbXBJbWFnZSJfcywgZGVzdGluYXRpb25GaWxlSGFuZGxlLCBzdWZmaXgpOworICAgIGlmIChk
ZXN0aW5hdGlvbkZpbGVIYW5kbGUgPT0gRmlsZVN5c3RlbTo6aW52YWxpZFBsYXRmb3JtRmlsZUhh
bmRsZSkgeworICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihJbWFnZXMsICJ0cmFuc2NvZGVJbWFn
ZTogRGVzdGluYXRpb24gaW1hZ2UgY291bGQgbm90IGJlIGNyZWF0ZWQ6ICVzICVzXG4iLCBwYXRo
LnV0ZjgoKS5kYXRhKCksIGRlc3RpbmF0aW9uVVRJLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICBy
ZXR1cm4gbnVsbFN0cmluZygpOworICAgIH0KKworICAgIENHRGF0YUNvbnN1bWVyQ2FsbGJhY2tz
IGNhbGxiYWNrcyA9IHsKKyAgICAgICAgW10odm9pZCogaW5mbywgY29uc3Qgdm9pZCogYnVmZmVy
LCBzaXplX3QgY291bnQpIC0+IHNpemVfdCB7CisgICAgICAgICAgICBhdXRvIGhhbmRsZSA9ICpz
dGF0aWNfY2FzdDxGaWxlU3lzdGVtOjpQbGF0Zm9ybUZpbGVIYW5kbGUqPihpbmZvKTsKKyAgICAg
ICAgICAgIHJldHVybiBGaWxlU3lzdGVtOjp3cml0ZVRvRmlsZShoYW5kbGUsIHN0YXRpY19jYXN0
PGNvbnN0IGNoYXIqPihidWZmZXIpLCBjb3VudCk7CisgICAgICAgIH0sCisgICAgICAgIG51bGxw
dHIKKyAgICB9OworCisgICAgYXV0byBjb25zdW1lciA9IGFkb3B0Q0YoQ0dEYXRhQ29uc3VtZXJD
cmVhdGUoJmRlc3RpbmF0aW9uRmlsZUhhbmRsZSwgJmNhbGxiYWNrcykpOworICAgIGF1dG8gZGVz
dGluYXRpb24gPSBhZG9wdENGKENHSW1hZ2VEZXN0aW5hdGlvbkNyZWF0ZVdpdGhEYXRhQ29uc3Vt
ZXIoY29uc3VtZXIuZ2V0KCksIGRlc3RpbmF0aW9uVVRJLmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCks
IDEsIG51bGxwdHIpKTsKKworICAgIENHSW1hZ2VEZXN0aW5hdGlvbkFkZEltYWdlRnJvbVNvdXJj
ZShkZXN0aW5hdGlvbi5nZXQoKSwgc291cmNlLmdldCgpLCAwLCBudWxscHRyKTsKKworICAgIGlm
ICghQ0dJbWFnZURlc3RpbmF0aW9uRmluYWxpemUoZGVzdGluYXRpb24uZ2V0KCkpKSB7CisgICAg
ICAgIFJFTEVBU0VfTE9HX0VSUk9SKEltYWdlcywgInRyYW5zY29kZUltYWdlOiBJbWFnZSB0cmFu
c2NvZGluZyBmYWlsczogJXMgJXNcbiIsIHBhdGgudXRmOCgpLmRhdGEoKSwgZGVzdGluYXRpb25V
VEkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIEZpbGVTeXN0ZW06OmNsb3NlRmlsZShkZXN0aW5h
dGlvbkZpbGVIYW5kbGUpOworICAgICAgICBGaWxlU3lzdGVtOjpkZWxldGVGaWxlKGRlc3RpbmF0
aW9uUGF0aCk7CisgICAgICAgIHJldHVybiBudWxsU3RyaW5nKCk7CisgICAgfQorCisgICAgRmls
ZVN5c3RlbTo6Y2xvc2VGaWxlKGRlc3RpbmF0aW9uRmlsZUhhbmRsZSk7CisgICAgcmV0dXJuIGRl
c3RpbmF0aW9uUGF0aDsKK30KKworVmVjdG9yPFN0cmluZz4gZmluZEltYWdlc0ZvclRyYW5zY29k
aW5nKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXRocywgY29uc3QgVmVjdG9yPFN0cmluZz4mIGFs
bG93ZWRNSU1FVHlwZXMpCit7CisgICAgVmVjdG9yPFN0cmluZz4gdHJhbnNjb2RpbmdQYXRoczsK
KyAgICB0cmFuc2NvZGluZ1BhdGhzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkocGF0aHMuc2l6ZSgp
KTsKKworICAgIGJvb2wgbmVlZHNUcmFuc2NvZGluZyA9IGZhbHNlOworCisgICAgZm9yIChhdXRv
JiBwYXRoIDogcGF0aHMpIHsKKyAgICAgICAgLy8gQXBwZW5kIGEgcGF0aCBvZiB0aGUgaW1hZ2Ug
d2hpY2ggbmVlZHMgdHJhbnNjb2RpbmcuIE90aGVyd2lzZSBhcHBlbmQgYSBudWxsIHN0cmluZy4K
KyAgICAgICAgaWYgKCFhbGxvd2VkTUlNRVR5cGVzLmNvbnRhaW5zKFdlYkNvcmU6Ok1JTUVUeXBl
UmVnaXN0cnk6Om1pbWVUeXBlRm9yUGF0aChwYXRoKSkpIHsKKyAgICAgICAgICAgIHRyYW5zY29k
aW5nUGF0aHMudW5jaGVja2VkQXBwZW5kKHBhdGgpOworICAgICAgICAgICAgbmVlZHNUcmFuc2Nv
ZGluZyA9IHRydWU7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgdHJhbnNjb2RpbmdQYXRo
cy51bmNoZWNrZWRBcHBlbmQobnVsbFN0cmluZygpKTsKKyAgICB9CisKKyAgICAvLyBJZiBub25l
IG9mIHRoZSBmaWxlcyBuZWVkcyBpbWFnZSB0cmFuc2NvZGluZywgcmV0dXJuIGFuIGVtcHR5IFZl
Y3Rvci4KKyAgICByZXR1cm4gbmVlZHNUcmFuc2NvZGluZyA/IHRyYW5zY29kaW5nUGF0aHMgOiBW
ZWN0b3I8U3RyaW5nPigpOworfQorCitWZWN0b3I8U3RyaW5nPiB0cmFuc2NvZGVJbWFnZXMoY29u
c3QgVmVjdG9yPFN0cmluZz4mIHBhdGhzLCBjb25zdCBTdHJpbmcmIGRlc3RpbmF0aW9uVVRJLCBj
b25zdCBTdHJpbmcmIGRlc3RpbmF0aW9uRXh0ZW5zaW9uKQoreworICAgIEFTU0VSVCghZGVzdGlu
YXRpb25VVEkuaXNOdWxsKCkpOworICAgIEFTU0VSVCghZGVzdGluYXRpb25FeHRlbnNpb24uaXNO
dWxsKCkpOworICAgIAorICAgIFZlY3RvcjxTdHJpbmc+IHRyYW5zY29kZWRQYXRoczsKKyAgICB0
cmFuc2NvZGVkUGF0aHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShwYXRocy5zaXplKCkpOworCisg
ICAgZm9yIChhdXRvJiBwYXRoIDogcGF0aHMpIHsKKyAgICAgICAgLy8gQXBwZW5kIHRoZSB0cmFu
c2NvZGVkIHBhdGggaWYgdGhlIGltYWdlIG5lZWRzIHRyYW5zY29kaW5nLiBPdGhlcndpc2UgYXBw
ZW5kIGEgbnVsbCBzdHJpbmcuCisgICAgICAgIGlmICghcGF0aC5pc051bGwoKSkKKyAgICAgICAg
ICAgIHRyYW5zY29kZWRQYXRocy51bmNoZWNrZWRBcHBlbmQodHJhbnNjb2RlSW1hZ2UocGF0aCwg
ZGVzdGluYXRpb25VVEksIGRlc3RpbmF0aW9uRXh0ZW5zaW9uKSk7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIHRyYW5zY29kZWRQYXRocy51bmNoZWNrZWRBcHBlbmQobnVsbFN0cmluZygpKTsK
KyAgICB9CisKKyAgICByZXR1cm4gdHJhbnNjb2RlZFBhdGhzOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkocmV2aXNpb24gMjY1MzA4KQorKysgU291cmNlL1dlYktp
dC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNyBAQAorMjAyMC0wOC0wNSAg
U2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIFtt
YWNPU10gRHJhZy9kcm9wIGFuIGltYWdlIG9mIGEgdW5zdXBwb3J0ZWQgZm9ybWF0IHRvIGFuIGZp
bGUgaW5wdXQgZWxlbWVudCBzaG91bGQgY29udmVydCBpdCB0byBhIHN1cHBvcnRlZCBmb3JtYXQK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMjQ4Mgor
ICAgICAgICA8cmRhcjovL3Byb2JsZW0vNjM3MzE2NzI+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBQbGF0Zm9ybS9JbWFnZVV0aWxpdGllcy5oOiBS
ZW1vdmVkLgorICAgICAgICAqIFBsYXRmb3JtL2NnOiBSZW1vdmVkLgorICAgICAgICAqIFNvdXJj
ZXNDb2NvYS50eHQ6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHA6CisgICAg
ICAgICogV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisKIDIwMjAtMDgtMDUgIFBl
ciBBcm5lIFZvbGxhbiAgPHB2b2xsYW5AYXBwbGUuY29tPgogCiAgICAgICAgIFtDb2NvYV0gU2Fu
ZGJveCBleHRlbnNpb24gdG9rZW4gbm90IGNsZWFyZWQgZnJvbSBtZW1vcnkKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1Nv
dXJjZXNDb2NvYS50eHQJKHJldmlzaW9uIDI2NTMwOCkKKysrIFNvdXJjZS9XZWJLaXQvU291cmNl
c0NvY29hLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNjUsOCArNjUsNiBAQCBHUFVQcm9jZXNzL3dl
YnJ0Yy9MaWJXZWJSVENDb2RlY3NQcm94eS5tCiAKIFBsYXRmb3JtL2NmL01vZHVsZUNGLmNwcAog
Ci1QbGF0Zm9ybS9jZy9JbWFnZVV0aWxpdGllc0NHLmNwcAotCiBQbGF0Zm9ybS9jbGFzc2lmaWVy
L2NvY29hL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVyQ29jb2EuY3BwCiBQbGF0Zm9y
bS9jbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVyLmNwcAogCkluZGV4
OiBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0ltYWdlVXRpbGl0aWVzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9QbGF0Zm9ybS9JbWFnZVV0aWxpdGllcy5oCShyZXZpc2lvbiAyNjUzMDgp
CisrKyBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0ltYWdlVXRpbGl0aWVzLmgJKG5vbmV4aXN0ZW50
KQpAQCAtMSw0MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLW5hbWVzcGFj
ZSBXZWJLaXQgewotCi0vLyBHaXZlbiBhIGxpc3Qgb2YgZmlsZXMnICdwYXRocycgYW5kICdhbGxv
d2VkTUlNRVR5cGVzJywgdGhlIGZ1bmN0aW9uIHJldHVybnMgYSBsaXN0Ci0vLyBvZiBzdHJpbmdz
IHdob3NlIHNpemUgaXMgdGhlIHNhbWUgYXMgdGhlIHNpemUgb2YgJ3BhdGhzJyBhbmQgaXRzIGVu
dHJpZXMgYXJlIGFsbAotLy8gbnVsbCBzdHJpbmdzIGV4Y2VwdCB0aGUgb25lcyB3aG9zZSBNSU1F
IHR5cGVzIGFyZSBub3QgaW4gJ2FsbG93ZWRNSU1FVHlwZXMnLgotVmVjdG9yPFN0cmluZz4gZmlu
ZEltYWdlc0ZvclRyYW5zY29kaW5nKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXRocywgY29uc3Qg
VmVjdG9yPFN0cmluZz4mIGFsbG93ZWRNSU1FVHlwZXMpOwotCi0vLyBHaXZlbiBhIGxpc3Qgb2Yg
aW1hZ2VzJyAncGF0aHMnLCB0aGlzIGZ1bmN0aW9uIHRyYW5zY29kZXMgdGhlc2UgaW1hZ2VzIHRv
IGEgbmV3Ci0vLyBmb3JtYXQgd2hvc2UgVVRJIGlzIGRlc3RpbmF0aW9uVVRJLiBUaGUgcmVzdWx0
IG9mIHRoZSB0cmFuc2NvZGluZyB3aWxsIGJlIHdyaXR0ZW4KLS8vIHRvIHRlbXBvcmFyeSBmaWxl
cyB3aG9zZSBleHRlbnNpb25zIGFyZSAnZGVzdGluYXRpb25FeHRlbnNpb24nLiBJdCByZXR1cm5z
IGEgbGlzdAotLy8gb2YgcGF0aHMgdG8gdGhlIHJlc3VsdCB0ZW1wb3JhcnkgZmlsZXMuIElmIGFu
IGVudHJ5IGluICdwYXRocycgaXMgbnVsbCBvciBhbiBlcnJvcgotLy8gaGFwcGVucyB3aGlsZSB0
cmFuc2NvZGluZywgYSBudWxsIHN0cmluZyB3aWxsIGJlIGFkZGVkIHRvIHRoZSByZXR1cm5lZCBs
aXN0LgotVmVjdG9yPFN0cmluZz4gdHJhbnNjb2RlSW1hZ2VzKGNvbnN0IFZlY3RvcjxTdHJpbmc+
JiBwYXRocywgY29uc3QgU3RyaW5nJiBkZXN0aW5hdGlvblVUSSwgY29uc3QgU3RyaW5nJiBkZXN0
aW5hdGlvbkV4dGVuc2lvbik7Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAoKUHJvcGVydHkgY2hh
bmdlcyBvbjogU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JbWFnZVV0aWxpdGllcy5oCl9fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X18KRGVsZXRlZDogc3ZuOmVvbC1zdHlsZQojIyAtMSArMCwwICMjCi1uYXRpdmUKXCBObyBuZXds
aW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogU291cmNlL1dlYktpdC9QbGF0Zm9ybS9jZy9J
bWFnZVV0aWxpdGllc0NHLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1BsYXRmb3Jt
L2NnL0ltYWdlVXRpbGl0aWVzQ0cuY3BwCShyZXZpc2lvbiAyNjUzMDgpCisrKyBTb3VyY2UvV2Vi
S2l0L1BsYXRmb3JtL2NnL0ltYWdlVXRpbGl0aWVzQ0cuY3BwCShub25leGlzdGVudCkKQEAgLTEs
MTIyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAi
SW1hZ2VVdGlsaXRpZXMuaCIKLQotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlIDxJbWFn
ZUlPL0ltYWdlSU8uaD4KLSNpbmNsdWRlIDxXZWJDb3JlL01JTUVUeXBlUmVnaXN0cnkuaD4KLSNp
bmNsdWRlIDx3dGYvRmlsZVN5c3RlbS5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
LQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLXN0YXRpYyBTdHJpbmcgdHJhbnNjb2RlSW1hZ2UoY29u
c3QgU3RyaW5nJiBwYXRoLCBjb25zdCBTdHJpbmcmIGRlc3RpbmF0aW9uVVRJLCBjb25zdCBTdHJp
bmcmIGRlc3RpbmF0aW9uRXh0ZW5zaW9uKQotewotICAgIGF1dG8gc291cmNlVVJMID0gYWRvcHRD
RihDRlVSTENyZWF0ZVdpdGhGaWxlU3lzdGVtUGF0aChrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBwYXRo
LmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCksIGtDRlVSTFBPU0lYUGF0aFN0eWxlLCBmYWxzZSkpOwot
ICAgIGF1dG8gc291cmNlID0gYWRvcHRDRihDR0ltYWdlU291cmNlQ3JlYXRlV2l0aFVSTChzb3Vy
Y2VVUkwuZ2V0KCksIG51bGxwdHIpKTsKLSAgICBpZiAoIXNvdXJjZSkKLSAgICAgICAgcmV0dXJu
IG51bGxTdHJpbmcoKTsKLQotICAgIGF1dG8gc291cmNlVVRJID0gU3RyaW5nKENHSW1hZ2VTb3Vy
Y2VHZXRUeXBlKHNvdXJjZS5nZXQoKSkpOwotICAgIGlmIChzb3VyY2VVVEkgPT0gZGVzdGluYXRp
b25VVEkpCi0gICAgICAgIHJldHVybiBudWxsU3RyaW5nKCk7Ci0KLSAgICAvLyBJdCBpcyBpbXBv
cnRhbnQgdG8gYWRkIHRoZSBhcHByb3ByaWF0ZSBmaWxlIGV4dGVuc2lvbiB0byB0aGUgdGVtcG9y
YXJ5IGZpbGUgcGF0aC4KLSAgICAvLyBUaGUgRmlsZSBvYmplY3QgZGVwZW5kcyBzb2xlbHkgb24g
dGhlIGV4dGVuc2lvbiB0byBrbm93IHRoZSBNSU1FIHR5cGUgb2YgdGhlIGZpbGUuCi0gICAgYXV0
byBzdWZmaXggPSBtYWtlU3RyaW5nKCcuJywgZGVzdGluYXRpb25FeHRlbnNpb24pOwotCi0gICAg
RmlsZVN5c3RlbTo6UGxhdGZvcm1GaWxlSGFuZGxlIGRlc3RpbmF0aW9uRmlsZUhhbmRsZTsKLSAg
ICBTdHJpbmcgZGVzdGluYXRpb25QYXRoID0gRmlsZVN5c3RlbTo6b3BlblRlbXBvcmFyeUZpbGUo
InRlbXBJbWFnZSJfcywgZGVzdGluYXRpb25GaWxlSGFuZGxlLCBzdWZmaXgpOwotICAgIGlmIChk
ZXN0aW5hdGlvbkZpbGVIYW5kbGUgPT0gRmlsZVN5c3RlbTo6aW52YWxpZFBsYXRmb3JtRmlsZUhh
bmRsZSkgewotICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihJbWFnZXMsICJ0cmFuc2NvZGVJbWFn
ZTogRGVzdGluYXRpb24gaW1hZ2UgY291bGQgbm90IGJlIGNyZWF0ZWQ6ICVzICVzXG4iLCBwYXRo
LnV0ZjgoKS5kYXRhKCksIGRlc3RpbmF0aW9uVVRJLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICBy
ZXR1cm4gbnVsbFN0cmluZygpOwotICAgIH0KLQotICAgIENHRGF0YUNvbnN1bWVyQ2FsbGJhY2tz
IGNhbGxiYWNrcyA9IHsKLSAgICAgICAgW10odm9pZCogaW5mbywgY29uc3Qgdm9pZCogYnVmZmVy
LCBzaXplX3QgY291bnQpIC0+IHNpemVfdCB7Ci0gICAgICAgICAgICBhdXRvIGhhbmRsZSA9ICpz
dGF0aWNfY2FzdDxGaWxlU3lzdGVtOjpQbGF0Zm9ybUZpbGVIYW5kbGUqPihpbmZvKTsKLSAgICAg
ICAgICAgIHJldHVybiBGaWxlU3lzdGVtOjp3cml0ZVRvRmlsZShoYW5kbGUsIHN0YXRpY19jYXN0
PGNvbnN0IGNoYXIqPihidWZmZXIpLCBjb3VudCk7Ci0gICAgICAgIH0sCi0gICAgICAgIG51bGxw
dHIKLSAgICB9OwotCi0gICAgYXV0byBjb25zdW1lciA9IGFkb3B0Q0YoQ0dEYXRhQ29uc3VtZXJD
cmVhdGUoJmRlc3RpbmF0aW9uRmlsZUhhbmRsZSwgJmNhbGxiYWNrcykpOwotICAgIGF1dG8gZGVz
dGluYXRpb24gPSBhZG9wdENGKENHSW1hZ2VEZXN0aW5hdGlvbkNyZWF0ZVdpdGhEYXRhQ29uc3Vt
ZXIoY29uc3VtZXIuZ2V0KCksIGRlc3RpbmF0aW9uVVRJLmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCks
IDEsIG51bGxwdHIpKTsKLQotICAgIENHSW1hZ2VEZXN0aW5hdGlvbkFkZEltYWdlRnJvbVNvdXJj
ZShkZXN0aW5hdGlvbi5nZXQoKSwgc291cmNlLmdldCgpLCAwLCBudWxscHRyKTsKLQotICAgIGlm
ICghQ0dJbWFnZURlc3RpbmF0aW9uRmluYWxpemUoZGVzdGluYXRpb24uZ2V0KCkpKSB7Ci0gICAg
ICAgIFJFTEVBU0VfTE9HX0VSUk9SKEltYWdlcywgInRyYW5zY29kZUltYWdlOiBJbWFnZSB0cmFu
c2NvZGluZyBmYWlsczogJXMgJXNcbiIsIHBhdGgudXRmOCgpLmRhdGEoKSwgZGVzdGluYXRpb25V
VEkudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgIEZpbGVTeXN0ZW06OmNsb3NlRmlsZShkZXN0aW5h
dGlvbkZpbGVIYW5kbGUpOwotICAgICAgICBGaWxlU3lzdGVtOjpkZWxldGVGaWxlKGRlc3RpbmF0
aW9uUGF0aCk7Ci0gICAgICAgIHJldHVybiBudWxsU3RyaW5nKCk7Ci0gICAgfQotCi0gICAgRmls
ZVN5c3RlbTo6Y2xvc2VGaWxlKGRlc3RpbmF0aW9uRmlsZUhhbmRsZSk7Ci0gICAgcmV0dXJuIGRl
c3RpbmF0aW9uUGF0aDsKLX0KLQotVmVjdG9yPFN0cmluZz4gZmluZEltYWdlc0ZvclRyYW5zY29k
aW5nKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXRocywgY29uc3QgVmVjdG9yPFN0cmluZz4mIGFs
bG93ZWRNSU1FVHlwZXMpCi17Ci0gICAgVmVjdG9yPFN0cmluZz4gdHJhbnNjb2RpbmdQYXRoczsK
LSAgICB0cmFuc2NvZGluZ1BhdGhzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkocGF0aHMuc2l6ZSgp
KTsKLQotICAgIGJvb2wgbmVlZHNUcmFuc2NvZGluZyA9IGZhbHNlOwotCi0gICAgZm9yIChhdXRv
JiBwYXRoIDogcGF0aHMpIHsKLSAgICAgICAgLy8gQXBwZW5kIGEgcGF0aCBvZiB0aGUgaW1hZ2Ug
d2hpY2ggbmVlZHMgdHJhbnNjb2RpbmcuIE90aGVyd2lzZSBhcHBlbmQgYSBudWxsIHN0cmluZy4K
LSAgICAgICAgaWYgKCFhbGxvd2VkTUlNRVR5cGVzLmNvbnRhaW5zKFdlYkNvcmU6Ok1JTUVUeXBl
UmVnaXN0cnk6Om1pbWVUeXBlRm9yUGF0aChwYXRoKSkpIHsKLSAgICAgICAgICAgIHRyYW5zY29k
aW5nUGF0aHMudW5jaGVja2VkQXBwZW5kKHBhdGgpOwotICAgICAgICAgICAgbmVlZHNUcmFuc2Nv
ZGluZyA9IHRydWU7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgdHJhbnNjb2RpbmdQYXRo
cy51bmNoZWNrZWRBcHBlbmQobnVsbFN0cmluZygpKTsKLSAgICB9Ci0KLSAgICAvLyBJZiBub25l
IG9mIHRoZSBmaWxlcyBuZWVkcyBpbWFnZSB0cmFuc2NvZGluZywgcmV0dXJuIGFuIGVtcHR5IFZl
Y3Rvci4KLSAgICByZXR1cm4gbmVlZHNUcmFuc2NvZGluZyA/IHRyYW5zY29kaW5nUGF0aHMgOiBW
ZWN0b3I8U3RyaW5nPigpOwotfQotCi1WZWN0b3I8U3RyaW5nPiB0cmFuc2NvZGVJbWFnZXMoY29u
c3QgVmVjdG9yPFN0cmluZz4mIHBhdGhzLCBjb25zdCBTdHJpbmcmIGRlc3RpbmF0aW9uVVRJLCBj
b25zdCBTdHJpbmcmIGRlc3RpbmF0aW9uRXh0ZW5zaW9uKQotewotICAgIEFTU0VSVCghZGVzdGlu
YXRpb25VVEkuaXNOdWxsKCkpOwotICAgIEFTU0VSVCghZGVzdGluYXRpb25FeHRlbnNpb24uaXNO
dWxsKCkpOwotICAgIAotICAgIFZlY3RvcjxTdHJpbmc+IHRyYW5zY29kZWRQYXRoczsKLSAgICB0
cmFuc2NvZGVkUGF0aHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShwYXRocy5zaXplKCkpOwotCi0g
ICAgZm9yIChhdXRvJiBwYXRoIDogcGF0aHMpIHsKLSAgICAgICAgLy8gQXBwZW5kIHRoZSB0cmFu
c2NvZGVkIHBhdGggaWYgdGhlIGltYWdlIG5lZWRzIHRyYW5zY29kaW5nLiBPdGhlcndpc2UgYXBw
ZW5kIGEgbnVsbCBzdHJpbmcuCi0gICAgICAgIGlmICghcGF0aC5pc051bGwoKSkKLSAgICAgICAg
ICAgIHRyYW5zY29kZWRQYXRocy51bmNoZWNrZWRBcHBlbmQodHJhbnNjb2RlSW1hZ2UocGF0aCwg
ZGVzdGluYXRpb25VVEksIGRlc3RpbmF0aW9uRXh0ZW5zaW9uKSk7Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIHRyYW5zY29kZWRQYXRocy51bmNoZWNrZWRBcHBlbmQobnVsbFN0cmluZygpKTsK
LSAgICB9Ci0KLSAgICByZXR1cm4gdHJhbnNjb2RlZFBhdGhzOwotfQotCi19IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAko
cmV2aXNpb24gMjY1MzA4KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjE3LDcgKzIxNyw3IEBACiAjZW5kaWYKIAogI2lmIFBM
QVRGT1JNKE1BQykKLSNpbmNsdWRlICJJbWFnZVV0aWxpdGllcy5oIgorI2luY2x1ZGUgPFdlYkNv
cmUvSW1hZ2VVdGlsaXRpZXMuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1VUSVV0aWxpdGllcy5oPgog
I2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkocmV2aXNpb24gMjY1MzA4KQorKysgU291cmNlL1dlYktpdC9XZWJLaXQueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjkwLDcgKzI5MCw2IEBA
CiAJCTFBOUZCQThEMTNGRjA0RTYwMERFRUQ2NyAvKiBQbHVnaW5Db21wbGV4VGV4dElucHV0U3Rh
dGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBOUZC
QThDMTNGRjA0RTYwMERFRUQ2NyAvKiBQbHVnaW5Db21wbGV4VGV4dElucHV0U3RhdGUuaCAqLzsg
fTsKIAkJMUFBMTMyMTIxOTFENTkyNDAwOUMxNDg5IC8qIFdLTmF2aWdhdGlvblJlc3BvbnNlUHJp
dmF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFB
MTMyMTExOTFENTkyNDAwOUMxNDg5IC8qIFdLTmF2aWdhdGlvblJlc3BvbnNlUHJpdmF0ZS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTFBQTIwRDUx
MThBRDUwRTAwMDVEMUVENCAvKiBXS05hdmlnYXRpb25EZWxlZ2F0ZVByaXZhdGUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBQTIwRDUwMThBRDUwRTAw
MDVEMUVENCAvKiBXS05hdmlnYXRpb25EZWxlZ2F0ZVByaXZhdGUuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkxQUEyRTUxRDEyRTRDMDVFMDBCQzQ5
NjYgLyogSW1hZ2VVdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDFBQTJFNTFCMTJFNEMwNUUwMEJDNDk2NiAvKiBJbWFnZVV0aWxpdGllcy5o
ICovOyB9OwogCQkxQUEyRTU2NzE4RDc3NTA4MDAzODE0QkQgLyogV0tXZWJQcm9jZXNzQnVuZGxl
UGFyYW1ldGVycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMUFBMkU1NjUxOEQ3NzUwODAwMzgxNEJEIC8qIFdLV2ViUHJvY2Vzc0J1bmRsZVBhcmFtZXRl
cnMuaCAqLzsgfTsKIAkJMUFBM0Q3NUMxNjUxQjQ0RjAwODcxM0QwIC8qIFJlbW90ZUxheWVyVHJl
ZUhvc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFB
QTNENzVBMTY1MUI0NEYwMDg3MTNEMCAvKiBSZW1vdGVMYXllclRyZWVIb3N0LmggKi87IH07CiAJ
CTFBQTQxN0NCMTJDMDBDQ0EwMDJCRTY3QiAvKiBUZXh0Q2hlY2tlci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFBNDE3QzkxMkMwMENDQTAwMkJFNjdC
IC8qIFRleHRDaGVja2VyLmggKi87IH07CkBAIC0yNTE2LDggKzI1MTUsNiBAQAogCQkxQUExQ0M1
QzEwMEZBMUExMDA3OERFQkMgLyogUXVhcnR6Q29yZS5mcmFtZXdvcmsgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB3cmFwcGVyLmZyYW1ld29yazsgbmFt
ZSA9IFF1YXJ0ekNvcmUuZnJhbWV3b3JrOyBwYXRoID0gL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29y
a3MvUXVhcnR6Q29yZS5mcmFtZXdvcms7IHNvdXJjZVRyZWUgPSAiPGFic29sdXRlPiI7IH07CiAJ
CTFBQTFDRDA2MTAwRkExQkEwMDc4REVCQyAvKiBDYXJib24uZnJhbWV3b3JrICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gd3JhcHBlci5mcmFtZXdvcms7
IG5hbWUgPSBDYXJib24uZnJhbWV3b3JrOyBwYXRoID0gL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29y
a3MvQ2FyYm9uLmZyYW1ld29yazsgc291cmNlVHJlZSA9ICI8YWJzb2x1dGU+IjsgfTsKIAkJMUFB
MjBENTAxOEFENTBFMDAwNUQxRUQ0IC8qIFdLTmF2aWdhdGlvbkRlbGVnYXRlUHJpdmF0ZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS05hdmlnYXRpb25EZWxlZ2F0ZVByaXZh
dGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUFBMkU1MUIxMkU0QzA1RTAwQkM0
OTY2IC8qIEltYWdlVXRpbGl0aWVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEltYWdlVXRpbGl0aWVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFBQTJFNTFD
MTJFNEMwNUUwMEJDNDk2NiAvKiBJbWFnZVV0aWxpdGllc0NHLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdlVXRpbGl0aWVzQ0cuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkxQUEyRTU2NDE4RDc3NTA4MDAzODE0QkQgLyogV0tXZWJQcm9jZXNz
QnVuZGxlUGFyYW1ldGVycy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0
aCA9IFdLV2ViUHJvY2Vzc0J1bmRsZVBhcmFtZXRlcnMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTFBQTJFNTY1MThENzc1MDgwMDM4MTRCRCAvKiBXS1dlYlByb2Nlc3NCdW5kbGVQ
YXJhbWV0ZXJzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLV2ViUHJvY2Vz
c0J1bmRsZVBhcmFtZXRlcnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUFBM0Q3
NTkxNjUxQjQ0RjAwODcxM0QwIC8qIFJlbW90ZUxheWVyVHJlZUhvc3QubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBSZW1vdGVMYXllclRyZWVIb3N0Lm1tOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTk2MCwxNCArNTk1Nyw2IEBACiAJCQlwYXRoID0g
bWFjOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKLQkJMUFBMkU1MUExMkU0QzA1
NjAwQkM0OTY2IC8qIGNnICovID0gewotCQkJaXNhID0gUEJYR3JvdXA7Ci0JCQljaGlsZHJlbiA9
ICgKLQkJCQkxQUEyRTUxQzEyRTRDMDVFMDBCQzQ5NjYgLyogSW1hZ2VVdGlsaXRpZXNDRy5jcHAg
Ki8sCi0JCQkpOwotCQkJcGF0aCA9IGNnOwotCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKLQkJ
fTsKIAkJMUFBQzREREUxNkIxQ0JGNjAwOTQyNUUzIC8qIFdlYlN0b3JhZ2UgKi8gPSB7CiAJCQlp
c2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKApAQCAtOTU4OCw3ICs5NTc3LDYgQEAKIAkJ
CWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCiAJCQkJMzcwOTUwNDExOEE4OEJBNDAw
ODdBRTVEIC8qIGNmICovLAotCQkJCTFBQTJFNTFBMTJFNEMwNTYwMEJDNDk2NiAvKiBjZyAqLywK
IAkJCQk2QkU5NjlDMjFFNTRENDY3MDA4Qjc0ODMgLyogY2xhc3NpZmllciAqLywKIAkJCQk0NDUw
QUVCRTFEQzNGQUFDMDA5OTQzRjIgLyogY29jb2EgKi8sCiAJCQkJMzcwOTUwNDIxOEE4OENERTAw
ODdBRTVEIC8qIGZvdW5kYXRpb24gKi8sCkBAIC05NTk5LDcgKzk1ODcsNiBAQAogCQkJCTUxQjE1
QTdEMTM4NDM5QjIwMDMyMUFEOCAvKiB1bml4ICovLAogCQkJCUVDQTY4MEQzMUU2OTA0QjUwMDcz
MUQyMCAvKiBFeHRyYVByaXZhdGVTeW1ib2xzRm9yVEFQSS5oICovLAogCQkJCUVDQkZDMURCMUU2
QTRENjYwMDAzMDBDNyAvKiBFeHRyYVB1YmxpY1N5bWJvbHNGb3JUQVBJLmggKi8sCi0JCQkJMUFB
MkU1MUIxMkU0QzA1RTAwQkM0OTY2IC8qIEltYWdlVXRpbGl0aWVzLmggKi8sCiAJCQkJNTFBN0Yy
RjQxMjVCRjhENDAwOEFFQjFEIC8qIExvZ2dpbmcuY3BwICovLAogCQkJCTUxQTdGMkYyMTI1QkY4
MjAwMDhBRUIxRCAvKiBMb2dnaW5nLmggKi8sCiAJCQkJMEZEQ0Q3RjYxRDQ3RTkyQTAwOUYwOEJD
IC8qIExvZ0luaXRpYWxpemF0aW9uLmggKi8sCkBAIC0xMDg2NSw3ICsxMDg1Miw2IEBACiAJCQkJ
NTFDMEM5NzQxRERENzYwMDAwMzJDQUQzIC8qIEljb25Mb2FkaW5nRGVsZWdhdGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTUxRTM1MUNCMTgwRjJDQ0MwMEU1M0JFOSAvKiBJREJVdGlsaXRpZXMuaCBp
biBIZWFkZXJzICovLAogCQkJCUJDQ0Y2QjI1MTJDOTNFN0EwMDhGOUMzNSAvKiBJbWFnZU9wdGlv
bnMuaCBpbiBIZWFkZXJzICovLAotCQkJCTFBQTJFNTFEMTJFNEMwNUUwMEJDNDk2NiAvKiBJbWFn
ZVV0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUExRUM2OUUxODcyMDkyMTAwQjk1MUYw
IC8qIEltcG9ydGFuY2VBc3NlcnRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMjA0RUUzMTFD
ODNFOTgwMDhGMzM3NSAvKiBJbmplY3RlZEJ1bmRsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNF
RTdEQzUxMjhCNjQ1RDAwOTgyN0RBIC8qIEluamVjdGVkQnVuZGxlQ2xpZW50LmggaW4gSGVhZGVy
cyAqLywK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>406141</attachid>
            <date>2020-08-06 18:03:37 -0700</date>
            <delta_ts>2020-08-07 17:30:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-212482-20200806180336.patch</filename>
            <type>text/plain</type>
            <size>46222</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2NTMwOCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI5IEBACisyMDIwLTA4LTA2ICBTYWlkIEFi
b3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgW21hY09TXSBE
cmFnL2Ryb3AgYW4gaW1hZ2Ugb2YgYSB1bnN1cHBvcnRlZCBmb3JtYXQgdG8gYW4gZmlsZSBpbnB1
dCBlbGVtZW50IHNob3VsZCBjb252ZXJ0IGl0IHRvIGEgc3VwcG9ydGVkIGZvcm1hdAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEyNDgyCisgICAgICAg
IDxyZGFyOi8vcHJvYmxlbS82MzczMTY3Mj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBUZXN0czogZmFzdC9mb3Jtcy9maWxlL2VudHJpZXMtYXBpL2lt
YWdlLW5vLXRyYW5zY29kZS1kcmFnLWRyb3AuaHRtbAorICAgICAgICAgICAgICAgZmFzdC9mb3Jt
cy9maWxlL2VudHJpZXMtYXBpL2ltYWdlLXRyYW5zY29kZS1kcmFnLWRyb3AuaHRtbAorCisgICAg
ICAgICogU291cmNlc0NvY29hLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgICogaHRtbC9GaWxlSW5wdXRUeXBlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkZpbGVJbnB1dFR5cGU6OmhhbmRsZURPTUFjdGl2YXRlRXZlbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6RmlsZUlucHV0VHlwZTo6ZmlsZUNob29zZXJTZXR0aW5ncyBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGaWxlSW5wdXRUeXBlOjphcHBseUZpbGVDaG9vc2VyU2V0dGluZ3Mp
OgorICAgICAgICAoV2ViQ29yZTo6RmlsZUlucHV0VHlwZTo6dHJhbnNjb2RlRHJvcHBlZEltYWdl
cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWxlSW5wdXRUeXBlOjpyZWNlaXZlRHJvcHBl
ZEZpbGVzKToKKyAgICAgICAgKiBodG1sL0ZpbGVJbnB1dFR5cGUuaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZVV0aWxpdGllcy5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jZy9JbWFnZVV0aWxpdGllc0NHLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjp0cmFuc2NvZGVJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpmaW5kSW1hZ2VzRm9yVHJh
bnNjb2RpbmcpOgorICAgICAgICAoV2ViQ29yZTo6dHJhbnNjb2RlSW1hZ2VzKToKKwogMjAyMC0w
OC0wNSAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBjb25z
dHJ1Y3RvciBmb3IgRHluYW1pY3NDb21wcmVzc29yTm9kZQpJbmRleDogU291cmNlL1dlYkNvcmUv
U291cmNlc0NvY29hLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29j
b2EudHh0CShyZXZpc2lvbiAyNjUzMDgpCisrKyBTb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2Eu
dHh0CSh3b3JraW5nIGNvcHkpCkBAIC0zMzEsNiArMzMxLDcgQEAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvSW1hZ2VCdWZmZXJJT1N1cmZhYwogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJV
dGlsaXRpZXNDRy5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlRGVjb2RlckNHLmNwcAog
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VTb3VyY2VDR01hYy5tbQorcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvSW1hZ2VVdGlsaXRpZXNDRy5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ludFBvaW50
Q0cuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbnRSZWN0Q0cuY3BwCiBwbGF0Zm9ybS9ncmFw
aGljcy9jZy9JbnRTaXplQ0cuY3BwCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyNjUzMDgpCisrKyBTb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkK
QEAgLTE3NjIsNiArMTc2Miw3IEBACiAJCTU1QUQwOTQwMjQwODk2NDAwMERFNEQyRiAvKiBEaXNw
bGF5TGlzdERyYXdpbmdDb250ZXh0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA3MkVBMDlGOTIzRkNDQzZBMDA4NTA0QTUgLyogRGlzcGxheUxpc3REcmF3
aW5nQ29udGV4dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTU1QUQwOTQxMjQwODk2NEEwMERFNEQyRiAvKiBDb25jcmV0ZUltYWdlQnVmZmVyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkJBQzNBNzIz
RTE3MzI4MDA4RDc0MUMgLyogQ29uY3JldGVJbWFnZUJ1ZmZlci5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTU1QUYxNEU2MUVBQUM1OUIwMDI2RUVB
QSAvKiBVVElSZWdpc3RyeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTVBRjE0RTQxRUFBQzU5QjAwMjZFRUFBIC8qIFVUSVJlZ2lzdHJ5LmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNTVCQkQ0MjkyNERC
NTYwNDAwQkI2RTBDIC8qIEltYWdlVXRpbGl0aWVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NUJCRDQyODI0REI1M0EyMDBCQjZFMEMgLyogSW1hZ2VV
dGlsaXRpZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk1NURDQzUyODIyNDA3QjIwMDBDMjZFMzIgLyogU1ZHUHJpbWl0aXZlTGlzdC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTVEQ0M1MjUyMjQwNzQ5
RTAwQzI2RTMyIC8qIFNWR1ByaW1pdGl2ZUxpc3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1NURDQzUyOTIyNDA3QjJBMDBDMjZFMzIgLyogU1ZH
TGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTVE
Q0M1MjMyMjQwNzNGRTAwQzI2RTMyIC8qIFNWR0xpc3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1NUVDOTU5OTIwNkFBN0EwMDA3REQwQTkgLyog
UGFpbnRGcmVxdWVuY3lUcmFja2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1NUVDOTU5NzIwNjlDOTJEMDA3REQwQTkgLyogUGFpbnRGcmVxdWVuY3lU
cmFja2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
QEAgLTg4NDQsNiArODg0NSw4IEBACiAJCTU1QTMzNkY4MUQ4MjFFM0MwMDIyQzRDNyAvKiBJbWFn
ZUJhY2tpbmdTdG9yZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZUJh
Y2tpbmdTdG9yZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NUFGMTRFMzFFQUFD
NTlCMDAyNkVFQUEgLyogVVRJUmVnaXN0cnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVVRJUmVn
aXN0cnkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NUFGMTRFNDFFQUFDNTlC
MDAyNkVFQUEgLyogVVRJUmVnaXN0cnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVVRJUmVnaXN0cnkuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTVCQkQ0MjYyNERCNTM0MzAwQkI2RTBDIC8q
IEltYWdlVXRpbGl0aWVzQ0cuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2VVdGlsaXRpZXND
Ry5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTU1QkJENDI4MjREQjUzQTIwMEJC
NkUwQyAvKiBJbWFnZVV0aWxpdGllcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZVV0aWxpdGllcy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NUJFMDI1NzIyM0IyOUMwMDAzMkYwOEEg
LyogU1ZHUHJvcGVydHlSZWdpc3RyeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdQcm9wZXJ0eVJlZ2lz
dHJ5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU1QkUwMjU5MjIzQjI5QzEwMDMy
RjA4QSAvKiBTVkdBbmltYXRpb25BZGRpdGl2ZVZhbHVlRnVuY3Rpb25JbXBsLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFNWR0FuaW1hdGlvbkFkZGl0aXZlVmFsdWVGdW5jdGlvbkltcGwuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTVCRTAyNUEyMjNCMjlDMjAwMzJGMDhBIC8qIFNWR1BvaW50
ZXJNZW1iZXJBY2Nlc3Nvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdQb2ludGVyTWVtYmVyQWNjZXNz
b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI1NjE1LDYgKzI1NjE4LDcgQEAK
IAkJCQk1NTVCODdFQjFDQUFGMEFCMDAzNDk0MjUgLyogSW1hZ2VEZWNvZGVyQ0cuaCAqLywKIAkJ
CQk0QjM0ODA5MjBFRUY1MEQ0MDBBQzFCNDEgLyogSW1hZ2VTb3VyY2VDRy5oICovLAogCQkJCTRC
MzQ4MDkxMEVFRjUwRDQwMEFDMUI0MSAvKiBJbWFnZVNvdXJjZUNHTWFjLm1tICovLAorCQkJCTU1
QkJENDI2MjREQjUzNDMwMEJCNkUwQyAvKiBJbWFnZVV0aWxpdGllc0NHLmNwcCAqLywKIAkJCQlC
Mjc1MzUzMjBCMDUzODE0MDAyQ0U2NEYgLyogSW50UG9pbnRDRy5jcHAgKi8sCiAJCQkJQjI3NTM1
MzMwQjA1MzgxNDAwMkNFNjRGIC8qIEludFJlY3RDRy5jcHAgKi8sCiAJCQkJQjI3NTM1MzQwQjA1
MzgxNDAwMkNFNjRGIC8qIEludFNpemVDRy5jcHAgKi8sCkBAIC0yNTgxOCw2ICsyNTgyMiw3IEBA
CiAJCQkJNTU0Njc1NzcxRkQxRkMxQTAwM0IxMEIwIC8qIEltYWdlU291cmNlLmNwcCAqLywKIAkJ
CQk1NTQ2NzU3ODFGRDFGQzFBMDAzQjEwQjAgLyogSW1hZ2VTb3VyY2UuaCAqLywKIAkJCQk1NTUw
Q0I0MTFFOTU1RTNDMDAxMTFBQTAgLyogSW1hZ2VUeXBlcy5oICovLAorCQkJCTU1QkJENDI4MjRE
QjUzQTIwMEJCNkUwQyAvKiBJbWFnZVV0aWxpdGllcy5oICovLAogCQkJCTA3ODYzM0Y4MjQwNzE1
RDIwMDg3QUUyMSAvKiBJbmJhbmRHZW5lcmljQ3VlLmNwcCAqLywKIAkJCQkwNzg2MzNERTIzRkVE
RjIyMDA4N0FFMjEgLyogSW5iYW5kR2VuZXJpY0N1ZS5oICovLAogCQkJCTA3MDZBMEQ3MjQwODMw
QTYwMEU5MzgxOCAvKiBJbmJhbmRHZW5lcmljQ3VlSWRlbnRpZmllci5oICovLApAQCAtMzE0MDMs
NiArMzE0MDgsNyBAQAogCQkJCTRCMzQ4MDk0MEVFRjUwRDQwMEFDMUI0MSAvKiBJbWFnZVNvdXJj
ZUNHLmggaW4gSGVhZGVycyAqLywKIAkJCQkwNzhFRDE5MzIxNkQwNzk1MDA3NzVCMzMgLyogSW1h
Z2VUcmFuc2ZlclNlc3Npb25WVC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTU1MENCNDIxRTk1NUUz
QzAwMTExQUEwIC8qIEltYWdlVHlwZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTU1QkJENDI5MjRE
QjU2MDQwMEJCNkUwQyAvKiBJbWFnZVV0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMjZG
NzU2QjMxQjNCNjZGNzAwMDVERDc5IC8qIEltbXV0YWJsZU5GQS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMjZGNzU2QjUxQjNCNjhGMjAwMDVERDc5IC8qIEltbXV0YWJsZU5GQU5vZGVCdWlsZGVyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkzMTZGRTExODBFNkUxREE3MDBCRjYwODggLyogSW1wbGljaXRB
bmltYXRpb24uaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9GaWxl
SW5wdXRUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0ZpbGVJbnB1
dFR5cGUuY3BwCShyZXZpc2lvbiAyNjUzMDgpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0ZpbGVJ
bnB1dFR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSAi
SWNvbi5oIgogI2luY2x1ZGUgIklucHV0VHlwZU5hbWVzLmgiCiAjaW5jbHVkZSAiTG9jYWxpemVk
U3RyaW5ncy5oIgorI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKICNpbmNsdWRlICJSZW5k
ZXJGaWxlVXBsb2FkQ29udHJvbC5oIgogI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMu
aCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgpAQCAtNDcsNiArNDgsMTEgQEAKICNpbmNsdWRlIDx3
dGYvVHlwZUNhc3RzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCisj
aWYgUExBVEZPUk0oTUFDKQorI2luY2x1ZGUgIkltYWdlVXRpbGl0aWVzLmgiCisjaW5jbHVkZSAi
VVRJVXRpbGl0aWVzLmgiCisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgVXBs
b2FkQnV0dG9uRWxlbWVudDsKIH0KQEAgLTIwNCwxNiArMjEwLDcgQEAgdm9pZCBGaWxlSW5wdXRU
eXBlOjpoYW5kbGVET01BY3RpdmF0ZUV2ZQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoYXV0
byogY2hyb21lID0gdGhpcy0+Y2hyb21lKCkpIHsKLSAgICAgICAgRmlsZUNob29zZXJTZXR0aW5n
cyBzZXR0aW5nczsKLSAgICAgICAgc2V0dGluZ3MuYWxsb3dzRGlyZWN0b3JpZXMgPSBhbGxvd3NE
aXJlY3RvcmllcygpOwotICAgICAgICBzZXR0aW5ncy5hbGxvd3NNdWx0aXBsZUZpbGVzID0gaW5w
dXQuaGFzQXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihtdWx0aXBsZUF0dHIpOwotICAg
ICAgICBzZXR0aW5ncy5hY2NlcHRNSU1FVHlwZXMgPSBpbnB1dC5hY2NlcHRNSU1FVHlwZXMoKTsK
LSAgICAgICAgc2V0dGluZ3MuYWNjZXB0RmlsZUV4dGVuc2lvbnMgPSBpbnB1dC5hY2NlcHRGaWxl
RXh0ZW5zaW9ucygpOwotICAgICAgICBzZXR0aW5ncy5zZWxlY3RlZEZpbGVzID0gbV9maWxlTGlz
dC0+cGF0aHMoKTsKLSNpZiBFTkFCTEUoTUVESUFfQ0FQVFVSRSkKLSAgICAgICAgc2V0dGluZ3Mu
bWVkaWFDYXB0dXJlVHlwZSA9IGlucHV0Lm1lZGlhQ2FwdHVyZVR5cGUoKTsKLSNlbmRpZgotICAg
ICAgICBhcHBseUZpbGVDaG9vc2VyU2V0dGluZ3Moc2V0dGluZ3MpOworICAgICAgICBhcHBseUZp
bGVDaG9vc2VyU2V0dGluZ3MoKTsKICAgICAgICAgY2hyb21lLT5ydW5PcGVuUGFuZWwoKmlucHV0
LmRvY3VtZW50KCkuZnJhbWUoKSwgKm1fZmlsZUNob29zZXIpOwogICAgIH0KIApAQCAtMzMyLDEy
ICszMjksMjkgQEAgdm9pZCBGaWxlSW5wdXRUeXBlOjpyZXF1ZXN0SWNvbihjb25zdCBWZQogICAg
IGNocm9tZS0+bG9hZEljb25Gb3JGaWxlcyhwYXRocywgKm1fZmlsZUljb25Mb2FkZXIpOwogfQog
Ci12b2lkIEZpbGVJbnB1dFR5cGU6OmFwcGx5RmlsZUNob29zZXJTZXR0aW5ncyhjb25zdCBGaWxl
Q2hvb3NlclNldHRpbmdzJiBzZXR0aW5ncykKK0ZpbGVDaG9vc2VyU2V0dGluZ3MgRmlsZUlucHV0
VHlwZTo6ZmlsZUNob29zZXJTZXR0aW5ncygpIGNvbnN0Cit7CisgICAgQVNTRVJUKGVsZW1lbnQo
KSk7CisgICAgYXV0byYgaW5wdXQgPSAqZWxlbWVudCgpOworCisgICAgRmlsZUNob29zZXJTZXR0
aW5ncyBzZXR0aW5nczsKKyAgICBzZXR0aW5ncy5hbGxvd3NEaXJlY3RvcmllcyA9IGFsbG93c0Rp
cmVjdG9yaWVzKCk7CisgICAgc2V0dGluZ3MuYWxsb3dzTXVsdGlwbGVGaWxlcyA9IGlucHV0Lmhh
c0F0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24obXVsdGlwbGVBdHRyKTsKKyAgICBzZXR0
aW5ncy5hY2NlcHRNSU1FVHlwZXMgPSBpbnB1dC5hY2NlcHRNSU1FVHlwZXMoKTsKKyAgICBzZXR0
aW5ncy5hY2NlcHRGaWxlRXh0ZW5zaW9ucyA9IGlucHV0LmFjY2VwdEZpbGVFeHRlbnNpb25zKCk7
CisgICAgc2V0dGluZ3Muc2VsZWN0ZWRGaWxlcyA9IG1fZmlsZUxpc3QtPnBhdGhzKCk7CisjaWYg
RU5BQkxFKE1FRElBX0NBUFRVUkUpCisgICAgc2V0dGluZ3MubWVkaWFDYXB0dXJlVHlwZSA9IGlu
cHV0Lm1lZGlhQ2FwdHVyZVR5cGUoKTsKKyNlbmRpZgorICAgIHJldHVybiBzZXR0aW5nczsKK30K
Kwordm9pZCBGaWxlSW5wdXRUeXBlOjphcHBseUZpbGVDaG9vc2VyU2V0dGluZ3MoKQogewogICAg
IGlmIChtX2ZpbGVDaG9vc2VyKQogICAgICAgICBtX2ZpbGVDaG9vc2VyLT5pbnZhbGlkYXRlKCk7
CiAKLSAgICBtX2ZpbGVDaG9vc2VyID0gRmlsZUNob29zZXI6OmNyZWF0ZSh0aGlzLCBzZXR0aW5n
cyk7CisgICAgbV9maWxlQ2hvb3NlciA9IEZpbGVDaG9vc2VyOjpjcmVhdGUodGhpcywgZmlsZUNo
b29zZXJTZXR0aW5ncygpKTsKIH0KIAogYm9vbCBGaWxlSW5wdXRUeXBlOjphbGxvd3NEaXJlY3Rv
cmllcygpIGNvbnN0CkBAIC00NTQsMjIgKzQ2OCw0OCBAQCB2b2lkIEZpbGVJbnB1dFR5cGU6Omlj
b25Mb2FkZWQoUmVmUHRyPEljCiB9CiAKICNpZiBFTkFCTEUoRFJBR19TVVBQT1JUKQorVmVjdG9y
PFN0cmluZz4gRmlsZUlucHV0VHlwZTo6dHJhbnNjb2RlRHJvcHBlZEltYWdlcyhjb25zdCBWZWN0
b3I8U3RyaW5nPiYgcGF0aHMpIGNvbnN0Cit7CisjaWYgUExBVEZPUk0oTUFDKQorICAgIGF1dG8g
c2V0dGluZ3MgPSBmaWxlQ2hvb3NlclNldHRpbmdzKCk7CisgICAgYXV0byBhbGxvd2VkTUlNRVR5
cGVzID0gTUlNRVR5cGVSZWdpc3RyeTo6YWxsb3dlZE1JTUVUeXBlcyhzZXR0aW5ncy5hY2NlcHRN
SU1FVHlwZXMsIHNldHRpbmdzLmFjY2VwdEZpbGVFeHRlbnNpb25zKTsKKworICAgIGF1dG8gdHJh
bnNjb2RpbmdQYXRocyA9IGZpbmRJbWFnZXNGb3JUcmFuc2NvZGluZyhwYXRocywgYWxsb3dlZE1J
TUVUeXBlcyk7CisgICAgaWYgKHRyYW5zY29kaW5nUGF0aHMuaXNFbXB0eSgpKQorICAgICAgICBy
ZXR1cm4geyB9OworCisgICAgYXV0byB0cmFuc2NvZGluZ01JTUVUeXBlID0gTUlNRVR5cGVSZWdp
c3RyeTo6cHJlZmVycmVkSW1hZ2VNSU1FVHlwZUZvckVuY29kaW5nKGFsbG93ZWRNSU1FVHlwZXMs
IHsgfSk7CisgICAgaWYgKHRyYW5zY29kaW5nTUlNRVR5cGUuaXNOdWxsKCkpCisgICAgICAgIHJl
dHVybiB7IH07CisKKyAgICBhdXRvIHRyYW5zY29kaW5nVVRJID0gVVRJRnJvbU1JTUVUeXBlKHRy
YW5zY29kaW5nTUlNRVR5cGUpOworICAgIGF1dG8gdHJhbnNjb2RpbmdFeHRlbnNpb24gPSBXZWJD
b3JlOjpNSU1FVHlwZVJlZ2lzdHJ5OjpwcmVmZXJyZWRFeHRlbnNpb25Gb3JNSU1FVHlwZSh0cmFu
c2NvZGluZ01JTUVUeXBlKTsKKworICAgIHJldHVybiB0cmFuc2NvZGVJbWFnZXModHJhbnNjb2Rp
bmdQYXRocywgdHJhbnNjb2RpbmdVVEksIHRyYW5zY29kaW5nRXh0ZW5zaW9uKTsKKyNlbHNlCisg
ICAgVU5VU0VEX1BBUkFNKHBhdGhzKTsKKyAgICByZXR1cm4geyB9OworI2VuZGlmCit9CisKIGJv
b2wgRmlsZUlucHV0VHlwZTo6cmVjZWl2ZURyb3BwZWRGaWxlcyhjb25zdCBEcmFnRGF0YSYgZHJh
Z0RhdGEpCiB7CiAgICAgYXV0byBwYXRocyA9IGRyYWdEYXRhLmFzRmlsZW5hbWVzKCk7CiAgICAg
aWYgKHBhdGhzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgYXV0byBy
ZXBsYWNlbWVudFBhdGhzID0gdHJhbnNjb2RlRHJvcHBlZEltYWdlcyhwYXRocyk7CisgICAgCiAg
ICAgQVNTRVJUKGVsZW1lbnQoKSk7CiAgICAgaWYgKGVsZW1lbnQoKS0+aGFzQXR0cmlidXRlV2l0
aG91dFN5bmNocm9uaXphdGlvbihtdWx0aXBsZUF0dHIpKSB7CiAgICAgICAgIFZlY3RvcjxGaWxl
Q2hvb3NlckZpbGVJbmZvPiBmaWxlczsKICAgICAgICAgZmlsZXMucmVzZXJ2ZUluaXRpYWxDYXBh
Y2l0eShwYXRocy5zaXplKCkpOwotICAgICAgICBmb3IgKGF1dG8mIHBhdGggOiBwYXRocykKLSAg
ICAgICAgICAgIGZpbGVzLnVuY2hlY2tlZEFwcGVuZCh7IHBhdGgsIHsgfSwgeyB9IH0pOworICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMCwgc2l6ZSA9IHBhdGhzLnNpemUoKTsgaSA8IHNpemU7ICsr
aSkKKyAgICAgICAgICAgIGZpbGVzLnVuY2hlY2tlZEFwcGVuZCh7IHBhdGhzW2ldLCBpIDwgcmVw
bGFjZW1lbnRQYXRocy5zaXplKCkgPyByZXBsYWNlbWVudFBhdGhzW2ldIDogbnVsbFN0cmluZygp
LCB7IH0gfSk7CiAKICAgICAgICAgZmlsZXNDaG9zZW4oZmlsZXMpOwogICAgIH0gZWxzZQotICAg
ICAgICBmaWxlc0Nob3Nlbih7IHsgcGF0aHNbMF0sIHsgfSwgeyB9IH0gfSk7CisgICAgICAgIGZp
bGVzQ2hvc2VuKHsgeyBwYXRoc1swXSwgIXJlcGxhY2VtZW50UGF0aHMuaXNFbXB0eSgpID8gcmVw
bGFjZW1lbnRQYXRoc1swXSA6IG51bGxTdHJpbmcoKSwgeyB9IH0gfSk7CiAKICAgICByZXR1cm4g
dHJ1ZTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvRmlsZUlucHV0VHlwZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvRmlsZUlucHV0VHlwZS5oCShyZXZpc2lvbiAy
NjUzMDgpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0ZpbGVJbnB1dFR5cGUuaAkod29ya2luZyBj
b3B5KQpAQCAtNzEsNiArNzEsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgc2V0VmFsdWUoY29uc3Qg
U3RyaW5nJiwgYm9vbCB2YWx1ZUNoYW5nZWQsIFRleHRGaWVsZEV2ZW50QmVoYXZpb3IpIGZpbmFs
OwogCiAjaWYgRU5BQkxFKERSQUdfU1VQUE9SVCkKKyAgICBWZWN0b3I8U3RyaW5nPiB0cmFuc2Nv
ZGVEcm9wcGVkSW1hZ2VzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBmaWxlbmFtZXMpIGNvbnN0Owog
ICAgIGJvb2wgcmVjZWl2ZURyb3BwZWRGaWxlcyhjb25zdCBEcmFnRGF0YSYpIGZpbmFsOwogI2Vu
ZGlmCiAKQEAgLTg2LDcgKzg3LDggQEAgcHJpdmF0ZToKICAgICAvLyBGaWxlSWNvbkxvYWRlckNs
aWVudCBpbXBsZW1lbnRhdGlvbi4KICAgICB2b2lkIGljb25Mb2FkZWQoUmVmUHRyPEljb24+JiYp
IGZpbmFsOwogCi0gICAgdm9pZCBhcHBseUZpbGVDaG9vc2VyU2V0dGluZ3MoY29uc3QgRmlsZUNo
b29zZXJTZXR0aW5ncyYpOworICAgIEZpbGVDaG9vc2VyU2V0dGluZ3MgZmlsZUNob29zZXJTZXR0
aW5ncygpIGNvbnN0OworICAgIHZvaWQgYXBwbHlGaWxlQ2hvb3NlclNldHRpbmdzKCk7CiAgICAg
dm9pZCBkaWRDcmVhdGVGaWxlTGlzdChSZWY8RmlsZUxpc3Q+JiYsIFJlZlB0cjxJY29uPiYmKTsK
ICAgICB2b2lkIHJlcXVlc3RJY29uKGNvbnN0IFZlY3RvcjxTdHJpbmc+Jik7CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlVXRpbGl0aWVzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VVdGlsaXRpZXMuaAko
bm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVV0
aWxpdGllcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
cHJhZ21hIG9uY2UKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBHaXZlbiBhIGxpc3Qgb2Yg
ZmlsZXMnICdwYXRocycgYW5kICdhbGxvd2VkTUlNRVR5cGVzJywgdGhlIGZ1bmN0aW9uIHJldHVy
bnMgYSBsaXN0CisvLyBvZiBzdHJpbmdzIHdob3NlIHNpemUgaXMgdGhlIHNhbWUgYXMgdGhlIHNp
emUgb2YgJ3BhdGhzJyBhbmQgaXRzIGVudHJpZXMgYXJlIGFsbAorLy8gbnVsbCBzdHJpbmdzIGV4
Y2VwdCB0aGUgb25lcyB3aG9zZSBNSU1FIHR5cGVzIGFyZSBub3QgaW4gJ2FsbG93ZWRNSU1FVHlw
ZXMnLgorV0VCQ09SRV9FWFBPUlQgVmVjdG9yPFN0cmluZz4gZmluZEltYWdlc0ZvclRyYW5zY29k
aW5nKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXRocywgY29uc3QgVmVjdG9yPFN0cmluZz4mIGFs
bG93ZWRNSU1FVHlwZXMpOworCisvLyBHaXZlbiBhIGxpc3Qgb2YgaW1hZ2VzJyAncGF0aHMnLCB0
aGlzIGZ1bmN0aW9uIHRyYW5zY29kZXMgdGhlc2UgaW1hZ2VzIHRvIGEgbmV3CisvLyBmb3JtYXQg
d2hvc2UgVVRJIGlzIGRlc3RpbmF0aW9uVVRJLiBUaGUgcmVzdWx0IG9mIHRoZSB0cmFuc2NvZGlu
ZyB3aWxsIGJlIHdyaXR0ZW4KKy8vIHRvIHRlbXBvcmFyeSBmaWxlcyB3aG9zZSBleHRlbnNpb25z
IGFyZSAnZGVzdGluYXRpb25FeHRlbnNpb24nLiBJdCByZXR1cm5zIGEgbGlzdAorLy8gb2YgcGF0
aHMgdG8gdGhlIHJlc3VsdCB0ZW1wb3JhcnkgZmlsZXMuIElmIGFuIGVudHJ5IGluICdwYXRocycg
aXMgbnVsbCBvciBhbiBlcnJvcgorLy8gaGFwcGVucyB3aGlsZSB0cmFuc2NvZGluZywgYSBudWxs
IHN0cmluZyB3aWxsIGJlIGFkZGVkIHRvIHRoZSByZXR1cm5lZCBsaXN0LgorV0VCQ09SRV9FWFBP
UlQgVmVjdG9yPFN0cmluZz4gdHJhbnNjb2RlSW1hZ2VzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBw
YXRocywgY29uc3QgU3RyaW5nJiBkZXN0aW5hdGlvblVUSSwgY29uc3QgU3RyaW5nJiBkZXN0aW5h
dGlvbkV4dGVuc2lvbik7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VVdGlsaXRpZXNDRy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VVdGlsaXRp
ZXNDRy5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvSW1hZ2VVdGlsaXRpZXNDRy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjIg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VVdGls
aXRpZXMuaCIKKworI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJNSU1FVHlwZVJlZ2lz
dHJ5LmgiCisjaW5jbHVkZSA8SW1hZ2VJTy9JbWFnZUlPLmg+CisjaW5jbHVkZSA8d3RmL0ZpbGVT
eXN0ZW0uaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworc3RhdGljIFN0cmluZyB0cmFuc2NvZGVJbWFnZShjb25zdCBTdHJpbmcmIHBhdGgs
IGNvbnN0IFN0cmluZyYgZGVzdGluYXRpb25VVEksIGNvbnN0IFN0cmluZyYgZGVzdGluYXRpb25F
eHRlbnNpb24pCit7CisgICAgYXV0byBzb3VyY2VVUkwgPSBhZG9wdENGKENGVVJMQ3JlYXRlV2l0
aEZpbGVTeXN0ZW1QYXRoKGtDRkFsbG9jYXRvckRlZmF1bHQsIHBhdGguY3JlYXRlQ0ZTdHJpbmco
KS5nZXQoKSwga0NGVVJMUE9TSVhQYXRoU3R5bGUsIGZhbHNlKSk7CisgICAgYXV0byBzb3VyY2Ug
PSBhZG9wdENGKENHSW1hZ2VTb3VyY2VDcmVhdGVXaXRoVVJMKHNvdXJjZVVSTC5nZXQoKSwgbnVs
bHB0cikpOworICAgIGlmICghc291cmNlKQorICAgICAgICByZXR1cm4gbnVsbFN0cmluZygpOwor
CisgICAgYXV0byBzb3VyY2VVVEkgPSBTdHJpbmcoQ0dJbWFnZVNvdXJjZUdldFR5cGUoc291cmNl
LmdldCgpKSk7CisgICAgaWYgKHNvdXJjZVVUSSA9PSBkZXN0aW5hdGlvblVUSSkKKyAgICAgICAg
cmV0dXJuIG51bGxTdHJpbmcoKTsKKworICAgIC8vIEl0IGlzIGltcG9ydGFudCB0byBhZGQgdGhl
IGFwcHJvcHJpYXRlIGZpbGUgZXh0ZW5zaW9uIHRvIHRoZSB0ZW1wb3JhcnkgZmlsZSBwYXRoLgor
ICAgIC8vIFRoZSBGaWxlIG9iamVjdCBkZXBlbmRzIHNvbGVseSBvbiB0aGUgZXh0ZW5zaW9uIHRv
IGtub3cgdGhlIE1JTUUgdHlwZSBvZiB0aGUgZmlsZS4KKyAgICBhdXRvIHN1ZmZpeCA9IG1ha2VT
dHJpbmcoJy4nLCBkZXN0aW5hdGlvbkV4dGVuc2lvbik7CisKKyAgICBGaWxlU3lzdGVtOjpQbGF0
Zm9ybUZpbGVIYW5kbGUgZGVzdGluYXRpb25GaWxlSGFuZGxlOworICAgIFN0cmluZyBkZXN0aW5h
dGlvblBhdGggPSBGaWxlU3lzdGVtOjpvcGVuVGVtcG9yYXJ5RmlsZSgidGVtcEltYWdlIl9zLCBk
ZXN0aW5hdGlvbkZpbGVIYW5kbGUsIHN1ZmZpeCk7CisgICAgaWYgKGRlc3RpbmF0aW9uRmlsZUhh
bmRsZSA9PSBGaWxlU3lzdGVtOjppbnZhbGlkUGxhdGZvcm1GaWxlSGFuZGxlKSB7CisgICAgICAg
IFJFTEVBU0VfTE9HX0VSUk9SKEltYWdlcywgInRyYW5zY29kZUltYWdlOiBEZXN0aW5hdGlvbiBp
bWFnZSBjb3VsZCBub3QgYmUgY3JlYXRlZDogJXMgJXNcbiIsIHBhdGgudXRmOCgpLmRhdGEoKSwg
ZGVzdGluYXRpb25VVEkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIHJldHVybiBudWxsU3RyaW5n
KCk7CisgICAgfQorCisgICAgQ0dEYXRhQ29uc3VtZXJDYWxsYmFja3MgY2FsbGJhY2tzID0gewor
ICAgICAgICBbXSh2b2lkKiBpbmZvLCBjb25zdCB2b2lkKiBidWZmZXIsIHNpemVfdCBjb3VudCkg
LT4gc2l6ZV90IHsKKyAgICAgICAgICAgIGF1dG8gaGFuZGxlID0gKnN0YXRpY19jYXN0PEZpbGVT
eXN0ZW06OlBsYXRmb3JtRmlsZUhhbmRsZSo+KGluZm8pOworICAgICAgICAgICAgcmV0dXJuIEZp
bGVTeXN0ZW06OndyaXRlVG9GaWxlKGhhbmRsZSwgc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KGJ1
ZmZlciksIGNvdW50KTsKKyAgICAgICAgfSwKKyAgICAgICAgbnVsbHB0cgorICAgIH07CisKKyAg
ICBhdXRvIGNvbnN1bWVyID0gYWRvcHRDRihDR0RhdGFDb25zdW1lckNyZWF0ZSgmZGVzdGluYXRp
b25GaWxlSGFuZGxlLCAmY2FsbGJhY2tzKSk7CisgICAgYXV0byBkZXN0aW5hdGlvbiA9IGFkb3B0
Q0YoQ0dJbWFnZURlc3RpbmF0aW9uQ3JlYXRlV2l0aERhdGFDb25zdW1lcihjb25zdW1lci5nZXQo
KSwgZGVzdGluYXRpb25VVEkuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSwgMSwgbnVsbHB0cikpOwor
CisgICAgQ0dJbWFnZURlc3RpbmF0aW9uQWRkSW1hZ2VGcm9tU291cmNlKGRlc3RpbmF0aW9uLmdl
dCgpLCBzb3VyY2UuZ2V0KCksIDAsIG51bGxwdHIpOworCisgICAgaWYgKCFDR0ltYWdlRGVzdGlu
YXRpb25GaW5hbGl6ZShkZXN0aW5hdGlvbi5nZXQoKSkpIHsKKyAgICAgICAgUkVMRUFTRV9MT0df
RVJST1IoSW1hZ2VzLCAidHJhbnNjb2RlSW1hZ2U6IEltYWdlIHRyYW5zY29kaW5nIGZhaWxzOiAl
cyAlc1xuIiwgcGF0aC51dGY4KCkuZGF0YSgpLCBkZXN0aW5hdGlvblVUSS51dGY4KCkuZGF0YSgp
KTsKKyAgICAgICAgRmlsZVN5c3RlbTo6Y2xvc2VGaWxlKGRlc3RpbmF0aW9uRmlsZUhhbmRsZSk7
CisgICAgICAgIEZpbGVTeXN0ZW06OmRlbGV0ZUZpbGUoZGVzdGluYXRpb25QYXRoKTsKKyAgICAg
ICAgcmV0dXJuIG51bGxTdHJpbmcoKTsKKyAgICB9CisKKyAgICBGaWxlU3lzdGVtOjpjbG9zZUZp
bGUoZGVzdGluYXRpb25GaWxlSGFuZGxlKTsKKyAgICByZXR1cm4gZGVzdGluYXRpb25QYXRoOwor
fQorCitWZWN0b3I8U3RyaW5nPiBmaW5kSW1hZ2VzRm9yVHJhbnNjb2RpbmcoY29uc3QgVmVjdG9y
PFN0cmluZz4mIHBhdGhzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYWxsb3dlZE1JTUVUeXBlcykK
K3sKKyAgICBWZWN0b3I8U3RyaW5nPiB0cmFuc2NvZGluZ1BhdGhzOworICAgIHRyYW5zY29kaW5n
UGF0aHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShwYXRocy5zaXplKCkpOworCisgICAgYm9vbCBu
ZWVkc1RyYW5zY29kaW5nID0gZmFsc2U7CisKKyAgICBmb3IgKGF1dG8mIHBhdGggOiBwYXRocykg
eworICAgICAgICAvLyBBcHBlbmQgYSBwYXRoIG9mIHRoZSBpbWFnZSB3aGljaCBuZWVkcyB0cmFu
c2NvZGluZy4gT3RoZXJ3aXNlIGFwcGVuZCBhIG51bGwgc3RyaW5nLgorICAgICAgICBpZiAoIWFs
bG93ZWRNSU1FVHlwZXMuY29udGFpbnMoV2ViQ29yZTo6TUlNRVR5cGVSZWdpc3RyeTo6bWltZVR5
cGVGb3JQYXRoKHBhdGgpKSkgeworICAgICAgICAgICAgdHJhbnNjb2RpbmdQYXRocy51bmNoZWNr
ZWRBcHBlbmQocGF0aCk7CisgICAgICAgICAgICBuZWVkc1RyYW5zY29kaW5nID0gdHJ1ZTsKKyAg
ICAgICAgfSBlbHNlCisgICAgICAgICAgICB0cmFuc2NvZGluZ1BhdGhzLnVuY2hlY2tlZEFwcGVu
ZChudWxsU3RyaW5nKCkpOworICAgIH0KKworICAgIC8vIElmIG5vbmUgb2YgdGhlIGZpbGVzIG5l
ZWRzIGltYWdlIHRyYW5zY29kaW5nLCByZXR1cm4gYW4gZW1wdHkgVmVjdG9yLgorICAgIHJldHVy
biBuZWVkc1RyYW5zY29kaW5nID8gdHJhbnNjb2RpbmdQYXRocyA6IFZlY3RvcjxTdHJpbmc+KCk7
Cit9CisKK1ZlY3RvcjxTdHJpbmc+IHRyYW5zY29kZUltYWdlcyhjb25zdCBWZWN0b3I8U3RyaW5n
PiYgcGF0aHMsIGNvbnN0IFN0cmluZyYgZGVzdGluYXRpb25VVEksIGNvbnN0IFN0cmluZyYgZGVz
dGluYXRpb25FeHRlbnNpb24pCit7CisgICAgQVNTRVJUKCFkZXN0aW5hdGlvblVUSS5pc051bGwo
KSk7CisgICAgQVNTRVJUKCFkZXN0aW5hdGlvbkV4dGVuc2lvbi5pc051bGwoKSk7CisgICAgCisg
ICAgVmVjdG9yPFN0cmluZz4gdHJhbnNjb2RlZFBhdGhzOworICAgIHRyYW5zY29kZWRQYXRocy5y
ZXNlcnZlSW5pdGlhbENhcGFjaXR5KHBhdGhzLnNpemUoKSk7CisKKyAgICBmb3IgKGF1dG8mIHBh
dGggOiBwYXRocykgeworICAgICAgICAvLyBBcHBlbmQgdGhlIHRyYW5zY29kZWQgcGF0aCBpZiB0
aGUgaW1hZ2UgbmVlZHMgdHJhbnNjb2RpbmcuIE90aGVyd2lzZSBhcHBlbmQgYSBudWxsIHN0cmlu
Zy4KKyAgICAgICAgaWYgKCFwYXRoLmlzTnVsbCgpKQorICAgICAgICAgICAgdHJhbnNjb2RlZFBh
dGhzLnVuY2hlY2tlZEFwcGVuZCh0cmFuc2NvZGVJbWFnZShwYXRoLCBkZXN0aW5hdGlvblVUSSwg
ZGVzdGluYXRpb25FeHRlbnNpb24pKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdHJhbnNj
b2RlZFBhdGhzLnVuY2hlY2tlZEFwcGVuZChudWxsU3RyaW5nKCkpOworICAgIH0KKworICAgIHJl
dHVybiB0cmFuc2NvZGVkUGF0aHM7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyNjUzNTcpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDIwLTA4LTA2ICBTYWlkIEFib3UtSGFsbGF3
YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgW21hY09TXSBEcmFnL2Ryb3Ag
YW4gaW1hZ2Ugb2YgYSB1bnN1cHBvcnRlZCBmb3JtYXQgdG8gYW4gZmlsZSBpbnB1dCBlbGVtZW50
IHNob3VsZCBjb252ZXJ0IGl0IHRvIGEgc3VwcG9ydGVkIGZvcm1hdAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEyNDgyCisgICAgICAgIDxyZGFyOi8v
cHJvYmxlbS82MzczMTY3Mj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIFBsYXRmb3JtL0ltYWdlVXRpbGl0aWVzLmg6IFJlbW92ZWQuCisgICAgICAg
ICogUGxhdGZvcm0vY2c6IFJlbW92ZWQuCisgICAgICAgICogU291cmNlc0NvY29hLnR4dDoKKyAg
ICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcDoKKyAgICAgICAgKiBXZWJLaXQueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKwogMjAyMC0wOC0wNiAgRGF2aWQgS2lsemVyICA8ZGRr
aWx6ZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFdURjo6bWFrZVN0cmluZygpIHNob3VsZCBoYW5k
bGUgZW51bSB2YWx1ZXMKSW5kZXg6IFNvdXJjZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQJKHJldmlzaW9uIDI2NTMw
OCkKKysrIFNvdXJjZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dAkod29ya2luZyBjb3B5KQpAQCAt
NjUsOCArNjUsNiBAQCBHUFVQcm9jZXNzL3dlYnJ0Yy9MaWJXZWJSVENDb2RlY3NQcm94eS5tCiAK
IFBsYXRmb3JtL2NmL01vZHVsZUNGLmNwcAogCi1QbGF0Zm9ybS9jZy9JbWFnZVV0aWxpdGllc0NH
LmNwcAotCiBQbGF0Zm9ybS9jbGFzc2lmaWVyL2NvY29hL1Jlc291cmNlTG9hZFN0YXRpc3RpY3ND
bGFzc2lmaWVyQ29jb2EuY3BwCiBQbGF0Zm9ybS9jbGFzc2lmaWVyL1Jlc291cmNlTG9hZFN0YXRp
c3RpY3NDbGFzc2lmaWVyLmNwcAogCkluZGV4OiBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0ltYWdl
VXRpbGl0aWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JbWFnZVV0
aWxpdGllcy5oCShyZXZpc2lvbiAyNjUzMDgpCisrKyBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lt
YWdlVXRpbGl0aWVzLmgJKG5vbmV4aXN0ZW50KQpAQCAtMSw0MiArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI3ByYWdtYSBvbmNlCi0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi0vLyBHaXZlbiBhIGxpc3Qg
b2YgZmlsZXMnICdwYXRocycgYW5kICdhbGxvd2VkTUlNRVR5cGVzJywgdGhlIGZ1bmN0aW9uIHJl
dHVybnMgYSBsaXN0Ci0vLyBvZiBzdHJpbmdzIHdob3NlIHNpemUgaXMgdGhlIHNhbWUgYXMgdGhl
IHNpemUgb2YgJ3BhdGhzJyBhbmQgaXRzIGVudHJpZXMgYXJlIGFsbAotLy8gbnVsbCBzdHJpbmdz
IGV4Y2VwdCB0aGUgb25lcyB3aG9zZSBNSU1FIHR5cGVzIGFyZSBub3QgaW4gJ2FsbG93ZWRNSU1F
VHlwZXMnLgotVmVjdG9yPFN0cmluZz4gZmluZEltYWdlc0ZvclRyYW5zY29kaW5nKGNvbnN0IFZl
Y3RvcjxTdHJpbmc+JiBwYXRocywgY29uc3QgVmVjdG9yPFN0cmluZz4mIGFsbG93ZWRNSU1FVHlw
ZXMpOwotCi0vLyBHaXZlbiBhIGxpc3Qgb2YgaW1hZ2VzJyAncGF0aHMnLCB0aGlzIGZ1bmN0aW9u
IHRyYW5zY29kZXMgdGhlc2UgaW1hZ2VzIHRvIGEgbmV3Ci0vLyBmb3JtYXQgd2hvc2UgVVRJIGlz
IGRlc3RpbmF0aW9uVVRJLiBUaGUgcmVzdWx0IG9mIHRoZSB0cmFuc2NvZGluZyB3aWxsIGJlIHdy
aXR0ZW4KLS8vIHRvIHRlbXBvcmFyeSBmaWxlcyB3aG9zZSBleHRlbnNpb25zIGFyZSAnZGVzdGlu
YXRpb25FeHRlbnNpb24nLiBJdCByZXR1cm5zIGEgbGlzdAotLy8gb2YgcGF0aHMgdG8gdGhlIHJl
c3VsdCB0ZW1wb3JhcnkgZmlsZXMuIElmIGFuIGVudHJ5IGluICdwYXRocycgaXMgbnVsbCBvciBh
biBlcnJvcgotLy8gaGFwcGVucyB3aGlsZSB0cmFuc2NvZGluZywgYSBudWxsIHN0cmluZyB3aWxs
IGJlIGFkZGVkIHRvIHRoZSByZXR1cm5lZCBsaXN0LgotVmVjdG9yPFN0cmluZz4gdHJhbnNjb2Rl
SW1hZ2VzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXRocywgY29uc3QgU3RyaW5nJiBkZXN0aW5h
dGlvblVUSSwgY29uc3QgU3RyaW5nJiBkZXN0aW5hdGlvbkV4dGVuc2lvbik7Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdlYktpdAoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYktpdC9QbGF0Zm9y
bS9JbWFnZVV0aWxpdGllcy5oCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KRGVsZXRlZDogc3ZuOmVvbC1zdHlsZQojIyAt
MSArMCwwICMjCi1uYXRpdmUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDog
U291cmNlL1dlYktpdC9QbGF0Zm9ybS9jZy9JbWFnZVV0aWxpdGllc0NHLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL2NnL0ltYWdlVXRpbGl0aWVzQ0cuY3BwCShyZXZp
c2lvbiAyNjUzMDgpCisrKyBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL2NnL0ltYWdlVXRpbGl0aWVz
Q0cuY3BwCShub25leGlzdGVudCkKQEAgLTEsMTIyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSW1hZ2VVdGlsaXRpZXMuaCIKLQotI2luY2x1ZGUg
IkxvZ2dpbmcuaCIKLSNpbmNsdWRlIDxJbWFnZUlPL0ltYWdlSU8uaD4KLSNpbmNsdWRlIDxXZWJD
b3JlL01JTUVUeXBlUmVnaXN0cnkuaD4KLSNpbmNsdWRlIDx3dGYvRmlsZVN5c3RlbS5oPgotI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLXN0YXRp
YyBTdHJpbmcgdHJhbnNjb2RlSW1hZ2UoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBTdHJpbmcm
IGRlc3RpbmF0aW9uVVRJLCBjb25zdCBTdHJpbmcmIGRlc3RpbmF0aW9uRXh0ZW5zaW9uKQotewot
ICAgIGF1dG8gc291cmNlVVJMID0gYWRvcHRDRihDRlVSTENyZWF0ZVdpdGhGaWxlU3lzdGVtUGF0
aChrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBwYXRoLmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCksIGtDRlVS
TFBPU0lYUGF0aFN0eWxlLCBmYWxzZSkpOwotICAgIGF1dG8gc291cmNlID0gYWRvcHRDRihDR0lt
YWdlU291cmNlQ3JlYXRlV2l0aFVSTChzb3VyY2VVUkwuZ2V0KCksIG51bGxwdHIpKTsKLSAgICBp
ZiAoIXNvdXJjZSkKLSAgICAgICAgcmV0dXJuIG51bGxTdHJpbmcoKTsKLQotICAgIGF1dG8gc291
cmNlVVRJID0gU3RyaW5nKENHSW1hZ2VTb3VyY2VHZXRUeXBlKHNvdXJjZS5nZXQoKSkpOwotICAg
IGlmIChzb3VyY2VVVEkgPT0gZGVzdGluYXRpb25VVEkpCi0gICAgICAgIHJldHVybiBudWxsU3Ry
aW5nKCk7Ci0KLSAgICAvLyBJdCBpcyBpbXBvcnRhbnQgdG8gYWRkIHRoZSBhcHByb3ByaWF0ZSBm
aWxlIGV4dGVuc2lvbiB0byB0aGUgdGVtcG9yYXJ5IGZpbGUgcGF0aC4KLSAgICAvLyBUaGUgRmls
ZSBvYmplY3QgZGVwZW5kcyBzb2xlbHkgb24gdGhlIGV4dGVuc2lvbiB0byBrbm93IHRoZSBNSU1F
IHR5cGUgb2YgdGhlIGZpbGUuCi0gICAgYXV0byBzdWZmaXggPSBtYWtlU3RyaW5nKCcuJywgZGVz
dGluYXRpb25FeHRlbnNpb24pOwotCi0gICAgRmlsZVN5c3RlbTo6UGxhdGZvcm1GaWxlSGFuZGxl
IGRlc3RpbmF0aW9uRmlsZUhhbmRsZTsKLSAgICBTdHJpbmcgZGVzdGluYXRpb25QYXRoID0gRmls
ZVN5c3RlbTo6b3BlblRlbXBvcmFyeUZpbGUoInRlbXBJbWFnZSJfcywgZGVzdGluYXRpb25GaWxl
SGFuZGxlLCBzdWZmaXgpOwotICAgIGlmIChkZXN0aW5hdGlvbkZpbGVIYW5kbGUgPT0gRmlsZVN5
c3RlbTo6aW52YWxpZFBsYXRmb3JtRmlsZUhhbmRsZSkgewotICAgICAgICBSRUxFQVNFX0xPR19F
UlJPUihJbWFnZXMsICJ0cmFuc2NvZGVJbWFnZTogRGVzdGluYXRpb24gaW1hZ2UgY291bGQgbm90
IGJlIGNyZWF0ZWQ6ICVzICVzXG4iLCBwYXRoLnV0ZjgoKS5kYXRhKCksIGRlc3RpbmF0aW9uVVRJ
LnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICByZXR1cm4gbnVsbFN0cmluZygpOwotICAgIH0KLQot
ICAgIENHRGF0YUNvbnN1bWVyQ2FsbGJhY2tzIGNhbGxiYWNrcyA9IHsKLSAgICAgICAgW10odm9p
ZCogaW5mbywgY29uc3Qgdm9pZCogYnVmZmVyLCBzaXplX3QgY291bnQpIC0+IHNpemVfdCB7Ci0g
ICAgICAgICAgICBhdXRvIGhhbmRsZSA9ICpzdGF0aWNfY2FzdDxGaWxlU3lzdGVtOjpQbGF0Zm9y
bUZpbGVIYW5kbGUqPihpbmZvKTsKLSAgICAgICAgICAgIHJldHVybiBGaWxlU3lzdGVtOjp3cml0
ZVRvRmlsZShoYW5kbGUsIHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihidWZmZXIpLCBjb3VudCk7
Ci0gICAgICAgIH0sCi0gICAgICAgIG51bGxwdHIKLSAgICB9OwotCi0gICAgYXV0byBjb25zdW1l
ciA9IGFkb3B0Q0YoQ0dEYXRhQ29uc3VtZXJDcmVhdGUoJmRlc3RpbmF0aW9uRmlsZUhhbmRsZSwg
JmNhbGxiYWNrcykpOwotICAgIGF1dG8gZGVzdGluYXRpb24gPSBhZG9wdENGKENHSW1hZ2VEZXN0
aW5hdGlvbkNyZWF0ZVdpdGhEYXRhQ29uc3VtZXIoY29uc3VtZXIuZ2V0KCksIGRlc3RpbmF0aW9u
VVRJLmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCksIDEsIG51bGxwdHIpKTsKLQotICAgIENHSW1hZ2VE
ZXN0aW5hdGlvbkFkZEltYWdlRnJvbVNvdXJjZShkZXN0aW5hdGlvbi5nZXQoKSwgc291cmNlLmdl
dCgpLCAwLCBudWxscHRyKTsKLQotICAgIGlmICghQ0dJbWFnZURlc3RpbmF0aW9uRmluYWxpemUo
ZGVzdGluYXRpb24uZ2V0KCkpKSB7Ci0gICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKEltYWdlcywg
InRyYW5zY29kZUltYWdlOiBJbWFnZSB0cmFuc2NvZGluZyBmYWlsczogJXMgJXNcbiIsIHBhdGgu
dXRmOCgpLmRhdGEoKSwgZGVzdGluYXRpb25VVEkudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgIEZp
bGVTeXN0ZW06OmNsb3NlRmlsZShkZXN0aW5hdGlvbkZpbGVIYW5kbGUpOwotICAgICAgICBGaWxl
U3lzdGVtOjpkZWxldGVGaWxlKGRlc3RpbmF0aW9uUGF0aCk7Ci0gICAgICAgIHJldHVybiBudWxs
U3RyaW5nKCk7Ci0gICAgfQotCi0gICAgRmlsZVN5c3RlbTo6Y2xvc2VGaWxlKGRlc3RpbmF0aW9u
RmlsZUhhbmRsZSk7Ci0gICAgcmV0dXJuIGRlc3RpbmF0aW9uUGF0aDsKLX0KLQotVmVjdG9yPFN0
cmluZz4gZmluZEltYWdlc0ZvclRyYW5zY29kaW5nKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXRo
cywgY29uc3QgVmVjdG9yPFN0cmluZz4mIGFsbG93ZWRNSU1FVHlwZXMpCi17Ci0gICAgVmVjdG9y
PFN0cmluZz4gdHJhbnNjb2RpbmdQYXRoczsKLSAgICB0cmFuc2NvZGluZ1BhdGhzLnJlc2VydmVJ
bml0aWFsQ2FwYWNpdHkocGF0aHMuc2l6ZSgpKTsKLQotICAgIGJvb2wgbmVlZHNUcmFuc2NvZGlu
ZyA9IGZhbHNlOwotCi0gICAgZm9yIChhdXRvJiBwYXRoIDogcGF0aHMpIHsKLSAgICAgICAgLy8g
QXBwZW5kIGEgcGF0aCBvZiB0aGUgaW1hZ2Ugd2hpY2ggbmVlZHMgdHJhbnNjb2RpbmcuIE90aGVy
d2lzZSBhcHBlbmQgYSBudWxsIHN0cmluZy4KLSAgICAgICAgaWYgKCFhbGxvd2VkTUlNRVR5cGVz
LmNvbnRhaW5zKFdlYkNvcmU6Ok1JTUVUeXBlUmVnaXN0cnk6Om1pbWVUeXBlRm9yUGF0aChwYXRo
KSkpIHsKLSAgICAgICAgICAgIHRyYW5zY29kaW5nUGF0aHMudW5jaGVja2VkQXBwZW5kKHBhdGgp
OwotICAgICAgICAgICAgbmVlZHNUcmFuc2NvZGluZyA9IHRydWU7Ci0gICAgICAgIH0gZWxzZQot
ICAgICAgICAgICAgdHJhbnNjb2RpbmdQYXRocy51bmNoZWNrZWRBcHBlbmQobnVsbFN0cmluZygp
KTsKLSAgICB9Ci0KLSAgICAvLyBJZiBub25lIG9mIHRoZSBmaWxlcyBuZWVkcyBpbWFnZSB0cmFu
c2NvZGluZywgcmV0dXJuIGFuIGVtcHR5IFZlY3Rvci4KLSAgICByZXR1cm4gbmVlZHNUcmFuc2Nv
ZGluZyA/IHRyYW5zY29kaW5nUGF0aHMgOiBWZWN0b3I8U3RyaW5nPigpOwotfQotCi1WZWN0b3I8
U3RyaW5nPiB0cmFuc2NvZGVJbWFnZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhdGhzLCBjb25z
dCBTdHJpbmcmIGRlc3RpbmF0aW9uVVRJLCBjb25zdCBTdHJpbmcmIGRlc3RpbmF0aW9uRXh0ZW5z
aW9uKQotewotICAgIEFTU0VSVCghZGVzdGluYXRpb25VVEkuaXNOdWxsKCkpOwotICAgIEFTU0VS
VCghZGVzdGluYXRpb25FeHRlbnNpb24uaXNOdWxsKCkpOwotICAgIAotICAgIFZlY3RvcjxTdHJp
bmc+IHRyYW5zY29kZWRQYXRoczsKLSAgICB0cmFuc2NvZGVkUGF0aHMucmVzZXJ2ZUluaXRpYWxD
YXBhY2l0eShwYXRocy5zaXplKCkpOwotCi0gICAgZm9yIChhdXRvJiBwYXRoIDogcGF0aHMpIHsK
LSAgICAgICAgLy8gQXBwZW5kIHRoZSB0cmFuc2NvZGVkIHBhdGggaWYgdGhlIGltYWdlIG5lZWRz
IHRyYW5zY29kaW5nLiBPdGhlcndpc2UgYXBwZW5kIGEgbnVsbCBzdHJpbmcuCi0gICAgICAgIGlm
ICghcGF0aC5pc051bGwoKSkKLSAgICAgICAgICAgIHRyYW5zY29kZWRQYXRocy51bmNoZWNrZWRB
cHBlbmQodHJhbnNjb2RlSW1hZ2UocGF0aCwgZGVzdGluYXRpb25VVEksIGRlc3RpbmF0aW9uRXh0
ZW5zaW9uKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRyYW5zY29kZWRQYXRocy51bmNo
ZWNrZWRBcHBlbmQobnVsbFN0cmluZygpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJhbnNjb2Rl
ZFBhdGhzOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAkocmV2aXNpb24gMjY1MzA4KQorKysgU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjE3LDcg
KzIxNyw3IEBACiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKE1BQykKLSNpbmNsdWRlICJJbWFnZVV0
aWxpdGllcy5oIgorI2luY2x1ZGUgPFdlYkNvcmUvSW1hZ2VVdGlsaXRpZXMuaD4KICNpbmNsdWRl
IDxXZWJDb3JlL1VUSVV0aWxpdGllcy5oPgogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
V2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjY1MzA4KQor
KysgU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2lu
ZyBjb3B5KQpAQCAtMjkwLDcgKzI5MCw2IEBACiAJCTFBOUZCQThEMTNGRjA0RTYwMERFRUQ2NyAv
KiBQbHVnaW5Db21wbGV4VGV4dElucHV0U3RhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBOUZCQThDMTNGRjA0RTYwMERFRUQ2NyAvKiBQbHVnaW5D
b21wbGV4VGV4dElucHV0U3RhdGUuaCAqLzsgfTsKIAkJMUFBMTMyMTIxOTFENTkyNDAwOUMxNDg5
IC8qIFdLTmF2aWdhdGlvblJlc3BvbnNlUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFBMTMyMTExOTFENTkyNDAwOUMxNDg5IC8qIFdLTmF2
aWdhdGlvblJlc3BvbnNlUHJpdmF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTFBQTIwRDUxMThBRDUwRTAwMDVEMUVENCAvKiBXS05hdmlnYXRp
b25EZWxlZ2F0ZVByaXZhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDFBQTIwRDUwMThBRDUwRTAwMDVEMUVENCAvKiBXS05hdmlnYXRpb25EZWxlZ2F0
ZVByaXZhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwotCQkxQUEyRTUxRDEyRTRDMDVFMDBCQzQ5NjYgLyogSW1hZ2VVdGlsaXRpZXMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBQTJFNTFCMTJFNEMwNUUw
MEJDNDk2NiAvKiBJbWFnZVV0aWxpdGllcy5oICovOyB9OwogCQkxQUEyRTU2NzE4RDc3NTA4MDAz
ODE0QkQgLyogV0tXZWJQcm9jZXNzQnVuZGxlUGFyYW1ldGVycy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFBMkU1NjUxOEQ3NzUwODAwMzgxNEJEIC8q
IFdLV2ViUHJvY2Vzc0J1bmRsZVBhcmFtZXRlcnMuaCAqLzsgfTsKIAkJMUFBM0Q3NUMxNjUxQjQ0
RjAwODcxM0QwIC8qIFJlbW90ZUxheWVyVHJlZUhvc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBQTNENzVBMTY1MUI0NEYwMDg3MTNEMCAvKiBSZW1v
dGVMYXllclRyZWVIb3N0LmggKi87IH07CiAJCTFBQTQxN0NCMTJDMDBDQ0EwMDJCRTY3QiAvKiBU
ZXh0Q2hlY2tlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMUFBNDE3QzkxMkMwMENDQTAwMkJFNjdCIC8qIFRleHRDaGVja2VyLmggKi87IH07CkBAIC0y
NTE2LDggKzI1MTUsNiBAQAogCQkxQUExQ0M1QzEwMEZBMUExMDA3OERFQkMgLyogUXVhcnR6Q29y
ZS5mcmFtZXdvcmsgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSB3cmFwcGVyLmZyYW1ld29yazsgbmFtZSA9IFF1YXJ0ekNvcmUuZnJhbWV3b3JrOyBwYXRo
ID0gL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvUXVhcnR6Q29yZS5mcmFtZXdvcms7IHNvdXJj
ZVRyZWUgPSAiPGFic29sdXRlPiI7IH07CiAJCTFBQTFDRDA2MTAwRkExQkEwMDc4REVCQyAvKiBD
YXJib24uZnJhbWV3b3JrICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gd3JhcHBlci5mcmFtZXdvcms7IG5hbWUgPSBDYXJib24uZnJhbWV3b3JrOyBwYXRo
ID0gL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvQ2FyYm9uLmZyYW1ld29yazsgc291cmNlVHJl
ZSA9ICI8YWJzb2x1dGU+IjsgfTsKIAkJMUFBMjBENTAxOEFENTBFMDAwNUQxRUQ0IC8qIFdLTmF2
aWdhdGlvbkRlbGVnYXRlUHJpdmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXS05hdmlnYXRpb25EZWxlZ2F0ZVByaXZhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJMUFBMkU1MUIxMkU0QzA1RTAwQkM0OTY2IC8qIEltYWdlVXRpbGl0aWVzLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlVXRpbGl0aWVzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCTFBQTJFNTFDMTJFNEMwNUUwMEJDNDk2NiAvKiBJbWFnZVV0aWxp
dGllc0NHLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdlVXRp
bGl0aWVzQ0cuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQUEyRTU2NDE4RDc3
NTA4MDAzODE0QkQgLyogV0tXZWJQcm9jZXNzQnVuZGxlUGFyYW1ldGVycy5tbSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdLV2ViUHJvY2Vzc0J1bmRsZVBhcmFtZXRl
cnMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBQTJFNTY1MThENzc1MDgwMDM4
MTRCRCAvKiBXS1dlYlByb2Nlc3NCdW5kbGVQYXJhbWV0ZXJzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFdLV2ViUHJvY2Vzc0J1bmRsZVBhcmFtZXRlcnMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUFBM0Q3NTkxNjUxQjQ0RjAwODcxM0QwIC8qIFJlbW90ZUxh
eWVyVHJlZUhvc3QubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBS
ZW1vdGVMYXllclRyZWVIb3N0Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTk2
MCwxNCArNTk1Nyw2IEBACiAJCQlwYXRoID0gbWFjOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsKIAkJfTsKLQkJMUFBMkU1MUExMkU0QzA1NjAwQkM0OTY2IC8qIGNnICovID0gewotCQkJaXNh
ID0gUEJYR3JvdXA7Ci0JCQljaGlsZHJlbiA9ICgKLQkJCQkxQUEyRTUxQzEyRTRDMDVFMDBCQzQ5
NjYgLyogSW1hZ2VVdGlsaXRpZXNDRy5jcHAgKi8sCi0JCQkpOwotCQkJcGF0aCA9IGNnOwotCQkJ
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKLQkJfTsKIAkJMUFBQzREREUxNkIxQ0JGNjAwOTQyNUUz
IC8qIFdlYlN0b3JhZ2UgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0g
KApAQCAtOTU4OCw3ICs5NTc3LDYgQEAKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4g
PSAoCiAJCQkJMzcwOTUwNDExOEE4OEJBNDAwODdBRTVEIC8qIGNmICovLAotCQkJCTFBQTJFNTFB
MTJFNEMwNTYwMEJDNDk2NiAvKiBjZyAqLywKIAkJCQk2QkU5NjlDMjFFNTRENDY3MDA4Qjc0ODMg
LyogY2xhc3NpZmllciAqLywKIAkJCQk0NDUwQUVCRTFEQzNGQUFDMDA5OTQzRjIgLyogY29jb2Eg
Ki8sCiAJCQkJMzcwOTUwNDIxOEE4OENERTAwODdBRTVEIC8qIGZvdW5kYXRpb24gKi8sCkBAIC05
NTk5LDcgKzk1ODcsNiBAQAogCQkJCTUxQjE1QTdEMTM4NDM5QjIwMDMyMUFEOCAvKiB1bml4ICov
LAogCQkJCUVDQTY4MEQzMUU2OTA0QjUwMDczMUQyMCAvKiBFeHRyYVByaXZhdGVTeW1ib2xzRm9y
VEFQSS5oICovLAogCQkJCUVDQkZDMURCMUU2QTRENjYwMDAzMDBDNyAvKiBFeHRyYVB1YmxpY1N5
bWJvbHNGb3JUQVBJLmggKi8sCi0JCQkJMUFBMkU1MUIxMkU0QzA1RTAwQkM0OTY2IC8qIEltYWdl
VXRpbGl0aWVzLmggKi8sCiAJCQkJNTFBN0YyRjQxMjVCRjhENDAwOEFFQjFEIC8qIExvZ2dpbmcu
Y3BwICovLAogCQkJCTUxQTdGMkYyMTI1QkY4MjAwMDhBRUIxRCAvKiBMb2dnaW5nLmggKi8sCiAJ
CQkJMEZEQ0Q3RjYxRDQ3RTkyQTAwOUYwOEJDIC8qIExvZ0luaXRpYWxpemF0aW9uLmggKi8sCkBA
IC0xMDg2NSw3ICsxMDg1Miw2IEBACiAJCQkJNTFDMEM5NzQxRERENzYwMDAwMzJDQUQzIC8qIElj
b25Mb2FkaW5nRGVsZWdhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxRTM1MUNCMTgwRjJDQ0Mw
MEU1M0JFOSAvKiBJREJVdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDQ0Y2QjI1MTJD
OTNFN0EwMDhGOUMzNSAvKiBJbWFnZU9wdGlvbnMuaCBpbiBIZWFkZXJzICovLAotCQkJCTFBQTJF
NTFEMTJFNEMwNUUwMEJDNDk2NiAvKiBJbWFnZVV0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMUExRUM2OUUxODcyMDkyMTAwQjk1MUYwIC8qIEltcG9ydGFuY2VBc3NlcnRpb24uaCBpbiBI
ZWFkZXJzICovLAogCQkJCUJDMjA0RUUzMTFDODNFOTgwMDhGMzM3NSAvKiBJbmplY3RlZEJ1bmRs
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNFRTdEQzUxMjhCNjQ1RDAwOTgyN0RBIC8qIEluamVj
dGVkQnVuZGxlQ2xpZW50LmggaW4gSGVhZGVycyAqLywKSW5kZXg6IExheW91dFRlc3RzL0NoYW5n
ZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2NTMw
OCkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIw
IEBACisyMDIwLTA4LTA2ICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5j
b20+CisKKyAgICAgICAgW21hY09TXSBEcmFnL2Ryb3AgYW4gaW1hZ2Ugb2YgYSB1bnN1cHBvcnRl
ZCBmb3JtYXQgdG8gYW4gZmlsZSBpbnB1dCBlbGVtZW50IHNob3VsZCBjb252ZXJ0IGl0IHRvIGEg
c3VwcG9ydGVkIGZvcm1hdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjEyNDgyCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS82MzczMTY3Mj4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGZhc3QvZm9ybXMv
ZmlsZS9lbnRyaWVzLWFwaS9pbWFnZS1uby10cmFuc2NvZGUtZHJhZy1kcm9wLWV4cGVjdGVkLnR4
dDogQWRkZWQuCisgICAgICAgICogZmFzdC9mb3Jtcy9maWxlL2VudHJpZXMtYXBpL2ltYWdlLW5v
LXRyYW5zY29kZS1kcmFnLWRyb3AuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9mb3Jtcy9m
aWxlL2VudHJpZXMtYXBpL2ltYWdlLXRyYW5zY29kZS1kcmFnLWRyb3AtZXhwZWN0ZWQudHh0OiBB
ZGRlZC4KKyAgICAgICAgKiBmYXN0L2Zvcm1zL2ZpbGUvZW50cmllcy1hcGkvaW1hZ2UtdHJhbnNj
b2RlLWRyYWctZHJvcC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9pb3MvVGVzdEV4
cGVjdGF0aW9uczoKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vVGVzdEV4cGVjdGF0aW9uczoKKyAg
ICAgICAgKiBwbGF0Zm9ybS93aW5jYWlyby9UZXN0RXhwZWN0YXRpb25zOgorICAgICAgICAqIHBs
YXRmb3JtL3drMi9UZXN0RXhwZWN0YXRpb25zOgorCiAyMDIwLTA4LTA1ICBMYXVybyBNb3VyYSAg
PGxtb3VyYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHVEtdW1dQRV0gbWVkaWEvbWVkaWEtc291
cmNlL21lZGlhLXNvdXJjZS13ZWJtLmh0bWwgaXMgdGltaW5nIG91dApJbmRleDogTGF5b3V0VGVz
dHMvZmFzdC9mb3Jtcy9maWxlL2VudHJpZXMtYXBpL2ltYWdlLW5vLXRyYW5zY29kZS1kcmFnLWRy
b3AtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZm9ybXMvZmls
ZS9lbnRyaWVzLWFwaS9pbWFnZS1uby10cmFuc2NvZGUtZHJhZy1kcm9wLWV4cGVjdGVkLnR4dAko
bm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2ZpbGUvZW50cmllcy1hcGkv
aW1hZ2Utbm8tdHJhbnNjb2RlLWRyYWctZHJvcC1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwxNSBAQAorVGVzdHMgYSBIRUlDIGltYWdlIHdpbGwgbm90IGJlIGNvbnZlcnRl
ZCB0byBhbnkgc3VwcG9ydGVkIE1JTUUgdHlwZSB3aGVuIGl0IGlzIGRyYWdnZWQgYW5kIGRyb3Bw
ZWQgdG8gYSBmaWxlIGlucHV0IGVsZW1lbnQgd2hpY2ggYWNjZXB0cyBIRUlDLgorCitPbiBzdWNj
ZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBi
eSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBmaWxlTGlzdC5sZW5ndGggaXMgMQorUEFTUyBm
aWxlLnR5cGUgaXMgImltYWdlL2hlaWMiCitQQVNTIGZpbGUuc2l6ZSBpcyBub24temVyby4KK0lt
YWdlIGNvdWxkIG5vdCBiZSBsb2FkZWQuCitQQVNTIGltZy53aWR0aCBpcyBub3QgNDAwCitQQVNT
IGltZy5oZWlnaHQgaXMgbm90IDQwMAorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQor
CitURVNUIENPTVBMRVRFCisgIApJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9maWxlL2Vu
dHJpZXMtYXBpL2ltYWdlLW5vLXRyYW5zY29kZS1kcmFnLWRyb3AuaHRtbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2ZpbGUvZW50cmllcy1hcGkvaW1hZ2Utbm8tdHJhbnNj
b2RlLWRyYWctZHJvcC5odG1sCShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL2Zhc3QvZm9y
bXMvZmlsZS9lbnRyaWVzLWFwaS9pbWFnZS1uby10cmFuc2NvZGUtZHJhZy1kcm9wLmh0bWwJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw2MiBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxo
ZWFkPgorICAgIDxzY3JpcHQgc3JjPSIuLi8uLi8uLi8uLi9yZXNvdXJjZXMvanMtdGVzdC5qcyI+
PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9Ii4uLy4uLy4uLy4uL3Jlc291cmNlcy91aS1oZWxw
ZXIuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+CisgICAgPGlucHV0IHR5cGU9ImZpbGUi
IGFjY2VwdD0iSU1BR0UvSEVJQyIgb25jaGFuZ2U9ImNoYW5nZWQoZXZlbnQpIj48L2lucHV0Pgor
ICAgIDxzY3JpcHQ+CisgICAgICAgIGRlc2NyaXB0aW9uKCJUZXN0cyBhIEhFSUMgaW1hZ2Ugd2ls
bCBub3QgYmUgY29udmVydGVkIHRvIGFueSBzdXBwb3J0ZWQgTUlNRSB0eXBlIHdoZW4gaXQgaXMg
ZHJhZ2dlZCBhbmQgZHJvcHBlZCB0byBhIGZpbGUgaW5wdXQgZWxlbWVudCB3aGljaCBhY2NlcHRz
IEhFSUMuIik7CisgICAgICAgIGpzVGVzdElzQXN5bmMgPSB0cnVlOworCisgICAgICAgIGZ1bmN0
aW9uIHJ1blRlc3QoKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIXdpbmRvdy5ldmVudFNl
bmRlciB8fCAhZXZlbnRTZW5kZXIuYmVnaW5EcmFnV2l0aEZpbGVzKSB7CisgICAgICAgICAgICAg
ICAgZmluaXNoSlNUZXN0KCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdO
YW1lKCdpbnB1dCcpWzBdOworICAgICAgICAgICAgdmFyIGNlbnRlclggPSBlbGVtZW50Lm9mZnNl
dExlZnQgKyBlbGVtZW50Lm9mZnNldFdpZHRoIC8gMjsKKyAgICAgICAgICAgIHZhciBjZW50ZXJZ
ID0gZWxlbWVudC5vZmZzZXRUb3AgKyBlbGVtZW50Lm9mZnNldEhlaWdodCAvIDI7CisKKyAgICAg
ICAgICAgIGV2ZW50U2VuZGVyLmJlZ2luRHJhZ1dpdGhGaWxlcyhbInJlc291cmNlcy9pbWFnZXMv
Z3JlZW4tNDAweDQwMC5oZWljIl0pOworICAgICAgICAgICAgZXZlbnRTZW5kZXIubW91c2VNb3Zl
VG8oY2VudGVyWCwgY2VudGVyWSk7CisgICAgICAgICAgICBldmVudFNlbmRlci5tb3VzZVVwKCk7
CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBjaGFuZ2VkKGV2ZW50KQorICAgICAgICB7
CisgICAgICAgICAgICBmaWxlTGlzdCA9IGV2ZW50LnRhcmdldC5maWxlczsKKyAgICAgICAgICAg
IHNob3VsZEJlKCJmaWxlTGlzdC5sZW5ndGgiLCAiMSIpOworCisgICAgICAgICAgICBmaWxlID0g
ZmlsZUxpc3RbMF07CisgICAgICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoImZpbGUudHlw
ZSIsICJpbWFnZS9oZWljIik7CisgICAgICAgICAgICBzaG91bGRCZU5vblplcm8oImZpbGUuc2l6
ZSIpOworCisgICAgICAgICAgICBpbWcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbWciKTsK
KyAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaW1nKTsKKworICAgICAgICAg
ICAgdmFyIHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7CisgICAgICAgICAgICByZWFkZXIub25s
b2FkID0gKCkgPT4geworICAgICAgICAgICAgICAgIGltZy5vbmxvYWQgPSAoKSA9PiB7CisgICAg
ICAgICAgICAgICAgICAgIGRlYnVnKCJJbWFnZSB3YXMgbG9hZGVkLiIpOworICAgICAgICAgICAg
ICAgICAgICBzaG91bGRCZSgiaW1nLndpZHRoIiwgIjQwMCIpOworICAgICAgICAgICAgICAgICAg
ICBzaG91bGRCZSgiaW1nLmhlaWdodCIsICI0MDAiKTsKKyAgICAgICAgICAgICAgICAgICAgZmlu
aXNoSlNUZXN0KCk7CisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICBpbWcub25l
cnJvciA9ICgpID0+IHsKKyAgICAgICAgICAgICAgICAgICAgZGVidWcoIkltYWdlIGNvdWxkIG5v
dCBiZSBsb2FkZWQuIik7CisgICAgICAgICAgICAgICAgICAgIHNob3VsZE5vdEJlKCJpbWcud2lk
dGgiLCAiNDAwIik7CisgICAgICAgICAgICAgICAgICAgIHNob3VsZE5vdEJlKCJpbWcuaGVpZ2h0
IiwgIjQwMCIpOworICAgICAgICAgICAgICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKKyAgICAgICAg
ICAgICAgICB9OworICAgICAgICAgICAgICAgIGltZy5zcmMgPSByZWFkZXIucmVzdWx0OworICAg
ICAgICAgICAgfTsKKyAgICAgICAgICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUpOworICAg
ICAgICB9CisgICAgICAgIHJ1blRlc3QoKTsKKyAgICA8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRt
bD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZm9ybXMvZmlsZS9lbnRyaWVzLWFwaS9pbWFnZS10
cmFuc2NvZGUtZHJhZy1kcm9wLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9mYXN0L2Zvcm1zL2ZpbGUvZW50cmllcy1hcGkvaW1hZ2UtdHJhbnNjb2RlLWRyYWctZHJvcC1l
eHBlY3RlZC50eHQJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9maWxl
L2VudHJpZXMtYXBpL2ltYWdlLXRyYW5zY29kZS1kcmFnLWRyb3AtZXhwZWN0ZWQudHh0CSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTUgQEAKK1Rlc3RzIGEgSEVJQyBpbWFnZSB3aWxsIGJlIGNv
bnZlcnRlZCB0byBhIFBORyBpbWFnZSB3aGVuIGl0IGlzIGRyYWdnZWQgYW5kIGRyb3BwZWQgdG8g
YSBmaWxlIGlucHV0IGVsZW1lbnQgd2hpY2ggYWNjZXB0cyBQTkcuCisKK09uIHN1Y2Nlc3MsIHlv
dSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNU
IENPTVBMRVRFIi4KKworCitQQVNTIGZpbGVMaXN0Lmxlbmd0aCBpcyAxCitQQVNTIGZpbGUudHlw
ZSBpcyAiaW1hZ2UvcG5nIgorUEFTUyBmaWxlLnNpemUgaXMgbm9uLXplcm8uCitJbWFnZSB3YXMg
bG9hZGVkLgorUEFTUyBpbWcud2lkdGggaXMgNDAwCitQQVNTIGltZy5oZWlnaHQgaXMgNDAwCitQ
QVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKyAgCkluZGV4
OiBMYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2ZpbGUvZW50cmllcy1hcGkvaW1hZ2UtdHJhbnNjb2Rl
LWRyYWctZHJvcC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZm9ybXMvZmls
ZS9lbnRyaWVzLWFwaS9pbWFnZS10cmFuc2NvZGUtZHJhZy1kcm9wLmh0bWwJKG5vbmV4aXN0ZW50
KQorKysgTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9maWxlL2VudHJpZXMtYXBpL2ltYWdlLXRyYW5z
Y29kZS1kcmFnLWRyb3AuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYyIEBACis8IURP
Q1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+CisgICAgPHNjcmlwdCBzcmM9Ii4uLy4uLy4uLy4u
L3Jlc291cmNlcy9qcy10ZXN0LmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iLi4vLi4v
Li4vLi4vcmVzb3VyY2VzL3VpLWhlbHBlci5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4K
KyAgICA8aW5wdXQgdHlwZT0iZmlsZSIgYWNjZXB0PSIucG5nIiBvbmNoYW5nZT0iY2hhbmdlZChl
dmVudCkiPjwvaW5wdXQ+CisgICAgPHNjcmlwdD4KKyAgICAgICAgZGVzY3JpcHRpb24oIlRlc3Rz
IGEgSEVJQyBpbWFnZSB3aWxsIGJlIGNvbnZlcnRlZCB0byBhIFBORyBpbWFnZSB3aGVuIGl0IGlz
IGRyYWdnZWQgYW5kIGRyb3BwZWQgdG8gYSBmaWxlIGlucHV0IGVsZW1lbnQgd2hpY2ggYWNjZXB0
cyBQTkcuIik7CisgICAgICAgIGpzVGVzdElzQXN5bmMgPSB0cnVlOworCisgICAgICAgIGZ1bmN0
aW9uIHJ1blRlc3QoKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIXdpbmRvdy5ldmVudFNl
bmRlciB8fCAhZXZlbnRTZW5kZXIuYmVnaW5EcmFnV2l0aEZpbGVzKSB7CisgICAgICAgICAgICAg
ICAgZmluaXNoSlNUZXN0KCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdO
YW1lKCdpbnB1dCcpWzBdOworICAgICAgICAgICAgdmFyIGNlbnRlclggPSBlbGVtZW50Lm9mZnNl
dExlZnQgKyBlbGVtZW50Lm9mZnNldFdpZHRoIC8gMjsKKyAgICAgICAgICAgIHZhciBjZW50ZXJZ
ID0gZWxlbWVudC5vZmZzZXRUb3AgKyBlbGVtZW50Lm9mZnNldEhlaWdodCAvIDI7CisKKyAgICAg
ICAgICAgIGV2ZW50U2VuZGVyLmJlZ2luRHJhZ1dpdGhGaWxlcyhbInJlc291cmNlcy9pbWFnZXMv
Z3JlZW4tNDAweDQwMC5oZWljIl0pOworICAgICAgICAgICAgZXZlbnRTZW5kZXIubW91c2VNb3Zl
VG8oY2VudGVyWCwgY2VudGVyWSk7CisgICAgICAgICAgICBldmVudFNlbmRlci5tb3VzZVVwKCk7
CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBjaGFuZ2VkKGV2ZW50KQorICAgICAgICB7
CisgICAgICAgICAgICBmaWxlTGlzdCA9IGV2ZW50LnRhcmdldC5maWxlczsKKyAgICAgICAgICAg
IHNob3VsZEJlKCJmaWxlTGlzdC5sZW5ndGgiLCAiMSIpOworCisgICAgICAgICAgICBmaWxlID0g
ZmlsZUxpc3RbMF07CisgICAgICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoImZpbGUudHlw
ZSIsICJpbWFnZS9wbmciKTsKKyAgICAgICAgICAgIHNob3VsZEJlTm9uWmVybygiZmlsZS5zaXpl
Iik7CisKKyAgICAgICAgICAgIGltZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImltZyIpOwor
ICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChpbWcpOworCisgICAgICAgICAg
ICB2YXIgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTsKKyAgICAgICAgICAgIHJlYWRlci5vbmxv
YWQgPSAoKSA9PiB7CisgICAgICAgICAgICAgICAgaW1nLm9ubG9hZCA9ICgpID0+IHsKKyAgICAg
ICAgICAgICAgICAgICAgZGVidWcoIkltYWdlIHdhcyBsb2FkZWQuIik7CisgICAgICAgICAgICAg
ICAgICAgIHNob3VsZEJlKCJpbWcud2lkdGgiLCAiNDAwIik7CisgICAgICAgICAgICAgICAgICAg
IHNob3VsZEJlKCJpbWcuaGVpZ2h0IiwgIjQwMCIpOworICAgICAgICAgICAgICAgICAgICBmaW5p
c2hKU1Rlc3QoKTsKKyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgIGltZy5vbmVy
cm9yID0gKCkgPT4geworICAgICAgICAgICAgICAgICAgICBkZWJ1ZygiSW1hZ2UgY291bGQgbm90
IGJlIGxvYWRlZC4iKTsKKyAgICAgICAgICAgICAgICAgICAgc2hvdWxkTm90QmUoImltZy53aWR0
aCIsICI0MDAiKTsKKyAgICAgICAgICAgICAgICAgICAgc2hvdWxkTm90QmUoImltZy5oZWlnaHQi
LCAiNDAwIik7CisgICAgICAgICAgICAgICAgICAgIGZpbmlzaEpTVGVzdCgpOworICAgICAgICAg
ICAgICAgIH07CisgICAgICAgICAgICAgICAgaW1nLnNyYyA9IHJlYWRlci5yZXN1bHQ7CisgICAg
ICAgICAgICB9OworICAgICAgICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZSk7CisgICAg
ICAgIH0KKyAgICAgICAgcnVuVGVzdCgpOworICAgIDwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1s
PgpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vaW9zL1Rlc3RFeHBlY3RhdGlvbnMKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vaW9zL1Rlc3RFeHBlY3RhdGlvbnMJKHJldmlz
aW9uIDI2NTMwOCkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL2lvcy9UZXN0RXhwZWN0YXRpb25z
CSh3b3JraW5nIGNvcHkpCkBAIC01OTMsNiArNTkzLDggQEAgZmFzdC9mb3Jtcy9maWxlL2lucHV0
LWZpbGUtdmFsdWUuaHRtbCBbIAogZmFzdC9mb3Jtcy9maWxlL2lucHV0LWZpbGUtd3JpdGUtZmls
ZXMuaHRtbCBbIFNraXAgXQogZmFzdC9mb3Jtcy9maWxlL3JlY292ZXItZmlsZS1pbnB1dC1pbi11
bnBvc3RlZC1mb3JtLmh0bWwgWyBTa2lwIF0KIGZhc3QvZm9ybXMvZmlsZS9zZWxlY3RlZC1maWxl
cy1mcm9tLWhpc3Rvcnktc3RhdGUuaHRtbCBbIFNraXAgXQorZmFzdC9mb3Jtcy9maWxlL2VudHJp
ZXMtYXBpL2ltYWdlLW5vLXRyYW5zY29kZS1kcmFnLWRyb3AuaHRtbCBbIFNraXAgXQorZmFzdC9m
b3Jtcy9maWxlL2VudHJpZXMtYXBpL2ltYWdlLXRyYW5zY29kZS1kcmFnLWRyb3AuaHRtbCBbIFNr
aXAgXQogZmFzdC9mb3Jtcy9mb2N1cy1zZWxlY3Rpb24taW5wdXQuaHRtbCBbIFNraXAgXQogZmFz
dC9mb3Jtcy9mb2N1cy1zZWxlY3Rpb24tdGV4dGFyZWEuaHRtbCBbIFNraXAgXQogZmFzdC9mb3Jt
cy9pbnB1dC1hcHBlYXJhbmNlLXNwaW5idXR0b24tdXAuaHRtbCBbIFNraXAgXQpJbmRleDogTGF5
b3V0VGVzdHMvcGxhdGZvcm0vd2luL1Rlc3RFeHBlY3RhdGlvbnMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvcGxhdGZvcm0vd2luL1Rlc3RFeHBlY3RhdGlvbnMJKHJldmlzaW9uIDI2NTMwOCkK
KysrIExheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9UZXN0RXhwZWN0YXRpb25zCSh3b3JraW5nIGNv
cHkpCkBAIC0zNjgzLDYgKzM2ODMsOCBAQCBmYXN0L2NhbnZhcy8yZC5zZXRQYXRoLmh0bWwgWyBG
YWlsdXJlIF0KIGZhc3QvZm9ybXMvZmlsZS9lbnRyaWVzLWFwaS9kcmFnLWZvbGRlci13ZWJraXRF
bnRyaWVzLmh0bWwgWyBGYWlsdXJlIF0KIGZhc3QvZm9ybXMvZmlsZS9lbnRyaWVzLWFwaS93ZWJr
aXRkaXJlY3RvcnktZHJhZy1mb2xkZXItd2Via2l0RW50cmllcy5odG1sIFsgRmFpbHVyZSBdCiBm
YXN0L2Zvcm1zL2ZpbGUvZW50cmllcy1hcGkvd2Via2l0ZGlyZWN0b3J5LWRyYWctZm9sZGVyLmh0
bWwgWyBGYWlsdXJlIF0KK2Zhc3QvZm9ybXMvZmlsZS9lbnRyaWVzLWFwaS9pbWFnZS1uby10cmFu
c2NvZGUtZHJhZy1kcm9wLmh0bWwgWyBGYWlsdXJlIF0KK2Zhc3QvZm9ybXMvZmlsZS9lbnRyaWVz
LWFwaS9pbWFnZS10cmFuc2NvZGUtZHJhZy1kcm9wLmh0bWwgWyBGYWlsdXJlIF0KIGh0dHAvdGVz
dHMvbXVsdGlwYXJ0L211bHRpcGFydC1hc3luYy1pbWFnZS5odG1sIFsgRmFpbHVyZSBdCiBodHRw
L3Rlc3RzL3NlY3VyaXR5L2NvbnRlbnRTZWN1cml0eVBvbGljeS9hbGxvdy1mYXZpY29uLmh0bWwg
WyBGYWlsdXJlIF0KIGh0dHAvd3B0L2VudHJpZXMtYXBpL2ludGVyZmFjZXMuaHRtbCBbIEZhaWx1
cmUgXQpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luY2Fpcm8vVGVzdEV4cGVjdGF0aW9u
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW5jYWlyby9UZXN0RXhwZWN0
YXRpb25zCShyZXZpc2lvbiAyNjUzMDgpCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW5jYWly
by9UZXN0RXhwZWN0YXRpb25zCSh3b3JraW5nIGNvcHkpCkBAIC03NDUsNiArNzQ1LDggQEAgZmFz
dC9mb3Jtcy9maWxlL2dldC1maWxlLXVwbG9hZC11c2luZy1vcAogZmFzdC9mb3Jtcy9maWxlL2lu
cHV0LWZpbGUtdmFsdWUtdXNpbmctb3Blbi1wYW5lbC5odG1sIFsgVGltZW91dCBdCiBmYXN0L2Zv
cm1zL2ZpbGUvaW5wdXQtZmlsZS13cml0ZS1maWxlcy11c2luZy1vcGVuLXBhbmVsLmh0bWwgWyBU
aW1lb3V0IF0KIGZhc3QvZm9ybXMvZmlsZS9vcGVuLWZpbGUtcGFuZWwuaHRtbCBbIFRpbWVvdXQg
XQorZmFzdC9mb3Jtcy9maWxlL2VudHJpZXMtYXBpL2ltYWdlLW5vLXRyYW5zY29kZS1kcmFnLWRy
b3AuaHRtbCBbU2tpcCBdCitmYXN0L2Zvcm1zL2ZpbGUvZW50cmllcy1hcGkvaW1hZ2UtdHJhbnNj
b2RlLWRyYWctZHJvcC5odG1sIFtTa2lwIF0KIGZhc3QvaGlzdG9yeS9wYWdlLWNhY2hlLWNyZWF0
ZU9iamVjdFVSTC11c2luZy1vcGVuLXBhbmVsLmh0bWwgWyBUaW1lb3V0IF0KIGZhc3QvaGlzdG9y
eS9wYWdlLWNhY2hlLWNyZWF0ZU9iamVjdFVSTC5odG1sIFsgVGltZW91dCBdCiAKSW5kZXg6IExh
eW91dFRlc3RzL3BsYXRmb3JtL3drMi9UZXN0RXhwZWN0YXRpb25zCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL3BsYXRmb3JtL3drMi9UZXN0RXhwZWN0YXRpb25zCShyZXZpc2lvbiAyNjUzMDgp
CisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS93azIvVGVzdEV4cGVjdGF0aW9ucwkod29ya2luZyBj
b3B5KQpAQCAtNjU3LDYgKzY1Nyw4IEBAIG1lZGlhL3ZpZGVvLXNyYy1ibG9iLmh0bWwKIHNlY3Vy
aXR5L2NvbnRlbnRTZWN1cml0eVBvbGljeS9pbWFnZS13aXRoLWJsb2ItdXJsLWFsbG93ZWQtYnkt
aW1nLXNyYy1zdGFyLXdpdGgtQWxsb3dDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VTdGFyVG9N
YXRjaEFueVByb3RvY29sLWVuYWJsZWQuaHRtbAogc2VjdXJpdHkvY29udGVudFNlY3VyaXR5UG9s
aWN5L2ltYWdlLXdpdGgtYmxvYi11cmwtYmxvY2tlZC1ieS1pbWctc3JjLXN0YXIuaHRtbAogc2Vj
dXJpdHkvY29udGVudFNlY3VyaXR5UG9saWN5L3ZpZGVvLXdpdGgtYmxvYi11cmwtYWxsb3dlZC1i
eS1tZWRpYS1zcmMtc3Rhci5odG1sCitmYXN0L2Zvcm1zL2ZpbGUvZW50cmllcy1hcGkvaW1hZ2Ut
bm8tdHJhbnNjb2RlLWRyYWctZHJvcC5odG1sCitmYXN0L2Zvcm1zL2ZpbGUvZW50cmllcy1hcGkv
aW1hZ2UtdHJhbnNjb2RlLWRyYWctZHJvcC5odG1sCiAKICMgV2ViS2l0VGVzdFJ1bm5lciBkb2Vz
bid0IGhhdmUgZXZlbnRTZW5kZXIuZmlyZUtleWJvYXJkRXZlbnRzVG9FbGVtZW50CiBwbGF0Zm9y
bS9tYWMvZmFzdC9ldmVudHMvb2JqYy1rZXlib2FyZC1ldmVudC1jcmVhdGlvbi5odG1sCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>406235</attachid>
            <date>2020-08-07 17:30:12 -0700</date>
            <delta_ts>2020-08-09 15:06:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-212482-20200807173012.patch</filename>
            <type>text/plain</type>
            <size>51503</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2NTM5OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUwIEBACisyMDIwLTA4LTA3ICBTYWlkIEFi
b3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgW21hY09TXSBE
cmFnL2Ryb3AgYW4gaW1hZ2Ugb2YgYSB1bnN1cHBvcnRlZCBmb3JtYXQgdG8gYW4gZmlsZSBpbnB1
dCBlbGVtZW50IHNob3VsZCBjb252ZXJ0IGl0IHRvIGEgc3VwcG9ydGVkIGZvcm1hdAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEyNDgyCisgICAgICAg
IDxyZGFyOi8vcHJvYmxlbS82MzczMTY3Mj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBBbHRob3VnaCB0aGUgbGlzdCBvZiB0aGUgZHJvcHBlZCBmaWxl
cyBhcmUgc2VudCBmcm9tIHRoZSBVSSBwcm9jZXNzIHRvCisgICAgICAgIHRoZSBXZWIgcHJvY2Vz
cyB0aHJvdWdoIHRoZSBXZWJQYWdlIGNoYW5uZWwsIHRoZSBmaWxlIGlucHV0IHNldHRpbmdzIGFy
ZQorICAgICAgICBvbmx5IGtub3duIGJ5IHRoZSBXZWIgcHJvY2Vzcy4gU28gd2UgaGF2ZSB0byBk
byB0aGUgaW1hZ2UgdHJhbnNjb2RpbmcgaW4KKyAgICAgICAgV2ViQ29yZS4KKworICAgICAgICBU
ZXN0czogZmFzdC9mb3Jtcy9maWxlL2VudHJpZXMtYXBpL2ltYWdlLW5vLXRyYW5zY29kZS1kcmFn
LWRyb3AuaHRtbAorICAgICAgICAgICAgICAgZmFzdC9mb3Jtcy9maWxlL2VudHJpZXMtYXBpL2lt
YWdlLXRyYW5zY29kZS1kcmFnLWRyb3AuaHRtbAorCisgICAgICAgICogU291cmNlc0NvY29hLnR4
dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAg
ICogaHRtbC9GaWxlSW5wdXRUeXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVJbnB1dFR5
cGU6OmhhbmRsZURPTUFjdGl2YXRlRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsZUlucHV0
VHlwZTo6ZmlsZUNob29zZXJTZXR0aW5ncyBjb25zdCk6CisgICAgICAgIE1vdmUgZmlsbGluZyBG
aWxlQ2hvb3NlclNldHRpbmdzIHRvIHRoZSBmdW5jdGlvbjogZmlsZUNob29zZXJTZXR0aW5ncygp
LgorCisgICAgICAgIChXZWJDb3JlOjpGaWxlSW5wdXRUeXBlOjphcHBseUZpbGVDaG9vc2VyU2V0
dGluZ3MpOgorICAgICAgICBDYWxsIGZpbGVDaG9vc2VyU2V0dGluZ3MoKSBpbnN0ZWFkIG9mIHJl
Y2VpdmluZyBGaWxlQ2hvb3NlclNldHRpbmdzIGFzCisgICAgICAgIGFuIGFyZ3VtZW50LgorCisg
ICAgICAgIChXZWJDb3JlOjpGaWxlSW5wdXRUeXBlOjpmaWxlc0Nob3Nlbik6CisgICAgICAgIEFk
ZCB0aGlzIGZ1bmN0aW9uIHdoaWNoIGNhbiBiZSBjYWxsZWQgZnJvbSByZWNlaXZlRHJvcHBlZEZp
bGVzKCkgb3IKKyAgICAgICAgcmVjZWl2ZURyb3BwZWRGaWxlc1dpdGhJbWFnZVRyYW5zY29kaW5n
KCkuICAgICAgICAKKworICAgICAgICAoV2ViQ29yZTo6RmlsZUlucHV0VHlwZTo6cmVjZWl2ZURy
b3BwZWRGaWxlc1dpdGhJbWFnZVRyYW5zY29kaW5nKToKKyAgICAgICAgRmluZHMgb3V0IHdoZXRo
ZXIgaW1hZ2UgdHJhbnNjb2RpbmcgaXMgbmVlZGVkIGZvciB0aGUgZHJvcHBlZCBmaWxlcy4gSWYK
KyAgICAgICAgaXQgaXMgbmVlZGVkLCBpdCB3aWxsIGJlIGRvbmUgaW4gYSBXb3JrUXVldWUgYW5k
IGNhbGwgZmlsZXNDaG9zZW4oKSB3aGVuCisgICAgICAgIGl0IGlzIGRvbmUuIE90aGVyd2lzZSBp
dCB3aWxsIGNhbGwgZmlsZXNDaG9zZW4oKSBpbW1lZGlhdGVseS4KKworICAgICAgICAoV2ViQ29y
ZTo6RmlsZUlucHV0VHlwZTo6cmVjZWl2ZURyb3BwZWRGaWxlcyk6CisgICAgICAgICogaHRtbC9G
aWxlSW5wdXRUeXBlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VVdGlsaXRp
ZXMuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VVdGlsaXRp
ZXNDRy5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6c2hhcmVkSW1hZ2VUcmFuc2NvZGlu
Z1F1ZXVlKToKKyAgICAgICAgUHJvdmlkZSBhIHNoYXJlZCBXb3JrUXVldWUgd2hpY2ggY2FuIGJl
IHVzZWQgYnkgV2ViQ29yZSBhbmQgV2ViS2l0LgorCisgICAgICAgIChXZWJDb3JlOjp0cmFuc2Nv
ZGVJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpmaW5kSW1hZ2VzRm9yVHJhbnNjb2RpbmcpOgor
ICAgICAgICAoV2ViQ29yZTo6dHJhbnNjb2RlSW1hZ2VzKToKKwogMjAyMC0wOC0wNyAgSmFtZXMg
RGFycGluaWFuICA8amRhcnBpbmlhbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgT2ZmIGJ5IG9u
ZSBlcnJvciBpbiB0cmFuc2Zvcm0gZmVlZGJhY2sgYnVmZmVyIGJpbmRpbmcKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
U291cmNlc0NvY29hLnR4dAkocmV2aXNpb24gMjY1Mzk5KQorKysgU291cmNlL1dlYkNvcmUvU291
cmNlc0NvY29hLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMzMxLDYgKzMzMSw3IEBAIHBsYXRmb3Jt
L2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWMKIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0lt
YWdlQnVmZmVyVXRpbGl0aWVzQ0cuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZURlY29k
ZXJDRy5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlU291cmNlQ0dNYWMubW0KK3BsYXRm
b3JtL2dyYXBoaWNzL2NnL0ltYWdlVXRpbGl0aWVzQ0cuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9j
Zy9JbnRQb2ludENHLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW50UmVjdENHLmNwcAogcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvSW50U2l6ZUNHLmNwcApJbmRleDogU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjY1Mzk5KQor
KysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNzYyLDYgKzE3NjIsNyBAQAogCQk1NUFEMDk0MDI0MDg5NjQwMDBERTRE
MkYgLyogRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJFQTA5RjkyM0ZDQ0M2QTAwODUwNEE1IC8qIERpc3Bs
YXlMaXN0RHJhd2luZ0NvbnRleHQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQk1NUFEMDk0MTI0MDg5NjRBMDBERTREMkYgLyogQ29uY3JldGVJbWFn
ZUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NzJCQUMzQTcyM0UxNzMyODAwOEQ3NDFDIC8qIENvbmNyZXRlSW1hZ2VCdWZmZXIuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1NUFGMTRFNjFFQUFD
NTlCMDAyNkVFQUEgLyogVVRJUmVnaXN0cnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDU1QUYxNEU0MUVBQUM1OUIwMDI2RUVBQSAvKiBVVElSZWdpc3Ry
eS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTU1
QkJENDI5MjREQjU2MDQwMEJCNkUwQyAvKiBJbWFnZVV0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTVCQkQ0MjgyNERCNTNBMjAwQkI2RTBD
IC8qIEltYWdlVXRpbGl0aWVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJNTVEQ0M1MjgyMjQwN0IyMDAwQzI2RTMyIC8qIFNWR1ByaW1pdGl2ZUxp
c3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1REND
NTI1MjI0MDc0OUUwMEMyNkUzMiAvKiBTVkdQcmltaXRpdmVMaXN0LmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTVEQ0M1MjkyMjQwN0IyQTAwQzI2
RTMyIC8qIFNWR0xpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDU1RENDNTIzMjI0MDczRkUwMEMyNkUzMiAvKiBTVkdMaXN0LmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTVFQzk1OTkyMDZBQTdBMDAw
N0REMEE5IC8qIFBhaW50RnJlcXVlbmN5VHJhY2tlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTVFQzk1OTcyMDY5QzkyRDAwN0REMEE5IC8qIFBhaW50
RnJlcXVlbmN5VHJhY2tlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CkBAIC04ODQ3LDYgKzg4NDgsOCBAQAogCQk1NUEzMzZGODFEODIxRTNDMDAyMkM0
QzcgLyogSW1hZ2VCYWNraW5nU3RvcmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSW1hZ2VCYWNraW5nU3RvcmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTVB
RjE0RTMxRUFBQzU5QjAwMjZFRUFBIC8qIFVUSVJlZ2lzdHJ5LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFVUSVJlZ2lzdHJ5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTVBRjE0
RTQxRUFBQzU5QjAwMjZFRUFBIC8qIFVUSVJlZ2lzdHJ5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVUSVJl
Z2lzdHJ5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTU1QkJENDI2MjREQjUzNDMw
MEJCNkUwQyAvKiBJbWFnZVV0aWxpdGllc0NHLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdl
VXRpbGl0aWVzQ0cuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1NUJCRDQyODI0
REI1M0EyMDBCQjZFMEMgLyogSW1hZ2VVdGlsaXRpZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VV
dGlsaXRpZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTVCRTAyNTcyMjNCMjlD
MDAwMzJGMDhBIC8qIFNWR1Byb3BlcnR5UmVnaXN0cnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHUHJv
cGVydHlSZWdpc3RyeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NUJFMDI1OTIy
M0IyOUMxMDAzMkYwOEEgLyogU1ZHQW5pbWF0aW9uQWRkaXRpdmVWYWx1ZUZ1bmN0aW9uSW1wbC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBTVkdBbmltYXRpb25BZGRpdGl2ZVZhbHVlRnVuY3Rpb25JbXBsLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU1QkUwMjVBMjIzQjI5QzIwMDMyRjA4QSAv
KiBTVkdQb2ludGVyTWVtYmVyQWNjZXNzb3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHUG9pbnRlck1l
bWJlckFjY2Vzc29yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNTYyNSw2ICsy
NTYyOCw3IEBACiAJCQkJNTU1Qjg3RUIxQ0FBRjBBQjAwMzQ5NDI1IC8qIEltYWdlRGVjb2RlckNH
LmggKi8sCiAJCQkJNEIzNDgwOTIwRUVGNTBENDAwQUMxQjQxIC8qIEltYWdlU291cmNlQ0cuaCAq
LywKIAkJCQk0QjM0ODA5MTBFRUY1MEQ0MDBBQzFCNDEgLyogSW1hZ2VTb3VyY2VDR01hYy5tbSAq
LywKKwkJCQk1NUJCRDQyNjI0REI1MzQzMDBCQjZFMEMgLyogSW1hZ2VVdGlsaXRpZXNDRy5jcHAg
Ki8sCiAJCQkJQjI3NTM1MzIwQjA1MzgxNDAwMkNFNjRGIC8qIEludFBvaW50Q0cuY3BwICovLAog
CQkJCUIyNzUzNTMzMEIwNTM4MTQwMDJDRTY0RiAvKiBJbnRSZWN0Q0cuY3BwICovLAogCQkJCUIy
NzUzNTM0MEIwNTM4MTQwMDJDRTY0RiAvKiBJbnRTaXplQ0cuY3BwICovLApAQCAtMjU4MjgsNiAr
MjU4MzIsNyBAQAogCQkJCTU1NDY3NTc3MUZEMUZDMUEwMDNCMTBCMCAvKiBJbWFnZVNvdXJjZS5j
cHAgKi8sCiAJCQkJNTU0Njc1NzgxRkQxRkMxQTAwM0IxMEIwIC8qIEltYWdlU291cmNlLmggKi8s
CiAJCQkJNTU1MENCNDExRTk1NUUzQzAwMTExQUEwIC8qIEltYWdlVHlwZXMuaCAqLywKKwkJCQk1
NUJCRDQyODI0REI1M0EyMDBCQjZFMEMgLyogSW1hZ2VVdGlsaXRpZXMuaCAqLywKIAkJCQkwNzg2
MzNGODI0MDcxNUQyMDA4N0FFMjEgLyogSW5iYW5kR2VuZXJpY0N1ZS5jcHAgKi8sCiAJCQkJMDc4
NjMzREUyM0ZFREYyMjAwODdBRTIxIC8qIEluYmFuZEdlbmVyaWNDdWUuaCAqLywKIAkJCQkwNzA2
QTBENzI0MDgzMEE2MDBFOTM4MTggLyogSW5iYW5kR2VuZXJpY0N1ZUlkZW50aWZpZXIuaCAqLywK
QEAgLTMxNDIyLDYgKzMxNDI3LDcgQEAKIAkJCQk0QjM0ODA5NDBFRUY1MEQ0MDBBQzFCNDEgLyog
SW1hZ2VTb3VyY2VDRy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDc4RUQxOTMyMTZEMDc5NTAwNzc1
QjMzIC8qIEltYWdlVHJhbnNmZXJTZXNzaW9uVlQuaCBpbiBIZWFkZXJzICovLAogCQkJCTU1NTBD
QjQyMUU5NTVFM0MwMDExMUFBMCAvKiBJbWFnZVR5cGVzLmggaW4gSGVhZGVycyAqLywKKwkJCQk1
NUJCRDQyOTI0REI1NjA0MDBCQjZFMEMgLyogSW1hZ2VVdGlsaXRpZXMuaCBpbiBIZWFkZXJzICov
LAogCQkJCTI2Rjc1NkIzMUIzQjY2RjcwMDA1REQ3OSAvKiBJbW11dGFibGVORkEuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTI2Rjc1NkI1MUIzQjY4RjIwMDA1REQ3OSAvKiBJbW11dGFibGVORkFOb2Rl
QnVpbGRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzE2RkUxMTgwRTZFMURBNzAwQkY2MDg4IC8q
IEltcGxpY2l0QW5pbWF0aW9uLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2h0bWwvRmlsZUlucHV0VHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRt
bC9GaWxlSW5wdXRUeXBlLmNwcAkocmV2aXNpb24gMjY1Mzk5KQorKysgU291cmNlL1dlYkNvcmUv
aHRtbC9GaWxlSW5wdXRUeXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsNyBAQAog
I2luY2x1ZGUgIkljb24uaCIKICNpbmNsdWRlICJJbnB1dFR5cGVOYW1lcy5oIgogI2luY2x1ZGUg
IkxvY2FsaXplZFN0cmluZ3MuaCIKKyNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCiAjaW5j
bHVkZSAiUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuaCIKICNpbmNsdWRlICJSdW50aW1lRW5hYmxl
ZEZlYXR1cmVzLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKQEAgLTQ3LDYgKzQ4LDExIEBACiAj
aW5jbHVkZSA8d3RmL1R5cGVDYXN0cy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxk
ZXIuaD4KIAorI2lmIFBMQVRGT1JNKE1BQykKKyNpbmNsdWRlICJJbWFnZVV0aWxpdGllcy5oIgor
I2luY2x1ZGUgIlVUSVV0aWxpdGllcy5oIgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IGNsYXNzIFVwbG9hZEJ1dHRvbkVsZW1lbnQ7CiB9CkBAIC0yMDQsMTYgKzIxMCw3IEBAIHZvaWQg
RmlsZUlucHV0VHlwZTo6aGFuZGxlRE9NQWN0aXZhdGVFdmUKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgaWYgKGF1dG8qIGNocm9tZSA9IHRoaXMtPmNocm9tZSgpKSB7Ci0gICAgICAgIEZpbGVDaG9v
c2VyU2V0dGluZ3Mgc2V0dGluZ3M7Ci0gICAgICAgIHNldHRpbmdzLmFsbG93c0RpcmVjdG9yaWVz
ID0gYWxsb3dzRGlyZWN0b3JpZXMoKTsKLSAgICAgICAgc2V0dGluZ3MuYWxsb3dzTXVsdGlwbGVG
aWxlcyA9IGlucHV0Lmhhc0F0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24obXVsdGlwbGVB
dHRyKTsKLSAgICAgICAgc2V0dGluZ3MuYWNjZXB0TUlNRVR5cGVzID0gaW5wdXQuYWNjZXB0TUlN
RVR5cGVzKCk7Ci0gICAgICAgIHNldHRpbmdzLmFjY2VwdEZpbGVFeHRlbnNpb25zID0gaW5wdXQu
YWNjZXB0RmlsZUV4dGVuc2lvbnMoKTsKLSAgICAgICAgc2V0dGluZ3Muc2VsZWN0ZWRGaWxlcyA9
IG1fZmlsZUxpc3QtPnBhdGhzKCk7Ci0jaWYgRU5BQkxFKE1FRElBX0NBUFRVUkUpCi0gICAgICAg
IHNldHRpbmdzLm1lZGlhQ2FwdHVyZVR5cGUgPSBpbnB1dC5tZWRpYUNhcHR1cmVUeXBlKCk7Ci0j
ZW5kaWYKLSAgICAgICAgYXBwbHlGaWxlQ2hvb3NlclNldHRpbmdzKHNldHRpbmdzKTsKKyAgICAg
ICAgYXBwbHlGaWxlQ2hvb3NlclNldHRpbmdzKCk7CiAgICAgICAgIGNocm9tZS0+cnVuT3BlblBh
bmVsKCppbnB1dC5kb2N1bWVudCgpLmZyYW1lKCksICptX2ZpbGVDaG9vc2VyKTsKICAgICB9CiAK
QEAgLTMzMiwxMiArMzI5LDI5IEBAIHZvaWQgRmlsZUlucHV0VHlwZTo6cmVxdWVzdEljb24oY29u
c3QgVmUKICAgICBjaHJvbWUtPmxvYWRJY29uRm9yRmlsZXMocGF0aHMsICptX2ZpbGVJY29uTG9h
ZGVyKTsKIH0KIAotdm9pZCBGaWxlSW5wdXRUeXBlOjphcHBseUZpbGVDaG9vc2VyU2V0dGluZ3Mo
Y29uc3QgRmlsZUNob29zZXJTZXR0aW5ncyYgc2V0dGluZ3MpCitGaWxlQ2hvb3NlclNldHRpbmdz
IEZpbGVJbnB1dFR5cGU6OmZpbGVDaG9vc2VyU2V0dGluZ3MoKSBjb25zdAoreworICAgIEFTU0VS
VChlbGVtZW50KCkpOworICAgIGF1dG8mIGlucHV0ID0gKmVsZW1lbnQoKTsKKworICAgIEZpbGVD
aG9vc2VyU2V0dGluZ3Mgc2V0dGluZ3M7CisgICAgc2V0dGluZ3MuYWxsb3dzRGlyZWN0b3JpZXMg
PSBhbGxvd3NEaXJlY3RvcmllcygpOworICAgIHNldHRpbmdzLmFsbG93c011bHRpcGxlRmlsZXMg
PSBpbnB1dC5oYXNBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKG11bHRpcGxlQXR0cik7
CisgICAgc2V0dGluZ3MuYWNjZXB0TUlNRVR5cGVzID0gaW5wdXQuYWNjZXB0TUlNRVR5cGVzKCk7
CisgICAgc2V0dGluZ3MuYWNjZXB0RmlsZUV4dGVuc2lvbnMgPSBpbnB1dC5hY2NlcHRGaWxlRXh0
ZW5zaW9ucygpOworICAgIHNldHRpbmdzLnNlbGVjdGVkRmlsZXMgPSBtX2ZpbGVMaXN0LT5wYXRo
cygpOworI2lmIEVOQUJMRShNRURJQV9DQVBUVVJFKQorICAgIHNldHRpbmdzLm1lZGlhQ2FwdHVy
ZVR5cGUgPSBpbnB1dC5tZWRpYUNhcHR1cmVUeXBlKCk7CisjZW5kaWYKKyAgICByZXR1cm4gc2V0
dGluZ3M7Cit9CisKK3ZvaWQgRmlsZUlucHV0VHlwZTo6YXBwbHlGaWxlQ2hvb3NlclNldHRpbmdz
KCkKIHsKICAgICBpZiAobV9maWxlQ2hvb3NlcikKICAgICAgICAgbV9maWxlQ2hvb3Nlci0+aW52
YWxpZGF0ZSgpOwogCi0gICAgbV9maWxlQ2hvb3NlciA9IEZpbGVDaG9vc2VyOjpjcmVhdGUodGhp
cywgc2V0dGluZ3MpOworICAgIG1fZmlsZUNob29zZXIgPSBGaWxlQ2hvb3Nlcjo6Y3JlYXRlKHRo
aXMsIGZpbGVDaG9vc2VyU2V0dGluZ3MoKSk7CiB9CiAKIGJvb2wgRmlsZUlucHV0VHlwZTo6YWxs
b3dzRGlyZWN0b3JpZXMoKSBjb25zdApAQCAtNDI1LDYgKzQzOSwyMiBAQCB2b2lkIEZpbGVJbnB1
dFR5cGU6OmZpbGVzQ2hvc2VuKGNvbnN0IFZlCiAgICAgbV9kaXJlY3RvcnlGaWxlTGlzdENyZWF0
b3ItPnN0YXJ0KHBhdGhzKTsKIH0KIAordm9pZCBGaWxlSW5wdXRUeXBlOjpmaWxlc0Nob3Nlbihj
b25zdCBWZWN0b3I8U3RyaW5nPiYgcGF0aHMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiByZXBsYWNl
bWVudFBhdGhzKQoreworICAgIEFTU0VSVChlbGVtZW50KCkpOworICAgIEFTU0VSVCghcGF0aHMu
aXNFbXB0eSgpKTsKKworICAgIHNpemVfdCBzaXplID0gZWxlbWVudCgpLT5oYXNBdHRyaWJ1dGVX
aXRob3V0U3luY2hyb25pemF0aW9uKG11bHRpcGxlQXR0cikgPyBwYXRocy5zaXplKCkgOiAxOwor
CisgICAgVmVjdG9yPEZpbGVDaG9vc2VyRmlsZUluZm8+IGZpbGVzOworICAgIGZpbGVzLnJlc2Vy
dmVJbml0aWFsQ2FwYWNpdHkoc2l6ZSk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNp
emU7ICsraSkKKyAgICAgICAgZmlsZXMudW5jaGVja2VkQXBwZW5kKHsgcGF0aHNbaV0sIGkgPCBy
ZXBsYWNlbWVudFBhdGhzLnNpemUoKSA/IHJlcGxhY2VtZW50UGF0aHNbaV0gOiBudWxsU3RyaW5n
KCksIHsgfSB9KTsKKworICAgIGZpbGVzQ2hvc2VuKGZpbGVzKTsKK30KKwogdm9pZCBGaWxlSW5w
dXRUeXBlOjpkaWRDcmVhdGVGaWxlTGlzdChSZWY8RmlsZUxpc3Q+JiYgZmlsZUxpc3QsIFJlZlB0
cjxJY29uPiYmIGljb24pCiB7CiAgICAgYXV0byBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhp
cyk7CkBAIC00NTQsMjMgKzQ4NCw1MSBAQCB2b2lkIEZpbGVJbnB1dFR5cGU6Omljb25Mb2FkZWQo
UmVmUHRyPEljCiB9CiAKICNpZiBFTkFCTEUoRFJBR19TVVBQT1JUKQorYm9vbCBGaWxlSW5wdXRU
eXBlOjpyZWNlaXZlRHJvcHBlZEZpbGVzV2l0aEltYWdlVHJhbnNjb2RpbmcoY29uc3QgVmVjdG9y
PFN0cmluZz4mIHBhdGhzKQoreworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBhdXRvIHNldHRpbmdz
ID0gZmlsZUNob29zZXJTZXR0aW5ncygpOworICAgIGF1dG8gYWxsb3dlZE1JTUVUeXBlcyA9IE1J
TUVUeXBlUmVnaXN0cnk6OmFsbG93ZWRNSU1FVHlwZXMoc2V0dGluZ3MuYWNjZXB0TUlNRVR5cGVz
LCBzZXR0aW5ncy5hY2NlcHRGaWxlRXh0ZW5zaW9ucyk7CisgICAgCisgICAgYXV0byB0cmFuc2Nv
ZGluZ1BhdGhzID0gZmluZEltYWdlc0ZvclRyYW5zY29kaW5nKHBhdGhzLCBhbGxvd2VkTUlNRVR5
cGVzKTsKKyAgICBpZiAodHJhbnNjb2RpbmdQYXRocy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVy
biB7IH07CisKKyAgICBhdXRvIHRyYW5zY29kaW5nTUlNRVR5cGUgPSBNSU1FVHlwZVJlZ2lzdHJ5
OjpwcmVmZXJyZWRJbWFnZU1JTUVUeXBlRm9yRW5jb2RpbmcoYWxsb3dlZE1JTUVUeXBlcywgeyB9
KTsKKyAgICBpZiAodHJhbnNjb2RpbmdNSU1FVHlwZS5pc051bGwoKSkKKyAgICAgICAgcmV0dXJu
IHsgfTsKKworICAgIGF1dG8gdHJhbnNjb2RpbmdVVEkgPSBXZWJDb3JlOjpVVElGcm9tTUlNRVR5
cGUodHJhbnNjb2RpbmdNSU1FVHlwZSk7CisgICAgYXV0byB0cmFuc2NvZGluZ0V4dGVuc2lvbiA9
IFdlYkNvcmU6Ok1JTUVUeXBlUmVnaXN0cnk6OnByZWZlcnJlZEV4dGVuc2lvbkZvck1JTUVUeXBl
KHRyYW5zY29kaW5nTUlNRVR5cGUpOworCisgICAgc2hhcmVkSW1hZ2VUcmFuc2NvZGluZ1F1ZXVl
KCktPmRpc3BhdGNoKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIHBhdGhz
ID0gcGF0aHMuaXNvbGF0ZWRDb3B5KCksIHRyYW5zY29kaW5nUGF0aHMgPSB0cmFuc2NvZGluZ1Bh
dGhzLmlzb2xhdGVkQ29weSgpLCB0cmFuc2NvZGluZ1VUSSA9IHRyYW5zY29kaW5nVVRJLmlzb2xh
dGVkQ29weSgpLCB0cmFuc2NvZGluZ0V4dGVuc2lvbiA9IHRyYW5zY29kaW5nRXh0ZW5zaW9uLmlz
b2xhdGVkQ29weSgpXSgpIG11dGFibGUgeworICAgICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFp
bigpKTsKKworICAgICAgICBhdXRvIHJlcGxhY2VtZW50UGF0aHMgPSB0cmFuc2NvZGVJbWFnZXMo
dHJhbnNjb2RpbmdQYXRocywgdHJhbnNjb2RpbmdVVEksIHRyYW5zY29kaW5nRXh0ZW5zaW9uKTsK
KyAgICAgICAgQVNTRVJUKHRyYW5zY29kaW5nUGF0aHMuc2l6ZSgpID09IHJlcGxhY2VtZW50UGF0
aHMuc2l6ZSgpKTsKKworICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3RoaXMsIHBy
b3RlY3RlZFRoaXMgPSBXVEZNb3ZlKHByb3RlY3RlZFRoaXMpLCBwYXRocyA9IHBhdGhzLmlzb2xh
dGVkQ29weSgpLCByZXBsYWNlbWVudFBhdGhzID0gcmVwbGFjZW1lbnRQYXRocy5pc29sYXRlZENv
cHkoKV0oKSB7CisgICAgICAgICAgICBmaWxlc0Nob3NlbihwYXRocywgcmVwbGFjZW1lbnRQYXRo
cyk7CisgICAgICAgIH0pOworICAgIH0pOworCisgICAgcmV0dXJuIHRydWU7CisjZWxzZQorICAg
IFVOVVNFRF9QQVJBTShwYXRocyk7CisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCit9CisKIGJv
b2wgRmlsZUlucHV0VHlwZTo6cmVjZWl2ZURyb3BwZWRGaWxlcyhjb25zdCBEcmFnRGF0YSYgZHJh
Z0RhdGEpCiB7CiAgICAgYXV0byBwYXRocyA9IGRyYWdEYXRhLmFzRmlsZW5hbWVzKCk7CiAgICAg
aWYgKHBhdGhzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgQVNTRVJU
KGVsZW1lbnQoKSk7Ci0gICAgaWYgKGVsZW1lbnQoKS0+aGFzQXR0cmlidXRlV2l0aG91dFN5bmNo
cm9uaXphdGlvbihtdWx0aXBsZUF0dHIpKSB7Ci0gICAgICAgIFZlY3RvcjxGaWxlQ2hvb3NlckZp
bGVJbmZvPiBmaWxlczsKLSAgICAgICAgZmlsZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShwYXRo
cy5zaXplKCkpOwotICAgICAgICBmb3IgKGF1dG8mIHBhdGggOiBwYXRocykKLSAgICAgICAgICAg
IGZpbGVzLnVuY2hlY2tlZEFwcGVuZCh7IHBhdGgsIHsgfSwgeyB9IH0pOwotCi0gICAgICAgIGZp
bGVzQ2hvc2VuKGZpbGVzKTsKLSAgICB9IGVsc2UKLSAgICAgICAgZmlsZXNDaG9zZW4oeyB7IHBh
dGhzWzBdLCB7IH0sIHsgfSB9IH0pOwotCisgICAgaWYgKHJlY2VpdmVEcm9wcGVkRmlsZXNXaXRo
SW1hZ2VUcmFuc2NvZGluZyhwYXRocykpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIAorICAg
IGZpbGVzQ2hvc2VuKHBhdGhzKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KICNlbmRpZiAvLyBFTkFC
TEUoRFJBR19TVVBQT1JUKQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9GaWxlSW5wdXRUeXBl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9GaWxlSW5wdXRUeXBlLmgJKHJl
dmlzaW9uIDI2NTM5OSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvRmlsZUlucHV0VHlwZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC03MSw2ICs3MSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzZXRWYWx1
ZShjb25zdCBTdHJpbmcmLCBib29sIHZhbHVlQ2hhbmdlZCwgVGV4dEZpZWxkRXZlbnRCZWhhdmlv
cikgZmluYWw7CiAKICNpZiBFTkFCTEUoRFJBR19TVVBQT1JUKQorICAgIGJvb2wgcmVjZWl2ZURy
b3BwZWRGaWxlc1dpdGhJbWFnZVRyYW5zY29kaW5nKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXRo
cyk7CiAgICAgYm9vbCByZWNlaXZlRHJvcHBlZEZpbGVzKGNvbnN0IERyYWdEYXRhJikgZmluYWw7
CiAjZW5kaWYKIApAQCAtODIsMTEgKzgzLDEzIEBAIHByaXZhdGU6CiAgICAgU3RyaW5nIGRlZmF1
bHRUb29sVGlwKCkgY29uc3QgZmluYWw7CiAKICAgICB2b2lkIGZpbGVzQ2hvc2VuKGNvbnN0IFZl
Y3RvcjxGaWxlQ2hvb3NlckZpbGVJbmZvPiYsIGNvbnN0IFN0cmluZyYgZGlzcGxheVN0cmluZyA9
IHsgfSwgSWNvbiogPSBudWxscHRyKSBmaW5hbDsKKyAgICB2b2lkIGZpbGVzQ2hvc2VuKGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiBwYXRocywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHJlcGxhY2VtZW50
UGF0aHMgPSB7IH0pOwogCiAgICAgLy8gRmlsZUljb25Mb2FkZXJDbGllbnQgaW1wbGVtZW50YXRp
b24uCiAgICAgdm9pZCBpY29uTG9hZGVkKFJlZlB0cjxJY29uPiYmKSBmaW5hbDsKIAotICAgIHZv
aWQgYXBwbHlGaWxlQ2hvb3NlclNldHRpbmdzKGNvbnN0IEZpbGVDaG9vc2VyU2V0dGluZ3MmKTsK
KyAgICBGaWxlQ2hvb3NlclNldHRpbmdzIGZpbGVDaG9vc2VyU2V0dGluZ3MoKSBjb25zdDsKKyAg
ICB2b2lkIGFwcGx5RmlsZUNob29zZXJTZXR0aW5ncygpOwogICAgIHZvaWQgZGlkQ3JlYXRlRmls
ZUxpc3QoUmVmPEZpbGVMaXN0PiYmLCBSZWZQdHI8SWNvbj4mJik7CiAgICAgdm9pZCByZXF1ZXN0
SWNvbihjb25zdCBWZWN0b3I8U3RyaW5nPiYpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZVV0aWxpdGllcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlVXRpbGl0aWVzLmgJKG5vbmV4aXN0ZW50KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VVdGlsaXRpZXMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworV0VCQ09SRV9FWFBPUlQgUmVmPFdvcmtRdWV1ZT4gc2hhcmVk
SW1hZ2VUcmFuc2NvZGluZ1F1ZXVlKCk7CisKKy8vIEdpdmVuIGEgbGlzdCBvZiBmaWxlcycgJ3Bh
dGhzJyBhbmQgJ2FsbG93ZWRNSU1FVHlwZXMnLCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhIGxpc3QK
Ky8vIG9mIHN0cmluZ3Mgd2hvc2Ugc2l6ZSBpcyB0aGUgc2FtZSBhcyB0aGUgc2l6ZSBvZiAncGF0
aHMnIGFuZCBpdHMgZW50cmllcyBhcmUgYWxsCisvLyBudWxsIHN0cmluZ3MgZXhjZXB0IHRoZSBv
bmVzIHdob3NlIE1JTUUgdHlwZXMgYXJlIG5vdCBpbiAnYWxsb3dlZE1JTUVUeXBlcycuCitXRUJD
T1JFX0VYUE9SVCBWZWN0b3I8U3RyaW5nPiBmaW5kSW1hZ2VzRm9yVHJhbnNjb2RpbmcoY29uc3Qg
VmVjdG9yPFN0cmluZz4mIHBhdGhzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYWxsb3dlZE1JTUVU
eXBlcyk7CisKKy8vIEdpdmVuIGEgbGlzdCBvZiBpbWFnZXMnICdwYXRocycsIHRoaXMgZnVuY3Rp
b24gdHJhbnNjb2RlcyB0aGVzZSBpbWFnZXMgdG8gYSBuZXcKKy8vIGZvcm1hdCB3aG9zZSBVVEkg
aXMgZGVzdGluYXRpb25VVEkuIFRoZSByZXN1bHQgb2YgdGhlIHRyYW5zY29kaW5nIHdpbGwgYmUg
d3JpdHRlbgorLy8gdG8gdGVtcG9yYXJ5IGZpbGVzIHdob3NlIGV4dGVuc2lvbnMgYXJlICdkZXN0
aW5hdGlvbkV4dGVuc2lvbicuIEl0IHJldHVybnMgYSBsaXN0CisvLyBvZiBwYXRocyB0byB0aGUg
cmVzdWx0IHRlbXBvcmFyeSBmaWxlcy4gSWYgYW4gZW50cnkgaW4gJ3BhdGhzJyBpcyBudWxsIG9y
IGFuIGVycm9yCisvLyBoYXBwZW5zIHdoaWxlIHRyYW5zY29kaW5nLCBhIG51bGwgc3RyaW5nIHdp
bGwgYmUgYWRkZWQgdG8gdGhlIHJldHVybmVkIGxpc3QuCitXRUJDT1JFX0VYUE9SVCBWZWN0b3I8
U3RyaW5nPiB0cmFuc2NvZGVJbWFnZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhdGhzLCBjb25z
dCBTdHJpbmcmIGRlc3RpbmF0aW9uVVRJLCBjb25zdCBTdHJpbmcmIGRlc3RpbmF0aW9uRXh0ZW5z
aW9uKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZVV0aWxpdGllc0NHLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZVV0aWxpdGllc0NHLmNwcAko
bm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFn
ZVV0aWxpdGllc0NHLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyOCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbWFnZVV0aWxpdGllcy5oIgor
CisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKKyNp
bmNsdWRlIDxJbWFnZUlPL0ltYWdlSU8uaD4KKyNpbmNsdWRlIDx3dGYvRmlsZVN5c3RlbS5oPgor
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitS
ZWY8V29ya1F1ZXVlPiBzaGFyZWRJbWFnZVRyYW5zY29kaW5nUXVldWUoKQoreworICAgIHN0YXRp
YyBOZXZlckRlc3Ryb3llZDxSZWY8V29ya1F1ZXVlPj4gcXVldWUoV29ya1F1ZXVlOjpjcmVhdGUo
ImNvbS5hcHBsZS5XZWJLaXQuSW1hZ2VUcmFuc2NvZGluZyIpKTsKKyAgICByZXR1cm4gcXVldWUu
Z2V0KCkuY29weVJlZigpOworfQorCitzdGF0aWMgU3RyaW5nIHRyYW5zY29kZUltYWdlKGNvbnN0
IFN0cmluZyYgcGF0aCwgY29uc3QgU3RyaW5nJiBkZXN0aW5hdGlvblVUSSwgY29uc3QgU3RyaW5n
JiBkZXN0aW5hdGlvbkV4dGVuc2lvbikKK3sKKyAgICBhdXRvIHNvdXJjZVVSTCA9IGFkb3B0Q0Yo
Q0ZVUkxDcmVhdGVXaXRoRmlsZVN5c3RlbVBhdGgoa0NGQWxsb2NhdG9yRGVmYXVsdCwgcGF0aC5j
cmVhdGVDRlN0cmluZygpLmdldCgpLCBrQ0ZVUkxQT1NJWFBhdGhTdHlsZSwgZmFsc2UpKTsKKyAg
ICBhdXRvIHNvdXJjZSA9IGFkb3B0Q0YoQ0dJbWFnZVNvdXJjZUNyZWF0ZVdpdGhVUkwoc291cmNl
VVJMLmdldCgpLCBudWxscHRyKSk7CisgICAgaWYgKCFzb3VyY2UpCisgICAgICAgIHJldHVybiBu
dWxsU3RyaW5nKCk7CisKKyAgICBhdXRvIHNvdXJjZVVUSSA9IFN0cmluZyhDR0ltYWdlU291cmNl
R2V0VHlwZShzb3VyY2UuZ2V0KCkpKTsKKyAgICBpZiAoc291cmNlVVRJID09IGRlc3RpbmF0aW9u
VVRJKQorICAgICAgICByZXR1cm4gbnVsbFN0cmluZygpOworCisgICAgLy8gSXQgaXMgaW1wb3J0
YW50IHRvIGFkZCB0aGUgYXBwcm9wcmlhdGUgZmlsZSBleHRlbnNpb24gdG8gdGhlIHRlbXBvcmFy
eSBmaWxlIHBhdGguCisgICAgLy8gVGhlIEZpbGUgb2JqZWN0IGRlcGVuZHMgc29sZWx5IG9uIHRo
ZSBleHRlbnNpb24gdG8ga25vdyB0aGUgTUlNRSB0eXBlIG9mIHRoZSBmaWxlLgorICAgIGF1dG8g
c3VmZml4ID0gbWFrZVN0cmluZygnLicsIGRlc3RpbmF0aW9uRXh0ZW5zaW9uKTsKKworICAgIEZp
bGVTeXN0ZW06OlBsYXRmb3JtRmlsZUhhbmRsZSBkZXN0aW5hdGlvbkZpbGVIYW5kbGU7CisgICAg
U3RyaW5nIGRlc3RpbmF0aW9uUGF0aCA9IEZpbGVTeXN0ZW06Om9wZW5UZW1wb3JhcnlGaWxlKCJ0
ZW1wSW1hZ2UiX3MsIGRlc3RpbmF0aW9uRmlsZUhhbmRsZSwgc3VmZml4KTsKKyAgICBpZiAoZGVz
dGluYXRpb25GaWxlSGFuZGxlID09IEZpbGVTeXN0ZW06OmludmFsaWRQbGF0Zm9ybUZpbGVIYW5k
bGUpIHsKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoSW1hZ2VzLCAidHJhbnNjb2RlSW1hZ2U6
IERlc3RpbmF0aW9uIGltYWdlIGNvdWxkIG5vdCBiZSBjcmVhdGVkOiAlcyAlc1xuIiwgcGF0aC51
dGY4KCkuZGF0YSgpLCBkZXN0aW5hdGlvblVUSS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgcmV0
dXJuIG51bGxTdHJpbmcoKTsKKyAgICB9CisKKyAgICBDR0RhdGFDb25zdW1lckNhbGxiYWNrcyBj
YWxsYmFja3MgPSB7CisgICAgICAgIFtdKHZvaWQqIGluZm8sIGNvbnN0IHZvaWQqIGJ1ZmZlciwg
c2l6ZV90IGNvdW50KSAtPiBzaXplX3QgeworICAgICAgICAgICAgYXV0byBoYW5kbGUgPSAqc3Rh
dGljX2Nhc3Q8RmlsZVN5c3RlbTo6UGxhdGZvcm1GaWxlSGFuZGxlKj4oaW5mbyk7CisgICAgICAg
ICAgICByZXR1cm4gRmlsZVN5c3RlbTo6d3JpdGVUb0ZpbGUoaGFuZGxlLCBzdGF0aWNfY2FzdDxj
b25zdCBjaGFyKj4oYnVmZmVyKSwgY291bnQpOworICAgICAgICB9LAorICAgICAgICBudWxscHRy
CisgICAgfTsKKworICAgIGF1dG8gY29uc3VtZXIgPSBhZG9wdENGKENHRGF0YUNvbnN1bWVyQ3Jl
YXRlKCZkZXN0aW5hdGlvbkZpbGVIYW5kbGUsICZjYWxsYmFja3MpKTsKKyAgICBhdXRvIGRlc3Rp
bmF0aW9uID0gYWRvcHRDRihDR0ltYWdlRGVzdGluYXRpb25DcmVhdGVXaXRoRGF0YUNvbnN1bWVy
KGNvbnN1bWVyLmdldCgpLCBkZXN0aW5hdGlvblVUSS5jcmVhdGVDRlN0cmluZygpLmdldCgpLCAx
LCBudWxscHRyKSk7CisKKyAgICBDR0ltYWdlRGVzdGluYXRpb25BZGRJbWFnZUZyb21Tb3VyY2Uo
ZGVzdGluYXRpb24uZ2V0KCksIHNvdXJjZS5nZXQoKSwgMCwgbnVsbHB0cik7CisKKyAgICBpZiAo
IUNHSW1hZ2VEZXN0aW5hdGlvbkZpbmFsaXplKGRlc3RpbmF0aW9uLmdldCgpKSkgeworICAgICAg
ICBSRUxFQVNFX0xPR19FUlJPUihJbWFnZXMsICJ0cmFuc2NvZGVJbWFnZTogSW1hZ2UgdHJhbnNj
b2RpbmcgZmFpbHM6ICVzICVzXG4iLCBwYXRoLnV0ZjgoKS5kYXRhKCksIGRlc3RpbmF0aW9uVVRJ
LnV0ZjgoKS5kYXRhKCkpOworICAgICAgICBGaWxlU3lzdGVtOjpjbG9zZUZpbGUoZGVzdGluYXRp
b25GaWxlSGFuZGxlKTsKKyAgICAgICAgRmlsZVN5c3RlbTo6ZGVsZXRlRmlsZShkZXN0aW5hdGlv
blBhdGgpOworICAgICAgICByZXR1cm4gbnVsbFN0cmluZygpOworICAgIH0KKworICAgIEZpbGVT
eXN0ZW06OmNsb3NlRmlsZShkZXN0aW5hdGlvbkZpbGVIYW5kbGUpOworICAgIHJldHVybiBkZXN0
aW5hdGlvblBhdGg7Cit9CisKK1ZlY3RvcjxTdHJpbmc+IGZpbmRJbWFnZXNGb3JUcmFuc2NvZGlu
Zyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGF0aHMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBhbGxv
d2VkTUlNRVR5cGVzKQoreworICAgIFZlY3RvcjxTdHJpbmc+IHRyYW5zY29kaW5nUGF0aHM7Cisg
ICAgdHJhbnNjb2RpbmdQYXRocy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHBhdGhzLnNpemUoKSk7
CisKKyAgICBib29sIG5lZWRzVHJhbnNjb2RpbmcgPSBmYWxzZTsKKworICAgIGZvciAoYXV0byYg
cGF0aCA6IHBhdGhzKSB7CisgICAgICAgIC8vIEFwcGVuZCBhIHBhdGggb2YgdGhlIGltYWdlIHdo
aWNoIG5lZWRzIHRyYW5zY29kaW5nLiBPdGhlcndpc2UgYXBwZW5kIGEgbnVsbCBzdHJpbmcuCisg
ICAgICAgIGlmICghYWxsb3dlZE1JTUVUeXBlcy5jb250YWlucyhXZWJDb3JlOjpNSU1FVHlwZVJl
Z2lzdHJ5OjptaW1lVHlwZUZvclBhdGgocGF0aCkpKSB7CisgICAgICAgICAgICB0cmFuc2NvZGlu
Z1BhdGhzLnVuY2hlY2tlZEFwcGVuZChwYXRoKTsKKyAgICAgICAgICAgIG5lZWRzVHJhbnNjb2Rp
bmcgPSB0cnVlOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHRyYW5zY29kaW5nUGF0aHMu
dW5jaGVja2VkQXBwZW5kKG51bGxTdHJpbmcoKSk7CisgICAgfQorCisgICAgLy8gSWYgbm9uZSBv
ZiB0aGUgZmlsZXMgbmVlZHMgaW1hZ2UgdHJhbnNjb2RpbmcsIHJldHVybiBhbiBlbXB0eSBWZWN0
b3IuCisgICAgcmV0dXJuIG5lZWRzVHJhbnNjb2RpbmcgPyB0cmFuc2NvZGluZ1BhdGhzIDogVmVj
dG9yPFN0cmluZz4oKTsKK30KKworVmVjdG9yPFN0cmluZz4gdHJhbnNjb2RlSW1hZ2VzKGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiBwYXRocywgY29uc3QgU3RyaW5nJiBkZXN0aW5hdGlvblVUSSwgY29u
c3QgU3RyaW5nJiBkZXN0aW5hdGlvbkV4dGVuc2lvbikKK3sKKyAgICBBU1NFUlQoIWRlc3RpbmF0
aW9uVVRJLmlzTnVsbCgpKTsKKyAgICBBU1NFUlQoIWRlc3RpbmF0aW9uRXh0ZW5zaW9uLmlzTnVs
bCgpKTsKKyAgICAKKyAgICBWZWN0b3I8U3RyaW5nPiB0cmFuc2NvZGVkUGF0aHM7CisgICAgdHJh
bnNjb2RlZFBhdGhzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkocGF0aHMuc2l6ZSgpKTsKKworICAg
IGZvciAoYXV0byYgcGF0aCA6IHBhdGhzKSB7CisgICAgICAgIC8vIEFwcGVuZCB0aGUgdHJhbnNj
b2RlZCBwYXRoIGlmIHRoZSBpbWFnZSBuZWVkcyB0cmFuc2NvZGluZy4gT3RoZXJ3aXNlIGFwcGVu
ZCBhIG51bGwgc3RyaW5nLgorICAgICAgICBpZiAoIXBhdGguaXNOdWxsKCkpCisgICAgICAgICAg
ICB0cmFuc2NvZGVkUGF0aHMudW5jaGVja2VkQXBwZW5kKHRyYW5zY29kZUltYWdlKHBhdGgsIGRl
c3RpbmF0aW9uVVRJLCBkZXN0aW5hdGlvbkV4dGVuc2lvbikpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICB0cmFuc2NvZGVkUGF0aHMudW5jaGVja2VkQXBwZW5kKG51bGxTdHJpbmcoKSk7Cisg
ICAgfQorCisgICAgcmV0dXJuIHRyYW5zY29kZWRQYXRoczsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpJbmRleDogU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2NTM5OSkKKysrIFNvdXJjZS9XZWJLaXQv
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjQgQEAKKzIwMjAtMDgtMDcgIFNh
aWQgQWJvdS1IYWxsYXdhICA8c2Fib3VoYWxsYXdhQGFwcGxlLmNvbT4KKworICAgICAgICBbbWFj
T1NdIERyYWcvZHJvcCBhbiBpbWFnZSBvZiBhIHVuc3VwcG9ydGVkIGZvcm1hdCB0byBhbiBmaWxl
IGlucHV0IGVsZW1lbnQgc2hvdWxkIGNvbnZlcnQgaXQgdG8gYSBzdXBwb3J0ZWQgZm9ybWF0Cisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTI0ODIKKyAg
ICAgICAgPHJkYXI6Ly9wcm9ibGVtLzYzNzMxNjcyPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIE1vdmUgSW1hZ2VVdGlsaXRpZXMuaCBhbmQgSW1hZ2VV
dGlsaXRpZXNDRy5jcHAgZnJvbSBXZWJLaXQgdG8gV2ViQ29yZS4KKyAgICAgICAgVXNlIHRoZSBp
bWFnZSB0cmFuc2NvZGluZyBmdW5jdGlvbnMgYW5kIHNoYXJlZCBXb3JrUXVldWUgZnJvbSBXZWJD
b3JlLgorCisgICAgICAgICogUGxhdGZvcm0vSW1hZ2VVdGlsaXRpZXMuaDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBQbGF0Zm9ybS9jZzogUmVtb3ZlZC4KKyAgICAgICAgKiBTb3VyY2VzQ29jb2EudHh0
OgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0
OjptX2xpbWl0c05hdmlnYXRpb25zVG9BcHBCb3VuZERvbWFpbnMpOgorICAgICAgICAoV2ViS2l0
OjpXZWJQYWdlUHJveHk6OmRpZENob29zZUZpbGVzRm9yT3BlblBhbmVsV2l0aEltYWdlVHJhbnNj
b2RpbmcpOgorICAgICAgICAoV2ViS2l0OjptX3RyYW5zY29kaW5nUXVldWUpOiBEZWxldGVkLgor
ICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaDoKKyAgICAgICAgKiBXZWJLaXQueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKwogMjAyMC0wOC0wNyAgQ2hyaXMgRHVtZXogIDxjZHVt
ZXpAYXBwbGUuY29tPgogCiAgICAgICAgIGJhc2VMYXRlbmN5IGF0dHJpYnV0ZSBpcyBtaXNzaW5n
IG9uIEF1ZGlvQ29udGV4dCBpbnRlcmZhY2UKSW5kZXg6IFNvdXJjZS9XZWJLaXQvU291cmNlc0Nv
Y29hLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQJKHJl
dmlzaW9uIDI2NTM5OSkKKysrIFNvdXJjZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dAkod29ya2lu
ZyBjb3B5KQpAQCAtNjUsOCArNjUsNiBAQCBHUFVQcm9jZXNzL3dlYnJ0Yy9MaWJXZWJSVENDb2Rl
Y3NQcm94eS5tCiAKIFBsYXRmb3JtL2NmL01vZHVsZUNGLmNwcAogCi1QbGF0Zm9ybS9jZy9JbWFn
ZVV0aWxpdGllc0NHLmNwcAotCiBQbGF0Zm9ybS9jbGFzc2lmaWVyL2NvY29hL1Jlc291cmNlTG9h
ZFN0YXRpc3RpY3NDbGFzc2lmaWVyQ29jb2EuY3BwCiBQbGF0Zm9ybS9jbGFzc2lmaWVyL1Jlc291
cmNlTG9hZFN0YXRpc3RpY3NDbGFzc2lmaWVyLmNwcAogCkluZGV4OiBTb3VyY2UvV2ViS2l0L1Bs
YXRmb3JtL0ltYWdlVXRpbGl0aWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9QbGF0
Zm9ybS9JbWFnZVV0aWxpdGllcy5oCShyZXZpc2lvbiAyNjUzOTkpCisrKyBTb3VyY2UvV2ViS2l0
L1BsYXRmb3JtL0ltYWdlVXRpbGl0aWVzLmgJKG5vbmV4aXN0ZW50KQpAQCAtMSw0MiArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi0vLyBH
aXZlbiBhIGxpc3Qgb2YgZmlsZXMnICdwYXRocycgYW5kICdhbGxvd2VkTUlNRVR5cGVzJywgdGhl
IGZ1bmN0aW9uIHJldHVybnMgYSBsaXN0Ci0vLyBvZiBzdHJpbmdzIHdob3NlIHNpemUgaXMgdGhl
IHNhbWUgYXMgdGhlIHNpemUgb2YgJ3BhdGhzJyBhbmQgaXRzIGVudHJpZXMgYXJlIGFsbAotLy8g
bnVsbCBzdHJpbmdzIGV4Y2VwdCB0aGUgb25lcyB3aG9zZSBNSU1FIHR5cGVzIGFyZSBub3QgaW4g
J2FsbG93ZWRNSU1FVHlwZXMnLgotVmVjdG9yPFN0cmluZz4gZmluZEltYWdlc0ZvclRyYW5zY29k
aW5nKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXRocywgY29uc3QgVmVjdG9yPFN0cmluZz4mIGFs
bG93ZWRNSU1FVHlwZXMpOwotCi0vLyBHaXZlbiBhIGxpc3Qgb2YgaW1hZ2VzJyAncGF0aHMnLCB0
aGlzIGZ1bmN0aW9uIHRyYW5zY29kZXMgdGhlc2UgaW1hZ2VzIHRvIGEgbmV3Ci0vLyBmb3JtYXQg
d2hvc2UgVVRJIGlzIGRlc3RpbmF0aW9uVVRJLiBUaGUgcmVzdWx0IG9mIHRoZSB0cmFuc2NvZGlu
ZyB3aWxsIGJlIHdyaXR0ZW4KLS8vIHRvIHRlbXBvcmFyeSBmaWxlcyB3aG9zZSBleHRlbnNpb25z
IGFyZSAnZGVzdGluYXRpb25FeHRlbnNpb24nLiBJdCByZXR1cm5zIGEgbGlzdAotLy8gb2YgcGF0
aHMgdG8gdGhlIHJlc3VsdCB0ZW1wb3JhcnkgZmlsZXMuIElmIGFuIGVudHJ5IGluICdwYXRocycg
aXMgbnVsbCBvciBhbiBlcnJvcgotLy8gaGFwcGVucyB3aGlsZSB0cmFuc2NvZGluZywgYSBudWxs
IHN0cmluZyB3aWxsIGJlIGFkZGVkIHRvIHRoZSByZXR1cm5lZCBsaXN0LgotVmVjdG9yPFN0cmlu
Zz4gdHJhbnNjb2RlSW1hZ2VzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXRocywgY29uc3QgU3Ry
aW5nJiBkZXN0aW5hdGlvblVUSSwgY29uc3QgU3RyaW5nJiBkZXN0aW5hdGlvbkV4dGVuc2lvbik7
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dl
YktpdC9QbGF0Zm9ybS9JbWFnZVV0aWxpdGllcy5oCl9fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KRGVsZXRlZDogc3ZuOmVv
bC1zdHlsZQojIyAtMSArMCwwICMjCi1uYXRpdmUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9w
ZXJ0eQpJbmRleDogU291cmNlL1dlYktpdC9QbGF0Zm9ybS9jZy9JbWFnZVV0aWxpdGllc0NHLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL2NnL0ltYWdlVXRpbGl0aWVz
Q0cuY3BwCShyZXZpc2lvbiAyNjUzOTkpCisrKyBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL2NnL0lt
YWdlVXRpbGl0aWVzQ0cuY3BwCShub25leGlzdGVudCkKQEAgLTEsMTIyICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSW1hZ2VVdGlsaXRpZXMuaCIK
LQotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlIDxJbWFnZUlPL0ltYWdlSU8uaD4KLSNp
bmNsdWRlIDxXZWJDb3JlL01JTUVUeXBlUmVnaXN0cnkuaD4KLSNpbmNsdWRlIDx3dGYvRmlsZVN5
c3RlbS5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYktp
dCB7Ci0KLXN0YXRpYyBTdHJpbmcgdHJhbnNjb2RlSW1hZ2UoY29uc3QgU3RyaW5nJiBwYXRoLCBj
b25zdCBTdHJpbmcmIGRlc3RpbmF0aW9uVVRJLCBjb25zdCBTdHJpbmcmIGRlc3RpbmF0aW9uRXh0
ZW5zaW9uKQotewotICAgIGF1dG8gc291cmNlVVJMID0gYWRvcHRDRihDRlVSTENyZWF0ZVdpdGhG
aWxlU3lzdGVtUGF0aChrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBwYXRoLmNyZWF0ZUNGU3RyaW5nKCku
Z2V0KCksIGtDRlVSTFBPU0lYUGF0aFN0eWxlLCBmYWxzZSkpOwotICAgIGF1dG8gc291cmNlID0g
YWRvcHRDRihDR0ltYWdlU291cmNlQ3JlYXRlV2l0aFVSTChzb3VyY2VVUkwuZ2V0KCksIG51bGxw
dHIpKTsKLSAgICBpZiAoIXNvdXJjZSkKLSAgICAgICAgcmV0dXJuIG51bGxTdHJpbmcoKTsKLQot
ICAgIGF1dG8gc291cmNlVVRJID0gU3RyaW5nKENHSW1hZ2VTb3VyY2VHZXRUeXBlKHNvdXJjZS5n
ZXQoKSkpOwotICAgIGlmIChzb3VyY2VVVEkgPT0gZGVzdGluYXRpb25VVEkpCi0gICAgICAgIHJl
dHVybiBudWxsU3RyaW5nKCk7Ci0KLSAgICAvLyBJdCBpcyBpbXBvcnRhbnQgdG8gYWRkIHRoZSBh
cHByb3ByaWF0ZSBmaWxlIGV4dGVuc2lvbiB0byB0aGUgdGVtcG9yYXJ5IGZpbGUgcGF0aC4KLSAg
ICAvLyBUaGUgRmlsZSBvYmplY3QgZGVwZW5kcyBzb2xlbHkgb24gdGhlIGV4dGVuc2lvbiB0byBr
bm93IHRoZSBNSU1FIHR5cGUgb2YgdGhlIGZpbGUuCi0gICAgYXV0byBzdWZmaXggPSBtYWtlU3Ry
aW5nKCcuJywgZGVzdGluYXRpb25FeHRlbnNpb24pOwotCi0gICAgRmlsZVN5c3RlbTo6UGxhdGZv
cm1GaWxlSGFuZGxlIGRlc3RpbmF0aW9uRmlsZUhhbmRsZTsKLSAgICBTdHJpbmcgZGVzdGluYXRp
b25QYXRoID0gRmlsZVN5c3RlbTo6b3BlblRlbXBvcmFyeUZpbGUoInRlbXBJbWFnZSJfcywgZGVz
dGluYXRpb25GaWxlSGFuZGxlLCBzdWZmaXgpOwotICAgIGlmIChkZXN0aW5hdGlvbkZpbGVIYW5k
bGUgPT0gRmlsZVN5c3RlbTo6aW52YWxpZFBsYXRmb3JtRmlsZUhhbmRsZSkgewotICAgICAgICBS
RUxFQVNFX0xPR19FUlJPUihJbWFnZXMsICJ0cmFuc2NvZGVJbWFnZTogRGVzdGluYXRpb24gaW1h
Z2UgY291bGQgbm90IGJlIGNyZWF0ZWQ6ICVzICVzXG4iLCBwYXRoLnV0ZjgoKS5kYXRhKCksIGRl
c3RpbmF0aW9uVVRJLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICByZXR1cm4gbnVsbFN0cmluZygp
OwotICAgIH0KLQotICAgIENHRGF0YUNvbnN1bWVyQ2FsbGJhY2tzIGNhbGxiYWNrcyA9IHsKLSAg
ICAgICAgW10odm9pZCogaW5mbywgY29uc3Qgdm9pZCogYnVmZmVyLCBzaXplX3QgY291bnQpIC0+
IHNpemVfdCB7Ci0gICAgICAgICAgICBhdXRvIGhhbmRsZSA9ICpzdGF0aWNfY2FzdDxGaWxlU3lz
dGVtOjpQbGF0Zm9ybUZpbGVIYW5kbGUqPihpbmZvKTsKLSAgICAgICAgICAgIHJldHVybiBGaWxl
U3lzdGVtOjp3cml0ZVRvRmlsZShoYW5kbGUsIHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihidWZm
ZXIpLCBjb3VudCk7Ci0gICAgICAgIH0sCi0gICAgICAgIG51bGxwdHIKLSAgICB9OwotCi0gICAg
YXV0byBjb25zdW1lciA9IGFkb3B0Q0YoQ0dEYXRhQ29uc3VtZXJDcmVhdGUoJmRlc3RpbmF0aW9u
RmlsZUhhbmRsZSwgJmNhbGxiYWNrcykpOwotICAgIGF1dG8gZGVzdGluYXRpb24gPSBhZG9wdENG
KENHSW1hZ2VEZXN0aW5hdGlvbkNyZWF0ZVdpdGhEYXRhQ29uc3VtZXIoY29uc3VtZXIuZ2V0KCks
IGRlc3RpbmF0aW9uVVRJLmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCksIDEsIG51bGxwdHIpKTsKLQot
ICAgIENHSW1hZ2VEZXN0aW5hdGlvbkFkZEltYWdlRnJvbVNvdXJjZShkZXN0aW5hdGlvbi5nZXQo
KSwgc291cmNlLmdldCgpLCAwLCBudWxscHRyKTsKLQotICAgIGlmICghQ0dJbWFnZURlc3RpbmF0
aW9uRmluYWxpemUoZGVzdGluYXRpb24uZ2V0KCkpKSB7Ci0gICAgICAgIFJFTEVBU0VfTE9HX0VS
Uk9SKEltYWdlcywgInRyYW5zY29kZUltYWdlOiBJbWFnZSB0cmFuc2NvZGluZyBmYWlsczogJXMg
JXNcbiIsIHBhdGgudXRmOCgpLmRhdGEoKSwgZGVzdGluYXRpb25VVEkudXRmOCgpLmRhdGEoKSk7
Ci0gICAgICAgIEZpbGVTeXN0ZW06OmNsb3NlRmlsZShkZXN0aW5hdGlvbkZpbGVIYW5kbGUpOwot
ICAgICAgICBGaWxlU3lzdGVtOjpkZWxldGVGaWxlKGRlc3RpbmF0aW9uUGF0aCk7Ci0gICAgICAg
IHJldHVybiBudWxsU3RyaW5nKCk7Ci0gICAgfQotCi0gICAgRmlsZVN5c3RlbTo6Y2xvc2VGaWxl
KGRlc3RpbmF0aW9uRmlsZUhhbmRsZSk7Ci0gICAgcmV0dXJuIGRlc3RpbmF0aW9uUGF0aDsKLX0K
LQotVmVjdG9yPFN0cmluZz4gZmluZEltYWdlc0ZvclRyYW5zY29kaW5nKGNvbnN0IFZlY3RvcjxT
dHJpbmc+JiBwYXRocywgY29uc3QgVmVjdG9yPFN0cmluZz4mIGFsbG93ZWRNSU1FVHlwZXMpCi17
Ci0gICAgVmVjdG9yPFN0cmluZz4gdHJhbnNjb2RpbmdQYXRoczsKLSAgICB0cmFuc2NvZGluZ1Bh
dGhzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkocGF0aHMuc2l6ZSgpKTsKLQotICAgIGJvb2wgbmVl
ZHNUcmFuc2NvZGluZyA9IGZhbHNlOwotCi0gICAgZm9yIChhdXRvJiBwYXRoIDogcGF0aHMpIHsK
LSAgICAgICAgLy8gQXBwZW5kIGEgcGF0aCBvZiB0aGUgaW1hZ2Ugd2hpY2ggbmVlZHMgdHJhbnNj
b2RpbmcuIE90aGVyd2lzZSBhcHBlbmQgYSBudWxsIHN0cmluZy4KLSAgICAgICAgaWYgKCFhbGxv
d2VkTUlNRVR5cGVzLmNvbnRhaW5zKFdlYkNvcmU6Ok1JTUVUeXBlUmVnaXN0cnk6Om1pbWVUeXBl
Rm9yUGF0aChwYXRoKSkpIHsKLSAgICAgICAgICAgIHRyYW5zY29kaW5nUGF0aHMudW5jaGVja2Vk
QXBwZW5kKHBhdGgpOwotICAgICAgICAgICAgbmVlZHNUcmFuc2NvZGluZyA9IHRydWU7Ci0gICAg
ICAgIH0gZWxzZQotICAgICAgICAgICAgdHJhbnNjb2RpbmdQYXRocy51bmNoZWNrZWRBcHBlbmQo
bnVsbFN0cmluZygpKTsKLSAgICB9Ci0KLSAgICAvLyBJZiBub25lIG9mIHRoZSBmaWxlcyBuZWVk
cyBpbWFnZSB0cmFuc2NvZGluZywgcmV0dXJuIGFuIGVtcHR5IFZlY3Rvci4KLSAgICByZXR1cm4g
bmVlZHNUcmFuc2NvZGluZyA/IHRyYW5zY29kaW5nUGF0aHMgOiBWZWN0b3I8U3RyaW5nPigpOwot
fQotCi1WZWN0b3I8U3RyaW5nPiB0cmFuc2NvZGVJbWFnZXMoY29uc3QgVmVjdG9yPFN0cmluZz4m
IHBhdGhzLCBjb25zdCBTdHJpbmcmIGRlc3RpbmF0aW9uVVRJLCBjb25zdCBTdHJpbmcmIGRlc3Rp
bmF0aW9uRXh0ZW5zaW9uKQotewotICAgIEFTU0VSVCghZGVzdGluYXRpb25VVEkuaXNOdWxsKCkp
OwotICAgIEFTU0VSVCghZGVzdGluYXRpb25FeHRlbnNpb24uaXNOdWxsKCkpOwotICAgIAotICAg
IFZlY3RvcjxTdHJpbmc+IHRyYW5zY29kZWRQYXRoczsKLSAgICB0cmFuc2NvZGVkUGF0aHMucmVz
ZXJ2ZUluaXRpYWxDYXBhY2l0eShwYXRocy5zaXplKCkpOwotCi0gICAgZm9yIChhdXRvJiBwYXRo
IDogcGF0aHMpIHsKLSAgICAgICAgLy8gQXBwZW5kIHRoZSB0cmFuc2NvZGVkIHBhdGggaWYgdGhl
IGltYWdlIG5lZWRzIHRyYW5zY29kaW5nLiBPdGhlcndpc2UgYXBwZW5kIGEgbnVsbCBzdHJpbmcu
Ci0gICAgICAgIGlmICghcGF0aC5pc051bGwoKSkKLSAgICAgICAgICAgIHRyYW5zY29kZWRQYXRo
cy51bmNoZWNrZWRBcHBlbmQodHJhbnNjb2RlSW1hZ2UocGF0aCwgZGVzdGluYXRpb25VVEksIGRl
c3RpbmF0aW9uRXh0ZW5zaW9uKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRyYW5zY29k
ZWRQYXRocy51bmNoZWNrZWRBcHBlbmQobnVsbFN0cmluZygpKTsKLSAgICB9Ci0KLSAgICByZXR1
cm4gdHJhbnNjb2RlZFBhdGhzOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAkocmV2aXNpb24gMjY1Mzk5KQor
KysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjE3LDcgKzIxNyw3IEBACiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKE1BQykKLSNpbmNs
dWRlICJJbWFnZVV0aWxpdGllcy5oIgorI2luY2x1ZGUgPFdlYkNvcmUvSW1hZ2VVdGlsaXRpZXMu
aD4KICNpbmNsdWRlIDxXZWJDb3JlL1VUSVV0aWxpdGllcy5oPgogI2VuZGlmCiAKQEAgLTQ5Miw5
ICs0OTIsNiBAQCBXZWJQYWdlUHJveHk6OldlYlBhZ2VQcm94eShQYWdlQ2xpZW50JiBwCiAgICAg
LCBtX2lnbm9yZXNBcHBCb3VuZERvbWFpbnMobV9jb25maWd1cmF0aW9uLT5pZ25vcmVzQXBwQm91
bmREb21haW5zKCkpCiAgICAgLCBtX2xpbWl0c05hdmlnYXRpb25zVG9BcHBCb3VuZERvbWFpbnMo
bV9jb25maWd1cmF0aW9uLT5saW1pdHNOYXZpZ2F0aW9uc1RvQXBwQm91bmREb21haW5zKCkpCiAj
ZW5kaWYKLSNpZiBQTEFURk9STShNQUMpCi0gICAgLCBtX3RyYW5zY29kaW5nUXVldWUoV29ya1F1
ZXVlOjpjcmVhdGUoImNvbS5hcHBsZS5XZWJLaXQuSW1hZ2VUcmFuc2NvZGluZyIpKQotI2VuZGlm
CiB7CiAgICAgUkVMRUFTRV9MT0dfSUZfQUxMT1dFRChMb2FkaW5nLCAiY29uc3RydWN0b3I6Iik7
CiAKQEAgLTY2ODMsNyArNjY4MCw3IEBAIGJvb2wgV2ViUGFnZVByb3h5OjpkaWRDaG9vc2VGaWxl
c0Zvck9wZW4KICAgICBhdXRvIHRyYW5zY29kaW5nVVRJID0gV2ViQ29yZTo6VVRJRnJvbU1JTUVU
eXBlKHRyYW5zY29kaW5nTUlNRVR5cGUpOwogICAgIGF1dG8gdHJhbnNjb2RpbmdFeHRlbnNpb24g
PSBXZWJDb3JlOjpNSU1FVHlwZVJlZ2lzdHJ5OjpwcmVmZXJyZWRFeHRlbnNpb25Gb3JNSU1FVHlw
ZSh0cmFuc2NvZGluZ01JTUVUeXBlKTsKIAotICAgIG1fdHJhbnNjb2RpbmdRdWV1ZS0+ZGlzcGF0
Y2goW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgZmlsZVVSTHMgPSBmaWxl
VVJMcy5pc29sYXRlZENvcHkoKSwgdHJhbnNjb2RpbmdVUkxzID0gdHJhbnNjb2RpbmdVUkxzLmlz
b2xhdGVkQ29weSgpLCB0cmFuc2NvZGluZ1VUSSA9IHRyYW5zY29kaW5nVVRJLmlzb2xhdGVkQ29w
eSgpLCB0cmFuc2NvZGluZ0V4dGVuc2lvbiA9IHRyYW5zY29kaW5nRXh0ZW5zaW9uLmlzb2xhdGVk
Q29weSgpXSgpIG11dGFibGUgeworICAgIHNoYXJlZEltYWdlVHJhbnNjb2RpbmdRdWV1ZSgpLT5k
aXNwYXRjaChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBmaWxlVVJMcyA9
IGZpbGVVUkxzLmlzb2xhdGVkQ29weSgpLCB0cmFuc2NvZGluZ1VSTHMgPSB0cmFuc2NvZGluZ1VS
THMuaXNvbGF0ZWRDb3B5KCksIHRyYW5zY29kaW5nVVRJID0gdHJhbnNjb2RpbmdVVEkuaXNvbGF0
ZWRDb3B5KCksIHRyYW5zY29kaW5nRXh0ZW5zaW9uID0gdHJhbnNjb2RpbmdFeHRlbnNpb24uaXNv
bGF0ZWRDb3B5KCldKCkgbXV0YWJsZSB7CiAgICAgICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWlu
KCkpOwogCiAgICAgICAgIGF1dG8gdHJhbnNjb2RlZFVSTHMgPSB0cmFuc2NvZGVJbWFnZXModHJh
bnNjb2RpbmdVUkxzLCB0cmFuc2NvZGluZ1VUSSwgdHJhbnNjb2RpbmdFeHRlbnNpb24pOwpJbmRl
eDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgJKHJldmlzaW9uIDI2NTM5OSkK
KysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yODUwLDkgKzI4NTAsNiBAQCBwcml2YXRlOgogICAgIGJvb2wgbV91c2VyU2NyaXB0c05v
dGlmaWVkIHsgZmFsc2UgfTsKICAgICBib29sIG1fbGltaXRzTmF2aWdhdGlvbnNUb0FwcEJvdW5k
RG9tYWlucyB7IGZhbHNlIH07CiAgICAgYm9vbCBtX2hhc0V4ZWN1dGVkQXBwQm91bmRCZWhhdmlv
ckJlZm9yZU5hdmlnYXRpb24geyBmYWxzZSB9OwotI2lmIFBMQVRGT1JNKE1BQykKLSAgICBSZWY8
V29ya1F1ZXVlPiBtX3RyYW5zY29kaW5nUXVldWU7Ci0jZW5kaWYKIH07CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCShyZXZpc2lvbiAyNjUzOTkpCisrKyBTb3VyY2UvV2ViS2l0L1dlYktpdC54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yOTAsNyArMjkwLDYg
QEAKIAkJMUE5RkJBOEQxM0ZGMDRFNjAwREVFRDY3IC8qIFBsdWdpbkNvbXBsZXhUZXh0SW5wdXRT
dGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE5
RkJBOEMxM0ZGMDRFNjAwREVFRDY3IC8qIFBsdWdpbkNvbXBsZXhUZXh0SW5wdXRTdGF0ZS5oICov
OyB9OwogCQkxQUExMzIxMjE5MUQ1OTI0MDA5QzE0ODkgLyogV0tOYXZpZ2F0aW9uUmVzcG9uc2VQ
cml2YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAx
QUExMzIxMTE5MUQ1OTI0MDA5QzE0ODkgLyogV0tOYXZpZ2F0aW9uUmVzcG9uc2VQcml2YXRlLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMUFBMjBE
NTExOEFENTBFMDAwNUQxRUQ0IC8qIFdLTmF2aWdhdGlvbkRlbGVnYXRlUHJpdmF0ZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFBMjBENTAxOEFENTBF
MDAwNUQxRUQ0IC8qIFdLTmF2aWdhdGlvbkRlbGVnYXRlUHJpdmF0ZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTFBQTJFNTFEMTJFNEMwNUUwMEJD
NDk2NiAvKiBJbWFnZVV0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMUFBMkU1MUIxMkU0QzA1RTAwQkM0OTY2IC8qIEltYWdlVXRpbGl0aWVz
LmggKi87IH07CiAJCTFBQTJFNTY3MThENzc1MDgwMDM4MTRCRCAvKiBXS1dlYlByb2Nlc3NCdW5k
bGVQYXJhbWV0ZXJzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAxQUEyRTU2NTE4RDc3NTA4MDAzODE0QkQgLyogV0tXZWJQcm9jZXNzQnVuZGxlUGFyYW1l
dGVycy5oICovOyB9OwogCQkxQUEzRDc1QzE2NTFCNDRGMDA4NzEzRDAgLyogUmVtb3RlTGF5ZXJU
cmVlSG9zdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MUFBM0Q3NUExNjUxQjQ0RjAwODcxM0QwIC8qIFJlbW90ZUxheWVyVHJlZUhvc3QuaCAqLzsgfTsK
IAkJMUFBNDE3Q0IxMkMwMENDQTAwMkJFNjdCIC8qIFRleHRDaGVja2VyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQUE0MTdDOTEyQzAwQ0NBMDAyQkU2
N0IgLyogVGV4dENoZWNrZXIuaCAqLzsgfTsKQEAgLTI1MTYsOCArMjUxNSw2IEBACiAJCTFBQTFD
QzVDMTAwRkExQTEwMDc4REVCQyAvKiBRdWFydHpDb3JlLmZyYW1ld29yayAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHdyYXBwZXIuZnJhbWV3b3JrOyBu
YW1lID0gUXVhcnR6Q29yZS5mcmFtZXdvcms7IHBhdGggPSAvU3lzdGVtL0xpYnJhcnkvRnJhbWV3
b3Jrcy9RdWFydHpDb3JlLmZyYW1ld29yazsgc291cmNlVHJlZSA9ICI8YWJzb2x1dGU+IjsgfTsK
IAkJMUFBMUNEMDYxMDBGQTFCQTAwNzhERUJDIC8qIENhcmJvbi5mcmFtZXdvcmsgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB3cmFwcGVyLmZyYW1ld29y
azsgbmFtZSA9IENhcmJvbi5mcmFtZXdvcms7IHBhdGggPSAvU3lzdGVtL0xpYnJhcnkvRnJhbWV3
b3Jrcy9DYXJib24uZnJhbWV3b3JrOyBzb3VyY2VUcmVlID0gIjxhYnNvbHV0ZT4iOyB9OwogCQkx
QUEyMEQ1MDE4QUQ1MEUwMDA1RDFFRDQgLyogV0tOYXZpZ2F0aW9uRGVsZWdhdGVQcml2YXRlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLTmF2aWdhdGlvbkRlbGVnYXRlUHJp
dmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxQUEyRTUxQjEyRTRDMDVFMDBC
QzQ5NjYgLyogSW1hZ2VVdGlsaXRpZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSW1hZ2VVdGlsaXRpZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUFBMkU1
MUMxMkU0QzA1RTAwQkM0OTY2IC8qIEltYWdlVXRpbGl0aWVzQ0cuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2VVdGlsaXRpZXNDRy5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTFBQTJFNTY0MThENzc1MDgwMDM4MTRCRCAvKiBXS1dlYlByb2Nl
c3NCdW5kbGVQYXJhbWV0ZXJzLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBw
YXRoID0gV0tXZWJQcm9jZXNzQnVuZGxlUGFyYW1ldGVycy5tbTsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMUFBMkU1NjUxOEQ3NzUwODAwMzgxNEJEIC8qIFdLV2ViUHJvY2Vzc0J1bmRs
ZVBhcmFtZXRlcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tXZWJQcm9j
ZXNzQnVuZGxlUGFyYW1ldGVycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQUEz
RDc1OTE2NTFCNDRGMDA4NzEzRDAgLyogUmVtb3RlTGF5ZXJUcmVlSG9zdC5tbSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFJlbW90ZUxheWVyVHJlZUhvc3QubW07IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01OTYwLDE0ICs1OTU3LDYgQEAKIAkJCXBhdGgg
PSBtYWM7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9OwotCQkxQUEyRTUxQTEyRTRD
MDU2MDBCQzQ5NjYgLyogY2cgKi8gPSB7Ci0JCQlpc2EgPSBQQlhHcm91cDsKLQkJCWNoaWxkcmVu
ID0gKAotCQkJCTFBQTJFNTFDMTJFNEMwNUUwMEJDNDk2NiAvKiBJbWFnZVV0aWxpdGllc0NHLmNw
cCAqLywKLQkJCSk7Ci0JCQlwYXRoID0gY2c7Ci0JCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwot
CQl9OwogCQkxQUFDNERERTE2QjFDQkY2MDA5NDI1RTMgLyogV2ViU3RvcmFnZSAqLyA9IHsKIAkJ
CWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCkBAIC05NTg4LDcgKzk1NzcsNiBAQAog
CQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKIAkJCQkzNzA5NTA0MTE4QTg4QkE0
MDA4N0FFNUQgLyogY2YgKi8sCi0JCQkJMUFBMkU1MUExMkU0QzA1NjAwQkM0OTY2IC8qIGNnICov
LAogCQkJCTZCRTk2OUMyMUU1NEQ0NjcwMDhCNzQ4MyAvKiBjbGFzc2lmaWVyICovLAogCQkJCTQ0
NTBBRUJFMURDM0ZBQUMwMDk5NDNGMiAvKiBjb2NvYSAqLywKIAkJCQkzNzA5NTA0MjE4QTg4Q0RF
MDA4N0FFNUQgLyogZm91bmRhdGlvbiAqLywKQEAgLTk1OTksNyArOTU4Nyw2IEBACiAJCQkJNTFC
MTVBN0QxMzg0MzlCMjAwMzIxQUQ4IC8qIHVuaXggKi8sCiAJCQkJRUNBNjgwRDMxRTY5MDRCNTAw
NzMxRDIwIC8qIEV4dHJhUHJpdmF0ZVN5bWJvbHNGb3JUQVBJLmggKi8sCiAJCQkJRUNCRkMxREIx
RTZBNEQ2NjAwMDMwMEM3IC8qIEV4dHJhUHVibGljU3ltYm9sc0ZvclRBUEkuaCAqLywKLQkJCQkx
QUEyRTUxQjEyRTRDMDVFMDBCQzQ5NjYgLyogSW1hZ2VVdGlsaXRpZXMuaCAqLywKIAkJCQk1MUE3
RjJGNDEyNUJGOEQ0MDA4QUVCMUQgLyogTG9nZ2luZy5jcHAgKi8sCiAJCQkJNTFBN0YyRjIxMjVC
RjgyMDAwOEFFQjFEIC8qIExvZ2dpbmcuaCAqLywKIAkJCQkwRkRDRDdGNjFENDdFOTJBMDA5RjA4
QkMgLyogTG9nSW5pdGlhbGl6YXRpb24uaCAqLywKQEAgLTEwODY1LDcgKzEwODUyLDYgQEAKIAkJ
CQk1MUMwQzk3NDFEREQ3NjAwMDAzMkNBRDMgLyogSWNvbkxvYWRpbmdEZWxlZ2F0ZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNTFFMzUxQ0IxODBGMkNDQzAwRTUzQkU5IC8qIElEQlV0aWxpdGllcy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkNDRjZCMjUxMkM5M0U3QTAwOEY5QzM1IC8qIEltYWdlT3B0
aW9ucy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMUFBMkU1MUQxMkU0QzA1RTAwQkM0OTY2IC8qIElt
YWdlVXRpbGl0aWVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTFFQzY5RTE4NzIwOTIxMDBCOTUx
RjAgLyogSW1wb3J0YW5jZUFzc2VydGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMyMDRFRTMx
MUM4M0U5ODAwOEYzMzc1IC8qIEluamVjdGVkQnVuZGxlLmggaW4gSGVhZGVycyAqLywKIAkJCQlC
Q0VFN0RDNTEyOEI2NDVEMDA5ODI3REEgLyogSW5qZWN0ZWRCdW5kbGVDbGllbnQuaCBpbiBIZWFk
ZXJzICovLApJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMjY1Mzk5KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjMgQEAKKzIwMjAtMDgtMDcgIFNhaWQgQWJv
dS1IYWxsYXdhICA8c2Fib3VoYWxsYXdhQGFwcGxlLmNvbT4KKworICAgICAgICBbbWFjT1NdIERy
YWcvZHJvcCBhbiBpbWFnZSBvZiBhIHVuc3VwcG9ydGVkIGZvcm1hdCB0byBhbiBmaWxlIGlucHV0
IGVsZW1lbnQgc2hvdWxkIGNvbnZlcnQgaXQgdG8gYSBzdXBwb3J0ZWQgZm9ybWF0CisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTI0ODIKKyAgICAgICAg
PHJkYXI6Ly9wcm9ibGVtLzYzNzMxNjcyPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIEVuYWJsZSB0aGUgbmV3IHRlc3RzIG9uIG1hY09TIFdLMS4gZXZl
bnRTZW5kZXIuYmVnaW5EcmFnV2l0aEZpbGVzIGlzCisgICAgICAgIHN1cHBvcnRlZCBvbiBXSzEg
b25seS4KKworICAgICAgICAqIGZhc3QvZm9ybXMvZmlsZS9lbnRyaWVzLWFwaS9pbWFnZS1uby10
cmFuc2NvZGUtZHJhZy1kcm9wLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9m
b3Jtcy9maWxlL2VudHJpZXMtYXBpL2ltYWdlLW5vLXRyYW5zY29kZS1kcmFnLWRyb3AuaHRtbDog
QWRkZWQuCisgICAgICAgICogZmFzdC9mb3Jtcy9maWxlL2VudHJpZXMtYXBpL2ltYWdlLXRyYW5z
Y29kZS1kcmFnLWRyb3AtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2Zvcm1z
L2ZpbGUvZW50cmllcy1hcGkvaW1hZ2UtdHJhbnNjb2RlLWRyYWctZHJvcC5odG1sOiBBZGRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9pb3MvVGVzdEV4cGVjdGF0aW9uczoKKyAgICAgICAgKiBwbGF0
Zm9ybS93aW4vVGVzdEV4cGVjdGF0aW9uczoKKyAgICAgICAgKiBwbGF0Zm9ybS93aW5jYWlyby9U
ZXN0RXhwZWN0YXRpb25zOgorICAgICAgICAqIHBsYXRmb3JtL3drMi9UZXN0RXhwZWN0YXRpb25z
OgorCiAyMDIwLTA4LTA3ICBIZWN0b3IgTG9wZXogIDxoZWN0b3JfaV9sb3BlekBhcHBsZS5jb20+
CiAKICAgICAgICAgWyBtYWNPUyB3azEgXSBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L2Nzcy9jc3MtbG9naWNhbC9wYXJzaW5nL21hcmdpbi1ibG9jay1pbmxpbmUtY29tcHV0ZWQuaHRt
bCBpcyBhIGZsYWt5IGZhaWx1cmUKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZm9ybXMvZmlsZS9l
bnRyaWVzLWFwaS9pbWFnZS1uby10cmFuc2NvZGUtZHJhZy1kcm9wLWV4cGVjdGVkLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2ZpbGUvZW50cmllcy1hcGkvaW1hZ2Ut
bm8tdHJhbnNjb2RlLWRyYWctZHJvcC1leHBlY3RlZC50eHQJKG5vbmV4aXN0ZW50KQorKysgTGF5
b3V0VGVzdHMvZmFzdC9mb3Jtcy9maWxlL2VudHJpZXMtYXBpL2ltYWdlLW5vLXRyYW5zY29kZS1k
cmFnLWRyb3AtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTUgQEAKK1Rl
c3RzIGEgSEVJQyBpbWFnZSB3aWxsIG5vdCBiZSBjb252ZXJ0ZWQgdG8gYW55IHN1cHBvcnRlZCBN
SU1FIHR5cGUgd2hlbiBpdCBpcyBkcmFnZ2VkIGFuZCBkcm9wcGVkIHRvIGEgZmlsZSBpbnB1dCBl
bGVtZW50IHdoaWNoIGFjY2VwdHMgSEVJQy4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEg
c2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgor
CisKK1BBU1MgZmlsZUxpc3QubGVuZ3RoIGlzIDEKK1BBU1MgZmlsZS50eXBlIGlzICJpbWFnZS9o
ZWljIgorUEFTUyBmaWxlLnNpemUgaXMgbm9uLXplcm8uCitJbWFnZSBjb3VsZCBub3QgYmUgbG9h
ZGVkLgorUEFTUyBpbWcud2lkdGggaXMgbm90IDQwMAorUEFTUyBpbWcuaGVpZ2h0IGlzIG5vdCA0
MDAKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorICAK
SW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZm9ybXMvZmlsZS9lbnRyaWVzLWFwaS9pbWFnZS1uby10
cmFuc2NvZGUtZHJhZy1kcm9wLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9m
b3Jtcy9maWxlL2VudHJpZXMtYXBpL2ltYWdlLW5vLXRyYW5zY29kZS1kcmFnLWRyb3AuaHRtbAko
bm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2ZpbGUvZW50cmllcy1hcGkv
aW1hZ2Utbm8tdHJhbnNjb2RlLWRyYWctZHJvcC5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNjIgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKyAgICA8c2NyaXB0IHNy
Yz0iLi4vLi4vLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QuanMiPjwvc2NyaXB0PgorICAgIDxzY3Jp
cHQgc3JjPSIuLi8uLi8uLi8uLi9yZXNvdXJjZXMvdWktaGVscGVyLmpzIj48L3NjcmlwdD4KKzwv
aGVhZD4KKzxib2R5PgorICAgIDxpbnB1dCB0eXBlPSJmaWxlIiBhY2NlcHQ9IklNQUdFL0hFSUMi
IG9uY2hhbmdlPSJjaGFuZ2VkKGV2ZW50KSI+PC9pbnB1dD4KKyAgICA8c2NyaXB0PgorICAgICAg
ICBkZXNjcmlwdGlvbigiVGVzdHMgYSBIRUlDIGltYWdlIHdpbGwgbm90IGJlIGNvbnZlcnRlZCB0
byBhbnkgc3VwcG9ydGVkIE1JTUUgdHlwZSB3aGVuIGl0IGlzIGRyYWdnZWQgYW5kIGRyb3BwZWQg
dG8gYSBmaWxlIGlucHV0IGVsZW1lbnQgd2hpY2ggYWNjZXB0cyBIRUlDLiIpOworICAgICAgICBq
c1Rlc3RJc0FzeW5jID0gdHJ1ZTsKKworICAgICAgICBmdW5jdGlvbiBydW5UZXN0KCkKKyAgICAg
ICAgeworICAgICAgICAgICAgaWYgKCF3aW5kb3cuZXZlbnRTZW5kZXIgfHwgIWV2ZW50U2VuZGVy
LmJlZ2luRHJhZ1dpdGhGaWxlcykgeworICAgICAgICAgICAgICAgIGZpbmlzaEpTVGVzdCgpOwor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdmFy
IGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW5wdXQnKVswXTsKKyAg
ICAgICAgICAgIHZhciBjZW50ZXJYID0gZWxlbWVudC5vZmZzZXRMZWZ0ICsgZWxlbWVudC5vZmZz
ZXRXaWR0aCAvIDI7CisgICAgICAgICAgICB2YXIgY2VudGVyWSA9IGVsZW1lbnQub2Zmc2V0VG9w
ICsgZWxlbWVudC5vZmZzZXRIZWlnaHQgLyAyOworCisgICAgICAgICAgICBldmVudFNlbmRlci5i
ZWdpbkRyYWdXaXRoRmlsZXMoWyJyZXNvdXJjZXMvaW1hZ2VzL2dyZWVuLTQwMHg0MDAuaGVpYyJd
KTsKKyAgICAgICAgICAgIGV2ZW50U2VuZGVyLm1vdXNlTW92ZVRvKGNlbnRlclgsIGNlbnRlclkp
OworICAgICAgICAgICAgZXZlbnRTZW5kZXIubW91c2VVcCgpOworICAgICAgICB9CisKKyAgICAg
ICAgZnVuY3Rpb24gY2hhbmdlZChldmVudCkKKyAgICAgICAgeworICAgICAgICAgICAgZmlsZUxp
c3QgPSBldmVudC50YXJnZXQuZmlsZXM7CisgICAgICAgICAgICBzaG91bGRCZSgiZmlsZUxpc3Qu
bGVuZ3RoIiwgIjEiKTsKKworICAgICAgICAgICAgZmlsZSA9IGZpbGVMaXN0WzBdOworICAgICAg
ICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJmaWxlLnR5cGUiLCAiaW1hZ2UvaGVpYyIpOwor
ICAgICAgICAgICAgc2hvdWxkQmVOb25aZXJvKCJmaWxlLnNpemUiKTsKKworICAgICAgICAgICAg
aW1nID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW1nIik7CisgICAgICAgICAgICBkb2N1bWVu
dC5ib2R5LmFwcGVuZENoaWxkKGltZyk7CisKKyAgICAgICAgICAgIHZhciByZWFkZXIgPSBuZXcg
RmlsZVJlYWRlcigpOworICAgICAgICAgICAgcmVhZGVyLm9ubG9hZCA9ICgpID0+IHsKKyAgICAg
ICAgICAgICAgICBpbWcub25sb2FkID0gKCkgPT4geworICAgICAgICAgICAgICAgICAgICBkZWJ1
ZygiSW1hZ2Ugd2FzIGxvYWRlZC4iKTsKKyAgICAgICAgICAgICAgICAgICAgc2hvdWxkQmUoImlt
Zy53aWR0aCIsICI0MDAiKTsKKyAgICAgICAgICAgICAgICAgICAgc2hvdWxkQmUoImltZy5oZWln
aHQiLCAiNDAwIik7CisgICAgICAgICAgICAgICAgICAgIGZpbmlzaEpTVGVzdCgpOworICAgICAg
ICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgaW1nLm9uZXJyb3IgPSAoKSA9PiB7CisgICAg
ICAgICAgICAgICAgICAgIGRlYnVnKCJJbWFnZSBjb3VsZCBub3QgYmUgbG9hZGVkLiIpOworICAg
ICAgICAgICAgICAgICAgICBzaG91bGROb3RCZSgiaW1nLndpZHRoIiwgIjQwMCIpOworICAgICAg
ICAgICAgICAgICAgICBzaG91bGROb3RCZSgiaW1nLmhlaWdodCIsICI0MDAiKTsKKyAgICAgICAg
ICAgICAgICAgICAgZmluaXNoSlNUZXN0KCk7CisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAg
ICAgICAgICBpbWcuc3JjID0gcmVhZGVyLnJlc3VsdDsKKyAgICAgICAgICAgIH07CisgICAgICAg
ICAgICByZWFkZXIucmVhZEFzRGF0YVVSTChmaWxlKTsKKyAgICAgICAgfQorICAgICAgICBydW5U
ZXN0KCk7CisgICAgPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0
cy9mYXN0L2Zvcm1zL2ZpbGUvZW50cmllcy1hcGkvaW1hZ2UtdHJhbnNjb2RlLWRyYWctZHJvcC1l
eHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9maWxlL2Vu
dHJpZXMtYXBpL2ltYWdlLXRyYW5zY29kZS1kcmFnLWRyb3AtZXhwZWN0ZWQudHh0CShub25leGlz
dGVudCkKKysrIExheW91dFRlc3RzL2Zhc3QvZm9ybXMvZmlsZS9lbnRyaWVzLWFwaS9pbWFnZS10
cmFuc2NvZGUtZHJhZy1kcm9wLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDE1IEBACitUZXN0cyBhIEhFSUMgaW1hZ2Ugd2lsbCBiZSBjb252ZXJ0ZWQgdG8gYSBQTkcgaW1h
Z2Ugd2hlbiBpdCBpcyBkcmFnZ2VkIGFuZCBkcm9wcGVkIHRvIGEgZmlsZSBpbnB1dCBlbGVtZW50
IHdoaWNoIGFjY2VwdHMgUE5HLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMg
b2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFT
UyBmaWxlTGlzdC5sZW5ndGggaXMgMQorUEFTUyBmaWxlLnR5cGUgaXMgImltYWdlL3BuZyIKK1BB
U1MgZmlsZS5zaXplIGlzIG5vbi16ZXJvLgorSW1hZ2Ugd2FzIGxvYWRlZC4KK1BBU1MgaW1nLndp
ZHRoIGlzIDQwMAorUEFTUyBpbWcuaGVpZ2h0IGlzIDQwMAorUEFTUyBzdWNjZXNzZnVsbHlQYXJz
ZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisgIApJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9m
b3Jtcy9maWxlL2VudHJpZXMtYXBpL2ltYWdlLXRyYW5zY29kZS1kcmFnLWRyb3AuaHRtbAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2ZpbGUvZW50cmllcy1hcGkvaW1hZ2Ut
dHJhbnNjb2RlLWRyYWctZHJvcC5odG1sCShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL2Zh
c3QvZm9ybXMvZmlsZS9lbnRyaWVzLWFwaS9pbWFnZS10cmFuc2NvZGUtZHJhZy1kcm9wLmh0bWwJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MiBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4K
KzxoZWFkPgorICAgIDxzY3JpcHQgc3JjPSIuLi8uLi8uLi8uLi9yZXNvdXJjZXMvanMtdGVzdC5q
cyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9Ii4uLy4uLy4uLy4uL3Jlc291cmNlcy91aS1o
ZWxwZXIuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+CisgICAgPGlucHV0IHR5cGU9ImZp
bGUiIGFjY2VwdD0iLnBuZyIgb25jaGFuZ2U9ImNoYW5nZWQoZXZlbnQpIj48L2lucHV0PgorICAg
IDxzY3JpcHQ+CisgICAgICAgIGRlc2NyaXB0aW9uKCJUZXN0cyBhIEhFSUMgaW1hZ2Ugd2lsbCBi
ZSBjb252ZXJ0ZWQgdG8gYSBQTkcgaW1hZ2Ugd2hlbiBpdCBpcyBkcmFnZ2VkIGFuZCBkcm9wcGVk
IHRvIGEgZmlsZSBpbnB1dCBlbGVtZW50IHdoaWNoIGFjY2VwdHMgUE5HLiIpOworICAgICAgICBq
c1Rlc3RJc0FzeW5jID0gdHJ1ZTsKKworICAgICAgICBmdW5jdGlvbiBydW5UZXN0KCkKKyAgICAg
ICAgeworICAgICAgICAgICAgaWYgKCF3aW5kb3cuZXZlbnRTZW5kZXIgfHwgIWV2ZW50U2VuZGVy
LmJlZ2luRHJhZ1dpdGhGaWxlcykgeworICAgICAgICAgICAgICAgIGZpbmlzaEpTVGVzdCgpOwor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdmFy
IGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW5wdXQnKVswXTsKKyAg
ICAgICAgICAgIHZhciBjZW50ZXJYID0gZWxlbWVudC5vZmZzZXRMZWZ0ICsgZWxlbWVudC5vZmZz
ZXRXaWR0aCAvIDI7CisgICAgICAgICAgICB2YXIgY2VudGVyWSA9IGVsZW1lbnQub2Zmc2V0VG9w
ICsgZWxlbWVudC5vZmZzZXRIZWlnaHQgLyAyOworCisgICAgICAgICAgICBldmVudFNlbmRlci5i
ZWdpbkRyYWdXaXRoRmlsZXMoWyJyZXNvdXJjZXMvaW1hZ2VzL2dyZWVuLTQwMHg0MDAuaGVpYyJd
KTsKKyAgICAgICAgICAgIGV2ZW50U2VuZGVyLm1vdXNlTW92ZVRvKGNlbnRlclgsIGNlbnRlclkp
OworICAgICAgICAgICAgZXZlbnRTZW5kZXIubW91c2VVcCgpOworICAgICAgICB9CisKKyAgICAg
ICAgZnVuY3Rpb24gY2hhbmdlZChldmVudCkKKyAgICAgICAgeworICAgICAgICAgICAgZmlsZUxp
c3QgPSBldmVudC50YXJnZXQuZmlsZXM7CisgICAgICAgICAgICBzaG91bGRCZSgiZmlsZUxpc3Qu
bGVuZ3RoIiwgIjEiKTsKKworICAgICAgICAgICAgZmlsZSA9IGZpbGVMaXN0WzBdOworICAgICAg
ICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJmaWxlLnR5cGUiLCAiaW1hZ2UvcG5nIik7Cisg
ICAgICAgICAgICBzaG91bGRCZU5vblplcm8oImZpbGUuc2l6ZSIpOworCisgICAgICAgICAgICBp
bWcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbWciKTsKKyAgICAgICAgICAgIGRvY3VtZW50
LmJvZHkuYXBwZW5kQ2hpbGQoaW1nKTsKKworICAgICAgICAgICAgdmFyIHJlYWRlciA9IG5ldyBG
aWxlUmVhZGVyKCk7CisgICAgICAgICAgICByZWFkZXIub25sb2FkID0gKCkgPT4geworICAgICAg
ICAgICAgICAgIGltZy5vbmxvYWQgPSAoKSA9PiB7CisgICAgICAgICAgICAgICAgICAgIGRlYnVn
KCJJbWFnZSB3YXMgbG9hZGVkLiIpOworICAgICAgICAgICAgICAgICAgICBzaG91bGRCZSgiaW1n
LndpZHRoIiwgIjQwMCIpOworICAgICAgICAgICAgICAgICAgICBzaG91bGRCZSgiaW1nLmhlaWdo
dCIsICI0MDAiKTsKKyAgICAgICAgICAgICAgICAgICAgZmluaXNoSlNUZXN0KCk7CisgICAgICAg
ICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICBpbWcub25lcnJvciA9ICgpID0+IHsKKyAgICAg
ICAgICAgICAgICAgICAgZGVidWcoIkltYWdlIGNvdWxkIG5vdCBiZSBsb2FkZWQuIik7CisgICAg
ICAgICAgICAgICAgICAgIHNob3VsZE5vdEJlKCJpbWcud2lkdGgiLCAiNDAwIik7CisgICAgICAg
ICAgICAgICAgICAgIHNob3VsZE5vdEJlKCJpbWcuaGVpZ2h0IiwgIjQwMCIpOworICAgICAgICAg
ICAgICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKKyAgICAgICAgICAgICAgICB9OworICAgICAgICAg
ICAgICAgIGltZy5zcmMgPSByZWFkZXIucmVzdWx0OworICAgICAgICAgICAgfTsKKyAgICAgICAg
ICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUpOworICAgICAgICB9CisgICAgICAgIHJ1blRl
c3QoKTsKKyAgICA8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3Rz
L3BsYXRmb3JtL2lvcy9UZXN0RXhwZWN0YXRpb25zCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L3BsYXRmb3JtL2lvcy9UZXN0RXhwZWN0YXRpb25zCShyZXZpc2lvbiAyNjUzOTkpCisrKyBMYXlv
dXRUZXN0cy9wbGF0Zm9ybS9pb3MvVGVzdEV4cGVjdGF0aW9ucwkod29ya2luZyBjb3B5KQpAQCAt
NTkzLDYgKzU5Myw4IEBAIGZhc3QvZm9ybXMvZmlsZS9pbnB1dC1maWxlLXZhbHVlLmh0bWwgWyAK
IGZhc3QvZm9ybXMvZmlsZS9pbnB1dC1maWxlLXdyaXRlLWZpbGVzLmh0bWwgWyBTa2lwIF0KIGZh
c3QvZm9ybXMvZmlsZS9yZWNvdmVyLWZpbGUtaW5wdXQtaW4tdW5wb3N0ZWQtZm9ybS5odG1sIFsg
U2tpcCBdCiBmYXN0L2Zvcm1zL2ZpbGUvc2VsZWN0ZWQtZmlsZXMtZnJvbS1oaXN0b3J5LXN0YXRl
Lmh0bWwgWyBTa2lwIF0KK2Zhc3QvZm9ybXMvZmlsZS9lbnRyaWVzLWFwaS9pbWFnZS1uby10cmFu
c2NvZGUtZHJhZy1kcm9wLmh0bWwgWyBTa2lwIF0KK2Zhc3QvZm9ybXMvZmlsZS9lbnRyaWVzLWFw
aS9pbWFnZS10cmFuc2NvZGUtZHJhZy1kcm9wLmh0bWwgWyBTa2lwIF0KIGZhc3QvZm9ybXMvZm9j
dXMtc2VsZWN0aW9uLWlucHV0Lmh0bWwgWyBTa2lwIF0KIGZhc3QvZm9ybXMvZm9jdXMtc2VsZWN0
aW9uLXRleHRhcmVhLmh0bWwgWyBTa2lwIF0KIGZhc3QvZm9ybXMvaW5wdXQtYXBwZWFyYW5jZS1z
cGluYnV0dG9uLXVwLmh0bWwgWyBTa2lwIF0KSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL3dp
bi9UZXN0RXhwZWN0YXRpb25zCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL3dp
bi9UZXN0RXhwZWN0YXRpb25zCShyZXZpc2lvbiAyNjUzOTkpCisrKyBMYXlvdXRUZXN0cy9wbGF0
Zm9ybS93aW4vVGVzdEV4cGVjdGF0aW9ucwkod29ya2luZyBjb3B5KQpAQCAtMzY4Myw2ICszNjgz
LDggQEAgZmFzdC9jYW52YXMvMmQuc2V0UGF0aC5odG1sIFsgRmFpbHVyZSBdCiBmYXN0L2Zvcm1z
L2ZpbGUvZW50cmllcy1hcGkvZHJhZy1mb2xkZXItd2Via2l0RW50cmllcy5odG1sIFsgRmFpbHVy
ZSBdCiBmYXN0L2Zvcm1zL2ZpbGUvZW50cmllcy1hcGkvd2Via2l0ZGlyZWN0b3J5LWRyYWctZm9s
ZGVyLXdlYmtpdEVudHJpZXMuaHRtbCBbIEZhaWx1cmUgXQogZmFzdC9mb3Jtcy9maWxlL2VudHJp
ZXMtYXBpL3dlYmtpdGRpcmVjdG9yeS1kcmFnLWZvbGRlci5odG1sIFsgRmFpbHVyZSBdCitmYXN0
L2Zvcm1zL2ZpbGUvZW50cmllcy1hcGkvaW1hZ2Utbm8tdHJhbnNjb2RlLWRyYWctZHJvcC5odG1s
IFsgRmFpbHVyZSBdCitmYXN0L2Zvcm1zL2ZpbGUvZW50cmllcy1hcGkvaW1hZ2UtdHJhbnNjb2Rl
LWRyYWctZHJvcC5odG1sIFsgRmFpbHVyZSBdCiBodHRwL3Rlc3RzL211bHRpcGFydC9tdWx0aXBh
cnQtYXN5bmMtaW1hZ2UuaHRtbCBbIEZhaWx1cmUgXQogaHR0cC90ZXN0cy9zZWN1cml0eS9jb250
ZW50U2VjdXJpdHlQb2xpY3kvYWxsb3ctZmF2aWNvbi5odG1sIFsgRmFpbHVyZSBdCiBodHRwL3dw
dC9lbnRyaWVzLWFwaS9pbnRlcmZhY2VzLmh0bWwgWyBGYWlsdXJlIF0KSW5kZXg6IExheW91dFRl
c3RzL3BsYXRmb3JtL3dpbmNhaXJvL1Rlc3RFeHBlY3RhdGlvbnMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvcGxhdGZvcm0vd2luY2Fpcm8vVGVzdEV4cGVjdGF0aW9ucwkocmV2aXNpb24gMjY1
Mzk5KQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luY2Fpcm8vVGVzdEV4cGVjdGF0aW9ucwko
d29ya2luZyBjb3B5KQpAQCAtNzQ1LDYgKzc0NSw4IEBAIGZhc3QvZm9ybXMvZmlsZS9nZXQtZmls
ZS11cGxvYWQtdXNpbmctb3AKIGZhc3QvZm9ybXMvZmlsZS9pbnB1dC1maWxlLXZhbHVlLXVzaW5n
LW9wZW4tcGFuZWwuaHRtbCBbIFRpbWVvdXQgXQogZmFzdC9mb3Jtcy9maWxlL2lucHV0LWZpbGUt
d3JpdGUtZmlsZXMtdXNpbmctb3Blbi1wYW5lbC5odG1sIFsgVGltZW91dCBdCiBmYXN0L2Zvcm1z
L2ZpbGUvb3Blbi1maWxlLXBhbmVsLmh0bWwgWyBUaW1lb3V0IF0KK2Zhc3QvZm9ybXMvZmlsZS9l
bnRyaWVzLWFwaS9pbWFnZS1uby10cmFuc2NvZGUtZHJhZy1kcm9wLmh0bWwgW1NraXAgXQorZmFz
dC9mb3Jtcy9maWxlL2VudHJpZXMtYXBpL2ltYWdlLXRyYW5zY29kZS1kcmFnLWRyb3AuaHRtbCBb
U2tpcCBdCiBmYXN0L2hpc3RvcnkvcGFnZS1jYWNoZS1jcmVhdGVPYmplY3RVUkwtdXNpbmctb3Bl
bi1wYW5lbC5odG1sIFsgVGltZW91dCBdCiBmYXN0L2hpc3RvcnkvcGFnZS1jYWNoZS1jcmVhdGVP
YmplY3RVUkwuaHRtbCBbIFRpbWVvdXQgXQogCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS93
azIvVGVzdEV4cGVjdGF0aW9ucwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS93
azIvVGVzdEV4cGVjdGF0aW9ucwkocmV2aXNpb24gMjY1Mzk5KQorKysgTGF5b3V0VGVzdHMvcGxh
dGZvcm0vd2syL1Rlc3RFeHBlY3RhdGlvbnMJKHdvcmtpbmcgY29weSkKQEAgLTY1Nyw2ICs2NTcs
OCBAQCBtZWRpYS92aWRlby1zcmMtYmxvYi5odG1sCiBzZWN1cml0eS9jb250ZW50U2VjdXJpdHlQ
b2xpY3kvaW1hZ2Utd2l0aC1ibG9iLXVybC1hbGxvd2VkLWJ5LWltZy1zcmMtc3Rhci13aXRoLUFs
bG93Q29udGVudFNlY3VyaXR5UG9saWN5U291cmNlU3RhclRvTWF0Y2hBbnlQcm90b2NvbC1lbmFi
bGVkLmh0bWwKIHNlY3VyaXR5L2NvbnRlbnRTZWN1cml0eVBvbGljeS9pbWFnZS13aXRoLWJsb2It
dXJsLWJsb2NrZWQtYnktaW1nLXNyYy1zdGFyLmh0bWwKIHNlY3VyaXR5L2NvbnRlbnRTZWN1cml0
eVBvbGljeS92aWRlby13aXRoLWJsb2ItdXJsLWFsbG93ZWQtYnktbWVkaWEtc3JjLXN0YXIuaHRt
bAorZmFzdC9mb3Jtcy9maWxlL2VudHJpZXMtYXBpL2ltYWdlLW5vLXRyYW5zY29kZS1kcmFnLWRy
b3AuaHRtbAorZmFzdC9mb3Jtcy9maWxlL2VudHJpZXMtYXBpL2ltYWdlLXRyYW5zY29kZS1kcmFn
LWRyb3AuaHRtbAogCiAjIFdlYktpdFRlc3RSdW5uZXIgZG9lc24ndCBoYXZlIGV2ZW50U2VuZGVy
LmZpcmVLZXlib2FyZEV2ZW50c1RvRWxlbWVudAogcGxhdGZvcm0vbWFjL2Zhc3QvZXZlbnRzL29i
amMta2V5Ym9hcmQtZXZlbnQtY3JlYXRpb24uaHRtbAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>406273</attachid>
            <date>2020-08-09 15:06:08 -0700</date>
            <delta_ts>2020-08-09 22:12:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-212482-20200809150607.patch</filename>
            <type>text/plain</type>
            <size>51597</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2NTM5OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUwIEBACisyMDIwLTA4LTA3ICBTYWlkIEFi
b3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgW21hY09TXSBE
cmFnL2Ryb3AgYW4gaW1hZ2Ugb2YgYSB1bnN1cHBvcnRlZCBmb3JtYXQgdG8gYW4gZmlsZSBpbnB1
dCBlbGVtZW50IHNob3VsZCBjb252ZXJ0IGl0IHRvIGEgc3VwcG9ydGVkIGZvcm1hdAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEyNDgyCisgICAgICAg
IDxyZGFyOi8vcHJvYmxlbS82MzczMTY3Mj4KKworICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBB
ZGxlci4KKworICAgICAgICBBbHRob3VnaCB0aGUgbGlzdCBvZiB0aGUgZHJvcHBlZCBmaWxlcyBh
cmUgc2VudCBmcm9tIHRoZSBVSSBwcm9jZXNzIHRvCisgICAgICAgIHRoZSBXZWIgcHJvY2VzcyB0
aHJvdWdoIHRoZSBXZWJQYWdlIGNoYW5uZWwsIHRoZSBmaWxlIGlucHV0IHNldHRpbmdzIGFyZQor
ICAgICAgICBvbmx5IGtub3duIGJ5IHRoZSBXZWIgcHJvY2Vzcy4gU28gd2UgaGF2ZSB0byBkbyB0
aGUgaW1hZ2UgdHJhbnNjb2RpbmcgaW4KKyAgICAgICAgV2ViQ29yZS4KKworICAgICAgICBUZXN0
czogZmFzdC9mb3Jtcy9maWxlL2VudHJpZXMtYXBpL2ltYWdlLW5vLXRyYW5zY29kZS1kcmFnLWRy
b3AuaHRtbAorICAgICAgICAgICAgICAgZmFzdC9mb3Jtcy9maWxlL2VudHJpZXMtYXBpL2ltYWdl
LXRyYW5zY29kZS1kcmFnLWRyb3AuaHRtbAorCisgICAgICAgICogU291cmNlc0NvY29hLnR4dDoK
KyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICog
aHRtbC9GaWxlSW5wdXRUeXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVJbnB1dFR5cGU6
OmhhbmRsZURPTUFjdGl2YXRlRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsZUlucHV0VHlw
ZTo6ZmlsZUNob29zZXJTZXR0aW5ncyBjb25zdCk6CisgICAgICAgIE1vdmUgZmlsbGluZyBGaWxl
Q2hvb3NlclNldHRpbmdzIHRvIHRoZSBmdW5jdGlvbjogZmlsZUNob29zZXJTZXR0aW5ncygpLgor
CisgICAgICAgIChXZWJDb3JlOjpGaWxlSW5wdXRUeXBlOjphcHBseUZpbGVDaG9vc2VyU2V0dGlu
Z3MpOgorICAgICAgICBDYWxsIGZpbGVDaG9vc2VyU2V0dGluZ3MoKSBpbnN0ZWFkIG9mIHJlY2Vp
dmluZyBGaWxlQ2hvb3NlclNldHRpbmdzIGFzCisgICAgICAgIGFuIGFyZ3VtZW50LgorCisgICAg
ICAgIChXZWJDb3JlOjpGaWxlSW5wdXRUeXBlOjpmaWxlc0Nob3Nlbik6CisgICAgICAgIEFkZCB0
aGlzIGZ1bmN0aW9uIHdoaWNoIGNhbiBiZSBjYWxsZWQgZnJvbSByZWNlaXZlRHJvcHBlZEZpbGVz
KCkgb3IKKyAgICAgICAgcmVjZWl2ZURyb3BwZWRGaWxlc1dpdGhJbWFnZVRyYW5zY29kaW5nKCku
ICAgICAgICAKKworICAgICAgICAoV2ViQ29yZTo6RmlsZUlucHV0VHlwZTo6cmVjZWl2ZURyb3Bw
ZWRGaWxlc1dpdGhJbWFnZVRyYW5zY29kaW5nKToKKyAgICAgICAgRmluZHMgb3V0IHdoZXRoZXIg
aW1hZ2UgdHJhbnNjb2RpbmcgaXMgbmVlZGVkIGZvciB0aGUgZHJvcHBlZCBmaWxlcy4gSWYKKyAg
ICAgICAgaXQgaXMgbmVlZGVkLCBpdCB3aWxsIGJlIGRvbmUgaW4gYSBXb3JrUXVldWUgYW5kIGNh
bGwgZmlsZXNDaG9zZW4oKSB3aGVuCisgICAgICAgIGl0IGlzIGRvbmUuIE90aGVyd2lzZSBpdCB3
aWxsIGNhbGwgZmlsZXNDaG9zZW4oKSBpbW1lZGlhdGVseS4KKworICAgICAgICAoV2ViQ29yZTo6
RmlsZUlucHV0VHlwZTo6cmVjZWl2ZURyb3BwZWRGaWxlcyk6CisgICAgICAgICogaHRtbC9GaWxl
SW5wdXRUeXBlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VVdGlsaXRpZXMu
aDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VVdGlsaXRpZXND
Ry5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6c2hhcmVkSW1hZ2VUcmFuc2NvZGluZ1F1
ZXVlKToKKyAgICAgICAgUHJvdmlkZSBhIHNoYXJlZCBXb3JrUXVldWUgd2hpY2ggY2FuIGJlIHVz
ZWQgYnkgV2ViQ29yZSBhbmQgV2ViS2l0LgorCisgICAgICAgIChXZWJDb3JlOjp0cmFuc2NvZGVJ
bWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpmaW5kSW1hZ2VzRm9yVHJhbnNjb2RpbmcpOgorICAg
ICAgICAoV2ViQ29yZTo6dHJhbnNjb2RlSW1hZ2VzKToKKwogMjAyMC0wOC0wNyAgSmFtZXMgRGFy
cGluaWFuICA8amRhcnBpbmlhbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgT2ZmIGJ5IG9uZSBl
cnJvciBpbiB0cmFuc2Zvcm0gZmVlZGJhY2sgYnVmZmVyIGJpbmRpbmcKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvU291
cmNlc0NvY29hLnR4dAkocmV2aXNpb24gMjY1Mzk5KQorKysgU291cmNlL1dlYkNvcmUvU291cmNl
c0NvY29hLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMzMxLDYgKzMzMSw3IEBAIHBsYXRmb3JtL2dy
YXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWMKIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdl
QnVmZmVyVXRpbGl0aWVzQ0cuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZURlY29kZXJD
Ry5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlU291cmNlQ0dNYWMubW0KK3BsYXRmb3Jt
L2dyYXBoaWNzL2NnL0ltYWdlVXRpbGl0aWVzQ0cuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9J
bnRQb2ludENHLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW50UmVjdENHLmNwcAogcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSW50U2l6ZUNHLmNwcApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjY1Mzk5KQorKysg
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5n
IGNvcHkpCkBAIC0xNzYyLDYgKzE3NjIsNyBAQAogCQk1NUFEMDk0MDI0MDg5NjQwMDBERTREMkYg
LyogRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNzJFQTA5RjkyM0ZDQ0M2QTAwODUwNEE1IC8qIERpc3BsYXlM
aXN0RHJhd2luZ0NvbnRleHQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQk1NUFEMDk0MTI0MDg5NjRBMDBERTREMkYgLyogQ29uY3JldGVJbWFnZUJ1
ZmZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJC
QUMzQTcyM0UxNzMyODAwOEQ3NDFDIC8qIENvbmNyZXRlSW1hZ2VCdWZmZXIuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1NUFGMTRFNjFFQUFDNTlC
MDAyNkVFQUEgLyogVVRJUmVnaXN0cnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDU1QUYxNEU0MUVBQUM1OUIwMDI2RUVBQSAvKiBVVElSZWdpc3RyeS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTU1QkJE
NDI5MjREQjU2MDQwMEJCNkUwQyAvKiBJbWFnZVV0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTVCQkQ0MjgyNERCNTNBMjAwQkI2RTBDIC8q
IEltYWdlVXRpbGl0aWVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJNTVEQ0M1MjgyMjQwN0IyMDAwQzI2RTMyIC8qIFNWR1ByaW1pdGl2ZUxpc3Qu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1RENDNTI1
MjI0MDc0OUUwMEMyNkUzMiAvKiBTVkdQcmltaXRpdmVMaXN0LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTVEQ0M1MjkyMjQwN0IyQTAwQzI2RTMy
IC8qIFNWR0xpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDU1RENDNTIzMjI0MDczRkUwMEMyNkUzMiAvKiBTVkdMaXN0LmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTVFQzk1OTkyMDZBQTdBMDAwN0RE
MEE5IC8qIFBhaW50RnJlcXVlbmN5VHJhY2tlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTVFQzk1OTcyMDY5QzkyRDAwN0REMEE5IC8qIFBhaW50RnJl
cXVlbmN5VHJhY2tlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CkBAIC04ODQ3LDYgKzg4NDgsOCBAQAogCQk1NUEzMzZGODFEODIxRTNDMDAyMkM0Qzcg
LyogSW1hZ2VCYWNraW5nU3RvcmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SW1hZ2VCYWNraW5nU3RvcmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTVBRjE0
RTMxRUFBQzU5QjAwMjZFRUFBIC8qIFVUSVJlZ2lzdHJ5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFVUSVJlZ2lzdHJ5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTVBRjE0RTQx
RUFBQzU5QjAwMjZFRUFBIC8qIFVUSVJlZ2lzdHJ5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVUSVJlZ2lz
dHJ5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTU1QkJENDI2MjREQjUzNDMwMEJC
NkUwQyAvKiBJbWFnZVV0aWxpdGllc0NHLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdlVXRp
bGl0aWVzQ0cuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1NUJCRDQyODI0REI1
M0EyMDBCQjZFMEMgLyogSW1hZ2VVdGlsaXRpZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VVdGls
aXRpZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTVCRTAyNTcyMjNCMjlDMDAw
MzJGMDhBIC8qIFNWR1Byb3BlcnR5UmVnaXN0cnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHUHJvcGVy
dHlSZWdpc3RyeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NUJFMDI1OTIyM0Iy
OUMxMDAzMkYwOEEgLyogU1ZHQW5pbWF0aW9uQWRkaXRpdmVWYWx1ZUZ1bmN0aW9uSW1wbC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBTVkdBbmltYXRpb25BZGRpdGl2ZVZhbHVlRnVuY3Rpb25JbXBsLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU1QkUwMjVBMjIzQjI5QzIwMDMyRjA4QSAvKiBT
VkdQb2ludGVyTWVtYmVyQWNjZXNzb3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHUG9pbnRlck1lbWJl
ckFjY2Vzc29yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNTYyNSw2ICsyNTYy
OCw3IEBACiAJCQkJNTU1Qjg3RUIxQ0FBRjBBQjAwMzQ5NDI1IC8qIEltYWdlRGVjb2RlckNHLmgg
Ki8sCiAJCQkJNEIzNDgwOTIwRUVGNTBENDAwQUMxQjQxIC8qIEltYWdlU291cmNlQ0cuaCAqLywK
IAkJCQk0QjM0ODA5MTBFRUY1MEQ0MDBBQzFCNDEgLyogSW1hZ2VTb3VyY2VDR01hYy5tbSAqLywK
KwkJCQk1NUJCRDQyNjI0REI1MzQzMDBCQjZFMEMgLyogSW1hZ2VVdGlsaXRpZXNDRy5jcHAgKi8s
CiAJCQkJQjI3NTM1MzIwQjA1MzgxNDAwMkNFNjRGIC8qIEludFBvaW50Q0cuY3BwICovLAogCQkJ
CUIyNzUzNTMzMEIwNTM4MTQwMDJDRTY0RiAvKiBJbnRSZWN0Q0cuY3BwICovLAogCQkJCUIyNzUz
NTM0MEIwNTM4MTQwMDJDRTY0RiAvKiBJbnRTaXplQ0cuY3BwICovLApAQCAtMjU4MjgsNiArMjU4
MzIsNyBAQAogCQkJCTU1NDY3NTc3MUZEMUZDMUEwMDNCMTBCMCAvKiBJbWFnZVNvdXJjZS5jcHAg
Ki8sCiAJCQkJNTU0Njc1NzgxRkQxRkMxQTAwM0IxMEIwIC8qIEltYWdlU291cmNlLmggKi8sCiAJ
CQkJNTU1MENCNDExRTk1NUUzQzAwMTExQUEwIC8qIEltYWdlVHlwZXMuaCAqLywKKwkJCQk1NUJC
RDQyODI0REI1M0EyMDBCQjZFMEMgLyogSW1hZ2VVdGlsaXRpZXMuaCAqLywKIAkJCQkwNzg2MzNG
ODI0MDcxNUQyMDA4N0FFMjEgLyogSW5iYW5kR2VuZXJpY0N1ZS5jcHAgKi8sCiAJCQkJMDc4NjMz
REUyM0ZFREYyMjAwODdBRTIxIC8qIEluYmFuZEdlbmVyaWNDdWUuaCAqLywKIAkJCQkwNzA2QTBE
NzI0MDgzMEE2MDBFOTM4MTggLyogSW5iYW5kR2VuZXJpY0N1ZUlkZW50aWZpZXIuaCAqLywKQEAg
LTMxNDIyLDYgKzMxNDI3LDcgQEAKIAkJCQk0QjM0ODA5NDBFRUY1MEQ0MDBBQzFCNDEgLyogSW1h
Z2VTb3VyY2VDRy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDc4RUQxOTMyMTZEMDc5NTAwNzc1QjMz
IC8qIEltYWdlVHJhbnNmZXJTZXNzaW9uVlQuaCBpbiBIZWFkZXJzICovLAogCQkJCTU1NTBDQjQy
MUU5NTVFM0MwMDExMUFBMCAvKiBJbWFnZVR5cGVzLmggaW4gSGVhZGVycyAqLywKKwkJCQk1NUJC
RDQyOTI0REI1NjA0MDBCQjZFMEMgLyogSW1hZ2VVdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovLAog
CQkJCTI2Rjc1NkIzMUIzQjY2RjcwMDA1REQ3OSAvKiBJbW11dGFibGVORkEuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTI2Rjc1NkI1MUIzQjY4RjIwMDA1REQ3OSAvKiBJbW11dGFibGVORkFOb2RlQnVp
bGRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzE2RkUxMTgwRTZFMURBNzAwQkY2MDg4IC8qIElt
cGxpY2l0QW5pbWF0aW9uLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0
bWwvRmlsZUlucHV0VHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9G
aWxlSW5wdXRUeXBlLmNwcAkocmV2aXNpb24gMjY1Mzk5KQorKysgU291cmNlL1dlYkNvcmUvaHRt
bC9GaWxlSW5wdXRUeXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsNyBAQAogI2lu
Y2x1ZGUgIkljb24uaCIKICNpbmNsdWRlICJJbnB1dFR5cGVOYW1lcy5oIgogI2luY2x1ZGUgIkxv
Y2FsaXplZFN0cmluZ3MuaCIKKyNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCiAjaW5jbHVk
ZSAiUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuaCIKICNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZl
YXR1cmVzLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKQEAgLTQ3LDYgKzQ4LDExIEBACiAjaW5j
bHVkZSA8d3RmL1R5cGVDYXN0cy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIu
aD4KIAorI2lmIFBMQVRGT1JNKE1BQykKKyNpbmNsdWRlICJJbWFnZVV0aWxpdGllcy5oIgorI2lu
Y2x1ZGUgIlVUSVV0aWxpdGllcy5oIgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNs
YXNzIFVwbG9hZEJ1dHRvbkVsZW1lbnQ7CiB9CkBAIC0yMDQsMTYgKzIxMCw3IEBAIHZvaWQgRmls
ZUlucHV0VHlwZTo6aGFuZGxlRE9NQWN0aXZhdGVFdmUKICAgICAgICAgcmV0dXJuOwogCiAgICAg
aWYgKGF1dG8qIGNocm9tZSA9IHRoaXMtPmNocm9tZSgpKSB7Ci0gICAgICAgIEZpbGVDaG9vc2Vy
U2V0dGluZ3Mgc2V0dGluZ3M7Ci0gICAgICAgIHNldHRpbmdzLmFsbG93c0RpcmVjdG9yaWVzID0g
YWxsb3dzRGlyZWN0b3JpZXMoKTsKLSAgICAgICAgc2V0dGluZ3MuYWxsb3dzTXVsdGlwbGVGaWxl
cyA9IGlucHV0Lmhhc0F0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24obXVsdGlwbGVBdHRy
KTsKLSAgICAgICAgc2V0dGluZ3MuYWNjZXB0TUlNRVR5cGVzID0gaW5wdXQuYWNjZXB0TUlNRVR5
cGVzKCk7Ci0gICAgICAgIHNldHRpbmdzLmFjY2VwdEZpbGVFeHRlbnNpb25zID0gaW5wdXQuYWNj
ZXB0RmlsZUV4dGVuc2lvbnMoKTsKLSAgICAgICAgc2V0dGluZ3Muc2VsZWN0ZWRGaWxlcyA9IG1f
ZmlsZUxpc3QtPnBhdGhzKCk7Ci0jaWYgRU5BQkxFKE1FRElBX0NBUFRVUkUpCi0gICAgICAgIHNl
dHRpbmdzLm1lZGlhQ2FwdHVyZVR5cGUgPSBpbnB1dC5tZWRpYUNhcHR1cmVUeXBlKCk7Ci0jZW5k
aWYKLSAgICAgICAgYXBwbHlGaWxlQ2hvb3NlclNldHRpbmdzKHNldHRpbmdzKTsKKyAgICAgICAg
YXBwbHlGaWxlQ2hvb3NlclNldHRpbmdzKCk7CiAgICAgICAgIGNocm9tZS0+cnVuT3BlblBhbmVs
KCppbnB1dC5kb2N1bWVudCgpLmZyYW1lKCksICptX2ZpbGVDaG9vc2VyKTsKICAgICB9CiAKQEAg
LTMzMiwxMiArMzI5LDI5IEBAIHZvaWQgRmlsZUlucHV0VHlwZTo6cmVxdWVzdEljb24oY29uc3Qg
VmUKICAgICBjaHJvbWUtPmxvYWRJY29uRm9yRmlsZXMocGF0aHMsICptX2ZpbGVJY29uTG9hZGVy
KTsKIH0KIAotdm9pZCBGaWxlSW5wdXRUeXBlOjphcHBseUZpbGVDaG9vc2VyU2V0dGluZ3MoY29u
c3QgRmlsZUNob29zZXJTZXR0aW5ncyYgc2V0dGluZ3MpCitGaWxlQ2hvb3NlclNldHRpbmdzIEZp
bGVJbnB1dFR5cGU6OmZpbGVDaG9vc2VyU2V0dGluZ3MoKSBjb25zdAoreworICAgIEFTU0VSVChl
bGVtZW50KCkpOworICAgIGF1dG8mIGlucHV0ID0gKmVsZW1lbnQoKTsKKworICAgIEZpbGVDaG9v
c2VyU2V0dGluZ3Mgc2V0dGluZ3M7CisgICAgc2V0dGluZ3MuYWxsb3dzRGlyZWN0b3JpZXMgPSBh
bGxvd3NEaXJlY3RvcmllcygpOworICAgIHNldHRpbmdzLmFsbG93c011bHRpcGxlRmlsZXMgPSBp
bnB1dC5oYXNBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKG11bHRpcGxlQXR0cik7Cisg
ICAgc2V0dGluZ3MuYWNjZXB0TUlNRVR5cGVzID0gaW5wdXQuYWNjZXB0TUlNRVR5cGVzKCk7Cisg
ICAgc2V0dGluZ3MuYWNjZXB0RmlsZUV4dGVuc2lvbnMgPSBpbnB1dC5hY2NlcHRGaWxlRXh0ZW5z
aW9ucygpOworICAgIHNldHRpbmdzLnNlbGVjdGVkRmlsZXMgPSBtX2ZpbGVMaXN0LT5wYXRocygp
OworI2lmIEVOQUJMRShNRURJQV9DQVBUVVJFKQorICAgIHNldHRpbmdzLm1lZGlhQ2FwdHVyZVR5
cGUgPSBpbnB1dC5tZWRpYUNhcHR1cmVUeXBlKCk7CisjZW5kaWYKKyAgICByZXR1cm4gc2V0dGlu
Z3M7Cit9CisKK3ZvaWQgRmlsZUlucHV0VHlwZTo6YXBwbHlGaWxlQ2hvb3NlclNldHRpbmdzKCkK
IHsKICAgICBpZiAobV9maWxlQ2hvb3NlcikKICAgICAgICAgbV9maWxlQ2hvb3Nlci0+aW52YWxp
ZGF0ZSgpOwogCi0gICAgbV9maWxlQ2hvb3NlciA9IEZpbGVDaG9vc2VyOjpjcmVhdGUodGhpcywg
c2V0dGluZ3MpOworICAgIG1fZmlsZUNob29zZXIgPSBGaWxlQ2hvb3Nlcjo6Y3JlYXRlKHRoaXMs
IGZpbGVDaG9vc2VyU2V0dGluZ3MoKSk7CiB9CiAKIGJvb2wgRmlsZUlucHV0VHlwZTo6YWxsb3dz
RGlyZWN0b3JpZXMoKSBjb25zdApAQCAtNDI1LDYgKzQzOSwyMiBAQCB2b2lkIEZpbGVJbnB1dFR5
cGU6OmZpbGVzQ2hvc2VuKGNvbnN0IFZlCiAgICAgbV9kaXJlY3RvcnlGaWxlTGlzdENyZWF0b3It
PnN0YXJ0KHBhdGhzKTsKIH0KIAordm9pZCBGaWxlSW5wdXRUeXBlOjpmaWxlc0Nob3Nlbihjb25z
dCBWZWN0b3I8U3RyaW5nPiYgcGF0aHMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiByZXBsYWNlbWVu
dFBhdGhzKQoreworICAgIEFTU0VSVChlbGVtZW50KCkpOworICAgIEFTU0VSVCghcGF0aHMuaXNF
bXB0eSgpKTsKKworICAgIHNpemVfdCBzaXplID0gZWxlbWVudCgpLT5oYXNBdHRyaWJ1dGVXaXRo
b3V0U3luY2hyb25pemF0aW9uKG11bHRpcGxlQXR0cikgPyBwYXRocy5zaXplKCkgOiAxOworCisg
ICAgVmVjdG9yPEZpbGVDaG9vc2VyRmlsZUluZm8+IGZpbGVzOworICAgIGZpbGVzLnJlc2VydmVJ
bml0aWFsQ2FwYWNpdHkoc2l6ZSk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7
ICsraSkKKyAgICAgICAgZmlsZXMudW5jaGVja2VkQXBwZW5kKHsgcGF0aHNbaV0sIGkgPCByZXBs
YWNlbWVudFBhdGhzLnNpemUoKSA/IHJlcGxhY2VtZW50UGF0aHNbaV0gOiBudWxsU3RyaW5nKCks
IHsgfSB9KTsKKworICAgIGZpbGVzQ2hvc2VuKGZpbGVzKTsKK30KKwogdm9pZCBGaWxlSW5wdXRU
eXBlOjpkaWRDcmVhdGVGaWxlTGlzdChSZWY8RmlsZUxpc3Q+JiYgZmlsZUxpc3QsIFJlZlB0cjxJ
Y29uPiYmIGljb24pCiB7CiAgICAgYXV0byBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyk7
CkBAIC00NTQsMjMgKzQ4NCw1NSBAQCB2b2lkIEZpbGVJbnB1dFR5cGU6Omljb25Mb2FkZWQoUmVm
UHRyPEljCiB9CiAKICNpZiBFTkFCTEUoRFJBR19TVVBQT1JUKQorYm9vbCBGaWxlSW5wdXRUeXBl
OjpyZWNlaXZlRHJvcHBlZEZpbGVzV2l0aEltYWdlVHJhbnNjb2RpbmcoY29uc3QgVmVjdG9yPFN0
cmluZz4mIHBhdGhzKQoreworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBhdXRvIHNldHRpbmdzID0g
ZmlsZUNob29zZXJTZXR0aW5ncygpOworICAgIGF1dG8gYWxsb3dlZE1JTUVUeXBlcyA9IE1JTUVU
eXBlUmVnaXN0cnk6OmFsbG93ZWRNSU1FVHlwZXMoc2V0dGluZ3MuYWNjZXB0TUlNRVR5cGVzLCBz
ZXR0aW5ncy5hY2NlcHRGaWxlRXh0ZW5zaW9ucyk7CisgICAgCisgICAgYXV0byB0cmFuc2NvZGlu
Z1BhdGhzID0gZmluZEltYWdlc0ZvclRyYW5zY29kaW5nKHBhdGhzLCBhbGxvd2VkTUlNRVR5cGVz
KTsKKyAgICBpZiAodHJhbnNjb2RpbmdQYXRocy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiB7
IH07CisKKyAgICBhdXRvIHRyYW5zY29kaW5nTUlNRVR5cGUgPSBNSU1FVHlwZVJlZ2lzdHJ5Ojpw
cmVmZXJyZWRJbWFnZU1JTUVUeXBlRm9yRW5jb2RpbmcoYWxsb3dlZE1JTUVUeXBlcywgeyB9KTsK
KyAgICBpZiAodHJhbnNjb2RpbmdNSU1FVHlwZS5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIHsg
fTsKKworICAgIGF1dG8gdHJhbnNjb2RpbmdVVEkgPSBXZWJDb3JlOjpVVElGcm9tTUlNRVR5cGUo
dHJhbnNjb2RpbmdNSU1FVHlwZSk7CisgICAgYXV0byB0cmFuc2NvZGluZ0V4dGVuc2lvbiA9IFdl
YkNvcmU6Ok1JTUVUeXBlUmVnaXN0cnk6OnByZWZlcnJlZEV4dGVuc2lvbkZvck1JTUVUeXBlKHRy
YW5zY29kaW5nTUlNRVR5cGUpOworCisgICAgYXV0byBjYWxsRmlsZXNDaG9zZW4gPSBbcHJvdGVj
dGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBwYXRoc10oY29uc3QgVmVjdG9yPFN0cmluZz4mIHJl
cGxhY2VtZW50UGF0aHMpIHsKKyAgICAgICAgcHJvdGVjdGVkVGhpcy0+ZmlsZXNDaG9zZW4ocGF0
aHMsIHJlcGxhY2VtZW50UGF0aHMpOworICAgIH07CisKKyAgICBzaGFyZWRJbWFnZVRyYW5zY29k
aW5nUXVldWUoKS5kaXNwYXRjaChbY2FsbEZpbGVzQ2hvc2VuID0gV1RGTW92ZShjYWxsRmlsZXND
aG9zZW4pLCB0cmFuc2NvZGluZ1BhdGhzID0gdHJhbnNjb2RpbmdQYXRocy5pc29sYXRlZENvcHko
KSwgdHJhbnNjb2RpbmdVVEkgPSB0cmFuc2NvZGluZ1VUSS5pc29sYXRlZENvcHkoKSwgdHJhbnNj
b2RpbmdFeHRlbnNpb24gPSB0cmFuc2NvZGluZ0V4dGVuc2lvbi5pc29sYXRlZENvcHkoKV0oKSBt
dXRhYmxlIHsKKyAgICAgICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7CisKKyAgICAgICAg
YXV0byByZXBsYWNlbWVudFBhdGhzID0gdHJhbnNjb2RlSW1hZ2VzKHRyYW5zY29kaW5nUGF0aHMs
IHRyYW5zY29kaW5nVVRJLCB0cmFuc2NvZGluZ0V4dGVuc2lvbik7CisgICAgICAgIEFTU0VSVCh0
cmFuc2NvZGluZ1BhdGhzLnNpemUoKSA9PSByZXBsYWNlbWVudFBhdGhzLnNpemUoKSk7CisKKyAg
ICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtjYWxsRmlsZXNDaG9zZW4gPSBXVEZNb3Zl
KGNhbGxGaWxlc0Nob3NlbiksIHJlcGxhY2VtZW50UGF0aHMgPSByZXBsYWNlbWVudFBhdGhzLmlz
b2xhdGVkQ29weSgpXSgpIHsKKyAgICAgICAgICAgIGNhbGxGaWxlc0Nob3NlbihyZXBsYWNlbWVu
dFBhdGhzKTsKKyAgICAgICAgfSk7CisgICAgfSk7CisKKyAgICByZXR1cm4gdHJ1ZTsKKyNlbHNl
CisgICAgVU5VU0VEX1BBUkFNKHBhdGhzKTsKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKK30K
KwogYm9vbCBGaWxlSW5wdXRUeXBlOjpyZWNlaXZlRHJvcHBlZEZpbGVzKGNvbnN0IERyYWdEYXRh
JiBkcmFnRGF0YSkKIHsKICAgICBhdXRvIHBhdGhzID0gZHJhZ0RhdGEuYXNGaWxlbmFtZXMoKTsK
ICAgICBpZiAocGF0aHMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBB
U1NFUlQoZWxlbWVudCgpKTsKLSAgICBpZiAoZWxlbWVudCgpLT5oYXNBdHRyaWJ1dGVXaXRob3V0
U3luY2hyb25pemF0aW9uKG11bHRpcGxlQXR0cikpIHsKLSAgICAgICAgVmVjdG9yPEZpbGVDaG9v
c2VyRmlsZUluZm8+IGZpbGVzOwotICAgICAgICBmaWxlcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5
KHBhdGhzLnNpemUoKSk7Ci0gICAgICAgIGZvciAoYXV0byYgcGF0aCA6IHBhdGhzKQotICAgICAg
ICAgICAgZmlsZXMudW5jaGVja2VkQXBwZW5kKHsgcGF0aCwgeyB9LCB7IH0gfSk7Ci0KLSAgICAg
ICAgZmlsZXNDaG9zZW4oZmlsZXMpOwotICAgIH0gZWxzZQotICAgICAgICBmaWxlc0Nob3Nlbih7
IHsgcGF0aHNbMF0sIHsgfSwgeyB9IH0gfSk7Ci0KKyAgICBpZiAocmVjZWl2ZURyb3BwZWRGaWxl
c1dpdGhJbWFnZVRyYW5zY29kaW5nKHBhdGhzKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
CisgICAgZmlsZXNDaG9zZW4ocGF0aHMpOwogICAgIHJldHVybiB0cnVlOwogfQogI2VuZGlmIC8v
IEVOQUJMRShEUkFHX1NVUFBPUlQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0ZpbGVJbnB1
dFR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0ZpbGVJbnB1dFR5cGUu
aAkocmV2aXNpb24gMjY1Mzk5KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9GaWxlSW5wdXRUeXBl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTcxLDYgKzcxLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHNl
dFZhbHVlKGNvbnN0IFN0cmluZyYsIGJvb2wgdmFsdWVDaGFuZ2VkLCBUZXh0RmllbGRFdmVudEJl
aGF2aW9yKSBmaW5hbDsKIAogI2lmIEVOQUJMRShEUkFHX1NVUFBPUlQpCisgICAgYm9vbCByZWNl
aXZlRHJvcHBlZEZpbGVzV2l0aEltYWdlVHJhbnNjb2RpbmcoY29uc3QgVmVjdG9yPFN0cmluZz4m
IHBhdGhzKTsKICAgICBib29sIHJlY2VpdmVEcm9wcGVkRmlsZXMoY29uc3QgRHJhZ0RhdGEmKSBm
aW5hbDsKICNlbmRpZgogCkBAIC04MiwxMSArODMsMTMgQEAgcHJpdmF0ZToKICAgICBTdHJpbmcg
ZGVmYXVsdFRvb2xUaXAoKSBjb25zdCBmaW5hbDsKIAogICAgIHZvaWQgZmlsZXNDaG9zZW4oY29u
c3QgVmVjdG9yPEZpbGVDaG9vc2VyRmlsZUluZm8+JiwgY29uc3QgU3RyaW5nJiBkaXNwbGF5U3Ry
aW5nID0geyB9LCBJY29uKiA9IG51bGxwdHIpIGZpbmFsOworICAgIHZvaWQgZmlsZXNDaG9zZW4o
Y29uc3QgVmVjdG9yPFN0cmluZz4mIHBhdGhzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcmVwbGFj
ZW1lbnRQYXRocyA9IHsgfSk7CiAKICAgICAvLyBGaWxlSWNvbkxvYWRlckNsaWVudCBpbXBsZW1l
bnRhdGlvbi4KICAgICB2b2lkIGljb25Mb2FkZWQoUmVmUHRyPEljb24+JiYpIGZpbmFsOwogCi0g
ICAgdm9pZCBhcHBseUZpbGVDaG9vc2VyU2V0dGluZ3MoY29uc3QgRmlsZUNob29zZXJTZXR0aW5n
cyYpOworICAgIEZpbGVDaG9vc2VyU2V0dGluZ3MgZmlsZUNob29zZXJTZXR0aW5ncygpIGNvbnN0
OworICAgIHZvaWQgYXBwbHlGaWxlQ2hvb3NlclNldHRpbmdzKCk7CiAgICAgdm9pZCBkaWRDcmVh
dGVGaWxlTGlzdChSZWY8RmlsZUxpc3Q+JiYsIFJlZlB0cjxJY29uPiYmKTsKICAgICB2b2lkIHJl
cXVlc3RJY29uKGNvbnN0IFZlY3RvcjxTdHJpbmc+Jik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlVXRpbGl0aWVzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VVdGlsaXRpZXMuaAkobm9uZXhpc3RlbnQp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVV0aWxpdGllcy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitXRUJDT1JFX0VYUE9SVCBXb3JrUXVldWUmIHNoYXJl
ZEltYWdlVHJhbnNjb2RpbmdRdWV1ZSgpOworCisvLyBHaXZlbiBhIGxpc3Qgb2YgZmlsZXMnICdw
YXRocycgYW5kICdhbGxvd2VkTUlNRVR5cGVzJywgdGhlIGZ1bmN0aW9uIHJldHVybnMgYSBsaXN0
CisvLyBvZiBzdHJpbmdzIHdob3NlIHNpemUgaXMgdGhlIHNhbWUgYXMgdGhlIHNpemUgb2YgJ3Bh
dGhzJyBhbmQgaXRzIGVudHJpZXMgYXJlIGFsbAorLy8gbnVsbCBzdHJpbmdzIGV4Y2VwdCB0aGUg
b25lcyB3aG9zZSBNSU1FIHR5cGVzIGFyZSBub3QgaW4gJ2FsbG93ZWRNSU1FVHlwZXMnLgorV0VC
Q09SRV9FWFBPUlQgVmVjdG9yPFN0cmluZz4gZmluZEltYWdlc0ZvclRyYW5zY29kaW5nKGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiBwYXRocywgY29uc3QgVmVjdG9yPFN0cmluZz4mIGFsbG93ZWRNSU1F
VHlwZXMpOworCisvLyBHaXZlbiBhIGxpc3Qgb2YgaW1hZ2VzJyAncGF0aHMnLCB0aGlzIGZ1bmN0
aW9uIHRyYW5zY29kZXMgdGhlc2UgaW1hZ2VzIHRvIGEgbmV3CisvLyBmb3JtYXQgd2hvc2UgVVRJ
IGlzIGRlc3RpbmF0aW9uVVRJLiBUaGUgcmVzdWx0IG9mIHRoZSB0cmFuc2NvZGluZyB3aWxsIGJl
IHdyaXR0ZW4KKy8vIHRvIHRlbXBvcmFyeSBmaWxlcyB3aG9zZSBleHRlbnNpb25zIGFyZSAnZGVz
dGluYXRpb25FeHRlbnNpb24nLiBJdCByZXR1cm5zIGEgbGlzdAorLy8gb2YgcGF0aHMgdG8gdGhl
IHJlc3VsdCB0ZW1wb3JhcnkgZmlsZXMuIElmIGFuIGVudHJ5IGluICdwYXRocycgaXMgbnVsbCBv
ciBhbiBlcnJvcgorLy8gaGFwcGVucyB3aGlsZSB0cmFuc2NvZGluZywgYSBudWxsIHN0cmluZyB3
aWxsIGJlIGFkZGVkIHRvIHRoZSByZXR1cm5lZCBsaXN0LgorV0VCQ09SRV9FWFBPUlQgVmVjdG9y
PFN0cmluZz4gdHJhbnNjb2RlSW1hZ2VzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXRocywgY29u
c3QgU3RyaW5nJiBkZXN0aW5hdGlvblVUSSwgY29uc3QgU3RyaW5nJiBkZXN0aW5hdGlvbkV4dGVu
c2lvbik7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VVdGlsaXRpZXNDRy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VVdGlsaXRpZXNDRy5jcHAJ
KG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1h
Z2VVdGlsaXRpZXNDRy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjggQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VVdGlsaXRpZXMuaCIK
KworI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCisj
aW5jbHVkZSA8SW1hZ2VJTy9JbWFnZUlPLmg+CisjaW5jbHVkZSA8d3RmL0ZpbGVTeXN0ZW0uaD4K
KyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
V29ya1F1ZXVlJiBzaGFyZWRJbWFnZVRyYW5zY29kaW5nUXVldWUoKQoreworICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxSZWY8V29ya1F1ZXVlPj4gcXVldWUoV29ya1F1ZXVlOjpjcmVhdGUoImNv
bS5hcHBsZS5XZWJLaXQuSW1hZ2VUcmFuc2NvZGluZyIpKTsKKyAgICByZXR1cm4gcXVldWUuZ2V0
KCk7Cit9CisKK3N0YXRpYyBTdHJpbmcgdHJhbnNjb2RlSW1hZ2UoY29uc3QgU3RyaW5nJiBwYXRo
LCBjb25zdCBTdHJpbmcmIGRlc3RpbmF0aW9uVVRJLCBjb25zdCBTdHJpbmcmIGRlc3RpbmF0aW9u
RXh0ZW5zaW9uKQoreworICAgIGF1dG8gc291cmNlVVJMID0gYWRvcHRDRihDRlVSTENyZWF0ZVdp
dGhGaWxlU3lzdGVtUGF0aChrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBwYXRoLmNyZWF0ZUNGU3RyaW5n
KCkuZ2V0KCksIGtDRlVSTFBPU0lYUGF0aFN0eWxlLCBmYWxzZSkpOworICAgIGF1dG8gc291cmNl
ID0gYWRvcHRDRihDR0ltYWdlU291cmNlQ3JlYXRlV2l0aFVSTChzb3VyY2VVUkwuZ2V0KCksIG51
bGxwdHIpKTsKKyAgICBpZiAoIXNvdXJjZSkKKyAgICAgICAgcmV0dXJuIG51bGxTdHJpbmcoKTsK
KworICAgIGF1dG8gc291cmNlVVRJID0gU3RyaW5nKENHSW1hZ2VTb3VyY2VHZXRUeXBlKHNvdXJj
ZS5nZXQoKSkpOworICAgIGlmIChzb3VyY2VVVEkgPT0gZGVzdGluYXRpb25VVEkpCisgICAgICAg
IHJldHVybiBudWxsU3RyaW5nKCk7CisKKyAgICAvLyBJdCBpcyBpbXBvcnRhbnQgdG8gYWRkIHRo
ZSBhcHByb3ByaWF0ZSBmaWxlIGV4dGVuc2lvbiB0byB0aGUgdGVtcG9yYXJ5IGZpbGUgcGF0aC4K
KyAgICAvLyBUaGUgRmlsZSBvYmplY3QgZGVwZW5kcyBzb2xlbHkgb24gdGhlIGV4dGVuc2lvbiB0
byBrbm93IHRoZSBNSU1FIHR5cGUgb2YgdGhlIGZpbGUuCisgICAgYXV0byBzdWZmaXggPSBtYWtl
U3RyaW5nKCcuJywgZGVzdGluYXRpb25FeHRlbnNpb24pOworCisgICAgRmlsZVN5c3RlbTo6UGxh
dGZvcm1GaWxlSGFuZGxlIGRlc3RpbmF0aW9uRmlsZUhhbmRsZTsKKyAgICBTdHJpbmcgZGVzdGlu
YXRpb25QYXRoID0gRmlsZVN5c3RlbTo6b3BlblRlbXBvcmFyeUZpbGUoInRlbXBJbWFnZSJfcywg
ZGVzdGluYXRpb25GaWxlSGFuZGxlLCBzdWZmaXgpOworICAgIGlmIChkZXN0aW5hdGlvbkZpbGVI
YW5kbGUgPT0gRmlsZVN5c3RlbTo6aW52YWxpZFBsYXRmb3JtRmlsZUhhbmRsZSkgeworICAgICAg
ICBSRUxFQVNFX0xPR19FUlJPUihJbWFnZXMsICJ0cmFuc2NvZGVJbWFnZTogRGVzdGluYXRpb24g
aW1hZ2UgY291bGQgbm90IGJlIGNyZWF0ZWQ6ICVzICVzXG4iLCBwYXRoLnV0ZjgoKS5kYXRhKCks
IGRlc3RpbmF0aW9uVVRJLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICByZXR1cm4gbnVsbFN0cmlu
ZygpOworICAgIH0KKworICAgIENHRGF0YUNvbnN1bWVyQ2FsbGJhY2tzIGNhbGxiYWNrcyA9IHsK
KyAgICAgICAgW10odm9pZCogaW5mbywgY29uc3Qgdm9pZCogYnVmZmVyLCBzaXplX3QgY291bnQp
IC0+IHNpemVfdCB7CisgICAgICAgICAgICBhdXRvIGhhbmRsZSA9ICpzdGF0aWNfY2FzdDxGaWxl
U3lzdGVtOjpQbGF0Zm9ybUZpbGVIYW5kbGUqPihpbmZvKTsKKyAgICAgICAgICAgIHJldHVybiBG
aWxlU3lzdGVtOjp3cml0ZVRvRmlsZShoYW5kbGUsIHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihi
dWZmZXIpLCBjb3VudCk7CisgICAgICAgIH0sCisgICAgICAgIG51bGxwdHIKKyAgICB9OworCisg
ICAgYXV0byBjb25zdW1lciA9IGFkb3B0Q0YoQ0dEYXRhQ29uc3VtZXJDcmVhdGUoJmRlc3RpbmF0
aW9uRmlsZUhhbmRsZSwgJmNhbGxiYWNrcykpOworICAgIGF1dG8gZGVzdGluYXRpb24gPSBhZG9w
dENGKENHSW1hZ2VEZXN0aW5hdGlvbkNyZWF0ZVdpdGhEYXRhQ29uc3VtZXIoY29uc3VtZXIuZ2V0
KCksIGRlc3RpbmF0aW9uVVRJLmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCksIDEsIG51bGxwdHIpKTsK
KworICAgIENHSW1hZ2VEZXN0aW5hdGlvbkFkZEltYWdlRnJvbVNvdXJjZShkZXN0aW5hdGlvbi5n
ZXQoKSwgc291cmNlLmdldCgpLCAwLCBudWxscHRyKTsKKworICAgIGlmICghQ0dJbWFnZURlc3Rp
bmF0aW9uRmluYWxpemUoZGVzdGluYXRpb24uZ2V0KCkpKSB7CisgICAgICAgIFJFTEVBU0VfTE9H
X0VSUk9SKEltYWdlcywgInRyYW5zY29kZUltYWdlOiBJbWFnZSB0cmFuc2NvZGluZyBmYWlsczog
JXMgJXNcbiIsIHBhdGgudXRmOCgpLmRhdGEoKSwgZGVzdGluYXRpb25VVEkudXRmOCgpLmRhdGEo
KSk7CisgICAgICAgIEZpbGVTeXN0ZW06OmNsb3NlRmlsZShkZXN0aW5hdGlvbkZpbGVIYW5kbGUp
OworICAgICAgICBGaWxlU3lzdGVtOjpkZWxldGVGaWxlKGRlc3RpbmF0aW9uUGF0aCk7CisgICAg
ICAgIHJldHVybiBudWxsU3RyaW5nKCk7CisgICAgfQorCisgICAgRmlsZVN5c3RlbTo6Y2xvc2VG
aWxlKGRlc3RpbmF0aW9uRmlsZUhhbmRsZSk7CisgICAgcmV0dXJuIGRlc3RpbmF0aW9uUGF0aDsK
K30KKworVmVjdG9yPFN0cmluZz4gZmluZEltYWdlc0ZvclRyYW5zY29kaW5nKGNvbnN0IFZlY3Rv
cjxTdHJpbmc+JiBwYXRocywgY29uc3QgVmVjdG9yPFN0cmluZz4mIGFsbG93ZWRNSU1FVHlwZXMp
Cit7CisgICAgVmVjdG9yPFN0cmluZz4gdHJhbnNjb2RpbmdQYXRoczsKKyAgICB0cmFuc2NvZGlu
Z1BhdGhzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkocGF0aHMuc2l6ZSgpKTsKKworICAgIGJvb2wg
bmVlZHNUcmFuc2NvZGluZyA9IGZhbHNlOworCisgICAgZm9yIChhdXRvJiBwYXRoIDogcGF0aHMp
IHsKKyAgICAgICAgLy8gQXBwZW5kIGEgcGF0aCBvZiB0aGUgaW1hZ2Ugd2hpY2ggbmVlZHMgdHJh
bnNjb2RpbmcuIE90aGVyd2lzZSBhcHBlbmQgYSBudWxsIHN0cmluZy4KKyAgICAgICAgaWYgKCFh
bGxvd2VkTUlNRVR5cGVzLmNvbnRhaW5zKFdlYkNvcmU6Ok1JTUVUeXBlUmVnaXN0cnk6Om1pbWVU
eXBlRm9yUGF0aChwYXRoKSkpIHsKKyAgICAgICAgICAgIHRyYW5zY29kaW5nUGF0aHMudW5jaGVj
a2VkQXBwZW5kKHBhdGgpOworICAgICAgICAgICAgbmVlZHNUcmFuc2NvZGluZyA9IHRydWU7Cisg
ICAgICAgIH0gZWxzZQorICAgICAgICAgICAgdHJhbnNjb2RpbmdQYXRocy51bmNoZWNrZWRBcHBl
bmQobnVsbFN0cmluZygpKTsKKyAgICB9CisKKyAgICAvLyBJZiBub25lIG9mIHRoZSBmaWxlcyBu
ZWVkcyBpbWFnZSB0cmFuc2NvZGluZywgcmV0dXJuIGFuIGVtcHR5IFZlY3Rvci4KKyAgICByZXR1
cm4gbmVlZHNUcmFuc2NvZGluZyA/IHRyYW5zY29kaW5nUGF0aHMgOiBWZWN0b3I8U3RyaW5nPigp
OworfQorCitWZWN0b3I8U3RyaW5nPiB0cmFuc2NvZGVJbWFnZXMoY29uc3QgVmVjdG9yPFN0cmlu
Zz4mIHBhdGhzLCBjb25zdCBTdHJpbmcmIGRlc3RpbmF0aW9uVVRJLCBjb25zdCBTdHJpbmcmIGRl
c3RpbmF0aW9uRXh0ZW5zaW9uKQoreworICAgIEFTU0VSVCghZGVzdGluYXRpb25VVEkuaXNOdWxs
KCkpOworICAgIEFTU0VSVCghZGVzdGluYXRpb25FeHRlbnNpb24uaXNOdWxsKCkpOworICAgIAor
ICAgIFZlY3RvcjxTdHJpbmc+IHRyYW5zY29kZWRQYXRoczsKKyAgICB0cmFuc2NvZGVkUGF0aHMu
cmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShwYXRocy5zaXplKCkpOworCisgICAgZm9yIChhdXRvJiBw
YXRoIDogcGF0aHMpIHsKKyAgICAgICAgLy8gQXBwZW5kIHRoZSB0cmFuc2NvZGVkIHBhdGggaWYg
dGhlIGltYWdlIG5lZWRzIHRyYW5zY29kaW5nLiBPdGhlcndpc2UgYXBwZW5kIGEgbnVsbCBzdHJp
bmcuCisgICAgICAgIGlmICghcGF0aC5pc051bGwoKSkKKyAgICAgICAgICAgIHRyYW5zY29kZWRQ
YXRocy51bmNoZWNrZWRBcHBlbmQodHJhbnNjb2RlSW1hZ2UocGF0aCwgZGVzdGluYXRpb25VVEks
IGRlc3RpbmF0aW9uRXh0ZW5zaW9uKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHRyYW5z
Y29kZWRQYXRocy51bmNoZWNrZWRBcHBlbmQobnVsbFN0cmluZygpKTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gdHJhbnNjb2RlZFBhdGhzOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4
OiBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L0No
YW5nZUxvZwkocmV2aXNpb24gMjY1Mzk5KQorKysgU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHdv
cmtpbmcgY29weSkKQEAgLTEsMyArMSwyNCBAQAorMjAyMC0wOC0wNyAgU2FpZCBBYm91LUhhbGxh
d2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIFttYWNPU10gRHJhZy9kcm9w
IGFuIGltYWdlIG9mIGEgdW5zdXBwb3J0ZWQgZm9ybWF0IHRvIGFuIGZpbGUgaW5wdXQgZWxlbWVu
dCBzaG91bGQgY29udmVydCBpdCB0byBhIHN1cHBvcnRlZCBmb3JtYXQKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMjQ4MgorICAgICAgICA8cmRhcjov
L3Byb2JsZW0vNjM3MzE2NzI+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCisK
KyAgICAgICAgTW92ZSBJbWFnZVV0aWxpdGllcy5oIGFuZCBJbWFnZVV0aWxpdGllc0NHLmNwcCBm
cm9tIFdlYktpdCB0byBXZWJDb3JlLgorICAgICAgICBVc2UgdGhlIGltYWdlIHRyYW5zY29kaW5n
IGZ1bmN0aW9ucyBhbmQgc2hhcmVkIFdvcmtRdWV1ZSBmcm9tIFdlYkNvcmUuCisKKyAgICAgICAg
KiBQbGF0Zm9ybS9JbWFnZVV0aWxpdGllcy5oOiBSZW1vdmVkLgorICAgICAgICAqIFBsYXRmb3Jt
L2NnOiBSZW1vdmVkLgorICAgICAgICAqIFNvdXJjZXNDb2NvYS50eHQ6CisgICAgICAgICogVUlQ
cm9jZXNzL1dlYlBhZ2VQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6Om1fbGltaXRzTmF2aWdh
dGlvbnNUb0FwcEJvdW5kRG9tYWlucyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6
ZGlkQ2hvb3NlRmlsZXNGb3JPcGVuUGFuZWxXaXRoSW1hZ2VUcmFuc2NvZGluZyk6CisgICAgICAg
IChXZWJLaXQ6Om1fdHJhbnNjb2RpbmdRdWV1ZSk6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9j
ZXNzL1dlYlBhZ2VQcm94eS5oOgorICAgICAgICAqIFdlYktpdC54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qOgorCiAyMDIwLTA4LTA3ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAK
ICAgICAgICAgYmFzZUxhdGVuY3kgYXR0cmlidXRlIGlzIG1pc3Npbmcgb24gQXVkaW9Db250ZXh0
IGludGVyZmFjZQpJbmRleDogU291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dAkocmV2aXNpb24gMjY1Mzk5KQor
KysgU291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0CSh3b3JraW5nIGNvcHkpCkBAIC02NSw4
ICs2NSw2IEBAIEdQVVByb2Nlc3Mvd2VicnRjL0xpYldlYlJUQ0NvZGVjc1Byb3h5Lm0KIAogUGxh
dGZvcm0vY2YvTW9kdWxlQ0YuY3BwCiAKLVBsYXRmb3JtL2NnL0ltYWdlVXRpbGl0aWVzQ0cuY3Bw
Ci0KIFBsYXRmb3JtL2NsYXNzaWZpZXIvY29jb2EvUmVzb3VyY2VMb2FkU3RhdGlzdGljc0NsYXNz
aWZpZXJDb2NvYS5jcHAKIFBsYXRmb3JtL2NsYXNzaWZpZXIvUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0NsYXNzaWZpZXIuY3BwCiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSW1hZ2VVdGls
aXRpZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0ltYWdlVXRpbGl0
aWVzLmgJKHJldmlzaW9uIDI2NTM5OSkKKysrIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSW1hZ2VV
dGlsaXRpZXMuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDQyICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
cHJhZ21hIG9uY2UKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLS8vIEdpdmVuIGEgbGlzdCBvZiBm
aWxlcycgJ3BhdGhzJyBhbmQgJ2FsbG93ZWRNSU1FVHlwZXMnLCB0aGUgZnVuY3Rpb24gcmV0dXJu
cyBhIGxpc3QKLS8vIG9mIHN0cmluZ3Mgd2hvc2Ugc2l6ZSBpcyB0aGUgc2FtZSBhcyB0aGUgc2l6
ZSBvZiAncGF0aHMnIGFuZCBpdHMgZW50cmllcyBhcmUgYWxsCi0vLyBudWxsIHN0cmluZ3MgZXhj
ZXB0IHRoZSBvbmVzIHdob3NlIE1JTUUgdHlwZXMgYXJlIG5vdCBpbiAnYWxsb3dlZE1JTUVUeXBl
cycuCi1WZWN0b3I8U3RyaW5nPiBmaW5kSW1hZ2VzRm9yVHJhbnNjb2RpbmcoY29uc3QgVmVjdG9y
PFN0cmluZz4mIHBhdGhzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYWxsb3dlZE1JTUVUeXBlcyk7
Ci0KLS8vIEdpdmVuIGEgbGlzdCBvZiBpbWFnZXMnICdwYXRocycsIHRoaXMgZnVuY3Rpb24gdHJh
bnNjb2RlcyB0aGVzZSBpbWFnZXMgdG8gYSBuZXcKLS8vIGZvcm1hdCB3aG9zZSBVVEkgaXMgZGVz
dGluYXRpb25VVEkuIFRoZSByZXN1bHQgb2YgdGhlIHRyYW5zY29kaW5nIHdpbGwgYmUgd3JpdHRl
bgotLy8gdG8gdGVtcG9yYXJ5IGZpbGVzIHdob3NlIGV4dGVuc2lvbnMgYXJlICdkZXN0aW5hdGlv
bkV4dGVuc2lvbicuIEl0IHJldHVybnMgYSBsaXN0Ci0vLyBvZiBwYXRocyB0byB0aGUgcmVzdWx0
IHRlbXBvcmFyeSBmaWxlcy4gSWYgYW4gZW50cnkgaW4gJ3BhdGhzJyBpcyBudWxsIG9yIGFuIGVy
cm9yCi0vLyBoYXBwZW5zIHdoaWxlIHRyYW5zY29kaW5nLCBhIG51bGwgc3RyaW5nIHdpbGwgYmUg
YWRkZWQgdG8gdGhlIHJldHVybmVkIGxpc3QuCi1WZWN0b3I8U3RyaW5nPiB0cmFuc2NvZGVJbWFn
ZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhdGhzLCBjb25zdCBTdHJpbmcmIGRlc3RpbmF0aW9u
VVRJLCBjb25zdCBTdHJpbmcmIGRlc3RpbmF0aW9uRXh0ZW5zaW9uKTsKLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lt
YWdlVXRpbGl0aWVzLmgKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fXwpEZWxldGVkOiBzdm46ZW9sLXN0eWxlCiMjIC0xICsw
LDAgIyMKLW5hdGl2ZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L1BsYXRmb3JtL2NnL0ltYWdlVXRpbGl0aWVzQ0cuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vY2cvSW1hZ2VVdGlsaXRpZXNDRy5jcHAJKHJldmlzaW9u
IDI2NTM5OSkKKysrIFNvdXJjZS9XZWJLaXQvUGxhdGZvcm0vY2cvSW1hZ2VVdGlsaXRpZXNDRy5j
cHAJKG5vbmV4aXN0ZW50KQpAQCAtMSwxMjIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJJbWFnZVV0aWxpdGllcy5oIgotCi0jaW5jbHVkZSAiTG9n
Z2luZy5oIgotI2luY2x1ZGUgPEltYWdlSU8vSW1hZ2VJTy5oPgotI2luY2x1ZGUgPFdlYkNvcmUv
TUlNRVR5cGVSZWdpc3RyeS5oPgotI2luY2x1ZGUgPHd0Zi9GaWxlU3lzdGVtLmg+Ci0jaW5jbHVk
ZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotc3RhdGljIFN0
cmluZyB0cmFuc2NvZGVJbWFnZShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0cmluZyYgZGVz
dGluYXRpb25VVEksIGNvbnN0IFN0cmluZyYgZGVzdGluYXRpb25FeHRlbnNpb24pCi17Ci0gICAg
YXV0byBzb3VyY2VVUkwgPSBhZG9wdENGKENGVVJMQ3JlYXRlV2l0aEZpbGVTeXN0ZW1QYXRoKGtD
RkFsbG9jYXRvckRlZmF1bHQsIHBhdGguY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSwga0NGVVJMUE9T
SVhQYXRoU3R5bGUsIGZhbHNlKSk7Ci0gICAgYXV0byBzb3VyY2UgPSBhZG9wdENGKENHSW1hZ2VT
b3VyY2VDcmVhdGVXaXRoVVJMKHNvdXJjZVVSTC5nZXQoKSwgbnVsbHB0cikpOwotICAgIGlmICgh
c291cmNlKQotICAgICAgICByZXR1cm4gbnVsbFN0cmluZygpOwotCi0gICAgYXV0byBzb3VyY2VV
VEkgPSBTdHJpbmcoQ0dJbWFnZVNvdXJjZUdldFR5cGUoc291cmNlLmdldCgpKSk7Ci0gICAgaWYg
KHNvdXJjZVVUSSA9PSBkZXN0aW5hdGlvblVUSSkKLSAgICAgICAgcmV0dXJuIG51bGxTdHJpbmco
KTsKLQotICAgIC8vIEl0IGlzIGltcG9ydGFudCB0byBhZGQgdGhlIGFwcHJvcHJpYXRlIGZpbGUg
ZXh0ZW5zaW9uIHRvIHRoZSB0ZW1wb3JhcnkgZmlsZSBwYXRoLgotICAgIC8vIFRoZSBGaWxlIG9i
amVjdCBkZXBlbmRzIHNvbGVseSBvbiB0aGUgZXh0ZW5zaW9uIHRvIGtub3cgdGhlIE1JTUUgdHlw
ZSBvZiB0aGUgZmlsZS4KLSAgICBhdXRvIHN1ZmZpeCA9IG1ha2VTdHJpbmcoJy4nLCBkZXN0aW5h
dGlvbkV4dGVuc2lvbik7Ci0KLSAgICBGaWxlU3lzdGVtOjpQbGF0Zm9ybUZpbGVIYW5kbGUgZGVz
dGluYXRpb25GaWxlSGFuZGxlOwotICAgIFN0cmluZyBkZXN0aW5hdGlvblBhdGggPSBGaWxlU3lz
dGVtOjpvcGVuVGVtcG9yYXJ5RmlsZSgidGVtcEltYWdlIl9zLCBkZXN0aW5hdGlvbkZpbGVIYW5k
bGUsIHN1ZmZpeCk7Ci0gICAgaWYgKGRlc3RpbmF0aW9uRmlsZUhhbmRsZSA9PSBGaWxlU3lzdGVt
OjppbnZhbGlkUGxhdGZvcm1GaWxlSGFuZGxlKSB7Ci0gICAgICAgIFJFTEVBU0VfTE9HX0VSUk9S
KEltYWdlcywgInRyYW5zY29kZUltYWdlOiBEZXN0aW5hdGlvbiBpbWFnZSBjb3VsZCBub3QgYmUg
Y3JlYXRlZDogJXMgJXNcbiIsIHBhdGgudXRmOCgpLmRhdGEoKSwgZGVzdGluYXRpb25VVEkudXRm
OCgpLmRhdGEoKSk7Ci0gICAgICAgIHJldHVybiBudWxsU3RyaW5nKCk7Ci0gICAgfQotCi0gICAg
Q0dEYXRhQ29uc3VtZXJDYWxsYmFja3MgY2FsbGJhY2tzID0gewotICAgICAgICBbXSh2b2lkKiBp
bmZvLCBjb25zdCB2b2lkKiBidWZmZXIsIHNpemVfdCBjb3VudCkgLT4gc2l6ZV90IHsKLSAgICAg
ICAgICAgIGF1dG8gaGFuZGxlID0gKnN0YXRpY19jYXN0PEZpbGVTeXN0ZW06OlBsYXRmb3JtRmls
ZUhhbmRsZSo+KGluZm8pOwotICAgICAgICAgICAgcmV0dXJuIEZpbGVTeXN0ZW06OndyaXRlVG9G
aWxlKGhhbmRsZSwgc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KGJ1ZmZlciksIGNvdW50KTsKLSAg
ICAgICAgfSwKLSAgICAgICAgbnVsbHB0cgotICAgIH07Ci0KLSAgICBhdXRvIGNvbnN1bWVyID0g
YWRvcHRDRihDR0RhdGFDb25zdW1lckNyZWF0ZSgmZGVzdGluYXRpb25GaWxlSGFuZGxlLCAmY2Fs
bGJhY2tzKSk7Ci0gICAgYXV0byBkZXN0aW5hdGlvbiA9IGFkb3B0Q0YoQ0dJbWFnZURlc3RpbmF0
aW9uQ3JlYXRlV2l0aERhdGFDb25zdW1lcihjb25zdW1lci5nZXQoKSwgZGVzdGluYXRpb25VVEku
Y3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSwgMSwgbnVsbHB0cikpOwotCi0gICAgQ0dJbWFnZURlc3Rp
bmF0aW9uQWRkSW1hZ2VGcm9tU291cmNlKGRlc3RpbmF0aW9uLmdldCgpLCBzb3VyY2UuZ2V0KCks
IDAsIG51bGxwdHIpOwotCi0gICAgaWYgKCFDR0ltYWdlRGVzdGluYXRpb25GaW5hbGl6ZShkZXN0
aW5hdGlvbi5nZXQoKSkpIHsKLSAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoSW1hZ2VzLCAidHJh
bnNjb2RlSW1hZ2U6IEltYWdlIHRyYW5zY29kaW5nIGZhaWxzOiAlcyAlc1xuIiwgcGF0aC51dGY4
KCkuZGF0YSgpLCBkZXN0aW5hdGlvblVUSS51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgRmlsZVN5
c3RlbTo6Y2xvc2VGaWxlKGRlc3RpbmF0aW9uRmlsZUhhbmRsZSk7Ci0gICAgICAgIEZpbGVTeXN0
ZW06OmRlbGV0ZUZpbGUoZGVzdGluYXRpb25QYXRoKTsKLSAgICAgICAgcmV0dXJuIG51bGxTdHJp
bmcoKTsKLSAgICB9Ci0KLSAgICBGaWxlU3lzdGVtOjpjbG9zZUZpbGUoZGVzdGluYXRpb25GaWxl
SGFuZGxlKTsKLSAgICByZXR1cm4gZGVzdGluYXRpb25QYXRoOwotfQotCi1WZWN0b3I8U3RyaW5n
PiBmaW5kSW1hZ2VzRm9yVHJhbnNjb2RpbmcoY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhdGhzLCBj
b25zdCBWZWN0b3I8U3RyaW5nPiYgYWxsb3dlZE1JTUVUeXBlcykKLXsKLSAgICBWZWN0b3I8U3Ry
aW5nPiB0cmFuc2NvZGluZ1BhdGhzOwotICAgIHRyYW5zY29kaW5nUGF0aHMucmVzZXJ2ZUluaXRp
YWxDYXBhY2l0eShwYXRocy5zaXplKCkpOwotCi0gICAgYm9vbCBuZWVkc1RyYW5zY29kaW5nID0g
ZmFsc2U7Ci0KLSAgICBmb3IgKGF1dG8mIHBhdGggOiBwYXRocykgewotICAgICAgICAvLyBBcHBl
bmQgYSBwYXRoIG9mIHRoZSBpbWFnZSB3aGljaCBuZWVkcyB0cmFuc2NvZGluZy4gT3RoZXJ3aXNl
IGFwcGVuZCBhIG51bGwgc3RyaW5nLgotICAgICAgICBpZiAoIWFsbG93ZWRNSU1FVHlwZXMuY29u
dGFpbnMoV2ViQ29yZTo6TUlNRVR5cGVSZWdpc3RyeTo6bWltZVR5cGVGb3JQYXRoKHBhdGgpKSkg
ewotICAgICAgICAgICAgdHJhbnNjb2RpbmdQYXRocy51bmNoZWNrZWRBcHBlbmQocGF0aCk7Ci0g
ICAgICAgICAgICBuZWVkc1RyYW5zY29kaW5nID0gdHJ1ZTsKLSAgICAgICAgfSBlbHNlCi0gICAg
ICAgICAgICB0cmFuc2NvZGluZ1BhdGhzLnVuY2hlY2tlZEFwcGVuZChudWxsU3RyaW5nKCkpOwot
ICAgIH0KLQotICAgIC8vIElmIG5vbmUgb2YgdGhlIGZpbGVzIG5lZWRzIGltYWdlIHRyYW5zY29k
aW5nLCByZXR1cm4gYW4gZW1wdHkgVmVjdG9yLgotICAgIHJldHVybiBuZWVkc1RyYW5zY29kaW5n
ID8gdHJhbnNjb2RpbmdQYXRocyA6IFZlY3RvcjxTdHJpbmc+KCk7Ci19Ci0KLVZlY3RvcjxTdHJp
bmc+IHRyYW5zY29kZUltYWdlcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGF0aHMsIGNvbnN0IFN0
cmluZyYgZGVzdGluYXRpb25VVEksIGNvbnN0IFN0cmluZyYgZGVzdGluYXRpb25FeHRlbnNpb24p
Ci17Ci0gICAgQVNTRVJUKCFkZXN0aW5hdGlvblVUSS5pc051bGwoKSk7Ci0gICAgQVNTRVJUKCFk
ZXN0aW5hdGlvbkV4dGVuc2lvbi5pc051bGwoKSk7Ci0gICAgCi0gICAgVmVjdG9yPFN0cmluZz4g
dHJhbnNjb2RlZFBhdGhzOwotICAgIHRyYW5zY29kZWRQYXRocy5yZXNlcnZlSW5pdGlhbENhcGFj
aXR5KHBhdGhzLnNpemUoKSk7Ci0KLSAgICBmb3IgKGF1dG8mIHBhdGggOiBwYXRocykgewotICAg
ICAgICAvLyBBcHBlbmQgdGhlIHRyYW5zY29kZWQgcGF0aCBpZiB0aGUgaW1hZ2UgbmVlZHMgdHJh
bnNjb2RpbmcuIE90aGVyd2lzZSBhcHBlbmQgYSBudWxsIHN0cmluZy4KLSAgICAgICAgaWYgKCFw
YXRoLmlzTnVsbCgpKQotICAgICAgICAgICAgdHJhbnNjb2RlZFBhdGhzLnVuY2hlY2tlZEFwcGVu
ZCh0cmFuc2NvZGVJbWFnZShwYXRoLCBkZXN0aW5hdGlvblVUSSwgZGVzdGluYXRpb25FeHRlbnNp
b24pKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgdHJhbnNjb2RlZFBhdGhzLnVuY2hlY2tl
ZEFwcGVuZChudWxsU3RyaW5nKCkpOwotICAgIH0KLQotICAgIHJldHVybiB0cmFuc2NvZGVkUGF0
aHM7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvV2ViUGFnZVByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJQYWdlUHJveHkuY3BwCShyZXZpc2lvbiAyNjUzOTkpCisrKyBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTcsNyArMjE3
LDcgQEAKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oTUFDKQotI2luY2x1ZGUgIkltYWdlVXRpbGl0
aWVzLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9JbWFnZVV0aWxpdGllcy5oPgogI2luY2x1ZGUgPFdl
YkNvcmUvVVRJVXRpbGl0aWVzLmg+CiAjZW5kaWYKIApAQCAtNDkyLDkgKzQ5Miw2IEBAIFdlYlBh
Z2VQcm94eTo6V2ViUGFnZVByb3h5KFBhZ2VDbGllbnQmIHAKICAgICAsIG1faWdub3Jlc0FwcEJv
dW5kRG9tYWlucyhtX2NvbmZpZ3VyYXRpb24tPmlnbm9yZXNBcHBCb3VuZERvbWFpbnMoKSkKICAg
ICAsIG1fbGltaXRzTmF2aWdhdGlvbnNUb0FwcEJvdW5kRG9tYWlucyhtX2NvbmZpZ3VyYXRpb24t
PmxpbWl0c05hdmlnYXRpb25zVG9BcHBCb3VuZERvbWFpbnMoKSkKICNlbmRpZgotI2lmIFBMQVRG
T1JNKE1BQykKLSAgICAsIG1fdHJhbnNjb2RpbmdRdWV1ZShXb3JrUXVldWU6OmNyZWF0ZSgiY29t
LmFwcGxlLldlYktpdC5JbWFnZVRyYW5zY29kaW5nIikpCi0jZW5kaWYKIHsKICAgICBSRUxFQVNF
X0xPR19JRl9BTExPV0VEKExvYWRpbmcsICJjb25zdHJ1Y3RvcjoiKTsKIApAQCAtNjY4Myw3ICs2
NjgwLDcgQEAgYm9vbCBXZWJQYWdlUHJveHk6OmRpZENob29zZUZpbGVzRm9yT3BlbgogICAgIGF1
dG8gdHJhbnNjb2RpbmdVVEkgPSBXZWJDb3JlOjpVVElGcm9tTUlNRVR5cGUodHJhbnNjb2RpbmdN
SU1FVHlwZSk7CiAgICAgYXV0byB0cmFuc2NvZGluZ0V4dGVuc2lvbiA9IFdlYkNvcmU6Ok1JTUVU
eXBlUmVnaXN0cnk6OnByZWZlcnJlZEV4dGVuc2lvbkZvck1JTUVUeXBlKHRyYW5zY29kaW5nTUlN
RVR5cGUpOwogCi0gICAgbV90cmFuc2NvZGluZ1F1ZXVlLT5kaXNwYXRjaChbdGhpcywgcHJvdGVj
dGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBmaWxlVVJMcyA9IGZpbGVVUkxzLmlzb2xhdGVkQ29w
eSgpLCB0cmFuc2NvZGluZ1VSTHMgPSB0cmFuc2NvZGluZ1VSTHMuaXNvbGF0ZWRDb3B5KCksIHRy
YW5zY29kaW5nVVRJID0gdHJhbnNjb2RpbmdVVEkuaXNvbGF0ZWRDb3B5KCksIHRyYW5zY29kaW5n
RXh0ZW5zaW9uID0gdHJhbnNjb2RpbmdFeHRlbnNpb24uaXNvbGF0ZWRDb3B5KCldKCkgbXV0YWJs
ZSB7CisgICAgc2hhcmVkSW1hZ2VUcmFuc2NvZGluZ1F1ZXVlKCkuZGlzcGF0Y2goW3RoaXMsIHBy
b3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgZmlsZVVSTHMgPSBmaWxlVVJMcy5pc29sYXRl
ZENvcHkoKSwgdHJhbnNjb2RpbmdVUkxzID0gdHJhbnNjb2RpbmdVUkxzLmlzb2xhdGVkQ29weSgp
LCB0cmFuc2NvZGluZ1VUSSA9IHRyYW5zY29kaW5nVVRJLmlzb2xhdGVkQ29weSgpLCB0cmFuc2Nv
ZGluZ0V4dGVuc2lvbiA9IHRyYW5zY29kaW5nRXh0ZW5zaW9uLmlzb2xhdGVkQ29weSgpXSgpIG11
dGFibGUgewogICAgICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKIAogICAgICAgICBh
dXRvIHRyYW5zY29kZWRVUkxzID0gdHJhbnNjb2RlSW1hZ2VzKHRyYW5zY29kaW5nVVJMcywgdHJh
bnNjb2RpbmdVVEksIHRyYW5zY29kaW5nRXh0ZW5zaW9uKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL1dlYlBhZ2VQcm94eS5oCShyZXZpc2lvbiAyNjUzOTkpCisrKyBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtMjg1MCw5ICsyODUw
LDYgQEAgcHJpdmF0ZToKICAgICBib29sIG1fdXNlclNjcmlwdHNOb3RpZmllZCB7IGZhbHNlIH07
CiAgICAgYm9vbCBtX2xpbWl0c05hdmlnYXRpb25zVG9BcHBCb3VuZERvbWFpbnMgeyBmYWxzZSB9
OwogICAgIGJvb2wgbV9oYXNFeGVjdXRlZEFwcEJvdW5kQmVoYXZpb3JCZWZvcmVOYXZpZ2F0aW9u
IHsgZmFsc2UgfTsKLSNpZiBQTEFURk9STShNQUMpCi0gICAgUmVmPFdvcmtRdWV1ZT4gbV90cmFu
c2NvZGluZ1F1ZXVlOwotI2VuZGlmCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2
aXNpb24gMjY1Mzk5KQorKysgU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjkwLDcgKzI5MCw2IEBACiAJCTFBOUZCQThEMTNG
RjA0RTYwMERFRUQ2NyAvKiBQbHVnaW5Db21wbGV4VGV4dElucHV0U3RhdGUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBOUZCQThDMTNGRjA0RTYwMERF
RUQ2NyAvKiBQbHVnaW5Db21wbGV4VGV4dElucHV0U3RhdGUuaCAqLzsgfTsKIAkJMUFBMTMyMTIx
OTFENTkyNDAwOUMxNDg5IC8qIFdLTmF2aWdhdGlvblJlc3BvbnNlUHJpdmF0ZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFBMTMyMTExOTFENTkyNDAw
OUMxNDg5IC8qIFdLTmF2aWdhdGlvblJlc3BvbnNlUHJpdmF0ZS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTFBQTIwRDUxMThBRDUwRTAwMDVEMUVE
NCAvKiBXS05hdmlnYXRpb25EZWxlZ2F0ZVByaXZhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBQTIwRDUwMThBRDUwRTAwMDVEMUVENCAvKiBXS05h
dmlnYXRpb25EZWxlZ2F0ZVByaXZhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwotCQkxQUEyRTUxRDEyRTRDMDVFMDBCQzQ5NjYgLyogSW1hZ2VVdGls
aXRpZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFB
QTJFNTFCMTJFNEMwNUUwMEJDNDk2NiAvKiBJbWFnZVV0aWxpdGllcy5oICovOyB9OwogCQkxQUEy
RTU2NzE4RDc3NTA4MDAzODE0QkQgLyogV0tXZWJQcm9jZXNzQnVuZGxlUGFyYW1ldGVycy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFBMkU1NjUxOEQ3
NzUwODAwMzgxNEJEIC8qIFdLV2ViUHJvY2Vzc0J1bmRsZVBhcmFtZXRlcnMuaCAqLzsgfTsKIAkJ
MUFBM0Q3NUMxNjUxQjQ0RjAwODcxM0QwIC8qIFJlbW90ZUxheWVyVHJlZUhvc3QuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBQTNENzVBMTY1MUI0NEYw
MDg3MTNEMCAvKiBSZW1vdGVMYXllclRyZWVIb3N0LmggKi87IH07CiAJCTFBQTQxN0NCMTJDMDBD
Q0EwMDJCRTY3QiAvKiBUZXh0Q2hlY2tlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMUFBNDE3QzkxMkMwMENDQTAwMkJFNjdCIC8qIFRleHRDaGVja2Vy
LmggKi87IH07CkBAIC0yNTE2LDggKzI1MTUsNiBAQAogCQkxQUExQ0M1QzEwMEZBMUExMDA3OERF
QkMgLyogUXVhcnR6Q29yZS5mcmFtZXdvcmsgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSB3cmFwcGVyLmZyYW1ld29yazsgbmFtZSA9IFF1YXJ0ekNvcmUu
ZnJhbWV3b3JrOyBwYXRoID0gL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvUXVhcnR6Q29yZS5m
cmFtZXdvcms7IHNvdXJjZVRyZWUgPSAiPGFic29sdXRlPiI7IH07CiAJCTFBQTFDRDA2MTAwRkEx
QkEwMDc4REVCQyAvKiBDYXJib24uZnJhbWV3b3JrICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gd3JhcHBlci5mcmFtZXdvcms7IG5hbWUgPSBDYXJib24u
ZnJhbWV3b3JrOyBwYXRoID0gL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3MvQ2FyYm9uLmZyYW1l
d29yazsgc291cmNlVHJlZSA9ICI8YWJzb2x1dGU+IjsgfTsKIAkJMUFBMjBENTAxOEFENTBFMDAw
NUQxRUQ0IC8qIFdLTmF2aWdhdGlvbkRlbGVnYXRlUHJpdmF0ZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXS05hdmlnYXRpb25EZWxlZ2F0ZVByaXZhdGUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUFBMkU1MUIxMkU0QzA1RTAwQkM0OTY2IC8qIEltYWdlVXRp
bGl0aWVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlVXRpbGl0aWVz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFBQTJFNTFDMTJFNEMwNUUwMEJDNDk2
NiAvKiBJbWFnZVV0aWxpdGllc0NHLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEltYWdlVXRpbGl0aWVzQ0cuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkxQUEyRTU2NDE4RDc3NTA4MDAzODE0QkQgLyogV0tXZWJQcm9jZXNzQnVuZGxlUGFyYW1ldGVy
cy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdLV2ViUHJvY2Vz
c0J1bmRsZVBhcmFtZXRlcnMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBQTJF
NTY1MThENzc1MDgwMDM4MTRCRCAvKiBXS1dlYlByb2Nlc3NCdW5kbGVQYXJhbWV0ZXJzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLV2ViUHJvY2Vzc0J1bmRsZVBhcmFtZXRl
cnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUFBM0Q3NTkxNjUxQjQ0RjAwODcx
M0QwIC8qIFJlbW90ZUxheWVyVHJlZUhvc3QubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5v
YmpjcHA7IHBhdGggPSBSZW1vdGVMYXllclRyZWVIb3N0Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtNTk2MCwxNCArNTk1Nyw2IEBACiAJCQlwYXRoID0gbWFjOwogCQkJc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKLQkJMUFBMkU1MUExMkU0QzA1NjAwQkM0OTY2IC8qIGNn
ICovID0gewotCQkJaXNhID0gUEJYR3JvdXA7Ci0JCQljaGlsZHJlbiA9ICgKLQkJCQkxQUEyRTUx
QzEyRTRDMDVFMDBCQzQ5NjYgLyogSW1hZ2VVdGlsaXRpZXNDRy5jcHAgKi8sCi0JCQkpOwotCQkJ
cGF0aCA9IGNnOwotCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKLQkJfTsKIAkJMUFBQzREREUx
NkIxQ0JGNjAwOTQyNUUzIC8qIFdlYlN0b3JhZ2UgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsK
IAkJCWNoaWxkcmVuID0gKApAQCAtOTU4OCw3ICs5NTc3LDYgQEAKIAkJCWlzYSA9IFBCWEdyb3Vw
OwogCQkJY2hpbGRyZW4gPSAoCiAJCQkJMzcwOTUwNDExOEE4OEJBNDAwODdBRTVEIC8qIGNmICov
LAotCQkJCTFBQTJFNTFBMTJFNEMwNTYwMEJDNDk2NiAvKiBjZyAqLywKIAkJCQk2QkU5NjlDMjFF
NTRENDY3MDA4Qjc0ODMgLyogY2xhc3NpZmllciAqLywKIAkJCQk0NDUwQUVCRTFEQzNGQUFDMDA5
OTQzRjIgLyogY29jb2EgKi8sCiAJCQkJMzcwOTUwNDIxOEE4OENERTAwODdBRTVEIC8qIGZvdW5k
YXRpb24gKi8sCkBAIC05NTk5LDcgKzk1ODcsNiBAQAogCQkJCTUxQjE1QTdEMTM4NDM5QjIwMDMy
MUFEOCAvKiB1bml4ICovLAogCQkJCUVDQTY4MEQzMUU2OTA0QjUwMDczMUQyMCAvKiBFeHRyYVBy
aXZhdGVTeW1ib2xzRm9yVEFQSS5oICovLAogCQkJCUVDQkZDMURCMUU2QTRENjYwMDAzMDBDNyAv
KiBFeHRyYVB1YmxpY1N5bWJvbHNGb3JUQVBJLmggKi8sCi0JCQkJMUFBMkU1MUIxMkU0QzA1RTAw
QkM0OTY2IC8qIEltYWdlVXRpbGl0aWVzLmggKi8sCiAJCQkJNTFBN0YyRjQxMjVCRjhENDAwOEFF
QjFEIC8qIExvZ2dpbmcuY3BwICovLAogCQkJCTUxQTdGMkYyMTI1QkY4MjAwMDhBRUIxRCAvKiBM
b2dnaW5nLmggKi8sCiAJCQkJMEZEQ0Q3RjYxRDQ3RTkyQTAwOUYwOEJDIC8qIExvZ0luaXRpYWxp
emF0aW9uLmggKi8sCkBAIC0xMDg2NSw3ICsxMDg1Miw2IEBACiAJCQkJNTFDMEM5NzQxRERENzYw
MDAwMzJDQUQzIC8qIEljb25Mb2FkaW5nRGVsZWdhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTUx
RTM1MUNCMTgwRjJDQ0MwMEU1M0JFOSAvKiBJREJVdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovLAog
CQkJCUJDQ0Y2QjI1MTJDOTNFN0EwMDhGOUMzNSAvKiBJbWFnZU9wdGlvbnMuaCBpbiBIZWFkZXJz
ICovLAotCQkJCTFBQTJFNTFEMTJFNEMwNUUwMEJDNDk2NiAvKiBJbWFnZVV0aWxpdGllcy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMUExRUM2OUUxODcyMDkyMTAwQjk1MUYwIC8qIEltcG9ydGFuY2VB
c3NlcnRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMjA0RUUzMTFDODNFOTgwMDhGMzM3NSAv
KiBJbmplY3RlZEJ1bmRsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNFRTdEQzUxMjhCNjQ1RDAw
OTgyN0RBIC8qIEluamVjdGVkQnVuZGxlQ2xpZW50LmggaW4gSGVhZGVycyAqLywKSW5kZXg6IExh
eW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDI2NTM5OSkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDIzIEBACisyMDIwLTA4LTA3ICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhYm91
aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgW21hY09TXSBEcmFnL2Ryb3AgYW4gaW1hZ2Ug
b2YgYSB1bnN1cHBvcnRlZCBmb3JtYXQgdG8gYW4gZmlsZSBpbnB1dCBlbGVtZW50IHNob3VsZCBj
b252ZXJ0IGl0IHRvIGEgc3VwcG9ydGVkIGZvcm1hdAorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEyNDgyCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS82
MzczMTY3Mj4KKworICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KKworICAgICAgICBF
bmFibGUgdGhlIG5ldyB0ZXN0cyBvbiBtYWNPUyBXSzEuIGV2ZW50U2VuZGVyLmJlZ2luRHJhZ1dp
dGhGaWxlcyBpcworICAgICAgICBzdXBwb3J0ZWQgb24gV0sxIG9ubHkuCisKKyAgICAgICAgKiBm
YXN0L2Zvcm1zL2ZpbGUvZW50cmllcy1hcGkvaW1hZ2Utbm8tdHJhbnNjb2RlLWRyYWctZHJvcC1l
eHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZm9ybXMvZmlsZS9lbnRyaWVzLWFw
aS9pbWFnZS1uby10cmFuc2NvZGUtZHJhZy1kcm9wLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZh
c3QvZm9ybXMvZmlsZS9lbnRyaWVzLWFwaS9pbWFnZS10cmFuc2NvZGUtZHJhZy1kcm9wLWV4cGVj
dGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9mb3Jtcy9maWxlL2VudHJpZXMtYXBpL2lt
YWdlLXRyYW5zY29kZS1kcmFnLWRyb3AuaHRtbDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0v
aW9zL1Rlc3RFeHBlY3RhdGlvbnM6CisgICAgICAgICogcGxhdGZvcm0vd2luL1Rlc3RFeHBlY3Rh
dGlvbnM6CisgICAgICAgICogcGxhdGZvcm0vd2luY2Fpcm8vVGVzdEV4cGVjdGF0aW9uczoKKyAg
ICAgICAgKiBwbGF0Zm9ybS93azIvVGVzdEV4cGVjdGF0aW9uczoKKwogMjAyMC0wOC0wNyAgSGVj
dG9yIExvcGV6ICA8aGVjdG9yX2lfbG9wZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFsgbWFjT1Mg
d2sxIF0gaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9jc3MvY3NzLWxvZ2ljYWwvcGFy
c2luZy9tYXJnaW4tYmxvY2staW5saW5lLWNvbXB1dGVkLmh0bWwgaXMgYSBmbGFreSBmYWlsdXJl
CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2ZpbGUvZW50cmllcy1hcGkvaW1hZ2Utbm8t
dHJhbnNjb2RlLWRyYWctZHJvcC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvZmFzdC9mb3Jtcy9maWxlL2VudHJpZXMtYXBpL2ltYWdlLW5vLXRyYW5zY29kZS1kcmFnLWRy
b3AtZXhwZWN0ZWQudHh0CShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL2Zhc3QvZm9ybXMv
ZmlsZS9lbnRyaWVzLWFwaS9pbWFnZS1uby10cmFuc2NvZGUtZHJhZy1kcm9wLWV4cGVjdGVkLnR4
dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE1IEBACitUZXN0cyBhIEhFSUMgaW1hZ2Ugd2ls
bCBub3QgYmUgY29udmVydGVkIHRvIGFueSBzdXBwb3J0ZWQgTUlNRSB0eXBlIHdoZW4gaXQgaXMg
ZHJhZ2dlZCBhbmQgZHJvcHBlZCB0byBhIGZpbGUgaW5wdXQgZWxlbWVudCB3aGljaCBhY2NlcHRz
IEhFSUMuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVz
c2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIGZpbGVMaXN0Lmxl
bmd0aCBpcyAxCitQQVNTIGZpbGUudHlwZSBpcyAiaW1hZ2UvaGVpYyIKK1BBU1MgZmlsZS5zaXpl
IGlzIG5vbi16ZXJvLgorSW1hZ2UgY291bGQgbm90IGJlIGxvYWRlZC4KK1BBU1MgaW1nLndpZHRo
IGlzIG5vdCA0MDAKK1BBU1MgaW1nLmhlaWdodCBpcyBub3QgNDAwCitQQVNTIHN1Y2Nlc3NmdWxs
eVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKyAgCkluZGV4OiBMYXlvdXRUZXN0cy9m
YXN0L2Zvcm1zL2ZpbGUvZW50cmllcy1hcGkvaW1hZ2Utbm8tdHJhbnNjb2RlLWRyYWctZHJvcC5o
dG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZm9ybXMvZmlsZS9lbnRyaWVzLWFw
aS9pbWFnZS1uby10cmFuc2NvZGUtZHJhZy1kcm9wLmh0bWwJKG5vbmV4aXN0ZW50KQorKysgTGF5
b3V0VGVzdHMvZmFzdC9mb3Jtcy9maWxlL2VudHJpZXMtYXBpL2ltYWdlLW5vLXRyYW5zY29kZS1k
cmFnLWRyb3AuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYyIEBACis8IURPQ1RZUEUg
aHRtbD4KKzxodG1sPgorPGhlYWQ+CisgICAgPHNjcmlwdCBzcmM9Ii4uLy4uLy4uLy4uL3Jlc291
cmNlcy9qcy10ZXN0LmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iLi4vLi4vLi4vLi4v
cmVzb3VyY2VzL3VpLWhlbHBlci5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKyAgICA8
aW5wdXQgdHlwZT0iZmlsZSIgYWNjZXB0PSJJTUFHRS9IRUlDIiBvbmNoYW5nZT0iY2hhbmdlZChl
dmVudCkiPjwvaW5wdXQ+CisgICAgPHNjcmlwdD4KKyAgICAgICAgZGVzY3JpcHRpb24oIlRlc3Rz
IGEgSEVJQyBpbWFnZSB3aWxsIG5vdCBiZSBjb252ZXJ0ZWQgdG8gYW55IHN1cHBvcnRlZCBNSU1F
IHR5cGUgd2hlbiBpdCBpcyBkcmFnZ2VkIGFuZCBkcm9wcGVkIHRvIGEgZmlsZSBpbnB1dCBlbGVt
ZW50IHdoaWNoIGFjY2VwdHMgSEVJQy4iKTsKKyAgICAgICAganNUZXN0SXNBc3luYyA9IHRydWU7
CisKKyAgICAgICAgZnVuY3Rpb24gcnVuVGVzdCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlm
ICghd2luZG93LmV2ZW50U2VuZGVyIHx8ICFldmVudFNlbmRlci5iZWdpbkRyYWdXaXRoRmlsZXMp
IHsKKyAgICAgICAgICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKKyAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHZhciBlbGVtZW50ID0gZG9jdW1lbnQu
Z2V0RWxlbWVudHNCeVRhZ05hbWUoJ2lucHV0JylbMF07CisgICAgICAgICAgICB2YXIgY2VudGVy
WCA9IGVsZW1lbnQub2Zmc2V0TGVmdCArIGVsZW1lbnQub2Zmc2V0V2lkdGggLyAyOworICAgICAg
ICAgICAgdmFyIGNlbnRlclkgPSBlbGVtZW50Lm9mZnNldFRvcCArIGVsZW1lbnQub2Zmc2V0SGVp
Z2h0IC8gMjsKKworICAgICAgICAgICAgZXZlbnRTZW5kZXIuYmVnaW5EcmFnV2l0aEZpbGVzKFsi
cmVzb3VyY2VzL2ltYWdlcy9ncmVlbi00MDB4NDAwLmhlaWMiXSk7CisgICAgICAgICAgICBldmVu
dFNlbmRlci5tb3VzZU1vdmVUbyhjZW50ZXJYLCBjZW50ZXJZKTsKKyAgICAgICAgICAgIGV2ZW50
U2VuZGVyLm1vdXNlVXAoKTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIGNoYW5nZWQo
ZXZlbnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZpbGVMaXN0ID0gZXZlbnQudGFyZ2V0LmZp
bGVzOworICAgICAgICAgICAgc2hvdWxkQmUoImZpbGVMaXN0Lmxlbmd0aCIsICIxIik7CisKKyAg
ICAgICAgICAgIGZpbGUgPSBmaWxlTGlzdFswXTsKKyAgICAgICAgICAgIHNob3VsZEJlRXF1YWxU
b1N0cmluZygiZmlsZS50eXBlIiwgImltYWdlL2hlaWMiKTsKKyAgICAgICAgICAgIHNob3VsZEJl
Tm9uWmVybygiZmlsZS5zaXplIik7CisKKyAgICAgICAgICAgIGltZyA9IGRvY3VtZW50LmNyZWF0
ZUVsZW1lbnQoImltZyIpOworICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChp
bWcpOworCisgICAgICAgICAgICB2YXIgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTsKKyAgICAg
ICAgICAgIHJlYWRlci5vbmxvYWQgPSAoKSA9PiB7CisgICAgICAgICAgICAgICAgaW1nLm9ubG9h
ZCA9ICgpID0+IHsKKyAgICAgICAgICAgICAgICAgICAgZGVidWcoIkltYWdlIHdhcyBsb2FkZWQu
Iik7CisgICAgICAgICAgICAgICAgICAgIHNob3VsZEJlKCJpbWcud2lkdGgiLCAiNDAwIik7Cisg
ICAgICAgICAgICAgICAgICAgIHNob3VsZEJlKCJpbWcuaGVpZ2h0IiwgIjQwMCIpOworICAgICAg
ICAgICAgICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKKyAgICAgICAgICAgICAgICB9OworICAgICAg
ICAgICAgICAgIGltZy5vbmVycm9yID0gKCkgPT4geworICAgICAgICAgICAgICAgICAgICBkZWJ1
ZygiSW1hZ2UgY291bGQgbm90IGJlIGxvYWRlZC4iKTsKKyAgICAgICAgICAgICAgICAgICAgc2hv
dWxkTm90QmUoImltZy53aWR0aCIsICI0MDAiKTsKKyAgICAgICAgICAgICAgICAgICAgc2hvdWxk
Tm90QmUoImltZy5oZWlnaHQiLCAiNDAwIik7CisgICAgICAgICAgICAgICAgICAgIGZpbmlzaEpT
VGVzdCgpOworICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgaW1nLnNyYyA9IHJl
YWRlci5yZXN1bHQ7CisgICAgICAgICAgICB9OworICAgICAgICAgICAgcmVhZGVyLnJlYWRBc0Rh
dGFVUkwoZmlsZSk7CisgICAgICAgIH0KKyAgICAgICAgcnVuVGVzdCgpOworICAgIDwvc2NyaXB0
PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9maWxlL2Vu
dHJpZXMtYXBpL2ltYWdlLXRyYW5zY29kZS1kcmFnLWRyb3AtZXhwZWN0ZWQudHh0Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZm9ybXMvZmlsZS9lbnRyaWVzLWFwaS9pbWFnZS10cmFu
c2NvZGUtZHJhZy1kcm9wLWV4cGVjdGVkLnR4dAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0
cy9mYXN0L2Zvcm1zL2ZpbGUvZW50cmllcy1hcGkvaW1hZ2UtdHJhbnNjb2RlLWRyYWctZHJvcC1l
eHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNSBAQAorVGVzdHMgYSBIRUlD
IGltYWdlIHdpbGwgYmUgY29udmVydGVkIHRvIGEgUE5HIGltYWdlIHdoZW4gaXQgaXMgZHJhZ2dl
ZCBhbmQgZHJvcHBlZCB0byBhIGZpbGUgaW5wdXQgZWxlbWVudCB3aGljaCBhY2NlcHRzIFBORy4K
KworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywg
Zm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1MgZmlsZUxpc3QubGVuZ3RoIGlz
IDEKK1BBU1MgZmlsZS50eXBlIGlzICJpbWFnZS9wbmciCitQQVNTIGZpbGUuc2l6ZSBpcyBub24t
emVyby4KK0ltYWdlIHdhcyBsb2FkZWQuCitQQVNTIGltZy53aWR0aCBpcyA0MDAKK1BBU1MgaW1n
LmhlaWdodCBpcyA0MDAKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBD
T01QTEVURQorICAKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZm9ybXMvZmlsZS9lbnRyaWVzLWFw
aS9pbWFnZS10cmFuc2NvZGUtZHJhZy1kcm9wLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvZmFzdC9mb3Jtcy9maWxlL2VudHJpZXMtYXBpL2ltYWdlLXRyYW5zY29kZS1kcmFnLWRyb3Au
aHRtbAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2ZpbGUvZW50cmll
cy1hcGkvaW1hZ2UtdHJhbnNjb2RlLWRyYWctZHJvcC5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNjIgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKyAgICA8c2NyaXB0
IHNyYz0iLi4vLi4vLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QuanMiPjwvc2NyaXB0PgorICAgIDxz
Y3JpcHQgc3JjPSIuLi8uLi8uLi8uLi9yZXNvdXJjZXMvdWktaGVscGVyLmpzIj48L3NjcmlwdD4K
KzwvaGVhZD4KKzxib2R5PgorICAgIDxpbnB1dCB0eXBlPSJmaWxlIiBhY2NlcHQ9Ii5wbmciIG9u
Y2hhbmdlPSJjaGFuZ2VkKGV2ZW50KSI+PC9pbnB1dD4KKyAgICA8c2NyaXB0PgorICAgICAgICBk
ZXNjcmlwdGlvbigiVGVzdHMgYSBIRUlDIGltYWdlIHdpbGwgYmUgY29udmVydGVkIHRvIGEgUE5H
IGltYWdlIHdoZW4gaXQgaXMgZHJhZ2dlZCBhbmQgZHJvcHBlZCB0byBhIGZpbGUgaW5wdXQgZWxl
bWVudCB3aGljaCBhY2NlcHRzIFBORy4iKTsKKyAgICAgICAganNUZXN0SXNBc3luYyA9IHRydWU7
CisKKyAgICAgICAgZnVuY3Rpb24gcnVuVGVzdCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlm
ICghd2luZG93LmV2ZW50U2VuZGVyIHx8ICFldmVudFNlbmRlci5iZWdpbkRyYWdXaXRoRmlsZXMp
IHsKKyAgICAgICAgICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKKyAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHZhciBlbGVtZW50ID0gZG9jdW1lbnQu
Z2V0RWxlbWVudHNCeVRhZ05hbWUoJ2lucHV0JylbMF07CisgICAgICAgICAgICB2YXIgY2VudGVy
WCA9IGVsZW1lbnQub2Zmc2V0TGVmdCArIGVsZW1lbnQub2Zmc2V0V2lkdGggLyAyOworICAgICAg
ICAgICAgdmFyIGNlbnRlclkgPSBlbGVtZW50Lm9mZnNldFRvcCArIGVsZW1lbnQub2Zmc2V0SGVp
Z2h0IC8gMjsKKworICAgICAgICAgICAgZXZlbnRTZW5kZXIuYmVnaW5EcmFnV2l0aEZpbGVzKFsi
cmVzb3VyY2VzL2ltYWdlcy9ncmVlbi00MDB4NDAwLmhlaWMiXSk7CisgICAgICAgICAgICBldmVu
dFNlbmRlci5tb3VzZU1vdmVUbyhjZW50ZXJYLCBjZW50ZXJZKTsKKyAgICAgICAgICAgIGV2ZW50
U2VuZGVyLm1vdXNlVXAoKTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIGNoYW5nZWQo
ZXZlbnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZpbGVMaXN0ID0gZXZlbnQudGFyZ2V0LmZp
bGVzOworICAgICAgICAgICAgc2hvdWxkQmUoImZpbGVMaXN0Lmxlbmd0aCIsICIxIik7CisKKyAg
ICAgICAgICAgIGZpbGUgPSBmaWxlTGlzdFswXTsKKyAgICAgICAgICAgIHNob3VsZEJlRXF1YWxU
b1N0cmluZygiZmlsZS50eXBlIiwgImltYWdlL3BuZyIpOworICAgICAgICAgICAgc2hvdWxkQmVO
b25aZXJvKCJmaWxlLnNpemUiKTsKKworICAgICAgICAgICAgaW1nID0gZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCgiaW1nIik7CisgICAgICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGlt
Zyk7CisKKyAgICAgICAgICAgIHZhciByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpOworICAgICAg
ICAgICAgcmVhZGVyLm9ubG9hZCA9ICgpID0+IHsKKyAgICAgICAgICAgICAgICBpbWcub25sb2Fk
ID0gKCkgPT4geworICAgICAgICAgICAgICAgICAgICBkZWJ1ZygiSW1hZ2Ugd2FzIGxvYWRlZC4i
KTsKKyAgICAgICAgICAgICAgICAgICAgc2hvdWxkQmUoImltZy53aWR0aCIsICI0MDAiKTsKKyAg
ICAgICAgICAgICAgICAgICAgc2hvdWxkQmUoImltZy5oZWlnaHQiLCAiNDAwIik7CisgICAgICAg
ICAgICAgICAgICAgIGZpbmlzaEpTVGVzdCgpOworICAgICAgICAgICAgICAgIH07CisgICAgICAg
ICAgICAgICAgaW1nLm9uZXJyb3IgPSAoKSA9PiB7CisgICAgICAgICAgICAgICAgICAgIGRlYnVn
KCJJbWFnZSBjb3VsZCBub3QgYmUgbG9hZGVkLiIpOworICAgICAgICAgICAgICAgICAgICBzaG91
bGROb3RCZSgiaW1nLndpZHRoIiwgIjQwMCIpOworICAgICAgICAgICAgICAgICAgICBzaG91bGRO
b3RCZSgiaW1nLmhlaWdodCIsICI0MDAiKTsKKyAgICAgICAgICAgICAgICAgICAgZmluaXNoSlNU
ZXN0KCk7CisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICBpbWcuc3JjID0gcmVh
ZGVyLnJlc3VsdDsKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICByZWFkZXIucmVhZEFzRGF0
YVVSTChmaWxlKTsKKyAgICAgICAgfQorICAgICAgICBydW5UZXN0KCk7CisgICAgPC9zY3JpcHQ+
Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9pb3MvVGVzdEV4
cGVjdGF0aW9ucwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9pb3MvVGVzdEV4
cGVjdGF0aW9ucwkocmV2aXNpb24gMjY1Mzk5KQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vaW9z
L1Rlc3RFeHBlY3RhdGlvbnMJKHdvcmtpbmcgY29weSkKQEAgLTU5Myw2ICs1OTMsOCBAQCBmYXN0
L2Zvcm1zL2ZpbGUvaW5wdXQtZmlsZS12YWx1ZS5odG1sIFsgCiBmYXN0L2Zvcm1zL2ZpbGUvaW5w
dXQtZmlsZS13cml0ZS1maWxlcy5odG1sIFsgU2tpcCBdCiBmYXN0L2Zvcm1zL2ZpbGUvcmVjb3Zl
ci1maWxlLWlucHV0LWluLXVucG9zdGVkLWZvcm0uaHRtbCBbIFNraXAgXQogZmFzdC9mb3Jtcy9m
aWxlL3NlbGVjdGVkLWZpbGVzLWZyb20taGlzdG9yeS1zdGF0ZS5odG1sIFsgU2tpcCBdCitmYXN0
L2Zvcm1zL2ZpbGUvZW50cmllcy1hcGkvaW1hZ2Utbm8tdHJhbnNjb2RlLWRyYWctZHJvcC5odG1s
IFsgU2tpcCBdCitmYXN0L2Zvcm1zL2ZpbGUvZW50cmllcy1hcGkvaW1hZ2UtdHJhbnNjb2RlLWRy
YWctZHJvcC5odG1sIFsgU2tpcCBdCiBmYXN0L2Zvcm1zL2ZvY3VzLXNlbGVjdGlvbi1pbnB1dC5o
dG1sIFsgU2tpcCBdCiBmYXN0L2Zvcm1zL2ZvY3VzLXNlbGVjdGlvbi10ZXh0YXJlYS5odG1sIFsg
U2tpcCBdCiBmYXN0L2Zvcm1zL2lucHV0LWFwcGVhcmFuY2Utc3BpbmJ1dHRvbi11cC5odG1sIFsg
U2tpcCBdCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vVGVzdEV4cGVjdGF0aW9ucwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW4vVGVzdEV4cGVjdGF0aW9ucwko
cmV2aXNpb24gMjY1Mzk5KQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luL1Rlc3RFeHBlY3Rh
dGlvbnMJKHdvcmtpbmcgY29weSkKQEAgLTM2ODMsNiArMzY4Myw4IEBAIGZhc3QvY2FudmFzLzJk
LnNldFBhdGguaHRtbCBbIEZhaWx1cmUgXQogZmFzdC9mb3Jtcy9maWxlL2VudHJpZXMtYXBpL2Ry
YWctZm9sZGVyLXdlYmtpdEVudHJpZXMuaHRtbCBbIEZhaWx1cmUgXQogZmFzdC9mb3Jtcy9maWxl
L2VudHJpZXMtYXBpL3dlYmtpdGRpcmVjdG9yeS1kcmFnLWZvbGRlci13ZWJraXRFbnRyaWVzLmh0
bWwgWyBGYWlsdXJlIF0KIGZhc3QvZm9ybXMvZmlsZS9lbnRyaWVzLWFwaS93ZWJraXRkaXJlY3Rv
cnktZHJhZy1mb2xkZXIuaHRtbCBbIEZhaWx1cmUgXQorZmFzdC9mb3Jtcy9maWxlL2VudHJpZXMt
YXBpL2ltYWdlLW5vLXRyYW5zY29kZS1kcmFnLWRyb3AuaHRtbCBbIEZhaWx1cmUgXQorZmFzdC9m
b3Jtcy9maWxlL2VudHJpZXMtYXBpL2ltYWdlLXRyYW5zY29kZS1kcmFnLWRyb3AuaHRtbCBbIEZh
aWx1cmUgXQogaHR0cC90ZXN0cy9tdWx0aXBhcnQvbXVsdGlwYXJ0LWFzeW5jLWltYWdlLmh0bWwg
WyBGYWlsdXJlIF0KIGh0dHAvdGVzdHMvc2VjdXJpdHkvY29udGVudFNlY3VyaXR5UG9saWN5L2Fs
bG93LWZhdmljb24uaHRtbCBbIEZhaWx1cmUgXQogaHR0cC93cHQvZW50cmllcy1hcGkvaW50ZXJm
YWNlcy5odG1sIFsgRmFpbHVyZSBdCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW5jYWly
by9UZXN0RXhwZWN0YXRpb25zCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL3dp
bmNhaXJvL1Rlc3RFeHBlY3RhdGlvbnMJKHJldmlzaW9uIDI2NTM5OSkKKysrIExheW91dFRlc3Rz
L3BsYXRmb3JtL3dpbmNhaXJvL1Rlc3RFeHBlY3RhdGlvbnMJKHdvcmtpbmcgY29weSkKQEAgLTc0
NSw2ICs3NDUsOCBAQCBmYXN0L2Zvcm1zL2ZpbGUvZ2V0LWZpbGUtdXBsb2FkLXVzaW5nLW9wCiBm
YXN0L2Zvcm1zL2ZpbGUvaW5wdXQtZmlsZS12YWx1ZS11c2luZy1vcGVuLXBhbmVsLmh0bWwgWyBU
aW1lb3V0IF0KIGZhc3QvZm9ybXMvZmlsZS9pbnB1dC1maWxlLXdyaXRlLWZpbGVzLXVzaW5nLW9w
ZW4tcGFuZWwuaHRtbCBbIFRpbWVvdXQgXQogZmFzdC9mb3Jtcy9maWxlL29wZW4tZmlsZS1wYW5l
bC5odG1sIFsgVGltZW91dCBdCitmYXN0L2Zvcm1zL2ZpbGUvZW50cmllcy1hcGkvaW1hZ2Utbm8t
dHJhbnNjb2RlLWRyYWctZHJvcC5odG1sIFtTa2lwIF0KK2Zhc3QvZm9ybXMvZmlsZS9lbnRyaWVz
LWFwaS9pbWFnZS10cmFuc2NvZGUtZHJhZy1kcm9wLmh0bWwgW1NraXAgXQogZmFzdC9oaXN0b3J5
L3BhZ2UtY2FjaGUtY3JlYXRlT2JqZWN0VVJMLXVzaW5nLW9wZW4tcGFuZWwuaHRtbCBbIFRpbWVv
dXQgXQogZmFzdC9oaXN0b3J5L3BhZ2UtY2FjaGUtY3JlYXRlT2JqZWN0VVJMLmh0bWwgWyBUaW1l
b3V0IF0KIApJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2syL1Rlc3RFeHBlY3RhdGlvbnMK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2syL1Rlc3RFeHBlY3RhdGlvbnMJ
KHJldmlzaW9uIDI2NTM5OSkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL3drMi9UZXN0RXhwZWN0
YXRpb25zCSh3b3JraW5nIGNvcHkpCkBAIC02NTcsNiArNjU3LDggQEAgbWVkaWEvdmlkZW8tc3Jj
LWJsb2IuaHRtbAogc2VjdXJpdHkvY29udGVudFNlY3VyaXR5UG9saWN5L2ltYWdlLXdpdGgtYmxv
Yi11cmwtYWxsb3dlZC1ieS1pbWctc3JjLXN0YXItd2l0aC1BbGxvd0NvbnRlbnRTZWN1cml0eVBv
bGljeVNvdXJjZVN0YXJUb01hdGNoQW55UHJvdG9jb2wtZW5hYmxlZC5odG1sCiBzZWN1cml0eS9j
b250ZW50U2VjdXJpdHlQb2xpY3kvaW1hZ2Utd2l0aC1ibG9iLXVybC1ibG9ja2VkLWJ5LWltZy1z
cmMtc3Rhci5odG1sCiBzZWN1cml0eS9jb250ZW50U2VjdXJpdHlQb2xpY3kvdmlkZW8td2l0aC1i
bG9iLXVybC1hbGxvd2VkLWJ5LW1lZGlhLXNyYy1zdGFyLmh0bWwKK2Zhc3QvZm9ybXMvZmlsZS9l
bnRyaWVzLWFwaS9pbWFnZS1uby10cmFuc2NvZGUtZHJhZy1kcm9wLmh0bWwKK2Zhc3QvZm9ybXMv
ZmlsZS9lbnRyaWVzLWFwaS9pbWFnZS10cmFuc2NvZGUtZHJhZy1kcm9wLmh0bWwKIAogIyBXZWJL
aXRUZXN0UnVubmVyIGRvZXNuJ3QgaGF2ZSBldmVudFNlbmRlci5maXJlS2V5Ym9hcmRFdmVudHNU
b0VsZW1lbnQKIHBsYXRmb3JtL21hYy9mYXN0L2V2ZW50cy9vYmpjLWtleWJvYXJkLWV2ZW50LWNy
ZWF0aW9uLmh0bWwK
</data>

          </attachment>
      

    </bug>

</bugzilla>