<?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>82857</bug_id>
          
          <creation_ts>2012-04-01 23:38:01 -0700</creation_ts>
          <short_desc>Streamline strtod and fix some related problems</short_desc>
          <delta_ts>2012-04-06 15:57:42 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Template Framework</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>ggaren</cc>
    
    <cc>joepeck</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>mrobinson</cc>
    
    <cc>simonjam</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>593197</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2012-04-01 23:38:01 -0700</bug_when>
    <thetext>Streamline dtoa and fix some related problems</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>593198</commentid>
    <comment_count>1</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2012-04-01 23:38:59 -0700</bug_when>
    <thetext>Not dtoa, strtod.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>593212</commentid>
    <comment_count>2</comment_count>
      <attachid>135031</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2012-04-02 00:15:12 -0700</bug_when>
    <thetext>Created attachment 135031
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>593213</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-04-02 00:17:40 -0700</bug_when>
    <thetext>Attachment 135031 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source...&quot; exit_code: 1
Source/WTF/wtf/dtoa.h:53:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Source/WTF/wtf/dtoa/double-conversion.h:367:  processed_characters_count is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebCore/ChangeLog:8:  You should remove the &apos;No new tests&apos; and either add and list tests, or explain why no new tests were possible.  [changelog/nonewtests] [5]
Total errors found: 3 in 16 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>593214</commentid>
    <comment_count>4</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2012-04-02 00:18:40 -0700</bug_when>
    <thetext>I got started on this because I was using Instruments to profile web page loading and the strlen inside strtod showed up on a profile.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>593222</commentid>
    <comment_count>5</comment_count>
      <attachid>135033</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2012-04-02 00:28:08 -0700</bug_when>
    <thetext>Created attachment 135033
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>593225</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-04-02 00:31:03 -0700</bug_when>
    <thetext>Attachment 135033 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source...&quot; exit_code: 1
Source/WTF/wtf/dtoa.h:53:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Source/WTF/wtf/dtoa/double-conversion.h:367:  processed_characters_count is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 2 in 16 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>593240</commentid>
    <comment_count>7</comment_count>
      <attachid>135033</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-04-02 01:04:05 -0700</bug_when>
    <thetext>Comment on attachment 135033
Patch

Attachment 135033 did not pass win-ews (win):
Output: http://queues.webkit.org/results/12307505</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>593464</commentid>
    <comment_count>8</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2012-04-02 07:47:21 -0700</bug_when>
    <thetext>I’ll need some help making the .def file changes for Windows.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>593503</commentid>
    <comment_count>9</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2012-04-02 08:53:40 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; I’ll need some help making the .def file changes for Windows.

The symbols listed in the build failure just need to be removed from JavaScriptCore.def I believe:

??$strtod@$00$00@WTF@@YANPBDPAPAD@Z
??$strtod@$00$0A@@WTF@@YANPBDPAPAD@Z
??$strtod@$0A@$00@WTF@@YANPBDPAPAD@Z
??$strtod@$0A@$0A@@WTF@@YANPBDPAPAD@Z</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>593702</commentid>
    <comment_count>10</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2012-04-02 12:45:34 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (In reply to comment #8)
&gt; &gt; I’ll need some help making the .def file changes for Windows.
&gt; 
&gt; The symbols listed in the build failure just need to be removed from JavaScriptCore.def I believe:
&gt; 
&gt; ??$strtod@$00$00@WTF@@YANPBDPAPAD@Z
&gt; ??$strtod@$00$0A@@WTF@@YANPBDPAPAD@Z
&gt; ??$strtod@$0A@$00@WTF@@YANPBDPAPAD@Z
&gt; ??$strtod@$0A@$0A@@WTF@@YANPBDPAPAD@Z

Thanks. You’re right, that’s step one. Then I will need to add new symbols to that .def file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>596228</commentid>
    <comment_count>11</comment_count>
      <attachid>135746</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2012-04-04 19:18:56 -0700</bug_when>
    <thetext>Created attachment 135746
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>596229</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-04-04 19:22:21 -0700</bug_when>
    <thetext>Attachment 135746 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source...&quot; exit_code: 1
Source/WTF/wtf/dtoa.h:53:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Source/WTF/wtf/dtoa/double-conversion.h:367:  processed_characters_count is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 2 in 16 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>596248</commentid>
    <comment_count>13</comment_count>
      <attachid>135746</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-04-04 19:51:26 -0700</bug_when>
    <thetext>Comment on attachment 135746
Patch

Attachment 135746 did not pass win-ews (win):
Output: http://queues.webkit.org/results/12339089</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>596563</commentid>
    <comment_count>14</comment_count>
      <attachid>135823</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2012-04-05 07:54:39 -0700</bug_when>
    <thetext>Created attachment 135823
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>596564</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-04-05 07:57:32 -0700</bug_when>
    <thetext>Attachment 135823 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source...&quot; exit_code: 1
Source/WTF/wtf/dtoa.h:53:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Source/WTF/wtf/dtoa/double-conversion.h:367:  processed_characters_count is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 2 in 17 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>597367</commentid>
    <comment_count>16</comment_count>
      <attachid>135823</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-04-06 08:14:35 -0700</bug_when>
    <thetext>Comment on attachment 135823
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>597461</commentid>
    <comment_count>17</comment_count>
      <attachid>135823</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-04-06 10:32:11 -0700</bug_when>
    <thetext>Comment on attachment 135823
Patch

Clearing flags on attachment: 135823

Committed r113454: &lt;http://trac.webkit.org/changeset/113454&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>597462</commentid>
    <comment_count>18</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-04-06 10:32:16 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>597604</commentid>
    <comment_count>19</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-04-06 13:24:02 -0700</bug_when>
    <thetext>(In reply to comment #18)
&gt; All reviewed patches have been landed.  Closing bug.

We&apos;re now hitting the following assertion on the GTK+ debug build. It seems related.


#0  0x00007f73893258d0 in WebCore::parseToDoubleForNumberType (string=&quot;1.2E65535&quot;, result=0x0) at ../../Source/WebCore/html/parser/HTMLParserIdioms.cpp:82
82	    ASSERT(isfinite(value));

#0  0x00007f73893258d0 in WebCore::parseToDoubleForNumberType (string=&quot;1.2E65535&quot;, result=0x0) at ../../Source/WebCore/html/parser/HTMLParserIdioms.cpp:82
#1  0x00007f738931391e in WebCore::NumberInputType::sanitizeValue (this=0x3e2b060, proposedValue=&quot;1.2E65535&quot;) at ../../Source/WebCore/html/NumberInputType.cpp:327
#2  0x00007f73892b45a0 in WebCore::HTMLInputElement::sanitizeValue (this=0x3a6e700, proposedValue=&quot;1.2E65535&quot;) at ../../Source/WebCore/html/HTMLInputElement.cpp:1384
#3  0x00007f73892b2e6e in WebCore::HTMLInputElement::setValue (this=0x3a6e700, value=&quot;1.2E65535&quot;, eventBehavior=WebCore::DispatchNoEvent) at ../../Source/WebCore/html/HTMLInputElement.cpp:1037
#4  0x00007f7389d17a44 in WebCore::setJSHTMLInputElementValue (exec=0x7f733c109090, thisObject=0x7f733c0da4a0, value=...) at DerivedSources/WebCore/JSHTMLInputElement.cpp:964
#5  0x00007f7389d196e1 in JSC::lookupPut&lt;WebCore::JSHTMLInputElement&gt; (exec=0x7f733c109090, propertyName=, value=..., table=0x7f738c6804b0, thisObj=0x7f733c0da4a0, shouldThrow=false) at ../../Source/JavaScriptCore/runtime/Lookup.h:362
#6  0x00007f7389d1940d in JSC::lookupPut&lt;WebCore::JSHTMLInputElement, WebCore::JSHTMLElement&gt; (exec=0x7f733c109090, propertyName=, value=..., table=0x7f738c6804b0, thisObj=0x7f733c0da4a0, slot=...) at ../../Source/JavaScriptCore/runtime/Lookup.h:378
#7  0x00007f7389d16bfc in WebCore::JSHTMLInputElement::put (cell=0x7f733c0da4a0, exec=0x7f733c109090, propertyName=, value=..., slot=...) at DerivedSources/WebCore/JSHTMLInputElement.cpp:731
#8  0x00007f738d148cfc in JSC::JSValue::put (this=0x7ffffcd57510, exec=0x7f733c109090, propertyName=, value=..., slot=...) at ../../Source/JavaScriptCore/runtime/JSObject.h:840
#9  0x00007f738d1f14a6 in JSC::cti_op_put_by_id_generic (args=0x7ffffcd57550) at ../../Source/JavaScriptCore/jit/JITStubs.cpp:1391
#10 0x00007f738d1f0b66 in JSC::JITThunks::tryCacheGetByID (callFrame=0x7ffffcd57500, codeBlock=0x7f733c0d9ea0, returnAddress=..., baseValue=..., propertyName=, slot=..., stubInfo=0x17104f0) at ../../Source/JavaScriptCore/jit/JITStubs.cpp:970
#11 0x00007f738d1c897f in JSC::JITCode::execute (this=0x7f733c05f3f8, registerFile=0x1cf08a8, callFrame=0x7f733c109038, globalData=0x17104f0) at ../../Source/JavaScriptCore/jit/JITCode.h:127
#12 0x00007f738d1c53f3 in JSC::Interpreter::execute (this=0x1cf0890, program=0x7f733c05f3e0, callFrame=0x7f733c0bf7e8, scopeChain=0x7f733c0df3a0, thisObj=0x7f733c0dffa0) at ../../Source/JavaScriptCore/interpreter/Interpreter.cpp:1198
#13 0x00007f738d27f538 in JSC::evaluate (exec=0x7f733c0bf7e8, scopeChain=0x7f733c0df3a0, source=..., thisValue=..., returnedException=0x7ffffcd58ba0) at ../../Source/JavaScriptCore/runtime/Completion.cpp:73
#14 0x00007f7388e684b0 in WebCore::JSMainThreadExecState::evaluate (exec=0x7f733c0bf7e8, chain=0x7f733c0df3a0, source=..., thisValue=..., exception=0x7ffffcd58ba0) at ../../Source/WebCore/bindings/js/JSMainThreadExecState.h:76
#15 0x00007f7388eac66d in WebCore::ScriptController::evaluateInWorld (this=0x16ec558, sourceCode=..., world=0x1cf4bc0) at ../../Source/WebCore/bindings/js/ScriptController.cpp:145
#16 0x00007f7388eac77a in WebCore::ScriptController::evaluate (this=0x16ec558, sourceCode=...) at ../../Source/WebCore/bindings/js/ScriptController.cpp:162
#17 0x00007f738915fd68 in WebCore::ScriptElement::executeScript (this=0x39b51a8, sourceCode=...) at ../../Source/WebCore/dom/ScriptElement.cpp:290
#18 0x00007f738915f83f in WebCore::ScriptElement::prepareScript (this=0x39b51a8, scriptStartPosition=..., supportLegacyTypes=WebCore::ScriptElement::DisallowLegacyTypeInTypeAttribute) at ../../Source/WebCore/dom/ScriptElement.cpp:235
#19 0x00007f7389328b46 in WebCore::HTMLScriptRunner::runScript (this=0x39bfa00, script=0x39b5130, scriptStartPosition=...) at ../../Source/WebCore/html/parser/HTMLScriptRunner.cpp:296
#20 0x00007f7389328165 in WebCore::HTMLScriptRunner::execute (this=0x39bfa00, scriptElement=..., scriptStartPosition=...) at ../../Source/WebCore/html/parser/HTMLScriptRunner.cpp:170
#21 0x00007f738931a486 in WebCore::HTMLDocumentParser::runScriptsForPausedTreeBuilder (this=0x3d79920) at ../../Source/WebCore/html/parser/HTMLDocumentParser.cpp:207
#22 0x00007f738931a543 in WebCore::HTMLDocumentParser::canTakeNextToken (this=0x3d79920, mode=WebCore::HTMLDocumentParser::AllowYield, session=...) at ../../Source/WebCore/html/parser/HTMLDocumentParser.cpp:225
#23 0x00007f738931a97d in WebCore::HTMLDocumentParser::pumpTokenizer (this=0x3d79920, mode=WebCore::HTMLDocumentParser::AllowYield) at ../../Source/WebCore/html/parser/HTMLDocumentParser.cpp:263
#24 0x00007f738931a2d5 in WebCore::HTMLDocumentParser::pumpTokenizerIfPossible (this=0x3d79920, mode=WebCore::HTMLDocumentParser::AllowYield) at ../../Source/WebCore/html/parser/HTMLDocumentParser.cpp:177
#25 0x00007f738931af26 in WebCore::HTMLDocumentParser::append (this=0x3d79920, source=...) at ../../Source/WebCore/html/parser/HTMLDocumentParser.cpp:370
#26 0x00007f73890942cc in WebCore::DecodedDataDocumentParser::appendBytes (this=0x3d79920, writer=0x3c3cdc0, data=0x3ef9620 &quot;&lt;!DOCTYPE html&gt;\n&lt;html&gt;\n&lt;head&gt;\n&lt;script src=\&quot;../../../fast/js/resources/js-test-pre.js\&quot;&gt;&lt;/script&gt;\n&lt;/head&gt;\n&lt;body&gt;\n&lt;script&gt;\ndescription(&apos;This test aims to check for typeMismatch flag with type=number inpu&quot;..., length=2069) at ../../Source/WebCore/dom/DecodedDataDocumentParser.cpp:50
#27 0x00007f73894b26e6 in WebCore::DocumentWriter::addData (this=0x3c3cdc0, bytes=0x3ef9620 &quot;&lt;!DOCTYPE html&gt;\n&lt;html&gt;\n&lt;head&gt;\n&lt;script src=\&quot;../../../fast/js/resources/js-test-pre.js\&quot;&gt;&lt;/script&gt;\n&lt;/head&gt;\n&lt;body&gt;\n&lt;script&gt;\ndescription(&apos;This test aims to check for typeMismatch flag with type=number inpu&quot;..., length=2069) at ../../Source/WebCore/loader/DocumentWriter.cpp:218
#28 0x00007f73894a666e in WebCore::DocumentLoader::commitData (this=0x3c3cca0, bytes=0x3ef9620 &quot;&lt;!DOCTYPE html&gt;\n&lt;html&gt;\n&lt;head&gt;\n&lt;script src=\&quot;../../../fast/js/resources/js-test-pre.js\&quot;&gt;&lt;/script&gt;\n&lt;/head&gt;\n&lt;body&gt;\n&lt;script&gt;\ndescription(&apos;This test aims to check for typeMismatch flag with type=number inpu&quot;..., length=2069) at ../../Source/WebCore/loader/DocumentLoader.cpp:324
#29 0x00007f7388c492da in WebKit::FrameLoaderClient::committedLoad (this=0x16cbc90, loader=0x3c3cca0, data=0x3ef9620 &quot;&lt;!DOCTYPE html&gt;\n&lt;html&gt;\n&lt;head&gt;\n&lt;script src=\&quot;../../../fast/js/resources/js-test-pre.js\&quot;&gt;&lt;/script&gt;\n&lt;/head&gt;\n&lt;body&gt;\n&lt;script&gt;\ndescription(&apos;This test aims to check for typeMismatch flag with type=number inpu&quot;..., length=2069) at ../../Source/WebKit/gtk/WebCoreSupport/FrameLoaderClientGtk.cpp:170
#30 0x00007f73894a6541 in WebCore::DocumentLoader::commitLoad (this=0x3c3cca0, data=0x3ef9620 &quot;&lt;!DOCTYPE html&gt;\n&lt;html&gt;\n&lt;head&gt;\n&lt;script src=\&quot;../../../fast/js/resources/js-test-pre.js\&quot;&gt;&lt;/script&gt;\n&lt;/head&gt;\n&lt;body&gt;\n&lt;script&gt;\ndescription(&apos;This test aims to check for typeMismatch flag with type=number inpu&quot;..., length=2069) at ../../Source/WebCore/loader/DocumentLoader.cpp:310
#31 0x00007f73894a6728 in WebCore::DocumentLoader::receivedData (this=0x3c3cca0, data=0x3ef9620 &quot;&lt;!DOCTYPE html&gt;\n&lt;html&gt;\n&lt;head&gt;\n&lt;script src=\&quot;../../../fast/js/resources/js-test-pre.js\&quot;&gt;&lt;/script&gt;\n&lt;/head&gt;\n&lt;body&gt;\n&lt;script&gt;\ndescription(&apos;This test aims to check for typeMismatch flag with type=number inpu&quot;..., length=2069) at ../../Source/WebCore/loader/DocumentLoader.cpp:336
#32 0x00007f73894f2cc7 in WebCore::MainResourceLoader::addData (this=0x3c84740, data=0x3ef9620 &quot;&lt;!DOCTYPE html&gt;\n&lt;html&gt;\n&lt;head&gt;\n&lt;script src=\&quot;../../../fast/js/resources/js-test-pre.js\&quot;&gt;&lt;/script&gt;\n&lt;/head&gt;\n&lt;body&gt;\n&lt;script&gt;\ndescription(&apos;This test aims to check for typeMismatch flag with type=number inpu&quot;..., length=2069, allAtOnce=false) at ../../Source/WebCore/loader/MainResourceLoader.cpp:175
#33 0x00007f738950043f in WebCore::ResourceLoader::didReceiveData (this=0x3c84740, data=0x3ef9620 &quot;&lt;!DOCTYPE html&gt;\n&lt;html&gt;\n&lt;head&gt;\n&lt;script src=\&quot;../../../fast/js/resources/js-test-pre.js\&quot;&gt;&lt;/script&gt;\n&lt;/head&gt;\n&lt;body&gt;\n&lt;script&gt;\ndescription(&apos;This test aims to check for typeMismatch flag with type=number inpu&quot;..., length=2069, encodedDataLength=2069, allAtOnce=false) at ../../Source/WebCore/loader/ResourceLoader.cpp:288
#34 0x00007f73894f411a in WebCore::MainResourceLoader::didReceiveData (this=0x3c84740, data=0x3ef9620 &quot;&lt;!DOCTYPE html&gt;\n&lt;html&gt;\n&lt;head&gt;\n&lt;script src=\&quot;../../../fast/js/resources/js-test-pre.js\&quot;&gt;&lt;/script&gt;\n&lt;/head&gt;\n&lt;body&gt;\n&lt;script&gt;\ndescription(&apos;This test aims to check for typeMismatch flag with type=number inpu&quot;..., length=2069, encodedDataLength=2069, allAtOnce=false) at ../../Source/WebCore/loader/MainResourceLoader.cpp:460
#35 0x00007f7389500d52 in WebCore::ResourceLoader::didReceiveData (this=0x3c84740, data=0x3ef9620 &quot;&lt;!DOCTYPE html&gt;\n&lt;html&gt;\n&lt;head&gt;\n&lt;script src=\&quot;../../../fast/js/resources/js-test-pre.js\&quot;&gt;&lt;/script&gt;\n&lt;/head&gt;\n&lt;body&gt;\n&lt;script&gt;\ndescription(&apos;This test aims to check for typeMismatch flag with type=number inpu&quot;..., length=2069, encodedDataLength=2069) at ../../Source/WebCore/loader/ResourceLoader.cpp:442
#36 0x00007f73896a47d2 in WebCore::readCallback (source=0x1ebaf60, asyncResult=0x1f022a0, data=0x3cfc0b0) at ../../Source/WebCore/platform/network/soup/ResourceHandleSoup.cpp:679
#37 0x00007f73868deb6f in async_ready_callback_wrapper () from /home/slave/webkitgtk/gtk-linux-64-debug/build/WebKitBuild/Dependencies/Root/lib64/libgio-2.0.so.0
#38 0x00007f73868f5a83 in g_simple_async_result_complete () from /home/slave/webkitgtk/gtk-linux-64-debug/build/WebKitBuild/Dependencies/Root/lib64/libgio-2.0.so.0
#39 0x00007f73868f5c4f in complete_in_idle_cb_for_thread () from /home/slave/webkitgtk/gtk-linux-64-debug/build/WebKitBuild/Dependencies/Root/lib64/libgio-2.0.so.0
#40 0x00007f73867813f3 in g_idle_dispatch () from /home/slave/webkitgtk/gtk-linux-64-debug/build/WebKitBuild/Dependencies/Root/lib64/libglib-2.0.so.0
#41 0x00007f738677ec8a in g_main_dispatch () from /home/slave/webkitgtk/gtk-linux-64-debug/build/WebKitBuild/Dependencies/Root/lib64/libglib-2.0.so.0
#42 0x00007f738677f950 in g_main_context_dispatch () from /home/slave/webkitgtk/gtk-linux-64-debug/build/WebKitBuild/Dependencies/Root/lib64/libglib-2.0.so.0
#43 0x00007f738677fb3a in g_main_context_iterate () from /home/slave/webkitgtk/gtk-linux-64-debug/build/WebKitBuild/Dependencies/Root/lib64/libglib-2.0.so.0
#44 0x00007f738677ff70 in g_main_loop_run () from /home/slave/webkitgtk/gtk-linux-64-debug/build/WebKitBuild/Dependencies/Root/lib64/libglib-2.0.so.0
#45 0x00007f7387656e99 in gtk_main () from /home/slave/webkitgtk/gtk-linux-64-debug/build/WebKitBuild/Dependencies/Root/lib64/libgtk-3.so.0
#46 0x000000000045b2cc in runTest (testPathOrURL=...) at ../../Tools/DumpRenderTree/gtk/DumpRenderTree.cpp:705
#47 0x000000000045a944 in runTestingServerLoop () at ../../Tools/DumpRenderTree/gtk/DumpRenderTree.cpp:492
#48 0x000000000045d960 in main (argc=2, argv=0x7ffffcd5a268) at ../../Tools/DumpRenderTree/gtk/DumpRenderTree.cpp:1387

It seems like it might be related.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>597718</commentid>
    <comment_count>20</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2012-04-06 15:20:39 -0700</bug_when>
    <thetext>Not sure why this is happening on GTK but not Mac; I ran the regression tests on my Mac with a debug build.

I am not at a computer with a source tree so I can’t fix this right now, but the fix is to roll back the change to HTMLParserIdioms.cpp, so please feel free to do that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>597731</commentid>
    <comment_count>21</comment_count>
    <who name="James Simonsen">simonjam</who>
    <bug_when>2012-04-06 15:28:12 -0700</bug_when>
    <thetext>(In reply to comment #20)
&gt; Not sure why this is happening on GTK but not Mac; I ran the regression tests on my Mac with a debug build.
&gt; 
&gt; I am not at a computer with a source tree so I can’t fix this right now, but the fix is to roll back the change to HTMLParserIdioms.cpp, so please feel free to do that.

Chrome is hitting the same DCHECK on all 3 platforms. It&apos;s while running fast/forms/number/ValidityState-typeMismatch-number.html

I&apos;ll look into rolling out the HTMLParserIdioms.cpp change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>597772</commentid>
    <comment_count>22</comment_count>
    <who name="James Simonsen">simonjam</who>
    <bug_when>2012-04-06 15:57:42 -0700</bug_when>
    <thetext>(In reply to comment #21)
&gt; I&apos;ll look into rolling out the HTMLParserIdioms.cpp change.

Rolled out here: https://bugs.webkit.org/show_bug.cgi?id=83402</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>135031</attachid>
            <date>2012-04-02 00:15:12 -0700</date>
            <delta_ts>2012-04-02 00:27:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-82857-20120402001511.patch</filename>
            <type>text/plain</type>
            <size>62716</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTEyODMxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM5IEBA
CisyMDEyLTA0LTAxICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBT
dHJlYW1saW5lIHN0cnRvZCBhbmQgZml4IHNvbWUgcmVsYXRlZCBwcm9ibGVtcworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODI4NTcKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHBhcnNlci9MZXhlci5jcHA6
CisgICAgICAgIChKU0M6OkxleGVyPD46OmxleCk6IFVzZSBwYXJzZURvdWJsZS4gU2luY2Ugd2Ug
aGF2ZSBhbHJlYWR5IHNjYW5uZWQgdGhlIG51bWJlcgorICAgICAgICBhbmQgd2Uga25vdyBpdCBo
YXMgb25seSBjb3JyZWN0IGNoYXJhY3RlcnMsIGxlYWRpbmcgc3BhY2VzLCB0cmFpbGluZyBqdW5r
LCBhbmQKKyAgICAgICAgdHJhaWxpbmcgc3BhY2VzIGFyZSBub3QgYSBwb3NzaWJpbGl0eS4gTm8g
bmVlZCB0byBhZGQgYSB0cmFpbGluZyBudWxsIGNoYXJhY3Rlci4KKworICAgICAgICAqIHJ1bnRp
bWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpwYXJzZUludCk6
IENoYW5nZWQgb3ZlcmZsb3cgYmFzZWQgMTAgY2FzZSB0byB1c2UgcGFyc2VEb3VibGUuIE5vIG5l
ZWQKKyAgICAgICAgdG8gYWxsb3cgdHJhaWxpbmcganVuayBzaW5jZSB0aGUgY29kZSBhYm92ZSBh
bHJlYWR5IGFsbG93cyBvbmx5IG51bWVyaWMgZGlnaXRzCisgICAgICAgIGluIHRoZSBzdHJpbmcu
IFRoaXMgY29kZSBwYXRoIGlzIHVzZWQgb25seSBpbiB1bnVzdWFsIGNhc2VzLCBzbyBpdCdzIG5v
dAorICAgICAgICBvcHRpbWl6ZWQgZm9yIDgtYml0IHN0cmluZ3MsIGJ1dCBlYXNpbHkgY291bGQg
YmUuCisgICAgICAgIChKU0M6OmpzU3RyRGVjaW1hbExpdGVyYWwpOiBSZW1vdmVkIHRoZSBhbGxv
dyB0cmFpbGluZyBqdW5rIGFyZ3VtZW50IHRvIHRoaXMKKyAgICAgICAgZnVuY3Rpb24gdGVtcGxh
dGUgYmVjYXVzZSBhbGwgdGhlIGNhbGxlcnMgYXJlIE9LIHdpdGggdHJhaWxpbmcganVuay4gVXNl
IHRoZQorICAgICAgICBwYXJzZURvdWJsZSBmdW5jdGlvbi4gTm8gbmVlZCB0byBjb3B5IHRoZSBk
YXRhIGludG8gYSBieXRlIGJ1ZmZlciwgYmVjYXVzZQorICAgICAgICBwYXJzZURvdWJsZSBoYW5k
bGVzIHRoYXQuCisgICAgICAgIChKU0M6OnRvRG91YmxlKTogR290IHJpZCBvZiB0aGUgRGlzYWxs
b3dUcmFpbGluZ0p1bmsgYXJndW1lbnQgdG8gdGhlCisgICAgICAgIGpzU3RyRGVjaW1hbExpdGVy
YWwgZnVuY3Rpb24gdGVtcGxhdGUuIFRoYXQncyBPSyBiZWNhdXNlIHRoaXMgZnVuY3Rpb24KKyAg
ICAgICAgYWxyZWFkeSBjaGVja3MgZm9yIHRyYWlsaW5nIGp1bmsgYW5kIGhhbmRsZXMgaXQgYXBw
cm9wcmlhdGVseS4gVGhlIG9sZCBjb2RlCisgICAgICAgIHBhdGggd2FzIGRvaW5nIGl0IHR3aWNl
LgorICAgICAgICAoSlNDOjpwYXJzZUZsb2F0KTogR290IHJpZCBvZiB0aGUgQWxsb3dUcmFpbGlu
Z0p1bmsgYXJndW1lbnQgdG8gdGhlCisgICAgICAgIGpzU3RyRGVjaW1hbExpdGVyYWwgZnVuY3Rp
b24gdGVtcGxhdGU7IHRoZSB0ZW1wbGF0ZSBhbGxvd3MganVuayB1bmNvbmRpdGlvbmFsbHkuCisK
KyAgICAgICAgKiBydW50aW1lL0xpdGVyYWxQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjo6Okxl
eGVyOjpsZXhOdW1iZXIpOiBVc2UgcGFyc2VEb3VibGUuIFNpbmNlIHdlIGhhdmUgYWxyZWFkeSBz
Y2FubmVkIHRoZSBudW1iZXIKKyAgICAgICAgYW5kIHdlIGtub3cgaXQgaGFzIG9ubHkgY29ycmVj
dCBjaGFyYWN0ZXJzLCBsZWFkaW5nIHNwYWNlcywgdHJhaWxpbmcganVuaywgYW5kCisgICAgICAg
IHRyYWlsaW5nIHNwYWNlcyBhcmUgbm90IGEgcG9zc2liaWxpdHkuIE5vIG5lZWQgdG8gYWRkIGEg
dHJhaWxpbmcgbnVsbCBjaGFyYWN0ZXIuCisgICAgICAgIE5vIG5lZWQgdG8gY29weSB0aGUgZGF0
YSBpbnRvIGEgYnl0ZSBidWZmZXIsIGJlY2F1c2UgcGFyc2VEb3VibGUgaGFuZGxlcyB0aGF0Lgor
ICAgICAgICBXZSBjb3VsZCBvcHRpbWl6ZSB0aGUgVUNoYXIgY2FzZSBldmVuIG1vcmUgYmVjYXVz
ZSB3ZSBrbm93IGFsbCB0aGUgY2hhcmFjdGVycworICAgICAgICBhcmUgQVNDSUksIGJ1dCBub3Qg
ZG9pbmcgdGhhdCBhdCB0aGlzIHRpbWUuCisKIDIwMTItMDQtMDEgIERhcmluIEFkbGVyICA8ZGFy
aW5AYXBwbGUuY29tPgogCiAgICAgICAgIEZpeCBpbmNvcnJlY3QgcGF0aCBmb3IgbGliV1RGLmEg
aW4gTWFjIHByb2plY3QgZmlsZS4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIv
TGV4ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTGV4
ZXIuY3BwCShyZXZpc2lvbiAxMTI4MTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2Vy
L0xleGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ3MywxNCArMTQ3MywxNCBAQCBzdGFydDoK
IGluTnVtYmVyQWZ0ZXJEZWNpbWFsUG9pbnQ6CiAgICAgICAgICAgICAgICAgICAgIHBhcnNlTnVt
YmVyQWZ0ZXJEZWNpbWFsUG9pbnQoKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgaWYgKChtX2N1cnJlbnQgfCAweDIwKSA9PSAnZScpCisgICAgICAgICAgICAgICAgaWYgKCht
X2N1cnJlbnQgfCAweDIwKSA9PSAnZScpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFwYXJz
ZU51bWJlckFmdGVyRXhwb25lbnRJbmRpY2F0b3IoKSkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgbV9sZXhFcnJvck1lc3NhZ2UgPSAiTm9uLW51bWJlciBmb3VuZCBhZnRlciBleHBvbmVudCBp
bmRpY2F0b3IiOwogICAgICAgICAgICAgICAgICAgICAgICAgZ290byByZXR1cm5FcnJvcjsKICAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIC8vIE51bGwtdGVybWluYXRlIHN0
cmluZyBmb3Igc3RydG9kLgotICAgICAgICAgICAgICAgIG1fYnVmZmVyOC5hcHBlbmQoJ1wwJyk7
Ci0gICAgICAgICAgICAgICAgdG9rZW5EYXRhLT5kb3VibGVWYWx1ZSA9IFdURjo6c3RydG9kPFdU
Rjo6QWxsb3dUcmFpbGluZ0p1bmssIFdURjo6RGlzYWxsb3dUcmFpbGluZ1NwYWNlcz4ocmVpbnRl
cnByZXRfY2FzdDxjb25zdCBjaGFyKj4obV9idWZmZXI4LmRhdGEoKSksIDApOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBzaXplX3QgcGFyc2VkTGVuZ3RoOworICAgICAgICAg
ICAgICAgIHRva2VuRGF0YS0+ZG91YmxlVmFsdWUgPSBwYXJzZURvdWJsZShtX2J1ZmZlcjguZGF0
YSgpLCBtX2J1ZmZlcjguc2l6ZSgpLCBwYXJzZWRMZW5ndGgpOwogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgdG9rZW4gPSBOVU1CRVI7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5j
cHAJKHJldmlzaW9uIDExMjgxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
R2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAK
IC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDIgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2Rl
Lm9yZykKICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkK
LSAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIw
MDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAw
MywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3IENhbWVyb24gWndhcmlj
aCAoY3d6d2FyaWNoQHV3YXRlcmxvby5jYSkKICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgTWFrcyBP
cmxvdmljaAogICoKQEAgLTI5NSwxNyArMjk1LDIwIEBAIHN0YXRpYyBkb3VibGUgcGFyc2VJbnQo
Y29uc3QgVVN0cmluZyYgcywKICAgICAgICAgbnVtYmVyICs9IGRpZ2l0OwogICAgICAgICArK3A7
CiAgICAgfQotICAgIGlmIChudW1iZXIgPj0gbWFudGlzc2FPdmVyZmxvd0xvd2VyQm91bmQpIHsK
LSAgICAgICAgaWYgKHJhZGl4ID09IDEwKQotICAgICAgICAgICAgbnVtYmVyID0gV1RGOjpzdHJ0
b2Q8V1RGOjpBbGxvd1RyYWlsaW5nSnVuaywgV1RGOjpEaXNhbGxvd1RyYWlsaW5nU3BhY2VzPihz
LnN1YnN0cmluZ1NoYXJpbmdJbXBsKGZpcnN0RGlnaXRQb3NpdGlvbiwgcCAtIGZpcnN0RGlnaXRQ
b3NpdGlvbikudXRmOCgpLmRhdGEoKSwgMCk7Ci0gICAgICAgIGVsc2UgaWYgKHJhZGl4ID09IDIg
fHwgcmFkaXggPT0gNCB8fCByYWRpeCA9PSA4IHx8IHJhZGl4ID09IDE2IHx8IHJhZGl4ID09IDMy
KQotICAgICAgICAgICAgbnVtYmVyID0gcGFyc2VJbnRPdmVyZmxvdyhzLnN1YnN0cmluZ1NoYXJp
bmdJbXBsKGZpcnN0RGlnaXRQb3NpdGlvbiwgcCAtIGZpcnN0RGlnaXRQb3NpdGlvbikudXRmOCgp
LmRhdGEoKSwgcCAtIGZpcnN0RGlnaXRQb3NpdGlvbiwgcmFkaXgpOwotICAgIH0KIAogICAgIC8v
IDEyLiBJZiBaIGlzIGVtcHR5LCByZXR1cm4gTmFOLgogICAgIGlmICghc2F3RGlnaXQpCiAgICAg
ICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1aWV0X05hTigpOwogCisg
ICAgLy8gQWx0ZXJuYXRlIGNvZGUgcGF0aCBmb3IgY2VydGFpbiBsYXJnZSBudW1iZXJzLgorICAg
IGlmIChudW1iZXIgPj0gbWFudGlzc2FPdmVyZmxvd0xvd2VyQm91bmQpIHsKKyAgICAgICAgaWYg
KHJhZGl4ID09IDEwKSB7CisgICAgICAgICAgICBzaXplX3QgcGFyc2VkTGVuZ3RoOworICAgICAg
ICAgICAgbnVtYmVyID0gcGFyc2VEb3VibGUocy5jaGFyYWN0ZXJzKCkgKyBmaXJzdERpZ2l0UG9z
aXRpb24sIHAgLSBmaXJzdERpZ2l0UG9zaXRpb24sIHBhcnNlZExlbmd0aCk7CisgICAgICAgIH0g
ZWxzZSBpZiAocmFkaXggPT0gMiB8fCByYWRpeCA9PSA0IHx8IHJhZGl4ID09IDggfHwgcmFkaXgg
PT0gMTYgfHwgcmFkaXggPT0gMzIpCisgICAgICAgICAgICBudW1iZXIgPSBwYXJzZUludE92ZXJm
bG93KHMuc3Vic3RyaW5nU2hhcmluZ0ltcGwoZmlyc3REaWdpdFBvc2l0aW9uLCBwIC0gZmlyc3RE
aWdpdFBvc2l0aW9uKS51dGY4KCkuZGF0YSgpLCBwIC0gZmlyc3REaWdpdFBvc2l0aW9uLCByYWRp
eCk7CisgICAgfQorCiAgICAgLy8gMTUuIFJldHVybiBzaWduIHggbnVtYmVyLgogICAgIHJldHVy
biBzaWduICogbnVtYmVyOwogfQpAQCAtMzU2LDI1ICszNTksMTUgQEAgc3RhdGljIGRvdWJsZSBq
c0hleEludGVnZXJMaXRlcmFsKGNvbnN0IAogfQogCiAvLyBTZWUgZWNtYS0yNjIgOS4zLjEKLXRl
bXBsYXRlIDxXVEY6OkFsbG93VHJhaWxpbmdKdW5rVGFnIGFsbG93VHJhaWxpbmdKdW5rLCB0eXBl
bmFtZSBDaGFyVHlwZT4KK3RlbXBsYXRlIDx0eXBlbmFtZSBDaGFyVHlwZT4KIHN0YXRpYyBkb3Vi
bGUganNTdHJEZWNpbWFsTGl0ZXJhbChjb25zdCBDaGFyVHlwZSomIGRhdGEsIGNvbnN0IENoYXJU
eXBlKiBlbmQpCiB7CiAgICAgQVNTRVJUKGRhdGEgPCBlbmQpOwogCi0gICAgLy8gQ29weSB0aGUg
c3RpbmcgaW50byBhIG51bGwtdGVybWluYXRlZCBieXRlIGJ1ZmZlciwgYW5kIGNhbGwgc3RydG9k
LgotICAgIFZlY3RvcjxjaGFyLCAzMj4gYnl0ZUJ1ZmZlcjsKLSAgICBmb3IgKGNvbnN0IENoYXJU
eXBlKiBjaGFyYWN0ZXJzID0gZGF0YTsgY2hhcmFjdGVycyA8IGVuZDsgKytjaGFyYWN0ZXJzKSB7
Ci0gICAgICAgIENoYXJUeXBlIGNoYXJhY3RlciA9ICpjaGFyYWN0ZXJzOwotICAgICAgICBieXRl
QnVmZmVyLmFwcGVuZChpc0FTQ0lJKGNoYXJhY3RlcikgPyBzdGF0aWNfY2FzdDxjaGFyPihjaGFy
YWN0ZXIpIDogMCk7Ci0gICAgfQotICAgIGJ5dGVCdWZmZXIuYXBwZW5kKDApOwotICAgIGNoYXIq
IGVuZE9mTnVtYmVyOwotICAgIGRvdWJsZSBudW1iZXIgPSBXVEY6OnN0cnRvZDxhbGxvd1RyYWls
aW5nSnVuaywgV1RGOjpBbGxvd1RyYWlsaW5nU3BhY2VzPihieXRlQnVmZmVyLmRhdGEoKSwgJmVu
ZE9mTnVtYmVyKTsKLQotICAgIC8vIENoZWNrIGlmIHN0cnRvZCBmb3VuZCBhIG51bWJlcjsgaWYg
c28gcmV0dXJuIGl0LgotICAgIHB0cmRpZmZfdCBjb25zdW1lZCA9IGVuZE9mTnVtYmVyIC0gYnl0
ZUJ1ZmZlci5kYXRhKCk7Ci0gICAgaWYgKGNvbnN1bWVkKSB7Ci0gICAgICAgIGRhdGEgKz0gY29u
c3VtZWQ7CisgICAgc2l6ZV90IHBhcnNlZExlbmd0aDsKKyAgICBkb3VibGUgbnVtYmVyID0gcGFy
c2VEb3VibGUoZGF0YSwgZW5kIC0gZGF0YSwgcGFyc2VkTGVuZ3RoKTsKKyAgICBpZiAocGFyc2Vk
TGVuZ3RoKSB7CisgICAgICAgIGRhdGEgKz0gcGFyc2VkTGVuZ3RoOwogICAgICAgICByZXR1cm4g
bnVtYmVyOwogICAgIH0KIApAQCAtNDI1LDcgKzQxOCw3IEBAIHN0YXRpYyBkb3VibGUgdG9Eb3Vi
bGUoY29uc3QgQ2hhclR5cGUqIGMKICAgICBpZiAoY2hhcmFjdGVyc1swXSA9PSAnMCcgJiYgY2hh
cmFjdGVycyArIDIgPCBlbmRDaGFyYWN0ZXJzICYmIChjaGFyYWN0ZXJzWzFdIHwgMHgyMCkgPT0g
J3gnICYmIGlzQVNDSUlIZXhEaWdpdChjaGFyYWN0ZXJzWzJdKSkKICAgICAgICAgbnVtYmVyID0g
anNIZXhJbnRlZ2VyTGl0ZXJhbChjaGFyYWN0ZXJzLCBlbmRDaGFyYWN0ZXJzKTsKICAgICBlbHNl
Ci0gICAgICAgIG51bWJlciA9IGpzU3RyRGVjaW1hbExpdGVyYWw8V1RGOjpEaXNhbGxvd1RyYWls
aW5nSnVuaz4oY2hhcmFjdGVycywgZW5kQ2hhcmFjdGVycyk7CisgICAgICAgIG51bWJlciA9IGpz
U3RyRGVjaW1hbExpdGVyYWwoY2hhcmFjdGVycywgZW5kQ2hhcmFjdGVycyk7CiAgICAgCiAgICAg
Ly8gQWxsb3cgdHJhaWxpbmcgd2hpdGUgc3BhY2UuCiAgICAgZm9yICg7IGNoYXJhY3RlcnMgPCBl
bmRDaGFyYWN0ZXJzOyArK2NoYXJhY3RlcnMpIHsKQEAgLTQ4Miw3ICs0NzUsNyBAQCBzdGF0aWMg
ZG91YmxlIHBhcnNlRmxvYXQoY29uc3QgVVN0cmluZyYgCiAgICAgICAgIGlmIChkYXRhID09IGVu
ZCkKICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1aWV0
X05hTigpOwogCi0gICAgICAgIHJldHVybiBqc1N0ckRlY2ltYWxMaXRlcmFsPFdURjo6QWxsb3dU
cmFpbGluZ0p1bms+KGRhdGEsIGVuZCk7CisgICAgICAgIHJldHVybiBqc1N0ckRlY2ltYWxMaXRl
cmFsKGRhdGEsIGVuZCk7CiAgICAgfQogCiAgICAgY29uc3QgVUNoYXIqIGRhdGEgPSBzLmNoYXJh
Y3RlcnMxNigpOwpAQCAtNDk4LDcgKzQ5MSw3IEBAIHN0YXRpYyBkb3VibGUgcGFyc2VGbG9hdChj
b25zdCBVU3RyaW5nJiAKICAgICBpZiAoZGF0YSA9PSBlbmQpCiAgICAgICAgIHJldHVybiBzdGQ6
Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1aWV0X05hTigpOwogCi0gICAgcmV0dXJuIGpzU3Ry
RGVjaW1hbExpdGVyYWw8V1RGOjpBbGxvd1RyYWlsaW5nSnVuaz4oZGF0YSwgZW5kKTsKKyAgICBy
ZXR1cm4ganNTdHJEZWNpbWFsTGl0ZXJhbChkYXRhLCBlbmQpOwogfQogCiBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNFdmFsKEV4ZWNTdGF0ZSogZXhlYykKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xpdGVyYWxQYXJzZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xpdGVyYWxQYXJzZXIuY3BwCShyZXZp
c2lvbiAxMTI4MTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9MaXRlcmFsUGFy
c2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTI5LDE2ICs1MjksOCBAQCBUb2tlblR5cGUgTGl0
ZXJhbFBhcnNlcjxDaGFyVHlwZT46OkxleGVyCiAgICAgCiAgICAgdG9rZW4udHlwZSA9IFRva051
bWJlcjsKICAgICB0b2tlbi5lbmQgPSBtX3B0cjsKLSAgICBWZWN0b3I8Y2hhciwgNjQ+IGJ1ZmZl
cih0b2tlbi5lbmQgLSB0b2tlbi5zdGFydCArIDEpOwotICAgIGludCBpOwotICAgIGZvciAoaSA9
IDA7IGkgPCB0b2tlbi5lbmQgLSB0b2tlbi5zdGFydDsgaSsrKSB7Ci0gICAgICAgIEFTU0VSVChz
dGF0aWNfY2FzdDxjaGFyPih0b2tlbi5zdGFydFtpXSkgPT0gdG9rZW4uc3RhcnRbaV0pOwotICAg
ICAgICBidWZmZXJbaV0gPSBzdGF0aWNfY2FzdDxjaGFyPih0b2tlbi5zdGFydFtpXSk7Ci0gICAg
fQotICAgIGJ1ZmZlcltpXSA9IDA7Ci0gICAgY2hhciogZW5kOwotICAgIHRva2VuLm51bWJlclRv
a2VuID0gV1RGOjpzdHJ0b2Q8V1RGOjpBbGxvd1RyYWlsaW5nSnVuaywgV1RGOjpEaXNhbGxvd1Ry
YWlsaW5nU3BhY2VzPihidWZmZXIuZGF0YSgpLCAmZW5kKTsKLSAgICBBU1NFUlQoYnVmZmVyLmRh
dGEoKSArICh0b2tlbi5lbmQgLSB0b2tlbi5zdGFydCkgPT0gZW5kKTsKKyAgICBzaXplX3QgcGFy
c2VkTGVuZ3RoOworICAgIHRva2VuLm51bWJlclRva2VuID0gcGFyc2VEb3VibGUodG9rZW4uc3Rh
cnQsIHRva2VuLmVuZCAtIHRva2VuLnN0YXJ0LCBwYXJzZWRMZW5ndGgpOwogICAgIHJldHVybiBU
b2tOdW1iZXI7CiB9CiAKSW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMTI4MzEpCisrKyBTb3VyY2UvV1RGL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDcxIEBACisyMDEyLTA0LTAxICBEYXJp
biBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBTdHJlYW1saW5lIHN0cnRvZCBh
bmQgZml4IHNvbWUgcmVsYXRlZCBwcm9ibGVtcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODI4NTcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBSZXBsYWNlZCB0aGUgc3RydG9kIGZ1bmN0aW9uIHRlbXBsYXRl
IHdpdGggYSBwYXJzZURvdWJsZSBmdW5jdGlvbiwgZWxpbWluYXRpbmcKKyAgICAgICAgdGhlIGZv
bGxvd2luZyB1bm5lZWRlZCBmZWF0dXJlczoKKworICAgICAgICAtIG5lZWQgZm9yIGEgdHJhaWxp
bmcgbnVsbCBjaGFyYWN0ZXIgYW5kIGEgY2FsbCB0byBzdHJsZW4KKyAgICAgICAgLSBuZWVkbGVz
cyBjb252ZXJzaW9uIG9mIHN0cmluZyBsZW5ndGhzIGZyb20gc2l6ZV90IHRvIGludCBhbmQgYmFj
ayB0aGF0IGNyZWF0ZWQKKyAgICAgICAgICB0aGUgcG9zc2liaWxpdHkgb2YgaW5jb3JyZWN0IHRy
dW5jYXRpb24KKyAgICAgICAgLSBvbmUgbGV2ZWwgb2YgZnVuY3Rpb24gY2FsbDsgdXNlIGlubGlu
aW5nIGluc3RlYWQKKyAgICAgICAgLSBjb25zdHJ1Y3Rpb24gb2YgdGhlIFN0cmluZ1RvRG91Ymxl
Q29udmVydGVyIG9iamVjdDsgaXQgd2FzIHVzZWQgdG8gcGFzcworICAgICAgICAgIGFyZ3VtZW50
cyB0aGF0IGFyZSBrbm93biBhdCBjb21waWxlIHRpbWUKKyAgICAgICAgLSBtb3N0IG9mIHRoZSBT
dHJpbmdUb0RvdWJsZUNvbnZlcnRlcjo6U3RyaW5nVG9Eb3VibGUgZnVuY3Rpb24ncyBib2R5OyBp
dCB3YXMKKyAgICAgICAgICBjb2RlIHdlIGRpZCBub3QgbmVlZAorICAgICAgICAtIHBhcnNpbmcg
b2YgSW5maW5pdHkgYW5kIE5hTiBhdCB0aGUgc3RydG9kIGxldmVsOyBhZGRlZCByZWNlbnRseSB3
aGVuIHdlIG1vdmVkCisgICAgICAgICAgZnJvbSB0aGUgb2xkIHN0cnRvZCB0byB0aGUgbmV3IG9u
ZSwgYW5kIG5vdCBuZWVkZWQgb3IgaGVscGZ1bCBhdCB0aGlzIGxldmVsCisgICAgICAgIC0gbXVs
dGlwbGUgY29waWVzIG9mIGNvZGUgdG8gbmFycm93IHRvIHNpbmdsZSBieXRlIHN0cmluZ3M7IGlu
IG1hbnkgY2FzZXMKKyAgICAgICAgICB0aGlzIHdhcyBkb25lIGV2ZW4gd2hlbiBzdGFydGluZyB3
aXRoIGFuIExDaGFyIHN0cmluZyB0aGF0IGlzIGFscmVhZHkKKyAgICAgICAgICBzaW5nbGUtYnl0
ZSwgbm93IHdlIGhhbmRsZSB0aGlzIHdpdGggYW4gb3ZlcmxvYWQgb2YgcGFyc2VEb3VibGUKKwor
ICAgICAgICAqIHd0Zi9kdG9hLmNwcDoKKyAgICAgICAgUmVtb3ZlZCBhIGxvbmcgY29tbWVudCBh
Ym91dCB0aGUgb3JpZ2luYWwgc3RydG9kIGZ1bmN0aW9uIHRoYXQgbm8gbG9uZ2VyCisgICAgICAg
IGFwcGxpZXMgc2luY2Ugd2UgZGVsZXRlZCB0aGF0IGZ1bmN0aW9uIGxvbmcgYWdvLiBSZW1vdmVk
IGEgbG90IG9mIGluY2x1ZGVzLgorICAgICAgICBSZW1vdmVkIHRoZSBzdHJ0b2QgZnVuY3Rpb24g
dGVtcGxhdGVzIGFuZCBpdHMgaW5zdGFudGlhdGlvbnMsIHNpbmNlIHRoZXkKKyAgICAgICAgYXJl
IG5vdyByZXBsYWNlZCBieSB0aGUgcGFyc2VEb3VibGUgZnVuY3Rpb24uCisgICAgICAgIChXVEY6
OkludGVybmFsOjpwYXJzZURvdWJsZUZyb21Mb25nU3RyaW5nKTogQWRkZWQuCisgICAgICAgICog
d3RmL2R0b2EuaDoKKyAgICAgICAgQWRkZWQgYW4gaW5jbHVkZSBvZiBBU0NJSUNUeXBlLmggc28g
d2UgY2FuIHVzZSBpc0FTQ0lJIGluIGEgZnVuY3Rpb24gaW4gdGhpcworICAgICAgICBoZWFkZXIu
IExlZnQgdGhlIGhlcmV0b2ZvcmUgdW5uZWVkZWQgaW5jbHVkZSBvZiBkb3VibGUtY29udmVyc2lv
bi5oLCBzaW5jZSB3ZQorICAgICAgICBub3cgd2FudCB0byB1c2UgaXQgaW4gYSBmdW5jdGlvbiBp
biB0aGlzIGhlYWRlci4gUmVtb3ZlZCB0aGUgQWxsb3dUcmFpbGluZ0p1bmtUYWcKKyAgICAgICAg
YW5kIEFsbG93VHJhaWxpbmdTcGFjZXNUYWcgZW51bWVyYXRpb25zIGFuZCB0aGUgc3RydG9kIGZ1
bmN0aW9uIHRlbXBsYXRlLiBBZGRlZAorICAgICAgICBuZXcgcGFyc2VEb3VibGUgZnVuY3Rpb24s
IGFuZCBpbmxpbmUgaW1wbGVtZW50YXRpb24gb2YgaXQuCisKKyAgICAgICAgKiB3dGYvZHRvYS9k
b3VibGUtY29udmVyc2lvbi5jYzogUmVtb3ZlZCBxdWl0ZSBhIGJpdCBvZiB1bnVzZWQgY29kZSwg
aGFyZGNvZGluZworICAgICAgICBhbGwgdGhlIFN0cmluZ1RvRG91YmxlIGZ1bmN0aW9uIGFyZ3Vt
ZW50cyB0aGF0IGNvbWUgZnJvbSBkYXRhIG1lbWJlcnMgc28gaXQgY2FuCisgICAgICAgIGJlIGEg
bXVjaCBzbWFsbGVyIHN0YXRpYyBtZW1iZXIgZnVuY3Rpb24uIEFsc28gY2hhbmdlZCB0aGUgdHlw
ZXMgb2YgYXJndW1lbnRzCisgICAgICAgIGZyb20gaW50IHRvIHNpemVfdC4KKyAgICAgICAgKiB3
dGYvZHRvYS9kb3VibGUtY29udmVyc2lvbi5oOiBSZW1vdmVkIG1vc3Qgb2YgdGhlIFN0cmluZ1Rv
RG91YmxlQ29udmVydGVyCisgICAgICAgIGNsYXNzLCBsZWF2aW5nIG9ubHkgdGhlIGNvbnZlcnNp
b24gZnVuY3Rpb24gYXMgYSBzdGF0aWMgbWVtYmVyIGZ1bmN0aW9uLgorCisgICAgICAgICogd3Rm
L3RleHQvU3RyaW5nSW1wbC5jcHA6CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OnRvRG91Ymxl
KTogR290IHJpZCBvZiBkaWRSZWFkTnVtYmVyLgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjp0
b0Zsb2F0KTogRGl0dG8uCisgICAgICAgICogd3RmL3RleHQvU3RyaW5nSW1wbC5oOiBEaXR0by4K
KyAgICAgICAgKiB3dGYvdGV4dC9XVEZTdHJpbmcuY3BwOgorICAgICAgICAoV1RGOjpTdHJpbmc6
OnRvRG91YmxlKTogR290IHJpZCBvZiBkaWRSZWFkTnVtYmVyLgorICAgICAgICAoV1RGOjpTdHJp
bmc6OnRvRmxvYXQpOiBEaXR0by4KKyAgICAgICAgKFdURjo6dG9Eb3VibGVUeXBlKTogUmV3cm90
ZSB0aGlzIGZ1bmN0aW9uIHRvIHVzZSBwYXJzZURvdWJsZS4gTW92ZWQgdGhlIGNvZGUKKyAgICAg
ICAgdG8gc2tpcCBsZWFkaW5nIHNwYWNlcyBoZXJlLCBiZWNhdXNlIG90aGVyIGNhbGxlcnMgb2Yg
cGFyc2VEb3VibGUgZG9uJ3Qgd2FudAorICAgICAgICB0byBkbyB0aGF0LiBSZXB1cnBvc2VkIHRo
ZSBjaGVjayBmb3IgYW4gZW1wdHkgc3RyaW5nIHNvIGl0J3Mgbm93IHRoZSBzYW1lCisgICAgICAg
IGNvZGUgc2hhcmVkIGJ5IGFsbCB0aGUgInBhcnNlZCBub3RoaW5nIiBjYXNlcy4gUmVtb3ZlZCB0
aGUgY29kZSB0byBjb252ZXJ0CisgICAgICAgIHRoZSBidWZmZXIgdG8gQVNDSUkgZm9yIHR3byBy
ZWFzb25zOiAoMSkgV2UgZG9uJ3QgbmVlZCB0aGF0IGNvZGUgYXQgYWxsIHdoZW4KKyAgICAgICAg
Q2hhclR5cGUgaXMgTENoYXIsIGFuZCAoMikgV2Ugbm93IGhhbmRsZSB0aGlzIHRocm91Z2ggdGhl
IHR3byBvdmVybG9hZHMgZm9yCisgICAgICAgIHRoZSBwYXJzZURvdWJsZSBmdW5jdGlvbi4gRGlz
YWxsb3dpbmcgdHJhaWxpbmcganVuayBpcyBub3cgaGFuZGxlZCBoZXJlLAorICAgICAgICByYXRo
ZXIgdGhhbiBpbnNpZGUgcGFyc2VEb3VibGUuCisgICAgICAgIChXVEY6OmNoYXJhY3RlcnNUb0Rv
dWJsZSk6IFVwZGF0ZWQgZm9yIGNoYW5nZXMgdG8gdG9Eb3VibGVUeXBlLiBSZW1vdmVkIHRoZQor
ICAgICAgICBkaWRSZWFkTnVtYmVyIGFyZ3VtZW50LgorICAgICAgICAoV1RGOjpjaGFyYWN0ZXJz
VG9GbG9hdCk6IERpdHRvLiBBbHNvIGFkZGVkIG92ZXJsb2FkcyB0aGF0IHJldHVybiB0aGUgcGFy
c2VkCisgICAgICAgIGxlbmd0aC4gVGhlc2UgYXJlIGEgc2xpZ2h0bHkgbW9yZSBwb3dlcmZ1bCB3
YXkgdG8gZG8gd2hhdCBkaWRSZWFkTnVtYmVyIHdhcworICAgICAgICB1c2VkIGZvciBiZWZvcmUu
CisKKyAgICAgICAgKiB3dGYvdGV4dC9XVEZTdHJpbmcuaDogQWRkZWQgY29tbWVudHMsIGVsaW1p
bmF0ZWQgZGlkUmVhZE51bWJlciwgYW5kIGFkZGVkCisgICAgICAgIG92ZXJsb2FkcyBvZiBjaGFy
YWN0ZXJzVG9GbG9hdCB0aGF0IHJlcGxhY2UgY2hhcmFjdGVyc1RvRmxvYXRJZ25vcmluZ0p1bmsu
CisKIDIwMTItMDMtMzAgIERhdmlkIEJhcnIgIDxkYXZpZGJhcnJAY2hyb21pdW0ub3JnPgogCiAg
ICAgICAgIFNwbGl0IHVwIHRvcC1sZXZlbCAuZ2l0aWdub3JlIGFuZCAuZ2l0YXR0cmlidXRlcwpJ
bmRleDogU291cmNlL1dURi93dGYvZHRvYS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93
dGYvZHRvYS5jcHAJKHJldmlzaW9uIDExMjgxNikKKysrIFNvdXJjZS9XVEYvd3RmL2R0b2EuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zLDcgKzMsNyBAQAogICogVGhlIGF1dGhvciBvZiB0aGlzIHNv
ZnR3YXJlIGlzIERhdmlkIE0uIEdheS4KICAqCiAgKiBDb3B5cmlnaHQgKGMpIDE5OTEsIDIwMDAs
IDIwMDEgYnkgTHVjZW50IFRlY2hub2xvZ2llcy4KLSAqIENvcHlyaWdodCAoQykgMjAwMiwgMjAw
NSwgMjAwNiwgMjAwNywgMjAwOCwgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMTAsIDIw
MTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFBlcm1pc3Npb24gdG8g
dXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQog
ICogcHVycG9zZSB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0
aGlzIGVudGlyZSBub3RpY2UKQEAgLTMyLDU1ICszMiwxNCBAQAogICogZmlsZS4KICAqLwogCi0v
KiBzdHJ0b2QgZm9yIElFRUUtYXJpdGhtZXRpYyBtYWNoaW5lcy4KLSAqCi0gKiBUaGlzIHN0cnRv
ZCByZXR1cm5zIGEgbmVhcmVzdCBtYWNoaW5lIG51bWJlciB0byB0aGUgaW5wdXQgZGVjaW1hbAot
ICogc3RyaW5nIChvciBzZXRzIGVycm5vIHRvIEVSQU5HRSkuICBXaXRoIElFRUUgYXJpdGhtZXRp
YywgdGllcyBhcmUKLSAqIGJyb2tlbiBieSB0aGUgSUVFRSByb3VuZC1ldmVuIHJ1bGUuICBPdGhl
cndpc2UgdGllcyBhcmUgYnJva2VuIGJ5Ci0gKiBiaWFzZWQgcm91bmRpbmcgKGFkZCBoYWxmIGFu
ZCBjaG9wKS4KLSAqCi0gKiBJbnNwaXJlZCBsb29zZWx5IGJ5IFdpbGxpYW0gRC4gQ2xpbmdlcidz
IHBhcGVyICJIb3cgdG8gUmVhZCBGbG9hdGluZwotICogUG9pbnQgTnVtYmVycyBBY2N1cmF0ZWx5
IiBbUHJvYy4gQUNNIFNJR1BMQU4gJzkwLCBwcC4gOTItMTAxXS4KLSAqCi0gKiBNb2RpZmljYXRp
b25zOgotICoKLSAqICAgIDEuIFdlIG9ubHkgcmVxdWlyZSBJRUVFIGRvdWJsZS1wcmVjaXNpb24g
YXJpdGhtZXRpYyAobm90IElFRUUgZG91YmxlLWV4dGVuZGVkKS4KLSAqICAgIDIuIFdlIGdldCBi
eSB3aXRoIGZsb2F0aW5nLXBvaW50IGFyaXRobWV0aWMgaW4gYSBjYXNlIHRoYXQKLSAqICAgICAg
ICBDbGluZ2VyIG1pc3NlZCAtLSB3aGVuIHdlJ3JlIGNvbXB1dGluZyBkICogMTBebgotICogICAg
ICAgIGZvciBhIHNtYWxsIGludGVnZXIgZCBhbmQgdGhlIGludGVnZXIgbiBpcyBub3QgdG9vCi0g
KiAgICAgICAgbXVjaCBsYXJnZXIgdGhhbiAyMiAodGhlIG1heGltdW0gaW50ZWdlciBrIGZvciB3
aGljaAotICogICAgICAgIHdlIGNhbiByZXByZXNlbnQgMTBeayBleGFjdGx5KSwgd2UgbWF5IGJl
IGFibGUgdG8KLSAqICAgICAgICBjb21wdXRlIChkKjEwXmspICogMTBeKGUtaykgd2l0aCBqdXN0
IG9uZSByb3VuZG9mZi4KLSAqICAgIDMuIFJhdGhlciB0aGFuIGEgYml0LWF0LWEtdGltZSBhZGp1
c3RtZW50IG9mIHRoZSBiaW5hcnkKLSAqICAgICAgICByZXN1bHQgaW4gdGhlIGhhcmQgY2FzZSwg
d2UgdXNlIGZsb2F0aW5nLXBvaW50Ci0gKiAgICAgICAgYXJpdGhtZXRpYyB0byBkZXRlcm1pbmUg
dGhlIGFkanVzdG1lbnQgdG8gd2l0aGluCi0gKiAgICAgICAgb25lIGJpdDsgb25seSBpbiByZWFs
bHkgaGFyZCBjYXNlcyBkbyB3ZSBuZWVkIHRvCi0gKiAgICAgICAgY29tcHV0ZSBhIHNlY29uZCBy
ZXNpZHVhbC4KLSAqICAgIDQuIEJlY2F1c2Ugb2YgMy4sIHdlIGRvbid0IG5lZWQgYSBsYXJnZSB0
YWJsZSBvZiBwb3dlcnMgb2YgMTAKLSAqICAgICAgICBmb3IgdGVuLXRvLWUgKGp1c3Qgc29tZSBz
bWFsbCB0YWJsZXMsIGUuZy4gb2YgMTBeawotICogICAgICAgIGZvciAwIDw9IGsgPD0gMjIpLgot
ICovCi0KICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJkdG9hLmgiCiAKLSNpZiBIQVZF
KEVSUk5PX0gpCi0jaW5jbHVkZSA8ZXJybm8uaD4KLSNlbmRpZgotI2luY2x1ZGUgPGZsb2F0Lmg+
Ci0jaW5jbHVkZSA8bWF0aC5oPgotI2luY2x1ZGUgPHN0ZGludC5oPgogI2luY2x1ZGUgPHN0ZGlv
Lmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVkZSA8
d3RmL0Fsd2F5c0lubGluZS5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW5jbHVk
ZSA8d3RmL0Zhc3RNYWxsb2MuaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1
ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KLSNpbmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KICNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+Ci0jaW5jbHVkZSA8d3RmL2R0b2EvZG91YmxlLWNvbnZlcnNpb24u
aD4KIAogI2lmIENPTVBJTEVSKE1TVkMpCiAjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDI0NCkK
QEAgLTY0OCwyOSArNjA3LDYgQEAgc3RhdGljIGNvbnN0IGRvdWJsZSB0aW55dGVuc1tdID0geyAx
ZS0xNgogI2RlZmluZSBTY2FsZV9CaXQgMHgxMAogI2RlZmluZSBuX2JpZ3RlbnMgNQogCi10ZW1w
bGF0ZTxBbGxvd1RyYWlsaW5nSnVua1RhZyBhbGxvd1RyYWlsaW5nSnVuaywgQWxsb3dUcmFpbGlu
Z1NwYWNlc1RhZyBhbGxvd1RyYWlsaW5nU3BhY2VzPgotZG91YmxlIHN0cnRvZChjb25zdCBjaGFy
KiBzMDAsIGNoYXIqKiBzZSkKLXsKLSAgICBpbnQgbGVuZ3RoID0gc3RybGVuKHMwMCk7Ci0gICAg
ZG91YmxlX2NvbnZlcnNpb246OlN0cmluZ1RvRG91YmxlQ29udmVydGVyIGNvbnZlcnRlcigKLSAg
ICAgICAgKGFsbG93VHJhaWxpbmdKdW5rID8gZG91YmxlX2NvbnZlcnNpb246OlN0cmluZ1RvRG91
YmxlQ29udmVydGVyOjpBTExPV19UUkFJTElOR19KVU5LIDogMCkgfAotICAgICAgICAoYWxsb3dU
cmFpbGluZ1NwYWNlcyA/IGRvdWJsZV9jb252ZXJzaW9uOjpTdHJpbmdUb0RvdWJsZUNvbnZlcnRl
cjo6QUxMT1dfVFJBSUxJTkdfU1BBQ0VTIDogMCkgfAotICAgICAgICBkb3VibGVfY29udmVyc2lv
bjo6U3RyaW5nVG9Eb3VibGVDb252ZXJ0ZXI6OkFMTE9XX0xFQURJTkdfU1BBQ0VTLAotICAgICAg
ICAwLjAsIAotICAgICAgICAoYWxsb3dUcmFpbGluZ0p1bmsgPyBzdGQ6Om51bWVyaWNfbGltaXRz
PGRvdWJsZT46OnF1aWV0X05hTigpIDogMC4wKSwgCi0gICAgICAgICJJbmZpbml0eSIsICJOYU4i
KTsKLSAgICBpbnQgcHJvY2Vzc2VkQ2hhcmFjdGVyQ291bnQgPSAwOwotICAgIGRvdWJsZSByZXN1
bHQgPSBjb252ZXJ0ZXIuU3RyaW5nVG9Eb3VibGUoczAwLCBsZW5ndGgsICZwcm9jZXNzZWRDaGFy
YWN0ZXJDb3VudCk7Ci0gICAgaWYgKHNlKQotICAgICAgICAqc2UgPSBjb25zdF9jYXN0PGNoYXIq
PihzMDAgKyBwcm9jZXNzZWRDaGFyYWN0ZXJDb3VudCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0K
LQotdGVtcGxhdGUgZG91YmxlIHN0cnRvZDxBbGxvd1RyYWlsaW5nSnVuaywgQWxsb3dUcmFpbGlu
Z1NwYWNlcz4oY29uc3QgY2hhciosIGNoYXIqKik7Ci10ZW1wbGF0ZSBkb3VibGUgc3RydG9kPEFs
bG93VHJhaWxpbmdKdW5rLCBEaXNhbGxvd1RyYWlsaW5nU3BhY2VzPihjb25zdCBjaGFyKiwgY2hh
cioqKTsKLXRlbXBsYXRlIGRvdWJsZSBzdHJ0b2Q8RGlzYWxsb3dUcmFpbGluZ0p1bmssIEFsbG93
VHJhaWxpbmdTcGFjZXM+KGNvbnN0IGNoYXIqLCBjaGFyKiopOwotdGVtcGxhdGUgZG91YmxlIHN0
cnRvZDxEaXNhbGxvd1RyYWlsaW5nSnVuaywgRGlzYWxsb3dUcmFpbGluZ1NwYWNlcz4oY29uc3Qg
Y2hhciosIGNoYXIqKik7Ci0KIHN0YXRpYyBBTFdBWVNfSU5MSU5FIGludCBxdW9yZW0oQmlnSW50
JiBiLCBCaWdJbnQmIFMpCiB7CiAgICAgc2l6ZV90IG47CkBAIC0xMzYzLDQgKzEyOTksMTYgQEAg
Y29uc3QgY2hhciogbnVtYmVyVG9GaXhlZFdpZHRoU3RyaW5nKGRvdQogICAgIHJldHVybiBidWls
ZGVyLkZpbmFsaXplKCk7CiB9CiAKK25hbWVzcGFjZSBJbnRlcm5hbCB7CisKK2RvdWJsZSBwYXJz
ZURvdWJsZUZyb21Mb25nU3RyaW5nKGNvbnN0IFVDaGFyKiBzdHJpbmcsIHNpemVfdCBsZW5ndGgs
IHNpemVfdCYgcGFyc2VkTGVuZ3RoKQoreworICAgIFZlY3RvcjxMQ2hhcj4gY29udmVyc2lvbkJ1
ZmZlcihsZW5ndGgpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCisg
ICAgICAgIGNvbnZlcnNpb25CdWZmZXJbaV0gPSBpc0FTQ0lJKHN0cmluZ1tpXSkgPyBzdHJpbmdb
aV0gOiAwOworICAgIHJldHVybiBwYXJzZURvdWJsZShjb252ZXJzaW9uQnVmZmVyLmRhdGEoKSwg
bGVuZ3RoLCBwYXJzZWRMZW5ndGgpOworfQorCit9IC8vIG5hbWVzcGFjZSBJbnRlcm5hbAorCiB9
IC8vIG5hbWVzcGFjZSBXVEYKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL2R0b2EuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV1RGL3d0Zi9kdG9hLmgJKHJldmlzaW9uIDExMjgxNikKKysrIFNvdXJjZS9X
VEYvd3RmL2R0b2EuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiAgQ29w
eXJpZ2h0IChDKSAyMDAzLCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
ICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDgsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIxLDEzICsyMSwxNSBAQAogI2lmbmRl
ZiBXVEZfZHRvYV9oCiAjZGVmaW5lIFdURl9kdG9hX2gKIAorI2luY2x1ZGUgPHd0Zi9BU0NJSUNU
eXBlLmg+CiAjaW5jbHVkZSA8d3RmL2R0b2EvZG91YmxlLWNvbnZlcnNpb24uaD4KICNpbmNsdWRl
IDx3dGYvdW5pY29kZS9Vbmljb2RlLmg+CiAKIG5hbWVzcGFjZSBXVEYgeworCiBjbGFzcyBNdXRl
eDsKIAotZXh0ZXJuIFdURjo6TXV0ZXgqIHNfZHRvYVA1TXV0ZXg7CitleHRlcm4gTXV0ZXgqIHNf
ZHRvYVA1TXV0ZXg7CiAKIHR5cGVkZWYgY2hhciBEdG9hQnVmZmVyWzgwXTsKIApAQCAtMzUsMjIg
KzM3LDM4IEBAIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGR0b2EoRHRvYUJ1ZmZlciAKIFdURl9F
WFBPUlRfUFJJVkFURSB2b2lkIGR0b2FSb3VuZFNGKER0b2FCdWZmZXIgcmVzdWx0LCBkb3VibGUg
ZGQsIGludCBuZGlnaXRzLCBib29sJiBzaWduLCBpbnQmIGV4cG9uZW50LCB1bnNpZ25lZCYgcHJl
Y2lzaW9uKTsKIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGR0b2FSb3VuZERQKER0b2FCdWZmZXIg
cmVzdWx0LCBkb3VibGUgZGQsIGludCBuZGlnaXRzLCBib29sJiBzaWduLCBpbnQmIGV4cG9uZW50
LCB1bnNpZ25lZCYgcHJlY2lzaW9uKTsKIAotZW51bSBBbGxvd1RyYWlsaW5nSnVua1RhZyB7IERp
c2FsbG93VHJhaWxpbmdKdW5rID0gMCwgQWxsb3dUcmFpbGluZ0p1bmsgfTsKLWVudW0gQWxsb3dU
cmFpbGluZ1NwYWNlc1RhZyB7IERpc2FsbG93VHJhaWxpbmdTcGFjZXMgPSAwLCBBbGxvd1RyYWls
aW5nU3BhY2VzIH07Ci0KLS8vIHMwMDogaW5wdXQgc3RyaW5nLiBNdXN0IG5vdCBiZSAwIGFuZCBt
dXN0IGJlIHRlcm1pbmF0ZWQgYnkgMC4KLS8vIHNlOiAqc2Ugd2lsbCBoYXZlIHRoZSBsYXN0IGNv
bnN1bWVkIGNoYXJhY3RlciBwb3NpdGlvbiArIDEuCi10ZW1wbGF0ZTxBbGxvd1RyYWlsaW5nSnVu
a1RhZyBhbGxvd1RyYWlsaW5nSnVuaywgQWxsb3dUcmFpbGluZ1NwYWNlc1RhZyBhbGxvd1RyYWls
aW5nU3BhY2VzPgotZG91YmxlIHN0cnRvZChjb25zdCBjaGFyKiBzMDAsIGNoYXIqKiBzZSk7Ci0K
IC8vIFNpemUgPSA4MCBmb3Igc2l6ZW9mKER0b2FCdWZmZXIpICsgc29tZSBzaWduIGJpdHMsIGRl
Y2ltYWwgcG9pbnQsICdlJywgZXhwb25lbnQgZGlnaXRzLgogY29uc3QgdW5zaWduZWQgTnVtYmVy
VG9TdHJpbmdCdWZmZXJMZW5ndGggPSA5NjsKIHR5cGVkZWYgY2hhciBOdW1iZXJUb1N0cmluZ0J1
ZmZlcltOdW1iZXJUb1N0cmluZ0J1ZmZlckxlbmd0aF07CiB0eXBlZGVmIFVDaGFyIE51bWJlclRv
VVN0cmluZ0J1ZmZlcltOdW1iZXJUb1N0cmluZ0J1ZmZlckxlbmd0aF07CisKIFdURl9FWFBPUlRf
UFJJVkFURSBjb25zdCBjaGFyKiBudW1iZXJUb1N0cmluZyhkb3VibGUsIE51bWJlclRvU3RyaW5n
QnVmZmVyKTsKIGNvbnN0IGNoYXIqIG51bWJlclRvRml4ZWRQcmVjaXNpb25TdHJpbmcoZG91Ymxl
LCB1bnNpZ25lZCBzaWduaWZpY2FudEZpZ3VyZXMsIE51bWJlclRvU3RyaW5nQnVmZmVyLCBib29s
IHRydW5jYXRlVHJhaWxpbmdaZXJvcyA9IGZhbHNlKTsKIGNvbnN0IGNoYXIqIG51bWJlclRvRml4
ZWRXaWR0aFN0cmluZyhkb3VibGUsIHVuc2lnbmVkIGRlY2ltYWxQbGFjZXMsIE51bWJlclRvU3Ry
aW5nQnVmZmVyKTsKIAorZG91YmxlIHBhcnNlRG91YmxlKGNvbnN0IExDaGFyKiBzdHJpbmcsIHNp
emVfdCBsZW5ndGgsIHNpemVfdCYgcGFyc2VkTGVuZ3RoKTsKK2RvdWJsZSBwYXJzZURvdWJsZShj
b25zdCBVQ2hhciogc3RyaW5nLCBzaXplX3QgbGVuZ3RoLCBzaXplX3QmIHBhcnNlZExlbmd0aCk7
CisKK25hbWVzcGFjZSBJbnRlcm5hbCB7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIGRvdWJsZSBw
YXJzZURvdWJsZUZyb21Mb25nU3RyaW5nKGNvbnN0IFVDaGFyKiBzdHJpbmcsIHNpemVfdCBsZW5n
dGgsIHNpemVfdCYgcGFyc2VkTGVuZ3RoKTsKK30KKworaW5saW5lIGRvdWJsZSBwYXJzZURvdWJs
ZShjb25zdCBMQ2hhciogc3RyaW5nLCBzaXplX3QgbGVuZ3RoLCBzaXplX3QmIHBhcnNlZExlbmd0
aCkKK3sKKyAgICByZXR1cm4gZG91YmxlX2NvbnZlcnNpb246OlN0cmluZ1RvRG91YmxlQ29udmVy
dGVyOjpTdHJpbmdUb0RvdWJsZShyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihzdHJpbmcp
LCBsZW5ndGgsICZwYXJzZWRMZW5ndGgpOworfQorCitpbmxpbmUgZG91YmxlIHBhcnNlRG91Ymxl
KGNvbnN0IFVDaGFyKiBzdHJpbmcsIHNpemVfdCBsZW5ndGgsIHNpemVfdCYgcGFyc2VkTGVuZ3Ro
KQoreworICAgIGNvbnN0IHNpemVfdCBjb252ZXJzaW9uQnVmZmVyU2l6ZSA9IDY0OworICAgIGlm
IChsZW5ndGggPiBjb252ZXJzaW9uQnVmZmVyU2l6ZSkKKyAgICAgICAgcmV0dXJuIEludGVybmFs
OjpwYXJzZURvdWJsZUZyb21Mb25nU3RyaW5nKHN0cmluZywgbGVuZ3RoLCBwYXJzZWRMZW5ndGgp
OworICAgIExDaGFyIGNvbnZlcnNpb25CdWZmZXJbY29udmVyc2lvbkJ1ZmZlclNpemVdOworICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgc3RhdGljX2Nhc3Q8aW50PihsZW5ndGgpOyArK2kpCisgICAg
ICAgIGNvbnZlcnNpb25CdWZmZXJbaV0gPSBpc0FTQ0lJKHN0cmluZ1tpXSkgPyBzdHJpbmdbaV0g
OiAwOworICAgIHJldHVybiBwYXJzZURvdWJsZShjb252ZXJzaW9uQnVmZmVyLCBsZW5ndGgsIHBh
cnNlZExlbmd0aCk7Cit9CisgICAgCiB9IC8vIG5hbWVzcGFjZSBXVEYKIAogdXNpbmcgV1RGOjpO
dW1iZXJUb1N0cmluZ0J1ZmZlcjsKQEAgLTU4LDUgKzc2LDYgQEAgdXNpbmcgV1RGOjpOdW1iZXJU
b1VTdHJpbmdCdWZmZXI7CiB1c2luZyBXVEY6Om51bWJlclRvU3RyaW5nOwogdXNpbmcgV1RGOjpu
dW1iZXJUb0ZpeGVkUHJlY2lzaW9uU3RyaW5nOwogdXNpbmcgV1RGOjpudW1iZXJUb0ZpeGVkV2lk
dGhTdHJpbmc7Cit1c2luZyBXVEY6OnBhcnNlRG91YmxlOwogCiAjZW5kaWYgLy8gV1RGX2R0b2Ff
aApJbmRleDogU291cmNlL1dURi93dGYvZHRvYS9kb3VibGUtY29udmVyc2lvbi5jYwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9kdG9hL2RvdWJsZS1jb252ZXJzaW9uLmNjCShyZXZpc2lv
biAxMTI4MTYpCisrKyBTb3VyY2UvV1RGL3d0Zi9kdG9hL2RvdWJsZS1jb252ZXJzaW9uLmNjCSh3
b3JraW5nIGNvcHkpCkBAIC00MDksMjEgKzQwOSw2IEBAIG5hbWVzcGFjZSBkb3VibGVfY29udmVy
c2lvbiB7CiAgICAgfQogICAgIAogICAgIAotICAgIC8vIENvbnN1bWVzIHRoZSBnaXZlbiBzdWJz
dHJpbmcgZnJvbSB0aGUgaXRlcmF0b3IuCi0gICAgLy8gUmV0dXJucyBmYWxzZSwgaWYgdGhlIHN1
YnN0cmluZyBkb2VzIG5vdCBtYXRjaC4KLSAgICBzdGF0aWMgYm9vbCBDb25zdW1lU3ViU3RyaW5n
KGNvbnN0IGNoYXIqKiBjdXJyZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgY2hhciogZW5kLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
Y2hhciogc3Vic3RyaW5nKSB7Ci0gICAgICAgIEFTU0VSVCgqKmN1cnJlbnQgPT0gKnN1YnN0cmlu
Zyk7Ci0gICAgICAgIGZvciAoc3Vic3RyaW5nKys7ICpzdWJzdHJpbmcgIT0gJ1wwJzsgc3Vic3Ry
aW5nKyspIHsKLSAgICAgICAgICAgICsrKmN1cnJlbnQ7Ci0gICAgICAgICAgICBpZiAoKmN1cnJl
bnQgPT0gZW5kIHx8ICoqY3VycmVudCAhPSAqc3Vic3RyaW5nKSByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIH0KLSAgICAgICAgKysqY3VycmVudDsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQot
ICAgIAotICAgIAogICAgIC8vIE1heGltdW0gbnVtYmVyIG9mIHNpZ25pZmljYW50IGRpZ2l0cyBp
biBkZWNpbWFsIHJlcHJlc2VudGF0aW9uLgogICAgIC8vIFRoZSBsb25nZXN0IHBvc3NpYmxlIGRv
dWJsZSBpbiBkZWNpbWFsIHJlcHJlc2VudGF0aW9uIGlzCiAgICAgLy8gKDJeNTMgLSAxKSAqIDIg
XiAtMTA3NCB0aGF0IGlzICgyIF4gNTMgLSAxKSAqIDUgXiAxMDc0IC8gMTAgXiAxMDc0CkBAIC00
MzQsMTc1ICs0MTksMjggQEAgbmFtZXNwYWNlIGRvdWJsZV9jb252ZXJzaW9uIHsKICAgICBjb25z
dCBpbnQga01heFNpZ25pZmljYW50RGlnaXRzID0gNzcyOwogICAgIAogICAgIAotICAgIC8vIFJl
dHVybnMgdHJ1ZSBpZiB3aGl0ZXNwYWNlIGZvdW5kIGFuZCBmYWxzZSBpZiB0aGUgZW5kIGhhcyBy
ZWFjaGVkLgotICAgIHN0YXRpYyBpbmxpbmUgYm9vbCBBZHZhbmNlVG9Ob25zcGFjZShjb25zdCBj
aGFyKiogY3VycmVudCwgY29uc3QgY2hhciogZW5kKSB7Ci0gICAgICAgIHdoaWxlICgqY3VycmVu
dCAhPSBlbmQpIHsKLSAgICAgICAgICAgIHN3aXRjaCgqKmN1cnJlbnQpIHsKLSAgICAgICAgICAg
IGNhc2UgJyAnOgotICAgICAgICAgICAgY2FzZSAnXHQnOgotICAgICAgICAgICAgY2FzZSAnXHYn
OgotICAgICAgICAgICAgY2FzZSAnXHInOgotICAgICAgICAgICAgY2FzZSAnXGYnOgotICAgICAg
ICAgICAgY2FzZSAnXG4nOiArKypjdXJyZW50OyBjb250aW51ZTsKLSAgICAgICAgICAgIGRlZmF1
bHQ6IHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgCi0gICAgc3RhdGljIGJvb2wgaXNEaWdpdChpbnQg
eCwgaW50IHJhZGl4KSB7Ci0gICAgICAgIHJldHVybiAoeCA+PSAnMCcgJiYgeCA8PSAnOScgJiYg
eCA8ICcwJyArIHJhZGl4KQotICAgICAgICB8fCAocmFkaXggPiAxMCAmJiB4ID49ICdhJyAmJiB4
IDwgJ2EnICsgcmFkaXggLSAxMCkKLSAgICAgICAgfHwgKHJhZGl4ID4gMTAgJiYgeCA+PSAnQScg
JiYgeCA8ICdBJyArIHJhZGl4IC0gMTApOwotICAgIH0KLSAgICAKLSAgICAKICAgICBzdGF0aWMg
ZG91YmxlIFNpZ25lZFplcm8oYm9vbCBzaWduKSB7CiAgICAgICAgIHJldHVybiBzaWduID8gLTAu
MCA6IDAuMDsKICAgICB9CiAgICAgCiAgICAgCi0gICAgLy8gUGFyc2luZyBpbnRlZ2VycyB3aXRo
IHJhZGl4IDIsIDQsIDgsIDE2LCAzMi4gQXNzdW1lcyBjdXJyZW50ICE9IGVuZC4KLSAgICB0ZW1w
bGF0ZSA8aW50IHJhZGl4X2xvZ18yPgotICAgIHN0YXRpYyBkb3VibGUgUmFkaXhTdHJpbmdUb0Rv
dWJsZShjb25zdCBjaGFyKiBjdXJyZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBjaGFyKiBlbmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJvb2wgc2lnbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ym9vbCBhbGxvd190cmFpbGluZ19qdW5rLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkb3VibGUganVua19zdHJpbmdfdmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqKiB0cmFpbGluZ19wb2ludGVyKSB7Ci0gICAgICAg
IEFTU0VSVChjdXJyZW50ICE9IGVuZCk7Ci0gICAgICAgIAotICAgICAgICAvLyBTa2lwIGxlYWRp
bmcgMHMuCi0gICAgICAgIHdoaWxlICgqY3VycmVudCA9PSAnMCcpIHsKLSAgICAgICAgICAgICsr
Y3VycmVudDsKLSAgICAgICAgICAgIGlmIChjdXJyZW50ID09IGVuZCkgewotICAgICAgICAgICAg
ICAgICp0cmFpbGluZ19wb2ludGVyID0gZW5kOwotICAgICAgICAgICAgICAgIHJldHVybiBTaWdu
ZWRaZXJvKHNpZ24pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIAotICAgICAg
ICBpbnQ2NF90IG51bWJlciA9IDA7Ci0gICAgICAgIGludCBleHBvbmVudCA9IDA7Ci0gICAgICAg
IGNvbnN0IGludCByYWRpeCA9ICgxIDw8IHJhZGl4X2xvZ18yKTsKLSAgICAgICAgCi0gICAgICAg
IGRvIHsKLSAgICAgICAgICAgIGludCBkaWdpdDsKLSAgICAgICAgICAgIGlmICgqY3VycmVudCA+
PSAnMCcgJiYgKmN1cnJlbnQgPD0gJzknICYmICpjdXJyZW50IDwgJzAnICsgcmFkaXgpIHsKLSAg
ICAgICAgICAgICAgICBkaWdpdCA9IHN0YXRpY19jYXN0PGNoYXI+KCpjdXJyZW50KSAtICcwJzsK
LSAgICAgICAgICAgIH0gZWxzZSBpZiAocmFkaXggPiAxMCAmJiAqY3VycmVudCA+PSAnYScgJiYg
KmN1cnJlbnQgPCAnYScgKyByYWRpeCAtIDEwKSB7Ci0gICAgICAgICAgICAgICAgZGlnaXQgPSBz
dGF0aWNfY2FzdDxjaGFyPigqY3VycmVudCkgLSAnYScgKyAxMDsKLSAgICAgICAgICAgIH0gZWxz
ZSBpZiAocmFkaXggPiAxMCAmJiAqY3VycmVudCA+PSAnQScgJiYgKmN1cnJlbnQgPCAnQScgKyBy
YWRpeCAtIDEwKSB7Ci0gICAgICAgICAgICAgICAgZGlnaXQgPSBzdGF0aWNfY2FzdDxjaGFyPigq
Y3VycmVudCkgLSAnQScgKyAxMDsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgaWYgKGFsbG93X3RyYWlsaW5nX2p1bmsgfHwgIUFkdmFuY2VUb05vbnNwYWNlKCZjdXJyZW50
LCBlbmQpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBqdW5rX3N0cmluZ192YWx1ZTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IG51bWJlciA9IG51bWJlciAqIHJhZGl4ICsgZGlnaXQ7Ci0gICAgICAgICAgICBpbnQgb3ZlcmZs
b3cgPSBzdGF0aWNfY2FzdDxpbnQ+KG51bWJlciA+PiA1Myk7Ci0gICAgICAgICAgICBpZiAob3Zl
cmZsb3cgIT0gMCkgewotICAgICAgICAgICAgICAgIC8vIE92ZXJmbG93IG9jY3VycmVkLiBOZWVk
IHRvIGRldGVybWluZSB3aGljaCBkaXJlY3Rpb24gdG8gcm91bmQgdGhlCi0gICAgICAgICAgICAg
ICAgLy8gcmVzdWx0LgotICAgICAgICAgICAgICAgIGludCBvdmVyZmxvd19iaXRzX2NvdW50ID0g
MTsKLSAgICAgICAgICAgICAgICB3aGlsZSAob3ZlcmZsb3cgPiAxKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIG92ZXJmbG93X2JpdHNfY291bnQrKzsKLSAgICAgICAgICAgICAgICAgICAgb3ZlcmZs
b3cgPj49IDE7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgIGludCBkcm9wcGVkX2JpdHNfbWFzayA9ICgoMSA8PCBvdmVyZmxvd19iaXRzX2NvdW50
KSAtIDEpOwotICAgICAgICAgICAgICAgIGludCBkcm9wcGVkX2JpdHMgPSBzdGF0aWNfY2FzdDxp
bnQ+KG51bWJlcikgJiBkcm9wcGVkX2JpdHNfbWFzazsKLSAgICAgICAgICAgICAgICBudW1iZXIg
Pj49IG92ZXJmbG93X2JpdHNfY291bnQ7Ci0gICAgICAgICAgICAgICAgZXhwb25lbnQgPSBvdmVy
Zmxvd19iaXRzX2NvdW50OwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGJvb2wg
emVyb190YWlsID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB3aGlsZSAodHJ1ZSkgewotICAgICAg
ICAgICAgICAgICAgICArK2N1cnJlbnQ7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50
ID09IGVuZCB8fCAhaXNEaWdpdCgqY3VycmVudCwgcmFkaXgpKSBicmVhazsKLSAgICAgICAgICAg
ICAgICAgICAgemVyb190YWlsID0gemVyb190YWlsICYmICpjdXJyZW50ID09ICcwJzsKLSAgICAg
ICAgICAgICAgICAgICAgZXhwb25lbnQgKz0gcmFkaXhfbG9nXzI7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmICghYWxsb3dfdHJhaWxpbmdf
anVuayAmJiBBZHZhbmNlVG9Ob25zcGFjZSgmY3VycmVudCwgZW5kKSkgewotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4ganVua19zdHJpbmdfdmFsdWU7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGludCBtaWRkbGVfdmFsdWUgPSAoMSA8PCAo
b3ZlcmZsb3dfYml0c19jb3VudCAtIDEpKTsKLSAgICAgICAgICAgICAgICBpZiAoZHJvcHBlZF9i
aXRzID4gbWlkZGxlX3ZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgICAgIG51bWJlcisrOyAgLy8g
Um91bmRpbmcgdXAuCi0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChkcm9wcGVkX2JpdHMgPT0g
bWlkZGxlX3ZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFJvdW5kaW5nIHRvIGV2ZW4g
dG8gY29uc2lzdGVuY3kgd2l0aCBkZWNpbWFsczogaGFsZi13YXkgY2FzZSByb3VuZHMKLSAgICAg
ICAgICAgICAgICAgICAgLy8gdXAgaWYgc2lnbmlmaWNhbnQgcGFydCBpcyBvZGQgYW5kIGRvd24g
b3RoZXJ3aXNlLgotICAgICAgICAgICAgICAgICAgICBpZiAoKG51bWJlciAmIDEpICE9IDAgfHwg
IXplcm9fdGFpbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyKys7ICAvLyBSb3Vu
ZGluZyB1cC4KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAvLyBSb3VuZGluZyB1cCBtYXkgY2F1c2Ugb3Zl
cmZsb3cuCi0gICAgICAgICAgICAgICAgaWYgKChudW1iZXIgJiAoKGludDY0X3QpMSA8PCA1Mykp
ICE9IDApIHsKLSAgICAgICAgICAgICAgICAgICAgZXhwb25lbnQrKzsKLSAgICAgICAgICAgICAg
ICAgICAgbnVtYmVyID4+PSAxOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgICsrY3VycmVudDsKLSAgICAgICAgfSB3
aGlsZSAoY3VycmVudCAhPSBlbmQpOwotICAgICAgICAKLSAgICAgICAgQVNTRVJUKG51bWJlciA8
ICgoaW50NjRfdCkxIDw8IDUzKSk7Ci0gICAgICAgIEFTU0VSVChzdGF0aWNfY2FzdDxpbnQ2NF90
PihzdGF0aWNfY2FzdDxkb3VibGU+KG51bWJlcikpID09IG51bWJlcik7Ci0gICAgICAgIAotICAg
ICAgICAqdHJhaWxpbmdfcG9pbnRlciA9IGN1cnJlbnQ7Ci0gICAgICAgIAotICAgICAgICBpZiAo
ZXhwb25lbnQgPT0gMCkgewotICAgICAgICAgICAgaWYgKHNpZ24pIHsKLSAgICAgICAgICAgICAg
ICBpZiAobnVtYmVyID09IDApIHJldHVybiAtMC4wOwotICAgICAgICAgICAgICAgIG51bWJlciA9
IC1udW1iZXI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
ZG91YmxlPihudW1iZXIpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBBU1NFUlQobnVt
YmVyICE9IDApOwotICAgICAgICByZXR1cm4gRG91YmxlKERpeUZwKG51bWJlciwgZXhwb25lbnQp
KS52YWx1ZSgpOwotICAgIH0KLSAgICAKLSAgICAKICAgICBkb3VibGUgU3RyaW5nVG9Eb3VibGVD
b252ZXJ0ZXI6OlN0cmluZ1RvRG91YmxlKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogaW5wdXQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGVuZ3RoLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50KiBwcm9jZXNzZWRf
Y2hhcmFjdGVyc19jb3VudCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2l6ZV90IGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCogcHJvY2Vzc2VkX2NoYXJhY3RlcnNfY291
bnQpIHsKICAgICAgICAgY29uc3QgY2hhciogY3VycmVudCA9IGlucHV0OwogICAgICAgICBjb25z
dCBjaGFyKiBlbmQgPSBpbnB1dCArIGxlbmd0aDsKICAgICAgICAgCiAgICAgICAgICpwcm9jZXNz
ZWRfY2hhcmFjdGVyc19jb3VudCA9IDA7CiAgICAgICAgIAotICAgICAgICBjb25zdCBib29sIGFs
bG93X3RyYWlsaW5nX2p1bmsgPSAoZmxhZ3NfICYgQUxMT1dfVFJBSUxJTkdfSlVOSykgIT0gMDsK
LSAgICAgICAgY29uc3QgYm9vbCBhbGxvd19sZWFkaW5nX3NwYWNlcyA9IChmbGFnc18gJiBBTExP
V19MRUFESU5HX1NQQUNFUykgIT0gMDsKLSAgICAgICAgY29uc3QgYm9vbCBhbGxvd190cmFpbGlu
Z19zcGFjZXMgPSAoZmxhZ3NfICYgQUxMT1dfVFJBSUxJTkdfU1BBQ0VTKSAhPSAwOwotICAgICAg
ICBjb25zdCBib29sIGFsbG93X3NwYWNlc19hZnRlcl9zaWduID0gKGZsYWdzXyAmIEFMTE9XX1NQ
QUNFU19BRlRFUl9TSUdOKSAhPSAwOwotICAgICAgICAKICAgICAgICAgLy8gVG8gbWFrZSBzdXJl
IHRoYXQgaXRlcmF0b3IgZGVyZWZlcmVuY2luZyBpcyB2YWxpZCB0aGUgZm9sbG93aW5nCiAgICAg
ICAgIC8vIGNvbnZlbnRpb24gaXMgdXNlZDoKICAgICAgICAgLy8gMS4gRWFjaCAnKytjdXJyZW50
JyBzdGF0ZW1lbnQgaXMgZm9sbG93ZWQgYnkgY2hlY2sgZm9yIGVxdWFsaXR5IHRvICdlbmQnLgot
ICAgICAgICAvLyAyLiBJZiBBZHZhbmNlVG9Ob25zcGFjZSByZXR1cm5lZCBmYWxzZSB0aGVuIGN1
cnJlbnQgPT0gZW5kLgogICAgICAgICAvLyAzLiBJZiAnY3VycmVudCcgYmVjb21lcyBlcXVhbCB0
byAnZW5kJyB0aGUgZnVuY3Rpb24gcmV0dXJucyBvciBnb2VzIHRvCiAgICAgICAgIC8vICdwYXJz
aW5nX2RvbmUnLgogICAgICAgICAvLyA0LiAnY3VycmVudCcgaXMgbm90IGRlcmVmZXJlbmNlZCBh
ZnRlciB0aGUgJ3BhcnNpbmdfZG9uZScgbGFiZWwuCiAgICAgICAgIC8vIDUuIENvZGUgYmVmb3Jl
ICdwYXJzaW5nX2RvbmUnIG1heSByZWx5IG9uICdjdXJyZW50ICE9IGVuZCcuCi0gICAgICAgIGlm
IChjdXJyZW50ID09IGVuZCkgcmV0dXJuIGVtcHR5X3N0cmluZ192YWx1ZV87Ci0gICAgICAgIAot
ICAgICAgICBpZiAoYWxsb3dfbGVhZGluZ19zcGFjZXMgfHwgYWxsb3dfdHJhaWxpbmdfc3BhY2Vz
KSB7Ci0gICAgICAgICAgICBpZiAoIUFkdmFuY2VUb05vbnNwYWNlKCZjdXJyZW50LCBlbmQpKSB7
Ci0gICAgICAgICAgICAgICAgKnByb2Nlc3NlZF9jaGFyYWN0ZXJzX2NvdW50ID0gY3VycmVudCAt
IGlucHV0OwotICAgICAgICAgICAgICAgIHJldHVybiBlbXB0eV9zdHJpbmdfdmFsdWVfOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCFhbGxvd19sZWFkaW5nX3NwYWNlcyAmJiAoaW5w
dXQgIT0gY3VycmVudCkpIHsKLSAgICAgICAgICAgICAgICAvLyBObyBsZWFkaW5nIHNwYWNlcyBh
bGxvd2VkLCBidXQgQWR2YW5jZVRvTm9uc3BhY2UgbW92ZWQgZm9yd2FyZC4KLSAgICAgICAgICAg
ICAgICByZXR1cm4ganVua19zdHJpbmdfdmFsdWVfOwotICAgICAgICAgICAgfQotICAgICAgICB9
CisgICAgICAgIGlmIChjdXJyZW50ID09IGVuZCkgcmV0dXJuIDAuMDsKICAgICAgICAgCiAgICAg
ICAgIC8vIFRoZSBsb25nZXN0IGZvcm0gb2Ygc2ltcGxpZmllZCBudW1iZXIgaXM6ICItPHNpZ25p
ZmljYW50IGRpZ2l0cz4uMWVYWFhcMCIuCiAgICAgICAgIGNvbnN0IGludCBrQnVmZmVyU2l6ZSA9
IGtNYXhTaWduaWZpY2FudERpZ2l0cyArIDEwOwpAQCAtNjIwLDUxICs0NTgsNyBAQCBuYW1lc3Bh
Y2UgZG91YmxlX2NvbnZlcnNpb24gewogICAgICAgICBpZiAoKmN1cnJlbnQgPT0gJysnIHx8ICpj
dXJyZW50ID09ICctJykgewogICAgICAgICAgICAgc2lnbiA9ICgqY3VycmVudCA9PSAnLScpOwog
ICAgICAgICAgICAgKytjdXJyZW50OwotICAgICAgICAgICAgY29uc3QgY2hhciogbmV4dF9ub25f
c3BhY2UgPSBjdXJyZW50OwotICAgICAgICAgICAgLy8gU2tpcCBmb2xsb3dpbmcgc3BhY2VzIChp
ZiBhbGxvd2VkKS4KLSAgICAgICAgICAgIGlmICghQWR2YW5jZVRvTm9uc3BhY2UoJm5leHRfbm9u
X3NwYWNlLCBlbmQpKSByZXR1cm4ganVua19zdHJpbmdfdmFsdWVfOwotICAgICAgICAgICAgaWYg
KCFhbGxvd19zcGFjZXNfYWZ0ZXJfc2lnbiAmJiAoY3VycmVudCAhPSBuZXh0X25vbl9zcGFjZSkp
IHsKLSAgICAgICAgICAgICAgICByZXR1cm4ganVua19zdHJpbmdfdmFsdWVfOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgY3VycmVudCA9IG5leHRfbm9uX3NwYWNlOwotICAgICAgICB9Ci0g
ICAgICAgIAotICAgICAgICBpZiAoaW5maW5pdHlfc3ltYm9sXyAhPSBOVUxMKSB7Ci0gICAgICAg
ICAgICBpZiAoKmN1cnJlbnQgPT0gaW5maW5pdHlfc3ltYm9sX1swXSkgewotICAgICAgICAgICAg
ICAgIGlmICghQ29uc3VtZVN1YlN0cmluZygmY3VycmVudCwgZW5kLCBpbmZpbml0eV9zeW1ib2xf
KSkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4ganVua19zdHJpbmdfdmFsdWVfOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoIShh
bGxvd190cmFpbGluZ19zcGFjZXMgfHwgYWxsb3dfdHJhaWxpbmdfanVuaykgJiYgKGN1cnJlbnQg
IT0gZW5kKSkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4ganVua19zdHJpbmdfdmFsdWVf
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoIWFsbG93X3RyYWlsaW5n
X2p1bmsgJiYgQWR2YW5jZVRvTm9uc3BhY2UoJmN1cnJlbnQsIGVuZCkpIHsKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGp1bmtfc3RyaW5nX3ZhbHVlXzsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgQVNTRVJUKGJ1ZmZlcl9wb3MgPT0gMCk7
Ci0gICAgICAgICAgICAgICAgKnByb2Nlc3NlZF9jaGFyYWN0ZXJzX2NvdW50ID0gY3VycmVudCAt
IGlucHV0OwotICAgICAgICAgICAgICAgIHJldHVybiBzaWduID8gLURvdWJsZTo6SW5maW5pdHko
KSA6IERvdWJsZTo6SW5maW5pdHkoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAg
ICAKLSAgICAgICAgaWYgKG5hbl9zeW1ib2xfICE9IE5VTEwpIHsKLSAgICAgICAgICAgIGlmICgq
Y3VycmVudCA9PSBuYW5fc3ltYm9sX1swXSkgewotICAgICAgICAgICAgICAgIGlmICghQ29uc3Vt
ZVN1YlN0cmluZygmY3VycmVudCwgZW5kLCBuYW5fc3ltYm9sXykpIHsKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGp1bmtfc3RyaW5nX3ZhbHVlXzsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKCEoYWxsb3dfdHJhaWxpbmdfc3BhY2Vz
IHx8IGFsbG93X3RyYWlsaW5nX2p1bmspICYmIChjdXJyZW50ICE9IGVuZCkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGp1bmtfc3RyaW5nX3ZhbHVlXzsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgaWYgKCFhbGxvd190cmFpbGluZ19qdW5rICYmIEFkdmFuY2VUb05v
bnNwYWNlKCZjdXJyZW50LCBlbmQpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBqdW5r
X3N0cmluZ192YWx1ZV87Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgIEFTU0VSVChidWZmZXJfcG9zID09IDApOwotICAgICAgICAgICAgICAgICpw
cm9jZXNzZWRfY2hhcmFjdGVyc19jb3VudCA9IGN1cnJlbnQgLSBpbnB1dDsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gc2lnbiA/IC1Eb3VibGU6Ok5hTigpIDogRG91YmxlOjpOYU4oKTsKLSAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGlmIChjdXJyZW50ID09IGVuZCkgcmV0dXJuIDAuMDsKICAg
ICAgICAgfQogICAgICAgICAKICAgICAgICAgYm9vbCBsZWFkaW5nX3plcm8gPSBmYWxzZTsKQEAg
LTY3NywyNyArNDcxLDYgQEAgbmFtZXNwYWNlIGRvdWJsZV9jb252ZXJzaW9uIHsKICAgICAgICAg
ICAgIAogICAgICAgICAgICAgbGVhZGluZ196ZXJvID0gdHJ1ZTsKICAgICAgICAgICAgIAotICAg
ICAgICAgICAgLy8gSXQgY291bGQgYmUgaGV4YWRlY2ltYWwgdmFsdWUuCi0gICAgICAgICAgICBp
ZiAoKGZsYWdzXyAmIEFMTE9XX0hFWCkgJiYgKCpjdXJyZW50ID09ICd4JyB8fCAqY3VycmVudCA9
PSAnWCcpKSB7Ci0gICAgICAgICAgICAgICAgKytjdXJyZW50OwotICAgICAgICAgICAgICAgIGlm
IChjdXJyZW50ID09IGVuZCB8fCAhaXNEaWdpdCgqY3VycmVudCwgMTYpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiBqdW5rX3N0cmluZ192YWx1ZV87ICAvLyAiMHgiLgotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiB0
YWlsX3BvaW50ZXIgPSBOVUxMOwotICAgICAgICAgICAgICAgIGRvdWJsZSByZXN1bHQgPSBSYWRp
eFN0cmluZ1RvRG91YmxlPDQ+KGN1cnJlbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ24sCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dfdHJhaWxpbmdfanVuaywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBq
dW5rX3N0cmluZ192YWx1ZV8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJnRhaWxfcG9pbnRlcik7Ci0gICAgICAgICAgICAgICAgaWYgKHRh
aWxfcG9pbnRlciAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChhbGxvd190cmFp
bGluZ19zcGFjZXMpIEFkdmFuY2VUb05vbnNwYWNlKCZ0YWlsX3BvaW50ZXIsIGVuZCk7Ci0gICAg
ICAgICAgICAgICAgICAgICpwcm9jZXNzZWRfY2hhcmFjdGVyc19jb3VudCA9IHRhaWxfcG9pbnRl
ciAtIGlucHV0OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gcmVz
dWx0OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCiAgICAgICAgICAgICAvLyBJZ25vcmUg
bGVhZGluZyB6ZXJvcyBpbiB0aGUgaW50ZWdlciBwYXJ0LgogICAgICAgICAgICAgd2hpbGUgKCpj
dXJyZW50ID09ICcwJykgewogICAgICAgICAgICAgICAgICsrY3VycmVudDsKQEAgLTcwOCw0MyAr
NDgxLDMxIEBAIG5hbWVzcGFjZSBkb3VibGVfY29udmVyc2lvbiB7CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGJvb2wgb2N0YWwgPSBsZWFkaW5nX3plcm8gJiYg
KGZsYWdzXyAmIEFMTE9XX09DVEFMUykgIT0gMDsKLSAgICAgICAgCiAgICAgICAgIC8vIENvcHkg
c2lnbmlmaWNhbnQgZGlnaXRzIG9mIHRoZSBpbnRlZ2VyIHBhcnQgKGlmIGFueSkgdG8gdGhlIGJ1
ZmZlci4KICAgICAgICAgd2hpbGUgKCpjdXJyZW50ID49ICcwJyAmJiAqY3VycmVudCA8PSAnOScp
IHsKICAgICAgICAgICAgIGlmIChzaWduaWZpY2FudF9kaWdpdHMgPCBrTWF4U2lnbmlmaWNhbnRE
aWdpdHMpIHsKICAgICAgICAgICAgICAgICBBU1NFUlQoYnVmZmVyX3BvcyA8IGtCdWZmZXJTaXpl
KTsKICAgICAgICAgICAgICAgICBidWZmZXJbYnVmZmVyX3BvcysrXSA9IHN0YXRpY19jYXN0PGNo
YXI+KCpjdXJyZW50KTsKICAgICAgICAgICAgICAgICBzaWduaWZpY2FudF9kaWdpdHMrKzsKLSAg
ICAgICAgICAgICAgICAvLyBXaWxsIGxhdGVyIGNoZWNrIGlmIGl0J3MgYW4gb2N0YWwgaW4gdGhl
IGJ1ZmZlci4KICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgaW5zaWduaWZp
Y2FudF9kaWdpdHMrKzsgIC8vIE1vdmUgdGhlIGRpZ2l0IGludG8gdGhlIGV4cG9uZW50aWFsIHBh
cnQuCiAgICAgICAgICAgICAgICAgbm9uemVyb19kaWdpdF9kcm9wcGVkID0gbm9uemVyb19kaWdp
dF9kcm9wcGVkIHx8ICpjdXJyZW50ICE9ICcwJzsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IG9jdGFsID0gb2N0YWwgJiYgKmN1cnJlbnQgPCAnOCc7CiAgICAgICAgICAgICArK2N1cnJlbnQ7
CiAgICAgICAgICAgICBpZiAoY3VycmVudCA9PSBlbmQpIGdvdG8gcGFyc2luZ19kb25lOwogICAg
ICAgICB9CiAgICAgICAgIAotICAgICAgICBpZiAoc2lnbmlmaWNhbnRfZGlnaXRzID09IDApIHsK
LSAgICAgICAgICAgIG9jdGFsID0gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgCiAgICAgICAg
IGlmICgqY3VycmVudCA9PSAnLicpIHsKLSAgICAgICAgICAgIGlmIChvY3RhbCAmJiAhYWxsb3df
dHJhaWxpbmdfanVuaykgcmV0dXJuIGp1bmtfc3RyaW5nX3ZhbHVlXzsKLSAgICAgICAgICAgIGlm
IChvY3RhbCkgZ290byBwYXJzaW5nX2RvbmU7Ci0gICAgICAgICAgICAKICAgICAgICAgICAgICsr
Y3VycmVudDsKICAgICAgICAgICAgIGlmIChjdXJyZW50ID09IGVuZCkgewogICAgICAgICAgICAg
ICAgIGlmIChzaWduaWZpY2FudF9kaWdpdHMgPT0gMCAmJiAhbGVhZGluZ196ZXJvKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBqdW5rX3N0cmluZ192YWx1ZV87CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiAwLjA7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg
ICAgICAgICAgZ290byBwYXJzaW5nX2RvbmU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAoc2lnbmlmaWNhbnRfZGlnaXRzID09
IDApIHsKLSAgICAgICAgICAgICAgICAvLyBvY3RhbCA9IGZhbHNlOwogICAgICAgICAgICAgICAg
IC8vIEludGVnZXIgcGFydCBjb25zaXN0cyBvZiAwIG9yIGlzIGFic2VudC4gU2lnbmlmaWNhbnQg
ZGlnaXRzIHN0YXJ0IGFmdGVyCiAgICAgICAgICAgICAgICAgLy8gbGVhZGluZyB6ZXJvcyAoaWYg
YW55KS4KICAgICAgICAgICAgICAgICB3aGlsZSAoKmN1cnJlbnQgPT0gJzAnKSB7CkBAIC03Nzgs
NDAgKzUzOSwyOSBAQCBuYW1lc3BhY2UgZG91YmxlX2NvbnZlcnNpb24gewogICAgICAgICAgICAg
Ly8gSWYgZXhwb25lbnQgPCAwIHRoZW4gc3RyaW5nIHdhcyBbKy1dXC4wKi4uLgogICAgICAgICAg
ICAgLy8gSWYgc2lnbmlmaWNhbnRfZGlnaXRzICE9IDAgdGhlIHN0cmluZyBpcyBub3QgZXF1YWwg
dG8gMC4KICAgICAgICAgICAgIC8vIE90aGVyd2lzZSB0aGVyZSBhcmUgbm8gZGlnaXRzIGluIHRo
ZSBzdHJpbmcuCi0gICAgICAgICAgICByZXR1cm4ganVua19zdHJpbmdfdmFsdWVfOworICAgICAg
ICAgICAgcmV0dXJuIDAuMDsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgLy8gUGFyc2Ug
ZXhwb25lbnRpYWwgcGFydC4KICAgICAgICAgaWYgKCpjdXJyZW50ID09ICdlJyB8fCAqY3VycmVu
dCA9PSAnRScpIHsKLSAgICAgICAgICAgIGlmIChvY3RhbCAmJiAhYWxsb3dfdHJhaWxpbmdfanVu
aykgcmV0dXJuIGp1bmtfc3RyaW5nX3ZhbHVlXzsKLSAgICAgICAgICAgIGlmIChvY3RhbCkgZ290
byBwYXJzaW5nX2RvbmU7CiAgICAgICAgICAgICArK2N1cnJlbnQ7CiAgICAgICAgICAgICBpZiAo
Y3VycmVudCA9PSBlbmQpIHsKLSAgICAgICAgICAgICAgICBpZiAoYWxsb3dfdHJhaWxpbmdfanVu
aykgewotICAgICAgICAgICAgICAgICAgICBnb3RvIHBhcnNpbmdfZG9uZTsKLSAgICAgICAgICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4ganVua19zdHJpbmdfdmFs
dWVfOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAtLWN1cnJlbnQ7CisgICAg
ICAgICAgICAgICAgZ290byBwYXJzaW5nX2RvbmU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICBjaGFyIHNpZ24gPSAnKyc7CiAgICAgICAgICAgICBpZiAoKmN1cnJlbnQgPT0gJysnIHx8ICpj
dXJyZW50ID09ICctJykgewogICAgICAgICAgICAgICAgIHNpZ24gPSBzdGF0aWNfY2FzdDxjaGFy
PigqY3VycmVudCk7CiAgICAgICAgICAgICAgICAgKytjdXJyZW50OwogICAgICAgICAgICAgICAg
IGlmIChjdXJyZW50ID09IGVuZCkgewotICAgICAgICAgICAgICAgICAgICBpZiAoYWxsb3dfdHJh
aWxpbmdfanVuaykgewotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBwYXJzaW5nX2RvbmU7
Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4ganVua19zdHJpbmdfdmFsdWVfOwotICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIGN1cnJlbnQgLT0gMjsKKyAgICAgICAgICAgICAgICAgICAgZ290byBwYXJz
aW5nX2RvbmU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAg
CiAgICAgICAgICAgICBpZiAoY3VycmVudCA9PSBlbmQgfHwgKmN1cnJlbnQgPCAnMCcgfHwgKmN1
cnJlbnQgPiAnOScpIHsKLSAgICAgICAgICAgICAgICBpZiAoYWxsb3dfdHJhaWxpbmdfanVuaykg
ewotICAgICAgICAgICAgICAgICAgICBnb3RvIHBhcnNpbmdfZG9uZTsKLSAgICAgICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4ganVua19zdHJpbmdfdmFsdWVf
OwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjdXJyZW50IC09IDI7CisgICAg
ICAgICAgICAgICAgZ290byBwYXJzaW5nX2RvbmU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAKICAgICAgICAgICAgIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSBJTlRfTUFYIC8gMjsKQEAg
LTgzMiwzMyArNTgyLDkgQEAgbmFtZXNwYWNlIGRvdWJsZV9jb252ZXJzaW9uIHsKICAgICAgICAg
ICAgIGV4cG9uZW50ICs9IChzaWduID09ICctJyA/IC1udW0gOiBudW0pOwogICAgICAgICB9CiAg
ICAgICAgIAotICAgICAgICBpZiAoIShhbGxvd190cmFpbGluZ19zcGFjZXMgfHwgYWxsb3dfdHJh
aWxpbmdfanVuaykgJiYgKGN1cnJlbnQgIT0gZW5kKSkgewotICAgICAgICAgICAgcmV0dXJuIGp1
bmtfc3RyaW5nX3ZhbHVlXzsKLSAgICAgICAgfQotICAgICAgICBpZiAoIWFsbG93X3RyYWlsaW5n
X2p1bmsgJiYgQWR2YW5jZVRvTm9uc3BhY2UoJmN1cnJlbnQsIGVuZCkpIHsKLSAgICAgICAgICAg
IHJldHVybiBqdW5rX3N0cmluZ192YWx1ZV87Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGFsbG93
X3RyYWlsaW5nX3NwYWNlcykgewotICAgICAgICAgICAgQWR2YW5jZVRvTm9uc3BhY2UoJmN1cnJl
bnQsIGVuZCk7Ci0gICAgICAgIH0KLSAgICAgICAgCiAgICAgcGFyc2luZ19kb25lOgogICAgICAg
ICBleHBvbmVudCArPSBpbnNpZ25pZmljYW50X2RpZ2l0czsKICAgICAgICAgCi0gICAgICAgIGlm
IChvY3RhbCkgewotICAgICAgICAgICAgZG91YmxlIHJlc3VsdDsKLSAgICAgICAgICAgIGNvbnN0
IGNoYXIqIHRhaWxfcG9pbnRlciA9IE5VTEw7Ci0gICAgICAgICAgICByZXN1bHQgPSBSYWRpeFN0
cmluZ1RvRG91YmxlPDM+KGJ1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYnVmZmVyICsgYnVmZmVyX3BvcywKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2lnbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYWxsb3dfdHJhaWxpbmdfanVuaywKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAganVua19zdHJpbmdfdmFsdWVfLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdGFpbF9wb2ludGVyKTsKLSAgICAgICAg
ICAgIEFTU0VSVCh0YWlsX3BvaW50ZXIgIT0gTlVMTCk7Ci0gICAgICAgICAgICAqcHJvY2Vzc2Vk
X2NoYXJhY3RlcnNfY291bnQgPSBjdXJyZW50IC0gaW5wdXQ7Ci0gICAgICAgICAgICByZXR1cm4g
cmVzdWx0OwotICAgICAgICB9Ci0gICAgICAgIAogICAgICAgICBpZiAobm9uemVyb19kaWdpdF9k
cm9wcGVkKSB7CiAgICAgICAgICAgICBidWZmZXJbYnVmZmVyX3BvcysrXSA9ICcxJzsKICAgICAg
ICAgICAgIGV4cG9uZW50LS07CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9kdG9hL2RvdWJsZS1jb252
ZXJzaW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvZHRvYS9kb3VibGUtY29udmVy
c2lvbi5oCShyZXZpc2lvbiAxMTI4MTYpCisrKyBTb3VyY2UvV1RGL3d0Zi9kdG9hL2RvdWJsZS1j
b252ZXJzaW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2MSwxMzcgKzM2MSwxMiBAQCBuYW1lc3Bh
Y2UgZG91YmxlX2NvbnZlcnNpb24gewogICAgIAogICAgIGNsYXNzIFN0cmluZ1RvRG91YmxlQ29u
dmVydGVyIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIC8vIEVudW1lcmF0aW9uIGZvciBhbGxvd2lu
ZyBvY3RhbHMgYW5kIGlnbm9yaW5nIGp1bmsgd2hlbiBjb252ZXJ0aW5nCi0gICAgICAgIC8vIHN0
cmluZ3MgdG8gbnVtYmVycy4KLSAgICAgICAgZW51bSBGbGFncyB7Ci0gICAgICAgICAgICBOT19G
TEFHUyA9IDAsCi0gICAgICAgICAgICBBTExPV19IRVggPSAxLAotICAgICAgICAgICAgQUxMT1df
T0NUQUxTID0gMiwKLSAgICAgICAgICAgIEFMTE9XX1RSQUlMSU5HX0pVTksgPSA0LAotICAgICAg
ICAgICAgQUxMT1dfTEVBRElOR19TUEFDRVMgPSA4LAotICAgICAgICAgICAgQUxMT1dfVFJBSUxJ
TkdfU1BBQ0VTID0gMTYsCi0gICAgICAgICAgICBBTExPV19TUEFDRVNfQUZURVJfU0lHTiA9IDMy
Ci0gICAgICAgIH07Ci0gICAgICAgIAotICAgICAgICAvLyBGbGFncyBzaG91bGQgYmUgYSBiaXQt
b3IgY29tYmluYXRpb24gb2YgdGhlIHBvc3NpYmxlIEZsYWdzLWVudW0uCi0gICAgICAgIC8vICAt
IE5PX0ZMQUdTOiBubyBzcGVjaWFsIGZsYWdzLgotICAgICAgICAvLyAgLSBBTExPV19IRVg6IHJl
Y29nbml6ZXMgdGhlIHByZWZpeCAiMHgiLiBIZXggbnVtYmVycyBtYXkgb25seSBiZSBpbnRlZ2Vy
cy4KLSAgICAgICAgLy8gICAgICBFeDogU3RyaW5nVG9Eb3VibGUoIjB4MTIzNCIpIC0+IDQ2NjAu
MAotICAgICAgICAvLyAgICAgICAgICBJbiBTdHJpbmdUb0RvdWJsZSgiMHgxMjM0LjU2IikgdGhl
IGNoYXJhY3RlcnMgIi41NiIgYXJlIHRyYWlsaW5nCi0gICAgICAgIC8vICAgICAgICAgIGp1bmsu
IFRoZSByZXN1bHQgb2YgdGhlIGNhbGwgaXMgaGVuY2UgZGVwZW5kZW50IG9uCi0gICAgICAgIC8v
ICAgICAgICAgIHRoZSBBTExPV19UUkFJTElOR19KVU5LIGZsYWcgYW5kL29yIHRoZSBqdW5rIHZh
bHVlLgotICAgICAgICAvLyAgICAgIFdpdGggdGhpcyBmbGFnICIweCIgaXMgYSBqdW5rLXN0cmlu
Zy4gRXZlbiB3aXRoIEFMTE9XX1RSQUlMSU5HX0pVTkssCi0gICAgICAgIC8vICAgICAgdGhlIHN0
cmluZyB3aWxsIG5vdCBiZSBwYXJzZWQgYXMgIjAiIGZvbGxvd2VkIGJ5IGp1bmsuCi0gICAgICAg
IC8vCi0gICAgICAgIC8vICAtIEFMTE9XX09DVEFMUzogcmVjb2duaXplcyB0aGUgcHJlZml4ICIw
IiBmb3Igb2N0YWxzOgotICAgICAgICAvLyAgICAgIElmIGEgc2VxdWVuY2Ugb2Ygb2N0YWwgZGln
aXRzIHN0YXJ0cyB3aXRoICcwJywgdGhlbiB0aGUgbnVtYmVyIGlzCi0gICAgICAgIC8vICAgICAg
cmVhZCBhcyBvY3RhbCBpbnRlZ2VyLiBPY3RhbCBudW1iZXJzIG1heSBvbmx5IGJlIGludGVnZXJz
LgotICAgICAgICAvLyAgICAgIEV4OiBTdHJpbmdUb0RvdWJsZSgiMDEyMzQiKSAtPiA2NjguMAot
ICAgICAgICAvLyAgICAgICAgICBTdHJpbmdUb0RvdWJsZSgiMDEyMzQ5IikgLT4gMTIzNDkuMCAg
Ly8gTm90IGEgc2VxdWVuY2Ugb2Ygb2N0YWwKLSAgICAgICAgLy8gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRpZ2l0cy4KLSAgICAgICAgLy8gICAgICAg
ICAgSW4gU3RyaW5nVG9Eb3VibGUoIjAxMjM0LjU2IikgdGhlIGNoYXJhY3RlcnMgIi41NiIgYXJl
IHRyYWlsaW5nCi0gICAgICAgIC8vICAgICAgICAgIGp1bmsuIFRoZSByZXN1bHQgb2YgdGhlIGNh
bGwgaXMgaGVuY2UgZGVwZW5kZW50IG9uCi0gICAgICAgIC8vICAgICAgICAgIHRoZSBBTExPV19U
UkFJTElOR19KVU5LIGZsYWcgYW5kL29yIHRoZSBqdW5rIHZhbHVlLgotICAgICAgICAvLyAgICAg
ICAgICBJbiBTdHJpbmdUb0RvdWJsZSgiMDEyMzRlNTYiKSB0aGUgY2hhcmFjdGVycyAiZTU2IiBh
cmUgdHJhaWxpbmcKLSAgICAgICAgLy8gICAgICAgICAganVuaywgdG9vLgotICAgICAgICAvLyAg
LSBBTExPV19UUkFJTElOR19KVU5LOiBpZ25vcmUgdHJhaWxpbmcgY2hhcmFjdGVycyB0aGF0IGFy
ZSBub3QgcGFydCBvZgotICAgICAgICAvLyAgICAgIGEgZG91YmxlIGxpdGVyYWwuCi0gICAgICAg
IC8vICAtIEFMTE9XX0xFQURJTkdfU1BBQ0VTOiBza2lwIG92ZXIgbGVhZGluZyBzcGFjZXMuCi0g
ICAgICAgIC8vICAtIEFMTE9XX1RSQUlMSU5HX1NQQUNFUzogaWdub3JlIHRyYWlsaW5nIHNwYWNl
cy4KLSAgICAgICAgLy8gIC0gQUxMT1dfU1BBQ0VTX0FGVEVSX1NJR046IGlnbm9yZSBzcGFjZXMg
YWZ0ZXIgdGhlIHNpZ24uCi0gICAgICAgIC8vICAgICAgIEV4OiBTdHJpbmdUb0RvdWJsZSgiLSAg
IDEyMy4yIikgLT4gLTEyMy4yLgotICAgICAgICAvLyAgICAgICAgICAgU3RyaW5nVG9Eb3VibGUo
IisgICAxMjMuMiIpIC0+IDEyMy4yCi0gICAgICAgIC8vCi0gICAgICAgIC8vIGVtcHR5X3N0cmlu
Z192YWx1ZSBpcyByZXR1cm5lZCB3aGVuIGFuIGVtcHR5IHN0cmluZyBpcyBnaXZlbiBhcyBpbnB1
dC4KLSAgICAgICAgLy8gSWYgQUxMT1dfTEVBRElOR19TUEFDRVMgb3IgQUxMT1dfVFJBSUxJTkdf
U1BBQ0VTIGFyZSBzZXQsIHRoZW4gYSBzdHJpbmcKLSAgICAgICAgLy8gY29udGFpbmluZyBvbmx5
IHNwYWNlcyBpcyBjb252ZXJ0ZWQgdG8gdGhlICdlbXB0eV9zdHJpbmdfdmFsdWUnLCB0b28uCi0g
ICAgICAgIC8vCi0gICAgICAgIC8vIGp1bmtfc3RyaW5nX3ZhbHVlIGlzIHJldHVybmVkIHdoZW4K
LSAgICAgICAgLy8gIGEpIEFMTE9XX1RSQUlMSU5HX0pVTksgaXMgbm90IHNldCwgYW5kIGEganVu
ayBjaGFyYWN0ZXIgKGEgY2hhcmFjdGVyIG5vdAotICAgICAgICAvLyAgICAgcGFydCBvZiBhIGRv
dWJsZS1saXRlcmFsKSBpcyBmb3VuZC4KLSAgICAgICAgLy8gIGIpIEFMTE9XX1RSQUlMSU5HX0pV
TksgaXMgc2V0LCBidXQgdGhlIHN0cmluZyBkb2VzIG5vdCBzdGFydCB3aXRoIGEKLSAgICAgICAg
Ly8gICAgIGRvdWJsZSBsaXRlcmFsLgotICAgICAgICAvLwotICAgICAgICAvLyBpbmZpbml0eV9z
eW1ib2wgYW5kIG5hbl9zeW1ib2wgYXJlIHN0cmluZ3MgdGhhdCBhcmUgdXNlZCB0byBkZXRlY3QK
LSAgICAgICAgLy8gaW5wdXRzIHRoYXQgcmVwcmVzZW50IGluZmluaXR5IGFuZCBOYU4uIFRoZXkg
Y2FuIGJlIG51bGwsIGluIHdoaWNoIGNhc2UKLSAgICAgICAgLy8gdGhleSBhcmUgaWdub3JlZC4K
LSAgICAgICAgLy8gVGhlIGNvbnZlcnNpb24gcm91dGluZSBmaXJzdCByZWFkcyBhbnkgcG9zc2li
bGUgc2lnbnMuIFRoZW4gaXQgY29tcGFyZXMgdGhlCi0gICAgICAgIC8vIGZvbGxvd2luZyBjaGFy
YWN0ZXIgb2YgdGhlIGlucHV0LXN0cmluZyB3aXRoIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YKLSAg
ICAgICAgLy8gdGhlIGluZmluaXR5LCBhbmQgbmFuLXN5bWJvbC4gSWYgZWl0aGVyIG1hdGNoZXMs
IHRoZSBmdW5jdGlvbiBhc3N1bWVzLCB0aGF0Ci0gICAgICAgIC8vIGEgbWF0Y2ggaGFzIGJlZW4g
Zm91bmQsIGFuZCBleHBlY3RzIHRoZSBmb2xsb3dpbmcgaW5wdXQgY2hhcmFjdGVycyB0byBtYXRj
aAotICAgICAgICAvLyB0aGUgcmVtYWluaW5nIGNoYXJhY3RlcnMgb2YgdGhlIHNwZWNpYWwtdmFs
dWUgc3ltYm9sLgotICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgdGhlIGZvbGxvd2luZyByZXN0
cmljdGlvbnMgYXBwbHkgdG8gc3BlY2lhbC12YWx1ZSBzeW1ib2xzOgotICAgICAgICAvLyAgLSB0
aGV5IG11c3Qgbm90IHN0YXJ0IHdpdGggc2lnbnMgKCcrJywgb3IgJy0nKSwKLSAgICAgICAgLy8g
IC0gdGhleSBtdXN0IG5vdCBoYXZlIHRoZSBzYW1lIGZpcnN0IGNoYXJhY3Rlci4KLSAgICAgICAg
Ly8gIC0gdGhleSBtdXN0IG5vdCBzdGFydCB3aXRoIGRpZ2l0cy4KLSAgICAgICAgLy8KLSAgICAg
ICAgLy8gRXhhbXBsZXM6Ci0gICAgICAgIC8vICBmbGFncyA9IEFMTE9XX0hFWCB8IEFMTE9XX1RS
QUlMSU5HX0pVTkssCi0gICAgICAgIC8vICBlbXB0eV9zdHJpbmdfdmFsdWUgPSAwLjAsCi0gICAg
ICAgIC8vICBqdW5rX3N0cmluZ192YWx1ZSA9IE5hTiwKLSAgICAgICAgLy8gIGluZmluaXR5X3N5
bWJvbCA9ICJpbmZpbml0eSIsCi0gICAgICAgIC8vICBuYW5fc3ltYm9sID0gIm5hbiI6Ci0gICAg
ICAgIC8vICAgIFN0cmluZ1RvRG91YmxlKCIweDEyMzQiKSAtPiA0NjYwLjAuCi0gICAgICAgIC8v
ICAgIFN0cmluZ1RvRG91YmxlKCIweDEyMzRLIikgLT4gNDY2MC4wLgotICAgICAgICAvLyAgICBT
dHJpbmdUb0RvdWJsZSgiIikgLT4gMC4wICAvLyBlbXB0eV9zdHJpbmdfdmFsdWUuCi0gICAgICAg
IC8vICAgIFN0cmluZ1RvRG91YmxlKCIgIikgLT4gTmFOICAvLyBqdW5rX3N0cmluZ192YWx1ZS4K
LSAgICAgICAgLy8gICAgU3RyaW5nVG9Eb3VibGUoIiAxIikgLT4gTmFOICAvLyBqdW5rX3N0cmlu
Z192YWx1ZS4KLSAgICAgICAgLy8gICAgU3RyaW5nVG9Eb3VibGUoIjB4IikgLT4gTmFOICAvLyBq
dW5rX3N0cmluZ192YWx1ZS4KLSAgICAgICAgLy8gICAgU3RyaW5nVG9Eb3VibGUoIi0xMjMuNDUi
KSAtPiAtMTIzLjQ1LgotICAgICAgICAvLyAgICBTdHJpbmdUb0RvdWJsZSgiLS0xMjMuNDUiKSAt
PiBOYU4gIC8vIGp1bmtfc3RyaW5nX3ZhbHVlLgotICAgICAgICAvLyAgICBTdHJpbmdUb0RvdWJs
ZSgiMTIzZTQ1IikgLT4gMTIzZTQ1LgotICAgICAgICAvLyAgICBTdHJpbmdUb0RvdWJsZSgiMTIz
RTQ1IikgLT4gMTIzZTQ1LgotICAgICAgICAvLyAgICBTdHJpbmdUb0RvdWJsZSgiMTIzZSs0NSIp
IC0+IDEyM2U0NS4KLSAgICAgICAgLy8gICAgU3RyaW5nVG9Eb3VibGUoIjEyM0UtNDUiKSAtPiAx
MjNlLTQ1LgotICAgICAgICAvLyAgICBTdHJpbmdUb0RvdWJsZSgiMTIzZSIpIC0+IDEyMy4wICAv
LyB0cmFpbGluZyBqdW5rIGlnbm9yZWQuCi0gICAgICAgIC8vICAgIFN0cmluZ1RvRG91YmxlKCIx
MjNlLSIpIC0+IDEyMy4wICAvLyB0cmFpbGluZyBqdW5rIGlnbm9yZWQuCi0gICAgICAgIC8vICAg
IFN0cmluZ1RvRG91YmxlKCIrTmFOIikgLT4gTmFOICAvLyBOYU4gc3RyaW5nIGxpdGVyYWwuCi0g
ICAgICAgIC8vICAgIFN0cmluZ1RvRG91YmxlKCItaW5maW5pdHkiKSAtPiAtaW5mLiAgLy8gaW5m
aW5pdHkgbGl0ZXJhbC4KLSAgICAgICAgLy8gICAgU3RyaW5nVG9Eb3VibGUoIkluZmluaXR5Iikg
LT4gTmFOICAvLyBqdW5rX3N0cmluZ192YWx1ZS4KLSAgICAgICAgLy8KLSAgICAgICAgLy8gIGZs
YWdzID0gQUxMT1dfT0NUQUwgfCBBTExPV19MRUFESU5HX1NQQUNFUywKLSAgICAgICAgLy8gIGVt
cHR5X3N0cmluZ192YWx1ZSA9IDAuMCwKLSAgICAgICAgLy8gIGp1bmtfc3RyaW5nX3ZhbHVlID0g
TmFOLAotICAgICAgICAvLyAgaW5maW5pdHlfc3ltYm9sID0gTlVMTCwKLSAgICAgICAgLy8gIG5h
bl9zeW1ib2wgPSBOVUxMOgotICAgICAgICAvLyAgICBTdHJpbmdUb0RvdWJsZSgiMHgxMjM0Iikg
LT4gTmFOICAvLyBqdW5rX3N0cmluZ192YWx1ZS4KLSAgICAgICAgLy8gICAgU3RyaW5nVG9Eb3Vi
bGUoIjAxMjM0IikgLT4gNjY4LjAuCi0gICAgICAgIC8vICAgIFN0cmluZ1RvRG91YmxlKCIiKSAt
PiAwLjAgIC8vIGVtcHR5X3N0cmluZ192YWx1ZS4KLSAgICAgICAgLy8gICAgU3RyaW5nVG9Eb3Vi
bGUoIiAiKSAtPiAwLjAgIC8vIGVtcHR5X3N0cmluZ192YWx1ZS4KLSAgICAgICAgLy8gICAgU3Ry
aW5nVG9Eb3VibGUoIiAxIikgLT4gMS4wCi0gICAgICAgIC8vICAgIFN0cmluZ1RvRG91YmxlKCIw
eCIpIC0+IE5hTiAgLy8ganVua19zdHJpbmdfdmFsdWUuCi0gICAgICAgIC8vICAgIFN0cmluZ1Rv
RG91YmxlKCIwMTIzZTQ1IikgLT4gTmFOICAvLyBqdW5rX3N0cmluZ192YWx1ZS4KLSAgICAgICAg
Ly8gICAgU3RyaW5nVG9Eb3VibGUoIjAxMjM5RTQ1IikgLT4gMTIzOWU0NS4KLSAgICAgICAgLy8g
ICAgU3RyaW5nVG9Eb3VibGUoIi1pbmZpbml0eSIpIC0+IE5hTiAgLy8ganVua19zdHJpbmdfdmFs
dWUuCi0gICAgICAgIC8vICAgIFN0cmluZ1RvRG91YmxlKCJOYU4iKSAtPiBOYU4gIC8vIGp1bmtf
c3RyaW5nX3ZhbHVlLgotICAgICAgICBTdHJpbmdUb0RvdWJsZUNvbnZlcnRlcihpbnQgZmxhZ3Ms
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBlbXB0eV9zdHJpbmdfdmFs
dWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBqdW5rX3N0cmluZ192
YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogaW5maW5p
dHlfc3ltYm9sLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBu
YW5fc3ltYm9sKQotICAgICAgICA6IGZsYWdzXyhmbGFncyksCi0gICAgICAgIGVtcHR5X3N0cmlu
Z192YWx1ZV8oZW1wdHlfc3RyaW5nX3ZhbHVlKSwKLSAgICAgICAganVua19zdHJpbmdfdmFsdWVf
KGp1bmtfc3RyaW5nX3ZhbHVlKSwKLSAgICAgICAgaW5maW5pdHlfc3ltYm9sXyhpbmZpbml0eV9z
eW1ib2wpLAotICAgICAgICBuYW5fc3ltYm9sXyhuYW5fc3ltYm9sKSB7Ci0gICAgICAgIH0KLSAg
ICAgICAgCiAgICAgICAgIC8vIFBlcmZvcm1zIHRoZSBjb252ZXJzaW9uLgogICAgICAgICAvLyBU
aGUgb3V0cHV0IHBhcmFtZXRlciAncHJvY2Vzc2VkX2NoYXJhY3RlcnNfY291bnQnIGlzIHNldCB0
byB0aGUgbnVtYmVyCiAgICAgICAgIC8vIG9mIGNoYXJhY3RlcnMgdGhhdCBoYXZlIGJlZW4gcHJv
Y2Vzc2VkIHRvIHJlYWQgdGhlIG51bWJlci4KLSAgICAgICAgLy8gU3BhY2VzIHRoYW4gYXJlIHBy
b2Nlc3NlZCB3aXRoIEFMTE9XX3tMRUFESU5HfFRSQUlMSU5HfV9TUEFDRVMgYXJlIGluY2x1ZGVk
Ci0gICAgICAgIC8vIGluIHRoZSAncHJvY2Vzc2VkX2NoYXJhY3RlcnNfY291bnQnLiBUcmFpbGlu
ZyBqdW5rIGlzIG5ldmVyIGluY2x1ZGVkLgotICAgICAgICBkb3VibGUgU3RyaW5nVG9Eb3VibGUo
Y29uc3QgY2hhciogYnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxl
bmd0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCogcHJvY2Vzc2VkX2NoYXJh
Y3RlcnNfY291bnQpOworICAgICAgICBzdGF0aWMgZG91YmxlIFN0cmluZ1RvRG91YmxlKGNvbnN0
IGNoYXIqIGJ1ZmZlciwgc2l6ZV90IGxlbmd0aCwgc2l6ZV90KiBwcm9jZXNzZWRfY2hhcmFjdGVy
c19jb3VudCk7CiAgICAgICAgIAogICAgIHByaXZhdGU6Ci0gICAgICAgIGNvbnN0IGludCBmbGFn
c187Ci0gICAgICAgIGNvbnN0IGRvdWJsZSBlbXB0eV9zdHJpbmdfdmFsdWVfOwotICAgICAgICBj
b25zdCBkb3VibGUganVua19zdHJpbmdfdmFsdWVfOwotICAgICAgICBjb25zdCBjaGFyKiBjb25z
dCBpbmZpbml0eV9zeW1ib2xfOwotICAgICAgICBjb25zdCBjaGFyKiBjb25zdCBuYW5fc3ltYm9s
XzsKLSAgICAgICAgCiAgICAgICAgIERJU0FMTE9XX0lNUExJQ0lUX0NPTlNUUlVDVE9SUyhTdHJp
bmdUb0RvdWJsZUNvbnZlcnRlcik7CiAgICAgfTsKICAgICAKSW5kZXg6IFNvdXJjZS9XVEYvd3Rm
L3RleHQvU3RyaW5nSW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvdGV4dC9T
dHJpbmdJbXBsLmNwcAkocmV2aXNpb24gMTEyODE2KQorKysgU291cmNlL1dURi93dGYvdGV4dC9T
dHJpbmdJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzM3LDE4ICs3MzcsMTggQEAgaW50cHRy
X3QgU3RyaW5nSW1wbDo6dG9JbnRQdHIoYm9vbCogb2spCiAgICAgcmV0dXJuIGNoYXJhY3RlcnNU
b0ludFB0cihjaGFyYWN0ZXJzMTYoKSwgbV9sZW5ndGgsIG9rKTsKIH0KIAotZG91YmxlIFN0cmlu
Z0ltcGw6OnRvRG91YmxlKGJvb2wqIG9rLCBib29sKiBkaWRSZWFkTnVtYmVyKQorZG91YmxlIFN0
cmluZ0ltcGw6OnRvRG91YmxlKGJvb2wqIG9rKQogewogICAgIGlmIChpczhCaXQoKSkKLSAgICAg
ICAgcmV0dXJuIGNoYXJhY3RlcnNUb0RvdWJsZShjaGFyYWN0ZXJzOCgpLCBtX2xlbmd0aCwgb2ss
IGRpZFJlYWROdW1iZXIpOwotICAgIHJldHVybiBjaGFyYWN0ZXJzVG9Eb3VibGUoY2hhcmFjdGVy
czE2KCksIG1fbGVuZ3RoLCBvaywgZGlkUmVhZE51bWJlcik7CisgICAgICAgIHJldHVybiBjaGFy
YWN0ZXJzVG9Eb3VibGUoY2hhcmFjdGVyczgoKSwgbV9sZW5ndGgsIG9rKTsKKyAgICByZXR1cm4g
Y2hhcmFjdGVyc1RvRG91YmxlKGNoYXJhY3RlcnMxNigpLCBtX2xlbmd0aCwgb2spOwogfQogCi1m
bG9hdCBTdHJpbmdJbXBsOjp0b0Zsb2F0KGJvb2wqIG9rLCBib29sKiBkaWRSZWFkTnVtYmVyKQor
ZmxvYXQgU3RyaW5nSW1wbDo6dG9GbG9hdChib29sKiBvaykKIHsKICAgICBpZiAoaXM4Qml0KCkp
Ci0gICAgICAgIHJldHVybiBjaGFyYWN0ZXJzVG9GbG9hdChjaGFyYWN0ZXJzOCgpLCBtX2xlbmd0
aCwgb2ssIGRpZFJlYWROdW1iZXIpOwotICAgIHJldHVybiBjaGFyYWN0ZXJzVG9GbG9hdChjaGFy
YWN0ZXJzMTYoKSwgbV9sZW5ndGgsIG9rLCBkaWRSZWFkTnVtYmVyKTsKKyAgICAgICAgcmV0dXJu
IGNoYXJhY3RlcnNUb0Zsb2F0KGNoYXJhY3RlcnM4KCksIG1fbGVuZ3RoLCBvayk7CisgICAgcmV0
dXJuIGNoYXJhY3RlcnNUb0Zsb2F0KGNoYXJhY3RlcnMxNigpLCBtX2xlbmd0aCwgb2spOwogfQog
CiBib29sIGVxdWFsSWdub3JpbmdDYXNlKGNvbnN0IExDaGFyKiBhLCBjb25zdCBMQ2hhciogYiwg
dW5zaWduZWQgbGVuZ3RoKQpJbmRleDogU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmgJKHJldmlzaW9u
IDExMjgxNikKKysrIFNvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSW1wbC5oCSh3b3JraW5nIGNv
cHkpCkBAIC00NTksOCArNDU5LDExIEBAIHB1YmxpYzoKICAgICB1aW50NjRfdCB0b1VJbnQ2NChi
b29sKiBvayA9IDApOyAvLyBpZ25vcmVzIHRyYWlsaW5nIGdhcmJhZ2UKICAgICBpbnRwdHJfdCB0
b0ludFB0cihib29sKiBvayA9IDApOyAvLyBpZ25vcmVzIHRyYWlsaW5nIGdhcmJhZ2UKIAotICAg
IGRvdWJsZSB0b0RvdWJsZShib29sKiBvayA9IDAsIGJvb2wqIGRpZFJlYWROdW1iZXIgPSAwKTsK
LSAgICBmbG9hdCB0b0Zsb2F0KGJvb2wqIG9rID0gMCwgYm9vbCogZGlkUmVhZE51bWJlciA9IDAp
OworICAgIC8vIEZJWE1FOiBMaWtlIHRoZSBzdHJpY3QgZnVuY3Rpb25zIGFib3ZlLCB0aGVzZSBn
aXZlIGZhbHNlIGZvciAib2siIHdoZW4gdGhlcmUgaXMgdHJhaWxpbmcgZ2FyYmFnZS4KKyAgICAv
LyBMaWtlIHRoZSBub24tc3RyaWN0IGZ1bmN0aW9ucyBhYm92ZSwgdGhlc2UgcmV0dXJuIHRoZSB2
YWx1ZSB3aGVuIHRoZXJlIGlzIHRyYWlsaW5nIGdhcmJhZ2UuCisgICAgLy8gSXQgd291bGQgYmUg
YmV0dGVyIGlmIHRoZXNlIHdlcmUgbW9yZSBjb25zaXN0ZW50IHdpdGggdGhlIGFib3ZlIGZ1bmN0
aW9ucyBpbnN0ZWFkLgorICAgIGRvdWJsZSB0b0RvdWJsZShib29sKiBvayA9IDApOworICAgIGZs
b2F0IHRvRmxvYXQoYm9vbCogb2sgPSAwKTsKIAogICAgIFdURl9FWFBPUlRfUFJJVkFURSBQYXNz
UmVmUHRyPFN0cmluZ0ltcGw+IGxvd2VyKCk7CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIFBhc3NS
ZWZQdHI8U3RyaW5nSW1wbD4gdXBwZXIoKTsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3RleHQvV1RG
U3RyaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi90ZXh0L1dURlN0cmluZy5j
cHAJKHJldmlzaW9uIDExMjgxNikKKysrIFNvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTIyLDcgKzUyMiw2IEBAIGludHB0cl90IFN0cmluZzo6dG9J
bnRQdHJTdHJpY3QoYm9vbCogb2sKICAgICByZXR1cm4gbV9pbXBsLT50b0ludFB0clN0cmljdChv
aywgYmFzZSk7CiB9CiAKLQogaW50IFN0cmluZzo6dG9JbnQoYm9vbCogb2spIGNvbnN0CiB7CiAg
ICAgaWYgKCFtX2ltcGwpIHsKQEAgLTU3MywyOCArNTcyLDI0IEBAIGludHB0cl90IFN0cmluZzo6
dG9JbnRQdHIoYm9vbCogb2spIGNvbnMKICAgICByZXR1cm4gbV9pbXBsLT50b0ludFB0cihvayk7
CiB9CiAKLWRvdWJsZSBTdHJpbmc6OnRvRG91YmxlKGJvb2wqIG9rLCBib29sKiBkaWRSZWFkTnVt
YmVyKSBjb25zdAorZG91YmxlIFN0cmluZzo6dG9Eb3VibGUoYm9vbCogb2spIGNvbnN0CiB7CiAg
ICAgaWYgKCFtX2ltcGwpIHsKICAgICAgICAgaWYgKG9rKQogICAgICAgICAgICAgKm9rID0gZmFs
c2U7Ci0gICAgICAgIGlmIChkaWRSZWFkTnVtYmVyKQotICAgICAgICAgICAgKmRpZFJlYWROdW1i
ZXIgPSBmYWxzZTsKICAgICAgICAgcmV0dXJuIDAuMDsKICAgICB9Ci0gICAgcmV0dXJuIG1faW1w
bC0+dG9Eb3VibGUob2ssIGRpZFJlYWROdW1iZXIpOworICAgIHJldHVybiBtX2ltcGwtPnRvRG91
YmxlKG9rKTsKIH0KIAotZmxvYXQgU3RyaW5nOjp0b0Zsb2F0KGJvb2wqIG9rLCBib29sKiBkaWRS
ZWFkTnVtYmVyKSBjb25zdAorZmxvYXQgU3RyaW5nOjp0b0Zsb2F0KGJvb2wqIG9rKSBjb25zdAog
ewogICAgIGlmICghbV9pbXBsKSB7CiAgICAgICAgIGlmIChvaykKICAgICAgICAgICAgICpvayA9
IGZhbHNlOwotICAgICAgICBpZiAoZGlkUmVhZE51bWJlcikKLSAgICAgICAgICAgICpkaWRSZWFk
TnVtYmVyID0gZmFsc2U7CiAgICAgICAgIHJldHVybiAwLjBmOwogICAgIH0KLSAgICByZXR1cm4g
bV9pbXBsLT50b0Zsb2F0KG9rLCBkaWRSZWFkTnVtYmVyKTsKKyAgICByZXR1cm4gbV9pbXBsLT50
b0Zsb2F0KG9rKTsKIH0KIAogU3RyaW5nIFN0cmluZzo6aXNvbGF0ZWRDb3B5KCkgY29uc3QKQEAg
LTEwMzYsNjMgKzEwMzEsNjQgQEAgaW50cHRyX3QgY2hhcmFjdGVyc1RvSW50UHRyKGNvbnN0IFVD
aGFyKgogICAgIHJldHVybiB0b0ludGVncmFsVHlwZTxpbnRwdHJfdCwgVUNoYXI+KGRhdGEsIGxl
bmd0aE9mQ2hhcmFjdGVyc0FzSW50ZWdlcjxVQ2hhcj4oZGF0YSwgbGVuZ3RoKSwgb2ssIDEwKTsK
IH0KIAotdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJUeXBlLCBXVEY6OkFsbG93VHJhaWxpbmdKdW5r
VGFnIGFsbG93VHJhaWxpbmdKdW5rPgotc3RhdGljIGlubGluZSBkb3VibGUgdG9Eb3VibGVUeXBl
KGNvbnN0IENoYXJUeXBlKiBkYXRhLCBzaXplX3QgbGVuZ3RoLCBib29sKiBvaywgYm9vbCogZGlk
UmVhZE51bWJlcikKK2VudW0gVHJhaWxpbmdKdW5rUG9saWN5IHsgRGlzYWxsb3dUcmFpbGluZ0p1
bmssIEFsbG93VHJhaWxpbmdKdW5rIH07CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBDaGFyVHlwZSwg
VHJhaWxpbmdKdW5rUG9saWN5IHBvbGljeT4KK3N0YXRpYyBpbmxpbmUgZG91YmxlIHRvRG91Ymxl
VHlwZShjb25zdCBDaGFyVHlwZSogZGF0YSwgc2l6ZV90IGxlbmd0aCwgYm9vbCogb2ssIHNpemVf
dCYgcGFyc2VkTGVuZ3RoKQogewotICAgIGlmICghbGVuZ3RoKSB7CisgICAgc2l6ZV90IGxlYWRp
bmdTcGFjZXNMZW5ndGggPSAwOworICAgIHdoaWxlIChsZWFkaW5nU3BhY2VzTGVuZ3RoIDwgbGVu
Z3RoICYmIGlzQVNDSUlTcGFjZShkYXRhW2xlYWRpbmdTcGFjZXNMZW5ndGhdKSkKKyAgICAgICAg
KytsZWFkaW5nU3BhY2VzTGVuZ3RoOworCisgICAgZG91YmxlIG51bWJlciA9IHBhcnNlRG91Ymxl
KGRhdGEgKyBsZWFkaW5nU3BhY2VzTGVuZ3RoLCBsZW5ndGggLSBsZWFkaW5nU3BhY2VzTGVuZ3Ro
LCBwYXJzZWRMZW5ndGgpOworICAgIGlmICghcGFyc2VkTGVuZ3RoKSB7CiAgICAgICAgIGlmIChv
aykKICAgICAgICAgICAgICpvayA9IGZhbHNlOwotICAgICAgICBpZiAoZGlkUmVhZE51bWJlcikK
LSAgICAgICAgICAgICpkaWRSZWFkTnVtYmVyID0gZmFsc2U7CiAgICAgICAgIHJldHVybiAwLjA7
CiAgICAgfQogCi0gICAgVmVjdG9yPGNoYXIsIDI1Nj4gYnl0ZXMobGVuZ3RoICsgMSk7Ci0gICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQotICAgICAgICBieXRlc1tpXSA9
IGRhdGFbaV0gPCAweDdGID8gZGF0YVtpXSA6ICc/JzsKLSAgICBieXRlc1tsZW5ndGhdID0gJ1ww
JzsKLSAgICBjaGFyKiBzdGFydCA9IGJ5dGVzLmRhdGEoKTsKLSAgICBjaGFyKiBlbmQ7Ci0gICAg
ZG91YmxlIHZhbCA9IFdURjo6c3RydG9kPGFsbG93VHJhaWxpbmdKdW5rLCBXVEY6OkRpc2FsbG93
VHJhaWxpbmdTcGFjZXM+KHN0YXJ0LCAmZW5kKTsKKyAgICBwYXJzZWRMZW5ndGggKz0gbGVhZGlu
Z1NwYWNlc0xlbmd0aDsKICAgICBpZiAob2spCi0gICAgICAgICpvayA9IChlbmQgPT0gMCB8fCAq
ZW5kID09ICdcMCcpICYmICFpc25hbih2YWwpOwotICAgIGlmIChkaWRSZWFkTnVtYmVyKQotICAg
ICAgICAqZGlkUmVhZE51bWJlciA9IGVuZCAtIHN0YXJ0OwotICAgIHJldHVybiB2YWw7CisgICAg
ICAgICpvayA9IHBvbGljeSA9PSBBbGxvd1RyYWlsaW5nSnVuayB8fCBwYXJzZWRMZW5ndGggPT0g
bGVuZ3RoOworICAgIHJldHVybiBudW1iZXI7CiB9CiAKLWRvdWJsZSBjaGFyYWN0ZXJzVG9Eb3Vi
bGUoY29uc3QgTENoYXIqIGRhdGEsIHNpemVfdCBsZW5ndGgsIGJvb2wqIG9rLCBib29sKiBkaWRS
ZWFkTnVtYmVyKQorZG91YmxlIGNoYXJhY3RlcnNUb0RvdWJsZShjb25zdCBMQ2hhciogZGF0YSwg
c2l6ZV90IGxlbmd0aCwgYm9vbCogb2spCiB7Ci0gICAgcmV0dXJuIHRvRG91YmxlVHlwZTxMQ2hh
ciwgV1RGOjpEaXNhbGxvd1RyYWlsaW5nSnVuaz4oZGF0YSwgbGVuZ3RoLCBvaywgZGlkUmVhZE51
bWJlcik7CisgICAgc2l6ZV90IHBhcnNlZExlbmd0aDsKKyAgICByZXR1cm4gdG9Eb3VibGVUeXBl
PExDaGFyLCBEaXNhbGxvd1RyYWlsaW5nSnVuaz4oZGF0YSwgbGVuZ3RoLCBvaywgcGFyc2VkTGVu
Z3RoKTsKIH0KIAotZG91YmxlIGNoYXJhY3RlcnNUb0RvdWJsZShjb25zdCBVQ2hhciogZGF0YSwg
c2l6ZV90IGxlbmd0aCwgYm9vbCogb2ssIGJvb2wqIGRpZFJlYWROdW1iZXIpCitkb3VibGUgY2hh
cmFjdGVyc1RvRG91YmxlKGNvbnN0IFVDaGFyKiBkYXRhLCBzaXplX3QgbGVuZ3RoLCBib29sKiBv
aykKIHsKLSAgICByZXR1cm4gdG9Eb3VibGVUeXBlPFVDaGFyLCBXVEY6OkRpc2FsbG93VHJhaWxp
bmdKdW5rPihkYXRhLCBsZW5ndGgsIG9rLCBkaWRSZWFkTnVtYmVyKTsKKyAgICBzaXplX3QgcGFy
c2VkTGVuZ3RoOworICAgIHJldHVybiB0b0RvdWJsZVR5cGU8VUNoYXIsIERpc2FsbG93VHJhaWxp
bmdKdW5rPihkYXRhLCBsZW5ndGgsIG9rLCBwYXJzZWRMZW5ndGgpOwogfQogCi1mbG9hdCBjaGFy
YWN0ZXJzVG9GbG9hdChjb25zdCBMQ2hhciogZGF0YSwgc2l6ZV90IGxlbmd0aCwgYm9vbCogb2ss
IGJvb2wqIGRpZFJlYWROdW1iZXIpCitmbG9hdCBjaGFyYWN0ZXJzVG9GbG9hdChjb25zdCBMQ2hh
ciogZGF0YSwgc2l6ZV90IGxlbmd0aCwgYm9vbCogb2spCiB7CiAgICAgLy8gRklYTUU6IFRoaXMg
d2lsbCByZXR1cm4gb2sgZXZlbiB3aGVuIHRoZSBzdHJpbmcgZml0cyBpbnRvIGEgZG91YmxlIGJ1
dCBub3QgYSBmbG9hdC4KLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHRvRG91YmxlVHlw
ZTxMQ2hhciwgV1RGOjpEaXNhbGxvd1RyYWlsaW5nSnVuaz4oZGF0YSwgbGVuZ3RoLCBvaywgZGlk
UmVhZE51bWJlcikpOworICAgIHNpemVfdCBwYXJzZWRMZW5ndGg7CisgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PGZsb2F0Pih0b0RvdWJsZVR5cGU8TENoYXIsIERpc2FsbG93VHJhaWxpbmdKdW5rPihk
YXRhLCBsZW5ndGgsIG9rLCBwYXJzZWRMZW5ndGgpKTsKIH0KIAotZmxvYXQgY2hhcmFjdGVyc1Rv
RmxvYXQoY29uc3QgVUNoYXIqIGRhdGEsIHNpemVfdCBsZW5ndGgsIGJvb2wqIG9rLCBib29sKiBk
aWRSZWFkTnVtYmVyKQorZmxvYXQgY2hhcmFjdGVyc1RvRmxvYXQoY29uc3QgVUNoYXIqIGRhdGEs
IHNpemVfdCBsZW5ndGgsIGJvb2wqIG9rKQogewogICAgIC8vIEZJWE1FOiBUaGlzIHdpbGwgcmV0
dXJuIG9rIGV2ZW4gd2hlbiB0aGUgc3RyaW5nIGZpdHMgaW50byBhIGRvdWJsZSBidXQgbm90IGEg
ZmxvYXQuCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0Pih0b0RvdWJsZVR5cGU8VUNoYXIs
IFdURjo6RGlzYWxsb3dUcmFpbGluZ0p1bms+KGRhdGEsIGxlbmd0aCwgb2ssIGRpZFJlYWROdW1i
ZXIpKTsKKyAgICBzaXplX3QgcGFyc2VkTGVuZ3RoOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxm
bG9hdD4odG9Eb3VibGVUeXBlPFVDaGFyLCBEaXNhbGxvd1RyYWlsaW5nSnVuaz4oZGF0YSwgbGVu
Z3RoLCBvaywgcGFyc2VkTGVuZ3RoKSk7CiB9CiAKLWZsb2F0IGNoYXJhY3RlcnNUb0Zsb2F0SWdu
b3JpbmdKdW5rKGNvbnN0IExDaGFyKiBkYXRhLCBzaXplX3QgbGVuZ3RoLCBib29sKiBvaywgYm9v
bCogZGlkUmVhZE51bWJlcikKK2Zsb2F0IGNoYXJhY3RlcnNUb0Zsb2F0KGNvbnN0IExDaGFyKiBk
YXRhLCBzaXplX3QgbGVuZ3RoLCBzaXplX3QmIHBhcnNlZExlbmd0aCkKIHsKICAgICAvLyBGSVhN
RTogVGhpcyB3aWxsIHJldHVybiBvayBldmVuIHdoZW4gdGhlIHN0cmluZyBmaXRzIGludG8gYSBk
b3VibGUgYnV0IG5vdCBhIGZsb2F0LgotICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4odG9E
b3VibGVUeXBlPExDaGFyLCBXVEY6OkFsbG93VHJhaWxpbmdKdW5rPihkYXRhLCBsZW5ndGgsIG9r
LCBkaWRSZWFkTnVtYmVyKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0Pih0b0RvdWJs
ZVR5cGU8TENoYXIsIEFsbG93VHJhaWxpbmdKdW5rPihkYXRhLCBsZW5ndGgsIDAsIHBhcnNlZExl
bmd0aCkpOwogfQogCi1mbG9hdCBjaGFyYWN0ZXJzVG9GbG9hdElnbm9yaW5nSnVuayhjb25zdCBV
Q2hhciogZGF0YSwgc2l6ZV90IGxlbmd0aCwgYm9vbCogb2ssIGJvb2wqIGRpZFJlYWROdW1iZXIp
CitmbG9hdCBjaGFyYWN0ZXJzVG9GbG9hdChjb25zdCBVQ2hhciogZGF0YSwgc2l6ZV90IGxlbmd0
aCwgc2l6ZV90JiBwYXJzZWRMZW5ndGgpCiB7CiAgICAgLy8gRklYTUU6IFRoaXMgd2lsbCByZXR1
cm4gb2sgZXZlbiB3aGVuIHRoZSBzdHJpbmcgZml0cyBpbnRvIGEgZG91YmxlIGJ1dCBub3QgYSBm
bG9hdC4KLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHRvRG91YmxlVHlwZTxVQ2hhciwg
V1RGOjpBbGxvd1RyYWlsaW5nSnVuaz4oZGF0YSwgbGVuZ3RoLCBvaywgZGlkUmVhZE51bWJlcikp
OworICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4odG9Eb3VibGVUeXBlPFVDaGFyLCBBbGxv
d1RyYWlsaW5nSnVuaz4oZGF0YSwgbGVuZ3RoLCAwLCBwYXJzZWRMZW5ndGgpKTsKIH0KIAogY29u
c3QgU3RyaW5nJiBlbXB0eVN0cmluZygpCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi90ZXh0L1dURlN0
cmluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmgJKHJl
dmlzaW9uIDExMjgxNikKKysrIFNvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmgJKHdvcmtp
bmcgY29weSkKQEAgLTg0LDEyICs4NCwxNSBAQCB1aW50NjRfdCBjaGFyYWN0ZXJzVG9VSW50NjQo
Y29uc3QgVUNoYXIqCiBpbnRwdHJfdCBjaGFyYWN0ZXJzVG9JbnRQdHIoY29uc3QgTENoYXIqLCBz
aXplX3QsIGJvb2wqIG9rID0gMCk7IC8vIGlnbm9yZXMgdHJhaWxpbmcgZ2FyYmFnZQogaW50cHRy
X3QgY2hhcmFjdGVyc1RvSW50UHRyKGNvbnN0IFVDaGFyKiwgc2l6ZV90LCBib29sKiBvayA9IDAp
OyAvLyBpZ25vcmVzIHRyYWlsaW5nIGdhcmJhZ2UKIAotV1RGX0VYUE9SVF9QUklWQVRFIGRvdWJs
ZSBjaGFyYWN0ZXJzVG9Eb3VibGUoY29uc3QgTENoYXIqLCBzaXplX3QsIGJvb2wqIG9rID0gMCwg
Ym9vbCogZGlkUmVhZE51bWJlciA9IDApOwotV1RGX0VYUE9SVF9QUklWQVRFIGRvdWJsZSBjaGFy
YWN0ZXJzVG9Eb3VibGUoY29uc3QgVUNoYXIqLCBzaXplX3QsIGJvb2wqIG9rID0gMCwgYm9vbCog
ZGlkUmVhZE51bWJlciA9IDApOwotZmxvYXQgY2hhcmFjdGVyc1RvRmxvYXQoY29uc3QgTENoYXIq
LCBzaXplX3QsIGJvb2wqIG9rID0gMCwgYm9vbCogZGlkUmVhZE51bWJlciA9IDApOwotV1RGX0VY
UE9SVF9QUklWQVRFIGZsb2F0IGNoYXJhY3RlcnNUb0Zsb2F0SWdub3JpbmdKdW5rKGNvbnN0IExD
aGFyKiwgc2l6ZV90LCBib29sKiBvayA9IDAsIGJvb2wqIGRpZFJlYWROdW1iZXIgPSAwKTsKLVdU
Rl9FWFBPUlRfUFJJVkFURSBmbG9hdCBjaGFyYWN0ZXJzVG9GbG9hdChjb25zdCBVQ2hhciosIHNp
emVfdCwgYm9vbCogb2sgPSAwLCBib29sKiBkaWRSZWFkTnVtYmVyID0gMCk7Ci1XVEZfRVhQT1JU
X1BSSVZBVEUgZmxvYXQgY2hhcmFjdGVyc1RvRmxvYXRJZ25vcmluZ0p1bmsoY29uc3QgVUNoYXIq
LCBzaXplX3QsIGJvb2wqIG9rID0gMCwgYm9vbCogZGlkUmVhZE51bWJlciA9IDApOworLy8gRklY
TUU6IExpa2UgdGhlIHN0cmljdCBmdW5jdGlvbnMgYWJvdmUsIHRoZXNlIGdpdmUgZmFsc2UgZm9y
ICJvayIgd2hlbiB0aGVyZSBpcyB0cmFpbGluZyBnYXJiYWdlLgorLy8gTGlrZSB0aGUgbm9uLXN0
cmljdCBmdW5jdGlvbnMgYWJvdmUsIHRoZXNlIHJldHVybiB0aGUgdmFsdWUgd2hlbiB0aGVyZSBp
cyB0cmFpbGluZyBnYXJiYWdlLgorLy8gSXQgd291bGQgYmUgYmV0dGVyIGlmIHRoZXNlIHdlcmUg
bW9yZSBjb25zaXN0ZW50IHdpdGggdGhlIGFib3ZlIGZ1bmN0aW9ucyBpbnN0ZWFkLgorV1RGX0VY
UE9SVF9QUklWQVRFIGRvdWJsZSBjaGFyYWN0ZXJzVG9Eb3VibGUoY29uc3QgTENoYXIqLCBzaXpl
X3QsIGJvb2wqIG9rID0gMCk7CitXVEZfRVhQT1JUX1BSSVZBVEUgZG91YmxlIGNoYXJhY3RlcnNU
b0RvdWJsZShjb25zdCBVQ2hhciosIHNpemVfdCwgYm9vbCogb2sgPSAwKTsKK2Zsb2F0IGNoYXJh
Y3RlcnNUb0Zsb2F0KGNvbnN0IExDaGFyKiwgc2l6ZV90LCBib29sKiBvayA9IDApOworV1RGX0VY
UE9SVF9QUklWQVRFIGZsb2F0IGNoYXJhY3RlcnNUb0Zsb2F0KGNvbnN0IFVDaGFyKiwgc2l6ZV90
LCBib29sKiBvayA9IDApOworV1RGX0VYUE9SVF9QUklWQVRFIGZsb2F0IGNoYXJhY3RlcnNUb0Zs
b2F0KGNvbnN0IExDaGFyKiwgc2l6ZV90LCBzaXplX3QmIHBhcnNlZExlbmd0aCk7CitXVEZfRVhQ
T1JUX1BSSVZBVEUgZmxvYXQgY2hhcmFjdGVyc1RvRmxvYXQoY29uc3QgVUNoYXIqLCBzaXplX3Qs
IHNpemVfdCYgcGFyc2VkTGVuZ3RoKTsKIAogZW51bSBGbG9hdENvbnZlcnNpb25GbGFncyB7CiAg
ICAgU2hvdWxkUm91bmRTaWduaWZpY2FudEZpZ3VyZXMgPSAxIDw8IDAsCkBAIC0zMTEsOCArMzE0
LDEyIEBAIHB1YmxpYzoKICAgICBpbnQ2NF90IHRvSW50NjQoYm9vbCogb2sgPSAwKSBjb25zdDsK
ICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdWludDY0X3QgdG9VSW50NjQoYm9vbCogb2sgPSAwKSBj
b25zdDsKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgaW50cHRyX3QgdG9JbnRQdHIoYm9vbCogb2sg
PSAwKSBjb25zdDsKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgZG91YmxlIHRvRG91YmxlKGJvb2wq
IG9rID0gMCwgYm9vbCogZGlkUmVhZE51bWJlciA9IDApIGNvbnN0OwotICAgIFdURl9FWFBPUlRf
UFJJVkFURSBmbG9hdCB0b0Zsb2F0KGJvb2wqIG9rID0gMCwgYm9vbCogZGlkUmVhZE51bWJlciA9
IDApIGNvbnN0OworCisgICAgLy8gRklYTUU6IExpa2UgdGhlIHN0cmljdCBmdW5jdGlvbnMgYWJv
dmUsIHRoZXNlIGdpdmUgZmFsc2UgZm9yICJvayIgd2hlbiB0aGVyZSBpcyB0cmFpbGluZyBnYXJi
YWdlLgorICAgIC8vIExpa2UgdGhlIG5vbi1zdHJpY3QgZnVuY3Rpb25zIGFib3ZlLCB0aGVzZSBy
ZXR1cm4gdGhlIHZhbHVlIHdoZW4gdGhlcmUgaXMgdHJhaWxpbmcgZ2FyYmFnZS4KKyAgICAvLyBJ
dCB3b3VsZCBiZSBiZXR0ZXIgaWYgdGhlc2Ugd2VyZSBtb3JlIGNvbnNpc3RlbnQgd2l0aCB0aGUg
YWJvdmUgZnVuY3Rpb25zIGluc3RlYWQuCisgICAgV1RGX0VYUE9SVF9QUklWQVRFIGRvdWJsZSB0
b0RvdWJsZShib29sKiBvayA9IDApIGNvbnN0OworICAgIFdURl9FWFBPUlRfUFJJVkFURSBmbG9h
dCB0b0Zsb2F0KGJvb2wqIG9rID0gMCkgY29uc3Q7CiAKICAgICBib29sIHBlcmNlbnRhZ2UoaW50
JiBwZXJjZW50YWdlKSBjb25zdDsKIApJbmRleDogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTEyODMxKQor
KysgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjkg
QEAKKzIwMTItMDQtMDEgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAg
IFN0cmVhbWxpbmUgc3RydG9kIGFuZCBmaXggc29tZSByZWxhdGVkIHByb2JsZW1zCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04Mjg1NworCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gKE9P
UFMhKQorCisgICAgICAgICogZG9tL1ZpZXdwb3J0QXJndW1lbnRzLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Om51bWVyaWNQcmVmaXgpOiBSZW1vdmVkIGEgY29uZnVzaW5nIGNvbW1lbnQgdGhhdCBq
dXN0IHNhaWQKKyAgICAgICAgIndlIHRvbGVyYXRlIGV4dHJhIGNoYXJhY3RlcnMiIGluIGEgcm91
bmRhYm91dCB3YXkuIE1hZGUgdGhlICJvayIKKyAgICAgICAgYXJndW1lbnQgb3B0aW9uYWwuIENo
YW5nZWQgdG8gY2FsbCB0aGUgbmV3IHZlcnNpb24gb2YgY2hhcmFjdGVyc1RvRmxvYXQKKyAgICAg
ICAgdGhhdCByZXR1cm5zIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBwYXJzZWQgcmF0aGVyIHRo
YW4gdXNpbmcgdGhlCisgICAgICAgIGNoYXJhY3RlcnNUb0Zsb2F0SWdub3JpbmdKdW5rL2RpZFJl
YWROdW1iZXIgc29sdXRpb24gZnJvbSBiZWZvcmUuCisgICAgICAgIChXZWJDb3JlOjpmaW5kU2l6
ZVZhbHVlKTogU2luY2UgbnVtZXJpY1ByZWZpeCBpcyBndWFyYW50ZWVkIHRvIHJldHVybiAwCisg
ICAgICAgIHdoZW4gaXQgY2FuJ3QgcGFyc2UsIHJlbW92ZWQgdGhlICJvayIgY29kZS4gQWxzbyBj
aGFuZ2VkIHRoZSB1bnVzdWFsCisgICAgICAgIHN5bnRheCAiZmxvYXQoMS4wKSIgdG8ganVzdCAi
MSIsIHdoaWNoIHdvcmtzIGp1c3QgYXMgd2VsbC4KKyAgICAgICAgKFdlYkNvcmU6OmZpbmRTY2Fs
ZVZhbHVlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpmaW5kVXNlclNjYWxhYmxlVmFsdWUp
OiBEaXR0by4KKworICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxQYXJzZXJJZGlvbXMuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6cGFyc2VUb0RvdWJsZUZvck51bWJlclR5cGUpOiBSZW1vdmVkIGFu
IHVubmVlZGVkIGNvZGUgcGF0aAorICAgICAgICBhbmQgcmVwbGFjZWQgaXQgd2l0aCBhbiBhc3Nl
cnRpb247IHRvRG91YmxlIG5vIGxvbmdlciB3aWxsIHJldHVybiBpbmZpbml0eQorICAgICAgICBv
ciBub3QtYS1udW1iZXIgdmFsdWVzLgorCiAyMDEyLTAzLTI5ICBLZW50IFRhbXVyYSAgPHRrZW50
QGNocm9taXVtLm9yZz4KIAogICAgICAgICBGaXggc29tZSBwcm9ibGVtcyBvZiB0ZXh0IGZpZWxk
IGRlY29yYXRpb24KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9WaWV3cG9ydEFyZ3VtZW50cy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1ZpZXdwb3J0QXJndW1lbnRzLmNw
cAkocmV2aXNpb24gMTEyODE2KQorKysgU291cmNlL1dlYkNvcmUvZG9tL1ZpZXdwb3J0QXJndW1l
bnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA0LDI4ICsyMDQsMjQgQEAgdm9pZCByZXN0cmlj
dFNjYWxlRmFjdG9yVG9Jbml0aWFsU2NhbGVJZgogICAgICAgICByZXN1bHQubWF4aW11bVNjYWxl
ID0gcmVzdWx0Lm1pbmltdW1TY2FsZSA9IHJlc3VsdC5pbml0aWFsU2NhbGU7CiB9CiAKLXN0YXRp
YyBmbG9hdCBudW1lcmljUHJlZml4KGNvbnN0IFN0cmluZyYga2V5U3RyaW5nLCBjb25zdCBTdHJp
bmcmIHZhbHVlU3RyaW5nLCBEb2N1bWVudCogZG9jdW1lbnQsIGJvb2wqIG9rKQorc3RhdGljIGZs
b2F0IG51bWVyaWNQcmVmaXgoY29uc3QgU3RyaW5nJiBrZXlTdHJpbmcsIGNvbnN0IFN0cmluZyYg
dmFsdWVTdHJpbmcsIERvY3VtZW50KiBkb2N1bWVudCwgYm9vbCogb2sgPSAwKQogewotICAgIC8v
IElmIGEgcHJlZml4IG9mIHByb3BlcnR5LXZhbHVlIGNhbiBiZSBjb252ZXJ0ZWQgdG8gYSBudW1i
ZXIgdXNpbmcgc3RydG9kLAotICAgIC8vIHRoZSB2YWx1ZSB3aWxsIGJlIHRoYXQgbnVtYmVyLiBU
aGUgcmVtYWluZGVyIG9mIHRoZSBzdHJpbmcgaXMgaWdub3JlZC4KLSAgICAvLyBTbyB3aGVuIFN0
cmluZzo6dG9GbG9hdCBzYXlzIHRoZXJlIGlzIGFuIGVycm9yLCBpdCBtYXkgYmUgYSBmYWxzZSBw
b3NpdGl2ZSwKLSAgICAvLyBhbmQgd2Ugc2hvdWxkIGNoZWNrIGlmIHRoZSB2YWx1ZVN0cmluZyBw
cmVmaXggd2FzIGEgbnVtYmVyLgotCi0gICAgYm9vbCBkaWRSZWFkTnVtYmVyOworICAgIHNpemVf
dCBwYXJzZWRMZW5ndGg7CiAgICAgZmxvYXQgdmFsdWU7CiAgICAgaWYgKHZhbHVlU3RyaW5nLmlz
OEJpdCgpKQotICAgICAgICB2YWx1ZSA9IFdURjo6Y2hhcmFjdGVyc1RvRmxvYXRJZ25vcmluZ0p1
bmsodmFsdWVTdHJpbmcuY2hhcmFjdGVyczgoKSwgdmFsdWVTdHJpbmcubGVuZ3RoKCksIG9rLCAm
ZGlkUmVhZE51bWJlcik7CisgICAgICAgIHZhbHVlID0gY2hhcmFjdGVyc1RvRmxvYXQodmFsdWVT
dHJpbmcuY2hhcmFjdGVyczgoKSwgdmFsdWVTdHJpbmcubGVuZ3RoKCksIHBhcnNlZExlbmd0aCk7
CiAgICAgZWxzZQotICAgICAgICB2YWx1ZSA9IFdURjo6Y2hhcmFjdGVyc1RvRmxvYXRJZ25vcmlu
Z0p1bmsodmFsdWVTdHJpbmcuY2hhcmFjdGVyczE2KCksIHZhbHVlU3RyaW5nLmxlbmd0aCgpLCBv
aywgJmRpZFJlYWROdW1iZXIpOwotICAgIGlmICghKm9rKSB7Ci0gICAgICAgIGlmICghZGlkUmVh
ZE51bWJlcikgewotICAgICAgICAgICAgQVNTRVJUKGlzbmFuKHZhbHVlKSB8fCAhdmFsdWUpOwot
ICAgICAgICAgICAgcmVwb3J0Vmlld3BvcnRXYXJuaW5nKGRvY3VtZW50LCBVbnJlY29nbml6ZWRW
aWV3cG9ydEFyZ3VtZW50VmFsdWVFcnJvciwgdmFsdWVTdHJpbmcsIGtleVN0cmluZyk7Ci0gICAg
ICAgICAgICByZXR1cm4gdmFsdWU7Ci0gICAgICAgIH0KLSAgICAgICAgKm9rID0gdHJ1ZTsKLSAg
ICAgICAgcmVwb3J0Vmlld3BvcnRXYXJuaW5nKGRvY3VtZW50LCBUcnVuY2F0ZWRWaWV3cG9ydEFy
Z3VtZW50VmFsdWVFcnJvciwgdmFsdWVTdHJpbmcsIGtleVN0cmluZyk7CisgICAgICAgIHZhbHVl
ID0gY2hhcmFjdGVyc1RvRmxvYXQodmFsdWVTdHJpbmcuY2hhcmFjdGVyczE2KCksIHZhbHVlU3Ry
aW5nLmxlbmd0aCgpLCBwYXJzZWRMZW5ndGgpOworICAgIGlmICghcGFyc2VkTGVuZ3RoKSB7Cisg
ICAgICAgIHJlcG9ydFZpZXdwb3J0V2FybmluZyhkb2N1bWVudCwgVW5yZWNvZ25pemVkVmlld3Bv
cnRBcmd1bWVudFZhbHVlRXJyb3IsIHZhbHVlU3RyaW5nLCBrZXlTdHJpbmcpOworICAgICAgICBp
ZiAob2spCisgICAgICAgICAgICAqb2sgPSBmYWxzZTsKKyAgICAgICAgcmV0dXJuIDA7CiAgICAg
fQorICAgIGlmIChwYXJzZWRMZW5ndGggPCB2YWx1ZVN0cmluZy5sZW5ndGgoKSkKKyAgICAgICAg
cmVwb3J0Vmlld3BvcnRXYXJuaW5nKGRvY3VtZW50LCBUcnVuY2F0ZWRWaWV3cG9ydEFyZ3VtZW50
VmFsdWVFcnJvciwgdmFsdWVTdHJpbmcsIGtleVN0cmluZyk7CisgICAgaWYgKG9rKQorICAgICAg
ICAqb2sgPSB0cnVlOwogICAgIHJldHVybiB2YWx1ZTsKIH0KIApAQCAtMjQzLDEwICsyMzksNyBA
QCBzdGF0aWMgZmxvYXQgZmluZFNpemVWYWx1ZShjb25zdCBTdHJpbmcmCiAgICAgaWYgKGVxdWFs
SWdub3JpbmdDYXNlKHZhbHVlU3RyaW5nLCAiZGV2aWNlLWhlaWdodCIpKQogICAgICAgICByZXR1
cm4gVmlld3BvcnRBcmd1bWVudHM6OlZhbHVlRGV2aWNlSGVpZ2h0OwogCi0gICAgYm9vbCBvazsK
LSAgICBmbG9hdCB2YWx1ZSA9IG51bWVyaWNQcmVmaXgoa2V5U3RyaW5nLCB2YWx1ZVN0cmluZywg
ZG9jdW1lbnQsICZvayk7Ci0gICAgaWYgKCFvaykKLSAgICAgICAgcmV0dXJuIGZsb2F0KDAuMCk7
CisgICAgZmxvYXQgdmFsdWUgPSBudW1lcmljUHJlZml4KGtleVN0cmluZywgdmFsdWVTdHJpbmcs
IGRvY3VtZW50KTsKIAogICAgIGlmICh2YWx1ZSA8IDApCiAgICAgICAgIHJldHVybiBWaWV3cG9y
dEFyZ3VtZW50czo6VmFsdWVBdXRvOwpAQCAtMjYzLDIwICsyNTYsMTcgQEAgc3RhdGljIGZsb2F0
IGZpbmRTY2FsZVZhbHVlKGNvbnN0IFN0cmluZwogICAgIC8vIDUpIG5vIGFuZCB1bmtub3duIHZh
bHVlcyBhcmUgdHJhbnNsYXRlZCB0byAwLjAKIAogICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZSh2
YWx1ZVN0cmluZywgInllcyIpKQotICAgICAgICByZXR1cm4gZmxvYXQoMS4wKTsKKyAgICAgICAg
cmV0dXJuIDE7CiAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKHZhbHVlU3RyaW5nLCAibm8iKSkK
LSAgICAgICAgcmV0dXJuIGZsb2F0KDAuMCk7CisgICAgICAgIHJldHVybiAwOwogICAgIGlmIChl
cXVhbElnbm9yaW5nQ2FzZSh2YWx1ZVN0cmluZywgImRlc2t0b3Atd2lkdGgiKSkKLSAgICAgICAg
cmV0dXJuIGZsb2F0KDEwLjApOworICAgICAgICByZXR1cm4gMTA7CiAgICAgaWYgKGVxdWFsSWdu
b3JpbmdDYXNlKHZhbHVlU3RyaW5nLCAiZGV2aWNlLXdpZHRoIikpCi0gICAgICAgIHJldHVybiBm
bG9hdCgxMC4wKTsKKyAgICAgICAgcmV0dXJuIDEwOwogICAgIGlmIChlcXVhbElnbm9yaW5nQ2Fz
ZSh2YWx1ZVN0cmluZywgImRldmljZS1oZWlnaHQiKSkKLSAgICAgICAgcmV0dXJuIGZsb2F0KDEw
LjApOworICAgICAgICByZXR1cm4gMTA7CiAKLSAgICBib29sIG9rOwotICAgIGZsb2F0IHZhbHVl
ID0gbnVtZXJpY1ByZWZpeChrZXlTdHJpbmcsIHZhbHVlU3RyaW5nLCBkb2N1bWVudCwgJm9rKTsK
LSAgICBpZiAoIW9rKQotICAgICAgICByZXR1cm4gZmxvYXQoMC4wKTsKKyAgICBmbG9hdCB2YWx1
ZSA9IG51bWVyaWNQcmVmaXgoa2V5U3RyaW5nLCB2YWx1ZVN0cmluZywgZG9jdW1lbnQpOwogCiAg
ICAgaWYgKHZhbHVlIDwgMCkKICAgICAgICAgcmV0dXJuIFZpZXdwb3J0QXJndW1lbnRzOjpWYWx1
ZUF1dG87CkBAIC0zMDQsMTAgKzI5NCw3IEBAIHN0YXRpYyBmbG9hdCBmaW5kVXNlclNjYWxhYmxl
VmFsdWUoY29uc3QKICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UodmFsdWVTdHJpbmcsICJkZXZp
Y2UtaGVpZ2h0IikpCiAgICAgICAgIHJldHVybiAxOwogCi0gICAgYm9vbCBvazsKLSAgICBmbG9h
dCB2YWx1ZSA9IG51bWVyaWNQcmVmaXgoa2V5U3RyaW5nLCB2YWx1ZVN0cmluZywgZG9jdW1lbnQs
ICZvayk7Ci0gICAgaWYgKCFvaykKLSAgICAgICAgcmV0dXJuIDA7CisgICAgZmxvYXQgdmFsdWUg
PSBudW1lcmljUHJlZml4KGtleVN0cmluZywgdmFsdWVTdHJpbmcsIGRvY3VtZW50KTsKIAogICAg
IGlmIChmYWJzKHZhbHVlKSA8IDEpCiAgICAgICAgIHJldHVybiAwOwpAQCAtMzMxLDcgKzMxOCw3
IEBAIHN0YXRpYyBmbG9hdCBmaW5kVGFyZ2V0RGVuc2l0eURQSVZhbHVlKGMKICAgICBpZiAoIW9r
KQogICAgICAgICByZXR1cm4gVmlld3BvcnRBcmd1bWVudHM6OlZhbHVlQXV0bzsKIAotICAgICBp
ZiAodmFsdWUgPCA3MCB8fCB2YWx1ZSA+IDQwMCkgeworICAgIGlmICh2YWx1ZSA8IDcwIHx8IHZh
bHVlID4gNDAwKSB7CiAgICAgICAgIHJlcG9ydFZpZXdwb3J0V2FybmluZyhkb2N1bWVudCwgVGFy
Z2V0RGVuc2l0eURwaVRvb1NtYWxsT3JMYXJnZUVycm9yLCBTdHJpbmcoKSwgU3RyaW5nKCkpOwog
ICAgICAgICByZXR1cm4gVmlld3BvcnRBcmd1bWVudHM6OlZhbHVlQXV0bzsKICAgICB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MUGFyc2VySWRpb21zLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MUGFyc2VySWRpb21zLmNwcAko
cmV2aXNpb24gMTEyODE2KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFBhcnNl
cklkaW9tcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc5LDEwICs3OSw3IEBAIGJvb2wgcGFyc2VU
b0RvdWJsZUZvck51bWJlclR5cGUoY29uc3QgU3QKICAgICBkb3VibGUgdmFsdWUgPSBzdHJpbmcu
dG9Eb3VibGUoJnZhbGlkKTsKICAgICBpZiAoIXZhbGlkKQogICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICAvLyBOYU4gYW5kIGluZmluaXR5IGFyZSBjb25zaWRlcmVkIHZhbGlkIGJ5IFN0cmlu
Zzo6dG9Eb3VibGUsIGJ1dCBub3QgdmFsaWQgaGVyZS4KLSAgICBpZiAoIWlzZmluaXRlKHZhbHVl
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIEFTU0VSVChpc2Zpbml0ZSh2YWx1ZSkpOwog
CiAgICAgLy8gTnVtYmVycyBhcmUgY29uc2lkZXJlZCBmaW5pdGUgSUVFRSA3NTQgc2luZ2xlLXBy
ZWNpc2lvbiBmbG9hdGluZyBwb2ludCB2YWx1ZXMuCiAgICAgLy8gU2VlIEhUTUw1IDIuNS40LjMg
YFJlYWwgbnVtYmVycy4nCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>135033</attachid>
            <date>2012-04-02 00:28:08 -0700</date>
            <delta_ts>2012-04-04 19:18:49 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-82857-20120402002806.patch</filename>
            <type>text/plain</type>
            <size>62878</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTEyODMxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM5IEBA
CisyMDEyLTA0LTAxICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBT
dHJlYW1saW5lIHN0cnRvZCBhbmQgZml4IHNvbWUgcmVsYXRlZCBwcm9ibGVtcworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODI4NTcKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHBhcnNlci9MZXhlci5jcHA6
CisgICAgICAgIChKU0M6OkxleGVyPD46OmxleCk6IFVzZSBwYXJzZURvdWJsZS4gU2luY2Ugd2Ug
aGF2ZSBhbHJlYWR5IHNjYW5uZWQgdGhlIG51bWJlcgorICAgICAgICBhbmQgd2Uga25vdyBpdCBo
YXMgb25seSBjb3JyZWN0IGNoYXJhY3RlcnMsIGxlYWRpbmcgc3BhY2VzLCB0cmFpbGluZyBqdW5r
LCBhbmQKKyAgICAgICAgdHJhaWxpbmcgc3BhY2VzIGFyZSBub3QgYSBwb3NzaWJpbGl0eS4gTm8g
bmVlZCB0byBhZGQgYSB0cmFpbGluZyBudWxsIGNoYXJhY3Rlci4KKworICAgICAgICAqIHJ1bnRp
bWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpwYXJzZUludCk6
IENoYW5nZWQgb3ZlcmZsb3cgYmFzZWQgMTAgY2FzZSB0byB1c2UgcGFyc2VEb3VibGUuIE5vIG5l
ZWQKKyAgICAgICAgdG8gYWxsb3cgdHJhaWxpbmcganVuayBzaW5jZSB0aGUgY29kZSBhYm92ZSBh
bHJlYWR5IGFsbG93cyBvbmx5IG51bWVyaWMgZGlnaXRzCisgICAgICAgIGluIHRoZSBzdHJpbmcu
IFRoaXMgY29kZSBwYXRoIGlzIHVzZWQgb25seSBpbiB1bnVzdWFsIGNhc2VzLCBzbyBpdCdzIG5v
dAorICAgICAgICBvcHRpbWl6ZWQgZm9yIDgtYml0IHN0cmluZ3MsIGJ1dCBlYXNpbHkgY291bGQg
YmUuCisgICAgICAgIChKU0M6OmpzU3RyRGVjaW1hbExpdGVyYWwpOiBSZW1vdmVkIHRoZSBhbGxv
dyB0cmFpbGluZyBqdW5rIGFyZ3VtZW50IHRvIHRoaXMKKyAgICAgICAgZnVuY3Rpb24gdGVtcGxh
dGUgYmVjYXVzZSBhbGwgdGhlIGNhbGxlcnMgYXJlIE9LIHdpdGggdHJhaWxpbmcganVuay4gVXNl
IHRoZQorICAgICAgICBwYXJzZURvdWJsZSBmdW5jdGlvbi4gTm8gbmVlZCB0byBjb3B5IHRoZSBk
YXRhIGludG8gYSBieXRlIGJ1ZmZlciwgYmVjYXVzZQorICAgICAgICBwYXJzZURvdWJsZSBoYW5k
bGVzIHRoYXQuCisgICAgICAgIChKU0M6OnRvRG91YmxlKTogR290IHJpZCBvZiB0aGUgRGlzYWxs
b3dUcmFpbGluZ0p1bmsgYXJndW1lbnQgdG8gdGhlCisgICAgICAgIGpzU3RyRGVjaW1hbExpdGVy
YWwgZnVuY3Rpb24gdGVtcGxhdGUuIFRoYXQncyBPSyBiZWNhdXNlIHRoaXMgZnVuY3Rpb24KKyAg
ICAgICAgYWxyZWFkeSBjaGVja3MgZm9yIHRyYWlsaW5nIGp1bmsgYW5kIGhhbmRsZXMgaXQgYXBw
cm9wcmlhdGVseS4gVGhlIG9sZCBjb2RlCisgICAgICAgIHBhdGggd2FzIGRvaW5nIGl0IHR3aWNl
LgorICAgICAgICAoSlNDOjpwYXJzZUZsb2F0KTogR290IHJpZCBvZiB0aGUgQWxsb3dUcmFpbGlu
Z0p1bmsgYXJndW1lbnQgdG8gdGhlCisgICAgICAgIGpzU3RyRGVjaW1hbExpdGVyYWwgZnVuY3Rp
b24gdGVtcGxhdGU7IHRoZSB0ZW1wbGF0ZSBhbGxvd3MganVuayB1bmNvbmRpdGlvbmFsbHkuCisK
KyAgICAgICAgKiBydW50aW1lL0xpdGVyYWxQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjo6Okxl
eGVyOjpsZXhOdW1iZXIpOiBVc2UgcGFyc2VEb3VibGUuIFNpbmNlIHdlIGhhdmUgYWxyZWFkeSBz
Y2FubmVkIHRoZSBudW1iZXIKKyAgICAgICAgYW5kIHdlIGtub3cgaXQgaGFzIG9ubHkgY29ycmVj
dCBjaGFyYWN0ZXJzLCBsZWFkaW5nIHNwYWNlcywgdHJhaWxpbmcganVuaywgYW5kCisgICAgICAg
IHRyYWlsaW5nIHNwYWNlcyBhcmUgbm90IGEgcG9zc2liaWxpdHkuIE5vIG5lZWQgdG8gYWRkIGEg
dHJhaWxpbmcgbnVsbCBjaGFyYWN0ZXIuCisgICAgICAgIE5vIG5lZWQgdG8gY29weSB0aGUgZGF0
YSBpbnRvIGEgYnl0ZSBidWZmZXIsIGJlY2F1c2UgcGFyc2VEb3VibGUgaGFuZGxlcyB0aGF0Lgor
ICAgICAgICBXZSBjb3VsZCBvcHRpbWl6ZSB0aGUgVUNoYXIgY2FzZSBldmVuIG1vcmUgYmVjYXVz
ZSB3ZSBrbm93IGFsbCB0aGUgY2hhcmFjdGVycworICAgICAgICBhcmUgQVNDSUksIGJ1dCBub3Qg
ZG9pbmcgdGhhdCBhdCB0aGlzIHRpbWUuCisKIDIwMTItMDQtMDEgIERhcmluIEFkbGVyICA8ZGFy
aW5AYXBwbGUuY29tPgogCiAgICAgICAgIEZpeCBpbmNvcnJlY3QgcGF0aCBmb3IgbGliV1RGLmEg
aW4gTWFjIHByb2plY3QgZmlsZS4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIv
TGV4ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTGV4
ZXIuY3BwCShyZXZpc2lvbiAxMTI4MTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2Vy
L0xleGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ3MywxNCArMTQ3MywxNCBAQCBzdGFydDoK
IGluTnVtYmVyQWZ0ZXJEZWNpbWFsUG9pbnQ6CiAgICAgICAgICAgICAgICAgICAgIHBhcnNlTnVt
YmVyQWZ0ZXJEZWNpbWFsUG9pbnQoKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgaWYgKChtX2N1cnJlbnQgfCAweDIwKSA9PSAnZScpCisgICAgICAgICAgICAgICAgaWYgKCht
X2N1cnJlbnQgfCAweDIwKSA9PSAnZScpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFwYXJz
ZU51bWJlckFmdGVyRXhwb25lbnRJbmRpY2F0b3IoKSkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgbV9sZXhFcnJvck1lc3NhZ2UgPSAiTm9uLW51bWJlciBmb3VuZCBhZnRlciBleHBvbmVudCBp
bmRpY2F0b3IiOwogICAgICAgICAgICAgICAgICAgICAgICAgZ290byByZXR1cm5FcnJvcjsKICAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIC8vIE51bGwtdGVybWluYXRlIHN0
cmluZyBmb3Igc3RydG9kLgotICAgICAgICAgICAgICAgIG1fYnVmZmVyOC5hcHBlbmQoJ1wwJyk7
Ci0gICAgICAgICAgICAgICAgdG9rZW5EYXRhLT5kb3VibGVWYWx1ZSA9IFdURjo6c3RydG9kPFdU
Rjo6QWxsb3dUcmFpbGluZ0p1bmssIFdURjo6RGlzYWxsb3dUcmFpbGluZ1NwYWNlcz4ocmVpbnRl
cnByZXRfY2FzdDxjb25zdCBjaGFyKj4obV9idWZmZXI4LmRhdGEoKSksIDApOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBzaXplX3QgcGFyc2VkTGVuZ3RoOworICAgICAgICAg
ICAgICAgIHRva2VuRGF0YS0+ZG91YmxlVmFsdWUgPSBwYXJzZURvdWJsZShtX2J1ZmZlcjguZGF0
YSgpLCBtX2J1ZmZlcjguc2l6ZSgpLCBwYXJzZWRMZW5ndGgpOwogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgdG9rZW4gPSBOVU1CRVI7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5j
cHAJKHJldmlzaW9uIDExMjgxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
R2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAK
IC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDIgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2Rl
Lm9yZykKICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkK
LSAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIw
MDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAw
MywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3IENhbWVyb24gWndhcmlj
aCAoY3d6d2FyaWNoQHV3YXRlcmxvby5jYSkKICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgTWFrcyBP
cmxvdmljaAogICoKQEAgLTI5NSwxNyArMjk1LDIwIEBAIHN0YXRpYyBkb3VibGUgcGFyc2VJbnQo
Y29uc3QgVVN0cmluZyYgcywKICAgICAgICAgbnVtYmVyICs9IGRpZ2l0OwogICAgICAgICArK3A7
CiAgICAgfQotICAgIGlmIChudW1iZXIgPj0gbWFudGlzc2FPdmVyZmxvd0xvd2VyQm91bmQpIHsK
LSAgICAgICAgaWYgKHJhZGl4ID09IDEwKQotICAgICAgICAgICAgbnVtYmVyID0gV1RGOjpzdHJ0
b2Q8V1RGOjpBbGxvd1RyYWlsaW5nSnVuaywgV1RGOjpEaXNhbGxvd1RyYWlsaW5nU3BhY2VzPihz
LnN1YnN0cmluZ1NoYXJpbmdJbXBsKGZpcnN0RGlnaXRQb3NpdGlvbiwgcCAtIGZpcnN0RGlnaXRQ
b3NpdGlvbikudXRmOCgpLmRhdGEoKSwgMCk7Ci0gICAgICAgIGVsc2UgaWYgKHJhZGl4ID09IDIg
fHwgcmFkaXggPT0gNCB8fCByYWRpeCA9PSA4IHx8IHJhZGl4ID09IDE2IHx8IHJhZGl4ID09IDMy
KQotICAgICAgICAgICAgbnVtYmVyID0gcGFyc2VJbnRPdmVyZmxvdyhzLnN1YnN0cmluZ1NoYXJp
bmdJbXBsKGZpcnN0RGlnaXRQb3NpdGlvbiwgcCAtIGZpcnN0RGlnaXRQb3NpdGlvbikudXRmOCgp
LmRhdGEoKSwgcCAtIGZpcnN0RGlnaXRQb3NpdGlvbiwgcmFkaXgpOwotICAgIH0KIAogICAgIC8v
IDEyLiBJZiBaIGlzIGVtcHR5LCByZXR1cm4gTmFOLgogICAgIGlmICghc2F3RGlnaXQpCiAgICAg
ICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1aWV0X05hTigpOwogCisg
ICAgLy8gQWx0ZXJuYXRlIGNvZGUgcGF0aCBmb3IgY2VydGFpbiBsYXJnZSBudW1iZXJzLgorICAg
IGlmIChudW1iZXIgPj0gbWFudGlzc2FPdmVyZmxvd0xvd2VyQm91bmQpIHsKKyAgICAgICAgaWYg
KHJhZGl4ID09IDEwKSB7CisgICAgICAgICAgICBzaXplX3QgcGFyc2VkTGVuZ3RoOworICAgICAg
ICAgICAgbnVtYmVyID0gcGFyc2VEb3VibGUocy5jaGFyYWN0ZXJzKCkgKyBmaXJzdERpZ2l0UG9z
aXRpb24sIHAgLSBmaXJzdERpZ2l0UG9zaXRpb24sIHBhcnNlZExlbmd0aCk7CisgICAgICAgIH0g
ZWxzZSBpZiAocmFkaXggPT0gMiB8fCByYWRpeCA9PSA0IHx8IHJhZGl4ID09IDggfHwgcmFkaXgg
PT0gMTYgfHwgcmFkaXggPT0gMzIpCisgICAgICAgICAgICBudW1iZXIgPSBwYXJzZUludE92ZXJm
bG93KHMuc3Vic3RyaW5nU2hhcmluZ0ltcGwoZmlyc3REaWdpdFBvc2l0aW9uLCBwIC0gZmlyc3RE
aWdpdFBvc2l0aW9uKS51dGY4KCkuZGF0YSgpLCBwIC0gZmlyc3REaWdpdFBvc2l0aW9uLCByYWRp
eCk7CisgICAgfQorCiAgICAgLy8gMTUuIFJldHVybiBzaWduIHggbnVtYmVyLgogICAgIHJldHVy
biBzaWduICogbnVtYmVyOwogfQpAQCAtMzU2LDI1ICszNTksMTUgQEAgc3RhdGljIGRvdWJsZSBq
c0hleEludGVnZXJMaXRlcmFsKGNvbnN0IAogfQogCiAvLyBTZWUgZWNtYS0yNjIgOS4zLjEKLXRl
bXBsYXRlIDxXVEY6OkFsbG93VHJhaWxpbmdKdW5rVGFnIGFsbG93VHJhaWxpbmdKdW5rLCB0eXBl
bmFtZSBDaGFyVHlwZT4KK3RlbXBsYXRlIDx0eXBlbmFtZSBDaGFyVHlwZT4KIHN0YXRpYyBkb3Vi
bGUganNTdHJEZWNpbWFsTGl0ZXJhbChjb25zdCBDaGFyVHlwZSomIGRhdGEsIGNvbnN0IENoYXJU
eXBlKiBlbmQpCiB7CiAgICAgQVNTRVJUKGRhdGEgPCBlbmQpOwogCi0gICAgLy8gQ29weSB0aGUg
c3RpbmcgaW50byBhIG51bGwtdGVybWluYXRlZCBieXRlIGJ1ZmZlciwgYW5kIGNhbGwgc3RydG9k
LgotICAgIFZlY3RvcjxjaGFyLCAzMj4gYnl0ZUJ1ZmZlcjsKLSAgICBmb3IgKGNvbnN0IENoYXJU
eXBlKiBjaGFyYWN0ZXJzID0gZGF0YTsgY2hhcmFjdGVycyA8IGVuZDsgKytjaGFyYWN0ZXJzKSB7
Ci0gICAgICAgIENoYXJUeXBlIGNoYXJhY3RlciA9ICpjaGFyYWN0ZXJzOwotICAgICAgICBieXRl
QnVmZmVyLmFwcGVuZChpc0FTQ0lJKGNoYXJhY3RlcikgPyBzdGF0aWNfY2FzdDxjaGFyPihjaGFy
YWN0ZXIpIDogMCk7Ci0gICAgfQotICAgIGJ5dGVCdWZmZXIuYXBwZW5kKDApOwotICAgIGNoYXIq
IGVuZE9mTnVtYmVyOwotICAgIGRvdWJsZSBudW1iZXIgPSBXVEY6OnN0cnRvZDxhbGxvd1RyYWls
aW5nSnVuaywgV1RGOjpBbGxvd1RyYWlsaW5nU3BhY2VzPihieXRlQnVmZmVyLmRhdGEoKSwgJmVu
ZE9mTnVtYmVyKTsKLQotICAgIC8vIENoZWNrIGlmIHN0cnRvZCBmb3VuZCBhIG51bWJlcjsgaWYg
c28gcmV0dXJuIGl0LgotICAgIHB0cmRpZmZfdCBjb25zdW1lZCA9IGVuZE9mTnVtYmVyIC0gYnl0
ZUJ1ZmZlci5kYXRhKCk7Ci0gICAgaWYgKGNvbnN1bWVkKSB7Ci0gICAgICAgIGRhdGEgKz0gY29u
c3VtZWQ7CisgICAgc2l6ZV90IHBhcnNlZExlbmd0aDsKKyAgICBkb3VibGUgbnVtYmVyID0gcGFy
c2VEb3VibGUoZGF0YSwgZW5kIC0gZGF0YSwgcGFyc2VkTGVuZ3RoKTsKKyAgICBpZiAocGFyc2Vk
TGVuZ3RoKSB7CisgICAgICAgIGRhdGEgKz0gcGFyc2VkTGVuZ3RoOwogICAgICAgICByZXR1cm4g
bnVtYmVyOwogICAgIH0KIApAQCAtNDI1LDcgKzQxOCw3IEBAIHN0YXRpYyBkb3VibGUgdG9Eb3Vi
bGUoY29uc3QgQ2hhclR5cGUqIGMKICAgICBpZiAoY2hhcmFjdGVyc1swXSA9PSAnMCcgJiYgY2hh
cmFjdGVycyArIDIgPCBlbmRDaGFyYWN0ZXJzICYmIChjaGFyYWN0ZXJzWzFdIHwgMHgyMCkgPT0g
J3gnICYmIGlzQVNDSUlIZXhEaWdpdChjaGFyYWN0ZXJzWzJdKSkKICAgICAgICAgbnVtYmVyID0g
anNIZXhJbnRlZ2VyTGl0ZXJhbChjaGFyYWN0ZXJzLCBlbmRDaGFyYWN0ZXJzKTsKICAgICBlbHNl
Ci0gICAgICAgIG51bWJlciA9IGpzU3RyRGVjaW1hbExpdGVyYWw8V1RGOjpEaXNhbGxvd1RyYWls
aW5nSnVuaz4oY2hhcmFjdGVycywgZW5kQ2hhcmFjdGVycyk7CisgICAgICAgIG51bWJlciA9IGpz
U3RyRGVjaW1hbExpdGVyYWwoY2hhcmFjdGVycywgZW5kQ2hhcmFjdGVycyk7CiAgICAgCiAgICAg
Ly8gQWxsb3cgdHJhaWxpbmcgd2hpdGUgc3BhY2UuCiAgICAgZm9yICg7IGNoYXJhY3RlcnMgPCBl
bmRDaGFyYWN0ZXJzOyArK2NoYXJhY3RlcnMpIHsKQEAgLTQ4Miw3ICs0NzUsNyBAQCBzdGF0aWMg
ZG91YmxlIHBhcnNlRmxvYXQoY29uc3QgVVN0cmluZyYgCiAgICAgICAgIGlmIChkYXRhID09IGVu
ZCkKICAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1aWV0
X05hTigpOwogCi0gICAgICAgIHJldHVybiBqc1N0ckRlY2ltYWxMaXRlcmFsPFdURjo6QWxsb3dU
cmFpbGluZ0p1bms+KGRhdGEsIGVuZCk7CisgICAgICAgIHJldHVybiBqc1N0ckRlY2ltYWxMaXRl
cmFsKGRhdGEsIGVuZCk7CiAgICAgfQogCiAgICAgY29uc3QgVUNoYXIqIGRhdGEgPSBzLmNoYXJh
Y3RlcnMxNigpOwpAQCAtNDk4LDcgKzQ5MSw3IEBAIHN0YXRpYyBkb3VibGUgcGFyc2VGbG9hdChj
b25zdCBVU3RyaW5nJiAKICAgICBpZiAoZGF0YSA9PSBlbmQpCiAgICAgICAgIHJldHVybiBzdGQ6
Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1aWV0X05hTigpOwogCi0gICAgcmV0dXJuIGpzU3Ry
RGVjaW1hbExpdGVyYWw8V1RGOjpBbGxvd1RyYWlsaW5nSnVuaz4oZGF0YSwgZW5kKTsKKyAgICBy
ZXR1cm4ganNTdHJEZWNpbWFsTGl0ZXJhbChkYXRhLCBlbmQpOwogfQogCiBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGdsb2JhbEZ1bmNFdmFsKEV4ZWNTdGF0ZSogZXhlYykKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xpdGVyYWxQYXJzZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xpdGVyYWxQYXJzZXIuY3BwCShyZXZp
c2lvbiAxMTI4MTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9MaXRlcmFsUGFy
c2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTI5LDE2ICs1MjksOCBAQCBUb2tlblR5cGUgTGl0
ZXJhbFBhcnNlcjxDaGFyVHlwZT46OkxleGVyCiAgICAgCiAgICAgdG9rZW4udHlwZSA9IFRva051
bWJlcjsKICAgICB0b2tlbi5lbmQgPSBtX3B0cjsKLSAgICBWZWN0b3I8Y2hhciwgNjQ+IGJ1ZmZl
cih0b2tlbi5lbmQgLSB0b2tlbi5zdGFydCArIDEpOwotICAgIGludCBpOwotICAgIGZvciAoaSA9
IDA7IGkgPCB0b2tlbi5lbmQgLSB0b2tlbi5zdGFydDsgaSsrKSB7Ci0gICAgICAgIEFTU0VSVChz
dGF0aWNfY2FzdDxjaGFyPih0b2tlbi5zdGFydFtpXSkgPT0gdG9rZW4uc3RhcnRbaV0pOwotICAg
ICAgICBidWZmZXJbaV0gPSBzdGF0aWNfY2FzdDxjaGFyPih0b2tlbi5zdGFydFtpXSk7Ci0gICAg
fQotICAgIGJ1ZmZlcltpXSA9IDA7Ci0gICAgY2hhciogZW5kOwotICAgIHRva2VuLm51bWJlclRv
a2VuID0gV1RGOjpzdHJ0b2Q8V1RGOjpBbGxvd1RyYWlsaW5nSnVuaywgV1RGOjpEaXNhbGxvd1Ry
YWlsaW5nU3BhY2VzPihidWZmZXIuZGF0YSgpLCAmZW5kKTsKLSAgICBBU1NFUlQoYnVmZmVyLmRh
dGEoKSArICh0b2tlbi5lbmQgLSB0b2tlbi5zdGFydCkgPT0gZW5kKTsKKyAgICBzaXplX3QgcGFy
c2VkTGVuZ3RoOworICAgIHRva2VuLm51bWJlclRva2VuID0gcGFyc2VEb3VibGUodG9rZW4uc3Rh
cnQsIHRva2VuLmVuZCAtIHRva2VuLnN0YXJ0LCBwYXJzZWRMZW5ndGgpOwogICAgIHJldHVybiBU
b2tOdW1iZXI7CiB9CiAKSW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMTI4MzEpCisrKyBTb3VyY2UvV1RGL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDcxIEBACisyMDEyLTA0LTAxICBEYXJp
biBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBTdHJlYW1saW5lIHN0cnRvZCBh
bmQgZml4IHNvbWUgcmVsYXRlZCBwcm9ibGVtcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODI4NTcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBSZXBsYWNlZCB0aGUgc3RydG9kIGZ1bmN0aW9uIHRlbXBsYXRl
IHdpdGggYSBwYXJzZURvdWJsZSBmdW5jdGlvbiwgZWxpbWluYXRpbmcKKyAgICAgICAgdGhlIGZv
bGxvd2luZyB1bm5lZWRlZCBmZWF0dXJlczoKKworICAgICAgICAtIG5lZWQgZm9yIGEgdHJhaWxp
bmcgbnVsbCBjaGFyYWN0ZXIgYW5kIGEgY2FsbCB0byBzdHJsZW4KKyAgICAgICAgLSBuZWVkbGVz
cyBjb252ZXJzaW9uIG9mIHN0cmluZyBsZW5ndGhzIGZyb20gc2l6ZV90IHRvIGludCBhbmQgYmFj
ayB0aGF0IGNyZWF0ZWQKKyAgICAgICAgICB0aGUgcG9zc2liaWxpdHkgb2YgaW5jb3JyZWN0IHRy
dW5jYXRpb24KKyAgICAgICAgLSBvbmUgbGV2ZWwgb2YgZnVuY3Rpb24gY2FsbDsgdXNlIGlubGlu
aW5nIGluc3RlYWQKKyAgICAgICAgLSBjb25zdHJ1Y3Rpb24gb2YgdGhlIFN0cmluZ1RvRG91Ymxl
Q29udmVydGVyIG9iamVjdDsgaXQgd2FzIHVzZWQgdG8gcGFzcworICAgICAgICAgIGFyZ3VtZW50
cyB0aGF0IGFyZSBrbm93biBhdCBjb21waWxlIHRpbWUKKyAgICAgICAgLSBtb3N0IG9mIHRoZSBT
dHJpbmdUb0RvdWJsZUNvbnZlcnRlcjo6U3RyaW5nVG9Eb3VibGUgZnVuY3Rpb24ncyBib2R5OyBp
dCB3YXMKKyAgICAgICAgICBjb2RlIHdlIGRpZCBub3QgbmVlZAorICAgICAgICAtIHBhcnNpbmcg
b2YgSW5maW5pdHkgYW5kIE5hTiBhdCB0aGUgc3RydG9kIGxldmVsOyBhZGRlZCByZWNlbnRseSB3
aGVuIHdlIG1vdmVkCisgICAgICAgICAgZnJvbSB0aGUgb2xkIHN0cnRvZCB0byB0aGUgbmV3IG9u
ZSwgYW5kIG5vdCBuZWVkZWQgb3IgaGVscGZ1bCBhdCB0aGlzIGxldmVsCisgICAgICAgIC0gbXVs
dGlwbGUgY29waWVzIG9mIGNvZGUgdG8gbmFycm93IHRvIHNpbmdsZSBieXRlIHN0cmluZ3M7IGlu
IG1hbnkgY2FzZXMKKyAgICAgICAgICB0aGlzIHdhcyBkb25lIGV2ZW4gd2hlbiBzdGFydGluZyB3
aXRoIGFuIExDaGFyIHN0cmluZyB0aGF0IGlzIGFscmVhZHkKKyAgICAgICAgICBzaW5nbGUtYnl0
ZSwgbm93IHdlIGhhbmRsZSB0aGlzIHdpdGggYW4gb3ZlcmxvYWQgb2YgcGFyc2VEb3VibGUKKwor
ICAgICAgICAqIHd0Zi9kdG9hLmNwcDoKKyAgICAgICAgUmVtb3ZlZCBhIGxvbmcgY29tbWVudCBh
Ym91dCB0aGUgb3JpZ2luYWwgc3RydG9kIGZ1bmN0aW9uIHRoYXQgbm8gbG9uZ2VyCisgICAgICAg
IGFwcGxpZXMgc2luY2Ugd2UgZGVsZXRlZCB0aGF0IGZ1bmN0aW9uIGxvbmcgYWdvLiBSZW1vdmVk
IGEgbG90IG9mIGluY2x1ZGVzLgorICAgICAgICBSZW1vdmVkIHRoZSBzdHJ0b2QgZnVuY3Rpb24g
dGVtcGxhdGVzIGFuZCBpdHMgaW5zdGFudGlhdGlvbnMsIHNpbmNlIHRoZXkKKyAgICAgICAgYXJl
IG5vdyByZXBsYWNlZCBieSB0aGUgcGFyc2VEb3VibGUgZnVuY3Rpb24uCisgICAgICAgIChXVEY6
OkludGVybmFsOjpwYXJzZURvdWJsZUZyb21Mb25nU3RyaW5nKTogQWRkZWQuCisgICAgICAgICog
d3RmL2R0b2EuaDoKKyAgICAgICAgQWRkZWQgYW4gaW5jbHVkZSBvZiBBU0NJSUNUeXBlLmggc28g
d2UgY2FuIHVzZSBpc0FTQ0lJIGluIGEgZnVuY3Rpb24gaW4gdGhpcworICAgICAgICBoZWFkZXIu
IExlZnQgdGhlIGhlcmV0b2ZvcmUgdW5uZWVkZWQgaW5jbHVkZSBvZiBkb3VibGUtY29udmVyc2lv
bi5oLCBzaW5jZSB3ZQorICAgICAgICBub3cgd2FudCB0byB1c2UgaXQgaW4gYSBmdW5jdGlvbiBp
biB0aGlzIGhlYWRlci4gUmVtb3ZlZCB0aGUgQWxsb3dUcmFpbGluZ0p1bmtUYWcKKyAgICAgICAg
YW5kIEFsbG93VHJhaWxpbmdTcGFjZXNUYWcgZW51bWVyYXRpb25zIGFuZCB0aGUgc3RydG9kIGZ1
bmN0aW9uIHRlbXBsYXRlLiBBZGRlZAorICAgICAgICBuZXcgcGFyc2VEb3VibGUgZnVuY3Rpb24s
IGFuZCBpbmxpbmUgaW1wbGVtZW50YXRpb24gb2YgaXQuCisKKyAgICAgICAgKiB3dGYvZHRvYS9k
b3VibGUtY29udmVyc2lvbi5jYzogUmVtb3ZlZCBxdWl0ZSBhIGJpdCBvZiB1bnVzZWQgY29kZSwg
aGFyZGNvZGluZworICAgICAgICBhbGwgdGhlIFN0cmluZ1RvRG91YmxlIGZ1bmN0aW9uIGFyZ3Vt
ZW50cyB0aGF0IGNvbWUgZnJvbSBkYXRhIG1lbWJlcnMgc28gaXQgY2FuCisgICAgICAgIGJlIGEg
bXVjaCBzbWFsbGVyIHN0YXRpYyBtZW1iZXIgZnVuY3Rpb24uIEFsc28gY2hhbmdlZCB0aGUgdHlw
ZXMgb2YgYXJndW1lbnRzCisgICAgICAgIGZyb20gaW50IHRvIHNpemVfdC4KKyAgICAgICAgKiB3
dGYvZHRvYS9kb3VibGUtY29udmVyc2lvbi5oOiBSZW1vdmVkIG1vc3Qgb2YgdGhlIFN0cmluZ1Rv
RG91YmxlQ29udmVydGVyCisgICAgICAgIGNsYXNzLCBsZWF2aW5nIG9ubHkgdGhlIGNvbnZlcnNp
b24gZnVuY3Rpb24gYXMgYSBzdGF0aWMgbWVtYmVyIGZ1bmN0aW9uLgorCisgICAgICAgICogd3Rm
L3RleHQvU3RyaW5nSW1wbC5jcHA6CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OnRvRG91Ymxl
KTogR290IHJpZCBvZiBkaWRSZWFkTnVtYmVyLgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjp0
b0Zsb2F0KTogRGl0dG8uCisgICAgICAgICogd3RmL3RleHQvU3RyaW5nSW1wbC5oOiBEaXR0by4K
KyAgICAgICAgKiB3dGYvdGV4dC9XVEZTdHJpbmcuY3BwOgorICAgICAgICAoV1RGOjpTdHJpbmc6
OnRvRG91YmxlKTogR290IHJpZCBvZiBkaWRSZWFkTnVtYmVyLgorICAgICAgICAoV1RGOjpTdHJp
bmc6OnRvRmxvYXQpOiBEaXR0by4KKyAgICAgICAgKFdURjo6dG9Eb3VibGVUeXBlKTogUmV3cm90
ZSB0aGlzIGZ1bmN0aW9uIHRvIHVzZSBwYXJzZURvdWJsZS4gTW92ZWQgdGhlIGNvZGUKKyAgICAg
ICAgdG8gc2tpcCBsZWFkaW5nIHNwYWNlcyBoZXJlLCBiZWNhdXNlIG90aGVyIGNhbGxlcnMgb2Yg
cGFyc2VEb3VibGUgZG9uJ3Qgd2FudAorICAgICAgICB0byBkbyB0aGF0LiBSZXB1cnBvc2VkIHRo
ZSBjaGVjayBmb3IgYW4gZW1wdHkgc3RyaW5nIHNvIGl0J3Mgbm93IHRoZSBzYW1lCisgICAgICAg
IGNvZGUgc2hhcmVkIGJ5IGFsbCB0aGUgInBhcnNlZCBub3RoaW5nIiBjYXNlcy4gUmVtb3ZlZCB0
aGUgY29kZSB0byBjb252ZXJ0CisgICAgICAgIHRoZSBidWZmZXIgdG8gQVNDSUkgZm9yIHR3byBy
ZWFzb25zOiAoMSkgV2UgZG9uJ3QgbmVlZCB0aGF0IGNvZGUgYXQgYWxsIHdoZW4KKyAgICAgICAg
Q2hhclR5cGUgaXMgTENoYXIsIGFuZCAoMikgV2Ugbm93IGhhbmRsZSB0aGlzIHRocm91Z2ggdGhl
IHR3byBvdmVybG9hZHMgZm9yCisgICAgICAgIHRoZSBwYXJzZURvdWJsZSBmdW5jdGlvbi4gRGlz
YWxsb3dpbmcgdHJhaWxpbmcganVuayBpcyBub3cgaGFuZGxlZCBoZXJlLAorICAgICAgICByYXRo
ZXIgdGhhbiBpbnNpZGUgcGFyc2VEb3VibGUuCisgICAgICAgIChXVEY6OmNoYXJhY3RlcnNUb0Rv
dWJsZSk6IFVwZGF0ZWQgZm9yIGNoYW5nZXMgdG8gdG9Eb3VibGVUeXBlLiBSZW1vdmVkIHRoZQor
ICAgICAgICBkaWRSZWFkTnVtYmVyIGFyZ3VtZW50LgorICAgICAgICAoV1RGOjpjaGFyYWN0ZXJz
VG9GbG9hdCk6IERpdHRvLiBBbHNvIGFkZGVkIG92ZXJsb2FkcyB0aGF0IHJldHVybiB0aGUgcGFy
c2VkCisgICAgICAgIGxlbmd0aC4gVGhlc2UgYXJlIGEgc2xpZ2h0bHkgbW9yZSBwb3dlcmZ1bCB3
YXkgdG8gZG8gd2hhdCBkaWRSZWFkTnVtYmVyIHdhcworICAgICAgICB1c2VkIGZvciBiZWZvcmUu
CisKKyAgICAgICAgKiB3dGYvdGV4dC9XVEZTdHJpbmcuaDogQWRkZWQgY29tbWVudHMsIGVsaW1p
bmF0ZWQgZGlkUmVhZE51bWJlciwgYW5kIGFkZGVkCisgICAgICAgIG92ZXJsb2FkcyBvZiBjaGFy
YWN0ZXJzVG9GbG9hdCB0aGF0IHJlcGxhY2UgY2hhcmFjdGVyc1RvRmxvYXRJZ25vcmluZ0p1bmsu
CisKIDIwMTItMDMtMzAgIERhdmlkIEJhcnIgIDxkYXZpZGJhcnJAY2hyb21pdW0ub3JnPgogCiAg
ICAgICAgIFNwbGl0IHVwIHRvcC1sZXZlbCAuZ2l0aWdub3JlIGFuZCAuZ2l0YXR0cmlidXRlcwpJ
bmRleDogU291cmNlL1dURi93dGYvZHRvYS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93
dGYvZHRvYS5jcHAJKHJldmlzaW9uIDExMjgxNikKKysrIFNvdXJjZS9XVEYvd3RmL2R0b2EuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zLDcgKzMsNyBAQAogICogVGhlIGF1dGhvciBvZiB0aGlzIHNv
ZnR3YXJlIGlzIERhdmlkIE0uIEdheS4KICAqCiAgKiBDb3B5cmlnaHQgKGMpIDE5OTEsIDIwMDAs
IDIwMDEgYnkgTHVjZW50IFRlY2hub2xvZ2llcy4KLSAqIENvcHlyaWdodCAoQykgMjAwMiwgMjAw
NSwgMjAwNiwgMjAwNywgMjAwOCwgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMTAsIDIw
MTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFBlcm1pc3Npb24gdG8g
dXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQog
ICogcHVycG9zZSB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0
aGlzIGVudGlyZSBub3RpY2UKQEAgLTMyLDU1ICszMiwxNCBAQAogICogZmlsZS4KICAqLwogCi0v
KiBzdHJ0b2QgZm9yIElFRUUtYXJpdGhtZXRpYyBtYWNoaW5lcy4KLSAqCi0gKiBUaGlzIHN0cnRv
ZCByZXR1cm5zIGEgbmVhcmVzdCBtYWNoaW5lIG51bWJlciB0byB0aGUgaW5wdXQgZGVjaW1hbAot
ICogc3RyaW5nIChvciBzZXRzIGVycm5vIHRvIEVSQU5HRSkuICBXaXRoIElFRUUgYXJpdGhtZXRp
YywgdGllcyBhcmUKLSAqIGJyb2tlbiBieSB0aGUgSUVFRSByb3VuZC1ldmVuIHJ1bGUuICBPdGhl
cndpc2UgdGllcyBhcmUgYnJva2VuIGJ5Ci0gKiBiaWFzZWQgcm91bmRpbmcgKGFkZCBoYWxmIGFu
ZCBjaG9wKS4KLSAqCi0gKiBJbnNwaXJlZCBsb29zZWx5IGJ5IFdpbGxpYW0gRC4gQ2xpbmdlcidz
IHBhcGVyICJIb3cgdG8gUmVhZCBGbG9hdGluZwotICogUG9pbnQgTnVtYmVycyBBY2N1cmF0ZWx5
IiBbUHJvYy4gQUNNIFNJR1BMQU4gJzkwLCBwcC4gOTItMTAxXS4KLSAqCi0gKiBNb2RpZmljYXRp
b25zOgotICoKLSAqICAgIDEuIFdlIG9ubHkgcmVxdWlyZSBJRUVFIGRvdWJsZS1wcmVjaXNpb24g
YXJpdGhtZXRpYyAobm90IElFRUUgZG91YmxlLWV4dGVuZGVkKS4KLSAqICAgIDIuIFdlIGdldCBi
eSB3aXRoIGZsb2F0aW5nLXBvaW50IGFyaXRobWV0aWMgaW4gYSBjYXNlIHRoYXQKLSAqICAgICAg
ICBDbGluZ2VyIG1pc3NlZCAtLSB3aGVuIHdlJ3JlIGNvbXB1dGluZyBkICogMTBebgotICogICAg
ICAgIGZvciBhIHNtYWxsIGludGVnZXIgZCBhbmQgdGhlIGludGVnZXIgbiBpcyBub3QgdG9vCi0g
KiAgICAgICAgbXVjaCBsYXJnZXIgdGhhbiAyMiAodGhlIG1heGltdW0gaW50ZWdlciBrIGZvciB3
aGljaAotICogICAgICAgIHdlIGNhbiByZXByZXNlbnQgMTBeayBleGFjdGx5KSwgd2UgbWF5IGJl
IGFibGUgdG8KLSAqICAgICAgICBjb21wdXRlIChkKjEwXmspICogMTBeKGUtaykgd2l0aCBqdXN0
IG9uZSByb3VuZG9mZi4KLSAqICAgIDMuIFJhdGhlciB0aGFuIGEgYml0LWF0LWEtdGltZSBhZGp1
c3RtZW50IG9mIHRoZSBiaW5hcnkKLSAqICAgICAgICByZXN1bHQgaW4gdGhlIGhhcmQgY2FzZSwg
d2UgdXNlIGZsb2F0aW5nLXBvaW50Ci0gKiAgICAgICAgYXJpdGhtZXRpYyB0byBkZXRlcm1pbmUg
dGhlIGFkanVzdG1lbnQgdG8gd2l0aGluCi0gKiAgICAgICAgb25lIGJpdDsgb25seSBpbiByZWFs
bHkgaGFyZCBjYXNlcyBkbyB3ZSBuZWVkIHRvCi0gKiAgICAgICAgY29tcHV0ZSBhIHNlY29uZCBy
ZXNpZHVhbC4KLSAqICAgIDQuIEJlY2F1c2Ugb2YgMy4sIHdlIGRvbid0IG5lZWQgYSBsYXJnZSB0
YWJsZSBvZiBwb3dlcnMgb2YgMTAKLSAqICAgICAgICBmb3IgdGVuLXRvLWUgKGp1c3Qgc29tZSBz
bWFsbCB0YWJsZXMsIGUuZy4gb2YgMTBeawotICogICAgICAgIGZvciAwIDw9IGsgPD0gMjIpLgot
ICovCi0KICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJkdG9hLmgiCiAKLSNpZiBIQVZF
KEVSUk5PX0gpCi0jaW5jbHVkZSA8ZXJybm8uaD4KLSNlbmRpZgotI2luY2x1ZGUgPGZsb2F0Lmg+
Ci0jaW5jbHVkZSA8bWF0aC5oPgotI2luY2x1ZGUgPHN0ZGludC5oPgogI2luY2x1ZGUgPHN0ZGlv
Lmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVkZSA8
d3RmL0Fsd2F5c0lubGluZS5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW5jbHVk
ZSA8d3RmL0Zhc3RNYWxsb2MuaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1
ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KLSNpbmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KICNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+Ci0jaW5jbHVkZSA8d3RmL2R0b2EvZG91YmxlLWNvbnZlcnNpb24u
aD4KIAogI2lmIENPTVBJTEVSKE1TVkMpCiAjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDI0NCkK
QEAgLTY0OCwyOSArNjA3LDYgQEAgc3RhdGljIGNvbnN0IGRvdWJsZSB0aW55dGVuc1tdID0geyAx
ZS0xNgogI2RlZmluZSBTY2FsZV9CaXQgMHgxMAogI2RlZmluZSBuX2JpZ3RlbnMgNQogCi10ZW1w
bGF0ZTxBbGxvd1RyYWlsaW5nSnVua1RhZyBhbGxvd1RyYWlsaW5nSnVuaywgQWxsb3dUcmFpbGlu
Z1NwYWNlc1RhZyBhbGxvd1RyYWlsaW5nU3BhY2VzPgotZG91YmxlIHN0cnRvZChjb25zdCBjaGFy
KiBzMDAsIGNoYXIqKiBzZSkKLXsKLSAgICBpbnQgbGVuZ3RoID0gc3RybGVuKHMwMCk7Ci0gICAg
ZG91YmxlX2NvbnZlcnNpb246OlN0cmluZ1RvRG91YmxlQ29udmVydGVyIGNvbnZlcnRlcigKLSAg
ICAgICAgKGFsbG93VHJhaWxpbmdKdW5rID8gZG91YmxlX2NvbnZlcnNpb246OlN0cmluZ1RvRG91
YmxlQ29udmVydGVyOjpBTExPV19UUkFJTElOR19KVU5LIDogMCkgfAotICAgICAgICAoYWxsb3dU
cmFpbGluZ1NwYWNlcyA/IGRvdWJsZV9jb252ZXJzaW9uOjpTdHJpbmdUb0RvdWJsZUNvbnZlcnRl
cjo6QUxMT1dfVFJBSUxJTkdfU1BBQ0VTIDogMCkgfAotICAgICAgICBkb3VibGVfY29udmVyc2lv
bjo6U3RyaW5nVG9Eb3VibGVDb252ZXJ0ZXI6OkFMTE9XX0xFQURJTkdfU1BBQ0VTLAotICAgICAg
ICAwLjAsIAotICAgICAgICAoYWxsb3dUcmFpbGluZ0p1bmsgPyBzdGQ6Om51bWVyaWNfbGltaXRz
PGRvdWJsZT46OnF1aWV0X05hTigpIDogMC4wKSwgCi0gICAgICAgICJJbmZpbml0eSIsICJOYU4i
KTsKLSAgICBpbnQgcHJvY2Vzc2VkQ2hhcmFjdGVyQ291bnQgPSAwOwotICAgIGRvdWJsZSByZXN1
bHQgPSBjb252ZXJ0ZXIuU3RyaW5nVG9Eb3VibGUoczAwLCBsZW5ndGgsICZwcm9jZXNzZWRDaGFy
YWN0ZXJDb3VudCk7Ci0gICAgaWYgKHNlKQotICAgICAgICAqc2UgPSBjb25zdF9jYXN0PGNoYXIq
PihzMDAgKyBwcm9jZXNzZWRDaGFyYWN0ZXJDb3VudCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0K
LQotdGVtcGxhdGUgZG91YmxlIHN0cnRvZDxBbGxvd1RyYWlsaW5nSnVuaywgQWxsb3dUcmFpbGlu
Z1NwYWNlcz4oY29uc3QgY2hhciosIGNoYXIqKik7Ci10ZW1wbGF0ZSBkb3VibGUgc3RydG9kPEFs
bG93VHJhaWxpbmdKdW5rLCBEaXNhbGxvd1RyYWlsaW5nU3BhY2VzPihjb25zdCBjaGFyKiwgY2hh
cioqKTsKLXRlbXBsYXRlIGRvdWJsZSBzdHJ0b2Q8RGlzYWxsb3dUcmFpbGluZ0p1bmssIEFsbG93
VHJhaWxpbmdTcGFjZXM+KGNvbnN0IGNoYXIqLCBjaGFyKiopOwotdGVtcGxhdGUgZG91YmxlIHN0
cnRvZDxEaXNhbGxvd1RyYWlsaW5nSnVuaywgRGlzYWxsb3dUcmFpbGluZ1NwYWNlcz4oY29uc3Qg
Y2hhciosIGNoYXIqKik7Ci0KIHN0YXRpYyBBTFdBWVNfSU5MSU5FIGludCBxdW9yZW0oQmlnSW50
JiBiLCBCaWdJbnQmIFMpCiB7CiAgICAgc2l6ZV90IG47CkBAIC0xMzYzLDQgKzEyOTksMTYgQEAg
Y29uc3QgY2hhciogbnVtYmVyVG9GaXhlZFdpZHRoU3RyaW5nKGRvdQogICAgIHJldHVybiBidWls
ZGVyLkZpbmFsaXplKCk7CiB9CiAKK25hbWVzcGFjZSBJbnRlcm5hbCB7CisKK2RvdWJsZSBwYXJz
ZURvdWJsZUZyb21Mb25nU3RyaW5nKGNvbnN0IFVDaGFyKiBzdHJpbmcsIHNpemVfdCBsZW5ndGgs
IHNpemVfdCYgcGFyc2VkTGVuZ3RoKQoreworICAgIFZlY3RvcjxMQ2hhcj4gY29udmVyc2lvbkJ1
ZmZlcihsZW5ndGgpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCisg
ICAgICAgIGNvbnZlcnNpb25CdWZmZXJbaV0gPSBpc0FTQ0lJKHN0cmluZ1tpXSkgPyBzdHJpbmdb
aV0gOiAwOworICAgIHJldHVybiBwYXJzZURvdWJsZShjb252ZXJzaW9uQnVmZmVyLmRhdGEoKSwg
bGVuZ3RoLCBwYXJzZWRMZW5ndGgpOworfQorCit9IC8vIG5hbWVzcGFjZSBJbnRlcm5hbAorCiB9
IC8vIG5hbWVzcGFjZSBXVEYKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL2R0b2EuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV1RGL3d0Zi9kdG9hLmgJKHJldmlzaW9uIDExMjgxNikKKysrIFNvdXJjZS9X
VEYvd3RmL2R0b2EuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiAgQ29w
eXJpZ2h0IChDKSAyMDAzLCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
ICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDgsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIxLDEzICsyMSwxNSBAQAogI2lmbmRl
ZiBXVEZfZHRvYV9oCiAjZGVmaW5lIFdURl9kdG9hX2gKIAorI2luY2x1ZGUgPHd0Zi9BU0NJSUNU
eXBlLmg+CiAjaW5jbHVkZSA8d3RmL2R0b2EvZG91YmxlLWNvbnZlcnNpb24uaD4KICNpbmNsdWRl
IDx3dGYvdW5pY29kZS9Vbmljb2RlLmg+CiAKIG5hbWVzcGFjZSBXVEYgeworCiBjbGFzcyBNdXRl
eDsKIAotZXh0ZXJuIFdURjo6TXV0ZXgqIHNfZHRvYVA1TXV0ZXg7CitleHRlcm4gTXV0ZXgqIHNf
ZHRvYVA1TXV0ZXg7CiAKIHR5cGVkZWYgY2hhciBEdG9hQnVmZmVyWzgwXTsKIApAQCAtMzUsMjIg
KzM3LDM4IEBAIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGR0b2EoRHRvYUJ1ZmZlciAKIFdURl9F
WFBPUlRfUFJJVkFURSB2b2lkIGR0b2FSb3VuZFNGKER0b2FCdWZmZXIgcmVzdWx0LCBkb3VibGUg
ZGQsIGludCBuZGlnaXRzLCBib29sJiBzaWduLCBpbnQmIGV4cG9uZW50LCB1bnNpZ25lZCYgcHJl
Y2lzaW9uKTsKIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGR0b2FSb3VuZERQKER0b2FCdWZmZXIg
cmVzdWx0LCBkb3VibGUgZGQsIGludCBuZGlnaXRzLCBib29sJiBzaWduLCBpbnQmIGV4cG9uZW50
LCB1bnNpZ25lZCYgcHJlY2lzaW9uKTsKIAotZW51bSBBbGxvd1RyYWlsaW5nSnVua1RhZyB7IERp
c2FsbG93VHJhaWxpbmdKdW5rID0gMCwgQWxsb3dUcmFpbGluZ0p1bmsgfTsKLWVudW0gQWxsb3dU
cmFpbGluZ1NwYWNlc1RhZyB7IERpc2FsbG93VHJhaWxpbmdTcGFjZXMgPSAwLCBBbGxvd1RyYWls
aW5nU3BhY2VzIH07Ci0KLS8vIHMwMDogaW5wdXQgc3RyaW5nLiBNdXN0IG5vdCBiZSAwIGFuZCBt
dXN0IGJlIHRlcm1pbmF0ZWQgYnkgMC4KLS8vIHNlOiAqc2Ugd2lsbCBoYXZlIHRoZSBsYXN0IGNv
bnN1bWVkIGNoYXJhY3RlciBwb3NpdGlvbiArIDEuCi10ZW1wbGF0ZTxBbGxvd1RyYWlsaW5nSnVu
a1RhZyBhbGxvd1RyYWlsaW5nSnVuaywgQWxsb3dUcmFpbGluZ1NwYWNlc1RhZyBhbGxvd1RyYWls
aW5nU3BhY2VzPgotZG91YmxlIHN0cnRvZChjb25zdCBjaGFyKiBzMDAsIGNoYXIqKiBzZSk7Ci0K
IC8vIFNpemUgPSA4MCBmb3Igc2l6ZW9mKER0b2FCdWZmZXIpICsgc29tZSBzaWduIGJpdHMsIGRl
Y2ltYWwgcG9pbnQsICdlJywgZXhwb25lbnQgZGlnaXRzLgogY29uc3QgdW5zaWduZWQgTnVtYmVy
VG9TdHJpbmdCdWZmZXJMZW5ndGggPSA5NjsKIHR5cGVkZWYgY2hhciBOdW1iZXJUb1N0cmluZ0J1
ZmZlcltOdW1iZXJUb1N0cmluZ0J1ZmZlckxlbmd0aF07CiB0eXBlZGVmIFVDaGFyIE51bWJlclRv
VVN0cmluZ0J1ZmZlcltOdW1iZXJUb1N0cmluZ0J1ZmZlckxlbmd0aF07CisKIFdURl9FWFBPUlRf
UFJJVkFURSBjb25zdCBjaGFyKiBudW1iZXJUb1N0cmluZyhkb3VibGUsIE51bWJlclRvU3RyaW5n
QnVmZmVyKTsKIGNvbnN0IGNoYXIqIG51bWJlclRvRml4ZWRQcmVjaXNpb25TdHJpbmcoZG91Ymxl
LCB1bnNpZ25lZCBzaWduaWZpY2FudEZpZ3VyZXMsIE51bWJlclRvU3RyaW5nQnVmZmVyLCBib29s
IHRydW5jYXRlVHJhaWxpbmdaZXJvcyA9IGZhbHNlKTsKIGNvbnN0IGNoYXIqIG51bWJlclRvRml4
ZWRXaWR0aFN0cmluZyhkb3VibGUsIHVuc2lnbmVkIGRlY2ltYWxQbGFjZXMsIE51bWJlclRvU3Ry
aW5nQnVmZmVyKTsKIAorZG91YmxlIHBhcnNlRG91YmxlKGNvbnN0IExDaGFyKiBzdHJpbmcsIHNp
emVfdCBsZW5ndGgsIHNpemVfdCYgcGFyc2VkTGVuZ3RoKTsKK2RvdWJsZSBwYXJzZURvdWJsZShj
b25zdCBVQ2hhciogc3RyaW5nLCBzaXplX3QgbGVuZ3RoLCBzaXplX3QmIHBhcnNlZExlbmd0aCk7
CisKK25hbWVzcGFjZSBJbnRlcm5hbCB7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIGRvdWJsZSBw
YXJzZURvdWJsZUZyb21Mb25nU3RyaW5nKGNvbnN0IFVDaGFyKiBzdHJpbmcsIHNpemVfdCBsZW5n
dGgsIHNpemVfdCYgcGFyc2VkTGVuZ3RoKTsKK30KKworaW5saW5lIGRvdWJsZSBwYXJzZURvdWJs
ZShjb25zdCBMQ2hhciogc3RyaW5nLCBzaXplX3QgbGVuZ3RoLCBzaXplX3QmIHBhcnNlZExlbmd0
aCkKK3sKKyAgICByZXR1cm4gZG91YmxlX2NvbnZlcnNpb246OlN0cmluZ1RvRG91YmxlQ29udmVy
dGVyOjpTdHJpbmdUb0RvdWJsZShyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihzdHJpbmcp
LCBsZW5ndGgsICZwYXJzZWRMZW5ndGgpOworfQorCitpbmxpbmUgZG91YmxlIHBhcnNlRG91Ymxl
KGNvbnN0IFVDaGFyKiBzdHJpbmcsIHNpemVfdCBsZW5ndGgsIHNpemVfdCYgcGFyc2VkTGVuZ3Ro
KQoreworICAgIGNvbnN0IHNpemVfdCBjb252ZXJzaW9uQnVmZmVyU2l6ZSA9IDY0OworICAgIGlm
IChsZW5ndGggPiBjb252ZXJzaW9uQnVmZmVyU2l6ZSkKKyAgICAgICAgcmV0dXJuIEludGVybmFs
OjpwYXJzZURvdWJsZUZyb21Mb25nU3RyaW5nKHN0cmluZywgbGVuZ3RoLCBwYXJzZWRMZW5ndGgp
OworICAgIExDaGFyIGNvbnZlcnNpb25CdWZmZXJbY29udmVyc2lvbkJ1ZmZlclNpemVdOworICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgc3RhdGljX2Nhc3Q8aW50PihsZW5ndGgpOyArK2kpCisgICAg
ICAgIGNvbnZlcnNpb25CdWZmZXJbaV0gPSBpc0FTQ0lJKHN0cmluZ1tpXSkgPyBzdHJpbmdbaV0g
OiAwOworICAgIHJldHVybiBwYXJzZURvdWJsZShjb252ZXJzaW9uQnVmZmVyLCBsZW5ndGgsIHBh
cnNlZExlbmd0aCk7Cit9CisgICAgCiB9IC8vIG5hbWVzcGFjZSBXVEYKIAogdXNpbmcgV1RGOjpO
dW1iZXJUb1N0cmluZ0J1ZmZlcjsKQEAgLTU4LDUgKzc2LDYgQEAgdXNpbmcgV1RGOjpOdW1iZXJU
b1VTdHJpbmdCdWZmZXI7CiB1c2luZyBXVEY6Om51bWJlclRvU3RyaW5nOwogdXNpbmcgV1RGOjpu
dW1iZXJUb0ZpeGVkUHJlY2lzaW9uU3RyaW5nOwogdXNpbmcgV1RGOjpudW1iZXJUb0ZpeGVkV2lk
dGhTdHJpbmc7Cit1c2luZyBXVEY6OnBhcnNlRG91YmxlOwogCiAjZW5kaWYgLy8gV1RGX2R0b2Ff
aApJbmRleDogU291cmNlL1dURi93dGYvZHRvYS9kb3VibGUtY29udmVyc2lvbi5jYwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9kdG9hL2RvdWJsZS1jb252ZXJzaW9uLmNjCShyZXZpc2lv
biAxMTI4MTYpCisrKyBTb3VyY2UvV1RGL3d0Zi9kdG9hL2RvdWJsZS1jb252ZXJzaW9uLmNjCSh3
b3JraW5nIGNvcHkpCkBAIC00MDksMjEgKzQwOSw2IEBAIG5hbWVzcGFjZSBkb3VibGVfY29udmVy
c2lvbiB7CiAgICAgfQogICAgIAogICAgIAotICAgIC8vIENvbnN1bWVzIHRoZSBnaXZlbiBzdWJz
dHJpbmcgZnJvbSB0aGUgaXRlcmF0b3IuCi0gICAgLy8gUmV0dXJucyBmYWxzZSwgaWYgdGhlIHN1
YnN0cmluZyBkb2VzIG5vdCBtYXRjaC4KLSAgICBzdGF0aWMgYm9vbCBDb25zdW1lU3ViU3RyaW5n
KGNvbnN0IGNoYXIqKiBjdXJyZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgY2hhciogZW5kLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
Y2hhciogc3Vic3RyaW5nKSB7Ci0gICAgICAgIEFTU0VSVCgqKmN1cnJlbnQgPT0gKnN1YnN0cmlu
Zyk7Ci0gICAgICAgIGZvciAoc3Vic3RyaW5nKys7ICpzdWJzdHJpbmcgIT0gJ1wwJzsgc3Vic3Ry
aW5nKyspIHsKLSAgICAgICAgICAgICsrKmN1cnJlbnQ7Ci0gICAgICAgICAgICBpZiAoKmN1cnJl
bnQgPT0gZW5kIHx8ICoqY3VycmVudCAhPSAqc3Vic3RyaW5nKSByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIH0KLSAgICAgICAgKysqY3VycmVudDsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQot
ICAgIAotICAgIAogICAgIC8vIE1heGltdW0gbnVtYmVyIG9mIHNpZ25pZmljYW50IGRpZ2l0cyBp
biBkZWNpbWFsIHJlcHJlc2VudGF0aW9uLgogICAgIC8vIFRoZSBsb25nZXN0IHBvc3NpYmxlIGRv
dWJsZSBpbiBkZWNpbWFsIHJlcHJlc2VudGF0aW9uIGlzCiAgICAgLy8gKDJeNTMgLSAxKSAqIDIg
XiAtMTA3NCB0aGF0IGlzICgyIF4gNTMgLSAxKSAqIDUgXiAxMDc0IC8gMTAgXiAxMDc0CkBAIC00
MzQsMTc1ICs0MTksMjggQEAgbmFtZXNwYWNlIGRvdWJsZV9jb252ZXJzaW9uIHsKICAgICBjb25z
dCBpbnQga01heFNpZ25pZmljYW50RGlnaXRzID0gNzcyOwogICAgIAogICAgIAotICAgIC8vIFJl
dHVybnMgdHJ1ZSBpZiB3aGl0ZXNwYWNlIGZvdW5kIGFuZCBmYWxzZSBpZiB0aGUgZW5kIGhhcyBy
ZWFjaGVkLgotICAgIHN0YXRpYyBpbmxpbmUgYm9vbCBBZHZhbmNlVG9Ob25zcGFjZShjb25zdCBj
aGFyKiogY3VycmVudCwgY29uc3QgY2hhciogZW5kKSB7Ci0gICAgICAgIHdoaWxlICgqY3VycmVu
dCAhPSBlbmQpIHsKLSAgICAgICAgICAgIHN3aXRjaCgqKmN1cnJlbnQpIHsKLSAgICAgICAgICAg
IGNhc2UgJyAnOgotICAgICAgICAgICAgY2FzZSAnXHQnOgotICAgICAgICAgICAgY2FzZSAnXHYn
OgotICAgICAgICAgICAgY2FzZSAnXHInOgotICAgICAgICAgICAgY2FzZSAnXGYnOgotICAgICAg
ICAgICAgY2FzZSAnXG4nOiArKypjdXJyZW50OyBjb250aW51ZTsKLSAgICAgICAgICAgIGRlZmF1
bHQ6IHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgCi0gICAgc3RhdGljIGJvb2wgaXNEaWdpdChpbnQg
eCwgaW50IHJhZGl4KSB7Ci0gICAgICAgIHJldHVybiAoeCA+PSAnMCcgJiYgeCA8PSAnOScgJiYg
eCA8ICcwJyArIHJhZGl4KQotICAgICAgICB8fCAocmFkaXggPiAxMCAmJiB4ID49ICdhJyAmJiB4
IDwgJ2EnICsgcmFkaXggLSAxMCkKLSAgICAgICAgfHwgKHJhZGl4ID4gMTAgJiYgeCA+PSAnQScg
JiYgeCA8ICdBJyArIHJhZGl4IC0gMTApOwotICAgIH0KLSAgICAKLSAgICAKICAgICBzdGF0aWMg
ZG91YmxlIFNpZ25lZFplcm8oYm9vbCBzaWduKSB7CiAgICAgICAgIHJldHVybiBzaWduID8gLTAu
MCA6IDAuMDsKICAgICB9CiAgICAgCiAgICAgCi0gICAgLy8gUGFyc2luZyBpbnRlZ2VycyB3aXRo
IHJhZGl4IDIsIDQsIDgsIDE2LCAzMi4gQXNzdW1lcyBjdXJyZW50ICE9IGVuZC4KLSAgICB0ZW1w
bGF0ZSA8aW50IHJhZGl4X2xvZ18yPgotICAgIHN0YXRpYyBkb3VibGUgUmFkaXhTdHJpbmdUb0Rv
dWJsZShjb25zdCBjaGFyKiBjdXJyZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBjaGFyKiBlbmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJvb2wgc2lnbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ym9vbCBhbGxvd190cmFpbGluZ19qdW5rLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkb3VibGUganVua19zdHJpbmdfdmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqKiB0cmFpbGluZ19wb2ludGVyKSB7Ci0gICAgICAg
IEFTU0VSVChjdXJyZW50ICE9IGVuZCk7Ci0gICAgICAgIAotICAgICAgICAvLyBTa2lwIGxlYWRp
bmcgMHMuCi0gICAgICAgIHdoaWxlICgqY3VycmVudCA9PSAnMCcpIHsKLSAgICAgICAgICAgICsr
Y3VycmVudDsKLSAgICAgICAgICAgIGlmIChjdXJyZW50ID09IGVuZCkgewotICAgICAgICAgICAg
ICAgICp0cmFpbGluZ19wb2ludGVyID0gZW5kOwotICAgICAgICAgICAgICAgIHJldHVybiBTaWdu
ZWRaZXJvKHNpZ24pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIAotICAgICAg
ICBpbnQ2NF90IG51bWJlciA9IDA7Ci0gICAgICAgIGludCBleHBvbmVudCA9IDA7Ci0gICAgICAg
IGNvbnN0IGludCByYWRpeCA9ICgxIDw8IHJhZGl4X2xvZ18yKTsKLSAgICAgICAgCi0gICAgICAg
IGRvIHsKLSAgICAgICAgICAgIGludCBkaWdpdDsKLSAgICAgICAgICAgIGlmICgqY3VycmVudCA+
PSAnMCcgJiYgKmN1cnJlbnQgPD0gJzknICYmICpjdXJyZW50IDwgJzAnICsgcmFkaXgpIHsKLSAg
ICAgICAgICAgICAgICBkaWdpdCA9IHN0YXRpY19jYXN0PGNoYXI+KCpjdXJyZW50KSAtICcwJzsK
LSAgICAgICAgICAgIH0gZWxzZSBpZiAocmFkaXggPiAxMCAmJiAqY3VycmVudCA+PSAnYScgJiYg
KmN1cnJlbnQgPCAnYScgKyByYWRpeCAtIDEwKSB7Ci0gICAgICAgICAgICAgICAgZGlnaXQgPSBz
dGF0aWNfY2FzdDxjaGFyPigqY3VycmVudCkgLSAnYScgKyAxMDsKLSAgICAgICAgICAgIH0gZWxz
ZSBpZiAocmFkaXggPiAxMCAmJiAqY3VycmVudCA+PSAnQScgJiYgKmN1cnJlbnQgPCAnQScgKyBy
YWRpeCAtIDEwKSB7Ci0gICAgICAgICAgICAgICAgZGlnaXQgPSBzdGF0aWNfY2FzdDxjaGFyPigq
Y3VycmVudCkgLSAnQScgKyAxMDsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgaWYgKGFsbG93X3RyYWlsaW5nX2p1bmsgfHwgIUFkdmFuY2VUb05vbnNwYWNlKCZjdXJyZW50
LCBlbmQpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBqdW5rX3N0cmluZ192YWx1ZTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IG51bWJlciA9IG51bWJlciAqIHJhZGl4ICsgZGlnaXQ7Ci0gICAgICAgICAgICBpbnQgb3ZlcmZs
b3cgPSBzdGF0aWNfY2FzdDxpbnQ+KG51bWJlciA+PiA1Myk7Ci0gICAgICAgICAgICBpZiAob3Zl
cmZsb3cgIT0gMCkgewotICAgICAgICAgICAgICAgIC8vIE92ZXJmbG93IG9jY3VycmVkLiBOZWVk
IHRvIGRldGVybWluZSB3aGljaCBkaXJlY3Rpb24gdG8gcm91bmQgdGhlCi0gICAgICAgICAgICAg
ICAgLy8gcmVzdWx0LgotICAgICAgICAgICAgICAgIGludCBvdmVyZmxvd19iaXRzX2NvdW50ID0g
MTsKLSAgICAgICAgICAgICAgICB3aGlsZSAob3ZlcmZsb3cgPiAxKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIG92ZXJmbG93X2JpdHNfY291bnQrKzsKLSAgICAgICAgICAgICAgICAgICAgb3ZlcmZs
b3cgPj49IDE7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgIGludCBkcm9wcGVkX2JpdHNfbWFzayA9ICgoMSA8PCBvdmVyZmxvd19iaXRzX2NvdW50
KSAtIDEpOwotICAgICAgICAgICAgICAgIGludCBkcm9wcGVkX2JpdHMgPSBzdGF0aWNfY2FzdDxp
bnQ+KG51bWJlcikgJiBkcm9wcGVkX2JpdHNfbWFzazsKLSAgICAgICAgICAgICAgICBudW1iZXIg
Pj49IG92ZXJmbG93X2JpdHNfY291bnQ7Ci0gICAgICAgICAgICAgICAgZXhwb25lbnQgPSBvdmVy
Zmxvd19iaXRzX2NvdW50OwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGJvb2wg
emVyb190YWlsID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB3aGlsZSAodHJ1ZSkgewotICAgICAg
ICAgICAgICAgICAgICArK2N1cnJlbnQ7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50
ID09IGVuZCB8fCAhaXNEaWdpdCgqY3VycmVudCwgcmFkaXgpKSBicmVhazsKLSAgICAgICAgICAg
ICAgICAgICAgemVyb190YWlsID0gemVyb190YWlsICYmICpjdXJyZW50ID09ICcwJzsKLSAgICAg
ICAgICAgICAgICAgICAgZXhwb25lbnQgKz0gcmFkaXhfbG9nXzI7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmICghYWxsb3dfdHJhaWxpbmdf
anVuayAmJiBBZHZhbmNlVG9Ob25zcGFjZSgmY3VycmVudCwgZW5kKSkgewotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4ganVua19zdHJpbmdfdmFsdWU7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGludCBtaWRkbGVfdmFsdWUgPSAoMSA8PCAo
b3ZlcmZsb3dfYml0c19jb3VudCAtIDEpKTsKLSAgICAgICAgICAgICAgICBpZiAoZHJvcHBlZF9i
aXRzID4gbWlkZGxlX3ZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgICAgIG51bWJlcisrOyAgLy8g
Um91bmRpbmcgdXAuCi0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChkcm9wcGVkX2JpdHMgPT0g
bWlkZGxlX3ZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFJvdW5kaW5nIHRvIGV2ZW4g
dG8gY29uc2lzdGVuY3kgd2l0aCBkZWNpbWFsczogaGFsZi13YXkgY2FzZSByb3VuZHMKLSAgICAg
ICAgICAgICAgICAgICAgLy8gdXAgaWYgc2lnbmlmaWNhbnQgcGFydCBpcyBvZGQgYW5kIGRvd24g
b3RoZXJ3aXNlLgotICAgICAgICAgICAgICAgICAgICBpZiAoKG51bWJlciAmIDEpICE9IDAgfHwg
IXplcm9fdGFpbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyKys7ICAvLyBSb3Vu
ZGluZyB1cC4KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAvLyBSb3VuZGluZyB1cCBtYXkgY2F1c2Ugb3Zl
cmZsb3cuCi0gICAgICAgICAgICAgICAgaWYgKChudW1iZXIgJiAoKGludDY0X3QpMSA8PCA1Mykp
ICE9IDApIHsKLSAgICAgICAgICAgICAgICAgICAgZXhwb25lbnQrKzsKLSAgICAgICAgICAgICAg
ICAgICAgbnVtYmVyID4+PSAxOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgICsrY3VycmVudDsKLSAgICAgICAgfSB3
aGlsZSAoY3VycmVudCAhPSBlbmQpOwotICAgICAgICAKLSAgICAgICAgQVNTRVJUKG51bWJlciA8
ICgoaW50NjRfdCkxIDw8IDUzKSk7Ci0gICAgICAgIEFTU0VSVChzdGF0aWNfY2FzdDxpbnQ2NF90
PihzdGF0aWNfY2FzdDxkb3VibGU+KG51bWJlcikpID09IG51bWJlcik7Ci0gICAgICAgIAotICAg
ICAgICAqdHJhaWxpbmdfcG9pbnRlciA9IGN1cnJlbnQ7Ci0gICAgICAgIAotICAgICAgICBpZiAo
ZXhwb25lbnQgPT0gMCkgewotICAgICAgICAgICAgaWYgKHNpZ24pIHsKLSAgICAgICAgICAgICAg
ICBpZiAobnVtYmVyID09IDApIHJldHVybiAtMC4wOwotICAgICAgICAgICAgICAgIG51bWJlciA9
IC1udW1iZXI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
ZG91YmxlPihudW1iZXIpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBBU1NFUlQobnVt
YmVyICE9IDApOwotICAgICAgICByZXR1cm4gRG91YmxlKERpeUZwKG51bWJlciwgZXhwb25lbnQp
KS52YWx1ZSgpOwotICAgIH0KLSAgICAKLSAgICAKICAgICBkb3VibGUgU3RyaW5nVG9Eb3VibGVD
b252ZXJ0ZXI6OlN0cmluZ1RvRG91YmxlKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogaW5wdXQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGVuZ3RoLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50KiBwcm9jZXNzZWRf
Y2hhcmFjdGVyc19jb3VudCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2l6ZV90IGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCogcHJvY2Vzc2VkX2NoYXJhY3RlcnNfY291
bnQpIHsKICAgICAgICAgY29uc3QgY2hhciogY3VycmVudCA9IGlucHV0OwogICAgICAgICBjb25z
dCBjaGFyKiBlbmQgPSBpbnB1dCArIGxlbmd0aDsKICAgICAgICAgCiAgICAgICAgICpwcm9jZXNz
ZWRfY2hhcmFjdGVyc19jb3VudCA9IDA7CiAgICAgICAgIAotICAgICAgICBjb25zdCBib29sIGFs
bG93X3RyYWlsaW5nX2p1bmsgPSAoZmxhZ3NfICYgQUxMT1dfVFJBSUxJTkdfSlVOSykgIT0gMDsK
LSAgICAgICAgY29uc3QgYm9vbCBhbGxvd19sZWFkaW5nX3NwYWNlcyA9IChmbGFnc18gJiBBTExP
V19MRUFESU5HX1NQQUNFUykgIT0gMDsKLSAgICAgICAgY29uc3QgYm9vbCBhbGxvd190cmFpbGlu
Z19zcGFjZXMgPSAoZmxhZ3NfICYgQUxMT1dfVFJBSUxJTkdfU1BBQ0VTKSAhPSAwOwotICAgICAg
ICBjb25zdCBib29sIGFsbG93X3NwYWNlc19hZnRlcl9zaWduID0gKGZsYWdzXyAmIEFMTE9XX1NQ
QUNFU19BRlRFUl9TSUdOKSAhPSAwOwotICAgICAgICAKICAgICAgICAgLy8gVG8gbWFrZSBzdXJl
IHRoYXQgaXRlcmF0b3IgZGVyZWZlcmVuY2luZyBpcyB2YWxpZCB0aGUgZm9sbG93aW5nCiAgICAg
ICAgIC8vIGNvbnZlbnRpb24gaXMgdXNlZDoKICAgICAgICAgLy8gMS4gRWFjaCAnKytjdXJyZW50
JyBzdGF0ZW1lbnQgaXMgZm9sbG93ZWQgYnkgY2hlY2sgZm9yIGVxdWFsaXR5IHRvICdlbmQnLgot
ICAgICAgICAvLyAyLiBJZiBBZHZhbmNlVG9Ob25zcGFjZSByZXR1cm5lZCBmYWxzZSB0aGVuIGN1
cnJlbnQgPT0gZW5kLgogICAgICAgICAvLyAzLiBJZiAnY3VycmVudCcgYmVjb21lcyBlcXVhbCB0
byAnZW5kJyB0aGUgZnVuY3Rpb24gcmV0dXJucyBvciBnb2VzIHRvCiAgICAgICAgIC8vICdwYXJz
aW5nX2RvbmUnLgogICAgICAgICAvLyA0LiAnY3VycmVudCcgaXMgbm90IGRlcmVmZXJlbmNlZCBh
ZnRlciB0aGUgJ3BhcnNpbmdfZG9uZScgbGFiZWwuCiAgICAgICAgIC8vIDUuIENvZGUgYmVmb3Jl
ICdwYXJzaW5nX2RvbmUnIG1heSByZWx5IG9uICdjdXJyZW50ICE9IGVuZCcuCi0gICAgICAgIGlm
IChjdXJyZW50ID09IGVuZCkgcmV0dXJuIGVtcHR5X3N0cmluZ192YWx1ZV87Ci0gICAgICAgIAot
ICAgICAgICBpZiAoYWxsb3dfbGVhZGluZ19zcGFjZXMgfHwgYWxsb3dfdHJhaWxpbmdfc3BhY2Vz
KSB7Ci0gICAgICAgICAgICBpZiAoIUFkdmFuY2VUb05vbnNwYWNlKCZjdXJyZW50LCBlbmQpKSB7
Ci0gICAgICAgICAgICAgICAgKnByb2Nlc3NlZF9jaGFyYWN0ZXJzX2NvdW50ID0gY3VycmVudCAt
IGlucHV0OwotICAgICAgICAgICAgICAgIHJldHVybiBlbXB0eV9zdHJpbmdfdmFsdWVfOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCFhbGxvd19sZWFkaW5nX3NwYWNlcyAmJiAoaW5w
dXQgIT0gY3VycmVudCkpIHsKLSAgICAgICAgICAgICAgICAvLyBObyBsZWFkaW5nIHNwYWNlcyBh
bGxvd2VkLCBidXQgQWR2YW5jZVRvTm9uc3BhY2UgbW92ZWQgZm9yd2FyZC4KLSAgICAgICAgICAg
ICAgICByZXR1cm4ganVua19zdHJpbmdfdmFsdWVfOwotICAgICAgICAgICAgfQotICAgICAgICB9
CisgICAgICAgIGlmIChjdXJyZW50ID09IGVuZCkgcmV0dXJuIDAuMDsKICAgICAgICAgCiAgICAg
ICAgIC8vIFRoZSBsb25nZXN0IGZvcm0gb2Ygc2ltcGxpZmllZCBudW1iZXIgaXM6ICItPHNpZ25p
ZmljYW50IGRpZ2l0cz4uMWVYWFhcMCIuCiAgICAgICAgIGNvbnN0IGludCBrQnVmZmVyU2l6ZSA9
IGtNYXhTaWduaWZpY2FudERpZ2l0cyArIDEwOwpAQCAtNjIwLDUxICs0NTgsNyBAQCBuYW1lc3Bh
Y2UgZG91YmxlX2NvbnZlcnNpb24gewogICAgICAgICBpZiAoKmN1cnJlbnQgPT0gJysnIHx8ICpj
dXJyZW50ID09ICctJykgewogICAgICAgICAgICAgc2lnbiA9ICgqY3VycmVudCA9PSAnLScpOwog
ICAgICAgICAgICAgKytjdXJyZW50OwotICAgICAgICAgICAgY29uc3QgY2hhciogbmV4dF9ub25f
c3BhY2UgPSBjdXJyZW50OwotICAgICAgICAgICAgLy8gU2tpcCBmb2xsb3dpbmcgc3BhY2VzIChp
ZiBhbGxvd2VkKS4KLSAgICAgICAgICAgIGlmICghQWR2YW5jZVRvTm9uc3BhY2UoJm5leHRfbm9u
X3NwYWNlLCBlbmQpKSByZXR1cm4ganVua19zdHJpbmdfdmFsdWVfOwotICAgICAgICAgICAgaWYg
KCFhbGxvd19zcGFjZXNfYWZ0ZXJfc2lnbiAmJiAoY3VycmVudCAhPSBuZXh0X25vbl9zcGFjZSkp
IHsKLSAgICAgICAgICAgICAgICByZXR1cm4ganVua19zdHJpbmdfdmFsdWVfOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgY3VycmVudCA9IG5leHRfbm9uX3NwYWNlOwotICAgICAgICB9Ci0g
ICAgICAgIAotICAgICAgICBpZiAoaW5maW5pdHlfc3ltYm9sXyAhPSBOVUxMKSB7Ci0gICAgICAg
ICAgICBpZiAoKmN1cnJlbnQgPT0gaW5maW5pdHlfc3ltYm9sX1swXSkgewotICAgICAgICAgICAg
ICAgIGlmICghQ29uc3VtZVN1YlN0cmluZygmY3VycmVudCwgZW5kLCBpbmZpbml0eV9zeW1ib2xf
KSkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4ganVua19zdHJpbmdfdmFsdWVfOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoIShh
bGxvd190cmFpbGluZ19zcGFjZXMgfHwgYWxsb3dfdHJhaWxpbmdfanVuaykgJiYgKGN1cnJlbnQg
IT0gZW5kKSkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4ganVua19zdHJpbmdfdmFsdWVf
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoIWFsbG93X3RyYWlsaW5n
X2p1bmsgJiYgQWR2YW5jZVRvTm9uc3BhY2UoJmN1cnJlbnQsIGVuZCkpIHsKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGp1bmtfc3RyaW5nX3ZhbHVlXzsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgQVNTRVJUKGJ1ZmZlcl9wb3MgPT0gMCk7
Ci0gICAgICAgICAgICAgICAgKnByb2Nlc3NlZF9jaGFyYWN0ZXJzX2NvdW50ID0gY3VycmVudCAt
IGlucHV0OwotICAgICAgICAgICAgICAgIHJldHVybiBzaWduID8gLURvdWJsZTo6SW5maW5pdHko
KSA6IERvdWJsZTo6SW5maW5pdHkoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAg
ICAKLSAgICAgICAgaWYgKG5hbl9zeW1ib2xfICE9IE5VTEwpIHsKLSAgICAgICAgICAgIGlmICgq
Y3VycmVudCA9PSBuYW5fc3ltYm9sX1swXSkgewotICAgICAgICAgICAgICAgIGlmICghQ29uc3Vt
ZVN1YlN0cmluZygmY3VycmVudCwgZW5kLCBuYW5fc3ltYm9sXykpIHsKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGp1bmtfc3RyaW5nX3ZhbHVlXzsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKCEoYWxsb3dfdHJhaWxpbmdfc3BhY2Vz
IHx8IGFsbG93X3RyYWlsaW5nX2p1bmspICYmIChjdXJyZW50ICE9IGVuZCkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGp1bmtfc3RyaW5nX3ZhbHVlXzsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgaWYgKCFhbGxvd190cmFpbGluZ19qdW5rICYmIEFkdmFuY2VUb05v
bnNwYWNlKCZjdXJyZW50LCBlbmQpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBqdW5r
X3N0cmluZ192YWx1ZV87Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgIEFTU0VSVChidWZmZXJfcG9zID09IDApOwotICAgICAgICAgICAgICAgICpw
cm9jZXNzZWRfY2hhcmFjdGVyc19jb3VudCA9IGN1cnJlbnQgLSBpbnB1dDsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gc2lnbiA/IC1Eb3VibGU6Ok5hTigpIDogRG91YmxlOjpOYU4oKTsKLSAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGlmIChjdXJyZW50ID09IGVuZCkgcmV0dXJuIDAuMDsKICAg
ICAgICAgfQogICAgICAgICAKICAgICAgICAgYm9vbCBsZWFkaW5nX3plcm8gPSBmYWxzZTsKQEAg
LTY3NywyNyArNDcxLDYgQEAgbmFtZXNwYWNlIGRvdWJsZV9jb252ZXJzaW9uIHsKICAgICAgICAg
ICAgIAogICAgICAgICAgICAgbGVhZGluZ196ZXJvID0gdHJ1ZTsKICAgICAgICAgICAgIAotICAg
ICAgICAgICAgLy8gSXQgY291bGQgYmUgaGV4YWRlY2ltYWwgdmFsdWUuCi0gICAgICAgICAgICBp
ZiAoKGZsYWdzXyAmIEFMTE9XX0hFWCkgJiYgKCpjdXJyZW50ID09ICd4JyB8fCAqY3VycmVudCA9
PSAnWCcpKSB7Ci0gICAgICAgICAgICAgICAgKytjdXJyZW50OwotICAgICAgICAgICAgICAgIGlm
IChjdXJyZW50ID09IGVuZCB8fCAhaXNEaWdpdCgqY3VycmVudCwgMTYpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiBqdW5rX3N0cmluZ192YWx1ZV87ICAvLyAiMHgiLgotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiB0
YWlsX3BvaW50ZXIgPSBOVUxMOwotICAgICAgICAgICAgICAgIGRvdWJsZSByZXN1bHQgPSBSYWRp
eFN0cmluZ1RvRG91YmxlPDQ+KGN1cnJlbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ24sCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dfdHJhaWxpbmdfanVuaywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBq
dW5rX3N0cmluZ192YWx1ZV8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJnRhaWxfcG9pbnRlcik7Ci0gICAgICAgICAgICAgICAgaWYgKHRh
aWxfcG9pbnRlciAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChhbGxvd190cmFp
bGluZ19zcGFjZXMpIEFkdmFuY2VUb05vbnNwYWNlKCZ0YWlsX3BvaW50ZXIsIGVuZCk7Ci0gICAg
ICAgICAgICAgICAgICAgICpwcm9jZXNzZWRfY2hhcmFjdGVyc19jb3VudCA9IHRhaWxfcG9pbnRl
ciAtIGlucHV0OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gcmVz
dWx0OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCiAgICAgICAgICAgICAvLyBJZ25vcmUg
bGVhZGluZyB6ZXJvcyBpbiB0aGUgaW50ZWdlciBwYXJ0LgogICAgICAgICAgICAgd2hpbGUgKCpj
dXJyZW50ID09ICcwJykgewogICAgICAgICAgICAgICAgICsrY3VycmVudDsKQEAgLTcwOCw0MyAr
NDgxLDMxIEBAIG5hbWVzcGFjZSBkb3VibGVfY29udmVyc2lvbiB7CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGJvb2wgb2N0YWwgPSBsZWFkaW5nX3plcm8gJiYg
KGZsYWdzXyAmIEFMTE9XX09DVEFMUykgIT0gMDsKLSAgICAgICAgCiAgICAgICAgIC8vIENvcHkg
c2lnbmlmaWNhbnQgZGlnaXRzIG9mIHRoZSBpbnRlZ2VyIHBhcnQgKGlmIGFueSkgdG8gdGhlIGJ1
ZmZlci4KICAgICAgICAgd2hpbGUgKCpjdXJyZW50ID49ICcwJyAmJiAqY3VycmVudCA8PSAnOScp
IHsKICAgICAgICAgICAgIGlmIChzaWduaWZpY2FudF9kaWdpdHMgPCBrTWF4U2lnbmlmaWNhbnRE
aWdpdHMpIHsKICAgICAgICAgICAgICAgICBBU1NFUlQoYnVmZmVyX3BvcyA8IGtCdWZmZXJTaXpl
KTsKICAgICAgICAgICAgICAgICBidWZmZXJbYnVmZmVyX3BvcysrXSA9IHN0YXRpY19jYXN0PGNo
YXI+KCpjdXJyZW50KTsKICAgICAgICAgICAgICAgICBzaWduaWZpY2FudF9kaWdpdHMrKzsKLSAg
ICAgICAgICAgICAgICAvLyBXaWxsIGxhdGVyIGNoZWNrIGlmIGl0J3MgYW4gb2N0YWwgaW4gdGhl
IGJ1ZmZlci4KICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgaW5zaWduaWZp
Y2FudF9kaWdpdHMrKzsgIC8vIE1vdmUgdGhlIGRpZ2l0IGludG8gdGhlIGV4cG9uZW50aWFsIHBh
cnQuCiAgICAgICAgICAgICAgICAgbm9uemVyb19kaWdpdF9kcm9wcGVkID0gbm9uemVyb19kaWdp
dF9kcm9wcGVkIHx8ICpjdXJyZW50ICE9ICcwJzsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IG9jdGFsID0gb2N0YWwgJiYgKmN1cnJlbnQgPCAnOCc7CiAgICAgICAgICAgICArK2N1cnJlbnQ7
CiAgICAgICAgICAgICBpZiAoY3VycmVudCA9PSBlbmQpIGdvdG8gcGFyc2luZ19kb25lOwogICAg
ICAgICB9CiAgICAgICAgIAotICAgICAgICBpZiAoc2lnbmlmaWNhbnRfZGlnaXRzID09IDApIHsK
LSAgICAgICAgICAgIG9jdGFsID0gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgCiAgICAgICAg
IGlmICgqY3VycmVudCA9PSAnLicpIHsKLSAgICAgICAgICAgIGlmIChvY3RhbCAmJiAhYWxsb3df
dHJhaWxpbmdfanVuaykgcmV0dXJuIGp1bmtfc3RyaW5nX3ZhbHVlXzsKLSAgICAgICAgICAgIGlm
IChvY3RhbCkgZ290byBwYXJzaW5nX2RvbmU7Ci0gICAgICAgICAgICAKICAgICAgICAgICAgICsr
Y3VycmVudDsKICAgICAgICAgICAgIGlmIChjdXJyZW50ID09IGVuZCkgewogICAgICAgICAgICAg
ICAgIGlmIChzaWduaWZpY2FudF9kaWdpdHMgPT0gMCAmJiAhbGVhZGluZ196ZXJvKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBqdW5rX3N0cmluZ192YWx1ZV87CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiAwLjA7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg
ICAgICAgICAgZ290byBwYXJzaW5nX2RvbmU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAoc2lnbmlmaWNhbnRfZGlnaXRzID09
IDApIHsKLSAgICAgICAgICAgICAgICAvLyBvY3RhbCA9IGZhbHNlOwogICAgICAgICAgICAgICAg
IC8vIEludGVnZXIgcGFydCBjb25zaXN0cyBvZiAwIG9yIGlzIGFic2VudC4gU2lnbmlmaWNhbnQg
ZGlnaXRzIHN0YXJ0IGFmdGVyCiAgICAgICAgICAgICAgICAgLy8gbGVhZGluZyB6ZXJvcyAoaWYg
YW55KS4KICAgICAgICAgICAgICAgICB3aGlsZSAoKmN1cnJlbnQgPT0gJzAnKSB7CkBAIC03Nzgs
NDAgKzUzOSwzMSBAQCBuYW1lc3BhY2UgZG91YmxlX2NvbnZlcnNpb24gewogICAgICAgICAgICAg
Ly8gSWYgZXhwb25lbnQgPCAwIHRoZW4gc3RyaW5nIHdhcyBbKy1dXC4wKi4uLgogICAgICAgICAg
ICAgLy8gSWYgc2lnbmlmaWNhbnRfZGlnaXRzICE9IDAgdGhlIHN0cmluZyBpcyBub3QgZXF1YWwg
dG8gMC4KICAgICAgICAgICAgIC8vIE90aGVyd2lzZSB0aGVyZSBhcmUgbm8gZGlnaXRzIGluIHRo
ZSBzdHJpbmcuCi0gICAgICAgICAgICByZXR1cm4ganVua19zdHJpbmdfdmFsdWVfOworICAgICAg
ICAgICAgcmV0dXJuIDAuMDsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgLy8gUGFyc2Ug
ZXhwb25lbnRpYWwgcGFydC4KICAgICAgICAgaWYgKCpjdXJyZW50ID09ICdlJyB8fCAqY3VycmVu
dCA9PSAnRScpIHsKLSAgICAgICAgICAgIGlmIChvY3RhbCAmJiAhYWxsb3dfdHJhaWxpbmdfanVu
aykgcmV0dXJuIGp1bmtfc3RyaW5nX3ZhbHVlXzsKLSAgICAgICAgICAgIGlmIChvY3RhbCkgZ290
byBwYXJzaW5nX2RvbmU7CiAgICAgICAgICAgICArK2N1cnJlbnQ7CiAgICAgICAgICAgICBpZiAo
Y3VycmVudCA9PSBlbmQpIHsKLSAgICAgICAgICAgICAgICBpZiAoYWxsb3dfdHJhaWxpbmdfanVu
aykgewotICAgICAgICAgICAgICAgICAgICBnb3RvIHBhcnNpbmdfZG9uZTsKLSAgICAgICAgICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4ganVua19zdHJpbmdfdmFs
dWVfOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAtLWN1cnJlbnQ7CisgICAg
ICAgICAgICAgICAgZ290byBwYXJzaW5nX2RvbmU7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBjaGFyIHNpZ24gPSAnKyc7CisgICAgICAgICAgICBjaGFyIHNpZ24gPSAwOwogICAgICAgICAg
ICAgaWYgKCpjdXJyZW50ID09ICcrJyB8fCAqY3VycmVudCA9PSAnLScpIHsKICAgICAgICAgICAg
ICAgICBzaWduID0gc3RhdGljX2Nhc3Q8Y2hhcj4oKmN1cnJlbnQpOwogICAgICAgICAgICAgICAg
ICsrY3VycmVudDsKICAgICAgICAgICAgICAgICBpZiAoY3VycmVudCA9PSBlbmQpIHsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKGFsbG93X3RyYWlsaW5nX2p1bmspIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGdvdG8gcGFyc2luZ19kb25lOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGp1bmtfc3RyaW5nX3ZhbHVlXzsKLSAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBjdXJyZW50IC09IDI7Cisg
ICAgICAgICAgICAgICAgICAgIGdvdG8gcGFyc2luZ19kb25lOwogICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGN1cnJlbnQgPT0g
ZW5kIHx8ICpjdXJyZW50IDwgJzAnIHx8ICpjdXJyZW50ID4gJzknKSB7Ci0gICAgICAgICAgICAg
ICAgaWYgKGFsbG93X3RyYWlsaW5nX2p1bmspIHsKLSAgICAgICAgICAgICAgICAgICAgZ290byBw
YXJzaW5nX2RvbmU7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGp1bmtfc3RyaW5nX3ZhbHVlXzsKLSAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICBpZiAoKmN1cnJlbnQgPCAnMCcgfHwgKmN1cnJlbnQgPiAnOScpIHsKKyAgICAgICAgICAg
ICAgICBpZiAoc2lnbikKKyAgICAgICAgICAgICAgICAgICAgLS1jdXJyZW50OworICAgICAgICAg
ICAgICAgIC0tY3VycmVudDsKKyAgICAgICAgICAgICAgICBnb3RvIHBhcnNpbmdfZG9uZTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgY29uc3QgaW50IG1heF9leHBv
bmVudCA9IElOVF9NQVggLyAyOwpAQCAtODMyLDMzICs1ODQsOSBAQCBuYW1lc3BhY2UgZG91Ymxl
X2NvbnZlcnNpb24gewogICAgICAgICAgICAgZXhwb25lbnQgKz0gKHNpZ24gPT0gJy0nID8gLW51
bSA6IG51bSk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGlmICghKGFsbG93X3RyYWls
aW5nX3NwYWNlcyB8fCBhbGxvd190cmFpbGluZ19qdW5rKSAmJiAoY3VycmVudCAhPSBlbmQpKSB7
Ci0gICAgICAgICAgICByZXR1cm4ganVua19zdHJpbmdfdmFsdWVfOwotICAgICAgICB9Ci0gICAg
ICAgIGlmICghYWxsb3dfdHJhaWxpbmdfanVuayAmJiBBZHZhbmNlVG9Ob25zcGFjZSgmY3VycmVu
dCwgZW5kKSkgewotICAgICAgICAgICAgcmV0dXJuIGp1bmtfc3RyaW5nX3ZhbHVlXzsKLSAgICAg
ICAgfQotICAgICAgICBpZiAoYWxsb3dfdHJhaWxpbmdfc3BhY2VzKSB7Ci0gICAgICAgICAgICBB
ZHZhbmNlVG9Ob25zcGFjZSgmY3VycmVudCwgZW5kKTsKLSAgICAgICAgfQotICAgICAgICAKICAg
ICBwYXJzaW5nX2RvbmU6CiAgICAgICAgIGV4cG9uZW50ICs9IGluc2lnbmlmaWNhbnRfZGlnaXRz
OwogICAgICAgICAKLSAgICAgICAgaWYgKG9jdGFsKSB7Ci0gICAgICAgICAgICBkb3VibGUgcmVz
dWx0OwotICAgICAgICAgICAgY29uc3QgY2hhciogdGFpbF9wb2ludGVyID0gTlVMTDsKLSAgICAg
ICAgICAgIHJlc3VsdCA9IFJhZGl4U3RyaW5nVG9Eb3VibGU8Mz4oYnVmZmVyLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIgKyBidWZmZXJfcG9zLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvd190cmFpbGluZ19qdW5r
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqdW5rX3N0cmlu
Z192YWx1ZV8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0
YWlsX3BvaW50ZXIpOwotICAgICAgICAgICAgQVNTRVJUKHRhaWxfcG9pbnRlciAhPSBOVUxMKTsK
LSAgICAgICAgICAgICpwcm9jZXNzZWRfY2hhcmFjdGVyc19jb3VudCA9IGN1cnJlbnQgLSBpbnB1
dDsKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLSAgICAgICAgCiAgICAg
ICAgIGlmIChub256ZXJvX2RpZ2l0X2Ryb3BwZWQpIHsKICAgICAgICAgICAgIGJ1ZmZlcltidWZm
ZXJfcG9zKytdID0gJzEnOwogICAgICAgICAgICAgZXhwb25lbnQtLTsKSW5kZXg6IFNvdXJjZS9X
VEYvd3RmL2R0b2EvZG91YmxlLWNvbnZlcnNpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RG
L3d0Zi9kdG9hL2RvdWJsZS1jb252ZXJzaW9uLmgJKHJldmlzaW9uIDExMjgxNikKKysrIFNvdXJj
ZS9XVEYvd3RmL2R0b2EvZG91YmxlLWNvbnZlcnNpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMzYx
LDEzNyArMzYxLDEyIEBAIG5hbWVzcGFjZSBkb3VibGVfY29udmVyc2lvbiB7CiAgICAgCiAgICAg
Y2xhc3MgU3RyaW5nVG9Eb3VibGVDb252ZXJ0ZXIgewogICAgIHB1YmxpYzoKLSAgICAgICAgLy8g
RW51bWVyYXRpb24gZm9yIGFsbG93aW5nIG9jdGFscyBhbmQgaWdub3JpbmcganVuayB3aGVuIGNv
bnZlcnRpbmcKLSAgICAgICAgLy8gc3RyaW5ncyB0byBudW1iZXJzLgotICAgICAgICBlbnVtIEZs
YWdzIHsKLSAgICAgICAgICAgIE5PX0ZMQUdTID0gMCwKLSAgICAgICAgICAgIEFMTE9XX0hFWCA9
IDEsCi0gICAgICAgICAgICBBTExPV19PQ1RBTFMgPSAyLAotICAgICAgICAgICAgQUxMT1dfVFJB
SUxJTkdfSlVOSyA9IDQsCi0gICAgICAgICAgICBBTExPV19MRUFESU5HX1NQQUNFUyA9IDgsCi0g
ICAgICAgICAgICBBTExPV19UUkFJTElOR19TUEFDRVMgPSAxNiwKLSAgICAgICAgICAgIEFMTE9X
X1NQQUNFU19BRlRFUl9TSUdOID0gMzIKLSAgICAgICAgfTsKLSAgICAgICAgCi0gICAgICAgIC8v
IEZsYWdzIHNob3VsZCBiZSBhIGJpdC1vciBjb21iaW5hdGlvbiBvZiB0aGUgcG9zc2libGUgRmxh
Z3MtZW51bS4KLSAgICAgICAgLy8gIC0gTk9fRkxBR1M6IG5vIHNwZWNpYWwgZmxhZ3MuCi0gICAg
ICAgIC8vICAtIEFMTE9XX0hFWDogcmVjb2duaXplcyB0aGUgcHJlZml4ICIweCIuIEhleCBudW1i
ZXJzIG1heSBvbmx5IGJlIGludGVnZXJzLgotICAgICAgICAvLyAgICAgIEV4OiBTdHJpbmdUb0Rv
dWJsZSgiMHgxMjM0IikgLT4gNDY2MC4wCi0gICAgICAgIC8vICAgICAgICAgIEluIFN0cmluZ1Rv
RG91YmxlKCIweDEyMzQuNTYiKSB0aGUgY2hhcmFjdGVycyAiLjU2IiBhcmUgdHJhaWxpbmcKLSAg
ICAgICAgLy8gICAgICAgICAganVuay4gVGhlIHJlc3VsdCBvZiB0aGUgY2FsbCBpcyBoZW5jZSBk
ZXBlbmRlbnQgb24KLSAgICAgICAgLy8gICAgICAgICAgdGhlIEFMTE9XX1RSQUlMSU5HX0pVTksg
ZmxhZyBhbmQvb3IgdGhlIGp1bmsgdmFsdWUuCi0gICAgICAgIC8vICAgICAgV2l0aCB0aGlzIGZs
YWcgIjB4IiBpcyBhIGp1bmstc3RyaW5nLiBFdmVuIHdpdGggQUxMT1dfVFJBSUxJTkdfSlVOSywK
LSAgICAgICAgLy8gICAgICB0aGUgc3RyaW5nIHdpbGwgbm90IGJlIHBhcnNlZCBhcyAiMCIgZm9s
bG93ZWQgYnkganVuay4KLSAgICAgICAgLy8KLSAgICAgICAgLy8gIC0gQUxMT1dfT0NUQUxTOiBy
ZWNvZ25pemVzIHRoZSBwcmVmaXggIjAiIGZvciBvY3RhbHM6Ci0gICAgICAgIC8vICAgICAgSWYg
YSBzZXF1ZW5jZSBvZiBvY3RhbCBkaWdpdHMgc3RhcnRzIHdpdGggJzAnLCB0aGVuIHRoZSBudW1i
ZXIgaXMKLSAgICAgICAgLy8gICAgICByZWFkIGFzIG9jdGFsIGludGVnZXIuIE9jdGFsIG51bWJl
cnMgbWF5IG9ubHkgYmUgaW50ZWdlcnMuCi0gICAgICAgIC8vICAgICAgRXg6IFN0cmluZ1RvRG91
YmxlKCIwMTIzNCIpIC0+IDY2OC4wCi0gICAgICAgIC8vICAgICAgICAgIFN0cmluZ1RvRG91Ymxl
KCIwMTIzNDkiKSAtPiAxMjM0OS4wICAvLyBOb3QgYSBzZXF1ZW5jZSBvZiBvY3RhbAotICAgICAg
ICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZGln
aXRzLgotICAgICAgICAvLyAgICAgICAgICBJbiBTdHJpbmdUb0RvdWJsZSgiMDEyMzQuNTYiKSB0
aGUgY2hhcmFjdGVycyAiLjU2IiBhcmUgdHJhaWxpbmcKLSAgICAgICAgLy8gICAgICAgICAganVu
ay4gVGhlIHJlc3VsdCBvZiB0aGUgY2FsbCBpcyBoZW5jZSBkZXBlbmRlbnQgb24KLSAgICAgICAg
Ly8gICAgICAgICAgdGhlIEFMTE9XX1RSQUlMSU5HX0pVTksgZmxhZyBhbmQvb3IgdGhlIGp1bmsg
dmFsdWUuCi0gICAgICAgIC8vICAgICAgICAgIEluIFN0cmluZ1RvRG91YmxlKCIwMTIzNGU1NiIp
IHRoZSBjaGFyYWN0ZXJzICJlNTYiIGFyZSB0cmFpbGluZwotICAgICAgICAvLyAgICAgICAgICBq
dW5rLCB0b28uCi0gICAgICAgIC8vICAtIEFMTE9XX1RSQUlMSU5HX0pVTks6IGlnbm9yZSB0cmFp
bGluZyBjaGFyYWN0ZXJzIHRoYXQgYXJlIG5vdCBwYXJ0IG9mCi0gICAgICAgIC8vICAgICAgYSBk
b3VibGUgbGl0ZXJhbC4KLSAgICAgICAgLy8gIC0gQUxMT1dfTEVBRElOR19TUEFDRVM6IHNraXAg
b3ZlciBsZWFkaW5nIHNwYWNlcy4KLSAgICAgICAgLy8gIC0gQUxMT1dfVFJBSUxJTkdfU1BBQ0VT
OiBpZ25vcmUgdHJhaWxpbmcgc3BhY2VzLgotICAgICAgICAvLyAgLSBBTExPV19TUEFDRVNfQUZU
RVJfU0lHTjogaWdub3JlIHNwYWNlcyBhZnRlciB0aGUgc2lnbi4KLSAgICAgICAgLy8gICAgICAg
RXg6IFN0cmluZ1RvRG91YmxlKCItICAgMTIzLjIiKSAtPiAtMTIzLjIuCi0gICAgICAgIC8vICAg
ICAgICAgICBTdHJpbmdUb0RvdWJsZSgiKyAgIDEyMy4yIikgLT4gMTIzLjIKLSAgICAgICAgLy8K
LSAgICAgICAgLy8gZW1wdHlfc3RyaW5nX3ZhbHVlIGlzIHJldHVybmVkIHdoZW4gYW4gZW1wdHkg
c3RyaW5nIGlzIGdpdmVuIGFzIGlucHV0LgotICAgICAgICAvLyBJZiBBTExPV19MRUFESU5HX1NQ
QUNFUyBvciBBTExPV19UUkFJTElOR19TUEFDRVMgYXJlIHNldCwgdGhlbiBhIHN0cmluZwotICAg
ICAgICAvLyBjb250YWluaW5nIG9ubHkgc3BhY2VzIGlzIGNvbnZlcnRlZCB0byB0aGUgJ2VtcHR5
X3N0cmluZ192YWx1ZScsIHRvby4KLSAgICAgICAgLy8KLSAgICAgICAgLy8ganVua19zdHJpbmdf
dmFsdWUgaXMgcmV0dXJuZWQgd2hlbgotICAgICAgICAvLyAgYSkgQUxMT1dfVFJBSUxJTkdfSlVO
SyBpcyBub3Qgc2V0LCBhbmQgYSBqdW5rIGNoYXJhY3RlciAoYSBjaGFyYWN0ZXIgbm90Ci0gICAg
ICAgIC8vICAgICBwYXJ0IG9mIGEgZG91YmxlLWxpdGVyYWwpIGlzIGZvdW5kLgotICAgICAgICAv
LyAgYikgQUxMT1dfVFJBSUxJTkdfSlVOSyBpcyBzZXQsIGJ1dCB0aGUgc3RyaW5nIGRvZXMgbm90
IHN0YXJ0IHdpdGggYQotICAgICAgICAvLyAgICAgZG91YmxlIGxpdGVyYWwuCi0gICAgICAgIC8v
Ci0gICAgICAgIC8vIGluZmluaXR5X3N5bWJvbCBhbmQgbmFuX3N5bWJvbCBhcmUgc3RyaW5ncyB0
aGF0IGFyZSB1c2VkIHRvIGRldGVjdAotICAgICAgICAvLyBpbnB1dHMgdGhhdCByZXByZXNlbnQg
aW5maW5pdHkgYW5kIE5hTi4gVGhleSBjYW4gYmUgbnVsbCwgaW4gd2hpY2ggY2FzZQotICAgICAg
ICAvLyB0aGV5IGFyZSBpZ25vcmVkLgotICAgICAgICAvLyBUaGUgY29udmVyc2lvbiByb3V0aW5l
IGZpcnN0IHJlYWRzIGFueSBwb3NzaWJsZSBzaWducy4gVGhlbiBpdCBjb21wYXJlcyB0aGUKLSAg
ICAgICAgLy8gZm9sbG93aW5nIGNoYXJhY3RlciBvZiB0aGUgaW5wdXQtc3RyaW5nIHdpdGggdGhl
IGZpcnN0IGNoYXJhY3RlciBvZgotICAgICAgICAvLyB0aGUgaW5maW5pdHksIGFuZCBuYW4tc3lt
Ym9sLiBJZiBlaXRoZXIgbWF0Y2hlcywgdGhlIGZ1bmN0aW9uIGFzc3VtZXMsIHRoYXQKLSAgICAg
ICAgLy8gYSBtYXRjaCBoYXMgYmVlbiBmb3VuZCwgYW5kIGV4cGVjdHMgdGhlIGZvbGxvd2luZyBp
bnB1dCBjaGFyYWN0ZXJzIHRvIG1hdGNoCi0gICAgICAgIC8vIHRoZSByZW1haW5pbmcgY2hhcmFj
dGVycyBvZiB0aGUgc3BlY2lhbC12YWx1ZSBzeW1ib2wuCi0gICAgICAgIC8vIFRoaXMgbWVhbnMg
dGhhdCB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9ucyBhcHBseSB0byBzcGVjaWFsLXZhbHVlIHN5
bWJvbHM6Ci0gICAgICAgIC8vICAtIHRoZXkgbXVzdCBub3Qgc3RhcnQgd2l0aCBzaWducyAoJysn
LCBvciAnLScpLAotICAgICAgICAvLyAgLSB0aGV5IG11c3Qgbm90IGhhdmUgdGhlIHNhbWUgZmly
c3QgY2hhcmFjdGVyLgotICAgICAgICAvLyAgLSB0aGV5IG11c3Qgbm90IHN0YXJ0IHdpdGggZGln
aXRzLgotICAgICAgICAvLwotICAgICAgICAvLyBFeGFtcGxlczoKLSAgICAgICAgLy8gIGZsYWdz
ID0gQUxMT1dfSEVYIHwgQUxMT1dfVFJBSUxJTkdfSlVOSywKLSAgICAgICAgLy8gIGVtcHR5X3N0
cmluZ192YWx1ZSA9IDAuMCwKLSAgICAgICAgLy8gIGp1bmtfc3RyaW5nX3ZhbHVlID0gTmFOLAot
ICAgICAgICAvLyAgaW5maW5pdHlfc3ltYm9sID0gImluZmluaXR5IiwKLSAgICAgICAgLy8gIG5h
bl9zeW1ib2wgPSAibmFuIjoKLSAgICAgICAgLy8gICAgU3RyaW5nVG9Eb3VibGUoIjB4MTIzNCIp
IC0+IDQ2NjAuMC4KLSAgICAgICAgLy8gICAgU3RyaW5nVG9Eb3VibGUoIjB4MTIzNEsiKSAtPiA0
NjYwLjAuCi0gICAgICAgIC8vICAgIFN0cmluZ1RvRG91YmxlKCIiKSAtPiAwLjAgIC8vIGVtcHR5
X3N0cmluZ192YWx1ZS4KLSAgICAgICAgLy8gICAgU3RyaW5nVG9Eb3VibGUoIiAiKSAtPiBOYU4g
IC8vIGp1bmtfc3RyaW5nX3ZhbHVlLgotICAgICAgICAvLyAgICBTdHJpbmdUb0RvdWJsZSgiIDEi
KSAtPiBOYU4gIC8vIGp1bmtfc3RyaW5nX3ZhbHVlLgotICAgICAgICAvLyAgICBTdHJpbmdUb0Rv
dWJsZSgiMHgiKSAtPiBOYU4gIC8vIGp1bmtfc3RyaW5nX3ZhbHVlLgotICAgICAgICAvLyAgICBT
dHJpbmdUb0RvdWJsZSgiLTEyMy40NSIpIC0+IC0xMjMuNDUuCi0gICAgICAgIC8vICAgIFN0cmlu
Z1RvRG91YmxlKCItLTEyMy40NSIpIC0+IE5hTiAgLy8ganVua19zdHJpbmdfdmFsdWUuCi0gICAg
ICAgIC8vICAgIFN0cmluZ1RvRG91YmxlKCIxMjNlNDUiKSAtPiAxMjNlNDUuCi0gICAgICAgIC8v
ICAgIFN0cmluZ1RvRG91YmxlKCIxMjNFNDUiKSAtPiAxMjNlNDUuCi0gICAgICAgIC8vICAgIFN0
cmluZ1RvRG91YmxlKCIxMjNlKzQ1IikgLT4gMTIzZTQ1LgotICAgICAgICAvLyAgICBTdHJpbmdU
b0RvdWJsZSgiMTIzRS00NSIpIC0+IDEyM2UtNDUuCi0gICAgICAgIC8vICAgIFN0cmluZ1RvRG91
YmxlKCIxMjNlIikgLT4gMTIzLjAgIC8vIHRyYWlsaW5nIGp1bmsgaWdub3JlZC4KLSAgICAgICAg
Ly8gICAgU3RyaW5nVG9Eb3VibGUoIjEyM2UtIikgLT4gMTIzLjAgIC8vIHRyYWlsaW5nIGp1bmsg
aWdub3JlZC4KLSAgICAgICAgLy8gICAgU3RyaW5nVG9Eb3VibGUoIitOYU4iKSAtPiBOYU4gIC8v
IE5hTiBzdHJpbmcgbGl0ZXJhbC4KLSAgICAgICAgLy8gICAgU3RyaW5nVG9Eb3VibGUoIi1pbmZp
bml0eSIpIC0+IC1pbmYuICAvLyBpbmZpbml0eSBsaXRlcmFsLgotICAgICAgICAvLyAgICBTdHJp
bmdUb0RvdWJsZSgiSW5maW5pdHkiKSAtPiBOYU4gIC8vIGp1bmtfc3RyaW5nX3ZhbHVlLgotICAg
ICAgICAvLwotICAgICAgICAvLyAgZmxhZ3MgPSBBTExPV19PQ1RBTCB8IEFMTE9XX0xFQURJTkdf
U1BBQ0VTLAotICAgICAgICAvLyAgZW1wdHlfc3RyaW5nX3ZhbHVlID0gMC4wLAotICAgICAgICAv
LyAganVua19zdHJpbmdfdmFsdWUgPSBOYU4sCi0gICAgICAgIC8vICBpbmZpbml0eV9zeW1ib2wg
PSBOVUxMLAotICAgICAgICAvLyAgbmFuX3N5bWJvbCA9IE5VTEw6Ci0gICAgICAgIC8vICAgIFN0
cmluZ1RvRG91YmxlKCIweDEyMzQiKSAtPiBOYU4gIC8vIGp1bmtfc3RyaW5nX3ZhbHVlLgotICAg
ICAgICAvLyAgICBTdHJpbmdUb0RvdWJsZSgiMDEyMzQiKSAtPiA2NjguMC4KLSAgICAgICAgLy8g
ICAgU3RyaW5nVG9Eb3VibGUoIiIpIC0+IDAuMCAgLy8gZW1wdHlfc3RyaW5nX3ZhbHVlLgotICAg
ICAgICAvLyAgICBTdHJpbmdUb0RvdWJsZSgiICIpIC0+IDAuMCAgLy8gZW1wdHlfc3RyaW5nX3Zh
bHVlLgotICAgICAgICAvLyAgICBTdHJpbmdUb0RvdWJsZSgiIDEiKSAtPiAxLjAKLSAgICAgICAg
Ly8gICAgU3RyaW5nVG9Eb3VibGUoIjB4IikgLT4gTmFOICAvLyBqdW5rX3N0cmluZ192YWx1ZS4K
LSAgICAgICAgLy8gICAgU3RyaW5nVG9Eb3VibGUoIjAxMjNlNDUiKSAtPiBOYU4gIC8vIGp1bmtf
c3RyaW5nX3ZhbHVlLgotICAgICAgICAvLyAgICBTdHJpbmdUb0RvdWJsZSgiMDEyMzlFNDUiKSAt
PiAxMjM5ZTQ1LgotICAgICAgICAvLyAgICBTdHJpbmdUb0RvdWJsZSgiLWluZmluaXR5IikgLT4g
TmFOICAvLyBqdW5rX3N0cmluZ192YWx1ZS4KLSAgICAgICAgLy8gICAgU3RyaW5nVG9Eb3VibGUo
Ik5hTiIpIC0+IE5hTiAgLy8ganVua19zdHJpbmdfdmFsdWUuCi0gICAgICAgIFN0cmluZ1RvRG91
YmxlQ29udmVydGVyKGludCBmbGFncywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZG91YmxlIGVtcHR5X3N0cmluZ192YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZG91YmxlIGp1bmtfc3RyaW5nX3ZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBjaGFyKiBpbmZpbml0eV9zeW1ib2wsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IGNoYXIqIG5hbl9zeW1ib2wpCi0gICAgICAgIDogZmxhZ3NfKGZsYWdz
KSwKLSAgICAgICAgZW1wdHlfc3RyaW5nX3ZhbHVlXyhlbXB0eV9zdHJpbmdfdmFsdWUpLAotICAg
ICAgICBqdW5rX3N0cmluZ192YWx1ZV8oanVua19zdHJpbmdfdmFsdWUpLAotICAgICAgICBpbmZp
bml0eV9zeW1ib2xfKGluZmluaXR5X3N5bWJvbCksCi0gICAgICAgIG5hbl9zeW1ib2xfKG5hbl9z
eW1ib2wpIHsKLSAgICAgICAgfQotICAgICAgICAKICAgICAgICAgLy8gUGVyZm9ybXMgdGhlIGNv
bnZlcnNpb24uCiAgICAgICAgIC8vIFRoZSBvdXRwdXQgcGFyYW1ldGVyICdwcm9jZXNzZWRfY2hh
cmFjdGVyc19jb3VudCcgaXMgc2V0IHRvIHRoZSBudW1iZXIKICAgICAgICAgLy8gb2YgY2hhcmFj
dGVycyB0aGF0IGhhdmUgYmVlbiBwcm9jZXNzZWQgdG8gcmVhZCB0aGUgbnVtYmVyLgotICAgICAg
ICAvLyBTcGFjZXMgdGhhbiBhcmUgcHJvY2Vzc2VkIHdpdGggQUxMT1dfe0xFQURJTkd8VFJBSUxJ
Tkd9X1NQQUNFUyBhcmUgaW5jbHVkZWQKLSAgICAgICAgLy8gaW4gdGhlICdwcm9jZXNzZWRfY2hh
cmFjdGVyc19jb3VudCcuIFRyYWlsaW5nIGp1bmsgaXMgbmV2ZXIgaW5jbHVkZWQuCi0gICAgICAg
IGRvdWJsZSBTdHJpbmdUb0RvdWJsZShjb25zdCBjaGFyKiBidWZmZXIsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgbGVuZ3RoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50KiBwcm9jZXNzZWRfY2hhcmFjdGVyc19jb3VudCk7CisgICAgICAgIHN0YXRpYyBkb3Vi
bGUgU3RyaW5nVG9Eb3VibGUoY29uc3QgY2hhciogYnVmZmVyLCBzaXplX3QgbGVuZ3RoLCBzaXpl
X3QqIHByb2Nlc3NlZF9jaGFyYWN0ZXJzX2NvdW50KTsKICAgICAgICAgCiAgICAgcHJpdmF0ZToK
LSAgICAgICAgY29uc3QgaW50IGZsYWdzXzsKLSAgICAgICAgY29uc3QgZG91YmxlIGVtcHR5X3N0
cmluZ192YWx1ZV87Ci0gICAgICAgIGNvbnN0IGRvdWJsZSBqdW5rX3N0cmluZ192YWx1ZV87Ci0g
ICAgICAgIGNvbnN0IGNoYXIqIGNvbnN0IGluZmluaXR5X3N5bWJvbF87Ci0gICAgICAgIGNvbnN0
IGNoYXIqIGNvbnN0IG5hbl9zeW1ib2xfOwotICAgICAgICAKICAgICAgICAgRElTQUxMT1dfSU1Q
TElDSVRfQ09OU1RSVUNUT1JTKFN0cmluZ1RvRG91YmxlQ29udmVydGVyKTsKICAgICB9OwogICAg
IApJbmRleDogU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuY3BwCShyZXZpc2lvbiAxMTI4MTYpCisr
KyBTb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03
MzcsMTggKzczNywxOCBAQCBpbnRwdHJfdCBTdHJpbmdJbXBsOjp0b0ludFB0cihib29sKiBvaykK
ICAgICByZXR1cm4gY2hhcmFjdGVyc1RvSW50UHRyKGNoYXJhY3RlcnMxNigpLCBtX2xlbmd0aCwg
b2spOwogfQogCi1kb3VibGUgU3RyaW5nSW1wbDo6dG9Eb3VibGUoYm9vbCogb2ssIGJvb2wqIGRp
ZFJlYWROdW1iZXIpCitkb3VibGUgU3RyaW5nSW1wbDo6dG9Eb3VibGUoYm9vbCogb2spCiB7CiAg
ICAgaWYgKGlzOEJpdCgpKQotICAgICAgICByZXR1cm4gY2hhcmFjdGVyc1RvRG91YmxlKGNoYXJh
Y3RlcnM4KCksIG1fbGVuZ3RoLCBvaywgZGlkUmVhZE51bWJlcik7Ci0gICAgcmV0dXJuIGNoYXJh
Y3RlcnNUb0RvdWJsZShjaGFyYWN0ZXJzMTYoKSwgbV9sZW5ndGgsIG9rLCBkaWRSZWFkTnVtYmVy
KTsKKyAgICAgICAgcmV0dXJuIGNoYXJhY3RlcnNUb0RvdWJsZShjaGFyYWN0ZXJzOCgpLCBtX2xl
bmd0aCwgb2spOworICAgIHJldHVybiBjaGFyYWN0ZXJzVG9Eb3VibGUoY2hhcmFjdGVyczE2KCks
IG1fbGVuZ3RoLCBvayk7CiB9CiAKLWZsb2F0IFN0cmluZ0ltcGw6OnRvRmxvYXQoYm9vbCogb2ss
IGJvb2wqIGRpZFJlYWROdW1iZXIpCitmbG9hdCBTdHJpbmdJbXBsOjp0b0Zsb2F0KGJvb2wqIG9r
KQogewogICAgIGlmIChpczhCaXQoKSkKLSAgICAgICAgcmV0dXJuIGNoYXJhY3RlcnNUb0Zsb2F0
KGNoYXJhY3RlcnM4KCksIG1fbGVuZ3RoLCBvaywgZGlkUmVhZE51bWJlcik7Ci0gICAgcmV0dXJu
IGNoYXJhY3RlcnNUb0Zsb2F0KGNoYXJhY3RlcnMxNigpLCBtX2xlbmd0aCwgb2ssIGRpZFJlYWRO
dW1iZXIpOworICAgICAgICByZXR1cm4gY2hhcmFjdGVyc1RvRmxvYXQoY2hhcmFjdGVyczgoKSwg
bV9sZW5ndGgsIG9rKTsKKyAgICByZXR1cm4gY2hhcmFjdGVyc1RvRmxvYXQoY2hhcmFjdGVyczE2
KCksIG1fbGVuZ3RoLCBvayk7CiB9CiAKIGJvb2wgZXF1YWxJZ25vcmluZ0Nhc2UoY29uc3QgTENo
YXIqIGEsIGNvbnN0IExDaGFyKiBiLCB1bnNpZ25lZCBsZW5ndGgpCkluZGV4OiBTb3VyY2UvV1RG
L3d0Zi90ZXh0L1N0cmluZ0ltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi90ZXh0
L1N0cmluZ0ltcGwuaAkocmV2aXNpb24gMTEyODE2KQorKysgU291cmNlL1dURi93dGYvdGV4dC9T
dHJpbmdJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1OSw4ICs0NTksMTEgQEAgcHVibGljOgog
ICAgIHVpbnQ2NF90IHRvVUludDY0KGJvb2wqIG9rID0gMCk7IC8vIGlnbm9yZXMgdHJhaWxpbmcg
Z2FyYmFnZQogICAgIGludHB0cl90IHRvSW50UHRyKGJvb2wqIG9rID0gMCk7IC8vIGlnbm9yZXMg
dHJhaWxpbmcgZ2FyYmFnZQogCi0gICAgZG91YmxlIHRvRG91YmxlKGJvb2wqIG9rID0gMCwgYm9v
bCogZGlkUmVhZE51bWJlciA9IDApOwotICAgIGZsb2F0IHRvRmxvYXQoYm9vbCogb2sgPSAwLCBi
b29sKiBkaWRSZWFkTnVtYmVyID0gMCk7CisgICAgLy8gRklYTUU6IExpa2UgdGhlIHN0cmljdCBm
dW5jdGlvbnMgYWJvdmUsIHRoZXNlIGdpdmUgZmFsc2UgZm9yICJvayIgd2hlbiB0aGVyZSBpcyB0
cmFpbGluZyBnYXJiYWdlLgorICAgIC8vIExpa2UgdGhlIG5vbi1zdHJpY3QgZnVuY3Rpb25zIGFi
b3ZlLCB0aGVzZSByZXR1cm4gdGhlIHZhbHVlIHdoZW4gdGhlcmUgaXMgdHJhaWxpbmcgZ2FyYmFn
ZS4KKyAgICAvLyBJdCB3b3VsZCBiZSBiZXR0ZXIgaWYgdGhlc2Ugd2VyZSBtb3JlIGNvbnNpc3Rl
bnQgd2l0aCB0aGUgYWJvdmUgZnVuY3Rpb25zIGluc3RlYWQuCisgICAgZG91YmxlIHRvRG91Ymxl
KGJvb2wqIG9rID0gMCk7CisgICAgZmxvYXQgdG9GbG9hdChib29sKiBvayA9IDApOwogCiAgICAg
V1RGX0VYUE9SVF9QUklWQVRFIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gbG93ZXIoKTsKICAgICBX
VEZfRVhQT1JUX1BSSVZBVEUgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiB1cHBlcigpOwpJbmRleDog
U291cmNlL1dURi93dGYvdGV4dC9XVEZTdHJpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
VEYvd3RmL3RleHQvV1RGU3RyaW5nLmNwcAkocmV2aXNpb24gMTEyODE2KQorKysgU291cmNlL1dU
Ri93dGYvdGV4dC9XVEZTdHJpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MjIsNyArNTIyLDYg
QEAgaW50cHRyX3QgU3RyaW5nOjp0b0ludFB0clN0cmljdChib29sKiBvawogICAgIHJldHVybiBt
X2ltcGwtPnRvSW50UHRyU3RyaWN0KG9rLCBiYXNlKTsKIH0KIAotCiBpbnQgU3RyaW5nOjp0b0lu
dChib29sKiBvaykgY29uc3QKIHsKICAgICBpZiAoIW1faW1wbCkgewpAQCAtNTczLDI4ICs1NzIs
MjQgQEAgaW50cHRyX3QgU3RyaW5nOjp0b0ludFB0cihib29sKiBvaykgY29ucwogICAgIHJldHVy
biBtX2ltcGwtPnRvSW50UHRyKG9rKTsKIH0KIAotZG91YmxlIFN0cmluZzo6dG9Eb3VibGUoYm9v
bCogb2ssIGJvb2wqIGRpZFJlYWROdW1iZXIpIGNvbnN0Citkb3VibGUgU3RyaW5nOjp0b0RvdWJs
ZShib29sKiBvaykgY29uc3QKIHsKICAgICBpZiAoIW1faW1wbCkgewogICAgICAgICBpZiAob2sp
CiAgICAgICAgICAgICAqb2sgPSBmYWxzZTsKLSAgICAgICAgaWYgKGRpZFJlYWROdW1iZXIpCi0g
ICAgICAgICAgICAqZGlkUmVhZE51bWJlciA9IGZhbHNlOwogICAgICAgICByZXR1cm4gMC4wOwog
ICAgIH0KLSAgICByZXR1cm4gbV9pbXBsLT50b0RvdWJsZShvaywgZGlkUmVhZE51bWJlcik7Cisg
ICAgcmV0dXJuIG1faW1wbC0+dG9Eb3VibGUob2spOwogfQogCi1mbG9hdCBTdHJpbmc6OnRvRmxv
YXQoYm9vbCogb2ssIGJvb2wqIGRpZFJlYWROdW1iZXIpIGNvbnN0CitmbG9hdCBTdHJpbmc6OnRv
RmxvYXQoYm9vbCogb2spIGNvbnN0CiB7CiAgICAgaWYgKCFtX2ltcGwpIHsKICAgICAgICAgaWYg
KG9rKQogICAgICAgICAgICAgKm9rID0gZmFsc2U7Ci0gICAgICAgIGlmIChkaWRSZWFkTnVtYmVy
KQotICAgICAgICAgICAgKmRpZFJlYWROdW1iZXIgPSBmYWxzZTsKICAgICAgICAgcmV0dXJuIDAu
MGY7CiAgICAgfQotICAgIHJldHVybiBtX2ltcGwtPnRvRmxvYXQob2ssIGRpZFJlYWROdW1iZXIp
OworICAgIHJldHVybiBtX2ltcGwtPnRvRmxvYXQob2spOwogfQogCiBTdHJpbmcgU3RyaW5nOjpp
c29sYXRlZENvcHkoKSBjb25zdApAQCAtMTAzNiw2MyArMTAzMSw2NCBAQCBpbnRwdHJfdCBjaGFy
YWN0ZXJzVG9JbnRQdHIoY29uc3QgVUNoYXIqCiAgICAgcmV0dXJuIHRvSW50ZWdyYWxUeXBlPGlu
dHB0cl90LCBVQ2hhcj4oZGF0YSwgbGVuZ3RoT2ZDaGFyYWN0ZXJzQXNJbnRlZ2VyPFVDaGFyPihk
YXRhLCBsZW5ndGgpLCBvaywgMTApOwogfQogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhclR5cGUs
IFdURjo6QWxsb3dUcmFpbGluZ0p1bmtUYWcgYWxsb3dUcmFpbGluZ0p1bms+Ci1zdGF0aWMgaW5s
aW5lIGRvdWJsZSB0b0RvdWJsZVR5cGUoY29uc3QgQ2hhclR5cGUqIGRhdGEsIHNpemVfdCBsZW5n
dGgsIGJvb2wqIG9rLCBib29sKiBkaWRSZWFkTnVtYmVyKQorZW51bSBUcmFpbGluZ0p1bmtQb2xp
Y3kgeyBEaXNhbGxvd1RyYWlsaW5nSnVuaywgQWxsb3dUcmFpbGluZ0p1bmsgfTsKKwordGVtcGxh
dGUgPHR5cGVuYW1lIENoYXJUeXBlLCBUcmFpbGluZ0p1bmtQb2xpY3kgcG9saWN5Pgorc3RhdGlj
IGlubGluZSBkb3VibGUgdG9Eb3VibGVUeXBlKGNvbnN0IENoYXJUeXBlKiBkYXRhLCBzaXplX3Qg
bGVuZ3RoLCBib29sKiBvaywgc2l6ZV90JiBwYXJzZWRMZW5ndGgpCiB7Ci0gICAgaWYgKCFsZW5n
dGgpIHsKKyAgICBzaXplX3QgbGVhZGluZ1NwYWNlc0xlbmd0aCA9IDA7CisgICAgd2hpbGUgKGxl
YWRpbmdTcGFjZXNMZW5ndGggPCBsZW5ndGggJiYgaXNBU0NJSVNwYWNlKGRhdGFbbGVhZGluZ1Nw
YWNlc0xlbmd0aF0pKQorICAgICAgICArK2xlYWRpbmdTcGFjZXNMZW5ndGg7CisKKyAgICBkb3Vi
bGUgbnVtYmVyID0gcGFyc2VEb3VibGUoZGF0YSArIGxlYWRpbmdTcGFjZXNMZW5ndGgsIGxlbmd0
aCAtIGxlYWRpbmdTcGFjZXNMZW5ndGgsIHBhcnNlZExlbmd0aCk7CisgICAgaWYgKCFwYXJzZWRM
ZW5ndGgpIHsKICAgICAgICAgaWYgKG9rKQogICAgICAgICAgICAgKm9rID0gZmFsc2U7Ci0gICAg
ICAgIGlmIChkaWRSZWFkTnVtYmVyKQotICAgICAgICAgICAgKmRpZFJlYWROdW1iZXIgPSBmYWxz
ZTsKICAgICAgICAgcmV0dXJuIDAuMDsKICAgICB9CiAKLSAgICBWZWN0b3I8Y2hhciwgMjU2PiBi
eXRlcyhsZW5ndGggKyAxKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyAr
K2kpCi0gICAgICAgIGJ5dGVzW2ldID0gZGF0YVtpXSA8IDB4N0YgPyBkYXRhW2ldIDogJz8nOwot
ICAgIGJ5dGVzW2xlbmd0aF0gPSAnXDAnOwotICAgIGNoYXIqIHN0YXJ0ID0gYnl0ZXMuZGF0YSgp
OwotICAgIGNoYXIqIGVuZDsKLSAgICBkb3VibGUgdmFsID0gV1RGOjpzdHJ0b2Q8YWxsb3dUcmFp
bGluZ0p1bmssIFdURjo6RGlzYWxsb3dUcmFpbGluZ1NwYWNlcz4oc3RhcnQsICZlbmQpOworICAg
IHBhcnNlZExlbmd0aCArPSBsZWFkaW5nU3BhY2VzTGVuZ3RoOwogICAgIGlmIChvaykKLSAgICAg
ICAgKm9rID0gKGVuZCA9PSAwIHx8ICplbmQgPT0gJ1wwJykgJiYgIWlzbmFuKHZhbCk7Ci0gICAg
aWYgKGRpZFJlYWROdW1iZXIpCi0gICAgICAgICpkaWRSZWFkTnVtYmVyID0gZW5kIC0gc3RhcnQ7
Ci0gICAgcmV0dXJuIHZhbDsKKyAgICAgICAgKm9rID0gcG9saWN5ID09IEFsbG93VHJhaWxpbmdK
dW5rIHx8IHBhcnNlZExlbmd0aCA9PSBsZW5ndGg7CisgICAgcmV0dXJuIG51bWJlcjsKIH0KIAot
ZG91YmxlIGNoYXJhY3RlcnNUb0RvdWJsZShjb25zdCBMQ2hhciogZGF0YSwgc2l6ZV90IGxlbmd0
aCwgYm9vbCogb2ssIGJvb2wqIGRpZFJlYWROdW1iZXIpCitkb3VibGUgY2hhcmFjdGVyc1RvRG91
YmxlKGNvbnN0IExDaGFyKiBkYXRhLCBzaXplX3QgbGVuZ3RoLCBib29sKiBvaykKIHsKLSAgICBy
ZXR1cm4gdG9Eb3VibGVUeXBlPExDaGFyLCBXVEY6OkRpc2FsbG93VHJhaWxpbmdKdW5rPihkYXRh
LCBsZW5ndGgsIG9rLCBkaWRSZWFkTnVtYmVyKTsKKyAgICBzaXplX3QgcGFyc2VkTGVuZ3RoOwor
ICAgIHJldHVybiB0b0RvdWJsZVR5cGU8TENoYXIsIERpc2FsbG93VHJhaWxpbmdKdW5rPihkYXRh
LCBsZW5ndGgsIG9rLCBwYXJzZWRMZW5ndGgpOwogfQogCi1kb3VibGUgY2hhcmFjdGVyc1RvRG91
YmxlKGNvbnN0IFVDaGFyKiBkYXRhLCBzaXplX3QgbGVuZ3RoLCBib29sKiBvaywgYm9vbCogZGlk
UmVhZE51bWJlcikKK2RvdWJsZSBjaGFyYWN0ZXJzVG9Eb3VibGUoY29uc3QgVUNoYXIqIGRhdGEs
IHNpemVfdCBsZW5ndGgsIGJvb2wqIG9rKQogewotICAgIHJldHVybiB0b0RvdWJsZVR5cGU8VUNo
YXIsIFdURjo6RGlzYWxsb3dUcmFpbGluZ0p1bms+KGRhdGEsIGxlbmd0aCwgb2ssIGRpZFJlYWRO
dW1iZXIpOworICAgIHNpemVfdCBwYXJzZWRMZW5ndGg7CisgICAgcmV0dXJuIHRvRG91YmxlVHlw
ZTxVQ2hhciwgRGlzYWxsb3dUcmFpbGluZ0p1bms+KGRhdGEsIGxlbmd0aCwgb2ssIHBhcnNlZExl
bmd0aCk7CiB9CiAKLWZsb2F0IGNoYXJhY3RlcnNUb0Zsb2F0KGNvbnN0IExDaGFyKiBkYXRhLCBz
aXplX3QgbGVuZ3RoLCBib29sKiBvaywgYm9vbCogZGlkUmVhZE51bWJlcikKK2Zsb2F0IGNoYXJh
Y3RlcnNUb0Zsb2F0KGNvbnN0IExDaGFyKiBkYXRhLCBzaXplX3QgbGVuZ3RoLCBib29sKiBvaykK
IHsKICAgICAvLyBGSVhNRTogVGhpcyB3aWxsIHJldHVybiBvayBldmVuIHdoZW4gdGhlIHN0cmlu
ZyBmaXRzIGludG8gYSBkb3VibGUgYnV0IG5vdCBhIGZsb2F0LgotICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxmbG9hdD4odG9Eb3VibGVUeXBlPExDaGFyLCBXVEY6OkRpc2FsbG93VHJhaWxpbmdKdW5r
PihkYXRhLCBsZW5ndGgsIG9rLCBkaWRSZWFkTnVtYmVyKSk7CisgICAgc2l6ZV90IHBhcnNlZExl
bmd0aDsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHRvRG91YmxlVHlwZTxMQ2hhciwg
RGlzYWxsb3dUcmFpbGluZ0p1bms+KGRhdGEsIGxlbmd0aCwgb2ssIHBhcnNlZExlbmd0aCkpOwog
fQogCi1mbG9hdCBjaGFyYWN0ZXJzVG9GbG9hdChjb25zdCBVQ2hhciogZGF0YSwgc2l6ZV90IGxl
bmd0aCwgYm9vbCogb2ssIGJvb2wqIGRpZFJlYWROdW1iZXIpCitmbG9hdCBjaGFyYWN0ZXJzVG9G
bG9hdChjb25zdCBVQ2hhciogZGF0YSwgc2l6ZV90IGxlbmd0aCwgYm9vbCogb2spCiB7CiAgICAg
Ly8gRklYTUU6IFRoaXMgd2lsbCByZXR1cm4gb2sgZXZlbiB3aGVuIHRoZSBzdHJpbmcgZml0cyBp
bnRvIGEgZG91YmxlIGJ1dCBub3QgYSBmbG9hdC4KLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Zmxv
YXQ+KHRvRG91YmxlVHlwZTxVQ2hhciwgV1RGOjpEaXNhbGxvd1RyYWlsaW5nSnVuaz4oZGF0YSwg
bGVuZ3RoLCBvaywgZGlkUmVhZE51bWJlcikpOworICAgIHNpemVfdCBwYXJzZWRMZW5ndGg7Cisg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0Pih0b0RvdWJsZVR5cGU8VUNoYXIsIERpc2FsbG93
VHJhaWxpbmdKdW5rPihkYXRhLCBsZW5ndGgsIG9rLCBwYXJzZWRMZW5ndGgpKTsKIH0KIAotZmxv
YXQgY2hhcmFjdGVyc1RvRmxvYXRJZ25vcmluZ0p1bmsoY29uc3QgTENoYXIqIGRhdGEsIHNpemVf
dCBsZW5ndGgsIGJvb2wqIG9rLCBib29sKiBkaWRSZWFkTnVtYmVyKQorZmxvYXQgY2hhcmFjdGVy
c1RvRmxvYXQoY29uc3QgTENoYXIqIGRhdGEsIHNpemVfdCBsZW5ndGgsIHNpemVfdCYgcGFyc2Vk
TGVuZ3RoKQogewogICAgIC8vIEZJWE1FOiBUaGlzIHdpbGwgcmV0dXJuIG9rIGV2ZW4gd2hlbiB0
aGUgc3RyaW5nIGZpdHMgaW50byBhIGRvdWJsZSBidXQgbm90IGEgZmxvYXQuCi0gICAgcmV0dXJu
IHN0YXRpY19jYXN0PGZsb2F0Pih0b0RvdWJsZVR5cGU8TENoYXIsIFdURjo6QWxsb3dUcmFpbGlu
Z0p1bms+KGRhdGEsIGxlbmd0aCwgb2ssIGRpZFJlYWROdW1iZXIpKTsKKyAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KHRvRG91YmxlVHlwZTxMQ2hhciwgQWxsb3dUcmFpbGluZ0p1bms+KGRh
dGEsIGxlbmd0aCwgMCwgcGFyc2VkTGVuZ3RoKSk7CiB9CiAKLWZsb2F0IGNoYXJhY3RlcnNUb0Zs
b2F0SWdub3JpbmdKdW5rKGNvbnN0IFVDaGFyKiBkYXRhLCBzaXplX3QgbGVuZ3RoLCBib29sKiBv
aywgYm9vbCogZGlkUmVhZE51bWJlcikKK2Zsb2F0IGNoYXJhY3RlcnNUb0Zsb2F0KGNvbnN0IFVD
aGFyKiBkYXRhLCBzaXplX3QgbGVuZ3RoLCBzaXplX3QmIHBhcnNlZExlbmd0aCkKIHsKICAgICAv
LyBGSVhNRTogVGhpcyB3aWxsIHJldHVybiBvayBldmVuIHdoZW4gdGhlIHN0cmluZyBmaXRzIGlu
dG8gYSBkb3VibGUgYnV0IG5vdCBhIGZsb2F0LgotICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9h
dD4odG9Eb3VibGVUeXBlPFVDaGFyLCBXVEY6OkFsbG93VHJhaWxpbmdKdW5rPihkYXRhLCBsZW5n
dGgsIG9rLCBkaWRSZWFkTnVtYmVyKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0Pih0
b0RvdWJsZVR5cGU8VUNoYXIsIEFsbG93VHJhaWxpbmdKdW5rPihkYXRhLCBsZW5ndGgsIDAsIHBh
cnNlZExlbmd0aCkpOwogfQogCiBjb25zdCBTdHJpbmcmIGVtcHR5U3RyaW5nKCkKSW5kZXg6IFNv
dXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93
dGYvdGV4dC9XVEZTdHJpbmcuaAkocmV2aXNpb24gMTEyODE2KQorKysgU291cmNlL1dURi93dGYv
dGV4dC9XVEZTdHJpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtODQsMTIgKzg0LDE1IEBAIHVpbnQ2
NF90IGNoYXJhY3RlcnNUb1VJbnQ2NChjb25zdCBVQ2hhcioKIGludHB0cl90IGNoYXJhY3RlcnNU
b0ludFB0cihjb25zdCBMQ2hhciosIHNpemVfdCwgYm9vbCogb2sgPSAwKTsgLy8gaWdub3JlcyB0
cmFpbGluZyBnYXJiYWdlCiBpbnRwdHJfdCBjaGFyYWN0ZXJzVG9JbnRQdHIoY29uc3QgVUNoYXIq
LCBzaXplX3QsIGJvb2wqIG9rID0gMCk7IC8vIGlnbm9yZXMgdHJhaWxpbmcgZ2FyYmFnZQogCi1X
VEZfRVhQT1JUX1BSSVZBVEUgZG91YmxlIGNoYXJhY3RlcnNUb0RvdWJsZShjb25zdCBMQ2hhcios
IHNpemVfdCwgYm9vbCogb2sgPSAwLCBib29sKiBkaWRSZWFkTnVtYmVyID0gMCk7Ci1XVEZfRVhQ
T1JUX1BSSVZBVEUgZG91YmxlIGNoYXJhY3RlcnNUb0RvdWJsZShjb25zdCBVQ2hhciosIHNpemVf
dCwgYm9vbCogb2sgPSAwLCBib29sKiBkaWRSZWFkTnVtYmVyID0gMCk7Ci1mbG9hdCBjaGFyYWN0
ZXJzVG9GbG9hdChjb25zdCBMQ2hhciosIHNpemVfdCwgYm9vbCogb2sgPSAwLCBib29sKiBkaWRS
ZWFkTnVtYmVyID0gMCk7Ci1XVEZfRVhQT1JUX1BSSVZBVEUgZmxvYXQgY2hhcmFjdGVyc1RvRmxv
YXRJZ25vcmluZ0p1bmsoY29uc3QgTENoYXIqLCBzaXplX3QsIGJvb2wqIG9rID0gMCwgYm9vbCog
ZGlkUmVhZE51bWJlciA9IDApOwotV1RGX0VYUE9SVF9QUklWQVRFIGZsb2F0IGNoYXJhY3RlcnNU
b0Zsb2F0KGNvbnN0IFVDaGFyKiwgc2l6ZV90LCBib29sKiBvayA9IDAsIGJvb2wqIGRpZFJlYWRO
dW1iZXIgPSAwKTsKLVdURl9FWFBPUlRfUFJJVkFURSBmbG9hdCBjaGFyYWN0ZXJzVG9GbG9hdEln
bm9yaW5nSnVuayhjb25zdCBVQ2hhciosIHNpemVfdCwgYm9vbCogb2sgPSAwLCBib29sKiBkaWRS
ZWFkTnVtYmVyID0gMCk7CisvLyBGSVhNRTogTGlrZSB0aGUgc3RyaWN0IGZ1bmN0aW9ucyBhYm92
ZSwgdGhlc2UgZ2l2ZSBmYWxzZSBmb3IgIm9rIiB3aGVuIHRoZXJlIGlzIHRyYWlsaW5nIGdhcmJh
Z2UuCisvLyBMaWtlIHRoZSBub24tc3RyaWN0IGZ1bmN0aW9ucyBhYm92ZSwgdGhlc2UgcmV0dXJu
IHRoZSB2YWx1ZSB3aGVuIHRoZXJlIGlzIHRyYWlsaW5nIGdhcmJhZ2UuCisvLyBJdCB3b3VsZCBi
ZSBiZXR0ZXIgaWYgdGhlc2Ugd2VyZSBtb3JlIGNvbnNpc3RlbnQgd2l0aCB0aGUgYWJvdmUgZnVu
Y3Rpb25zIGluc3RlYWQuCitXVEZfRVhQT1JUX1BSSVZBVEUgZG91YmxlIGNoYXJhY3RlcnNUb0Rv
dWJsZShjb25zdCBMQ2hhciosIHNpemVfdCwgYm9vbCogb2sgPSAwKTsKK1dURl9FWFBPUlRfUFJJ
VkFURSBkb3VibGUgY2hhcmFjdGVyc1RvRG91YmxlKGNvbnN0IFVDaGFyKiwgc2l6ZV90LCBib29s
KiBvayA9IDApOworZmxvYXQgY2hhcmFjdGVyc1RvRmxvYXQoY29uc3QgTENoYXIqLCBzaXplX3Qs
IGJvb2wqIG9rID0gMCk7CitXVEZfRVhQT1JUX1BSSVZBVEUgZmxvYXQgY2hhcmFjdGVyc1RvRmxv
YXQoY29uc3QgVUNoYXIqLCBzaXplX3QsIGJvb2wqIG9rID0gMCk7CitXVEZfRVhQT1JUX1BSSVZB
VEUgZmxvYXQgY2hhcmFjdGVyc1RvRmxvYXQoY29uc3QgTENoYXIqLCBzaXplX3QsIHNpemVfdCYg
cGFyc2VkTGVuZ3RoKTsKK1dURl9FWFBPUlRfUFJJVkFURSBmbG9hdCBjaGFyYWN0ZXJzVG9GbG9h
dChjb25zdCBVQ2hhciosIHNpemVfdCwgc2l6ZV90JiBwYXJzZWRMZW5ndGgpOwogCiBlbnVtIEZs
b2F0Q29udmVyc2lvbkZsYWdzIHsKICAgICBTaG91bGRSb3VuZFNpZ25pZmljYW50RmlndXJlcyA9
IDEgPDwgMCwKQEAgLTMxMSw4ICszMTQsMTIgQEAgcHVibGljOgogICAgIGludDY0X3QgdG9JbnQ2
NChib29sKiBvayA9IDApIGNvbnN0OwogICAgIFdURl9FWFBPUlRfUFJJVkFURSB1aW50NjRfdCB0
b1VJbnQ2NChib29sKiBvayA9IDApIGNvbnN0OwogICAgIFdURl9FWFBPUlRfUFJJVkFURSBpbnRw
dHJfdCB0b0ludFB0cihib29sKiBvayA9IDApIGNvbnN0OwotICAgIFdURl9FWFBPUlRfUFJJVkFU
RSBkb3VibGUgdG9Eb3VibGUoYm9vbCogb2sgPSAwLCBib29sKiBkaWRSZWFkTnVtYmVyID0gMCkg
Y29uc3Q7Ci0gICAgV1RGX0VYUE9SVF9QUklWQVRFIGZsb2F0IHRvRmxvYXQoYm9vbCogb2sgPSAw
LCBib29sKiBkaWRSZWFkTnVtYmVyID0gMCkgY29uc3Q7CisKKyAgICAvLyBGSVhNRTogTGlrZSB0
aGUgc3RyaWN0IGZ1bmN0aW9ucyBhYm92ZSwgdGhlc2UgZ2l2ZSBmYWxzZSBmb3IgIm9rIiB3aGVu
IHRoZXJlIGlzIHRyYWlsaW5nIGdhcmJhZ2UuCisgICAgLy8gTGlrZSB0aGUgbm9uLXN0cmljdCBm
dW5jdGlvbnMgYWJvdmUsIHRoZXNlIHJldHVybiB0aGUgdmFsdWUgd2hlbiB0aGVyZSBpcyB0cmFp
bGluZyBnYXJiYWdlLgorICAgIC8vIEl0IHdvdWxkIGJlIGJldHRlciBpZiB0aGVzZSB3ZXJlIG1v
cmUgY29uc2lzdGVudCB3aXRoIHRoZSBhYm92ZSBmdW5jdGlvbnMgaW5zdGVhZC4KKyAgICBXVEZf
RVhQT1JUX1BSSVZBVEUgZG91YmxlIHRvRG91YmxlKGJvb2wqIG9rID0gMCkgY29uc3Q7CisgICAg
V1RGX0VYUE9SVF9QUklWQVRFIGZsb2F0IHRvRmxvYXQoYm9vbCogb2sgPSAwKSBjb25zdDsKIAog
ICAgIGJvb2wgcGVyY2VudGFnZShpbnQmIHBlcmNlbnRhZ2UpIGNvbnN0OwogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCShyZXZpc2lvbiAxMTI4MzEpCisrKyBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSwyOSBAQAorMjAxMi0wNC0wMSAgRGFyaW4gQWRsZXIgIDxkYXJp
bkBhcHBsZS5jb20+CisKKyAgICAgICAgU3RyZWFtbGluZSBzdHJ0b2QgYW5kIGZpeCBzb21lIHJl
bGF0ZWQgcHJvYmxlbXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTgyODU3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgUmVmYWN0b3Jpbmcgb2YgY29kZSBjb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisg
ICAgICAgICogZG9tL1ZpZXdwb3J0QXJndW1lbnRzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om51
bWVyaWNQcmVmaXgpOiBSZW1vdmVkIGEgY29uZnVzaW5nIGNvbW1lbnQgdGhhdCBqdXN0IHNhaWQK
KyAgICAgICAgIndlIHRvbGVyYXRlIGV4dHJhIGNoYXJhY3RlcnMiIGluIGEgcm91bmRhYm91dCB3
YXkuIE1hZGUgdGhlICJvayIKKyAgICAgICAgYXJndW1lbnQgb3B0aW9uYWwuIENoYW5nZWQgdG8g
Y2FsbCB0aGUgbmV3IHZlcnNpb24gb2YgY2hhcmFjdGVyc1RvRmxvYXQKKyAgICAgICAgdGhhdCBy
ZXR1cm5zIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBwYXJzZWQgcmF0aGVyIHRoYW4gdXNpbmcg
dGhlCisgICAgICAgIGNoYXJhY3RlcnNUb0Zsb2F0SWdub3JpbmdKdW5rL2RpZFJlYWROdW1iZXIg
c29sdXRpb24gZnJvbSBiZWZvcmUuCisgICAgICAgIChXZWJDb3JlOjpmaW5kU2l6ZVZhbHVlKTog
U2luY2UgbnVtZXJpY1ByZWZpeCBpcyBndWFyYW50ZWVkIHRvIHJldHVybiAwCisgICAgICAgIHdo
ZW4gaXQgY2FuJ3QgcGFyc2UsIHJlbW92ZWQgdGhlICJvayIgY29kZS4gQWxzbyBjaGFuZ2VkIHRo
ZSB1bnVzdWFsCisgICAgICAgIHN5bnRheCAiZmxvYXQoMS4wKSIgdG8ganVzdCAiMSIsIHdoaWNo
IHdvcmtzIGp1c3QgYXMgd2VsbC4KKyAgICAgICAgKFdlYkNvcmU6OmZpbmRTY2FsZVZhbHVlKTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpmaW5kVXNlclNjYWxhYmxlVmFsdWUpOiBEaXR0by4K
KworICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxQYXJzZXJJZGlvbXMuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6cGFyc2VUb0RvdWJsZUZvck51bWJlclR5cGUpOiBSZW1vdmVkIGFuIHVubmVlZGVk
IGNvZGUgcGF0aAorICAgICAgICBhbmQgcmVwbGFjZWQgaXQgd2l0aCBhbiBhc3NlcnRpb247IHRv
RG91YmxlIG5vIGxvbmdlciB3aWxsIHJldHVybiBpbmZpbml0eQorICAgICAgICBvciBub3QtYS1u
dW1iZXIgdmFsdWVzLgorCiAyMDEyLTAzLTI5ICBLZW50IFRhbXVyYSAgPHRrZW50QGNocm9taXVt
Lm9yZz4KIAogICAgICAgICBGaXggc29tZSBwcm9ibGVtcyBvZiB0ZXh0IGZpZWxkIGRlY29yYXRp
b24KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9WaWV3cG9ydEFyZ3VtZW50cy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1ZpZXdwb3J0QXJndW1lbnRzLmNwcAkocmV2aXNp
b24gMTEyODE2KQorKysgU291cmNlL1dlYkNvcmUvZG9tL1ZpZXdwb3J0QXJndW1lbnRzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjA0LDI4ICsyMDQsMjQgQEAgdm9pZCByZXN0cmljdFNjYWxlRmFj
dG9yVG9Jbml0aWFsU2NhbGVJZgogICAgICAgICByZXN1bHQubWF4aW11bVNjYWxlID0gcmVzdWx0
Lm1pbmltdW1TY2FsZSA9IHJlc3VsdC5pbml0aWFsU2NhbGU7CiB9CiAKLXN0YXRpYyBmbG9hdCBu
dW1lcmljUHJlZml4KGNvbnN0IFN0cmluZyYga2V5U3RyaW5nLCBjb25zdCBTdHJpbmcmIHZhbHVl
U3RyaW5nLCBEb2N1bWVudCogZG9jdW1lbnQsIGJvb2wqIG9rKQorc3RhdGljIGZsb2F0IG51bWVy
aWNQcmVmaXgoY29uc3QgU3RyaW5nJiBrZXlTdHJpbmcsIGNvbnN0IFN0cmluZyYgdmFsdWVTdHJp
bmcsIERvY3VtZW50KiBkb2N1bWVudCwgYm9vbCogb2sgPSAwKQogewotICAgIC8vIElmIGEgcHJl
Zml4IG9mIHByb3BlcnR5LXZhbHVlIGNhbiBiZSBjb252ZXJ0ZWQgdG8gYSBudW1iZXIgdXNpbmcg
c3RydG9kLAotICAgIC8vIHRoZSB2YWx1ZSB3aWxsIGJlIHRoYXQgbnVtYmVyLiBUaGUgcmVtYWlu
ZGVyIG9mIHRoZSBzdHJpbmcgaXMgaWdub3JlZC4KLSAgICAvLyBTbyB3aGVuIFN0cmluZzo6dG9G
bG9hdCBzYXlzIHRoZXJlIGlzIGFuIGVycm9yLCBpdCBtYXkgYmUgYSBmYWxzZSBwb3NpdGl2ZSwK
LSAgICAvLyBhbmQgd2Ugc2hvdWxkIGNoZWNrIGlmIHRoZSB2YWx1ZVN0cmluZyBwcmVmaXggd2Fz
IGEgbnVtYmVyLgotCi0gICAgYm9vbCBkaWRSZWFkTnVtYmVyOworICAgIHNpemVfdCBwYXJzZWRM
ZW5ndGg7CiAgICAgZmxvYXQgdmFsdWU7CiAgICAgaWYgKHZhbHVlU3RyaW5nLmlzOEJpdCgpKQot
ICAgICAgICB2YWx1ZSA9IFdURjo6Y2hhcmFjdGVyc1RvRmxvYXRJZ25vcmluZ0p1bmsodmFsdWVT
dHJpbmcuY2hhcmFjdGVyczgoKSwgdmFsdWVTdHJpbmcubGVuZ3RoKCksIG9rLCAmZGlkUmVhZE51
bWJlcik7CisgICAgICAgIHZhbHVlID0gY2hhcmFjdGVyc1RvRmxvYXQodmFsdWVTdHJpbmcuY2hh
cmFjdGVyczgoKSwgdmFsdWVTdHJpbmcubGVuZ3RoKCksIHBhcnNlZExlbmd0aCk7CiAgICAgZWxz
ZQotICAgICAgICB2YWx1ZSA9IFdURjo6Y2hhcmFjdGVyc1RvRmxvYXRJZ25vcmluZ0p1bmsodmFs
dWVTdHJpbmcuY2hhcmFjdGVyczE2KCksIHZhbHVlU3RyaW5nLmxlbmd0aCgpLCBvaywgJmRpZFJl
YWROdW1iZXIpOwotICAgIGlmICghKm9rKSB7Ci0gICAgICAgIGlmICghZGlkUmVhZE51bWJlcikg
ewotICAgICAgICAgICAgQVNTRVJUKGlzbmFuKHZhbHVlKSB8fCAhdmFsdWUpOwotICAgICAgICAg
ICAgcmVwb3J0Vmlld3BvcnRXYXJuaW5nKGRvY3VtZW50LCBVbnJlY29nbml6ZWRWaWV3cG9ydEFy
Z3VtZW50VmFsdWVFcnJvciwgdmFsdWVTdHJpbmcsIGtleVN0cmluZyk7Ci0gICAgICAgICAgICBy
ZXR1cm4gdmFsdWU7Ci0gICAgICAgIH0KLSAgICAgICAgKm9rID0gdHJ1ZTsKLSAgICAgICAgcmVw
b3J0Vmlld3BvcnRXYXJuaW5nKGRvY3VtZW50LCBUcnVuY2F0ZWRWaWV3cG9ydEFyZ3VtZW50VmFs
dWVFcnJvciwgdmFsdWVTdHJpbmcsIGtleVN0cmluZyk7CisgICAgICAgIHZhbHVlID0gY2hhcmFj
dGVyc1RvRmxvYXQodmFsdWVTdHJpbmcuY2hhcmFjdGVyczE2KCksIHZhbHVlU3RyaW5nLmxlbmd0
aCgpLCBwYXJzZWRMZW5ndGgpOworICAgIGlmICghcGFyc2VkTGVuZ3RoKSB7CisgICAgICAgIHJl
cG9ydFZpZXdwb3J0V2FybmluZyhkb2N1bWVudCwgVW5yZWNvZ25pemVkVmlld3BvcnRBcmd1bWVu
dFZhbHVlRXJyb3IsIHZhbHVlU3RyaW5nLCBrZXlTdHJpbmcpOworICAgICAgICBpZiAob2spCisg
ICAgICAgICAgICAqb2sgPSBmYWxzZTsKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgfQorICAgIGlm
IChwYXJzZWRMZW5ndGggPCB2YWx1ZVN0cmluZy5sZW5ndGgoKSkKKyAgICAgICAgcmVwb3J0Vmll
d3BvcnRXYXJuaW5nKGRvY3VtZW50LCBUcnVuY2F0ZWRWaWV3cG9ydEFyZ3VtZW50VmFsdWVFcnJv
ciwgdmFsdWVTdHJpbmcsIGtleVN0cmluZyk7CisgICAgaWYgKG9rKQorICAgICAgICAqb2sgPSB0
cnVlOwogICAgIHJldHVybiB2YWx1ZTsKIH0KIApAQCAtMjQzLDEwICsyMzksNyBAQCBzdGF0aWMg
ZmxvYXQgZmluZFNpemVWYWx1ZShjb25zdCBTdHJpbmcmCiAgICAgaWYgKGVxdWFsSWdub3JpbmdD
YXNlKHZhbHVlU3RyaW5nLCAiZGV2aWNlLWhlaWdodCIpKQogICAgICAgICByZXR1cm4gVmlld3Bv
cnRBcmd1bWVudHM6OlZhbHVlRGV2aWNlSGVpZ2h0OwogCi0gICAgYm9vbCBvazsKLSAgICBmbG9h
dCB2YWx1ZSA9IG51bWVyaWNQcmVmaXgoa2V5U3RyaW5nLCB2YWx1ZVN0cmluZywgZG9jdW1lbnQs
ICZvayk7Ci0gICAgaWYgKCFvaykKLSAgICAgICAgcmV0dXJuIGZsb2F0KDAuMCk7CisgICAgZmxv
YXQgdmFsdWUgPSBudW1lcmljUHJlZml4KGtleVN0cmluZywgdmFsdWVTdHJpbmcsIGRvY3VtZW50
KTsKIAogICAgIGlmICh2YWx1ZSA8IDApCiAgICAgICAgIHJldHVybiBWaWV3cG9ydEFyZ3VtZW50
czo6VmFsdWVBdXRvOwpAQCAtMjYzLDIwICsyNTYsMTcgQEAgc3RhdGljIGZsb2F0IGZpbmRTY2Fs
ZVZhbHVlKGNvbnN0IFN0cmluZwogICAgIC8vIDUpIG5vIGFuZCB1bmtub3duIHZhbHVlcyBhcmUg
dHJhbnNsYXRlZCB0byAwLjAKIAogICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZSh2YWx1ZVN0cmlu
ZywgInllcyIpKQotICAgICAgICByZXR1cm4gZmxvYXQoMS4wKTsKKyAgICAgICAgcmV0dXJuIDE7
CiAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKHZhbHVlU3RyaW5nLCAibm8iKSkKLSAgICAgICAg
cmV0dXJuIGZsb2F0KDAuMCk7CisgICAgICAgIHJldHVybiAwOwogICAgIGlmIChlcXVhbElnbm9y
aW5nQ2FzZSh2YWx1ZVN0cmluZywgImRlc2t0b3Atd2lkdGgiKSkKLSAgICAgICAgcmV0dXJuIGZs
b2F0KDEwLjApOworICAgICAgICByZXR1cm4gMTA7CiAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNl
KHZhbHVlU3RyaW5nLCAiZGV2aWNlLXdpZHRoIikpCi0gICAgICAgIHJldHVybiBmbG9hdCgxMC4w
KTsKKyAgICAgICAgcmV0dXJuIDEwOwogICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZSh2YWx1ZVN0
cmluZywgImRldmljZS1oZWlnaHQiKSkKLSAgICAgICAgcmV0dXJuIGZsb2F0KDEwLjApOworICAg
ICAgICByZXR1cm4gMTA7CiAKLSAgICBib29sIG9rOwotICAgIGZsb2F0IHZhbHVlID0gbnVtZXJp
Y1ByZWZpeChrZXlTdHJpbmcsIHZhbHVlU3RyaW5nLCBkb2N1bWVudCwgJm9rKTsKLSAgICBpZiAo
IW9rKQotICAgICAgICByZXR1cm4gZmxvYXQoMC4wKTsKKyAgICBmbG9hdCB2YWx1ZSA9IG51bWVy
aWNQcmVmaXgoa2V5U3RyaW5nLCB2YWx1ZVN0cmluZywgZG9jdW1lbnQpOwogCiAgICAgaWYgKHZh
bHVlIDwgMCkKICAgICAgICAgcmV0dXJuIFZpZXdwb3J0QXJndW1lbnRzOjpWYWx1ZUF1dG87CkBA
IC0zMDQsMTAgKzI5NCw3IEBAIHN0YXRpYyBmbG9hdCBmaW5kVXNlclNjYWxhYmxlVmFsdWUoY29u
c3QKICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UodmFsdWVTdHJpbmcsICJkZXZpY2UtaGVpZ2h0
IikpCiAgICAgICAgIHJldHVybiAxOwogCi0gICAgYm9vbCBvazsKLSAgICBmbG9hdCB2YWx1ZSA9
IG51bWVyaWNQcmVmaXgoa2V5U3RyaW5nLCB2YWx1ZVN0cmluZywgZG9jdW1lbnQsICZvayk7Ci0g
ICAgaWYgKCFvaykKLSAgICAgICAgcmV0dXJuIDA7CisgICAgZmxvYXQgdmFsdWUgPSBudW1lcmlj
UHJlZml4KGtleVN0cmluZywgdmFsdWVTdHJpbmcsIGRvY3VtZW50KTsKIAogICAgIGlmIChmYWJz
KHZhbHVlKSA8IDEpCiAgICAgICAgIHJldHVybiAwOwpAQCAtMzMxLDcgKzMxOCw3IEBAIHN0YXRp
YyBmbG9hdCBmaW5kVGFyZ2V0RGVuc2l0eURQSVZhbHVlKGMKICAgICBpZiAoIW9rKQogICAgICAg
ICByZXR1cm4gVmlld3BvcnRBcmd1bWVudHM6OlZhbHVlQXV0bzsKIAotICAgICBpZiAodmFsdWUg
PCA3MCB8fCB2YWx1ZSA+IDQwMCkgeworICAgIGlmICh2YWx1ZSA8IDcwIHx8IHZhbHVlID4gNDAw
KSB7CiAgICAgICAgIHJlcG9ydFZpZXdwb3J0V2FybmluZyhkb2N1bWVudCwgVGFyZ2V0RGVuc2l0
eURwaVRvb1NtYWxsT3JMYXJnZUVycm9yLCBTdHJpbmcoKSwgU3RyaW5nKCkpOwogICAgICAgICBy
ZXR1cm4gVmlld3BvcnRBcmd1bWVudHM6OlZhbHVlQXV0bzsKICAgICB9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9odG1sL3BhcnNlci9IVE1MUGFyc2VySWRpb21zLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MUGFyc2VySWRpb21zLmNwcAkocmV2aXNpb24g
MTEyODE2KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFBhcnNlcklkaW9tcy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTc5LDEwICs3OSw3IEBAIGJvb2wgcGFyc2VUb0RvdWJsZUZv
ck51bWJlclR5cGUoY29uc3QgU3QKICAgICBkb3VibGUgdmFsdWUgPSBzdHJpbmcudG9Eb3VibGUo
JnZhbGlkKTsKICAgICBpZiAoIXZhbGlkKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAv
LyBOYU4gYW5kIGluZmluaXR5IGFyZSBjb25zaWRlcmVkIHZhbGlkIGJ5IFN0cmluZzo6dG9Eb3Vi
bGUsIGJ1dCBub3QgdmFsaWQgaGVyZS4KLSAgICBpZiAoIWlzZmluaXRlKHZhbHVlKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIEFTU0VSVChpc2Zpbml0ZSh2YWx1ZSkpOwogCiAgICAgLy8g
TnVtYmVycyBhcmUgY29uc2lkZXJlZCBmaW5pdGUgSUVFRSA3NTQgc2luZ2xlLXByZWNpc2lvbiBm
bG9hdGluZyBwb2ludCB2YWx1ZXMuCiAgICAgLy8gU2VlIEhUTUw1IDIuNS40LjMgYFJlYWwgbnVt
YmVycy4nCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>135746</attachid>
            <date>2012-04-04 19:18:56 -0700</date>
            <delta_ts>2012-04-05 07:54:35 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-82857-20120404191854.patch</filename>
            <type>text/plain</type>
            <size>63671</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTEzMjc1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQxIEBA
CisyMDEyLTA0LTA0ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBT
dHJlYW1saW5lIHN0cnRvZCBhbmQgZml4IHNvbWUgcmVsYXRlZCBwcm9ibGVtcworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODI4NTcKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHBhcnNlci9MZXhlci5jcHA6
CisgICAgICAgIChKU0M6OkxleGVyPD46OmxleCk6IFVzZSBwYXJzZURvdWJsZS4gU2luY2Ugd2Ug
aGF2ZSBhbHJlYWR5IHNjYW5uZWQgdGhlIG51bWJlcgorICAgICAgICBhbmQgd2Uga25vdyBpdCBo
YXMgb25seSBjb3JyZWN0IGNoYXJhY3RlcnMsIGxlYWRpbmcgc3BhY2VzLCB0cmFpbGluZyBqdW5r
LCBhbmQKKyAgICAgICAgdHJhaWxpbmcgc3BhY2VzIGFyZSBub3QgYSBwb3NzaWJpbGl0eS4gTm8g
bmVlZCB0byBhZGQgYSB0cmFpbGluZyBudWxsIGNoYXJhY3Rlci4KKworICAgICAgICAqIHJ1bnRp
bWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpwYXJzZUludCk6
IENoYW5nZWQgb3ZlcmZsb3cgYmFzZWQgMTAgY2FzZSB0byB1c2UgcGFyc2VEb3VibGUuIE5vIG5l
ZWQKKyAgICAgICAgdG8gYWxsb3cgdHJhaWxpbmcganVuayBzaW5jZSB0aGUgY29kZSBhYm92ZSBh
bHJlYWR5IGFsbG93cyBvbmx5IG51bWVyaWMgZGlnaXRzCisgICAgICAgIGluIHRoZSBzdHJpbmcu
IFRoaXMgY29kZSBwYXRoIGlzIHVzZWQgb25seSBpbiB1bnVzdWFsIGNhc2VzLCBzbyBpdCdzIG5v
dAorICAgICAgICBvcHRpbWl6ZWQgZm9yIDgtYml0IHN0cmluZ3MsIGJ1dCBlYXNpbHkgY291bGQg
YmUuCisgICAgICAgIChKU0M6OmpzU3RyRGVjaW1hbExpdGVyYWwpOiBSZW1vdmVkIHRoZSBhbGxv
dyB0cmFpbGluZyBqdW5rIGFyZ3VtZW50IHRvIHRoaXMKKyAgICAgICAgZnVuY3Rpb24gdGVtcGxh
dGUgYmVjYXVzZSBhbGwgdGhlIGNhbGxlcnMgYXJlIE9LIHdpdGggdHJhaWxpbmcganVuay4gVXNl
IHRoZQorICAgICAgICBwYXJzZURvdWJsZSBmdW5jdGlvbi4gTm8gbmVlZCB0byBjb3B5IHRoZSBk
YXRhIGludG8gYSBieXRlIGJ1ZmZlciwgYmVjYXVzZQorICAgICAgICBwYXJzZURvdWJsZSBoYW5k
bGVzIHRoYXQuCisgICAgICAgIChKU0M6OnRvRG91YmxlKTogR290IHJpZCBvZiB0aGUgRGlzYWxs
b3dUcmFpbGluZ0p1bmsgYXJndW1lbnQgdG8gdGhlCisgICAgICAgIGpzU3RyRGVjaW1hbExpdGVy
YWwgZnVuY3Rpb24gdGVtcGxhdGUuIFRoYXQncyBPSyBiZWNhdXNlIHRoaXMgZnVuY3Rpb24KKyAg
ICAgICAgYWxyZWFkeSBjaGVja3MgZm9yIHRyYWlsaW5nIGp1bmsgYW5kIGhhbmRsZXMgaXQgYXBw
cm9wcmlhdGVseS4gVGhlIG9sZCBjb2RlCisgICAgICAgIHBhdGggd2FzIGRvaW5nIGl0IHR3aWNl
LgorICAgICAgICAoSlNDOjpwYXJzZUZsb2F0KTogR290IHJpZCBvZiB0aGUgQWxsb3dUcmFpbGlu
Z0p1bmsgYXJndW1lbnQgdG8gdGhlCisgICAgICAgIGpzU3RyRGVjaW1hbExpdGVyYWwgZnVuY3Rp
b24gdGVtcGxhdGU7IHRoZSB0ZW1wbGF0ZSBhbGxvd3MganVuayB1bmNvbmRpdGlvbmFsbHkuCisK
KyAgICAgICAgKiBydW50aW1lL0xpdGVyYWxQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjo6Okxl
eGVyOjpsZXhOdW1iZXIpOiBVc2UgcGFyc2VEb3VibGUuIFNpbmNlIHdlIGhhdmUgYWxyZWFkeSBz
Y2FubmVkIHRoZSBudW1iZXIKKyAgICAgICAgYW5kIHdlIGtub3cgaXQgaGFzIG9ubHkgY29ycmVj
dCBjaGFyYWN0ZXJzLCBsZWFkaW5nIHNwYWNlcywgdHJhaWxpbmcganVuaywgYW5kCisgICAgICAg
IHRyYWlsaW5nIHNwYWNlcyBhcmUgbm90IGEgcG9zc2liaWxpdHkuIE5vIG5lZWQgdG8gYWRkIGEg
dHJhaWxpbmcgbnVsbCBjaGFyYWN0ZXIuCisgICAgICAgIE5vIG5lZWQgdG8gY29weSB0aGUgZGF0
YSBpbnRvIGEgYnl0ZSBidWZmZXIsIGJlY2F1c2UgcGFyc2VEb3VibGUgaGFuZGxlcyB0aGF0Lgor
ICAgICAgICBXZSBjb3VsZCBvcHRpbWl6ZSB0aGUgVUNoYXIgY2FzZSBldmVuIG1vcmUgYmVjYXVz
ZSB3ZSBrbm93IGFsbCB0aGUgY2hhcmFjdGVycworICAgICAgICBhcmUgQVNDSUksIGJ1dCBub3Qg
ZG9pbmcgdGhhdCBhdCB0aGlzIHRpbWUuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52Y3By
b2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZGVmOiBVcGRhdGVkLgorCiAyMDEyLTA0
LTA0ICBPbGl2ZXIgSHVudCAgPG9saXZlckBhcHBsZS5jb20+CiAKICAgICAgICAgUGFyc2VyIGZh
aWxzIHRvIHJldmVydCBzb21lIHN0YXRlIGFmdGVyIHBhcnNpbmcgZXhwcmVzc2lvbiBhbmQgb2Jq
ZWN0IGxpdGVyYWxzLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
LnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5kZWYKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS5kZWYJKHJldmlzaW9uIDExMzI3NSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUuZGVmCSh3b3JraW5nIGNvcHkpCkBAIC0xLDkgKzEsNSBAQAogRVhQT1JUUwogCi0gICAgPz8k
c3RydG9kQCQwMCQwMEBXVEZAQFlBTlBCRFBBUEFEQFoKLSAgICA/PyRzdHJ0b2RAJDAwJDBBQEBX
VEZAQFlBTlBCRFBBUEFEQFoKLSAgICA/PyRzdHJ0b2RAJDBBQCQwMEBXVEZAQFlBTlBCRFBBUEFE
QFoKLSAgICA/PyRzdHJ0b2RAJDBBQCQwQUBAV1RGQEBZQU5QQkRQQVBBREBaCiAgICAgPz8wQXJy
YXlCdWZmZXJWaWV3QFdURkBASUFFQFY/JFBhc3NSZWZQdHJAVkFycmF5QnVmZmVyQFdURkBAQDFA
SUBaCiAgICAgPz8wQ29sbGF0b3JAV1RGQEBRQUVAUEJEQFoKICAgICA/PzBDU3RyaW5nQFdURkBA
UUFFQFBCREBaCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0xleGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0xleGVyLmNwcAkocmV2
aXNpb24gMTEzMjc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9MZXhlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE0NzMsMTQgKzE0NzMsMTQgQEAgc3RhcnQ6CiBpbk51bWJlckFm
dGVyRGVjaW1hbFBvaW50OgogICAgICAgICAgICAgICAgICAgICBwYXJzZU51bWJlckFmdGVyRGVj
aW1hbFBvaW50KCk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICgobV9j
dXJyZW50IHwgMHgyMCkgPT0gJ2UnKQorICAgICAgICAgICAgICAgIGlmICgobV9jdXJyZW50IHwg
MHgyMCkgPT0gJ2UnKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmICghcGFyc2VOdW1iZXJBZnRl
ckV4cG9uZW50SW5kaWNhdG9yKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIG1fbGV4RXJy
b3JNZXNzYWdlID0gIk5vbi1udW1iZXIgZm91bmQgYWZ0ZXIgZXhwb25lbnQgaW5kaWNhdG9yIjsK
ICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gcmV0dXJuRXJyb3I7CiAgICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAvLyBOdWxsLXRlcm1pbmF0ZSBzdHJpbmcgZm9yIHN0
cnRvZC4KLSAgICAgICAgICAgICAgICBtX2J1ZmZlcjguYXBwZW5kKCdcMCcpOwotICAgICAgICAg
ICAgICAgIHRva2VuRGF0YS0+ZG91YmxlVmFsdWUgPSBXVEY6OnN0cnRvZDxXVEY6OkFsbG93VHJh
aWxpbmdKdW5rLCBXVEY6OkRpc2FsbG93VHJhaWxpbmdTcGFjZXM+KHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgY2hhcio+KG1fYnVmZmVyOC5kYXRhKCkpLCAwKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgc2l6ZV90IHBhcnNlZExlbmd0aDsKKyAgICAgICAgICAgICAgICB0b2tl
bkRhdGEtPmRvdWJsZVZhbHVlID0gcGFyc2VEb3VibGUobV9idWZmZXI4LmRhdGEoKSwgbV9idWZm
ZXI4LnNpemUoKSwgcGFyc2VkTGVuZ3RoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHRv
a2VuID0gTlVNQkVSOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwCShyZXZpc2lv
biAxMTMyNzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVj
dEZ1bmN0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAvKgogICogIENv
cHlyaWdodCAoQykgMTk5OS0yMDAyIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCiAgKiAg
Q29weXJpZ2h0IChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCi0gKiAgQ29weXJp
Z2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIw
MDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICogIENvcHlyaWdodCAoQykgMjAwNyBDYW1lcm9uIFp3YXJpY2ggKGN3endhcmlj
aEB1d2F0ZXJsb28uY2EpCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3IE1ha3MgT3Jsb3ZpY2gKICAq
CkBAIC0yOTUsMTcgKzI5NSwyMCBAQCBzdGF0aWMgZG91YmxlIHBhcnNlSW50KGNvbnN0IFVTdHJp
bmcmIHMsCiAgICAgICAgIG51bWJlciArPSBkaWdpdDsKICAgICAgICAgKytwOwogICAgIH0KLSAg
ICBpZiAobnVtYmVyID49IG1hbnRpc3NhT3ZlcmZsb3dMb3dlckJvdW5kKSB7Ci0gICAgICAgIGlm
IChyYWRpeCA9PSAxMCkKLSAgICAgICAgICAgIG51bWJlciA9IFdURjo6c3RydG9kPFdURjo6QWxs
b3dUcmFpbGluZ0p1bmssIFdURjo6RGlzYWxsb3dUcmFpbGluZ1NwYWNlcz4ocy5zdWJzdHJpbmdT
aGFyaW5nSW1wbChmaXJzdERpZ2l0UG9zaXRpb24sIHAgLSBmaXJzdERpZ2l0UG9zaXRpb24pLnV0
ZjgoKS5kYXRhKCksIDApOwotICAgICAgICBlbHNlIGlmIChyYWRpeCA9PSAyIHx8IHJhZGl4ID09
IDQgfHwgcmFkaXggPT0gOCB8fCByYWRpeCA9PSAxNiB8fCByYWRpeCA9PSAzMikKLSAgICAgICAg
ICAgIG51bWJlciA9IHBhcnNlSW50T3ZlcmZsb3cocy5zdWJzdHJpbmdTaGFyaW5nSW1wbChmaXJz
dERpZ2l0UG9zaXRpb24sIHAgLSBmaXJzdERpZ2l0UG9zaXRpb24pLnV0ZjgoKS5kYXRhKCksIHAg
LSBmaXJzdERpZ2l0UG9zaXRpb24sIHJhZGl4KTsKLSAgICB9CiAKICAgICAvLyAxMi4gSWYgWiBp
cyBlbXB0eSwgcmV0dXJuIE5hTi4KICAgICBpZiAoIXNhd0RpZ2l0KQogICAgICAgICByZXR1cm4g
c3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKTsKIAorICAgIC8vIEFsdGVy
bmF0ZSBjb2RlIHBhdGggZm9yIGNlcnRhaW4gbGFyZ2UgbnVtYmVycy4KKyAgICBpZiAobnVtYmVy
ID49IG1hbnRpc3NhT3ZlcmZsb3dMb3dlckJvdW5kKSB7CisgICAgICAgIGlmIChyYWRpeCA9PSAx
MCkgeworICAgICAgICAgICAgc2l6ZV90IHBhcnNlZExlbmd0aDsKKyAgICAgICAgICAgIG51bWJl
ciA9IHBhcnNlRG91YmxlKHMuY2hhcmFjdGVycygpICsgZmlyc3REaWdpdFBvc2l0aW9uLCBwIC0g
Zmlyc3REaWdpdFBvc2l0aW9uLCBwYXJzZWRMZW5ndGgpOworICAgICAgICB9IGVsc2UgaWYgKHJh
ZGl4ID09IDIgfHwgcmFkaXggPT0gNCB8fCByYWRpeCA9PSA4IHx8IHJhZGl4ID09IDE2IHx8IHJh
ZGl4ID09IDMyKQorICAgICAgICAgICAgbnVtYmVyID0gcGFyc2VJbnRPdmVyZmxvdyhzLnN1YnN0
cmluZ1NoYXJpbmdJbXBsKGZpcnN0RGlnaXRQb3NpdGlvbiwgcCAtIGZpcnN0RGlnaXRQb3NpdGlv
bikudXRmOCgpLmRhdGEoKSwgcCAtIGZpcnN0RGlnaXRQb3NpdGlvbiwgcmFkaXgpOworICAgIH0K
KwogICAgIC8vIDE1LiBSZXR1cm4gc2lnbiB4IG51bWJlci4KICAgICByZXR1cm4gc2lnbiAqIG51
bWJlcjsKIH0KQEAgLTM1NiwyNSArMzU5LDE1IEBAIHN0YXRpYyBkb3VibGUganNIZXhJbnRlZ2Vy
TGl0ZXJhbChjb25zdCAKIH0KIAogLy8gU2VlIGVjbWEtMjYyIDkuMy4xCi10ZW1wbGF0ZSA8V1RG
OjpBbGxvd1RyYWlsaW5nSnVua1RhZyBhbGxvd1RyYWlsaW5nSnVuaywgdHlwZW5hbWUgQ2hhclR5
cGU+Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhclR5cGU+CiBzdGF0aWMgZG91YmxlIGpzU3RyRGVj
aW1hbExpdGVyYWwoY29uc3QgQ2hhclR5cGUqJiBkYXRhLCBjb25zdCBDaGFyVHlwZSogZW5kKQog
ewogICAgIEFTU0VSVChkYXRhIDwgZW5kKTsKIAotICAgIC8vIENvcHkgdGhlIHN0aW5nIGludG8g
YSBudWxsLXRlcm1pbmF0ZWQgYnl0ZSBidWZmZXIsIGFuZCBjYWxsIHN0cnRvZC4KLSAgICBWZWN0
b3I8Y2hhciwgMzI+IGJ5dGVCdWZmZXI7Ci0gICAgZm9yIChjb25zdCBDaGFyVHlwZSogY2hhcmFj
dGVycyA9IGRhdGE7IGNoYXJhY3RlcnMgPCBlbmQ7ICsrY2hhcmFjdGVycykgewotICAgICAgICBD
aGFyVHlwZSBjaGFyYWN0ZXIgPSAqY2hhcmFjdGVyczsKLSAgICAgICAgYnl0ZUJ1ZmZlci5hcHBl
bmQoaXNBU0NJSShjaGFyYWN0ZXIpID8gc3RhdGljX2Nhc3Q8Y2hhcj4oY2hhcmFjdGVyKSA6IDAp
OwotICAgIH0KLSAgICBieXRlQnVmZmVyLmFwcGVuZCgwKTsKLSAgICBjaGFyKiBlbmRPZk51bWJl
cjsKLSAgICBkb3VibGUgbnVtYmVyID0gV1RGOjpzdHJ0b2Q8YWxsb3dUcmFpbGluZ0p1bmssIFdU
Rjo6QWxsb3dUcmFpbGluZ1NwYWNlcz4oYnl0ZUJ1ZmZlci5kYXRhKCksICZlbmRPZk51bWJlcik7
Ci0KLSAgICAvLyBDaGVjayBpZiBzdHJ0b2QgZm91bmQgYSBudW1iZXI7IGlmIHNvIHJldHVybiBp
dC4KLSAgICBwdHJkaWZmX3QgY29uc3VtZWQgPSBlbmRPZk51bWJlciAtIGJ5dGVCdWZmZXIuZGF0
YSgpOwotICAgIGlmIChjb25zdW1lZCkgewotICAgICAgICBkYXRhICs9IGNvbnN1bWVkOworICAg
IHNpemVfdCBwYXJzZWRMZW5ndGg7CisgICAgZG91YmxlIG51bWJlciA9IHBhcnNlRG91YmxlKGRh
dGEsIGVuZCAtIGRhdGEsIHBhcnNlZExlbmd0aCk7CisgICAgaWYgKHBhcnNlZExlbmd0aCkgewor
ICAgICAgICBkYXRhICs9IHBhcnNlZExlbmd0aDsKICAgICAgICAgcmV0dXJuIG51bWJlcjsKICAg
ICB9CiAKQEAgLTQyNSw3ICs0MTgsNyBAQCBzdGF0aWMgZG91YmxlIHRvRG91YmxlKGNvbnN0IENo
YXJUeXBlKiBjCiAgICAgaWYgKGNoYXJhY3RlcnNbMF0gPT0gJzAnICYmIGNoYXJhY3RlcnMgKyAy
IDwgZW5kQ2hhcmFjdGVycyAmJiAoY2hhcmFjdGVyc1sxXSB8IDB4MjApID09ICd4JyAmJiBpc0FT
Q0lJSGV4RGlnaXQoY2hhcmFjdGVyc1syXSkpCiAgICAgICAgIG51bWJlciA9IGpzSGV4SW50ZWdl
ckxpdGVyYWwoY2hhcmFjdGVycywgZW5kQ2hhcmFjdGVycyk7CiAgICAgZWxzZQotICAgICAgICBu
dW1iZXIgPSBqc1N0ckRlY2ltYWxMaXRlcmFsPFdURjo6RGlzYWxsb3dUcmFpbGluZ0p1bms+KGNo
YXJhY3RlcnMsIGVuZENoYXJhY3RlcnMpOworICAgICAgICBudW1iZXIgPSBqc1N0ckRlY2ltYWxM
aXRlcmFsKGNoYXJhY3RlcnMsIGVuZENoYXJhY3RlcnMpOwogICAgIAogICAgIC8vIEFsbG93IHRy
YWlsaW5nIHdoaXRlIHNwYWNlLgogICAgIGZvciAoOyBjaGFyYWN0ZXJzIDwgZW5kQ2hhcmFjdGVy
czsgKytjaGFyYWN0ZXJzKSB7CkBAIC00ODIsNyArNDc1LDcgQEAgc3RhdGljIGRvdWJsZSBwYXJz
ZUZsb2F0KGNvbnN0IFVTdHJpbmcmIAogICAgICAgICBpZiAoZGF0YSA9PSBlbmQpCiAgICAgICAg
ICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKTsKIAot
ICAgICAgICByZXR1cm4ganNTdHJEZWNpbWFsTGl0ZXJhbDxXVEY6OkFsbG93VHJhaWxpbmdKdW5r
PihkYXRhLCBlbmQpOworICAgICAgICByZXR1cm4ganNTdHJEZWNpbWFsTGl0ZXJhbChkYXRhLCBl
bmQpOwogICAgIH0KIAogICAgIGNvbnN0IFVDaGFyKiBkYXRhID0gcy5jaGFyYWN0ZXJzMTYoKTsK
QEAgLTQ5OCw3ICs0OTEsNyBAQCBzdGF0aWMgZG91YmxlIHBhcnNlRmxvYXQoY29uc3QgVVN0cmlu
ZyYgCiAgICAgaWYgKGRhdGEgPT0gZW5kKQogICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xp
bWl0czxkb3VibGU+OjpxdWlldF9OYU4oKTsKIAotICAgIHJldHVybiBqc1N0ckRlY2ltYWxMaXRl
cmFsPFdURjo6QWxsb3dUcmFpbGluZ0p1bms+KGRhdGEsIGVuZCk7CisgICAgcmV0dXJuIGpzU3Ry
RGVjaW1hbExpdGVyYWwoZGF0YSwgZW5kKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBnbG9iYWxGdW5jRXZhbChFeGVjU3RhdGUqIGV4ZWMpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9MaXRlcmFsUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9MaXRlcmFsUGFyc2VyLmNwcAkocmV2aXNpb24gMTEzMjc1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTGl0ZXJhbFBhcnNlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTUyOSwxNiArNTI5LDggQEAgVG9rZW5UeXBlIExpdGVyYWxQYXJzZXI8
Q2hhclR5cGU+OjpMZXhlcgogICAgIAogICAgIHRva2VuLnR5cGUgPSBUb2tOdW1iZXI7CiAgICAg
dG9rZW4uZW5kID0gbV9wdHI7Ci0gICAgVmVjdG9yPGNoYXIsIDY0PiBidWZmZXIodG9rZW4uZW5k
IC0gdG9rZW4uc3RhcnQgKyAxKTsKLSAgICBpbnQgaTsKLSAgICBmb3IgKGkgPSAwOyBpIDwgdG9r
ZW4uZW5kIC0gdG9rZW4uc3RhcnQ7IGkrKykgewotICAgICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8
Y2hhcj4odG9rZW4uc3RhcnRbaV0pID09IHRva2VuLnN0YXJ0W2ldKTsKLSAgICAgICAgYnVmZmVy
W2ldID0gc3RhdGljX2Nhc3Q8Y2hhcj4odG9rZW4uc3RhcnRbaV0pOwotICAgIH0KLSAgICBidWZm
ZXJbaV0gPSAwOwotICAgIGNoYXIqIGVuZDsKLSAgICB0b2tlbi5udW1iZXJUb2tlbiA9IFdURjo6
c3RydG9kPFdURjo6QWxsb3dUcmFpbGluZ0p1bmssIFdURjo6RGlzYWxsb3dUcmFpbGluZ1NwYWNl
cz4oYnVmZmVyLmRhdGEoKSwgJmVuZCk7Ci0gICAgQVNTRVJUKGJ1ZmZlci5kYXRhKCkgKyAodG9r
ZW4uZW5kIC0gdG9rZW4uc3RhcnQpID09IGVuZCk7CisgICAgc2l6ZV90IHBhcnNlZExlbmd0aDsK
KyAgICB0b2tlbi5udW1iZXJUb2tlbiA9IHBhcnNlRG91YmxlKHRva2VuLnN0YXJ0LCB0b2tlbi5l
bmQgLSB0b2tlbi5zdGFydCwgcGFyc2VkTGVuZ3RoKTsKICAgICByZXR1cm4gVG9rTnVtYmVyOwog
fQogCkluZGV4OiBTb3VyY2UvV1RGL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RG
L0NoYW5nZUxvZwkocmV2aXNpb24gMTEzMjc1KQorKysgU291cmNlL1dURi9DaGFuZ2VMb2cJKHdv
cmtpbmcgY29weSkKQEAgLTEsMyArMSw3MSBAQAorMjAxMi0wNC0wNCAgRGFyaW4gQWRsZXIgIDxk
YXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgU3RyZWFtbGluZSBzdHJ0b2QgYW5kIGZpeCBzb21l
IHJlbGF0ZWQgcHJvYmxlbXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTgyODU3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgUmVwbGFjZWQgdGhlIHN0cnRvZCBmdW5jdGlvbiB0ZW1wbGF0ZSB3aXRoIGEgcGFy
c2VEb3VibGUgZnVuY3Rpb24sIGVsaW1pbmF0aW5nCisgICAgICAgIHRoZSBmb2xsb3dpbmcgdW5u
ZWVkZWQgZmVhdHVyZXM6CisKKyAgICAgICAgLSBuZWVkIGZvciBhIHRyYWlsaW5nIG51bGwgY2hh
cmFjdGVyIGFuZCBhIGNhbGwgdG8gc3RybGVuCisgICAgICAgIC0gbmVlZGxlc3MgY29udmVyc2lv
biBvZiBzdHJpbmcgbGVuZ3RocyBmcm9tIHNpemVfdCB0byBpbnQgYW5kIGJhY2sgdGhhdCBjcmVh
dGVkCisgICAgICAgICAgdGhlIHBvc3NpYmlsaXR5IG9mIGluY29ycmVjdCB0cnVuY2F0aW9uCisg
ICAgICAgIC0gb25lIGxldmVsIG9mIGZ1bmN0aW9uIGNhbGw7IHVzZSBpbmxpbmluZyBpbnN0ZWFk
CisgICAgICAgIC0gY29uc3RydWN0aW9uIG9mIHRoZSBTdHJpbmdUb0RvdWJsZUNvbnZlcnRlciBv
YmplY3Q7IGl0IHdhcyB1c2VkIHRvIHBhc3MKKyAgICAgICAgICBhcmd1bWVudHMgdGhhdCBhcmUg
a25vd24gYXQgY29tcGlsZSB0aW1lCisgICAgICAgIC0gbW9zdCBvZiB0aGUgU3RyaW5nVG9Eb3Vi
bGVDb252ZXJ0ZXI6OlN0cmluZ1RvRG91YmxlIGZ1bmN0aW9uJ3MgYm9keTsgaXQgd2FzCisgICAg
ICAgICAgY29kZSB3ZSBkaWQgbm90IG5lZWQKKyAgICAgICAgLSBwYXJzaW5nIG9mIEluZmluaXR5
IGFuZCBOYU4gYXQgdGhlIHN0cnRvZCBsZXZlbDsgYWRkZWQgcmVjZW50bHkgd2hlbiB3ZSBtb3Zl
ZAorICAgICAgICAgIGZyb20gdGhlIG9sZCBzdHJ0b2QgdG8gdGhlIG5ldyBvbmUsIGFuZCBub3Qg
bmVlZGVkIG9yIGhlbHBmdWwgYXQgdGhpcyBsZXZlbAorICAgICAgICAtIG11bHRpcGxlIGNvcGll
cyBvZiBjb2RlIHRvIG5hcnJvdyB0byBzaW5nbGUgYnl0ZSBzdHJpbmdzOyBpbiBtYW55IGNhc2Vz
CisgICAgICAgICAgdGhpcyB3YXMgZG9uZSBldmVuIHdoZW4gc3RhcnRpbmcgd2l0aCBhbiBMQ2hh
ciBzdHJpbmcgdGhhdCBpcyBhbHJlYWR5CisgICAgICAgICAgc2luZ2xlLWJ5dGUsIG5vdyB3ZSBo
YW5kbGUgdGhpcyB3aXRoIGFuIG92ZXJsb2FkIG9mIHBhcnNlRG91YmxlCisKKyAgICAgICAgKiB3
dGYvZHRvYS5jcHA6CisgICAgICAgIFJlbW92ZWQgYSBsb25nIGNvbW1lbnQgYWJvdXQgdGhlIG9y
aWdpbmFsIHN0cnRvZCBmdW5jdGlvbiB0aGF0IG5vIGxvbmdlcgorICAgICAgICBhcHBsaWVzIHNp
bmNlIHdlIGRlbGV0ZWQgdGhhdCBmdW5jdGlvbiBsb25nIGFnby4gUmVtb3ZlZCBhIGxvdCBvZiBp
bmNsdWRlcy4KKyAgICAgICAgUmVtb3ZlZCB0aGUgc3RydG9kIGZ1bmN0aW9uIHRlbXBsYXRlcyBh
bmQgaXRzIGluc3RhbnRpYXRpb25zLCBzaW5jZSB0aGV5CisgICAgICAgIGFyZSBub3cgcmVwbGFj
ZWQgYnkgdGhlIHBhcnNlRG91YmxlIGZ1bmN0aW9uLgorICAgICAgICAoV1RGOjpJbnRlcm5hbDo6
cGFyc2VEb3VibGVGcm9tTG9uZ1N0cmluZyk6IEFkZGVkLgorICAgICAgICAqIHd0Zi9kdG9hLmg6
CisgICAgICAgIEFkZGVkIGFuIGluY2x1ZGUgb2YgQVNDSUlDVHlwZS5oIHNvIHdlIGNhbiB1c2Ug
aXNBU0NJSSBpbiBhIGZ1bmN0aW9uIGluIHRoaXMKKyAgICAgICAgaGVhZGVyLiBMZWZ0IHRoZSBo
ZXJldG9mb3JlIHVubmVlZGVkIGluY2x1ZGUgb2YgZG91YmxlLWNvbnZlcnNpb24uaCwgc2luY2Ug
d2UKKyAgICAgICAgbm93IHdhbnQgdG8gdXNlIGl0IGluIGEgZnVuY3Rpb24gaW4gdGhpcyBoZWFk
ZXIuIFJlbW92ZWQgdGhlIEFsbG93VHJhaWxpbmdKdW5rVGFnCisgICAgICAgIGFuZCBBbGxvd1Ry
YWlsaW5nU3BhY2VzVGFnIGVudW1lcmF0aW9ucyBhbmQgdGhlIHN0cnRvZCBmdW5jdGlvbiB0ZW1w
bGF0ZS4gQWRkZWQKKyAgICAgICAgbmV3IHBhcnNlRG91YmxlIGZ1bmN0aW9uLCBhbmQgaW5saW5l
IGltcGxlbWVudGF0aW9uIG9mIGl0LgorCisgICAgICAgICogd3RmL2R0b2EvZG91YmxlLWNvbnZl
cnNpb24uY2M6IFJlbW92ZWQgcXVpdGUgYSBiaXQgb2YgdW51c2VkIGNvZGUsIGhhcmRjb2RpbmcK
KyAgICAgICAgYWxsIHRoZSBTdHJpbmdUb0RvdWJsZSBmdW5jdGlvbiBhcmd1bWVudHMgdGhhdCBj
b21lIGZyb20gZGF0YSBtZW1iZXJzIHNvIGl0IGNhbgorICAgICAgICBiZSBhIG11Y2ggc21hbGxl
ciBzdGF0aWMgbWVtYmVyIGZ1bmN0aW9uLiBBbHNvIGNoYW5nZWQgdGhlIHR5cGVzIG9mIGFyZ3Vt
ZW50cworICAgICAgICBmcm9tIGludCB0byBzaXplX3QuCisgICAgICAgICogd3RmL2R0b2EvZG91
YmxlLWNvbnZlcnNpb24uaDogUmVtb3ZlZCBtb3N0IG9mIHRoZSBTdHJpbmdUb0RvdWJsZUNvbnZl
cnRlcgorICAgICAgICBjbGFzcywgbGVhdmluZyBvbmx5IHRoZSBjb252ZXJzaW9uIGZ1bmN0aW9u
IGFzIGEgc3RhdGljIG1lbWJlciBmdW5jdGlvbi4KKworICAgICAgICAqIHd0Zi90ZXh0L1N0cmlu
Z0ltcGwuY3BwOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjp0b0RvdWJsZSk6IEdvdCByaWQg
b2YgZGlkUmVhZE51bWJlci4KKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6dG9GbG9hdCk6IERp
dHRvLgorICAgICAgICAqIHd0Zi90ZXh0L1N0cmluZ0ltcGwuaDogRGl0dG8uCisgICAgICAgICog
d3RmL3RleHQvV1RGU3RyaW5nLmNwcDoKKyAgICAgICAgKFdURjo6U3RyaW5nOjp0b0RvdWJsZSk6
IEdvdCByaWQgb2YgZGlkUmVhZE51bWJlci4KKyAgICAgICAgKFdURjo6U3RyaW5nOjp0b0Zsb2F0
KTogRGl0dG8uCisgICAgICAgIChXVEY6OnRvRG91YmxlVHlwZSk6IFJld3JvdGUgdGhpcyBmdW5j
dGlvbiB0byB1c2UgcGFyc2VEb3VibGUuIE1vdmVkIHRoZSBjb2RlCisgICAgICAgIHRvIHNraXAg
bGVhZGluZyBzcGFjZXMgaGVyZSwgYmVjYXVzZSBvdGhlciBjYWxsZXJzIG9mIHBhcnNlRG91Ymxl
IGRvbid0IHdhbnQKKyAgICAgICAgdG8gZG8gdGhhdC4gUmVwdXJwb3NlZCB0aGUgY2hlY2sgZm9y
IGFuIGVtcHR5IHN0cmluZyBzbyBpdCdzIG5vdyB0aGUgc2FtZQorICAgICAgICBjb2RlIHNoYXJl
ZCBieSBhbGwgdGhlICJwYXJzZWQgbm90aGluZyIgY2FzZXMuIFJlbW92ZWQgdGhlIGNvZGUgdG8g
Y29udmVydAorICAgICAgICB0aGUgYnVmZmVyIHRvIEFTQ0lJIGZvciB0d28gcmVhc29uczogKDEp
IFdlIGRvbid0IG5lZWQgdGhhdCBjb2RlIGF0IGFsbCB3aGVuCisgICAgICAgIENoYXJUeXBlIGlz
IExDaGFyLCBhbmQgKDIpIFdlIG5vdyBoYW5kbGUgdGhpcyB0aHJvdWdoIHRoZSB0d28gb3Zlcmxv
YWRzIGZvcgorICAgICAgICB0aGUgcGFyc2VEb3VibGUgZnVuY3Rpb24uIERpc2FsbG93aW5nIHRy
YWlsaW5nIGp1bmsgaXMgbm93IGhhbmRsZWQgaGVyZSwKKyAgICAgICAgcmF0aGVyIHRoYW4gaW5z
aWRlIHBhcnNlRG91YmxlLgorICAgICAgICAoV1RGOjpjaGFyYWN0ZXJzVG9Eb3VibGUpOiBVcGRh
dGVkIGZvciBjaGFuZ2VzIHRvIHRvRG91YmxlVHlwZS4gUmVtb3ZlZCB0aGUKKyAgICAgICAgZGlk
UmVhZE51bWJlciBhcmd1bWVudC4KKyAgICAgICAgKFdURjo6Y2hhcmFjdGVyc1RvRmxvYXQpOiBE
aXR0by4gQWxzbyBhZGRlZCBvdmVybG9hZHMgdGhhdCByZXR1cm4gdGhlIHBhcnNlZAorICAgICAg
ICBsZW5ndGguIFRoZXNlIGFyZSBhIHNsaWdodGx5IG1vcmUgcG93ZXJmdWwgd2F5IHRvIGRvIHdo
YXQgZGlkUmVhZE51bWJlciB3YXMKKyAgICAgICAgdXNlZCBmb3IgYmVmb3JlLgorCisgICAgICAg
ICogd3RmL3RleHQvV1RGU3RyaW5nLmg6IEFkZGVkIGNvbW1lbnRzLCBlbGltaW5hdGVkIGRpZFJl
YWROdW1iZXIsIGFuZCBhZGRlZAorICAgICAgICBvdmVybG9hZHMgb2YgY2hhcmFjdGVyc1RvRmxv
YXQgdGhhdCByZXBsYWNlIGNoYXJhY3RlcnNUb0Zsb2F0SWdub3JpbmdKdW5rLgorCiAyMDEyLTA0
LTA0ICBDaHJpcyBSb2dlcnMgIDxjcm9nZXJzQGdvb2dsZS5jb20+CiAKICAgICAgICAgV2ViIEF1
ZGlvIHNob3VsZCB1c2UgTXV0ZXhUcnlMb2NrZXIgY2xhc3MKSW5kZXg6IFNvdXJjZS9XVEYvd3Rm
L2R0b2EuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL2R0b2EuY3BwCShyZXZpc2lv
biAxMTMyNzUpCisrKyBTb3VyY2UvV1RGL3d0Zi9kdG9hLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
Myw3ICszLDcgQEAKICAqIFRoZSBhdXRob3Igb2YgdGhpcyBzb2Z0d2FyZSBpcyBEYXZpZCBNLiBH
YXkuCiAgKgogICogQ29weXJpZ2h0IChjKSAxOTkxLCAyMDAwLCAyMDAxIGJ5IEx1Y2VudCBUZWNo
bm9sb2dpZXMuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgs
IDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDAyLCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDEwLCAyMDEyIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBh
bmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKICAqIHB1cnBvc2Ugd2l0aG91dCBm
ZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhpcyBlbnRpcmUgbm90aWNlCkBA
IC0zMiw1NSArMzIsMTQgQEAKICAqIGZpbGUuCiAgKi8KIAotLyogc3RydG9kIGZvciBJRUVFLWFy
aXRobWV0aWMgbWFjaGluZXMuCi0gKgotICogVGhpcyBzdHJ0b2QgcmV0dXJucyBhIG5lYXJlc3Qg
bWFjaGluZSBudW1iZXIgdG8gdGhlIGlucHV0IGRlY2ltYWwKLSAqIHN0cmluZyAob3Igc2V0cyBl
cnJubyB0byBFUkFOR0UpLiAgV2l0aCBJRUVFIGFyaXRobWV0aWMsIHRpZXMgYXJlCi0gKiBicm9r
ZW4gYnkgdGhlIElFRUUgcm91bmQtZXZlbiBydWxlLiAgT3RoZXJ3aXNlIHRpZXMgYXJlIGJyb2tl
biBieQotICogYmlhc2VkIHJvdW5kaW5nIChhZGQgaGFsZiBhbmQgY2hvcCkuCi0gKgotICogSW5z
cGlyZWQgbG9vc2VseSBieSBXaWxsaWFtIEQuIENsaW5nZXIncyBwYXBlciAiSG93IHRvIFJlYWQg
RmxvYXRpbmcKLSAqIFBvaW50IE51bWJlcnMgQWNjdXJhdGVseSIgW1Byb2MuIEFDTSBTSUdQTEFO
ICc5MCwgcHAuIDkyLTEwMV0uCi0gKgotICogTW9kaWZpY2F0aW9uczoKLSAqCi0gKiAgICAxLiBX
ZSBvbmx5IHJlcXVpcmUgSUVFRSBkb3VibGUtcHJlY2lzaW9uIGFyaXRobWV0aWMgKG5vdCBJRUVF
IGRvdWJsZS1leHRlbmRlZCkuCi0gKiAgICAyLiBXZSBnZXQgYnkgd2l0aCBmbG9hdGluZy1wb2lu
dCBhcml0aG1ldGljIGluIGEgY2FzZSB0aGF0Ci0gKiAgICAgICAgQ2xpbmdlciBtaXNzZWQgLS0g
d2hlbiB3ZSdyZSBjb21wdXRpbmcgZCAqIDEwXm4KLSAqICAgICAgICBmb3IgYSBzbWFsbCBpbnRl
Z2VyIGQgYW5kIHRoZSBpbnRlZ2VyIG4gaXMgbm90IHRvbwotICogICAgICAgIG11Y2ggbGFyZ2Vy
IHRoYW4gMjIgKHRoZSBtYXhpbXVtIGludGVnZXIgayBmb3Igd2hpY2gKLSAqICAgICAgICB3ZSBj
YW4gcmVwcmVzZW50IDEwXmsgZXhhY3RseSksIHdlIG1heSBiZSBhYmxlIHRvCi0gKiAgICAgICAg
Y29tcHV0ZSAoZCoxMF5rKSAqIDEwXihlLWspIHdpdGgganVzdCBvbmUgcm91bmRvZmYuCi0gKiAg
ICAzLiBSYXRoZXIgdGhhbiBhIGJpdC1hdC1hLXRpbWUgYWRqdXN0bWVudCBvZiB0aGUgYmluYXJ5
Ci0gKiAgICAgICAgcmVzdWx0IGluIHRoZSBoYXJkIGNhc2UsIHdlIHVzZSBmbG9hdGluZy1wb2lu
dAotICogICAgICAgIGFyaXRobWV0aWMgdG8gZGV0ZXJtaW5lIHRoZSBhZGp1c3RtZW50IHRvIHdp
dGhpbgotICogICAgICAgIG9uZSBiaXQ7IG9ubHkgaW4gcmVhbGx5IGhhcmQgY2FzZXMgZG8gd2Ug
bmVlZCB0bwotICogICAgICAgIGNvbXB1dGUgYSBzZWNvbmQgcmVzaWR1YWwuCi0gKiAgICA0LiBC
ZWNhdXNlIG9mIDMuLCB3ZSBkb24ndCBuZWVkIGEgbGFyZ2UgdGFibGUgb2YgcG93ZXJzIG9mIDEw
Ci0gKiAgICAgICAgZm9yIHRlbi10by1lIChqdXN0IHNvbWUgc21hbGwgdGFibGVzLCBlLmcuIG9m
IDEwXmsKLSAqICAgICAgICBmb3IgMCA8PSBrIDw9IDIyKS4KLSAqLwotCiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAjaW5jbHVkZSAiZHRvYS5oIgogCi0jaWYgSEFWRShFUlJOT19IKQotI2luY2x1ZGUg
PGVycm5vLmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDxmbG9hdC5oPgotI2luY2x1ZGUgPG1hdGguaD4K
LSNpbmNsdWRlIDxzdGRpbnQuaD4KICNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGxp
Yi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi9BbHdheXNJbmxpbmUuaD4K
LSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+
CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+
Ci0jaW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgot
I2luY2x1ZGUgPHd0Zi9kdG9hL2RvdWJsZS1jb252ZXJzaW9uLmg+CiAKICNpZiBDT01QSUxFUihN
U1ZDKQogI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQyNDQpCkBAIC02NDgsMjkgKzYwNyw2IEBA
IHN0YXRpYyBjb25zdCBkb3VibGUgdGlueXRlbnNbXSA9IHsgMWUtMTYKICNkZWZpbmUgU2NhbGVf
Qml0IDB4MTAKICNkZWZpbmUgbl9iaWd0ZW5zIDUKIAotdGVtcGxhdGU8QWxsb3dUcmFpbGluZ0p1
bmtUYWcgYWxsb3dUcmFpbGluZ0p1bmssIEFsbG93VHJhaWxpbmdTcGFjZXNUYWcgYWxsb3dUcmFp
bGluZ1NwYWNlcz4KLWRvdWJsZSBzdHJ0b2QoY29uc3QgY2hhciogczAwLCBjaGFyKiogc2UpCi17
Ci0gICAgaW50IGxlbmd0aCA9IHN0cmxlbihzMDApOwotICAgIGRvdWJsZV9jb252ZXJzaW9uOjpT
dHJpbmdUb0RvdWJsZUNvbnZlcnRlciBjb252ZXJ0ZXIoCi0gICAgICAgIChhbGxvd1RyYWlsaW5n
SnVuayA/IGRvdWJsZV9jb252ZXJzaW9uOjpTdHJpbmdUb0RvdWJsZUNvbnZlcnRlcjo6QUxMT1df
VFJBSUxJTkdfSlVOSyA6IDApIHwKLSAgICAgICAgKGFsbG93VHJhaWxpbmdTcGFjZXMgPyBkb3Vi
bGVfY29udmVyc2lvbjo6U3RyaW5nVG9Eb3VibGVDb252ZXJ0ZXI6OkFMTE9XX1RSQUlMSU5HX1NQ
QUNFUyA6IDApIHwKLSAgICAgICAgZG91YmxlX2NvbnZlcnNpb246OlN0cmluZ1RvRG91YmxlQ29u
dmVydGVyOjpBTExPV19MRUFESU5HX1NQQUNFUywKLSAgICAgICAgMC4wLCAKLSAgICAgICAgKGFs
bG93VHJhaWxpbmdKdW5rID8gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4o
KSA6IDAuMCksIAotICAgICAgICAiSW5maW5pdHkiLCAiTmFOIik7Ci0gICAgaW50IHByb2Nlc3Nl
ZENoYXJhY3RlckNvdW50ID0gMDsKLSAgICBkb3VibGUgcmVzdWx0ID0gY29udmVydGVyLlN0cmlu
Z1RvRG91YmxlKHMwMCwgbGVuZ3RoLCAmcHJvY2Vzc2VkQ2hhcmFjdGVyQ291bnQpOwotICAgIGlm
IChzZSkKLSAgICAgICAgKnNlID0gY29uc3RfY2FzdDxjaGFyKj4oczAwICsgcHJvY2Vzc2VkQ2hh
cmFjdGVyQ291bnQpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXRlbXBsYXRlIGRvdWJsZSBz
dHJ0b2Q8QWxsb3dUcmFpbGluZ0p1bmssIEFsbG93VHJhaWxpbmdTcGFjZXM+KGNvbnN0IGNoYXIq
LCBjaGFyKiopOwotdGVtcGxhdGUgZG91YmxlIHN0cnRvZDxBbGxvd1RyYWlsaW5nSnVuaywgRGlz
YWxsb3dUcmFpbGluZ1NwYWNlcz4oY29uc3QgY2hhciosIGNoYXIqKik7Ci10ZW1wbGF0ZSBkb3Vi
bGUgc3RydG9kPERpc2FsbG93VHJhaWxpbmdKdW5rLCBBbGxvd1RyYWlsaW5nU3BhY2VzPihjb25z
dCBjaGFyKiwgY2hhcioqKTsKLXRlbXBsYXRlIGRvdWJsZSBzdHJ0b2Q8RGlzYWxsb3dUcmFpbGlu
Z0p1bmssIERpc2FsbG93VHJhaWxpbmdTcGFjZXM+KGNvbnN0IGNoYXIqLCBjaGFyKiopOwotCiBz
dGF0aWMgQUxXQVlTX0lOTElORSBpbnQgcXVvcmVtKEJpZ0ludCYgYiwgQmlnSW50JiBTKQogewog
ICAgIHNpemVfdCBuOwpAQCAtMTM2Myw0ICsxMjk5LDE2IEBAIGNvbnN0IGNoYXIqIG51bWJlclRv
Rml4ZWRXaWR0aFN0cmluZyhkb3UKICAgICByZXR1cm4gYnVpbGRlci5GaW5hbGl6ZSgpOwogfQog
CituYW1lc3BhY2UgSW50ZXJuYWwgeworCitkb3VibGUgcGFyc2VEb3VibGVGcm9tTG9uZ1N0cmlu
Zyhjb25zdCBVQ2hhciogc3RyaW5nLCBzaXplX3QgbGVuZ3RoLCBzaXplX3QmIHBhcnNlZExlbmd0
aCkKK3sKKyAgICBWZWN0b3I8TENoYXI+IGNvbnZlcnNpb25CdWZmZXIobGVuZ3RoKTsKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQorICAgICAgICBjb252ZXJzaW9uQnVm
ZmVyW2ldID0gaXNBU0NJSShzdHJpbmdbaV0pID8gc3RyaW5nW2ldIDogMDsKKyAgICByZXR1cm4g
cGFyc2VEb3VibGUoY29udmVyc2lvbkJ1ZmZlci5kYXRhKCksIGxlbmd0aCwgcGFyc2VkTGVuZ3Ro
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgSW50ZXJuYWwKKwogfSAvLyBuYW1lc3BhY2UgV1RGCklu
ZGV4OiBTb3VyY2UvV1RGL3d0Zi9kdG9hLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYv
ZHRvYS5oCShyZXZpc2lvbiAxMTMyNzUpCisrKyBTb3VyY2UvV1RGL3d0Zi9kdG9hLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogIENvcHlyaWdodCAoQykgMjAwMywgMjAw
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAz
LCAyMDA4LCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCkBAIC0yMSwxMyArMjEsMTUgQEAKICNpZm5kZWYgV1RGX2R0b2FfaAogI2RlZmlu
ZSBXVEZfZHRvYV9oCiAKKyNpbmNsdWRlIDx3dGYvQVNDSUlDVHlwZS5oPgogI2luY2x1ZGUgPHd0
Zi9kdG9hL2RvdWJsZS1jb252ZXJzaW9uLmg+CiAjaW5jbHVkZSA8d3RmL3VuaWNvZGUvVW5pY29k
ZS5oPgogCiBuYW1lc3BhY2UgV1RGIHsKKwogY2xhc3MgTXV0ZXg7CiAKLWV4dGVybiBXVEY6Ok11
dGV4KiBzX2R0b2FQNU11dGV4OworZXh0ZXJuIE11dGV4KiBzX2R0b2FQNU11dGV4OwogCiB0eXBl
ZGVmIGNoYXIgRHRvYUJ1ZmZlcls4MF07CiAKQEAgLTM1LDIyICszNywzOCBAQCBXVEZfRVhQT1JU
X1BSSVZBVEUgdm9pZCBkdG9hKER0b2FCdWZmZXIgCiBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBk
dG9hUm91bmRTRihEdG9hQnVmZmVyIHJlc3VsdCwgZG91YmxlIGRkLCBpbnQgbmRpZ2l0cywgYm9v
bCYgc2lnbiwgaW50JiBleHBvbmVudCwgdW5zaWduZWQmIHByZWNpc2lvbik7CiBXVEZfRVhQT1JU
X1BSSVZBVEUgdm9pZCBkdG9hUm91bmREUChEdG9hQnVmZmVyIHJlc3VsdCwgZG91YmxlIGRkLCBp
bnQgbmRpZ2l0cywgYm9vbCYgc2lnbiwgaW50JiBleHBvbmVudCwgdW5zaWduZWQmIHByZWNpc2lv
bik7CiAKLWVudW0gQWxsb3dUcmFpbGluZ0p1bmtUYWcgeyBEaXNhbGxvd1RyYWlsaW5nSnVuayA9
IDAsIEFsbG93VHJhaWxpbmdKdW5rIH07Ci1lbnVtIEFsbG93VHJhaWxpbmdTcGFjZXNUYWcgeyBE
aXNhbGxvd1RyYWlsaW5nU3BhY2VzID0gMCwgQWxsb3dUcmFpbGluZ1NwYWNlcyB9OwotCi0vLyBz
MDA6IGlucHV0IHN0cmluZy4gTXVzdCBub3QgYmUgMCBhbmQgbXVzdCBiZSB0ZXJtaW5hdGVkIGJ5
IDAuCi0vLyBzZTogKnNlIHdpbGwgaGF2ZSB0aGUgbGFzdCBjb25zdW1lZCBjaGFyYWN0ZXIgcG9z
aXRpb24gKyAxLgotdGVtcGxhdGU8QWxsb3dUcmFpbGluZ0p1bmtUYWcgYWxsb3dUcmFpbGluZ0p1
bmssIEFsbG93VHJhaWxpbmdTcGFjZXNUYWcgYWxsb3dUcmFpbGluZ1NwYWNlcz4KLWRvdWJsZSBz
dHJ0b2QoY29uc3QgY2hhciogczAwLCBjaGFyKiogc2UpOwotCiAvLyBTaXplID0gODAgZm9yIHNp
emVvZihEdG9hQnVmZmVyKSArIHNvbWUgc2lnbiBiaXRzLCBkZWNpbWFsIHBvaW50LCAnZScsIGV4
cG9uZW50IGRpZ2l0cy4KIGNvbnN0IHVuc2lnbmVkIE51bWJlclRvU3RyaW5nQnVmZmVyTGVuZ3Ro
ID0gOTY7CiB0eXBlZGVmIGNoYXIgTnVtYmVyVG9TdHJpbmdCdWZmZXJbTnVtYmVyVG9TdHJpbmdC
dWZmZXJMZW5ndGhdOwogdHlwZWRlZiBVQ2hhciBOdW1iZXJUb1VTdHJpbmdCdWZmZXJbTnVtYmVy
VG9TdHJpbmdCdWZmZXJMZW5ndGhdOworCiBXVEZfRVhQT1JUX1BSSVZBVEUgY29uc3QgY2hhciog
bnVtYmVyVG9TdHJpbmcoZG91YmxlLCBOdW1iZXJUb1N0cmluZ0J1ZmZlcik7CiBjb25zdCBjaGFy
KiBudW1iZXJUb0ZpeGVkUHJlY2lzaW9uU3RyaW5nKGRvdWJsZSwgdW5zaWduZWQgc2lnbmlmaWNh
bnRGaWd1cmVzLCBOdW1iZXJUb1N0cmluZ0J1ZmZlciwgYm9vbCB0cnVuY2F0ZVRyYWlsaW5nWmVy
b3MgPSBmYWxzZSk7CiBjb25zdCBjaGFyKiBudW1iZXJUb0ZpeGVkV2lkdGhTdHJpbmcoZG91Ymxl
LCB1bnNpZ25lZCBkZWNpbWFsUGxhY2VzLCBOdW1iZXJUb1N0cmluZ0J1ZmZlcik7CiAKK2RvdWJs
ZSBwYXJzZURvdWJsZShjb25zdCBMQ2hhciogc3RyaW5nLCBzaXplX3QgbGVuZ3RoLCBzaXplX3Qm
IHBhcnNlZExlbmd0aCk7Citkb3VibGUgcGFyc2VEb3VibGUoY29uc3QgVUNoYXIqIHN0cmluZywg
c2l6ZV90IGxlbmd0aCwgc2l6ZV90JiBwYXJzZWRMZW5ndGgpOworCituYW1lc3BhY2UgSW50ZXJu
YWwgeworICAgIFdURl9FWFBPUlRfUFJJVkFURSBkb3VibGUgcGFyc2VEb3VibGVGcm9tTG9uZ1N0
cmluZyhjb25zdCBVQ2hhciogc3RyaW5nLCBzaXplX3QgbGVuZ3RoLCBzaXplX3QmIHBhcnNlZExl
bmd0aCk7Cit9CisKK2lubGluZSBkb3VibGUgcGFyc2VEb3VibGUoY29uc3QgTENoYXIqIHN0cmlu
Zywgc2l6ZV90IGxlbmd0aCwgc2l6ZV90JiBwYXJzZWRMZW5ndGgpCit7CisgICAgcmV0dXJuIGRv
dWJsZV9jb252ZXJzaW9uOjpTdHJpbmdUb0RvdWJsZUNvbnZlcnRlcjo6U3RyaW5nVG9Eb3VibGUo
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oc3RyaW5nKSwgbGVuZ3RoLCAmcGFyc2VkTGVu
Z3RoKTsKK30KKworaW5saW5lIGRvdWJsZSBwYXJzZURvdWJsZShjb25zdCBVQ2hhciogc3RyaW5n
LCBzaXplX3QgbGVuZ3RoLCBzaXplX3QmIHBhcnNlZExlbmd0aCkKK3sKKyAgICBjb25zdCBzaXpl
X3QgY29udmVyc2lvbkJ1ZmZlclNpemUgPSA2NDsKKyAgICBpZiAobGVuZ3RoID4gY29udmVyc2lv
bkJ1ZmZlclNpemUpCisgICAgICAgIHJldHVybiBJbnRlcm5hbDo6cGFyc2VEb3VibGVGcm9tTG9u
Z1N0cmluZyhzdHJpbmcsIGxlbmd0aCwgcGFyc2VkTGVuZ3RoKTsKKyAgICBMQ2hhciBjb252ZXJz
aW9uQnVmZmVyW2NvbnZlcnNpb25CdWZmZXJTaXplXTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8
IHN0YXRpY19jYXN0PGludD4obGVuZ3RoKTsgKytpKQorICAgICAgICBjb252ZXJzaW9uQnVmZmVy
W2ldID0gaXNBU0NJSShzdHJpbmdbaV0pID8gc3RyaW5nW2ldIDogMDsKKyAgICByZXR1cm4gcGFy
c2VEb3VibGUoY29udmVyc2lvbkJ1ZmZlciwgbGVuZ3RoLCBwYXJzZWRMZW5ndGgpOworfQorICAg
IAogfSAvLyBuYW1lc3BhY2UgV1RGCiAKIHVzaW5nIFdURjo6TnVtYmVyVG9TdHJpbmdCdWZmZXI7
CkBAIC01OCw1ICs3Niw2IEBAIHVzaW5nIFdURjo6TnVtYmVyVG9VU3RyaW5nQnVmZmVyOwogdXNp
bmcgV1RGOjpudW1iZXJUb1N0cmluZzsKIHVzaW5nIFdURjo6bnVtYmVyVG9GaXhlZFByZWNpc2lv
blN0cmluZzsKIHVzaW5nIFdURjo6bnVtYmVyVG9GaXhlZFdpZHRoU3RyaW5nOwordXNpbmcgV1RG
OjpwYXJzZURvdWJsZTsKIAogI2VuZGlmIC8vIFdURl9kdG9hX2gKSW5kZXg6IFNvdXJjZS9XVEYv
d3RmL2R0b2EvZG91YmxlLWNvbnZlcnNpb24uY2MKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93
dGYvZHRvYS9kb3VibGUtY29udmVyc2lvbi5jYwkocmV2aXNpb24gMTEzMjc1KQorKysgU291cmNl
L1dURi93dGYvZHRvYS9kb3VibGUtY29udmVyc2lvbi5jYwkod29ya2luZyBjb3B5KQpAQCAtNDA5
LDIxICs0MDksNiBAQCBuYW1lc3BhY2UgZG91YmxlX2NvbnZlcnNpb24gewogICAgIH0KICAgICAK
ICAgICAKLSAgICAvLyBDb25zdW1lcyB0aGUgZ2l2ZW4gc3Vic3RyaW5nIGZyb20gdGhlIGl0ZXJh
dG9yLgotICAgIC8vIFJldHVybnMgZmFsc2UsIGlmIHRoZSBzdWJzdHJpbmcgZG9lcyBub3QgbWF0
Y2guCi0gICAgc3RhdGljIGJvb2wgQ29uc3VtZVN1YlN0cmluZyhjb25zdCBjaGFyKiogY3VycmVu
dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGVuZCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHN1YnN0cmluZykgewot
ICAgICAgICBBU1NFUlQoKipjdXJyZW50ID09ICpzdWJzdHJpbmcpOwotICAgICAgICBmb3IgKHN1
YnN0cmluZysrOyAqc3Vic3RyaW5nICE9ICdcMCc7IHN1YnN0cmluZysrKSB7Ci0gICAgICAgICAg
ICArKypjdXJyZW50OwotICAgICAgICAgICAgaWYgKCpjdXJyZW50ID09IGVuZCB8fCAqKmN1cnJl
bnQgIT0gKnN1YnN0cmluZykgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgICsrKmN1
cnJlbnQ7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICAKLSAgICAKICAgICAvLyBN
YXhpbXVtIG51bWJlciBvZiBzaWduaWZpY2FudCBkaWdpdHMgaW4gZGVjaW1hbCByZXByZXNlbnRh
dGlvbi4KICAgICAvLyBUaGUgbG9uZ2VzdCBwb3NzaWJsZSBkb3VibGUgaW4gZGVjaW1hbCByZXBy
ZXNlbnRhdGlvbiBpcwogICAgIC8vICgyXjUzIC0gMSkgKiAyIF4gLTEwNzQgdGhhdCBpcyAoMiBe
IDUzIC0gMSkgKiA1IF4gMTA3NCAvIDEwIF4gMTA3NApAQCAtNDM0LDE3NSArNDE5LDI4IEBAIG5h
bWVzcGFjZSBkb3VibGVfY29udmVyc2lvbiB7CiAgICAgY29uc3QgaW50IGtNYXhTaWduaWZpY2Fu
dERpZ2l0cyA9IDc3MjsKICAgICAKICAgICAKLSAgICAvLyBSZXR1cm5zIHRydWUgaWYgd2hpdGVz
cGFjZSBmb3VuZCBhbmQgZmFsc2UgaWYgdGhlIGVuZCBoYXMgcmVhY2hlZC4KLSAgICBzdGF0aWMg
aW5saW5lIGJvb2wgQWR2YW5jZVRvTm9uc3BhY2UoY29uc3QgY2hhcioqIGN1cnJlbnQsIGNvbnN0
IGNoYXIqIGVuZCkgewotICAgICAgICB3aGlsZSAoKmN1cnJlbnQgIT0gZW5kKSB7Ci0gICAgICAg
ICAgICBzd2l0Y2goKipjdXJyZW50KSB7Ci0gICAgICAgICAgICBjYXNlICcgJzoKLSAgICAgICAg
ICAgIGNhc2UgJ1x0JzoKLSAgICAgICAgICAgIGNhc2UgJ1x2JzoKLSAgICAgICAgICAgIGNhc2Ug
J1xyJzoKLSAgICAgICAgICAgIGNhc2UgJ1xmJzoKLSAgICAgICAgICAgIGNhc2UgJ1xuJzogKysq
Y3VycmVudDsgY29udGludWU7Ci0gICAgICAgICAgICBkZWZhdWx0OiByZXR1cm4gdHJ1ZTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAg
IAotICAgIAotICAgIHN0YXRpYyBib29sIGlzRGlnaXQoaW50IHgsIGludCByYWRpeCkgewotICAg
ICAgICByZXR1cm4gKHggPj0gJzAnICYmIHggPD0gJzknICYmIHggPCAnMCcgKyByYWRpeCkKLSAg
ICAgICAgfHwgKHJhZGl4ID4gMTAgJiYgeCA+PSAnYScgJiYgeCA8ICdhJyArIHJhZGl4IC0gMTAp
Ci0gICAgICAgIHx8IChyYWRpeCA+IDEwICYmIHggPj0gJ0EnICYmIHggPCAnQScgKyByYWRpeCAt
IDEwKTsKLSAgICB9Ci0gICAgCi0gICAgCiAgICAgc3RhdGljIGRvdWJsZSBTaWduZWRaZXJvKGJv
b2wgc2lnbikgewogICAgICAgICByZXR1cm4gc2lnbiA/IC0wLjAgOiAwLjA7CiAgICAgfQogICAg
IAogICAgIAotICAgIC8vIFBhcnNpbmcgaW50ZWdlcnMgd2l0aCByYWRpeCAyLCA0LCA4LCAxNiwg
MzIuIEFzc3VtZXMgY3VycmVudCAhPSBlbmQuCi0gICAgdGVtcGxhdGUgPGludCByYWRpeF9sb2df
Mj4KLSAgICBzdGF0aWMgZG91YmxlIFJhZGl4U3RyaW5nVG9Eb3VibGUoY29uc3QgY2hhciogY3Vy
cmVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciog
ZW5kLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHNpZ24sCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYWxsb3dfdHJhaWxpbmdf
anVuaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIGp1bmtf
c3RyaW5nX3ZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBjaGFyKiogdHJhaWxpbmdfcG9pbnRlcikgewotICAgICAgICBBU1NFUlQoY3VycmVudCAhPSBl
bmQpOwotICAgICAgICAKLSAgICAgICAgLy8gU2tpcCBsZWFkaW5nIDBzLgotICAgICAgICB3aGls
ZSAoKmN1cnJlbnQgPT0gJzAnKSB7Ci0gICAgICAgICAgICArK2N1cnJlbnQ7Ci0gICAgICAgICAg
ICBpZiAoY3VycmVudCA9PSBlbmQpIHsKLSAgICAgICAgICAgICAgICAqdHJhaWxpbmdfcG9pbnRl
ciA9IGVuZDsKLSAgICAgICAgICAgICAgICByZXR1cm4gU2lnbmVkWmVybyhzaWduKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaW50NjRfdCBudW1iZXIgPSAw
OwotICAgICAgICBpbnQgZXhwb25lbnQgPSAwOwotICAgICAgICBjb25zdCBpbnQgcmFkaXggPSAo
MSA8PCByYWRpeF9sb2dfMik7Ci0gICAgICAgIAotICAgICAgICBkbyB7Ci0gICAgICAgICAgICBp
bnQgZGlnaXQ7Ci0gICAgICAgICAgICBpZiAoKmN1cnJlbnQgPj0gJzAnICYmICpjdXJyZW50IDw9
ICc5JyAmJiAqY3VycmVudCA8ICcwJyArIHJhZGl4KSB7Ci0gICAgICAgICAgICAgICAgZGlnaXQg
PSBzdGF0aWNfY2FzdDxjaGFyPigqY3VycmVudCkgLSAnMCc7Ci0gICAgICAgICAgICB9IGVsc2Ug
aWYgKHJhZGl4ID4gMTAgJiYgKmN1cnJlbnQgPj0gJ2EnICYmICpjdXJyZW50IDwgJ2EnICsgcmFk
aXggLSAxMCkgewotICAgICAgICAgICAgICAgIGRpZ2l0ID0gc3RhdGljX2Nhc3Q8Y2hhcj4oKmN1
cnJlbnQpIC0gJ2EnICsgMTA7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHJhZGl4ID4gMTAgJiYg
KmN1cnJlbnQgPj0gJ0EnICYmICpjdXJyZW50IDwgJ0EnICsgcmFkaXggLSAxMCkgewotICAgICAg
ICAgICAgICAgIGRpZ2l0ID0gc3RhdGljX2Nhc3Q8Y2hhcj4oKmN1cnJlbnQpIC0gJ0EnICsgMTA7
Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGlmIChhbGxvd190cmFpbGlu
Z19qdW5rIHx8ICFBZHZhbmNlVG9Ob25zcGFjZSgmY3VycmVudCwgZW5kKSkgewotICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4ganVua19zdHJpbmdfdmFsdWU7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBudW1iZXIgPSBudW1iZXIgKiBy
YWRpeCArIGRpZ2l0OwotICAgICAgICAgICAgaW50IG92ZXJmbG93ID0gc3RhdGljX2Nhc3Q8aW50
PihudW1iZXIgPj4gNTMpOwotICAgICAgICAgICAgaWYgKG92ZXJmbG93ICE9IDApIHsKLSAgICAg
ICAgICAgICAgICAvLyBPdmVyZmxvdyBvY2N1cnJlZC4gTmVlZCB0byBkZXRlcm1pbmUgd2hpY2gg
ZGlyZWN0aW9uIHRvIHJvdW5kIHRoZQotICAgICAgICAgICAgICAgIC8vIHJlc3VsdC4KLSAgICAg
ICAgICAgICAgICBpbnQgb3ZlcmZsb3dfYml0c19jb3VudCA9IDE7Ci0gICAgICAgICAgICAgICAg
d2hpbGUgKG92ZXJmbG93ID4gMSkgewotICAgICAgICAgICAgICAgICAgICBvdmVyZmxvd19iaXRz
X2NvdW50Kys7Ci0gICAgICAgICAgICAgICAgICAgIG92ZXJmbG93ID4+PSAxOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpbnQgZHJvcHBlZF9i
aXRzX21hc2sgPSAoKDEgPDwgb3ZlcmZsb3dfYml0c19jb3VudCkgLSAxKTsKLSAgICAgICAgICAg
ICAgICBpbnQgZHJvcHBlZF9iaXRzID0gc3RhdGljX2Nhc3Q8aW50PihudW1iZXIpICYgZHJvcHBl
ZF9iaXRzX21hc2s7Ci0gICAgICAgICAgICAgICAgbnVtYmVyID4+PSBvdmVyZmxvd19iaXRzX2Nv
dW50OwotICAgICAgICAgICAgICAgIGV4cG9uZW50ID0gb3ZlcmZsb3dfYml0c19jb3VudDsKLSAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBib29sIHplcm9fdGFpbCA9IHRydWU7Ci0g
ICAgICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsKLSAgICAgICAgICAgICAgICAgICAgKytjdXJy
ZW50OwotICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudCA9PSBlbmQgfHwgIWlzRGlnaXQo
KmN1cnJlbnQsIHJhZGl4KSkgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIHplcm9fdGFpbCA9
IHplcm9fdGFpbCAmJiAqY3VycmVudCA9PSAnMCc7Ci0gICAgICAgICAgICAgICAgICAgIGV4cG9u
ZW50ICs9IHJhZGl4X2xvZ18yOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICBpZiAoIWFsbG93X3RyYWlsaW5nX2p1bmsgJiYgQWR2YW5jZVRvTm9u
c3BhY2UoJmN1cnJlbnQsIGVuZCkpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGp1bmtf
c3RyaW5nX3ZhbHVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgICAgICBpbnQgbWlkZGxlX3ZhbHVlID0gKDEgPDwgKG92ZXJmbG93X2JpdHNfY291bnQg
LSAxKSk7Ci0gICAgICAgICAgICAgICAgaWYgKGRyb3BwZWRfYml0cyA+IG1pZGRsZV92YWx1ZSkg
ewotICAgICAgICAgICAgICAgICAgICBudW1iZXIrKzsgIC8vIFJvdW5kaW5nIHVwLgotICAgICAg
ICAgICAgICAgIH0gZWxzZSBpZiAoZHJvcHBlZF9iaXRzID09IG1pZGRsZV92YWx1ZSkgewotICAg
ICAgICAgICAgICAgICAgICAvLyBSb3VuZGluZyB0byBldmVuIHRvIGNvbnNpc3RlbmN5IHdpdGgg
ZGVjaW1hbHM6IGhhbGYtd2F5IGNhc2Ugcm91bmRzCi0gICAgICAgICAgICAgICAgICAgIC8vIHVw
IGlmIHNpZ25pZmljYW50IHBhcnQgaXMgb2RkIGFuZCBkb3duIG90aGVyd2lzZS4KLSAgICAgICAg
ICAgICAgICAgICAgaWYgKChudW1iZXIgJiAxKSAhPSAwIHx8ICF6ZXJvX3RhaWwpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIG51bWJlcisrOyAgLy8gUm91bmRpbmcgdXAuCi0gICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICAgICAgLy8gUm91bmRpbmcgdXAgbWF5IGNhdXNlIG92ZXJmbG93LgotICAgICAgICAgICAg
ICAgIGlmICgobnVtYmVyICYgKChpbnQ2NF90KTEgPDwgNTMpKSAhPSAwKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGV4cG9uZW50Kys7Ci0gICAgICAgICAgICAgICAgICAgIG51bWJlciA+Pj0gMTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICArK2N1cnJlbnQ7Ci0gICAgICAgIH0gd2hpbGUgKGN1cnJlbnQgIT0gZW5k
KTsKLSAgICAgICAgCi0gICAgICAgIEFTU0VSVChudW1iZXIgPCAoKGludDY0X3QpMSA8PCA1Mykp
OwotICAgICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8aW50NjRfdD4oc3RhdGljX2Nhc3Q8ZG91Ymxl
PihudW1iZXIpKSA9PSBudW1iZXIpOwotICAgICAgICAKLSAgICAgICAgKnRyYWlsaW5nX3BvaW50
ZXIgPSBjdXJyZW50OwotICAgICAgICAKLSAgICAgICAgaWYgKGV4cG9uZW50ID09IDApIHsKLSAg
ICAgICAgICAgIGlmIChzaWduKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG51bWJlciA9PSAwKSBy
ZXR1cm4gLTAuMDsKLSAgICAgICAgICAgICAgICBudW1iZXIgPSAtbnVtYmVyOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGRvdWJsZT4obnVtYmVyKTsKLSAg
ICAgICAgfQotICAgICAgICAKLSAgICAgICAgQVNTRVJUKG51bWJlciAhPSAwKTsKLSAgICAgICAg
cmV0dXJuIERvdWJsZShEaXlGcChudW1iZXIsIGV4cG9uZW50KSkudmFsdWUoKTsKLSAgICB9Ci0g
ICAgCi0gICAgCiAgICAgZG91YmxlIFN0cmluZ1RvRG91YmxlQ29udmVydGVyOjpTdHJpbmdUb0Rv
dWJsZSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IGNoYXIqIGlucHV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IGxlbmd0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCogcHJvY2Vzc2VkX2NoYXJhY3RlcnNfY291bnQpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVf
dCBsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzaXplX3QqIHByb2Nlc3NlZF9jaGFyYWN0ZXJzX2NvdW50KSB7CiAgICAgICAgIGNvbnN0
IGNoYXIqIGN1cnJlbnQgPSBpbnB1dDsKICAgICAgICAgY29uc3QgY2hhciogZW5kID0gaW5wdXQg
KyBsZW5ndGg7CiAgICAgICAgIAogICAgICAgICAqcHJvY2Vzc2VkX2NoYXJhY3RlcnNfY291bnQg
PSAwOwogICAgICAgICAKLSAgICAgICAgY29uc3QgYm9vbCBhbGxvd190cmFpbGluZ19qdW5rID0g
KGZsYWdzXyAmIEFMTE9XX1RSQUlMSU5HX0pVTkspICE9IDA7Ci0gICAgICAgIGNvbnN0IGJvb2wg
YWxsb3dfbGVhZGluZ19zcGFjZXMgPSAoZmxhZ3NfICYgQUxMT1dfTEVBRElOR19TUEFDRVMpICE9
IDA7Ci0gICAgICAgIGNvbnN0IGJvb2wgYWxsb3dfdHJhaWxpbmdfc3BhY2VzID0gKGZsYWdzXyAm
IEFMTE9XX1RSQUlMSU5HX1NQQUNFUykgIT0gMDsKLSAgICAgICAgY29uc3QgYm9vbCBhbGxvd19z
cGFjZXNfYWZ0ZXJfc2lnbiA9IChmbGFnc18gJiBBTExPV19TUEFDRVNfQUZURVJfU0lHTikgIT0g
MDsKLSAgICAgICAgCiAgICAgICAgIC8vIFRvIG1ha2Ugc3VyZSB0aGF0IGl0ZXJhdG9yIGRlcmVm
ZXJlbmNpbmcgaXMgdmFsaWQgdGhlIGZvbGxvd2luZwogICAgICAgICAvLyBjb252ZW50aW9uIGlz
IHVzZWQ6CiAgICAgICAgIC8vIDEuIEVhY2ggJysrY3VycmVudCcgc3RhdGVtZW50IGlzIGZvbGxv
d2VkIGJ5IGNoZWNrIGZvciBlcXVhbGl0eSB0byAnZW5kJy4KLSAgICAgICAgLy8gMi4gSWYgQWR2
YW5jZVRvTm9uc3BhY2UgcmV0dXJuZWQgZmFsc2UgdGhlbiBjdXJyZW50ID09IGVuZC4KICAgICAg
ICAgLy8gMy4gSWYgJ2N1cnJlbnQnIGJlY29tZXMgZXF1YWwgdG8gJ2VuZCcgdGhlIGZ1bmN0aW9u
IHJldHVybnMgb3IgZ29lcyB0bwogICAgICAgICAvLyAncGFyc2luZ19kb25lJy4KICAgICAgICAg
Ly8gNC4gJ2N1cnJlbnQnIGlzIG5vdCBkZXJlZmVyZW5jZWQgYWZ0ZXIgdGhlICdwYXJzaW5nX2Rv
bmUnIGxhYmVsLgogICAgICAgICAvLyA1LiBDb2RlIGJlZm9yZSAncGFyc2luZ19kb25lJyBtYXkg
cmVseSBvbiAnY3VycmVudCAhPSBlbmQnLgotICAgICAgICBpZiAoY3VycmVudCA9PSBlbmQpIHJl
dHVybiBlbXB0eV9zdHJpbmdfdmFsdWVfOwotICAgICAgICAKLSAgICAgICAgaWYgKGFsbG93X2xl
YWRpbmdfc3BhY2VzIHx8IGFsbG93X3RyYWlsaW5nX3NwYWNlcykgewotICAgICAgICAgICAgaWYg
KCFBZHZhbmNlVG9Ob25zcGFjZSgmY3VycmVudCwgZW5kKSkgewotICAgICAgICAgICAgICAgICpw
cm9jZXNzZWRfY2hhcmFjdGVyc19jb3VudCA9IGN1cnJlbnQgLSBpbnB1dDsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gZW1wdHlfc3RyaW5nX3ZhbHVlXzsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGlmICghYWxsb3dfbGVhZGluZ19zcGFjZXMgJiYgKGlucHV0ICE9IGN1cnJlbnQpKSB7Ci0g
ICAgICAgICAgICAgICAgLy8gTm8gbGVhZGluZyBzcGFjZXMgYWxsb3dlZCwgYnV0IEFkdmFuY2VU
b05vbnNwYWNlIG1vdmVkIGZvcndhcmQuCi0gICAgICAgICAgICAgICAgcmV0dXJuIGp1bmtfc3Ry
aW5nX3ZhbHVlXzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorICAgICAgICBpZiAoY3VycmVu
dCA9PSBlbmQpIHJldHVybiAwLjA7CiAgICAgICAgIAogICAgICAgICAvLyBUaGUgbG9uZ2VzdCBm
b3JtIG9mIHNpbXBsaWZpZWQgbnVtYmVyIGlzOiAiLTxzaWduaWZpY2FudCBkaWdpdHM+LjFlWFhY
XDAiLgogICAgICAgICBjb25zdCBpbnQga0J1ZmZlclNpemUgPSBrTWF4U2lnbmlmaWNhbnREaWdp
dHMgKyAxMDsKQEAgLTYyMCw1MSArNDU4LDcgQEAgbmFtZXNwYWNlIGRvdWJsZV9jb252ZXJzaW9u
IHsKICAgICAgICAgaWYgKCpjdXJyZW50ID09ICcrJyB8fCAqY3VycmVudCA9PSAnLScpIHsKICAg
ICAgICAgICAgIHNpZ24gPSAoKmN1cnJlbnQgPT0gJy0nKTsKICAgICAgICAgICAgICsrY3VycmVu
dDsKLSAgICAgICAgICAgIGNvbnN0IGNoYXIqIG5leHRfbm9uX3NwYWNlID0gY3VycmVudDsKLSAg
ICAgICAgICAgIC8vIFNraXAgZm9sbG93aW5nIHNwYWNlcyAoaWYgYWxsb3dlZCkuCi0gICAgICAg
ICAgICBpZiAoIUFkdmFuY2VUb05vbnNwYWNlKCZuZXh0X25vbl9zcGFjZSwgZW5kKSkgcmV0dXJu
IGp1bmtfc3RyaW5nX3ZhbHVlXzsKLSAgICAgICAgICAgIGlmICghYWxsb3dfc3BhY2VzX2FmdGVy
X3NpZ24gJiYgKGN1cnJlbnQgIT0gbmV4dF9ub25fc3BhY2UpKSB7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIGp1bmtfc3RyaW5nX3ZhbHVlXzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGN1
cnJlbnQgPSBuZXh0X25vbl9zcGFjZTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYg
KGluZmluaXR5X3N5bWJvbF8gIT0gTlVMTCkgewotICAgICAgICAgICAgaWYgKCpjdXJyZW50ID09
IGluZmluaXR5X3N5bWJvbF9bMF0pIHsKLSAgICAgICAgICAgICAgICBpZiAoIUNvbnN1bWVTdWJT
dHJpbmcoJmN1cnJlbnQsIGVuZCwgaW5maW5pdHlfc3ltYm9sXykpIHsKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGp1bmtfc3RyaW5nX3ZhbHVlXzsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKCEoYWxsb3dfdHJhaWxpbmdfc3BhY2Vz
IHx8IGFsbG93X3RyYWlsaW5nX2p1bmspICYmIChjdXJyZW50ICE9IGVuZCkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGp1bmtfc3RyaW5nX3ZhbHVlXzsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgaWYgKCFhbGxvd190cmFpbGluZ19qdW5rICYmIEFkdmFuY2VUb05v
bnNwYWNlKCZjdXJyZW50LCBlbmQpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBqdW5r
X3N0cmluZ192YWx1ZV87Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgIEFTU0VSVChidWZmZXJfcG9zID09IDApOwotICAgICAgICAgICAgICAgICpw
cm9jZXNzZWRfY2hhcmFjdGVyc19jb3VudCA9IGN1cnJlbnQgLSBpbnB1dDsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gc2lnbiA/IC1Eb3VibGU6OkluZmluaXR5KCkgOiBEb3VibGU6OkluZmluaXR5
KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChuYW5f
c3ltYm9sXyAhPSBOVUxMKSB7Ci0gICAgICAgICAgICBpZiAoKmN1cnJlbnQgPT0gbmFuX3N5bWJv
bF9bMF0pIHsKLSAgICAgICAgICAgICAgICBpZiAoIUNvbnN1bWVTdWJTdHJpbmcoJmN1cnJlbnQs
IGVuZCwgbmFuX3N5bWJvbF8pKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBqdW5rX3N0
cmluZ192YWx1ZV87Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgICAgIGlmICghKGFsbG93X3RyYWlsaW5nX3NwYWNlcyB8fCBhbGxvd190cmFpbGluZ19q
dW5rKSAmJiAoY3VycmVudCAhPSBlbmQpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBq
dW5rX3N0cmluZ192YWx1ZV87Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlm
ICghYWxsb3dfdHJhaWxpbmdfanVuayAmJiBBZHZhbmNlVG9Ob25zcGFjZSgmY3VycmVudCwgZW5k
KSkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4ganVua19zdHJpbmdfdmFsdWVfOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBBU1NFUlQo
YnVmZmVyX3BvcyA9PSAwKTsKLSAgICAgICAgICAgICAgICAqcHJvY2Vzc2VkX2NoYXJhY3RlcnNf
Y291bnQgPSBjdXJyZW50IC0gaW5wdXQ7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHNpZ24gPyAt
RG91YmxlOjpOYU4oKSA6IERvdWJsZTo6TmFOKCk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAg
ICBpZiAoY3VycmVudCA9PSBlbmQpIHJldHVybiAwLjA7CiAgICAgICAgIH0KICAgICAgICAgCiAg
ICAgICAgIGJvb2wgbGVhZGluZ196ZXJvID0gZmFsc2U7CkBAIC02NzcsMjcgKzQ3MSw2IEBAIG5h
bWVzcGFjZSBkb3VibGVfY29udmVyc2lvbiB7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGxl
YWRpbmdfemVybyA9IHRydWU7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIEl0IGNvdWxk
IGJlIGhleGFkZWNpbWFsIHZhbHVlLgotICAgICAgICAgICAgaWYgKChmbGFnc18gJiBBTExPV19I
RVgpICYmICgqY3VycmVudCA9PSAneCcgfHwgKmN1cnJlbnQgPT0gJ1gnKSkgewotICAgICAgICAg
ICAgICAgICsrY3VycmVudDsKLSAgICAgICAgICAgICAgICBpZiAoY3VycmVudCA9PSBlbmQgfHwg
IWlzRGlnaXQoKmN1cnJlbnQsIDE2KSkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4ganVu
a19zdHJpbmdfdmFsdWVfOyAgLy8gIjB4Ii4KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgY29uc3QgY2hhciogdGFpbF9wb2ludGVyID0gTlVMTDsK
LSAgICAgICAgICAgICAgICBkb3VibGUgcmVzdWx0ID0gUmFkaXhTdHJpbmdUb0RvdWJsZTw0Pihj
dXJyZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGVuZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzaWduLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGFsbG93X3RyYWlsaW5nX2p1bmssCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganVua19zdHJpbmdfdmFsdWVfLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0
YWlsX3BvaW50ZXIpOwotICAgICAgICAgICAgICAgIGlmICh0YWlsX3BvaW50ZXIgIT0gTlVMTCkg
ewotICAgICAgICAgICAgICAgICAgICBpZiAoYWxsb3dfdHJhaWxpbmdfc3BhY2VzKSBBZHZhbmNl
VG9Ob25zcGFjZSgmdGFpbF9wb2ludGVyLCBlbmQpOwotICAgICAgICAgICAgICAgICAgICAqcHJv
Y2Vzc2VkX2NoYXJhY3RlcnNfY291bnQgPSB0YWlsX3BvaW50ZXIgLSBpbnB1dDsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIAogICAgICAgICAgICAgLy8gSWdub3JlIGxlYWRpbmcgemVyb3MgaW4gdGhl
IGludGVnZXIgcGFydC4KICAgICAgICAgICAgIHdoaWxlICgqY3VycmVudCA9PSAnMCcpIHsKICAg
ICAgICAgICAgICAgICArK2N1cnJlbnQ7CkBAIC03MDgsNDMgKzQ4MSwzMSBAQCBuYW1lc3BhY2Ug
ZG91YmxlX2NvbnZlcnNpb24gewogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIAot
ICAgICAgICBib29sIG9jdGFsID0gbGVhZGluZ196ZXJvICYmIChmbGFnc18gJiBBTExPV19PQ1RB
TFMpICE9IDA7Ci0gICAgICAgIAogICAgICAgICAvLyBDb3B5IHNpZ25pZmljYW50IGRpZ2l0cyBv
ZiB0aGUgaW50ZWdlciBwYXJ0IChpZiBhbnkpIHRvIHRoZSBidWZmZXIuCiAgICAgICAgIHdoaWxl
ICgqY3VycmVudCA+PSAnMCcgJiYgKmN1cnJlbnQgPD0gJzknKSB7CiAgICAgICAgICAgICBpZiAo
c2lnbmlmaWNhbnRfZGlnaXRzIDwga01heFNpZ25pZmljYW50RGlnaXRzKSB7CiAgICAgICAgICAg
ICAgICAgQVNTRVJUKGJ1ZmZlcl9wb3MgPCBrQnVmZmVyU2l6ZSk7CiAgICAgICAgICAgICAgICAg
YnVmZmVyW2J1ZmZlcl9wb3MrK10gPSBzdGF0aWNfY2FzdDxjaGFyPigqY3VycmVudCk7CiAgICAg
ICAgICAgICAgICAgc2lnbmlmaWNhbnRfZGlnaXRzKys7Ci0gICAgICAgICAgICAgICAgLy8gV2ls
bCBsYXRlciBjaGVjayBpZiBpdCdzIGFuIG9jdGFsIGluIHRoZSBidWZmZXIuCiAgICAgICAgICAg
ICB9IGVsc2UgewogICAgICAgICAgICAgICAgIGluc2lnbmlmaWNhbnRfZGlnaXRzKys7ICAvLyBN
b3ZlIHRoZSBkaWdpdCBpbnRvIHRoZSBleHBvbmVudGlhbCBwYXJ0LgogICAgICAgICAgICAgICAg
IG5vbnplcm9fZGlnaXRfZHJvcHBlZCA9IG5vbnplcm9fZGlnaXRfZHJvcHBlZCB8fCAqY3VycmVu
dCAhPSAnMCc7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBvY3RhbCA9IG9jdGFsICYmICpj
dXJyZW50IDwgJzgnOwogICAgICAgICAgICAgKytjdXJyZW50OwogICAgICAgICAgICAgaWYgKGN1
cnJlbnQgPT0gZW5kKSBnb3RvIHBhcnNpbmdfZG9uZTsKICAgICAgICAgfQogICAgICAgICAKLSAg
ICAgICAgaWYgKHNpZ25pZmljYW50X2RpZ2l0cyA9PSAwKSB7Ci0gICAgICAgICAgICBvY3RhbCA9
IGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIAogICAgICAgICBpZiAoKmN1cnJlbnQgPT0gJy4n
KSB7Ci0gICAgICAgICAgICBpZiAob2N0YWwgJiYgIWFsbG93X3RyYWlsaW5nX2p1bmspIHJldHVy
biBqdW5rX3N0cmluZ192YWx1ZV87Ci0gICAgICAgICAgICBpZiAob2N0YWwpIGdvdG8gcGFyc2lu
Z19kb25lOwotICAgICAgICAgICAgCiAgICAgICAgICAgICArK2N1cnJlbnQ7CiAgICAgICAgICAg
ICBpZiAoY3VycmVudCA9PSBlbmQpIHsKICAgICAgICAgICAgICAgICBpZiAoc2lnbmlmaWNhbnRf
ZGlnaXRzID09IDAgJiYgIWxlYWRpbmdfemVybykgewotICAgICAgICAgICAgICAgICAgICByZXR1
cm4ganVua19zdHJpbmdfdmFsdWVfOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gMC4wOwog
ICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIGdvdG8gcGFyc2lu
Z19kb25lOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAog
ICAgICAgICAgICAgaWYgKHNpZ25pZmljYW50X2RpZ2l0cyA9PSAwKSB7Ci0gICAgICAgICAgICAg
ICAgLy8gb2N0YWwgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAvLyBJbnRlZ2VyIHBhcnQgY29u
c2lzdHMgb2YgMCBvciBpcyBhYnNlbnQuIFNpZ25pZmljYW50IGRpZ2l0cyBzdGFydCBhZnRlcgog
ICAgICAgICAgICAgICAgIC8vIGxlYWRpbmcgemVyb3MgKGlmIGFueSkuCiAgICAgICAgICAgICAg
ICAgd2hpbGUgKCpjdXJyZW50ID09ICcwJykgewpAQCAtNzc4LDQwICs1MzksMzEgQEAgbmFtZXNw
YWNlIGRvdWJsZV9jb252ZXJzaW9uIHsKICAgICAgICAgICAgIC8vIElmIGV4cG9uZW50IDwgMCB0
aGVuIHN0cmluZyB3YXMgWystXVwuMCouLi4KICAgICAgICAgICAgIC8vIElmIHNpZ25pZmljYW50
X2RpZ2l0cyAhPSAwIHRoZSBzdHJpbmcgaXMgbm90IGVxdWFsIHRvIDAuCiAgICAgICAgICAgICAv
LyBPdGhlcndpc2UgdGhlcmUgYXJlIG5vIGRpZ2l0cyBpbiB0aGUgc3RyaW5nLgotICAgICAgICAg
ICAgcmV0dXJuIGp1bmtfc3RyaW5nX3ZhbHVlXzsKKyAgICAgICAgICAgIHJldHVybiAwLjA7CiAg
ICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIC8vIFBhcnNlIGV4cG9uZW50aWFsIHBhcnQuCiAg
ICAgICAgIGlmICgqY3VycmVudCA9PSAnZScgfHwgKmN1cnJlbnQgPT0gJ0UnKSB7Ci0gICAgICAg
ICAgICBpZiAob2N0YWwgJiYgIWFsbG93X3RyYWlsaW5nX2p1bmspIHJldHVybiBqdW5rX3N0cmlu
Z192YWx1ZV87Ci0gICAgICAgICAgICBpZiAob2N0YWwpIGdvdG8gcGFyc2luZ19kb25lOwogICAg
ICAgICAgICAgKytjdXJyZW50OwogICAgICAgICAgICAgaWYgKGN1cnJlbnQgPT0gZW5kKSB7Ci0g
ICAgICAgICAgICAgICAgaWYgKGFsbG93X3RyYWlsaW5nX2p1bmspIHsKLSAgICAgICAgICAgICAg
ICAgICAgZ290byBwYXJzaW5nX2RvbmU7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGp1bmtfc3RyaW5nX3ZhbHVlXzsKLSAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgLS1jdXJyZW50OworICAgICAgICAgICAgICAgIGdvdG8gcGFy
c2luZ19kb25lOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgY2hhciBzaWduID0gJysnOwor
ICAgICAgICAgICAgY2hhciBzaWduID0gMDsKICAgICAgICAgICAgIGlmICgqY3VycmVudCA9PSAn
KycgfHwgKmN1cnJlbnQgPT0gJy0nKSB7CiAgICAgICAgICAgICAgICAgc2lnbiA9IHN0YXRpY19j
YXN0PGNoYXI+KCpjdXJyZW50KTsKICAgICAgICAgICAgICAgICArK2N1cnJlbnQ7CiAgICAgICAg
ICAgICAgICAgaWYgKGN1cnJlbnQgPT0gZW5kKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChh
bGxvd190cmFpbGluZ19qdW5rKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBnb3RvIHBhcnNp
bmdfZG9uZTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBqdW5rX3N0cmluZ192YWx1ZV87Ci0gICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgY3VycmVudCAtPSAyOworICAgICAgICAgICAgICAgICAgICBn
b3RvIHBhcnNpbmdfZG9uZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAKLSAgICAgICAgICAgIGlmIChjdXJyZW50ID09IGVuZCB8fCAqY3VycmVudCA8ICcw
JyB8fCAqY3VycmVudCA+ICc5JykgewotICAgICAgICAgICAgICAgIGlmIChhbGxvd190cmFpbGlu
Z19qdW5rKSB7Ci0gICAgICAgICAgICAgICAgICAgIGdvdG8gcGFyc2luZ19kb25lOwotICAgICAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBqdW5rX3N0cmlu
Z192YWx1ZV87Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCpjdXJyZW50IDwg
JzAnIHx8ICpjdXJyZW50ID4gJzknKSB7CisgICAgICAgICAgICAgICAgaWYgKHNpZ24pCisgICAg
ICAgICAgICAgICAgICAgIC0tY3VycmVudDsKKyAgICAgICAgICAgICAgICAtLWN1cnJlbnQ7Cisg
ICAgICAgICAgICAgICAgZ290byBwYXJzaW5nX2RvbmU7CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAKICAgICAgICAgICAgIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSBJTlRfTUFYIC8gMjsK
QEAgLTgzMiwzMyArNTg0LDkgQEAgbmFtZXNwYWNlIGRvdWJsZV9jb252ZXJzaW9uIHsKICAgICAg
ICAgICAgIGV4cG9uZW50ICs9IChzaWduID09ICctJyA/IC1udW0gOiBudW0pOwogICAgICAgICB9
CiAgICAgICAgIAotICAgICAgICBpZiAoIShhbGxvd190cmFpbGluZ19zcGFjZXMgfHwgYWxsb3df
dHJhaWxpbmdfanVuaykgJiYgKGN1cnJlbnQgIT0gZW5kKSkgewotICAgICAgICAgICAgcmV0dXJu
IGp1bmtfc3RyaW5nX3ZhbHVlXzsKLSAgICAgICAgfQotICAgICAgICBpZiAoIWFsbG93X3RyYWls
aW5nX2p1bmsgJiYgQWR2YW5jZVRvTm9uc3BhY2UoJmN1cnJlbnQsIGVuZCkpIHsKLSAgICAgICAg
ICAgIHJldHVybiBqdW5rX3N0cmluZ192YWx1ZV87Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGFs
bG93X3RyYWlsaW5nX3NwYWNlcykgewotICAgICAgICAgICAgQWR2YW5jZVRvTm9uc3BhY2UoJmN1
cnJlbnQsIGVuZCk7Ci0gICAgICAgIH0KLSAgICAgICAgCiAgICAgcGFyc2luZ19kb25lOgogICAg
ICAgICBleHBvbmVudCArPSBpbnNpZ25pZmljYW50X2RpZ2l0czsKICAgICAgICAgCi0gICAgICAg
IGlmIChvY3RhbCkgewotICAgICAgICAgICAgZG91YmxlIHJlc3VsdDsKLSAgICAgICAgICAgIGNv
bnN0IGNoYXIqIHRhaWxfcG9pbnRlciA9IE5VTEw7Ci0gICAgICAgICAgICByZXN1bHQgPSBSYWRp
eFN0cmluZ1RvRG91YmxlPDM+KGJ1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYnVmZmVyICsgYnVmZmVyX3BvcywKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2lnbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYWxsb3dfdHJhaWxpbmdfanVuaywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAganVua19zdHJpbmdfdmFsdWVfLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdGFpbF9wb2ludGVyKTsKLSAgICAg
ICAgICAgIEFTU0VSVCh0YWlsX3BvaW50ZXIgIT0gTlVMTCk7Ci0gICAgICAgICAgICAqcHJvY2Vz
c2VkX2NoYXJhY3RlcnNfY291bnQgPSBjdXJyZW50IC0gaW5wdXQ7Ci0gICAgICAgICAgICByZXR1
cm4gcmVzdWx0OwotICAgICAgICB9Ci0gICAgICAgIAogICAgICAgICBpZiAobm9uemVyb19kaWdp
dF9kcm9wcGVkKSB7CiAgICAgICAgICAgICBidWZmZXJbYnVmZmVyX3BvcysrXSA9ICcxJzsKICAg
ICAgICAgICAgIGV4cG9uZW50LS07CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9kdG9hL2RvdWJsZS1j
b252ZXJzaW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvZHRvYS9kb3VibGUtY29u
dmVyc2lvbi5oCShyZXZpc2lvbiAxMTMyNzUpCisrKyBTb3VyY2UvV1RGL3d0Zi9kdG9hL2RvdWJs
ZS1jb252ZXJzaW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2MSwxMzcgKzM2MSwxMiBAQCBuYW1l
c3BhY2UgZG91YmxlX2NvbnZlcnNpb24gewogICAgIAogICAgIGNsYXNzIFN0cmluZ1RvRG91Ymxl
Q29udmVydGVyIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIC8vIEVudW1lcmF0aW9uIGZvciBhbGxv
d2luZyBvY3RhbHMgYW5kIGlnbm9yaW5nIGp1bmsgd2hlbiBjb252ZXJ0aW5nCi0gICAgICAgIC8v
IHN0cmluZ3MgdG8gbnVtYmVycy4KLSAgICAgICAgZW51bSBGbGFncyB7Ci0gICAgICAgICAgICBO
T19GTEFHUyA9IDAsCi0gICAgICAgICAgICBBTExPV19IRVggPSAxLAotICAgICAgICAgICAgQUxM
T1dfT0NUQUxTID0gMiwKLSAgICAgICAgICAgIEFMTE9XX1RSQUlMSU5HX0pVTksgPSA0LAotICAg
ICAgICAgICAgQUxMT1dfTEVBRElOR19TUEFDRVMgPSA4LAotICAgICAgICAgICAgQUxMT1dfVFJB
SUxJTkdfU1BBQ0VTID0gMTYsCi0gICAgICAgICAgICBBTExPV19TUEFDRVNfQUZURVJfU0lHTiA9
IDMyCi0gICAgICAgIH07Ci0gICAgICAgIAotICAgICAgICAvLyBGbGFncyBzaG91bGQgYmUgYSBi
aXQtb3IgY29tYmluYXRpb24gb2YgdGhlIHBvc3NpYmxlIEZsYWdzLWVudW0uCi0gICAgICAgIC8v
ICAtIE5PX0ZMQUdTOiBubyBzcGVjaWFsIGZsYWdzLgotICAgICAgICAvLyAgLSBBTExPV19IRVg6
IHJlY29nbml6ZXMgdGhlIHByZWZpeCAiMHgiLiBIZXggbnVtYmVycyBtYXkgb25seSBiZSBpbnRl
Z2Vycy4KLSAgICAgICAgLy8gICAgICBFeDogU3RyaW5nVG9Eb3VibGUoIjB4MTIzNCIpIC0+IDQ2
NjAuMAotICAgICAgICAvLyAgICAgICAgICBJbiBTdHJpbmdUb0RvdWJsZSgiMHgxMjM0LjU2Iikg
dGhlIGNoYXJhY3RlcnMgIi41NiIgYXJlIHRyYWlsaW5nCi0gICAgICAgIC8vICAgICAgICAgIGp1
bmsuIFRoZSByZXN1bHQgb2YgdGhlIGNhbGwgaXMgaGVuY2UgZGVwZW5kZW50IG9uCi0gICAgICAg
IC8vICAgICAgICAgIHRoZSBBTExPV19UUkFJTElOR19KVU5LIGZsYWcgYW5kL29yIHRoZSBqdW5r
IHZhbHVlLgotICAgICAgICAvLyAgICAgIFdpdGggdGhpcyBmbGFnICIweCIgaXMgYSBqdW5rLXN0
cmluZy4gRXZlbiB3aXRoIEFMTE9XX1RSQUlMSU5HX0pVTkssCi0gICAgICAgIC8vICAgICAgdGhl
IHN0cmluZyB3aWxsIG5vdCBiZSBwYXJzZWQgYXMgIjAiIGZvbGxvd2VkIGJ5IGp1bmsuCi0gICAg
ICAgIC8vCi0gICAgICAgIC8vICAtIEFMTE9XX09DVEFMUzogcmVjb2duaXplcyB0aGUgcHJlZml4
ICIwIiBmb3Igb2N0YWxzOgotICAgICAgICAvLyAgICAgIElmIGEgc2VxdWVuY2Ugb2Ygb2N0YWwg
ZGlnaXRzIHN0YXJ0cyB3aXRoICcwJywgdGhlbiB0aGUgbnVtYmVyIGlzCi0gICAgICAgIC8vICAg
ICAgcmVhZCBhcyBvY3RhbCBpbnRlZ2VyLiBPY3RhbCBudW1iZXJzIG1heSBvbmx5IGJlIGludGVn
ZXJzLgotICAgICAgICAvLyAgICAgIEV4OiBTdHJpbmdUb0RvdWJsZSgiMDEyMzQiKSAtPiA2Njgu
MAotICAgICAgICAvLyAgICAgICAgICBTdHJpbmdUb0RvdWJsZSgiMDEyMzQ5IikgLT4gMTIzNDku
MCAgLy8gTm90IGEgc2VxdWVuY2Ugb2Ygb2N0YWwKLSAgICAgICAgLy8gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRpZ2l0cy4KLSAgICAgICAgLy8gICAg
ICAgICAgSW4gU3RyaW5nVG9Eb3VibGUoIjAxMjM0LjU2IikgdGhlIGNoYXJhY3RlcnMgIi41NiIg
YXJlIHRyYWlsaW5nCi0gICAgICAgIC8vICAgICAgICAgIGp1bmsuIFRoZSByZXN1bHQgb2YgdGhl
IGNhbGwgaXMgaGVuY2UgZGVwZW5kZW50IG9uCi0gICAgICAgIC8vICAgICAgICAgIHRoZSBBTExP
V19UUkFJTElOR19KVU5LIGZsYWcgYW5kL29yIHRoZSBqdW5rIHZhbHVlLgotICAgICAgICAvLyAg
ICAgICAgICBJbiBTdHJpbmdUb0RvdWJsZSgiMDEyMzRlNTYiKSB0aGUgY2hhcmFjdGVycyAiZTU2
IiBhcmUgdHJhaWxpbmcKLSAgICAgICAgLy8gICAgICAgICAganVuaywgdG9vLgotICAgICAgICAv
LyAgLSBBTExPV19UUkFJTElOR19KVU5LOiBpZ25vcmUgdHJhaWxpbmcgY2hhcmFjdGVycyB0aGF0
IGFyZSBub3QgcGFydCBvZgotICAgICAgICAvLyAgICAgIGEgZG91YmxlIGxpdGVyYWwuCi0gICAg
ICAgIC8vICAtIEFMTE9XX0xFQURJTkdfU1BBQ0VTOiBza2lwIG92ZXIgbGVhZGluZyBzcGFjZXMu
Ci0gICAgICAgIC8vICAtIEFMTE9XX1RSQUlMSU5HX1NQQUNFUzogaWdub3JlIHRyYWlsaW5nIHNw
YWNlcy4KLSAgICAgICAgLy8gIC0gQUxMT1dfU1BBQ0VTX0FGVEVSX1NJR046IGlnbm9yZSBzcGFj
ZXMgYWZ0ZXIgdGhlIHNpZ24uCi0gICAgICAgIC8vICAgICAgIEV4OiBTdHJpbmdUb0RvdWJsZSgi
LSAgIDEyMy4yIikgLT4gLTEyMy4yLgotICAgICAgICAvLyAgICAgICAgICAgU3RyaW5nVG9Eb3Vi
bGUoIisgICAxMjMuMiIpIC0+IDEyMy4yCi0gICAgICAgIC8vCi0gICAgICAgIC8vIGVtcHR5X3N0
cmluZ192YWx1ZSBpcyByZXR1cm5lZCB3aGVuIGFuIGVtcHR5IHN0cmluZyBpcyBnaXZlbiBhcyBp
bnB1dC4KLSAgICAgICAgLy8gSWYgQUxMT1dfTEVBRElOR19TUEFDRVMgb3IgQUxMT1dfVFJBSUxJ
TkdfU1BBQ0VTIGFyZSBzZXQsIHRoZW4gYSBzdHJpbmcKLSAgICAgICAgLy8gY29udGFpbmluZyBv
bmx5IHNwYWNlcyBpcyBjb252ZXJ0ZWQgdG8gdGhlICdlbXB0eV9zdHJpbmdfdmFsdWUnLCB0b28u
Ci0gICAgICAgIC8vCi0gICAgICAgIC8vIGp1bmtfc3RyaW5nX3ZhbHVlIGlzIHJldHVybmVkIHdo
ZW4KLSAgICAgICAgLy8gIGEpIEFMTE9XX1RSQUlMSU5HX0pVTksgaXMgbm90IHNldCwgYW5kIGEg
anVuayBjaGFyYWN0ZXIgKGEgY2hhcmFjdGVyIG5vdAotICAgICAgICAvLyAgICAgcGFydCBvZiBh
IGRvdWJsZS1saXRlcmFsKSBpcyBmb3VuZC4KLSAgICAgICAgLy8gIGIpIEFMTE9XX1RSQUlMSU5H
X0pVTksgaXMgc2V0LCBidXQgdGhlIHN0cmluZyBkb2VzIG5vdCBzdGFydCB3aXRoIGEKLSAgICAg
ICAgLy8gICAgIGRvdWJsZSBsaXRlcmFsLgotICAgICAgICAvLwotICAgICAgICAvLyBpbmZpbml0
eV9zeW1ib2wgYW5kIG5hbl9zeW1ib2wgYXJlIHN0cmluZ3MgdGhhdCBhcmUgdXNlZCB0byBkZXRl
Y3QKLSAgICAgICAgLy8gaW5wdXRzIHRoYXQgcmVwcmVzZW50IGluZmluaXR5IGFuZCBOYU4uIFRo
ZXkgY2FuIGJlIG51bGwsIGluIHdoaWNoIGNhc2UKLSAgICAgICAgLy8gdGhleSBhcmUgaWdub3Jl
ZC4KLSAgICAgICAgLy8gVGhlIGNvbnZlcnNpb24gcm91dGluZSBmaXJzdCByZWFkcyBhbnkgcG9z
c2libGUgc2lnbnMuIFRoZW4gaXQgY29tcGFyZXMgdGhlCi0gICAgICAgIC8vIGZvbGxvd2luZyBj
aGFyYWN0ZXIgb2YgdGhlIGlucHV0LXN0cmluZyB3aXRoIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YK
LSAgICAgICAgLy8gdGhlIGluZmluaXR5LCBhbmQgbmFuLXN5bWJvbC4gSWYgZWl0aGVyIG1hdGNo
ZXMsIHRoZSBmdW5jdGlvbiBhc3N1bWVzLCB0aGF0Ci0gICAgICAgIC8vIGEgbWF0Y2ggaGFzIGJl
ZW4gZm91bmQsIGFuZCBleHBlY3RzIHRoZSBmb2xsb3dpbmcgaW5wdXQgY2hhcmFjdGVycyB0byBt
YXRjaAotICAgICAgICAvLyB0aGUgcmVtYWluaW5nIGNoYXJhY3RlcnMgb2YgdGhlIHNwZWNpYWwt
dmFsdWUgc3ltYm9sLgotICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgdGhlIGZvbGxvd2luZyBy
ZXN0cmljdGlvbnMgYXBwbHkgdG8gc3BlY2lhbC12YWx1ZSBzeW1ib2xzOgotICAgICAgICAvLyAg
LSB0aGV5IG11c3Qgbm90IHN0YXJ0IHdpdGggc2lnbnMgKCcrJywgb3IgJy0nKSwKLSAgICAgICAg
Ly8gIC0gdGhleSBtdXN0IG5vdCBoYXZlIHRoZSBzYW1lIGZpcnN0IGNoYXJhY3Rlci4KLSAgICAg
ICAgLy8gIC0gdGhleSBtdXN0IG5vdCBzdGFydCB3aXRoIGRpZ2l0cy4KLSAgICAgICAgLy8KLSAg
ICAgICAgLy8gRXhhbXBsZXM6Ci0gICAgICAgIC8vICBmbGFncyA9IEFMTE9XX0hFWCB8IEFMTE9X
X1RSQUlMSU5HX0pVTkssCi0gICAgICAgIC8vICBlbXB0eV9zdHJpbmdfdmFsdWUgPSAwLjAsCi0g
ICAgICAgIC8vICBqdW5rX3N0cmluZ192YWx1ZSA9IE5hTiwKLSAgICAgICAgLy8gIGluZmluaXR5
X3N5bWJvbCA9ICJpbmZpbml0eSIsCi0gICAgICAgIC8vICBuYW5fc3ltYm9sID0gIm5hbiI6Ci0g
ICAgICAgIC8vICAgIFN0cmluZ1RvRG91YmxlKCIweDEyMzQiKSAtPiA0NjYwLjAuCi0gICAgICAg
IC8vICAgIFN0cmluZ1RvRG91YmxlKCIweDEyMzRLIikgLT4gNDY2MC4wLgotICAgICAgICAvLyAg
ICBTdHJpbmdUb0RvdWJsZSgiIikgLT4gMC4wICAvLyBlbXB0eV9zdHJpbmdfdmFsdWUuCi0gICAg
ICAgIC8vICAgIFN0cmluZ1RvRG91YmxlKCIgIikgLT4gTmFOICAvLyBqdW5rX3N0cmluZ192YWx1
ZS4KLSAgICAgICAgLy8gICAgU3RyaW5nVG9Eb3VibGUoIiAxIikgLT4gTmFOICAvLyBqdW5rX3N0
cmluZ192YWx1ZS4KLSAgICAgICAgLy8gICAgU3RyaW5nVG9Eb3VibGUoIjB4IikgLT4gTmFOICAv
LyBqdW5rX3N0cmluZ192YWx1ZS4KLSAgICAgICAgLy8gICAgU3RyaW5nVG9Eb3VibGUoIi0xMjMu
NDUiKSAtPiAtMTIzLjQ1LgotICAgICAgICAvLyAgICBTdHJpbmdUb0RvdWJsZSgiLS0xMjMuNDUi
KSAtPiBOYU4gIC8vIGp1bmtfc3RyaW5nX3ZhbHVlLgotICAgICAgICAvLyAgICBTdHJpbmdUb0Rv
dWJsZSgiMTIzZTQ1IikgLT4gMTIzZTQ1LgotICAgICAgICAvLyAgICBTdHJpbmdUb0RvdWJsZSgi
MTIzRTQ1IikgLT4gMTIzZTQ1LgotICAgICAgICAvLyAgICBTdHJpbmdUb0RvdWJsZSgiMTIzZSs0
NSIpIC0+IDEyM2U0NS4KLSAgICAgICAgLy8gICAgU3RyaW5nVG9Eb3VibGUoIjEyM0UtNDUiKSAt
PiAxMjNlLTQ1LgotICAgICAgICAvLyAgICBTdHJpbmdUb0RvdWJsZSgiMTIzZSIpIC0+IDEyMy4w
ICAvLyB0cmFpbGluZyBqdW5rIGlnbm9yZWQuCi0gICAgICAgIC8vICAgIFN0cmluZ1RvRG91Ymxl
KCIxMjNlLSIpIC0+IDEyMy4wICAvLyB0cmFpbGluZyBqdW5rIGlnbm9yZWQuCi0gICAgICAgIC8v
ICAgIFN0cmluZ1RvRG91YmxlKCIrTmFOIikgLT4gTmFOICAvLyBOYU4gc3RyaW5nIGxpdGVyYWwu
Ci0gICAgICAgIC8vICAgIFN0cmluZ1RvRG91YmxlKCItaW5maW5pdHkiKSAtPiAtaW5mLiAgLy8g
aW5maW5pdHkgbGl0ZXJhbC4KLSAgICAgICAgLy8gICAgU3RyaW5nVG9Eb3VibGUoIkluZmluaXR5
IikgLT4gTmFOICAvLyBqdW5rX3N0cmluZ192YWx1ZS4KLSAgICAgICAgLy8KLSAgICAgICAgLy8g
IGZsYWdzID0gQUxMT1dfT0NUQUwgfCBBTExPV19MRUFESU5HX1NQQUNFUywKLSAgICAgICAgLy8g
IGVtcHR5X3N0cmluZ192YWx1ZSA9IDAuMCwKLSAgICAgICAgLy8gIGp1bmtfc3RyaW5nX3ZhbHVl
ID0gTmFOLAotICAgICAgICAvLyAgaW5maW5pdHlfc3ltYm9sID0gTlVMTCwKLSAgICAgICAgLy8g
IG5hbl9zeW1ib2wgPSBOVUxMOgotICAgICAgICAvLyAgICBTdHJpbmdUb0RvdWJsZSgiMHgxMjM0
IikgLT4gTmFOICAvLyBqdW5rX3N0cmluZ192YWx1ZS4KLSAgICAgICAgLy8gICAgU3RyaW5nVG9E
b3VibGUoIjAxMjM0IikgLT4gNjY4LjAuCi0gICAgICAgIC8vICAgIFN0cmluZ1RvRG91YmxlKCIi
KSAtPiAwLjAgIC8vIGVtcHR5X3N0cmluZ192YWx1ZS4KLSAgICAgICAgLy8gICAgU3RyaW5nVG9E
b3VibGUoIiAiKSAtPiAwLjAgIC8vIGVtcHR5X3N0cmluZ192YWx1ZS4KLSAgICAgICAgLy8gICAg
U3RyaW5nVG9Eb3VibGUoIiAxIikgLT4gMS4wCi0gICAgICAgIC8vICAgIFN0cmluZ1RvRG91Ymxl
KCIweCIpIC0+IE5hTiAgLy8ganVua19zdHJpbmdfdmFsdWUuCi0gICAgICAgIC8vICAgIFN0cmlu
Z1RvRG91YmxlKCIwMTIzZTQ1IikgLT4gTmFOICAvLyBqdW5rX3N0cmluZ192YWx1ZS4KLSAgICAg
ICAgLy8gICAgU3RyaW5nVG9Eb3VibGUoIjAxMjM5RTQ1IikgLT4gMTIzOWU0NS4KLSAgICAgICAg
Ly8gICAgU3RyaW5nVG9Eb3VibGUoIi1pbmZpbml0eSIpIC0+IE5hTiAgLy8ganVua19zdHJpbmdf
dmFsdWUuCi0gICAgICAgIC8vICAgIFN0cmluZ1RvRG91YmxlKCJOYU4iKSAtPiBOYU4gIC8vIGp1
bmtfc3RyaW5nX3ZhbHVlLgotICAgICAgICBTdHJpbmdUb0RvdWJsZUNvbnZlcnRlcihpbnQgZmxh
Z3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBlbXB0eV9zdHJpbmdf
dmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBqdW5rX3N0cmlu
Z192YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogaW5m
aW5pdHlfc3ltYm9sLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFy
KiBuYW5fc3ltYm9sKQotICAgICAgICA6IGZsYWdzXyhmbGFncyksCi0gICAgICAgIGVtcHR5X3N0
cmluZ192YWx1ZV8oZW1wdHlfc3RyaW5nX3ZhbHVlKSwKLSAgICAgICAganVua19zdHJpbmdfdmFs
dWVfKGp1bmtfc3RyaW5nX3ZhbHVlKSwKLSAgICAgICAgaW5maW5pdHlfc3ltYm9sXyhpbmZpbml0
eV9zeW1ib2wpLAotICAgICAgICBuYW5fc3ltYm9sXyhuYW5fc3ltYm9sKSB7Ci0gICAgICAgIH0K
LSAgICAgICAgCiAgICAgICAgIC8vIFBlcmZvcm1zIHRoZSBjb252ZXJzaW9uLgogICAgICAgICAv
LyBUaGUgb3V0cHV0IHBhcmFtZXRlciAncHJvY2Vzc2VkX2NoYXJhY3RlcnNfY291bnQnIGlzIHNl
dCB0byB0aGUgbnVtYmVyCiAgICAgICAgIC8vIG9mIGNoYXJhY3RlcnMgdGhhdCBoYXZlIGJlZW4g
cHJvY2Vzc2VkIHRvIHJlYWQgdGhlIG51bWJlci4KLSAgICAgICAgLy8gU3BhY2VzIHRoYW4gYXJl
IHByb2Nlc3NlZCB3aXRoIEFMTE9XX3tMRUFESU5HfFRSQUlMSU5HfV9TUEFDRVMgYXJlIGluY2x1
ZGVkCi0gICAgICAgIC8vIGluIHRoZSAncHJvY2Vzc2VkX2NoYXJhY3RlcnNfY291bnQnLiBUcmFp
bGluZyBqdW5rIGlzIG5ldmVyIGluY2x1ZGVkLgotICAgICAgICBkb3VibGUgU3RyaW5nVG9Eb3Vi
bGUoY29uc3QgY2hhciogYnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
IGxlbmd0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCogcHJvY2Vzc2VkX2No
YXJhY3RlcnNfY291bnQpOworICAgICAgICBzdGF0aWMgZG91YmxlIFN0cmluZ1RvRG91YmxlKGNv
bnN0IGNoYXIqIGJ1ZmZlciwgc2l6ZV90IGxlbmd0aCwgc2l6ZV90KiBwcm9jZXNzZWRfY2hhcmFj
dGVyc19jb3VudCk7CiAgICAgICAgIAogICAgIHByaXZhdGU6Ci0gICAgICAgIGNvbnN0IGludCBm
bGFnc187Ci0gICAgICAgIGNvbnN0IGRvdWJsZSBlbXB0eV9zdHJpbmdfdmFsdWVfOwotICAgICAg
ICBjb25zdCBkb3VibGUganVua19zdHJpbmdfdmFsdWVfOwotICAgICAgICBjb25zdCBjaGFyKiBj
b25zdCBpbmZpbml0eV9zeW1ib2xfOwotICAgICAgICBjb25zdCBjaGFyKiBjb25zdCBuYW5fc3lt
Ym9sXzsKLSAgICAgICAgCiAgICAgICAgIERJU0FMTE9XX0lNUExJQ0lUX0NPTlNUUlVDVE9SUyhT
dHJpbmdUb0RvdWJsZUNvbnZlcnRlcik7CiAgICAgfTsKICAgICAKSW5kZXg6IFNvdXJjZS9XVEYv
d3RmL3RleHQvU3RyaW5nSW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvdGV4
dC9TdHJpbmdJbXBsLmNwcAkocmV2aXNpb24gMTEzMjc1KQorKysgU291cmNlL1dURi93dGYvdGV4
dC9TdHJpbmdJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzM3LDE4ICs3MzcsMTggQEAgaW50
cHRyX3QgU3RyaW5nSW1wbDo6dG9JbnRQdHIoYm9vbCogb2spCiAgICAgcmV0dXJuIGNoYXJhY3Rl
cnNUb0ludFB0cihjaGFyYWN0ZXJzMTYoKSwgbV9sZW5ndGgsIG9rKTsKIH0KIAotZG91YmxlIFN0
cmluZ0ltcGw6OnRvRG91YmxlKGJvb2wqIG9rLCBib29sKiBkaWRSZWFkTnVtYmVyKQorZG91Ymxl
IFN0cmluZ0ltcGw6OnRvRG91YmxlKGJvb2wqIG9rKQogewogICAgIGlmIChpczhCaXQoKSkKLSAg
ICAgICAgcmV0dXJuIGNoYXJhY3RlcnNUb0RvdWJsZShjaGFyYWN0ZXJzOCgpLCBtX2xlbmd0aCwg
b2ssIGRpZFJlYWROdW1iZXIpOwotICAgIHJldHVybiBjaGFyYWN0ZXJzVG9Eb3VibGUoY2hhcmFj
dGVyczE2KCksIG1fbGVuZ3RoLCBvaywgZGlkUmVhZE51bWJlcik7CisgICAgICAgIHJldHVybiBj
aGFyYWN0ZXJzVG9Eb3VibGUoY2hhcmFjdGVyczgoKSwgbV9sZW5ndGgsIG9rKTsKKyAgICByZXR1
cm4gY2hhcmFjdGVyc1RvRG91YmxlKGNoYXJhY3RlcnMxNigpLCBtX2xlbmd0aCwgb2spOwogfQog
Ci1mbG9hdCBTdHJpbmdJbXBsOjp0b0Zsb2F0KGJvb2wqIG9rLCBib29sKiBkaWRSZWFkTnVtYmVy
KQorZmxvYXQgU3RyaW5nSW1wbDo6dG9GbG9hdChib29sKiBvaykKIHsKICAgICBpZiAoaXM4Qml0
KCkpCi0gICAgICAgIHJldHVybiBjaGFyYWN0ZXJzVG9GbG9hdChjaGFyYWN0ZXJzOCgpLCBtX2xl
bmd0aCwgb2ssIGRpZFJlYWROdW1iZXIpOwotICAgIHJldHVybiBjaGFyYWN0ZXJzVG9GbG9hdChj
aGFyYWN0ZXJzMTYoKSwgbV9sZW5ndGgsIG9rLCBkaWRSZWFkTnVtYmVyKTsKKyAgICAgICAgcmV0
dXJuIGNoYXJhY3RlcnNUb0Zsb2F0KGNoYXJhY3RlcnM4KCksIG1fbGVuZ3RoLCBvayk7CisgICAg
cmV0dXJuIGNoYXJhY3RlcnNUb0Zsb2F0KGNoYXJhY3RlcnMxNigpLCBtX2xlbmd0aCwgb2spOwog
fQogCiBib29sIGVxdWFsSWdub3JpbmdDYXNlKGNvbnN0IExDaGFyKiBhLCBjb25zdCBMQ2hhciog
YiwgdW5zaWduZWQgbGVuZ3RoKQpJbmRleDogU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBs
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmgJKHJldmlz
aW9uIDExMzI3NSkKKysrIFNvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSW1wbC5oCSh3b3JraW5n
IGNvcHkpCkBAIC00NTksOCArNDU5LDExIEBAIHB1YmxpYzoKICAgICB1aW50NjRfdCB0b1VJbnQ2
NChib29sKiBvayA9IDApOyAvLyBpZ25vcmVzIHRyYWlsaW5nIGdhcmJhZ2UKICAgICBpbnRwdHJf
dCB0b0ludFB0cihib29sKiBvayA9IDApOyAvLyBpZ25vcmVzIHRyYWlsaW5nIGdhcmJhZ2UKIAot
ICAgIGRvdWJsZSB0b0RvdWJsZShib29sKiBvayA9IDAsIGJvb2wqIGRpZFJlYWROdW1iZXIgPSAw
KTsKLSAgICBmbG9hdCB0b0Zsb2F0KGJvb2wqIG9rID0gMCwgYm9vbCogZGlkUmVhZE51bWJlciA9
IDApOworICAgIC8vIEZJWE1FOiBMaWtlIHRoZSBzdHJpY3QgZnVuY3Rpb25zIGFib3ZlLCB0aGVz
ZSBnaXZlIGZhbHNlIGZvciAib2siIHdoZW4gdGhlcmUgaXMgdHJhaWxpbmcgZ2FyYmFnZS4KKyAg
ICAvLyBMaWtlIHRoZSBub24tc3RyaWN0IGZ1bmN0aW9ucyBhYm92ZSwgdGhlc2UgcmV0dXJuIHRo
ZSB2YWx1ZSB3aGVuIHRoZXJlIGlzIHRyYWlsaW5nIGdhcmJhZ2UuCisgICAgLy8gSXQgd291bGQg
YmUgYmV0dGVyIGlmIHRoZXNlIHdlcmUgbW9yZSBjb25zaXN0ZW50IHdpdGggdGhlIGFib3ZlIGZ1
bmN0aW9ucyBpbnN0ZWFkLgorICAgIGRvdWJsZSB0b0RvdWJsZShib29sKiBvayA9IDApOworICAg
IGZsb2F0IHRvRmxvYXQoYm9vbCogb2sgPSAwKTsKIAogICAgIFdURl9FWFBPUlRfUFJJVkFURSBQ
YXNzUmVmUHRyPFN0cmluZ0ltcGw+IGxvd2VyKCk7CiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIFBh
c3NSZWZQdHI8U3RyaW5nSW1wbD4gdXBwZXIoKTsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3RleHQv
V1RGU3RyaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi90ZXh0L1dURlN0cmlu
Zy5jcHAJKHJldmlzaW9uIDExMzI3NSkKKysrIFNvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5n
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIyLDcgKzUyMiw2IEBAIGludHB0cl90IFN0cmluZzo6
dG9JbnRQdHJTdHJpY3QoYm9vbCogb2sKICAgICByZXR1cm4gbV9pbXBsLT50b0ludFB0clN0cmlj
dChvaywgYmFzZSk7CiB9CiAKLQogaW50IFN0cmluZzo6dG9JbnQoYm9vbCogb2spIGNvbnN0CiB7
CiAgICAgaWYgKCFtX2ltcGwpIHsKQEAgLTU3MywyOCArNTcyLDI0IEBAIGludHB0cl90IFN0cmlu
Zzo6dG9JbnRQdHIoYm9vbCogb2spIGNvbnMKICAgICByZXR1cm4gbV9pbXBsLT50b0ludFB0cihv
ayk7CiB9CiAKLWRvdWJsZSBTdHJpbmc6OnRvRG91YmxlKGJvb2wqIG9rLCBib29sKiBkaWRSZWFk
TnVtYmVyKSBjb25zdAorZG91YmxlIFN0cmluZzo6dG9Eb3VibGUoYm9vbCogb2spIGNvbnN0CiB7
CiAgICAgaWYgKCFtX2ltcGwpIHsKICAgICAgICAgaWYgKG9rKQogICAgICAgICAgICAgKm9rID0g
ZmFsc2U7Ci0gICAgICAgIGlmIChkaWRSZWFkTnVtYmVyKQotICAgICAgICAgICAgKmRpZFJlYWRO
dW1iZXIgPSBmYWxzZTsKICAgICAgICAgcmV0dXJuIDAuMDsKICAgICB9Ci0gICAgcmV0dXJuIG1f
aW1wbC0+dG9Eb3VibGUob2ssIGRpZFJlYWROdW1iZXIpOworICAgIHJldHVybiBtX2ltcGwtPnRv
RG91YmxlKG9rKTsKIH0KIAotZmxvYXQgU3RyaW5nOjp0b0Zsb2F0KGJvb2wqIG9rLCBib29sKiBk
aWRSZWFkTnVtYmVyKSBjb25zdAorZmxvYXQgU3RyaW5nOjp0b0Zsb2F0KGJvb2wqIG9rKSBjb25z
dAogewogICAgIGlmICghbV9pbXBsKSB7CiAgICAgICAgIGlmIChvaykKICAgICAgICAgICAgICpv
ayA9IGZhbHNlOwotICAgICAgICBpZiAoZGlkUmVhZE51bWJlcikKLSAgICAgICAgICAgICpkaWRS
ZWFkTnVtYmVyID0gZmFsc2U7CiAgICAgICAgIHJldHVybiAwLjBmOwogICAgIH0KLSAgICByZXR1
cm4gbV9pbXBsLT50b0Zsb2F0KG9rLCBkaWRSZWFkTnVtYmVyKTsKKyAgICByZXR1cm4gbV9pbXBs
LT50b0Zsb2F0KG9rKTsKIH0KIAogU3RyaW5nIFN0cmluZzo6aXNvbGF0ZWRDb3B5KCkgY29uc3QK
QEAgLTEwMzYsNjMgKzEwMzEsNjQgQEAgaW50cHRyX3QgY2hhcmFjdGVyc1RvSW50UHRyKGNvbnN0
IFVDaGFyKgogICAgIHJldHVybiB0b0ludGVncmFsVHlwZTxpbnRwdHJfdCwgVUNoYXI+KGRhdGEs
IGxlbmd0aE9mQ2hhcmFjdGVyc0FzSW50ZWdlcjxVQ2hhcj4oZGF0YSwgbGVuZ3RoKSwgb2ssIDEw
KTsKIH0KIAotdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJUeXBlLCBXVEY6OkFsbG93VHJhaWxpbmdK
dW5rVGFnIGFsbG93VHJhaWxpbmdKdW5rPgotc3RhdGljIGlubGluZSBkb3VibGUgdG9Eb3VibGVU
eXBlKGNvbnN0IENoYXJUeXBlKiBkYXRhLCBzaXplX3QgbGVuZ3RoLCBib29sKiBvaywgYm9vbCog
ZGlkUmVhZE51bWJlcikKK2VudW0gVHJhaWxpbmdKdW5rUG9saWN5IHsgRGlzYWxsb3dUcmFpbGlu
Z0p1bmssIEFsbG93VHJhaWxpbmdKdW5rIH07CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBDaGFyVHlw
ZSwgVHJhaWxpbmdKdW5rUG9saWN5IHBvbGljeT4KK3N0YXRpYyBpbmxpbmUgZG91YmxlIHRvRG91
YmxlVHlwZShjb25zdCBDaGFyVHlwZSogZGF0YSwgc2l6ZV90IGxlbmd0aCwgYm9vbCogb2ssIHNp
emVfdCYgcGFyc2VkTGVuZ3RoKQogewotICAgIGlmICghbGVuZ3RoKSB7CisgICAgc2l6ZV90IGxl
YWRpbmdTcGFjZXNMZW5ndGggPSAwOworICAgIHdoaWxlIChsZWFkaW5nU3BhY2VzTGVuZ3RoIDwg
bGVuZ3RoICYmIGlzQVNDSUlTcGFjZShkYXRhW2xlYWRpbmdTcGFjZXNMZW5ndGhdKSkKKyAgICAg
ICAgKytsZWFkaW5nU3BhY2VzTGVuZ3RoOworCisgICAgZG91YmxlIG51bWJlciA9IHBhcnNlRG91
YmxlKGRhdGEgKyBsZWFkaW5nU3BhY2VzTGVuZ3RoLCBsZW5ndGggLSBsZWFkaW5nU3BhY2VzTGVu
Z3RoLCBwYXJzZWRMZW5ndGgpOworICAgIGlmICghcGFyc2VkTGVuZ3RoKSB7CiAgICAgICAgIGlm
IChvaykKICAgICAgICAgICAgICpvayA9IGZhbHNlOwotICAgICAgICBpZiAoZGlkUmVhZE51bWJl
cikKLSAgICAgICAgICAgICpkaWRSZWFkTnVtYmVyID0gZmFsc2U7CiAgICAgICAgIHJldHVybiAw
LjA7CiAgICAgfQogCi0gICAgVmVjdG9yPGNoYXIsIDI1Nj4gYnl0ZXMobGVuZ3RoICsgMSk7Ci0g
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQotICAgICAgICBieXRlc1tp
XSA9IGRhdGFbaV0gPCAweDdGID8gZGF0YVtpXSA6ICc/JzsKLSAgICBieXRlc1tsZW5ndGhdID0g
J1wwJzsKLSAgICBjaGFyKiBzdGFydCA9IGJ5dGVzLmRhdGEoKTsKLSAgICBjaGFyKiBlbmQ7Ci0g
ICAgZG91YmxlIHZhbCA9IFdURjo6c3RydG9kPGFsbG93VHJhaWxpbmdKdW5rLCBXVEY6OkRpc2Fs
bG93VHJhaWxpbmdTcGFjZXM+KHN0YXJ0LCAmZW5kKTsKKyAgICBwYXJzZWRMZW5ndGggKz0gbGVh
ZGluZ1NwYWNlc0xlbmd0aDsKICAgICBpZiAob2spCi0gICAgICAgICpvayA9IChlbmQgPT0gMCB8
fCAqZW5kID09ICdcMCcpICYmICFpc25hbih2YWwpOwotICAgIGlmIChkaWRSZWFkTnVtYmVyKQot
ICAgICAgICAqZGlkUmVhZE51bWJlciA9IGVuZCAtIHN0YXJ0OwotICAgIHJldHVybiB2YWw7Cisg
ICAgICAgICpvayA9IHBvbGljeSA9PSBBbGxvd1RyYWlsaW5nSnVuayB8fCBwYXJzZWRMZW5ndGgg
PT0gbGVuZ3RoOworICAgIHJldHVybiBudW1iZXI7CiB9CiAKLWRvdWJsZSBjaGFyYWN0ZXJzVG9E
b3VibGUoY29uc3QgTENoYXIqIGRhdGEsIHNpemVfdCBsZW5ndGgsIGJvb2wqIG9rLCBib29sKiBk
aWRSZWFkTnVtYmVyKQorZG91YmxlIGNoYXJhY3RlcnNUb0RvdWJsZShjb25zdCBMQ2hhciogZGF0
YSwgc2l6ZV90IGxlbmd0aCwgYm9vbCogb2spCiB7Ci0gICAgcmV0dXJuIHRvRG91YmxlVHlwZTxM
Q2hhciwgV1RGOjpEaXNhbGxvd1RyYWlsaW5nSnVuaz4oZGF0YSwgbGVuZ3RoLCBvaywgZGlkUmVh
ZE51bWJlcik7CisgICAgc2l6ZV90IHBhcnNlZExlbmd0aDsKKyAgICByZXR1cm4gdG9Eb3VibGVU
eXBlPExDaGFyLCBEaXNhbGxvd1RyYWlsaW5nSnVuaz4oZGF0YSwgbGVuZ3RoLCBvaywgcGFyc2Vk
TGVuZ3RoKTsKIH0KIAotZG91YmxlIGNoYXJhY3RlcnNUb0RvdWJsZShjb25zdCBVQ2hhciogZGF0
YSwgc2l6ZV90IGxlbmd0aCwgYm9vbCogb2ssIGJvb2wqIGRpZFJlYWROdW1iZXIpCitkb3VibGUg
Y2hhcmFjdGVyc1RvRG91YmxlKGNvbnN0IFVDaGFyKiBkYXRhLCBzaXplX3QgbGVuZ3RoLCBib29s
KiBvaykKIHsKLSAgICByZXR1cm4gdG9Eb3VibGVUeXBlPFVDaGFyLCBXVEY6OkRpc2FsbG93VHJh
aWxpbmdKdW5rPihkYXRhLCBsZW5ndGgsIG9rLCBkaWRSZWFkTnVtYmVyKTsKKyAgICBzaXplX3Qg
cGFyc2VkTGVuZ3RoOworICAgIHJldHVybiB0b0RvdWJsZVR5cGU8VUNoYXIsIERpc2FsbG93VHJh
aWxpbmdKdW5rPihkYXRhLCBsZW5ndGgsIG9rLCBwYXJzZWRMZW5ndGgpOwogfQogCi1mbG9hdCBj
aGFyYWN0ZXJzVG9GbG9hdChjb25zdCBMQ2hhciogZGF0YSwgc2l6ZV90IGxlbmd0aCwgYm9vbCog
b2ssIGJvb2wqIGRpZFJlYWROdW1iZXIpCitmbG9hdCBjaGFyYWN0ZXJzVG9GbG9hdChjb25zdCBM
Q2hhciogZGF0YSwgc2l6ZV90IGxlbmd0aCwgYm9vbCogb2spCiB7CiAgICAgLy8gRklYTUU6IFRo
aXMgd2lsbCByZXR1cm4gb2sgZXZlbiB3aGVuIHRoZSBzdHJpbmcgZml0cyBpbnRvIGEgZG91Ymxl
IGJ1dCBub3QgYSBmbG9hdC4KLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHRvRG91Ymxl
VHlwZTxMQ2hhciwgV1RGOjpEaXNhbGxvd1RyYWlsaW5nSnVuaz4oZGF0YSwgbGVuZ3RoLCBvaywg
ZGlkUmVhZE51bWJlcikpOworICAgIHNpemVfdCBwYXJzZWRMZW5ndGg7CisgICAgcmV0dXJuIHN0
YXRpY19jYXN0PGZsb2F0Pih0b0RvdWJsZVR5cGU8TENoYXIsIERpc2FsbG93VHJhaWxpbmdKdW5r
PihkYXRhLCBsZW5ndGgsIG9rLCBwYXJzZWRMZW5ndGgpKTsKIH0KIAotZmxvYXQgY2hhcmFjdGVy
c1RvRmxvYXQoY29uc3QgVUNoYXIqIGRhdGEsIHNpemVfdCBsZW5ndGgsIGJvb2wqIG9rLCBib29s
KiBkaWRSZWFkTnVtYmVyKQorZmxvYXQgY2hhcmFjdGVyc1RvRmxvYXQoY29uc3QgVUNoYXIqIGRh
dGEsIHNpemVfdCBsZW5ndGgsIGJvb2wqIG9rKQogewogICAgIC8vIEZJWE1FOiBUaGlzIHdpbGwg
cmV0dXJuIG9rIGV2ZW4gd2hlbiB0aGUgc3RyaW5nIGZpdHMgaW50byBhIGRvdWJsZSBidXQgbm90
IGEgZmxvYXQuCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0Pih0b0RvdWJsZVR5cGU8VUNo
YXIsIFdURjo6RGlzYWxsb3dUcmFpbGluZ0p1bms+KGRhdGEsIGxlbmd0aCwgb2ssIGRpZFJlYWRO
dW1iZXIpKTsKKyAgICBzaXplX3QgcGFyc2VkTGVuZ3RoOworICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxmbG9hdD4odG9Eb3VibGVUeXBlPFVDaGFyLCBEaXNhbGxvd1RyYWlsaW5nSnVuaz4oZGF0YSwg
bGVuZ3RoLCBvaywgcGFyc2VkTGVuZ3RoKSk7CiB9CiAKLWZsb2F0IGNoYXJhY3RlcnNUb0Zsb2F0
SWdub3JpbmdKdW5rKGNvbnN0IExDaGFyKiBkYXRhLCBzaXplX3QgbGVuZ3RoLCBib29sKiBvaywg
Ym9vbCogZGlkUmVhZE51bWJlcikKK2Zsb2F0IGNoYXJhY3RlcnNUb0Zsb2F0KGNvbnN0IExDaGFy
KiBkYXRhLCBzaXplX3QgbGVuZ3RoLCBzaXplX3QmIHBhcnNlZExlbmd0aCkKIHsKICAgICAvLyBG
SVhNRTogVGhpcyB3aWxsIHJldHVybiBvayBldmVuIHdoZW4gdGhlIHN0cmluZyBmaXRzIGludG8g
YSBkb3VibGUgYnV0IG5vdCBhIGZsb2F0LgotICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4o
dG9Eb3VibGVUeXBlPExDaGFyLCBXVEY6OkFsbG93VHJhaWxpbmdKdW5rPihkYXRhLCBsZW5ndGgs
IG9rLCBkaWRSZWFkTnVtYmVyKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0Pih0b0Rv
dWJsZVR5cGU8TENoYXIsIEFsbG93VHJhaWxpbmdKdW5rPihkYXRhLCBsZW5ndGgsIDAsIHBhcnNl
ZExlbmd0aCkpOwogfQogCi1mbG9hdCBjaGFyYWN0ZXJzVG9GbG9hdElnbm9yaW5nSnVuayhjb25z
dCBVQ2hhciogZGF0YSwgc2l6ZV90IGxlbmd0aCwgYm9vbCogb2ssIGJvb2wqIGRpZFJlYWROdW1i
ZXIpCitmbG9hdCBjaGFyYWN0ZXJzVG9GbG9hdChjb25zdCBVQ2hhciogZGF0YSwgc2l6ZV90IGxl
bmd0aCwgc2l6ZV90JiBwYXJzZWRMZW5ndGgpCiB7CiAgICAgLy8gRklYTUU6IFRoaXMgd2lsbCBy
ZXR1cm4gb2sgZXZlbiB3aGVuIHRoZSBzdHJpbmcgZml0cyBpbnRvIGEgZG91YmxlIGJ1dCBub3Qg
YSBmbG9hdC4KLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHRvRG91YmxlVHlwZTxVQ2hh
ciwgV1RGOjpBbGxvd1RyYWlsaW5nSnVuaz4oZGF0YSwgbGVuZ3RoLCBvaywgZGlkUmVhZE51bWJl
cikpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4odG9Eb3VibGVUeXBlPFVDaGFyLCBB
bGxvd1RyYWlsaW5nSnVuaz4oZGF0YSwgbGVuZ3RoLCAwLCBwYXJzZWRMZW5ndGgpKTsKIH0KIAog
Y29uc3QgU3RyaW5nJiBlbXB0eVN0cmluZygpCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi90ZXh0L1dU
RlN0cmluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmgJ
KHJldmlzaW9uIDExMzI3NSkKKysrIFNvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmgJKHdv
cmtpbmcgY29weSkKQEAgLTg0LDEyICs4NCwxNSBAQCB1aW50NjRfdCBjaGFyYWN0ZXJzVG9VSW50
NjQoY29uc3QgVUNoYXIqCiBpbnRwdHJfdCBjaGFyYWN0ZXJzVG9JbnRQdHIoY29uc3QgTENoYXIq
LCBzaXplX3QsIGJvb2wqIG9rID0gMCk7IC8vIGlnbm9yZXMgdHJhaWxpbmcgZ2FyYmFnZQogaW50
cHRyX3QgY2hhcmFjdGVyc1RvSW50UHRyKGNvbnN0IFVDaGFyKiwgc2l6ZV90LCBib29sKiBvayA9
IDApOyAvLyBpZ25vcmVzIHRyYWlsaW5nIGdhcmJhZ2UKIAotV1RGX0VYUE9SVF9QUklWQVRFIGRv
dWJsZSBjaGFyYWN0ZXJzVG9Eb3VibGUoY29uc3QgTENoYXIqLCBzaXplX3QsIGJvb2wqIG9rID0g
MCwgYm9vbCogZGlkUmVhZE51bWJlciA9IDApOwotV1RGX0VYUE9SVF9QUklWQVRFIGRvdWJsZSBj
aGFyYWN0ZXJzVG9Eb3VibGUoY29uc3QgVUNoYXIqLCBzaXplX3QsIGJvb2wqIG9rID0gMCwgYm9v
bCogZGlkUmVhZE51bWJlciA9IDApOwotZmxvYXQgY2hhcmFjdGVyc1RvRmxvYXQoY29uc3QgTENo
YXIqLCBzaXplX3QsIGJvb2wqIG9rID0gMCwgYm9vbCogZGlkUmVhZE51bWJlciA9IDApOwotV1RG
X0VYUE9SVF9QUklWQVRFIGZsb2F0IGNoYXJhY3RlcnNUb0Zsb2F0SWdub3JpbmdKdW5rKGNvbnN0
IExDaGFyKiwgc2l6ZV90LCBib29sKiBvayA9IDAsIGJvb2wqIGRpZFJlYWROdW1iZXIgPSAwKTsK
LVdURl9FWFBPUlRfUFJJVkFURSBmbG9hdCBjaGFyYWN0ZXJzVG9GbG9hdChjb25zdCBVQ2hhcios
IHNpemVfdCwgYm9vbCogb2sgPSAwLCBib29sKiBkaWRSZWFkTnVtYmVyID0gMCk7Ci1XVEZfRVhQ
T1JUX1BSSVZBVEUgZmxvYXQgY2hhcmFjdGVyc1RvRmxvYXRJZ25vcmluZ0p1bmsoY29uc3QgVUNo
YXIqLCBzaXplX3QsIGJvb2wqIG9rID0gMCwgYm9vbCogZGlkUmVhZE51bWJlciA9IDApOworLy8g
RklYTUU6IExpa2UgdGhlIHN0cmljdCBmdW5jdGlvbnMgYWJvdmUsIHRoZXNlIGdpdmUgZmFsc2Ug
Zm9yICJvayIgd2hlbiB0aGVyZSBpcyB0cmFpbGluZyBnYXJiYWdlLgorLy8gTGlrZSB0aGUgbm9u
LXN0cmljdCBmdW5jdGlvbnMgYWJvdmUsIHRoZXNlIHJldHVybiB0aGUgdmFsdWUgd2hlbiB0aGVy
ZSBpcyB0cmFpbGluZyBnYXJiYWdlLgorLy8gSXQgd291bGQgYmUgYmV0dGVyIGlmIHRoZXNlIHdl
cmUgbW9yZSBjb25zaXN0ZW50IHdpdGggdGhlIGFib3ZlIGZ1bmN0aW9ucyBpbnN0ZWFkLgorV1RG
X0VYUE9SVF9QUklWQVRFIGRvdWJsZSBjaGFyYWN0ZXJzVG9Eb3VibGUoY29uc3QgTENoYXIqLCBz
aXplX3QsIGJvb2wqIG9rID0gMCk7CitXVEZfRVhQT1JUX1BSSVZBVEUgZG91YmxlIGNoYXJhY3Rl
cnNUb0RvdWJsZShjb25zdCBVQ2hhciosIHNpemVfdCwgYm9vbCogb2sgPSAwKTsKK2Zsb2F0IGNo
YXJhY3RlcnNUb0Zsb2F0KGNvbnN0IExDaGFyKiwgc2l6ZV90LCBib29sKiBvayA9IDApOworV1RG
X0VYUE9SVF9QUklWQVRFIGZsb2F0IGNoYXJhY3RlcnNUb0Zsb2F0KGNvbnN0IFVDaGFyKiwgc2l6
ZV90LCBib29sKiBvayA9IDApOworV1RGX0VYUE9SVF9QUklWQVRFIGZsb2F0IGNoYXJhY3RlcnNU
b0Zsb2F0KGNvbnN0IExDaGFyKiwgc2l6ZV90LCBzaXplX3QmIHBhcnNlZExlbmd0aCk7CitXVEZf
RVhQT1JUX1BSSVZBVEUgZmxvYXQgY2hhcmFjdGVyc1RvRmxvYXQoY29uc3QgVUNoYXIqLCBzaXpl
X3QsIHNpemVfdCYgcGFyc2VkTGVuZ3RoKTsKIAogZW51bSBGbG9hdENvbnZlcnNpb25GbGFncyB7
CiAgICAgU2hvdWxkUm91bmRTaWduaWZpY2FudEZpZ3VyZXMgPSAxIDw8IDAsCkBAIC0zMTEsOCAr
MzE0LDEyIEBAIHB1YmxpYzoKICAgICBpbnQ2NF90IHRvSW50NjQoYm9vbCogb2sgPSAwKSBjb25z
dDsKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdWludDY0X3QgdG9VSW50NjQoYm9vbCogb2sgPSAw
KSBjb25zdDsKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgaW50cHRyX3QgdG9JbnRQdHIoYm9vbCog
b2sgPSAwKSBjb25zdDsKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgZG91YmxlIHRvRG91YmxlKGJv
b2wqIG9rID0gMCwgYm9vbCogZGlkUmVhZE51bWJlciA9IDApIGNvbnN0OwotICAgIFdURl9FWFBP
UlRfUFJJVkFURSBmbG9hdCB0b0Zsb2F0KGJvb2wqIG9rID0gMCwgYm9vbCogZGlkUmVhZE51bWJl
ciA9IDApIGNvbnN0OworCisgICAgLy8gRklYTUU6IExpa2UgdGhlIHN0cmljdCBmdW5jdGlvbnMg
YWJvdmUsIHRoZXNlIGdpdmUgZmFsc2UgZm9yICJvayIgd2hlbiB0aGVyZSBpcyB0cmFpbGluZyBn
YXJiYWdlLgorICAgIC8vIExpa2UgdGhlIG5vbi1zdHJpY3QgZnVuY3Rpb25zIGFib3ZlLCB0aGVz
ZSByZXR1cm4gdGhlIHZhbHVlIHdoZW4gdGhlcmUgaXMgdHJhaWxpbmcgZ2FyYmFnZS4KKyAgICAv
LyBJdCB3b3VsZCBiZSBiZXR0ZXIgaWYgdGhlc2Ugd2VyZSBtb3JlIGNvbnNpc3RlbnQgd2l0aCB0
aGUgYWJvdmUgZnVuY3Rpb25zIGluc3RlYWQuCisgICAgV1RGX0VYUE9SVF9QUklWQVRFIGRvdWJs
ZSB0b0RvdWJsZShib29sKiBvayA9IDApIGNvbnN0OworICAgIFdURl9FWFBPUlRfUFJJVkFURSBm
bG9hdCB0b0Zsb2F0KGJvb2wqIG9rID0gMCkgY29uc3Q7CiAKICAgICBib29sIHBlcmNlbnRhZ2Uo
aW50JiBwZXJjZW50YWdlKSBjb25zdDsKIApJbmRleDogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTEzMjc1
KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
MjkgQEAKKzIwMTItMDQtMDQgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAg
ICAgIFN0cmVhbWxpbmUgc3RydG9kIGFuZCBmaXggc29tZSByZWxhdGVkIHByb2JsZW1zCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04Mjg1NworCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlZmFjdG9yaW5nIG9m
IGNvZGUgY292ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICAqIGRvbS9WaWV3cG9y
dEFyZ3VtZW50cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpudW1lcmljUHJlZml4KTogUmVtb3Zl
ZCBhIGNvbmZ1c2luZyBjb21tZW50IHRoYXQganVzdCBzYWlkCisgICAgICAgICJ3ZSB0b2xlcmF0
ZSBleHRyYSBjaGFyYWN0ZXJzIiBpbiBhIHJvdW5kYWJvdXQgd2F5LiBNYWRlIHRoZSAib2siCisg
ICAgICAgIGFyZ3VtZW50IG9wdGlvbmFsLiBDaGFuZ2VkIHRvIGNhbGwgdGhlIG5ldyB2ZXJzaW9u
IG9mIGNoYXJhY3RlcnNUb0Zsb2F0CisgICAgICAgIHRoYXQgcmV0dXJucyB0aGUgbnVtYmVyIG9m
IGNoYXJhY3RlcnMgcGFyc2VkIHJhdGhlciB0aGFuIHVzaW5nIHRoZQorICAgICAgICBjaGFyYWN0
ZXJzVG9GbG9hdElnbm9yaW5nSnVuay9kaWRSZWFkTnVtYmVyIHNvbHV0aW9uIGZyb20gYmVmb3Jl
LgorICAgICAgICAoV2ViQ29yZTo6ZmluZFNpemVWYWx1ZSk6IFNpbmNlIG51bWVyaWNQcmVmaXgg
aXMgZ3VhcmFudGVlZCB0byByZXR1cm4gMAorICAgICAgICB3aGVuIGl0IGNhbid0IHBhcnNlLCBy
ZW1vdmVkIHRoZSAib2siIGNvZGUuIEFsc28gY2hhbmdlZCB0aGUgdW51c3VhbAorICAgICAgICBz
eW50YXggImZsb2F0KDEuMCkiIHRvIGp1c3QgIjEiLCB3aGljaCB3b3JrcyBqdXN0IGFzIHdlbGwu
CisgICAgICAgIChXZWJDb3JlOjpmaW5kU2NhbGVWYWx1ZSk6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6ZmluZFVzZXJTY2FsYWJsZVZhbHVlKTogRGl0dG8uCisKKyAgICAgICAgKiBodG1sL3Bh
cnNlci9IVE1MUGFyc2VySWRpb21zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlVG9Eb3Vi
bGVGb3JOdW1iZXJUeXBlKTogUmVtb3ZlZCBhbiB1bm5lZWRlZCBjb2RlIHBhdGgKKyAgICAgICAg
YW5kIHJlcGxhY2VkIGl0IHdpdGggYW4gYXNzZXJ0aW9uOyB0b0RvdWJsZSBubyBsb25nZXIgd2ls
bCByZXR1cm4gaW5maW5pdHkKKyAgICAgICAgb3Igbm90LWEtbnVtYmVyIHZhbHVlcy4KKwogMjAx
Mi0wNC0wNCAgTHVrZSBNYWNwaGVyc29uICA8bWFjcGhlcnNvbkBjaHJvbWl1bS5vcmc+CiAKICAg
ICAgICAgUmVwbGFjZSBmdXJ0aGVyIHVzYWdlIG9mIGludCB3aXRoIENTU1Byb3BlcnR5SUQuCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vVmlld3BvcnRBcmd1bWVudHMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9WaWV3cG9ydEFyZ3VtZW50cy5jcHAJKHJldmlzaW9uIDEx
MzI3NSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9WaWV3cG9ydEFyZ3VtZW50cy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIwNCwyOCArMjA0LDI0IEBAIHZvaWQgcmVzdHJpY3RTY2FsZUZhY3RvclRv
SW5pdGlhbFNjYWxlSWYKICAgICAgICAgcmVzdWx0Lm1heGltdW1TY2FsZSA9IHJlc3VsdC5taW5p
bXVtU2NhbGUgPSByZXN1bHQuaW5pdGlhbFNjYWxlOwogfQogCi1zdGF0aWMgZmxvYXQgbnVtZXJp
Y1ByZWZpeChjb25zdCBTdHJpbmcmIGtleVN0cmluZywgY29uc3QgU3RyaW5nJiB2YWx1ZVN0cmlu
ZywgRG9jdW1lbnQqIGRvY3VtZW50LCBib29sKiBvaykKK3N0YXRpYyBmbG9hdCBudW1lcmljUHJl
Zml4KGNvbnN0IFN0cmluZyYga2V5U3RyaW5nLCBjb25zdCBTdHJpbmcmIHZhbHVlU3RyaW5nLCBE
b2N1bWVudCogZG9jdW1lbnQsIGJvb2wqIG9rID0gMCkKIHsKLSAgICAvLyBJZiBhIHByZWZpeCBv
ZiBwcm9wZXJ0eS12YWx1ZSBjYW4gYmUgY29udmVydGVkIHRvIGEgbnVtYmVyIHVzaW5nIHN0cnRv
ZCwKLSAgICAvLyB0aGUgdmFsdWUgd2lsbCBiZSB0aGF0IG51bWJlci4gVGhlIHJlbWFpbmRlciBv
ZiB0aGUgc3RyaW5nIGlzIGlnbm9yZWQuCi0gICAgLy8gU28gd2hlbiBTdHJpbmc6OnRvRmxvYXQg
c2F5cyB0aGVyZSBpcyBhbiBlcnJvciwgaXQgbWF5IGJlIGEgZmFsc2UgcG9zaXRpdmUsCi0gICAg
Ly8gYW5kIHdlIHNob3VsZCBjaGVjayBpZiB0aGUgdmFsdWVTdHJpbmcgcHJlZml4IHdhcyBhIG51
bWJlci4KLQotICAgIGJvb2wgZGlkUmVhZE51bWJlcjsKKyAgICBzaXplX3QgcGFyc2VkTGVuZ3Ro
OwogICAgIGZsb2F0IHZhbHVlOwogICAgIGlmICh2YWx1ZVN0cmluZy5pczhCaXQoKSkKLSAgICAg
ICAgdmFsdWUgPSBXVEY6OmNoYXJhY3RlcnNUb0Zsb2F0SWdub3JpbmdKdW5rKHZhbHVlU3RyaW5n
LmNoYXJhY3RlcnM4KCksIHZhbHVlU3RyaW5nLmxlbmd0aCgpLCBvaywgJmRpZFJlYWROdW1iZXIp
OworICAgICAgICB2YWx1ZSA9IGNoYXJhY3RlcnNUb0Zsb2F0KHZhbHVlU3RyaW5nLmNoYXJhY3Rl
cnM4KCksIHZhbHVlU3RyaW5nLmxlbmd0aCgpLCBwYXJzZWRMZW5ndGgpOwogICAgIGVsc2UKLSAg
ICAgICAgdmFsdWUgPSBXVEY6OmNoYXJhY3RlcnNUb0Zsb2F0SWdub3JpbmdKdW5rKHZhbHVlU3Ry
aW5nLmNoYXJhY3RlcnMxNigpLCB2YWx1ZVN0cmluZy5sZW5ndGgoKSwgb2ssICZkaWRSZWFkTnVt
YmVyKTsKLSAgICBpZiAoISpvaykgewotICAgICAgICBpZiAoIWRpZFJlYWROdW1iZXIpIHsKLSAg
ICAgICAgICAgIEFTU0VSVChpc25hbih2YWx1ZSkgfHwgIXZhbHVlKTsKLSAgICAgICAgICAgIHJl
cG9ydFZpZXdwb3J0V2FybmluZyhkb2N1bWVudCwgVW5yZWNvZ25pemVkVmlld3BvcnRBcmd1bWVu
dFZhbHVlRXJyb3IsIHZhbHVlU3RyaW5nLCBrZXlTdHJpbmcpOwotICAgICAgICAgICAgcmV0dXJu
IHZhbHVlOwotICAgICAgICB9Ci0gICAgICAgICpvayA9IHRydWU7Ci0gICAgICAgIHJlcG9ydFZp
ZXdwb3J0V2FybmluZyhkb2N1bWVudCwgVHJ1bmNhdGVkVmlld3BvcnRBcmd1bWVudFZhbHVlRXJy
b3IsIHZhbHVlU3RyaW5nLCBrZXlTdHJpbmcpOworICAgICAgICB2YWx1ZSA9IGNoYXJhY3RlcnNU
b0Zsb2F0KHZhbHVlU3RyaW5nLmNoYXJhY3RlcnMxNigpLCB2YWx1ZVN0cmluZy5sZW5ndGgoKSwg
cGFyc2VkTGVuZ3RoKTsKKyAgICBpZiAoIXBhcnNlZExlbmd0aCkgeworICAgICAgICByZXBvcnRW
aWV3cG9ydFdhcm5pbmcoZG9jdW1lbnQsIFVucmVjb2duaXplZFZpZXdwb3J0QXJndW1lbnRWYWx1
ZUVycm9yLCB2YWx1ZVN0cmluZywga2V5U3RyaW5nKTsKKyAgICAgICAgaWYgKG9rKQorICAgICAg
ICAgICAgKm9rID0gZmFsc2U7CisgICAgICAgIHJldHVybiAwOwogICAgIH0KKyAgICBpZiAocGFy
c2VkTGVuZ3RoIDwgdmFsdWVTdHJpbmcubGVuZ3RoKCkpCisgICAgICAgIHJlcG9ydFZpZXdwb3J0
V2FybmluZyhkb2N1bWVudCwgVHJ1bmNhdGVkVmlld3BvcnRBcmd1bWVudFZhbHVlRXJyb3IsIHZh
bHVlU3RyaW5nLCBrZXlTdHJpbmcpOworICAgIGlmIChvaykKKyAgICAgICAgKm9rID0gdHJ1ZTsK
ICAgICByZXR1cm4gdmFsdWU7CiB9CiAKQEAgLTI0MywxMCArMjM5LDcgQEAgc3RhdGljIGZsb2F0
IGZpbmRTaXplVmFsdWUoY29uc3QgU3RyaW5nJgogICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZSh2
YWx1ZVN0cmluZywgImRldmljZS1oZWlnaHQiKSkKICAgICAgICAgcmV0dXJuIFZpZXdwb3J0QXJn
dW1lbnRzOjpWYWx1ZURldmljZUhlaWdodDsKIAotICAgIGJvb2wgb2s7Ci0gICAgZmxvYXQgdmFs
dWUgPSBudW1lcmljUHJlZml4KGtleVN0cmluZywgdmFsdWVTdHJpbmcsIGRvY3VtZW50LCAmb2sp
OwotICAgIGlmICghb2spCi0gICAgICAgIHJldHVybiBmbG9hdCgwLjApOworICAgIGZsb2F0IHZh
bHVlID0gbnVtZXJpY1ByZWZpeChrZXlTdHJpbmcsIHZhbHVlU3RyaW5nLCBkb2N1bWVudCk7CiAK
ICAgICBpZiAodmFsdWUgPCAwKQogICAgICAgICByZXR1cm4gVmlld3BvcnRBcmd1bWVudHM6OlZh
bHVlQXV0bzsKQEAgLTI2MywyMCArMjU2LDE3IEBAIHN0YXRpYyBmbG9hdCBmaW5kU2NhbGVWYWx1
ZShjb25zdCBTdHJpbmcKICAgICAvLyA1KSBubyBhbmQgdW5rbm93biB2YWx1ZXMgYXJlIHRyYW5z
bGF0ZWQgdG8gMC4wCiAKICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UodmFsdWVTdHJpbmcsICJ5
ZXMiKSkKLSAgICAgICAgcmV0dXJuIGZsb2F0KDEuMCk7CisgICAgICAgIHJldHVybiAxOwogICAg
IGlmIChlcXVhbElnbm9yaW5nQ2FzZSh2YWx1ZVN0cmluZywgIm5vIikpCi0gICAgICAgIHJldHVy
biBmbG9hdCgwLjApOworICAgICAgICByZXR1cm4gMDsKICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nh
c2UodmFsdWVTdHJpbmcsICJkZXNrdG9wLXdpZHRoIikpCi0gICAgICAgIHJldHVybiBmbG9hdCgx
MC4wKTsKKyAgICAgICAgcmV0dXJuIDEwOwogICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZSh2YWx1
ZVN0cmluZywgImRldmljZS13aWR0aCIpKQotICAgICAgICByZXR1cm4gZmxvYXQoMTAuMCk7Cisg
ICAgICAgIHJldHVybiAxMDsKICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UodmFsdWVTdHJpbmcs
ICJkZXZpY2UtaGVpZ2h0IikpCi0gICAgICAgIHJldHVybiBmbG9hdCgxMC4wKTsKKyAgICAgICAg
cmV0dXJuIDEwOwogCi0gICAgYm9vbCBvazsKLSAgICBmbG9hdCB2YWx1ZSA9IG51bWVyaWNQcmVm
aXgoa2V5U3RyaW5nLCB2YWx1ZVN0cmluZywgZG9jdW1lbnQsICZvayk7Ci0gICAgaWYgKCFvaykK
LSAgICAgICAgcmV0dXJuIGZsb2F0KDAuMCk7CisgICAgZmxvYXQgdmFsdWUgPSBudW1lcmljUHJl
Zml4KGtleVN0cmluZywgdmFsdWVTdHJpbmcsIGRvY3VtZW50KTsKIAogICAgIGlmICh2YWx1ZSA8
IDApCiAgICAgICAgIHJldHVybiBWaWV3cG9ydEFyZ3VtZW50czo6VmFsdWVBdXRvOwpAQCAtMzA0
LDEwICsyOTQsNyBAQCBzdGF0aWMgZmxvYXQgZmluZFVzZXJTY2FsYWJsZVZhbHVlKGNvbnN0CiAg
ICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKHZhbHVlU3RyaW5nLCAiZGV2aWNlLWhlaWdodCIpKQog
ICAgICAgICByZXR1cm4gMTsKIAotICAgIGJvb2wgb2s7Ci0gICAgZmxvYXQgdmFsdWUgPSBudW1l
cmljUHJlZml4KGtleVN0cmluZywgdmFsdWVTdHJpbmcsIGRvY3VtZW50LCAmb2spOwotICAgIGlm
ICghb2spCi0gICAgICAgIHJldHVybiAwOworICAgIGZsb2F0IHZhbHVlID0gbnVtZXJpY1ByZWZp
eChrZXlTdHJpbmcsIHZhbHVlU3RyaW5nLCBkb2N1bWVudCk7CiAKICAgICBpZiAoZmFicyh2YWx1
ZSkgPCAxKQogICAgICAgICByZXR1cm4gMDsKQEAgLTMzMSw3ICszMTgsNyBAQCBzdGF0aWMgZmxv
YXQgZmluZFRhcmdldERlbnNpdHlEUElWYWx1ZShjCiAgICAgaWYgKCFvaykKICAgICAgICAgcmV0
dXJuIFZpZXdwb3J0QXJndW1lbnRzOjpWYWx1ZUF1dG87CiAKLSAgICAgaWYgKHZhbHVlIDwgNzAg
fHwgdmFsdWUgPiA0MDApIHsKKyAgICBpZiAodmFsdWUgPCA3MCB8fCB2YWx1ZSA+IDQwMCkgewog
ICAgICAgICByZXBvcnRWaWV3cG9ydFdhcm5pbmcoZG9jdW1lbnQsIFRhcmdldERlbnNpdHlEcGlU
b29TbWFsbE9yTGFyZ2VFcnJvciwgU3RyaW5nKCksIFN0cmluZygpKTsKICAgICAgICAgcmV0dXJu
IFZpZXdwb3J0QXJndW1lbnRzOjpWYWx1ZUF1dG87CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNv
cmUvaHRtbC9wYXJzZXIvSFRNTFBhcnNlcklkaW9tcy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFBhcnNlcklkaW9tcy5jcHAJKHJldmlzaW9uIDExMzI3
NSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxQYXJzZXJJZGlvbXMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC03OSwxMCArNzksNyBAQCBib29sIHBhcnNlVG9Eb3VibGVGb3JOdW1i
ZXJUeXBlKGNvbnN0IFN0CiAgICAgZG91YmxlIHZhbHVlID0gc3RyaW5nLnRvRG91YmxlKCZ2YWxp
ZCk7CiAgICAgaWYgKCF2YWxpZCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gTmFO
IGFuZCBpbmZpbml0eSBhcmUgY29uc2lkZXJlZCB2YWxpZCBieSBTdHJpbmc6OnRvRG91YmxlLCBi
dXQgbm90IHZhbGlkIGhlcmUuCi0gICAgaWYgKCFpc2Zpbml0ZSh2YWx1ZSkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICBBU1NFUlQoaXNmaW5pdGUodmFsdWUpKTsKIAogICAgIC8vIE51bWJl
cnMgYXJlIGNvbnNpZGVyZWQgZmluaXRlIElFRUUgNzU0IHNpbmdsZS1wcmVjaXNpb24gZmxvYXRp
bmcgcG9pbnQgdmFsdWVzLgogICAgIC8vIFNlZSBIVE1MNSAyLjUuNC4zIGBSZWFsIG51bWJlcnMu
Jwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>135823</attachid>
            <date>2012-04-05 07:54:39 -0700</date>
            <delta_ts>2012-04-06 10:32:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-82857-20120405075438.patch</filename>
            <type>text/plain</type>
            <size>70476</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTEzMzIwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQxIEBA
CisyMDEyLTA0LTA0ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBT
dHJlYW1saW5lIHN0cnRvZCBhbmQgZml4IHNvbWUgcmVsYXRlZCBwcm9ibGVtcworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODI4NTcKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHBhcnNlci9MZXhlci5jcHA6
CisgICAgICAgIChKU0M6OkxleGVyPD46OmxleCk6IFVzZSBwYXJzZURvdWJsZS4gU2luY2Ugd2Ug
aGF2ZSBhbHJlYWR5IHNjYW5uZWQgdGhlIG51bWJlcgorICAgICAgICBhbmQgd2Uga25vdyBpdCBo
YXMgb25seSBjb3JyZWN0IGNoYXJhY3RlcnMsIGxlYWRpbmcgc3BhY2VzLCB0cmFpbGluZyBqdW5r
LCBhbmQKKyAgICAgICAgdHJhaWxpbmcgc3BhY2VzIGFyZSBub3QgYSBwb3NzaWJpbGl0eS4gTm8g
bmVlZCB0byBhZGQgYSB0cmFpbGluZyBudWxsIGNoYXJhY3Rlci4KKworICAgICAgICAqIHJ1bnRp
bWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpwYXJzZUludCk6
IENoYW5nZWQgb3ZlcmZsb3cgYmFzZWQgMTAgY2FzZSB0byB1c2UgcGFyc2VEb3VibGUuIE5vIG5l
ZWQKKyAgICAgICAgdG8gYWxsb3cgdHJhaWxpbmcganVuayBzaW5jZSB0aGUgY29kZSBhYm92ZSBh
bHJlYWR5IGFsbG93cyBvbmx5IG51bWVyaWMgZGlnaXRzCisgICAgICAgIGluIHRoZSBzdHJpbmcu
IFRoaXMgY29kZSBwYXRoIGlzIHVzZWQgb25seSBpbiB1bnVzdWFsIGNhc2VzLCBzbyBpdCdzIG5v
dAorICAgICAgICBvcHRpbWl6ZWQgZm9yIDgtYml0IHN0cmluZ3MsIGJ1dCBlYXNpbHkgY291bGQg
YmUuCisgICAgICAgIChKU0M6OmpzU3RyRGVjaW1hbExpdGVyYWwpOiBSZW1vdmVkIHRoZSBhbGxv
dyB0cmFpbGluZyBqdW5rIGFyZ3VtZW50IHRvIHRoaXMKKyAgICAgICAgZnVuY3Rpb24gdGVtcGxh
dGUgYmVjYXVzZSBhbGwgdGhlIGNhbGxlcnMgYXJlIE9LIHdpdGggdHJhaWxpbmcganVuay4gVXNl
IHRoZQorICAgICAgICBwYXJzZURvdWJsZSBmdW5jdGlvbi4gTm8gbmVlZCB0byBjb3B5IHRoZSBk
YXRhIGludG8gYSBieXRlIGJ1ZmZlciwgYmVjYXVzZQorICAgICAgICBwYXJzZURvdWJsZSBoYW5k
bGVzIHRoYXQuCisgICAgICAgIChKU0M6OnRvRG91YmxlKTogR290IHJpZCBvZiB0aGUgRGlzYWxs
b3dUcmFpbGluZ0p1bmsgYXJndW1lbnQgdG8gdGhlCisgICAgICAgIGpzU3RyRGVjaW1hbExpdGVy
YWwgZnVuY3Rpb24gdGVtcGxhdGUuIFRoYXQncyBPSyBiZWNhdXNlIHRoaXMgZnVuY3Rpb24KKyAg
ICAgICAgYWxyZWFkeSBjaGVja3MgZm9yIHRyYWlsaW5nIGp1bmsgYW5kIGhhbmRsZXMgaXQgYXBw
cm9wcmlhdGVseS4gVGhlIG9sZCBjb2RlCisgICAgICAgIHBhdGggd2FzIGRvaW5nIGl0IHR3aWNl
LgorICAgICAgICAoSlNDOjpwYXJzZUZsb2F0KTogR290IHJpZCBvZiB0aGUgQWxsb3dUcmFpbGlu
Z0p1bmsgYXJndW1lbnQgdG8gdGhlCisgICAgICAgIGpzU3RyRGVjaW1hbExpdGVyYWwgZnVuY3Rp
b24gdGVtcGxhdGU7IHRoZSB0ZW1wbGF0ZSBhbGxvd3MganVuayB1bmNvbmRpdGlvbmFsbHkuCisK
KyAgICAgICAgKiBydW50aW1lL0xpdGVyYWxQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjo6Okxl
eGVyOjpsZXhOdW1iZXIpOiBVc2UgcGFyc2VEb3VibGUuIFNpbmNlIHdlIGhhdmUgYWxyZWFkeSBz
Y2FubmVkIHRoZSBudW1iZXIKKyAgICAgICAgYW5kIHdlIGtub3cgaXQgaGFzIG9ubHkgY29ycmVj
dCBjaGFyYWN0ZXJzLCBsZWFkaW5nIHNwYWNlcywgdHJhaWxpbmcganVuaywgYW5kCisgICAgICAg
IHRyYWlsaW5nIHNwYWNlcyBhcmUgbm90IGEgcG9zc2liaWxpdHkuIE5vIG5lZWQgdG8gYWRkIGEg
dHJhaWxpbmcgbnVsbCBjaGFyYWN0ZXIuCisgICAgICAgIE5vIG5lZWQgdG8gY29weSB0aGUgZGF0
YSBpbnRvIGEgYnl0ZSBidWZmZXIsIGJlY2F1c2UgcGFyc2VEb3VibGUgaGFuZGxlcyB0aGF0Lgor
ICAgICAgICBXZSBjb3VsZCBvcHRpbWl6ZSB0aGUgVUNoYXIgY2FzZSBldmVuIG1vcmUgYmVjYXVz
ZSB3ZSBrbm93IGFsbCB0aGUgY2hhcmFjdGVycworICAgICAgICBhcmUgQVNDSUksIGJ1dCBub3Qg
ZG9pbmcgdGhhdCBhdCB0aGlzIHRpbWUuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52Y3By
b2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZGVmOiBVcGRhdGVkLgorCiAyMDEyLTA0
LTA1ICBQYXRyaWNrIEdhbnN0ZXJlciAgPHBhcm9nYUB3ZWJraXQub3JnPgogCiAgICAgICAgIFtX
aW5DRV0gUmVtb3ZlIHVubmVjZXNzYXJ5IGZ1bmN0aW9uIGRlY2xlcmF0aW9uCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLmRlZgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmRlZgkocmV2
aXNpb24gMTEzMzIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZj
cHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5kZWYJKHdvcmtpbmcgY29weSkKQEAg
LTEsMTMgKzEsOSBAQAogRVhQT1JUUwogCi0gICAgPz8kc3RydG9kQCQwMCQwMEBXVEZAQFlBTlBC
RFBBUEFEQFoKLSAgICA/PyRzdHJ0b2RAJDAwJDBBQEBXVEZAQFlBTlBCRFBBUEFEQFoKLSAgICA/
PyRzdHJ0b2RAJDBBQCQwMEBXVEZAQFlBTlBCRFBBUEFEQFoKLSAgICA/PyRzdHJ0b2RAJDBBQCQw
QUBAV1RGQEBZQU5QQkRQQVBBREBaCiAgICAgPz8wQXJyYXlCdWZmZXJWaWV3QFdURkBASUFFQFY/
JFBhc3NSZWZQdHJAVkFycmF5QnVmZmVyQFdURkBAQDFASUBaCi0gICAgPz8wQ29sbGF0b3JAV1RG
QEBRQUVAUEJEQFoKICAgICA/PzBDU3RyaW5nQFdURkBAUUFFQFBCREBaCiAgICAgPz8wQ1N0cmlu
Z0BXVEZAQFFBRUBQQkRJQFoKKyAgICA/PzBDb2xsYXRvckBXVEZAQFFBRUBQQkRAWgogICAgID8/
MERhdGVJbnN0YW5jZUBKU0NAQElBRUBQQVZFeGVjU3RhdGVAMUBQQVZTdHJ1Y3R1cmVAMUBAWgog
ICAgID8/MERlZmF1bHRHQ0FjdGl2aXR5Q2FsbGJhY2tASlNDQEBRQUVAUEFWSGVhcEAxQEBaCiAg
ICAgPz8wRHJvcEFsbExvY2tzQEpTTG9ja0BKU0NAQFFBRUBXNEpTTG9ja0JlaGF2aW9yQDJAQFoK
QEAgLTI1LDEwICsyMSwxMCBAQCBFWFBPUlRTCiAgICAgPz8wU3RyaW5nT2JqZWN0QEpTQ0BASUFF
QEFBVkpTR2xvYmFsRGF0YUAxQFBBVlN0cnVjdHVyZUAxQEBaCiAgICAgPz8wU3RydWN0dXJlQEpT
Q0BAQUFFQEFBVkpTR2xvYmFsRGF0YUAxQFBBVkpTR2xvYmFsT2JqZWN0QDFAVkpTVmFsdWVAMUBB
QlZUeXBlSW5mb0AxQFBCVUNsYXNzSW5mb0AxQEBaCiAgICAgPz8wVGhyZWFkQ29uZGl0aW9uQFdU
RkBAUUFFQFhaCi0gICAgPz8wVVN0cmluZ0BKU0NAQFFBRUBQQl9XQFoKLSAgICA/PzBVU3RyaW5n
QEpTQ0BAUUFFQFBCX1dJQFoKICAgICA/PzBVU3RyaW5nQEpTQ0BAUUFFQFBCREBaCiAgICAgPz8w
VVN0cmluZ0BKU0NAQFFBRUBQQkRJQFoKKyAgICA/PzBVU3RyaW5nQEpTQ0BAUUFFQFBCX1dAWgor
ICAgID8/MFVTdHJpbmdASlNDQEBRQUVAUEJfV0lAWgogICAgID8/MFdURlRocmVhZERhdGFAV1RG
QEBRQUVAWFoKICAgICA/PzBZYXJyUGF0dGVybkBZYXJyQEpTQ0BAUUFFQEFCVlVTdHJpbmdAMkBf
TjFQQVBCREBaCiAgICAgPz8xQXJyYXlCdWZmZXJWaWV3QFdURkBAVUFFQFhaCkBAIC00MiwxMCAr
MzgsMTYgQEAgRVhQT1JUUwogICAgID8/MVJlZkNvdW50ZWRMZWFrQ291bnRlckBXVEZAQFFBRUBY
WgogICAgID8/MVNvdXJjZVByb3ZpZGVyQ2FjaGVASlNDQEBRQUVAWFoKICAgICA/PzFUaHJlYWRD
b25kaXRpb25AV1RGQEBRQUVAWFoKLSAgICA/PzFXZWFrSGFuZGxlT3duZXJASlNDQEBVQUVAWFoK
ICAgICA/PzFXVEZUaHJlYWREYXRhQFdURkBAUUFFQFhaCisgICAgPz8xV2Vha0hhbmRsZU93bmVy
QEpTQ0BAVUFFQFhaCiAgICAgPz84SlNDQEBZQV9OQUJWVVN0cmluZ0AwQDBAWgogICAgID8/OFdU
RkBAWUFfTkFCVkNTdHJpbmdAMEAwQFoKKyAgICA/RWNtYVNjcmlwdENvbnZlcnRlckBEb3VibGVU
b1N0cmluZ0NvbnZlcnRlckBkb3VibGVfY29udmVyc2lvbkBXVEZAQFNBQUJWMTIzQFhaCisgICAg
P1N0cmluZ1RvRG91YmxlQFN0cmluZ1RvRG91YmxlQ29udmVydGVyQGRvdWJsZV9jb252ZXJzaW9u
QFdURkBAU0FOUEJESVBBSUBaCisgICAgP1RvRXhwb25lbnRpYWxARG91YmxlVG9TdHJpbmdDb252
ZXJ0ZXJAZG91YmxlX2NvbnZlcnNpb25AV1RGQEBRQkVfTk5IUEFWU3RyaW5nQnVpbGRlckAyM0BA
WgorICAgID9Ub0ZpeGVkQERvdWJsZVRvU3RyaW5nQ29udmVydGVyQGRvdWJsZV9jb252ZXJzaW9u
QFdURkBAUUJFX05OSFBBVlN0cmluZ0J1aWxkZXJAMjNAQFoKKyAgICA/VG9QcmVjaXNpb25ARG91
YmxlVG9TdHJpbmdDb252ZXJ0ZXJAZG91YmxlX2NvbnZlcnNpb25AV1RGQEBRQkVfTk5IUEFWU3Ry
aW5nQnVpbGRlckAyM0BAWgorICAgID9Ub1Nob3J0ZXN0QERvdWJsZVRvU3RyaW5nQ29udmVydGVy
QGRvdWJsZV9jb252ZXJzaW9uQFdURkBAUUJFX05OUEFWU3RyaW5nQnVpbGRlckAyM0BAWgogICAg
ID9hYnNvbHV0ZVRpbWVUb1dhaXRUaW1lb3V0SW50ZXJ2YWxAV1RGQEBZQUtOQFoKICAgICA/YWN0
aXZpdHlDYWxsYmFja0BIZWFwQEpTQ0BAUUFFUEFWR0NBY3Rpdml0eUNhbGxiYWNrQDJAWFoKICAg
ICA/YWRkQEF0b21pY1N0cmluZ0BXVEZAQENBP0FWPyRQYXNzUmVmUHRyQFZTdHJpbmdJbXBsQFdU
RkBAQDJAUEJEQFoKQEAgLTY0LDggKzY2LDggQEAgRVhQT1JUUwogICAgID9hZGRTdGF0aWNHbG9i
YWxzQEpTR2xvYmFsT2JqZWN0QEpTQ0BASUFFWFBBVUdsb2JhbFByb3BlcnR5SW5mb0AxMkBIQFoK
ICAgICA/YWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2VASlNPYmplY3RASlNDQEBRQUVYQUFWSlNHbG9i
YWxEYXRhQDJASUlAWgogICAgID9hbGxvY2F0ZVNsb3dDYXNlQE1hcmtlZEFsbG9jYXRvckBKU0NA
QEFBRVBBWFhaCi0gICAgP2FwcGVuZEBTdHJpbmdCdWlsZGVyQFdURkBAUUFFWFBCX1dJQFoKICAg
ICA/YXBwZW5kQFN0cmluZ0J1aWxkZXJAV1RGQEBRQUVYUEJFSUBaCisgICAgP2FwcGVuZEBTdHJp
bmdCdWlsZGVyQFdURkBAUUFFWFBCX1dJQFoKICAgICA/YXNjaWlAVVN0cmluZ0BKU0NAQFFCRT9B
VkNTdHJpbmdAV1RGQEBYWgogICAgID9hdHRhY2hARGVidWdnZXJASlNDQEBRQUVYUEFWSlNHbG9i
YWxPYmplY3RAMkBAWgogICAgID9icm9hZGNhc3RAVGhyZWFkQ29uZGl0aW9uQFdURkBAUUFFWFha
CkBAIC03MywxMCArNzUsMTAgQEAgRVhQT1JUUwogICAgID9idWZmZXJMZW5ndGhGb3JTdHJpbmdF
eHBvbmVudGlhbEBEZWNpbWFsTnVtYmVyQFdURkBAUUJFSVhaCiAgICAgP2J5dGVDb21waWxlQFlh
cnJASlNDQEBZQT9BVj8kUGFzc093blB0ckBVQnl0ZWNvZGVQYXR0ZXJuQFlhcnJASlNDQEBAV1RG
QEBBQVVZYXJyUGF0dGVybkAxMkBQQVZCdW1wUG9pbnRlckFsbG9jYXRvckA0QEBaCiAgICAgP2J5
dGVTaXplQFNvdXJjZVByb3ZpZGVyQ2FjaGVASlNDQEBRQkVJWFoKLSAgICA/Y2FsY3VsYXRlZEZ1
bmN0aW9uTmFtZUBEZWJ1Z2dlckNhbGxGcmFtZUBKU0NAQFFCRT9BVlVTdHJpbmdAMkBYWgogICAg
ID9jYWxjdWxhdGVEU1RPZmZzZXRAV1RGQEBZQU5OTkBaCiAgICAgP2NhbGN1bGF0ZVN0cmluZ0hh
c2hBbmRMZW5ndGhGcm9tVVRGOEBVbmljb2RlQFdURkBAWUFJUEJEMEFBSTFAWgogICAgID9jYWxj
dWxhdGVVVENPZmZzZXRAV1RGQEBZQUhYWgorICAgID9jYWxjdWxhdGVkRnVuY3Rpb25OYW1lQERl
YnVnZ2VyQ2FsbEZyYW1lQEpTQ0BAUUJFP0FWVVN0cmluZ0AyQFhaCiAgICAgP2NhbGxASlNDQEBZ
QT9BVkpTVmFsdWVAMUBQQVZFeGVjU3RhdGVAMUBWMjFAVzRDYWxsVHlwZUAxQEFCVENhbGxEYXRh
QDFAMUFCVkFyZ0xpc3RAMUBAWgogICAgID9jYWxsSG9zdEZ1bmN0aW9uQXNDb25zdHJ1Y3RvckBK
U0NAQFlJX0pQQVZFeGVjU3RhdGVAMUBAWgogICAgID9jYWxsT25NYWluVGhyZWFkQFdURkBAWUFY
UDZBWFBBWEBaMEBaCkBAIC04Niw4ICs4OCw4IEBAIEVYUE9SVFMKICAgICA/Y2hhbmdlUHJvdG90
eXBlVHJhbnNpdGlvbkBTdHJ1Y3R1cmVASlNDQEBTQVBBVjEyQEFBVkpTR2xvYmFsRGF0YUAyQFBB
VjEyQFZKU1ZhbHVlQDJAQFoKICAgICA/Y2hlY2tDdXJyZW50SWRlbnRpZmllclRhYmxlQElkZW50
aWZpZXJASlNDQEBDQVhQQVZFeGVjU3RhdGVAMkBAWgogICAgID9jaGVja0N1cnJlbnRJZGVudGlm
aWVyVGFibGVASWRlbnRpZmllckBKU0NAQENBWFBBVkpTR2xvYmFsRGF0YUAyQEBaCi0gICAgP2No
ZWNrc3VtQE1ENUBXVEZAQFFBRVhBQVY/JFZlY3RvckBFJDBCQUBAMkBAWgogICAgID9jaGVja1N5
bnRheEBKU0NAQFlBX05QQVZFeGVjU3RhdGVAMUBBQlZTb3VyY2VDb2RlQDFAUEFWSlNWYWx1ZUAx
QEBaCisgICAgP2NoZWNrc3VtQE1ENUBXVEZAQFFBRVhBQVY/JFZlY3RvckBFJDBCQUBAMkBAWgog
ICAgID9jbGFzc05hbWVASlNPYmplY3RASlNDQEBTQT9BVlVTdHJpbmdAMkBQQlYxMkBAWgogICAg
ID9jbGVhckBTb3VyY2VQcm92aWRlckNhY2hlQEpTQ0BAUUFFWFhaCiAgICAgP2NsZWFyQnVpbHRp
blN0cnVjdHVyZXNASlNHbG9iYWxEYXRhQEpTQ0BAUUFFWFhaCkBAIC0xNTksNyArMTYxLDYgQEAg
RVhQT1JUUwogICAgID9kaXNwbGF5TmFtZUBKU0Z1bmN0aW9uQEpTQ0BAUUFFP0JWVVN0cmluZ0Ay
QFBBVkV4ZWNTdGF0ZUAyQEBaCiAgICAgP2R0b2FAV1RGQEBZQVhRQUROQUFfTkFBSEFBSUBaCiAg
ICAgP2R1bXBTYW1wbGVEYXRhQEpTR2xvYmFsRGF0YUBKU0NAQFFBRVhQQVZFeGVjU3RhdGVAMkBA
WgotICAgID9FY21hU2NyaXB0Q29udmVydGVyQERvdWJsZVRvU3RyaW5nQ29udmVydGVyQGRvdWJs
ZV9jb252ZXJzaW9uQFdURkBAU0FBQlYxMjNAWFoKICAgICA/ZW1wdHlAU3RyaW5nSW1wbEBXVEZA
QFNBUEFWMTJAWFoKICAgICA/ZW51bWVyYWJsZUBQcm9wZXJ0eURlc2NyaXB0b3JASlNDQEBRQkVf
TlhaCiAgICAgP2VxdWFsVVRGMTZXaXRoVVRGOEBVbmljb2RlQFdURkBAWUFfTlBCX1cwUEJEMUBa
CkBAIC0yMTgsMTAgKzIxOSwxMCBAQCBFWFBPUlRTCiAgICAgP2dsb2JhbEV4ZWNASlNHbG9iYWxP
YmplY3RASlNDQEBRQUVQQVZFeGVjU3RhdGVAMkBYWgogICAgID9nbG9iYWxPYmplY3RDb3VudEBI
ZWFwQEpTQ0BAUUFFSVhaCiAgICAgP2dyb3dASGFuZGxlSGVhcEBKU0NAQEFBRVhYWgotICAgID9o
YXNoU2xvd0Nhc2VAU3RyaW5nSW1wbEBXVEZAQEFCRUlYWgogICAgID9oYXNJbnN0YW5jZUBKU09i
amVjdEBKU0NAQFNBX05QQVYxMkBQQVZFeGVjU3RhdGVAMkBWSlNWYWx1ZUAyQDJAWgogICAgID9o
YXNQcm9wZXJ0eUBKU09iamVjdEBKU0NAQFFCRV9OUEFWRXhlY1N0YXRlQDJAQUJWSWRlbnRpZmll
ckAyQEBaCiAgICAgP2hhc1Byb3BlcnR5QEpTT2JqZWN0QEpTQ0BAUUJFX05QQVZFeGVjU3RhdGVA
MkBJQFoKKyAgICA/aGFzaFNsb3dDYXNlQFN0cmluZ0ltcGxAV1RGQEBBQkVJWFoKICAgICA/aGVh
cEBIZWFwQEpTQ0BAU0FQQVYxMkBWSlNWYWx1ZUAyQEBaCiAgICAgP2luY3JlbWVudEBSZWZDb3Vu
dGVkTGVha0NvdW50ZXJAV1RGQEBRQUVYWFoKICAgICA/aW5pdEBBdG9taWNTdHJpbmdAV1RGQEBT
QVhYWgpAQCAtMjY4LDYgKzI2OSw3IEBAIEVYUE9SVFMKICAgICA/b2JqZWN0UHJvdG9GdW5jVG9T
dHJpbmdASlNDQEBZSV9KUEFWRXhlY1N0YXRlQDFAQFoKICAgICA/b2JqZWN0VHlwZUNvdW50c0BI
ZWFwQEpTQ0BAUUFFP0FWPyRQYXNzT3duUHRyQFY/JEhhc2hDb3VudGVkU2V0QFBCRFU/JFB0ckhh
c2hAUEJEQFdURkBAVT8kSGFzaFRyYWl0c0BQQkRAMkBAV1RGQEBAV1RGQEBYWgogICAgID9wYXJz
ZURhdGVGcm9tTnVsbFRlcm1pbmF0ZWRDaGFyYWN0ZXJzQFdURkBAWUFOUEJEQFoKKyAgICA/cGFy
c2VEb3VibGVGcm9tTG9uZ1N0cmluZ0BJbnRlcm5hbEBXVEZAQFlBTlBCX1dJQUFJQFoKICAgICA/
cHJvZmlsZXJAUHJvZmlsZXJASlNDQEBTQVBBVjEyQFhaCiAgICAgP3Byb3RlY3RASGVhcEBKU0NA
QFFBRVhWSlNWYWx1ZUAyQEBaCiAgICAgP3Byb3RlY3RlZEdsb2JhbE9iamVjdENvdW50QEhlYXBA
SlNDQEBRQUVJWFoKQEAgLTMwOSwxMCArMzExLDEwIEBAIEVYUE9SVFMKICAgICA/c2V0T3JkZXJM
b3dlckZpcnN0QENvbGxhdG9yQFdURkBAUUFFWF9OQFoKICAgICA/c2V0UHJvdG90eXBlQEpTT2Jq
ZWN0QEpTQ0BAUUFFWEFBVkpTR2xvYmFsRGF0YUAyQFZKU1ZhbHVlQDJAQFoKICAgICA/c2V0U2V0
dGVyQFByb3BlcnR5RGVzY3JpcHRvckBKU0NAQFFBRVhWSlNWYWx1ZUAyQEBaCi0gICAgP3NldHRl
ckBQcm9wZXJ0eURlc2NyaXB0b3JASlNDQEBRQkU/QVZKU1ZhbHVlQDJAWFoKICAgICA/c2V0VW5k
ZWZpbmVkQFByb3BlcnR5RGVzY3JpcHRvckBKU0NAQFFBRVhYWgogICAgID9zZXRVcFN0YXRpY0Z1
bmN0aW9uU2xvdEBKU0NAQFlBX05QQVZFeGVjU3RhdGVAMUBQQlZIYXNoRW50cnlAMUBQQVZKU09i
amVjdEAxQEFCVklkZW50aWZpZXJAMUBBQVZQcm9wZXJ0eVNsb3RAMUBAWgogICAgID9zZXRXcml0
YWJsZUBQcm9wZXJ0eURlc2NyaXB0b3JASlNDQEBRQUVYX05AWgorICAgID9zZXR0ZXJAUHJvcGVy
dHlEZXNjcmlwdG9yQEpTQ0BAUUJFP0FWSlNWYWx1ZUAyQFhaCiAgICAgP3Nocmlua1RvRml0QFN0
cmluZ0J1aWxkZXJAV1RGQEBRQUVYWFoKICAgICA/c2lnbmFsQFRocmVhZENvbmRpdGlvbkBXVEZA
QFFBRVhYWgogICAgID9zaW5nbGVDaGFyYWN0ZXJTdHJpbmdSZXBAU21hbGxTdHJpbmdzQEpTQ0BA
UUFFUEFWU3RyaW5nSW1wbEBXVEZAQEVAWgpAQCAtMzM4LDE1ICszNDAsMTEgQEAgRVhQT1JUUwog
ICAgID90bHNLZXlDb3VudEBXVEZAQFlBQUFKWFoKICAgICA/dGxzS2V5c0BXVEZAQFlBUEFLWFoK
ICAgICA/dG9Cb29sZWFuQEpTU3RyaW5nQEpTQ0BAUUJFX05QQVZFeGVjU3RhdGVAMkBAWgotICAg
ID9Ub0V4cG9uZW50aWFsQERvdWJsZVRvU3RyaW5nQ29udmVydGVyQGRvdWJsZV9jb252ZXJzaW9u
QFdURkBAUUJFX05OSFBBVlN0cmluZ0J1aWxkZXJAMjNAQFoKLSAgICA/VG9GaXhlZEBEb3VibGVU
b1N0cmluZ0NvbnZlcnRlckBkb3VibGVfY29udmVyc2lvbkBXVEZAQFFCRV9OTkhQQVZTdHJpbmdC
dWlsZGVyQDIzQEBaCiAgICAgP3RvSW50MzJASlNDQEBZQUhOQFoKICAgICA/dG9JbnRlZ2VyQEpT
VmFsdWVASlNDQEBRQkVOUEFWRXhlY1N0YXRlQDJAQFoKICAgICA/dG9OdW1iZXJTbG93Q2FzZUBK
U1ZhbHVlQEpTQ0BAQUJFTlBBVkV4ZWNTdGF0ZUAyQEBaCiAgICAgP3RvT2JqZWN0QEpTQ2VsbEBK
U0NAQFFCRVBBVkpTT2JqZWN0QDJAUEFWRXhlY1N0YXRlQDJAUEFWSlNHbG9iYWxPYmplY3RAMkBA
WgogICAgID90b09iamVjdFNsb3dDYXNlQEpTVmFsdWVASlNDQEBBQkVQQVZKU09iamVjdEAyQFBB
VkV4ZWNTdGF0ZUAyQFBBVkpTR2xvYmFsT2JqZWN0QDJAQFoKLSAgICA/VG9QcmVjaXNpb25ARG91
YmxlVG9TdHJpbmdDb252ZXJ0ZXJAZG91YmxlX2NvbnZlcnNpb25AV1RGQEBRQkVfTk5IUEFWU3Ry
aW5nQnVpbGRlckAyM0BAWgotICAgID9Ub1Nob3J0ZXN0QERvdWJsZVRvU3RyaW5nQ29udmVydGVy
QGRvdWJsZV9jb252ZXJzaW9uQFdURkBAUUJFX05OUEFWU3RyaW5nQnVpbGRlckAyM0BAWgogICAg
ID90b1N0cmluZ0BKU09iamVjdEBKU0NAQFFCRVBBVkpTU3RyaW5nQDJAUEFWRXhlY1N0YXRlQDJA
QFoKICAgICA/dG9TdHJpbmdEZWNpbWFsQERlY2ltYWxOdW1iZXJAV1RGQEBRQkVJUEFfV0lAWgog
ICAgID90b1N0cmluZ0V4cG9uZW50aWFsQERlY2ltYWxOdW1iZXJAV1RGQEBRQkVJUEFfV0lAWgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9MZXhlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9MZXhlci5jcHAJKHJldmlzaW9uIDExMzMy
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTGV4ZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xNDczLDE0ICsxNDczLDE0IEBAIHN0YXJ0OgogaW5OdW1iZXJBZnRlckRlY2ltYWxQ
b2ludDoKICAgICAgICAgICAgICAgICAgICAgcGFyc2VOdW1iZXJBZnRlckRlY2ltYWxQb2ludCgp
OwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoKG1fY3VycmVudCB8IDB4
MjApID09ICdlJykKKyAgICAgICAgICAgICAgICBpZiAoKG1fY3VycmVudCB8IDB4MjApID09ICdl
JykgewogICAgICAgICAgICAgICAgICAgICBpZiAoIXBhcnNlTnVtYmVyQWZ0ZXJFeHBvbmVudElu
ZGljYXRvcigpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBtX2xleEVycm9yTWVzc2FnZSA9
ICJOb24tbnVtYmVyIGZvdW5kIGFmdGVyIGV4cG9uZW50IGluZGljYXRvciI7CiAgICAgICAgICAg
ICAgICAgICAgICAgICBnb3RvIHJldHVybkVycm9yOwogICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgLy8gTnVsbC10ZXJtaW5hdGUgc3RyaW5nIGZvciBzdHJ0b2QuCi0gICAg
ICAgICAgICAgICAgbV9idWZmZXI4LmFwcGVuZCgnXDAnKTsKLSAgICAgICAgICAgICAgICB0b2tl
bkRhdGEtPmRvdWJsZVZhbHVlID0gV1RGOjpzdHJ0b2Q8V1RGOjpBbGxvd1RyYWlsaW5nSnVuaywg
V1RGOjpEaXNhbGxvd1RyYWlsaW5nU3BhY2VzPihyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIq
PihtX2J1ZmZlcjguZGF0YSgpKSwgMCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIHNpemVfdCBwYXJzZWRMZW5ndGg7CisgICAgICAgICAgICAgICAgdG9rZW5EYXRhLT5kb3Vi
bGVWYWx1ZSA9IHBhcnNlRG91YmxlKG1fYnVmZmVyOC5kYXRhKCksIG1fYnVmZmVyOC5zaXplKCks
IHBhcnNlZExlbmd0aCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICB0b2tlbiA9IE5VTUJF
UjsKICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9i
YWxPYmplY3RGdW5jdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcAkocmV2aXNpb24gMTEzMzIwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMp
IDE5OTktMjAwMiBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQogICogIENvcHlyaWdodCAo
QykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotICogIENvcHlyaWdodCAoQykgMjAw
MywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAy
MDA3LCAyMDA4LCAyMDA5LCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
ICBDb3B5cmlnaHQgKEMpIDIwMDcgQ2FtZXJvbiBad2FyaWNoIChjd3p3YXJpY2hAdXdhdGVybG9v
LmNhKQogICogIENvcHlyaWdodCAoQykgMjAwNyBNYWtzIE9ybG92aWNoCiAgKgpAQCAtMjk1LDE3
ICsyOTUsMjAgQEAgc3RhdGljIGRvdWJsZSBwYXJzZUludChjb25zdCBVU3RyaW5nJiBzLAogICAg
ICAgICBudW1iZXIgKz0gZGlnaXQ7CiAgICAgICAgICsrcDsKICAgICB9Ci0gICAgaWYgKG51bWJl
ciA+PSBtYW50aXNzYU92ZXJmbG93TG93ZXJCb3VuZCkgewotICAgICAgICBpZiAocmFkaXggPT0g
MTApCi0gICAgICAgICAgICBudW1iZXIgPSBXVEY6OnN0cnRvZDxXVEY6OkFsbG93VHJhaWxpbmdK
dW5rLCBXVEY6OkRpc2FsbG93VHJhaWxpbmdTcGFjZXM+KHMuc3Vic3RyaW5nU2hhcmluZ0ltcGwo
Zmlyc3REaWdpdFBvc2l0aW9uLCBwIC0gZmlyc3REaWdpdFBvc2l0aW9uKS51dGY4KCkuZGF0YSgp
LCAwKTsKLSAgICAgICAgZWxzZSBpZiAocmFkaXggPT0gMiB8fCByYWRpeCA9PSA0IHx8IHJhZGl4
ID09IDggfHwgcmFkaXggPT0gMTYgfHwgcmFkaXggPT0gMzIpCi0gICAgICAgICAgICBudW1iZXIg
PSBwYXJzZUludE92ZXJmbG93KHMuc3Vic3RyaW5nU2hhcmluZ0ltcGwoZmlyc3REaWdpdFBvc2l0
aW9uLCBwIC0gZmlyc3REaWdpdFBvc2l0aW9uKS51dGY4KCkuZGF0YSgpLCBwIC0gZmlyc3REaWdp
dFBvc2l0aW9uLCByYWRpeCk7Ci0gICAgfQogCiAgICAgLy8gMTIuIElmIFogaXMgZW1wdHksIHJl
dHVybiBOYU4uCiAgICAgaWYgKCFzYXdEaWdpdCkKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJp
Y19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCk7CiAKKyAgICAvLyBBbHRlcm5hdGUgY29kZSBw
YXRoIGZvciBjZXJ0YWluIGxhcmdlIG51bWJlcnMuCisgICAgaWYgKG51bWJlciA+PSBtYW50aXNz
YU92ZXJmbG93TG93ZXJCb3VuZCkgeworICAgICAgICBpZiAocmFkaXggPT0gMTApIHsKKyAgICAg
ICAgICAgIHNpemVfdCBwYXJzZWRMZW5ndGg7CisgICAgICAgICAgICBudW1iZXIgPSBwYXJzZURv
dWJsZShzLmNoYXJhY3RlcnMoKSArIGZpcnN0RGlnaXRQb3NpdGlvbiwgcCAtIGZpcnN0RGlnaXRQ
b3NpdGlvbiwgcGFyc2VkTGVuZ3RoKTsKKyAgICAgICAgfSBlbHNlIGlmIChyYWRpeCA9PSAyIHx8
IHJhZGl4ID09IDQgfHwgcmFkaXggPT0gOCB8fCByYWRpeCA9PSAxNiB8fCByYWRpeCA9PSAzMikK
KyAgICAgICAgICAgIG51bWJlciA9IHBhcnNlSW50T3ZlcmZsb3cocy5zdWJzdHJpbmdTaGFyaW5n
SW1wbChmaXJzdERpZ2l0UG9zaXRpb24sIHAgLSBmaXJzdERpZ2l0UG9zaXRpb24pLnV0ZjgoKS5k
YXRhKCksIHAgLSBmaXJzdERpZ2l0UG9zaXRpb24sIHJhZGl4KTsKKyAgICB9CisKICAgICAvLyAx
NS4gUmV0dXJuIHNpZ24geCBudW1iZXIuCiAgICAgcmV0dXJuIHNpZ24gKiBudW1iZXI7CiB9CkBA
IC0zNTYsMjUgKzM1OSwxNSBAQCBzdGF0aWMgZG91YmxlIGpzSGV4SW50ZWdlckxpdGVyYWwoY29u
c3QgCiB9CiAKIC8vIFNlZSBlY21hLTI2MiA5LjMuMQotdGVtcGxhdGUgPFdURjo6QWxsb3dUcmFp
bGluZ0p1bmtUYWcgYWxsb3dUcmFpbGluZ0p1bmssIHR5cGVuYW1lIENoYXJUeXBlPgordGVtcGxh
dGUgPHR5cGVuYW1lIENoYXJUeXBlPgogc3RhdGljIGRvdWJsZSBqc1N0ckRlY2ltYWxMaXRlcmFs
KGNvbnN0IENoYXJUeXBlKiYgZGF0YSwgY29uc3QgQ2hhclR5cGUqIGVuZCkKIHsKICAgICBBU1NF
UlQoZGF0YSA8IGVuZCk7CiAKLSAgICAvLyBDb3B5IHRoZSBzdGluZyBpbnRvIGEgbnVsbC10ZXJt
aW5hdGVkIGJ5dGUgYnVmZmVyLCBhbmQgY2FsbCBzdHJ0b2QuCi0gICAgVmVjdG9yPGNoYXIsIDMy
PiBieXRlQnVmZmVyOwotICAgIGZvciAoY29uc3QgQ2hhclR5cGUqIGNoYXJhY3RlcnMgPSBkYXRh
OyBjaGFyYWN0ZXJzIDwgZW5kOyArK2NoYXJhY3RlcnMpIHsKLSAgICAgICAgQ2hhclR5cGUgY2hh
cmFjdGVyID0gKmNoYXJhY3RlcnM7Ci0gICAgICAgIGJ5dGVCdWZmZXIuYXBwZW5kKGlzQVNDSUko
Y2hhcmFjdGVyKSA/IHN0YXRpY19jYXN0PGNoYXI+KGNoYXJhY3RlcikgOiAwKTsKLSAgICB9Ci0g
ICAgYnl0ZUJ1ZmZlci5hcHBlbmQoMCk7Ci0gICAgY2hhciogZW5kT2ZOdW1iZXI7Ci0gICAgZG91
YmxlIG51bWJlciA9IFdURjo6c3RydG9kPGFsbG93VHJhaWxpbmdKdW5rLCBXVEY6OkFsbG93VHJh
aWxpbmdTcGFjZXM+KGJ5dGVCdWZmZXIuZGF0YSgpLCAmZW5kT2ZOdW1iZXIpOwotCi0gICAgLy8g
Q2hlY2sgaWYgc3RydG9kIGZvdW5kIGEgbnVtYmVyOyBpZiBzbyByZXR1cm4gaXQuCi0gICAgcHRy
ZGlmZl90IGNvbnN1bWVkID0gZW5kT2ZOdW1iZXIgLSBieXRlQnVmZmVyLmRhdGEoKTsKLSAgICBp
ZiAoY29uc3VtZWQpIHsKLSAgICAgICAgZGF0YSArPSBjb25zdW1lZDsKKyAgICBzaXplX3QgcGFy
c2VkTGVuZ3RoOworICAgIGRvdWJsZSBudW1iZXIgPSBwYXJzZURvdWJsZShkYXRhLCBlbmQgLSBk
YXRhLCBwYXJzZWRMZW5ndGgpOworICAgIGlmIChwYXJzZWRMZW5ndGgpIHsKKyAgICAgICAgZGF0
YSArPSBwYXJzZWRMZW5ndGg7CiAgICAgICAgIHJldHVybiBudW1iZXI7CiAgICAgfQogCkBAIC00
MjUsNyArNDE4LDcgQEAgc3RhdGljIGRvdWJsZSB0b0RvdWJsZShjb25zdCBDaGFyVHlwZSogYwog
ICAgIGlmIChjaGFyYWN0ZXJzWzBdID09ICcwJyAmJiBjaGFyYWN0ZXJzICsgMiA8IGVuZENoYXJh
Y3RlcnMgJiYgKGNoYXJhY3RlcnNbMV0gfCAweDIwKSA9PSAneCcgJiYgaXNBU0NJSUhleERpZ2l0
KGNoYXJhY3RlcnNbMl0pKQogICAgICAgICBudW1iZXIgPSBqc0hleEludGVnZXJMaXRlcmFsKGNo
YXJhY3RlcnMsIGVuZENoYXJhY3RlcnMpOwogICAgIGVsc2UKLSAgICAgICAgbnVtYmVyID0ganNT
dHJEZWNpbWFsTGl0ZXJhbDxXVEY6OkRpc2FsbG93VHJhaWxpbmdKdW5rPihjaGFyYWN0ZXJzLCBl
bmRDaGFyYWN0ZXJzKTsKKyAgICAgICAgbnVtYmVyID0ganNTdHJEZWNpbWFsTGl0ZXJhbChjaGFy
YWN0ZXJzLCBlbmRDaGFyYWN0ZXJzKTsKICAgICAKICAgICAvLyBBbGxvdyB0cmFpbGluZyB3aGl0
ZSBzcGFjZS4KICAgICBmb3IgKDsgY2hhcmFjdGVycyA8IGVuZENoYXJhY3RlcnM7ICsrY2hhcmFj
dGVycykgewpAQCAtNDgyLDcgKzQ3NSw3IEBAIHN0YXRpYyBkb3VibGUgcGFyc2VGbG9hdChjb25z
dCBVU3RyaW5nJiAKICAgICAgICAgaWYgKGRhdGEgPT0gZW5kKQogICAgICAgICAgICAgcmV0dXJu
IHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCk7CiAKLSAgICAgICAgcmV0
dXJuIGpzU3RyRGVjaW1hbExpdGVyYWw8V1RGOjpBbGxvd1RyYWlsaW5nSnVuaz4oZGF0YSwgZW5k
KTsKKyAgICAgICAgcmV0dXJuIGpzU3RyRGVjaW1hbExpdGVyYWwoZGF0YSwgZW5kKTsKICAgICB9
CiAKICAgICBjb25zdCBVQ2hhciogZGF0YSA9IHMuY2hhcmFjdGVyczE2KCk7CkBAIC00OTgsNyAr
NDkxLDcgQEAgc3RhdGljIGRvdWJsZSBwYXJzZUZsb2F0KGNvbnN0IFVTdHJpbmcmIAogICAgIGlm
IChkYXRhID09IGVuZCkKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91Ymxl
Pjo6cXVpZXRfTmFOKCk7CiAKLSAgICByZXR1cm4ganNTdHJEZWNpbWFsTGl0ZXJhbDxXVEY6OkFs
bG93VHJhaWxpbmdKdW5rPihkYXRhLCBlbmQpOworICAgIHJldHVybiBqc1N0ckRlY2ltYWxMaXRl
cmFsKGRhdGEsIGVuZCk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFs
RnVuY0V2YWwoRXhlY1N0YXRlKiBleGVjKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvTGl0ZXJhbFBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvTGl0ZXJhbFBhcnNlci5jcHAJKHJldmlzaW9uIDExMzMyMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xpdGVyYWxQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01MjksMTYgKzUyOSw4IEBAIFRva2VuVHlwZSBMaXRlcmFsUGFyc2VyPENoYXJUeXBlPjo6
TGV4ZXIKICAgICAKICAgICB0b2tlbi50eXBlID0gVG9rTnVtYmVyOwogICAgIHRva2VuLmVuZCA9
IG1fcHRyOwotICAgIFZlY3RvcjxjaGFyLCA2ND4gYnVmZmVyKHRva2VuLmVuZCAtIHRva2VuLnN0
YXJ0ICsgMSk7Ci0gICAgaW50IGk7Ci0gICAgZm9yIChpID0gMDsgaSA8IHRva2VuLmVuZCAtIHRv
a2VuLnN0YXJ0OyBpKyspIHsKLSAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PGNoYXI+KHRva2Vu
LnN0YXJ0W2ldKSA9PSB0b2tlbi5zdGFydFtpXSk7Ci0gICAgICAgIGJ1ZmZlcltpXSA9IHN0YXRp
Y19jYXN0PGNoYXI+KHRva2VuLnN0YXJ0W2ldKTsKLSAgICB9Ci0gICAgYnVmZmVyW2ldID0gMDsK
LSAgICBjaGFyKiBlbmQ7Ci0gICAgdG9rZW4ubnVtYmVyVG9rZW4gPSBXVEY6OnN0cnRvZDxXVEY6
OkFsbG93VHJhaWxpbmdKdW5rLCBXVEY6OkRpc2FsbG93VHJhaWxpbmdTcGFjZXM+KGJ1ZmZlci5k
YXRhKCksICZlbmQpOwotICAgIEFTU0VSVChidWZmZXIuZGF0YSgpICsgKHRva2VuLmVuZCAtIHRv
a2VuLnN0YXJ0KSA9PSBlbmQpOworICAgIHNpemVfdCBwYXJzZWRMZW5ndGg7CisgICAgdG9rZW4u
bnVtYmVyVG9rZW4gPSBwYXJzZURvdWJsZSh0b2tlbi5zdGFydCwgdG9rZW4uZW5kIC0gdG9rZW4u
c3RhcnQsIHBhcnNlZExlbmd0aCk7CiAgICAgcmV0dXJuIFRva051bWJlcjsKIH0KIApJbmRleDog
U291cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDExMzMyMCkKKysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMgKzEsNzEgQEAKKzIwMTItMDQtMDQgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUu
Y29tPgorCisgICAgICAgIFN0cmVhbWxpbmUgc3RydG9kIGFuZCBmaXggc29tZSByZWxhdGVkIHBy
b2JsZW1zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04
Mjg1NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJl
cGxhY2VkIHRoZSBzdHJ0b2QgZnVuY3Rpb24gdGVtcGxhdGUgd2l0aCBhIHBhcnNlRG91YmxlIGZ1
bmN0aW9uLCBlbGltaW5hdGluZworICAgICAgICB0aGUgZm9sbG93aW5nIHVubmVlZGVkIGZlYXR1
cmVzOgorCisgICAgICAgIC0gbmVlZCBmb3IgYSB0cmFpbGluZyBudWxsIGNoYXJhY3RlciBhbmQg
YSBjYWxsIHRvIHN0cmxlbgorICAgICAgICAtIG5lZWRsZXNzIGNvbnZlcnNpb24gb2Ygc3RyaW5n
IGxlbmd0aHMgZnJvbSBzaXplX3QgdG8gaW50IGFuZCBiYWNrIHRoYXQgY3JlYXRlZAorICAgICAg
ICAgIHRoZSBwb3NzaWJpbGl0eSBvZiBpbmNvcnJlY3QgdHJ1bmNhdGlvbgorICAgICAgICAtIG9u
ZSBsZXZlbCBvZiBmdW5jdGlvbiBjYWxsOyB1c2UgaW5saW5pbmcgaW5zdGVhZAorICAgICAgICAt
IGNvbnN0cnVjdGlvbiBvZiB0aGUgU3RyaW5nVG9Eb3VibGVDb252ZXJ0ZXIgb2JqZWN0OyBpdCB3
YXMgdXNlZCB0byBwYXNzCisgICAgICAgICAgYXJndW1lbnRzIHRoYXQgYXJlIGtub3duIGF0IGNv
bXBpbGUgdGltZQorICAgICAgICAtIG1vc3Qgb2YgdGhlIFN0cmluZ1RvRG91YmxlQ29udmVydGVy
OjpTdHJpbmdUb0RvdWJsZSBmdW5jdGlvbidzIGJvZHk7IGl0IHdhcworICAgICAgICAgIGNvZGUg
d2UgZGlkIG5vdCBuZWVkCisgICAgICAgIC0gcGFyc2luZyBvZiBJbmZpbml0eSBhbmQgTmFOIGF0
IHRoZSBzdHJ0b2QgbGV2ZWw7IGFkZGVkIHJlY2VudGx5IHdoZW4gd2UgbW92ZWQKKyAgICAgICAg
ICBmcm9tIHRoZSBvbGQgc3RydG9kIHRvIHRoZSBuZXcgb25lLCBhbmQgbm90IG5lZWRlZCBvciBo
ZWxwZnVsIGF0IHRoaXMgbGV2ZWwKKyAgICAgICAgLSBtdWx0aXBsZSBjb3BpZXMgb2YgY29kZSB0
byBuYXJyb3cgdG8gc2luZ2xlIGJ5dGUgc3RyaW5nczsgaW4gbWFueSBjYXNlcworICAgICAgICAg
IHRoaXMgd2FzIGRvbmUgZXZlbiB3aGVuIHN0YXJ0aW5nIHdpdGggYW4gTENoYXIgc3RyaW5nIHRo
YXQgaXMgYWxyZWFkeQorICAgICAgICAgIHNpbmdsZS1ieXRlLCBub3cgd2UgaGFuZGxlIHRoaXMg
d2l0aCBhbiBvdmVybG9hZCBvZiBwYXJzZURvdWJsZQorCisgICAgICAgICogd3RmL2R0b2EuY3Bw
OgorICAgICAgICBSZW1vdmVkIGEgbG9uZyBjb21tZW50IGFib3V0IHRoZSBvcmlnaW5hbCBzdHJ0
b2QgZnVuY3Rpb24gdGhhdCBubyBsb25nZXIKKyAgICAgICAgYXBwbGllcyBzaW5jZSB3ZSBkZWxl
dGVkIHRoYXQgZnVuY3Rpb24gbG9uZyBhZ28uIFJlbW92ZWQgYSBsb3Qgb2YgaW5jbHVkZXMuCisg
ICAgICAgIFJlbW92ZWQgdGhlIHN0cnRvZCBmdW5jdGlvbiB0ZW1wbGF0ZXMgYW5kIGl0cyBpbnN0
YW50aWF0aW9ucywgc2luY2UgdGhleQorICAgICAgICBhcmUgbm93IHJlcGxhY2VkIGJ5IHRoZSBw
YXJzZURvdWJsZSBmdW5jdGlvbi4KKyAgICAgICAgKFdURjo6SW50ZXJuYWw6OnBhcnNlRG91Ymxl
RnJvbUxvbmdTdHJpbmcpOiBBZGRlZC4KKyAgICAgICAgKiB3dGYvZHRvYS5oOgorICAgICAgICBB
ZGRlZCBhbiBpbmNsdWRlIG9mIEFTQ0lJQ1R5cGUuaCBzbyB3ZSBjYW4gdXNlIGlzQVNDSUkgaW4g
YSBmdW5jdGlvbiBpbiB0aGlzCisgICAgICAgIGhlYWRlci4gTGVmdCB0aGUgaGVyZXRvZm9yZSB1
bm5lZWRlZCBpbmNsdWRlIG9mIGRvdWJsZS1jb252ZXJzaW9uLmgsIHNpbmNlIHdlCisgICAgICAg
IG5vdyB3YW50IHRvIHVzZSBpdCBpbiBhIGZ1bmN0aW9uIGluIHRoaXMgaGVhZGVyLiBSZW1vdmVk
IHRoZSBBbGxvd1RyYWlsaW5nSnVua1RhZworICAgICAgICBhbmQgQWxsb3dUcmFpbGluZ1NwYWNl
c1RhZyBlbnVtZXJhdGlvbnMgYW5kIHRoZSBzdHJ0b2QgZnVuY3Rpb24gdGVtcGxhdGUuIEFkZGVk
CisgICAgICAgIG5ldyBwYXJzZURvdWJsZSBmdW5jdGlvbiwgYW5kIGlubGluZSBpbXBsZW1lbnRh
dGlvbiBvZiBpdC4KKworICAgICAgICAqIHd0Zi9kdG9hL2RvdWJsZS1jb252ZXJzaW9uLmNjOiBS
ZW1vdmVkIHF1aXRlIGEgYml0IG9mIHVudXNlZCBjb2RlLCBoYXJkY29kaW5nCisgICAgICAgIGFs
bCB0aGUgU3RyaW5nVG9Eb3VibGUgZnVuY3Rpb24gYXJndW1lbnRzIHRoYXQgY29tZSBmcm9tIGRh
dGEgbWVtYmVycyBzbyBpdCBjYW4KKyAgICAgICAgYmUgYSBtdWNoIHNtYWxsZXIgc3RhdGljIG1l
bWJlciBmdW5jdGlvbi4gQWxzbyBjaGFuZ2VkIHRoZSB0eXBlcyBvZiBhcmd1bWVudHMKKyAgICAg
ICAgZnJvbSBpbnQgdG8gc2l6ZV90LgorICAgICAgICAqIHd0Zi9kdG9hL2RvdWJsZS1jb252ZXJz
aW9uLmg6IFJlbW92ZWQgbW9zdCBvZiB0aGUgU3RyaW5nVG9Eb3VibGVDb252ZXJ0ZXIKKyAgICAg
ICAgY2xhc3MsIGxlYXZpbmcgb25seSB0aGUgY29udmVyc2lvbiBmdW5jdGlvbiBhcyBhIHN0YXRp
YyBtZW1iZXIgZnVuY3Rpb24uCisKKyAgICAgICAgKiB3dGYvdGV4dC9TdHJpbmdJbXBsLmNwcDoK
KyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6dG9Eb3VibGUpOiBHb3QgcmlkIG9mIGRpZFJlYWRO
dW1iZXIuCisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OnRvRmxvYXQpOiBEaXR0by4KKyAgICAg
ICAgKiB3dGYvdGV4dC9TdHJpbmdJbXBsLmg6IERpdHRvLgorICAgICAgICAqIHd0Zi90ZXh0L1dU
RlN0cmluZy5jcHA6CisgICAgICAgIChXVEY6OlN0cmluZzo6dG9Eb3VibGUpOiBHb3QgcmlkIG9m
IGRpZFJlYWROdW1iZXIuCisgICAgICAgIChXVEY6OlN0cmluZzo6dG9GbG9hdCk6IERpdHRvLgor
ICAgICAgICAoV1RGOjp0b0RvdWJsZVR5cGUpOiBSZXdyb3RlIHRoaXMgZnVuY3Rpb24gdG8gdXNl
IHBhcnNlRG91YmxlLiBNb3ZlZCB0aGUgY29kZQorICAgICAgICB0byBza2lwIGxlYWRpbmcgc3Bh
Y2VzIGhlcmUsIGJlY2F1c2Ugb3RoZXIgY2FsbGVycyBvZiBwYXJzZURvdWJsZSBkb24ndCB3YW50
CisgICAgICAgIHRvIGRvIHRoYXQuIFJlcHVycG9zZWQgdGhlIGNoZWNrIGZvciBhbiBlbXB0eSBz
dHJpbmcgc28gaXQncyBub3cgdGhlIHNhbWUKKyAgICAgICAgY29kZSBzaGFyZWQgYnkgYWxsIHRo
ZSAicGFyc2VkIG5vdGhpbmciIGNhc2VzLiBSZW1vdmVkIHRoZSBjb2RlIHRvIGNvbnZlcnQKKyAg
ICAgICAgdGhlIGJ1ZmZlciB0byBBU0NJSSBmb3IgdHdvIHJlYXNvbnM6ICgxKSBXZSBkb24ndCBu
ZWVkIHRoYXQgY29kZSBhdCBhbGwgd2hlbgorICAgICAgICBDaGFyVHlwZSBpcyBMQ2hhciwgYW5k
ICgyKSBXZSBub3cgaGFuZGxlIHRoaXMgdGhyb3VnaCB0aGUgdHdvIG92ZXJsb2FkcyBmb3IKKyAg
ICAgICAgdGhlIHBhcnNlRG91YmxlIGZ1bmN0aW9uLiBEaXNhbGxvd2luZyB0cmFpbGluZyBqdW5r
IGlzIG5vdyBoYW5kbGVkIGhlcmUsCisgICAgICAgIHJhdGhlciB0aGFuIGluc2lkZSBwYXJzZURv
dWJsZS4KKyAgICAgICAgKFdURjo6Y2hhcmFjdGVyc1RvRG91YmxlKTogVXBkYXRlZCBmb3IgY2hh
bmdlcyB0byB0b0RvdWJsZVR5cGUuIFJlbW92ZWQgdGhlCisgICAgICAgIGRpZFJlYWROdW1iZXIg
YXJndW1lbnQuCisgICAgICAgIChXVEY6OmNoYXJhY3RlcnNUb0Zsb2F0KTogRGl0dG8uIEFsc28g
YWRkZWQgb3ZlcmxvYWRzIHRoYXQgcmV0dXJuIHRoZSBwYXJzZWQKKyAgICAgICAgbGVuZ3RoLiBU
aGVzZSBhcmUgYSBzbGlnaHRseSBtb3JlIHBvd2VyZnVsIHdheSB0byBkbyB3aGF0IGRpZFJlYWRO
dW1iZXIgd2FzCisgICAgICAgIHVzZWQgZm9yIGJlZm9yZS4KKworICAgICAgICAqIHd0Zi90ZXh0
L1dURlN0cmluZy5oOiBBZGRlZCBjb21tZW50cywgZWxpbWluYXRlZCBkaWRSZWFkTnVtYmVyLCBh
bmQgYWRkZWQKKyAgICAgICAgb3ZlcmxvYWRzIG9mIGNoYXJhY3RlcnNUb0Zsb2F0IHRoYXQgcmVw
bGFjZSBjaGFyYWN0ZXJzVG9GbG9hdElnbm9yaW5nSnVuay4KKwogMjAxMi0wNC0wNSAgUGF0cmlj
ayBHYW5zdGVyZXIgIDxwYXJvZ2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBbV2luQ0VdIFJlbW92
ZSB1bm5lY2Vzc2FyeSBmdW5jdGlvbiBkZWNsZXJhdGlvbgpJbmRleDogU291cmNlL1dURi93dGYv
ZHRvYS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvZHRvYS5jcHAJKHJldmlzaW9u
IDExMzMyMCkKKysrIFNvdXJjZS9XVEYvd3RmL2R0b2EuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
LDcgKzMsNyBAQAogICogVGhlIGF1dGhvciBvZiB0aGlzIHNvZnR3YXJlIGlzIERhdmlkIE0uIEdh
eS4KICAqCiAgKiBDb3B5cmlnaHQgKGMpIDE5OTEsIDIwMDAsIDIwMDEgYnkgTHVjZW50IFRlY2hu
b2xvZ2llcy4KLSAqIENvcHlyaWdodCAoQykgMjAwMiwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwg
MjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDIsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMTAsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFu
ZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQogICogcHVycG9zZSB3aXRob3V0IGZl
ZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGlzIGVudGlyZSBub3RpY2UKQEAg
LTMyLDU1ICszMiwxNCBAQAogICogZmlsZS4KICAqLwogCi0vKiBzdHJ0b2QgZm9yIElFRUUtYXJp
dGhtZXRpYyBtYWNoaW5lcy4KLSAqCi0gKiBUaGlzIHN0cnRvZCByZXR1cm5zIGEgbmVhcmVzdCBt
YWNoaW5lIG51bWJlciB0byB0aGUgaW5wdXQgZGVjaW1hbAotICogc3RyaW5nIChvciBzZXRzIGVy
cm5vIHRvIEVSQU5HRSkuICBXaXRoIElFRUUgYXJpdGhtZXRpYywgdGllcyBhcmUKLSAqIGJyb2tl
biBieSB0aGUgSUVFRSByb3VuZC1ldmVuIHJ1bGUuICBPdGhlcndpc2UgdGllcyBhcmUgYnJva2Vu
IGJ5Ci0gKiBiaWFzZWQgcm91bmRpbmcgKGFkZCBoYWxmIGFuZCBjaG9wKS4KLSAqCi0gKiBJbnNw
aXJlZCBsb29zZWx5IGJ5IFdpbGxpYW0gRC4gQ2xpbmdlcidzIHBhcGVyICJIb3cgdG8gUmVhZCBG
bG9hdGluZwotICogUG9pbnQgTnVtYmVycyBBY2N1cmF0ZWx5IiBbUHJvYy4gQUNNIFNJR1BMQU4g
JzkwLCBwcC4gOTItMTAxXS4KLSAqCi0gKiBNb2RpZmljYXRpb25zOgotICoKLSAqICAgIDEuIFdl
IG9ubHkgcmVxdWlyZSBJRUVFIGRvdWJsZS1wcmVjaXNpb24gYXJpdGhtZXRpYyAobm90IElFRUUg
ZG91YmxlLWV4dGVuZGVkKS4KLSAqICAgIDIuIFdlIGdldCBieSB3aXRoIGZsb2F0aW5nLXBvaW50
IGFyaXRobWV0aWMgaW4gYSBjYXNlIHRoYXQKLSAqICAgICAgICBDbGluZ2VyIG1pc3NlZCAtLSB3
aGVuIHdlJ3JlIGNvbXB1dGluZyBkICogMTBebgotICogICAgICAgIGZvciBhIHNtYWxsIGludGVn
ZXIgZCBhbmQgdGhlIGludGVnZXIgbiBpcyBub3QgdG9vCi0gKiAgICAgICAgbXVjaCBsYXJnZXIg
dGhhbiAyMiAodGhlIG1heGltdW0gaW50ZWdlciBrIGZvciB3aGljaAotICogICAgICAgIHdlIGNh
biByZXByZXNlbnQgMTBeayBleGFjdGx5KSwgd2UgbWF5IGJlIGFibGUgdG8KLSAqICAgICAgICBj
b21wdXRlIChkKjEwXmspICogMTBeKGUtaykgd2l0aCBqdXN0IG9uZSByb3VuZG9mZi4KLSAqICAg
IDMuIFJhdGhlciB0aGFuIGEgYml0LWF0LWEtdGltZSBhZGp1c3RtZW50IG9mIHRoZSBiaW5hcnkK
LSAqICAgICAgICByZXN1bHQgaW4gdGhlIGhhcmQgY2FzZSwgd2UgdXNlIGZsb2F0aW5nLXBvaW50
Ci0gKiAgICAgICAgYXJpdGhtZXRpYyB0byBkZXRlcm1pbmUgdGhlIGFkanVzdG1lbnQgdG8gd2l0
aGluCi0gKiAgICAgICAgb25lIGJpdDsgb25seSBpbiByZWFsbHkgaGFyZCBjYXNlcyBkbyB3ZSBu
ZWVkIHRvCi0gKiAgICAgICAgY29tcHV0ZSBhIHNlY29uZCByZXNpZHVhbC4KLSAqICAgIDQuIEJl
Y2F1c2Ugb2YgMy4sIHdlIGRvbid0IG5lZWQgYSBsYXJnZSB0YWJsZSBvZiBwb3dlcnMgb2YgMTAK
LSAqICAgICAgICBmb3IgdGVuLXRvLWUgKGp1c3Qgc29tZSBzbWFsbCB0YWJsZXMsIGUuZy4gb2Yg
MTBeawotICogICAgICAgIGZvciAwIDw9IGsgPD0gMjIpLgotICovCi0KICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJkdG9hLmgiCiAKLSNpZiBIQVZFKEVSUk5PX0gpCi0jaW5jbHVkZSA8
ZXJybm8uaD4KLSNlbmRpZgotI2luY2x1ZGUgPGZsb2F0Lmg+Ci0jaW5jbHVkZSA8bWF0aC5oPgot
I2luY2x1ZGUgPHN0ZGludC5oPgogI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RkbGli
Lmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL0Fsd2F5c0lubGluZS5oPgot
I2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4K
ICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4K
LSNpbmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0j
aW5jbHVkZSA8d3RmL2R0b2EvZG91YmxlLWNvbnZlcnNpb24uaD4KIAogI2lmIENPTVBJTEVSKE1T
VkMpCiAjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDI0NCkKQEAgLTY0OCwyOSArNjA3LDYgQEAg
c3RhdGljIGNvbnN0IGRvdWJsZSB0aW55dGVuc1tdID0geyAxZS0xNgogI2RlZmluZSBTY2FsZV9C
aXQgMHgxMAogI2RlZmluZSBuX2JpZ3RlbnMgNQogCi10ZW1wbGF0ZTxBbGxvd1RyYWlsaW5nSnVu
a1RhZyBhbGxvd1RyYWlsaW5nSnVuaywgQWxsb3dUcmFpbGluZ1NwYWNlc1RhZyBhbGxvd1RyYWls
aW5nU3BhY2VzPgotZG91YmxlIHN0cnRvZChjb25zdCBjaGFyKiBzMDAsIGNoYXIqKiBzZSkKLXsK
LSAgICBpbnQgbGVuZ3RoID0gc3RybGVuKHMwMCk7Ci0gICAgZG91YmxlX2NvbnZlcnNpb246OlN0
cmluZ1RvRG91YmxlQ29udmVydGVyIGNvbnZlcnRlcigKLSAgICAgICAgKGFsbG93VHJhaWxpbmdK
dW5rID8gZG91YmxlX2NvbnZlcnNpb246OlN0cmluZ1RvRG91YmxlQ29udmVydGVyOjpBTExPV19U
UkFJTElOR19KVU5LIDogMCkgfAotICAgICAgICAoYWxsb3dUcmFpbGluZ1NwYWNlcyA/IGRvdWJs
ZV9jb252ZXJzaW9uOjpTdHJpbmdUb0RvdWJsZUNvbnZlcnRlcjo6QUxMT1dfVFJBSUxJTkdfU1BB
Q0VTIDogMCkgfAotICAgICAgICBkb3VibGVfY29udmVyc2lvbjo6U3RyaW5nVG9Eb3VibGVDb252
ZXJ0ZXI6OkFMTE9XX0xFQURJTkdfU1BBQ0VTLAotICAgICAgICAwLjAsIAotICAgICAgICAoYWxs
b3dUcmFpbGluZ0p1bmsgPyBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1aWV0X05hTigp
IDogMC4wKSwgCi0gICAgICAgICJJbmZpbml0eSIsICJOYU4iKTsKLSAgICBpbnQgcHJvY2Vzc2Vk
Q2hhcmFjdGVyQ291bnQgPSAwOwotICAgIGRvdWJsZSByZXN1bHQgPSBjb252ZXJ0ZXIuU3RyaW5n
VG9Eb3VibGUoczAwLCBsZW5ndGgsICZwcm9jZXNzZWRDaGFyYWN0ZXJDb3VudCk7Ci0gICAgaWYg
KHNlKQotICAgICAgICAqc2UgPSBjb25zdF9jYXN0PGNoYXIqPihzMDAgKyBwcm9jZXNzZWRDaGFy
YWN0ZXJDb3VudCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdGVtcGxhdGUgZG91YmxlIHN0
cnRvZDxBbGxvd1RyYWlsaW5nSnVuaywgQWxsb3dUcmFpbGluZ1NwYWNlcz4oY29uc3QgY2hhcios
IGNoYXIqKik7Ci10ZW1wbGF0ZSBkb3VibGUgc3RydG9kPEFsbG93VHJhaWxpbmdKdW5rLCBEaXNh
bGxvd1RyYWlsaW5nU3BhY2VzPihjb25zdCBjaGFyKiwgY2hhcioqKTsKLXRlbXBsYXRlIGRvdWJs
ZSBzdHJ0b2Q8RGlzYWxsb3dUcmFpbGluZ0p1bmssIEFsbG93VHJhaWxpbmdTcGFjZXM+KGNvbnN0
IGNoYXIqLCBjaGFyKiopOwotdGVtcGxhdGUgZG91YmxlIHN0cnRvZDxEaXNhbGxvd1RyYWlsaW5n
SnVuaywgRGlzYWxsb3dUcmFpbGluZ1NwYWNlcz4oY29uc3QgY2hhciosIGNoYXIqKik7Ci0KIHN0
YXRpYyBBTFdBWVNfSU5MSU5FIGludCBxdW9yZW0oQmlnSW50JiBiLCBCaWdJbnQmIFMpCiB7CiAg
ICAgc2l6ZV90IG47CkBAIC0xMzYzLDQgKzEyOTksMTYgQEAgY29uc3QgY2hhciogbnVtYmVyVG9G
aXhlZFdpZHRoU3RyaW5nKGRvdQogICAgIHJldHVybiBidWlsZGVyLkZpbmFsaXplKCk7CiB9CiAK
K25hbWVzcGFjZSBJbnRlcm5hbCB7CisKK2RvdWJsZSBwYXJzZURvdWJsZUZyb21Mb25nU3RyaW5n
KGNvbnN0IFVDaGFyKiBzdHJpbmcsIHNpemVfdCBsZW5ndGgsIHNpemVfdCYgcGFyc2VkTGVuZ3Ro
KQoreworICAgIFZlY3RvcjxMQ2hhcj4gY29udmVyc2lvbkJ1ZmZlcihsZW5ndGgpOworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCisgICAgICAgIGNvbnZlcnNpb25CdWZm
ZXJbaV0gPSBpc0FTQ0lJKHN0cmluZ1tpXSkgPyBzdHJpbmdbaV0gOiAwOworICAgIHJldHVybiBw
YXJzZURvdWJsZShjb252ZXJzaW9uQnVmZmVyLmRhdGEoKSwgbGVuZ3RoLCBwYXJzZWRMZW5ndGgp
OworfQorCit9IC8vIG5hbWVzcGFjZSBJbnRlcm5hbAorCiB9IC8vIG5hbWVzcGFjZSBXVEYKSW5k
ZXg6IFNvdXJjZS9XVEYvd3RmL2R0b2EuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9k
dG9hLmgJKHJldmlzaW9uIDExMzMyMCkKKysrIFNvdXJjZS9XVEYvd3RmL2R0b2EuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMs
IDIwMDgsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKQEAgLTIxLDEzICsyMSwxNSBAQAogI2lmbmRlZiBXVEZfZHRvYV9oCiAjZGVmaW5l
IFdURl9kdG9hX2gKIAorI2luY2x1ZGUgPHd0Zi9BU0NJSUNUeXBlLmg+CiAjaW5jbHVkZSA8d3Rm
L2R0b2EvZG91YmxlLWNvbnZlcnNpb24uaD4KICNpbmNsdWRlIDx3dGYvdW5pY29kZS9Vbmljb2Rl
Lmg+CiAKIG5hbWVzcGFjZSBXVEYgeworCiBjbGFzcyBNdXRleDsKIAotZXh0ZXJuIFdURjo6TXV0
ZXgqIHNfZHRvYVA1TXV0ZXg7CitleHRlcm4gTXV0ZXgqIHNfZHRvYVA1TXV0ZXg7CiAKIHR5cGVk
ZWYgY2hhciBEdG9hQnVmZmVyWzgwXTsKIApAQCAtMzUsMjIgKzM3LDM4IEBAIFdURl9FWFBPUlRf
UFJJVkFURSB2b2lkIGR0b2EoRHRvYUJ1ZmZlciAKIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGR0
b2FSb3VuZFNGKER0b2FCdWZmZXIgcmVzdWx0LCBkb3VibGUgZGQsIGludCBuZGlnaXRzLCBib29s
JiBzaWduLCBpbnQmIGV4cG9uZW50LCB1bnNpZ25lZCYgcHJlY2lzaW9uKTsKIFdURl9FWFBPUlRf
UFJJVkFURSB2b2lkIGR0b2FSb3VuZERQKER0b2FCdWZmZXIgcmVzdWx0LCBkb3VibGUgZGQsIGlu
dCBuZGlnaXRzLCBib29sJiBzaWduLCBpbnQmIGV4cG9uZW50LCB1bnNpZ25lZCYgcHJlY2lzaW9u
KTsKIAotZW51bSBBbGxvd1RyYWlsaW5nSnVua1RhZyB7IERpc2FsbG93VHJhaWxpbmdKdW5rID0g
MCwgQWxsb3dUcmFpbGluZ0p1bmsgfTsKLWVudW0gQWxsb3dUcmFpbGluZ1NwYWNlc1RhZyB7IERp
c2FsbG93VHJhaWxpbmdTcGFjZXMgPSAwLCBBbGxvd1RyYWlsaW5nU3BhY2VzIH07Ci0KLS8vIHMw
MDogaW5wdXQgc3RyaW5nLiBNdXN0IG5vdCBiZSAwIGFuZCBtdXN0IGJlIHRlcm1pbmF0ZWQgYnkg
MC4KLS8vIHNlOiAqc2Ugd2lsbCBoYXZlIHRoZSBsYXN0IGNvbnN1bWVkIGNoYXJhY3RlciBwb3Np
dGlvbiArIDEuCi10ZW1wbGF0ZTxBbGxvd1RyYWlsaW5nSnVua1RhZyBhbGxvd1RyYWlsaW5nSnVu
aywgQWxsb3dUcmFpbGluZ1NwYWNlc1RhZyBhbGxvd1RyYWlsaW5nU3BhY2VzPgotZG91YmxlIHN0
cnRvZChjb25zdCBjaGFyKiBzMDAsIGNoYXIqKiBzZSk7Ci0KIC8vIFNpemUgPSA4MCBmb3Igc2l6
ZW9mKER0b2FCdWZmZXIpICsgc29tZSBzaWduIGJpdHMsIGRlY2ltYWwgcG9pbnQsICdlJywgZXhw
b25lbnQgZGlnaXRzLgogY29uc3QgdW5zaWduZWQgTnVtYmVyVG9TdHJpbmdCdWZmZXJMZW5ndGgg
PSA5NjsKIHR5cGVkZWYgY2hhciBOdW1iZXJUb1N0cmluZ0J1ZmZlcltOdW1iZXJUb1N0cmluZ0J1
ZmZlckxlbmd0aF07CiB0eXBlZGVmIFVDaGFyIE51bWJlclRvVVN0cmluZ0J1ZmZlcltOdW1iZXJU
b1N0cmluZ0J1ZmZlckxlbmd0aF07CisKIFdURl9FWFBPUlRfUFJJVkFURSBjb25zdCBjaGFyKiBu
dW1iZXJUb1N0cmluZyhkb3VibGUsIE51bWJlclRvU3RyaW5nQnVmZmVyKTsKIGNvbnN0IGNoYXIq
IG51bWJlclRvRml4ZWRQcmVjaXNpb25TdHJpbmcoZG91YmxlLCB1bnNpZ25lZCBzaWduaWZpY2Fu
dEZpZ3VyZXMsIE51bWJlclRvU3RyaW5nQnVmZmVyLCBib29sIHRydW5jYXRlVHJhaWxpbmdaZXJv
cyA9IGZhbHNlKTsKIGNvbnN0IGNoYXIqIG51bWJlclRvRml4ZWRXaWR0aFN0cmluZyhkb3VibGUs
IHVuc2lnbmVkIGRlY2ltYWxQbGFjZXMsIE51bWJlclRvU3RyaW5nQnVmZmVyKTsKIAorZG91Ymxl
IHBhcnNlRG91YmxlKGNvbnN0IExDaGFyKiBzdHJpbmcsIHNpemVfdCBsZW5ndGgsIHNpemVfdCYg
cGFyc2VkTGVuZ3RoKTsKK2RvdWJsZSBwYXJzZURvdWJsZShjb25zdCBVQ2hhciogc3RyaW5nLCBz
aXplX3QgbGVuZ3RoLCBzaXplX3QmIHBhcnNlZExlbmd0aCk7CisKK25hbWVzcGFjZSBJbnRlcm5h
bCB7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIGRvdWJsZSBwYXJzZURvdWJsZUZyb21Mb25nU3Ry
aW5nKGNvbnN0IFVDaGFyKiBzdHJpbmcsIHNpemVfdCBsZW5ndGgsIHNpemVfdCYgcGFyc2VkTGVu
Z3RoKTsKK30KKworaW5saW5lIGRvdWJsZSBwYXJzZURvdWJsZShjb25zdCBMQ2hhciogc3RyaW5n
LCBzaXplX3QgbGVuZ3RoLCBzaXplX3QmIHBhcnNlZExlbmd0aCkKK3sKKyAgICByZXR1cm4gZG91
YmxlX2NvbnZlcnNpb246OlN0cmluZ1RvRG91YmxlQ29udmVydGVyOjpTdHJpbmdUb0RvdWJsZShy
ZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihzdHJpbmcpLCBsZW5ndGgsICZwYXJzZWRMZW5n
dGgpOworfQorCitpbmxpbmUgZG91YmxlIHBhcnNlRG91YmxlKGNvbnN0IFVDaGFyKiBzdHJpbmcs
IHNpemVfdCBsZW5ndGgsIHNpemVfdCYgcGFyc2VkTGVuZ3RoKQoreworICAgIGNvbnN0IHNpemVf
dCBjb252ZXJzaW9uQnVmZmVyU2l6ZSA9IDY0OworICAgIGlmIChsZW5ndGggPiBjb252ZXJzaW9u
QnVmZmVyU2l6ZSkKKyAgICAgICAgcmV0dXJuIEludGVybmFsOjpwYXJzZURvdWJsZUZyb21Mb25n
U3RyaW5nKHN0cmluZywgbGVuZ3RoLCBwYXJzZWRMZW5ndGgpOworICAgIExDaGFyIGNvbnZlcnNp
b25CdWZmZXJbY29udmVyc2lvbkJ1ZmZlclNpemVdOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
c3RhdGljX2Nhc3Q8aW50PihsZW5ndGgpOyArK2kpCisgICAgICAgIGNvbnZlcnNpb25CdWZmZXJb
aV0gPSBpc0FTQ0lJKHN0cmluZ1tpXSkgPyBzdHJpbmdbaV0gOiAwOworICAgIHJldHVybiBwYXJz
ZURvdWJsZShjb252ZXJzaW9uQnVmZmVyLCBsZW5ndGgsIHBhcnNlZExlbmd0aCk7Cit9CisgICAg
CiB9IC8vIG5hbWVzcGFjZSBXVEYKIAogdXNpbmcgV1RGOjpOdW1iZXJUb1N0cmluZ0J1ZmZlcjsK
QEAgLTU4LDUgKzc2LDYgQEAgdXNpbmcgV1RGOjpOdW1iZXJUb1VTdHJpbmdCdWZmZXI7CiB1c2lu
ZyBXVEY6Om51bWJlclRvU3RyaW5nOwogdXNpbmcgV1RGOjpudW1iZXJUb0ZpeGVkUHJlY2lzaW9u
U3RyaW5nOwogdXNpbmcgV1RGOjpudW1iZXJUb0ZpeGVkV2lkdGhTdHJpbmc7Cit1c2luZyBXVEY6
OnBhcnNlRG91YmxlOwogCiAjZW5kaWYgLy8gV1RGX2R0b2FfaApJbmRleDogU291cmNlL1dURi93
dGYvZHRvYS9kb3VibGUtY29udmVyc2lvbi5jYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0
Zi9kdG9hL2RvdWJsZS1jb252ZXJzaW9uLmNjCShyZXZpc2lvbiAxMTMzMjApCisrKyBTb3VyY2Uv
V1RGL3d0Zi9kdG9hL2RvdWJsZS1jb252ZXJzaW9uLmNjCSh3b3JraW5nIGNvcHkpCkBAIC00MDks
MjEgKzQwOSw2IEBAIG5hbWVzcGFjZSBkb3VibGVfY29udmVyc2lvbiB7CiAgICAgfQogICAgIAog
ICAgIAotICAgIC8vIENvbnN1bWVzIHRoZSBnaXZlbiBzdWJzdHJpbmcgZnJvbSB0aGUgaXRlcmF0
b3IuCi0gICAgLy8gUmV0dXJucyBmYWxzZSwgaWYgdGhlIHN1YnN0cmluZyBkb2VzIG5vdCBtYXRj
aC4KLSAgICBzdGF0aWMgYm9vbCBDb25zdW1lU3ViU3RyaW5nKGNvbnN0IGNoYXIqKiBjdXJyZW50
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogZW5kLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogc3Vic3RyaW5nKSB7Ci0g
ICAgICAgIEFTU0VSVCgqKmN1cnJlbnQgPT0gKnN1YnN0cmluZyk7Ci0gICAgICAgIGZvciAoc3Vi
c3RyaW5nKys7ICpzdWJzdHJpbmcgIT0gJ1wwJzsgc3Vic3RyaW5nKyspIHsKLSAgICAgICAgICAg
ICsrKmN1cnJlbnQ7Ci0gICAgICAgICAgICBpZiAoKmN1cnJlbnQgPT0gZW5kIHx8ICoqY3VycmVu
dCAhPSAqc3Vic3RyaW5nKSByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgKysqY3Vy
cmVudDsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIAotICAgIAogICAgIC8vIE1h
eGltdW0gbnVtYmVyIG9mIHNpZ25pZmljYW50IGRpZ2l0cyBpbiBkZWNpbWFsIHJlcHJlc2VudGF0
aW9uLgogICAgIC8vIFRoZSBsb25nZXN0IHBvc3NpYmxlIGRvdWJsZSBpbiBkZWNpbWFsIHJlcHJl
c2VudGF0aW9uIGlzCiAgICAgLy8gKDJeNTMgLSAxKSAqIDIgXiAtMTA3NCB0aGF0IGlzICgyIF4g
NTMgLSAxKSAqIDUgXiAxMDc0IC8gMTAgXiAxMDc0CkBAIC00MzQsMTc1ICs0MTksMjggQEAgbmFt
ZXNwYWNlIGRvdWJsZV9jb252ZXJzaW9uIHsKICAgICBjb25zdCBpbnQga01heFNpZ25pZmljYW50
RGlnaXRzID0gNzcyOwogICAgIAogICAgIAotICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB3aGl0ZXNw
YWNlIGZvdW5kIGFuZCBmYWxzZSBpZiB0aGUgZW5kIGhhcyByZWFjaGVkLgotICAgIHN0YXRpYyBp
bmxpbmUgYm9vbCBBZHZhbmNlVG9Ob25zcGFjZShjb25zdCBjaGFyKiogY3VycmVudCwgY29uc3Qg
Y2hhciogZW5kKSB7Ci0gICAgICAgIHdoaWxlICgqY3VycmVudCAhPSBlbmQpIHsKLSAgICAgICAg
ICAgIHN3aXRjaCgqKmN1cnJlbnQpIHsKLSAgICAgICAgICAgIGNhc2UgJyAnOgotICAgICAgICAg
ICAgY2FzZSAnXHQnOgotICAgICAgICAgICAgY2FzZSAnXHYnOgotICAgICAgICAgICAgY2FzZSAn
XHInOgotICAgICAgICAgICAgY2FzZSAnXGYnOgotICAgICAgICAgICAgY2FzZSAnXG4nOiArKypj
dXJyZW50OyBjb250aW51ZTsKLSAgICAgICAgICAgIGRlZmF1bHQ6IHJldHVybiB0cnVlOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAg
Ci0gICAgCi0gICAgc3RhdGljIGJvb2wgaXNEaWdpdChpbnQgeCwgaW50IHJhZGl4KSB7Ci0gICAg
ICAgIHJldHVybiAoeCA+PSAnMCcgJiYgeCA8PSAnOScgJiYgeCA8ICcwJyArIHJhZGl4KQotICAg
ICAgICB8fCAocmFkaXggPiAxMCAmJiB4ID49ICdhJyAmJiB4IDwgJ2EnICsgcmFkaXggLSAxMCkK
LSAgICAgICAgfHwgKHJhZGl4ID4gMTAgJiYgeCA+PSAnQScgJiYgeCA8ICdBJyArIHJhZGl4IC0g
MTApOwotICAgIH0KLSAgICAKLSAgICAKICAgICBzdGF0aWMgZG91YmxlIFNpZ25lZFplcm8oYm9v
bCBzaWduKSB7CiAgICAgICAgIHJldHVybiBzaWduID8gLTAuMCA6IDAuMDsKICAgICB9CiAgICAg
CiAgICAgCi0gICAgLy8gUGFyc2luZyBpbnRlZ2VycyB3aXRoIHJhZGl4IDIsIDQsIDgsIDE2LCAz
Mi4gQXNzdW1lcyBjdXJyZW50ICE9IGVuZC4KLSAgICB0ZW1wbGF0ZSA8aW50IHJhZGl4X2xvZ18y
PgotICAgIHN0YXRpYyBkb3VibGUgUmFkaXhTdHJpbmdUb0RvdWJsZShjb25zdCBjaGFyKiBjdXJy
ZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBl
bmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc2lnbiwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhbGxvd190cmFpbGluZ19q
dW5rLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUganVua19z
dHJpbmdfdmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IGNoYXIqKiB0cmFpbGluZ19wb2ludGVyKSB7Ci0gICAgICAgIEFTU0VSVChjdXJyZW50ICE9IGVu
ZCk7Ci0gICAgICAgIAotICAgICAgICAvLyBTa2lwIGxlYWRpbmcgMHMuCi0gICAgICAgIHdoaWxl
ICgqY3VycmVudCA9PSAnMCcpIHsKLSAgICAgICAgICAgICsrY3VycmVudDsKLSAgICAgICAgICAg
IGlmIChjdXJyZW50ID09IGVuZCkgewotICAgICAgICAgICAgICAgICp0cmFpbGluZ19wb2ludGVy
ID0gZW5kOwotICAgICAgICAgICAgICAgIHJldHVybiBTaWduZWRaZXJvKHNpZ24pOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpbnQ2NF90IG51bWJlciA9IDA7
Ci0gICAgICAgIGludCBleHBvbmVudCA9IDA7Ci0gICAgICAgIGNvbnN0IGludCByYWRpeCA9ICgx
IDw8IHJhZGl4X2xvZ18yKTsKLSAgICAgICAgCi0gICAgICAgIGRvIHsKLSAgICAgICAgICAgIGlu
dCBkaWdpdDsKLSAgICAgICAgICAgIGlmICgqY3VycmVudCA+PSAnMCcgJiYgKmN1cnJlbnQgPD0g
JzknICYmICpjdXJyZW50IDwgJzAnICsgcmFkaXgpIHsKLSAgICAgICAgICAgICAgICBkaWdpdCA9
IHN0YXRpY19jYXN0PGNoYXI+KCpjdXJyZW50KSAtICcwJzsKLSAgICAgICAgICAgIH0gZWxzZSBp
ZiAocmFkaXggPiAxMCAmJiAqY3VycmVudCA+PSAnYScgJiYgKmN1cnJlbnQgPCAnYScgKyByYWRp
eCAtIDEwKSB7Ci0gICAgICAgICAgICAgICAgZGlnaXQgPSBzdGF0aWNfY2FzdDxjaGFyPigqY3Vy
cmVudCkgLSAnYScgKyAxMDsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAocmFkaXggPiAxMCAmJiAq
Y3VycmVudCA+PSAnQScgJiYgKmN1cnJlbnQgPCAnQScgKyByYWRpeCAtIDEwKSB7Ci0gICAgICAg
ICAgICAgICAgZGlnaXQgPSBzdGF0aWNfY2FzdDxjaGFyPigqY3VycmVudCkgLSAnQScgKyAxMDsK
LSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKGFsbG93X3RyYWlsaW5n
X2p1bmsgfHwgIUFkdmFuY2VUb05vbnNwYWNlKCZjdXJyZW50LCBlbmQpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBqdW5rX3N0cmluZ192YWx1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG51bWJlciA9IG51bWJlciAqIHJh
ZGl4ICsgZGlnaXQ7Ci0gICAgICAgICAgICBpbnQgb3ZlcmZsb3cgPSBzdGF0aWNfY2FzdDxpbnQ+
KG51bWJlciA+PiA1Myk7Ci0gICAgICAgICAgICBpZiAob3ZlcmZsb3cgIT0gMCkgewotICAgICAg
ICAgICAgICAgIC8vIE92ZXJmbG93IG9jY3VycmVkLiBOZWVkIHRvIGRldGVybWluZSB3aGljaCBk
aXJlY3Rpb24gdG8gcm91bmQgdGhlCi0gICAgICAgICAgICAgICAgLy8gcmVzdWx0LgotICAgICAg
ICAgICAgICAgIGludCBvdmVyZmxvd19iaXRzX2NvdW50ID0gMTsKLSAgICAgICAgICAgICAgICB3
aGlsZSAob3ZlcmZsb3cgPiAxKSB7Ci0gICAgICAgICAgICAgICAgICAgIG92ZXJmbG93X2JpdHNf
Y291bnQrKzsKLSAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3cgPj49IDE7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGludCBkcm9wcGVkX2Jp
dHNfbWFzayA9ICgoMSA8PCBvdmVyZmxvd19iaXRzX2NvdW50KSAtIDEpOwotICAgICAgICAgICAg
ICAgIGludCBkcm9wcGVkX2JpdHMgPSBzdGF0aWNfY2FzdDxpbnQ+KG51bWJlcikgJiBkcm9wcGVk
X2JpdHNfbWFzazsKLSAgICAgICAgICAgICAgICBudW1iZXIgPj49IG92ZXJmbG93X2JpdHNfY291
bnQ7Ci0gICAgICAgICAgICAgICAgZXhwb25lbnQgPSBvdmVyZmxvd19iaXRzX2NvdW50OwotICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGJvb2wgemVyb190YWlsID0gdHJ1ZTsKLSAg
ICAgICAgICAgICAgICB3aGlsZSAodHJ1ZSkgewotICAgICAgICAgICAgICAgICAgICArK2N1cnJl
bnQ7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50ID09IGVuZCB8fCAhaXNEaWdpdCgq
Y3VycmVudCwgcmFkaXgpKSBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgemVyb190YWlsID0g
emVyb190YWlsICYmICpjdXJyZW50ID09ICcwJzsKLSAgICAgICAgICAgICAgICAgICAgZXhwb25l
bnQgKz0gcmFkaXhfbG9nXzI7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgIGlmICghYWxsb3dfdHJhaWxpbmdfanVuayAmJiBBZHZhbmNlVG9Ob25z
cGFjZSgmY3VycmVudCwgZW5kKSkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4ganVua19z
dHJpbmdfdmFsdWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgICAgIGludCBtaWRkbGVfdmFsdWUgPSAoMSA8PCAob3ZlcmZsb3dfYml0c19jb3VudCAt
IDEpKTsKLSAgICAgICAgICAgICAgICBpZiAoZHJvcHBlZF9iaXRzID4gbWlkZGxlX3ZhbHVlKSB7
Ci0gICAgICAgICAgICAgICAgICAgIG51bWJlcisrOyAgLy8gUm91bmRpbmcgdXAuCi0gICAgICAg
ICAgICAgICAgfSBlbHNlIGlmIChkcm9wcGVkX2JpdHMgPT0gbWlkZGxlX3ZhbHVlKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIC8vIFJvdW5kaW5nIHRvIGV2ZW4gdG8gY29uc2lzdGVuY3kgd2l0aCBk
ZWNpbWFsczogaGFsZi13YXkgY2FzZSByb3VuZHMKLSAgICAgICAgICAgICAgICAgICAgLy8gdXAg
aWYgc2lnbmlmaWNhbnQgcGFydCBpcyBvZGQgYW5kIGRvd24gb3RoZXJ3aXNlLgotICAgICAgICAg
ICAgICAgICAgICBpZiAoKG51bWJlciAmIDEpICE9IDAgfHwgIXplcm9fdGFpbCkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgbnVtYmVyKys7ICAvLyBSb3VuZGluZyB1cC4KLSAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICAvLyBSb3VuZGluZyB1cCBtYXkgY2F1c2Ugb3ZlcmZsb3cuCi0gICAgICAgICAgICAg
ICAgaWYgKChudW1iZXIgJiAoKGludDY0X3QpMSA8PCA1MykpICE9IDApIHsKLSAgICAgICAgICAg
ICAgICAgICAgZXhwb25lbnQrKzsKLSAgICAgICAgICAgICAgICAgICAgbnVtYmVyID4+PSAxOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICsrY3VycmVudDsKLSAgICAgICAgfSB3aGlsZSAoY3VycmVudCAhPSBlbmQp
OwotICAgICAgICAKLSAgICAgICAgQVNTRVJUKG51bWJlciA8ICgoaW50NjRfdCkxIDw8IDUzKSk7
Ci0gICAgICAgIEFTU0VSVChzdGF0aWNfY2FzdDxpbnQ2NF90PihzdGF0aWNfY2FzdDxkb3VibGU+
KG51bWJlcikpID09IG51bWJlcik7Ci0gICAgICAgIAotICAgICAgICAqdHJhaWxpbmdfcG9pbnRl
ciA9IGN1cnJlbnQ7Ci0gICAgICAgIAotICAgICAgICBpZiAoZXhwb25lbnQgPT0gMCkgewotICAg
ICAgICAgICAgaWYgKHNpZ24pIHsKLSAgICAgICAgICAgICAgICBpZiAobnVtYmVyID09IDApIHJl
dHVybiAtMC4wOwotICAgICAgICAgICAgICAgIG51bWJlciA9IC1udW1iZXI7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZG91YmxlPihudW1iZXIpOwotICAg
ICAgICB9Ci0gICAgICAgIAotICAgICAgICBBU1NFUlQobnVtYmVyICE9IDApOwotICAgICAgICBy
ZXR1cm4gRG91YmxlKERpeUZwKG51bWJlciwgZXhwb25lbnQpKS52YWx1ZSgpOwotICAgIH0KLSAg
ICAKLSAgICAKICAgICBkb3VibGUgU3RyaW5nVG9Eb3VibGVDb252ZXJ0ZXI6OlN0cmluZ1RvRG91
YmxlKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgY2hhciogaW5wdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgbGVuZ3RoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50KiBwcm9jZXNzZWRfY2hhcmFjdGVyc19jb3VudCkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90
IGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNpemVfdCogcHJvY2Vzc2VkX2NoYXJhY3RlcnNfY291bnQpIHsKICAgICAgICAgY29uc3Qg
Y2hhciogY3VycmVudCA9IGlucHV0OwogICAgICAgICBjb25zdCBjaGFyKiBlbmQgPSBpbnB1dCAr
IGxlbmd0aDsKICAgICAgICAgCiAgICAgICAgICpwcm9jZXNzZWRfY2hhcmFjdGVyc19jb3VudCA9
IDA7CiAgICAgICAgIAotICAgICAgICBjb25zdCBib29sIGFsbG93X3RyYWlsaW5nX2p1bmsgPSAo
ZmxhZ3NfICYgQUxMT1dfVFJBSUxJTkdfSlVOSykgIT0gMDsKLSAgICAgICAgY29uc3QgYm9vbCBh
bGxvd19sZWFkaW5nX3NwYWNlcyA9IChmbGFnc18gJiBBTExPV19MRUFESU5HX1NQQUNFUykgIT0g
MDsKLSAgICAgICAgY29uc3QgYm9vbCBhbGxvd190cmFpbGluZ19zcGFjZXMgPSAoZmxhZ3NfICYg
QUxMT1dfVFJBSUxJTkdfU1BBQ0VTKSAhPSAwOwotICAgICAgICBjb25zdCBib29sIGFsbG93X3Nw
YWNlc19hZnRlcl9zaWduID0gKGZsYWdzXyAmIEFMTE9XX1NQQUNFU19BRlRFUl9TSUdOKSAhPSAw
OwotICAgICAgICAKICAgICAgICAgLy8gVG8gbWFrZSBzdXJlIHRoYXQgaXRlcmF0b3IgZGVyZWZl
cmVuY2luZyBpcyB2YWxpZCB0aGUgZm9sbG93aW5nCiAgICAgICAgIC8vIGNvbnZlbnRpb24gaXMg
dXNlZDoKICAgICAgICAgLy8gMS4gRWFjaCAnKytjdXJyZW50JyBzdGF0ZW1lbnQgaXMgZm9sbG93
ZWQgYnkgY2hlY2sgZm9yIGVxdWFsaXR5IHRvICdlbmQnLgotICAgICAgICAvLyAyLiBJZiBBZHZh
bmNlVG9Ob25zcGFjZSByZXR1cm5lZCBmYWxzZSB0aGVuIGN1cnJlbnQgPT0gZW5kLgogICAgICAg
ICAvLyAzLiBJZiAnY3VycmVudCcgYmVjb21lcyBlcXVhbCB0byAnZW5kJyB0aGUgZnVuY3Rpb24g
cmV0dXJucyBvciBnb2VzIHRvCiAgICAgICAgIC8vICdwYXJzaW5nX2RvbmUnLgogICAgICAgICAv
LyA0LiAnY3VycmVudCcgaXMgbm90IGRlcmVmZXJlbmNlZCBhZnRlciB0aGUgJ3BhcnNpbmdfZG9u
ZScgbGFiZWwuCiAgICAgICAgIC8vIDUuIENvZGUgYmVmb3JlICdwYXJzaW5nX2RvbmUnIG1heSBy
ZWx5IG9uICdjdXJyZW50ICE9IGVuZCcuCi0gICAgICAgIGlmIChjdXJyZW50ID09IGVuZCkgcmV0
dXJuIGVtcHR5X3N0cmluZ192YWx1ZV87Ci0gICAgICAgIAotICAgICAgICBpZiAoYWxsb3dfbGVh
ZGluZ19zcGFjZXMgfHwgYWxsb3dfdHJhaWxpbmdfc3BhY2VzKSB7Ci0gICAgICAgICAgICBpZiAo
IUFkdmFuY2VUb05vbnNwYWNlKCZjdXJyZW50LCBlbmQpKSB7Ci0gICAgICAgICAgICAgICAgKnBy
b2Nlc3NlZF9jaGFyYWN0ZXJzX2NvdW50ID0gY3VycmVudCAtIGlucHV0OwotICAgICAgICAgICAg
ICAgIHJldHVybiBlbXB0eV9zdHJpbmdfdmFsdWVfOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgaWYgKCFhbGxvd19sZWFkaW5nX3NwYWNlcyAmJiAoaW5wdXQgIT0gY3VycmVudCkpIHsKLSAg
ICAgICAgICAgICAgICAvLyBObyBsZWFkaW5nIHNwYWNlcyBhbGxvd2VkLCBidXQgQWR2YW5jZVRv
Tm9uc3BhY2UgbW92ZWQgZm9yd2FyZC4KLSAgICAgICAgICAgICAgICByZXR1cm4ganVua19zdHJp
bmdfdmFsdWVfOwotICAgICAgICAgICAgfQotICAgICAgICB9CisgICAgICAgIGlmIChjdXJyZW50
ID09IGVuZCkgcmV0dXJuIDAuMDsKICAgICAgICAgCiAgICAgICAgIC8vIFRoZSBsb25nZXN0IGZv
cm0gb2Ygc2ltcGxpZmllZCBudW1iZXIgaXM6ICItPHNpZ25pZmljYW50IGRpZ2l0cz4uMWVYWFhc
MCIuCiAgICAgICAgIGNvbnN0IGludCBrQnVmZmVyU2l6ZSA9IGtNYXhTaWduaWZpY2FudERpZ2l0
cyArIDEwOwpAQCAtNjIwLDUxICs0NTgsNyBAQCBuYW1lc3BhY2UgZG91YmxlX2NvbnZlcnNpb24g
ewogICAgICAgICBpZiAoKmN1cnJlbnQgPT0gJysnIHx8ICpjdXJyZW50ID09ICctJykgewogICAg
ICAgICAgICAgc2lnbiA9ICgqY3VycmVudCA9PSAnLScpOwogICAgICAgICAgICAgKytjdXJyZW50
OwotICAgICAgICAgICAgY29uc3QgY2hhciogbmV4dF9ub25fc3BhY2UgPSBjdXJyZW50OwotICAg
ICAgICAgICAgLy8gU2tpcCBmb2xsb3dpbmcgc3BhY2VzIChpZiBhbGxvd2VkKS4KLSAgICAgICAg
ICAgIGlmICghQWR2YW5jZVRvTm9uc3BhY2UoJm5leHRfbm9uX3NwYWNlLCBlbmQpKSByZXR1cm4g
anVua19zdHJpbmdfdmFsdWVfOwotICAgICAgICAgICAgaWYgKCFhbGxvd19zcGFjZXNfYWZ0ZXJf
c2lnbiAmJiAoY3VycmVudCAhPSBuZXh0X25vbl9zcGFjZSkpIHsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4ganVua19zdHJpbmdfdmFsdWVfOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY3Vy
cmVudCA9IG5leHRfbm9uX3NwYWNlOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAo
aW5maW5pdHlfc3ltYm9sXyAhPSBOVUxMKSB7Ci0gICAgICAgICAgICBpZiAoKmN1cnJlbnQgPT0g
aW5maW5pdHlfc3ltYm9sX1swXSkgewotICAgICAgICAgICAgICAgIGlmICghQ29uc3VtZVN1YlN0
cmluZygmY3VycmVudCwgZW5kLCBpbmZpbml0eV9zeW1ib2xfKSkgewotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4ganVua19zdHJpbmdfdmFsdWVfOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoIShhbGxvd190cmFpbGluZ19zcGFjZXMg
fHwgYWxsb3dfdHJhaWxpbmdfanVuaykgJiYgKGN1cnJlbnQgIT0gZW5kKSkgewotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4ganVua19zdHJpbmdfdmFsdWVfOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICBpZiAoIWFsbG93X3RyYWlsaW5nX2p1bmsgJiYgQWR2YW5jZVRvTm9u
c3BhY2UoJmN1cnJlbnQsIGVuZCkpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGp1bmtf
c3RyaW5nX3ZhbHVlXzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICAgICAgQVNTRVJUKGJ1ZmZlcl9wb3MgPT0gMCk7Ci0gICAgICAgICAgICAgICAgKnBy
b2Nlc3NlZF9jaGFyYWN0ZXJzX2NvdW50ID0gY3VycmVudCAtIGlucHV0OwotICAgICAgICAgICAg
ICAgIHJldHVybiBzaWduID8gLURvdWJsZTo6SW5maW5pdHkoKSA6IERvdWJsZTo6SW5maW5pdHko
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKG5hbl9z
eW1ib2xfICE9IE5VTEwpIHsKLSAgICAgICAgICAgIGlmICgqY3VycmVudCA9PSBuYW5fc3ltYm9s
X1swXSkgewotICAgICAgICAgICAgICAgIGlmICghQ29uc3VtZVN1YlN0cmluZygmY3VycmVudCwg
ZW5kLCBuYW5fc3ltYm9sXykpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGp1bmtfc3Ry
aW5nX3ZhbHVlXzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICAgICAgaWYgKCEoYWxsb3dfdHJhaWxpbmdfc3BhY2VzIHx8IGFsbG93X3RyYWlsaW5nX2p1
bmspICYmIChjdXJyZW50ICE9IGVuZCkpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGp1
bmtfc3RyaW5nX3ZhbHVlXzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYg
KCFhbGxvd190cmFpbGluZ19qdW5rICYmIEFkdmFuY2VUb05vbnNwYWNlKCZjdXJyZW50LCBlbmQp
KSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBqdW5rX3N0cmluZ192YWx1ZV87Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIEFTU0VSVChi
dWZmZXJfcG9zID09IDApOwotICAgICAgICAgICAgICAgICpwcm9jZXNzZWRfY2hhcmFjdGVyc19j
b3VudCA9IGN1cnJlbnQgLSBpbnB1dDsKLSAgICAgICAgICAgICAgICByZXR1cm4gc2lnbiA/IC1E
b3VibGU6Ok5hTigpIDogRG91YmxlOjpOYU4oKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGlmIChjdXJyZW50ID09IGVuZCkgcmV0dXJuIDAuMDsKICAgICAgICAgfQogICAgICAgICAKICAg
ICAgICAgYm9vbCBsZWFkaW5nX3plcm8gPSBmYWxzZTsKQEAgLTY3NywyNyArNDcxLDYgQEAgbmFt
ZXNwYWNlIGRvdWJsZV9jb252ZXJzaW9uIHsKICAgICAgICAgICAgIAogICAgICAgICAgICAgbGVh
ZGluZ196ZXJvID0gdHJ1ZTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gSXQgY291bGQg
YmUgaGV4YWRlY2ltYWwgdmFsdWUuCi0gICAgICAgICAgICBpZiAoKGZsYWdzXyAmIEFMTE9XX0hF
WCkgJiYgKCpjdXJyZW50ID09ICd4JyB8fCAqY3VycmVudCA9PSAnWCcpKSB7Ci0gICAgICAgICAg
ICAgICAgKytjdXJyZW50OwotICAgICAgICAgICAgICAgIGlmIChjdXJyZW50ID09IGVuZCB8fCAh
aXNEaWdpdCgqY3VycmVudCwgMTYpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBqdW5r
X3N0cmluZ192YWx1ZV87ICAvLyAiMHgiLgotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiB0YWlsX3BvaW50ZXIgPSBOVUxMOwot
ICAgICAgICAgICAgICAgIGRvdWJsZSByZXN1bHQgPSBSYWRpeFN0cmluZ1RvRG91YmxlPDQ+KGN1
cnJlbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZW5kLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNpZ24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYWxsb3dfdHJhaWxpbmdfanVuaywKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqdW5rX3N0cmluZ192YWx1ZV8sCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRh
aWxfcG9pbnRlcik7Ci0gICAgICAgICAgICAgICAgaWYgKHRhaWxfcG9pbnRlciAhPSBOVUxMKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGlmIChhbGxvd190cmFpbGluZ19zcGFjZXMpIEFkdmFuY2VU
b05vbnNwYWNlKCZ0YWlsX3BvaW50ZXIsIGVuZCk7Ci0gICAgICAgICAgICAgICAgICAgICpwcm9j
ZXNzZWRfY2hhcmFjdGVyc19jb3VudCA9IHRhaWxfcG9pbnRlciAtIGlucHV0OwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgCiAgICAgICAgICAgICAvLyBJZ25vcmUgbGVhZGluZyB6ZXJvcyBpbiB0aGUg
aW50ZWdlciBwYXJ0LgogICAgICAgICAgICAgd2hpbGUgKCpjdXJyZW50ID09ICcwJykgewogICAg
ICAgICAgICAgICAgICsrY3VycmVudDsKQEAgLTcwOCw0MyArNDgxLDMxIEBAIG5hbWVzcGFjZSBk
b3VibGVfY29udmVyc2lvbiB7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgCi0g
ICAgICAgIGJvb2wgb2N0YWwgPSBsZWFkaW5nX3plcm8gJiYgKGZsYWdzXyAmIEFMTE9XX09DVEFM
UykgIT0gMDsKLSAgICAgICAgCiAgICAgICAgIC8vIENvcHkgc2lnbmlmaWNhbnQgZGlnaXRzIG9m
IHRoZSBpbnRlZ2VyIHBhcnQgKGlmIGFueSkgdG8gdGhlIGJ1ZmZlci4KICAgICAgICAgd2hpbGUg
KCpjdXJyZW50ID49ICcwJyAmJiAqY3VycmVudCA8PSAnOScpIHsKICAgICAgICAgICAgIGlmIChz
aWduaWZpY2FudF9kaWdpdHMgPCBrTWF4U2lnbmlmaWNhbnREaWdpdHMpIHsKICAgICAgICAgICAg
ICAgICBBU1NFUlQoYnVmZmVyX3BvcyA8IGtCdWZmZXJTaXplKTsKICAgICAgICAgICAgICAgICBi
dWZmZXJbYnVmZmVyX3BvcysrXSA9IHN0YXRpY19jYXN0PGNoYXI+KCpjdXJyZW50KTsKICAgICAg
ICAgICAgICAgICBzaWduaWZpY2FudF9kaWdpdHMrKzsKLSAgICAgICAgICAgICAgICAvLyBXaWxs
IGxhdGVyIGNoZWNrIGlmIGl0J3MgYW4gb2N0YWwgaW4gdGhlIGJ1ZmZlci4KICAgICAgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgaW5zaWduaWZpY2FudF9kaWdpdHMrKzsgIC8vIE1v
dmUgdGhlIGRpZ2l0IGludG8gdGhlIGV4cG9uZW50aWFsIHBhcnQuCiAgICAgICAgICAgICAgICAg
bm9uemVyb19kaWdpdF9kcm9wcGVkID0gbm9uemVyb19kaWdpdF9kcm9wcGVkIHx8ICpjdXJyZW50
ICE9ICcwJzsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG9jdGFsID0gb2N0YWwgJiYgKmN1
cnJlbnQgPCAnOCc7CiAgICAgICAgICAgICArK2N1cnJlbnQ7CiAgICAgICAgICAgICBpZiAoY3Vy
cmVudCA9PSBlbmQpIGdvdG8gcGFyc2luZ19kb25lOwogICAgICAgICB9CiAgICAgICAgIAotICAg
ICAgICBpZiAoc2lnbmlmaWNhbnRfZGlnaXRzID09IDApIHsKLSAgICAgICAgICAgIG9jdGFsID0g
ZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgCiAgICAgICAgIGlmICgqY3VycmVudCA9PSAnLicp
IHsKLSAgICAgICAgICAgIGlmIChvY3RhbCAmJiAhYWxsb3dfdHJhaWxpbmdfanVuaykgcmV0dXJu
IGp1bmtfc3RyaW5nX3ZhbHVlXzsKLSAgICAgICAgICAgIGlmIChvY3RhbCkgZ290byBwYXJzaW5n
X2RvbmU7Ci0gICAgICAgICAgICAKICAgICAgICAgICAgICsrY3VycmVudDsKICAgICAgICAgICAg
IGlmIChjdXJyZW50ID09IGVuZCkgewogICAgICAgICAgICAgICAgIGlmIChzaWduaWZpY2FudF9k
aWdpdHMgPT0gMCAmJiAhbGVhZGluZ196ZXJvKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVy
biBqdW5rX3N0cmluZ192YWx1ZV87CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAwLjA7CiAg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgZ290byBwYXJzaW5n
X2RvbmU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAg
ICAgICAgICAgICBpZiAoc2lnbmlmaWNhbnRfZGlnaXRzID09IDApIHsKLSAgICAgICAgICAgICAg
ICAvLyBvY3RhbCA9IGZhbHNlOwogICAgICAgICAgICAgICAgIC8vIEludGVnZXIgcGFydCBjb25z
aXN0cyBvZiAwIG9yIGlzIGFic2VudC4gU2lnbmlmaWNhbnQgZGlnaXRzIHN0YXJ0IGFmdGVyCiAg
ICAgICAgICAgICAgICAgLy8gbGVhZGluZyB6ZXJvcyAoaWYgYW55KS4KICAgICAgICAgICAgICAg
ICB3aGlsZSAoKmN1cnJlbnQgPT0gJzAnKSB7CkBAIC03NzgsNDAgKzUzOSwzMSBAQCBuYW1lc3Bh
Y2UgZG91YmxlX2NvbnZlcnNpb24gewogICAgICAgICAgICAgLy8gSWYgZXhwb25lbnQgPCAwIHRo
ZW4gc3RyaW5nIHdhcyBbKy1dXC4wKi4uLgogICAgICAgICAgICAgLy8gSWYgc2lnbmlmaWNhbnRf
ZGlnaXRzICE9IDAgdGhlIHN0cmluZyBpcyBub3QgZXF1YWwgdG8gMC4KICAgICAgICAgICAgIC8v
IE90aGVyd2lzZSB0aGVyZSBhcmUgbm8gZGlnaXRzIGluIHRoZSBzdHJpbmcuCi0gICAgICAgICAg
ICByZXR1cm4ganVua19zdHJpbmdfdmFsdWVfOworICAgICAgICAgICAgcmV0dXJuIDAuMDsKICAg
ICAgICAgfQogICAgICAgICAKICAgICAgICAgLy8gUGFyc2UgZXhwb25lbnRpYWwgcGFydC4KICAg
ICAgICAgaWYgKCpjdXJyZW50ID09ICdlJyB8fCAqY3VycmVudCA9PSAnRScpIHsKLSAgICAgICAg
ICAgIGlmIChvY3RhbCAmJiAhYWxsb3dfdHJhaWxpbmdfanVuaykgcmV0dXJuIGp1bmtfc3RyaW5n
X3ZhbHVlXzsKLSAgICAgICAgICAgIGlmIChvY3RhbCkgZ290byBwYXJzaW5nX2RvbmU7CiAgICAg
ICAgICAgICArK2N1cnJlbnQ7CiAgICAgICAgICAgICBpZiAoY3VycmVudCA9PSBlbmQpIHsKLSAg
ICAgICAgICAgICAgICBpZiAoYWxsb3dfdHJhaWxpbmdfanVuaykgewotICAgICAgICAgICAgICAg
ICAgICBnb3RvIHBhcnNpbmdfZG9uZTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4ganVua19zdHJpbmdfdmFsdWVfOwotICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAtLWN1cnJlbnQ7CisgICAgICAgICAgICAgICAgZ290byBwYXJz
aW5nX2RvbmU7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBjaGFyIHNpZ24gPSAnKyc7Cisg
ICAgICAgICAgICBjaGFyIHNpZ24gPSAwOwogICAgICAgICAgICAgaWYgKCpjdXJyZW50ID09ICcr
JyB8fCAqY3VycmVudCA9PSAnLScpIHsKICAgICAgICAgICAgICAgICBzaWduID0gc3RhdGljX2Nh
c3Q8Y2hhcj4oKmN1cnJlbnQpOwogICAgICAgICAgICAgICAgICsrY3VycmVudDsKICAgICAgICAg
ICAgICAgICBpZiAoY3VycmVudCA9PSBlbmQpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGFs
bG93X3RyYWlsaW5nX2p1bmspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gcGFyc2lu
Z19kb25lOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGp1bmtfc3RyaW5nX3ZhbHVlXzsKLSAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICBjdXJyZW50IC09IDI7CisgICAgICAgICAgICAgICAgICAgIGdv
dG8gcGFyc2luZ19kb25lOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIAotICAgICAgICAgICAgaWYgKGN1cnJlbnQgPT0gZW5kIHx8ICpjdXJyZW50IDwgJzAn
IHx8ICpjdXJyZW50ID4gJzknKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGFsbG93X3RyYWlsaW5n
X2p1bmspIHsKLSAgICAgICAgICAgICAgICAgICAgZ290byBwYXJzaW5nX2RvbmU7Ci0gICAgICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGp1bmtfc3RyaW5n
X3ZhbHVlXzsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoKmN1cnJlbnQgPCAn
MCcgfHwgKmN1cnJlbnQgPiAnOScpIHsKKyAgICAgICAgICAgICAgICBpZiAoc2lnbikKKyAgICAg
ICAgICAgICAgICAgICAgLS1jdXJyZW50OworICAgICAgICAgICAgICAgIC0tY3VycmVudDsKKyAg
ICAgICAgICAgICAgICBnb3RvIHBhcnNpbmdfZG9uZTsKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIAogICAgICAgICAgICAgY29uc3QgaW50IG1heF9leHBvbmVudCA9IElOVF9NQVggLyAyOwpA
QCAtODMyLDMzICs1ODQsOSBAQCBuYW1lc3BhY2UgZG91YmxlX2NvbnZlcnNpb24gewogICAgICAg
ICAgICAgZXhwb25lbnQgKz0gKHNpZ24gPT0gJy0nID8gLW51bSA6IG51bSk7CiAgICAgICAgIH0K
ICAgICAgICAgCi0gICAgICAgIGlmICghKGFsbG93X3RyYWlsaW5nX3NwYWNlcyB8fCBhbGxvd190
cmFpbGluZ19qdW5rKSAmJiAoY3VycmVudCAhPSBlbmQpKSB7Ci0gICAgICAgICAgICByZXR1cm4g
anVua19zdHJpbmdfdmFsdWVfOwotICAgICAgICB9Ci0gICAgICAgIGlmICghYWxsb3dfdHJhaWxp
bmdfanVuayAmJiBBZHZhbmNlVG9Ob25zcGFjZSgmY3VycmVudCwgZW5kKSkgewotICAgICAgICAg
ICAgcmV0dXJuIGp1bmtfc3RyaW5nX3ZhbHVlXzsKLSAgICAgICAgfQotICAgICAgICBpZiAoYWxs
b3dfdHJhaWxpbmdfc3BhY2VzKSB7Ci0gICAgICAgICAgICBBZHZhbmNlVG9Ob25zcGFjZSgmY3Vy
cmVudCwgZW5kKTsKLSAgICAgICAgfQotICAgICAgICAKICAgICBwYXJzaW5nX2RvbmU6CiAgICAg
ICAgIGV4cG9uZW50ICs9IGluc2lnbmlmaWNhbnRfZGlnaXRzOwogICAgICAgICAKLSAgICAgICAg
aWYgKG9jdGFsKSB7Ci0gICAgICAgICAgICBkb3VibGUgcmVzdWx0OwotICAgICAgICAgICAgY29u
c3QgY2hhciogdGFpbF9wb2ludGVyID0gTlVMTDsKLSAgICAgICAgICAgIHJlc3VsdCA9IFJhZGl4
U3RyaW5nVG9Eb3VibGU8Mz4oYnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBidWZmZXIgKyBidWZmZXJfcG9zLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzaWduLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBhbGxvd190cmFpbGluZ19qdW5rLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBqdW5rX3N0cmluZ192YWx1ZV8sCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0YWlsX3BvaW50ZXIpOwotICAgICAg
ICAgICAgQVNTRVJUKHRhaWxfcG9pbnRlciAhPSBOVUxMKTsKLSAgICAgICAgICAgICpwcm9jZXNz
ZWRfY2hhcmFjdGVyc19jb3VudCA9IGN1cnJlbnQgLSBpbnB1dDsKLSAgICAgICAgICAgIHJldHVy
biByZXN1bHQ7Ci0gICAgICAgIH0KLSAgICAgICAgCiAgICAgICAgIGlmIChub256ZXJvX2RpZ2l0
X2Ryb3BwZWQpIHsKICAgICAgICAgICAgIGJ1ZmZlcltidWZmZXJfcG9zKytdID0gJzEnOwogICAg
ICAgICAgICAgZXhwb25lbnQtLTsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL2R0b2EvZG91YmxlLWNv
bnZlcnNpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9kdG9hL2RvdWJsZS1jb252
ZXJzaW9uLmgJKHJldmlzaW9uIDExMzMyMCkKKysrIFNvdXJjZS9XVEYvd3RmL2R0b2EvZG91Ymxl
LWNvbnZlcnNpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMzYxLDEzNyArMzYxLDEyIEBAIG5hbWVz
cGFjZSBkb3VibGVfY29udmVyc2lvbiB7CiAgICAgCiAgICAgY2xhc3MgU3RyaW5nVG9Eb3VibGVD
b252ZXJ0ZXIgewogICAgIHB1YmxpYzoKLSAgICAgICAgLy8gRW51bWVyYXRpb24gZm9yIGFsbG93
aW5nIG9jdGFscyBhbmQgaWdub3JpbmcganVuayB3aGVuIGNvbnZlcnRpbmcKLSAgICAgICAgLy8g
c3RyaW5ncyB0byBudW1iZXJzLgotICAgICAgICBlbnVtIEZsYWdzIHsKLSAgICAgICAgICAgIE5P
X0ZMQUdTID0gMCwKLSAgICAgICAgICAgIEFMTE9XX0hFWCA9IDEsCi0gICAgICAgICAgICBBTExP
V19PQ1RBTFMgPSAyLAotICAgICAgICAgICAgQUxMT1dfVFJBSUxJTkdfSlVOSyA9IDQsCi0gICAg
ICAgICAgICBBTExPV19MRUFESU5HX1NQQUNFUyA9IDgsCi0gICAgICAgICAgICBBTExPV19UUkFJ
TElOR19TUEFDRVMgPSAxNiwKLSAgICAgICAgICAgIEFMTE9XX1NQQUNFU19BRlRFUl9TSUdOID0g
MzIKLSAgICAgICAgfTsKLSAgICAgICAgCi0gICAgICAgIC8vIEZsYWdzIHNob3VsZCBiZSBhIGJp
dC1vciBjb21iaW5hdGlvbiBvZiB0aGUgcG9zc2libGUgRmxhZ3MtZW51bS4KLSAgICAgICAgLy8g
IC0gTk9fRkxBR1M6IG5vIHNwZWNpYWwgZmxhZ3MuCi0gICAgICAgIC8vICAtIEFMTE9XX0hFWDog
cmVjb2duaXplcyB0aGUgcHJlZml4ICIweCIuIEhleCBudW1iZXJzIG1heSBvbmx5IGJlIGludGVn
ZXJzLgotICAgICAgICAvLyAgICAgIEV4OiBTdHJpbmdUb0RvdWJsZSgiMHgxMjM0IikgLT4gNDY2
MC4wCi0gICAgICAgIC8vICAgICAgICAgIEluIFN0cmluZ1RvRG91YmxlKCIweDEyMzQuNTYiKSB0
aGUgY2hhcmFjdGVycyAiLjU2IiBhcmUgdHJhaWxpbmcKLSAgICAgICAgLy8gICAgICAgICAganVu
ay4gVGhlIHJlc3VsdCBvZiB0aGUgY2FsbCBpcyBoZW5jZSBkZXBlbmRlbnQgb24KLSAgICAgICAg
Ly8gICAgICAgICAgdGhlIEFMTE9XX1RSQUlMSU5HX0pVTksgZmxhZyBhbmQvb3IgdGhlIGp1bmsg
dmFsdWUuCi0gICAgICAgIC8vICAgICAgV2l0aCB0aGlzIGZsYWcgIjB4IiBpcyBhIGp1bmstc3Ry
aW5nLiBFdmVuIHdpdGggQUxMT1dfVFJBSUxJTkdfSlVOSywKLSAgICAgICAgLy8gICAgICB0aGUg
c3RyaW5nIHdpbGwgbm90IGJlIHBhcnNlZCBhcyAiMCIgZm9sbG93ZWQgYnkganVuay4KLSAgICAg
ICAgLy8KLSAgICAgICAgLy8gIC0gQUxMT1dfT0NUQUxTOiByZWNvZ25pemVzIHRoZSBwcmVmaXgg
IjAiIGZvciBvY3RhbHM6Ci0gICAgICAgIC8vICAgICAgSWYgYSBzZXF1ZW5jZSBvZiBvY3RhbCBk
aWdpdHMgc3RhcnRzIHdpdGggJzAnLCB0aGVuIHRoZSBudW1iZXIgaXMKLSAgICAgICAgLy8gICAg
ICByZWFkIGFzIG9jdGFsIGludGVnZXIuIE9jdGFsIG51bWJlcnMgbWF5IG9ubHkgYmUgaW50ZWdl
cnMuCi0gICAgICAgIC8vICAgICAgRXg6IFN0cmluZ1RvRG91YmxlKCIwMTIzNCIpIC0+IDY2OC4w
Ci0gICAgICAgIC8vICAgICAgICAgIFN0cmluZ1RvRG91YmxlKCIwMTIzNDkiKSAtPiAxMjM0OS4w
ICAvLyBOb3QgYSBzZXF1ZW5jZSBvZiBvY3RhbAotICAgICAgICAvLyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZGlnaXRzLgotICAgICAgICAvLyAgICAg
ICAgICBJbiBTdHJpbmdUb0RvdWJsZSgiMDEyMzQuNTYiKSB0aGUgY2hhcmFjdGVycyAiLjU2IiBh
cmUgdHJhaWxpbmcKLSAgICAgICAgLy8gICAgICAgICAganVuay4gVGhlIHJlc3VsdCBvZiB0aGUg
Y2FsbCBpcyBoZW5jZSBkZXBlbmRlbnQgb24KLSAgICAgICAgLy8gICAgICAgICAgdGhlIEFMTE9X
X1RSQUlMSU5HX0pVTksgZmxhZyBhbmQvb3IgdGhlIGp1bmsgdmFsdWUuCi0gICAgICAgIC8vICAg
ICAgICAgIEluIFN0cmluZ1RvRG91YmxlKCIwMTIzNGU1NiIpIHRoZSBjaGFyYWN0ZXJzICJlNTYi
IGFyZSB0cmFpbGluZwotICAgICAgICAvLyAgICAgICAgICBqdW5rLCB0b28uCi0gICAgICAgIC8v
ICAtIEFMTE9XX1RSQUlMSU5HX0pVTks6IGlnbm9yZSB0cmFpbGluZyBjaGFyYWN0ZXJzIHRoYXQg
YXJlIG5vdCBwYXJ0IG9mCi0gICAgICAgIC8vICAgICAgYSBkb3VibGUgbGl0ZXJhbC4KLSAgICAg
ICAgLy8gIC0gQUxMT1dfTEVBRElOR19TUEFDRVM6IHNraXAgb3ZlciBsZWFkaW5nIHNwYWNlcy4K
LSAgICAgICAgLy8gIC0gQUxMT1dfVFJBSUxJTkdfU1BBQ0VTOiBpZ25vcmUgdHJhaWxpbmcgc3Bh
Y2VzLgotICAgICAgICAvLyAgLSBBTExPV19TUEFDRVNfQUZURVJfU0lHTjogaWdub3JlIHNwYWNl
cyBhZnRlciB0aGUgc2lnbi4KLSAgICAgICAgLy8gICAgICAgRXg6IFN0cmluZ1RvRG91YmxlKCIt
ICAgMTIzLjIiKSAtPiAtMTIzLjIuCi0gICAgICAgIC8vICAgICAgICAgICBTdHJpbmdUb0RvdWJs
ZSgiKyAgIDEyMy4yIikgLT4gMTIzLjIKLSAgICAgICAgLy8KLSAgICAgICAgLy8gZW1wdHlfc3Ry
aW5nX3ZhbHVlIGlzIHJldHVybmVkIHdoZW4gYW4gZW1wdHkgc3RyaW5nIGlzIGdpdmVuIGFzIGlu
cHV0LgotICAgICAgICAvLyBJZiBBTExPV19MRUFESU5HX1NQQUNFUyBvciBBTExPV19UUkFJTElO
R19TUEFDRVMgYXJlIHNldCwgdGhlbiBhIHN0cmluZwotICAgICAgICAvLyBjb250YWluaW5nIG9u
bHkgc3BhY2VzIGlzIGNvbnZlcnRlZCB0byB0aGUgJ2VtcHR5X3N0cmluZ192YWx1ZScsIHRvby4K
LSAgICAgICAgLy8KLSAgICAgICAgLy8ganVua19zdHJpbmdfdmFsdWUgaXMgcmV0dXJuZWQgd2hl
bgotICAgICAgICAvLyAgYSkgQUxMT1dfVFJBSUxJTkdfSlVOSyBpcyBub3Qgc2V0LCBhbmQgYSBq
dW5rIGNoYXJhY3RlciAoYSBjaGFyYWN0ZXIgbm90Ci0gICAgICAgIC8vICAgICBwYXJ0IG9mIGEg
ZG91YmxlLWxpdGVyYWwpIGlzIGZvdW5kLgotICAgICAgICAvLyAgYikgQUxMT1dfVFJBSUxJTkdf
SlVOSyBpcyBzZXQsIGJ1dCB0aGUgc3RyaW5nIGRvZXMgbm90IHN0YXJ0IHdpdGggYQotICAgICAg
ICAvLyAgICAgZG91YmxlIGxpdGVyYWwuCi0gICAgICAgIC8vCi0gICAgICAgIC8vIGluZmluaXR5
X3N5bWJvbCBhbmQgbmFuX3N5bWJvbCBhcmUgc3RyaW5ncyB0aGF0IGFyZSB1c2VkIHRvIGRldGVj
dAotICAgICAgICAvLyBpbnB1dHMgdGhhdCByZXByZXNlbnQgaW5maW5pdHkgYW5kIE5hTi4gVGhl
eSBjYW4gYmUgbnVsbCwgaW4gd2hpY2ggY2FzZQotICAgICAgICAvLyB0aGV5IGFyZSBpZ25vcmVk
LgotICAgICAgICAvLyBUaGUgY29udmVyc2lvbiByb3V0aW5lIGZpcnN0IHJlYWRzIGFueSBwb3Nz
aWJsZSBzaWducy4gVGhlbiBpdCBjb21wYXJlcyB0aGUKLSAgICAgICAgLy8gZm9sbG93aW5nIGNo
YXJhY3RlciBvZiB0aGUgaW5wdXQtc3RyaW5nIHdpdGggdGhlIGZpcnN0IGNoYXJhY3RlciBvZgot
ICAgICAgICAvLyB0aGUgaW5maW5pdHksIGFuZCBuYW4tc3ltYm9sLiBJZiBlaXRoZXIgbWF0Y2hl
cywgdGhlIGZ1bmN0aW9uIGFzc3VtZXMsIHRoYXQKLSAgICAgICAgLy8gYSBtYXRjaCBoYXMgYmVl
biBmb3VuZCwgYW5kIGV4cGVjdHMgdGhlIGZvbGxvd2luZyBpbnB1dCBjaGFyYWN0ZXJzIHRvIG1h
dGNoCi0gICAgICAgIC8vIHRoZSByZW1haW5pbmcgY2hhcmFjdGVycyBvZiB0aGUgc3BlY2lhbC12
YWx1ZSBzeW1ib2wuCi0gICAgICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB0aGUgZm9sbG93aW5nIHJl
c3RyaWN0aW9ucyBhcHBseSB0byBzcGVjaWFsLXZhbHVlIHN5bWJvbHM6Ci0gICAgICAgIC8vICAt
IHRoZXkgbXVzdCBub3Qgc3RhcnQgd2l0aCBzaWducyAoJysnLCBvciAnLScpLAotICAgICAgICAv
LyAgLSB0aGV5IG11c3Qgbm90IGhhdmUgdGhlIHNhbWUgZmlyc3QgY2hhcmFjdGVyLgotICAgICAg
ICAvLyAgLSB0aGV5IG11c3Qgbm90IHN0YXJ0IHdpdGggZGlnaXRzLgotICAgICAgICAvLwotICAg
ICAgICAvLyBFeGFtcGxlczoKLSAgICAgICAgLy8gIGZsYWdzID0gQUxMT1dfSEVYIHwgQUxMT1df
VFJBSUxJTkdfSlVOSywKLSAgICAgICAgLy8gIGVtcHR5X3N0cmluZ192YWx1ZSA9IDAuMCwKLSAg
ICAgICAgLy8gIGp1bmtfc3RyaW5nX3ZhbHVlID0gTmFOLAotICAgICAgICAvLyAgaW5maW5pdHlf
c3ltYm9sID0gImluZmluaXR5IiwKLSAgICAgICAgLy8gIG5hbl9zeW1ib2wgPSAibmFuIjoKLSAg
ICAgICAgLy8gICAgU3RyaW5nVG9Eb3VibGUoIjB4MTIzNCIpIC0+IDQ2NjAuMC4KLSAgICAgICAg
Ly8gICAgU3RyaW5nVG9Eb3VibGUoIjB4MTIzNEsiKSAtPiA0NjYwLjAuCi0gICAgICAgIC8vICAg
IFN0cmluZ1RvRG91YmxlKCIiKSAtPiAwLjAgIC8vIGVtcHR5X3N0cmluZ192YWx1ZS4KLSAgICAg
ICAgLy8gICAgU3RyaW5nVG9Eb3VibGUoIiAiKSAtPiBOYU4gIC8vIGp1bmtfc3RyaW5nX3ZhbHVl
LgotICAgICAgICAvLyAgICBTdHJpbmdUb0RvdWJsZSgiIDEiKSAtPiBOYU4gIC8vIGp1bmtfc3Ry
aW5nX3ZhbHVlLgotICAgICAgICAvLyAgICBTdHJpbmdUb0RvdWJsZSgiMHgiKSAtPiBOYU4gIC8v
IGp1bmtfc3RyaW5nX3ZhbHVlLgotICAgICAgICAvLyAgICBTdHJpbmdUb0RvdWJsZSgiLTEyMy40
NSIpIC0+IC0xMjMuNDUuCi0gICAgICAgIC8vICAgIFN0cmluZ1RvRG91YmxlKCItLTEyMy40NSIp
IC0+IE5hTiAgLy8ganVua19zdHJpbmdfdmFsdWUuCi0gICAgICAgIC8vICAgIFN0cmluZ1RvRG91
YmxlKCIxMjNlNDUiKSAtPiAxMjNlNDUuCi0gICAgICAgIC8vICAgIFN0cmluZ1RvRG91YmxlKCIx
MjNFNDUiKSAtPiAxMjNlNDUuCi0gICAgICAgIC8vICAgIFN0cmluZ1RvRG91YmxlKCIxMjNlKzQ1
IikgLT4gMTIzZTQ1LgotICAgICAgICAvLyAgICBTdHJpbmdUb0RvdWJsZSgiMTIzRS00NSIpIC0+
IDEyM2UtNDUuCi0gICAgICAgIC8vICAgIFN0cmluZ1RvRG91YmxlKCIxMjNlIikgLT4gMTIzLjAg
IC8vIHRyYWlsaW5nIGp1bmsgaWdub3JlZC4KLSAgICAgICAgLy8gICAgU3RyaW5nVG9Eb3VibGUo
IjEyM2UtIikgLT4gMTIzLjAgIC8vIHRyYWlsaW5nIGp1bmsgaWdub3JlZC4KLSAgICAgICAgLy8g
ICAgU3RyaW5nVG9Eb3VibGUoIitOYU4iKSAtPiBOYU4gIC8vIE5hTiBzdHJpbmcgbGl0ZXJhbC4K
LSAgICAgICAgLy8gICAgU3RyaW5nVG9Eb3VibGUoIi1pbmZpbml0eSIpIC0+IC1pbmYuICAvLyBp
bmZpbml0eSBsaXRlcmFsLgotICAgICAgICAvLyAgICBTdHJpbmdUb0RvdWJsZSgiSW5maW5pdHki
KSAtPiBOYU4gIC8vIGp1bmtfc3RyaW5nX3ZhbHVlLgotICAgICAgICAvLwotICAgICAgICAvLyAg
ZmxhZ3MgPSBBTExPV19PQ1RBTCB8IEFMTE9XX0xFQURJTkdfU1BBQ0VTLAotICAgICAgICAvLyAg
ZW1wdHlfc3RyaW5nX3ZhbHVlID0gMC4wLAotICAgICAgICAvLyAganVua19zdHJpbmdfdmFsdWUg
PSBOYU4sCi0gICAgICAgIC8vICBpbmZpbml0eV9zeW1ib2wgPSBOVUxMLAotICAgICAgICAvLyAg
bmFuX3N5bWJvbCA9IE5VTEw6Ci0gICAgICAgIC8vICAgIFN0cmluZ1RvRG91YmxlKCIweDEyMzQi
KSAtPiBOYU4gIC8vIGp1bmtfc3RyaW5nX3ZhbHVlLgotICAgICAgICAvLyAgICBTdHJpbmdUb0Rv
dWJsZSgiMDEyMzQiKSAtPiA2NjguMC4KLSAgICAgICAgLy8gICAgU3RyaW5nVG9Eb3VibGUoIiIp
IC0+IDAuMCAgLy8gZW1wdHlfc3RyaW5nX3ZhbHVlLgotICAgICAgICAvLyAgICBTdHJpbmdUb0Rv
dWJsZSgiICIpIC0+IDAuMCAgLy8gZW1wdHlfc3RyaW5nX3ZhbHVlLgotICAgICAgICAvLyAgICBT
dHJpbmdUb0RvdWJsZSgiIDEiKSAtPiAxLjAKLSAgICAgICAgLy8gICAgU3RyaW5nVG9Eb3VibGUo
IjB4IikgLT4gTmFOICAvLyBqdW5rX3N0cmluZ192YWx1ZS4KLSAgICAgICAgLy8gICAgU3RyaW5n
VG9Eb3VibGUoIjAxMjNlNDUiKSAtPiBOYU4gIC8vIGp1bmtfc3RyaW5nX3ZhbHVlLgotICAgICAg
ICAvLyAgICBTdHJpbmdUb0RvdWJsZSgiMDEyMzlFNDUiKSAtPiAxMjM5ZTQ1LgotICAgICAgICAv
LyAgICBTdHJpbmdUb0RvdWJsZSgiLWluZmluaXR5IikgLT4gTmFOICAvLyBqdW5rX3N0cmluZ192
YWx1ZS4KLSAgICAgICAgLy8gICAgU3RyaW5nVG9Eb3VibGUoIk5hTiIpIC0+IE5hTiAgLy8ganVu
a19zdHJpbmdfdmFsdWUuCi0gICAgICAgIFN0cmluZ1RvRG91YmxlQ29udmVydGVyKGludCBmbGFn
cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIGVtcHR5X3N0cmluZ192
YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIGp1bmtfc3RyaW5n
X3ZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBpbmZp
bml0eV9zeW1ib2wsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIq
IG5hbl9zeW1ib2wpCi0gICAgICAgIDogZmxhZ3NfKGZsYWdzKSwKLSAgICAgICAgZW1wdHlfc3Ry
aW5nX3ZhbHVlXyhlbXB0eV9zdHJpbmdfdmFsdWUpLAotICAgICAgICBqdW5rX3N0cmluZ192YWx1
ZV8oanVua19zdHJpbmdfdmFsdWUpLAotICAgICAgICBpbmZpbml0eV9zeW1ib2xfKGluZmluaXR5
X3N5bWJvbCksCi0gICAgICAgIG5hbl9zeW1ib2xfKG5hbl9zeW1ib2wpIHsKLSAgICAgICAgfQot
ICAgICAgICAKICAgICAgICAgLy8gUGVyZm9ybXMgdGhlIGNvbnZlcnNpb24uCiAgICAgICAgIC8v
IFRoZSBvdXRwdXQgcGFyYW1ldGVyICdwcm9jZXNzZWRfY2hhcmFjdGVyc19jb3VudCcgaXMgc2V0
IHRvIHRoZSBudW1iZXIKICAgICAgICAgLy8gb2YgY2hhcmFjdGVycyB0aGF0IGhhdmUgYmVlbiBw
cm9jZXNzZWQgdG8gcmVhZCB0aGUgbnVtYmVyLgotICAgICAgICAvLyBTcGFjZXMgdGhhbiBhcmUg
cHJvY2Vzc2VkIHdpdGggQUxMT1dfe0xFQURJTkd8VFJBSUxJTkd9X1NQQUNFUyBhcmUgaW5jbHVk
ZWQKLSAgICAgICAgLy8gaW4gdGhlICdwcm9jZXNzZWRfY2hhcmFjdGVyc19jb3VudCcuIFRyYWls
aW5nIGp1bmsgaXMgbmV2ZXIgaW5jbHVkZWQuCi0gICAgICAgIGRvdWJsZSBTdHJpbmdUb0RvdWJs
ZShjb25zdCBjaGFyKiBidWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
bGVuZ3RoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50KiBwcm9jZXNzZWRfY2hh
cmFjdGVyc19jb3VudCk7CisgICAgICAgIHN0YXRpYyBkb3VibGUgU3RyaW5nVG9Eb3VibGUoY29u
c3QgY2hhciogYnVmZmVyLCBzaXplX3QgbGVuZ3RoLCBzaXplX3QqIHByb2Nlc3NlZF9jaGFyYWN0
ZXJzX2NvdW50KTsKICAgICAgICAgCiAgICAgcHJpdmF0ZToKLSAgICAgICAgY29uc3QgaW50IGZs
YWdzXzsKLSAgICAgICAgY29uc3QgZG91YmxlIGVtcHR5X3N0cmluZ192YWx1ZV87Ci0gICAgICAg
IGNvbnN0IGRvdWJsZSBqdW5rX3N0cmluZ192YWx1ZV87Ci0gICAgICAgIGNvbnN0IGNoYXIqIGNv
bnN0IGluZmluaXR5X3N5bWJvbF87Ci0gICAgICAgIGNvbnN0IGNoYXIqIGNvbnN0IG5hbl9zeW1i
b2xfOwotICAgICAgICAKICAgICAgICAgRElTQUxMT1dfSU1QTElDSVRfQ09OU1RSVUNUT1JTKFN0
cmluZ1RvRG91YmxlQ29udmVydGVyKTsKICAgICB9OwogICAgIApJbmRleDogU291cmNlL1dURi93
dGYvdGV4dC9TdHJpbmdJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi90ZXh0
L1N0cmluZ0ltcGwuY3BwCShyZXZpc2lvbiAxMTMzMjApCisrKyBTb3VyY2UvV1RGL3d0Zi90ZXh0
L1N0cmluZ0ltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MzcsMTggKzczNywxOCBAQCBpbnRw
dHJfdCBTdHJpbmdJbXBsOjp0b0ludFB0cihib29sKiBvaykKICAgICByZXR1cm4gY2hhcmFjdGVy
c1RvSW50UHRyKGNoYXJhY3RlcnMxNigpLCBtX2xlbmd0aCwgb2spOwogfQogCi1kb3VibGUgU3Ry
aW5nSW1wbDo6dG9Eb3VibGUoYm9vbCogb2ssIGJvb2wqIGRpZFJlYWROdW1iZXIpCitkb3VibGUg
U3RyaW5nSW1wbDo6dG9Eb3VibGUoYm9vbCogb2spCiB7CiAgICAgaWYgKGlzOEJpdCgpKQotICAg
ICAgICByZXR1cm4gY2hhcmFjdGVyc1RvRG91YmxlKGNoYXJhY3RlcnM4KCksIG1fbGVuZ3RoLCBv
aywgZGlkUmVhZE51bWJlcik7Ci0gICAgcmV0dXJuIGNoYXJhY3RlcnNUb0RvdWJsZShjaGFyYWN0
ZXJzMTYoKSwgbV9sZW5ndGgsIG9rLCBkaWRSZWFkTnVtYmVyKTsKKyAgICAgICAgcmV0dXJuIGNo
YXJhY3RlcnNUb0RvdWJsZShjaGFyYWN0ZXJzOCgpLCBtX2xlbmd0aCwgb2spOworICAgIHJldHVy
biBjaGFyYWN0ZXJzVG9Eb3VibGUoY2hhcmFjdGVyczE2KCksIG1fbGVuZ3RoLCBvayk7CiB9CiAK
LWZsb2F0IFN0cmluZ0ltcGw6OnRvRmxvYXQoYm9vbCogb2ssIGJvb2wqIGRpZFJlYWROdW1iZXIp
CitmbG9hdCBTdHJpbmdJbXBsOjp0b0Zsb2F0KGJvb2wqIG9rKQogewogICAgIGlmIChpczhCaXQo
KSkKLSAgICAgICAgcmV0dXJuIGNoYXJhY3RlcnNUb0Zsb2F0KGNoYXJhY3RlcnM4KCksIG1fbGVu
Z3RoLCBvaywgZGlkUmVhZE51bWJlcik7Ci0gICAgcmV0dXJuIGNoYXJhY3RlcnNUb0Zsb2F0KGNo
YXJhY3RlcnMxNigpLCBtX2xlbmd0aCwgb2ssIGRpZFJlYWROdW1iZXIpOworICAgICAgICByZXR1
cm4gY2hhcmFjdGVyc1RvRmxvYXQoY2hhcmFjdGVyczgoKSwgbV9sZW5ndGgsIG9rKTsKKyAgICBy
ZXR1cm4gY2hhcmFjdGVyc1RvRmxvYXQoY2hhcmFjdGVyczE2KCksIG1fbGVuZ3RoLCBvayk7CiB9
CiAKIGJvb2wgZXF1YWxJZ25vcmluZ0Nhc2UoY29uc3QgTENoYXIqIGEsIGNvbnN0IExDaGFyKiBi
LCB1bnNpZ25lZCBsZW5ndGgpCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuaAkocmV2aXNp
b24gMTEzMzIwKQorKysgU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQ1OSw4ICs0NTksMTEgQEAgcHVibGljOgogICAgIHVpbnQ2NF90IHRvVUludDY0
KGJvb2wqIG9rID0gMCk7IC8vIGlnbm9yZXMgdHJhaWxpbmcgZ2FyYmFnZQogICAgIGludHB0cl90
IHRvSW50UHRyKGJvb2wqIG9rID0gMCk7IC8vIGlnbm9yZXMgdHJhaWxpbmcgZ2FyYmFnZQogCi0g
ICAgZG91YmxlIHRvRG91YmxlKGJvb2wqIG9rID0gMCwgYm9vbCogZGlkUmVhZE51bWJlciA9IDAp
OwotICAgIGZsb2F0IHRvRmxvYXQoYm9vbCogb2sgPSAwLCBib29sKiBkaWRSZWFkTnVtYmVyID0g
MCk7CisgICAgLy8gRklYTUU6IExpa2UgdGhlIHN0cmljdCBmdW5jdGlvbnMgYWJvdmUsIHRoZXNl
IGdpdmUgZmFsc2UgZm9yICJvayIgd2hlbiB0aGVyZSBpcyB0cmFpbGluZyBnYXJiYWdlLgorICAg
IC8vIExpa2UgdGhlIG5vbi1zdHJpY3QgZnVuY3Rpb25zIGFib3ZlLCB0aGVzZSByZXR1cm4gdGhl
IHZhbHVlIHdoZW4gdGhlcmUgaXMgdHJhaWxpbmcgZ2FyYmFnZS4KKyAgICAvLyBJdCB3b3VsZCBi
ZSBiZXR0ZXIgaWYgdGhlc2Ugd2VyZSBtb3JlIGNvbnNpc3RlbnQgd2l0aCB0aGUgYWJvdmUgZnVu
Y3Rpb25zIGluc3RlYWQuCisgICAgZG91YmxlIHRvRG91YmxlKGJvb2wqIG9rID0gMCk7CisgICAg
ZmxvYXQgdG9GbG9hdChib29sKiBvayA9IDApOwogCiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIFBh
c3NSZWZQdHI8U3RyaW5nSW1wbD4gbG93ZXIoKTsKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgUGFz
c1JlZlB0cjxTdHJpbmdJbXBsPiB1cHBlcigpOwpJbmRleDogU291cmNlL1dURi93dGYvdGV4dC9X
VEZTdHJpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5n
LmNwcAkocmV2aXNpb24gMTEzMzIwKQorKysgU291cmNlL1dURi93dGYvdGV4dC9XVEZTdHJpbmcu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MjIsNyArNTIyLDYgQEAgaW50cHRyX3QgU3RyaW5nOjp0
b0ludFB0clN0cmljdChib29sKiBvawogICAgIHJldHVybiBtX2ltcGwtPnRvSW50UHRyU3RyaWN0
KG9rLCBiYXNlKTsKIH0KIAotCiBpbnQgU3RyaW5nOjp0b0ludChib29sKiBvaykgY29uc3QKIHsK
ICAgICBpZiAoIW1faW1wbCkgewpAQCAtNTczLDI4ICs1NzIsMjQgQEAgaW50cHRyX3QgU3RyaW5n
Ojp0b0ludFB0cihib29sKiBvaykgY29ucwogICAgIHJldHVybiBtX2ltcGwtPnRvSW50UHRyKG9r
KTsKIH0KIAotZG91YmxlIFN0cmluZzo6dG9Eb3VibGUoYm9vbCogb2ssIGJvb2wqIGRpZFJlYWRO
dW1iZXIpIGNvbnN0Citkb3VibGUgU3RyaW5nOjp0b0RvdWJsZShib29sKiBvaykgY29uc3QKIHsK
ICAgICBpZiAoIW1faW1wbCkgewogICAgICAgICBpZiAob2spCiAgICAgICAgICAgICAqb2sgPSBm
YWxzZTsKLSAgICAgICAgaWYgKGRpZFJlYWROdW1iZXIpCi0gICAgICAgICAgICAqZGlkUmVhZE51
bWJlciA9IGZhbHNlOwogICAgICAgICByZXR1cm4gMC4wOwogICAgIH0KLSAgICByZXR1cm4gbV9p
bXBsLT50b0RvdWJsZShvaywgZGlkUmVhZE51bWJlcik7CisgICAgcmV0dXJuIG1faW1wbC0+dG9E
b3VibGUob2spOwogfQogCi1mbG9hdCBTdHJpbmc6OnRvRmxvYXQoYm9vbCogb2ssIGJvb2wqIGRp
ZFJlYWROdW1iZXIpIGNvbnN0CitmbG9hdCBTdHJpbmc6OnRvRmxvYXQoYm9vbCogb2spIGNvbnN0
CiB7CiAgICAgaWYgKCFtX2ltcGwpIHsKICAgICAgICAgaWYgKG9rKQogICAgICAgICAgICAgKm9r
ID0gZmFsc2U7Ci0gICAgICAgIGlmIChkaWRSZWFkTnVtYmVyKQotICAgICAgICAgICAgKmRpZFJl
YWROdW1iZXIgPSBmYWxzZTsKICAgICAgICAgcmV0dXJuIDAuMGY7CiAgICAgfQotICAgIHJldHVy
biBtX2ltcGwtPnRvRmxvYXQob2ssIGRpZFJlYWROdW1iZXIpOworICAgIHJldHVybiBtX2ltcGwt
PnRvRmxvYXQob2spOwogfQogCiBTdHJpbmcgU3RyaW5nOjppc29sYXRlZENvcHkoKSBjb25zdApA
QCAtMTAzNiw2MyArMTAzMSw2NCBAQCBpbnRwdHJfdCBjaGFyYWN0ZXJzVG9JbnRQdHIoY29uc3Qg
VUNoYXIqCiAgICAgcmV0dXJuIHRvSW50ZWdyYWxUeXBlPGludHB0cl90LCBVQ2hhcj4oZGF0YSwg
bGVuZ3RoT2ZDaGFyYWN0ZXJzQXNJbnRlZ2VyPFVDaGFyPihkYXRhLCBsZW5ndGgpLCBvaywgMTAp
OwogfQogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhclR5cGUsIFdURjo6QWxsb3dUcmFpbGluZ0p1
bmtUYWcgYWxsb3dUcmFpbGluZ0p1bms+Ci1zdGF0aWMgaW5saW5lIGRvdWJsZSB0b0RvdWJsZVR5
cGUoY29uc3QgQ2hhclR5cGUqIGRhdGEsIHNpemVfdCBsZW5ndGgsIGJvb2wqIG9rLCBib29sKiBk
aWRSZWFkTnVtYmVyKQorZW51bSBUcmFpbGluZ0p1bmtQb2xpY3kgeyBEaXNhbGxvd1RyYWlsaW5n
SnVuaywgQWxsb3dUcmFpbGluZ0p1bmsgfTsKKwordGVtcGxhdGUgPHR5cGVuYW1lIENoYXJUeXBl
LCBUcmFpbGluZ0p1bmtQb2xpY3kgcG9saWN5Pgorc3RhdGljIGlubGluZSBkb3VibGUgdG9Eb3Vi
bGVUeXBlKGNvbnN0IENoYXJUeXBlKiBkYXRhLCBzaXplX3QgbGVuZ3RoLCBib29sKiBvaywgc2l6
ZV90JiBwYXJzZWRMZW5ndGgpCiB7Ci0gICAgaWYgKCFsZW5ndGgpIHsKKyAgICBzaXplX3QgbGVh
ZGluZ1NwYWNlc0xlbmd0aCA9IDA7CisgICAgd2hpbGUgKGxlYWRpbmdTcGFjZXNMZW5ndGggPCBs
ZW5ndGggJiYgaXNBU0NJSVNwYWNlKGRhdGFbbGVhZGluZ1NwYWNlc0xlbmd0aF0pKQorICAgICAg
ICArK2xlYWRpbmdTcGFjZXNMZW5ndGg7CisKKyAgICBkb3VibGUgbnVtYmVyID0gcGFyc2VEb3Vi
bGUoZGF0YSArIGxlYWRpbmdTcGFjZXNMZW5ndGgsIGxlbmd0aCAtIGxlYWRpbmdTcGFjZXNMZW5n
dGgsIHBhcnNlZExlbmd0aCk7CisgICAgaWYgKCFwYXJzZWRMZW5ndGgpIHsKICAgICAgICAgaWYg
KG9rKQogICAgICAgICAgICAgKm9rID0gZmFsc2U7Ci0gICAgICAgIGlmIChkaWRSZWFkTnVtYmVy
KQotICAgICAgICAgICAgKmRpZFJlYWROdW1iZXIgPSBmYWxzZTsKICAgICAgICAgcmV0dXJuIDAu
MDsKICAgICB9CiAKLSAgICBWZWN0b3I8Y2hhciwgMjU2PiBieXRlcyhsZW5ndGggKyAxKTsKLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCi0gICAgICAgIGJ5dGVzW2ld
ID0gZGF0YVtpXSA8IDB4N0YgPyBkYXRhW2ldIDogJz8nOwotICAgIGJ5dGVzW2xlbmd0aF0gPSAn
XDAnOwotICAgIGNoYXIqIHN0YXJ0ID0gYnl0ZXMuZGF0YSgpOwotICAgIGNoYXIqIGVuZDsKLSAg
ICBkb3VibGUgdmFsID0gV1RGOjpzdHJ0b2Q8YWxsb3dUcmFpbGluZ0p1bmssIFdURjo6RGlzYWxs
b3dUcmFpbGluZ1NwYWNlcz4oc3RhcnQsICZlbmQpOworICAgIHBhcnNlZExlbmd0aCArPSBsZWFk
aW5nU3BhY2VzTGVuZ3RoOwogICAgIGlmIChvaykKLSAgICAgICAgKm9rID0gKGVuZCA9PSAwIHx8
ICplbmQgPT0gJ1wwJykgJiYgIWlzbmFuKHZhbCk7Ci0gICAgaWYgKGRpZFJlYWROdW1iZXIpCi0g
ICAgICAgICpkaWRSZWFkTnVtYmVyID0gZW5kIC0gc3RhcnQ7Ci0gICAgcmV0dXJuIHZhbDsKKyAg
ICAgICAgKm9rID0gcG9saWN5ID09IEFsbG93VHJhaWxpbmdKdW5rIHx8IHBhcnNlZExlbmd0aCA9
PSBsZW5ndGg7CisgICAgcmV0dXJuIG51bWJlcjsKIH0KIAotZG91YmxlIGNoYXJhY3RlcnNUb0Rv
dWJsZShjb25zdCBMQ2hhciogZGF0YSwgc2l6ZV90IGxlbmd0aCwgYm9vbCogb2ssIGJvb2wqIGRp
ZFJlYWROdW1iZXIpCitkb3VibGUgY2hhcmFjdGVyc1RvRG91YmxlKGNvbnN0IExDaGFyKiBkYXRh
LCBzaXplX3QgbGVuZ3RoLCBib29sKiBvaykKIHsKLSAgICByZXR1cm4gdG9Eb3VibGVUeXBlPExD
aGFyLCBXVEY6OkRpc2FsbG93VHJhaWxpbmdKdW5rPihkYXRhLCBsZW5ndGgsIG9rLCBkaWRSZWFk
TnVtYmVyKTsKKyAgICBzaXplX3QgcGFyc2VkTGVuZ3RoOworICAgIHJldHVybiB0b0RvdWJsZVR5
cGU8TENoYXIsIERpc2FsbG93VHJhaWxpbmdKdW5rPihkYXRhLCBsZW5ndGgsIG9rLCBwYXJzZWRM
ZW5ndGgpOwogfQogCi1kb3VibGUgY2hhcmFjdGVyc1RvRG91YmxlKGNvbnN0IFVDaGFyKiBkYXRh
LCBzaXplX3QgbGVuZ3RoLCBib29sKiBvaywgYm9vbCogZGlkUmVhZE51bWJlcikKK2RvdWJsZSBj
aGFyYWN0ZXJzVG9Eb3VibGUoY29uc3QgVUNoYXIqIGRhdGEsIHNpemVfdCBsZW5ndGgsIGJvb2wq
IG9rKQogewotICAgIHJldHVybiB0b0RvdWJsZVR5cGU8VUNoYXIsIFdURjo6RGlzYWxsb3dUcmFp
bGluZ0p1bms+KGRhdGEsIGxlbmd0aCwgb2ssIGRpZFJlYWROdW1iZXIpOworICAgIHNpemVfdCBw
YXJzZWRMZW5ndGg7CisgICAgcmV0dXJuIHRvRG91YmxlVHlwZTxVQ2hhciwgRGlzYWxsb3dUcmFp
bGluZ0p1bms+KGRhdGEsIGxlbmd0aCwgb2ssIHBhcnNlZExlbmd0aCk7CiB9CiAKLWZsb2F0IGNo
YXJhY3RlcnNUb0Zsb2F0KGNvbnN0IExDaGFyKiBkYXRhLCBzaXplX3QgbGVuZ3RoLCBib29sKiBv
aywgYm9vbCogZGlkUmVhZE51bWJlcikKK2Zsb2F0IGNoYXJhY3RlcnNUb0Zsb2F0KGNvbnN0IExD
aGFyKiBkYXRhLCBzaXplX3QgbGVuZ3RoLCBib29sKiBvaykKIHsKICAgICAvLyBGSVhNRTogVGhp
cyB3aWxsIHJldHVybiBvayBldmVuIHdoZW4gdGhlIHN0cmluZyBmaXRzIGludG8gYSBkb3VibGUg
YnV0IG5vdCBhIGZsb2F0LgotICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4odG9Eb3VibGVU
eXBlPExDaGFyLCBXVEY6OkRpc2FsbG93VHJhaWxpbmdKdW5rPihkYXRhLCBsZW5ndGgsIG9rLCBk
aWRSZWFkTnVtYmVyKSk7CisgICAgc2l6ZV90IHBhcnNlZExlbmd0aDsKKyAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KHRvRG91YmxlVHlwZTxMQ2hhciwgRGlzYWxsb3dUcmFpbGluZ0p1bms+
KGRhdGEsIGxlbmd0aCwgb2ssIHBhcnNlZExlbmd0aCkpOwogfQogCi1mbG9hdCBjaGFyYWN0ZXJz
VG9GbG9hdChjb25zdCBVQ2hhciogZGF0YSwgc2l6ZV90IGxlbmd0aCwgYm9vbCogb2ssIGJvb2wq
IGRpZFJlYWROdW1iZXIpCitmbG9hdCBjaGFyYWN0ZXJzVG9GbG9hdChjb25zdCBVQ2hhciogZGF0
YSwgc2l6ZV90IGxlbmd0aCwgYm9vbCogb2spCiB7CiAgICAgLy8gRklYTUU6IFRoaXMgd2lsbCBy
ZXR1cm4gb2sgZXZlbiB3aGVuIHRoZSBzdHJpbmcgZml0cyBpbnRvIGEgZG91YmxlIGJ1dCBub3Qg
YSBmbG9hdC4KLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHRvRG91YmxlVHlwZTxVQ2hh
ciwgV1RGOjpEaXNhbGxvd1RyYWlsaW5nSnVuaz4oZGF0YSwgbGVuZ3RoLCBvaywgZGlkUmVhZE51
bWJlcikpOworICAgIHNpemVfdCBwYXJzZWRMZW5ndGg7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0
PGZsb2F0Pih0b0RvdWJsZVR5cGU8VUNoYXIsIERpc2FsbG93VHJhaWxpbmdKdW5rPihkYXRhLCBs
ZW5ndGgsIG9rLCBwYXJzZWRMZW5ndGgpKTsKIH0KIAotZmxvYXQgY2hhcmFjdGVyc1RvRmxvYXRJ
Z25vcmluZ0p1bmsoY29uc3QgTENoYXIqIGRhdGEsIHNpemVfdCBsZW5ndGgsIGJvb2wqIG9rLCBi
b29sKiBkaWRSZWFkTnVtYmVyKQorZmxvYXQgY2hhcmFjdGVyc1RvRmxvYXQoY29uc3QgTENoYXIq
IGRhdGEsIHNpemVfdCBsZW5ndGgsIHNpemVfdCYgcGFyc2VkTGVuZ3RoKQogewogICAgIC8vIEZJ
WE1FOiBUaGlzIHdpbGwgcmV0dXJuIG9rIGV2ZW4gd2hlbiB0aGUgc3RyaW5nIGZpdHMgaW50byBh
IGRvdWJsZSBidXQgbm90IGEgZmxvYXQuCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0Pih0
b0RvdWJsZVR5cGU8TENoYXIsIFdURjo6QWxsb3dUcmFpbGluZ0p1bms+KGRhdGEsIGxlbmd0aCwg
b2ssIGRpZFJlYWROdW1iZXIpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHRvRG91
YmxlVHlwZTxMQ2hhciwgQWxsb3dUcmFpbGluZ0p1bms+KGRhdGEsIGxlbmd0aCwgMCwgcGFyc2Vk
TGVuZ3RoKSk7CiB9CiAKLWZsb2F0IGNoYXJhY3RlcnNUb0Zsb2F0SWdub3JpbmdKdW5rKGNvbnN0
IFVDaGFyKiBkYXRhLCBzaXplX3QgbGVuZ3RoLCBib29sKiBvaywgYm9vbCogZGlkUmVhZE51bWJl
cikKK2Zsb2F0IGNoYXJhY3RlcnNUb0Zsb2F0KGNvbnN0IFVDaGFyKiBkYXRhLCBzaXplX3QgbGVu
Z3RoLCBzaXplX3QmIHBhcnNlZExlbmd0aCkKIHsKICAgICAvLyBGSVhNRTogVGhpcyB3aWxsIHJl
dHVybiBvayBldmVuIHdoZW4gdGhlIHN0cmluZyBmaXRzIGludG8gYSBkb3VibGUgYnV0IG5vdCBh
IGZsb2F0LgotICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4odG9Eb3VibGVUeXBlPFVDaGFy
LCBXVEY6OkFsbG93VHJhaWxpbmdKdW5rPihkYXRhLCBsZW5ndGgsIG9rLCBkaWRSZWFkTnVtYmVy
KSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0Pih0b0RvdWJsZVR5cGU8VUNoYXIsIEFs
bG93VHJhaWxpbmdKdW5rPihkYXRhLCBsZW5ndGgsIDAsIHBhcnNlZExlbmd0aCkpOwogfQogCiBj
b25zdCBTdHJpbmcmIGVtcHR5U3RyaW5nKCkKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3RleHQvV1RG
U3RyaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvdGV4dC9XVEZTdHJpbmcuaAko
cmV2aXNpb24gMTEzMzIwKQorKysgU291cmNlL1dURi93dGYvdGV4dC9XVEZTdHJpbmcuaAkod29y
a2luZyBjb3B5KQpAQCAtODQsMTIgKzg0LDE1IEBAIHVpbnQ2NF90IGNoYXJhY3RlcnNUb1VJbnQ2
NChjb25zdCBVQ2hhcioKIGludHB0cl90IGNoYXJhY3RlcnNUb0ludFB0cihjb25zdCBMQ2hhcios
IHNpemVfdCwgYm9vbCogb2sgPSAwKTsgLy8gaWdub3JlcyB0cmFpbGluZyBnYXJiYWdlCiBpbnRw
dHJfdCBjaGFyYWN0ZXJzVG9JbnRQdHIoY29uc3QgVUNoYXIqLCBzaXplX3QsIGJvb2wqIG9rID0g
MCk7IC8vIGlnbm9yZXMgdHJhaWxpbmcgZ2FyYmFnZQogCi1XVEZfRVhQT1JUX1BSSVZBVEUgZG91
YmxlIGNoYXJhY3RlcnNUb0RvdWJsZShjb25zdCBMQ2hhciosIHNpemVfdCwgYm9vbCogb2sgPSAw
LCBib29sKiBkaWRSZWFkTnVtYmVyID0gMCk7Ci1XVEZfRVhQT1JUX1BSSVZBVEUgZG91YmxlIGNo
YXJhY3RlcnNUb0RvdWJsZShjb25zdCBVQ2hhciosIHNpemVfdCwgYm9vbCogb2sgPSAwLCBib29s
KiBkaWRSZWFkTnVtYmVyID0gMCk7Ci1mbG9hdCBjaGFyYWN0ZXJzVG9GbG9hdChjb25zdCBMQ2hh
ciosIHNpemVfdCwgYm9vbCogb2sgPSAwLCBib29sKiBkaWRSZWFkTnVtYmVyID0gMCk7Ci1XVEZf
RVhQT1JUX1BSSVZBVEUgZmxvYXQgY2hhcmFjdGVyc1RvRmxvYXRJZ25vcmluZ0p1bmsoY29uc3Qg
TENoYXIqLCBzaXplX3QsIGJvb2wqIG9rID0gMCwgYm9vbCogZGlkUmVhZE51bWJlciA9IDApOwot
V1RGX0VYUE9SVF9QUklWQVRFIGZsb2F0IGNoYXJhY3RlcnNUb0Zsb2F0KGNvbnN0IFVDaGFyKiwg
c2l6ZV90LCBib29sKiBvayA9IDAsIGJvb2wqIGRpZFJlYWROdW1iZXIgPSAwKTsKLVdURl9FWFBP
UlRfUFJJVkFURSBmbG9hdCBjaGFyYWN0ZXJzVG9GbG9hdElnbm9yaW5nSnVuayhjb25zdCBVQ2hh
ciosIHNpemVfdCwgYm9vbCogb2sgPSAwLCBib29sKiBkaWRSZWFkTnVtYmVyID0gMCk7CisvLyBG
SVhNRTogTGlrZSB0aGUgc3RyaWN0IGZ1bmN0aW9ucyBhYm92ZSwgdGhlc2UgZ2l2ZSBmYWxzZSBm
b3IgIm9rIiB3aGVuIHRoZXJlIGlzIHRyYWlsaW5nIGdhcmJhZ2UuCisvLyBMaWtlIHRoZSBub24t
c3RyaWN0IGZ1bmN0aW9ucyBhYm92ZSwgdGhlc2UgcmV0dXJuIHRoZSB2YWx1ZSB3aGVuIHRoZXJl
IGlzIHRyYWlsaW5nIGdhcmJhZ2UuCisvLyBJdCB3b3VsZCBiZSBiZXR0ZXIgaWYgdGhlc2Ugd2Vy
ZSBtb3JlIGNvbnNpc3RlbnQgd2l0aCB0aGUgYWJvdmUgZnVuY3Rpb25zIGluc3RlYWQuCitXVEZf
RVhQT1JUX1BSSVZBVEUgZG91YmxlIGNoYXJhY3RlcnNUb0RvdWJsZShjb25zdCBMQ2hhciosIHNp
emVfdCwgYm9vbCogb2sgPSAwKTsKK1dURl9FWFBPUlRfUFJJVkFURSBkb3VibGUgY2hhcmFjdGVy
c1RvRG91YmxlKGNvbnN0IFVDaGFyKiwgc2l6ZV90LCBib29sKiBvayA9IDApOworZmxvYXQgY2hh
cmFjdGVyc1RvRmxvYXQoY29uc3QgTENoYXIqLCBzaXplX3QsIGJvb2wqIG9rID0gMCk7CitXVEZf
RVhQT1JUX1BSSVZBVEUgZmxvYXQgY2hhcmFjdGVyc1RvRmxvYXQoY29uc3QgVUNoYXIqLCBzaXpl
X3QsIGJvb2wqIG9rID0gMCk7CitXVEZfRVhQT1JUX1BSSVZBVEUgZmxvYXQgY2hhcmFjdGVyc1Rv
RmxvYXQoY29uc3QgTENoYXIqLCBzaXplX3QsIHNpemVfdCYgcGFyc2VkTGVuZ3RoKTsKK1dURl9F
WFBPUlRfUFJJVkFURSBmbG9hdCBjaGFyYWN0ZXJzVG9GbG9hdChjb25zdCBVQ2hhciosIHNpemVf
dCwgc2l6ZV90JiBwYXJzZWRMZW5ndGgpOwogCiBlbnVtIEZsb2F0Q29udmVyc2lvbkZsYWdzIHsK
ICAgICBTaG91bGRSb3VuZFNpZ25pZmljYW50RmlndXJlcyA9IDEgPDwgMCwKQEAgLTMxMSw4ICsz
MTQsMTIgQEAgcHVibGljOgogICAgIGludDY0X3QgdG9JbnQ2NChib29sKiBvayA9IDApIGNvbnN0
OwogICAgIFdURl9FWFBPUlRfUFJJVkFURSB1aW50NjRfdCB0b1VJbnQ2NChib29sKiBvayA9IDAp
IGNvbnN0OwogICAgIFdURl9FWFBPUlRfUFJJVkFURSBpbnRwdHJfdCB0b0ludFB0cihib29sKiBv
ayA9IDApIGNvbnN0OwotICAgIFdURl9FWFBPUlRfUFJJVkFURSBkb3VibGUgdG9Eb3VibGUoYm9v
bCogb2sgPSAwLCBib29sKiBkaWRSZWFkTnVtYmVyID0gMCkgY29uc3Q7Ci0gICAgV1RGX0VYUE9S
VF9QUklWQVRFIGZsb2F0IHRvRmxvYXQoYm9vbCogb2sgPSAwLCBib29sKiBkaWRSZWFkTnVtYmVy
ID0gMCkgY29uc3Q7CisKKyAgICAvLyBGSVhNRTogTGlrZSB0aGUgc3RyaWN0IGZ1bmN0aW9ucyBh
Ym92ZSwgdGhlc2UgZ2l2ZSBmYWxzZSBmb3IgIm9rIiB3aGVuIHRoZXJlIGlzIHRyYWlsaW5nIGdh
cmJhZ2UuCisgICAgLy8gTGlrZSB0aGUgbm9uLXN0cmljdCBmdW5jdGlvbnMgYWJvdmUsIHRoZXNl
IHJldHVybiB0aGUgdmFsdWUgd2hlbiB0aGVyZSBpcyB0cmFpbGluZyBnYXJiYWdlLgorICAgIC8v
IEl0IHdvdWxkIGJlIGJldHRlciBpZiB0aGVzZSB3ZXJlIG1vcmUgY29uc2lzdGVudCB3aXRoIHRo
ZSBhYm92ZSBmdW5jdGlvbnMgaW5zdGVhZC4KKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgZG91Ymxl
IHRvRG91YmxlKGJvb2wqIG9rID0gMCkgY29uc3Q7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIGZs
b2F0IHRvRmxvYXQoYm9vbCogb2sgPSAwKSBjb25zdDsKIAogICAgIGJvb2wgcGVyY2VudGFnZShp
bnQmIHBlcmNlbnRhZ2UpIGNvbnN0OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMTMzMjAp
CisrKyBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwy
OSBAQAorMjAxMi0wNC0wNCAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAg
ICAgU3RyZWFtbGluZSBzdHJ0b2QgYW5kIGZpeCBzb21lIHJlbGF0ZWQgcHJvYmxlbXMKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgyODU3CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVmYWN0b3Jpbmcgb2Yg
Y29kZSBjb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAgICogZG9tL1ZpZXdwb3J0
QXJndW1lbnRzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om51bWVyaWNQcmVmaXgpOiBSZW1vdmVk
IGEgY29uZnVzaW5nIGNvbW1lbnQgdGhhdCBqdXN0IHNhaWQKKyAgICAgICAgIndlIHRvbGVyYXRl
IGV4dHJhIGNoYXJhY3RlcnMiIGluIGEgcm91bmRhYm91dCB3YXkuIE1hZGUgdGhlICJvayIKKyAg
ICAgICAgYXJndW1lbnQgb3B0aW9uYWwuIENoYW5nZWQgdG8gY2FsbCB0aGUgbmV3IHZlcnNpb24g
b2YgY2hhcmFjdGVyc1RvRmxvYXQKKyAgICAgICAgdGhhdCByZXR1cm5zIHRoZSBudW1iZXIgb2Yg
Y2hhcmFjdGVycyBwYXJzZWQgcmF0aGVyIHRoYW4gdXNpbmcgdGhlCisgICAgICAgIGNoYXJhY3Rl
cnNUb0Zsb2F0SWdub3JpbmdKdW5rL2RpZFJlYWROdW1iZXIgc29sdXRpb24gZnJvbSBiZWZvcmUu
CisgICAgICAgIChXZWJDb3JlOjpmaW5kU2l6ZVZhbHVlKTogU2luY2UgbnVtZXJpY1ByZWZpeCBp
cyBndWFyYW50ZWVkIHRvIHJldHVybiAwCisgICAgICAgIHdoZW4gaXQgY2FuJ3QgcGFyc2UsIHJl
bW92ZWQgdGhlICJvayIgY29kZS4gQWxzbyBjaGFuZ2VkIHRoZSB1bnVzdWFsCisgICAgICAgIHN5
bnRheCAiZmxvYXQoMS4wKSIgdG8ganVzdCAiMSIsIHdoaWNoIHdvcmtzIGp1c3QgYXMgd2VsbC4K
KyAgICAgICAgKFdlYkNvcmU6OmZpbmRTY2FsZVZhbHVlKTogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjpmaW5kVXNlclNjYWxhYmxlVmFsdWUpOiBEaXR0by4KKworICAgICAgICAqIGh0bWwvcGFy
c2VyL0hUTUxQYXJzZXJJZGlvbXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VUb0RvdWJs
ZUZvck51bWJlclR5cGUpOiBSZW1vdmVkIGFuIHVubmVlZGVkIGNvZGUgcGF0aAorICAgICAgICBh
bmQgcmVwbGFjZWQgaXQgd2l0aCBhbiBhc3NlcnRpb247IHRvRG91YmxlIG5vIGxvbmdlciB3aWxs
IHJldHVybiBpbmZpbml0eQorICAgICAgICBvciBub3QtYS1udW1iZXIgdmFsdWVzLgorCiAyMDEy
LTA0LTA1ICBLZWlzaGkgSGF0dG9yaSAgPGtlaXNoaUB3ZWJraXQub3JnPgogCiAgICAgICAgIEhp
ZGUgZGF0YWxpc3QgZWxlbWVudApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1ZpZXdwb3J0QXJn
dW1lbnRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vVmlld3BvcnRBcmd1
bWVudHMuY3BwCShyZXZpc2lvbiAxMTMzMjApCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vVmlld3Bv
cnRBcmd1bWVudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDQsMjggKzIwNCwyNCBAQCB2b2lk
IHJlc3RyaWN0U2NhbGVGYWN0b3JUb0luaXRpYWxTY2FsZUlmCiAgICAgICAgIHJlc3VsdC5tYXhp
bXVtU2NhbGUgPSByZXN1bHQubWluaW11bVNjYWxlID0gcmVzdWx0LmluaXRpYWxTY2FsZTsKIH0K
IAotc3RhdGljIGZsb2F0IG51bWVyaWNQcmVmaXgoY29uc3QgU3RyaW5nJiBrZXlTdHJpbmcsIGNv
bnN0IFN0cmluZyYgdmFsdWVTdHJpbmcsIERvY3VtZW50KiBkb2N1bWVudCwgYm9vbCogb2spCitz
dGF0aWMgZmxvYXQgbnVtZXJpY1ByZWZpeChjb25zdCBTdHJpbmcmIGtleVN0cmluZywgY29uc3Qg
U3RyaW5nJiB2YWx1ZVN0cmluZywgRG9jdW1lbnQqIGRvY3VtZW50LCBib29sKiBvayA9IDApCiB7
Ci0gICAgLy8gSWYgYSBwcmVmaXggb2YgcHJvcGVydHktdmFsdWUgY2FuIGJlIGNvbnZlcnRlZCB0
byBhIG51bWJlciB1c2luZyBzdHJ0b2QsCi0gICAgLy8gdGhlIHZhbHVlIHdpbGwgYmUgdGhhdCBu
dW1iZXIuIFRoZSByZW1haW5kZXIgb2YgdGhlIHN0cmluZyBpcyBpZ25vcmVkLgotICAgIC8vIFNv
IHdoZW4gU3RyaW5nOjp0b0Zsb2F0IHNheXMgdGhlcmUgaXMgYW4gZXJyb3IsIGl0IG1heSBiZSBh
IGZhbHNlIHBvc2l0aXZlLAotICAgIC8vIGFuZCB3ZSBzaG91bGQgY2hlY2sgaWYgdGhlIHZhbHVl
U3RyaW5nIHByZWZpeCB3YXMgYSBudW1iZXIuCi0KLSAgICBib29sIGRpZFJlYWROdW1iZXI7Cisg
ICAgc2l6ZV90IHBhcnNlZExlbmd0aDsKICAgICBmbG9hdCB2YWx1ZTsKICAgICBpZiAodmFsdWVT
dHJpbmcuaXM4Qml0KCkpCi0gICAgICAgIHZhbHVlID0gV1RGOjpjaGFyYWN0ZXJzVG9GbG9hdEln
bm9yaW5nSnVuayh2YWx1ZVN0cmluZy5jaGFyYWN0ZXJzOCgpLCB2YWx1ZVN0cmluZy5sZW5ndGgo
KSwgb2ssICZkaWRSZWFkTnVtYmVyKTsKKyAgICAgICAgdmFsdWUgPSBjaGFyYWN0ZXJzVG9GbG9h
dCh2YWx1ZVN0cmluZy5jaGFyYWN0ZXJzOCgpLCB2YWx1ZVN0cmluZy5sZW5ndGgoKSwgcGFyc2Vk
TGVuZ3RoKTsKICAgICBlbHNlCi0gICAgICAgIHZhbHVlID0gV1RGOjpjaGFyYWN0ZXJzVG9GbG9h
dElnbm9yaW5nSnVuayh2YWx1ZVN0cmluZy5jaGFyYWN0ZXJzMTYoKSwgdmFsdWVTdHJpbmcubGVu
Z3RoKCksIG9rLCAmZGlkUmVhZE51bWJlcik7Ci0gICAgaWYgKCEqb2spIHsKLSAgICAgICAgaWYg
KCFkaWRSZWFkTnVtYmVyKSB7Ci0gICAgICAgICAgICBBU1NFUlQoaXNuYW4odmFsdWUpIHx8ICF2
YWx1ZSk7Ci0gICAgICAgICAgICByZXBvcnRWaWV3cG9ydFdhcm5pbmcoZG9jdW1lbnQsIFVucmVj
b2duaXplZFZpZXdwb3J0QXJndW1lbnRWYWx1ZUVycm9yLCB2YWx1ZVN0cmluZywga2V5U3RyaW5n
KTsKLSAgICAgICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICAgICAgfQotICAgICAgICAqb2sgPSB0
cnVlOwotICAgICAgICByZXBvcnRWaWV3cG9ydFdhcm5pbmcoZG9jdW1lbnQsIFRydW5jYXRlZFZp
ZXdwb3J0QXJndW1lbnRWYWx1ZUVycm9yLCB2YWx1ZVN0cmluZywga2V5U3RyaW5nKTsKKyAgICAg
ICAgdmFsdWUgPSBjaGFyYWN0ZXJzVG9GbG9hdCh2YWx1ZVN0cmluZy5jaGFyYWN0ZXJzMTYoKSwg
dmFsdWVTdHJpbmcubGVuZ3RoKCksIHBhcnNlZExlbmd0aCk7CisgICAgaWYgKCFwYXJzZWRMZW5n
dGgpIHsKKyAgICAgICAgcmVwb3J0Vmlld3BvcnRXYXJuaW5nKGRvY3VtZW50LCBVbnJlY29nbml6
ZWRWaWV3cG9ydEFyZ3VtZW50VmFsdWVFcnJvciwgdmFsdWVTdHJpbmcsIGtleVN0cmluZyk7Cisg
ICAgICAgIGlmIChvaykKKyAgICAgICAgICAgICpvayA9IGZhbHNlOworICAgICAgICByZXR1cm4g
MDsKICAgICB9CisgICAgaWYgKHBhcnNlZExlbmd0aCA8IHZhbHVlU3RyaW5nLmxlbmd0aCgpKQor
ICAgICAgICByZXBvcnRWaWV3cG9ydFdhcm5pbmcoZG9jdW1lbnQsIFRydW5jYXRlZFZpZXdwb3J0
QXJndW1lbnRWYWx1ZUVycm9yLCB2YWx1ZVN0cmluZywga2V5U3RyaW5nKTsKKyAgICBpZiAob2sp
CisgICAgICAgICpvayA9IHRydWU7CiAgICAgcmV0dXJuIHZhbHVlOwogfQogCkBAIC0yNDMsMTAg
KzIzOSw3IEBAIHN0YXRpYyBmbG9hdCBmaW5kU2l6ZVZhbHVlKGNvbnN0IFN0cmluZyYKICAgICBp
ZiAoZXF1YWxJZ25vcmluZ0Nhc2UodmFsdWVTdHJpbmcsICJkZXZpY2UtaGVpZ2h0IikpCiAgICAg
ICAgIHJldHVybiBWaWV3cG9ydEFyZ3VtZW50czo6VmFsdWVEZXZpY2VIZWlnaHQ7CiAKLSAgICBi
b29sIG9rOwotICAgIGZsb2F0IHZhbHVlID0gbnVtZXJpY1ByZWZpeChrZXlTdHJpbmcsIHZhbHVl
U3RyaW5nLCBkb2N1bWVudCwgJm9rKTsKLSAgICBpZiAoIW9rKQotICAgICAgICByZXR1cm4gZmxv
YXQoMC4wKTsKKyAgICBmbG9hdCB2YWx1ZSA9IG51bWVyaWNQcmVmaXgoa2V5U3RyaW5nLCB2YWx1
ZVN0cmluZywgZG9jdW1lbnQpOwogCiAgICAgaWYgKHZhbHVlIDwgMCkKICAgICAgICAgcmV0dXJu
IFZpZXdwb3J0QXJndW1lbnRzOjpWYWx1ZUF1dG87CkBAIC0yNjMsMjAgKzI1NiwxNyBAQCBzdGF0
aWMgZmxvYXQgZmluZFNjYWxlVmFsdWUoY29uc3QgU3RyaW5nCiAgICAgLy8gNSkgbm8gYW5kIHVu
a25vd24gdmFsdWVzIGFyZSB0cmFuc2xhdGVkIHRvIDAuMAogCiAgICAgaWYgKGVxdWFsSWdub3Jp
bmdDYXNlKHZhbHVlU3RyaW5nLCAieWVzIikpCi0gICAgICAgIHJldHVybiBmbG9hdCgxLjApOwor
ICAgICAgICByZXR1cm4gMTsKICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UodmFsdWVTdHJpbmcs
ICJubyIpKQotICAgICAgICByZXR1cm4gZmxvYXQoMC4wKTsKKyAgICAgICAgcmV0dXJuIDA7CiAg
ICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKHZhbHVlU3RyaW5nLCAiZGVza3RvcC13aWR0aCIpKQot
ICAgICAgICByZXR1cm4gZmxvYXQoMTAuMCk7CisgICAgICAgIHJldHVybiAxMDsKICAgICBpZiAo
ZXF1YWxJZ25vcmluZ0Nhc2UodmFsdWVTdHJpbmcsICJkZXZpY2Utd2lkdGgiKSkKLSAgICAgICAg
cmV0dXJuIGZsb2F0KDEwLjApOworICAgICAgICByZXR1cm4gMTA7CiAgICAgaWYgKGVxdWFsSWdu
b3JpbmdDYXNlKHZhbHVlU3RyaW5nLCAiZGV2aWNlLWhlaWdodCIpKQotICAgICAgICByZXR1cm4g
ZmxvYXQoMTAuMCk7CisgICAgICAgIHJldHVybiAxMDsKIAotICAgIGJvb2wgb2s7Ci0gICAgZmxv
YXQgdmFsdWUgPSBudW1lcmljUHJlZml4KGtleVN0cmluZywgdmFsdWVTdHJpbmcsIGRvY3VtZW50
LCAmb2spOwotICAgIGlmICghb2spCi0gICAgICAgIHJldHVybiBmbG9hdCgwLjApOworICAgIGZs
b2F0IHZhbHVlID0gbnVtZXJpY1ByZWZpeChrZXlTdHJpbmcsIHZhbHVlU3RyaW5nLCBkb2N1bWVu
dCk7CiAKICAgICBpZiAodmFsdWUgPCAwKQogICAgICAgICByZXR1cm4gVmlld3BvcnRBcmd1bWVu
dHM6OlZhbHVlQXV0bzsKQEAgLTMwNCwxMCArMjk0LDcgQEAgc3RhdGljIGZsb2F0IGZpbmRVc2Vy
U2NhbGFibGVWYWx1ZShjb25zdAogICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZSh2YWx1ZVN0cmlu
ZywgImRldmljZS1oZWlnaHQiKSkKICAgICAgICAgcmV0dXJuIDE7CiAKLSAgICBib29sIG9rOwot
ICAgIGZsb2F0IHZhbHVlID0gbnVtZXJpY1ByZWZpeChrZXlTdHJpbmcsIHZhbHVlU3RyaW5nLCBk
b2N1bWVudCwgJm9rKTsKLSAgICBpZiAoIW9rKQotICAgICAgICByZXR1cm4gMDsKKyAgICBmbG9h
dCB2YWx1ZSA9IG51bWVyaWNQcmVmaXgoa2V5U3RyaW5nLCB2YWx1ZVN0cmluZywgZG9jdW1lbnQp
OwogCiAgICAgaWYgKGZhYnModmFsdWUpIDwgMSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0zMzEs
NyArMzE4LDcgQEAgc3RhdGljIGZsb2F0IGZpbmRUYXJnZXREZW5zaXR5RFBJVmFsdWUoYwogICAg
IGlmICghb2spCiAgICAgICAgIHJldHVybiBWaWV3cG9ydEFyZ3VtZW50czo6VmFsdWVBdXRvOwog
Ci0gICAgIGlmICh2YWx1ZSA8IDcwIHx8IHZhbHVlID4gNDAwKSB7CisgICAgaWYgKHZhbHVlIDwg
NzAgfHwgdmFsdWUgPiA0MDApIHsKICAgICAgICAgcmVwb3J0Vmlld3BvcnRXYXJuaW5nKGRvY3Vt
ZW50LCBUYXJnZXREZW5zaXR5RHBpVG9vU21hbGxPckxhcmdlRXJyb3IsIFN0cmluZygpLCBTdHJp
bmcoKSk7CiAgICAgICAgIHJldHVybiBWaWV3cG9ydEFyZ3VtZW50czo6VmFsdWVBdXRvOwogICAg
IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxQYXJzZXJJZGlvbXMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxQYXJzZXJJZGlv
bXMuY3BwCShyZXZpc2lvbiAxMTMzMjApCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9I
VE1MUGFyc2VySWRpb21zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzksMTAgKzc5LDcgQEAgYm9v
bCBwYXJzZVRvRG91YmxlRm9yTnVtYmVyVHlwZShjb25zdCBTdAogICAgIGRvdWJsZSB2YWx1ZSA9
IHN0cmluZy50b0RvdWJsZSgmdmFsaWQpOwogICAgIGlmICghdmFsaWQpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIC8vIE5hTiBhbmQgaW5maW5pdHkgYXJlIGNvbnNpZGVyZWQgdmFsaWQg
YnkgU3RyaW5nOjp0b0RvdWJsZSwgYnV0IG5vdCB2YWxpZCBoZXJlLgotICAgIGlmICghaXNmaW5p
dGUodmFsdWUpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgQVNTRVJUKGlzZmluaXRlKHZh
bHVlKSk7CiAKICAgICAvLyBOdW1iZXJzIGFyZSBjb25zaWRlcmVkIGZpbml0ZSBJRUVFIDc1NCBz
aW5nbGUtcHJlY2lzaW9uIGZsb2F0aW5nIHBvaW50IHZhbHVlcy4KICAgICAvLyBTZWUgSFRNTDUg
Mi41LjQuMyBgUmVhbCBudW1iZXJzLicK
</data>

          </attachment>
      

    </bug>

</bugzilla>