<?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>173619</bug_id>
          
          <creation_ts>2017-06-20 13:43:41 -0700</creation_ts>
          <short_desc>Web Inspector: use JSON::{Array,Object,Value} instead of Inspector{Array,Object,Value}</short_desc>
          <delta_ts>2017-11-15 13:13:11 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>173793</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Blaze Burg">bburg</reporter>
          <assigned_to name="Carlos Garcia Campos">cgarcia</assigned_to>
          <cc>achristensen</cc>
    
    <cc>bburg</cc>
    
    <cc>buildbot</cc>
    
    <cc>cgarcia</cc>
    
    <cc>inspector-bugzilla-changes</cc>
    
    <cc>joepeck</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1321223</commentid>
    <comment_count>0</comment_count>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2017-06-20 13:43:41 -0700</bug_when>
    <thetext>This object system is used outside of Inspector code so let&apos;s start moving it out.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1321224</commentid>
    <comment_count>1</comment_count>
      <attachid>313434</attachid>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2017-06-20 13:49:54 -0700</bug_when>
    <thetext>Created attachment 313434
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1321225</commentid>
    <comment_count>2</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-06-20 13:50:54 -0700</bug_when>
    <thetext>This patch modifies the inspector protocol generator. Please ensure that you have rebaselined any generator test results (i.e., by running `Tools/Scripts/run-inspector-generator-tests --reset-results`)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1321226</commentid>
    <comment_count>3</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-06-20 13:51:01 -0700</bug_when>
    <thetext>Attachment 313434 did not pass style-queue:


ERROR: Source/JavaScriptCore/inspector/scripts/codegen/cpp_generator.py:43:  whitespace before &apos;}&apos;  [pep8/E202] [5]
Total errors found: 1 in 18 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1321543</commentid>
    <comment_count>4</comment_count>
      <attachid>313529</attachid>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2017-06-21 10:34:38 -0700</bug_when>
    <thetext>Created attachment 313529
Patch v1.1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1321545</commentid>
    <comment_count>5</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-06-21 10:36:48 -0700</bug_when>
    <thetext>Attachment 313529 did not pass style-queue:


ERROR: Source/JavaScriptCore/inspector/scripts/codegen/cpp_generator.py:43:  whitespace before &apos;}&apos;  [pep8/E202] [5]
Total errors found: 1 in 23 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1321891</commentid>
    <comment_count>6</comment_count>
      <attachid>313529</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-06-22 08:23:08 -0700</bug_when>
    <thetext>Comment on attachment 313529
Patch v1.1

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

&gt; Source/JavaScriptCore/inspector/InspectorValues.h:52
&gt; +namespace JSON {

Is this namespace used anywhere else?  How are you making JSON objects?  Probably completely unrelated to this patch, but we&apos;ve been meaning to re-organize the JSON parser to use callbacks like the YARR parser so we can use it for other things and remove json.hpp.  Would that help this project, too?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1322338</commentid>
    <comment_count>7</comment_count>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2017-06-23 10:42:07 -0700</bug_when>
    <thetext>(In reply to Alex Christensen from comment #6)
&gt; Comment on attachment 313529 [details]
&gt; Patch v1.1
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=313529&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/inspector/InspectorValues.h:52
&gt; &gt; +namespace JSON {
&gt; 
&gt; Is this namespace used anywhere else?

Unknown. I have never seen it, though.

&gt; How are you making JSON objects? 

This code is ancient, and has its own JSON parser and stringifier. I believe ScriptValue is able to bridge between our C++ object representation of a JSON object and JS object representation.

Usually, though, this code parses strings from the remote debugger and send back out strings with payloads / command results.

&gt; Probably completely unrelated to this patch, but we&apos;ve been meaning to
&gt; re-organize the JSON parser to use callbacks like the YARR parser so we can
&gt; use it for other things and remove json.hpp.  Would that help this project,
&gt; too?

Unless there&apos;s some reason I am unaware of, this code&apos;s parser (and maybe stringifier) could be replaced if JSC&apos;s JSON parser used callbacks (so we could create C++ objects for values instead of JS objects).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1323606</commentid>
    <comment_count>8</comment_count>
      <attachid>313529</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-06-28 10:57:25 -0700</bug_when>
    <thetext>Comment on attachment 313529
Patch v1.1

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

r=me

&gt;&gt;&gt; Source/JavaScriptCore/inspector/InspectorValues.h:52
&gt;&gt;&gt; +namespace JSON {
&gt;&gt; 
&gt;&gt; Is this namespace used anywhere else?  How are you making JSON objects?  Probably completely unrelated to this patch, but we&apos;ve been meaning to re-organize the JSON parser to use callbacks like the YARR parser so we can use it for other things and remove json.hpp.  Would that help this project, too?
&gt; 
&gt; Unknown. I have never seen it, though.

I think I&apos;d prefer this namespace be called something like &quot;InspectorProtocol&quot; or &quot;InspectorJSON&quot; unless we want to make it purely for JSON and not have any inspector anything inside it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1323716</commentid>
    <comment_count>9</comment_count>
      <attachid>313529</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2017-06-28 16:18:31 -0700</bug_when>
    <thetext>Comment on attachment 313529
Patch v1.1

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

&gt;&gt;&gt;&gt; Source/JavaScriptCore/inspector/InspectorValues.h:52
&gt;&gt;&gt;&gt; +namespace JSON {
&gt;&gt;&gt; 
&gt;&gt;&gt; Is this namespace used anywhere else?  How are you making JSON objects?  Probably completely unrelated to this patch, but we&apos;ve been meaning to re-organize the JSON parser to use callbacks like the YARR parser so we can use it for other things and remove json.hpp.  Would that help this project, too?
&gt;&gt; 
&gt;&gt; Unknown. I have never seen it, though.
&gt; 
&gt; I think I&apos;d prefer this namespace be called something like &quot;InspectorProtocol&quot; or &quot;InspectorJSON&quot; unless we want to make it purely for JSON and not have any inspector anything inside it.

I tend to agree. I was under the impression that InspectorValue was not totally compatible with JSON. But I did a quick scan and didn&apos;t find any issues. In any case, I wouldn&apos;t want it named JSON unless it really did handle all of JSON. Moving it to such a generic namespace I&apos;d also expect to see unit tests. To a lesser degree this is somewhat well tested via Inspector tests right now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1335124</commentid>
    <comment_count>10</comment_count>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2017-08-03 20:35:49 -0700</bug_when>
    <thetext>(In reply to Joseph Pecoraro from comment #9)
&gt; Comment on attachment 313529 [details]
&gt; Patch v1.1
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=313529&amp;action=review
&gt; 
&gt; &gt;&gt;&gt;&gt; Source/JavaScriptCore/inspector/InspectorValues.h:52
&gt; &gt;&gt;&gt;&gt; +namespace JSON {
&gt; &gt;&gt;&gt; 
&gt; &gt;&gt;&gt; Is this namespace used anywhere else?  How are you making JSON objects?  Probably completely unrelated to this patch, but we&apos;ve been meaning to re-organize the JSON parser to use callbacks like the YARR parser so we can use it for other things and remove json.hpp.  Would that help this project, too?
&gt; &gt;&gt; 
&gt; &gt;&gt; Unknown. I have never seen it, though.
&gt; &gt; 
&gt; &gt; I think I&apos;d prefer this namespace be called something like &quot;InspectorProtocol&quot; or &quot;InspectorJSON&quot; unless we want to make it purely for JSON and not have any inspector anything inside it.
&gt; 
&gt; I tend to agree. I was under the impression that InspectorValue was not
&gt; totally compatible with JSON. But I did a quick scan and didn&apos;t find any
&gt; issues. In any case, I wouldn&apos;t want it named JSON unless it really did
&gt; handle all of JSON. Moving it to such a generic namespace I&apos;d also expect to
&gt; see unit tests. To a lesser degree this is somewhat well tested via
&gt; Inspector tests right now.

I&apos;m willing to pick this patch back up and write tests. However, we need to first do the renaming so that further attempts on this bug stop bit-rotting. Just since this patch, there are dozens of new uses especially in Canvas and Source/WebDriver.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1335125</commentid>
    <comment_count>11</comment_count>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2017-08-03 20:39:42 -0700</bug_when>
    <thetext>(In reply to Brian Burg from comment #10)
&gt; (In reply to Joseph Pecoraro from comment #9)
&gt; &gt; Comment on attachment 313529 [details]
&gt; &gt; Patch v1.1
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=313529&amp;action=review
&gt; &gt; 
&gt; &gt; &gt;&gt;&gt;&gt; Source/JavaScriptCore/inspector/InspectorValues.h:52
&gt; &gt; &gt;&gt;&gt;&gt; +namespace JSON {
&gt; &gt; &gt;&gt;&gt; 
&gt; &gt; &gt;&gt;&gt; Is this namespace used anywhere else?  How are you making JSON objects?  Probably completely unrelated to this patch, but we&apos;ve been meaning to re-organize the JSON parser to use callbacks like the YARR parser so we can use it for other things and remove json.hpp.  Would that help this project, too?
&gt; &gt; &gt;&gt; 
&gt; &gt; &gt;&gt; Unknown. I have never seen it, though.
&gt; &gt; &gt; 
&gt; &gt; &gt; I think I&apos;d prefer this namespace be called something like &quot;InspectorProtocol&quot; or &quot;InspectorJSON&quot; unless we want to make it purely for JSON and not have any inspector anything inside it.
&gt; &gt; 
&gt; &gt; I tend to agree. I was under the impression that InspectorValue was not
&gt; &gt; totally compatible with JSON. But I did a quick scan and didn&apos;t find any
&gt; &gt; issues. In any case, I wouldn&apos;t want it named JSON unless it really did
&gt; &gt; handle all of JSON. Moving it to such a generic namespace I&apos;d also expect to
&gt; &gt; see unit tests. To a lesser degree this is somewhat well tested via
&gt; &gt; Inspector tests right now.
&gt; 
&gt; I&apos;m willing to pick this patch back up and write tests. However, we need to
&gt; first do the renaming so that further attempts on this bug stop bit-rotting.
&gt; Just since this patch, there are dozens of new uses especially in Canvas and
&gt; Source/WebDriver.

In other words, let&apos;s land the renamings and then I&apos;ll work on the tests. Unit tests are a prerequisite to adopting the shared JSON parser via callbacks, to ensure we don&apos;t regress anything.

Joe, did you have any particular ideas for JSON unit tests? It seems like a big area and a priori deciding what tests to write seems kind of weird.

Alex, how did you go about writing tests for the new URL parser? It seems like a similarly large space to test from scratch.

Maybe we can start by writing tests that deserialize various JSON strings, both valid and invalid. We can write the equivalent tests that create valid and invalid JSON::Value trees in memory and see what happens when we try to serialize.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1335389</commentid>
    <comment_count>12</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2017-08-04 12:17:16 -0700</bug_when>
    <thetext>&gt; Joe, did you have any particular ideas for JSON unit tests? It seems like a
&gt; big area and a priori deciding what tests to write seems kind of weird.

You&apos;d should update the InspectorValue TestWebKitAPI test that was recently added:

    Tools/TestWebKitAPI/Tests/JavaScriptCore/InspectorValue.cpp

I&apos;d expect at least basic tests for:

    Basic Construction of the different JSON Value types:
        Null,
        Boolean,
        Double,
        Integer,
        String,
        Object,
        Array,
    
    InspectorValue::toJSONString
        - validate the output of the above types, non-finite numbers, nested objects / arrays

    InspectorValue::parseString
        - all JSON types, empty string, numbers &gt;2^53, non-finite numbers, NaN, nested objects / arrays, some invalid strings

    InspectorObject
        - size()
        - get/set/remove

    InspectorArray:
        - length()
        - get/push

These would be trivial to write but validate our expectations in edge cases to see if this really is JSON or not.

---

I see already there is one place this can produce invalid JSON, since NaN is not valid (maybe it should be &quot;null&quot;):

&gt;            // Not enough room for decimal. Use exponential format.
&gt;            if (decimal.bufferLengthForStringExponential() &gt; WTF::NumberToStringBufferLength) {
&gt;                // Fallback for an abnormal case if it&apos;s too little even for exponential.
&gt;                output.appendLiteral(&quot;NaN&quot;);
&gt;                return;
&gt;            }</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1367904</commentid>
    <comment_count>13</comment_count>
      <attachid>325891</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-11-03 06:56:14 -0700</bug_when>
    <thetext>Created attachment 325891
Rebased patch + unit tests

Rebased patch and included basic unit tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1367905</commentid>
    <comment_count>14</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-11-03 06:58:41 -0700</bug_when>
    <thetext>Attachment 325891 did not pass style-queue:


ERROR: Source/JavaScriptCore/inspector/scripts/codegen/cpp_generator.py:43:  whitespace before &apos;}&apos;  [pep8/E202] [5]
Total errors found: 1 in 24 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1368559</commentid>
    <comment_count>15</comment_count>
      <attachid>326105</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-11-05 23:28:07 -0800</bug_when>
    <thetext>Created attachment 326105
Try to fix mac builds</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1368560</commentid>
    <comment_count>16</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-11-05 23:31:19 -0800</bug_when>
    <thetext>Attachment 326105 did not pass style-queue:


ERROR: Source/JavaScriptCore/inspector/scripts/codegen/cpp_generator.py:43:  whitespace before &apos;}&apos;  [pep8/E202] [5]
Total errors found: 1 in 24 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1369358</commentid>
    <comment_count>17</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-11-07 23:51:06 -0800</bug_when>
    <thetext>Brian, could you review the unit test changes?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1369364</commentid>
    <comment_count>18</comment_count>
      <attachid>326105</attachid>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2017-11-08 00:11:35 -0800</bug_when>
    <thetext>Comment on attachment 326105
Try to fix mac builds

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

r=me, very thorough tests!

&gt; Source/JavaScriptCore/ChangeLog:6
&gt; +        Reviewed by Alex Christensen.

Please fix this so that you are the top line author, the original patch is by me, and the patch is reviewed by me and Alex.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1369396</commentid>
    <comment_count>19</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-11-08 05:02:22 -0800</bug_when>
    <thetext>Committed r224576: &lt;https://trac.webkit.org/changeset/224576&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1372415</commentid>
    <comment_count>20</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-11-15 13:13:11 -0800</bug_when>
    <thetext>&lt;rdar://problem/35569025&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>313434</attachid>
            <date>2017-06-20 13:49:54 -0700</date>
            <delta_ts>2017-06-21 10:34:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-173619-20170620134954.patch</filename>
            <type>text/plain</type>
            <size>63354</size>
            <attacher name="Blaze Burg">bburg</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE4NjAzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAx
ZmE1YjY0ZGM4YTc4OTY3ZGU0YmYwOGUxYWVhMWQ4OGMyODJjYmI3Li40NmFlOThkODg0NTEzZTYw
ZGI0OGJkNDY1NDBiZGFmZDQ0ZDdiYTFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw1MCBAQAorMjAxNy0wNi0yMCAgQnJpYW4gQnVyZyAgPGJidXJnQGFwcGxlLmNvbT4KKwor
ICAgICAgICBXZWIgSW5zcGVjdG9yOiBhbGlhcyBJbnNwZWN0b3J7QXJyYXksT2JqZWN0LFZhbHVl
fSB0byBKU09OOjp7QXJyYXksT2JqZWN0LFZhbHVlfQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTczNjE5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgRXZlbnR1YWxseSBhbGwgY2xhc3NlcyB1c2VkIGZvciBv
dXIgSlNPTi1SUEMgbWVzc2FnZSBwYXNzaW5nIHNob3VsZCBiZSBvdXRzaWRlCisgICAgICAgIG9m
IHRoZSBJbnNwZWN0b3IgbmFtZXNwYWNlIHNpbmNlIHRoZSBwcm90b2NvbCBpcyB1c2VkIG91dHNp
ZGUgb2YgSW5zcGVjdG9yIGNvZGUuCisgICAgICAgIFRoaXMgd2lsbCBhbHNvIGFsbG93IHVzIHRv
IHVuaWZ5IHRoZSBwcmltaXRpdmUgSlNPTiB0eXBlcyB3aXRoIHBhcmFtZXRlcmljIHR5cGVzCisg
ICAgICAgIGxpa2UgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8VD4gYW5kIG90aGVyIGdlbmVy
YXRlZCBwcm90b2NvbCB0eXBlcyB3aGljaCBkb24ndAorICAgICAgICBuZWVkIHRvIGJlIGluIHRo
ZSBJbnNwZWN0b3IgbmFtZXNwYWNlLgorCisgICAgICAgIFN0YXJ0IHRoaXMgcmVmYWN0b3Jpbmcg
b2ZmIGJ5IG1ha2luZyBKU09OOjpWYWx1ZSBhIHR5cGVkZWYgZm9yIEluc3BlY3RvclZhbHVlLiBJ
biBmb2xsb3dpbmcKKyAgICAgICAgcGF0Y2hlcywgb3RoZXIgY2xpZW50cyB3aWxsIG1vdmUgdG8g
dXNlIEpTT046OlZhbHVlIGFuZCBmcmllbmRzLiBXaGVuIGFsbCB1c2VzIGFyZQorICAgICAgICBj
aGFuZ2VkLCB0aGUgYWN0dWFsIGltcGxlbWVudGF0aW9uIHdpbGwgYmUgcmVuYW1lZC4gVGhpcyBw
YXRjaCBqdXN0IGZvY3VzZXMgb24gdGhlIHR5cGVkZWYKKyAgICAgICAgYW5kIG1ha2luZyBjaGFu
Z2VzIGluIGdlbmVyYXRlZCBwcm90b2NvbCBjb2RlLgorCisgICAgICAgICogaW5zcGVjdG9yL0lu
c3BlY3RvclZhbHVlcy5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5o
OgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vY3BwX2dlbmVyYXRvci5weToK
KyAgICAgICAgKENwcEdlbmVyYXRvci5jcHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlwZSk6CisgICAg
ICAgIChDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX3VuY2hlY2tlZF9mb3JtYWxfaW5fcGFyYW1l
dGVyKToKKyAgICAgICAgKENwcEdlbmVyYXRvci5jcHBfdHlwZV9mb3JfdHlwZV93aXRoX25hbWUp
OgorICAgICAgICAoQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl9zdGFja19pbl9wYXJhbWV0ZXIp
OgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX3Byb3Rv
Y29sX3R5cGVzX2hlYWRlci5weToKKyAgICAgICAgKF9nZW5lcmF0ZV9jbGFzc19mb3Jfb2JqZWN0
X2RlY2xhcmF0aW9uKToKKyAgICAgICAgKF9nZW5lcmF0ZV9mb3J3YXJkX2RlY2xhcmF0aW9uc19m
b3JfYmluZGluZ190cmFpdHMpOgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4v
Z2VuZXJhdGVfY3BwX3Byb3RvY29sX3R5cGVzX2ltcGxlbWVudGF0aW9uLnB5OgorICAgICAgICAo
Q3BwUHJvdG9jb2xUeXBlc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9hc3NlcnRp
b25fZm9yX29iamVjdF9kZWNsYXJhdGlvbik6CisgICAgICAgIChDcHBQcm90b2NvbFR5cGVzSW1w
bGVtZW50YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX2Fzc2VydGlvbl9mb3JfZW51bSk6CisgICAg
ICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvYWxsL2V4cGVjdGVkL2RlZmluaXRpb25zLXdp
dGgtbWFjLXBsYXRmb3JtLmpzb24tcmVzdWx0OgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNv
bi1yZXN1bHQ6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBl
Y3RlZC9jb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbi1y
ZXN1bHQ6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3Rl
ZC9ldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0OgorICAgICAgICAq
IGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZ2VuZXJhdGUtZG9tYWlu
cy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24tcmVzdWx0OgorICAgICAgICAqIGluc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0
ZXJzLmpzb24tcmVzdWx0OgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVy
aWMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uLXJlc3VsdDoKKyAg
ICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL3R5cGUtcmVx
dWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbi1yZXN1bHQ6CisgICAgICAgICogaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC90eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpz
b24tcmVzdWx0OgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL21hYy9leHBlY3Rl
ZC9kZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uLXJlc3VsdDoKKyAgICAgICAgKiBy
ZXBsYXkvRW5jb2RlZFZhbHVlLmNwcDoKKyAgICAgICAgKEpTQzo6RW5jb2RlZFZhbHVlOjphc09i
amVjdCk6CisgICAgICAgIChKU0M6OkVuY29kZWRWYWx1ZTo6YXNBcnJheSk6CisgICAgICAgIChK
U0M6OkVuY29kZWRWYWx1ZTo6Z2V0PEVuY29kZWRWYWx1ZT4pOgorICAgICAgICAqIHJlcGxheS9F
bmNvZGVkVmFsdWUuaDoKKwogMjAxNy0wNi0yMCAgS29uc3RhbnRpbiBUb2thcmV2ICA8YW5udWxl
bkB5YW5kZXgucnU+CiAKICAgICAgICAgUmVtb3ZlIGV4Y2Vzc2l2ZSBpbmNsdWRlIGRpcmVjdGl2
ZXMgZnJvbSBXVEYKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yVmFsdWVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yVmFsdWVzLmNwcAppbmRleCAxNGZiN2U3MGQyNGEyYWMyMmUyZjdjYmU4NmRlYTRlYjEx
NGQ3NmVmLi45ZTdiMWQ3NjBjMTdkZjFiYWQ5ZTg3YzMzNjUwMTU5YTFkMDUxYTExIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuY3Bw
CkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvclZhbHVlcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JWYWx1ZXMuaAppbmRleCA2Njg3YmJhZjY2ODI1ZGIxNjMxNjFmNjU4ODhiZjUxMzNmZDRlZDI2
Li5kZWI5MDZlZDVmZTUzNDA3MDc0NjYzNmU2MTllZGYxODY2MDFhNmYzIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmgKQEAgLTEsNiAr
MSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
QEAgLTM5LDEyICs0MCwyNyBAQAogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAotbmFtZXNwYWNlIEluc3BlY3RvciB7CiAK
K25hbWVzcGFjZSBJbnNwZWN0b3IgewogY2xhc3MgSW5zcGVjdG9yQXJyYXk7CiBjbGFzcyBJbnNw
ZWN0b3JBcnJheUJhc2U7CiBjbGFzcyBJbnNwZWN0b3JPYmplY3Q7CiBjbGFzcyBJbnNwZWN0b3JP
YmplY3RCYXNlOworY2xhc3MgSW5zcGVjdG9yVmFsdWU7Cit9CisKK25hbWVzcGFjZSBKU09OIHsK
K3R5cGVkZWYgSW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheSBBcnJheTsKK3R5cGVkZWYgSW5zcGVj
dG9yOjpJbnNwZWN0b3JPYmplY3QgT2JqZWN0OwordHlwZWRlZiBJbnNwZWN0b3I6Okluc3BlY3Rv
clZhbHVlIFZhbHVlOworCisKKy8vIE5vdCB0byBiZSB1c2VkIGV4Y2VwdCBmb3IgcHJvdG9jb2wg
b2JqZWN0IHN1YmNsYXNzZXMuCit0eXBlZGVmIEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXlCYXNl
IEFycmF5QmFzZTsKK3R5cGVkZWYgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3RCYXNlIE9iamVj
dEJhc2U7Cit9CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgewogCiBjbGFzcyBKU19FWFBPUlRfUFJJ
VkFURSBJbnNwZWN0b3JWYWx1ZSA6IHB1YmxpYyBSZWZDb3VudGVkPEluc3BlY3RvclZhbHVlPiB7
CiBwdWJsaWM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvY29kZWdlbi9jcHBfZ2VuZXJhdG9yLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vY3BwX2dlbmVyYXRvci5weQppbmRleCBjNDU5ZmNhYzNh
ZjcwNDkyZDZhMzBmMzdiZGRlZmYxYWRhNmY2N2ZjLi4wNGRkZmNiOGRhODkwNWNkNjYxNTdjMTNl
MGM0MTc1OWYxNWUxOTMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvY29kZWdlbi9jcHBfZ2VuZXJhdG9yLnB5CisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2NwcF9nZW5lcmF0b3IucHkKQEAgLTM4
LDkgKzM4LDkgQEAgX1BSSU1JVElWRV9UT19DUFBfTkFNRV9NQVAgPSB7CiAgICAgJ2ludGVnZXIn
OiAnaW50JywKICAgICAnbnVtYmVyJzogJ2RvdWJsZScsCiAgICAgJ3N0cmluZyc6ICdTdHJpbmcn
LAotICAgICdvYmplY3QnOiAnSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QnLAotICAgICdhcnJh
eSc6ICdJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5JywKLSAgICAnYW55JzogJ0luc3BlY3Rvcjo6
SW5zcGVjdG9yVmFsdWUnCisgICAgJ29iamVjdCc6ICdKU09OOjpPYmplY3QnLAorICAgICdhcnJh
eSc6ICdKU09OOjpBcnJheScsCisgICAgJ2FueSc6ICdKU09OOjpWYWx1ZScKIH0KIAogY2xhc3Mg
Q3BwR2VuZXJhdG9yKEdlbmVyYXRvcik6CkBAIC05OCw3ICs5OCw3IEBAIGNsYXNzIENwcEdlbmVy
YXRvcihHZW5lcmF0b3IpOgogICAgIEBzdGF0aWNtZXRob2QKICAgICBkZWYgY3BwX3Byb3RvY29s
X3R5cGVfZm9yX3R5cGUoX3R5cGUpOgogICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBPYmpl
Y3RUeXBlKSBhbmQgbGVuKF90eXBlLm1lbWJlcnMpID09IDA6Ci0gICAgICAgICAgICByZXR1cm4g
J0luc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0JworICAgICAgICAgICAgcmV0dXJuICdKU09OOjpP
YmplY3QnCiAgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEFycmF5VHlwZSk6CiAgICAgICAg
ICAgICBpZiBfdHlwZS5yYXdfbmFtZSgpIGlzIE5vbmU6ICAjIE90aGVyd2lzZSwgZmFsbCB0aHJv
dWdoIGFuZCB1c2UgdHlwZWRlZidkIG5hbWUuCiAgICAgICAgICAgICAgICAgcmV0dXJuICdJbnNw
ZWN0b3I6OlByb3RvY29sOjpBcnJheTwlcz4nICUgQ3BwR2VuZXJhdG9yLmNwcF9wcm90b2NvbF90
eXBlX2Zvcl90eXBlKF90eXBlLmVsZW1lbnRfdHlwZSkKQEAgLTEyNSwxMyArMTI1LDEzIEBAIGNs
YXNzIENwcEdlbmVyYXRvcihHZW5lcmF0b3IpOgogCiAgICAgICAgICMgVGhpcyBoYW5kbGVzIHRo
ZSAnYW55JyB0eXBlIGFuZCBvYmplY3RzIHdpdGggZGVmaW5lZCBwcm9wZXJ0aWVzLgogICAgICAg
ICBpZiBpc2luc3RhbmNlKF90eXBlLCBPYmplY3RUeXBlKSBvciBfdHlwZS5xdWFsaWZpZWRfbmFt
ZSgpIGlzICdvYmplY3QnOgotICAgICAgICAgICAgY3BwX25hbWUgPSAnSW5zcGVjdG9yOjpJbnNw
ZWN0b3JPYmplY3QnCisgICAgICAgICAgICBjcHBfbmFtZSA9ICdKU09OOjpPYmplY3QnCiAgICAg
ICAgICAgICBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6CiAgICAgICAgICAgICAgICAgcmV0dXJu
ICdjb25zdCAlcyonICUgY3BwX25hbWUKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAg
ICAgcmV0dXJuICdjb25zdCAlcyYnICUgY3BwX25hbWUKICAgICAgICAgaWYgaXNpbnN0YW5jZShf
dHlwZSwgQXJyYXlUeXBlKToKLSAgICAgICAgICAgIGNwcF9uYW1lID0gJ0luc3BlY3Rvcjo6SW5z
cGVjdG9yQXJyYXknCisgICAgICAgICAgICBjcHBfbmFtZSA9ICdKU09OOjpBcnJheScKICAgICAg
ICAgICAgIGlmIHBhcmFtZXRlci5pc19vcHRpb25hbDoKICAgICAgICAgICAgICAgICByZXR1cm4g
J2NvbnN0ICVzKicgJSBjcHBfbmFtZQogICAgICAgICAgICAgZWxzZToKQEAgLTE3Miw5ICsxNzIs
OSBAQCBjbGFzcyBDcHBHZW5lcmF0b3IoR2VuZXJhdG9yKToKICAgICAgICAgaWYgaXNpbnN0YW5j
ZShfdHlwZSwgUHJpbWl0aXZlVHlwZSk6CiAgICAgICAgICAgICBjcHBfbmFtZSA9IENwcEdlbmVy
YXRvci5jcHBfbmFtZV9mb3JfcHJpbWl0aXZlX3R5cGUoX3R5cGUpCiAgICAgICAgICAgICBpZiBf
dHlwZS5xdWFsaWZpZWRfbmFtZSgpIGluIFsnb2JqZWN0J106Ci0gICAgICAgICAgICAgICAgcmV0
dXJuICdSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+JworICAgICAgICAgICAgICAg
IHJldHVybiAnUmVmUHRyPEpTT046Ok9iamVjdD4nCiAgICAgICAgICAgICBlbGlmIF90eXBlLnF1
YWxpZmllZF9uYW1lKCkgaW4gWydhbnknXToKLSAgICAgICAgICAgICAgICByZXR1cm4gJ1JlZlB0
cjxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPicKKyAgICAgICAgICAgICAgICByZXR1cm4gJ1Jl
ZlB0cjxKU09OOjpWYWx1ZT4nCiAgICAgICAgICAgICBlbGlmIGlzX29wdGlvbmFsOgogICAgICAg
ICAgICAgICAgIHJldHVybiAnY29uc3QgJXMqIGNvbnN0JyAlIGNwcF9uYW1lCiAgICAgICAgICAg
ICBlbGlmIF90eXBlLnF1YWxpZmllZF9uYW1lKCkgaW4gWydzdHJpbmcnXToKQEAgLTI1NCw5ICsy
NTQsOSBAQCBjbGFzcyBDcHBHZW5lcmF0b3IoR2VuZXJhdG9yKToKICAgICAgICAgICAgIF90eXBl
ID0gX3R5cGUucHJpbWl0aXZlX3R5cGUgICMgRmFsbCB0aHJvdWdoLgogCiAgICAgICAgIGlmIGlz
aW5zdGFuY2UoX3R5cGUsIE9iamVjdFR5cGUpOgotICAgICAgICAgICAgcmV0dXJuICJSZWZQdHI8
SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IgorICAgICAgICAgICAgcmV0dXJuICJSZWZQdHI8
SlNPTjo6T2JqZWN0PiIKICAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgQXJyYXlUeXBlKToK
LSAgICAgICAgICAgIHJldHVybiAiUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXk+Igor
ICAgICAgICAgICAgcmV0dXJuICJSZWZQdHI8SlNPTjo6QXJyYXk+IgogICAgICAgICBpZiBpc2lu
c3RhbmNlKF90eXBlLCBQcmltaXRpdmVUeXBlKToKICAgICAgICAgICAgIGNwcF9uYW1lID0gQ3Bw
R2VuZXJhdG9yLmNwcF9uYW1lX2Zvcl9wcmltaXRpdmVfdHlwZShfdHlwZSkKICAgICAgICAgICAg
IGlmIF90eXBlLnF1YWxpZmllZF9uYW1lKCkgaW4gWydhbnknLCAnb2JqZWN0J106CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5l
cmF0ZV9jcHBfcHJvdG9jb2xfdHlwZXNfaGVhZGVyLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX3Byb3RvY29sX3R5cGVzX2hl
YWRlci5weQppbmRleCA0ZDY1MzMxZmIzZDc2Nzk1ZjFjYTY1NTAzNmVhNTU2Mzk0N2JjODIyLi5i
OTUwNTY1ZDExNDVkZjU0ZmM2ZDY0NjY4MjFlYmVlNTNjN2M2MDJhIDEwMDc1NQotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBf
cHJvdG9jb2xfdHlwZXNfaGVhZGVyLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9wcm90b2NvbF90eXBlc19oZWFkZXIu
cHkKQEAgLTIwNSw3ICsyMDUsNyBAQCBjbGFzcyBDcHBQcm90b2NvbFR5cGVzSGVhZGVyR2VuZXJh
dG9yKENwcEdlbmVyYXRvcik6CiAgICAgICAgIGxpbmVzID0gW10KICAgICAgICAgaWYgbGVuKHR5
cGVfZGVjbGFyYXRpb24uZGVzY3JpcHRpb24pID4gMDoKICAgICAgICAgICAgIGxpbmVzLmFwcGVu
ZCgnLyogJXMgKi8nICUgdHlwZV9kZWNsYXJhdGlvbi5kZXNjcmlwdGlvbikKLSAgICAgICAgYmFz
ZV9jbGFzcyA9ICdJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCcKKyAgICAgICAgYmFzZV9jbGFz
cyA9ICdKU09OOjpPYmplY3QnCiAgICAgICAgIGlmIG5vdCBHZW5lcmF0b3IudHlwZV9oYXNfb3Bl
bl9maWVsZHModHlwZV9kZWNsYXJhdGlvbi50eXBlKToKICAgICAgICAgICAgIGJhc2VfY2xhc3Mg
PSBiYXNlX2NsYXNzICsgJ0Jhc2UnCiAgICAgICAgIGxpbmVzLmFwcGVuZCgnY2xhc3MgJXMgOiBw
dWJsaWMgJXMgeycgJSAob2JqZWN0X25hbWUsIGJhc2VfY2xhc3MpKQpAQCAtMzYxLDkgKzM2MSw5
IEBAIGNsYXNzIENwcFByb3RvY29sVHlwZXNIZWFkZXJHZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToK
ICAgICAgICAgZm9yIGFyZ3VtZW50IGluIHR5cGVfYXJndW1lbnRzOgogICAgICAgICAgICAgbGlu
ZXMuYXBwZW5kKCd0ZW1wbGF0ZTw+ICVzIEJpbmRpbmdUcmFpdHM8JXM+IHsnICUgKCcgJy5qb2lu
KHN0cnVjdF9rZXl3b3JkcyksIGFyZ3VtZW50WzBdKSkKICAgICAgICAgICAgIGlmIGFyZ3VtZW50
WzFdOgotICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnc3RhdGljIFJlZlB0cjwlcz4gcnVu
dGltZUNhc3QoUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+JiYgdmFsdWUpOycgJSBh
cmd1bWVudFswXSkKKyAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ3N0YXRpYyBSZWZQdHI8
JXM+IHJ1bnRpbWVDYXN0KFJlZlB0cjxKU09OOjpWYWx1ZT4mJiB2YWx1ZSk7JyAlIGFyZ3VtZW50
WzBdKQogICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcjaWYgIUFTU0VSVF9ESVNBQkxFRCcpCi0g
ICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyVzIGFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKElu
c3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUqKTsnICUgJyAnLmpvaW4oZnVuY3Rpb25fa2V5d29yZHMp
KQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCclcyBhc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlw
ZShKU09OOjpWYWx1ZSopOycgJSAnICcuam9pbihmdW5jdGlvbl9rZXl3b3JkcykpCiAgICAgICAg
ICAgICBsaW5lcy5hcHBlbmQoJyNlbmRpZiAvLyAhQVNTRVJUX0RJU0FCTEVEJykKICAgICAgICAg
ICAgIGxpbmVzLmFwcGVuZCgnfTsnKQogICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVn
ZW4vZ2VuZXJhdGVfY3BwX3Byb3RvY29sX3R5cGVzX2ltcGxlbWVudGF0aW9uLnB5IGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX3By
b3RvY29sX3R5cGVzX2ltcGxlbWVudGF0aW9uLnB5CmluZGV4IGM3MWMzOWFhNzFmODQ3MmVkMTIy
ZWIxNDdlNmI2ZDhhNGUzNDQ2MWIuLmRkMWQwMWY0ZDI1ZmE3MTYxNTliMWM0YjhhMzFjYTBlZmY1
NDUwYTggMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9wcm90b2NvbF90eXBlc19pbXBsZW1lbnRhdGlvbi5weQor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5l
cmF0ZV9jcHBfcHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50YXRpb24ucHkKQEAgLTE5OCw3ICsxOTgs
NyBAQCBjbGFzcyBDcHBQcm90b2NvbFR5cGVzSW1wbGVtZW50YXRpb25HZW5lcmF0b3IoQ3BwR2Vu
ZXJhdG9yKToKICAgICAgICAgbGluZXMgPSBbXQogCiAgICAgICAgIGxpbmVzLmFwcGVuZCgnI2lm
ICFBU1NFUlRfRElTQUJMRUQnKQotICAgICAgICBsaW5lcy5hcHBlbmQoJ3ZvaWQgQmluZGluZ1Ry
YWl0czwlcz46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKEluc3BlY3Rvcjo6SW5zcGVjdG9y
VmFsdWUqIHZhbHVlKScgJSAoQ3BwR2VuZXJhdG9yLmNwcF9wcm90b2NvbF90eXBlX2Zvcl90eXBl
KG9iamVjdF9kZWNsYXJhdGlvbi50eXBlKSkpCisgICAgICAgIGxpbmVzLmFwcGVuZCgndm9pZCBC
aW5kaW5nVHJhaXRzPCVzPjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoSlNPTjo6VmFsdWUq
IHZhbHVlKScgJSAoQ3BwR2VuZXJhdG9yLmNwcF9wcm90b2NvbF90eXBlX2Zvcl90eXBlKG9iamVj
dF9kZWNsYXJhdGlvbi50eXBlKSkpCiAgICAgICAgIGxpbmVzLmFwcGVuZCgiIiJ7CiAgICAgQVNT
RVJUX0FSRyh2YWx1ZSwgdmFsdWUpOwogICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG9iamVj
dDsKQEAgLTI0Niw3ICsyNDYsNyBAQCBjbGFzcyBDcHBQcm90b2NvbFR5cGVzSW1wbGVtZW50YXRp
b25HZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICBkZWYgX2dlbmVyYXRlX2Fzc2VydGlvbl9m
b3JfZW51bShzZWxmLCBlbnVtX21lbWJlciwgb2JqZWN0X2RlY2xhcmF0aW9uKToKICAgICAgICAg
bGluZXMgPSBbXQogICAgICAgICBsaW5lcy5hcHBlbmQoJyNpZiAhQVNTRVJUX0RJU0FCTEVEJykK
LSAgICAgICAgbGluZXMuYXBwZW5kKCd2b2lkICVzKEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUq
IHZhbHVlKScgJSBDcHBHZW5lcmF0b3IuY3BwX2Fzc2VydGlvbl9tZXRob2RfZm9yX3R5cGVfbWVt
YmVyKGVudW1fbWVtYmVyLCBvYmplY3RfZGVjbGFyYXRpb24pKQorICAgICAgICBsaW5lcy5hcHBl
bmQoJ3ZvaWQgJXMoSlNPTjo6VmFsdWUqIHZhbHVlKScgJSBDcHBHZW5lcmF0b3IuY3BwX2Fzc2Vy
dGlvbl9tZXRob2RfZm9yX3R5cGVfbWVtYmVyKGVudW1fbWVtYmVyLCBvYmplY3RfZGVjbGFyYXRp
b24pKQogICAgICAgICBsaW5lcy5hcHBlbmQoJ3snKQogICAgICAgICBsaW5lcy5hcHBlbmQoJyAg
ICBBU1NFUlRfQVJHKHZhbHVlLCB2YWx1ZSk7JykKICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAg
U3RyaW5nIHJlc3VsdDsnKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2FsbC9leHBlY3RlZC9kZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0
Zm9ybS5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9hbGwvZXhwZWN0ZWQvZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbi1y
ZXN1bHQKaW5kZXggMTcwZDU3YzBhYmY1MWQyMWFmMmM4Y2ZiOGZlZTMxMThiOGQ0Y2IzMy4uMzdk
NGJhN2YwYWI1ZTZmN2I5ODk2ZTZkZmM2YjA5ZGY4NWNkZGNhYSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2FsbC9leHBlY3RlZC9kZWZp
bml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uLXJlc3VsdAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvYWxsL2V4cGVjdGVkL2RlZmluaXRpb25z
LXdpdGgtbWFjLXBsYXRmb3JtLmpzb24tcmVzdWx0CkBAIC00MTksNyArNDE5LDcgQEAgY2xhc3Mg
TmV0d29ya0Vycm9yOwogCiAKIG5hbWVzcGFjZSBOZXR3b3JrIHsKLWNsYXNzIE5ldHdvcmtFcnJv
ciA6IHB1YmxpYyBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdEJhc2UgeworY2xhc3MgTmV0d29y
a0Vycm9yIDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgewogcHVibGljOgogICAgIGVudW0gewog
ICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9jb21tYW5kcy13aXRo
LWFzeW5jLWF0dHJpYnV0ZS5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2NvbW1hbmRzLXdpdGgtYXN5bmMt
YXR0cmlidXRlLmpzb24tcmVzdWx0CmluZGV4IGVmOWEyNDg4ZGI1YmU5YzhiYmFmY2Y0MjUzY2Nj
YzczOTE4ZGJmZDYuLjRiYTJmZWU3ZDJkZjJlNmE0ZTNjNjYwN2E3Mjc2MmQzMGNjYmY4NWUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9n
ZW5lcmljL2V4cGVjdGVkL2NvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24tcmVzdWx0
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5l
cmljL2V4cGVjdGVkL2NvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24tcmVzdWx0CkBA
IC0xNTcsMTggKzE1NywxOCBAQCBwdWJsaWM6CiAgICAgICAgIFllbGxvdyA9IDUsCiAgICAgICAg
IEJsYWNrID0gNiwKICAgICB9OyAvLyBlbnVtIGNsYXNzIFByaW50Q29sb3IKLSAgICB2aXJ0dWFs
IHZvaWQgZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhFcnJvclN0cmluZyYsIGlu
dCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5LCBSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPj4mIG9wdF9vdXRfY29sdW1uTmFtZXMsIEluc3BlY3Rv
cjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxTdHJpbmc+KiBvcHRfb3V0X25vdGVzLCBJbnNwZWN0b3I6
OlByb3RvY29sOjpPcHRPdXRwdXQ8ZG91YmxlPiogb3B0X291dF90aW1lc3RhbXAsIEluc3BlY3Rv
cjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4qIG9wdF9v
dXRfdmFsdWVzLCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8SW5zcGVjdG9yOjpJbnNw
ZWN0b3JWYWx1ZT4qIG9wdF9vdXRfcGF5bG9hZCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0
cHV0PGludD4qIG9wdF9vdXRfZGF0YWJhc2VJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRhdGFiYXNlOjpFcnJvcj4mIG9wdF9vdXRfc3FsRXJyb3IsIEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzKiBvcHRfb3V0X3NjcmVlbkNvbG9yLCBSZWZQdHI8SW5z
cGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4mIG9wdF9vdXRfYWx0ZXJuYXRl
Q29sb3JzLCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UHJpbnRDb2xvciogb3B0
X291dF9wcmludENvbG9yKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVTUUxTeW5jT3B0
aW9uYWxSZXR1cm5WYWx1ZXMoRXJyb3JTdHJpbmcmLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3Qg
U3RyaW5nJiBpbl9xdWVyeSwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmlu
Zz4+JiBvcHRfb3V0X2NvbHVtbk5hbWVzLCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8
U3RyaW5nPiogb3B0X291dF9ub3RlcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PGRv
dWJsZT4qIG9wdF9vdXRfdGltZXN0YW1wLCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8
SlNPTjo6T2JqZWN0Piogb3B0X291dF92YWx1ZXMsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91
dHB1dDxKU09OOjpWYWx1ZT4qIG9wdF9vdXRfcGF5bG9hZCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6
T3B0T3V0cHV0PGludD4qIG9wdF9vdXRfZGF0YWJhc2VJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4mIG9wdF9vdXRfc3FsRXJyb3IsIEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzKiBvcHRfb3V0X3NjcmVlbkNvbG9yLCBSZWZQ
dHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4mIG9wdF9vdXRfYWx0
ZXJuYXRlQ29sb3JzLCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UHJpbnRDb2xv
ciogb3B0X291dF9wcmludENvbG9yKSA9IDA7CiAgICAgY2xhc3MgRXhlY3V0ZVNRTEFzeW5jT3B0
aW9uYWxSZXR1cm5WYWx1ZXNDYWxsYmFjayA6IHB1YmxpYyBCYWNrZW5kRGlzcGF0Y2hlcjo6Q2Fs
bGJhY2tCYXNlIHsKICAgICBwdWJsaWM6CiAgICAgICAgIEV4ZWN1dGVTUUxBc3luY09wdGlvbmFs
UmV0dXJuVmFsdWVzQ2FsbGJhY2soUmVmPEJhY2tlbmREaXNwYXRjaGVyPiYmLCBpbnQgaWQpOwot
ICAgICAgICB2b2lkIHNlbmRTdWNjZXNzKFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJh
eTxTdHJpbmc+PiYmIGNvbHVtbk5hbWVzLCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8
U3RyaW5nPiogbm90ZXMsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxkb3VibGU+KiB0
aW1lc3RhbXAsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxJbnNwZWN0b3I6Okluc3Bl
Y3Rvck9iamVjdD4qIHZhbHVlcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yVmFsdWU+KiBwYXlsb2FkLCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRP
dXRwdXQ8aW50PiogZGF0YWJhc2VJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFi
YXNlOjpFcnJvcj4mJiBzcWxFcnJvciwgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PFN0
cmluZz4qIHNjcmVlbkNvbG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6
OkNvbG9yTGlzdD4mJiBhbHRlcm5hdGVDb2xvcnMsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91
dHB1dDxTdHJpbmc+KiBwcmludENvbG9yKTsKKyAgICAgICAgdm9pZCBzZW5kU3VjY2VzcyhSZWZQ
dHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPj4mJiBjb2x1bW5OYW1lcywgSW5z
cGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PFN0cmluZz4qIG5vdGVzLCBJbnNwZWN0b3I6OlBy
b3RvY29sOjpPcHRPdXRwdXQ8ZG91YmxlPiogdGltZXN0YW1wLCBJbnNwZWN0b3I6OlByb3RvY29s
OjpPcHRPdXRwdXQ8SlNPTjo6T2JqZWN0PiogdmFsdWVzLCBJbnNwZWN0b3I6OlByb3RvY29sOjpP
cHRPdXRwdXQ8SlNPTjo6VmFsdWU+KiBwYXlsb2FkLCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRP
dXRwdXQ8aW50PiogZGF0YWJhc2VJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFi
YXNlOjpFcnJvcj4mJiBzcWxFcnJvciwgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PFN0
cmluZz4qIHNjcmVlbkNvbG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6
OkNvbG9yTGlzdD4mJiBhbHRlcm5hdGVDb2xvcnMsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91
dHB1dDxTdHJpbmc+KiBwcmludENvbG9yKTsKICAgICB9OwogICAgIHZpcnR1YWwgdm9pZCBleGVj
dXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhFcnJvclN0cmluZyYsIGludCBpbl9kYXRh
YmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5LCBSZWY8RXhlY3V0ZVNRTEFzeW5jT3B0aW9u
YWxSZXR1cm5WYWx1ZXNDYWxsYmFjaz4mJiBjYWxsYmFjaykgPSAwOwotICAgIHZpcnR1YWwgdm9p
ZCBleGVjdXRlU1FMU3luYyhFcnJvclN0cmluZyYsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBT
dHJpbmcmIGluX3F1ZXJ5LCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5n
Pj4mIG91dF9jb2x1bW5OYW1lcywgU3RyaW5nKiBvdXRfbm90ZXMsIGRvdWJsZSogb3V0X3RpbWVz
dGFtcCwgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QqIG91dF92YWx1ZXMsIEluc3BlY3Rvcjo6
SW5zcGVjdG9yVmFsdWUqIG91dF9wYXlsb2FkLCBpbnQqIG91dF9kYXRhYmFzZUlkLCBSZWZQdHI8
SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiYgb3V0X3NxbEVycm9yLCBSZWZQ
dHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4mIG91dF9hbHRlcm5h
dGVDb2xvcnMsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzKiBv
dXRfc2NyZWVuQ29sb3IsIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpQcmludENv
bG9yKiBvdXRfcHJpbnRDb2xvcikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlU1FMU3lu
YyhFcnJvclN0cmluZyYsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5
LCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPj4mIG91dF9jb2x1bW5O
YW1lcywgU3RyaW5nKiBvdXRfbm90ZXMsIGRvdWJsZSogb3V0X3RpbWVzdGFtcCwgSlNPTjo6T2Jq
ZWN0KiBvdXRfdmFsdWVzLCBKU09OOjpWYWx1ZSogb3V0X3BheWxvYWQsIGludCogb3V0X2RhdGFi
YXNlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+JiBvdXRf
c3FsRXJyb3IsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0
PiYgb3V0X2FsdGVybmF0ZUNvbG9ycywgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlBy
aW1hcnlDb2xvcnMqIG91dF9zY3JlZW5Db2xvciwgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhh
bmRsZXI6OlByaW50Q29sb3IqIG91dF9wcmludENvbG9yKSA9IDA7CiAgICAgY2xhc3MgRXhlY3V0
ZVNRTEFzeW5jQ2FsbGJhY2sgOiBwdWJsaWMgQmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFz
ZSB7CiAgICAgcHVibGljOgogICAgICAgICBFeGVjdXRlU1FMQXN5bmNDYWxsYmFjayhSZWY8QmFj
a2VuZERpc3BhdGNoZXI+JiYsIGludCBpZCk7Ci0gICAgICAgIHZvaWQgc2VuZFN1Y2Nlc3MoUmVm
UHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+JiYgY29sdW1uTmFtZXMsIGNv
bnN0IFN0cmluZyYgbm90ZXMsIGRvdWJsZSB0aW1lc3RhbXAsIEluc3BlY3Rvcjo6SW5zcGVjdG9y
T2JqZWN0IHZhbHVlcywgSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSBwYXlsb2FkLCBpbnQgZGF0
YWJhc2VJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4mJiBz
cWxFcnJvciwgY29uc3QgU3RyaW5nJiBzY3JlZW5Db2xvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+JiYgYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJp
bmcmIHByaW50Q29sb3IpOworICAgICAgICB2b2lkIHNlbmRTdWNjZXNzKFJlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+PiYmIGNvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcm
IG5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBKU09OOjpPYmplY3QgdmFsdWVzLCBKU09OOjpWYWx1
ZSBwYXlsb2FkLCBpbnQgZGF0YWJhc2VJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRh
dGFiYXNlOjpFcnJvcj4mJiBzcWxFcnJvciwgY29uc3QgU3RyaW5nJiBzY3JlZW5Db2xvciwgUmVm
UHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+JiYgYWx0ZXJuYXRl
Q29sb3JzLCBjb25zdCBTdHJpbmcmIHByaW50Q29sb3IpOwogICAgIH07CiAgICAgdmlydHVhbCB2
b2lkIGV4ZWN1dGVTUUxBc3luYyhFcnJvclN0cmluZyYsIGludCBpbl9kYXRhYmFzZUlkLCBjb25z
dCBTdHJpbmcmIGluX3F1ZXJ5LCBSZWY8RXhlY3V0ZVNRTEFzeW5jQ2FsbGJhY2s+JiYgY2FsbGJh
Y2spID0gMDsKIHByb3RlY3RlZDoKQEAgLTI5Nyw4ICsyOTcsOCBAQCB2b2lkIERhdGFiYXNlQmFj
a2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyBy
ZXF1ZXN0SQogICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+PiBv
dXRfY29sdW1uTmFtZXM7CiAgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PFN0cmlu
Zz4gb3V0X25vdGVzOwogICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxkb3VibGU+
IG91dF90aW1lc3RhbXA7Ci0gICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBvdXRfdmFsdWVzOwotICAgIEluc3BlY3Rvcjo6UHJvdG9j
b2w6Ok9wdE91dHB1dDxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPiBvdXRfcGF5bG9hZDsKKyAg
ICBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8SlNPTjo6T2JqZWN0PiBvdXRfdmFsdWVz
OworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxKU09OOjpWYWx1ZT4gb3V0X3Bh
eWxvYWQ7CiAgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRhdGFiYXNlOjpEYXRhYmFzZUlkPiBvdXRfZGF0YWJhc2VJZDsKICAgICBSZWZQdHI8
SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiBvdXRfc3FsRXJyb3I7CiAgICAg
SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMgb3V0X3NjcmVlbkNv
bG9yOwpAQCAtMzM2LDcgKzMzNiw3IEBAIHZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6
ZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nIHJlcXVlc3RJCiAKIERhdGFi
YXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVy
blZhbHVlc0NhbGxiYWNrOjpFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc0NhbGxi
YWNrKFJlZjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBiYWNrZW5kRGlzcGF0Y2hlciwgaW50IGlkKSA6
IEJhY2tlbmREaXNwYXRjaGVyOjpDYWxsYmFja0Jhc2UoV1RGTW92ZShiYWNrZW5kRGlzcGF0Y2hl
ciksIGlkKSB7IH0KIAotdm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhl
Y3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNDYWxsYmFjazo6c2VuZFN1Y2Nlc3MoUmVm
UHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+JiYgY29sdW1uTmFtZXMsIElu
c3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxTdHJpbmc+KiBub3RlcywgSW5zcGVjdG9yOjpQ
cm90b2NvbDo6T3B0T3V0cHV0PGRvdWJsZT4qIHRpbWVzdGFtcCwgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6T3B0T3V0cHV0PEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiogdmFsdWVzLCBJbnNwZWN0
b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4qIHBheWxv
YWQsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxpbnQ+KiBkYXRhYmFzZUlkLCBSZWZQ
dHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiYmIHNxbEVycm9yLCBJbnNw
ZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8U3RyaW5nPiogc2NyZWVuQ29sb3IsIFJlZlB0cjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiYmIGFsdGVybmF0ZUNvbG9y
cywgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PFN0cmluZz4qIHByaW50Q29sb3IpCit2
b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNPcHRp
b25hbFJldHVyblZhbHVlc0NhbGxiYWNrOjpzZW5kU3VjY2VzcyhSZWZQdHI8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6QXJyYXk8U3RyaW5nPj4mJiBjb2x1bW5OYW1lcywgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6T3B0T3V0cHV0PFN0cmluZz4qIG5vdGVzLCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRw
dXQ8ZG91YmxlPiogdGltZXN0YW1wLCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8SlNP
Tjo6T2JqZWN0PiogdmFsdWVzLCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8SlNPTjo6
VmFsdWU+KiBwYXlsb2FkLCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8aW50PiogZGF0
YWJhc2VJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4mJiBz
cWxFcnJvciwgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PFN0cmluZz4qIHNjcmVlbkNv
bG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4mJiBh
bHRlcm5hdGVDb2xvcnMsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxTdHJpbmc+KiBw
cmludENvbG9yKQogewogICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IGpzb25NZXNzYWdlID0gSW5z
cGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICBpZiAoY29sdW1uTmFtZXMpCkBAIC00MTEsOCAr
NDExLDggQEAgdm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlU1FMU3luYyhs
b25nIHJlcXVlc3RJZCwgUmVmUHRyPEluc3BlY3Rvck8KICAgICBSZWZQdHI8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6QXJyYXk8U3RyaW5nPj4gb3V0X2NvbHVtbk5hbWVzOwogICAgIFN0cmluZyBvdXRf
bm90ZXM7CiAgICAgZG91YmxlIG91dF90aW1lc3RhbXA7Ci0gICAgSW5zcGVjdG9yOjpJbnNwZWN0
b3JPYmplY3Qgb3V0X3ZhbHVlczsKLSAgICBJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlIG91dF9w
YXlsb2FkOworICAgIEpTT046Ok9iamVjdCBvdXRfdmFsdWVzOworICAgIEpTT046OlZhbHVlIG91
dF9wYXlsb2FkOwogICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpEYXRhYmFzZUlk
IG91dF9kYXRhYmFzZUlkOwogICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFz
ZTo6RXJyb3I+IG91dF9zcWxFcnJvcjsKICAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6
RGF0YWJhc2U6OkNvbG9yTGlzdD4gb3V0X2FsdGVybmF0ZUNvbG9yczsKQEAgLTQ0MCw3ICs0NDAs
NyBAQCB2b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxTeW5jKGxvbmcg
cmVxdWVzdElkLCBSZWZQdHI8SW5zcGVjdG9yTwogCiBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVy
SGFuZGxlcjo6RXhlY3V0ZVNRTEFzeW5jQ2FsbGJhY2s6OkV4ZWN1dGVTUUxBc3luY0NhbGxiYWNr
KFJlZjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBiYWNrZW5kRGlzcGF0Y2hlciwgaW50IGlkKSA6IEJh
Y2tlbmREaXNwYXRjaGVyOjpDYWxsYmFja0Jhc2UoV1RGTW92ZShiYWNrZW5kRGlzcGF0Y2hlciks
IGlkKSB7IH0KIAotdm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhlY3V0
ZVNRTEFzeW5jQ2FsbGJhY2s6OnNlbmRTdWNjZXNzKFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29s
OjpBcnJheTxTdHJpbmc+PiYmIGNvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIG5vdGVzLCBkb3Vi
bGUgdGltZXN0YW1wLCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCB2YWx1ZXMsIEluc3BlY3Rv
cjo6SW5zcGVjdG9yVmFsdWUgcGF5bG9hZCwgaW50IGRhdGFiYXNlSWQsIFJlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+JiYgc3FsRXJyb3IsIGNvbnN0IFN0cmluZyYg
c2NyZWVuQ29sb3IsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JM
aXN0PiYmIGFsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nJiBwcmludENvbG9yKQordm9pZCBE
YXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhlY3V0ZVNRTEFzeW5jQ2FsbGJhY2s6
OnNlbmRTdWNjZXNzKFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+PiYm
IGNvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIG5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBKU09O
OjpPYmplY3QgdmFsdWVzLCBKU09OOjpWYWx1ZSBwYXlsb2FkLCBpbnQgZGF0YWJhc2VJZCwgUmVm
UHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4mJiBzcWxFcnJvciwgY29u
c3QgU3RyaW5nJiBzY3JlZW5Db2xvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFi
YXNlOjpDb2xvckxpc3Q+JiYgYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcmIHByaW50Q29s
b3IpCiB7CiAgICAgUmVmPEluc3BlY3Rvck9iamVjdD4ganNvbk1lc3NhZ2UgPSBJbnNwZWN0b3JP
YmplY3Q6OmNyZWF0ZSgpOwogICAgIGpzb25NZXNzYWdlLT5zZXRBcnJheShBU0NJSUxpdGVyYWwo
ImNvbHVtbk5hbWVzIiksIGNvbHVtbk5hbWVzKTsKQEAgLTY1Miw3ICs2NTIsNyBAQCBlbnVtIGNs
YXNzIFByaW1hcnlDb2xvcnMgewogICAgIEJsdWUgPSAyLAogfTsgLy8gZW51bSBjbGFzcyBQcmlt
YXJ5Q29sb3JzCiAvKiBEYXRhYmFzZSBlcnJvci4gKi8KLWNsYXNzIEVycm9yIDogcHVibGljIElu
c3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0QmFzZSB7CitjbGFzcyBFcnJvciA6IHB1YmxpYyBKU09O
OjpPYmplY3RCYXNlIHsKIHB1YmxpYzoKICAgICBlbnVtIHsKICAgICAgICAgTm9GaWVsZHNTZXQg
PSAwLApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVy
bi1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvY29tbWFuZHMtd2l0aC1vcHRpb25hbC1j
YWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0CmluZGV4IDRjOWU0MjYxODVhMmRhMjU2
MGM1NTNlMWYzNWUyMDQzMjNmOTY2OTQuLjRlMmQ0YmFlODczNWQwMzcyZjk2Yzc4NTJmYjBkOWNm
MzgwMTc1ZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2NvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1y
ZXR1cm4tcGFyYW1ldGVycy5qc29uLXJlc3VsdAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9jb21tYW5kcy13aXRoLW9w
dGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbi1yZXN1bHQKQEAgLTg5LDggKzg5LDgg
QEAgcHJpdmF0ZToKIGNsYXNzIEFsdGVybmF0ZURhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIgOiBw
dWJsaWMgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewogcHVibGljOgogICAgIHZpcnR1YWwg
fkFsdGVybmF0ZURhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIoKSB7IH0KLSAgICB2aXJ0dWFsIHZv
aWQgZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVj
dG9yOjpJbnNwZWN0b3JBcnJheSogaW5fY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyogY29uc3Qg
aW5fbm90ZXMsIGNvbnN0IGRvdWJsZSogY29uc3QgaW5fdGltZXN0YW1wLCBjb25zdCBJbnNwZWN0
b3I6Okluc3BlY3Rvck9iamVjdCogaW5fdmFsdWVzLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3Rv
clZhbHVlKiBjb25zdCBpbl9wYXlsb2FkLCBjb25zdCBpbnQqIGNvbnN0IGluX2RhdGFiYXNlSWQs
IGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0KiBpbl9zcWxFcnJvciwgY29uc3QgU3Ry
aW5nKiBjb25zdCBpbl9zY3JlZW5Db2xvciwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJh
eSogaW5fYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcqIGNvbnN0IGluX3ByaW50Q29sb3Ip
ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcg
Y2FsbElkLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5JiBpbl9jb2x1bW5OYW1lcywg
Y29uc3QgU3RyaW5nJiBpbl9ub3RlcywgZG91YmxlIGluX3RpbWVzdGFtcCwgY29uc3QgSW5zcGVj
dG9yOjpJbnNwZWN0b3JPYmplY3QmIGluX3ZhbHVlcywgSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1
ZSBpbl9wYXlsb2FkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0
b3JPYmplY3QmIGluX3NxbEVycm9yLCBjb25zdCBTdHJpbmcmIGluX3NjcmVlbkNvbG9yLCBjb25z
dCBJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5JiBpbl9hbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0
cmluZyYgaW5fcHJpbnRDb2xvcikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlQWxsT3B0
aW9uYWxQYXJhbWV0ZXJzKGxvbmcgY2FsbElkLCBjb25zdCBKU09OOjpBcnJheSogaW5fY29sdW1u
TmFtZXMsIGNvbnN0IFN0cmluZyogY29uc3QgaW5fbm90ZXMsIGNvbnN0IGRvdWJsZSogY29uc3Qg
aW5fdGltZXN0YW1wLCBjb25zdCBKU09OOjpPYmplY3QqIGluX3ZhbHVlcywgY29uc3QgSlNPTjo6
VmFsdWUqIGNvbnN0IGluX3BheWxvYWQsIGNvbnN0IGludCogY29uc3QgaW5fZGF0YWJhc2VJZCwg
Y29uc3QgSlNPTjo6T2JqZWN0KiBpbl9zcWxFcnJvciwgY29uc3QgU3RyaW5nKiBjb25zdCBpbl9z
Y3JlZW5Db2xvciwgY29uc3QgSlNPTjo6QXJyYXkqIGluX2FsdGVybmF0ZUNvbG9ycywgY29uc3Qg
U3RyaW5nKiBjb25zdCBpbl9wcmludENvbG9yKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGV4ZWN1
dGVOb09wdGlvbmFsUGFyYW1ldGVycyhsb25nIGNhbGxJZCwgY29uc3QgSlNPTjo6QXJyYXkmIGlu
X2NvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIGluX25vdGVzLCBkb3VibGUgaW5fdGltZXN0YW1w
LCBjb25zdCBKU09OOjpPYmplY3QmIGluX3ZhbHVlcywgSlNPTjo6VmFsdWUgaW5fcGF5bG9hZCwg
aW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IEpTT046Ok9iamVjdCYgaW5fc3FsRXJyb3IsIGNvbnN0
IFN0cmluZyYgaW5fc2NyZWVuQ29sb3IsIGNvbnN0IEpTT046OkFycmF5JiBpbl9hbHRlcm5hdGVD
b2xvcnMsIGNvbnN0IFN0cmluZyYgaW5fcHJpbnRDb2xvcikgPSAwOwogfTsKIAogfSAvLyBuYW1l
c3BhY2UgSW5zcGVjdG9yCkBAIC0xNTIsOCArMTUyLDggQEAgcHVibGljOgogICAgICAgICBZZWxs
b3cgPSA1LAogICAgICAgICBCbGFjayA9IDYsCiAgICAgfTsgLy8gZW51bSBjbGFzcyBQcmludENv
bG9yCi0gICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMoRXJyb3JT
dHJpbmcmLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5KiBvcHRfaW5fY29sdW1uTmFt
ZXMsIGNvbnN0IFN0cmluZyogY29uc3Qgb3B0X2luX25vdGVzLCBjb25zdCBkb3VibGUqIGNvbnN0
IG9wdF9pbl90aW1lc3RhbXAsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0KiBvcHRf
aW5fdmFsdWVzLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlKiBjb25zdCBvcHRfaW5f
cGF5bG9hZCwgY29uc3QgaW50KiBjb25zdCBvcHRfaW5fZGF0YWJhc2VJZCwgY29uc3QgSW5zcGVj
dG9yOjpJbnNwZWN0b3JPYmplY3QqIG9wdF9pbl9zcWxFcnJvciwgY29uc3QgU3RyaW5nKiBjb25z
dCBvcHRfaW5fc2NyZWVuQ29sb3IsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXkqIG9w
dF9pbl9hbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyogY29uc3Qgb3B0X2luX3ByaW50Q29s
b3IsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+PiYgb3B0X291dF9j
b2x1bW5OYW1lcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PFN0cmluZz4qIG9wdF9v
dXRfbm90ZXMsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxkb3VibGU+KiBvcHRfb3V0
X3RpbWVzdGFtcCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PEluc3BlY3Rvcjo6SW5z
cGVjdG9yT2JqZWN0Piogb3B0X291dF92YWx1ZXMsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91
dHB1dDxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPiogb3B0X291dF9wYXlsb2FkLCBJbnNwZWN0
b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8aW50Piogb3B0X291dF9kYXRhYmFzZUlkLCBSZWZQdHI8
SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiYgb3B0X291dF9zcWxFcnJvciwg
SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMqIG9wdF9vdXRfc2Ny
ZWVuQ29sb3IsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0
PiYgb3B0X291dF9hbHRlcm5hdGVDb2xvcnMsIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyOjpQcmludENvbG9yKiBvcHRfb3V0X3ByaW50Q29sb3IpID0gMDsKLSAgICB2aXJ0dWFsIHZv
aWQgZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKEVycm9yU3RyaW5nJiwgY29uc3QgSW5zcGVj
dG9yOjpJbnNwZWN0b3JBcnJheSYgaW5fY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgaW5fbm90
ZXMsIGRvdWJsZSBpbl90aW1lc3RhbXAsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0
JiBpbl92YWx1ZXMsIEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUgaW5fcGF5bG9hZCwgaW50IGlu
X2RhdGFiYXNlSWQsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0JiBpbl9zcWxFcnJv
ciwgY29uc3QgU3RyaW5nJiBpbl9zY3JlZW5Db2xvciwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0
b3JBcnJheSYgaW5fYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcmIGluX3ByaW50Q29sb3Is
IFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+PiYgb3V0X2NvbHVtbk5h
bWVzLCBTdHJpbmcqIG91dF9ub3RlcywgZG91YmxlKiBvdXRfdGltZXN0YW1wLCBJbnNwZWN0b3I6
Okluc3BlY3Rvck9iamVjdCogb3V0X3ZhbHVlcywgSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSog
b3V0X3BheWxvYWQsIGludCogb3V0X2RhdGFiYXNlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpEYXRhYmFzZTo6RXJyb3I+JiBvdXRfc3FsRXJyb3IsIEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzKiBvdXRfc2NyZWVuQ29sb3IsIFJlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiYgb3V0X2FsdGVybmF0ZUNvbG9ycywg
RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3IqIG91dF9wcmludENv
bG9yKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMo
RXJyb3JTdHJpbmcmLCBjb25zdCBKU09OOjpBcnJheSogb3B0X2luX2NvbHVtbk5hbWVzLCBjb25z
dCBTdHJpbmcqIGNvbnN0IG9wdF9pbl9ub3RlcywgY29uc3QgZG91YmxlKiBjb25zdCBvcHRfaW5f
dGltZXN0YW1wLCBjb25zdCBKU09OOjpPYmplY3QqIG9wdF9pbl92YWx1ZXMsIGNvbnN0IEpTT046
OlZhbHVlKiBjb25zdCBvcHRfaW5fcGF5bG9hZCwgY29uc3QgaW50KiBjb25zdCBvcHRfaW5fZGF0
YWJhc2VJZCwgY29uc3QgSlNPTjo6T2JqZWN0KiBvcHRfaW5fc3FsRXJyb3IsIGNvbnN0IFN0cmlu
ZyogY29uc3Qgb3B0X2luX3NjcmVlbkNvbG9yLCBjb25zdCBKU09OOjpBcnJheSogb3B0X2luX2Fs
dGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nKiBjb25zdCBvcHRfaW5fcHJpbnRDb2xvciwgUmVm
UHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+JiBvcHRfb3V0X2NvbHVtbk5h
bWVzLCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8U3RyaW5nPiogb3B0X291dF9ub3Rl
cywgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PGRvdWJsZT4qIG9wdF9vdXRfdGltZXN0
YW1wLCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8SlNPTjo6T2JqZWN0Piogb3B0X291
dF92YWx1ZXMsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxKU09OOjpWYWx1ZT4qIG9w
dF9vdXRfcGF5bG9hZCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PGludD4qIG9wdF9v
dXRfZGF0YWJhc2VJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJv
cj4mIG9wdF9vdXRfc3FsRXJyb3IsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmlt
YXJ5Q29sb3JzKiBvcHRfb3V0X3NjcmVlbkNvbG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4mIG9wdF9vdXRfYWx0ZXJuYXRlQ29sb3JzLCBEYXRhYmFz
ZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UHJpbnRDb2xvciogb3B0X291dF9wcmludENvbG9y
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhFcnJv
clN0cmluZyYsIGNvbnN0IEpTT046OkFycmF5JiBpbl9jb2x1bW5OYW1lcywgY29uc3QgU3RyaW5n
JiBpbl9ub3RlcywgZG91YmxlIGluX3RpbWVzdGFtcCwgY29uc3QgSlNPTjo6T2JqZWN0JiBpbl92
YWx1ZXMsIEpTT046OlZhbHVlIGluX3BheWxvYWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBK
U09OOjpPYmplY3QmIGluX3NxbEVycm9yLCBjb25zdCBTdHJpbmcmIGluX3NjcmVlbkNvbG9yLCBj
b25zdCBKU09OOjpBcnJheSYgaW5fYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcmIGluX3By
aW50Q29sb3IsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+PiYgb3V0
X2NvbHVtbk5hbWVzLCBTdHJpbmcqIG91dF9ub3RlcywgZG91YmxlKiBvdXRfdGltZXN0YW1wLCBK
U09OOjpPYmplY3QqIG91dF92YWx1ZXMsIEpTT046OlZhbHVlKiBvdXRfcGF5bG9hZCwgaW50KiBv
dXRfZGF0YWJhc2VJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJv
cj4mIG91dF9zcWxFcnJvciwgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlD
b2xvcnMqIG91dF9zY3JlZW5Db2xvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFi
YXNlOjpDb2xvckxpc3Q+JiBvdXRfYWx0ZXJuYXRlQ29sb3JzLCBEYXRhYmFzZUJhY2tlbmREaXNw
YXRjaGVySGFuZGxlcjo6UHJpbnRDb2xvciogb3V0X3ByaW50Q29sb3IpID0gMDsKIHByb3RlY3Rl
ZDoKICAgICB2aXJ0dWFsIH5EYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpOwogfTsK
QEAgLTI1NiwyMyArMjU2LDIzIEBAIHZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlz
cGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSCiB2b2lkIERhdGFi
YXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMobG9uZyBy
ZXF1ZXN0SWQsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgcGFyYW1ldGVycykKIHsKICAgICBi
b29sIG9wdF9pbl9jb2x1bW5OYW1lc192YWx1ZUZvdW5kID0gZmFsc2U7Ci0gICAgUmVmUHRyPElu
c3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXk+IG9wdF9pbl9jb2x1bW5OYW1lcyA9IG1fYmFja2VuZERp
c3BhdGNoZXItPmdldEFycmF5KHBhcmFtZXRlcnMuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgiY29sdW1u
TmFtZXMiKSwgJm9wdF9pbl9jb2x1bW5OYW1lc192YWx1ZUZvdW5kKTsKKyAgICBSZWZQdHI8SlNP
Tjo6QXJyYXk+IG9wdF9pbl9jb2x1bW5OYW1lcyA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldEFy
cmF5KHBhcmFtZXRlcnMuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgiY29sdW1uTmFtZXMiKSwgJm9wdF9p
bl9jb2x1bW5OYW1lc192YWx1ZUZvdW5kKTsKICAgICBib29sIG9wdF9pbl9ub3Rlc192YWx1ZUZv
dW5kID0gZmFsc2U7CiAgICAgU3RyaW5nIG9wdF9pbl9ub3RlcyA9IG1fYmFja2VuZERpc3BhdGNo
ZXItPmdldFN0cmluZyhwYXJhbWV0ZXJzLmdldCgpLCBBU0NJSUxpdGVyYWwoIm5vdGVzIiksICZv
cHRfaW5fbm90ZXNfdmFsdWVGb3VuZCk7CiAgICAgYm9vbCBvcHRfaW5fdGltZXN0YW1wX3ZhbHVl
Rm91bmQgPSBmYWxzZTsKICAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8ZG91Ymxl
PiBvcHRfaW5fdGltZXN0YW1wID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0RG91YmxlKHBhcmFt
ZXRlcnMuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgidGltZXN0YW1wIiksICZvcHRfaW5fdGltZXN0YW1w
X3ZhbHVlRm91bmQpOwogICAgIGJvb2wgb3B0X2luX3ZhbHVlc192YWx1ZUZvdW5kID0gZmFsc2U7
Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBvcHRfaW5fdmFsdWVzID0g
bV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0T2JqZWN0KHBhcmFtZXRlcnMuZ2V0KCksIEFTQ0lJTGl0
ZXJhbCgidmFsdWVzIiksICZvcHRfaW5fdmFsdWVzX3ZhbHVlRm91bmQpOworICAgIFJlZlB0cjxK
U09OOjpPYmplY3Q+IG9wdF9pbl92YWx1ZXMgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRPYmpl
Y3QocGFyYW1ldGVycy5nZXQoKSwgQVNDSUlMaXRlcmFsKCJ2YWx1ZXMiKSwgJm9wdF9pbl92YWx1
ZXNfdmFsdWVGb3VuZCk7CiAgICAgYm9vbCBvcHRfaW5fcGF5bG9hZF92YWx1ZUZvdW5kID0gZmFs
c2U7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+IG9wdF9pbl9wYXlsb2Fk
ID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0VmFsdWUocGFyYW1ldGVycy5nZXQoKSwgQVNDSUlM
aXRlcmFsKCJwYXlsb2FkIiksICZvcHRfaW5fcGF5bG9hZF92YWx1ZUZvdW5kKTsKKyAgICBSZWZQ
dHI8SlNPTjo6VmFsdWU+IG9wdF9pbl9wYXlsb2FkID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0
VmFsdWUocGFyYW1ldGVycy5nZXQoKSwgQVNDSUlMaXRlcmFsKCJwYXlsb2FkIiksICZvcHRfaW5f
cGF5bG9hZF92YWx1ZUZvdW5kKTsKICAgICBib29sIG9wdF9pbl9kYXRhYmFzZUlkX3ZhbHVlRm91
bmQgPSBmYWxzZTsKICAgICBpbnQgb3B0X2luX2RhdGFiYXNlSWQgPSBtX2JhY2tlbmREaXNwYXRj
aGVyLT5nZXRJbnRlZ2VyKHBhcmFtZXRlcnMuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgiZGF0YWJhc2VJ
ZCIpLCAmb3B0X2luX2RhdGFiYXNlSWRfdmFsdWVGb3VuZCk7CiAgICAgYm9vbCBvcHRfaW5fc3Fs
RXJyb3JfdmFsdWVGb3VuZCA9IGZhbHNlOwotICAgIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rv
ck9iamVjdD4gb3B0X2luX3NxbEVycm9yID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0T2JqZWN0
KHBhcmFtZXRlcnMuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgic3FsRXJyb3IiKSwgJm9wdF9pbl9zcWxF
cnJvcl92YWx1ZUZvdW5kKTsKKyAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBvcHRfaW5fc3FsRXJy
b3IgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRPYmplY3QocGFyYW1ldGVycy5nZXQoKSwgQVND
SUlMaXRlcmFsKCJzcWxFcnJvciIpLCAmb3B0X2luX3NxbEVycm9yX3ZhbHVlRm91bmQpOwogICAg
IGJvb2wgb3B0X2luX3NjcmVlbkNvbG9yX3ZhbHVlRm91bmQgPSBmYWxzZTsKICAgICBTdHJpbmcg
b3B0X2luX3NjcmVlbkNvbG9yID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3RyaW5nKHBhcmFt
ZXRlcnMuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgic2NyZWVuQ29sb3IiKSwgJm9wdF9pbl9zY3JlZW5D
b2xvcl92YWx1ZUZvdW5kKTsKICAgICBib29sIG9wdF9pbl9hbHRlcm5hdGVDb2xvcnNfdmFsdWVG
b3VuZCA9IGZhbHNlOwotICAgIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5PiBvcHRf
aW5fYWx0ZXJuYXRlQ29sb3JzID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0QXJyYXkocGFyYW1l
dGVycy5nZXQoKSwgQVNDSUlMaXRlcmFsKCJhbHRlcm5hdGVDb2xvcnMiKSwgJm9wdF9pbl9hbHRl
cm5hdGVDb2xvcnNfdmFsdWVGb3VuZCk7CisgICAgUmVmUHRyPEpTT046OkFycmF5PiBvcHRfaW5f
YWx0ZXJuYXRlQ29sb3JzID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0QXJyYXkocGFyYW1ldGVy
cy5nZXQoKSwgQVNDSUlMaXRlcmFsKCJhbHRlcm5hdGVDb2xvcnMiKSwgJm9wdF9pbl9hbHRlcm5h
dGVDb2xvcnNfdmFsdWVGb3VuZCk7CiAgICAgYm9vbCBvcHRfaW5fcHJpbnRDb2xvcl92YWx1ZUZv
dW5kID0gZmFsc2U7CiAgICAgU3RyaW5nIG9wdF9pbl9wcmludENvbG9yID0gbV9iYWNrZW5kRGlz
cGF0Y2hlci0+Z2V0U3RyaW5nKHBhcmFtZXRlcnMuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgicHJpbnRD
b2xvciIpLCAmb3B0X2luX3ByaW50Q29sb3JfdmFsdWVGb3VuZCk7CiAgICAgaWYgKG1fYmFja2Vu
ZERpc3BhdGNoZXItPmhhc1Byb3RvY29sRXJyb3JzKCkpIHsKQEAgLTI5Miw4ICsyOTIsOCBAQCB2
b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRl
cnMobG9uZyByZXF1ZXN0SWQsIFJlZgogICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpB
cnJheTxTdHJpbmc+PiBvdXRfY29sdW1uTmFtZXM7CiAgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6
T3B0T3V0cHV0PFN0cmluZz4gb3V0X25vdGVzOwogICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9w
dE91dHB1dDxkb3VibGU+IG91dF90aW1lc3RhbXA7Ci0gICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6
T3B0T3V0cHV0PEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBvdXRfdmFsdWVzOwotICAgIElu
c3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPiBv
dXRfcGF5bG9hZDsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8SlNPTjo6T2Jq
ZWN0PiBvdXRfdmFsdWVzOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxKU09O
OjpWYWx1ZT4gb3V0X3BheWxvYWQ7CiAgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpEYXRhYmFzZUlkPiBvdXRfZGF0YWJhc2VJ
ZDsKICAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiBvdXRf
c3FsRXJyb3I7CiAgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xv
cnMgb3V0X3NjcmVlbkNvbG9yOwpAQCAtMzMxLDE1ICszMzEsMTUgQEAgdm9pZCBEYXRhYmFzZUJh
Y2tlbmREaXNwYXRjaGVyOjpleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgcmVxdWVz
dElkLCBSZWYKIAogdm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlTm9PcHRp
b25hbFBhcmFtZXRlcnMobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYg
cGFyYW1ldGVycykKIHsKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheT4gaW5f
Y29sdW1uTmFtZXMgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRBcnJheShwYXJhbWV0ZXJzLmdl
dCgpLCBBU0NJSUxpdGVyYWwoImNvbHVtbk5hbWVzIiksIG51bGxwdHIpOworICAgIFJlZlB0cjxK
U09OOjpBcnJheT4gaW5fY29sdW1uTmFtZXMgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRBcnJh
eShwYXJhbWV0ZXJzLmdldCgpLCBBU0NJSUxpdGVyYWwoImNvbHVtbk5hbWVzIiksIG51bGxwdHIp
OwogICAgIFN0cmluZyBpbl9ub3RlcyA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFN0cmluZyhw
YXJhbWV0ZXJzLmdldCgpLCBBU0NJSUxpdGVyYWwoIm5vdGVzIiksIG51bGxwdHIpOwogICAgIGRv
dWJsZSBpbl90aW1lc3RhbXAgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXREb3VibGUocGFyYW1l
dGVycy5nZXQoKSwgQVNDSUlMaXRlcmFsKCJ0aW1lc3RhbXAiKSwgbnVsbHB0cik7Ci0gICAgUmVm
UHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBpbl92YWx1ZXMgPSBtX2JhY2tlbmREaXNw
YXRjaGVyLT5nZXRPYmplY3QocGFyYW1ldGVycy5nZXQoKSwgQVNDSUlMaXRlcmFsKCJ2YWx1ZXMi
KSwgbnVsbHB0cik7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+IGluX3Bh
eWxvYWQgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRWYWx1ZShwYXJhbWV0ZXJzLmdldCgpLCBB
U0NJSUxpdGVyYWwoInBheWxvYWQiKSwgbnVsbHB0cik7CisgICAgUmVmUHRyPEpTT046Ok9iamVj
dD4gaW5fdmFsdWVzID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0T2JqZWN0KHBhcmFtZXRlcnMu
Z2V0KCksIEFTQ0lJTGl0ZXJhbCgidmFsdWVzIiksIG51bGxwdHIpOworICAgIFJlZlB0cjxKU09O
OjpWYWx1ZT4gaW5fcGF5bG9hZCA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFZhbHVlKHBhcmFt
ZXRlcnMuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgicGF5bG9hZCIpLCBudWxscHRyKTsKICAgICBpbnQg
aW5fZGF0YWJhc2VJZCA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldEludGVnZXIocGFyYW1ldGVy
cy5nZXQoKSwgQVNDSUlMaXRlcmFsKCJkYXRhYmFzZUlkIiksIG51bGxwdHIpOwotICAgIFJlZlB0
cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gaW5fc3FsRXJyb3IgPSBtX2JhY2tlbmREaXNw
YXRjaGVyLT5nZXRPYmplY3QocGFyYW1ldGVycy5nZXQoKSwgQVNDSUlMaXRlcmFsKCJzcWxFcnJv
ciIpLCBudWxscHRyKTsKKyAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBpbl9zcWxFcnJvciA9IG1f
YmFja2VuZERpc3BhdGNoZXItPmdldE9iamVjdChwYXJhbWV0ZXJzLmdldCgpLCBBU0NJSUxpdGVy
YWwoInNxbEVycm9yIiksIG51bGxwdHIpOwogICAgIFN0cmluZyBpbl9zY3JlZW5Db2xvciA9IG1f
YmFja2VuZERpc3BhdGNoZXItPmdldFN0cmluZyhwYXJhbWV0ZXJzLmdldCgpLCBBU0NJSUxpdGVy
YWwoInNjcmVlbkNvbG9yIiksIG51bGxwdHIpOwotICAgIFJlZlB0cjxJbnNwZWN0b3I6Okluc3Bl
Y3RvckFycmF5PiBpbl9hbHRlcm5hdGVDb2xvcnMgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRB
cnJheShwYXJhbWV0ZXJzLmdldCgpLCBBU0NJSUxpdGVyYWwoImFsdGVybmF0ZUNvbG9ycyIpLCBu
dWxscHRyKTsKKyAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IGluX2FsdGVybmF0ZUNvbG9ycyA9IG1f
YmFja2VuZERpc3BhdGNoZXItPmdldEFycmF5KHBhcmFtZXRlcnMuZ2V0KCksIEFTQ0lJTGl0ZXJh
bCgiYWx0ZXJuYXRlQ29sb3JzIiksIG51bGxwdHIpOwogICAgIFN0cmluZyBpbl9wcmludENvbG9y
ID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3RyaW5nKHBhcmFtZXRlcnMuZ2V0KCksIEFTQ0lJ
TGl0ZXJhbCgicHJpbnRDb2xvciIpLCBudWxscHRyKTsKICAgICBpZiAobV9iYWNrZW5kRGlzcGF0
Y2hlci0+aGFzUHJvdG9jb2xFcnJvcnMoKSkgewogICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVy
LT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1zLCBT
dHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJv
Y2Vzc2VkIiwgIkRhdGFiYXNlLmV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyIpKTsKQEAgLTM1
OCw4ICszNTgsOCBAQCB2b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVOb09w
dGlvbmFsUGFyYW1ldGVycyhsb25nIHJlcXVlc3RJZCwgUmVmUAogICAgIFJlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+PiBvdXRfY29sdW1uTmFtZXM7CiAgICAgU3RyaW5n
IG91dF9ub3RlczsKICAgICBkb3VibGUgb3V0X3RpbWVzdGFtcDsKLSAgICBJbnNwZWN0b3I6Oklu
c3BlY3Rvck9iamVjdCBvdXRfdmFsdWVzOwotICAgIEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUg
b3V0X3BheWxvYWQ7CisgICAgSlNPTjo6T2JqZWN0IG91dF92YWx1ZXM7CisgICAgSlNPTjo6VmFs
dWUgb3V0X3BheWxvYWQ7CiAgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkRhdGFi
YXNlSWQgb3V0X2RhdGFiYXNlSWQ7CiAgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRh
dGFiYXNlOjpFcnJvcj4gb3V0X3NxbEVycm9yOwogICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRh
dGFiYXNlOjpQcmltYXJ5Q29sb3JzIG91dF9zY3JlZW5Db2xvcjsKQEAgLTU1Myw3ICs1NTMsNyBA
QCBlbnVtIGNsYXNzIFByaW1hcnlDb2xvcnMgewogICAgIEJsdWUgPSAyLAogfTsgLy8gZW51bSBj
bGFzcyBQcmltYXJ5Q29sb3JzCiAvKiBEYXRhYmFzZSBlcnJvci4gKi8KLWNsYXNzIEVycm9yIDog
cHVibGljIEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0QmFzZSB7CitjbGFzcyBFcnJvciA6IHB1
YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKIHB1YmxpYzoKICAgICBlbnVtIHsKICAgICAgICAgTm9G
aWVsZHNTZXQgPSAwLApAQCAtNzYzLDggKzc2Myw4IEBAIG5hbWVzcGFjZSBJbnNwZWN0b3Igewog
Y2xhc3MgT2JqQ0luc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJs
aWMgQWx0ZXJuYXRlRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciB7CiBwdWJsaWM6CiAgICAgT2Jq
Q0luc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIoaWQ8VGVzdFByb3RvY29sRGF0YWJh
c2VEb21haW5IYW5kbGVyPiBoYW5kbGVyKSB7IG1fZGVsZWdhdGUgPSBoYW5kbGVyOyB9Ci0gICAg
dmlydHVhbCB2b2lkIGV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMobG9uZyByZXF1ZXN0SWQs
IGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXkqIGluX2NvbHVtbk5hbWVzLCBjb25zdCBT
dHJpbmcqIGNvbnN0IGluX25vdGVzLCBjb25zdCBkb3VibGUqIGNvbnN0IGluX3RpbWVzdGFtcCwg
Y29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QqIGluX3ZhbHVlcywgY29uc3QgSW5zcGVj
dG9yOjpJbnNwZWN0b3JWYWx1ZSogY29uc3QgaW5fcGF5bG9hZCwgY29uc3QgaW50KiBjb25zdCBp
bl9kYXRhYmFzZUlkLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCogaW5fc3FsRXJy
b3IsIGNvbnN0IFN0cmluZyogY29uc3QgaW5fc2NyZWVuQ29sb3IsIGNvbnN0IEluc3BlY3Rvcjo6
SW5zcGVjdG9yQXJyYXkqIGluX2FsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nKiBjb25zdCBp
bl9wcmludENvbG9yKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZU5vT3B0aW9u
YWxQYXJhbWV0ZXJzKGxvbmcgcmVxdWVzdElkLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3RvckFy
cmF5JiBpbl9jb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBpbl9ub3RlcywgZG91YmxlIGluX3Rp
bWVzdGFtcCwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QmIGluX3ZhbHVlcywgSW5z
cGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSBpbl9wYXlsb2FkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29u
c3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QmIGluX3NxbEVycm9yLCBjb25zdCBTdHJpbmcm
IGluX3NjcmVlbkNvbG9yLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5JiBpbl9hbHRl
cm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyYgaW5fcHJpbnRDb2xvcikgb3ZlcnJpZGU7CisgICAg
dmlydHVhbCB2b2lkIGV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMobG9uZyByZXF1ZXN0SWQs
IGNvbnN0IEpTT046OkFycmF5KiBpbl9jb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nKiBjb25zdCBp
bl9ub3RlcywgY29uc3QgZG91YmxlKiBjb25zdCBpbl90aW1lc3RhbXAsIGNvbnN0IEpTT046Ok9i
amVjdCogaW5fdmFsdWVzLCBjb25zdCBKU09OOjpWYWx1ZSogY29uc3QgaW5fcGF5bG9hZCwgY29u
c3QgaW50KiBjb25zdCBpbl9kYXRhYmFzZUlkLCBjb25zdCBKU09OOjpPYmplY3QqIGluX3NxbEVy
cm9yLCBjb25zdCBTdHJpbmcqIGNvbnN0IGluX3NjcmVlbkNvbG9yLCBjb25zdCBKU09OOjpBcnJh
eSogaW5fYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcqIGNvbnN0IGluX3ByaW50Q29sb3Ip
IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMo
bG9uZyByZXF1ZXN0SWQsIGNvbnN0IEpTT046OkFycmF5JiBpbl9jb2x1bW5OYW1lcywgY29uc3Qg
U3RyaW5nJiBpbl9ub3RlcywgZG91YmxlIGluX3RpbWVzdGFtcCwgY29uc3QgSlNPTjo6T2JqZWN0
JiBpbl92YWx1ZXMsIEpTT046OlZhbHVlIGluX3BheWxvYWQsIGludCBpbl9kYXRhYmFzZUlkLCBj
b25zdCBKU09OOjpPYmplY3QmIGluX3NxbEVycm9yLCBjb25zdCBTdHJpbmcmIGluX3NjcmVlbkNv
bG9yLCBjb25zdCBKU09OOjpBcnJheSYgaW5fYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcm
IGluX3ByaW50Q29sb3IpIG92ZXJyaWRlOwogcHJpdmF0ZToKICAgICBSZXRhaW5QdHI8aWQ8VGVz
dFByb3RvY29sRGF0YWJhc2VEb21haW5IYW5kbGVyPj4gbV9kZWxlZ2F0ZTsKIH07CkBAIC04MTMs
NyArODEzLDcgQEAgcHJpdmF0ZToKIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKLXZvaWQgT2Jq
Q0luc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVBbGxPcHRpb25hbFBh
cmFtZXRlcnMobG9uZyByZXF1ZXN0SWQsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXkq
IGluX2NvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcqIGNvbnN0IGluX25vdGVzLCBjb25zdCBkb3Vi
bGUqIGNvbnN0IGluX3RpbWVzdGFtcCwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Qq
IGluX3ZhbHVlcywgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSogY29uc3QgaW5fcGF5
bG9hZCwgY29uc3QgaW50KiBjb25zdCBpbl9kYXRhYmFzZUlkLCBjb25zdCBJbnNwZWN0b3I6Oklu
c3BlY3Rvck9iamVjdCogaW5fc3FsRXJyb3IsIGNvbnN0IFN0cmluZyogY29uc3QgaW5fc2NyZWVu
Q29sb3IsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXkqIGluX2FsdGVybmF0ZUNvbG9y
cywgY29uc3QgU3RyaW5nKiBjb25zdCBpbl9wcmludENvbG9yKQordm9pZCBPYmpDSW5zcGVjdG9y
RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhs
b25nIHJlcXVlc3RJZCwgY29uc3QgSlNPTjo6QXJyYXkqIGluX2NvbHVtbk5hbWVzLCBjb25zdCBT
dHJpbmcqIGNvbnN0IGluX25vdGVzLCBjb25zdCBkb3VibGUqIGNvbnN0IGluX3RpbWVzdGFtcCwg
Y29uc3QgSlNPTjo6T2JqZWN0KiBpbl92YWx1ZXMsIGNvbnN0IEpTT046OlZhbHVlKiBjb25zdCBp
bl9wYXlsb2FkLCBjb25zdCBpbnQqIGNvbnN0IGluX2RhdGFiYXNlSWQsIGNvbnN0IEpTT046Ok9i
amVjdCogaW5fc3FsRXJyb3IsIGNvbnN0IFN0cmluZyogY29uc3QgaW5fc2NyZWVuQ29sb3IsIGNv
bnN0IEpTT046OkFycmF5KiBpbl9hbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyogY29uc3Qg
aW5fcHJpbnRDb2xvcikKIHsKICAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJy
b3IpIHsKICAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihy
ZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwpAQCAtODg1
LDcgKzg4NSw3IEBAIHZvaWQgT2JqQ0luc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6
OmV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMobG9uZyByCiAgICAgW21fZGVsZWdhdGUgZXhl
Y3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1dpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sg
c3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjayBjb2x1bW5OYW1lczooaW5fY29sdW1uTmFt
ZXMgPyAmb19pbl9jb2x1bW5OYW1lcyA6IG5pbCkgbm90ZXM6KGluX25vdGVzID8gJm9faW5fbm90
ZXMgOiBuaWwpIHRpbWVzdGFtcDooaW5fdGltZXN0YW1wID8gJm9faW5fdGltZXN0YW1wIDogbmls
KSB2YWx1ZXM6KGluX3ZhbHVlcyA/ICZvX2luX3ZhbHVlcyA6IG5pbCkgcGF5bG9hZDooaW5fcGF5
bG9hZCA/ICZvX2luX3BheWxvYWQgOiBuaWwpIGRhdGFiYXNlSWQ6KGluX2RhdGFiYXNlSWQgPyAm
b19pbl9kYXRhYmFzZUlkIDogbmlsKSBzcWxFcnJvcjooaW5fc3FsRXJyb3IgPyAmb19pbl9zcWxF
cnJvciA6IG5pbCkgc2NyZWVuQ29sb3I6KGluX3NjcmVlbkNvbG9yID8gJm9faW5fc2NyZWVuQ29s
b3IgOiBuaWwpIGFsdGVybmF0ZUNvbG9yczooaW5fYWx0ZXJuYXRlQ29sb3JzID8gJm9faW5fYWx0
ZXJuYXRlQ29sb3JzIDogbmlsKSBwcmludENvbG9yOihpbl9wcmludENvbG9yID8gJm9faW5fcHJp
bnRDb2xvciA6IG5pbCldOwogfQogCi12b2lkIE9iakNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmRE
aXNwYXRjaGVyOjpleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMobG9uZyByZXF1ZXN0SWQsIGNv
bnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXkmIGluX2NvbHVtbk5hbWVzLCBjb25zdCBTdHJp
bmcmIGluX25vdGVzLCBkb3VibGUgaW5fdGltZXN0YW1wLCBjb25zdCBJbnNwZWN0b3I6Okluc3Bl
Y3Rvck9iamVjdCYgaW5fdmFsdWVzLCBJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlIGluX3BheWxv
YWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCYg
aW5fc3FsRXJyb3IsIGNvbnN0IFN0cmluZyYgaW5fc2NyZWVuQ29sb3IsIGNvbnN0IEluc3BlY3Rv
cjo6SW5zcGVjdG9yQXJyYXkmIGluX2FsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nJiBpbl9w
cmludENvbG9yKQordm9pZCBPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6
ZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgcmVxdWVzdElkLCBjb25zdCBKU09OOjpB
cnJheSYgaW5fY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgaW5fbm90ZXMsIGRvdWJsZSBpbl90
aW1lc3RhbXAsIGNvbnN0IEpTT046Ok9iamVjdCYgaW5fdmFsdWVzLCBKU09OOjpWYWx1ZSBpbl9w
YXlsb2FkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgSlNPTjo6T2JqZWN0JiBpbl9zcWxFcnJv
ciwgY29uc3QgU3RyaW5nJiBpbl9zY3JlZW5Db2xvciwgY29uc3QgSlNPTjo6QXJyYXkmIGluX2Fs
dGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nJiBpbl9wcmludENvbG9yKQogewogICAgIGlkIGVy
cm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgewogICAgICAgICBiYWNrZW5kRGlzcGF0
Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6
OlNlcnZlckVycm9yLCBlcnJvcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9ldmVudHMtd2l0aC1vcHRp
b25hbC1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZXZlbnRzLXdpdGgtb3B0aW9uYWwt
cGFyYW1ldGVycy5qc29uLXJlc3VsdAppbmRleCAxMzdkMTgyN2UzZWJjMjIwZmUwNTc4ZjFlNTk5
NmYxZjhiNDNhOWNhLi4wYTllZTZkOTJjNmM1NzFkN2VjYTcyZDM1OWEyMjQxNTQ2MjM1NDU4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
Z2VuZXJpYy9leHBlY3RlZC9ldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24tcmVz
dWx0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9n
ZW5lcmljL2V4cGVjdGVkL2V2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbi1yZXN1
bHQKQEAgLTIzNCw4ICsyMzQsOCBAQCBjbGFzcyBGcm9udGVuZFJvdXRlcjsKIGNsYXNzIERhdGFi
YXNlRnJvbnRlbmREaXNwYXRjaGVyIHsKIHB1YmxpYzoKICAgICBEYXRhYmFzZUZyb250ZW5kRGlz
cGF0Y2hlcihGcm9udGVuZFJvdXRlciYgZnJvbnRlbmRSb3V0ZXIpIDogbV9mcm9udGVuZFJvdXRl
cihmcm9udGVuZFJvdXRlcikgeyB9Ci0gICAgdm9pZCBkaWRFeGVjdXRlT3B0aW9uYWxQYXJhbWV0
ZXJzKFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+PiBjb2x1bW5OYW1l
cywgY29uc3QgU3RyaW5nKiBjb25zdCBub3RlcywgY29uc3QgZG91YmxlKiBjb25zdCB0aW1lc3Rh
bXAsIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gdmFsdWVzLCBSZWZQdHI8SW5z
cGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4gcGF5bG9hZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRhdGFiYXNlOjpFcnJvcj4gc3FsRXJyb3IsIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzKiBjb25zdCBzY3JlZW5Db2xvciwgUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+IGFsdGVybmF0ZUNvbG9ycywgY29u
c3QgU3RyaW5nKiBjb25zdCBwcmludENvbG9yKTsKLSAgICB2b2lkIGRpZEV4ZWN1dGVOb09wdGlv
bmFsUGFyYW1ldGVycyhSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPj4g
Y29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgbm90ZXMsIGRvdWJsZSB0aW1lc3RhbXAsIFJlZlB0
cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gdmFsdWVzLCBSZWZQdHI8SW5zcGVjdG9yOjpJ
bnNwZWN0b3JWYWx1ZT4gcGF5bG9hZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFi
YXNlOjpFcnJvcj4gc3FsRXJyb3IsIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNl
OjpQcmltYXJ5Q29sb3JzJiBzY3JlZW5Db2xvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRhdGFiYXNlOjpDb2xvckxpc3Q+IGFsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nJiBwcmlu
dENvbG9yKTsKKyAgICB2b2lkIGRpZEV4ZWN1dGVPcHRpb25hbFBhcmFtZXRlcnMoUmVmUHRyPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+IGNvbHVtbk5hbWVzLCBjb25zdCBTdHJp
bmcqIGNvbnN0IG5vdGVzLCBjb25zdCBkb3VibGUqIGNvbnN0IHRpbWVzdGFtcCwgUmVmUHRyPEpT
T046Ok9iamVjdD4gdmFsdWVzLCBSZWZQdHI8SlNPTjo6VmFsdWU+IHBheWxvYWQsIFJlZlB0cjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IHNxbEVycm9yLCBjb25zdCBJbnNw
ZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyogY29uc3Qgc2NyZWVuQ29s
b3IsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiBhbHRl
cm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyogY29uc3QgcHJpbnRDb2xvcik7CisgICAgdm9pZCBk
aWRFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMoUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkFycmF5PFN0cmluZz4+IGNvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIG5vdGVzLCBkb3VibGUg
dGltZXN0YW1wLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiB2YWx1ZXMsIFJlZlB0cjxKU09OOjpWYWx1
ZT4gcGF5bG9hZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4g
c3FsRXJyb3IsIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29s
b3JzJiBzY3JlZW5Db2xvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpD
b2xvckxpc3Q+IGFsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nJiBwcmludENvbG9yKTsKIHBy
aXZhdGU6CiAgICAgRnJvbnRlbmRSb3V0ZXImIG1fZnJvbnRlbmRSb3V0ZXI7CiB9OwpAQCAtMjgy
LDcgKzI4Miw3IEBAIHByaXZhdGU6CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCi12b2lkIERh
dGFiYXNlRnJvbnRlbmREaXNwYXRjaGVyOjpkaWRFeGVjdXRlT3B0aW9uYWxQYXJhbWV0ZXJzKFJl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+PiBjb2x1bW5OYW1lcywgY29u
c3QgU3RyaW5nKiBjb25zdCBub3RlcywgY29uc3QgZG91YmxlKiBjb25zdCB0aW1lc3RhbXAsIFJl
ZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gdmFsdWVzLCBSZWZQdHI8SW5zcGVjdG9y
OjpJbnNwZWN0b3JWYWx1ZT4gcGF5bG9hZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRh
dGFiYXNlOjpFcnJvcj4gc3FsRXJyb3IsIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFi
YXNlOjpQcmltYXJ5Q29sb3JzKiBjb25zdCBzY3JlZW5Db2xvciwgUmVmUHRyPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+IGFsdGVybmF0ZUNvbG9ycywgY29uc3QgU3Ry
aW5nKiBjb25zdCBwcmludENvbG9yKQordm9pZCBEYXRhYmFzZUZyb250ZW5kRGlzcGF0Y2hlcjo6
ZGlkRXhlY3V0ZU9wdGlvbmFsUGFyYW1ldGVycyhSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6
QXJyYXk8U3RyaW5nPj4gY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyogY29uc3Qgbm90ZXMsIGNv
bnN0IGRvdWJsZSogY29uc3QgdGltZXN0YW1wLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiB2YWx1ZXMs
IFJlZlB0cjxKU09OOjpWYWx1ZT4gcGF5bG9hZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRhdGFiYXNlOjpFcnJvcj4gc3FsRXJyb3IsIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRh
dGFiYXNlOjpQcmltYXJ5Q29sb3JzKiBjb25zdCBzY3JlZW5Db2xvciwgUmVmUHRyPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+IGFsdGVybmF0ZUNvbG9ycywgY29uc3Qg
U3RyaW5nKiBjb25zdCBwcmludENvbG9yKQogewogICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IGpz
b25NZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICBqc29uTWVzc2FnZS0+
c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgibWV0aG9kIiksIEFTQ0lJTGl0ZXJhbCgiRGF0YWJhc2Uu
ZGlkRXhlY3V0ZU9wdGlvbmFsUGFyYW1ldGVycyIpKTsKQEAgLTMxMCw3ICszMTAsNyBAQCB2b2lk
IERhdGFiYXNlRnJvbnRlbmREaXNwYXRjaGVyOjpkaWRFeGVjdXRlT3B0aW9uYWxQYXJhbWV0ZXJz
KFJlZlB0cjxJbnNwZWN0b3I6OgogICAgIG1fZnJvbnRlbmRSb3V0ZXIuc2VuZEV2ZW50KGpzb25N
ZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7CiB9CiAKLXZvaWQgRGF0YWJhc2VGcm9udGVuZERpc3Bh
dGNoZXI6OmRpZEV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhSZWZQdHI8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6QXJyYXk8U3RyaW5nPj4gY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgbm90ZXMs
IGRvdWJsZSB0aW1lc3RhbXAsIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gdmFs
dWVzLCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4gcGF5bG9hZCwgUmVmUHRyPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4gc3FsRXJyb3IsIGNvbnN0IEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzJiBzY3JlZW5Db2xvciwgUmVm
UHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+IGFsdGVybmF0ZUNv
bG9ycywgY29uc3QgU3RyaW5nJiBwcmludENvbG9yKQordm9pZCBEYXRhYmFzZUZyb250ZW5kRGlz
cGF0Y2hlcjo6ZGlkRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKFJlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpBcnJheTxTdHJpbmc+PiBjb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBub3Rl
cywgZG91YmxlIHRpbWVzdGFtcCwgUmVmUHRyPEpTT046Ok9iamVjdD4gdmFsdWVzLCBSZWZQdHI8
SlNPTjo6VmFsdWU+IHBheWxvYWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFz
ZTo6RXJyb3I+IHNxbEVycm9yLCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6
UHJpbWFyeUNvbG9ycyYgc2NyZWVuQ29sb3IsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpE
YXRhYmFzZTo6Q29sb3JMaXN0PiBhbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyYgcHJpbnRD
b2xvcikKIHsKICAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiBqc29uTWVzc2FnZSA9IEluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCk7CiAgICAganNvbk1lc3NhZ2UtPnNldFN0cmluZyhBU0NJSUxpdGVy
YWwoIm1ldGhvZCIpLCBBU0NJSUxpdGVyYWwoIkRhdGFiYXNlLmRpZEV4ZWN1dGVOb09wdGlvbmFs
UGFyYW1ldGVycyIpKTsKQEAgLTM5Myw3ICszOTMsNyBAQCB0eXBlZGVmIEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkFycmF5PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3Jz
PgogCiBuYW1lc3BhY2UgRGF0YWJhc2UgewogLyogRGF0YWJhc2UgZXJyb3IuICovCi1jbGFzcyBF
cnJvciA6IHB1YmxpYyBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdEJhc2UgeworY2xhc3MgRXJy
b3IgOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7CiBwdWJsaWM6CiAgICAgZW51bSB7CiAgICAg
ICAgIE5vRmllbGRzU2V0ID0gMCwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2dlbmVyYXRlLWRvbWFpbnMt
d2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2dlbmVyYXRlLWRvbWFpbnMt
d2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uLXJlc3VsdAppbmRleCA5ZWViMGIxYzliNzFiNTU3MjU2
Y2Y3M2RmZmNlZDhkZThlMjJmNjEwLi4yN2MwOWM3M2I0ZWU1ODQ2NDVhOWEwMmY4MDhhNjNjMjdl
NTYzNTcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9nZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1n
dWFyZHMuanNvbi1yZXN1bHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1
cmUtZ3VhcmRzLmpzb24tcmVzdWx0CkBAIC00NDEsNyArNDQxLDcgQEAgY2xhc3MgTmV0d29ya0Vy
cm9yOwogCiAjaWYgUExBVEZPUk0oV0VCX1RZUEVTKQogbmFtZXNwYWNlIE5ldHdvcmsyIHsKLWNs
YXNzIE5ldHdvcmtFcnJvciA6IHB1YmxpYyBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdEJhc2Ug
eworY2xhc3MgTmV0d29ya0Vycm9yIDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgewogcHVibGlj
OgogICAgIGVudW0gewogICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3Rl
ZC9zaGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9zaGFk
b3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbi1yZXN1bHQKaW5kZXggMTY4ODIxYTk5ZmQ1
MjBmOWUyNjc5N2Q3ZjljNmNhY2E3YjNlZWNmMy4uMTcxZjJmYzVmMmIzMWJlOGU2Njk5ZmE1OWJh
NjlmOGVhZDc2ZjlkZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1z
ZXR0ZXJzLmpzb24tcmVzdWx0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL3NoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0
dGVycy5qc29uLXJlc3VsdApAQCAtMzM1LDcgKzMzNSw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
IFN0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShUIGVudW1WYWx1ZSkKIAogbmFtZXNwYWNlIFJ1
bnRpbWUgewogLyogS2V5IHBhdGguICovCi1jbGFzcyBLZXlQYXRoIDogcHVibGljIEluc3BlY3Rv
cjo6SW5zcGVjdG9yT2JqZWN0QmFzZSB7CitjbGFzcyBLZXlQYXRoIDogcHVibGljIEpTT046Ok9i
amVjdEJhc2UgewogcHVibGljOgogICAgIC8vIE5hbWVkIGFmdGVyIHByb3BlcnR5IG5hbWUgJ3R5
cGUnIHdoaWxlIGdlbmVyYXRpbmcgS2V5UGF0aC4KICAgICBlbnVtIGNsYXNzIFR5cGUgewpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dl
bmVyaWMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uLXJlc3VsdCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4
cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbi1yZXN1bHQKaW5kZXggNzBj
YjM1NTk4NjRkMjBlZTJkNmVmNDY5OTVmMzI4YTU0YTE0NDBkNi4uY2EyZmRmYjYzOGZjZjY2MDA3
MjgwMTc4M2FkNTdiYzA4OGIyNjMyYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlv
bi1vYmplY3QtdHlwZS5qc29uLXJlc3VsdAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLW9i
amVjdC10eXBlLmpzb24tcmVzdWx0CkBAIC0zNTMsNyArMzUzLDcgQEAgdGVtcGxhdGU8dHlwZW5h
bWUgVD4gU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKFQgZW51bVZhbHVlKQogCiBuYW1lc3Bh
Y2UgRGF0YWJhc2UgewogLyogRGF0YWJhc2UgZXJyb3IuICovCi1jbGFzcyBFcnJvciA6IHB1Ymxp
YyBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdEJhc2UgeworY2xhc3MgRXJyb3IgOiBwdWJsaWMg
SlNPTjo6T2JqZWN0QmFzZSB7CiBwdWJsaWM6CiAgICAgZW51bSB7CiAgICAgICAgIE5vRmllbGRz
U2V0ID0gMCwKQEAgLTQyNCw3ICs0MjQsNyBAQCBlbnVtIGNsYXNzIE1vdXNlQnV0dG9uIHsKICAg
ICBNaWRkbGUgPSAyLAogICAgIFJpZ2h0ID0gMywKIH07IC8vIGVudW0gY2xhc3MgTW91c2VCdXR0
b24KLWNsYXNzIE9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlIDogcHVibGljIEluc3BlY3Rvcjo6SW5z
cGVjdG9yT2JqZWN0QmFzZSB7CitjbGFzcyBPcHRpb25hbFBhcmFtZXRlckJ1bmRsZSA6IHB1Ymxp
YyBKU09OOjpPYmplY3RCYXNlIHsKIHB1YmxpYzoKICAgICAvLyBOYW1lZCBhZnRlciBwcm9wZXJ0
eSBuYW1lICdkaXJlY3Rpb25hbGl0eScgd2hpbGUgZ2VuZXJhdGluZyBPcHRpb25hbFBhcmFtZXRl
ckJ1bmRsZS4KICAgICBlbnVtIGNsYXNzIERpcmVjdGlvbmFsaXR5IHsKQEAgLTQ5OSwxMiArNDk5
LDEyIEBAIHB1YmxpYzoKICAgICAgICAgSW5zcGVjdG9yT2JqZWN0QmFzZTo6c2V0RG91YmxlKEFT
Q0lJTGl0ZXJhbCgidGltZXN0YW1wIiksIHZhbHVlKTsKICAgICB9CiAKLSAgICB2b2lkIHNldFZh
bHVlcyhSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQorICAgIHZvaWQg
c2V0VmFsdWVzKFJlZlB0cjxKU09OOjpPYmplY3Q+IHZhbHVlKQogICAgIHsKICAgICAgICAgSW5z
cGVjdG9yT2JqZWN0QmFzZTo6c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgidmFsdWVzIiksIFdURk1v
dmUodmFsdWUpKTsKICAgICB9CiAKLSAgICB2b2lkIHNldFBheWxvYWQoUmVmUHRyPEluc3BlY3Rv
cjo6SW5zcGVjdG9yVmFsdWU+IHZhbHVlKQorICAgIHZvaWQgc2V0UGF5bG9hZChSZWZQdHI8SlNP
Tjo6VmFsdWU+IHZhbHVlKQogICAgIHsKICAgICAgICAgSW5zcGVjdG9yT2JqZWN0QmFzZTo6c2V0
VmFsdWUoQVNDSUlMaXRlcmFsKCJwYXlsb2FkIiksIFdURk1vdmUodmFsdWUpKTsKICAgICB9CkBA
IC01MjAsNyArNTIwLDcgQEAgcHVibGljOgogICAgIH0KIH07CiAKLWNsYXNzIFBhcmFtZXRlckJ1
bmRsZSA6IHB1YmxpYyBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdEJhc2UgeworY2xhc3MgUGFy
YW1ldGVyQnVuZGxlIDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgewogcHVibGljOgogICAgIC8v
IE5hbWVkIGFmdGVyIHByb3BlcnR5IG5hbWUgJ2RpcmVjdGlvbmFsaXR5JyB3aGlsZSBnZW5lcmF0
aW5nIFBhcmFtZXRlckJ1bmRsZS4KICAgICBlbnVtIGNsYXNzIERpcmVjdGlvbmFsaXR5IHsKQEAg
LTU5NCwxNCArNTk0LDE0IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8
VGltZXN0YW1wU2V0PigpOwogICAgICAgICB9CiAKLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IFZh
bHVlc1NldD4mIHNldFZhbHVlcyhSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IHZh
bHVlKQorICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVmFsdWVzU2V0PiYgc2V0VmFsdWVzKFJlZlB0
cjxKU09OOjpPYmplY3Q+IHZhbHVlKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FT
U0VSVCghKFNUQVRFICYgVmFsdWVzU2V0KSwgcHJvcGVydHlfdmFsdWVzX2FscmVhZHlfc2V0KTsK
ICAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJ2YWx1ZXMiKSwg
dmFsdWUpOwogICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxWYWx1ZXNTZXQ+KCk7CiAgICAg
ICAgIH0KIAotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgUGF5bG9hZFNldD4mIHNldFBheWxvYWQo
UmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+IHZhbHVlKQorICAgICAgICBCdWlsZGVy
PFNUQVRFIHwgUGF5bG9hZFNldD4mIHNldFBheWxvYWQoUmVmUHRyPEpTT046OlZhbHVlPiB2YWx1
ZSkKICAgICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFBheWxv
YWRTZXQpLCBwcm9wZXJ0eV9wYXlsb2FkX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgIG1fcmVz
dWx0LT5zZXRWYWx1ZShBU0NJSUxpdGVyYWwoInBheWxvYWQiKSwgdmFsdWUpOwpAQCAtNjUzLDcg
KzY1Myw3IEBAIHB1YmxpYzoKIH07CiAKIC8qIENvbmZsaWN0ZWQgbmFtZXMgbWF5IGNhdXNlIGdl
bmVyYXRlZCBnZXR0ZXJzL3NldHRlcnMgdG8gY2xhc2ggd2l0aCBidWlsdC1pbiBJbnNwZWN0b3JP
YmplY3QgbWV0aG9kcy4gKi8KLWNsYXNzIE9iamVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHMg
OiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3RCYXNlIHsKK2NsYXNzIE9iamVjdFdp
dGhQcm9wZXJ0eU5hbWVDb25mbGljdHMgOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7CiBwdWJs
aWM6CiAgICAgZW51bSB7CiAgICAgICAgIE5vRmllbGRzU2V0ID0gMCwKQEAgLTc0Nyw3ICs3NDcs
NyBAQCBwdWJsaWM6CiB9IC8vIERhdGFiYXNlCiAKIG5hbWVzcGFjZSBUZXN0IHsKLWNsYXNzIFBh
cmFtZXRlckJ1bmRsZSA6IHB1YmxpYyBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdEJhc2Ugewor
Y2xhc3MgUGFyYW1ldGVyQnVuZGxlIDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgewogcHVibGlj
OgogICAgIC8vIE5hbWVkIGFmdGVyIHByb3BlcnR5IG5hbWUgJ2RpcmVjdGlvbmFsaXR5JyB3aGls
ZSBnZW5lcmF0aW5nIFBhcmFtZXRlckJ1bmRsZS4KICAgICBlbnVtIGNsYXNzIERpcmVjdGlvbmFs
aXR5IHsKQEAgLTgyMCwxNCArODIwLDE0IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiBj
YXN0U3RhdGU8VGltZXN0YW1wU2V0PigpOwogICAgICAgICB9CiAKLSAgICAgICAgQnVpbGRlcjxT
VEFURSB8IFZhbHVlc1NldD4mIHNldFZhbHVlcyhSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JP
YmplY3Q+IHZhbHVlKQorICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVmFsdWVzU2V0PiYgc2V0VmFs
dWVzKFJlZlB0cjxKU09OOjpPYmplY3Q+IHZhbHVlKQogICAgICAgICB7CiAgICAgICAgICAgICBD
T01QSUxFX0FTU0VSVCghKFNUQVRFICYgVmFsdWVzU2V0KSwgcHJvcGVydHlfdmFsdWVzX2FscmVh
ZHlfc2V0KTsKICAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJ2
YWx1ZXMiKSwgdmFsdWUpOwogICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxWYWx1ZXNTZXQ+
KCk7CiAgICAgICAgIH0KIAotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgUGF5bG9hZFNldD4mIHNl
dFBheWxvYWQoUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+IHZhbHVlKQorICAgICAg
ICBCdWlsZGVyPFNUQVRFIHwgUGF5bG9hZFNldD4mIHNldFBheWxvYWQoUmVmUHRyPEpTT046OlZh
bHVlPiB2YWx1ZSkKICAgICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFU
RSAmIFBheWxvYWRTZXQpLCBwcm9wZXJ0eV9wYXlsb2FkX2FscmVhZHlfc2V0KTsKICAgICAgICAg
ICAgIG1fcmVzdWx0LT5zZXRWYWx1ZShBU0NJSUxpdGVyYWwoInBheWxvYWQiKSwgdmFsdWUpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2dlbmVyaWMvZXhwZWN0ZWQvdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uLXJlc3Vs
dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmlj
L2V4cGVjdGVkL3R5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbi1yZXN1bHQKaW5kZXgg
MWYyMjE1MDJjZGUyNGY1OTU5MTJlYzdiMDA3MzI1ZWEzYTA0MjdlOS4uM2IzMTY0N2RiNzEzNjRk
ZTNhZTdjN2YwOWI0Y2JjMzcyYmQ0MWEzNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvdHlwZS1yZXF1aXJp
bmctcnVudGltZS1jYXN0cy5qc29uLXJlc3VsdAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC90eXBlLXJlcXVpcmluZy1y
dW50aW1lLWNhc3RzLmpzb24tcmVzdWx0CkBAIC0zNDgsNyArMzQ4LDcgQEAgdGVtcGxhdGU8dHlw
ZW5hbWUgVD4gU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKFQgZW51bVZhbHVlKQogCiBuYW1l
c3BhY2UgVGVzdCB7CiAvKiBBIGR1bW15IHR5cGUgdGhhdCByZXF1aXJlcyBydW50aW1lIGNhc3Rz
LCBhbmQgZm9yY2VzIG5vbi1wcmltaXRpdmUgcmVmZXJlbmNlZCB0eXBlcyB0byBhbHNvIGVtaXQg
cnVudGltZSBjYXN0IGhlbHBlcnMuICovCi1jbGFzcyBUeXBlTmVlZGluZ0Nhc3QgOiBwdWJsaWMg
SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3RCYXNlIHsKK2NsYXNzIFR5cGVOZWVkaW5nQ2FzdCA6
IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKIHB1YmxpYzoKICAgICBlbnVtIHsKICAgICAgICAg
Tm9GaWVsZHNTZXQgPSAwLApAQCAtNDUzLDcgKzQ1Myw3IEBAIGVudW0gY2xhc3MgQ2FzdGVkQW5p
bWFscyB7CiAgICAgQ3Jvd3MgPSAyLAogICAgIEZsYW1pbmdvcyA9IDMsCiB9OyAvLyBlbnVtIGNs
YXNzIENhc3RlZEFuaW1hbHMKLWNsYXNzIFJlY3Vyc2l2ZU9iamVjdDEgOiBwdWJsaWMgSW5zcGVj
dG9yOjpJbnNwZWN0b3JPYmplY3RCYXNlIHsKK2NsYXNzIFJlY3Vyc2l2ZU9iamVjdDEgOiBwdWJs
aWMgSlNPTjo6T2JqZWN0QmFzZSB7CiBwdWJsaWM6CiAgICAgZW51bSB7CiAgICAgICAgIE5vRmll
bGRzU2V0ID0gMCwKQEAgLTUwNCw3ICs1MDQsNyBAQCBwdWJsaWM6CiAgICAgfQogfTsKIAotY2xh
c3MgUmVjdXJzaXZlT2JqZWN0MiA6IHB1YmxpYyBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdEJh
c2UgeworY2xhc3MgUmVjdXJzaXZlT2JqZWN0MiA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsK
IHB1YmxpYzoKICAgICBlbnVtIHsKICAgICAgICAgTm9GaWVsZHNTZXQgPSAwLApAQCAtNTU5LDIz
ICs1NTksMjMgQEAgcHVibGljOgogCiB0ZW1wbGF0ZTw+IHN0cnVjdCBCaW5kaW5nVHJhaXRzPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM+IHsKICNpZiAhQVNTRVJUX0RJ
U0FCTEVECi1zdGF0aWMgdm9pZCBhc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShJbnNwZWN0b3I6
Okluc3BlY3RvclZhbHVlKik7CitzdGF0aWMgdm9pZCBhc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlw
ZShKU09OOjpWYWx1ZSopOwogI2VuZGlmIC8vICFBU1NFUlRfRElTQUJMRUQKIH07CiB0ZW1wbGF0
ZTw+IHN0cnVjdCBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlR5cGVO
ZWVkaW5nQ2FzdD4gewotc3RhdGljIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpU
eXBlTmVlZGluZ0Nhc3Q+IHJ1bnRpbWVDYXN0KFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvclZh
bHVlPiYmIHZhbHVlKTsKK3N0YXRpYyBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6
VHlwZU5lZWRpbmdDYXN0PiBydW50aW1lQ2FzdChSZWZQdHI8SlNPTjo6VmFsdWU+JiYgdmFsdWUp
OwogI2lmICFBU1NFUlRfRElTQUJMRUQKLXN0YXRpYyB2b2lkIGFzc2VydFZhbHVlSGFzRXhwZWN0
ZWRUeXBlKEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUqKTsKK3N0YXRpYyB2b2lkIGFzc2VydFZh
bHVlSGFzRXhwZWN0ZWRUeXBlKEpTT046OlZhbHVlKik7CiAjZW5kaWYgLy8gIUFTU0VSVF9ESVNB
QkxFRAogfTsKIHRlbXBsYXRlPD4gc3RydWN0IEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90
b2NvbDo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0MT4gewogI2lmICFBU1NFUlRfRElTQUJMRUQKLXN0
YXRpYyB2b2lkIGFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKEluc3BlY3Rvcjo6SW5zcGVjdG9y
VmFsdWUqKTsKK3N0YXRpYyB2b2lkIGFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKEpTT046OlZh
bHVlKik7CiAjZW5kaWYgLy8gIUFTU0VSVF9ESVNBQkxFRAogfTsKIHRlbXBsYXRlPD4gc3RydWN0
IEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0
Mj4gewogI2lmICFBU1NFUlRfRElTQUJMRUQKLXN0YXRpYyB2b2lkIGFzc2VydFZhbHVlSGFzRXhw
ZWN0ZWRUeXBlKEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUqKTsKK3N0YXRpYyB2b2lkIGFzc2Vy
dFZhbHVlSGFzRXhwZWN0ZWRUeXBlKEpTT046OlZhbHVlKik7CiAjZW5kaWYgLy8gIUFTU0VSVF9E
SVNBQkxFRAogfTsKIApAQCAtNjkzLDcgKzY5Myw3IEBAIHN0ZDo6b3B0aW9uYWw8SW5zcGVjdG9y
OjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFscz4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5n
CiAKIAogI2lmICFBU1NFUlRfRElTQUJMRUQKLXZvaWQgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6
OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzPjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5
cGUoSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSogdmFsdWUpCit2b2lkIEJpbmRpbmdUcmFpdHM8
SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFscz46OmFzc2VydFZhbHVlSGFz
RXhwZWN0ZWRUeXBlKEpTT046OlZhbHVlKiB2YWx1ZSkKIHsKICAgICBBU1NFUlRfQVJHKHZhbHVl
LCB2YWx1ZSk7CiAgICAgU3RyaW5nIHJlc3VsdDsKQEAgLTcwNCw3ICs3MDQsNyBAQCB2b2lkIEJp
bmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFscz46OmFz
c2VydFZhbHVlSGFzRXhwZQogI2VuZGlmIC8vICFBU1NFUlRfRElTQUJMRUQKIAogI2lmICFBU1NF
UlRfRElTQUJMRUQKLXZvaWQgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0
OjpUeXBlTmVlZGluZ0Nhc3Q+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShJbnNwZWN0b3I6
Okluc3BlY3RvclZhbHVlKiB2YWx1ZSkKK3ZvaWQgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlBy
b3RvY29sOjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3Q+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlw
ZShKU09OOjpWYWx1ZSogdmFsdWUpCiB7CiAgICAgQVNTRVJUX0FSRyh2YWx1ZSwgdmFsdWUpOwog
ICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG9iamVjdDsKQEAgLTc1Niw3ICs3NTYsNyBAQCBS
ZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0PiBCaW5kaW5n
VHJhaXRzPEluc3BlY3Rvcjo6UHJvdAogCiAKICNpZiAhQVNTRVJUX0RJU0FCTEVECi12b2lkIEJp
bmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0MT46
OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUqIHZh
bHVlKQordm9pZCBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlJlY3Vy
c2l2ZU9iamVjdDE+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShKU09OOjpWYWx1ZSogdmFs
dWUpCiB7CiAgICAgQVNTRVJUX0FSRyh2YWx1ZSwgdmFsdWUpOwogICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IG9iamVjdDsKQEAgLTc3Nyw3ICs3NzcsNyBAQCB2b2lkIEJpbmRpbmdUcmFpdHM8
SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0MT46OmFzc2VydFZhbHVl
SGFzRQogI2VuZGlmIC8vICFBU1NFUlRfRElTQUJMRUQKIAogI2lmICFBU1NFUlRfRElTQUJMRUQK
LXZvaWQgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpSZWN1cnNpdmVP
YmplY3QyPjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoSW5zcGVjdG9yOjpJbnNwZWN0b3JW
YWx1ZSogdmFsdWUpCit2b2lkIEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVz
dDo6UmVjdXJzaXZlT2JqZWN0Mj46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKEpTT046OlZh
bHVlKiB2YWx1ZSkKIHsKICAgICBBU1NFUlRfQVJHKHZhbHVlLCB2YWx1ZSk7CiAgICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gb2JqZWN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvdHlwZS13aXRoLW9w
ZW4tcGFyYW1ldGVycy5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL3R5cGUtd2l0aC1vcGVuLXBhcmFtZXRl
cnMuanNvbi1yZXN1bHQKaW5kZXggOGM4ZjYzNDM2ZDhjNWE2NjcxMzIwNWI0MWNjM2QwNGY4YWJh
NmZjZi4uZTI0ZDAzMGExMjc3MTkwMDJjNmJkMWYzMDRhM2M3MTc0MmY3NzZjNyAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMv
ZXhwZWN0ZWQvdHlwZS13aXRoLW9wZW4tcGFyYW1ldGVycy5qc29uLXJlc3VsdAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3Rl
ZC90eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0CkBAIC0zMjQsNyArMzI0LDcg
QEAgY2xhc3MgT3BlblBhcmFtZXRlcnM7CiAKIAogbmFtZXNwYWNlIFRlc3QgewotY2xhc3MgTm9P
cGVuUGFyYW1ldGVycyA6IHB1YmxpYyBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdEJhc2Ugewor
Y2xhc3MgTm9PcGVuUGFyYW1ldGVycyA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKIHB1Ymxp
YzoKICAgICBlbnVtIHsKICAgICAgICAgTm9GaWVsZHNTZXQgPSAwLApAQCAtMzg4LDcgKzM4OCw3
IEBAIHB1YmxpYzoKICAgICB9CiB9OwogCi1jbGFzcyBPcGVuUGFyYW1ldGVycyA6IHB1YmxpYyBJ
bnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCB7CitjbGFzcyBPcGVuUGFyYW1ldGVycyA6IHB1Ymxp
YyBKU09OOjpPYmplY3QgewogcHVibGljOgogICAgIGVudW0gewogICAgICAgICBOb0ZpZWxkc1Nl
dCA9IDAsCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvbWFjL2V4cGVjdGVkL2RlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24t
cmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL21h
Yy9leHBlY3RlZC9kZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uLXJlc3VsdAppbmRl
eCAxNzBkNTdjMGFiZjUxZDIxYWYyYzhjZmI4ZmVlMzExOGI4ZDRjYjMzLi4zN2Q0YmE3ZjBhYjVl
NmY3Yjk4OTZlNmRmYzZiMDlkZjg1Y2RkY2FhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvbWFjL2V4cGVjdGVkL2RlZmluaXRpb25zLXdp
dGgtbWFjLXBsYXRmb3JtLmpzb24tcmVzdWx0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9tYWMvZXhwZWN0ZWQvZGVmaW5pdGlvbnMtd2l0aC1tYWMt
cGxhdGZvcm0uanNvbi1yZXN1bHQKQEAgLTQxOSw3ICs0MTksNyBAQCBjbGFzcyBOZXR3b3JrRXJy
b3I7CiAKIAogbmFtZXNwYWNlIE5ldHdvcmsgewotY2xhc3MgTmV0d29ya0Vycm9yIDogcHVibGlj
IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0QmFzZSB7CitjbGFzcyBOZXR3b3JrRXJyb3IgOiBw
dWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7CiBwdWJsaWM6CiAgICAgZW51bSB7CiAgICAgICAgIE5v
RmllbGRzU2V0ID0gMCwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9yZXBsYXkv
RW5jb2RlZFZhbHVlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9yZXBsYXkvRW5jb2RlZFZh
bHVlLmNwcAppbmRleCA3OTI0NTI4OTcyNGQ5ZWYyNWNjYWNkMGYyZGI5N2ZkYmNjYjFlMTAxLi42
NGI2MmZmNjY3ZGU1YjdiZTUyMmQ1ZDhjODFmOTc1ZjRlM2QwZjY2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcmVwbGF5L0VuY29kZWRWYWx1ZS5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3JlcGxheS9FbmNvZGVkVmFsdWUuY3BwCkBAIC0zNywxOCArMzcsMTggQEAg
dXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKIAogbmFtZXNwYWNlIEpTQyB7CiAKLVJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IEVuY29kZWRWYWx1ZTo6YXNPYmplY3QoKQorUmVmUHRyPEpTT046Ok9i
amVjdD4gRW5jb2RlZFZhbHVlOjphc09iamVjdCgpCiB7Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gcmVzdWx0OworICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHJlc3VsdDsKICAgICBib29s
IGNhc3RTdWNjZWVkZWQgPSBtX3ZhbHVlLT5hc09iamVjdChyZXN1bHQpOwogICAgIEFTU0VSVF9V
TlVTRUQoY2FzdFN1Y2NlZWRlZCwgY2FzdFN1Y2NlZWRlZCk7CiAKICAgICByZXR1cm4gcmVzdWx0
OwogfQogCi1SZWZQdHI8SW5zcGVjdG9yQXJyYXk+IEVuY29kZWRWYWx1ZTo6YXNBcnJheSgpCitS
ZWZQdHI8SlNPTjo6QXJyYXk+IEVuY29kZWRWYWx1ZTo6YXNBcnJheSgpCiB7Ci0gICAgUmVmUHRy
PEluc3BlY3RvckFycmF5PiByZXN1bHQ7CisgICAgUmVmUHRyPEpTT046OkFycmF5PiByZXN1bHQ7
CiAgICAgYm9vbCBjYXN0U3VjY2VlZGVkID0gbV92YWx1ZS0+YXNBcnJheShyZXN1bHQpOwogICAg
IEFTU0VSVF9VTlVTRUQoY2FzdFN1Y2NlZWRlZCwgY2FzdFN1Y2NlZWRlZCk7CiAKQEAgLTE4Nyw3
ICsxODcsNyBAQCB2b2lkIEVuY29kZWRWYWx1ZTo6YXBwZW5kPEVuY29kZWRWYWx1ZT4oY29uc3Qg
dHlwZW5hbWUgRW5jb2RpbmdUcmFpdHM8RW5jb2RlZFZhbAogdGVtcGxhdGU8PgogYm9vbCBFbmNv
ZGVkVmFsdWU6OmdldDxFbmNvZGVkVmFsdWU+KGNvbnN0IFN0cmluZyYga2V5LCB0eXBlbmFtZSBF
bmNvZGluZ1RyYWl0czxFbmNvZGVkVmFsdWU+OjpEZWNvZGVkVHlwZSYgZGVjb2RlZFZhbHVlKQog
ewotICAgIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPiB2YWx1ZTsKKyAgICBSZWZQ
dHI8SlNPTjo6VmFsdWU+IHZhbHVlOwogICAgIGlmICghYXNPYmplY3QoKS0+Z2V0VmFsdWUoa2V5
LCB2YWx1ZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3JlcGxheS9FbmNvZGVkVmFsdWUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9yZXBsYXkvRW5jb2RlZFZhbHVlLmgKaW5kZXggOWZiMTc4MjYxNzc5NDUyNDFjNzFjZTIxYzQ4
ZTBiY2E5Y2EzMzU2NC4uZjA5MWE3ZjM1Y2FjNmVlNmQ3ZjdlZDI5MjY3NmQyNzY4ZjQyMGYzZSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3JlcGxheS9FbmNvZGVkVmFsdWUuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcmVwbGF5L0VuY29kZWRWYWx1ZS5oCkBAIC00MCw3
ICs0MCw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBFbmNvZGluZ1RyYWl0czsKIAog
Y2xhc3MgRW5jb2RlZFZhbHVlIGZpbmFsIHsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBFbmNvZGVk
VmFsdWUoUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+JiYgdmFsdWUpCisgICAgZXhw
bGljaXQgRW5jb2RlZFZhbHVlKFJlZlB0cjxKU09OOjpWYWx1ZT4mJiB2YWx1ZSkKICAgICAgICAg
OiBtX3ZhbHVlKHZhbHVlKSB7IH0KIAogICAgIEVuY29kZWRWYWx1ZSgpCkBAIC00OCwyMiArNDgs
MjIgQEAgcHVibGljOgogCiAgICAgc3RhdGljIEVuY29kZWRWYWx1ZSBjcmVhdGVPYmplY3QoKQog
ICAgIHsKLSAgICAgICAgcmV0dXJuIEVuY29kZWRWYWx1ZShJbnNwZWN0b3I6Okluc3BlY3Rvck9i
amVjdDo6Y3JlYXRlKCkpOworICAgICAgICByZXR1cm4gRW5jb2RlZFZhbHVlKEpTT046Ok9iamVj
dDo6Y3JlYXRlKCkpOwogICAgIH0KIAogICAgIHN0YXRpYyBFbmNvZGVkVmFsdWUgY3JlYXRlQXJy
YXkoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIEVuY29kZWRWYWx1ZShJbnNwZWN0b3I6Okluc3Bl
Y3RvckFycmF5OjpjcmVhdGUoKSk7CisgICAgICAgIHJldHVybiBFbmNvZGVkVmFsdWUoSlNPTjo6
QXJyYXk6OmNyZWF0ZSgpKTsKICAgICB9CiAKICAgICBzdGF0aWMgRW5jb2RlZFZhbHVlIGNyZWF0
ZVN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIEVuY29k
ZWRWYWx1ZShJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlOjpjcmVhdGUodmFsdWUpKTsKKyAgICAg
ICAgcmV0dXJuIEVuY29kZWRWYWx1ZShKU09OOjpWYWx1ZTo6Y3JlYXRlKHZhbHVlKSk7CiAgICAg
fQogCiAgICAgc3RhdGljIEVuY29kZWRWYWx1ZSBjcmVhdGVTdHJpbmcoY29uc3QgY2hhciogdmFs
dWUpCiAgICAgewotICAgICAgICByZXR1cm4gRW5jb2RlZFZhbHVlKEluc3BlY3Rvcjo6SW5zcGVj
dG9yVmFsdWU6OmNyZWF0ZSh2YWx1ZSkpOworICAgICAgICByZXR1cm4gRW5jb2RlZFZhbHVlKEpT
T046OlZhbHVlOjpjcmVhdGUodmFsdWUpKTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgpAQCAtNzcsMTEgKzc3LDExIEBAIHB1YmxpYzoKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFQ+IFQgY29udmVydFRvKCk7CiAKLSAgICBKU19FWFBPUlRfUFJJVkFURSBSZWZQdHI8SW5zcGVj
dG9yOjpJbnNwZWN0b3JPYmplY3Q+IGFzT2JqZWN0KCk7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUg
UmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXk+IGFzQXJyYXkoKTsKKyAgICBKU19FWFBP
UlRfUFJJVkFURSBSZWZQdHI8SlNPTjo6T2JqZWN0PiBhc09iamVjdCgpOworICAgIEpTX0VYUE9S
VF9QUklWQVRFIFJlZlB0cjxKU09OOjpBcnJheT4gYXNBcnJheSgpOwogCiBwcml2YXRlOgotICAg
IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPiBtX3ZhbHVlOworICAgIFJlZlB0cjxK
U09OOjpWYWx1ZT4gbV92YWx1ZTsKIH07CiAKIHRlbXBsYXRlPD4gSlNfRVhQT1JUX1BSSVZBVEUg
Ym9vbCBFbmNvZGVkVmFsdWU6OmNvbnZlcnRUbzxib29sPigpOwpAQCAtMTE4LDEwICsxMTgsMTAg
QEAgc3RydWN0IEVuY29kaW5nVHJhaXRzPFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZs
b3dIYW5kbGVyPj4gewogCiAgICAgc3RhdGljIGJvb2wgZGVjb2RlVmFsdWUoRW5jb2RlZFZhbHVl
JiBlbmNvZGVkVmVjdG9yLCBEZWNvZGVkVHlwZSYgZGVjb2RlZFZhbHVlKQogICAgIHsKLSAgICAg
ICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXk+IGluc3BlY3RvckFycmF5ID0gZW5j
b2RlZFZlY3Rvci5hc0FycmF5KCk7Ci0gICAgICAgIGRlY29kZWRWYWx1ZSA9IFZlY3Rvcjx0eXBl
bmFtZSBFbmNvZGluZ1RyYWl0czxUPjo6RGVjb2RlZFR5cGUsIGlubGluZUNhcGFjaXR5LCBPdmVy
Zmxvd0hhbmRsZXI+KGluc3BlY3RvckFycmF5LT5sZW5ndGgoKSk7Ci0gICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgaW5zcGVjdG9yQXJyYXktPmxlbmd0aCgpOyArK2kpIHsKLSAgICAgICAg
ICAgIEVuY29kZWRWYWx1ZSBlbmNvZGVkRWxlbWVudChpbnNwZWN0b3JBcnJheS0+Z2V0KGkpKTsK
KyAgICAgICAgUmVmUHRyPEpTT046OkFycmF5PiBhcnJheSA9IGVuY29kZWRWZWN0b3IuYXNBcnJh
eSgpOworICAgICAgICBkZWNvZGVkVmFsdWUgPSBWZWN0b3I8dHlwZW5hbWUgRW5jb2RpbmdUcmFp
dHM8VD46OkRlY29kZWRUeXBlLCBpbmxpbmVDYXBhY2l0eSwgT3ZlcmZsb3dIYW5kbGVyPihhcnJh
eS0+bGVuZ3RoKCkpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFycmF5LT5sZW5n
dGgoKTsgKytpKSB7CisgICAgICAgICAgICBFbmNvZGVkVmFsdWUgZW5jb2RlZEVsZW1lbnQoYXJy
YXktPmdldChpKSk7CiAgICAgICAgICAgICBpZiAoIUVuY29kaW5nVHJhaXRzPFQ+OjpkZWNvZGVW
YWx1ZShlbmNvZGVkRWxlbWVudCwgZGVjb2RlZFZhbHVlLmF0KGkpKSkKICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>313529</attachid>
            <date>2017-06-21 10:34:38 -0700</date>
            <delta_ts>2017-11-03 06:56:14 -0700</delta_ts>
            <desc>Patch v1.1</desc>
            <filename>bug-173619-20170621103437.patch</filename>
            <type>text/plain</type>
            <size>111434</size>
            <attacher name="Blaze Burg">bburg</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE4NjAzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAx
ZmE1YjY0ZGM4YTc4OTY3ZGU0YmYwOGUxYWVhMWQ4OGMyODJjYmI3Li5jM2QzNWNlYTgwNTViMTc0
OGVlNjEzYjljNGRhODFlODY4MWNjYTFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw1NiBAQAorMjAxNy0wNi0yMCAgQnJpYW4gQnVyZyAgPGJidXJnQGFwcGxlLmNvbT4KKwor
ICAgICAgICBXZWIgSW5zcGVjdG9yOiB1c2UgSlNPTjo6e0FycmF5LE9iamVjdCxWYWx1ZX0gaW5z
dGVhZCBvZiBJbnNwZWN0b3J7QXJyYXksT2JqZWN0LFZhbHVlfQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTczNjE5CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRXZlbnR1YWxseSBhbGwgY2xhc3NlcyB1c2Vk
IGZvciBvdXIgSlNPTi1SUEMgbWVzc2FnZSBwYXNzaW5nIHNob3VsZCBiZSBvdXRzaWRlCisgICAg
ICAgIG9mIHRoZSBJbnNwZWN0b3IgbmFtZXNwYWNlIHNpbmNlIHRoZSBwcm90b2NvbCBpcyB1c2Vk
IG91dHNpZGUgb2YgSW5zcGVjdG9yIGNvZGUuCisgICAgICAgIFRoaXMgd2lsbCBhbHNvIGFsbG93
IHVzIHRvIHVuaWZ5IHRoZSBwcmltaXRpdmUgSlNPTiB0eXBlcyB3aXRoIHBhcmFtZXRlcmljIHR5
cGVzCisgICAgICAgIGxpa2UgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8VD4gYW5kIG90aGVy
IHByb3RvY29sLXJlbGF0ZWQgdHlwZXMgd2hpY2ggZG9uJ3QKKyAgICAgICAgbmVlZCB0byBiZSBp
biB0aGUgSW5zcGVjdG9yIG5hbWVzcGFjZS4KKworICAgICAgICBTdGFydCB0aGlzIHJlZmFjdG9y
aW5nIG9mZiBieSBtYWtpbmcgSlNPTjo6VmFsdWUgYSB0eXBlZGVmIGZvciBJbnNwZWN0b3JWYWx1
ZS4gSW4gZm9sbG93aW5nCisgICAgICAgIHBhdGNoZXMsIG90aGVyIGNsaWVudHMgd2lsbCBtb3Zl
IHRvIHVzZSBKU09OOjpWYWx1ZSBhbmQgZnJpZW5kcy4gV2hlbiBhbGwgdXNlcyBhcmUKKyAgICAg
ICAgY2hhbmdlZCwgdGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbiB3aWxsIGJlIHJlbmFtZWQuIFRo
aXMgcGF0Y2gganVzdCBmb2N1c2VzIG9uIHRoZSB0eXBlZGVmCisgICAgICAgIGFuZCBtYWtpbmcg
Y2hhbmdlcyBpbiBnZW5lcmF0ZWQgcHJvdG9jb2wgY29kZS4KKworICAgICAgICAqIGluc3BlY3Rv
ci9JbnNwZWN0b3JWYWx1ZXMuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1
ZXMuaDoKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2NwcF9nZW5lcmF0b3Iu
cHk6CisgICAgICAgIChDcHBHZW5lcmF0b3IuY3BwX3Byb3RvY29sX3R5cGVfZm9yX3R5cGUpOgor
ICAgICAgICAoQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl91bmNoZWNrZWRfZm9ybWFsX2luX3Bh
cmFtZXRlcik6CisgICAgICAgIChDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX3R5cGVfd2l0aF9u
YW1lKToKKyAgICAgICAgKENwcEdlbmVyYXRvci5jcHBfdHlwZV9mb3Jfc3RhY2tfaW5fcGFyYW1l
dGVyKToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2NwcF9nZW5lcmF0b3Jf
dGVtcGxhdGVzLnB5OgorICAgICAgICAodm9pZCk6CisgICAgICAgICogaW5zcGVjdG9yL3Njcmlw
dHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfcHJvdG9jb2xfdHlwZXNfaGVhZGVyLnB5OgorICAgICAg
ICAoX2dlbmVyYXRlX2NsYXNzX2Zvcl9vYmplY3RfZGVjbGFyYXRpb24pOgorICAgICAgICAoX2dl
bmVyYXRlX2ZvcndhcmRfZGVjbGFyYXRpb25zX2Zvcl9iaW5kaW5nX3RyYWl0cyk6CisgICAgICAg
ICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfcHJvdG9jb2xfdHlwZXNf
aW1wbGVtZW50YXRpb24ucHk6CisgICAgICAgIChDcHBQcm90b2NvbFR5cGVzSW1wbGVtZW50YXRp
b25HZW5lcmF0b3IuX2dlbmVyYXRlX2Fzc2VydGlvbl9mb3Jfb2JqZWN0X2RlY2xhcmF0aW9uKToK
KyAgICAgICAgKENwcFByb3RvY29sVHlwZXNJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJh
dGVfYXNzZXJ0aW9uX2Zvcl9lbnVtKToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9hbGwvZXhwZWN0ZWQvZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbi1yZXN1bHQ6
CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9jb21t
YW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uLXJlc3VsdDoKKyAgICAgICAgKiBpbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2NvbW1hbmRzLXdpdGgtb3B0aW9uYWwt
Y2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uLXJlc3VsdDoKKyAgICAgICAgKiBpbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2RvbWFpbi1hdmFpbGFiaWxpdHkuanNvbi1y
ZXN1bHQ6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3Rl
ZC9kb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24tcmVzdWx0OgorICAgICAg
ICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZW51bS12YWx1ZXMu
anNvbi1yZXN1bHQ6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9l
eHBlY3RlZC9ldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0OgorICAg
ICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZ2VuZXJhdGUt
ZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24tcmVzdWx0OgorICAgICAgICAqIGluc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvc2hhZG93ZWQtb3B0aW9uYWwtdHlw
ZS1zZXR0ZXJzLmpzb24tcmVzdWx0OgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2dlbmVyaWMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uLXJlc3Vs
dDoKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL3R5
cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbi1yZXN1bHQ6CisgICAgICAgICogaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC90eXBlLXdpdGgtb3Blbi1wYXJhbWV0
ZXJzLmpzb24tcmVzdWx0OgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVy
aWMvZXhwZWN0ZWQvd29ya2VyLXN1cHBvcnRlZC1kb21haW5zLmpzb24tcmVzdWx0OgorICAgICAg
ICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL21hYy9leHBlY3RlZC9kZWZpbml0aW9ucy13aXRo
LW1hYy1wbGF0Zm9ybS5qc29uLXJlc3VsdDoKKyAgICAgICAgKiByZXBsYXkvRW5jb2RlZFZhbHVl
LmNwcDoKKyAgICAgICAgKEpTQzo6RW5jb2RlZFZhbHVlOjphc09iamVjdCk6CisgICAgICAgIChK
U0M6OkVuY29kZWRWYWx1ZTo6YXNBcnJheSk6CisgICAgICAgIChKU0M6OkVuY29kZWRWYWx1ZTo6
Z2V0PEVuY29kZWRWYWx1ZT4pOgorICAgICAgICAqIHJlcGxheS9FbmNvZGVkVmFsdWUuaDoKKwog
MjAxNy0wNi0yMCAgS29uc3RhbnRpbiBUb2thcmV2ICA8YW5udWxlbkB5YW5kZXgucnU+CiAKICAg
ICAgICAgUmVtb3ZlIGV4Y2Vzc2l2ZSBpbmNsdWRlIGRpcmVjdGl2ZXMgZnJvbSBXVEYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmNwcApp
bmRleCAxNGZiN2U3MGQyNGEyYWMyMmUyZjdjYmU4NmRlYTRlYjExNGQ3NmVmLi45ZTdiMWQ3NjBj
MTdkZjFiYWQ5ZTg3YzMzNjUwMTU5YTFkMDUxYTExIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuY3BwCkBAIC0xLDYgKzEsNyBAQAog
LyoKICAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaAppbmRleCA2
Njg3YmJhZjY2ODI1ZGIxNjMxNjFmNjU4ODhiZjUxMzNmZDRlZDI2Li5kZWI5MDZlZDVmZTUzNDA3
MDc0NjYzNmU2MTllZGYxODY2MDFhNmYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmgKQEAgLTEsNiArMSw3IEBACiAvKgogICogQ29w
eXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKQEAgLTM5LDEyICs0MCwyNyBA
QAogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KIAotbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKK25hbWVzcGFjZSBJbnNwZWN0
b3IgewogY2xhc3MgSW5zcGVjdG9yQXJyYXk7CiBjbGFzcyBJbnNwZWN0b3JBcnJheUJhc2U7CiBj
bGFzcyBJbnNwZWN0b3JPYmplY3Q7CiBjbGFzcyBJbnNwZWN0b3JPYmplY3RCYXNlOworY2xhc3Mg
SW5zcGVjdG9yVmFsdWU7Cit9CisKK25hbWVzcGFjZSBKU09OIHsKK3R5cGVkZWYgSW5zcGVjdG9y
OjpJbnNwZWN0b3JBcnJheSBBcnJheTsKK3R5cGVkZWYgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmpl
Y3QgT2JqZWN0OwordHlwZWRlZiBJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlIFZhbHVlOworCisK
Ky8vIE5vdCB0byBiZSB1c2VkIGV4Y2VwdCBmb3IgcHJvdG9jb2wgb2JqZWN0IHN1YmNsYXNzZXMu
Cit0eXBlZGVmIEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXlCYXNlIEFycmF5QmFzZTsKK3R5cGVk
ZWYgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3RCYXNlIE9iamVjdEJhc2U7Cit9CisKK25hbWVz
cGFjZSBJbnNwZWN0b3IgewogCiBjbGFzcyBKU19FWFBPUlRfUFJJVkFURSBJbnNwZWN0b3JWYWx1
ZSA6IHB1YmxpYyBSZWZDb3VudGVkPEluc3BlY3RvclZhbHVlPiB7CiBwdWJsaWM6CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9jcHBf
Z2VuZXJhdG9yLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2Nv
ZGVnZW4vY3BwX2dlbmVyYXRvci5weQppbmRleCBjNDU5ZmNhYzNhZjcwNDkyZDZhMzBmMzdiZGRl
ZmYxYWRhNmY2N2ZjLi4wNGRkZmNiOGRhODkwNWNkNjYxNTdjMTNlMGM0MTc1OWYxNWUxOTMwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdl
bi9jcHBfZ2VuZXJhdG9yLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9jb2RlZ2VuL2NwcF9nZW5lcmF0b3IucHkKQEAgLTM4LDkgKzM4LDkgQEAgX1BSSU1J
VElWRV9UT19DUFBfTkFNRV9NQVAgPSB7CiAgICAgJ2ludGVnZXInOiAnaW50JywKICAgICAnbnVt
YmVyJzogJ2RvdWJsZScsCiAgICAgJ3N0cmluZyc6ICdTdHJpbmcnLAotICAgICdvYmplY3QnOiAn
SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QnLAotICAgICdhcnJheSc6ICdJbnNwZWN0b3I6Oklu
c3BlY3RvckFycmF5JywKLSAgICAnYW55JzogJ0luc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUnCisg
ICAgJ29iamVjdCc6ICdKU09OOjpPYmplY3QnLAorICAgICdhcnJheSc6ICdKU09OOjpBcnJheScs
CisgICAgJ2FueSc6ICdKU09OOjpWYWx1ZScKIH0KIAogY2xhc3MgQ3BwR2VuZXJhdG9yKEdlbmVy
YXRvcik6CkBAIC05OCw3ICs5OCw3IEBAIGNsYXNzIENwcEdlbmVyYXRvcihHZW5lcmF0b3IpOgog
ICAgIEBzdGF0aWNtZXRob2QKICAgICBkZWYgY3BwX3Byb3RvY29sX3R5cGVfZm9yX3R5cGUoX3R5
cGUpOgogICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBPYmplY3RUeXBlKSBhbmQgbGVuKF90
eXBlLm1lbWJlcnMpID09IDA6Ci0gICAgICAgICAgICByZXR1cm4gJ0luc3BlY3Rvcjo6SW5zcGVj
dG9yT2JqZWN0JworICAgICAgICAgICAgcmV0dXJuICdKU09OOjpPYmplY3QnCiAgICAgICAgIGlm
IGlzaW5zdGFuY2UoX3R5cGUsIEFycmF5VHlwZSk6CiAgICAgICAgICAgICBpZiBfdHlwZS5yYXdf
bmFtZSgpIGlzIE5vbmU6ICAjIE90aGVyd2lzZSwgZmFsbCB0aHJvdWdoIGFuZCB1c2UgdHlwZWRl
ZidkIG5hbWUuCiAgICAgICAgICAgICAgICAgcmV0dXJuICdJbnNwZWN0b3I6OlByb3RvY29sOjpB
cnJheTwlcz4nICUgQ3BwR2VuZXJhdG9yLmNwcF9wcm90b2NvbF90eXBlX2Zvcl90eXBlKF90eXBl
LmVsZW1lbnRfdHlwZSkKQEAgLTEyNSwxMyArMTI1LDEzIEBAIGNsYXNzIENwcEdlbmVyYXRvcihH
ZW5lcmF0b3IpOgogCiAgICAgICAgICMgVGhpcyBoYW5kbGVzIHRoZSAnYW55JyB0eXBlIGFuZCBv
YmplY3RzIHdpdGggZGVmaW5lZCBwcm9wZXJ0aWVzLgogICAgICAgICBpZiBpc2luc3RhbmNlKF90
eXBlLCBPYmplY3RUeXBlKSBvciBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpIGlzICdvYmplY3QnOgot
ICAgICAgICAgICAgY3BwX25hbWUgPSAnSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QnCisgICAg
ICAgICAgICBjcHBfbmFtZSA9ICdKU09OOjpPYmplY3QnCiAgICAgICAgICAgICBpZiBwYXJhbWV0
ZXIuaXNfb3B0aW9uYWw6CiAgICAgICAgICAgICAgICAgcmV0dXJuICdjb25zdCAlcyonICUgY3Bw
X25hbWUKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgcmV0dXJuICdjb25zdCAl
cyYnICUgY3BwX25hbWUKICAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgQXJyYXlUeXBlKToK
LSAgICAgICAgICAgIGNwcF9uYW1lID0gJ0luc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXknCisgICAg
ICAgICAgICBjcHBfbmFtZSA9ICdKU09OOjpBcnJheScKICAgICAgICAgICAgIGlmIHBhcmFtZXRl
ci5pc19vcHRpb25hbDoKICAgICAgICAgICAgICAgICByZXR1cm4gJ2NvbnN0ICVzKicgJSBjcHBf
bmFtZQogICAgICAgICAgICAgZWxzZToKQEAgLTE3Miw5ICsxNzIsOSBAQCBjbGFzcyBDcHBHZW5l
cmF0b3IoR2VuZXJhdG9yKToKICAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgUHJpbWl0aXZl
VHlwZSk6CiAgICAgICAgICAgICBjcHBfbmFtZSA9IENwcEdlbmVyYXRvci5jcHBfbmFtZV9mb3Jf
cHJpbWl0aXZlX3R5cGUoX3R5cGUpCiAgICAgICAgICAgICBpZiBfdHlwZS5xdWFsaWZpZWRfbmFt
ZSgpIGluIFsnb2JqZWN0J106Ci0gICAgICAgICAgICAgICAgcmV0dXJuICdSZWZQdHI8SW5zcGVj
dG9yOjpJbnNwZWN0b3JPYmplY3Q+JworICAgICAgICAgICAgICAgIHJldHVybiAnUmVmUHRyPEpT
T046Ok9iamVjdD4nCiAgICAgICAgICAgICBlbGlmIF90eXBlLnF1YWxpZmllZF9uYW1lKCkgaW4g
WydhbnknXToKLSAgICAgICAgICAgICAgICByZXR1cm4gJ1JlZlB0cjxJbnNwZWN0b3I6Okluc3Bl
Y3RvclZhbHVlPicKKyAgICAgICAgICAgICAgICByZXR1cm4gJ1JlZlB0cjxKU09OOjpWYWx1ZT4n
CiAgICAgICAgICAgICBlbGlmIGlzX29wdGlvbmFsOgogICAgICAgICAgICAgICAgIHJldHVybiAn
Y29uc3QgJXMqIGNvbnN0JyAlIGNwcF9uYW1lCiAgICAgICAgICAgICBlbGlmIF90eXBlLnF1YWxp
ZmllZF9uYW1lKCkgaW4gWydzdHJpbmcnXToKQEAgLTI1NCw5ICsyNTQsOSBAQCBjbGFzcyBDcHBH
ZW5lcmF0b3IoR2VuZXJhdG9yKToKICAgICAgICAgICAgIF90eXBlID0gX3R5cGUucHJpbWl0aXZl
X3R5cGUgICMgRmFsbCB0aHJvdWdoLgogCiAgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIE9i
amVjdFR5cGUpOgotICAgICAgICAgICAgcmV0dXJuICJSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0
b3JPYmplY3Q+IgorICAgICAgICAgICAgcmV0dXJuICJSZWZQdHI8SlNPTjo6T2JqZWN0PiIKICAg
ICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgQXJyYXlUeXBlKToKLSAgICAgICAgICAgIHJldHVy
biAiUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXk+IgorICAgICAgICAgICAgcmV0dXJu
ICJSZWZQdHI8SlNPTjo6QXJyYXk+IgogICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBQcmlt
aXRpdmVUeXBlKToKICAgICAgICAgICAgIGNwcF9uYW1lID0gQ3BwR2VuZXJhdG9yLmNwcF9uYW1l
X2Zvcl9wcmltaXRpdmVfdHlwZShfdHlwZSkKICAgICAgICAgICAgIGlmIF90eXBlLnF1YWxpZmll
ZF9uYW1lKCkgaW4gWydhbnknLCAnb2JqZWN0J106CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9jcHBfZ2VuZXJhdG9yX3RlbXBsYXRl
cy5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2Nw
cF9nZW5lcmF0b3JfdGVtcGxhdGVzLnB5CmluZGV4IGIyNTIzZmZlMjU2NTUyNDU1NTkzN2Y2Mzgz
OWE5MjdkNGMwN2JhMjIuLjk3OTMzMmRmZjBkMmRlZTI1NmMzN2U2NmEzNmVmNTRjMGIyOTNlZjcg
MTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2Rl
Z2VuL2NwcF9nZW5lcmF0b3JfdGVtcGxhdGVzLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2NwcF9nZW5lcmF0b3JfdGVtcGxhdGVzLnB5CkBA
IC05NSw3ICs5NSw3IEBAIHByb3RlY3RlZDoKICAgICAiIiIke2NsYXNzQW5kRXhwb3J0TWFjcm99
ICR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBTdXBwbGVtZW50
YWxCYWNrZW5kRGlzcGF0Y2hlciB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjwke2RvbWFpbk5h
bWV9QmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYsICR7ZG9tYWlu
TmFtZX1CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKLSAgICB2b2lkIGRpc3BhdGNoKGxvbmcg
cmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEluc3BlY3Rvck9iamVjdD4mJiBt
ZXNzYWdlKSBvdmVycmlkZTsKKyAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25z
dCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKSBvdmVycmlkZTsK
ICR7Y29tbWFuZERlY2xhcmF0aW9uc30KIHByaXZhdGU6CiAgICAgJHtkb21haW5OYW1lfUJhY2tl
bmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiwgJHtkb21haW5OYW1lfUJhY2tlbmREaXNw
YXRjaGVySGFuZGxlciopOwpAQCAtMTE5LDExICsxMTksMTEgQEAgcHJpdmF0ZToKICAgICB2aXJ0
dWFsIHZvaWQgJHtjb21tYW5kTmFtZX0oJHtpblBhcmFtZXRlcnN9KSA9IDA7IiIiKQogCiAgICAg
QmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvblNtYWxsU3dpdGNoID0gKAotICAgICIiInZv
aWQgJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHJlcXVlc3RJ
ZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxJbnNwZWN0b3JPYmplY3Q+JiYgbWVzc2FnZSkK
KyAgICAiIiJ2b2lkICR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9u
ZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1l
c3NhZ2UpCiB7CiAgICAgUmVmPCR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVj
dCgqdGhpcyk7CiAKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbWV0ZXJzOworICAg
IFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnM7CiAgICAgbWVzc2FnZS0+Z2V0T2JqZWN0
KEFTQ0lJTGl0ZXJhbCgicGFyYW1zIiksIHBhcmFtZXRlcnMpOwogCiAke2Rpc3BhdGNoQ2FzZXN9
CkBAIC0xMzIsMTQgKzEzMiwxNCBAQCAke2Rpc3BhdGNoQ2FzZXN9CiB9IiIiKQogCiAgICAgQmFj
a2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkxhcmdlU3dpdGNoID0gKAotIiIidm9pZCAke2Rv
bWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25z
dCBTdHJpbmcmIG1ldGhvZCwgUmVmPEluc3BlY3Rvck9iamVjdD4mJiBtZXNzYWdlKQorIiIidm9p
ZCAke2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElk
LCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKQogewog
ICAgIFJlZjwke2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOwog
Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1ldGVyczsKKyAgICBSZWZQdHI8SlNP
Tjo6T2JqZWN0PiBwYXJhbWV0ZXJzOwogICAgIG1lc3NhZ2UtPmdldE9iamVjdChBU0NJSUxpdGVy
YWwoInBhcmFtcyIpLCBwYXJhbWV0ZXJzKTsKIAotICAgIHR5cGVkZWYgdm9pZCAoJHtkb21haW5O
YW1lfUJhY2tlbmREaXNwYXRjaGVyOjoqQ2FsbEhhbmRsZXIpKGxvbmcgcmVxdWVzdElkLCBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiYmIG1lc3NhZ2UpOworICAgIHR5cGVkZWYgdm9pZCAoJHtkb21h
aW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyOjoqQ2FsbEhhbmRsZXIpKGxvbmcgcmVxdWVzdElkLCBS
ZWZQdHI8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpOwogICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJp
bmcsIENhbGxIYW5kbGVyPiBEaXNwYXRjaE1hcDsKICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8
RGlzcGF0Y2hNYXA+IGRpc3BhdGNoTWFwOwogICAgIGlmIChkaXNwYXRjaE1hcC5nZXQoKS5pc0Vt
cHR5KCkpIHsKQEAgLTE4OSw3ICsxODksNyBAQCAke2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNo
ZXI6OiR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlcgogCiB2
b2lkICR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OiR7Y2FsbGJhY2tOYW1l
fTo6c2VuZFN1Y2Nlc3MoJHtmb3JtYWxQYXJhbWV0ZXJzfSkKIHsKLSAgICBSZWY8SW5zcGVjdG9y
T2JqZWN0PiBqc29uTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVm
PEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogJHtv
dXRQYXJhbWV0ZXJBc3NpZ25tZW50c30KICAgICBDYWxsYmFja0Jhc2U6OnNlbmRTdWNjZXNzKFdU
Rk1vdmUoanNvbk1lc3NhZ2UpKTsKIH0iIiIpCkBAIC0yMDcsMTQgKzIwNywxNCBAQCBwcml2YXRl
OgogIiIiICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgICBjbGFzcyBCdWlsZGVyIHsKICAgICBw
cml2YXRlOgotICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKKyAgICAg
ICAgUmVmUHRyPEpTT046Ok9iamVjdD4gbV9yZXN1bHQ7CiAKICAgICAgICAgdGVtcGxhdGU8aW50
IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICAgewogICAg
ICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+
KHRoaXMpOwogICAgICAgICB9CiAKLSAgICAgICAgQnVpbGRlcihSZWY8Lyoke29iamVjdFR5cGV9
Ki9JbnNwZWN0b3JPYmplY3Q+JiYgb2JqZWN0KQorICAgICAgICBCdWlsZGVyKFJlZjwvKiR7b2Jq
ZWN0VHlwZX0qL0pTT046Ok9iamVjdD4mJiBvYmplY3QpCiAgICAgICAgICAgICA6IG1fcmVzdWx0
KFdURk1vdmUob2JqZWN0KSkKICAgICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
U1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7
CkBAIC0yMjcsOSArMjI3LDkgQEAgcHJpdmF0ZToKICAgICAgICAgUmVmPCR7b2JqZWN0VHlwZX0+
IHJlbGVhc2UoKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9
PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwotICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoc2l6ZW9mKCR7b2JqZWN0VHlwZX0pID09IHNpemVvZihJbnNwZWN0b3JPYmplY3Qp
LCBjYW5ub3RfY2FzdCk7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoJHtvYmpl
Y3RUeXBlfSkgPT0gc2l6ZW9mKEpTT046Ok9iamVjdCksIGNhbm5vdF9jYXN0KTsKIAotICAgICAg
ICAgICAgUmVmPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51
bGwoKTsKKyAgICAgICAgICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IG1fcmVzdWx0LnJl
bGVhc2VOb25OdWxsKCk7CiAgICAgICAgICAgICByZXR1cm4gV1RGTW92ZSgqcmVpbnRlcnByZXRf
Y2FzdDxSZWY8JHtvYmplY3RUeXBlfT4qPigmcmVzdWx0KSk7CiAgICAgICAgIH0KICAgICB9OwpA
QCAtMjQwLDE5ICsyNDAsMTkgQEAgJHtjb25zdHJ1Y3RvckV4YW1wbGV9CiAgICAgICovCiAgICAg
c3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCiAgICAgewotICAgICAgICByZXR1
cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSk7CisgICAg
ICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihKU09OOjpPYmplY3Q6OmNyZWF0ZSgpKTsK
ICAgICB9IiIiKQogCiAgICAgUHJvdG9jb2xPYmplY3RSdW50aW1lQ2FzdCA9ICgKLSIiIlJlZlB0
cjwke29iamVjdFR5cGV9PiBCaW5kaW5nVHJhaXRzPCR7b2JqZWN0VHlwZX0+OjpydW50aW1lQ2Fz
dChSZWZQdHI8SW5zcGVjdG9yVmFsdWU+JiYgdmFsdWUpCisiIiJSZWZQdHI8JHtvYmplY3RUeXBl
fT4gQmluZGluZ1RyYWl0czwke29iamVjdFR5cGV9Pjo6cnVudGltZUNhc3QoUmVmUHRyPEpTT046
OlZhbHVlPiYmIHZhbHVlKQogewotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdDsK
KyAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiByZXN1bHQ7CiAgICAgYm9vbCBjYXN0U3VjY2VlZGVk
ID0gdmFsdWUtPmFzT2JqZWN0KHJlc3VsdCk7CiAgICAgQVNTRVJUX1VOVVNFRChjYXN0U3VjY2Vl
ZGVkLCBjYXN0U3VjY2VlZGVkKTsKICNpZiAhQVNTRVJUX0RJU0FCTEVECiAgICAgQmluZGluZ1Ry
YWl0czwke29iamVjdFR5cGV9Pjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUocmVzdWx0Lmdl
dCgpKTsKICNlbmRpZiAgLy8gIUFTU0VSVF9ESVNBQkxFRAotICAgIENPTVBJTEVfQVNTRVJUKHNp
emVvZigke29iamVjdFR5cGV9KSA9PSBzaXplb2YoSW5zcGVjdG9yT2JqZWN0QmFzZSksIHR5cGVf
Y2FzdF9wcm9ibGVtKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8JHtvYmplY3RUeXBlfSo+KHN0
YXRpY19jYXN0PEluc3BlY3Rvck9iamVjdEJhc2UqPihyZXN1bHQuZ2V0KCkpKTsKKyAgICBDT01Q
SUxFX0FTU0VSVChzaXplb2YoJHtvYmplY3RUeXBlfSkgPT0gc2l6ZW9mKEpTT046Ok9iamVjdEJh
c2UpLCB0eXBlX2Nhc3RfcHJvYmxlbSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PCR7b2JqZWN0
VHlwZX0qPihzdGF0aWNfY2FzdDxKU09OOjpPYmplY3RCYXNlKj4ocmVzdWx0LmdldCgpKSk7CiB9
CiAiIiIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfcHJvdG9jb2xfdHlwZXNfaGVhZGVyLnB5IGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX3By
b3RvY29sX3R5cGVzX2hlYWRlci5weQppbmRleCA0ZDY1MzMxZmIzZDc2Nzk1ZjFjYTY1NTAzNmVh
NTU2Mzk0N2JjODIyLi5iOTUwNTY1ZDExNDVkZjU0ZmM2ZDY0NjY4MjFlYmVlNTNjN2M2MDJhIDEw
MDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdl
bi9nZW5lcmF0ZV9jcHBfcHJvdG9jb2xfdHlwZXNfaGVhZGVyLnB5CisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9wcm90b2Nv
bF90eXBlc19oZWFkZXIucHkKQEAgLTIwNSw3ICsyMDUsNyBAQCBjbGFzcyBDcHBQcm90b2NvbFR5
cGVzSGVhZGVyR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgICAgIGxpbmVzID0gW10KICAg
ICAgICAgaWYgbGVuKHR5cGVfZGVjbGFyYXRpb24uZGVzY3JpcHRpb24pID4gMDoKICAgICAgICAg
ICAgIGxpbmVzLmFwcGVuZCgnLyogJXMgKi8nICUgdHlwZV9kZWNsYXJhdGlvbi5kZXNjcmlwdGlv
bikKLSAgICAgICAgYmFzZV9jbGFzcyA9ICdJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCcKKyAg
ICAgICAgYmFzZV9jbGFzcyA9ICdKU09OOjpPYmplY3QnCiAgICAgICAgIGlmIG5vdCBHZW5lcmF0
b3IudHlwZV9oYXNfb3Blbl9maWVsZHModHlwZV9kZWNsYXJhdGlvbi50eXBlKToKICAgICAgICAg
ICAgIGJhc2VfY2xhc3MgPSBiYXNlX2NsYXNzICsgJ0Jhc2UnCiAgICAgICAgIGxpbmVzLmFwcGVu
ZCgnY2xhc3MgJXMgOiBwdWJsaWMgJXMgeycgJSAob2JqZWN0X25hbWUsIGJhc2VfY2xhc3MpKQpA
QCAtMzYxLDkgKzM2MSw5IEBAIGNsYXNzIENwcFByb3RvY29sVHlwZXNIZWFkZXJHZW5lcmF0b3Io
Q3BwR2VuZXJhdG9yKToKICAgICAgICAgZm9yIGFyZ3VtZW50IGluIHR5cGVfYXJndW1lbnRzOgog
ICAgICAgICAgICAgbGluZXMuYXBwZW5kKCd0ZW1wbGF0ZTw+ICVzIEJpbmRpbmdUcmFpdHM8JXM+
IHsnICUgKCcgJy5qb2luKHN0cnVjdF9rZXl3b3JkcyksIGFyZ3VtZW50WzBdKSkKICAgICAgICAg
ICAgIGlmIGFyZ3VtZW50WzFdOgotICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnc3RhdGlj
IFJlZlB0cjwlcz4gcnVudGltZUNhc3QoUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+
JiYgdmFsdWUpOycgJSBhcmd1bWVudFswXSkKKyAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQo
J3N0YXRpYyBSZWZQdHI8JXM+IHJ1bnRpbWVDYXN0KFJlZlB0cjxKU09OOjpWYWx1ZT4mJiB2YWx1
ZSk7JyAlIGFyZ3VtZW50WzBdKQogICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcjaWYgIUFTU0VS
VF9ESVNBQkxFRCcpCi0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyVzIGFzc2VydFZhbHVlSGFz
RXhwZWN0ZWRUeXBlKEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUqKTsnICUgJyAnLmpvaW4oZnVu
Y3Rpb25fa2V5d29yZHMpKQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCclcyBhc3NlcnRWYWx1
ZUhhc0V4cGVjdGVkVHlwZShKU09OOjpWYWx1ZSopOycgJSAnICcuam9pbihmdW5jdGlvbl9rZXl3
b3JkcykpCiAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyNlbmRpZiAvLyAhQVNTRVJUX0RJU0FC
TEVEJykKICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnfTsnKQogICAgICAgICByZXR1cm4gJ1xu
Jy5qb2luKGxpbmVzKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX3Byb3RvY29sX3R5cGVzX2ltcGxlbWVudGF0
aW9uLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4v
Z2VuZXJhdGVfY3BwX3Byb3RvY29sX3R5cGVzX2ltcGxlbWVudGF0aW9uLnB5CmluZGV4IGM3MWMz
OWFhNzFmODQ3MmVkMTIyZWIxNDdlNmI2ZDhhNGUzNDQ2MWIuLmRkMWQwMWY0ZDI1ZmE3MTYxNTli
MWM0YjhhMzFjYTBlZmY1NDUwYTggMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9wcm90b2NvbF90eXBlc19pbXBs
ZW1lbnRhdGlvbi5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfcHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50YXRpb24ucHkK
QEAgLTE5OCw3ICsxOTgsNyBAQCBjbGFzcyBDcHBQcm90b2NvbFR5cGVzSW1wbGVtZW50YXRpb25H
ZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICAgICAgbGluZXMgPSBbXQogCiAgICAgICAgIGxp
bmVzLmFwcGVuZCgnI2lmICFBU1NFUlRfRElTQUJMRUQnKQotICAgICAgICBsaW5lcy5hcHBlbmQo
J3ZvaWQgQmluZGluZ1RyYWl0czwlcz46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yVmFsdWUqIHZhbHVlKScgJSAoQ3BwR2VuZXJhdG9yLmNwcF9wcm90b2Nv
bF90eXBlX2Zvcl90eXBlKG9iamVjdF9kZWNsYXJhdGlvbi50eXBlKSkpCisgICAgICAgIGxpbmVz
LmFwcGVuZCgndm9pZCBCaW5kaW5nVHJhaXRzPCVzPjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5
cGUoSlNPTjo6VmFsdWUqIHZhbHVlKScgJSAoQ3BwR2VuZXJhdG9yLmNwcF9wcm90b2NvbF90eXBl
X2Zvcl90eXBlKG9iamVjdF9kZWNsYXJhdGlvbi50eXBlKSkpCiAgICAgICAgIGxpbmVzLmFwcGVu
ZCgiIiJ7CiAgICAgQVNTRVJUX0FSRyh2YWx1ZSwgdmFsdWUpOwogICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IG9iamVjdDsKQEAgLTI0Niw3ICsyNDYsNyBAQCBjbGFzcyBDcHBQcm90b2NvbFR5
cGVzSW1wbGVtZW50YXRpb25HZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICBkZWYgX2dlbmVy
YXRlX2Fzc2VydGlvbl9mb3JfZW51bShzZWxmLCBlbnVtX21lbWJlciwgb2JqZWN0X2RlY2xhcmF0
aW9uKToKICAgICAgICAgbGluZXMgPSBbXQogICAgICAgICBsaW5lcy5hcHBlbmQoJyNpZiAhQVNT
RVJUX0RJU0FCTEVEJykKLSAgICAgICAgbGluZXMuYXBwZW5kKCd2b2lkICVzKEluc3BlY3Rvcjo6
SW5zcGVjdG9yVmFsdWUqIHZhbHVlKScgJSBDcHBHZW5lcmF0b3IuY3BwX2Fzc2VydGlvbl9tZXRo
b2RfZm9yX3R5cGVfbWVtYmVyKGVudW1fbWVtYmVyLCBvYmplY3RfZGVjbGFyYXRpb24pKQorICAg
ICAgICBsaW5lcy5hcHBlbmQoJ3ZvaWQgJXMoSlNPTjo6VmFsdWUqIHZhbHVlKScgJSBDcHBHZW5l
cmF0b3IuY3BwX2Fzc2VydGlvbl9tZXRob2RfZm9yX3R5cGVfbWVtYmVyKGVudW1fbWVtYmVyLCBv
YmplY3RfZGVjbGFyYXRpb24pKQogICAgICAgICBsaW5lcy5hcHBlbmQoJ3snKQogICAgICAgICBs
aW5lcy5hcHBlbmQoJyAgICBBU1NFUlRfQVJHKHZhbHVlLCB2YWx1ZSk7JykKICAgICAgICAgbGlu
ZXMuYXBwZW5kKCcgICAgU3RyaW5nIHJlc3VsdDsnKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2FsbC9leHBlY3RlZC9kZWZpbml0aW9u
cy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9hbGwvZXhwZWN0ZWQvZGVmaW5pdGlvbnMtd2l0aC1tYWMt
cGxhdGZvcm0uanNvbi1yZXN1bHQKaW5kZXggMTcwZDU3YzBhYmY1MWQyMWFmMmM4Y2ZiOGZlZTMx
MThiOGQ0Y2IzMy4uNTgwMmQ5NjZlZDBhZjIzNzRlNzVmNTY3YjA3NDc0M2VhZWE5Mzg5MCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2Fs
bC9leHBlY3RlZC9kZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uLXJlc3VsdAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvYWxsL2V4cGVj
dGVkL2RlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24tcmVzdWx0CkBAIC0xNTIsNyAr
MTUyLDcgQEAgcHJvdGVjdGVkOgogY2xhc3MgTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyIGZpbmFs
IDogcHVibGljIFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyIHsKIHB1YmxpYzoKICAgICBz
dGF0aWMgUmVmPE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEJhY2tlbmREaXNwYXRj
aGVyJiwgTmV0d29ya0JhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwotICAgIHZvaWQgZGlzcGF0
Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SW5zcGVjdG9yT2Jq
ZWN0PiYmIG1lc3NhZ2UpIG92ZXJyaWRlOworICAgIHZvaWQgZGlzcGF0Y2gobG9uZyByZXF1ZXN0
SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpIG92
ZXJyaWRlOwogcHJpdmF0ZToKICAgICB2b2lkIGxvYWRSZXNvdXJjZShsb25nIHJlcXVlc3RJZCwg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKICNpZiBFTkFCTEUoSU5TUEVD
VE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKQEAgLTIyOCwxMSArMjI4LDExIEBAIE5ldHdvcmtC
YWNrZW5kRGlzcGF0Y2hlcjo6TmV0d29ya0JhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRj
aGVyJiBiYWNrZW5kRGlzCiAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNwYXRj
aGVyRm9yRG9tYWluKEFTQ0lJTGl0ZXJhbCgiTmV0d29yayIpLCB0aGlzKTsKIH0KIAotdm9pZCBO
ZXR3b3JrQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBT
dHJpbmcmIG1ldGhvZCwgUmVmPEluc3BlY3Rvck9iamVjdD4mJiBtZXNzYWdlKQordm9pZCBOZXR3
b3JrQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJp
bmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKQogewogICAgIFJlZjxOZXR3
b3JrQmFja2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOwogCi0gICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gcGFyYW1ldGVyczsKKyAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0
ZXJzOwogICAgIG1lc3NhZ2UtPmdldE9iamVjdChBU0NJSUxpdGVyYWwoInBhcmFtcyIpLCBwYXJh
bWV0ZXJzKTsKIAogICAgIGlmIChtZXRob2QgPT0gImxvYWRSZXNvdXJjZSIpCkBAIC00MTksNyAr
NDE5LDcgQEAgY2xhc3MgTmV0d29ya0Vycm9yOwogCiAKIG5hbWVzcGFjZSBOZXR3b3JrIHsKLWNs
YXNzIE5ldHdvcmtFcnJvciA6IHB1YmxpYyBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdEJhc2Ug
eworY2xhc3MgTmV0d29ya0Vycm9yIDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgewogcHVibGlj
OgogICAgIGVudW0gewogICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCkBAIC00MzEsMTQgKzQzMSwx
NCBAQCBwdWJsaWM6CiAgICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgIGNsYXNzIEJ1aWxkZXIg
ewogICAgIHByaXZhdGU6Ci0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0
OworICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBtX3Jlc3VsdDsKIAogICAgICAgICB0ZW1w
bGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAg
ICB7CiAgICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8
IFNURVA+Kj4odGhpcyk7CiAgICAgICAgIH0KIAotICAgICAgICBCdWlsZGVyKFJlZjwvKk5ldHdv
cmtFcnJvciovSW5zcGVjdG9yT2JqZWN0PiYmIG9iamVjdCkKKyAgICAgICAgQnVpbGRlcihSZWY8
LypOZXR3b3JrRXJyb3IqL0pTT046Ok9iamVjdD4mJiBvYmplY3QpCiAgICAgICAgICAgICA6IG1f
cmVzdWx0KFdURk1vdmUob2JqZWN0KSkKICAgICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9z
dGF0ZSk7CkBAIC00NjMsOSArNDYzLDkgQEAgcHVibGljOgogICAgICAgICBSZWY8TmV0d29ya0Vy
cm9yPiByZWxlYXNlKCkKICAgICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RB
VEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKLSAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKHNpemVvZihOZXR3b3JrRXJyb3IpID09IHNpemVvZihJbnNwZWN0b3JPYmpl
Y3QpLCBjYW5ub3RfY2FzdCk7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoTmV0
d29ya0Vycm9yKSA9PSBzaXplb2YoSlNPTjo6T2JqZWN0KSwgY2Fubm90X2Nhc3QpOwogCi0gICAg
ICAgICAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9u
TnVsbCgpOworICAgICAgICAgICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0ID0gbV9yZXN1bHQu
cmVsZWFzZU5vbk51bGwoKTsKICAgICAgICAgICAgIHJldHVybiBXVEZNb3ZlKCpyZWludGVycHJl
dF9jYXN0PFJlZjxOZXR3b3JrRXJyb3I+Kj4oJnJlc3VsdCkpOwogICAgICAgICB9CiAgICAgfTsK
QEAgLTQ3OSw3ICs0NzksNyBAQCBwdWJsaWM6CiAgICAgICovCiAgICAgc3RhdGljIEJ1aWxkZXI8
Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCiAgICAgewotICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0Zp
ZWxkc1NldD4oSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSk7CisgICAgICAgIHJldHVybiBCdWls
ZGVyPE5vRmllbGRzU2V0PihKU09OOjpPYmplY3Q6OmNyZWF0ZSgpKTsKICAgICB9CiB9OwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
Z2VuZXJpYy9leHBlY3RlZC9jb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uLXJlc3Vs
dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmlj
L2V4cGVjdGVkL2NvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24tcmVzdWx0CmluZGV4
IGVmOWEyNDg4ZGI1YmU5YzhiYmFmY2Y0MjUzY2NjYzczOTE4ZGJmZDYuLmYyMjhhOTYyZDYwOTZl
NDEyNTg0M2QwZjllMTk2M2Q5ZTlhNDM1MzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2NvbW1hbmRzLXdp
dGgtYXN5bmMtYXR0cmlidXRlLmpzb24tcmVzdWx0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2NvbW1hbmRzLXdpdGgt
YXN5bmMtYXR0cmlidXRlLmpzb24tcmVzdWx0CkBAIC0xNTcsMTggKzE1NywxOCBAQCBwdWJsaWM6
CiAgICAgICAgIFllbGxvdyA9IDUsCiAgICAgICAgIEJsYWNrID0gNiwKICAgICB9OyAvLyBlbnVt
IGNsYXNzIFByaW50Q29sb3IKLSAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVNRTFN5bmNPcHRpb25h
bFJldHVyblZhbHVlcyhFcnJvclN0cmluZyYsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJp
bmcmIGluX3F1ZXJ5LCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPj4m
IG9wdF9vdXRfY29sdW1uTmFtZXMsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxTdHJp
bmc+KiBvcHRfb3V0X25vdGVzLCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8ZG91Ymxl
Piogb3B0X291dF90aW1lc3RhbXAsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxJbnNw
ZWN0b3I6Okluc3BlY3Rvck9iamVjdD4qIG9wdF9vdXRfdmFsdWVzLCBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpPcHRPdXRwdXQ8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4qIG9wdF9vdXRfcGF5bG9h
ZCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PGludD4qIG9wdF9vdXRfZGF0YWJhc2VJ
ZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4mIG9wdF9vdXRf
c3FsRXJyb3IsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzKiBv
cHRfb3V0X3NjcmVlbkNvbG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6
OkNvbG9yTGlzdD4mIG9wdF9vdXRfYWx0ZXJuYXRlQ29sb3JzLCBEYXRhYmFzZUJhY2tlbmREaXNw
YXRjaGVySGFuZGxlcjo6UHJpbnRDb2xvciogb3B0X291dF9wcmludENvbG9yKSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIGV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMoRXJyb3JTdHJp
bmcmLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSwgUmVmUHRyPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+JiBvcHRfb3V0X2NvbHVtbk5hbWVzLCBJ
bnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8U3RyaW5nPiogb3B0X291dF9ub3RlcywgSW5z
cGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PGRvdWJsZT4qIG9wdF9vdXRfdGltZXN0YW1wLCBJ
bnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8SlNPTjo6T2JqZWN0Piogb3B0X291dF92YWx1
ZXMsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxKU09OOjpWYWx1ZT4qIG9wdF9vdXRf
cGF5bG9hZCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PGludD4qIG9wdF9vdXRfZGF0
YWJhc2VJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4mIG9w
dF9vdXRfc3FsRXJyb3IsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29s
b3JzKiBvcHRfb3V0X3NjcmVlbkNvbG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0
YWJhc2U6OkNvbG9yTGlzdD4mIG9wdF9vdXRfYWx0ZXJuYXRlQ29sb3JzLCBEYXRhYmFzZUJhY2tl
bmREaXNwYXRjaGVySGFuZGxlcjo6UHJpbnRDb2xvciogb3B0X291dF9wcmludENvbG9yKSA9IDA7
CiAgICAgY2xhc3MgRXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNDYWxsYmFjayA6
IHB1YmxpYyBCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNlIHsKICAgICBwdWJsaWM6CiAg
ICAgICAgIEV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzQ2FsbGJhY2soUmVmPEJh
Y2tlbmREaXNwYXRjaGVyPiYmLCBpbnQgaWQpOwotICAgICAgICB2b2lkIHNlbmRTdWNjZXNzKFJl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+PiYmIGNvbHVtbk5hbWVzLCBJ
bnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8U3RyaW5nPiogbm90ZXMsIEluc3BlY3Rvcjo6
UHJvdG9jb2w6Ok9wdE91dHB1dDxkb3VibGU+KiB0aW1lc3RhbXAsIEluc3BlY3Rvcjo6UHJvdG9j
b2w6Ok9wdE91dHB1dDxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4qIHZhbHVlcywgSW5zcGVj
dG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+KiBwYXls
b2FkLCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8aW50PiogZGF0YWJhc2VJZCwgUmVm
UHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4mJiBzcWxFcnJvciwgSW5z
cGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PFN0cmluZz4qIHNjcmVlbkNvbG9yLCBSZWZQdHI8
SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4mJiBhbHRlcm5hdGVDb2xv
cnMsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxTdHJpbmc+KiBwcmludENvbG9yKTsK
KyAgICAgICAgdm9pZCBzZW5kU3VjY2VzcyhSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJy
YXk8U3RyaW5nPj4mJiBjb2x1bW5OYW1lcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0
PFN0cmluZz4qIG5vdGVzLCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8ZG91YmxlPiog
dGltZXN0YW1wLCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8SlNPTjo6T2JqZWN0Piog
dmFsdWVzLCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8SlNPTjo6VmFsdWU+KiBwYXls
b2FkLCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8aW50PiogZGF0YWJhc2VJZCwgUmVm
UHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4mJiBzcWxFcnJvciwgSW5z
cGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PFN0cmluZz4qIHNjcmVlbkNvbG9yLCBSZWZQdHI8
SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4mJiBhbHRlcm5hdGVDb2xv
cnMsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxTdHJpbmc+KiBwcmludENvbG9yKTsK
ICAgICB9OwogICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZh
bHVlcyhFcnJvclN0cmluZyYsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1
ZXJ5LCBSZWY8RXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNDYWxsYmFjaz4mJiBj
YWxsYmFjaykgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlU1FMU3luYyhFcnJvclN0cmlu
ZyYsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5LCBSZWZQdHI8SW5z
cGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPj4mIG91dF9jb2x1bW5OYW1lcywgU3RyaW5n
KiBvdXRfbm90ZXMsIGRvdWJsZSogb3V0X3RpbWVzdGFtcCwgSW5zcGVjdG9yOjpJbnNwZWN0b3JP
YmplY3QqIG91dF92YWx1ZXMsIEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUqIG91dF9wYXlsb2Fk
LCBpbnQqIG91dF9kYXRhYmFzZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJh
c2U6OkVycm9yPiYgb3V0X3NxbEVycm9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0
YWJhc2U6OkNvbG9yTGlzdD4mIG91dF9hbHRlcm5hdGVDb2xvcnMsIEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzKiBvdXRfc2NyZWVuQ29sb3IsIERhdGFiYXNlQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyOjpQcmludENvbG9yKiBvdXRfcHJpbnRDb2xvcikgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlU1FMU3luYyhFcnJvclN0cmluZyYsIGludCBpbl9kYXRh
YmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5LCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6QXJyYXk8U3RyaW5nPj4mIG91dF9jb2x1bW5OYW1lcywgU3RyaW5nKiBvdXRfbm90ZXMsIGRv
dWJsZSogb3V0X3RpbWVzdGFtcCwgSlNPTjo6T2JqZWN0KiBvdXRfdmFsdWVzLCBKU09OOjpWYWx1
ZSogb3V0X3BheWxvYWQsIGludCogb3V0X2RhdGFiYXNlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+JiBvdXRfc3FsRXJyb3IsIFJlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiYgb3V0X2FsdGVybmF0ZUNvbG9ycywgSW5z
cGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMqIG91dF9zY3JlZW5Db2xv
ciwgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3IqIG91dF9wcmlu
dENvbG9yKSA9IDA7CiAgICAgY2xhc3MgRXhlY3V0ZVNRTEFzeW5jQ2FsbGJhY2sgOiBwdWJsaWMg
QmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZSB7CiAgICAgcHVibGljOgogICAgICAgICBF
eGVjdXRlU1FMQXN5bmNDYWxsYmFjayhSZWY8QmFja2VuZERpc3BhdGNoZXI+JiYsIGludCBpZCk7
Ci0gICAgICAgIHZvaWQgc2VuZFN1Y2Nlc3MoUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFy
cmF5PFN0cmluZz4+JiYgY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgbm90ZXMsIGRvdWJsZSB0
aW1lc3RhbXAsIEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0IHZhbHVlcywgSW5zcGVjdG9yOjpJ
bnNwZWN0b3JWYWx1ZSBwYXlsb2FkLCBpbnQgZGF0YWJhc2VJZCwgUmVmUHRyPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4mJiBzcWxFcnJvciwgY29uc3QgU3RyaW5nJiBzY3Jl
ZW5Db2xvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+
JiYgYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcmIHByaW50Q29sb3IpOworICAgICAgICB2
b2lkIHNlbmRTdWNjZXNzKFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+
PiYmIGNvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIG5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBK
U09OOjpPYmplY3QgdmFsdWVzLCBKU09OOjpWYWx1ZSBwYXlsb2FkLCBpbnQgZGF0YWJhc2VJZCwg
UmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4mJiBzcWxFcnJvciwg
Y29uc3QgU3RyaW5nJiBzY3JlZW5Db2xvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRh
dGFiYXNlOjpDb2xvckxpc3Q+JiYgYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcmIHByaW50
Q29sb3IpOwogICAgIH07CiAgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVTUUxBc3luYyhFcnJvclN0
cmluZyYsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5LCBSZWY8RXhl
Y3V0ZVNRTEFzeW5jQ2FsbGJhY2s+JiYgY2FsbGJhY2spID0gMDsKIHByb3RlY3RlZDoKQEAgLTE3
OCw3ICsxNzgsNyBAQCBwcm90ZWN0ZWQ6CiBjbGFzcyBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVy
IGZpbmFsIDogcHVibGljIFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyIHsKIHB1YmxpYzoK
ICAgICBzdGF0aWMgUmVmPERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShCYWNrZW5k
RGlzcGF0Y2hlciYsIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7Ci0gICAgdm9p
ZCBkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxJbnNw
ZWN0b3JPYmplY3Q+JiYgbWVzc2FnZSkgb3ZlcnJpZGU7CisgICAgdm9pZCBkaXNwYXRjaChsb25n
IHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVz
c2FnZSkgb3ZlcnJpZGU7CiBwcml2YXRlOgogICAgIHZvaWQgZXhlY3V0ZVNRTFN5bmNPcHRpb25h
bFJldHVyblZhbHVlcyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBw
YXJhbWV0ZXJzKTsKICAgICB2b2lkIGV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVz
KGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIHBhcmFtZXRlcnMpOwpA
QCAtMjU3LDExICsyNTcsMTEgQEAgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6RGF0YWJhc2VC
YWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZEQKICAgICBtX2JhY2tl
bmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4oQVNDSUlMaXRlcmFsKCJE
YXRhYmFzZSIpLCB0aGlzKTsKIH0KIAotdm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpk
aXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxJbnNwZWN0
b3JPYmplY3Q+JiYgbWVzc2FnZSkKK3ZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlz
cGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2Jq
ZWN0PiYmIG1lc3NhZ2UpCiB7CiAgICAgUmVmPERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI+IHBy
b3RlY3QoKnRoaXMpOwogCi0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1ldGVyczsK
KyAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzOwogICAgIG1lc3NhZ2UtPmdldE9i
amVjdChBU0NJSUxpdGVyYWwoInBhcmFtcyIpLCBwYXJhbWV0ZXJzKTsKIAogICAgIGlmIChtZXRo
b2QgPT0gImV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMiKQpAQCAtMjk3LDggKzI5
Nyw4IEBAIHZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTFN5bmNPcHRp
b25hbFJldHVyblZhbHVlcyhsb25nIHJlcXVlc3RJCiAgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkFycmF5PFN0cmluZz4+IG91dF9jb2x1bW5OYW1lczsKICAgICBJbnNwZWN0b3I6OlBy
b3RvY29sOjpPcHRPdXRwdXQ8U3RyaW5nPiBvdXRfbm90ZXM7CiAgICAgSW5zcGVjdG9yOjpQcm90
b2NvbDo6T3B0T3V0cHV0PGRvdWJsZT4gb3V0X3RpbWVzdGFtcDsKLSAgICBJbnNwZWN0b3I6OlBy
b3RvY29sOjpPcHRPdXRwdXQ8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IG91dF92YWx1ZXM7
Ci0gICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PEluc3BlY3Rvcjo6SW5zcGVjdG9y
VmFsdWU+IG91dF9wYXlsb2FkOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxK
U09OOjpPYmplY3Q+IG91dF92YWx1ZXM7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0
cHV0PEpTT046OlZhbHVlPiBvdXRfcGF5bG9hZDsKICAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpP
cHRPdXRwdXQ8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkRhdGFiYXNlSWQ+IG91dF9k
YXRhYmFzZUlkOwogICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJy
b3I+IG91dF9zcWxFcnJvcjsKICAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJp
bWFyeUNvbG9ycyBvdXRfc2NyZWVuQ29sb3I7CkBAIC0zMzYsOSArMzM2LDkgQEAgdm9pZCBEYXRh
YmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVz
KGxvbmcgcmVxdWVzdEkKIAogRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkV4ZWN1
dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzQ2FsbGJhY2s6OkV4ZWN1dGVTUUxBc3luY09w
dGlvbmFsUmV0dXJuVmFsdWVzQ2FsbGJhY2soUmVmPEJhY2tlbmREaXNwYXRjaGVyPiYmIGJhY2tl
bmREaXNwYXRjaGVyLCBpbnQgaWQpIDogQmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZShX
VEZNb3ZlKGJhY2tlbmREaXNwYXRjaGVyKSwgaWQpIHsgfQogCi12b2lkIERhdGFiYXNlQmFja2Vu
ZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc0Nh
bGxiYWNrOjpzZW5kU3VjY2VzcyhSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3Ry
aW5nPj4mJiBjb2x1bW5OYW1lcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PFN0cmlu
Zz4qIG5vdGVzLCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8ZG91YmxlPiogdGltZXN0
YW1wLCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8SW5zcGVjdG9yOjpJbnNwZWN0b3JP
YmplY3Q+KiB2YWx1ZXMsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxJbnNwZWN0b3I6
Okluc3BlY3RvclZhbHVlPiogcGF5bG9hZCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0
PGludD4qIGRhdGFiYXNlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6
RXJyb3I+JiYgc3FsRXJyb3IsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxTdHJpbmc+
KiBzY3JlZW5Db2xvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xv
ckxpc3Q+JiYgYWx0ZXJuYXRlQ29sb3JzLCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8
U3RyaW5nPiogcHJpbnRDb2xvcikKK3ZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXI6OkV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzQ2FsbGJhY2s6OnNlbmRTdWNj
ZXNzKFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+PiYmIGNvbHVtbk5h
bWVzLCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8U3RyaW5nPiogbm90ZXMsIEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxkb3VibGU+KiB0aW1lc3RhbXAsIEluc3BlY3Rvcjo6
UHJvdG9jb2w6Ok9wdE91dHB1dDxKU09OOjpPYmplY3Q+KiB2YWx1ZXMsIEluc3BlY3Rvcjo6UHJv
dG9jb2w6Ok9wdE91dHB1dDxKU09OOjpWYWx1ZT4qIHBheWxvYWQsIEluc3BlY3Rvcjo6UHJvdG9j
b2w6Ok9wdE91dHB1dDxpbnQ+KiBkYXRhYmFzZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6RGF0YWJhc2U6OkVycm9yPiYmIHNxbEVycm9yLCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRP
dXRwdXQ8U3RyaW5nPiogc2NyZWVuQ29sb3IsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpE
YXRhYmFzZTo6Q29sb3JMaXN0PiYmIGFsdGVybmF0ZUNvbG9ycywgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6T3B0T3V0cHV0PFN0cmluZz4qIHByaW50Q29sb3IpCiB7Ci0gICAgUmVmPEluc3BlY3Rvck9i
amVjdD4ganNvbk1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIFJlZjxK
U09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICBp
ZiAoY29sdW1uTmFtZXMpCiAgICAgICAgIGpzb25NZXNzYWdlLT5zZXRBcnJheShBU0NJSUxpdGVy
YWwoImNvbHVtbk5hbWVzIiksIGNvbHVtbk5hbWVzKTsKICAgICBpZiAobm90ZXMuaXNBc3NpZ25l
ZCgpKQpAQCAtNDExLDggKzQxMSw4IEBAIHZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6
ZXhlY3V0ZVNRTFN5bmMobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxJbnNwZWN0b3JPCiAgICAgUmVm
UHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+IG91dF9jb2x1bW5OYW1lczsK
ICAgICBTdHJpbmcgb3V0X25vdGVzOwogICAgIGRvdWJsZSBvdXRfdGltZXN0YW1wOwotICAgIElu
c3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0IG91dF92YWx1ZXM7Ci0gICAgSW5zcGVjdG9yOjpJbnNw
ZWN0b3JWYWx1ZSBvdXRfcGF5bG9hZDsKKyAgICBKU09OOjpPYmplY3Qgb3V0X3ZhbHVlczsKKyAg
ICBKU09OOjpWYWx1ZSBvdXRfcGF5bG9hZDsKICAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRh
YmFzZTo6RGF0YWJhc2VJZCBvdXRfZGF0YWJhc2VJZDsKICAgICBSZWZQdHI8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiBvdXRfc3FsRXJyb3I7CiAgICAgUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+IG91dF9hbHRlcm5hdGVDb2xvcnM7
CkBAIC00NDAsOSArNDQwLDkgQEAgdm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVj
dXRlU1FMU3luYyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEluc3BlY3Rvck8KIAogRGF0YWJhc2VC
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkV4ZWN1dGVTUUxBc3luY0NhbGxiYWNrOjpFeGVjdXRl
U1FMQXN5bmNDYWxsYmFjayhSZWY8QmFja2VuZERpc3BhdGNoZXI+JiYgYmFja2VuZERpc3BhdGNo
ZXIsIGludCBpZCkgOiBCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNlKFdURk1vdmUoYmFj
a2VuZERpc3BhdGNoZXIpLCBpZCkgeyB9CiAKLXZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hl
ckhhbmRsZXI6OkV4ZWN1dGVTUUxBc3luY0NhbGxiYWNrOjpzZW5kU3VjY2VzcyhSZWZQdHI8SW5z
cGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPj4mJiBjb2x1bW5OYW1lcywgY29uc3QgU3Ry
aW5nJiBub3RlcywgZG91YmxlIHRpbWVzdGFtcCwgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Qg
dmFsdWVzLCBJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlIHBheWxvYWQsIGludCBkYXRhYmFzZUlk
LCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiYmIHNxbEVycm9y
LCBjb25zdCBTdHJpbmcmIHNjcmVlbkNvbG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6
RGF0YWJhc2U6OkNvbG9yTGlzdD4mJiBhbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyYgcHJp
bnRDb2xvcikKK3ZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkV4ZWN1dGVT
UUxBc3luY0NhbGxiYWNrOjpzZW5kU3VjY2VzcyhSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6
QXJyYXk8U3RyaW5nPj4mJiBjb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBub3RlcywgZG91Ymxl
IHRpbWVzdGFtcCwgSlNPTjo6T2JqZWN0IHZhbHVlcywgSlNPTjo6VmFsdWUgcGF5bG9hZCwgaW50
IGRhdGFiYXNlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+
JiYgc3FsRXJyb3IsIGNvbnN0IFN0cmluZyYgc2NyZWVuQ29sb3IsIFJlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiYmIGFsdGVybmF0ZUNvbG9ycywgY29uc3Qg
U3RyaW5nJiBwcmludENvbG9yKQogewotICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IGpzb25NZXNz
YWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBSZWY8SlNPTjo6T2JqZWN0PiBq
c29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAganNvbk1lc3NhZ2UtPnNl
dEFycmF5KEFTQ0lJTGl0ZXJhbCgiY29sdW1uTmFtZXMiKSwgY29sdW1uTmFtZXMpOwogICAgIGpz
b25NZXNzYWdlLT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJub3RlcyIpLCBub3Rlcyk7CiAgICAg
anNvbk1lc3NhZ2UtPnNldERvdWJsZShBU0NJSUxpdGVyYWwoInRpbWVzdGFtcCIpLCB0aW1lc3Rh
bXApOwpAQCAtNjUyLDcgKzY1Miw3IEBAIGVudW0gY2xhc3MgUHJpbWFyeUNvbG9ycyB7CiAgICAg
Qmx1ZSA9IDIsCiB9OyAvLyBlbnVtIGNsYXNzIFByaW1hcnlDb2xvcnMKIC8qIERhdGFiYXNlIGVy
cm9yLiAqLwotY2xhc3MgRXJyb3IgOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3RC
YXNlIHsKK2NsYXNzIEVycm9yIDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgewogcHVibGljOgog
ICAgIGVudW0gewogICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCkBAIC02NjQsMTQgKzY2NCwxNCBA
QCBwdWJsaWM6CiAgICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgIGNsYXNzIEJ1aWxkZXIgewog
ICAgIHByaXZhdGU6Ci0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0Owor
ICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBtX3Jlc3VsdDsKIAogICAgICAgICB0ZW1wbGF0
ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgICB7
CiAgICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNU
RVA+Kj4odGhpcyk7CiAgICAgICAgIH0KIAotICAgICAgICBCdWlsZGVyKFJlZjwvKkVycm9yKi9J
bnNwZWN0b3JPYmplY3Q+JiYgb2JqZWN0KQorICAgICAgICBCdWlsZGVyKFJlZjwvKkVycm9yKi9K
U09OOjpPYmplY3Q+JiYgb2JqZWN0KQogICAgICAgICAgICAgOiBtX3Jlc3VsdChXVEZNb3ZlKG9i
amVjdCkpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5v
RmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwpAQCAtNjk2LDkg
KzY5Niw5IEBAIHB1YmxpYzoKICAgICAgICAgUmVmPEVycm9yPiByZWxlYXNlKCkKICAgICAgICAg
ewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1
bHRfaXNfbm90X3JlYWR5KTsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihFcnJv
cikgPT0gc2l6ZW9mKEluc3BlY3Rvck9iamVjdCksIGNhbm5vdF9jYXN0KTsKKyAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKHNpemVvZihFcnJvcikgPT0gc2l6ZW9mKEpTT046Ok9iamVjdCksIGNh
bm5vdF9jYXN0KTsKIAotICAgICAgICAgICAgUmVmPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0g
bV9yZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKKyAgICAgICAgICAgIFJlZjxKU09OOjpPYmplY3Q+
IHJlc3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7CiAgICAgICAgICAgICByZXR1cm4g
V1RGTW92ZSgqcmVpbnRlcnByZXRfY2FzdDxSZWY8RXJyb3I+Kj4oJnJlc3VsdCkpOwogICAgICAg
ICB9CiAgICAgfTsKQEAgLTcxMiw3ICs3MTIsNyBAQCBwdWJsaWM6CiAgICAgICovCiAgICAgc3Rh
dGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCiAgICAgewotICAgICAgICByZXR1cm4g
QnVpbGRlcjxOb0ZpZWxkc1NldD4oSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSk7CisgICAgICAg
IHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihKU09OOjpPYmplY3Q6OmNyZWF0ZSgpKTsKICAg
ICB9CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9jb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwt
cmV0dXJuLXBhcmFtZXRlcnMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9jb21tYW5kcy13aXRoLW9wdGlv
bmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbi1yZXN1bHQKaW5kZXggNGM5ZTQyNjE4NWEy
ZGEyNTYwYzU1M2UxZjM1ZTIwNDMyM2Y5NjY5NC4uYzU2M2YzYjFkMGEzNDdjMzc5OThmYWJiMzMz
MTA5MGRiNzQwODE3OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvY29tbWFuZHMtd2l0aC1vcHRpb25hbC1j
YWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2NvbW1hbmRzLXdp
dGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uLXJlc3VsdApAQCAtODksOCAr
ODksOCBAQCBwcml2YXRlOgogY2xhc3MgQWx0ZXJuYXRlRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hl
ciA6IHB1YmxpYyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7CiBwdWJsaWM6CiAgICAgdmly
dHVhbCB+QWx0ZXJuYXRlRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcigpIHsgfQotICAgIHZpcnR1
YWwgdm9pZCBleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgY2FsbElkLCBjb25zdCBJ
bnNwZWN0b3I6Okluc3BlY3RvckFycmF5KiBpbl9jb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nKiBj
b25zdCBpbl9ub3RlcywgY29uc3QgZG91YmxlKiBjb25zdCBpbl90aW1lc3RhbXAsIGNvbnN0IElu
c3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0KiBpbl92YWx1ZXMsIGNvbnN0IEluc3BlY3Rvcjo6SW5z
cGVjdG9yVmFsdWUqIGNvbnN0IGluX3BheWxvYWQsIGNvbnN0IGludCogY29uc3QgaW5fZGF0YWJh
c2VJZCwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QqIGluX3NxbEVycm9yLCBjb25z
dCBTdHJpbmcqIGNvbnN0IGluX3NjcmVlbkNvbG9yLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3Rv
ckFycmF5KiBpbl9hbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyogY29uc3QgaW5fcHJpbnRD
b2xvcikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMo
bG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXkmIGluX2NvbHVtbk5h
bWVzLCBjb25zdCBTdHJpbmcmIGluX25vdGVzLCBkb3VibGUgaW5fdGltZXN0YW1wLCBjb25zdCBJ
bnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCYgaW5fdmFsdWVzLCBJbnNwZWN0b3I6Okluc3BlY3Rv
clZhbHVlIGluX3BheWxvYWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBJbnNwZWN0b3I6Oklu
c3BlY3Rvck9iamVjdCYgaW5fc3FsRXJyb3IsIGNvbnN0IFN0cmluZyYgaW5fc2NyZWVuQ29sb3Is
IGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXkmIGluX2FsdGVybmF0ZUNvbG9ycywgY29u
c3QgU3RyaW5nJiBpbl9wcmludENvbG9yKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVB
bGxPcHRpb25hbFBhcmFtZXRlcnMobG9uZyBjYWxsSWQsIGNvbnN0IEpTT046OkFycmF5KiBpbl9j
b2x1bW5OYW1lcywgY29uc3QgU3RyaW5nKiBjb25zdCBpbl9ub3RlcywgY29uc3QgZG91YmxlKiBj
b25zdCBpbl90aW1lc3RhbXAsIGNvbnN0IEpTT046Ok9iamVjdCogaW5fdmFsdWVzLCBjb25zdCBK
U09OOjpWYWx1ZSogY29uc3QgaW5fcGF5bG9hZCwgY29uc3QgaW50KiBjb25zdCBpbl9kYXRhYmFz
ZUlkLCBjb25zdCBKU09OOjpPYmplY3QqIGluX3NxbEVycm9yLCBjb25zdCBTdHJpbmcqIGNvbnN0
IGluX3NjcmVlbkNvbG9yLCBjb25zdCBKU09OOjpBcnJheSogaW5fYWx0ZXJuYXRlQ29sb3JzLCBj
b25zdCBTdHJpbmcqIGNvbnN0IGluX3ByaW50Q29sb3IpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
ZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgY2FsbElkLCBjb25zdCBKU09OOjpBcnJh
eSYgaW5fY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgaW5fbm90ZXMsIGRvdWJsZSBpbl90aW1l
c3RhbXAsIGNvbnN0IEpTT046Ok9iamVjdCYgaW5fdmFsdWVzLCBKU09OOjpWYWx1ZSBpbl9wYXls
b2FkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgSlNPTjo6T2JqZWN0JiBpbl9zcWxFcnJvciwg
Y29uc3QgU3RyaW5nJiBpbl9zY3JlZW5Db2xvciwgY29uc3QgSlNPTjo6QXJyYXkmIGluX2FsdGVy
bmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nJiBpbl9wcmludENvbG9yKSA9IDA7CiB9OwogCiB9IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKQEAgLTE1Miw4ICsxNTIsOCBAQCBwdWJsaWM6CiAgICAgICAg
IFllbGxvdyA9IDUsCiAgICAgICAgIEJsYWNrID0gNiwKICAgICB9OyAvLyBlbnVtIGNsYXNzIFBy
aW50Q29sb3IKLSAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhF
cnJvclN0cmluZyYsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXkqIG9wdF9pbl9jb2x1
bW5OYW1lcywgY29uc3QgU3RyaW5nKiBjb25zdCBvcHRfaW5fbm90ZXMsIGNvbnN0IGRvdWJsZSog
Y29uc3Qgb3B0X2luX3RpbWVzdGFtcCwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Qq
IG9wdF9pbl92YWx1ZXMsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUqIGNvbnN0IG9w
dF9pbl9wYXlsb2FkLCBjb25zdCBpbnQqIGNvbnN0IG9wdF9pbl9kYXRhYmFzZUlkLCBjb25zdCBJ
bnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCogb3B0X2luX3NxbEVycm9yLCBjb25zdCBTdHJpbmcq
IGNvbnN0IG9wdF9pbl9zY3JlZW5Db2xvciwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJh
eSogb3B0X2luX2FsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nKiBjb25zdCBvcHRfaW5fcHJp
bnRDb2xvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+JiBvcHRf
b3V0X2NvbHVtbk5hbWVzLCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8U3RyaW5nPiog
b3B0X291dF9ub3RlcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PGRvdWJsZT4qIG9w
dF9vdXRfdGltZXN0YW1wLCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8SW5zcGVjdG9y
OjpJbnNwZWN0b3JPYmplY3Q+KiBvcHRfb3V0X3ZhbHVlcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6
T3B0T3V0cHV0PEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+KiBvcHRfb3V0X3BheWxvYWQsIElu
c3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxpbnQ+KiBvcHRfb3V0X2RhdGFiYXNlSWQsIFJl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+JiBvcHRfb3V0X3NxbEVy
cm9yLCBJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyogb3B0X291
dF9zY3JlZW5Db2xvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xv
ckxpc3Q+JiBvcHRfb3V0X2FsdGVybmF0ZUNvbG9ycywgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hl
ckhhbmRsZXI6OlByaW50Q29sb3IqIG9wdF9vdXRfcHJpbnRDb2xvcikgPSAwOwotICAgIHZpcnR1
YWwgdm9pZCBleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMoRXJyb3JTdHJpbmcmLCBjb25zdCBJ
bnNwZWN0b3I6Okluc3BlY3RvckFycmF5JiBpbl9jb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBp
bl9ub3RlcywgZG91YmxlIGluX3RpbWVzdGFtcCwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JP
YmplY3QmIGluX3ZhbHVlcywgSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSBpbl9wYXlsb2FkLCBp
bnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QmIGluX3Nx
bEVycm9yLCBjb25zdCBTdHJpbmcmIGluX3NjcmVlbkNvbG9yLCBjb25zdCBJbnNwZWN0b3I6Oklu
c3BlY3RvckFycmF5JiBpbl9hbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyYgaW5fcHJpbnRD
b2xvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+JiBvdXRfY29s
dW1uTmFtZXMsIFN0cmluZyogb3V0X25vdGVzLCBkb3VibGUqIG91dF90aW1lc3RhbXAsIEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yT2JqZWN0KiBvdXRfdmFsdWVzLCBJbnNwZWN0b3I6Okluc3BlY3RvclZh
bHVlKiBvdXRfcGF5bG9hZCwgaW50KiBvdXRfZGF0YWJhc2VJZCwgUmVmUHRyPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4mIG91dF9zcWxFcnJvciwgSW5zcGVjdG9yOjpQcm90
b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMqIG91dF9zY3JlZW5Db2xvciwgUmVmUHRyPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+JiBvdXRfYWx0ZXJuYXRlQ29s
b3JzLCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UHJpbnRDb2xvciogb3V0X3By
aW50Q29sb3IpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1l
dGVycyhFcnJvclN0cmluZyYsIGNvbnN0IEpTT046OkFycmF5KiBvcHRfaW5fY29sdW1uTmFtZXMs
IGNvbnN0IFN0cmluZyogY29uc3Qgb3B0X2luX25vdGVzLCBjb25zdCBkb3VibGUqIGNvbnN0IG9w
dF9pbl90aW1lc3RhbXAsIGNvbnN0IEpTT046Ok9iamVjdCogb3B0X2luX3ZhbHVlcywgY29uc3Qg
SlNPTjo6VmFsdWUqIGNvbnN0IG9wdF9pbl9wYXlsb2FkLCBjb25zdCBpbnQqIGNvbnN0IG9wdF9p
bl9kYXRhYmFzZUlkLCBjb25zdCBKU09OOjpPYmplY3QqIG9wdF9pbl9zcWxFcnJvciwgY29uc3Qg
U3RyaW5nKiBjb25zdCBvcHRfaW5fc2NyZWVuQ29sb3IsIGNvbnN0IEpTT046OkFycmF5KiBvcHRf
aW5fYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcqIGNvbnN0IG9wdF9pbl9wcmludENvbG9y
LCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPj4mIG9wdF9vdXRfY29s
dW1uTmFtZXMsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxTdHJpbmc+KiBvcHRfb3V0
X25vdGVzLCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8ZG91YmxlPiogb3B0X291dF90
aW1lc3RhbXAsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxKU09OOjpPYmplY3Q+KiBv
cHRfb3V0X3ZhbHVlcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PEpTT046OlZhbHVl
Piogb3B0X291dF9wYXlsb2FkLCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8aW50Piog
b3B0X291dF9kYXRhYmFzZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6
OkVycm9yPiYgb3B0X291dF9zcWxFcnJvciwgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6
OlByaW1hcnlDb2xvcnMqIG9wdF9vdXRfc2NyZWVuQ29sb3IsIFJlZlB0cjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiYgb3B0X291dF9hbHRlcm5hdGVDb2xvcnMsIERh
dGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpQcmludENvbG9yKiBvcHRfb3V0X3ByaW50
Q29sb3IpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJz
KEVycm9yU3RyaW5nJiwgY29uc3QgSlNPTjo6QXJyYXkmIGluX2NvbHVtbk5hbWVzLCBjb25zdCBT
dHJpbmcmIGluX25vdGVzLCBkb3VibGUgaW5fdGltZXN0YW1wLCBjb25zdCBKU09OOjpPYmplY3Qm
IGluX3ZhbHVlcywgSlNPTjo6VmFsdWUgaW5fcGF5bG9hZCwgaW50IGluX2RhdGFiYXNlSWQsIGNv
bnN0IEpTT046Ok9iamVjdCYgaW5fc3FsRXJyb3IsIGNvbnN0IFN0cmluZyYgaW5fc2NyZWVuQ29s
b3IsIGNvbnN0IEpTT046OkFycmF5JiBpbl9hbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyYg
aW5fcHJpbnRDb2xvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+
JiBvdXRfY29sdW1uTmFtZXMsIFN0cmluZyogb3V0X25vdGVzLCBkb3VibGUqIG91dF90aW1lc3Rh
bXAsIEpTT046Ok9iamVjdCogb3V0X3ZhbHVlcywgSlNPTjo6VmFsdWUqIG91dF9wYXlsb2FkLCBp
bnQqIG91dF9kYXRhYmFzZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6
OkVycm9yPiYgb3V0X3NxbEVycm9yLCBJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJp
bWFyeUNvbG9ycyogb3V0X3NjcmVlbkNvbG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6
RGF0YWJhc2U6OkNvbG9yTGlzdD4mIG91dF9hbHRlcm5hdGVDb2xvcnMsIERhdGFiYXNlQmFja2Vu
ZERpc3BhdGNoZXJIYW5kbGVyOjpQcmludENvbG9yKiBvdXRfcHJpbnRDb2xvcikgPSAwOwogcHJv
dGVjdGVkOgogICAgIHZpcnR1YWwgfkRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCk7
CiB9OwpAQCAtMTYxLDcgKzE2MSw3IEBAIHByb3RlY3RlZDoKIGNsYXNzIERhdGFiYXNlQmFja2Vu
ZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIg
ewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcj4gY3Jl
YXRlKEJhY2tlbmREaXNwYXRjaGVyJiwgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIq
KTsKLSAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhv
ZCwgUmVmPEluc3BlY3Rvck9iamVjdD4mJiBtZXNzYWdlKSBvdmVycmlkZTsKKyAgICB2b2lkIGRp
c3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9i
amVjdD4mJiBtZXNzYWdlKSBvdmVycmlkZTsKIHByaXZhdGU6CiAgICAgdm9pZCBleGVjdXRlQWxs
T3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiYmIHBhcmFtZXRlcnMpOwogICAgIHZvaWQgZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKGxv
bmcgcmVxdWVzdElkLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIHBhcmFtZXRlcnMpOwpAQCAt
MjM4LDExICsyMzgsMTEgQEAgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6RGF0YWJhc2VCYWNr
ZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZEQKICAgICBtX2JhY2tlbmRE
aXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4oQVNDSUlMaXRlcmFsKCJEYXRh
YmFzZSIpLCB0aGlzKTsKIH0KIAotdm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpkaXNw
YXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxJbnNwZWN0b3JP
YmplY3Q+JiYgbWVzc2FnZSkKK3ZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0
Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0
PiYmIG1lc3NhZ2UpCiB7CiAgICAgUmVmPERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI+IHByb3Rl
Y3QoKnRoaXMpOwogCi0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1ldGVyczsKKyAg
ICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzOwogICAgIG1lc3NhZ2UtPmdldE9iamVj
dChBU0NJSUxpdGVyYWwoInBhcmFtcyIpLCBwYXJhbWV0ZXJzKTsKIAogICAgIGlmIChtZXRob2Qg
PT0gImV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMiKQpAQCAtMjU2LDIzICsyNTYsMjMgQEAg
dm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwg
Y29uc3QgU3RyaW5nJiBtZXRob2QsIFIKIHZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6
ZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4mJiBwYXJhbWV0ZXJzKQogewogICAgIGJvb2wgb3B0X2luX2NvbHVtbk5hbWVz
X3ZhbHVlRm91bmQgPSBmYWxzZTsKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJh
eT4gb3B0X2luX2NvbHVtbk5hbWVzID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0QXJyYXkocGFy
YW1ldGVycy5nZXQoKSwgQVNDSUlMaXRlcmFsKCJjb2x1bW5OYW1lcyIpLCAmb3B0X2luX2NvbHVt
bk5hbWVzX3ZhbHVlRm91bmQpOworICAgIFJlZlB0cjxKU09OOjpBcnJheT4gb3B0X2luX2NvbHVt
bk5hbWVzID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0QXJyYXkocGFyYW1ldGVycy5nZXQoKSwg
QVNDSUlMaXRlcmFsKCJjb2x1bW5OYW1lcyIpLCAmb3B0X2luX2NvbHVtbk5hbWVzX3ZhbHVlRm91
bmQpOwogICAgIGJvb2wgb3B0X2luX25vdGVzX3ZhbHVlRm91bmQgPSBmYWxzZTsKICAgICBTdHJp
bmcgb3B0X2luX25vdGVzID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3RyaW5nKHBhcmFtZXRl
cnMuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgibm90ZXMiKSwgJm9wdF9pbl9ub3Rlc192YWx1ZUZvdW5k
KTsKICAgICBib29sIG9wdF9pbl90aW1lc3RhbXBfdmFsdWVGb3VuZCA9IGZhbHNlOwogICAgIElu
c3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxkb3VibGU+IG9wdF9pbl90aW1lc3RhbXAgPSBt
X2JhY2tlbmREaXNwYXRjaGVyLT5nZXREb3VibGUocGFyYW1ldGVycy5nZXQoKSwgQVNDSUlMaXRl
cmFsKCJ0aW1lc3RhbXAiKSwgJm9wdF9pbl90aW1lc3RhbXBfdmFsdWVGb3VuZCk7CiAgICAgYm9v
bCBvcHRfaW5fdmFsdWVzX3ZhbHVlRm91bmQgPSBmYWxzZTsKLSAgICBSZWZQdHI8SW5zcGVjdG9y
OjpJbnNwZWN0b3JPYmplY3Q+IG9wdF9pbl92YWx1ZXMgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5n
ZXRPYmplY3QocGFyYW1ldGVycy5nZXQoKSwgQVNDSUlMaXRlcmFsKCJ2YWx1ZXMiKSwgJm9wdF9p
bl92YWx1ZXNfdmFsdWVGb3VuZCk7CisgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gb3B0X2luX3Zh
bHVlcyA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldE9iamVjdChwYXJhbWV0ZXJzLmdldCgpLCBB
U0NJSUxpdGVyYWwoInZhbHVlcyIpLCAmb3B0X2luX3ZhbHVlc192YWx1ZUZvdW5kKTsKICAgICBi
b29sIG9wdF9pbl9wYXlsb2FkX3ZhbHVlRm91bmQgPSBmYWxzZTsKLSAgICBSZWZQdHI8SW5zcGVj
dG9yOjpJbnNwZWN0b3JWYWx1ZT4gb3B0X2luX3BheWxvYWQgPSBtX2JhY2tlbmREaXNwYXRjaGVy
LT5nZXRWYWx1ZShwYXJhbWV0ZXJzLmdldCgpLCBBU0NJSUxpdGVyYWwoInBheWxvYWQiKSwgJm9w
dF9pbl9wYXlsb2FkX3ZhbHVlRm91bmQpOworICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gb3B0X2lu
X3BheWxvYWQgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRWYWx1ZShwYXJhbWV0ZXJzLmdldCgp
LCBBU0NJSUxpdGVyYWwoInBheWxvYWQiKSwgJm9wdF9pbl9wYXlsb2FkX3ZhbHVlRm91bmQpOwog
ICAgIGJvb2wgb3B0X2luX2RhdGFiYXNlSWRfdmFsdWVGb3VuZCA9IGZhbHNlOwogICAgIGludCBv
cHRfaW5fZGF0YWJhc2VJZCA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldEludGVnZXIocGFyYW1l
dGVycy5nZXQoKSwgQVNDSUlMaXRlcmFsKCJkYXRhYmFzZUlkIiksICZvcHRfaW5fZGF0YWJhc2VJ
ZF92YWx1ZUZvdW5kKTsKICAgICBib29sIG9wdF9pbl9zcWxFcnJvcl92YWx1ZUZvdW5kID0gZmFs
c2U7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBvcHRfaW5fc3FsRXJy
b3IgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRPYmplY3QocGFyYW1ldGVycy5nZXQoKSwgQVND
SUlMaXRlcmFsKCJzcWxFcnJvciIpLCAmb3B0X2luX3NxbEVycm9yX3ZhbHVlRm91bmQpOworICAg
IFJlZlB0cjxKU09OOjpPYmplY3Q+IG9wdF9pbl9zcWxFcnJvciA9IG1fYmFja2VuZERpc3BhdGNo
ZXItPmdldE9iamVjdChwYXJhbWV0ZXJzLmdldCgpLCBBU0NJSUxpdGVyYWwoInNxbEVycm9yIiks
ICZvcHRfaW5fc3FsRXJyb3JfdmFsdWVGb3VuZCk7CiAgICAgYm9vbCBvcHRfaW5fc2NyZWVuQ29s
b3JfdmFsdWVGb3VuZCA9IGZhbHNlOwogICAgIFN0cmluZyBvcHRfaW5fc2NyZWVuQ29sb3IgPSBt
X2JhY2tlbmREaXNwYXRjaGVyLT5nZXRTdHJpbmcocGFyYW1ldGVycy5nZXQoKSwgQVNDSUlMaXRl
cmFsKCJzY3JlZW5Db2xvciIpLCAmb3B0X2luX3NjcmVlbkNvbG9yX3ZhbHVlRm91bmQpOwogICAg
IGJvb2wgb3B0X2luX2FsdGVybmF0ZUNvbG9yc192YWx1ZUZvdW5kID0gZmFsc2U7Ci0gICAgUmVm
UHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXk+IG9wdF9pbl9hbHRlcm5hdGVDb2xvcnMgPSBt
X2JhY2tlbmREaXNwYXRjaGVyLT5nZXRBcnJheShwYXJhbWV0ZXJzLmdldCgpLCBBU0NJSUxpdGVy
YWwoImFsdGVybmF0ZUNvbG9ycyIpLCAmb3B0X2luX2FsdGVybmF0ZUNvbG9yc192YWx1ZUZvdW5k
KTsKKyAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IG9wdF9pbl9hbHRlcm5hdGVDb2xvcnMgPSBtX2Jh
Y2tlbmREaXNwYXRjaGVyLT5nZXRBcnJheShwYXJhbWV0ZXJzLmdldCgpLCBBU0NJSUxpdGVyYWwo
ImFsdGVybmF0ZUNvbG9ycyIpLCAmb3B0X2luX2FsdGVybmF0ZUNvbG9yc192YWx1ZUZvdW5kKTsK
ICAgICBib29sIG9wdF9pbl9wcmludENvbG9yX3ZhbHVlRm91bmQgPSBmYWxzZTsKICAgICBTdHJp
bmcgb3B0X2luX3ByaW50Q29sb3IgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRTdHJpbmcocGFy
YW1ldGVycy5nZXQoKSwgQVNDSUlMaXRlcmFsKCJwcmludENvbG9yIiksICZvcHRfaW5fcHJpbnRD
b2xvcl92YWx1ZUZvdW5kKTsKICAgICBpZiAobV9iYWNrZW5kRGlzcGF0Y2hlci0+aGFzUHJvdG9j
b2xFcnJvcnMoKSkgewpAQCAtMjkyLDggKzI5Miw4IEBAIHZvaWQgRGF0YWJhc2VCYWNrZW5kRGlz
cGF0Y2hlcjo6ZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhsb25nIHJlcXVlc3RJZCwgUmVm
CiAgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+IG91dF9jb2x1
bW5OYW1lczsKICAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8U3RyaW5nPiBvdXRf
bm90ZXM7CiAgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PGRvdWJsZT4gb3V0X3Rp
bWVzdGFtcDsKLSAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8SW5zcGVjdG9yOjpJ
bnNwZWN0b3JPYmplY3Q+IG91dF92YWx1ZXM7Ci0gICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0
T3V0cHV0PEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+IG91dF9wYXlsb2FkOworICAgIEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxKU09OOjpPYmplY3Q+IG91dF92YWx1ZXM7CisgICAg
SW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PEpTT046OlZhbHVlPiBvdXRfcGF5bG9hZDsK
ICAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8SW5zcGVjdG9yOjpQcm90b2NvbDo6
RGF0YWJhc2U6OkRhdGFiYXNlSWQ+IG91dF9kYXRhYmFzZUlkOwogICAgIFJlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IG91dF9zcWxFcnJvcjsKICAgICBJbnNwZWN0
b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyBvdXRfc2NyZWVuQ29sb3I7CkBA
IC0zMzEsMTUgKzMzMSwxNSBAQCB2b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1
dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMobG9uZyByZXF1ZXN0SWQsIFJlZgogCiB2b2lkIERhdGFi
YXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhsb25nIHJl
cXVlc3RJZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBwYXJhbWV0ZXJzKQogewotICAgIFJl
ZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5PiBpbl9jb2x1bW5OYW1lcyA9IG1fYmFja2Vu
ZERpc3BhdGNoZXItPmdldEFycmF5KHBhcmFtZXRlcnMuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgiY29s
dW1uTmFtZXMiKSwgbnVsbHB0cik7CisgICAgUmVmUHRyPEpTT046OkFycmF5PiBpbl9jb2x1bW5O
YW1lcyA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldEFycmF5KHBhcmFtZXRlcnMuZ2V0KCksIEFT
Q0lJTGl0ZXJhbCgiY29sdW1uTmFtZXMiKSwgbnVsbHB0cik7CiAgICAgU3RyaW5nIGluX25vdGVz
ID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3RyaW5nKHBhcmFtZXRlcnMuZ2V0KCksIEFTQ0lJ
TGl0ZXJhbCgibm90ZXMiKSwgbnVsbHB0cik7CiAgICAgZG91YmxlIGluX3RpbWVzdGFtcCA9IG1f
YmFja2VuZERpc3BhdGNoZXItPmdldERvdWJsZShwYXJhbWV0ZXJzLmdldCgpLCBBU0NJSUxpdGVy
YWwoInRpbWVzdGFtcCIpLCBudWxscHRyKTsKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0
b3JPYmplY3Q+IGluX3ZhbHVlcyA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldE9iamVjdChwYXJh
bWV0ZXJzLmdldCgpLCBBU0NJSUxpdGVyYWwoInZhbHVlcyIpLCBudWxscHRyKTsKLSAgICBSZWZQ
dHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4gaW5fcGF5bG9hZCA9IG1fYmFja2VuZERpc3Bh
dGNoZXItPmdldFZhbHVlKHBhcmFtZXRlcnMuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgicGF5bG9hZCIp
LCBudWxscHRyKTsKKyAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBpbl92YWx1ZXMgPSBtX2JhY2tl
bmREaXNwYXRjaGVyLT5nZXRPYmplY3QocGFyYW1ldGVycy5nZXQoKSwgQVNDSUlMaXRlcmFsKCJ2
YWx1ZXMiKSwgbnVsbHB0cik7CisgICAgUmVmUHRyPEpTT046OlZhbHVlPiBpbl9wYXlsb2FkID0g
bV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0VmFsdWUocGFyYW1ldGVycy5nZXQoKSwgQVNDSUlMaXRl
cmFsKCJwYXlsb2FkIiksIG51bGxwdHIpOwogICAgIGludCBpbl9kYXRhYmFzZUlkID0gbV9iYWNr
ZW5kRGlzcGF0Y2hlci0+Z2V0SW50ZWdlcihwYXJhbWV0ZXJzLmdldCgpLCBBU0NJSUxpdGVyYWwo
ImRhdGFiYXNlSWQiKSwgbnVsbHB0cik7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9y
T2JqZWN0PiBpbl9zcWxFcnJvciA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldE9iamVjdChwYXJh
bWV0ZXJzLmdldCgpLCBBU0NJSUxpdGVyYWwoInNxbEVycm9yIiksIG51bGxwdHIpOworICAgIFJl
ZlB0cjxKU09OOjpPYmplY3Q+IGluX3NxbEVycm9yID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0
T2JqZWN0KHBhcmFtZXRlcnMuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgic3FsRXJyb3IiKSwgbnVsbHB0
cik7CiAgICAgU3RyaW5nIGluX3NjcmVlbkNvbG9yID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0
U3RyaW5nKHBhcmFtZXRlcnMuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgic2NyZWVuQ29sb3IiKSwgbnVs
bHB0cik7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXk+IGluX2FsdGVybmF0
ZUNvbG9ycyA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldEFycmF5KHBhcmFtZXRlcnMuZ2V0KCks
IEFTQ0lJTGl0ZXJhbCgiYWx0ZXJuYXRlQ29sb3JzIiksIG51bGxwdHIpOworICAgIFJlZlB0cjxK
U09OOjpBcnJheT4gaW5fYWx0ZXJuYXRlQ29sb3JzID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0
QXJyYXkocGFyYW1ldGVycy5nZXQoKSwgQVNDSUlMaXRlcmFsKCJhbHRlcm5hdGVDb2xvcnMiKSwg
bnVsbHB0cik7CiAgICAgU3RyaW5nIGluX3ByaW50Q29sb3IgPSBtX2JhY2tlbmREaXNwYXRjaGVy
LT5nZXRTdHJpbmcocGFyYW1ldGVycy5nZXQoKSwgQVNDSUlMaXRlcmFsKCJwcmludENvbG9yIiks
IG51bGxwdHIpOwogICAgIGlmIChtX2JhY2tlbmREaXNwYXRjaGVyLT5oYXNQcm90b2NvbEVycm9y
cygpKSB7CiAgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3Io
QmFja2VuZERpc3BhdGNoZXI6OkludmFsaWRQYXJhbXMsIFN0cmluZzo6Zm9ybWF0KCJTb21lIGFy
Z3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiRGF0YWJhc2UuZXhl
Y3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzIikpOwpAQCAtMzU4LDggKzM1OCw4IEBAIHZvaWQgRGF0
YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcg
cmVxdWVzdElkLCBSZWZQCiAgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0
cmluZz4+IG91dF9jb2x1bW5OYW1lczsKICAgICBTdHJpbmcgb3V0X25vdGVzOwogICAgIGRvdWJs
ZSBvdXRfdGltZXN0YW1wOwotICAgIEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0IG91dF92YWx1
ZXM7Ci0gICAgSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSBvdXRfcGF5bG9hZDsKKyAgICBKU09O
OjpPYmplY3Qgb3V0X3ZhbHVlczsKKyAgICBKU09OOjpWYWx1ZSBvdXRfcGF5bG9hZDsKICAgICBJ
bnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RGF0YWJhc2VJZCBvdXRfZGF0YWJhc2VJZDsK
ICAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiBvdXRfc3Fs
RXJyb3I7CiAgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMg
b3V0X3NjcmVlbkNvbG9yOwpAQCAtNTUzLDcgKzU1Myw3IEBAIGVudW0gY2xhc3MgUHJpbWFyeUNv
bG9ycyB7CiAgICAgQmx1ZSA9IDIsCiB9OyAvLyBlbnVtIGNsYXNzIFByaW1hcnlDb2xvcnMKIC8q
IERhdGFiYXNlIGVycm9yLiAqLwotY2xhc3MgRXJyb3IgOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNw
ZWN0b3JPYmplY3RCYXNlIHsKK2NsYXNzIEVycm9yIDogcHVibGljIEpTT046Ok9iamVjdEJhc2Ug
ewogcHVibGljOgogICAgIGVudW0gewogICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCkBAIC01NjUs
MTQgKzU2NSwxNCBAQCBwdWJsaWM6CiAgICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgIGNsYXNz
IEJ1aWxkZXIgewogICAgIHByaXZhdGU6Ci0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IG1fcmVzdWx0OworICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBtX3Jlc3VsdDsKIAogICAg
ICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUo
KQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRl
cjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgIH0KIAotICAgICAgICBCdWlsZGVyKFJl
ZjwvKkVycm9yKi9JbnNwZWN0b3JPYmplY3Q+JiYgb2JqZWN0KQorICAgICAgICBCdWlsZGVyKFJl
ZjwvKkVycm9yKi9KU09OOjpPYmplY3Q+JiYgb2JqZWN0KQogICAgICAgICAgICAgOiBtX3Jlc3Vs
dChXVEZNb3ZlKG9iamVjdCkpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUp
OwpAQCAtNTk3LDkgKzU5Nyw5IEBAIHB1YmxpYzoKICAgICAgICAgUmVmPEVycm9yPiByZWxlYXNl
KCkKICAgICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmll
bGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KHNpemVvZihFcnJvcikgPT0gc2l6ZW9mKEluc3BlY3Rvck9iamVjdCksIGNhbm5vdF9jYXN0KTsK
KyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihFcnJvcikgPT0gc2l6ZW9mKEpTT046
Ok9iamVjdCksIGNhbm5vdF9jYXN0KTsKIAotICAgICAgICAgICAgUmVmPEluc3BlY3Rvck9iamVj
dD4gcmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKKyAgICAgICAgICAgIFJlZjxK
U09OOjpPYmplY3Q+IHJlc3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7CiAgICAgICAg
ICAgICByZXR1cm4gV1RGTW92ZSgqcmVpbnRlcnByZXRfY2FzdDxSZWY8RXJyb3I+Kj4oJnJlc3Vs
dCkpOwogICAgICAgICB9CiAgICAgfTsKQEAgLTYxMyw3ICs2MTMsNyBAQCBwdWJsaWM6CiAgICAg
ICovCiAgICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCiAgICAgewotICAg
ICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUo
KSk7CisgICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihKU09OOjpPYmplY3Q6OmNy
ZWF0ZSgpKTsKICAgICB9CiB9OwogCkBAIC03NjMsOCArNzYzLDggQEAgbmFtZXNwYWNlIEluc3Bl
Y3RvciB7CiBjbGFzcyBPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciBmaW5h
bCA6IHB1YmxpYyBBbHRlcm5hdGVEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyIHsKIHB1YmxpYzoK
ICAgICBPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcihpZDxUZXN0UHJvdG9j
b2xEYXRhYmFzZURvbWFpbkhhbmRsZXI+IGhhbmRsZXIpIHsgbV9kZWxlZ2F0ZSA9IGhhbmRsZXI7
IH0KLSAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhsb25nIHJl
cXVlc3RJZCwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheSogaW5fY29sdW1uTmFtZXMs
IGNvbnN0IFN0cmluZyogY29uc3QgaW5fbm90ZXMsIGNvbnN0IGRvdWJsZSogY29uc3QgaW5fdGlt
ZXN0YW1wLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCogaW5fdmFsdWVzLCBjb25z
dCBJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlKiBjb25zdCBpbl9wYXlsb2FkLCBjb25zdCBpbnQq
IGNvbnN0IGluX2RhdGFiYXNlSWQsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0KiBp
bl9zcWxFcnJvciwgY29uc3QgU3RyaW5nKiBjb25zdCBpbl9zY3JlZW5Db2xvciwgY29uc3QgSW5z
cGVjdG9yOjpJbnNwZWN0b3JBcnJheSogaW5fYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcq
IGNvbnN0IGluX3ByaW50Q29sb3IpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBleGVjdXRl
Tm9PcHRpb25hbFBhcmFtZXRlcnMobG9uZyByZXF1ZXN0SWQsIGNvbnN0IEluc3BlY3Rvcjo6SW5z
cGVjdG9yQXJyYXkmIGluX2NvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIGluX25vdGVzLCBkb3Vi
bGUgaW5fdGltZXN0YW1wLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCYgaW5fdmFs
dWVzLCBJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlIGluX3BheWxvYWQsIGludCBpbl9kYXRhYmFz
ZUlkLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCYgaW5fc3FsRXJyb3IsIGNvbnN0
IFN0cmluZyYgaW5fc2NyZWVuQ29sb3IsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXkm
IGluX2FsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nJiBpbl9wcmludENvbG9yKSBvdmVycmlk
ZTsKKyAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhsb25nIHJl
cXVlc3RJZCwgY29uc3QgSlNPTjo6QXJyYXkqIGluX2NvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcq
IGNvbnN0IGluX25vdGVzLCBjb25zdCBkb3VibGUqIGNvbnN0IGluX3RpbWVzdGFtcCwgY29uc3Qg
SlNPTjo6T2JqZWN0KiBpbl92YWx1ZXMsIGNvbnN0IEpTT046OlZhbHVlKiBjb25zdCBpbl9wYXls
b2FkLCBjb25zdCBpbnQqIGNvbnN0IGluX2RhdGFiYXNlSWQsIGNvbnN0IEpTT046Ok9iamVjdCog
aW5fc3FsRXJyb3IsIGNvbnN0IFN0cmluZyogY29uc3QgaW5fc2NyZWVuQ29sb3IsIGNvbnN0IEpT
T046OkFycmF5KiBpbl9hbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyogY29uc3QgaW5fcHJp
bnRDb2xvcikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVOb09wdGlvbmFsUGFy
YW1ldGVycyhsb25nIHJlcXVlc3RJZCwgY29uc3QgSlNPTjo6QXJyYXkmIGluX2NvbHVtbk5hbWVz
LCBjb25zdCBTdHJpbmcmIGluX25vdGVzLCBkb3VibGUgaW5fdGltZXN0YW1wLCBjb25zdCBKU09O
OjpPYmplY3QmIGluX3ZhbHVlcywgSlNPTjo6VmFsdWUgaW5fcGF5bG9hZCwgaW50IGluX2RhdGFi
YXNlSWQsIGNvbnN0IEpTT046Ok9iamVjdCYgaW5fc3FsRXJyb3IsIGNvbnN0IFN0cmluZyYgaW5f
c2NyZWVuQ29sb3IsIGNvbnN0IEpTT046OkFycmF5JiBpbl9hbHRlcm5hdGVDb2xvcnMsIGNvbnN0
IFN0cmluZyYgaW5fcHJpbnRDb2xvcikgb3ZlcnJpZGU7CiBwcml2YXRlOgogICAgIFJldGFpblB0
cjxpZDxUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkhhbmRsZXI+PiBtX2RlbGVnYXRlOwogfTsK
QEAgLTgxMyw3ICs4MTMsNyBAQCBwcml2YXRlOgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAot
dm9pZCBPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZUFsbE9w
dGlvbmFsUGFyYW1ldGVycyhsb25nIHJlcXVlc3RJZCwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0
b3JBcnJheSogaW5fY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyogY29uc3QgaW5fbm90ZXMsIGNv
bnN0IGRvdWJsZSogY29uc3QgaW5fdGltZXN0YW1wLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3Rv
ck9iamVjdCogaW5fdmFsdWVzLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlKiBjb25z
dCBpbl9wYXlsb2FkLCBjb25zdCBpbnQqIGNvbnN0IGluX2RhdGFiYXNlSWQsIGNvbnN0IEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yT2JqZWN0KiBpbl9zcWxFcnJvciwgY29uc3QgU3RyaW5nKiBjb25zdCBp
bl9zY3JlZW5Db2xvciwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheSogaW5fYWx0ZXJu
YXRlQ29sb3JzLCBjb25zdCBTdHJpbmcqIGNvbnN0IGluX3ByaW50Q29sb3IpCit2b2lkIE9iakNJ
bnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlQWxsT3B0aW9uYWxQYXJh
bWV0ZXJzKGxvbmcgcmVxdWVzdElkLCBjb25zdCBKU09OOjpBcnJheSogaW5fY29sdW1uTmFtZXMs
IGNvbnN0IFN0cmluZyogY29uc3QgaW5fbm90ZXMsIGNvbnN0IGRvdWJsZSogY29uc3QgaW5fdGlt
ZXN0YW1wLCBjb25zdCBKU09OOjpPYmplY3QqIGluX3ZhbHVlcywgY29uc3QgSlNPTjo6VmFsdWUq
IGNvbnN0IGluX3BheWxvYWQsIGNvbnN0IGludCogY29uc3QgaW5fZGF0YWJhc2VJZCwgY29uc3Qg
SlNPTjo6T2JqZWN0KiBpbl9zcWxFcnJvciwgY29uc3QgU3RyaW5nKiBjb25zdCBpbl9zY3JlZW5D
b2xvciwgY29uc3QgSlNPTjo6QXJyYXkqIGluX2FsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5n
KiBjb25zdCBpbl9wcmludENvbG9yKQogewogICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3Ry
aW5nICplcnJvcikgewogICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2Nv
bEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7
CkBAIC04ODUsNyArODg1LDcgQEAgdm9pZCBPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlz
cGF0Y2hlcjo6ZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhsb25nIHIKICAgICBbbV9kZWxl
Z2F0ZSBleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JD
YWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrIGNvbHVtbk5hbWVzOihpbl9j
b2x1bW5OYW1lcyA/ICZvX2luX2NvbHVtbk5hbWVzIDogbmlsKSBub3RlczooaW5fbm90ZXMgPyAm
b19pbl9ub3RlcyA6IG5pbCkgdGltZXN0YW1wOihpbl90aW1lc3RhbXAgPyAmb19pbl90aW1lc3Rh
bXAgOiBuaWwpIHZhbHVlczooaW5fdmFsdWVzID8gJm9faW5fdmFsdWVzIDogbmlsKSBwYXlsb2Fk
Oihpbl9wYXlsb2FkID8gJm9faW5fcGF5bG9hZCA6IG5pbCkgZGF0YWJhc2VJZDooaW5fZGF0YWJh
c2VJZCA/ICZvX2luX2RhdGFiYXNlSWQgOiBuaWwpIHNxbEVycm9yOihpbl9zcWxFcnJvciA/ICZv
X2luX3NxbEVycm9yIDogbmlsKSBzY3JlZW5Db2xvcjooaW5fc2NyZWVuQ29sb3IgPyAmb19pbl9z
Y3JlZW5Db2xvciA6IG5pbCkgYWx0ZXJuYXRlQ29sb3JzOihpbl9hbHRlcm5hdGVDb2xvcnMgPyAm
b19pbl9hbHRlcm5hdGVDb2xvcnMgOiBuaWwpIHByaW50Q29sb3I6KGluX3ByaW50Q29sb3IgPyAm
b19pbl9wcmludENvbG9yIDogbmlsKV07CiB9CiAKLXZvaWQgT2JqQ0luc3BlY3RvckRhdGFiYXNl
QmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhsb25nIHJlcXVl
c3RJZCwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheSYgaW5fY29sdW1uTmFtZXMsIGNv
bnN0IFN0cmluZyYgaW5fbm90ZXMsIGRvdWJsZSBpbl90aW1lc3RhbXAsIGNvbnN0IEluc3BlY3Rv
cjo6SW5zcGVjdG9yT2JqZWN0JiBpbl92YWx1ZXMsIEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUg
aW5fcGF5bG9hZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9y
T2JqZWN0JiBpbl9zcWxFcnJvciwgY29uc3QgU3RyaW5nJiBpbl9zY3JlZW5Db2xvciwgY29uc3Qg
SW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheSYgaW5fYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJp
bmcmIGluX3ByaW50Q29sb3IpCit2b2lkIE9iakNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNw
YXRjaGVyOjpleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMobG9uZyByZXF1ZXN0SWQsIGNvbnN0
IEpTT046OkFycmF5JiBpbl9jb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBpbl9ub3RlcywgZG91
YmxlIGluX3RpbWVzdGFtcCwgY29uc3QgSlNPTjo6T2JqZWN0JiBpbl92YWx1ZXMsIEpTT046OlZh
bHVlIGluX3BheWxvYWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBKU09OOjpPYmplY3QmIGlu
X3NxbEVycm9yLCBjb25zdCBTdHJpbmcmIGluX3NjcmVlbkNvbG9yLCBjb25zdCBKU09OOjpBcnJh
eSYgaW5fYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcmIGluX3ByaW50Q29sb3IpCiB7CiAg
ICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7CiAgICAgICAgIGJhY2tl
bmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlz
cGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2RvbWFpbi1h
dmFpbGFiaWxpdHkuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9kb21haW4tYXZhaWxhYmlsaXR5Lmpzb24t
cmVzdWx0CmluZGV4IDBjNGMzMDQ5OWZhNjI4NzMyN2U2MjNhNzFiMGE0YmY0Yjg2ZjlmNDIuLjk4
NTIwOWVjZWE0Mzc0MDk4ZmZmM2E0NmMzM2I3ZjZkNDEwNWMxNGUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVk
L2RvbWFpbi1hdmFpbGFiaWxpdHkuanNvbi1yZXN1bHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZG9tYWluLWF2YWls
YWJpbGl0eS5qc29uLXJlc3VsdApAQCAtMTY3LDcgKzE2Nyw3IEBAIHByb3RlY3RlZDoKIGNsYXNz
IERvbWFpbkFCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBTdXBwbGVtZW50YWxCYWNr
ZW5kRGlzcGF0Y2hlciB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxEb21haW5BQmFja2VuZERp
c3BhdGNoZXI+IGNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYsIERvbWFpbkFCYWNrZW5kRGlzcGF0
Y2hlckhhbmRsZXIqKTsKLSAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBT
dHJpbmcmIG1ldGhvZCwgUmVmPEluc3BlY3Rvck9iamVjdD4mJiBtZXNzYWdlKSBvdmVycmlkZTsK
KyAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwg
UmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKSBvdmVycmlkZTsKIHByaXZhdGU6CiAgICAgdm9p
ZCBlbmFibGUobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgcGFyYW1l
dGVycyk7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCkBAIC0x
ODQsNyArMTg0LDcgQEAgcHJpdmF0ZToKIGNsYXNzIERvbWFpbkJCYWNrZW5kRGlzcGF0Y2hlciBm
aW5hbCA6IHB1YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7CiBwdWJsaWM6CiAg
ICAgc3RhdGljIFJlZjxEb21haW5CQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShCYWNrZW5kRGlz
cGF0Y2hlciYsIERvbWFpbkJCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKLSAgICB2b2lkIGRp
c3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEluc3BlY3Rv
ck9iamVjdD4mJiBtZXNzYWdlKSBvdmVycmlkZTsKKyAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcmVx
dWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdl
KSBvdmVycmlkZTsKIHByaXZhdGU6CiAgICAgdm9pZCBlbmFibGUobG9uZyByZXF1ZXN0SWQsIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgcGFyYW1ldGVycyk7CiAjaWYgRU5BQkxFKElOU1BFQ1RP
Ul9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCkBAIC0yNjEsMTEgKzI2MSwxMSBAQCBEb21haW5BQmFj
a2VuZERpc3BhdGNoZXI6OkRvbWFpbkFCYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hl
ciYgYmFja2VuZERpcwogICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlZ2lzdGVyRGlzcGF0Y2hl
ckZvckRvbWFpbihBU0NJSUxpdGVyYWwoIkRvbWFpbkEiKSwgdGhpcyk7CiB9CiAKLXZvaWQgRG9t
YWluQUJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3Ry
aW5nJiBtZXRob2QsIFJlZjxJbnNwZWN0b3JPYmplY3Q+JiYgbWVzc2FnZSkKK3ZvaWQgRG9tYWlu
QUJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5n
JiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkKIHsKICAgICBSZWY8RG9tYWlu
QUJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKIAotICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IHBhcmFtZXRlcnM7CisgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVy
czsKICAgICBtZXNzYWdlLT5nZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJwYXJhbXMiKSwgcGFyYW1l
dGVycyk7CiAKICAgICBpZiAobWV0aG9kID09ICJlbmFibGUiKQpAQCAtMzA1LDExICszMDUsMTEg
QEAgRG9tYWluQkJhY2tlbmREaXNwYXRjaGVyOjpEb21haW5CQmFja2VuZERpc3BhdGNoZXIoQmFj
a2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXMKICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdp
c3RlckRpc3BhdGNoZXJGb3JEb21haW4oQVNDSUlMaXRlcmFsKCJEb21haW5CIiksIHRoaXMpOwog
fQogCi12b2lkIERvbWFpbkJCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0
SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SW5zcGVjdG9yT2JqZWN0PiYmIG1lc3NhZ2Up
Cit2b2lkIERvbWFpbkJCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQs
IGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpCiB7CiAg
ICAgUmVmPERvbWFpbkJCYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7CiAKLSAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbWV0ZXJzOworICAgIFJlZlB0cjxKU09OOjpPYmpl
Y3Q+IHBhcmFtZXRlcnM7CiAgICAgbWVzc2FnZS0+Z2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgicGFy
YW1zIiksIHBhcmFtZXRlcnMpOwogCiAgICAgaWYgKG1ldGhvZCA9PSAiZW5hYmxlIikKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5l
cmljL2V4cGVjdGVkL2RvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbi1yZXN1
bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJp
Yy9leHBlY3RlZC9kb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24tcmVzdWx0
CmluZGV4IGU5YWZjMmExOGJmNjc4OWRhODZmNDlmMDVlMGI0Y2ZjYWIxNGNiMGIuLjU0ZGQ2YzFl
ODg4MDE0Y2VhNTY2YzNmMjdhYmZhZTA1MTExY2M1NjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2RvbWFp
bnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbi1yZXN1bHQKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZG9t
YWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uLXJlc3VsdApAQCAtMTg1LDcgKzE4
NSw3IEBAIHByb3RlY3RlZDoKIGNsYXNzIE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIgZmluYWwg
OiBwdWJsaWMgU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIgewogcHVibGljOgogICAgIHN0
YXRpYyBSZWY8TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEJhY2tlbmREaXNwYXRj
aGVyJiwgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKLSAgICB2b2lkIGRpc3Bh
dGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEluc3BlY3Rvck9i
amVjdD4mJiBtZXNzYWdlKSBvdmVycmlkZTsKKyAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcmVxdWVz
dElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKSBv
dmVycmlkZTsKIHByaXZhdGU6CiAgICAgdm9pZCBsb2FkUmVzb3VyY2UxKGxvbmcgcmVxdWVzdElk
LCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIHBhcmFtZXRlcnMpOwogI2lmIEVOQUJMRShJTlNQ
RUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQpAQCAtMjAyLDcgKzIwMiw3IEBAIHByaXZhdGU6
CiBjbGFzcyBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIFN1cHBsZW1l
bnRhbEJhY2tlbmREaXNwYXRjaGVyIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPE5ldHdvcmsz
QmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYsIE5ldHdvcmszQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyKik7Ci0gICAgdm9pZCBkaXNwYXRjaChsb25nIHJlcXVlc3RJ
ZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxJbnNwZWN0b3JPYmplY3Q+JiYgbWVzc2FnZSkg
b3ZlcnJpZGU7CisgICAgdm9pZCBkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5n
JiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkgb3ZlcnJpZGU7CiBwcml2YXRl
OgogICAgIHZvaWQgbG9hZFJlc291cmNlMShsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKICAgICB2b2lkIGxvYWRSZXNvdXJjZTIobG9uZyByZXF1
ZXN0SWQsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgcGFyYW1ldGVycyk7CkBAIC0yODUsMTEg
KzI4NSwxMSBAQCBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOjpOZXR3b3JrMUJhY2tlbmREaXNw
YXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRAogICAgIG1fYmFja2VuZERpc3BhdGNo
ZXItPnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbihBU0NJSUxpdGVyYWwoIk5ldHdvcmsxIiks
IHRoaXMpOwogfQogCi12b2lkIE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxv
bmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEluc3BlY3Rvck9iamVjdD4m
JiBtZXNzYWdlKQordm9pZCBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25n
IHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVz
c2FnZSkKIHsKICAgICBSZWY8TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhp
cyk7CiAKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbWV0ZXJzOworICAgIFJlZlB0
cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnM7CiAgICAgbWVzc2FnZS0+Z2V0T2JqZWN0KEFTQ0lJ
TGl0ZXJhbCgicGFyYW1zIiksIHBhcmFtZXRlcnMpOwogCiAgICAgaWYgKG1ldGhvZCA9PSAibG9h
ZFJlc291cmNlMSIpCkBAIC0zMjksMTQgKzMyOSwxNCBAQCBOZXR3b3JrM0JhY2tlbmREaXNwYXRj
aGVyOjpOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5k
RAogICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbihB
U0NJSUxpdGVyYWwoIk5ldHdvcmszIiksIHRoaXMpOwogfQogCi12b2lkIE5ldHdvcmszQmFja2Vu
ZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhv
ZCwgUmVmPEluc3BlY3Rvck9iamVjdD4mJiBtZXNzYWdlKQordm9pZCBOZXR3b3JrM0JhY2tlbmRE
aXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2Qs
IFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkKIHsKICAgICBSZWY8TmV0d29yazNCYWNrZW5k
RGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7CiAKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBwYXJhbWV0ZXJzOworICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnM7CiAgICAg
bWVzc2FnZS0+Z2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgicGFyYW1zIiksIHBhcmFtZXRlcnMpOwog
Ci0gICAgdHlwZWRlZiB2b2lkIChOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjoqQ2FsbEhhbmRs
ZXIpKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIG1lc3NhZ2UpOwor
ICAgIHR5cGVkZWYgdm9pZCAoTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6KkNhbGxIYW5kbGVy
KShsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKTsKICAgICB0
eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBDYWxsSGFuZGxlcj4gRGlzcGF0Y2hNYXA7CiAgICAgc3Rh
dGljIE5ldmVyRGVzdHJveWVkPERpc3BhdGNoTWFwPiBkaXNwYXRjaE1hcDsKICAgICBpZiAoZGlz
cGF0Y2hNYXAuZ2V0KCkuaXNFbXB0eSgpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9lbnVtLXZhbHVl
cy5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2VudW0tdmFsdWVzLmpzb24tcmVzdWx0CmluZGV4IGQyYTAx
Yzg0ZWNmNTlhYjE3MWQ3ZDJhMzFiNWM2MGVkY2E1YzNlM2UuLjAyZWZhNGU3M2EyZWY5Y2Y5ZGNm
OGY0ZjhiOWFhNzc2YTU3YjMyNGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2VudW0tdmFsdWVzLmpzb24t
cmVzdWx0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9nZW5lcmljL2V4cGVjdGVkL2VudW0tdmFsdWVzLmpzb24tcmVzdWx0CkBAIC0xNjYsNyArMTY2
LDcgQEAgcHJvdGVjdGVkOgogY2xhc3MgQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyIGZp
bmFsIDogcHVibGljIFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyIHsKIHB1YmxpYzoKICAg
ICBzdGF0aWMgUmVmPENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEJhY2tl
bmREaXNwYXRjaGVyJiwgQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwot
ICAgIHZvaWQgZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBS
ZWY8SW5zcGVjdG9yT2JqZWN0PiYmIG1lc3NhZ2UpIG92ZXJyaWRlOworICAgIHZvaWQgZGlzcGF0
Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0
PiYmIG1lc3NhZ2UpIG92ZXJyaWRlOwogcHJpdmF0ZToKICAgICB2b2lkIGNvbW1hbmRXaXRoRW51
bVJldHVyblZhbHVlKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIHBh
cmFtZXRlcnMpOwogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQpA
QCAtMjQyLDExICsyNDIsMTEgQEAgQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpDb21t
YW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXIKICAgICBtX2JhY2tl
bmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4oQVNDSUlMaXRlcmFsKCJD
b21tYW5kRG9tYWluIiksIHRoaXMpOwogfQogCi12b2lkIENvbW1hbmREb21haW5CYWNrZW5kRGlz
cGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBS
ZWY8SW5zcGVjdG9yT2JqZWN0PiYmIG1lc3NhZ2UpCit2b2lkIENvbW1hbmREb21haW5CYWNrZW5k
RGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9k
LCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpCiB7CiAgICAgUmVmPENvbW1hbmREb21haW5C
YWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7CiAKLSAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBwYXJhbWV0ZXJzOworICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnM7
CiAgICAgbWVzc2FnZS0+Z2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgicGFyYW1zIiksIHBhcmFtZXRl
cnMpOwogCiAgICAgaWYgKG1ldGhvZCA9PSAiY29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUiKQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2dlbmVyaWMvZXhwZWN0ZWQvZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uLXJl
c3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5l
cmljL2V4cGVjdGVkL2V2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbi1yZXN1bHQK
aW5kZXggMTM3ZDE4MjdlM2ViYzIyMGZlMDU3OGYxZTU5OTZmMWY4YjQzYTljYS4uMDVjYTdmZTQ2
YTA5OWUyM2FmM2I0Mjc0YThjNTk2MGFlMjI1ZTA4NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZXZlbnRz
LXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uLXJlc3VsdAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9ldmVudHMt
d2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0CkBAIC0yMzQsOCArMjM0LDggQEAg
Y2xhc3MgRnJvbnRlbmRSb3V0ZXI7CiBjbGFzcyBEYXRhYmFzZUZyb250ZW5kRGlzcGF0Y2hlciB7
CiBwdWJsaWM6CiAgICAgRGF0YWJhc2VGcm9udGVuZERpc3BhdGNoZXIoRnJvbnRlbmRSb3V0ZXIm
IGZyb250ZW5kUm91dGVyKSA6IG1fZnJvbnRlbmRSb3V0ZXIoZnJvbnRlbmRSb3V0ZXIpIHsgfQot
ICAgIHZvaWQgZGlkRXhlY3V0ZU9wdGlvbmFsUGFyYW1ldGVycyhSZWZQdHI8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6QXJyYXk8U3RyaW5nPj4gY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyogY29uc3Qg
bm90ZXMsIGNvbnN0IGRvdWJsZSogY29uc3QgdGltZXN0YW1wLCBSZWZQdHI8SW5zcGVjdG9yOjpJ
bnNwZWN0b3JPYmplY3Q+IHZhbHVlcywgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+
IHBheWxvYWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IHNx
bEVycm9yLCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9y
cyogY29uc3Qgc2NyZWVuQ29sb3IsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFz
ZTo6Q29sb3JMaXN0PiBhbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyogY29uc3QgcHJpbnRD
b2xvcik7Ci0gICAgdm9pZCBkaWRFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMoUmVmUHRyPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+IGNvbHVtbk5hbWVzLCBjb25zdCBTdHJp
bmcmIG5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JP
YmplY3Q+IHZhbHVlcywgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+IHBheWxvYWQs
IFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IHNxbEVycm9yLCBj
b25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyYgc2NyZWVu
Q29sb3IsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiBh
bHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyYgcHJpbnRDb2xvcik7CisgICAgdm9pZCBkaWRF
eGVjdXRlT3B0aW9uYWxQYXJhbWV0ZXJzKFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJh
eTxTdHJpbmc+PiBjb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nKiBjb25zdCBub3RlcywgY29uc3Qg
ZG91YmxlKiBjb25zdCB0aW1lc3RhbXAsIFJlZlB0cjxKU09OOjpPYmplY3Q+IHZhbHVlcywgUmVm
UHRyPEpTT046OlZhbHVlPiBwYXlsb2FkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0
YWJhc2U6OkVycm9yPiBzcWxFcnJvciwgY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJh
c2U6OlByaW1hcnlDb2xvcnMqIGNvbnN0IHNjcmVlbkNvbG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4gYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJp
bmcqIGNvbnN0IHByaW50Q29sb3IpOworICAgIHZvaWQgZGlkRXhlY3V0ZU5vT3B0aW9uYWxQYXJh
bWV0ZXJzKFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+PiBjb2x1bW5O
YW1lcywgY29uc3QgU3RyaW5nJiBub3RlcywgZG91YmxlIHRpbWVzdGFtcCwgUmVmUHRyPEpTT046
Ok9iamVjdD4gdmFsdWVzLCBSZWZQdHI8SlNPTjo6VmFsdWU+IHBheWxvYWQsIFJlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IHNxbEVycm9yLCBjb25zdCBJbnNwZWN0
b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyYgc2NyZWVuQ29sb3IsIFJlZlB0
cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiBhbHRlcm5hdGVDb2xv
cnMsIGNvbnN0IFN0cmluZyYgcHJpbnRDb2xvcik7CiBwcml2YXRlOgogICAgIEZyb250ZW5kUm91
dGVyJiBtX2Zyb250ZW5kUm91dGVyOwogfTsKQEAgLTI4Miw3ICsyODIsNyBAQCBwcml2YXRlOgog
CiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAotdm9pZCBEYXRhYmFzZUZyb250ZW5kRGlzcGF0Y2hl
cjo6ZGlkRXhlY3V0ZU9wdGlvbmFsUGFyYW1ldGVycyhSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6QXJyYXk8U3RyaW5nPj4gY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyogY29uc3Qgbm90ZXMs
IGNvbnN0IGRvdWJsZSogY29uc3QgdGltZXN0YW1wLCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0
b3JPYmplY3Q+IHZhbHVlcywgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+IHBheWxv
YWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IHNxbEVycm9y
LCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyogY29u
c3Qgc2NyZWVuQ29sb3IsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29s
b3JMaXN0PiBhbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyogY29uc3QgcHJpbnRDb2xvcikK
K3ZvaWQgRGF0YWJhc2VGcm9udGVuZERpc3BhdGNoZXI6OmRpZEV4ZWN1dGVPcHRpb25hbFBhcmFt
ZXRlcnMoUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+IGNvbHVtbk5h
bWVzLCBjb25zdCBTdHJpbmcqIGNvbnN0IG5vdGVzLCBjb25zdCBkb3VibGUqIGNvbnN0IHRpbWVz
dGFtcCwgUmVmUHRyPEpTT046Ok9iamVjdD4gdmFsdWVzLCBSZWZQdHI8SlNPTjo6VmFsdWU+IHBh
eWxvYWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IHNxbEVy
cm9yLCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyog
Y29uc3Qgc2NyZWVuQ29sb3IsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6
Q29sb3JMaXN0PiBhbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyogY29uc3QgcHJpbnRDb2xv
cikKIHsKICAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiBqc29uTWVzc2FnZSA9IEluc3BlY3Rvck9i
amVjdDo6Y3JlYXRlKCk7CiAgICAganNvbk1lc3NhZ2UtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwo
Im1ldGhvZCIpLCBBU0NJSUxpdGVyYWwoIkRhdGFiYXNlLmRpZEV4ZWN1dGVPcHRpb25hbFBhcmFt
ZXRlcnMiKSk7CkBAIC0zMTAsNyArMzEwLDcgQEAgdm9pZCBEYXRhYmFzZUZyb250ZW5kRGlzcGF0
Y2hlcjo6ZGlkRXhlY3V0ZU9wdGlvbmFsUGFyYW1ldGVycyhSZWZQdHI8SW5zcGVjdG9yOjoKICAg
ICBtX2Zyb250ZW5kUm91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkp
OwogfQogCi12b2lkIERhdGFiYXNlRnJvbnRlbmREaXNwYXRjaGVyOjpkaWRFeGVjdXRlTm9PcHRp
b25hbFBhcmFtZXRlcnMoUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+
IGNvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIG5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBSZWZQ
dHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IHZhbHVlcywgUmVmUHRyPEluc3BlY3Rvcjo6
SW5zcGVjdG9yVmFsdWU+IHBheWxvYWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRh
YmFzZTo6RXJyb3I+IHNxbEVycm9yLCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFz
ZTo6UHJpbWFyeUNvbG9ycyYgc2NyZWVuQ29sb3IsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29s
OjpEYXRhYmFzZTo6Q29sb3JMaXN0PiBhbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyYgcHJp
bnRDb2xvcikKK3ZvaWQgRGF0YWJhc2VGcm9udGVuZERpc3BhdGNoZXI6OmRpZEV4ZWN1dGVOb09w
dGlvbmFsUGFyYW1ldGVycyhSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5n
Pj4gY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgbm90ZXMsIGRvdWJsZSB0aW1lc3RhbXAsIFJl
ZlB0cjxKU09OOjpPYmplY3Q+IHZhbHVlcywgUmVmUHRyPEpTT046OlZhbHVlPiBwYXlsb2FkLCBS
ZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiBzcWxFcnJvciwgY29u
c3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMmIHNjcmVlbkNv
bG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4gYWx0
ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcmIHByaW50Q29sb3IpCiB7CiAgICAgUmVmPEluc3Bl
Y3Rvck9iamVjdD4ganNvbk1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAg
IGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJtZXRob2QiKSwgQVNDSUlMaXRl
cmFsKCJEYXRhYmFzZS5kaWRFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMiKSk7CkBAIC0zOTMs
NyArMzkzLDcgQEAgdHlwZWRlZiBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6
OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4KIAogbmFtZXNwYWNlIERhdGFiYXNl
IHsKIC8qIERhdGFiYXNlIGVycm9yLiAqLwotY2xhc3MgRXJyb3IgOiBwdWJsaWMgSW5zcGVjdG9y
OjpJbnNwZWN0b3JPYmplY3RCYXNlIHsKK2NsYXNzIEVycm9yIDogcHVibGljIEpTT046Ok9iamVj
dEJhc2UgewogcHVibGljOgogICAgIGVudW0gewogICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCkBA
IC00MDUsMTQgKzQwNSwxNCBAQCBwdWJsaWM6CiAgICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAg
IGNsYXNzIEJ1aWxkZXIgewogICAgIHByaXZhdGU6Ci0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IG1fcmVzdWx0OworICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBtX3Jlc3VsdDsK
IAogICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0
U3RhdGUoKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8
QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgIH0KIAotICAgICAgICBCdWls
ZGVyKFJlZjwvKkVycm9yKi9JbnNwZWN0b3JPYmplY3Q+JiYgb2JqZWN0KQorICAgICAgICBCdWls
ZGVyKFJlZjwvKkVycm9yKi9KU09OOjpPYmplY3Q+JiYgb2JqZWN0KQogICAgICAgICAgICAgOiBt
X3Jlc3VsdChXVEZNb3ZlKG9iamVjdCkpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRf
c3RhdGUpOwpAQCAtNDM3LDkgKzQzNyw5IEBAIHB1YmxpYzoKICAgICAgICAgUmVmPEVycm9yPiBy
ZWxlYXNlKCkKICAgICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0g
QWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKLSAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKHNpemVvZihFcnJvcikgPT0gc2l6ZW9mKEluc3BlY3Rvck9iamVjdCksIGNhbm5vdF9j
YXN0KTsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihFcnJvcikgPT0gc2l6ZW9m
KEpTT046Ok9iamVjdCksIGNhbm5vdF9jYXN0KTsKIAotICAgICAgICAgICAgUmVmPEluc3BlY3Rv
ck9iamVjdD4gcmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKKyAgICAgICAgICAg
IFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7CiAg
ICAgICAgICAgICByZXR1cm4gV1RGTW92ZSgqcmVpbnRlcnByZXRfY2FzdDxSZWY8RXJyb3I+Kj4o
JnJlc3VsdCkpOwogICAgICAgICB9CiAgICAgfTsKQEAgLTQ1Myw3ICs0NTMsNyBAQCBwdWJsaWM6
CiAgICAgICovCiAgICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCiAgICAg
ewotICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSW5zcGVjdG9yT2JqZWN0Ojpj
cmVhdGUoKSk7CisgICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihKU09OOjpPYmpl
Y3Q6OmNyZWF0ZSgpKTsKICAgICB9CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9nZW5lcmF0ZS1k
b21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9nZW5lcmF0ZS1k
b21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbi1yZXN1bHQKaW5kZXggOWVlYjBiMWM5Yjcx
YjU1NzI1NmNmNzNkZmZjZWQ4ZGU4ZTIyZjYxMC4uNzg4NjU5ODI0MmRhOWZjM2RkMGUzMjRkZDdh
Yzk4Y2YyZGZlNGYwMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZl
YXR1cmUtZ3VhcmRzLmpzb24tcmVzdWx0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2dlbmVyYXRlLWRvbWFpbnMtd2l0
aC1mZWF0dXJlLWd1YXJkcy5qc29uLXJlc3VsdApAQCAtMTYyLDcgKzE2Miw3IEBAIHByb3RlY3Rl
ZDoKIGNsYXNzIE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgU3VwcGxl
bWVudGFsQmFja2VuZERpc3BhdGNoZXIgewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8TmV0d29y
azFCYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiwgTmV0d29yazFC
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKLSAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcmVxdWVz
dElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEluc3BlY3Rvck9iamVjdD4mJiBtZXNzYWdl
KSBvdmVycmlkZTsKKyAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJp
bmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKSBvdmVycmlkZTsKIHByaXZh
dGU6CiAgICAgdm9pZCBsb2FkUmVzb3VyY2UobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+JiYgcGFyYW1ldGVycyk7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVf
RElTUEFUQ0hFUlMpCkBAIC0yNDIsMTEgKzI0MiwxMSBAQCBOZXR3b3JrMUJhY2tlbmREaXNwYXRj
aGVyOjpOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5k
RAogICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbihB
U0NJSUxpdGVyYWwoIk5ldHdvcmsxIiksIHRoaXMpOwogfQogCi12b2lkIE5ldHdvcmsxQmFja2Vu
ZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhv
ZCwgUmVmPEluc3BlY3Rvck9iamVjdD4mJiBtZXNzYWdlKQordm9pZCBOZXR3b3JrMUJhY2tlbmRE
aXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2Qs
IFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkKIHsKICAgICBSZWY8TmV0d29yazFCYWNrZW5k
RGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7CiAKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBwYXJhbWV0ZXJzOworICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnM7CiAgICAg
bWVzc2FnZS0+Z2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgicGFyYW1zIiksIHBhcmFtZXRlcnMpOwog
CiAgICAgaWYgKG1ldGhvZCA9PSAibG9hZFJlc291cmNlIikKQEAgLTQ0MSw3ICs0NDEsNyBAQCBj
bGFzcyBOZXR3b3JrRXJyb3I7CiAKICNpZiBQTEFURk9STShXRUJfVFlQRVMpCiBuYW1lc3BhY2Ug
TmV0d29yazIgewotY2xhc3MgTmV0d29ya0Vycm9yIDogcHVibGljIEluc3BlY3Rvcjo6SW5zcGVj
dG9yT2JqZWN0QmFzZSB7CitjbGFzcyBOZXR3b3JrRXJyb3IgOiBwdWJsaWMgSlNPTjo6T2JqZWN0
QmFzZSB7CiBwdWJsaWM6CiAgICAgZW51bSB7CiAgICAgICAgIE5vRmllbGRzU2V0ID0gMCwKQEAg
LTQ1MywxNCArNDUzLDE0IEBAIHB1YmxpYzoKICAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICAg
Y2xhc3MgQnVpbGRlciB7CiAgICAgcHJpdmF0ZToKLSAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gbV9yZXN1bHQ7CisgICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG1fcmVzdWx0Owog
CiAgICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RT
dGF0ZSgpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxC
dWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICAgfQogCi0gICAgICAgIEJ1aWxk
ZXIoUmVmPC8qTmV0d29ya0Vycm9yKi9JbnNwZWN0b3JPYmplY3Q+JiYgb2JqZWN0KQorICAgICAg
ICBCdWlsZGVyKFJlZjwvKk5ldHdvcmtFcnJvciovSlNPTjo6T2JqZWN0PiYmIG9iamVjdCkKICAg
ICAgICAgICAgIDogbV9yZXN1bHQoV1RGTW92ZShvYmplY3QpKQogICAgICAgICB7CiAgICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVk
X2luX25vbl9pbml0X3N0YXRlKTsKQEAgLTQ4NSw5ICs0ODUsOSBAQCBwdWJsaWM6CiAgICAgICAg
IFJlZjxOZXR3b3JrRXJyb3I+IHJlbGVhc2UoKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwot
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKE5ldHdvcmtFcnJvcikgPT0gc2l6ZW9m
KEluc3BlY3Rvck9iamVjdCksIGNhbm5vdF9jYXN0KTsKKyAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKHNpemVvZihOZXR3b3JrRXJyb3IpID09IHNpemVvZihKU09OOjpPYmplY3QpLCBjYW5ub3Rf
Y2FzdCk7CiAKLSAgICAgICAgICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IG1fcmVz
dWx0LnJlbGVhc2VOb25OdWxsKCk7CisgICAgICAgICAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1
bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOwogICAgICAgICAgICAgcmV0dXJuIFdURk1v
dmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPE5ldHdvcmtFcnJvcj4qPigmcmVzdWx0KSk7CiAgICAg
ICAgIH0KICAgICB9OwpAQCAtNTAxLDcgKzUwMSw3IEBAIHB1YmxpYzoKICAgICAgKi8KICAgICBz
dGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKICAgICB7Ci0gICAgICAgIHJldHVy
biBCdWlsZGVyPE5vRmllbGRzU2V0PihJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpKTsKKyAgICAg
ICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEpTT046Ok9iamVjdDo6Y3JlYXRlKCkpOwog
ICAgIH0KIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL3NoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0
dGVycy5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL3NoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5q
c29uLXJlc3VsdAppbmRleCAxNjg4MjFhOTlmZDUyMGY5ZTI2Nzk3ZDdmOWM2Y2FjYTdiM2VlY2Yz
Li5lNjYwNTA0NDdlMjAzOTRhNWRiMWU2NDI0ZGQ1ZTkxOTQxMmQ0ODkyIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBl
Y3RlZC9zaGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbi1yZXN1bHQKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0
ZWQvc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24tcmVzdWx0CkBAIC0zMzUsNyAr
MzM1LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVl
KFQgZW51bVZhbHVlKQogCiBuYW1lc3BhY2UgUnVudGltZSB7CiAvKiBLZXkgcGF0aC4gKi8KLWNs
YXNzIEtleVBhdGggOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3RCYXNlIHsKK2Ns
YXNzIEtleVBhdGggOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7CiBwdWJsaWM6CiAgICAgLy8g
TmFtZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSAndHlwZScgd2hpbGUgZ2VuZXJhdGluZyBLZXlQYXRo
LgogICAgIGVudW0gY2xhc3MgVHlwZSB7CkBAIC0zNTIsMTQgKzM1MiwxNCBAQCBwdWJsaWM6CiAg
ICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgIGNsYXNzIEJ1aWxkZXIgewogICAgIHByaXZhdGU6
Ci0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OworICAgICAgICBSZWZQ
dHI8SlNPTjo6T2JqZWN0PiBtX3Jlc3VsdDsKIAogICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4g
QnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgICB7CiAgICAgICAgICAg
ICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7
CiAgICAgICAgIH0KIAotICAgICAgICBCdWlsZGVyKFJlZjwvKktleVBhdGgqL0luc3BlY3Rvck9i
amVjdD4mJiBvYmplY3QpCisgICAgICAgIEJ1aWxkZXIoUmVmPC8qS2V5UGF0aCovSlNPTjo6T2Jq
ZWN0PiYmIG9iamVjdCkKICAgICAgICAgICAgIDogbV9yZXN1bHQoV1RGTW92ZShvYmplY3QpKQog
ICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1Nl
dCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKQEAgLTM3Nyw5ICszNzcsOSBA
QCBwdWJsaWM6CiAgICAgICAgIFJlZjxLZXlQYXRoPiByZWxlYXNlKCkKICAgICAgICAgewogICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNf
bm90X3JlYWR5KTsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihLZXlQYXRoKSA9
PSBzaXplb2YoSW5zcGVjdG9yT2JqZWN0KSwgY2Fubm90X2Nhc3QpOworICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoc2l6ZW9mKEtleVBhdGgpID09IHNpemVvZihKU09OOjpPYmplY3QpLCBjYW5u
b3RfY2FzdCk7CiAKLSAgICAgICAgICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IG1f
cmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7CisgICAgICAgICAgICBSZWY8SlNPTjo6T2JqZWN0PiBy
ZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOwogICAgICAgICAgICAgcmV0dXJuIFdU
Rk1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPEtleVBhdGg+Kj4oJnJlc3VsdCkpOwogICAgICAg
ICB9CiAgICAgfTsKQEAgLTM5Miw3ICszOTIsNyBAQCBwdWJsaWM6CiAgICAgICovCiAgICAgc3Rh
dGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCiAgICAgewotICAgICAgICByZXR1cm4g
QnVpbGRlcjxOb0ZpZWxkc1NldD4oSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSk7CisgICAgICAg
IHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihKU09OOjpPYmplY3Q6OmNyZWF0ZSgpKTsKICAg
ICB9CiAKICAgICB2b2lkIHNldFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMv
ZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uLXJlc3VsdCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVk
L3R5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbi1yZXN1bHQKaW5kZXggNzBjYjM1NTk4
NjRkMjBlZTJkNmVmNDY5OTVmMzI4YTU0YTE0NDBkNi4uOTYyYzkxYzE5ZTkzMzczMjZiZjhhY2I0
NGU5ZDRhOGZmYmI4ZmJlMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1vYmpl
Y3QtdHlwZS5qc29uLXJlc3VsdAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10
eXBlLmpzb24tcmVzdWx0CkBAIC0zNTMsNyArMzUzLDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4g
U3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKFQgZW51bVZhbHVlKQogCiBuYW1lc3BhY2UgRGF0
YWJhc2UgewogLyogRGF0YWJhc2UgZXJyb3IuICovCi1jbGFzcyBFcnJvciA6IHB1YmxpYyBJbnNw
ZWN0b3I6Okluc3BlY3Rvck9iamVjdEJhc2UgeworY2xhc3MgRXJyb3IgOiBwdWJsaWMgSlNPTjo6
T2JqZWN0QmFzZSB7CiBwdWJsaWM6CiAgICAgZW51bSB7CiAgICAgICAgIE5vRmllbGRzU2V0ID0g
MCwKQEAgLTM2NSwxNCArMzY1LDE0IEBAIHB1YmxpYzoKICAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+
CiAgICAgY2xhc3MgQnVpbGRlciB7CiAgICAgcHJpdmF0ZToKLSAgICAgICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gbV9yZXN1bHQ7CisgICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG1fcmVz
dWx0OwogCiAgICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4m
IGNhc3RTdGF0ZSgpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRf
Y2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICAgfQogCi0gICAgICAg
IEJ1aWxkZXIoUmVmPC8qRXJyb3IqL0luc3BlY3Rvck9iamVjdD4mJiBvYmplY3QpCisgICAgICAg
IEJ1aWxkZXIoUmVmPC8qRXJyb3IqL0pTT046Ok9iamVjdD4mJiBvYmplY3QpCiAgICAgICAgICAg
ICA6IG1fcmVzdWx0KFdURk1vdmUob2JqZWN0KSkKICAgICAgICAgewogICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25f
aW5pdF9zdGF0ZSk7CkBAIC0zOTcsOSArMzk3LDkgQEAgcHVibGljOgogICAgICAgICBSZWY8RXJy
b3I+IHJlbGVhc2UoKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFU
RSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwotICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoc2l6ZW9mKEVycm9yKSA9PSBzaXplb2YoSW5zcGVjdG9yT2JqZWN0KSwgY2Fu
bm90X2Nhc3QpOworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKEVycm9yKSA9PSBz
aXplb2YoSlNPTjo6T2JqZWN0KSwgY2Fubm90X2Nhc3QpOwogCi0gICAgICAgICAgICBSZWY8SW5z
cGVjdG9yT2JqZWN0PiByZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOworICAgICAg
ICAgICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51bGwo
KTsKICAgICAgICAgICAgIHJldHVybiBXVEZNb3ZlKCpyZWludGVycHJldF9jYXN0PFJlZjxFcnJv
cj4qPigmcmVzdWx0KSk7CiAgICAgICAgIH0KICAgICB9OwpAQCAtNDEzLDcgKzQxMyw3IEBAIHB1
YmxpYzoKICAgICAgKi8KICAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkK
ICAgICB7Ci0gICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihJbnNwZWN0b3JPYmpl
Y3Q6OmNyZWF0ZSgpKTsKKyAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEpTT046
Ok9iamVjdDo6Y3JlYXRlKCkpOwogICAgIH0KIH07CiAKQEAgLTQyNCw3ICs0MjQsNyBAQCBlbnVt
IGNsYXNzIE1vdXNlQnV0dG9uIHsKICAgICBNaWRkbGUgPSAyLAogICAgIFJpZ2h0ID0gMywKIH07
IC8vIGVudW0gY2xhc3MgTW91c2VCdXR0b24KLWNsYXNzIE9wdGlvbmFsUGFyYW1ldGVyQnVuZGxl
IDogcHVibGljIEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0QmFzZSB7CitjbGFzcyBPcHRpb25h
bFBhcmFtZXRlckJ1bmRsZSA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKIHB1YmxpYzoKICAg
ICAvLyBOYW1lZCBhZnRlciBwcm9wZXJ0eSBuYW1lICdkaXJlY3Rpb25hbGl0eScgd2hpbGUgZ2Vu
ZXJhdGluZyBPcHRpb25hbFBhcmFtZXRlckJ1bmRsZS4KICAgICBlbnVtIGNsYXNzIERpcmVjdGlv
bmFsaXR5IHsKQEAgLTQzOSwxNCArNDM5LDE0IEBAIHB1YmxpYzoKICAgICB0ZW1wbGF0ZTxpbnQg
U1RBVEU+CiAgICAgY2xhc3MgQnVpbGRlciB7CiAgICAgcHJpdmF0ZToKLSAgICAgICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CisgICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+
IG1fcmVzdWx0OwogCiAgICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwg
U1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiAqcmVpbnRl
cnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICAgfQogCi0g
ICAgICAgIEJ1aWxkZXIoUmVmPC8qT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGUqL0luc3BlY3Rvck9i
amVjdD4mJiBvYmplY3QpCisgICAgICAgIEJ1aWxkZXIoUmVmPC8qT3B0aW9uYWxQYXJhbWV0ZXJC
dW5kbGUqL0pTT046Ok9iamVjdD4mJiBvYmplY3QpCiAgICAgICAgICAgICA6IG1fcmVzdWx0KFdU
Rk1vdmUob2JqZWN0KSkKICAgICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RB
VEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CkBA
IC00NTcsOSArNDU3LDkgQEAgcHVibGljOgogICAgICAgICBSZWY8T3B0aW9uYWxQYXJhbWV0ZXJC
dW5kbGU+IHJlbGVhc2UoKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChT
VEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwotICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoc2l6ZW9mKE9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlKSA9PSBzaXplb2Yo
SW5zcGVjdG9yT2JqZWN0KSwgY2Fubm90X2Nhc3QpOworICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoc2l6ZW9mKE9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlKSA9PSBzaXplb2YoSlNPTjo6T2JqZWN0
KSwgY2Fubm90X2Nhc3QpOwogCi0gICAgICAgICAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiByZXN1
bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOworICAgICAgICAgICAgUmVmPEpTT046Ok9i
amVjdD4gcmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKICAgICAgICAgICAgIHJl
dHVybiBXVEZNb3ZlKCpyZWludGVycHJldF9jYXN0PFJlZjxPcHRpb25hbFBhcmFtZXRlckJ1bmRs
ZT4qPigmcmVzdWx0KSk7CiAgICAgICAgIH0KICAgICB9OwpAQCAtNDcxLDcgKzQ3MSw3IEBAIHB1
YmxpYzoKICAgICAgKi8KICAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkK
ICAgICB7Ci0gICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihJbnNwZWN0b3JPYmpl
Y3Q6OmNyZWF0ZSgpKTsKKyAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEpTT046
Ok9iamVjdDo6Y3JlYXRlKCkpOwogICAgIH0KIAogICAgIHZvaWQgc2V0Q29sdW1uTmFtZXMoUmVm
UHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+IHZhbHVlKQpAQCAtNDk5LDEy
ICs0OTksMTIgQEAgcHVibGljOgogICAgICAgICBJbnNwZWN0b3JPYmplY3RCYXNlOjpzZXREb3Vi
bGUoQVNDSUlMaXRlcmFsKCJ0aW1lc3RhbXAiKSwgdmFsdWUpOwogICAgIH0KIAotICAgIHZvaWQg
c2V0VmFsdWVzKFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gdmFsdWUpCisgICAg
dm9pZCBzZXRWYWx1ZXMoUmVmUHRyPEpTT046Ok9iamVjdD4gdmFsdWUpCiAgICAgewogICAgICAg
ICBJbnNwZWN0b3JPYmplY3RCYXNlOjpzZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJ2YWx1ZXMiKSwg
V1RGTW92ZSh2YWx1ZSkpOwogICAgIH0KIAotICAgIHZvaWQgc2V0UGF5bG9hZChSZWZQdHI8SW5z
cGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4gdmFsdWUpCisgICAgdm9pZCBzZXRQYXlsb2FkKFJlZlB0
cjxKU09OOjpWYWx1ZT4gdmFsdWUpCiAgICAgewogICAgICAgICBJbnNwZWN0b3JPYmplY3RCYXNl
OjpzZXRWYWx1ZShBU0NJSUxpdGVyYWwoInBheWxvYWQiKSwgV1RGTW92ZSh2YWx1ZSkpOwogICAg
IH0KQEAgLTUyMCw3ICs1MjAsNyBAQCBwdWJsaWM6CiAgICAgfQogfTsKIAotY2xhc3MgUGFyYW1l
dGVyQnVuZGxlIDogcHVibGljIEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0QmFzZSB7CitjbGFz
cyBQYXJhbWV0ZXJCdW5kbGUgOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7CiBwdWJsaWM6CiAg
ICAgLy8gTmFtZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSAnZGlyZWN0aW9uYWxpdHknIHdoaWxlIGdl
bmVyYXRpbmcgUGFyYW1ldGVyQnVuZGxlLgogICAgIGVudW0gY2xhc3MgRGlyZWN0aW9uYWxpdHkg
ewpAQCAtNTQ0LDE0ICs1NDQsMTQgQEAgcHVibGljOgogICAgIHRlbXBsYXRlPGludCBTVEFURT4K
ICAgICBjbGFzcyBCdWlsZGVyIHsKICAgICBwcml2YXRlOgotICAgICAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBtX3Jlc3VsdDsKKyAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gbV9yZXN1
bHQ7CiAKICAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYg
Y2FzdFN0YXRlKCkKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9j
YXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgICB9CiAKLSAgICAgICAg
QnVpbGRlcihSZWY8LypQYXJhbWV0ZXJCdW5kbGUqL0luc3BlY3Rvck9iamVjdD4mJiBvYmplY3Qp
CisgICAgICAgIEJ1aWxkZXIoUmVmPC8qUGFyYW1ldGVyQnVuZGxlKi9KU09OOjpPYmplY3Q+JiYg
b2JqZWN0KQogICAgICAgICAgICAgOiBtX3Jlc3VsdChXVEZNb3ZlKG9iamVjdCkpCiAgICAgICAg
IHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWls
ZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwpAQCAtNTk0LDE0ICs1OTQsMTQgQEAgcHVi
bGljOgogICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxUaW1lc3RhbXBTZXQ+KCk7CiAgICAg
ICAgIH0KIAotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVmFsdWVzU2V0PiYgc2V0VmFsdWVzKFJl
ZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gdmFsdWUpCisgICAgICAgIEJ1aWxkZXI8
U1RBVEUgfCBWYWx1ZXNTZXQ+JiBzZXRWYWx1ZXMoUmVmUHRyPEpTT046Ok9iamVjdD4gdmFsdWUp
CiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBWYWx1ZXNT
ZXQpLCBwcm9wZXJ0eV92YWx1ZXNfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICAgbV9yZXN1bHQt
PnNldE9iamVjdChBU0NJSUxpdGVyYWwoInZhbHVlcyIpLCB2YWx1ZSk7CiAgICAgICAgICAgICBy
ZXR1cm4gY2FzdFN0YXRlPFZhbHVlc1NldD4oKTsKICAgICAgICAgfQogCi0gICAgICAgIEJ1aWxk
ZXI8U1RBVEUgfCBQYXlsb2FkU2V0PiYgc2V0UGF5bG9hZChSZWZQdHI8SW5zcGVjdG9yOjpJbnNw
ZWN0b3JWYWx1ZT4gdmFsdWUpCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBQYXlsb2FkU2V0PiYg
c2V0UGF5bG9hZChSZWZQdHI8SlNPTjo6VmFsdWU+IHZhbHVlKQogICAgICAgICB7CiAgICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgUGF5bG9hZFNldCksIHByb3BlcnR5X3BheWxv
YWRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICAgbV9yZXN1bHQtPnNldFZhbHVlKEFTQ0lJTGl0
ZXJhbCgicGF5bG9hZCIpLCB2YWx1ZSk7CkBAIC02MjUsOSArNjI1LDkgQEAgcHVibGljOgogICAg
ICAgICBSZWY8UGFyYW1ldGVyQnVuZGxlPiByZWxlYXNlKCkKICAgICAgICAgewogICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3Jl
YWR5KTsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihQYXJhbWV0ZXJCdW5kbGUp
ID09IHNpemVvZihJbnNwZWN0b3JPYmplY3QpLCBjYW5ub3RfY2FzdCk7CisgICAgICAgICAgICBD
T01QSUxFX0FTU0VSVChzaXplb2YoUGFyYW1ldGVyQnVuZGxlKSA9PSBzaXplb2YoSlNPTjo6T2Jq
ZWN0KSwgY2Fubm90X2Nhc3QpOwogCi0gICAgICAgICAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiBy
ZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOworICAgICAgICAgICAgUmVmPEpTT046
Ok9iamVjdD4gcmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKICAgICAgICAgICAg
IHJldHVybiBXVEZNb3ZlKCpyZWludGVycHJldF9jYXN0PFJlZjxQYXJhbWV0ZXJCdW5kbGU+Kj4o
JnJlc3VsdCkpOwogICAgICAgICB9CiAgICAgfTsKQEAgLTY0OCwxMiArNjQ4LDEyIEBAIHB1Ymxp
YzoKICAgICAgKi8KICAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKICAg
ICB7Ci0gICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihJbnNwZWN0b3JPYmplY3Q6
OmNyZWF0ZSgpKTsKKyAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEpTT046Ok9i
amVjdDo6Y3JlYXRlKCkpOwogICAgIH0KIH07CiAKIC8qIENvbmZsaWN0ZWQgbmFtZXMgbWF5IGNh
dXNlIGdlbmVyYXRlZCBnZXR0ZXJzL3NldHRlcnMgdG8gY2xhc2ggd2l0aCBidWlsdC1pbiBJbnNw
ZWN0b3JPYmplY3QgbWV0aG9kcy4gKi8KLWNsYXNzIE9iamVjdFdpdGhQcm9wZXJ0eU5hbWVDb25m
bGljdHMgOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3RCYXNlIHsKK2NsYXNzIE9i
amVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHMgOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7
CiBwdWJsaWM6CiAgICAgZW51bSB7CiAgICAgICAgIE5vRmllbGRzU2V0ID0gMCwKQEAgLTY2OCwx
NCArNjY4LDE0IEBAIHB1YmxpYzoKICAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICAgY2xhc3Mg
QnVpbGRlciB7CiAgICAgcHJpdmF0ZToKLSAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
bV9yZXN1bHQ7CisgICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG1fcmVzdWx0OwogCiAgICAg
ICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgp
CiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVy
PFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICAgfQogCi0gICAgICAgIEJ1aWxkZXIoUmVm
PC8qT2JqZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0cyovSW5zcGVjdG9yT2JqZWN0PiYmIG9i
amVjdCkKKyAgICAgICAgQnVpbGRlcihSZWY8LypPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxp
Y3RzKi9KU09OOjpPYmplY3Q+JiYgb2JqZWN0KQogICAgICAgICAgICAgOiBtX3Jlc3VsdChXVEZN
b3ZlKG9iamVjdCkpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRF
ID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwpAQCAt
NzIxLDkgKzcyMSw5IEBAIHB1YmxpYzoKICAgICAgICAgUmVmPE9iamVjdFdpdGhQcm9wZXJ0eU5h
bWVDb25mbGljdHM+IHJlbGVhc2UoKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FT
U0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwotICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKE9iamVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGlj
dHMpID09IHNpemVvZihJbnNwZWN0b3JPYmplY3QpLCBjYW5ub3RfY2FzdCk7CisgICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVChzaXplb2YoT2JqZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0cykg
PT0gc2l6ZW9mKEpTT046Ok9iamVjdCksIGNhbm5vdF9jYXN0KTsKIAotICAgICAgICAgICAgUmVm
PEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKKyAg
ICAgICAgICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VOb25O
dWxsKCk7CiAgICAgICAgICAgICByZXR1cm4gV1RGTW92ZSgqcmVpbnRlcnByZXRfY2FzdDxSZWY8
T2JqZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0cz4qPigmcmVzdWx0KSk7CiAgICAgICAgIH0K
ICAgICB9OwpAQCAtNzQwLDE0ICs3NDAsMTQgQEAgcHVibGljOgogICAgICAqLwogICAgIHN0YXRp
YyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIEJ1
aWxkZXI8Tm9GaWVsZHNTZXQ+KEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkpOworICAgICAgICBy
ZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSk7CiAgICAg
fQogfTsKIAogfSAvLyBEYXRhYmFzZQogCiBuYW1lc3BhY2UgVGVzdCB7Ci1jbGFzcyBQYXJhbWV0
ZXJCdW5kbGUgOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3RCYXNlIHsKK2NsYXNz
IFBhcmFtZXRlckJ1bmRsZSA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKIHB1YmxpYzoKICAg
ICAvLyBOYW1lZCBhZnRlciBwcm9wZXJ0eSBuYW1lICdkaXJlY3Rpb25hbGl0eScgd2hpbGUgZ2Vu
ZXJhdGluZyBQYXJhbWV0ZXJCdW5kbGUuCiAgICAgZW51bSBjbGFzcyBEaXJlY3Rpb25hbGl0eSB7
CkBAIC03NzAsMTQgKzc3MCwxNCBAQCBwdWJsaWM6CiAgICAgdGVtcGxhdGU8aW50IFNUQVRFPgog
ICAgIGNsYXNzIEJ1aWxkZXIgewogICAgIHByaXZhdGU6Ci0gICAgICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IG1fcmVzdWx0OworICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBtX3Jlc3Vs
dDsKIAogICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBj
YXN0U3RhdGUoKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nh
c3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgIH0KIAotICAgICAgICBC
dWlsZGVyKFJlZjwvKlBhcmFtZXRlckJ1bmRsZSovSW5zcGVjdG9yT2JqZWN0PiYmIG9iamVjdCkK
KyAgICAgICAgQnVpbGRlcihSZWY8LypQYXJhbWV0ZXJCdW5kbGUqL0pTT046Ok9iamVjdD4mJiBv
YmplY3QpCiAgICAgICAgICAgICA6IG1fcmVzdWx0KFdURk1vdmUob2JqZWN0KSkKICAgICAgICAg
ewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxk
ZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CkBAIC04MjAsMTQgKzgyMCwxNCBAQCBwdWJs
aWM6CiAgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFRpbWVzdGFtcFNldD4oKTsKICAgICAg
ICAgfQogCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBWYWx1ZXNTZXQ+JiBzZXRWYWx1ZXMoUmVm
UHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKKyAgICAgICAgQnVpbGRlcjxT
VEFURSB8IFZhbHVlc1NldD4mIHNldFZhbHVlcyhSZWZQdHI8SlNPTjo6T2JqZWN0PiB2YWx1ZSkK
ICAgICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFZhbHVlc1Nl
dCksIHByb3BlcnR5X3ZhbHVlc19hbHJlYWR5X3NldCk7CiAgICAgICAgICAgICBtX3Jlc3VsdC0+
c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgidmFsdWVzIiksIHZhbHVlKTsKICAgICAgICAgICAgIHJl
dHVybiBjYXN0U3RhdGU8VmFsdWVzU2V0PigpOwogICAgICAgICB9CiAKLSAgICAgICAgQnVpbGRl
cjxTVEFURSB8IFBheWxvYWRTZXQ+JiBzZXRQYXlsb2FkKFJlZlB0cjxJbnNwZWN0b3I6Okluc3Bl
Y3RvclZhbHVlPiB2YWx1ZSkKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IFBheWxvYWRTZXQ+JiBz
ZXRQYXlsb2FkKFJlZlB0cjxKU09OOjpWYWx1ZT4gdmFsdWUpCiAgICAgICAgIHsKICAgICAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBQYXlsb2FkU2V0KSwgcHJvcGVydHlfcGF5bG9h
ZF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0VmFsdWUoQVNDSUlMaXRl
cmFsKCJwYXlsb2FkIiksIHZhbHVlKTsKQEAgLTg0NCw5ICs4NDQsOSBAQCBwdWJsaWM6CiAgICAg
ICAgIFJlZjxQYXJhbWV0ZXJCdW5kbGU+IHJlbGVhc2UoKQogICAgICAgICB7CiAgICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVh
ZHkpOwotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKFBhcmFtZXRlckJ1bmRsZSkg
PT0gc2l6ZW9mKEluc3BlY3Rvck9iamVjdCksIGNhbm5vdF9jYXN0KTsKKyAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKHNpemVvZihQYXJhbWV0ZXJCdW5kbGUpID09IHNpemVvZihKU09OOjpPYmpl
Y3QpLCBjYW5ub3RfY2FzdCk7CiAKLSAgICAgICAgICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IHJl
c3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7CisgICAgICAgICAgICBSZWY8SlNPTjo6
T2JqZWN0PiByZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOwogICAgICAgICAgICAg
cmV0dXJuIFdURk1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPFBhcmFtZXRlckJ1bmRsZT4qPigm
cmVzdWx0KSk7CiAgICAgICAgIH0KICAgICB9OwpAQCAtODY2LDcgKzg2Niw3IEBAIHB1YmxpYzoK
ICAgICAgKi8KICAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKICAgICB7
Ci0gICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihJbnNwZWN0b3JPYmplY3Q6OmNy
ZWF0ZSgpKTsKKyAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEpTT046Ok9iamVj
dDo6Y3JlYXRlKCkpOwogICAgIH0KIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL3R5cGUtcmVxdWly
aW5nLXJ1bnRpbWUtY2FzdHMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC90eXBlLXJlcXVpcmluZy1ydW50
aW1lLWNhc3RzLmpzb24tcmVzdWx0CmluZGV4IDFmMjIxNTAyY2RlMjRmNTk1OTEyZWM3YjAwNzMy
NWVhM2EwNDI3ZTkuLjUxN2FmZGQyMDc5YTQ1ZDM1NjI3MWUzYTE0OTJmZDE5OGI3ZGQxYzYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9n
ZW5lcmljL2V4cGVjdGVkL3R5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbi1yZXN1bHQK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVy
aWMvZXhwZWN0ZWQvdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uLXJlc3VsdApAQCAt
MzQ4LDcgKzM0OCw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFN0cmluZyBnZXRFbnVtQ29uc3Rh
bnRWYWx1ZShUIGVudW1WYWx1ZSkKIAogbmFtZXNwYWNlIFRlc3QgewogLyogQSBkdW1teSB0eXBl
IHRoYXQgcmVxdWlyZXMgcnVudGltZSBjYXN0cywgYW5kIGZvcmNlcyBub24tcHJpbWl0aXZlIHJl
ZmVyZW5jZWQgdHlwZXMgdG8gYWxzbyBlbWl0IHJ1bnRpbWUgY2FzdCBoZWxwZXJzLiAqLwotY2xh
c3MgVHlwZU5lZWRpbmdDYXN0IDogcHVibGljIEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0QmFz
ZSB7CitjbGFzcyBUeXBlTmVlZGluZ0Nhc3QgOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7CiBw
dWJsaWM6CiAgICAgZW51bSB7CiAgICAgICAgIE5vRmllbGRzU2V0ID0gMCwKQEAgLTM2MywxNCAr
MzYzLDE0IEBAIHB1YmxpYzoKICAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICAgY2xhc3MgQnVp
bGRlciB7CiAgICAgcHJpdmF0ZToKLSAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9y
ZXN1bHQ7CisgICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG1fcmVzdWx0OwogCiAgICAgICAg
IHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAg
ICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNU
QVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICAgfQogCi0gICAgICAgIEJ1aWxkZXIoUmVmPC8q
VHlwZU5lZWRpbmdDYXN0Ki9JbnNwZWN0b3JPYmplY3Q+JiYgb2JqZWN0KQorICAgICAgICBCdWls
ZGVyKFJlZjwvKlR5cGVOZWVkaW5nQ2FzdCovSlNPTjo6T2JqZWN0PiYmIG9iamVjdCkKICAgICAg
ICAgICAgIDogbV9yZXN1bHQoV1RGTW92ZShvYmplY3QpKQogICAgICAgICB7CiAgICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2lu
X25vbl9pbml0X3N0YXRlKTsKQEAgLTQxNiw5ICs0MTYsOSBAQCBwdWJsaWM6CiAgICAgICAgIFJl
ZjxUeXBlTmVlZGluZ0Nhc3Q+IHJlbGVhc2UoKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwot
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKFR5cGVOZWVkaW5nQ2FzdCkgPT0gc2l6
ZW9mKEluc3BlY3Rvck9iamVjdCksIGNhbm5vdF9jYXN0KTsKKyAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKHNpemVvZihUeXBlTmVlZGluZ0Nhc3QpID09IHNpemVvZihKU09OOjpPYmplY3QpLCBj
YW5ub3RfY2FzdCk7CiAKLSAgICAgICAgICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9
IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7CisgICAgICAgICAgICBSZWY8SlNPTjo6T2JqZWN0
PiByZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOwogICAgICAgICAgICAgcmV0dXJu
IFdURk1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPFR5cGVOZWVkaW5nQ2FzdD4qPigmcmVzdWx0
KSk7CiAgICAgICAgIH0KICAgICB9OwpAQCAtNDM1LDcgKzQzNSw3IEBAIHB1YmxpYzoKICAgICAg
Ki8KICAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKICAgICB7Ci0gICAg
ICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgp
KTsKKyAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEpTT046Ok9iamVjdDo6Y3Jl
YXRlKCkpOwogICAgIH0KIH07CiAKQEAgLTQ1Myw3ICs0NTMsNyBAQCBlbnVtIGNsYXNzIENhc3Rl
ZEFuaW1hbHMgewogICAgIENyb3dzID0gMiwKICAgICBGbGFtaW5nb3MgPSAzLAogfTsgLy8gZW51
bSBjbGFzcyBDYXN0ZWRBbmltYWxzCi1jbGFzcyBSZWN1cnNpdmVPYmplY3QxIDogcHVibGljIElu
c3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0QmFzZSB7CitjbGFzcyBSZWN1cnNpdmVPYmplY3QxIDog
cHVibGljIEpTT046Ok9iamVjdEJhc2UgewogcHVibGljOgogICAgIGVudW0gewogICAgICAgICBO
b0ZpZWxkc1NldCA9IDAsCkBAIC00NjMsMTQgKzQ2MywxNCBAQCBwdWJsaWM6CiAgICAgdGVtcGxh
dGU8aW50IFNUQVRFPgogICAgIGNsYXNzIEJ1aWxkZXIgewogICAgIHByaXZhdGU6Ci0gICAgICAg
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OworICAgICAgICBSZWZQdHI8SlNPTjo6
T2JqZWN0PiBtX3Jlc3VsdDsKIAogICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxT
VEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4g
KnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAg
IH0KIAotICAgICAgICBCdWlsZGVyKFJlZjwvKlJlY3Vyc2l2ZU9iamVjdDEqL0luc3BlY3Rvck9i
amVjdD4mJiBvYmplY3QpCisgICAgICAgIEJ1aWxkZXIoUmVmPC8qUmVjdXJzaXZlT2JqZWN0MSov
SlNPTjo6T2JqZWN0PiYmIG9iamVjdCkKICAgICAgICAgICAgIDogbV9yZXN1bHQoV1RGTW92ZShv
YmplY3QpKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBO
b0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKQEAgLTQ4MSw5
ICs0ODEsOSBAQCBwdWJsaWM6CiAgICAgICAgIFJlZjxSZWN1cnNpdmVPYmplY3QxPiByZWxlYXNl
KCkKICAgICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmll
bGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KHNpemVvZihSZWN1cnNpdmVPYmplY3QxKSA9PSBzaXplb2YoSW5zcGVjdG9yT2JqZWN0KSwgY2Fu
bm90X2Nhc3QpOworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKFJlY3Vyc2l2ZU9i
amVjdDEpID09IHNpemVvZihKU09OOjpPYmplY3QpLCBjYW5ub3RfY2FzdCk7CiAKLSAgICAgICAg
ICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxs
KCk7CisgICAgICAgICAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBtX3Jlc3VsdC5yZWxl
YXNlTm9uTnVsbCgpOwogICAgICAgICAgICAgcmV0dXJuIFdURk1vdmUoKnJlaW50ZXJwcmV0X2Nh
c3Q8UmVmPFJlY3Vyc2l2ZU9iamVjdDE+Kj4oJnJlc3VsdCkpOwogICAgICAgICB9CiAgICAgfTsK
QEAgLTQ5NSw3ICs0OTUsNyBAQCBwdWJsaWM6CiAgICAgICovCiAgICAgc3RhdGljIEJ1aWxkZXI8
Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCiAgICAgewotICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0Zp
ZWxkc1NldD4oSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSk7CisgICAgICAgIHJldHVybiBCdWls
ZGVyPE5vRmllbGRzU2V0PihKU09OOjpPYmplY3Q6OmNyZWF0ZSgpKTsKICAgICB9CiAKICAgICB2
b2lkIHNldE9iaihSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UmVjdXJzaXZlT2Jq
ZWN0Mj4gdmFsdWUpCkBAIC01MDQsNyArNTA0LDcgQEAgcHVibGljOgogICAgIH0KIH07CiAKLWNs
YXNzIFJlY3Vyc2l2ZU9iamVjdDIgOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3RC
YXNlIHsKK2NsYXNzIFJlY3Vyc2l2ZU9iamVjdDIgOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7
CiBwdWJsaWM6CiAgICAgZW51bSB7CiAgICAgICAgIE5vRmllbGRzU2V0ID0gMCwKQEAgLTUxNCwx
NCArNTE0LDE0IEBAIHB1YmxpYzoKICAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICAgY2xhc3Mg
QnVpbGRlciB7CiAgICAgcHJpdmF0ZToKLSAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
bV9yZXN1bHQ7CisgICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG1fcmVzdWx0OwogCiAgICAg
ICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgp
CiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVy
PFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICAgfQogCi0gICAgICAgIEJ1aWxkZXIoUmVm
PC8qUmVjdXJzaXZlT2JqZWN0MiovSW5zcGVjdG9yT2JqZWN0PiYmIG9iamVjdCkKKyAgICAgICAg
QnVpbGRlcihSZWY8LypSZWN1cnNpdmVPYmplY3QyKi9KU09OOjpPYmplY3Q+JiYgb2JqZWN0KQog
ICAgICAgICAgICAgOiBtX3Jlc3VsdChXVEZNb3ZlKG9iamVjdCkpCiAgICAgICAgIHsKICAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0
ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwpAQCAtNTMyLDkgKzUzMiw5IEBAIHB1YmxpYzoKICAgICAg
ICAgUmVmPFJlY3Vyc2l2ZU9iamVjdDI+IHJlbGVhc2UoKQogICAgICAgICB7CiAgICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVh
ZHkpOwotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKFJlY3Vyc2l2ZU9iamVjdDIp
ID09IHNpemVvZihJbnNwZWN0b3JPYmplY3QpLCBjYW5ub3RfY2FzdCk7CisgICAgICAgICAgICBD
T01QSUxFX0FTU0VSVChzaXplb2YoUmVjdXJzaXZlT2JqZWN0MikgPT0gc2l6ZW9mKEpTT046Ok9i
amVjdCksIGNhbm5vdF9jYXN0KTsKIAotICAgICAgICAgICAgUmVmPEluc3BlY3Rvck9iamVjdD4g
cmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKKyAgICAgICAgICAgIFJlZjxKU09O
OjpPYmplY3Q+IHJlc3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7CiAgICAgICAgICAg
ICByZXR1cm4gV1RGTW92ZSgqcmVpbnRlcnByZXRfY2FzdDxSZWY8UmVjdXJzaXZlT2JqZWN0Mj4q
PigmcmVzdWx0KSk7CiAgICAgICAgIH0KICAgICB9OwpAQCAtNTQ2LDcgKzU0Niw3IEBAIHB1Ymxp
YzoKICAgICAgKi8KICAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKICAg
ICB7Ci0gICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihJbnNwZWN0b3JPYmplY3Q6
OmNyZWF0ZSgpKTsKKyAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEpTT046Ok9i
amVjdDo6Y3JlYXRlKCkpOwogICAgIH0KIAogICAgIHZvaWQgc2V0T2JqKFJlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpUZXN0OjpSZWN1cnNpdmVPYmplY3QxPiB2YWx1ZSkKQEAgLTU1OSwyMyAr
NTU5LDIzIEBAIHB1YmxpYzoKIAogdGVtcGxhdGU8PiBzdHJ1Y3QgQmluZGluZ1RyYWl0czxJbnNw
ZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzPiB7CiAjaWYgIUFTU0VSVF9ESVNB
QkxFRAotc3RhdGljIHZvaWQgYXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoSW5zcGVjdG9yOjpJ
bnNwZWN0b3JWYWx1ZSopOworc3RhdGljIHZvaWQgYXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUo
SlNPTjo6VmFsdWUqKTsKICNlbmRpZiAvLyAhQVNTRVJUX0RJU0FCTEVECiB9OwogdGVtcGxhdGU8
PiBzdHJ1Y3QgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpUeXBlTmVl
ZGluZ0Nhc3Q+IHsKLXN0YXRpYyBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VHlw
ZU5lZWRpbmdDYXN0PiBydW50aW1lQ2FzdChSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1
ZT4mJiB2YWx1ZSk7CitzdGF0aWMgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlR5
cGVOZWVkaW5nQ2FzdD4gcnVudGltZUNhc3QoUmVmUHRyPEpTT046OlZhbHVlPiYmIHZhbHVlKTsK
ICNpZiAhQVNTRVJUX0RJU0FCTEVECi1zdGF0aWMgdm9pZCBhc3NlcnRWYWx1ZUhhc0V4cGVjdGVk
VHlwZShJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlKik7CitzdGF0aWMgdm9pZCBhc3NlcnRWYWx1
ZUhhc0V4cGVjdGVkVHlwZShKU09OOjpWYWx1ZSopOwogI2VuZGlmIC8vICFBU1NFUlRfRElTQUJM
RUQKIH07CiB0ZW1wbGF0ZTw+IHN0cnVjdCBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDE+IHsKICNpZiAhQVNTRVJUX0RJU0FCTEVECi1zdGF0
aWMgdm9pZCBhc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShJbnNwZWN0b3I6Okluc3BlY3RvclZh
bHVlKik7CitzdGF0aWMgdm9pZCBhc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShKU09OOjpWYWx1
ZSopOwogI2VuZGlmIC8vICFBU1NFUlRfRElTQUJMRUQKIH07CiB0ZW1wbGF0ZTw+IHN0cnVjdCBC
aW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDI+
IHsKICNpZiAhQVNTRVJUX0RJU0FCTEVECi1zdGF0aWMgdm9pZCBhc3NlcnRWYWx1ZUhhc0V4cGVj
dGVkVHlwZShJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlKik7CitzdGF0aWMgdm9pZCBhc3NlcnRW
YWx1ZUhhc0V4cGVjdGVkVHlwZShKU09OOjpWYWx1ZSopOwogI2VuZGlmIC8vICFBU1NFUlRfRElT
QUJMRUQKIH07CiAKQEAgLTY5Myw3ICs2OTMsNyBAQCBzdGQ6Om9wdGlvbmFsPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZwog
CiAKICNpZiAhQVNTRVJUX0RJU0FCTEVECi12b2lkIEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFscz46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBl
KEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUqIHZhbHVlKQordm9pZCBCaW5kaW5nVHJhaXRzPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM+Ojphc3NlcnRWYWx1ZUhhc0V4
cGVjdGVkVHlwZShKU09OOjpWYWx1ZSogdmFsdWUpCiB7CiAgICAgQVNTRVJUX0FSRyh2YWx1ZSwg
dmFsdWUpOwogICAgIFN0cmluZyByZXN1bHQ7CkBAIC03MDQsNyArNzA0LDcgQEAgdm9pZCBCaW5k
aW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM+Ojphc3Nl
cnRWYWx1ZUhhc0V4cGUKICNlbmRpZiAvLyAhQVNTRVJUX0RJU0FCTEVECiAKICNpZiAhQVNTRVJU
X0RJU0FCTEVECi12b2lkIEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6
VHlwZU5lZWRpbmdDYXN0Pjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoSW5zcGVjdG9yOjpJ
bnNwZWN0b3JWYWx1ZSogdmFsdWUpCit2b2lkIEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90
b2NvbDo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0Pjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUo
SlNPTjo6VmFsdWUqIHZhbHVlKQogewogICAgIEFTU0VSVF9BUkcodmFsdWUsIHZhbHVlKTsKICAg
ICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBvYmplY3Q7CkBAIC03NDIsMjEgKzc0MiwyMSBAQCB2
b2lkIEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VHlwZU5lZWRpbmdD
YXN0Pjo6YXNzZXJ0VmFsdWVIYXNFeAogfQogI2VuZGlmIC8vICFBU1NFUlRfRElTQUJMRUQKIAot
UmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdD4gQmluZGlu
Z1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3Q+OjpydW50
aW1lQ2FzdChSZWZQdHI8SW5zcGVjdG9yVmFsdWU+JiYgdmFsdWUpCitSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0PiBCaW5kaW5nVHJhaXRzPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdD46OnJ1bnRpbWVDYXN0KFJlZlB0cjxK
U09OOjpWYWx1ZT4mJiB2YWx1ZSkKIHsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1
bHQ7CisgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcmVzdWx0OwogICAgIGJvb2wgY2FzdFN1Y2Nl
ZWRlZCA9IHZhbHVlLT5hc09iamVjdChyZXN1bHQpOwogICAgIEFTU0VSVF9VTlVTRUQoY2FzdFN1
Y2NlZWRlZCwgY2FzdFN1Y2NlZWRlZCk7CiAjaWYgIUFTU0VSVF9ESVNBQkxFRAogICAgIEJpbmRp
bmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0Pjo6YXNz
ZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUocmVzdWx0LmdldCgpKTsKICNlbmRpZiAgLy8gIUFTU0VS
VF9ESVNBQkxFRAotICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihJbnNwZWN0b3I6OlByb3RvY29s
OjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3QpID09IHNpemVvZihJbnNwZWN0b3JPYmplY3RCYXNlKSwg
dHlwZV9jYXN0X3Byb2JsZW0pOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxJbnNwZWN0b3I6OlBy
b3RvY29sOjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3QqPihzdGF0aWNfY2FzdDxJbnNwZWN0b3JPYmpl
Y3RCYXNlKj4ocmVzdWx0LmdldCgpKSk7CisgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdCkgPT0gc2l6ZW9mKEpTT046Ok9i
amVjdEJhc2UpLCB0eXBlX2Nhc3RfcHJvYmxlbSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdCo+KHN0YXRpY19jYXN0PEpT
T046Ok9iamVjdEJhc2UqPihyZXN1bHQuZ2V0KCkpKTsKIH0KIAogCiAjaWYgIUFTU0VSVF9ESVNB
QkxFRAotdm9pZCBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlJlY3Vy
c2l2ZU9iamVjdDE+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShJbnNwZWN0b3I6Okluc3Bl
Y3RvclZhbHVlKiB2YWx1ZSkKK3ZvaWQgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29s
OjpUZXN0OjpSZWN1cnNpdmVPYmplY3QxPjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoSlNP
Tjo6VmFsdWUqIHZhbHVlKQogewogICAgIEFTU0VSVF9BUkcodmFsdWUsIHZhbHVlKTsKICAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBvYmplY3Q7CkBAIC03NzcsNyArNzc3LDcgQEAgdm9pZCBC
aW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDE+
Ojphc3NlcnRWYWx1ZUhhc0UKICNlbmRpZiAvLyAhQVNTRVJUX0RJU0FCTEVECiAKICNpZiAhQVNT
RVJUX0RJU0FCTEVECi12b2lkIEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVz
dDo6UmVjdXJzaXZlT2JqZWN0Mj46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKEluc3BlY3Rv
cjo6SW5zcGVjdG9yVmFsdWUqIHZhbHVlKQordm9pZCBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDI+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVk
VHlwZShKU09OOjpWYWx1ZSogdmFsdWUpCiB7CiAgICAgQVNTRVJUX0FSRyh2YWx1ZSwgdmFsdWUp
OwogICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG9iamVjdDsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVk
L3R5cGUtd2l0aC1vcGVuLXBhcmFtZXRlcnMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC90eXBlLXdpdGgt
b3Blbi1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0CmluZGV4IDhjOGY2MzQzNmQ4YzVhNjY3MTMyMDVi
NDFjYzNkMDRmOGFiYTZmY2YuLjlkNzIyZGRhMTBmYjYyNjU0YTE1NzI0MGZiOWFkNzlmNjViNmEw
OGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9nZW5lcmljL2V4cGVjdGVkL3R5cGUtd2l0aC1vcGVuLXBhcmFtZXRlcnMuanNvbi1yZXN1
bHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dl
bmVyaWMvZXhwZWN0ZWQvdHlwZS13aXRoLW9wZW4tcGFyYW1ldGVycy5qc29uLXJlc3VsdApAQCAt
MzI0LDcgKzMyNCw3IEBAIGNsYXNzIE9wZW5QYXJhbWV0ZXJzOwogCiAKIG5hbWVzcGFjZSBUZXN0
IHsKLWNsYXNzIE5vT3BlblBhcmFtZXRlcnMgOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JP
YmplY3RCYXNlIHsKK2NsYXNzIE5vT3BlblBhcmFtZXRlcnMgOiBwdWJsaWMgSlNPTjo6T2JqZWN0
QmFzZSB7CiBwdWJsaWM6CiAgICAgZW51bSB7CiAgICAgICAgIE5vRmllbGRzU2V0ID0gMCwKQEAg
LTMzNiwxNCArMzM2LDE0IEBAIHB1YmxpYzoKICAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICAg
Y2xhc3MgQnVpbGRlciB7CiAgICAgcHJpdmF0ZToKLSAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gbV9yZXN1bHQ7CisgICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG1fcmVzdWx0Owog
CiAgICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RT
dGF0ZSgpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxC
dWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICAgfQogCi0gICAgICAgIEJ1aWxk
ZXIoUmVmPC8qTm9PcGVuUGFyYW1ldGVycyovSW5zcGVjdG9yT2JqZWN0PiYmIG9iamVjdCkKKyAg
ICAgICAgQnVpbGRlcihSZWY8LypOb09wZW5QYXJhbWV0ZXJzKi9KU09OOjpPYmplY3Q+JiYgb2Jq
ZWN0KQogICAgICAgICAgICAgOiBtX3Jlc3VsdChXVEZNb3ZlKG9iamVjdCkpCiAgICAgICAgIHsK
ICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVy
X2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwpAQCAtMzY4LDkgKzM2OCw5IEBAIHB1YmxpYzoK
ICAgICAgICAgUmVmPE5vT3BlblBhcmFtZXRlcnM+IHJlbGVhc2UoKQogICAgICAgICB7CiAgICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19u
b3RfcmVhZHkpOwotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKE5vT3BlblBhcmFt
ZXRlcnMpID09IHNpemVvZihJbnNwZWN0b3JPYmplY3QpLCBjYW5ub3RfY2FzdCk7CisgICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoTm9PcGVuUGFyYW1ldGVycykgPT0gc2l6ZW9mKEpT
T046Ok9iamVjdCksIGNhbm5vdF9jYXN0KTsKIAotICAgICAgICAgICAgUmVmPEluc3BlY3Rvck9i
amVjdD4gcmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKKyAgICAgICAgICAgIFJl
ZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7CiAgICAg
ICAgICAgICByZXR1cm4gV1RGTW92ZSgqcmVpbnRlcnByZXRfY2FzdDxSZWY8Tm9PcGVuUGFyYW1l
dGVycz4qPigmcmVzdWx0KSk7CiAgICAgICAgIH0KICAgICB9OwpAQCAtMzg0LDExICszODQsMTEg
QEAgcHVibGljOgogICAgICAqLwogICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVh
dGUoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCkpOworICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4o
SlNPTjo6T2JqZWN0OjpjcmVhdGUoKSk7CiAgICAgfQogfTsKIAotY2xhc3MgT3BlblBhcmFtZXRl
cnMgOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QgeworY2xhc3MgT3BlblBhcmFt
ZXRlcnMgOiBwdWJsaWMgSlNPTjo6T2JqZWN0IHsKIHB1YmxpYzoKICAgICBlbnVtIHsKICAgICAg
ICAgTm9GaWVsZHNTZXQgPSAwLApAQCAtNDAwLDE0ICs0MDAsMTQgQEAgcHVibGljOgogICAgIHRl
bXBsYXRlPGludCBTVEFURT4KICAgICBjbGFzcyBCdWlsZGVyIHsKICAgICBwcml2YXRlOgotICAg
ICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKKyAgICAgICAgUmVmUHRyPEpT
T046Ok9iamVjdD4gbV9yZXN1bHQ7CiAKICAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxk
ZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICAgewogICAgICAgICAgICAgcmV0
dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAg
ICAgICB9CiAKLSAgICAgICAgQnVpbGRlcihSZWY8LypPcGVuUGFyYW1ldGVycyovSW5zcGVjdG9y
T2JqZWN0PiYmIG9iamVjdCkKKyAgICAgICAgQnVpbGRlcihSZWY8LypPcGVuUGFyYW1ldGVycyov
SlNPTjo6T2JqZWN0PiYmIG9iamVjdCkKICAgICAgICAgICAgIDogbV9yZXN1bHQoV1RGTW92ZShv
YmplY3QpKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBO
b0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKQEAgLTQzMiw5
ICs0MzIsOSBAQCBwdWJsaWM6CiAgICAgICAgIFJlZjxPcGVuUGFyYW1ldGVycz4gcmVsZWFzZSgp
CiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxk
c1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVChz
aXplb2YoT3BlblBhcmFtZXRlcnMpID09IHNpemVvZihJbnNwZWN0b3JPYmplY3QpLCBjYW5ub3Rf
Y2FzdCk7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoT3BlblBhcmFtZXRlcnMp
ID09IHNpemVvZihKU09OOjpPYmplY3QpLCBjYW5ub3RfY2FzdCk7CiAKLSAgICAgICAgICAgIFJl
ZjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7Cisg
ICAgICAgICAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9u
TnVsbCgpOwogICAgICAgICAgICAgcmV0dXJuIFdURk1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVm
PE9wZW5QYXJhbWV0ZXJzPio+KCZyZXN1bHQpKTsKICAgICAgICAgfQogICAgIH07CkBAIC00NDgs
NyArNDQ4LDcgQEAgcHVibGljOgogICAgICAqLwogICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRz
U2V0PiBjcmVhdGUoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+
KEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkpOworICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0Zp
ZWxkc1NldD4oSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSk7CiAgICAgfQogCiAgICAgLy8gUHJvcGVy
dHkgbmFtZXMgZm9yIHR5cGUgZ2VuZXJhdGVkIGFzIG9wZW4uCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC93
b3JrZXItc3VwcG9ydGVkLWRvbWFpbnMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC93b3JrZXItc3VwcG9y
dGVkLWRvbWFpbnMuanNvbi1yZXN1bHQKaW5kZXggYmI0ZGMyMjEzOWRhNGFkZTFiODhlMDNlNWU2
MDExZjE0NmMxMGIwZC4uNGVjOWFmZmMwMmNjZDhiYzQyMzA4NjBhMzI5NTgzNGY1NTJlYzYwZSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2dlbmVyaWMvZXhwZWN0ZWQvd29ya2VyLXN1cHBvcnRlZC1kb21haW5zLmpzb24tcmVzdWx0Cisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmlj
L2V4cGVjdGVkL3dvcmtlci1zdXBwb3J0ZWQtZG9tYWlucy5qc29uLXJlc3VsdApAQCAtMTY4LDcg
KzE2OCw3IEBAIHByb3RlY3RlZDoKIGNsYXNzIERvbWFpbkFCYWNrZW5kRGlzcGF0Y2hlciBmaW5h
bCA6IHB1YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7CiBwdWJsaWM6CiAgICAg
c3RhdGljIFJlZjxEb21haW5BQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShCYWNrZW5kRGlzcGF0
Y2hlciYsIERvbWFpbkFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKLSAgICB2b2lkIGRpc3Bh
dGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEluc3BlY3Rvck9i
amVjdD4mJiBtZXNzYWdlKSBvdmVycmlkZTsKKyAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcmVxdWVz
dElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKSBv
dmVycmlkZTsKIHByaXZhdGU6CiAgICAgdm9pZCBlbmFibGUobG9uZyByZXF1ZXN0SWQsIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+JiYgcGFyYW1ldGVycyk7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9B
TFRFUk5BVEVfRElTUEFUQ0hFUlMpCkBAIC0xODUsNyArMTg1LDcgQEAgcHJpdmF0ZToKIGNsYXNz
IERvbWFpbkJCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBTdXBwbGVtZW50YWxCYWNr
ZW5kRGlzcGF0Y2hlciB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxEb21haW5CQmFja2VuZERp
c3BhdGNoZXI+IGNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYsIERvbWFpbkJCYWNrZW5kRGlzcGF0
Y2hlckhhbmRsZXIqKTsKLSAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBT
dHJpbmcmIG1ldGhvZCwgUmVmPEluc3BlY3Rvck9iamVjdD4mJiBtZXNzYWdlKSBvdmVycmlkZTsK
KyAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwg
UmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKSBvdmVycmlkZTsKIHByaXZhdGU6CiAgICAgdm9p
ZCBlbmFibGUobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgcGFyYW1l
dGVycyk7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCkBAIC0y
NjIsMTEgKzI2MiwxMSBAQCBEb21haW5BQmFja2VuZERpc3BhdGNoZXI6OkRvbWFpbkFCYWNrZW5k
RGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpcwogICAgIG1fYmFja2VuZERp
c3BhdGNoZXItPnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbihBU0NJSUxpdGVyYWwoIkRvbWFp
bkEiKSwgdGhpcyk7CiB9CiAKLXZvaWQgRG9tYWluQUJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRj
aChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxJbnNwZWN0b3JPYmpl
Y3Q+JiYgbWVzc2FnZSkKK3ZvaWQgRG9tYWluQUJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChs
b25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYg
bWVzc2FnZSkKIHsKICAgICBSZWY8RG9tYWluQUJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0
aGlzKTsKIAotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtZXRlcnM7CisgICAgUmVm
UHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVyczsKICAgICBtZXNzYWdlLT5nZXRPYmplY3QoQVND
SUlMaXRlcmFsKCJwYXJhbXMiKSwgcGFyYW1ldGVycyk7CiAKICAgICBpZiAobWV0aG9kID09ICJl
bmFibGUiKQpAQCAtMzA2LDExICszMDYsMTEgQEAgRG9tYWluQkJhY2tlbmREaXNwYXRjaGVyOjpE
b21haW5CQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXMKICAg
ICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4oQVNDSUlM
aXRlcmFsKCJEb21haW5CIiksIHRoaXMpOwogfQogCi12b2lkIERvbWFpbkJCYWNrZW5kRGlzcGF0
Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8
SW5zcGVjdG9yT2JqZWN0PiYmIG1lc3NhZ2UpCit2b2lkIERvbWFpbkJCYWNrZW5kRGlzcGF0Y2hl
cjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNP
Tjo6T2JqZWN0PiYmIG1lc3NhZ2UpCiB7CiAgICAgUmVmPERvbWFpbkJCYWNrZW5kRGlzcGF0Y2hl
cj4gcHJvdGVjdCgqdGhpcyk7CiAKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbWV0
ZXJzOworICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnM7CiAgICAgbWVzc2FnZS0+
Z2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgicGFyYW1zIiksIHBhcmFtZXRlcnMpOwogCiAgICAgaWYg
KG1ldGhvZCA9PSAiZW5hYmxlIikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9tYWMvZXhwZWN0ZWQvZGVmaW5pdGlvbnMtd2l0aC1tYWMt
cGxhdGZvcm0uanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvbWFjL2V4cGVjdGVkL2RlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpz
b24tcmVzdWx0CmluZGV4IDE3MGQ1N2MwYWJmNTFkMjFhZjJjOGNmYjhmZWUzMTE4YjhkNGNiMzMu
LjU4MDJkOTY2ZWQwYWYyMzc0ZTc1ZjU2N2IwNzQ3NDNlYWVhOTM4OTAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9tYWMvZXhwZWN0ZWQv
ZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbi1yZXN1bHQKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL21hYy9leHBlY3RlZC9kZWZpbml0
aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uLXJlc3VsdApAQCAtMTUyLDcgKzE1Miw3IEBAIHBy
b3RlY3RlZDoKIGNsYXNzIE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBT
dXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxO
ZXR3b3JrQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYsIE5ldHdv
cmtCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKLSAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcmVx
dWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEluc3BlY3Rvck9iamVjdD4mJiBtZXNz
YWdlKSBvdmVycmlkZTsKKyAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBT
dHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKSBvdmVycmlkZTsKIHBy
aXZhdGU6CiAgICAgdm9pZCBsb2FkUmVzb3VyY2UobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+JiYgcGFyYW1ldGVycyk7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5B
VEVfRElTUEFUQ0hFUlMpCkBAIC0yMjgsMTEgKzIyOCwxMSBAQCBOZXR3b3JrQmFja2VuZERpc3Bh
dGNoZXI6Ok5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2Vu
ZERpcwogICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRvbWFp
bihBU0NJSUxpdGVyYWwoIk5ldHdvcmsiKSwgdGhpcyk7CiB9CiAKLXZvaWQgTmV0d29ya0JhY2tl
bmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRo
b2QsIFJlZjxJbnNwZWN0b3JPYmplY3Q+JiYgbWVzc2FnZSkKK3ZvaWQgTmV0d29ya0JhY2tlbmRE
aXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2Qs
IFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkKIHsKICAgICBSZWY8TmV0d29ya0JhY2tlbmRE
aXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKIAotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IHBhcmFtZXRlcnM7CisgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVyczsKICAgICBt
ZXNzYWdlLT5nZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJwYXJhbXMiKSwgcGFyYW1ldGVycyk7CiAK
ICAgICBpZiAobWV0aG9kID09ICJsb2FkUmVzb3VyY2UiKQpAQCAtNDE5LDcgKzQxOSw3IEBAIGNs
YXNzIE5ldHdvcmtFcnJvcjsKIAogCiBuYW1lc3BhY2UgTmV0d29yayB7Ci1jbGFzcyBOZXR3b3Jr
RXJyb3IgOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3RCYXNlIHsKK2NsYXNzIE5l
dHdvcmtFcnJvciA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKIHB1YmxpYzoKICAgICBlbnVt
IHsKICAgICAgICAgTm9GaWVsZHNTZXQgPSAwLApAQCAtNDMxLDE0ICs0MzEsMTQgQEAgcHVibGlj
OgogICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgICBjbGFzcyBCdWlsZGVyIHsKICAgICBwcml2
YXRlOgotICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKKyAgICAgICAg
UmVmUHRyPEpTT046Ok9iamVjdD4gbV9yZXN1bHQ7CiAKICAgICAgICAgdGVtcGxhdGU8aW50IFNU
RVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICAgewogICAgICAg
ICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRo
aXMpOwogICAgICAgICB9CiAKLSAgICAgICAgQnVpbGRlcihSZWY8LypOZXR3b3JrRXJyb3IqL0lu
c3BlY3Rvck9iamVjdD4mJiBvYmplY3QpCisgICAgICAgIEJ1aWxkZXIoUmVmPC8qTmV0d29ya0Vy
cm9yKi9KU09OOjpPYmplY3Q+JiYgb2JqZWN0KQogICAgICAgICAgICAgOiBtX3Jlc3VsdChXVEZN
b3ZlKG9iamVjdCkpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRF
ID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwpAQCAt
NDYzLDkgKzQ2Myw5IEBAIHB1YmxpYzoKICAgICAgICAgUmVmPE5ldHdvcmtFcnJvcj4gcmVsZWFz
ZSgpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZp
ZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VS
VChzaXplb2YoTmV0d29ya0Vycm9yKSA9PSBzaXplb2YoSW5zcGVjdG9yT2JqZWN0KSwgY2Fubm90
X2Nhc3QpOworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKE5ldHdvcmtFcnJvcikg
PT0gc2l6ZW9mKEpTT046Ok9iamVjdCksIGNhbm5vdF9jYXN0KTsKIAotICAgICAgICAgICAgUmVm
PEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKKyAg
ICAgICAgICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VOb25O
dWxsKCk7CiAgICAgICAgICAgICByZXR1cm4gV1RGTW92ZSgqcmVpbnRlcnByZXRfY2FzdDxSZWY8
TmV0d29ya0Vycm9yPio+KCZyZXN1bHQpKTsKICAgICAgICAgfQogICAgIH07CkBAIC00NzksNyAr
NDc5LDcgQEAgcHVibGljOgogICAgICAqLwogICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0
PiBjcmVhdGUoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KElu
c3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkpOworICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxk
c1NldD4oSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSk7CiAgICAgfQogfTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3JlcGxheS9FbmNvZGVkVmFsdWUuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3JlcGxheS9FbmNvZGVkVmFsdWUuY3BwCmluZGV4IDc5MjQ1Mjg5NzI0ZDll
ZjI1Y2NhY2QwZjJkYjk3ZmRiY2NiMWUxMDEuLjY0YjYyZmY2NjdkZTViN2JlNTIyZDVkOGM4MWY5
NzVmNGUzZDBmNjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9yZXBsYXkvRW5j
b2RlZFZhbHVlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcmVwbGF5L0VuY29kZWRW
YWx1ZS5jcHAKQEAgLTM3LDE4ICszNywxOCBAQCB1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwog
CiBuYW1lc3BhY2UgSlNDIHsKIAotUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gRW5jb2RlZFZhbHVl
Ojphc09iamVjdCgpCitSZWZQdHI8SlNPTjo6T2JqZWN0PiBFbmNvZGVkVmFsdWU6OmFzT2JqZWN0
KCkKIHsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQ7CisgICAgUmVmUHRyPEpT
T046Ok9iamVjdD4gcmVzdWx0OwogICAgIGJvb2wgY2FzdFN1Y2NlZWRlZCA9IG1fdmFsdWUtPmFz
T2JqZWN0KHJlc3VsdCk7CiAgICAgQVNTRVJUX1VOVVNFRChjYXN0U3VjY2VlZGVkLCBjYXN0U3Vj
Y2VlZGVkKTsKIAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLVJlZlB0cjxJbnNwZWN0b3JBcnJh
eT4gRW5jb2RlZFZhbHVlOjphc0FycmF5KCkKK1JlZlB0cjxKU09OOjpBcnJheT4gRW5jb2RlZFZh
bHVlOjphc0FycmF5KCkKIHsKLSAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHJlc3VsdDsKKyAg
ICBSZWZQdHI8SlNPTjo6QXJyYXk+IHJlc3VsdDsKICAgICBib29sIGNhc3RTdWNjZWVkZWQgPSBt
X3ZhbHVlLT5hc0FycmF5KHJlc3VsdCk7CiAgICAgQVNTRVJUX1VOVVNFRChjYXN0U3VjY2VlZGVk
LCBjYXN0U3VjY2VlZGVkKTsKIApAQCAtMTg3LDcgKzE4Nyw3IEBAIHZvaWQgRW5jb2RlZFZhbHVl
OjphcHBlbmQ8RW5jb2RlZFZhbHVlPihjb25zdCB0eXBlbmFtZSBFbmNvZGluZ1RyYWl0czxFbmNv
ZGVkVmFsCiB0ZW1wbGF0ZTw+CiBib29sIEVuY29kZWRWYWx1ZTo6Z2V0PEVuY29kZWRWYWx1ZT4o
Y29uc3QgU3RyaW5nJiBrZXksIHR5cGVuYW1lIEVuY29kaW5nVHJhaXRzPEVuY29kZWRWYWx1ZT46
OkRlY29kZWRUeXBlJiBkZWNvZGVkVmFsdWUpCiB7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5z
cGVjdG9yVmFsdWU+IHZhbHVlOworICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gdmFsdWU7CiAgICAg
aWYgKCFhc09iamVjdCgpLT5nZXRWYWx1ZShrZXksIHZhbHVlKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcmVwbGF5L0VuY29kZWRW
YWx1ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3JlcGxheS9FbmNvZGVkVmFsdWUuaAppbmRl
eCA5ZmIxNzgyNjE3Nzk0NTI0MWM3MWNlMjFjNDhlMGJjYTljYTMzNTY0Li5mMDkxYTdmMzVjYWM2
ZWU2ZDdmN2VkMjkyNjc2ZDI3NjhmNDIwZjNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcmVwbGF5L0VuY29kZWRWYWx1ZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
ZXBsYXkvRW5jb2RlZFZhbHVlLmgKQEAgLTQwLDcgKzQwLDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUg
VD4gc3RydWN0IEVuY29kaW5nVHJhaXRzOwogCiBjbGFzcyBFbmNvZGVkVmFsdWUgZmluYWwgewog
cHVibGljOgotICAgIGV4cGxpY2l0IEVuY29kZWRWYWx1ZShSZWZQdHI8SW5zcGVjdG9yOjpJbnNw
ZWN0b3JWYWx1ZT4mJiB2YWx1ZSkKKyAgICBleHBsaWNpdCBFbmNvZGVkVmFsdWUoUmVmUHRyPEpT
T046OlZhbHVlPiYmIHZhbHVlKQogICAgICAgICA6IG1fdmFsdWUodmFsdWUpIHsgfQogCiAgICAg
RW5jb2RlZFZhbHVlKCkKQEAgLTQ4LDIyICs0OCwyMiBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMg
RW5jb2RlZFZhbHVlIGNyZWF0ZU9iamVjdCgpCiAgICAgewotICAgICAgICByZXR1cm4gRW5jb2Rl
ZFZhbHVlKEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSk7CisgICAgICAgIHJl
dHVybiBFbmNvZGVkVmFsdWUoSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSk7CiAgICAgfQogCiAgICAg
c3RhdGljIEVuY29kZWRWYWx1ZSBjcmVhdGVBcnJheSgpCiAgICAgewotICAgICAgICByZXR1cm4g
RW5jb2RlZFZhbHVlKEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpKTsKKyAgICAg
ICAgcmV0dXJuIEVuY29kZWRWYWx1ZShKU09OOjpBcnJheTo6Y3JlYXRlKCkpOwogICAgIH0KIAog
ICAgIHN0YXRpYyBFbmNvZGVkVmFsdWUgY3JlYXRlU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUp
CiAgICAgewotICAgICAgICByZXR1cm4gRW5jb2RlZFZhbHVlKEluc3BlY3Rvcjo6SW5zcGVjdG9y
VmFsdWU6OmNyZWF0ZSh2YWx1ZSkpOworICAgICAgICByZXR1cm4gRW5jb2RlZFZhbHVlKEpTT046
OlZhbHVlOjpjcmVhdGUodmFsdWUpKTsKICAgICB9CiAKICAgICBzdGF0aWMgRW5jb2RlZFZhbHVl
IGNyZWF0ZVN0cmluZyhjb25zdCBjaGFyKiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBF
bmNvZGVkVmFsdWUoSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZTo6Y3JlYXRlKHZhbHVlKSk7Cisg
ICAgICAgIHJldHVybiBFbmNvZGVkVmFsdWUoSlNPTjo6VmFsdWU6OmNyZWF0ZSh2YWx1ZSkpOwog
ICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CkBAIC03NywxMSArNzcsMTEgQEAgcHVi
bGljOgogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gVCBjb252ZXJ0VG8oKTsKIAotICAgIEpT
X0VYUE9SVF9QUklWQVRFIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gYXNPYmpl
Y3QoKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JB
cnJheT4gYXNBcnJheSgpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIFJlZlB0cjxKU09OOjpPYmpl
Y3Q+IGFzT2JqZWN0KCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgUmVmUHRyPEpTT046OkFycmF5
PiBhc0FycmF5KCk7CiAKIHByaXZhdGU6Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9y
VmFsdWU+IG1fdmFsdWU7CisgICAgUmVmUHRyPEpTT046OlZhbHVlPiBtX3ZhbHVlOwogfTsKIAog
dGVtcGxhdGU8PiBKU19FWFBPUlRfUFJJVkFURSBib29sIEVuY29kZWRWYWx1ZTo6Y29udmVydFRv
PGJvb2w+KCk7CkBAIC0xMTgsMTAgKzExOCwxMCBAQCBzdHJ1Y3QgRW5jb2RpbmdUcmFpdHM8VmVj
dG9yPFQsIGlubGluZUNhcGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+PiB7CiAKICAgICBzdGF0aWMg
Ym9vbCBkZWNvZGVWYWx1ZShFbmNvZGVkVmFsdWUmIGVuY29kZWRWZWN0b3IsIERlY29kZWRUeXBl
JiBkZWNvZGVkVmFsdWUpCiAgICAgewotICAgICAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0
b3JBcnJheT4gaW5zcGVjdG9yQXJyYXkgPSBlbmNvZGVkVmVjdG9yLmFzQXJyYXkoKTsKLSAgICAg
ICAgZGVjb2RlZFZhbHVlID0gVmVjdG9yPHR5cGVuYW1lIEVuY29kaW5nVHJhaXRzPFQ+OjpEZWNv
ZGVkVHlwZSwgaW5saW5lQ2FwYWNpdHksIE92ZXJmbG93SGFuZGxlcj4oaW5zcGVjdG9yQXJyYXkt
Pmxlbmd0aCgpKTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpbnNwZWN0b3JBcnJh
eS0+bGVuZ3RoKCk7ICsraSkgewotICAgICAgICAgICAgRW5jb2RlZFZhbHVlIGVuY29kZWRFbGVt
ZW50KGluc3BlY3RvckFycmF5LT5nZXQoaSkpOworICAgICAgICBSZWZQdHI8SlNPTjo6QXJyYXk+
IGFycmF5ID0gZW5jb2RlZFZlY3Rvci5hc0FycmF5KCk7CisgICAgICAgIGRlY29kZWRWYWx1ZSA9
IFZlY3Rvcjx0eXBlbmFtZSBFbmNvZGluZ1RyYWl0czxUPjo6RGVjb2RlZFR5cGUsIGlubGluZUNh
cGFjaXR5LCBPdmVyZmxvd0hhbmRsZXI+KGFycmF5LT5sZW5ndGgoKSk7CisgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgYXJyYXktPmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgICAgIEVu
Y29kZWRWYWx1ZSBlbmNvZGVkRWxlbWVudChhcnJheS0+Z2V0KGkpKTsKICAgICAgICAgICAgIGlm
ICghRW5jb2RpbmdUcmFpdHM8VD46OmRlY29kZVZhbHVlKGVuY29kZWRFbGVtZW50LCBkZWNvZGVk
VmFsdWUuYXQoaSkpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQo=
</data>
<flag name="review"
          id="334414"
          type_id="1"
          status="+"
          setter="achristensen"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>325891</attachid>
            <date>2017-11-03 06:56:14 -0700</date>
            <delta_ts>2017-11-05 23:28:07 -0800</delta_ts>
            <desc>Rebased patch + unit tests</desc>
            <filename>wk-json.diff</filename>
            <type>text/plain</type>
            <size>136347</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IGM3YTFjOGM0MDZjLi4xNjdmOGIxMTk5MiAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTEgQEAKKzIwMTctMTEtMDMgIEJyaWFu
IEJ1cmcgIDxiYnVyZ0BhcHBsZS5jb20+CisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogdXNlIEpT
T046OntBcnJheSxPYmplY3QsVmFsdWV9IGluc3RlYWQgb2YgSW5zcGVjdG9ye0FycmF5LE9iamVj
dCxWYWx1ZX0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE3MzYxOQorCisgICAgICAgIFJldmlld2VkIGJ5IEFsZXggQ2hyaXN0ZW5zZW4uCisKKyAgICAg
ICAgRXZlbnR1YWxseSBhbGwgY2xhc3NlcyB1c2VkIGZvciBvdXIgSlNPTi1SUEMgbWVzc2FnZSBw
YXNzaW5nIHNob3VsZCBiZSBvdXRzaWRlCisgICAgICAgIG9mIHRoZSBJbnNwZWN0b3IgbmFtZXNw
YWNlIHNpbmNlIHRoZSBwcm90b2NvbCBpcyB1c2VkIG91dHNpZGUgb2YgSW5zcGVjdG9yIGNvZGUu
CisgICAgICAgIFRoaXMgd2lsbCBhbHNvIGFsbG93IHVzIHRvIHVuaWZ5IHRoZSBwcmltaXRpdmUg
SlNPTiB0eXBlcyB3aXRoIHBhcmFtZXRlcmljIHR5cGVzCisgICAgICAgIGxpa2UgSW5zcGVjdG9y
OjpQcm90b2NvbDo6QXJyYXk8VD4gYW5kIG90aGVyIHByb3RvY29sLXJlbGF0ZWQgdHlwZXMgd2hp
Y2ggZG9uJ3QKKyAgICAgICAgbmVlZCB0byBiZSBpbiB0aGUgSW5zcGVjdG9yIG5hbWVzcGFjZS4K
KworICAgICAgICBTdGFydCB0aGlzIHJlZmFjdG9yaW5nIG9mZiBieSBtYWtpbmcgSlNPTjo6VmFs
dWUgYSB0eXBlZGVmIGZvciBJbnNwZWN0b3JWYWx1ZS4gSW4gZm9sbG93aW5nCisgICAgICAgIHBh
dGNoZXMsIG90aGVyIGNsaWVudHMgd2lsbCBtb3ZlIHRvIHVzZSBKU09OOjpWYWx1ZSBhbmQgZnJp
ZW5kcy4gV2hlbiBhbGwgdXNlcyBhcmUKKyAgICAgICAgY2hhbmdlZCwgdGhlIGFjdHVhbCBpbXBs
ZW1lbnRhdGlvbiB3aWxsIGJlIHJlbmFtZWQuIFRoaXMgcGF0Y2gganVzdCBmb2N1c2VzIG9uIHRo
ZSB0eXBlZGVmCisgICAgICAgIGFuZCBtYWtpbmcgY2hhbmdlcyBpbiBnZW5lcmF0ZWQgcHJvdG9j
b2wgY29kZS4KKworICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuY3BwOgorICAg
ICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaDoKKyAgICAgICAgKiBpbnNwZWN0b3Iv
c2NyaXB0cy9jb2RlZ2VuL2NwcF9nZW5lcmF0b3IucHk6CisgICAgICAgIChDcHBHZW5lcmF0b3Iu
Y3BwX3Byb3RvY29sX3R5cGVfZm9yX3R5cGUpOgorICAgICAgICAoQ3BwR2VuZXJhdG9yLmNwcF90
eXBlX2Zvcl91bmNoZWNrZWRfZm9ybWFsX2luX3BhcmFtZXRlcik6CisgICAgICAgIChDcHBHZW5l
cmF0b3IuY3BwX3R5cGVfZm9yX3R5cGVfd2l0aF9uYW1lKToKKyAgICAgICAgKENwcEdlbmVyYXRv
ci5jcHBfdHlwZV9mb3Jfc3RhY2tfaW5fcGFyYW1ldGVyKToKKyAgICAgICAgKiBpbnNwZWN0b3Iv
c2NyaXB0cy9jb2RlZ2VuL2NwcF9nZW5lcmF0b3JfdGVtcGxhdGVzLnB5OgorICAgICAgICAodm9p
ZCk6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfcHJv
dG9jb2xfdHlwZXNfaGVhZGVyLnB5OgorICAgICAgICAoX2dlbmVyYXRlX2NsYXNzX2Zvcl9vYmpl
Y3RfZGVjbGFyYXRpb24pOgorICAgICAgICAoX2dlbmVyYXRlX2ZvcndhcmRfZGVjbGFyYXRpb25z
X2Zvcl9iaW5kaW5nX3RyYWl0cyk6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdl
bi9nZW5lcmF0ZV9jcHBfcHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50YXRpb24ucHk6CisgICAgICAg
IChDcHBQcm90b2NvbFR5cGVzSW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX2Fzc2Vy
dGlvbl9mb3Jfb2JqZWN0X2RlY2xhcmF0aW9uKToKKyAgICAgICAgKENwcFByb3RvY29sVHlwZXNJ
bXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfYXNzZXJ0aW9uX2Zvcl9lbnVtKToKKyAg
ICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9hbGwvZXhwZWN0ZWQvZGVmaW5pdGlvbnMt
d2l0aC1tYWMtcGxhdGZvcm0uanNvbi1yZXN1bHQ6CisgICAgICAgICogaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9jb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5q
c29uLXJlc3VsdDoKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4
cGVjdGVkL2NvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29u
LXJlc3VsdDoKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVj
dGVkL2RvbWFpbi1hdmFpbGFiaWxpdHkuanNvbi1yZXN1bHQ6CisgICAgICAgICogaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9kb21haW5zLXdpdGgtdmFyeWluZy1jb21t
YW5kLXNpemVzLmpzb24tcmVzdWx0OgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2dlbmVyaWMvZXhwZWN0ZWQvZW51bS12YWx1ZXMuanNvbi1yZXN1bHQ6CisgICAgICAgICogaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9ldmVudHMtd2l0aC1vcHRpb25h
bC1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0OgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2dlbmVyaWMvZXhwZWN0ZWQvZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRz
Lmpzb24tcmVzdWx0OgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMv
ZXhwZWN0ZWQvc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24tcmVzdWx0OgorICAg
ICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvdHlwZS1kZWNs
YXJhdGlvbi1vYmplY3QtdHlwZS5qc29uLXJlc3VsdDoKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL3R5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMu
anNvbi1yZXN1bHQ6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9l
eHBlY3RlZC90eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0OgorICAgICAgICAq
IGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvd29ya2VyLXN1cHBvcnRl
ZC1kb21haW5zLmpzb24tcmVzdWx0OgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L21hYy9leHBlY3RlZC9kZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uLXJlc3VsdDoK
KwogMjAxNy0xMS0wMiAgRGV2aW4gUm91c3NvICA8d2Via2l0QGRldmlucm91c3NvLmNvbT4KIAog
ICAgICAgICBXZWIgSW5zcGVjdG9yOiBDYW52YXMgVGFiOiBzaG93IHN1cHBvcnRlZCBHTCBleHRl
bnNpb25zIGZvciBzZWxlY3RlZCBjYW52YXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmNwcAppbmRleCAxZTQ5YjI4MTAzYi4uZTRlMWQx
MWJmOWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yVmFsdWVzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvclZhbHVlcy5jcHAKQEAgLTEsNiArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDEw
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL0luc3BlY3RvclZhbHVlcy5oCmluZGV4IDBiNzQ3YmYxMjA5Li4xNGE1Y2Y3NDc4NCAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1
ZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVl
cy5oCkBAIC00MCwxMiArNDAsMjcgQEAKICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+
CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKLW5hbWVzcGFjZSBJbnNwZWN0b3Ig
ewogCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKIGNsYXNzIEluc3BlY3RvckFycmF5OwogY2xhc3Mg
SW5zcGVjdG9yQXJyYXlCYXNlOwogY2xhc3MgSW5zcGVjdG9yT2JqZWN0OwogY2xhc3MgSW5zcGVj
dG9yT2JqZWN0QmFzZTsKK2NsYXNzIEluc3BlY3RvclZhbHVlOworfQorCituYW1lc3BhY2UgSlNP
TiB7Cit0eXBlZGVmIEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXkgQXJyYXk7Cit0eXBlZGVmIElu
c3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0IE9iamVjdDsKK3R5cGVkZWYgSW5zcGVjdG9yOjpJbnNw
ZWN0b3JWYWx1ZSBWYWx1ZTsKKworCisvLyBOb3QgdG8gYmUgdXNlZCBleGNlcHQgZm9yIHByb3Rv
Y29sIG9iamVjdCBzdWJjbGFzc2VzLgordHlwZWRlZiBJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5
QmFzZSBBcnJheUJhc2U7Cit0eXBlZGVmIEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0QmFzZSBP
YmplY3RCYXNlOworfQorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAogY2xhc3MgSlNfRVhQT1JU
X1BSSVZBVEUgSW5zcGVjdG9yVmFsdWUgOiBwdWJsaWMgUmVmQ291bnRlZDxJbnNwZWN0b3JWYWx1
ZT4gewogcHVibGljOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2NvZGVnZW4vY3BwX2dlbmVyYXRvci5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2NwcF9nZW5lcmF0b3IucHkKaW5kZXggYzQ1OWZj
YWMzYWYuLjA0ZGRmY2I4ZGE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvY29kZWdlbi9jcHBfZ2VuZXJhdG9yLnB5CisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2NwcF9nZW5lcmF0b3IucHkKQEAg
LTM4LDkgKzM4LDkgQEAgX1BSSU1JVElWRV9UT19DUFBfTkFNRV9NQVAgPSB7CiAgICAgJ2ludGVn
ZXInOiAnaW50JywKICAgICAnbnVtYmVyJzogJ2RvdWJsZScsCiAgICAgJ3N0cmluZyc6ICdTdHJp
bmcnLAotICAgICdvYmplY3QnOiAnSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QnLAotICAgICdh
cnJheSc6ICdJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5JywKLSAgICAnYW55JzogJ0luc3BlY3Rv
cjo6SW5zcGVjdG9yVmFsdWUnCisgICAgJ29iamVjdCc6ICdKU09OOjpPYmplY3QnLAorICAgICdh
cnJheSc6ICdKU09OOjpBcnJheScsCisgICAgJ2FueSc6ICdKU09OOjpWYWx1ZScKIH0KIAogY2xh
c3MgQ3BwR2VuZXJhdG9yKEdlbmVyYXRvcik6CkBAIC05OCw3ICs5OCw3IEBAIGNsYXNzIENwcEdl
bmVyYXRvcihHZW5lcmF0b3IpOgogICAgIEBzdGF0aWNtZXRob2QKICAgICBkZWYgY3BwX3Byb3Rv
Y29sX3R5cGVfZm9yX3R5cGUoX3R5cGUpOgogICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBP
YmplY3RUeXBlKSBhbmQgbGVuKF90eXBlLm1lbWJlcnMpID09IDA6Ci0gICAgICAgICAgICByZXR1
cm4gJ0luc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0JworICAgICAgICAgICAgcmV0dXJuICdKU09O
OjpPYmplY3QnCiAgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEFycmF5VHlwZSk6CiAgICAg
ICAgICAgICBpZiBfdHlwZS5yYXdfbmFtZSgpIGlzIE5vbmU6ICAjIE90aGVyd2lzZSwgZmFsbCB0
aHJvdWdoIGFuZCB1c2UgdHlwZWRlZidkIG5hbWUuCiAgICAgICAgICAgICAgICAgcmV0dXJuICdJ
bnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTwlcz4nICUgQ3BwR2VuZXJhdG9yLmNwcF9wcm90b2Nv
bF90eXBlX2Zvcl90eXBlKF90eXBlLmVsZW1lbnRfdHlwZSkKQEAgLTEyNSwxMyArMTI1LDEzIEBA
IGNsYXNzIENwcEdlbmVyYXRvcihHZW5lcmF0b3IpOgogCiAgICAgICAgICMgVGhpcyBoYW5kbGVz
IHRoZSAnYW55JyB0eXBlIGFuZCBvYmplY3RzIHdpdGggZGVmaW5lZCBwcm9wZXJ0aWVzLgogICAg
ICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBPYmplY3RUeXBlKSBvciBfdHlwZS5xdWFsaWZpZWRf
bmFtZSgpIGlzICdvYmplY3QnOgotICAgICAgICAgICAgY3BwX25hbWUgPSAnSW5zcGVjdG9yOjpJ
bnNwZWN0b3JPYmplY3QnCisgICAgICAgICAgICBjcHBfbmFtZSA9ICdKU09OOjpPYmplY3QnCiAg
ICAgICAgICAgICBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6CiAgICAgICAgICAgICAgICAgcmV0
dXJuICdjb25zdCAlcyonICUgY3BwX25hbWUKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAg
ICAgICAgcmV0dXJuICdjb25zdCAlcyYnICUgY3BwX25hbWUKICAgICAgICAgaWYgaXNpbnN0YW5j
ZShfdHlwZSwgQXJyYXlUeXBlKToKLSAgICAgICAgICAgIGNwcF9uYW1lID0gJ0luc3BlY3Rvcjo6
SW5zcGVjdG9yQXJyYXknCisgICAgICAgICAgICBjcHBfbmFtZSA9ICdKU09OOjpBcnJheScKICAg
ICAgICAgICAgIGlmIHBhcmFtZXRlci5pc19vcHRpb25hbDoKICAgICAgICAgICAgICAgICByZXR1
cm4gJ2NvbnN0ICVzKicgJSBjcHBfbmFtZQogICAgICAgICAgICAgZWxzZToKQEAgLTE3Miw5ICsx
NzIsOSBAQCBjbGFzcyBDcHBHZW5lcmF0b3IoR2VuZXJhdG9yKToKICAgICAgICAgaWYgaXNpbnN0
YW5jZShfdHlwZSwgUHJpbWl0aXZlVHlwZSk6CiAgICAgICAgICAgICBjcHBfbmFtZSA9IENwcEdl
bmVyYXRvci5jcHBfbmFtZV9mb3JfcHJpbWl0aXZlX3R5cGUoX3R5cGUpCiAgICAgICAgICAgICBp
ZiBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpIGluIFsnb2JqZWN0J106Ci0gICAgICAgICAgICAgICAg
cmV0dXJuICdSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+JworICAgICAgICAgICAg
ICAgIHJldHVybiAnUmVmUHRyPEpTT046Ok9iamVjdD4nCiAgICAgICAgICAgICBlbGlmIF90eXBl
LnF1YWxpZmllZF9uYW1lKCkgaW4gWydhbnknXToKLSAgICAgICAgICAgICAgICByZXR1cm4gJ1Jl
ZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPicKKyAgICAgICAgICAgICAgICByZXR1cm4g
J1JlZlB0cjxKU09OOjpWYWx1ZT4nCiAgICAgICAgICAgICBlbGlmIGlzX29wdGlvbmFsOgogICAg
ICAgICAgICAgICAgIHJldHVybiAnY29uc3QgJXMqIGNvbnN0JyAlIGNwcF9uYW1lCiAgICAgICAg
ICAgICBlbGlmIF90eXBlLnF1YWxpZmllZF9uYW1lKCkgaW4gWydzdHJpbmcnXToKQEAgLTI1NCw5
ICsyNTQsOSBAQCBjbGFzcyBDcHBHZW5lcmF0b3IoR2VuZXJhdG9yKToKICAgICAgICAgICAgIF90
eXBlID0gX3R5cGUucHJpbWl0aXZlX3R5cGUgICMgRmFsbCB0aHJvdWdoLgogCiAgICAgICAgIGlm
IGlzaW5zdGFuY2UoX3R5cGUsIE9iamVjdFR5cGUpOgotICAgICAgICAgICAgcmV0dXJuICJSZWZQ
dHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IgorICAgICAgICAgICAgcmV0dXJuICJSZWZQ
dHI8SlNPTjo6T2JqZWN0PiIKICAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgQXJyYXlUeXBl
KToKLSAgICAgICAgICAgIHJldHVybiAiUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXk+
IgorICAgICAgICAgICAgcmV0dXJuICJSZWZQdHI8SlNPTjo6QXJyYXk+IgogICAgICAgICBpZiBp
c2luc3RhbmNlKF90eXBlLCBQcmltaXRpdmVUeXBlKToKICAgICAgICAgICAgIGNwcF9uYW1lID0g
Q3BwR2VuZXJhdG9yLmNwcF9uYW1lX2Zvcl9wcmltaXRpdmVfdHlwZShfdHlwZSkKICAgICAgICAg
ICAgIGlmIF90eXBlLnF1YWxpZmllZF9uYW1lKCkgaW4gWydhbnknLCAnb2JqZWN0J106CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9j
cHBfZ2VuZXJhdG9yX3RlbXBsYXRlcy5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9jb2RlZ2VuL2NwcF9nZW5lcmF0b3JfdGVtcGxhdGVzLnB5CmluZGV4IGIyNTIz
ZmZlMjU2Li45NzkzMzJkZmYwZCAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vY3BwX2dlbmVyYXRvcl90ZW1wbGF0ZXMucHkKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vY3BwX2dlbmVy
YXRvcl90ZW1wbGF0ZXMucHkKQEAgLTk1LDcgKzk1LDcgQEAgcHJvdGVjdGVkOgogICAgICIiIiR7
Y2xhc3NBbmRFeHBvcnRNYWNyb30gJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyIGZpbmFs
IDogcHVibGljIFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyIHsKIHB1YmxpYzoKICAgICBz
dGF0aWMgUmVmPCR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEJhY2tlbmRE
aXNwYXRjaGVyJiwgJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwotICAg
IHZvaWQgZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8
SW5zcGVjdG9yT2JqZWN0PiYmIG1lc3NhZ2UpIG92ZXJyaWRlOworICAgIHZvaWQgZGlzcGF0Y2go
bG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYm
IG1lc3NhZ2UpIG92ZXJyaWRlOwogJHtjb21tYW5kRGVjbGFyYXRpb25zfQogcHJpdmF0ZToKICAg
ICAke2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImLCAke2Rv
bWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7CkBAIC0xMTksMTEgKzExOSwxMSBA
QCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCAke2NvbW1hbmROYW1lfSgke2luUGFyYW1ldGVy
c30pID0gMDsiIiIpCiAKICAgICBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uU21hbGxT
d2l0Y2ggPSAoCi0gICAgIiIidm9pZCAke2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXI6OmRp
c3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEluc3BlY3Rv
ck9iamVjdD4mJiBtZXNzYWdlKQorICAgICIiInZvaWQgJHtkb21haW5OYW1lfUJhY2tlbmREaXNw
YXRjaGVyOjpkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJl
ZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkKIHsKICAgICBSZWY8JHtkb21haW5OYW1lfUJhY2tl
bmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKIAotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IHBhcmFtZXRlcnM7CisgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVyczsKICAg
ICBtZXNzYWdlLT5nZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJwYXJhbXMiKSwgcGFyYW1ldGVycyk7
CiAKICR7ZGlzcGF0Y2hDYXNlc30KQEAgLTEzMiwxNCArMTMyLDE0IEBAICR7ZGlzcGF0Y2hDYXNl
c30KIH0iIiIpCiAKICAgICBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uTGFyZ2VTd2l0
Y2ggPSAoCi0iIiJ2b2lkICR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2go
bG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SW5zcGVjdG9yT2JqZWN0
PiYmIG1lc3NhZ2UpCisiIiJ2b2lkICR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcjo6ZGlz
cGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2Jq
ZWN0PiYmIG1lc3NhZ2UpCiB7CiAgICAgUmVmPCR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hl
cj4gcHJvdGVjdCgqdGhpcyk7CiAKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbWV0
ZXJzOworICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnM7CiAgICAgbWVzc2FnZS0+
Z2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgicGFyYW1zIiksIHBhcmFtZXRlcnMpOwogCi0gICAgdHlw
ZWRlZiB2b2lkICgke2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXI6OipDYWxsSGFuZGxlciko
bG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgbWVzc2FnZSk7CisgICAg
dHlwZWRlZiB2b2lkICgke2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXI6OipDYWxsSGFuZGxl
cikobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSk7CiAgICAg
dHlwZWRlZiBIYXNoTWFwPFN0cmluZywgQ2FsbEhhbmRsZXI+IERpc3BhdGNoTWFwOwogICAgIHN0
YXRpYyBOZXZlckRlc3Ryb3llZDxEaXNwYXRjaE1hcD4gZGlzcGF0Y2hNYXA7CiAgICAgaWYgKGRp
c3BhdGNoTWFwLmdldCgpLmlzRW1wdHkoKSkgewpAQCAtMTg5LDcgKzE4OSw3IEBAICR7ZG9tYWlu
TmFtZX1CYWNrZW5kRGlzcGF0Y2hlcjo6JHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyKEJh
Y2tlbmREaXNwYXRjaGVyCiAKIHZvaWQgJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVySGFu
ZGxlcjo6JHtjYWxsYmFja05hbWV9OjpzZW5kU3VjY2Vzcygke2Zvcm1hbFBhcmFtZXRlcnN9KQog
ewotICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IGpzb25NZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0
OjpjcmVhdGUoKTsKKyAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9i
amVjdDo6Y3JlYXRlKCk7CiAke291dFBhcmFtZXRlckFzc2lnbm1lbnRzfQogICAgIENhbGxiYWNr
QmFzZTo6c2VuZFN1Y2Nlc3MoV1RGTW92ZShqc29uTWVzc2FnZSkpOwogfSIiIikKQEAgLTIwNywx
NCArMjA3LDE0IEBAIHByaXZhdGU6CiAiIiIgICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgIGNs
YXNzIEJ1aWxkZXIgewogICAgIHByaXZhdGU6Ci0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IG1fcmVzdWx0OworICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBtX3Jlc3VsdDsKIAog
ICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3Rh
dGUoKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVp
bGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgIH0KIAotICAgICAgICBCdWlsZGVy
KFJlZjwvKiR7b2JqZWN0VHlwZX0qL0luc3BlY3Rvck9iamVjdD4mJiBvYmplY3QpCisgICAgICAg
IEJ1aWxkZXIoUmVmPC8qJHtvYmplY3RUeXBlfSovSlNPTjo6T2JqZWN0PiYmIG9iamVjdCkKICAg
ICAgICAgICAgIDogbV9yZXN1bHQoV1RGTW92ZShvYmplY3QpKQogICAgICAgICB7CiAgICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVk
X2luX25vbl9pbml0X3N0YXRlKTsKQEAgLTIyNyw5ICsyMjcsOSBAQCBwcml2YXRlOgogICAgICAg
ICBSZWY8JHtvYmplY3RUeXBlfT4gcmVsZWFzZSgpCiAgICAgICAgIHsKICAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7
Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoJHtvYmplY3RUeXBlfSkgPT0gc2l6
ZW9mKEluc3BlY3Rvck9iamVjdCksIGNhbm5vdF9jYXN0KTsKKyAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKHNpemVvZigke29iamVjdFR5cGV9KSA9PSBzaXplb2YoSlNPTjo6T2JqZWN0KSwgY2Fu
bm90X2Nhc3QpOwogCi0gICAgICAgICAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBt
X3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOworICAgICAgICAgICAgUmVmPEpTT046Ok9iamVjdD4g
cmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKICAgICAgICAgICAgIHJldHVybiBX
VEZNb3ZlKCpyZWludGVycHJldF9jYXN0PFJlZjwke29iamVjdFR5cGV9Pio+KCZyZXN1bHQpKTsK
ICAgICAgICAgfQogICAgIH07CkBAIC0yNDAsMTkgKzI0MCwxOSBAQCAke2NvbnN0cnVjdG9yRXhh
bXBsZX0KICAgICAgKi8KICAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkK
ICAgICB7Ci0gICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihJbnNwZWN0b3JPYmpl
Y3Q6OmNyZWF0ZSgpKTsKKyAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEpTT046
Ok9iamVjdDo6Y3JlYXRlKCkpOwogICAgIH0iIiIpCiAKICAgICBQcm90b2NvbE9iamVjdFJ1bnRp
bWVDYXN0ID0gKAotIiIiUmVmUHRyPCR7b2JqZWN0VHlwZX0+IEJpbmRpbmdUcmFpdHM8JHtvYmpl
Y3RUeXBlfT46OnJ1bnRpbWVDYXN0KFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4mJiB2YWx1ZSkKKyIi
IlJlZlB0cjwke29iamVjdFR5cGV9PiBCaW5kaW5nVHJhaXRzPCR7b2JqZWN0VHlwZX0+OjpydW50
aW1lQ2FzdChSZWZQdHI8SlNPTjo6VmFsdWU+JiYgdmFsdWUpCiB7Ci0gICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gcmVzdWx0OworICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHJlc3VsdDsKICAg
ICBib29sIGNhc3RTdWNjZWVkZWQgPSB2YWx1ZS0+YXNPYmplY3QocmVzdWx0KTsKICAgICBBU1NF
UlRfVU5VU0VEKGNhc3RTdWNjZWVkZWQsIGNhc3RTdWNjZWVkZWQpOwogI2lmICFBU1NFUlRfRElT
QUJMRUQKICAgICBCaW5kaW5nVHJhaXRzPCR7b2JqZWN0VHlwZX0+Ojphc3NlcnRWYWx1ZUhhc0V4
cGVjdGVkVHlwZShyZXN1bHQuZ2V0KCkpOwogI2VuZGlmICAvLyAhQVNTRVJUX0RJU0FCTEVECi0g
ICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKCR7b2JqZWN0VHlwZX0pID09IHNpemVvZihJbnNwZWN0
b3JPYmplY3RCYXNlKSwgdHlwZV9jYXN0X3Byb2JsZW0pOwotICAgIHJldHVybiBzdGF0aWNfY2Fz
dDwke29iamVjdFR5cGV9Kj4oc3RhdGljX2Nhc3Q8SW5zcGVjdG9yT2JqZWN0QmFzZSo+KHJlc3Vs
dC5nZXQoKSkpOworICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZigke29iamVjdFR5cGV9KSA9PSBz
aXplb2YoSlNPTjo6T2JqZWN0QmFzZSksIHR5cGVfY2FzdF9wcm9ibGVtKTsKKyAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8JHtvYmplY3RUeXBlfSo+KHN0YXRpY19jYXN0PEpTT046Ok9iamVjdEJhc2Uq
PihyZXN1bHQuZ2V0KCkpKTsKIH0KICIiIikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9wcm90b2NvbF90eXBl
c19oZWFkZXIucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29k
ZWdlbi9nZW5lcmF0ZV9jcHBfcHJvdG9jb2xfdHlwZXNfaGVhZGVyLnB5CmluZGV4IDRkNjUzMzFm
YjNkLi5iOTUwNTY1ZDExNCAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX3Byb3RvY29sX3R5cGVzX2hlYWRlci5w
eQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9n
ZW5lcmF0ZV9jcHBfcHJvdG9jb2xfdHlwZXNfaGVhZGVyLnB5CkBAIC0yMDUsNyArMjA1LDcgQEAg
Y2xhc3MgQ3BwUHJvdG9jb2xUeXBlc0hlYWRlckdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAg
ICAgICBsaW5lcyA9IFtdCiAgICAgICAgIGlmIGxlbih0eXBlX2RlY2xhcmF0aW9uLmRlc2NyaXB0
aW9uKSA+IDA6CiAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJy8qICVzICovJyAlIHR5cGVfZGVj
bGFyYXRpb24uZGVzY3JpcHRpb24pCi0gICAgICAgIGJhc2VfY2xhc3MgPSAnSW5zcGVjdG9yOjpJ
bnNwZWN0b3JPYmplY3QnCisgICAgICAgIGJhc2VfY2xhc3MgPSAnSlNPTjo6T2JqZWN0JwogICAg
ICAgICBpZiBub3QgR2VuZXJhdG9yLnR5cGVfaGFzX29wZW5fZmllbGRzKHR5cGVfZGVjbGFyYXRp
b24udHlwZSk6CiAgICAgICAgICAgICBiYXNlX2NsYXNzID0gYmFzZV9jbGFzcyArICdCYXNlJwog
ICAgICAgICBsaW5lcy5hcHBlbmQoJ2NsYXNzICVzIDogcHVibGljICVzIHsnICUgKG9iamVjdF9u
YW1lLCBiYXNlX2NsYXNzKSkKQEAgLTM2MSw5ICszNjEsOSBAQCBjbGFzcyBDcHBQcm90b2NvbFR5
cGVzSGVhZGVyR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgICAgIGZvciBhcmd1bWVudCBp
biB0eXBlX2FyZ3VtZW50czoKICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgndGVtcGxhdGU8PiAl
cyBCaW5kaW5nVHJhaXRzPCVzPiB7JyAlICgnICcuam9pbihzdHJ1Y3Rfa2V5d29yZHMpLCBhcmd1
bWVudFswXSkpCiAgICAgICAgICAgICBpZiBhcmd1bWVudFsxXToKLSAgICAgICAgICAgICAgICBs
aW5lcy5hcHBlbmQoJ3N0YXRpYyBSZWZQdHI8JXM+IHJ1bnRpbWVDYXN0KFJlZlB0cjxJbnNwZWN0
b3I6Okluc3BlY3RvclZhbHVlPiYmIHZhbHVlKTsnICUgYXJndW1lbnRbMF0pCisgICAgICAgICAg
ICAgICAgbGluZXMuYXBwZW5kKCdzdGF0aWMgUmVmUHRyPCVzPiBydW50aW1lQ2FzdChSZWZQdHI8
SlNPTjo6VmFsdWU+JiYgdmFsdWUpOycgJSBhcmd1bWVudFswXSkKICAgICAgICAgICAgIGxpbmVz
LmFwcGVuZCgnI2lmICFBU1NFUlRfRElTQUJMRUQnKQotICAgICAgICAgICAgbGluZXMuYXBwZW5k
KCclcyBhc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVl
Kik7JyAlICcgJy5qb2luKGZ1bmN0aW9uX2tleXdvcmRzKSkKKyAgICAgICAgICAgIGxpbmVzLmFw
cGVuZCgnJXMgYXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoSlNPTjo6VmFsdWUqKTsnICUgJyAn
LmpvaW4oZnVuY3Rpb25fa2V5d29yZHMpKQogICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcjZW5k
aWYgLy8gIUFTU0VSVF9ESVNBQkxFRCcpCiAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ307JykK
ICAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9wcm90b2Nv
bF90eXBlc19pbXBsZW1lbnRhdGlvbi5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9wcm90b2NvbF90eXBlc19pbXBsZW1lbnRh
dGlvbi5weQppbmRleCBjNzFjMzlhYTcxZi4uZGQxZDAxZjRkMjUgMTAwNzU1Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9w
cm90b2NvbF90eXBlc19pbXBsZW1lbnRhdGlvbi5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfcHJvdG9jb2xfdHlwZXNf
aW1wbGVtZW50YXRpb24ucHkKQEAgLTE5OCw3ICsxOTgsNyBAQCBjbGFzcyBDcHBQcm90b2NvbFR5
cGVzSW1wbGVtZW50YXRpb25HZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICAgICAgbGluZXMg
PSBbXQogCiAgICAgICAgIGxpbmVzLmFwcGVuZCgnI2lmICFBU1NFUlRfRElTQUJMRUQnKQotICAg
ICAgICBsaW5lcy5hcHBlbmQoJ3ZvaWQgQmluZGluZ1RyYWl0czwlcz46OmFzc2VydFZhbHVlSGFz
RXhwZWN0ZWRUeXBlKEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUqIHZhbHVlKScgJSAoQ3BwR2Vu
ZXJhdG9yLmNwcF9wcm90b2NvbF90eXBlX2Zvcl90eXBlKG9iamVjdF9kZWNsYXJhdGlvbi50eXBl
KSkpCisgICAgICAgIGxpbmVzLmFwcGVuZCgndm9pZCBCaW5kaW5nVHJhaXRzPCVzPjo6YXNzZXJ0
VmFsdWVIYXNFeHBlY3RlZFR5cGUoSlNPTjo6VmFsdWUqIHZhbHVlKScgJSAoQ3BwR2VuZXJhdG9y
LmNwcF9wcm90b2NvbF90eXBlX2Zvcl90eXBlKG9iamVjdF9kZWNsYXJhdGlvbi50eXBlKSkpCiAg
ICAgICAgIGxpbmVzLmFwcGVuZCgiIiJ7CiAgICAgQVNTRVJUX0FSRyh2YWx1ZSwgdmFsdWUpOwog
ICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG9iamVjdDsKQEAgLTI0Niw3ICsyNDYsNyBAQCBj
bGFzcyBDcHBQcm90b2NvbFR5cGVzSW1wbGVtZW50YXRpb25HZW5lcmF0b3IoQ3BwR2VuZXJhdG9y
KToKICAgICBkZWYgX2dlbmVyYXRlX2Fzc2VydGlvbl9mb3JfZW51bShzZWxmLCBlbnVtX21lbWJl
ciwgb2JqZWN0X2RlY2xhcmF0aW9uKToKICAgICAgICAgbGluZXMgPSBbXQogICAgICAgICBsaW5l
cy5hcHBlbmQoJyNpZiAhQVNTRVJUX0RJU0FCTEVEJykKLSAgICAgICAgbGluZXMuYXBwZW5kKCd2
b2lkICVzKEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUqIHZhbHVlKScgJSBDcHBHZW5lcmF0b3Iu
Y3BwX2Fzc2VydGlvbl9tZXRob2RfZm9yX3R5cGVfbWVtYmVyKGVudW1fbWVtYmVyLCBvYmplY3Rf
ZGVjbGFyYXRpb24pKQorICAgICAgICBsaW5lcy5hcHBlbmQoJ3ZvaWQgJXMoSlNPTjo6VmFsdWUq
IHZhbHVlKScgJSBDcHBHZW5lcmF0b3IuY3BwX2Fzc2VydGlvbl9tZXRob2RfZm9yX3R5cGVfbWVt
YmVyKGVudW1fbWVtYmVyLCBvYmplY3RfZGVjbGFyYXRpb24pKQogICAgICAgICBsaW5lcy5hcHBl
bmQoJ3snKQogICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBBU1NFUlRfQVJHKHZhbHVlLCB2YWx1
ZSk7JykKICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgU3RyaW5nIHJlc3VsdDsnKQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2FsbC9l
eHBlY3RlZC9kZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uLXJlc3VsdCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9hbGwvZXhwZWN0ZWQvZGVm
aW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbi1yZXN1bHQKaW5kZXggNmQwN2Q5ZTAyYmMu
LjNmNzgzY2Q0OGMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvYWxsL2V4cGVjdGVkL2RlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3Jt
Lmpzb24tcmVzdWx0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9hbGwvZXhwZWN0ZWQvZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbi1y
ZXN1bHQKQEAgLTE1Miw3ICsxNTIsNyBAQCBwcm90ZWN0ZWQ6CiBjbGFzcyBOZXR3b3JrQmFja2Vu
ZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIg
ewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8TmV0d29ya0JhY2tlbmREaXNwYXRjaGVyPiBjcmVh
dGUoQmFja2VuZERpc3BhdGNoZXImLCBOZXR3b3JrQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7
Ci0gICAgdm9pZCBkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2Qs
IFJlZjxJbnNwZWN0b3JPYmplY3Q+JiYgbWVzc2FnZSkgb3ZlcnJpZGU7CisgICAgdm9pZCBkaXNw
YXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmpl
Y3Q+JiYgbWVzc2FnZSkgb3ZlcnJpZGU7CiBwcml2YXRlOgogICAgIHZvaWQgbG9hZFJlc291cmNl
KGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIHBhcmFtZXRlcnMpOwog
I2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQpAQCAtMjI4LDExICsy
MjgsMTEgQEAgTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyOjpOZXR3b3JrQmFja2VuZERpc3BhdGNo
ZXIoQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXMKICAgICBtX2JhY2tlbmREaXNwYXRjaGVy
LT5yZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4oQVNDSUlMaXRlcmFsKCJOZXR3b3JrIiksIHRo
aXMpOwogfQogCi12b2lkIE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyBy
ZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SW5zcGVjdG9yT2JqZWN0PiYmIG1l
c3NhZ2UpCit2b2lkIE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1
ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2Up
CiB7CiAgICAgUmVmPE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7CiAK
LSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbWV0ZXJzOworICAgIFJlZlB0cjxKU09O
OjpPYmplY3Q+IHBhcmFtZXRlcnM7CiAgICAgbWVzc2FnZS0+Z2V0T2JqZWN0KEFTQ0lJTGl0ZXJh
bCgicGFyYW1zIiksIHBhcmFtZXRlcnMpOwogCiAgICAgaWYgKG1ldGhvZCA9PSAibG9hZFJlc291
cmNlIikKQEAgLTQxOSw3ICs0MTksNyBAQCBjbGFzcyBOZXR3b3JrRXJyb3I7CiAKIAogbmFtZXNw
YWNlIE5ldHdvcmsgewotY2xhc3MgTmV0d29ya0Vycm9yIDogcHVibGljIEluc3BlY3Rvcjo6SW5z
cGVjdG9yT2JqZWN0QmFzZSB7CitjbGFzcyBOZXR3b3JrRXJyb3IgOiBwdWJsaWMgSlNPTjo6T2Jq
ZWN0QmFzZSB7CiBwdWJsaWM6CiAgICAgZW51bSB7CiAgICAgICAgIE5vRmllbGRzU2V0ID0gMCwK
QEAgLTQzMSwxNCArNDMxLDE0IEBAIHB1YmxpYzoKICAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAg
ICAgY2xhc3MgQnVpbGRlciB7CiAgICAgcHJpdmF0ZToKLSAgICAgICAgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gbV9yZXN1bHQ7CisgICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG1fcmVzdWx0
OwogCiAgICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNh
c3RTdGF0ZSgpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2Fz
dDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICAgfQogCi0gICAgICAgIEJ1
aWxkZXIoUmVmPC8qTmV0d29ya0Vycm9yKi9JbnNwZWN0b3JPYmplY3Q+JiYgb2JqZWN0KQorICAg
ICAgICBCdWlsZGVyKFJlZjwvKk5ldHdvcmtFcnJvciovSlNPTjo6T2JqZWN0PiYmIG9iamVjdCkK
ICAgICAgICAgICAgIDogbV9yZXN1bHQoV1RGTW92ZShvYmplY3QpKQogICAgICAgICB7CiAgICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVh
dGVkX2luX25vbl9pbml0X3N0YXRlKTsKQEAgLTQ2Myw5ICs0NjMsOSBAQCBwdWJsaWM6CiAgICAg
ICAgIFJlZjxOZXR3b3JrRXJyb3I+IHJlbGVhc2UoKQogICAgICAgICB7CiAgICAgICAgICAgICBD
T01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkp
OwotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKE5ldHdvcmtFcnJvcikgPT0gc2l6
ZW9mKEluc3BlY3Rvck9iamVjdCksIGNhbm5vdF9jYXN0KTsKKyAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKHNpemVvZihOZXR3b3JrRXJyb3IpID09IHNpemVvZihKU09OOjpPYmplY3QpLCBjYW5u
b3RfY2FzdCk7CiAKLSAgICAgICAgICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IG1f
cmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7CisgICAgICAgICAgICBSZWY8SlNPTjo6T2JqZWN0PiBy
ZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOwogICAgICAgICAgICAgcmV0dXJuIFdU
Rk1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPE5ldHdvcmtFcnJvcj4qPigmcmVzdWx0KSk7CiAg
ICAgICAgIH0KICAgICB9OwpAQCAtNDc5LDcgKzQ3OSw3IEBAIHB1YmxpYzoKICAgICAgKi8KICAg
ICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKICAgICB7Ci0gICAgICAgIHJl
dHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpKTsKKyAg
ICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEpTT046Ok9iamVjdDo6Y3JlYXRlKCkp
OwogICAgIH0KIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2NvbW1hbmRzLXdpdGgtYXN5bmMtYXR0
cmlidXRlLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUu
anNvbi1yZXN1bHQKaW5kZXggODI2NGQyMTY0OGQuLmEzNjcyOWUzZTc1IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBl
Y3RlZC9jb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uLXJlc3VsdAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3Rl
ZC9jb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uLXJlc3VsdApAQCAtMTU3LDE4ICsx
NTcsMTggQEAgcHVibGljOgogICAgICAgICBZZWxsb3cgPSA1LAogICAgICAgICBCbGFjayA9IDYs
CiAgICAgfTsgLy8gZW51bSBjbGFzcyBQcmludENvbG9yCi0gICAgdmlydHVhbCB2b2lkIGV4ZWN1
dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMoRXJyb3JTdHJpbmcmLCBpbnQgaW5fZGF0YWJh
c2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkFycmF5PFN0cmluZz4+JiBvcHRfb3V0X2NvbHVtbk5hbWVzLCBJbnNwZWN0b3I6OlByb3RvY29s
OjpPcHRPdXRwdXQ8U3RyaW5nPiogb3B0X291dF9ub3RlcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6
T3B0T3V0cHV0PGRvdWJsZT4qIG9wdF9vdXRfdGltZXN0YW1wLCBJbnNwZWN0b3I6OlByb3RvY29s
OjpPcHRPdXRwdXQ8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+KiBvcHRfb3V0X3ZhbHVlcywg
SW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+
KiBvcHRfb3V0X3BheWxvYWQsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxpbnQ+KiBv
cHRfb3V0X2RhdGFiYXNlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6
RXJyb3I+JiBvcHRfb3V0X3NxbEVycm9yLCBJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6
UHJpbWFyeUNvbG9ycyogb3B0X291dF9zY3JlZW5Db2xvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+JiBvcHRfb3V0X2FsdGVybmF0ZUNvbG9ycywgRGF0
YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3IqIG9wdF9vdXRfcHJpbnRD
b2xvcikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJu
VmFsdWVzKEVycm9yU3RyaW5nJiwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5f
cXVlcnksIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+PiYgb3B0X291
dF9jb2x1bW5OYW1lcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PFN0cmluZz4qIG9w
dF9vdXRfbm90ZXMsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxkb3VibGU+KiBvcHRf
b3V0X3RpbWVzdGFtcCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PEpTT046Ok9iamVj
dD4qIG9wdF9vdXRfdmFsdWVzLCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8SlNPTjo6
VmFsdWU+KiBvcHRfb3V0X3BheWxvYWQsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxp
bnQ+KiBvcHRfb3V0X2RhdGFiYXNlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRh
YmFzZTo6RXJyb3I+JiBvcHRfb3V0X3NxbEVycm9yLCBJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRh
YmFzZTo6UHJpbWFyeUNvbG9ycyogb3B0X291dF9zY3JlZW5Db2xvciwgUmVmUHRyPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+JiBvcHRfb3V0X2FsdGVybmF0ZUNvbG9y
cywgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3IqIG9wdF9vdXRf
cHJpbnRDb2xvcikgPSAwOwogICAgIGNsYXNzIEV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJu
VmFsdWVzQ2FsbGJhY2sgOiBwdWJsaWMgQmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZSB7
CiAgICAgcHVibGljOgogICAgICAgICBFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVl
c0NhbGxiYWNrKFJlZjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiwgaW50IGlkKTsKLSAgICAgICAgdm9p
ZCBzZW5kU3VjY2VzcyhSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPj4m
JiBjb2x1bW5OYW1lcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PFN0cmluZz4qIG5v
dGVzLCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8ZG91YmxlPiogdGltZXN0YW1wLCBJ
bnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+
KiB2YWx1ZXMsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxJbnNwZWN0b3I6Okluc3Bl
Y3RvclZhbHVlPiogcGF5bG9hZCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PGludD4q
IGRhdGFiYXNlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+
JiYgc3FsRXJyb3IsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxTdHJpbmc+KiBzY3Jl
ZW5Db2xvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+
JiYgYWx0ZXJuYXRlQ29sb3JzLCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8U3RyaW5n
PiogcHJpbnRDb2xvcik7CisgICAgICAgIHZvaWQgc2VuZFN1Y2Nlc3MoUmVmUHRyPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+JiYgY29sdW1uTmFtZXMsIEluc3BlY3Rvcjo6UHJv
dG9jb2w6Ok9wdE91dHB1dDxTdHJpbmc+KiBub3RlcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0
T3V0cHV0PGRvdWJsZT4qIHRpbWVzdGFtcCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0
PEpTT046Ok9iamVjdD4qIHZhbHVlcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PEpT
T046OlZhbHVlPiogcGF5bG9hZCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PGludD4q
IGRhdGFiYXNlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+
JiYgc3FsRXJyb3IsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxTdHJpbmc+KiBzY3Jl
ZW5Db2xvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+
JiYgYWx0ZXJuYXRlQ29sb3JzLCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8U3RyaW5n
PiogcHJpbnRDb2xvcik7CiAgICAgfTsKICAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVNRTEFzeW5j
T3B0aW9uYWxSZXR1cm5WYWx1ZXMoRXJyb3JTdHJpbmcmLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29u
c3QgU3RyaW5nJiBpbl9xdWVyeSwgUmVmPEV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFs
dWVzQ2FsbGJhY2s+JiYgY2FsbGJhY2spID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVNR
TFN5bmMoRXJyb3JTdHJpbmcmLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9x
dWVyeSwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+JiBvdXRfY29s
dW1uTmFtZXMsIFN0cmluZyogb3V0X25vdGVzLCBkb3VibGUqIG91dF90aW1lc3RhbXAsIEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yT2JqZWN0KiBvdXRfdmFsdWVzLCBJbnNwZWN0b3I6Okluc3BlY3RvclZh
bHVlKiBvdXRfcGF5bG9hZCwgaW50KiBvdXRfZGF0YWJhc2VJZCwgUmVmUHRyPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4mIG91dF9zcWxFcnJvciwgUmVmUHRyPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+JiBvdXRfYWx0ZXJuYXRlQ29sb3JzLCBJ
bnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyogb3V0X3NjcmVlbkNv
bG9yLCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UHJpbnRDb2xvciogb3V0X3By
aW50Q29sb3IpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVNRTFN5bmMoRXJyb3JTdHJp
bmcmLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSwgUmVmUHRyPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+JiBvdXRfY29sdW1uTmFtZXMsIFN0cmlu
Zyogb3V0X25vdGVzLCBkb3VibGUqIG91dF90aW1lc3RhbXAsIEpTT046Ok9iamVjdCogb3V0X3Zh
bHVlcywgSlNPTjo6VmFsdWUqIG91dF9wYXlsb2FkLCBpbnQqIG91dF9kYXRhYmFzZUlkLCBSZWZQ
dHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiYgb3V0X3NxbEVycm9yLCBS
ZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4mIG91dF9hbHRl
cm5hdGVDb2xvcnMsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3Jz
KiBvdXRfc2NyZWVuQ29sb3IsIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpQcmlu
dENvbG9yKiBvdXRfcHJpbnRDb2xvcikgPSAwOwogICAgIGNsYXNzIEV4ZWN1dGVTUUxBc3luY0Nh
bGxiYWNrIDogcHVibGljIEJhY2tlbmREaXNwYXRjaGVyOjpDYWxsYmFja0Jhc2UgewogICAgIHB1
YmxpYzoKICAgICAgICAgRXhlY3V0ZVNRTEFzeW5jQ2FsbGJhY2soUmVmPEJhY2tlbmREaXNwYXRj
aGVyPiYmLCBpbnQgaWQpOwotICAgICAgICB2b2lkIHNlbmRTdWNjZXNzKFJlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+PiYmIGNvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcm
IG5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCB2YWx1
ZXMsIEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUgcGF5bG9hZCwgaW50IGRhdGFiYXNlSWQsIFJl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+JiYgc3FsRXJyb3IsIGNv
bnN0IFN0cmluZyYgc2NyZWVuQ29sb3IsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRh
YmFzZTo6Q29sb3JMaXN0PiYmIGFsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nJiBwcmludENv
bG9yKTsKKyAgICAgICAgdm9pZCBzZW5kU3VjY2VzcyhSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6QXJyYXk8U3RyaW5nPj4mJiBjb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBub3RlcywgZG91
YmxlIHRpbWVzdGFtcCwgSlNPTjo6T2JqZWN0IHZhbHVlcywgSlNPTjo6VmFsdWUgcGF5bG9hZCwg
aW50IGRhdGFiYXNlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJy
b3I+JiYgc3FsRXJyb3IsIGNvbnN0IFN0cmluZyYgc2NyZWVuQ29sb3IsIFJlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiYmIGFsdGVybmF0ZUNvbG9ycywgY29u
c3QgU3RyaW5nJiBwcmludENvbG9yKTsKICAgICB9OwogICAgIHZpcnR1YWwgdm9pZCBleGVjdXRl
U1FMQXN5bmMoRXJyb3JTdHJpbmcmLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBp
bl9xdWVyeSwgUmVmPEV4ZWN1dGVTUUxBc3luY0NhbGxiYWNrPiYmIGNhbGxiYWNrKSA9IDA7CiBw
cm90ZWN0ZWQ6CkBAIC0xNzgsNyArMTc4LDcgQEAgcHJvdGVjdGVkOgogY2xhc3MgRGF0YWJhc2VC
YWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0
Y2hlciB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVy
PiBjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImLCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFu
ZGxlciopOwotICAgIHZvaWQgZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYg
bWV0aG9kLCBSZWY8SW5zcGVjdG9yT2JqZWN0PiYmIG1lc3NhZ2UpIG92ZXJyaWRlOworICAgIHZv
aWQgZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNP
Tjo6T2JqZWN0PiYmIG1lc3NhZ2UpIG92ZXJyaWRlOwogcHJpdmF0ZToKICAgICB2b2lkIGV4ZWN1
dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+JiYgcGFyYW1ldGVycyk7CiAgICAgdm9pZCBleGVjdXRlU1FMQXN5bmNPcHRp
b25hbFJldHVyblZhbHVlcyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4m
JiBwYXJhbWV0ZXJzKTsKQEAgLTI1NywxMSArMjU3LDExIEBAIERhdGFiYXNlQmFja2VuZERpc3Bh
dGNoZXI6OkRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImIGJhY2tl
bmRECiAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNwYXRjaGVyRm9yRG9tYWlu
KEFTQ0lJTGl0ZXJhbCgiRGF0YWJhc2UiKSwgdGhpcyk7CiB9CiAKLXZvaWQgRGF0YWJhc2VCYWNr
ZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0
aG9kLCBSZWY8SW5zcGVjdG9yT2JqZWN0PiYmIG1lc3NhZ2UpCit2b2lkIERhdGFiYXNlQmFja2Vu
ZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhv
ZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKQogewogICAgIFJlZjxEYXRhYmFzZUJhY2tl
bmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKIAotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IHBhcmFtZXRlcnM7CisgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVyczsKICAg
ICBtZXNzYWdlLT5nZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJwYXJhbXMiKSwgcGFyYW1ldGVycyk7
CiAKICAgICBpZiAobWV0aG9kID09ICJleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVz
IikKQEAgLTI5Nyw4ICsyOTcsOCBAQCB2b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4
ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyByZXF1ZXN0SQogICAgIFJlZlB0
cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+PiBvdXRfY29sdW1uTmFtZXM7CiAg
ICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PFN0cmluZz4gb3V0X25vdGVzOwogICAg
IEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxkb3VibGU+IG91dF90aW1lc3RhbXA7Ci0g
ICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PEluc3BlY3Rvcjo6SW5zcGVjdG9yT2Jq
ZWN0PiBvdXRfdmFsdWVzOwotICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxJbnNw
ZWN0b3I6Okluc3BlY3RvclZhbHVlPiBvdXRfcGF5bG9hZDsKKyAgICBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpPcHRPdXRwdXQ8SlNPTjo6T2JqZWN0PiBvdXRfdmFsdWVzOworICAgIEluc3BlY3Rvcjo6
UHJvdG9jb2w6Ok9wdE91dHB1dDxKU09OOjpWYWx1ZT4gb3V0X3BheWxvYWQ7CiAgICAgSW5zcGVj
dG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpE
YXRhYmFzZUlkPiBvdXRfZGF0YWJhc2VJZDsKICAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6RGF0YWJhc2U6OkVycm9yPiBvdXRfc3FsRXJyb3I7CiAgICAgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMgb3V0X3NjcmVlbkNvbG9yOwpAQCAtMzM2LDkgKzMz
Niw5IEBAIHZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTFN5bmNPcHRp
b25hbFJldHVyblZhbHVlcyhsb25nIHJlcXVlc3RJCiAKIERhdGFiYXNlQmFja2VuZERpc3BhdGNo
ZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc0NhbGxiYWNrOjpF
eGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc0NhbGxiYWNrKFJlZjxCYWNrZW5kRGlz
cGF0Y2hlcj4mJiBiYWNrZW5kRGlzcGF0Y2hlciwgaW50IGlkKSA6IEJhY2tlbmREaXNwYXRjaGVy
OjpDYWxsYmFja0Jhc2UoV1RGTW92ZShiYWNrZW5kRGlzcGF0Y2hlciksIGlkKSB7IH0KIAotdm9p
ZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhlY3V0ZVNRTEFzeW5jT3B0aW9u
YWxSZXR1cm5WYWx1ZXNDYWxsYmFjazo6c2VuZFN1Y2Nlc3MoUmVmUHRyPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkFycmF5PFN0cmluZz4+JiYgY29sdW1uTmFtZXMsIEluc3BlY3Rvcjo6UHJvdG9jb2w6
Ok9wdE91dHB1dDxTdHJpbmc+KiBub3RlcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0
PGRvdWJsZT4qIHRpbWVzdGFtcCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiogdmFsdWVzLCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRP
dXRwdXQ8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4qIHBheWxvYWQsIEluc3BlY3Rvcjo6UHJv
dG9jb2w6Ok9wdE91dHB1dDxpbnQ+KiBkYXRhYmFzZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6RGF0YWJhc2U6OkVycm9yPiYmIHNxbEVycm9yLCBJbnNwZWN0b3I6OlByb3RvY29sOjpP
cHRPdXRwdXQ8U3RyaW5nPiogc2NyZWVuQ29sb3IsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29s
OjpEYXRhYmFzZTo6Q29sb3JMaXN0PiYmIGFsdGVybmF0ZUNvbG9ycywgSW5zcGVjdG9yOjpQcm90
b2NvbDo6T3B0T3V0cHV0PFN0cmluZz4qIHByaW50Q29sb3IpCit2b2lkIERhdGFiYXNlQmFja2Vu
ZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc0Nh
bGxiYWNrOjpzZW5kU3VjY2VzcyhSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3Ry
aW5nPj4mJiBjb2x1bW5OYW1lcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PFN0cmlu
Zz4qIG5vdGVzLCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8ZG91YmxlPiogdGltZXN0
YW1wLCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8SlNPTjo6T2JqZWN0PiogdmFsdWVz
LCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8SlNPTjo6VmFsdWU+KiBwYXlsb2FkLCBJ
bnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8aW50PiogZGF0YWJhc2VJZCwgUmVmUHRyPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4mJiBzcWxFcnJvciwgSW5zcGVjdG9y
OjpQcm90b2NvbDo6T3B0T3V0cHV0PFN0cmluZz4qIHNjcmVlbkNvbG9yLCBSZWZQdHI8SW5zcGVj
dG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4mJiBhbHRlcm5hdGVDb2xvcnMsIElu
c3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxTdHJpbmc+KiBwcmludENvbG9yKQogewotICAg
IFJlZjxJbnNwZWN0b3JPYmplY3Q+IGpzb25NZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKTsKKyAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6
Y3JlYXRlKCk7CiAgICAgaWYgKGNvbHVtbk5hbWVzKQogICAgICAgICBqc29uTWVzc2FnZS0+c2V0
QXJyYXkoQVNDSUlMaXRlcmFsKCJjb2x1bW5OYW1lcyIpLCBjb2x1bW5OYW1lcyk7CiAgICAgaWYg
KG5vdGVzLmlzQXNzaWduZWQoKSkKQEAgLTQxMSw4ICs0MTEsOCBAQCB2b2lkIERhdGFiYXNlQmFj
a2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxTeW5jKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SW5z
cGVjdG9yTwogICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+PiBv
dXRfY29sdW1uTmFtZXM7CiAgICAgU3RyaW5nIG91dF9ub3RlczsKICAgICBkb3VibGUgb3V0X3Rp
bWVzdGFtcDsKLSAgICBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCBvdXRfdmFsdWVzOwotICAg
IEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUgb3V0X3BheWxvYWQ7CisgICAgSlNPTjo6T2JqZWN0
IG91dF92YWx1ZXM7CisgICAgSlNPTjo6VmFsdWUgb3V0X3BheWxvYWQ7CiAgICAgSW5zcGVjdG9y
OjpQcm90b2NvbDo6RGF0YWJhc2U6OkRhdGFiYXNlSWQgb3V0X2RhdGFiYXNlSWQ7CiAgICAgUmVm
UHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4gb3V0X3NxbEVycm9yOwog
ICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiBvdXRf
YWx0ZXJuYXRlQ29sb3JzOwpAQCAtNDQwLDkgKzQ0MCw5IEBAIHZvaWQgRGF0YWJhc2VCYWNrZW5k
RGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTFN5bmMobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxJbnNwZWN0
b3JPCiAKIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmND
YWxsYmFjazo6RXhlY3V0ZVNRTEFzeW5jQ2FsbGJhY2soUmVmPEJhY2tlbmREaXNwYXRjaGVyPiYm
IGJhY2tlbmREaXNwYXRjaGVyLCBpbnQgaWQpIDogQmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNr
QmFzZShXVEZNb3ZlKGJhY2tlbmREaXNwYXRjaGVyKSwgaWQpIHsgfQogCi12b2lkIERhdGFiYXNl
QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNDYWxsYmFjazo6c2VuZFN1
Y2Nlc3MoUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+JiYgY29sdW1u
TmFtZXMsIGNvbnN0IFN0cmluZyYgbm90ZXMsIGRvdWJsZSB0aW1lc3RhbXAsIEluc3BlY3Rvcjo6
SW5zcGVjdG9yT2JqZWN0IHZhbHVlcywgSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSBwYXlsb2Fk
LCBpbnQgZGF0YWJhc2VJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpF
cnJvcj4mJiBzcWxFcnJvciwgY29uc3QgU3RyaW5nJiBzY3JlZW5Db2xvciwgUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+JiYgYWx0ZXJuYXRlQ29sb3JzLCBj
b25zdCBTdHJpbmcmIHByaW50Q29sb3IpCit2b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNDYWxsYmFjazo6c2VuZFN1Y2Nlc3MoUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+JiYgY29sdW1uTmFtZXMsIGNvbnN0IFN0cmlu
ZyYgbm90ZXMsIGRvdWJsZSB0aW1lc3RhbXAsIEpTT046Ok9iamVjdCB2YWx1ZXMsIEpTT046OlZh
bHVlIHBheWxvYWQsIGludCBkYXRhYmFzZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6
RGF0YWJhc2U6OkVycm9yPiYmIHNxbEVycm9yLCBjb25zdCBTdHJpbmcmIHNjcmVlbkNvbG9yLCBS
ZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4mJiBhbHRlcm5h
dGVDb2xvcnMsIGNvbnN0IFN0cmluZyYgcHJpbnRDb2xvcikKIHsKLSAgICBSZWY8SW5zcGVjdG9y
T2JqZWN0PiBqc29uTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVm
PEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAg
IGpzb25NZXNzYWdlLT5zZXRBcnJheShBU0NJSUxpdGVyYWwoImNvbHVtbk5hbWVzIiksIGNvbHVt
bk5hbWVzKTsKICAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgibm90ZXMi
KSwgbm90ZXMpOwogICAgIGpzb25NZXNzYWdlLT5zZXREb3VibGUoQVNDSUlMaXRlcmFsKCJ0aW1l
c3RhbXAiKSwgdGltZXN0YW1wKTsKQEAgLTY1Miw3ICs2NTIsNyBAQCBlbnVtIGNsYXNzIFByaW1h
cnlDb2xvcnMgewogICAgIEJsdWUgPSAyLAogfTsgLy8gZW51bSBjbGFzcyBQcmltYXJ5Q29sb3Jz
CiAvKiBEYXRhYmFzZSBlcnJvci4gKi8KLWNsYXNzIEVycm9yIDogcHVibGljIEluc3BlY3Rvcjo6
SW5zcGVjdG9yT2JqZWN0QmFzZSB7CitjbGFzcyBFcnJvciA6IHB1YmxpYyBKU09OOjpPYmplY3RC
YXNlIHsKIHB1YmxpYzoKICAgICBlbnVtIHsKICAgICAgICAgTm9GaWVsZHNTZXQgPSAwLApAQCAt
NjY0LDE0ICs2NjQsMTQgQEAgcHVibGljOgogICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgICBj
bGFzcyBCdWlsZGVyIHsKICAgICBwcml2YXRlOgotICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBtX3Jlc3VsdDsKKyAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gbV9yZXN1bHQ7CiAK
ICAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0
YXRlKCkKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1
aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgICB9CiAKLSAgICAgICAgQnVpbGRl
cihSZWY8LypFcnJvciovSW5zcGVjdG9yT2JqZWN0PiYmIG9iamVjdCkKKyAgICAgICAgQnVpbGRl
cihSZWY8LypFcnJvciovSlNPTjo6T2JqZWN0PiYmIG9iamVjdCkKICAgICAgICAgICAgIDogbV9y
ZXN1bHQoV1RGTW92ZShvYmplY3QpKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FT
U0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0
YXRlKTsKQEAgLTY5Niw5ICs2OTYsOSBAQCBwdWJsaWM6CiAgICAgICAgIFJlZjxFcnJvcj4gcmVs
ZWFzZSgpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFs
bEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7Ci0gICAgICAgICAgICBDT01QSUxFX0FT
U0VSVChzaXplb2YoRXJyb3IpID09IHNpemVvZihJbnNwZWN0b3JPYmplY3QpLCBjYW5ub3RfY2Fz
dCk7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoRXJyb3IpID09IHNpemVvZihK
U09OOjpPYmplY3QpLCBjYW5ub3RfY2FzdCk7CiAKLSAgICAgICAgICAgIFJlZjxJbnNwZWN0b3JP
YmplY3Q+IHJlc3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7CisgICAgICAgICAgICBS
ZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOwogICAg
ICAgICAgICAgcmV0dXJuIFdURk1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPEVycm9yPio+KCZy
ZXN1bHQpKTsKICAgICAgICAgfQogICAgIH07CkBAIC03MTIsNyArNzEyLDcgQEAgcHVibGljOgog
ICAgICAqLwogICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQogICAgIHsK
LSAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEluc3BlY3Rvck9iamVjdDo6Y3Jl
YXRlKCkpOworICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSlNPTjo6T2JqZWN0
OjpjcmVhdGUoKSk7CiAgICAgfQogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvY29tbWFuZHMtd2l0
aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0IGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvY29t
bWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0Cmlu
ZGV4IDVmYTZmNDllYjBmLi42MzBjYjA1MmRiZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvY29tbWFuZHMt
d2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0CisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVj
dGVkL2NvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uLXJl
c3VsdApAQCAtODksOCArODksOCBAQCBwcml2YXRlOgogY2xhc3MgQWx0ZXJuYXRlRGF0YWJhc2VC
YWNrZW5kRGlzcGF0Y2hlciA6IHB1YmxpYyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7CiBw
dWJsaWM6CiAgICAgdmlydHVhbCB+QWx0ZXJuYXRlRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcigp
IHsgfQotICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcg
Y2FsbElkLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5KiBpbl9jb2x1bW5OYW1lcywg
Y29uc3QgU3RyaW5nKiBjb25zdCBpbl9ub3RlcywgY29uc3QgZG91YmxlKiBjb25zdCBpbl90aW1l
c3RhbXAsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0KiBpbl92YWx1ZXMsIGNvbnN0
IEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUqIGNvbnN0IGluX3BheWxvYWQsIGNvbnN0IGludCog
Y29uc3QgaW5fZGF0YWJhc2VJZCwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QqIGlu
X3NxbEVycm9yLCBjb25zdCBTdHJpbmcqIGNvbnN0IGluX3NjcmVlbkNvbG9yLCBjb25zdCBJbnNw
ZWN0b3I6Okluc3BlY3RvckFycmF5KiBpbl9hbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyog
Y29uc3QgaW5fcHJpbnRDb2xvcikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlTm9PcHRp
b25hbFBhcmFtZXRlcnMobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJy
YXkmIGluX2NvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIGluX25vdGVzLCBkb3VibGUgaW5fdGlt
ZXN0YW1wLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCYgaW5fdmFsdWVzLCBJbnNw
ZWN0b3I6Okluc3BlY3RvclZhbHVlIGluX3BheWxvYWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25z
dCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCYgaW5fc3FsRXJyb3IsIGNvbnN0IFN0cmluZyYg
aW5fc2NyZWVuQ29sb3IsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXkmIGluX2FsdGVy
bmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nJiBpbl9wcmludENvbG9yKSA9IDA7CisgICAgdmlydHVh
bCB2b2lkIGV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMobG9uZyBjYWxsSWQsIGNvbnN0IEpT
T046OkFycmF5KiBpbl9jb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nKiBjb25zdCBpbl9ub3Rlcywg
Y29uc3QgZG91YmxlKiBjb25zdCBpbl90aW1lc3RhbXAsIGNvbnN0IEpTT046Ok9iamVjdCogaW5f
dmFsdWVzLCBjb25zdCBKU09OOjpWYWx1ZSogY29uc3QgaW5fcGF5bG9hZCwgY29uc3QgaW50KiBj
b25zdCBpbl9kYXRhYmFzZUlkLCBjb25zdCBKU09OOjpPYmplY3QqIGluX3NxbEVycm9yLCBjb25z
dCBTdHJpbmcqIGNvbnN0IGluX3NjcmVlbkNvbG9yLCBjb25zdCBKU09OOjpBcnJheSogaW5fYWx0
ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcqIGNvbnN0IGluX3ByaW50Q29sb3IpID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgY2FsbElkLCBj
b25zdCBKU09OOjpBcnJheSYgaW5fY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgaW5fbm90ZXMs
IGRvdWJsZSBpbl90aW1lc3RhbXAsIGNvbnN0IEpTT046Ok9iamVjdCYgaW5fdmFsdWVzLCBKU09O
OjpWYWx1ZSBpbl9wYXlsb2FkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgSlNPTjo6T2JqZWN0
JiBpbl9zcWxFcnJvciwgY29uc3QgU3RyaW5nJiBpbl9zY3JlZW5Db2xvciwgY29uc3QgSlNPTjo6
QXJyYXkmIGluX2FsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nJiBpbl9wcmludENvbG9yKSA9
IDA7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKQEAgLTE1Miw4ICsxNTIsOCBAQCBw
dWJsaWM6CiAgICAgICAgIFllbGxvdyA9IDUsCiAgICAgICAgIEJsYWNrID0gNiwKICAgICB9OyAv
LyBlbnVtIGNsYXNzIFByaW50Q29sb3IKLSAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZUFsbE9wdGlv
bmFsUGFyYW1ldGVycyhFcnJvclN0cmluZyYsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJy
YXkqIG9wdF9pbl9jb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nKiBjb25zdCBvcHRfaW5fbm90ZXMs
IGNvbnN0IGRvdWJsZSogY29uc3Qgb3B0X2luX3RpbWVzdGFtcCwgY29uc3QgSW5zcGVjdG9yOjpJ
bnNwZWN0b3JPYmplY3QqIG9wdF9pbl92YWx1ZXMsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9y
VmFsdWUqIGNvbnN0IG9wdF9pbl9wYXlsb2FkLCBjb25zdCBpbnQqIGNvbnN0IG9wdF9pbl9kYXRh
YmFzZUlkLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCogb3B0X2luX3NxbEVycm9y
LCBjb25zdCBTdHJpbmcqIGNvbnN0IG9wdF9pbl9zY3JlZW5Db2xvciwgY29uc3QgSW5zcGVjdG9y
OjpJbnNwZWN0b3JBcnJheSogb3B0X2luX2FsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nKiBj
b25zdCBvcHRfaW5fcHJpbnRDb2xvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5
PFN0cmluZz4+JiBvcHRfb3V0X2NvbHVtbk5hbWVzLCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRP
dXRwdXQ8U3RyaW5nPiogb3B0X291dF9ub3RlcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0
cHV0PGRvdWJsZT4qIG9wdF9vdXRfdGltZXN0YW1wLCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRP
dXRwdXQ8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+KiBvcHRfb3V0X3ZhbHVlcywgSW5zcGVj
dG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+KiBvcHRf
b3V0X3BheWxvYWQsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxpbnQ+KiBvcHRfb3V0
X2RhdGFiYXNlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+
JiBvcHRfb3V0X3NxbEVycm9yLCBJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFy
eUNvbG9ycyogb3B0X291dF9zY3JlZW5Db2xvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRhdGFiYXNlOjpDb2xvckxpc3Q+JiBvcHRfb3V0X2FsdGVybmF0ZUNvbG9ycywgRGF0YWJhc2VC
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3IqIG9wdF9vdXRfcHJpbnRDb2xvcikg
PSAwOwotICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMoRXJyb3JT
dHJpbmcmLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5JiBpbl9jb2x1bW5OYW1lcywg
Y29uc3QgU3RyaW5nJiBpbl9ub3RlcywgZG91YmxlIGluX3RpbWVzdGFtcCwgY29uc3QgSW5zcGVj
dG9yOjpJbnNwZWN0b3JPYmplY3QmIGluX3ZhbHVlcywgSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1
ZSBpbl9wYXlsb2FkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0
b3JPYmplY3QmIGluX3NxbEVycm9yLCBjb25zdCBTdHJpbmcmIGluX3NjcmVlbkNvbG9yLCBjb25z
dCBJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5JiBpbl9hbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0
cmluZyYgaW5fcHJpbnRDb2xvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0
cmluZz4+JiBvdXRfY29sdW1uTmFtZXMsIFN0cmluZyogb3V0X25vdGVzLCBkb3VibGUqIG91dF90
aW1lc3RhbXAsIEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0KiBvdXRfdmFsdWVzLCBJbnNwZWN0
b3I6Okluc3BlY3RvclZhbHVlKiBvdXRfcGF5bG9hZCwgaW50KiBvdXRfZGF0YWJhc2VJZCwgUmVm
UHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4mIG91dF9zcWxFcnJvciwg
SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMqIG91dF9zY3JlZW5D
b2xvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+JiBv
dXRfYWx0ZXJuYXRlQ29sb3JzLCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UHJp
bnRDb2xvciogb3V0X3ByaW50Q29sb3IpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZUFs
bE9wdGlvbmFsUGFyYW1ldGVycyhFcnJvclN0cmluZyYsIGNvbnN0IEpTT046OkFycmF5KiBvcHRf
aW5fY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyogY29uc3Qgb3B0X2luX25vdGVzLCBjb25zdCBk
b3VibGUqIGNvbnN0IG9wdF9pbl90aW1lc3RhbXAsIGNvbnN0IEpTT046Ok9iamVjdCogb3B0X2lu
X3ZhbHVlcywgY29uc3QgSlNPTjo6VmFsdWUqIGNvbnN0IG9wdF9pbl9wYXlsb2FkLCBjb25zdCBp
bnQqIGNvbnN0IG9wdF9pbl9kYXRhYmFzZUlkLCBjb25zdCBKU09OOjpPYmplY3QqIG9wdF9pbl9z
cWxFcnJvciwgY29uc3QgU3RyaW5nKiBjb25zdCBvcHRfaW5fc2NyZWVuQ29sb3IsIGNvbnN0IEpT
T046OkFycmF5KiBvcHRfaW5fYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcqIGNvbnN0IG9w
dF9pbl9wcmludENvbG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5n
Pj4mIG9wdF9vdXRfY29sdW1uTmFtZXMsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxT
dHJpbmc+KiBvcHRfb3V0X25vdGVzLCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8ZG91
YmxlPiogb3B0X291dF90aW1lc3RhbXAsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxK
U09OOjpPYmplY3Q+KiBvcHRfb3V0X3ZhbHVlcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0
cHV0PEpTT046OlZhbHVlPiogb3B0X291dF9wYXlsb2FkLCBJbnNwZWN0b3I6OlByb3RvY29sOjpP
cHRPdXRwdXQ8aW50Piogb3B0X291dF9kYXRhYmFzZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6RGF0YWJhc2U6OkVycm9yPiYgb3B0X291dF9zcWxFcnJvciwgSW5zcGVjdG9yOjpQcm90
b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMqIG9wdF9vdXRfc2NyZWVuQ29sb3IsIFJlZlB0
cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiYgb3B0X291dF9hbHRl
cm5hdGVDb2xvcnMsIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpQcmludENvbG9y
KiBvcHRfb3V0X3ByaW50Q29sb3IpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZU5vT3B0
aW9uYWxQYXJhbWV0ZXJzKEVycm9yU3RyaW5nJiwgY29uc3QgSlNPTjo6QXJyYXkmIGluX2NvbHVt
bk5hbWVzLCBjb25zdCBTdHJpbmcmIGluX25vdGVzLCBkb3VibGUgaW5fdGltZXN0YW1wLCBjb25z
dCBKU09OOjpPYmplY3QmIGluX3ZhbHVlcywgSlNPTjo6VmFsdWUgaW5fcGF5bG9hZCwgaW50IGlu
X2RhdGFiYXNlSWQsIGNvbnN0IEpTT046Ok9iamVjdCYgaW5fc3FsRXJyb3IsIGNvbnN0IFN0cmlu
ZyYgaW5fc2NyZWVuQ29sb3IsIGNvbnN0IEpTT046OkFycmF5JiBpbl9hbHRlcm5hdGVDb2xvcnMs
IGNvbnN0IFN0cmluZyYgaW5fcHJpbnRDb2xvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkFycmF5PFN0cmluZz4+JiBvdXRfY29sdW1uTmFtZXMsIFN0cmluZyogb3V0X25vdGVzLCBkb3Vi
bGUqIG91dF90aW1lc3RhbXAsIEpTT046Ok9iamVjdCogb3V0X3ZhbHVlcywgSlNPTjo6VmFsdWUq
IG91dF9wYXlsb2FkLCBpbnQqIG91dF9kYXRhYmFzZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6RGF0YWJhc2U6OkVycm9yPiYgb3V0X3NxbEVycm9yLCBJbnNwZWN0b3I6OlByb3RvY29s
OjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyogb3V0X3NjcmVlbkNvbG9yLCBSZWZQdHI8SW5zcGVj
dG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4mIG91dF9hbHRlcm5hdGVDb2xvcnMs
IERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpQcmludENvbG9yKiBvdXRfcHJpbnRD
b2xvcikgPSAwOwogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgfkRhdGFiYXNlQmFja2VuZERpc3Bh
dGNoZXJIYW5kbGVyKCk7CiB9OwpAQCAtMTYxLDcgKzE2MSw3IEBAIHByb3RlY3RlZDoKIGNsYXNz
IERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgU3VwcGxlbWVudGFsQmFj
a2VuZERpc3BhdGNoZXIgewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8RGF0YWJhc2VCYWNrZW5k
RGlzcGF0Y2hlcj4gY3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiwgRGF0YWJhc2VCYWNrZW5kRGlz
cGF0Y2hlckhhbmRsZXIqKTsKLSAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25z
dCBTdHJpbmcmIG1ldGhvZCwgUmVmPEluc3BlY3Rvck9iamVjdD4mJiBtZXNzYWdlKSBvdmVycmlk
ZTsKKyAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhv
ZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKSBvdmVycmlkZTsKIHByaXZhdGU6CiAgICAg
dm9pZCBleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiYmIHBhcmFtZXRlcnMpOwogICAgIHZvaWQgZXhlY3V0ZU5vT3B0aW9u
YWxQYXJhbWV0ZXJzKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIHBh
cmFtZXRlcnMpOwpAQCAtMjM4LDExICsyMzgsMTEgQEAgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hl
cjo6RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZEQK
ICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4oQVND
SUlMaXRlcmFsKCJEYXRhYmFzZSIpLCB0aGlzKTsKIH0KIAotdm9pZCBEYXRhYmFzZUJhY2tlbmRE
aXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2Qs
IFJlZjxJbnNwZWN0b3JPYmplY3Q+JiYgbWVzc2FnZSkKK3ZvaWQgRGF0YWJhc2VCYWNrZW5kRGlz
cGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBS
ZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpCiB7CiAgICAgUmVmPERhdGFiYXNlQmFja2VuZERp
c3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOwogCi0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
cGFyYW1ldGVyczsKKyAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzOwogICAgIG1l
c3NhZ2UtPmdldE9iamVjdChBU0NJSUxpdGVyYWwoInBhcmFtcyIpLCBwYXJhbWV0ZXJzKTsKIAog
ICAgIGlmIChtZXRob2QgPT0gImV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMiKQpAQCAtMjU2
LDIzICsyNTYsMjMgQEAgdm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChs
b25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFIKIHZvaWQgRGF0YWJhc2VCYWNr
ZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhsb25nIHJlcXVlc3RJ
ZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBwYXJhbWV0ZXJzKQogewogICAgIGJvb2wgb3B0
X2luX2NvbHVtbk5hbWVzX3ZhbHVlRm91bmQgPSBmYWxzZTsKLSAgICBSZWZQdHI8SW5zcGVjdG9y
OjpJbnNwZWN0b3JBcnJheT4gb3B0X2luX2NvbHVtbk5hbWVzID0gbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+Z2V0QXJyYXkocGFyYW1ldGVycy5nZXQoKSwgQVNDSUlMaXRlcmFsKCJjb2x1bW5OYW1lcyIp
LCAmb3B0X2luX2NvbHVtbk5hbWVzX3ZhbHVlRm91bmQpOworICAgIFJlZlB0cjxKU09OOjpBcnJh
eT4gb3B0X2luX2NvbHVtbk5hbWVzID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0QXJyYXkocGFy
YW1ldGVycy5nZXQoKSwgQVNDSUlMaXRlcmFsKCJjb2x1bW5OYW1lcyIpLCAmb3B0X2luX2NvbHVt
bk5hbWVzX3ZhbHVlRm91bmQpOwogICAgIGJvb2wgb3B0X2luX25vdGVzX3ZhbHVlRm91bmQgPSBm
YWxzZTsKICAgICBTdHJpbmcgb3B0X2luX25vdGVzID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0
U3RyaW5nKHBhcmFtZXRlcnMuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgibm90ZXMiKSwgJm9wdF9pbl9u
b3Rlc192YWx1ZUZvdW5kKTsKICAgICBib29sIG9wdF9pbl90aW1lc3RhbXBfdmFsdWVGb3VuZCA9
IGZhbHNlOwogICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxkb3VibGU+IG9wdF9p
bl90aW1lc3RhbXAgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXREb3VibGUocGFyYW1ldGVycy5n
ZXQoKSwgQVNDSUlMaXRlcmFsKCJ0aW1lc3RhbXAiKSwgJm9wdF9pbl90aW1lc3RhbXBfdmFsdWVG
b3VuZCk7CiAgICAgYm9vbCBvcHRfaW5fdmFsdWVzX3ZhbHVlRm91bmQgPSBmYWxzZTsKLSAgICBS
ZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IG9wdF9pbl92YWx1ZXMgPSBtX2JhY2tl
bmREaXNwYXRjaGVyLT5nZXRPYmplY3QocGFyYW1ldGVycy5nZXQoKSwgQVNDSUlMaXRlcmFsKCJ2
YWx1ZXMiKSwgJm9wdF9pbl92YWx1ZXNfdmFsdWVGb3VuZCk7CisgICAgUmVmUHRyPEpTT046Ok9i
amVjdD4gb3B0X2luX3ZhbHVlcyA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldE9iamVjdChwYXJh
bWV0ZXJzLmdldCgpLCBBU0NJSUxpdGVyYWwoInZhbHVlcyIpLCAmb3B0X2luX3ZhbHVlc192YWx1
ZUZvdW5kKTsKICAgICBib29sIG9wdF9pbl9wYXlsb2FkX3ZhbHVlRm91bmQgPSBmYWxzZTsKLSAg
ICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4gb3B0X2luX3BheWxvYWQgPSBtX2Jh
Y2tlbmREaXNwYXRjaGVyLT5nZXRWYWx1ZShwYXJhbWV0ZXJzLmdldCgpLCBBU0NJSUxpdGVyYWwo
InBheWxvYWQiKSwgJm9wdF9pbl9wYXlsb2FkX3ZhbHVlRm91bmQpOworICAgIFJlZlB0cjxKU09O
OjpWYWx1ZT4gb3B0X2luX3BheWxvYWQgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRWYWx1ZShw
YXJhbWV0ZXJzLmdldCgpLCBBU0NJSUxpdGVyYWwoInBheWxvYWQiKSwgJm9wdF9pbl9wYXlsb2Fk
X3ZhbHVlRm91bmQpOwogICAgIGJvb2wgb3B0X2luX2RhdGFiYXNlSWRfdmFsdWVGb3VuZCA9IGZh
bHNlOwogICAgIGludCBvcHRfaW5fZGF0YWJhc2VJZCA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdl
dEludGVnZXIocGFyYW1ldGVycy5nZXQoKSwgQVNDSUlMaXRlcmFsKCJkYXRhYmFzZUlkIiksICZv
cHRfaW5fZGF0YWJhc2VJZF92YWx1ZUZvdW5kKTsKICAgICBib29sIG9wdF9pbl9zcWxFcnJvcl92
YWx1ZUZvdW5kID0gZmFsc2U7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0
PiBvcHRfaW5fc3FsRXJyb3IgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRPYmplY3QocGFyYW1l
dGVycy5nZXQoKSwgQVNDSUlMaXRlcmFsKCJzcWxFcnJvciIpLCAmb3B0X2luX3NxbEVycm9yX3Zh
bHVlRm91bmQpOworICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG9wdF9pbl9zcWxFcnJvciA9IG1f
YmFja2VuZERpc3BhdGNoZXItPmdldE9iamVjdChwYXJhbWV0ZXJzLmdldCgpLCBBU0NJSUxpdGVy
YWwoInNxbEVycm9yIiksICZvcHRfaW5fc3FsRXJyb3JfdmFsdWVGb3VuZCk7CiAgICAgYm9vbCBv
cHRfaW5fc2NyZWVuQ29sb3JfdmFsdWVGb3VuZCA9IGZhbHNlOwogICAgIFN0cmluZyBvcHRfaW5f
c2NyZWVuQ29sb3IgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRTdHJpbmcocGFyYW1ldGVycy5n
ZXQoKSwgQVNDSUlMaXRlcmFsKCJzY3JlZW5Db2xvciIpLCAmb3B0X2luX3NjcmVlbkNvbG9yX3Zh
bHVlRm91bmQpOwogICAgIGJvb2wgb3B0X2luX2FsdGVybmF0ZUNvbG9yc192YWx1ZUZvdW5kID0g
ZmFsc2U7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXk+IG9wdF9pbl9hbHRl
cm5hdGVDb2xvcnMgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRBcnJheShwYXJhbWV0ZXJzLmdl
dCgpLCBBU0NJSUxpdGVyYWwoImFsdGVybmF0ZUNvbG9ycyIpLCAmb3B0X2luX2FsdGVybmF0ZUNv
bG9yc192YWx1ZUZvdW5kKTsKKyAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IG9wdF9pbl9hbHRlcm5h
dGVDb2xvcnMgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRBcnJheShwYXJhbWV0ZXJzLmdldCgp
LCBBU0NJSUxpdGVyYWwoImFsdGVybmF0ZUNvbG9ycyIpLCAmb3B0X2luX2FsdGVybmF0ZUNvbG9y
c192YWx1ZUZvdW5kKTsKICAgICBib29sIG9wdF9pbl9wcmludENvbG9yX3ZhbHVlRm91bmQgPSBm
YWxzZTsKICAgICBTdHJpbmcgb3B0X2luX3ByaW50Q29sb3IgPSBtX2JhY2tlbmREaXNwYXRjaGVy
LT5nZXRTdHJpbmcocGFyYW1ldGVycy5nZXQoKSwgQVNDSUlMaXRlcmFsKCJwcmludENvbG9yIiks
ICZvcHRfaW5fcHJpbnRDb2xvcl92YWx1ZUZvdW5kKTsKICAgICBpZiAobV9iYWNrZW5kRGlzcGF0
Y2hlci0+aGFzUHJvdG9jb2xFcnJvcnMoKSkgewpAQCAtMjkyLDggKzI5Miw4IEBAIHZvaWQgRGF0
YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhsb25n
IHJlcXVlc3RJZCwgUmVmCiAgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0
cmluZz4+IG91dF9jb2x1bW5OYW1lczsKICAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRw
dXQ8U3RyaW5nPiBvdXRfbm90ZXM7CiAgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0
PGRvdWJsZT4gb3V0X3RpbWVzdGFtcDsKLSAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRw
dXQ8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IG91dF92YWx1ZXM7Ci0gICAgSW5zcGVjdG9y
OjpQcm90b2NvbDo6T3B0T3V0cHV0PEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+IG91dF9wYXls
b2FkOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxKU09OOjpPYmplY3Q+IG91
dF92YWx1ZXM7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PEpTT046OlZhbHVl
PiBvdXRfcGF5bG9hZDsKICAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8SW5zcGVj
dG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkRhdGFiYXNlSWQ+IG91dF9kYXRhYmFzZUlkOwogICAg
IFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IG91dF9zcWxFcnJv
cjsKICAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyBvdXRf
c2NyZWVuQ29sb3I7CkBAIC0zMzEsMTUgKzMzMSwxNSBAQCB2b2lkIERhdGFiYXNlQmFja2VuZERp
c3BhdGNoZXI6OmV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMobG9uZyByZXF1ZXN0SWQsIFJl
ZgogCiB2b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVOb09wdGlvbmFsUGFy
YW1ldGVycyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBwYXJhbWV0
ZXJzKQogewotICAgIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5PiBpbl9jb2x1bW5O
YW1lcyA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldEFycmF5KHBhcmFtZXRlcnMuZ2V0KCksIEFT
Q0lJTGl0ZXJhbCgiY29sdW1uTmFtZXMiKSwgbnVsbHB0cik7CisgICAgUmVmUHRyPEpTT046OkFy
cmF5PiBpbl9jb2x1bW5OYW1lcyA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldEFycmF5KHBhcmFt
ZXRlcnMuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgiY29sdW1uTmFtZXMiKSwgbnVsbHB0cik7CiAgICAg
U3RyaW5nIGluX25vdGVzID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3RyaW5nKHBhcmFtZXRl
cnMuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgibm90ZXMiKSwgbnVsbHB0cik7CiAgICAgZG91YmxlIGlu
X3RpbWVzdGFtcCA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldERvdWJsZShwYXJhbWV0ZXJzLmdl
dCgpLCBBU0NJSUxpdGVyYWwoInRpbWVzdGFtcCIpLCBudWxscHRyKTsKLSAgICBSZWZQdHI8SW5z
cGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IGluX3ZhbHVlcyA9IG1fYmFja2VuZERpc3BhdGNoZXIt
PmdldE9iamVjdChwYXJhbWV0ZXJzLmdldCgpLCBBU0NJSUxpdGVyYWwoInZhbHVlcyIpLCBudWxs
cHRyKTsKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4gaW5fcGF5bG9hZCA9
IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFZhbHVlKHBhcmFtZXRlcnMuZ2V0KCksIEFTQ0lJTGl0
ZXJhbCgicGF5bG9hZCIpLCBudWxscHRyKTsKKyAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBpbl92
YWx1ZXMgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRPYmplY3QocGFyYW1ldGVycy5nZXQoKSwg
QVNDSUlMaXRlcmFsKCJ2YWx1ZXMiKSwgbnVsbHB0cik7CisgICAgUmVmUHRyPEpTT046OlZhbHVl
PiBpbl9wYXlsb2FkID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0VmFsdWUocGFyYW1ldGVycy5n
ZXQoKSwgQVNDSUlMaXRlcmFsKCJwYXlsb2FkIiksIG51bGxwdHIpOwogICAgIGludCBpbl9kYXRh
YmFzZUlkID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0SW50ZWdlcihwYXJhbWV0ZXJzLmdldCgp
LCBBU0NJSUxpdGVyYWwoImRhdGFiYXNlSWQiKSwgbnVsbHB0cik7Ci0gICAgUmVmUHRyPEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBpbl9zcWxFcnJvciA9IG1fYmFja2VuZERpc3BhdGNoZXIt
PmdldE9iamVjdChwYXJhbWV0ZXJzLmdldCgpLCBBU0NJSUxpdGVyYWwoInNxbEVycm9yIiksIG51
bGxwdHIpOworICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IGluX3NxbEVycm9yID0gbV9iYWNrZW5k
RGlzcGF0Y2hlci0+Z2V0T2JqZWN0KHBhcmFtZXRlcnMuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgic3Fs
RXJyb3IiKSwgbnVsbHB0cik7CiAgICAgU3RyaW5nIGluX3NjcmVlbkNvbG9yID0gbV9iYWNrZW5k
RGlzcGF0Y2hlci0+Z2V0U3RyaW5nKHBhcmFtZXRlcnMuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgic2Ny
ZWVuQ29sb3IiKSwgbnVsbHB0cik7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJy
YXk+IGluX2FsdGVybmF0ZUNvbG9ycyA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldEFycmF5KHBh
cmFtZXRlcnMuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgiYWx0ZXJuYXRlQ29sb3JzIiksIG51bGxwdHIp
OworICAgIFJlZlB0cjxKU09OOjpBcnJheT4gaW5fYWx0ZXJuYXRlQ29sb3JzID0gbV9iYWNrZW5k
RGlzcGF0Y2hlci0+Z2V0QXJyYXkocGFyYW1ldGVycy5nZXQoKSwgQVNDSUlMaXRlcmFsKCJhbHRl
cm5hdGVDb2xvcnMiKSwgbnVsbHB0cik7CiAgICAgU3RyaW5nIGluX3ByaW50Q29sb3IgPSBtX2Jh
Y2tlbmREaXNwYXRjaGVyLT5nZXRTdHJpbmcocGFyYW1ldGVycy5nZXQoKSwgQVNDSUlMaXRlcmFs
KCJwcmludENvbG9yIiksIG51bGxwdHIpOwogICAgIGlmIChtX2JhY2tlbmREaXNwYXRjaGVyLT5o
YXNQcm90b2NvbEVycm9ycygpKSB7CiAgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9y
dFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OkludmFsaWRQYXJhbXMsIFN0cmluZzo6
Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQi
LCAiRGF0YWJhc2UuZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzIikpOwpAQCAtMzU4LDggKzM1
OCw4IEBAIHZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZU5vT3B0aW9uYWxQ
YXJhbWV0ZXJzKGxvbmcgcmVxdWVzdElkLCBSZWZQCiAgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkFycmF5PFN0cmluZz4+IG91dF9jb2x1bW5OYW1lczsKICAgICBTdHJpbmcgb3V0X25v
dGVzOwogICAgIGRvdWJsZSBvdXRfdGltZXN0YW1wOwotICAgIEluc3BlY3Rvcjo6SW5zcGVjdG9y
T2JqZWN0IG91dF92YWx1ZXM7Ci0gICAgSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSBvdXRfcGF5
bG9hZDsKKyAgICBKU09OOjpPYmplY3Qgb3V0X3ZhbHVlczsKKyAgICBKU09OOjpWYWx1ZSBvdXRf
cGF5bG9hZDsKICAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RGF0YWJhc2VJZCBv
dXRfZGF0YWJhc2VJZDsKICAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6
OkVycm9yPiBvdXRfc3FsRXJyb3I7CiAgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6
OlByaW1hcnlDb2xvcnMgb3V0X3NjcmVlbkNvbG9yOwpAQCAtNTUzLDcgKzU1Myw3IEBAIGVudW0g
Y2xhc3MgUHJpbWFyeUNvbG9ycyB7CiAgICAgQmx1ZSA9IDIsCiB9OyAvLyBlbnVtIGNsYXNzIFBy
aW1hcnlDb2xvcnMKIC8qIERhdGFiYXNlIGVycm9yLiAqLwotY2xhc3MgRXJyb3IgOiBwdWJsaWMg
SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3RCYXNlIHsKK2NsYXNzIEVycm9yIDogcHVibGljIEpT
T046Ok9iamVjdEJhc2UgewogcHVibGljOgogICAgIGVudW0gewogICAgICAgICBOb0ZpZWxkc1Nl
dCA9IDAsCkBAIC01NjUsMTQgKzU2NSwxNCBAQCBwdWJsaWM6CiAgICAgdGVtcGxhdGU8aW50IFNU
QVRFPgogICAgIGNsYXNzIEJ1aWxkZXIgewogICAgIHByaXZhdGU6Ci0gICAgICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OworICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBt
X3Jlc3VsdDsKIAogICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNU
RVA+JiBjYXN0U3RhdGUoKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJw
cmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgIH0KIAotICAg
ICAgICBCdWlsZGVyKFJlZjwvKkVycm9yKi9JbnNwZWN0b3JPYmplY3Q+JiYgb2JqZWN0KQorICAg
ICAgICBCdWlsZGVyKFJlZjwvKkVycm9yKi9KU09OOjpPYmplY3Q+JiYgb2JqZWN0KQogICAgICAg
ICAgICAgOiBtX3Jlc3VsdChXVEZNb3ZlKG9iamVjdCkpCiAgICAgICAgIHsKICAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5f
bm9uX2luaXRfc3RhdGUpOwpAQCAtNTk3LDkgKzU5Nyw5IEBAIHB1YmxpYzoKICAgICAgICAgUmVm
PEVycm9yPiByZWxlYXNlKCkKICAgICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
U1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKLSAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKHNpemVvZihFcnJvcikgPT0gc2l6ZW9mKEluc3BlY3Rvck9iamVjdCks
IGNhbm5vdF9jYXN0KTsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihFcnJvcikg
PT0gc2l6ZW9mKEpTT046Ok9iamVjdCksIGNhbm5vdF9jYXN0KTsKIAotICAgICAgICAgICAgUmVm
PEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKKyAg
ICAgICAgICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VOb25O
dWxsKCk7CiAgICAgICAgICAgICByZXR1cm4gV1RGTW92ZSgqcmVpbnRlcnByZXRfY2FzdDxSZWY8
RXJyb3I+Kj4oJnJlc3VsdCkpOwogICAgICAgICB9CiAgICAgfTsKQEAgLTYxMyw3ICs2MTMsNyBA
QCBwdWJsaWM6CiAgICAgICovCiAgICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0
ZSgpCiAgICAgewotICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKSk7CisgICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihK
U09OOjpPYmplY3Q6OmNyZWF0ZSgpKTsKICAgICB9CiB9OwogCkBAIC03NjMsOCArNzYzLDggQEAg
bmFtZXNwYWNlIEluc3BlY3RvciB7CiBjbGFzcyBPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5k
RGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBBbHRlcm5hdGVEYXRhYmFzZUJhY2tlbmREaXNwYXRj
aGVyIHsKIHB1YmxpYzoKICAgICBPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hl
cihpZDxUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkhhbmRsZXI+IGhhbmRsZXIpIHsgbV9kZWxl
Z2F0ZSA9IGhhbmRsZXI7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZUFsbE9wdGlvbmFsUGFy
YW1ldGVycyhsb25nIHJlcXVlc3RJZCwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheSog
aW5fY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyogY29uc3QgaW5fbm90ZXMsIGNvbnN0IGRvdWJs
ZSogY29uc3QgaW5fdGltZXN0YW1wLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCog
aW5fdmFsdWVzLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlKiBjb25zdCBpbl9wYXls
b2FkLCBjb25zdCBpbnQqIGNvbnN0IGluX2RhdGFiYXNlSWQsIGNvbnN0IEluc3BlY3Rvcjo6SW5z
cGVjdG9yT2JqZWN0KiBpbl9zcWxFcnJvciwgY29uc3QgU3RyaW5nKiBjb25zdCBpbl9zY3JlZW5D
b2xvciwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheSogaW5fYWx0ZXJuYXRlQ29sb3Jz
LCBjb25zdCBTdHJpbmcqIGNvbnN0IGluX3ByaW50Q29sb3IpIG92ZXJyaWRlOwotICAgIHZpcnR1
YWwgdm9pZCBleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMobG9uZyByZXF1ZXN0SWQsIGNvbnN0
IEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXkmIGluX2NvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcm
IGluX25vdGVzLCBkb3VibGUgaW5fdGltZXN0YW1wLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3Rv
ck9iamVjdCYgaW5fdmFsdWVzLCBJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlIGluX3BheWxvYWQs
IGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCYgaW5f
c3FsRXJyb3IsIGNvbnN0IFN0cmluZyYgaW5fc2NyZWVuQ29sb3IsIGNvbnN0IEluc3BlY3Rvcjo6
SW5zcGVjdG9yQXJyYXkmIGluX2FsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nJiBpbl9wcmlu
dENvbG9yKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZUFsbE9wdGlvbmFsUGFy
YW1ldGVycyhsb25nIHJlcXVlc3RJZCwgY29uc3QgSlNPTjo6QXJyYXkqIGluX2NvbHVtbk5hbWVz
LCBjb25zdCBTdHJpbmcqIGNvbnN0IGluX25vdGVzLCBjb25zdCBkb3VibGUqIGNvbnN0IGluX3Rp
bWVzdGFtcCwgY29uc3QgSlNPTjo6T2JqZWN0KiBpbl92YWx1ZXMsIGNvbnN0IEpTT046OlZhbHVl
KiBjb25zdCBpbl9wYXlsb2FkLCBjb25zdCBpbnQqIGNvbnN0IGluX2RhdGFiYXNlSWQsIGNvbnN0
IEpTT046Ok9iamVjdCogaW5fc3FsRXJyb3IsIGNvbnN0IFN0cmluZyogY29uc3QgaW5fc2NyZWVu
Q29sb3IsIGNvbnN0IEpTT046OkFycmF5KiBpbl9hbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmlu
ZyogY29uc3QgaW5fcHJpbnRDb2xvcikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGV4ZWN1
dGVOb09wdGlvbmFsUGFyYW1ldGVycyhsb25nIHJlcXVlc3RJZCwgY29uc3QgSlNPTjo6QXJyYXkm
IGluX2NvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIGluX25vdGVzLCBkb3VibGUgaW5fdGltZXN0
YW1wLCBjb25zdCBKU09OOjpPYmplY3QmIGluX3ZhbHVlcywgSlNPTjo6VmFsdWUgaW5fcGF5bG9h
ZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IEpTT046Ok9iamVjdCYgaW5fc3FsRXJyb3IsIGNv
bnN0IFN0cmluZyYgaW5fc2NyZWVuQ29sb3IsIGNvbnN0IEpTT046OkFycmF5JiBpbl9hbHRlcm5h
dGVDb2xvcnMsIGNvbnN0IFN0cmluZyYgaW5fcHJpbnRDb2xvcikgb3ZlcnJpZGU7CiBwcml2YXRl
OgogICAgIFJldGFpblB0cjxpZDxUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkhhbmRsZXI+PiBt
X2RlbGVnYXRlOwogfTsKQEAgLTgxMyw3ICs4MTMsNyBAQCBwcml2YXRlOgogCiBuYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKIAotdm9pZCBPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hl
cjo6ZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhsb25nIHJlcXVlc3RJZCwgY29uc3QgSW5z
cGVjdG9yOjpJbnNwZWN0b3JBcnJheSogaW5fY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyogY29u
c3QgaW5fbm90ZXMsIGNvbnN0IGRvdWJsZSogY29uc3QgaW5fdGltZXN0YW1wLCBjb25zdCBJbnNw
ZWN0b3I6Okluc3BlY3Rvck9iamVjdCogaW5fdmFsdWVzLCBjb25zdCBJbnNwZWN0b3I6Okluc3Bl
Y3RvclZhbHVlKiBjb25zdCBpbl9wYXlsb2FkLCBjb25zdCBpbnQqIGNvbnN0IGluX2RhdGFiYXNl
SWQsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0KiBpbl9zcWxFcnJvciwgY29uc3Qg
U3RyaW5nKiBjb25zdCBpbl9zY3JlZW5Db2xvciwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JB
cnJheSogaW5fYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcqIGNvbnN0IGluX3ByaW50Q29s
b3IpCit2b2lkIE9iakNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRl
QWxsT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgcmVxdWVzdElkLCBjb25zdCBKU09OOjpBcnJheSog
aW5fY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyogY29uc3QgaW5fbm90ZXMsIGNvbnN0IGRvdWJs
ZSogY29uc3QgaW5fdGltZXN0YW1wLCBjb25zdCBKU09OOjpPYmplY3QqIGluX3ZhbHVlcywgY29u
c3QgSlNPTjo6VmFsdWUqIGNvbnN0IGluX3BheWxvYWQsIGNvbnN0IGludCogY29uc3QgaW5fZGF0
YWJhc2VJZCwgY29uc3QgSlNPTjo6T2JqZWN0KiBpbl9zcWxFcnJvciwgY29uc3QgU3RyaW5nKiBj
b25zdCBpbl9zY3JlZW5Db2xvciwgY29uc3QgSlNPTjo6QXJyYXkqIGluX2FsdGVybmF0ZUNvbG9y
cywgY29uc3QgU3RyaW5nKiBjb25zdCBpbl9wcmludENvbG9yKQogewogICAgIGlkIGVycm9yQ2Fs
bGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgewogICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigp
LT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZl
ckVycm9yLCBlcnJvcik7CkBAIC04ODUsNyArODg1LDcgQEAgdm9pZCBPYmpDSW5zcGVjdG9yRGF0
YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhsb25n
IHIKICAgICBbbV9kZWxlZ2F0ZSBleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzV2l0aEVycm9y
Q2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrIGNv
bHVtbk5hbWVzOihpbl9jb2x1bW5OYW1lcyA/ICZvX2luX2NvbHVtbk5hbWVzIDogbmlsKSBub3Rl
czooaW5fbm90ZXMgPyAmb19pbl9ub3RlcyA6IG5pbCkgdGltZXN0YW1wOihpbl90aW1lc3RhbXAg
PyAmb19pbl90aW1lc3RhbXAgOiBuaWwpIHZhbHVlczooaW5fdmFsdWVzID8gJm9faW5fdmFsdWVz
IDogbmlsKSBwYXlsb2FkOihpbl9wYXlsb2FkID8gJm9faW5fcGF5bG9hZCA6IG5pbCkgZGF0YWJh
c2VJZDooaW5fZGF0YWJhc2VJZCA/ICZvX2luX2RhdGFiYXNlSWQgOiBuaWwpIHNxbEVycm9yOihp
bl9zcWxFcnJvciA/ICZvX2luX3NxbEVycm9yIDogbmlsKSBzY3JlZW5Db2xvcjooaW5fc2NyZWVu
Q29sb3IgPyAmb19pbl9zY3JlZW5Db2xvciA6IG5pbCkgYWx0ZXJuYXRlQ29sb3JzOihpbl9hbHRl
cm5hdGVDb2xvcnMgPyAmb19pbl9hbHRlcm5hdGVDb2xvcnMgOiBuaWwpIHByaW50Q29sb3I6KGlu
X3ByaW50Q29sb3IgPyAmb19pbl9wcmludENvbG9yIDogbmlsKV07CiB9CiAKLXZvaWQgT2JqQ0lu
c3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVOb09wdGlvbmFsUGFyYW1l
dGVycyhsb25nIHJlcXVlc3RJZCwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheSYgaW5f
Y29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgaW5fbm90ZXMsIGRvdWJsZSBpbl90aW1lc3RhbXAs
IGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0JiBpbl92YWx1ZXMsIEluc3BlY3Rvcjo6
SW5zcGVjdG9yVmFsdWUgaW5fcGF5bG9hZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yT2JqZWN0JiBpbl9zcWxFcnJvciwgY29uc3QgU3RyaW5nJiBpbl9zY3Jl
ZW5Db2xvciwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheSYgaW5fYWx0ZXJuYXRlQ29s
b3JzLCBjb25zdCBTdHJpbmcmIGluX3ByaW50Q29sb3IpCit2b2lkIE9iakNJbnNwZWN0b3JEYXRh
YmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMobG9uZyBy
ZXF1ZXN0SWQsIGNvbnN0IEpTT046OkFycmF5JiBpbl9jb2x1bW5OYW1lcywgY29uc3QgU3RyaW5n
JiBpbl9ub3RlcywgZG91YmxlIGluX3RpbWVzdGFtcCwgY29uc3QgSlNPTjo6T2JqZWN0JiBpbl92
YWx1ZXMsIEpTT046OlZhbHVlIGluX3BheWxvYWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBK
U09OOjpPYmplY3QmIGluX3NxbEVycm9yLCBjb25zdCBTdHJpbmcmIGluX3NjcmVlbkNvbG9yLCBj
b25zdCBKU09OOjpBcnJheSYgaW5fYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcmIGluX3By
aW50Q29sb3IpCiB7CiAgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7
CiAgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVz
dElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4
cGVjdGVkL2RvbWFpbi1hdmFpbGFiaWxpdHkuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9kb21haW4tYXZh
aWxhYmlsaXR5Lmpzb24tcmVzdWx0CmluZGV4IDgyZTc4OTgwODQ1Li4zNjEwMjFlYTU3ZCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dl
bmVyaWMvZXhwZWN0ZWQvZG9tYWluLWF2YWlsYWJpbGl0eS5qc29uLXJlc3VsdAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3Rl
ZC9kb21haW4tYXZhaWxhYmlsaXR5Lmpzb24tcmVzdWx0CkBAIC0xNjcsNyArMTY3LDcgQEAgcHJv
dGVjdGVkOgogY2xhc3MgRG9tYWluQUJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIFN1
cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPERv
bWFpbkFCYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiwgRG9tYWlu
QUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwotICAgIHZvaWQgZGlzcGF0Y2gobG9uZyByZXF1
ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SW5zcGVjdG9yT2JqZWN0PiYmIG1lc3Nh
Z2UpIG92ZXJyaWRlOworICAgIHZvaWQgZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0
cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpIG92ZXJyaWRlOwogcHJp
dmF0ZToKICAgICB2b2lkIGVuYWJsZShsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4mJiBwYXJhbWV0ZXJzKTsKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQ
QVRDSEVSUykKQEAgLTE4NCw3ICsxODQsNyBAQCBwcml2YXRlOgogY2xhc3MgRG9tYWluQkJhY2tl
bmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVy
IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPERvbWFpbkJCYWNrZW5kRGlzcGF0Y2hlcj4gY3Jl
YXRlKEJhY2tlbmREaXNwYXRjaGVyJiwgRG9tYWluQkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciop
OwotICAgIHZvaWQgZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9k
LCBSZWY8SW5zcGVjdG9yT2JqZWN0PiYmIG1lc3NhZ2UpIG92ZXJyaWRlOworICAgIHZvaWQgZGlz
cGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2Jq
ZWN0PiYmIG1lc3NhZ2UpIG92ZXJyaWRlOwogcHJpdmF0ZToKICAgICB2b2lkIGVuYWJsZShsb25n
IHJlcXVlc3RJZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKICNpZiBF
TkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKQEAgLTI2MSwxMSArMjYxLDEx
IEBAIERvbWFpbkFCYWNrZW5kRGlzcGF0Y2hlcjo6RG9tYWluQUJhY2tlbmREaXNwYXRjaGVyKEJh
Y2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzCiAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVn
aXN0ZXJEaXNwYXRjaGVyRm9yRG9tYWluKEFTQ0lJTGl0ZXJhbCgiRG9tYWluQSIpLCB0aGlzKTsK
IH0KIAotdm9pZCBEb21haW5BQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVz
dElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEluc3BlY3Rvck9iamVjdD4mJiBtZXNzYWdl
KQordm9pZCBEb21haW5BQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElk
LCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKQogewog
ICAgIFJlZjxEb21haW5BQmFja2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOwogCi0gICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1ldGVyczsKKyAgICBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiBwYXJhbWV0ZXJzOwogICAgIG1lc3NhZ2UtPmdldE9iamVjdChBU0NJSUxpdGVyYWwoInBh
cmFtcyIpLCBwYXJhbWV0ZXJzKTsKIAogICAgIGlmIChtZXRob2QgPT0gImVuYWJsZSIpCkBAIC0z
MDUsMTEgKzMwNSwxMSBAQCBEb21haW5CQmFja2VuZERpc3BhdGNoZXI6OkRvbWFpbkJCYWNrZW5k
RGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpcwogICAgIG1fYmFja2VuZERp
c3BhdGNoZXItPnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbihBU0NJSUxpdGVyYWwoIkRvbWFp
bkIiKSwgdGhpcyk7CiB9CiAKLXZvaWQgRG9tYWluQkJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRj
aChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxJbnNwZWN0b3JPYmpl
Y3Q+JiYgbWVzc2FnZSkKK3ZvaWQgRG9tYWluQkJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChs
b25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYg
bWVzc2FnZSkKIHsKICAgICBSZWY8RG9tYWluQkJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0
aGlzKTsKIAotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtZXRlcnM7CisgICAgUmVm
UHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVyczsKICAgICBtZXNzYWdlLT5nZXRPYmplY3QoQVND
SUlMaXRlcmFsKCJwYXJhbXMiKSwgcGFyYW1ldGVycyk7CiAKICAgICBpZiAobWV0aG9kID09ICJl
bmFibGUiKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1z
aXplcy5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2RvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6
ZXMuanNvbi1yZXN1bHQKaW5kZXggYWY4OTM2ZmQ3ZjcuLjZmNGIyNzE4MThkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9l
eHBlY3RlZC9kb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24tcmVzdWx0Cisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmlj
L2V4cGVjdGVkL2RvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbi1yZXN1bHQK
QEAgLTE4NSw3ICsxODUsNyBAQCBwcm90ZWN0ZWQ6CiBjbGFzcyBOZXR3b3JrMUJhY2tlbmREaXNw
YXRjaGVyIGZpbmFsIDogcHVibGljIFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyIHsKIHB1
YmxpYzoKICAgICBzdGF0aWMgUmVmPE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShC
YWNrZW5kRGlzcGF0Y2hlciYsIE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7Ci0g
ICAgdm9pZCBkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJl
ZjxJbnNwZWN0b3JPYmplY3Q+JiYgbWVzc2FnZSkgb3ZlcnJpZGU7CisgICAgdm9pZCBkaXNwYXRj
aChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+
JiYgbWVzc2FnZSkgb3ZlcnJpZGU7CiBwcml2YXRlOgogICAgIHZvaWQgbG9hZFJlc291cmNlMShs
b25nIHJlcXVlc3RJZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKICNp
ZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKQEAgLTIwMiw3ICsyMDIs
NyBAQCBwcml2YXRlOgogY2xhc3MgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1
YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7CiBwdWJsaWM6CiAgICAgc3RhdGlj
IFJlZjxOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyPiBjcmVhdGUoQmFja2VuZERpc3BhdGNoZXIm
LCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwotICAgIHZvaWQgZGlzcGF0Y2go
bG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SW5zcGVjdG9yT2JqZWN0
PiYmIG1lc3NhZ2UpIG92ZXJyaWRlOworICAgIHZvaWQgZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQs
IGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpIG92ZXJy
aWRlOwogcHJpdmF0ZToKICAgICB2b2lkIGxvYWRSZXNvdXJjZTEobG9uZyByZXF1ZXN0SWQsIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgcGFyYW1ldGVycyk7CiAgICAgdm9pZCBsb2FkUmVzb3Vy
Y2UyKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIHBhcmFtZXRlcnMp
OwpAQCAtMjg1LDExICsyODUsMTEgQEAgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6TmV0d29y
azFCYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZEQKICAgICBtX2Jh
Y2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4oQVNDSUlMaXRlcmFs
KCJOZXR3b3JrMSIpLCB0aGlzKTsKIH0KIAotdm9pZCBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVy
OjpkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxJbnNw
ZWN0b3JPYmplY3Q+JiYgbWVzc2FnZSkKK3ZvaWQgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6
ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6
T2JqZWN0PiYmIG1lc3NhZ2UpCiB7CiAgICAgUmVmPE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI+
IHByb3RlY3QoKnRoaXMpOwogCi0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1ldGVy
czsKKyAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzOwogICAgIG1lc3NhZ2UtPmdl
dE9iamVjdChBU0NJSUxpdGVyYWwoInBhcmFtcyIpLCBwYXJhbWV0ZXJzKTsKIAogICAgIGlmICht
ZXRob2QgPT0gImxvYWRSZXNvdXJjZTEiKQpAQCAtMzI5LDE0ICszMjksMTQgQEAgTmV0d29yazNC
YWNrZW5kRGlzcGF0Y2hlcjo6TmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0
Y2hlciYgYmFja2VuZEQKICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNo
ZXJGb3JEb21haW4oQVNDSUlMaXRlcmFsKCJOZXR3b3JrMyIpLCB0aGlzKTsKIH0KIAotdm9pZCBO
ZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3Qg
U3RyaW5nJiBtZXRob2QsIFJlZjxJbnNwZWN0b3JPYmplY3Q+JiYgbWVzc2FnZSkKK3ZvaWQgTmV0
d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0
cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpCiB7CiAgICAgUmVmPE5l
dHdvcmszQmFja2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOwogCi0gICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gcGFyYW1ldGVyczsKKyAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJh
bWV0ZXJzOwogICAgIG1lc3NhZ2UtPmdldE9iamVjdChBU0NJSUxpdGVyYWwoInBhcmFtcyIpLCBw
YXJhbWV0ZXJzKTsKIAotICAgIHR5cGVkZWYgdm9pZCAoTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hl
cjo6KkNhbGxIYW5kbGVyKShsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4m
JiBtZXNzYWdlKTsKKyAgICB0eXBlZGVmIHZvaWQgKE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6
OipDYWxsSGFuZGxlcikobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgbWVz
c2FnZSk7CiAgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgQ2FsbEhhbmRsZXI+IERpc3BhdGNo
TWFwOwogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxEaXNwYXRjaE1hcD4gZGlzcGF0Y2hNYXA7
CiAgICAgaWYgKGRpc3BhdGNoTWFwLmdldCgpLmlzRW1wdHkoKSkgewpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0
ZWQvZW51bS12YWx1ZXMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9lbnVtLXZhbHVlcy5qc29uLXJlc3Vs
dAppbmRleCBkZjkxMjdhMjJmOS4uMWUxYTlmMmNmZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2VudW0t
dmFsdWVzLmpzb24tcmVzdWx0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2VudW0tdmFsdWVzLmpzb24tcmVzdWx0CkBA
IC0xNjcsNyArMTY3LDcgQEAgcHJvdGVjdGVkOgogY2xhc3MgQ29tbWFuZERvbWFpbkJhY2tlbmRE
aXNwYXRjaGVyIGZpbmFsIDogcHVibGljIFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyIHsK
IHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4g
Y3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiwgQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVy
SGFuZGxlciopOwotICAgIHZvaWQgZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmlu
ZyYgbWV0aG9kLCBSZWY8SW5zcGVjdG9yT2JqZWN0PiYmIG1lc3NhZ2UpIG92ZXJyaWRlOworICAg
IHZvaWQgZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8
SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpIG92ZXJyaWRlOwogcHJpdmF0ZToKICAgICB2b2lkIGNv
bW1hbmRXaXRoRW51bVJldHVyblZhbHVlKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiYmIHBhcmFtZXRlcnMpOwogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJ
U1BBVENIRVJTKQpAQCAtMjQzLDExICsyNDMsMTEgQEAgQ29tbWFuZERvbWFpbkJhY2tlbmREaXNw
YXRjaGVyOjpDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXIK
ICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4oQVND
SUlMaXRlcmFsKCJDb21tYW5kRG9tYWluIiksIHRoaXMpOwogfQogCi12b2lkIENvbW1hbmREb21h
aW5CYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmlu
ZyYgbWV0aG9kLCBSZWY8SW5zcGVjdG9yT2JqZWN0PiYmIG1lc3NhZ2UpCit2b2lkIENvbW1hbmRE
b21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0
cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpCiB7CiAgICAgUmVmPENv
bW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7CiAKLSAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbWV0ZXJzOworICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+
IHBhcmFtZXRlcnM7CiAgICAgbWVzc2FnZS0+Z2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgicGFyYW1z
IiksIHBhcmFtZXRlcnMpOwogCiAgICAgaWYgKG1ldGhvZCA9PSAiY29tbWFuZFdpdGhFbnVtUmV0
dXJuVmFsdWUiKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1l
dGVycy5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2V2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMu
anNvbi1yZXN1bHQKaW5kZXggODJjYjEyMmFiNTIuLmZmYjlmZTQxOThiIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBl
Y3RlZC9ldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0CisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVj
dGVkL2V2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbi1yZXN1bHQKQEAgLTIzNCw4
ICsyMzQsOCBAQCBjbGFzcyBGcm9udGVuZFJvdXRlcjsKIGNsYXNzIERhdGFiYXNlRnJvbnRlbmRE
aXNwYXRjaGVyIHsKIHB1YmxpYzoKICAgICBEYXRhYmFzZUZyb250ZW5kRGlzcGF0Y2hlcihGcm9u
dGVuZFJvdXRlciYgZnJvbnRlbmRSb3V0ZXIpIDogbV9mcm9udGVuZFJvdXRlcihmcm9udGVuZFJv
dXRlcikgeyB9Ci0gICAgdm9pZCBkaWRFeGVjdXRlT3B0aW9uYWxQYXJhbWV0ZXJzKFJlZlB0cjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+PiBjb2x1bW5OYW1lcywgY29uc3QgU3Ry
aW5nKiBjb25zdCBub3RlcywgY29uc3QgZG91YmxlKiBjb25zdCB0aW1lc3RhbXAsIFJlZlB0cjxJ
bnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gdmFsdWVzLCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNw
ZWN0b3JWYWx1ZT4gcGF5bG9hZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNl
OjpFcnJvcj4gc3FsRXJyb3IsIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQ
cmltYXJ5Q29sb3JzKiBjb25zdCBzY3JlZW5Db2xvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+IGFsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nKiBj
b25zdCBwcmludENvbG9yKTsKLSAgICB2b2lkIGRpZEV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVy
cyhSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPj4gY29sdW1uTmFtZXMs
IGNvbnN0IFN0cmluZyYgbm90ZXMsIGRvdWJsZSB0aW1lc3RhbXAsIFJlZlB0cjxJbnNwZWN0b3I6
Okluc3BlY3Rvck9iamVjdD4gdmFsdWVzLCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1
ZT4gcGF5bG9hZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4g
c3FsRXJyb3IsIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29s
b3JzJiBzY3JlZW5Db2xvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpD
b2xvckxpc3Q+IGFsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nJiBwcmludENvbG9yKTsKKyAg
ICB2b2lkIGRpZEV4ZWN1dGVPcHRpb25hbFBhcmFtZXRlcnMoUmVmUHRyPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkFycmF5PFN0cmluZz4+IGNvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcqIGNvbnN0IG5v
dGVzLCBjb25zdCBkb3VibGUqIGNvbnN0IHRpbWVzdGFtcCwgUmVmUHRyPEpTT046Ok9iamVjdD4g
dmFsdWVzLCBSZWZQdHI8SlNPTjo6VmFsdWU+IHBheWxvYWQsIFJlZlB0cjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IHNxbEVycm9yLCBjb25zdCBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyogY29uc3Qgc2NyZWVuQ29sb3IsIFJlZlB0cjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiBhbHRlcm5hdGVDb2xvcnMs
IGNvbnN0IFN0cmluZyogY29uc3QgcHJpbnRDb2xvcik7CisgICAgdm9pZCBkaWRFeGVjdXRlTm9P
cHRpb25hbFBhcmFtZXRlcnMoUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmlu
Zz4+IGNvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIG5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBS
ZWZQdHI8SlNPTjo6T2JqZWN0PiB2YWx1ZXMsIFJlZlB0cjxKU09OOjpWYWx1ZT4gcGF5bG9hZCwg
UmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4gc3FsRXJyb3IsIGNv
bnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzJiBzY3JlZW5D
b2xvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+IGFs
dGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nJiBwcmludENvbG9yKTsKIHByaXZhdGU6CiAgICAg
RnJvbnRlbmRSb3V0ZXImIG1fZnJvbnRlbmRSb3V0ZXI7CiB9OwpAQCAtMjgyLDcgKzI4Miw3IEBA
IHByaXZhdGU6CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCi12b2lkIERhdGFiYXNlRnJvbnRl
bmREaXNwYXRjaGVyOjpkaWRFeGVjdXRlT3B0aW9uYWxQYXJhbWV0ZXJzKFJlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+PiBjb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nKiBj
b25zdCBub3RlcywgY29uc3QgZG91YmxlKiBjb25zdCB0aW1lc3RhbXAsIFJlZlB0cjxJbnNwZWN0
b3I6Okluc3BlY3Rvck9iamVjdD4gdmFsdWVzLCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JW
YWx1ZT4gcGF5bG9hZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJv
cj4gc3FsRXJyb3IsIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5
Q29sb3JzKiBjb25zdCBzY3JlZW5Db2xvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRh
dGFiYXNlOjpDb2xvckxpc3Q+IGFsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nKiBjb25zdCBw
cmludENvbG9yKQordm9pZCBEYXRhYmFzZUZyb250ZW5kRGlzcGF0Y2hlcjo6ZGlkRXhlY3V0ZU9w
dGlvbmFsUGFyYW1ldGVycyhSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5n
Pj4gY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyogY29uc3Qgbm90ZXMsIGNvbnN0IGRvdWJsZSog
Y29uc3QgdGltZXN0YW1wLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiB2YWx1ZXMsIFJlZlB0cjxKU09O
OjpWYWx1ZT4gcGF5bG9hZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpF
cnJvcj4gc3FsRXJyb3IsIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmlt
YXJ5Q29sb3JzKiBjb25zdCBzY3JlZW5Db2xvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRhdGFiYXNlOjpDb2xvckxpc3Q+IGFsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nKiBjb25z
dCBwcmludENvbG9yKQogewogICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IGpzb25NZXNzYWdlID0g
SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKEFT
Q0lJTGl0ZXJhbCgibWV0aG9kIiksIEFTQ0lJTGl0ZXJhbCgiRGF0YWJhc2UuZGlkRXhlY3V0ZU9w
dGlvbmFsUGFyYW1ldGVycyIpKTsKQEAgLTMxMCw3ICszMTAsNyBAQCB2b2lkIERhdGFiYXNlRnJv
bnRlbmREaXNwYXRjaGVyOjpkaWRFeGVjdXRlT3B0aW9uYWxQYXJhbWV0ZXJzKFJlZlB0cjxJbnNw
ZWN0b3I6OgogICAgIG1fZnJvbnRlbmRSb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pT
T05TdHJpbmcoKSk7CiB9CiAKLXZvaWQgRGF0YWJhc2VGcm9udGVuZERpc3BhdGNoZXI6OmRpZEV4
ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJy
YXk8U3RyaW5nPj4gY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgbm90ZXMsIGRvdWJsZSB0aW1l
c3RhbXAsIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gdmFsdWVzLCBSZWZQdHI8
SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4gcGF5bG9hZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4gc3FsRXJyb3IsIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzJiBzY3JlZW5Db2xvciwgUmVmUHRyPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+IGFsdGVybmF0ZUNvbG9ycywgY29uc3Qg
U3RyaW5nJiBwcmludENvbG9yKQordm9pZCBEYXRhYmFzZUZyb250ZW5kRGlzcGF0Y2hlcjo6ZGlk
RXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpB
cnJheTxTdHJpbmc+PiBjb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBub3RlcywgZG91YmxlIHRp
bWVzdGFtcCwgUmVmUHRyPEpTT046Ok9iamVjdD4gdmFsdWVzLCBSZWZQdHI8SlNPTjo6VmFsdWU+
IHBheWxvYWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IHNx
bEVycm9yLCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9y
cyYgc2NyZWVuQ29sb3IsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29s
b3JMaXN0PiBhbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyYgcHJpbnRDb2xvcikKIHsKICAg
ICBSZWY8SW5zcGVjdG9yT2JqZWN0PiBqc29uTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3Jl
YXRlKCk7CiAgICAganNvbk1lc3NhZ2UtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoIm1ldGhvZCIp
LCBBU0NJSUxpdGVyYWwoIkRhdGFiYXNlLmRpZEV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyIp
KTsKQEAgLTM5Myw3ICszOTMsNyBAQCB0eXBlZGVmIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPgogCiBuYW1lc3Bh
Y2UgRGF0YWJhc2UgewogLyogRGF0YWJhc2UgZXJyb3IuICovCi1jbGFzcyBFcnJvciA6IHB1Ymxp
YyBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdEJhc2UgeworY2xhc3MgRXJyb3IgOiBwdWJsaWMg
SlNPTjo6T2JqZWN0QmFzZSB7CiBwdWJsaWM6CiAgICAgZW51bSB7CiAgICAgICAgIE5vRmllbGRz
U2V0ID0gMCwKQEAgLTQwNSwxNCArNDA1LDE0IEBAIHB1YmxpYzoKICAgICB0ZW1wbGF0ZTxpbnQg
U1RBVEU+CiAgICAgY2xhc3MgQnVpbGRlciB7CiAgICAgcHJpdmF0ZToKLSAgICAgICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CisgICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+
IG1fcmVzdWx0OwogCiAgICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwg
U1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiAqcmVpbnRl
cnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICAgfQogCi0g
ICAgICAgIEJ1aWxkZXIoUmVmPC8qRXJyb3IqL0luc3BlY3Rvck9iamVjdD4mJiBvYmplY3QpCisg
ICAgICAgIEJ1aWxkZXIoUmVmPC8qRXJyb3IqL0pTT046Ok9iamVjdD4mJiBvYmplY3QpCiAgICAg
ICAgICAgICA6IG1fcmVzdWx0KFdURk1vdmUob2JqZWN0KSkKICAgICAgICAgewogICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9p
bl9ub25faW5pdF9zdGF0ZSk7CkBAIC00MzcsOSArNDM3LDkgQEAgcHVibGljOgogICAgICAgICBS
ZWY8RXJyb3I+IHJlbGVhc2UoKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VS
VChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwotICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKEVycm9yKSA9PSBzaXplb2YoSW5zcGVjdG9yT2JqZWN0
KSwgY2Fubm90X2Nhc3QpOworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKEVycm9y
KSA9PSBzaXplb2YoSlNPTjo6T2JqZWN0KSwgY2Fubm90X2Nhc3QpOwogCi0gICAgICAgICAgICBS
ZWY8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOwor
ICAgICAgICAgICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5v
bk51bGwoKTsKICAgICAgICAgICAgIHJldHVybiBXVEZNb3ZlKCpyZWludGVycHJldF9jYXN0PFJl
ZjxFcnJvcj4qPigmcmVzdWx0KSk7CiAgICAgICAgIH0KICAgICB9OwpAQCAtNDUzLDcgKzQ1Myw3
IEBAIHB1YmxpYzoKICAgICAgKi8KICAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3Jl
YXRlKCkKICAgICB7Ci0gICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihJbnNwZWN0
b3JPYmplY3Q6OmNyZWF0ZSgpKTsKKyAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+
KEpTT046Ok9iamVjdDo6Y3JlYXRlKCkpOwogICAgIH0KIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVk
L2dlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uLXJlc3VsdCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVk
L2dlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uLXJlc3VsdAppbmRleCAy
YWZmMTRlMjAzNS4uNjg3OTQzYzA3Y2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2dlbmVyYXRlLWRvbWFp
bnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uLXJlc3VsdAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9nZW5lcmF0ZS1k
b21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbi1yZXN1bHQKQEAgLTE2Miw3ICsxNjIsNyBA
QCBwcm90ZWN0ZWQ6CiBjbGFzcyBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVi
bGljIFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyIHsKIHB1YmxpYzoKICAgICBzdGF0aWMg
UmVmPE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYs
IE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7Ci0gICAgdm9pZCBkaXNwYXRjaChs
b25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxJbnNwZWN0b3JPYmplY3Q+
JiYgbWVzc2FnZSkgb3ZlcnJpZGU7CisgICAgdm9pZCBkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwg
Y29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkgb3ZlcnJp
ZGU7CiBwcml2YXRlOgogICAgIHZvaWQgbG9hZFJlc291cmNlKGxvbmcgcmVxdWVzdElkLCBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiYmIHBhcmFtZXRlcnMpOwogI2lmIEVOQUJMRShJTlNQRUNUT1Jf
QUxURVJOQVRFX0RJU1BBVENIRVJTKQpAQCAtMjQyLDExICsyNDIsMTEgQEAgTmV0d29yazFCYWNr
ZW5kRGlzcGF0Y2hlcjo6TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hl
ciYgYmFja2VuZEQKICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJG
b3JEb21haW4oQVNDSUlMaXRlcmFsKCJOZXR3b3JrMSIpLCB0aGlzKTsKIH0KIAotdm9pZCBOZXR3
b3JrMUJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3Ry
aW5nJiBtZXRob2QsIFJlZjxJbnNwZWN0b3JPYmplY3Q+JiYgbWVzc2FnZSkKK3ZvaWQgTmV0d29y
azFCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmlu
ZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpCiB7CiAgICAgUmVmPE5ldHdv
cmsxQmFja2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOwogCi0gICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gcGFyYW1ldGVyczsKKyAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0
ZXJzOwogICAgIG1lc3NhZ2UtPmdldE9iamVjdChBU0NJSUxpdGVyYWwoInBhcmFtcyIpLCBwYXJh
bWV0ZXJzKTsKIAogICAgIGlmIChtZXRob2QgPT0gImxvYWRSZXNvdXJjZSIpCkBAIC00NDEsNyAr
NDQxLDcgQEAgY2xhc3MgTmV0d29ya0Vycm9yOwogCiAjaWYgUExBVEZPUk0oV0VCX1RZUEVTKQog
bmFtZXNwYWNlIE5ldHdvcmsyIHsKLWNsYXNzIE5ldHdvcmtFcnJvciA6IHB1YmxpYyBJbnNwZWN0
b3I6Okluc3BlY3Rvck9iamVjdEJhc2UgeworY2xhc3MgTmV0d29ya0Vycm9yIDogcHVibGljIEpT
T046Ok9iamVjdEJhc2UgewogcHVibGljOgogICAgIGVudW0gewogICAgICAgICBOb0ZpZWxkc1Nl
dCA9IDAsCkBAIC00NTMsMTQgKzQ1MywxNCBAQCBwdWJsaWM6CiAgICAgdGVtcGxhdGU8aW50IFNU
QVRFPgogICAgIGNsYXNzIEJ1aWxkZXIgewogICAgIHByaXZhdGU6Ci0gICAgICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OworICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBt
X3Jlc3VsdDsKIAogICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNU
RVA+JiBjYXN0U3RhdGUoKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJw
cmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgIH0KIAotICAg
ICAgICBCdWlsZGVyKFJlZjwvKk5ldHdvcmtFcnJvciovSW5zcGVjdG9yT2JqZWN0PiYmIG9iamVj
dCkKKyAgICAgICAgQnVpbGRlcihSZWY8LypOZXR3b3JrRXJyb3IqL0pTT046Ok9iamVjdD4mJiBv
YmplY3QpCiAgICAgICAgICAgICA6IG1fcmVzdWx0KFdURk1vdmUob2JqZWN0KSkKICAgICAgICAg
ewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxk
ZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CkBAIC00ODUsOSArNDg1LDkgQEAgcHVibGlj
OgogICAgICAgICBSZWY8TmV0d29ya0Vycm9yPiByZWxlYXNlKCkKICAgICAgICAgewogICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90
X3JlYWR5KTsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihOZXR3b3JrRXJyb3Ip
ID09IHNpemVvZihJbnNwZWN0b3JPYmplY3QpLCBjYW5ub3RfY2FzdCk7CisgICAgICAgICAgICBD
T01QSUxFX0FTU0VSVChzaXplb2YoTmV0d29ya0Vycm9yKSA9PSBzaXplb2YoSlNPTjo6T2JqZWN0
KSwgY2Fubm90X2Nhc3QpOwogCi0gICAgICAgICAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiByZXN1
bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOworICAgICAgICAgICAgUmVmPEpTT046Ok9i
amVjdD4gcmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKICAgICAgICAgICAgIHJl
dHVybiBXVEZNb3ZlKCpyZWludGVycHJldF9jYXN0PFJlZjxOZXR3b3JrRXJyb3I+Kj4oJnJlc3Vs
dCkpOwogICAgICAgICB9CiAgICAgfTsKQEAgLTUwMSw3ICs1MDEsNyBAQCBwdWJsaWM6CiAgICAg
ICovCiAgICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCiAgICAgewotICAg
ICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUo
KSk7CisgICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihKU09OOjpPYmplY3Q6OmNy
ZWF0ZSgpKTsKICAgICB9CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9zaGFkb3dlZC1vcHRpb25h
bC10eXBlLXNldHRlcnMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9zaGFkb3dlZC1vcHRpb25hbC10eXBl
LXNldHRlcnMuanNvbi1yZXN1bHQKaW5kZXggYmZkMDdmY2UwZDUuLjYyZjQyNjQyY2VjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2Vu
ZXJpYy9leHBlY3RlZC9zaGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbi1yZXN1bHQK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVy
aWMvZXhwZWN0ZWQvc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24tcmVzdWx0CkBA
IC0zMzUsNyArMzM1LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gU3RyaW5nIGdldEVudW1Db25z
dGFudFZhbHVlKFQgZW51bVZhbHVlKQogCiBuYW1lc3BhY2UgUnVudGltZSB7CiAvKiBLZXkgcGF0
aC4gKi8KLWNsYXNzIEtleVBhdGggOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3RC
YXNlIHsKK2NsYXNzIEtleVBhdGggOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7CiBwdWJsaWM6
CiAgICAgLy8gTmFtZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSAndHlwZScgd2hpbGUgZ2VuZXJhdGlu
ZyBLZXlQYXRoLgogICAgIGVudW0gY2xhc3MgVHlwZSB7CkBAIC0zNTIsMTQgKzM1MiwxNCBAQCBw
dWJsaWM6CiAgICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgIGNsYXNzIEJ1aWxkZXIgewogICAg
IHByaXZhdGU6Ci0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OworICAg
ICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBtX3Jlc3VsdDsKIAogICAgICAgICB0ZW1wbGF0ZTxp
bnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgICB7CiAg
ICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+
Kj4odGhpcyk7CiAgICAgICAgIH0KIAotICAgICAgICBCdWlsZGVyKFJlZjwvKktleVBhdGgqL0lu
c3BlY3Rvck9iamVjdD4mJiBvYmplY3QpCisgICAgICAgIEJ1aWxkZXIoUmVmPC8qS2V5UGF0aCov
SlNPTjo6T2JqZWN0PiYmIG9iamVjdCkKICAgICAgICAgICAgIDogbV9yZXN1bHQoV1RGTW92ZShv
YmplY3QpKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBO
b0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKQEAgLTM3Nyw5
ICszNzcsOSBAQCBwdWJsaWM6CiAgICAgICAgIFJlZjxLZXlQYXRoPiByZWxlYXNlKCkKICAgICAg
ICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCBy
ZXN1bHRfaXNfbm90X3JlYWR5KTsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihL
ZXlQYXRoKSA9PSBzaXplb2YoSW5zcGVjdG9yT2JqZWN0KSwgY2Fubm90X2Nhc3QpOworICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKEtleVBhdGgpID09IHNpemVvZihKU09OOjpPYmpl
Y3QpLCBjYW5ub3RfY2FzdCk7CiAKLSAgICAgICAgICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IHJl
c3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7CisgICAgICAgICAgICBSZWY8SlNPTjo6
T2JqZWN0PiByZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOwogICAgICAgICAgICAg
cmV0dXJuIFdURk1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPEtleVBhdGg+Kj4oJnJlc3VsdCkp
OwogICAgICAgICB9CiAgICAgfTsKQEAgLTM5Miw3ICszOTIsNyBAQCBwdWJsaWM6CiAgICAgICov
CiAgICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCiAgICAgewotICAgICAg
ICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSk7
CisgICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihKU09OOjpPYmplY3Q6OmNyZWF0
ZSgpKTsKICAgICB9CiAKICAgICB2b2lkIHNldFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2dlbmVyaWMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uLXJlc3Vs
dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmlj
L2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbi1yZXN1bHQKaW5kZXgg
ZWViOTliZWY2YjMuLjYyMjQ1ZDA3ZmFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC90eXBlLWRlY2xhcmF0
aW9uLW9iamVjdC10eXBlLmpzb24tcmVzdWx0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24t
b2JqZWN0LXR5cGUuanNvbi1yZXN1bHQKQEAgLTM1NCw3ICszNTQsNyBAQCB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBTdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoVCBlbnVtVmFsdWUpCiAKIG5hbWVz
cGFjZSBEYXRhYmFzZSB7CiAvKiBEYXRhYmFzZSBlcnJvci4gKi8KLWNsYXNzIEVycm9yIDogcHVi
bGljIEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0QmFzZSB7CitjbGFzcyBFcnJvciA6IHB1Ymxp
YyBKU09OOjpPYmplY3RCYXNlIHsKIHB1YmxpYzoKICAgICBlbnVtIHsKICAgICAgICAgTm9GaWVs
ZHNTZXQgPSAwLApAQCAtMzY2LDE0ICszNjYsMTQgQEAgcHVibGljOgogICAgIHRlbXBsYXRlPGlu
dCBTVEFURT4KICAgICBjbGFzcyBCdWlsZGVyIHsKICAgICBwcml2YXRlOgotICAgICAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKKyAgICAgICAgUmVmUHRyPEpTT046Ok9iamVj
dD4gbV9yZXN1bHQ7CiAKICAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUg
fCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuICpyZWlu
dGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgICB9CiAK
LSAgICAgICAgQnVpbGRlcihSZWY8LypFcnJvciovSW5zcGVjdG9yT2JqZWN0PiYmIG9iamVjdCkK
KyAgICAgICAgQnVpbGRlcihSZWY8LypFcnJvciovSlNPTjo6T2JqZWN0PiYmIG9iamVjdCkKICAg
ICAgICAgICAgIDogbV9yZXN1bHQoV1RGTW92ZShvYmplY3QpKQogICAgICAgICB7CiAgICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVk
X2luX25vbl9pbml0X3N0YXRlKTsKQEAgLTM5OCw5ICszOTgsOSBAQCBwdWJsaWM6CiAgICAgICAg
IFJlZjxFcnJvcj4gcmVsZWFzZSgpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7Ci0gICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoRXJyb3IpID09IHNpemVvZihJbnNwZWN0b3JPYmpl
Y3QpLCBjYW5ub3RfY2FzdCk7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoRXJy
b3IpID09IHNpemVvZihKU09OOjpPYmplY3QpLCBjYW5ub3RfY2FzdCk7CiAKLSAgICAgICAgICAg
IFJlZjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7
CisgICAgICAgICAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNl
Tm9uTnVsbCgpOwogICAgICAgICAgICAgcmV0dXJuIFdURk1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8
UmVmPEVycm9yPio+KCZyZXN1bHQpKTsKICAgICAgICAgfQogICAgIH07CkBAIC00MTQsNyArNDE0
LDcgQEAgcHVibGljOgogICAgICAqLwogICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBj
cmVhdGUoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEluc3Bl
Y3Rvck9iamVjdDo6Y3JlYXRlKCkpOworICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1Nl
dD4oSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSk7CiAgICAgfQogfTsKIApAQCAtNDI1LDcgKzQyNSw3
IEBAIGVudW0gY2xhc3MgTW91c2VCdXR0b24gewogICAgIE1pZGRsZSA9IDIsCiAgICAgUmlnaHQg
PSAzLAogfTsgLy8gZW51bSBjbGFzcyBNb3VzZUJ1dHRvbgotY2xhc3MgT3B0aW9uYWxQYXJhbWV0
ZXJCdW5kbGUgOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3RCYXNlIHsKK2NsYXNz
IE9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlIDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgewogcHVi
bGljOgogICAgIC8vIE5hbWVkIGFmdGVyIHByb3BlcnR5IG5hbWUgJ2RpcmVjdGlvbmFsaXR5JyB3
aGlsZSBnZW5lcmF0aW5nIE9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlLgogICAgIGVudW0gY2xhc3Mg
RGlyZWN0aW9uYWxpdHkgewpAQCAtNDQwLDE0ICs0NDAsMTQgQEAgcHVibGljOgogICAgIHRlbXBs
YXRlPGludCBTVEFURT4KICAgICBjbGFzcyBCdWlsZGVyIHsKICAgICBwcml2YXRlOgotICAgICAg
ICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKKyAgICAgICAgUmVmUHRyPEpTT046
Ok9iamVjdD4gbV9yZXN1bHQ7CiAKICAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8
U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJu
ICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAg
ICB9CiAKLSAgICAgICAgQnVpbGRlcihSZWY8LypPcHRpb25hbFBhcmFtZXRlckJ1bmRsZSovSW5z
cGVjdG9yT2JqZWN0PiYmIG9iamVjdCkKKyAgICAgICAgQnVpbGRlcihSZWY8LypPcHRpb25hbFBh
cmFtZXRlckJ1bmRsZSovSlNPTjo6T2JqZWN0PiYmIG9iamVjdCkKICAgICAgICAgICAgIDogbV9y
ZXN1bHQoV1RGTW92ZShvYmplY3QpKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FT
U0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0
YXRlKTsKQEAgLTQ1OCw5ICs0NTgsOSBAQCBwdWJsaWM6CiAgICAgICAgIFJlZjxPcHRpb25hbFBh
cmFtZXRlckJ1bmRsZT4gcmVsZWFzZSgpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7Ci0gICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGUpID09
IHNpemVvZihJbnNwZWN0b3JPYmplY3QpLCBjYW5ub3RfY2FzdCk7CisgICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVChzaXplb2YoT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGUpID09IHNpemVvZihKU09O
OjpPYmplY3QpLCBjYW5ub3RfY2FzdCk7CiAKLSAgICAgICAgICAgIFJlZjxJbnNwZWN0b3JPYmpl
Y3Q+IHJlc3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7CisgICAgICAgICAgICBSZWY8
SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOwogICAgICAg
ICAgICAgcmV0dXJuIFdURk1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPE9wdGlvbmFsUGFyYW1l
dGVyQnVuZGxlPio+KCZyZXN1bHQpKTsKICAgICAgICAgfQogICAgIH07CkBAIC00NzIsNyArNDcy
LDcgQEAgcHVibGljOgogICAgICAqLwogICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBj
cmVhdGUoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEluc3Bl
Y3Rvck9iamVjdDo6Y3JlYXRlKCkpOworICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1Nl
dD4oSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSk7CiAgICAgfQogCiAgICAgdm9pZCBzZXRDb2x1bW5O
YW1lcyhSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPj4gdmFsdWUpCkBA
IC01MDAsMTIgKzUwMCwxMiBAQCBwdWJsaWM6CiAgICAgICAgIEluc3BlY3Rvck9iamVjdEJhc2U6
OnNldERvdWJsZShBU0NJSUxpdGVyYWwoInRpbWVzdGFtcCIpLCB2YWx1ZSk7CiAgICAgfQogCi0g
ICAgdm9pZCBzZXRWYWx1ZXMoUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiB2YWx1
ZSkKKyAgICB2b2lkIHNldFZhbHVlcyhSZWZQdHI8SlNPTjo6T2JqZWN0PiB2YWx1ZSkKICAgICB7
CiAgICAgICAgIEluc3BlY3Rvck9iamVjdEJhc2U6OnNldE9iamVjdChBU0NJSUxpdGVyYWwoInZh
bHVlcyIpLCBXVEZNb3ZlKHZhbHVlKSk7CiAgICAgfQogCi0gICAgdm9pZCBzZXRQYXlsb2FkKFJl
ZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPiB2YWx1ZSkKKyAgICB2b2lkIHNldFBheWxv
YWQoUmVmUHRyPEpTT046OlZhbHVlPiB2YWx1ZSkKICAgICB7CiAgICAgICAgIEluc3BlY3Rvck9i
amVjdEJhc2U6OnNldFZhbHVlKEFTQ0lJTGl0ZXJhbCgicGF5bG9hZCIpLCBXVEZNb3ZlKHZhbHVl
KSk7CiAgICAgfQpAQCAtNTIxLDcgKzUyMSw3IEBAIHB1YmxpYzoKICAgICB9CiB9OwogCi1jbGFz
cyBQYXJhbWV0ZXJCdW5kbGUgOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3RCYXNl
IHsKK2NsYXNzIFBhcmFtZXRlckJ1bmRsZSA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKIHB1
YmxpYzoKICAgICAvLyBOYW1lZCBhZnRlciBwcm9wZXJ0eSBuYW1lICdkaXJlY3Rpb25hbGl0eScg
d2hpbGUgZ2VuZXJhdGluZyBQYXJhbWV0ZXJCdW5kbGUuCiAgICAgZW51bSBjbGFzcyBEaXJlY3Rp
b25hbGl0eSB7CkBAIC01NDUsMTQgKzU0NSwxNCBAQCBwdWJsaWM6CiAgICAgdGVtcGxhdGU8aW50
IFNUQVRFPgogICAgIGNsYXNzIEJ1aWxkZXIgewogICAgIHByaXZhdGU6Ci0gICAgICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OworICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0
PiBtX3Jlc3VsdDsKIAogICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8
IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gKnJlaW50
ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgIH0KIAot
ICAgICAgICBCdWlsZGVyKFJlZjwvKlBhcmFtZXRlckJ1bmRsZSovSW5zcGVjdG9yT2JqZWN0PiYm
IG9iamVjdCkKKyAgICAgICAgQnVpbGRlcihSZWY8LypQYXJhbWV0ZXJCdW5kbGUqL0pTT046Ok9i
amVjdD4mJiBvYmplY3QpCiAgICAgICAgICAgICA6IG1fcmVzdWx0KFdURk1vdmUob2JqZWN0KSkK
ICAgICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNT
ZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CkBAIC01OTUsMTQgKzU5NSwx
NCBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFRpbWVzdGFtcFNldD4o
KTsKICAgICAgICAgfQogCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBWYWx1ZXNTZXQ+JiBzZXRW
YWx1ZXMoUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKKyAgICAgICAg
QnVpbGRlcjxTVEFURSB8IFZhbHVlc1NldD4mIHNldFZhbHVlcyhSZWZQdHI8SlNPTjo6T2JqZWN0
PiB2YWx1ZSkKICAgICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAm
IFZhbHVlc1NldCksIHByb3BlcnR5X3ZhbHVlc19hbHJlYWR5X3NldCk7CiAgICAgICAgICAgICBt
X3Jlc3VsdC0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgidmFsdWVzIiksIHZhbHVlKTsKICAgICAg
ICAgICAgIHJldHVybiBjYXN0U3RhdGU8VmFsdWVzU2V0PigpOwogICAgICAgICB9CiAKLSAgICAg
ICAgQnVpbGRlcjxTVEFURSB8IFBheWxvYWRTZXQ+JiBzZXRQYXlsb2FkKFJlZlB0cjxJbnNwZWN0
b3I6Okluc3BlY3RvclZhbHVlPiB2YWx1ZSkKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IFBheWxv
YWRTZXQ+JiBzZXRQYXlsb2FkKFJlZlB0cjxKU09OOjpWYWx1ZT4gdmFsdWUpCiAgICAgICAgIHsK
ICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBQYXlsb2FkU2V0KSwgcHJvcGVy
dHlfcGF5bG9hZF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0VmFsdWUo
QVNDSUlMaXRlcmFsKCJwYXlsb2FkIiksIHZhbHVlKTsKQEAgLTYyNiw5ICs2MjYsOSBAQCBwdWJs
aWM6CiAgICAgICAgIFJlZjxQYXJhbWV0ZXJCdW5kbGU+IHJlbGVhc2UoKQogICAgICAgICB7CiAg
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9p
c19ub3RfcmVhZHkpOwotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKFBhcmFtZXRl
ckJ1bmRsZSkgPT0gc2l6ZW9mKEluc3BlY3Rvck9iamVjdCksIGNhbm5vdF9jYXN0KTsKKyAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihQYXJhbWV0ZXJCdW5kbGUpID09IHNpemVvZihK
U09OOjpPYmplY3QpLCBjYW5ub3RfY2FzdCk7CiAKLSAgICAgICAgICAgIFJlZjxJbnNwZWN0b3JP
YmplY3Q+IHJlc3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7CisgICAgICAgICAgICBS
ZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOwogICAg
ICAgICAgICAgcmV0dXJuIFdURk1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPFBhcmFtZXRlckJ1
bmRsZT4qPigmcmVzdWx0KSk7CiAgICAgICAgIH0KICAgICB9OwpAQCAtNjQ5LDEyICs2NDksMTIg
QEAgcHVibGljOgogICAgICAqLwogICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVh
dGUoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCkpOworICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4o
SlNPTjo6T2JqZWN0OjpjcmVhdGUoKSk7CiAgICAgfQogfTsKIAogLyogQ29uZmxpY3RlZCBuYW1l
cyBtYXkgY2F1c2UgZ2VuZXJhdGVkIGdldHRlcnMvc2V0dGVycyB0byBjbGFzaCB3aXRoIGJ1aWx0
LWluIEluc3BlY3Rvck9iamVjdCBtZXRob2RzLiAqLwotY2xhc3MgT2JqZWN0V2l0aFByb3BlcnR5
TmFtZUNvbmZsaWN0cyA6IHB1YmxpYyBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdEJhc2Ugewor
Y2xhc3MgT2JqZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0cyA6IHB1YmxpYyBKU09OOjpPYmpl
Y3RCYXNlIHsKIHB1YmxpYzoKICAgICBlbnVtIHsKICAgICAgICAgTm9GaWVsZHNTZXQgPSAwLApA
QCAtNjY5LDE0ICs2NjksMTQgQEAgcHVibGljOgogICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAg
ICBjbGFzcyBCdWlsZGVyIHsKICAgICBwcml2YXRlOgotICAgICAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBtX3Jlc3VsdDsKKyAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gbV9yZXN1bHQ7
CiAKICAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2Fz
dFN0YXRlKCkKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0
PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgICB9CiAKLSAgICAgICAgQnVp
bGRlcihSZWY8LypPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzKi9JbnNwZWN0b3JPYmpl
Y3Q+JiYgb2JqZWN0KQorICAgICAgICBCdWlsZGVyKFJlZjwvKk9iamVjdFdpdGhQcm9wZXJ0eU5h
bWVDb25mbGljdHMqL0pTT046Ok9iamVjdD4mJiBvYmplY3QpCiAgICAgICAgICAgICA6IG1fcmVz
dWx0KFdURk1vdmUob2JqZWN0KSkKICAgICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0
ZSk7CkBAIC03MjIsOSArNzIyLDkgQEAgcHVibGljOgogICAgICAgICBSZWY8T2JqZWN0V2l0aFBy
b3BlcnR5TmFtZUNvbmZsaWN0cz4gcmVsZWFzZSgpCiAgICAgICAgIHsKICAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7
Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoT2JqZWN0V2l0aFByb3BlcnR5TmFt
ZUNvbmZsaWN0cykgPT0gc2l6ZW9mKEluc3BlY3Rvck9iamVjdCksIGNhbm5vdF9jYXN0KTsKKyAg
ICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29u
ZmxpY3RzKSA9PSBzaXplb2YoSlNPTjo6T2JqZWN0KSwgY2Fubm90X2Nhc3QpOwogCi0gICAgICAg
ICAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVs
bCgpOworICAgICAgICAgICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0ID0gbV9yZXN1bHQucmVs
ZWFzZU5vbk51bGwoKTsKICAgICAgICAgICAgIHJldHVybiBXVEZNb3ZlKCpyZWludGVycHJldF9j
YXN0PFJlZjxPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzPio+KCZyZXN1bHQpKTsKICAg
ICAgICAgfQogICAgIH07CkBAIC03NDEsMTQgKzc0MSwxNCBAQCBwdWJsaWM6CiAgICAgICovCiAg
ICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCiAgICAgewotICAgICAgICBy
ZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSk7Cisg
ICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihKU09OOjpPYmplY3Q6OmNyZWF0ZSgp
KTsKICAgICB9CiB9OwogCiB9IC8vIERhdGFiYXNlCiAKIG5hbWVzcGFjZSBUZXN0IHsKLWNsYXNz
IFBhcmFtZXRlckJ1bmRsZSA6IHB1YmxpYyBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdEJhc2Ug
eworY2xhc3MgUGFyYW1ldGVyQnVuZGxlIDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgewogcHVi
bGljOgogICAgIC8vIE5hbWVkIGFmdGVyIHByb3BlcnR5IG5hbWUgJ2RpcmVjdGlvbmFsaXR5JyB3
aGlsZSBnZW5lcmF0aW5nIFBhcmFtZXRlckJ1bmRsZS4KICAgICBlbnVtIGNsYXNzIERpcmVjdGlv
bmFsaXR5IHsKQEAgLTc3MSwxNCArNzcxLDE0IEBAIHB1YmxpYzoKICAgICB0ZW1wbGF0ZTxpbnQg
U1RBVEU+CiAgICAgY2xhc3MgQnVpbGRlciB7CiAgICAgcHJpdmF0ZToKLSAgICAgICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CisgICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+
IG1fcmVzdWx0OwogCiAgICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwg
U1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiAqcmVpbnRl
cnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICAgfQogCi0g
ICAgICAgIEJ1aWxkZXIoUmVmPC8qUGFyYW1ldGVyQnVuZGxlKi9JbnNwZWN0b3JPYmplY3Q+JiYg
b2JqZWN0KQorICAgICAgICBCdWlsZGVyKFJlZjwvKlBhcmFtZXRlckJ1bmRsZSovSlNPTjo6T2Jq
ZWN0PiYmIG9iamVjdCkKICAgICAgICAgICAgIDogbV9yZXN1bHQoV1RGTW92ZShvYmplY3QpKQog
ICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1Nl
dCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKQEAgLTgyMSwxNCArODIxLDE0
IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VGltZXN0YW1wU2V0Pigp
OwogICAgICAgICB9CiAKLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IFZhbHVlc1NldD4mIHNldFZh
bHVlcyhSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQorICAgICAgICBC
dWlsZGVyPFNUQVRFIHwgVmFsdWVzU2V0PiYgc2V0VmFsdWVzKFJlZlB0cjxKU09OOjpPYmplY3Q+
IHZhbHVlKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYg
VmFsdWVzU2V0KSwgcHJvcGVydHlfdmFsdWVzX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgIG1f
cmVzdWx0LT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJ2YWx1ZXMiKSwgdmFsdWUpOwogICAgICAg
ICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxWYWx1ZXNTZXQ+KCk7CiAgICAgICAgIH0KIAotICAgICAg
ICBCdWlsZGVyPFNUQVRFIHwgUGF5bG9hZFNldD4mIHNldFBheWxvYWQoUmVmUHRyPEluc3BlY3Rv
cjo6SW5zcGVjdG9yVmFsdWU+IHZhbHVlKQorICAgICAgICBCdWlsZGVyPFNUQVRFIHwgUGF5bG9h
ZFNldD4mIHNldFBheWxvYWQoUmVmUHRyPEpTT046OlZhbHVlPiB2YWx1ZSkKICAgICAgICAgewog
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFBheWxvYWRTZXQpLCBwcm9wZXJ0
eV9wYXlsb2FkX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRWYWx1ZShB
U0NJSUxpdGVyYWwoInBheWxvYWQiKSwgdmFsdWUpOwpAQCAtODQ1LDkgKzg0NSw5IEBAIHB1Ymxp
YzoKICAgICAgICAgUmVmPFBhcmFtZXRlckJ1bmRsZT4gcmVsZWFzZSgpCiAgICAgICAgIHsKICAg
ICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lz
X25vdF9yZWFkeSk7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoUGFyYW1ldGVy
QnVuZGxlKSA9PSBzaXplb2YoSW5zcGVjdG9yT2JqZWN0KSwgY2Fubm90X2Nhc3QpOworICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKFBhcmFtZXRlckJ1bmRsZSkgPT0gc2l6ZW9mKEpT
T046Ok9iamVjdCksIGNhbm5vdF9jYXN0KTsKIAotICAgICAgICAgICAgUmVmPEluc3BlY3Rvck9i
amVjdD4gcmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKKyAgICAgICAgICAgIFJl
ZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7CiAgICAg
ICAgICAgICByZXR1cm4gV1RGTW92ZSgqcmVpbnRlcnByZXRfY2FzdDxSZWY8UGFyYW1ldGVyQnVu
ZGxlPio+KCZyZXN1bHQpKTsKICAgICAgICAgfQogICAgIH07CkBAIC04NjcsNyArODY3LDcgQEAg
cHVibGljOgogICAgICAqLwogICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUo
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEluc3BlY3Rvck9i
amVjdDo6Y3JlYXRlKCkpOworICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSlNP
Tjo6T2JqZWN0OjpjcmVhdGUoKSk7CiAgICAgfQogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvdHlw
ZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL3R5cGUtcmVxdWly
aW5nLXJ1bnRpbWUtY2FzdHMuanNvbi1yZXN1bHQKaW5kZXggODczMzU4ZTUyNWIuLjBlMTY4NjY0
MjBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZ2VuZXJpYy9leHBlY3RlZC90eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24t
cmVzdWx0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9nZW5lcmljL2V4cGVjdGVkL3R5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbi1yZXN1
bHQKQEAgLTM0OSw3ICszNDksNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBTdHJpbmcgZ2V0RW51
bUNvbnN0YW50VmFsdWUoVCBlbnVtVmFsdWUpCiAKIG5hbWVzcGFjZSBUZXN0IHsKIC8qIEEgZHVt
bXkgdHlwZSB0aGF0IHJlcXVpcmVzIHJ1bnRpbWUgY2FzdHMsIGFuZCBmb3JjZXMgbm9uLXByaW1p
dGl2ZSByZWZlcmVuY2VkIHR5cGVzIHRvIGFsc28gZW1pdCBydW50aW1lIGNhc3QgaGVscGVycy4g
Ki8KLWNsYXNzIFR5cGVOZWVkaW5nQ2FzdCA6IHB1YmxpYyBJbnNwZWN0b3I6Okluc3BlY3Rvck9i
amVjdEJhc2UgeworY2xhc3MgVHlwZU5lZWRpbmdDYXN0IDogcHVibGljIEpTT046Ok9iamVjdEJh
c2UgewogcHVibGljOgogICAgIGVudW0gewogICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCkBAIC0z
NjQsMTQgKzM2NCwxNCBAQCBwdWJsaWM6CiAgICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgIGNs
YXNzIEJ1aWxkZXIgewogICAgIHByaXZhdGU6Ci0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IG1fcmVzdWx0OworICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBtX3Jlc3VsdDsKIAog
ICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3Rh
dGUoKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVp
bGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgIH0KIAotICAgICAgICBCdWlsZGVy
KFJlZjwvKlR5cGVOZWVkaW5nQ2FzdCovSW5zcGVjdG9yT2JqZWN0PiYmIG9iamVjdCkKKyAgICAg
ICAgQnVpbGRlcihSZWY8LypUeXBlTmVlZGluZ0Nhc3QqL0pTT046Ok9iamVjdD4mJiBvYmplY3Qp
CiAgICAgICAgICAgICA6IG1fcmVzdWx0KFdURk1vdmUob2JqZWN0KSkKICAgICAgICAgewogICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3Jl
YXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CkBAIC00MTcsOSArNDE3LDkgQEAgcHVibGljOgogICAg
ICAgICBSZWY8VHlwZU5lZWRpbmdDYXN0PiByZWxlYXNlKCkKICAgICAgICAgewogICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3Jl
YWR5KTsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihUeXBlTmVlZGluZ0Nhc3Qp
ID09IHNpemVvZihJbnNwZWN0b3JPYmplY3QpLCBjYW5ub3RfY2FzdCk7CisgICAgICAgICAgICBD
T01QSUxFX0FTU0VSVChzaXplb2YoVHlwZU5lZWRpbmdDYXN0KSA9PSBzaXplb2YoSlNPTjo6T2Jq
ZWN0KSwgY2Fubm90X2Nhc3QpOwogCi0gICAgICAgICAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiBy
ZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOworICAgICAgICAgICAgUmVmPEpTT046
Ok9iamVjdD4gcmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKICAgICAgICAgICAg
IHJldHVybiBXVEZNb3ZlKCpyZWludGVycHJldF9jYXN0PFJlZjxUeXBlTmVlZGluZ0Nhc3Q+Kj4o
JnJlc3VsdCkpOwogICAgICAgICB9CiAgICAgfTsKQEAgLTQzNiw3ICs0MzYsNyBAQCBwdWJsaWM6
CiAgICAgICovCiAgICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCiAgICAg
ewotICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSW5zcGVjdG9yT2JqZWN0Ojpj
cmVhdGUoKSk7CisgICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihKU09OOjpPYmpl
Y3Q6OmNyZWF0ZSgpKTsKICAgICB9CiB9OwogCkBAIC00NTQsNyArNDU0LDcgQEAgZW51bSBjbGFz
cyBDYXN0ZWRBbmltYWxzIHsKICAgICBDcm93cyA9IDIsCiAgICAgRmxhbWluZ29zID0gMywKIH07
IC8vIGVudW0gY2xhc3MgQ2FzdGVkQW5pbWFscwotY2xhc3MgUmVjdXJzaXZlT2JqZWN0MSA6IHB1
YmxpYyBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdEJhc2UgeworY2xhc3MgUmVjdXJzaXZlT2Jq
ZWN0MSA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKIHB1YmxpYzoKICAgICBlbnVtIHsKICAg
ICAgICAgTm9GaWVsZHNTZXQgPSAwLApAQCAtNDY0LDE0ICs0NjQsMTQgQEAgcHVibGljOgogICAg
IHRlbXBsYXRlPGludCBTVEFURT4KICAgICBjbGFzcyBCdWlsZGVyIHsKICAgICBwcml2YXRlOgot
ICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKKyAgICAgICAgUmVmUHRy
PEpTT046Ok9iamVjdD4gbV9yZXN1bHQ7CiAKICAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1
aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICAgewogICAgICAgICAgICAg
cmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwog
ICAgICAgICB9CiAKLSAgICAgICAgQnVpbGRlcihSZWY8LypSZWN1cnNpdmVPYmplY3QxKi9JbnNw
ZWN0b3JPYmplY3Q+JiYgb2JqZWN0KQorICAgICAgICBCdWlsZGVyKFJlZjwvKlJlY3Vyc2l2ZU9i
amVjdDEqL0pTT046Ok9iamVjdD4mJiBvYmplY3QpCiAgICAgICAgICAgICA6IG1fcmVzdWx0KFdU
Rk1vdmUob2JqZWN0KSkKICAgICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RB
VEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CkBA
IC00ODIsOSArNDgyLDkgQEAgcHVibGljOgogICAgICAgICBSZWY8UmVjdXJzaXZlT2JqZWN0MT4g
cmVsZWFzZSgpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09
IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7Ci0gICAgICAgICAgICBDT01QSUxF
X0FTU0VSVChzaXplb2YoUmVjdXJzaXZlT2JqZWN0MSkgPT0gc2l6ZW9mKEluc3BlY3Rvck9iamVj
dCksIGNhbm5vdF9jYXN0KTsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihSZWN1
cnNpdmVPYmplY3QxKSA9PSBzaXplb2YoSlNPTjo6T2JqZWN0KSwgY2Fubm90X2Nhc3QpOwogCi0g
ICAgICAgICAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNl
Tm9uTnVsbCgpOworICAgICAgICAgICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0ID0gbV9yZXN1
bHQucmVsZWFzZU5vbk51bGwoKTsKICAgICAgICAgICAgIHJldHVybiBXVEZNb3ZlKCpyZWludGVy
cHJldF9jYXN0PFJlZjxSZWN1cnNpdmVPYmplY3QxPio+KCZyZXN1bHQpKTsKICAgICAgICAgfQog
ICAgIH07CkBAIC00OTYsNyArNDk2LDcgQEAgcHVibGljOgogICAgICAqLwogICAgIHN0YXRpYyBC
dWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIEJ1aWxk
ZXI8Tm9GaWVsZHNTZXQ+KEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkpOworICAgICAgICByZXR1
cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSk7CiAgICAgfQog
CiAgICAgdm9pZCBzZXRPYmooUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlJlY3Vy
c2l2ZU9iamVjdDI+IHZhbHVlKQpAQCAtNTA1LDcgKzUwNSw3IEBAIHB1YmxpYzoKICAgICB9CiB9
OwogCi1jbGFzcyBSZWN1cnNpdmVPYmplY3QyIDogcHVibGljIEluc3BlY3Rvcjo6SW5zcGVjdG9y
T2JqZWN0QmFzZSB7CitjbGFzcyBSZWN1cnNpdmVPYmplY3QyIDogcHVibGljIEpTT046Ok9iamVj
dEJhc2UgewogcHVibGljOgogICAgIGVudW0gewogICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCkBA
IC01MTUsMTQgKzUxNSwxNCBAQCBwdWJsaWM6CiAgICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAg
IGNsYXNzIEJ1aWxkZXIgewogICAgIHByaXZhdGU6Ci0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IG1fcmVzdWx0OworICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBtX3Jlc3VsdDsK
IAogICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0
U3RhdGUoKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8
QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgIH0KIAotICAgICAgICBCdWls
ZGVyKFJlZjwvKlJlY3Vyc2l2ZU9iamVjdDIqL0luc3BlY3Rvck9iamVjdD4mJiBvYmplY3QpCisg
ICAgICAgIEJ1aWxkZXIoUmVmPC8qUmVjdXJzaXZlT2JqZWN0MiovSlNPTjo6T2JqZWN0PiYmIG9i
amVjdCkKICAgICAgICAgICAgIDogbV9yZXN1bHQoV1RGTW92ZShvYmplY3QpKQogICAgICAgICB7
CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRl
cl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKQEAgLTUzMyw5ICs1MzMsOSBAQCBwdWJsaWM6
CiAgICAgICAgIFJlZjxSZWN1cnNpdmVPYmplY3QyPiByZWxlYXNlKCkKICAgICAgICAgewogICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNf
bm90X3JlYWR5KTsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihSZWN1cnNpdmVP
YmplY3QyKSA9PSBzaXplb2YoSW5zcGVjdG9yT2JqZWN0KSwgY2Fubm90X2Nhc3QpOworICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKFJlY3Vyc2l2ZU9iamVjdDIpID09IHNpemVvZihK
U09OOjpPYmplY3QpLCBjYW5ub3RfY2FzdCk7CiAKLSAgICAgICAgICAgIFJlZjxJbnNwZWN0b3JP
YmplY3Q+IHJlc3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7CisgICAgICAgICAgICBS
ZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOwogICAg
ICAgICAgICAgcmV0dXJuIFdURk1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPFJlY3Vyc2l2ZU9i
amVjdDI+Kj4oJnJlc3VsdCkpOwogICAgICAgICB9CiAgICAgfTsKQEAgLTU0Nyw3ICs1NDcsNyBA
QCBwdWJsaWM6CiAgICAgICovCiAgICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0
ZSgpCiAgICAgewotICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKSk7CisgICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihK
U09OOjpPYmplY3Q6OmNyZWF0ZSgpKTsKICAgICB9CiAKICAgICB2b2lkIHNldE9iaihSZWZQdHI8
SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0MT4gdmFsdWUpCkBAIC01
NjAsMjMgKzU2MCwyMyBAQCBwdWJsaWM6CiAKIHRlbXBsYXRlPD4gc3RydWN0IEJpbmRpbmdUcmFp
dHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFscz4gewogI2lmICFBU1NF
UlRfRElTQUJMRUQKLXN0YXRpYyB2b2lkIGFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yVmFsdWUqKTsKK3N0YXRpYyB2b2lkIGFzc2VydFZhbHVlSGFzRXhwZWN0
ZWRUeXBlKEpTT046OlZhbHVlKik7CiAjZW5kaWYgLy8gIUFTU0VSVF9ESVNBQkxFRAogfTsKIHRl
bXBsYXRlPD4gc3RydWN0IEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6
VHlwZU5lZWRpbmdDYXN0PiB7Ci1zdGF0aWMgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRl
c3Q6OlR5cGVOZWVkaW5nQ2FzdD4gcnVudGltZUNhc3QoUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVj
dG9yVmFsdWU+JiYgdmFsdWUpOworc3RhdGljIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpU
ZXN0OjpUeXBlTmVlZGluZ0Nhc3Q+IHJ1bnRpbWVDYXN0KFJlZlB0cjxKU09OOjpWYWx1ZT4mJiB2
YWx1ZSk7CiAjaWYgIUFTU0VSVF9ESVNBQkxFRAotc3RhdGljIHZvaWQgYXNzZXJ0VmFsdWVIYXNF
eHBlY3RlZFR5cGUoSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSopOworc3RhdGljIHZvaWQgYXNz
ZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoSlNPTjo6VmFsdWUqKTsKICNlbmRpZiAvLyAhQVNTRVJU
X0RJU0FCTEVECiB9OwogdGVtcGxhdGU8PiBzdHJ1Y3QgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6
OlByb3RvY29sOjpUZXN0OjpSZWN1cnNpdmVPYmplY3QxPiB7CiAjaWYgIUFTU0VSVF9ESVNBQkxF
RAotc3RhdGljIHZvaWQgYXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoSW5zcGVjdG9yOjpJbnNw
ZWN0b3JWYWx1ZSopOworc3RhdGljIHZvaWQgYXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoSlNP
Tjo6VmFsdWUqKTsKICNlbmRpZiAvLyAhQVNTRVJUX0RJU0FCTEVECiB9OwogdGVtcGxhdGU8PiBz
dHJ1Y3QgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpSZWN1cnNpdmVP
YmplY3QyPiB7CiAjaWYgIUFTU0VSVF9ESVNBQkxFRAotc3RhdGljIHZvaWQgYXNzZXJ0VmFsdWVI
YXNFeHBlY3RlZFR5cGUoSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSopOworc3RhdGljIHZvaWQg
YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoSlNPTjo6VmFsdWUqKTsKICNlbmRpZiAvLyAhQVNT
RVJUX0RJU0FCTEVECiB9OwogCkBAIC02OTQsNyArNjk0LDcgQEAgc3RkOjpvcHRpb25hbDxJbnNw
ZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzPiBwYXJzZUVudW1WYWx1ZUZyb21T
dHJpbmcKIAogCiAjaWYgIUFTU0VSVF9ESVNBQkxFRAotdm9pZCBCaW5kaW5nVHJhaXRzPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM+Ojphc3NlcnRWYWx1ZUhhc0V4cGVj
dGVkVHlwZShJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlKiB2YWx1ZSkKK3ZvaWQgQmluZGluZ1Ry
YWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzPjo6YXNzZXJ0VmFs
dWVIYXNFeHBlY3RlZFR5cGUoSlNPTjo6VmFsdWUqIHZhbHVlKQogewogICAgIEFTU0VSVF9BUkco
dmFsdWUsIHZhbHVlKTsKICAgICBTdHJpbmcgcmVzdWx0OwpAQCAtNzA1LDcgKzcwNSw3IEBAIHZv
aWQgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxz
Pjo6YXNzZXJ0VmFsdWVIYXNFeHBlCiAjZW5kaWYgLy8gIUFTU0VSVF9ESVNBQkxFRAogCiAjaWYg
IUFTU0VSVF9ESVNBQkxFRAotdm9pZCBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdD46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yVmFsdWUqIHZhbHVlKQordm9pZCBCaW5kaW5nVHJhaXRzPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdD46OmFzc2VydFZhbHVlSGFzRXhwZWN0
ZWRUeXBlKEpTT046OlZhbHVlKiB2YWx1ZSkKIHsKICAgICBBU1NFUlRfQVJHKHZhbHVlLCB2YWx1
ZSk7CiAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gb2JqZWN0OwpAQCAtNzQzLDIxICs3NDMs
MjEgQEAgdm9pZCBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlR5cGVO
ZWVkaW5nQ2FzdD46OmFzc2VydFZhbHVlSGFzRXgKIH0KICNlbmRpZiAvLyAhQVNTRVJUX0RJU0FC
TEVECiAKLVJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3Q+
IEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0
Pjo6cnVudGltZUNhc3QoUmVmUHRyPEluc3BlY3RvclZhbHVlPiYmIHZhbHVlKQorUmVmUHRyPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdD4gQmluZGluZ1RyYWl0czxJ
bnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3Q+OjpydW50aW1lQ2FzdChS
ZWZQdHI8SlNPTjo6VmFsdWU+JiYgdmFsdWUpCiB7Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gcmVzdWx0OworICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHJlc3VsdDsKICAgICBib29sIGNh
c3RTdWNjZWVkZWQgPSB2YWx1ZS0+YXNPYmplY3QocmVzdWx0KTsKICAgICBBU1NFUlRfVU5VU0VE
KGNhc3RTdWNjZWVkZWQsIGNhc3RTdWNjZWVkZWQpOwogI2lmICFBU1NFUlRfRElTQUJMRUQKICAg
ICBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlR5cGVOZWVkaW5nQ2Fz
dD46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKHJlc3VsdC5nZXQoKSk7CiAjZW5kaWYgIC8v
ICFBU1NFUlRfRElTQUJMRUQKLSAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoSW5zcGVjdG9yOjpQ
cm90b2NvbDo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0KSA9PSBzaXplb2YoSW5zcGVjdG9yT2JqZWN0
QmFzZSksIHR5cGVfY2FzdF9wcm9ibGVtKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SW5zcGVj
dG9yOjpQcm90b2NvbDo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0Kj4oc3RhdGljX2Nhc3Q8SW5zcGVj
dG9yT2JqZWN0QmFzZSo+KHJlc3VsdC5nZXQoKSkpOworICAgIENPTVBJTEVfQVNTRVJUKHNpemVv
ZihJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3QpID09IHNpemVvZihK
U09OOjpPYmplY3RCYXNlKSwgdHlwZV9jYXN0X3Byb2JsZW0pOworICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3QqPihzdGF0aWNf
Y2FzdDxKU09OOjpPYmplY3RCYXNlKj4ocmVzdWx0LmdldCgpKSk7CiB9CiAKIAogI2lmICFBU1NF
UlRfRElTQUJMRUQKLXZvaWQgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0
OjpSZWN1cnNpdmVPYmplY3QxPjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoSW5zcGVjdG9y
OjpJbnNwZWN0b3JWYWx1ZSogdmFsdWUpCit2b2lkIEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0MT46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRU
eXBlKEpTT046OlZhbHVlKiB2YWx1ZSkKIHsKICAgICBBU1NFUlRfQVJHKHZhbHVlLCB2YWx1ZSk7
CiAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gb2JqZWN0OwpAQCAtNzc4LDcgKzc3OCw3IEBA
IHZvaWQgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpSZWN1cnNpdmVP
YmplY3QxPjo6YXNzZXJ0VmFsdWVIYXNFCiAjZW5kaWYgLy8gIUFTU0VSVF9ESVNBQkxFRAogCiAj
aWYgIUFTU0VSVF9ESVNBQkxFRAotdm9pZCBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDI+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShJ
bnNwZWN0b3I6Okluc3BlY3RvclZhbHVlKiB2YWx1ZSkKK3ZvaWQgQmluZGluZ1RyYWl0czxJbnNw
ZWN0b3I6OlByb3RvY29sOjpUZXN0OjpSZWN1cnNpdmVPYmplY3QyPjo6YXNzZXJ0VmFsdWVIYXNF
eHBlY3RlZFR5cGUoSlNPTjo6VmFsdWUqIHZhbHVlKQogewogICAgIEFTU0VSVF9BUkcodmFsdWUs
IHZhbHVlKTsKICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBvYmplY3Q7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9l
eHBlY3RlZC90eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0IGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvdHlw
ZS13aXRoLW9wZW4tcGFyYW1ldGVycy5qc29uLXJlc3VsdAppbmRleCAwNTA5MWM3YjcxNi4uZTY0
Y2FlNzYzZGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL3R5cGUtd2l0aC1vcGVuLXBhcmFtZXRlcnMuanNv
bi1yZXN1bHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2dlbmVyaWMvZXhwZWN0ZWQvdHlwZS13aXRoLW9wZW4tcGFyYW1ldGVycy5qc29uLXJlc3Vs
dApAQCAtMzI0LDcgKzMyNCw3IEBAIGNsYXNzIE9wZW5QYXJhbWV0ZXJzOwogCiAKIG5hbWVzcGFj
ZSBUZXN0IHsKLWNsYXNzIE5vT3BlblBhcmFtZXRlcnMgOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNw
ZWN0b3JPYmplY3RCYXNlIHsKK2NsYXNzIE5vT3BlblBhcmFtZXRlcnMgOiBwdWJsaWMgSlNPTjo6
T2JqZWN0QmFzZSB7CiBwdWJsaWM6CiAgICAgZW51bSB7CiAgICAgICAgIE5vRmllbGRzU2V0ID0g
MCwKQEAgLTMzNiwxNCArMzM2LDE0IEBAIHB1YmxpYzoKICAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+
CiAgICAgY2xhc3MgQnVpbGRlciB7CiAgICAgcHJpdmF0ZToKLSAgICAgICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gbV9yZXN1bHQ7CisgICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG1fcmVz
dWx0OwogCiAgICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4m
IGNhc3RTdGF0ZSgpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRf
Y2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICAgfQogCi0gICAgICAg
IEJ1aWxkZXIoUmVmPC8qTm9PcGVuUGFyYW1ldGVycyovSW5zcGVjdG9yT2JqZWN0PiYmIG9iamVj
dCkKKyAgICAgICAgQnVpbGRlcihSZWY8LypOb09wZW5QYXJhbWV0ZXJzKi9KU09OOjpPYmplY3Q+
JiYgb2JqZWN0KQogICAgICAgICAgICAgOiBtX3Jlc3VsdChXVEZNb3ZlKG9iamVjdCkpCiAgICAg
ICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBi
dWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwpAQCAtMzY4LDkgKzM2OCw5IEBAIHB1
YmxpYzoKICAgICAgICAgUmVmPE5vT3BlblBhcmFtZXRlcnM+IHJlbGVhc2UoKQogICAgICAgICB7
CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3Vs
dF9pc19ub3RfcmVhZHkpOwotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKE5vT3Bl
blBhcmFtZXRlcnMpID09IHNpemVvZihJbnNwZWN0b3JPYmplY3QpLCBjYW5ub3RfY2FzdCk7Cisg
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoTm9PcGVuUGFyYW1ldGVycykgPT0gc2l6
ZW9mKEpTT046Ok9iamVjdCksIGNhbm5vdF9jYXN0KTsKIAotICAgICAgICAgICAgUmVmPEluc3Bl
Y3Rvck9iamVjdD4gcmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKKyAgICAgICAg
ICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7
CiAgICAgICAgICAgICByZXR1cm4gV1RGTW92ZSgqcmVpbnRlcnByZXRfY2FzdDxSZWY8Tm9PcGVu
UGFyYW1ldGVycz4qPigmcmVzdWx0KSk7CiAgICAgICAgIH0KICAgICB9OwpAQCAtMzg0LDExICsz
ODQsMTEgQEAgcHVibGljOgogICAgICAqLwogICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0
PiBjcmVhdGUoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KElu
c3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkpOworICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxk
c1NldD4oSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSk7CiAgICAgfQogfTsKIAotY2xhc3MgT3BlblBh
cmFtZXRlcnMgOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QgeworY2xhc3MgT3Bl
blBhcmFtZXRlcnMgOiBwdWJsaWMgSlNPTjo6T2JqZWN0IHsKIHB1YmxpYzoKICAgICBlbnVtIHsK
ICAgICAgICAgTm9GaWVsZHNTZXQgPSAwLApAQCAtNDAwLDE0ICs0MDAsMTQgQEAgcHVibGljOgog
ICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgICBjbGFzcyBCdWlsZGVyIHsKICAgICBwcml2YXRl
OgotICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKKyAgICAgICAgUmVm
UHRyPEpTT046Ok9iamVjdD4gbV9yZXN1bHQ7CiAKICAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+
IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICAgewogICAgICAgICAg
ICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMp
OwogICAgICAgICB9CiAKLSAgICAgICAgQnVpbGRlcihSZWY8LypPcGVuUGFyYW1ldGVycyovSW5z
cGVjdG9yT2JqZWN0PiYmIG9iamVjdCkKKyAgICAgICAgQnVpbGRlcihSZWY8LypPcGVuUGFyYW1l
dGVycyovSlNPTjo6T2JqZWN0PiYmIG9iamVjdCkKICAgICAgICAgICAgIDogbV9yZXN1bHQoV1RG
TW92ZShvYmplY3QpKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFU
RSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKQEAg
LTQzMiw5ICs0MzIsOSBAQCBwdWJsaWM6CiAgICAgICAgIFJlZjxPcGVuUGFyYW1ldGVycz4gcmVs
ZWFzZSgpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFs
bEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7Ci0gICAgICAgICAgICBDT01QSUxFX0FT
U0VSVChzaXplb2YoT3BlblBhcmFtZXRlcnMpID09IHNpemVvZihJbnNwZWN0b3JPYmplY3QpLCBj
YW5ub3RfY2FzdCk7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoT3BlblBhcmFt
ZXRlcnMpID09IHNpemVvZihKU09OOjpPYmplY3QpLCBjYW5ub3RfY2FzdCk7CiAKLSAgICAgICAg
ICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxs
KCk7CisgICAgICAgICAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBtX3Jlc3VsdC5yZWxl
YXNlTm9uTnVsbCgpOwogICAgICAgICAgICAgcmV0dXJuIFdURk1vdmUoKnJlaW50ZXJwcmV0X2Nh
c3Q8UmVmPE9wZW5QYXJhbWV0ZXJzPio+KCZyZXN1bHQpKTsKICAgICAgICAgfQogICAgIH07CkBA
IC00NDgsNyArNDQ4LDcgQEAgcHVibGljOgogICAgICAqLwogICAgIHN0YXRpYyBCdWlsZGVyPE5v
RmllbGRzU2V0PiBjcmVhdGUoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVs
ZHNTZXQ+KEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkpOworICAgICAgICByZXR1cm4gQnVpbGRl
cjxOb0ZpZWxkc1NldD4oSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSk7CiAgICAgfQogCiAgICAgLy8g
UHJvcGVydHkgbmFtZXMgZm9yIHR5cGUgZ2VuZXJhdGVkIGFzIG9wZW4uCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBl
Y3RlZC93b3JrZXItc3VwcG9ydGVkLWRvbWFpbnMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC93b3JrZXIt
c3VwcG9ydGVkLWRvbWFpbnMuanNvbi1yZXN1bHQKaW5kZXggNTE5MTExMjVjYzguLjUyMjY3YTRm
MzBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZ2VuZXJpYy9leHBlY3RlZC93b3JrZXItc3VwcG9ydGVkLWRvbWFpbnMuanNvbi1yZXN1
bHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dl
bmVyaWMvZXhwZWN0ZWQvd29ya2VyLXN1cHBvcnRlZC1kb21haW5zLmpzb24tcmVzdWx0CkBAIC0x
NjgsNyArMTY4LDcgQEAgcHJvdGVjdGVkOgogY2xhc3MgRG9tYWluQUJhY2tlbmREaXNwYXRjaGVy
IGZpbmFsIDogcHVibGljIFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyIHsKIHB1YmxpYzoK
ICAgICBzdGF0aWMgUmVmPERvbWFpbkFCYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEJhY2tlbmRE
aXNwYXRjaGVyJiwgRG9tYWluQUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwotICAgIHZvaWQg
ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SW5zcGVj
dG9yT2JqZWN0PiYmIG1lc3NhZ2UpIG92ZXJyaWRlOworICAgIHZvaWQgZGlzcGF0Y2gobG9uZyBy
ZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3Nh
Z2UpIG92ZXJyaWRlOwogcHJpdmF0ZToKICAgICB2b2lkIGVuYWJsZShsb25nIHJlcXVlc3RJZCwg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKICNpZiBFTkFCTEUoSU5TUEVD
VE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKQEAgLTE4NSw3ICsxODUsNyBAQCBwcml2YXRlOgog
Y2xhc3MgRG9tYWluQkJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIFN1cHBsZW1lbnRh
bEJhY2tlbmREaXNwYXRjaGVyIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPERvbWFpbkJCYWNr
ZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiwgRG9tYWluQkJhY2tlbmRE
aXNwYXRjaGVySGFuZGxlciopOwotICAgIHZvaWQgZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNv
bnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SW5zcGVjdG9yT2JqZWN0PiYmIG1lc3NhZ2UpIG92ZXJy
aWRlOworICAgIHZvaWQgZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0
aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpIG92ZXJyaWRlOwogcHJpdmF0ZToKICAg
ICB2b2lkIGVuYWJsZShsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBw
YXJhbWV0ZXJzKTsKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykK
QEAgLTI2MiwxMSArMjYyLDExIEBAIERvbWFpbkFCYWNrZW5kRGlzcGF0Y2hlcjo6RG9tYWluQUJh
Y2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzCiAgICAgbV9iYWNr
ZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNwYXRjaGVyRm9yRG9tYWluKEFTQ0lJTGl0ZXJhbCgi
RG9tYWluQSIpLCB0aGlzKTsKIH0KIAotdm9pZCBEb21haW5BQmFja2VuZERpc3BhdGNoZXI6OmRp
c3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEluc3BlY3Rv
ck9iamVjdD4mJiBtZXNzYWdlKQordm9pZCBEb21haW5BQmFja2VuZERpc3BhdGNoZXI6OmRpc3Bh
dGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVj
dD4mJiBtZXNzYWdlKQogewogICAgIFJlZjxEb21haW5BQmFja2VuZERpc3BhdGNoZXI+IHByb3Rl
Y3QoKnRoaXMpOwogCi0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1ldGVyczsKKyAg
ICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzOwogICAgIG1lc3NhZ2UtPmdldE9iamVj
dChBU0NJSUxpdGVyYWwoInBhcmFtcyIpLCBwYXJhbWV0ZXJzKTsKIAogICAgIGlmIChtZXRob2Qg
PT0gImVuYWJsZSIpCkBAIC0zMDYsMTEgKzMwNiwxMSBAQCBEb21haW5CQmFja2VuZERpc3BhdGNo
ZXI6OkRvbWFpbkJCYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERp
cwogICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbihB
U0NJSUxpdGVyYWwoIkRvbWFpbkIiKSwgdGhpcyk7CiB9CiAKLXZvaWQgRG9tYWluQkJhY2tlbmRE
aXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2Qs
IFJlZjxJbnNwZWN0b3JPYmplY3Q+JiYgbWVzc2FnZSkKK3ZvaWQgRG9tYWluQkJhY2tlbmREaXNw
YXRjaGVyOjpkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJl
ZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkKIHsKICAgICBSZWY8RG9tYWluQkJhY2tlbmREaXNw
YXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKIAotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBh
cmFtZXRlcnM7CisgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVyczsKICAgICBtZXNz
YWdlLT5nZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJwYXJhbXMiKSwgcGFyYW1ldGVycyk7CiAKICAg
ICBpZiAobWV0aG9kID09ICJlbmFibGUiKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL21hYy9leHBlY3RlZC9kZWZpbml0aW9ucy13aXRo
LW1hYy1wbGF0Zm9ybS5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9tYWMvZXhwZWN0ZWQvZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZv
cm0uanNvbi1yZXN1bHQKaW5kZXggNmQwN2Q5ZTAyYmMuLjNmNzgzY2Q0OGMwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvbWFjL2V4cGVj
dGVkL2RlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24tcmVzdWx0CisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9tYWMvZXhwZWN0ZWQvZGVm
aW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbi1yZXN1bHQKQEAgLTE1Miw3ICsxNTIsNyBA
QCBwcm90ZWN0ZWQ6CiBjbGFzcyBOZXR3b3JrQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJs
aWMgU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIgewogcHVibGljOgogICAgIHN0YXRpYyBS
ZWY8TmV0d29ya0JhY2tlbmREaXNwYXRjaGVyPiBjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImLCBO
ZXR3b3JrQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7Ci0gICAgdm9pZCBkaXNwYXRjaChsb25n
IHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxJbnNwZWN0b3JPYmplY3Q+JiYg
bWVzc2FnZSkgb3ZlcnJpZGU7CisgICAgdm9pZCBkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29u
c3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkgb3ZlcnJpZGU7
CiBwcml2YXRlOgogICAgIHZvaWQgbG9hZFJlc291cmNlKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiYmIHBhcmFtZXRlcnMpOwogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxU
RVJOQVRFX0RJU1BBVENIRVJTKQpAQCAtMjI4LDExICsyMjgsMTEgQEAgTmV0d29ya0JhY2tlbmRE
aXNwYXRjaGVyOjpOZXR3b3JrQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImIGJh
Y2tlbmREaXMKICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JE
b21haW4oQVNDSUlMaXRlcmFsKCJOZXR3b3JrIiksIHRoaXMpOwogfQogCi12b2lkIE5ldHdvcmtC
YWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYg
bWV0aG9kLCBSZWY8SW5zcGVjdG9yT2JqZWN0PiYmIG1lc3NhZ2UpCit2b2lkIE5ldHdvcmtCYWNr
ZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0
aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpCiB7CiAgICAgUmVmPE5ldHdvcmtCYWNr
ZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7CiAKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBwYXJhbWV0ZXJzOworICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnM7CiAg
ICAgbWVzc2FnZS0+Z2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgicGFyYW1zIiksIHBhcmFtZXRlcnMp
OwogCiAgICAgaWYgKG1ldGhvZCA9PSAibG9hZFJlc291cmNlIikKQEAgLTQxOSw3ICs0MTksNyBA
QCBjbGFzcyBOZXR3b3JrRXJyb3I7CiAKIAogbmFtZXNwYWNlIE5ldHdvcmsgewotY2xhc3MgTmV0
d29ya0Vycm9yIDogcHVibGljIEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0QmFzZSB7CitjbGFz
cyBOZXR3b3JrRXJyb3IgOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7CiBwdWJsaWM6CiAgICAg
ZW51bSB7CiAgICAgICAgIE5vRmllbGRzU2V0ID0gMCwKQEAgLTQzMSwxNCArNDMxLDE0IEBAIHB1
YmxpYzoKICAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICAgY2xhc3MgQnVpbGRlciB7CiAgICAg
cHJpdmF0ZToKLSAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CisgICAg
ICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG1fcmVzdWx0OwogCiAgICAgICAgIHRlbXBsYXRlPGlu
dCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgIHsKICAg
ICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4q
Pih0aGlzKTsKICAgICAgICAgfQogCi0gICAgICAgIEJ1aWxkZXIoUmVmPC8qTmV0d29ya0Vycm9y
Ki9JbnNwZWN0b3JPYmplY3Q+JiYgb2JqZWN0KQorICAgICAgICBCdWlsZGVyKFJlZjwvKk5ldHdv
cmtFcnJvciovSlNPTjo6T2JqZWN0PiYmIG9iamVjdCkKICAgICAgICAgICAgIDogbV9yZXN1bHQo
V1RGTW92ZShvYmplY3QpKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChT
VEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsK
QEAgLTQ2Myw5ICs0NjMsOSBAQCBwdWJsaWM6CiAgICAgICAgIFJlZjxOZXR3b3JrRXJyb3I+IHJl
bGVhc2UoKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBB
bGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwotICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoc2l6ZW9mKE5ldHdvcmtFcnJvcikgPT0gc2l6ZW9mKEluc3BlY3Rvck9iamVjdCksIGNh
bm5vdF9jYXN0KTsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihOZXR3b3JrRXJy
b3IpID09IHNpemVvZihKU09OOjpPYmplY3QpLCBjYW5ub3RfY2FzdCk7CiAKLSAgICAgICAgICAg
IFJlZjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7
CisgICAgICAgICAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNl
Tm9uTnVsbCgpOwogICAgICAgICAgICAgcmV0dXJuIFdURk1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8
UmVmPE5ldHdvcmtFcnJvcj4qPigmcmVzdWx0KSk7CiAgICAgICAgIH0KICAgICB9OwpAQCAtNDc5
LDcgKzQ3OSw3IEBAIHB1YmxpYzoKICAgICAgKi8KICAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxk
c1NldD4gY3JlYXRlKCkKICAgICB7Ci0gICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0
PihJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpKTsKKyAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9G
aWVsZHNTZXQ+KEpTT046Ok9iamVjdDo6Y3JlYXRlKCkpOwogICAgIH0KIH07CiAKZGlmZiAtLWdp
dCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBjMzIzMzJmNjNmZS4u
MDg0ODUzMWU2ZjAgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAxNy0xMS0wMyAgQ2FybG9zIEdhcmNpYSBDYW1wb3Mg
IDxjZ2FyY2lhQGlnYWxpYS5jb20+CisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogdXNlIEpTT046
OntBcnJheSxPYmplY3QsVmFsdWV9IGluc3RlYWQgb2YgSW5zcGVjdG9ye0FycmF5LE9iamVjdCxW
YWx1ZX0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3
MzYxOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVw
ZGF0ZSBJbnNwZWN0b3JWYWx1ZSB1bml0IHRlc3RzIHRvIHVzZSBKU09OIG5hbWVzcGFjZSBhbmQg
YWRkIG1vcmUgYmFzaWMgdGVzdHMgdG8gY292ZXIgYWxsIHRoZSBBUEkuCisKKyAgICAgICAgKiBU
ZXN0V2ViS2l0QVBJL1BsYXRmb3JtR1RLLmNtYWtlOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkv
VGVzdHMvSmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWUuY3BwOgorICAgICAgICAoVGVzdFdl
YktpdEFQSTo6VEVTVCk6CisKIDIwMTctMTEtMDIgIENocmlzdG9waGVyIFJlaWQgIDxjaHJpcy5y
ZWlkQHNvbnkuY29tPgogCiAgICAgICAgIEFkZCBhIEZpbGVTeXN0ZW0gbmFtZXNwYWNlIHRvIEZp
bGVTeXN0ZW0uY3BwCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1BsYXRmb3JtR1RL
LmNtYWtlIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9QbGF0Zm9ybUdUSy5jbWFrZQppbmRleCA2NGRh
MTAxZjQ2YS4uNDNjNmI0M2ViYzQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvUGxh
dGZvcm1HVEsuY21ha2UKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9QbGF0Zm9ybUdUSy5jbWFr
ZQpAQCAtMTYyLDYgKzE2MiwyMCBAQCBsaXN0KEFQUEVORCBUZXN0V1RGX1NPVVJDRVMKICAgICAk
e1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XVEYvZ2xpYi9Xb3JrUXVldWVHTGliLmNwcAogKQog
CithZGRfZXhlY3V0YWJsZShUZXN0SmF2YVNjcmlwdENvcmUKKyAgICAke3Rlc3RfbWFpbl9TT1VS
Q0VTfQorICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzQ29udHJvbGxlci5jcHAKKyAgICAk
e1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9KYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1ZS5j
cHAKKykKKwordGFyZ2V0X2xpbmtfbGlicmFyaWVzKFRlc3RKYXZhU2NyaXB0Q29yZSAke1Rlc3RK
YXZhU2NyaXB0Q29yZV9MSUJSQVJJRVN9KQorYWRkX2RlcGVuZGVuY2llcyhUZXN0SmF2YVNjcmlw
dENvcmUgJHtGb3J3YXJkaW5nSGVhZGVyc0ZvclRlc3RXZWJLaXRBUElfTkFNRX0gJHtGb3J3YXJk
aW5nTmV0d29ya0hlYWRlcnNGb3JUZXN0V2ViS2l0QVBJX05BTUV9KQorYWRkX3Rlc3QoVGVzdEph
dmFTY3JpcHRDb3JlICR7VEVTVFdFQktJVEFQSV9SVU5USU1FX09VVFBVVF9ESVJFQ1RPUll9L0ph
dmFTY3JpcHRDb3JlL1Rlc3RKYXZhU2NyaXB0Q29yZSkKK3NldF90ZXN0c19wcm9wZXJ0aWVzKFRl
c3RKYXZhU2NyaXB0Q29yZSBQUk9QRVJUSUVTIFRJTUVPVVQgNjApCitzZXRfdGFyZ2V0X3Byb3Bl
cnRpZXMoVGVzdEphdmFTY3JpcHRDb3JlIFBST1BFUlRJRVMKKyAgICBSVU5USU1FX09VVFBVVF9E
SVJFQ1RPUlkgJHtURVNUV0VCS0lUQVBJX1JVTlRJTUVfT1VUUFVUX0RJUkVDVE9SWX0vSmF2YVNj
cmlwdENvcmUvCispCisKIGlmIChDT01QSUxFUl9JU19HQ0NfT1JfQ0xBTkcpCiAgICAgV0VCS0lU
X0FERF9UQVJHRVRfQ1hYX0ZMQUdTKFRlc3RXZWJLaXQgLVduby1zaWduLWNvbXBhcmUKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtV25vLXVuZGVmCkBAIC0xNzAs
NCArMTg0LDggQEAgaWYgKENPTVBJTEVSX0lTX0dDQ19PUl9DTEFORykKICAgICBXRUJLSVRfQURE
X1RBUkdFVF9DWFhfRkxBR1MoVGVzdFdlYkNvcmUgLVduby1zaWduLWNvbXBhcmUKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLVduby11bmRlZgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtV25vLXVudXNlZC1wYXJhbWV0ZXIp
CisKKyAgICBXRUJLSVRfQUREX1RBUkdFVF9DWFhfRkxBR1MoVGVzdEphdmFTY3JpcHRDb3JlIC1X
bm8tc2lnbi1jb21wYXJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAtV25vLXVuZGVmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAtV25vLXVudXNlZC1wYXJhbWV0ZXIpCiBlbmRpZiAoKQpkaWZmIC0t
Z2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9KYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JW
YWx1ZS5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL0phdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvclZhbHVlLmNwcAppbmRleCAwZTc3OTQ2NGFiZC4uM2I4OTBhMTZhNWEgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvSmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWUu
Y3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvSmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yVmFsdWUuY3BwCkBAIC0yNiwxNjAgKzI2LDY2NSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
CiAjaW5jbHVkZSAiVGVzdC5oIgorI2luY2x1ZGUgIldURlN0cmluZ1V0aWxpdGllcy5oIgogI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclZhbHVlcy5oPgogCiB1c2luZyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yOwogCiBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CiAKLVRFU1QoSW5zcGVj
dG9yVmFsdWUsIE1lbW9yeUNvc3ROdWxsKQorVEVTVChJbnNwZWN0b3JWYWx1ZSwgQ29uc3RydWN0
KQogewotICAgIFJlZjxJbnNwZWN0b3JWYWx1ZT4gdmFsdWUgPSBJbnNwZWN0b3JWYWx1ZTo6bnVs
bCgpOwotICAgIHNpemVfdCBtZW1vcnlDb3N0ID0gdmFsdWUtPm1lbW9yeUNvc3QoKTsKLSAgICBF
WFBFQ1RfR1QobWVtb3J5Q29zdCwgMFUpOwotICAgIEVYUEVDVF9MRShtZW1vcnlDb3N0LCA4VSk7
Ci19CisgICAgeworICAgICAgICBSZWY8SlNPTjo6VmFsdWU+IHZhbHVlID0gSlNPTjo6VmFsdWU6
Om51bGwoKTsKKyAgICAgICAgRVhQRUNUX1RSVUUodmFsdWUtPnR5cGUoKSA9PSBKU09OOjpWYWx1
ZTo6VHlwZTo6TnVsbCk7CisgICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlLT5pc051bGwoKSk7Cisg
ICAgfQogCi1URVNUKEluc3BlY3RvclZhbHVlLCBNZW1vcnlDb3N0Qm9vbGVhbikKLXsKLSAgICBS
ZWY8SW5zcGVjdG9yVmFsdWU+IHZhbHVlID0gSW5zcGVjdG9yVmFsdWU6OmNyZWF0ZSh0cnVlKTsK
LSAgICBzaXplX3QgbWVtb3J5Q29zdCA9IHZhbHVlLT5tZW1vcnlDb3N0KCk7Ci0gICAgRVhQRUNU
X0dUKG1lbW9yeUNvc3QsIDBVKTsKLSAgICBFWFBFQ1RfTEUobWVtb3J5Q29zdCwgOFUpOwotfQor
ICAgIHsKKyAgICAgICAgUmVmPEpTT046OlZhbHVlPiB2YWx1ZSA9IEpTT046OlZhbHVlOjpjcmVh
dGUodHJ1ZSk7CisgICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlLT50eXBlKCkgPT0gSlNPTjo6VmFs
dWU6OlR5cGU6OkJvb2xlYW4pOworICAgICAgICBib29sIGJvb2xlYW5WYWx1ZTsKKyAgICAgICAg
RVhQRUNUX1RSVUUodmFsdWUtPmFzQm9vbGVhbihib29sZWFuVmFsdWUpKTsKKyAgICAgICAgRVhQ
RUNUX1RSVUUoYm9vbGVhblZhbHVlKTsKIAotVEVTVChJbnNwZWN0b3JWYWx1ZSwgTWVtb3J5Q29z
dERvdWJsZSkKLXsKLSAgICBSZWY8SW5zcGVjdG9yVmFsdWU+IHZhbHVlID0gSW5zcGVjdG9yVmFs
dWU6OmNyZWF0ZSgxLjApOwotICAgIHNpemVfdCBtZW1vcnlDb3N0ID0gdmFsdWUtPm1lbW9yeUNv
c3QoKTsKLSAgICBFWFBFQ1RfR1QobWVtb3J5Q29zdCwgMFUpOwotICAgIEVYUEVDVF9MRShtZW1v
cnlDb3N0LCA4VSk7Ci19CisgICAgICAgIHZhbHVlID0gSlNPTjo6VmFsdWU6OmNyZWF0ZShmYWxz
ZSk7CisgICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlLT50eXBlKCkgPT0gSlNPTjo6VmFsdWU6OlR5
cGU6OkJvb2xlYW4pOworICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+YXNCb29sZWFuKGJvb2xl
YW5WYWx1ZSkpOworICAgICAgICBFWFBFQ1RfRkFMU0UoYm9vbGVhblZhbHVlKTsKKyAgICB9CiAK
LVRFU1QoSW5zcGVjdG9yVmFsdWUsIE1lbW9yeUNvc3RJbnRlZ2VyKQotewotICAgIFJlZjxJbnNw
ZWN0b3JWYWx1ZT4gdmFsdWUgPSBJbnNwZWN0b3JWYWx1ZTo6Y3JlYXRlKDEpOwotICAgIHNpemVf
dCBtZW1vcnlDb3N0ID0gdmFsdWUtPm1lbW9yeUNvc3QoKTsKLSAgICBFWFBFQ1RfR1QobWVtb3J5
Q29zdCwgMFUpOwotICAgIEVYUEVDVF9MRShtZW1vcnlDb3N0LCA4VSk7Ci19CisgICAgeworICAg
ICAgICBSZWY8SlNPTjo6VmFsdWU+IHZhbHVlID0gSlNPTjo6VmFsdWU6OmNyZWF0ZSgxKTsKKyAg
ICAgICAgRVhQRUNUX1RSVUUodmFsdWUtPnR5cGUoKSA9PSBKU09OOjpWYWx1ZTo6VHlwZTo6SW50
ZWdlcik7CisgICAgICAgIGludCBpbnRlZ2VyVmFsdWU7CisgICAgICAgIEVYUEVDVF9UUlVFKHZh
bHVlLT5hc0ludGVnZXIoaW50ZWdlclZhbHVlKSk7CisgICAgICAgIEVYUEVDVF9FUShpbnRlZ2Vy
VmFsdWUsIDEpOwogCi1URVNUKEluc3BlY3RvclZhbHVlLCBNZW1vcnlDb3N0U3RyaW5nKQotewot
ICAgIFJlZjxJbnNwZWN0b3JWYWx1ZT4gdmFsdWUgPSBJbnNwZWN0b3JWYWx1ZTo6Y3JlYXRlKCJ0
ZXN0Iik7Ci0gICAgc2l6ZV90IG1lbW9yeUNvc3QgPSB2YWx1ZS0+bWVtb3J5Q29zdCgpOwotICAg
IEVYUEVDVF9HVChtZW1vcnlDb3N0LCAwVSk7Ci0gICAgRVhQRUNUX0xFKG1lbW9yeUNvc3QsIDM2
VSk7Ci19CisgICAgICAgIC8vIERvdWJsZXMgY2FuIGJlIGdldCBhcyBpbnRlZ2VycywgYnV0IG5v
dCB0aGUgb3RoZXIgd2F5IGFyb3VuZC4KKyAgICAgICAgZmxvYXQgZmxvYXRWYWx1ZTsKKyAgICAg
ICAgRVhQRUNUX0ZBTFNFKHZhbHVlLT5hc0RvdWJsZShmbG9hdFZhbHVlKSk7CiAKLVRFU1QoSW5z
cGVjdG9yVmFsdWUsIE1lbW9yeUNvc3RTdHJpbmdFbXB0eSkKLXsKLSAgICBSZWY8SW5zcGVjdG9y
VmFsdWU+IHZhbHVlID0gSW5zcGVjdG9yVmFsdWU6OmNyZWF0ZSgiIik7Ci0gICAgc2l6ZV90IG1l
bW9yeUNvc3QgPSB2YWx1ZS0+bWVtb3J5Q29zdCgpOwotICAgIEVYUEVDVF9HVChtZW1vcnlDb3N0
LCAwVSk7Ci0gICAgRVhQRUNUX0xFKG1lbW9yeUNvc3QsIDMyVSk7Ci19CisgICAgICAgIHZhbHVl
ID0gSlNPTjo6VmFsdWU6OmNyZWF0ZShzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpKTsK
KyAgICAgICAgRVhQRUNUX1RSVUUodmFsdWUtPmFzSW50ZWdlcihpbnRlZ2VyVmFsdWUpKTsKKyAg
ICAgICAgRVhQRUNUX0VRKGludGVnZXJWYWx1ZSwgc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+Ojpt
YXgoKSk7CisgICAgICAgIHVuc2lnbmVkIHVuc2lnbmVkVmFsdWU7CisgICAgICAgIEVYUEVDVF9U
UlVFKHZhbHVlLT5hc0ludGVnZXIodW5zaWduZWRWYWx1ZSkpOworICAgICAgICBsb25nIGxvbmdW
YWx1ZTsKKyAgICAgICAgRVhQRUNUX1RSVUUodmFsdWUtPmFzSW50ZWdlcihsb25nVmFsdWUpKTsK
KyAgICAgICAgbG9uZyBsb25nIGxvbmdMb25nVmFsdWU7CisgICAgICAgIEVYUEVDVF9UUlVFKHZh
bHVlLT5hc0ludGVnZXIobG9uZ0xvbmdWYWx1ZSkpOworICAgICAgICB1bnNpZ25lZCBsb25nIHVu
c2lnbmVkTG9uZ1ZhbHVlOworICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+YXNJbnRlZ2VyKHVu
c2lnbmVkTG9uZ1ZhbHVlKSk7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyB1bnNpZ25lZExv
bmdMb25nVmFsdWU7CisgICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlLT5hc0ludGVnZXIodW5zaWdu
ZWRMb25nTG9uZ1ZhbHVlKSk7CisgICAgfQogCi1URVNUKEluc3BlY3RvclZhbHVlLCBNZW1vcnlD
b3N0U3RyaW5nTnVsbCkKLXsKLSAgICBSZWY8SW5zcGVjdG9yVmFsdWU+IHZhbHVlID0gSW5zcGVj
dG9yVmFsdWU6OmNyZWF0ZShTdHJpbmcoKSk7Ci0gICAgc2l6ZV90IG1lbW9yeUNvc3QgPSB2YWx1
ZS0+bWVtb3J5Q29zdCgpOwotICAgIEVYUEVDVF9HVChtZW1vcnlDb3N0LCAwVSk7Ci0gICAgRVhQ
RUNUX0xFKG1lbW9yeUNvc3QsIDhVKTsKLX0KKyAgICB7CisgICAgICAgIFJlZjxKU09OOjpWYWx1
ZT4gdmFsdWUgPSBKU09OOjpWYWx1ZTo6Y3JlYXRlKDEuNSk7CisgICAgICAgIEVYUEVDVF9UUlVF
KHZhbHVlLT50eXBlKCkgPT0gSlNPTjo6VmFsdWU6OlR5cGU6OkRvdWJsZSk7CisgICAgICAgIGRv
dWJsZSBkb3VibGVWYWx1ZTsKKyAgICAgICAgRVhQRUNUX1RSVUUodmFsdWUtPmFzRG91YmxlKGRv
dWJsZVZhbHVlKSk7CisgICAgICAgIEVYUEVDVF9FUShkb3VibGVWYWx1ZSwgMS41KTsKIAotVEVT
VChJbnNwZWN0b3JWYWx1ZSwgTWVtb3J5Q29zdFN0cmluZ0dyb3dpbmcpCi17Ci0gICAgUmVmPElu
c3BlY3RvclZhbHVlPiB2YWx1ZUEgPSBJbnNwZWN0b3JWYWx1ZTo6Y3JlYXRlKCJ0Iik7Ci0gICAg
UmVmPEluc3BlY3RvclZhbHVlPiB2YWx1ZUIgPSBJbnNwZWN0b3JWYWx1ZTo6Y3JlYXRlKCJ0ZSIp
OwotICAgIFJlZjxJbnNwZWN0b3JWYWx1ZT4gdmFsdWVDID0gSW5zcGVjdG9yVmFsdWU6OmNyZWF0
ZSgidGVzIik7Ci0gICAgUmVmPEluc3BlY3RvclZhbHVlPiB2YWx1ZUQgPSBJbnNwZWN0b3JWYWx1
ZTo6Y3JlYXRlKCJ0ZXN0Iik7Ci0gICAgRVhQRUNUX0xUKHZhbHVlQS0+bWVtb3J5Q29zdCgpLCB2
YWx1ZUItPm1lbW9yeUNvc3QoKSk7Ci0gICAgRVhQRUNUX0xUKHZhbHVlQi0+bWVtb3J5Q29zdCgp
LCB2YWx1ZUMtPm1lbW9yeUNvc3QoKSk7Ci0gICAgRVhQRUNUX0xUKHZhbHVlQy0+bWVtb3J5Q29z
dCgpLCB2YWx1ZUQtPm1lbW9yeUNvc3QoKSk7Ci19CisgICAgICAgIGZsb2F0IGZsb2F0VmFsdWU7
CisgICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlLT5hc0RvdWJsZShmbG9hdFZhbHVlKSk7CiAKLVRF
U1QoSW5zcGVjdG9yVmFsdWUsIE1lbW9yeUNvc3RTdHJpbmdVbmljb2RlKQotewotICAgIFJlZjxJ
bnNwZWN0b3JWYWx1ZT4gdmFsdWVBID0gSW5zcGVjdG9yVmFsdWU6OmNyZWF0ZSgidCIpOwotICAg
IFJlZjxJbnNwZWN0b3JWYWx1ZT4gdmFsdWVCID0gSW5zcGVjdG9yVmFsdWU6OmNyZWF0ZSgi8J+Y
gCIpOwotICAgIEVYUEVDVF9MVCh2YWx1ZUEtPm1lbW9yeUNvc3QoKSwgdmFsdWVCLT5tZW1vcnlD
b3N0KCkpOwotfQorICAgICAgICBpbnQgaW50ZWdlclZhbHVlOworICAgICAgICBFWFBFQ1RfVFJV
RSh2YWx1ZS0+YXNJbnRlZ2VyKGludGVnZXJWYWx1ZSkpOworICAgICAgICBFWFBFQ1RfRVEoaW50
ZWdlclZhbHVlLCBzdGF0aWNfY2FzdDxpbnQ+KDEuNSkpOwogCi1URVNUKEluc3BlY3RvclZhbHVl
LCBNZW1vcnlDb3N0T2JqZWN0KQotewotICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlID0g
SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKLSAgICB2YWx1ZS0+c2V0VmFsdWUoInRlc3QiLCBJ
bnNwZWN0b3JWYWx1ZTo6bnVsbCgpKTsKLSAgICBzaXplX3QgbWVtb3J5Q29zdCA9IHZhbHVlLT5t
ZW1vcnlDb3N0KCk7Ci0gICAgRVhQRUNUX0dUKG1lbW9yeUNvc3QsIDBVKTsKLSAgICBFWFBFQ1Rf
TEUobWVtb3J5Q29zdCwgMjBVKTsKKyAgICAgICAgdW5zaWduZWQgdW5zaWduZWRWYWx1ZTsKKyAg
ICAgICAgRVhQRUNUX1RSVUUodmFsdWUtPmFzSW50ZWdlcih1bnNpZ25lZFZhbHVlKSk7CisgICAg
ICAgIGxvbmcgbG9uZ1ZhbHVlOworICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+YXNJbnRlZ2Vy
KGxvbmdWYWx1ZSkpOworICAgICAgICBsb25nIGxvbmcgbG9uZ0xvbmdWYWx1ZTsKKyAgICAgICAg
RVhQRUNUX1RSVUUodmFsdWUtPmFzSW50ZWdlcihsb25nTG9uZ1ZhbHVlKSk7CisgICAgICAgIHVu
c2lnbmVkIGxvbmcgdW5zaWduZWRMb25nVmFsdWU7CisgICAgICAgIEVYUEVDVF9UUlVFKHZhbHVl
LT5hc0ludGVnZXIodW5zaWduZWRMb25nVmFsdWUpKTsKKyAgICAgICAgdW5zaWduZWQgbG9uZyBs
b25nIHVuc2lnbmVkTG9uZ0xvbmdWYWx1ZTsKKyAgICAgICAgRVhQRUNUX1RSVUUodmFsdWUtPmFz
SW50ZWdlcih1bnNpZ25lZExvbmdMb25nVmFsdWUpKTsKKyAgICB9CisKKyAgICB7CisgICAgICAg
IFJlZjxKU09OOjpWYWx1ZT4gdmFsdWUgPSBKU09OOjpWYWx1ZTo6Y3JlYXRlKCJ3ZWJraXQiKTsK
KyAgICAgICAgRVhQRUNUX1RSVUUodmFsdWUtPnR5cGUoKSA9PSBKU09OOjpWYWx1ZTo6VHlwZTo6
U3RyaW5nKTsKKyAgICAgICAgU3RyaW5nIHN0cmluZ1ZhbHVlOworICAgICAgICBFWFBFQ1RfVFJV
RSh2YWx1ZS0+YXNTdHJpbmcoc3RyaW5nVmFsdWUpKTsKKyAgICAgICAgRVhQRUNUX0VRKHN0cmlu
Z1ZhbHVlLCAid2Via2l0Iik7CisKKyAgICAgICAgU3RyaW5nIG51bGxTdHJpbmc7CisgICAgICAg
IHZhbHVlID0gSlNPTjo6VmFsdWU6OmNyZWF0ZShudWxsU3RyaW5nKTsKKyAgICAgICAgRVhQRUNU
X1RSVUUodmFsdWUtPmFzU3RyaW5nKHN0cmluZ1ZhbHVlKSk7CisgICAgICAgIEVYUEVDVF9UUlVF
KHN0cmluZ1ZhbHVlLmlzTnVsbCgpKTsKKworICAgICAgICB2YWx1ZSA9IEpTT046OlZhbHVlOjpj
cmVhdGUoZW1wdHlTdHJpbmcoKSk7CisgICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlLT5hc1N0cmlu
ZyhzdHJpbmdWYWx1ZSkpOworICAgICAgICBFWFBFQ1RfRkFMU0Uoc3RyaW5nVmFsdWUuaXNOdWxs
KCkpOworICAgICAgICBFWFBFQ1RfVFJVRShzdHJpbmdWYWx1ZS5pc0VtcHR5KCkpOworICAgIH0K
KworICAgIHsKKyAgICAgICAgUmVmPEpTT046OkFycmF5PiBhcnJheSA9IEpTT046OkFycmF5Ojpj
cmVhdGUoKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoYXJyYXktPnR5cGUoKSA9PSBKU09OOjpWYWx1
ZTo6VHlwZTo6QXJyYXkpOworICAgICAgICBFWFBFQ1RfRVEoYXJyYXktPmxlbmd0aCgpLCAwVSk7
CisgICAgfQorCisgICAgeworICAgICAgICBSZWY8SlNPTjo6T2JqZWN0PiBvYmplY3QgPSBKU09O
OjpPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBFWFBFQ1RfVFJVRShvYmplY3QtPnR5cGUoKSA9
PSBKU09OOjpWYWx1ZTo6VHlwZTo6T2JqZWN0KTsKKyAgICAgICAgRVhQRUNUX0VRKG9iamVjdC0+
c2l6ZSgpLCAwVSk7CisgICAgfQogfQogCi1URVNUKEluc3BlY3RvclZhbHVlLCBNZW1vcnlDb3N0
T2JqZWN0RW1wdHkpCitURVNUKEluc3BlY3RvckFycmF5LCBCYXNpYykKIHsKLSAgICBSZWY8SW5z
cGVjdG9yT2JqZWN0PiB2YWx1ZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgc2l6
ZV90IG1lbW9yeUNvc3QgPSB2YWx1ZS0+bWVtb3J5Q29zdCgpOwotICAgIEVYUEVDVF9HVChtZW1v
cnlDb3N0LCAwVSk7Ci0gICAgRVhQRUNUX0xFKG1lbW9yeUNvc3QsIDhVKTsKKyAgICBSZWY8SlNP
Tjo6QXJyYXk+IGFycmF5ID0gSlNPTjo6QXJyYXk6OmNyZWF0ZSgpOworCisgICAgYXJyYXktPnB1
c2hWYWx1ZShKU09OOjpWYWx1ZTo6bnVsbCgpKTsKKyAgICBFWFBFQ1RfRVEoYXJyYXktPmxlbmd0
aCgpLCAxVSk7CisgICAgYXV0byB2YWx1ZSA9IGFycmF5LT5nZXQoMCk7CisgICAgRVhQRUNUX1RS
VUUodmFsdWUtPmlzTnVsbCgpKTsKKworICAgIGFycmF5LT5wdXNoQm9vbGVhbih0cnVlKTsKKyAg
ICBFWFBFQ1RfRVEoYXJyYXktPmxlbmd0aCgpLCAyVSk7CisgICAgdmFsdWUgPSBhcnJheS0+Z2V0
KDEpOworICAgIEVYUEVDVF9UUlVFKHZhbHVlLT50eXBlKCkgPT0gSlNPTjo6VmFsdWU6OlR5cGU6
OkJvb2xlYW4pOworICAgIGJvb2wgYm9vbGVhblZhbHVlOworICAgIEVYUEVDVF9UUlVFKHZhbHVl
LT5hc0Jvb2xlYW4oYm9vbGVhblZhbHVlKSk7CisgICAgRVhQRUNUX0VRKGJvb2xlYW5WYWx1ZSwg
dHJ1ZSk7CisKKyAgICBhcnJheS0+cHVzaEludGVnZXIoMSk7CisgICAgRVhQRUNUX0VRKGFycmF5
LT5sZW5ndGgoKSwgM1UpOworICAgIHZhbHVlID0gYXJyYXktPmdldCgyKTsKKyAgICBFWFBFQ1Rf
VFJVRSh2YWx1ZS0+dHlwZSgpID09IEpTT046OlZhbHVlOjpUeXBlOjpJbnRlZ2VyKTsKKyAgICBp
bnQgaW50ZWdlclZhbHVlOworICAgIEVYUEVDVF9UUlVFKHZhbHVlLT5hc0ludGVnZXIoaW50ZWdl
clZhbHVlKSk7CisgICAgRVhQRUNUX0VRKGludGVnZXJWYWx1ZSwgMSk7CisKKyAgICBhcnJheS0+
cHVzaERvdWJsZSgxLjUpOworICAgIEVYUEVDVF9FUShhcnJheS0+bGVuZ3RoKCksIDRVKTsKKyAg
ICB2YWx1ZSA9IGFycmF5LT5nZXQoMyk7CisgICAgRVhQRUNUX1RSVUUodmFsdWUtPnR5cGUoKSA9
PSBKU09OOjpWYWx1ZTo6VHlwZTo6RG91YmxlKTsKKyAgICBkb3VibGUgZG91YmxlVmFsdWU7Cisg
ICAgRVhQRUNUX1RSVUUodmFsdWUtPmFzRG91YmxlKGRvdWJsZVZhbHVlKSk7CisgICAgRVhQRUNU
X0VRKGRvdWJsZVZhbHVlLCAxLjUpOworCisgICAgYXJyYXktPnB1c2hTdHJpbmcoIndlYmtpdCIp
OworICAgIEVYUEVDVF9FUShhcnJheS0+bGVuZ3RoKCksIDVVKTsKKyAgICB2YWx1ZSA9IGFycmF5
LT5nZXQoNCk7CisgICAgRVhQRUNUX1RSVUUodmFsdWUtPnR5cGUoKSA9PSBKU09OOjpWYWx1ZTo6
VHlwZTo6U3RyaW5nKTsKKyAgICBTdHJpbmcgc3RyaW5nVmFsdWU7CisgICAgRVhQRUNUX1RSVUUo
dmFsdWUtPmFzU3RyaW5nKHN0cmluZ1ZhbHVlKSk7CisgICAgRVhQRUNUX0VRKHN0cmluZ1ZhbHVl
LCAid2Via2l0Iik7CisKKyAgICBhcnJheS0+cHVzaE9iamVjdChKU09OOjpPYmplY3Q6OmNyZWF0
ZSgpKTsKKyAgICBFWFBFQ1RfRVEoYXJyYXktPmxlbmd0aCgpLCA2VSk7CisgICAgdmFsdWUgPSBh
cnJheS0+Z2V0KDUpOworICAgIEVYUEVDVF9UUlVFKHZhbHVlLT50eXBlKCkgPT0gSlNPTjo6VmFs
dWU6OlR5cGU6Ok9iamVjdCk7CisgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gb2JqZWN0VmFsdWU7
CisgICAgRVhQRUNUX1RSVUUodmFsdWUtPmFzT2JqZWN0KG9iamVjdFZhbHVlKSk7CisgICAgRVhQ
RUNUX0VRKG9iamVjdFZhbHVlLT5zaXplKCksIDBVKTsKKworICAgIGFycmF5LT5wdXNoQXJyYXko
SlNPTjo6QXJyYXk6OmNyZWF0ZSgpKTsKKyAgICBFWFBFQ1RfRVEoYXJyYXktPmxlbmd0aCgpLCA3
VSk7CisgICAgdmFsdWUgPSBhcnJheS0+Z2V0KDYpOworICAgIEVYUEVDVF9UUlVFKHZhbHVlLT50
eXBlKCkgPT0gSlNPTjo6VmFsdWU6OlR5cGU6OkFycmF5KTsKKyAgICBSZWZQdHI8SlNPTjo6QXJy
YXk+IGFycmF5VmFsdWU7CisgICAgRVhQRUNUX1RSVUUodmFsdWUtPmFzQXJyYXkoYXJyYXlWYWx1
ZSkpOworICAgIEVYUEVDVF9FUShhcnJheVZhbHVlLT5sZW5ndGgoKSwgMFUpOworCisgICAgYXV0
byBpdCA9IGFycmF5LT5iZWdpbigpOworICAgIHZhbHVlID0gaXQtPmdldCgpOworICAgIEVYUEVD
VF9UUlVFKHZhbHVlLT50eXBlKCkgPT0gSlNPTjo6VmFsdWU6OlR5cGU6Ok51bGwpOworICAgICsr
aXQ7CisgICAgRVhQRUNUX0ZBTFNFKGl0ID09IGFycmF5LT5lbmQoKSk7CisKKyAgICB2YWx1ZSA9
IGl0LT5nZXQoKTsKKyAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+dHlwZSgpID09IEpTT046OlZhbHVl
OjpUeXBlOjpCb29sZWFuKTsKKyAgICArK2l0OworICAgIEVYUEVDVF9GQUxTRShpdCA9PSBhcnJh
eS0+ZW5kKCkpOworCisgICAgdmFsdWUgPSBpdC0+Z2V0KCk7CisgICAgRVhQRUNUX1RSVUUodmFs
dWUtPnR5cGUoKSA9PSBKU09OOjpWYWx1ZTo6VHlwZTo6SW50ZWdlcik7CisgICAgKytpdDsKKyAg
ICBFWFBFQ1RfRkFMU0UoaXQgPT0gYXJyYXktPmVuZCgpKTsKKworICAgIHZhbHVlID0gaXQtPmdl
dCgpOworICAgIEVYUEVDVF9UUlVFKHZhbHVlLT50eXBlKCkgPT0gSlNPTjo6VmFsdWU6OlR5cGU6
OkRvdWJsZSk7CisgICAgKytpdDsKKyAgICBFWFBFQ1RfRkFMU0UoaXQgPT0gYXJyYXktPmVuZCgp
KTsKKworICAgIHZhbHVlID0gaXQtPmdldCgpOworICAgIEVYUEVDVF9UUlVFKHZhbHVlLT50eXBl
KCkgPT0gSlNPTjo6VmFsdWU6OlR5cGU6OlN0cmluZyk7CisgICAgKytpdDsKKyAgICBFWFBFQ1Rf
RkFMU0UoaXQgPT0gYXJyYXktPmVuZCgpKTsKKworICAgIHZhbHVlID0gaXQtPmdldCgpOworICAg
IEVYUEVDVF9UUlVFKHZhbHVlLT50eXBlKCkgPT0gSlNPTjo6VmFsdWU6OlR5cGU6Ok9iamVjdCk7
CisgICAgKytpdDsKKyAgICBFWFBFQ1RfRkFMU0UoaXQgPT0gYXJyYXktPmVuZCgpKTsKKworICAg
IHZhbHVlID0gaXQtPmdldCgpOworICAgIEVYUEVDVF9UUlVFKHZhbHVlLT50eXBlKCkgPT0gSlNP
Tjo6VmFsdWU6OlR5cGU6OkFycmF5KTsKKyAgICArK2l0OworICAgIEVYUEVDVF9UUlVFKGl0ID09
IGFycmF5LT5lbmQoKSk7CiB9CiAKLVRFU1QoSW5zcGVjdG9yVmFsdWUsIE1lbW9yeUNvc3RPYmpl
Y3RHcm93aW5nKQorVEVTVChJbnNwZWN0b3JPYmplY3QsIEJhc2ljKQogewotICAgIFJlZjxJbnNw
ZWN0b3JPYmplY3Q+IHZhbHVlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBSZWY8
SlNPTjo6T2JqZWN0PiBvYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworCisgICAgb2Jq
ZWN0LT5zZXRWYWx1ZSgibnVsbCIsIEpTT046OlZhbHVlOjpudWxsKCkpOworICAgIEVYUEVDVF9F
UShvYmplY3QtPnNpemUoKSwgMVUpOworICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gdmFsdWU7Cisg
ICAgRVhQRUNUX1RSVUUob2JqZWN0LT5nZXRWYWx1ZSgibnVsbCIsIHZhbHVlKSk7CisgICAgRVhQ
RUNUX1RSVUUodmFsdWUtPmlzTnVsbCgpKTsKKworICAgIG9iamVjdC0+c2V0Qm9vbGVhbigiYm9v
bGVhbiIsIHRydWUpOworICAgIEVYUEVDVF9FUShvYmplY3QtPnNpemUoKSwgMlUpOworICAgIGJv
b2wgYm9vbGVhblZhbHVlOworICAgIEVYUEVDVF9UUlVFKG9iamVjdC0+Z2V0Qm9vbGVhbigiYm9v
bGVhbiIsIGJvb2xlYW5WYWx1ZSkpOworICAgIEVYUEVDVF9FUShib29sZWFuVmFsdWUsIHRydWUp
OworCisgICAgb2JqZWN0LT5zZXRJbnRlZ2VyKCJpbnRlZ2VyIiwgMSk7CisgICAgRVhQRUNUX0VR
KG9iamVjdC0+c2l6ZSgpLCAzVSk7CisgICAgaW50IGludGVnZXJWYWx1ZTsKKyAgICBFWFBFQ1Rf
VFJVRShvYmplY3QtPmdldEludGVnZXIoImludGVnZXIiLCBpbnRlZ2VyVmFsdWUpKTsKKyAgICBF
WFBFQ1RfRVEoaW50ZWdlclZhbHVlLCAxKTsKKworICAgIG9iamVjdC0+c2V0RG91YmxlKCJkb3Vi
bGUiLCAxLjUpOworICAgIEVYUEVDVF9FUShvYmplY3QtPnNpemUoKSwgNFUpOworICAgIGRvdWJs
ZSBkb3VibGVWYWx1ZTsKKyAgICBFWFBFQ1RfVFJVRShvYmplY3QtPmdldERvdWJsZSgiZG91Ymxl
IiwgZG91YmxlVmFsdWUpKTsKKyAgICBFWFBFQ1RfRVEoZG91YmxlVmFsdWUsIDEuNSk7CisKKyAg
ICBvYmplY3QtPnNldFN0cmluZygic3RyaW5nIiwgIndlYmtpdCIpOworICAgIEVYUEVDVF9FUShv
YmplY3QtPnNpemUoKSwgNVUpOworICAgIFN0cmluZyBzdHJpbmdWYWx1ZTsKKyAgICBFWFBFQ1Rf
VFJVRShvYmplY3QtPmdldFN0cmluZygic3RyaW5nIiwgc3RyaW5nVmFsdWUpKTsKKyAgICBFWFBF
Q1RfRVEoc3RyaW5nVmFsdWUsICJ3ZWJraXQiKTsKKworICAgIG9iamVjdC0+c2V0T2JqZWN0KCJv
YmplY3QiLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpKTsKKyAgICBFWFBFQ1RfRVEob2JqZWN0LT5z
aXplKCksIDZVKTsKKyAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBvYmplY3RWYWx1ZTsKKyAgICBF
WFBFQ1RfVFJVRShvYmplY3QtPmdldE9iamVjdCgib2JqZWN0Iiwgb2JqZWN0VmFsdWUpKTsKKyAg
ICBFWFBFQ1RfRVEob2JqZWN0VmFsdWUtPnNpemUoKSwgMFUpOworCisgICAgb2JqZWN0LT5zZXRB
cnJheSgiYXJyYXkiLCBKU09OOjpBcnJheTo6Y3JlYXRlKCkpOworICAgIEVYUEVDVF9FUShvYmpl
Y3QtPnNpemUoKSwgN1UpOworICAgIFJlZlB0cjxKU09OOjpBcnJheT4gYXJyYXlWYWx1ZTsKKyAg
ICBFWFBFQ1RfVFJVRShvYmplY3QtPmdldEFycmF5KCJhcnJheSIsIGFycmF5VmFsdWUpKTsKKyAg
ICBFWFBFQ1RfRVEoYXJyYXlWYWx1ZS0+bGVuZ3RoKCksIDBVKTsKKworICAgIFZlY3Rvcjxjb25z
dCBjaGFyKj4ga2V5cyA9IHsgIm51bGwiLCAiYm9vbGVhbiIsICJpbnRlZ2VyIiwgImRvdWJsZSIs
ICJzdHJpbmciLCAib2JqZWN0IiwgImFycmF5IiB9OworICAgIGF1dG8gZW5kID0gb2JqZWN0LT5l
bmQoKTsKKyAgICBmb3IgKGF1dG8gaXQgPSBvYmplY3QtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkgeworICAgICAgICBhdXRvIHBvc2l0aW9uID0ga2V5cy5maW5kKGl0LT5rZXkpOworICAgICAg
ICBFWFBFQ1RfTkUocG9zaXRpb24sIG5vdEZvdW5kKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoaXQg
PT0gb2JqZWN0LT5maW5kKGtleXNbcG9zaXRpb25dKSk7CisgICAgICAgIGtleXMucmVtb3ZlKHBv
c2l0aW9uKTsKKyAgICB9CisgICAgRVhQRUNUX1RSVUUoa2V5cy5pc0VtcHR5KCkpOwogCi0gICAg
dmFsdWUtPnNldFZhbHVlKCIxIiwgSW5zcGVjdG9yVmFsdWU6Om51bGwoKSk7Ci0gICAgc2l6ZV90
IG1lbW9yeUNvc3QxID0gdmFsdWUtPm1lbW9yeUNvc3QoKTsKKyAgICBvYmplY3QtPnJlbW92ZSgi
bnVsbCIpOworICAgIEVYUEVDVF9FUShvYmplY3QtPnNpemUoKSwgNlUpOworICAgIEVYUEVDVF9U
UlVFKG9iamVjdC0+ZmluZCgibnVsbCIpID09IG9iamVjdC0+ZW5kKCkpOwogCi0gICAgdmFsdWUt
PnNldFZhbHVlKCIyIiwgSW5zcGVjdG9yVmFsdWU6Om51bGwoKSk7Ci0gICAgc2l6ZV90IG1lbW9y
eUNvc3QyID0gdmFsdWUtPm1lbW9yeUNvc3QoKTsKKyAgICBvYmplY3QtPnJlbW92ZSgiYm9vbGVh
biIpOworICAgIEVYUEVDVF9FUShvYmplY3QtPnNpemUoKSwgNVUpOworICAgIEVYUEVDVF9UUlVF
KG9iamVjdC0+ZmluZCgiYm9vbGVhbiIpID09IG9iamVjdC0+ZW5kKCkpOwogCi0gICAgdmFsdWUt
PnNldFZhbHVlKCIzIiwgSW5zcGVjdG9yVmFsdWU6Om51bGwoKSk7Ci0gICAgc2l6ZV90IG1lbW9y
eUNvc3QzID0gdmFsdWUtPm1lbW9yeUNvc3QoKTsKKyAgICBvYmplY3QtPnJlbW92ZSgiaW50ZWdl
ciIpOworICAgIEVYUEVDVF9FUShvYmplY3QtPnNpemUoKSwgNFUpOworICAgIEVYUEVDVF9UUlVF
KG9iamVjdC0+ZmluZCgiaW50ZWdlciIpID09IG9iamVjdC0+ZW5kKCkpOwogCi0gICAgdmFsdWUt
PnNldFZhbHVlKCI0IiwgSW5zcGVjdG9yVmFsdWU6Om51bGwoKSk7Ci0gICAgc2l6ZV90IG1lbW9y
eUNvc3Q0ID0gdmFsdWUtPm1lbW9yeUNvc3QoKTsKKyAgICBvYmplY3QtPnJlbW92ZSgiZG91Ymxl
Iik7CisgICAgRVhQRUNUX0VRKG9iamVjdC0+c2l6ZSgpLCAzVSk7CisgICAgRVhQRUNUX1RSVUUo
b2JqZWN0LT5maW5kKCJkb3VibGUiKSA9PSBvYmplY3QtPmVuZCgpKTsKIAotICAgIEVYUEVDVF9M
VChtZW1vcnlDb3N0MSwgbWVtb3J5Q29zdDIpOwotICAgIEVYUEVDVF9MVChtZW1vcnlDb3N0Miwg
bWVtb3J5Q29zdDMpOwotICAgIEVYUEVDVF9MVChtZW1vcnlDb3N0MywgbWVtb3J5Q29zdDQpOwor
ICAgIG9iamVjdC0+cmVtb3ZlKCJzdHJpbmciKTsKKyAgICBFWFBFQ1RfRVEob2JqZWN0LT5zaXpl
KCksIDJVKTsKKyAgICBFWFBFQ1RfVFJVRShvYmplY3QtPmZpbmQoInN0cmluZyIpID09IG9iamVj
dC0+ZW5kKCkpOworCisgICAgb2JqZWN0LT5yZW1vdmUoIm9iamVjdCIpOworICAgIEVYUEVDVF9F
UShvYmplY3QtPnNpemUoKSwgMVUpOworICAgIEVYUEVDVF9UUlVFKG9iamVjdC0+ZmluZCgib2Jq
ZWN0IikgPT0gb2JqZWN0LT5lbmQoKSk7CisKKyAgICBvYmplY3QtPnJlbW92ZSgiYXJyYXkiKTsK
KyAgICBFWFBFQ1RfRVEob2JqZWN0LT5zaXplKCksIDBVKTsKKyAgICBFWFBFQ1RfVFJVRShvYmpl
Y3QtPmZpbmQoImFycmF5IikgPT0gb2JqZWN0LT5lbmQoKSk7CiB9CiAKLVRFU1QoSW5zcGVjdG9y
VmFsdWUsIE1lbW9yeUNvc3RBcnJheSkKK1RFU1QoSW5zcGVjdG9yVmFsdWUsIFRvSlNPTlN0cmlu
ZykKIHsKLSAgICBSZWY8SW5zcGVjdG9yQXJyYXk+IHZhbHVlID0gSW5zcGVjdG9yQXJyYXk6OmNy
ZWF0ZSgpOwotICAgIHZhbHVlLT5wdXNoVmFsdWUoSW5zcGVjdG9yVmFsdWU6Om51bGwoKSk7Ci0g
ICAgc2l6ZV90IG1lbW9yeUNvc3QgPSB2YWx1ZS0+bWVtb3J5Q29zdCgpOwotICAgIEVYUEVDVF9H
VChtZW1vcnlDb3N0LCAwVSk7Ci0gICAgRVhQRUNUX0xFKG1lbW9yeUNvc3QsIDE2VSk7CisgICAg
eworICAgICAgICBSZWY8SlNPTjo6VmFsdWU+IHZhbHVlID0gSlNPTjo6VmFsdWU6Om51bGwoKTsK
KyAgICAgICAgRVhQRUNUX0VRKHZhbHVlLT50b0pTT05TdHJpbmcoKSwgIm51bGwiKTsKKyAgICB9
CisKKyAgICB7CisgICAgICAgIFJlZjxKU09OOjpWYWx1ZT4gdmFsdWUgPSBKU09OOjpWYWx1ZTo6
Y3JlYXRlKHRydWUpOworICAgICAgICBFWFBFQ1RfRVEodmFsdWUtPnRvSlNPTlN0cmluZygpLCAi
dHJ1ZSIpOworCisgICAgICAgIHZhbHVlID0gSlNPTjo6VmFsdWU6OmNyZWF0ZShmYWxzZSk7Cisg
ICAgICAgIEVYUEVDVF9FUSh2YWx1ZS0+dG9KU09OU3RyaW5nKCksICJmYWxzZSIpOworICAgIH0K
KworICAgIHsKKyAgICAgICAgUmVmPEpTT046OlZhbHVlPiB2YWx1ZSA9IEpTT046OlZhbHVlOjpj
cmVhdGUoMSk7CisgICAgICAgIEVYUEVDVF9FUSh2YWx1ZS0+dG9KU09OU3RyaW5nKCksICIxIik7
CisgICAgfQorCisgICAgeworICAgICAgICBSZWY8SlNPTjo6VmFsdWU+IHZhbHVlID0gSlNPTjo6
VmFsdWU6OmNyZWF0ZSgxLjUpOworICAgICAgICBFWFBFQ1RfRVEodmFsdWUtPnRvSlNPTlN0cmlu
ZygpLCAiMS41Iik7CisgICAgfQorCisgICAgeworICAgICAgICBSZWY8SlNPTjo6VmFsdWU+IHZh
bHVlID0gSlNPTjo6VmFsdWU6OmNyZWF0ZSgid2Via2l0Iik7CisgICAgICAgIEVYUEVDVF9FUSh2
YWx1ZS0+dG9KU09OU3RyaW5nKCksICJcIndlYmtpdFwiIik7CisgICAgfQorCisgICAgeworICAg
ICAgICBSZWY8SlNPTjo6QXJyYXk+IGFycmF5ID0gSlNPTjo6QXJyYXk6OmNyZWF0ZSgpOworICAg
ICAgICBFWFBFQ1RfRVEoYXJyYXktPnRvSlNPTlN0cmluZygpLCAiW10iKTsKKyAgICAgICAgYXJy
YXktPnB1c2hWYWx1ZShKU09OOjpWYWx1ZTo6bnVsbCgpKTsKKyAgICAgICAgRVhQRUNUX0VRKGFy
cmF5LT50b0pTT05TdHJpbmcoKSwgIltudWxsXSIpOworICAgICAgICBhcnJheS0+cHVzaEJvb2xl
YW4odHJ1ZSk7CisgICAgICAgIGFycmF5LT5wdXNoQm9vbGVhbihmYWxzZSk7CisgICAgICAgIEVY
UEVDVF9FUShhcnJheS0+dG9KU09OU3RyaW5nKCksICJbbnVsbCx0cnVlLGZhbHNlXSIpOworICAg
ICAgICBhcnJheS0+cHVzaEludGVnZXIoMSk7CisgICAgICAgIGFycmF5LT5wdXNoRG91YmxlKDEu
NSk7CisgICAgICAgIEVYUEVDVF9FUShhcnJheS0+dG9KU09OU3RyaW5nKCksICJbbnVsbCx0cnVl
LGZhbHNlLDEsMS41XSIpOworICAgICAgICBhcnJheS0+cHVzaFN0cmluZygid2Via2l0Iik7Cisg
ICAgICAgIEVYUEVDVF9FUShhcnJheS0+dG9KU09OU3RyaW5nKCksICJbbnVsbCx0cnVlLGZhbHNl
LDEsMS41LFwid2Via2l0XCJdIik7CisgICAgICAgIFJlZjxKU09OOjpBcnJheT4gc3ViQXJyYXkg
PSBKU09OOjpBcnJheTo6Y3JlYXRlKCk7CisgICAgICAgIHN1YkFycmF5LT5wdXNoU3RyaW5nKCJz
dHJpbmciKTsKKyAgICAgICAgc3ViQXJyYXktPnB1c2hPYmplY3QoSlNPTjo6T2JqZWN0OjpjcmVh
dGUoKSk7CisgICAgICAgIEVYUEVDVF9FUShzdWJBcnJheS0+dG9KU09OU3RyaW5nKCksICJbXCJz
dHJpbmdcIix7fV0iKTsKKyAgICAgICAgYXJyYXktPnB1c2hBcnJheShXVEZNb3ZlKHN1YkFycmF5
KSk7CisgICAgICAgIEVYUEVDVF9FUShhcnJheS0+dG9KU09OU3RyaW5nKCksICJbbnVsbCx0cnVl
LGZhbHNlLDEsMS41LFwid2Via2l0XCIsW1wic3RyaW5nXCIse31dXSIpOworICAgIH0KKworICAg
IHsKKyAgICAgICAgUmVmPEpTT046Ok9iamVjdD4gb2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVh
dGUoKTsKKyAgICAgICAgRVhQRUNUX0VRKG9iamVjdC0+dG9KU09OU3RyaW5nKCksICJ7fSIpOwor
ICAgICAgICBvYmplY3QtPnNldFZhbHVlKCJudWxsIiwgSlNPTjo6VmFsdWU6Om51bGwoKSk7Cisg
ICAgICAgIEVYUEVDVF9FUShvYmplY3QtPnRvSlNPTlN0cmluZygpLCAie1wibnVsbFwiOm51bGx9
Iik7CisgICAgICAgIG9iamVjdC0+c2V0Qm9vbGVhbigiYm9vbGVhbiIsIHRydWUpOworICAgICAg
ICBFWFBFQ1RfRVEob2JqZWN0LT50b0pTT05TdHJpbmcoKSwgIntcIm51bGxcIjpudWxsLFwiYm9v
bGVhblwiOnRydWV9Iik7CisgICAgICAgIG9iamVjdC0+c2V0RG91YmxlKCJkb3VibGUiLCAxLjUp
OworICAgICAgICBFWFBFQ1RfRVEob2JqZWN0LT50b0pTT05TdHJpbmcoKSwgIntcIm51bGxcIjpu
dWxsLFwiYm9vbGVhblwiOnRydWUsXCJkb3VibGVcIjoxLjV9Iik7CisgICAgICAgIG9iamVjdC0+
c2V0U3RyaW5nKCJzdHJpbmciLCAid2Via2l0Iik7CisgICAgICAgIEVYUEVDVF9FUShvYmplY3Qt
PnRvSlNPTlN0cmluZygpLCAie1wibnVsbFwiOm51bGwsXCJib29sZWFuXCI6dHJ1ZSxcImRvdWJs
ZVwiOjEuNSxcInN0cmluZ1wiOlwid2Via2l0XCJ9Iik7CisgICAgICAgIG9iamVjdC0+c2V0QXJy
YXkoImFycmF5IiwgSlNPTjo6QXJyYXk6OmNyZWF0ZSgpKTsKKyAgICAgICAgRVhQRUNUX0VRKG9i
amVjdC0+dG9KU09OU3RyaW5nKCksICJ7XCJudWxsXCI6bnVsbCxcImJvb2xlYW5cIjp0cnVlLFwi
ZG91YmxlXCI6MS41LFwic3RyaW5nXCI6XCJ3ZWJraXRcIixcImFycmF5XCI6W119Iik7CisgICAg
ICAgIFJlZjxKU09OOjpPYmplY3Q+IHN1Yk9iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7
CisgICAgICAgIHN1Yk9iamVjdC0+c2V0U3RyaW5nKCJmb28iLCAiYmFyIik7CisgICAgICAgIHN1
Yk9iamVjdC0+c2V0SW50ZWdlcigiYmF6IiwgMjUpOworICAgICAgICBvYmplY3QtPnNldE9iamVj
dCgib2JqZWN0IiwgV1RGTW92ZShzdWJPYmplY3QpKTsKKyAgICAgICAgRVhQRUNUX0VRKG9iamVj
dC0+dG9KU09OU3RyaW5nKCksICJ7XCJudWxsXCI6bnVsbCxcImJvb2xlYW5cIjp0cnVlLFwiZG91
YmxlXCI6MS41LFwic3RyaW5nXCI6XCJ3ZWJraXRcIixcImFycmF5XCI6W10sXCJvYmplY3RcIjp7
XCJmb29cIjpcImJhclwiLFwiYmF6XCI6MjV9fSIpOworICAgIH0KIH0KIAotVEVTVChJbnNwZWN0
b3JWYWx1ZSwgTWVtb3J5Q29zdEFycmF5RW1wdHkpCitURVNUKEluc3BlY3RvclZhbHVlLCBQYXJz
ZUpTT04pCiB7Ci0gICAgUmVmPEluc3BlY3RvckFycmF5PiB2YWx1ZSA9IEluc3BlY3RvckFycmF5
OjpjcmVhdGUoKTsKLSAgICBzaXplX3QgbWVtb3J5Q29zdCA9IHZhbHVlLT5tZW1vcnlDb3N0KCk7
Ci0gICAgRVhQRUNUX0dUKG1lbW9yeUNvc3QsIDBVKTsKLSAgICBFWFBFQ1RfTEUobWVtb3J5Q29z
dCwgOFUpOworICAgIHsKKyAgICAgICAgUmVmUHRyPEpTT046OlZhbHVlPiB2YWx1ZTsKKyAgICAg
ICAgRVhQRUNUX1RSVUUoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigibnVsbCIsIHZhbHVlKSk7Cisg
ICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlLT5pc051bGwoKSk7CisgICAgfQorCisgICAgeworICAg
ICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHZhbHVlOworICAgICAgICBFWFBFQ1RfVFJVRShKU09O
OjpWYWx1ZTo6cGFyc2VKU09OKCJ0cnVlIiwgdmFsdWUpKTsKKyAgICAgICAgRVhQRUNUX1RSVUUo
dmFsdWUtPnR5cGUoKSA9PSBKU09OOjpWYWx1ZTo6VHlwZTo6Qm9vbGVhbik7CisgICAgICAgIGJv
b2wgYm9vbGVhblZhbHVlOworICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+YXNCb29sZWFuKGJv
b2xlYW5WYWx1ZSkpOworICAgICAgICBFWFBFQ1RfRVEoYm9vbGVhblZhbHVlLCB0cnVlKTsKKwor
ICAgICAgICBFWFBFQ1RfVFJVRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJmYWxzZSIsIHZhbHVl
KSk7CisgICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlLT50eXBlKCkgPT0gSlNPTjo6VmFsdWU6OlR5
cGU6OkJvb2xlYW4pOworICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+YXNCb29sZWFuKGJvb2xl
YW5WYWx1ZSkpOworICAgICAgICBFWFBFQ1RfRVEoYm9vbGVhblZhbHVlLCBmYWxzZSk7CisgICAg
fQorCisgICAgeworICAgICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHZhbHVlOworICAgICAgICBF
WFBFQ1RfVFJVRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCIxIiwgdmFsdWUpKTsKKyAgICAgICAg
Ly8gTnVtYmVycyBhcmUgYWx3YXlzIHBhcnNlZCBhcyBkb3VibGUuCisgICAgICAgIEVYUEVDVF9U
UlVFKHZhbHVlLT50eXBlKCkgPT0gSlNPTjo6VmFsdWU6OlR5cGU6OkRvdWJsZSk7CisgICAgICAg
IGRvdWJsZSBkb3VibGVWYWx1ZTsKKyAgICAgICAgRVhQRUNUX1RSVUUodmFsdWUtPmFzRG91Ymxl
KGRvdWJsZVZhbHVlKSk7CisgICAgICAgIEVYUEVDVF9FUShkb3VibGVWYWx1ZSwgMS4wKTsKKwor
ICAgICAgICBFWFBFQ1RfVFJVRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCIxLjUiLCB2YWx1ZSkp
OworICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+dHlwZSgpID09IEpTT046OlZhbHVlOjpUeXBl
OjpEb3VibGUpOworICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+YXNEb3VibGUoZG91YmxlVmFs
dWUpKTsKKyAgICAgICAgRVhQRUNUX0VRKGRvdWJsZVZhbHVlLCAxLjUpOworICAgIH0KKworICAg
IHsKKyAgICAgICAgUmVmUHRyPEpTT046OlZhbHVlPiB2YWx1ZTsKKyAgICAgICAgRVhQRUNUX1RS
VUUoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiXCJzdHJpbmdcIiIsIHZhbHVlKSk7CisgICAgICAg
IEVYUEVDVF9UUlVFKHZhbHVlLT50eXBlKCkgPT0gSlNPTjo6VmFsdWU6OlR5cGU6OlN0cmluZyk7
CisgICAgICAgIFN0cmluZyBzdHJpbmdWYWx1ZTsKKyAgICAgICAgRVhQRUNUX1RSVUUodmFsdWUt
PmFzU3RyaW5nKHN0cmluZ1ZhbHVlKSk7CisgICAgICAgIEVYUEVDVF9FUShzdHJpbmdWYWx1ZSwg
InN0cmluZyIpOworICAgIH0KKworICAgIHsKKyAgICAgICAgUmVmUHRyPEpTT046OlZhbHVlPiB2
YWx1ZTsKKyAgICAgICAgRVhQRUNUX1RSVUUoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiW10iLCB2
YWx1ZSkpOworICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+dHlwZSgpID09IEpTT046OlZhbHVl
OjpUeXBlOjpBcnJheSk7CisgICAgICAgIFJlZlB0cjxKU09OOjpBcnJheT4gYXJyYXlWYWx1ZTsK
KyAgICAgICAgRVhQRUNUX1RSVUUodmFsdWUtPmFzQXJyYXkoYXJyYXlWYWx1ZSkpOworICAgICAg
ICBFWFBFQ1RfRVEoYXJyYXlWYWx1ZS0+bGVuZ3RoKCksIDBVKTsKKworICAgICAgICBFWFBFQ1Rf
VFJVRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJbbnVsbCwgMSAsMi41LFt7XCJmb29cIjpcImJh
clwifSx7XCJiYXpcIjpmYWxzZX1dLFwid2Via2l0XCJdIiwgdmFsdWUpKTsKKyAgICAgICAgRVhQ
RUNUX1RSVUUodmFsdWUtPnR5cGUoKSA9PSBKU09OOjpWYWx1ZTo6VHlwZTo6QXJyYXkpOworICAg
ICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+YXNBcnJheShhcnJheVZhbHVlKSk7CisgICAgICAgIEVY
UEVDVF9FUShhcnJheVZhbHVlLT5sZW5ndGgoKSwgNVUpOworICAgICAgICBhdXRvIGl0ID0gYXJy
YXlWYWx1ZS0+YmVnaW4oKTsKKyAgICAgICAgUmVmUHRyPEpTT046OlZhbHVlPiBpdGVtVmFsdWUg
PSBpdC0+Z2V0KCk7CisgICAgICAgIEVYUEVDVF9UUlVFKGl0ZW1WYWx1ZS0+dHlwZSgpID09IEpT
T046OlZhbHVlOjpUeXBlOjpOdWxsKTsKKyAgICAgICAgKytpdDsKKyAgICAgICAgRVhQRUNUX0ZB
TFNFKGl0ID09IGFycmF5VmFsdWUtPmVuZCgpKTsKKworICAgICAgICBpdGVtVmFsdWUgPSBpdC0+
Z2V0KCk7CisgICAgICAgIEVYUEVDVF9UUlVFKGl0ZW1WYWx1ZS0+dHlwZSgpID09IEpTT046OlZh
bHVlOjpUeXBlOjpEb3VibGUpOworICAgICAgICBpbnQgaW50ZWdlclZhbHVlOworICAgICAgICBF
WFBFQ1RfVFJVRShpdGVtVmFsdWUtPmFzSW50ZWdlcihpbnRlZ2VyVmFsdWUpKTsKKyAgICAgICAg
RVhQRUNUX0VRKGludGVnZXJWYWx1ZSwgMSk7CisgICAgICAgICsraXQ7CisgICAgICAgIEVYUEVD
VF9GQUxTRShpdCA9PSBhcnJheVZhbHVlLT5lbmQoKSk7CisKKyAgICAgICAgaXRlbVZhbHVlID0g
aXQtPmdldCgpOworICAgICAgICBFWFBFQ1RfVFJVRShpdGVtVmFsdWUtPnR5cGUoKSA9PSBKU09O
OjpWYWx1ZTo6VHlwZTo6RG91YmxlKTsKKyAgICAgICAgZG91YmxlIGRvdWJsZVZhbHVlOworICAg
ICAgICBFWFBFQ1RfVFJVRShpdGVtVmFsdWUtPmFzRG91YmxlKGRvdWJsZVZhbHVlKSk7CisgICAg
ICAgIEVYUEVDVF9FUShkb3VibGVWYWx1ZSwgMi41KTsKKyAgICAgICAgKytpdDsKKyAgICAgICAg
RVhQRUNUX0ZBTFNFKGl0ID09IGFycmF5VmFsdWUtPmVuZCgpKTsKKworICAgICAgICBpdGVtVmFs
dWUgPSBpdC0+Z2V0KCk7CisgICAgICAgIEVYUEVDVF9UUlVFKGl0ZW1WYWx1ZS0+dHlwZSgpID09
IEpTT046OlZhbHVlOjpUeXBlOjpBcnJheSk7CisgICAgICAgIFJlZlB0cjxKU09OOjpBcnJheT4g
c3ViQXJyYXlWYWx1ZTsKKyAgICAgICAgRVhQRUNUX1RSVUUoaXRlbVZhbHVlLT5hc0FycmF5KHN1
YkFycmF5VmFsdWUpKTsKKyAgICAgICAgRVhQRUNUX0VRKHN1YkFycmF5VmFsdWUtPmxlbmd0aCgp
LCAyVSk7CisgICAgICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gb2JqZWN0VmFsdWUgPSBzdWJBcnJh
eVZhbHVlLT5nZXQoMCk7CisgICAgICAgIEVYUEVDVF9UUlVFKG9iamVjdFZhbHVlLT50eXBlKCkg
PT0gSlNPTjo6VmFsdWU6OlR5cGU6Ok9iamVjdCk7CisgICAgICAgIFJlZlB0cjxKU09OOjpPYmpl
Y3Q+IG9iamVjdDsKKyAgICAgICAgRVhQRUNUX1RSVUUob2JqZWN0VmFsdWUtPmFzT2JqZWN0KG9i
amVjdCkpOworICAgICAgICBFWFBFQ1RfRVEob2JqZWN0LT5zaXplKCksIDFVKTsKKyAgICAgICAg
U3RyaW5nIHN0cmluZ1ZhbHVlOworICAgICAgICBFWFBFQ1RfVFJVRShvYmplY3QtPmdldFN0cmlu
ZygiZm9vIiwgc3RyaW5nVmFsdWUpKTsKKyAgICAgICAgRVhQRUNUX0VRKHN0cmluZ1ZhbHVlLCAi
YmFyIik7CisgICAgICAgIG9iamVjdFZhbHVlID0gc3ViQXJyYXlWYWx1ZS0+Z2V0KDEpOworICAg
ICAgICBFWFBFQ1RfVFJVRShvYmplY3RWYWx1ZS0+dHlwZSgpID09IEpTT046OlZhbHVlOjpUeXBl
OjpPYmplY3QpOworICAgICAgICBFWFBFQ1RfVFJVRShvYmplY3RWYWx1ZS0+YXNPYmplY3Qob2Jq
ZWN0KSk7CisgICAgICAgIEVYUEVDVF9FUShvYmplY3QtPnNpemUoKSwgMVUpOworICAgICAgICBi
b29sIGJvb2xlYW5WYWx1ZTsKKyAgICAgICAgRVhQRUNUX1RSVUUob2JqZWN0LT5nZXRCb29sZWFu
KCJiYXoiLCBib29sZWFuVmFsdWUpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKGJvb2xlYW5WYWx1
ZSk7CisgICAgICAgICsraXQ7CisgICAgICAgIEVYUEVDVF9GQUxTRShpdCA9PSBhcnJheVZhbHVl
LT5lbmQoKSk7CisKKyAgICAgICAgaXRlbVZhbHVlID0gaXQtPmdldCgpOworICAgICAgICBFWFBF
Q1RfVFJVRShpdGVtVmFsdWUtPnR5cGUoKSA9PSBKU09OOjpWYWx1ZTo6VHlwZTo6U3RyaW5nKTsK
KyAgICAgICAgRVhQRUNUX1RSVUUoaXRlbVZhbHVlLT5hc1N0cmluZyhzdHJpbmdWYWx1ZSkpOwor
ICAgICAgICBFWFBFQ1RfRVEoc3RyaW5nVmFsdWUsICJ3ZWJraXQiKTsKKyAgICAgICAgKytpdDsK
KyAgICAgICAgRVhQRUNUX1RSVUUoaXQgPT0gYXJyYXlWYWx1ZS0+ZW5kKCkpOworICAgIH0KKwor
ICAgIHsKKyAgICAgICAgUmVmUHRyPEpTT046OlZhbHVlPiB2YWx1ZTsKKyAgICAgICAgRVhQRUNU
X1RSVUUoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigie30iLCB2YWx1ZSkpOworICAgICAgICBFWFBF
Q1RfVFJVRSh2YWx1ZS0+dHlwZSgpID09IEpTT046OlZhbHVlOjpUeXBlOjpPYmplY3QpOworICAg
ICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBvYmplY3RWYWx1ZTsKKyAgICAgICAgRVhQRUNUX1RS
VUUodmFsdWUtPmFzT2JqZWN0KG9iamVjdFZhbHVlKSk7CisgICAgICAgIEVYUEVDVF9FUShvYmpl
Y3RWYWx1ZS0+c2l6ZSgpLCAwVSk7CisKKyAgICAgICAgRVhQRUNUX1RSVUUoSlNPTjo6VmFsdWU6
OnBhcnNlSlNPTigie1wiZm9vXCI6IFwiYmFyXCIsIFwiYmF6XCI6IHtcInN1YlwiOltudWxsLGZh
bHNlXX19IiwgdmFsdWUpKTsKKyAgICAgICAgRVhQRUNUX1RSVUUodmFsdWUtPnR5cGUoKSA9PSBK
U09OOjpWYWx1ZTo6VHlwZTo6T2JqZWN0KTsKKyAgICAgICAgRVhQRUNUX1RSVUUodmFsdWUtPmFz
T2JqZWN0KG9iamVjdFZhbHVlKSk7CisgICAgICAgIEVYUEVDVF9FUShvYmplY3RWYWx1ZS0+c2l6
ZSgpLCAyVSk7CisKKyAgICAgICAgU3RyaW5nIHN0cmluZ1ZhbHVlOworICAgICAgICBFWFBFQ1Rf
VFJVRShvYmplY3RWYWx1ZS0+Z2V0U3RyaW5nKCJmb28iLCBzdHJpbmdWYWx1ZSkpOworICAgICAg
ICBFWFBFQ1RfRVEoc3RyaW5nVmFsdWUsICJiYXIiKTsKKworICAgICAgICBSZWZQdHI8SlNPTjo6
T2JqZWN0PiBvYmplY3Q7CisgICAgICAgIEVYUEVDVF9UUlVFKG9iamVjdFZhbHVlLT5nZXRPYmpl
Y3QoImJheiIsIG9iamVjdCkpOworICAgICAgICBFWFBFQ1RfRVEob2JqZWN0LT5zaXplKCksIDFV
KTsKKyAgICAgICAgUmVmUHRyPEpTT046OkFycmF5PiBhcnJheTsKKyAgICAgICAgRVhQRUNUX1RS
VUUob2JqZWN0LT5nZXRBcnJheSgic3ViIiwgYXJyYXkpKTsKKyAgICAgICAgRVhQRUNUX0VRKGFy
cmF5LT5sZW5ndGgoKSwgMlUpOworICAgIH0KKworICAgIHsKKyAgICAgICAgUmVmUHRyPEpTT046
OlZhbHVlPiB2YWx1ZTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpT
T04oIiwiLCB2YWx1ZSkpOworICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNl
SlNPTigiXCJmb28iLCB2YWx1ZSkpOworICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6
OnBhcnNlSlNPTigiZm9vXCIiLCB2YWx1ZSkpOworICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6
VmFsdWU6OnBhcnNlSlNPTigiVHJVZSIsIHZhbHVlKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRShK
U09OOjpWYWx1ZTo6cGFyc2VKU09OKCJGYWxzZSIsIHZhbHVlKSk7CisgICAgICAgIEVYUEVDVF9G
QUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCIxLmQiLCB2YWx1ZSkpOworICAgICAgICBFWFBF
Q1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiWzEsXSIsIHZhbHVlKSk7CisgICAgICAg
IEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCIxLDJdIiwgdmFsdWUpKTsKKyAg
ICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIlsxLDIiLCB2YWx1ZSkp
OworICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiWzEgMl0iLCB2
YWx1ZSkpOworICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiWzEs
Ml1dIiwgdmFsdWUpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpT
T04oIlsxLDJdLCIsIHZhbHVlKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6
cGFyc2VKU09OKCJ7Zm9vOlwiYmFyXCJ9IiwgdmFsdWUpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNF
KEpTT046OlZhbHVlOjpwYXJzZUpTT04oIntcImZvb1wiOmJhcn0iLCB2YWx1ZSkpOworICAgICAg
ICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigie1wiZm9vOlwiYmFyXCJ9Iiwg
dmFsdWUpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIntm
b29cIjpcImJhclwifSIsIHZhbHVlKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1
ZTo6cGFyc2VKU09OKCJ7e1wiZm9vXCI6XCJiYXJcIn19IiwgdmFsdWUpKTsKKyAgICAgICAgRVhQ
RUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIntcImZvb1wiOlwiYmFyXCJ9LCIsIHZh
bHVlKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJbe1wi
Zm9vXCI6XCJiYXJcIn0se1wiYmF6XCI6ZmFsc2V9LF0iLCB2YWx1ZSkpOworICAgICAgICBFWFBF
Q1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiW3tcImZvb1wiOntcImJhelwiOmZhbHNl
fV0iLCB2YWx1ZSkpOworICAgIH0KIH0KIAotVEVTVChJbnNwZWN0b3JWYWx1ZSwgTWVtb3J5Q29z
dEFycmF5R3Jvd2luZykKK1RFU1QoSW5zcGVjdG9yVmFsdWUsIE1lbW9yeUNvc3QpCiB7Ci0gICAg
UmVmPEluc3BlY3RvckFycmF5PiB2YWx1ZSA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKKyAg
ICB7CisgICAgICAgIFJlZjxKU09OOjpWYWx1ZT4gdmFsdWUgPSBKU09OOjpWYWx1ZTo6bnVsbCgp
OworICAgICAgICBzaXplX3QgbWVtb3J5Q29zdCA9IHZhbHVlLT5tZW1vcnlDb3N0KCk7CisgICAg
ICAgIEVYUEVDVF9HVChtZW1vcnlDb3N0LCAwVSk7CisgICAgICAgIEVYUEVDVF9MRShtZW1vcnlD
b3N0LCA4VSk7CisgICAgfQorCisgICAgeworICAgICAgICBSZWY8SlNPTjo6VmFsdWU+IHZhbHVl
ID0gSlNPTjo6VmFsdWU6OmNyZWF0ZSh0cnVlKTsKKyAgICAgICAgc2l6ZV90IG1lbW9yeUNvc3Qg
PSB2YWx1ZS0+bWVtb3J5Q29zdCgpOworICAgICAgICBFWFBFQ1RfR1QobWVtb3J5Q29zdCwgMFUp
OworICAgICAgICBFWFBFQ1RfTEUobWVtb3J5Q29zdCwgOFUpOworICAgIH0KKworICAgIHsKKyAg
ICAgICAgUmVmPEpTT046OlZhbHVlPiB2YWx1ZSA9IEpTT046OlZhbHVlOjpjcmVhdGUoMS4wKTsK
KyAgICAgICAgc2l6ZV90IG1lbW9yeUNvc3QgPSB2YWx1ZS0+bWVtb3J5Q29zdCgpOworICAgICAg
ICBFWFBFQ1RfR1QobWVtb3J5Q29zdCwgMFUpOworICAgICAgICBFWFBFQ1RfTEUobWVtb3J5Q29z
dCwgOFUpOworICAgIH0KKworICAgIHsKKyAgICAgICAgUmVmPEpTT046OlZhbHVlPiB2YWx1ZSA9
IEpTT046OlZhbHVlOjpjcmVhdGUoMSk7CisgICAgICAgIHNpemVfdCBtZW1vcnlDb3N0ID0gdmFs
dWUtPm1lbW9yeUNvc3QoKTsKKyAgICAgICAgRVhQRUNUX0dUKG1lbW9yeUNvc3QsIDBVKTsKKyAg
ICAgICAgRVhQRUNUX0xFKG1lbW9yeUNvc3QsIDhVKTsKKyAgICB9CisKKyAgICB7CisgICAgICAg
IFJlZjxKU09OOjpWYWx1ZT4gdmFsdWUgPSBKU09OOjpWYWx1ZTo6Y3JlYXRlKCJ0ZXN0Iik7Cisg
ICAgICAgIHNpemVfdCBtZW1vcnlDb3N0ID0gdmFsdWUtPm1lbW9yeUNvc3QoKTsKKyAgICAgICAg
RVhQRUNUX0dUKG1lbW9yeUNvc3QsIDBVKTsKKyAgICAgICAgRVhQRUNUX0xFKG1lbW9yeUNvc3Qs
IDM2VSk7CisgICAgfQorCisgICAgeworICAgICAgICBSZWY8SlNPTjo6VmFsdWU+IHZhbHVlID0g
SlNPTjo6VmFsdWU6OmNyZWF0ZSgiIik7CisgICAgICAgIHNpemVfdCBtZW1vcnlDb3N0ID0gdmFs
dWUtPm1lbW9yeUNvc3QoKTsKKyAgICAgICAgRVhQRUNUX0dUKG1lbW9yeUNvc3QsIDBVKTsKKyAg
ICAgICAgRVhQRUNUX0xFKG1lbW9yeUNvc3QsIDMyVSk7CisgICAgfQorCisgICAgeworICAgICAg
ICBSZWY8SlNPTjo6VmFsdWU+IHZhbHVlID0gSlNPTjo6VmFsdWU6OmNyZWF0ZShTdHJpbmcoKSk7
CisgICAgICAgIHNpemVfdCBtZW1vcnlDb3N0ID0gdmFsdWUtPm1lbW9yeUNvc3QoKTsKKyAgICAg
ICAgRVhQRUNUX0dUKG1lbW9yeUNvc3QsIDBVKTsKKyAgICAgICAgRVhQRUNUX0xFKG1lbW9yeUNv
c3QsIDhVKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIFJlZjxKU09OOjpWYWx1ZT4gdmFsdWVB
ID0gSlNPTjo6VmFsdWU6OmNyZWF0ZSgidCIpOworICAgICAgICBSZWY8SlNPTjo6VmFsdWU+IHZh
bHVlQiA9IEpTT046OlZhbHVlOjpjcmVhdGUoInRlIik7CisgICAgICAgIFJlZjxKU09OOjpWYWx1
ZT4gdmFsdWVDID0gSlNPTjo6VmFsdWU6OmNyZWF0ZSgidGVzIik7CisgICAgICAgIFJlZjxKU09O
OjpWYWx1ZT4gdmFsdWVEID0gSlNPTjo6VmFsdWU6OmNyZWF0ZSgidGVzdCIpOworICAgICAgICBF
WFBFQ1RfTFQodmFsdWVBLT5tZW1vcnlDb3N0KCksIHZhbHVlQi0+bWVtb3J5Q29zdCgpKTsKKyAg
ICAgICAgRVhQRUNUX0xUKHZhbHVlQi0+bWVtb3J5Q29zdCgpLCB2YWx1ZUMtPm1lbW9yeUNvc3Qo
KSk7CisgICAgICAgIEVYUEVDVF9MVCh2YWx1ZUMtPm1lbW9yeUNvc3QoKSwgdmFsdWVELT5tZW1v
cnlDb3N0KCkpOworICAgIH0KKworICAgIHsKKyAgICAgICAgUmVmPEpTT046OlZhbHVlPiB2YWx1
ZUEgPSBKU09OOjpWYWx1ZTo6Y3JlYXRlKCJ0Iik7CisgICAgICAgIFJlZjxKU09OOjpWYWx1ZT4g
dmFsdWVCID0gSlNPTjo6VmFsdWU6OmNyZWF0ZSgi8J+YgCIpOworICAgICAgICBFWFBFQ1RfTFQo
dmFsdWVBLT5tZW1vcnlDb3N0KCksIHZhbHVlQi0+bWVtb3J5Q29zdCgpKTsKKyAgICB9CisKKyAg
ICB7CisgICAgICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlID0gSlNPTjo6T2JqZWN0Ojpj
cmVhdGUoKTsKKyAgICAgICAgdmFsdWUtPnNldFZhbHVlKCJ0ZXN0IiwgSlNPTjo6VmFsdWU6Om51
bGwoKSk7CisgICAgICAgIHNpemVfdCBtZW1vcnlDb3N0ID0gdmFsdWUtPm1lbW9yeUNvc3QoKTsK
KyAgICAgICAgRVhQRUNUX0dUKG1lbW9yeUNvc3QsIDBVKTsKKyAgICAgICAgRVhQRUNUX0xFKG1l
bW9yeUNvc3QsIDIwVSk7CisgICAgfQorCisgICAgeworICAgICAgICBSZWY8SW5zcGVjdG9yT2Jq
ZWN0PiB2YWx1ZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIHNpemVfdCBtZW1v
cnlDb3N0ID0gdmFsdWUtPm1lbW9yeUNvc3QoKTsKKyAgICAgICAgRVhQRUNUX0dUKG1lbW9yeUNv
c3QsIDBVKTsKKyAgICAgICAgRVhQRUNUX0xFKG1lbW9yeUNvc3QsIDhVKTsKKyAgICB9CisKKyAg
ICB7CisgICAgICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlID0gSlNPTjo6T2JqZWN0Ojpj
cmVhdGUoKTsKKworICAgICAgICB2YWx1ZS0+c2V0VmFsdWUoIjEiLCBKU09OOjpWYWx1ZTo6bnVs
bCgpKTsKKyAgICAgICAgc2l6ZV90IG1lbW9yeUNvc3QxID0gdmFsdWUtPm1lbW9yeUNvc3QoKTsK
KworICAgICAgICB2YWx1ZS0+c2V0VmFsdWUoIjIiLCBKU09OOjpWYWx1ZTo6bnVsbCgpKTsKKyAg
ICAgICAgc2l6ZV90IG1lbW9yeUNvc3QyID0gdmFsdWUtPm1lbW9yeUNvc3QoKTsKKworICAgICAg
ICB2YWx1ZS0+c2V0VmFsdWUoIjMiLCBKU09OOjpWYWx1ZTo6bnVsbCgpKTsKKyAgICAgICAgc2l6
ZV90IG1lbW9yeUNvc3QzID0gdmFsdWUtPm1lbW9yeUNvc3QoKTsKKworICAgICAgICB2YWx1ZS0+
c2V0VmFsdWUoIjQiLCBKU09OOjpWYWx1ZTo6bnVsbCgpKTsKKyAgICAgICAgc2l6ZV90IG1lbW9y
eUNvc3Q0ID0gdmFsdWUtPm1lbW9yeUNvc3QoKTsKKworICAgICAgICBFWFBFQ1RfTFQobWVtb3J5
Q29zdDEsIG1lbW9yeUNvc3QyKTsKKyAgICAgICAgRVhQRUNUX0xUKG1lbW9yeUNvc3QyLCBtZW1v
cnlDb3N0Myk7CisgICAgICAgIEVYUEVDVF9MVChtZW1vcnlDb3N0MywgbWVtb3J5Q29zdDQpOwor
ICAgIH0KKworICAgIHsKKyAgICAgICAgUmVmPEpTT046OkFycmF5PiB2YWx1ZSA9IEpTT046OkFy
cmF5OjpjcmVhdGUoKTsKKyAgICAgICAgdmFsdWUtPnB1c2hWYWx1ZShKU09OOjpWYWx1ZTo6bnVs
bCgpKTsKKyAgICAgICAgc2l6ZV90IG1lbW9yeUNvc3QgPSB2YWx1ZS0+bWVtb3J5Q29zdCgpOwor
ICAgICAgICBFWFBFQ1RfR1QobWVtb3J5Q29zdCwgMFUpOworICAgICAgICBFWFBFQ1RfTEUobWVt
b3J5Q29zdCwgMTZVKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIFJlZjxKU09OOjpBcnJheT4g
dmFsdWUgPSBKU09OOjpBcnJheTo6Y3JlYXRlKCk7CisgICAgICAgIHNpemVfdCBtZW1vcnlDb3N0
ID0gdmFsdWUtPm1lbW9yeUNvc3QoKTsKKyAgICAgICAgRVhQRUNUX0dUKG1lbW9yeUNvc3QsIDBV
KTsKKyAgICAgICAgRVhQRUNUX0xFKG1lbW9yeUNvc3QsIDhVKTsKKyAgICB9CisKKyAgICB7Cisg
ICAgICAgIFJlZjxKU09OOjpBcnJheT4gdmFsdWUgPSBKU09OOjpBcnJheTo6Y3JlYXRlKCk7CiAK
LSAgICB2YWx1ZS0+cHVzaFZhbHVlKEluc3BlY3RvclZhbHVlOjpudWxsKCkpOwotICAgIHNpemVf
dCBtZW1vcnlDb3N0MSA9IHZhbHVlLT5tZW1vcnlDb3N0KCk7CisgICAgICAgIHZhbHVlLT5wdXNo
VmFsdWUoSlNPTjo6VmFsdWU6Om51bGwoKSk7CisgICAgICAgIHNpemVfdCBtZW1vcnlDb3N0MSA9
IHZhbHVlLT5tZW1vcnlDb3N0KCk7CiAKLSAgICB2YWx1ZS0+cHVzaFZhbHVlKEluc3BlY3RvclZh
bHVlOjpudWxsKCkpOwotICAgIHNpemVfdCBtZW1vcnlDb3N0MiA9IHZhbHVlLT5tZW1vcnlDb3N0
KCk7CisgICAgICAgIHZhbHVlLT5wdXNoVmFsdWUoSlNPTjo6VmFsdWU6Om51bGwoKSk7CisgICAg
ICAgIHNpemVfdCBtZW1vcnlDb3N0MiA9IHZhbHVlLT5tZW1vcnlDb3N0KCk7CiAKLSAgICB2YWx1
ZS0+cHVzaFZhbHVlKEluc3BlY3RvclZhbHVlOjpudWxsKCkpOwotICAgIHNpemVfdCBtZW1vcnlD
b3N0MyA9IHZhbHVlLT5tZW1vcnlDb3N0KCk7CisgICAgICAgIHZhbHVlLT5wdXNoVmFsdWUoSlNP
Tjo6VmFsdWU6Om51bGwoKSk7CisgICAgICAgIHNpemVfdCBtZW1vcnlDb3N0MyA9IHZhbHVlLT5t
ZW1vcnlDb3N0KCk7CiAKLSAgICB2YWx1ZS0+cHVzaFZhbHVlKEluc3BlY3RvclZhbHVlOjpudWxs
KCkpOwotICAgIHNpemVfdCBtZW1vcnlDb3N0NCA9IHZhbHVlLT5tZW1vcnlDb3N0KCk7CisgICAg
ICAgIHZhbHVlLT5wdXNoVmFsdWUoSlNPTjo6VmFsdWU6Om51bGwoKSk7CisgICAgICAgIHNpemVf
dCBtZW1vcnlDb3N0NCA9IHZhbHVlLT5tZW1vcnlDb3N0KCk7CiAKLSAgICBFWFBFQ1RfTFQobWVt
b3J5Q29zdDEsIG1lbW9yeUNvc3QyKTsKLSAgICBFWFBFQ1RfTFQobWVtb3J5Q29zdDIsIG1lbW9y
eUNvc3QzKTsKLSAgICBFWFBFQ1RfTFQobWVtb3J5Q29zdDMsIG1lbW9yeUNvc3Q0KTsKKyAgICAg
ICAgRVhQRUNUX0xUKG1lbW9yeUNvc3QxLCBtZW1vcnlDb3N0Mik7CisgICAgICAgIEVYUEVDVF9M
VChtZW1vcnlDb3N0MiwgbWVtb3J5Q29zdDMpOworICAgICAgICBFWFBFQ1RfTFQobWVtb3J5Q29z
dDMsIG1lbW9yeUNvc3Q0KTsKKyAgICB9CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRB
UEkK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>326105</attachid>
            <date>2017-11-05 23:28:07 -0800</date>
            <delta_ts>2017-11-08 00:11:35 -0800</delta_ts>
            <desc>Try to fix mac builds</desc>
            <filename>wk-json.diff</filename>
            <type>text/plain</type>
            <size>136325</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IGM3YTFjOGM0MDZjLi4xNjdmOGIxMTk5MiAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTEgQEAKKzIwMTctMTEtMDMgIEJyaWFu
IEJ1cmcgIDxiYnVyZ0BhcHBsZS5jb20+CisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogdXNlIEpT
T046OntBcnJheSxPYmplY3QsVmFsdWV9IGluc3RlYWQgb2YgSW5zcGVjdG9ye0FycmF5LE9iamVj
dCxWYWx1ZX0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE3MzYxOQorCisgICAgICAgIFJldmlld2VkIGJ5IEFsZXggQ2hyaXN0ZW5zZW4uCisKKyAgICAg
ICAgRXZlbnR1YWxseSBhbGwgY2xhc3NlcyB1c2VkIGZvciBvdXIgSlNPTi1SUEMgbWVzc2FnZSBw
YXNzaW5nIHNob3VsZCBiZSBvdXRzaWRlCisgICAgICAgIG9mIHRoZSBJbnNwZWN0b3IgbmFtZXNw
YWNlIHNpbmNlIHRoZSBwcm90b2NvbCBpcyB1c2VkIG91dHNpZGUgb2YgSW5zcGVjdG9yIGNvZGUu
CisgICAgICAgIFRoaXMgd2lsbCBhbHNvIGFsbG93IHVzIHRvIHVuaWZ5IHRoZSBwcmltaXRpdmUg
SlNPTiB0eXBlcyB3aXRoIHBhcmFtZXRlcmljIHR5cGVzCisgICAgICAgIGxpa2UgSW5zcGVjdG9y
OjpQcm90b2NvbDo6QXJyYXk8VD4gYW5kIG90aGVyIHByb3RvY29sLXJlbGF0ZWQgdHlwZXMgd2hp
Y2ggZG9uJ3QKKyAgICAgICAgbmVlZCB0byBiZSBpbiB0aGUgSW5zcGVjdG9yIG5hbWVzcGFjZS4K
KworICAgICAgICBTdGFydCB0aGlzIHJlZmFjdG9yaW5nIG9mZiBieSBtYWtpbmcgSlNPTjo6VmFs
dWUgYSB0eXBlZGVmIGZvciBJbnNwZWN0b3JWYWx1ZS4gSW4gZm9sbG93aW5nCisgICAgICAgIHBh
dGNoZXMsIG90aGVyIGNsaWVudHMgd2lsbCBtb3ZlIHRvIHVzZSBKU09OOjpWYWx1ZSBhbmQgZnJp
ZW5kcy4gV2hlbiBhbGwgdXNlcyBhcmUKKyAgICAgICAgY2hhbmdlZCwgdGhlIGFjdHVhbCBpbXBs
ZW1lbnRhdGlvbiB3aWxsIGJlIHJlbmFtZWQuIFRoaXMgcGF0Y2gganVzdCBmb2N1c2VzIG9uIHRo
ZSB0eXBlZGVmCisgICAgICAgIGFuZCBtYWtpbmcgY2hhbmdlcyBpbiBnZW5lcmF0ZWQgcHJvdG9j
b2wgY29kZS4KKworICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuY3BwOgorICAg
ICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaDoKKyAgICAgICAgKiBpbnNwZWN0b3Iv
c2NyaXB0cy9jb2RlZ2VuL2NwcF9nZW5lcmF0b3IucHk6CisgICAgICAgIChDcHBHZW5lcmF0b3Iu
Y3BwX3Byb3RvY29sX3R5cGVfZm9yX3R5cGUpOgorICAgICAgICAoQ3BwR2VuZXJhdG9yLmNwcF90
eXBlX2Zvcl91bmNoZWNrZWRfZm9ybWFsX2luX3BhcmFtZXRlcik6CisgICAgICAgIChDcHBHZW5l
cmF0b3IuY3BwX3R5cGVfZm9yX3R5cGVfd2l0aF9uYW1lKToKKyAgICAgICAgKENwcEdlbmVyYXRv
ci5jcHBfdHlwZV9mb3Jfc3RhY2tfaW5fcGFyYW1ldGVyKToKKyAgICAgICAgKiBpbnNwZWN0b3Iv
c2NyaXB0cy9jb2RlZ2VuL2NwcF9nZW5lcmF0b3JfdGVtcGxhdGVzLnB5OgorICAgICAgICAodm9p
ZCk6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfcHJv
dG9jb2xfdHlwZXNfaGVhZGVyLnB5OgorICAgICAgICAoX2dlbmVyYXRlX2NsYXNzX2Zvcl9vYmpl
Y3RfZGVjbGFyYXRpb24pOgorICAgICAgICAoX2dlbmVyYXRlX2ZvcndhcmRfZGVjbGFyYXRpb25z
X2Zvcl9iaW5kaW5nX3RyYWl0cyk6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdl
bi9nZW5lcmF0ZV9jcHBfcHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50YXRpb24ucHk6CisgICAgICAg
IChDcHBQcm90b2NvbFR5cGVzSW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX2Fzc2Vy
dGlvbl9mb3Jfb2JqZWN0X2RlY2xhcmF0aW9uKToKKyAgICAgICAgKENwcFByb3RvY29sVHlwZXNJ
bXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfYXNzZXJ0aW9uX2Zvcl9lbnVtKToKKyAg
ICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9hbGwvZXhwZWN0ZWQvZGVmaW5pdGlvbnMt
d2l0aC1tYWMtcGxhdGZvcm0uanNvbi1yZXN1bHQ6CisgICAgICAgICogaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9jb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5q
c29uLXJlc3VsdDoKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4
cGVjdGVkL2NvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29u
LXJlc3VsdDoKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVj
dGVkL2RvbWFpbi1hdmFpbGFiaWxpdHkuanNvbi1yZXN1bHQ6CisgICAgICAgICogaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9kb21haW5zLXdpdGgtdmFyeWluZy1jb21t
YW5kLXNpemVzLmpzb24tcmVzdWx0OgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2dlbmVyaWMvZXhwZWN0ZWQvZW51bS12YWx1ZXMuanNvbi1yZXN1bHQ6CisgICAgICAgICogaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9ldmVudHMtd2l0aC1vcHRpb25h
bC1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0OgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2dlbmVyaWMvZXhwZWN0ZWQvZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRz
Lmpzb24tcmVzdWx0OgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMv
ZXhwZWN0ZWQvc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24tcmVzdWx0OgorICAg
ICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvdHlwZS1kZWNs
YXJhdGlvbi1vYmplY3QtdHlwZS5qc29uLXJlc3VsdDoKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL3R5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMu
anNvbi1yZXN1bHQ6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9l
eHBlY3RlZC90eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0OgorICAgICAgICAq
IGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvd29ya2VyLXN1cHBvcnRl
ZC1kb21haW5zLmpzb24tcmVzdWx0OgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L21hYy9leHBlY3RlZC9kZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uLXJlc3VsdDoK
KwogMjAxNy0xMS0wMiAgRGV2aW4gUm91c3NvICA8d2Via2l0QGRldmlucm91c3NvLmNvbT4KIAog
ICAgICAgICBXZWIgSW5zcGVjdG9yOiBDYW52YXMgVGFiOiBzaG93IHN1cHBvcnRlZCBHTCBleHRl
bnNpb25zIGZvciBzZWxlY3RlZCBjYW52YXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmNwcAppbmRleCAxZTQ5YjI4MTAzYi4uZTRlMWQx
MWJmOWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yVmFsdWVzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvclZhbHVlcy5jcHAKQEAgLTEsNiArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDEw
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL0luc3BlY3RvclZhbHVlcy5oCmluZGV4IDBiNzQ3YmYxMjA5Li4xNGE1Y2Y3NDc4NCAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1
ZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVl
cy5oCkBAIC00MCwxMiArNDAsMjcgQEAKICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+
CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKLW5hbWVzcGFjZSBJbnNwZWN0b3Ig
ewogCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKIGNsYXNzIEluc3BlY3RvckFycmF5OwogY2xhc3Mg
SW5zcGVjdG9yQXJyYXlCYXNlOwogY2xhc3MgSW5zcGVjdG9yT2JqZWN0OwogY2xhc3MgSW5zcGVj
dG9yT2JqZWN0QmFzZTsKK2NsYXNzIEluc3BlY3RvclZhbHVlOworfQorCituYW1lc3BhY2UgSlNP
TiB7Cit0eXBlZGVmIEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXkgQXJyYXk7Cit0eXBlZGVmIElu
c3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0IE9iamVjdDsKK3R5cGVkZWYgSW5zcGVjdG9yOjpJbnNw
ZWN0b3JWYWx1ZSBWYWx1ZTsKKworCisvLyBOb3QgdG8gYmUgdXNlZCBleGNlcHQgZm9yIHByb3Rv
Y29sIG9iamVjdCBzdWJjbGFzc2VzLgordHlwZWRlZiBJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5
QmFzZSBBcnJheUJhc2U7Cit0eXBlZGVmIEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0QmFzZSBP
YmplY3RCYXNlOworfQorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAogY2xhc3MgSlNfRVhQT1JU
X1BSSVZBVEUgSW5zcGVjdG9yVmFsdWUgOiBwdWJsaWMgUmVmQ291bnRlZDxJbnNwZWN0b3JWYWx1
ZT4gewogcHVibGljOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2NvZGVnZW4vY3BwX2dlbmVyYXRvci5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2NwcF9nZW5lcmF0b3IucHkKaW5kZXggYzQ1OWZj
YWMzYWYuLjA0ZGRmY2I4ZGE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvY29kZWdlbi9jcHBfZ2VuZXJhdG9yLnB5CisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2NwcF9nZW5lcmF0b3IucHkKQEAg
LTM4LDkgKzM4LDkgQEAgX1BSSU1JVElWRV9UT19DUFBfTkFNRV9NQVAgPSB7CiAgICAgJ2ludGVn
ZXInOiAnaW50JywKICAgICAnbnVtYmVyJzogJ2RvdWJsZScsCiAgICAgJ3N0cmluZyc6ICdTdHJp
bmcnLAotICAgICdvYmplY3QnOiAnSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QnLAotICAgICdh
cnJheSc6ICdJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5JywKLSAgICAnYW55JzogJ0luc3BlY3Rv
cjo6SW5zcGVjdG9yVmFsdWUnCisgICAgJ29iamVjdCc6ICdKU09OOjpPYmplY3QnLAorICAgICdh
cnJheSc6ICdKU09OOjpBcnJheScsCisgICAgJ2FueSc6ICdKU09OOjpWYWx1ZScKIH0KIAogY2xh
c3MgQ3BwR2VuZXJhdG9yKEdlbmVyYXRvcik6CkBAIC05OCw3ICs5OCw3IEBAIGNsYXNzIENwcEdl
bmVyYXRvcihHZW5lcmF0b3IpOgogICAgIEBzdGF0aWNtZXRob2QKICAgICBkZWYgY3BwX3Byb3Rv
Y29sX3R5cGVfZm9yX3R5cGUoX3R5cGUpOgogICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBP
YmplY3RUeXBlKSBhbmQgbGVuKF90eXBlLm1lbWJlcnMpID09IDA6Ci0gICAgICAgICAgICByZXR1
cm4gJ0luc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0JworICAgICAgICAgICAgcmV0dXJuICdKU09O
OjpPYmplY3QnCiAgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEFycmF5VHlwZSk6CiAgICAg
ICAgICAgICBpZiBfdHlwZS5yYXdfbmFtZSgpIGlzIE5vbmU6ICAjIE90aGVyd2lzZSwgZmFsbCB0
aHJvdWdoIGFuZCB1c2UgdHlwZWRlZidkIG5hbWUuCiAgICAgICAgICAgICAgICAgcmV0dXJuICdJ
bnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTwlcz4nICUgQ3BwR2VuZXJhdG9yLmNwcF9wcm90b2Nv
bF90eXBlX2Zvcl90eXBlKF90eXBlLmVsZW1lbnRfdHlwZSkKQEAgLTEyNSwxMyArMTI1LDEzIEBA
IGNsYXNzIENwcEdlbmVyYXRvcihHZW5lcmF0b3IpOgogCiAgICAgICAgICMgVGhpcyBoYW5kbGVz
IHRoZSAnYW55JyB0eXBlIGFuZCBvYmplY3RzIHdpdGggZGVmaW5lZCBwcm9wZXJ0aWVzLgogICAg
ICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBPYmplY3RUeXBlKSBvciBfdHlwZS5xdWFsaWZpZWRf
bmFtZSgpIGlzICdvYmplY3QnOgotICAgICAgICAgICAgY3BwX25hbWUgPSAnSW5zcGVjdG9yOjpJ
bnNwZWN0b3JPYmplY3QnCisgICAgICAgICAgICBjcHBfbmFtZSA9ICdKU09OOjpPYmplY3QnCiAg
ICAgICAgICAgICBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6CiAgICAgICAgICAgICAgICAgcmV0
dXJuICdjb25zdCAlcyonICUgY3BwX25hbWUKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAg
ICAgICAgcmV0dXJuICdjb25zdCAlcyYnICUgY3BwX25hbWUKICAgICAgICAgaWYgaXNpbnN0YW5j
ZShfdHlwZSwgQXJyYXlUeXBlKToKLSAgICAgICAgICAgIGNwcF9uYW1lID0gJ0luc3BlY3Rvcjo6
SW5zcGVjdG9yQXJyYXknCisgICAgICAgICAgICBjcHBfbmFtZSA9ICdKU09OOjpBcnJheScKICAg
ICAgICAgICAgIGlmIHBhcmFtZXRlci5pc19vcHRpb25hbDoKICAgICAgICAgICAgICAgICByZXR1
cm4gJ2NvbnN0ICVzKicgJSBjcHBfbmFtZQogICAgICAgICAgICAgZWxzZToKQEAgLTE3Miw5ICsx
NzIsOSBAQCBjbGFzcyBDcHBHZW5lcmF0b3IoR2VuZXJhdG9yKToKICAgICAgICAgaWYgaXNpbnN0
YW5jZShfdHlwZSwgUHJpbWl0aXZlVHlwZSk6CiAgICAgICAgICAgICBjcHBfbmFtZSA9IENwcEdl
bmVyYXRvci5jcHBfbmFtZV9mb3JfcHJpbWl0aXZlX3R5cGUoX3R5cGUpCiAgICAgICAgICAgICBp
ZiBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpIGluIFsnb2JqZWN0J106Ci0gICAgICAgICAgICAgICAg
cmV0dXJuICdSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+JworICAgICAgICAgICAg
ICAgIHJldHVybiAnUmVmUHRyPEpTT046Ok9iamVjdD4nCiAgICAgICAgICAgICBlbGlmIF90eXBl
LnF1YWxpZmllZF9uYW1lKCkgaW4gWydhbnknXToKLSAgICAgICAgICAgICAgICByZXR1cm4gJ1Jl
ZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPicKKyAgICAgICAgICAgICAgICByZXR1cm4g
J1JlZlB0cjxKU09OOjpWYWx1ZT4nCiAgICAgICAgICAgICBlbGlmIGlzX29wdGlvbmFsOgogICAg
ICAgICAgICAgICAgIHJldHVybiAnY29uc3QgJXMqIGNvbnN0JyAlIGNwcF9uYW1lCiAgICAgICAg
ICAgICBlbGlmIF90eXBlLnF1YWxpZmllZF9uYW1lKCkgaW4gWydzdHJpbmcnXToKQEAgLTI1NCw5
ICsyNTQsOSBAQCBjbGFzcyBDcHBHZW5lcmF0b3IoR2VuZXJhdG9yKToKICAgICAgICAgICAgIF90
eXBlID0gX3R5cGUucHJpbWl0aXZlX3R5cGUgICMgRmFsbCB0aHJvdWdoLgogCiAgICAgICAgIGlm
IGlzaW5zdGFuY2UoX3R5cGUsIE9iamVjdFR5cGUpOgotICAgICAgICAgICAgcmV0dXJuICJSZWZQ
dHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IgorICAgICAgICAgICAgcmV0dXJuICJSZWZQ
dHI8SlNPTjo6T2JqZWN0PiIKICAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgQXJyYXlUeXBl
KToKLSAgICAgICAgICAgIHJldHVybiAiUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXk+
IgorICAgICAgICAgICAgcmV0dXJuICJSZWZQdHI8SlNPTjo6QXJyYXk+IgogICAgICAgICBpZiBp
c2luc3RhbmNlKF90eXBlLCBQcmltaXRpdmVUeXBlKToKICAgICAgICAgICAgIGNwcF9uYW1lID0g
Q3BwR2VuZXJhdG9yLmNwcF9uYW1lX2Zvcl9wcmltaXRpdmVfdHlwZShfdHlwZSkKICAgICAgICAg
ICAgIGlmIF90eXBlLnF1YWxpZmllZF9uYW1lKCkgaW4gWydhbnknLCAnb2JqZWN0J106CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9j
cHBfZ2VuZXJhdG9yX3RlbXBsYXRlcy5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9jb2RlZ2VuL2NwcF9nZW5lcmF0b3JfdGVtcGxhdGVzLnB5CmluZGV4IGIyNTIz
ZmZlMjU2Li45NzkzMzJkZmYwZCAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vY3BwX2dlbmVyYXRvcl90ZW1wbGF0ZXMucHkKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vY3BwX2dlbmVy
YXRvcl90ZW1wbGF0ZXMucHkKQEAgLTk1LDcgKzk1LDcgQEAgcHJvdGVjdGVkOgogICAgICIiIiR7
Y2xhc3NBbmRFeHBvcnRNYWNyb30gJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyIGZpbmFs
IDogcHVibGljIFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyIHsKIHB1YmxpYzoKICAgICBz
dGF0aWMgUmVmPCR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEJhY2tlbmRE
aXNwYXRjaGVyJiwgJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwotICAg
IHZvaWQgZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8
SW5zcGVjdG9yT2JqZWN0PiYmIG1lc3NhZ2UpIG92ZXJyaWRlOworICAgIHZvaWQgZGlzcGF0Y2go
bG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYm
IG1lc3NhZ2UpIG92ZXJyaWRlOwogJHtjb21tYW5kRGVjbGFyYXRpb25zfQogcHJpdmF0ZToKICAg
ICAke2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImLCAke2Rv
bWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7CkBAIC0xMTksMTEgKzExOSwxMSBA
QCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCAke2NvbW1hbmROYW1lfSgke2luUGFyYW1ldGVy
c30pID0gMDsiIiIpCiAKICAgICBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uU21hbGxT
d2l0Y2ggPSAoCi0gICAgIiIidm9pZCAke2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXI6OmRp
c3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEluc3BlY3Rv
ck9iamVjdD4mJiBtZXNzYWdlKQorICAgICIiInZvaWQgJHtkb21haW5OYW1lfUJhY2tlbmREaXNw
YXRjaGVyOjpkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJl
ZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkKIHsKICAgICBSZWY8JHtkb21haW5OYW1lfUJhY2tl
bmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKIAotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IHBhcmFtZXRlcnM7CisgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVyczsKICAg
ICBtZXNzYWdlLT5nZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJwYXJhbXMiKSwgcGFyYW1ldGVycyk7
CiAKICR7ZGlzcGF0Y2hDYXNlc30KQEAgLTEzMiwxNCArMTMyLDE0IEBAICR7ZGlzcGF0Y2hDYXNl
c30KIH0iIiIpCiAKICAgICBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uTGFyZ2VTd2l0
Y2ggPSAoCi0iIiJ2b2lkICR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2go
bG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SW5zcGVjdG9yT2JqZWN0
PiYmIG1lc3NhZ2UpCisiIiJ2b2lkICR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcjo6ZGlz
cGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2Jq
ZWN0PiYmIG1lc3NhZ2UpCiB7CiAgICAgUmVmPCR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hl
cj4gcHJvdGVjdCgqdGhpcyk7CiAKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbWV0
ZXJzOworICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnM7CiAgICAgbWVzc2FnZS0+
Z2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgicGFyYW1zIiksIHBhcmFtZXRlcnMpOwogCi0gICAgdHlw
ZWRlZiB2b2lkICgke2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXI6OipDYWxsSGFuZGxlciko
bG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgbWVzc2FnZSk7CisgICAg
dHlwZWRlZiB2b2lkICgke2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXI6OipDYWxsSGFuZGxl
cikobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSk7CiAgICAg
dHlwZWRlZiBIYXNoTWFwPFN0cmluZywgQ2FsbEhhbmRsZXI+IERpc3BhdGNoTWFwOwogICAgIHN0
YXRpYyBOZXZlckRlc3Ryb3llZDxEaXNwYXRjaE1hcD4gZGlzcGF0Y2hNYXA7CiAgICAgaWYgKGRp
c3BhdGNoTWFwLmdldCgpLmlzRW1wdHkoKSkgewpAQCAtMTg5LDcgKzE4OSw3IEBAICR7ZG9tYWlu
TmFtZX1CYWNrZW5kRGlzcGF0Y2hlcjo6JHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyKEJh
Y2tlbmREaXNwYXRjaGVyCiAKIHZvaWQgJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVySGFu
ZGxlcjo6JHtjYWxsYmFja05hbWV9OjpzZW5kU3VjY2Vzcygke2Zvcm1hbFBhcmFtZXRlcnN9KQog
ewotICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IGpzb25NZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0
OjpjcmVhdGUoKTsKKyAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9i
amVjdDo6Y3JlYXRlKCk7CiAke291dFBhcmFtZXRlckFzc2lnbm1lbnRzfQogICAgIENhbGxiYWNr
QmFzZTo6c2VuZFN1Y2Nlc3MoV1RGTW92ZShqc29uTWVzc2FnZSkpOwogfSIiIikKQEAgLTIwNywx
NCArMjA3LDE0IEBAIHByaXZhdGU6CiAiIiIgICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgIGNs
YXNzIEJ1aWxkZXIgewogICAgIHByaXZhdGU6Ci0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IG1fcmVzdWx0OworICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBtX3Jlc3VsdDsKIAog
ICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3Rh
dGUoKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVp
bGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgIH0KIAotICAgICAgICBCdWlsZGVy
KFJlZjwvKiR7b2JqZWN0VHlwZX0qL0luc3BlY3Rvck9iamVjdD4mJiBvYmplY3QpCisgICAgICAg
IEJ1aWxkZXIoUmVmPC8qJHtvYmplY3RUeXBlfSovSlNPTjo6T2JqZWN0PiYmIG9iamVjdCkKICAg
ICAgICAgICAgIDogbV9yZXN1bHQoV1RGTW92ZShvYmplY3QpKQogICAgICAgICB7CiAgICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVk
X2luX25vbl9pbml0X3N0YXRlKTsKQEAgLTIyNyw5ICsyMjcsOSBAQCBwcml2YXRlOgogICAgICAg
ICBSZWY8JHtvYmplY3RUeXBlfT4gcmVsZWFzZSgpCiAgICAgICAgIHsKICAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7
Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoJHtvYmplY3RUeXBlfSkgPT0gc2l6
ZW9mKEluc3BlY3Rvck9iamVjdCksIGNhbm5vdF9jYXN0KTsKKyAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKHNpemVvZigke29iamVjdFR5cGV9KSA9PSBzaXplb2YoSlNPTjo6T2JqZWN0KSwgY2Fu
bm90X2Nhc3QpOwogCi0gICAgICAgICAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBt
X3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOworICAgICAgICAgICAgUmVmPEpTT046Ok9iamVjdD4g
cmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKICAgICAgICAgICAgIHJldHVybiBX
VEZNb3ZlKCpyZWludGVycHJldF9jYXN0PFJlZjwke29iamVjdFR5cGV9Pio+KCZyZXN1bHQpKTsK
ICAgICAgICAgfQogICAgIH07CkBAIC0yNDAsMTkgKzI0MCwxOSBAQCAke2NvbnN0cnVjdG9yRXhh
bXBsZX0KICAgICAgKi8KICAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkK
ICAgICB7Ci0gICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihJbnNwZWN0b3JPYmpl
Y3Q6OmNyZWF0ZSgpKTsKKyAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEpTT046
Ok9iamVjdDo6Y3JlYXRlKCkpOwogICAgIH0iIiIpCiAKICAgICBQcm90b2NvbE9iamVjdFJ1bnRp
bWVDYXN0ID0gKAotIiIiUmVmUHRyPCR7b2JqZWN0VHlwZX0+IEJpbmRpbmdUcmFpdHM8JHtvYmpl
Y3RUeXBlfT46OnJ1bnRpbWVDYXN0KFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4mJiB2YWx1ZSkKKyIi
IlJlZlB0cjwke29iamVjdFR5cGV9PiBCaW5kaW5nVHJhaXRzPCR7b2JqZWN0VHlwZX0+OjpydW50
aW1lQ2FzdChSZWZQdHI8SlNPTjo6VmFsdWU+JiYgdmFsdWUpCiB7Ci0gICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gcmVzdWx0OworICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHJlc3VsdDsKICAg
ICBib29sIGNhc3RTdWNjZWVkZWQgPSB2YWx1ZS0+YXNPYmplY3QocmVzdWx0KTsKICAgICBBU1NF
UlRfVU5VU0VEKGNhc3RTdWNjZWVkZWQsIGNhc3RTdWNjZWVkZWQpOwogI2lmICFBU1NFUlRfRElT
QUJMRUQKICAgICBCaW5kaW5nVHJhaXRzPCR7b2JqZWN0VHlwZX0+Ojphc3NlcnRWYWx1ZUhhc0V4
cGVjdGVkVHlwZShyZXN1bHQuZ2V0KCkpOwogI2VuZGlmICAvLyAhQVNTRVJUX0RJU0FCTEVECi0g
ICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKCR7b2JqZWN0VHlwZX0pID09IHNpemVvZihJbnNwZWN0
b3JPYmplY3RCYXNlKSwgdHlwZV9jYXN0X3Byb2JsZW0pOwotICAgIHJldHVybiBzdGF0aWNfY2Fz
dDwke29iamVjdFR5cGV9Kj4oc3RhdGljX2Nhc3Q8SW5zcGVjdG9yT2JqZWN0QmFzZSo+KHJlc3Vs
dC5nZXQoKSkpOworICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZigke29iamVjdFR5cGV9KSA9PSBz
aXplb2YoSlNPTjo6T2JqZWN0QmFzZSksIHR5cGVfY2FzdF9wcm9ibGVtKTsKKyAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8JHtvYmplY3RUeXBlfSo+KHN0YXRpY19jYXN0PEpTT046Ok9iamVjdEJhc2Uq
PihyZXN1bHQuZ2V0KCkpKTsKIH0KICIiIikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9wcm90b2NvbF90eXBl
c19oZWFkZXIucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29k
ZWdlbi9nZW5lcmF0ZV9jcHBfcHJvdG9jb2xfdHlwZXNfaGVhZGVyLnB5CmluZGV4IDRkNjUzMzFm
YjNkLi5iOTUwNTY1ZDExNCAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX3Byb3RvY29sX3R5cGVzX2hlYWRlci5w
eQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9n
ZW5lcmF0ZV9jcHBfcHJvdG9jb2xfdHlwZXNfaGVhZGVyLnB5CkBAIC0yMDUsNyArMjA1LDcgQEAg
Y2xhc3MgQ3BwUHJvdG9jb2xUeXBlc0hlYWRlckdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAg
ICAgICBsaW5lcyA9IFtdCiAgICAgICAgIGlmIGxlbih0eXBlX2RlY2xhcmF0aW9uLmRlc2NyaXB0
aW9uKSA+IDA6CiAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJy8qICVzICovJyAlIHR5cGVfZGVj
bGFyYXRpb24uZGVzY3JpcHRpb24pCi0gICAgICAgIGJhc2VfY2xhc3MgPSAnSW5zcGVjdG9yOjpJ
bnNwZWN0b3JPYmplY3QnCisgICAgICAgIGJhc2VfY2xhc3MgPSAnSlNPTjo6T2JqZWN0JwogICAg
ICAgICBpZiBub3QgR2VuZXJhdG9yLnR5cGVfaGFzX29wZW5fZmllbGRzKHR5cGVfZGVjbGFyYXRp
b24udHlwZSk6CiAgICAgICAgICAgICBiYXNlX2NsYXNzID0gYmFzZV9jbGFzcyArICdCYXNlJwog
ICAgICAgICBsaW5lcy5hcHBlbmQoJ2NsYXNzICVzIDogcHVibGljICVzIHsnICUgKG9iamVjdF9u
YW1lLCBiYXNlX2NsYXNzKSkKQEAgLTM2MSw5ICszNjEsOSBAQCBjbGFzcyBDcHBQcm90b2NvbFR5
cGVzSGVhZGVyR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgICAgIGZvciBhcmd1bWVudCBp
biB0eXBlX2FyZ3VtZW50czoKICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgndGVtcGxhdGU8PiAl
cyBCaW5kaW5nVHJhaXRzPCVzPiB7JyAlICgnICcuam9pbihzdHJ1Y3Rfa2V5d29yZHMpLCBhcmd1
bWVudFswXSkpCiAgICAgICAgICAgICBpZiBhcmd1bWVudFsxXToKLSAgICAgICAgICAgICAgICBs
aW5lcy5hcHBlbmQoJ3N0YXRpYyBSZWZQdHI8JXM+IHJ1bnRpbWVDYXN0KFJlZlB0cjxJbnNwZWN0
b3I6Okluc3BlY3RvclZhbHVlPiYmIHZhbHVlKTsnICUgYXJndW1lbnRbMF0pCisgICAgICAgICAg
ICAgICAgbGluZXMuYXBwZW5kKCdzdGF0aWMgUmVmUHRyPCVzPiBydW50aW1lQ2FzdChSZWZQdHI8
SlNPTjo6VmFsdWU+JiYgdmFsdWUpOycgJSBhcmd1bWVudFswXSkKICAgICAgICAgICAgIGxpbmVz
LmFwcGVuZCgnI2lmICFBU1NFUlRfRElTQUJMRUQnKQotICAgICAgICAgICAgbGluZXMuYXBwZW5k
KCclcyBhc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVl
Kik7JyAlICcgJy5qb2luKGZ1bmN0aW9uX2tleXdvcmRzKSkKKyAgICAgICAgICAgIGxpbmVzLmFw
cGVuZCgnJXMgYXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoSlNPTjo6VmFsdWUqKTsnICUgJyAn
LmpvaW4oZnVuY3Rpb25fa2V5d29yZHMpKQogICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcjZW5k
aWYgLy8gIUFTU0VSVF9ESVNBQkxFRCcpCiAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ307JykK
ICAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9wcm90b2Nv
bF90eXBlc19pbXBsZW1lbnRhdGlvbi5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9wcm90b2NvbF90eXBlc19pbXBsZW1lbnRh
dGlvbi5weQppbmRleCBjNzFjMzlhYTcxZi4uZGQxZDAxZjRkMjUgMTAwNzU1Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9w
cm90b2NvbF90eXBlc19pbXBsZW1lbnRhdGlvbi5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfcHJvdG9jb2xfdHlwZXNf
aW1wbGVtZW50YXRpb24ucHkKQEAgLTE5OCw3ICsxOTgsNyBAQCBjbGFzcyBDcHBQcm90b2NvbFR5
cGVzSW1wbGVtZW50YXRpb25HZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICAgICAgbGluZXMg
PSBbXQogCiAgICAgICAgIGxpbmVzLmFwcGVuZCgnI2lmICFBU1NFUlRfRElTQUJMRUQnKQotICAg
ICAgICBsaW5lcy5hcHBlbmQoJ3ZvaWQgQmluZGluZ1RyYWl0czwlcz46OmFzc2VydFZhbHVlSGFz
RXhwZWN0ZWRUeXBlKEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUqIHZhbHVlKScgJSAoQ3BwR2Vu
ZXJhdG9yLmNwcF9wcm90b2NvbF90eXBlX2Zvcl90eXBlKG9iamVjdF9kZWNsYXJhdGlvbi50eXBl
KSkpCisgICAgICAgIGxpbmVzLmFwcGVuZCgndm9pZCBCaW5kaW5nVHJhaXRzPCVzPjo6YXNzZXJ0
VmFsdWVIYXNFeHBlY3RlZFR5cGUoSlNPTjo6VmFsdWUqIHZhbHVlKScgJSAoQ3BwR2VuZXJhdG9y
LmNwcF9wcm90b2NvbF90eXBlX2Zvcl90eXBlKG9iamVjdF9kZWNsYXJhdGlvbi50eXBlKSkpCiAg
ICAgICAgIGxpbmVzLmFwcGVuZCgiIiJ7CiAgICAgQVNTRVJUX0FSRyh2YWx1ZSwgdmFsdWUpOwog
ICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG9iamVjdDsKQEAgLTI0Niw3ICsyNDYsNyBAQCBj
bGFzcyBDcHBQcm90b2NvbFR5cGVzSW1wbGVtZW50YXRpb25HZW5lcmF0b3IoQ3BwR2VuZXJhdG9y
KToKICAgICBkZWYgX2dlbmVyYXRlX2Fzc2VydGlvbl9mb3JfZW51bShzZWxmLCBlbnVtX21lbWJl
ciwgb2JqZWN0X2RlY2xhcmF0aW9uKToKICAgICAgICAgbGluZXMgPSBbXQogICAgICAgICBsaW5l
cy5hcHBlbmQoJyNpZiAhQVNTRVJUX0RJU0FCTEVEJykKLSAgICAgICAgbGluZXMuYXBwZW5kKCd2
b2lkICVzKEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUqIHZhbHVlKScgJSBDcHBHZW5lcmF0b3Iu
Y3BwX2Fzc2VydGlvbl9tZXRob2RfZm9yX3R5cGVfbWVtYmVyKGVudW1fbWVtYmVyLCBvYmplY3Rf
ZGVjbGFyYXRpb24pKQorICAgICAgICBsaW5lcy5hcHBlbmQoJ3ZvaWQgJXMoSlNPTjo6VmFsdWUq
IHZhbHVlKScgJSBDcHBHZW5lcmF0b3IuY3BwX2Fzc2VydGlvbl9tZXRob2RfZm9yX3R5cGVfbWVt
YmVyKGVudW1fbWVtYmVyLCBvYmplY3RfZGVjbGFyYXRpb24pKQogICAgICAgICBsaW5lcy5hcHBl
bmQoJ3snKQogICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBBU1NFUlRfQVJHKHZhbHVlLCB2YWx1
ZSk7JykKICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgU3RyaW5nIHJlc3VsdDsnKQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2FsbC9l
eHBlY3RlZC9kZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uLXJlc3VsdCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9hbGwvZXhwZWN0ZWQvZGVm
aW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbi1yZXN1bHQKaW5kZXggNmQwN2Q5ZTAyYmMu
LjNmNzgzY2Q0OGMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvYWxsL2V4cGVjdGVkL2RlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3Jt
Lmpzb24tcmVzdWx0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9hbGwvZXhwZWN0ZWQvZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbi1y
ZXN1bHQKQEAgLTE1Miw3ICsxNTIsNyBAQCBwcm90ZWN0ZWQ6CiBjbGFzcyBOZXR3b3JrQmFja2Vu
ZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIg
ewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8TmV0d29ya0JhY2tlbmREaXNwYXRjaGVyPiBjcmVh
dGUoQmFja2VuZERpc3BhdGNoZXImLCBOZXR3b3JrQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7
Ci0gICAgdm9pZCBkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2Qs
IFJlZjxJbnNwZWN0b3JPYmplY3Q+JiYgbWVzc2FnZSkgb3ZlcnJpZGU7CisgICAgdm9pZCBkaXNw
YXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmpl
Y3Q+JiYgbWVzc2FnZSkgb3ZlcnJpZGU7CiBwcml2YXRlOgogICAgIHZvaWQgbG9hZFJlc291cmNl
KGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIHBhcmFtZXRlcnMpOwog
I2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQpAQCAtMjI4LDExICsy
MjgsMTEgQEAgTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyOjpOZXR3b3JrQmFja2VuZERpc3BhdGNo
ZXIoQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXMKICAgICBtX2JhY2tlbmREaXNwYXRjaGVy
LT5yZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4oQVNDSUlMaXRlcmFsKCJOZXR3b3JrIiksIHRo
aXMpOwogfQogCi12b2lkIE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyBy
ZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SW5zcGVjdG9yT2JqZWN0PiYmIG1l
c3NhZ2UpCit2b2lkIE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1
ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2Up
CiB7CiAgICAgUmVmPE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7CiAK
LSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbWV0ZXJzOworICAgIFJlZlB0cjxKU09O
OjpPYmplY3Q+IHBhcmFtZXRlcnM7CiAgICAgbWVzc2FnZS0+Z2V0T2JqZWN0KEFTQ0lJTGl0ZXJh
bCgicGFyYW1zIiksIHBhcmFtZXRlcnMpOwogCiAgICAgaWYgKG1ldGhvZCA9PSAibG9hZFJlc291
cmNlIikKQEAgLTQxOSw3ICs0MTksNyBAQCBjbGFzcyBOZXR3b3JrRXJyb3I7CiAKIAogbmFtZXNw
YWNlIE5ldHdvcmsgewotY2xhc3MgTmV0d29ya0Vycm9yIDogcHVibGljIEluc3BlY3Rvcjo6SW5z
cGVjdG9yT2JqZWN0QmFzZSB7CitjbGFzcyBOZXR3b3JrRXJyb3IgOiBwdWJsaWMgSlNPTjo6T2Jq
ZWN0QmFzZSB7CiBwdWJsaWM6CiAgICAgZW51bSB7CiAgICAgICAgIE5vRmllbGRzU2V0ID0gMCwK
QEAgLTQzMSwxNCArNDMxLDE0IEBAIHB1YmxpYzoKICAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAg
ICAgY2xhc3MgQnVpbGRlciB7CiAgICAgcHJpdmF0ZToKLSAgICAgICAgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gbV9yZXN1bHQ7CisgICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG1fcmVzdWx0
OwogCiAgICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNh
c3RTdGF0ZSgpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2Fz
dDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICAgfQogCi0gICAgICAgIEJ1
aWxkZXIoUmVmPC8qTmV0d29ya0Vycm9yKi9JbnNwZWN0b3JPYmplY3Q+JiYgb2JqZWN0KQorICAg
ICAgICBCdWlsZGVyKFJlZjwvKk5ldHdvcmtFcnJvciovSlNPTjo6T2JqZWN0PiYmIG9iamVjdCkK
ICAgICAgICAgICAgIDogbV9yZXN1bHQoV1RGTW92ZShvYmplY3QpKQogICAgICAgICB7CiAgICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVh
dGVkX2luX25vbl9pbml0X3N0YXRlKTsKQEAgLTQ2Myw5ICs0NjMsOSBAQCBwdWJsaWM6CiAgICAg
ICAgIFJlZjxOZXR3b3JrRXJyb3I+IHJlbGVhc2UoKQogICAgICAgICB7CiAgICAgICAgICAgICBD
T01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkp
OwotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKE5ldHdvcmtFcnJvcikgPT0gc2l6
ZW9mKEluc3BlY3Rvck9iamVjdCksIGNhbm5vdF9jYXN0KTsKKyAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKHNpemVvZihOZXR3b3JrRXJyb3IpID09IHNpemVvZihKU09OOjpPYmplY3QpLCBjYW5u
b3RfY2FzdCk7CiAKLSAgICAgICAgICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IG1f
cmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7CisgICAgICAgICAgICBSZWY8SlNPTjo6T2JqZWN0PiBy
ZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOwogICAgICAgICAgICAgcmV0dXJuIFdU
Rk1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPE5ldHdvcmtFcnJvcj4qPigmcmVzdWx0KSk7CiAg
ICAgICAgIH0KICAgICB9OwpAQCAtNDc5LDcgKzQ3OSw3IEBAIHB1YmxpYzoKICAgICAgKi8KICAg
ICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKICAgICB7Ci0gICAgICAgIHJl
dHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpKTsKKyAg
ICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEpTT046Ok9iamVjdDo6Y3JlYXRlKCkp
OwogICAgIH0KIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2NvbW1hbmRzLXdpdGgtYXN5bmMtYXR0
cmlidXRlLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUu
anNvbi1yZXN1bHQKaW5kZXggODI2NGQyMTY0OGQuLmEzNjcyOWUzZTc1IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBl
Y3RlZC9jb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uLXJlc3VsdAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3Rl
ZC9jb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uLXJlc3VsdApAQCAtMTU3LDE4ICsx
NTcsMTggQEAgcHVibGljOgogICAgICAgICBZZWxsb3cgPSA1LAogICAgICAgICBCbGFjayA9IDYs
CiAgICAgfTsgLy8gZW51bSBjbGFzcyBQcmludENvbG9yCi0gICAgdmlydHVhbCB2b2lkIGV4ZWN1
dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMoRXJyb3JTdHJpbmcmLCBpbnQgaW5fZGF0YWJh
c2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkFycmF5PFN0cmluZz4+JiBvcHRfb3V0X2NvbHVtbk5hbWVzLCBJbnNwZWN0b3I6OlByb3RvY29s
OjpPcHRPdXRwdXQ8U3RyaW5nPiogb3B0X291dF9ub3RlcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6
T3B0T3V0cHV0PGRvdWJsZT4qIG9wdF9vdXRfdGltZXN0YW1wLCBJbnNwZWN0b3I6OlByb3RvY29s
OjpPcHRPdXRwdXQ8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+KiBvcHRfb3V0X3ZhbHVlcywg
SW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+
KiBvcHRfb3V0X3BheWxvYWQsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxpbnQ+KiBv
cHRfb3V0X2RhdGFiYXNlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6
RXJyb3I+JiBvcHRfb3V0X3NxbEVycm9yLCBJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6
UHJpbWFyeUNvbG9ycyogb3B0X291dF9zY3JlZW5Db2xvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+JiBvcHRfb3V0X2FsdGVybmF0ZUNvbG9ycywgRGF0
YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3IqIG9wdF9vdXRfcHJpbnRD
b2xvcikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJu
VmFsdWVzKEVycm9yU3RyaW5nJiwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5f
cXVlcnksIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+PiYgb3B0X291
dF9jb2x1bW5OYW1lcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PFN0cmluZz4qIG9w
dF9vdXRfbm90ZXMsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxkb3VibGU+KiBvcHRf
b3V0X3RpbWVzdGFtcCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PEpTT046Ok9iamVj
dD4qIG9wdF9vdXRfdmFsdWVzLCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8SlNPTjo6
VmFsdWU+KiBvcHRfb3V0X3BheWxvYWQsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxp
bnQ+KiBvcHRfb3V0X2RhdGFiYXNlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRh
YmFzZTo6RXJyb3I+JiBvcHRfb3V0X3NxbEVycm9yLCBJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRh
YmFzZTo6UHJpbWFyeUNvbG9ycyogb3B0X291dF9zY3JlZW5Db2xvciwgUmVmUHRyPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+JiBvcHRfb3V0X2FsdGVybmF0ZUNvbG9y
cywgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3IqIG9wdF9vdXRf
cHJpbnRDb2xvcikgPSAwOwogICAgIGNsYXNzIEV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJu
VmFsdWVzQ2FsbGJhY2sgOiBwdWJsaWMgQmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZSB7
CiAgICAgcHVibGljOgogICAgICAgICBFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVl
c0NhbGxiYWNrKFJlZjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiwgaW50IGlkKTsKLSAgICAgICAgdm9p
ZCBzZW5kU3VjY2VzcyhSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPj4m
JiBjb2x1bW5OYW1lcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PFN0cmluZz4qIG5v
dGVzLCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8ZG91YmxlPiogdGltZXN0YW1wLCBJ
bnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+
KiB2YWx1ZXMsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxJbnNwZWN0b3I6Okluc3Bl
Y3RvclZhbHVlPiogcGF5bG9hZCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PGludD4q
IGRhdGFiYXNlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+
JiYgc3FsRXJyb3IsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxTdHJpbmc+KiBzY3Jl
ZW5Db2xvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+
JiYgYWx0ZXJuYXRlQ29sb3JzLCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8U3RyaW5n
PiogcHJpbnRDb2xvcik7CisgICAgICAgIHZvaWQgc2VuZFN1Y2Nlc3MoUmVmUHRyPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+JiYgY29sdW1uTmFtZXMsIEluc3BlY3Rvcjo6UHJv
dG9jb2w6Ok9wdE91dHB1dDxTdHJpbmc+KiBub3RlcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0
T3V0cHV0PGRvdWJsZT4qIHRpbWVzdGFtcCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0
PEpTT046Ok9iamVjdD4qIHZhbHVlcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PEpT
T046OlZhbHVlPiogcGF5bG9hZCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PGludD4q
IGRhdGFiYXNlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+
JiYgc3FsRXJyb3IsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxTdHJpbmc+KiBzY3Jl
ZW5Db2xvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+
JiYgYWx0ZXJuYXRlQ29sb3JzLCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8U3RyaW5n
PiogcHJpbnRDb2xvcik7CiAgICAgfTsKICAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVNRTEFzeW5j
T3B0aW9uYWxSZXR1cm5WYWx1ZXMoRXJyb3JTdHJpbmcmLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29u
c3QgU3RyaW5nJiBpbl9xdWVyeSwgUmVmPEV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFs
dWVzQ2FsbGJhY2s+JiYgY2FsbGJhY2spID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVNR
TFN5bmMoRXJyb3JTdHJpbmcmLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9x
dWVyeSwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+JiBvdXRfY29s
dW1uTmFtZXMsIFN0cmluZyogb3V0X25vdGVzLCBkb3VibGUqIG91dF90aW1lc3RhbXAsIEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yT2JqZWN0KiBvdXRfdmFsdWVzLCBJbnNwZWN0b3I6Okluc3BlY3RvclZh
bHVlKiBvdXRfcGF5bG9hZCwgaW50KiBvdXRfZGF0YWJhc2VJZCwgUmVmUHRyPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4mIG91dF9zcWxFcnJvciwgUmVmUHRyPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+JiBvdXRfYWx0ZXJuYXRlQ29sb3JzLCBJ
bnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyogb3V0X3NjcmVlbkNv
bG9yLCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UHJpbnRDb2xvciogb3V0X3By
aW50Q29sb3IpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVNRTFN5bmMoRXJyb3JTdHJp
bmcmLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSwgUmVmUHRyPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+JiBvdXRfY29sdW1uTmFtZXMsIFN0cmlu
Zyogb3V0X25vdGVzLCBkb3VibGUqIG91dF90aW1lc3RhbXAsIEpTT046Ok9iamVjdCogb3V0X3Zh
bHVlcywgSlNPTjo6VmFsdWUqIG91dF9wYXlsb2FkLCBpbnQqIG91dF9kYXRhYmFzZUlkLCBSZWZQ
dHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiYgb3V0X3NxbEVycm9yLCBS
ZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4mIG91dF9hbHRl
cm5hdGVDb2xvcnMsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3Jz
KiBvdXRfc2NyZWVuQ29sb3IsIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpQcmlu
dENvbG9yKiBvdXRfcHJpbnRDb2xvcikgPSAwOwogICAgIGNsYXNzIEV4ZWN1dGVTUUxBc3luY0Nh
bGxiYWNrIDogcHVibGljIEJhY2tlbmREaXNwYXRjaGVyOjpDYWxsYmFja0Jhc2UgewogICAgIHB1
YmxpYzoKICAgICAgICAgRXhlY3V0ZVNRTEFzeW5jQ2FsbGJhY2soUmVmPEJhY2tlbmREaXNwYXRj
aGVyPiYmLCBpbnQgaWQpOwotICAgICAgICB2b2lkIHNlbmRTdWNjZXNzKFJlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+PiYmIGNvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcm
IG5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCB2YWx1
ZXMsIEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUgcGF5bG9hZCwgaW50IGRhdGFiYXNlSWQsIFJl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+JiYgc3FsRXJyb3IsIGNv
bnN0IFN0cmluZyYgc2NyZWVuQ29sb3IsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRh
YmFzZTo6Q29sb3JMaXN0PiYmIGFsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nJiBwcmludENv
bG9yKTsKKyAgICAgICAgdm9pZCBzZW5kU3VjY2VzcyhSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6QXJyYXk8U3RyaW5nPj4mJiBjb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBub3RlcywgZG91
YmxlIHRpbWVzdGFtcCwgSlNPTjo6T2JqZWN0IHZhbHVlcywgSlNPTjo6VmFsdWUgcGF5bG9hZCwg
aW50IGRhdGFiYXNlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJy
b3I+JiYgc3FsRXJyb3IsIGNvbnN0IFN0cmluZyYgc2NyZWVuQ29sb3IsIFJlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiYmIGFsdGVybmF0ZUNvbG9ycywgY29u
c3QgU3RyaW5nJiBwcmludENvbG9yKTsKICAgICB9OwogICAgIHZpcnR1YWwgdm9pZCBleGVjdXRl
U1FMQXN5bmMoRXJyb3JTdHJpbmcmLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBp
bl9xdWVyeSwgUmVmPEV4ZWN1dGVTUUxBc3luY0NhbGxiYWNrPiYmIGNhbGxiYWNrKSA9IDA7CiBw
cm90ZWN0ZWQ6CkBAIC0xNzgsNyArMTc4LDcgQEAgcHJvdGVjdGVkOgogY2xhc3MgRGF0YWJhc2VC
YWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0
Y2hlciB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVy
PiBjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImLCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFu
ZGxlciopOwotICAgIHZvaWQgZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYg
bWV0aG9kLCBSZWY8SW5zcGVjdG9yT2JqZWN0PiYmIG1lc3NhZ2UpIG92ZXJyaWRlOworICAgIHZv
aWQgZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNP
Tjo6T2JqZWN0PiYmIG1lc3NhZ2UpIG92ZXJyaWRlOwogcHJpdmF0ZToKICAgICB2b2lkIGV4ZWN1
dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+JiYgcGFyYW1ldGVycyk7CiAgICAgdm9pZCBleGVjdXRlU1FMQXN5bmNPcHRp
b25hbFJldHVyblZhbHVlcyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4m
JiBwYXJhbWV0ZXJzKTsKQEAgLTI1NywxMSArMjU3LDExIEBAIERhdGFiYXNlQmFja2VuZERpc3Bh
dGNoZXI6OkRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImIGJhY2tl
bmRECiAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNwYXRjaGVyRm9yRG9tYWlu
KEFTQ0lJTGl0ZXJhbCgiRGF0YWJhc2UiKSwgdGhpcyk7CiB9CiAKLXZvaWQgRGF0YWJhc2VCYWNr
ZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0
aG9kLCBSZWY8SW5zcGVjdG9yT2JqZWN0PiYmIG1lc3NhZ2UpCit2b2lkIERhdGFiYXNlQmFja2Vu
ZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhv
ZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKQogewogICAgIFJlZjxEYXRhYmFzZUJhY2tl
bmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKIAotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IHBhcmFtZXRlcnM7CisgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVyczsKICAg
ICBtZXNzYWdlLT5nZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJwYXJhbXMiKSwgcGFyYW1ldGVycyk7
CiAKICAgICBpZiAobWV0aG9kID09ICJleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVz
IikKQEAgLTI5Nyw4ICsyOTcsOCBAQCB2b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4
ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyByZXF1ZXN0SQogICAgIFJlZlB0
cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+PiBvdXRfY29sdW1uTmFtZXM7CiAg
ICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PFN0cmluZz4gb3V0X25vdGVzOwogICAg
IEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxkb3VibGU+IG91dF90aW1lc3RhbXA7Ci0g
ICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PEluc3BlY3Rvcjo6SW5zcGVjdG9yT2Jq
ZWN0PiBvdXRfdmFsdWVzOwotICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxJbnNw
ZWN0b3I6Okluc3BlY3RvclZhbHVlPiBvdXRfcGF5bG9hZDsKKyAgICBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpPcHRPdXRwdXQ8SlNPTjo6T2JqZWN0PiBvdXRfdmFsdWVzOworICAgIEluc3BlY3Rvcjo6
UHJvdG9jb2w6Ok9wdE91dHB1dDxKU09OOjpWYWx1ZT4gb3V0X3BheWxvYWQ7CiAgICAgSW5zcGVj
dG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpE
YXRhYmFzZUlkPiBvdXRfZGF0YWJhc2VJZDsKICAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6RGF0YWJhc2U6OkVycm9yPiBvdXRfc3FsRXJyb3I7CiAgICAgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMgb3V0X3NjcmVlbkNvbG9yOwpAQCAtMzM2LDkgKzMz
Niw5IEBAIHZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTFN5bmNPcHRp
b25hbFJldHVyblZhbHVlcyhsb25nIHJlcXVlc3RJCiAKIERhdGFiYXNlQmFja2VuZERpc3BhdGNo
ZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc0NhbGxiYWNrOjpF
eGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc0NhbGxiYWNrKFJlZjxCYWNrZW5kRGlz
cGF0Y2hlcj4mJiBiYWNrZW5kRGlzcGF0Y2hlciwgaW50IGlkKSA6IEJhY2tlbmREaXNwYXRjaGVy
OjpDYWxsYmFja0Jhc2UoV1RGTW92ZShiYWNrZW5kRGlzcGF0Y2hlciksIGlkKSB7IH0KIAotdm9p
ZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhlY3V0ZVNRTEFzeW5jT3B0aW9u
YWxSZXR1cm5WYWx1ZXNDYWxsYmFjazo6c2VuZFN1Y2Nlc3MoUmVmUHRyPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkFycmF5PFN0cmluZz4+JiYgY29sdW1uTmFtZXMsIEluc3BlY3Rvcjo6UHJvdG9jb2w6
Ok9wdE91dHB1dDxTdHJpbmc+KiBub3RlcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0
PGRvdWJsZT4qIHRpbWVzdGFtcCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiogdmFsdWVzLCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRP
dXRwdXQ8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4qIHBheWxvYWQsIEluc3BlY3Rvcjo6UHJv
dG9jb2w6Ok9wdE91dHB1dDxpbnQ+KiBkYXRhYmFzZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6RGF0YWJhc2U6OkVycm9yPiYmIHNxbEVycm9yLCBJbnNwZWN0b3I6OlByb3RvY29sOjpP
cHRPdXRwdXQ8U3RyaW5nPiogc2NyZWVuQ29sb3IsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29s
OjpEYXRhYmFzZTo6Q29sb3JMaXN0PiYmIGFsdGVybmF0ZUNvbG9ycywgSW5zcGVjdG9yOjpQcm90
b2NvbDo6T3B0T3V0cHV0PFN0cmluZz4qIHByaW50Q29sb3IpCit2b2lkIERhdGFiYXNlQmFja2Vu
ZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc0Nh
bGxiYWNrOjpzZW5kU3VjY2VzcyhSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3Ry
aW5nPj4mJiBjb2x1bW5OYW1lcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PFN0cmlu
Zz4qIG5vdGVzLCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8ZG91YmxlPiogdGltZXN0
YW1wLCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8SlNPTjo6T2JqZWN0PiogdmFsdWVz
LCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8SlNPTjo6VmFsdWU+KiBwYXlsb2FkLCBJ
bnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8aW50PiogZGF0YWJhc2VJZCwgUmVmUHRyPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4mJiBzcWxFcnJvciwgSW5zcGVjdG9y
OjpQcm90b2NvbDo6T3B0T3V0cHV0PFN0cmluZz4qIHNjcmVlbkNvbG9yLCBSZWZQdHI8SW5zcGVj
dG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4mJiBhbHRlcm5hdGVDb2xvcnMsIElu
c3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxTdHJpbmc+KiBwcmludENvbG9yKQogewotICAg
IFJlZjxJbnNwZWN0b3JPYmplY3Q+IGpzb25NZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKTsKKyAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6
Y3JlYXRlKCk7CiAgICAgaWYgKGNvbHVtbk5hbWVzKQogICAgICAgICBqc29uTWVzc2FnZS0+c2V0
QXJyYXkoQVNDSUlMaXRlcmFsKCJjb2x1bW5OYW1lcyIpLCBjb2x1bW5OYW1lcyk7CiAgICAgaWYg
KG5vdGVzLmlzQXNzaWduZWQoKSkKQEAgLTQxMSw4ICs0MTEsOCBAQCB2b2lkIERhdGFiYXNlQmFj
a2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxTeW5jKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SW5z
cGVjdG9yTwogICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+PiBv
dXRfY29sdW1uTmFtZXM7CiAgICAgU3RyaW5nIG91dF9ub3RlczsKICAgICBkb3VibGUgb3V0X3Rp
bWVzdGFtcDsKLSAgICBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCBvdXRfdmFsdWVzOwotICAg
IEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUgb3V0X3BheWxvYWQ7CisgICAgSlNPTjo6T2JqZWN0
IG91dF92YWx1ZXM7CisgICAgSlNPTjo6VmFsdWUgb3V0X3BheWxvYWQ7CiAgICAgSW5zcGVjdG9y
OjpQcm90b2NvbDo6RGF0YWJhc2U6OkRhdGFiYXNlSWQgb3V0X2RhdGFiYXNlSWQ7CiAgICAgUmVm
UHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4gb3V0X3NxbEVycm9yOwog
ICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiBvdXRf
YWx0ZXJuYXRlQ29sb3JzOwpAQCAtNDQwLDkgKzQ0MCw5IEBAIHZvaWQgRGF0YWJhc2VCYWNrZW5k
RGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTFN5bmMobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxJbnNwZWN0
b3JPCiAKIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmND
YWxsYmFjazo6RXhlY3V0ZVNRTEFzeW5jQ2FsbGJhY2soUmVmPEJhY2tlbmREaXNwYXRjaGVyPiYm
IGJhY2tlbmREaXNwYXRjaGVyLCBpbnQgaWQpIDogQmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNr
QmFzZShXVEZNb3ZlKGJhY2tlbmREaXNwYXRjaGVyKSwgaWQpIHsgfQogCi12b2lkIERhdGFiYXNl
QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNDYWxsYmFjazo6c2VuZFN1
Y2Nlc3MoUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+JiYgY29sdW1u
TmFtZXMsIGNvbnN0IFN0cmluZyYgbm90ZXMsIGRvdWJsZSB0aW1lc3RhbXAsIEluc3BlY3Rvcjo6
SW5zcGVjdG9yT2JqZWN0IHZhbHVlcywgSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSBwYXlsb2Fk
LCBpbnQgZGF0YWJhc2VJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpF
cnJvcj4mJiBzcWxFcnJvciwgY29uc3QgU3RyaW5nJiBzY3JlZW5Db2xvciwgUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+JiYgYWx0ZXJuYXRlQ29sb3JzLCBj
b25zdCBTdHJpbmcmIHByaW50Q29sb3IpCit2b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNDYWxsYmFjazo6c2VuZFN1Y2Nlc3MoUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+JiYgY29sdW1uTmFtZXMsIGNvbnN0IFN0cmlu
ZyYgbm90ZXMsIGRvdWJsZSB0aW1lc3RhbXAsIEpTT046Ok9iamVjdCB2YWx1ZXMsIEpTT046OlZh
bHVlIHBheWxvYWQsIGludCBkYXRhYmFzZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6
RGF0YWJhc2U6OkVycm9yPiYmIHNxbEVycm9yLCBjb25zdCBTdHJpbmcmIHNjcmVlbkNvbG9yLCBS
ZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4mJiBhbHRlcm5h
dGVDb2xvcnMsIGNvbnN0IFN0cmluZyYgcHJpbnRDb2xvcikKIHsKLSAgICBSZWY8SW5zcGVjdG9y
T2JqZWN0PiBqc29uTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVm
PEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAg
IGpzb25NZXNzYWdlLT5zZXRBcnJheShBU0NJSUxpdGVyYWwoImNvbHVtbk5hbWVzIiksIGNvbHVt
bk5hbWVzKTsKICAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgibm90ZXMi
KSwgbm90ZXMpOwogICAgIGpzb25NZXNzYWdlLT5zZXREb3VibGUoQVNDSUlMaXRlcmFsKCJ0aW1l
c3RhbXAiKSwgdGltZXN0YW1wKTsKQEAgLTY1Miw3ICs2NTIsNyBAQCBlbnVtIGNsYXNzIFByaW1h
cnlDb2xvcnMgewogICAgIEJsdWUgPSAyLAogfTsgLy8gZW51bSBjbGFzcyBQcmltYXJ5Q29sb3Jz
CiAvKiBEYXRhYmFzZSBlcnJvci4gKi8KLWNsYXNzIEVycm9yIDogcHVibGljIEluc3BlY3Rvcjo6
SW5zcGVjdG9yT2JqZWN0QmFzZSB7CitjbGFzcyBFcnJvciA6IHB1YmxpYyBKU09OOjpPYmplY3RC
YXNlIHsKIHB1YmxpYzoKICAgICBlbnVtIHsKICAgICAgICAgTm9GaWVsZHNTZXQgPSAwLApAQCAt
NjY0LDE0ICs2NjQsMTQgQEAgcHVibGljOgogICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgICBj
bGFzcyBCdWlsZGVyIHsKICAgICBwcml2YXRlOgotICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBtX3Jlc3VsdDsKKyAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gbV9yZXN1bHQ7CiAK
ICAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0
YXRlKCkKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1
aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgICB9CiAKLSAgICAgICAgQnVpbGRl
cihSZWY8LypFcnJvciovSW5zcGVjdG9yT2JqZWN0PiYmIG9iamVjdCkKKyAgICAgICAgQnVpbGRl
cihSZWY8LypFcnJvciovSlNPTjo6T2JqZWN0PiYmIG9iamVjdCkKICAgICAgICAgICAgIDogbV9y
ZXN1bHQoV1RGTW92ZShvYmplY3QpKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FT
U0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0
YXRlKTsKQEAgLTY5Niw5ICs2OTYsOSBAQCBwdWJsaWM6CiAgICAgICAgIFJlZjxFcnJvcj4gcmVs
ZWFzZSgpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFs
bEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7Ci0gICAgICAgICAgICBDT01QSUxFX0FT
U0VSVChzaXplb2YoRXJyb3IpID09IHNpemVvZihJbnNwZWN0b3JPYmplY3QpLCBjYW5ub3RfY2Fz
dCk7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoRXJyb3IpID09IHNpemVvZihK
U09OOjpPYmplY3QpLCBjYW5ub3RfY2FzdCk7CiAKLSAgICAgICAgICAgIFJlZjxJbnNwZWN0b3JP
YmplY3Q+IHJlc3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7CisgICAgICAgICAgICBS
ZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOwogICAg
ICAgICAgICAgcmV0dXJuIFdURk1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPEVycm9yPio+KCZy
ZXN1bHQpKTsKICAgICAgICAgfQogICAgIH07CkBAIC03MTIsNyArNzEyLDcgQEAgcHVibGljOgog
ICAgICAqLwogICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQogICAgIHsK
LSAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEluc3BlY3Rvck9iamVjdDo6Y3Jl
YXRlKCkpOworICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSlNPTjo6T2JqZWN0
OjpjcmVhdGUoKSk7CiAgICAgfQogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvY29tbWFuZHMtd2l0
aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0IGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvY29t
bWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0Cmlu
ZGV4IDVmYTZmNDllYjBmLi42MzBjYjA1MmRiZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvY29tbWFuZHMt
d2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0CisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVj
dGVkL2NvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uLXJl
c3VsdApAQCAtODksOCArODksOCBAQCBwcml2YXRlOgogY2xhc3MgQWx0ZXJuYXRlRGF0YWJhc2VC
YWNrZW5kRGlzcGF0Y2hlciA6IHB1YmxpYyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7CiBw
dWJsaWM6CiAgICAgdmlydHVhbCB+QWx0ZXJuYXRlRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcigp
IHsgfQotICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcg
Y2FsbElkLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5KiBpbl9jb2x1bW5OYW1lcywg
Y29uc3QgU3RyaW5nKiBjb25zdCBpbl9ub3RlcywgY29uc3QgZG91YmxlKiBjb25zdCBpbl90aW1l
c3RhbXAsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0KiBpbl92YWx1ZXMsIGNvbnN0
IEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUqIGNvbnN0IGluX3BheWxvYWQsIGNvbnN0IGludCog
Y29uc3QgaW5fZGF0YWJhc2VJZCwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QqIGlu
X3NxbEVycm9yLCBjb25zdCBTdHJpbmcqIGNvbnN0IGluX3NjcmVlbkNvbG9yLCBjb25zdCBJbnNw
ZWN0b3I6Okluc3BlY3RvckFycmF5KiBpbl9hbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyog
Y29uc3QgaW5fcHJpbnRDb2xvcikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlTm9PcHRp
b25hbFBhcmFtZXRlcnMobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJy
YXkmIGluX2NvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIGluX25vdGVzLCBkb3VibGUgaW5fdGlt
ZXN0YW1wLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCYgaW5fdmFsdWVzLCBJbnNw
ZWN0b3I6Okluc3BlY3RvclZhbHVlIGluX3BheWxvYWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25z
dCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCYgaW5fc3FsRXJyb3IsIGNvbnN0IFN0cmluZyYg
aW5fc2NyZWVuQ29sb3IsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXkmIGluX2FsdGVy
bmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nJiBpbl9wcmludENvbG9yKSA9IDA7CisgICAgdmlydHVh
bCB2b2lkIGV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMobG9uZyBjYWxsSWQsIGNvbnN0IEpT
T046OkFycmF5KiBpbl9jb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nKiBjb25zdCBpbl9ub3Rlcywg
Y29uc3QgZG91YmxlKiBjb25zdCBpbl90aW1lc3RhbXAsIGNvbnN0IEpTT046Ok9iamVjdCogaW5f
dmFsdWVzLCBjb25zdCBKU09OOjpWYWx1ZSogY29uc3QgaW5fcGF5bG9hZCwgY29uc3QgaW50KiBj
b25zdCBpbl9kYXRhYmFzZUlkLCBjb25zdCBKU09OOjpPYmplY3QqIGluX3NxbEVycm9yLCBjb25z
dCBTdHJpbmcqIGNvbnN0IGluX3NjcmVlbkNvbG9yLCBjb25zdCBKU09OOjpBcnJheSogaW5fYWx0
ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcqIGNvbnN0IGluX3ByaW50Q29sb3IpID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgY2FsbElkLCBj
b25zdCBKU09OOjpBcnJheSYgaW5fY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgaW5fbm90ZXMs
IGRvdWJsZSBpbl90aW1lc3RhbXAsIGNvbnN0IEpTT046Ok9iamVjdCYgaW5fdmFsdWVzLCBKU09O
OjpWYWx1ZSBpbl9wYXlsb2FkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgSlNPTjo6T2JqZWN0
JiBpbl9zcWxFcnJvciwgY29uc3QgU3RyaW5nJiBpbl9zY3JlZW5Db2xvciwgY29uc3QgSlNPTjo6
QXJyYXkmIGluX2FsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nJiBpbl9wcmludENvbG9yKSA9
IDA7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKQEAgLTE1Miw4ICsxNTIsOCBAQCBw
dWJsaWM6CiAgICAgICAgIFllbGxvdyA9IDUsCiAgICAgICAgIEJsYWNrID0gNiwKICAgICB9OyAv
LyBlbnVtIGNsYXNzIFByaW50Q29sb3IKLSAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZUFsbE9wdGlv
bmFsUGFyYW1ldGVycyhFcnJvclN0cmluZyYsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJy
YXkqIG9wdF9pbl9jb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nKiBjb25zdCBvcHRfaW5fbm90ZXMs
IGNvbnN0IGRvdWJsZSogY29uc3Qgb3B0X2luX3RpbWVzdGFtcCwgY29uc3QgSW5zcGVjdG9yOjpJ
bnNwZWN0b3JPYmplY3QqIG9wdF9pbl92YWx1ZXMsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9y
VmFsdWUqIGNvbnN0IG9wdF9pbl9wYXlsb2FkLCBjb25zdCBpbnQqIGNvbnN0IG9wdF9pbl9kYXRh
YmFzZUlkLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCogb3B0X2luX3NxbEVycm9y
LCBjb25zdCBTdHJpbmcqIGNvbnN0IG9wdF9pbl9zY3JlZW5Db2xvciwgY29uc3QgSW5zcGVjdG9y
OjpJbnNwZWN0b3JBcnJheSogb3B0X2luX2FsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nKiBj
b25zdCBvcHRfaW5fcHJpbnRDb2xvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5
PFN0cmluZz4+JiBvcHRfb3V0X2NvbHVtbk5hbWVzLCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRP
dXRwdXQ8U3RyaW5nPiogb3B0X291dF9ub3RlcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0
cHV0PGRvdWJsZT4qIG9wdF9vdXRfdGltZXN0YW1wLCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRP
dXRwdXQ8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+KiBvcHRfb3V0X3ZhbHVlcywgSW5zcGVj
dG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+KiBvcHRf
b3V0X3BheWxvYWQsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxpbnQ+KiBvcHRfb3V0
X2RhdGFiYXNlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+
JiBvcHRfb3V0X3NxbEVycm9yLCBJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFy
eUNvbG9ycyogb3B0X291dF9zY3JlZW5Db2xvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRhdGFiYXNlOjpDb2xvckxpc3Q+JiBvcHRfb3V0X2FsdGVybmF0ZUNvbG9ycywgRGF0YWJhc2VC
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3IqIG9wdF9vdXRfcHJpbnRDb2xvcikg
PSAwOwotICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMoRXJyb3JT
dHJpbmcmLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5JiBpbl9jb2x1bW5OYW1lcywg
Y29uc3QgU3RyaW5nJiBpbl9ub3RlcywgZG91YmxlIGluX3RpbWVzdGFtcCwgY29uc3QgSW5zcGVj
dG9yOjpJbnNwZWN0b3JPYmplY3QmIGluX3ZhbHVlcywgSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1
ZSBpbl9wYXlsb2FkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0
b3JPYmplY3QmIGluX3NxbEVycm9yLCBjb25zdCBTdHJpbmcmIGluX3NjcmVlbkNvbG9yLCBjb25z
dCBJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5JiBpbl9hbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0
cmluZyYgaW5fcHJpbnRDb2xvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0
cmluZz4+JiBvdXRfY29sdW1uTmFtZXMsIFN0cmluZyogb3V0X25vdGVzLCBkb3VibGUqIG91dF90
aW1lc3RhbXAsIEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0KiBvdXRfdmFsdWVzLCBJbnNwZWN0
b3I6Okluc3BlY3RvclZhbHVlKiBvdXRfcGF5bG9hZCwgaW50KiBvdXRfZGF0YWJhc2VJZCwgUmVm
UHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4mIG91dF9zcWxFcnJvciwg
SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMqIG91dF9zY3JlZW5D
b2xvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+JiBv
dXRfYWx0ZXJuYXRlQ29sb3JzLCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UHJp
bnRDb2xvciogb3V0X3ByaW50Q29sb3IpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZUFs
bE9wdGlvbmFsUGFyYW1ldGVycyhFcnJvclN0cmluZyYsIGNvbnN0IEpTT046OkFycmF5KiBvcHRf
aW5fY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyogY29uc3Qgb3B0X2luX25vdGVzLCBjb25zdCBk
b3VibGUqIGNvbnN0IG9wdF9pbl90aW1lc3RhbXAsIGNvbnN0IEpTT046Ok9iamVjdCogb3B0X2lu
X3ZhbHVlcywgY29uc3QgSlNPTjo6VmFsdWUqIGNvbnN0IG9wdF9pbl9wYXlsb2FkLCBjb25zdCBp
bnQqIGNvbnN0IG9wdF9pbl9kYXRhYmFzZUlkLCBjb25zdCBKU09OOjpPYmplY3QqIG9wdF9pbl9z
cWxFcnJvciwgY29uc3QgU3RyaW5nKiBjb25zdCBvcHRfaW5fc2NyZWVuQ29sb3IsIGNvbnN0IEpT
T046OkFycmF5KiBvcHRfaW5fYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcqIGNvbnN0IG9w
dF9pbl9wcmludENvbG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5n
Pj4mIG9wdF9vdXRfY29sdW1uTmFtZXMsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxT
dHJpbmc+KiBvcHRfb3V0X25vdGVzLCBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8ZG91
YmxlPiogb3B0X291dF90aW1lc3RhbXAsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxK
U09OOjpPYmplY3Q+KiBvcHRfb3V0X3ZhbHVlcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0
cHV0PEpTT046OlZhbHVlPiogb3B0X291dF9wYXlsb2FkLCBJbnNwZWN0b3I6OlByb3RvY29sOjpP
cHRPdXRwdXQ8aW50Piogb3B0X291dF9kYXRhYmFzZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6RGF0YWJhc2U6OkVycm9yPiYgb3B0X291dF9zcWxFcnJvciwgSW5zcGVjdG9yOjpQcm90
b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMqIG9wdF9vdXRfc2NyZWVuQ29sb3IsIFJlZlB0
cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiYgb3B0X291dF9hbHRl
cm5hdGVDb2xvcnMsIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpQcmludENvbG9y
KiBvcHRfb3V0X3ByaW50Q29sb3IpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZU5vT3B0
aW9uYWxQYXJhbWV0ZXJzKEVycm9yU3RyaW5nJiwgY29uc3QgSlNPTjo6QXJyYXkmIGluX2NvbHVt
bk5hbWVzLCBjb25zdCBTdHJpbmcmIGluX25vdGVzLCBkb3VibGUgaW5fdGltZXN0YW1wLCBjb25z
dCBKU09OOjpPYmplY3QmIGluX3ZhbHVlcywgSlNPTjo6VmFsdWUgaW5fcGF5bG9hZCwgaW50IGlu
X2RhdGFiYXNlSWQsIGNvbnN0IEpTT046Ok9iamVjdCYgaW5fc3FsRXJyb3IsIGNvbnN0IFN0cmlu
ZyYgaW5fc2NyZWVuQ29sb3IsIGNvbnN0IEpTT046OkFycmF5JiBpbl9hbHRlcm5hdGVDb2xvcnMs
IGNvbnN0IFN0cmluZyYgaW5fcHJpbnRDb2xvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkFycmF5PFN0cmluZz4+JiBvdXRfY29sdW1uTmFtZXMsIFN0cmluZyogb3V0X25vdGVzLCBkb3Vi
bGUqIG91dF90aW1lc3RhbXAsIEpTT046Ok9iamVjdCogb3V0X3ZhbHVlcywgSlNPTjo6VmFsdWUq
IG91dF9wYXlsb2FkLCBpbnQqIG91dF9kYXRhYmFzZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6RGF0YWJhc2U6OkVycm9yPiYgb3V0X3NxbEVycm9yLCBJbnNwZWN0b3I6OlByb3RvY29s
OjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyogb3V0X3NjcmVlbkNvbG9yLCBSZWZQdHI8SW5zcGVj
dG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4mIG91dF9hbHRlcm5hdGVDb2xvcnMs
IERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpQcmludENvbG9yKiBvdXRfcHJpbnRD
b2xvcikgPSAwOwogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgfkRhdGFiYXNlQmFja2VuZERpc3Bh
dGNoZXJIYW5kbGVyKCk7CiB9OwpAQCAtMTYxLDcgKzE2MSw3IEBAIHByb3RlY3RlZDoKIGNsYXNz
IERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgU3VwcGxlbWVudGFsQmFj
a2VuZERpc3BhdGNoZXIgewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8RGF0YWJhc2VCYWNrZW5k
RGlzcGF0Y2hlcj4gY3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiwgRGF0YWJhc2VCYWNrZW5kRGlz
cGF0Y2hlckhhbmRsZXIqKTsKLSAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25z
dCBTdHJpbmcmIG1ldGhvZCwgUmVmPEluc3BlY3Rvck9iamVjdD4mJiBtZXNzYWdlKSBvdmVycmlk
ZTsKKyAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhv
ZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKSBvdmVycmlkZTsKIHByaXZhdGU6CiAgICAg
dm9pZCBleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiYmIHBhcmFtZXRlcnMpOwogICAgIHZvaWQgZXhlY3V0ZU5vT3B0aW9u
YWxQYXJhbWV0ZXJzKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIHBh
cmFtZXRlcnMpOwpAQCAtMjM4LDExICsyMzgsMTEgQEAgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hl
cjo6RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZEQK
ICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4oQVND
SUlMaXRlcmFsKCJEYXRhYmFzZSIpLCB0aGlzKTsKIH0KIAotdm9pZCBEYXRhYmFzZUJhY2tlbmRE
aXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2Qs
IFJlZjxJbnNwZWN0b3JPYmplY3Q+JiYgbWVzc2FnZSkKK3ZvaWQgRGF0YWJhc2VCYWNrZW5kRGlz
cGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBS
ZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpCiB7CiAgICAgUmVmPERhdGFiYXNlQmFja2VuZERp
c3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOwogCi0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
cGFyYW1ldGVyczsKKyAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzOwogICAgIG1l
c3NhZ2UtPmdldE9iamVjdChBU0NJSUxpdGVyYWwoInBhcmFtcyIpLCBwYXJhbWV0ZXJzKTsKIAog
ICAgIGlmIChtZXRob2QgPT0gImV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMiKQpAQCAtMjU2
LDIzICsyNTYsMjMgQEAgdm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChs
b25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFIKIHZvaWQgRGF0YWJhc2VCYWNr
ZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhsb25nIHJlcXVlc3RJ
ZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBwYXJhbWV0ZXJzKQogewogICAgIGJvb2wgb3B0
X2luX2NvbHVtbk5hbWVzX3ZhbHVlRm91bmQgPSBmYWxzZTsKLSAgICBSZWZQdHI8SW5zcGVjdG9y
OjpJbnNwZWN0b3JBcnJheT4gb3B0X2luX2NvbHVtbk5hbWVzID0gbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+Z2V0QXJyYXkocGFyYW1ldGVycy5nZXQoKSwgQVNDSUlMaXRlcmFsKCJjb2x1bW5OYW1lcyIp
LCAmb3B0X2luX2NvbHVtbk5hbWVzX3ZhbHVlRm91bmQpOworICAgIFJlZlB0cjxKU09OOjpBcnJh
eT4gb3B0X2luX2NvbHVtbk5hbWVzID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0QXJyYXkocGFy
YW1ldGVycy5nZXQoKSwgQVNDSUlMaXRlcmFsKCJjb2x1bW5OYW1lcyIpLCAmb3B0X2luX2NvbHVt
bk5hbWVzX3ZhbHVlRm91bmQpOwogICAgIGJvb2wgb3B0X2luX25vdGVzX3ZhbHVlRm91bmQgPSBm
YWxzZTsKICAgICBTdHJpbmcgb3B0X2luX25vdGVzID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0
U3RyaW5nKHBhcmFtZXRlcnMuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgibm90ZXMiKSwgJm9wdF9pbl9u
b3Rlc192YWx1ZUZvdW5kKTsKICAgICBib29sIG9wdF9pbl90aW1lc3RhbXBfdmFsdWVGb3VuZCA9
IGZhbHNlOwogICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxkb3VibGU+IG9wdF9p
bl90aW1lc3RhbXAgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXREb3VibGUocGFyYW1ldGVycy5n
ZXQoKSwgQVNDSUlMaXRlcmFsKCJ0aW1lc3RhbXAiKSwgJm9wdF9pbl90aW1lc3RhbXBfdmFsdWVG
b3VuZCk7CiAgICAgYm9vbCBvcHRfaW5fdmFsdWVzX3ZhbHVlRm91bmQgPSBmYWxzZTsKLSAgICBS
ZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IG9wdF9pbl92YWx1ZXMgPSBtX2JhY2tl
bmREaXNwYXRjaGVyLT5nZXRPYmplY3QocGFyYW1ldGVycy5nZXQoKSwgQVNDSUlMaXRlcmFsKCJ2
YWx1ZXMiKSwgJm9wdF9pbl92YWx1ZXNfdmFsdWVGb3VuZCk7CisgICAgUmVmUHRyPEpTT046Ok9i
amVjdD4gb3B0X2luX3ZhbHVlcyA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldE9iamVjdChwYXJh
bWV0ZXJzLmdldCgpLCBBU0NJSUxpdGVyYWwoInZhbHVlcyIpLCAmb3B0X2luX3ZhbHVlc192YWx1
ZUZvdW5kKTsKICAgICBib29sIG9wdF9pbl9wYXlsb2FkX3ZhbHVlRm91bmQgPSBmYWxzZTsKLSAg
ICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4gb3B0X2luX3BheWxvYWQgPSBtX2Jh
Y2tlbmREaXNwYXRjaGVyLT5nZXRWYWx1ZShwYXJhbWV0ZXJzLmdldCgpLCBBU0NJSUxpdGVyYWwo
InBheWxvYWQiKSwgJm9wdF9pbl9wYXlsb2FkX3ZhbHVlRm91bmQpOworICAgIFJlZlB0cjxKU09O
OjpWYWx1ZT4gb3B0X2luX3BheWxvYWQgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRWYWx1ZShw
YXJhbWV0ZXJzLmdldCgpLCBBU0NJSUxpdGVyYWwoInBheWxvYWQiKSwgJm9wdF9pbl9wYXlsb2Fk
X3ZhbHVlRm91bmQpOwogICAgIGJvb2wgb3B0X2luX2RhdGFiYXNlSWRfdmFsdWVGb3VuZCA9IGZh
bHNlOwogICAgIGludCBvcHRfaW5fZGF0YWJhc2VJZCA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdl
dEludGVnZXIocGFyYW1ldGVycy5nZXQoKSwgQVNDSUlMaXRlcmFsKCJkYXRhYmFzZUlkIiksICZv
cHRfaW5fZGF0YWJhc2VJZF92YWx1ZUZvdW5kKTsKICAgICBib29sIG9wdF9pbl9zcWxFcnJvcl92
YWx1ZUZvdW5kID0gZmFsc2U7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0
PiBvcHRfaW5fc3FsRXJyb3IgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRPYmplY3QocGFyYW1l
dGVycy5nZXQoKSwgQVNDSUlMaXRlcmFsKCJzcWxFcnJvciIpLCAmb3B0X2luX3NxbEVycm9yX3Zh
bHVlRm91bmQpOworICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG9wdF9pbl9zcWxFcnJvciA9IG1f
YmFja2VuZERpc3BhdGNoZXItPmdldE9iamVjdChwYXJhbWV0ZXJzLmdldCgpLCBBU0NJSUxpdGVy
YWwoInNxbEVycm9yIiksICZvcHRfaW5fc3FsRXJyb3JfdmFsdWVGb3VuZCk7CiAgICAgYm9vbCBv
cHRfaW5fc2NyZWVuQ29sb3JfdmFsdWVGb3VuZCA9IGZhbHNlOwogICAgIFN0cmluZyBvcHRfaW5f
c2NyZWVuQ29sb3IgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRTdHJpbmcocGFyYW1ldGVycy5n
ZXQoKSwgQVNDSUlMaXRlcmFsKCJzY3JlZW5Db2xvciIpLCAmb3B0X2luX3NjcmVlbkNvbG9yX3Zh
bHVlRm91bmQpOwogICAgIGJvb2wgb3B0X2luX2FsdGVybmF0ZUNvbG9yc192YWx1ZUZvdW5kID0g
ZmFsc2U7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXk+IG9wdF9pbl9hbHRl
cm5hdGVDb2xvcnMgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRBcnJheShwYXJhbWV0ZXJzLmdl
dCgpLCBBU0NJSUxpdGVyYWwoImFsdGVybmF0ZUNvbG9ycyIpLCAmb3B0X2luX2FsdGVybmF0ZUNv
bG9yc192YWx1ZUZvdW5kKTsKKyAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IG9wdF9pbl9hbHRlcm5h
dGVDb2xvcnMgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRBcnJheShwYXJhbWV0ZXJzLmdldCgp
LCBBU0NJSUxpdGVyYWwoImFsdGVybmF0ZUNvbG9ycyIpLCAmb3B0X2luX2FsdGVybmF0ZUNvbG9y
c192YWx1ZUZvdW5kKTsKICAgICBib29sIG9wdF9pbl9wcmludENvbG9yX3ZhbHVlRm91bmQgPSBm
YWxzZTsKICAgICBTdHJpbmcgb3B0X2luX3ByaW50Q29sb3IgPSBtX2JhY2tlbmREaXNwYXRjaGVy
LT5nZXRTdHJpbmcocGFyYW1ldGVycy5nZXQoKSwgQVNDSUlMaXRlcmFsKCJwcmludENvbG9yIiks
ICZvcHRfaW5fcHJpbnRDb2xvcl92YWx1ZUZvdW5kKTsKICAgICBpZiAobV9iYWNrZW5kRGlzcGF0
Y2hlci0+aGFzUHJvdG9jb2xFcnJvcnMoKSkgewpAQCAtMjkyLDggKzI5Miw4IEBAIHZvaWQgRGF0
YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhsb25n
IHJlcXVlc3RJZCwgUmVmCiAgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0
cmluZz4+IG91dF9jb2x1bW5OYW1lczsKICAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRw
dXQ8U3RyaW5nPiBvdXRfbm90ZXM7CiAgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0
PGRvdWJsZT4gb3V0X3RpbWVzdGFtcDsKLSAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRw
dXQ8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IG91dF92YWx1ZXM7Ci0gICAgSW5zcGVjdG9y
OjpQcm90b2NvbDo6T3B0T3V0cHV0PEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+IG91dF9wYXls
b2FkOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxKU09OOjpPYmplY3Q+IG91
dF92YWx1ZXM7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PEpTT046OlZhbHVl
PiBvdXRfcGF5bG9hZDsKICAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8SW5zcGVj
dG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkRhdGFiYXNlSWQ+IG91dF9kYXRhYmFzZUlkOwogICAg
IFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IG91dF9zcWxFcnJv
cjsKICAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyBvdXRf
c2NyZWVuQ29sb3I7CkBAIC0zMzEsMTUgKzMzMSwxNSBAQCB2b2lkIERhdGFiYXNlQmFja2VuZERp
c3BhdGNoZXI6OmV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMobG9uZyByZXF1ZXN0SWQsIFJl
ZgogCiB2b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVOb09wdGlvbmFsUGFy
YW1ldGVycyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBwYXJhbWV0
ZXJzKQogewotICAgIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5PiBpbl9jb2x1bW5O
YW1lcyA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldEFycmF5KHBhcmFtZXRlcnMuZ2V0KCksIEFT
Q0lJTGl0ZXJhbCgiY29sdW1uTmFtZXMiKSwgbnVsbHB0cik7CisgICAgUmVmUHRyPEpTT046OkFy
cmF5PiBpbl9jb2x1bW5OYW1lcyA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldEFycmF5KHBhcmFt
ZXRlcnMuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgiY29sdW1uTmFtZXMiKSwgbnVsbHB0cik7CiAgICAg
U3RyaW5nIGluX25vdGVzID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3RyaW5nKHBhcmFtZXRl
cnMuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgibm90ZXMiKSwgbnVsbHB0cik7CiAgICAgZG91YmxlIGlu
X3RpbWVzdGFtcCA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldERvdWJsZShwYXJhbWV0ZXJzLmdl
dCgpLCBBU0NJSUxpdGVyYWwoInRpbWVzdGFtcCIpLCBudWxscHRyKTsKLSAgICBSZWZQdHI8SW5z
cGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IGluX3ZhbHVlcyA9IG1fYmFja2VuZERpc3BhdGNoZXIt
PmdldE9iamVjdChwYXJhbWV0ZXJzLmdldCgpLCBBU0NJSUxpdGVyYWwoInZhbHVlcyIpLCBudWxs
cHRyKTsKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4gaW5fcGF5bG9hZCA9
IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFZhbHVlKHBhcmFtZXRlcnMuZ2V0KCksIEFTQ0lJTGl0
ZXJhbCgicGF5bG9hZCIpLCBudWxscHRyKTsKKyAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBpbl92
YWx1ZXMgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRPYmplY3QocGFyYW1ldGVycy5nZXQoKSwg
QVNDSUlMaXRlcmFsKCJ2YWx1ZXMiKSwgbnVsbHB0cik7CisgICAgUmVmUHRyPEpTT046OlZhbHVl
PiBpbl9wYXlsb2FkID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0VmFsdWUocGFyYW1ldGVycy5n
ZXQoKSwgQVNDSUlMaXRlcmFsKCJwYXlsb2FkIiksIG51bGxwdHIpOwogICAgIGludCBpbl9kYXRh
YmFzZUlkID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0SW50ZWdlcihwYXJhbWV0ZXJzLmdldCgp
LCBBU0NJSUxpdGVyYWwoImRhdGFiYXNlSWQiKSwgbnVsbHB0cik7Ci0gICAgUmVmUHRyPEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBpbl9zcWxFcnJvciA9IG1fYmFja2VuZERpc3BhdGNoZXIt
PmdldE9iamVjdChwYXJhbWV0ZXJzLmdldCgpLCBBU0NJSUxpdGVyYWwoInNxbEVycm9yIiksIG51
bGxwdHIpOworICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IGluX3NxbEVycm9yID0gbV9iYWNrZW5k
RGlzcGF0Y2hlci0+Z2V0T2JqZWN0KHBhcmFtZXRlcnMuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgic3Fs
RXJyb3IiKSwgbnVsbHB0cik7CiAgICAgU3RyaW5nIGluX3NjcmVlbkNvbG9yID0gbV9iYWNrZW5k
RGlzcGF0Y2hlci0+Z2V0U3RyaW5nKHBhcmFtZXRlcnMuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgic2Ny
ZWVuQ29sb3IiKSwgbnVsbHB0cik7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJy
YXk+IGluX2FsdGVybmF0ZUNvbG9ycyA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldEFycmF5KHBh
cmFtZXRlcnMuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgiYWx0ZXJuYXRlQ29sb3JzIiksIG51bGxwdHIp
OworICAgIFJlZlB0cjxKU09OOjpBcnJheT4gaW5fYWx0ZXJuYXRlQ29sb3JzID0gbV9iYWNrZW5k
RGlzcGF0Y2hlci0+Z2V0QXJyYXkocGFyYW1ldGVycy5nZXQoKSwgQVNDSUlMaXRlcmFsKCJhbHRl
cm5hdGVDb2xvcnMiKSwgbnVsbHB0cik7CiAgICAgU3RyaW5nIGluX3ByaW50Q29sb3IgPSBtX2Jh
Y2tlbmREaXNwYXRjaGVyLT5nZXRTdHJpbmcocGFyYW1ldGVycy5nZXQoKSwgQVNDSUlMaXRlcmFs
KCJwcmludENvbG9yIiksIG51bGxwdHIpOwogICAgIGlmIChtX2JhY2tlbmREaXNwYXRjaGVyLT5o
YXNQcm90b2NvbEVycm9ycygpKSB7CiAgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9y
dFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OkludmFsaWRQYXJhbXMsIFN0cmluZzo6
Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQi
LCAiRGF0YWJhc2UuZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzIikpOwpAQCAtMzU4LDggKzM1
OCw4IEBAIHZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZU5vT3B0aW9uYWxQ
YXJhbWV0ZXJzKGxvbmcgcmVxdWVzdElkLCBSZWZQCiAgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkFycmF5PFN0cmluZz4+IG91dF9jb2x1bW5OYW1lczsKICAgICBTdHJpbmcgb3V0X25v
dGVzOwogICAgIGRvdWJsZSBvdXRfdGltZXN0YW1wOwotICAgIEluc3BlY3Rvcjo6SW5zcGVjdG9y
T2JqZWN0IG91dF92YWx1ZXM7Ci0gICAgSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSBvdXRfcGF5
bG9hZDsKKyAgICBKU09OOjpPYmplY3Qgb3V0X3ZhbHVlczsKKyAgICBKU09OOjpWYWx1ZSBvdXRf
cGF5bG9hZDsKICAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RGF0YWJhc2VJZCBv
dXRfZGF0YWJhc2VJZDsKICAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6
OkVycm9yPiBvdXRfc3FsRXJyb3I7CiAgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6
OlByaW1hcnlDb2xvcnMgb3V0X3NjcmVlbkNvbG9yOwpAQCAtNTUzLDcgKzU1Myw3IEBAIGVudW0g
Y2xhc3MgUHJpbWFyeUNvbG9ycyB7CiAgICAgQmx1ZSA9IDIsCiB9OyAvLyBlbnVtIGNsYXNzIFBy
aW1hcnlDb2xvcnMKIC8qIERhdGFiYXNlIGVycm9yLiAqLwotY2xhc3MgRXJyb3IgOiBwdWJsaWMg
SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3RCYXNlIHsKK2NsYXNzIEVycm9yIDogcHVibGljIEpT
T046Ok9iamVjdEJhc2UgewogcHVibGljOgogICAgIGVudW0gewogICAgICAgICBOb0ZpZWxkc1Nl
dCA9IDAsCkBAIC01NjUsMTQgKzU2NSwxNCBAQCBwdWJsaWM6CiAgICAgdGVtcGxhdGU8aW50IFNU
QVRFPgogICAgIGNsYXNzIEJ1aWxkZXIgewogICAgIHByaXZhdGU6Ci0gICAgICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OworICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBt
X3Jlc3VsdDsKIAogICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNU
RVA+JiBjYXN0U3RhdGUoKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJw
cmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgIH0KIAotICAg
ICAgICBCdWlsZGVyKFJlZjwvKkVycm9yKi9JbnNwZWN0b3JPYmplY3Q+JiYgb2JqZWN0KQorICAg
ICAgICBCdWlsZGVyKFJlZjwvKkVycm9yKi9KU09OOjpPYmplY3Q+JiYgb2JqZWN0KQogICAgICAg
ICAgICAgOiBtX3Jlc3VsdChXVEZNb3ZlKG9iamVjdCkpCiAgICAgICAgIHsKICAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5f
bm9uX2luaXRfc3RhdGUpOwpAQCAtNTk3LDkgKzU5Nyw5IEBAIHB1YmxpYzoKICAgICAgICAgUmVm
PEVycm9yPiByZWxlYXNlKCkKICAgICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
U1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKLSAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKHNpemVvZihFcnJvcikgPT0gc2l6ZW9mKEluc3BlY3Rvck9iamVjdCks
IGNhbm5vdF9jYXN0KTsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihFcnJvcikg
PT0gc2l6ZW9mKEpTT046Ok9iamVjdCksIGNhbm5vdF9jYXN0KTsKIAotICAgICAgICAgICAgUmVm
PEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKKyAg
ICAgICAgICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VOb25O
dWxsKCk7CiAgICAgICAgICAgICByZXR1cm4gV1RGTW92ZSgqcmVpbnRlcnByZXRfY2FzdDxSZWY8
RXJyb3I+Kj4oJnJlc3VsdCkpOwogICAgICAgICB9CiAgICAgfTsKQEAgLTYxMyw3ICs2MTMsNyBA
QCBwdWJsaWM6CiAgICAgICovCiAgICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0
ZSgpCiAgICAgewotICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKSk7CisgICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihK
U09OOjpPYmplY3Q6OmNyZWF0ZSgpKTsKICAgICB9CiB9OwogCkBAIC03NjMsOCArNzYzLDggQEAg
bmFtZXNwYWNlIEluc3BlY3RvciB7CiBjbGFzcyBPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5k
RGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBBbHRlcm5hdGVEYXRhYmFzZUJhY2tlbmREaXNwYXRj
aGVyIHsKIHB1YmxpYzoKICAgICBPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hl
cihpZDxUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkhhbmRsZXI+IGhhbmRsZXIpIHsgbV9kZWxl
Z2F0ZSA9IGhhbmRsZXI7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZUFsbE9wdGlvbmFsUGFy
YW1ldGVycyhsb25nIHJlcXVlc3RJZCwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheSog
aW5fY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyogY29uc3QgaW5fbm90ZXMsIGNvbnN0IGRvdWJs
ZSogY29uc3QgaW5fdGltZXN0YW1wLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCog
aW5fdmFsdWVzLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlKiBjb25zdCBpbl9wYXls
b2FkLCBjb25zdCBpbnQqIGNvbnN0IGluX2RhdGFiYXNlSWQsIGNvbnN0IEluc3BlY3Rvcjo6SW5z
cGVjdG9yT2JqZWN0KiBpbl9zcWxFcnJvciwgY29uc3QgU3RyaW5nKiBjb25zdCBpbl9zY3JlZW5D
b2xvciwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheSogaW5fYWx0ZXJuYXRlQ29sb3Jz
LCBjb25zdCBTdHJpbmcqIGNvbnN0IGluX3ByaW50Q29sb3IpIG92ZXJyaWRlOwotICAgIHZpcnR1
YWwgdm9pZCBleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMobG9uZyByZXF1ZXN0SWQsIGNvbnN0
IEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXkmIGluX2NvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcm
IGluX25vdGVzLCBkb3VibGUgaW5fdGltZXN0YW1wLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3Rv
ck9iamVjdCYgaW5fdmFsdWVzLCBJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlIGluX3BheWxvYWQs
IGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCYgaW5f
c3FsRXJyb3IsIGNvbnN0IFN0cmluZyYgaW5fc2NyZWVuQ29sb3IsIGNvbnN0IEluc3BlY3Rvcjo6
SW5zcGVjdG9yQXJyYXkmIGluX2FsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nJiBpbl9wcmlu
dENvbG9yKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZUFsbE9wdGlvbmFsUGFy
YW1ldGVycyhsb25nIHJlcXVlc3RJZCwgY29uc3QgSlNPTjo6QXJyYXkqIGluX2NvbHVtbk5hbWVz
LCBjb25zdCBTdHJpbmcqIGNvbnN0IGluX25vdGVzLCBjb25zdCBkb3VibGUqIGNvbnN0IGluX3Rp
bWVzdGFtcCwgY29uc3QgSlNPTjo6T2JqZWN0KiBpbl92YWx1ZXMsIGNvbnN0IEpTT046OlZhbHVl
KiBjb25zdCBpbl9wYXlsb2FkLCBjb25zdCBpbnQqIGNvbnN0IGluX2RhdGFiYXNlSWQsIGNvbnN0
IEpTT046Ok9iamVjdCogaW5fc3FsRXJyb3IsIGNvbnN0IFN0cmluZyogY29uc3QgaW5fc2NyZWVu
Q29sb3IsIGNvbnN0IEpTT046OkFycmF5KiBpbl9hbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmlu
ZyogY29uc3QgaW5fcHJpbnRDb2xvcikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGV4ZWN1
dGVOb09wdGlvbmFsUGFyYW1ldGVycyhsb25nIHJlcXVlc3RJZCwgY29uc3QgSlNPTjo6QXJyYXkm
IGluX2NvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIGluX25vdGVzLCBkb3VibGUgaW5fdGltZXN0
YW1wLCBjb25zdCBKU09OOjpPYmplY3QmIGluX3ZhbHVlcywgSlNPTjo6VmFsdWUgaW5fcGF5bG9h
ZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IEpTT046Ok9iamVjdCYgaW5fc3FsRXJyb3IsIGNv
bnN0IFN0cmluZyYgaW5fc2NyZWVuQ29sb3IsIGNvbnN0IEpTT046OkFycmF5JiBpbl9hbHRlcm5h
dGVDb2xvcnMsIGNvbnN0IFN0cmluZyYgaW5fcHJpbnRDb2xvcikgb3ZlcnJpZGU7CiBwcml2YXRl
OgogICAgIFJldGFpblB0cjxpZDxUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkhhbmRsZXI+PiBt
X2RlbGVnYXRlOwogfTsKQEAgLTgxMyw3ICs4MTMsNyBAQCBwcml2YXRlOgogCiBuYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKIAotdm9pZCBPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hl
cjo6ZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhsb25nIHJlcXVlc3RJZCwgY29uc3QgSW5z
cGVjdG9yOjpJbnNwZWN0b3JBcnJheSogaW5fY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyogY29u
c3QgaW5fbm90ZXMsIGNvbnN0IGRvdWJsZSogY29uc3QgaW5fdGltZXN0YW1wLCBjb25zdCBJbnNw
ZWN0b3I6Okluc3BlY3Rvck9iamVjdCogaW5fdmFsdWVzLCBjb25zdCBJbnNwZWN0b3I6Okluc3Bl
Y3RvclZhbHVlKiBjb25zdCBpbl9wYXlsb2FkLCBjb25zdCBpbnQqIGNvbnN0IGluX2RhdGFiYXNl
SWQsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0KiBpbl9zcWxFcnJvciwgY29uc3Qg
U3RyaW5nKiBjb25zdCBpbl9zY3JlZW5Db2xvciwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JB
cnJheSogaW5fYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcqIGNvbnN0IGluX3ByaW50Q29s
b3IpCit2b2lkIE9iakNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRl
QWxsT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgcmVxdWVzdElkLCBjb25zdCBKU09OOjpBcnJheSog
aW5fY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyogY29uc3QgaW5fbm90ZXMsIGNvbnN0IGRvdWJs
ZSogY29uc3QgaW5fdGltZXN0YW1wLCBjb25zdCBKU09OOjpPYmplY3QqIGluX3ZhbHVlcywgY29u
c3QgSlNPTjo6VmFsdWUqIGNvbnN0IGluX3BheWxvYWQsIGNvbnN0IGludCogY29uc3QgaW5fZGF0
YWJhc2VJZCwgY29uc3QgSlNPTjo6T2JqZWN0KiBpbl9zcWxFcnJvciwgY29uc3QgU3RyaW5nKiBj
b25zdCBpbl9zY3JlZW5Db2xvciwgY29uc3QgSlNPTjo6QXJyYXkqIGluX2FsdGVybmF0ZUNvbG9y
cywgY29uc3QgU3RyaW5nKiBjb25zdCBpbl9wcmludENvbG9yKQogewogICAgIGlkIGVycm9yQ2Fs
bGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgewogICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigp
LT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZl
ckVycm9yLCBlcnJvcik7CkBAIC04ODUsNyArODg1LDcgQEAgdm9pZCBPYmpDSW5zcGVjdG9yRGF0
YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhsb25n
IHIKICAgICBbbV9kZWxlZ2F0ZSBleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzV2l0aEVycm9y
Q2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrIGNv
bHVtbk5hbWVzOihpbl9jb2x1bW5OYW1lcyA/ICZvX2luX2NvbHVtbk5hbWVzIDogbmlsKSBub3Rl
czooaW5fbm90ZXMgPyAmb19pbl9ub3RlcyA6IG5pbCkgdGltZXN0YW1wOihpbl90aW1lc3RhbXAg
PyAmb19pbl90aW1lc3RhbXAgOiBuaWwpIHZhbHVlczooaW5fdmFsdWVzID8gJm9faW5fdmFsdWVz
IDogbmlsKSBwYXlsb2FkOihpbl9wYXlsb2FkID8gJm9faW5fcGF5bG9hZCA6IG5pbCkgZGF0YWJh
c2VJZDooaW5fZGF0YWJhc2VJZCA/ICZvX2luX2RhdGFiYXNlSWQgOiBuaWwpIHNxbEVycm9yOihp
bl9zcWxFcnJvciA/ICZvX2luX3NxbEVycm9yIDogbmlsKSBzY3JlZW5Db2xvcjooaW5fc2NyZWVu
Q29sb3IgPyAmb19pbl9zY3JlZW5Db2xvciA6IG5pbCkgYWx0ZXJuYXRlQ29sb3JzOihpbl9hbHRl
cm5hdGVDb2xvcnMgPyAmb19pbl9hbHRlcm5hdGVDb2xvcnMgOiBuaWwpIHByaW50Q29sb3I6KGlu
X3ByaW50Q29sb3IgPyAmb19pbl9wcmludENvbG9yIDogbmlsKV07CiB9CiAKLXZvaWQgT2JqQ0lu
c3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVOb09wdGlvbmFsUGFyYW1l
dGVycyhsb25nIHJlcXVlc3RJZCwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheSYgaW5f
Y29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgaW5fbm90ZXMsIGRvdWJsZSBpbl90aW1lc3RhbXAs
IGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0JiBpbl92YWx1ZXMsIEluc3BlY3Rvcjo6
SW5zcGVjdG9yVmFsdWUgaW5fcGF5bG9hZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yT2JqZWN0JiBpbl9zcWxFcnJvciwgY29uc3QgU3RyaW5nJiBpbl9zY3Jl
ZW5Db2xvciwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheSYgaW5fYWx0ZXJuYXRlQ29s
b3JzLCBjb25zdCBTdHJpbmcmIGluX3ByaW50Q29sb3IpCit2b2lkIE9iakNJbnNwZWN0b3JEYXRh
YmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMobG9uZyBy
ZXF1ZXN0SWQsIGNvbnN0IEpTT046OkFycmF5JiBpbl9jb2x1bW5OYW1lcywgY29uc3QgU3RyaW5n
JiBpbl9ub3RlcywgZG91YmxlIGluX3RpbWVzdGFtcCwgY29uc3QgSlNPTjo6T2JqZWN0JiBpbl92
YWx1ZXMsIEpTT046OlZhbHVlIGluX3BheWxvYWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBK
U09OOjpPYmplY3QmIGluX3NxbEVycm9yLCBjb25zdCBTdHJpbmcmIGluX3NjcmVlbkNvbG9yLCBj
b25zdCBKU09OOjpBcnJheSYgaW5fYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcmIGluX3By
aW50Q29sb3IpCiB7CiAgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7
CiAgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVz
dElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4
cGVjdGVkL2RvbWFpbi1hdmFpbGFiaWxpdHkuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9kb21haW4tYXZh
aWxhYmlsaXR5Lmpzb24tcmVzdWx0CmluZGV4IDgyZTc4OTgwODQ1Li4zNjEwMjFlYTU3ZCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dl
bmVyaWMvZXhwZWN0ZWQvZG9tYWluLWF2YWlsYWJpbGl0eS5qc29uLXJlc3VsdAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3Rl
ZC9kb21haW4tYXZhaWxhYmlsaXR5Lmpzb24tcmVzdWx0CkBAIC0xNjcsNyArMTY3LDcgQEAgcHJv
dGVjdGVkOgogY2xhc3MgRG9tYWluQUJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIFN1
cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPERv
bWFpbkFCYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiwgRG9tYWlu
QUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwotICAgIHZvaWQgZGlzcGF0Y2gobG9uZyByZXF1
ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SW5zcGVjdG9yT2JqZWN0PiYmIG1lc3Nh
Z2UpIG92ZXJyaWRlOworICAgIHZvaWQgZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0
cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpIG92ZXJyaWRlOwogcHJp
dmF0ZToKICAgICB2b2lkIGVuYWJsZShsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4mJiBwYXJhbWV0ZXJzKTsKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQ
QVRDSEVSUykKQEAgLTE4NCw3ICsxODQsNyBAQCBwcml2YXRlOgogY2xhc3MgRG9tYWluQkJhY2tl
bmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVy
IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPERvbWFpbkJCYWNrZW5kRGlzcGF0Y2hlcj4gY3Jl
YXRlKEJhY2tlbmREaXNwYXRjaGVyJiwgRG9tYWluQkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciop
OwotICAgIHZvaWQgZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9k
LCBSZWY8SW5zcGVjdG9yT2JqZWN0PiYmIG1lc3NhZ2UpIG92ZXJyaWRlOworICAgIHZvaWQgZGlz
cGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2Jq
ZWN0PiYmIG1lc3NhZ2UpIG92ZXJyaWRlOwogcHJpdmF0ZToKICAgICB2b2lkIGVuYWJsZShsb25n
IHJlcXVlc3RJZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKICNpZiBF
TkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKQEAgLTI2MSwxMSArMjYxLDEx
IEBAIERvbWFpbkFCYWNrZW5kRGlzcGF0Y2hlcjo6RG9tYWluQUJhY2tlbmREaXNwYXRjaGVyKEJh
Y2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzCiAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVn
aXN0ZXJEaXNwYXRjaGVyRm9yRG9tYWluKEFTQ0lJTGl0ZXJhbCgiRG9tYWluQSIpLCB0aGlzKTsK
IH0KIAotdm9pZCBEb21haW5BQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVz
dElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEluc3BlY3Rvck9iamVjdD4mJiBtZXNzYWdl
KQordm9pZCBEb21haW5BQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElk
LCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKQogewog
ICAgIFJlZjxEb21haW5BQmFja2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOwogCi0gICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1ldGVyczsKKyAgICBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiBwYXJhbWV0ZXJzOwogICAgIG1lc3NhZ2UtPmdldE9iamVjdChBU0NJSUxpdGVyYWwoInBh
cmFtcyIpLCBwYXJhbWV0ZXJzKTsKIAogICAgIGlmIChtZXRob2QgPT0gImVuYWJsZSIpCkBAIC0z
MDUsMTEgKzMwNSwxMSBAQCBEb21haW5CQmFja2VuZERpc3BhdGNoZXI6OkRvbWFpbkJCYWNrZW5k
RGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpcwogICAgIG1fYmFja2VuZERp
c3BhdGNoZXItPnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbihBU0NJSUxpdGVyYWwoIkRvbWFp
bkIiKSwgdGhpcyk7CiB9CiAKLXZvaWQgRG9tYWluQkJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRj
aChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxJbnNwZWN0b3JPYmpl
Y3Q+JiYgbWVzc2FnZSkKK3ZvaWQgRG9tYWluQkJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChs
b25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYg
bWVzc2FnZSkKIHsKICAgICBSZWY8RG9tYWluQkJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0
aGlzKTsKIAotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtZXRlcnM7CisgICAgUmVm
UHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVyczsKICAgICBtZXNzYWdlLT5nZXRPYmplY3QoQVND
SUlMaXRlcmFsKCJwYXJhbXMiKSwgcGFyYW1ldGVycyk7CiAKICAgICBpZiAobWV0aG9kID09ICJl
bmFibGUiKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1z
aXplcy5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2RvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6
ZXMuanNvbi1yZXN1bHQKaW5kZXggYWY4OTM2ZmQ3ZjcuLjZmNGIyNzE4MThkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9l
eHBlY3RlZC9kb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24tcmVzdWx0Cisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmlj
L2V4cGVjdGVkL2RvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbi1yZXN1bHQK
QEAgLTE4NSw3ICsxODUsNyBAQCBwcm90ZWN0ZWQ6CiBjbGFzcyBOZXR3b3JrMUJhY2tlbmREaXNw
YXRjaGVyIGZpbmFsIDogcHVibGljIFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyIHsKIHB1
YmxpYzoKICAgICBzdGF0aWMgUmVmPE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShC
YWNrZW5kRGlzcGF0Y2hlciYsIE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7Ci0g
ICAgdm9pZCBkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJl
ZjxJbnNwZWN0b3JPYmplY3Q+JiYgbWVzc2FnZSkgb3ZlcnJpZGU7CisgICAgdm9pZCBkaXNwYXRj
aChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+
JiYgbWVzc2FnZSkgb3ZlcnJpZGU7CiBwcml2YXRlOgogICAgIHZvaWQgbG9hZFJlc291cmNlMShs
b25nIHJlcXVlc3RJZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKICNp
ZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKQEAgLTIwMiw3ICsyMDIs
NyBAQCBwcml2YXRlOgogY2xhc3MgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1
YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7CiBwdWJsaWM6CiAgICAgc3RhdGlj
IFJlZjxOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyPiBjcmVhdGUoQmFja2VuZERpc3BhdGNoZXIm
LCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwotICAgIHZvaWQgZGlzcGF0Y2go
bG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SW5zcGVjdG9yT2JqZWN0
PiYmIG1lc3NhZ2UpIG92ZXJyaWRlOworICAgIHZvaWQgZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQs
IGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpIG92ZXJy
aWRlOwogcHJpdmF0ZToKICAgICB2b2lkIGxvYWRSZXNvdXJjZTEobG9uZyByZXF1ZXN0SWQsIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgcGFyYW1ldGVycyk7CiAgICAgdm9pZCBsb2FkUmVzb3Vy
Y2UyKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIHBhcmFtZXRlcnMp
OwpAQCAtMjg1LDExICsyODUsMTEgQEAgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6TmV0d29y
azFCYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZEQKICAgICBtX2Jh
Y2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4oQVNDSUlMaXRlcmFs
KCJOZXR3b3JrMSIpLCB0aGlzKTsKIH0KIAotdm9pZCBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVy
OjpkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxJbnNw
ZWN0b3JPYmplY3Q+JiYgbWVzc2FnZSkKK3ZvaWQgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6
ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6
T2JqZWN0PiYmIG1lc3NhZ2UpCiB7CiAgICAgUmVmPE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI+
IHByb3RlY3QoKnRoaXMpOwogCi0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1ldGVy
czsKKyAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzOwogICAgIG1lc3NhZ2UtPmdl
dE9iamVjdChBU0NJSUxpdGVyYWwoInBhcmFtcyIpLCBwYXJhbWV0ZXJzKTsKIAogICAgIGlmICht
ZXRob2QgPT0gImxvYWRSZXNvdXJjZTEiKQpAQCAtMzI5LDE0ICszMjksMTQgQEAgTmV0d29yazNC
YWNrZW5kRGlzcGF0Y2hlcjo6TmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0
Y2hlciYgYmFja2VuZEQKICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNo
ZXJGb3JEb21haW4oQVNDSUlMaXRlcmFsKCJOZXR3b3JrMyIpLCB0aGlzKTsKIH0KIAotdm9pZCBO
ZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3Qg
U3RyaW5nJiBtZXRob2QsIFJlZjxJbnNwZWN0b3JPYmplY3Q+JiYgbWVzc2FnZSkKK3ZvaWQgTmV0
d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0
cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpCiB7CiAgICAgUmVmPE5l
dHdvcmszQmFja2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOwogCi0gICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gcGFyYW1ldGVyczsKKyAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJh
bWV0ZXJzOwogICAgIG1lc3NhZ2UtPmdldE9iamVjdChBU0NJSUxpdGVyYWwoInBhcmFtcyIpLCBw
YXJhbWV0ZXJzKTsKIAotICAgIHR5cGVkZWYgdm9pZCAoTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hl
cjo6KkNhbGxIYW5kbGVyKShsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4m
JiBtZXNzYWdlKTsKKyAgICB0eXBlZGVmIHZvaWQgKE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6
OipDYWxsSGFuZGxlcikobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgbWVz
c2FnZSk7CiAgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgQ2FsbEhhbmRsZXI+IERpc3BhdGNo
TWFwOwogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxEaXNwYXRjaE1hcD4gZGlzcGF0Y2hNYXA7
CiAgICAgaWYgKGRpc3BhdGNoTWFwLmdldCgpLmlzRW1wdHkoKSkgewpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0
ZWQvZW51bS12YWx1ZXMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9lbnVtLXZhbHVlcy5qc29uLXJlc3Vs
dAppbmRleCBkZjkxMjdhMjJmOS4uMWUxYTlmMmNmZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2VudW0t
dmFsdWVzLmpzb24tcmVzdWx0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2VudW0tdmFsdWVzLmpzb24tcmVzdWx0CkBA
IC0xNjcsNyArMTY3LDcgQEAgcHJvdGVjdGVkOgogY2xhc3MgQ29tbWFuZERvbWFpbkJhY2tlbmRE
aXNwYXRjaGVyIGZpbmFsIDogcHVibGljIFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyIHsK
IHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4g
Y3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiwgQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVy
SGFuZGxlciopOwotICAgIHZvaWQgZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmlu
ZyYgbWV0aG9kLCBSZWY8SW5zcGVjdG9yT2JqZWN0PiYmIG1lc3NhZ2UpIG92ZXJyaWRlOworICAg
IHZvaWQgZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8
SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpIG92ZXJyaWRlOwogcHJpdmF0ZToKICAgICB2b2lkIGNv
bW1hbmRXaXRoRW51bVJldHVyblZhbHVlKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiYmIHBhcmFtZXRlcnMpOwogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJ
U1BBVENIRVJTKQpAQCAtMjQzLDExICsyNDMsMTEgQEAgQ29tbWFuZERvbWFpbkJhY2tlbmREaXNw
YXRjaGVyOjpDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXIK
ICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4oQVND
SUlMaXRlcmFsKCJDb21tYW5kRG9tYWluIiksIHRoaXMpOwogfQogCi12b2lkIENvbW1hbmREb21h
aW5CYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmlu
ZyYgbWV0aG9kLCBSZWY8SW5zcGVjdG9yT2JqZWN0PiYmIG1lc3NhZ2UpCit2b2lkIENvbW1hbmRE
b21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0
cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpCiB7CiAgICAgUmVmPENv
bW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7CiAKLSAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbWV0ZXJzOworICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+
IHBhcmFtZXRlcnM7CiAgICAgbWVzc2FnZS0+Z2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgicGFyYW1z
IiksIHBhcmFtZXRlcnMpOwogCiAgICAgaWYgKG1ldGhvZCA9PSAiY29tbWFuZFdpdGhFbnVtUmV0
dXJuVmFsdWUiKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1l
dGVycy5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2V2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMu
anNvbi1yZXN1bHQKaW5kZXggODJjYjEyMmFiNTIuLmZmYjlmZTQxOThiIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBl
Y3RlZC9ldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0CisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVj
dGVkL2V2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbi1yZXN1bHQKQEAgLTIzNCw4
ICsyMzQsOCBAQCBjbGFzcyBGcm9udGVuZFJvdXRlcjsKIGNsYXNzIERhdGFiYXNlRnJvbnRlbmRE
aXNwYXRjaGVyIHsKIHB1YmxpYzoKICAgICBEYXRhYmFzZUZyb250ZW5kRGlzcGF0Y2hlcihGcm9u
dGVuZFJvdXRlciYgZnJvbnRlbmRSb3V0ZXIpIDogbV9mcm9udGVuZFJvdXRlcihmcm9udGVuZFJv
dXRlcikgeyB9Ci0gICAgdm9pZCBkaWRFeGVjdXRlT3B0aW9uYWxQYXJhbWV0ZXJzKFJlZlB0cjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+PiBjb2x1bW5OYW1lcywgY29uc3QgU3Ry
aW5nKiBjb25zdCBub3RlcywgY29uc3QgZG91YmxlKiBjb25zdCB0aW1lc3RhbXAsIFJlZlB0cjxJ
bnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gdmFsdWVzLCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNw
ZWN0b3JWYWx1ZT4gcGF5bG9hZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNl
OjpFcnJvcj4gc3FsRXJyb3IsIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQ
cmltYXJ5Q29sb3JzKiBjb25zdCBzY3JlZW5Db2xvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+IGFsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nKiBj
b25zdCBwcmludENvbG9yKTsKLSAgICB2b2lkIGRpZEV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVy
cyhSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPj4gY29sdW1uTmFtZXMs
IGNvbnN0IFN0cmluZyYgbm90ZXMsIGRvdWJsZSB0aW1lc3RhbXAsIFJlZlB0cjxJbnNwZWN0b3I6
Okluc3BlY3Rvck9iamVjdD4gdmFsdWVzLCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1
ZT4gcGF5bG9hZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4g
c3FsRXJyb3IsIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29s
b3JzJiBzY3JlZW5Db2xvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpD
b2xvckxpc3Q+IGFsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nJiBwcmludENvbG9yKTsKKyAg
ICB2b2lkIGRpZEV4ZWN1dGVPcHRpb25hbFBhcmFtZXRlcnMoUmVmUHRyPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkFycmF5PFN0cmluZz4+IGNvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcqIGNvbnN0IG5v
dGVzLCBjb25zdCBkb3VibGUqIGNvbnN0IHRpbWVzdGFtcCwgUmVmUHRyPEpTT046Ok9iamVjdD4g
dmFsdWVzLCBSZWZQdHI8SlNPTjo6VmFsdWU+IHBheWxvYWQsIFJlZlB0cjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IHNxbEVycm9yLCBjb25zdCBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyogY29uc3Qgc2NyZWVuQ29sb3IsIFJlZlB0cjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiBhbHRlcm5hdGVDb2xvcnMs
IGNvbnN0IFN0cmluZyogY29uc3QgcHJpbnRDb2xvcik7CisgICAgdm9pZCBkaWRFeGVjdXRlTm9P
cHRpb25hbFBhcmFtZXRlcnMoUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmlu
Zz4+IGNvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIG5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBS
ZWZQdHI8SlNPTjo6T2JqZWN0PiB2YWx1ZXMsIFJlZlB0cjxKU09OOjpWYWx1ZT4gcGF5bG9hZCwg
UmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4gc3FsRXJyb3IsIGNv
bnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzJiBzY3JlZW5D
b2xvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+IGFs
dGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nJiBwcmludENvbG9yKTsKIHByaXZhdGU6CiAgICAg
RnJvbnRlbmRSb3V0ZXImIG1fZnJvbnRlbmRSb3V0ZXI7CiB9OwpAQCAtMjgyLDcgKzI4Miw3IEBA
IHByaXZhdGU6CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCi12b2lkIERhdGFiYXNlRnJvbnRl
bmREaXNwYXRjaGVyOjpkaWRFeGVjdXRlT3B0aW9uYWxQYXJhbWV0ZXJzKFJlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+PiBjb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nKiBj
b25zdCBub3RlcywgY29uc3QgZG91YmxlKiBjb25zdCB0aW1lc3RhbXAsIFJlZlB0cjxJbnNwZWN0
b3I6Okluc3BlY3Rvck9iamVjdD4gdmFsdWVzLCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JW
YWx1ZT4gcGF5bG9hZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJv
cj4gc3FsRXJyb3IsIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5
Q29sb3JzKiBjb25zdCBzY3JlZW5Db2xvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRh
dGFiYXNlOjpDb2xvckxpc3Q+IGFsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nKiBjb25zdCBw
cmludENvbG9yKQordm9pZCBEYXRhYmFzZUZyb250ZW5kRGlzcGF0Y2hlcjo6ZGlkRXhlY3V0ZU9w
dGlvbmFsUGFyYW1ldGVycyhSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5n
Pj4gY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyogY29uc3Qgbm90ZXMsIGNvbnN0IGRvdWJsZSog
Y29uc3QgdGltZXN0YW1wLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiB2YWx1ZXMsIFJlZlB0cjxKU09O
OjpWYWx1ZT4gcGF5bG9hZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpF
cnJvcj4gc3FsRXJyb3IsIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmlt
YXJ5Q29sb3JzKiBjb25zdCBzY3JlZW5Db2xvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRhdGFiYXNlOjpDb2xvckxpc3Q+IGFsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nKiBjb25z
dCBwcmludENvbG9yKQogewogICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IGpzb25NZXNzYWdlID0g
SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKEFT
Q0lJTGl0ZXJhbCgibWV0aG9kIiksIEFTQ0lJTGl0ZXJhbCgiRGF0YWJhc2UuZGlkRXhlY3V0ZU9w
dGlvbmFsUGFyYW1ldGVycyIpKTsKQEAgLTMxMCw3ICszMTAsNyBAQCB2b2lkIERhdGFiYXNlRnJv
bnRlbmREaXNwYXRjaGVyOjpkaWRFeGVjdXRlT3B0aW9uYWxQYXJhbWV0ZXJzKFJlZlB0cjxJbnNw
ZWN0b3I6OgogICAgIG1fZnJvbnRlbmRSb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pT
T05TdHJpbmcoKSk7CiB9CiAKLXZvaWQgRGF0YWJhc2VGcm9udGVuZERpc3BhdGNoZXI6OmRpZEV4
ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJy
YXk8U3RyaW5nPj4gY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgbm90ZXMsIGRvdWJsZSB0aW1l
c3RhbXAsIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gdmFsdWVzLCBSZWZQdHI8
SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4gcGF5bG9hZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4gc3FsRXJyb3IsIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzJiBzY3JlZW5Db2xvciwgUmVmUHRyPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+IGFsdGVybmF0ZUNvbG9ycywgY29uc3Qg
U3RyaW5nJiBwcmludENvbG9yKQordm9pZCBEYXRhYmFzZUZyb250ZW5kRGlzcGF0Y2hlcjo6ZGlk
RXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpB
cnJheTxTdHJpbmc+PiBjb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBub3RlcywgZG91YmxlIHRp
bWVzdGFtcCwgUmVmUHRyPEpTT046Ok9iamVjdD4gdmFsdWVzLCBSZWZQdHI8SlNPTjo6VmFsdWU+
IHBheWxvYWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IHNx
bEVycm9yLCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9y
cyYgc2NyZWVuQ29sb3IsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29s
b3JMaXN0PiBhbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyYgcHJpbnRDb2xvcikKIHsKICAg
ICBSZWY8SW5zcGVjdG9yT2JqZWN0PiBqc29uTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3Jl
YXRlKCk7CiAgICAganNvbk1lc3NhZ2UtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoIm1ldGhvZCIp
LCBBU0NJSUxpdGVyYWwoIkRhdGFiYXNlLmRpZEV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyIp
KTsKQEAgLTM5Myw3ICszOTMsNyBAQCB0eXBlZGVmIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPgogCiBuYW1lc3Bh
Y2UgRGF0YWJhc2UgewogLyogRGF0YWJhc2UgZXJyb3IuICovCi1jbGFzcyBFcnJvciA6IHB1Ymxp
YyBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdEJhc2UgeworY2xhc3MgRXJyb3IgOiBwdWJsaWMg
SlNPTjo6T2JqZWN0QmFzZSB7CiBwdWJsaWM6CiAgICAgZW51bSB7CiAgICAgICAgIE5vRmllbGRz
U2V0ID0gMCwKQEAgLTQwNSwxNCArNDA1LDE0IEBAIHB1YmxpYzoKICAgICB0ZW1wbGF0ZTxpbnQg
U1RBVEU+CiAgICAgY2xhc3MgQnVpbGRlciB7CiAgICAgcHJpdmF0ZToKLSAgICAgICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CisgICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+
IG1fcmVzdWx0OwogCiAgICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwg
U1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiAqcmVpbnRl
cnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICAgfQogCi0g
ICAgICAgIEJ1aWxkZXIoUmVmPC8qRXJyb3IqL0luc3BlY3Rvck9iamVjdD4mJiBvYmplY3QpCisg
ICAgICAgIEJ1aWxkZXIoUmVmPC8qRXJyb3IqL0pTT046Ok9iamVjdD4mJiBvYmplY3QpCiAgICAg
ICAgICAgICA6IG1fcmVzdWx0KFdURk1vdmUob2JqZWN0KSkKICAgICAgICAgewogICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9p
bl9ub25faW5pdF9zdGF0ZSk7CkBAIC00MzcsOSArNDM3LDkgQEAgcHVibGljOgogICAgICAgICBS
ZWY8RXJyb3I+IHJlbGVhc2UoKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VS
VChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwotICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKEVycm9yKSA9PSBzaXplb2YoSW5zcGVjdG9yT2JqZWN0
KSwgY2Fubm90X2Nhc3QpOworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKEVycm9y
KSA9PSBzaXplb2YoSlNPTjo6T2JqZWN0KSwgY2Fubm90X2Nhc3QpOwogCi0gICAgICAgICAgICBS
ZWY8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOwor
ICAgICAgICAgICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5v
bk51bGwoKTsKICAgICAgICAgICAgIHJldHVybiBXVEZNb3ZlKCpyZWludGVycHJldF9jYXN0PFJl
ZjxFcnJvcj4qPigmcmVzdWx0KSk7CiAgICAgICAgIH0KICAgICB9OwpAQCAtNDUzLDcgKzQ1Myw3
IEBAIHB1YmxpYzoKICAgICAgKi8KICAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3Jl
YXRlKCkKICAgICB7Ci0gICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihJbnNwZWN0
b3JPYmplY3Q6OmNyZWF0ZSgpKTsKKyAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+
KEpTT046Ok9iamVjdDo6Y3JlYXRlKCkpOwogICAgIH0KIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVk
L2dlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uLXJlc3VsdCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVk
L2dlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uLXJlc3VsdAppbmRleCAy
YWZmMTRlMjAzNS4uNjg3OTQzYzA3Y2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL2dlbmVyYXRlLWRvbWFp
bnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uLXJlc3VsdAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9nZW5lcmF0ZS1k
b21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbi1yZXN1bHQKQEAgLTE2Miw3ICsxNjIsNyBA
QCBwcm90ZWN0ZWQ6CiBjbGFzcyBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVi
bGljIFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyIHsKIHB1YmxpYzoKICAgICBzdGF0aWMg
UmVmPE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYs
IE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7Ci0gICAgdm9pZCBkaXNwYXRjaChs
b25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxJbnNwZWN0b3JPYmplY3Q+
JiYgbWVzc2FnZSkgb3ZlcnJpZGU7CisgICAgdm9pZCBkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwg
Y29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkgb3ZlcnJp
ZGU7CiBwcml2YXRlOgogICAgIHZvaWQgbG9hZFJlc291cmNlKGxvbmcgcmVxdWVzdElkLCBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiYmIHBhcmFtZXRlcnMpOwogI2lmIEVOQUJMRShJTlNQRUNUT1Jf
QUxURVJOQVRFX0RJU1BBVENIRVJTKQpAQCAtMjQyLDExICsyNDIsMTEgQEAgTmV0d29yazFCYWNr
ZW5kRGlzcGF0Y2hlcjo6TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hl
ciYgYmFja2VuZEQKICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJG
b3JEb21haW4oQVNDSUlMaXRlcmFsKCJOZXR3b3JrMSIpLCB0aGlzKTsKIH0KIAotdm9pZCBOZXR3
b3JrMUJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3Ry
aW5nJiBtZXRob2QsIFJlZjxJbnNwZWN0b3JPYmplY3Q+JiYgbWVzc2FnZSkKK3ZvaWQgTmV0d29y
azFCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmlu
ZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpCiB7CiAgICAgUmVmPE5ldHdv
cmsxQmFja2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOwogCi0gICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gcGFyYW1ldGVyczsKKyAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0
ZXJzOwogICAgIG1lc3NhZ2UtPmdldE9iamVjdChBU0NJSUxpdGVyYWwoInBhcmFtcyIpLCBwYXJh
bWV0ZXJzKTsKIAogICAgIGlmIChtZXRob2QgPT0gImxvYWRSZXNvdXJjZSIpCkBAIC00NDEsNyAr
NDQxLDcgQEAgY2xhc3MgTmV0d29ya0Vycm9yOwogCiAjaWYgUExBVEZPUk0oV0VCX1RZUEVTKQog
bmFtZXNwYWNlIE5ldHdvcmsyIHsKLWNsYXNzIE5ldHdvcmtFcnJvciA6IHB1YmxpYyBJbnNwZWN0
b3I6Okluc3BlY3Rvck9iamVjdEJhc2UgeworY2xhc3MgTmV0d29ya0Vycm9yIDogcHVibGljIEpT
T046Ok9iamVjdEJhc2UgewogcHVibGljOgogICAgIGVudW0gewogICAgICAgICBOb0ZpZWxkc1Nl
dCA9IDAsCkBAIC00NTMsMTQgKzQ1MywxNCBAQCBwdWJsaWM6CiAgICAgdGVtcGxhdGU8aW50IFNU
QVRFPgogICAgIGNsYXNzIEJ1aWxkZXIgewogICAgIHByaXZhdGU6Ci0gICAgICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OworICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBt
X3Jlc3VsdDsKIAogICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNU
RVA+JiBjYXN0U3RhdGUoKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJw
cmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgIH0KIAotICAg
ICAgICBCdWlsZGVyKFJlZjwvKk5ldHdvcmtFcnJvciovSW5zcGVjdG9yT2JqZWN0PiYmIG9iamVj
dCkKKyAgICAgICAgQnVpbGRlcihSZWY8LypOZXR3b3JrRXJyb3IqL0pTT046Ok9iamVjdD4mJiBv
YmplY3QpCiAgICAgICAgICAgICA6IG1fcmVzdWx0KFdURk1vdmUob2JqZWN0KSkKICAgICAgICAg
ewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxk
ZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CkBAIC00ODUsOSArNDg1LDkgQEAgcHVibGlj
OgogICAgICAgICBSZWY8TmV0d29ya0Vycm9yPiByZWxlYXNlKCkKICAgICAgICAgewogICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90
X3JlYWR5KTsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihOZXR3b3JrRXJyb3Ip
ID09IHNpemVvZihJbnNwZWN0b3JPYmplY3QpLCBjYW5ub3RfY2FzdCk7CisgICAgICAgICAgICBD
T01QSUxFX0FTU0VSVChzaXplb2YoTmV0d29ya0Vycm9yKSA9PSBzaXplb2YoSlNPTjo6T2JqZWN0
KSwgY2Fubm90X2Nhc3QpOwogCi0gICAgICAgICAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiByZXN1
bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOworICAgICAgICAgICAgUmVmPEpTT046Ok9i
amVjdD4gcmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKICAgICAgICAgICAgIHJl
dHVybiBXVEZNb3ZlKCpyZWludGVycHJldF9jYXN0PFJlZjxOZXR3b3JrRXJyb3I+Kj4oJnJlc3Vs
dCkpOwogICAgICAgICB9CiAgICAgfTsKQEAgLTUwMSw3ICs1MDEsNyBAQCBwdWJsaWM6CiAgICAg
ICovCiAgICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCiAgICAgewotICAg
ICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUo
KSk7CisgICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihKU09OOjpPYmplY3Q6OmNy
ZWF0ZSgpKTsKICAgICB9CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9zaGFkb3dlZC1vcHRpb25h
bC10eXBlLXNldHRlcnMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC9zaGFkb3dlZC1vcHRpb25hbC10eXBl
LXNldHRlcnMuanNvbi1yZXN1bHQKaW5kZXggYmZkMDdmY2UwZDUuLjYyZjQyNjQyY2VjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2Vu
ZXJpYy9leHBlY3RlZC9zaGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbi1yZXN1bHQK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVy
aWMvZXhwZWN0ZWQvc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24tcmVzdWx0CkBA
IC0zMzUsNyArMzM1LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gU3RyaW5nIGdldEVudW1Db25z
dGFudFZhbHVlKFQgZW51bVZhbHVlKQogCiBuYW1lc3BhY2UgUnVudGltZSB7CiAvKiBLZXkgcGF0
aC4gKi8KLWNsYXNzIEtleVBhdGggOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3RC
YXNlIHsKK2NsYXNzIEtleVBhdGggOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7CiBwdWJsaWM6
CiAgICAgLy8gTmFtZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSAndHlwZScgd2hpbGUgZ2VuZXJhdGlu
ZyBLZXlQYXRoLgogICAgIGVudW0gY2xhc3MgVHlwZSB7CkBAIC0zNTIsMTQgKzM1MiwxNCBAQCBw
dWJsaWM6CiAgICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgIGNsYXNzIEJ1aWxkZXIgewogICAg
IHByaXZhdGU6Ci0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OworICAg
ICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBtX3Jlc3VsdDsKIAogICAgICAgICB0ZW1wbGF0ZTxp
bnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgICB7CiAg
ICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+
Kj4odGhpcyk7CiAgICAgICAgIH0KIAotICAgICAgICBCdWlsZGVyKFJlZjwvKktleVBhdGgqL0lu
c3BlY3Rvck9iamVjdD4mJiBvYmplY3QpCisgICAgICAgIEJ1aWxkZXIoUmVmPC8qS2V5UGF0aCov
SlNPTjo6T2JqZWN0PiYmIG9iamVjdCkKICAgICAgICAgICAgIDogbV9yZXN1bHQoV1RGTW92ZShv
YmplY3QpKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBO
b0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKQEAgLTM3Nyw5
ICszNzcsOSBAQCBwdWJsaWM6CiAgICAgICAgIFJlZjxLZXlQYXRoPiByZWxlYXNlKCkKICAgICAg
ICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCBy
ZXN1bHRfaXNfbm90X3JlYWR5KTsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihL
ZXlQYXRoKSA9PSBzaXplb2YoSW5zcGVjdG9yT2JqZWN0KSwgY2Fubm90X2Nhc3QpOworICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKEtleVBhdGgpID09IHNpemVvZihKU09OOjpPYmpl
Y3QpLCBjYW5ub3RfY2FzdCk7CiAKLSAgICAgICAgICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IHJl
c3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7CisgICAgICAgICAgICBSZWY8SlNPTjo6
T2JqZWN0PiByZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOwogICAgICAgICAgICAg
cmV0dXJuIFdURk1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPEtleVBhdGg+Kj4oJnJlc3VsdCkp
OwogICAgICAgICB9CiAgICAgfTsKQEAgLTM5Miw3ICszOTIsNyBAQCBwdWJsaWM6CiAgICAgICov
CiAgICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCiAgICAgewotICAgICAg
ICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSk7
CisgICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihKU09OOjpPYmplY3Q6OmNyZWF0
ZSgpKTsKICAgICB9CiAKICAgICB2b2lkIHNldFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2dlbmVyaWMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uLXJlc3Vs
dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmlj
L2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbi1yZXN1bHQKaW5kZXgg
ZWViOTliZWY2YjMuLjYyMjQ1ZDA3ZmFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC90eXBlLWRlY2xhcmF0
aW9uLW9iamVjdC10eXBlLmpzb24tcmVzdWx0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24t
b2JqZWN0LXR5cGUuanNvbi1yZXN1bHQKQEAgLTM1NCw3ICszNTQsNyBAQCB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBTdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoVCBlbnVtVmFsdWUpCiAKIG5hbWVz
cGFjZSBEYXRhYmFzZSB7CiAvKiBEYXRhYmFzZSBlcnJvci4gKi8KLWNsYXNzIEVycm9yIDogcHVi
bGljIEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0QmFzZSB7CitjbGFzcyBFcnJvciA6IHB1Ymxp
YyBKU09OOjpPYmplY3RCYXNlIHsKIHB1YmxpYzoKICAgICBlbnVtIHsKICAgICAgICAgTm9GaWVs
ZHNTZXQgPSAwLApAQCAtMzY2LDE0ICszNjYsMTQgQEAgcHVibGljOgogICAgIHRlbXBsYXRlPGlu
dCBTVEFURT4KICAgICBjbGFzcyBCdWlsZGVyIHsKICAgICBwcml2YXRlOgotICAgICAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKKyAgICAgICAgUmVmUHRyPEpTT046Ok9iamVj
dD4gbV9yZXN1bHQ7CiAKICAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUg
fCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuICpyZWlu
dGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgICB9CiAK
LSAgICAgICAgQnVpbGRlcihSZWY8LypFcnJvciovSW5zcGVjdG9yT2JqZWN0PiYmIG9iamVjdCkK
KyAgICAgICAgQnVpbGRlcihSZWY8LypFcnJvciovSlNPTjo6T2JqZWN0PiYmIG9iamVjdCkKICAg
ICAgICAgICAgIDogbV9yZXN1bHQoV1RGTW92ZShvYmplY3QpKQogICAgICAgICB7CiAgICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVk
X2luX25vbl9pbml0X3N0YXRlKTsKQEAgLTM5OCw5ICszOTgsOSBAQCBwdWJsaWM6CiAgICAgICAg
IFJlZjxFcnJvcj4gcmVsZWFzZSgpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7Ci0gICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoRXJyb3IpID09IHNpemVvZihJbnNwZWN0b3JPYmpl
Y3QpLCBjYW5ub3RfY2FzdCk7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoRXJy
b3IpID09IHNpemVvZihKU09OOjpPYmplY3QpLCBjYW5ub3RfY2FzdCk7CiAKLSAgICAgICAgICAg
IFJlZjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7
CisgICAgICAgICAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNl
Tm9uTnVsbCgpOwogICAgICAgICAgICAgcmV0dXJuIFdURk1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8
UmVmPEVycm9yPio+KCZyZXN1bHQpKTsKICAgICAgICAgfQogICAgIH07CkBAIC00MTQsNyArNDE0
LDcgQEAgcHVibGljOgogICAgICAqLwogICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBj
cmVhdGUoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEluc3Bl
Y3Rvck9iamVjdDo6Y3JlYXRlKCkpOworICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1Nl
dD4oSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSk7CiAgICAgfQogfTsKIApAQCAtNDI1LDcgKzQyNSw3
IEBAIGVudW0gY2xhc3MgTW91c2VCdXR0b24gewogICAgIE1pZGRsZSA9IDIsCiAgICAgUmlnaHQg
PSAzLAogfTsgLy8gZW51bSBjbGFzcyBNb3VzZUJ1dHRvbgotY2xhc3MgT3B0aW9uYWxQYXJhbWV0
ZXJCdW5kbGUgOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3RCYXNlIHsKK2NsYXNz
IE9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlIDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgewogcHVi
bGljOgogICAgIC8vIE5hbWVkIGFmdGVyIHByb3BlcnR5IG5hbWUgJ2RpcmVjdGlvbmFsaXR5JyB3
aGlsZSBnZW5lcmF0aW5nIE9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlLgogICAgIGVudW0gY2xhc3Mg
RGlyZWN0aW9uYWxpdHkgewpAQCAtNDQwLDE0ICs0NDAsMTQgQEAgcHVibGljOgogICAgIHRlbXBs
YXRlPGludCBTVEFURT4KICAgICBjbGFzcyBCdWlsZGVyIHsKICAgICBwcml2YXRlOgotICAgICAg
ICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKKyAgICAgICAgUmVmUHRyPEpTT046
Ok9iamVjdD4gbV9yZXN1bHQ7CiAKICAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8
U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJu
ICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAg
ICB9CiAKLSAgICAgICAgQnVpbGRlcihSZWY8LypPcHRpb25hbFBhcmFtZXRlckJ1bmRsZSovSW5z
cGVjdG9yT2JqZWN0PiYmIG9iamVjdCkKKyAgICAgICAgQnVpbGRlcihSZWY8LypPcHRpb25hbFBh
cmFtZXRlckJ1bmRsZSovSlNPTjo6T2JqZWN0PiYmIG9iamVjdCkKICAgICAgICAgICAgIDogbV9y
ZXN1bHQoV1RGTW92ZShvYmplY3QpKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FT
U0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0
YXRlKTsKQEAgLTQ1OCw5ICs0NTgsOSBAQCBwdWJsaWM6CiAgICAgICAgIFJlZjxPcHRpb25hbFBh
cmFtZXRlckJ1bmRsZT4gcmVsZWFzZSgpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7Ci0gICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGUpID09
IHNpemVvZihJbnNwZWN0b3JPYmplY3QpLCBjYW5ub3RfY2FzdCk7CisgICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVChzaXplb2YoT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGUpID09IHNpemVvZihKU09O
OjpPYmplY3QpLCBjYW5ub3RfY2FzdCk7CiAKLSAgICAgICAgICAgIFJlZjxJbnNwZWN0b3JPYmpl
Y3Q+IHJlc3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7CisgICAgICAgICAgICBSZWY8
SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOwogICAgICAg
ICAgICAgcmV0dXJuIFdURk1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPE9wdGlvbmFsUGFyYW1l
dGVyQnVuZGxlPio+KCZyZXN1bHQpKTsKICAgICAgICAgfQogICAgIH07CkBAIC00NzIsNyArNDcy
LDcgQEAgcHVibGljOgogICAgICAqLwogICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBj
cmVhdGUoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEluc3Bl
Y3Rvck9iamVjdDo6Y3JlYXRlKCkpOworICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1Nl
dD4oSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSk7CiAgICAgfQogCiAgICAgdm9pZCBzZXRDb2x1bW5O
YW1lcyhSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPj4gdmFsdWUpCkBA
IC01MDAsMTIgKzUwMCwxMiBAQCBwdWJsaWM6CiAgICAgICAgIEluc3BlY3Rvck9iamVjdEJhc2U6
OnNldERvdWJsZShBU0NJSUxpdGVyYWwoInRpbWVzdGFtcCIpLCB2YWx1ZSk7CiAgICAgfQogCi0g
ICAgdm9pZCBzZXRWYWx1ZXMoUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiB2YWx1
ZSkKKyAgICB2b2lkIHNldFZhbHVlcyhSZWZQdHI8SlNPTjo6T2JqZWN0PiB2YWx1ZSkKICAgICB7
CiAgICAgICAgIEluc3BlY3Rvck9iamVjdEJhc2U6OnNldE9iamVjdChBU0NJSUxpdGVyYWwoInZh
bHVlcyIpLCBXVEZNb3ZlKHZhbHVlKSk7CiAgICAgfQogCi0gICAgdm9pZCBzZXRQYXlsb2FkKFJl
ZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPiB2YWx1ZSkKKyAgICB2b2lkIHNldFBheWxv
YWQoUmVmUHRyPEpTT046OlZhbHVlPiB2YWx1ZSkKICAgICB7CiAgICAgICAgIEluc3BlY3Rvck9i
amVjdEJhc2U6OnNldFZhbHVlKEFTQ0lJTGl0ZXJhbCgicGF5bG9hZCIpLCBXVEZNb3ZlKHZhbHVl
KSk7CiAgICAgfQpAQCAtNTIxLDcgKzUyMSw3IEBAIHB1YmxpYzoKICAgICB9CiB9OwogCi1jbGFz
cyBQYXJhbWV0ZXJCdW5kbGUgOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3RCYXNl
IHsKK2NsYXNzIFBhcmFtZXRlckJ1bmRsZSA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKIHB1
YmxpYzoKICAgICAvLyBOYW1lZCBhZnRlciBwcm9wZXJ0eSBuYW1lICdkaXJlY3Rpb25hbGl0eScg
d2hpbGUgZ2VuZXJhdGluZyBQYXJhbWV0ZXJCdW5kbGUuCiAgICAgZW51bSBjbGFzcyBEaXJlY3Rp
b25hbGl0eSB7CkBAIC01NDUsMTQgKzU0NSwxNCBAQCBwdWJsaWM6CiAgICAgdGVtcGxhdGU8aW50
IFNUQVRFPgogICAgIGNsYXNzIEJ1aWxkZXIgewogICAgIHByaXZhdGU6Ci0gICAgICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OworICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0
PiBtX3Jlc3VsdDsKIAogICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8
IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gKnJlaW50
ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgIH0KIAot
ICAgICAgICBCdWlsZGVyKFJlZjwvKlBhcmFtZXRlckJ1bmRsZSovSW5zcGVjdG9yT2JqZWN0PiYm
IG9iamVjdCkKKyAgICAgICAgQnVpbGRlcihSZWY8LypQYXJhbWV0ZXJCdW5kbGUqL0pTT046Ok9i
amVjdD4mJiBvYmplY3QpCiAgICAgICAgICAgICA6IG1fcmVzdWx0KFdURk1vdmUob2JqZWN0KSkK
ICAgICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNT
ZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CkBAIC01OTUsMTQgKzU5NSwx
NCBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFRpbWVzdGFtcFNldD4o
KTsKICAgICAgICAgfQogCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBWYWx1ZXNTZXQ+JiBzZXRW
YWx1ZXMoUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKKyAgICAgICAg
QnVpbGRlcjxTVEFURSB8IFZhbHVlc1NldD4mIHNldFZhbHVlcyhSZWZQdHI8SlNPTjo6T2JqZWN0
PiB2YWx1ZSkKICAgICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAm
IFZhbHVlc1NldCksIHByb3BlcnR5X3ZhbHVlc19hbHJlYWR5X3NldCk7CiAgICAgICAgICAgICBt
X3Jlc3VsdC0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgidmFsdWVzIiksIHZhbHVlKTsKICAgICAg
ICAgICAgIHJldHVybiBjYXN0U3RhdGU8VmFsdWVzU2V0PigpOwogICAgICAgICB9CiAKLSAgICAg
ICAgQnVpbGRlcjxTVEFURSB8IFBheWxvYWRTZXQ+JiBzZXRQYXlsb2FkKFJlZlB0cjxJbnNwZWN0
b3I6Okluc3BlY3RvclZhbHVlPiB2YWx1ZSkKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IFBheWxv
YWRTZXQ+JiBzZXRQYXlsb2FkKFJlZlB0cjxKU09OOjpWYWx1ZT4gdmFsdWUpCiAgICAgICAgIHsK
ICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBQYXlsb2FkU2V0KSwgcHJvcGVy
dHlfcGF5bG9hZF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0VmFsdWUo
QVNDSUlMaXRlcmFsKCJwYXlsb2FkIiksIHZhbHVlKTsKQEAgLTYyNiw5ICs2MjYsOSBAQCBwdWJs
aWM6CiAgICAgICAgIFJlZjxQYXJhbWV0ZXJCdW5kbGU+IHJlbGVhc2UoKQogICAgICAgICB7CiAg
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9p
c19ub3RfcmVhZHkpOwotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKFBhcmFtZXRl
ckJ1bmRsZSkgPT0gc2l6ZW9mKEluc3BlY3Rvck9iamVjdCksIGNhbm5vdF9jYXN0KTsKKyAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihQYXJhbWV0ZXJCdW5kbGUpID09IHNpemVvZihK
U09OOjpPYmplY3QpLCBjYW5ub3RfY2FzdCk7CiAKLSAgICAgICAgICAgIFJlZjxJbnNwZWN0b3JP
YmplY3Q+IHJlc3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7CisgICAgICAgICAgICBS
ZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOwogICAg
ICAgICAgICAgcmV0dXJuIFdURk1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPFBhcmFtZXRlckJ1
bmRsZT4qPigmcmVzdWx0KSk7CiAgICAgICAgIH0KICAgICB9OwpAQCAtNjQ5LDEyICs2NDksMTIg
QEAgcHVibGljOgogICAgICAqLwogICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVh
dGUoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCkpOworICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4o
SlNPTjo6T2JqZWN0OjpjcmVhdGUoKSk7CiAgICAgfQogfTsKIAogLyogQ29uZmxpY3RlZCBuYW1l
cyBtYXkgY2F1c2UgZ2VuZXJhdGVkIGdldHRlcnMvc2V0dGVycyB0byBjbGFzaCB3aXRoIGJ1aWx0
LWluIEluc3BlY3Rvck9iamVjdCBtZXRob2RzLiAqLwotY2xhc3MgT2JqZWN0V2l0aFByb3BlcnR5
TmFtZUNvbmZsaWN0cyA6IHB1YmxpYyBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdEJhc2Ugewor
Y2xhc3MgT2JqZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0cyA6IHB1YmxpYyBKU09OOjpPYmpl
Y3RCYXNlIHsKIHB1YmxpYzoKICAgICBlbnVtIHsKICAgICAgICAgTm9GaWVsZHNTZXQgPSAwLApA
QCAtNjY5LDE0ICs2NjksMTQgQEAgcHVibGljOgogICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAg
ICBjbGFzcyBCdWlsZGVyIHsKICAgICBwcml2YXRlOgotICAgICAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBtX3Jlc3VsdDsKKyAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gbV9yZXN1bHQ7
CiAKICAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2Fz
dFN0YXRlKCkKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0
PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgICB9CiAKLSAgICAgICAgQnVp
bGRlcihSZWY8LypPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzKi9JbnNwZWN0b3JPYmpl
Y3Q+JiYgb2JqZWN0KQorICAgICAgICBCdWlsZGVyKFJlZjwvKk9iamVjdFdpdGhQcm9wZXJ0eU5h
bWVDb25mbGljdHMqL0pTT046Ok9iamVjdD4mJiBvYmplY3QpCiAgICAgICAgICAgICA6IG1fcmVz
dWx0KFdURk1vdmUob2JqZWN0KSkKICAgICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0
ZSk7CkBAIC03MjIsOSArNzIyLDkgQEAgcHVibGljOgogICAgICAgICBSZWY8T2JqZWN0V2l0aFBy
b3BlcnR5TmFtZUNvbmZsaWN0cz4gcmVsZWFzZSgpCiAgICAgICAgIHsKICAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7
Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoT2JqZWN0V2l0aFByb3BlcnR5TmFt
ZUNvbmZsaWN0cykgPT0gc2l6ZW9mKEluc3BlY3Rvck9iamVjdCksIGNhbm5vdF9jYXN0KTsKKyAg
ICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29u
ZmxpY3RzKSA9PSBzaXplb2YoSlNPTjo6T2JqZWN0KSwgY2Fubm90X2Nhc3QpOwogCi0gICAgICAg
ICAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVs
bCgpOworICAgICAgICAgICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0ID0gbV9yZXN1bHQucmVs
ZWFzZU5vbk51bGwoKTsKICAgICAgICAgICAgIHJldHVybiBXVEZNb3ZlKCpyZWludGVycHJldF9j
YXN0PFJlZjxPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzPio+KCZyZXN1bHQpKTsKICAg
ICAgICAgfQogICAgIH07CkBAIC03NDEsMTQgKzc0MSwxNCBAQCBwdWJsaWM6CiAgICAgICovCiAg
ICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCiAgICAgewotICAgICAgICBy
ZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSk7Cisg
ICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihKU09OOjpPYmplY3Q6OmNyZWF0ZSgp
KTsKICAgICB9CiB9OwogCiB9IC8vIERhdGFiYXNlCiAKIG5hbWVzcGFjZSBUZXN0IHsKLWNsYXNz
IFBhcmFtZXRlckJ1bmRsZSA6IHB1YmxpYyBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdEJhc2Ug
eworY2xhc3MgUGFyYW1ldGVyQnVuZGxlIDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgewogcHVi
bGljOgogICAgIC8vIE5hbWVkIGFmdGVyIHByb3BlcnR5IG5hbWUgJ2RpcmVjdGlvbmFsaXR5JyB3
aGlsZSBnZW5lcmF0aW5nIFBhcmFtZXRlckJ1bmRsZS4KICAgICBlbnVtIGNsYXNzIERpcmVjdGlv
bmFsaXR5IHsKQEAgLTc3MSwxNCArNzcxLDE0IEBAIHB1YmxpYzoKICAgICB0ZW1wbGF0ZTxpbnQg
U1RBVEU+CiAgICAgY2xhc3MgQnVpbGRlciB7CiAgICAgcHJpdmF0ZToKLSAgICAgICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CisgICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+
IG1fcmVzdWx0OwogCiAgICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwg
U1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiAqcmVpbnRl
cnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICAgfQogCi0g
ICAgICAgIEJ1aWxkZXIoUmVmPC8qUGFyYW1ldGVyQnVuZGxlKi9JbnNwZWN0b3JPYmplY3Q+JiYg
b2JqZWN0KQorICAgICAgICBCdWlsZGVyKFJlZjwvKlBhcmFtZXRlckJ1bmRsZSovSlNPTjo6T2Jq
ZWN0PiYmIG9iamVjdCkKICAgICAgICAgICAgIDogbV9yZXN1bHQoV1RGTW92ZShvYmplY3QpKQog
ICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1Nl
dCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKQEAgLTgyMSwxNCArODIxLDE0
IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VGltZXN0YW1wU2V0Pigp
OwogICAgICAgICB9CiAKLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IFZhbHVlc1NldD4mIHNldFZh
bHVlcyhSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQorICAgICAgICBC
dWlsZGVyPFNUQVRFIHwgVmFsdWVzU2V0PiYgc2V0VmFsdWVzKFJlZlB0cjxKU09OOjpPYmplY3Q+
IHZhbHVlKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYg
VmFsdWVzU2V0KSwgcHJvcGVydHlfdmFsdWVzX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgIG1f
cmVzdWx0LT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJ2YWx1ZXMiKSwgdmFsdWUpOwogICAgICAg
ICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxWYWx1ZXNTZXQ+KCk7CiAgICAgICAgIH0KIAotICAgICAg
ICBCdWlsZGVyPFNUQVRFIHwgUGF5bG9hZFNldD4mIHNldFBheWxvYWQoUmVmUHRyPEluc3BlY3Rv
cjo6SW5zcGVjdG9yVmFsdWU+IHZhbHVlKQorICAgICAgICBCdWlsZGVyPFNUQVRFIHwgUGF5bG9h
ZFNldD4mIHNldFBheWxvYWQoUmVmUHRyPEpTT046OlZhbHVlPiB2YWx1ZSkKICAgICAgICAgewog
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFBheWxvYWRTZXQpLCBwcm9wZXJ0
eV9wYXlsb2FkX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRWYWx1ZShB
U0NJSUxpdGVyYWwoInBheWxvYWQiKSwgdmFsdWUpOwpAQCAtODQ1LDkgKzg0NSw5IEBAIHB1Ymxp
YzoKICAgICAgICAgUmVmPFBhcmFtZXRlckJ1bmRsZT4gcmVsZWFzZSgpCiAgICAgICAgIHsKICAg
ICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lz
X25vdF9yZWFkeSk7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoUGFyYW1ldGVy
QnVuZGxlKSA9PSBzaXplb2YoSW5zcGVjdG9yT2JqZWN0KSwgY2Fubm90X2Nhc3QpOworICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKFBhcmFtZXRlckJ1bmRsZSkgPT0gc2l6ZW9mKEpT
T046Ok9iamVjdCksIGNhbm5vdF9jYXN0KTsKIAotICAgICAgICAgICAgUmVmPEluc3BlY3Rvck9i
amVjdD4gcmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKKyAgICAgICAgICAgIFJl
ZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7CiAgICAg
ICAgICAgICByZXR1cm4gV1RGTW92ZSgqcmVpbnRlcnByZXRfY2FzdDxSZWY8UGFyYW1ldGVyQnVu
ZGxlPio+KCZyZXN1bHQpKTsKICAgICAgICAgfQogICAgIH07CkBAIC04NjcsNyArODY3LDcgQEAg
cHVibGljOgogICAgICAqLwogICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUo
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEluc3BlY3Rvck9i
amVjdDo6Y3JlYXRlKCkpOworICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSlNP
Tjo6T2JqZWN0OjpjcmVhdGUoKSk7CiAgICAgfQogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvdHlw
ZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL3R5cGUtcmVxdWly
aW5nLXJ1bnRpbWUtY2FzdHMuanNvbi1yZXN1bHQKaW5kZXggODczMzU4ZTUyNWIuLjBlMTY4NjY0
MjBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZ2VuZXJpYy9leHBlY3RlZC90eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24t
cmVzdWx0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9nZW5lcmljL2V4cGVjdGVkL3R5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbi1yZXN1
bHQKQEAgLTM0OSw3ICszNDksNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBTdHJpbmcgZ2V0RW51
bUNvbnN0YW50VmFsdWUoVCBlbnVtVmFsdWUpCiAKIG5hbWVzcGFjZSBUZXN0IHsKIC8qIEEgZHVt
bXkgdHlwZSB0aGF0IHJlcXVpcmVzIHJ1bnRpbWUgY2FzdHMsIGFuZCBmb3JjZXMgbm9uLXByaW1p
dGl2ZSByZWZlcmVuY2VkIHR5cGVzIHRvIGFsc28gZW1pdCBydW50aW1lIGNhc3QgaGVscGVycy4g
Ki8KLWNsYXNzIFR5cGVOZWVkaW5nQ2FzdCA6IHB1YmxpYyBJbnNwZWN0b3I6Okluc3BlY3Rvck9i
amVjdEJhc2UgeworY2xhc3MgVHlwZU5lZWRpbmdDYXN0IDogcHVibGljIEpTT046Ok9iamVjdEJh
c2UgewogcHVibGljOgogICAgIGVudW0gewogICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCkBAIC0z
NjQsMTQgKzM2NCwxNCBAQCBwdWJsaWM6CiAgICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgIGNs
YXNzIEJ1aWxkZXIgewogICAgIHByaXZhdGU6Ci0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IG1fcmVzdWx0OworICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBtX3Jlc3VsdDsKIAog
ICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3Rh
dGUoKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVp
bGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgIH0KIAotICAgICAgICBCdWlsZGVy
KFJlZjwvKlR5cGVOZWVkaW5nQ2FzdCovSW5zcGVjdG9yT2JqZWN0PiYmIG9iamVjdCkKKyAgICAg
ICAgQnVpbGRlcihSZWY8LypUeXBlTmVlZGluZ0Nhc3QqL0pTT046Ok9iamVjdD4mJiBvYmplY3Qp
CiAgICAgICAgICAgICA6IG1fcmVzdWx0KFdURk1vdmUob2JqZWN0KSkKICAgICAgICAgewogICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3Jl
YXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CkBAIC00MTcsOSArNDE3LDkgQEAgcHVibGljOgogICAg
ICAgICBSZWY8VHlwZU5lZWRpbmdDYXN0PiByZWxlYXNlKCkKICAgICAgICAgewogICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3Jl
YWR5KTsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihUeXBlTmVlZGluZ0Nhc3Qp
ID09IHNpemVvZihJbnNwZWN0b3JPYmplY3QpLCBjYW5ub3RfY2FzdCk7CisgICAgICAgICAgICBD
T01QSUxFX0FTU0VSVChzaXplb2YoVHlwZU5lZWRpbmdDYXN0KSA9PSBzaXplb2YoSlNPTjo6T2Jq
ZWN0KSwgY2Fubm90X2Nhc3QpOwogCi0gICAgICAgICAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiBy
ZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOworICAgICAgICAgICAgUmVmPEpTT046
Ok9iamVjdD4gcmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKICAgICAgICAgICAg
IHJldHVybiBXVEZNb3ZlKCpyZWludGVycHJldF9jYXN0PFJlZjxUeXBlTmVlZGluZ0Nhc3Q+Kj4o
JnJlc3VsdCkpOwogICAgICAgICB9CiAgICAgfTsKQEAgLTQzNiw3ICs0MzYsNyBAQCBwdWJsaWM6
CiAgICAgICovCiAgICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCiAgICAg
ewotICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSW5zcGVjdG9yT2JqZWN0Ojpj
cmVhdGUoKSk7CisgICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihKU09OOjpPYmpl
Y3Q6OmNyZWF0ZSgpKTsKICAgICB9CiB9OwogCkBAIC00NTQsNyArNDU0LDcgQEAgZW51bSBjbGFz
cyBDYXN0ZWRBbmltYWxzIHsKICAgICBDcm93cyA9IDIsCiAgICAgRmxhbWluZ29zID0gMywKIH07
IC8vIGVudW0gY2xhc3MgQ2FzdGVkQW5pbWFscwotY2xhc3MgUmVjdXJzaXZlT2JqZWN0MSA6IHB1
YmxpYyBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdEJhc2UgeworY2xhc3MgUmVjdXJzaXZlT2Jq
ZWN0MSA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKIHB1YmxpYzoKICAgICBlbnVtIHsKICAg
ICAgICAgTm9GaWVsZHNTZXQgPSAwLApAQCAtNDY0LDE0ICs0NjQsMTQgQEAgcHVibGljOgogICAg
IHRlbXBsYXRlPGludCBTVEFURT4KICAgICBjbGFzcyBCdWlsZGVyIHsKICAgICBwcml2YXRlOgot
ICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKKyAgICAgICAgUmVmUHRy
PEpTT046Ok9iamVjdD4gbV9yZXN1bHQ7CiAKICAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1
aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICAgewogICAgICAgICAgICAg
cmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwog
ICAgICAgICB9CiAKLSAgICAgICAgQnVpbGRlcihSZWY8LypSZWN1cnNpdmVPYmplY3QxKi9JbnNw
ZWN0b3JPYmplY3Q+JiYgb2JqZWN0KQorICAgICAgICBCdWlsZGVyKFJlZjwvKlJlY3Vyc2l2ZU9i
amVjdDEqL0pTT046Ok9iamVjdD4mJiBvYmplY3QpCiAgICAgICAgICAgICA6IG1fcmVzdWx0KFdU
Rk1vdmUob2JqZWN0KSkKICAgICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RB
VEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CkBA
IC00ODIsOSArNDgyLDkgQEAgcHVibGljOgogICAgICAgICBSZWY8UmVjdXJzaXZlT2JqZWN0MT4g
cmVsZWFzZSgpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09
IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7Ci0gICAgICAgICAgICBDT01QSUxF
X0FTU0VSVChzaXplb2YoUmVjdXJzaXZlT2JqZWN0MSkgPT0gc2l6ZW9mKEluc3BlY3Rvck9iamVj
dCksIGNhbm5vdF9jYXN0KTsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihSZWN1
cnNpdmVPYmplY3QxKSA9PSBzaXplb2YoSlNPTjo6T2JqZWN0KSwgY2Fubm90X2Nhc3QpOwogCi0g
ICAgICAgICAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNl
Tm9uTnVsbCgpOworICAgICAgICAgICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0ID0gbV9yZXN1
bHQucmVsZWFzZU5vbk51bGwoKTsKICAgICAgICAgICAgIHJldHVybiBXVEZNb3ZlKCpyZWludGVy
cHJldF9jYXN0PFJlZjxSZWN1cnNpdmVPYmplY3QxPio+KCZyZXN1bHQpKTsKICAgICAgICAgfQog
ICAgIH07CkBAIC00OTYsNyArNDk2LDcgQEAgcHVibGljOgogICAgICAqLwogICAgIHN0YXRpYyBC
dWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIEJ1aWxk
ZXI8Tm9GaWVsZHNTZXQ+KEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkpOworICAgICAgICByZXR1
cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSk7CiAgICAgfQog
CiAgICAgdm9pZCBzZXRPYmooUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlJlY3Vy
c2l2ZU9iamVjdDI+IHZhbHVlKQpAQCAtNTA1LDcgKzUwNSw3IEBAIHB1YmxpYzoKICAgICB9CiB9
OwogCi1jbGFzcyBSZWN1cnNpdmVPYmplY3QyIDogcHVibGljIEluc3BlY3Rvcjo6SW5zcGVjdG9y
T2JqZWN0QmFzZSB7CitjbGFzcyBSZWN1cnNpdmVPYmplY3QyIDogcHVibGljIEpTT046Ok9iamVj
dEJhc2UgewogcHVibGljOgogICAgIGVudW0gewogICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCkBA
IC01MTUsMTQgKzUxNSwxNCBAQCBwdWJsaWM6CiAgICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAg
IGNsYXNzIEJ1aWxkZXIgewogICAgIHByaXZhdGU6Ci0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IG1fcmVzdWx0OworICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBtX3Jlc3VsdDsK
IAogICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0
U3RhdGUoKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8
QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgIH0KIAotICAgICAgICBCdWls
ZGVyKFJlZjwvKlJlY3Vyc2l2ZU9iamVjdDIqL0luc3BlY3Rvck9iamVjdD4mJiBvYmplY3QpCisg
ICAgICAgIEJ1aWxkZXIoUmVmPC8qUmVjdXJzaXZlT2JqZWN0MiovSlNPTjo6T2JqZWN0PiYmIG9i
amVjdCkKICAgICAgICAgICAgIDogbV9yZXN1bHQoV1RGTW92ZShvYmplY3QpKQogICAgICAgICB7
CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRl
cl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKQEAgLTUzMyw5ICs1MzMsOSBAQCBwdWJsaWM6
CiAgICAgICAgIFJlZjxSZWN1cnNpdmVPYmplY3QyPiByZWxlYXNlKCkKICAgICAgICAgewogICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNf
bm90X3JlYWR5KTsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihSZWN1cnNpdmVP
YmplY3QyKSA9PSBzaXplb2YoSW5zcGVjdG9yT2JqZWN0KSwgY2Fubm90X2Nhc3QpOworICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKFJlY3Vyc2l2ZU9iamVjdDIpID09IHNpemVvZihK
U09OOjpPYmplY3QpLCBjYW5ub3RfY2FzdCk7CiAKLSAgICAgICAgICAgIFJlZjxJbnNwZWN0b3JP
YmplY3Q+IHJlc3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7CisgICAgICAgICAgICBS
ZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOwogICAg
ICAgICAgICAgcmV0dXJuIFdURk1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPFJlY3Vyc2l2ZU9i
amVjdDI+Kj4oJnJlc3VsdCkpOwogICAgICAgICB9CiAgICAgfTsKQEAgLTU0Nyw3ICs1NDcsNyBA
QCBwdWJsaWM6CiAgICAgICovCiAgICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0
ZSgpCiAgICAgewotICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKSk7CisgICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihK
U09OOjpPYmplY3Q6OmNyZWF0ZSgpKTsKICAgICB9CiAKICAgICB2b2lkIHNldE9iaihSZWZQdHI8
SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0MT4gdmFsdWUpCkBAIC01
NjAsMjMgKzU2MCwyMyBAQCBwdWJsaWM6CiAKIHRlbXBsYXRlPD4gc3RydWN0IEJpbmRpbmdUcmFp
dHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFscz4gewogI2lmICFBU1NF
UlRfRElTQUJMRUQKLXN0YXRpYyB2b2lkIGFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yVmFsdWUqKTsKK3N0YXRpYyB2b2lkIGFzc2VydFZhbHVlSGFzRXhwZWN0
ZWRUeXBlKEpTT046OlZhbHVlKik7CiAjZW5kaWYgLy8gIUFTU0VSVF9ESVNBQkxFRAogfTsKIHRl
bXBsYXRlPD4gc3RydWN0IEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6
VHlwZU5lZWRpbmdDYXN0PiB7Ci1zdGF0aWMgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRl
c3Q6OlR5cGVOZWVkaW5nQ2FzdD4gcnVudGltZUNhc3QoUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVj
dG9yVmFsdWU+JiYgdmFsdWUpOworc3RhdGljIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpU
ZXN0OjpUeXBlTmVlZGluZ0Nhc3Q+IHJ1bnRpbWVDYXN0KFJlZlB0cjxKU09OOjpWYWx1ZT4mJiB2
YWx1ZSk7CiAjaWYgIUFTU0VSVF9ESVNBQkxFRAotc3RhdGljIHZvaWQgYXNzZXJ0VmFsdWVIYXNF
eHBlY3RlZFR5cGUoSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSopOworc3RhdGljIHZvaWQgYXNz
ZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoSlNPTjo6VmFsdWUqKTsKICNlbmRpZiAvLyAhQVNTRVJU
X0RJU0FCTEVECiB9OwogdGVtcGxhdGU8PiBzdHJ1Y3QgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6
OlByb3RvY29sOjpUZXN0OjpSZWN1cnNpdmVPYmplY3QxPiB7CiAjaWYgIUFTU0VSVF9ESVNBQkxF
RAotc3RhdGljIHZvaWQgYXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoSW5zcGVjdG9yOjpJbnNw
ZWN0b3JWYWx1ZSopOworc3RhdGljIHZvaWQgYXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoSlNP
Tjo6VmFsdWUqKTsKICNlbmRpZiAvLyAhQVNTRVJUX0RJU0FCTEVECiB9OwogdGVtcGxhdGU8PiBz
dHJ1Y3QgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpSZWN1cnNpdmVP
YmplY3QyPiB7CiAjaWYgIUFTU0VSVF9ESVNBQkxFRAotc3RhdGljIHZvaWQgYXNzZXJ0VmFsdWVI
YXNFeHBlY3RlZFR5cGUoSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSopOworc3RhdGljIHZvaWQg
YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoSlNPTjo6VmFsdWUqKTsKICNlbmRpZiAvLyAhQVNT
RVJUX0RJU0FCTEVECiB9OwogCkBAIC02OTQsNyArNjk0LDcgQEAgc3RkOjpvcHRpb25hbDxJbnNw
ZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzPiBwYXJzZUVudW1WYWx1ZUZyb21T
dHJpbmcKIAogCiAjaWYgIUFTU0VSVF9ESVNBQkxFRAotdm9pZCBCaW5kaW5nVHJhaXRzPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM+Ojphc3NlcnRWYWx1ZUhhc0V4cGVj
dGVkVHlwZShJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlKiB2YWx1ZSkKK3ZvaWQgQmluZGluZ1Ry
YWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzPjo6YXNzZXJ0VmFs
dWVIYXNFeHBlY3RlZFR5cGUoSlNPTjo6VmFsdWUqIHZhbHVlKQogewogICAgIEFTU0VSVF9BUkco
dmFsdWUsIHZhbHVlKTsKICAgICBTdHJpbmcgcmVzdWx0OwpAQCAtNzA1LDcgKzcwNSw3IEBAIHZv
aWQgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxz
Pjo6YXNzZXJ0VmFsdWVIYXNFeHBlCiAjZW5kaWYgLy8gIUFTU0VSVF9ESVNBQkxFRAogCiAjaWYg
IUFTU0VSVF9ESVNBQkxFRAotdm9pZCBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdD46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yVmFsdWUqIHZhbHVlKQordm9pZCBCaW5kaW5nVHJhaXRzPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdD46OmFzc2VydFZhbHVlSGFzRXhwZWN0
ZWRUeXBlKEpTT046OlZhbHVlKiB2YWx1ZSkKIHsKICAgICBBU1NFUlRfQVJHKHZhbHVlLCB2YWx1
ZSk7CiAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gb2JqZWN0OwpAQCAtNzQzLDIxICs3NDMs
MjEgQEAgdm9pZCBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlR5cGVO
ZWVkaW5nQ2FzdD46OmFzc2VydFZhbHVlSGFzRXgKIH0KICNlbmRpZiAvLyAhQVNTRVJUX0RJU0FC
TEVECiAKLVJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3Q+
IEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0
Pjo6cnVudGltZUNhc3QoUmVmUHRyPEluc3BlY3RvclZhbHVlPiYmIHZhbHVlKQorUmVmUHRyPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdD4gQmluZGluZ1RyYWl0czxJ
bnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3Q+OjpydW50aW1lQ2FzdChS
ZWZQdHI8SlNPTjo6VmFsdWU+JiYgdmFsdWUpCiB7Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gcmVzdWx0OworICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHJlc3VsdDsKICAgICBib29sIGNh
c3RTdWNjZWVkZWQgPSB2YWx1ZS0+YXNPYmplY3QocmVzdWx0KTsKICAgICBBU1NFUlRfVU5VU0VE
KGNhc3RTdWNjZWVkZWQsIGNhc3RTdWNjZWVkZWQpOwogI2lmICFBU1NFUlRfRElTQUJMRUQKICAg
ICBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlR5cGVOZWVkaW5nQ2Fz
dD46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKHJlc3VsdC5nZXQoKSk7CiAjZW5kaWYgIC8v
ICFBU1NFUlRfRElTQUJMRUQKLSAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoSW5zcGVjdG9yOjpQ
cm90b2NvbDo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0KSA9PSBzaXplb2YoSW5zcGVjdG9yT2JqZWN0
QmFzZSksIHR5cGVfY2FzdF9wcm9ibGVtKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SW5zcGVj
dG9yOjpQcm90b2NvbDo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0Kj4oc3RhdGljX2Nhc3Q8SW5zcGVj
dG9yT2JqZWN0QmFzZSo+KHJlc3VsdC5nZXQoKSkpOworICAgIENPTVBJTEVfQVNTRVJUKHNpemVv
ZihJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3QpID09IHNpemVvZihK
U09OOjpPYmplY3RCYXNlKSwgdHlwZV9jYXN0X3Byb2JsZW0pOworICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3QqPihzdGF0aWNf
Y2FzdDxKU09OOjpPYmplY3RCYXNlKj4ocmVzdWx0LmdldCgpKSk7CiB9CiAKIAogI2lmICFBU1NF
UlRfRElTQUJMRUQKLXZvaWQgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0
OjpSZWN1cnNpdmVPYmplY3QxPjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoSW5zcGVjdG9y
OjpJbnNwZWN0b3JWYWx1ZSogdmFsdWUpCit2b2lkIEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0MT46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRU
eXBlKEpTT046OlZhbHVlKiB2YWx1ZSkKIHsKICAgICBBU1NFUlRfQVJHKHZhbHVlLCB2YWx1ZSk7
CiAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gb2JqZWN0OwpAQCAtNzc4LDcgKzc3OCw3IEBA
IHZvaWQgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpSZWN1cnNpdmVP
YmplY3QxPjo6YXNzZXJ0VmFsdWVIYXNFCiAjZW5kaWYgLy8gIUFTU0VSVF9ESVNBQkxFRAogCiAj
aWYgIUFTU0VSVF9ESVNBQkxFRAotdm9pZCBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDI+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShJ
bnNwZWN0b3I6Okluc3BlY3RvclZhbHVlKiB2YWx1ZSkKK3ZvaWQgQmluZGluZ1RyYWl0czxJbnNw
ZWN0b3I6OlByb3RvY29sOjpUZXN0OjpSZWN1cnNpdmVPYmplY3QyPjo6YXNzZXJ0VmFsdWVIYXNF
eHBlY3RlZFR5cGUoSlNPTjo6VmFsdWUqIHZhbHVlKQogewogICAgIEFTU0VSVF9BUkcodmFsdWUs
IHZhbHVlKTsKICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBvYmplY3Q7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9l
eHBlY3RlZC90eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0IGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dlbmVyaWMvZXhwZWN0ZWQvdHlw
ZS13aXRoLW9wZW4tcGFyYW1ldGVycy5qc29uLXJlc3VsdAppbmRleCAwNTA5MWM3YjcxNi4uZTY0
Y2FlNzYzZGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9nZW5lcmljL2V4cGVjdGVkL3R5cGUtd2l0aC1vcGVuLXBhcmFtZXRlcnMuanNv
bi1yZXN1bHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2dlbmVyaWMvZXhwZWN0ZWQvdHlwZS13aXRoLW9wZW4tcGFyYW1ldGVycy5qc29uLXJlc3Vs
dApAQCAtMzI0LDcgKzMyNCw3IEBAIGNsYXNzIE9wZW5QYXJhbWV0ZXJzOwogCiAKIG5hbWVzcGFj
ZSBUZXN0IHsKLWNsYXNzIE5vT3BlblBhcmFtZXRlcnMgOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNw
ZWN0b3JPYmplY3RCYXNlIHsKK2NsYXNzIE5vT3BlblBhcmFtZXRlcnMgOiBwdWJsaWMgSlNPTjo6
T2JqZWN0QmFzZSB7CiBwdWJsaWM6CiAgICAgZW51bSB7CiAgICAgICAgIE5vRmllbGRzU2V0ID0g
MCwKQEAgLTMzNiwxNCArMzM2LDE0IEBAIHB1YmxpYzoKICAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+
CiAgICAgY2xhc3MgQnVpbGRlciB7CiAgICAgcHJpdmF0ZToKLSAgICAgICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gbV9yZXN1bHQ7CisgICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG1fcmVz
dWx0OwogCiAgICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4m
IGNhc3RTdGF0ZSgpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRf
Y2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICAgfQogCi0gICAgICAg
IEJ1aWxkZXIoUmVmPC8qTm9PcGVuUGFyYW1ldGVycyovSW5zcGVjdG9yT2JqZWN0PiYmIG9iamVj
dCkKKyAgICAgICAgQnVpbGRlcihSZWY8LypOb09wZW5QYXJhbWV0ZXJzKi9KU09OOjpPYmplY3Q+
JiYgb2JqZWN0KQogICAgICAgICAgICAgOiBtX3Jlc3VsdChXVEZNb3ZlKG9iamVjdCkpCiAgICAg
ICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBi
dWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwpAQCAtMzY4LDkgKzM2OCw5IEBAIHB1
YmxpYzoKICAgICAgICAgUmVmPE5vT3BlblBhcmFtZXRlcnM+IHJlbGVhc2UoKQogICAgICAgICB7
CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3Vs
dF9pc19ub3RfcmVhZHkpOwotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKE5vT3Bl
blBhcmFtZXRlcnMpID09IHNpemVvZihJbnNwZWN0b3JPYmplY3QpLCBjYW5ub3RfY2FzdCk7Cisg
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoTm9PcGVuUGFyYW1ldGVycykgPT0gc2l6
ZW9mKEpTT046Ok9iamVjdCksIGNhbm5vdF9jYXN0KTsKIAotICAgICAgICAgICAgUmVmPEluc3Bl
Y3Rvck9iamVjdD4gcmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKKyAgICAgICAg
ICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7
CiAgICAgICAgICAgICByZXR1cm4gV1RGTW92ZSgqcmVpbnRlcnByZXRfY2FzdDxSZWY8Tm9PcGVu
UGFyYW1ldGVycz4qPigmcmVzdWx0KSk7CiAgICAgICAgIH0KICAgICB9OwpAQCAtMzg0LDExICsz
ODQsMTEgQEAgcHVibGljOgogICAgICAqLwogICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0
PiBjcmVhdGUoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KElu
c3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkpOworICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxk
c1NldD4oSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSk7CiAgICAgfQogfTsKIAotY2xhc3MgT3BlblBh
cmFtZXRlcnMgOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QgeworY2xhc3MgT3Bl
blBhcmFtZXRlcnMgOiBwdWJsaWMgSlNPTjo6T2JqZWN0IHsKIHB1YmxpYzoKICAgICBlbnVtIHsK
ICAgICAgICAgTm9GaWVsZHNTZXQgPSAwLApAQCAtNDAwLDE0ICs0MDAsMTQgQEAgcHVibGljOgog
ICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgICBjbGFzcyBCdWlsZGVyIHsKICAgICBwcml2YXRl
OgotICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKKyAgICAgICAgUmVm
UHRyPEpTT046Ok9iamVjdD4gbV9yZXN1bHQ7CiAKICAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+
IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICAgewogICAgICAgICAg
ICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMp
OwogICAgICAgICB9CiAKLSAgICAgICAgQnVpbGRlcihSZWY8LypPcGVuUGFyYW1ldGVycyovSW5z
cGVjdG9yT2JqZWN0PiYmIG9iamVjdCkKKyAgICAgICAgQnVpbGRlcihSZWY8LypPcGVuUGFyYW1l
dGVycyovSlNPTjo6T2JqZWN0PiYmIG9iamVjdCkKICAgICAgICAgICAgIDogbV9yZXN1bHQoV1RG
TW92ZShvYmplY3QpKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFU
RSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKQEAg
LTQzMiw5ICs0MzIsOSBAQCBwdWJsaWM6CiAgICAgICAgIFJlZjxPcGVuUGFyYW1ldGVycz4gcmVs
ZWFzZSgpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFs
bEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7Ci0gICAgICAgICAgICBDT01QSUxFX0FT
U0VSVChzaXplb2YoT3BlblBhcmFtZXRlcnMpID09IHNpemVvZihJbnNwZWN0b3JPYmplY3QpLCBj
YW5ub3RfY2FzdCk7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoT3BlblBhcmFt
ZXRlcnMpID09IHNpemVvZihKU09OOjpPYmplY3QpLCBjYW5ub3RfY2FzdCk7CiAKLSAgICAgICAg
ICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxs
KCk7CisgICAgICAgICAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBtX3Jlc3VsdC5yZWxl
YXNlTm9uTnVsbCgpOwogICAgICAgICAgICAgcmV0dXJuIFdURk1vdmUoKnJlaW50ZXJwcmV0X2Nh
c3Q8UmVmPE9wZW5QYXJhbWV0ZXJzPio+KCZyZXN1bHQpKTsKICAgICAgICAgfQogICAgIH07CkBA
IC00NDgsNyArNDQ4LDcgQEAgcHVibGljOgogICAgICAqLwogICAgIHN0YXRpYyBCdWlsZGVyPE5v
RmllbGRzU2V0PiBjcmVhdGUoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVs
ZHNTZXQ+KEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkpOworICAgICAgICByZXR1cm4gQnVpbGRl
cjxOb0ZpZWxkc1NldD4oSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSk7CiAgICAgfQogCiAgICAgLy8g
UHJvcGVydHkgbmFtZXMgZm9yIHR5cGUgZ2VuZXJhdGVkIGFzIG9wZW4uCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBl
Y3RlZC93b3JrZXItc3VwcG9ydGVkLWRvbWFpbnMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZ2VuZXJpYy9leHBlY3RlZC93b3JrZXIt
c3VwcG9ydGVkLWRvbWFpbnMuanNvbi1yZXN1bHQKaW5kZXggNTE5MTExMjVjYzguLjUyMjY3YTRm
MzBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZ2VuZXJpYy9leHBlY3RlZC93b3JrZXItc3VwcG9ydGVkLWRvbWFpbnMuanNvbi1yZXN1
bHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2dl
bmVyaWMvZXhwZWN0ZWQvd29ya2VyLXN1cHBvcnRlZC1kb21haW5zLmpzb24tcmVzdWx0CkBAIC0x
NjgsNyArMTY4LDcgQEAgcHJvdGVjdGVkOgogY2xhc3MgRG9tYWluQUJhY2tlbmREaXNwYXRjaGVy
IGZpbmFsIDogcHVibGljIFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyIHsKIHB1YmxpYzoK
ICAgICBzdGF0aWMgUmVmPERvbWFpbkFCYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEJhY2tlbmRE
aXNwYXRjaGVyJiwgRG9tYWluQUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwotICAgIHZvaWQg
ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SW5zcGVj
dG9yT2JqZWN0PiYmIG1lc3NhZ2UpIG92ZXJyaWRlOworICAgIHZvaWQgZGlzcGF0Y2gobG9uZyBy
ZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3Nh
Z2UpIG92ZXJyaWRlOwogcHJpdmF0ZToKICAgICB2b2lkIGVuYWJsZShsb25nIHJlcXVlc3RJZCwg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKICNpZiBFTkFCTEUoSU5TUEVD
VE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKQEAgLTE4NSw3ICsxODUsNyBAQCBwcml2YXRlOgog
Y2xhc3MgRG9tYWluQkJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIFN1cHBsZW1lbnRh
bEJhY2tlbmREaXNwYXRjaGVyIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPERvbWFpbkJCYWNr
ZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiwgRG9tYWluQkJhY2tlbmRE
aXNwYXRjaGVySGFuZGxlciopOwotICAgIHZvaWQgZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNv
bnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SW5zcGVjdG9yT2JqZWN0PiYmIG1lc3NhZ2UpIG92ZXJy
aWRlOworICAgIHZvaWQgZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0
aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpIG92ZXJyaWRlOwogcHJpdmF0ZToKICAg
ICB2b2lkIGVuYWJsZShsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBw
YXJhbWV0ZXJzKTsKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykK
QEAgLTI2MiwxMSArMjYyLDExIEBAIERvbWFpbkFCYWNrZW5kRGlzcGF0Y2hlcjo6RG9tYWluQUJh
Y2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzCiAgICAgbV9iYWNr
ZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNwYXRjaGVyRm9yRG9tYWluKEFTQ0lJTGl0ZXJhbCgi
RG9tYWluQSIpLCB0aGlzKTsKIH0KIAotdm9pZCBEb21haW5BQmFja2VuZERpc3BhdGNoZXI6OmRp
c3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEluc3BlY3Rv
ck9iamVjdD4mJiBtZXNzYWdlKQordm9pZCBEb21haW5BQmFja2VuZERpc3BhdGNoZXI6OmRpc3Bh
dGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVj
dD4mJiBtZXNzYWdlKQogewogICAgIFJlZjxEb21haW5BQmFja2VuZERpc3BhdGNoZXI+IHByb3Rl
Y3QoKnRoaXMpOwogCi0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1ldGVyczsKKyAg
ICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzOwogICAgIG1lc3NhZ2UtPmdldE9iamVj
dChBU0NJSUxpdGVyYWwoInBhcmFtcyIpLCBwYXJhbWV0ZXJzKTsKIAogICAgIGlmIChtZXRob2Qg
PT0gImVuYWJsZSIpCkBAIC0zMDYsMTEgKzMwNiwxMSBAQCBEb21haW5CQmFja2VuZERpc3BhdGNo
ZXI6OkRvbWFpbkJCYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERp
cwogICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbihB
U0NJSUxpdGVyYWwoIkRvbWFpbkIiKSwgdGhpcyk7CiB9CiAKLXZvaWQgRG9tYWluQkJhY2tlbmRE
aXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2Qs
IFJlZjxJbnNwZWN0b3JPYmplY3Q+JiYgbWVzc2FnZSkKK3ZvaWQgRG9tYWluQkJhY2tlbmREaXNw
YXRjaGVyOjpkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJl
ZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkKIHsKICAgICBSZWY8RG9tYWluQkJhY2tlbmREaXNw
YXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKIAotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBh
cmFtZXRlcnM7CisgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVyczsKICAgICBtZXNz
YWdlLT5nZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJwYXJhbXMiKSwgcGFyYW1ldGVycyk7CiAKICAg
ICBpZiAobWV0aG9kID09ICJlbmFibGUiKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL21hYy9leHBlY3RlZC9kZWZpbml0aW9ucy13aXRo
LW1hYy1wbGF0Zm9ybS5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9tYWMvZXhwZWN0ZWQvZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZv
cm0uanNvbi1yZXN1bHQKaW5kZXggNmQwN2Q5ZTAyYmMuLjNmNzgzY2Q0OGMwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvbWFjL2V4cGVj
dGVkL2RlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24tcmVzdWx0CisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9tYWMvZXhwZWN0ZWQvZGVm
aW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbi1yZXN1bHQKQEAgLTE1Miw3ICsxNTIsNyBA
QCBwcm90ZWN0ZWQ6CiBjbGFzcyBOZXR3b3JrQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJs
aWMgU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIgewogcHVibGljOgogICAgIHN0YXRpYyBS
ZWY8TmV0d29ya0JhY2tlbmREaXNwYXRjaGVyPiBjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImLCBO
ZXR3b3JrQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7Ci0gICAgdm9pZCBkaXNwYXRjaChsb25n
IHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxJbnNwZWN0b3JPYmplY3Q+JiYg
bWVzc2FnZSkgb3ZlcnJpZGU7CisgICAgdm9pZCBkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29u
c3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkgb3ZlcnJpZGU7
CiBwcml2YXRlOgogICAgIHZvaWQgbG9hZFJlc291cmNlKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiYmIHBhcmFtZXRlcnMpOwogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxU
RVJOQVRFX0RJU1BBVENIRVJTKQpAQCAtMjI4LDExICsyMjgsMTEgQEAgTmV0d29ya0JhY2tlbmRE
aXNwYXRjaGVyOjpOZXR3b3JrQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImIGJh
Y2tlbmREaXMKICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JE
b21haW4oQVNDSUlMaXRlcmFsKCJOZXR3b3JrIiksIHRoaXMpOwogfQogCi12b2lkIE5ldHdvcmtC
YWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYg
bWV0aG9kLCBSZWY8SW5zcGVjdG9yT2JqZWN0PiYmIG1lc3NhZ2UpCit2b2lkIE5ldHdvcmtCYWNr
ZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0
aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpCiB7CiAgICAgUmVmPE5ldHdvcmtCYWNr
ZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7CiAKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBwYXJhbWV0ZXJzOworICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnM7CiAg
ICAgbWVzc2FnZS0+Z2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgicGFyYW1zIiksIHBhcmFtZXRlcnMp
OwogCiAgICAgaWYgKG1ldGhvZCA9PSAibG9hZFJlc291cmNlIikKQEAgLTQxOSw3ICs0MTksNyBA
QCBjbGFzcyBOZXR3b3JrRXJyb3I7CiAKIAogbmFtZXNwYWNlIE5ldHdvcmsgewotY2xhc3MgTmV0
d29ya0Vycm9yIDogcHVibGljIEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0QmFzZSB7CitjbGFz
cyBOZXR3b3JrRXJyb3IgOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7CiBwdWJsaWM6CiAgICAg
ZW51bSB7CiAgICAgICAgIE5vRmllbGRzU2V0ID0gMCwKQEAgLTQzMSwxNCArNDMxLDE0IEBAIHB1
YmxpYzoKICAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICAgY2xhc3MgQnVpbGRlciB7CiAgICAg
cHJpdmF0ZToKLSAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CisgICAg
ICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG1fcmVzdWx0OwogCiAgICAgICAgIHRlbXBsYXRlPGlu
dCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgIHsKICAg
ICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4q
Pih0aGlzKTsKICAgICAgICAgfQogCi0gICAgICAgIEJ1aWxkZXIoUmVmPC8qTmV0d29ya0Vycm9y
Ki9JbnNwZWN0b3JPYmplY3Q+JiYgb2JqZWN0KQorICAgICAgICBCdWlsZGVyKFJlZjwvKk5ldHdv
cmtFcnJvciovSlNPTjo6T2JqZWN0PiYmIG9iamVjdCkKICAgICAgICAgICAgIDogbV9yZXN1bHQo
V1RGTW92ZShvYmplY3QpKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChT
VEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsK
QEAgLTQ2Myw5ICs0NjMsOSBAQCBwdWJsaWM6CiAgICAgICAgIFJlZjxOZXR3b3JrRXJyb3I+IHJl
bGVhc2UoKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBB
bGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwotICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoc2l6ZW9mKE5ldHdvcmtFcnJvcikgPT0gc2l6ZW9mKEluc3BlY3Rvck9iamVjdCksIGNh
bm5vdF9jYXN0KTsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihOZXR3b3JrRXJy
b3IpID09IHNpemVvZihKU09OOjpPYmplY3QpLCBjYW5ub3RfY2FzdCk7CiAKLSAgICAgICAgICAg
IFJlZjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7
CisgICAgICAgICAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNl
Tm9uTnVsbCgpOwogICAgICAgICAgICAgcmV0dXJuIFdURk1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8
UmVmPE5ldHdvcmtFcnJvcj4qPigmcmVzdWx0KSk7CiAgICAgICAgIH0KICAgICB9OwpAQCAtNDc5
LDcgKzQ3OSw3IEBAIHB1YmxpYzoKICAgICAgKi8KICAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxk
c1NldD4gY3JlYXRlKCkKICAgICB7Ci0gICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0
PihJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpKTsKKyAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9G
aWVsZHNTZXQ+KEpTT046Ok9iamVjdDo6Y3JlYXRlKCkpOwogICAgIH0KIH07CiAKZGlmZiAtLWdp
dCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBjMzIzMzJmNjNmZS4u
MDg0ODUzMWU2ZjAgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAxNy0xMS0wMyAgQ2FybG9zIEdhcmNpYSBDYW1wb3Mg
IDxjZ2FyY2lhQGlnYWxpYS5jb20+CisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogdXNlIEpTT046
OntBcnJheSxPYmplY3QsVmFsdWV9IGluc3RlYWQgb2YgSW5zcGVjdG9ye0FycmF5LE9iamVjdCxW
YWx1ZX0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3
MzYxOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVw
ZGF0ZSBJbnNwZWN0b3JWYWx1ZSB1bml0IHRlc3RzIHRvIHVzZSBKU09OIG5hbWVzcGFjZSBhbmQg
YWRkIG1vcmUgYmFzaWMgdGVzdHMgdG8gY292ZXIgYWxsIHRoZSBBUEkuCisKKyAgICAgICAgKiBU
ZXN0V2ViS2l0QVBJL1BsYXRmb3JtR1RLLmNtYWtlOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkv
VGVzdHMvSmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWUuY3BwOgorICAgICAgICAoVGVzdFdl
YktpdEFQSTo6VEVTVCk6CisKIDIwMTctMTEtMDIgIENocmlzdG9waGVyIFJlaWQgIDxjaHJpcy5y
ZWlkQHNvbnkuY29tPgogCiAgICAgICAgIEFkZCBhIEZpbGVTeXN0ZW0gbmFtZXNwYWNlIHRvIEZp
bGVTeXN0ZW0uY3BwCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1BsYXRmb3JtR1RL
LmNtYWtlIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9QbGF0Zm9ybUdUSy5jbWFrZQppbmRleCA2NGRh
MTAxZjQ2YS4uNDNjNmI0M2ViYzQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvUGxh
dGZvcm1HVEsuY21ha2UKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9QbGF0Zm9ybUdUSy5jbWFr
ZQpAQCAtMTYyLDYgKzE2MiwyMCBAQCBsaXN0KEFQUEVORCBUZXN0V1RGX1NPVVJDRVMKICAgICAk
e1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XVEYvZ2xpYi9Xb3JrUXVldWVHTGliLmNwcAogKQog
CithZGRfZXhlY3V0YWJsZShUZXN0SmF2YVNjcmlwdENvcmUKKyAgICAke3Rlc3RfbWFpbl9TT1VS
Q0VTfQorICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzQ29udHJvbGxlci5jcHAKKyAgICAk
e1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9KYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JWYWx1ZS5j
cHAKKykKKwordGFyZ2V0X2xpbmtfbGlicmFyaWVzKFRlc3RKYXZhU2NyaXB0Q29yZSAke1Rlc3RK
YXZhU2NyaXB0Q29yZV9MSUJSQVJJRVN9KQorYWRkX2RlcGVuZGVuY2llcyhUZXN0SmF2YVNjcmlw
dENvcmUgJHtGb3J3YXJkaW5nSGVhZGVyc0ZvclRlc3RXZWJLaXRBUElfTkFNRX0gJHtGb3J3YXJk
aW5nTmV0d29ya0hlYWRlcnNGb3JUZXN0V2ViS2l0QVBJX05BTUV9KQorYWRkX3Rlc3QoVGVzdEph
dmFTY3JpcHRDb3JlICR7VEVTVFdFQktJVEFQSV9SVU5USU1FX09VVFBVVF9ESVJFQ1RPUll9L0ph
dmFTY3JpcHRDb3JlL1Rlc3RKYXZhU2NyaXB0Q29yZSkKK3NldF90ZXN0c19wcm9wZXJ0aWVzKFRl
c3RKYXZhU2NyaXB0Q29yZSBQUk9QRVJUSUVTIFRJTUVPVVQgNjApCitzZXRfdGFyZ2V0X3Byb3Bl
cnRpZXMoVGVzdEphdmFTY3JpcHRDb3JlIFBST1BFUlRJRVMKKyAgICBSVU5USU1FX09VVFBVVF9E
SVJFQ1RPUlkgJHtURVNUV0VCS0lUQVBJX1JVTlRJTUVfT1VUUFVUX0RJUkVDVE9SWX0vSmF2YVNj
cmlwdENvcmUvCispCisKIGlmIChDT01QSUxFUl9JU19HQ0NfT1JfQ0xBTkcpCiAgICAgV0VCS0lU
X0FERF9UQVJHRVRfQ1hYX0ZMQUdTKFRlc3RXZWJLaXQgLVduby1zaWduLWNvbXBhcmUKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtV25vLXVuZGVmCkBAIC0xNzAs
NCArMTg0LDggQEAgaWYgKENPTVBJTEVSX0lTX0dDQ19PUl9DTEFORykKICAgICBXRUJLSVRfQURE
X1RBUkdFVF9DWFhfRkxBR1MoVGVzdFdlYkNvcmUgLVduby1zaWduLWNvbXBhcmUKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLVduby11bmRlZgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtV25vLXVudXNlZC1wYXJhbWV0ZXIp
CisKKyAgICBXRUJLSVRfQUREX1RBUkdFVF9DWFhfRkxBR1MoVGVzdEphdmFTY3JpcHRDb3JlIC1X
bm8tc2lnbi1jb21wYXJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAtV25vLXVuZGVmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAtV25vLXVudXNlZC1wYXJhbWV0ZXIpCiBlbmRpZiAoKQpkaWZmIC0t
Z2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9KYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JW
YWx1ZS5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL0phdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvclZhbHVlLmNwcAppbmRleCAwZTc3OTQ2NGFiZC4uYjM0M2NhNjhhODAgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvSmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yVmFsdWUu
Y3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvSmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yVmFsdWUuY3BwCkBAIC0yNiwxNjAgKzI2LDY2NSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
CiAjaW5jbHVkZSAiVGVzdC5oIgorI2luY2x1ZGUgIldURlN0cmluZ1V0aWxpdGllcy5oIgogI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclZhbHVlcy5oPgogCiB1c2luZyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yOwogCiBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CiAKLVRFU1QoSW5zcGVj
dG9yVmFsdWUsIE1lbW9yeUNvc3ROdWxsKQorVEVTVChJbnNwZWN0b3JWYWx1ZSwgQ29uc3RydWN0
KQogewotICAgIFJlZjxJbnNwZWN0b3JWYWx1ZT4gdmFsdWUgPSBJbnNwZWN0b3JWYWx1ZTo6bnVs
bCgpOwotICAgIHNpemVfdCBtZW1vcnlDb3N0ID0gdmFsdWUtPm1lbW9yeUNvc3QoKTsKLSAgICBF
WFBFQ1RfR1QobWVtb3J5Q29zdCwgMFUpOwotICAgIEVYUEVDVF9MRShtZW1vcnlDb3N0LCA4VSk7
Ci19CisgICAgeworICAgICAgICBSZWY8SlNPTjo6VmFsdWU+IHZhbHVlID0gSlNPTjo6VmFsdWU6
Om51bGwoKTsKKyAgICAgICAgRVhQRUNUX1RSVUUodmFsdWUtPnR5cGUoKSA9PSBKU09OOjpWYWx1
ZTo6VHlwZTo6TnVsbCk7CisgICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlLT5pc051bGwoKSk7Cisg
ICAgfQogCi1URVNUKEluc3BlY3RvclZhbHVlLCBNZW1vcnlDb3N0Qm9vbGVhbikKLXsKLSAgICBS
ZWY8SW5zcGVjdG9yVmFsdWU+IHZhbHVlID0gSW5zcGVjdG9yVmFsdWU6OmNyZWF0ZSh0cnVlKTsK
LSAgICBzaXplX3QgbWVtb3J5Q29zdCA9IHZhbHVlLT5tZW1vcnlDb3N0KCk7Ci0gICAgRVhQRUNU
X0dUKG1lbW9yeUNvc3QsIDBVKTsKLSAgICBFWFBFQ1RfTEUobWVtb3J5Q29zdCwgOFUpOwotfQor
ICAgIHsKKyAgICAgICAgUmVmPEpTT046OlZhbHVlPiB2YWx1ZSA9IEpTT046OlZhbHVlOjpjcmVh
dGUodHJ1ZSk7CisgICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlLT50eXBlKCkgPT0gSlNPTjo6VmFs
dWU6OlR5cGU6OkJvb2xlYW4pOworICAgICAgICBib29sIGJvb2xlYW5WYWx1ZTsKKyAgICAgICAg
RVhQRUNUX1RSVUUodmFsdWUtPmFzQm9vbGVhbihib29sZWFuVmFsdWUpKTsKKyAgICAgICAgRVhQ
RUNUX1RSVUUoYm9vbGVhblZhbHVlKTsKIAotVEVTVChJbnNwZWN0b3JWYWx1ZSwgTWVtb3J5Q29z
dERvdWJsZSkKLXsKLSAgICBSZWY8SW5zcGVjdG9yVmFsdWU+IHZhbHVlID0gSW5zcGVjdG9yVmFs
dWU6OmNyZWF0ZSgxLjApOwotICAgIHNpemVfdCBtZW1vcnlDb3N0ID0gdmFsdWUtPm1lbW9yeUNv
c3QoKTsKLSAgICBFWFBFQ1RfR1QobWVtb3J5Q29zdCwgMFUpOwotICAgIEVYUEVDVF9MRShtZW1v
cnlDb3N0LCA4VSk7Ci19CisgICAgICAgIHZhbHVlID0gSlNPTjo6VmFsdWU6OmNyZWF0ZShmYWxz
ZSk7CisgICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlLT50eXBlKCkgPT0gSlNPTjo6VmFsdWU6OlR5
cGU6OkJvb2xlYW4pOworICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+YXNCb29sZWFuKGJvb2xl
YW5WYWx1ZSkpOworICAgICAgICBFWFBFQ1RfRkFMU0UoYm9vbGVhblZhbHVlKTsKKyAgICB9CiAK
LVRFU1QoSW5zcGVjdG9yVmFsdWUsIE1lbW9yeUNvc3RJbnRlZ2VyKQotewotICAgIFJlZjxJbnNw
ZWN0b3JWYWx1ZT4gdmFsdWUgPSBJbnNwZWN0b3JWYWx1ZTo6Y3JlYXRlKDEpOwotICAgIHNpemVf
dCBtZW1vcnlDb3N0ID0gdmFsdWUtPm1lbW9yeUNvc3QoKTsKLSAgICBFWFBFQ1RfR1QobWVtb3J5
Q29zdCwgMFUpOwotICAgIEVYUEVDVF9MRShtZW1vcnlDb3N0LCA4VSk7Ci19CisgICAgeworICAg
ICAgICBSZWY8SlNPTjo6VmFsdWU+IHZhbHVlID0gSlNPTjo6VmFsdWU6OmNyZWF0ZSgxKTsKKyAg
ICAgICAgRVhQRUNUX1RSVUUodmFsdWUtPnR5cGUoKSA9PSBKU09OOjpWYWx1ZTo6VHlwZTo6SW50
ZWdlcik7CisgICAgICAgIGludCBpbnRlZ2VyVmFsdWU7CisgICAgICAgIEVYUEVDVF9UUlVFKHZh
bHVlLT5hc0ludGVnZXIoaW50ZWdlclZhbHVlKSk7CisgICAgICAgIEVYUEVDVF9FUShpbnRlZ2Vy
VmFsdWUsIDEpOwogCi1URVNUKEluc3BlY3RvclZhbHVlLCBNZW1vcnlDb3N0U3RyaW5nKQotewot
ICAgIFJlZjxJbnNwZWN0b3JWYWx1ZT4gdmFsdWUgPSBJbnNwZWN0b3JWYWx1ZTo6Y3JlYXRlKCJ0
ZXN0Iik7Ci0gICAgc2l6ZV90IG1lbW9yeUNvc3QgPSB2YWx1ZS0+bWVtb3J5Q29zdCgpOwotICAg
IEVYUEVDVF9HVChtZW1vcnlDb3N0LCAwVSk7Ci0gICAgRVhQRUNUX0xFKG1lbW9yeUNvc3QsIDM2
VSk7Ci19CisgICAgICAgIC8vIERvdWJsZXMgY2FuIGJlIGdldCBhcyBpbnRlZ2VycywgYnV0IG5v
dCB0aGUgb3RoZXIgd2F5IGFyb3VuZC4KKyAgICAgICAgZmxvYXQgZmxvYXRWYWx1ZTsKKyAgICAg
ICAgRVhQRUNUX0ZBTFNFKHZhbHVlLT5hc0RvdWJsZShmbG9hdFZhbHVlKSk7CiAKLVRFU1QoSW5z
cGVjdG9yVmFsdWUsIE1lbW9yeUNvc3RTdHJpbmdFbXB0eSkKLXsKLSAgICBSZWY8SW5zcGVjdG9y
VmFsdWU+IHZhbHVlID0gSW5zcGVjdG9yVmFsdWU6OmNyZWF0ZSgiIik7Ci0gICAgc2l6ZV90IG1l
bW9yeUNvc3QgPSB2YWx1ZS0+bWVtb3J5Q29zdCgpOwotICAgIEVYUEVDVF9HVChtZW1vcnlDb3N0
LCAwVSk7Ci0gICAgRVhQRUNUX0xFKG1lbW9yeUNvc3QsIDMyVSk7Ci19CisgICAgICAgIHZhbHVl
ID0gSlNPTjo6VmFsdWU6OmNyZWF0ZShzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpKTsK
KyAgICAgICAgRVhQRUNUX1RSVUUodmFsdWUtPmFzSW50ZWdlcihpbnRlZ2VyVmFsdWUpKTsKKyAg
ICAgICAgRVhQRUNUX0VRKGludGVnZXJWYWx1ZSwgc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+Ojpt
YXgoKSk7CisgICAgICAgIHVuc2lnbmVkIHVuc2lnbmVkVmFsdWU7CisgICAgICAgIEVYUEVDVF9U
UlVFKHZhbHVlLT5hc0ludGVnZXIodW5zaWduZWRWYWx1ZSkpOworICAgICAgICBsb25nIGxvbmdW
YWx1ZTsKKyAgICAgICAgRVhQRUNUX1RSVUUodmFsdWUtPmFzSW50ZWdlcihsb25nVmFsdWUpKTsK
KyAgICAgICAgbG9uZyBsb25nIGxvbmdMb25nVmFsdWU7CisgICAgICAgIEVYUEVDVF9UUlVFKHZh
bHVlLT5hc0ludGVnZXIobG9uZ0xvbmdWYWx1ZSkpOworICAgICAgICB1bnNpZ25lZCBsb25nIHVu
c2lnbmVkTG9uZ1ZhbHVlOworICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+YXNJbnRlZ2VyKHVu
c2lnbmVkTG9uZ1ZhbHVlKSk7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyB1bnNpZ25lZExv
bmdMb25nVmFsdWU7CisgICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlLT5hc0ludGVnZXIodW5zaWdu
ZWRMb25nTG9uZ1ZhbHVlKSk7CisgICAgfQogCi1URVNUKEluc3BlY3RvclZhbHVlLCBNZW1vcnlD
b3N0U3RyaW5nTnVsbCkKLXsKLSAgICBSZWY8SW5zcGVjdG9yVmFsdWU+IHZhbHVlID0gSW5zcGVj
dG9yVmFsdWU6OmNyZWF0ZShTdHJpbmcoKSk7Ci0gICAgc2l6ZV90IG1lbW9yeUNvc3QgPSB2YWx1
ZS0+bWVtb3J5Q29zdCgpOwotICAgIEVYUEVDVF9HVChtZW1vcnlDb3N0LCAwVSk7Ci0gICAgRVhQ
RUNUX0xFKG1lbW9yeUNvc3QsIDhVKTsKLX0KKyAgICB7CisgICAgICAgIFJlZjxKU09OOjpWYWx1
ZT4gdmFsdWUgPSBKU09OOjpWYWx1ZTo6Y3JlYXRlKDEuNSk7CisgICAgICAgIEVYUEVDVF9UUlVF
KHZhbHVlLT50eXBlKCkgPT0gSlNPTjo6VmFsdWU6OlR5cGU6OkRvdWJsZSk7CisgICAgICAgIGRv
dWJsZSBkb3VibGVWYWx1ZTsKKyAgICAgICAgRVhQRUNUX1RSVUUodmFsdWUtPmFzRG91YmxlKGRv
dWJsZVZhbHVlKSk7CisgICAgICAgIEVYUEVDVF9FUShkb3VibGVWYWx1ZSwgMS41KTsKIAotVEVT
VChJbnNwZWN0b3JWYWx1ZSwgTWVtb3J5Q29zdFN0cmluZ0dyb3dpbmcpCi17Ci0gICAgUmVmPElu
c3BlY3RvclZhbHVlPiB2YWx1ZUEgPSBJbnNwZWN0b3JWYWx1ZTo6Y3JlYXRlKCJ0Iik7Ci0gICAg
UmVmPEluc3BlY3RvclZhbHVlPiB2YWx1ZUIgPSBJbnNwZWN0b3JWYWx1ZTo6Y3JlYXRlKCJ0ZSIp
OwotICAgIFJlZjxJbnNwZWN0b3JWYWx1ZT4gdmFsdWVDID0gSW5zcGVjdG9yVmFsdWU6OmNyZWF0
ZSgidGVzIik7Ci0gICAgUmVmPEluc3BlY3RvclZhbHVlPiB2YWx1ZUQgPSBJbnNwZWN0b3JWYWx1
ZTo6Y3JlYXRlKCJ0ZXN0Iik7Ci0gICAgRVhQRUNUX0xUKHZhbHVlQS0+bWVtb3J5Q29zdCgpLCB2
YWx1ZUItPm1lbW9yeUNvc3QoKSk7Ci0gICAgRVhQRUNUX0xUKHZhbHVlQi0+bWVtb3J5Q29zdCgp
LCB2YWx1ZUMtPm1lbW9yeUNvc3QoKSk7Ci0gICAgRVhQRUNUX0xUKHZhbHVlQy0+bWVtb3J5Q29z
dCgpLCB2YWx1ZUQtPm1lbW9yeUNvc3QoKSk7Ci19CisgICAgICAgIGZsb2F0IGZsb2F0VmFsdWU7
CisgICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlLT5hc0RvdWJsZShmbG9hdFZhbHVlKSk7CiAKLVRF
U1QoSW5zcGVjdG9yVmFsdWUsIE1lbW9yeUNvc3RTdHJpbmdVbmljb2RlKQotewotICAgIFJlZjxJ
bnNwZWN0b3JWYWx1ZT4gdmFsdWVBID0gSW5zcGVjdG9yVmFsdWU6OmNyZWF0ZSgidCIpOwotICAg
IFJlZjxJbnNwZWN0b3JWYWx1ZT4gdmFsdWVCID0gSW5zcGVjdG9yVmFsdWU6OmNyZWF0ZSgi8J+Y
gCIpOwotICAgIEVYUEVDVF9MVCh2YWx1ZUEtPm1lbW9yeUNvc3QoKSwgdmFsdWVCLT5tZW1vcnlD
b3N0KCkpOwotfQorICAgICAgICBpbnQgaW50ZWdlclZhbHVlOworICAgICAgICBFWFBFQ1RfVFJV
RSh2YWx1ZS0+YXNJbnRlZ2VyKGludGVnZXJWYWx1ZSkpOworICAgICAgICBFWFBFQ1RfRVEoaW50
ZWdlclZhbHVlLCBzdGF0aWNfY2FzdDxpbnQ+KDEuNSkpOwogCi1URVNUKEluc3BlY3RvclZhbHVl
LCBNZW1vcnlDb3N0T2JqZWN0KQotewotICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlID0g
SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKLSAgICB2YWx1ZS0+c2V0VmFsdWUoInRlc3QiLCBJ
bnNwZWN0b3JWYWx1ZTo6bnVsbCgpKTsKLSAgICBzaXplX3QgbWVtb3J5Q29zdCA9IHZhbHVlLT5t
ZW1vcnlDb3N0KCk7Ci0gICAgRVhQRUNUX0dUKG1lbW9yeUNvc3QsIDBVKTsKLSAgICBFWFBFQ1Rf
TEUobWVtb3J5Q29zdCwgMjBVKTsKKyAgICAgICAgdW5zaWduZWQgdW5zaWduZWRWYWx1ZTsKKyAg
ICAgICAgRVhQRUNUX1RSVUUodmFsdWUtPmFzSW50ZWdlcih1bnNpZ25lZFZhbHVlKSk7CisgICAg
ICAgIGxvbmcgbG9uZ1ZhbHVlOworICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+YXNJbnRlZ2Vy
KGxvbmdWYWx1ZSkpOworICAgICAgICBsb25nIGxvbmcgbG9uZ0xvbmdWYWx1ZTsKKyAgICAgICAg
RVhQRUNUX1RSVUUodmFsdWUtPmFzSW50ZWdlcihsb25nTG9uZ1ZhbHVlKSk7CisgICAgICAgIHVu
c2lnbmVkIGxvbmcgdW5zaWduZWRMb25nVmFsdWU7CisgICAgICAgIEVYUEVDVF9UUlVFKHZhbHVl
LT5hc0ludGVnZXIodW5zaWduZWRMb25nVmFsdWUpKTsKKyAgICAgICAgdW5zaWduZWQgbG9uZyBs
b25nIHVuc2lnbmVkTG9uZ0xvbmdWYWx1ZTsKKyAgICAgICAgRVhQRUNUX1RSVUUodmFsdWUtPmFz
SW50ZWdlcih1bnNpZ25lZExvbmdMb25nVmFsdWUpKTsKKyAgICB9CisKKyAgICB7CisgICAgICAg
IFJlZjxKU09OOjpWYWx1ZT4gdmFsdWUgPSBKU09OOjpWYWx1ZTo6Y3JlYXRlKCJ3ZWJraXQiKTsK
KyAgICAgICAgRVhQRUNUX1RSVUUodmFsdWUtPnR5cGUoKSA9PSBKU09OOjpWYWx1ZTo6VHlwZTo6
U3RyaW5nKTsKKyAgICAgICAgU3RyaW5nIHN0cmluZ1ZhbHVlOworICAgICAgICBFWFBFQ1RfVFJV
RSh2YWx1ZS0+YXNTdHJpbmcoc3RyaW5nVmFsdWUpKTsKKyAgICAgICAgRVhQRUNUX0VRKHN0cmlu
Z1ZhbHVlLCAid2Via2l0Iik7CisKKyAgICAgICAgU3RyaW5nIG51bGxTdHJpbmc7CisgICAgICAg
IHZhbHVlID0gSlNPTjo6VmFsdWU6OmNyZWF0ZShudWxsU3RyaW5nKTsKKyAgICAgICAgRVhQRUNU
X1RSVUUodmFsdWUtPmFzU3RyaW5nKHN0cmluZ1ZhbHVlKSk7CisgICAgICAgIEVYUEVDVF9UUlVF
KHN0cmluZ1ZhbHVlLmlzTnVsbCgpKTsKKworICAgICAgICB2YWx1ZSA9IEpTT046OlZhbHVlOjpj
cmVhdGUoZW1wdHlTdHJpbmcoKSk7CisgICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlLT5hc1N0cmlu
ZyhzdHJpbmdWYWx1ZSkpOworICAgICAgICBFWFBFQ1RfRkFMU0Uoc3RyaW5nVmFsdWUuaXNOdWxs
KCkpOworICAgICAgICBFWFBFQ1RfVFJVRShzdHJpbmdWYWx1ZS5pc0VtcHR5KCkpOworICAgIH0K
KworICAgIHsKKyAgICAgICAgUmVmPEpTT046OkFycmF5PiBhcnJheSA9IEpTT046OkFycmF5Ojpj
cmVhdGUoKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoYXJyYXktPnR5cGUoKSA9PSBKU09OOjpWYWx1
ZTo6VHlwZTo6QXJyYXkpOworICAgICAgICBFWFBFQ1RfRVEoYXJyYXktPmxlbmd0aCgpLCAwVSk7
CisgICAgfQorCisgICAgeworICAgICAgICBSZWY8SlNPTjo6T2JqZWN0PiBvYmplY3QgPSBKU09O
OjpPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBFWFBFQ1RfVFJVRShvYmplY3QtPnR5cGUoKSA9
PSBKU09OOjpWYWx1ZTo6VHlwZTo6T2JqZWN0KTsKKyAgICAgICAgRVhQRUNUX0VRKG9iamVjdC0+
c2l6ZSgpLCAwKTsKKyAgICB9CiB9CiAKLVRFU1QoSW5zcGVjdG9yVmFsdWUsIE1lbW9yeUNvc3RP
YmplY3RFbXB0eSkKK1RFU1QoSW5zcGVjdG9yQXJyYXksIEJhc2ljKQogewotICAgIFJlZjxJbnNw
ZWN0b3JPYmplY3Q+IHZhbHVlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKLSAgICBzaXpl
X3QgbWVtb3J5Q29zdCA9IHZhbHVlLT5tZW1vcnlDb3N0KCk7Ci0gICAgRVhQRUNUX0dUKG1lbW9y
eUNvc3QsIDBVKTsKLSAgICBFWFBFQ1RfTEUobWVtb3J5Q29zdCwgOFUpOworICAgIFJlZjxKU09O
OjpBcnJheT4gYXJyYXkgPSBKU09OOjpBcnJheTo6Y3JlYXRlKCk7CisKKyAgICBhcnJheS0+cHVz
aFZhbHVlKEpTT046OlZhbHVlOjpudWxsKCkpOworICAgIEVYUEVDVF9FUShhcnJheS0+bGVuZ3Ro
KCksIDFVKTsKKyAgICBhdXRvIHZhbHVlID0gYXJyYXktPmdldCgwKTsKKyAgICBFWFBFQ1RfVFJV
RSh2YWx1ZS0+aXNOdWxsKCkpOworCisgICAgYXJyYXktPnB1c2hCb29sZWFuKHRydWUpOworICAg
IEVYUEVDVF9FUShhcnJheS0+bGVuZ3RoKCksIDJVKTsKKyAgICB2YWx1ZSA9IGFycmF5LT5nZXQo
MSk7CisgICAgRVhQRUNUX1RSVUUodmFsdWUtPnR5cGUoKSA9PSBKU09OOjpWYWx1ZTo6VHlwZTo6
Qm9vbGVhbik7CisgICAgYm9vbCBib29sZWFuVmFsdWU7CisgICAgRVhQRUNUX1RSVUUodmFsdWUt
PmFzQm9vbGVhbihib29sZWFuVmFsdWUpKTsKKyAgICBFWFBFQ1RfRVEoYm9vbGVhblZhbHVlLCB0
cnVlKTsKKworICAgIGFycmF5LT5wdXNoSW50ZWdlcigxKTsKKyAgICBFWFBFQ1RfRVEoYXJyYXkt
Pmxlbmd0aCgpLCAzVSk7CisgICAgdmFsdWUgPSBhcnJheS0+Z2V0KDIpOworICAgIEVYUEVDVF9U
UlVFKHZhbHVlLT50eXBlKCkgPT0gSlNPTjo6VmFsdWU6OlR5cGU6OkludGVnZXIpOworICAgIGlu
dCBpbnRlZ2VyVmFsdWU7CisgICAgRVhQRUNUX1RSVUUodmFsdWUtPmFzSW50ZWdlcihpbnRlZ2Vy
VmFsdWUpKTsKKyAgICBFWFBFQ1RfRVEoaW50ZWdlclZhbHVlLCAxKTsKKworICAgIGFycmF5LT5w
dXNoRG91YmxlKDEuNSk7CisgICAgRVhQRUNUX0VRKGFycmF5LT5sZW5ndGgoKSwgNFUpOworICAg
IHZhbHVlID0gYXJyYXktPmdldCgzKTsKKyAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+dHlwZSgpID09
IEpTT046OlZhbHVlOjpUeXBlOjpEb3VibGUpOworICAgIGRvdWJsZSBkb3VibGVWYWx1ZTsKKyAg
ICBFWFBFQ1RfVFJVRSh2YWx1ZS0+YXNEb3VibGUoZG91YmxlVmFsdWUpKTsKKyAgICBFWFBFQ1Rf
RVEoZG91YmxlVmFsdWUsIDEuNSk7CisKKyAgICBhcnJheS0+cHVzaFN0cmluZygid2Via2l0Iik7
CisgICAgRVhQRUNUX0VRKGFycmF5LT5sZW5ndGgoKSwgNVUpOworICAgIHZhbHVlID0gYXJyYXkt
PmdldCg0KTsKKyAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+dHlwZSgpID09IEpTT046OlZhbHVlOjpU
eXBlOjpTdHJpbmcpOworICAgIFN0cmluZyBzdHJpbmdWYWx1ZTsKKyAgICBFWFBFQ1RfVFJVRSh2
YWx1ZS0+YXNTdHJpbmcoc3RyaW5nVmFsdWUpKTsKKyAgICBFWFBFQ1RfRVEoc3RyaW5nVmFsdWUs
ICJ3ZWJraXQiKTsKKworICAgIGFycmF5LT5wdXNoT2JqZWN0KEpTT046Ok9iamVjdDo6Y3JlYXRl
KCkpOworICAgIEVYUEVDVF9FUShhcnJheS0+bGVuZ3RoKCksIDZVKTsKKyAgICB2YWx1ZSA9IGFy
cmF5LT5nZXQoNSk7CisgICAgRVhQRUNUX1RSVUUodmFsdWUtPnR5cGUoKSA9PSBKU09OOjpWYWx1
ZTo6VHlwZTo6T2JqZWN0KTsKKyAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBvYmplY3RWYWx1ZTsK
KyAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+YXNPYmplY3Qob2JqZWN0VmFsdWUpKTsKKyAgICBFWFBF
Q1RfRVEob2JqZWN0VmFsdWUtPnNpemUoKSwgMCk7CisKKyAgICBhcnJheS0+cHVzaEFycmF5KEpT
T046OkFycmF5OjpjcmVhdGUoKSk7CisgICAgRVhQRUNUX0VRKGFycmF5LT5sZW5ndGgoKSwgN1Up
OworICAgIHZhbHVlID0gYXJyYXktPmdldCg2KTsKKyAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+dHlw
ZSgpID09IEpTT046OlZhbHVlOjpUeXBlOjpBcnJheSk7CisgICAgUmVmUHRyPEpTT046OkFycmF5
PiBhcnJheVZhbHVlOworICAgIEVYUEVDVF9UUlVFKHZhbHVlLT5hc0FycmF5KGFycmF5VmFsdWUp
KTsKKyAgICBFWFBFQ1RfRVEoYXJyYXlWYWx1ZS0+bGVuZ3RoKCksIDBVKTsKKworICAgIGF1dG8g
aXQgPSBhcnJheS0+YmVnaW4oKTsKKyAgICB2YWx1ZSA9IGl0LT5nZXQoKTsKKyAgICBFWFBFQ1Rf
VFJVRSh2YWx1ZS0+dHlwZSgpID09IEpTT046OlZhbHVlOjpUeXBlOjpOdWxsKTsKKyAgICArK2l0
OworICAgIEVYUEVDVF9GQUxTRShpdCA9PSBhcnJheS0+ZW5kKCkpOworCisgICAgdmFsdWUgPSBp
dC0+Z2V0KCk7CisgICAgRVhQRUNUX1RSVUUodmFsdWUtPnR5cGUoKSA9PSBKU09OOjpWYWx1ZTo6
VHlwZTo6Qm9vbGVhbik7CisgICAgKytpdDsKKyAgICBFWFBFQ1RfRkFMU0UoaXQgPT0gYXJyYXkt
PmVuZCgpKTsKKworICAgIHZhbHVlID0gaXQtPmdldCgpOworICAgIEVYUEVDVF9UUlVFKHZhbHVl
LT50eXBlKCkgPT0gSlNPTjo6VmFsdWU6OlR5cGU6OkludGVnZXIpOworICAgICsraXQ7CisgICAg
RVhQRUNUX0ZBTFNFKGl0ID09IGFycmF5LT5lbmQoKSk7CisKKyAgICB2YWx1ZSA9IGl0LT5nZXQo
KTsKKyAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+dHlwZSgpID09IEpTT046OlZhbHVlOjpUeXBlOjpE
b3VibGUpOworICAgICsraXQ7CisgICAgRVhQRUNUX0ZBTFNFKGl0ID09IGFycmF5LT5lbmQoKSk7
CisKKyAgICB2YWx1ZSA9IGl0LT5nZXQoKTsKKyAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+dHlwZSgp
ID09IEpTT046OlZhbHVlOjpUeXBlOjpTdHJpbmcpOworICAgICsraXQ7CisgICAgRVhQRUNUX0ZB
TFNFKGl0ID09IGFycmF5LT5lbmQoKSk7CisKKyAgICB2YWx1ZSA9IGl0LT5nZXQoKTsKKyAgICBF
WFBFQ1RfVFJVRSh2YWx1ZS0+dHlwZSgpID09IEpTT046OlZhbHVlOjpUeXBlOjpPYmplY3QpOwor
ICAgICsraXQ7CisgICAgRVhQRUNUX0ZBTFNFKGl0ID09IGFycmF5LT5lbmQoKSk7CisKKyAgICB2
YWx1ZSA9IGl0LT5nZXQoKTsKKyAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+dHlwZSgpID09IEpTT046
OlZhbHVlOjpUeXBlOjpBcnJheSk7CisgICAgKytpdDsKKyAgICBFWFBFQ1RfVFJVRShpdCA9PSBh
cnJheS0+ZW5kKCkpOwogfQogCi1URVNUKEluc3BlY3RvclZhbHVlLCBNZW1vcnlDb3N0T2JqZWN0
R3Jvd2luZykKK1RFU1QoSW5zcGVjdG9yT2JqZWN0LCBCYXNpYykKIHsKLSAgICBSZWY8SW5zcGVj
dG9yT2JqZWN0PiB2YWx1ZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVmPEpT
T046Ok9iamVjdD4gb2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKworICAgIG9iamVj
dC0+c2V0VmFsdWUoIm51bGwiLCBKU09OOjpWYWx1ZTo6bnVsbCgpKTsKKyAgICBFWFBFQ1RfRVEo
b2JqZWN0LT5zaXplKCksIDEpOworICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gdmFsdWU7CisgICAg
RVhQRUNUX1RSVUUob2JqZWN0LT5nZXRWYWx1ZSgibnVsbCIsIHZhbHVlKSk7CisgICAgRVhQRUNU
X1RSVUUodmFsdWUtPmlzTnVsbCgpKTsKKworICAgIG9iamVjdC0+c2V0Qm9vbGVhbigiYm9vbGVh
biIsIHRydWUpOworICAgIEVYUEVDVF9FUShvYmplY3QtPnNpemUoKSwgMik7CisgICAgYm9vbCBi
b29sZWFuVmFsdWU7CisgICAgRVhQRUNUX1RSVUUob2JqZWN0LT5nZXRCb29sZWFuKCJib29sZWFu
IiwgYm9vbGVhblZhbHVlKSk7CisgICAgRVhQRUNUX0VRKGJvb2xlYW5WYWx1ZSwgdHJ1ZSk7CisK
KyAgICBvYmplY3QtPnNldEludGVnZXIoImludGVnZXIiLCAxKTsKKyAgICBFWFBFQ1RfRVEob2Jq
ZWN0LT5zaXplKCksIDMpOworICAgIGludCBpbnRlZ2VyVmFsdWU7CisgICAgRVhQRUNUX1RSVUUo
b2JqZWN0LT5nZXRJbnRlZ2VyKCJpbnRlZ2VyIiwgaW50ZWdlclZhbHVlKSk7CisgICAgRVhQRUNU
X0VRKGludGVnZXJWYWx1ZSwgMSk7CisKKyAgICBvYmplY3QtPnNldERvdWJsZSgiZG91YmxlIiwg
MS41KTsKKyAgICBFWFBFQ1RfRVEob2JqZWN0LT5zaXplKCksIDQpOworICAgIGRvdWJsZSBkb3Vi
bGVWYWx1ZTsKKyAgICBFWFBFQ1RfVFJVRShvYmplY3QtPmdldERvdWJsZSgiZG91YmxlIiwgZG91
YmxlVmFsdWUpKTsKKyAgICBFWFBFQ1RfRVEoZG91YmxlVmFsdWUsIDEuNSk7CisKKyAgICBvYmpl
Y3QtPnNldFN0cmluZygic3RyaW5nIiwgIndlYmtpdCIpOworICAgIEVYUEVDVF9FUShvYmplY3Qt
PnNpemUoKSwgNSk7CisgICAgU3RyaW5nIHN0cmluZ1ZhbHVlOworICAgIEVYUEVDVF9UUlVFKG9i
amVjdC0+Z2V0U3RyaW5nKCJzdHJpbmciLCBzdHJpbmdWYWx1ZSkpOworICAgIEVYUEVDVF9FUShz
dHJpbmdWYWx1ZSwgIndlYmtpdCIpOworCisgICAgb2JqZWN0LT5zZXRPYmplY3QoIm9iamVjdCIs
IEpTT046Ok9iamVjdDo6Y3JlYXRlKCkpOworICAgIEVYUEVDVF9FUShvYmplY3QtPnNpemUoKSwg
Nik7CisgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gb2JqZWN0VmFsdWU7CisgICAgRVhQRUNUX1RS
VUUob2JqZWN0LT5nZXRPYmplY3QoIm9iamVjdCIsIG9iamVjdFZhbHVlKSk7CisgICAgRVhQRUNU
X0VRKG9iamVjdFZhbHVlLT5zaXplKCksIDApOworCisgICAgb2JqZWN0LT5zZXRBcnJheSgiYXJy
YXkiLCBKU09OOjpBcnJheTo6Y3JlYXRlKCkpOworICAgIEVYUEVDVF9FUShvYmplY3QtPnNpemUo
KSwgNyk7CisgICAgUmVmUHRyPEpTT046OkFycmF5PiBhcnJheVZhbHVlOworICAgIEVYUEVDVF9U
UlVFKG9iamVjdC0+Z2V0QXJyYXkoImFycmF5IiwgYXJyYXlWYWx1ZSkpOworICAgIEVYUEVDVF9F
UShhcnJheVZhbHVlLT5sZW5ndGgoKSwgMFUpOworCisgICAgVmVjdG9yPGNvbnN0IGNoYXIqPiBr
ZXlzID0geyAibnVsbCIsICJib29sZWFuIiwgImludGVnZXIiLCAiZG91YmxlIiwgInN0cmluZyIs
ICJvYmplY3QiLCAiYXJyYXkiIH07CisgICAgYXV0byBlbmQgPSBvYmplY3QtPmVuZCgpOworICAg
IGZvciAoYXV0byBpdCA9IG9iamVjdC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAg
ICAgIGF1dG8gcG9zaXRpb24gPSBrZXlzLmZpbmQoaXQtPmtleSk7CisgICAgICAgIEVYUEVDVF9O
RShwb3NpdGlvbiwgbm90Rm91bmQpOworICAgICAgICBFWFBFQ1RfVFJVRShpdCA9PSBvYmplY3Qt
PmZpbmQoa2V5c1twb3NpdGlvbl0pKTsKKyAgICAgICAga2V5cy5yZW1vdmUocG9zaXRpb24pOwor
ICAgIH0KKyAgICBFWFBFQ1RfVFJVRShrZXlzLmlzRW1wdHkoKSk7CiAKLSAgICB2YWx1ZS0+c2V0
VmFsdWUoIjEiLCBJbnNwZWN0b3JWYWx1ZTo6bnVsbCgpKTsKLSAgICBzaXplX3QgbWVtb3J5Q29z
dDEgPSB2YWx1ZS0+bWVtb3J5Q29zdCgpOworICAgIG9iamVjdC0+cmVtb3ZlKCJudWxsIik7Cisg
ICAgRVhQRUNUX0VRKG9iamVjdC0+c2l6ZSgpLCA2KTsKKyAgICBFWFBFQ1RfVFJVRShvYmplY3Qt
PmZpbmQoIm51bGwiKSA9PSBvYmplY3QtPmVuZCgpKTsKIAotICAgIHZhbHVlLT5zZXRWYWx1ZSgi
MiIsIEluc3BlY3RvclZhbHVlOjpudWxsKCkpOwotICAgIHNpemVfdCBtZW1vcnlDb3N0MiA9IHZh
bHVlLT5tZW1vcnlDb3N0KCk7CisgICAgb2JqZWN0LT5yZW1vdmUoImJvb2xlYW4iKTsKKyAgICBF
WFBFQ1RfRVEob2JqZWN0LT5zaXplKCksIDUpOworICAgIEVYUEVDVF9UUlVFKG9iamVjdC0+Zmlu
ZCgiYm9vbGVhbiIpID09IG9iamVjdC0+ZW5kKCkpOwogCi0gICAgdmFsdWUtPnNldFZhbHVlKCIz
IiwgSW5zcGVjdG9yVmFsdWU6Om51bGwoKSk7Ci0gICAgc2l6ZV90IG1lbW9yeUNvc3QzID0gdmFs
dWUtPm1lbW9yeUNvc3QoKTsKKyAgICBvYmplY3QtPnJlbW92ZSgiaW50ZWdlciIpOworICAgIEVY
UEVDVF9FUShvYmplY3QtPnNpemUoKSwgNCk7CisgICAgRVhQRUNUX1RSVUUob2JqZWN0LT5maW5k
KCJpbnRlZ2VyIikgPT0gb2JqZWN0LT5lbmQoKSk7CiAKLSAgICB2YWx1ZS0+c2V0VmFsdWUoIjQi
LCBJbnNwZWN0b3JWYWx1ZTo6bnVsbCgpKTsKLSAgICBzaXplX3QgbWVtb3J5Q29zdDQgPSB2YWx1
ZS0+bWVtb3J5Q29zdCgpOworICAgIG9iamVjdC0+cmVtb3ZlKCJkb3VibGUiKTsKKyAgICBFWFBF
Q1RfRVEob2JqZWN0LT5zaXplKCksIDMpOworICAgIEVYUEVDVF9UUlVFKG9iamVjdC0+ZmluZCgi
ZG91YmxlIikgPT0gb2JqZWN0LT5lbmQoKSk7CiAKLSAgICBFWFBFQ1RfTFQobWVtb3J5Q29zdDEs
IG1lbW9yeUNvc3QyKTsKLSAgICBFWFBFQ1RfTFQobWVtb3J5Q29zdDIsIG1lbW9yeUNvc3QzKTsK
LSAgICBFWFBFQ1RfTFQobWVtb3J5Q29zdDMsIG1lbW9yeUNvc3Q0KTsKKyAgICBvYmplY3QtPnJl
bW92ZSgic3RyaW5nIik7CisgICAgRVhQRUNUX0VRKG9iamVjdC0+c2l6ZSgpLCAyKTsKKyAgICBF
WFBFQ1RfVFJVRShvYmplY3QtPmZpbmQoInN0cmluZyIpID09IG9iamVjdC0+ZW5kKCkpOworCisg
ICAgb2JqZWN0LT5yZW1vdmUoIm9iamVjdCIpOworICAgIEVYUEVDVF9FUShvYmplY3QtPnNpemUo
KSwgMSk7CisgICAgRVhQRUNUX1RSVUUob2JqZWN0LT5maW5kKCJvYmplY3QiKSA9PSBvYmplY3Qt
PmVuZCgpKTsKKworICAgIG9iamVjdC0+cmVtb3ZlKCJhcnJheSIpOworICAgIEVYUEVDVF9FUShv
YmplY3QtPnNpemUoKSwgMCk7CisgICAgRVhQRUNUX1RSVUUob2JqZWN0LT5maW5kKCJhcnJheSIp
ID09IG9iamVjdC0+ZW5kKCkpOwogfQogCi1URVNUKEluc3BlY3RvclZhbHVlLCBNZW1vcnlDb3N0
QXJyYXkpCitURVNUKEluc3BlY3RvclZhbHVlLCBUb0pTT05TdHJpbmcpCiB7Ci0gICAgUmVmPElu
c3BlY3RvckFycmF5PiB2YWx1ZSA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKLSAgICB2YWx1
ZS0+cHVzaFZhbHVlKEluc3BlY3RvclZhbHVlOjpudWxsKCkpOwotICAgIHNpemVfdCBtZW1vcnlD
b3N0ID0gdmFsdWUtPm1lbW9yeUNvc3QoKTsKLSAgICBFWFBFQ1RfR1QobWVtb3J5Q29zdCwgMFUp
OwotICAgIEVYUEVDVF9MRShtZW1vcnlDb3N0LCAxNlUpOworICAgIHsKKyAgICAgICAgUmVmPEpT
T046OlZhbHVlPiB2YWx1ZSA9IEpTT046OlZhbHVlOjpudWxsKCk7CisgICAgICAgIEVYUEVDVF9F
USh2YWx1ZS0+dG9KU09OU3RyaW5nKCksICJudWxsIik7CisgICAgfQorCisgICAgeworICAgICAg
ICBSZWY8SlNPTjo6VmFsdWU+IHZhbHVlID0gSlNPTjo6VmFsdWU6OmNyZWF0ZSh0cnVlKTsKKyAg
ICAgICAgRVhQRUNUX0VRKHZhbHVlLT50b0pTT05TdHJpbmcoKSwgInRydWUiKTsKKworICAgICAg
ICB2YWx1ZSA9IEpTT046OlZhbHVlOjpjcmVhdGUoZmFsc2UpOworICAgICAgICBFWFBFQ1RfRVEo
dmFsdWUtPnRvSlNPTlN0cmluZygpLCAiZmFsc2UiKTsKKyAgICB9CisKKyAgICB7CisgICAgICAg
IFJlZjxKU09OOjpWYWx1ZT4gdmFsdWUgPSBKU09OOjpWYWx1ZTo6Y3JlYXRlKDEpOworICAgICAg
ICBFWFBFQ1RfRVEodmFsdWUtPnRvSlNPTlN0cmluZygpLCAiMSIpOworICAgIH0KKworICAgIHsK
KyAgICAgICAgUmVmPEpTT046OlZhbHVlPiB2YWx1ZSA9IEpTT046OlZhbHVlOjpjcmVhdGUoMS41
KTsKKyAgICAgICAgRVhQRUNUX0VRKHZhbHVlLT50b0pTT05TdHJpbmcoKSwgIjEuNSIpOworICAg
IH0KKworICAgIHsKKyAgICAgICAgUmVmPEpTT046OlZhbHVlPiB2YWx1ZSA9IEpTT046OlZhbHVl
OjpjcmVhdGUoIndlYmtpdCIpOworICAgICAgICBFWFBFQ1RfRVEodmFsdWUtPnRvSlNPTlN0cmlu
ZygpLCAiXCJ3ZWJraXRcIiIpOworICAgIH0KKworICAgIHsKKyAgICAgICAgUmVmPEpTT046OkFy
cmF5PiBhcnJheSA9IEpTT046OkFycmF5OjpjcmVhdGUoKTsKKyAgICAgICAgRVhQRUNUX0VRKGFy
cmF5LT50b0pTT05TdHJpbmcoKSwgIltdIik7CisgICAgICAgIGFycmF5LT5wdXNoVmFsdWUoSlNP
Tjo6VmFsdWU6Om51bGwoKSk7CisgICAgICAgIEVYUEVDVF9FUShhcnJheS0+dG9KU09OU3RyaW5n
KCksICJbbnVsbF0iKTsKKyAgICAgICAgYXJyYXktPnB1c2hCb29sZWFuKHRydWUpOworICAgICAg
ICBhcnJheS0+cHVzaEJvb2xlYW4oZmFsc2UpOworICAgICAgICBFWFBFQ1RfRVEoYXJyYXktPnRv
SlNPTlN0cmluZygpLCAiW251bGwsdHJ1ZSxmYWxzZV0iKTsKKyAgICAgICAgYXJyYXktPnB1c2hJ
bnRlZ2VyKDEpOworICAgICAgICBhcnJheS0+cHVzaERvdWJsZSgxLjUpOworICAgICAgICBFWFBF
Q1RfRVEoYXJyYXktPnRvSlNPTlN0cmluZygpLCAiW251bGwsdHJ1ZSxmYWxzZSwxLDEuNV0iKTsK
KyAgICAgICAgYXJyYXktPnB1c2hTdHJpbmcoIndlYmtpdCIpOworICAgICAgICBFWFBFQ1RfRVEo
YXJyYXktPnRvSlNPTlN0cmluZygpLCAiW251bGwsdHJ1ZSxmYWxzZSwxLDEuNSxcIndlYmtpdFwi
XSIpOworICAgICAgICBSZWY8SlNPTjo6QXJyYXk+IHN1YkFycmF5ID0gSlNPTjo6QXJyYXk6OmNy
ZWF0ZSgpOworICAgICAgICBzdWJBcnJheS0+cHVzaFN0cmluZygic3RyaW5nIik7CisgICAgICAg
IHN1YkFycmF5LT5wdXNoT2JqZWN0KEpTT046Ok9iamVjdDo6Y3JlYXRlKCkpOworICAgICAgICBF
WFBFQ1RfRVEoc3ViQXJyYXktPnRvSlNPTlN0cmluZygpLCAiW1wic3RyaW5nXCIse31dIik7Cisg
ICAgICAgIGFycmF5LT5wdXNoQXJyYXkoV1RGTW92ZShzdWJBcnJheSkpOworICAgICAgICBFWFBF
Q1RfRVEoYXJyYXktPnRvSlNPTlN0cmluZygpLCAiW251bGwsdHJ1ZSxmYWxzZSwxLDEuNSxcIndl
YmtpdFwiLFtcInN0cmluZ1wiLHt9XV0iKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIFJlZjxK
U09OOjpPYmplY3Q+IG9iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIEVY
UEVDVF9FUShvYmplY3QtPnRvSlNPTlN0cmluZygpLCAie30iKTsKKyAgICAgICAgb2JqZWN0LT5z
ZXRWYWx1ZSgibnVsbCIsIEpTT046OlZhbHVlOjpudWxsKCkpOworICAgICAgICBFWFBFQ1RfRVEo
b2JqZWN0LT50b0pTT05TdHJpbmcoKSwgIntcIm51bGxcIjpudWxsfSIpOworICAgICAgICBvYmpl
Y3QtPnNldEJvb2xlYW4oImJvb2xlYW4iLCB0cnVlKTsKKyAgICAgICAgRVhQRUNUX0VRKG9iamVj
dC0+dG9KU09OU3RyaW5nKCksICJ7XCJudWxsXCI6bnVsbCxcImJvb2xlYW5cIjp0cnVlfSIpOwor
ICAgICAgICBvYmplY3QtPnNldERvdWJsZSgiZG91YmxlIiwgMS41KTsKKyAgICAgICAgRVhQRUNU
X0VRKG9iamVjdC0+dG9KU09OU3RyaW5nKCksICJ7XCJudWxsXCI6bnVsbCxcImJvb2xlYW5cIjp0
cnVlLFwiZG91YmxlXCI6MS41fSIpOworICAgICAgICBvYmplY3QtPnNldFN0cmluZygic3RyaW5n
IiwgIndlYmtpdCIpOworICAgICAgICBFWFBFQ1RfRVEob2JqZWN0LT50b0pTT05TdHJpbmcoKSwg
IntcIm51bGxcIjpudWxsLFwiYm9vbGVhblwiOnRydWUsXCJkb3VibGVcIjoxLjUsXCJzdHJpbmdc
IjpcIndlYmtpdFwifSIpOworICAgICAgICBvYmplY3QtPnNldEFycmF5KCJhcnJheSIsIEpTT046
OkFycmF5OjpjcmVhdGUoKSk7CisgICAgICAgIEVYUEVDVF9FUShvYmplY3QtPnRvSlNPTlN0cmlu
ZygpLCAie1wibnVsbFwiOm51bGwsXCJib29sZWFuXCI6dHJ1ZSxcImRvdWJsZVwiOjEuNSxcInN0
cmluZ1wiOlwid2Via2l0XCIsXCJhcnJheVwiOltdfSIpOworICAgICAgICBSZWY8SlNPTjo6T2Jq
ZWN0PiBzdWJPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBzdWJPYmpl
Y3QtPnNldFN0cmluZygiZm9vIiwgImJhciIpOworICAgICAgICBzdWJPYmplY3QtPnNldEludGVn
ZXIoImJheiIsIDI1KTsKKyAgICAgICAgb2JqZWN0LT5zZXRPYmplY3QoIm9iamVjdCIsIFdURk1v
dmUoc3ViT2JqZWN0KSk7CisgICAgICAgIEVYUEVDVF9FUShvYmplY3QtPnRvSlNPTlN0cmluZygp
LCAie1wibnVsbFwiOm51bGwsXCJib29sZWFuXCI6dHJ1ZSxcImRvdWJsZVwiOjEuNSxcInN0cmlu
Z1wiOlwid2Via2l0XCIsXCJhcnJheVwiOltdLFwib2JqZWN0XCI6e1wiZm9vXCI6XCJiYXJcIixc
ImJhelwiOjI1fX0iKTsKKyAgICB9CiB9CiAKLVRFU1QoSW5zcGVjdG9yVmFsdWUsIE1lbW9yeUNv
c3RBcnJheUVtcHR5KQorVEVTVChJbnNwZWN0b3JWYWx1ZSwgUGFyc2VKU09OKQogewotICAgIFJl
ZjxJbnNwZWN0b3JBcnJheT4gdmFsdWUgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7Ci0gICAg
c2l6ZV90IG1lbW9yeUNvc3QgPSB2YWx1ZS0+bWVtb3J5Q29zdCgpOwotICAgIEVYUEVDVF9HVCht
ZW1vcnlDb3N0LCAwVSk7Ci0gICAgRVhQRUNUX0xFKG1lbW9yeUNvc3QsIDhVKTsKKyAgICB7Cisg
ICAgICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gdmFsdWU7CisgICAgICAgIEVYUEVDVF9UUlVFKEpT
T046OlZhbHVlOjpwYXJzZUpTT04oIm51bGwiLCB2YWx1ZSkpOworICAgICAgICBFWFBFQ1RfVFJV
RSh2YWx1ZS0+aXNOdWxsKCkpOworICAgIH0KKworICAgIHsKKyAgICAgICAgUmVmUHRyPEpTT046
OlZhbHVlPiB2YWx1ZTsKKyAgICAgICAgRVhQRUNUX1RSVUUoSlNPTjo6VmFsdWU6OnBhcnNlSlNP
TigidHJ1ZSIsIHZhbHVlKSk7CisgICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlLT50eXBlKCkgPT0g
SlNPTjo6VmFsdWU6OlR5cGU6OkJvb2xlYW4pOworICAgICAgICBib29sIGJvb2xlYW5WYWx1ZTsK
KyAgICAgICAgRVhQRUNUX1RSVUUodmFsdWUtPmFzQm9vbGVhbihib29sZWFuVmFsdWUpKTsKKyAg
ICAgICAgRVhQRUNUX0VRKGJvb2xlYW5WYWx1ZSwgdHJ1ZSk7CisKKyAgICAgICAgRVhQRUNUX1RS
VUUoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiZmFsc2UiLCB2YWx1ZSkpOworICAgICAgICBFWFBF
Q1RfVFJVRSh2YWx1ZS0+dHlwZSgpID09IEpTT046OlZhbHVlOjpUeXBlOjpCb29sZWFuKTsKKyAg
ICAgICAgRVhQRUNUX1RSVUUodmFsdWUtPmFzQm9vbGVhbihib29sZWFuVmFsdWUpKTsKKyAgICAg
ICAgRVhQRUNUX0VRKGJvb2xlYW5WYWx1ZSwgZmFsc2UpOworICAgIH0KKworICAgIHsKKyAgICAg
ICAgUmVmUHRyPEpTT046OlZhbHVlPiB2YWx1ZTsKKyAgICAgICAgRVhQRUNUX1RSVUUoSlNPTjo6
VmFsdWU6OnBhcnNlSlNPTigiMSIsIHZhbHVlKSk7CisgICAgICAgIC8vIE51bWJlcnMgYXJlIGFs
d2F5cyBwYXJzZWQgYXMgZG91YmxlLgorICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+dHlwZSgp
ID09IEpTT046OlZhbHVlOjpUeXBlOjpEb3VibGUpOworICAgICAgICBkb3VibGUgZG91YmxlVmFs
dWU7CisgICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlLT5hc0RvdWJsZShkb3VibGVWYWx1ZSkpOwor
ICAgICAgICBFWFBFQ1RfRVEoZG91YmxlVmFsdWUsIDEuMCk7CisKKyAgICAgICAgRVhQRUNUX1RS
VUUoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiMS41IiwgdmFsdWUpKTsKKyAgICAgICAgRVhQRUNU
X1RSVUUodmFsdWUtPnR5cGUoKSA9PSBKU09OOjpWYWx1ZTo6VHlwZTo6RG91YmxlKTsKKyAgICAg
ICAgRVhQRUNUX1RSVUUodmFsdWUtPmFzRG91YmxlKGRvdWJsZVZhbHVlKSk7CisgICAgICAgIEVY
UEVDVF9FUShkb3VibGVWYWx1ZSwgMS41KTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIFJlZlB0
cjxKU09OOjpWYWx1ZT4gdmFsdWU7CisgICAgICAgIEVYUEVDVF9UUlVFKEpTT046OlZhbHVlOjpw
YXJzZUpTT04oIlwic3RyaW5nXCIiLCB2YWx1ZSkpOworICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1
ZS0+dHlwZSgpID09IEpTT046OlZhbHVlOjpUeXBlOjpTdHJpbmcpOworICAgICAgICBTdHJpbmcg
c3RyaW5nVmFsdWU7CisgICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlLT5hc1N0cmluZyhzdHJpbmdW
YWx1ZSkpOworICAgICAgICBFWFBFQ1RfRVEoc3RyaW5nVmFsdWUsICJzdHJpbmciKTsKKyAgICB9
CisKKyAgICB7CisgICAgICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gdmFsdWU7CisgICAgICAgIEVY
UEVDVF9UUlVFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIltdIiwgdmFsdWUpKTsKKyAgICAgICAg
RVhQRUNUX1RSVUUodmFsdWUtPnR5cGUoKSA9PSBKU09OOjpWYWx1ZTo6VHlwZTo6QXJyYXkpOwor
ICAgICAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IGFycmF5VmFsdWU7CisgICAgICAgIEVYUEVDVF9U
UlVFKHZhbHVlLT5hc0FycmF5KGFycmF5VmFsdWUpKTsKKyAgICAgICAgRVhQRUNUX0VRKGFycmF5
VmFsdWUtPmxlbmd0aCgpLCAwVSk7CisKKyAgICAgICAgRVhQRUNUX1RSVUUoSlNPTjo6VmFsdWU6
OnBhcnNlSlNPTigiW251bGwsIDEgLDIuNSxbe1wiZm9vXCI6XCJiYXJcIn0se1wiYmF6XCI6ZmFs
c2V9XSxcIndlYmtpdFwiXSIsIHZhbHVlKSk7CisgICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlLT50
eXBlKCkgPT0gSlNPTjo6VmFsdWU6OlR5cGU6OkFycmF5KTsKKyAgICAgICAgRVhQRUNUX1RSVUUo
dmFsdWUtPmFzQXJyYXkoYXJyYXlWYWx1ZSkpOworICAgICAgICBFWFBFQ1RfRVEoYXJyYXlWYWx1
ZS0+bGVuZ3RoKCksIDVVKTsKKyAgICAgICAgYXV0byBpdCA9IGFycmF5VmFsdWUtPmJlZ2luKCk7
CisgICAgICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gaXRlbVZhbHVlID0gaXQtPmdldCgpOworICAg
ICAgICBFWFBFQ1RfVFJVRShpdGVtVmFsdWUtPnR5cGUoKSA9PSBKU09OOjpWYWx1ZTo6VHlwZTo6
TnVsbCk7CisgICAgICAgICsraXQ7CisgICAgICAgIEVYUEVDVF9GQUxTRShpdCA9PSBhcnJheVZh
bHVlLT5lbmQoKSk7CisKKyAgICAgICAgaXRlbVZhbHVlID0gaXQtPmdldCgpOworICAgICAgICBF
WFBFQ1RfVFJVRShpdGVtVmFsdWUtPnR5cGUoKSA9PSBKU09OOjpWYWx1ZTo6VHlwZTo6RG91Ymxl
KTsKKyAgICAgICAgaW50IGludGVnZXJWYWx1ZTsKKyAgICAgICAgRVhQRUNUX1RSVUUoaXRlbVZh
bHVlLT5hc0ludGVnZXIoaW50ZWdlclZhbHVlKSk7CisgICAgICAgIEVYUEVDVF9FUShpbnRlZ2Vy
VmFsdWUsIDEpOworICAgICAgICArK2l0OworICAgICAgICBFWFBFQ1RfRkFMU0UoaXQgPT0gYXJy
YXlWYWx1ZS0+ZW5kKCkpOworCisgICAgICAgIGl0ZW1WYWx1ZSA9IGl0LT5nZXQoKTsKKyAgICAg
ICAgRVhQRUNUX1RSVUUoaXRlbVZhbHVlLT50eXBlKCkgPT0gSlNPTjo6VmFsdWU6OlR5cGU6OkRv
dWJsZSk7CisgICAgICAgIGRvdWJsZSBkb3VibGVWYWx1ZTsKKyAgICAgICAgRVhQRUNUX1RSVUUo
aXRlbVZhbHVlLT5hc0RvdWJsZShkb3VibGVWYWx1ZSkpOworICAgICAgICBFWFBFQ1RfRVEoZG91
YmxlVmFsdWUsIDIuNSk7CisgICAgICAgICsraXQ7CisgICAgICAgIEVYUEVDVF9GQUxTRShpdCA9
PSBhcnJheVZhbHVlLT5lbmQoKSk7CisKKyAgICAgICAgaXRlbVZhbHVlID0gaXQtPmdldCgpOwor
ICAgICAgICBFWFBFQ1RfVFJVRShpdGVtVmFsdWUtPnR5cGUoKSA9PSBKU09OOjpWYWx1ZTo6VHlw
ZTo6QXJyYXkpOworICAgICAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IHN1YkFycmF5VmFsdWU7Cisg
ICAgICAgIEVYUEVDVF9UUlVFKGl0ZW1WYWx1ZS0+YXNBcnJheShzdWJBcnJheVZhbHVlKSk7Cisg
ICAgICAgIEVYUEVDVF9FUShzdWJBcnJheVZhbHVlLT5sZW5ndGgoKSwgMlUpOworICAgICAgICBS
ZWZQdHI8SlNPTjo6VmFsdWU+IG9iamVjdFZhbHVlID0gc3ViQXJyYXlWYWx1ZS0+Z2V0KDApOwor
ICAgICAgICBFWFBFQ1RfVFJVRShvYmplY3RWYWx1ZS0+dHlwZSgpID09IEpTT046OlZhbHVlOjpU
eXBlOjpPYmplY3QpOworICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBvYmplY3Q7CisgICAg
ICAgIEVYUEVDVF9UUlVFKG9iamVjdFZhbHVlLT5hc09iamVjdChvYmplY3QpKTsKKyAgICAgICAg
RVhQRUNUX0VRKG9iamVjdC0+c2l6ZSgpLCAxKTsKKyAgICAgICAgU3RyaW5nIHN0cmluZ1ZhbHVl
OworICAgICAgICBFWFBFQ1RfVFJVRShvYmplY3QtPmdldFN0cmluZygiZm9vIiwgc3RyaW5nVmFs
dWUpKTsKKyAgICAgICAgRVhQRUNUX0VRKHN0cmluZ1ZhbHVlLCAiYmFyIik7CisgICAgICAgIG9i
amVjdFZhbHVlID0gc3ViQXJyYXlWYWx1ZS0+Z2V0KDEpOworICAgICAgICBFWFBFQ1RfVFJVRShv
YmplY3RWYWx1ZS0+dHlwZSgpID09IEpTT046OlZhbHVlOjpUeXBlOjpPYmplY3QpOworICAgICAg
ICBFWFBFQ1RfVFJVRShvYmplY3RWYWx1ZS0+YXNPYmplY3Qob2JqZWN0KSk7CisgICAgICAgIEVY
UEVDVF9FUShvYmplY3QtPnNpemUoKSwgMSk7CisgICAgICAgIGJvb2wgYm9vbGVhblZhbHVlOwor
ICAgICAgICBFWFBFQ1RfVFJVRShvYmplY3QtPmdldEJvb2xlYW4oImJheiIsIGJvb2xlYW5WYWx1
ZSkpOworICAgICAgICBFWFBFQ1RfRkFMU0UoYm9vbGVhblZhbHVlKTsKKyAgICAgICAgKytpdDsK
KyAgICAgICAgRVhQRUNUX0ZBTFNFKGl0ID09IGFycmF5VmFsdWUtPmVuZCgpKTsKKworICAgICAg
ICBpdGVtVmFsdWUgPSBpdC0+Z2V0KCk7CisgICAgICAgIEVYUEVDVF9UUlVFKGl0ZW1WYWx1ZS0+
dHlwZSgpID09IEpTT046OlZhbHVlOjpUeXBlOjpTdHJpbmcpOworICAgICAgICBFWFBFQ1RfVFJV
RShpdGVtVmFsdWUtPmFzU3RyaW5nKHN0cmluZ1ZhbHVlKSk7CisgICAgICAgIEVYUEVDVF9FUShz
dHJpbmdWYWx1ZSwgIndlYmtpdCIpOworICAgICAgICArK2l0OworICAgICAgICBFWFBFQ1RfVFJV
RShpdCA9PSBhcnJheVZhbHVlLT5lbmQoKSk7CisgICAgfQorCisgICAgeworICAgICAgICBSZWZQ
dHI8SlNPTjo6VmFsdWU+IHZhbHVlOworICAgICAgICBFWFBFQ1RfVFJVRShKU09OOjpWYWx1ZTo6
cGFyc2VKU09OKCJ7fSIsIHZhbHVlKSk7CisgICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlLT50eXBl
KCkgPT0gSlNPTjo6VmFsdWU6OlR5cGU6Ok9iamVjdCk7CisgICAgICAgIFJlZlB0cjxKU09OOjpP
YmplY3Q+IG9iamVjdFZhbHVlOworICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+YXNPYmplY3Qo
b2JqZWN0VmFsdWUpKTsKKyAgICAgICAgRVhQRUNUX0VRKG9iamVjdFZhbHVlLT5zaXplKCksIDAp
OworCisgICAgICAgIEVYUEVDVF9UUlVFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIntcImZvb1wi
OiBcImJhclwiLCBcImJhelwiOiB7XCJzdWJcIjpbbnVsbCxmYWxzZV19fSIsIHZhbHVlKSk7Cisg
ICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlLT50eXBlKCkgPT0gSlNPTjo6VmFsdWU6OlR5cGU6Ok9i
amVjdCk7CisgICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlLT5hc09iamVjdChvYmplY3RWYWx1ZSkp
OworICAgICAgICBFWFBFQ1RfRVEob2JqZWN0VmFsdWUtPnNpemUoKSwgMik7CisKKyAgICAgICAg
U3RyaW5nIHN0cmluZ1ZhbHVlOworICAgICAgICBFWFBFQ1RfVFJVRShvYmplY3RWYWx1ZS0+Z2V0
U3RyaW5nKCJmb28iLCBzdHJpbmdWYWx1ZSkpOworICAgICAgICBFWFBFQ1RfRVEoc3RyaW5nVmFs
dWUsICJiYXIiKTsKKworICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBvYmplY3Q7CisgICAg
ICAgIEVYUEVDVF9UUlVFKG9iamVjdFZhbHVlLT5nZXRPYmplY3QoImJheiIsIG9iamVjdCkpOwor
ICAgICAgICBFWFBFQ1RfRVEob2JqZWN0LT5zaXplKCksIDEpOworICAgICAgICBSZWZQdHI8SlNP
Tjo6QXJyYXk+IGFycmF5OworICAgICAgICBFWFBFQ1RfVFJVRShvYmplY3QtPmdldEFycmF5KCJz
dWIiLCBhcnJheSkpOworICAgICAgICBFWFBFQ1RfRVEoYXJyYXktPmxlbmd0aCgpLCAyVSk7Cisg
ICAgfQorCisgICAgeworICAgICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHZhbHVlOworICAgICAg
ICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiLCIsIHZhbHVlKSk7CisgICAg
ICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJcImZvbyIsIHZhbHVlKSk7
CisgICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJmb29cIiIsIHZh
bHVlKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJUclVl
IiwgdmFsdWUpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04o
IkZhbHNlIiwgdmFsdWUpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJz
ZUpTT04oIjEuZCIsIHZhbHVlKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6
cGFyc2VKU09OKCJbMSxdIiwgdmFsdWUpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZh
bHVlOjpwYXJzZUpTT04oIjEsMl0iLCB2YWx1ZSkpOworICAgICAgICBFWFBFQ1RfRkFMU0UoSlNP
Tjo6VmFsdWU6OnBhcnNlSlNPTigiWzEsMiIsIHZhbHVlKSk7CisgICAgICAgIEVYUEVDVF9GQUxT
RShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJbMSAyXSIsIHZhbHVlKSk7CisgICAgICAgIEVYUEVD
VF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJbMSwyXV0iLCB2YWx1ZSkpOworICAgICAg
ICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiWzEsMl0sIiwgdmFsdWUpKTsK
KyAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIntmb286XCJiYXJc
In0iLCB2YWx1ZSkpOworICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNP
Tigie1wiZm9vXCI6YmFyfSIsIHZhbHVlKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpW
YWx1ZTo6cGFyc2VKU09OKCJ7XCJmb286XCJiYXJcIn0iLCB2YWx1ZSkpOworICAgICAgICBFWFBF
Q1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigie2Zvb1wiOlwiYmFyXCJ9IiwgdmFsdWUp
KTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oInt7XCJmb29c
IjpcImJhclwifX0iLCB2YWx1ZSkpOworICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6
OnBhcnNlSlNPTigie1wiZm9vXCI6XCJiYXJcIn0sIiwgdmFsdWUpKTsKKyAgICAgICAgRVhQRUNU
X0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIlt7XCJmb29cIjpcImJhclwifSx7XCJiYXpc
IjpmYWxzZX0sXSIsIHZhbHVlKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6
cGFyc2VKU09OKCJbe1wiZm9vXCI6e1wiYmF6XCI6ZmFsc2V9XSIsIHZhbHVlKSk7CisgICAgfQog
fQogCi1URVNUKEluc3BlY3RvclZhbHVlLCBNZW1vcnlDb3N0QXJyYXlHcm93aW5nKQorVEVTVChJ
bnNwZWN0b3JWYWx1ZSwgTWVtb3J5Q29zdCkKIHsKLSAgICBSZWY8SW5zcGVjdG9yQXJyYXk+IHZh
bHVlID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOworICAgIHsKKyAgICAgICAgUmVmPEpTT046
OlZhbHVlPiB2YWx1ZSA9IEpTT046OlZhbHVlOjpudWxsKCk7CisgICAgICAgIHNpemVfdCBtZW1v
cnlDb3N0ID0gdmFsdWUtPm1lbW9yeUNvc3QoKTsKKyAgICAgICAgRVhQRUNUX0dUKG1lbW9yeUNv
c3QsIDBVKTsKKyAgICAgICAgRVhQRUNUX0xFKG1lbW9yeUNvc3QsIDhVKTsKKyAgICB9CisKKyAg
ICB7CisgICAgICAgIFJlZjxKU09OOjpWYWx1ZT4gdmFsdWUgPSBKU09OOjpWYWx1ZTo6Y3JlYXRl
KHRydWUpOworICAgICAgICBzaXplX3QgbWVtb3J5Q29zdCA9IHZhbHVlLT5tZW1vcnlDb3N0KCk7
CisgICAgICAgIEVYUEVDVF9HVChtZW1vcnlDb3N0LCAwVSk7CisgICAgICAgIEVYUEVDVF9MRSht
ZW1vcnlDb3N0LCA4VSk7CisgICAgfQorCisgICAgeworICAgICAgICBSZWY8SlNPTjo6VmFsdWU+
IHZhbHVlID0gSlNPTjo6VmFsdWU6OmNyZWF0ZSgxLjApOworICAgICAgICBzaXplX3QgbWVtb3J5
Q29zdCA9IHZhbHVlLT5tZW1vcnlDb3N0KCk7CisgICAgICAgIEVYUEVDVF9HVChtZW1vcnlDb3N0
LCAwVSk7CisgICAgICAgIEVYUEVDVF9MRShtZW1vcnlDb3N0LCA4VSk7CisgICAgfQorCisgICAg
eworICAgICAgICBSZWY8SlNPTjo6VmFsdWU+IHZhbHVlID0gSlNPTjo6VmFsdWU6OmNyZWF0ZSgx
KTsKKyAgICAgICAgc2l6ZV90IG1lbW9yeUNvc3QgPSB2YWx1ZS0+bWVtb3J5Q29zdCgpOworICAg
ICAgICBFWFBFQ1RfR1QobWVtb3J5Q29zdCwgMFUpOworICAgICAgICBFWFBFQ1RfTEUobWVtb3J5
Q29zdCwgOFUpOworICAgIH0KKworICAgIHsKKyAgICAgICAgUmVmPEpTT046OlZhbHVlPiB2YWx1
ZSA9IEpTT046OlZhbHVlOjpjcmVhdGUoInRlc3QiKTsKKyAgICAgICAgc2l6ZV90IG1lbW9yeUNv
c3QgPSB2YWx1ZS0+bWVtb3J5Q29zdCgpOworICAgICAgICBFWFBFQ1RfR1QobWVtb3J5Q29zdCwg
MFUpOworICAgICAgICBFWFBFQ1RfTEUobWVtb3J5Q29zdCwgMzZVKTsKKyAgICB9CisKKyAgICB7
CisgICAgICAgIFJlZjxKU09OOjpWYWx1ZT4gdmFsdWUgPSBKU09OOjpWYWx1ZTo6Y3JlYXRlKCIi
KTsKKyAgICAgICAgc2l6ZV90IG1lbW9yeUNvc3QgPSB2YWx1ZS0+bWVtb3J5Q29zdCgpOworICAg
ICAgICBFWFBFQ1RfR1QobWVtb3J5Q29zdCwgMFUpOworICAgICAgICBFWFBFQ1RfTEUobWVtb3J5
Q29zdCwgMzJVKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIFJlZjxKU09OOjpWYWx1ZT4gdmFs
dWUgPSBKU09OOjpWYWx1ZTo6Y3JlYXRlKFN0cmluZygpKTsKKyAgICAgICAgc2l6ZV90IG1lbW9y
eUNvc3QgPSB2YWx1ZS0+bWVtb3J5Q29zdCgpOworICAgICAgICBFWFBFQ1RfR1QobWVtb3J5Q29z
dCwgMFUpOworICAgICAgICBFWFBFQ1RfTEUobWVtb3J5Q29zdCwgOFUpOworICAgIH0KKworICAg
IHsKKyAgICAgICAgUmVmPEpTT046OlZhbHVlPiB2YWx1ZUEgPSBKU09OOjpWYWx1ZTo6Y3JlYXRl
KCJ0Iik7CisgICAgICAgIFJlZjxKU09OOjpWYWx1ZT4gdmFsdWVCID0gSlNPTjo6VmFsdWU6OmNy
ZWF0ZSgidGUiKTsKKyAgICAgICAgUmVmPEpTT046OlZhbHVlPiB2YWx1ZUMgPSBKU09OOjpWYWx1
ZTo6Y3JlYXRlKCJ0ZXMiKTsKKyAgICAgICAgUmVmPEpTT046OlZhbHVlPiB2YWx1ZUQgPSBKU09O
OjpWYWx1ZTo6Y3JlYXRlKCJ0ZXN0Iik7CisgICAgICAgIEVYUEVDVF9MVCh2YWx1ZUEtPm1lbW9y
eUNvc3QoKSwgdmFsdWVCLT5tZW1vcnlDb3N0KCkpOworICAgICAgICBFWFBFQ1RfTFQodmFsdWVC
LT5tZW1vcnlDb3N0KCksIHZhbHVlQy0+bWVtb3J5Q29zdCgpKTsKKyAgICAgICAgRVhQRUNUX0xU
KHZhbHVlQy0+bWVtb3J5Q29zdCgpLCB2YWx1ZUQtPm1lbW9yeUNvc3QoKSk7CisgICAgfQorCisg
ICAgeworICAgICAgICBSZWY8SlNPTjo6VmFsdWU+IHZhbHVlQSA9IEpTT046OlZhbHVlOjpjcmVh
dGUoInQiKTsKKyAgICAgICAgUmVmPEpTT046OlZhbHVlPiB2YWx1ZUIgPSBKU09OOjpWYWx1ZTo6
Y3JlYXRlKCLwn5iAIik7CisgICAgICAgIEVYUEVDVF9MVCh2YWx1ZUEtPm1lbW9yeUNvc3QoKSwg
dmFsdWVCLT5tZW1vcnlDb3N0KCkpOworICAgIH0KKworICAgIHsKKyAgICAgICAgUmVmPEluc3Bl
Y3Rvck9iamVjdD4gdmFsdWUgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICB2YWx1
ZS0+c2V0VmFsdWUoInRlc3QiLCBKU09OOjpWYWx1ZTo6bnVsbCgpKTsKKyAgICAgICAgc2l6ZV90
IG1lbW9yeUNvc3QgPSB2YWx1ZS0+bWVtb3J5Q29zdCgpOworICAgICAgICBFWFBFQ1RfR1QobWVt
b3J5Q29zdCwgMFUpOworICAgICAgICBFWFBFQ1RfTEUobWVtb3J5Q29zdCwgMjBVKTsKKyAgICB9
CisKKyAgICB7CisgICAgICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlID0gSlNPTjo6T2Jq
ZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgc2l6ZV90IG1lbW9yeUNvc3QgPSB2YWx1ZS0+bWVtb3J5
Q29zdCgpOworICAgICAgICBFWFBFQ1RfR1QobWVtb3J5Q29zdCwgMFUpOworICAgICAgICBFWFBF
Q1RfTEUobWVtb3J5Q29zdCwgOFUpOworICAgIH0KKworICAgIHsKKyAgICAgICAgUmVmPEluc3Bl
Y3Rvck9iamVjdD4gdmFsdWUgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworCisgICAgICAgIHZh
bHVlLT5zZXRWYWx1ZSgiMSIsIEpTT046OlZhbHVlOjpudWxsKCkpOworICAgICAgICBzaXplX3Qg
bWVtb3J5Q29zdDEgPSB2YWx1ZS0+bWVtb3J5Q29zdCgpOworCisgICAgICAgIHZhbHVlLT5zZXRW
YWx1ZSgiMiIsIEpTT046OlZhbHVlOjpudWxsKCkpOworICAgICAgICBzaXplX3QgbWVtb3J5Q29z
dDIgPSB2YWx1ZS0+bWVtb3J5Q29zdCgpOworCisgICAgICAgIHZhbHVlLT5zZXRWYWx1ZSgiMyIs
IEpTT046OlZhbHVlOjpudWxsKCkpOworICAgICAgICBzaXplX3QgbWVtb3J5Q29zdDMgPSB2YWx1
ZS0+bWVtb3J5Q29zdCgpOworCisgICAgICAgIHZhbHVlLT5zZXRWYWx1ZSgiNCIsIEpTT046OlZh
bHVlOjpudWxsKCkpOworICAgICAgICBzaXplX3QgbWVtb3J5Q29zdDQgPSB2YWx1ZS0+bWVtb3J5
Q29zdCgpOworCisgICAgICAgIEVYUEVDVF9MVChtZW1vcnlDb3N0MSwgbWVtb3J5Q29zdDIpOwor
ICAgICAgICBFWFBFQ1RfTFQobWVtb3J5Q29zdDIsIG1lbW9yeUNvc3QzKTsKKyAgICAgICAgRVhQ
RUNUX0xUKG1lbW9yeUNvc3QzLCBtZW1vcnlDb3N0NCk7CisgICAgfQorCisgICAgeworICAgICAg
ICBSZWY8SlNPTjo6QXJyYXk+IHZhbHVlID0gSlNPTjo6QXJyYXk6OmNyZWF0ZSgpOworICAgICAg
ICB2YWx1ZS0+cHVzaFZhbHVlKEpTT046OlZhbHVlOjpudWxsKCkpOworICAgICAgICBzaXplX3Qg
bWVtb3J5Q29zdCA9IHZhbHVlLT5tZW1vcnlDb3N0KCk7CisgICAgICAgIEVYUEVDVF9HVChtZW1v
cnlDb3N0LCAwVSk7CisgICAgICAgIEVYUEVDVF9MRShtZW1vcnlDb3N0LCAxNlUpOworICAgIH0K
KworICAgIHsKKyAgICAgICAgUmVmPEpTT046OkFycmF5PiB2YWx1ZSA9IEpTT046OkFycmF5Ojpj
cmVhdGUoKTsKKyAgICAgICAgc2l6ZV90IG1lbW9yeUNvc3QgPSB2YWx1ZS0+bWVtb3J5Q29zdCgp
OworICAgICAgICBFWFBFQ1RfR1QobWVtb3J5Q29zdCwgMFUpOworICAgICAgICBFWFBFQ1RfTEUo
bWVtb3J5Q29zdCwgOFUpOworICAgIH0KKworICAgIHsKKyAgICAgICAgUmVmPEpTT046OkFycmF5
PiB2YWx1ZSA9IEpTT046OkFycmF5OjpjcmVhdGUoKTsKIAotICAgIHZhbHVlLT5wdXNoVmFsdWUo
SW5zcGVjdG9yVmFsdWU6Om51bGwoKSk7Ci0gICAgc2l6ZV90IG1lbW9yeUNvc3QxID0gdmFsdWUt
Pm1lbW9yeUNvc3QoKTsKKyAgICAgICAgdmFsdWUtPnB1c2hWYWx1ZShKU09OOjpWYWx1ZTo6bnVs
bCgpKTsKKyAgICAgICAgc2l6ZV90IG1lbW9yeUNvc3QxID0gdmFsdWUtPm1lbW9yeUNvc3QoKTsK
IAotICAgIHZhbHVlLT5wdXNoVmFsdWUoSW5zcGVjdG9yVmFsdWU6Om51bGwoKSk7Ci0gICAgc2l6
ZV90IG1lbW9yeUNvc3QyID0gdmFsdWUtPm1lbW9yeUNvc3QoKTsKKyAgICAgICAgdmFsdWUtPnB1
c2hWYWx1ZShKU09OOjpWYWx1ZTo6bnVsbCgpKTsKKyAgICAgICAgc2l6ZV90IG1lbW9yeUNvc3Qy
ID0gdmFsdWUtPm1lbW9yeUNvc3QoKTsKIAotICAgIHZhbHVlLT5wdXNoVmFsdWUoSW5zcGVjdG9y
VmFsdWU6Om51bGwoKSk7Ci0gICAgc2l6ZV90IG1lbW9yeUNvc3QzID0gdmFsdWUtPm1lbW9yeUNv
c3QoKTsKKyAgICAgICAgdmFsdWUtPnB1c2hWYWx1ZShKU09OOjpWYWx1ZTo6bnVsbCgpKTsKKyAg
ICAgICAgc2l6ZV90IG1lbW9yeUNvc3QzID0gdmFsdWUtPm1lbW9yeUNvc3QoKTsKIAotICAgIHZh
bHVlLT5wdXNoVmFsdWUoSW5zcGVjdG9yVmFsdWU6Om51bGwoKSk7Ci0gICAgc2l6ZV90IG1lbW9y
eUNvc3Q0ID0gdmFsdWUtPm1lbW9yeUNvc3QoKTsKKyAgICAgICAgdmFsdWUtPnB1c2hWYWx1ZShK
U09OOjpWYWx1ZTo6bnVsbCgpKTsKKyAgICAgICAgc2l6ZV90IG1lbW9yeUNvc3Q0ID0gdmFsdWUt
Pm1lbW9yeUNvc3QoKTsKIAotICAgIEVYUEVDVF9MVChtZW1vcnlDb3N0MSwgbWVtb3J5Q29zdDIp
OwotICAgIEVYUEVDVF9MVChtZW1vcnlDb3N0MiwgbWVtb3J5Q29zdDMpOwotICAgIEVYUEVDVF9M
VChtZW1vcnlDb3N0MywgbWVtb3J5Q29zdDQpOworICAgICAgICBFWFBFQ1RfTFQobWVtb3J5Q29z
dDEsIG1lbW9yeUNvc3QyKTsKKyAgICAgICAgRVhQRUNUX0xUKG1lbW9yeUNvc3QyLCBtZW1vcnlD
b3N0Myk7CisgICAgICAgIEVYUEVDVF9MVChtZW1vcnlDb3N0MywgbWVtb3J5Q29zdDQpOworICAg
IH0KIH0KIAogfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQo=
</data>
<flag name="review"
          id="345459"
          type_id="1"
          status="+"
          setter="bburg"
    />
          </attachment>
      

    </bug>

</bugzilla>