<?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>169419</bug_id>
          
          <creation_ts>2017-03-09 09:51:31 -0800</creation_ts>
          <short_desc>Use TCP instead of FIFOs for Simulator/Device communication</short_desc>
          <delta_ts>2017-03-29 12:23:44 -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>Tools / Tests</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jonathan Bedard">jbedard</reporter>
          <assigned_to name="Jonathan Bedard">jbedard</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>dbates</cc>
    
    <cc>ddkilzer</cc>
    
    <cc>glenn</cc>
    
    <cc>lforschler</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1285358</commentid>
    <comment_count>0</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-03-09 09:51:31 -0800</bug_when>
    <thetext>We should TCP instead of FIFOs when communicating through stdin, stdout and stderr for WebKitTestRunnerApp and DumpRenderTree on Simulators and in the future, devices.  FIFO&apos;s will not work for on-device testing, so we should implement this communication in a way which will work for on-device testing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1285359</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-03-09 09:52:37 -0800</bug_when>
    <thetext>&lt;rdar://problem/30949615&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1285360</commentid>
    <comment_count>2</comment_count>
      <attachid>303929</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-03-09 09:54:36 -0800</bug_when>
    <thetext>Created attachment 303929
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1285460</commentid>
    <comment_count>3</comment_count>
      <attachid>303952</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-03-09 12:32:23 -0800</bug_when>
    <thetext>Created attachment 303952
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1285567</commentid>
    <comment_count>4</comment_count>
      <attachid>303983</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-03-09 13:57:01 -0800</bug_when>
    <thetext>Created attachment 303983
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1287677</commentid>
    <comment_count>5</comment_count>
      <attachid>303983</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2017-03-14 10:55:22 -0700</bug_when>
    <thetext>Comment on attachment 303983
Patch

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

&gt; Tools/Scripts/webkitpy/port/ios.py:88
&gt; +
&gt; +        for i in xrange(self.child_processes()):
&gt; +            self.device_for_worker_number(i).setup()
&gt; +

Is there a reason we cannot create the sockets on demand?

&gt; Tools/Scripts/webkitpy/xcode/device.py:68
&gt; +        server = Device.UDID_TO_SOCKET[self.udid]
&gt; +        if not server:
&gt; +            starting_port = randint(Device.PORT_RANGE[0], Device.PORT_RANGE[1])
&gt; +            upper_bound = Device.PORT_RANGE[1] - Device.PORT_RANGE[0]
&gt; +
&gt; +            for cnt in xrange(0, upper_bound):
&gt; +                port = (starting_port + cnt) % upper_bound
&gt; +                if port in Device.FORWARD_PORTS:
&gt; +                    continue
&gt; +                try:
&gt; +                    server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
&gt; +                    server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
&gt; +                    server.bind((&apos;localhost&apos;, port))
&gt; +                    break
&gt; +                except socket.error, RuntimeError:
&gt; +                    server = None
&gt; +            Device.UDID_TO_SOCKET[self.udid] = server
&gt; +
&gt; +        if not Device.UDID_TO_SOCKET[self.udid]:
&gt; +            raise RuntimeError(&apos;No open ports found&apos;)

It is unnecessary to implement logic to pick an available port as we can just ask the OS for one by binding to port 0: sever.bind((&apos;localhost&apos;, 0)). Then we can use socket.getsockname() to determine the port the OS picked for us. There are various approaches that we can use to avoid the OS picking a port in FORWARD_PORTS - the ports that we want to reserve for the various servers we start up to run HTTP tests. (*) One approach is to create sockets on demand in SimulatorProcess and take advantage of the fact that we instantiate a SimulatorProcess after we start up all the web servers that we want to forward. This approach also has the side benefit that we do not need to have the hardcoded list FORWARD_PORTS, which is error prone. (I do not believe FORWARD_PORTS represents all the ports we need to forward. Among other things, it is missing the web socket server port, 9323.)

&gt; Tools/TestRunnerShared/iOSLayoutTestCommunication.cpp:45
&gt; +static FILE* originals[numHandles];

Is it necessary to save the original file handles?

&gt; Tools/TestRunnerShared/iOSLayoutTestCommunication.cpp:64
&gt; +    serverAddress.sin_port = htons(port);

The same port for each socket?

&gt; Tools/TestRunnerShared/iOSLayoutTestCommunication.cpp:80
&gt; +    for (unsigned i = 0; i &lt; numHandles; ++i) {
&gt; +        // Order matters!
&gt; +        sockets[i] = socket(AF_INET, SOCK_STREAM, 0);
&gt; +        if (sockets[i] &lt; 0)
&gt; +            abort();
&gt; +        if (connect(sockets[i], (struct sockaddr *) &amp;serverAddress, sizeof(serverAddress)) &lt; 0)
&gt; +            abort();
&gt; +
&gt; +        originals[i] = *referencesToHandles[i];
&gt; +        fflush(originals[i]);
&gt; +        if (i == stdinIndex)
&gt; +            *referencesToHandles[i] = fdopen(sockets[i], &quot;rb&quot;);
&gt; +        else
&gt; +            *referencesToHandles[i] = fdopen(sockets[i], &quot;wb&quot;);
&gt; +        setbuf(*referencesToHandles[i], nullptr);

I do not see the benefit of using a loop to setup the handles given that we only have three handles to setup and one of the handles requires special casing (standard in).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1287703</commentid>
    <comment_count>6</comment_count>
      <attachid>303983</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-03-14 11:29:04 -0700</bug_when>
    <thetext>Comment on attachment 303983
Patch

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

&gt;&gt; Tools/TestRunnerShared/iOSLayoutTestCommunication.cpp:45
&gt;&gt; +static FILE* originals[numHandles];
&gt; 
&gt; Is it necessary to save the original file handles?

The reason this is done is so that when communication is closed, the process is returned to it&apos;s original state.

No, this is not needed for this to work, but without this, stdout, stderr and stdin will be left pointing to closed sockets when the communication is torn down, meaning writes or reads would fail.  This seems undesirable, especially since it&apos;s so easy to fix.

&gt;&gt; Tools/TestRunnerShared/iOSLayoutTestCommunication.cpp:64
&gt;&gt; +    serverAddress.sin_port = htons(port);
&gt; 
&gt; The same port for each socket?

Yes!  That&apos;s the advantage of using one server socket per device.  All of the clients are connecting to the same server.  This reduces the number of arguments we have to pass in the environment and the number of ports we need to open.

&gt;&gt; Tools/TestRunnerShared/iOSLayoutTestCommunication.cpp:80
&gt;&gt; +        setbuf(*referencesToHandles[i], nullptr);
&gt; 
&gt; I do not see the benefit of using a loop to setup the handles given that we only have three handles to setup and one of the handles requires special casing (standard in).

This reduces the amount of code if we are going to return file handles to their original state. (you seem to be against this on line 45).  Otherwise, yes, it would be more appropriate to setup the handles outside of this loop.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1287742</commentid>
    <comment_count>7</comment_count>
      <attachid>303983</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2017-03-14 12:32:19 -0700</bug_when>
    <thetext>Comment on attachment 303983
Patch

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

&gt; Tools/Scripts/webkitpy/port/simulator_process.py:60
&gt; +    # Python 2&apos;s implementation of makefile blocks on read if the
&gt; +    # socket is open. Implement the small subset of commands we need.
&gt; +    class ReadSocket(object):

Could we avoid the need for this class by making the socket non-blocking and using os.fdopen() with the socket&apos;s file descriptor (socket.fileno()) to get a File object?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1288102</commentid>
    <comment_count>8</comment_count>
      <attachid>304510</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-03-15 10:07:32 -0700</bug_when>
    <thetext>Created attachment 304510
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1288621</commentid>
    <comment_count>9</comment_count>
      <attachid>304658</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-03-16 11:10:56 -0700</bug_when>
    <thetext>Created attachment 304658
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1289161</commentid>
    <comment_count>10</comment_count>
      <attachid>304658</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2017-03-17 14:41:32 -0700</bug_when>
    <thetext>Comment on attachment 304658
Patch

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

&gt; Tools/Scripts/webkitpy/port/simulator_process.py:25
&gt; +import fcntl

This is unused.

&gt; Tools/Scripts/webkitpy/port/simulator_process.py:95
&gt; +        self._device.server().listen(3)

We need a comment here to explain why we are calling listen 3 times and describing the high-level design: We create one listening socket that will have three clients that represent the standard input, standard output, and standard error streams of the launched app.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1289205</commentid>
    <comment_count>11</comment_count>
      <attachid>304837</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-03-17 17:01:34 -0700</bug_when>
    <thetext>Created attachment 304837
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1289477</commentid>
    <comment_count>12</comment_count>
      <attachid>304928</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-03-20 08:51:41 -0700</bug_when>
    <thetext>Created attachment 304928
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1291472</commentid>
    <comment_count>13</comment_count>
      <attachid>305468</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-03-27 08:41:32 -0700</bug_when>
    <thetext>Created attachment 305468
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1291931</commentid>
    <comment_count>14</comment_count>
      <attachid>305601</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-03-28 09:59:03 -0700</bug_when>
    <thetext>Created attachment 305601
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1292209</commentid>
    <comment_count>15</comment_count>
      <attachid>305601</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2017-03-28 17:11:56 -0700</bug_when>
    <thetext>Comment on attachment 305601
Patch

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

&gt; Tools/DumpRenderTree/mac/DumpRenderTree.mm:1240
&gt; +    setupiOSLayoutTestCommunication();

&quot;Set up&quot; is two words, so the name should be setUpIOSLayoutTestCommunication (note upper case IOS too).

&gt; Tools/Scripts/webkitpy/port/device.py:41
&gt; +    def setup(self):

I don&apos;t think that set_up would be reasonable here, but maybe a more descriptive name would sidestep the naming problem.

&gt; Tools/Scripts/webkitpy/port/device.py:45
&gt; +            self.listening_socket.bind((&apos;localhost&apos;, 0))

One issue that we had with localhost in the past is that it would flakily resolve to IPv6 loopback on some ancient OS versions, and cause strange failures. This is probably not a problem any more. Maybe it&apos;s good to be specific anyway.

&gt; Tools/Scripts/webkitpy/port/ios_simulator.py:69
&gt; +    #FIXME: Ports are recreated in each process.  This is a problem for IOSSimulatorPort, it means devices are not persistent

Please add a period at the end, and do not use French spacing.

It would be helpful to explain why having he devices not persistent is a problem.

&gt; Tools/Scripts/webkitpy/port/simulator_process.py:58
&gt; +    # Python 2&apos;s implementation of makefile does not return
&gt; +    # a non-blocking file.

No need to wrap this line.

&gt; Tools/Scripts/webkitpy/port/simulator_process.py:108
&gt; +            # Order matters here!

A better comment would say something like &quot;this order matches what is being sent in &lt;function_name&gt;&quot;.

&gt; Tools/TestRunnerShared/iOSLayoutTestCommunication.cpp:47
&gt; +    if (result &lt; 0)
&gt; +        abort();
&gt; +    if (connect(result, (struct sockaddr *) &amp;serverAddress, sizeof(serverAddress)) &lt; 0)
&gt; +        abort();

Would it be useful to print errors here? Or alternatively to crash. Otherwise, it will be hard to debug.

&gt; Tools/TestRunnerShared/iOSLayoutTestCommunication.cpp:55
&gt; +        abort();

Ditto. RELEASE_ASSERT?

&gt; Tools/TestRunnerShared/iOSLayoutTestCommunication.cpp:57
&gt; +    struct hostent* host = gethostbyname(&quot;localhost&quot;);

localhost or 127.0.0.1?

&gt; Tools/TestRunnerShared/iOSLayoutTestCommunication.cpp:59
&gt; +    memset((char *) &amp;serverAddress, 0, sizeof(serverAddress));

Misplaced star.

&gt; Tools/TestRunnerShared/iOSLayoutTestCommunication.cpp:67
&gt; +    // Order matters!

:-|

&gt; Tools/TestRunnerShared/iOSLayoutTestCommunication.cpp:78
&gt; +void teardowniOSLayoutTestCommunication()

Two words, so &quot;tearDownIOSLayoutTestCommunication&quot; (note upper case IOS too).

&gt; Tools/TestRunnerShared/iOSLayoutTestCommunication.cpp:88
&gt; +void setupiOSLayoutTestCommunication() { }
&gt; +void teardowniOSLayoutTestCommunication() { }

This doesn&apos;t seem needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1292475</commentid>
    <comment_count>16</comment_count>
      <attachid>305757</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2017-03-29 10:45:58 -0700</bug_when>
    <thetext>Created attachment 305757
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1292511</commentid>
    <comment_count>17</comment_count>
      <attachid>305757</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-03-29 12:23:40 -0700</bug_when>
    <thetext>Comment on attachment 305757
Patch

Clearing flags on attachment: 305757

Committed r214553: &lt;http://trac.webkit.org/changeset/214553&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1292512</commentid>
    <comment_count>18</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-03-29 12:23:44 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>303929</attachid>
            <date>2017-03-09 09:54:36 -0800</date>
            <delta_ts>2017-03-09 12:32:20 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-169419-20170309095435.patch</filename>
            <type>text/plain</type>
            <size>27328</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIxMzY0MykKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDQ1IEBACisyMDE3LTAzLTA5ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICBVc2UgVENQIGluc3RlYWQgb2YgRklGT3MgZm9yIFNpbXVsYXRvci9EZXZp
Y2UgY29tbXVuaWNhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTY5NDE5CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zMDk0OTYxNT4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIER1bXBSZW5kZXJU
cmVlL0R1bXBSZW5kZXJUcmVlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICog
RHVtcFJlbmRlclRyZWUvbWFjL0R1bXBSZW5kZXJUcmVlLm1tOgorICAgICAgICAoZHVtcFJlbmRl
clRyZWUpOiBDYWxsIHNldHVwL3RlYXJkb3duaU9TTGF5b3V0VGVzdENvbW11bmljYXRpb24oKSBp
bnN0ZWFkIG9mIHVzaW5nIEZJRk9zLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9p
b3MucHk6CisgICAgICAgIChJT1NQb3J0LnNldHVwX3Rlc3RfcnVuKTogU2V0dXAgZWFjaCBkZXZp
Y2UuCisgICAgICAgIChJT1NQb3J0LmNsZWFuX3VwX3Rlc3RfcnVuKTogVGVhcmRvd24gZWFjaCBk
ZXZpY2UuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L3NpbXVsYXRvcl9wcm9jZXNz
LnB5OgorICAgICAgICAoU2ltdWxhdG9yUHJvY2Vzcyk6CisgICAgICAgIChTaW11bGF0b3JQcm9j
ZXNzLlJlYWRTb2NrZXQpOiBBZGQgdG8gd29yayBhcm91bmQgc2hvcnRjb21pbmdzIGluIFB5dGhv
biAy4oCZcyBtYWtlZmlsZS4KKyAgICAgICAgKFNpbXVsYXRvclByb2Nlc3MuUmVhZFNvY2tldC5f
X2luaXRfXyk6IEluaXRpYWxpemUgZmlsZS1saWtlIG9iamVjdCB3aXRoIHNvY2tldC4KKyAgICAg
ICAgKFNpbXVsYXRvclByb2Nlc3MuUmVhZFNvY2tldC5jbG9zZSk6IENsb3NlIHNvY2tldCBhbmQg
bWFyayBvYmplY3QgYXMgY2xvc2VkLgorICAgICAgICAoU2ltdWxhdG9yUHJvY2Vzcy5SZWFkU29j
a2V0LmZpbGVubyk6IFJldHVybiByYXcgc29ja2V0IGZvciB1c2UgaW4gc2VsZWN0LgorICAgICAg
ICAoU2ltdWxhdG9yUHJvY2Vzcy5SZWFkU29ja2V0LnJlYWQpOiBSZWFkIGRhdGEgZnJvbSBzb2Nr
ZXQuCisgICAgICAgIChTaW11bGF0b3JQcm9jZXNzLl9faW5pdF9fKTogUGFzcyBUQ1AgcG9ydCBv
dmVyIGVudmlyb25tZW50LCByZW1vdmUgRklGTyBuYW1lcy4KKyAgICAgICAgKFNpbXVsYXRvclBy
b2Nlc3MuX21ha2VfY29ubmVjdGlvbl9jcmVhdGVfZmlsZSk6IFdhaXQgZm9yIGNvbm5lY3Rpb24g
ZnJvbSBzZXJ2ZXIgYW5kIGNyZWF0ZSBhbmQgcmV0dXJuCisgICAgICAgIGEgZmlsZS1saWtlIG9i
amVjdCBmcm9tIHRoZSBpbmNvbWluZyBjb25uZWN0aW9uLgorICAgICAgICAoU2ltdWxhdG9yUHJv
Y2Vzcy5fc3RhcnQpOiBVc2UgVENQIGNvbm5lY3Rpb25zIGluc3RlYWQgb2YgRklGT3MuCisgICAg
ICAgIChTaW11bGF0b3JQcm9jZXNzLl9yZXNldCk6IERlbGV0ZWQuCisgICAgICAgICogU2NyaXB0
cy93ZWJraXRweS94Y29kZS9kZXZpY2UucHk6CisgICAgICAgIChEZXZpY2UpOgorICAgICAgICAo
RGV2aWNlLl9faW5pdF9fKTogSW5pdGlhbGl6ZSB0aGlzIGRldmljZSBpbiBVRElEIHRvIHNvY2tl
dCBtYXAuCisgICAgICAgIChEZXZpY2UucG9ydCk6IFJldHVybiBwb3J0IG9mIHNvY2tldCBhc3Nv
Y2lhdGVkIHdpdGggdGhpcyBkZXZpY2UuCisgICAgICAgIChEZXZpY2Uuc2VydmVyKTogUmV0dXJu
IHNvY2tldCBhc3NvY2lhdGVkIHdpdGggdGhpcyBkZXZpY2UuCisgICAgICAgIChEZXZpY2Uuc2V0
dXApOiBPcGVuIHNlcnZlciBzb2NrZXQgb24gYW4gb3BlbiBwb3J0LgorICAgICAgICAoRGV2aWNl
LnRlYXJkb3duKTogQ2xvc2Ugc2VydmVyIHNvY2tldCBhc3NvY2lhdGVkIHdpdGggdGhpcyBkZXZp
Y2UuCisgICAgICAgICogVGVzdFJ1bm5lclNoYXJlZC9pT1NMYXlvdXRUZXN0Q29tbXVuaWNhdGlv
bi5jcHA6IEFkZGVkLgorICAgICAgICAoc2V0dXBpT1NMYXlvdXRUZXN0Q29tbXVuaWNhdGlvbik6
IENvbm5lY3Qgc3RkaW4sIHN0ZG91dCBhbmQgc3RkZXJyIGFzIHNvY2tldCB0byBhIFRDUCBzZXJ2
ZXIgcnVubmluZyBvbiBsb2NhbGhvc3QuCisgICAgICAgICh0ZWFyZG93bmlPU0xheW91dFRlc3RD
b21tdW5pY2F0aW9uKTogQ2xvc2Ugc3RkaW4sIHN0ZG91dCBhbmQgc3RkZXJyIFRDUCBzb2NrZXRz
LgorICAgICAgICAqIFRlc3RSdW5uZXJTaGFyZWQvaU9TTGF5b3V0VGVzdENvbW11bmljYXRpb24u
aDogQWRkZWQuCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9XZWJLaXRUZXN0UnVubmVyLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9pb3Mv
VGVzdENvbnRyb2xsZXJJT1MubW06CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpwbGF0
Zm9ybUluaXRpYWxpemUpOiBDYWxsIHNldHVwaU9TTGF5b3V0VGVzdENvbW11bmljYXRpb24oKSBp
bnN0ZWFkIG9mIHVzaW5nIEZJRk9zLgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6cGxh
dGZvcm1EZXN0cm95KTogQ2FsbCB0ZWFyZG93bmlPU0xheW91dFRlc3RDb21tdW5pY2F0aW9uKCku
CisKIDIwMTctMDMtMDggIFNyaW5pdmFzYW4gVmlqYXlhcmFnaGF2YW4gIDxzdmlqYXlhcmFnaGF2
YW5AYXBwbGUuY29tPgogCiAgICAgICAgIEZpeCBlcnJvci93YXJuaW5nIGR1cGxpY2F0aW9uIGlu
IEpTT04gYmluZGluZ3MgcmVzdWx0cwpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvRHVtcFJl
bmRlclRyZWUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9E
dW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShy
ZXZpc2lvbiAyMTM2MDMpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC04MCw2ICs4MCw3IEBA
CiAJCTJENDAzRjFCMTUwODcyMDkwMDUzNThEMiAvKiBMYXlvdXRUZXN0SGVscGVyLm0gaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDQwM0VBMjE1MDg3MTQy
MDA1MzU4RDIgLyogTGF5b3V0VGVzdEhlbHBlci5tICovOyB9OwogCQkyREEyRTNBNTFFMUJBNTQx
MDBBM0JCRDAgLyogRHVtcFJlbmRlclRyZWVTcGVsbENoZWNrZXIubW0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyREEyRTNBNDFFMUJBNTQxMDBBM0JCRDAg
LyogRHVtcFJlbmRlclRyZWVTcGVsbENoZWNrZXIubW0gKi87IH07CiAJCTMxMTE3QjNEMTVEOUE1
NkEwMDE2M0JDOCAvKiBNb2NrV2ViTm90aWZpY2F0aW9uUHJvdmlkZXIubW0gaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTExN0IzQjE1RDlBNTZBMDAxNjNC
QzggLyogTW9ja1dlYk5vdGlmaWNhdGlvblByb3ZpZGVyLm1tICovOyB9OworCQkzMTQ4QTA2NjFF
NkY5MTUzMDBEM0IzMTYgLyogaU9TTGF5b3V0VGVzdENvbW11bmljYXRpb24uY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzE0OEEwNTUxRTZGOTBGNDAw
RDNCMzE2IC8qIGlPU0xheW91dFRlc3RDb21tdW5pY2F0aW9uLmNwcCAqLzsgfTsKIAkJNDQ2NENB
QkUxQzIwQTA4QjAwRTVCQjU1IC8qIER1bXBSZW5kZXJUcmVlQXBwTWFpbi5tbSBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ0NjRDQUJEMUMyMEEwNzAwMEU1
QkI1NSAvKiBEdW1wUmVuZGVyVHJlZUFwcE1haW4ubW0gKi87IH07CiAJCTRBRDZBMTE0MTNDODEy
NDAwMEVBOTczNyAvKiBGb3JtVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNEFENkExMTMxM0M4MTI0MDAwRUE5NzM3IC8qIEZvcm1WYWx1ZS5j
cHAgKi87IH07CiAJCTUxMDY4MDNFMTVDQzdCMTAwMDFBOEEyMyAvKiBTbG93TlBQTmV3LmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMDY4MDNEMTVD
QzdCMTAwMDFBOEEyMyAvKiBTbG93TlBQTmV3LmNwcCAqLzsgfTsKQEAgLTI5NCw2ICsyOTUsOCBA
QAogCQkyREEyRTNBNDFFMUJBNTQxMDBBM0JCRDAgLyogRHVtcFJlbmRlclRyZWVTcGVsbENoZWNr
ZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBEdW1wUmVuZGVy
VHJlZVNwZWxsQ2hlY2tlci5tbTsgcGF0aCA9IG1hYy9EdW1wUmVuZGVyVHJlZVNwZWxsQ2hlY2tl
ci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzExMTdCM0ExNUQ5QTU2QTAwMTYz
QkM4IC8qIE1vY2tXZWJOb3RpZmljYXRpb25Qcm92aWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBNb2NrV2ViTm90aWZpY2F0aW9uUHJvdmlkZXIuaDsgcGF0aCA9IG1hYy9N
b2NrV2ViTm90aWZpY2F0aW9uUHJvdmlkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMzExMTdCM0IxNUQ5QTU2QTAwMTYzQkM4IC8qIE1vY2tXZWJOb3RpZmljYXRpb25Qcm92aWRl
ci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IE1vY2tXZWJOb3Rp
ZmljYXRpb25Qcm92aWRlci5tbTsgcGF0aCA9IG1hYy9Nb2NrV2ViTm90aWZpY2F0aW9uUHJvdmlk
ZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxNDhBMDU1MUU2RjkwRjQwMEQz
QjMxNiAvKiBpT1NMYXlvdXRUZXN0Q29tbXVuaWNhdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBpT1NMYXlvdXRUZXN0Q29tbXVuaWNhdGlvbi5jcHA7IHBhdGgg
PSAuLi9UZXN0UnVubmVyU2hhcmVkL2lPU0xheW91dFRlc3RDb21tdW5pY2F0aW9uLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzE0OEEwNTYxRTZGOTBGNDAwRDNCMzE2IC8qIGlP
U0xheW91dFRlc3RDb21tdW5pY2F0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IGlPU0xheW91dFRlc3RDb21tdW5pY2F0aW9uLmg7IHBhdGggPSAuLi9UZXN0UnVubmVyU2hh
cmVkL2lPU0xheW91dFRlc3RDb21tdW5pY2F0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTMyQTcwQUFCMDM3MDVFMUYwMEM5MTc4MyAvKiBEdW1wUmVuZGVyVHJlZVByZWZpeC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEdW1wUmVuZGVyVHJlZVByZWZpeC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzNzVGMDk3MTBEQUMzQ0I2MDBDOEI0RTUg
LyogV2ViS2l0V2VpZ2h0V2F0Y2hlcjEwMC50dGYgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBmaWxlOyBuYW1lID0gV2ViS2l0V2VpZ2h0V2F0Y2hlcjEw
MC50dGY7IHBhdGggPSBmb250cy9XZWJLaXRXZWlnaHRXYXRjaGVyMTAwLnR0Zjsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzc1RjA5NzIwREFDM0NCNjAwQzhCNEU1IC8qIFdlYktpdFdl
aWdodFdhdGNoZXIyMDAudHRmICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gZmlsZTsgbmFtZSA9IFdlYktpdFdlaWdodFdhdGNoZXIyMDAudHRmOyBwYXRo
ID0gZm9udHMvV2ViS2l0V2VpZ2h0V2F0Y2hlcjIwMC50dGY7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC00NzIsNiArNDc1LDcgQEAKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRy
ZW4gPSAoCiAJCQkJMEYxOEU2RjExRDZCOUM2NDAwMjdFNTQ3IC8qIERlcml2ZWRTb3VyY2VzLm1h
a2UgKi8sCisJCQkJMzE0OEEwNjUxRTZGOTBGNDAwRDNCMzE2IC8qIFRlc3RSdW5uZXJTaGFyZWQg
Ki8sCiAJCQkJMEYxOEU2RTcxRDZCOUJGNTAwMjdFNTQ3IC8qIFVJU2NyaXB0Q29udGV4dCAqLywK
IAkJCQlBMTE1OEQ2QTE4OTI3Q0UxMDA4OEMxN0IgLyogaW9zICovLAogCQkJCUExMzRFNTM0MTg5
MDVFNkMwMDkwMUQwNiAvKiBjb25maWcuaCAqLywKQEAgLTY5NSw2ICs2OTksMTYgQEAKIAkJCW5h
bWUgPSBMYXlvdXRUZXN0SGVscGVyOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsK
KwkJMzE0OEEwNjUxRTZGOTBGNDAwRDNCMzE2IC8qIFRlc3RSdW5uZXJTaGFyZWQgKi8gPSB7CisJ
CQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTMxNDhBMDU1MUU2RjkwRjQw
MEQzQjMxNiAvKiBpT1NMYXlvdXRUZXN0Q29tbXVuaWNhdGlvbi5jcHAgKi8sCisJCQkJMzE0OEEw
NTYxRTZGOTBGNDAwRDNCMzE2IC8qIGlPU0xheW91dFRlc3RDb21tdW5pY2F0aW9uLmggKi8sCisJ
CQkpOworCQkJbmFtZSA9IFRlc3RSdW5uZXJTaGFyZWQ7CisJCQlwYXRoID0gLi4vV2ViS2l0VGVz
dFJ1bm5lcjsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CiAJCTQxN0RBOTE4MTM3
MzY3NEQwMDdDNTdGQiAvKiBXZWJDb3JlVGVzdFN1cHBvcnQgKi8gPSB7CiAJCQlpc2EgPSBQQlhH
cm91cDsKIAkJCWNoaWxkcmVuID0gKApAQCAtMTE1Myw2ICsxMTY3LDcgQEAKIAkJCWlzYSA9IFBC
WFNvdXJjZXNCdWlsZFBoYXNlOwogCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKIAkJ
CWZpbGVzID0gKAorCQkJCTMxNDhBMDY2MUU2RjkxNTMwMEQzQjMxNiAvKiBpT1NMYXlvdXRUZXN0
Q29tbXVuaWNhdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0NDY0Q0FCRTFDMjBBMDhCMDBF
NUJCNTUgLyogRHVtcFJlbmRlclRyZWVBcHBNYWluLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkpOwog
CQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CkluZGV4OiBUb29scy9E
dW1wUmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRyZWUubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
RHVtcFJlbmRlclRyZWUvbWFjL0R1bXBSZW5kZXJUcmVlLm1tCShyZXZpc2lvbiAyMTM2MDMpCisr
KyBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRyZWUubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTEwNCw2ICsxMDQsNyBAQAogI2lmIFBMQVRGT1JNKElPUykKICNpbXBvcnQgIkR1bXBS
ZW5kZXJUcmVlQnJvd3NlclZpZXcuaCIKICNpbXBvcnQgIlVJS2l0U1BJLmgiCisjaW1wb3J0ICJp
T1NMYXlvdXRUZXN0Q29tbXVuaWNhdGlvbi5oIgogI2ltcG9ydCA8UXVhcnR6Q29yZS9RdWFydHpD
b3JlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0NvcmVHcmFwaGljc1NQSS5oPgogI2ltcG9ydCA8V2Vi
S2l0L1dBS1dpbmRvdy5oPgpAQCAtMTIzMSwxNyArMTIzMiw3IEBAIHZvaWQgd3JpdGVDcmFzaGVk
TWVzc2FnZU9uRmF0YWxFcnJvcihpbnQKIHZvaWQgZHVtcFJlbmRlclRyZWUoaW50IGFyZ2MsIGNv
bnN0IGNoYXIgKmFyZ3ZbXSkKIHsKICNpZiBQTEFURk9STShJT1MpCi0gICAgY29uc3QgY2hhciog
aWRlbnRpZmllciA9IGdldGVudigiSVBDX0lERU5USUZJRVIiKTsKLSAgICBjb25zdCBjaGFyICpz
dGRpblBhdGggPSBbW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIvdG1wLyVzX0lOIiwgaWRl
bnRpZmllcl0gVVRGOFN0cmluZ107Ci0gICAgY29uc3QgY2hhciAqc3Rkb3V0UGF0aCA9IFtbTlNT
dHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIi90bXAvJXNfT1VUIiwgaWRlbnRpZmllcl0gVVRGOFN0
cmluZ107Ci0gICAgY29uc3QgY2hhciAqc3RkZXJyUGF0aCA9IFtbTlNTdHJpbmcgc3RyaW5nV2l0
aEZvcm1hdDpAIi90bXAvJXNfRVJST1IiLCBpZGVudGlmaWVyXSBVVEY4U3RyaW5nXTsKLQotICAg
IGludCBpbmZkID0gb3BlbihzdGRpblBhdGgsIE9fUkRXUik7Ci0gICAgZHVwMihpbmZkLCBTVERJ
Tl9GSUxFTk8pOwotICAgIGludCBvdXRmZCA9IG9wZW4oc3Rkb3V0UGF0aCwgT19SRFdSKTsKLSAg
ICBkdXAyKG91dGZkLCBTVERPVVRfRklMRU5PKTsKLSAgICBpbnQgZXJyZmQgPSBvcGVuKHN0ZGVy
clBhdGgsIE9fUkRXUiB8IE9fTk9OQkxPQ0spOwotICAgIGR1cDIoZXJyZmQsIFNUREVSUl9GSUxF
Tk8pOworICAgIHNldHVwaU9TTGF5b3V0VGVzdENvbW11bmljYXRpb24oKTsKICNlbmRpZgogCiAg
ICAgc2lnbmFsKFNJR0lMTCwgJndyaXRlQ3Jhc2hlZE1lc3NhZ2VPbkZhdGFsRXJyb3IpOwpAQCAt
MTMwMiw5ICsxMjkzLDcgQEAgdm9pZCBkdW1wUmVuZGVyVHJlZShpbnQgYXJnYywgY29uc3QgY2hh
cgogICAgIH0KIAogI2lmIFBMQVRGT1JNKElPUykKLSAgICBjbG9zZShpbmZkKTsKLSAgICBjbG9z
ZShvdXRmZCk7Ci0gICAgY2xvc2UoZXJyZmQpOworICAgIHRlYXJkb3duaU9TTGF5b3V0VGVzdENv
bW11bmljYXRpb24oKTsKICNlbmRpZgogfQogCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5
L3BvcnQvaW9zLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9p
b3MucHkJKHJldmlzaW9uIDIxMzYwMykKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9p
b3MucHkJKHdvcmtpbmcgY29weSkKQEAgLTgyLDMgKzgyLDEyIEBAIGNsYXNzIElPU1BvcnQoRGFy
d2luUG9ydCk6CiAKICAgICBkZWYgc2V0dXBfdGVzdF9ydW4oc2VsZiwgZGV2aWNlX2NsYXNzPU5v
bmUpOgogICAgICAgICBzZWxmLl9jcmVhdGVfZGV2aWNlcyhkZXZpY2VfY2xhc3MpCisKKyAgICAg
ICAgZm9yIGkgaW4geHJhbmdlKHNlbGYuY2hpbGRfcHJvY2Vzc2VzKCkpOgorICAgICAgICAgICAg
c2VsZi5kZXZpY2VfZm9yX3dvcmtlcl9udW1iZXIoaSkuc2V0dXAoKQorCisgICAgZGVmIGNsZWFu
X3VwX3Rlc3RfcnVuKHNlbGYpOgorICAgICAgICBzdXBlcihJT1NQb3J0LCBzZWxmKS5jbGVhbl91
cF90ZXN0X3J1bigpCisKKyAgICAgICAgZm9yIGkgaW4geHJhbmdlKHNlbGYuY2hpbGRfcHJvY2Vz
c2VzKCkpOgorICAgICAgICAgICAgc2VsZi5kZXZpY2VfZm9yX3dvcmtlcl9udW1iZXIoaSkudGVh
cmRvd24oKQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3NpbXVsYXRvcl9wcm9j
ZXNzLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9zaW11bGF0
b3JfcHJvY2Vzcy5weQkocmV2aXNpb24gMjEzNjAzKQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9wb3J0L3NpbXVsYXRvcl9wcm9jZXNzLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw2
IEBAIGltcG9ydCBzaWduYWwKIGltcG9ydCB0aW1lCiAKIGZyb20gd2Via2l0cHkucG9ydC5zZXJ2
ZXJfcHJvY2VzcyBpbXBvcnQgU2VydmVyUHJvY2VzcwotZnJvbSB3ZWJraXRweS54Y29kZS5zaW11
bGF0b3IgaW1wb3J0IFNpbXVsYXRvcgogCiAKIGNsYXNzIFNpbXVsYXRvclByb2Nlc3MoU2VydmVy
UHJvY2Vzcyk6CkBAIC01Niw1NSArNTUsNDggQEAgY2xhc3MgU2ltdWxhdG9yUHJvY2VzcyhTZXJ2
ZXJQcm9jZXNzKToKICAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMDEpICAjIEluIHNlY29u
ZHMKICAgICAgICAgICAgIHJldHVybiBzZWxmLnJldHVybmNvZGUKIAorICAgICMgUHl0aG9uIDIn
cyBpbXBsZW1lbnRhdGlvbiBvZiBtYWtlZmlsZSBibG9ja3Mgb24gcmVhZCBpZiB0aGUKKyAgICAj
IHNvY2tldCBpcyBvcGVuLiBJbXBsZW1lbnQgdGhlIHNtYWxsIHN1YnNldCBvZiBjb21tYW5kcyB3
ZSBuZWVkLgorICAgIGNsYXNzIFJlYWRTb2NrZXQob2JqZWN0KToKKworICAgICAgICBkZWYgX19p
bml0X18oc2VsZiwgc29jayk6CisgICAgICAgICAgICBzZWxmLnNvY2tldCA9IHNvY2sKKyAgICAg
ICAgICAgIHNlbGYuY2xvc2VkID0gbm90IHNlbGYuc29ja2V0CisKKyAgICAgICAgZGVmIGNsb3Nl
KHNlbGYpOgorICAgICAgICAgICAgc2VsZi5jbG9zZWQgPSBUcnVlCisgICAgICAgICAgICByZXR1
cm4gc2VsZi5zb2NrZXQuY2xvc2UoKQorCisgICAgICAgICMgVGhpcyBpcyB1c2VkIGluIHNlbGVj
dAorICAgICAgICBkZWYgZmlsZW5vKHNlbGYpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuc29j
a2V0CisKKyAgICAgICAgZGVmIHJlYWQoc2VsZik6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5z
b2NrZXQucmVjdigxMDI0KQorCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnRfb2JqLCBuYW1l
LCBjbWQsIGVudj1Ob25lLCB1bml2ZXJzYWxfbmV3bGluZXM9RmFsc2UsIHRyZWF0X25vX2RhdGFf
YXNfY3Jhc2g9RmFsc2UsIHdvcmtlcl9udW1iZXI9Tm9uZSk6CiAgICAgICAgIHNlbGYuX2J1bmRs
ZV9pZCA9IHBvcnRfb2JqLmFwcF9pZGVudGlmaWVyX2Zyb21fYnVuZGxlKGNtZFswXSkKICAgICAg
ICAgc2VsZi5fZGV2aWNlID0gcG9ydF9vYmouZGV2aWNlX2Zvcl93b3JrZXJfbnVtYmVyKHdvcmtl
cl9udW1iZXIpCiAgICAgICAgIGlmIG5vdCBzZWxmLl9kZXZpY2UuaW5zdGFsbF9hcHAoY21kWzBd
LCBlbnYpOgogICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdGYWlsZWQgdG8gaW5zdGFs
bCBhcHAge30gb24gc2ltdWxhdG9yIGRldmljZSB7fScuZm9ybWF0KGNtZFswXSwgc2VsZi5fZGV2
aWNlLnVkaWQpKQotICAgICAgICBlbnZbJ0lQQ19JREVOVElGSUVSJ10gPSBzZWxmLl9idW5kbGVf
aWQgKyAnLScgKyBzZWxmLl9kZXZpY2UudWRpZAotCi0gICAgICAgICMgVGhpcyBsb2NhdGlvbiBt
YXRjaGVzIHRoZSBsb2NhdGlvbiB1c2VkIGJ5IFdlYktpdFRlc3RSdW5uZXIgYW5kIER1bXBSZW5k
ZXJUcmVlCi0gICAgICAgICMgZm9yIHRoZSBvdGhlciBzaWRlIG9mIHRoZXNlIGZpZm9zLgotICAg
ICAgICBmaWxlX2xvY2F0aW9uID0gJy90bXAvJyArIGVudlsnSVBDX0lERU5USUZJRVInXQotICAg
ICAgICBzZWxmLl9pbl9wYXRoID0gZmlsZV9sb2NhdGlvbiArICdfSU4nCi0gICAgICAgIHNlbGYu
X291dF9wYXRoID0gZmlsZV9sb2NhdGlvbiArICdfT1VUJwotICAgICAgICBzZWxmLl9lcnJvcl9w
YXRoID0gZmlsZV9sb2NhdGlvbiArICdfRVJST1InCiAKKyAgICAgICAgZW52WydQT1JUJ10gPSBz
dHIoc2VsZi5fZGV2aWNlLnBvcnQoKSkKICAgICAgICAgc3VwZXIoU2ltdWxhdG9yUHJvY2Vzcywg
c2VsZikuX19pbml0X18ocG9ydF9vYmosIG5hbWUsIGNtZCwgZW52LCB1bml2ZXJzYWxfbmV3bGlu
ZXMsIHRyZWF0X25vX2RhdGFfYXNfY3Jhc2gpCiAKLSAgICBkZWYgX3Jlc2V0KHNlbGYpOgotICAg
ICAgICBzdXBlcihTaW11bGF0b3JQcm9jZXNzLCBzZWxmKS5fcmVzZXQoKQotCi0gICAgICAgICMg
VW5saW5rcyBhcmUgbmVlZGVkIG9uIHJlc2V0IGluIHRoZSBldmVudCB0aGF0IHRoZSBQeXRob24g
Y29kZSB1bmV4cGVjdGVkbHkKLSAgICAgICAgIyBmYWlscyBiZXR3ZWVuIF9zdGFydCgpIGFuZCBr
aWxsKCkuICBUaGlzIGNhbiBiZSBjYXVzZWQgYnkgYSBTSUdLSUxMIG9yIGEgY3Jhc2guCi0gICAg
ICAgICMgVGhpcyBlbnN1cmVzIHRoYXQgb3MubWtmaWZvKCkgd2lsbCBub3QgYmUgb2JzdHJ1Y3Rl
ZCBieSBwcmV2aW91cyBmaWZvcy4KLSAgICAgICAgIyBPdGhlciBmaWxlcyB3aWxsIHN0aWxsIGNh
dXNlIG9zLm1rZmlmbygpIHRvIGZhaWwuCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIG9zLnVu
bGluayhzZWxmLl9pbl9wYXRoKQotICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICBwYXNzCi0g
ICAgICAgIHRyeToKLSAgICAgICAgICAgIG9zLnVubGluayhzZWxmLl9vdXRfcGF0aCkKLSAgICAg
ICAgZXhjZXB0OgotICAgICAgICAgICAgcGFzcwotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBv
cy51bmxpbmsoc2VsZi5fZXJyb3JfcGF0aCkKLSAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAg
cGFzcworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgX21ha2VfY29ubmVjdGlvbl9jcmVhdGVf
ZmlsZShzZXJ2ZXIsIHR5cGUpOgorICAgICAgICBjb25uZWN0aW9uLCBhZGRyZXNzID0gc2VydmVy
LmFjY2VwdCgpCisgICAgICAgIGFzc2VydCBhZGRyZXNzWzBdID09ICcxMjcuMC4wLjEnCisgICAg
ICAgIGlmICd3JyBpbiB0eXBlOgorICAgICAgICAgICAgcmV0dXJuIGNvbm5lY3Rpb24ubWFrZWZp
bGUodHlwZSwgMCkKKyAgICAgICAgcmV0dXJuIFNpbXVsYXRvclByb2Nlc3MuUmVhZFNvY2tldChj
b25uZWN0aW9uKQogCiAgICAgZGVmIF9zdGFydChzZWxmKToKICAgICAgICAgaWYgc2VsZi5fcHJv
YzoKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ3t9IGFscmVhZHkgcnVubmluZycuZm9y
bWF0KHNlbGYuX25hbWUpKQogICAgICAgICBzZWxmLl9yZXNldCgpCiAKLSAgICAgICAgRklGT19Q
RVJNSVNTSU9OX0ZMQUdTID0gMDYwMCAgIyBPbmx5IG93bmVyIGNhbiByZWFkIGFuZCB3cml0ZQot
ICAgICAgICBvcy5ta2ZpZm8oc2VsZi5faW5fcGF0aCwgRklGT19QRVJNSVNTSU9OX0ZMQUdTKQot
ICAgICAgICBvcy5ta2ZpZm8oc2VsZi5fb3V0X3BhdGgsIEZJRk9fUEVSTUlTU0lPTl9GTEFHUykK
LSAgICAgICAgb3MubWtmaWZvKHNlbGYuX2Vycm9yX3BhdGgsIEZJRk9fUEVSTUlTU0lPTl9GTEFH
UykKLQotICAgICAgICBzdGRvdXQgPSBvcy5mZG9wZW4ob3Mub3BlbihzZWxmLl9vdXRfcGF0aCwg
b3MuT19SRE9OTFkgfCBvcy5PX05PTkJMT0NLKSwgJ3JiJykKLSAgICAgICAgc3RkZXJyID0gb3Mu
ZmRvcGVuKG9zLm9wZW4oc2VsZi5fZXJyb3JfcGF0aCwgb3MuT19SRE9OTFkgfCBvcy5PX05PTkJM
T0NLKSwgJ3JiJykKLQorICAgICAgICBzZWxmLl9kZXZpY2Uuc2VydmVyKCkubGlzdGVuKDMpCiAg
ICAgICAgIHNlbGYuX3BpZCA9IHNlbGYuX2RldmljZS5sYXVuY2hfYXBwKHNlbGYuX2J1bmRsZV9p
ZCwgc2VsZi5fY21kWzE6XSwgZW52PXNlbGYuX2VudikKIAogICAgICAgICBkZWYgaGFuZGxlcihz
aWdudW0sIGZyYW1lKToKQEAgLTExNCw4ICsxMDYsMTMgQEAgY2xhc3MgU2ltdWxhdG9yUHJvY2Vz
cyhTZXJ2ZXJQcm9jZXNzKToKICAgICAgICAgc2lnbmFsLmFsYXJtKDMpICAjIEluIHNlY29uZHMK
IAogICAgICAgICBzdGRpbiA9IE5vbmUKKyAgICAgICAgc3Rkb3V0ID0gTm9uZQorICAgICAgICBz
dGRlcnIgPSBOb25lCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHN0ZGluID0gb3BlbihzZWxm
Ll9pbl9wYXRoLCAndycsIDApICAjIE9wZW5pbmcgd2l0aCBubyBidWZmZXJpbmcsIGxpa2UgcG9w
ZW4KKyAgICAgICAgICAgICMgT3JkZXIgbWF0dGVycyBoZXJlIQorICAgICAgICAgICAgc3RkaW4g
PSBTaW11bGF0b3JQcm9jZXNzLl9tYWtlX2Nvbm5lY3Rpb25fY3JlYXRlX2ZpbGUoc2VsZi5fZGV2
aWNlLnNlcnZlcigpLCAndycpCisgICAgICAgICAgICBzdGRvdXQgPSBTaW11bGF0b3JQcm9jZXNz
Ll9tYWtlX2Nvbm5lY3Rpb25fY3JlYXRlX2ZpbGUoc2VsZi5fZGV2aWNlLnNlcnZlcigpLCAncmIn
KQorICAgICAgICAgICAgc3RkZXJyID0gU2ltdWxhdG9yUHJvY2Vzcy5fbWFrZV9jb25uZWN0aW9u
X2NyZWF0ZV9maWxlKHNlbGYuX2RldmljZS5zZXJ2ZXIoKSwgJ3JiJykKICAgICAgICAgZXhjZXB0
OgogICAgICAgICAgICAgIyBXZSBzZXQgc2VsZi5fcHJvYyBhcyBfcmVzZXQoKSBhbmQgX2tpbGwo
KSBkZXBlbmQgb24gaXQuCiAgICAgICAgICAgICBzZWxmLl9wcm9jID0gU2ltdWxhdG9yUHJvY2Vz
cy5Qb3BlbihzZWxmLl9waWQsIHN0ZGluLCBzdGRvdXQsIHN0ZGVycikKSW5kZXg6IFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkveGNvZGUvZGV2aWNlLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkveGNvZGUvZGV2aWNlLnB5CShyZXZpc2lvbiAyMTM2MDMpCisrKyBUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L3hjb2RlL2RldmljZS5weQkod29ya2luZyBjb3B5KQpAQCAtMjAsMTIg
KzIwLDU1IEBACiAjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCiAjIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogCitpbXBvcnQgc29ja2V0
CisKK2Zyb20gcmFuZG9tIGltcG9ydCByYW5kaW50CiAKIGNsYXNzIERldmljZShvYmplY3QpOgor
CisgICAgUE9SVF9SQU5HRSA9IFs1MDAwLCAxMDAwMF0KKyAgICBGT1JXQVJEX1BPUlRTID0gWzgw
MDAsIDgwODAsIDg0NDNdCisgICAgVURJRF9UT19TT0NLRVQgPSB7fQorCiAgICAgZGVmIF9faW5p
dF9fKHNlbGYsIG5hbWUsIHVkaWQsIGhvc3QpOgogICAgICAgICBzZWxmLl9ob3N0ID0gaG9zdAog
ICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCiAgICAgICAgIHNlbGYudWRpZCA9IHVkaWQKKyAgICAg
ICAgaWYgdWRpZCBub3QgaW4gRGV2aWNlLlVESURfVE9fU09DS0VUOgorICAgICAgICAgICAgRGV2
aWNlLlVESURfVE9fU09DS0VUW3VkaWRdID0gTm9uZQorCisgICAgZGVmIHBvcnQoc2VsZik6Cisg
ICAgICAgIGlmIG5vdCBzZWxmLnNlcnZlcigpOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAg
ICAgICAgcmV0dXJuIHNlbGYuc2VydmVyKCkuZ2V0c29ja25hbWUoKVsxXQorCisgICAgZGVmIHNl
cnZlcihzZWxmKToKKyAgICAgICAgcmV0dXJuIERldmljZS5VRElEX1RPX1NPQ0tFVFtzZWxmLnVk
aWRdCisKKyAgICBkZWYgc2V0dXAoc2VsZik6CisgICAgICAgIHNlcnZlciA9IERldmljZS5VRElE
X1RPX1NPQ0tFVFtzZWxmLnVkaWRdCisgICAgICAgIGlmIG5vdCBzZXJ2ZXI6CisgICAgICAgICAg
ICBzdGFydGluZ19wb3J0ID0gcmFuZGludChEZXZpY2UuUE9SVF9SQU5HRVswXSwgRGV2aWNlLlBP
UlRfUkFOR0VbMV0pCisgICAgICAgICAgICB1cHBlcl9ib3VuZCA9IERldmljZS5QT1JUX1JBTkdF
WzFdIC0gRGV2aWNlLlBPUlRfUkFOR0VbMF0KKworICAgICAgICAgICAgZm9yIGNudCBpbiB4cmFu
Z2UoMCwgdXBwZXJfYm91bmQpOgorICAgICAgICAgICAgICAgIHBvcnQgPSAoc3RhcnRpbmdfcG9y
dCArIGNudCkgJSB1cHBlcl9ib3VuZAorICAgICAgICAgICAgICAgIGlmIHBvcnQgaW4gRGV2aWNl
LkZPUldBUkRfUE9SVFM6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAg
ICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBzZXJ2ZXIgPSBzb2NrZXQuc29ja2V0KHNv
Y2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCisgICAgICAgICAgICAgICAgICAgIHNl
cnZlci5zZXRzb2Nrb3B0KHNvY2tldC5TT0xfU09DS0VULCBzb2NrZXQuU09fUkVVU0VBRERSLCAx
KQorICAgICAgICAgICAgICAgICAgICBzZXJ2ZXIuYmluZCgoJ2xvY2FsaG9zdCcsIHBvcnQpKQor
ICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQu
ZXJyb3IsIFJ1bnRpbWVFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgc2VydmVyID0gTm9uZQor
ICAgICAgICAgICAgRGV2aWNlLlVESURfVE9fU09DS0VUW3NlbGYudWRpZF0gPSBzZXJ2ZXIKKwor
ICAgICAgICBpZiBub3QgRGV2aWNlLlVESURfVE9fU09DS0VUW3NlbGYudWRpZF06CisgICAgICAg
ICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ05vIG9wZW4gcG9ydHMgZm91bmQnKQorCisgICAgZGVm
IHRlYXJkb3duKHNlbGYpOgorICAgICAgICBEZXZpY2UuVURJRF9UT19TT0NLRVRbc2VsZi51ZGlk
XSA9IE5vbmUKIAogICAgIGRlZiBpbnN0YWxsX2FwcChzZWxmLCBhcHBfcGF0aCwgZW52PU5vbmUp
OgogICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCkluZGV4OiBUb29scy9UZXN0UnVu
bmVyU2hhcmVkL2lPU0xheW91dFRlc3RDb21tdW5pY2F0aW9uLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9UZXN0UnVubmVyU2hhcmVkL2lPU0xheW91dFRlc3RDb21tdW5pY2F0aW9uLmNwcAkobm9u
ZXhpc3RlbnQpCisrKyBUb29scy9UZXN0UnVubmVyU2hhcmVkL2lPU0xheW91dFRlc3RDb21tdW5p
Y2F0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwMCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJpT1NMYXlvdXRUZXN0Q29tbXVuaWNhdGlv
bi5oIgorCisjaWYgUExBVEZPUk0oSU9TKQorCisjaW5jbHVkZSA8bmV0ZGIuaD4KKyNpbmNsdWRl
IDxuZXRpbmV0L2luLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPHN5cy90
eXBlcy5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCitzdGF0aWMgY29uc3QgdW5zaWduZWQgc3Rk
aW5JbmRleCA9IDA7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgc3Rkb3V0SW5kZXggPSAxOworc3Rh
dGljIGNvbnN0IHVuc2lnbmVkIHN0ZGVyckluZGV4ID0gMjsKK3N0YXRpYyBjb25zdCB1bnNpZ25l
ZCBudW1IYW5kbGVzID0gMzsKKworc3RhdGljIGludCBzb2NrZXRzW251bUhhbmRsZXNdOworc3Rh
dGljIHN0cnVjdCBzb2NrYWRkcl9pbiBzZXJ2ZXJBZGRyZXNzOworc3RhdGljIHN0cnVjdCBob3N0
ZW50KiBob3N0ID0gZ2V0aG9zdGJ5bmFtZSgibG9jYWxob3N0Iik7CitzdGF0aWMgRklMRSogb3Jp
Z2luYWxzW251bUhhbmRsZXNdOworc3RhdGljIEZJTEUqKiByZWZlcmVuY2VzVG9IYW5kbGVzW251
bUhhbmRsZXNdOworCit2b2lkIHNldHVwaU9TTGF5b3V0VGVzdENvbW11bmljYXRpb24oKQorewor
ICAgIHJlZmVyZW5jZXNUb0hhbmRsZXNbc3RkaW5JbmRleF0gPSAmc3RkaW47CisgICAgcmVmZXJl
bmNlc1RvSGFuZGxlc1tzdGRvdXRJbmRleF0gPSAmc3Rkb3V0OworICAgIHJlZmVyZW5jZXNUb0hh
bmRsZXNbc3RkZXJySW5kZXhdID0gJnN0ZGVycjsKKworICAgIGludCBwb3J0ID0gYXRvaShnZXRl
bnYoIlBPUlQiKSk7CisgICAgaWYgKHBvcnQgPD0gMCkKKyAgICAgICAgYWJvcnQoKTsKKworICAg
IG1lbXNldCgoY2hhciAqKSAmc2VydmVyQWRkcmVzcywgMCwgc2l6ZW9mKHNlcnZlckFkZHJlc3Mp
KTsKKyAgICBzZXJ2ZXJBZGRyZXNzLnNpbl9mYW1pbHkgPSBBRl9JTkVUOworICAgIG1lbWNweSgK
KyAgICAgICAgKGNoYXIgKikmc2VydmVyQWRkcmVzcy5zaW5fYWRkci5zX2FkZHIsCisgICAgICAg
IChjaGFyICopaG9zdC0+aF9hZGRyLAorICAgICAgICBob3N0LT5oX2xlbmd0aCk7CisgICAgc2Vy
dmVyQWRkcmVzcy5zaW5fcG9ydCA9IGh0b25zKHBvcnQpOworCisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG51bUhhbmRsZXM7ICsraSkgeworICAgICAgICAvLyBPcmRlciBtYXR0ZXJzIQor
ICAgICAgICBzb2NrZXRzW2ldID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfU1RSRUFNLCAwKTsKKyAg
ICAgICAgaWYgKHNvY2tldHNbaV0gPCAwKQorICAgICAgICAgICAgYWJvcnQoKTsKKyAgICAgICAg
aWYgKGNvbm5lY3Qoc29ja2V0c1tpXSwgKHN0cnVjdCBzb2NrYWRkciAqKSAmc2VydmVyQWRkcmVz
cywgc2l6ZW9mKHNlcnZlckFkZHJlc3MpKSA8IDApCisgICAgICAgICAgICBhYm9ydCgpOworCisg
ICAgICAgIG9yaWdpbmFsc1tpXSA9ICpyZWZlcmVuY2VzVG9IYW5kbGVzW2ldOworICAgICAgICBm
Zmx1c2gob3JpZ2luYWxzW2ldKTsKKyAgICAgICAgaWYgKGkgPT0gc3RkaW5JbmRleCkKKyAgICAg
ICAgICAgICpyZWZlcmVuY2VzVG9IYW5kbGVzW2ldID0gZmRvcGVuKHNvY2tldHNbaV0sICJyYiIp
OworICAgICAgICBlbHNlCisgICAgICAgICAgICAqcmVmZXJlbmNlc1RvSGFuZGxlc1tpXSA9IGZk
b3Blbihzb2NrZXRzW2ldLCAid2IiKTsKKyAgICAgICAgc2V0YnVmKCpyZWZlcmVuY2VzVG9IYW5k
bGVzW2ldLCBudWxscHRyKTsKKyAgICB9Cit9CisKK3ZvaWQgdGVhcmRvd25pT1NMYXlvdXRUZXN0
Q29tbXVuaWNhdGlvbigpCit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUhhbmRs
ZXM7ICsraSkgeworICAgICAgICBmZmx1c2goKnJlZmVyZW5jZXNUb0hhbmRsZXNbaV0pOworICAg
ICAgICBmY2xvc2UoKnJlZmVyZW5jZXNUb0hhbmRsZXNbaV0pOworICAgICAgICAqcmVmZXJlbmNl
c1RvSGFuZGxlc1tpXSA9IG9yaWdpbmFsc1tpXTsKKworICAgICAgICBjbG9zZShzb2NrZXRzW2ld
KTsKKyAgICB9Cit9CisKKyNlbHNlCisKK3ZvaWQgc2V0dXBpT1NMYXlvdXRUZXN0Q29tbXVuaWNh
dGlvbigpIHsgfQordm9pZCB0ZWFyZG93bmlPU0xheW91dFRlc3RDb21tdW5pY2F0aW9uKCkgeyB9
CisKKyNlbmRpZgpJbmRleDogVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9pT1NMYXlvdXRUZXN0Q29t
bXVuaWNhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvaU9TTGF5
b3V0VGVzdENvbW11bmljYXRpb24uaAkobm9uZXhpc3RlbnQpCisrKyBUb29scy9UZXN0UnVubmVy
U2hhcmVkL2lPU0xheW91dFRlc3RDb21tdW5pY2F0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwyOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCit2b2lkIHNldHVwaU9TTGF5
b3V0VGVzdENvbW11bmljYXRpb24oKTsKK3ZvaWQgdGVhcmRvd25pT1NMYXlvdXRUZXN0Q29tbXVu
aWNhdGlvbigpOwpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9XZWJLaXRUZXN0UnVubmVy
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9XZWJLaXRUZXN0UnVubmVyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlz
aW9uIDIxMzYwMykKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvV2ViS2l0VGVzdFJ1bm5lci54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC03Myw2ICs3Myw3IEBA
CiAJCTJFNjNFREExMTg5MUIyOTEwMDJBN0FGQyAvKiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50SU9T
Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkU2M0VE
NzgxODkxQUNFOTAwMkE3QUZDIC8qIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnRJT1MubW0gKi87IH07
CiAJCTJFNjNFREE2MTg5MUJEQzAwMDJBN0FGQyAvKiBUZXN0UnVubmVyLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDQzk5ODE3MTFEM0Y1MUUwMDE3
QkNBMiAvKiBUZXN0UnVubmVyLmNwcCAqLzsgfTsKIAkJMkU3NDlCRjIxODkxRUJGQTAwN0ZDMTc1
IC8qIEV2ZW50U2VuZGVyUHJveHlJT1MubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAyRTYzRUQ3QTE4OTFBQ0U5MDAyQTdBRkMgLyogRXZlbnRTZW5kZXJQ
cm94eUlPUy5tbSAqLzsgfTsKKwkJMzE0OEEwNjgxRTZGOTE2MzAwRDNCMzE2IC8qIGlPU0xheW91
dFRlc3RDb21tdW5pY2F0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDMxNDhBMDUzMUU2Rjg1QjYwMEQzQjMxNiAvKiBpT1NMYXlvdXRUZXN0Q29t
bXVuaWNhdGlvbi5jcHAgKi87IH07CiAJCTUxMDU4QUQ1MUQ2Nzg4MjAwMDlBNTM4QyAvKiBsaWJX
ZWJDb3JlVGVzdFN1cHBvcnQuZHlsaWIgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA0MTIzMEUxNjEzOEM3OEJGMDBCQ0NGQ0EgLyogbGliV2ViQ29yZVRl
c3RTdXBwb3J0LmR5bGliICovOyB9OwogCQk1MTA1OEFENjFENjc4ODI1MDA5QTUzOEMgLyogV2Vi
S2l0LmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGNTE2OUNBMTQ0NTIyMkQwMEUwQTlENyAvKiBXZWJLaXQuZnJhbWV3b3JrICovOyB9
OwogCQk1NjQxRTJEMDE0MzM1RTk1MDA4MzA3RTUgLyogSlNUZXh0SW5wdXRDb250cm9sbGVyLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU2NDFFMkNF
MTQzMzVFOTUwMDgzMDdFNSAvKiBKU1RleHRJbnB1dENvbnRyb2xsZXIuY3BwICovOyB9OwpAQCAt
MjUyLDYgKzI1Myw4IEBACiAJCTJFRTUyRDE0MTg5MEE5RkIwMDEwRUQyMSAvKiBUZXN0Q29udHJv
bGxlcklPUy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFRlc3RD
b250cm9sbGVySU9TLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRUU1MkQxNjE4
OTBBOUZCMDAxMEVEMjEgLyogbWFpbklPUy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9i
amNwcDsgbmFtZSA9IG1haW5JT1MubW07IHBhdGggPSAuLi9pb3MvbWFpbklPUy5tbTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzExMEJFMEYxNUJBMDExNDAwRDIxNkFDIC8qIFdlYk5v
dGlmaWNhdGlvblByb3ZpZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYk5vdGlmaWNhdGlvblByb3Zp
ZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxNDhBMDUzMUU2Rjg1QjYwMEQz
QjMxNiAvKiBpT1NMYXlvdXRUZXN0Q29tbXVuaWNhdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBpT1NMYXlvdXRUZXN0Q29tbXVuaWNhdGlvbi5jcHA7IHBhdGgg
PSAuLi9UZXN0UnVubmVyU2hhcmVkL2lPU0xheW91dFRlc3RDb21tdW5pY2F0aW9uLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzE0OEEwNTQxRTZGODVCNjAwRDNCMzE2IC8qIGlP
U0xheW91dFRlc3RDb21tdW5pY2F0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IGlPU0xheW91dFRlc3RDb21tdW5pY2F0aW9uLmg7IHBhdGggPSAuLi9UZXN0UnVubmVyU2hh
cmVkL2lPU0xheW91dFRlc3RDb21tdW5pY2F0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTMxNjRDOEVGMTVEMUFEQTEwMEVGMUZFMCAvKiBXZWJOb3RpZmljYXRpb25Qcm92aWRl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJOb3RpZmljYXRp
b25Qcm92aWRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3OEQ0NDIyMTMz
NDZEMDAwMDZBNzc3QiAvKiBjb25maWcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gY29uZmlnLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxMjMwRTE2MTM4Qzc4QkYwMEJDQ0ZDQSAvKiBsaWJX
ZWJDb3JlVGVzdFN1cHBvcnQuZHlsaWIgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSAiY29tcGlsZWQubWFjaC1vLmR5bGliIjsgcGF0aCA9IGxpYldlYkNv
cmVUZXN0U3VwcG9ydC5keWxpYjsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsK
QEAgLTQ1MCw2ICs0NTMsOCBAQAogCQkwRjE4RTcxQTFENkJDNEJDMDAyN0U1NDcgLyogVGVzdFJ1
bm5lclNoYXJlZCAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJ
CQkJMzE0OEEwNTMxRTZGODVCNjAwRDNCMzE2IC8qIGlPU0xheW91dFRlc3RDb21tdW5pY2F0aW9u
LmNwcCAqLywKKwkJCQkzMTQ4QTA1NDFFNkY4NUI2MDBEM0IzMTYgLyogaU9TTGF5b3V0VGVzdENv
bW11bmljYXRpb24uaCAqLywKIAkJCQkwRjE4RTcxQjFENkJDNEU2MDAyN0U1NDcgLyogQmluZGlu
Z3MgKi8sCiAJCQkJMEY3M0I1NDcxQkE3ODJGRTAwNEIzRUY0IC8qIFVJU2NyaXB0Q29udGV4dCAq
LywKIAkJCSk7CkBAIC05MzUsNiArOTQwLDcgQEAKIAkJCWZpbGVzID0gKAogCQkJCTJFNzQ5QkYy
MTg5MUVCRkEwMDdGQzE3NSAvKiBFdmVudFNlbmRlclByb3h5SU9TLm1tIGluIFNvdXJjZXMgKi8s
CiAJCQkJMEZFQkY4NUExQkI2MURGMjAwMjg3MjJEIC8qIEhJREV2ZW50R2VuZXJhdG9yLm1tIGlu
IFNvdXJjZXMgKi8sCisJCQkJMzE0OEEwNjgxRTZGOTE2MzAwRDNCMzE2IC8qIGlPU0xheW91dFRl
c3RDb21tdW5pY2F0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJFNjNFRDk0MTg5MUFEQUQw
MDJBN0FGQyAvKiBtYWluSU9TLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMkU2M0VEOTExODkxQURB
RDAwMkE3QUZDIC8qIFBsYXRmb3JtV2ViVmlld0lPUy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTJF
NjNFRDkyMTg5MUFEQUQwMDJBN0FGQyAvKiBUZXN0Q29udHJvbGxlcklPUy5tbSBpbiBTb3VyY2Vz
ICovLApJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9pb3MvVGVzdENvbnRyb2xsZXJJT1Mu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9pb3MvVGVzdENvbnRyb2xs
ZXJJT1MubW0JKHJldmlzaW9uIDIxMzYwMykKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvaW9z
L1Rlc3RDb250cm9sbGVySU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAj
aW1wb3J0ICJUZXN0SW52b2NhdGlvbi5oIgogI2ltcG9ydCAiVGVzdFJ1bm5lcldLV2ViVmlldy5o
IgogI2ltcG9ydCAiVUlLaXRTUEkuaCIKKyNpbXBvcnQgImlPU0xheW91dFRlc3RDb21tdW5pY2F0
aW9uLmgiCiAjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KICNpbXBvcnQgPFVJS2l0
L1VJS2l0Lmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tQcmVmZXJlbmNlc1JlZlByaXZhdGUuaD4KQEAg
LTQ5LDIxICs1MCwxMiBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpub3RpZnlEb25lKCkKIAogdm9p
ZCBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1Jbml0aWFsaXplKCkKIHsKLSAgICBjb25zdCBjaGFy
KiBpZGVudGlmaWVyID0gZ2V0ZW52KCJJUENfSURFTlRJRklFUiIpOwotICAgIGNvbnN0IGNoYXIg
KnN0ZGluUGF0aCA9IFtbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIi90bXAvJXNfSU4iLCBp
ZGVudGlmaWVyXSBVVEY4U3RyaW5nXTsKLSAgICBjb25zdCBjaGFyICpzdGRvdXRQYXRoID0gW1tO
U1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiL3RtcC8lc19PVVQiLCBpZGVudGlmaWVyXSBVVEY4
U3RyaW5nXTsKLSAgICBjb25zdCBjaGFyICpzdGRlcnJQYXRoID0gW1tOU1N0cmluZyBzdHJpbmdX
aXRoRm9ybWF0OkAiL3RtcC8lc19FUlJPUiIsIGlkZW50aWZpZXJdIFVURjhTdHJpbmddOwotCi0g
ICAgaW50IGluZmQgPSBvcGVuKHN0ZGluUGF0aCwgT19SRFdSKTsKLSAgICBkdXAyKGluZmQsIFNU
RElOX0ZJTEVOTyk7Ci0gICAgaW50IG91dGZkID0gb3BlbihzdGRvdXRQYXRoLCBPX1JEV1IpOwot
ICAgIGR1cDIob3V0ZmQsIFNURE9VVF9GSUxFTk8pOwotICAgIGludCBlcnJmZCA9IG9wZW4oc3Rk
ZXJyUGF0aCwgT19SRFdSIHwgT19OT05CTE9DSyk7Ci0gICAgZHVwMihlcnJmZCwgU1RERVJSX0ZJ
TEVOTyk7CisgICAgc2V0dXBpT1NMYXlvdXRUZXN0Q29tbXVuaWNhdGlvbigpOwogfQogCiB2b2lk
IFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybURlc3Ryb3koKQogeworICAgIHRlYXJkb3duaU9TTGF5
b3V0VGVzdENvbW11bmljYXRpb24oKTsKIH0KIAogdm9pZCBUZXN0Q29udHJvbGxlcjo6aW5pdGlh
bGl6ZUluamVjdGVkQnVuZGxlUGF0aCgpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>303952</attachid>
            <date>2017-03-09 12:32:23 -0800</date>
            <delta_ts>2017-03-09 13:56:59 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-169419-20170309123222.patch</filename>
            <type>text/plain</type>
            <size>27416</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIxMzY1NCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDQ1IEBACisyMDE3LTAzLTA5ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICBVc2UgVENQIGluc3RlYWQgb2YgRklGT3MgZm9yIFNpbXVsYXRvci9EZXZp
Y2UgY29tbXVuaWNhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTY5NDE5CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zMDk0OTYxNT4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIER1bXBSZW5kZXJU
cmVlL0R1bXBSZW5kZXJUcmVlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICog
RHVtcFJlbmRlclRyZWUvbWFjL0R1bXBSZW5kZXJUcmVlLm1tOgorICAgICAgICAoZHVtcFJlbmRl
clRyZWUpOiBDYWxsIHNldHVwL3RlYXJkb3duaU9TTGF5b3V0VGVzdENvbW11bmljYXRpb24oKSBp
bnN0ZWFkIG9mIHVzaW5nIEZJRk9zLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9p
b3MucHk6CisgICAgICAgIChJT1NQb3J0LnNldHVwX3Rlc3RfcnVuKTogU2V0dXAgZWFjaCBkZXZp
Y2UuCisgICAgICAgIChJT1NQb3J0LmNsZWFuX3VwX3Rlc3RfcnVuKTogVGVhcmRvd24gZWFjaCBk
ZXZpY2UuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L3NpbXVsYXRvcl9wcm9jZXNz
LnB5OgorICAgICAgICAoU2ltdWxhdG9yUHJvY2Vzcyk6CisgICAgICAgIChTaW11bGF0b3JQcm9j
ZXNzLlJlYWRTb2NrZXQpOiBBZGQgdG8gd29yayBhcm91bmQgc2hvcnRjb21pbmdzIGluIFB5dGhv
biAy4oCZcyBtYWtlZmlsZS4KKyAgICAgICAgKFNpbXVsYXRvclByb2Nlc3MuUmVhZFNvY2tldC5f
X2luaXRfXyk6IEluaXRpYWxpemUgZmlsZS1saWtlIG9iamVjdCB3aXRoIHNvY2tldC4KKyAgICAg
ICAgKFNpbXVsYXRvclByb2Nlc3MuUmVhZFNvY2tldC5jbG9zZSk6IENsb3NlIHNvY2tldCBhbmQg
bWFyayBvYmplY3QgYXMgY2xvc2VkLgorICAgICAgICAoU2ltdWxhdG9yUHJvY2Vzcy5SZWFkU29j
a2V0LmZpbGVubyk6IFJldHVybiByYXcgc29ja2V0IGZvciB1c2UgaW4gc2VsZWN0LgorICAgICAg
ICAoU2ltdWxhdG9yUHJvY2Vzcy5SZWFkU29ja2V0LnJlYWQpOiBSZWFkIGRhdGEgZnJvbSBzb2Nr
ZXQuCisgICAgICAgIChTaW11bGF0b3JQcm9jZXNzLl9faW5pdF9fKTogUGFzcyBUQ1AgcG9ydCBv
dmVyIGVudmlyb25tZW50LCByZW1vdmUgRklGTyBuYW1lcy4KKyAgICAgICAgKFNpbXVsYXRvclBy
b2Nlc3MuX21ha2VfY29ubmVjdGlvbl9jcmVhdGVfZmlsZSk6IFdhaXQgZm9yIGNvbm5lY3Rpb24g
ZnJvbSBzZXJ2ZXIgYW5kIGNyZWF0ZSBhbmQgcmV0dXJuCisgICAgICAgIGEgZmlsZS1saWtlIG9i
amVjdCBmcm9tIHRoZSBpbmNvbWluZyBjb25uZWN0aW9uLgorICAgICAgICAoU2ltdWxhdG9yUHJv
Y2Vzcy5fc3RhcnQpOiBVc2UgVENQIGNvbm5lY3Rpb25zIGluc3RlYWQgb2YgRklGT3MuCisgICAg
ICAgIChTaW11bGF0b3JQcm9jZXNzLl9yZXNldCk6IERlbGV0ZWQuCisgICAgICAgICogU2NyaXB0
cy93ZWJraXRweS94Y29kZS9kZXZpY2UucHk6CisgICAgICAgIChEZXZpY2UpOgorICAgICAgICAo
RGV2aWNlLl9faW5pdF9fKTogSW5pdGlhbGl6ZSB0aGlzIGRldmljZSBpbiBVRElEIHRvIHNvY2tl
dCBtYXAuCisgICAgICAgIChEZXZpY2UucG9ydCk6IFJldHVybiBwb3J0IG9mIHNvY2tldCBhc3Nv
Y2lhdGVkIHdpdGggdGhpcyBkZXZpY2UuCisgICAgICAgIChEZXZpY2Uuc2VydmVyKTogUmV0dXJu
IHNvY2tldCBhc3NvY2lhdGVkIHdpdGggdGhpcyBkZXZpY2UuCisgICAgICAgIChEZXZpY2Uuc2V0
dXApOiBPcGVuIHNlcnZlciBzb2NrZXQgb24gYW4gb3BlbiBwb3J0LgorICAgICAgICAoRGV2aWNl
LnRlYXJkb3duKTogQ2xvc2Ugc2VydmVyIHNvY2tldCBhc3NvY2lhdGVkIHdpdGggdGhpcyBkZXZp
Y2UuCisgICAgICAgICogVGVzdFJ1bm5lclNoYXJlZC9pT1NMYXlvdXRUZXN0Q29tbXVuaWNhdGlv
bi5jcHA6IEFkZGVkLgorICAgICAgICAoc2V0dXBpT1NMYXlvdXRUZXN0Q29tbXVuaWNhdGlvbik6
IENvbm5lY3Qgc3RkaW4sIHN0ZG91dCBhbmQgc3RkZXJyIGFzIHNvY2tldCB0byBhIFRDUCBzZXJ2
ZXIgcnVubmluZyBvbiBsb2NhbGhvc3QuCisgICAgICAgICh0ZWFyZG93bmlPU0xheW91dFRlc3RD
b21tdW5pY2F0aW9uKTogQ2xvc2Ugc3RkaW4sIHN0ZG91dCBhbmQgc3RkZXJyIFRDUCBzb2NrZXRz
LgorICAgICAgICAqIFRlc3RSdW5uZXJTaGFyZWQvaU9TTGF5b3V0VGVzdENvbW11bmljYXRpb24u
aDogQWRkZWQuCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9XZWJLaXRUZXN0UnVubmVyLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9pb3Mv
VGVzdENvbnRyb2xsZXJJT1MubW06CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpwbGF0
Zm9ybUluaXRpYWxpemUpOiBDYWxsIHNldHVwaU9TTGF5b3V0VGVzdENvbW11bmljYXRpb24oKSBp
bnN0ZWFkIG9mIHVzaW5nIEZJRk9zLgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6cGxh
dGZvcm1EZXN0cm95KTogQ2FsbCB0ZWFyZG93bmlPU0xheW91dFRlc3RDb21tdW5pY2F0aW9uKCku
CisKIDIwMTctMDMtMDkgIEpvbmF0aGFuIEJlZGFyZCAgPGpiZWRhcmRAYXBwbGUuY29tPgogCiAg
ICAgICAgIFN0YW5kYXJkaXplIGRldmljZS9zaW11bGF0b3IgbmFtaW5nIGNvbnZlbnRpb25zCklu
ZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJU
cmVlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIxMzY1NCkKKysrIFRvb2xz
L0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHdvcmtpbmcgY29weSkKQEAgLTgwLDYgKzgwLDcgQEAKIAkJMkQ0MDNGMUIxNTA4NzIwOTAwNTM1
OEQyIC8qIExheW91dFRlc3RIZWxwZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDJENDAzRUEyMTUwODcxNDIwMDUzNThEMiAvKiBMYXlvdXRUZXN0SGVs
cGVyLm0gKi87IH07CiAJCTJEQTJFM0E1MUUxQkE1NDEwMEEzQkJEMCAvKiBEdW1wUmVuZGVyVHJl
ZVNwZWxsQ2hlY2tlci5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDJEQTJFM0E0MUUxQkE1NDEwMEEzQkJEMCAvKiBEdW1wUmVuZGVyVHJlZVNwZWxsQ2hl
Y2tlci5tbSAqLzsgfTsKIAkJMzExMTdCM0QxNUQ5QTU2QTAwMTYzQkM4IC8qIE1vY2tXZWJOb3Rp
ZmljYXRpb25Qcm92aWRlci5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDMxMTE3QjNCMTVEOUE1NkEwMDE2M0JDOCAvKiBNb2NrV2ViTm90aWZpY2F0aW9u
UHJvdmlkZXIubW0gKi87IH07CisJCTMxMjk0M0Y5MUU3MUYyQjQwMDFFRTJDQyAvKiBpT1NMYXlv
dXRUZXN0Q29tbXVuaWNhdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAzMTQ4QTA1NTFFNkY5MEY0MDBEM0IzMTYgLyogaU9TTGF5b3V0VGVzdENv
bW11bmljYXRpb24uY3BwICovOyB9OwogCQk0NDY0Q0FCRTFDMjBBMDhCMDBFNUJCNTUgLyogRHVt
cFJlbmRlclRyZWVBcHBNYWluLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNDQ2NENBQkQxQzIwQTA3MDAwRTVCQjU1IC8qIER1bXBSZW5kZXJUcmVlQXBw
TWFpbi5tbSAqLzsgfTsKIAkJNEFENkExMTQxM0M4MTI0MDAwRUE5NzM3IC8qIEZvcm1WYWx1ZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QUQ2QTEx
MzEzQzgxMjQwMDBFQTk3MzcgLyogRm9ybVZhbHVlLmNwcCAqLzsgfTsKIAkJNTEwNjgwM0UxNUND
N0IxMDAwMUE4QTIzIC8qIFNsb3dOUFBOZXcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTEwNjgwM0QxNUNDN0IxMDAwMUE4QTIzIC8qIFNsb3dOUFBO
ZXcuY3BwICovOyB9OwpAQCAtMjk0LDYgKzI5NSw4IEBACiAJCTJEQTJFM0E0MUUxQkE1NDEwMEEz
QkJEMCAvKiBEdW1wUmVuZGVyVHJlZVNwZWxsQ2hlY2tlci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLm9iamNwcDsgbmFtZSA9IER1bXBSZW5kZXJUcmVlU3BlbGxDaGVja2VyLm1tOyBwYXRo
ID0gbWFjL0R1bXBSZW5kZXJUcmVlU3BlbGxDaGVja2VyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkzMTExN0IzQTE1RDlBNTZBMDAxNjNCQzggLyogTW9ja1dlYk5vdGlmaWNhdGlv
blByb3ZpZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IE1vY2tXZWJOb3Rp
ZmljYXRpb25Qcm92aWRlci5oOyBwYXRoID0gbWFjL01vY2tXZWJOb3RpZmljYXRpb25Qcm92aWRl
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMTExN0IzQjE1RDlBNTZBMDAxNjNC
QzggLyogTW9ja1dlYk5vdGlmaWNhdGlvblByb3ZpZGVyLm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAub2JqY3BwOyBuYW1lID0gTW9ja1dlYk5vdGlmaWNhdGlvblByb3ZpZGVyLm1tOyBwYXRo
ID0gbWFjL01vY2tXZWJOb3RpZmljYXRpb25Qcm92aWRlci5tbTsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMzE0OEEwNTUxRTZGOTBGNDAwRDNCMzE2IC8qIGlPU0xheW91dFRlc3RDb21t
dW5pY2F0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IGlPU0xh
eW91dFRlc3RDb21tdW5pY2F0aW9uLmNwcDsgcGF0aCA9IC4uL1Rlc3RSdW5uZXJTaGFyZWQvaU9T
TGF5b3V0VGVzdENvbW11bmljYXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkzMTQ4QTA1NjFFNkY5MEY0MDBEM0IzMTYgLyogaU9TTGF5b3V0VGVzdENvbW11bmljYXRpb24u
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gaU9TTGF5b3V0VGVzdENvbW11bmlj
YXRpb24uaDsgcGF0aCA9IC4uL1Rlc3RSdW5uZXJTaGFyZWQvaU9TTGF5b3V0VGVzdENvbW11bmlj
YXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzJBNzBBQUIwMzcwNUUxRjAw
QzkxNzgzIC8qIER1bXBSZW5kZXJUcmVlUHJlZml4LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IER1bXBSZW5kZXJUcmVlUHJlZml4Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTM3NUYwOTcxMERBQzNDQjYwMEM4QjRFNSAvKiBXZWJLaXRXZWlnaHRXYXRjaGVyMTAw
LnR0ZiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IGZp
bGU7IG5hbWUgPSBXZWJLaXRXZWlnaHRXYXRjaGVyMTAwLnR0ZjsgcGF0aCA9IGZvbnRzL1dlYktp
dFdlaWdodFdhdGNoZXIxMDAudHRmOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzNzVG
MDk3MjBEQUMzQ0I2MDBDOEI0RTUgLyogV2ViS2l0V2VpZ2h0V2F0Y2hlcjIwMC50dGYgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBmaWxlOyBuYW1lID0g
V2ViS2l0V2VpZ2h0V2F0Y2hlcjIwMC50dGY7IHBhdGggPSBmb250cy9XZWJLaXRXZWlnaHRXYXRj
aGVyMjAwLnR0Zjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQ3Miw2ICs0NzUsNyBA
QAogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKIAkJCQkwRjE4RTZGMTFENkI5
QzY0MDAyN0U1NDcgLyogRGVyaXZlZFNvdXJjZXMubWFrZSAqLywKKwkJCQkzMTQ4QTA2NTFFNkY5
MEY0MDBEM0IzMTYgLyogVGVzdFJ1bm5lclNoYXJlZCAqLywKIAkJCQkwRjE4RTZFNzFENkI5QkY1
MDAyN0U1NDcgLyogVUlTY3JpcHRDb250ZXh0ICovLAogCQkJCUExMTU4RDZBMTg5MjdDRTEwMDg4
QzE3QiAvKiBpb3MgKi8sCiAJCQkJQTEzNEU1MzQxODkwNUU2QzAwOTAxRDA2IC8qIGNvbmZpZy5o
ICovLApAQCAtNjk1LDYgKzY5OSwxNiBAQAogCQkJbmFtZSA9IExheW91dFRlc3RIZWxwZXI7CiAJ
CQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9OworCQkzMTQ4QTA2NTFFNkY5MEY0MDBEM0Iz
MTYgLyogVGVzdFJ1bm5lclNoYXJlZCAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hp
bGRyZW4gPSAoCisJCQkJMzE0OEEwNTUxRTZGOTBGNDAwRDNCMzE2IC8qIGlPU0xheW91dFRlc3RD
b21tdW5pY2F0aW9uLmNwcCAqLywKKwkJCQkzMTQ4QTA1NjFFNkY5MEY0MDBEM0IzMTYgLyogaU9T
TGF5b3V0VGVzdENvbW11bmljYXRpb24uaCAqLywKKwkJCSk7CisJCQluYW1lID0gVGVzdFJ1bm5l
clNoYXJlZDsKKwkJCXBhdGggPSAuLi9XZWJLaXRUZXN0UnVubmVyOworCQkJc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsKKwkJfTsKIAkJNDE3REE5MTgxMzczNjc0RDAwN0M1N0ZCIC8qIFdlYkNvcmVU
ZXN0U3VwcG9ydCAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCkBA
IC0xMTQ1LDYgKzExNTksNyBAQAogCQkJCTdDQkJDMzIzMURERkNGOUEwMDc4NkI5RCAvKiBUZXN0
T3B0aW9ucy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTBGMThFNzBGMUQ2QkFDQjYwMDI3RTU0NyAv
KiBVSVNjcmlwdENvbnRyb2xsZXJNYWMubW0gaW4gU291cmNlcyAqLywKIAkJCQlCQzlEOTAyNDBD
OTc0NzJFMDA5OUE0QTMgLyogV29ya1F1ZXVlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTMxMjk0
M0Y5MUU3MUYyQjQwMDFFRTJDQyAvKiBpT1NMYXlvdXRUZXN0Q29tbXVuaWNhdGlvbi5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlCQ0ExOEIyNjBDOUIwMTVDMDAxMTQzNjkgLyogV29ya1F1ZXVlSXRl
bU1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9z
dHByb2Nlc3NpbmcgPSAwOwpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0R1bXBSZW5k
ZXJUcmVlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVu
ZGVyVHJlZS5tbQkocmV2aXNpb24gMjEzNjU0KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFj
L0R1bXBSZW5kZXJUcmVlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQsNiArMTA0LDcgQEAKICNp
ZiBQTEFURk9STShJT1MpCiAjaW1wb3J0ICJEdW1wUmVuZGVyVHJlZUJyb3dzZXJWaWV3LmgiCiAj
aW1wb3J0ICJVSUtpdFNQSS5oIgorI2ltcG9ydCAiaU9TTGF5b3V0VGVzdENvbW11bmljYXRpb24u
aCIKICNpbXBvcnQgPFF1YXJ0ekNvcmUvUXVhcnR6Q29yZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9D
b3JlR3JhcGhpY3NTUEkuaD4KICNpbXBvcnQgPFdlYktpdC9XQUtXaW5kb3cuaD4KQEAgLTEyMzMs
MTcgKzEyMzQsNyBAQCB2b2lkIHdyaXRlQ3Jhc2hlZE1lc3NhZ2VPbkZhdGFsRXJyb3IoaW50CiB2
b2lkIGR1bXBSZW5kZXJUcmVlKGludCBhcmdjLCBjb25zdCBjaGFyICphcmd2W10pCiB7CiAjaWYg
UExBVEZPUk0oSU9TKQotICAgIGNvbnN0IGNoYXIqIGlkZW50aWZpZXIgPSBnZXRlbnYoIklQQ19J
REVOVElGSUVSIik7Ci0gICAgY29uc3QgY2hhciAqc3RkaW5QYXRoID0gW1tOU1N0cmluZyBzdHJp
bmdXaXRoRm9ybWF0OkAiL3RtcC8lc19JTiIsIGlkZW50aWZpZXJdIFVURjhTdHJpbmddOwotICAg
IGNvbnN0IGNoYXIgKnN0ZG91dFBhdGggPSBbW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIv
dG1wLyVzX09VVCIsIGlkZW50aWZpZXJdIFVURjhTdHJpbmddOwotICAgIGNvbnN0IGNoYXIgKnN0
ZGVyclBhdGggPSBbW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIvdG1wLyVzX0VSUk9SIiwg
aWRlbnRpZmllcl0gVVRGOFN0cmluZ107Ci0KLSAgICBpbnQgaW5mZCA9IG9wZW4oc3RkaW5QYXRo
LCBPX1JEV1IpOwotICAgIGR1cDIoaW5mZCwgU1RESU5fRklMRU5PKTsKLSAgICBpbnQgb3V0ZmQg
PSBvcGVuKHN0ZG91dFBhdGgsIE9fUkRXUik7Ci0gICAgZHVwMihvdXRmZCwgU1RET1VUX0ZJTEVO
Tyk7Ci0gICAgaW50IGVycmZkID0gb3BlbihzdGRlcnJQYXRoLCBPX1JEV1IgfCBPX05PTkJMT0NL
KTsKLSAgICBkdXAyKGVycmZkLCBTVERFUlJfRklMRU5PKTsKKyAgICBzZXR1cGlPU0xheW91dFRl
c3RDb21tdW5pY2F0aW9uKCk7CiAjZW5kaWYKIAogICAgIHNpZ25hbChTSUdJTEwsICZ3cml0ZUNy
YXNoZWRNZXNzYWdlT25GYXRhbEVycm9yKTsKQEAgLTEzMDQsOSArMTI5NSw3IEBAIHZvaWQgZHVt
cFJlbmRlclRyZWUoaW50IGFyZ2MsIGNvbnN0IGNoYXIKICAgICB9CiAKICNpZiBQTEFURk9STShJ
T1MpCi0gICAgY2xvc2UoaW5mZCk7Ci0gICAgY2xvc2Uob3V0ZmQpOwotICAgIGNsb3NlKGVycmZk
KTsKKyAgICB0ZWFyZG93bmlPU0xheW91dFRlc3RDb21tdW5pY2F0aW9uKCk7CiAjZW5kaWYKIH0K
IApJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvcy5weQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zLnB5CShyZXZpc2lvbiAyMTM2NTQpCisr
KyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zLnB5CSh3b3JraW5nIGNvcHkpCkBAIC04
MiwzICs4MiwxMiBAQCBjbGFzcyBJT1NQb3J0KERhcndpblBvcnQpOgogCiAgICAgZGVmIHNldHVw
X3Rlc3RfcnVuKHNlbGYsIGRldmljZV9jbGFzcz1Ob25lKToKICAgICAgICAgc2VsZi5fY3JlYXRl
X2RldmljZXMoZGV2aWNlX2NsYXNzKQorCisgICAgICAgIGZvciBpIGluIHhyYW5nZShzZWxmLmNo
aWxkX3Byb2Nlc3NlcygpKToKKyAgICAgICAgICAgIHNlbGYuZGV2aWNlX2Zvcl93b3JrZXJfbnVt
YmVyKGkpLnNldHVwKCkKKworICAgIGRlZiBjbGVhbl91cF90ZXN0X3J1bihzZWxmKToKKyAgICAg
ICAgc3VwZXIoSU9TUG9ydCwgc2VsZikuY2xlYW5fdXBfdGVzdF9ydW4oKQorCisgICAgICAgIGZv
ciBpIGluIHhyYW5nZShzZWxmLmNoaWxkX3Byb2Nlc3NlcygpKToKKyAgICAgICAgICAgIHNlbGYu
ZGV2aWNlX2Zvcl93b3JrZXJfbnVtYmVyKGkpLnRlYXJkb3duKCkKSW5kZXg6IFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvcG9ydC9zaW11bGF0b3JfcHJvY2Vzcy5weQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvc2ltdWxhdG9yX3Byb2Nlc3MucHkJKHJldmlzaW9uIDIx
MzY1NCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9zaW11bGF0b3JfcHJvY2Vzcy5w
eQkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNiBAQCBpbXBvcnQgc2lnbmFsCiBpbXBvcnQg
dGltZQogCiBmcm9tIHdlYmtpdHB5LnBvcnQuc2VydmVyX3Byb2Nlc3MgaW1wb3J0IFNlcnZlclBy
b2Nlc3MKLWZyb20gd2Via2l0cHkueGNvZGUuc2ltdWxhdG9yIGltcG9ydCBTaW11bGF0b3IKIAog
CiBjbGFzcyBTaW11bGF0b3JQcm9jZXNzKFNlcnZlclByb2Nlc3MpOgpAQCAtNTYsNTUgKzU1LDQ4
IEBAIGNsYXNzIFNpbXVsYXRvclByb2Nlc3MoU2VydmVyUHJvY2Vzcyk6CiAgICAgICAgICAgICAg
ICAgdGltZS5zbGVlcCgwLjAxKSAgIyBJbiBzZWNvbmRzCiAgICAgICAgICAgICByZXR1cm4gc2Vs
Zi5yZXR1cm5jb2RlCiAKKyAgICAjIFB5dGhvbiAyJ3MgaW1wbGVtZW50YXRpb24gb2YgbWFrZWZp
bGUgYmxvY2tzIG9uIHJlYWQgaWYgdGhlCisgICAgIyBzb2NrZXQgaXMgb3Blbi4gSW1wbGVtZW50
IHRoZSBzbWFsbCBzdWJzZXQgb2YgY29tbWFuZHMgd2UgbmVlZC4KKyAgICBjbGFzcyBSZWFkU29j
a2V0KG9iamVjdCk6CisKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNvY2spOgorICAgICAg
ICAgICAgc2VsZi5zb2NrZXQgPSBzb2NrCisgICAgICAgICAgICBzZWxmLmNsb3NlZCA9IG5vdCBz
ZWxmLnNvY2tldAorCisgICAgICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgICAgIHNlbGYu
Y2xvc2VkID0gVHJ1ZQorICAgICAgICAgICAgcmV0dXJuIHNlbGYuc29ja2V0LmNsb3NlKCkKKwor
ICAgICAgICAjIFRoaXMgaXMgdXNlZCBpbiBzZWxlY3QKKyAgICAgICAgZGVmIGZpbGVubyhzZWxm
KToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnNvY2tldAorCisgICAgICAgIGRlZiByZWFkKHNl
bGYpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuc29ja2V0LnJlY3YoMTAyNCkKKwogICAgIGRl
ZiBfX2luaXRfXyhzZWxmLCBwb3J0X29iaiwgbmFtZSwgY21kLCBlbnY9Tm9uZSwgdW5pdmVyc2Fs
X25ld2xpbmVzPUZhbHNlLCB0cmVhdF9ub19kYXRhX2FzX2NyYXNoPUZhbHNlLCB3b3JrZXJfbnVt
YmVyPU5vbmUpOgogICAgICAgICBzZWxmLl9idW5kbGVfaWQgPSBwb3J0X29iai5hcHBfaWRlbnRp
Zmllcl9mcm9tX2J1bmRsZShjbWRbMF0pCiAgICAgICAgIHNlbGYuX2RldmljZSA9IHBvcnRfb2Jq
LmRldmljZV9mb3Jfd29ya2VyX251bWJlcih3b3JrZXJfbnVtYmVyKQogICAgICAgICBpZiBub3Qg
c2VsZi5fZGV2aWNlLmluc3RhbGxfYXBwKGNtZFswXSwgZW52KToKICAgICAgICAgICAgIHJhaXNl
IFJ1bnRpbWVFcnJvcignRmFpbGVkIHRvIGluc3RhbGwgYXBwIHt9IG9uIHNpbXVsYXRvciBkZXZp
Y2Uge30nLmZvcm1hdChjbWRbMF0sIHNlbGYuX2RldmljZS51ZGlkKSkKLSAgICAgICAgZW52WydJ
UENfSURFTlRJRklFUiddID0gc2VsZi5fYnVuZGxlX2lkICsgJy0nICsgc2VsZi5fZGV2aWNlLnVk
aWQKLQotICAgICAgICAjIFRoaXMgbG9jYXRpb24gbWF0Y2hlcyB0aGUgbG9jYXRpb24gdXNlZCBi
eSBXZWJLaXRUZXN0UnVubmVyIGFuZCBEdW1wUmVuZGVyVHJlZQotICAgICAgICAjIGZvciB0aGUg
b3RoZXIgc2lkZSBvZiB0aGVzZSBmaWZvcy4KLSAgICAgICAgZmlsZV9sb2NhdGlvbiA9ICcvdG1w
LycgKyBlbnZbJ0lQQ19JREVOVElGSUVSJ10KLSAgICAgICAgc2VsZi5faW5fcGF0aCA9IGZpbGVf
bG9jYXRpb24gKyAnX0lOJwotICAgICAgICBzZWxmLl9vdXRfcGF0aCA9IGZpbGVfbG9jYXRpb24g
KyAnX09VVCcKLSAgICAgICAgc2VsZi5fZXJyb3JfcGF0aCA9IGZpbGVfbG9jYXRpb24gKyAnX0VS
Uk9SJwogCisgICAgICAgIGVudlsnUE9SVCddID0gc3RyKHNlbGYuX2RldmljZS5wb3J0KCkpCiAg
ICAgICAgIHN1cGVyKFNpbXVsYXRvclByb2Nlc3MsIHNlbGYpLl9faW5pdF9fKHBvcnRfb2JqLCBu
YW1lLCBjbWQsIGVudiwgdW5pdmVyc2FsX25ld2xpbmVzLCB0cmVhdF9ub19kYXRhX2FzX2NyYXNo
KQogCi0gICAgZGVmIF9yZXNldChzZWxmKToKLSAgICAgICAgc3VwZXIoU2ltdWxhdG9yUHJvY2Vz
cywgc2VsZikuX3Jlc2V0KCkKLQotICAgICAgICAjIFVubGlua3MgYXJlIG5lZWRlZCBvbiByZXNl
dCBpbiB0aGUgZXZlbnQgdGhhdCB0aGUgUHl0aG9uIGNvZGUgdW5leHBlY3RlZGx5Ci0gICAgICAg
ICMgZmFpbHMgYmV0d2VlbiBfc3RhcnQoKSBhbmQga2lsbCgpLiAgVGhpcyBjYW4gYmUgY2F1c2Vk
IGJ5IGEgU0lHS0lMTCBvciBhIGNyYXNoLgotICAgICAgICAjIFRoaXMgZW5zdXJlcyB0aGF0IG9z
Lm1rZmlmbygpIHdpbGwgbm90IGJlIG9ic3RydWN0ZWQgYnkgcHJldmlvdXMgZmlmb3MuCi0gICAg
ICAgICMgT3RoZXIgZmlsZXMgd2lsbCBzdGlsbCBjYXVzZSBvcy5ta2ZpZm8oKSB0byBmYWlsLgot
ICAgICAgICB0cnk6Ci0gICAgICAgICAgICBvcy51bmxpbmsoc2VsZi5faW5fcGF0aCkKLSAgICAg
ICAgZXhjZXB0OgotICAgICAgICAgICAgcGFzcwotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBv
cy51bmxpbmsoc2VsZi5fb3V0X3BhdGgpCi0gICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgIHBh
c3MKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgb3MudW5saW5rKHNlbGYuX2Vycm9yX3BhdGgp
Ci0gICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgIHBhc3MKKyAgICBAc3RhdGljbWV0aG9kCisg
ICAgZGVmIF9tYWtlX2Nvbm5lY3Rpb25fY3JlYXRlX2ZpbGUoc2VydmVyLCB0eXBlKToKKyAgICAg
ICAgY29ubmVjdGlvbiwgYWRkcmVzcyA9IHNlcnZlci5hY2NlcHQoKQorICAgICAgICBhc3NlcnQg
YWRkcmVzc1swXSA9PSAnMTI3LjAuMC4xJworICAgICAgICBpZiAndycgaW4gdHlwZToKKyAgICAg
ICAgICAgIHJldHVybiBjb25uZWN0aW9uLm1ha2VmaWxlKHR5cGUsIDApCisgICAgICAgIHJldHVy
biBTaW11bGF0b3JQcm9jZXNzLlJlYWRTb2NrZXQoY29ubmVjdGlvbikKIAogICAgIGRlZiBfc3Rh
cnQoc2VsZik6CiAgICAgICAgIGlmIHNlbGYuX3Byb2M6CiAgICAgICAgICAgICByYWlzZSBWYWx1
ZUVycm9yKCd7fSBhbHJlYWR5IHJ1bm5pbmcnLmZvcm1hdChzZWxmLl9uYW1lKSkKICAgICAgICAg
c2VsZi5fcmVzZXQoKQogCi0gICAgICAgIEZJRk9fUEVSTUlTU0lPTl9GTEFHUyA9IDA2MDAgICMg
T25seSBvd25lciBjYW4gcmVhZCBhbmQgd3JpdGUKLSAgICAgICAgb3MubWtmaWZvKHNlbGYuX2lu
X3BhdGgsIEZJRk9fUEVSTUlTU0lPTl9GTEFHUykKLSAgICAgICAgb3MubWtmaWZvKHNlbGYuX291
dF9wYXRoLCBGSUZPX1BFUk1JU1NJT05fRkxBR1MpCi0gICAgICAgIG9zLm1rZmlmbyhzZWxmLl9l
cnJvcl9wYXRoLCBGSUZPX1BFUk1JU1NJT05fRkxBR1MpCi0KLSAgICAgICAgc3Rkb3V0ID0gb3Mu
ZmRvcGVuKG9zLm9wZW4oc2VsZi5fb3V0X3BhdGgsIG9zLk9fUkRPTkxZIHwgb3MuT19OT05CTE9D
SyksICdyYicpCi0gICAgICAgIHN0ZGVyciA9IG9zLmZkb3Blbihvcy5vcGVuKHNlbGYuX2Vycm9y
X3BhdGgsIG9zLk9fUkRPTkxZIHwgb3MuT19OT05CTE9DSyksICdyYicpCi0KKyAgICAgICAgc2Vs
Zi5fZGV2aWNlLnNlcnZlcigpLmxpc3RlbigzKQogICAgICAgICBzZWxmLl9waWQgPSBzZWxmLl9k
ZXZpY2UubGF1bmNoX2FwcChzZWxmLl9idW5kbGVfaWQsIHNlbGYuX2NtZFsxOl0sIGVudj1zZWxm
Ll9lbnYpCiAKICAgICAgICAgZGVmIGhhbmRsZXIoc2lnbnVtLCBmcmFtZSk6CkBAIC0xMTQsOCAr
MTA2LDEzIEBAIGNsYXNzIFNpbXVsYXRvclByb2Nlc3MoU2VydmVyUHJvY2Vzcyk6CiAgICAgICAg
IHNpZ25hbC5hbGFybSgzKSAgIyBJbiBzZWNvbmRzCiAKICAgICAgICAgc3RkaW4gPSBOb25lCisg
ICAgICAgIHN0ZG91dCA9IE5vbmUKKyAgICAgICAgc3RkZXJyID0gTm9uZQogICAgICAgICB0cnk6
Ci0gICAgICAgICAgICBzdGRpbiA9IG9wZW4oc2VsZi5faW5fcGF0aCwgJ3cnLCAwKSAgIyBPcGVu
aW5nIHdpdGggbm8gYnVmZmVyaW5nLCBsaWtlIHBvcGVuCisgICAgICAgICAgICAjIE9yZGVyIG1h
dHRlcnMgaGVyZSEKKyAgICAgICAgICAgIHN0ZGluID0gU2ltdWxhdG9yUHJvY2Vzcy5fbWFrZV9j
b25uZWN0aW9uX2NyZWF0ZV9maWxlKHNlbGYuX2RldmljZS5zZXJ2ZXIoKSwgJ3cnKQorICAgICAg
ICAgICAgc3Rkb3V0ID0gU2ltdWxhdG9yUHJvY2Vzcy5fbWFrZV9jb25uZWN0aW9uX2NyZWF0ZV9m
aWxlKHNlbGYuX2RldmljZS5zZXJ2ZXIoKSwgJ3JiJykKKyAgICAgICAgICAgIHN0ZGVyciA9IFNp
bXVsYXRvclByb2Nlc3MuX21ha2VfY29ubmVjdGlvbl9jcmVhdGVfZmlsZShzZWxmLl9kZXZpY2Uu
c2VydmVyKCksICdyYicpCiAgICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgICMgV2Ugc2V0IHNl
bGYuX3Byb2MgYXMgX3Jlc2V0KCkgYW5kIF9raWxsKCkgZGVwZW5kIG9uIGl0LgogICAgICAgICAg
ICAgc2VsZi5fcHJvYyA9IFNpbXVsYXRvclByb2Nlc3MuUG9wZW4oc2VsZi5fcGlkLCBzdGRpbiwg
c3Rkb3V0LCBzdGRlcnIpCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3hjb2RlL2Rldmlj
ZS5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3hjb2RlL2RldmljZS5w
eQkocmV2aXNpb24gMjEzNjU0KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS94Y29kZS9kZXZp
Y2UucHkJKHdvcmtpbmcgY29weSkKQEAgLTIwLDEyICsyMCw1NSBAQAogIyAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUwogIyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KIAoraW1wb3J0IHNvY2tldAorCitmcm9tIHJhbmRvbSBpbXBvcnQgcmFu
ZGludAogCiBjbGFzcyBEZXZpY2Uob2JqZWN0KToKKworICAgIFBPUlRfUkFOR0UgPSBbNTAwMCwg
MTAwMDBdCisgICAgRk9SV0FSRF9QT1JUUyA9IFs4MDAwLCA4MDgwLCA4NDQzXQorICAgIFVESURf
VE9fU09DS0VUID0ge30KKwogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCB1ZGlkLCBob3N0
KToKICAgICAgICAgc2VsZi5faG9zdCA9IGhvc3QKICAgICAgICAgc2VsZi5uYW1lID0gbmFtZQog
ICAgICAgICBzZWxmLnVkaWQgPSB1ZGlkCisgICAgICAgIGlmIHVkaWQgbm90IGluIERldmljZS5V
RElEX1RPX1NPQ0tFVDoKKyAgICAgICAgICAgIERldmljZS5VRElEX1RPX1NPQ0tFVFt1ZGlkXSA9
IE5vbmUKKworICAgIGRlZiBwb3J0KHNlbGYpOgorICAgICAgICBpZiBub3Qgc2VsZi5zZXJ2ZXIo
KToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIHJldHVybiBzZWxmLnNlcnZlcigp
LmdldHNvY2tuYW1lKClbMV0KKworICAgIGRlZiBzZXJ2ZXIoc2VsZik6CisgICAgICAgIHJldHVy
biBEZXZpY2UuVURJRF9UT19TT0NLRVRbc2VsZi51ZGlkXQorCisgICAgZGVmIHNldHVwKHNlbGYp
OgorICAgICAgICBzZXJ2ZXIgPSBEZXZpY2UuVURJRF9UT19TT0NLRVRbc2VsZi51ZGlkXQorICAg
ICAgICBpZiBub3Qgc2VydmVyOgorICAgICAgICAgICAgc3RhcnRpbmdfcG9ydCA9IHJhbmRpbnQo
RGV2aWNlLlBPUlRfUkFOR0VbMF0sIERldmljZS5QT1JUX1JBTkdFWzFdKQorICAgICAgICAgICAg
dXBwZXJfYm91bmQgPSBEZXZpY2UuUE9SVF9SQU5HRVsxXSAtIERldmljZS5QT1JUX1JBTkdFWzBd
CisKKyAgICAgICAgICAgIGZvciBjbnQgaW4geHJhbmdlKDAsIHVwcGVyX2JvdW5kKToKKyAgICAg
ICAgICAgICAgICBwb3J0ID0gKHN0YXJ0aW5nX3BvcnQgKyBjbnQpICUgdXBwZXJfYm91bmQKKyAg
ICAgICAgICAgICAgICBpZiBwb3J0IGluIERldmljZS5GT1JXQVJEX1BPUlRTOgorICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAg
ICAgICAgc2VydmVyID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tf
U1RSRUFNKQorICAgICAgICAgICAgICAgICAgICBzZXJ2ZXIuc2V0c29ja29wdChzb2NrZXQuU09M
X1NPQ0tFVCwgc29ja2V0LlNPX1JFVVNFQUREUiwgMSkKKyAgICAgICAgICAgICAgICAgICAgc2Vy
dmVyLmJpbmQoKCdsb2NhbGhvc3QnLCBwb3J0KSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsK
KyAgICAgICAgICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yLCBSdW50aW1lRXJyb3I6CisgICAg
ICAgICAgICAgICAgICAgIHNlcnZlciA9IE5vbmUKKyAgICAgICAgICAgIERldmljZS5VRElEX1RP
X1NPQ0tFVFtzZWxmLnVkaWRdID0gc2VydmVyCisKKyAgICAgICAgaWYgbm90IERldmljZS5VRElE
X1RPX1NPQ0tFVFtzZWxmLnVkaWRdOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdO
byBvcGVuIHBvcnRzIGZvdW5kJykKKworICAgIGRlZiB0ZWFyZG93bihzZWxmKToKKyAgICAgICAg
RGV2aWNlLlVESURfVE9fU09DS0VUW3NlbGYudWRpZF0gPSBOb25lCiAKICAgICBkZWYgaW5zdGFs
bF9hcHAoc2VsZiwgYXBwX3BhdGgsIGVudj1Ob25lKToKICAgICAgICAgcmFpc2UgTm90SW1wbGVt
ZW50ZWRFcnJvcgpJbmRleDogVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9pT1NMYXlvdXRUZXN0Q29t
bXVuaWNhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9pT1NM
YXlvdXRUZXN0Q29tbXVuaWNhdGlvbi5jcHAJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvVGVzdFJ1
bm5lclNoYXJlZC9pT1NMYXlvdXRUZXN0Q29tbXVuaWNhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwxMDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiaU9TTGF5b3V0VGVzdENvbW11bmljYXRpb24uaCIKKworI2lmIFBMQVRGT1JNKElPUykK
KworI2luY2x1ZGUgPG5ldGRiLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2luY2x1ZGUg
PHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDx1bmlzdGQu
aD4KKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIHN0ZGluSW5kZXggPSAwOworc3RhdGljIGNvbnN0
IHVuc2lnbmVkIHN0ZG91dEluZGV4ID0gMTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBzdGRlcnJJ
bmRleCA9IDI7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgbnVtSGFuZGxlcyA9IDM7CisKK3N0YXRp
YyBpbnQgc29ja2V0c1tudW1IYW5kbGVzXTsKK3N0YXRpYyBzdHJ1Y3Qgc29ja2FkZHJfaW4gc2Vy
dmVyQWRkcmVzczsKK3N0YXRpYyBzdHJ1Y3QgaG9zdGVudCogaG9zdCA9IGdldGhvc3RieW5hbWUo
ImxvY2FsaG9zdCIpOworc3RhdGljIEZJTEUqIG9yaWdpbmFsc1tudW1IYW5kbGVzXTsKK3N0YXRp
YyBGSUxFKiogcmVmZXJlbmNlc1RvSGFuZGxlc1tudW1IYW5kbGVzXTsKKwordm9pZCBzZXR1cGlP
U0xheW91dFRlc3RDb21tdW5pY2F0aW9uKCkKK3sKKyAgICByZWZlcmVuY2VzVG9IYW5kbGVzW3N0
ZGluSW5kZXhdID0gJnN0ZGluOworICAgIHJlZmVyZW5jZXNUb0hhbmRsZXNbc3Rkb3V0SW5kZXhd
ID0gJnN0ZG91dDsKKyAgICByZWZlcmVuY2VzVG9IYW5kbGVzW3N0ZGVyckluZGV4XSA9ICZzdGRl
cnI7CisKKyAgICBpbnQgcG9ydCA9IGF0b2koZ2V0ZW52KCJQT1JUIikpOworICAgIGlmIChwb3J0
IDw9IDApCisgICAgICAgIGFib3J0KCk7CisKKyAgICBtZW1zZXQoKGNoYXIgKikgJnNlcnZlckFk
ZHJlc3MsIDAsIHNpemVvZihzZXJ2ZXJBZGRyZXNzKSk7CisgICAgc2VydmVyQWRkcmVzcy5zaW5f
ZmFtaWx5ID0gQUZfSU5FVDsKKyAgICBtZW1jcHkoCisgICAgICAgIChjaGFyICopJnNlcnZlckFk
ZHJlc3Muc2luX2FkZHIuc19hZGRyLAorICAgICAgICAoY2hhciAqKWhvc3QtPmhfYWRkciwKKyAg
ICAgICAgaG9zdC0+aF9sZW5ndGgpOworICAgIHNlcnZlckFkZHJlc3Muc2luX3BvcnQgPSBodG9u
cyhwb3J0KTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1IYW5kbGVzOyArK2kp
IHsKKyAgICAgICAgLy8gT3JkZXIgbWF0dGVycyEKKyAgICAgICAgc29ja2V0c1tpXSA9IHNvY2tl
dChBRl9JTkVULCBTT0NLX1NUUkVBTSwgMCk7CisgICAgICAgIGlmIChzb2NrZXRzW2ldIDwgMCkK
KyAgICAgICAgICAgIGFib3J0KCk7CisgICAgICAgIGlmIChjb25uZWN0KHNvY2tldHNbaV0sIChz
dHJ1Y3Qgc29ja2FkZHIgKikgJnNlcnZlckFkZHJlc3MsIHNpemVvZihzZXJ2ZXJBZGRyZXNzKSkg
PCAwKQorICAgICAgICAgICAgYWJvcnQoKTsKKworICAgICAgICBvcmlnaW5hbHNbaV0gPSAqcmVm
ZXJlbmNlc1RvSGFuZGxlc1tpXTsKKyAgICAgICAgZmZsdXNoKG9yaWdpbmFsc1tpXSk7CisgICAg
ICAgIGlmIChpID09IHN0ZGluSW5kZXgpCisgICAgICAgICAgICAqcmVmZXJlbmNlc1RvSGFuZGxl
c1tpXSA9IGZkb3Blbihzb2NrZXRzW2ldLCAicmIiKTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgKnJlZmVyZW5jZXNUb0hhbmRsZXNbaV0gPSBmZG9wZW4oc29ja2V0c1tpXSwgIndiIik7Cisg
ICAgICAgIHNldGJ1ZigqcmVmZXJlbmNlc1RvSGFuZGxlc1tpXSwgbnVsbHB0cik7CisgICAgfQor
fQorCit2b2lkIHRlYXJkb3duaU9TTGF5b3V0VGVzdENvbW11bmljYXRpb24oKQoreworICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1IYW5kbGVzOyArK2kpIHsKKyAgICAgICAgZmZsdXNo
KCpyZWZlcmVuY2VzVG9IYW5kbGVzW2ldKTsKKyAgICAgICAgZmNsb3NlKCpyZWZlcmVuY2VzVG9I
YW5kbGVzW2ldKTsKKyAgICAgICAgKnJlZmVyZW5jZXNUb0hhbmRsZXNbaV0gPSBvcmlnaW5hbHNb
aV07CisKKyAgICAgICAgY2xvc2Uoc29ja2V0c1tpXSk7CisgICAgfQorfQorCisjZWxzZQorCit2
b2lkIHNldHVwaU9TTGF5b3V0VGVzdENvbW11bmljYXRpb24oKSB7IH0KK3ZvaWQgdGVhcmRvd25p
T1NMYXlvdXRUZXN0Q29tbXVuaWNhdGlvbigpIHsgfQorCisjZW5kaWYKSW5kZXg6IFRvb2xzL1Rl
c3RSdW5uZXJTaGFyZWQvaU9TTGF5b3V0VGVzdENvbW11bmljYXRpb24uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9UZXN0UnVubmVyU2hhcmVkL2lPU0xheW91dFRlc3RDb21tdW5pY2F0aW9uLmgJKG5v
bmV4aXN0ZW50KQorKysgVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9pT1NMYXlvdXRUZXN0Q29tbXVu
aWNhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjkgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
cHJhZ21hIG9uY2UKKwordm9pZCBzZXR1cGlPU0xheW91dFRlc3RDb21tdW5pY2F0aW9uKCk7Cit2
b2lkIHRlYXJkb3duaU9TTGF5b3V0VGVzdENvbW11bmljYXRpb24oKTsKSW5kZXg6IFRvb2xzL1dl
YktpdFRlc3RSdW5uZXIvV2ViS2l0VGVzdFJ1bm5lci54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvV2ViS2l0VGVzdFJ1bm5lci54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMTM2NTQpCisrKyBUb29scy9XZWJL
aXRUZXN0UnVubmVyL1dlYktpdFRlc3RSdW5uZXIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
d29ya2luZyBjb3B5KQpAQCAtNzMsNiArNzMsNyBAQAogCQkyRTYzRURBMTE4OTFCMjkxMDAyQTdB
RkMgLyogQWNjZXNzaWJpbGl0eVVJRWxlbWVudElPUy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFNjNFRDc4MTg5MUFDRTkwMDJBN0FGQyAvKiBBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50SU9TLm1tICovOyB9OwogCQkyRTYzRURBNjE4OTFCREMwMDAyQTdB
RkMgLyogVGVzdFJ1bm5lci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBCQ0M5OTgxNzExRDNGNTFFMDAxN0JDQTIgLyogVGVzdFJ1bm5lci5jcHAgKi87
IH07CiAJCTJFNzQ5QkYyMTg5MUVCRkEwMDdGQzE3NSAvKiBFdmVudFNlbmRlclByb3h5SU9TLm1t
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkU2M0VEN0Ex
ODkxQUNFOTAwMkE3QUZDIC8qIEV2ZW50U2VuZGVyUHJveHlJT1MubW0gKi87IH07CisJCTMxNDhB
MDY4MUU2RjkxNjMwMEQzQjMxNiAvKiBpT1NMYXlvdXRUZXN0Q29tbXVuaWNhdGlvbi5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTQ4QTA1MzFFNkY4
NUI2MDBEM0IzMTYgLyogaU9TTGF5b3V0VGVzdENvbW11bmljYXRpb24uY3BwICovOyB9OwogCQk1
MTA1OEFENTFENjc4ODIwMDA5QTUzOEMgLyogbGliV2ViQ29yZVRlc3RTdXBwb3J0LmR5bGliIGlu
IEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDEyMzBFMTYx
MzhDNzhCRjAwQkNDRkNBIC8qIGxpYldlYkNvcmVUZXN0U3VwcG9ydC5keWxpYiAqLzsgfTsKIAkJ
NTEwNThBRDYxRDY3ODgyNTAwOUE1MzhDIC8qIFdlYktpdC5mcmFtZXdvcmsgaW4gRnJhbWV3b3Jr
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjUxNjlDQTE0NDUyMjJEMDBF
MEE5RDcgLyogV2ViS2l0LmZyYW1ld29yayAqLzsgfTsKIAkJNTY0MUUyRDAxNDMzNUU5NTAwODMw
N0U1IC8qIEpTVGV4dElucHV0Q29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NjQxRTJDRTE0MzM1RTk1MDA4MzA3RTUgLyogSlNUZXh0
SW5wdXRDb250cm9sbGVyLmNwcCAqLzsgfTsKQEAgLTI1Miw2ICsyNTMsOCBAQAogCQkyRUU1MkQx
NDE4OTBBOUZCMDAxMEVEMjEgLyogVGVzdENvbnRyb2xsZXJJT1MubW0gKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBUZXN0Q29udHJvbGxlcklPUy5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkVFNTJEMTYxODkwQTlGQjAwMTBFRDIxIC8qIG1haW5JT1Mu
bW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBtYWluSU9TLm1tOyBw
YXRoID0gLi4vaW9zL21haW5JT1MubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMx
MTBCRTBGMTVCQTAxMTQwMEQyMTZBQyAvKiBXZWJOb3RpZmljYXRpb25Qcm92aWRlci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBXZWJOb3RpZmljYXRpb25Qcm92aWRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkzMTQ4QTA1MzFFNkY4NUI2MDBEM0IzMTYgLyogaU9TTGF5b3V0VGVzdENvbW11
bmljYXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gaU9TTGF5
b3V0VGVzdENvbW11bmljYXRpb24uY3BwOyBwYXRoID0gLi4vVGVzdFJ1bm5lclNoYXJlZC9pT1NM
YXlvdXRUZXN0Q29tbXVuaWNhdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTMxNDhBMDU0MUU2Rjg1QjYwMEQzQjMxNiAvKiBpT1NMYXlvdXRUZXN0Q29tbXVuaWNhdGlvbi5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBpT1NMYXlvdXRUZXN0Q29tbXVuaWNh
dGlvbi5oOyBwYXRoID0gLi4vVGVzdFJ1bm5lclNoYXJlZC9pT1NMYXlvdXRUZXN0Q29tbXVuaWNh
dGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMTY0QzhFRjE1RDFBREExMDBF
RjFGRTAgLyogV2ViTm90aWZpY2F0aW9uUHJvdmlkZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gV2ViTm90aWZpY2F0aW9uUHJvdmlkZXIuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkzNzhENDQyMjEzMzQ2RDAwMDA2QTc3N0IgLyogY29uZmlnLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IGNvbmZpZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0
MTIzMEUxNjEzOEM3OEJGMDBCQ0NGQ0EgLyogbGliV2ViQ29yZVRlc3RTdXBwb3J0LmR5bGliICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gImNvbXBpbGVk
Lm1hY2gtby5keWxpYiI7IHBhdGggPSBsaWJXZWJDb3JlVGVzdFN1cHBvcnQuZHlsaWI7IHNvdXJj
ZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CkBAIC00NTAsNiArNDUzLDggQEAKIAkJMEYx
OEU3MUExRDZCQzRCQzAwMjdFNTQ3IC8qIFRlc3RSdW5uZXJTaGFyZWQgKi8gPSB7CiAJCQlpc2Eg
PSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTMxNDhBMDUzMUU2Rjg1QjYwMEQzQjMx
NiAvKiBpT1NMYXlvdXRUZXN0Q29tbXVuaWNhdGlvbi5jcHAgKi8sCisJCQkJMzE0OEEwNTQxRTZG
ODVCNjAwRDNCMzE2IC8qIGlPU0xheW91dFRlc3RDb21tdW5pY2F0aW9uLmggKi8sCiAJCQkJMEYx
OEU3MUIxRDZCQzRFNjAwMjdFNTQ3IC8qIEJpbmRpbmdzICovLAogCQkJCTBGNzNCNTQ3MUJBNzgy
RkUwMDRCM0VGNCAvKiBVSVNjcmlwdENvbnRleHQgKi8sCiAJCQkpOwpAQCAtOTM1LDYgKzk0MCw3
IEBACiAJCQlmaWxlcyA9ICgKIAkJCQkyRTc0OUJGMjE4OTFFQkZBMDA3RkMxNzUgLyogRXZlbnRT
ZW5kZXJQcm94eUlPUy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTBGRUJGODVBMUJCNjFERjIwMDI4
NzIyRCAvKiBISURFdmVudEdlbmVyYXRvci5tbSBpbiBTb3VyY2VzICovLAorCQkJCTMxNDhBMDY4
MUU2RjkxNjMwMEQzQjMxNiAvKiBpT1NMYXlvdXRUZXN0Q29tbXVuaWNhdGlvbi5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkyRTYzRUQ5NDE4OTFBREFEMDAyQTdBRkMgLyogbWFpbklPUy5tbSBpbiBT
b3VyY2VzICovLAogCQkJCTJFNjNFRDkxMTg5MUFEQUQwMDJBN0FGQyAvKiBQbGF0Zm9ybVdlYlZp
ZXdJT1MubW0gaW4gU291cmNlcyAqLywKIAkJCQkyRTYzRUQ5MjE4OTFBREFEMDAyQTdBRkMgLyog
VGVzdENvbnRyb2xsZXJJT1MubW0gaW4gU291cmNlcyAqLywKSW5kZXg6IFRvb2xzL1dlYktpdFRl
c3RSdW5uZXIvaW9zL1Rlc3RDb250cm9sbGVySU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dl
YktpdFRlc3RSdW5uZXIvaW9zL1Rlc3RDb250cm9sbGVySU9TLm1tCShyZXZpc2lvbiAyMTM2NTQp
CisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL2lvcy9UZXN0Q29udHJvbGxlcklPUy5tbQkod29y
a2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2ltcG9ydCAiVGVzdEludm9jYXRpb24uaCIK
ICNpbXBvcnQgIlRlc3RSdW5uZXJXS1dlYlZpZXcuaCIKICNpbXBvcnQgIlVJS2l0U1BJLmgiCisj
aW1wb3J0ICJpT1NMYXlvdXRUZXN0Q29tbXVuaWNhdGlvbi5oIgogI2ltcG9ydCA8Rm91bmRhdGlv
bi9Gb3VuZGF0aW9uLmg+CiAjaW1wb3J0IDxVSUtpdC9VSUtpdC5oPgogI2ltcG9ydCA8V2ViS2l0
L1dLUHJlZmVyZW5jZXNSZWZQcml2YXRlLmg+CkBAIC00OSwyMSArNTAsMTIgQEAgdm9pZCBUZXN0
Q29udHJvbGxlcjo6bm90aWZ5RG9uZSgpCiAKIHZvaWQgVGVzdENvbnRyb2xsZXI6OnBsYXRmb3Jt
SW5pdGlhbGl6ZSgpCiB7Ci0gICAgY29uc3QgY2hhciogaWRlbnRpZmllciA9IGdldGVudigiSVBD
X0lERU5USUZJRVIiKTsKLSAgICBjb25zdCBjaGFyICpzdGRpblBhdGggPSBbW05TU3RyaW5nIHN0
cmluZ1dpdGhGb3JtYXQ6QCIvdG1wLyVzX0lOIiwgaWRlbnRpZmllcl0gVVRGOFN0cmluZ107Ci0g
ICAgY29uc3QgY2hhciAqc3Rkb3V0UGF0aCA9IFtbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpA
Ii90bXAvJXNfT1VUIiwgaWRlbnRpZmllcl0gVVRGOFN0cmluZ107Ci0gICAgY29uc3QgY2hhciAq
c3RkZXJyUGF0aCA9IFtbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIi90bXAvJXNfRVJST1Ii
LCBpZGVudGlmaWVyXSBVVEY4U3RyaW5nXTsKLQotICAgIGludCBpbmZkID0gb3BlbihzdGRpblBh
dGgsIE9fUkRXUik7Ci0gICAgZHVwMihpbmZkLCBTVERJTl9GSUxFTk8pOwotICAgIGludCBvdXRm
ZCA9IG9wZW4oc3Rkb3V0UGF0aCwgT19SRFdSKTsKLSAgICBkdXAyKG91dGZkLCBTVERPVVRfRklM
RU5PKTsKLSAgICBpbnQgZXJyZmQgPSBvcGVuKHN0ZGVyclBhdGgsIE9fUkRXUiB8IE9fTk9OQkxP
Q0spOwotICAgIGR1cDIoZXJyZmQsIFNUREVSUl9GSUxFTk8pOworICAgIHNldHVwaU9TTGF5b3V0
VGVzdENvbW11bmljYXRpb24oKTsKIH0KIAogdm9pZCBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1E
ZXN0cm95KCkKIHsKKyAgICB0ZWFyZG93bmlPU0xheW91dFRlc3RDb21tdW5pY2F0aW9uKCk7CiB9
CiAKIHZvaWQgVGVzdENvbnRyb2xsZXI6OmluaXRpYWxpemVJbmplY3RlZEJ1bmRsZVBhdGgoKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>303983</attachid>
            <date>2017-03-09 13:57:01 -0800</date>
            <delta_ts>2017-03-15 10:07:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-169419-20170309135700.patch</filename>
            <type>text/plain</type>
            <size>27476</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIxMzY1NikKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDQ1IEBACisyMDE3LTAzLTA5ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICBVc2UgVENQIGluc3RlYWQgb2YgRklGT3MgZm9yIFNpbXVsYXRvci9EZXZp
Y2UgY29tbXVuaWNhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTY5NDE5CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zMDk0OTYxNT4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIER1bXBSZW5kZXJU
cmVlL0R1bXBSZW5kZXJUcmVlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICog
RHVtcFJlbmRlclRyZWUvbWFjL0R1bXBSZW5kZXJUcmVlLm1tOgorICAgICAgICAoZHVtcFJlbmRl
clRyZWUpOiBDYWxsIHNldHVwL3RlYXJkb3duaU9TTGF5b3V0VGVzdENvbW11bmljYXRpb24oKSBp
bnN0ZWFkIG9mIHVzaW5nIEZJRk9zLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9p
b3MucHk6CisgICAgICAgIChJT1NQb3J0LnNldHVwX3Rlc3RfcnVuKTogU2V0dXAgZWFjaCBkZXZp
Y2UuCisgICAgICAgIChJT1NQb3J0LmNsZWFuX3VwX3Rlc3RfcnVuKTogVGVhcmRvd24gZWFjaCBk
ZXZpY2UuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L3NpbXVsYXRvcl9wcm9jZXNz
LnB5OgorICAgICAgICAoU2ltdWxhdG9yUHJvY2Vzcyk6CisgICAgICAgIChTaW11bGF0b3JQcm9j
ZXNzLlJlYWRTb2NrZXQpOiBBZGQgdG8gd29yayBhcm91bmQgc2hvcnRjb21pbmdzIGluIFB5dGhv
biAy4oCZcyBtYWtlZmlsZS4KKyAgICAgICAgKFNpbXVsYXRvclByb2Nlc3MuUmVhZFNvY2tldC5f
X2luaXRfXyk6IEluaXRpYWxpemUgZmlsZS1saWtlIG9iamVjdCB3aXRoIHNvY2tldC4KKyAgICAg
ICAgKFNpbXVsYXRvclByb2Nlc3MuUmVhZFNvY2tldC5jbG9zZSk6IENsb3NlIHNvY2tldCBhbmQg
bWFyayBvYmplY3QgYXMgY2xvc2VkLgorICAgICAgICAoU2ltdWxhdG9yUHJvY2Vzcy5SZWFkU29j
a2V0LmZpbGVubyk6IFJldHVybiByYXcgc29ja2V0IGZvciB1c2UgaW4gc2VsZWN0LgorICAgICAg
ICAoU2ltdWxhdG9yUHJvY2Vzcy5SZWFkU29ja2V0LnJlYWQpOiBSZWFkIGRhdGEgZnJvbSBzb2Nr
ZXQuCisgICAgICAgIChTaW11bGF0b3JQcm9jZXNzLl9faW5pdF9fKTogUGFzcyBUQ1AgcG9ydCBv
dmVyIGVudmlyb25tZW50LCByZW1vdmUgRklGTyBuYW1lcy4KKyAgICAgICAgKFNpbXVsYXRvclBy
b2Nlc3MuX21ha2VfY29ubmVjdGlvbl9jcmVhdGVfZmlsZSk6IFdhaXQgZm9yIGNvbm5lY3Rpb24g
ZnJvbSBzZXJ2ZXIgYW5kIGNyZWF0ZSBhbmQgcmV0dXJuCisgICAgICAgIGEgZmlsZS1saWtlIG9i
amVjdCBmcm9tIHRoZSBpbmNvbWluZyBjb25uZWN0aW9uLgorICAgICAgICAoU2ltdWxhdG9yUHJv
Y2Vzcy5fc3RhcnQpOiBVc2UgVENQIGNvbm5lY3Rpb25zIGluc3RlYWQgb2YgRklGT3MuCisgICAg
ICAgIChTaW11bGF0b3JQcm9jZXNzLl9yZXNldCk6IERlbGV0ZWQuCisgICAgICAgICogU2NyaXB0
cy93ZWJraXRweS94Y29kZS9kZXZpY2UucHk6CisgICAgICAgIChEZXZpY2UpOgorICAgICAgICAo
RGV2aWNlLl9faW5pdF9fKTogSW5pdGlhbGl6ZSB0aGlzIGRldmljZSBpbiBVRElEIHRvIHNvY2tl
dCBtYXAuCisgICAgICAgIChEZXZpY2UucG9ydCk6IFJldHVybiBwb3J0IG9mIHNvY2tldCBhc3Nv
Y2lhdGVkIHdpdGggdGhpcyBkZXZpY2UuCisgICAgICAgIChEZXZpY2Uuc2VydmVyKTogUmV0dXJu
IHNvY2tldCBhc3NvY2lhdGVkIHdpdGggdGhpcyBkZXZpY2UuCisgICAgICAgIChEZXZpY2Uuc2V0
dXApOiBPcGVuIHNlcnZlciBzb2NrZXQgb24gYW4gb3BlbiBwb3J0LgorICAgICAgICAoRGV2aWNl
LnRlYXJkb3duKTogQ2xvc2Ugc2VydmVyIHNvY2tldCBhc3NvY2lhdGVkIHdpdGggdGhpcyBkZXZp
Y2UuCisgICAgICAgICogVGVzdFJ1bm5lclNoYXJlZC9pT1NMYXlvdXRUZXN0Q29tbXVuaWNhdGlv
bi5jcHA6IEFkZGVkLgorICAgICAgICAoc2V0dXBpT1NMYXlvdXRUZXN0Q29tbXVuaWNhdGlvbik6
IENvbm5lY3Qgc3RkaW4sIHN0ZG91dCBhbmQgc3RkZXJyIGFzIHNvY2tldCB0byBhIFRDUCBzZXJ2
ZXIgcnVubmluZyBvbiBsb2NhbGhvc3QuCisgICAgICAgICh0ZWFyZG93bmlPU0xheW91dFRlc3RD
b21tdW5pY2F0aW9uKTogQ2xvc2Ugc3RkaW4sIHN0ZG91dCBhbmQgc3RkZXJyIFRDUCBzb2NrZXRz
LgorICAgICAgICAqIFRlc3RSdW5uZXJTaGFyZWQvaU9TTGF5b3V0VGVzdENvbW11bmljYXRpb24u
aDogQWRkZWQuCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9XZWJLaXRUZXN0UnVubmVyLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9pb3Mv
VGVzdENvbnRyb2xsZXJJT1MubW06CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpwbGF0
Zm9ybUluaXRpYWxpemUpOiBDYWxsIHNldHVwaU9TTGF5b3V0VGVzdENvbW11bmljYXRpb24oKSBp
bnN0ZWFkIG9mIHVzaW5nIEZJRk9zLgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6cGxh
dGZvcm1EZXN0cm95KTogQ2FsbCB0ZWFyZG93bmlPU0xheW91dFRlc3RDb21tdW5pY2F0aW9uKCku
CisKIDIwMTctMDMtMDggIE1hdHQgUmFqY2EgIDxtcmFqY2FAYXBwbGUuY29tPgogCiAgICAgICAg
IExldCBjbGllbnRzIGNvbnRyb2wgYXV0b3BsYXkgcXVpcmtzIHdpdGggd2Vic2l0ZSBwb2xpY2ll
cy4KSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvRHVtcFJl
bmRlclRyZWUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjEzNjU2KQorKysg
VG9vbHMvRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtODAsNiArODAsNyBAQAogCQkyRDQwM0YxQjE1MDg3MjA5
MDA1MzU4RDIgLyogTGF5b3V0VGVzdEhlbHBlci5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMkQ0MDNFQTIxNTA4NzE0MjAwNTM1OEQyIC8qIExheW91dFRl
c3RIZWxwZXIubSAqLzsgfTsKIAkJMkRBMkUzQTUxRTFCQTU0MTAwQTNCQkQwIC8qIER1bXBSZW5k
ZXJUcmVlU3BlbGxDaGVja2VyLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMkRBMkUzQTQxRTFCQTU0MTAwQTNCQkQwIC8qIER1bXBSZW5kZXJUcmVlU3Bl
bGxDaGVja2VyLm1tICovOyB9OwogCQkzMTExN0IzRDE1RDlBNTZBMDAxNjNCQzggLyogTW9ja1dl
Yk5vdGlmaWNhdGlvblByb3ZpZGVyLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMzExMTdCM0IxNUQ5QTU2QTAwMTYzQkM4IC8qIE1vY2tXZWJOb3RpZmlj
YXRpb25Qcm92aWRlci5tbSAqLzsgfTsKKwkJMzEyOTQzRjkxRTcxRjJCNDAwMUVFMkNDIC8qIGlP
U0xheW91dFRlc3RDb21tdW5pY2F0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDMxNDhBMDU1MUU2RjkwRjQwMEQzQjMxNiAvKiBpT1NMYXlvdXRU
ZXN0Q29tbXVuaWNhdGlvbi5jcHAgKi87IH07CiAJCTQ0NjRDQUJFMUMyMEEwOEIwMEU1QkI1NSAv
KiBEdW1wUmVuZGVyVHJlZUFwcE1haW4ubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA0NDY0Q0FCRDFDMjBBMDcwMDBFNUJCNTUgLyogRHVtcFJlbmRlclRy
ZWVBcHBNYWluLm1tICovOyB9OwogCQk0QUQ2QTExNDEzQzgxMjQwMDBFQTk3MzcgLyogRm9ybVZh
bHVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRB
RDZBMTEzMTNDODEyNDAwMEVBOTczNyAvKiBGb3JtVmFsdWUuY3BwICovOyB9OwogCQk1MTA2ODAz
RTE1Q0M3QjEwMDAxQThBMjMgLyogU2xvd05QUE5ldy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTA2ODAzRDE1Q0M3QjEwMDAxQThBMjMgLyogU2xv
d05QUE5ldy5jcHAgKi87IH07CkBAIC0yOTQsNiArMjk1LDggQEAKIAkJMkRBMkUzQTQxRTFCQTU0
MTAwQTNCQkQwIC8qIER1bXBSZW5kZXJUcmVlU3BlbGxDaGVja2VyLm1tICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gRHVtcFJlbmRlclRyZWVTcGVsbENoZWNrZXIubW07
IHBhdGggPSBtYWMvRHVtcFJlbmRlclRyZWVTcGVsbENoZWNrZXIubW07IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTMxMTE3QjNBMTVEOUE1NkEwMDE2M0JDOCAvKiBNb2NrV2ViTm90aWZp
Y2F0aW9uUHJvdmlkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTW9ja1dl
Yk5vdGlmaWNhdGlvblByb3ZpZGVyLmg7IHBhdGggPSBtYWMvTW9ja1dlYk5vdGlmaWNhdGlvblBy
b3ZpZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxMTE3QjNCMTVEOUE1NkEw
MDE2M0JDOCAvKiBNb2NrV2ViTm90aWZpY2F0aW9uUHJvdmlkZXIubW0gKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBNb2NrV2ViTm90aWZpY2F0aW9uUHJvdmlkZXIubW07
IHBhdGggPSBtYWMvTW9ja1dlYk5vdGlmaWNhdGlvblByb3ZpZGVyLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkzMTQ4QTA1NTFFNkY5MEY0MDBEM0IzMTYgLyogaU9TTGF5b3V0VGVz
dENvbW11bmljYXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
aU9TTGF5b3V0VGVzdENvbW11bmljYXRpb24uY3BwOyBwYXRoID0gLi4vVGVzdFJ1bm5lclNoYXJl
ZC9pT1NMYXlvdXRUZXN0Q29tbXVuaWNhdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTMxNDhBMDU2MUU2RjkwRjQwMEQzQjMxNiAvKiBpT1NMYXlvdXRUZXN0Q29tbXVuaWNh
dGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBpT1NMYXlvdXRUZXN0Q29t
bXVuaWNhdGlvbi5oOyBwYXRoID0gLi4vVGVzdFJ1bm5lclNoYXJlZC9pT1NMYXlvdXRUZXN0Q29t
bXVuaWNhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMkE3MEFBQjAzNzA1
RTFGMDBDOTE3ODMgLyogRHVtcFJlbmRlclRyZWVQcmVmaXguaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gRHVtcFJlbmRlclRyZWVQcmVmaXguaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMzc1RjA5NzEwREFDM0NCNjAwQzhCNEU1IC8qIFdlYktpdFdlaWdodFdhdGNo
ZXIxMDAudHRmICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gZmlsZTsgbmFtZSA9IFdlYktpdFdlaWdodFdhdGNoZXIxMDAudHRmOyBwYXRoID0gZm9udHMv
V2ViS2l0V2VpZ2h0V2F0Y2hlcjEwMC50dGY7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTM3NUYwOTcyMERBQzNDQjYwMEM4QjRFNSAvKiBXZWJLaXRXZWlnaHRXYXRjaGVyMjAwLnR0ZiAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IGZpbGU7IG5h
bWUgPSBXZWJLaXRXZWlnaHRXYXRjaGVyMjAwLnR0ZjsgcGF0aCA9IGZvbnRzL1dlYktpdFdlaWdo
dFdhdGNoZXIyMDAudHRmOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDcyLDYgKzQ3
NSw3IEBACiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAogCQkJCTBGMThFNkYx
MUQ2QjlDNjQwMDI3RTU0NyAvKiBEZXJpdmVkU291cmNlcy5tYWtlICovLAorCQkJCTMxNDhBMDY1
MUU2RjkwRjQwMEQzQjMxNiAvKiBUZXN0UnVubmVyU2hhcmVkICovLAogCQkJCTBGMThFNkU3MUQ2
QjlCRjUwMDI3RTU0NyAvKiBVSVNjcmlwdENvbnRleHQgKi8sCiAJCQkJQTExNThENkExODkyN0NF
MTAwODhDMTdCIC8qIGlvcyAqLywKIAkJCQlBMTM0RTUzNDE4OTA1RTZDMDA5MDFEMDYgLyogY29u
ZmlnLmggKi8sCkBAIC02OTUsNiArNjk5LDE2IEBACiAJCQluYW1lID0gTGF5b3V0VGVzdEhlbHBl
cjsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07CisJCTMxNDhBMDY1MUU2RjkwRjQw
MEQzQjMxNiAvKiBUZXN0UnVubmVyU2hhcmVkICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJ
CQljaGlsZHJlbiA9ICgKKwkJCQkzMTQ4QTA1NTFFNkY5MEY0MDBEM0IzMTYgLyogaU9TTGF5b3V0
VGVzdENvbW11bmljYXRpb24uY3BwICovLAorCQkJCTMxNDhBMDU2MUU2RjkwRjQwMEQzQjMxNiAv
KiBpT1NMYXlvdXRUZXN0Q29tbXVuaWNhdGlvbi5oICovLAorCQkJKTsKKwkJCW5hbWUgPSBUZXN0
UnVubmVyU2hhcmVkOworCQkJcGF0aCA9IC4uL1dlYktpdFRlc3RSdW5uZXI7CisJCQlzb3VyY2VU
cmVlID0gIjxncm91cD4iOworCQl9OwogCQk0MTdEQTkxODEzNzM2NzREMDA3QzU3RkIgLyogV2Vi
Q29yZVRlc3RTdXBwb3J0ICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9
ICgKQEAgLTExNDUsNiArMTE1OSw3IEBACiAJCQkJN0NCQkMzMjMxRERGQ0Y5QTAwNzg2QjlEIC8q
IFRlc3RPcHRpb25zLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYxOEU3MEYxRDZCQUNCNjAwMjdF
NTQ3IC8qIFVJU2NyaXB0Q29udHJvbGxlck1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUJDOUQ5
MDI0MEM5NzQ3MkUwMDk5QTRBMyAvKiBXb3JrUXVldWUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
MzEyOTQzRjkxRTcxRjJCNDAwMUVFMkNDIC8qIGlPU0xheW91dFRlc3RDb21tdW5pY2F0aW9uLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUJDQTE4QjI2MEM5QjAxNUMwMDExNDM2OSAvKiBXb3JrUXVl
dWVJdGVtTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1l
bnRQb3N0cHJvY2Vzc2luZyA9IDA7CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvRHVt
cFJlbmRlclRyZWUubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0R1
bXBSZW5kZXJUcmVlLm1tCShyZXZpc2lvbiAyMTM2NTYpCisrKyBUb29scy9EdW1wUmVuZGVyVHJl
ZS9tYWMvRHVtcFJlbmRlclRyZWUubW0JKHdvcmtpbmcgY29weSkKQEAgLTEwNCw2ICsxMDQsNyBA
QAogI2lmIFBMQVRGT1JNKElPUykKICNpbXBvcnQgIkR1bXBSZW5kZXJUcmVlQnJvd3NlclZpZXcu
aCIKICNpbXBvcnQgIlVJS2l0U1BJLmgiCisjaW1wb3J0ICJpT1NMYXlvdXRUZXN0Q29tbXVuaWNh
dGlvbi5oIgogI2ltcG9ydCA8UXVhcnR6Q29yZS9RdWFydHpDb3JlLmg+CiAjaW1wb3J0IDxXZWJD
b3JlL0NvcmVHcmFwaGljc1NQSS5oPgogI2ltcG9ydCA8V2ViS2l0L1dBS1dpbmRvdy5oPgpAQCAt
MTIzMywxNyArMTIzNCw3IEBAIHZvaWQgd3JpdGVDcmFzaGVkTWVzc2FnZU9uRmF0YWxFcnJvcihp
bnQKIHZvaWQgZHVtcFJlbmRlclRyZWUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKmFyZ3ZbXSkKIHsK
ICNpZiBQTEFURk9STShJT1MpCi0gICAgY29uc3QgY2hhciogaWRlbnRpZmllciA9IGdldGVudigi
SVBDX0lERU5USUZJRVIiKTsKLSAgICBjb25zdCBjaGFyICpzdGRpblBhdGggPSBbW05TU3RyaW5n
IHN0cmluZ1dpdGhGb3JtYXQ6QCIvdG1wLyVzX0lOIiwgaWRlbnRpZmllcl0gVVRGOFN0cmluZ107
Ci0gICAgY29uc3QgY2hhciAqc3Rkb3V0UGF0aCA9IFtbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1h
dDpAIi90bXAvJXNfT1VUIiwgaWRlbnRpZmllcl0gVVRGOFN0cmluZ107Ci0gICAgY29uc3QgY2hh
ciAqc3RkZXJyUGF0aCA9IFtbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIi90bXAvJXNfRVJS
T1IiLCBpZGVudGlmaWVyXSBVVEY4U3RyaW5nXTsKLQotICAgIGludCBpbmZkID0gb3BlbihzdGRp
blBhdGgsIE9fUkRXUik7Ci0gICAgZHVwMihpbmZkLCBTVERJTl9GSUxFTk8pOwotICAgIGludCBv
dXRmZCA9IG9wZW4oc3Rkb3V0UGF0aCwgT19SRFdSKTsKLSAgICBkdXAyKG91dGZkLCBTVERPVVRf
RklMRU5PKTsKLSAgICBpbnQgZXJyZmQgPSBvcGVuKHN0ZGVyclBhdGgsIE9fUkRXUiB8IE9fTk9O
QkxPQ0spOwotICAgIGR1cDIoZXJyZmQsIFNUREVSUl9GSUxFTk8pOworICAgIHNldHVwaU9TTGF5
b3V0VGVzdENvbW11bmljYXRpb24oKTsKICNlbmRpZgogCiAgICAgc2lnbmFsKFNJR0lMTCwgJndy
aXRlQ3Jhc2hlZE1lc3NhZ2VPbkZhdGFsRXJyb3IpOwpAQCAtMTMwNCw5ICsxMjk1LDcgQEAgdm9p
ZCBkdW1wUmVuZGVyVHJlZShpbnQgYXJnYywgY29uc3QgY2hhcgogICAgIH0KIAogI2lmIFBMQVRG
T1JNKElPUykKLSAgICBjbG9zZShpbmZkKTsKLSAgICBjbG9zZShvdXRmZCk7Ci0gICAgY2xvc2Uo
ZXJyZmQpOworICAgIHRlYXJkb3duaU9TTGF5b3V0VGVzdENvbW11bmljYXRpb24oKTsKICNlbmRp
ZgogfQogCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zLnB5Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3MucHkJKHJldmlzaW9uIDIxMzY1
NikKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3MucHkJKHdvcmtpbmcgY29weSkK
QEAgLTgyLDMgKzgyLDEyIEBAIGNsYXNzIElPU1BvcnQoRGFyd2luUG9ydCk6CiAKICAgICBkZWYg
c2V0dXBfdGVzdF9ydW4oc2VsZiwgZGV2aWNlX2NsYXNzPU5vbmUpOgogICAgICAgICBzZWxmLl9j
cmVhdGVfZGV2aWNlcyhkZXZpY2VfY2xhc3MpCisKKyAgICAgICAgZm9yIGkgaW4geHJhbmdlKHNl
bGYuY2hpbGRfcHJvY2Vzc2VzKCkpOgorICAgICAgICAgICAgc2VsZi5kZXZpY2VfZm9yX3dvcmtl
cl9udW1iZXIoaSkuc2V0dXAoKQorCisgICAgZGVmIGNsZWFuX3VwX3Rlc3RfcnVuKHNlbGYpOgor
ICAgICAgICBzdXBlcihJT1NQb3J0LCBzZWxmKS5jbGVhbl91cF90ZXN0X3J1bigpCisKKyAgICAg
ICAgZm9yIGkgaW4geHJhbmdlKHNlbGYuY2hpbGRfcHJvY2Vzc2VzKCkpOgorICAgICAgICAgICAg
c2VsZi5kZXZpY2VfZm9yX3dvcmtlcl9udW1iZXIoaSkudGVhcmRvd24oKQpJbmRleDogVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9wb3J0L3NpbXVsYXRvcl9wcm9jZXNzLnB5Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9zaW11bGF0b3JfcHJvY2Vzcy5weQkocmV2aXNp
b24gMjEzNjU2KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3NpbXVsYXRvcl9wcm9j
ZXNzLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw2IEBAIGltcG9ydCBzaWduYWwKIGlt
cG9ydCB0aW1lCiAKIGZyb20gd2Via2l0cHkucG9ydC5zZXJ2ZXJfcHJvY2VzcyBpbXBvcnQgU2Vy
dmVyUHJvY2VzcwotZnJvbSB3ZWJraXRweS54Y29kZS5zaW11bGF0b3IgaW1wb3J0IFNpbXVsYXRv
cgogCiAKIGNsYXNzIFNpbXVsYXRvclByb2Nlc3MoU2VydmVyUHJvY2Vzcyk6CkBAIC01Niw1NSAr
NTUsNDggQEAgY2xhc3MgU2ltdWxhdG9yUHJvY2VzcyhTZXJ2ZXJQcm9jZXNzKToKICAgICAgICAg
ICAgICAgICB0aW1lLnNsZWVwKDAuMDEpICAjIEluIHNlY29uZHMKICAgICAgICAgICAgIHJldHVy
biBzZWxmLnJldHVybmNvZGUKIAorICAgICMgUHl0aG9uIDIncyBpbXBsZW1lbnRhdGlvbiBvZiBt
YWtlZmlsZSBibG9ja3Mgb24gcmVhZCBpZiB0aGUKKyAgICAjIHNvY2tldCBpcyBvcGVuLiBJbXBs
ZW1lbnQgdGhlIHNtYWxsIHN1YnNldCBvZiBjb21tYW5kcyB3ZSBuZWVkLgorICAgIGNsYXNzIFJl
YWRTb2NrZXQob2JqZWN0KToKKworICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgc29jayk6Cisg
ICAgICAgICAgICBzZWxmLnNvY2tldCA9IHNvY2sKKyAgICAgICAgICAgIHNlbGYuY2xvc2VkID0g
bm90IHNlbGYuc29ja2V0CisKKyAgICAgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICAgICAg
c2VsZi5jbG9zZWQgPSBUcnVlCisgICAgICAgICAgICByZXR1cm4gc2VsZi5zb2NrZXQuY2xvc2Uo
KQorCisgICAgICAgICMgVGhpcyBpcyB1c2VkIGluIHNlbGVjdAorICAgICAgICBkZWYgZmlsZW5v
KHNlbGYpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuc29ja2V0CisKKyAgICAgICAgZGVmIHJl
YWQoc2VsZik6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5zb2NrZXQucmVjdigxMDI0KQorCiAg
ICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnRfb2JqLCBuYW1lLCBjbWQsIGVudj1Ob25lLCB1bml2
ZXJzYWxfbmV3bGluZXM9RmFsc2UsIHRyZWF0X25vX2RhdGFfYXNfY3Jhc2g9RmFsc2UsIHdvcmtl
cl9udW1iZXI9Tm9uZSk6CiAgICAgICAgIHNlbGYuX2J1bmRsZV9pZCA9IHBvcnRfb2JqLmFwcF9p
ZGVudGlmaWVyX2Zyb21fYnVuZGxlKGNtZFswXSkKICAgICAgICAgc2VsZi5fZGV2aWNlID0gcG9y
dF9vYmouZGV2aWNlX2Zvcl93b3JrZXJfbnVtYmVyKHdvcmtlcl9udW1iZXIpCiAgICAgICAgIGlm
IG5vdCBzZWxmLl9kZXZpY2UuaW5zdGFsbF9hcHAoY21kWzBdLCBlbnYpOgogICAgICAgICAgICAg
cmFpc2UgUnVudGltZUVycm9yKCdGYWlsZWQgdG8gaW5zdGFsbCBhcHAge30gb24gc2ltdWxhdG9y
IGRldmljZSB7fScuZm9ybWF0KGNtZFswXSwgc2VsZi5fZGV2aWNlLnVkaWQpKQotICAgICAgICBl
bnZbJ0lQQ19JREVOVElGSUVSJ10gPSBzZWxmLl9idW5kbGVfaWQgKyAnLScgKyBzZWxmLl9kZXZp
Y2UudWRpZAotCi0gICAgICAgICMgVGhpcyBsb2NhdGlvbiBtYXRjaGVzIHRoZSBsb2NhdGlvbiB1
c2VkIGJ5IFdlYktpdFRlc3RSdW5uZXIgYW5kIER1bXBSZW5kZXJUcmVlCi0gICAgICAgICMgZm9y
IHRoZSBvdGhlciBzaWRlIG9mIHRoZXNlIGZpZm9zLgotICAgICAgICBmaWxlX2xvY2F0aW9uID0g
Jy90bXAvJyArIGVudlsnSVBDX0lERU5USUZJRVInXQotICAgICAgICBzZWxmLl9pbl9wYXRoID0g
ZmlsZV9sb2NhdGlvbiArICdfSU4nCi0gICAgICAgIHNlbGYuX291dF9wYXRoID0gZmlsZV9sb2Nh
dGlvbiArICdfT1VUJwotICAgICAgICBzZWxmLl9lcnJvcl9wYXRoID0gZmlsZV9sb2NhdGlvbiAr
ICdfRVJST1InCiAKKyAgICAgICAgZW52WydQT1JUJ10gPSBzdHIoc2VsZi5fZGV2aWNlLnBvcnQo
KSkKICAgICAgICAgc3VwZXIoU2ltdWxhdG9yUHJvY2Vzcywgc2VsZikuX19pbml0X18ocG9ydF9v
YmosIG5hbWUsIGNtZCwgZW52LCB1bml2ZXJzYWxfbmV3bGluZXMsIHRyZWF0X25vX2RhdGFfYXNf
Y3Jhc2gpCiAKLSAgICBkZWYgX3Jlc2V0KHNlbGYpOgotICAgICAgICBzdXBlcihTaW11bGF0b3JQ
cm9jZXNzLCBzZWxmKS5fcmVzZXQoKQotCi0gICAgICAgICMgVW5saW5rcyBhcmUgbmVlZGVkIG9u
IHJlc2V0IGluIHRoZSBldmVudCB0aGF0IHRoZSBQeXRob24gY29kZSB1bmV4cGVjdGVkbHkKLSAg
ICAgICAgIyBmYWlscyBiZXR3ZWVuIF9zdGFydCgpIGFuZCBraWxsKCkuICBUaGlzIGNhbiBiZSBj
YXVzZWQgYnkgYSBTSUdLSUxMIG9yIGEgY3Jhc2guCi0gICAgICAgICMgVGhpcyBlbnN1cmVzIHRo
YXQgb3MubWtmaWZvKCkgd2lsbCBub3QgYmUgb2JzdHJ1Y3RlZCBieSBwcmV2aW91cyBmaWZvcy4K
LSAgICAgICAgIyBPdGhlciBmaWxlcyB3aWxsIHN0aWxsIGNhdXNlIG9zLm1rZmlmbygpIHRvIGZh
aWwuCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIG9zLnVubGluayhzZWxmLl9pbl9wYXRoKQot
ICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICBwYXNzCi0gICAgICAgIHRyeToKLSAgICAgICAg
ICAgIG9zLnVubGluayhzZWxmLl9vdXRfcGF0aCkKLSAgICAgICAgZXhjZXB0OgotICAgICAgICAg
ICAgcGFzcwotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBvcy51bmxpbmsoc2VsZi5fZXJyb3Jf
cGF0aCkKLSAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgcGFzcworICAgIEBzdGF0aWNtZXRo
b2QKKyAgICBkZWYgX21ha2VfY29ubmVjdGlvbl9jcmVhdGVfZmlsZShzZXJ2ZXIsIHR5cGUpOgor
ICAgICAgICBjb25uZWN0aW9uLCBhZGRyZXNzID0gc2VydmVyLmFjY2VwdCgpCisgICAgICAgIGFz
c2VydCBhZGRyZXNzWzBdID09ICcxMjcuMC4wLjEnCisgICAgICAgIGlmICd3JyBpbiB0eXBlOgor
ICAgICAgICAgICAgcmV0dXJuIGNvbm5lY3Rpb24ubWFrZWZpbGUodHlwZSwgMCkKKyAgICAgICAg
cmV0dXJuIFNpbXVsYXRvclByb2Nlc3MuUmVhZFNvY2tldChjb25uZWN0aW9uKQogCiAgICAgZGVm
IF9zdGFydChzZWxmKToKICAgICAgICAgaWYgc2VsZi5fcHJvYzoKICAgICAgICAgICAgIHJhaXNl
IFZhbHVlRXJyb3IoJ3t9IGFscmVhZHkgcnVubmluZycuZm9ybWF0KHNlbGYuX25hbWUpKQogICAg
ICAgICBzZWxmLl9yZXNldCgpCiAKLSAgICAgICAgRklGT19QRVJNSVNTSU9OX0ZMQUdTID0gMDYw
MCAgIyBPbmx5IG93bmVyIGNhbiByZWFkIGFuZCB3cml0ZQotICAgICAgICBvcy5ta2ZpZm8oc2Vs
Zi5faW5fcGF0aCwgRklGT19QRVJNSVNTSU9OX0ZMQUdTKQotICAgICAgICBvcy5ta2ZpZm8oc2Vs
Zi5fb3V0X3BhdGgsIEZJRk9fUEVSTUlTU0lPTl9GTEFHUykKLSAgICAgICAgb3MubWtmaWZvKHNl
bGYuX2Vycm9yX3BhdGgsIEZJRk9fUEVSTUlTU0lPTl9GTEFHUykKLQotICAgICAgICBzdGRvdXQg
PSBvcy5mZG9wZW4ob3Mub3BlbihzZWxmLl9vdXRfcGF0aCwgb3MuT19SRE9OTFkgfCBvcy5PX05P
TkJMT0NLKSwgJ3JiJykKLSAgICAgICAgc3RkZXJyID0gb3MuZmRvcGVuKG9zLm9wZW4oc2VsZi5f
ZXJyb3JfcGF0aCwgb3MuT19SRE9OTFkgfCBvcy5PX05PTkJMT0NLKSwgJ3JiJykKLQorICAgICAg
ICBzZWxmLl9kZXZpY2Uuc2VydmVyKCkubGlzdGVuKDMpCiAgICAgICAgIHNlbGYuX3BpZCA9IHNl
bGYuX2RldmljZS5sYXVuY2hfYXBwKHNlbGYuX2J1bmRsZV9pZCwgc2VsZi5fY21kWzE6XSwgZW52
PXNlbGYuX2VudikKIAogICAgICAgICBkZWYgaGFuZGxlcihzaWdudW0sIGZyYW1lKToKQEAgLTEx
NCw4ICsxMDYsMTMgQEAgY2xhc3MgU2ltdWxhdG9yUHJvY2VzcyhTZXJ2ZXJQcm9jZXNzKToKICAg
ICAgICAgc2lnbmFsLmFsYXJtKDMpICAjIEluIHNlY29uZHMKIAogICAgICAgICBzdGRpbiA9IE5v
bmUKKyAgICAgICAgc3Rkb3V0ID0gTm9uZQorICAgICAgICBzdGRlcnIgPSBOb25lCiAgICAgICAg
IHRyeToKLSAgICAgICAgICAgIHN0ZGluID0gb3BlbihzZWxmLl9pbl9wYXRoLCAndycsIDApICAj
IE9wZW5pbmcgd2l0aCBubyBidWZmZXJpbmcsIGxpa2UgcG9wZW4KKyAgICAgICAgICAgICMgT3Jk
ZXIgbWF0dGVycyBoZXJlIQorICAgICAgICAgICAgc3RkaW4gPSBTaW11bGF0b3JQcm9jZXNzLl9t
YWtlX2Nvbm5lY3Rpb25fY3JlYXRlX2ZpbGUoc2VsZi5fZGV2aWNlLnNlcnZlcigpLCAndycpCisg
ICAgICAgICAgICBzdGRvdXQgPSBTaW11bGF0b3JQcm9jZXNzLl9tYWtlX2Nvbm5lY3Rpb25fY3Jl
YXRlX2ZpbGUoc2VsZi5fZGV2aWNlLnNlcnZlcigpLCAncmInKQorICAgICAgICAgICAgc3RkZXJy
ID0gU2ltdWxhdG9yUHJvY2Vzcy5fbWFrZV9jb25uZWN0aW9uX2NyZWF0ZV9maWxlKHNlbGYuX2Rl
dmljZS5zZXJ2ZXIoKSwgJ3JiJykKICAgICAgICAgZXhjZXB0OgogICAgICAgICAgICAgIyBXZSBz
ZXQgc2VsZi5fcHJvYyBhcyBfcmVzZXQoKSBhbmQgX2tpbGwoKSBkZXBlbmQgb24gaXQuCiAgICAg
ICAgICAgICBzZWxmLl9wcm9jID0gU2ltdWxhdG9yUHJvY2Vzcy5Qb3BlbihzZWxmLl9waWQsIHN0
ZGluLCBzdGRvdXQsIHN0ZGVycikKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkveGNvZGUv
ZGV2aWNlLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkveGNvZGUvZGV2
aWNlLnB5CShyZXZpc2lvbiAyMTM2NTYpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3hjb2Rl
L2RldmljZS5weQkod29ya2luZyBjb3B5KQpAQCAtMjAsMTIgKzIwLDU1IEBACiAjIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTCiAjIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgogCitpbXBvcnQgc29ja2V0CisKK2Zyb20gcmFuZG9tIGltcG9y
dCByYW5kaW50CiAKIGNsYXNzIERldmljZShvYmplY3QpOgorCisgICAgUE9SVF9SQU5HRSA9IFs1
MDAwLCAxMDAwMF0KKyAgICBGT1JXQVJEX1BPUlRTID0gWzgwMDAsIDgwODAsIDg0NDNdCisgICAg
VURJRF9UT19TT0NLRVQgPSB7fQorCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUsIHVkaWQs
IGhvc3QpOgogICAgICAgICBzZWxmLl9ob3N0ID0gaG9zdAogICAgICAgICBzZWxmLm5hbWUgPSBu
YW1lCiAgICAgICAgIHNlbGYudWRpZCA9IHVkaWQKKyAgICAgICAgaWYgdWRpZCBub3QgaW4gRGV2
aWNlLlVESURfVE9fU09DS0VUOgorICAgICAgICAgICAgRGV2aWNlLlVESURfVE9fU09DS0VUW3Vk
aWRdID0gTm9uZQorCisgICAgZGVmIHBvcnQoc2VsZik6CisgICAgICAgIGlmIG5vdCBzZWxmLnNl
cnZlcigpOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgcmV0dXJuIHNlbGYuc2Vy
dmVyKCkuZ2V0c29ja25hbWUoKVsxXQorCisgICAgZGVmIHNlcnZlcihzZWxmKToKKyAgICAgICAg
cmV0dXJuIERldmljZS5VRElEX1RPX1NPQ0tFVFtzZWxmLnVkaWRdCisKKyAgICBkZWYgc2V0dXAo
c2VsZik6CisgICAgICAgIHNlcnZlciA9IERldmljZS5VRElEX1RPX1NPQ0tFVFtzZWxmLnVkaWRd
CisgICAgICAgIGlmIG5vdCBzZXJ2ZXI6CisgICAgICAgICAgICBzdGFydGluZ19wb3J0ID0gcmFu
ZGludChEZXZpY2UuUE9SVF9SQU5HRVswXSwgRGV2aWNlLlBPUlRfUkFOR0VbMV0pCisgICAgICAg
ICAgICB1cHBlcl9ib3VuZCA9IERldmljZS5QT1JUX1JBTkdFWzFdIC0gRGV2aWNlLlBPUlRfUkFO
R0VbMF0KKworICAgICAgICAgICAgZm9yIGNudCBpbiB4cmFuZ2UoMCwgdXBwZXJfYm91bmQpOgor
ICAgICAgICAgICAgICAgIHBvcnQgPSAoc3RhcnRpbmdfcG9ydCArIGNudCkgJSB1cHBlcl9ib3Vu
ZAorICAgICAgICAgICAgICAgIGlmIHBvcnQgaW4gRGV2aWNlLkZPUldBUkRfUE9SVFM6CisgICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAg
ICAgICAgICAgICBzZXJ2ZXIgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQu
U09DS19TVFJFQU0pCisgICAgICAgICAgICAgICAgICAgIHNlcnZlci5zZXRzb2Nrb3B0KHNvY2tl
dC5TT0xfU09DS0VULCBzb2NrZXQuU09fUkVVU0VBRERSLCAxKQorICAgICAgICAgICAgICAgICAg
ICBzZXJ2ZXIuYmluZCgoJ2xvY2FsaG9zdCcsIHBvcnQpKQorICAgICAgICAgICAgICAgICAgICBi
cmVhaworICAgICAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IsIFJ1bnRpbWVFcnJvcjoK
KyAgICAgICAgICAgICAgICAgICAgc2VydmVyID0gTm9uZQorICAgICAgICAgICAgRGV2aWNlLlVE
SURfVE9fU09DS0VUW3NlbGYudWRpZF0gPSBzZXJ2ZXIKKworICAgICAgICBpZiBub3QgRGV2aWNl
LlVESURfVE9fU09DS0VUW3NlbGYudWRpZF06CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJy
b3IoJ05vIG9wZW4gcG9ydHMgZm91bmQnKQorCisgICAgZGVmIHRlYXJkb3duKHNlbGYpOgorICAg
ICAgICBEZXZpY2UuVURJRF9UT19TT0NLRVRbc2VsZi51ZGlkXSA9IE5vbmUKIAogICAgIGRlZiBp
bnN0YWxsX2FwcChzZWxmLCBhcHBfcGF0aCwgZW52PU5vbmUpOgogICAgICAgICByYWlzZSBOb3RJ
bXBsZW1lbnRlZEVycm9yCkluZGV4OiBUb29scy9UZXN0UnVubmVyU2hhcmVkL2lPU0xheW91dFRl
c3RDb21tdW5pY2F0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0UnVubmVyU2hhcmVk
L2lPU0xheW91dFRlc3RDb21tdW5pY2F0aW9uLmNwcAkobm9uZXhpc3RlbnQpCisrKyBUb29scy9U
ZXN0UnVubmVyU2hhcmVkL2lPU0xheW91dFRlc3RDb21tdW5pY2F0aW9uLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDEwMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJpT1NMYXlvdXRUZXN0Q29tbXVuaWNhdGlvbi5oIgorCisjaWYgUExBVEZPUk0o
SU9TKQorCisjaW5jbHVkZSA8bmV0ZGIuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjaW5j
bHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHVu
aXN0ZC5oPgorCitzdGF0aWMgY29uc3QgdW5zaWduZWQgc3RkaW5JbmRleCA9IDA7CitzdGF0aWMg
Y29uc3QgdW5zaWduZWQgc3Rkb3V0SW5kZXggPSAxOworc3RhdGljIGNvbnN0IHVuc2lnbmVkIHN0
ZGVyckluZGV4ID0gMjsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBudW1IYW5kbGVzID0gMzsKKwor
c3RhdGljIGludCBzb2NrZXRzW251bUhhbmRsZXNdOworc3RhdGljIHN0cnVjdCBzb2NrYWRkcl9p
biBzZXJ2ZXJBZGRyZXNzOworc3RhdGljIHN0cnVjdCBob3N0ZW50KiBob3N0ID0gZ2V0aG9zdGJ5
bmFtZSgibG9jYWxob3N0Iik7CitzdGF0aWMgRklMRSogb3JpZ2luYWxzW251bUhhbmRsZXNdOwor
c3RhdGljIEZJTEUqKiByZWZlcmVuY2VzVG9IYW5kbGVzW251bUhhbmRsZXNdOworCit2b2lkIHNl
dHVwaU9TTGF5b3V0VGVzdENvbW11bmljYXRpb24oKQoreworICAgIHJlZmVyZW5jZXNUb0hhbmRs
ZXNbc3RkaW5JbmRleF0gPSAmc3RkaW47CisgICAgcmVmZXJlbmNlc1RvSGFuZGxlc1tzdGRvdXRJ
bmRleF0gPSAmc3Rkb3V0OworICAgIHJlZmVyZW5jZXNUb0hhbmRsZXNbc3RkZXJySW5kZXhdID0g
JnN0ZGVycjsKKworICAgIGludCBwb3J0ID0gYXRvaShnZXRlbnYoIlBPUlQiKSk7CisgICAgaWYg
KHBvcnQgPD0gMCkKKyAgICAgICAgYWJvcnQoKTsKKworICAgIG1lbXNldCgoY2hhciAqKSAmc2Vy
dmVyQWRkcmVzcywgMCwgc2l6ZW9mKHNlcnZlckFkZHJlc3MpKTsKKyAgICBzZXJ2ZXJBZGRyZXNz
LnNpbl9mYW1pbHkgPSBBRl9JTkVUOworICAgIG1lbWNweSgKKyAgICAgICAgKGNoYXIgKikmc2Vy
dmVyQWRkcmVzcy5zaW5fYWRkci5zX2FkZHIsCisgICAgICAgIChjaGFyICopaG9zdC0+aF9hZGRy
LAorICAgICAgICBob3N0LT5oX2xlbmd0aCk7CisgICAgc2VydmVyQWRkcmVzcy5zaW5fcG9ydCA9
IGh0b25zKHBvcnQpOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUhhbmRsZXM7
ICsraSkgeworICAgICAgICAvLyBPcmRlciBtYXR0ZXJzIQorICAgICAgICBzb2NrZXRzW2ldID0g
c29ja2V0KEFGX0lORVQsIFNPQ0tfU1RSRUFNLCAwKTsKKyAgICAgICAgaWYgKHNvY2tldHNbaV0g
PCAwKQorICAgICAgICAgICAgYWJvcnQoKTsKKyAgICAgICAgaWYgKGNvbm5lY3Qoc29ja2V0c1tp
XSwgKHN0cnVjdCBzb2NrYWRkciAqKSAmc2VydmVyQWRkcmVzcywgc2l6ZW9mKHNlcnZlckFkZHJl
c3MpKSA8IDApCisgICAgICAgICAgICBhYm9ydCgpOworCisgICAgICAgIG9yaWdpbmFsc1tpXSA9
ICpyZWZlcmVuY2VzVG9IYW5kbGVzW2ldOworICAgICAgICBmZmx1c2gob3JpZ2luYWxzW2ldKTsK
KyAgICAgICAgaWYgKGkgPT0gc3RkaW5JbmRleCkKKyAgICAgICAgICAgICpyZWZlcmVuY2VzVG9I
YW5kbGVzW2ldID0gZmRvcGVuKHNvY2tldHNbaV0sICJyYiIpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICAqcmVmZXJlbmNlc1RvSGFuZGxlc1tpXSA9IGZkb3Blbihzb2NrZXRzW2ldLCAid2Ii
KTsKKyAgICAgICAgc2V0YnVmKCpyZWZlcmVuY2VzVG9IYW5kbGVzW2ldLCBudWxscHRyKTsKKyAg
ICB9Cit9CisKK3ZvaWQgdGVhcmRvd25pT1NMYXlvdXRUZXN0Q29tbXVuaWNhdGlvbigpCit7Cisg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUhhbmRsZXM7ICsraSkgeworICAgICAgICBm
Zmx1c2goKnJlZmVyZW5jZXNUb0hhbmRsZXNbaV0pOworICAgICAgICBmY2xvc2UoKnJlZmVyZW5j
ZXNUb0hhbmRsZXNbaV0pOworICAgICAgICAqcmVmZXJlbmNlc1RvSGFuZGxlc1tpXSA9IG9yaWdp
bmFsc1tpXTsKKworICAgICAgICBjbG9zZShzb2NrZXRzW2ldKTsKKyAgICB9Cit9CisKKyNlbHNl
CisKK3ZvaWQgc2V0dXBpT1NMYXlvdXRUZXN0Q29tbXVuaWNhdGlvbigpIHsgfQordm9pZCB0ZWFy
ZG93bmlPU0xheW91dFRlc3RDb21tdW5pY2F0aW9uKCkgeyB9CisKKyNlbmRpZgpJbmRleDogVG9v
bHMvVGVzdFJ1bm5lclNoYXJlZC9pT1NMYXlvdXRUZXN0Q29tbXVuaWNhdGlvbi5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvaU9TTGF5b3V0VGVzdENvbW11bmljYXRpb24u
aAkobm9uZXhpc3RlbnQpCisrKyBUb29scy9UZXN0UnVubmVyU2hhcmVkL2lPU0xheW91dFRlc3RD
b21tdW5pY2F0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyOSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNwcmFnbWEgb25jZQorCit2b2lkIHNldHVwaU9TTGF5b3V0VGVzdENvbW11bmljYXRpb24o
KTsKK3ZvaWQgdGVhcmRvd25pT1NMYXlvdXRUZXN0Q29tbXVuaWNhdGlvbigpOwpJbmRleDogVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9XZWJLaXRUZXN0UnVubmVyLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9XZWJLaXRUZXN0UnVu
bmVyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIxMzY1NikKKysrIFRvb2xz
L1dlYktpdFRlc3RSdW5uZXIvV2ViS2l0VGVzdFJ1bm5lci54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCSh3b3JraW5nIGNvcHkpCkBAIC03Myw2ICs3Myw3IEBACiAJCTJFNjNFREExMTg5MUIyOTEw
MDJBN0FGQyAvKiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50SU9TLm1tIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkU2M0VENzgxODkxQUNFOTAwMkE3QUZDIC8q
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnRJT1MubW0gKi87IH07CiAJCTJFNjNFREE2MTg5MUJEQzAw
MDJBN0FGQyAvKiBUZXN0UnVubmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEJDQzk5ODE3MTFEM0Y1MUUwMDE3QkNBMiAvKiBUZXN0UnVubmVyLmNw
cCAqLzsgfTsKIAkJMkU3NDlCRjIxODkxRUJGQTAwN0ZDMTc1IC8qIEV2ZW50U2VuZGVyUHJveHlJ
T1MubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRTYz
RUQ3QTE4OTFBQ0U5MDAyQTdBRkMgLyogRXZlbnRTZW5kZXJQcm94eUlPUy5tbSAqLzsgfTsKKwkJ
MzFEQThBM0QxRTcyMDVDQzAwRTFERjJGIC8qIGlPU0xheW91dFRlc3RDb21tdW5pY2F0aW9uLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxNDhBMDUz
MUU2Rjg1QjYwMEQzQjMxNiAvKiBpT1NMYXlvdXRUZXN0Q29tbXVuaWNhdGlvbi5jcHAgKi87IH07
CiAJCTUxMDU4QUQ1MUQ2Nzg4MjAwMDlBNTM4QyAvKiBsaWJXZWJDb3JlVGVzdFN1cHBvcnQuZHls
aWIgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MTIz
MEUxNjEzOEM3OEJGMDBCQ0NGQ0EgLyogbGliV2ViQ29yZVRlc3RTdXBwb3J0LmR5bGliICovOyB9
OwogCQk1MTA1OEFENjFENjc4ODI1MDA5QTUzOEMgLyogV2ViS2l0LmZyYW1ld29yayBpbiBGcmFt
ZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNTE2OUNBMTQ0NTIy
MkQwMEUwQTlENyAvKiBXZWJLaXQuZnJhbWV3b3JrICovOyB9OwogCQk1NjQxRTJEMDE0MzM1RTk1
MDA4MzA3RTUgLyogSlNUZXh0SW5wdXRDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU2NDFFMkNFMTQzMzVFOTUwMDgzMDdFNSAvKiBK
U1RleHRJbnB1dENvbnRyb2xsZXIuY3BwICovOyB9OwpAQCAtMjUyLDYgKzI1Myw4IEBACiAJCTJF
RTUyRDE0MTg5MEE5RkIwMDEwRUQyMSAvKiBUZXN0Q29udHJvbGxlcklPUy5tbSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFRlc3RDb250cm9sbGVySU9TLm1tOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRUU1MkQxNjE4OTBBOUZCMDAxMEVEMjEgLyogbWFp
bklPUy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IG1haW5JT1Mu
bW07IHBhdGggPSAuLi9pb3MvbWFpbklPUy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMzExMEJFMEYxNUJBMDExNDAwRDIxNkFDIC8qIFdlYk5vdGlmaWNhdGlvblByb3ZpZGVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFdlYk5vdGlmaWNhdGlvblByb3ZpZGVyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTMxNDhBMDUzMUU2Rjg1QjYwMEQzQjMxNiAvKiBpT1NMYXlvdXRUZXN0
Q29tbXVuaWNhdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBp
T1NMYXlvdXRUZXN0Q29tbXVuaWNhdGlvbi5jcHA7IHBhdGggPSAuLi9UZXN0UnVubmVyU2hhcmVk
L2lPU0xheW91dFRlc3RDb21tdW5pY2F0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMzE0OEEwNTQxRTZGODVCNjAwRDNCMzE2IC8qIGlPU0xheW91dFRlc3RDb21tdW5pY2F0
aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IGlPU0xheW91dFRlc3RDb21t
dW5pY2F0aW9uLmg7IHBhdGggPSAuLi9UZXN0UnVubmVyU2hhcmVkL2lPU0xheW91dFRlc3RDb21t
dW5pY2F0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxNjRDOEVGMTVEMUFE
QTEwMEVGMUZFMCAvKiBXZWJOb3RpZmljYXRpb25Qcm92aWRlci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJOb3RpZmljYXRpb25Qcm92aWRlci5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3OEQ0NDIyMTMzNDZEMDAwMDZBNzc3QiAvKiBjb25m
aWcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gY29uZmlnLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTQxMjMwRTE2MTM4Qzc4QkYwMEJDQ0ZDQSAvKiBsaWJXZWJDb3JlVGVzdFN1cHBvcnQuZHls
aWIgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSAiY29t
cGlsZWQubWFjaC1vLmR5bGliIjsgcGF0aCA9IGxpYldlYkNvcmVUZXN0U3VwcG9ydC5keWxpYjsg
c291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKQEAgLTQ1MCw2ICs0NTMsOCBAQAog
CQkwRjE4RTcxQTFENkJDNEJDMDAyN0U1NDcgLyogVGVzdFJ1bm5lclNoYXJlZCAqLyA9IHsKIAkJ
CWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJMzE0OEEwNTMxRTZGODVCNjAw
RDNCMzE2IC8qIGlPU0xheW91dFRlc3RDb21tdW5pY2F0aW9uLmNwcCAqLywKKwkJCQkzMTQ4QTA1
NDFFNkY4NUI2MDBEM0IzMTYgLyogaU9TTGF5b3V0VGVzdENvbW11bmljYXRpb24uaCAqLywKIAkJ
CQkwRjE4RTcxQjFENkJDNEU2MDAyN0U1NDcgLyogQmluZGluZ3MgKi8sCiAJCQkJMEY3M0I1NDcx
QkE3ODJGRTAwNEIzRUY0IC8qIFVJU2NyaXB0Q29udGV4dCAqLywKIAkJCSk7CkBAIC05NzAsNiAr
OTc1LDcgQEAKIAkJCQlBMTg1MTA0MDFCOUFFMTMxMDA3NDRBRUIgLyogUGl4ZWxEdW1wU3VwcG9y
dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBMTg1MTA0MTFCOUFFMTM4MDA3NDRBRUIgLyogVGVz
dENvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTE4NTEwM0IxQjlBRTBFMjAwNzQ0
QUVCIC8qIFRlc3RDb250cm9sbGVyQ29jb2EubW0gaW4gU291cmNlcyAqLywKKwkJCQkzMURBOEEz
RDFFNzIwNUNDMDBFMURGMkYgLyogaU9TTGF5b3V0VGVzdENvbW11bmljYXRpb24uY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQTE4NTEwNDIxQjlBRTEzRTAwNzQ0QUVCIC8qIFRlc3RJbnZvY2F0aW9u
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUExODUxMDNEMUI5QUUxMDYwMDc0NEFFQiAvKiBUZXN0
SW52b2NhdGlvbkNHLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNjIyQ0U5MUJCQjNBMUEwMDgz
OEFEMyAvKiBUZXN0T3B0aW9ucy5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFRvb2xzL1dlYktp
dFRlc3RSdW5uZXIvaW9zL1Rlc3RDb250cm9sbGVySU9TLm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L1dlYktpdFRlc3RSdW5uZXIvaW9zL1Rlc3RDb250cm9sbGVySU9TLm1tCShyZXZpc2lvbiAyMTM2
NTYpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL2lvcy9UZXN0Q29udHJvbGxlcklPUy5tbQko
d29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2ltcG9ydCAiVGVzdEludm9jYXRpb24u
aCIKICNpbXBvcnQgIlRlc3RSdW5uZXJXS1dlYlZpZXcuaCIKICNpbXBvcnQgIlVJS2l0U1BJLmgi
CisjaW1wb3J0ICJpT1NMYXlvdXRUZXN0Q29tbXVuaWNhdGlvbi5oIgogI2ltcG9ydCA8Rm91bmRh
dGlvbi9Gb3VuZGF0aW9uLmg+CiAjaW1wb3J0IDxVSUtpdC9VSUtpdC5oPgogI2ltcG9ydCA8V2Vi
S2l0L1dLUHJlZmVyZW5jZXNSZWZQcml2YXRlLmg+CkBAIC00OSwyMSArNTAsMTIgQEAgdm9pZCBU
ZXN0Q29udHJvbGxlcjo6bm90aWZ5RG9uZSgpCiAKIHZvaWQgVGVzdENvbnRyb2xsZXI6OnBsYXRm
b3JtSW5pdGlhbGl6ZSgpCiB7Ci0gICAgY29uc3QgY2hhciogaWRlbnRpZmllciA9IGdldGVudigi
SVBDX0lERU5USUZJRVIiKTsKLSAgICBjb25zdCBjaGFyICpzdGRpblBhdGggPSBbW05TU3RyaW5n
IHN0cmluZ1dpdGhGb3JtYXQ6QCIvdG1wLyVzX0lOIiwgaWRlbnRpZmllcl0gVVRGOFN0cmluZ107
Ci0gICAgY29uc3QgY2hhciAqc3Rkb3V0UGF0aCA9IFtbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1h
dDpAIi90bXAvJXNfT1VUIiwgaWRlbnRpZmllcl0gVVRGOFN0cmluZ107Ci0gICAgY29uc3QgY2hh
ciAqc3RkZXJyUGF0aCA9IFtbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIi90bXAvJXNfRVJS
T1IiLCBpZGVudGlmaWVyXSBVVEY4U3RyaW5nXTsKLQotICAgIGludCBpbmZkID0gb3BlbihzdGRp
blBhdGgsIE9fUkRXUik7Ci0gICAgZHVwMihpbmZkLCBTVERJTl9GSUxFTk8pOwotICAgIGludCBv
dXRmZCA9IG9wZW4oc3Rkb3V0UGF0aCwgT19SRFdSKTsKLSAgICBkdXAyKG91dGZkLCBTVERPVVRf
RklMRU5PKTsKLSAgICBpbnQgZXJyZmQgPSBvcGVuKHN0ZGVyclBhdGgsIE9fUkRXUiB8IE9fTk9O
QkxPQ0spOwotICAgIGR1cDIoZXJyZmQsIFNUREVSUl9GSUxFTk8pOworICAgIHNldHVwaU9TTGF5
b3V0VGVzdENvbW11bmljYXRpb24oKTsKIH0KIAogdm9pZCBUZXN0Q29udHJvbGxlcjo6cGxhdGZv
cm1EZXN0cm95KCkKIHsKKyAgICB0ZWFyZG93bmlPU0xheW91dFRlc3RDb21tdW5pY2F0aW9uKCk7
CiB9CiAKIHZvaWQgVGVzdENvbnRyb2xsZXI6OmluaXRpYWxpemVJbmplY3RlZEJ1bmRsZVBhdGgo
KQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>304510</attachid>
            <date>2017-03-15 10:07:32 -0700</date>
            <delta_ts>2017-03-16 11:10:53 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-169419-20170315100731.patch</filename>
            <type>text/plain</type>
            <size>27315</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIxMzk4MykKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDQ3IEBACisyMDE3LTAzLTE1ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICBVc2UgVENQIGluc3RlYWQgb2YgRklGT3MgZm9yIFNpbXVsYXRvci9EZXZp
Y2UgY29tbXVuaWNhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTY5NDE5CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zMDk0OTYxNT4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIER1bXBSZW5kZXJU
cmVlL0R1bXBSZW5kZXJUcmVlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICog
RHVtcFJlbmRlclRyZWUvbWFjL0R1bXBSZW5kZXJUcmVlLm1tOgorICAgICAgICAoZHVtcFJlbmRl
clRyZWUpOiBDYWxsIHNldHVwL3RlYXJkb3duaU9TTGF5b3V0VGVzdENvbW11bmljYXRpb24oKSBp
bnN0ZWFkIG9mIHVzaW5nIEZJRk9zLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9p
b3MucHk6CisgICAgICAgIChJT1NQb3J0LnNldHVwX3Rlc3RfcnVuKTogU2V0dXAgZWFjaCBkZXZp
Y2UuCisgICAgICAgIChJT1NQb3J0LmNsZWFuX3VwX3Rlc3RfcnVuKTogVGVhcmRvd24gZWFjaCBk
ZXZpY2UuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L3NpbXVsYXRvcl9wcm9jZXNz
LnB5OgorICAgICAgICAoU2ltdWxhdG9yUHJvY2Vzcyk6CisgICAgICAgIChTaW11bGF0b3JQcm9j
ZXNzLlJlYWRGaWxlU29ja2V0KTogQWRkIHRvIHdvcmsgYXJvdW5kIHNob3J0Y29taW5ncyBpbiBQ
eXRob24gMuKAmXMgbWFrZWZpbGUuCisgICAgICAgIChTaW11bGF0b3JQcm9jZXNzLlJlYWRGaWxl
U29ja2V0Ll9faW5pdF9fKTogSW5pdGlhbGl6ZSBmaWxlLWxpa2Ugb2JqZWN0IHdpdGggc29ja2V0
LgorICAgICAgICAoU2ltdWxhdG9yUHJvY2Vzcy5SZWFkRmlsZVNvY2tldC5jbG9zZSk6IENsb3Nl
IHNvY2tldCBhbmQgbWFyayBvYmplY3QgYXMgY2xvc2VkLgorICAgICAgICAoU2ltdWxhdG9yUHJv
Y2Vzcy5SZWFkRmlsZVNvY2tldC5maWxlbm8pOiBSZXR1cm4gcmF3IHNvY2tldCBmb3IgdXNlIGlu
IHNlbGVjdC4KKyAgICAgICAgKFNpbXVsYXRvclByb2Nlc3MuUmVhZEZpbGVTb2NrZXQucmVhZCk6
IFJlYWQgZGF0YSBmcm9tIHNvY2tldC4KKyAgICAgICAgKFNpbXVsYXRvclByb2Nlc3MuX19pbml0
X18pOiBQYXNzIFRDUCBwb3J0IG92ZXIgZW52aXJvbm1lbnQsIHJlbW92ZSBGSUZPIG5hbWVzLgor
ICAgICAgICAoU2ltdWxhdG9yUHJvY2Vzcy5fbWFrZV9jb25uZWN0aW9uX2NyZWF0ZV9maWxlKTog
V2FpdCBmb3IgY29ubmVjdGlvbiBmcm9tIHNlcnZlciBhbmQgY3JlYXRlIGFuZCByZXR1cm4KKyAg
ICAgICAgYSBmaWxlLWxpa2Ugb2JqZWN0IGZyb20gdGhlIGluY29taW5nIGNvbm5lY3Rpb24uCisg
ICAgICAgIChTaW11bGF0b3JQcm9jZXNzLl9zdGFydCk6IFVzZSBUQ1AgY29ubmVjdGlvbnMgaW5z
dGVhZCBvZiBGSUZPcy4KKyAgICAgICAgKFNpbXVsYXRvclByb2Nlc3MuX3N0YXJ0LmhhbmRsZXIp
OiBPdXRwdXQgc2VydmVyIHBvcnQgaW4gdGltZW91dCBleGNlcHRpb24uCisgICAgICAgIChTaW11
bGF0b3JQcm9jZXNzLl9yZXNldCk6IERlbGV0ZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRw
eS94Y29kZS9kZXZpY2UucHk6CisgICAgICAgIChEZXZpY2UpOgorICAgICAgICAoRGV2aWNlLl9f
aW5pdF9fKTogSW5pdGlhbGl6ZSB0aGlzIGRldmljZSBpbiBVRElEIHRvIHNvY2tldCBtYXAuCisg
ICAgICAgIChEZXZpY2UucG9ydCk6IFJldHVybiBwb3J0IG9mIHNvY2tldCBhc3NvY2lhdGVkIHdp
dGggdGhpcyBkZXZpY2UuCisgICAgICAgIChEZXZpY2Uuc2VydmVyKTogUmV0dXJuIHNvY2tldCBh
c3NvY2lhdGVkIHdpdGggdGhpcyBkZXZpY2UuCisgICAgICAgIChEZXZpY2Uuc2V0dXApOiBPcGVu
IHNlcnZlciBzb2NrZXQgb24gYW4gb3BlbiBwb3J0LgorICAgICAgICAoRGV2aWNlLnRlYXJkb3du
KTogQ2xvc2Ugc2VydmVyIHNvY2tldCBhc3NvY2lhdGVkIHdpdGggdGhpcyBkZXZpY2UuCisgICAg
ICAgICogVGVzdFJ1bm5lclNoYXJlZC9pT1NMYXlvdXRUZXN0Q29tbXVuaWNhdGlvbi5jcHA6IEFk
ZGVkLgorICAgICAgICAoY29ubmVjdFRvU2VydmVyKTogUmV0dXJuIHNvY2tldCBjb25uZWN0ZWQg
dG8gdGhlIHByb3ZpZGVkIHNlcnZlciBhZGRyZXNzLgorICAgICAgICAoc2V0dXBpT1NMYXlvdXRU
ZXN0Q29tbXVuaWNhdGlvbik6IENvbm5lY3Qgc3RkaW4sIHN0ZG91dCBhbmQgc3RkZXJyIGFzIHNv
Y2tldCB0byBhIFRDUCBzZXJ2ZXIgcnVubmluZyBvbiBsb2NhbGhvc3QuCisgICAgICAgICh0ZWFy
ZG93bmlPU0xheW91dFRlc3RDb21tdW5pY2F0aW9uKTogQ2xvc2Ugc3RkaW4sIHN0ZG91dCBhbmQg
c3RkZXJyIFRDUCBzb2NrZXRzLgorICAgICAgICAqIFRlc3RSdW5uZXJTaGFyZWQvaU9TTGF5b3V0
VGVzdENvbW11bmljYXRpb24uaDogQWRkZWQuCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9X
ZWJLaXRUZXN0UnVubmVyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogV2Vi
S2l0VGVzdFJ1bm5lci9pb3MvVGVzdENvbnRyb2xsZXJJT1MubW06CisgICAgICAgIChXVFI6OlRl
c3RDb250cm9sbGVyOjpwbGF0Zm9ybUluaXRpYWxpemUpOiBDYWxsIHNldHVwaU9TTGF5b3V0VGVz
dENvbW11bmljYXRpb24oKSBpbnN0ZWFkIG9mIHVzaW5nIEZJRk9zLgorICAgICAgICAoV1RSOjpU
ZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1EZXN0cm95KTogQ2FsbCB0ZWFyZG93bmlPU0xheW91dFRl
c3RDb21tdW5pY2F0aW9uKCkuCisKIDIwMTctMDMtMTQgIEFha2FzaCBKYWluICA8YWFrYXNoX2ph
aW5AYXBwbGUuY29tPgogCiAgICAgICAgIHN0YXJ0LXF1ZXVlLW1hYy5zaCBzaG91bGQgY3JlYXRl
IGxvZ3MgZGlyZWN0b3J5IGlmIGl0IGRvZXNuJ3QgZXhpc3QKSW5kZXg6IFRvb2xzL0R1bXBSZW5k
ZXJUcmVlL0R1bXBSZW5kZXJUcmVlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkocmV2aXNpb24gMjEzOTgxKQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvRHVt
cFJlbmRlclRyZWUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAt
ODAsNiArODAsNyBAQAogCQkyRDQwM0YxQjE1MDg3MjA5MDA1MzU4RDIgLyogTGF5b3V0VGVzdEhl
bHBlci5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkQ0
MDNFQTIxNTA4NzE0MjAwNTM1OEQyIC8qIExheW91dFRlc3RIZWxwZXIubSAqLzsgfTsKIAkJMkRB
MkUzQTUxRTFCQTU0MTAwQTNCQkQwIC8qIER1bXBSZW5kZXJUcmVlU3BlbGxDaGVja2VyLm1tIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkRBMkUzQTQxRTFC
QTU0MTAwQTNCQkQwIC8qIER1bXBSZW5kZXJUcmVlU3BlbGxDaGVja2VyLm1tICovOyB9OwogCQkz
MTExN0IzRDE1RDlBNTZBMDAxNjNCQzggLyogTW9ja1dlYk5vdGlmaWNhdGlvblByb3ZpZGVyLm1t
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzExMTdCM0Ix
NUQ5QTU2QTAwMTYzQkM4IC8qIE1vY2tXZWJOb3RpZmljYXRpb25Qcm92aWRlci5tbSAqLzsgfTsK
KwkJMzEyOTQzRjkxRTcxRjJCNDAwMUVFMkNDIC8qIGlPU0xheW91dFRlc3RDb21tdW5pY2F0aW9u
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxNDhB
MDU1MUU2RjkwRjQwMEQzQjMxNiAvKiBpT1NMYXlvdXRUZXN0Q29tbXVuaWNhdGlvbi5jcHAgKi87
IH07CiAJCTQ0NjRDQUJFMUMyMEEwOEIwMEU1QkI1NSAvKiBEdW1wUmVuZGVyVHJlZUFwcE1haW4u
bW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NDY0Q0FC
RDFDMjBBMDcwMDBFNUJCNTUgLyogRHVtcFJlbmRlclRyZWVBcHBNYWluLm1tICovOyB9OwogCQk0
QUQ2QTExNDEzQzgxMjQwMDBFQTk3MzcgLyogRm9ybVZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRBRDZBMTEzMTNDODEyNDAwMEVBOTczNyAv
KiBGb3JtVmFsdWUuY3BwICovOyB9OwogCQk1MTA2ODAzRTE1Q0M3QjEwMDAxQThBMjMgLyogU2xv
d05QUE5ldy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1MTA2ODAzRDE1Q0M3QjEwMDAxQThBMjMgLyogU2xvd05QUE5ldy5jcHAgKi87IH07CkBAIC0y
OTQsNiArMjk1LDggQEAKIAkJMkRBMkUzQTQxRTFCQTU0MTAwQTNCQkQwIC8qIER1bXBSZW5kZXJU
cmVlU3BlbGxDaGVja2VyLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1l
ID0gRHVtcFJlbmRlclRyZWVTcGVsbENoZWNrZXIubW07IHBhdGggPSBtYWMvRHVtcFJlbmRlclRy
ZWVTcGVsbENoZWNrZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxMTE3QjNB
MTVEOUE1NkEwMDE2M0JDOCAvKiBNb2NrV2ViTm90aWZpY2F0aW9uUHJvdmlkZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTW9ja1dlYk5vdGlmaWNhdGlvblByb3ZpZGVyLmg7
IHBhdGggPSBtYWMvTW9ja1dlYk5vdGlmaWNhdGlvblByb3ZpZGVyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTMxMTE3QjNCMTVEOUE1NkEwMDE2M0JDOCAvKiBNb2NrV2ViTm90aWZp
Y2F0aW9uUHJvdmlkZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUg
PSBNb2NrV2ViTm90aWZpY2F0aW9uUHJvdmlkZXIubW07IHBhdGggPSBtYWMvTW9ja1dlYk5vdGlm
aWNhdGlvblByb3ZpZGVyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTQ4QTA1
NTFFNkY5MEY0MDBEM0IzMTYgLyogaU9TTGF5b3V0VGVzdENvbW11bmljYXRpb24uY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gaU9TTGF5b3V0VGVzdENvbW11bmljYXRp
b24uY3BwOyBwYXRoID0gLi4vVGVzdFJ1bm5lclNoYXJlZC9pT1NMYXlvdXRUZXN0Q29tbXVuaWNh
dGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxNDhBMDU2MUU2RjkwRjQw
MEQzQjMxNiAvKiBpT1NMYXlvdXRUZXN0Q29tbXVuaWNhdGlvbi5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBpT1NMYXlvdXRUZXN0Q29tbXVuaWNhdGlvbi5oOyBwYXRoID0gLi4v
VGVzdFJ1bm5lclNoYXJlZC9pT1NMYXlvdXRUZXN0Q29tbXVuaWNhdGlvbi5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkzMkE3MEFBQjAzNzA1RTFGMDBDOTE3ODMgLyogRHVtcFJlbmRl
clRyZWVQcmVmaXguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRHVtcFJlbmRl
clRyZWVQcmVmaXguaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzc1RjA5NzEwREFD
M0NCNjAwQzhCNEU1IC8qIFdlYktpdFdlaWdodFdhdGNoZXIxMDAudHRmICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gZmlsZTsgbmFtZSA9IFdlYktpdFdl
aWdodFdhdGNoZXIxMDAudHRmOyBwYXRoID0gZm9udHMvV2ViS2l0V2VpZ2h0V2F0Y2hlcjEwMC50
dGY7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3NUYwOTcyMERBQzNDQjYwMEM4QjRF
NSAvKiBXZWJLaXRXZWlnaHRXYXRjaGVyMjAwLnR0ZiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IGZpbGU7IG5hbWUgPSBXZWJLaXRXZWlnaHRXYXRjaGVy
MjAwLnR0ZjsgcGF0aCA9IGZvbnRzL1dlYktpdFdlaWdodFdhdGNoZXIyMDAudHRmOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDcyLDYgKzQ3NSw3IEBACiAJCQlpc2EgPSBQQlhHcm91
cDsKIAkJCWNoaWxkcmVuID0gKAogCQkJCTBGMThFNkYxMUQ2QjlDNjQwMDI3RTU0NyAvKiBEZXJp
dmVkU291cmNlcy5tYWtlICovLAorCQkJCTMxNDhBMDY1MUU2RjkwRjQwMEQzQjMxNiAvKiBUZXN0
UnVubmVyU2hhcmVkICovLAogCQkJCTBGMThFNkU3MUQ2QjlCRjUwMDI3RTU0NyAvKiBVSVNjcmlw
dENvbnRleHQgKi8sCiAJCQkJQTExNThENkExODkyN0NFMTAwODhDMTdCIC8qIGlvcyAqLywKIAkJ
CQlBMTM0RTUzNDE4OTA1RTZDMDA5MDFEMDYgLyogY29uZmlnLmggKi8sCkBAIC02OTUsNiArNjk5
LDE2IEBACiAJCQluYW1lID0gTGF5b3V0VGVzdEhlbHBlcjsKIAkJCXNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7CiAJCX07CisJCTMxNDhBMDY1MUU2RjkwRjQwMEQzQjMxNiAvKiBUZXN0UnVubmVyU2hh
cmVkICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQkzMTQ4
QTA1NTFFNkY5MEY0MDBEM0IzMTYgLyogaU9TTGF5b3V0VGVzdENvbW11bmljYXRpb24uY3BwICov
LAorCQkJCTMxNDhBMDU2MUU2RjkwRjQwMEQzQjMxNiAvKiBpT1NMYXlvdXRUZXN0Q29tbXVuaWNh
dGlvbi5oICovLAorCQkJKTsKKwkJCW5hbWUgPSBUZXN0UnVubmVyU2hhcmVkOworCQkJcGF0aCA9
IC4uL1dlYktpdFRlc3RSdW5uZXI7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9Owog
CQk0MTdEQTkxODEzNzM2NzREMDA3QzU3RkIgLyogV2ViQ29yZVRlc3RTdXBwb3J0ICovID0gewog
CQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKQEAgLTExNDUsNiArMTE1OSw3IEBA
CiAJCQkJN0NCQkMzMjMxRERGQ0Y5QTAwNzg2QjlEIC8qIFRlc3RPcHRpb25zLm1tIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEYxOEU3MEYxRDZCQUNCNjAwMjdFNTQ3IC8qIFVJU2NyaXB0Q29udHJvbGxl
ck1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUJDOUQ5MDI0MEM5NzQ3MkUwMDk5QTRBMyAvKiBX
b3JrUXVldWUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMzEyOTQzRjkxRTcxRjJCNDAwMUVFMkND
IC8qIGlPU0xheW91dFRlc3RDb21tdW5pY2F0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJD
QTE4QjI2MEM5QjAxNUMwMDExNDM2OSAvKiBXb3JrUXVldWVJdGVtTWFjLm1tIGluIFNvdXJjZXMg
Ki8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7Cklu
ZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRyZWUubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0R1bXBSZW5kZXJUcmVlLm1tCShyZXZpc2lv
biAyMTM5ODEpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRyZWUubW0J
KHdvcmtpbmcgY29weSkKQEAgLTEwNCw2ICsxMDQsNyBAQAogI2lmIFBMQVRGT1JNKElPUykKICNp
bXBvcnQgIkR1bXBSZW5kZXJUcmVlQnJvd3NlclZpZXcuaCIKICNpbXBvcnQgIlVJS2l0U1BJLmgi
CisjaW1wb3J0ICJpT1NMYXlvdXRUZXN0Q29tbXVuaWNhdGlvbi5oIgogI2ltcG9ydCA8UXVhcnR6
Q29yZS9RdWFydHpDb3JlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0NvcmVHcmFwaGljc1NQSS5oPgog
I2ltcG9ydCA8V2ViS2l0L1dBS1dpbmRvdy5oPgpAQCAtMTIzNSwxNyArMTIzNiw3IEBAIHZvaWQg
d3JpdGVDcmFzaGVkTWVzc2FnZU9uRmF0YWxFcnJvcihpbnQKIHZvaWQgZHVtcFJlbmRlclRyZWUo
aW50IGFyZ2MsIGNvbnN0IGNoYXIgKmFyZ3ZbXSkKIHsKICNpZiBQTEFURk9STShJT1MpCi0gICAg
Y29uc3QgY2hhciogaWRlbnRpZmllciA9IGdldGVudigiSVBDX0lERU5USUZJRVIiKTsKLSAgICBj
b25zdCBjaGFyICpzdGRpblBhdGggPSBbW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIvdG1w
LyVzX0lOIiwgaWRlbnRpZmllcl0gVVRGOFN0cmluZ107Ci0gICAgY29uc3QgY2hhciAqc3Rkb3V0
UGF0aCA9IFtbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIi90bXAvJXNfT1VUIiwgaWRlbnRp
Zmllcl0gVVRGOFN0cmluZ107Ci0gICAgY29uc3QgY2hhciAqc3RkZXJyUGF0aCA9IFtbTlNTdHJp
bmcgc3RyaW5nV2l0aEZvcm1hdDpAIi90bXAvJXNfRVJST1IiLCBpZGVudGlmaWVyXSBVVEY4U3Ry
aW5nXTsKLQotICAgIGludCBpbmZkID0gb3BlbihzdGRpblBhdGgsIE9fUkRXUik7Ci0gICAgZHVw
MihpbmZkLCBTVERJTl9GSUxFTk8pOwotICAgIGludCBvdXRmZCA9IG9wZW4oc3Rkb3V0UGF0aCwg
T19SRFdSKTsKLSAgICBkdXAyKG91dGZkLCBTVERPVVRfRklMRU5PKTsKLSAgICBpbnQgZXJyZmQg
PSBvcGVuKHN0ZGVyclBhdGgsIE9fUkRXUiB8IE9fTk9OQkxPQ0spOwotICAgIGR1cDIoZXJyZmQs
IFNUREVSUl9GSUxFTk8pOworICAgIHNldHVwaU9TTGF5b3V0VGVzdENvbW11bmljYXRpb24oKTsK
ICNlbmRpZgogCiAgICAgc2lnbmFsKFNJR0lMTCwgJndyaXRlQ3Jhc2hlZE1lc3NhZ2VPbkZhdGFs
RXJyb3IpOwpAQCAtMTMwNiw5ICsxMjk3LDcgQEAgdm9pZCBkdW1wUmVuZGVyVHJlZShpbnQgYXJn
YywgY29uc3QgY2hhcgogICAgIH0KIAogI2lmIFBMQVRGT1JNKElPUykKLSAgICBjbG9zZShpbmZk
KTsKLSAgICBjbG9zZShvdXRmZCk7Ci0gICAgY2xvc2UoZXJyZmQpOworICAgIHRlYXJkb3duaU9T
TGF5b3V0VGVzdENvbW11bmljYXRpb24oKTsKICNlbmRpZgogfQogCkluZGV4OiBUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L3BvcnQvaW9zLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvcG9ydC9pb3MucHkJKHJldmlzaW9uIDIxMzk4MSkKKysrIFRvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvcG9ydC9pb3MucHkJKHdvcmtpbmcgY29weSkKQEAgLTkxLDMgKzkxLDEyIEBAIGNsYXNz
IElPU1BvcnQoRGFyd2luUG9ydCk6CiAgICAgICAgICAgICAjIGNyYXNoLCBidXQgdGhpcyBjcmFz
aCB3aWxsIG9jY3VyIHBvc3QtbGF1bmNoLCBhZnRlciBpbnN0YWxsX2FwcCBoYXMgYWxyZWFkeSBr
aWxsZWQgdGhlIHByb2Nlc3MuCiAgICAgICAgICAgICBpZiBub3QgZGV2aWNlLmluc3RhbGxfYXBw
KHNlbGYuX3BhdGhfdG9fZHJpdmVyKCksIHsnRFlMRF9MSUJSQVJZX1BBVEgnOiBzZWxmLl9idWls
ZF9wYXRoKCl9KToKICAgICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ0ZhaWxlZCB0
byBpbnN0YWxsIGFwcCB7fSBvbiBkZXZpY2Uge30nLmZvcm1hdChzZWxmLl9wYXRoX3RvX2RyaXZl
cigpLCBkZXZpY2UudWRpZCkpCisKKyAgICAgICAgZm9yIGkgaW4geHJhbmdlKHNlbGYuY2hpbGRf
cHJvY2Vzc2VzKCkpOgorICAgICAgICAgICAgc2VsZi5kZXZpY2VfZm9yX3dvcmtlcl9udW1iZXIo
aSkuc2V0dXAoKQorCisgICAgICAgIGRlZiBjbGVhbl91cF90ZXN0X3J1bihzZWxmKToKKyAgICAg
ICAgICAgIHN1cGVyKElPU1BvcnQsIHNlbGYpLmNsZWFuX3VwX3Rlc3RfcnVuKCkKKworICAgICAg
ICAgICAgZm9yIGkgaW4geHJhbmdlKHNlbGYuY2hpbGRfcHJvY2Vzc2VzKCkpOgorICAgICAgICAg
ICAgICAgIHNlbGYuZGV2aWNlX2Zvcl93b3JrZXJfbnVtYmVyKGkpLnRlYXJkb3duKCkKSW5kZXg6
IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9zaW11bGF0b3JfcHJvY2Vzcy5weQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvc2ltdWxhdG9yX3Byb2Nlc3MucHkJ
KHJldmlzaW9uIDIxMzk4MSkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9zaW11bGF0
b3JfcHJvY2Vzcy5weQkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNiBAQCBpbXBvcnQgc2ln
bmFsCiBpbXBvcnQgdGltZQogCiBmcm9tIHdlYmtpdHB5LnBvcnQuc2VydmVyX3Byb2Nlc3MgaW1w
b3J0IFNlcnZlclByb2Nlc3MKLWZyb20gd2Via2l0cHkueGNvZGUuc2ltdWxhdG9yIGltcG9ydCBT
aW11bGF0b3IKIAogCiBjbGFzcyBTaW11bGF0b3JQcm9jZXNzKFNlcnZlclByb2Nlc3MpOgpAQCAt
NTYsNjQgKzU1LDYyIEBAIGNsYXNzIFNpbXVsYXRvclByb2Nlc3MoU2VydmVyUHJvY2Vzcyk6CiAg
ICAgICAgICAgICAgICAgdGltZS5zbGVlcCgwLjAxKSAgIyBJbiBzZWNvbmRzCiAgICAgICAgICAg
ICByZXR1cm4gc2VsZi5yZXR1cm5jb2RlCiAKKyAgICAjIFB5dGhvbiAyJ3MgaW1wbGVtZW50YXRp
b24gb2YgbWFrZWZpbGUgYmxvY2tzIG9uIHJlYWQgaWYgdGhlCisgICAgIyBzb2NrZXQgaXMgb3Bl
bi4gSW1wbGVtZW50IHRoZSBzbWFsbCBzdWJzZXQgb2YgY29tbWFuZHMgd2UgbmVlZC4KKyAgICBj
bGFzcyBSZWFkRmlsZVNvY2tldChvYmplY3QpOgorCisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxm
LCBzb2NrKToKKyAgICAgICAgICAgIHNlbGYuc29ja2V0ID0gc29jaworICAgICAgICAgICAgc2Vs
Zi5jbG9zZWQgPSBub3Qgc2VsZi5zb2NrZXQKKworICAgICAgICBkZWYgY2xvc2Uoc2VsZik6Cisg
ICAgICAgICAgICBzZWxmLmNsb3NlZCA9IFRydWUKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnNv
Y2tldC5jbG9zZSgpCisKKyAgICAgICAgIyBUaGlzIGlzIHVzZWQgaW4gc2VsZWN0CisgICAgICAg
IGRlZiBmaWxlbm8oc2VsZik6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5zb2NrZXQKKworICAg
ICAgICBkZWYgcmVhZChzZWxmKToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnNvY2tldC5yZWN2
KDEwMjQpCisKICAgICBkZWYgX19pbml0X18oc2VsZiwgcG9ydF9vYmosIG5hbWUsIGNtZCwgZW52
PU5vbmUsIHVuaXZlcnNhbF9uZXdsaW5lcz1GYWxzZSwgdHJlYXRfbm9fZGF0YV9hc19jcmFzaD1G
YWxzZSwgd29ya2VyX251bWJlcj1Ob25lKToKICAgICAgICAgc2VsZi5fYnVuZGxlX2lkID0gcG9y
dF9vYmouYXBwX2lkZW50aWZpZXJfZnJvbV9idW5kbGUoY21kWzBdKQogICAgICAgICBzZWxmLl9k
ZXZpY2UgPSBwb3J0X29iai5kZXZpY2VfZm9yX3dvcmtlcl9udW1iZXIod29ya2VyX251bWJlcikK
LSAgICAgICAgZW52WydJUENfSURFTlRJRklFUiddID0gc2VsZi5fYnVuZGxlX2lkICsgJy0nICsg
c2VsZi5fZGV2aWNlLnVkaWQKLQotICAgICAgICAjIFRoaXMgbG9jYXRpb24gbWF0Y2hlcyB0aGUg
bG9jYXRpb24gdXNlZCBieSBXZWJLaXRUZXN0UnVubmVyIGFuZCBEdW1wUmVuZGVyVHJlZQotICAg
ICAgICAjIGZvciB0aGUgb3RoZXIgc2lkZSBvZiB0aGVzZSBmaWZvcy4KLSAgICAgICAgZmlsZV9s
b2NhdGlvbiA9ICcvdG1wLycgKyBlbnZbJ0lQQ19JREVOVElGSUVSJ10KLSAgICAgICAgc2VsZi5f
aW5fcGF0aCA9IGZpbGVfbG9jYXRpb24gKyAnX0lOJwotICAgICAgICBzZWxmLl9vdXRfcGF0aCA9
IGZpbGVfbG9jYXRpb24gKyAnX09VVCcKLSAgICAgICAgc2VsZi5fZXJyb3JfcGF0aCA9IGZpbGVf
bG9jYXRpb24gKyAnX0VSUk9SJwogCisgICAgICAgIGVudlsnUE9SVCddID0gc3RyKHNlbGYuX2Rl
dmljZS5wb3J0KCkpCiAgICAgICAgIHN1cGVyKFNpbXVsYXRvclByb2Nlc3MsIHNlbGYpLl9faW5p
dF9fKHBvcnRfb2JqLCBuYW1lLCBjbWQsIGVudiwgdW5pdmVyc2FsX25ld2xpbmVzLCB0cmVhdF9u
b19kYXRhX2FzX2NyYXNoKQogCi0gICAgZGVmIF9yZXNldChzZWxmKToKLSAgICAgICAgc3VwZXIo
U2ltdWxhdG9yUHJvY2Vzcywgc2VsZikuX3Jlc2V0KCkKLQotICAgICAgICAjIFVubGlua3MgYXJl
IG5lZWRlZCBvbiByZXNldCBpbiB0aGUgZXZlbnQgdGhhdCB0aGUgUHl0aG9uIGNvZGUgdW5leHBl
Y3RlZGx5Ci0gICAgICAgICMgZmFpbHMgYmV0d2VlbiBfc3RhcnQoKSBhbmQga2lsbCgpLiAgVGhp
cyBjYW4gYmUgY2F1c2VkIGJ5IGEgU0lHS0lMTCBvciBhIGNyYXNoLgotICAgICAgICAjIFRoaXMg
ZW5zdXJlcyB0aGF0IG9zLm1rZmlmbygpIHdpbGwgbm90IGJlIG9ic3RydWN0ZWQgYnkgcHJldmlv
dXMgZmlmb3MuCi0gICAgICAgICMgT3RoZXIgZmlsZXMgd2lsbCBzdGlsbCBjYXVzZSBvcy5ta2Zp
Zm8oKSB0byBmYWlsLgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBvcy51bmxpbmsoc2VsZi5f
aW5fcGF0aCkKLSAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgcGFzcwotICAgICAgICB0cnk6
Ci0gICAgICAgICAgICBvcy51bmxpbmsoc2VsZi5fb3V0X3BhdGgpCi0gICAgICAgIGV4Y2VwdDoK
LSAgICAgICAgICAgIHBhc3MKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgb3MudW5saW5rKHNl
bGYuX2Vycm9yX3BhdGgpCi0gICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgIHBhc3MKKyAgICBA
c3RhdGljbWV0aG9kCisgICAgZGVmIF9tYWtlX2Nvbm5lY3Rpb25fY3JlYXRlX2ZpbGUoc2VydmVy
LCB0eXBlKToKKyAgICAgICAgY29ubmVjdGlvbiwgYWRkcmVzcyA9IHNlcnZlci5hY2NlcHQoKQor
ICAgICAgICBhc3NlcnQgYWRkcmVzc1swXSA9PSAnMTI3LjAuMC4xJworICAgICAgICBpZiAndycg
aW4gdHlwZToKKyAgICAgICAgICAgIHJldHVybiBjb25uZWN0aW9uLm1ha2VmaWxlKHR5cGUsIDAp
CisgICAgICAgIHJldHVybiBTaW11bGF0b3JQcm9jZXNzLlJlYWRGaWxlU29ja2V0KGNvbm5lY3Rp
b24pCiAKICAgICBkZWYgX3N0YXJ0KHNlbGYpOgogICAgICAgICBpZiBzZWxmLl9wcm9jOgogICAg
ICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigne30gYWxyZWFkeSBydW5uaW5nJy5mb3JtYXQoc2Vs
Zi5fbmFtZSkpCiAgICAgICAgIHNlbGYuX3Jlc2V0KCkKIAotICAgICAgICBGSUZPX1BFUk1JU1NJ
T05fRkxBR1MgPSAwNjAwICAjIE9ubHkgb3duZXIgY2FuIHJlYWQgYW5kIHdyaXRlCi0gICAgICAg
IG9zLm1rZmlmbyhzZWxmLl9pbl9wYXRoLCBGSUZPX1BFUk1JU1NJT05fRkxBR1MpCi0gICAgICAg
IG9zLm1rZmlmbyhzZWxmLl9vdXRfcGF0aCwgRklGT19QRVJNSVNTSU9OX0ZMQUdTKQotICAgICAg
ICBvcy5ta2ZpZm8oc2VsZi5fZXJyb3JfcGF0aCwgRklGT19QRVJNSVNTSU9OX0ZMQUdTKQotCi0g
ICAgICAgIHN0ZG91dCA9IG9zLmZkb3Blbihvcy5vcGVuKHNlbGYuX291dF9wYXRoLCBvcy5PX1JE
T05MWSB8IG9zLk9fTk9OQkxPQ0spLCAncmInKQotICAgICAgICBzdGRlcnIgPSBvcy5mZG9wZW4o
b3Mub3BlbihzZWxmLl9lcnJvcl9wYXRoLCBvcy5PX1JET05MWSB8IG9zLk9fTk9OQkxPQ0spLCAn
cmInKQotCisgICAgICAgIHNlbGYuX2RldmljZS5zZXJ2ZXIoKS5saXN0ZW4oMykKICAgICAgICAg
c2VsZi5fcGlkID0gc2VsZi5fZGV2aWNlLmxhdW5jaF9hcHAoc2VsZi5fYnVuZGxlX2lkLCBzZWxm
Ll9jbWRbMTpdLCBlbnY9c2VsZi5fZW52KQogCiAgICAgICAgIGRlZiBoYW5kbGVyKHNpZ251bSwg
ZnJhbWUpOgogICAgICAgICAgICAgYXNzZXJ0IHNpZ251bSA9PSBzaWduYWwuU0lHQUxSTQotICAg
ICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCdUaW1lZCBvdXQgd2FpdGluZyBmb3IgcHJvY2VzcyB0
byBvcGVuIHt9Jy5mb3JtYXQoc2VsZi5faW5fcGF0aCkpCisgICAgICAgICAgICByYWlzZSBFeGNl
cHRpb24oJ1RpbWVkIG91dCB3YWl0aW5nIGZvciBwcm9jZXNzIHRvIGNvbm5lY3QgYXQgcG9ydCB7
fScuZm9ybWF0KHNlbGYuX2RldmljZS5wb3J0KCkpKQogICAgICAgICBzaWduYWwuc2lnbmFsKHNp
Z25hbC5TSUdBTFJNLCBoYW5kbGVyKQogICAgICAgICBzaWduYWwuYWxhcm0oMykgICMgSW4gc2Vj
b25kcwogCiAgICAgICAgIHN0ZGluID0gTm9uZQorICAgICAgICBzdGRvdXQgPSBOb25lCisgICAg
ICAgIHN0ZGVyciA9IE5vbmUKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgc3RkaW4gPSBvcGVu
KHNlbGYuX2luX3BhdGgsICd3JywgMCkgICMgT3BlbmluZyB3aXRoIG5vIGJ1ZmZlcmluZywgbGlr
ZSBwb3BlbgorICAgICAgICAgICAgIyBPcmRlciBtYXR0ZXJzIGhlcmUhCisgICAgICAgICAgICBz
dGRpbiA9IFNpbXVsYXRvclByb2Nlc3MuX21ha2VfY29ubmVjdGlvbl9jcmVhdGVfZmlsZShzZWxm
Ll9kZXZpY2Uuc2VydmVyKCksICd3JykKKyAgICAgICAgICAgIHN0ZG91dCA9IFNpbXVsYXRvclBy
b2Nlc3MuX21ha2VfY29ubmVjdGlvbl9jcmVhdGVfZmlsZShzZWxmLl9kZXZpY2Uuc2VydmVyKCks
ICdyYicpCisgICAgICAgICAgICBzdGRlcnIgPSBTaW11bGF0b3JQcm9jZXNzLl9tYWtlX2Nvbm5l
Y3Rpb25fY3JlYXRlX2ZpbGUoc2VsZi5fZGV2aWNlLnNlcnZlcigpLCAncmInKQogICAgICAgICBl
eGNlcHQ6CiAgICAgICAgICAgICAjIFdlIHNldCBzZWxmLl9wcm9jIGFzIF9yZXNldCgpIGFuZCBf
a2lsbCgpIGRlcGVuZCBvbiBpdC4KICAgICAgICAgICAgIHNlbGYuX3Byb2MgPSBTaW11bGF0b3JQ
cm9jZXNzLlBvcGVuKHNlbGYuX3BpZCwgc3RkaW4sIHN0ZG91dCwgc3RkZXJyKQpJbmRleDogVG9v
bHMvU2NyaXB0cy93ZWJraXRweS94Y29kZS9kZXZpY2UucHkKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
U2NyaXB0cy93ZWJraXRweS94Y29kZS9kZXZpY2UucHkJKHJldmlzaW9uIDIxMzk4MSkKKysrIFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkveGNvZGUvZGV2aWNlLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0y
MCwxMiArMjAsNDQgQEAKICMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKICMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAKK2ltcG9ydCBz
b2NrZXQKKworZnJvbSByYW5kb20gaW1wb3J0IHJhbmRpbnQKIAogY2xhc3MgRGV2aWNlKG9iamVj
dCk6CisKKyAgICBQT1JUX1JBTkdFID0gWzUwMDAsIDEwMDAwXQorICAgIEZPUldBUkRfUE9SVFMg
PSBbODAwMCwgODA4MCwgODQ0M10KKyAgICBVRElEX1RPX1NPQ0tFVCA9IHt9CisKICAgICBkZWYg
X19pbml0X18oc2VsZiwgbmFtZSwgdWRpZCwgaG9zdCk6CiAgICAgICAgIHNlbGYuX2hvc3QgPSBo
b3N0CiAgICAgICAgIHNlbGYubmFtZSA9IG5hbWUKICAgICAgICAgc2VsZi51ZGlkID0gdWRpZAor
ICAgICAgICBpZiB1ZGlkIG5vdCBpbiBEZXZpY2UuVURJRF9UT19TT0NLRVQ6CisgICAgICAgICAg
ICBEZXZpY2UuVURJRF9UT19TT0NLRVRbdWRpZF0gPSBOb25lCisKKyAgICBkZWYgcG9ydChzZWxm
KToKKyAgICAgICAgaWYgbm90IHNlbGYuc2VydmVyKCk6CisgICAgICAgICAgICByZXR1cm4gTm9u
ZQorICAgICAgICByZXR1cm4gc2VsZi5zZXJ2ZXIoKS5nZXRzb2NrbmFtZSgpWzFdCisKKyAgICBk
ZWYgc2VydmVyKHNlbGYpOgorICAgICAgICByZXR1cm4gRGV2aWNlLlVESURfVE9fU09DS0VUW3Nl
bGYudWRpZF0KKworICAgIGRlZiBzZXR1cChzZWxmKToKKyAgICAgICAgc2VydmVyID0gRGV2aWNl
LlVESURfVE9fU09DS0VUW3NlbGYudWRpZF0KKyAgICAgICAgaWYgbm90IHNlcnZlcjoKKyAgICAg
ICAgICAgIHNlcnZlciA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NL
X1NUUkVBTSkKKyAgICAgICAgICAgIHNlcnZlci5zZXRzb2Nrb3B0KHNvY2tldC5TT0xfU09DS0VU
LCBzb2NrZXQuU09fUkVVU0VBRERSLCAxKQorICAgICAgICAgICAgc2VydmVyLmJpbmQoKCdsb2Nh
bGhvc3QnLCAwKSkKKyAgICAgICAgICAgIERldmljZS5VRElEX1RPX1NPQ0tFVFtzZWxmLnVkaWRd
ID0gc2VydmVyCisKKyAgICAgICAgaWYgbm90IERldmljZS5VRElEX1RPX1NPQ0tFVFtzZWxmLnVk
aWRdOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdObyBvcGVuIHBvcnRzIGZvdW5k
JykKKworICAgIGRlZiB0ZWFyZG93bihzZWxmKToKKyAgICAgICAgRGV2aWNlLlVESURfVE9fU09D
S0VUW3NlbGYudWRpZF0gPSBOb25lCiAKICAgICBkZWYgaW5zdGFsbF9hcHAoc2VsZiwgYXBwX3Bh
dGgsIGVudj1Ob25lKToKICAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgpJbmRleDog
VG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9pT1NMYXlvdXRUZXN0Q29tbXVuaWNhdGlvbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9pT1NMYXlvdXRUZXN0Q29tbXVuaWNh
dGlvbi5jcHAJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9pT1NMYXlv
dXRUZXN0Q29tbXVuaWNhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDIgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiaU9TTGF5b3V0VGVz
dENvbW11bmljYXRpb24uaCIKKworI2lmIFBMQVRGT1JNKElPUykKKworI2luY2x1ZGUgPG5ldGRi
Lmg+CisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNp
bmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworc3RhdGljIGludCBz
dGRpblNvY2tldDsKK3N0YXRpYyBpbnQgc3Rkb3V0U29ja2V0Oworc3RhdGljIGludCBzdGRlcnJT
b2NrZXQ7CisKK3N0YXRpYyBGSUxFKiBzdGRpbkZpbGU7CitzdGF0aWMgRklMRSogc3Rkb3V0Rmls
ZTsKK3N0YXRpYyBGSUxFKiBzdGRlcnJGaWxlOworCitzdGF0aWMgaW50IGNvbm5lY3RUb1NlcnZl
cihzb2NrYWRkcl9pbiYgc2VydmVyQWRkcmVzcykKK3sKKyAgICBpbnQgcmVzdWx0ID0gc29ja2V0
KEFGX0lORVQsIFNPQ0tfU1RSRUFNLCAwKTsKKyAgICBpZiAocmVzdWx0IDwgMCkKKyAgICAgICAg
YWJvcnQoKTsKKyAgICBpZiAoY29ubmVjdChyZXN1bHQsIChzdHJ1Y3Qgc29ja2FkZHIgKikgJnNl
cnZlckFkZHJlc3MsIHNpemVvZihzZXJ2ZXJBZGRyZXNzKSkgPCAwKQorICAgICAgICBhYm9ydCgp
OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgc2V0dXBpT1NMYXlvdXRUZXN0Q29tbXVu
aWNhdGlvbigpCit7CisgICAgaW50IHBvcnQgPSBhdG9pKGdldGVudigiUE9SVCIpKTsKKyAgICBp
ZiAocG9ydCA8PSAwKQorICAgICAgICBhYm9ydCgpOworICAgIAorICAgIHN0cnVjdCBob3N0ZW50
KiBob3N0ID0gZ2V0aG9zdGJ5bmFtZSgibG9jYWxob3N0Iik7CisgICAgc3RydWN0IHNvY2thZGRy
X2luIHNlcnZlckFkZHJlc3M7CisgICAgbWVtc2V0KChjaGFyICopICZzZXJ2ZXJBZGRyZXNzLCAw
LCBzaXplb2Yoc2VydmVyQWRkcmVzcykpOworICAgIHNlcnZlckFkZHJlc3Muc2luX2ZhbWlseSA9
IEFGX0lORVQ7CisgICAgbWVtY3B5KAorICAgICAgICAoY2hhciAqKSZzZXJ2ZXJBZGRyZXNzLnNp
bl9hZGRyLnNfYWRkciwKKyAgICAgICAgKGNoYXIgKilob3N0LT5oX2FkZHIsCisgICAgICAgIGhv
c3QtPmhfbGVuZ3RoKTsKKyAgICBzZXJ2ZXJBZGRyZXNzLnNpbl9wb3J0ID0gaHRvbnMocG9ydCk7
CisgICAgCisgICAgLy8gT3JkZXIgbWF0dGVycyEKKyAgICBzdGRpblNvY2tldCA9IGNvbm5lY3RU
b1NlcnZlcihzZXJ2ZXJBZGRyZXNzKTsKKyAgICBzdGRpbkZpbGUgPSBmZG9wZW4oc3RkaW5Tb2Nr
ZXQsICJyYiIpOworICAgIGR1cDIoZmlsZW5vKHN0ZGluRmlsZSksIFNURElOX0ZJTEVOTyk7Cisg
ICAgCisgICAgc3Rkb3V0U29ja2V0ID0gY29ubmVjdFRvU2VydmVyKHNlcnZlckFkZHJlc3MpOwor
ICAgIHN0ZG91dEZpbGUgPSBmZG9wZW4oc3Rkb3V0U29ja2V0LCAid2IiKTsKKyAgICBkdXAyKGZp
bGVubyhzdGRvdXRGaWxlKSwgU1RET1VUX0ZJTEVOTyk7CisgICAgCisgICAgCisgICAgc3RkZXJy
U29ja2V0ID0gY29ubmVjdFRvU2VydmVyKHNlcnZlckFkZHJlc3MpOworICAgIHN0ZGVyckZpbGUg
PSBmZG9wZW4oc3RkZXJyU29ja2V0LCAid2IiKTsKKyAgICBkdXAyKGZpbGVubyhzdGRlcnJGaWxl
KSwgU1RERVJSX0ZJTEVOTyk7Cit9CisKK3ZvaWQgdGVhcmRvd25pT1NMYXlvdXRUZXN0Q29tbXVu
aWNhdGlvbigpCit7CisgICAgZmNsb3NlKHN0ZGluRmlsZSk7CisgICAgZmNsb3NlKHN0ZG91dEZp
bGUpOworICAgIGZjbG9zZShzdGRlcnJGaWxlKTsKKyAgICAKKyAgICBjbG9zZShzdGRpblNvY2tl
dCk7CisgICAgY2xvc2Uoc3Rkb3V0U29ja2V0KTsKKyAgICBjbG9zZShzdGRlcnJTb2NrZXQpOwor
fQorCisjZWxzZQorCit2b2lkIHNldHVwaU9TTGF5b3V0VGVzdENvbW11bmljYXRpb24oKSB7IH0K
K3ZvaWQgdGVhcmRvd25pT1NMYXlvdXRUZXN0Q29tbXVuaWNhdGlvbigpIHsgfQorCisjZW5kaWYK
SW5kZXg6IFRvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvaU9TTGF5b3V0VGVzdENvbW11bmljYXRpb24u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0UnVubmVyU2hhcmVkL2lPU0xheW91dFRlc3RDb21t
dW5pY2F0aW9uLmgJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9pT1NM
YXlvdXRUZXN0Q29tbXVuaWNhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjkgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKwordm9pZCBzZXR1cGlPU0xheW91dFRlc3RDb21t
dW5pY2F0aW9uKCk7Cit2b2lkIHRlYXJkb3duaU9TTGF5b3V0VGVzdENvbW11bmljYXRpb24oKTsK
SW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvV2ViS2l0VGVzdFJ1bm5lci54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvV2Vi
S2l0VGVzdFJ1bm5lci54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMTM5ODEp
CisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL1dlYktpdFRlc3RSdW5uZXIueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNzMsNiArNzMsNyBAQAogCQkyRTYzRURB
MTE4OTFCMjkxMDAyQTdBRkMgLyogQWNjZXNzaWJpbGl0eVVJRWxlbWVudElPUy5tbSBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFNjNFRDc4MTg5MUFDRTkw
MDJBN0FGQyAvKiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50SU9TLm1tICovOyB9OwogCQkyRTYzRURB
NjE4OTFCREMwMDAyQTdBRkMgLyogVGVzdFJ1bm5lci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0M5OTgxNzExRDNGNTFFMDAxN0JDQTIgLyogVGVz
dFJ1bm5lci5jcHAgKi87IH07CiAJCTJFNzQ5QkYyMTg5MUVCRkEwMDdGQzE3NSAvKiBFdmVudFNl
bmRlclByb3h5SU9TLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMkU2M0VEN0ExODkxQUNFOTAwMkE3QUZDIC8qIEV2ZW50U2VuZGVyUHJveHlJT1MubW0g
Ki87IH07CisJCTMxREE4QTNEMUU3MjA1Q0MwMEUxREYyRiAvKiBpT1NMYXlvdXRUZXN0Q29tbXVu
aWNhdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAzMTQ4QTA1MzFFNkY4NUI2MDBEM0IzMTYgLyogaU9TTGF5b3V0VGVzdENvbW11bmljYXRpb24u
Y3BwICovOyB9OwogCQk1MTA1OEFENTFENjc4ODIwMDA5QTUzOEMgLyogbGliV2ViQ29yZVRlc3RT
dXBwb3J0LmR5bGliIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNDEyMzBFMTYxMzhDNzhCRjAwQkNDRkNBIC8qIGxpYldlYkNvcmVUZXN0U3VwcG9ydC5k
eWxpYiAqLzsgfTsKIAkJNTEwNThBRDYxRDY3ODgyNTAwOUE1MzhDIC8qIFdlYktpdC5mcmFtZXdv
cmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjUx
NjlDQTE0NDUyMjJEMDBFMEE5RDcgLyogV2ViS2l0LmZyYW1ld29yayAqLzsgfTsKIAkJNTY0MUUy
RDAxNDMzNUU5NTAwODMwN0U1IC8qIEpTVGV4dElucHV0Q29udHJvbGxlci5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NjQxRTJDRTE0MzM1RTk1MDA4
MzA3RTUgLyogSlNUZXh0SW5wdXRDb250cm9sbGVyLmNwcCAqLzsgfTsKQEAgLTI1Miw2ICsyNTMs
OCBAQAogCQkyRUU1MkQxNDE4OTBBOUZCMDAxMEVEMjEgLyogVGVzdENvbnRyb2xsZXJJT1MubW0g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBUZXN0Q29udHJvbGxlcklP
Uy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkVFNTJEMTYxODkwQTlGQjAwMTBF
RDIxIC8qIG1haW5JT1MubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUg
PSBtYWluSU9TLm1tOyBwYXRoID0gLi4vaW9zL21haW5JT1MubW07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTMxMTBCRTBGMTVCQTAxMTQwMEQyMTZBQyAvKiBXZWJOb3RpZmljYXRpb25Q
cm92aWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJOb3RpZmljYXRpb25Qcm92aWRlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTQ4QTA1MzFFNkY4NUI2MDBEM0IzMTYgLyogaU9T
TGF5b3V0VGVzdENvbW11bmljYXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBuYW1lID0gaU9TTGF5b3V0VGVzdENvbW11bmljYXRpb24uY3BwOyBwYXRoID0gLi4vVGVzdFJ1
bm5lclNoYXJlZC9pT1NMYXlvdXRUZXN0Q29tbXVuaWNhdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTMxNDhBMDU0MUU2Rjg1QjYwMEQzQjMxNiAvKiBpT1NMYXlvdXRUZXN0
Q29tbXVuaWNhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBpT1NMYXlv
dXRUZXN0Q29tbXVuaWNhdGlvbi5oOyBwYXRoID0gLi4vVGVzdFJ1bm5lclNoYXJlZC9pT1NMYXlv
dXRUZXN0Q29tbXVuaWNhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMTY0
QzhFRjE1RDFBREExMDBFRjFGRTAgLyogV2ViTm90aWZpY2F0aW9uUHJvdmlkZXIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViTm90aWZpY2F0aW9uUHJvdmlkZXIu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzNzhENDQyMjEzMzQ2RDAwMDA2QTc3
N0IgLyogY29uZmlnLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGNvbmZpZy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk0MTIzMEUxNjEzOEM3OEJGMDBCQ0NGQ0EgLyogbGliV2ViQ29yZVRlc3RT
dXBwb3J0LmR5bGliICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gImNvbXBpbGVkLm1hY2gtby5keWxpYiI7IHBhdGggPSBsaWJXZWJDb3JlVGVzdFN1cHBv
cnQuZHlsaWI7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CkBAIC00NTAsNiAr
NDUzLDggQEAKIAkJMEYxOEU3MUExRDZCQzRCQzAwMjdFNTQ3IC8qIFRlc3RSdW5uZXJTaGFyZWQg
Ki8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTMxNDhBMDUz
MUU2Rjg1QjYwMEQzQjMxNiAvKiBpT1NMYXlvdXRUZXN0Q29tbXVuaWNhdGlvbi5jcHAgKi8sCisJ
CQkJMzE0OEEwNTQxRTZGODVCNjAwRDNCMzE2IC8qIGlPU0xheW91dFRlc3RDb21tdW5pY2F0aW9u
LmggKi8sCiAJCQkJMEYxOEU3MUIxRDZCQzRFNjAwMjdFNTQ3IC8qIEJpbmRpbmdzICovLAogCQkJ
CTBGNzNCNTQ3MUJBNzgyRkUwMDRCM0VGNCAvKiBVSVNjcmlwdENvbnRleHQgKi8sCiAJCQkpOwpA
QCAtOTcwLDYgKzk3NSw3IEBACiAJCQkJQTE4NTEwNDAxQjlBRTEzMTAwNzQ0QUVCIC8qIFBpeGVs
RHVtcFN1cHBvcnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTE4NTEwNDExQjlBRTEzODAwNzQ0
QUVCIC8qIFRlc3RDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUExODUxMDNCMUI5
QUUwRTIwMDc0NEFFQiAvKiBUZXN0Q29udHJvbGxlckNvY29hLm1tIGluIFNvdXJjZXMgKi8sCisJ
CQkJMzFEQThBM0QxRTcyMDVDQzAwRTFERjJGIC8qIGlPU0xheW91dFRlc3RDb21tdW5pY2F0aW9u
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUExODUxMDQyMUI5QUUxM0UwMDc0NEFFQiAvKiBUZXN0
SW52b2NhdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBMTg1MTAzRDFCOUFFMTA2MDA3NDRB
RUIgLyogVGVzdEludm9jYXRpb25DRy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjYyMkNFOTFC
QkIzQTFBMDA4MzhBRDMgLyogVGVzdE9wdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBU
b29scy9XZWJLaXRUZXN0UnVubmVyL2lvcy9UZXN0Q29udHJvbGxlcklPUy5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL2lvcy9UZXN0Q29udHJvbGxlcklPUy5tbQkocmV2
aXNpb24gMjEzOTgxKQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9pb3MvVGVzdENvbnRyb2xs
ZXJJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbXBvcnQgIlRlc3RJ
bnZvY2F0aW9uLmgiCiAjaW1wb3J0ICJUZXN0UnVubmVyV0tXZWJWaWV3LmgiCiAjaW1wb3J0ICJV
SUtpdFNQSS5oIgorI2ltcG9ydCAiaU9TTGF5b3V0VGVzdENvbW11bmljYXRpb24uaCIKICNpbXBv
cnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgogI2ltcG9ydCA8VUlLaXQvVUlLaXQuaD4KICNp
bXBvcnQgPFdlYktpdC9XS1ByZWZlcmVuY2VzUmVmUHJpdmF0ZS5oPgpAQCAtNDksMjEgKzUwLDEy
IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6Om5vdGlmeURvbmUoKQogCiB2b2lkIFRlc3RDb250cm9s
bGVyOjpwbGF0Zm9ybUluaXRpYWxpemUoKQogewotICAgIGNvbnN0IGNoYXIqIGlkZW50aWZpZXIg
PSBnZXRlbnYoIklQQ19JREVOVElGSUVSIik7Ci0gICAgY29uc3QgY2hhciAqc3RkaW5QYXRoID0g
W1tOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiL3RtcC8lc19JTiIsIGlkZW50aWZpZXJdIFVU
RjhTdHJpbmddOwotICAgIGNvbnN0IGNoYXIgKnN0ZG91dFBhdGggPSBbW05TU3RyaW5nIHN0cmlu
Z1dpdGhGb3JtYXQ6QCIvdG1wLyVzX09VVCIsIGlkZW50aWZpZXJdIFVURjhTdHJpbmddOwotICAg
IGNvbnN0IGNoYXIgKnN0ZGVyclBhdGggPSBbW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIv
dG1wLyVzX0VSUk9SIiwgaWRlbnRpZmllcl0gVVRGOFN0cmluZ107Ci0KLSAgICBpbnQgaW5mZCA9
IG9wZW4oc3RkaW5QYXRoLCBPX1JEV1IpOwotICAgIGR1cDIoaW5mZCwgU1RESU5fRklMRU5PKTsK
LSAgICBpbnQgb3V0ZmQgPSBvcGVuKHN0ZG91dFBhdGgsIE9fUkRXUik7Ci0gICAgZHVwMihvdXRm
ZCwgU1RET1VUX0ZJTEVOTyk7Ci0gICAgaW50IGVycmZkID0gb3BlbihzdGRlcnJQYXRoLCBPX1JE
V1IgfCBPX05PTkJMT0NLKTsKLSAgICBkdXAyKGVycmZkLCBTVERFUlJfRklMRU5PKTsKKyAgICBz
ZXR1cGlPU0xheW91dFRlc3RDb21tdW5pY2F0aW9uKCk7CiB9CiAKIHZvaWQgVGVzdENvbnRyb2xs
ZXI6OnBsYXRmb3JtRGVzdHJveSgpCiB7CisgICAgdGVhcmRvd25pT1NMYXlvdXRUZXN0Q29tbXVu
aWNhdGlvbigpOwogfQogCiB2b2lkIFRlc3RDb250cm9sbGVyOjppbml0aWFsaXplSW5qZWN0ZWRC
dW5kbGVQYXRoKCkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>304658</attachid>
            <date>2017-03-16 11:10:56 -0700</date>
            <delta_ts>2017-03-17 17:01:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-169419-20170316111055.patch</filename>
            <type>text/plain</type>
            <size>27178</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIxNDA0MykKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDQ2IEBACisyMDE3LTAzLTE2ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICBVc2UgVENQIGluc3RlYWQgb2YgRklGT3MgZm9yIFNpbXVsYXRvci9EZXZp
Y2UgY29tbXVuaWNhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTY5NDE5CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zMDk0OTYxNT4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIER1bXBSZW5kZXJU
cmVlL0R1bXBSZW5kZXJUcmVlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICog
RHVtcFJlbmRlclRyZWUvbWFjL0R1bXBSZW5kZXJUcmVlLm1tOgorICAgICAgICAoZHVtcFJlbmRl
clRyZWUpOiBDYWxsIHNldHVwL3RlYXJkb3duaU9TTGF5b3V0VGVzdENvbW11bmljYXRpb24oKSBp
bnN0ZWFkIG9mIHVzaW5nIEZJRk9zLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9p
b3MucHk6CisgICAgICAgIChJT1NQb3J0LnNldHVwX3Rlc3RfcnVuKTogU2V0dXAgZWFjaCBkZXZp
Y2UuCisgICAgICAgIChJT1NQb3J0LmNsZWFuX3VwX3Rlc3RfcnVuKTogVGVhcmRvd24gZWFjaCBk
ZXZpY2UuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L3NpbXVsYXRvcl9wcm9jZXNz
LnB5OgorICAgICAgICAoU2ltdWxhdG9yUHJvY2Vzcyk6CisgICAgICAgIChTaW11bGF0b3JQcm9j
ZXNzLk5vbkJsb2NraW5nRmlsZUZyb21Tb2NrZXQpOiBBZGQgdG8gd29yayBhcm91bmQgc2hvcnRj
b21pbmdzIGluIFB5dGhvbiAy4oCZcyBtYWtlZmlsZS4KKyAgICAgICAgKFNpbXVsYXRvclByb2Nl
c3MuTm9uQmxvY2tpbmdGaWxlRnJvbVNvY2tldC5fX2luaXRfXyk6IEluaXRpYWxpemUgZmlsZSB3
aXRoIHNvY2tldC4KKyAgICAgICAgKFNpbXVsYXRvclByb2Nlc3MuUmVhZEZpbGVTb2NrZXQuY2xv
c2UpOiBDbG9zZSBmaWxlIGFuZCB0aGVuIHNvY2tldDsKKyAgICAgICAgKFNpbXVsYXRvclByb2Nl
c3MuX19pbml0X18pOiBQYXNzIFRDUCBwb3J0IG92ZXIgZW52aXJvbm1lbnQsIHJlbW92ZSBGSUZP
IG5hbWVzLgorICAgICAgICAoU2ltdWxhdG9yUHJvY2Vzcy5fX2dldGF0dHJfXyk6IEV4cG9zZSBh
bGwgZmlsZSBhdHRyaWJ1dGVzLgorICAgICAgICAoU2ltdWxhdG9yUHJvY2Vzcy5fbWFrZV9jb25u
ZWN0aW9uX2NyZWF0ZV9maWxlKTogV2FpdCBmb3IgY29ubmVjdGlvbiBmcm9tIHNlcnZlciBhbmQg
Y3JlYXRlIGFuZCByZXR1cm4KKyAgICAgICAgYSBmaWxlLWxpa2Ugb2JqZWN0IGZyb20gdGhlIGlu
Y29taW5nIGNvbm5lY3Rpb24uCisgICAgICAgIChTaW11bGF0b3JQcm9jZXNzLl9zdGFydCk6IFVz
ZSBUQ1AgY29ubmVjdGlvbnMgaW5zdGVhZCBvZiBGSUZPcy4KKyAgICAgICAgKFNpbXVsYXRvclBy
b2Nlc3MuX3N0YXJ0LmhhbmRsZXIpOiBPdXRwdXQgc2VydmVyIHBvcnQgaW4gdGltZW91dCBleGNl
cHRpb24uCisgICAgICAgIChTaW11bGF0b3JQcm9jZXNzLl9yZXNldCk6IERlbGV0ZWQuCisgICAg
ICAgICogU2NyaXB0cy93ZWJraXRweS94Y29kZS9kZXZpY2UucHk6CisgICAgICAgIChEZXZpY2Up
OgorICAgICAgICAoRGV2aWNlLl9faW5pdF9fKTogSW5pdGlhbGl6ZSB0aGlzIGRldmljZSBpbiBV
RElEIHRvIHNvY2tldCBtYXAuCisgICAgICAgIChEZXZpY2UucG9ydCk6IFJldHVybiBwb3J0IG9m
IHNvY2tldCBhc3NvY2lhdGVkIHdpdGggdGhpcyBkZXZpY2UuCisgICAgICAgIChEZXZpY2Uuc2Vy
dmVyKTogUmV0dXJuIHNvY2tldCBhc3NvY2lhdGVkIHdpdGggdGhpcyBkZXZpY2UuCisgICAgICAg
IChEZXZpY2Uuc2V0dXApOiBPcGVuIHNlcnZlciBzb2NrZXQgb24gYW4gb3BlbiBwb3J0LgorICAg
ICAgICAoRGV2aWNlLnRlYXJkb3duKTogQ2xvc2Ugc2VydmVyIHNvY2tldCBhc3NvY2lhdGVkIHdp
dGggdGhpcyBkZXZpY2UuCisgICAgICAgICogVGVzdFJ1bm5lclNoYXJlZC9pT1NMYXlvdXRUZXN0
Q29tbXVuaWNhdGlvbi5jcHA6IEFkZGVkLgorICAgICAgICAoY29ubmVjdFRvU2VydmVyKTogUmV0
dXJuIHNvY2tldCBjb25uZWN0ZWQgdG8gdGhlIHByb3ZpZGVkIHNlcnZlciBhZGRyZXNzLgorICAg
ICAgICAoc2V0dXBpT1NMYXlvdXRUZXN0Q29tbXVuaWNhdGlvbik6IENvbm5lY3Qgc3RkaW4sIHN0
ZG91dCBhbmQgc3RkZXJyIGFzIHNvY2tldCB0byBhIFRDUCBzZXJ2ZXIgcnVubmluZyBvbiBsb2Nh
bGhvc3QuCisgICAgICAgICh0ZWFyZG93bmlPU0xheW91dFRlc3RDb21tdW5pY2F0aW9uKTogQ2xv
c2Ugc3RkaW4sIHN0ZG91dCBhbmQgc3RkZXJyIFRDUCBzb2NrZXRzLgorICAgICAgICAqIFRlc3RS
dW5uZXJTaGFyZWQvaU9TTGF5b3V0VGVzdENvbW11bmljYXRpb24uaDogQWRkZWQuCisgICAgICAg
ICogV2ViS2l0VGVzdFJ1bm5lci9XZWJLaXRUZXN0UnVubmVyLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2o6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9pb3MvVGVzdENvbnRyb2xsZXJJT1Mu
bW06CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybUluaXRpYWxpemUpOiBD
YWxsIHNldHVwaU9TTGF5b3V0VGVzdENvbW11bmljYXRpb24oKSBpbnN0ZWFkIG9mIHVzaW5nIEZJ
Rk9zLgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1EZXN0cm95KTogQ2Fs
bCB0ZWFyZG93bmlPU0xheW91dFRlc3RDb21tdW5pY2F0aW9uKCkuCisKIDIwMTctMDMtMTUgIFRp
bSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CiAKICAgICAgICAgTnVsbCBkZXJl
ZiB1bmRlciBjYWxsQWZ0ZXJOZXh0UHJlc2VudGF0aW9uVXBkYXRlCkluZGV4OiBUb29scy9EdW1w
UmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIxNDA0MykKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVl
L0R1bXBSZW5kZXJUcmVlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkK
QEAgLTgwLDYgKzgwLDcgQEAKIAkJMkQ0MDNGMUIxNTA4NzIwOTAwNTM1OEQyIC8qIExheW91dFRl
c3RIZWxwZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDJENDAzRUEyMTUwODcxNDIwMDUzNThEMiAvKiBMYXlvdXRUZXN0SGVscGVyLm0gKi87IH07CiAJ
CTJEQTJFM0E1MUUxQkE1NDEwMEEzQkJEMCAvKiBEdW1wUmVuZGVyVHJlZVNwZWxsQ2hlY2tlci5t
bSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEQTJFM0E0
MUUxQkE1NDEwMEEzQkJEMCAvKiBEdW1wUmVuZGVyVHJlZVNwZWxsQ2hlY2tlci5tbSAqLzsgfTsK
IAkJMzExMTdCM0QxNUQ5QTU2QTAwMTYzQkM4IC8qIE1vY2tXZWJOb3RpZmljYXRpb25Qcm92aWRl
ci5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxMTE3
QjNCMTVEOUE1NkEwMDE2M0JDOCAvKiBNb2NrV2ViTm90aWZpY2F0aW9uUHJvdmlkZXIubW0gKi87
IH07CisJCTMxMjk0M0Y5MUU3MUYyQjQwMDFFRTJDQyAvKiBpT1NMYXlvdXRUZXN0Q29tbXVuaWNh
dGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAz
MTQ4QTA1NTFFNkY5MEY0MDBEM0IzMTYgLyogaU9TTGF5b3V0VGVzdENvbW11bmljYXRpb24uY3Bw
ICovOyB9OwogCQk0NDY0Q0FCRTFDMjBBMDhCMDBFNUJCNTUgLyogRHVtcFJlbmRlclRyZWVBcHBN
YWluLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDQ2
NENBQkQxQzIwQTA3MDAwRTVCQjU1IC8qIER1bXBSZW5kZXJUcmVlQXBwTWFpbi5tbSAqLzsgfTsK
IAkJNEFENkExMTQxM0M4MTI0MDAwRUE5NzM3IC8qIEZvcm1WYWx1ZS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QUQ2QTExMzEzQzgxMjQwMDBFQTk3
MzcgLyogRm9ybVZhbHVlLmNwcCAqLzsgfTsKIAkJNTEwNjgwM0UxNUNDN0IxMDAwMUE4QTIzIC8q
IFNsb3dOUFBOZXcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTEwNjgwM0QxNUNDN0IxMDAwMUE4QTIzIC8qIFNsb3dOUFBOZXcuY3BwICovOyB9OwpA
QCAtMjk0LDYgKzI5NSw4IEBACiAJCTJEQTJFM0E0MUUxQkE1NDEwMEEzQkJEMCAvKiBEdW1wUmVu
ZGVyVHJlZVNwZWxsQ2hlY2tlci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsg
bmFtZSA9IER1bXBSZW5kZXJUcmVlU3BlbGxDaGVja2VyLm1tOyBwYXRoID0gbWFjL0R1bXBSZW5k
ZXJUcmVlU3BlbGxDaGVja2VyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMTEx
N0IzQTE1RDlBNTZBMDAxNjNCQzggLyogTW9ja1dlYk5vdGlmaWNhdGlvblByb3ZpZGVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IE1vY2tXZWJOb3RpZmljYXRpb25Qcm92aWRl
ci5oOyBwYXRoID0gbWFjL01vY2tXZWJOb3RpZmljYXRpb25Qcm92aWRlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkzMTExN0IzQjE1RDlBNTZBMDAxNjNCQzggLyogTW9ja1dlYk5v
dGlmaWNhdGlvblByb3ZpZGVyLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBu
YW1lID0gTW9ja1dlYk5vdGlmaWNhdGlvblByb3ZpZGVyLm1tOyBwYXRoID0gbWFjL01vY2tXZWJO
b3RpZmljYXRpb25Qcm92aWRlci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzE0
OEEwNTUxRTZGOTBGNDAwRDNCMzE2IC8qIGlPU0xheW91dFRlc3RDb21tdW5pY2F0aW9uLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IGlPU0xheW91dFRlc3RDb21tdW5p
Y2F0aW9uLmNwcDsgcGF0aCA9IC4uL1Rlc3RSdW5uZXJTaGFyZWQvaU9TTGF5b3V0VGVzdENvbW11
bmljYXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTQ4QTA1NjFFNkY5
MEY0MDBEM0IzMTYgLyogaU9TTGF5b3V0VGVzdENvbW11bmljYXRpb24uaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gaU9TTGF5b3V0VGVzdENvbW11bmljYXRpb24uaDsgcGF0aCA9
IC4uL1Rlc3RSdW5uZXJTaGFyZWQvaU9TTGF5b3V0VGVzdENvbW11bmljYXRpb24uaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzJBNzBBQUIwMzcwNUUxRjAwQzkxNzgzIC8qIER1bXBS
ZW5kZXJUcmVlUHJlZml4LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IER1bXBS
ZW5kZXJUcmVlUHJlZml4Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3NUYwOTcx
MERBQzNDQjYwMEM4QjRFNSAvKiBXZWJLaXRXZWlnaHRXYXRjaGVyMTAwLnR0ZiAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IGZpbGU7IG5hbWUgPSBXZWJL
aXRXZWlnaHRXYXRjaGVyMTAwLnR0ZjsgcGF0aCA9IGZvbnRzL1dlYktpdFdlaWdodFdhdGNoZXIx
MDAudHRmOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzNzVGMDk3MjBEQUMzQ0I2MDBD
OEI0RTUgLyogV2ViS2l0V2VpZ2h0V2F0Y2hlcjIwMC50dGYgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBmaWxlOyBuYW1lID0gV2ViS2l0V2VpZ2h0V2F0
Y2hlcjIwMC50dGY7IHBhdGggPSBmb250cy9XZWJLaXRXZWlnaHRXYXRjaGVyMjAwLnR0Zjsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQ3Miw2ICs0NzUsNyBAQAogCQkJaXNhID0gUEJY
R3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKIAkJCQkwRjE4RTZGMTFENkI5QzY0MDAyN0U1NDcgLyog
RGVyaXZlZFNvdXJjZXMubWFrZSAqLywKKwkJCQkzMTQ4QTA2NTFFNkY5MEY0MDBEM0IzMTYgLyog
VGVzdFJ1bm5lclNoYXJlZCAqLywKIAkJCQkwRjE4RTZFNzFENkI5QkY1MDAyN0U1NDcgLyogVUlT
Y3JpcHRDb250ZXh0ICovLAogCQkJCUExMTU4RDZBMTg5MjdDRTEwMDg4QzE3QiAvKiBpb3MgKi8s
CiAJCQkJQTEzNEU1MzQxODkwNUU2QzAwOTAxRDA2IC8qIGNvbmZpZy5oICovLApAQCAtNjk1LDYg
KzY5OSwxNiBAQAogCQkJbmFtZSA9IExheW91dFRlc3RIZWxwZXI7CiAJCQlzb3VyY2VUcmVlID0g
Ijxncm91cD4iOwogCQl9OworCQkzMTQ4QTA2NTFFNkY5MEY0MDBEM0IzMTYgLyogVGVzdFJ1bm5l
clNoYXJlZCAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJ
MzE0OEEwNTUxRTZGOTBGNDAwRDNCMzE2IC8qIGlPU0xheW91dFRlc3RDb21tdW5pY2F0aW9uLmNw
cCAqLywKKwkJCQkzMTQ4QTA1NjFFNkY5MEY0MDBEM0IzMTYgLyogaU9TTGF5b3V0VGVzdENvbW11
bmljYXRpb24uaCAqLywKKwkJCSk7CisJCQluYW1lID0gVGVzdFJ1bm5lclNoYXJlZDsKKwkJCXBh
dGggPSAuLi9XZWJLaXRUZXN0UnVubmVyOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJ
fTsKIAkJNDE3REE5MTgxMzczNjc0RDAwN0M1N0ZCIC8qIFdlYkNvcmVUZXN0U3VwcG9ydCAqLyA9
IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCkBAIC0xMTQ1LDYgKzExNTks
NyBAQAogCQkJCTdDQkJDMzIzMURERkNGOUEwMDc4NkI5RCAvKiBUZXN0T3B0aW9ucy5tbSBpbiBT
b3VyY2VzICovLAogCQkJCTBGMThFNzBGMUQ2QkFDQjYwMDI3RTU0NyAvKiBVSVNjcmlwdENvbnRy
b2xsZXJNYWMubW0gaW4gU291cmNlcyAqLywKIAkJCQlCQzlEOTAyNDBDOTc0NzJFMDA5OUE0QTMg
LyogV29ya1F1ZXVlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTMxMjk0M0Y5MUU3MUYyQjQwMDFF
RTJDQyAvKiBpT1NMYXlvdXRUZXN0Q29tbXVuaWNhdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlCQ0ExOEIyNjBDOUIwMTVDMDAxMTQzNjkgLyogV29ya1F1ZXVlSXRlbU1hYy5tbSBpbiBTb3Vy
Y2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAw
OwpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0R1bXBSZW5kZXJUcmVlLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZS5tbQkocmV2
aXNpb24gMjE0MDQzKQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0R1bXBSZW5kZXJUcmVl
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQsNiArMTA0LDcgQEAKICNpZiBQTEFURk9STShJT1Mp
CiAjaW1wb3J0ICJEdW1wUmVuZGVyVHJlZUJyb3dzZXJWaWV3LmgiCiAjaW1wb3J0ICJVSUtpdFNQ
SS5oIgorI2ltcG9ydCAiaU9TTGF5b3V0VGVzdENvbW11bmljYXRpb24uaCIKICNpbXBvcnQgPFF1
YXJ0ekNvcmUvUXVhcnR6Q29yZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9Db3JlR3JhcGhpY3NTUEku
aD4KICNpbXBvcnQgPFdlYktpdC9XQUtXaW5kb3cuaD4KQEAgLTEyMzUsMTcgKzEyMzYsNyBAQCB2
b2lkIHdyaXRlQ3Jhc2hlZE1lc3NhZ2VPbkZhdGFsRXJyb3IoaW50CiB2b2lkIGR1bXBSZW5kZXJU
cmVlKGludCBhcmdjLCBjb25zdCBjaGFyICphcmd2W10pCiB7CiAjaWYgUExBVEZPUk0oSU9TKQot
ICAgIGNvbnN0IGNoYXIqIGlkZW50aWZpZXIgPSBnZXRlbnYoIklQQ19JREVOVElGSUVSIik7Ci0g
ICAgY29uc3QgY2hhciAqc3RkaW5QYXRoID0gW1tOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAi
L3RtcC8lc19JTiIsIGlkZW50aWZpZXJdIFVURjhTdHJpbmddOwotICAgIGNvbnN0IGNoYXIgKnN0
ZG91dFBhdGggPSBbW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIvdG1wLyVzX09VVCIsIGlk
ZW50aWZpZXJdIFVURjhTdHJpbmddOwotICAgIGNvbnN0IGNoYXIgKnN0ZGVyclBhdGggPSBbW05T
U3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIvdG1wLyVzX0VSUk9SIiwgaWRlbnRpZmllcl0gVVRG
OFN0cmluZ107Ci0KLSAgICBpbnQgaW5mZCA9IG9wZW4oc3RkaW5QYXRoLCBPX1JEV1IpOwotICAg
IGR1cDIoaW5mZCwgU1RESU5fRklMRU5PKTsKLSAgICBpbnQgb3V0ZmQgPSBvcGVuKHN0ZG91dFBh
dGgsIE9fUkRXUik7Ci0gICAgZHVwMihvdXRmZCwgU1RET1VUX0ZJTEVOTyk7Ci0gICAgaW50IGVy
cmZkID0gb3BlbihzdGRlcnJQYXRoLCBPX1JEV1IgfCBPX05PTkJMT0NLKTsKLSAgICBkdXAyKGVy
cmZkLCBTVERFUlJfRklMRU5PKTsKKyAgICBzZXR1cGlPU0xheW91dFRlc3RDb21tdW5pY2F0aW9u
KCk7CiAjZW5kaWYKIAogICAgIHNpZ25hbChTSUdJTEwsICZ3cml0ZUNyYXNoZWRNZXNzYWdlT25G
YXRhbEVycm9yKTsKQEAgLTEzMDYsOSArMTI5Nyw3IEBAIHZvaWQgZHVtcFJlbmRlclRyZWUoaW50
IGFyZ2MsIGNvbnN0IGNoYXIKICAgICB9CiAKICNpZiBQTEFURk9STShJT1MpCi0gICAgY2xvc2Uo
aW5mZCk7Ci0gICAgY2xvc2Uob3V0ZmQpOwotICAgIGNsb3NlKGVycmZkKTsKKyAgICB0ZWFyZG93
bmlPU0xheW91dFRlc3RDb21tdW5pY2F0aW9uKCk7CiAjZW5kaWYKIH0KIApJbmRleDogVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9wb3J0L2lvcy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRz
L3dlYmtpdHB5L3BvcnQvaW9zLnB5CShyZXZpc2lvbiAyMTQwNDMpCisrKyBUb29scy9TY3JpcHRz
L3dlYmtpdHB5L3BvcnQvaW9zLnB5CSh3b3JraW5nIGNvcHkpCkBAIC05MSwzICs5MSwxMiBAQCBj
bGFzcyBJT1NQb3J0KERhcndpblBvcnQpOgogICAgICAgICAgICAgIyBjcmFzaCwgYnV0IHRoaXMg
Y3Jhc2ggd2lsbCBvY2N1ciBwb3N0LWxhdW5jaCwgYWZ0ZXIgaW5zdGFsbF9hcHAgaGFzIGFscmVh
ZHkga2lsbGVkIHRoZSBwcm9jZXNzLgogICAgICAgICAgICAgaWYgbm90IGRldmljZS5pbnN0YWxs
X2FwcChzZWxmLl9wYXRoX3RvX2RyaXZlcigpLCB7J0RZTERfTElCUkFSWV9QQVRIJzogc2VsZi5f
YnVpbGRfcGF0aCgpfSk6CiAgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdGYWls
ZWQgdG8gaW5zdGFsbCBhcHAge30gb24gZGV2aWNlIHt9Jy5mb3JtYXQoc2VsZi5fcGF0aF90b19k
cml2ZXIoKSwgZGV2aWNlLnVkaWQpKQorCisgICAgICAgIGZvciBpIGluIHhyYW5nZShzZWxmLmNo
aWxkX3Byb2Nlc3NlcygpKToKKyAgICAgICAgICAgIHNlbGYuZGV2aWNlX2Zvcl93b3JrZXJfbnVt
YmVyKGkpLnNldHVwKCkKKworICAgICAgICBkZWYgY2xlYW5fdXBfdGVzdF9ydW4oc2VsZik6Cisg
ICAgICAgICAgICBzdXBlcihJT1NQb3J0LCBzZWxmKS5jbGVhbl91cF90ZXN0X3J1bigpCisKKyAg
ICAgICAgICAgIGZvciBpIGluIHhyYW5nZShzZWxmLmNoaWxkX3Byb2Nlc3NlcygpKToKKyAgICAg
ICAgICAgICAgICBzZWxmLmRldmljZV9mb3Jfd29ya2VyX251bWJlcihpKS50ZWFyZG93bigpCklu
ZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvc2ltdWxhdG9yX3Byb2Nlc3MucHkKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3NpbXVsYXRvcl9wcm9jZXNz
LnB5CShyZXZpc2lvbiAyMTQwNDMpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvc2lt
dWxhdG9yX3Byb2Nlc3MucHkJKHdvcmtpbmcgY29weSkKQEAgLTIyLDEyICsyMiwxMiBAQAogCiAK
IGltcG9ydCBlcnJubworaW1wb3J0IGZjbnRsCiBpbXBvcnQgb3MKIGltcG9ydCBzaWduYWwKIGlt
cG9ydCB0aW1lCiAKIGZyb20gd2Via2l0cHkucG9ydC5zZXJ2ZXJfcHJvY2VzcyBpbXBvcnQgU2Vy
dmVyUHJvY2VzcwotZnJvbSB3ZWJraXRweS54Y29kZS5zaW11bGF0b3IgaW1wb3J0IFNpbXVsYXRv
cgogCiAKIGNsYXNzIFNpbXVsYXRvclByb2Nlc3MoU2VydmVyUHJvY2Vzcyk6CkBAIC01Niw2NCAr
NTYsNTkgQEAgY2xhc3MgU2ltdWxhdG9yUHJvY2VzcyhTZXJ2ZXJQcm9jZXNzKToKICAgICAgICAg
ICAgICAgICB0aW1lLnNsZWVwKDAuMDEpICAjIEluIHNlY29uZHMKICAgICAgICAgICAgIHJldHVy
biBzZWxmLnJldHVybmNvZGUKIAorICAgICMgUHl0aG9uIDIncyBpbXBsZW1lbnRhdGlvbiBvZiBt
YWtlZmlsZSBkb2VzIG5vdCByZXR1cm4KKyAgICAjIGEgbm9uLWJsb2NraW5nIGZpbGUuCisgICAg
Y2xhc3MgTm9uQmxvY2tpbmdGaWxlRnJvbVNvY2tldChvYmplY3QpOgorCisgICAgICAgIGRlZiBf
X2luaXRfXyhzZWxmLCBzb2NrLCB0eXBlKToKKyAgICAgICAgICAgIHNlbGYuc29ja2V0ID0gc29j
aworICAgICAgICAgICAgc2VsZi5fZmlsZSA9IG9zLmZkb3Blbihzb2NrLmZpbGVubygpLCB0eXBl
LCAwKQorICAgICAgICAgICAgU2VydmVyUHJvY2Vzcy5fc2V0X2ZpbGVfbm9uYmxvY2tpbmcoc2Vs
Zi5fZmlsZSkKKworICAgICAgICBkZWYgX19nZXRhdHRyX18oc2VsZiwgbmFtZSk6CisgICAgICAg
ICAgICByZXR1cm4gZ2V0YXR0cihzZWxmLl9maWxlLCBuYW1lKQorCisgICAgICAgIGRlZiBjbG9z
ZShzZWxmKToKKyAgICAgICAgICAgIHJlc3VsdCA9IHNlbGYuX2ZpbGUuY2xvc2UoKQorICAgICAg
ICAgICAgc2VsZi5zb2NrZXQuY2xvc2UoKQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdAorCisK
ICAgICBkZWYgX19pbml0X18oc2VsZiwgcG9ydF9vYmosIG5hbWUsIGNtZCwgZW52PU5vbmUsIHVu
aXZlcnNhbF9uZXdsaW5lcz1GYWxzZSwgdHJlYXRfbm9fZGF0YV9hc19jcmFzaD1GYWxzZSwgd29y
a2VyX251bWJlcj1Ob25lKToKICAgICAgICAgc2VsZi5fYnVuZGxlX2lkID0gcG9ydF9vYmouYXBw
X2lkZW50aWZpZXJfZnJvbV9idW5kbGUoY21kWzBdKQogICAgICAgICBzZWxmLl9kZXZpY2UgPSBw
b3J0X29iai5kZXZpY2VfZm9yX3dvcmtlcl9udW1iZXIod29ya2VyX251bWJlcikKLSAgICAgICAg
ZW52WydJUENfSURFTlRJRklFUiddID0gc2VsZi5fYnVuZGxlX2lkICsgJy0nICsgc2VsZi5fZGV2
aWNlLnVkaWQKLQotICAgICAgICAjIFRoaXMgbG9jYXRpb24gbWF0Y2hlcyB0aGUgbG9jYXRpb24g
dXNlZCBieSBXZWJLaXRUZXN0UnVubmVyIGFuZCBEdW1wUmVuZGVyVHJlZQotICAgICAgICAjIGZv
ciB0aGUgb3RoZXIgc2lkZSBvZiB0aGVzZSBmaWZvcy4KLSAgICAgICAgZmlsZV9sb2NhdGlvbiA9
ICcvdG1wLycgKyBlbnZbJ0lQQ19JREVOVElGSUVSJ10KLSAgICAgICAgc2VsZi5faW5fcGF0aCA9
IGZpbGVfbG9jYXRpb24gKyAnX0lOJwotICAgICAgICBzZWxmLl9vdXRfcGF0aCA9IGZpbGVfbG9j
YXRpb24gKyAnX09VVCcKLSAgICAgICAgc2VsZi5fZXJyb3JfcGF0aCA9IGZpbGVfbG9jYXRpb24g
KyAnX0VSUk9SJwogCisgICAgICAgIGVudlsnUE9SVCddID0gc3RyKHNlbGYuX2RldmljZS5wb3J0
KCkpCiAgICAgICAgIHN1cGVyKFNpbXVsYXRvclByb2Nlc3MsIHNlbGYpLl9faW5pdF9fKHBvcnRf
b2JqLCBuYW1lLCBjbWQsIGVudiwgdW5pdmVyc2FsX25ld2xpbmVzLCB0cmVhdF9ub19kYXRhX2Fz
X2NyYXNoKQogCi0gICAgZGVmIF9yZXNldChzZWxmKToKLSAgICAgICAgc3VwZXIoU2ltdWxhdG9y
UHJvY2Vzcywgc2VsZikuX3Jlc2V0KCkKLQotICAgICAgICAjIFVubGlua3MgYXJlIG5lZWRlZCBv
biByZXNldCBpbiB0aGUgZXZlbnQgdGhhdCB0aGUgUHl0aG9uIGNvZGUgdW5leHBlY3RlZGx5Ci0g
ICAgICAgICMgZmFpbHMgYmV0d2VlbiBfc3RhcnQoKSBhbmQga2lsbCgpLiAgVGhpcyBjYW4gYmUg
Y2F1c2VkIGJ5IGEgU0lHS0lMTCBvciBhIGNyYXNoLgotICAgICAgICAjIFRoaXMgZW5zdXJlcyB0
aGF0IG9zLm1rZmlmbygpIHdpbGwgbm90IGJlIG9ic3RydWN0ZWQgYnkgcHJldmlvdXMgZmlmb3Mu
Ci0gICAgICAgICMgT3RoZXIgZmlsZXMgd2lsbCBzdGlsbCBjYXVzZSBvcy5ta2ZpZm8oKSB0byBm
YWlsLgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBvcy51bmxpbmsoc2VsZi5faW5fcGF0aCkK
LSAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgcGFzcwotICAgICAgICB0cnk6Ci0gICAgICAg
ICAgICBvcy51bmxpbmsoc2VsZi5fb3V0X3BhdGgpCi0gICAgICAgIGV4Y2VwdDoKLSAgICAgICAg
ICAgIHBhc3MKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgb3MudW5saW5rKHNlbGYuX2Vycm9y
X3BhdGgpCi0gICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgIHBhc3MKKyAgICBAc3RhdGljbWV0
aG9kCisgICAgZGVmIF9tYWtlX2Nvbm5lY3Rpb25fY3JlYXRlX2ZpbGUoc2VydmVyLCB0eXBlKToK
KyAgICAgICAgY29ubmVjdGlvbiwgYWRkcmVzcyA9IHNlcnZlci5hY2NlcHQoKQorICAgICAgICBh
c3NlcnQgYWRkcmVzc1swXSA9PSAnMTI3LjAuMC4xJworICAgICAgICByZXR1cm4gU2ltdWxhdG9y
UHJvY2Vzcy5Ob25CbG9ja2luZ0ZpbGVGcm9tU29ja2V0KGNvbm5lY3Rpb24sIHR5cGUpCiAKICAg
ICBkZWYgX3N0YXJ0KHNlbGYpOgogICAgICAgICBpZiBzZWxmLl9wcm9jOgogICAgICAgICAgICAg
cmFpc2UgVmFsdWVFcnJvcigne30gYWxyZWFkeSBydW5uaW5nJy5mb3JtYXQoc2VsZi5fbmFtZSkp
CiAgICAgICAgIHNlbGYuX3Jlc2V0KCkKIAotICAgICAgICBGSUZPX1BFUk1JU1NJT05fRkxBR1Mg
PSAwNjAwICAjIE9ubHkgb3duZXIgY2FuIHJlYWQgYW5kIHdyaXRlCi0gICAgICAgIG9zLm1rZmlm
byhzZWxmLl9pbl9wYXRoLCBGSUZPX1BFUk1JU1NJT05fRkxBR1MpCi0gICAgICAgIG9zLm1rZmlm
byhzZWxmLl9vdXRfcGF0aCwgRklGT19QRVJNSVNTSU9OX0ZMQUdTKQotICAgICAgICBvcy5ta2Zp
Zm8oc2VsZi5fZXJyb3JfcGF0aCwgRklGT19QRVJNSVNTSU9OX0ZMQUdTKQotCi0gICAgICAgIHN0
ZG91dCA9IG9zLmZkb3Blbihvcy5vcGVuKHNlbGYuX291dF9wYXRoLCBvcy5PX1JET05MWSB8IG9z
Lk9fTk9OQkxPQ0spLCAncmInKQotICAgICAgICBzdGRlcnIgPSBvcy5mZG9wZW4ob3Mub3Blbihz
ZWxmLl9lcnJvcl9wYXRoLCBvcy5PX1JET05MWSB8IG9zLk9fTk9OQkxPQ0spLCAncmInKQotCisg
ICAgICAgIHNlbGYuX2RldmljZS5zZXJ2ZXIoKS5saXN0ZW4oMykKICAgICAgICAgc2VsZi5fcGlk
ID0gc2VsZi5fZGV2aWNlLmxhdW5jaF9hcHAoc2VsZi5fYnVuZGxlX2lkLCBzZWxmLl9jbWRbMTpd
LCBlbnY9c2VsZi5fZW52KQogCiAgICAgICAgIGRlZiBoYW5kbGVyKHNpZ251bSwgZnJhbWUpOgog
ICAgICAgICAgICAgYXNzZXJ0IHNpZ251bSA9PSBzaWduYWwuU0lHQUxSTQotICAgICAgICAgICAg
cmFpc2UgRXhjZXB0aW9uKCdUaW1lZCBvdXQgd2FpdGluZyBmb3IgcHJvY2VzcyB0byBvcGVuIHt9
Jy5mb3JtYXQoc2VsZi5faW5fcGF0aCkpCisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oJ1Rp
bWVkIG91dCB3YWl0aW5nIGZvciBwcm9jZXNzIHRvIGNvbm5lY3QgYXQgcG9ydCB7fScuZm9ybWF0
KHNlbGYuX2RldmljZS5wb3J0KCkpKQogICAgICAgICBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdB
TFJNLCBoYW5kbGVyKQogICAgICAgICBzaWduYWwuYWxhcm0oMykgICMgSW4gc2Vjb25kcwogCiAg
ICAgICAgIHN0ZGluID0gTm9uZQorICAgICAgICBzdGRvdXQgPSBOb25lCisgICAgICAgIHN0ZGVy
ciA9IE5vbmUKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgc3RkaW4gPSBvcGVuKHNlbGYuX2lu
X3BhdGgsICd3JywgMCkgICMgT3BlbmluZyB3aXRoIG5vIGJ1ZmZlcmluZywgbGlrZSBwb3Blbgor
ICAgICAgICAgICAgIyBPcmRlciBtYXR0ZXJzIGhlcmUhCisgICAgICAgICAgICBzdGRpbiA9IFNp
bXVsYXRvclByb2Nlc3MuX21ha2VfY29ubmVjdGlvbl9jcmVhdGVfZmlsZShzZWxmLl9kZXZpY2Uu
c2VydmVyKCksICd3JykKKyAgICAgICAgICAgIHN0ZG91dCA9IFNpbXVsYXRvclByb2Nlc3MuX21h
a2VfY29ubmVjdGlvbl9jcmVhdGVfZmlsZShzZWxmLl9kZXZpY2Uuc2VydmVyKCksICdyYicpCisg
ICAgICAgICAgICBzdGRlcnIgPSBTaW11bGF0b3JQcm9jZXNzLl9tYWtlX2Nvbm5lY3Rpb25fY3Jl
YXRlX2ZpbGUoc2VsZi5fZGV2aWNlLnNlcnZlcigpLCAncmInKQogICAgICAgICBleGNlcHQ6CiAg
ICAgICAgICAgICAjIFdlIHNldCBzZWxmLl9wcm9jIGFzIF9yZXNldCgpIGFuZCBfa2lsbCgpIGRl
cGVuZCBvbiBpdC4KICAgICAgICAgICAgIHNlbGYuX3Byb2MgPSBTaW11bGF0b3JQcm9jZXNzLlBv
cGVuKHNlbGYuX3BpZCwgc3RkaW4sIHN0ZG91dCwgc3RkZXJyKQpJbmRleDogVG9vbHMvU2NyaXB0
cy93ZWJraXRweS94Y29kZS9kZXZpY2UucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy93
ZWJraXRweS94Y29kZS9kZXZpY2UucHkJKHJldmlzaW9uIDIxNDA0MykKKysrIFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkveGNvZGUvZGV2aWNlLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yMCwxMiArMjAs
NDQgQEAKICMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKICMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAKK2ltcG9ydCBzb2NrZXQKKwor
ZnJvbSByYW5kb20gaW1wb3J0IHJhbmRpbnQKIAogY2xhc3MgRGV2aWNlKG9iamVjdCk6CisKKyAg
ICBQT1JUX1JBTkdFID0gWzUwMDAsIDEwMDAwXQorICAgIEZPUldBUkRfUE9SVFMgPSBbODAwMCwg
ODA4MCwgODQ0M10KKyAgICBVRElEX1RPX1NPQ0tFVCA9IHt9CisKICAgICBkZWYgX19pbml0X18o
c2VsZiwgbmFtZSwgdWRpZCwgaG9zdCk6CiAgICAgICAgIHNlbGYuX2hvc3QgPSBob3N0CiAgICAg
ICAgIHNlbGYubmFtZSA9IG5hbWUKICAgICAgICAgc2VsZi51ZGlkID0gdWRpZAorICAgICAgICBp
ZiB1ZGlkIG5vdCBpbiBEZXZpY2UuVURJRF9UT19TT0NLRVQ6CisgICAgICAgICAgICBEZXZpY2Uu
VURJRF9UT19TT0NLRVRbdWRpZF0gPSBOb25lCisKKyAgICBkZWYgcG9ydChzZWxmKToKKyAgICAg
ICAgaWYgbm90IHNlbGYuc2VydmVyKCk6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAg
ICByZXR1cm4gc2VsZi5zZXJ2ZXIoKS5nZXRzb2NrbmFtZSgpWzFdCisKKyAgICBkZWYgc2VydmVy
KHNlbGYpOgorICAgICAgICByZXR1cm4gRGV2aWNlLlVESURfVE9fU09DS0VUW3NlbGYudWRpZF0K
KworICAgIGRlZiBzZXR1cChzZWxmKToKKyAgICAgICAgc2VydmVyID0gRGV2aWNlLlVESURfVE9f
U09DS0VUW3NlbGYudWRpZF0KKyAgICAgICAgaWYgbm90IHNlcnZlcjoKKyAgICAgICAgICAgIHNl
cnZlciA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX1NUUkVBTSkK
KyAgICAgICAgICAgIHNlcnZlci5zZXRzb2Nrb3B0KHNvY2tldC5TT0xfU09DS0VULCBzb2NrZXQu
U09fUkVVU0VBRERSLCAxKQorICAgICAgICAgICAgc2VydmVyLmJpbmQoKCdsb2NhbGhvc3QnLCAw
KSkKKyAgICAgICAgICAgIERldmljZS5VRElEX1RPX1NPQ0tFVFtzZWxmLnVkaWRdID0gc2VydmVy
CisKKyAgICAgICAgaWYgbm90IERldmljZS5VRElEX1RPX1NPQ0tFVFtzZWxmLnVkaWRdOgorICAg
ICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdObyBvcGVuIHBvcnRzIGZvdW5kJykKKworICAg
IGRlZiB0ZWFyZG93bihzZWxmKToKKyAgICAgICAgRGV2aWNlLlVESURfVE9fU09DS0VUW3NlbGYu
dWRpZF0gPSBOb25lCiAKICAgICBkZWYgaW5zdGFsbF9hcHAoc2VsZiwgYXBwX3BhdGgsIGVudj1O
b25lKToKICAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgpJbmRleDogVG9vbHMvVGVz
dFJ1bm5lclNoYXJlZC9pT1NMYXlvdXRUZXN0Q29tbXVuaWNhdGlvbi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9pT1NMYXlvdXRUZXN0Q29tbXVuaWNhdGlvbi5jcHAJ
KG5vbmV4aXN0ZW50KQorKysgVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9pT1NMYXlvdXRUZXN0Q29t
bXVuaWNhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDEgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiaU9TTGF5b3V0VGVzdENvbW11bmlj
YXRpb24uaCIKKworI2lmIFBMQVRGT1JNKElPUykKKworI2luY2x1ZGUgPG5ldGRiLmg+CisjaW5j
bHVkZSA8bmV0aW5ldC9pbi5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxz
eXMvdHlwZXMuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworc3RhdGljIGludCBzdGRpblNvY2tl
dDsKK3N0YXRpYyBpbnQgc3Rkb3V0U29ja2V0Oworc3RhdGljIGludCBzdGRlcnJTb2NrZXQ7CisK
K3N0YXRpYyBGSUxFKiBzdGRpbkZpbGU7CitzdGF0aWMgRklMRSogc3Rkb3V0RmlsZTsKK3N0YXRp
YyBGSUxFKiBzdGRlcnJGaWxlOworCitzdGF0aWMgaW50IGNvbm5lY3RUb1NlcnZlcihzb2NrYWRk
cl9pbiYgc2VydmVyQWRkcmVzcykKK3sKKyAgICBpbnQgcmVzdWx0ID0gc29ja2V0KEFGX0lORVQs
IFNPQ0tfU1RSRUFNLCAwKTsKKyAgICBpZiAocmVzdWx0IDwgMCkKKyAgICAgICAgYWJvcnQoKTsK
KyAgICBpZiAoY29ubmVjdChyZXN1bHQsIChzdHJ1Y3Qgc29ja2FkZHIgKikgJnNlcnZlckFkZHJl
c3MsIHNpemVvZihzZXJ2ZXJBZGRyZXNzKSkgPCAwKQorICAgICAgICBhYm9ydCgpOworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgc2V0dXBpT1NMYXlvdXRUZXN0Q29tbXVuaWNhdGlvbigp
Cit7CisgICAgaW50IHBvcnQgPSBhdG9pKGdldGVudigiUE9SVCIpKTsKKyAgICBpZiAocG9ydCA8
PSAwKQorICAgICAgICBhYm9ydCgpOworICAgIAorICAgIHN0cnVjdCBob3N0ZW50KiBob3N0ID0g
Z2V0aG9zdGJ5bmFtZSgibG9jYWxob3N0Iik7CisgICAgc3RydWN0IHNvY2thZGRyX2luIHNlcnZl
ckFkZHJlc3M7CisgICAgbWVtc2V0KChjaGFyICopICZzZXJ2ZXJBZGRyZXNzLCAwLCBzaXplb2Yo
c2VydmVyQWRkcmVzcykpOworICAgIHNlcnZlckFkZHJlc3Muc2luX2ZhbWlseSA9IEFGX0lORVQ7
CisgICAgbWVtY3B5KAorICAgICAgICAoY2hhciAqKSZzZXJ2ZXJBZGRyZXNzLnNpbl9hZGRyLnNf
YWRkciwKKyAgICAgICAgKGNoYXIgKilob3N0LT5oX2FkZHIsCisgICAgICAgIGhvc3QtPmhfbGVu
Z3RoKTsKKyAgICBzZXJ2ZXJBZGRyZXNzLnNpbl9wb3J0ID0gaHRvbnMocG9ydCk7CisgICAgCisg
ICAgLy8gT3JkZXIgbWF0dGVycyEKKyAgICBzdGRpblNvY2tldCA9IGNvbm5lY3RUb1NlcnZlcihz
ZXJ2ZXJBZGRyZXNzKTsKKyAgICBzdGRpbkZpbGUgPSBmZG9wZW4oc3RkaW5Tb2NrZXQsICJyYiIp
OworICAgIGR1cDIoZmlsZW5vKHN0ZGluRmlsZSksIFNURElOX0ZJTEVOTyk7CisKKyAgICBzdGRv
dXRTb2NrZXQgPSBjb25uZWN0VG9TZXJ2ZXIoc2VydmVyQWRkcmVzcyk7CisgICAgc3Rkb3V0Rmls
ZSA9IGZkb3BlbihzdGRvdXRTb2NrZXQsICJ3YiIpOworICAgIGR1cDIoZmlsZW5vKHN0ZG91dEZp
bGUpLCBTVERPVVRfRklMRU5PKTsKKworICAgIHN0ZGVyclNvY2tldCA9IGNvbm5lY3RUb1NlcnZl
cihzZXJ2ZXJBZGRyZXNzKTsKKyAgICBzdGRlcnJGaWxlID0gZmRvcGVuKHN0ZGVyclNvY2tldCwg
IndiIik7CisgICAgZHVwMihmaWxlbm8oc3RkZXJyRmlsZSksIFNUREVSUl9GSUxFTk8pOworfQor
Cit2b2lkIHRlYXJkb3duaU9TTGF5b3V0VGVzdENvbW11bmljYXRpb24oKQoreworICAgIGZjbG9z
ZShzdGRpbkZpbGUpOworICAgIGZjbG9zZShzdGRvdXRGaWxlKTsKKyAgICBmY2xvc2Uoc3RkZXJy
RmlsZSk7CisgICAgCisgICAgY2xvc2Uoc3RkaW5Tb2NrZXQpOworICAgIGNsb3NlKHN0ZG91dFNv
Y2tldCk7CisgICAgY2xvc2Uoc3RkZXJyU29ja2V0KTsKK30KKworI2Vsc2UKKwordm9pZCBzZXR1
cGlPU0xheW91dFRlc3RDb21tdW5pY2F0aW9uKCkgeyB9Cit2b2lkIHRlYXJkb3duaU9TTGF5b3V0
VGVzdENvbW11bmljYXRpb24oKSB7IH0KKworI2VuZGlmCkluZGV4OiBUb29scy9UZXN0UnVubmVy
U2hhcmVkL2lPU0xheW91dFRlc3RDb21tdW5pY2F0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
VGVzdFJ1bm5lclNoYXJlZC9pT1NMYXlvdXRUZXN0Q29tbXVuaWNhdGlvbi5oCShub25leGlzdGVu
dCkKKysrIFRvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvaU9TTGF5b3V0VGVzdENvbW11bmljYXRpb24u
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBv
bmNlCisKK3ZvaWQgc2V0dXBpT1NMYXlvdXRUZXN0Q29tbXVuaWNhdGlvbigpOwordm9pZCB0ZWFy
ZG93bmlPU0xheW91dFRlc3RDb21tdW5pY2F0aW9uKCk7CkluZGV4OiBUb29scy9XZWJLaXRUZXN0
UnVubmVyL1dlYktpdFRlc3RSdW5uZXIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL1dlYktpdFRlc3RSdW5uZXIueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjE0MDQzKQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9XZWJLaXRUZXN0UnVubmVyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcg
Y29weSkKQEAgLTczLDYgKzczLDcgQEAKIAkJMkU2M0VEQTExODkxQjI5MTAwMkE3QUZDIC8qIEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnRJT1MubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAyRTYzRUQ3ODE4OTFBQ0U5MDAyQTdBRkMgLyogQWNjZXNzaWJpbGl0
eVVJRWxlbWVudElPUy5tbSAqLzsgfTsKIAkJMkU2M0VEQTYxODkxQkRDMDAwMkE3QUZDIC8qIFRl
c3RSdW5uZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQkNDOTk4MTcxMUQzRjUxRTAwMTdCQ0EyIC8qIFRlc3RSdW5uZXIuY3BwICovOyB9OwogCQky
RTc0OUJGMjE4OTFFQkZBMDA3RkMxNzUgLyogRXZlbnRTZW5kZXJQcm94eUlPUy5tbSBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFNjNFRDdBMTg5MUFDRTkw
MDJBN0FGQyAvKiBFdmVudFNlbmRlclByb3h5SU9TLm1tICovOyB9OworCQkzMURBOEEzRDFFNzIw
NUNDMDBFMURGMkYgLyogaU9TTGF5b3V0VGVzdENvbW11bmljYXRpb24uY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzE0OEEwNTMxRTZGODVCNjAwRDNC
MzE2IC8qIGlPU0xheW91dFRlc3RDb21tdW5pY2F0aW9uLmNwcCAqLzsgfTsKIAkJNTEwNThBRDUx
RDY3ODgyMDAwOUE1MzhDIC8qIGxpYldlYkNvcmVUZXN0U3VwcG9ydC5keWxpYiBpbiBGcmFtZXdv
cmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxMjMwRTE2MTM4Qzc4QkYw
MEJDQ0ZDQSAvKiBsaWJXZWJDb3JlVGVzdFN1cHBvcnQuZHlsaWIgKi87IH07CiAJCTUxMDU4QUQ2
MUQ2Nzg4MjUwMDlBNTM4QyAvKiBXZWJLaXQuZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1MTY5Q0ExNDQ1MjIyRDAwRTBBOUQ3IC8q
IFdlYktpdC5mcmFtZXdvcmsgKi87IH07CiAJCTU2NDFFMkQwMTQzMzVFOTUwMDgzMDdFNSAvKiBK
U1RleHRJbnB1dENvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTY0MUUyQ0UxNDMzNUU5NTAwODMwN0U1IC8qIEpTVGV4dElucHV0Q29u
dHJvbGxlci5jcHAgKi87IH07CkBAIC0yNTIsNiArMjUzLDggQEAKIAkJMkVFNTJEMTQxODkwQTlG
QjAwMTBFRDIxIC8qIFRlc3RDb250cm9sbGVySU9TLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAub2JqY3BwOyBwYXRoID0gVGVzdENvbnRyb2xsZXJJT1MubW07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTJFRTUyRDE2MTg5MEE5RkIwMDEwRUQyMSAvKiBtYWluSU9TLm1tICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gbWFpbklPUy5tbTsgcGF0aCA9IC4u
L2lvcy9tYWluSU9TLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMTEwQkUwRjE1
QkEwMTE0MDBEMjE2QUMgLyogV2ViTm90aWZpY2F0aW9uUHJvdmlkZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV2ViTm90aWZpY2F0aW9uUHJvdmlkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMzE0OEEwNTMxRTZGODVCNjAwRDNCMzE2IC8qIGlPU0xheW91dFRlc3RDb21tdW5pY2F0aW9u
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IGlPU0xheW91dFRlc3RD
b21tdW5pY2F0aW9uLmNwcDsgcGF0aCA9IC4uL1Rlc3RSdW5uZXJTaGFyZWQvaU9TTGF5b3V0VGVz
dENvbW11bmljYXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTQ4QTA1
NDFFNkY4NUI2MDBEM0IzMTYgLyogaU9TTGF5b3V0VGVzdENvbW11bmljYXRpb24uaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gaU9TTGF5b3V0VGVzdENvbW11bmljYXRpb24uaDsg
cGF0aCA9IC4uL1Rlc3RSdW5uZXJTaGFyZWQvaU9TTGF5b3V0VGVzdENvbW11bmljYXRpb24uaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzE2NEM4RUYxNUQxQURBMTAwRUYxRkUwIC8q
IFdlYk5vdGlmaWNhdGlvblByb3ZpZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFdlYk5vdGlmaWNhdGlvblByb3ZpZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMzc4RDQ0MjIxMzM0NkQwMDAwNkE3NzdCIC8qIGNvbmZpZy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBjb25maWcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDEyMzBFMTYx
MzhDNzhCRjAwQkNDRkNBIC8qIGxpYldlYkNvcmVUZXN0U3VwcG9ydC5keWxpYiAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9ICJjb21waWxlZC5tYWNoLW8u
ZHlsaWIiOyBwYXRoID0gbGliV2ViQ29yZVRlc3RTdXBwb3J0LmR5bGliOyBzb3VyY2VUcmVlID0g
QlVJTFRfUFJPRFVDVFNfRElSOyB9OwpAQCAtNDUwLDYgKzQ1Myw4IEBACiAJCTBGMThFNzFBMUQ2
QkM0QkMwMDI3RTU0NyAvKiBUZXN0UnVubmVyU2hhcmVkICovID0gewogCQkJaXNhID0gUEJYR3Jv
dXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQkzMTQ4QTA1MzFFNkY4NUI2MDBEM0IzMTYgLyogaU9T
TGF5b3V0VGVzdENvbW11bmljYXRpb24uY3BwICovLAorCQkJCTMxNDhBMDU0MUU2Rjg1QjYwMEQz
QjMxNiAvKiBpT1NMYXlvdXRUZXN0Q29tbXVuaWNhdGlvbi5oICovLAogCQkJCTBGMThFNzFCMUQ2
QkM0RTYwMDI3RTU0NyAvKiBCaW5kaW5ncyAqLywKIAkJCQkwRjczQjU0NzFCQTc4MkZFMDA0QjNF
RjQgLyogVUlTY3JpcHRDb250ZXh0ICovLAogCQkJKTsKQEAgLTk3MCw2ICs5NzUsNyBAQAogCQkJ
CUExODUxMDQwMUI5QUUxMzEwMDc0NEFFQiAvKiBQaXhlbER1bXBTdXBwb3J0LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUExODUxMDQxMUI5QUUxMzgwMDc0NEFFQiAvKiBUZXN0Q29udHJvbGxlci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlBMTg1MTAzQjFCOUFFMEUyMDA3NDRBRUIgLyogVGVzdENv
bnRyb2xsZXJDb2NvYS5tbSBpbiBTb3VyY2VzICovLAorCQkJCTMxREE4QTNEMUU3MjA1Q0MwMEUx
REYyRiAvKiBpT1NMYXlvdXRUZXN0Q29tbXVuaWNhdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlBMTg1MTA0MjFCOUFFMTNFMDA3NDRBRUIgLyogVGVzdEludm9jYXRpb24uY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQTE4NTEwM0QxQjlBRTEwNjAwNzQ0QUVCIC8qIFRlc3RJbnZvY2F0aW9uQ0cu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY2MjJDRTkxQkJCM0ExQTAwODM4QUQzIC8qIFRlc3RP
cHRpb25zLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9p
b3MvVGVzdENvbnRyb2xsZXJJT1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9pb3MvVGVzdENvbnRyb2xsZXJJT1MubW0JKHJldmlzaW9uIDIxNDA0MykKKysrIFRvb2xz
L1dlYktpdFRlc3RSdW5uZXIvaW9zL1Rlc3RDb250cm9sbGVySU9TLm1tCSh3b3JraW5nIGNvcHkp
CkBAIC0zMSw2ICszMSw3IEBACiAjaW1wb3J0ICJUZXN0SW52b2NhdGlvbi5oIgogI2ltcG9ydCAi
VGVzdFJ1bm5lcldLV2ViVmlldy5oIgogI2ltcG9ydCAiVUlLaXRTUEkuaCIKKyNpbXBvcnQgImlP
U0xheW91dFRlc3RDb21tdW5pY2F0aW9uLmgiCiAjaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRp
b24uaD4KICNpbXBvcnQgPFVJS2l0L1VJS2l0Lmg+CiAjaW1wb3J0IDxXZWJLaXQvV0tQcmVmZXJl
bmNlc1JlZlByaXZhdGUuaD4KQEAgLTQ5LDIxICs1MCwxMiBAQCB2b2lkIFRlc3RDb250cm9sbGVy
Ojpub3RpZnlEb25lKCkKIAogdm9pZCBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1Jbml0aWFsaXpl
KCkKIHsKLSAgICBjb25zdCBjaGFyKiBpZGVudGlmaWVyID0gZ2V0ZW52KCJJUENfSURFTlRJRklF
UiIpOwotICAgIGNvbnN0IGNoYXIgKnN0ZGluUGF0aCA9IFtbTlNTdHJpbmcgc3RyaW5nV2l0aEZv
cm1hdDpAIi90bXAvJXNfSU4iLCBpZGVudGlmaWVyXSBVVEY4U3RyaW5nXTsKLSAgICBjb25zdCBj
aGFyICpzdGRvdXRQYXRoID0gW1tOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiL3RtcC8lc19P
VVQiLCBpZGVudGlmaWVyXSBVVEY4U3RyaW5nXTsKLSAgICBjb25zdCBjaGFyICpzdGRlcnJQYXRo
ID0gW1tOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiL3RtcC8lc19FUlJPUiIsIGlkZW50aWZp
ZXJdIFVURjhTdHJpbmddOwotCi0gICAgaW50IGluZmQgPSBvcGVuKHN0ZGluUGF0aCwgT19SRFdS
KTsKLSAgICBkdXAyKGluZmQsIFNURElOX0ZJTEVOTyk7Ci0gICAgaW50IG91dGZkID0gb3Blbihz
dGRvdXRQYXRoLCBPX1JEV1IpOwotICAgIGR1cDIob3V0ZmQsIFNURE9VVF9GSUxFTk8pOwotICAg
IGludCBlcnJmZCA9IG9wZW4oc3RkZXJyUGF0aCwgT19SRFdSIHwgT19OT05CTE9DSyk7Ci0gICAg
ZHVwMihlcnJmZCwgU1RERVJSX0ZJTEVOTyk7CisgICAgc2V0dXBpT1NMYXlvdXRUZXN0Q29tbXVu
aWNhdGlvbigpOwogfQogCiB2b2lkIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybURlc3Ryb3koKQog
eworICAgIHRlYXJkb3duaU9TTGF5b3V0VGVzdENvbW11bmljYXRpb24oKTsKIH0KIAogdm9pZCBU
ZXN0Q29udHJvbGxlcjo6aW5pdGlhbGl6ZUluamVjdGVkQnVuZGxlUGF0aCgpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>304837</attachid>
            <date>2017-03-17 17:01:34 -0700</date>
            <delta_ts>2017-03-20 08:51:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-169419-20170317170133.patch</filename>
            <type>text/plain</type>
            <size>27201</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIxNDEyNikKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDQ2IEBACisyMDE3LTAzLTE3ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICBVc2UgVENQIGluc3RlYWQgb2YgRklGT3MgZm9yIFNpbXVsYXRvci9EZXZp
Y2UgY29tbXVuaWNhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTY5NDE5CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zMDk0OTYxNT4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIER1bXBSZW5kZXJU
cmVlL0R1bXBSZW5kZXJUcmVlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICog
RHVtcFJlbmRlclRyZWUvbWFjL0R1bXBSZW5kZXJUcmVlLm1tOgorICAgICAgICAoZHVtcFJlbmRl
clRyZWUpOiBDYWxsIHNldHVwL3RlYXJkb3duaU9TTGF5b3V0VGVzdENvbW11bmljYXRpb24oKSBp
bnN0ZWFkIG9mIHVzaW5nIEZJRk9zLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9p
b3MucHk6CisgICAgICAgIChJT1NQb3J0LnNldHVwX3Rlc3RfcnVuKTogU2V0dXAgZWFjaCBkZXZp
Y2UuCisgICAgICAgIChJT1NQb3J0LmNsZWFuX3VwX3Rlc3RfcnVuKTogVGVhcmRvd24gZWFjaCBk
ZXZpY2UuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L3NpbXVsYXRvcl9wcm9jZXNz
LnB5OgorICAgICAgICAoU2ltdWxhdG9yUHJvY2Vzcyk6CisgICAgICAgIChTaW11bGF0b3JQcm9j
ZXNzLk5vbkJsb2NraW5nRmlsZUZyb21Tb2NrZXQpOiBBZGQgdG8gd29yayBhcm91bmQgc2hvcnRj
b21pbmdzIGluIFB5dGhvbiAy4oCZcyBtYWtlZmlsZS4KKyAgICAgICAgKFNpbXVsYXRvclByb2Nl
c3MuTm9uQmxvY2tpbmdGaWxlRnJvbVNvY2tldC5fX2luaXRfXyk6IEluaXRpYWxpemUgZmlsZSB3
aXRoIHNvY2tldC4KKyAgICAgICAgKFNpbXVsYXRvclByb2Nlc3MuUmVhZEZpbGVTb2NrZXQuY2xv
c2UpOiBDbG9zZSBmaWxlIGFuZCB0aGVuIHNvY2tldDsKKyAgICAgICAgKFNpbXVsYXRvclByb2Nl
c3MuX19pbml0X18pOiBQYXNzIFRDUCBwb3J0IG92ZXIgZW52aXJvbm1lbnQsIHJlbW92ZSBGSUZP
IG5hbWVzLgorICAgICAgICAoU2ltdWxhdG9yUHJvY2Vzcy5fX2dldGF0dHJfXyk6IEV4cG9zZSBh
bGwgZmlsZSBhdHRyaWJ1dGVzLgorICAgICAgICAoU2ltdWxhdG9yUHJvY2Vzcy5fYWNjZXB0X2Nv
bm5lY3Rpb25fY3JlYXRlX2ZpbGUpOiBXYWl0IGZvciBjb25uZWN0aW9uIGZyb20gc2VydmVyIGFu
ZCBjcmVhdGUgYW5kIHJldHVybgorICAgICAgICBhIGZpbGUtbGlrZSBvYmplY3QgZnJvbSB0aGUg
aW5jb21pbmcgY29ubmVjdGlvbi4KKyAgICAgICAgKFNpbXVsYXRvclByb2Nlc3MuX3N0YXJ0KTog
VXNlIFRDUCBjb25uZWN0aW9ucyBpbnN0ZWFkIG9mIEZJRk9zLgorICAgICAgICAoU2ltdWxhdG9y
UHJvY2Vzcy5fc3RhcnQuaGFuZGxlcik6IE91dHB1dCBzZXJ2ZXIgcG9ydCBpbiB0aW1lb3V0IGV4
Y2VwdGlvbi4KKyAgICAgICAgKFNpbXVsYXRvclByb2Nlc3MuX3Jlc2V0KTogRGVsZXRlZC4KKyAg
ICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3hjb2RlL2RldmljZS5weToKKyAgICAgICAgKERldmlj
ZSk6CisgICAgICAgIChEZXZpY2UuX19pbml0X18pOiBJbml0aWFsaXplIHRoaXMgZGV2aWNlIGlu
IFVESUQgdG8gbGlzdGVuaW5nIHNvY2tldCBtYXAuCisgICAgICAgIChEZXZpY2UucG9ydCk6IFJl
dHVybiBwb3J0IG9mIHNvY2tldCBhc3NvY2lhdGVkIHdpdGggdGhpcyBkZXZpY2UuCisgICAgICAg
IChEZXZpY2UubGlzdGVuaW5nX3NvY2tldCk6IFJldHVybiBzb2NrZXQgYXNzb2NpYXRlZCB3aXRo
IHRoaXMgZGV2aWNlLgorICAgICAgICAoRGV2aWNlLnNldHVwKTogT3BlbiBzZXJ2ZXIgc29ja2V0
IG9uIGFuIG9wZW4gcG9ydC4KKyAgICAgICAgKERldmljZS50ZWFyZG93bik6IENsb3NlIHNlcnZl
ciBzb2NrZXQgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZGV2aWNlLgorICAgICAgICAqIFRlc3RSdW5u
ZXJTaGFyZWQvaU9TTGF5b3V0VGVzdENvbW11bmljYXRpb24uY3BwOiBBZGRlZC4KKyAgICAgICAg
KGNvbm5lY3RUb1NlcnZlcik6IFJldHVybiBzb2NrZXQgY29ubmVjdGVkIHRvIHRoZSBwcm92aWRl
ZCBzZXJ2ZXIgYWRkcmVzcy4KKyAgICAgICAgKHNldHVwaU9TTGF5b3V0VGVzdENvbW11bmljYXRp
b24pOiBDb25uZWN0IHN0ZGluLCBzdGRvdXQgYW5kIHN0ZGVyciBhcyBzb2NrZXQgdG8gYSBUQ1Ag
c2VydmVyIHJ1bm5pbmcgb24gbG9jYWxob3N0LgorICAgICAgICAodGVhcmRvd25pT1NMYXlvdXRU
ZXN0Q29tbXVuaWNhdGlvbik6IENsb3NlIHN0ZGluLCBzdGRvdXQgYW5kIHN0ZGVyciBUQ1Agc29j
a2V0cy4KKyAgICAgICAgKiBUZXN0UnVubmVyU2hhcmVkL2lPU0xheW91dFRlc3RDb21tdW5pY2F0
aW9uLmg6IEFkZGVkLgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvV2ViS2l0VGVzdFJ1bm5l
ci54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIv
aW9zL1Rlc3RDb250cm9sbGVySU9TLm1tOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6
cGxhdGZvcm1Jbml0aWFsaXplKTogQ2FsbCBzZXR1cGlPU0xheW91dFRlc3RDb21tdW5pY2F0aW9u
KCkgaW5zdGVhZCBvZiB1c2luZyBGSUZPcy4KKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6
OnBsYXRmb3JtRGVzdHJveSk6IENhbGwgdGVhcmRvd25pT1NMYXlvdXRUZXN0Q29tbXVuaWNhdGlv
bigpLgorCiAyMDE3LTAzLTE3ICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgog
CiAgICAgICAgIFVzZSBVU0VfSU5URVJOQUxfU0RLIHRvIGNvbXB1dGUgRU5BQkxFX0ZBU1RfSklU
X1BFUk1JU1NJT05TIGluc3RlYWQgb2YgSEFWRV9JTlRFUk5BTF9TREsKSW5kZXg6IFRvb2xzL0R1
bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjE0MTI2KQorKysgVG9vbHMvRHVtcFJlbmRlclRy
ZWUvRHVtcFJlbmRlclRyZWUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5
KQpAQCAtODAsNiArODAsNyBAQAogCQkyRDQwM0YxQjE1MDg3MjA5MDA1MzU4RDIgLyogTGF5b3V0
VGVzdEhlbHBlci5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMkQ0MDNFQTIxNTA4NzE0MjAwNTM1OEQyIC8qIExheW91dFRlc3RIZWxwZXIubSAqLzsgfTsK
IAkJMkRBMkUzQTUxRTFCQTU0MTAwQTNCQkQwIC8qIER1bXBSZW5kZXJUcmVlU3BlbGxDaGVja2Vy
Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkRBMkUz
QTQxRTFCQTU0MTAwQTNCQkQwIC8qIER1bXBSZW5kZXJUcmVlU3BlbGxDaGVja2VyLm1tICovOyB9
OwogCQkzMTExN0IzRDE1RDlBNTZBMDAxNjNCQzggLyogTW9ja1dlYk5vdGlmaWNhdGlvblByb3Zp
ZGVyLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEx
MTdCM0IxNUQ5QTU2QTAwMTYzQkM4IC8qIE1vY2tXZWJOb3RpZmljYXRpb25Qcm92aWRlci5tbSAq
LzsgfTsKKwkJMzEyOTQzRjkxRTcxRjJCNDAwMUVFMkNDIC8qIGlPU0xheW91dFRlc3RDb21tdW5p
Y2F0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDMxNDhBMDU1MUU2RjkwRjQwMEQzQjMxNiAvKiBpT1NMYXlvdXRUZXN0Q29tbXVuaWNhdGlvbi5j
cHAgKi87IH07CiAJCTQ0NjRDQUJFMUMyMEEwOEIwMEU1QkI1NSAvKiBEdW1wUmVuZGVyVHJlZUFw
cE1haW4ubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0
NDY0Q0FCRDFDMjBBMDcwMDBFNUJCNTUgLyogRHVtcFJlbmRlclRyZWVBcHBNYWluLm1tICovOyB9
OwogCQk0QUQ2QTExNDEzQzgxMjQwMDBFQTk3MzcgLyogRm9ybVZhbHVlLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRBRDZBMTEzMTNDODEyNDAwMEVB
OTczNyAvKiBGb3JtVmFsdWUuY3BwICovOyB9OwogCQk1MTA2ODAzRTE1Q0M3QjEwMDAxQThBMjMg
LyogU2xvd05QUE5ldy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1MTA2ODAzRDE1Q0M3QjEwMDAxQThBMjMgLyogU2xvd05QUE5ldy5jcHAgKi87IH07
CkBAIC0yOTQsNiArMjk1LDggQEAKIAkJMkRBMkUzQTQxRTFCQTU0MTAwQTNCQkQwIC8qIER1bXBS
ZW5kZXJUcmVlU3BlbGxDaGVja2VyLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBuYW1lID0gRHVtcFJlbmRlclRyZWVTcGVsbENoZWNrZXIubW07IHBhdGggPSBtYWMvRHVtcFJl
bmRlclRyZWVTcGVsbENoZWNrZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMx
MTE3QjNBMTVEOUE1NkEwMDE2M0JDOCAvKiBNb2NrV2ViTm90aWZpY2F0aW9uUHJvdmlkZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTW9ja1dlYk5vdGlmaWNhdGlvblByb3Zp
ZGVyLmg7IHBhdGggPSBtYWMvTW9ja1dlYk5vdGlmaWNhdGlvblByb3ZpZGVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxMTE3QjNCMTVEOUE1NkEwMDE2M0JDOCAvKiBNb2NrV2Vi
Tm90aWZpY2F0aW9uUHJvdmlkZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7
IG5hbWUgPSBNb2NrV2ViTm90aWZpY2F0aW9uUHJvdmlkZXIubW07IHBhdGggPSBtYWMvTW9ja1dl
Yk5vdGlmaWNhdGlvblByb3ZpZGVyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkz
MTQ4QTA1NTFFNkY5MEY0MDBEM0IzMTYgLyogaU9TTGF5b3V0VGVzdENvbW11bmljYXRpb24uY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gaU9TTGF5b3V0VGVzdENvbW11
bmljYXRpb24uY3BwOyBwYXRoID0gLi4vVGVzdFJ1bm5lclNoYXJlZC9pT1NMYXlvdXRUZXN0Q29t
bXVuaWNhdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxNDhBMDU2MUU2
RjkwRjQwMEQzQjMxNiAvKiBpT1NMYXlvdXRUZXN0Q29tbXVuaWNhdGlvbi5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBpT1NMYXlvdXRUZXN0Q29tbXVuaWNhdGlvbi5oOyBwYXRo
ID0gLi4vVGVzdFJ1bm5lclNoYXJlZC9pT1NMYXlvdXRUZXN0Q29tbXVuaWNhdGlvbi5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMkE3MEFBQjAzNzA1RTFGMDBDOTE3ODMgLyogRHVt
cFJlbmRlclRyZWVQcmVmaXguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRHVt
cFJlbmRlclRyZWVQcmVmaXguaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzc1RjA5
NzEwREFDM0NCNjAwQzhCNEU1IC8qIFdlYktpdFdlaWdodFdhdGNoZXIxMDAudHRmICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gZmlsZTsgbmFtZSA9IFdl
YktpdFdlaWdodFdhdGNoZXIxMDAudHRmOyBwYXRoID0gZm9udHMvV2ViS2l0V2VpZ2h0V2F0Y2hl
cjEwMC50dGY7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3NUYwOTcyMERBQzNDQjYw
MEM4QjRFNSAvKiBXZWJLaXRXZWlnaHRXYXRjaGVyMjAwLnR0ZiAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IGZpbGU7IG5hbWUgPSBXZWJLaXRXZWlnaHRX
YXRjaGVyMjAwLnR0ZjsgcGF0aCA9IGZvbnRzL1dlYktpdFdlaWdodFdhdGNoZXIyMDAudHRmOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDcyLDYgKzQ3NSw3IEBACiAJCQlpc2EgPSBQ
QlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAogCQkJCTBGMThFNkYxMUQ2QjlDNjQwMDI3RTU0NyAv
KiBEZXJpdmVkU291cmNlcy5tYWtlICovLAorCQkJCTMxNDhBMDY1MUU2RjkwRjQwMEQzQjMxNiAv
KiBUZXN0UnVubmVyU2hhcmVkICovLAogCQkJCTBGMThFNkU3MUQ2QjlCRjUwMDI3RTU0NyAvKiBV
SVNjcmlwdENvbnRleHQgKi8sCiAJCQkJQTExNThENkExODkyN0NFMTAwODhDMTdCIC8qIGlvcyAq
LywKIAkJCQlBMTM0RTUzNDE4OTA1RTZDMDA5MDFEMDYgLyogY29uZmlnLmggKi8sCkBAIC02OTUs
NiArNjk5LDE2IEBACiAJCQluYW1lID0gTGF5b3V0VGVzdEhlbHBlcjsKIAkJCXNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7CiAJCX07CisJCTMxNDhBMDY1MUU2RjkwRjQwMEQzQjMxNiAvKiBUZXN0UnVu
bmVyU2hhcmVkICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJ
CQkzMTQ4QTA1NTFFNkY5MEY0MDBEM0IzMTYgLyogaU9TTGF5b3V0VGVzdENvbW11bmljYXRpb24u
Y3BwICovLAorCQkJCTMxNDhBMDU2MUU2RjkwRjQwMEQzQjMxNiAvKiBpT1NMYXlvdXRUZXN0Q29t
bXVuaWNhdGlvbi5oICovLAorCQkJKTsKKwkJCW5hbWUgPSBUZXN0UnVubmVyU2hhcmVkOworCQkJ
cGF0aCA9IC4uL1dlYktpdFRlc3RSdW5uZXI7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwor
CQl9OwogCQk0MTdEQTkxODEzNzM2NzREMDA3QzU3RkIgLyogV2ViQ29yZVRlc3RTdXBwb3J0ICov
ID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKQEAgLTExNDUsNiArMTE1
OSw3IEBACiAJCQkJN0NCQkMzMjMxRERGQ0Y5QTAwNzg2QjlEIC8qIFRlc3RPcHRpb25zLm1tIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEYxOEU3MEYxRDZCQUNCNjAwMjdFNTQ3IC8qIFVJU2NyaXB0Q29u
dHJvbGxlck1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUJDOUQ5MDI0MEM5NzQ3MkUwMDk5QTRB
MyAvKiBXb3JrUXVldWUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMzEyOTQzRjkxRTcxRjJCNDAw
MUVFMkNDIC8qIGlPU0xheW91dFRlc3RDb21tdW5pY2F0aW9uLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUJDQTE4QjI2MEM5QjAxNUMwMDExNDM2OSAvKiBXb3JrUXVldWVJdGVtTWFjLm1tIGluIFNv
dXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9
IDA7CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRyZWUubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0R1bXBSZW5kZXJUcmVlLm1tCShy
ZXZpc2lvbiAyMTQxMjYpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRy
ZWUubW0JKHdvcmtpbmcgY29weSkKQEAgLTEwNCw2ICsxMDQsNyBAQAogI2lmIFBMQVRGT1JNKElP
UykKICNpbXBvcnQgIkR1bXBSZW5kZXJUcmVlQnJvd3NlclZpZXcuaCIKICNpbXBvcnQgIlVJS2l0
U1BJLmgiCisjaW1wb3J0ICJpT1NMYXlvdXRUZXN0Q29tbXVuaWNhdGlvbi5oIgogI2ltcG9ydCA8
UXVhcnR6Q29yZS9RdWFydHpDb3JlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0NvcmVHcmFwaGljc1NQ
SS5oPgogI2ltcG9ydCA8V2ViS2l0L1dBS1dpbmRvdy5oPgpAQCAtMTIzNiwxNyArMTIzNyw3IEBA
IHZvaWQgd3JpdGVDcmFzaGVkTWVzc2FnZU9uRmF0YWxFcnJvcihpbnQKIHZvaWQgZHVtcFJlbmRl
clRyZWUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKmFyZ3ZbXSkKIHsKICNpZiBQTEFURk9STShJT1Mp
Ci0gICAgY29uc3QgY2hhciogaWRlbnRpZmllciA9IGdldGVudigiSVBDX0lERU5USUZJRVIiKTsK
LSAgICBjb25zdCBjaGFyICpzdGRpblBhdGggPSBbW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6
QCIvdG1wLyVzX0lOIiwgaWRlbnRpZmllcl0gVVRGOFN0cmluZ107Ci0gICAgY29uc3QgY2hhciAq
c3Rkb3V0UGF0aCA9IFtbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIi90bXAvJXNfT1VUIiwg
aWRlbnRpZmllcl0gVVRGOFN0cmluZ107Ci0gICAgY29uc3QgY2hhciAqc3RkZXJyUGF0aCA9IFtb
TlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIi90bXAvJXNfRVJST1IiLCBpZGVudGlmaWVyXSBV
VEY4U3RyaW5nXTsKLQotICAgIGludCBpbmZkID0gb3BlbihzdGRpblBhdGgsIE9fUkRXUik7Ci0g
ICAgZHVwMihpbmZkLCBTVERJTl9GSUxFTk8pOwotICAgIGludCBvdXRmZCA9IG9wZW4oc3Rkb3V0
UGF0aCwgT19SRFdSKTsKLSAgICBkdXAyKG91dGZkLCBTVERPVVRfRklMRU5PKTsKLSAgICBpbnQg
ZXJyZmQgPSBvcGVuKHN0ZGVyclBhdGgsIE9fUkRXUiB8IE9fTk9OQkxPQ0spOwotICAgIGR1cDIo
ZXJyZmQsIFNUREVSUl9GSUxFTk8pOworICAgIHNldHVwaU9TTGF5b3V0VGVzdENvbW11bmljYXRp
b24oKTsKICNlbmRpZgogCiAgICAgc2lnbmFsKFNJR0lMTCwgJndyaXRlQ3Jhc2hlZE1lc3NhZ2VP
bkZhdGFsRXJyb3IpOwpAQCAtMTMwNyw5ICsxMjk4LDcgQEAgdm9pZCBkdW1wUmVuZGVyVHJlZShp
bnQgYXJnYywgY29uc3QgY2hhcgogICAgIH0KIAogI2lmIFBMQVRGT1JNKElPUykKLSAgICBjbG9z
ZShpbmZkKTsKLSAgICBjbG9zZShvdXRmZCk7Ci0gICAgY2xvc2UoZXJyZmQpOworICAgIHRlYXJk
b3duaU9TTGF5b3V0VGVzdENvbW11bmljYXRpb24oKTsKICNlbmRpZgogfQogCkluZGV4OiBUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvcG9ydC9pb3MucHkJKHJldmlzaW9uIDIxNDEyNikKKysrIFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvcG9ydC9pb3MucHkJKHdvcmtpbmcgY29weSkKQEAgLTkxLDMgKzkxLDEyIEBA
IGNsYXNzIElPU1BvcnQoRGFyd2luUG9ydCk6CiAgICAgICAgICAgICAjIGNyYXNoLCBidXQgdGhp
cyBjcmFzaCB3aWxsIG9jY3VyIHBvc3QtbGF1bmNoLCBhZnRlciBpbnN0YWxsX2FwcCBoYXMgYWxy
ZWFkeSBraWxsZWQgdGhlIHByb2Nlc3MuCiAgICAgICAgICAgICBpZiBub3QgZGV2aWNlLmluc3Rh
bGxfYXBwKHNlbGYuX3BhdGhfdG9fZHJpdmVyKCksIHsnRFlMRF9MSUJSQVJZX1BBVEgnOiBzZWxm
Ll9idWlsZF9wYXRoKCl9KToKICAgICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ0Zh
aWxlZCB0byBpbnN0YWxsIGFwcCB7fSBvbiBkZXZpY2Uge30nLmZvcm1hdChzZWxmLl9wYXRoX3Rv
X2RyaXZlcigpLCBkZXZpY2UudWRpZCkpCisKKyAgICAgICAgZm9yIGkgaW4geHJhbmdlKHNlbGYu
Y2hpbGRfcHJvY2Vzc2VzKCkpOgorICAgICAgICAgICAgc2VsZi5kZXZpY2VfZm9yX3dvcmtlcl9u
dW1iZXIoaSkuc2V0dXAoKQorCisgICAgZGVmIGNsZWFuX3VwX3Rlc3RfcnVuKHNlbGYpOgorICAg
ICAgICBzdXBlcihJT1NQb3J0LCBzZWxmKS5jbGVhbl91cF90ZXN0X3J1bigpCisKKyAgICAgICAg
Zm9yIGkgaW4geHJhbmdlKHNlbGYuY2hpbGRfcHJvY2Vzc2VzKCkpOgorICAgICAgICAgICAgc2Vs
Zi5kZXZpY2VfZm9yX3dvcmtlcl9udW1iZXIoaSkudGVhcmRvd24oKQpJbmRleDogVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9wb3J0L3NpbXVsYXRvcl9wcm9jZXNzLnB5Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9zaW11bGF0b3JfcHJvY2Vzcy5weQkocmV2aXNpb24g
MjE0MTI2KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3NpbXVsYXRvcl9wcm9jZXNz
LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw2IEBAIGltcG9ydCBzaWduYWwKIGltcG9y
dCB0aW1lCiAKIGZyb20gd2Via2l0cHkucG9ydC5zZXJ2ZXJfcHJvY2VzcyBpbXBvcnQgU2VydmVy
UHJvY2VzcwotZnJvbSB3ZWJraXRweS54Y29kZS5zaW11bGF0b3IgaW1wb3J0IFNpbXVsYXRvcgog
CiAKIGNsYXNzIFNpbXVsYXRvclByb2Nlc3MoU2VydmVyUHJvY2Vzcyk6CkBAIC01Niw2NCArNTUs
NjEgQEAgY2xhc3MgU2ltdWxhdG9yUHJvY2VzcyhTZXJ2ZXJQcm9jZXNzKToKICAgICAgICAgICAg
ICAgICB0aW1lLnNsZWVwKDAuMDEpICAjIEluIHNlY29uZHMKICAgICAgICAgICAgIHJldHVybiBz
ZWxmLnJldHVybmNvZGUKIAorICAgICMgUHl0aG9uIDIncyBpbXBsZW1lbnRhdGlvbiBvZiBtYWtl
ZmlsZSBkb2VzIG5vdCByZXR1cm4KKyAgICAjIGEgbm9uLWJsb2NraW5nIGZpbGUuCisgICAgY2xh
c3MgTm9uQmxvY2tpbmdGaWxlRnJvbVNvY2tldChvYmplY3QpOgorCisgICAgICAgIGRlZiBfX2lu
aXRfXyhzZWxmLCBzb2NrLCB0eXBlKToKKyAgICAgICAgICAgIHNlbGYuc29ja2V0ID0gc29jawor
ICAgICAgICAgICAgc2VsZi5fZmlsZSA9IG9zLmZkb3Blbihzb2NrLmZpbGVubygpLCB0eXBlLCAw
KQorICAgICAgICAgICAgU2VydmVyUHJvY2Vzcy5fc2V0X2ZpbGVfbm9uYmxvY2tpbmcoc2VsZi5f
ZmlsZSkKKworICAgICAgICBkZWYgX19nZXRhdHRyX18oc2VsZiwgbmFtZSk6CisgICAgICAgICAg
ICByZXR1cm4gZ2V0YXR0cihzZWxmLl9maWxlLCBuYW1lKQorCisgICAgICAgIGRlZiBjbG9zZShz
ZWxmKToKKyAgICAgICAgICAgIHJlc3VsdCA9IHNlbGYuX2ZpbGUuY2xvc2UoKQorICAgICAgICAg
ICAgc2VsZi5zb2NrZXQuY2xvc2UoKQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdAorCisKICAg
ICBkZWYgX19pbml0X18oc2VsZiwgcG9ydF9vYmosIG5hbWUsIGNtZCwgZW52PU5vbmUsIHVuaXZl
cnNhbF9uZXdsaW5lcz1GYWxzZSwgdHJlYXRfbm9fZGF0YV9hc19jcmFzaD1GYWxzZSwgd29ya2Vy
X251bWJlcj1Ob25lKToKICAgICAgICAgc2VsZi5fYnVuZGxlX2lkID0gcG9ydF9vYmouYXBwX2lk
ZW50aWZpZXJfZnJvbV9idW5kbGUoY21kWzBdKQogICAgICAgICBzZWxmLl9kZXZpY2UgPSBwb3J0
X29iai5kZXZpY2VfZm9yX3dvcmtlcl9udW1iZXIod29ya2VyX251bWJlcikKLSAgICAgICAgZW52
WydJUENfSURFTlRJRklFUiddID0gc2VsZi5fYnVuZGxlX2lkICsgJy0nICsgc2VsZi5fZGV2aWNl
LnVkaWQKLQotICAgICAgICAjIFRoaXMgbG9jYXRpb24gbWF0Y2hlcyB0aGUgbG9jYXRpb24gdXNl
ZCBieSBXZWJLaXRUZXN0UnVubmVyIGFuZCBEdW1wUmVuZGVyVHJlZQotICAgICAgICAjIGZvciB0
aGUgb3RoZXIgc2lkZSBvZiB0aGVzZSBmaWZvcy4KLSAgICAgICAgZmlsZV9sb2NhdGlvbiA9ICcv
dG1wLycgKyBlbnZbJ0lQQ19JREVOVElGSUVSJ10KLSAgICAgICAgc2VsZi5faW5fcGF0aCA9IGZp
bGVfbG9jYXRpb24gKyAnX0lOJwotICAgICAgICBzZWxmLl9vdXRfcGF0aCA9IGZpbGVfbG9jYXRp
b24gKyAnX09VVCcKLSAgICAgICAgc2VsZi5fZXJyb3JfcGF0aCA9IGZpbGVfbG9jYXRpb24gKyAn
X0VSUk9SJwogCisgICAgICAgIGVudlsnUE9SVCddID0gc3RyKHNlbGYuX2RldmljZS5wb3J0KCkp
CiAgICAgICAgIHN1cGVyKFNpbXVsYXRvclByb2Nlc3MsIHNlbGYpLl9faW5pdF9fKHBvcnRfb2Jq
LCBuYW1lLCBjbWQsIGVudiwgdW5pdmVyc2FsX25ld2xpbmVzLCB0cmVhdF9ub19kYXRhX2FzX2Ny
YXNoKQogCi0gICAgZGVmIF9yZXNldChzZWxmKToKLSAgICAgICAgc3VwZXIoU2ltdWxhdG9yUHJv
Y2Vzcywgc2VsZikuX3Jlc2V0KCkKLQotICAgICAgICAjIFVubGlua3MgYXJlIG5lZWRlZCBvbiBy
ZXNldCBpbiB0aGUgZXZlbnQgdGhhdCB0aGUgUHl0aG9uIGNvZGUgdW5leHBlY3RlZGx5Ci0gICAg
ICAgICMgZmFpbHMgYmV0d2VlbiBfc3RhcnQoKSBhbmQga2lsbCgpLiAgVGhpcyBjYW4gYmUgY2F1
c2VkIGJ5IGEgU0lHS0lMTCBvciBhIGNyYXNoLgotICAgICAgICAjIFRoaXMgZW5zdXJlcyB0aGF0
IG9zLm1rZmlmbygpIHdpbGwgbm90IGJlIG9ic3RydWN0ZWQgYnkgcHJldmlvdXMgZmlmb3MuCi0g
ICAgICAgICMgT3RoZXIgZmlsZXMgd2lsbCBzdGlsbCBjYXVzZSBvcy5ta2ZpZm8oKSB0byBmYWls
LgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBvcy51bmxpbmsoc2VsZi5faW5fcGF0aCkKLSAg
ICAgICAgZXhjZXB0OgotICAgICAgICAgICAgcGFzcwotICAgICAgICB0cnk6Ci0gICAgICAgICAg
ICBvcy51bmxpbmsoc2VsZi5fb3V0X3BhdGgpCi0gICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAg
IHBhc3MKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgb3MudW5saW5rKHNlbGYuX2Vycm9yX3Bh
dGgpCi0gICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgIHBhc3MKKyAgICBAc3RhdGljbWV0aG9k
CisgICAgZGVmIF9hY2NlcHRfY29ubmVjdGlvbl9jcmVhdGVfZmlsZShzZXJ2ZXIsIHR5cGUpOgor
ICAgICAgICBjb25uZWN0aW9uLCBhZGRyZXNzID0gc2VydmVyLmFjY2VwdCgpCisgICAgICAgIGFz
c2VydCBhZGRyZXNzWzBdID09ICcxMjcuMC4wLjEnCisgICAgICAgIHJldHVybiBTaW11bGF0b3JQ
cm9jZXNzLk5vbkJsb2NraW5nRmlsZUZyb21Tb2NrZXQoY29ubmVjdGlvbiwgdHlwZSkKIAogICAg
IGRlZiBfc3RhcnQoc2VsZik6CiAgICAgICAgIGlmIHNlbGYuX3Byb2M6CiAgICAgICAgICAgICBy
YWlzZSBWYWx1ZUVycm9yKCd7fSBhbHJlYWR5IHJ1bm5pbmcnLmZvcm1hdChzZWxmLl9uYW1lKSkK
ICAgICAgICAgc2VsZi5fcmVzZXQoKQogCi0gICAgICAgIEZJRk9fUEVSTUlTU0lPTl9GTEFHUyA9
IDA2MDAgICMgT25seSBvd25lciBjYW4gcmVhZCBhbmQgd3JpdGUKLSAgICAgICAgb3MubWtmaWZv
KHNlbGYuX2luX3BhdGgsIEZJRk9fUEVSTUlTU0lPTl9GTEFHUykKLSAgICAgICAgb3MubWtmaWZv
KHNlbGYuX291dF9wYXRoLCBGSUZPX1BFUk1JU1NJT05fRkxBR1MpCi0gICAgICAgIG9zLm1rZmlm
byhzZWxmLl9lcnJvcl9wYXRoLCBGSUZPX1BFUk1JU1NJT05fRkxBR1MpCi0KLSAgICAgICAgc3Rk
b3V0ID0gb3MuZmRvcGVuKG9zLm9wZW4oc2VsZi5fb3V0X3BhdGgsIG9zLk9fUkRPTkxZIHwgb3Mu
T19OT05CTE9DSyksICdyYicpCi0gICAgICAgIHN0ZGVyciA9IG9zLmZkb3Blbihvcy5vcGVuKHNl
bGYuX2Vycm9yX3BhdGgsIG9zLk9fUkRPTkxZIHwgb3MuT19OT05CTE9DSyksICdyYicpCi0KKyAg
ICAgICAgIyBFYWNoIGRldmljZSBoYXMgYSBsaXN0ZW5pbmcgc29ja2V0IGludGl0aWxhaXplZCBk
dXJpbmcgdGhlIHBvcnQncyBzZXR1cF90ZXN0X3J1bi4KKyAgICAgICAgIyAzIGNsaWVudCBjb25u
ZWN0aW9ucyB3aWxsIGJlIGFjY2VwdGVkIGZvciBzdGRpbiwgc3Rkb3V0IGFuZCBzdGRlcnIgaW4g
dGhhdCBvcmRlci4KKyAgICAgICAgc2VsZi5fZGV2aWNlLmxpc3RlbmluZ19zb2NrZXQoKS5saXN0
ZW4oMykKICAgICAgICAgc2VsZi5fcGlkID0gc2VsZi5fZGV2aWNlLmxhdW5jaF9hcHAoc2VsZi5f
YnVuZGxlX2lkLCBzZWxmLl9jbWRbMTpdLCBlbnY9c2VsZi5fZW52KQogCiAgICAgICAgIGRlZiBo
YW5kbGVyKHNpZ251bSwgZnJhbWUpOgogICAgICAgICAgICAgYXNzZXJ0IHNpZ251bSA9PSBzaWdu
YWwuU0lHQUxSTQotICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCdUaW1lZCBvdXQgd2FpdGlu
ZyBmb3IgcHJvY2VzcyB0byBvcGVuIHt9Jy5mb3JtYXQoc2VsZi5faW5fcGF0aCkpCisgICAgICAg
ICAgICByYWlzZSBFeGNlcHRpb24oJ1RpbWVkIG91dCB3YWl0aW5nIGZvciBwcm9jZXNzIHRvIGNv
bm5lY3QgYXQgcG9ydCB7fScuZm9ybWF0KHNlbGYuX2RldmljZS5wb3J0KCkpKQogICAgICAgICBz
aWduYWwuc2lnbmFsKHNpZ25hbC5TSUdBTFJNLCBoYW5kbGVyKQogICAgICAgICBzaWduYWwuYWxh
cm0oMykgICMgSW4gc2Vjb25kcwogCiAgICAgICAgIHN0ZGluID0gTm9uZQorICAgICAgICBzdGRv
dXQgPSBOb25lCisgICAgICAgIHN0ZGVyciA9IE5vbmUKICAgICAgICAgdHJ5OgotICAgICAgICAg
ICAgc3RkaW4gPSBvcGVuKHNlbGYuX2luX3BhdGgsICd3JywgMCkgICMgT3BlbmluZyB3aXRoIG5v
IGJ1ZmZlcmluZywgbGlrZSBwb3BlbgorICAgICAgICAgICAgIyBPcmRlciBtYXR0ZXJzIGhlcmUh
CisgICAgICAgICAgICBzdGRpbiA9IFNpbXVsYXRvclByb2Nlc3MuX2FjY2VwdF9jb25uZWN0aW9u
X2NyZWF0ZV9maWxlKHNlbGYuX2RldmljZS5saXN0ZW5pbmdfc29ja2V0KCksICd3JykKKyAgICAg
ICAgICAgIHN0ZG91dCA9IFNpbXVsYXRvclByb2Nlc3MuX2FjY2VwdF9jb25uZWN0aW9uX2NyZWF0
ZV9maWxlKHNlbGYuX2RldmljZS5saXN0ZW5pbmdfc29ja2V0KCksICdyYicpCisgICAgICAgICAg
ICBzdGRlcnIgPSBTaW11bGF0b3JQcm9jZXNzLl9hY2NlcHRfY29ubmVjdGlvbl9jcmVhdGVfZmls
ZShzZWxmLl9kZXZpY2UubGlzdGVuaW5nX3NvY2tldCgpLCAncmInKQogICAgICAgICBleGNlcHQ6
CiAgICAgICAgICAgICAjIFdlIHNldCBzZWxmLl9wcm9jIGFzIF9yZXNldCgpIGFuZCBfa2lsbCgp
IGRlcGVuZCBvbiBpdC4KICAgICAgICAgICAgIHNlbGYuX3Byb2MgPSBTaW11bGF0b3JQcm9jZXNz
LlBvcGVuKHNlbGYuX3BpZCwgc3RkaW4sIHN0ZG91dCwgc3RkZXJyKQpJbmRleDogVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS94Y29kZS9kZXZpY2UucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0
cy93ZWJraXRweS94Y29kZS9kZXZpY2UucHkJKHJldmlzaW9uIDIxNDEyNikKKysrIFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkveGNvZGUvZGV2aWNlLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yMCwxMiAr
MjAsNDQgQEAKICMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKICMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAKK2ltcG9ydCBzb2NrZXQK
KworZnJvbSByYW5kb20gaW1wb3J0IHJhbmRpbnQKIAogY2xhc3MgRGV2aWNlKG9iamVjdCk6CisK
KyAgICBQT1JUX1JBTkdFID0gWzUwMDAsIDEwMDAwXQorICAgIEZPUldBUkRfUE9SVFMgPSBbODAw
MCwgODA4MCwgODQ0M10KKyAgICBVRElEX1RPX0xJU1RFTklOR19TT0NLRVQgPSB7fQorCiAgICAg
ZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUsIHVkaWQsIGhvc3QpOgogICAgICAgICBzZWxmLl9ob3N0
ID0gaG9zdAogICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCiAgICAgICAgIHNlbGYudWRpZCA9IHVk
aWQKKyAgICAgICAgaWYgdWRpZCBub3QgaW4gRGV2aWNlLlVESURfVE9fTElTVEVOSU5HX1NPQ0tF
VDoKKyAgICAgICAgICAgIERldmljZS5VRElEX1RPX0xJU1RFTklOR19TT0NLRVRbdWRpZF0gPSBO
b25lCisKKyAgICBkZWYgcG9ydChzZWxmKToKKyAgICAgICAgaWYgbm90IHNlbGYubGlzdGVuaW5n
X3NvY2tldCgpOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgcmV0dXJuIHNlbGYu
bGlzdGVuaW5nX3NvY2tldCgpLmdldHNvY2tuYW1lKClbMV0KKworICAgIGRlZiBsaXN0ZW5pbmdf
c29ja2V0KHNlbGYpOgorICAgICAgICByZXR1cm4gRGV2aWNlLlVESURfVE9fTElTVEVOSU5HX1NP
Q0tFVFtzZWxmLnVkaWRdCisKKyAgICBkZWYgc2V0dXAoc2VsZik6CisgICAgICAgIHNlcnZlciA9
IERldmljZS5VRElEX1RPX0xJU1RFTklOR19TT0NLRVRbc2VsZi51ZGlkXQorICAgICAgICBpZiBu
b3Qgc2VydmVyOgorICAgICAgICAgICAgc2VydmVyID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZf
SU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNKQorICAgICAgICAgICAgc2VydmVyLnNldHNvY2tvcHQo
c29ja2V0LlNPTF9TT0NLRVQsIHNvY2tldC5TT19SRVVTRUFERFIsIDEpCisgICAgICAgICAgICBz
ZXJ2ZXIuYmluZCgoJ2xvY2FsaG9zdCcsIDApKQorICAgICAgICAgICAgRGV2aWNlLlVESURfVE9f
TElTVEVOSU5HX1NPQ0tFVFtzZWxmLnVkaWRdID0gc2VydmVyCisKKyAgICAgICAgaWYgbm90IERl
dmljZS5VRElEX1RPX0xJU1RFTklOR19TT0NLRVRbc2VsZi51ZGlkXToKKyAgICAgICAgICAgIHJh
aXNlIFJ1bnRpbWVFcnJvcignTm8gb3BlbiBwb3J0cyBmb3VuZCcpCisKKyAgICBkZWYgdGVhcmRv
d24oc2VsZik6CisgICAgICAgIERldmljZS5VRElEX1RPX0xJU1RFTklOR19TT0NLRVRbc2VsZi51
ZGlkXSA9IE5vbmUKIAogICAgIGRlZiBpbnN0YWxsX2FwcChzZWxmLCBhcHBfcGF0aCwgZW52PU5v
bmUpOgogICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCkluZGV4OiBUb29scy9UZXN0
UnVubmVyU2hhcmVkL2lPU0xheW91dFRlc3RDb21tdW5pY2F0aW9uLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9UZXN0UnVubmVyU2hhcmVkL2lPU0xheW91dFRlc3RDb21tdW5pY2F0aW9uLmNwcAko
bm9uZXhpc3RlbnQpCisrKyBUb29scy9UZXN0UnVubmVyU2hhcmVkL2lPU0xheW91dFRlc3RDb21t
dW5pY2F0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDkwIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgImlPU0xheW91dFRlc3RDb21tdW5pY2F0
aW9uLmgiCisKKyNpZiBQTEFURk9STShJT1MpCisKKyNpbmNsdWRlIDxuZXRkYi5oPgorI2luY2x1
ZGUgPG5ldGluZXQvaW4uaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8c3lz
L3R5cGVzLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKK3N0YXRpYyBpbnQgc3RkaW5Tb2NrZXQ7
CitzdGF0aWMgaW50IHN0ZG91dFNvY2tldDsKK3N0YXRpYyBpbnQgc3RkZXJyU29ja2V0OworCitz
dGF0aWMgaW50IGNvbm5lY3RUb1NlcnZlcihzb2NrYWRkcl9pbiYgc2VydmVyQWRkcmVzcykKK3sK
KyAgICBpbnQgcmVzdWx0ID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfU1RSRUFNLCAwKTsKKyAgICBp
ZiAocmVzdWx0IDwgMCkKKyAgICAgICAgYWJvcnQoKTsKKyAgICBpZiAoY29ubmVjdChyZXN1bHQs
IChzdHJ1Y3Qgc29ja2FkZHIgKikgJnNlcnZlckFkZHJlc3MsIHNpemVvZihzZXJ2ZXJBZGRyZXNz
KSkgPCAwKQorICAgICAgICBhYm9ydCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQg
c2V0dXBpT1NMYXlvdXRUZXN0Q29tbXVuaWNhdGlvbigpCit7CisgICAgaW50IHBvcnQgPSBhdG9p
KGdldGVudigiUE9SVCIpKTsKKyAgICBpZiAocG9ydCA8PSAwKQorICAgICAgICBhYm9ydCgpOwor
CisgICAgc3RydWN0IGhvc3RlbnQqIGhvc3QgPSBnZXRob3N0YnluYW1lKCJsb2NhbGhvc3QiKTsK
KyAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gc2VydmVyQWRkcmVzczsKKyAgICBtZW1zZXQoKGNoYXIg
KikgJnNlcnZlckFkZHJlc3MsIDAsIHNpemVvZihzZXJ2ZXJBZGRyZXNzKSk7CisgICAgc2VydmVy
QWRkcmVzcy5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKyAgICBtZW1jcHkoCisgICAgICAgIChjaGFy
ICopJnNlcnZlckFkZHJlc3Muc2luX2FkZHIuc19hZGRyLAorICAgICAgICAoY2hhciAqKWhvc3Qt
PmhfYWRkciwKKyAgICAgICAgaG9zdC0+aF9sZW5ndGgpOworICAgIHNlcnZlckFkZHJlc3Muc2lu
X3BvcnQgPSBodG9ucyhwb3J0KTsKKyAgICAKKyAgICAvLyBPcmRlciBtYXR0ZXJzIQorICAgIHN0
ZGluU29ja2V0ID0gY29ubmVjdFRvU2VydmVyKHNlcnZlckFkZHJlc3MpOworICAgIGR1cDIoc3Rk
aW5Tb2NrZXQsIFNURElOX0ZJTEVOTyk7CisKKyAgICBzdGRvdXRTb2NrZXQgPSBjb25uZWN0VG9T
ZXJ2ZXIoc2VydmVyQWRkcmVzcyk7CisgICAgZHVwMihzdGRvdXRTb2NrZXQsIFNURE9VVF9GSUxF
Tk8pOworCisgICAgc3RkZXJyU29ja2V0ID0gY29ubmVjdFRvU2VydmVyKHNlcnZlckFkZHJlc3Mp
OworICAgIGR1cDIoc3RkZXJyU29ja2V0LCBTVERFUlJfRklMRU5PKTsKK30KKwordm9pZCB0ZWFy
ZG93bmlPU0xheW91dFRlc3RDb21tdW5pY2F0aW9uKCkKK3sKKyAgICBjbG9zZShzdGRpblNvY2tl
dCk7CisgICAgY2xvc2Uoc3Rkb3V0U29ja2V0KTsKKyAgICBjbG9zZShzdGRlcnJTb2NrZXQpOwor
fQorCisjZWxzZQorCit2b2lkIHNldHVwaU9TTGF5b3V0VGVzdENvbW11bmljYXRpb24oKSB7IH0K
K3ZvaWQgdGVhcmRvd25pT1NMYXlvdXRUZXN0Q29tbXVuaWNhdGlvbigpIHsgfQorCisjZW5kaWYK
SW5kZXg6IFRvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvaU9TTGF5b3V0VGVzdENvbW11bmljYXRpb24u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0UnVubmVyU2hhcmVkL2lPU0xheW91dFRlc3RDb21t
dW5pY2F0aW9uLmgJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9pT1NM
YXlvdXRUZXN0Q29tbXVuaWNhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjkgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKwordm9pZCBzZXR1cGlPU0xheW91dFRlc3RDb21t
dW5pY2F0aW9uKCk7Cit2b2lkIHRlYXJkb3duaU9TTGF5b3V0VGVzdENvbW11bmljYXRpb24oKTsK
SW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvV2ViS2l0VGVzdFJ1bm5lci54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvV2Vi
S2l0VGVzdFJ1bm5lci54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMTQxMjYp
CisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL1dlYktpdFRlc3RSdW5uZXIueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNzMsNiArNzMsNyBAQAogCQkyRTYzRURB
MTE4OTFCMjkxMDAyQTdBRkMgLyogQWNjZXNzaWJpbGl0eVVJRWxlbWVudElPUy5tbSBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFNjNFRDc4MTg5MUFDRTkw
MDJBN0FGQyAvKiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50SU9TLm1tICovOyB9OwogCQkyRTYzRURB
NjE4OTFCREMwMDAyQTdBRkMgLyogVGVzdFJ1bm5lci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0M5OTgxNzExRDNGNTFFMDAxN0JDQTIgLyogVGVz
dFJ1bm5lci5jcHAgKi87IH07CiAJCTJFNzQ5QkYyMTg5MUVCRkEwMDdGQzE3NSAvKiBFdmVudFNl
bmRlclByb3h5SU9TLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMkU2M0VEN0ExODkxQUNFOTAwMkE3QUZDIC8qIEV2ZW50U2VuZGVyUHJveHlJT1MubW0g
Ki87IH07CisJCTMxREE4QTNEMUU3MjA1Q0MwMEUxREYyRiAvKiBpT1NMYXlvdXRUZXN0Q29tbXVu
aWNhdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAzMTQ4QTA1MzFFNkY4NUI2MDBEM0IzMTYgLyogaU9TTGF5b3V0VGVzdENvbW11bmljYXRpb24u
Y3BwICovOyB9OwogCQk1MTA1OEFENTFENjc4ODIwMDA5QTUzOEMgLyogbGliV2ViQ29yZVRlc3RT
dXBwb3J0LmR5bGliIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNDEyMzBFMTYxMzhDNzhCRjAwQkNDRkNBIC8qIGxpYldlYkNvcmVUZXN0U3VwcG9ydC5k
eWxpYiAqLzsgfTsKIAkJNTEwNThBRDYxRDY3ODgyNTAwOUE1MzhDIC8qIFdlYktpdC5mcmFtZXdv
cmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjUx
NjlDQTE0NDUyMjJEMDBFMEE5RDcgLyogV2ViS2l0LmZyYW1ld29yayAqLzsgfTsKIAkJNTY0MUUy
RDAxNDMzNUU5NTAwODMwN0U1IC8qIEpTVGV4dElucHV0Q29udHJvbGxlci5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NjQxRTJDRTE0MzM1RTk1MDA4
MzA3RTUgLyogSlNUZXh0SW5wdXRDb250cm9sbGVyLmNwcCAqLzsgfTsKQEAgLTI1Miw2ICsyNTMs
OCBAQAogCQkyRUU1MkQxNDE4OTBBOUZCMDAxMEVEMjEgLyogVGVzdENvbnRyb2xsZXJJT1MubW0g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBUZXN0Q29udHJvbGxlcklP
Uy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkVFNTJEMTYxODkwQTlGQjAwMTBF
RDIxIC8qIG1haW5JT1MubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUg
PSBtYWluSU9TLm1tOyBwYXRoID0gLi4vaW9zL21haW5JT1MubW07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTMxMTBCRTBGMTVCQTAxMTQwMEQyMTZBQyAvKiBXZWJOb3RpZmljYXRpb25Q
cm92aWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJOb3RpZmljYXRpb25Qcm92aWRlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTQ4QTA1MzFFNkY4NUI2MDBEM0IzMTYgLyogaU9T
TGF5b3V0VGVzdENvbW11bmljYXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBuYW1lID0gaU9TTGF5b3V0VGVzdENvbW11bmljYXRpb24uY3BwOyBwYXRoID0gLi4vVGVzdFJ1
bm5lclNoYXJlZC9pT1NMYXlvdXRUZXN0Q29tbXVuaWNhdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTMxNDhBMDU0MUU2Rjg1QjYwMEQzQjMxNiAvKiBpT1NMYXlvdXRUZXN0
Q29tbXVuaWNhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBpT1NMYXlv
dXRUZXN0Q29tbXVuaWNhdGlvbi5oOyBwYXRoID0gLi4vVGVzdFJ1bm5lclNoYXJlZC9pT1NMYXlv
dXRUZXN0Q29tbXVuaWNhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMTY0
QzhFRjE1RDFBREExMDBFRjFGRTAgLyogV2ViTm90aWZpY2F0aW9uUHJvdmlkZXIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViTm90aWZpY2F0aW9uUHJvdmlkZXIu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzNzhENDQyMjEzMzQ2RDAwMDA2QTc3
N0IgLyogY29uZmlnLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGNvbmZpZy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk0MTIzMEUxNjEzOEM3OEJGMDBCQ0NGQ0EgLyogbGliV2ViQ29yZVRlc3RT
dXBwb3J0LmR5bGliICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gImNvbXBpbGVkLm1hY2gtby5keWxpYiI7IHBhdGggPSBsaWJXZWJDb3JlVGVzdFN1cHBv
cnQuZHlsaWI7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CkBAIC00NTAsNiAr
NDUzLDggQEAKIAkJMEYxOEU3MUExRDZCQzRCQzAwMjdFNTQ3IC8qIFRlc3RSdW5uZXJTaGFyZWQg
Ki8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTMxNDhBMDUz
MUU2Rjg1QjYwMEQzQjMxNiAvKiBpT1NMYXlvdXRUZXN0Q29tbXVuaWNhdGlvbi5jcHAgKi8sCisJ
CQkJMzE0OEEwNTQxRTZGODVCNjAwRDNCMzE2IC8qIGlPU0xheW91dFRlc3RDb21tdW5pY2F0aW9u
LmggKi8sCiAJCQkJMEYxOEU3MUIxRDZCQzRFNjAwMjdFNTQ3IC8qIEJpbmRpbmdzICovLAogCQkJ
CTBGNzNCNTQ3MUJBNzgyRkUwMDRCM0VGNCAvKiBVSVNjcmlwdENvbnRleHQgKi8sCiAJCQkpOwpA
QCAtOTcwLDYgKzk3NSw3IEBACiAJCQkJQTE4NTEwNDAxQjlBRTEzMTAwNzQ0QUVCIC8qIFBpeGVs
RHVtcFN1cHBvcnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTE4NTEwNDExQjlBRTEzODAwNzQ0
QUVCIC8qIFRlc3RDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUExODUxMDNCMUI5
QUUwRTIwMDc0NEFFQiAvKiBUZXN0Q29udHJvbGxlckNvY29hLm1tIGluIFNvdXJjZXMgKi8sCisJ
CQkJMzFEQThBM0QxRTcyMDVDQzAwRTFERjJGIC8qIGlPU0xheW91dFRlc3RDb21tdW5pY2F0aW9u
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUExODUxMDQyMUI5QUUxM0UwMDc0NEFFQiAvKiBUZXN0
SW52b2NhdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBMTg1MTAzRDFCOUFFMTA2MDA3NDRB
RUIgLyogVGVzdEludm9jYXRpb25DRy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjYyMkNFOTFC
QkIzQTFBMDA4MzhBRDMgLyogVGVzdE9wdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBU
b29scy9XZWJLaXRUZXN0UnVubmVyL2lvcy9UZXN0Q29udHJvbGxlcklPUy5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL2lvcy9UZXN0Q29udHJvbGxlcklPUy5tbQkocmV2
aXNpb24gMjE0MTI2KQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9pb3MvVGVzdENvbnRyb2xs
ZXJJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbXBvcnQgIlRlc3RJ
bnZvY2F0aW9uLmgiCiAjaW1wb3J0ICJUZXN0UnVubmVyV0tXZWJWaWV3LmgiCiAjaW1wb3J0ICJV
SUtpdFNQSS5oIgorI2ltcG9ydCAiaU9TTGF5b3V0VGVzdENvbW11bmljYXRpb24uaCIKICNpbXBv
cnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgogI2ltcG9ydCA8VUlLaXQvVUlLaXQuaD4KICNp
bXBvcnQgPFdlYktpdC9XS1ByZWZlcmVuY2VzUmVmUHJpdmF0ZS5oPgpAQCAtNDksMjEgKzUwLDEy
IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6Om5vdGlmeURvbmUoKQogCiB2b2lkIFRlc3RDb250cm9s
bGVyOjpwbGF0Zm9ybUluaXRpYWxpemUoKQogewotICAgIGNvbnN0IGNoYXIqIGlkZW50aWZpZXIg
PSBnZXRlbnYoIklQQ19JREVOVElGSUVSIik7Ci0gICAgY29uc3QgY2hhciAqc3RkaW5QYXRoID0g
W1tOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiL3RtcC8lc19JTiIsIGlkZW50aWZpZXJdIFVU
RjhTdHJpbmddOwotICAgIGNvbnN0IGNoYXIgKnN0ZG91dFBhdGggPSBbW05TU3RyaW5nIHN0cmlu
Z1dpdGhGb3JtYXQ6QCIvdG1wLyVzX09VVCIsIGlkZW50aWZpZXJdIFVURjhTdHJpbmddOwotICAg
IGNvbnN0IGNoYXIgKnN0ZGVyclBhdGggPSBbW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIv
dG1wLyVzX0VSUk9SIiwgaWRlbnRpZmllcl0gVVRGOFN0cmluZ107Ci0KLSAgICBpbnQgaW5mZCA9
IG9wZW4oc3RkaW5QYXRoLCBPX1JEV1IpOwotICAgIGR1cDIoaW5mZCwgU1RESU5fRklMRU5PKTsK
LSAgICBpbnQgb3V0ZmQgPSBvcGVuKHN0ZG91dFBhdGgsIE9fUkRXUik7Ci0gICAgZHVwMihvdXRm
ZCwgU1RET1VUX0ZJTEVOTyk7Ci0gICAgaW50IGVycmZkID0gb3BlbihzdGRlcnJQYXRoLCBPX1JE
V1IgfCBPX05PTkJMT0NLKTsKLSAgICBkdXAyKGVycmZkLCBTVERFUlJfRklMRU5PKTsKKyAgICBz
ZXR1cGlPU0xheW91dFRlc3RDb21tdW5pY2F0aW9uKCk7CiB9CiAKIHZvaWQgVGVzdENvbnRyb2xs
ZXI6OnBsYXRmb3JtRGVzdHJveSgpCiB7CisgICAgdGVhcmRvd25pT1NMYXlvdXRUZXN0Q29tbXVu
aWNhdGlvbigpOwogfQogCiB2b2lkIFRlc3RDb250cm9sbGVyOjppbml0aWFsaXplSW5qZWN0ZWRC
dW5kbGVQYXRoKCkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>304928</attachid>
            <date>2017-03-20 08:51:41 -0700</date>
            <delta_ts>2017-03-27 08:41:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-169419-20170320085140.patch</filename>
            <type>text/plain</type>
            <size>27099</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIxNDEyNikKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDQ2IEBACisyMDE3LTAzLTE3ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICBVc2UgVENQIGluc3RlYWQgb2YgRklGT3MgZm9yIFNpbXVsYXRvci9EZXZp
Y2UgY29tbXVuaWNhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTY5NDE5CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zMDk0OTYxNT4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIER1bXBSZW5kZXJU
cmVlL0R1bXBSZW5kZXJUcmVlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICog
RHVtcFJlbmRlclRyZWUvbWFjL0R1bXBSZW5kZXJUcmVlLm1tOgorICAgICAgICAoZHVtcFJlbmRl
clRyZWUpOiBDYWxsIHNldHVwL3RlYXJkb3duaU9TTGF5b3V0VGVzdENvbW11bmljYXRpb24oKSBp
bnN0ZWFkIG9mIHVzaW5nIEZJRk9zLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9p
b3MucHk6CisgICAgICAgIChJT1NQb3J0LnNldHVwX3Rlc3RfcnVuKTogU2V0dXAgZWFjaCBkZXZp
Y2UuCisgICAgICAgIChJT1NQb3J0LmNsZWFuX3VwX3Rlc3RfcnVuKTogVGVhcmRvd24gZWFjaCBk
ZXZpY2UuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L3NpbXVsYXRvcl9wcm9jZXNz
LnB5OgorICAgICAgICAoU2ltdWxhdG9yUHJvY2Vzcyk6CisgICAgICAgIChTaW11bGF0b3JQcm9j
ZXNzLk5vbkJsb2NraW5nRmlsZUZyb21Tb2NrZXQpOiBBZGQgdG8gd29yayBhcm91bmQgc2hvcnRj
b21pbmdzIGluIFB5dGhvbiAy4oCZcyBtYWtlZmlsZS4KKyAgICAgICAgKFNpbXVsYXRvclByb2Nl
c3MuTm9uQmxvY2tpbmdGaWxlRnJvbVNvY2tldC5fX2luaXRfXyk6IEluaXRpYWxpemUgZmlsZSB3
aXRoIHNvY2tldC4KKyAgICAgICAgKFNpbXVsYXRvclByb2Nlc3MuUmVhZEZpbGVTb2NrZXQuY2xv
c2UpOiBDbG9zZSBmaWxlIGFuZCB0aGVuIHNvY2tldDsKKyAgICAgICAgKFNpbXVsYXRvclByb2Nl
c3MuX19pbml0X18pOiBQYXNzIFRDUCBwb3J0IG92ZXIgZW52aXJvbm1lbnQsIHJlbW92ZSBGSUZP
IG5hbWVzLgorICAgICAgICAoU2ltdWxhdG9yUHJvY2Vzcy5fX2dldGF0dHJfXyk6IEV4cG9zZSBh
bGwgZmlsZSBhdHRyaWJ1dGVzLgorICAgICAgICAoU2ltdWxhdG9yUHJvY2Vzcy5fYWNjZXB0X2Nv
bm5lY3Rpb25fY3JlYXRlX2ZpbGUpOiBXYWl0IGZvciBjb25uZWN0aW9uIGZyb20gc2VydmVyIGFu
ZCBjcmVhdGUgYW5kIHJldHVybgorICAgICAgICBhIGZpbGUtbGlrZSBvYmplY3QgZnJvbSB0aGUg
aW5jb21pbmcgY29ubmVjdGlvbi4KKyAgICAgICAgKFNpbXVsYXRvclByb2Nlc3MuX3N0YXJ0KTog
VXNlIFRDUCBjb25uZWN0aW9ucyBpbnN0ZWFkIG9mIEZJRk9zLgorICAgICAgICAoU2ltdWxhdG9y
UHJvY2Vzcy5fc3RhcnQuaGFuZGxlcik6IE91dHB1dCBzZXJ2ZXIgcG9ydCBpbiB0aW1lb3V0IGV4
Y2VwdGlvbi4KKyAgICAgICAgKFNpbXVsYXRvclByb2Nlc3MuX3Jlc2V0KTogRGVsZXRlZC4KKyAg
ICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3hjb2RlL2RldmljZS5weToKKyAgICAgICAgKERldmlj
ZSk6CisgICAgICAgIChEZXZpY2UuX19pbml0X18pOiBJbml0aWFsaXplIHRoaXMgZGV2aWNlIGlu
IFVESUQgdG8gbGlzdGVuaW5nIHNvY2tldCBtYXAuCisgICAgICAgIChEZXZpY2UucG9ydCk6IFJl
dHVybiBwb3J0IG9mIHNvY2tldCBhc3NvY2lhdGVkIHdpdGggdGhpcyBkZXZpY2UuCisgICAgICAg
IChEZXZpY2UubGlzdGVuaW5nX3NvY2tldCk6IFJldHVybiBzb2NrZXQgYXNzb2NpYXRlZCB3aXRo
IHRoaXMgZGV2aWNlLgorICAgICAgICAoRGV2aWNlLnNldHVwKTogT3BlbiBzZXJ2ZXIgc29ja2V0
IG9uIGFuIG9wZW4gcG9ydC4KKyAgICAgICAgKERldmljZS50ZWFyZG93bik6IENsb3NlIHNlcnZl
ciBzb2NrZXQgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZGV2aWNlLgorICAgICAgICAqIFRlc3RSdW5u
ZXJTaGFyZWQvaU9TTGF5b3V0VGVzdENvbW11bmljYXRpb24uY3BwOiBBZGRlZC4KKyAgICAgICAg
KGNvbm5lY3RUb1NlcnZlcik6IFJldHVybiBzb2NrZXQgY29ubmVjdGVkIHRvIHRoZSBwcm92aWRl
ZCBzZXJ2ZXIgYWRkcmVzcy4KKyAgICAgICAgKHNldHVwaU9TTGF5b3V0VGVzdENvbW11bmljYXRp
b24pOiBDb25uZWN0IHN0ZGluLCBzdGRvdXQgYW5kIHN0ZGVyciBhcyBzb2NrZXQgdG8gYSBUQ1Ag
c2VydmVyIHJ1bm5pbmcgb24gbG9jYWxob3N0LgorICAgICAgICAodGVhcmRvd25pT1NMYXlvdXRU
ZXN0Q29tbXVuaWNhdGlvbik6IENsb3NlIHN0ZGluLCBzdGRvdXQgYW5kIHN0ZGVyciBUQ1Agc29j
a2V0cy4KKyAgICAgICAgKiBUZXN0UnVubmVyU2hhcmVkL2lPU0xheW91dFRlc3RDb21tdW5pY2F0
aW9uLmg6IEFkZGVkLgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvV2ViS2l0VGVzdFJ1bm5l
ci54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIv
aW9zL1Rlc3RDb250cm9sbGVySU9TLm1tOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6
cGxhdGZvcm1Jbml0aWFsaXplKTogQ2FsbCBzZXR1cGlPU0xheW91dFRlc3RDb21tdW5pY2F0aW9u
KCkgaW5zdGVhZCBvZiB1c2luZyBGSUZPcy4KKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6
OnBsYXRmb3JtRGVzdHJveSk6IENhbGwgdGVhcmRvd25pT1NMYXlvdXRUZXN0Q29tbXVuaWNhdGlv
bigpLgorCiAyMDE3LTAzLTE3ICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgog
CiAgICAgICAgIFVzZSBVU0VfSU5URVJOQUxfU0RLIHRvIGNvbXB1dGUgRU5BQkxFX0ZBU1RfSklU
X1BFUk1JU1NJT05TIGluc3RlYWQgb2YgSEFWRV9JTlRFUk5BTF9TREsKSW5kZXg6IFRvb2xzL0R1
bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjE0MTI2KQorKysgVG9vbHMvRHVtcFJlbmRlclRy
ZWUvRHVtcFJlbmRlclRyZWUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5
KQpAQCAtODAsNiArODAsNyBAQAogCQkyRDQwM0YxQjE1MDg3MjA5MDA1MzU4RDIgLyogTGF5b3V0
VGVzdEhlbHBlci5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMkQ0MDNFQTIxNTA4NzE0MjAwNTM1OEQyIC8qIExheW91dFRlc3RIZWxwZXIubSAqLzsgfTsK
IAkJMkRBMkUzQTUxRTFCQTU0MTAwQTNCQkQwIC8qIER1bXBSZW5kZXJUcmVlU3BlbGxDaGVja2Vy
Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkRBMkUz
QTQxRTFCQTU0MTAwQTNCQkQwIC8qIER1bXBSZW5kZXJUcmVlU3BlbGxDaGVja2VyLm1tICovOyB9
OwogCQkzMTExN0IzRDE1RDlBNTZBMDAxNjNCQzggLyogTW9ja1dlYk5vdGlmaWNhdGlvblByb3Zp
ZGVyLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEx
MTdCM0IxNUQ5QTU2QTAwMTYzQkM4IC8qIE1vY2tXZWJOb3RpZmljYXRpb25Qcm92aWRlci5tbSAq
LzsgfTsKKwkJMzEyOTQzRjkxRTcxRjJCNDAwMUVFMkNDIC8qIGlPU0xheW91dFRlc3RDb21tdW5p
Y2F0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDMxNDhBMDU1MUU2RjkwRjQwMEQzQjMxNiAvKiBpT1NMYXlvdXRUZXN0Q29tbXVuaWNhdGlvbi5j
cHAgKi87IH07CiAJCTQ0NjRDQUJFMUMyMEEwOEIwMEU1QkI1NSAvKiBEdW1wUmVuZGVyVHJlZUFw
cE1haW4ubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0
NDY0Q0FCRDFDMjBBMDcwMDBFNUJCNTUgLyogRHVtcFJlbmRlclRyZWVBcHBNYWluLm1tICovOyB9
OwogCQk0QUQ2QTExNDEzQzgxMjQwMDBFQTk3MzcgLyogRm9ybVZhbHVlLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRBRDZBMTEzMTNDODEyNDAwMEVB
OTczNyAvKiBGb3JtVmFsdWUuY3BwICovOyB9OwogCQk1MTA2ODAzRTE1Q0M3QjEwMDAxQThBMjMg
LyogU2xvd05QUE5ldy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1MTA2ODAzRDE1Q0M3QjEwMDAxQThBMjMgLyogU2xvd05QUE5ldy5jcHAgKi87IH07
CkBAIC0yOTQsNiArMjk1LDggQEAKIAkJMkRBMkUzQTQxRTFCQTU0MTAwQTNCQkQwIC8qIER1bXBS
ZW5kZXJUcmVlU3BlbGxDaGVja2VyLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBuYW1lID0gRHVtcFJlbmRlclRyZWVTcGVsbENoZWNrZXIubW07IHBhdGggPSBtYWMvRHVtcFJl
bmRlclRyZWVTcGVsbENoZWNrZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMx
MTE3QjNBMTVEOUE1NkEwMDE2M0JDOCAvKiBNb2NrV2ViTm90aWZpY2F0aW9uUHJvdmlkZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTW9ja1dlYk5vdGlmaWNhdGlvblByb3Zp
ZGVyLmg7IHBhdGggPSBtYWMvTW9ja1dlYk5vdGlmaWNhdGlvblByb3ZpZGVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxMTE3QjNCMTVEOUE1NkEwMDE2M0JDOCAvKiBNb2NrV2Vi
Tm90aWZpY2F0aW9uUHJvdmlkZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7
IG5hbWUgPSBNb2NrV2ViTm90aWZpY2F0aW9uUHJvdmlkZXIubW07IHBhdGggPSBtYWMvTW9ja1dl
Yk5vdGlmaWNhdGlvblByb3ZpZGVyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkz
MTQ4QTA1NTFFNkY5MEY0MDBEM0IzMTYgLyogaU9TTGF5b3V0VGVzdENvbW11bmljYXRpb24uY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gaU9TTGF5b3V0VGVzdENvbW11
bmljYXRpb24uY3BwOyBwYXRoID0gLi4vVGVzdFJ1bm5lclNoYXJlZC9pT1NMYXlvdXRUZXN0Q29t
bXVuaWNhdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxNDhBMDU2MUU2
RjkwRjQwMEQzQjMxNiAvKiBpT1NMYXlvdXRUZXN0Q29tbXVuaWNhdGlvbi5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBpT1NMYXlvdXRUZXN0Q29tbXVuaWNhdGlvbi5oOyBwYXRo
ID0gLi4vVGVzdFJ1bm5lclNoYXJlZC9pT1NMYXlvdXRUZXN0Q29tbXVuaWNhdGlvbi5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMkE3MEFBQjAzNzA1RTFGMDBDOTE3ODMgLyogRHVt
cFJlbmRlclRyZWVQcmVmaXguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRHVt
cFJlbmRlclRyZWVQcmVmaXguaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzc1RjA5
NzEwREFDM0NCNjAwQzhCNEU1IC8qIFdlYktpdFdlaWdodFdhdGNoZXIxMDAudHRmICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gZmlsZTsgbmFtZSA9IFdl
YktpdFdlaWdodFdhdGNoZXIxMDAudHRmOyBwYXRoID0gZm9udHMvV2ViS2l0V2VpZ2h0V2F0Y2hl
cjEwMC50dGY7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3NUYwOTcyMERBQzNDQjYw
MEM4QjRFNSAvKiBXZWJLaXRXZWlnaHRXYXRjaGVyMjAwLnR0ZiAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IGZpbGU7IG5hbWUgPSBXZWJLaXRXZWlnaHRX
YXRjaGVyMjAwLnR0ZjsgcGF0aCA9IGZvbnRzL1dlYktpdFdlaWdodFdhdGNoZXIyMDAudHRmOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDcyLDYgKzQ3NSw3IEBACiAJCQlpc2EgPSBQ
QlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAogCQkJCTBGMThFNkYxMUQ2QjlDNjQwMDI3RTU0NyAv
KiBEZXJpdmVkU291cmNlcy5tYWtlICovLAorCQkJCTMxNDhBMDY1MUU2RjkwRjQwMEQzQjMxNiAv
KiBUZXN0UnVubmVyU2hhcmVkICovLAogCQkJCTBGMThFNkU3MUQ2QjlCRjUwMDI3RTU0NyAvKiBV
SVNjcmlwdENvbnRleHQgKi8sCiAJCQkJQTExNThENkExODkyN0NFMTAwODhDMTdCIC8qIGlvcyAq
LywKIAkJCQlBMTM0RTUzNDE4OTA1RTZDMDA5MDFEMDYgLyogY29uZmlnLmggKi8sCkBAIC02OTUs
NiArNjk5LDE2IEBACiAJCQluYW1lID0gTGF5b3V0VGVzdEhlbHBlcjsKIAkJCXNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7CiAJCX07CisJCTMxNDhBMDY1MUU2RjkwRjQwMEQzQjMxNiAvKiBUZXN0UnVu
bmVyU2hhcmVkICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJ
CQkzMTQ4QTA1NTFFNkY5MEY0MDBEM0IzMTYgLyogaU9TTGF5b3V0VGVzdENvbW11bmljYXRpb24u
Y3BwICovLAorCQkJCTMxNDhBMDU2MUU2RjkwRjQwMEQzQjMxNiAvKiBpT1NMYXlvdXRUZXN0Q29t
bXVuaWNhdGlvbi5oICovLAorCQkJKTsKKwkJCW5hbWUgPSBUZXN0UnVubmVyU2hhcmVkOworCQkJ
cGF0aCA9IC4uL1dlYktpdFRlc3RSdW5uZXI7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwor
CQl9OwogCQk0MTdEQTkxODEzNzM2NzREMDA3QzU3RkIgLyogV2ViQ29yZVRlc3RTdXBwb3J0ICov
ID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKQEAgLTExNDUsNiArMTE1
OSw3IEBACiAJCQkJN0NCQkMzMjMxRERGQ0Y5QTAwNzg2QjlEIC8qIFRlc3RPcHRpb25zLm1tIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEYxOEU3MEYxRDZCQUNCNjAwMjdFNTQ3IC8qIFVJU2NyaXB0Q29u
dHJvbGxlck1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUJDOUQ5MDI0MEM5NzQ3MkUwMDk5QTRB
MyAvKiBXb3JrUXVldWUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMzEyOTQzRjkxRTcxRjJCNDAw
MUVFMkNDIC8qIGlPU0xheW91dFRlc3RDb21tdW5pY2F0aW9uLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUJDQTE4QjI2MEM5QjAxNUMwMDExNDM2OSAvKiBXb3JrUXVldWVJdGVtTWFjLm1tIGluIFNv
dXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9
IDA7CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRyZWUubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0R1bXBSZW5kZXJUcmVlLm1tCShy
ZXZpc2lvbiAyMTQxMjYpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRy
ZWUubW0JKHdvcmtpbmcgY29weSkKQEAgLTEwNCw2ICsxMDQsNyBAQAogI2lmIFBMQVRGT1JNKElP
UykKICNpbXBvcnQgIkR1bXBSZW5kZXJUcmVlQnJvd3NlclZpZXcuaCIKICNpbXBvcnQgIlVJS2l0
U1BJLmgiCisjaW1wb3J0ICJpT1NMYXlvdXRUZXN0Q29tbXVuaWNhdGlvbi5oIgogI2ltcG9ydCA8
UXVhcnR6Q29yZS9RdWFydHpDb3JlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0NvcmVHcmFwaGljc1NQ
SS5oPgogI2ltcG9ydCA8V2ViS2l0L1dBS1dpbmRvdy5oPgpAQCAtMTIzNiwxNyArMTIzNyw3IEBA
IHZvaWQgd3JpdGVDcmFzaGVkTWVzc2FnZU9uRmF0YWxFcnJvcihpbnQKIHZvaWQgZHVtcFJlbmRl
clRyZWUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKmFyZ3ZbXSkKIHsKICNpZiBQTEFURk9STShJT1Mp
Ci0gICAgY29uc3QgY2hhciogaWRlbnRpZmllciA9IGdldGVudigiSVBDX0lERU5USUZJRVIiKTsK
LSAgICBjb25zdCBjaGFyICpzdGRpblBhdGggPSBbW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6
QCIvdG1wLyVzX0lOIiwgaWRlbnRpZmllcl0gVVRGOFN0cmluZ107Ci0gICAgY29uc3QgY2hhciAq
c3Rkb3V0UGF0aCA9IFtbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIi90bXAvJXNfT1VUIiwg
aWRlbnRpZmllcl0gVVRGOFN0cmluZ107Ci0gICAgY29uc3QgY2hhciAqc3RkZXJyUGF0aCA9IFtb
TlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIi90bXAvJXNfRVJST1IiLCBpZGVudGlmaWVyXSBV
VEY4U3RyaW5nXTsKLQotICAgIGludCBpbmZkID0gb3BlbihzdGRpblBhdGgsIE9fUkRXUik7Ci0g
ICAgZHVwMihpbmZkLCBTVERJTl9GSUxFTk8pOwotICAgIGludCBvdXRmZCA9IG9wZW4oc3Rkb3V0
UGF0aCwgT19SRFdSKTsKLSAgICBkdXAyKG91dGZkLCBTVERPVVRfRklMRU5PKTsKLSAgICBpbnQg
ZXJyZmQgPSBvcGVuKHN0ZGVyclBhdGgsIE9fUkRXUiB8IE9fTk9OQkxPQ0spOwotICAgIGR1cDIo
ZXJyZmQsIFNUREVSUl9GSUxFTk8pOworICAgIHNldHVwaU9TTGF5b3V0VGVzdENvbW11bmljYXRp
b24oKTsKICNlbmRpZgogCiAgICAgc2lnbmFsKFNJR0lMTCwgJndyaXRlQ3Jhc2hlZE1lc3NhZ2VP
bkZhdGFsRXJyb3IpOwpAQCAtMTMwNyw5ICsxMjk4LDcgQEAgdm9pZCBkdW1wUmVuZGVyVHJlZShp
bnQgYXJnYywgY29uc3QgY2hhcgogICAgIH0KIAogI2lmIFBMQVRGT1JNKElPUykKLSAgICBjbG9z
ZShpbmZkKTsKLSAgICBjbG9zZShvdXRmZCk7Ci0gICAgY2xvc2UoZXJyZmQpOworICAgIHRlYXJk
b3duaU9TTGF5b3V0VGVzdENvbW11bmljYXRpb24oKTsKICNlbmRpZgogfQogCkluZGV4OiBUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvcG9ydC9pb3MucHkJKHJldmlzaW9uIDIxNDEyNikKKysrIFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvcG9ydC9pb3MucHkJKHdvcmtpbmcgY29weSkKQEAgLTkxLDMgKzkxLDEyIEBA
IGNsYXNzIElPU1BvcnQoRGFyd2luUG9ydCk6CiAgICAgICAgICAgICAjIGNyYXNoLCBidXQgdGhp
cyBjcmFzaCB3aWxsIG9jY3VyIHBvc3QtbGF1bmNoLCBhZnRlciBpbnN0YWxsX2FwcCBoYXMgYWxy
ZWFkeSBraWxsZWQgdGhlIHByb2Nlc3MuCiAgICAgICAgICAgICBpZiBub3QgZGV2aWNlLmluc3Rh
bGxfYXBwKHNlbGYuX3BhdGhfdG9fZHJpdmVyKCksIHsnRFlMRF9MSUJSQVJZX1BBVEgnOiBzZWxm
Ll9idWlsZF9wYXRoKCl9KToKICAgICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ0Zh
aWxlZCB0byBpbnN0YWxsIGFwcCB7fSBvbiBkZXZpY2Uge30nLmZvcm1hdChzZWxmLl9wYXRoX3Rv
X2RyaXZlcigpLCBkZXZpY2UudWRpZCkpCisKKyAgICAgICAgZm9yIGkgaW4geHJhbmdlKHNlbGYu
Y2hpbGRfcHJvY2Vzc2VzKCkpOgorICAgICAgICAgICAgc2VsZi5kZXZpY2VfZm9yX3dvcmtlcl9u
dW1iZXIoaSkuc2V0dXAoKQorCisgICAgZGVmIGNsZWFuX3VwX3Rlc3RfcnVuKHNlbGYpOgorICAg
ICAgICBzdXBlcihJT1NQb3J0LCBzZWxmKS5jbGVhbl91cF90ZXN0X3J1bigpCisKKyAgICAgICAg
Zm9yIGkgaW4geHJhbmdlKHNlbGYuY2hpbGRfcHJvY2Vzc2VzKCkpOgorICAgICAgICAgICAgc2Vs
Zi5kZXZpY2VfZm9yX3dvcmtlcl9udW1iZXIoaSkudGVhcmRvd24oKQpJbmRleDogVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9wb3J0L3NpbXVsYXRvcl9wcm9jZXNzLnB5Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9zaW11bGF0b3JfcHJvY2Vzcy5weQkocmV2aXNpb24g
MjE0MTI2KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3NpbXVsYXRvcl9wcm9jZXNz
LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw2IEBAIGltcG9ydCBzaWduYWwKIGltcG9y
dCB0aW1lCiAKIGZyb20gd2Via2l0cHkucG9ydC5zZXJ2ZXJfcHJvY2VzcyBpbXBvcnQgU2VydmVy
UHJvY2VzcwotZnJvbSB3ZWJraXRweS54Y29kZS5zaW11bGF0b3IgaW1wb3J0IFNpbXVsYXRvcgog
CiAKIGNsYXNzIFNpbXVsYXRvclByb2Nlc3MoU2VydmVyUHJvY2Vzcyk6CkBAIC01Niw2NCArNTUs
NjEgQEAgY2xhc3MgU2ltdWxhdG9yUHJvY2VzcyhTZXJ2ZXJQcm9jZXNzKToKICAgICAgICAgICAg
ICAgICB0aW1lLnNsZWVwKDAuMDEpICAjIEluIHNlY29uZHMKICAgICAgICAgICAgIHJldHVybiBz
ZWxmLnJldHVybmNvZGUKIAorICAgICMgUHl0aG9uIDIncyBpbXBsZW1lbnRhdGlvbiBvZiBtYWtl
ZmlsZSBkb2VzIG5vdCByZXR1cm4KKyAgICAjIGEgbm9uLWJsb2NraW5nIGZpbGUuCisgICAgY2xh
c3MgTm9uQmxvY2tpbmdGaWxlRnJvbVNvY2tldChvYmplY3QpOgorCisgICAgICAgIGRlZiBfX2lu
aXRfXyhzZWxmLCBzb2NrLCB0eXBlKToKKyAgICAgICAgICAgIHNlbGYuc29ja2V0ID0gc29jawor
ICAgICAgICAgICAgc2VsZi5fZmlsZSA9IG9zLmZkb3Blbihzb2NrLmZpbGVubygpLCB0eXBlLCAw
KQorICAgICAgICAgICAgU2VydmVyUHJvY2Vzcy5fc2V0X2ZpbGVfbm9uYmxvY2tpbmcoc2VsZi5f
ZmlsZSkKKworICAgICAgICBkZWYgX19nZXRhdHRyX18oc2VsZiwgbmFtZSk6CisgICAgICAgICAg
ICByZXR1cm4gZ2V0YXR0cihzZWxmLl9maWxlLCBuYW1lKQorCisgICAgICAgIGRlZiBjbG9zZShz
ZWxmKToKKyAgICAgICAgICAgIHJlc3VsdCA9IHNlbGYuX2ZpbGUuY2xvc2UoKQorICAgICAgICAg
ICAgc2VsZi5zb2NrZXQuY2xvc2UoKQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdAorCisKICAg
ICBkZWYgX19pbml0X18oc2VsZiwgcG9ydF9vYmosIG5hbWUsIGNtZCwgZW52PU5vbmUsIHVuaXZl
cnNhbF9uZXdsaW5lcz1GYWxzZSwgdHJlYXRfbm9fZGF0YV9hc19jcmFzaD1GYWxzZSwgd29ya2Vy
X251bWJlcj1Ob25lKToKICAgICAgICAgc2VsZi5fYnVuZGxlX2lkID0gcG9ydF9vYmouYXBwX2lk
ZW50aWZpZXJfZnJvbV9idW5kbGUoY21kWzBdKQogICAgICAgICBzZWxmLl9kZXZpY2UgPSBwb3J0
X29iai5kZXZpY2VfZm9yX3dvcmtlcl9udW1iZXIod29ya2VyX251bWJlcikKLSAgICAgICAgZW52
WydJUENfSURFTlRJRklFUiddID0gc2VsZi5fYnVuZGxlX2lkICsgJy0nICsgc2VsZi5fZGV2aWNl
LnVkaWQKLQotICAgICAgICAjIFRoaXMgbG9jYXRpb24gbWF0Y2hlcyB0aGUgbG9jYXRpb24gdXNl
ZCBieSBXZWJLaXRUZXN0UnVubmVyIGFuZCBEdW1wUmVuZGVyVHJlZQotICAgICAgICAjIGZvciB0
aGUgb3RoZXIgc2lkZSBvZiB0aGVzZSBmaWZvcy4KLSAgICAgICAgZmlsZV9sb2NhdGlvbiA9ICcv
dG1wLycgKyBlbnZbJ0lQQ19JREVOVElGSUVSJ10KLSAgICAgICAgc2VsZi5faW5fcGF0aCA9IGZp
bGVfbG9jYXRpb24gKyAnX0lOJwotICAgICAgICBzZWxmLl9vdXRfcGF0aCA9IGZpbGVfbG9jYXRp
b24gKyAnX09VVCcKLSAgICAgICAgc2VsZi5fZXJyb3JfcGF0aCA9IGZpbGVfbG9jYXRpb24gKyAn
X0VSUk9SJwogCisgICAgICAgIGVudlsnUE9SVCddID0gc3RyKHNlbGYuX2RldmljZS5wb3J0KCkp
CiAgICAgICAgIHN1cGVyKFNpbXVsYXRvclByb2Nlc3MsIHNlbGYpLl9faW5pdF9fKHBvcnRfb2Jq
LCBuYW1lLCBjbWQsIGVudiwgdW5pdmVyc2FsX25ld2xpbmVzLCB0cmVhdF9ub19kYXRhX2FzX2Ny
YXNoKQogCi0gICAgZGVmIF9yZXNldChzZWxmKToKLSAgICAgICAgc3VwZXIoU2ltdWxhdG9yUHJv
Y2Vzcywgc2VsZikuX3Jlc2V0KCkKLQotICAgICAgICAjIFVubGlua3MgYXJlIG5lZWRlZCBvbiBy
ZXNldCBpbiB0aGUgZXZlbnQgdGhhdCB0aGUgUHl0aG9uIGNvZGUgdW5leHBlY3RlZGx5Ci0gICAg
ICAgICMgZmFpbHMgYmV0d2VlbiBfc3RhcnQoKSBhbmQga2lsbCgpLiAgVGhpcyBjYW4gYmUgY2F1
c2VkIGJ5IGEgU0lHS0lMTCBvciBhIGNyYXNoLgotICAgICAgICAjIFRoaXMgZW5zdXJlcyB0aGF0
IG9zLm1rZmlmbygpIHdpbGwgbm90IGJlIG9ic3RydWN0ZWQgYnkgcHJldmlvdXMgZmlmb3MuCi0g
ICAgICAgICMgT3RoZXIgZmlsZXMgd2lsbCBzdGlsbCBjYXVzZSBvcy5ta2ZpZm8oKSB0byBmYWls
LgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBvcy51bmxpbmsoc2VsZi5faW5fcGF0aCkKLSAg
ICAgICAgZXhjZXB0OgotICAgICAgICAgICAgcGFzcwotICAgICAgICB0cnk6Ci0gICAgICAgICAg
ICBvcy51bmxpbmsoc2VsZi5fb3V0X3BhdGgpCi0gICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAg
IHBhc3MKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgb3MudW5saW5rKHNlbGYuX2Vycm9yX3Bh
dGgpCi0gICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgIHBhc3MKKyAgICBAc3RhdGljbWV0aG9k
CisgICAgZGVmIF9hY2NlcHRfY29ubmVjdGlvbl9jcmVhdGVfZmlsZShzZXJ2ZXIsIHR5cGUpOgor
ICAgICAgICBjb25uZWN0aW9uLCBhZGRyZXNzID0gc2VydmVyLmFjY2VwdCgpCisgICAgICAgIGFz
c2VydCBhZGRyZXNzWzBdID09ICcxMjcuMC4wLjEnCisgICAgICAgIHJldHVybiBTaW11bGF0b3JQ
cm9jZXNzLk5vbkJsb2NraW5nRmlsZUZyb21Tb2NrZXQoY29ubmVjdGlvbiwgdHlwZSkKIAogICAg
IGRlZiBfc3RhcnQoc2VsZik6CiAgICAgICAgIGlmIHNlbGYuX3Byb2M6CiAgICAgICAgICAgICBy
YWlzZSBWYWx1ZUVycm9yKCd7fSBhbHJlYWR5IHJ1bm5pbmcnLmZvcm1hdChzZWxmLl9uYW1lKSkK
ICAgICAgICAgc2VsZi5fcmVzZXQoKQogCi0gICAgICAgIEZJRk9fUEVSTUlTU0lPTl9GTEFHUyA9
IDA2MDAgICMgT25seSBvd25lciBjYW4gcmVhZCBhbmQgd3JpdGUKLSAgICAgICAgb3MubWtmaWZv
KHNlbGYuX2luX3BhdGgsIEZJRk9fUEVSTUlTU0lPTl9GTEFHUykKLSAgICAgICAgb3MubWtmaWZv
KHNlbGYuX291dF9wYXRoLCBGSUZPX1BFUk1JU1NJT05fRkxBR1MpCi0gICAgICAgIG9zLm1rZmlm
byhzZWxmLl9lcnJvcl9wYXRoLCBGSUZPX1BFUk1JU1NJT05fRkxBR1MpCi0KLSAgICAgICAgc3Rk
b3V0ID0gb3MuZmRvcGVuKG9zLm9wZW4oc2VsZi5fb3V0X3BhdGgsIG9zLk9fUkRPTkxZIHwgb3Mu
T19OT05CTE9DSyksICdyYicpCi0gICAgICAgIHN0ZGVyciA9IG9zLmZkb3Blbihvcy5vcGVuKHNl
bGYuX2Vycm9yX3BhdGgsIG9zLk9fUkRPTkxZIHwgb3MuT19OT05CTE9DSyksICdyYicpCi0KKyAg
ICAgICAgIyBFYWNoIGRldmljZSBoYXMgYSBsaXN0ZW5pbmcgc29ja2V0IGludGl0aWxhaXplZCBk
dXJpbmcgdGhlIHBvcnQncyBzZXR1cF90ZXN0X3J1bi4KKyAgICAgICAgIyAzIGNsaWVudCBjb25u
ZWN0aW9ucyB3aWxsIGJlIGFjY2VwdGVkIGZvciBzdGRpbiwgc3Rkb3V0IGFuZCBzdGRlcnIgaW4g
dGhhdCBvcmRlci4KKyAgICAgICAgc2VsZi5fZGV2aWNlLmxpc3RlbmluZ19zb2NrZXQoKS5saXN0
ZW4oMykKICAgICAgICAgc2VsZi5fcGlkID0gc2VsZi5fZGV2aWNlLmxhdW5jaF9hcHAoc2VsZi5f
YnVuZGxlX2lkLCBzZWxmLl9jbWRbMTpdLCBlbnY9c2VsZi5fZW52KQogCiAgICAgICAgIGRlZiBo
YW5kbGVyKHNpZ251bSwgZnJhbWUpOgogICAgICAgICAgICAgYXNzZXJ0IHNpZ251bSA9PSBzaWdu
YWwuU0lHQUxSTQotICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCdUaW1lZCBvdXQgd2FpdGlu
ZyBmb3IgcHJvY2VzcyB0byBvcGVuIHt9Jy5mb3JtYXQoc2VsZi5faW5fcGF0aCkpCisgICAgICAg
ICAgICByYWlzZSBFeGNlcHRpb24oJ1RpbWVkIG91dCB3YWl0aW5nIGZvciBwcm9jZXNzIHRvIGNv
bm5lY3QgYXQgcG9ydCB7fScuZm9ybWF0KHNlbGYuX2RldmljZS5wb3J0KCkpKQogICAgICAgICBz
aWduYWwuc2lnbmFsKHNpZ25hbC5TSUdBTFJNLCBoYW5kbGVyKQogICAgICAgICBzaWduYWwuYWxh
cm0oMykgICMgSW4gc2Vjb25kcwogCiAgICAgICAgIHN0ZGluID0gTm9uZQorICAgICAgICBzdGRv
dXQgPSBOb25lCisgICAgICAgIHN0ZGVyciA9IE5vbmUKICAgICAgICAgdHJ5OgotICAgICAgICAg
ICAgc3RkaW4gPSBvcGVuKHNlbGYuX2luX3BhdGgsICd3JywgMCkgICMgT3BlbmluZyB3aXRoIG5v
IGJ1ZmZlcmluZywgbGlrZSBwb3BlbgorICAgICAgICAgICAgIyBPcmRlciBtYXR0ZXJzIGhlcmUh
CisgICAgICAgICAgICBzdGRpbiA9IFNpbXVsYXRvclByb2Nlc3MuX2FjY2VwdF9jb25uZWN0aW9u
X2NyZWF0ZV9maWxlKHNlbGYuX2RldmljZS5saXN0ZW5pbmdfc29ja2V0KCksICd3JykKKyAgICAg
ICAgICAgIHN0ZG91dCA9IFNpbXVsYXRvclByb2Nlc3MuX2FjY2VwdF9jb25uZWN0aW9uX2NyZWF0
ZV9maWxlKHNlbGYuX2RldmljZS5saXN0ZW5pbmdfc29ja2V0KCksICdyYicpCisgICAgICAgICAg
ICBzdGRlcnIgPSBTaW11bGF0b3JQcm9jZXNzLl9hY2NlcHRfY29ubmVjdGlvbl9jcmVhdGVfZmls
ZShzZWxmLl9kZXZpY2UubGlzdGVuaW5nX3NvY2tldCgpLCAncmInKQogICAgICAgICBleGNlcHQ6
CiAgICAgICAgICAgICAjIFdlIHNldCBzZWxmLl9wcm9jIGFzIF9yZXNldCgpIGFuZCBfa2lsbCgp
IGRlcGVuZCBvbiBpdC4KICAgICAgICAgICAgIHNlbGYuX3Byb2MgPSBTaW11bGF0b3JQcm9jZXNz
LlBvcGVuKHNlbGYuX3BpZCwgc3RkaW4sIHN0ZG91dCwgc3RkZXJyKQpJbmRleDogVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS94Y29kZS9kZXZpY2UucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0
cy93ZWJraXRweS94Y29kZS9kZXZpY2UucHkJKHJldmlzaW9uIDIxNDEyNikKKysrIFRvb2xzL1Nj
cmlwdHMvd2Via2l0cHkveGNvZGUvZGV2aWNlLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yMCwxMiAr
MjAsNDAgQEAKICMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKICMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAKK2ltcG9ydCBzb2NrZXQK
IAogY2xhc3MgRGV2aWNlKG9iamVjdCk6CisKKyAgICBVRElEX1RPX0xJU1RFTklOR19TT0NLRVQg
PSB7fQorCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUsIHVkaWQsIGhvc3QpOgogICAgICAg
ICBzZWxmLl9ob3N0ID0gaG9zdAogICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCiAgICAgICAgIHNl
bGYudWRpZCA9IHVkaWQKKyAgICAgICAgaWYgdWRpZCBub3QgaW4gRGV2aWNlLlVESURfVE9fTElT
VEVOSU5HX1NPQ0tFVDoKKyAgICAgICAgICAgIERldmljZS5VRElEX1RPX0xJU1RFTklOR19TT0NL
RVRbdWRpZF0gPSBOb25lCisKKyAgICBkZWYgcG9ydChzZWxmKToKKyAgICAgICAgaWYgbm90IHNl
bGYubGlzdGVuaW5nX3NvY2tldCgpOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAg
cmV0dXJuIHNlbGYubGlzdGVuaW5nX3NvY2tldCgpLmdldHNvY2tuYW1lKClbMV0KKworICAgIGRl
ZiBsaXN0ZW5pbmdfc29ja2V0KHNlbGYpOgorICAgICAgICByZXR1cm4gRGV2aWNlLlVESURfVE9f
TElTVEVOSU5HX1NPQ0tFVFtzZWxmLnVkaWRdCisKKyAgICBkZWYgc2V0dXAoc2VsZik6CisgICAg
ICAgIHNlcnZlciA9IERldmljZS5VRElEX1RPX0xJU1RFTklOR19TT0NLRVRbc2VsZi51ZGlkXQor
ICAgICAgICBpZiBub3Qgc2VydmVyOgorICAgICAgICAgICAgc2VydmVyID0gc29ja2V0LnNvY2tl
dChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNKQorICAgICAgICAgICAgc2VydmVy
LnNldHNvY2tvcHQoc29ja2V0LlNPTF9TT0NLRVQsIHNvY2tldC5TT19SRVVTRUFERFIsIDEpCisg
ICAgICAgICAgICBzZXJ2ZXIuYmluZCgoJ2xvY2FsaG9zdCcsIDApKQorICAgICAgICAgICAgRGV2
aWNlLlVESURfVE9fTElTVEVOSU5HX1NPQ0tFVFtzZWxmLnVkaWRdID0gc2VydmVyCisKKyAgICAg
ICAgaWYgbm90IERldmljZS5VRElEX1RPX0xJU1RFTklOR19TT0NLRVRbc2VsZi51ZGlkXToKKyAg
ICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignTm8gb3BlbiBwb3J0cyBmb3VuZCcpCisKKyAg
ICBkZWYgdGVhcmRvd24oc2VsZik6CisgICAgICAgIERldmljZS5VRElEX1RPX0xJU1RFTklOR19T
T0NLRVRbc2VsZi51ZGlkXSA9IE5vbmUKIAogICAgIGRlZiBpbnN0YWxsX2FwcChzZWxmLCBhcHBf
cGF0aCwgZW52PU5vbmUpOgogICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCkluZGV4
OiBUb29scy9UZXN0UnVubmVyU2hhcmVkL2lPU0xheW91dFRlc3RDb21tdW5pY2F0aW9uLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9UZXN0UnVubmVyU2hhcmVkL2lPU0xheW91dFRlc3RDb21tdW5p
Y2F0aW9uLmNwcAkobm9uZXhpc3RlbnQpCisrKyBUb29scy9UZXN0UnVubmVyU2hhcmVkL2lPU0xh
eW91dFRlc3RDb21tdW5pY2F0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDkwIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgImlPU0xheW91dFRl
c3RDb21tdW5pY2F0aW9uLmgiCisKKyNpZiBQTEFURk9STShJT1MpCisKKyNpbmNsdWRlIDxuZXRk
Yi5oPgorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Cisj
aW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKK3N0YXRpYyBpbnQg
c3RkaW5Tb2NrZXQ7CitzdGF0aWMgaW50IHN0ZG91dFNvY2tldDsKK3N0YXRpYyBpbnQgc3RkZXJy
U29ja2V0OworCitzdGF0aWMgaW50IGNvbm5lY3RUb1NlcnZlcihzb2NrYWRkcl9pbiYgc2VydmVy
QWRkcmVzcykKK3sKKyAgICBpbnQgcmVzdWx0ID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfU1RSRUFN
LCAwKTsKKyAgICBpZiAocmVzdWx0IDwgMCkKKyAgICAgICAgYWJvcnQoKTsKKyAgICBpZiAoY29u
bmVjdChyZXN1bHQsIChzdHJ1Y3Qgc29ja2FkZHIgKikgJnNlcnZlckFkZHJlc3MsIHNpemVvZihz
ZXJ2ZXJBZGRyZXNzKSkgPCAwKQorICAgICAgICBhYm9ydCgpOworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK3ZvaWQgc2V0dXBpT1NMYXlvdXRUZXN0Q29tbXVuaWNhdGlvbigpCit7CisgICAgaW50
IHBvcnQgPSBhdG9pKGdldGVudigiUE9SVCIpKTsKKyAgICBpZiAocG9ydCA8PSAwKQorICAgICAg
ICBhYm9ydCgpOworCisgICAgc3RydWN0IGhvc3RlbnQqIGhvc3QgPSBnZXRob3N0YnluYW1lKCJs
b2NhbGhvc3QiKTsKKyAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gc2VydmVyQWRkcmVzczsKKyAgICBt
ZW1zZXQoKGNoYXIgKikgJnNlcnZlckFkZHJlc3MsIDAsIHNpemVvZihzZXJ2ZXJBZGRyZXNzKSk7
CisgICAgc2VydmVyQWRkcmVzcy5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKyAgICBtZW1jcHkoCisg
ICAgICAgIChjaGFyICopJnNlcnZlckFkZHJlc3Muc2luX2FkZHIuc19hZGRyLAorICAgICAgICAo
Y2hhciAqKWhvc3QtPmhfYWRkciwKKyAgICAgICAgaG9zdC0+aF9sZW5ndGgpOworICAgIHNlcnZl
ckFkZHJlc3Muc2luX3BvcnQgPSBodG9ucyhwb3J0KTsKKyAgICAKKyAgICAvLyBPcmRlciBtYXR0
ZXJzIQorICAgIHN0ZGluU29ja2V0ID0gY29ubmVjdFRvU2VydmVyKHNlcnZlckFkZHJlc3MpOwor
ICAgIGR1cDIoc3RkaW5Tb2NrZXQsIFNURElOX0ZJTEVOTyk7CisKKyAgICBzdGRvdXRTb2NrZXQg
PSBjb25uZWN0VG9TZXJ2ZXIoc2VydmVyQWRkcmVzcyk7CisgICAgZHVwMihzdGRvdXRTb2NrZXQs
IFNURE9VVF9GSUxFTk8pOworCisgICAgc3RkZXJyU29ja2V0ID0gY29ubmVjdFRvU2VydmVyKHNl
cnZlckFkZHJlc3MpOworICAgIGR1cDIoc3RkZXJyU29ja2V0LCBTVERFUlJfRklMRU5PKTsKK30K
Kwordm9pZCB0ZWFyZG93bmlPU0xheW91dFRlc3RDb21tdW5pY2F0aW9uKCkKK3sKKyAgICBjbG9z
ZShzdGRpblNvY2tldCk7CisgICAgY2xvc2Uoc3Rkb3V0U29ja2V0KTsKKyAgICBjbG9zZShzdGRl
cnJTb2NrZXQpOworfQorCisjZWxzZQorCit2b2lkIHNldHVwaU9TTGF5b3V0VGVzdENvbW11bmlj
YXRpb24oKSB7IH0KK3ZvaWQgdGVhcmRvd25pT1NMYXlvdXRUZXN0Q29tbXVuaWNhdGlvbigpIHsg
fQorCisjZW5kaWYKSW5kZXg6IFRvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvaU9TTGF5b3V0VGVzdENv
bW11bmljYXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0UnVubmVyU2hhcmVkL2lPU0xh
eW91dFRlc3RDb21tdW5pY2F0aW9uLmgJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvVGVzdFJ1bm5l
clNoYXJlZC9pT1NMYXlvdXRUZXN0Q29tbXVuaWNhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKwordm9pZCBzZXR1cGlPU0xh
eW91dFRlc3RDb21tdW5pY2F0aW9uKCk7Cit2b2lkIHRlYXJkb3duaU9TTGF5b3V0VGVzdENvbW11
bmljYXRpb24oKTsKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvV2ViS2l0VGVzdFJ1bm5l
ci54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRl
c3RSdW5uZXIvV2ViS2l0VGVzdFJ1bm5lci54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZp
c2lvbiAyMTQxMjYpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL1dlYktpdFRlc3RSdW5uZXIu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNzMsNiArNzMsNyBA
QAogCQkyRTYzRURBMTE4OTFCMjkxMDAyQTdBRkMgLyogQWNjZXNzaWJpbGl0eVVJRWxlbWVudElP
Uy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFNjNF
RDc4MTg5MUFDRTkwMDJBN0FGQyAvKiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50SU9TLm1tICovOyB9
OwogCQkyRTYzRURBNjE4OTFCREMwMDAyQTdBRkMgLyogVGVzdFJ1bm5lci5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0M5OTgxNzExRDNGNTFFMDAx
N0JDQTIgLyogVGVzdFJ1bm5lci5jcHAgKi87IH07CiAJCTJFNzQ5QkYyMTg5MUVCRkEwMDdGQzE3
NSAvKiBFdmVudFNlbmRlclByb3h5SU9TLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMkU2M0VEN0ExODkxQUNFOTAwMkE3QUZDIC8qIEV2ZW50U2VuZGVy
UHJveHlJT1MubW0gKi87IH07CisJCTMxREE4QTNEMUU3MjA1Q0MwMEUxREYyRiAvKiBpT1NMYXlv
dXRUZXN0Q29tbXVuaWNhdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAzMTQ4QTA1MzFFNkY4NUI2MDBEM0IzMTYgLyogaU9TTGF5b3V0VGVzdENv
bW11bmljYXRpb24uY3BwICovOyB9OwogCQk1MTA1OEFENTFENjc4ODIwMDA5QTUzOEMgLyogbGli
V2ViQ29yZVRlc3RTdXBwb3J0LmR5bGliIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNDEyMzBFMTYxMzhDNzhCRjAwQkNDRkNBIC8qIGxpYldlYkNvcmVU
ZXN0U3VwcG9ydC5keWxpYiAqLzsgfTsKIAkJNTEwNThBRDYxRDY3ODgyNTAwOUE1MzhDIC8qIFdl
YktpdC5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjUxNjlDQTE0NDUyMjJEMDBFMEE5RDcgLyogV2ViS2l0LmZyYW1ld29yayAqLzsg
fTsKIAkJNTY0MUUyRDAxNDMzNUU5NTAwODMwN0U1IC8qIEpTVGV4dElucHV0Q29udHJvbGxlci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NjQxRTJD
RTE0MzM1RTk1MDA4MzA3RTUgLyogSlNUZXh0SW5wdXRDb250cm9sbGVyLmNwcCAqLzsgfTsKQEAg
LTI1Miw2ICsyNTMsOCBAQAogCQkyRUU1MkQxNDE4OTBBOUZCMDAxMEVEMjEgLyogVGVzdENvbnRy
b2xsZXJJT1MubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBUZXN0
Q29udHJvbGxlcklPUy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkVFNTJEMTYx
ODkwQTlGQjAwMTBFRDIxIC8qIG1haW5JT1MubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5v
YmpjcHA7IG5hbWUgPSBtYWluSU9TLm1tOyBwYXRoID0gLi4vaW9zL21haW5JT1MubW07IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxMTBCRTBGMTVCQTAxMTQwMEQyMTZBQyAvKiBXZWJO
b3RpZmljYXRpb25Qcm92aWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJOb3RpZmljYXRpb25Qcm92
aWRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTQ4QTA1MzFFNkY4NUI2MDBE
M0IzMTYgLyogaU9TTGF5b3V0VGVzdENvbW11bmljYXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gaU9TTGF5b3V0VGVzdENvbW11bmljYXRpb24uY3BwOyBwYXRo
ID0gLi4vVGVzdFJ1bm5lclNoYXJlZC9pT1NMYXlvdXRUZXN0Q29tbXVuaWNhdGlvbi5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxNDhBMDU0MUU2Rjg1QjYwMEQzQjMxNiAvKiBp
T1NMYXlvdXRUZXN0Q29tbXVuaWNhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBpT1NMYXlvdXRUZXN0Q29tbXVuaWNhdGlvbi5oOyBwYXRoID0gLi4vVGVzdFJ1bm5lclNo
YXJlZC9pT1NMYXlvdXRUZXN0Q29tbXVuaWNhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkzMTY0QzhFRjE1RDFBREExMDBFRjFGRTAgLyogV2ViTm90aWZpY2F0aW9uUHJvdmlk
ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViTm90aWZpY2F0
aW9uUHJvdmlkZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzNzhENDQyMjEz
MzQ2RDAwMDA2QTc3N0IgLyogY29uZmlnLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGNvbmZpZy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MTIzMEUxNjEzOEM3OEJGMDBCQ0NGQ0EgLyogbGli
V2ViQ29yZVRlc3RTdXBwb3J0LmR5bGliICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gImNvbXBpbGVkLm1hY2gtby5keWxpYiI7IHBhdGggPSBsaWJXZWJD
b3JlVGVzdFN1cHBvcnQuZHlsaWI7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07
CkBAIC00NTAsNiArNDUzLDggQEAKIAkJMEYxOEU3MUExRDZCQzRCQzAwMjdFNTQ3IC8qIFRlc3RS
dW5uZXJTaGFyZWQgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAor
CQkJCTMxNDhBMDUzMUU2Rjg1QjYwMEQzQjMxNiAvKiBpT1NMYXlvdXRUZXN0Q29tbXVuaWNhdGlv
bi5jcHAgKi8sCisJCQkJMzE0OEEwNTQxRTZGODVCNjAwRDNCMzE2IC8qIGlPU0xheW91dFRlc3RD
b21tdW5pY2F0aW9uLmggKi8sCiAJCQkJMEYxOEU3MUIxRDZCQzRFNjAwMjdFNTQ3IC8qIEJpbmRp
bmdzICovLAogCQkJCTBGNzNCNTQ3MUJBNzgyRkUwMDRCM0VGNCAvKiBVSVNjcmlwdENvbnRleHQg
Ki8sCiAJCQkpOwpAQCAtOTcwLDYgKzk3NSw3IEBACiAJCQkJQTE4NTEwNDAxQjlBRTEzMTAwNzQ0
QUVCIC8qIFBpeGVsRHVtcFN1cHBvcnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTE4NTEwNDEx
QjlBRTEzODAwNzQ0QUVCIC8qIFRlc3RDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUExODUxMDNCMUI5QUUwRTIwMDc0NEFFQiAvKiBUZXN0Q29udHJvbGxlckNvY29hLm1tIGluIFNv
dXJjZXMgKi8sCisJCQkJMzFEQThBM0QxRTcyMDVDQzAwRTFERjJGIC8qIGlPU0xheW91dFRlc3RD
b21tdW5pY2F0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUExODUxMDQyMUI5QUUxM0UwMDc0
NEFFQiAvKiBUZXN0SW52b2NhdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBMTg1MTAzRDFC
OUFFMTA2MDA3NDRBRUIgLyogVGVzdEludm9jYXRpb25DRy5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkwRjYyMkNFOTFCQkIzQTFBMDA4MzhBRDMgLyogVGVzdE9wdGlvbnMuY3BwIGluIFNvdXJjZXMg
Ki8sCkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL2lvcy9UZXN0Q29udHJvbGxlcklPUy5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL2lvcy9UZXN0Q29udHJvbGxl
cklPUy5tbQkocmV2aXNpb24gMjE0MTI2KQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9pb3Mv
VGVzdENvbnRyb2xsZXJJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNp
bXBvcnQgIlRlc3RJbnZvY2F0aW9uLmgiCiAjaW1wb3J0ICJUZXN0UnVubmVyV0tXZWJWaWV3Lmgi
CiAjaW1wb3J0ICJVSUtpdFNQSS5oIgorI2ltcG9ydCAiaU9TTGF5b3V0VGVzdENvbW11bmljYXRp
b24uaCIKICNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgogI2ltcG9ydCA8VUlLaXQv
VUlLaXQuaD4KICNpbXBvcnQgPFdlYktpdC9XS1ByZWZlcmVuY2VzUmVmUHJpdmF0ZS5oPgpAQCAt
NDksMjEgKzUwLDEyIEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6Om5vdGlmeURvbmUoKQogCiB2b2lk
IFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybUluaXRpYWxpemUoKQogewotICAgIGNvbnN0IGNoYXIq
IGlkZW50aWZpZXIgPSBnZXRlbnYoIklQQ19JREVOVElGSUVSIik7Ci0gICAgY29uc3QgY2hhciAq
c3RkaW5QYXRoID0gW1tOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiL3RtcC8lc19JTiIsIGlk
ZW50aWZpZXJdIFVURjhTdHJpbmddOwotICAgIGNvbnN0IGNoYXIgKnN0ZG91dFBhdGggPSBbW05T
U3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIvdG1wLyVzX09VVCIsIGlkZW50aWZpZXJdIFVURjhT
dHJpbmddOwotICAgIGNvbnN0IGNoYXIgKnN0ZGVyclBhdGggPSBbW05TU3RyaW5nIHN0cmluZ1dp
dGhGb3JtYXQ6QCIvdG1wLyVzX0VSUk9SIiwgaWRlbnRpZmllcl0gVVRGOFN0cmluZ107Ci0KLSAg
ICBpbnQgaW5mZCA9IG9wZW4oc3RkaW5QYXRoLCBPX1JEV1IpOwotICAgIGR1cDIoaW5mZCwgU1RE
SU5fRklMRU5PKTsKLSAgICBpbnQgb3V0ZmQgPSBvcGVuKHN0ZG91dFBhdGgsIE9fUkRXUik7Ci0g
ICAgZHVwMihvdXRmZCwgU1RET1VUX0ZJTEVOTyk7Ci0gICAgaW50IGVycmZkID0gb3BlbihzdGRl
cnJQYXRoLCBPX1JEV1IgfCBPX05PTkJMT0NLKTsKLSAgICBkdXAyKGVycmZkLCBTVERFUlJfRklM
RU5PKTsKKyAgICBzZXR1cGlPU0xheW91dFRlc3RDb21tdW5pY2F0aW9uKCk7CiB9CiAKIHZvaWQg
VGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtRGVzdHJveSgpCiB7CisgICAgdGVhcmRvd25pT1NMYXlv
dXRUZXN0Q29tbXVuaWNhdGlvbigpOwogfQogCiB2b2lkIFRlc3RDb250cm9sbGVyOjppbml0aWFs
aXplSW5qZWN0ZWRCdW5kbGVQYXRoKCkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>305468</attachid>
            <date>2017-03-27 08:41:32 -0700</date>
            <delta_ts>2017-03-28 09:58:59 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-169419-20170327084132.patch</filename>
            <type>text/plain</type>
            <size>27763</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIxNDQxMikKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDU4IEBACisyMDE3LTAzLTI3ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICBVc2UgVENQIGluc3RlYWQgb2YgRklGT3MgZm9yIFNpbXVsYXRvci9EZXZp
Y2UgY29tbXVuaWNhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTY5NDE5CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zMDk0OTYxNT4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVc2luZyBUQ1AgaW5z
dGVhZCBvZiBGSUZPcyB3aGVuIGNvbW11bmljYXRpbmcgd2l0aCBkZXZpY2VzIGFsbG93cyB0aGUg
ZGV2aWNlIGJlaW5nIHRlc3RlZAorICAgICAgICB0byBiZSBvbiBhIGRpZmZlcmVudCBtYWNoaW5l
IHRoZW4gdGhlIG9uZSBoYW5kbGluZyB0aGUgbWFuYWdlbWVudCBvZiB0aGUgdGVzdCBydW4uCisK
KyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZS5t
bToKKyAgICAgICAgKGR1bXBSZW5kZXJUcmVlKTogQ2FsbCBzZXR1cC90ZWFyZG93bmlPU0xheW91
dFRlc3RDb21tdW5pY2F0aW9uKCkgaW5zdGVhZCBvZiB1c2luZyBGSUZPcy4KKyAgICAgICAgKiBT
Y3JpcHRzL3dlYmtpdHB5L3BvcnQvZGV2aWNlLnB5OgorICAgICAgICAoRGV2aWNlLl9faW5pdF9f
KTogSW5pdGlhbGl6ZSB0aGUgbGlzdGVuaW5nX3NvY2tldC4KKyAgICAgICAgKERldmljZS5wb3J0
KTogUmV0dXJuIHBvcnQgb2Ygc29ja2V0IGFzc29jaWF0ZWQgd2l0aCB0aGlzIGRldmljZS4KKyAg
ICAgICAgKERldmljZS5zZXR1cCk6IE9wZW4gbGlzdGVuaW5nIHNvY2tldCBvbiBhbiBvcGVuIHBv
cnQsIHNldHVwIHBsYXRmb3JtIGRldmljZS4KKyAgICAgICAgKERldmljZS50ZWFyZG93bik6IENs
b3NlIGxpc3RlbmluZyBzb2NrZXQgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZGV2aWNlLCB0ZWFyZG93
biBwbGF0Zm9ybQorICAgICAgICBkZXZpY2UuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9w
b3J0L2lvcy5weToKKyAgICAgICAgKElPU1BvcnQuc2V0dXBfdGVzdF9ydW4pOiBTZXR1cCBlYWNo
IGRldmljZS4KKyAgICAgICAgKElPU1BvcnQuY2xlYW5fdXBfdGVzdF9ydW4pOiBUZWFyZG93biBl
YWNoIGRldmljZS4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvc2ltdWxhdG9yX3By
b2Nlc3MucHk6CisgICAgICAgIChTaW11bGF0b3JQcm9jZXNzKToKKyAgICAgICAgKFNpbXVsYXRv
clByb2Nlc3MuTm9uQmxvY2tpbmdGaWxlRnJvbVNvY2tldCk6IEFkZCB0byB3b3JrIGFyb3VuZCBz
aG9ydGNvbWluZ3MgaW4KKyAgICAgICAgUHl0aG9uIDLigJlzIG1ha2VmaWxlLgorICAgICAgICAo
U2ltdWxhdG9yUHJvY2Vzcy5Ob25CbG9ja2luZ0ZpbGVGcm9tU29ja2V0Ll9faW5pdF9fKTogSW5p
dGlhbGl6ZSBmaWxlIHdpdGggc29ja2V0LgorICAgICAgICAoU2ltdWxhdG9yUHJvY2Vzcy5SZWFk
RmlsZVNvY2tldC5jbG9zZSk6IENsb3NlIGZpbGUgYW5kIHRoZW4gc29ja2V0OworICAgICAgICAo
U2ltdWxhdG9yUHJvY2Vzcy5fX2luaXRfXyk6IFBhc3MgVENQIHBvcnQgb3ZlciBlbnZpcm9ubWVu
dCwgcmVtb3ZlIEZJRk8gbmFtZXMuCisgICAgICAgIChTaW11bGF0b3JQcm9jZXNzLl9fZ2V0YXR0
cl9fKTogRXhwb3NlIGFsbCBmaWxlIGF0dHJpYnV0ZXMuCisgICAgICAgIChTaW11bGF0b3JQcm9j
ZXNzLl9hY2NlcHRfY29ubmVjdGlvbl9jcmVhdGVfZmlsZSk6IFdhaXQgZm9yIGNvbm5lY3Rpb24g
ZnJvbSBzZXJ2ZXIgYW5kCisgICAgICAgIGNyZWF0ZSBhbmQgcmV0dXJuIGEgZmlsZS1saWtlIG9i
amVjdCBmcm9tIHRoZSBpbmNvbWluZyBjb25uZWN0aW9uLgorICAgICAgICAoU2ltdWxhdG9yUHJv
Y2Vzcy5fc3RhcnQpOiBVc2UgVENQIGNvbm5lY3Rpb25zIGluc3RlYWQgb2YgRklGT3MuCisgICAg
ICAgIChTaW11bGF0b3JQcm9jZXNzLl9zdGFydC5oYW5kbGVyKTogT3V0cHV0IHNlcnZlciBwb3J0
IGluIHRpbWVvdXQgZXhjZXB0aW9uLgorICAgICAgICAoU2ltdWxhdG9yUHJvY2Vzcy5fcmVzZXQp
OiBEZWxldGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkveGNvZGUvZGV2aWNlLnB5Ogor
ICAgICAgICAoRGV2aWNlKToKKyAgICAgICAgKERldmljZS5fX2luaXRfXyk6IEluaXRpYWxpemUg
dGhpcyBkZXZpY2UgaW4gVURJRCB0byBsaXN0ZW5pbmcgc29ja2V0IG1hcC4KKyAgICAgICAgKERl
dmljZS5wb3J0KTogUmV0dXJuIHBvcnQgb2Ygc29ja2V0IGFzc29jaWF0ZWQgd2l0aCB0aGlzIGRl
dmljZS4KKyAgICAgICAgKERldmljZS5saXN0ZW5pbmdfc29ja2V0KTogUmV0dXJuIHNvY2tldCBh
c3NvY2lhdGVkIHdpdGggdGhpcyBkZXZpY2UuCisgICAgICAgIChEZXZpY2Uuc2V0dXApOiBPcGVu
IHNlcnZlciBzb2NrZXQgb24gYW4gb3BlbiBwb3J0LgorICAgICAgICAoRGV2aWNlLnRlYXJkb3du
KTogQ2xvc2Ugc2VydmVyIHNvY2tldCBhc3NvY2lhdGVkIHdpdGggdGhpcyBkZXZpY2UuCisgICAg
ICAgICogVGVzdFJ1bm5lclNoYXJlZC9pT1NMYXlvdXRUZXN0Q29tbXVuaWNhdGlvbi5jcHA6IEFk
ZGVkLgorICAgICAgICAoY29ubmVjdFRvU2VydmVyKTogUmV0dXJuIHNvY2tldCBjb25uZWN0ZWQg
dG8gdGhlIHByb3ZpZGVkIHNlcnZlciBhZGRyZXNzLgorICAgICAgICAoc2V0dXBpT1NMYXlvdXRU
ZXN0Q29tbXVuaWNhdGlvbik6IENvbm5lY3Qgc3RkaW4sIHN0ZG91dCBhbmQgc3RkZXJyIGFzIHNv
Y2tldCB0byBhCisgICAgICAgIFRDUCBzZXJ2ZXIgcnVubmluZyBvbiBsb2NhbGhvc3QuCisgICAg
ICAgICh0ZWFyZG93bmlPU0xheW91dFRlc3RDb21tdW5pY2F0aW9uKTogQ2xvc2Ugc3RkaW4sIHN0
ZG91dCBhbmQgc3RkZXJyIFRDUCBzb2NrZXRzLgorICAgICAgICAqIFRlc3RSdW5uZXJTaGFyZWQv
aU9TTGF5b3V0VGVzdENvbW11bmljYXRpb24uaDogQWRkZWQuCisgICAgICAgICogV2ViS2l0VGVz
dFJ1bm5lci9XZWJLaXRUZXN0UnVubmVyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAg
ICAgICogV2ViS2l0VGVzdFJ1bm5lci9pb3MvVGVzdENvbnRyb2xsZXJJT1MubW06CisgICAgICAg
IChXVFI6OlRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybUluaXRpYWxpemUpOiBDYWxsIHNldHVwaU9T
TGF5b3V0VGVzdENvbW11bmljYXRpb24oKQorICAgICAgICBpbnN0ZWFkIG9mIHVzaW5nIEZJRk9z
LgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1EZXN0cm95KTogQ2FsbCB0
ZWFyZG93bmlPU0xheW91dFRlc3RDb21tdW5pY2F0aW9uKCkuCisKIDIwMTctMDMtMjUgIEpvbmF0
aGFuIEJlZGFyZCAgPGpiZWRhcmRAYXBwbGUuY29tPgogCiAgICAgICAgIHdlYmtpdHB5OiBVc2Ug
Z2VuZXJhbGl6ZWQgZGV2aWNlIGluc3RlYWQgb2YgcGxhdGZvcm0gc3BlY2lmaWMgb25lCkluZGV4
OiBUb29scy9EdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIxNDQxMikKKysrIFRvb2xzL0R1
bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdv
cmtpbmcgY29weSkKQEAgLTgwLDYgKzgwLDcgQEAKIAkJMkQ0MDNGMUIxNTA4NzIwOTAwNTM1OEQy
IC8qIExheW91dFRlc3RIZWxwZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDJENDAzRUEyMTUwODcxNDIwMDUzNThEMiAvKiBMYXlvdXRUZXN0SGVscGVy
Lm0gKi87IH07CiAJCTJEQTJFM0E1MUUxQkE1NDEwMEEzQkJEMCAvKiBEdW1wUmVuZGVyVHJlZVNw
ZWxsQ2hlY2tlci5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDJEQTJFM0E0MUUxQkE1NDEwMEEzQkJEMCAvKiBEdW1wUmVuZGVyVHJlZVNwZWxsQ2hlY2tl
ci5tbSAqLzsgfTsKIAkJMzExMTdCM0QxNUQ5QTU2QTAwMTYzQkM4IC8qIE1vY2tXZWJOb3RpZmlj
YXRpb25Qcm92aWRlci5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDMxMTE3QjNCMTVEOUE1NkEwMDE2M0JDOCAvKiBNb2NrV2ViTm90aWZpY2F0aW9uUHJv
dmlkZXIubW0gKi87IH07CisJCTMxMjk0M0Y5MUU3MUYyQjQwMDFFRTJDQyAvKiBpT1NMYXlvdXRU
ZXN0Q29tbXVuaWNhdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAzMTQ4QTA1NTFFNkY5MEY0MDBEM0IzMTYgLyogaU9TTGF5b3V0VGVzdENvbW11
bmljYXRpb24uY3BwICovOyB9OwogCQk0NDY0Q0FCRTFDMjBBMDhCMDBFNUJCNTUgLyogRHVtcFJl
bmRlclRyZWVBcHBNYWluLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNDQ2NENBQkQxQzIwQTA3MDAwRTVCQjU1IC8qIER1bXBSZW5kZXJUcmVlQXBwTWFp
bi5tbSAqLzsgfTsKIAkJNEFENkExMTQxM0M4MTI0MDAwRUE5NzM3IC8qIEZvcm1WYWx1ZS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QUQ2QTExMzEz
QzgxMjQwMDBFQTk3MzcgLyogRm9ybVZhbHVlLmNwcCAqLzsgfTsKIAkJNTEwNjgwM0UxNUNDN0Ix
MDAwMUE4QTIzIC8qIFNsb3dOUFBOZXcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTEwNjgwM0QxNUNDN0IxMDAwMUE4QTIzIC8qIFNsb3dOUFBOZXcu
Y3BwICovOyB9OwpAQCAtMjk0LDYgKzI5NSw4IEBACiAJCTJEQTJFM0E0MUUxQkE1NDEwMEEzQkJE
MCAvKiBEdW1wUmVuZGVyVHJlZVNwZWxsQ2hlY2tlci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLm9iamNwcDsgbmFtZSA9IER1bXBSZW5kZXJUcmVlU3BlbGxDaGVja2VyLm1tOyBwYXRoID0g
bWFjL0R1bXBSZW5kZXJUcmVlU3BlbGxDaGVja2VyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkzMTExN0IzQTE1RDlBNTZBMDAxNjNCQzggLyogTW9ja1dlYk5vdGlmaWNhdGlvblBy
b3ZpZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IE1vY2tXZWJOb3RpZmlj
YXRpb25Qcm92aWRlci5oOyBwYXRoID0gbWFjL01vY2tXZWJOb3RpZmljYXRpb25Qcm92aWRlci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMTExN0IzQjE1RDlBNTZBMDAxNjNCQzgg
LyogTW9ja1dlYk5vdGlmaWNhdGlvblByb3ZpZGVyLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAub2JqY3BwOyBuYW1lID0gTW9ja1dlYk5vdGlmaWNhdGlvblByb3ZpZGVyLm1tOyBwYXRoID0g
bWFjL01vY2tXZWJOb3RpZmljYXRpb25Qcm92aWRlci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMzE0OEEwNTUxRTZGOTBGNDAwRDNCMzE2IC8qIGlPU0xheW91dFRlc3RDb21tdW5p
Y2F0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IGlPU0xheW91
dFRlc3RDb21tdW5pY2F0aW9uLmNwcDsgcGF0aCA9IC4uL1Rlc3RSdW5uZXJTaGFyZWQvaU9TTGF5
b3V0VGVzdENvbW11bmljYXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkz
MTQ4QTA1NjFFNkY5MEY0MDBEM0IzMTYgLyogaU9TTGF5b3V0VGVzdENvbW11bmljYXRpb24uaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gaU9TTGF5b3V0VGVzdENvbW11bmljYXRp
b24uaDsgcGF0aCA9IC4uL1Rlc3RSdW5uZXJTaGFyZWQvaU9TTGF5b3V0VGVzdENvbW11bmljYXRp
b24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzJBNzBBQUIwMzcwNUUxRjAwQzkx
NzgzIC8qIER1bXBSZW5kZXJUcmVlUHJlZml4LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IER1bXBSZW5kZXJUcmVlUHJlZml4Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTM3NUYwOTcxMERBQzNDQjYwMEM4QjRFNSAvKiBXZWJLaXRXZWlnaHRXYXRjaGVyMTAwLnR0
ZiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IGZpbGU7
IG5hbWUgPSBXZWJLaXRXZWlnaHRXYXRjaGVyMTAwLnR0ZjsgcGF0aCA9IGZvbnRzL1dlYktpdFdl
aWdodFdhdGNoZXIxMDAudHRmOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzNzVGMDk3
MjBEQUMzQ0I2MDBDOEI0RTUgLyogV2ViS2l0V2VpZ2h0V2F0Y2hlcjIwMC50dGYgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBmaWxlOyBuYW1lID0gV2Vi
S2l0V2VpZ2h0V2F0Y2hlcjIwMC50dGY7IHBhdGggPSBmb250cy9XZWJLaXRXZWlnaHRXYXRjaGVy
MjAwLnR0Zjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQ3Miw2ICs0NzUsNyBAQAog
CQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKIAkJCQkwRjE4RTZGMTFENkI5QzY0
MDAyN0U1NDcgLyogRGVyaXZlZFNvdXJjZXMubWFrZSAqLywKKwkJCQkzMTQ4QTA2NTFFNkY5MEY0
MDBEM0IzMTYgLyogVGVzdFJ1bm5lclNoYXJlZCAqLywKIAkJCQkwRjE4RTZFNzFENkI5QkY1MDAy
N0U1NDcgLyogVUlTY3JpcHRDb250ZXh0ICovLAogCQkJCUExMTU4RDZBMTg5MjdDRTEwMDg4QzE3
QiAvKiBpb3MgKi8sCiAJCQkJQTEzNEU1MzQxODkwNUU2QzAwOTAxRDA2IC8qIGNvbmZpZy5oICov
LApAQCAtNjk1LDYgKzY5OSwxNiBAQAogCQkJbmFtZSA9IExheW91dFRlc3RIZWxwZXI7CiAJCQlz
b3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9OworCQkzMTQ4QTA2NTFFNkY5MEY0MDBEM0IzMTYg
LyogVGVzdFJ1bm5lclNoYXJlZCAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRy
ZW4gPSAoCisJCQkJMzE0OEEwNTUxRTZGOTBGNDAwRDNCMzE2IC8qIGlPU0xheW91dFRlc3RDb21t
dW5pY2F0aW9uLmNwcCAqLywKKwkJCQkzMTQ4QTA1NjFFNkY5MEY0MDBEM0IzMTYgLyogaU9TTGF5
b3V0VGVzdENvbW11bmljYXRpb24uaCAqLywKKwkJCSk7CisJCQluYW1lID0gVGVzdFJ1bm5lclNo
YXJlZDsKKwkJCXBhdGggPSAuLi9XZWJLaXRUZXN0UnVubmVyOworCQkJc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsKKwkJfTsKIAkJNDE3REE5MTgxMzczNjc0RDAwN0M1N0ZCIC8qIFdlYkNvcmVUZXN0
U3VwcG9ydCAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCkBAIC0x
MTQ1LDYgKzExNTksNyBAQAogCQkJCTdDQkJDMzIzMURERkNGOUEwMDc4NkI5RCAvKiBUZXN0T3B0
aW9ucy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTBGMThFNzBGMUQ2QkFDQjYwMDI3RTU0NyAvKiBV
SVNjcmlwdENvbnRyb2xsZXJNYWMubW0gaW4gU291cmNlcyAqLywKIAkJCQlCQzlEOTAyNDBDOTc0
NzJFMDA5OUE0QTMgLyogV29ya1F1ZXVlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTMxMjk0M0Y5
MUU3MUYyQjQwMDFFRTJDQyAvKiBpT1NMYXlvdXRUZXN0Q29tbXVuaWNhdGlvbi5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlCQ0ExOEIyNjBDOUIwMTVDMDAxMTQzNjkgLyogV29ya1F1ZXVlSXRlbU1h
Yy5tbSBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHBy
b2Nlc3NpbmcgPSAwOwpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0R1bXBSZW5kZXJU
cmVlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVuZGVy
VHJlZS5tbQkocmV2aXNpb24gMjE0NDEyKQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0R1
bXBSZW5kZXJUcmVlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQsNiArMTA0LDcgQEAKICNpZiBQ
TEFURk9STShJT1MpCiAjaW1wb3J0ICJEdW1wUmVuZGVyVHJlZUJyb3dzZXJWaWV3LmgiCiAjaW1w
b3J0ICJVSUtpdFNQSS5oIgorI2ltcG9ydCAiaU9TTGF5b3V0VGVzdENvbW11bmljYXRpb24uaCIK
ICNpbXBvcnQgPFF1YXJ0ekNvcmUvUXVhcnR6Q29yZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9Db3Jl
R3JhcGhpY3NTUEkuaD4KICNpbXBvcnQgPFdlYktpdC9XQUtXaW5kb3cuaD4KQEAgLTEyMzYsMTcg
KzEyMzcsNyBAQCB2b2lkIHdyaXRlQ3Jhc2hlZE1lc3NhZ2VPbkZhdGFsRXJyb3IoaW50CiB2b2lk
IGR1bXBSZW5kZXJUcmVlKGludCBhcmdjLCBjb25zdCBjaGFyICphcmd2W10pCiB7CiAjaWYgUExB
VEZPUk0oSU9TKQotICAgIGNvbnN0IGNoYXIqIGlkZW50aWZpZXIgPSBnZXRlbnYoIklQQ19JREVO
VElGSUVSIik7Ci0gICAgY29uc3QgY2hhciAqc3RkaW5QYXRoID0gW1tOU1N0cmluZyBzdHJpbmdX
aXRoRm9ybWF0OkAiL3RtcC8lc19JTiIsIGlkZW50aWZpZXJdIFVURjhTdHJpbmddOwotICAgIGNv
bnN0IGNoYXIgKnN0ZG91dFBhdGggPSBbW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIvdG1w
LyVzX09VVCIsIGlkZW50aWZpZXJdIFVURjhTdHJpbmddOwotICAgIGNvbnN0IGNoYXIgKnN0ZGVy
clBhdGggPSBbW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIvdG1wLyVzX0VSUk9SIiwgaWRl
bnRpZmllcl0gVVRGOFN0cmluZ107Ci0KLSAgICBpbnQgaW5mZCA9IG9wZW4oc3RkaW5QYXRoLCBP
X1JEV1IpOwotICAgIGR1cDIoaW5mZCwgU1RESU5fRklMRU5PKTsKLSAgICBpbnQgb3V0ZmQgPSBv
cGVuKHN0ZG91dFBhdGgsIE9fUkRXUik7Ci0gICAgZHVwMihvdXRmZCwgU1RET1VUX0ZJTEVOTyk7
Ci0gICAgaW50IGVycmZkID0gb3BlbihzdGRlcnJQYXRoLCBPX1JEV1IgfCBPX05PTkJMT0NLKTsK
LSAgICBkdXAyKGVycmZkLCBTVERFUlJfRklMRU5PKTsKKyAgICBzZXR1cGlPU0xheW91dFRlc3RD
b21tdW5pY2F0aW9uKCk7CiAjZW5kaWYKIAogICAgIHNpZ25hbChTSUdJTEwsICZ3cml0ZUNyYXNo
ZWRNZXNzYWdlT25GYXRhbEVycm9yKTsKQEAgLTEzMDcsOSArMTI5OCw3IEBAIHZvaWQgZHVtcFJl
bmRlclRyZWUoaW50IGFyZ2MsIGNvbnN0IGNoYXIKICAgICB9CiAKICNpZiBQTEFURk9STShJT1Mp
Ci0gICAgY2xvc2UoaW5mZCk7Ci0gICAgY2xvc2Uob3V0ZmQpOwotICAgIGNsb3NlKGVycmZkKTsK
KyAgICB0ZWFyZG93bmlPU0xheW91dFRlc3RDb21tdW5pY2F0aW9uKCk7CiAjZW5kaWYKIH0KIApJ
bmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2RldmljZS5weQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZGV2aWNlLnB5CShyZXZpc2lvbiAyMTQ0MTIp
CisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZGV2aWNlLnB5CSh3b3JraW5nIGNvcHkp
CkBAIC0yMCwxMCArMjAsMTcgQEAKICMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKICMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAKK2lt
cG9ydCBzb2NrZXQKIAogY2xhc3MgRGV2aWNlKG9iamVjdCk6CiAgICAgZGVmIF9faW5pdF9fKHNl
bGYsIHBsYXRmb3JtX2RldmljZSk6CiAgICAgICAgIHNlbGYucGxhdGZvcm1fZGV2aWNlID0gcGxh
dGZvcm1fZGV2aWNlCisgICAgICAgIHNlbGYubGlzdGVuaW5nX3NvY2tldCA9IE5vbmUKKworICAg
IGRlZiBwb3J0KHNlbGYpOgorICAgICAgICBpZiBub3Qgc2VsZi5saXN0ZW5pbmdfc29ja2V0Ogor
ICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgcmV0dXJuIHNlbGYubGlzdGVuaW5nX3Nv
Y2tldC5nZXRzb2NrbmFtZSgpWzFdCiAKICAgICBkZWYgaW5zdGFsbF9hcHAoc2VsZiwgYXBwX3Bh
dGgsIGVudj1Ob25lKToKICAgICAgICAgcmV0dXJuIHNlbGYucGxhdGZvcm1fZGV2aWNlLmluc3Rh
bGxfYXBwKGFwcF9wYXRoLCBlbnYpCkBAIC0zMSw2ICszOCwyMSBAQCBjbGFzcyBEZXZpY2Uob2Jq
ZWN0KToKICAgICBkZWYgbGF1bmNoX2FwcChzZWxmLCBidW5kbGVfaWQsIGFyZ3MsIGVudj1Ob25l
KToKICAgICAgICAgcmV0dXJuIHNlbGYucGxhdGZvcm1fZGV2aWNlLmxhdW5jaF9hcHAoYnVuZGxl
X2lkLCBhcmdzLCBlbnYpCiAKKyAgICBkZWYgc2V0dXAoc2VsZik6CisgICAgICAgIGlmIG5vdCBz
ZWxmLmxpc3RlbmluZ19zb2NrZXQ6CisgICAgICAgICAgICBzZWxmLmxpc3RlbmluZ19zb2NrZXQg
PSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCisgICAg
ICAgICAgICBzZWxmLmxpc3RlbmluZ19zb2NrZXQuc2V0c29ja29wdChzb2NrZXQuU09MX1NPQ0tF
VCwgc29ja2V0LlNPX1JFVVNFQUREUiwgMSkKKyAgICAgICAgICAgIHNlbGYubGlzdGVuaW5nX3Nv
Y2tldC5iaW5kKCgnbG9jYWxob3N0JywgMCkpCisKKyAgICAgICAgaWYgaGFzYXR0cihzZWxmLnBs
YXRmb3JtX2RldmljZSwgJ3NldHVwJyk6CisgICAgICAgICAgICBzZWxmLnBsYXRmb3JtX2Rldmlj
ZS5zZXR1cCgpCisKKyAgICBkZWYgdGVhcmRvd24oc2VsZik6CisgICAgICAgIGlmIGhhc2F0dHIo
c2VsZi5wbGF0Zm9ybV9kZXZpY2UsICd0ZWFyZG93bicpOgorICAgICAgICAgICAgc2VsZi5wbGF0
Zm9ybV9kZXZpY2UudGVhcmRvd24oKQorCisgICAgICAgIHNlbGYubGlzdGVuaW5nX3NvY2tldCA9
IE5vbmUKKwogICAgICMgRklYTUU6IFRoaXMgc2hvdWxkIGJlIGltcGxlbWVudGVkIHRocm91Z2gg
YW4gZXhlY3V0aXZlCiAgICAgZGVmIHBvbGwoc2VsZiwgcGlkKToKICAgICAgICAgcmV0dXJuIHNl
bGYucGxhdGZvcm1fZGV2aWNlLnBvbGwocGlkKQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9wb3J0L2lvcy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQv
aW9zLnB5CShyZXZpc2lvbiAyMTQ0MTIpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQv
aW9zLnB5CSh3b3JraW5nIGNvcHkpCkBAIC05MSwzICs5MSwxMiBAQCBjbGFzcyBJT1NQb3J0KERh
cndpblBvcnQpOgogICAgICAgICAgICAgIyBjcmFzaCwgYnV0IHRoaXMgY3Jhc2ggd2lsbCBvY2N1
ciBwb3N0LWxhdW5jaCwgYWZ0ZXIgaW5zdGFsbF9hcHAgaGFzIGFscmVhZHkga2lsbGVkIHRoZSBw
cm9jZXNzLgogICAgICAgICAgICAgaWYgbm90IGRldmljZS5pbnN0YWxsX2FwcChzZWxmLl9wYXRo
X3RvX2RyaXZlcigpLCB7J0RZTERfTElCUkFSWV9QQVRIJzogc2VsZi5fYnVpbGRfcGF0aCgpfSk6
CiAgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdGYWlsZWQgdG8gaW5zdGFsbCBh
cHAge30gb24gZGV2aWNlIHt9Jy5mb3JtYXQoc2VsZi5fcGF0aF90b19kcml2ZXIoKSwgZGV2aWNl
LnVkaWQpKQorCisgICAgICAgIGZvciBpIGluIHhyYW5nZShzZWxmLmNoaWxkX3Byb2Nlc3Nlcygp
KToKKyAgICAgICAgICAgIHNlbGYuZGV2aWNlX2Zvcl93b3JrZXJfbnVtYmVyKGkpLnNldHVwKCkK
KworICAgIGRlZiBjbGVhbl91cF90ZXN0X3J1bihzZWxmKToKKyAgICAgICAgc3VwZXIoSU9TUG9y
dCwgc2VsZikuY2xlYW5fdXBfdGVzdF9ydW4oKQorCisgICAgICAgIGZvciBpIGluIHhyYW5nZShz
ZWxmLmNoaWxkX3Byb2Nlc3NlcygpKToKKyAgICAgICAgICAgIHNlbGYuZGV2aWNlX2Zvcl93b3Jr
ZXJfbnVtYmVyKGkpLnRlYXJkb3duKCkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9y
dC9zaW11bGF0b3JfcHJvY2Vzcy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtp
dHB5L3BvcnQvc2ltdWxhdG9yX3Byb2Nlc3MucHkJKHJldmlzaW9uIDIxNDQxMikKKysrIFRvb2xz
L1NjcmlwdHMvd2Via2l0cHkvcG9ydC9zaW11bGF0b3JfcHJvY2Vzcy5weQkod29ya2luZyBjb3B5
KQpAQCAtMjcsNyArMjcsNiBAQCBpbXBvcnQgc2lnbmFsCiBpbXBvcnQgdGltZQogCiBmcm9tIHdl
YmtpdHB5LnBvcnQuc2VydmVyX3Byb2Nlc3MgaW1wb3J0IFNlcnZlclByb2Nlc3MKLWZyb20gd2Vi
a2l0cHkueGNvZGUuc2ltdWxhdG9yIGltcG9ydCBTaW11bGF0b3IKIAogCiBjbGFzcyBTaW11bGF0
b3JQcm9jZXNzKFNlcnZlclByb2Nlc3MpOgpAQCAtNTMsNjQgKzUyLDYxIEBAIGNsYXNzIFNpbXVs
YXRvclByb2Nlc3MoU2VydmVyUHJvY2Vzcyk6CiAgICAgICAgICAgICAgICAgdGltZS5zbGVlcCgw
LjAxKSAgIyBJbiBzZWNvbmRzCiAgICAgICAgICAgICByZXR1cm4gc2VsZi5yZXR1cm5jb2RlCiAK
KyAgICAjIFB5dGhvbiAyJ3MgaW1wbGVtZW50YXRpb24gb2YgbWFrZWZpbGUgZG9lcyBub3QgcmV0
dXJuCisgICAgIyBhIG5vbi1ibG9ja2luZyBmaWxlLgorICAgIGNsYXNzIE5vbkJsb2NraW5nRmls
ZUZyb21Tb2NrZXQob2JqZWN0KToKKworICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgc29jaywg
dHlwZSk6CisgICAgICAgICAgICBzZWxmLnNvY2tldCA9IHNvY2sKKyAgICAgICAgICAgIHNlbGYu
X2ZpbGUgPSBvcy5mZG9wZW4oc29jay5maWxlbm8oKSwgdHlwZSwgMCkKKyAgICAgICAgICAgIFNl
cnZlclByb2Nlc3MuX3NldF9maWxlX25vbmJsb2NraW5nKHNlbGYuX2ZpbGUpCisKKyAgICAgICAg
ZGVmIF9fZ2V0YXR0cl9fKHNlbGYsIG5hbWUpOgorICAgICAgICAgICAgcmV0dXJuIGdldGF0dHIo
c2VsZi5fZmlsZSwgbmFtZSkKKworICAgICAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgICAg
ICByZXN1bHQgPSBzZWxmLl9maWxlLmNsb3NlKCkKKyAgICAgICAgICAgIHNlbGYuc29ja2V0LmNs
b3NlKCkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQKKworCiAgICAgZGVmIF9faW5pdF9fKHNl
bGYsIHBvcnRfb2JqLCBuYW1lLCBjbWQsIGVudj1Ob25lLCB1bml2ZXJzYWxfbmV3bGluZXM9RmFs
c2UsIHRyZWF0X25vX2RhdGFfYXNfY3Jhc2g9RmFsc2UsIHdvcmtlcl9udW1iZXI9Tm9uZSk6CiAg
ICAgICAgIHNlbGYuX2J1bmRsZV9pZCA9IHBvcnRfb2JqLmFwcF9pZGVudGlmaWVyX2Zyb21fYnVu
ZGxlKGNtZFswXSkKICAgICAgICAgc2VsZi5fZGV2aWNlID0gcG9ydF9vYmouZGV2aWNlX2Zvcl93
b3JrZXJfbnVtYmVyKHdvcmtlcl9udW1iZXIpCi0gICAgICAgIGVudlsnSVBDX0lERU5USUZJRVIn
XSA9IHNlbGYuX2J1bmRsZV9pZCArICctJyArIHNlbGYuX2RldmljZS51ZGlkCi0KLSAgICAgICAg
IyBUaGlzIGxvY2F0aW9uIG1hdGNoZXMgdGhlIGxvY2F0aW9uIHVzZWQgYnkgV2ViS2l0VGVzdFJ1
bm5lciBhbmQgRHVtcFJlbmRlclRyZWUKLSAgICAgICAgIyBmb3IgdGhlIG90aGVyIHNpZGUgb2Yg
dGhlc2UgZmlmb3MuCi0gICAgICAgIGZpbGVfbG9jYXRpb24gPSAnL3RtcC8nICsgZW52WydJUENf
SURFTlRJRklFUiddCi0gICAgICAgIHNlbGYuX2luX3BhdGggPSBmaWxlX2xvY2F0aW9uICsgJ19J
TicKLSAgICAgICAgc2VsZi5fb3V0X3BhdGggPSBmaWxlX2xvY2F0aW9uICsgJ19PVVQnCi0gICAg
ICAgIHNlbGYuX2Vycm9yX3BhdGggPSBmaWxlX2xvY2F0aW9uICsgJ19FUlJPUicKIAorICAgICAg
ICBlbnZbJ1BPUlQnXSA9IHN0cihzZWxmLl9kZXZpY2UucG9ydCgpKQogICAgICAgICBzdXBlcihT
aW11bGF0b3JQcm9jZXNzLCBzZWxmKS5fX2luaXRfXyhwb3J0X29iaiwgbmFtZSwgY21kLCBlbnYs
IHVuaXZlcnNhbF9uZXdsaW5lcywgdHJlYXRfbm9fZGF0YV9hc19jcmFzaCkKIAotICAgIGRlZiBf
cmVzZXQoc2VsZik6Ci0gICAgICAgIHN1cGVyKFNpbXVsYXRvclByb2Nlc3MsIHNlbGYpLl9yZXNl
dCgpCi0KLSAgICAgICAgIyBVbmxpbmtzIGFyZSBuZWVkZWQgb24gcmVzZXQgaW4gdGhlIGV2ZW50
IHRoYXQgdGhlIFB5dGhvbiBjb2RlIHVuZXhwZWN0ZWRseQotICAgICAgICAjIGZhaWxzIGJldHdl
ZW4gX3N0YXJ0KCkgYW5kIGtpbGwoKS4gIFRoaXMgY2FuIGJlIGNhdXNlZCBieSBhIFNJR0tJTEwg
b3IgYSBjcmFzaC4KLSAgICAgICAgIyBUaGlzIGVuc3VyZXMgdGhhdCBvcy5ta2ZpZm8oKSB3aWxs
IG5vdCBiZSBvYnN0cnVjdGVkIGJ5IHByZXZpb3VzIGZpZm9zLgotICAgICAgICAjIE90aGVyIGZp
bGVzIHdpbGwgc3RpbGwgY2F1c2Ugb3MubWtmaWZvKCkgdG8gZmFpbC4KLSAgICAgICAgdHJ5Ogot
ICAgICAgICAgICAgb3MudW5saW5rKHNlbGYuX2luX3BhdGgpCi0gICAgICAgIGV4Y2VwdDoKLSAg
ICAgICAgICAgIHBhc3MKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgb3MudW5saW5rKHNlbGYu
X291dF9wYXRoKQotICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICBwYXNzCi0gICAgICAgIHRy
eToKLSAgICAgICAgICAgIG9zLnVubGluayhzZWxmLl9lcnJvcl9wYXRoKQotICAgICAgICBleGNl
cHQ6Ci0gICAgICAgICAgICBwYXNzCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBfYWNjZXB0
X2Nvbm5lY3Rpb25fY3JlYXRlX2ZpbGUoc2VydmVyLCB0eXBlKToKKyAgICAgICAgY29ubmVjdGlv
biwgYWRkcmVzcyA9IHNlcnZlci5hY2NlcHQoKQorICAgICAgICBhc3NlcnQgYWRkcmVzc1swXSA9
PSAnMTI3LjAuMC4xJworICAgICAgICByZXR1cm4gU2ltdWxhdG9yUHJvY2Vzcy5Ob25CbG9ja2lu
Z0ZpbGVGcm9tU29ja2V0KGNvbm5lY3Rpb24sIHR5cGUpCiAKICAgICBkZWYgX3N0YXJ0KHNlbGYp
OgogICAgICAgICBpZiBzZWxmLl9wcm9jOgogICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcign
e30gYWxyZWFkeSBydW5uaW5nJy5mb3JtYXQoc2VsZi5fbmFtZSkpCiAgICAgICAgIHNlbGYuX3Jl
c2V0KCkKIAotICAgICAgICBGSUZPX1BFUk1JU1NJT05fRkxBR1MgPSAwNjAwICAjIE9ubHkgb3du
ZXIgY2FuIHJlYWQgYW5kIHdyaXRlCi0gICAgICAgIG9zLm1rZmlmbyhzZWxmLl9pbl9wYXRoLCBG
SUZPX1BFUk1JU1NJT05fRkxBR1MpCi0gICAgICAgIG9zLm1rZmlmbyhzZWxmLl9vdXRfcGF0aCwg
RklGT19QRVJNSVNTSU9OX0ZMQUdTKQotICAgICAgICBvcy5ta2ZpZm8oc2VsZi5fZXJyb3JfcGF0
aCwgRklGT19QRVJNSVNTSU9OX0ZMQUdTKQotCi0gICAgICAgIHN0ZG91dCA9IG9zLmZkb3Blbihv
cy5vcGVuKHNlbGYuX291dF9wYXRoLCBvcy5PX1JET05MWSB8IG9zLk9fTk9OQkxPQ0spLCAncmIn
KQotICAgICAgICBzdGRlcnIgPSBvcy5mZG9wZW4ob3Mub3BlbihzZWxmLl9lcnJvcl9wYXRoLCBv
cy5PX1JET05MWSB8IG9zLk9fTk9OQkxPQ0spLCAncmInKQotCisgICAgICAgICMgRWFjaCBkZXZp
Y2UgaGFzIGEgbGlzdGVuaW5nIHNvY2tldCBpbnRpdGlsYWl6ZWQgZHVyaW5nIHRoZSBwb3J0J3Mg
c2V0dXBfdGVzdF9ydW4uCisgICAgICAgICMgMyBjbGllbnQgY29ubmVjdGlvbnMgd2lsbCBiZSBh
Y2NlcHRlZCBmb3Igc3RkaW4sIHN0ZG91dCBhbmQgc3RkZXJyIGluIHRoYXQgb3JkZXIuCisgICAg
ICAgIHNlbGYuX2RldmljZS5saXN0ZW5pbmdfc29ja2V0KCkubGlzdGVuKDMpCiAgICAgICAgIHNl
bGYuX3BpZCA9IHNlbGYuX2RldmljZS5sYXVuY2hfYXBwKHNlbGYuX2J1bmRsZV9pZCwgc2VsZi5f
Y21kWzE6XSwgZW52PXNlbGYuX2VudikKIAogICAgICAgICBkZWYgaGFuZGxlcihzaWdudW0sIGZy
YW1lKToKICAgICAgICAgICAgIGFzc2VydCBzaWdudW0gPT0gc2lnbmFsLlNJR0FMUk0KLSAgICAg
ICAgICAgIHJhaXNlIEV4Y2VwdGlvbignVGltZWQgb3V0IHdhaXRpbmcgZm9yIHByb2Nlc3MgdG8g
b3BlbiB7fScuZm9ybWF0KHNlbGYuX2luX3BhdGgpKQorICAgICAgICAgICAgcmFpc2UgRXhjZXB0
aW9uKCdUaW1lZCBvdXQgd2FpdGluZyBmb3IgcHJvY2VzcyB0byBjb25uZWN0IGF0IHBvcnQge30n
LmZvcm1hdChzZWxmLl9kZXZpY2UucG9ydCgpKSkKICAgICAgICAgc2lnbmFsLnNpZ25hbChzaWdu
YWwuU0lHQUxSTSwgaGFuZGxlcikKICAgICAgICAgc2lnbmFsLmFsYXJtKDMpICAjIEluIHNlY29u
ZHMKIAogICAgICAgICBzdGRpbiA9IE5vbmUKKyAgICAgICAgc3Rkb3V0ID0gTm9uZQorICAgICAg
ICBzdGRlcnIgPSBOb25lCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHN0ZGluID0gb3Blbihz
ZWxmLl9pbl9wYXRoLCAndycsIDApICAjIE9wZW5pbmcgd2l0aCBubyBidWZmZXJpbmcsIGxpa2Ug
cG9wZW4KKyAgICAgICAgICAgICMgT3JkZXIgbWF0dGVycyBoZXJlIQorICAgICAgICAgICAgc3Rk
aW4gPSBTaW11bGF0b3JQcm9jZXNzLl9hY2NlcHRfY29ubmVjdGlvbl9jcmVhdGVfZmlsZShzZWxm
Ll9kZXZpY2UubGlzdGVuaW5nX3NvY2tldCwgJ3cnKQorICAgICAgICAgICAgc3Rkb3V0ID0gU2lt
dWxhdG9yUHJvY2Vzcy5fYWNjZXB0X2Nvbm5lY3Rpb25fY3JlYXRlX2ZpbGUoc2VsZi5fZGV2aWNl
Lmxpc3RlbmluZ19zb2NrZXQsICdyYicpCisgICAgICAgICAgICBzdGRlcnIgPSBTaW11bGF0b3JQ
cm9jZXNzLl9hY2NlcHRfY29ubmVjdGlvbl9jcmVhdGVfZmlsZShzZWxmLl9kZXZpY2UubGlzdGVu
aW5nX3NvY2tldCwgJ3JiJykKICAgICAgICAgZXhjZXB0OgogICAgICAgICAgICAgIyBXZSBzZXQg
c2VsZi5fcHJvYyBhcyBfcmVzZXQoKSBhbmQgX2tpbGwoKSBkZXBlbmQgb24gaXQuCiAgICAgICAg
ICAgICBzZWxmLl9wcm9jID0gU2ltdWxhdG9yUHJvY2Vzcy5Qb3BlbihzZWxmLl9waWQsIHN0ZGlu
LCBzdGRvdXQsIHN0ZGVyciwgc2VsZi5fZGV2aWNlKQpJbmRleDogVG9vbHMvVGVzdFJ1bm5lclNo
YXJlZC9pT1NMYXlvdXRUZXN0Q29tbXVuaWNhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
VGVzdFJ1bm5lclNoYXJlZC9pT1NMYXlvdXRUZXN0Q29tbXVuaWNhdGlvbi5jcHAJKG5vbmV4aXN0
ZW50KQorKysgVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9pT1NMYXlvdXRUZXN0Q29tbXVuaWNhdGlv
bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5MCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJpT1NMYXlvdXRUZXN0Q29tbXVuaWNhdGlvbi5oIgor
CisjaWYgUExBVEZPUk0oSU9TKQorCisjaW5jbHVkZSA8bmV0ZGIuaD4KKyNpbmNsdWRlIDxuZXRp
bmV0L2luLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5o
PgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCitzdGF0aWMgaW50IHN0ZGluU29ja2V0Oworc3RhdGlj
IGludCBzdGRvdXRTb2NrZXQ7CitzdGF0aWMgaW50IHN0ZGVyclNvY2tldDsKKworc3RhdGljIGlu
dCBjb25uZWN0VG9TZXJ2ZXIoc29ja2FkZHJfaW4mIHNlcnZlckFkZHJlc3MpCit7CisgICAgaW50
IHJlc3VsdCA9IHNvY2tldChBRl9JTkVULCBTT0NLX1NUUkVBTSwgMCk7CisgICAgaWYgKHJlc3Vs
dCA8IDApCisgICAgICAgIGFib3J0KCk7CisgICAgaWYgKGNvbm5lY3QocmVzdWx0LCAoc3RydWN0
IHNvY2thZGRyICopICZzZXJ2ZXJBZGRyZXNzLCBzaXplb2Yoc2VydmVyQWRkcmVzcykpIDwgMCkK
KyAgICAgICAgYWJvcnQoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIHNldHVwaU9T
TGF5b3V0VGVzdENvbW11bmljYXRpb24oKQoreworICAgIGludCBwb3J0ID0gYXRvaShnZXRlbnYo
IlBPUlQiKSk7CisgICAgaWYgKHBvcnQgPD0gMCkKKyAgICAgICAgYWJvcnQoKTsKKworICAgIHN0
cnVjdCBob3N0ZW50KiBob3N0ID0gZ2V0aG9zdGJ5bmFtZSgibG9jYWxob3N0Iik7CisgICAgc3Ry
dWN0IHNvY2thZGRyX2luIHNlcnZlckFkZHJlc3M7CisgICAgbWVtc2V0KChjaGFyICopICZzZXJ2
ZXJBZGRyZXNzLCAwLCBzaXplb2Yoc2VydmVyQWRkcmVzcykpOworICAgIHNlcnZlckFkZHJlc3Mu
c2luX2ZhbWlseSA9IEFGX0lORVQ7CisgICAgbWVtY3B5KAorICAgICAgICAoY2hhciAqKSZzZXJ2
ZXJBZGRyZXNzLnNpbl9hZGRyLnNfYWRkciwKKyAgICAgICAgKGNoYXIgKilob3N0LT5oX2FkZHIs
CisgICAgICAgIGhvc3QtPmhfbGVuZ3RoKTsKKyAgICBzZXJ2ZXJBZGRyZXNzLnNpbl9wb3J0ID0g
aHRvbnMocG9ydCk7CisgICAgCisgICAgLy8gT3JkZXIgbWF0dGVycyEKKyAgICBzdGRpblNvY2tl
dCA9IGNvbm5lY3RUb1NlcnZlcihzZXJ2ZXJBZGRyZXNzKTsKKyAgICBkdXAyKHN0ZGluU29ja2V0
LCBTVERJTl9GSUxFTk8pOworCisgICAgc3Rkb3V0U29ja2V0ID0gY29ubmVjdFRvU2VydmVyKHNl
cnZlckFkZHJlc3MpOworICAgIGR1cDIoc3Rkb3V0U29ja2V0LCBTVERPVVRfRklMRU5PKTsKKwor
ICAgIHN0ZGVyclNvY2tldCA9IGNvbm5lY3RUb1NlcnZlcihzZXJ2ZXJBZGRyZXNzKTsKKyAgICBk
dXAyKHN0ZGVyclNvY2tldCwgU1RERVJSX0ZJTEVOTyk7Cit9CisKK3ZvaWQgdGVhcmRvd25pT1NM
YXlvdXRUZXN0Q29tbXVuaWNhdGlvbigpCit7CisgICAgY2xvc2Uoc3RkaW5Tb2NrZXQpOworICAg
IGNsb3NlKHN0ZG91dFNvY2tldCk7CisgICAgY2xvc2Uoc3RkZXJyU29ja2V0KTsKK30KKworI2Vs
c2UKKwordm9pZCBzZXR1cGlPU0xheW91dFRlc3RDb21tdW5pY2F0aW9uKCkgeyB9Cit2b2lkIHRl
YXJkb3duaU9TTGF5b3V0VGVzdENvbW11bmljYXRpb24oKSB7IH0KKworI2VuZGlmCkluZGV4OiBU
b29scy9UZXN0UnVubmVyU2hhcmVkL2lPU0xheW91dFRlc3RDb21tdW5pY2F0aW9uLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9pT1NMYXlvdXRUZXN0Q29tbXVuaWNhdGlv
bi5oCShub25leGlzdGVudCkKKysrIFRvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvaU9TTGF5b3V0VGVz
dENvbW11bmljYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI5IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKK3ZvaWQgc2V0dXBpT1NMYXlvdXRUZXN0Q29tbXVuaWNhdGlv
bigpOwordm9pZCB0ZWFyZG93bmlPU0xheW91dFRlc3RDb21tdW5pY2F0aW9uKCk7CkluZGV4OiBU
b29scy9XZWJLaXRUZXN0UnVubmVyL1dlYktpdFRlc3RSdW5uZXIueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL1dlYktpdFRlc3RS
dW5uZXIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjE0NDEyKQorKysgVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9XZWJLaXRUZXN0UnVubmVyLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTczLDYgKzczLDcgQEAKIAkJMkU2M0VEQTExODkxQjI5
MTAwMkE3QUZDIC8qIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnRJT1MubW0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRTYzRUQ3ODE4OTFBQ0U5MDAyQTdBRkMg
LyogQWNjZXNzaWJpbGl0eVVJRWxlbWVudElPUy5tbSAqLzsgfTsKIAkJMkU2M0VEQTYxODkxQkRD
MDAwMkE3QUZDIC8qIFRlc3RSdW5uZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQkNDOTk4MTcxMUQzRjUxRTAwMTdCQ0EyIC8qIFRlc3RSdW5uZXIu
Y3BwICovOyB9OwogCQkyRTc0OUJGMjE4OTFFQkZBMDA3RkMxNzUgLyogRXZlbnRTZW5kZXJQcm94
eUlPUy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJF
NjNFRDdBMTg5MUFDRTkwMDJBN0FGQyAvKiBFdmVudFNlbmRlclByb3h5SU9TLm1tICovOyB9Owor
CQkzMURBOEEzRDFFNzIwNUNDMDBFMURGMkYgLyogaU9TTGF5b3V0VGVzdENvbW11bmljYXRpb24u
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzE0OEEw
NTMxRTZGODVCNjAwRDNCMzE2IC8qIGlPU0xheW91dFRlc3RDb21tdW5pY2F0aW9uLmNwcCAqLzsg
fTsKIAkJNTEwNThBRDUxRDY3ODgyMDAwOUE1MzhDIC8qIGxpYldlYkNvcmVUZXN0U3VwcG9ydC5k
eWxpYiBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQx
MjMwRTE2MTM4Qzc4QkYwMEJDQ0ZDQSAvKiBsaWJXZWJDb3JlVGVzdFN1cHBvcnQuZHlsaWIgKi87
IH07CiAJCTUxMDU4QUQ2MUQ2Nzg4MjUwMDlBNTM4QyAvKiBXZWJLaXQuZnJhbWV3b3JrIGluIEZy
YW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1MTY5Q0ExNDQ1
MjIyRDAwRTBBOUQ3IC8qIFdlYktpdC5mcmFtZXdvcmsgKi87IH07CiAJCTU2NDFFMkQwMTQzMzVF
OTUwMDgzMDdFNSAvKiBKU1RleHRJbnB1dENvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTY0MUUyQ0UxNDMzNUU5NTAwODMwN0U1IC8q
IEpTVGV4dElucHV0Q29udHJvbGxlci5jcHAgKi87IH07CkBAIC0yNTIsNiArMjUzLDggQEAKIAkJ
MkVFNTJEMTQxODkwQTlGQjAwMTBFRDIxIC8qIFRlc3RDb250cm9sbGVySU9TLm1tICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gVGVzdENvbnRyb2xsZXJJT1MubW07IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJFRTUyRDE2MTg5MEE5RkIwMDEwRUQyMSAvKiBt
YWluSU9TLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gbWFpbklP
Uy5tbTsgcGF0aCA9IC4uL2lvcy9tYWluSU9TLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkzMTEwQkUwRjE1QkEwMTE0MDBEMjE2QUMgLyogV2ViTm90aWZpY2F0aW9uUHJvdmlkZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gV2ViTm90aWZpY2F0aW9uUHJvdmlkZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMzE0OEEwNTMxRTZGODVCNjAwRDNCMzE2IC8qIGlPU0xheW91dFRl
c3RDb21tdW5pY2F0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9
IGlPU0xheW91dFRlc3RDb21tdW5pY2F0aW9uLmNwcDsgcGF0aCA9IC4uL1Rlc3RSdW5uZXJTaGFy
ZWQvaU9TTGF5b3V0VGVzdENvbW11bmljYXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkzMTQ4QTA1NDFFNkY4NUI2MDBEM0IzMTYgLyogaU9TTGF5b3V0VGVzdENvbW11bmlj
YXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gaU9TTGF5b3V0VGVzdENv
bW11bmljYXRpb24uaDsgcGF0aCA9IC4uL1Rlc3RSdW5uZXJTaGFyZWQvaU9TTGF5b3V0VGVzdENv
bW11bmljYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzE2NEM4RUYxNUQx
QURBMTAwRUYxRkUwIC8qIFdlYk5vdGlmaWNhdGlvblByb3ZpZGVyLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYk5vdGlmaWNhdGlvblByb3ZpZGVyLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzc4RDQ0MjIxMzM0NkQwMDAwNkE3NzdCIC8qIGNv
bmZpZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBjb25maWcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNDEyMzBFMTYxMzhDNzhCRjAwQkNDRkNBIC8qIGxpYldlYkNvcmVUZXN0U3VwcG9ydC5k
eWxpYiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9ICJj
b21waWxlZC5tYWNoLW8uZHlsaWIiOyBwYXRoID0gbGliV2ViQ29yZVRlc3RTdXBwb3J0LmR5bGli
OyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwpAQCAtNDUwLDYgKzQ1Myw4IEBA
CiAJCTBGMThFNzFBMUQ2QkM0QkMwMDI3RTU0NyAvKiBUZXN0UnVubmVyU2hhcmVkICovID0gewog
CQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQkzMTQ4QTA1MzFFNkY4NUI2
MDBEM0IzMTYgLyogaU9TTGF5b3V0VGVzdENvbW11bmljYXRpb24uY3BwICovLAorCQkJCTMxNDhB
MDU0MUU2Rjg1QjYwMEQzQjMxNiAvKiBpT1NMYXlvdXRUZXN0Q29tbXVuaWNhdGlvbi5oICovLAog
CQkJCTBGMThFNzFCMUQ2QkM0RTYwMDI3RTU0NyAvKiBCaW5kaW5ncyAqLywKIAkJCQkwRjczQjU0
NzFCQTc4MkZFMDA0QjNFRjQgLyogVUlTY3JpcHRDb250ZXh0ICovLAogCQkJKTsKQEAgLTk3MCw2
ICs5NzUsNyBAQAogCQkJCUExODUxMDQwMUI5QUUxMzEwMDc0NEFFQiAvKiBQaXhlbER1bXBTdXBw
b3J0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUExODUxMDQxMUI5QUUxMzgwMDc0NEFFQiAvKiBU
ZXN0Q29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBMTg1MTAzQjFCOUFFMEUyMDA3
NDRBRUIgLyogVGVzdENvbnRyb2xsZXJDb2NvYS5tbSBpbiBTb3VyY2VzICovLAorCQkJCTMxREE4
QTNEMUU3MjA1Q0MwMEUxREYyRiAvKiBpT1NMYXlvdXRUZXN0Q29tbXVuaWNhdGlvbi5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlBMTg1MTA0MjFCOUFFMTNFMDA3NDRBRUIgLyogVGVzdEludm9jYXRp
b24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTE4NTEwM0QxQjlBRTEwNjAwNzQ0QUVCIC8qIFRl
c3RJbnZvY2F0aW9uQ0cuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY2MjJDRTkxQkJCM0ExQTAw
ODM4QUQzIC8qIFRlc3RPcHRpb25zLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9pb3MvVGVzdENvbnRyb2xsZXJJT1MubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9pb3MvVGVzdENvbnRyb2xsZXJJT1MubW0JKHJldmlzaW9uIDIx
NDQxMikKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvaW9zL1Rlc3RDb250cm9sbGVySU9TLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaW1wb3J0ICJUZXN0SW52b2NhdGlv
bi5oIgogI2ltcG9ydCAiVGVzdFJ1bm5lcldLV2ViVmlldy5oIgogI2ltcG9ydCAiVUlLaXRTUEku
aCIKKyNpbXBvcnQgImlPU0xheW91dFRlc3RDb21tdW5pY2F0aW9uLmgiCiAjaW1wb3J0IDxGb3Vu
ZGF0aW9uL0ZvdW5kYXRpb24uaD4KICNpbXBvcnQgPFVJS2l0L1VJS2l0Lmg+CiAjaW1wb3J0IDxX
ZWJLaXQvV0tQcmVmZXJlbmNlc1JlZlByaXZhdGUuaD4KQEAgLTQ5LDIxICs1MCwxMiBAQCB2b2lk
IFRlc3RDb250cm9sbGVyOjpub3RpZnlEb25lKCkKIAogdm9pZCBUZXN0Q29udHJvbGxlcjo6cGxh
dGZvcm1Jbml0aWFsaXplKCkKIHsKLSAgICBjb25zdCBjaGFyKiBpZGVudGlmaWVyID0gZ2V0ZW52
KCJJUENfSURFTlRJRklFUiIpOwotICAgIGNvbnN0IGNoYXIgKnN0ZGluUGF0aCA9IFtbTlNTdHJp
bmcgc3RyaW5nV2l0aEZvcm1hdDpAIi90bXAvJXNfSU4iLCBpZGVudGlmaWVyXSBVVEY4U3RyaW5n
XTsKLSAgICBjb25zdCBjaGFyICpzdGRvdXRQYXRoID0gW1tOU1N0cmluZyBzdHJpbmdXaXRoRm9y
bWF0OkAiL3RtcC8lc19PVVQiLCBpZGVudGlmaWVyXSBVVEY4U3RyaW5nXTsKLSAgICBjb25zdCBj
aGFyICpzdGRlcnJQYXRoID0gW1tOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiL3RtcC8lc19F
UlJPUiIsIGlkZW50aWZpZXJdIFVURjhTdHJpbmddOwotCi0gICAgaW50IGluZmQgPSBvcGVuKHN0
ZGluUGF0aCwgT19SRFdSKTsKLSAgICBkdXAyKGluZmQsIFNURElOX0ZJTEVOTyk7Ci0gICAgaW50
IG91dGZkID0gb3BlbihzdGRvdXRQYXRoLCBPX1JEV1IpOwotICAgIGR1cDIob3V0ZmQsIFNURE9V
VF9GSUxFTk8pOwotICAgIGludCBlcnJmZCA9IG9wZW4oc3RkZXJyUGF0aCwgT19SRFdSIHwgT19O
T05CTE9DSyk7Ci0gICAgZHVwMihlcnJmZCwgU1RERVJSX0ZJTEVOTyk7CisgICAgc2V0dXBpT1NM
YXlvdXRUZXN0Q29tbXVuaWNhdGlvbigpOwogfQogCiB2b2lkIFRlc3RDb250cm9sbGVyOjpwbGF0
Zm9ybURlc3Ryb3koKQogeworICAgIHRlYXJkb3duaU9TTGF5b3V0VGVzdENvbW11bmljYXRpb24o
KTsKIH0KIAogdm9pZCBUZXN0Q29udHJvbGxlcjo6aW5pdGlhbGl6ZUluamVjdGVkQnVuZGxlUGF0
aCgpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>305601</attachid>
            <date>2017-03-28 09:59:03 -0700</date>
            <delta_ts>2017-03-29 10:45:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-169419-20170328095902.patch</filename>
            <type>text/plain</type>
            <size>28956</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIxNDQ3OSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDYxIEBACisyMDE3LTAzLTI4ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICBVc2UgVENQIGluc3RlYWQgb2YgRklGT3MgZm9yIFNpbXVsYXRvci9EZXZp
Y2UgY29tbXVuaWNhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTY5NDE5CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zMDk0OTYxNT4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVc2luZyBUQ1AgaW5z
dGVhZCBvZiBGSUZPcyB3aGVuIGNvbW11bmljYXRpbmcgd2l0aCBkZXZpY2VzIGFsbG93cyB0aGUg
ZGV2aWNlIGJlaW5nIHRlc3RlZAorICAgICAgICB0byBiZSBvbiBhIGRpZmZlcmVudCBtYWNoaW5l
IHRoZW4gdGhlIG9uZSBoYW5kbGluZyB0aGUgbWFuYWdlbWVudCBvZiB0aGUgdGVzdCBydW4uCisK
KyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZS5t
bToKKyAgICAgICAgKGR1bXBSZW5kZXJUcmVlKTogQ2FsbCBzZXR1cC90ZWFyZG93bmlPU0xheW91
dFRlc3RDb21tdW5pY2F0aW9uKCkgaW5zdGVhZCBvZiB1c2luZyBGSUZPcy4KKyAgICAgICAgKiBT
Y3JpcHRzL3dlYmtpdHB5L3BvcnQvZGV2aWNlLnB5OgorICAgICAgICAoRGV2aWNlLl9faW5pdF9f
KTogSW5pdGlhbGl6ZSB0aGUgbGlzdGVuaW5nX3NvY2tldC4KKyAgICAgICAgKERldmljZS5wb3J0
KTogUmV0dXJuIHBvcnQgb2Ygc29ja2V0IGFzc29jaWF0ZWQgd2l0aCB0aGlzIGRldmljZS4KKyAg
ICAgICAgKERldmljZS5zZXR1cCk6IE9wZW4gbGlzdGVuaW5nIHNvY2tldCBvbiBhbiBvcGVuIHBv
cnQsIHNldHVwIHBsYXRmb3JtIGRldmljZS4KKyAgICAgICAgKERldmljZS50ZWFyZG93bik6IENs
b3NlIGxpc3RlbmluZyBzb2NrZXQgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZGV2aWNlLCB0ZWFyZG93
biBwbGF0Zm9ybQorICAgICAgICBkZXZpY2UuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9w
b3J0L2lvcy5weToKKyAgICAgICAgKElPU1BvcnQuc2V0dXBfdGVzdF9ydW4pOiBTZXR1cCBlYWNo
IGRldmljZS4KKyAgICAgICAgKElPU1BvcnQuY2xlYW5fdXBfdGVzdF9ydW4pOiBUZWFyZG93biBl
YWNoIGRldmljZS4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zX3NpbXVsYXRv
ci5weToKKyAgICAgICAgKElPU1NpbXVsYXRvclBvcnQpOiBXb3JrIGFyb3VuZCBkZXZpY2UgcGVy
c2lzdGVuY2UgYnVnLgorICAgICAgICAoSU9TU2ltdWxhdG9yUG9ydC5fX2luaXRfXyk6IERpdHRv
LgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9zaW11bGF0b3JfcHJvY2Vzcy5weToK
KyAgICAgICAgKFNpbXVsYXRvclByb2Nlc3MpOgorICAgICAgICAoU2ltdWxhdG9yUHJvY2Vzcy5O
b25CbG9ja2luZ0ZpbGVGcm9tU29ja2V0KTogQWRkIHRvIHdvcmsgYXJvdW5kIHNob3J0Y29taW5n
cyBpbgorICAgICAgICBQeXRob24gMuKAmXMgbWFrZWZpbGUuCisgICAgICAgIChTaW11bGF0b3JQ
cm9jZXNzLk5vbkJsb2NraW5nRmlsZUZyb21Tb2NrZXQuX19pbml0X18pOiBJbml0aWFsaXplIGZp
bGUgd2l0aCBzb2NrZXQuCisgICAgICAgIChTaW11bGF0b3JQcm9jZXNzLlJlYWRGaWxlU29ja2V0
LmNsb3NlKTogQ2xvc2UgZmlsZSBhbmQgdGhlbiBzb2NrZXQ7CisgICAgICAgIChTaW11bGF0b3JQ
cm9jZXNzLl9faW5pdF9fKTogUGFzcyBUQ1AgcG9ydCBvdmVyIGVudmlyb25tZW50LCByZW1vdmUg
RklGTyBuYW1lcy4KKyAgICAgICAgKFNpbXVsYXRvclByb2Nlc3MuX19nZXRhdHRyX18pOiBFeHBv
c2UgYWxsIGZpbGUgYXR0cmlidXRlcy4KKyAgICAgICAgKFNpbXVsYXRvclByb2Nlc3MuX2FjY2Vw
dF9jb25uZWN0aW9uX2NyZWF0ZV9maWxlKTogV2FpdCBmb3IgY29ubmVjdGlvbiBmcm9tIHNlcnZl
ciBhbmQKKyAgICAgICAgY3JlYXRlIGFuZCByZXR1cm4gYSBmaWxlLWxpa2Ugb2JqZWN0IGZyb20g
dGhlIGluY29taW5nIGNvbm5lY3Rpb24uCisgICAgICAgIChTaW11bGF0b3JQcm9jZXNzLl9zdGFy
dCk6IFVzZSBUQ1AgY29ubmVjdGlvbnMgaW5zdGVhZCBvZiBGSUZPcy4KKyAgICAgICAgKFNpbXVs
YXRvclByb2Nlc3MuX3N0YXJ0LmhhbmRsZXIpOiBPdXRwdXQgc2VydmVyIHBvcnQgaW4gdGltZW91
dCBleGNlcHRpb24uCisgICAgICAgIChTaW11bGF0b3JQcm9jZXNzLl9yZXNldCk6IERlbGV0ZWQu
CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS94Y29kZS9kZXZpY2UucHk6CisgICAgICAgIChE
ZXZpY2UpOgorICAgICAgICAoRGV2aWNlLl9faW5pdF9fKTogSW5pdGlhbGl6ZSB0aGlzIGRldmlj
ZSBpbiBVRElEIHRvIGxpc3RlbmluZyBzb2NrZXQgbWFwLgorICAgICAgICAoRGV2aWNlLnBvcnQp
OiBSZXR1cm4gcG9ydCBvZiBzb2NrZXQgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZGV2aWNlLgorICAg
ICAgICAoRGV2aWNlLmxpc3RlbmluZ19zb2NrZXQpOiBSZXR1cm4gc29ja2V0IGFzc29jaWF0ZWQg
d2l0aCB0aGlzIGRldmljZS4KKyAgICAgICAgKERldmljZS5zZXR1cCk6IE9wZW4gc2VydmVyIHNv
Y2tldCBvbiBhbiBvcGVuIHBvcnQuCisgICAgICAgIChEZXZpY2UudGVhcmRvd24pOiBDbG9zZSBz
ZXJ2ZXIgc29ja2V0IGFzc29jaWF0ZWQgd2l0aCB0aGlzIGRldmljZS4KKyAgICAgICAgKiBUZXN0
UnVubmVyU2hhcmVkL2lPU0xheW91dFRlc3RDb21tdW5pY2F0aW9uLmNwcDogQWRkZWQuCisgICAg
ICAgIChjb25uZWN0VG9TZXJ2ZXIpOiBSZXR1cm4gc29ja2V0IGNvbm5lY3RlZCB0byB0aGUgcHJv
dmlkZWQgc2VydmVyIGFkZHJlc3MuCisgICAgICAgIChzZXR1cGlPU0xheW91dFRlc3RDb21tdW5p
Y2F0aW9uKTogQ29ubmVjdCBzdGRpbiwgc3Rkb3V0IGFuZCBzdGRlcnIgYXMgc29ja2V0IHRvIGEK
KyAgICAgICAgVENQIHNlcnZlciBydW5uaW5nIG9uIGxvY2FsaG9zdC4KKyAgICAgICAgKHRlYXJk
b3duaU9TTGF5b3V0VGVzdENvbW11bmljYXRpb24pOiBDbG9zZSBzdGRpbiwgc3Rkb3V0IGFuZCBz
dGRlcnIgVENQIHNvY2tldHMuCisgICAgICAgICogVGVzdFJ1bm5lclNoYXJlZC9pT1NMYXlvdXRU
ZXN0Q29tbXVuaWNhdGlvbi5oOiBBZGRlZC4KKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL1dl
YktpdFRlc3RSdW5uZXIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBXZWJL
aXRUZXN0UnVubmVyL2lvcy9UZXN0Q29udHJvbGxlcklPUy5tbToKKyAgICAgICAgKFdUUjo6VGVz
dENvbnRyb2xsZXI6OnBsYXRmb3JtSW5pdGlhbGl6ZSk6IENhbGwgc2V0dXBpT1NMYXlvdXRUZXN0
Q29tbXVuaWNhdGlvbigpCisgICAgICAgIGluc3RlYWQgb2YgdXNpbmcgRklGT3MuCisgICAgICAg
IChXVFI6OlRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybURlc3Ryb3kpOiBDYWxsIHRlYXJkb3duaU9T
TGF5b3V0VGVzdENvbW11bmljYXRpb24oKS4KKwogMjAxNy0wMy0yOCAgSm9uYXRoYW4gQmVkYXJk
ICA8amJlZGFyZEBhcHBsZS5jb20+CiAKICAgICAgICAgd2Via2l0cHk6IFVzZSBob3N0IHBhdHRl
cm4gZm9yIGRldmljZXMKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRl
clRyZWUvRHVtcFJlbmRlclRyZWUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24g
MjE0NDc0KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtODAsNiArODAsNyBAQAogCQkyRDQw
M0YxQjE1MDg3MjA5MDA1MzU4RDIgLyogTGF5b3V0VGVzdEhlbHBlci5tIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkQ0MDNFQTIxNTA4NzE0MjAwNTM1OEQy
IC8qIExheW91dFRlc3RIZWxwZXIubSAqLzsgfTsKIAkJMkRBMkUzQTUxRTFCQTU0MTAwQTNCQkQw
IC8qIER1bXBSZW5kZXJUcmVlU3BlbGxDaGVja2VyLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkRBMkUzQTQxRTFCQTU0MTAwQTNCQkQwIC8qIER1bXBS
ZW5kZXJUcmVlU3BlbGxDaGVja2VyLm1tICovOyB9OwogCQkzMTExN0IzRDE1RDlBNTZBMDAxNjNC
QzggLyogTW9ja1dlYk5vdGlmaWNhdGlvblByb3ZpZGVyLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzExMTdCM0IxNUQ5QTU2QTAwMTYzQkM4IC8qIE1v
Y2tXZWJOb3RpZmljYXRpb25Qcm92aWRlci5tbSAqLzsgfTsKKwkJMzEyOTQzRjkxRTcxRjJCNDAw
MUVFMkNDIC8qIGlPU0xheW91dFRlc3RDb21tdW5pY2F0aW9uLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxNDhBMDU1MUU2RjkwRjQwMEQzQjMxNiAv
KiBpT1NMYXlvdXRUZXN0Q29tbXVuaWNhdGlvbi5jcHAgKi87IH07CiAJCTQ0NjRDQUJFMUMyMEEw
OEIwMEU1QkI1NSAvKiBEdW1wUmVuZGVyVHJlZUFwcE1haW4ubW0gaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NDY0Q0FCRDFDMjBBMDcwMDBFNUJCNTUgLyog
RHVtcFJlbmRlclRyZWVBcHBNYWluLm1tICovOyB9OwogCQk0QUQ2QTExNDEzQzgxMjQwMDBFQTk3
MzcgLyogRm9ybVZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDRBRDZBMTEzMTNDODEyNDAwMEVBOTczNyAvKiBGb3JtVmFsdWUuY3BwICovOyB9
OwogCQk1MTA2ODAzRTE1Q0M3QjEwMDAxQThBMjMgLyogU2xvd05QUE5ldy5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTA2ODAzRDE1Q0M3QjEwMDAx
QThBMjMgLyogU2xvd05QUE5ldy5jcHAgKi87IH07CkBAIC0yOTQsNiArMjk1LDggQEAKIAkJMkRB
MkUzQTQxRTFCQTU0MTAwQTNCQkQwIC8qIER1bXBSZW5kZXJUcmVlU3BlbGxDaGVja2VyLm1tICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gRHVtcFJlbmRlclRyZWVTcGVs
bENoZWNrZXIubW07IHBhdGggPSBtYWMvRHVtcFJlbmRlclRyZWVTcGVsbENoZWNrZXIubW07IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxMTE3QjNBMTVEOUE1NkEwMDE2M0JDOCAvKiBN
b2NrV2ViTm90aWZpY2F0aW9uUHJvdmlkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gTW9ja1dlYk5vdGlmaWNhdGlvblByb3ZpZGVyLmg7IHBhdGggPSBtYWMvTW9ja1dlYk5v
dGlmaWNhdGlvblByb3ZpZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxMTE3
QjNCMTVEOUE1NkEwMDE2M0JDOCAvKiBNb2NrV2ViTm90aWZpY2F0aW9uUHJvdmlkZXIubW0gKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBNb2NrV2ViTm90aWZpY2F0aW9u
UHJvdmlkZXIubW07IHBhdGggPSBtYWMvTW9ja1dlYk5vdGlmaWNhdGlvblByb3ZpZGVyLm1tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTQ4QTA1NTFFNkY5MEY0MDBEM0IzMTYgLyog
aU9TTGF5b3V0VGVzdENvbW11bmljYXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gaU9TTGF5b3V0VGVzdENvbW11bmljYXRpb24uY3BwOyBwYXRoID0gLi4vVGVz
dFJ1bm5lclNoYXJlZC9pT1NMYXlvdXRUZXN0Q29tbXVuaWNhdGlvbi5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTMxNDhBMDU2MUU2RjkwRjQwMEQzQjMxNiAvKiBpT1NMYXlvdXRU
ZXN0Q29tbXVuaWNhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBpT1NM
YXlvdXRUZXN0Q29tbXVuaWNhdGlvbi5oOyBwYXRoID0gLi4vVGVzdFJ1bm5lclNoYXJlZC9pT1NM
YXlvdXRUZXN0Q29tbXVuaWNhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkz
MkE3MEFBQjAzNzA1RTFGMDBDOTE3ODMgLyogRHVtcFJlbmRlclRyZWVQcmVmaXguaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRHVtcFJlbmRlclRyZWVQcmVmaXguaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzc1RjA5NzEwREFDM0NCNjAwQzhCNEU1IC8qIFdlYktp
dFdlaWdodFdhdGNoZXIxMDAudHRmICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gZmlsZTsgbmFtZSA9IFdlYktpdFdlaWdodFdhdGNoZXIxMDAudHRmOyBw
YXRoID0gZm9udHMvV2ViS2l0V2VpZ2h0V2F0Y2hlcjEwMC50dGY7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTM3NUYwOTcyMERBQzNDQjYwMEM4QjRFNSAvKiBXZWJLaXRXZWlnaHRXYXRj
aGVyMjAwLnR0ZiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IGZpbGU7IG5hbWUgPSBXZWJLaXRXZWlnaHRXYXRjaGVyMjAwLnR0ZjsgcGF0aCA9IGZvbnRz
L1dlYktpdFdlaWdodFdhdGNoZXIyMDAudHRmOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtNDcyLDYgKzQ3NSw3IEBACiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAog
CQkJCTBGMThFNkYxMUQ2QjlDNjQwMDI3RTU0NyAvKiBEZXJpdmVkU291cmNlcy5tYWtlICovLAor
CQkJCTMxNDhBMDY1MUU2RjkwRjQwMEQzQjMxNiAvKiBUZXN0UnVubmVyU2hhcmVkICovLAogCQkJ
CTBGMThFNkU3MUQ2QjlCRjUwMDI3RTU0NyAvKiBVSVNjcmlwdENvbnRleHQgKi8sCiAJCQkJQTEx
NThENkExODkyN0NFMTAwODhDMTdCIC8qIGlvcyAqLywKIAkJCQlBMTM0RTUzNDE4OTA1RTZDMDA5
MDFEMDYgLyogY29uZmlnLmggKi8sCkBAIC02OTUsNiArNjk5LDE2IEBACiAJCQluYW1lID0gTGF5
b3V0VGVzdEhlbHBlcjsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07CisJCTMxNDhB
MDY1MUU2RjkwRjQwMEQzQjMxNiAvKiBUZXN0UnVubmVyU2hhcmVkICovID0geworCQkJaXNhID0g
UEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQkzMTQ4QTA1NTFFNkY5MEY0MDBEM0IzMTYg
LyogaU9TTGF5b3V0VGVzdENvbW11bmljYXRpb24uY3BwICovLAorCQkJCTMxNDhBMDU2MUU2Rjkw
RjQwMEQzQjMxNiAvKiBpT1NMYXlvdXRUZXN0Q29tbXVuaWNhdGlvbi5oICovLAorCQkJKTsKKwkJ
CW5hbWUgPSBUZXN0UnVubmVyU2hhcmVkOworCQkJcGF0aCA9IC4uL1dlYktpdFRlc3RSdW5uZXI7
CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQk0MTdEQTkxODEzNzM2NzREMDA3
QzU3RkIgLyogV2ViQ29yZVRlc3RTdXBwb3J0ICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJ
CQljaGlsZHJlbiA9ICgKQEAgLTExNDUsNiArMTE1OSw3IEBACiAJCQkJN0NCQkMzMjMxRERGQ0Y5
QTAwNzg2QjlEIC8qIFRlc3RPcHRpb25zLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYxOEU3MEYx
RDZCQUNCNjAwMjdFNTQ3IC8qIFVJU2NyaXB0Q29udHJvbGxlck1hYy5tbSBpbiBTb3VyY2VzICov
LAogCQkJCUJDOUQ5MDI0MEM5NzQ3MkUwMDk5QTRBMyAvKiBXb3JrUXVldWUuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJMzEyOTQzRjkxRTcxRjJCNDAwMUVFMkNDIC8qIGlPU0xheW91dFRlc3RDb21t
dW5pY2F0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDQTE4QjI2MEM5QjAxNUMwMDExNDM2
OSAvKiBXb3JrUXVldWVJdGVtTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25s
eUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CkluZGV4OiBUb29scy9EdW1wUmVuZGVy
VHJlZS9tYWMvRHVtcFJlbmRlclRyZWUubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRl
clRyZWUvbWFjL0R1bXBSZW5kZXJUcmVlLm1tCShyZXZpc2lvbiAyMTQ0NzQpCisrKyBUb29scy9E
dW1wUmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRyZWUubW0JKHdvcmtpbmcgY29weSkKQEAgLTEw
NCw2ICsxMDQsNyBAQAogI2lmIFBMQVRGT1JNKElPUykKICNpbXBvcnQgIkR1bXBSZW5kZXJUcmVl
QnJvd3NlclZpZXcuaCIKICNpbXBvcnQgIlVJS2l0U1BJLmgiCisjaW1wb3J0ICJpT1NMYXlvdXRU
ZXN0Q29tbXVuaWNhdGlvbi5oIgogI2ltcG9ydCA8UXVhcnR6Q29yZS9RdWFydHpDb3JlLmg+CiAj
aW1wb3J0IDxXZWJDb3JlL0NvcmVHcmFwaGljc1NQSS5oPgogI2ltcG9ydCA8V2ViS2l0L1dBS1dp
bmRvdy5oPgpAQCAtMTIzNiwxNyArMTIzNyw3IEBAIHZvaWQgd3JpdGVDcmFzaGVkTWVzc2FnZU9u
RmF0YWxFcnJvcihpbnQKIHZvaWQgZHVtcFJlbmRlclRyZWUoaW50IGFyZ2MsIGNvbnN0IGNoYXIg
KmFyZ3ZbXSkKIHsKICNpZiBQTEFURk9STShJT1MpCi0gICAgY29uc3QgY2hhciogaWRlbnRpZmll
ciA9IGdldGVudigiSVBDX0lERU5USUZJRVIiKTsKLSAgICBjb25zdCBjaGFyICpzdGRpblBhdGgg
PSBbW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIvdG1wLyVzX0lOIiwgaWRlbnRpZmllcl0g
VVRGOFN0cmluZ107Ci0gICAgY29uc3QgY2hhciAqc3Rkb3V0UGF0aCA9IFtbTlNTdHJpbmcgc3Ry
aW5nV2l0aEZvcm1hdDpAIi90bXAvJXNfT1VUIiwgaWRlbnRpZmllcl0gVVRGOFN0cmluZ107Ci0g
ICAgY29uc3QgY2hhciAqc3RkZXJyUGF0aCA9IFtbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpA
Ii90bXAvJXNfRVJST1IiLCBpZGVudGlmaWVyXSBVVEY4U3RyaW5nXTsKLQotICAgIGludCBpbmZk
ID0gb3BlbihzdGRpblBhdGgsIE9fUkRXUik7Ci0gICAgZHVwMihpbmZkLCBTVERJTl9GSUxFTk8p
OwotICAgIGludCBvdXRmZCA9IG9wZW4oc3Rkb3V0UGF0aCwgT19SRFdSKTsKLSAgICBkdXAyKG91
dGZkLCBTVERPVVRfRklMRU5PKTsKLSAgICBpbnQgZXJyZmQgPSBvcGVuKHN0ZGVyclBhdGgsIE9f
UkRXUiB8IE9fTk9OQkxPQ0spOwotICAgIGR1cDIoZXJyZmQsIFNUREVSUl9GSUxFTk8pOworICAg
IHNldHVwaU9TTGF5b3V0VGVzdENvbW11bmljYXRpb24oKTsKICNlbmRpZgogCiAgICAgc2lnbmFs
KFNJR0lMTCwgJndyaXRlQ3Jhc2hlZE1lc3NhZ2VPbkZhdGFsRXJyb3IpOwpAQCAtMTMwNyw5ICsx
Mjk4LDcgQEAgdm9pZCBkdW1wUmVuZGVyVHJlZShpbnQgYXJnYywgY29uc3QgY2hhcgogICAgIH0K
IAogI2lmIFBMQVRGT1JNKElPUykKLSAgICBjbG9zZShpbmZkKTsKLSAgICBjbG9zZShvdXRmZCk7
Ci0gICAgY2xvc2UoZXJyZmQpOworICAgIHRlYXJkb3duaU9TTGF5b3V0VGVzdENvbW11bmljYXRp
b24oKTsKICNlbmRpZgogfQogCkluZGV4OiBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZGV2
aWNlLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9kZXZpY2Uu
cHkJKHJldmlzaW9uIDIxNDQ3NCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9kZXZp
Y2UucHkJKHdvcmtpbmcgY29weSkKQEAgLTIwLDEwICsyMCwxNyBAQAogIyAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUwogIyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KIAoraW1wb3J0IHNvY2tldAogCiBjbGFzcyBEZXZpY2Uob2JqZWN0KToK
ICAgICBkZWYgX19pbml0X18oc2VsZiwgcGxhdGZvcm1fZGV2aWNlKToKICAgICAgICAgc2VsZi5w
bGF0Zm9ybV9kZXZpY2UgPSBwbGF0Zm9ybV9kZXZpY2UKKyAgICAgICAgc2VsZi5saXN0ZW5pbmdf
c29ja2V0ID0gTm9uZQorCisgICAgZGVmIHBvcnQoc2VsZik6CisgICAgICAgIGlmIG5vdCBzZWxm
Lmxpc3RlbmluZ19zb2NrZXQ6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICByZXR1
cm4gc2VsZi5saXN0ZW5pbmdfc29ja2V0LmdldHNvY2tuYW1lKClbMV0KIAogICAgIGRlZiBpbnN0
YWxsX2FwcChzZWxmLCBhcHBfcGF0aCwgZW52PU5vbmUpOgogICAgICAgICByZXR1cm4gc2VsZi5w
bGF0Zm9ybV9kZXZpY2UuaW5zdGFsbF9hcHAoYXBwX3BhdGgsIGVudikKQEAgLTMxLDYgKzM4LDIx
IEBAIGNsYXNzIERldmljZShvYmplY3QpOgogICAgIGRlZiBsYXVuY2hfYXBwKHNlbGYsIGJ1bmRs
ZV9pZCwgYXJncywgZW52PU5vbmUpOgogICAgICAgICByZXR1cm4gc2VsZi5wbGF0Zm9ybV9kZXZp
Y2UubGF1bmNoX2FwcChidW5kbGVfaWQsIGFyZ3MsIGVudikKIAorICAgIGRlZiBzZXR1cChzZWxm
KToKKyAgICAgICAgaWYgbm90IHNlbGYubGlzdGVuaW5nX3NvY2tldDoKKyAgICAgICAgICAgIHNl
bGYubGlzdGVuaW5nX3NvY2tldCA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tl
dC5TT0NLX1NUUkVBTSkKKyAgICAgICAgICAgIHNlbGYubGlzdGVuaW5nX3NvY2tldC5zZXRzb2Nr
b3B0KHNvY2tldC5TT0xfU09DS0VULCBzb2NrZXQuU09fUkVVU0VBRERSLCAxKQorICAgICAgICAg
ICAgc2VsZi5saXN0ZW5pbmdfc29ja2V0LmJpbmQoKCdsb2NhbGhvc3QnLCAwKSkKKworICAgICAg
ICBpZiBoYXNhdHRyKHNlbGYucGxhdGZvcm1fZGV2aWNlLCAnc2V0dXAnKToKKyAgICAgICAgICAg
IHNlbGYucGxhdGZvcm1fZGV2aWNlLnNldHVwKCkKKworICAgIGRlZiB0ZWFyZG93bihzZWxmKToK
KyAgICAgICAgaWYgaGFzYXR0cihzZWxmLnBsYXRmb3JtX2RldmljZSwgJ3RlYXJkb3duJyk6Cisg
ICAgICAgICAgICBzZWxmLnBsYXRmb3JtX2RldmljZS50ZWFyZG93bigpCisKKyAgICAgICAgc2Vs
Zi5saXN0ZW5pbmdfc29ja2V0ID0gTm9uZQorCiAgICAgQHByb3BlcnR5CiAgICAgZGVmIGV4ZWN1
dGl2ZShzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYucGxhdGZvcm1fZGV2aWNlLmV4ZWN1dGl2
ZQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvcy5weQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zLnB5CShyZXZpc2lvbiAyMTQ0NzQpCisr
KyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0x
MTcsMyArMTE3LDEyIEBAIGNsYXNzIElPU1BvcnQoRGFyd2luUG9ydCk6CiAgICAgICAgICAgICAj
IGNyYXNoLCBidXQgdGhpcyBjcmFzaCB3aWxsIG9jY3VyIHBvc3QtbGF1bmNoLCBhZnRlciBpbnN0
YWxsX2FwcCBoYXMgYWxyZWFkeSBraWxsZWQgdGhlIHByb2Nlc3MuCiAgICAgICAgICAgICBpZiBu
b3QgZGV2aWNlLmluc3RhbGxfYXBwKHNlbGYuX3BhdGhfdG9fZHJpdmVyKCksIHsnRFlMRF9MSUJS
QVJZX1BBVEgnOiBzZWxmLl9idWlsZF9wYXRoKCl9KToKICAgICAgICAgICAgICAgICByYWlzZSBS
dW50aW1lRXJyb3IoJ0ZhaWxlZCB0byBpbnN0YWxsIGFwcCB7fSBvbiBkZXZpY2Uge30nLmZvcm1h
dChzZWxmLl9wYXRoX3RvX2RyaXZlcigpLCBkZXZpY2UudWRpZCkpCisKKyAgICAgICAgZm9yIGkg
aW4geHJhbmdlKHNlbGYuY2hpbGRfcHJvY2Vzc2VzKCkpOgorICAgICAgICAgICAgc2VsZi5kZXZp
Y2VfZm9yX3dvcmtlcl9udW1iZXIoaSkuc2V0dXAoKQorCisgICAgZGVmIGNsZWFuX3VwX3Rlc3Rf
cnVuKHNlbGYpOgorICAgICAgICBzdXBlcihJT1NQb3J0LCBzZWxmKS5jbGVhbl91cF90ZXN0X3J1
bigpCisKKyAgICAgICAgZm9yIGkgaW4geHJhbmdlKHNlbGYuY2hpbGRfcHJvY2Vzc2VzKCkpOgor
ICAgICAgICAgICAgc2VsZi5kZXZpY2VfZm9yX3dvcmtlcl9udW1iZXIoaSkudGVhcmRvd24oKQpJ
bmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvc19zaW11bGF0b3IucHkKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvc19zaW11bGF0b3IucHkJKHJl
dmlzaW9uIDIxNDQ3NCkKKysrIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3Nfc2ltdWxh
dG9yLnB5CSh3b3JraW5nIGNvcHkpCkBAIC02Niw3ICs2Niw5IEBAIGNsYXNzIElPU1NpbXVsYXRv
clBvcnQoSU9TUG9ydCk6CiAgICAgICAgIH0sCiAgICAgfQogCisgICAgI0ZJWE1FOiBQb3J0cyBh
cmUgcmVjcmVhdGVkIGluIGVhY2ggcHJvY2Vzcy4gIFRoaXMgaXMgYSBwcm9ibGVtIGZvciBJT1NT
aW11bGF0b3JQb3J0LCBpdCBtZWFucyBkZXZpY2VzIGFyZSBub3QgcGVyc2lzdGVudAogICAgIF9E
RVZJQ0VfTUFQID0ge30KKyAgICBfQ1VSUkVOVF9ERVZJQ0UgPSBOb25lCiAKICAgICBkZWYgX19p
bml0X18oc2VsZiwgaG9zdCwgcG9ydF9uYW1lLCAqKmt3YXJncyk6CiAgICAgICAgIHN1cGVyKElP
U1NpbXVsYXRvclBvcnQsIHNlbGYpLl9faW5pdF9fKGhvc3QsIHBvcnRfbmFtZSwgKiprd2FyZ3Mp
CkBAIC03NSw3ICs3Nyw5IEBAIGNsYXNzIElPU1NpbXVsYXRvclBvcnQoSU9TUG9ydCk6CiAgICAg
ICAgIHNlbGYuX2RldmljZV9jbGFzcyA9IG9wdGlvbmFsX2RldmljZV9jbGFzcyBpZiBvcHRpb25h
bF9kZXZpY2VfY2xhc3MgZWxzZSBzZWxmLkRFRkFVTFRfREVWSUNFX0NMQVNTCiAgICAgICAgIF9s
b2cuZGVidWcoJ0lPU1NpbXVsYXRvclBvcnQgX2RldmljZV9jbGFzcyBpcyAlcycsIHNlbGYuX2Rl
dmljZV9jbGFzcykKIAotICAgICAgICBzZWxmLl9jdXJyZW50X2RldmljZSA9IERldmljZShTaW11
bGF0b3IoaG9zdCkuY3VycmVudF9kZXZpY2UoKSkKKyAgICAgICAgaWYgbm90IElPU1NpbXVsYXRv
clBvcnQuX0NVUlJFTlRfREVWSUNFOgorICAgICAgICAgICAgSU9TU2ltdWxhdG9yUG9ydC5fQ1VS
UkVOVF9ERVZJQ0UgPSBEZXZpY2UoU2ltdWxhdG9yKGhvc3QpLmN1cnJlbnRfZGV2aWNlKCkpCisg
ICAgICAgIHNlbGYuX2N1cnJlbnRfZGV2aWNlID0gSU9TU2ltdWxhdG9yUG9ydC5fQ1VSUkVOVF9E
RVZJQ0UKICAgICAgICAgaWYgbm90IHNlbGYuX2N1cnJlbnRfZGV2aWNlOgogICAgICAgICAgICAg
c2VsZi5zZXRfb3B0aW9uKCdkZWRpY2F0ZWRfc2ltdWxhdG9ycycsIFRydWUpCiAgICAgICAgIGlm
IG5vdCBzZWxmLmdldF9vcHRpb24oJ2RlZGljYXRlZF9zaW11bGF0b3JzJyk6CkluZGV4OiBUb29s
cy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvc2ltdWxhdG9yX3Byb2Nlc3MucHkKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3NpbXVsYXRvcl9wcm9jZXNzLnB5CShyZXZp
c2lvbiAyMTQ0NzQpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvc2ltdWxhdG9yX3By
b2Nlc3MucHkJKHdvcmtpbmcgY29weSkKQEAgLTU0LDY0ICs1NCw2MSBAQCBjbGFzcyBTaW11bGF0
b3JQcm9jZXNzKFNlcnZlclByb2Nlc3MpOgogICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4w
MSkgICMgSW4gc2Vjb25kcwogICAgICAgICAgICAgcmV0dXJuIHNlbGYucmV0dXJuY29kZQogCisg
ICAgIyBQeXRob24gMidzIGltcGxlbWVudGF0aW9uIG9mIG1ha2VmaWxlIGRvZXMgbm90IHJldHVy
bgorICAgICMgYSBub24tYmxvY2tpbmcgZmlsZS4KKyAgICBjbGFzcyBOb25CbG9ja2luZ0ZpbGVG
cm9tU29ja2V0KG9iamVjdCk6CisKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNvY2ssIHR5
cGUpOgorICAgICAgICAgICAgc2VsZi5zb2NrZXQgPSBzb2NrCisgICAgICAgICAgICBzZWxmLl9m
aWxlID0gb3MuZmRvcGVuKHNvY2suZmlsZW5vKCksIHR5cGUsIDApCisgICAgICAgICAgICBTZXJ2
ZXJQcm9jZXNzLl9zZXRfZmlsZV9ub25ibG9ja2luZyhzZWxmLl9maWxlKQorCisgICAgICAgIGRl
ZiBfX2dldGF0dHJfXyhzZWxmLCBuYW1lKToKKyAgICAgICAgICAgIHJldHVybiBnZXRhdHRyKHNl
bGYuX2ZpbGUsIG5hbWUpCisKKyAgICAgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICAgICAg
cmVzdWx0ID0gc2VsZi5fZmlsZS5jbG9zZSgpCisgICAgICAgICAgICBzZWxmLnNvY2tldC5jbG9z
ZSgpCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0CisKKwogICAgIGRlZiBfX2luaXRfXyhzZWxm
LCBwb3J0X29iaiwgbmFtZSwgY21kLCBlbnY9Tm9uZSwgdW5pdmVyc2FsX25ld2xpbmVzPUZhbHNl
LCB0cmVhdF9ub19kYXRhX2FzX2NyYXNoPUZhbHNlLCB3b3JrZXJfbnVtYmVyPU5vbmUpOgogICAg
ICAgICBzZWxmLl9idW5kbGVfaWQgPSBwb3J0X29iai5hcHBfaWRlbnRpZmllcl9mcm9tX2J1bmRs
ZShjbWRbMF0pCiAgICAgICAgIHNlbGYuX2RldmljZSA9IHBvcnRfb2JqLmRldmljZV9mb3Jfd29y
a2VyX251bWJlcih3b3JrZXJfbnVtYmVyKQotICAgICAgICBlbnZbJ0lQQ19JREVOVElGSUVSJ10g
PSBzZWxmLl9idW5kbGVfaWQgKyAnLScgKyBzZWxmLl9kZXZpY2UudWRpZAotCi0gICAgICAgICMg
VGhpcyBsb2NhdGlvbiBtYXRjaGVzIHRoZSBsb2NhdGlvbiB1c2VkIGJ5IFdlYktpdFRlc3RSdW5u
ZXIgYW5kIER1bXBSZW5kZXJUcmVlCi0gICAgICAgICMgZm9yIHRoZSBvdGhlciBzaWRlIG9mIHRo
ZXNlIGZpZm9zLgotICAgICAgICBmaWxlX2xvY2F0aW9uID0gJy90bXAvJyArIGVudlsnSVBDX0lE
RU5USUZJRVInXQotICAgICAgICBzZWxmLl9pbl9wYXRoID0gZmlsZV9sb2NhdGlvbiArICdfSU4n
Ci0gICAgICAgIHNlbGYuX291dF9wYXRoID0gZmlsZV9sb2NhdGlvbiArICdfT1VUJwotICAgICAg
ICBzZWxmLl9lcnJvcl9wYXRoID0gZmlsZV9sb2NhdGlvbiArICdfRVJST1InCiAKKyAgICAgICAg
ZW52WydQT1JUJ10gPSBzdHIoc2VsZi5fZGV2aWNlLnBvcnQoKSkKICAgICAgICAgc3VwZXIoU2lt
dWxhdG9yUHJvY2Vzcywgc2VsZikuX19pbml0X18ocG9ydF9vYmosIG5hbWUsIGNtZCwgZW52LCB1
bml2ZXJzYWxfbmV3bGluZXMsIHRyZWF0X25vX2RhdGFfYXNfY3Jhc2gpCiAKLSAgICBkZWYgX3Jl
c2V0KHNlbGYpOgotICAgICAgICBzdXBlcihTaW11bGF0b3JQcm9jZXNzLCBzZWxmKS5fcmVzZXQo
KQotCi0gICAgICAgICMgVW5saW5rcyBhcmUgbmVlZGVkIG9uIHJlc2V0IGluIHRoZSBldmVudCB0
aGF0IHRoZSBQeXRob24gY29kZSB1bmV4cGVjdGVkbHkKLSAgICAgICAgIyBmYWlscyBiZXR3ZWVu
IF9zdGFydCgpIGFuZCBraWxsKCkuICBUaGlzIGNhbiBiZSBjYXVzZWQgYnkgYSBTSUdLSUxMIG9y
IGEgY3Jhc2guCi0gICAgICAgICMgVGhpcyBlbnN1cmVzIHRoYXQgb3MubWtmaWZvKCkgd2lsbCBu
b3QgYmUgb2JzdHJ1Y3RlZCBieSBwcmV2aW91cyBmaWZvcy4KLSAgICAgICAgIyBPdGhlciBmaWxl
cyB3aWxsIHN0aWxsIGNhdXNlIG9zLm1rZmlmbygpIHRvIGZhaWwuCi0gICAgICAgIHRyeToKLSAg
ICAgICAgICAgIG9zLnVubGluayhzZWxmLl9pbl9wYXRoKQotICAgICAgICBleGNlcHQ6Ci0gICAg
ICAgICAgICBwYXNzCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIG9zLnVubGluayhzZWxmLl9v
dXRfcGF0aCkKLSAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgcGFzcwotICAgICAgICB0cnk6
Ci0gICAgICAgICAgICBvcy51bmxpbmsoc2VsZi5fZXJyb3JfcGF0aCkKLSAgICAgICAgZXhjZXB0
OgotICAgICAgICAgICAgcGFzcworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgX2FjY2VwdF9j
b25uZWN0aW9uX2NyZWF0ZV9maWxlKHNlcnZlciwgdHlwZSk6CisgICAgICAgIGNvbm5lY3Rpb24s
IGFkZHJlc3MgPSBzZXJ2ZXIuYWNjZXB0KCkKKyAgICAgICAgYXNzZXJ0IGFkZHJlc3NbMF0gPT0g
JzEyNy4wLjAuMScKKyAgICAgICAgcmV0dXJuIFNpbXVsYXRvclByb2Nlc3MuTm9uQmxvY2tpbmdG
aWxlRnJvbVNvY2tldChjb25uZWN0aW9uLCB0eXBlKQogCiAgICAgZGVmIF9zdGFydChzZWxmKToK
ICAgICAgICAgaWYgc2VsZi5fcHJvYzoKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ3t9
IGFscmVhZHkgcnVubmluZycuZm9ybWF0KHNlbGYuX25hbWUpKQogICAgICAgICBzZWxmLl9yZXNl
dCgpCiAKLSAgICAgICAgRklGT19QRVJNSVNTSU9OX0ZMQUdTID0gMDYwMCAgIyBPbmx5IG93bmVy
IGNhbiByZWFkIGFuZCB3cml0ZQotICAgICAgICBvcy5ta2ZpZm8oc2VsZi5faW5fcGF0aCwgRklG
T19QRVJNSVNTSU9OX0ZMQUdTKQotICAgICAgICBvcy5ta2ZpZm8oc2VsZi5fb3V0X3BhdGgsIEZJ
Rk9fUEVSTUlTU0lPTl9GTEFHUykKLSAgICAgICAgb3MubWtmaWZvKHNlbGYuX2Vycm9yX3BhdGgs
IEZJRk9fUEVSTUlTU0lPTl9GTEFHUykKLQotICAgICAgICBzdGRvdXQgPSBvcy5mZG9wZW4ob3Mu
b3BlbihzZWxmLl9vdXRfcGF0aCwgb3MuT19SRE9OTFkgfCBvcy5PX05PTkJMT0NLKSwgJ3JiJykK
LSAgICAgICAgc3RkZXJyID0gb3MuZmRvcGVuKG9zLm9wZW4oc2VsZi5fZXJyb3JfcGF0aCwgb3Mu
T19SRE9OTFkgfCBvcy5PX05PTkJMT0NLKSwgJ3JiJykKLQorICAgICAgICAjIEVhY2ggZGV2aWNl
IGhhcyBhIGxpc3RlbmluZyBzb2NrZXQgaW50aXRpbGFpemVkIGR1cmluZyB0aGUgcG9ydCdzIHNl
dHVwX3Rlc3RfcnVuLgorICAgICAgICAjIDMgY2xpZW50IGNvbm5lY3Rpb25zIHdpbGwgYmUgYWNj
ZXB0ZWQgZm9yIHN0ZGluLCBzdGRvdXQgYW5kIHN0ZGVyciBpbiB0aGF0IG9yZGVyLgorICAgICAg
ICBzZWxmLl9kZXZpY2UubGlzdGVuaW5nX3NvY2tldC5saXN0ZW4oMykKICAgICAgICAgc2VsZi5f
cGlkID0gc2VsZi5fZGV2aWNlLmxhdW5jaF9hcHAoc2VsZi5fYnVuZGxlX2lkLCBzZWxmLl9jbWRb
MTpdLCBlbnY9c2VsZi5fZW52KQogCiAgICAgICAgIGRlZiBoYW5kbGVyKHNpZ251bSwgZnJhbWUp
OgogICAgICAgICAgICAgYXNzZXJ0IHNpZ251bSA9PSBzaWduYWwuU0lHQUxSTQotICAgICAgICAg
ICAgcmFpc2UgRXhjZXB0aW9uKCdUaW1lZCBvdXQgd2FpdGluZyBmb3IgcHJvY2VzcyB0byBvcGVu
IHt9Jy5mb3JtYXQoc2VsZi5faW5fcGF0aCkpCisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24o
J1RpbWVkIG91dCB3YWl0aW5nIGZvciBwcm9jZXNzIHRvIGNvbm5lY3QgYXQgcG9ydCB7fScuZm9y
bWF0KHNlbGYuX2RldmljZS5wb3J0KCkpKQogICAgICAgICBzaWduYWwuc2lnbmFsKHNpZ25hbC5T
SUdBTFJNLCBoYW5kbGVyKQogICAgICAgICBzaWduYWwuYWxhcm0oMykgICMgSW4gc2Vjb25kcwog
CiAgICAgICAgIHN0ZGluID0gTm9uZQorICAgICAgICBzdGRvdXQgPSBOb25lCisgICAgICAgIHN0
ZGVyciA9IE5vbmUKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgc3RkaW4gPSBvcGVuKHNlbGYu
X2luX3BhdGgsICd3JywgMCkgICMgT3BlbmluZyB3aXRoIG5vIGJ1ZmZlcmluZywgbGlrZSBwb3Bl
bgorICAgICAgICAgICAgIyBPcmRlciBtYXR0ZXJzIGhlcmUhCisgICAgICAgICAgICBzdGRpbiA9
IFNpbXVsYXRvclByb2Nlc3MuX2FjY2VwdF9jb25uZWN0aW9uX2NyZWF0ZV9maWxlKHNlbGYuX2Rl
dmljZS5saXN0ZW5pbmdfc29ja2V0LCAndycpCisgICAgICAgICAgICBzdGRvdXQgPSBTaW11bGF0
b3JQcm9jZXNzLl9hY2NlcHRfY29ubmVjdGlvbl9jcmVhdGVfZmlsZShzZWxmLl9kZXZpY2UubGlz
dGVuaW5nX3NvY2tldCwgJ3JiJykKKyAgICAgICAgICAgIHN0ZGVyciA9IFNpbXVsYXRvclByb2Nl
c3MuX2FjY2VwdF9jb25uZWN0aW9uX2NyZWF0ZV9maWxlKHNlbGYuX2RldmljZS5saXN0ZW5pbmdf
c29ja2V0LCAncmInKQogICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgICAjIFdlIHNldCBzZWxm
Ll9wcm9jIGFzIF9yZXNldCgpIGFuZCBfa2lsbCgpIGRlcGVuZCBvbiBpdC4KICAgICAgICAgICAg
IHNlbGYuX3Byb2MgPSBTaW11bGF0b3JQcm9jZXNzLlBvcGVuKHNlbGYuX3BpZCwgc3RkaW4sIHN0
ZG91dCwgc3RkZXJyLCBzZWxmLl9kZXZpY2UpCkluZGV4OiBUb29scy9UZXN0UnVubmVyU2hhcmVk
L2lPU0xheW91dFRlc3RDb21tdW5pY2F0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0
UnVubmVyU2hhcmVkL2lPU0xheW91dFRlc3RDb21tdW5pY2F0aW9uLmNwcAkobm9uZXhpc3RlbnQp
CisrKyBUb29scy9UZXN0UnVubmVyU2hhcmVkL2lPU0xheW91dFRlc3RDb21tdW5pY2F0aW9uLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDkwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgImlPU0xheW91dFRlc3RDb21tdW5pY2F0aW9uLmgiCisKKyNp
ZiBQTEFURk9STShJT1MpCisKKyNpbmNsdWRlIDxuZXRkYi5oPgorI2luY2x1ZGUgPG5ldGluZXQv
aW4uaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+Cisj
aW5jbHVkZSA8dW5pc3RkLmg+CisKK3N0YXRpYyBpbnQgc3RkaW5Tb2NrZXQ7CitzdGF0aWMgaW50
IHN0ZG91dFNvY2tldDsKK3N0YXRpYyBpbnQgc3RkZXJyU29ja2V0OworCitzdGF0aWMgaW50IGNv
bm5lY3RUb1NlcnZlcihzb2NrYWRkcl9pbiYgc2VydmVyQWRkcmVzcykKK3sKKyAgICBpbnQgcmVz
dWx0ID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfU1RSRUFNLCAwKTsKKyAgICBpZiAocmVzdWx0IDwg
MCkKKyAgICAgICAgYWJvcnQoKTsKKyAgICBpZiAoY29ubmVjdChyZXN1bHQsIChzdHJ1Y3Qgc29j
a2FkZHIgKikgJnNlcnZlckFkZHJlc3MsIHNpemVvZihzZXJ2ZXJBZGRyZXNzKSkgPCAwKQorICAg
ICAgICBhYm9ydCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgc2V0dXBpT1NMYXlv
dXRUZXN0Q29tbXVuaWNhdGlvbigpCit7CisgICAgaW50IHBvcnQgPSBhdG9pKGdldGVudigiUE9S
VCIpKTsKKyAgICBpZiAocG9ydCA8PSAwKQorICAgICAgICBhYm9ydCgpOworCisgICAgc3RydWN0
IGhvc3RlbnQqIGhvc3QgPSBnZXRob3N0YnluYW1lKCJsb2NhbGhvc3QiKTsKKyAgICBzdHJ1Y3Qg
c29ja2FkZHJfaW4gc2VydmVyQWRkcmVzczsKKyAgICBtZW1zZXQoKGNoYXIgKikgJnNlcnZlckFk
ZHJlc3MsIDAsIHNpemVvZihzZXJ2ZXJBZGRyZXNzKSk7CisgICAgc2VydmVyQWRkcmVzcy5zaW5f
ZmFtaWx5ID0gQUZfSU5FVDsKKyAgICBtZW1jcHkoCisgICAgICAgIChjaGFyICopJnNlcnZlckFk
ZHJlc3Muc2luX2FkZHIuc19hZGRyLAorICAgICAgICAoY2hhciAqKWhvc3QtPmhfYWRkciwKKyAg
ICAgICAgaG9zdC0+aF9sZW5ndGgpOworICAgIHNlcnZlckFkZHJlc3Muc2luX3BvcnQgPSBodG9u
cyhwb3J0KTsKKyAgICAKKyAgICAvLyBPcmRlciBtYXR0ZXJzIQorICAgIHN0ZGluU29ja2V0ID0g
Y29ubmVjdFRvU2VydmVyKHNlcnZlckFkZHJlc3MpOworICAgIGR1cDIoc3RkaW5Tb2NrZXQsIFNU
RElOX0ZJTEVOTyk7CisKKyAgICBzdGRvdXRTb2NrZXQgPSBjb25uZWN0VG9TZXJ2ZXIoc2VydmVy
QWRkcmVzcyk7CisgICAgZHVwMihzdGRvdXRTb2NrZXQsIFNURE9VVF9GSUxFTk8pOworCisgICAg
c3RkZXJyU29ja2V0ID0gY29ubmVjdFRvU2VydmVyKHNlcnZlckFkZHJlc3MpOworICAgIGR1cDIo
c3RkZXJyU29ja2V0LCBTVERFUlJfRklMRU5PKTsKK30KKwordm9pZCB0ZWFyZG93bmlPU0xheW91
dFRlc3RDb21tdW5pY2F0aW9uKCkKK3sKKyAgICBjbG9zZShzdGRpblNvY2tldCk7CisgICAgY2xv
c2Uoc3Rkb3V0U29ja2V0KTsKKyAgICBjbG9zZShzdGRlcnJTb2NrZXQpOworfQorCisjZWxzZQor
Cit2b2lkIHNldHVwaU9TTGF5b3V0VGVzdENvbW11bmljYXRpb24oKSB7IH0KK3ZvaWQgdGVhcmRv
d25pT1NMYXlvdXRUZXN0Q29tbXVuaWNhdGlvbigpIHsgfQorCisjZW5kaWYKSW5kZXg6IFRvb2xz
L1Rlc3RSdW5uZXJTaGFyZWQvaU9TTGF5b3V0VGVzdENvbW11bmljYXRpb24uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9UZXN0UnVubmVyU2hhcmVkL2lPU0xheW91dFRlc3RDb21tdW5pY2F0aW9uLmgJ
KG5vbmV4aXN0ZW50KQorKysgVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9pT1NMYXlvdXRUZXN0Q29t
bXVuaWNhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjkgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjcHJhZ21hIG9uY2UKKwordm9pZCBzZXR1cGlPU0xheW91dFRlc3RDb21tdW5pY2F0aW9uKCk7
Cit2b2lkIHRlYXJkb3duaU9TTGF5b3V0VGVzdENvbW11bmljYXRpb24oKTsKSW5kZXg6IFRvb2xz
L1dlYktpdFRlc3RSdW5uZXIvV2ViS2l0VGVzdFJ1bm5lci54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvV2ViS2l0VGVzdFJ1bm5l
ci54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMTQ0NzQpCisrKyBUb29scy9X
ZWJLaXRUZXN0UnVubmVyL1dlYktpdFRlc3RSdW5uZXIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkod29ya2luZyBjb3B5KQpAQCAtNzMsNiArNzMsNyBAQAogCQkyRTYzRURBMTE4OTFCMjkxMDAy
QTdBRkMgLyogQWNjZXNzaWJpbGl0eVVJRWxlbWVudElPUy5tbSBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFNjNFRDc4MTg5MUFDRTkwMDJBN0FGQyAvKiBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50SU9TLm1tICovOyB9OwogCQkyRTYzRURBNjE4OTFCREMwMDAy
QTdBRkMgLyogVGVzdFJ1bm5lci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBCQ0M5OTgxNzExRDNGNTFFMDAxN0JDQTIgLyogVGVzdFJ1bm5lci5jcHAg
Ki87IH07CiAJCTJFNzQ5QkYyMTg5MUVCRkEwMDdGQzE3NSAvKiBFdmVudFNlbmRlclByb3h5SU9T
Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkU2M0VE
N0ExODkxQUNFOTAwMkE3QUZDIC8qIEV2ZW50U2VuZGVyUHJveHlJT1MubW0gKi87IH07CisJCTMx
REE4QTNEMUU3MjA1Q0MwMEUxREYyRiAvKiBpT1NMYXlvdXRUZXN0Q29tbXVuaWNhdGlvbi5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTQ4QTA1MzFF
NkY4NUI2MDBEM0IzMTYgLyogaU9TTGF5b3V0VGVzdENvbW11bmljYXRpb24uY3BwICovOyB9Owog
CQk1MTA1OEFENTFENjc4ODIwMDA5QTUzOEMgLyogbGliV2ViQ29yZVRlc3RTdXBwb3J0LmR5bGli
IGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDEyMzBF
MTYxMzhDNzhCRjAwQkNDRkNBIC8qIGxpYldlYkNvcmVUZXN0U3VwcG9ydC5keWxpYiAqLzsgfTsK
IAkJNTEwNThBRDYxRDY3ODgyNTAwOUE1MzhDIC8qIFdlYktpdC5mcmFtZXdvcmsgaW4gRnJhbWV3
b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjUxNjlDQTE0NDUyMjJE
MDBFMEE5RDcgLyogV2ViS2l0LmZyYW1ld29yayAqLzsgfTsKIAkJNTY0MUUyRDAxNDMzNUU5NTAw
ODMwN0U1IC8qIEpTVGV4dElucHV0Q29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NjQxRTJDRTE0MzM1RTk1MDA4MzA3RTUgLyogSlNU
ZXh0SW5wdXRDb250cm9sbGVyLmNwcCAqLzsgfTsKQEAgLTI1Miw2ICsyNTMsOCBAQAogCQkyRUU1
MkQxNDE4OTBBOUZCMDAxMEVEMjEgLyogVGVzdENvbnRyb2xsZXJJT1MubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBUZXN0Q29udHJvbGxlcklPUy5tbTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkVFNTJEMTYxODkwQTlGQjAwMTBFRDIxIC8qIG1haW5J
T1MubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBtYWluSU9TLm1t
OyBwYXRoID0gLi4vaW9zL21haW5JT1MubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTMxMTBCRTBGMTVCQTAxMTQwMEQyMTZBQyAvKiBXZWJOb3RpZmljYXRpb25Qcm92aWRlci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBXZWJOb3RpZmljYXRpb25Qcm92aWRlci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkzMTQ4QTA1MzFFNkY4NUI2MDBEM0IzMTYgLyogaU9TTGF5b3V0VGVzdENv
bW11bmljYXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gaU9T
TGF5b3V0VGVzdENvbW11bmljYXRpb24uY3BwOyBwYXRoID0gLi4vVGVzdFJ1bm5lclNoYXJlZC9p
T1NMYXlvdXRUZXN0Q29tbXVuaWNhdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTMxNDhBMDU0MUU2Rjg1QjYwMEQzQjMxNiAvKiBpT1NMYXlvdXRUZXN0Q29tbXVuaWNhdGlv
bi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBpT1NMYXlvdXRUZXN0Q29tbXVu
aWNhdGlvbi5oOyBwYXRoID0gLi4vVGVzdFJ1bm5lclNoYXJlZC9pT1NMYXlvdXRUZXN0Q29tbXVu
aWNhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMTY0QzhFRjE1RDFBREEx
MDBFRjFGRTAgLyogV2ViTm90aWZpY2F0aW9uUHJvdmlkZXIuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gV2ViTm90aWZpY2F0aW9uUHJvdmlkZXIuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkzNzhENDQyMjEzMzQ2RDAwMDA2QTc3N0IgLyogY29uZmln
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IGNvbmZpZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk0MTIzMEUxNjEzOEM3OEJGMDBCQ0NGQ0EgLyogbGliV2ViQ29yZVRlc3RTdXBwb3J0LmR5bGli
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gImNvbXBp
bGVkLm1hY2gtby5keWxpYiI7IHBhdGggPSBsaWJXZWJDb3JlVGVzdFN1cHBvcnQuZHlsaWI7IHNv
dXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CkBAIC00NTAsNiArNDUzLDggQEAKIAkJ
MEYxOEU3MUExRDZCQzRCQzAwMjdFNTQ3IC8qIFRlc3RSdW5uZXJTaGFyZWQgKi8gPSB7CiAJCQlp
c2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTMxNDhBMDUzMUU2Rjg1QjYwMEQz
QjMxNiAvKiBpT1NMYXlvdXRUZXN0Q29tbXVuaWNhdGlvbi5jcHAgKi8sCisJCQkJMzE0OEEwNTQx
RTZGODVCNjAwRDNCMzE2IC8qIGlPU0xheW91dFRlc3RDb21tdW5pY2F0aW9uLmggKi8sCiAJCQkJ
MEYxOEU3MUIxRDZCQzRFNjAwMjdFNTQ3IC8qIEJpbmRpbmdzICovLAogCQkJCTBGNzNCNTQ3MUJB
NzgyRkUwMDRCM0VGNCAvKiBVSVNjcmlwdENvbnRleHQgKi8sCiAJCQkpOwpAQCAtOTcwLDYgKzk3
NSw3IEBACiAJCQkJQTE4NTEwNDAxQjlBRTEzMTAwNzQ0QUVCIC8qIFBpeGVsRHVtcFN1cHBvcnQu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTE4NTEwNDExQjlBRTEzODAwNzQ0QUVCIC8qIFRlc3RD
b250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUExODUxMDNCMUI5QUUwRTIwMDc0NEFF
QiAvKiBUZXN0Q29udHJvbGxlckNvY29hLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJMzFEQThBM0Qx
RTcyMDVDQzAwRTFERjJGIC8qIGlPU0xheW91dFRlc3RDb21tdW5pY2F0aW9uLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUExODUxMDQyMUI5QUUxM0UwMDc0NEFFQiAvKiBUZXN0SW52b2NhdGlvbi5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlBMTg1MTAzRDFCOUFFMTA2MDA3NDRBRUIgLyogVGVzdElu
dm9jYXRpb25DRy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjYyMkNFOTFCQkIzQTFBMDA4MzhB
RDMgLyogVGVzdE9wdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBUb29scy9XZWJLaXRU
ZXN0UnVubmVyL2lvcy9UZXN0Q29udHJvbGxlcklPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9X
ZWJLaXRUZXN0UnVubmVyL2lvcy9UZXN0Q29udHJvbGxlcklPUy5tbQkocmV2aXNpb24gMjE0NDc0
KQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9pb3MvVGVzdENvbnRyb2xsZXJJT1MubW0JKHdv
cmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbXBvcnQgIlRlc3RJbnZvY2F0aW9uLmgi
CiAjaW1wb3J0ICJUZXN0UnVubmVyV0tXZWJWaWV3LmgiCiAjaW1wb3J0ICJVSUtpdFNQSS5oIgor
I2ltcG9ydCAiaU9TTGF5b3V0VGVzdENvbW11bmljYXRpb24uaCIKICNpbXBvcnQgPEZvdW5kYXRp
b24vRm91bmRhdGlvbi5oPgogI2ltcG9ydCA8VUlLaXQvVUlLaXQuaD4KICNpbXBvcnQgPFdlYktp
dC9XS1ByZWZlcmVuY2VzUmVmUHJpdmF0ZS5oPgpAQCAtNDksMjEgKzUwLDEyIEBAIHZvaWQgVGVz
dENvbnRyb2xsZXI6Om5vdGlmeURvbmUoKQogCiB2b2lkIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9y
bUluaXRpYWxpemUoKQogewotICAgIGNvbnN0IGNoYXIqIGlkZW50aWZpZXIgPSBnZXRlbnYoIklQ
Q19JREVOVElGSUVSIik7Ci0gICAgY29uc3QgY2hhciAqc3RkaW5QYXRoID0gW1tOU1N0cmluZyBz
dHJpbmdXaXRoRm9ybWF0OkAiL3RtcC8lc19JTiIsIGlkZW50aWZpZXJdIFVURjhTdHJpbmddOwot
ICAgIGNvbnN0IGNoYXIgKnN0ZG91dFBhdGggPSBbW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6
QCIvdG1wLyVzX09VVCIsIGlkZW50aWZpZXJdIFVURjhTdHJpbmddOwotICAgIGNvbnN0IGNoYXIg
KnN0ZGVyclBhdGggPSBbW05TU3RyaW5nIHN0cmluZ1dpdGhGb3JtYXQ6QCIvdG1wLyVzX0VSUk9S
IiwgaWRlbnRpZmllcl0gVVRGOFN0cmluZ107Ci0KLSAgICBpbnQgaW5mZCA9IG9wZW4oc3RkaW5Q
YXRoLCBPX1JEV1IpOwotICAgIGR1cDIoaW5mZCwgU1RESU5fRklMRU5PKTsKLSAgICBpbnQgb3V0
ZmQgPSBvcGVuKHN0ZG91dFBhdGgsIE9fUkRXUik7Ci0gICAgZHVwMihvdXRmZCwgU1RET1VUX0ZJ
TEVOTyk7Ci0gICAgaW50IGVycmZkID0gb3BlbihzdGRlcnJQYXRoLCBPX1JEV1IgfCBPX05PTkJM
T0NLKTsKLSAgICBkdXAyKGVycmZkLCBTVERFUlJfRklMRU5PKTsKKyAgICBzZXR1cGlPU0xheW91
dFRlc3RDb21tdW5pY2F0aW9uKCk7CiB9CiAKIHZvaWQgVGVzdENvbnRyb2xsZXI6OnBsYXRmb3Jt
RGVzdHJveSgpCiB7CisgICAgdGVhcmRvd25pT1NMYXlvdXRUZXN0Q29tbXVuaWNhdGlvbigpOwog
fQogCiB2b2lkIFRlc3RDb250cm9sbGVyOjppbml0aWFsaXplSW5qZWN0ZWRCdW5kbGVQYXRoKCkK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>305757</attachid>
            <date>2017-03-29 10:45:58 -0700</date>
            <delta_ts>2017-03-29 12:23:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-169419-20170329104557.patch</filename>
            <type>text/plain</type>
            <size>28873</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIxNDU0NSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDU1IEBACisyMDE3LTAzLTI5ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICBVc2UgVENQIGluc3RlYWQgb2YgRklGT3MgZm9yIFNpbXVsYXRvci9EZXZp
Y2UgY29tbXVuaWNhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTY5NDE5CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zMDk0OTYxNT4KKworICAg
ICAgICBSZXZpZXdlZCBieSBBbGV4ZXkgUHJvc2t1cnlha292LgorCisgICAgICAgIFVzaW5nIFRD
UCBpbnN0ZWFkIG9mIEZJRk9zIHdoZW4gY29tbXVuaWNhdGluZyB3aXRoIGRldmljZXMgYWxsb3dz
IHRoZSBkZXZpY2UgYmVpbmcgdGVzdGVkCisgICAgICAgIHRvIGJlIG9uIGEgZGlmZmVyZW50IG1h
Y2hpbmUgdGhlbiB0aGUgb25lIGhhbmRsaW5nIHRoZSBtYW5hZ2VtZW50IG9mIHRoZSB0ZXN0IHJ1
bi4KKworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2o6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFjL0R1bXBSZW5kZXJU
cmVlLm1tOgorICAgICAgICAoZHVtcFJlbmRlclRyZWUpOiBDYWxsIHNldFVwL3RlYXJEb3duSU9T
TGF5b3V0VGVzdENvbW11bmljYXRpb24oKSBpbnN0ZWFkIG9mIHVzaW5nIEZJRk9zLgorICAgICAg
ICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9kZXZpY2UucHk6CisgICAgICAgIChEZXZpY2UuX19p
bml0X18pOiBJbml0aWFsaXplIHRoZSBsaXN0ZW5pbmdfc29ja2V0LgorICAgICAgICAoRGV2aWNl
Lmxpc3RlbmluZ19wb3J0KTogUmV0dXJuIHBvcnQgb2YgbGlzdGVuaW5nIHNvY2tldC4KKyAgICAg
ICAgKERldmljZS5wcmVwYXJlX2Zvcl90ZXN0aW5nKTogT3BlbiBsaXN0ZW5pbmcgc29ja2V0IG9u
IGFuIG9wZW4gcG9ydCwgcHJlcGFyZSBwbGF0Zm9ybSBkZXZpY2UKKyAgICAgICAgZnJvIHRlc3Rp
bmcuCisgICAgICAgIChEZXZpY2UuZmluaXNoZWRfdGVzdGluZyk6IENsb3NlIGxpc3RlbmluZyBz
b2NrZXQgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZGV2aWNlLCBjYWxsIHRoZQorICAgICAgICBwbGF0
Zm9ybSBkZXZpY2UncyBmaW5pc2hlZF90ZXN0aW5nIGZ1bmN0aW9uIGlmIGl0IGV4aXN0cy4KKyAg
ICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zLnB5OgorICAgICAgICAoSU9TUG9ydC5z
ZXR1cF90ZXN0X3J1bik6IFByZXBhcmUgZWFjaCBkZXZpY2UgZm9yIHRlc3RpbmcuCisgICAgICAg
IChJT1NQb3J0LmNsZWFuX3VwX3Rlc3RfcnVuKTogTm90aWZ5IGVhY2ggZGV2aWNlIHRoYXQgdGVz
dGluZyBoYXMgY29tcGxldGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvcG9ydC9pb3Nf
c2ltdWxhdG9yLnB5OgorICAgICAgICAoSU9TU2ltdWxhdG9yUG9ydCk6IFdvcmsgYXJvdW5kIGRl
dmljZSBwZXJzaXN0ZW5jZSBidWcuCisgICAgICAgIChJT1NTaW11bGF0b3JQb3J0Ll9faW5pdF9f
KTogRGl0dG8uCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9wb3J0L3NpbXVsYXRvcl9wcm9j
ZXNzLnB5OgorICAgICAgICAoU2ltdWxhdG9yUHJvY2Vzcyk6CisgICAgICAgIChTaW11bGF0b3JQ
cm9jZXNzLk5vbkJsb2NraW5nRmlsZUZyb21Tb2NrZXQpOiBBZGQgdG8gd29yayBhcm91bmQgc2hv
cnRjb21pbmdzIGluCisgICAgICAgIFB5dGhvbiAy4oCZcyBtYWtlZmlsZS4KKyAgICAgICAgKFNp
bXVsYXRvclByb2Nlc3MuTm9uQmxvY2tpbmdGaWxlRnJvbVNvY2tldC5fX2luaXRfXyk6IEluaXRp
YWxpemUgZmlsZSB3aXRoIHNvY2tldC4KKyAgICAgICAgKFNpbXVsYXRvclByb2Nlc3MuUmVhZEZp
bGVTb2NrZXQuY2xvc2UpOiBDbG9zZSBmaWxlIGFuZCB0aGVuIHNvY2tldDsKKyAgICAgICAgKFNp
bXVsYXRvclByb2Nlc3MuX19pbml0X18pOiBQYXNzIFRDUCBwb3J0IG92ZXIgZW52aXJvbm1lbnQs
IHJlbW92ZSBGSUZPIG5hbWVzLgorICAgICAgICAoU2ltdWxhdG9yUHJvY2Vzcy5fX2dldGF0dHJf
Xyk6IEV4cG9zZSBhbGwgZmlsZSBhdHRyaWJ1dGVzLgorICAgICAgICAoU2ltdWxhdG9yUHJvY2Vz
cy5fYWNjZXB0X2Nvbm5lY3Rpb25fY3JlYXRlX2ZpbGUpOiBXYWl0IGZvciBjb25uZWN0aW9uIGZy
b20gc2VydmVyIGFuZAorICAgICAgICBjcmVhdGUgYW5kIHJldHVybiBhIGZpbGUtbGlrZSBvYmpl
Y3QgZnJvbSB0aGUgaW5jb21pbmcgY29ubmVjdGlvbi4KKyAgICAgICAgKFNpbXVsYXRvclByb2Nl
c3MuX3N0YXJ0KTogVXNlIFRDUCBjb25uZWN0aW9ucyBpbnN0ZWFkIG9mIEZJRk9zLgorICAgICAg
ICAoU2ltdWxhdG9yUHJvY2Vzcy5fc3RhcnQuaGFuZGxlcik6IE91dHB1dCBzZXJ2ZXIgcG9ydCBp
biB0aW1lb3V0IGV4Y2VwdGlvbi4KKyAgICAgICAgKFNpbXVsYXRvclByb2Nlc3MuX3Jlc2V0KTog
RGVsZXRlZC4KKyAgICAgICAgKiBUZXN0UnVubmVyU2hhcmVkL0lPU0xheW91dFRlc3RDb21tdW5p
Y2F0aW9uLmNwcDogQWRkZWQuCisgICAgICAgIChjb25uZWN0VG9TZXJ2ZXIpOiBSZXR1cm4gc29j
a2V0IGNvbm5lY3RlZCB0byB0aGUgcHJvdmlkZWQgc2VydmVyIGFkZHJlc3MuCisgICAgICAgIChz
ZXR1cGlPU0xheW91dFRlc3RDb21tdW5pY2F0aW9uKTogQ29ubmVjdCBzdGRpbiwgc3Rkb3V0IGFu
ZCBzdGRlcnIgYXMgc29ja2V0IHRvIGEKKyAgICAgICAgVENQIHNlcnZlciBydW5uaW5nIG9uIGxv
Y2FsaG9zdC4KKyAgICAgICAgKHRlYXJEb3duSU9TTGF5b3V0VGVzdENvbW11bmljYXRpb24pOiBD
bG9zZSBzdGRpbiwgc3Rkb3V0IGFuZCBzdGRlcnIgVENQIHNvY2tldHMuCisgICAgICAgICogVGVz
dFJ1bm5lclNoYXJlZC9JT1NMYXlvdXRUZXN0Q29tbXVuaWNhdGlvbi5oOiBBZGRlZC4KKyAgICAg
ICAgKiBXZWJLaXRUZXN0UnVubmVyL1dlYktpdFRlc3RSdW5uZXIueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvajoKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL2lvcy9UZXN0Q29udHJvbGxlcklP
Uy5tbToKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnBsYXRmb3JtSW5pdGlhbGl6ZSk6
IENhbGwgc2V0VXBJT1NMYXlvdXRUZXN0Q29tbXVuaWNhdGlvbigpCisgICAgICAgIGluc3RlYWQg
b2YgdXNpbmcgRklGT3MuCisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybURl
c3Ryb3kpOiBDYWxsIHRlYXJEb3duSU9TTGF5b3V0VGVzdENvbW11bmljYXRpb24oKS4KKwogMjAx
Ny0wMy0yOSAgSm9uYXRoYW4gQmVkYXJkICA8amJlZGFyZEBhcHBsZS5jb20+CiAKICAgICAgICAg
d2Via2l0cHk6IEFkZCBJT1NEZXZpY2VQb3J0IGFuZCBJT1NQb3J0IHRlc3RzCkluZGV4OiBUb29s
cy9EdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIxNDUzNSkKKysrIFRvb2xzL0R1bXBSZW5k
ZXJUcmVlL0R1bXBSZW5kZXJUcmVlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcg
Y29weSkKQEAgLTgwLDYgKzgwLDcgQEAKIAkJMkQ0MDNGMUIxNTA4NzIwOTAwNTM1OEQyIC8qIExh
eW91dFRlc3RIZWxwZXIubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDJENDAzRUEyMTUwODcxNDIwMDUzNThEMiAvKiBMYXlvdXRUZXN0SGVscGVyLm0gKi87
IH07CiAJCTJEQTJFM0E1MUUxQkE1NDEwMEEzQkJEMCAvKiBEdW1wUmVuZGVyVHJlZVNwZWxsQ2hl
Y2tlci5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJE
QTJFM0E0MUUxQkE1NDEwMEEzQkJEMCAvKiBEdW1wUmVuZGVyVHJlZVNwZWxsQ2hlY2tlci5tbSAq
LzsgfTsKIAkJMzExMTdCM0QxNUQ5QTU2QTAwMTYzQkM4IC8qIE1vY2tXZWJOb3RpZmljYXRpb25Q
cm92aWRlci5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDMxMTE3QjNCMTVEOUE1NkEwMDE2M0JDOCAvKiBNb2NrV2ViTm90aWZpY2F0aW9uUHJvdmlkZXIu
bW0gKi87IH07CisJCTMxMjk0M0Y5MUU3MUYyQjQwMDFFRTJDQyAvKiBJT09TTGF5b3V0VGVzdENv
bW11bmljYXRpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMzE0OEEwNTUxRTZGOTBGNDAwRDNCMzE2IC8qIElPU0xheW91dFRlc3RDb21tdW5pY2F0
aW9uLmNwcCAqLzsgfTsKIAkJNDQ2NENBQkUxQzIwQTA4QjAwRTVCQjU1IC8qIER1bXBSZW5kZXJU
cmVlQXBwTWFpbi5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDQ0NjRDQUJEMUMyMEEwNzAwMEU1QkI1NSAvKiBEdW1wUmVuZGVyVHJlZUFwcE1haW4ubW0g
Ki87IH07CiAJCTRBRDZBMTE0MTNDODEyNDAwMEVBOTczNyAvKiBGb3JtVmFsdWUuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEFENkExMTMxM0M4MTI0
MDAwRUE5NzM3IC8qIEZvcm1WYWx1ZS5jcHAgKi87IH07CiAJCTUxMDY4MDNFMTVDQzdCMTAwMDFB
OEEyMyAvKiBTbG93TlBQTmV3LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUxMDY4MDNEMTVDQzdCMTAwMDFBOEEyMyAvKiBTbG93TlBQTmV3LmNwcCAq
LzsgfTsKQEAgLTI5NCw2ICsyOTUsOCBAQAogCQkyREEyRTNBNDFFMUJBNTQxMDBBM0JCRDAgLyog
RHVtcFJlbmRlclRyZWVTcGVsbENoZWNrZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5v
YmpjcHA7IG5hbWUgPSBEdW1wUmVuZGVyVHJlZVNwZWxsQ2hlY2tlci5tbTsgcGF0aCA9IG1hYy9E
dW1wUmVuZGVyVHJlZVNwZWxsQ2hlY2tlci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMzExMTdCM0ExNUQ5QTU2QTAwMTYzQkM4IC8qIE1vY2tXZWJOb3RpZmljYXRpb25Qcm92aWRl
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBNb2NrV2ViTm90aWZpY2F0aW9u
UHJvdmlkZXIuaDsgcGF0aCA9IG1hYy9Nb2NrV2ViTm90aWZpY2F0aW9uUHJvdmlkZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzExMTdCM0IxNUQ5QTU2QTAwMTYzQkM4IC8qIE1v
Y2tXZWJOb3RpZmljYXRpb25Qcm92aWRlci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9i
amNwcDsgbmFtZSA9IE1vY2tXZWJOb3RpZmljYXRpb25Qcm92aWRlci5tbTsgcGF0aCA9IG1hYy9N
b2NrV2ViTm90aWZpY2F0aW9uUHJvdmlkZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTMxNDhBMDU1MUU2RjkwRjQwMEQzQjMxNiAvKiBJT1NMYXlvdXRUZXN0Q29tbXVuaWNhdGlv
bi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBJT1NMYXlvdXRUZXN0
Q29tbXVuaWNhdGlvbi5jcHA7IHBhdGggPSAuLi9UZXN0UnVubmVyU2hhcmVkL0lPU0xheW91dFRl
c3RDb21tdW5pY2F0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzE0OEEw
NTYxRTZGOTBGNDAwRDNCMzE2IC8qIElPU0xheW91dFRlc3RDb21tdW5pY2F0aW9uLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IElPU0xheW91dFRlc3RDb21tdW5pY2F0aW9uLmg7
IHBhdGggPSAuLi9UZXN0UnVubmVyU2hhcmVkL0lPU0xheW91dFRlc3RDb21tdW5pY2F0aW9uLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMyQTcwQUFCMDM3MDVFMUYwMEM5MTc4MyAv
KiBEdW1wUmVuZGVyVHJlZVByZWZpeC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBEdW1wUmVuZGVyVHJlZVByZWZpeC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkz
NzVGMDk3MTBEQUMzQ0I2MDBDOEI0RTUgLyogV2ViS2l0V2VpZ2h0V2F0Y2hlcjEwMC50dGYgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBmaWxlOyBuYW1l
ID0gV2ViS2l0V2VpZ2h0V2F0Y2hlcjEwMC50dGY7IHBhdGggPSBmb250cy9XZWJLaXRXZWlnaHRX
YXRjaGVyMTAwLnR0Zjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzc1RjA5NzIwREFD
M0NCNjAwQzhCNEU1IC8qIFdlYktpdFdlaWdodFdhdGNoZXIyMDAudHRmICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gZmlsZTsgbmFtZSA9IFdlYktpdFdl
aWdodFdhdGNoZXIyMDAudHRmOyBwYXRoID0gZm9udHMvV2ViS2l0V2VpZ2h0V2F0Y2hlcjIwMC50
dGY7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00NzIsNiArNDc1LDcgQEAKIAkJCWlz
YSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCiAJCQkJMEYxOEU2RjExRDZCOUM2NDAwMjdF
NTQ3IC8qIERlcml2ZWRTb3VyY2VzLm1ha2UgKi8sCisJCQkJMzE0OEEwNjUxRTZGOTBGNDAwRDNC
MzE2IC8qIFRlc3RSdW5uZXJTaGFyZWQgKi8sCiAJCQkJMEYxOEU2RTcxRDZCOUJGNTAwMjdFNTQ3
IC8qIFVJU2NyaXB0Q29udGV4dCAqLywKIAkJCQlBMTE1OEQ2QTE4OTI3Q0UxMDA4OEMxN0IgLyog
aW9zICovLAogCQkJCUExMzRFNTM0MTg5MDVFNkMwMDkwMUQwNiAvKiBjb25maWcuaCAqLywKQEAg
LTY5NSw2ICs2OTksMTYgQEAKIAkJCW5hbWUgPSBMYXlvdXRUZXN0SGVscGVyOwogCQkJc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKKwkJMzE0OEEwNjUxRTZGOTBGNDAwRDNCMzE2IC8qIFRl
c3RSdW5uZXJTaGFyZWQgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0g
KAorCQkJCTMxNDhBMDU1MUU2RjkwRjQwMEQzQjMxNiAvKiBJT1NMYXlvdXRUZXN0Q29tbXVuaWNh
dGlvbi5jcHAgKi8sCisJCQkJMzE0OEEwNTYxRTZGOTBGNDAwRDNCMzE2IC8qIElPU0xheW91dFRl
c3RDb21tdW5pY2F0aW9uLmggKi8sCisJCQkpOworCQkJbmFtZSA9IFRlc3RSdW5uZXJTaGFyZWQ7
CisJCQlwYXRoID0gLi4vV2ViS2l0VGVzdFJ1bm5lcjsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7CisJCX07CiAJCTQxN0RBOTE4MTM3MzY3NEQwMDdDNTdGQiAvKiBXZWJDb3JlVGVzdFN1cHBv
cnQgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKApAQCAtMTE0NSw2
ICsxMTU5LDcgQEAKIAkJCQk3Q0JCQzMyMzFEREZDRjlBMDA3ODZCOUQgLyogVGVzdE9wdGlvbnMu
bW0gaW4gU291cmNlcyAqLywKIAkJCQkwRjE4RTcwRjFENkJBQ0I2MDAyN0U1NDcgLyogVUlTY3Jp
cHRDb250cm9sbGVyTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM5RDkwMjQwQzk3NDcyRTAw
OTlBNEEzIC8qIFdvcmtRdWV1ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkzMTI5NDNGOTFFNzFG
MkI0MDAxRUUyQ0MgLyogSU9TTGF5b3V0VGVzdENvbW11bmljYXRpb24uY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQkNBMThCMjYwQzlCMDE1QzAwMTE0MzY5IC8qIFdvcmtRdWV1ZUl0ZW1NYWMubW0g
aW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNz
aW5nID0gMDsKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZS5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRyZWUu
bW0JKHJldmlzaW9uIDIxNDUzNSkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVu
ZGVyVHJlZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMTAzLDYgKzEwMyw3IEBACiAKICNpZiBQTEFU
Rk9STShJT1MpCiAjaW1wb3J0ICJEdW1wUmVuZGVyVHJlZUJyb3dzZXJWaWV3LmgiCisjaW1wb3J0
ICJJT1NMYXlvdXRUZXN0Q29tbXVuaWNhdGlvbi5oIgogI2ltcG9ydCAiVUlLaXRTUEkuaCIKICNp
bXBvcnQgPFF1YXJ0ekNvcmUvUXVhcnR6Q29yZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9Db3JlR3Jh
cGhpY3NTUEkuaD4KQEAgLTEyMzYsMTcgKzEyMzcsNyBAQCB2b2lkIHdyaXRlQ3Jhc2hlZE1lc3Nh
Z2VPbkZhdGFsRXJyb3IoaW50CiB2b2lkIGR1bXBSZW5kZXJUcmVlKGludCBhcmdjLCBjb25zdCBj
aGFyICphcmd2W10pCiB7CiAjaWYgUExBVEZPUk0oSU9TKQotICAgIGNvbnN0IGNoYXIqIGlkZW50
aWZpZXIgPSBnZXRlbnYoIklQQ19JREVOVElGSUVSIik7Ci0gICAgY29uc3QgY2hhciAqc3RkaW5Q
YXRoID0gW1tOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiL3RtcC8lc19JTiIsIGlkZW50aWZp
ZXJdIFVURjhTdHJpbmddOwotICAgIGNvbnN0IGNoYXIgKnN0ZG91dFBhdGggPSBbW05TU3RyaW5n
IHN0cmluZ1dpdGhGb3JtYXQ6QCIvdG1wLyVzX09VVCIsIGlkZW50aWZpZXJdIFVURjhTdHJpbmdd
OwotICAgIGNvbnN0IGNoYXIgKnN0ZGVyclBhdGggPSBbW05TU3RyaW5nIHN0cmluZ1dpdGhGb3Jt
YXQ6QCIvdG1wLyVzX0VSUk9SIiwgaWRlbnRpZmllcl0gVVRGOFN0cmluZ107Ci0KLSAgICBpbnQg
aW5mZCA9IG9wZW4oc3RkaW5QYXRoLCBPX1JEV1IpOwotICAgIGR1cDIoaW5mZCwgU1RESU5fRklM
RU5PKTsKLSAgICBpbnQgb3V0ZmQgPSBvcGVuKHN0ZG91dFBhdGgsIE9fUkRXUik7Ci0gICAgZHVw
MihvdXRmZCwgU1RET1VUX0ZJTEVOTyk7Ci0gICAgaW50IGVycmZkID0gb3BlbihzdGRlcnJQYXRo
LCBPX1JEV1IgfCBPX05PTkJMT0NLKTsKLSAgICBkdXAyKGVycmZkLCBTVERFUlJfRklMRU5PKTsK
KyAgICBzZXRVcElPU0xheW91dFRlc3RDb21tdW5pY2F0aW9uKCk7CiAjZW5kaWYKIAogICAgIHNp
Z25hbChTSUdJTEwsICZ3cml0ZUNyYXNoZWRNZXNzYWdlT25GYXRhbEVycm9yKTsKQEAgLTEzMDcs
OSArMTI5OCw3IEBAIHZvaWQgZHVtcFJlbmRlclRyZWUoaW50IGFyZ2MsIGNvbnN0IGNoYXIKICAg
ICB9CiAKICNpZiBQTEFURk9STShJT1MpCi0gICAgY2xvc2UoaW5mZCk7Ci0gICAgY2xvc2Uob3V0
ZmQpOwotICAgIGNsb3NlKGVycmZkKTsKKyAgICB0ZWFyRG93bklPU0xheW91dFRlc3RDb21tdW5p
Y2F0aW9uKCk7CiAjZW5kaWYKIH0KIApJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0
L2RldmljZS5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvZGV2
aWNlLnB5CShyZXZpc2lvbiAyMTQ1MzUpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQv
ZGV2aWNlLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yMCwxMCArMjAsMTcgQEAKICMgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMKICMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCiAKK2ltcG9ydCBzb2NrZXQKIAogY2xhc3MgRGV2aWNlKG9iamVj
dCk6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBsYXRmb3JtX2RldmljZSk6CiAgICAgICAgIHNl
bGYucGxhdGZvcm1fZGV2aWNlID0gcGxhdGZvcm1fZGV2aWNlCisgICAgICAgIHNlbGYubGlzdGVu
aW5nX3NvY2tldCA9IE5vbmUKKworICAgIGRlZiBsaXN0ZW5pbmdfcG9ydChzZWxmKToKKyAgICAg
ICAgaWYgbm90IHNlbGYubGlzdGVuaW5nX3NvY2tldDoKKyAgICAgICAgICAgIHJldHVybiBOb25l
CisgICAgICAgIHJldHVybiBzZWxmLmxpc3RlbmluZ19zb2NrZXQuZ2V0c29ja25hbWUoKVsxXQog
CiAgICAgZGVmIGluc3RhbGxfYXBwKHNlbGYsIGFwcF9wYXRoLCBlbnY9Tm9uZSk6CiAgICAgICAg
IHJldHVybiBzZWxmLnBsYXRmb3JtX2RldmljZS5pbnN0YWxsX2FwcChhcHBfcGF0aCwgZW52KQpA
QCAtMzEsNiArMzgsMjEgQEAgY2xhc3MgRGV2aWNlKG9iamVjdCk6CiAgICAgZGVmIGxhdW5jaF9h
cHAoc2VsZiwgYnVuZGxlX2lkLCBhcmdzLCBlbnY9Tm9uZSk6CiAgICAgICAgIHJldHVybiBzZWxm
LnBsYXRmb3JtX2RldmljZS5sYXVuY2hfYXBwKGJ1bmRsZV9pZCwgYXJncywgZW52KQogCisgICAg
ZGVmIHByZXBhcmVfZm9yX3Rlc3Rpbmcoc2VsZik6CisgICAgICAgIGlmIG5vdCBzZWxmLmxpc3Rl
bmluZ19zb2NrZXQ6CisgICAgICAgICAgICBzZWxmLmxpc3RlbmluZ19zb2NrZXQgPSBzb2NrZXQu
c29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCisgICAgICAgICAgICBz
ZWxmLmxpc3RlbmluZ19zb2NrZXQuc2V0c29ja29wdChzb2NrZXQuU09MX1NPQ0tFVCwgc29ja2V0
LlNPX1JFVVNFQUREUiwgMSkKKyAgICAgICAgICAgIHNlbGYubGlzdGVuaW5nX3NvY2tldC5iaW5k
KCgnMTI3LjAuMC4xJywgMCkpCisKKyAgICAgICAgaWYgaGFzYXR0cihzZWxmLnBsYXRmb3JtX2Rl
dmljZSwgJ3ByZXBhcmVfZm9yX3Rlc3RpbmcnKToKKyAgICAgICAgICAgIHNlbGYucGxhdGZvcm1f
ZGV2aWNlLnByZXBhcmVfZm9yX3Rlc3RpbmcoKQorCisgICAgZGVmIGZpbmlzaGVkX3Rlc3Rpbmco
c2VsZik6CisgICAgICAgIGlmIGhhc2F0dHIoc2VsZi5wbGF0Zm9ybV9kZXZpY2UsICd0ZWFyZG93
bicpOgorICAgICAgICAgICAgc2VsZi5wbGF0Zm9ybV9kZXZpY2UuZmluaXNoZWRfdGVzdGluZygp
CisKKyAgICAgICAgc2VsZi5saXN0ZW5pbmdfc29ja2V0ID0gTm9uZQorCiAgICAgQHByb3BlcnR5
CiAgICAgZGVmIGV4ZWN1dGl2ZShzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYucGxhdGZvcm1f
ZGV2aWNlLmV4ZWN1dGl2ZQpJbmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2lvcy5w
eQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zLnB5CShyZXZp
c2lvbiAyMTQ1MzUpCisrKyBUb29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zLnB5CSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMTcsMyArMTE3LDEyIEBAIGNsYXNzIElPU1BvcnQoRGFyd2luUG9ydCk6
CiAgICAgICAgICAgICAjIGNyYXNoLCBidXQgdGhpcyBjcmFzaCB3aWxsIG9jY3VyIHBvc3QtbGF1
bmNoLCBhZnRlciBpbnN0YWxsX2FwcCBoYXMgYWxyZWFkeSBraWxsZWQgdGhlIHByb2Nlc3MuCiAg
ICAgICAgICAgICBpZiBub3QgZGV2aWNlLmluc3RhbGxfYXBwKHNlbGYuX3BhdGhfdG9fZHJpdmVy
KCksIHsnRFlMRF9MSUJSQVJZX1BBVEgnOiBzZWxmLl9idWlsZF9wYXRoKCl9KToKICAgICAgICAg
ICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ0ZhaWxlZCB0byBpbnN0YWxsIGFwcCB7fSBvbiBk
ZXZpY2Uge30nLmZvcm1hdChzZWxmLl9wYXRoX3RvX2RyaXZlcigpLCBkZXZpY2UudWRpZCkpCisK
KyAgICAgICAgZm9yIGkgaW4geHJhbmdlKHNlbGYuY2hpbGRfcHJvY2Vzc2VzKCkpOgorICAgICAg
ICAgICAgc2VsZi5kZXZpY2VfZm9yX3dvcmtlcl9udW1iZXIoaSkucHJlcGFyZV9mb3JfdGVzdGlu
ZygpCisKKyAgICBkZWYgY2xlYW5fdXBfdGVzdF9ydW4oc2VsZik6CisgICAgICAgIHN1cGVyKElP
U1BvcnQsIHNlbGYpLmNsZWFuX3VwX3Rlc3RfcnVuKCkKKworICAgICAgICBmb3IgaSBpbiB4cmFu
Z2Uoc2VsZi5jaGlsZF9wcm9jZXNzZXMoKSk6CisgICAgICAgICAgICBzZWxmLmRldmljZV9mb3Jf
d29ya2VyX251bWJlcihpKS5maW5pc2hlZF90ZXN0aW5nKCkKSW5kZXg6IFRvb2xzL1NjcmlwdHMv
d2Via2l0cHkvcG9ydC9pb3Nfc2ltdWxhdG9yLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Njcmlw
dHMvd2Via2l0cHkvcG9ydC9pb3Nfc2ltdWxhdG9yLnB5CShyZXZpc2lvbiAyMTQ1MzUpCisrKyBU
b29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvaW9zX3NpbXVsYXRvci5weQkod29ya2luZyBjb3B5
KQpAQCAtNjYsNyArNjYsMTAgQEAgY2xhc3MgSU9TU2ltdWxhdG9yUG9ydChJT1NQb3J0KToKICAg
ICAgICAgfSwKICAgICB9CiAKKyAgICAjRklYTUU6IFBvcnRzIGFyZSByZWNyZWF0ZWQgaW4gZWFj
aCBwcm9jZXNzLiBUaGlzIGlzIGEgcHJvYmxlbSBmb3IgSU9TU2ltdWxhdG9yUG9ydCwgaXQgbWVh
bnMgZGV2aWNlcyBhcmUgbm90CisgICAgIyBwZXJzaXN0ZW50IGFuZCBkZXZpY2VzIGhvbGQgYSBs
aXN0ZW5pbmcgc29ja2V0IGV4cGVjdGVkIHRvIGJlIHBlcnNpc3RlbnQgYWNyb3NzIHByb2Nlc3Nl
cy4KICAgICBfREVWSUNFX01BUCA9IHt9CisgICAgX0NVUlJFTlRfREVWSUNFID0gTm9uZQogCiAg
ICAgZGVmIF9faW5pdF9fKHNlbGYsIGhvc3QsIHBvcnRfbmFtZSwgKiprd2FyZ3MpOgogICAgICAg
ICBzdXBlcihJT1NTaW11bGF0b3JQb3J0LCBzZWxmKS5fX2luaXRfXyhob3N0LCBwb3J0X25hbWUs
ICoqa3dhcmdzKQpAQCAtNzUsNyArNzgsOSBAQCBjbGFzcyBJT1NTaW11bGF0b3JQb3J0KElPU1Bv
cnQpOgogICAgICAgICBzZWxmLl9kZXZpY2VfY2xhc3MgPSBvcHRpb25hbF9kZXZpY2VfY2xhc3Mg
aWYgb3B0aW9uYWxfZGV2aWNlX2NsYXNzIGVsc2Ugc2VsZi5ERUZBVUxUX0RFVklDRV9DTEFTUwog
ICAgICAgICBfbG9nLmRlYnVnKCdJT1NTaW11bGF0b3JQb3J0IF9kZXZpY2VfY2xhc3MgaXMgJXMn
LCBzZWxmLl9kZXZpY2VfY2xhc3MpCiAKLSAgICAgICAgc2VsZi5fY3VycmVudF9kZXZpY2UgPSBE
ZXZpY2UoU2ltdWxhdG9yKGhvc3QpLmN1cnJlbnRfZGV2aWNlKCkpCisgICAgICAgIGlmIG5vdCBJ
T1NTaW11bGF0b3JQb3J0Ll9DVVJSRU5UX0RFVklDRToKKyAgICAgICAgICAgIElPU1NpbXVsYXRv
clBvcnQuX0NVUlJFTlRfREVWSUNFID0gRGV2aWNlKFNpbXVsYXRvcihob3N0KS5jdXJyZW50X2Rl
dmljZSgpKQorICAgICAgICBzZWxmLl9jdXJyZW50X2RldmljZSA9IElPU1NpbXVsYXRvclBvcnQu
X0NVUlJFTlRfREVWSUNFCiAgICAgICAgIGlmIG5vdCBzZWxmLl9jdXJyZW50X2RldmljZToKICAg
ICAgICAgICAgIHNlbGYuc2V0X29wdGlvbignZGVkaWNhdGVkX3NpbXVsYXRvcnMnLCBUcnVlKQog
ICAgICAgICBpZiBub3Qgc2VsZi5nZXRfb3B0aW9uKCdkZWRpY2F0ZWRfc2ltdWxhdG9ycycpOgpJ
bmRleDogVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3NpbXVsYXRvcl9wcm9jZXNzLnB5Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9zaW11bGF0b3JfcHJvY2Vz
cy5weQkocmV2aXNpb24gMjE0NTM1KQorKysgVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L3Np
bXVsYXRvcl9wcm9jZXNzLnB5CSh3b3JraW5nIGNvcHkpCkBAIC01NCw2NCArNTQsNjAgQEAgY2xh
c3MgU2ltdWxhdG9yUHJvY2VzcyhTZXJ2ZXJQcm9jZXNzKToKICAgICAgICAgICAgICAgICB0aW1l
LnNsZWVwKDAuMDEpICAjIEluIHNlY29uZHMKICAgICAgICAgICAgIHJldHVybiBzZWxmLnJldHVy
bmNvZGUKIAorICAgICMgUHl0aG9uIDIncyBpbXBsZW1lbnRhdGlvbiBvZiBtYWtlZmlsZSBkb2Vz
IG5vdCByZXR1cm4gYSBub24tYmxvY2tpbmcgZmlsZS4KKyAgICBjbGFzcyBOb25CbG9ja2luZ0Zp
bGVGcm9tU29ja2V0KG9iamVjdCk6CisKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNvY2ss
IHR5cGUpOgorICAgICAgICAgICAgc2VsZi5zb2NrZXQgPSBzb2NrCisgICAgICAgICAgICBzZWxm
Ll9maWxlID0gb3MuZmRvcGVuKHNvY2suZmlsZW5vKCksIHR5cGUsIDApCisgICAgICAgICAgICBT
ZXJ2ZXJQcm9jZXNzLl9zZXRfZmlsZV9ub25ibG9ja2luZyhzZWxmLl9maWxlKQorCisgICAgICAg
IGRlZiBfX2dldGF0dHJfXyhzZWxmLCBuYW1lKToKKyAgICAgICAgICAgIHJldHVybiBnZXRhdHRy
KHNlbGYuX2ZpbGUsIG5hbWUpCisKKyAgICAgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICAg
ICAgcmVzdWx0ID0gc2VsZi5fZmlsZS5jbG9zZSgpCisgICAgICAgICAgICBzZWxmLnNvY2tldC5j
bG9zZSgpCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0CisKKwogICAgIGRlZiBfX2luaXRfXyhz
ZWxmLCBwb3J0X29iaiwgbmFtZSwgY21kLCBlbnY9Tm9uZSwgdW5pdmVyc2FsX25ld2xpbmVzPUZh
bHNlLCB0cmVhdF9ub19kYXRhX2FzX2NyYXNoPUZhbHNlLCB3b3JrZXJfbnVtYmVyPU5vbmUpOgog
ICAgICAgICBzZWxmLl9idW5kbGVfaWQgPSBwb3J0X29iai5hcHBfaWRlbnRpZmllcl9mcm9tX2J1
bmRsZShjbWRbMF0pCiAgICAgICAgIHNlbGYuX2RldmljZSA9IHBvcnRfb2JqLmRldmljZV9mb3Jf
d29ya2VyX251bWJlcih3b3JrZXJfbnVtYmVyKQotICAgICAgICBlbnZbJ0lQQ19JREVOVElGSUVS
J10gPSBzZWxmLl9idW5kbGVfaWQgKyAnLScgKyBzZWxmLl9kZXZpY2UudWRpZAotCi0gICAgICAg
ICMgVGhpcyBsb2NhdGlvbiBtYXRjaGVzIHRoZSBsb2NhdGlvbiB1c2VkIGJ5IFdlYktpdFRlc3RS
dW5uZXIgYW5kIER1bXBSZW5kZXJUcmVlCi0gICAgICAgICMgZm9yIHRoZSBvdGhlciBzaWRlIG9m
IHRoZXNlIGZpZm9zLgotICAgICAgICBmaWxlX2xvY2F0aW9uID0gJy90bXAvJyArIGVudlsnSVBD
X0lERU5USUZJRVInXQotICAgICAgICBzZWxmLl9pbl9wYXRoID0gZmlsZV9sb2NhdGlvbiArICdf
SU4nCi0gICAgICAgIHNlbGYuX291dF9wYXRoID0gZmlsZV9sb2NhdGlvbiArICdfT1VUJwotICAg
ICAgICBzZWxmLl9lcnJvcl9wYXRoID0gZmlsZV9sb2NhdGlvbiArICdfRVJST1InCiAKKyAgICAg
ICAgZW52WydQT1JUJ10gPSBzdHIoc2VsZi5fZGV2aWNlLmxpc3RlbmluZ19wb3J0KCkpCiAgICAg
ICAgIHN1cGVyKFNpbXVsYXRvclByb2Nlc3MsIHNlbGYpLl9faW5pdF9fKHBvcnRfb2JqLCBuYW1l
LCBjbWQsIGVudiwgdW5pdmVyc2FsX25ld2xpbmVzLCB0cmVhdF9ub19kYXRhX2FzX2NyYXNoKQog
Ci0gICAgZGVmIF9yZXNldChzZWxmKToKLSAgICAgICAgc3VwZXIoU2ltdWxhdG9yUHJvY2Vzcywg
c2VsZikuX3Jlc2V0KCkKLQotICAgICAgICAjIFVubGlua3MgYXJlIG5lZWRlZCBvbiByZXNldCBp
biB0aGUgZXZlbnQgdGhhdCB0aGUgUHl0aG9uIGNvZGUgdW5leHBlY3RlZGx5Ci0gICAgICAgICMg
ZmFpbHMgYmV0d2VlbiBfc3RhcnQoKSBhbmQga2lsbCgpLiAgVGhpcyBjYW4gYmUgY2F1c2VkIGJ5
IGEgU0lHS0lMTCBvciBhIGNyYXNoLgotICAgICAgICAjIFRoaXMgZW5zdXJlcyB0aGF0IG9zLm1r
ZmlmbygpIHdpbGwgbm90IGJlIG9ic3RydWN0ZWQgYnkgcHJldmlvdXMgZmlmb3MuCi0gICAgICAg
ICMgT3RoZXIgZmlsZXMgd2lsbCBzdGlsbCBjYXVzZSBvcy5ta2ZpZm8oKSB0byBmYWlsLgotICAg
ICAgICB0cnk6Ci0gICAgICAgICAgICBvcy51bmxpbmsoc2VsZi5faW5fcGF0aCkKLSAgICAgICAg
ZXhjZXB0OgotICAgICAgICAgICAgcGFzcwotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBvcy51
bmxpbmsoc2VsZi5fb3V0X3BhdGgpCi0gICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgIHBhc3MK
LSAgICAgICAgdHJ5OgotICAgICAgICAgICAgb3MudW5saW5rKHNlbGYuX2Vycm9yX3BhdGgpCi0g
ICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgIHBhc3MKKyAgICBAc3RhdGljbWV0aG9kCisgICAg
ZGVmIF9hY2NlcHRfY29ubmVjdGlvbl9jcmVhdGVfZmlsZShzZXJ2ZXIsIHR5cGUpOgorICAgICAg
ICBjb25uZWN0aW9uLCBhZGRyZXNzID0gc2VydmVyLmFjY2VwdCgpCisgICAgICAgIGFzc2VydCBh
ZGRyZXNzWzBdID09ICcxMjcuMC4wLjEnCisgICAgICAgIHJldHVybiBTaW11bGF0b3JQcm9jZXNz
Lk5vbkJsb2NraW5nRmlsZUZyb21Tb2NrZXQoY29ubmVjdGlvbiwgdHlwZSkKIAogICAgIGRlZiBf
c3RhcnQoc2VsZik6CiAgICAgICAgIGlmIHNlbGYuX3Byb2M6CiAgICAgICAgICAgICByYWlzZSBW
YWx1ZUVycm9yKCd7fSBhbHJlYWR5IHJ1bm5pbmcnLmZvcm1hdChzZWxmLl9uYW1lKSkKICAgICAg
ICAgc2VsZi5fcmVzZXQoKQogCi0gICAgICAgIEZJRk9fUEVSTUlTU0lPTl9GTEFHUyA9IDA2MDAg
ICMgT25seSBvd25lciBjYW4gcmVhZCBhbmQgd3JpdGUKLSAgICAgICAgb3MubWtmaWZvKHNlbGYu
X2luX3BhdGgsIEZJRk9fUEVSTUlTU0lPTl9GTEFHUykKLSAgICAgICAgb3MubWtmaWZvKHNlbGYu
X291dF9wYXRoLCBGSUZPX1BFUk1JU1NJT05fRkxBR1MpCi0gICAgICAgIG9zLm1rZmlmbyhzZWxm
Ll9lcnJvcl9wYXRoLCBGSUZPX1BFUk1JU1NJT05fRkxBR1MpCi0KLSAgICAgICAgc3Rkb3V0ID0g
b3MuZmRvcGVuKG9zLm9wZW4oc2VsZi5fb3V0X3BhdGgsIG9zLk9fUkRPTkxZIHwgb3MuT19OT05C
TE9DSyksICdyYicpCi0gICAgICAgIHN0ZGVyciA9IG9zLmZkb3Blbihvcy5vcGVuKHNlbGYuX2Vy
cm9yX3BhdGgsIG9zLk9fUkRPTkxZIHwgb3MuT19OT05CTE9DSyksICdyYicpCi0KKyAgICAgICAg
IyBFYWNoIGRldmljZSBoYXMgYSBsaXN0ZW5pbmcgc29ja2V0IGludGl0aWxhaXplZCBkdXJpbmcg
dGhlIHBvcnQncyBzZXR1cF90ZXN0X3J1bi4KKyAgICAgICAgIyAzIGNsaWVudCBjb25uZWN0aW9u
cyB3aWxsIGJlIGFjY2VwdGVkIGZvciBzdGRpbiwgc3Rkb3V0IGFuZCBzdGRlcnIgaW4gdGhhdCBv
cmRlci4KKyAgICAgICAgc2VsZi5fZGV2aWNlLmxpc3RlbmluZ19zb2NrZXQubGlzdGVuKDMpCiAg
ICAgICAgIHNlbGYuX3BpZCA9IHNlbGYuX2RldmljZS5sYXVuY2hfYXBwKHNlbGYuX2J1bmRsZV9p
ZCwgc2VsZi5fY21kWzE6XSwgZW52PXNlbGYuX2VudikKIAogICAgICAgICBkZWYgaGFuZGxlcihz
aWdudW0sIGZyYW1lKToKICAgICAgICAgICAgIGFzc2VydCBzaWdudW0gPT0gc2lnbmFsLlNJR0FM
Uk0KLSAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbignVGltZWQgb3V0IHdhaXRpbmcgZm9yIHBy
b2Nlc3MgdG8gb3BlbiB7fScuZm9ybWF0KHNlbGYuX2luX3BhdGgpKQorICAgICAgICAgICAgcmFp
c2UgRXhjZXB0aW9uKCdUaW1lZCBvdXQgd2FpdGluZyBmb3IgcHJvY2VzcyB0byBjb25uZWN0IGF0
IHBvcnQge30nLmZvcm1hdChzZWxmLl9kZXZpY2UubGlzdGVuaW5nX3BvcnQoKSkpCiAgICAgICAg
IHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR0FMUk0sIGhhbmRsZXIpCiAgICAgICAgIHNpZ25hbC5h
bGFybSgzKSAgIyBJbiBzZWNvbmRzCiAKICAgICAgICAgc3RkaW4gPSBOb25lCisgICAgICAgIHN0
ZG91dCA9IE5vbmUKKyAgICAgICAgc3RkZXJyID0gTm9uZQogICAgICAgICB0cnk6Ci0gICAgICAg
ICAgICBzdGRpbiA9IG9wZW4oc2VsZi5faW5fcGF0aCwgJ3cnLCAwKSAgIyBPcGVuaW5nIHdpdGgg
bm8gYnVmZmVyaW5nLCBsaWtlIHBvcGVuCisgICAgICAgICAgICAjIFRoaXMgb3JkZXIgbWF0Y2hl
cyB0aGUgY2xpZW50IHNpZGUgY29ubmVjdGlvbnMgaW4gVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9J
T1NMYXlvdXRUZXN0Q29tbXVuaWNhdGlvbi5jcHAgc2V0VXBJT1NMYXlvdXRUZXN0Q29tbXVuaWNh
dGlvbigpCisgICAgICAgICAgICBzdGRpbiA9IFNpbXVsYXRvclByb2Nlc3MuX2FjY2VwdF9jb25u
ZWN0aW9uX2NyZWF0ZV9maWxlKHNlbGYuX2RldmljZS5saXN0ZW5pbmdfc29ja2V0LCAndycpCisg
ICAgICAgICAgICBzdGRvdXQgPSBTaW11bGF0b3JQcm9jZXNzLl9hY2NlcHRfY29ubmVjdGlvbl9j
cmVhdGVfZmlsZShzZWxmLl9kZXZpY2UubGlzdGVuaW5nX3NvY2tldCwgJ3JiJykKKyAgICAgICAg
ICAgIHN0ZGVyciA9IFNpbXVsYXRvclByb2Nlc3MuX2FjY2VwdF9jb25uZWN0aW9uX2NyZWF0ZV9m
aWxlKHNlbGYuX2RldmljZS5saXN0ZW5pbmdfc29ja2V0LCAncmInKQogICAgICAgICBleGNlcHQ6
CiAgICAgICAgICAgICAjIFdlIHNldCBzZWxmLl9wcm9jIGFzIF9yZXNldCgpIGFuZCBfa2lsbCgp
IGRlcGVuZCBvbiBpdC4KICAgICAgICAgICAgIHNlbGYuX3Byb2MgPSBTaW11bGF0b3JQcm9jZXNz
LlBvcGVuKHNlbGYuX3BpZCwgc3RkaW4sIHN0ZG91dCwgc3RkZXJyLCBzZWxmLl9kZXZpY2UpCklu
ZGV4OiBUb29scy9UZXN0UnVubmVyU2hhcmVkL0lPU0xheW91dFRlc3RDb21tdW5pY2F0aW9uLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0UnVubmVyU2hhcmVkL0lPU0xheW91dFRlc3RDb21t
dW5pY2F0aW9uLmNwcAkobm9uZXhpc3RlbnQpCisrKyBUb29scy9UZXN0UnVubmVyU2hhcmVkL0lP
U0xheW91dFRlc3RDb21tdW5pY2F0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc5
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIklPU0xheW91
dFRlc3RDb21tdW5pY2F0aW9uLmgiCisKKyNpbmNsdWRlIDxuZXRkYi5oPgorI2luY2x1ZGUgPG5l
dGluZXQvaW4uaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8c3lzL3R5cGVz
Lmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKwor
c3RhdGljIGludCBzdGRpblNvY2tldDsKK3N0YXRpYyBpbnQgc3Rkb3V0U29ja2V0Oworc3RhdGlj
IGludCBzdGRlcnJTb2NrZXQ7CisKK3N0YXRpYyBpbnQgY29ubmVjdFRvU2VydmVyKHNvY2thZGRy
X2luJiBzZXJ2ZXJBZGRyZXNzKQoreworICAgIGludCByZXN1bHQgPSBzb2NrZXQoQUZfSU5FVCwg
U09DS19TVFJFQU0sIDApOworICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdCA+PSAwKTsKKyAgICBS
RUxFQVNFX0FTU0VSVChjb25uZWN0KHJlc3VsdCwgKHN0cnVjdCBzb2NrYWRkciAqKSAmc2VydmVy
QWRkcmVzcywgc2l6ZW9mKHNlcnZlckFkZHJlc3MpKSA+PSAwKTsKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCit2b2lkIHNldFVwSU9TTGF5b3V0VGVzdENvbW11bmljYXRpb24oKQoreworICAgIGlu
dCBwb3J0ID0gYXRvaShnZXRlbnYoIlBPUlQiKSk7CisgICAgUkVMRUFTRV9BU1NFUlQocG9ydCA+
IDApOworCisgICAgc3RydWN0IGhvc3RlbnQqIGhvc3QgPSBnZXRob3N0YnluYW1lKCIxMjcuMC4w
LjEiKTsKKyAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gc2VydmVyQWRkcmVzczsKKyAgICBtZW1zZXQo
KGNoYXIqKSAmc2VydmVyQWRkcmVzcywgMCwgc2l6ZW9mKHNlcnZlckFkZHJlc3MpKTsKKyAgICBz
ZXJ2ZXJBZGRyZXNzLnNpbl9mYW1pbHkgPSBBRl9JTkVUOworICAgIG1lbWNweSgKKyAgICAgICAg
KGNoYXIqKSZzZXJ2ZXJBZGRyZXNzLnNpbl9hZGRyLnNfYWRkciwKKyAgICAgICAgKGNoYXIqKWhv
c3QtPmhfYWRkciwKKyAgICAgICAgaG9zdC0+aF9sZW5ndGgpOworICAgIHNlcnZlckFkZHJlc3Mu
c2luX3BvcnQgPSBodG9ucyhwb3J0KTsKKyAgICAKKyAgICAvLyBUaGlzIG9yZGVyIG1hdGNoZXMg
dGhlIHNlcnZlciBzaWRlIGxpc3RlbmVyIGluIFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9z
aW11bGF0b3JfcHJvY2Vzcy5weSBTaW11bGF0b3JQcm9jZXNzLl9zdGFydCgpCisgICAgc3RkaW5T
b2NrZXQgPSBjb25uZWN0VG9TZXJ2ZXIoc2VydmVyQWRkcmVzcyk7CisgICAgZHVwMihzdGRpblNv
Y2tldCwgU1RESU5fRklMRU5PKTsKKworICAgIHN0ZG91dFNvY2tldCA9IGNvbm5lY3RUb1NlcnZl
cihzZXJ2ZXJBZGRyZXNzKTsKKyAgICBkdXAyKHN0ZG91dFNvY2tldCwgU1RET1VUX0ZJTEVOTyk7
CisKKyAgICBzdGRlcnJTb2NrZXQgPSBjb25uZWN0VG9TZXJ2ZXIoc2VydmVyQWRkcmVzcyk7Cisg
ICAgZHVwMihzdGRlcnJTb2NrZXQsIFNUREVSUl9GSUxFTk8pOworfQorCit2b2lkIHRlYXJEb3du
SU9TTGF5b3V0VGVzdENvbW11bmljYXRpb24oKQoreworICAgIGNsb3NlKHN0ZGluU29ja2V0KTsK
KyAgICBjbG9zZShzdGRvdXRTb2NrZXQpOworICAgIGNsb3NlKHN0ZGVyclNvY2tldCk7Cit9Cklu
ZGV4OiBUb29scy9UZXN0UnVubmVyU2hhcmVkL0lPU0xheW91dFRlc3RDb21tdW5pY2F0aW9uLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFJ1bm5lclNoYXJlZC9JT1NMYXlvdXRUZXN0Q29tbXVu
aWNhdGlvbi5oCShub25leGlzdGVudCkKKysrIFRvb2xzL1Rlc3RSdW5uZXJTaGFyZWQvSU9TTGF5
b3V0VGVzdENvbW11bmljYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI5IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKK3ZvaWQgc2V0VXBJT1NMYXlvdXRUZXN0Q29tbXVu
aWNhdGlvbigpOwordm9pZCB0ZWFyRG93bklPU0xheW91dFRlc3RDb21tdW5pY2F0aW9uKCk7Cklu
ZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL1dlYktpdFRlc3RSdW5uZXIueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL1dlYktp
dFRlc3RSdW5uZXIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjE0NTM1KQor
KysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9XZWJLaXRUZXN0UnVubmVyLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTczLDYgKzczLDcgQEAKIAkJMkU2M0VEQTEx
ODkxQjI5MTAwMkE3QUZDIC8qIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnRJT1MubW0gaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRTYzRUQ3ODE4OTFBQ0U5MDAy
QTdBRkMgLyogQWNjZXNzaWJpbGl0eVVJRWxlbWVudElPUy5tbSAqLzsgfTsKIAkJMkU2M0VEQTYx
ODkxQkRDMDAwMkE3QUZDIC8qIFRlc3RSdW5uZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNDOTk4MTcxMUQzRjUxRTAwMTdCQ0EyIC8qIFRlc3RS
dW5uZXIuY3BwICovOyB9OwogCQkyRTc0OUJGMjE4OTFFQkZBMDA3RkMxNzUgLyogRXZlbnRTZW5k
ZXJQcm94eUlPUy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDJFNjNFRDdBMTg5MUFDRTkwMDJBN0FGQyAvKiBFdmVudFNlbmRlclByb3h5SU9TLm1tICov
OyB9OworCQkzMURBOEEzRDFFNzIwNUNDMDBFMURGMkYgLyogSU9TTGF5b3V0VGVzdENvbW11bmlj
YXRpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MzE0OEEwNTMxRTZGODVCNjAwRDNCMzE2IC8qIElPU0xheW91dFRlc3RDb21tdW5pY2F0aW9uLmNw
cCAqLzsgfTsKIAkJNTEwNThBRDUxRDY3ODgyMDAwOUE1MzhDIC8qIGxpYldlYkNvcmVUZXN0U3Vw
cG9ydC5keWxpYiBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDQxMjMwRTE2MTM4Qzc4QkYwMEJDQ0ZDQSAvKiBsaWJXZWJDb3JlVGVzdFN1cHBvcnQuZHls
aWIgKi87IH07CiAJCTUxMDU4QUQ2MUQ2Nzg4MjUwMDlBNTM4QyAvKiBXZWJLaXQuZnJhbWV3b3Jr
IGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1MTY5
Q0ExNDQ1MjIyRDAwRTBBOUQ3IC8qIFdlYktpdC5mcmFtZXdvcmsgKi87IH07CiAJCTU2NDFFMkQw
MTQzMzVFOTUwMDgzMDdFNSAvKiBKU1RleHRJbnB1dENvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTY0MUUyQ0UxNDMzNUU5NTAwODMw
N0U1IC8qIEpTVGV4dElucHV0Q29udHJvbGxlci5jcHAgKi87IH07CkBAIC0yNTIsNiArMjUzLDgg
QEAKIAkJMkVFNTJEMTQxODkwQTlGQjAwMTBFRDIxIC8qIFRlc3RDb250cm9sbGVySU9TLm1tICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gVGVzdENvbnRyb2xsZXJJT1Mu
bW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJFRTUyRDE2MTg5MEE5RkIwMDEwRUQy
MSAvKiBtYWluSU9TLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0g
bWFpbklPUy5tbTsgcGF0aCA9IC4uL2lvcy9tYWluSU9TLm1tOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkzMTEwQkUwRjE1QkEwMTE0MDBEMjE2QUMgLyogV2ViTm90aWZpY2F0aW9uUHJv
dmlkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViTm90aWZpY2F0aW9uUHJvdmlkZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzE0OEEwNTMxRTZGODVCNjAwRDNCMzE2IC8qIElPU0xh
eW91dFRlc3RDb21tdW5pY2F0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IElPU0xheW91dFRlc3RDb21tdW5pY2F0aW9uLmNwcDsgcGF0aCA9IC4uL1Rlc3RSdW5u
ZXJTaGFyZWQvSU9TTGF5b3V0VGVzdENvbW11bmljYXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkzMTQ4QTA1NDFFNkY4NUI2MDBEM0IzMTYgLyogSU9TTGF5b3V0VGVzdENv
bW11bmljYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSU9TTGF5b3V0
VGVzdENvbW11bmljYXRpb24uaDsgcGF0aCA9IC4uL1Rlc3RSdW5uZXJTaGFyZWQvSU9TTGF5b3V0
VGVzdENvbW11bmljYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzE2NEM4
RUYxNUQxQURBMTAwRUYxRkUwIC8qIFdlYk5vdGlmaWNhdGlvblByb3ZpZGVyLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYk5vdGlmaWNhdGlvblByb3ZpZGVyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzc4RDQ0MjIxMzM0NkQwMDAwNkE3NzdC
IC8qIGNvbmZpZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBjb25maWcuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNDEyMzBFMTYxMzhDNzhCRjAwQkNDRkNBIC8qIGxpYldlYkNvcmVUZXN0U3Vw
cG9ydC5keWxpYiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9ICJjb21waWxlZC5tYWNoLW8uZHlsaWIiOyBwYXRoID0gbGliV2ViQ29yZVRlc3RTdXBwb3J0
LmR5bGliOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwpAQCAtNDUwLDYgKzQ1
Myw4IEBACiAJCTBGMThFNzFBMUQ2QkM0QkMwMDI3RTU0NyAvKiBUZXN0UnVubmVyU2hhcmVkICov
ID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQkzMTQ4QTA1MzFF
NkY4NUI2MDBEM0IzMTYgLyogSU9TTGF5b3V0VGVzdENvbW11bmljYXRpb24uY3BwICovLAorCQkJ
CTMxNDhBMDU0MUU2Rjg1QjYwMEQzQjMxNiAvKiBJT1NMYXlvdXRUZXN0Q29tbXVuaWNhdGlvbi5o
ICovLAogCQkJCTBGMThFNzFCMUQ2QkM0RTYwMDI3RTU0NyAvKiBCaW5kaW5ncyAqLywKIAkJCQkw
RjczQjU0NzFCQTc4MkZFMDA0QjNFRjQgLyogVUlTY3JpcHRDb250ZXh0ICovLAogCQkJKTsKQEAg
LTk3MCw2ICs5NzUsNyBAQAogCQkJCUExODUxMDQwMUI5QUUxMzEwMDc0NEFFQiAvKiBQaXhlbER1
bXBTdXBwb3J0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUExODUxMDQxMUI5QUUxMzgwMDc0NEFF
QiAvKiBUZXN0Q29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBMTg1MTAzQjFCOUFF
MEUyMDA3NDRBRUIgLyogVGVzdENvbnRyb2xsZXJDb2NvYS5tbSBpbiBTb3VyY2VzICovLAorCQkJ
CTMxREE4QTNEMUU3MjA1Q0MwMEUxREYyRiAvKiBJT1NMYXlvdXRUZXN0Q29tbXVuaWNhdGlvbi5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlBMTg1MTA0MjFCOUFFMTNFMDA3NDRBRUIgLyogVGVzdElu
dm9jYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTE4NTEwM0QxQjlBRTEwNjAwNzQ0QUVC
IC8qIFRlc3RJbnZvY2F0aW9uQ0cuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY2MjJDRTkxQkJC
M0ExQTAwODM4QUQzIC8qIFRlc3RPcHRpb25zLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9pb3MvVGVzdENvbnRyb2xsZXJJT1MubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9pb3MvVGVzdENvbnRyb2xsZXJJT1MubW0JKHJldmlz
aW9uIDIxNDUzNSkKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvaW9zL1Rlc3RDb250cm9sbGVy
SU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjaW1wb3J0ICJUZXN0Q29u
dHJvbGxlci5oIgogCiAjaW1wb3J0ICJISURFdmVudEdlbmVyYXRvci5oIgorI2ltcG9ydCAiSU9T
TGF5b3V0VGVzdENvbW11bmljYXRpb24uaCIKICNpbXBvcnQgIlBsYXRmb3JtV2ViVmlldy5oIgog
I2ltcG9ydCAiVGVzdEludm9jYXRpb24uaCIKICNpbXBvcnQgIlRlc3RSdW5uZXJXS1dlYlZpZXcu
aCIKQEAgLTQ5LDIxICs1MCwxMiBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpub3RpZnlEb25lKCkK
IAogdm9pZCBUZXN0Q29udHJvbGxlcjo6cGxhdGZvcm1Jbml0aWFsaXplKCkKIHsKLSAgICBjb25z
dCBjaGFyKiBpZGVudGlmaWVyID0gZ2V0ZW52KCJJUENfSURFTlRJRklFUiIpOwotICAgIGNvbnN0
IGNoYXIgKnN0ZGluUGF0aCA9IFtbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIi90bXAvJXNf
SU4iLCBpZGVudGlmaWVyXSBVVEY4U3RyaW5nXTsKLSAgICBjb25zdCBjaGFyICpzdGRvdXRQYXRo
ID0gW1tOU1N0cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiL3RtcC8lc19PVVQiLCBpZGVudGlmaWVy
XSBVVEY4U3RyaW5nXTsKLSAgICBjb25zdCBjaGFyICpzdGRlcnJQYXRoID0gW1tOU1N0cmluZyBz
dHJpbmdXaXRoRm9ybWF0OkAiL3RtcC8lc19FUlJPUiIsIGlkZW50aWZpZXJdIFVURjhTdHJpbmdd
OwotCi0gICAgaW50IGluZmQgPSBvcGVuKHN0ZGluUGF0aCwgT19SRFdSKTsKLSAgICBkdXAyKGlu
ZmQsIFNURElOX0ZJTEVOTyk7Ci0gICAgaW50IG91dGZkID0gb3BlbihzdGRvdXRQYXRoLCBPX1JE
V1IpOwotICAgIGR1cDIob3V0ZmQsIFNURE9VVF9GSUxFTk8pOwotICAgIGludCBlcnJmZCA9IG9w
ZW4oc3RkZXJyUGF0aCwgT19SRFdSIHwgT19OT05CTE9DSyk7Ci0gICAgZHVwMihlcnJmZCwgU1RE
RVJSX0ZJTEVOTyk7CisgICAgc2V0VXBJT1NMYXlvdXRUZXN0Q29tbXVuaWNhdGlvbigpOwogfQog
CiB2b2lkIFRlc3RDb250cm9sbGVyOjpwbGF0Zm9ybURlc3Ryb3koKQogeworICAgIHRlYXJEb3du
SU9TTGF5b3V0VGVzdENvbW11bmljYXRpb24oKTsKIH0KIAogdm9pZCBUZXN0Q29udHJvbGxlcjo6
aW5pdGlhbGl6ZUluamVjdGVkQnVuZGxlUGF0aCgpCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>