<?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>151256</bug_id>
          
          <creation_ts>2015-11-13 03:23:41 -0800</creation_ts>
          <short_desc>[GStreamer] Use RunLoop instead of GMainLoop in AudioFileReaderGStreamer</short_desc>
          <delta_ts>2015-11-17 01:57:54 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Platform</component>
          <version>WebKit Local 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>Gtk</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>pnormand</cc>
    
    <cc>zan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1141813</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-11-13 03:23:41 -0800</bug_when>
    <thetext>We could use the platform abstraction instead of GMainLoop directly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1141814</commentid>
    <comment_count>1</comment_count>
      <attachid>265476</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-11-13 03:30:37 -0800</bug_when>
    <thetext>Created attachment 265476
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1141815</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-11-13 03:33:14 -0800</bug_when>
    <thetext>Attachment 265476 did not pass style-queue:


ERROR: Source/WebCore/platform/audio/gstreamer/AudioFileReaderGStreamer.cpp:350:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 1 in 4 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1142060</commentid>
    <comment_count>3</comment_count>
      <attachid>265476</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2015-11-14 11:48:25 -0800</bug_when>
    <thetext>Comment on attachment 265476
Patch

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

&gt; Source/WebCore/platform/audio/gstreamer/AudioFileReaderGStreamer.cpp:380
&gt; +    if (isMainThread()) {
&gt; +        RefPtr&lt;AudioBus&gt; returnValue;
&gt; +        auto threadID = createThread(&quot;AudioFileReader&quot;, [&amp;returnValue, filePath, mixToMono, sampleRate] {
&gt; +            returnValue = AudioFileReader(filePath).createBus(sampleRate, mixToMono);
&gt; +        });
&gt; +        waitForThreadCompletion(threadID);
&gt; +
&gt; +        return returnValue;
&gt; +    }

Would RunLoop::run() not set up a nested main loop in case of running this in the main thread?

What about the cases where the bus is created in a non-main WebWorker thread that&apos;s also managed via RunLoop, wouldn&apos;t that set up the nested loop?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1142168</commentid>
    <comment_count>4</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-11-15 23:35:25 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; Comment on attachment 265476 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=265476&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/audio/gstreamer/AudioFileReaderGStreamer.cpp:380
&gt; &gt; +    if (isMainThread()) {
&gt; &gt; +        RefPtr&lt;AudioBus&gt; returnValue;
&gt; &gt; +        auto threadID = createThread(&quot;AudioFileReader&quot;, [&amp;returnValue, filePath, mixToMono, sampleRate] {
&gt; &gt; +            returnValue = AudioFileReader(filePath).createBus(sampleRate, mixToMono);
&gt; &gt; +        });
&gt; &gt; +        waitForThreadCompletion(threadID);
&gt; &gt; +
&gt; &gt; +        return returnValue;
&gt; &gt; +    }
&gt; 
&gt; Would RunLoop::run() not set up a nested main loop in case of running this
&gt; in the main thread?

Yes, but with the same main context, we need a different one to avoid deadlocks. Phil wrote the original code, so he should know the details.

&gt; What about the cases where the bus is created in a non-main WebWorker thread
&gt; that&apos;s also managed via RunLoop, wouldn&apos;t that set up the nested loop?

In that case a new RunLoop is created for the current thread. If those threads already a have a RunLoop running maybe we should always use a dedicated thread, though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1142172</commentid>
    <comment_count>5</comment_count>
      <attachid>265476</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2015-11-15 23:45:05 -0800</bug_when>
    <thetext>Comment on attachment 265476
Patch

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

&gt;&gt;&gt; Source/WebCore/platform/audio/gstreamer/AudioFileReaderGStreamer.cpp:380
&gt;&gt;&gt; +    }
&gt;&gt; 
&gt;&gt; Would RunLoop::run() not set up a nested main loop in case of running this in the main thread?
&gt;&gt; 
&gt;&gt; What about the cases where the bus is created in a non-main WebWorker thread that&apos;s also managed via RunLoop, wouldn&apos;t that set up the nested loop?
&gt; 
&gt; Yes, but with the same main context, we need a different one to avoid deadlocks. Phil wrote the original code, so he should know the details.

My bad, workers don&apos;t use RunLoop, they use a custom queue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1142173</commentid>
    <comment_count>6</comment_count>
      <attachid>265476</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2015-11-15 23:48:18 -0800</bug_when>
    <thetext>Comment on attachment 265476
Patch

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

&gt;&gt;&gt;&gt; Source/WebCore/platform/audio/gstreamer/AudioFileReaderGStreamer.cpp:380
&gt;&gt;&gt;&gt; +    }
&gt;&gt;&gt; 
&gt;&gt;&gt; Would RunLoop::run() not set up a nested main loop in case of running this in the main thread?
&gt;&gt;&gt; 
&gt;&gt;&gt; What about the cases where the bus is created in a non-main WebWorker thread that&apos;s also managed via RunLoop, wouldn&apos;t that set up the nested loop?
&gt;&gt; 
&gt;&gt; Yes, but with the same main context, we need a different one to avoid deadlocks. Phil wrote the original code, so he should know the details.
&gt; 
&gt; My bad, workers don&apos;t use RunLoop, they use a custom queue.

On that note, the new code goes on to create a RunLoop object in the worker thread.

I&apos;d rather avoid that, and just use a new thread regardless where the AudioBus creation is requested (the main thread or a worker thread).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1142175</commentid>
    <comment_count>7</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-11-15 23:55:29 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; Comment on attachment 265476 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=265476&amp;action=review
&gt; 
&gt; &gt;&gt;&gt;&gt; Source/WebCore/platform/audio/gstreamer/AudioFileReaderGStreamer.cpp:380
&gt; &gt;&gt;&gt;&gt; +    }
&gt; &gt;&gt;&gt; 
&gt; &gt;&gt;&gt; Would RunLoop::run() not set up a nested main loop in case of running this in the main thread?
&gt; &gt;&gt;&gt; 
&gt; &gt;&gt;&gt; What about the cases where the bus is created in a non-main WebWorker thread that&apos;s also managed via RunLoop, wouldn&apos;t that set up the nested loop?
&gt; &gt;&gt; 
&gt; &gt;&gt; Yes, but with the same main context, we need a different one to avoid deadlocks. Phil wrote the original code, so he should know the details.
&gt; &gt; 
&gt; &gt; My bad, workers don&apos;t use RunLoop, they use a custom queue.
&gt; 
&gt; On that note, the new code goes on to create a RunLoop object in the worker
&gt; thread.
&gt; 
&gt; I&apos;d rather avoid that, and just use a new thread regardless where the
&gt; AudioBus creation is requested (the main thread or a worker thread).

Ok, it&apos;s definitely safer and makes the code simpler.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1142181</commentid>
    <comment_count>8</comment_count>
      <attachid>265573</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-11-16 01:00:19 -0800</bug_when>
    <thetext>Created attachment 265573
Updated patch

Use always a helper thread</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1142182</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-11-16 01:03:04 -0800</bug_when>
    <thetext>Attachment 265573 did not pass style-queue:


ERROR: Source/WebCore/platform/audio/gstreamer/AudioFileReaderGStreamer.cpp:350:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 1 in 4 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1142183</commentid>
    <comment_count>10</comment_count>
      <attachid>265573</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2015-11-16 01:13:19 -0800</bug_when>
    <thetext>Comment on attachment 265573
Updated patch

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

&gt; Source/WebCore/platform/audio/gstreamer/AudioFileReaderGStreamer.cpp:296
&gt; +    m_pipeline = gst_pipeline_new(nullptr);

Should the returned pointer be adopted?

&gt; Source/WebCore/platform/audio/gstreamer/AudioFileReaderGStreamer.cpp:312
&gt; +        gst_message_unref(message);

This was leaking before, was it not?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1142194</commentid>
    <comment_count>11</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-11-16 01:40:49 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; Comment on attachment 265573 [details]
&gt; Updated patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=265573&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/audio/gstreamer/AudioFileReaderGStreamer.cpp:296
&gt; &gt; +    m_pipeline = gst_pipeline_new(nullptr);
&gt; 
&gt; Should the returned pointer be adopted?

No, it&apos;s a floating ref we should consume.

&gt; &gt; Source/WebCore/platform/audio/gstreamer/AudioFileReaderGStreamer.cpp:312
&gt; &gt; +        gst_message_unref(message);
&gt; 
&gt; This was leaking before, was it not?

No, when using the message signal, gst unrefs the message, when using the sync handler, you must unref it when returning DROP.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1142496</commentid>
    <comment_count>12</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-11-17 01:57:54 -0800</bug_when>
    <thetext>Committed r192511: &lt;http://trac.webkit.org/changeset/192511&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>265476</attachid>
            <date>2015-11-13 03:30:37 -0800</date>
            <delta_ts>2015-11-16 01:00:19 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>wcore-gst-audio-reader.diff</filename>
            <type>text/plain</type>
            <size>22651</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAzZjkyMmJhLi4yMTc0ZDdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDkg
QEAKKzIwMTUtMTEtMTMgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtHU3RyZWFtZXJdIFVzZSBSdW5Mb29wIGluc3RlYWQgb2YgR01haW5Mb29w
IGluIEF1ZGlvRmlsZVJlYWRlckdTdHJlYW1lcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUxMjU2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgVXNlIFJ1bkxvb3AgaW5zdGVhZCBvZiB0aGUgcGxhdGZvcm0g
c3BlY2lmaWMgY29kZS4gVGhlIEF1ZGlvQnVzCisgICAgICAgIGNhbiBiZSBjcmVhdGVkIGZyb20g
YW55IHRocmVhZCwgc28gd2hlbiBjYWxsZWQgZnJvbSB0aGUgbWFpbgorICAgICAgICB0aHJlYWQs
IHdlIGNyZWF0ZSBhIGhlbHBlciB0aHJlYWQgdG8gZW5zdXJlIHdlIGRvbid0IHVzZSB0aGUgbWFp
bgorICAgICAgICBSdW5Mb29wLgorCisgICAgICAgIFRoaXMgcGF0Y2ggYWxzbyBpbmNsdWRlcyBz
b21lIGNvZGUgY2xlYW51cHM6CisgICAgICAgICAgLSBVc2VzIHNtYXJ0IHBvaW50ZXJzIHdoZW4g
cG9zc2libGUuCisgICAgICAgICAgLSBGaXhlcyB1bmluaXRpYWxpemVkIG1lbWJlcnMgaW4gY29u
c3RydWN0b3JzLgorICAgICAgICAgIC0gTWFrZXMgcHJpdmF0ZSBtZW1iZXJzIHByaXZhdGUuCisg
ICAgICAgICAgLSBVc2VzIGxhbWJkYXMgaW5zdGVhZCBvZiBzdGF0aWMgbm9uLW1lbWJlcnMgZnVu
Y3Rpb25zLgorICAgICAgICAgIC0gbnVsbHB0ciBpbnN0ZWFkIG9mIDAgaW4gc29tZSBwbGFjZXMu
CisKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9nc3RyZWFtZXIvQXVkaW9GaWxlUmVhZGVyR1N0
cmVhbWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvRmlsZVJlYWRlcjo6Y3JlYXRlV2Vh
a1B0cik6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0ZpbGVSZWFkZXI6OmRlaW50ZXJsZWF2ZVBh
ZEFkZGVkQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9GaWxlUmVhZGVyOjpkZWlu
dGVybGVhdmVSZWFkeUNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvRmlsZVJlYWRl
cjo6ZGVjb2RlYmluUGFkQWRkZWRDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0Zp
bGVSZWFkZXI6OkF1ZGlvRmlsZVJlYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0ZpbGVS
ZWFkZXI6On5BdWRpb0ZpbGVSZWFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9GaWxlUmVh
ZGVyOjpoYW5kbGVTYW1wbGUpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9GaWxlUmVhZGVyOjpo
YW5kbGVNZXNzYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvRmlsZVJlYWRlcjo6aGFuZGxl
TmV3RGVpbnRlcmxlYXZlUGFkKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvRmlsZVJlYWRlcjo6
ZGVpbnRlcmxlYXZlUGFkc0NvbmZpZ3VyZWQpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9GaWxl
UmVhZGVyOjpwbHVnRGVpbnRlcmxlYXZlKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvRmlsZVJl
YWRlcjo6ZGVjb2RlQXVkaW9Gb3JCdXNDcmVhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpBdWRp
b0ZpbGVSZWFkZXI6OmNyZWF0ZUJ1cyk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVCdXNGcm9t
QXVkaW9GaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUJ1c0Zyb21Jbk1lbW9yeUF1ZGlv
RmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpvbkFwcHNpbmtQdWxsUmVxdWlyZWRDYWxsYmFjayk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjptZXNzYWdlQ2FsbGJhY2spOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6b25HU3RyZWFtZXJEZWludGVybGVhdmVQYWRBZGRlZENhbGxiYWNr
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Om9uR1N0cmVhbWVyRGVpbnRlcmxlYXZlUmVh
ZHlDYWxsYmFjayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpvbkdTdHJlYW1lckRlY29k
ZWJpblBhZEFkZGVkQ2FsbGJhY2spOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9HUmVmUHRyR1N0cmVhbWVyLmNwcDoKKyAgICAgICAgKFdURjo6YWRvcHRH
UmVmKToKKyAgICAgICAgKFdURjo6cmVmR1B0cjxHc3RCdWZmZXJMaXN0Pik6CisgICAgICAgIChX
VEY6OmRlcmVmR1B0cjxHc3RCdWZmZXJMaXN0Pik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3N0cmVhbWVyL0dSZWZQdHJHU3RyZWFtZXIuaDoKKwogMjAxNS0xMS0xMiAgQ2FybG9zIEdh
cmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dTdHJlYW1lcl0g
VXNlIFJ1bkxvb3A6OnRpbWVyIGluIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UgZm9y
IEdMIGRyYXdpbmcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2dz
dHJlYW1lci9BdWRpb0ZpbGVSZWFkZXJHU3RyZWFtZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vYXVkaW8vZ3N0cmVhbWVyL0F1ZGlvRmlsZVJlYWRlckdTdHJlYW1lci5jcHAKaW5kZXgg
ZjRjMGQ2OC4uMTU4MDhmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVk
aW8vZ3N0cmVhbWVyL0F1ZGlvRmlsZVJlYWRlckdTdHJlYW1lci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVyL0F1ZGlvRmlsZVJlYWRlckdTdHJlYW1lci5j
cHAKQEAgLTIyLDE2ICsyMiwxOCBAQAogI2lmIEVOQUJMRShXRUJfQVVESU8pCiAKICNpbmNsdWRl
ICJBdWRpb0ZpbGVSZWFkZXIuaCIKLQogI2luY2x1ZGUgIkF1ZGlvQnVzLmgiCi0KKyNpbmNsdWRl
ICJHUmVmUHRyR1N0cmVhbWVyLmgiCiAjaW5jbHVkZSA8Z2lvL2dpby5oPgogI2luY2x1ZGUgPGdz
dC9hcHAvZ3N0YXBwc2luay5oPgogI2luY2x1ZGUgPGdzdC9hdWRpby9hdWRpby1pbmZvLmg+CiAj
aW5jbHVkZSA8Z3N0L2dzdC5oPgorI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAjaW5jbHVk
ZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KKyNpbmNsdWRl
IDx3dGYvVGhyZWFkaW5nLmg+CisjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KICNpbmNsdWRlIDx3
dGYvZ2xpYi9HUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL2dsaWIvR1RocmVhZFNhZmVNYWluTG9v
cFNvdXJjZS5oPgogI2luY2x1ZGUgPHd0Zi9nbGliL0dVbmlxdWVQdHIuaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewpAQCAtNDUsMjkgKzQ3LDM2IEBAIHB1YmxpYzoKIAogICAgIFBhc3NSZWZQdHI8
QXVkaW9CdXM+IGNyZWF0ZUJ1cyhmbG9hdCBzYW1wbGVSYXRlLCBib29sIG1peFRvTW9ubyk7CiAK
LSAgICBHc3RGbG93UmV0dXJuIGhhbmRsZVNhbXBsZShHc3RBcHBTaW5rKik7Ci0gICAgZ2Jvb2xl
YW4gaGFuZGxlTWVzc2FnZShHc3RNZXNzYWdlKik7Citwcml2YXRlOgorICAgIFdlYWtQdHI8QXVk
aW9GaWxlUmVhZGVyPiBjcmVhdGVXZWFrUHRyKCkgeyByZXR1cm4gbV93ZWFrUHRyRmFjdG9yeS5j
cmVhdGVXZWFrUHRyKCk7IH0KKworICAgIHN0YXRpYyB2b2lkIGRlaW50ZXJsZWF2ZVBhZEFkZGVk
Q2FsbGJhY2soQXVkaW9GaWxlUmVhZGVyKiwgR3N0UGFkKik7CisgICAgc3RhdGljIHZvaWQgZGVp
bnRlcmxlYXZlUmVhZHlDYWxsYmFjayhBdWRpb0ZpbGVSZWFkZXIqKTsKKyAgICBzdGF0aWMgdm9p
ZCBkZWNvZGViaW5QYWRBZGRlZENhbGxiYWNrKEF1ZGlvRmlsZVJlYWRlciosIEdzdFBhZCopOwor
CisgICAgdm9pZCBoYW5kbGVNZXNzYWdlKEdzdE1lc3NhZ2UqKTsKICAgICB2b2lkIGhhbmRsZU5l
d0RlaW50ZXJsZWF2ZVBhZChHc3RQYWQqKTsKICAgICB2b2lkIGRlaW50ZXJsZWF2ZVBhZHNDb25m
aWd1cmVkKCk7CiAgICAgdm9pZCBwbHVnRGVpbnRlcmxlYXZlKEdzdFBhZCopOwogICAgIHZvaWQg
ZGVjb2RlQXVkaW9Gb3JCdXNDcmVhdGlvbigpOworICAgIEdzdEZsb3dSZXR1cm4gaGFuZGxlU2Ft
cGxlKEdzdEFwcFNpbmsqKTsKIAotcHJpdmF0ZToKLSAgICBjb25zdCB2b2lkKiBtX2RhdGE7Ci0g
ICAgc2l6ZV90IG1fZGF0YVNpemU7Ci0gICAgY29uc3QgY2hhciogbV9maWxlUGF0aDsKKyAgICBX
ZWFrUHRyRmFjdG9yeTxBdWRpb0ZpbGVSZWFkZXI+IG1fd2Vha1B0ckZhY3Rvcnk7CisgICAgUnVu
TG9vcCYgbV9ydW5Mb29wOworICAgIGNvbnN0IHZvaWQqIG1fZGF0YSB7IG51bGxwdHIgfTsKKyAg
ICBzaXplX3QgbV9kYXRhU2l6ZSB7IDAgfTsKKyAgICBjb25zdCBjaGFyKiBtX2ZpbGVQYXRoIHsg
bnVsbHB0ciB9OwogCi0gICAgZmxvYXQgbV9zYW1wbGVSYXRlOwotICAgIGludCBtX2NoYW5uZWxz
OwotICAgIEdzdEJ1ZmZlckxpc3QqIG1fZnJvbnRMZWZ0QnVmZmVyczsKLSAgICBHc3RCdWZmZXJM
aXN0KiBtX2Zyb250UmlnaHRCdWZmZXJzOworICAgIGZsb2F0IG1fc2FtcGxlUmF0ZSB7IDAgfTsK
KyAgICBpbnQgbV9jaGFubmVscyB7IDAgfTsKKyAgICBHUmVmUHRyPEdzdEJ1ZmZlckxpc3Q+IG1f
ZnJvbnRMZWZ0QnVmZmVyczsKKyAgICBHUmVmUHRyPEdzdEJ1ZmZlckxpc3Q+IG1fZnJvbnRSaWdo
dEJ1ZmZlcnM7CiAKLSAgICBHc3RFbGVtZW50KiBtX3BpcGVsaW5lOwotICAgIHVuc2lnbmVkIG1f
Y2hhbm5lbFNpemU7CisgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBtX3BpcGVsaW5lOworICAgIHVu
c2lnbmVkIG1fY2hhbm5lbFNpemUgeyAwIH07CiAgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBtX2Rl
Y29kZWJpbjsKICAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IG1fZGVJbnRlcmxlYXZlOwotICAgIEdS
ZWZQdHI8R01haW5Mb29wPiBtX2xvb3A7Ci0gICAgYm9vbCBtX2Vycm9yT2NjdXJyZWQ7CisgICAg
Ym9vbCBtX2Vycm9yT2NjdXJyZWQgeyBmYWxzZSB9OwogfTsKIAogc3RhdGljIHZvaWQgY29weUdz
dHJlYW1lckJ1ZmZlcnNUb0F1ZGlvQ2hhbm5lbChHc3RCdWZmZXJMaXN0KiBidWZmZXJzLCBBdWRp
b0NoYW5uZWwqIGF1ZGlvQ2hhbm5lbCkKQEAgLTgzLDkyICs5Miw3MSBAQCBzdGF0aWMgdm9pZCBj
b3B5R3N0cmVhbWVyQnVmZmVyc1RvQXVkaW9DaGFubmVsKEdzdEJ1ZmZlckxpc3QqIGJ1ZmZlcnMs
IEF1ZGlvQ2hhbgogICAgIH0KIH0KIAotc3RhdGljIEdzdEZsb3dSZXR1cm4gb25BcHBzaW5rUHVs
bFJlcXVpcmVkQ2FsbGJhY2soR3N0QXBwU2luayogc2luaywgZ3BvaW50ZXIgdXNlckRhdGEpCi17
Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PEF1ZGlvRmlsZVJlYWRlcio+KHVzZXJEYXRhKS0+aGFu
ZGxlU2FtcGxlKHNpbmspOwotfQotCi1nYm9vbGVhbiBtZXNzYWdlQ2FsbGJhY2soR3N0QnVzKiwg
R3N0TWVzc2FnZSogbWVzc2FnZSwgQXVkaW9GaWxlUmVhZGVyKiByZWFkZXIpCi17Ci0gICAgcmV0
dXJuIHJlYWRlci0+aGFuZGxlTWVzc2FnZShtZXNzYWdlKTsKLX0KLQotc3RhdGljIHZvaWQgb25H
U3RyZWFtZXJEZWludGVybGVhdmVQYWRBZGRlZENhbGxiYWNrKEdzdEVsZW1lbnQqLCBHc3RQYWQq
IHBhZCwgQXVkaW9GaWxlUmVhZGVyKiByZWFkZXIpCit2b2lkIEF1ZGlvRmlsZVJlYWRlcjo6ZGVp
bnRlcmxlYXZlUGFkQWRkZWRDYWxsYmFjayhBdWRpb0ZpbGVSZWFkZXIqIHJlYWRlciwgR3N0UGFk
KiBwYWQpCiB7CiAgICAgcmVhZGVyLT5oYW5kbGVOZXdEZWludGVybGVhdmVQYWQocGFkKTsKIH0K
IAotc3RhdGljIHZvaWQgb25HU3RyZWFtZXJEZWludGVybGVhdmVSZWFkeUNhbGxiYWNrKEdzdEVs
ZW1lbnQqLCBBdWRpb0ZpbGVSZWFkZXIqIHJlYWRlcikKK3ZvaWQgQXVkaW9GaWxlUmVhZGVyOjpk
ZWludGVybGVhdmVSZWFkeUNhbGxiYWNrKEF1ZGlvRmlsZVJlYWRlciogcmVhZGVyKQogewogICAg
IHJlYWRlci0+ZGVpbnRlcmxlYXZlUGFkc0NvbmZpZ3VyZWQoKTsKIH0KIAotc3RhdGljIHZvaWQg
b25HU3RyZWFtZXJEZWNvZGViaW5QYWRBZGRlZENhbGxiYWNrKEdzdEVsZW1lbnQqLCBHc3RQYWQq
IHBhZCwgQXVkaW9GaWxlUmVhZGVyKiByZWFkZXIpCit2b2lkIEF1ZGlvRmlsZVJlYWRlcjo6ZGVj
b2RlYmluUGFkQWRkZWRDYWxsYmFjayhBdWRpb0ZpbGVSZWFkZXIqIHJlYWRlciwgR3N0UGFkKiBw
YWQpCiB7CiAgICAgcmVhZGVyLT5wbHVnRGVpbnRlcmxlYXZlKHBhZCk7CiB9CiAKIEF1ZGlvRmls
ZVJlYWRlcjo6QXVkaW9GaWxlUmVhZGVyKGNvbnN0IGNoYXIqIGZpbGVQYXRoKQotICAgIDogbV9k
YXRhKDApCi0gICAgLCBtX2RhdGFTaXplKDApCisgICAgOiBtX3dlYWtQdHJGYWN0b3J5KHRoaXMp
CisgICAgLCBtX3J1bkxvb3AoUnVuTG9vcDo6Y3VycmVudCgpKQogICAgICwgbV9maWxlUGF0aChm
aWxlUGF0aCkKLSAgICAsIG1fY2hhbm5lbFNpemUoMCkKLSAgICAsIG1fZXJyb3JPY2N1cnJlZChm
YWxzZSkKIHsKIH0KIAogQXVkaW9GaWxlUmVhZGVyOjpBdWRpb0ZpbGVSZWFkZXIoY29uc3Qgdm9p
ZCogZGF0YSwgc2l6ZV90IGRhdGFTaXplKQotICAgIDogbV9kYXRhKGRhdGEpCisgICAgOiBtX3dl
YWtQdHJGYWN0b3J5KHRoaXMpCisgICAgLCBtX3J1bkxvb3AoUnVuTG9vcDo6Y3VycmVudCgpKQor
ICAgICwgbV9kYXRhKGRhdGEpCiAgICAgLCBtX2RhdGFTaXplKGRhdGFTaXplKQotICAgICwgbV9m
aWxlUGF0aCgwKQotICAgICwgbV9jaGFubmVsU2l6ZSgwKQotICAgICwgbV9lcnJvck9jY3VycmVk
KGZhbHNlKQogewogfQogCiBBdWRpb0ZpbGVSZWFkZXI6On5BdWRpb0ZpbGVSZWFkZXIoKQogewog
ICAgIGlmIChtX3BpcGVsaW5lKSB7Ci0gICAgICAgIEdSZWZQdHI8R3N0QnVzPiBidXMgPSBhZG9w
dEdSZWYoZ3N0X3BpcGVsaW5lX2dldF9idXMoR1NUX1BJUEVMSU5FKG1fcGlwZWxpbmUpKSk7Cisg
ICAgICAgIEdSZWZQdHI8R3N0QnVzPiBidXMgPSBhZG9wdEdSZWYoZ3N0X3BpcGVsaW5lX2dldF9i
dXMoR1NUX1BJUEVMSU5FKG1fcGlwZWxpbmUuZ2V0KCkpKSk7CiAgICAgICAgIEFTU0VSVChidXMp
OwotICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2Z1bmMoYnVzLmdldCgp
LCByZWludGVycHJldF9jYXN0PGdwb2ludGVyPihtZXNzYWdlQ2FsbGJhY2spLCB0aGlzKTsKKyAg
ICAgICAgZ3N0X2J1c19zZXRfc3luY19oYW5kbGVyKGJ1cy5nZXQoKSwgbnVsbHB0ciwgbnVsbHB0
ciwgbnVsbHB0cik7CiAKLSAgICAgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKG1fcGlwZWxpbmUs
IEdTVF9TVEFURV9OVUxMKTsKLSAgICAgICAgZ3N0X29iamVjdF91bnJlZihHU1RfT0JKRUNUKG1f
cGlwZWxpbmUpKTsKKyAgICAgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKG1fcGlwZWxpbmUuZ2V0
KCksIEdTVF9TVEFURV9OVUxMKTsKKyAgICAgICAgbV9waXBlbGluZSA9IG51bGxwdHI7CiAgICAg
fQogCiAgICAgaWYgKG1fZGVjb2RlYmluKSB7Ci0gICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rp
c2Nvbm5lY3RfYnlfZnVuYyhtX2RlY29kZWJpbi5nZXQoKSwgcmVpbnRlcnByZXRfY2FzdDxncG9p
bnRlcj4ob25HU3RyZWFtZXJEZWNvZGViaW5QYWRBZGRlZENhbGxiYWNrKSwgdGhpcyk7Ci0gICAg
ICAgIG1fZGVjb2RlYmluLmNsZWFyKCk7CisgICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nv
bm5lY3RfbWF0Y2hlZChtX2RlY29kZWJpbi5nZXQoKSwgR19TSUdOQUxfTUFUQ0hfREFUQSwgMCwg
MCwgbnVsbHB0ciwgbnVsbHB0ciwgdGhpcyk7CisgICAgICAgIG1fZGVjb2RlYmluID0gbnVsbHB0
cjsKICAgICB9CiAKICAgICBpZiAobV9kZUludGVybGVhdmUpIHsKLSAgICAgICAgZ19zaWduYWxf
aGFuZGxlcnNfZGlzY29ubmVjdF9ieV9mdW5jKG1fZGVJbnRlcmxlYXZlLmdldCgpLCByZWludGVy
cHJldF9jYXN0PGdwb2ludGVyPihvbkdTdHJlYW1lckRlaW50ZXJsZWF2ZVBhZEFkZGVkQ2FsbGJh
Y2spLCB0aGlzKTsKLSAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9mdW5j
KG1fZGVJbnRlcmxlYXZlLmdldCgpLCByZWludGVycHJldF9jYXN0PGdwb2ludGVyPihvbkdTdHJl
YW1lckRlaW50ZXJsZWF2ZVJlYWR5Q2FsbGJhY2spLCB0aGlzKTsKLSAgICAgICAgbV9kZUludGVy
bGVhdmUuY2xlYXIoKTsKKyAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9tYXRj
aGVkKG1fZGVJbnRlcmxlYXZlLmdldCgpLCBHX1NJR05BTF9NQVRDSF9EQVRBLCAwLCAwLCBudWxs
cHRyLCBudWxscHRyLCB0aGlzKTsKKyAgICAgICAgbV9kZUludGVybGVhdmUgPSBudWxscHRyOwog
ICAgIH0KLQotICAgIGdzdF9idWZmZXJfbGlzdF91bnJlZihtX2Zyb250TGVmdEJ1ZmZlcnMpOwot
ICAgIGdzdF9idWZmZXJfbGlzdF91bnJlZihtX2Zyb250UmlnaHRCdWZmZXJzKTsKIH0KIAogR3N0
Rmxvd1JldHVybiBBdWRpb0ZpbGVSZWFkZXI6OmhhbmRsZVNhbXBsZShHc3RBcHBTaW5rKiBzaW5r
KQogewotICAgIEdzdFNhbXBsZSogc2FtcGxlID0gZ3N0X2FwcF9zaW5rX3B1bGxfc2FtcGxlKHNp
bmspOworICAgIEdSZWZQdHI8R3N0U2FtcGxlPiBzYW1wbGUgPSBhZG9wdEdSZWYoZ3N0X2FwcF9z
aW5rX3B1bGxfc2FtcGxlKHNpbmspKTsKICAgICBpZiAoIXNhbXBsZSkKICAgICAgICAgcmV0dXJu
IEdTVF9GTE9XX0VSUk9SOwogCi0gICAgR3N0QnVmZmVyKiBidWZmZXIgPSBnc3Rfc2FtcGxlX2dl
dF9idWZmZXIoc2FtcGxlKTsKLSAgICBpZiAoIWJ1ZmZlcikgewotICAgICAgICBnc3Rfc2FtcGxl
X3VucmVmKHNhbXBsZSk7CisgICAgR3N0QnVmZmVyKiBidWZmZXIgPSBnc3Rfc2FtcGxlX2dldF9i
dWZmZXIoc2FtcGxlLmdldCgpKTsKKyAgICBpZiAoIWJ1ZmZlcikKICAgICAgICAgcmV0dXJuIEdT
VF9GTE9XX0VSUk9SOwotICAgIH0KIAotICAgIEdzdENhcHMqIGNhcHMgPSBnc3Rfc2FtcGxlX2dl
dF9jYXBzKHNhbXBsZSk7Ci0gICAgaWYgKCFjYXBzKSB7Ci0gICAgICAgIGdzdF9zYW1wbGVfdW5y
ZWYoc2FtcGxlKTsKKyAgICBHc3RDYXBzKiBjYXBzID0gZ3N0X3NhbXBsZV9nZXRfY2FwcyhzYW1w
bGUuZ2V0KCkpOworICAgIGlmICghY2FwcykKICAgICAgICAgcmV0dXJuIEdTVF9GTE9XX0VSUk9S
OwotICAgIH0KIAogICAgIEdzdEF1ZGlvSW5mbyBpbmZvOwogICAgIGdzdF9hdWRpb19pbmZvX2Zy
b21fY2FwcygmaW5mbywgY2Fwcyk7CkBAIC0xNzksMjggKzE2NywyOSBAQCBHc3RGbG93UmV0dXJu
IEF1ZGlvRmlsZVJlYWRlcjo6aGFuZGxlU2FtcGxlKEdzdEFwcFNpbmsqIHNpbmspCiAgICAgc3dp
dGNoIChHU1RfQVVESU9fSU5GT19QT1NJVElPTigmaW5mbywgMCkpIHsKICAgICBjYXNlIEdTVF9B
VURJT19DSEFOTkVMX1BPU0lUSU9OX0ZST05UX0xFRlQ6CiAgICAgY2FzZSBHU1RfQVVESU9fQ0hB
Tk5FTF9QT1NJVElPTl9NT05POgotICAgICAgICBnc3RfYnVmZmVyX2xpc3RfYWRkKG1fZnJvbnRM
ZWZ0QnVmZmVycywgZ3N0X2J1ZmZlcl9yZWYoYnVmZmVyKSk7CisgICAgICAgIGdzdF9idWZmZXJf
bGlzdF9hZGQobV9mcm9udExlZnRCdWZmZXJzLmdldCgpLCBnc3RfYnVmZmVyX3JlZihidWZmZXIp
KTsKICAgICAgICAgbV9jaGFubmVsU2l6ZSArPSBmcmFtZXM7CiAgICAgICAgIGJyZWFrOwogICAg
IGNhc2UgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fRlJPTlRfUklHSFQ6Ci0gICAgICAgIGdz
dF9idWZmZXJfbGlzdF9hZGQobV9mcm9udFJpZ2h0QnVmZmVycywgZ3N0X2J1ZmZlcl9yZWYoYnVm
ZmVyKSk7CisgICAgICAgIGdzdF9idWZmZXJfbGlzdF9hZGQobV9mcm9udFJpZ2h0QnVmZmVycy5n
ZXQoKSwgZ3N0X2J1ZmZlcl9yZWYoYnVmZmVyKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1
bHQ6CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIGdzdF9zYW1wbGVfdW5yZWYoc2FtcGxl
KTsKICAgICByZXR1cm4gR1NUX0ZMT1dfT0s7CiB9CiAKLWdib29sZWFuIEF1ZGlvRmlsZVJlYWRl
cjo6aGFuZGxlTWVzc2FnZShHc3RNZXNzYWdlKiBtZXNzYWdlKQordm9pZCBBdWRpb0ZpbGVSZWFk
ZXI6OmhhbmRsZU1lc3NhZ2UoR3N0TWVzc2FnZSogbWVzc2FnZSkKIHsKKyAgICBBU1NFUlQoJm1f
cnVuTG9vcCA9PSAmUnVuTG9vcDo6Y3VycmVudCgpKTsKKwogICAgIEdVbmlxdWVPdXRQdHI8R0Vy
cm9yPiBlcnJvcjsKICAgICBHVW5pcXVlT3V0UHRyPGdjaGFyPiBkZWJ1ZzsKIAogICAgIHN3aXRj
aCAoR1NUX01FU1NBR0VfVFlQRShtZXNzYWdlKSkgewogICAgIGNhc2UgR1NUX01FU1NBR0VfRU9T
OgotICAgICAgICBnX21haW5fbG9vcF9xdWl0KG1fbG9vcC5nZXQoKSk7CisgICAgICAgIG1fcnVu
TG9vcC5zdG9wKCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgR1NUX01FU1NBR0VfV0FSTklO
RzoKICAgICAgICAgZ3N0X21lc3NhZ2VfcGFyc2Vfd2FybmluZyhtZXNzYWdlLCAmZXJyb3Iub3V0
UHRyKCksICZkZWJ1Zy5vdXRQdHIoKSk7CkBAIC0yMTAsMTMgKzE5OSwxMiBAQCBnYm9vbGVhbiBB
dWRpb0ZpbGVSZWFkZXI6OmhhbmRsZU1lc3NhZ2UoR3N0TWVzc2FnZSogbWVzc2FnZSkKICAgICAg
ICAgZ3N0X21lc3NhZ2VfcGFyc2VfZXJyb3IobWVzc2FnZSwgJmVycm9yLm91dFB0cigpLCAmZGVi
dWcub3V0UHRyKCkpOwogICAgICAgICBnX3dhcm5pbmcoIkVycm9yOiAlZCwgJXMuIERlYnVnIG91
dHB1dDogJXMiLCBlcnJvci0+Y29kZSwgIGVycm9yLT5tZXNzYWdlLCBkZWJ1Zy5nZXQoKSk7CiAg
ICAgICAgIG1fZXJyb3JPY2N1cnJlZCA9IHRydWU7Ci0gICAgICAgIGdzdF9lbGVtZW50X3NldF9z
dGF0ZShtX3BpcGVsaW5lLCBHU1RfU1RBVEVfTlVMTCk7Ci0gICAgICAgIGdfbWFpbl9sb29wX3F1
aXQobV9sb29wLmdldCgpKTsKKyAgICAgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKG1fcGlwZWxp
bmUuZ2V0KCksIEdTVF9TVEFURV9OVUxMKTsKKyAgICAgICAgbV9ydW5Mb29wLnN0b3AoKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIHJl
dHVybiBUUlVFOwogfQogCiB2b2lkIEF1ZGlvRmlsZVJlYWRlcjo6aGFuZGxlTmV3RGVpbnRlcmxl
YXZlUGFkKEdzdFBhZCogcGFkKQpAQCAtMjI4LDE5ICsyMTYsMjMgQEAgdm9pZCBBdWRpb0ZpbGVS
ZWFkZXI6OmhhbmRsZU5ld0RlaW50ZXJsZWF2ZVBhZChHc3RQYWQqIHBhZCkKICAgICBHc3RFbGVt
ZW50KiBxdWV1ZSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgicXVldWUiLCAwKTsKICAgICBH
c3RFbGVtZW50KiBzaW5rID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJhcHBzaW5rIiwgMCk7
CiAKLSAgICBHc3RBcHBTaW5rQ2FsbGJhY2tzIGNhbGxiYWNrczsKLSAgICBjYWxsYmFja3MuZW9z
ID0gMDsKLSAgICBjYWxsYmFja3MubmV3X3ByZXJvbGwgPSAwOwotICAgIGNhbGxiYWNrcy5uZXdf
c2FtcGxlID0gb25BcHBzaW5rUHVsbFJlcXVpcmVkQ2FsbGJhY2s7CisgICAgc3RhdGljIEdzdEFw
cFNpbmtDYWxsYmFja3MgY2FsbGJhY2tzID0geworICAgICAgICBudWxscHRyLCAvLyBlb3MKKyAg
ICAgICAgbnVsbHB0ciwgLy8gbmV3X3ByZXJvbGwKKyAgICAgICAgLy8gbmV3X3NhbXBsZQorICAg
ICAgICBbXShHc3RBcHBTaW5rKiBzaW5rLCBncG9pbnRlciB1c2VyRGF0YSkgLT4gR3N0Rmxvd1Jl
dHVybiB7CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QXVkaW9GaWxlUmVhZGVyKj4o
dXNlckRhdGEpLT5oYW5kbGVTYW1wbGUoc2luayk7CisgICAgICAgIH0sCisgICAgICAgIHsgbnVs
bHB0ciB9CisgICAgfTsKICAgICBnc3RfYXBwX3Npbmtfc2V0X2NhbGxiYWNrcyhHU1RfQVBQX1NJ
Tksoc2luayksICZjYWxsYmFja3MsIHRoaXMsIDApOwogCiAgICAgZ19vYmplY3Rfc2V0KHNpbmss
ICJzeW5jIiwgRkFMU0UsIE5VTEwpOwogCi0gICAgZ3N0X2Jpbl9hZGRfbWFueShHU1RfQklOKG1f
cGlwZWxpbmUpLCBxdWV1ZSwgc2luaywgTlVMTCk7CisgICAgZ3N0X2Jpbl9hZGRfbWFueShHU1Rf
QklOKG1fcGlwZWxpbmUuZ2V0KCkpLCBxdWV1ZSwgc2luaywgbnVsbHB0cik7CiAKLSAgICBHc3RQ
YWQqIHNpbmtQYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZChxdWV1ZSwgInNpbmsiKTsK
LSAgICBnc3RfcGFkX2xpbmtfZnVsbChwYWQsIHNpbmtQYWQsIEdTVF9QQURfTElOS19DSEVDS19O
T1RISU5HKTsKLSAgICBnc3Rfb2JqZWN0X3VucmVmKEdTVF9PQkpFQ1Qoc2lua1BhZCkpOworICAg
IEdSZWZQdHI8R3N0UGFkPiBzaW5rUGFkID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9zdGF0
aWNfcGFkKHF1ZXVlLCAic2luayIpKTsKKyAgICBnc3RfcGFkX2xpbmtfZnVsbChwYWQsIHNpbmtQ
YWQuZ2V0KCksIEdTVF9QQURfTElOS19DSEVDS19OT1RISU5HKTsKIAogICAgIGdzdF9lbGVtZW50
X2xpbmtfcGFkc19mdWxsKHF1ZXVlLCAic3JjIiwgc2luaywgInNpbmsiLCBHU1RfUEFEX0xJTktf
Q0hFQ0tfTk9USElORyk7CiAKQEAgLTI1Miw3ICsyNDQsNyBAQCB2b2lkIEF1ZGlvRmlsZVJlYWRl
cjo6ZGVpbnRlcmxlYXZlUGFkc0NvbmZpZ3VyZWQoKQogewogICAgIC8vIEFsbCBkZWludGVybGVh
dmUgc3JjIHBhZHMgYXJlIG5vdyBhdmFpbGFibGUsIGxldCdzIHJvbGwgdG8KICAgICAvLyBQTEFZ
SU5HIHNvIGRhdGEgZmxvd3MgdG93YXJkcyB0aGUgc2lua3MgYW5kIGl0IGNhbiBiZSByZXRyaWV2
ZWQuCi0gICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKG1fcGlwZWxpbmUsIEdTVF9TVEFURV9QTEFZ
SU5HKTsKKyAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUobV9waXBlbGluZS5nZXQoKSwgR1NUX1NU
QVRFX1BMQVlJTkcpOwogfQogCiB2b2lkIEF1ZGlvRmlsZVJlYWRlcjo6cGx1Z0RlaW50ZXJsZWF2
ZShHc3RQYWQqIHBhZCkKQEAgLTI3MCwyMiArMjYyLDIwIEBAIHZvaWQgQXVkaW9GaWxlUmVhZGVy
OjpwbHVnRGVpbnRlcmxlYXZlKEdzdFBhZCogcGFkKQogICAgIG1fZGVJbnRlcmxlYXZlID0gZ3N0
X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJkZWludGVybGVhdmUiLCAiZGVpbnRlcmxlYXZlIik7CiAK
ICAgICBnX29iamVjdF9zZXQobV9kZUludGVybGVhdmUuZ2V0KCksICJrZWVwLXBvc2l0aW9ucyIs
IFRSVUUsIE5VTEwpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9kZUludGVybGVhdmUuZ2V0KCks
ICJwYWQtYWRkZWQiLCBHX0NBTExCQUNLKG9uR1N0cmVhbWVyRGVpbnRlcmxlYXZlUGFkQWRkZWRD
YWxsYmFjayksIHRoaXMpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9kZUludGVybGVhdmUuZ2V0
KCksICJuby1tb3JlLXBhZHMiLCBHX0NBTExCQUNLKG9uR1N0cmVhbWVyRGVpbnRlcmxlYXZlUmVh
ZHlDYWxsYmFjayksIHRoaXMpOworICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChtX2RlSW50
ZXJsZWF2ZS5nZXQoKSwgInBhZC1hZGRlZCIsIEdfQ0FMTEJBQ0soZGVpbnRlcmxlYXZlUGFkQWRk
ZWRDYWxsYmFjayksIHRoaXMpOworICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChtX2RlSW50
ZXJsZWF2ZS5nZXQoKSwgIm5vLW1vcmUtcGFkcyIsIEdfQ0FMTEJBQ0soZGVpbnRlcmxlYXZlUmVh
ZHlDYWxsYmFjayksIHRoaXMpOwogCi0gICAgR3N0Q2FwcyogY2FwcyA9IGdzdF9jYXBzX25ld19z
aW1wbGUoImF1ZGlvL3gtcmF3IiwKKyAgICBHUmVmUHRyPEdzdENhcHM+IGNhcHMgPSBhZG9wdEdS
ZWYoZ3N0X2NhcHNfbmV3X3NpbXBsZSgiYXVkaW8veC1yYXciLAogICAgICAgICAicmF0ZSIsIEdf
VFlQRV9JTlQsIHN0YXRpY19jYXN0PGludD4obV9zYW1wbGVSYXRlKSwKICAgICAgICAgImNoYW5u
ZWxzIiwgR19UWVBFX0lOVCwgbV9jaGFubmVscywKICAgICAgICAgImZvcm1hdCIsIEdfVFlQRV9T
VFJJTkcsIEdTVF9BVURJT19ORShGMzIpLAotICAgICAgICAibGF5b3V0IiwgR19UWVBFX1NUUklO
RywgImludGVybGVhdmVkIiwgbnVsbHB0cik7Ci0gICAgZ19vYmplY3Rfc2V0KGNhcHNGaWx0ZXIs
ICJjYXBzIiwgY2FwcywgTlVMTCk7Ci0gICAgZ3N0X2NhcHNfdW5yZWYoY2Fwcyk7CisgICAgICAg
ICJsYXlvdXQiLCBHX1RZUEVfU1RSSU5HLCAiaW50ZXJsZWF2ZWQiLCBudWxscHRyKSk7CisgICAg
Z19vYmplY3Rfc2V0KGNhcHNGaWx0ZXIsICJjYXBzIiwgY2Fwcy5nZXQoKSwgbnVsbHB0cik7CiAK
LSAgICBnc3RfYmluX2FkZF9tYW55KEdTVF9CSU4obV9waXBlbGluZSksIGF1ZGlvQ29udmVydCwg
YXVkaW9SZXNhbXBsZSwgY2Fwc0ZpbHRlciwgbV9kZUludGVybGVhdmUuZ2V0KCksIE5VTEwpOwor
ICAgIGdzdF9iaW5fYWRkX21hbnkoR1NUX0JJTihtX3BpcGVsaW5lLmdldCgpKSwgYXVkaW9Db252
ZXJ0LCBhdWRpb1Jlc2FtcGxlLCBjYXBzRmlsdGVyLCBtX2RlSW50ZXJsZWF2ZS5nZXQoKSwgbnVs
bHB0cik7CiAKLSAgICBHc3RQYWQqIHNpbmtQYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3Bh
ZChhdWRpb0NvbnZlcnQsICJzaW5rIik7Ci0gICAgZ3N0X3BhZF9saW5rX2Z1bGwocGFkLCBzaW5r
UGFkLCBHU1RfUEFEX0xJTktfQ0hFQ0tfTk9USElORyk7Ci0gICAgZ3N0X29iamVjdF91bnJlZihH
U1RfT0JKRUNUKHNpbmtQYWQpKTsKKyAgICBHUmVmUHRyPEdzdFBhZD4gc2lua1BhZCA9IGFkb3B0
R1JlZihnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZChhdWRpb0NvbnZlcnQsICJzaW5rIikpOwor
ICAgIGdzdF9wYWRfbGlua19mdWxsKHBhZCwgc2lua1BhZC5nZXQoKSwgR1NUX1BBRF9MSU5LX0NI
RUNLX05PVEhJTkcpOwogCiAgICAgZ3N0X2VsZW1lbnRfbGlua19wYWRzX2Z1bGwoYXVkaW9Db252
ZXJ0LCAic3JjIiwgYXVkaW9SZXNhbXBsZSwgInNpbmsiLCBHU1RfUEFEX0xJTktfQ0hFQ0tfTk9U
SElORyk7CiAgICAgZ3N0X2VsZW1lbnRfbGlua19wYWRzX2Z1bGwoYXVkaW9SZXNhbXBsZSwgInNy
YyIsIGNhcHNGaWx0ZXIsICJzaW5rIiwgR1NUX1BBRF9MSU5LX0NIRUNLX05PVEhJTkcpOwpAQCAt
Mjk5LDE0ICsyODksMjkgQEAgdm9pZCBBdWRpb0ZpbGVSZWFkZXI6OnBsdWdEZWludGVybGVhdmUo
R3N0UGFkKiBwYWQpCiAKIHZvaWQgQXVkaW9GaWxlUmVhZGVyOjpkZWNvZGVBdWRpb0ZvckJ1c0Ny
ZWF0aW9uKCkKIHsKKyAgICBBU1NFUlQoJm1fcnVuTG9vcCA9PSAmUnVuTG9vcDo6Y3VycmVudCgp
KTsKKwogICAgIC8vIEJ1aWxkIHRoZSBwaXBlbGluZSAoZ2lvc3RyZWFtc3JjIHwgZmlsZXNyYykg
ISBkZWNvZGViaW4yCiAgICAgLy8gQSBkZWludGVybGVhdmUgZWxlbWVudCBpcyBhZGRlZCBvbmNl
IGEgc3JjIHBhZCBiZWNvbWVzIGF2YWlsYWJsZSBpbiBkZWNvZGViaW4uCi0gICAgbV9waXBlbGlu
ZSA9IGdzdF9waXBlbGluZV9uZXcoMCk7CisgICAgbV9waXBlbGluZSA9IGdzdF9waXBlbGluZV9u
ZXcobnVsbHB0cik7CiAKLSAgICBHUmVmUHRyPEdzdEJ1cz4gYnVzID0gYWRvcHRHUmVmKGdzdF9w
aXBlbGluZV9nZXRfYnVzKEdTVF9QSVBFTElORShtX3BpcGVsaW5lKSkpOworICAgIEdSZWZQdHI8
R3N0QnVzPiBidXMgPSBhZG9wdEdSZWYoZ3N0X3BpcGVsaW5lX2dldF9idXMoR1NUX1BJUEVMSU5F
KG1fcGlwZWxpbmUuZ2V0KCkpKSk7CiAgICAgQVNTRVJUKGJ1cyk7Ci0gICAgZ3N0X2J1c19hZGRf
c2lnbmFsX3dhdGNoKGJ1cy5nZXQoKSk7Ci0gICAgZ19zaWduYWxfY29ubmVjdChidXMuZ2V0KCks
ICJtZXNzYWdlIiwgR19DQUxMQkFDSyhtZXNzYWdlQ2FsbGJhY2spLCB0aGlzKTsKKyAgICBnc3Rf
YnVzX3NldF9zeW5jX2hhbmRsZXIoYnVzLmdldCgpLCBbXShHc3RCdXMqLCBHc3RNZXNzYWdlKiBt
ZXNzYWdlLCBncG9pbnRlciB1c2VyRGF0YSkgeworICAgICAgICBhdXRvJiByZWFkZXIgPSAqc3Rh
dGljX2Nhc3Q8QXVkaW9GaWxlUmVhZGVyKj4odXNlckRhdGEpOworICAgICAgICBpZiAoJnJlYWRl
ci5tX3J1bkxvb3AgPT0gJlJ1bkxvb3A6OmN1cnJlbnQoKSkKKyAgICAgICAgICAgIHJlYWRlci5o
YW5kbGVNZXNzYWdlKG1lc3NhZ2UpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIEdSZWZQ
dHI8R3N0TWVzc2FnZT4gcHJvdGVjdE1lc3NhZ2UobWVzc2FnZSk7CisgICAgICAgICAgICBhdXRv
IHdlYWtUaGlzID0gcmVhZGVyLmNyZWF0ZVdlYWtQdHIoKTsKKyAgICAgICAgICAgIHJlYWRlci5t
X3J1bkxvb3AuZGlzcGF0Y2goW3dlYWtUaGlzLCBwcm90ZWN0TWVzc2FnZV0geworICAgICAgICAg
ICAgICAgIGlmICh3ZWFrVGhpcykKKyAgICAgICAgICAgICAgICAgICAgd2Vha1RoaXMtPmhhbmRs
ZU1lc3NhZ2UocHJvdGVjdE1lc3NhZ2UuZ2V0KCkpOworICAgICAgICAgICAgfSk7CisgICAgICAg
IH0KKyAgICAgICAgZ3N0X21lc3NhZ2VfdW5yZWYobWVzc2FnZSk7CisgICAgICAgIHJldHVybiBH
U1RfQlVTX0RST1A7CisgICAgfSwgdGhpcywgbnVsbHB0cik7CiAKICAgICBHc3RFbGVtZW50KiBz
b3VyY2U7CiAgICAgaWYgKG1fZGF0YSkgewpAQCAtMzIwLDE3ICszMjUsMTYgQEAgdm9pZCBBdWRp
b0ZpbGVSZWFkZXI6OmRlY29kZUF1ZGlvRm9yQnVzQ3JlYXRpb24oKQogICAgIH0KIAogICAgIG1f
ZGVjb2RlYmluID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJkZWNvZGViaW4iLCAiZGVjb2Rl
YmluIik7Ci0gICAgZ19zaWduYWxfY29ubmVjdChtX2RlY29kZWJpbi5nZXQoKSwgInBhZC1hZGRl
ZCIsIEdfQ0FMTEJBQ0sob25HU3RyZWFtZXJEZWNvZGViaW5QYWRBZGRlZENhbGxiYWNrKSwgdGhp
cyk7CisgICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKG1fZGVjb2RlYmluLmdldCgpLCAicGFk
LWFkZGVkIiwgR19DQUxMQkFDSyhkZWNvZGViaW5QYWRBZGRlZENhbGxiYWNrKSwgdGhpcyk7CiAK
LSAgICBnc3RfYmluX2FkZF9tYW55KEdTVF9CSU4obV9waXBlbGluZSksIHNvdXJjZSwgbV9kZWNv
ZGViaW4uZ2V0KCksIE5VTEwpOworICAgIGdzdF9iaW5fYWRkX21hbnkoR1NUX0JJTihtX3BpcGVs
aW5lLmdldCgpKSwgc291cmNlLCBtX2RlY29kZWJpbi5nZXQoKSwgTlVMTCk7CiAgICAgZ3N0X2Vs
ZW1lbnRfbGlua19wYWRzX2Z1bGwoc291cmNlLCAic3JjIiwgbV9kZWNvZGViaW4uZ2V0KCksICJz
aW5rIiwgR1NUX1BBRF9MSU5LX0NIRUNLX05PVEhJTkcpOwogCi0gICAgLy8gQ2F0Y2ggZXJyb3Jz
IGhlcmUgaW1tZWRpYXRlbHksIHRoZXJlIG1pZ2h0IG5vdCBiZSBhbiBlcnJvciBtZXNzYWdlIGlm
Ci0gICAgLy8gd2UncmUgdW5sdWNreS4KLSAgICBpZiAoZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKG1f
cGlwZWxpbmUsIEdTVF9TVEFURV9QQVVTRUQpID09IEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRSkg
eworICAgIC8vIENhdGNoIGVycm9ycyBoZXJlIGltbWVkaWF0ZWx5LCB0aGVyZSBtaWdodCBub3Qg
YmUgYW4gZXJyb3IgbWVzc2FnZSBpZiB3ZSdyZSB1bmx1Y2t5LgorICAgIGlmIChnc3RfZWxlbWVu
dF9zZXRfc3RhdGUobV9waXBlbGluZS5nZXQoKSwgR1NUX1NUQVRFX1BBVVNFRCkgPT0gR1NUX1NU
QVRFX0NIQU5HRV9GQUlMVVJFKSB7CiAgICAgICAgIGdfd2FybmluZygiRXJyb3I6IEZhaWxlZCB0
byBzZXQgcGlwZWxpbmUgdG8gUEFVU0VEIik7CiAgICAgICAgIG1fZXJyb3JPY2N1cnJlZCA9IHRy
dWU7Ci0gICAgICAgIGdfbWFpbl9sb29wX3F1aXQobV9sb29wLmdldCgpKTsKKyAgICAgICAgbV9y
dW5Mb29wLnN0b3AoKTsKICAgICB9CiB9CiAKQEAgLTMzOSw0NCArMzQzLDU1IEBAIFBhc3NSZWZQ
dHI8QXVkaW9CdXM+IEF1ZGlvRmlsZVJlYWRlcjo6Y3JlYXRlQnVzKGZsb2F0IHNhbXBsZVJhdGUs
IGJvb2wgbWl4VG9Nb25vCiAgICAgbV9zYW1wbGVSYXRlID0gc2FtcGxlUmF0ZTsKICAgICBtX2No
YW5uZWxzID0gbWl4VG9Nb25vID8gMSA6IDI7CiAKLSAgICBtX2Zyb250TGVmdEJ1ZmZlcnMgPSBn
c3RfYnVmZmVyX2xpc3RfbmV3KCk7Ci0gICAgbV9mcm9udFJpZ2h0QnVmZmVycyA9IGdzdF9idWZm
ZXJfbGlzdF9uZXcoKTsKLQotICAgIEdSZWZQdHI8R01haW5Db250ZXh0PiBjb250ZXh0ID0gYWRv
cHRHUmVmKGdfbWFpbl9jb250ZXh0X25ldygpKTsKLSAgICBnX21haW5fY29udGV4dF9wdXNoX3Ro
cmVhZF9kZWZhdWx0KGNvbnRleHQuZ2V0KCkpOwotICAgIG1fbG9vcCA9IGFkb3B0R1JlZihnX21h
aW5fbG9vcF9uZXcoY29udGV4dC5nZXQoKSwgRkFMU0UpKTsKKyAgICBtX2Zyb250TGVmdEJ1ZmZl
cnMgPSBhZG9wdEdSZWYoZ3N0X2J1ZmZlcl9saXN0X25ldygpKTsKKyAgICBtX2Zyb250UmlnaHRC
dWZmZXJzID0gYWRvcHRHUmVmKGdzdF9idWZmZXJfbGlzdF9uZXcoKSk7CiAKICAgICAvLyBTdGFy
dCB0aGUgcGlwZWxpbmUgcHJvY2Vzc2luZyBqdXN0IGFmdGVyIHRoZSBsb29wIGlzIHN0YXJ0ZWQu
Ci0gICAgR1RocmVhZFNhZmVNYWluTG9vcFNvdXJjZSBzb3VyY2U7Ci0gICAgc291cmNlLnNjaGVk
dWxlKCJbV2ViS2l0XSBBdWRpb0ZpbGVSZWFkZXI6OmRlY29kZUF1ZGlvRm9yQnVzQ3JlYXRpb24i
LCBbdGhpc10geyBkZWNvZGVBdWRpb0ZvckJ1c0NyZWF0aW9uKCk7IH0sIEdfUFJJT1JJVFlfREVG
QVVMVCwgbnVsbHB0ciwgY29udGV4dC5nZXQoKSk7Ci0KLSAgICBnX21haW5fbG9vcF9ydW4obV9s
b29wLmdldCgpKTsKLSAgICBnX21haW5fY29udGV4dF9wb3BfdGhyZWFkX2RlZmF1bHQoY29udGV4
dC5nZXQoKSk7CisgICAgbV9ydW5Mb29wLmRpc3BhdGNoKFt0aGlzXSB7IGRlY29kZUF1ZGlvRm9y
QnVzQ3JlYXRpb24oKTsgfSk7CisgICAgbV9ydW5Mb29wLnJ1bigpOwogCiAgICAgLy8gU2V0IHBp
cGVsaW5lIHRvIEdTVF9TVEFURV9OVUxMIHN0YXRlIGhlcmUgYWxyZWFkeSBBU0FQIHRvCiAgICAg
Ly8gcmVsZWFzZSBhbnkgcmVzb3VyY2VzIHRoYXQgbWlnaHQgc3RpbGwgYmUgdXNlZC4KLSAgICBn
c3RfZWxlbWVudF9zZXRfc3RhdGUobV9waXBlbGluZSwgR1NUX1NUQVRFX05VTEwpOworICAgIGdz
dF9lbGVtZW50X3NldF9zdGF0ZShtX3BpcGVsaW5lLmdldCgpLCBHU1RfU1RBVEVfTlVMTCk7CiAK
ICAgICBpZiAobV9lcnJvck9jY3VycmVkKQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAKICAgICBSZWZQdHI8QXVkaW9CdXM+IGF1ZGlvQnVzID0gQXVkaW9CdXM6
OmNyZWF0ZShtX2NoYW5uZWxzLCBtX2NoYW5uZWxTaXplLCB0cnVlKTsKICAgICBhdWRpb0J1cy0+
c2V0U2FtcGxlUmF0ZShtX3NhbXBsZVJhdGUpOwogCi0gICAgY29weUdzdHJlYW1lckJ1ZmZlcnNU
b0F1ZGlvQ2hhbm5lbChtX2Zyb250TGVmdEJ1ZmZlcnMsIGF1ZGlvQnVzLT5jaGFubmVsKDApKTsK
KyAgICBjb3B5R3N0cmVhbWVyQnVmZmVyc1RvQXVkaW9DaGFubmVsKG1fZnJvbnRMZWZ0QnVmZmVy
cy5nZXQoKSwgYXVkaW9CdXMtPmNoYW5uZWwoMCkpOwogICAgIGlmICghbWl4VG9Nb25vKQotICAg
ICAgICBjb3B5R3N0cmVhbWVyQnVmZmVyc1RvQXVkaW9DaGFubmVsKG1fZnJvbnRSaWdodEJ1ZmZl
cnMsIGF1ZGlvQnVzLT5jaGFubmVsKDEpKTsKKyAgICAgICAgY29weUdzdHJlYW1lckJ1ZmZlcnNU
b0F1ZGlvQ2hhbm5lbChtX2Zyb250UmlnaHRCdWZmZXJzLmdldCgpLCBhdWRpb0J1cy0+Y2hhbm5l
bCgxKSk7CiAKICAgICByZXR1cm4gYXVkaW9CdXM7CiB9CiAKIFBhc3NSZWZQdHI8QXVkaW9CdXM+
IGNyZWF0ZUJ1c0Zyb21BdWRpb0ZpbGUoY29uc3QgY2hhciogZmlsZVBhdGgsIGJvb2wgbWl4VG9N
b25vLCBmbG9hdCBzYW1wbGVSYXRlKQogeworICAgIGlmIChpc01haW5UaHJlYWQoKSkgeworICAg
ICAgICBSZWZQdHI8QXVkaW9CdXM+IHJldHVyblZhbHVlOworICAgICAgICBhdXRvIHRocmVhZElE
ID0gY3JlYXRlVGhyZWFkKCJBdWRpb0ZpbGVSZWFkZXIiLCBbJnJldHVyblZhbHVlLCBmaWxlUGF0
aCwgbWl4VG9Nb25vLCBzYW1wbGVSYXRlXSB7CisgICAgICAgICAgICByZXR1cm5WYWx1ZSA9IEF1
ZGlvRmlsZVJlYWRlcihmaWxlUGF0aCkuY3JlYXRlQnVzKHNhbXBsZVJhdGUsIG1peFRvTW9ubyk7
CisgICAgICAgIH0pOworICAgICAgICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbih0aHJlYWRJRCk7
CisKKyAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlOworICAgIH0KICAgICByZXR1cm4gQXVkaW9G
aWxlUmVhZGVyKGZpbGVQYXRoKS5jcmVhdGVCdXMoc2FtcGxlUmF0ZSwgbWl4VG9Nb25vKTsKIH0K
IAogUGFzc1JlZlB0cjxBdWRpb0J1cz4gY3JlYXRlQnVzRnJvbUluTWVtb3J5QXVkaW9GaWxlKGNv
bnN0IHZvaWQqIGRhdGEsIHNpemVfdCBkYXRhU2l6ZSwgYm9vbCBtaXhUb01vbm8sIGZsb2F0IHNh
bXBsZVJhdGUpCiB7CisgICAgaWYgKGlzTWFpblRocmVhZCgpKSB7CisgICAgICAgIFJlZlB0cjxB
dWRpb0J1cz4gcmV0dXJuVmFsdWU7CisgICAgICAgIGF1dG8gdGhyZWFkSUQgPSBjcmVhdGVUaHJl
YWQoIkF1ZGlvRmlsZVJlYWRlciIsIFsmcmV0dXJuVmFsdWUsIGRhdGEsIGRhdGFTaXplLCBtaXhU
b01vbm8sIHNhbXBsZVJhdGVdIHsKKyAgICAgICAgICAgIHJldHVyblZhbHVlID0gQXVkaW9GaWxl
UmVhZGVyKGRhdGEsIGRhdGFTaXplKS5jcmVhdGVCdXMoc2FtcGxlUmF0ZSwgbWl4VG9Nb25vKTsK
KyAgICAgICAgfSk7CisgICAgICAgIHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKHRocmVhZElEKTsK
KworICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWU7CisgICAgfQogICAgIHJldHVybiBBdWRpb0Zp
bGVSZWFkZXIoZGF0YSwgZGF0YVNpemUpLmNyZWF0ZUJ1cyhzYW1wbGVSYXRlLCBtaXhUb01vbm8p
OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3Ry
ZWFtZXIvR1JlZlB0ckdTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9nc3RyZWFtZXIvR1JlZlB0ckdTdHJlYW1lci5jcHAKaW5kZXggODQyZDkzNy4uMDdlYjZl
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVy
L0dSZWZQdHJHU3RyZWFtZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9HUmVmUHRyR1N0cmVhbWVyLmNwcApAQCAtMTgzLDYgKzE4MywyNSBAQCB0
ZW1wbGF0ZTw+IHZvaWQgZGVyZWZHUHRyPEdzdEJ1ZmZlcj4oR3N0QnVmZmVyKiBwdHIpCiAgICAg
ICAgIGdzdF9idWZmZXJfdW5yZWYocHRyKTsKIH0KIAordGVtcGxhdGU8PiBHUmVmUHRyPEdzdEJ1
ZmZlckxpc3Q+IGFkb3B0R1JlZihHc3RCdWZmZXJMaXN0KiBwdHIpCit7CisgICAgcmV0dXJuIEdS
ZWZQdHI8R3N0QnVmZmVyTGlzdD4ocHRyLCBHUmVmUHRyQWRvcHQpOworfQorCit0ZW1wbGF0ZTw+
IEdzdEJ1ZmZlckxpc3QqIHJlZkdQdHI8R3N0QnVmZmVyTGlzdD4oR3N0QnVmZmVyTGlzdCogcHRy
KQoreworICAgIGlmIChwdHIpCisgICAgICAgIGdzdF9idWZmZXJfbGlzdF9yZWYocHRyKTsKKwor
ICAgIHJldHVybiBwdHI7Cit9CisKK3RlbXBsYXRlPD4gdm9pZCBkZXJlZkdQdHI8R3N0QnVmZmVy
TGlzdD4oR3N0QnVmZmVyTGlzdCogcHRyKQoreworICAgIGlmIChwdHIpCisgICAgICAgIGdzdF9i
dWZmZXJfbGlzdF91bnJlZihwdHIpOworfQorCiB0ZW1wbGF0ZTw+IEdSZWZQdHI8R3N0U2FtcGxl
PiBhZG9wdEdSZWYoR3N0U2FtcGxlKiBwdHIpCiB7CiAgICAgcmV0dXJuIEdSZWZQdHI8R3N0U2Ft
cGxlPihwdHIsIEdSZWZQdHJBZG9wdCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1JlZlB0ckdTdHJlYW1lci5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dSZWZQdHJHU3RyZWFtZXIuaAppbmRleCA2
ODAyNDU4Li5mNWVhZjkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9nc3RyZWFtZXIvR1JlZlB0ckdTdHJlYW1lci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HUmVmUHRyR1N0cmVhbWVyLmgKQEAgLTMxLDYgKzMx
LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgX0dzdFRhc2sgR3N0VGFzazsKIHR5cGVkZWYgc3RydWN0IF9H
c3RCdXMgR3N0QnVzOwogdHlwZWRlZiBzdHJ1Y3QgX0dzdEVsZW1lbnRGYWN0b3J5IEdzdEVsZW1l
bnRGYWN0b3J5OwogdHlwZWRlZiBzdHJ1Y3QgX0dzdEJ1ZmZlciBHc3RCdWZmZXI7Cit0eXBlZGVm
IHN0cnVjdCBfR3N0QnVmZmVyTGlzdCBHc3RCdWZmZXJMaXN0OwogdHlwZWRlZiBzdHJ1Y3QgX0dz
dFNhbXBsZSBHc3RTYW1wbGU7CiB0eXBlZGVmIHN0cnVjdCBfR3N0VGFnTGlzdCBHc3RUYWdMaXN0
OwogdHlwZWRlZiBzdHJ1Y3QgX0dzdEV2ZW50IEdzdEV2ZW50OwpAQCAtNzMsNiArNzQsMTAgQEAg
dGVtcGxhdGU8PiBHUmVmUHRyPEdzdEJ1ZmZlcj4gYWRvcHRHUmVmKEdzdEJ1ZmZlciogcHRyKTsK
IHRlbXBsYXRlPD4gR3N0QnVmZmVyKiByZWZHUHRyPEdzdEJ1ZmZlcj4oR3N0QnVmZmVyKiBwdHIp
OwogdGVtcGxhdGU8PiB2b2lkIGRlcmVmR1B0cjxHc3RCdWZmZXI+KEdzdEJ1ZmZlciogcHRyKTsK
IAordGVtcGxhdGU8PiBHUmVmUHRyPEdzdEJ1ZmZlckxpc3Q+IGFkb3B0R1JlZihHc3RCdWZmZXJM
aXN0Kik7Cit0ZW1wbGF0ZTw+IEdzdEJ1ZmZlckxpc3QqIHJlZkdQdHI8R3N0QnVmZmVyTGlzdD4o
R3N0QnVmZmVyTGlzdCopOwordGVtcGxhdGU8PiB2b2lkIGRlcmVmR1B0cjxHc3RCdWZmZXJMaXN0
PihHc3RCdWZmZXJMaXN0Kik7CisKIHRlbXBsYXRlPD4gR1JlZlB0cjxHc3RTYW1wbGU+IGFkb3B0
R1JlZihHc3RTYW1wbGUqIHB0cik7CiB0ZW1wbGF0ZTw+IEdzdFNhbXBsZSogcmVmR1B0cjxHc3RT
YW1wbGU+KEdzdFNhbXBsZSogcHRyKTsKIHRlbXBsYXRlPD4gdm9pZCBkZXJlZkdQdHI8R3N0U2Ft
cGxlPihHc3RTYW1wbGUqIHB0cik7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>265573</attachid>
            <date>2015-11-16 01:00:19 -0800</date>
            <delta_ts>2015-11-16 01:13:19 -0800</delta_ts>
            <desc>Updated patch</desc>
            <filename>wcore-gst-webaudio-run-loop.diff</filename>
            <type>text/plain</type>
            <size>22497</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAyOTQ2YjI1Li43ZTJlYTJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDgg
QEAKKzIwMTUtMTEtMTMgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtHU3RyZWFtZXJdIFVzZSBSdW5Mb29wIGluc3RlYWQgb2YgR01haW5Mb29w
IGluIEF1ZGlvRmlsZVJlYWRlckdTdHJlYW1lcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUxMjU2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgVXNlIFJ1bkxvb3AgaW5zdGVhZCBvZiB0aGUgcGxhdGZvcm0g
c3BlY2lmaWMgY29kZS4gVGhlIEF1ZGlvQnVzCisgICAgICAgIGNhbiBiZSBjcmVhdGVkIGZyb20g
YW55IHRocmVhZCwgc28gd2UgY3JlYXRlIGEgaGVscGVyIHRocmVhZCB0bworICAgICAgICBlbnN1
cmUgd2UgZG9uJ3QgdXNlIHRoZSBtYWluIFJ1bkxvb3AuCisKKyAgICAgICAgVGhpcyBwYXRjaCBh
bHNvIGluY2x1ZGVzIHNvbWUgY29kZSBjbGVhbnVwczoKKyAgICAgICAgICAtIFVzZXMgc21hcnQg
cG9pbnRlcnMgd2hlbiBwb3NzaWJsZS4KKyAgICAgICAgICAtIEZpeGVzIHVuaW5pdGlhbGl6ZWQg
bWVtYmVycyBpbiBjb25zdHJ1Y3RvcnMuCisgICAgICAgICAgLSBNYWtlcyBwcml2YXRlIG1lbWJl
cnMgcHJpdmF0ZS4KKyAgICAgICAgICAtIFVzZXMgbGFtYmRhcyBpbnN0ZWFkIG9mIHN0YXRpYyBu
b24tbWVtYmVycyBmdW5jdGlvbnMuCisgICAgICAgICAgLSBudWxscHRyIGluc3RlYWQgb2YgMCBp
biBzb21lIHBsYWNlcy4KKworICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL2dzdHJlYW1lci9BdWRp
b0ZpbGVSZWFkZXJHU3RyZWFtZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9GaWxlUmVh
ZGVyOjpjcmVhdGVXZWFrUHRyKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvRmlsZVJlYWRlcjo6
ZGVpbnRlcmxlYXZlUGFkQWRkZWRDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0Zp
bGVSZWFkZXI6OmRlaW50ZXJsZWF2ZVJlYWR5Q2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6
QXVkaW9GaWxlUmVhZGVyOjpkZWNvZGViaW5QYWRBZGRlZENhbGxiYWNrKToKKyAgICAgICAgKFdl
YkNvcmU6OkF1ZGlvRmlsZVJlYWRlcjo6QXVkaW9GaWxlUmVhZGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkF1ZGlvRmlsZVJlYWRlcjo6fkF1ZGlvRmlsZVJlYWRlcik6CisgICAgICAgIChXZWJDb3Jl
OjpBdWRpb0ZpbGVSZWFkZXI6OmhhbmRsZVNhbXBsZSk6CisgICAgICAgIChXZWJDb3JlOjpBdWRp
b0ZpbGVSZWFkZXI6OmhhbmRsZU1lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9GaWxl
UmVhZGVyOjpoYW5kbGVOZXdEZWludGVybGVhdmVQYWQpOgorICAgICAgICAoV2ViQ29yZTo6QXVk
aW9GaWxlUmVhZGVyOjpkZWludGVybGVhdmVQYWRzQ29uZmlndXJlZCk6CisgICAgICAgIChXZWJD
b3JlOjpBdWRpb0ZpbGVSZWFkZXI6OnBsdWdEZWludGVybGVhdmUpOgorICAgICAgICAoV2ViQ29y
ZTo6QXVkaW9GaWxlUmVhZGVyOjpkZWNvZGVBdWRpb0ZvckJ1c0NyZWF0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OkF1ZGlvRmlsZVJlYWRlcjo6Y3JlYXRlQnVzKToKKyAgICAgICAgKFdlYkNvcmU6
OmNyZWF0ZUJ1c0Zyb21BdWRpb0ZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQnVzRnJv
bUluTWVtb3J5QXVkaW9GaWxlKToKKyAgICAgICAgKFdlYkNvcmU6Om9uQXBwc2lua1B1bGxSZXF1
aXJlZENhbGxiYWNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Om1lc3NhZ2VDYWxsYmFj
ayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpvbkdTdHJlYW1lckRlaW50ZXJsZWF2ZVBh
ZEFkZGVkQ2FsbGJhY2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6b25HU3RyZWFtZXJE
ZWludGVybGVhdmVSZWFkeUNhbGxiYWNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Om9u
R1N0cmVhbWVyRGVjb2RlYmluUGFkQWRkZWRDYWxsYmFjayk6IERlbGV0ZWQuCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dSZWZQdHJHU3RyZWFtZXIuY3BwOgorICAgICAg
ICAoV1RGOjphZG9wdEdSZWYpOgorICAgICAgICAoV1RGOjpyZWZHUHRyPEdzdEJ1ZmZlckxpc3Q+
KToKKyAgICAgICAgKFdURjo6ZGVyZWZHUHRyPEdzdEJ1ZmZlckxpc3Q+KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1JlZlB0ckdTdHJlYW1lci5oOgorCiAyMDE1LTEx
LTE1ICBBZGFtIEJlcmdrdmlzdCAgPGFkYW0uYmVyZ2t2aXN0QGVyaWNzc29uLmNvbT4KIAogICAg
ICAgICBXZWJSVEM6IFVwZGF0ZSBSVENQZWVyQ29ubmVjdGlvbiBBUEkgYW5kIGludHJvZHVjZSBQ
ZWVyQ29ubmVjdGlvbkJhY2tlbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2F1ZGlvL2dzdHJlYW1lci9BdWRpb0ZpbGVSZWFkZXJHU3RyZWFtZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVyL0F1ZGlvRmlsZVJlYWRlckdTdHJlYW1lci5j
cHAKaW5kZXggZjRjMGQ2OC4uOTEyOTQ5OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vYXVkaW8vZ3N0cmVhbWVyL0F1ZGlvRmlsZVJlYWRlckdTdHJlYW1lci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVyL0F1ZGlvRmlsZVJlYWRlckdT
dHJlYW1lci5jcHAKQEAgLTIyLDE2ICsyMiwxOCBAQAogI2lmIEVOQUJMRShXRUJfQVVESU8pCiAK
ICNpbmNsdWRlICJBdWRpb0ZpbGVSZWFkZXIuaCIKLQogI2luY2x1ZGUgIkF1ZGlvQnVzLmgiCi0K
KyNpbmNsdWRlICJHUmVmUHRyR1N0cmVhbWVyLmgiCiAjaW5jbHVkZSA8Z2lvL2dpby5oPgogI2lu
Y2x1ZGUgPGdzdC9hcHAvZ3N0YXBwc2luay5oPgogI2luY2x1ZGUgPGdzdC9hdWRpby9hdWRpby1p
bmZvLmg+CiAjaW5jbHVkZSA8Z3N0L2dzdC5oPgorI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+
CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4K
KyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KICNp
bmNsdWRlIDx3dGYvZ2xpYi9HUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL2dsaWIvR1RocmVhZFNh
ZmVNYWluTG9vcFNvdXJjZS5oPgogI2luY2x1ZGUgPHd0Zi9nbGliL0dVbmlxdWVQdHIuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDUsMjkgKzQ3LDM2IEBAIHB1YmxpYzoKIAogICAgIFBh
c3NSZWZQdHI8QXVkaW9CdXM+IGNyZWF0ZUJ1cyhmbG9hdCBzYW1wbGVSYXRlLCBib29sIG1peFRv
TW9ubyk7CiAKLSAgICBHc3RGbG93UmV0dXJuIGhhbmRsZVNhbXBsZShHc3RBcHBTaW5rKik7Ci0g
ICAgZ2Jvb2xlYW4gaGFuZGxlTWVzc2FnZShHc3RNZXNzYWdlKik7Citwcml2YXRlOgorICAgIFdl
YWtQdHI8QXVkaW9GaWxlUmVhZGVyPiBjcmVhdGVXZWFrUHRyKCkgeyByZXR1cm4gbV93ZWFrUHRy
RmFjdG9yeS5jcmVhdGVXZWFrUHRyKCk7IH0KKworICAgIHN0YXRpYyB2b2lkIGRlaW50ZXJsZWF2
ZVBhZEFkZGVkQ2FsbGJhY2soQXVkaW9GaWxlUmVhZGVyKiwgR3N0UGFkKik7CisgICAgc3RhdGlj
IHZvaWQgZGVpbnRlcmxlYXZlUmVhZHlDYWxsYmFjayhBdWRpb0ZpbGVSZWFkZXIqKTsKKyAgICBz
dGF0aWMgdm9pZCBkZWNvZGViaW5QYWRBZGRlZENhbGxiYWNrKEF1ZGlvRmlsZVJlYWRlciosIEdz
dFBhZCopOworCisgICAgdm9pZCBoYW5kbGVNZXNzYWdlKEdzdE1lc3NhZ2UqKTsKICAgICB2b2lk
IGhhbmRsZU5ld0RlaW50ZXJsZWF2ZVBhZChHc3RQYWQqKTsKICAgICB2b2lkIGRlaW50ZXJsZWF2
ZVBhZHNDb25maWd1cmVkKCk7CiAgICAgdm9pZCBwbHVnRGVpbnRlcmxlYXZlKEdzdFBhZCopOwog
ICAgIHZvaWQgZGVjb2RlQXVkaW9Gb3JCdXNDcmVhdGlvbigpOworICAgIEdzdEZsb3dSZXR1cm4g
aGFuZGxlU2FtcGxlKEdzdEFwcFNpbmsqKTsKIAotcHJpdmF0ZToKLSAgICBjb25zdCB2b2lkKiBt
X2RhdGE7Ci0gICAgc2l6ZV90IG1fZGF0YVNpemU7Ci0gICAgY29uc3QgY2hhciogbV9maWxlUGF0
aDsKKyAgICBXZWFrUHRyRmFjdG9yeTxBdWRpb0ZpbGVSZWFkZXI+IG1fd2Vha1B0ckZhY3Rvcnk7
CisgICAgUnVuTG9vcCYgbV9ydW5Mb29wOworICAgIGNvbnN0IHZvaWQqIG1fZGF0YSB7IG51bGxw
dHIgfTsKKyAgICBzaXplX3QgbV9kYXRhU2l6ZSB7IDAgfTsKKyAgICBjb25zdCBjaGFyKiBtX2Zp
bGVQYXRoIHsgbnVsbHB0ciB9OwogCi0gICAgZmxvYXQgbV9zYW1wbGVSYXRlOwotICAgIGludCBt
X2NoYW5uZWxzOwotICAgIEdzdEJ1ZmZlckxpc3QqIG1fZnJvbnRMZWZ0QnVmZmVyczsKLSAgICBH
c3RCdWZmZXJMaXN0KiBtX2Zyb250UmlnaHRCdWZmZXJzOworICAgIGZsb2F0IG1fc2FtcGxlUmF0
ZSB7IDAgfTsKKyAgICBpbnQgbV9jaGFubmVscyB7IDAgfTsKKyAgICBHUmVmUHRyPEdzdEJ1ZmZl
ckxpc3Q+IG1fZnJvbnRMZWZ0QnVmZmVyczsKKyAgICBHUmVmUHRyPEdzdEJ1ZmZlckxpc3Q+IG1f
ZnJvbnRSaWdodEJ1ZmZlcnM7CiAKLSAgICBHc3RFbGVtZW50KiBtX3BpcGVsaW5lOwotICAgIHVu
c2lnbmVkIG1fY2hhbm5lbFNpemU7CisgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBtX3BpcGVsaW5l
OworICAgIHVuc2lnbmVkIG1fY2hhbm5lbFNpemUgeyAwIH07CiAgICAgR1JlZlB0cjxHc3RFbGVt
ZW50PiBtX2RlY29kZWJpbjsKICAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IG1fZGVJbnRlcmxlYXZl
OwotICAgIEdSZWZQdHI8R01haW5Mb29wPiBtX2xvb3A7Ci0gICAgYm9vbCBtX2Vycm9yT2NjdXJy
ZWQ7CisgICAgYm9vbCBtX2Vycm9yT2NjdXJyZWQgeyBmYWxzZSB9OwogfTsKIAogc3RhdGljIHZv
aWQgY29weUdzdHJlYW1lckJ1ZmZlcnNUb0F1ZGlvQ2hhbm5lbChHc3RCdWZmZXJMaXN0KiBidWZm
ZXJzLCBBdWRpb0NoYW5uZWwqIGF1ZGlvQ2hhbm5lbCkKQEAgLTgzLDkyICs5Miw3MSBAQCBzdGF0
aWMgdm9pZCBjb3B5R3N0cmVhbWVyQnVmZmVyc1RvQXVkaW9DaGFubmVsKEdzdEJ1ZmZlckxpc3Qq
IGJ1ZmZlcnMsIEF1ZGlvQ2hhbgogICAgIH0KIH0KIAotc3RhdGljIEdzdEZsb3dSZXR1cm4gb25B
cHBzaW5rUHVsbFJlcXVpcmVkQ2FsbGJhY2soR3N0QXBwU2luayogc2luaywgZ3BvaW50ZXIgdXNl
ckRhdGEpCi17Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PEF1ZGlvRmlsZVJlYWRlcio+KHVzZXJE
YXRhKS0+aGFuZGxlU2FtcGxlKHNpbmspOwotfQotCi1nYm9vbGVhbiBtZXNzYWdlQ2FsbGJhY2so
R3N0QnVzKiwgR3N0TWVzc2FnZSogbWVzc2FnZSwgQXVkaW9GaWxlUmVhZGVyKiByZWFkZXIpCi17
Ci0gICAgcmV0dXJuIHJlYWRlci0+aGFuZGxlTWVzc2FnZShtZXNzYWdlKTsKLX0KLQotc3RhdGlj
IHZvaWQgb25HU3RyZWFtZXJEZWludGVybGVhdmVQYWRBZGRlZENhbGxiYWNrKEdzdEVsZW1lbnQq
LCBHc3RQYWQqIHBhZCwgQXVkaW9GaWxlUmVhZGVyKiByZWFkZXIpCit2b2lkIEF1ZGlvRmlsZVJl
YWRlcjo6ZGVpbnRlcmxlYXZlUGFkQWRkZWRDYWxsYmFjayhBdWRpb0ZpbGVSZWFkZXIqIHJlYWRl
ciwgR3N0UGFkKiBwYWQpCiB7CiAgICAgcmVhZGVyLT5oYW5kbGVOZXdEZWludGVybGVhdmVQYWQo
cGFkKTsKIH0KIAotc3RhdGljIHZvaWQgb25HU3RyZWFtZXJEZWludGVybGVhdmVSZWFkeUNhbGxi
YWNrKEdzdEVsZW1lbnQqLCBBdWRpb0ZpbGVSZWFkZXIqIHJlYWRlcikKK3ZvaWQgQXVkaW9GaWxl
UmVhZGVyOjpkZWludGVybGVhdmVSZWFkeUNhbGxiYWNrKEF1ZGlvRmlsZVJlYWRlciogcmVhZGVy
KQogewogICAgIHJlYWRlci0+ZGVpbnRlcmxlYXZlUGFkc0NvbmZpZ3VyZWQoKTsKIH0KIAotc3Rh
dGljIHZvaWQgb25HU3RyZWFtZXJEZWNvZGViaW5QYWRBZGRlZENhbGxiYWNrKEdzdEVsZW1lbnQq
LCBHc3RQYWQqIHBhZCwgQXVkaW9GaWxlUmVhZGVyKiByZWFkZXIpCit2b2lkIEF1ZGlvRmlsZVJl
YWRlcjo6ZGVjb2RlYmluUGFkQWRkZWRDYWxsYmFjayhBdWRpb0ZpbGVSZWFkZXIqIHJlYWRlciwg
R3N0UGFkKiBwYWQpCiB7CiAgICAgcmVhZGVyLT5wbHVnRGVpbnRlcmxlYXZlKHBhZCk7CiB9CiAK
IEF1ZGlvRmlsZVJlYWRlcjo6QXVkaW9GaWxlUmVhZGVyKGNvbnN0IGNoYXIqIGZpbGVQYXRoKQot
ICAgIDogbV9kYXRhKDApCi0gICAgLCBtX2RhdGFTaXplKDApCisgICAgOiBtX3dlYWtQdHJGYWN0
b3J5KHRoaXMpCisgICAgLCBtX3J1bkxvb3AoUnVuTG9vcDo6Y3VycmVudCgpKQogICAgICwgbV9m
aWxlUGF0aChmaWxlUGF0aCkKLSAgICAsIG1fY2hhbm5lbFNpemUoMCkKLSAgICAsIG1fZXJyb3JP
Y2N1cnJlZChmYWxzZSkKIHsKIH0KIAogQXVkaW9GaWxlUmVhZGVyOjpBdWRpb0ZpbGVSZWFkZXIo
Y29uc3Qgdm9pZCogZGF0YSwgc2l6ZV90IGRhdGFTaXplKQotICAgIDogbV9kYXRhKGRhdGEpCisg
ICAgOiBtX3dlYWtQdHJGYWN0b3J5KHRoaXMpCisgICAgLCBtX3J1bkxvb3AoUnVuTG9vcDo6Y3Vy
cmVudCgpKQorICAgICwgbV9kYXRhKGRhdGEpCiAgICAgLCBtX2RhdGFTaXplKGRhdGFTaXplKQot
ICAgICwgbV9maWxlUGF0aCgwKQotICAgICwgbV9jaGFubmVsU2l6ZSgwKQotICAgICwgbV9lcnJv
ck9jY3VycmVkKGZhbHNlKQogewogfQogCiBBdWRpb0ZpbGVSZWFkZXI6On5BdWRpb0ZpbGVSZWFk
ZXIoKQogewogICAgIGlmIChtX3BpcGVsaW5lKSB7Ci0gICAgICAgIEdSZWZQdHI8R3N0QnVzPiBi
dXMgPSBhZG9wdEdSZWYoZ3N0X3BpcGVsaW5lX2dldF9idXMoR1NUX1BJUEVMSU5FKG1fcGlwZWxp
bmUpKSk7CisgICAgICAgIEdSZWZQdHI8R3N0QnVzPiBidXMgPSBhZG9wdEdSZWYoZ3N0X3BpcGVs
aW5lX2dldF9idXMoR1NUX1BJUEVMSU5FKG1fcGlwZWxpbmUuZ2V0KCkpKSk7CiAgICAgICAgIEFT
U0VSVChidXMpOwotICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2Z1bmMo
YnVzLmdldCgpLCByZWludGVycHJldF9jYXN0PGdwb2ludGVyPihtZXNzYWdlQ2FsbGJhY2spLCB0
aGlzKTsKKyAgICAgICAgZ3N0X2J1c19zZXRfc3luY19oYW5kbGVyKGJ1cy5nZXQoKSwgbnVsbHB0
ciwgbnVsbHB0ciwgbnVsbHB0cik7CiAKLSAgICAgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKG1f
cGlwZWxpbmUsIEdTVF9TVEFURV9OVUxMKTsKLSAgICAgICAgZ3N0X29iamVjdF91bnJlZihHU1Rf
T0JKRUNUKG1fcGlwZWxpbmUpKTsKKyAgICAgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKG1fcGlw
ZWxpbmUuZ2V0KCksIEdTVF9TVEFURV9OVUxMKTsKKyAgICAgICAgbV9waXBlbGluZSA9IG51bGxw
dHI7CiAgICAgfQogCiAgICAgaWYgKG1fZGVjb2RlYmluKSB7Ci0gICAgICAgIGdfc2lnbmFsX2hh
bmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZnVuYyhtX2RlY29kZWJpbi5nZXQoKSwgcmVpbnRlcnByZXRf
Y2FzdDxncG9pbnRlcj4ob25HU3RyZWFtZXJEZWNvZGViaW5QYWRBZGRlZENhbGxiYWNrKSwgdGhp
cyk7Ci0gICAgICAgIG1fZGVjb2RlYmluLmNsZWFyKCk7CisgICAgICAgIGdfc2lnbmFsX2hhbmRs
ZXJzX2Rpc2Nvbm5lY3RfbWF0Y2hlZChtX2RlY29kZWJpbi5nZXQoKSwgR19TSUdOQUxfTUFUQ0hf
REFUQSwgMCwgMCwgbnVsbHB0ciwgbnVsbHB0ciwgdGhpcyk7CisgICAgICAgIG1fZGVjb2RlYmlu
ID0gbnVsbHB0cjsKICAgICB9CiAKICAgICBpZiAobV9kZUludGVybGVhdmUpIHsKLSAgICAgICAg
Z19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9mdW5jKG1fZGVJbnRlcmxlYXZlLmdldCgp
LCByZWludGVycHJldF9jYXN0PGdwb2ludGVyPihvbkdTdHJlYW1lckRlaW50ZXJsZWF2ZVBhZEFk
ZGVkQ2FsbGJhY2spLCB0aGlzKTsKLSAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVj
dF9ieV9mdW5jKG1fZGVJbnRlcmxlYXZlLmdldCgpLCByZWludGVycHJldF9jYXN0PGdwb2ludGVy
PihvbkdTdHJlYW1lckRlaW50ZXJsZWF2ZVJlYWR5Q2FsbGJhY2spLCB0aGlzKTsKLSAgICAgICAg
bV9kZUludGVybGVhdmUuY2xlYXIoKTsKKyAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29u
bmVjdF9tYXRjaGVkKG1fZGVJbnRlcmxlYXZlLmdldCgpLCBHX1NJR05BTF9NQVRDSF9EQVRBLCAw
LCAwLCBudWxscHRyLCBudWxscHRyLCB0aGlzKTsKKyAgICAgICAgbV9kZUludGVybGVhdmUgPSBu
dWxscHRyOwogICAgIH0KLQotICAgIGdzdF9idWZmZXJfbGlzdF91bnJlZihtX2Zyb250TGVmdEJ1
ZmZlcnMpOwotICAgIGdzdF9idWZmZXJfbGlzdF91bnJlZihtX2Zyb250UmlnaHRCdWZmZXJzKTsK
IH0KIAogR3N0Rmxvd1JldHVybiBBdWRpb0ZpbGVSZWFkZXI6OmhhbmRsZVNhbXBsZShHc3RBcHBT
aW5rKiBzaW5rKQogewotICAgIEdzdFNhbXBsZSogc2FtcGxlID0gZ3N0X2FwcF9zaW5rX3B1bGxf
c2FtcGxlKHNpbmspOworICAgIEdSZWZQdHI8R3N0U2FtcGxlPiBzYW1wbGUgPSBhZG9wdEdSZWYo
Z3N0X2FwcF9zaW5rX3B1bGxfc2FtcGxlKHNpbmspKTsKICAgICBpZiAoIXNhbXBsZSkKICAgICAg
ICAgcmV0dXJuIEdTVF9GTE9XX0VSUk9SOwogCi0gICAgR3N0QnVmZmVyKiBidWZmZXIgPSBnc3Rf
c2FtcGxlX2dldF9idWZmZXIoc2FtcGxlKTsKLSAgICBpZiAoIWJ1ZmZlcikgewotICAgICAgICBn
c3Rfc2FtcGxlX3VucmVmKHNhbXBsZSk7CisgICAgR3N0QnVmZmVyKiBidWZmZXIgPSBnc3Rfc2Ft
cGxlX2dldF9idWZmZXIoc2FtcGxlLmdldCgpKTsKKyAgICBpZiAoIWJ1ZmZlcikKICAgICAgICAg
cmV0dXJuIEdTVF9GTE9XX0VSUk9SOwotICAgIH0KIAotICAgIEdzdENhcHMqIGNhcHMgPSBnc3Rf
c2FtcGxlX2dldF9jYXBzKHNhbXBsZSk7Ci0gICAgaWYgKCFjYXBzKSB7Ci0gICAgICAgIGdzdF9z
YW1wbGVfdW5yZWYoc2FtcGxlKTsKKyAgICBHc3RDYXBzKiBjYXBzID0gZ3N0X3NhbXBsZV9nZXRf
Y2FwcyhzYW1wbGUuZ2V0KCkpOworICAgIGlmICghY2FwcykKICAgICAgICAgcmV0dXJuIEdTVF9G
TE9XX0VSUk9SOwotICAgIH0KIAogICAgIEdzdEF1ZGlvSW5mbyBpbmZvOwogICAgIGdzdF9hdWRp
b19pbmZvX2Zyb21fY2FwcygmaW5mbywgY2Fwcyk7CkBAIC0xNzksMjggKzE2NywyOSBAQCBHc3RG
bG93UmV0dXJuIEF1ZGlvRmlsZVJlYWRlcjo6aGFuZGxlU2FtcGxlKEdzdEFwcFNpbmsqIHNpbmsp
CiAgICAgc3dpdGNoIChHU1RfQVVESU9fSU5GT19QT1NJVElPTigmaW5mbywgMCkpIHsKICAgICBj
YXNlIEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX0ZST05UX0xFRlQ6CiAgICAgY2FzZSBHU1Rf
QVVESU9fQ0hBTk5FTF9QT1NJVElPTl9NT05POgotICAgICAgICBnc3RfYnVmZmVyX2xpc3RfYWRk
KG1fZnJvbnRMZWZ0QnVmZmVycywgZ3N0X2J1ZmZlcl9yZWYoYnVmZmVyKSk7CisgICAgICAgIGdz
dF9idWZmZXJfbGlzdF9hZGQobV9mcm9udExlZnRCdWZmZXJzLmdldCgpLCBnc3RfYnVmZmVyX3Jl
ZihidWZmZXIpKTsKICAgICAgICAgbV9jaGFubmVsU2l6ZSArPSBmcmFtZXM7CiAgICAgICAgIGJy
ZWFrOwogICAgIGNhc2UgR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fRlJPTlRfUklHSFQ6Ci0g
ICAgICAgIGdzdF9idWZmZXJfbGlzdF9hZGQobV9mcm9udFJpZ2h0QnVmZmVycywgZ3N0X2J1ZmZl
cl9yZWYoYnVmZmVyKSk7CisgICAgICAgIGdzdF9idWZmZXJfbGlzdF9hZGQobV9mcm9udFJpZ2h0
QnVmZmVycy5nZXQoKSwgZ3N0X2J1ZmZlcl9yZWYoYnVmZmVyKSk7CiAgICAgICAgIGJyZWFrOwog
ICAgIGRlZmF1bHQ6CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIGdzdF9zYW1wbGVfdW5y
ZWYoc2FtcGxlKTsKICAgICByZXR1cm4gR1NUX0ZMT1dfT0s7CiB9CiAKLWdib29sZWFuIEF1ZGlv
RmlsZVJlYWRlcjo6aGFuZGxlTWVzc2FnZShHc3RNZXNzYWdlKiBtZXNzYWdlKQordm9pZCBBdWRp
b0ZpbGVSZWFkZXI6OmhhbmRsZU1lc3NhZ2UoR3N0TWVzc2FnZSogbWVzc2FnZSkKIHsKKyAgICBB
U1NFUlQoJm1fcnVuTG9vcCA9PSAmUnVuTG9vcDo6Y3VycmVudCgpKTsKKwogICAgIEdVbmlxdWVP
dXRQdHI8R0Vycm9yPiBlcnJvcjsKICAgICBHVW5pcXVlT3V0UHRyPGdjaGFyPiBkZWJ1ZzsKIAog
ICAgIHN3aXRjaCAoR1NUX01FU1NBR0VfVFlQRShtZXNzYWdlKSkgewogICAgIGNhc2UgR1NUX01F
U1NBR0VfRU9TOgotICAgICAgICBnX21haW5fbG9vcF9xdWl0KG1fbG9vcC5nZXQoKSk7CisgICAg
ICAgIG1fcnVuTG9vcC5zdG9wKCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgR1NUX01FU1NB
R0VfV0FSTklORzoKICAgICAgICAgZ3N0X21lc3NhZ2VfcGFyc2Vfd2FybmluZyhtZXNzYWdlLCAm
ZXJyb3Iub3V0UHRyKCksICZkZWJ1Zy5vdXRQdHIoKSk7CkBAIC0yMTAsMTMgKzE5OSwxMiBAQCBn
Ym9vbGVhbiBBdWRpb0ZpbGVSZWFkZXI6OmhhbmRsZU1lc3NhZ2UoR3N0TWVzc2FnZSogbWVzc2Fn
ZSkKICAgICAgICAgZ3N0X21lc3NhZ2VfcGFyc2VfZXJyb3IobWVzc2FnZSwgJmVycm9yLm91dFB0
cigpLCAmZGVidWcub3V0UHRyKCkpOwogICAgICAgICBnX3dhcm5pbmcoIkVycm9yOiAlZCwgJXMu
IERlYnVnIG91dHB1dDogJXMiLCBlcnJvci0+Y29kZSwgIGVycm9yLT5tZXNzYWdlLCBkZWJ1Zy5n
ZXQoKSk7CiAgICAgICAgIG1fZXJyb3JPY2N1cnJlZCA9IHRydWU7Ci0gICAgICAgIGdzdF9lbGVt
ZW50X3NldF9zdGF0ZShtX3BpcGVsaW5lLCBHU1RfU1RBVEVfTlVMTCk7Ci0gICAgICAgIGdfbWFp
bl9sb29wX3F1aXQobV9sb29wLmdldCgpKTsKKyAgICAgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRl
KG1fcGlwZWxpbmUuZ2V0KCksIEdTVF9TVEFURV9OVUxMKTsKKyAgICAgICAgbV9ydW5Mb29wLnN0
b3AoKTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgYnJlYWs7CiAgICAg
fQotICAgIHJldHVybiBUUlVFOwogfQogCiB2b2lkIEF1ZGlvRmlsZVJlYWRlcjo6aGFuZGxlTmV3
RGVpbnRlcmxlYXZlUGFkKEdzdFBhZCogcGFkKQpAQCAtMjI4LDE5ICsyMTYsMjMgQEAgdm9pZCBB
dWRpb0ZpbGVSZWFkZXI6OmhhbmRsZU5ld0RlaW50ZXJsZWF2ZVBhZChHc3RQYWQqIHBhZCkKICAg
ICBHc3RFbGVtZW50KiBxdWV1ZSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgicXVldWUiLCAw
KTsKICAgICBHc3RFbGVtZW50KiBzaW5rID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJhcHBz
aW5rIiwgMCk7CiAKLSAgICBHc3RBcHBTaW5rQ2FsbGJhY2tzIGNhbGxiYWNrczsKLSAgICBjYWxs
YmFja3MuZW9zID0gMDsKLSAgICBjYWxsYmFja3MubmV3X3ByZXJvbGwgPSAwOwotICAgIGNhbGxi
YWNrcy5uZXdfc2FtcGxlID0gb25BcHBzaW5rUHVsbFJlcXVpcmVkQ2FsbGJhY2s7CisgICAgc3Rh
dGljIEdzdEFwcFNpbmtDYWxsYmFja3MgY2FsbGJhY2tzID0geworICAgICAgICBudWxscHRyLCAv
LyBlb3MKKyAgICAgICAgbnVsbHB0ciwgLy8gbmV3X3ByZXJvbGwKKyAgICAgICAgLy8gbmV3X3Nh
bXBsZQorICAgICAgICBbXShHc3RBcHBTaW5rKiBzaW5rLCBncG9pbnRlciB1c2VyRGF0YSkgLT4g
R3N0Rmxvd1JldHVybiB7CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QXVkaW9GaWxl
UmVhZGVyKj4odXNlckRhdGEpLT5oYW5kbGVTYW1wbGUoc2luayk7CisgICAgICAgIH0sCisgICAg
ICAgIHsgbnVsbHB0ciB9CisgICAgfTsKICAgICBnc3RfYXBwX3Npbmtfc2V0X2NhbGxiYWNrcyhH
U1RfQVBQX1NJTksoc2luayksICZjYWxsYmFja3MsIHRoaXMsIDApOwogCiAgICAgZ19vYmplY3Rf
c2V0KHNpbmssICJzeW5jIiwgRkFMU0UsIE5VTEwpOwogCi0gICAgZ3N0X2Jpbl9hZGRfbWFueShH
U1RfQklOKG1fcGlwZWxpbmUpLCBxdWV1ZSwgc2luaywgTlVMTCk7CisgICAgZ3N0X2Jpbl9hZGRf
bWFueShHU1RfQklOKG1fcGlwZWxpbmUuZ2V0KCkpLCBxdWV1ZSwgc2luaywgbnVsbHB0cik7CiAK
LSAgICBHc3RQYWQqIHNpbmtQYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZChxdWV1ZSwg
InNpbmsiKTsKLSAgICBnc3RfcGFkX2xpbmtfZnVsbChwYWQsIHNpbmtQYWQsIEdTVF9QQURfTElO
S19DSEVDS19OT1RISU5HKTsKLSAgICBnc3Rfb2JqZWN0X3VucmVmKEdTVF9PQkpFQ1Qoc2lua1Bh
ZCkpOworICAgIEdSZWZQdHI8R3N0UGFkPiBzaW5rUGFkID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50
X2dldF9zdGF0aWNfcGFkKHF1ZXVlLCAic2luayIpKTsKKyAgICBnc3RfcGFkX2xpbmtfZnVsbChw
YWQsIHNpbmtQYWQuZ2V0KCksIEdTVF9QQURfTElOS19DSEVDS19OT1RISU5HKTsKIAogICAgIGdz
dF9lbGVtZW50X2xpbmtfcGFkc19mdWxsKHF1ZXVlLCAic3JjIiwgc2luaywgInNpbmsiLCBHU1Rf
UEFEX0xJTktfQ0hFQ0tfTk9USElORyk7CiAKQEAgLTI1Miw3ICsyNDQsNyBAQCB2b2lkIEF1ZGlv
RmlsZVJlYWRlcjo6ZGVpbnRlcmxlYXZlUGFkc0NvbmZpZ3VyZWQoKQogewogICAgIC8vIEFsbCBk
ZWludGVybGVhdmUgc3JjIHBhZHMgYXJlIG5vdyBhdmFpbGFibGUsIGxldCdzIHJvbGwgdG8KICAg
ICAvLyBQTEFZSU5HIHNvIGRhdGEgZmxvd3MgdG93YXJkcyB0aGUgc2lua3MgYW5kIGl0IGNhbiBi
ZSByZXRyaWV2ZWQuCi0gICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKG1fcGlwZWxpbmUsIEdTVF9T
VEFURV9QTEFZSU5HKTsKKyAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUobV9waXBlbGluZS5nZXQo
KSwgR1NUX1NUQVRFX1BMQVlJTkcpOwogfQogCiB2b2lkIEF1ZGlvRmlsZVJlYWRlcjo6cGx1Z0Rl
aW50ZXJsZWF2ZShHc3RQYWQqIHBhZCkKQEAgLTI3MCwyMiArMjYyLDIwIEBAIHZvaWQgQXVkaW9G
aWxlUmVhZGVyOjpwbHVnRGVpbnRlcmxlYXZlKEdzdFBhZCogcGFkKQogICAgIG1fZGVJbnRlcmxl
YXZlID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJkZWludGVybGVhdmUiLCAiZGVpbnRlcmxl
YXZlIik7CiAKICAgICBnX29iamVjdF9zZXQobV9kZUludGVybGVhdmUuZ2V0KCksICJrZWVwLXBv
c2l0aW9ucyIsIFRSVUUsIE5VTEwpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9kZUludGVybGVh
dmUuZ2V0KCksICJwYWQtYWRkZWQiLCBHX0NBTExCQUNLKG9uR1N0cmVhbWVyRGVpbnRlcmxlYXZl
UGFkQWRkZWRDYWxsYmFjayksIHRoaXMpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9kZUludGVy
bGVhdmUuZ2V0KCksICJuby1tb3JlLXBhZHMiLCBHX0NBTExCQUNLKG9uR1N0cmVhbWVyRGVpbnRl
cmxlYXZlUmVhZHlDYWxsYmFjayksIHRoaXMpOworICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBl
ZChtX2RlSW50ZXJsZWF2ZS5nZXQoKSwgInBhZC1hZGRlZCIsIEdfQ0FMTEJBQ0soZGVpbnRlcmxl
YXZlUGFkQWRkZWRDYWxsYmFjayksIHRoaXMpOworICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBl
ZChtX2RlSW50ZXJsZWF2ZS5nZXQoKSwgIm5vLW1vcmUtcGFkcyIsIEdfQ0FMTEJBQ0soZGVpbnRl
cmxlYXZlUmVhZHlDYWxsYmFjayksIHRoaXMpOwogCi0gICAgR3N0Q2FwcyogY2FwcyA9IGdzdF9j
YXBzX25ld19zaW1wbGUoImF1ZGlvL3gtcmF3IiwKKyAgICBHUmVmUHRyPEdzdENhcHM+IGNhcHMg
PSBhZG9wdEdSZWYoZ3N0X2NhcHNfbmV3X3NpbXBsZSgiYXVkaW8veC1yYXciLAogICAgICAgICAi
cmF0ZSIsIEdfVFlQRV9JTlQsIHN0YXRpY19jYXN0PGludD4obV9zYW1wbGVSYXRlKSwKICAgICAg
ICAgImNoYW5uZWxzIiwgR19UWVBFX0lOVCwgbV9jaGFubmVscywKICAgICAgICAgImZvcm1hdCIs
IEdfVFlQRV9TVFJJTkcsIEdTVF9BVURJT19ORShGMzIpLAotICAgICAgICAibGF5b3V0IiwgR19U
WVBFX1NUUklORywgImludGVybGVhdmVkIiwgbnVsbHB0cik7Ci0gICAgZ19vYmplY3Rfc2V0KGNh
cHNGaWx0ZXIsICJjYXBzIiwgY2FwcywgTlVMTCk7Ci0gICAgZ3N0X2NhcHNfdW5yZWYoY2Fwcyk7
CisgICAgICAgICJsYXlvdXQiLCBHX1RZUEVfU1RSSU5HLCAiaW50ZXJsZWF2ZWQiLCBudWxscHRy
KSk7CisgICAgZ19vYmplY3Rfc2V0KGNhcHNGaWx0ZXIsICJjYXBzIiwgY2Fwcy5nZXQoKSwgbnVs
bHB0cik7CiAKLSAgICBnc3RfYmluX2FkZF9tYW55KEdTVF9CSU4obV9waXBlbGluZSksIGF1ZGlv
Q29udmVydCwgYXVkaW9SZXNhbXBsZSwgY2Fwc0ZpbHRlciwgbV9kZUludGVybGVhdmUuZ2V0KCks
IE5VTEwpOworICAgIGdzdF9iaW5fYWRkX21hbnkoR1NUX0JJTihtX3BpcGVsaW5lLmdldCgpKSwg
YXVkaW9Db252ZXJ0LCBhdWRpb1Jlc2FtcGxlLCBjYXBzRmlsdGVyLCBtX2RlSW50ZXJsZWF2ZS5n
ZXQoKSwgbnVsbHB0cik7CiAKLSAgICBHc3RQYWQqIHNpbmtQYWQgPSBnc3RfZWxlbWVudF9nZXRf
c3RhdGljX3BhZChhdWRpb0NvbnZlcnQsICJzaW5rIik7Ci0gICAgZ3N0X3BhZF9saW5rX2Z1bGwo
cGFkLCBzaW5rUGFkLCBHU1RfUEFEX0xJTktfQ0hFQ0tfTk9USElORyk7Ci0gICAgZ3N0X29iamVj
dF91bnJlZihHU1RfT0JKRUNUKHNpbmtQYWQpKTsKKyAgICBHUmVmUHRyPEdzdFBhZD4gc2lua1Bh
ZCA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZChhdWRpb0NvbnZlcnQsICJz
aW5rIikpOworICAgIGdzdF9wYWRfbGlua19mdWxsKHBhZCwgc2lua1BhZC5nZXQoKSwgR1NUX1BB
RF9MSU5LX0NIRUNLX05PVEhJTkcpOwogCiAgICAgZ3N0X2VsZW1lbnRfbGlua19wYWRzX2Z1bGwo
YXVkaW9Db252ZXJ0LCAic3JjIiwgYXVkaW9SZXNhbXBsZSwgInNpbmsiLCBHU1RfUEFEX0xJTktf
Q0hFQ0tfTk9USElORyk7CiAgICAgZ3N0X2VsZW1lbnRfbGlua19wYWRzX2Z1bGwoYXVkaW9SZXNh
bXBsZSwgInNyYyIsIGNhcHNGaWx0ZXIsICJzaW5rIiwgR1NUX1BBRF9MSU5LX0NIRUNLX05PVEhJ
TkcpOwpAQCAtMjk5LDE0ICsyODksMjkgQEAgdm9pZCBBdWRpb0ZpbGVSZWFkZXI6OnBsdWdEZWlu
dGVybGVhdmUoR3N0UGFkKiBwYWQpCiAKIHZvaWQgQXVkaW9GaWxlUmVhZGVyOjpkZWNvZGVBdWRp
b0ZvckJ1c0NyZWF0aW9uKCkKIHsKKyAgICBBU1NFUlQoJm1fcnVuTG9vcCA9PSAmUnVuTG9vcDo6
Y3VycmVudCgpKTsKKwogICAgIC8vIEJ1aWxkIHRoZSBwaXBlbGluZSAoZ2lvc3RyZWFtc3JjIHwg
ZmlsZXNyYykgISBkZWNvZGViaW4yCiAgICAgLy8gQSBkZWludGVybGVhdmUgZWxlbWVudCBpcyBh
ZGRlZCBvbmNlIGEgc3JjIHBhZCBiZWNvbWVzIGF2YWlsYWJsZSBpbiBkZWNvZGViaW4uCi0gICAg
bV9waXBlbGluZSA9IGdzdF9waXBlbGluZV9uZXcoMCk7CisgICAgbV9waXBlbGluZSA9IGdzdF9w
aXBlbGluZV9uZXcobnVsbHB0cik7CiAKLSAgICBHUmVmUHRyPEdzdEJ1cz4gYnVzID0gYWRvcHRH
UmVmKGdzdF9waXBlbGluZV9nZXRfYnVzKEdTVF9QSVBFTElORShtX3BpcGVsaW5lKSkpOworICAg
IEdSZWZQdHI8R3N0QnVzPiBidXMgPSBhZG9wdEdSZWYoZ3N0X3BpcGVsaW5lX2dldF9idXMoR1NU
X1BJUEVMSU5FKG1fcGlwZWxpbmUuZ2V0KCkpKSk7CiAgICAgQVNTRVJUKGJ1cyk7Ci0gICAgZ3N0
X2J1c19hZGRfc2lnbmFsX3dhdGNoKGJ1cy5nZXQoKSk7Ci0gICAgZ19zaWduYWxfY29ubmVjdChi
dXMuZ2V0KCksICJtZXNzYWdlIiwgR19DQUxMQkFDSyhtZXNzYWdlQ2FsbGJhY2spLCB0aGlzKTsK
KyAgICBnc3RfYnVzX3NldF9zeW5jX2hhbmRsZXIoYnVzLmdldCgpLCBbXShHc3RCdXMqLCBHc3RN
ZXNzYWdlKiBtZXNzYWdlLCBncG9pbnRlciB1c2VyRGF0YSkgeworICAgICAgICBhdXRvJiByZWFk
ZXIgPSAqc3RhdGljX2Nhc3Q8QXVkaW9GaWxlUmVhZGVyKj4odXNlckRhdGEpOworICAgICAgICBp
ZiAoJnJlYWRlci5tX3J1bkxvb3AgPT0gJlJ1bkxvb3A6OmN1cnJlbnQoKSkKKyAgICAgICAgICAg
IHJlYWRlci5oYW5kbGVNZXNzYWdlKG1lc3NhZ2UpOworICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgIEdSZWZQdHI8R3N0TWVzc2FnZT4gcHJvdGVjdE1lc3NhZ2UobWVzc2FnZSk7CisgICAgICAg
ICAgICBhdXRvIHdlYWtUaGlzID0gcmVhZGVyLmNyZWF0ZVdlYWtQdHIoKTsKKyAgICAgICAgICAg
IHJlYWRlci5tX3J1bkxvb3AuZGlzcGF0Y2goW3dlYWtUaGlzLCBwcm90ZWN0TWVzc2FnZV0gewor
ICAgICAgICAgICAgICAgIGlmICh3ZWFrVGhpcykKKyAgICAgICAgICAgICAgICAgICAgd2Vha1Ro
aXMtPmhhbmRsZU1lc3NhZ2UocHJvdGVjdE1lc3NhZ2UuZ2V0KCkpOworICAgICAgICAgICAgfSk7
CisgICAgICAgIH0KKyAgICAgICAgZ3N0X21lc3NhZ2VfdW5yZWYobWVzc2FnZSk7CisgICAgICAg
IHJldHVybiBHU1RfQlVTX0RST1A7CisgICAgfSwgdGhpcywgbnVsbHB0cik7CiAKICAgICBHc3RF
bGVtZW50KiBzb3VyY2U7CiAgICAgaWYgKG1fZGF0YSkgewpAQCAtMzIwLDE3ICszMjUsMTYgQEAg
dm9pZCBBdWRpb0ZpbGVSZWFkZXI6OmRlY29kZUF1ZGlvRm9yQnVzQ3JlYXRpb24oKQogICAgIH0K
IAogICAgIG1fZGVjb2RlYmluID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJkZWNvZGViaW4i
LCAiZGVjb2RlYmluIik7Ci0gICAgZ19zaWduYWxfY29ubmVjdChtX2RlY29kZWJpbi5nZXQoKSwg
InBhZC1hZGRlZCIsIEdfQ0FMTEJBQ0sob25HU3RyZWFtZXJEZWNvZGViaW5QYWRBZGRlZENhbGxi
YWNrKSwgdGhpcyk7CisgICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKG1fZGVjb2RlYmluLmdl
dCgpLCAicGFkLWFkZGVkIiwgR19DQUxMQkFDSyhkZWNvZGViaW5QYWRBZGRlZENhbGxiYWNrKSwg
dGhpcyk7CiAKLSAgICBnc3RfYmluX2FkZF9tYW55KEdTVF9CSU4obV9waXBlbGluZSksIHNvdXJj
ZSwgbV9kZWNvZGViaW4uZ2V0KCksIE5VTEwpOworICAgIGdzdF9iaW5fYWRkX21hbnkoR1NUX0JJ
TihtX3BpcGVsaW5lLmdldCgpKSwgc291cmNlLCBtX2RlY29kZWJpbi5nZXQoKSwgTlVMTCk7CiAg
ICAgZ3N0X2VsZW1lbnRfbGlua19wYWRzX2Z1bGwoc291cmNlLCAic3JjIiwgbV9kZWNvZGViaW4u
Z2V0KCksICJzaW5rIiwgR1NUX1BBRF9MSU5LX0NIRUNLX05PVEhJTkcpOwogCi0gICAgLy8gQ2F0
Y2ggZXJyb3JzIGhlcmUgaW1tZWRpYXRlbHksIHRoZXJlIG1pZ2h0IG5vdCBiZSBhbiBlcnJvciBt
ZXNzYWdlIGlmCi0gICAgLy8gd2UncmUgdW5sdWNreS4KLSAgICBpZiAoZ3N0X2VsZW1lbnRfc2V0
X3N0YXRlKG1fcGlwZWxpbmUsIEdTVF9TVEFURV9QQVVTRUQpID09IEdTVF9TVEFURV9DSEFOR0Vf
RkFJTFVSRSkgeworICAgIC8vIENhdGNoIGVycm9ycyBoZXJlIGltbWVkaWF0ZWx5LCB0aGVyZSBt
aWdodCBub3QgYmUgYW4gZXJyb3IgbWVzc2FnZSBpZiB3ZSdyZSB1bmx1Y2t5LgorICAgIGlmIChn
c3RfZWxlbWVudF9zZXRfc3RhdGUobV9waXBlbGluZS5nZXQoKSwgR1NUX1NUQVRFX1BBVVNFRCkg
PT0gR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFKSB7CiAgICAgICAgIGdfd2FybmluZygiRXJyb3I6
IEZhaWxlZCB0byBzZXQgcGlwZWxpbmUgdG8gUEFVU0VEIik7CiAgICAgICAgIG1fZXJyb3JPY2N1
cnJlZCA9IHRydWU7Ci0gICAgICAgIGdfbWFpbl9sb29wX3F1aXQobV9sb29wLmdldCgpKTsKKyAg
ICAgICAgbV9ydW5Mb29wLnN0b3AoKTsKICAgICB9CiB9CiAKQEAgLTMzOSw0NSArMzQzLDQ4IEBA
IFBhc3NSZWZQdHI8QXVkaW9CdXM+IEF1ZGlvRmlsZVJlYWRlcjo6Y3JlYXRlQnVzKGZsb2F0IHNh
bXBsZVJhdGUsIGJvb2wgbWl4VG9Nb25vCiAgICAgbV9zYW1wbGVSYXRlID0gc2FtcGxlUmF0ZTsK
ICAgICBtX2NoYW5uZWxzID0gbWl4VG9Nb25vID8gMSA6IDI7CiAKLSAgICBtX2Zyb250TGVmdEJ1
ZmZlcnMgPSBnc3RfYnVmZmVyX2xpc3RfbmV3KCk7Ci0gICAgbV9mcm9udFJpZ2h0QnVmZmVycyA9
IGdzdF9idWZmZXJfbGlzdF9uZXcoKTsKLQotICAgIEdSZWZQdHI8R01haW5Db250ZXh0PiBjb250
ZXh0ID0gYWRvcHRHUmVmKGdfbWFpbl9jb250ZXh0X25ldygpKTsKLSAgICBnX21haW5fY29udGV4
dF9wdXNoX3RocmVhZF9kZWZhdWx0KGNvbnRleHQuZ2V0KCkpOwotICAgIG1fbG9vcCA9IGFkb3B0
R1JlZihnX21haW5fbG9vcF9uZXcoY29udGV4dC5nZXQoKSwgRkFMU0UpKTsKKyAgICBtX2Zyb250
TGVmdEJ1ZmZlcnMgPSBhZG9wdEdSZWYoZ3N0X2J1ZmZlcl9saXN0X25ldygpKTsKKyAgICBtX2Zy
b250UmlnaHRCdWZmZXJzID0gYWRvcHRHUmVmKGdzdF9idWZmZXJfbGlzdF9uZXcoKSk7CiAKICAg
ICAvLyBTdGFydCB0aGUgcGlwZWxpbmUgcHJvY2Vzc2luZyBqdXN0IGFmdGVyIHRoZSBsb29wIGlz
IHN0YXJ0ZWQuCi0gICAgR1RocmVhZFNhZmVNYWluTG9vcFNvdXJjZSBzb3VyY2U7Ci0gICAgc291
cmNlLnNjaGVkdWxlKCJbV2ViS2l0XSBBdWRpb0ZpbGVSZWFkZXI6OmRlY29kZUF1ZGlvRm9yQnVz
Q3JlYXRpb24iLCBbdGhpc10geyBkZWNvZGVBdWRpb0ZvckJ1c0NyZWF0aW9uKCk7IH0sIEdfUFJJ
T1JJVFlfREVGQVVMVCwgbnVsbHB0ciwgY29udGV4dC5nZXQoKSk7Ci0KLSAgICBnX21haW5fbG9v
cF9ydW4obV9sb29wLmdldCgpKTsKLSAgICBnX21haW5fY29udGV4dF9wb3BfdGhyZWFkX2RlZmF1
bHQoY29udGV4dC5nZXQoKSk7CisgICAgbV9ydW5Mb29wLmRpc3BhdGNoKFt0aGlzXSB7IGRlY29k
ZUF1ZGlvRm9yQnVzQ3JlYXRpb24oKTsgfSk7CisgICAgbV9ydW5Mb29wLnJ1bigpOwogCiAgICAg
Ly8gU2V0IHBpcGVsaW5lIHRvIEdTVF9TVEFURV9OVUxMIHN0YXRlIGhlcmUgYWxyZWFkeSBBU0FQ
IHRvCiAgICAgLy8gcmVsZWFzZSBhbnkgcmVzb3VyY2VzIHRoYXQgbWlnaHQgc3RpbGwgYmUgdXNl
ZC4KLSAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUobV9waXBlbGluZSwgR1NUX1NUQVRFX05VTEwp
OworICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZShtX3BpcGVsaW5lLmdldCgpLCBHU1RfU1RBVEVf
TlVMTCk7CiAKICAgICBpZiAobV9lcnJvck9jY3VycmVkKQotICAgICAgICByZXR1cm4gMDsKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBSZWZQdHI8QXVkaW9CdXM+IGF1ZGlvQnVzID0g
QXVkaW9CdXM6OmNyZWF0ZShtX2NoYW5uZWxzLCBtX2NoYW5uZWxTaXplLCB0cnVlKTsKICAgICBh
dWRpb0J1cy0+c2V0U2FtcGxlUmF0ZShtX3NhbXBsZVJhdGUpOwogCi0gICAgY29weUdzdHJlYW1l
ckJ1ZmZlcnNUb0F1ZGlvQ2hhbm5lbChtX2Zyb250TGVmdEJ1ZmZlcnMsIGF1ZGlvQnVzLT5jaGFu
bmVsKDApKTsKKyAgICBjb3B5R3N0cmVhbWVyQnVmZmVyc1RvQXVkaW9DaGFubmVsKG1fZnJvbnRM
ZWZ0QnVmZmVycy5nZXQoKSwgYXVkaW9CdXMtPmNoYW5uZWwoMCkpOwogICAgIGlmICghbWl4VG9N
b25vKQotICAgICAgICBjb3B5R3N0cmVhbWVyQnVmZmVyc1RvQXVkaW9DaGFubmVsKG1fZnJvbnRS
aWdodEJ1ZmZlcnMsIGF1ZGlvQnVzLT5jaGFubmVsKDEpKTsKKyAgICAgICAgY29weUdzdHJlYW1l
ckJ1ZmZlcnNUb0F1ZGlvQ2hhbm5lbChtX2Zyb250UmlnaHRCdWZmZXJzLmdldCgpLCBhdWRpb0J1
cy0+Y2hhbm5lbCgxKSk7CiAKICAgICByZXR1cm4gYXVkaW9CdXM7CiB9CiAKIFBhc3NSZWZQdHI8
QXVkaW9CdXM+IGNyZWF0ZUJ1c0Zyb21BdWRpb0ZpbGUoY29uc3QgY2hhciogZmlsZVBhdGgsIGJv
b2wgbWl4VG9Nb25vLCBmbG9hdCBzYW1wbGVSYXRlKQogewotICAgIHJldHVybiBBdWRpb0ZpbGVS
ZWFkZXIoZmlsZVBhdGgpLmNyZWF0ZUJ1cyhzYW1wbGVSYXRlLCBtaXhUb01vbm8pOworICAgIFJl
ZlB0cjxBdWRpb0J1cz4gcmV0dXJuVmFsdWU7CisgICAgYXV0byB0aHJlYWRJRCA9IGNyZWF0ZVRo
cmVhZCgiQXVkaW9GaWxlUmVhZGVyIiwgWyZyZXR1cm5WYWx1ZSwgZmlsZVBhdGgsIG1peFRvTW9u
bywgc2FtcGxlUmF0ZV0geworICAgICAgICByZXR1cm5WYWx1ZSA9IEF1ZGlvRmlsZVJlYWRlcihm
aWxlUGF0aCkuY3JlYXRlQnVzKHNhbXBsZVJhdGUsIG1peFRvTW9ubyk7CisgICAgfSk7CisgICAg
d2FpdEZvclRocmVhZENvbXBsZXRpb24odGhyZWFkSUQpOworICAgIHJldHVybiByZXR1cm5WYWx1
ZTsKIH0KIAogUGFzc1JlZlB0cjxBdWRpb0J1cz4gY3JlYXRlQnVzRnJvbUluTWVtb3J5QXVkaW9G
aWxlKGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCBkYXRhU2l6ZSwgYm9vbCBtaXhUb01vbm8sIGZs
b2F0IHNhbXBsZVJhdGUpCiB7Ci0gICAgcmV0dXJuIEF1ZGlvRmlsZVJlYWRlcihkYXRhLCBkYXRh
U2l6ZSkuY3JlYXRlQnVzKHNhbXBsZVJhdGUsIG1peFRvTW9ubyk7CisgICAgUmVmUHRyPEF1ZGlv
QnVzPiByZXR1cm5WYWx1ZTsKKyAgICBhdXRvIHRocmVhZElEID0gY3JlYXRlVGhyZWFkKCJBdWRp
b0ZpbGVSZWFkZXIiLCBbJnJldHVyblZhbHVlLCBkYXRhLCBkYXRhU2l6ZSwgbWl4VG9Nb25vLCBz
YW1wbGVSYXRlXSB7CisgICAgICAgIHJldHVyblZhbHVlID0gQXVkaW9GaWxlUmVhZGVyKGRhdGEs
IGRhdGFTaXplKS5jcmVhdGVCdXMoc2FtcGxlUmF0ZSwgbWl4VG9Nb25vKTsKKyAgICB9KTsKKyAg
ICB3YWl0Rm9yVGhyZWFkQ29tcGxldGlvbih0aHJlYWRJRCk7CisgICAgcmV0dXJuIHJldHVyblZh
bHVlOwogfQogCiB9IC8vIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HUmVmUHRyR1N0cmVhbWVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HUmVmUHRyR1N0cmVhbWVyLmNwcAppbmRl
eCA4NDJkOTM3Li4wN2ViNmUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvR1JlZlB0ckdTdHJlYW1lci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dSZWZQdHJHU3RyZWFtZXIuY3BwCkBAIC0x
ODMsNiArMTgzLDI1IEBAIHRlbXBsYXRlPD4gdm9pZCBkZXJlZkdQdHI8R3N0QnVmZmVyPihHc3RC
dWZmZXIqIHB0cikKICAgICAgICAgZ3N0X2J1ZmZlcl91bnJlZihwdHIpOwogfQogCit0ZW1wbGF0
ZTw+IEdSZWZQdHI8R3N0QnVmZmVyTGlzdD4gYWRvcHRHUmVmKEdzdEJ1ZmZlckxpc3QqIHB0cikK
K3sKKyAgICByZXR1cm4gR1JlZlB0cjxHc3RCdWZmZXJMaXN0PihwdHIsIEdSZWZQdHJBZG9wdCk7
Cit9CisKK3RlbXBsYXRlPD4gR3N0QnVmZmVyTGlzdCogcmVmR1B0cjxHc3RCdWZmZXJMaXN0PihH
c3RCdWZmZXJMaXN0KiBwdHIpCit7CisgICAgaWYgKHB0cikKKyAgICAgICAgZ3N0X2J1ZmZlcl9s
aXN0X3JlZihwdHIpOworCisgICAgcmV0dXJuIHB0cjsKK30KKwordGVtcGxhdGU8PiB2b2lkIGRl
cmVmR1B0cjxHc3RCdWZmZXJMaXN0PihHc3RCdWZmZXJMaXN0KiBwdHIpCit7CisgICAgaWYgKHB0
cikKKyAgICAgICAgZ3N0X2J1ZmZlcl9saXN0X3VucmVmKHB0cik7Cit9CisKIHRlbXBsYXRlPD4g
R1JlZlB0cjxHc3RTYW1wbGU+IGFkb3B0R1JlZihHc3RTYW1wbGUqIHB0cikKIHsKICAgICByZXR1
cm4gR1JlZlB0cjxHc3RTYW1wbGU+KHB0ciwgR1JlZlB0ckFkb3B0KTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HUmVmUHRyR1N0cmVhbWVy
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1JlZlB0ckdT
dHJlYW1lci5oCmluZGV4IDY4MDI0NTguLmY1ZWFmOTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HUmVmUHRyR1N0cmVhbWVyLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dSZWZQdHJHU3RyZWFt
ZXIuaApAQCAtMzEsNiArMzEsNyBAQCB0eXBlZGVmIHN0cnVjdCBfR3N0VGFzayBHc3RUYXNrOwog
dHlwZWRlZiBzdHJ1Y3QgX0dzdEJ1cyBHc3RCdXM7CiB0eXBlZGVmIHN0cnVjdCBfR3N0RWxlbWVu
dEZhY3RvcnkgR3N0RWxlbWVudEZhY3Rvcnk7CiB0eXBlZGVmIHN0cnVjdCBfR3N0QnVmZmVyIEdz
dEJ1ZmZlcjsKK3R5cGVkZWYgc3RydWN0IF9Hc3RCdWZmZXJMaXN0IEdzdEJ1ZmZlckxpc3Q7CiB0
eXBlZGVmIHN0cnVjdCBfR3N0U2FtcGxlIEdzdFNhbXBsZTsKIHR5cGVkZWYgc3RydWN0IF9Hc3RU
YWdMaXN0IEdzdFRhZ0xpc3Q7CiB0eXBlZGVmIHN0cnVjdCBfR3N0RXZlbnQgR3N0RXZlbnQ7CkBA
IC03Myw2ICs3NCwxMCBAQCB0ZW1wbGF0ZTw+IEdSZWZQdHI8R3N0QnVmZmVyPiBhZG9wdEdSZWYo
R3N0QnVmZmVyKiBwdHIpOwogdGVtcGxhdGU8PiBHc3RCdWZmZXIqIHJlZkdQdHI8R3N0QnVmZmVy
PihHc3RCdWZmZXIqIHB0cik7CiB0ZW1wbGF0ZTw+IHZvaWQgZGVyZWZHUHRyPEdzdEJ1ZmZlcj4o
R3N0QnVmZmVyKiBwdHIpOwogCit0ZW1wbGF0ZTw+IEdSZWZQdHI8R3N0QnVmZmVyTGlzdD4gYWRv
cHRHUmVmKEdzdEJ1ZmZlckxpc3QqKTsKK3RlbXBsYXRlPD4gR3N0QnVmZmVyTGlzdCogcmVmR1B0
cjxHc3RCdWZmZXJMaXN0PihHc3RCdWZmZXJMaXN0Kik7Cit0ZW1wbGF0ZTw+IHZvaWQgZGVyZWZH
UHRyPEdzdEJ1ZmZlckxpc3Q+KEdzdEJ1ZmZlckxpc3QqKTsKKwogdGVtcGxhdGU8PiBHUmVmUHRy
PEdzdFNhbXBsZT4gYWRvcHRHUmVmKEdzdFNhbXBsZSogcHRyKTsKIHRlbXBsYXRlPD4gR3N0U2Ft
cGxlKiByZWZHUHRyPEdzdFNhbXBsZT4oR3N0U2FtcGxlKiBwdHIpOwogdGVtcGxhdGU8PiB2b2lk
IGRlcmVmR1B0cjxHc3RTYW1wbGU+KEdzdFNhbXBsZSogcHRyKTsK
</data>
<flag name="review"
          id="290611"
          type_id="1"
          status="+"
          setter="zan"
    />
          </attachment>
      

    </bug>

</bugzilla>