<?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>120022</bug_id>
          
          <creation_ts>2013-08-19 12:45:39 -0700</creation_ts>
          <short_desc>DFG should inline new typedArray()</short_desc>
          <delta_ts>2013-08-21 13:02:53 -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>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>commit-queue</cc>
    
    <cc>eflews.bot</cc>
    
    <cc>ggaren</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>sam</cc>
    
    <cc>webkit-ews</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>918745</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-08-19 12:45:39 -0700</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>918746</commentid>
    <comment_count>1</comment_count>
      <attachid>209110</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-08-19 12:46:44 -0700</bug_when>
    <thetext>Created attachment 209110
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>919295</commentid>
    <comment_count>2</comment_count>
      <attachid>209240</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-08-20 17:36:30 -0700</bug_when>
    <thetext>Created attachment 209240
almost done</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>919310</commentid>
    <comment_count>3</comment_count>
      <attachid>209245</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-08-20 18:37:26 -0700</bug_when>
    <thetext>Created attachment 209245
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>919311</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-08-20 18:39:34 -0700</bug_when>
    <thetext>Attachment 209245 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;LayoutTests/ChangeLog&apos;, u&apos;LayoutTests/fast/js/regress/Float64Array-alloc-long-lived-expected.txt&apos;, u&apos;LayoutTests/fast/js/regress/Float64Array-alloc-long-lived.html&apos;, u&apos;LayoutTests/fast/js/regress/Int16Array-alloc-long-lived-expected.txt&apos;, u&apos;LayoutTests/fast/js/regress/Int16Array-alloc-long-lived.html&apos;, u&apos;LayoutTests/fast/js/regress/Int8Array-alloc-long-lived-expected.txt&apos;, u&apos;LayoutTests/fast/js/regress/Int8Array-alloc-long-lived.html&apos;, u&apos;LayoutTests/fast/js/regress/script-tests/Float64Array-alloc-long-lived.js&apos;, u&apos;LayoutTests/fast/js/regress/script-tests/Int16Array-alloc-long-lived.js&apos;, u&apos;LayoutTests/fast/js/regress/script-tests/Int32Array-alloc-long-lived.js&apos;, u&apos;LayoutTests/fast/js/regress/script-tests/Int8Array-alloc-long-lived.js&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source/JavaScriptCore/bytecode/SpeculatedType.cpp&apos;, u&apos;Source/JavaScriptCore/bytecode/SpeculatedType.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGBackwardsPropagationPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGCCallHelpers.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGCSEPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGClobberize.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGFixupPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGGraph.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGNode.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGNodeType.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGOperations.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGOperations.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGPredictionPropagationPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSafeToExecute.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp&apos;, u&apos;Source/JavaScriptCore/jit/JITOpcodes.cpp&apos;, u&apos;Source/JavaScriptCore/jit/JITOpcodes32_64.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/JSArray.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSArrayBufferView.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSGenericTypedArrayViewConstructorInlines.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSObject.h&apos;, u&apos;Source/JavaScriptCore/runtime/TypedArrayType.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/TypedArrayType.h&apos;]&quot; exit_code: 1
Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:171:  The parameter name &quot;type&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:1691:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Total errors found: 2 in 40 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>919312</commentid>
    <comment_count>5</comment_count>
      <attachid>209245</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-08-20 18:45:44 -0700</bug_when>
    <thetext>Comment on attachment 209245
the patch

Attachment 209245 did not pass qt-ews (qt):
Output: http://webkit-queues.appspot.com/results/1520382</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>919313</commentid>
    <comment_count>6</comment_count>
      <attachid>209245</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-08-20 18:45:47 -0700</bug_when>
    <thetext>Comment on attachment 209245
the patch

Attachment 209245 did not pass efl-wk2-ews (efl-wk2):
Output: http://webkit-queues.appspot.com/results/1515727</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>919314</commentid>
    <comment_count>7</comment_count>
      <attachid>209245</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-08-20 18:47:25 -0700</bug_when>
    <thetext>Comment on attachment 209245
the patch

Attachment 209245 did not pass qt-wk2-ews (qt-wk2):
Output: http://webkit-queues.appspot.com/results/1525239</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>919315</commentid>
    <comment_count>8</comment_count>
      <attachid>209245</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-08-20 19:03:13 -0700</bug_when>
    <thetext>Comment on attachment 209245
the patch

Attachment 209245 did not pass efl-ews (efl):
Output: http://webkit-queues.appspot.com/results/1512756</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>919325</commentid>
    <comment_count>9</comment_count>
      <attachid>209247</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-08-20 20:35:25 -0700</bug_when>
    <thetext>Created attachment 209247
the patch

A fix for less intelligent compilers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>919326</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-08-20 20:37:04 -0700</bug_when>
    <thetext>Attachment 209247 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;LayoutTests/ChangeLog&apos;, u&apos;LayoutTests/fast/js/regress/Float64Array-alloc-long-lived-expected.txt&apos;, u&apos;LayoutTests/fast/js/regress/Float64Array-alloc-long-lived.html&apos;, u&apos;LayoutTests/fast/js/regress/Int16Array-alloc-long-lived-expected.txt&apos;, u&apos;LayoutTests/fast/js/regress/Int16Array-alloc-long-lived.html&apos;, u&apos;LayoutTests/fast/js/regress/Int8Array-alloc-long-lived-expected.txt&apos;, u&apos;LayoutTests/fast/js/regress/Int8Array-alloc-long-lived.html&apos;, u&apos;LayoutTests/fast/js/regress/script-tests/Float64Array-alloc-long-lived.js&apos;, u&apos;LayoutTests/fast/js/regress/script-tests/Int16Array-alloc-long-lived.js&apos;, u&apos;LayoutTests/fast/js/regress/script-tests/Int32Array-alloc-long-lived.js&apos;, u&apos;LayoutTests/fast/js/regress/script-tests/Int8Array-alloc-long-lived.js&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source/JavaScriptCore/bytecode/SpeculatedType.cpp&apos;, u&apos;Source/JavaScriptCore/bytecode/SpeculatedType.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGBackwardsPropagationPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGCCallHelpers.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGCSEPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGClobberize.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGFixupPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGGraph.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGNode.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGNodeType.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGOperations.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGOperations.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGPredictionPropagationPhase.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSafeToExecute.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp&apos;, u&apos;Source/JavaScriptCore/jit/JITOpcodes.cpp&apos;, u&apos;Source/JavaScriptCore/jit/JITOpcodes32_64.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/JSArray.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSArrayBufferView.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSGenericTypedArrayViewConstructorInlines.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSObject.h&apos;, u&apos;Source/JavaScriptCore/runtime/TypedArrayType.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/TypedArrayType.h&apos;]&quot; exit_code: 1
Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:171:  The parameter name &quot;type&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:1691:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Total errors found: 2 in 40 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>919432</commentid>
    <comment_count>11</comment_count>
      <attachid>209247</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2013-08-21 08:52:57 -0700</bug_when>
    <thetext>Comment on attachment 209247
the patch

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

&gt; Source/JavaScriptCore/ChangeLog:18
&gt; +        is turned into the NewTypedArray intrinsic. Later, of child1 (i.e. &apos;blah&apos;)

s/of/if

&gt;&gt; Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:171
&gt;&gt; +    bool handleTypedArrayConstructor(int resultOperand, InternalFunction*, int registerOffset, int argumentCountIncludingThis, TypedArrayType type);
&gt; 
&gt; The parameter name &quot;type&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]

Fix this :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>919506</commentid>
    <comment_count>12</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-08-21 10:19:48 -0700</bug_when>
    <thetext>Benchmark report for SunSpider, V8Spider, Octane, Kraken, JSBench, JSRegress, and DSP on oldmac (MacPro4,1).

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/pizlo/OpenSource/WebKitBuild/Release/DumpRenderTree (r154377)
&quot;InlineAlloc&quot; at /Volumes/Data/fromMiniMe/primary/OpenSource/WebKitBuild/Release/DumpRenderTree (r154377)

Collected 12 samples per benchmark/VM, with 4 VM invocations per benchmark. Emitted a call to gc() between sample measurements. Used
1 benchmark iteration per VM invocation for warm-up. Used the jsc-specific preciseTime() function to get microsecond-level timing.
Reporting benchmark execution times with 95% confidence intervals in milliseconds.

                                                             TipOfTree                InlineAlloc                                    
SunSpider:
   3d-cube                                                 7.7747+-0.2891            7.6122+-0.2301          might be 1.0213x faster
   3d-morph                                                8.4042+-0.0833     ?      8.4356+-0.0870        ?
   3d-raytrace                                             9.5497+-0.2998            9.5160+-0.3047        
   access-binary-trees                                     2.7488+-0.3093            2.7450+-0.3167        
   access-fannkuch                                         7.6606+-0.0376            7.6433+-0.0390        
   access-nbody                                            4.1223+-0.0489            4.1041+-0.0394        
   access-nsieve                                           4.9050+-0.0653            4.8810+-0.0746        
   bitops-3bit-bits-in-byte                                1.8460+-0.0329     ^      1.7946+-0.0107        ^ definitely 1.0287x faster
   bitops-bits-in-byte                                     6.6703+-0.0584     ?      6.7175+-0.0737        ?
   bitops-bitwise-and                                      2.8029+-0.0326            2.7653+-0.0429          might be 1.0136x faster
   bitops-nsieve-bits                                      4.7089+-0.0393            4.7014+-0.0414        
   controlflow-recursive                                   2.9434+-0.0240     ?      2.9978+-0.0708        ? might be 1.0185x slower
   crypto-aes                                              5.9733+-0.3473            5.9107+-0.2899          might be 1.0106x faster
   crypto-md5                                              3.2492+-0.0606            3.2384+-0.0617        
   crypto-sha1                                             2.9954+-0.0452            2.9403+-0.0437          might be 1.0187x faster
   date-format-tofte                                      13.1546+-1.0071           13.1275+-0.9659        
   date-format-xparb                                       9.3071+-0.6714     ?      9.5249+-0.7396        ? might be 1.0234x slower
   math-cordic                                             3.9242+-0.0352     ?      3.9461+-0.0192        ?
   math-partial-sums                                      10.4970+-0.0290           10.4726+-0.0370        
   math-spectral-norm                                      2.8442+-0.0370     ?      2.8529+-0.0297        ?
   regexp-dna                                             12.9782+-0.6301           12.8178+-0.5322          might be 1.0125x faster
   string-base64                                           6.4370+-0.5505            6.4214+-0.5929        
   string-fasta                                           12.2881+-0.1464           12.2108+-0.1253        
   string-tagcloud                                        14.8669+-0.2310     ?     14.8729+-0.2187        ?
   string-unpack-code                                     32.3795+-0.7718           32.0481+-0.3149          might be 1.0103x faster
   string-validate-input                                   9.0677+-0.1770            8.9481+-0.2276          might be 1.0134x faster

   &lt;arithmetic&gt; *                                          7.8500+-0.1349            7.8172+-0.1398          might be 1.0042x faster
   &lt;geometric&gt;                                             6.2312+-0.1016            6.2069+-0.1029          might be 1.0039x faster
   &lt;harmonic&gt;                                              5.0701+-0.0759            5.0428+-0.0787          might be 1.0054x faster

                                                             TipOfTree                InlineAlloc                                    
V8Spider:
   crypto                                                 81.5586+-0.3559           81.4630+-0.3788        
   deltablue                                             102.2116+-1.0560     ?    102.5456+-0.5378        ?
   earley-boyer                                           71.6705+-0.3700           71.6049+-0.5320        
   raytrace                                               45.9929+-5.3371     ?     46.1615+-5.1969        ?
   regexp                                                104.1917+-2.0254          102.5365+-0.4734          might be 1.0161x faster
   richards                                              117.2156+-1.6040          116.5673+-1.7465        
   splay                                                  59.8726+-3.4770     ?     59.9441+-3.4551        ?

   &lt;arithmetic&gt;                                           83.2448+-0.8593           82.9747+-0.7452          might be 1.0033x faster
   &lt;geometric&gt; *                                          79.3191+-1.1836           79.1510+-0.9761          might be 1.0021x faster
   &lt;harmonic&gt;                                             75.1002+-1.6936           75.0304+-1.4054          might be 1.0009x faster

                                                             TipOfTree                InlineAlloc                                    
Octane and V8v7:
   encrypt                                                0.47487+-0.00076          0.47478+-0.00069       
   decrypt                                                8.66462+-0.02477          8.65431+-0.01733       
   deltablue                                     x2       0.59545+-0.00631          0.59416+-0.00485       
   earley                                                 0.90704+-0.01580          0.89599+-0.00466         might be 1.0123x faster
   boyer                                                 12.64573+-0.06277         12.63382+-0.05103       
   raytrace                                      x2       4.38205+-0.03395    ?     4.40496+-0.05377       ?
   regexp                                        x2      33.23950+-0.19545    ?    33.32507+-0.17230       ?
   richards                                      x2       0.32354+-0.00271          0.32283+-0.00406       
   splay                                         x2       0.65176+-0.02634          0.64136+-0.00827         might be 1.0162x faster
   navier-stokes                                 x2      10.94309+-0.01203    ?    10.94347+-0.01603       ?
   closure                                                0.38418+-0.01884          0.38326+-0.01851       
   jquery                                                 4.76358+-0.55838          4.73609+-0.55293       
   gbemu                                         x2      90.83779+-3.24956    ?    91.22615+-3.31175       ?
   mandreel                                      x2     194.93612+-1.39532        194.83794+-0.77357       
   pdfjs                                         x2      99.36695+-0.18055    !   100.01355+-0.38784       ! definitely 1.0065x slower
   box2d                                         x2      34.68833+-0.20417    ?    34.69207+-0.18310       ?

V8v7:
   &lt;arithmetic&gt;                                           7.68519+-0.02484    ?     7.69516+-0.02354       ? might be 1.0013x slower
   &lt;geometric&gt; *                                          2.46708+-0.01450          2.46133+-0.00618         might be 1.0023x faster
   &lt;harmonic&gt;                                             0.95689+-0.00846          0.95257+-0.00485         might be 1.0045x faster

Octane including V8v7:
   &lt;arithmetic&gt;                                          37.22189+-0.25133    ?    37.29928+-0.24211       ? might be 1.0021x slower
   &lt;geometric&gt; *                                          7.07940+-0.05390          7.07267+-0.04226         might be 1.0010x faster
   &lt;harmonic&gt;                                             1.32226+-0.01282          1.31672+-0.00878         might be 1.0042x faster

                                                             TipOfTree                InlineAlloc                                    
Kraken:
   ai-astar                                               492.730+-1.298            491.255+-0.398         
   audio-beat-detection                                   256.100+-3.567            255.496+-4.584         
   audio-dft                                              314.049+-1.557      ?     339.032+-24.153        ? might be 1.0796x slower
   audio-fft                                              147.776+-0.288      ?     147.864+-0.172         ?
   audio-oscillator                                       248.750+-1.189      ?     249.490+-1.810         ?
   imaging-darkroom                                       295.701+-1.758      ?     297.813+-1.420         ?
   imaging-desaturate                                     159.473+-0.200      ?     159.631+-0.433         ?
   imaging-gaussian-blur                                  404.553+-0.510            404.551+-0.217         
   json-parse-financial                                    79.445+-0.194             79.164+-0.168         
   json-stringify-tinderbox                               103.648+-0.346            103.328+-0.326         
   stanford-crypto-aes                                    109.355+-1.158            107.618+-0.888           might be 1.0161x faster
   stanford-crypto-ccm                                    121.821+-6.161      ?     122.051+-4.304         ?
   stanford-crypto-pbkdf2                                 264.888+-0.831      !     268.123+-2.100         ! definitely 1.0122x slower
   stanford-crypto-sha256-iterative                       128.084+-0.560            128.021+-0.973         

   &lt;arithmetic&gt; *                                         223.312+-0.376      ?     225.246+-1.600         ? might be 1.0087x slower
   &lt;geometric&gt;                                            193.486+-0.591      ?     194.456+-0.910         ? might be 1.0050x slower
   &lt;harmonic&gt;                                             168.153+-0.828      ?     168.346+-0.664         ? might be 1.0011x slower

                                                             TipOfTree                InlineAlloc                                    
JSBench:
   amazon                                                 10.1667+-0.2473           10.1667+-0.2473        
   facebook                                               39.3333+-0.5640           39.0000+-0.5418        
   google                                                 67.2500+-0.9815     ?     67.4167+-1.0302        ?
   twitter                                                10.1667+-0.2473           10.0833+-0.1834        
   yahoo                                                   3.7500+-0.2874     ?      3.9167+-0.1834        ? might be 1.0444x slower

   &lt;arithmetic&gt; *                                         26.1333+-0.2443           26.1167+-0.2680          might be 1.0006x faster
   &lt;geometric&gt;                                            15.9054+-0.2946     ?     16.0113+-0.2278        ? might be 1.0067x slower
   &lt;harmonic&gt;                                              9.8876+-0.4366     ?     10.1190+-0.2889        ? might be 1.0234x slower

                                                             TipOfTree                InlineAlloc                                    
JSRegress:
   adapt-to-double-divide                                 22.5600+-0.0715           22.5582+-0.0336        
   aliased-arguments-getbyval                              0.9642+-0.0247     !      1.0092+-0.0184        ! definitely 1.0467x slower
   allocate-big-object                                     4.0949+-1.3080     ?      4.9551+-1.4695        ? might be 1.2101x slower
   arity-mismatch-inlining                                 0.8773+-0.0282            0.8665+-0.0177          might be 1.0124x faster
   array-access-polymorphic-structure                      9.0851+-2.0234            8.6002+-1.8577          might be 1.0564x faster
   array-nonarray-polymorhpic-access                      82.4143+-31.8422          72.6338+-26.1691         might be 1.1347x faster
   array-with-double-add                                   5.3757+-0.0204     ?      5.3784+-0.0348        ?
   array-with-double-increment                             4.1515+-0.0264            4.1237+-0.0399        
   array-with-double-mul-add                               7.5173+-0.2387            7.4381+-0.2816          might be 1.0106x faster
   array-with-double-sum                                   7.8886+-0.0624            7.8565+-0.0269        
   array-with-int32-add-sub                                9.3562+-0.0332            9.3382+-0.0315        
   array-with-int32-or-double-sum                          8.0342+-0.0653            7.9547+-0.0309          might be 1.0100x faster
   ArrayBuffer-Int32Array-byteOffset                       7.9765+-0.0598     !      8.7132+-0.0169        ! definitely 1.0924x slower
   ArrayBuffer-Int8Array-alloc-huge-long-lived           215.5981+-3.3786     ?    217.8355+-2.2534        ? might be 1.0104x slower
   ArrayBuffer-Int8Array-alloc-large-long-lived          134.0660+-2.0835          131.2934+-1.3026          might be 1.0211x faster
   ArrayBuffer-Int8Array-alloc-long-lived-buffer          83.6345+-10.6929          83.1611+-10.6541       
   ArrayBuffer-Int8Array-alloc-long-lived                 42.7316+-3.9578           41.4995+-4.3815          might be 1.0297x faster
   ArrayBuffer-Int8Array-alloc                            37.9366+-4.0841           35.8926+-3.7251          might be 1.0569x faster
   big-int-mul                                             4.8030+-0.0300            4.7721+-0.0317        
   boolean-test                                            4.3622+-0.0422     ?      4.3658+-0.0313        ?
   branch-fold                                             4.7819+-0.0418            4.7683+-0.0300        
   cast-int-to-double                                     14.1485+-0.0564           14.1102+-0.0495        
   cell-argument                                          14.6673+-0.2356           14.6391+-0.2113        
   cfg-simplify                                            3.8331+-0.0300            3.7911+-0.0392          might be 1.0111x faster
   cmpeq-obj-to-obj-other                                 12.4158+-0.2515     ?     12.5477+-0.2278        ? might be 1.0106x slower
   constant-test                                           8.5819+-0.0579     ?      8.7165+-0.1282        ? might be 1.0157x slower
   delay-tear-off-arguments-strictmode                     3.4013+-0.0322            3.3702+-0.0271        
   direct-arguments-getbyval                               0.8023+-0.0161     ?      0.8180+-0.0209        ? might be 1.0195x slower
   double-pollution-getbyval                              10.8241+-0.0600           10.7756+-0.0334        
   double-pollution-putbyoffset                            6.8139+-0.6348            6.7952+-0.6303        
   empty-string-plus-int                                  13.9439+-0.2141     ?     14.0987+-0.2422        ? might be 1.0111x slower
   emscripten-cube2hash                                   52.2623+-2.5513           52.0843+-2.5690        
   emscripten-memops                                   10463.3257+-518.7311   ?  10465.9307+-522.8421      ?
   external-arguments-getbyval                             2.4380+-0.1392            2.4051+-0.1580          might be 1.0137x faster
   external-arguments-putbyval                             3.9601+-0.2598     ?      4.0561+-0.2801        ? might be 1.0242x slower
   Float32Array-matrix-mult                                7.2984+-0.2222     ^      6.6040+-0.2134        ^ definitely 1.1051x faster
   Float64Array-alloc-long-lived                         219.4572+-0.7419     ^    109.2268+-0.6746        ^ definitely 2.0092x faster
   fold-double-to-int                                     25.5762+-0.3840           25.2633+-0.0383          might be 1.0124x faster
   function-dot-apply                                      3.0334+-0.0150            3.0242+-0.0287        
   function-test                                           4.9158+-0.0449            4.8012+-0.0820          might be 1.0239x faster
   get-by-id-chain-from-try-block                          6.5817+-0.0274     ?      6.5958+-0.0546        ?
   get-by-id-proto-or-self                                22.8288+-0.2613     ?     23.1340+-0.3339        ? might be 1.0134x slower
   get-by-id-self-or-proto                                23.6257+-0.2443           23.2238+-0.4009          might be 1.0173x faster
   HashMap-put-get-iterate-keys                           44.3407+-0.5527     ?     44.5284+-0.6442        ?
   HashMap-put-get-iterate                                54.5920+-0.9207           53.9982+-0.6264          might be 1.0110x faster
   HashMap-string-put-get-iterate                         64.9997+-0.4874     ?     65.9980+-0.9330        ? might be 1.0154x slower
   hole-check-on-array-load                             1270.0081+-1.0233         1269.8773+-0.9651        
   imul-double-only                                       18.1523+-0.9762           17.8309+-0.7116          might be 1.0180x faster
   imul-int-only                                          15.8455+-0.1851           15.7861+-0.1496        
   imul-mixed                                             22.0594+-0.0573           21.9972+-0.0228        
   in-four-cases                                          26.1402+-0.0817           26.1036+-0.0410        
   in-one-case-false                                      12.3101+-0.0710     ?     12.3556+-0.0947        ?
   in-one-case-true                                       12.2911+-0.0995           12.1761+-0.0295        
   in-two-cases                                           12.6503+-0.0352     ?     12.7884+-0.1597        ? might be 1.0109x slower
   indexed-properties-in-objects                           4.0919+-0.0221            4.0798+-0.0361        
   inline-arguments-access                                 1.4620+-0.0335            1.4474+-0.0261          might be 1.0101x faster
   inline-arguments-local-escape                          27.1226+-1.6491     ?     27.3519+-1.6311        ?
   inline-get-scoped-var                                   6.8488+-0.0444            6.7971+-0.0776        
   inlined-put-by-id-transition                           14.9442+-0.1931     ?     14.9766+-0.2706        ?
   int-or-other-abs-then-get-by-val                        9.0881+-0.1312     ^      8.7744+-0.0611        ^ definitely 1.0357x faster
   int-or-other-abs-zero-then-get-by-val                  36.8343+-0.2610     ?     37.6201+-0.7877        ? might be 1.0213x slower
   int-or-other-add-then-get-by-val                       10.2167+-0.0415           10.1959+-0.0247        
   int-or-other-add                                       10.6599+-0.1921           10.6462+-0.2030        
   int-or-other-div-then-get-by-val                        6.1230+-0.0344            6.1176+-0.0299        
   int-or-other-max-then-get-by-val                        7.1459+-0.0905            7.1218+-0.0641        
   int-or-other-min-then-get-by-val                        7.1497+-0.0352     ?      7.1631+-0.0342        ?
   int-or-other-mod-then-get-by-val                        6.0270+-0.0501     ?      6.0443+-0.0733        ?
   int-or-other-mul-then-get-by-val                        6.5275+-0.0402            6.4605+-0.0564          might be 1.0104x faster
   int-or-other-neg-then-get-by-val                        8.0284+-0.0929            7.9680+-0.0412        
   int-or-other-neg-zero-then-get-by-val                  36.7312+-0.6814     ?     36.7574+-0.9346        ?
   int-or-other-sub-then-get-by-val                       10.5797+-0.0329     ?     10.5993+-0.0548        ?
   int-or-other-sub                                        8.1684+-0.0240     ?      8.1968+-0.0654        ?
   int-overflow-local                                     11.8136+-0.0327           11.7632+-0.0938        
   Int16Array-alloc-long-lived                           182.6471+-1.2198     ^     72.5788+-0.3563        ^ definitely 2.5165x faster
   Int16Array-bubble-sort-with-byteLength                 48.3408+-0.1377     ?     48.3746+-0.1175        ?
   Int16Array-bubble-sort                                 47.7895+-0.1044           47.7442+-0.0847        
   Int16Array-load-int-mul                                 2.0035+-0.0252     ?      2.0370+-0.0205        ? might be 1.0167x slower
   Int32Array-alloc-huge-long-lived                      720.1225+-15.1730    ?    720.2589+-15.2175       ?
   Int32Array-alloc-huge                                 824.2469+-6.0581          820.0264+-7.0436        
   Int32Array-alloc-large-long-lived                    1025.7290+-4.3856     ^    971.3623+-4.0902        ^ definitely 1.0560x faster
   Int32Array-alloc-large                                 46.2191+-1.0630     ?     46.6714+-0.7328        ?
   Int32Array-alloc-long-lived                           195.6223+-1.9626     ^     85.6301+-1.4103        ^ definitely 2.2845x faster
   Int32Array-alloc                                       17.4408+-3.0402     ^      7.4380+-2.9563        ^ definitely 2.3448x faster
   Int32Array-Int8Array-view-alloc                        24.7730+-1.8619           21.8413+-1.8240          might be 1.1342x faster
   Int8Array-alloc-long-lived                            180.1925+-2.4417     ^     71.9688+-1.9285        ^ definitely 2.5038x faster
   Int8Array-load-with-byteLength                          4.8677+-0.0380            4.8358+-0.0229        
   Int8Array-load                                          4.8796+-0.0427            4.8473+-0.0231        
   integer-divide                                         15.3890+-0.0316     ?     15.4343+-0.0463        ?
   integer-modulo                                          1.9361+-0.0265            1.9286+-0.0284        
   lots-of-fields                                         16.6240+-2.4854           16.0715+-2.4798          might be 1.0344x faster
   make-indexed-storage                                    4.8819+-0.6625     ?      4.9315+-0.6602        ? might be 1.0102x slower
   make-rope-cse                                          16.6918+-2.9808           16.5411+-3.0522        
   marsaglia                                             521.9623+-0.6508          521.2033+-0.3265        
   method-on-number                                       27.8754+-0.3046     ?     28.2241+-0.6018        ? might be 1.0125x slower
   miss-string-lookup                                     62.1661+-0.4184     ?     62.5905+-0.3326        ?
   negative-zero-divide                                    0.3401+-0.0135     ?      0.3428+-0.0121        ?
   negative-zero-modulo                                    0.3284+-0.0121     ?      0.3288+-0.0139        ?
   negative-zero-negate                                    0.3138+-0.0142            0.3121+-0.0142        
   nested-function-parsing-random                        416.1320+-12.4091         411.0815+-12.4662         might be 1.0123x faster
   nested-function-parsing                                57.7434+-3.8680           57.3994+-3.9516        
   new-array-buffer-dead                                   3.9478+-0.0927            3.9473+-0.0901        
   new-array-buffer-push                                  15.2118+-2.5014           15.0291+-2.5368          might be 1.0122x faster
   new-array-dead                                         28.4109+-0.0457     ?     28.4228+-0.0747        ?
   new-array-push                                         12.6476+-2.0941           12.4977+-2.0320          might be 1.0120x faster
   number-test                                             4.3098+-0.0305     ?      4.3176+-0.0304        ?
   object-closure-call                                     9.0886+-1.0417     ?      9.6717+-1.4505        ? might be 1.0642x slower
   object-test                                             4.7759+-0.0768     ?      4.8167+-0.0723        ?
   poly-stricteq                                          93.1621+-0.2777     ?     94.3929+-1.2858        ? might be 1.0132x slower
   polymorphic-structure                                  21.1515+-0.0692           21.1147+-0.0717        
   polyvariant-monomorphic-get-by-id                      12.5067+-0.0400     ?     12.5144+-0.0324        ?
   put-by-val-large-index-blank-indexing-type             15.9676+-3.0524           15.9620+-3.1521        
   rare-osr-exit-on-local                                 20.2809+-0.1895           20.1918+-0.0787        
   regexp-match-reify-before-putbyval                      0.3020+-0.0119            0.3007+-0.0115        
   register-pressure-from-osr                             31.5259+-0.0717           31.4446+-0.0754        
   simple-activation-demo                                 35.0315+-0.3777           34.7502+-0.2011        
   slow-array-profile-convergence                          4.6973+-0.2641     ?      4.7110+-0.2878        ?
   slow-convergence                                        3.6619+-0.0507     ?      3.6634+-0.0607        ?
   sparse-conditional                                      1.3192+-0.0342            1.3061+-0.0220          might be 1.0101x faster
   splice-to-remove                                       47.6253+-0.1291     ?     47.6689+-0.1805        ?
   string-concat-object                                    5.0779+-1.4223     ?      5.1365+-1.4382        ? might be 1.0115x slower
   string-concat-pair-object                               4.9933+-1.3963     ?      5.0411+-1.4200        ?
   string-concat-pair-simple                              19.6399+-0.5747           19.2151+-0.8278          might be 1.0221x faster
   string-concat-simple                                   19.2758+-0.8918     ?     19.3407+-0.5321        ?
   string-cons-repeat                                     15.0167+-1.0281           14.9867+-1.0080        
   string-cons-tower                                      15.6889+-0.9547     ?     15.9399+-1.0425        ? might be 1.0160x slower
   string-equality                                        43.7165+-0.5144           43.6238+-0.5748        
   string-get-by-val-big-char                             17.4781+-0.2515     ?     17.7367+-0.1889        ? might be 1.0148x slower
   string-get-by-val-out-of-bounds-insane                  5.2209+-0.0962     ?      5.2994+-0.1394        ? might be 1.0150x slower
   string-get-by-val-out-of-bounds                         4.7929+-0.0362            4.7504+-0.0171        
   string-get-by-val                                       3.9958+-0.0172     ?      4.0535+-0.0670        ? might be 1.0144x slower
   string-hash                                             2.6197+-0.0394     ?      2.6363+-0.0248        ?
   string-long-ident-equality                             38.4349+-0.0584           38.4187+-0.0725        
   string-repeat-arith                                    49.4914+-0.3283     ?     50.3259+-1.3032        ? might be 1.0169x slower
   string-sub                                             94.6537+-0.6196     ?     95.9270+-0.9390        ? might be 1.0135x slower
   string-test                                             4.2635+-0.0364     ?      4.2744+-0.0236        ?
   string-var-equality                                    72.0660+-1.0456           71.2062+-0.3974          might be 1.0121x faster
   structure-hoist-over-transitions                        4.0925+-0.6219            4.0813+-0.6077        
   switch-char-constant                                    3.3911+-0.0696            3.3584+-0.0197        
   switch-char                                             8.0485+-0.0639            7.9989+-0.0612        
   switch-constant                                        13.0496+-2.7806           12.8804+-2.6501          might be 1.0131x faster
   switch-string-basic-big-var                            21.8130+-0.3185           21.7935+-0.3669        
   switch-string-basic-big                                26.1809+-1.1259     ?     26.5506+-0.8547        ? might be 1.0141x slower
   switch-string-basic-var                                21.2953+-0.0627     ?     21.3057+-0.0560        ?
   switch-string-basic                                    22.8580+-2.5141           21.9533+-2.3720          might be 1.0412x faster
   switch-string-big-length-tower-var                     29.8612+-0.3670           29.5637+-0.0889          might be 1.0101x faster
   switch-string-length-tower-var                         23.3739+-0.0570           23.3358+-0.0357        
   switch-string-length-tower                             17.6419+-0.0858           17.5974+-0.0488        
   switch-string-short                                    17.6899+-0.0621           17.6379+-0.0640        
   switch                                                 19.3848+-2.8092           19.2594+-2.7689        
   tear-off-arguments-simple                               2.3175+-0.0342     ?      2.3581+-0.0626        ? might be 1.0175x slower
   tear-off-arguments                                      3.5372+-0.0471            3.5010+-0.0323          might be 1.0103x faster
   temporal-structure                                     21.3620+-0.3637           21.1282+-0.0555          might be 1.0111x faster
   to-int32-boolean                                       21.5867+-0.0581     ?     21.6972+-0.1367        ?
   undefined-test                                          4.4648+-0.0535            4.4648+-0.0401        

   &lt;arithmetic&gt;                                          100.4402+-21.3166          97.0145+-21.3945         might be 1.0353x faster
   &lt;geometric&gt; *                                          14.0782+-0.3253           13.6561+-0.3200          might be 1.0309x faster
   &lt;harmonic&gt;                                              4.6232+-0.0930            4.6107+-0.0953          might be 1.0027x faster

                                                             TipOfTree                InlineAlloc                                    
DSP:
   filtrr-posterize-tint                                  44.3632+-1.4008           44.1349+-1.3230        
   filtrr-tint-contrast-sat-bright                        71.5984+-0.8206     ?     71.8267+-0.7608        ?
   filtrr-tint-sat-adj-contr-mult                         85.2243+-3.3061     ?     86.1100+-4.4840        ? might be 1.0104x slower
   filtrr-blur-overlay-sat-contr                         217.6965+-6.2245     ?    219.9597+-6.0855        ? might be 1.0104x slower
   filtrr-sat-blur-mult-sharpen-contr                    257.2542+-2.1818     ?    258.2245+-2.4730        ?
   filtrr-sepia-bias                                      34.1611+-3.4407     ?     34.2785+-3.6184        ?
   route9-vp8                                    x5     1100.1926+-7.1243         1097.4051+-7.6272        
   starfield                                     x5     1195.0479+-5.2723     ?   1199.8144+-5.3339        ?
   bellard-jslinux                               x5     2873.8333+-7.3491     ?   2883.0833+-12.4903       ?
   zynaps-quake3                                 x5     1404.7575+-21.4354    ?   1408.7024+-26.8952       ?
   zynaps-mandelbrot                             x5     1117.3226+-4.0033         1116.0303+-4.8226        
   ammojs-asm-js                                 x5      271.0255+-14.7087         265.4232+-15.8431         might be 1.0211x faster
   ammojs-regular-js                             x5      249.5704+-10.4340         243.8708+-10.8966         might be 1.0234x faster

   &lt;arithmetic&gt;                                         1018.7572+-1.8917     ?   1019.1752+-2.8746        ? might be 1.0004x slower
   &lt;geometric&gt; *                                         627.9550+-7.8855          625.3468+-8.0212          might be 1.0042x faster
   &lt;harmonic&gt;                                            285.8163+-10.9754         284.4107+-11.4919         might be 1.0049x faster

                                                             TipOfTree                InlineAlloc                                    
All benchmarks:
   &lt;arithmetic&gt;                                          228.1969+-11.8042         226.4252+-11.9524         might be 1.0078x faster
   &lt;geometric&gt;                                            25.8783+-0.3385           25.4183+-0.3243          might be 1.0181x faster
   &lt;harmonic&gt;                                              4.6318+-0.0644            4.6169+-0.0616          might be 1.0032x faster

                                                             TipOfTree                InlineAlloc                                    
Geomean of preferred means:
   &lt;scaled-result&gt;                                        41.9108+-0.2494           41.7075+-0.1791          might be 1.0049x faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>919590</commentid>
    <comment_count>13</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-08-21 13:02:53 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/154403</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>209110</attachid>
            <date>2013-08-19 12:46:44 -0700</date>
            <delta_ts>2013-08-20 17:36:30 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>18870</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU0MjkxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ0IEBA
CisyMDEzLTA4LTE5ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIHNob3VsZCBpbmxpbmUgbmV3IHR5cGVkQXJyYXkoKQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIwMDIyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBXb3JrIGluIHByb2dyZXNzLgorCisg
ICAgICAgICogYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuY3BwOgorICAgICAgICAoSlNDOjpzcGVj
dWxhdGlvbkZyb21UeXBlZEFycmF5VHlwZSk6CisgICAgICAgIChKU0M6OnNwZWN1bGF0aW9uRnJv
bUNsYXNzSW5mbyk6CisgICAgICAgICogYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuaDoKKyAgICAg
ICAgKiBkZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6
REZHOjo6OmV4ZWN1dGVFZmZlY3RzKToKKyAgICAgICAgKiBkZmcvREZHQmFja3dhcmRzUHJvcGFn
YXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6QmFja3dhcmRzUHJvcGFnYXRpb25Q
aGFzZTo6cHJvcGFnYXRlKToKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVUeXBlZEFycmF5Q29uc3Ry
dWN0b3IpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVDb25zdGFu
dEludGVybmFsRnVuY3Rpb24pOgorICAgICAgICAqIGRmZy9ERkdDU0VQaGFzZS5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OnB1dFN0cnVjdHVyZVN0b3JlRWxpbWluYXRpb24pOgor
ICAgICAgICAqIGRmZy9ERkdDbG9iYmVyaXplLmg6CisgICAgICAgIChKU0M6OkRGRzo6Y2xvYmJl
cml6ZSk6CisgICAgICAgICogZGZnL0RGR0ZpeHVwUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OkZpeHVwUGhhc2U6OmZpeHVwTm9kZSk6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmg6Cisg
ICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmNsb2JiZXJzV29ybGQpOgorICAgICAgICAqIGRmZy9E
RkdOb2RlLmg6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFzVHlwZWRBcnJheVR5cGUpOgor
ICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OnR5cGVkQXJyYXlUeXBlKToKKyAgICAgICAgKiBkZmcv
REZHTm9kZVR5cGUuaDoKKyAgICAgICAgKiBkZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhh
c2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlOjpw
cm9wYWdhdGUpOgorICAgICAgICAqIGRmZy9ERkdTYWZlVG9FeGVjdXRlLmg6CisgICAgICAgIChK
U0M6OkRGRzo6c2FmZVRvRXhlY3V0ZSk6CisgICAgICAgICogcnVudGltZS9UeXBlZEFycmF5VHlw
ZS5jcHA6CisgICAgICAgIChKU0M6OmNvbnN0cnVjdG9yQ2xhc3NJbmZvRm9yVHlwZSk6CisgICAg
ICAgICogcnVudGltZS9UeXBlZEFycmF5VHlwZS5oOgorICAgICAgICAoSlNDOjppbmRleFRvVHlw
ZWRBcnJheVR5cGUpOgorCiAyMDEzLTA4LTE2ICBPbGl2ZXIgSHVudCAgPG9saXZlckBhcHBsZS5j
b20+CiAKICAgICAgICAgPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzExOTg2MD4gQ3Jhc2ggZHVyaW5n
IGV4Y2VwdGlvbiB1bndpbmRpbmcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9TcGVjdWxhdGVkVHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmNwcAkocmV2aXNpb24gMTU0MjYyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjQ5LDI0ICsyNDksOSBAQCB2b2lkIGR1bXBTcGVjdWxhdGlvbkFiYnJldmlhdGVkKFBy
aW50U3RyCiAgICAgb3V0LnByaW50KHNwZWN1bGF0aW9uVG9BYmJyZXZpYXRlZFN0cmluZyh2YWx1
ZSkpOwogfQogCi1TcGVjdWxhdGVkVHlwZSBzcGVjdWxhdGlvbkZyb21DbGFzc0luZm8oY29uc3Qg
Q2xhc3NJbmZvKiBjbGFzc0luZm8pCitTcGVjdWxhdGVkVHlwZSBzcGVjdWxhdGlvbkZyb21UeXBl
ZEFycmF5VHlwZShUeXBlZEFycmF5VHlwZSB0eXBlKQogewotICAgIGlmIChjbGFzc0luZm8gPT0g
SlNGaW5hbE9iamVjdDo6aW5mbygpKQotICAgICAgICByZXR1cm4gU3BlY0ZpbmFsT2JqZWN0Owot
ICAgIAotICAgIGlmIChjbGFzc0luZm8gPT0gSlNBcnJheTo6aW5mbygpKQotICAgICAgICByZXR1
cm4gU3BlY0FycmF5OwotICAgIAotICAgIGlmIChjbGFzc0luZm8gPT0gQXJndW1lbnRzOjppbmZv
KCkpCi0gICAgICAgIHJldHVybiBTcGVjQXJndW1lbnRzOwotICAgIAotICAgIGlmIChjbGFzc0lu
Zm8gPT0gU3RyaW5nT2JqZWN0OjppbmZvKCkpCi0gICAgICAgIHJldHVybiBTcGVjU3RyaW5nT2Jq
ZWN0OwotICAgIAotICAgIGlmIChjbGFzc0luZm8tPmlzU3ViQ2xhc3NPZihKU0Z1bmN0aW9uOjpp
bmZvKCkpKQotICAgICAgICByZXR1cm4gU3BlY0Z1bmN0aW9uOwotICAgIAotICAgIHN3aXRjaCAo
Y2xhc3NJbmZvLT50eXBlZEFycmF5U3RvcmFnZVR5cGUpIHsKKyAgICBzd2l0Y2ggKHR5cGUpIHsK
ICAgICBjYXNlIFR5cGVJbnQ4OgogICAgICAgICByZXR1cm4gU3BlY0ludDhBcnJheTsKICAgICBj
YXNlIFR5cGVJbnQxNjoKQEAgLTI4NSw5ICsyNzAsMzIgQEAgU3BlY3VsYXRlZFR5cGUgc3BlY3Vs
YXRpb25Gcm9tQ2xhc3NJbmZvKAogICAgICAgICByZXR1cm4gU3BlY0Zsb2F0MzJBcnJheTsKICAg
ICBjYXNlIFR5cGVGbG9hdDY0OgogICAgICAgICByZXR1cm4gU3BlY0Zsb2F0NjRBcnJheTsKLSAg
ICBkZWZhdWx0OgorICAgIGNhc2UgTm90VHlwZWRBcnJheToKKyAgICBjYXNlIFR5cGVEYXRhVmll
dzoKICAgICAgICAgYnJlYWs7CiAgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7Cit9CisKK1NwZWN1bGF0ZWRUeXBlIHNwZWN1bGF0aW9uRnJvbUNsYXNzSW5mbyhjb25zdCBD
bGFzc0luZm8qIGNsYXNzSW5mbykKK3sKKyAgICBpZiAoY2xhc3NJbmZvID09IEpTRmluYWxPYmpl
Y3Q6OmluZm8oKSkKKyAgICAgICAgcmV0dXJuIFNwZWNGaW5hbE9iamVjdDsKKyAgICAKKyAgICBp
ZiAoY2xhc3NJbmZvID09IEpTQXJyYXk6OmluZm8oKSkKKyAgICAgICAgcmV0dXJuIFNwZWNBcnJh
eTsKKyAgICAKKyAgICBpZiAoY2xhc3NJbmZvID09IEFyZ3VtZW50czo6aW5mbygpKQorICAgICAg
ICByZXR1cm4gU3BlY0FyZ3VtZW50czsKKyAgICAKKyAgICBpZiAoY2xhc3NJbmZvID09IFN0cmlu
Z09iamVjdDo6aW5mbygpKQorICAgICAgICByZXR1cm4gU3BlY1N0cmluZ09iamVjdDsKKyAgICAK
KyAgICBpZiAoY2xhc3NJbmZvLT5pc1N1YkNsYXNzT2YoSlNGdW5jdGlvbjo6aW5mbygpKSkKKyAg
ICAgICAgcmV0dXJuIFNwZWNGdW5jdGlvbjsKKyAgICAKKyAgICBpZiAoaXNUeXBlZFZpZXcoY2xh
c3NJbmZvLT50eXBlZEFycmF5U3RvcmFnZVR5cGUpKQorICAgICAgICByZXR1cm4gc3BlY3VsYXRp
b25Gcm9tVHlwZWRBcnJheVR5cGUoY2xhc3NJbmZvLT50eXBlZEFycmF5U3RvcmFnZVR5cGUpOwog
ICAgIAogICAgIGlmIChjbGFzc0luZm8tPmlzU3ViQ2xhc3NPZihKU09iamVjdDo6aW5mbygpKSkK
ICAgICAgICAgcmV0dXJuIFNwZWNPYmplY3RPdGhlcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5oCShyZXZpc2lvbiAxNTQyNjIpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzMxLDYgKzMzMSw3IEBAIFNwZWN1bGF0ZWRUeXBlIHNwZWN1bGF0aW9uRnJv
bVN0cnVjdHVyZSgKIFNwZWN1bGF0ZWRUeXBlIHNwZWN1bGF0aW9uRnJvbUNlbGwoSlNDZWxsKik7
CiBTcGVjdWxhdGVkVHlwZSBzcGVjdWxhdGlvbkZyb21WYWx1ZShKU1ZhbHVlKTsKIAorU3BlY3Vs
YXRlZFR5cGUgc3BlY3VsYXRpb25Gcm9tVHlwZWRBcnJheVR5cGUoVHlwZWRBcnJheVR5cGUpOyAv
LyBvbmx5IHZhbGlkIGZvciB0eXBlZCB2aWV3cy4KIFR5cGVkQXJyYXlUeXBlIHR5cGVkQXJyYXlU
eXBlRnJvbVNwZWN1bGF0aW9uKFNwZWN1bGF0ZWRUeXBlKTsKIAogfSAvLyBuYW1lc3BhY2UgSlND
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJ
bmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0
cmFjdEludGVycHJldGVySW5saW5lcy5oCShyZXZpc2lvbiAxNTQyNjIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEwNDMsNiArMTA0MywyNCBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJz
dHJhY3RTdGF0ZVR5CiAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjQXJyYXkpOwog
ICAgICAgICBtX3N0YXRlLnNldEhhdmVTdHJ1Y3R1cmVzKHRydWUpOwogICAgICAgICBicmVhazsK
KyAgICAgICAgCisgICAgY2FzZSBOZXdUeXBlZEFycmF5OgorICAgICAgICBzd2l0Y2ggKG5vZGUt
PmNoaWxkMSgpLnVzZUtpbmQoKSkgeworICAgICAgICBjYXNlIEludDMyVXNlOgorICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgVW50eXBlZFVzZToKKyAgICAgICAgICAgIGNsb2JiZXJX
b3JsZChub2RlLT5jb2RlT3JpZ2luLCBjbG9iYmVyTGltaXQpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZm9yTm9kZShub2Rl
KS5zZXQoCisgICAgICAgICAgICBtX2dyYXBoLAorICAgICAgICAgICAgbV9ncmFwaC5nbG9iYWxP
YmplY3RGb3Iobm9kZS0+Y29kZU9yaWdpbiktPnR5cGVkQXJyYXlTdHJ1Y3R1cmUoCisgICAgICAg
ICAgICAgICAgbm9kZS0+dHlwZWRBcnJheVR5cGUoKSkpOworICAgICAgICBtX3N0YXRlLnNldEhh
dmVTdHJ1Y3R1cmVzKHRydWUpOworICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNh
c2UgTmV3UmVnZXhwOgogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChtX2dyYXBoLCBtX2dyYXBo
Lmdsb2JhbE9iamVjdEZvcihub2RlLT5jb2RlT3JpZ2luKS0+cmVnRXhwU3RydWN0dXJlKCkpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBo
YXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0JhY2t3
YXJkc1Byb3BhZ2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxNTQyNjIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMjQsNiArMzI0LDE0IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogICAgICAgICAgICAgCisgICAgICAgIGNhc2UgTmV3VHlwZWRBcnJheTogewor
ICAgICAgICAgICAgLy8gTmVnYXRpdmUgemVybyBpcyBub3Qgb2JzZXJ2YWJsZS4gTmFOIHZlcnN1
cyB1bmRlZmluZWQgYXJlIG9ubHkgb2JzZXJ2YWJsZQorICAgICAgICAgICAgLy8gaW4gdGhhdCB5
b3Ugd291bGQgZ2V0IGEgZGlmZmVyZW50IGV4Y2VwdGlvbiBtZXNzYWdlLiBTbywgbGlrZSwgd2hh
dGV2ZXI6IHdlCisgICAgICAgICAgICAvLyBjbGFpbSBoZXJlIHRoYXQgTmFOIHYuIHVuZGVmaW5l
ZCBpcyBvYnNlcnZhYmxlLgorICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCktPm1lcmdlRmxhZ3Mo
Tm9kZVVzZWRBc0ludCB8IE5vZGVVc2VkQXNOdW1iZXIgfCBOb2RlVXNlZEFzT3RoZXIpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAogICAgICAgICBjYXNlIFN0
cmluZ0NoYXJBdDogewogICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCktPm1lcmdlRmxhZ3MoTm9k
ZVVzZWRBc1ZhbHVlKTsKICAgICAgICAgICAgIG5vZGUtPmNoaWxkMigpLT5tZXJnZUZsYWdzKE5v
ZGVVc2VkQXNWYWx1ZSB8IE5vZGVVc2VkQXNJbnQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDE1NDI2MikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNjgsNiArMTY4LDcgQEAgcHJpdmF0ZToKICAgICBib29sIGhhbmRsZUlubGlu
aW5nKE5vZGUqIGNhbGxUYXJnZXROb2RlLCBpbnQgcmVzdWx0T3BlcmFuZCwgY29uc3QgQ2FsbExp
bmtTdGF0dXMmLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcywgdW5zaWduZWQgbmV4dE9mZnNldCwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCk7CiAgICAg
Ly8gSGFuZGxlIGludHJpbnNpYyBmdW5jdGlvbnMuIFJldHVybiB0cnVlIGlmIGl0IHN1Y2NlZWRl
ZCwgZmFsc2UgaWYgd2UgbmVlZCB0byBwbGFudCBhIGNhbGwuCiAgICAgYm9vbCBoYW5kbGVJbnRy
aW5zaWMoaW50IHJlc3VsdE9wZXJhbmQsIEludHJpbnNpYywgaW50IHJlZ2lzdGVyT2Zmc2V0LCBp
bnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24p
OworICAgIGJvb2wgaGFuZGxlVHlwZWRBcnJheUNvbnN0cnVjdG9yKGludCByZXN1bHRPcGVyYW5k
LCBJbnRlcm5hbEZ1bmN0aW9uKiwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMsIFR5cGVkQXJyYXlUeXBlIHR5cGUpOwogICAgIGJvb2wgaGFuZGxlQ29u
c3RhbnRJbnRlcm5hbEZ1bmN0aW9uKGludCByZXN1bHRPcGVyYW5kLCBJbnRlcm5hbEZ1bmN0aW9u
KiwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIFNw
ZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24sIENvZGVTcGVjaWFsaXphdGlvbktpbmQpOwogICAgIE5v
ZGUqIGhhbmRsZVB1dEJ5T2Zmc2V0KE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXIsIFBy
b3BlcnR5T2Zmc2V0LCBOb2RlKiB2YWx1ZSk7CiAgICAgTm9kZSogaGFuZGxlR2V0QnlPZmZzZXQo
U3BlY3VsYXRlZFR5cGUsIE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFBy
b3BlcnR5T2Zmc2V0KTsKQEAgLTE1ODUsNiArMTU4Niw1OCBAQCBib29sIEJ5dGVDb2RlUGFyc2Vy
OjpoYW5kbGVJbnRyaW5zaWMoaW50CiAgICAgfQogfQogCitib29sIEJ5dGVDb2RlUGFyc2VyOjpo
YW5kbGVUeXBlZEFycmF5Q29uc3RydWN0b3IoCisgICAgaW50IHJlc3VsdE9wZXJhbmQsIEludGVy
bmFsRnVuY3Rpb24qIGZ1bmN0aW9uLCBpbnQgcmVnaXN0ZXJPZmZzZXQsCisgICAgaW50IGFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzLCBUeXBlZEFycmF5VHlwZSB0eXBlKQoreworICAgIGlmICgh
aXNUeXBlZFZpZXcodHlwZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBpZiAo
ZnVuY3Rpb24tPmNsYXNzSW5mbygpICE9IGNvbnN0cnVjdG9yQ2xhc3NJbmZvRm9yVHlwZSh0eXBl
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGlmIChmdW5jdGlvbi0+Z2xvYmFs
T2JqZWN0KCkgIT0gbV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgLy8gV2Ugb25seSBoYXZlIGFuIGlu
dHJpbnNpYyBmb3IgdGhlIGNhc2Ugd2hlcmUgeW91IHNheToKKyAgICAvLworICAgIC8vIG5ldyBG
b29BcnJheShibGFoKTsKKyAgICAvLworICAgIC8vIE9mIGNvdXJzZSwgJ2JsYWgnIGNvdWxkIGJl
IGFueSBvZiB0aGUgZm9sbG93aW5nOgorICAgIC8vCisgICAgLy8gLSBJbnRlZ2VyLCBpbmRpY2F0
aW5nIHRoYXQgeW91IHdhbnQgdG8gYWxsb2NhdGUgYW4gYXJyYXkgb2YgdGhhdCBsZW5ndGguCisg
ICAgLy8gICBUaGlzIGlzIHRoZSB0aGluZyB3ZSdyZSBob3BpbmcgZm9yLCBhbmQgd2hhdCB3ZSBj
YW4gYWN0dWFsbHkgZG8gbWVhbmluZ2Z1bAorICAgIC8vICAgb3B0aW1pemF0aW9ucyBmb3IuCisg
ICAgLy8KKyAgICAvLyAtIEFycmF5IGJ1ZmZlciwgaW5kaWNhdGluZyB0aGF0IHlvdSB3YW50IHRv
IGNyZWF0ZSBhIHZpZXcgb250byB0aGF0IF9lbnRpcmVfCisgICAgLy8gICBidWZmZXIuCisgICAg
Ly8KKyAgICAvLyAtIE5vbi1idWZmZXIgb2JqZWN0LCBpbmRpY2F0aW5nIHRoYXQgeW91IHdhbnQg
dG8gY3JlYXRlIGEgY29weSBvZiB0aGF0CisgICAgLy8gICBvYmplY3QgYnkgcHJldGVuZGluZyB0
aGF0IGl0IHF1YWNrcyBsaWtlIGFuIGFycmF5LgorICAgIC8vCisgICAgLy8gLSBBbnl0aGluZyBl
bHNlLCBpbmRpY2F0aW5nIHRoYXQgeW91IHdhbnQgdG8gaGF2ZSBhbiBleGNlcHRpb24gdGhyb3du
IGF0CisgICAgLy8gICB5b3UuCisgICAgLy8KKyAgICAvLyBUaGUgaW50cmluc2ljLCBOZXdUeXBl
ZEFycmF5LCB3aWxsIGJlaGF2ZSBhcyBpZiBpdCBjb3VsZCBkbyBhbnkgb2YgdGhlc2UKKyAgICAv
LyB0aGluZ3MgdXAgdW50aWwgd2UgZG8gRml4dXAuIFRoZXJlYWZ0ZXIsIGlmIGNoaWxkMSAoaS5l
LiAnYmxhaCcpIGlzCisgICAgLy8gcHJlZGljdGVkIEludDMyLCB0aGVuIHdlIGxvY2sgaXQgaW4g
YXMgYSBub3JtYWwgdHlwZWQgYXJyYXkgYWxsb2NhdGlvbi4KKyAgICAvLyBPdGhlcndpc2UsIE5l
d1R5cGVkQXJyYXkgdHVybnMgaW50byBhIHRvdGFsbHkgb3BhcXVlIGZ1bmN0aW9uIGNhbGwgdGhh
dAorICAgIC8vIG1heSBjbG9iYmVyIHRoZSB3b3JsZCAtIGJ5IHZpcnR1ZSBvZiBpdCBhY2Nlc3Np
bmcgcHJvcGVydGllcyBvbiB3aGF0IGNvdWxkCisgICAgLy8gYmUgYW4gb2JqZWN0LgorICAgIC8v
CisgICAgLy8gTm90ZSB0aGF0IGFsdGhvdWdoIHRoZSBnZW5lcmljIGZvcm0gb2YgTmV3VHlwZWRB
cnJheSBzb3VuZHMgc29ydCBvZiBhd2Z1bCwKKyAgICAvLyBpdCBpcyBhY3R1YWxseSBxdWl0ZSBs
aWtlbHkgdG8gYmUgbW9yZSBlZmZpY2llbnQgdGhhbiBhIGZ1bGx5IGdlbmVyaWMKKyAgICAvLyBD
b25zdHJ1Y3QuIFNvLCB3ZSBtaWdodCB3YW50IHRvIHRoaW5rIGFib3V0IG1ha2luZyBOZXdUeXBl
ZEFycmF5IHZhcmlhZGljLAorICAgIC8vIG9yIGVsc2UgbWFraW5nIENvbnN0cnVjdCBub3Qgc3Vw
ZXIgc2xvdy4KKyAgICAKKyAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgIT0gMikK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHNldChyZXN1bHRPcGVyYW5kLAorICAg
ICAgICBhZGRUb0dyYXBoKE5ld1R5cGVkQXJyYXksIE9wSW5mbyh0eXBlKSwgZ2V0KHJlZ2lzdGVy
T2Zmc2V0ICsgYXJndW1lbnRUb09wZXJhbmQoMSkpKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisK
IGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNvbnN0YW50SW50ZXJuYWxGdW5jdGlvbigKICAg
ICBpbnQgcmVzdWx0T3BlcmFuZCwgSW50ZXJuYWxGdW5jdGlvbiogZnVuY3Rpb24sIGludCByZWdp
c3Rlck9mZnNldCwKICAgICBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIFNwZWN1bGF0
ZWRUeXBlIHByZWRpY3Rpb24sIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKQEAgLTE2MTAs
NyArMTY2Myw5IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNvbnN0YW50SW50ZXIKICAg
ICAgICAgc2V0KHJlc3VsdE9wZXJhbmQsCiAgICAgICAgICAgICBhZGRUb0dyYXBoKE5vZGU6OlZh
ckFyZywgTmV3QXJyYXksIE9wSW5mbyhBcnJheVdpdGhVbmRlY2lkZWQpLCBPcEluZm8oMCkpKTsK
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSBlbHNlIGlmIChmdW5jdGlvbi0+Y2xhc3NJbmZv
KCkgPT0gU3RyaW5nQ29uc3RydWN0b3I6OmluZm8oKSkgeworICAgIH0KKyAgICAKKyAgICBpZiAo
ZnVuY3Rpb24tPmNsYXNzSW5mbygpID09IFN0cmluZ0NvbnN0cnVjdG9yOjppbmZvKCkpIHsKICAg
ICAgICAgTm9kZSogcmVzdWx0OwogICAgICAgICAKICAgICAgICAgaWYgKGFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzIDw9IDEpCkBAIC0xNjI1LDYgKzE2ODAsMTMgQEAgYm9vbCBCeXRlQ29kZVBh
cnNlcjo6aGFuZGxlQ29uc3RhbnRJbnRlcgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAg
ICAgCisgICAgZm9yICh1bnNpZ25lZCB0eXBlSW5kZXggPSAwOyB0eXBlSW5kZXggPCBOVU1CRVJf
T0ZfVFlQRURfQVJSQVlfVFlQRVM7ICsrdHlwZUluZGV4KSB7CisgICAgICAgIGlmIChoYW5kbGVU
eXBlZEFycmF5Q29uc3RydWN0b3IoCisgICAgICAgICAgICAgICAgcmVzdWx0T3BlcmFuZCwgZnVu
Y3Rpb24sIHJlZ2lzdGVyT3BlcmFuZCwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsCisgICAg
ICAgICAgICAgICAgaW5kZXhUb1R5cGVkQXJyYXlUeXBlKHR5cGVJbmRleCkpKQorICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAogICAgIHJldHVybiBmYWxzZTsKIH0KIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAJKHJldmlzaW9uIDE1
NDI2MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01ODgsNiArNTg4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGNhc2Ug
VG9TdHJpbmc6CiAgICAgICAgICAgICBjYXNlIE5ld1N0cmluZ09iamVjdDoKICAgICAgICAgICAg
IGNhc2UgTWFrZVJvcGU6CisgICAgICAgICAgICBjYXNlIE5ld1R5cGVkQXJyYXk6CiAgICAgICAg
ICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAvLyBUaGlz
IGVpdGhlciBleGl0cywgY2F1c2VzIGEgR0MgKGxhenkgc3RyaW5nIGFsbG9jYXRpb24pLCBvciBj
bG9iYmVycwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJ
KHJldmlzaW9uIDE1NDI2MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJl
cml6ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01MDcsNiArNTA3LDIxIEBAIHZvaWQgY2xvYmJlcml6
ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICAgICAgd3JpdGUoR0NTdGF0ZSk7CiAgICAg
ICAgIHJldHVybjsKICAgICAgICAgCisgICAgY2FzZSBOZXdUeXBlZEFycmF5OgorICAgICAgICBz
d2l0Y2ggKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgeworICAgICAgICBjYXNlIEludDMyVXNl
OgorICAgICAgICAgICAgcmVhZChHQ1N0YXRlKTsKKyAgICAgICAgICAgIHdyaXRlKEdDU3RhdGUp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIFVudHlwZWRVc2U6CisgICAgICAg
ICAgICByZWFkKFdvcmxkKTsKKyAgICAgICAgICAgIHdyaXRlKFdvcmxkKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCiAg
ICAgY2FzZSBSZWdFeHBFeGVjOgogICAgIGNhc2UgUmVnRXhwVGVzdDoKICAgICAgICAgcmVhZChS
ZWdFeHBTdGF0ZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhh
c2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQ
aGFzZS5jcHAJKHJldmlzaW9uIDE1NDI2MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRml4dXBQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3Myw2ICs2NzMsMTQgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKKyAgICAg
ICAgY2FzZSBOZXdUeXBlZEFycmF5OiB7CisgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkt
PnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkgeworICAgICAgICAgICAgICAgIHNldFVzZUtpbmRB
bmRVbmJveElmUHJvZml0YWJsZTxJbnQzMlVzZT4obm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgICAgIAogICAgICAgICBjYXNlIE5ld0FycmF5V2l0aFNpemU6IHsKICAgICAg
ICAgICAgIHNldFVzZUtpbmRBbmRVbmJveElmUHJvZml0YWJsZTxJbnQzMlVzZT4obm9kZS0+Y2hp
bGQxKCkpOwogICAgICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdHcmFwaC5oCShyZXZpc2lvbiAxNTQyNjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTU1Miw2ICs1NTIsMTYgQEAgcHVibGljOgog
ICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9CisgICAgICAgIGNhc2UgTmV3VHlwZWRB
cnJheToKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7Cisg
ICAgICAgICAgICBjYXNlIEludDMyVXNlOgorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgICAgIGNhc2UgVW50eXBlZFVzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAg
IH0KICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gSWYgYnkgc29tZSBvZGRpdHkgd2Ug
aGl0IHRoaXMgY2FzZSBpbiByZWxlYXNlIGJ1aWxkIGl0J3Mgc2FmZXIgdG8gaGF2ZSBDU0UgYXNz
dW1lIHRoZSB3b3JzdC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCShyZXZp
c2lvbiAxNTQyNjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkod29y
a2luZyBjb3B5KQpAQCAtNjM1LDYgKzYzNSwyNCBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIHJl
dHVybiBtX29wSW5mbzsKICAgICB9CiAgICAgCisgICAgYm9vbCBoYXNUeXBlZEFycmF5VHlwZSgp
CisgICAgeworICAgICAgICBzd2l0Y2ggKG9wKCkpIHsKKyAgICAgICAgY2FzZSBOZXdUeXBlZEFy
cmF5OgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgVHlwZWRBcnJh
eVR5cGUgdHlwZWRBcnJheVR5cGUoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGhhc1R5cGVkQXJy
YXlUeXBlKCkpOworICAgICAgICBUeXBlZEFycmF5VHlwZSByZXN1bHQgPSBzdGF0aWNfY2FzdDxU
eXBlZEFycmF5VHlwZT4obV9vcEluZm8pOworICAgICAgICBBU1NFUlQoaXNUeXBlZFZpZXcocmVz
dWx0KSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAogICAgIGJvb2wgaGFz
SW5saW5lQ2FwYWNpdHkoKQogICAgIHsKICAgICAgICAgcmV0dXJuIG9wKCkgPT0gQ3JlYXRlVGhp
czsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHJldmlzaW9u
IDE1NDI2MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMjAxLDYgKzIwMSw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
REZHIHsKICAgICBtYWNybyhOZXdBcnJheSwgTm9kZVJlc3VsdEpTIHwgTm9kZUhhc1ZhckFyZ3Mp
IFwKICAgICBtYWNybyhOZXdBcnJheVdpdGhTaXplLCBOb2RlUmVzdWx0SlMpIFwKICAgICBtYWNy
byhOZXdBcnJheUJ1ZmZlciwgTm9kZVJlc3VsdEpTKSBcCisgICAgbWFjcm8oTmV3VHlwZWRBcnJh
eSwgTm9kZVJlc3VsdEpTIHwgTm9kZU1pZ2h0Q2xvYmJlcikgXAogICAgIG1hY3JvKE5ld1JlZ2V4
cCwgTm9kZVJlc3VsdEpTKSBcCiAgICAgXAogICAgIC8qIE5vZGVzIGZvciBtaXNjIG9wZXJhdGlv
bnMuICovXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJv
cGFnYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE1NDI2MikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MTQsNiArNDE0LDExIEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCisgICAgICAgIGNhc2UgTmV3VHlw
ZWRBcnJheTogeworICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0aW9uKHNwZWN1bGF0
aW9uRnJvbVR5cGVkQXJyYXlUeXBlKG5vZGUtPnR5cGVkQXJyYXlUeXBlKCkpKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKICAgICAgICAgY2FzZSBOZXdSZWdl
eHA6CiAgICAgICAgIGNhc2UgQ3JlYXRlQWN0aXZhdGlvbjogewogICAgICAgICAgICAgY2hhbmdl
ZCB8PSBzZXRQcmVkaWN0aW9uKFNwZWNPYmplY3RPdGhlcik7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkocmV2aXNpb24gMTU0MjYyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTIzMSw2ICsyMzEsNyBAQCBib29sIHNhZmVUb0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5
cGUmIHN0CiAgICAgY2FzZSBGb3JjZU9TUkV4aXQ6CiAgICAgY2FzZSBDaGVja1dhdGNoZG9nVGlt
ZXI6CiAgICAgY2FzZSBTdHJpbmdGcm9tQ2hhckNvZGU6CisgICAgY2FzZSBOZXdUeXBlZEFycmF5
OgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgCiAgICAgY2FzZSBHZXRCeVZhbDoKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlUeXBlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5VHlwZS5j
cHAJKHJldmlzaW9uIDE1NDI2MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5
cGVkQXJyYXlUeXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1
ZGUgIlR5cGVkQXJyYXlUeXBlLmgiCiAKICNpbmNsdWRlICJKU0RhdGFWaWV3LmgiCisjaW5jbHVk
ZSAiSlNUeXBlZEFycmF5Q29uc3RydWN0b3JzLmgiCiAjaW5jbHVkZSAiSlNUeXBlZEFycmF5cy5o
IgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTYxLDYgKzYyLDM2IEBAIGNvbnN0IENsYXNzSW5mbyog
Y2xhc3NJbmZvRm9yVHlwZShUeXBlZEEKICAgICByZXR1cm4gMDsKIH0KIAorY29uc3QgQ2xhc3NJ
bmZvKiBjb25zdHJ1Y3RvckNsYXNzSW5mb0ZvclR5cGUoVHlwZWRBcnJheVR5cGUgdHlwZSkKK3sK
KyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIE5vdFR5cGVkQXJyYXk6CisgICAgICAgIHJl
dHVybiAwOworICAgIGNhc2UgVHlwZUludDg6CisgICAgICAgIHJldHVybiBKU0ludDhBcnJheUNv
bnN0cnVjdG9yOjppbmZvKCk7CisgICAgY2FzZSBUeXBlVWludDg6CisgICAgICAgIHJldHVybiBK
U1VpbnQ4QXJyYXlDb25zdHJ1Y3Rvcjo6aW5mbygpOworICAgIGNhc2UgVHlwZVVpbnQ4Q2xhbXBl
ZDoKKyAgICAgICAgcmV0dXJuIEpTVWludDhDbGFtcGVkQXJyYXlDb25zdHJ1Y3Rvcjo6aW5mbygp
OworICAgIGNhc2UgVHlwZUludDE2OgorICAgICAgICByZXR1cm4gSlNJbnQxNkFycmF5Q29uc3Ry
dWN0b3I6OmluZm8oKTsKKyAgICBjYXNlIFR5cGVVaW50MTY6CisgICAgICAgIHJldHVybiBKU1Vp
bnQxNkFycmF5Q29uc3RydWN0b3I6OmluZm8oKTsKKyAgICBjYXNlIFR5cGVJbnQzMjoKKyAgICAg
ICAgcmV0dXJuIEpTSW50MzJBcnJheUNvbnN0cnVjdG9yOjppbmZvKCk7CisgICAgY2FzZSBUeXBl
VWludDMyOgorICAgICAgICByZXR1cm4gSlNVaW50MzJBcnJheUNvbnN0cnVjdG9yOjppbmZvKCk7
CisgICAgY2FzZSBUeXBlRmxvYXQzMjoKKyAgICAgICAgcmV0dXJuIEpTRmxvYXQzMkFycmF5Q29u
c3RydWN0b3I6OmluZm8oKTsKKyAgICBjYXNlIFR5cGVGbG9hdDY0OgorICAgICAgICByZXR1cm4g
SlNGbG9hdDY0QXJyYXlDb25zdHJ1Y3Rvcjo6aW5mbygpOworICAgIGNhc2UgVHlwZURhdGFWaWV3
OgorICAgICAgICByZXR1cm4gSlNEYXRhVmlld0NvbnN0cnVjdG9yOjppbmZvKCk7CisgICAgfQor
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIDA7Cit9CisKIH0g
Ly8gbmFtZXNwYWNlIEpTQwogCiBuYW1lc3BhY2UgV1RGIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJheVR5cGUuaAkocmV2aXNpb24gMTU0MjYyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJheVR5cGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTMsNiArNTMsMTMgQEAgaW5saW5lIHVuc2lnbmVkIHRvSW5kZXgoVHlwZWRB
cnJheVR5cGUgdAogICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4odHlwZSkgLSAxOwog
fQogCitpbmxpbmUgVHlwZWRBcnJheVR5cGUgaW5kZXhUb1R5cGVkQXJyYXlUeXBlKHVuc2lnbmVk
IGluZGV4KQoreworICAgIFR5cGVkQXJyYXlUeXBlIHJlc3VsdCA9IHN0YXRpY19jYXN0PFR5cGVk
QXJyYXlUeXBlPihpbmRleCArIDEpOworICAgIEFTU0VSVChyZXN1bHQgPj0gVHlwZUludDggJiYg
cmVzdWx0IDw9IFR5cGVEYXRhVmlldyk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogaW5saW5l
IGJvb2wgaXNUeXBlZFZpZXcoVHlwZWRBcnJheVR5cGUgdHlwZSkKIHsKICAgICBzd2l0Y2ggKHR5
cGUpIHsKQEAgLTk0LDYgKzEwMSw3IEBAIGlubGluZSBzaXplX3QgZWxlbWVudFNpemUoVHlwZWRB
cnJheVR5cGUKIH0KIAogY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm9Gb3JUeXBlKFR5cGVkQXJy
YXlUeXBlKTsKK2NvbnN0IENsYXNzSW5mbyogY29uc3RydWN0b3JDbGFzc0luZm9Gb3JUeXBlKFR5
cGVkQXJyYXlUeXBlKTsKIAogaW5saW5lIGJvb2wgaXNJbnQoVHlwZWRBcnJheVR5cGUgdHlwZSkK
IHsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>209240</attachid>
            <date>2013-08-20 17:36:30 -0700</date>
            <delta_ts>2013-08-20 18:37:26 -0700</delta_ts>
            <desc>almost done</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>40739</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU0Mzc3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY5IEBA
CisyMDEzLTA4LTIwICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIHNob3VsZCBpbmxpbmUgbmV3IHR5cGVkQXJyYXkoKQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIwMDIyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBBZGRzIGlubGluaW5nIG9mIHR5cGVk
IGFycmF5IGFsbG9jYXRpb25zIGluIHRoZSBERkcuIEFueSBvcGVyYXRpb24gb2YgdGhlCisgICAg
ICAgIGZvcm06CisgICAgICAgIAorICAgICAgICAgICAgbmV3IGZvbyhibGFoKQorICAgICAgICAK
KyAgICAgICAgb3I6CisgICAgICAgIAorICAgICAgICAgICAgZm9vKGJsYWgpCisgICAgICAgIAor
ICAgICAgICB3aGVyZSAnZm9vJyBpcyBhIHR5cGVkIGFycmF5IGNvbnN0cnVjdG9yIGFuZCAnYmxh
aCcgaXMgZXhhY3RseSBvbmUgYXJndW1lbnQsCisgICAgICAgIGlzIHR1cm5lZCBpbnRvIHRoZSBO
ZXdUeXBlZEFycmF5IGludHJpbnNpYy4gTGF0ZXIsIG9mIGNoaWxkMSAoaS5lLiAnYmxhaCcpCisg
ICAgICAgIGlzIHByZWRpY3RlZCBpbnRlZ2VyLCB3ZSBnZW5lcmF0ZSBpbmxpbmUgY29kZSBmb3Ig
YW4gYWxsb2NhdGlvbi4gT3RoZXJ3aXNlCisgICAgICAgIGl0IHR1cm5zIGludG8gYSBjYWxsIHRv
IGFuIG9wZXJhdGlvbiB0aGF0IGJlaGF2ZXMgbGlrZSB0aGUgY29uc3RydWN0b3Igd291bGQKKyAg
ICAgICAgaWYgaXQgd2FzIHBhc3NlZCBvbmUgYXJndW1lbnQgKGkuZS4gaXQgbWF5IHdyYXAgYSBi
dWZmZXIgb3IgaXQgbWF5IGNyZWF0ZSBhCisgICAgICAgIGNvcHkgb3IgYW5vdGhlciBhcnJheSwg
b3IgaXQgbWF5IGFsbG9jYXRlIGFuIGFycmF5IG9mIHRoYXQgbGVuZ3RoKS4KKworICAgICAgICAq
IGJ5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmNwcDoKKyAgICAgICAgKEpTQzo6c3BlY3VsYXRpb25G
cm9tVHlwZWRBcnJheVR5cGUpOgorICAgICAgICAoSlNDOjpzcGVjdWxhdGlvbkZyb21DbGFzc0lu
Zm8pOgorICAgICAgICAqIGJ5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmg6CisgICAgICAgICogZGZn
L0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkRGRzo6Ojpl
eGVjdXRlRWZmZWN0cyk6CisgICAgICAgICogZGZnL0RGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhh
c2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2U6OnBy
b3BhZ2F0ZSk6CisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlVHlwZWRBcnJheUNvbnN0cnVjdG9yKToK
KyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlQ29uc3RhbnRJbnRlcm5h
bEZ1bmN0aW9uKToKKyAgICAgICAgKiBkZmcvREZHQ1NFUGhhc2UuY3BwOgorICAgICAgICAoSlND
OjpERkc6OkNTRVBoYXNlOjpwdXRTdHJ1Y3R1cmVTdG9yZUVsaW1pbmF0aW9uKToKKyAgICAgICAg
KiBkZmcvREZHQ2xvYmJlcml6ZS5oOgorICAgICAgICAoSlNDOjpERkc6OmNsb2JiZXJpemUpOgor
ICAgICAgICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1
cFBoYXNlOjpmaXh1cE5vZGUpOgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6CisgICAgICAgIChK
U0M6OkRGRzo6Tm9kZTo6aGFzVHlwZWRBcnJheVR5cGUpOgorICAgICAgICAoSlNDOjpERkc6Ok5v
ZGU6OnR5cGVkQXJyYXlUeXBlKToKKyAgICAgICAgKiBkZmcvREZHTm9kZVR5cGUuaDoKKyAgICAg
ICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6CisgICAgICAgICogZGZnL0RGR09wZXJhdGlvbnMu
aDoKKyAgICAgICAgKEpTQzo6REZHOjpvcGVyYXRpb25OZXdUeXBlZEFycmF5V2l0aFNpemVGb3JU
eXBlKToKKyAgICAgICAgKEpTQzo6REZHOjpvcGVyYXRpb25OZXdUeXBlZEFycmF5V2l0aE9uZUFy
Z3VtZW50Rm9yVHlwZSk6CisgICAgICAgICogZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBo
YXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZTo6
cHJvcGFnYXRlKToKKyAgICAgICAgKiBkZmcvREZHU2FmZVRvRXhlY3V0ZS5oOgorICAgICAgICAo
SlNDOjpERkc6OnNhZmVUb0V4ZWN1dGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVOZXdUeXBl
ZEFycmF5KToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuaDoKKyAgICAgICAgKiBk
ZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAg
ICogcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9ySW5saW5lcy5oOgor
ICAgICAgICAoSlNDOjpjb25zdHJ1Y3RHZW5lcmljVHlwZWRBcnJheVZpZXcpOgorICAgICAgICAq
IHJ1bnRpbWUvVHlwZWRBcnJheVR5cGUuY3BwOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3RvckNs
YXNzSW5mb0ZvclR5cGUpOgorICAgICAgICAqIHJ1bnRpbWUvVHlwZWRBcnJheVR5cGUuaDoKKyAg
ICAgICAgKEpTQzo6aW5kZXhUb1R5cGVkQXJyYXlUeXBlKToKKwogMjAxMy0wOC0yMCAgR2F2aW4g
QmFycmFjbG91Z2ggIDxiYXJyYWNsb3VnaEBhcHBsZS5jb20+CiAKICAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMDA5MwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuY3BwCShyZXZpc2lvbiAx
NTQyNjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDksMjQgKzI0OSw5IEBAIHZvaWQgZHVtcFNwZWN1bGF0
aW9uQWJicmV2aWF0ZWQoUHJpbnRTdHIKICAgICBvdXQucHJpbnQoc3BlY3VsYXRpb25Ub0FiYnJl
dmlhdGVkU3RyaW5nKHZhbHVlKSk7CiB9CiAKLVNwZWN1bGF0ZWRUeXBlIHNwZWN1bGF0aW9uRnJv
bUNsYXNzSW5mbyhjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbykKK1NwZWN1bGF0ZWRUeXBlIHNw
ZWN1bGF0aW9uRnJvbVR5cGVkQXJyYXlUeXBlKFR5cGVkQXJyYXlUeXBlIHR5cGUpCiB7Ci0gICAg
aWYgKGNsYXNzSW5mbyA9PSBKU0ZpbmFsT2JqZWN0OjppbmZvKCkpCi0gICAgICAgIHJldHVybiBT
cGVjRmluYWxPYmplY3Q7Ci0gICAgCi0gICAgaWYgKGNsYXNzSW5mbyA9PSBKU0FycmF5OjppbmZv
KCkpCi0gICAgICAgIHJldHVybiBTcGVjQXJyYXk7Ci0gICAgCi0gICAgaWYgKGNsYXNzSW5mbyA9
PSBBcmd1bWVudHM6OmluZm8oKSkKLSAgICAgICAgcmV0dXJuIFNwZWNBcmd1bWVudHM7Ci0gICAg
Ci0gICAgaWYgKGNsYXNzSW5mbyA9PSBTdHJpbmdPYmplY3Q6OmluZm8oKSkKLSAgICAgICAgcmV0
dXJuIFNwZWNTdHJpbmdPYmplY3Q7Ci0gICAgCi0gICAgaWYgKGNsYXNzSW5mby0+aXNTdWJDbGFz
c09mKEpTRnVuY3Rpb246OmluZm8oKSkpCi0gICAgICAgIHJldHVybiBTcGVjRnVuY3Rpb247Ci0g
ICAgCi0gICAgc3dpdGNoIChjbGFzc0luZm8tPnR5cGVkQXJyYXlTdG9yYWdlVHlwZSkgeworICAg
IHN3aXRjaCAodHlwZSkgewogICAgIGNhc2UgVHlwZUludDg6CiAgICAgICAgIHJldHVybiBTcGVj
SW50OEFycmF5OwogICAgIGNhc2UgVHlwZUludDE2OgpAQCAtMjg1LDkgKzI3MCwzMiBAQCBTcGVj
dWxhdGVkVHlwZSBzcGVjdWxhdGlvbkZyb21DbGFzc0luZm8oCiAgICAgICAgIHJldHVybiBTcGVj
RmxvYXQzMkFycmF5OwogICAgIGNhc2UgVHlwZUZsb2F0NjQ6CiAgICAgICAgIHJldHVybiBTcGVj
RmxvYXQ2NEFycmF5OwotICAgIGRlZmF1bHQ6CisgICAgY2FzZSBOb3RUeXBlZEFycmF5OgorICAg
IGNhc2UgVHlwZURhdGFWaWV3OgogICAgICAgICBicmVhazsKICAgICB9CisgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworU3BlY3VsYXRlZFR5cGUgc3BlY3VsYXRpb25Gcm9t
Q2xhc3NJbmZvKGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKQoreworICAgIGlmIChjbGFzc0lu
Zm8gPT0gSlNGaW5hbE9iamVjdDo6aW5mbygpKQorICAgICAgICByZXR1cm4gU3BlY0ZpbmFsT2Jq
ZWN0OworICAgIAorICAgIGlmIChjbGFzc0luZm8gPT0gSlNBcnJheTo6aW5mbygpKQorICAgICAg
ICByZXR1cm4gU3BlY0FycmF5OworICAgIAorICAgIGlmIChjbGFzc0luZm8gPT0gQXJndW1lbnRz
OjppbmZvKCkpCisgICAgICAgIHJldHVybiBTcGVjQXJndW1lbnRzOworICAgIAorICAgIGlmIChj
bGFzc0luZm8gPT0gU3RyaW5nT2JqZWN0OjppbmZvKCkpCisgICAgICAgIHJldHVybiBTcGVjU3Ry
aW5nT2JqZWN0OworICAgIAorICAgIGlmIChjbGFzc0luZm8tPmlzU3ViQ2xhc3NPZihKU0Z1bmN0
aW9uOjppbmZvKCkpKQorICAgICAgICByZXR1cm4gU3BlY0Z1bmN0aW9uOworICAgIAorICAgIGlm
IChpc1R5cGVkVmlldyhjbGFzc0luZm8tPnR5cGVkQXJyYXlTdG9yYWdlVHlwZSkpCisgICAgICAg
IHJldHVybiBzcGVjdWxhdGlvbkZyb21UeXBlZEFycmF5VHlwZShjbGFzc0luZm8tPnR5cGVkQXJy
YXlTdG9yYWdlVHlwZSk7CiAgICAgCiAgICAgaWYgKGNsYXNzSW5mby0+aXNTdWJDbGFzc09mKEpT
T2JqZWN0OjppbmZvKCkpKQogICAgICAgICByZXR1cm4gU3BlY09iamVjdE90aGVyOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgJKHJl
dmlzaW9uIDE1NDI2MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxh
dGVkVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMzEsNiArMzMxLDcgQEAgU3BlY3VsYXRlZFR5
cGUgc3BlY3VsYXRpb25Gcm9tU3RydWN0dXJlKAogU3BlY3VsYXRlZFR5cGUgc3BlY3VsYXRpb25G
cm9tQ2VsbChKU0NlbGwqKTsKIFNwZWN1bGF0ZWRUeXBlIHNwZWN1bGF0aW9uRnJvbVZhbHVlKEpT
VmFsdWUpOwogCitTcGVjdWxhdGVkVHlwZSBzcGVjdWxhdGlvbkZyb21UeXBlZEFycmF5VHlwZShU
eXBlZEFycmF5VHlwZSk7IC8vIG9ubHkgdmFsaWQgZm9yIHR5cGVkIHZpZXdzLgogVHlwZWRBcnJh
eVR5cGUgdHlwZWRBcnJheVR5cGVGcm9tU3BlY3VsYXRpb24oU3BlY3VsYXRlZFR5cGUpOwogCiB9
IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJz
dHJhY3RJbnRlcnByZXRlcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHJldmlzaW9uIDE1NDI2
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklu
bGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTA0Myw2ICsxMDQzLDI0IEBAIGJvb2wgQWJzdHJh
Y3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgZm9yTm9kZShub2RlKS5zZXRU
eXBlKFNwZWNBcnJheSk7CiAgICAgICAgIG1fc3RhdGUuc2V0SGF2ZVN0cnVjdHVyZXModHJ1ZSk7
CiAgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBjYXNlIE5ld1R5cGVkQXJyYXk6CisgICAg
ICAgIHN3aXRjaCAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7CisgICAgICAgIGNhc2UgSW50
MzJVc2U6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBVbnR5cGVkVXNlOgorICAg
ICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPmNvZGVPcmlnaW4sIGNsb2JiZXJMaW1pdCk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICBmb3JOb2RlKG5vZGUpLnNldCgKKyAgICAgICAgICAgIG1fZ3JhcGgsCisgICAgICAgICAg
ICBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5jb2RlT3JpZ2luKS0+dHlwZWRBcnJheVN0
cnVjdHVyZSgKKyAgICAgICAgICAgICAgICBub2RlLT50eXBlZEFycmF5VHlwZSgpKSk7CisgICAg
ICAgIG1fc3RhdGUuc2V0SGF2ZVN0cnVjdHVyZXModHJ1ZSk7CisgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgCiAgICAgY2FzZSBOZXdSZWdleHA6CiAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0
KG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4pLT5yZWdF
eHBTdHJ1Y3R1cmUoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0JhY2t3
YXJkc1Byb3BhZ2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE1NDI2
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFja3dhcmRzUHJvcGFnYXRpb25Q
aGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyNCw2ICszMjQsMTQgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBO
ZXdUeXBlZEFycmF5OiB7CisgICAgICAgICAgICAvLyBOZWdhdGl2ZSB6ZXJvIGlzIG5vdCBvYnNl
cnZhYmxlLiBOYU4gdmVyc3VzIHVuZGVmaW5lZCBhcmUgb25seSBvYnNlcnZhYmxlCisgICAgICAg
ICAgICAvLyBpbiB0aGF0IHlvdSB3b3VsZCBnZXQgYSBkaWZmZXJlbnQgZXhjZXB0aW9uIG1lc3Nh
Z2UuIFNvLCBsaWtlLCB3aGF0ZXZlcjogd2UKKyAgICAgICAgICAgIC8vIGNsYWltIGhlcmUgdGhh
dCBOYU4gdi4gdW5kZWZpbmVkIGlzIG9ic2VydmFibGUuCisgICAgICAgICAgICBub2RlLT5jaGls
ZDEoKS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzSW50IHwgTm9kZVVzZWRBc051bWJlciB8IE5vZGVV
c2VkQXNPdGhlcik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAg
CiAgICAgICAgIGNhc2UgU3RyaW5nQ2hhckF0OiB7CiAgICAgICAgICAgICBub2RlLT5jaGlsZDEo
KS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzVmFsdWUpOwogICAgICAgICAgICAgbm9kZS0+Y2hpbGQy
KCktPm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlIHwgTm9kZVVzZWRBc0ludCk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2
aXNpb24gMTU0MjYyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBh
cnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2OCw2ICsxNjgsNyBAQCBwcml2YXRlOgogICAg
IGJvb2wgaGFuZGxlSW5saW5pbmcoTm9kZSogY2FsbFRhcmdldE5vZGUsIGludCByZXN1bHRPcGVy
YW5kLCBjb25zdCBDYWxsTGlua1N0YXR1cyYsIGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzLCB1bnNpZ25lZCBuZXh0T2Zmc2V0LCBDb2RlU3BlY2lhbGl6
YXRpb25LaW5kKTsKICAgICAvLyBIYW5kbGUgaW50cmluc2ljIGZ1bmN0aW9ucy4gUmV0dXJuIHRy
dWUgaWYgaXQgc3VjY2VlZGVkLCBmYWxzZSBpZiB3ZSBuZWVkIHRvIHBsYW50IGEgY2FsbC4KICAg
ICBib29sIGhhbmRsZUludHJpbnNpYyhpbnQgcmVzdWx0T3BlcmFuZCwgSW50cmluc2ljLCBpbnQg
cmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgU3BlY3VsYXRl
ZFR5cGUgcHJlZGljdGlvbik7CisgICAgYm9vbCBoYW5kbGVUeXBlZEFycmF5Q29uc3RydWN0b3Io
aW50IHJlc3VsdE9wZXJhbmQsIEludGVybmFsRnVuY3Rpb24qLCBpbnQgcmVnaXN0ZXJPZmZzZXQs
IGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgVHlwZWRBcnJheVR5cGUgdHlwZSk7CiAg
ICAgYm9vbCBoYW5kbGVDb25zdGFudEludGVybmFsRnVuY3Rpb24oaW50IHJlc3VsdE9wZXJhbmQs
IEludGVybmFsRnVuY3Rpb24qLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcywgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiwgQ29kZVNwZWNpYWxpemF0
aW9uS2luZCk7CiAgICAgTm9kZSogaGFuZGxlUHV0QnlPZmZzZXQoTm9kZSogYmFzZSwgdW5zaWdu
ZWQgaWRlbnRpZmllciwgUHJvcGVydHlPZmZzZXQsIE5vZGUqIHZhbHVlKTsKICAgICBOb2RlKiBo
YW5kbGVHZXRCeU9mZnNldChTcGVjdWxhdGVkVHlwZSwgTm9kZSogYmFzZSwgdW5zaWduZWQgaWRl
bnRpZmllck51bWJlciwgUHJvcGVydHlPZmZzZXQpOwpAQCAtMTU4NSw2ICsxNTg2LDU4IEBAIGJv
b2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpYyhpbnQKICAgICB9CiB9CiAKK2Jvb2wg
Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVR5cGVkQXJyYXlDb25zdHJ1Y3RvcigKKyAgICBpbnQgcmVz
dWx0T3BlcmFuZCwgSW50ZXJuYWxGdW5jdGlvbiogZnVuY3Rpb24sIGludCByZWdpc3Rlck9mZnNl
dCwKKyAgICBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIFR5cGVkQXJyYXlUeXBlIHR5
cGUpCit7CisgICAgaWYgKCFpc1R5cGVkVmlldyh0eXBlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIAorICAgIGlmIChmdW5jdGlvbi0+Y2xhc3NJbmZvKCkgIT0gY29uc3RydWN0b3JDbGFz
c0luZm9Gb3JUeXBlKHR5cGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgaWYg
KGZ1bmN0aW9uLT5nbG9iYWxPYmplY3QoKSAhPSBtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICAvLyBX
ZSBvbmx5IGhhdmUgYW4gaW50cmluc2ljIGZvciB0aGUgY2FzZSB3aGVyZSB5b3Ugc2F5OgorICAg
IC8vCisgICAgLy8gbmV3IEZvb0FycmF5KGJsYWgpOworICAgIC8vCisgICAgLy8gT2YgY291cnNl
LCAnYmxhaCcgY291bGQgYmUgYW55IG9mIHRoZSBmb2xsb3dpbmc6CisgICAgLy8KKyAgICAvLyAt
IEludGVnZXIsIGluZGljYXRpbmcgdGhhdCB5b3Ugd2FudCB0byBhbGxvY2F0ZSBhbiBhcnJheSBv
ZiB0aGF0IGxlbmd0aC4KKyAgICAvLyAgIFRoaXMgaXMgdGhlIHRoaW5nIHdlJ3JlIGhvcGluZyBm
b3IsIGFuZCB3aGF0IHdlIGNhbiBhY3R1YWxseSBkbyBtZWFuaW5nZnVsCisgICAgLy8gICBvcHRp
bWl6YXRpb25zIGZvci4KKyAgICAvLworICAgIC8vIC0gQXJyYXkgYnVmZmVyLCBpbmRpY2F0aW5n
IHRoYXQgeW91IHdhbnQgdG8gY3JlYXRlIGEgdmlldyBvbnRvIHRoYXQgX2VudGlyZV8KKyAgICAv
LyAgIGJ1ZmZlci4KKyAgICAvLworICAgIC8vIC0gTm9uLWJ1ZmZlciBvYmplY3QsIGluZGljYXRp
bmcgdGhhdCB5b3Ugd2FudCB0byBjcmVhdGUgYSBjb3B5IG9mIHRoYXQKKyAgICAvLyAgIG9iamVj
dCBieSBwcmV0ZW5kaW5nIHRoYXQgaXQgcXVhY2tzIGxpa2UgYW4gYXJyYXkuCisgICAgLy8KKyAg
ICAvLyAtIEFueXRoaW5nIGVsc2UsIGluZGljYXRpbmcgdGhhdCB5b3Ugd2FudCB0byBoYXZlIGFu
IGV4Y2VwdGlvbiB0aHJvd24gYXQKKyAgICAvLyAgIHlvdS4KKyAgICAvLworICAgIC8vIFRoZSBp
bnRyaW5zaWMsIE5ld1R5cGVkQXJyYXksIHdpbGwgYmVoYXZlIGFzIGlmIGl0IGNvdWxkIGRvIGFu
eSBvZiB0aGVzZQorICAgIC8vIHRoaW5ncyB1cCB1bnRpbCB3ZSBkbyBGaXh1cC4gVGhlcmVhZnRl
ciwgaWYgY2hpbGQxIChpLmUuICdibGFoJykgaXMKKyAgICAvLyBwcmVkaWN0ZWQgSW50MzIsIHRo
ZW4gd2UgbG9jayBpdCBpbiBhcyBhIG5vcm1hbCB0eXBlZCBhcnJheSBhbGxvY2F0aW9uLgorICAg
IC8vIE90aGVyd2lzZSwgTmV3VHlwZWRBcnJheSB0dXJucyBpbnRvIGEgdG90YWxseSBvcGFxdWUg
ZnVuY3Rpb24gY2FsbCB0aGF0CisgICAgLy8gbWF5IGNsb2JiZXIgdGhlIHdvcmxkIC0gYnkgdmly
dHVlIG9mIGl0IGFjY2Vzc2luZyBwcm9wZXJ0aWVzIG9uIHdoYXQgY291bGQKKyAgICAvLyBiZSBh
biBvYmplY3QuCisgICAgLy8KKyAgICAvLyBOb3RlIHRoYXQgYWx0aG91Z2ggdGhlIGdlbmVyaWMg
Zm9ybSBvZiBOZXdUeXBlZEFycmF5IHNvdW5kcyBzb3J0IG9mIGF3ZnVsLAorICAgIC8vIGl0IGlz
IGFjdHVhbGx5IHF1aXRlIGxpa2VseSB0byBiZSBtb3JlIGVmZmljaWVudCB0aGFuIGEgZnVsbHkg
Z2VuZXJpYworICAgIC8vIENvbnN0cnVjdC4gU28sIHdlIG1pZ2h0IHdhbnQgdG8gdGhpbmsgYWJv
dXQgbWFraW5nIE5ld1R5cGVkQXJyYXkgdmFyaWFkaWMsCisgICAgLy8gb3IgZWxzZSBtYWtpbmcg
Q29uc3RydWN0IG5vdCBzdXBlciBzbG93LgorICAgIAorICAgIGlmIChhcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcyAhPSAyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgc2V0KHJl
c3VsdE9wZXJhbmQsCisgICAgICAgIGFkZFRvR3JhcGgoTmV3VHlwZWRBcnJheSwgT3BJbmZvKHR5
cGUpLCBnZXQocmVnaXN0ZXJPZmZzZXQgKyBhcmd1bWVudFRvT3BlcmFuZCgxKSkpKTsKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKwogYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlQ29uc3RhbnRJbnRl
cm5hbEZ1bmN0aW9uKAogICAgIGludCByZXN1bHRPcGVyYW5kLCBJbnRlcm5hbEZ1bmN0aW9uKiBm
dW5jdGlvbiwgaW50IHJlZ2lzdGVyT2Zmc2V0LAogICAgIGludCBhcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcywgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiwgQ29kZVNwZWNpYWxpemF0aW9uS2lu
ZCBraW5kKQpAQCAtMTYxMCw3ICsxNjYzLDkgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxl
Q29uc3RhbnRJbnRlcgogICAgICAgICBzZXQocmVzdWx0T3BlcmFuZCwKICAgICAgICAgICAgIGFk
ZFRvR3JhcGgoTm9kZTo6VmFyQXJnLCBOZXdBcnJheSwgT3BJbmZvKEFycmF5V2l0aFVuZGVjaWRl
ZCksIE9wSW5mbygwKSkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9IGVsc2UgaWYgKGZ1
bmN0aW9uLT5jbGFzc0luZm8oKSA9PSBTdHJpbmdDb25zdHJ1Y3Rvcjo6aW5mbygpKSB7CisgICAg
fQorICAgIAorICAgIGlmIChmdW5jdGlvbi0+Y2xhc3NJbmZvKCkgPT0gU3RyaW5nQ29uc3RydWN0
b3I6OmluZm8oKSkgewogICAgICAgICBOb2RlKiByZXN1bHQ7CiAgICAgICAgIAogICAgICAgICBp
ZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPD0gMSkKQEAgLTE2MjUsNiArMTY4MCwxMyBA
QCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVDb25zdGFudEludGVyCiAgICAgICAgIHJldHVy
biB0cnVlOwogICAgIH0KICAgICAKKyAgICBmb3IgKHVuc2lnbmVkIHR5cGVJbmRleCA9IDA7IHR5
cGVJbmRleCA8IE5VTUJFUl9PRl9UWVBFRF9BUlJBWV9UWVBFUzsgKyt0eXBlSW5kZXgpIHsKKyAg
ICAgICAgaWYgKGhhbmRsZVR5cGVkQXJyYXlDb25zdHJ1Y3RvcigKKyAgICAgICAgICAgICAgICBy
ZXN1bHRPcGVyYW5kLCBmdW5jdGlvbiwgcmVnaXN0ZXJPcGVyYW5kLCBhcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcywKKyAgICAgICAgICAgICAgICBpbmRleFRvVHlwZWRBcnJheVR5cGUodHlwZUlu
ZGV4KSkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCiAgICAgcmV0dXJu
IGZhbHNlOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNl
LmNwcAkocmV2aXNpb24gMTU0MjYyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
U0VQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4OCw2ICs1ODgsNyBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgY2FzZSBUb1N0cmluZzoKICAgICAgICAgICAgIGNhc2UgTmV3U3RyaW5nT2Jq
ZWN0OgogICAgICAgICAgICAgY2FzZSBNYWtlUm9wZToKKyAgICAgICAgICAgIGNhc2UgTmV3VHlw
ZWRBcnJheToKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgIC8vIFRoaXMgZWl0aGVyIGV4aXRzLCBjYXVzZXMgYSBHQyAobGF6eSBzdHJpbmcg
YWxsb2NhdGlvbiksIG9yIGNsb2JiZXJzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Nsb2JiZXJpemUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Nsb2JiZXJpemUuaAkocmV2aXNpb24gMTU0MjYyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHdvcmtpbmcgY29weSkKQEAgLTUwNyw2ICs1MDcsMjEg
QEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgICAgICB3cml0
ZShHQ1N0YXRlKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKKyAgICBjYXNlIE5ld1R5cGVk
QXJyYXk6CisgICAgICAgIHN3aXRjaCAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7CisgICAg
ICAgIGNhc2UgSW50MzJVc2U6CisgICAgICAgICAgICByZWFkKEdDU3RhdGUpOworICAgICAgICAg
ICAgd3JpdGUoR0NTdGF0ZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNhc2UgVW50
eXBlZFVzZToKKyAgICAgICAgICAgIHJlYWQoV29ybGQpOworICAgICAgICAgICAgd3JpdGUoV29y
bGQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgICAgICAKICAgICBjYXNlIFJlZ0V4cEV4ZWM6CiAgICAgY2FzZSBSZWdFeHBUZXN0
OgogICAgICAgICByZWFkKFJlZ0V4cFN0YXRlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkocmV2aXNpb24gMTU0MjYyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjcz
LDYgKzY3MywxNSBAQCBwcml2YXRlOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAg
ICAgICAgICAgIAorICAgICAgICBjYXNlIE5ld1R5cGVkQXJyYXk6IHsKKyAgICAgICAgICAgIGlm
IChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKSB7CisgICAgICAgICAg
ICAgICAgc2V0VXNlS2luZEFuZFVuYm94SWZQcm9maXRhYmxlPEludDMyVXNlPihub2RlLT5jaGls
ZDEoKSk7CisgICAgICAgICAgICAgICAgbm9kZS0+Y2xlYXJGbGFncyhOb2RlTXVzdEdlbmVyYXRl
IHwgTm9kZUNsb2JiZXJzV29ybGQpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAogICAgICAg
ICBjYXNlIE5ld0FycmF5V2l0aFNpemU6IHsKICAgICAgICAgICAgIHNldFVzZUtpbmRBbmRVbmJv
eElmUHJvZml0YWJsZTxJbnQzMlVzZT4obm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgYnJl
YWs7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMTU0MjYy
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTYzNSw2ICs2MzUsMjQgQEAgc3RydWN0IE5vZGUgewogICAgICAgICByZXR1cm4gbV9vcElu
Zm87CiAgICAgfQogICAgIAorICAgIGJvb2wgaGFzVHlwZWRBcnJheVR5cGUoKQorICAgIHsKKyAg
ICAgICAgc3dpdGNoIChvcCgpKSB7CisgICAgICAgIGNhc2UgTmV3VHlwZWRBcnJheToKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIFR5cGVkQXJyYXlUeXBlIHR5cGVk
QXJyYXlUeXBlKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChoYXNUeXBlZEFycmF5VHlwZSgpKTsK
KyAgICAgICAgVHlwZWRBcnJheVR5cGUgcmVzdWx0ID0gc3RhdGljX2Nhc3Q8VHlwZWRBcnJheVR5
cGU+KG1fb3BJbmZvKTsKKyAgICAgICAgQVNTRVJUKGlzVHlwZWRWaWV3KHJlc3VsdCkpOworICAg
ICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKICAgICBib29sIGhhc0lubGluZUNhcGFj
aXR5KCkKICAgICB7CiAgICAgICAgIHJldHVybiBvcCgpID09IENyZWF0ZVRoaXM7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCShyZXZpc2lvbiAxNTQyNjIpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTIwMSw2ICsyMDEsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAg
bWFjcm8oTmV3QXJyYXksIE5vZGVSZXN1bHRKUyB8IE5vZGVIYXNWYXJBcmdzKSBcCiAgICAgbWFj
cm8oTmV3QXJyYXlXaXRoU2l6ZSwgTm9kZVJlc3VsdEpTKSBcCiAgICAgbWFjcm8oTmV3QXJyYXlC
dWZmZXIsIE5vZGVSZXN1bHRKUykgXAorICAgIG1hY3JvKE5ld1R5cGVkQXJyYXksIE5vZGVSZXN1
bHRKUyB8IE5vZGVDbG9iYmVyc1dvcmxkIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3Jv
KE5ld1JlZ2V4cCwgTm9kZVJlc3VsdEpTKSBcCiAgICAgXAogICAgIC8qIE5vZGVzIGZvciBtaXNj
IG9wZXJhdGlvbnMuICovXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVy
YXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09w
ZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAxNTQyNjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzY2LDYgKzEzNjYsMTg0
IEBAIGNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3QXJyYXlCdWYKICAgICByZXR1cm4g
Yml0d2lzZV9jYXN0PGNoYXIqPihjb25zdHJ1Y3RBcnJheShleGVjLCBhcnJheVN0cnVjdHVyZSwg
ZXhlYy0+Y29kZUJsb2NrKCktPmNvbnN0YW50QnVmZmVyKHN0YXJ0KSwgc2l6ZSkpOwogfQogCit0
ZW1wbGF0ZTx0eXBlbmFtZSBWaWV3Q2xhc3M+CitjaGFyKiBuZXdUeXBlZEFycmF5V2l0aFNpemUo
RXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgaW50MzJfdCBzaXplKQorewor
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cigmdm0sIGV4ZWMpOworICAgIGlmIChzaXplIDwgMCkgeworICAgICAgICB0aHJvd0Vycm9yKGV4
ZWMsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgIlJlcXVlc3RlZCBsZW5ndGggaXMgbmVnYXRpdmUi
KSk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICByZXR1cm4gYml0d2lzZV9jYXN0PGNo
YXIqPihWaWV3Q2xhc3M6OmNyZWF0ZShleGVjLCBzdHJ1Y3R1cmUsIHNpemUpKTsKK30KKwordGVt
cGxhdGU8dHlwZW5hbWUgVmlld0NsYXNzPgorY2hhciogbmV3VHlwZWRBcnJheVdpdGhPbmVBcmd1
bWVudCgKKyAgICBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgCisgICAgSlNWYWx1
ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOworICAgIAorICAgIGlmIChK
U0FycmF5QnVmZmVyKiBqc0J1ZmZlciA9IGpzRHluYW1pY0Nhc3Q8SlNBcnJheUJ1ZmZlcio+KHZh
bHVlKSkgeworICAgICAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IGJ1ZmZlciA9IGpzQnVmZmVyLT5p
bXBsKCk7CisgICAgICAgIAorICAgICAgICBpZiAoYnVmZmVyLT5ieXRlTGVuZ3RoKCkgJSBWaWV3
Q2xhc3M6OmVsZW1lbnRTaXplKSB7CisgICAgICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0
ZVJhbmdlRXJyb3IoZXhlYywgIkFycmF5QnVmZmVyIGxlbmd0aCBtaW51cyB0aGUgYnl0ZU9mZnNl
dCBpcyBub3QgYSBtdWx0aXBsZSBvZiB0aGUgZWxlbWVudCBzaXplIikpOworICAgICAgICAgICAg
cmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxjaGFyKj4o
CisgICAgICAgICAgICBWaWV3Q2xhc3M6OmNyZWF0ZSgKKyAgICAgICAgICAgICAgICBleGVjLCBz
dHJ1Y3R1cmUsIGJ1ZmZlciwgMCwgYnVmZmVyLT5ieXRlTGVuZ3RoKCkgLyBWaWV3Q2xhc3M6OmVs
ZW1lbnRTaXplKSk7CisgICAgfQorICAgIAorICAgIGlmIChKU09iamVjdCogb2JqZWN0ID0ganNE
eW5hbWljQ2FzdDxKU09iamVjdCo+KHZhbHVlKSkgeworICAgICAgICB1bnNpZ25lZCBsZW5ndGgg
PSBvYmplY3QtPmdldChleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpLnRvVWludDMyKGV4
ZWMpOworICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICByZXR1
cm4gMDsKKyAgICAgICAgCisgICAgICAgIFZpZXdDbGFzcyogcmVzdWx0ID0gVmlld0NsYXNzOjpj
cmVhdGVVbmluaXRpYWxpemVkKGV4ZWMsIHN0cnVjdHVyZSwgbGVuZ3RoKTsKKyAgICAgICAgaWYg
KCFyZXN1bHQpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgCisgICAgICAgIGlmICgh
cmVzdWx0LT5zZXQoZXhlYywgb2JqZWN0LCAwLCBsZW5ndGgpKQorICAgICAgICAgICAgcmV0dXJu
IDA7CisgICAgICAgIAorICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PGNoYXIqPihyZXN1bHQp
OworICAgIH0KKyAgICAKKyAgICBpbnQgbGVuZ3RoOworICAgIGlmICh2YWx1ZS5pc0ludDMyKCkp
CisgICAgICAgIGxlbmd0aCA9IHZhbHVlLmFzSW50MzIoKTsKKyAgICBlbHNlIGlmICghdmFsdWUu
aXNOdW1iZXIoKSkgeworICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihl
eGVjLCAiSW52YWxpZCBhcnJheSBsZW5ndGggYXJndW1lbnQiKSk7CisgICAgICAgIHJldHVybiAw
OworICAgIH0gZWxzZSB7CisgICAgICAgIGxlbmd0aCA9IHN0YXRpY19jYXN0PGludD4odmFsdWUu
YXNOdW1iZXIoKSk7CisgICAgICAgIGlmIChsZW5ndGggIT0gdmFsdWUuYXNOdW1iZXIoKSkgewor
ICAgICAgICAgICAgdGhyb3dFcnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIkludmFs
aWQgYXJyYXkgbGVuZ3RoIGFyZ3VtZW50IChmcmFjdGlvbmFsIGxlbmd0aHMgbm90IGFsbG93ZWQp
IikpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAg
aWYgKGxlbmd0aCA8IDApIHsKKyAgICAgICAgdGhyb3dFcnJvcihleGVjLCBjcmVhdGVSYW5nZUVy
cm9yKGV4ZWMsICJSZXF1ZXN0ZWQgbGVuZ3RoIGlzIG5lZ2F0aXZlIikpOworICAgICAgICByZXR1
cm4gMDsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxjaGFyKj4oVmlld0Ns
YXNzOjpjcmVhdGUoZXhlYywgc3RydWN0dXJlLCBsZW5ndGgpKTsKK30KKworY2hhciogREZHX09Q
RVJBVElPTiBvcGVyYXRpb25OZXdJbnQ4QXJyYXlXaXRoU2l6ZSgKKyAgICBFeGVjU3RhdGUqIGV4
ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBpbnQzMl90IGxlbmd0aCkgV1RGX0lOVEVSTkFMCit7
CisgICAgcmV0dXJuIG5ld1R5cGVkQXJyYXlXaXRoU2l6ZTxKU0ludDhBcnJheT4oZXhlYywgc3Ry
dWN0dXJlLCBsZW5ndGgpOworfQorCitjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0lu
dDhBcnJheVdpdGhPbmVBcmd1bWVudCgKKyAgICBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSog
c3RydWN0dXJlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpIFdURl9JTlRFUk5BTAorewor
ICAgIHJldHVybiBuZXdUeXBlZEFycmF5V2l0aE9uZUFyZ3VtZW50PEpTSW50OEFycmF5PihleGVj
LCBzdHJ1Y3R1cmUsIGVuY29kZWRWYWx1ZSk7Cit9CisKK2NoYXIqIERGR19PUEVSQVRJT04gb3Bl
cmF0aW9uTmV3SW50MTZBcnJheVdpdGhTaXplKAorICAgIEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIGludDMyX3QgbGVuZ3RoKSBXVEZfSU5URVJOQUwKK3sKKyAgICByZXR1
cm4gbmV3VHlwZWRBcnJheVdpdGhTaXplPEpTSW50MTZBcnJheT4oZXhlYywgc3RydWN0dXJlLCBs
ZW5ndGgpOworfQorCitjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0ludDE2QXJyYXlX
aXRoT25lQXJndW1lbnQoCisgICAgRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKSBXVEZfSU5URVJOQUwKK3sKKyAgICByZXR1
cm4gbmV3VHlwZWRBcnJheVdpdGhPbmVBcmd1bWVudDxKU0ludDE2QXJyYXk+KGV4ZWMsIHN0cnVj
dHVyZSwgZW5jb2RlZFZhbHVlKTsKK30KKworY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25O
ZXdJbnQzMkFycmF5V2l0aFNpemUoCisgICAgRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgaW50MzJfdCBsZW5ndGgpIFdURl9JTlRFUk5BTAoreworICAgIHJldHVybiBuZXdU
eXBlZEFycmF5V2l0aFNpemU8SlNJbnQzMkFycmF5PihleGVjLCBzdHJ1Y3R1cmUsIGxlbmd0aCk7
Cit9CisKK2NoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3SW50MzJBcnJheVdpdGhPbmVB
cmd1bWVudCgKKyAgICBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpIFdURl9JTlRFUk5BTAoreworICAgIHJldHVybiBuZXdU
eXBlZEFycmF5V2l0aE9uZUFyZ3VtZW50PEpTSW50MzJBcnJheT4oZXhlYywgc3RydWN0dXJlLCBl
bmNvZGVkVmFsdWUpOworfQorCitjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1VpbnQ4
QXJyYXlXaXRoU2l6ZSgKKyAgICBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJl
LCBpbnQzMl90IGxlbmd0aCkgV1RGX0lOVEVSTkFMCit7CisgICAgcmV0dXJuIG5ld1R5cGVkQXJy
YXlXaXRoU2l6ZTxKU1VpbnQ4QXJyYXk+KGV4ZWMsIHN0cnVjdHVyZSwgbGVuZ3RoKTsKK30KKwor
Y2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdVaW50OEFycmF5V2l0aE9uZUFyZ3VtZW50
KAorICAgIEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRWYWx1ZSkgV1RGX0lOVEVSTkFMCit7CisgICAgcmV0dXJuIG5ld1R5cGVkQXJy
YXlXaXRoT25lQXJndW1lbnQ8SlNVaW50OEFycmF5PihleGVjLCBzdHJ1Y3R1cmUsIGVuY29kZWRW
YWx1ZSk7Cit9CisKK2NoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3VWludDhDbGFtcGVk
QXJyYXlXaXRoU2l6ZSgKKyAgICBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJl
LCBpbnQzMl90IGxlbmd0aCkgV1RGX0lOVEVSTkFMCit7CisgICAgcmV0dXJuIG5ld1R5cGVkQXJy
YXlXaXRoU2l6ZTxKU1VpbnQ4Q2xhbXBlZEFycmF5PihleGVjLCBzdHJ1Y3R1cmUsIGxlbmd0aCk7
Cit9CisKK2NoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3VWludDhDbGFtcGVkQXJyYXlX
aXRoT25lQXJndW1lbnQoCisgICAgRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKSBXVEZfSU5URVJOQUwKK3sKKyAgICByZXR1
cm4gbmV3VHlwZWRBcnJheVdpdGhPbmVBcmd1bWVudDxKU1VpbnQ4Q2xhbXBlZEFycmF5PihleGVj
LCBzdHJ1Y3R1cmUsIGVuY29kZWRWYWx1ZSk7Cit9CisKK2NoYXIqIERGR19PUEVSQVRJT04gb3Bl
cmF0aW9uTmV3VWludDE2QXJyYXlXaXRoU2l6ZSgKKyAgICBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBpbnQzMl90IGxlbmd0aCkgV1RGX0lOVEVSTkFMCit7CisgICAgcmV0
dXJuIG5ld1R5cGVkQXJyYXlXaXRoU2l6ZTxKU1VpbnQxNkFycmF5PihleGVjLCBzdHJ1Y3R1cmUs
IGxlbmd0aCk7Cit9CisKK2NoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3VWludDE2QXJy
YXlXaXRoT25lQXJndW1lbnQoCisgICAgRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKSBXVEZfSU5URVJOQUwKK3sKKyAgICBy
ZXR1cm4gbmV3VHlwZWRBcnJheVdpdGhPbmVBcmd1bWVudDxKU1VpbnQxNkFycmF5PihleGVjLCBz
dHJ1Y3R1cmUsIGVuY29kZWRWYWx1ZSk7Cit9CisKK2NoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0
aW9uTmV3VWludDMyQXJyYXlXaXRoU2l6ZSgKKyAgICBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVy
ZSogc3RydWN0dXJlLCBpbnQzMl90IGxlbmd0aCkgV1RGX0lOVEVSTkFMCit7CisgICAgcmV0dXJu
IG5ld1R5cGVkQXJyYXlXaXRoU2l6ZTxKU1VpbnQzMkFycmF5PihleGVjLCBzdHJ1Y3R1cmUsIGxl
bmd0aCk7Cit9CisKK2NoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3VWludDMyQXJyYXlX
aXRoT25lQXJndW1lbnQoCisgICAgRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKSBXVEZfSU5URVJOQUwKK3sKKyAgICByZXR1
cm4gbmV3VHlwZWRBcnJheVdpdGhPbmVBcmd1bWVudDxKU1VpbnQzMkFycmF5PihleGVjLCBzdHJ1
Y3R1cmUsIGVuY29kZWRWYWx1ZSk7Cit9CisKK2NoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9u
TmV3RmxvYXQzMkFycmF5V2l0aFNpemUoCisgICAgRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgaW50MzJfdCBsZW5ndGgpIFdURl9JTlRFUk5BTAoreworICAgIHJldHVybiBu
ZXdUeXBlZEFycmF5V2l0aFNpemU8SlNGbG9hdDMyQXJyYXk+KGV4ZWMsIHN0cnVjdHVyZSwgbGVu
Z3RoKTsKK30KKworY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdGbG9hdDMyQXJyYXlX
aXRoT25lQXJndW1lbnQoCisgICAgRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKSBXVEZfSU5URVJOQUwKK3sKKyAgICByZXR1
cm4gbmV3VHlwZWRBcnJheVdpdGhPbmVBcmd1bWVudDxKU0Zsb2F0MzJBcnJheT4oZXhlYywgc3Ry
dWN0dXJlLCBlbmNvZGVkVmFsdWUpOworfQorCitjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlv
bk5ld0Zsb2F0NjRBcnJheVdpdGhTaXplKAorICAgIEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIGludDMyX3QgbGVuZ3RoKSBXVEZfSU5URVJOQUwKK3sKKyAgICByZXR1cm4g
bmV3VHlwZWRBcnJheVdpdGhTaXplPEpTRmxvYXQ2NEFycmF5PihleGVjLCBzdHJ1Y3R1cmUsIGxl
bmd0aCk7Cit9CisKK2NoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3RmxvYXQ2NEFycmF5
V2l0aE9uZUFyZ3VtZW50KAorICAgIEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkgV1RGX0lOVEVSTkFMCit7CisgICAgcmV0
dXJuIG5ld1R5cGVkQXJyYXlXaXRoT25lQXJndW1lbnQ8SlNGbG9hdDY0QXJyYXk+KGV4ZWMsIHN0
cnVjdHVyZSwgZW5jb2RlZFZhbHVlKTsKK30KKwogRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElP
TiBvcGVyYXRpb25OZXdSZWdleHAoRXhlY1N0YXRlKiBleGVjLCB2b2lkKiByZWdleHBQdHIpCiB7
CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAxNTQyNjIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTIyLDYgKzEyMiw3
IEBAIHR5cGVkZWYgY2hhciogREZHX09QRVJBVElPTiAoKlBfREZHT3BlcmEKIHR5cGVkZWYgY2hh
ciogREZHX09QRVJBVElPTiAoKlBfREZHT3BlcmF0aW9uX0VTKShFeGVjU3RhdGUqLCBzaXplX3Qp
OwogdHlwZWRlZiBjaGFyKiBERkdfT1BFUkFUSU9OICgqUF9ERkdPcGVyYXRpb25fRVNKc3MpKEV4
ZWNTdGF0ZSosIHNpemVfdCwgSlNTdHJpbmcqKTsKIHR5cGVkZWYgY2hhciogREZHX09QRVJBVElP
TiAoKlBfREZHT3BlcmF0aW9uX0VTdCkoRXhlY1N0YXRlKiwgU3RydWN0dXJlKik7Cit0eXBlZGVm
IGNoYXIqIERGR19PUEVSQVRJT04gKCpQX0RGR09wZXJhdGlvbl9FU3RKKShFeGVjU3RhdGUqLCBT
dHJ1Y3R1cmUqLCBpbnQzMl90KTsKIHR5cGVkZWYgY2hhciogREZHX09QRVJBVElPTiAoKlBfREZH
T3BlcmF0aW9uX0VTdFBTKShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCB2b2lkKiwgc2l6ZV90KTsK
IHR5cGVkZWYgY2hhciogREZHX09QRVJBVElPTiAoKlBfREZHT3BlcmF0aW9uX0VTdFNTKShFeGVj
U3RhdGUqLCBTdHJ1Y3R1cmUqLCBzaXplX3QsIHNpemVfdCk7CiB0eXBlZGVmIGNoYXIqIERGR19P
UEVSQVRJT04gKCpQX0RGR09wZXJhdGlvbl9FU3RaKShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBp
bnQzMl90KTsKQEAgLTE1Miw2ICsxNTMsMjQgQEAgY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRp
b25OZXdBcnJheShFeAogY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdBcnJheUJ1ZmZl
cihFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBzaXplX3QsIHNpemVfdCkgV1RGX0lOVEVSTkFMOwog
Y2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdFbXB0eUFycmF5KEV4ZWNTdGF0ZSosIFN0
cnVjdHVyZSopIFdURl9JTlRFUk5BTDsKIGNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3
QXJyYXlXaXRoU2l6ZShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBpbnQzMl90KSBXVEZfSU5URVJO
QUw7CitjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0ludDhBcnJheVdpdGhTaXplKEV4
ZWNTdGF0ZSosIFN0cnVjdHVyZSosIGludDMyX3QpIFdURl9JTlRFUk5BTDsKK2NoYXIqIERGR19P
UEVSQVRJT04gb3BlcmF0aW9uTmV3SW50OEFycmF5V2l0aE9uZUFyZ3VtZW50KEV4ZWNTdGF0ZSos
IFN0cnVjdHVyZSosIEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5URVJOQUw7CitjaGFyKiBERkdfT1BF
UkFUSU9OIG9wZXJhdGlvbk5ld0ludDE2QXJyYXlXaXRoU2l6ZShFeGVjU3RhdGUqLCBTdHJ1Y3R1
cmUqLCBpbnQzMl90KSBXVEZfSU5URVJOQUw7CitjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlv
bk5ld0ludDE2QXJyYXlXaXRoT25lQXJndW1lbnQoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgRW5j
b2RlZEpTVmFsdWUpIFdURl9JTlRFUk5BTDsKK2NoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9u
TmV3SW50MzJBcnJheVdpdGhTaXplKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIGludDMyX3QpIFdU
Rl9JTlRFUk5BTDsKK2NoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3SW50MzJBcnJheVdp
dGhPbmVBcmd1bWVudChFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBFbmNvZGVkSlNWYWx1ZSkgV1RG
X0lOVEVSTkFMOworY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdVaW50OEFycmF5V2l0
aFNpemUoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgaW50MzJfdCkgV1RGX0lOVEVSTkFMOworY2hh
ciogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdVaW50OEFycmF5V2l0aE9uZUFyZ3VtZW50KEV4
ZWNTdGF0ZSosIFN0cnVjdHVyZSosIEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5URVJOQUw7CitjaGFy
KiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1VpbnQ4Q2xhbXBlZEFycmF5V2l0aFNpemUoRXhl
Y1N0YXRlKiwgU3RydWN0dXJlKiwgaW50MzJfdCkgV1RGX0lOVEVSTkFMOworY2hhciogREZHX09Q
RVJBVElPTiBvcGVyYXRpb25OZXdVaW50OENsYW1wZWRBcnJheVdpdGhPbmVBcmd1bWVudChFeGVj
U3RhdGUqLCBTdHJ1Y3R1cmUqLCBFbmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFMOworY2hhciog
REZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdVaW50MTZBcnJheVdpdGhTaXplKEV4ZWNTdGF0ZSos
IFN0cnVjdHVyZSosIGludDMyX3QpIFdURl9JTlRFUk5BTDsKK2NoYXIqIERGR19PUEVSQVRJT04g
b3BlcmF0aW9uTmV3VWludDE2QXJyYXlXaXRoT25lQXJndW1lbnQoRXhlY1N0YXRlKiwgU3RydWN0
dXJlKiwgRW5jb2RlZEpTVmFsdWUpIFdURl9JTlRFUk5BTDsKK2NoYXIqIERGR19PUEVSQVRJT04g
b3BlcmF0aW9uTmV3VWludDMyQXJyYXlXaXRoU2l6ZShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBp
bnQzMl90KSBXVEZfSU5URVJOQUw7CitjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1Vp
bnQzMkFycmF5V2l0aE9uZUFyZ3VtZW50KEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIEVuY29kZWRK
U1ZhbHVlKSBXVEZfSU5URVJOQUw7CitjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0Zs
b2F0MzJBcnJheVdpdGhTaXplKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIGludDMyX3QpIFdURl9J
TlRFUk5BTDsKK2NoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3RmxvYXQzMkFycmF5V2l0
aE9uZUFyZ3VtZW50KEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIEVuY29kZWRKU1ZhbHVlKSBXVEZf
SU5URVJOQUw7CitjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0Zsb2F0NjRBcnJheVdp
dGhTaXplKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIGludDMyX3QpIFdURl9JTlRFUk5BTDsKK2No
YXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3RmxvYXQ2NEFycmF5V2l0aE9uZUFyZ3VtZW50
KEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5URVJOQUw7CiBF
bmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1JlZ2V4cChFeGVjU3RhdGUq
LCB2b2lkKikgV1RGX0lOVEVSTkFMOwogdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5
VmFsU3RyaWN0KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkUHJvcGVydHksIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkgV1RG
X0lOVEVSTkFMOwogdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0
KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkUHJvcGVydHksIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkgV1RGX0lOVEVSTkFM
OwpAQCAtMjg0LDYgKzMwMyw2NSBAQCB2b2lkIERGR19PUEVSQVRJT04gZGVidWdPcGVyYXRpb25Q
cmludFNwCiB2b2lkIERGR19PUEVSQVRJT04gdHJpZ2dlclJlb3B0aW1pemF0aW9uTm93KENvZGVC
bG9jayopIFdURl9JTlRFUk5BTDsKIAogfSAvLyBleHRlcm4gIkMiCisKK1BfREZHT3BlcmF0aW9u
X0VTdFogb3BlcmF0aW9uTmV3VHlwZWRBcnJheVdpdGhTaXplRm9yVHlwZShUeXBlZEFycmF5VHlw
ZSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgVHlwZUludDg6CisgICAg
ICAgIHJldHVybiBvcGVyYXRpb25OZXdJbnQ4QXJyYXlXaXRoU2l6ZTsKKyAgICBjYXNlIFR5cGVJ
bnQxNjoKKyAgICAgICAgcmV0dXJuIG9wZXJhdGlvbk5ld0ludDE2QXJyYXlXaXRoU2l6ZTsKKyAg
ICBjYXNlIFR5cGVJbnQzMjoKKyAgICAgICAgcmV0dXJuIG9wZXJhdGlvbk5ld0ludDMyQXJyYXlX
aXRoU2l6ZTsKKyAgICBjYXNlIFR5cGVVaW50ODoKKyAgICAgICAgcmV0dXJuIG9wZXJhdGlvbk5l
d1VpbnQ4QXJyYXlXaXRoU2l6ZTsKKyAgICBjYXNlIFR5cGVVaW50OENsYW1wZWQ6CisgICAgICAg
IHJldHVybiBvcGVyYXRpb25OZXdVaW50OENsYW1wZWRBcnJheVdpdGhTaXplOworICAgIGNhc2Ug
VHlwZVVpbnQxNjoKKyAgICAgICAgcmV0dXJuIG9wZXJhdGlvbk5ld1VpbnQxNkFycmF5V2l0aFNp
emU7CisgICAgY2FzZSBUeXBlVWludDMyOgorICAgICAgICByZXR1cm4gb3BlcmF0aW9uTmV3VWlu
dDMyQXJyYXlXaXRoU2l6ZTsKKyAgICBjYXNlIFR5cGVGbG9hdDMyOgorICAgICAgICByZXR1cm4g
b3BlcmF0aW9uTmV3RmxvYXQzMkFycmF5V2l0aFNpemU7CisgICAgY2FzZSBUeXBlRmxvYXQ2NDoK
KyAgICAgICAgcmV0dXJuIG9wZXJhdGlvbk5ld0Zsb2F0NjRBcnJheVdpdGhTaXplOworICAgIGNh
c2UgTm90VHlwZWRBcnJheToKKyAgICBjYXNlIFR5cGVEYXRhVmlldzoKKyAgICAgICAgYnJlYWs7
CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIDA7
Cit9CisKK1BfREZHT3BlcmF0aW9uX0VTdEogb3BlcmF0aW9uTmV3VHlwZWRBcnJheVdpdGhPbmVB
cmd1bWVudEZvclR5cGUoVHlwZWRBcnJheVR5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUp
IHsKKyAgICBjYXNlIFR5cGVJbnQ4OgorICAgICAgICByZXR1cm4gb3BlcmF0aW9uTmV3SW50OEFy
cmF5V2l0aE9uZUFyZ3VtZW50OworICAgIGNhc2UgVHlwZUludDE2OgorICAgICAgICByZXR1cm4g
b3BlcmF0aW9uTmV3SW50MTZBcnJheVdpdGhPbmVBcmd1bWVudDsKKyAgICBjYXNlIFR5cGVJbnQz
MjoKKyAgICAgICAgcmV0dXJuIG9wZXJhdGlvbk5ld0ludDMyQXJyYXlXaXRoT25lQXJndW1lbnQ7
CisgICAgY2FzZSBUeXBlVWludDg6CisgICAgICAgIHJldHVybiBvcGVyYXRpb25OZXdVaW50OEFy
cmF5V2l0aE9uZUFyZ3VtZW50OworICAgIGNhc2UgVHlwZVVpbnQ4Q2xhbXBlZDoKKyAgICAgICAg
cmV0dXJuIG9wZXJhdGlvbk5ld1VpbnQ4Q2xhbXBlZEFycmF5V2l0aE9uZUFyZ3VtZW50OworICAg
IGNhc2UgVHlwZVVpbnQxNjoKKyAgICAgICAgcmV0dXJuIG9wZXJhdGlvbk5ld1VpbnQxNkFycmF5
V2l0aE9uZUFyZ3VtZW50OworICAgIGNhc2UgVHlwZVVpbnQzMjoKKyAgICAgICAgcmV0dXJuIG9w
ZXJhdGlvbk5ld1VpbnQzMkFycmF5V2l0aE9uZUFyZ3VtZW50OworICAgIGNhc2UgVHlwZUZsb2F0
MzI6CisgICAgICAgIHJldHVybiBvcGVyYXRpb25OZXdGbG9hdDMyQXJyYXlXaXRoT25lQXJndW1l
bnQ7CisgICAgY2FzZSBUeXBlRmxvYXQ2NDoKKyAgICAgICAgcmV0dXJuIG9wZXJhdGlvbk5ld0Zs
b2F0NjRBcnJheVdpdGhPbmVBcmd1bWVudDsKKyAgICBjYXNlIE5vdFR5cGVkQXJyYXk6CisgICAg
Y2FzZSBUeXBlRGF0YVZpZXc6CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAwOworfQorCiB9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6REZHCiAKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQ
cmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHJldmlzaW9u
IDE1NDI2MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3Bh
Z2F0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MTQsNiArNDE0LDExIEBAIHByaXZh
dGU6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCisgICAgICAg
IGNhc2UgTmV3VHlwZWRBcnJheTogeworICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0
aW9uKHNwZWN1bGF0aW9uRnJvbVR5cGVkQXJyYXlUeXBlKG5vZGUtPnR5cGVkQXJyYXlUeXBlKCkp
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKICAgICAgICAg
Y2FzZSBOZXdSZWdleHA6CiAgICAgICAgIGNhc2UgQ3JlYXRlQWN0aXZhdGlvbjogewogICAgICAg
ICAgICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0aW9uKFNwZWNPYmplY3RPdGhlcik7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkocmV2aXNpb24g
MTU0MjYyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTIzMSw2ICsyMzEsNyBAQCBib29sIHNhZmVUb0V4ZWN1dGUoQWJz
dHJhY3RTdGF0ZVR5cGUmIHN0CiAgICAgY2FzZSBGb3JjZU9TUkV4aXQ6CiAgICAgY2FzZSBDaGVj
a1dhdGNoZG9nVGltZXI6CiAgICAgY2FzZSBTdHJpbmdGcm9tQ2hhckNvZGU6CisgICAgY2FzZSBO
ZXdUeXBlZEFycmF5OgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgCiAgICAgY2FzZSBH
ZXRCeVZhbDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMTU0MjYyKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzYwMCw2ICszNjAwLDM3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSog
bm9kZSkKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKKyAgICBjYXNlIE5ld1R5cGVk
QXJyYXk6IHsKKyAgICAgICAgc3dpdGNoIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpIHsKKyAg
ICAgICAgY2FzZSBJbnQzMlVzZToKKyAgICAgICAgICAgIGNvbXBpbGVOZXdUeXBlZEFycmF5KG5v
ZGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVW50eXBlZFVzZTogeworICAg
ICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYXJndW1lbnQodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwor
ICAgICAgICAgICAgR1BSUmVnIGFyZ3VtZW50VGFnR1BSID0gYXJndW1lbnQudGFnR1BSKCk7Cisg
ICAgICAgICAgICBHUFJSZWcgYXJndW1lbnRQYXlsb2FkR1BSID0gYXJndW1lbnQucGF5bG9hZEdQ
UigpOworICAgICAgICAgICAgCisgICAgICAgICAgICBmbHVzaFJlZ2lzdGVycygpOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBHUFJSZXN1bHQgcmVzdWx0KHRoaXMpOworICAgICAgICAgICAg
R1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1faml0LmdyYXBoKCkuZ2xvYmFsT2Jq
ZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4pOworICAgICAgICAgICAgY2FsbE9wZXJhdGlvbigKKyAg
ICAgICAgICAgICAgICBvcGVyYXRpb25OZXdUeXBlZEFycmF5V2l0aE9uZUFyZ3VtZW50Rm9yVHlw
ZShub2RlLT50eXBlZEFycmF5VHlwZSgpKSwKKyAgICAgICAgICAgICAgICByZXN1bHRHUFIsIGds
b2JhbE9iamVjdC0+dHlwZWRBcnJheVN0cnVjdHVyZShub2RlLT50eXBlZEFycmF5VHlwZSgpKSwK
KyAgICAgICAgICAgICAgICBhcmd1bWVudFRhZ0dQUiwgYXJndW1lbnRQYXlsb2FkR1BSKTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAogICAgIGNhc2UgTmV3UmVnZXhw
OiB7CiAgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CiAgICAgICAgIEdQUlJlc3VsdCByZXN1bHRQ
YXlsb2FkKHRoaXMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAxNTQyNjIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
NTI3LDYgKzM1MjcsMzYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2Rl
KQogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAorICAgIGNhc2UgTmV3VHlwZWRBcnJh
eTogeworICAgICAgICBzd2l0Y2ggKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgeworICAgICAg
ICBjYXNlIEludDMyVXNlOgorICAgICAgICAgICAgY29tcGlsZU5ld1R5cGVkQXJyYXkobm9kZSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBVbnR5cGVkVXNlOiB7CisgICAgICAg
ICAgICBKU1ZhbHVlT3BlcmFuZCBhcmd1bWVudCh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAg
ICAgICAgICBHUFJSZWcgYXJndW1lbnRHUFIgPSBhcmd1bWVudC5ncHIoKTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgR1BSUmVzdWx0IHJlc3VsdCh0aGlzKTsKKyAgICAgICAgICAgIEdQUlJlZyByZXN1bHRHUFIg
PSByZXN1bHQuZ3ByKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QgPSBtX2ppdC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihub2RlLT5jb2Rl
T3JpZ2luKTsKKyAgICAgICAgICAgIGNhbGxPcGVyYXRpb24oCisgICAgICAgICAgICAgICAgb3Bl
cmF0aW9uTmV3VHlwZWRBcnJheVdpdGhPbmVBcmd1bWVudEZvclR5cGUobm9kZS0+dHlwZWRBcnJh
eVR5cGUoKSksCisgICAgICAgICAgICAgICAgcmVzdWx0R1BSLCBnbG9iYWxPYmplY3QtPnR5cGVk
QXJyYXlTdHJ1Y3R1cmUobm9kZS0+dHlwZWRBcnJheVR5cGUoKSksCisgICAgICAgICAgICAgICAg
YXJndW1lbnRHUFIpOworICAgICAgICAgICAgCisgICAgICAgICAgICBjZWxsUmVzdWx0KHJlc3Vs
dEdQUiwgbm9kZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCiAg
ICAgY2FzZSBOZXdSZWdleHA6IHsKICAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKICAgICAgICAg
R1BSUmVzdWx0IHJlc3VsdCh0aGlzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAxNTQyNjIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDQ0NSw2ICs0NDQ1LDc0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVOZXdTdHJp
bmdPYmoKICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CiB9CiAKK3ZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVOZXdUeXBlZEFycmF5KE5vZGUqIG5vZGUpCit7CisgICAgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG5v
ZGUtPmNvZGVPcmlnaW4pOworICAgIFR5cGVkQXJyYXlUeXBlIHR5cGUgPSBub2RlLT50eXBlZEFy
cmF5VHlwZSgpOworICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gZ2xvYmFsT2JqZWN0LT50eXBl
ZEFycmF5U3RydWN0dXJlKHR5cGUpOworICAgIAorICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5k
IHNpemUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgIEdQUlJlZyBzaXplR1BSID0gc2l6ZS5n
cHIoKTsKKyAgICAKKyAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOworICAgIEdQUlRlbXBv
cmFyeSBzdG9yYWdlKHRoaXMpOworICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOworICAg
IEdQUlRlbXBvcmFyeSBzY3JhdGNoMih0aGlzKTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVz
dWx0LmdwcigpOworICAgIEdQUlJlZyBzdG9yYWdlR1BSID0gc3RvcmFnZS5ncHIoKTsKKyAgICBH
UFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgR1BSUmVnIHNjcmF0Y2gyR1BS
ID0gc2NyYXRjaDIuZ3ByKCk7CisgICAgCisgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IHNsb3dD
YXNlczsKKyAgICAKKyAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaDMyKAorICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6QWJvdmUsIHNpemVHUFIsIFRydXN0ZWRJbW0zMihKU0FycmF5QnVm
ZmVyVmlldzo6ZmFzdFNpemVMaW1pdCkpKTsKKyAgICAKKyAgICBtX2ppdC5tb3ZlKHNpemVHUFIs
IHNjcmF0Y2hHUFIpOworICAgIG1faml0LmxzaGlmdDMyKFRydXN0ZWRJbW0zMihsb2dFbGVtZW50
U2l6ZSh0eXBlKSksIHNjcmF0Y2hHUFIpOworICAgIHNsb3dDYXNlcy5hcHBlbmQoCisgICAgICAg
IGVtaXRBbGxvY2F0ZUJhc2ljU3RvcmFnZShzY3JhdGNoR1BSLCBzdG9yYWdlR1BSKSk7CisgICAg
CisgICAgZW1pdEFsbG9jYXRlSlNPYmplY3Q8SlNBcnJheUJ1ZmZlclZpZXc+KAorICAgICAgICBy
ZXN1bHRHUFIsIEltbVB0cihzdHJ1Y3R1cmUpLCBUcnVzdGVkSW1tUHRyKDApLCBzY3JhdGNoR1BS
LCBzY3JhdGNoR1BSMiwKKyAgICAgICAgc2xvd0Nhc2VzKTsKKyAgICAKKyAgICBtX2ppdC5zdG9y
ZVB0cigKKyAgICAgICAgc3RvcmFnZUdQUiwKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3MocmVzdWx0R1BSLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZWZWN0b3IoKSkpOworICAg
IG1faml0LnN0b3JlMzIoCisgICAgICAgIHNpemVHUFIsCisgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHJlc3VsdEdQUiwgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mTGVuZ3RoKCkp
KTsKKyAgICBtX2ppdC5zdG9yZTMyKAorICAgICAgICBUcnVzdGVkSW1tMzIoRmFzdFR5cGVkQXJy
YXkpLAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIEpTQXJyYXlC
dWZmZXJWaWV3OjpvZmZzZXRPZk1vZGUoKSkpOworICAgIAorI2lmIFVTRShKU1ZBTFVFMzJfNjQp
CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZG9uZSA9IG1faml0LmJyYW5jaFRlc3QzMihNYWNy
b0Fzc2VtYmxlcjo6WmVybywgc2l6ZUdQUik7CisgICAgbV9qaXQubW92ZShzaXplR1BSLCBzY3Jh
dGNoR1BSKTsKKyAgICBpZiAoZWxlbWVudFNpemUodHlwZSkgPiAxKSB7CisgICAgICAgIG1faml0
LmxzaGlmdDMyKFRydXN0ZWRJbW0zMihsb2dFbGVtZW50U2l6ZSh0eXBlKSksIHNjcmF0Y2hHUFIp
OworICAgICAgICBpZiAoZWxlbWVudFNpemUodHlwZSkgPCA0KSB7CisgICAgICAgICAgICBtX2pp
dC5hZGQzMihUcnVzdGVkSW1tMzIoMyksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgbV9qaXQu
dXJzaGlmdDMyKFRydXN0ZWRJbW0zMigyKSwgc2NyYXRjaEdQUik7CisgICAgICAgIH0KKyAgICB9
CisgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGxvb3AgPSBtX2ppdC5sYWJlbCgpOworICAgIG1f
aml0LnN1YjMyKFRydXN0ZWRJbW0zMigxKSwgc2NyYXRjaEdQUik7CisgICAgbV9qaXQuc3RvcmUz
MigKKyAgICAgICAgVHJ1c3RlZEltbTMyKDApLAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QmFz
ZUluZGV4KHN0b3JhZ2VHUFIsIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0ZvdXIp
KTsKKyAgICBtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIHNjcmF0
Y2hHUFIpLmxpbmtUbyhsb29wLCAmbV9qaXQpOworICAgIGRvbmUubGluaygmbV9qaXQpOworI2Vu
ZGlmIC8vIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgCisgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Io
c2xvd1BhdGhDYWxsKAorICAgICAgICBzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9uTmV3VHlwZWRB
cnJheVdpdGhTaXplRm9yVHlwZSh0eXBlKSwKKyAgICAgICAgcmVzdWx0R1BSLCBzdHJ1Y3R1cmUs
IHNpemVHUFIpKTsKKyAgICAKKyAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7Cit9CisK
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZUludDMyKEVkZ2UgZWRnZSkKIHsKICAgICBp
ZiAoIW5lZWRzVHlwZUNoZWNrKGVkZ2UsIFNwZWNJbnQzMikpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lvbiAxNTQyNjIpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHdvcmtpbmcg
Y29weSkKQEAgLTE5MjUsNiArMTkyNSw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGNvbXBpbGVUb1N0
cmluZ09uQ2VsbChOb2RlKik7CiAgICAgdm9pZCBjb21waWxlTmV3U3RyaW5nT2JqZWN0KE5vZGUq
KTsKICAgICAKKyAgICB2b2lkIGNvbXBpbGVOZXdUeXBlZEFycmF5KE5vZGUqKTsKKyAgICAKICAg
ICB2b2lkIGNvbXBpbGVJbnRlZ2VyQ29tcGFyZShOb2RlKiwgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0
aW9uYWxDb25kaXRpb24pOwogICAgIHZvaWQgY29tcGlsZUJvb2xlYW5Db21wYXJlKE5vZGUqLCBN
YWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbik7CiAgICAgdm9pZCBjb21waWxlRG91
YmxlQ29tcGFyZShOb2RlKiwgTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUNvbmRpdGlvbik7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0Nv
bnN0cnVjdG9ySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JJbmxpbmVzLmgJKHJldmlz
aW9uIDE1NDI2MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMCw3
ICsxMDAsNyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgIGlmICgoYnVmZmVyLT5ieXRlTGVuZ3RoKCkgLSBvZmZz
ZXQpICUgVmlld0NsYXNzOjplbGVtZW50U2l6ZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhy
b3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgIkFycmF5QnVmZmVyIGxlbmd0
aCBtaW51cyB0aGUgYnl0ZU9mZnNldCBpcyBub3QgYSBtdWx0aXBsZSBvZiB0aGUgZWxlbWVudCBz
aXplLiIpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0
ZVJhbmdlRXJyb3IoZXhlYywgIkFycmF5QnVmZmVyIGxlbmd0aCBtaW51cyB0aGUgYnl0ZU9mZnNl
dCBpcyBub3QgYSBtdWx0aXBsZSBvZiB0aGUgZWxlbWVudCBzaXplIikpOwogICAgICAgICAgICAg
bGVuZ3RoID0gKGJ1ZmZlci0+Ynl0ZUxlbmd0aCgpIC0gb2Zmc2V0KSAvIFZpZXdDbGFzczo6ZWxl
bWVudFNpemU7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShWaWV3
Q2xhc3M6OmNyZWF0ZShleGVjLCBzdHJ1Y3R1cmUsIGJ1ZmZlciwgb2Zmc2V0LCBsZW5ndGgpKTsK
QEAgLTEzNSwxNSArMTM1LDE1IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGNvbnMKICAgICBpZiAoZXhlYy0+YXJndW1lbnQoMCkuaXNJbnQzMigpKQogICAgICAgICBsZW5n
dGggPSBleGVjLT5hcmd1bWVudCgwKS5hc0ludDMyKCk7CiAgICAgZWxzZSBpZiAoIWV4ZWMtPmFy
Z3VtZW50KDApLmlzTnVtYmVyKCkpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywg
Y3JlYXRlVHlwZUVycm9yKGV4ZWMsICJJbnZhbGlkIGFycmF5IGxlbmd0aCBhcmd1bWVudC4iKSk7
CisgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMs
ICJJbnZhbGlkIGFycmF5IGxlbmd0aCBhcmd1bWVudCIpKTsKICAgICBlbHNlIHsKICAgICAgICAg
bGVuZ3RoID0gc3RhdGljX2Nhc3Q8aW50PihleGVjLT5hcmd1bWVudCgwKS5hc051bWJlcigpKTsK
ICAgICAgICAgaWYgKGxlbmd0aCAhPSBleGVjLT5hcmd1bWVudCgwKS5hc051bWJlcigpKQotICAg
ICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywg
IkludmFsaWQgYXJyYXkgbGVuZ3RoIGFyZ3VtZW50IChmcmFjdGlvbmFsIGxlbmd0aHMgbm90IGFs
bG93ZWQpLiIpKTsKKyAgICAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRl
VHlwZUVycm9yKGV4ZWMsICJJbnZhbGlkIGFycmF5IGxlbmd0aCBhcmd1bWVudCAoZnJhY3Rpb25h
bCBsZW5ndGhzIG5vdCBhbGxvd2VkKSIpKTsKICAgICB9CiAKICAgICBpZiAobGVuZ3RoIDwgMCkK
LSAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVSYW5nZUVycm9yKGV4ZWMs
ICJSZXF1ZXN0ZWQgbGVuZ3RoIGlzIG5lZ2F0aXZlLiIpKTsKKyAgICAgICAgcmV0dXJuIHRocm93
Vk1FcnJvcihleGVjLCBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsICJSZXF1ZXN0ZWQgbGVuZ3RoIGlz
IG5lZ2F0aXZlIikpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoVmlld0NsYXNzOjpjcmVh
dGUoZXhlYywgc3RydWN0dXJlLCBsZW5ndGgpKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJheVR5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlUeXBlLmNwcAkocmV2aXNpb24gMTU0MjYy
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJheVR5cGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiVHlwZWRBcnJheVR5cGUu
aCIKIAogI2luY2x1ZGUgIkpTRGF0YVZpZXcuaCIKKyNpbmNsdWRlICJKU1R5cGVkQXJyYXlDb25z
dHJ1Y3RvcnMuaCIKICNpbmNsdWRlICJKU1R5cGVkQXJyYXlzLmgiCiAKIG5hbWVzcGFjZSBKU0Mg
ewpAQCAtNjEsNiArNjIsMzYgQEAgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm9Gb3JUeXBlKFR5
cGVkQQogICAgIHJldHVybiAwOwogfQogCitjb25zdCBDbGFzc0luZm8qIGNvbnN0cnVjdG9yQ2xh
c3NJbmZvRm9yVHlwZShUeXBlZEFycmF5VHlwZSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkg
eworICAgIGNhc2UgTm90VHlwZWRBcnJheToKKyAgICAgICAgcmV0dXJuIDA7CisgICAgY2FzZSBU
eXBlSW50ODoKKyAgICAgICAgcmV0dXJuIEpTSW50OEFycmF5Q29uc3RydWN0b3I6OmluZm8oKTsK
KyAgICBjYXNlIFR5cGVVaW50ODoKKyAgICAgICAgcmV0dXJuIEpTVWludDhBcnJheUNvbnN0cnVj
dG9yOjppbmZvKCk7CisgICAgY2FzZSBUeXBlVWludDhDbGFtcGVkOgorICAgICAgICByZXR1cm4g
SlNVaW50OENsYW1wZWRBcnJheUNvbnN0cnVjdG9yOjppbmZvKCk7CisgICAgY2FzZSBUeXBlSW50
MTY6CisgICAgICAgIHJldHVybiBKU0ludDE2QXJyYXlDb25zdHJ1Y3Rvcjo6aW5mbygpOworICAg
IGNhc2UgVHlwZVVpbnQxNjoKKyAgICAgICAgcmV0dXJuIEpTVWludDE2QXJyYXlDb25zdHJ1Y3Rv
cjo6aW5mbygpOworICAgIGNhc2UgVHlwZUludDMyOgorICAgICAgICByZXR1cm4gSlNJbnQzMkFy
cmF5Q29uc3RydWN0b3I6OmluZm8oKTsKKyAgICBjYXNlIFR5cGVVaW50MzI6CisgICAgICAgIHJl
dHVybiBKU1VpbnQzMkFycmF5Q29uc3RydWN0b3I6OmluZm8oKTsKKyAgICBjYXNlIFR5cGVGbG9h
dDMyOgorICAgICAgICByZXR1cm4gSlNGbG9hdDMyQXJyYXlDb25zdHJ1Y3Rvcjo6aW5mbygpOwor
ICAgIGNhc2UgVHlwZUZsb2F0NjQ6CisgICAgICAgIHJldHVybiBKU0Zsb2F0NjRBcnJheUNvbnN0
cnVjdG9yOjppbmZvKCk7CisgICAgY2FzZSBUeXBlRGF0YVZpZXc6CisgICAgICAgIHJldHVybiBK
U0RhdGFWaWV3Q29uc3RydWN0b3I6OmluZm8oKTsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAK
IG5hbWVzcGFjZSBXVEYgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlw
ZWRBcnJheVR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9UeXBlZEFycmF5VHlwZS5oCShyZXZpc2lvbiAxNTQyNjIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9UeXBlZEFycmF5VHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Myw2ICs1
MywxMyBAQCBpbmxpbmUgdW5zaWduZWQgdG9JbmRleChUeXBlZEFycmF5VHlwZSB0CiAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPih0eXBlKSAtIDE7CiB9CiAKK2lubGluZSBUeXBlZEFy
cmF5VHlwZSBpbmRleFRvVHlwZWRBcnJheVR5cGUodW5zaWduZWQgaW5kZXgpCit7CisgICAgVHlw
ZWRBcnJheVR5cGUgcmVzdWx0ID0gc3RhdGljX2Nhc3Q8VHlwZWRBcnJheVR5cGU+KGluZGV4ICsg
MSk7CisgICAgQVNTRVJUKHJlc3VsdCA+PSBUeXBlSW50OCAmJiByZXN1bHQgPD0gVHlwZURhdGFW
aWV3KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiBpbmxpbmUgYm9vbCBpc1R5cGVkVmlldyhU
eXBlZEFycmF5VHlwZSB0eXBlKQogewogICAgIHN3aXRjaCAodHlwZSkgewpAQCAtOTQsNiArMTAx
LDcgQEAgaW5saW5lIHNpemVfdCBlbGVtZW50U2l6ZShUeXBlZEFycmF5VHlwZQogfQogCiBjb25z
dCBDbGFzc0luZm8qIGNsYXNzSW5mb0ZvclR5cGUoVHlwZWRBcnJheVR5cGUpOworY29uc3QgQ2xh
c3NJbmZvKiBjb25zdHJ1Y3RvckNsYXNzSW5mb0ZvclR5cGUoVHlwZWRBcnJheVR5cGUpOwogCiBp
bmxpbmUgYm9vbCBpc0ludChUeXBlZEFycmF5VHlwZSB0eXBlKQogewo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>209245</attachid>
            <date>2013-08-20 18:37:26 -0700</date>
            <delta_ts>2013-08-20 20:35:25 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>58952</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU0Mzc3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg2IEBA
CisyMDEzLTA4LTIwICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIHNob3VsZCBpbmxpbmUgbmV3IHR5cGVkQXJyYXkoKQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIwMDIyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBBZGRzIGlubGluaW5nIG9mIHR5cGVk
IGFycmF5IGFsbG9jYXRpb25zIGluIHRoZSBERkcuIEFueSBvcGVyYXRpb24gb2YgdGhlCisgICAg
ICAgIGZvcm06CisgICAgICAgIAorICAgICAgICAgICAgbmV3IGZvbyhibGFoKQorICAgICAgICAK
KyAgICAgICAgb3I6CisgICAgICAgIAorICAgICAgICAgICAgZm9vKGJsYWgpCisgICAgICAgIAor
ICAgICAgICB3aGVyZSAnZm9vJyBpcyBhIHR5cGVkIGFycmF5IGNvbnN0cnVjdG9yIGFuZCAnYmxh
aCcgaXMgZXhhY3RseSBvbmUgYXJndW1lbnQsCisgICAgICAgIGlzIHR1cm5lZCBpbnRvIHRoZSBO
ZXdUeXBlZEFycmF5IGludHJpbnNpYy4gTGF0ZXIsIG9mIGNoaWxkMSAoaS5lLiAnYmxhaCcpCisg
ICAgICAgIGlzIHByZWRpY3RlZCBpbnRlZ2VyLCB3ZSBnZW5lcmF0ZSBpbmxpbmUgY29kZSBmb3Ig
YW4gYWxsb2NhdGlvbi4gT3RoZXJ3aXNlCisgICAgICAgIGl0IHR1cm5zIGludG8gYSBjYWxsIHRv
IGFuIG9wZXJhdGlvbiB0aGF0IGJlaGF2ZXMgbGlrZSB0aGUgY29uc3RydWN0b3Igd291bGQKKyAg
ICAgICAgaWYgaXQgd2FzIHBhc3NlZCBvbmUgYXJndW1lbnQgKGkuZS4gaXQgbWF5IHdyYXAgYSBi
dWZmZXIgb3IgaXQgbWF5IGNyZWF0ZSBhCisgICAgICAgIGNvcHkgb3IgYW5vdGhlciBhcnJheSwg
b3IgaXQgbWF5IGFsbG9jYXRlIGFuIGFycmF5IG9mIHRoYXQgbGVuZ3RoKS4KKworICAgICAgICAq
IGJ5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmNwcDoKKyAgICAgICAgKEpTQzo6c3BlY3VsYXRpb25G
cm9tVHlwZWRBcnJheVR5cGUpOgorICAgICAgICAoSlNDOjpzcGVjdWxhdGlvbkZyb21DbGFzc0lu
Zm8pOgorICAgICAgICAqIGJ5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmg6CisgICAgICAgICogZGZn
L0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkRGRzo6Ojpl
eGVjdXRlRWZmZWN0cyk6CisgICAgICAgICogZGZnL0RGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhh
c2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2U6OnBy
b3BhZ2F0ZSk6CisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlVHlwZWRBcnJheUNvbnN0cnVjdG9yKToK
KyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlQ29uc3RhbnRJbnRlcm5h
bEZ1bmN0aW9uKToKKyAgICAgICAgKiBkZmcvREZHQ0NhbGxIZWxwZXJzLmg6CisgICAgICAgIChK
U0M6OkRGRzo6Q0NhbGxIZWxwZXJzOjpzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUpOgorICAg
ICAgICAqIGRmZy9ERkdDU0VQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6
OnB1dFN0cnVjdHVyZVN0b3JlRWxpbWluYXRpb24pOgorICAgICAgICAqIGRmZy9ERkdDbG9iYmVy
aXplLmg6CisgICAgICAgIChKU0M6OkRGRzo6Y2xvYmJlcml6ZSk6CisgICAgICAgICogZGZnL0RG
R0ZpeHVwUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OmZpeHVwTm9k
ZSk6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFw
aDo6ZHVtcCk6CisgICAgICAgICogZGZnL0RGR05vZGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpO
b2RlOjpoYXNUeXBlZEFycmF5VHlwZSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6dHlwZWRB
cnJheVR5cGUpOgorICAgICAgICAqIGRmZy9ERkdOb2RlVHlwZS5oOgorICAgICAgICAqIGRmZy9E
RkdPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpuZXdUeXBlZEFycmF5V2l0aFNp
emUpOgorICAgICAgICAoSlNDOjpERkc6Om5ld1R5cGVkQXJyYXlXaXRoT25lQXJndW1lbnQpOgor
ICAgICAgICAqIGRmZy9ERkdPcGVyYXRpb25zLmg6CisgICAgICAgIChKU0M6OkRGRzo6b3BlcmF0
aW9uTmV3VHlwZWRBcnJheVdpdGhTaXplRm9yVHlwZSk6CisgICAgICAgIChKU0M6OkRGRzo6b3Bl
cmF0aW9uTmV3VHlwZWRBcnJheVdpdGhPbmVBcmd1bWVudEZvclR5cGUpOgorICAgICAgICAqIGRm
Zy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
UHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2U6OnByb3BhZ2F0ZSk6CisgICAgICAgICogZGZnL0RG
R1NhZmVUb0V4ZWN1dGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpzYWZlVG9FeGVjdXRlKToKKyAg
ICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpjb21waWxlTmV3VHlwZWRBcnJheSk6CisgICAgICAgICogZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmg6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNhbGxP
cGVyYXRpb24pOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZn
L0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZl
SklUOjpjb21waWxlKToKKyAgICAgICAgKiBqaXQvSklUT3Bjb2Rlcy5jcHA6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9uZXdfb2JqZWN0KToKKyAgICAgICAgKiBqaXQvSklUT3Bjb2RlczMy
XzY0LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX25ld19vYmplY3QpOgorICAgICAg
ICAqIHJ1bnRpbWUvSlNBcnJheS5oOgorICAgICAgICAoSlNDOjpKU0FycmF5OjphbGxvY2F0aW9u
U2l6ZSk6CisgICAgICAgICogcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5oOgorICAgICAgICAo
SlNDOjpKU0FycmF5QnVmZmVyVmlldzo6YWxsb2NhdGlvblNpemUpOgorICAgICAgICAqIHJ1bnRp
bWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcklubGluZXMuaDoKKyAgICAgICAg
KEpTQzo6Y29uc3RydWN0R2VuZXJpY1R5cGVkQXJyYXlWaWV3KToKKyAgICAgICAgKiBydW50aW1l
L0pTT2JqZWN0Lmg6CisgICAgICAgIChKU0M6OkpTRmluYWxPYmplY3Q6OmFsbG9jYXRpb25TaXpl
KToKKyAgICAgICAgKiBydW50aW1lL1R5cGVkQXJyYXlUeXBlLmNwcDoKKyAgICAgICAgKEpTQzo6
Y29uc3RydWN0b3JDbGFzc0luZm9Gb3JUeXBlKToKKyAgICAgICAgKiBydW50aW1lL1R5cGVkQXJy
YXlUeXBlLmg6CisgICAgICAgIChKU0M6OmluZGV4VG9UeXBlZEFycmF5VHlwZSk6CisKIDIwMTMt
MDgtMjAgIEdhdmluIEJhcnJhY2xvdWdoICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgogCiAgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjAwOTMKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmNw
cAkocmV2aXNpb24gMTU0Mzc3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Nw
ZWN1bGF0ZWRUeXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ5LDI0ICsyNDksOSBAQCB2b2lk
IGR1bXBTcGVjdWxhdGlvbkFiYnJldmlhdGVkKFByaW50U3RyCiAgICAgb3V0LnByaW50KHNwZWN1
bGF0aW9uVG9BYmJyZXZpYXRlZFN0cmluZyh2YWx1ZSkpOwogfQogCi1TcGVjdWxhdGVkVHlwZSBz
cGVjdWxhdGlvbkZyb21DbGFzc0luZm8oY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8pCitTcGVj
dWxhdGVkVHlwZSBzcGVjdWxhdGlvbkZyb21UeXBlZEFycmF5VHlwZShUeXBlZEFycmF5VHlwZSB0
eXBlKQogewotICAgIGlmIChjbGFzc0luZm8gPT0gSlNGaW5hbE9iamVjdDo6aW5mbygpKQotICAg
ICAgICByZXR1cm4gU3BlY0ZpbmFsT2JqZWN0OwotICAgIAotICAgIGlmIChjbGFzc0luZm8gPT0g
SlNBcnJheTo6aW5mbygpKQotICAgICAgICByZXR1cm4gU3BlY0FycmF5OwotICAgIAotICAgIGlm
IChjbGFzc0luZm8gPT0gQXJndW1lbnRzOjppbmZvKCkpCi0gICAgICAgIHJldHVybiBTcGVjQXJn
dW1lbnRzOwotICAgIAotICAgIGlmIChjbGFzc0luZm8gPT0gU3RyaW5nT2JqZWN0OjppbmZvKCkp
Ci0gICAgICAgIHJldHVybiBTcGVjU3RyaW5nT2JqZWN0OwotICAgIAotICAgIGlmIChjbGFzc0lu
Zm8tPmlzU3ViQ2xhc3NPZihKU0Z1bmN0aW9uOjppbmZvKCkpKQotICAgICAgICByZXR1cm4gU3Bl
Y0Z1bmN0aW9uOwotICAgIAotICAgIHN3aXRjaCAoY2xhc3NJbmZvLT50eXBlZEFycmF5U3RvcmFn
ZVR5cGUpIHsKKyAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICBjYXNlIFR5cGVJbnQ4OgogICAgICAg
ICByZXR1cm4gU3BlY0ludDhBcnJheTsKICAgICBjYXNlIFR5cGVJbnQxNjoKQEAgLTI4NSw5ICsy
NzAsMzIgQEAgU3BlY3VsYXRlZFR5cGUgc3BlY3VsYXRpb25Gcm9tQ2xhc3NJbmZvKAogICAgICAg
ICByZXR1cm4gU3BlY0Zsb2F0MzJBcnJheTsKICAgICBjYXNlIFR5cGVGbG9hdDY0OgogICAgICAg
ICByZXR1cm4gU3BlY0Zsb2F0NjRBcnJheTsKLSAgICBkZWZhdWx0OgorICAgIGNhc2UgTm90VHlw
ZWRBcnJheToKKyAgICBjYXNlIFR5cGVEYXRhVmlldzoKICAgICAgICAgYnJlYWs7CiAgICAgfQor
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK1NwZWN1bGF0ZWRUeXBlIHNw
ZWN1bGF0aW9uRnJvbUNsYXNzSW5mbyhjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbykKK3sKKyAg
ICBpZiAoY2xhc3NJbmZvID09IEpTRmluYWxPYmplY3Q6OmluZm8oKSkKKyAgICAgICAgcmV0dXJu
IFNwZWNGaW5hbE9iamVjdDsKKyAgICAKKyAgICBpZiAoY2xhc3NJbmZvID09IEpTQXJyYXk6Omlu
Zm8oKSkKKyAgICAgICAgcmV0dXJuIFNwZWNBcnJheTsKKyAgICAKKyAgICBpZiAoY2xhc3NJbmZv
ID09IEFyZ3VtZW50czo6aW5mbygpKQorICAgICAgICByZXR1cm4gU3BlY0FyZ3VtZW50czsKKyAg
ICAKKyAgICBpZiAoY2xhc3NJbmZvID09IFN0cmluZ09iamVjdDo6aW5mbygpKQorICAgICAgICBy
ZXR1cm4gU3BlY1N0cmluZ09iamVjdDsKKyAgICAKKyAgICBpZiAoY2xhc3NJbmZvLT5pc1N1YkNs
YXNzT2YoSlNGdW5jdGlvbjo6aW5mbygpKSkKKyAgICAgICAgcmV0dXJuIFNwZWNGdW5jdGlvbjsK
KyAgICAKKyAgICBpZiAoaXNUeXBlZFZpZXcoY2xhc3NJbmZvLT50eXBlZEFycmF5U3RvcmFnZVR5
cGUpKQorICAgICAgICByZXR1cm4gc3BlY3VsYXRpb25Gcm9tVHlwZWRBcnJheVR5cGUoY2xhc3NJ
bmZvLT50eXBlZEFycmF5U3RvcmFnZVR5cGUpOwogICAgIAogICAgIGlmIChjbGFzc0luZm8tPmlz
U3ViQ2xhc3NPZihKU09iamVjdDo6aW5mbygpKSkKICAgICAgICAgcmV0dXJuIFNwZWNPYmplY3RP
dGhlcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlw
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxh
dGVkVHlwZS5oCShyZXZpc2lvbiAxNTQzNzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvU3BlY3VsYXRlZFR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzMyLDYgKzMzMiw3IEBA
IFNwZWN1bGF0ZWRUeXBlIHNwZWN1bGF0aW9uRnJvbVN0cnVjdHVyZSgKIFNwZWN1bGF0ZWRUeXBl
IHNwZWN1bGF0aW9uRnJvbUNlbGwoSlNDZWxsKik7CiBTcGVjdWxhdGVkVHlwZSBzcGVjdWxhdGlv
bkZyb21WYWx1ZShKU1ZhbHVlKTsKIAorU3BlY3VsYXRlZFR5cGUgc3BlY3VsYXRpb25Gcm9tVHlw
ZWRBcnJheVR5cGUoVHlwZWRBcnJheVR5cGUpOyAvLyBvbmx5IHZhbGlkIGZvciB0eXBlZCB2aWV3
cy4KIFR5cGVkQXJyYXlUeXBlIHR5cGVkQXJyYXlUeXBlRnJvbVNwZWN1bGF0aW9uKFNwZWN1bGF0
ZWRUeXBlKTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCShy
ZXZpc2lvbiAxNTQzNzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0
SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNDMsNiArMTA0MywyNCBA
QCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIGZvck5v
ZGUobm9kZSkuc2V0VHlwZShTcGVjQXJyYXkpOwogICAgICAgICBtX3N0YXRlLnNldEhhdmVTdHJ1
Y3R1cmVzKHRydWUpOwogICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgY2FzZSBOZXdUeXBl
ZEFycmF5OgorICAgICAgICBzd2l0Y2ggKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgeworICAg
ICAgICBjYXNlIEludDMyVXNlOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVW50
eXBlZFVzZToKKyAgICAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5jb2RlT3JpZ2luLCBjbG9i
YmVyTGltaXQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoCisgICAgICAgICAgICBtX2dyYXBo
LAorICAgICAgICAgICAgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+Y29kZU9yaWdpbikt
PnR5cGVkQXJyYXlTdHJ1Y3R1cmUoCisgICAgICAgICAgICAgICAgbm9kZS0+dHlwZWRBcnJheVR5
cGUoKSkpOworICAgICAgICBtX3N0YXRlLnNldEhhdmVTdHJ1Y3R1cmVzKHRydWUpOworICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNhc2UgTmV3UmVnZXhwOgogICAgICAgICBmb3JO
b2RlKG5vZGUpLnNldChtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5jb2Rl
T3JpZ2luKS0+cmVnRXhwU3RydWN0dXJlKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuY3BwCShy
ZXZpc2lvbiAxNTQzNzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0JhY2t3YXJk
c1Byb3BhZ2F0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMjQsNiArMzI0LDE0IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCisg
ICAgICAgIGNhc2UgTmV3VHlwZWRBcnJheTogeworICAgICAgICAgICAgLy8gTmVnYXRpdmUgemVy
byBpcyBub3Qgb2JzZXJ2YWJsZS4gTmFOIHZlcnN1cyB1bmRlZmluZWQgYXJlIG9ubHkgb2JzZXJ2
YWJsZQorICAgICAgICAgICAgLy8gaW4gdGhhdCB5b3Ugd291bGQgZ2V0IGEgZGlmZmVyZW50IGV4
Y2VwdGlvbiBtZXNzYWdlLiBTbywgbGlrZSwgd2hhdGV2ZXI6IHdlCisgICAgICAgICAgICAvLyBj
bGFpbSBoZXJlIHRoYXQgTmFOIHYuIHVuZGVmaW5lZCBpcyBvYnNlcnZhYmxlLgorICAgICAgICAg
ICAgbm9kZS0+Y2hpbGQxKCktPm1lcmdlRmxhZ3MoTm9kZVVzZWRBc0ludCB8IE5vZGVVc2VkQXNO
dW1iZXIgfCBOb2RlVXNlZEFzT3RoZXIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgICAgIAogICAgICAgICBjYXNlIFN0cmluZ0NoYXJBdDogewogICAgICAgICAgICAg
bm9kZS0+Y2hpbGQxKCktPm1lcmdlRmxhZ3MoTm9kZVVzZWRBc1ZhbHVlKTsKICAgICAgICAgICAg
IG5vZGUtPmNoaWxkMigpLT5tZXJnZUZsYWdzKE5vZGVVc2VkQXNWYWx1ZSB8IE5vZGVVc2VkQXNJ
bnQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBh
cnNlci5jcHAJKHJldmlzaW9uIDE1NDM3NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjgsNiArMTY4LDcgQEAg
cHJpdmF0ZToKICAgICBib29sIGhhbmRsZUlubGluaW5nKE5vZGUqIGNhbGxUYXJnZXROb2RlLCBp
bnQgcmVzdWx0T3BlcmFuZCwgY29uc3QgQ2FsbExpbmtTdGF0dXMmLCBpbnQgcmVnaXN0ZXJPZmZz
ZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgdW5zaWduZWQgbmV4dE9mZnNldCwg
Q29kZVNwZWNpYWxpemF0aW9uS2luZCk7CiAgICAgLy8gSGFuZGxlIGludHJpbnNpYyBmdW5jdGlv
bnMuIFJldHVybiB0cnVlIGlmIGl0IHN1Y2NlZWRlZCwgZmFsc2UgaWYgd2UgbmVlZCB0byBwbGFu
dCBhIGNhbGwuCiAgICAgYm9vbCBoYW5kbGVJbnRyaW5zaWMoaW50IHJlc3VsdE9wZXJhbmQsIElu
dHJpbnNpYywgaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMsIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24pOworICAgIGJvb2wgaGFuZGxlVHlwZWRBcnJh
eUNvbnN0cnVjdG9yKGludCByZXN1bHRPcGVyYW5kLCBJbnRlcm5hbEZ1bmN0aW9uKiwgaW50IHJl
Z2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIFR5cGVkQXJyYXlU
eXBlIHR5cGUpOwogICAgIGJvb2wgaGFuZGxlQ29uc3RhbnRJbnRlcm5hbEZ1bmN0aW9uKGludCBy
ZXN1bHRPcGVyYW5kLCBJbnRlcm5hbEZ1bmN0aW9uKiwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQg
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24sIENv
ZGVTcGVjaWFsaXphdGlvbktpbmQpOwogICAgIE5vZGUqIGhhbmRsZVB1dEJ5T2Zmc2V0KE5vZGUq
IGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXIsIFByb3BlcnR5T2Zmc2V0LCBOb2RlKiB2YWx1ZSk7
CiAgICAgTm9kZSogaGFuZGxlR2V0QnlPZmZzZXQoU3BlY3VsYXRlZFR5cGUsIE5vZGUqIGJhc2Us
IHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFByb3BlcnR5T2Zmc2V0KTsKQEAgLTE1ODgsNiAr
MTU4OSw1OCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5zaWMoaW50CiAgICAg
fQogfQogCitib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVUeXBlZEFycmF5Q29uc3RydWN0b3Io
CisgICAgaW50IHJlc3VsdE9wZXJhbmQsIEludGVybmFsRnVuY3Rpb24qIGZ1bmN0aW9uLCBpbnQg
cmVnaXN0ZXJPZmZzZXQsCisgICAgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBUeXBl
ZEFycmF5VHlwZSB0eXBlKQoreworICAgIGlmICghaXNUeXBlZFZpZXcodHlwZSkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBpZiAoZnVuY3Rpb24tPmNsYXNzSW5mbygpICE9IGNv
bnN0cnVjdG9yQ2xhc3NJbmZvRm9yVHlwZSh0eXBlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIAorICAgIGlmIChmdW5jdGlvbi0+Z2xvYmFsT2JqZWN0KCkgIT0gbV9pbmxpbmVTdGFja1Rv
cC0+bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgCisgICAgLy8gV2Ugb25seSBoYXZlIGFuIGludHJpbnNpYyBmb3IgdGhlIGNhc2Ugd2hlcmUg
eW91IHNheToKKyAgICAvLworICAgIC8vIG5ldyBGb29BcnJheShibGFoKTsKKyAgICAvLworICAg
IC8vIE9mIGNvdXJzZSwgJ2JsYWgnIGNvdWxkIGJlIGFueSBvZiB0aGUgZm9sbG93aW5nOgorICAg
IC8vCisgICAgLy8gLSBJbnRlZ2VyLCBpbmRpY2F0aW5nIHRoYXQgeW91IHdhbnQgdG8gYWxsb2Nh
dGUgYW4gYXJyYXkgb2YgdGhhdCBsZW5ndGguCisgICAgLy8gICBUaGlzIGlzIHRoZSB0aGluZyB3
ZSdyZSBob3BpbmcgZm9yLCBhbmQgd2hhdCB3ZSBjYW4gYWN0dWFsbHkgZG8gbWVhbmluZ2Z1bAor
ICAgIC8vICAgb3B0aW1pemF0aW9ucyBmb3IuCisgICAgLy8KKyAgICAvLyAtIEFycmF5IGJ1ZmZl
ciwgaW5kaWNhdGluZyB0aGF0IHlvdSB3YW50IHRvIGNyZWF0ZSBhIHZpZXcgb250byB0aGF0IF9l
bnRpcmVfCisgICAgLy8gICBidWZmZXIuCisgICAgLy8KKyAgICAvLyAtIE5vbi1idWZmZXIgb2Jq
ZWN0LCBpbmRpY2F0aW5nIHRoYXQgeW91IHdhbnQgdG8gY3JlYXRlIGEgY29weSBvZiB0aGF0Cisg
ICAgLy8gICBvYmplY3QgYnkgcHJldGVuZGluZyB0aGF0IGl0IHF1YWNrcyBsaWtlIGFuIGFycmF5
LgorICAgIC8vCisgICAgLy8gLSBBbnl0aGluZyBlbHNlLCBpbmRpY2F0aW5nIHRoYXQgeW91IHdh
bnQgdG8gaGF2ZSBhbiBleGNlcHRpb24gdGhyb3duIGF0CisgICAgLy8gICB5b3UuCisgICAgLy8K
KyAgICAvLyBUaGUgaW50cmluc2ljLCBOZXdUeXBlZEFycmF5LCB3aWxsIGJlaGF2ZSBhcyBpZiBp
dCBjb3VsZCBkbyBhbnkgb2YgdGhlc2UKKyAgICAvLyB0aGluZ3MgdXAgdW50aWwgd2UgZG8gRml4
dXAuIFRoZXJlYWZ0ZXIsIGlmIGNoaWxkMSAoaS5lLiAnYmxhaCcpIGlzCisgICAgLy8gcHJlZGlj
dGVkIEludDMyLCB0aGVuIHdlIGxvY2sgaXQgaW4gYXMgYSBub3JtYWwgdHlwZWQgYXJyYXkgYWxs
b2NhdGlvbi4KKyAgICAvLyBPdGhlcndpc2UsIE5ld1R5cGVkQXJyYXkgdHVybnMgaW50byBhIHRv
dGFsbHkgb3BhcXVlIGZ1bmN0aW9uIGNhbGwgdGhhdAorICAgIC8vIG1heSBjbG9iYmVyIHRoZSB3
b3JsZCAtIGJ5IHZpcnR1ZSBvZiBpdCBhY2Nlc3NpbmcgcHJvcGVydGllcyBvbiB3aGF0IGNvdWxk
CisgICAgLy8gYmUgYW4gb2JqZWN0LgorICAgIC8vCisgICAgLy8gTm90ZSB0aGF0IGFsdGhvdWdo
IHRoZSBnZW5lcmljIGZvcm0gb2YgTmV3VHlwZWRBcnJheSBzb3VuZHMgc29ydCBvZiBhd2Z1bCwK
KyAgICAvLyBpdCBpcyBhY3R1YWxseSBxdWl0ZSBsaWtlbHkgdG8gYmUgbW9yZSBlZmZpY2llbnQg
dGhhbiBhIGZ1bGx5IGdlbmVyaWMKKyAgICAvLyBDb25zdHJ1Y3QuIFNvLCB3ZSBtaWdodCB3YW50
IHRvIHRoaW5rIGFib3V0IG1ha2luZyBOZXdUeXBlZEFycmF5IHZhcmlhZGljLAorICAgIC8vIG9y
IGVsc2UgbWFraW5nIENvbnN0cnVjdCBub3Qgc3VwZXIgc2xvdy4KKyAgICAKKyAgICBpZiAoYXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgIT0gMikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IAorICAgIHNldChyZXN1bHRPcGVyYW5kLAorICAgICAgICBhZGRUb0dyYXBoKE5ld1R5cGVkQXJy
YXksIE9wSW5mbyh0eXBlKSwgZ2V0KHJlZ2lzdGVyT2Zmc2V0ICsgYXJndW1lbnRUb09wZXJhbmQo
MSkpKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRs
ZUNvbnN0YW50SW50ZXJuYWxGdW5jdGlvbigKICAgICBpbnQgcmVzdWx0T3BlcmFuZCwgSW50ZXJu
YWxGdW5jdGlvbiogZnVuY3Rpb24sIGludCByZWdpc3Rlck9mZnNldCwKICAgICBpbnQgYXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMsIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24sIENvZGVTcGVj
aWFsaXphdGlvbktpbmQga2luZCkKQEAgLTE2MTYsNyArMTY2OSw5IEBAIGJvb2wgQnl0ZUNvZGVQ
YXJzZXI6OmhhbmRsZUNvbnN0YW50SW50ZXIKICAgICAgICAgc2V0KHJlc3VsdE9wZXJhbmQsCiAg
ICAgICAgICAgICBhZGRUb0dyYXBoKE5vZGU6OlZhckFyZywgTmV3QXJyYXksIE9wSW5mbyhBcnJh
eVdpdGhVbmRlY2lkZWQpLCBPcEluZm8oMCkpKTsKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
fSBlbHNlIGlmIChmdW5jdGlvbi0+Y2xhc3NJbmZvKCkgPT0gU3RyaW5nQ29uc3RydWN0b3I6Omlu
Zm8oKSkgeworICAgIH0KKyAgICAKKyAgICBpZiAoZnVuY3Rpb24tPmNsYXNzSW5mbygpID09IFN0
cmluZ0NvbnN0cnVjdG9yOjppbmZvKCkpIHsKICAgICAgICAgTm9kZSogcmVzdWx0OwogICAgICAg
ICAKICAgICAgICAgaWYgKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIDw9IDEpCkBAIC0xNjMx
LDYgKzE2ODYsMTMgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlQ29uc3RhbnRJbnRlcgog
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgCisgICAgZm9yICh1bnNpZ25lZCB0eXBl
SW5kZXggPSAwOyB0eXBlSW5kZXggPCBOVU1CRVJfT0ZfVFlQRURfQVJSQVlfVFlQRVM7ICsrdHlw
ZUluZGV4KSB7CisgICAgICAgIGlmIChoYW5kbGVUeXBlZEFycmF5Q29uc3RydWN0b3IoCisgICAg
ICAgICAgICAgICAgcmVzdWx0T3BlcmFuZCwgZnVuY3Rpb24sIHJlZ2lzdGVyT2Zmc2V0LCBhcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcywKKyAgICAgICAgICAgICAgICBpbmRleFRvVHlwZWRBcnJh
eVR5cGUodHlwZUluZGV4KSkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAg
CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0NDYWxsSGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ0NhbGxIZWxwZXJzLmgJKHJldmlzaW9uIDE1NDM3NykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ0NhbGxIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTIyOCw2ICsy
MjgsMTUgQEAgcHVibGljOgogICAgICAgICBhZGRDYWxsQXJndW1lbnQoYXJnMyk7CiAgICAgfQog
CisgICAgQUxXQVlTX0lOTElORSB2b2lkIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVz
dGVkSW1tUHRyIGFyZzEsIEdQUlJlZyBhcmcyLCBHUFJSZWcgYXJnMykKKyAgICB7CisgICAgICAg
IHJlc2V0Q2FsbEFyZ3VtZW50cygpOworICAgICAgICBhZGRDYWxsQXJndW1lbnQoR1BSSW5mbzo6
Y2FsbEZyYW1lUmVnaXN0ZXIpOworICAgICAgICBhZGRDYWxsQXJndW1lbnQoYXJnMSk7CisgICAg
ICAgIGFkZENhbGxBcmd1bWVudChhcmcyKTsKKyAgICAgICAgYWRkQ2FsbEFyZ3VtZW50KGFyZzMp
OworICAgIH0KKwogICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXR1cEFyZ3VtZW50c1dpdGhFeGVj
U3RhdGUoVHJ1c3RlZEltbVB0ciBhcmcxLCBUcnVzdGVkSW1tUHRyIGFyZzIsIFRydXN0ZWRJbW1Q
dHIgYXJnMykKICAgICB7CiAgICAgICAgIHJlc2V0Q2FsbEFyZ3VtZW50cygpOwpAQCAtODQ3LDYg
Kzg1NiwxMyBAQCBwdWJsaWM6CiAgICAgICAgIG1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0
ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CiAgICAgfQogCisgICAgQUxXQVlTX0lOTElORSB2
b2lkIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyIGFyZzEsIEdQUlJl
ZyBhcmcyLCBHUFJSZWcgYXJnMykKKyAgICB7CisgICAgICAgIHNldHVwVHdvU3R1YkFyZ3M8R1BS
SW5mbzo6YXJndW1lbnRHUFIyLCBHUFJJbmZvOjphcmd1bWVudEdQUjM+KGFyZzIsIGFyZzMpOwor
ICAgICAgICBtb3ZlKGFyZzEsIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgICAgIG1vdmUo
R1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAg
fQorCiAgICAgQUxXQVlTX0lOTElORSB2b2lkIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShU
cnVzdGVkSW1tUHRyIGFyZzEsIFRydXN0ZWRJbW1QdHIgYXJnMiwgVHJ1c3RlZEltbVB0ciBhcmcz
KQogICAgIHsKICAgICAgICAgbW92ZShhcmcxLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAJKHJldmlzaW9uIDE1
NDM3NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01ODUsNiArNTg1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGNhc2Ug
VG9TdHJpbmc6CiAgICAgICAgICAgICBjYXNlIE5ld1N0cmluZ09iamVjdDoKICAgICAgICAgICAg
IGNhc2UgTWFrZVJvcGU6CisgICAgICAgICAgICBjYXNlIE5ld1R5cGVkQXJyYXk6CiAgICAgICAg
ICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAvLyBUaGlz
IGVpdGhlciBleGl0cywgY2F1c2VzIGEgR0MgKGxhenkgc3RyaW5nIGFsbG9jYXRpb24pLCBvciBj
bG9iYmVycwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJ
KHJldmlzaW9uIDE1NDM3NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJl
cml6ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01MTksNiArNTE5LDIxIEBAIHZvaWQgY2xvYmJlcml6
ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICAgICAgd3JpdGUoR0NTdGF0ZSk7CiAgICAg
ICAgIHJldHVybjsKICAgICAgICAgCisgICAgY2FzZSBOZXdUeXBlZEFycmF5OgorICAgICAgICBz
d2l0Y2ggKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgeworICAgICAgICBjYXNlIEludDMyVXNl
OgorICAgICAgICAgICAgcmVhZChHQ1N0YXRlKTsKKyAgICAgICAgICAgIHdyaXRlKEdDU3RhdGUp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIFVudHlwZWRVc2U6CisgICAgICAg
ICAgICByZWFkKFdvcmxkKTsKKyAgICAgICAgICAgIHdyaXRlKFdvcmxkKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCiAg
ICAgY2FzZSBSZWdFeHBFeGVjOgogICAgIGNhc2UgUmVnRXhwVGVzdDoKICAgICAgICAgcmVhZChS
ZWdFeHBTdGF0ZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhh
c2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQ
aGFzZS5jcHAJKHJldmlzaW9uIDE1NDM3NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRml4dXBQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3Myw2ICs2NzMsMTUgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKKyAgICAg
ICAgY2FzZSBOZXdUeXBlZEFycmF5OiB7CisgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkt
PnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkgeworICAgICAgICAgICAgICAgIHNldFVzZUtpbmRB
bmRVbmJveElmUHJvZml0YWJsZTxJbnQzMlVzZT4obm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAg
ICAgICAgIG5vZGUtPmNsZWFyRmxhZ3MoTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVDbG9iYmVyc1dv
cmxkKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKICAgICAgICAgY2FzZSBOZXdBcnJheVdp
dGhTaXplOiB7CiAgICAgICAgICAgICBzZXRVc2VLaW5kQW5kVW5ib3hJZlByb2ZpdGFibGU8SW50
MzJVc2U+KG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDE1NDM3NykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDYs
NiArMjQ2LDggQEAgdm9pZCBHcmFwaDo6ZHVtcChQcmludFN0cmVhbSYgb3V0LCBjb25zdAogICAg
IH0KICAgICBpZiAobm9kZS0+aGFzSW5kZXhpbmdUeXBlKCkpCiAgICAgICAgIG91dC5wcmludChj
b21tYSwgSW5kZXhpbmdUeXBlRHVtcChub2RlLT5pbmRleGluZ1R5cGUoKSkpOworICAgIGlmIChu
b2RlLT5oYXNUeXBlZEFycmF5VHlwZSgpKQorICAgICAgICBvdXQucHJpbnQoY29tbWEsIG5vZGUt
PnR5cGVkQXJyYXlUeXBlKCkpOwogICAgIGlmIChub2RlLT5oYXNQaGkoKSkKICAgICAgICAgb3V0
LnByaW50KGNvbW1hLCAiXiIsIG5vZGUtPnBoaSgpLT5pbmRleCgpKTsKICAgICBpZiAobm9kZS0+
aGFzRXhlY3V0aW9uQ291bnRlcigpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2Rl
LmgJKHJldmlzaW9uIDE1NDM3NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9k
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02MzUsNiArNjM1LDI0IEBAIHN0cnVjdCBOb2RlIHsKICAg
ICAgICAgcmV0dXJuIG1fb3BJbmZvOwogICAgIH0KICAgICAKKyAgICBib29sIGhhc1R5cGVkQXJy
YXlUeXBlKCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAob3AoKSkgeworICAgICAgICBjYXNlIE5l
d1R5cGVkQXJyYXk6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBU
eXBlZEFycmF5VHlwZSB0eXBlZEFycmF5VHlwZSgpCisgICAgeworICAgICAgICBBU1NFUlQoaGFz
VHlwZWRBcnJheVR5cGUoKSk7CisgICAgICAgIFR5cGVkQXJyYXlUeXBlIHJlc3VsdCA9IHN0YXRp
Y19jYXN0PFR5cGVkQXJyYXlUeXBlPihtX29wSW5mbyk7CisgICAgICAgIEFTU0VSVChpc1R5cGVk
VmlldyhyZXN1bHQpKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCiAgICAg
Ym9vbCBoYXNJbmxpbmVDYXBhY2l0eSgpCiAgICAgewogICAgICAgICByZXR1cm4gb3AoKSA9PSBD
cmVhdGVUaGlzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAko
cmV2aXNpb24gMTU0Mzc3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlw
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMDIsNiArMjAyLDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBERkcgewogICAgIG1hY3JvKE5ld0FycmF5LCBOb2RlUmVzdWx0SlMgfCBOb2RlSGFz
VmFyQXJncykgXAogICAgIG1hY3JvKE5ld0FycmF5V2l0aFNpemUsIE5vZGVSZXN1bHRKUykgXAog
ICAgIG1hY3JvKE5ld0FycmF5QnVmZmVyLCBOb2RlUmVzdWx0SlMpIFwKKyAgICBtYWNybyhOZXdU
eXBlZEFycmF5LCBOb2RlUmVzdWx0SlMgfCBOb2RlQ2xvYmJlcnNXb3JsZCB8IE5vZGVNdXN0R2Vu
ZXJhdGUpIFwKICAgICBtYWNybyhOZXdSZWdleHAsIE5vZGVSZXN1bHRKUykgXAogICAgIFwKICAg
ICAvKiBOb2RlcyBmb3IgbWlzYyBvcGVyYXRpb25zLiAqL1wKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMTU0Mzc3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEzIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
NDYsNiArNDYsNyBAQAogI2luY2x1ZGUgIk9iamVjdENvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAi
T3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIlN0cmluZ0NvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSAi
VHlwZWRBcnJheUlubGluZXMuaCIKICNpbmNsdWRlIDx3dGYvSW5saW5lQVNNLmg+CiAKICNpZiBF
TkFCTEUoSklUKQpAQCAtMzg3LDYgKzM4OCw3NiBAQCBBTFdBWVNfSU5MSU5FIHN0YXRpYyB2b2lk
IERGR19PUEVSQVRJT04gCiAgICAgfQogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBWaWV3Q2xhc3M+
CitjaGFyKiBuZXdUeXBlZEFycmF5V2l0aFNpemUoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgaW50MzJfdCBzaXplKQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Cisg
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIGlmIChzaXpl
IDwgMCkgeworICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywg
IlJlcXVlc3RlZCBsZW5ndGggaXMgbmVnYXRpdmUiKSk7CisgICAgICAgIHJldHVybiAwOworICAg
IH0KKyAgICByZXR1cm4gYml0d2lzZV9jYXN0PGNoYXIqPihWaWV3Q2xhc3M6OmNyZWF0ZShleGVj
LCBzdHJ1Y3R1cmUsIHNpemUpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVmlld0NsYXNzPgor
Y2hhciogbmV3VHlwZWRBcnJheVdpdGhPbmVBcmd1bWVudCgKKyAgICBFeGVjU3RhdGUqIGV4ZWMs
IFN0cnVjdHVyZSogc3RydWN0dXJlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit7Cisg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KCZ2bSwgZXhlYyk7CisgICAgCisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShl
bmNvZGVkVmFsdWUpOworICAgIAorICAgIGlmIChKU0FycmF5QnVmZmVyKiBqc0J1ZmZlciA9IGpz
RHluYW1pY0Nhc3Q8SlNBcnJheUJ1ZmZlcio+KHZhbHVlKSkgeworICAgICAgICBSZWZQdHI8QXJy
YXlCdWZmZXI+IGJ1ZmZlciA9IGpzQnVmZmVyLT5pbXBsKCk7CisgICAgICAgIAorICAgICAgICBp
ZiAoYnVmZmVyLT5ieXRlTGVuZ3RoKCkgJSBWaWV3Q2xhc3M6OmVsZW1lbnRTaXplKSB7CisgICAg
ICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgIkFycmF5QnVm
ZmVyIGxlbmd0aCBtaW51cyB0aGUgYnl0ZU9mZnNldCBpcyBub3QgYSBtdWx0aXBsZSBvZiB0aGUg
ZWxlbWVudCBzaXplIikpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxjaGFyKj4oCisgICAgICAgICAgICBWaWV3Q2xhc3M6OmNy
ZWF0ZSgKKyAgICAgICAgICAgICAgICBleGVjLCBzdHJ1Y3R1cmUsIGJ1ZmZlciwgMCwgYnVmZmVy
LT5ieXRlTGVuZ3RoKCkgLyBWaWV3Q2xhc3M6OmVsZW1lbnRTaXplKSk7CisgICAgfQorICAgIAor
ICAgIGlmIChKU09iamVjdCogb2JqZWN0ID0ganNEeW5hbWljQ2FzdDxKU09iamVjdCo+KHZhbHVl
KSkgeworICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBvYmplY3QtPmdldChleGVjLCB2bS5wcm9w
ZXJ0eU5hbWVzLT5sZW5ndGgpLnRvVUludDMyKGV4ZWMpOworICAgICAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgCisgICAgICAgIFZp
ZXdDbGFzcyogcmVzdWx0ID0gVmlld0NsYXNzOjpjcmVhdGVVbmluaXRpYWxpemVkKGV4ZWMsIHN0
cnVjdHVyZSwgbGVuZ3RoKTsKKyAgICAgICAgaWYgKCFyZXN1bHQpCisgICAgICAgICAgICByZXR1
cm4gMDsKKyAgICAgICAgCisgICAgICAgIGlmICghcmVzdWx0LT5zZXQoZXhlYywgb2JqZWN0LCAw
LCBsZW5ndGgpKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIAorICAgICAgICByZXR1
cm4gYml0d2lzZV9jYXN0PGNoYXIqPihyZXN1bHQpOworICAgIH0KKyAgICAKKyAgICBpbnQgbGVu
Z3RoOworICAgIGlmICh2YWx1ZS5pc0ludDMyKCkpCisgICAgICAgIGxlbmd0aCA9IHZhbHVlLmFz
SW50MzIoKTsKKyAgICBlbHNlIGlmICghdmFsdWUuaXNOdW1iZXIoKSkgeworICAgICAgICB0aHJv
d0Vycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiSW52YWxpZCBhcnJheSBsZW5ndGgg
YXJndW1lbnQiKSk7CisgICAgICAgIHJldHVybiAwOworICAgIH0gZWxzZSB7CisgICAgICAgIGxl
bmd0aCA9IHN0YXRpY19jYXN0PGludD4odmFsdWUuYXNOdW1iZXIoKSk7CisgICAgICAgIGlmIChs
ZW5ndGggIT0gdmFsdWUuYXNOdW1iZXIoKSkgeworICAgICAgICAgICAgdGhyb3dFcnJvcihleGVj
LCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIkludmFsaWQgYXJyYXkgbGVuZ3RoIGFyZ3VtZW50IChm
cmFjdGlvbmFsIGxlbmd0aHMgbm90IGFsbG93ZWQpIikpOworICAgICAgICAgICAgcmV0dXJuIDA7
CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgaWYgKGxlbmd0aCA8IDApIHsKKyAgICAgICAg
dGhyb3dFcnJvcihleGVjLCBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsICJSZXF1ZXN0ZWQgbGVuZ3Ro
IGlzIG5lZ2F0aXZlIikpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgCisgICAgcmV0
dXJuIGJpdHdpc2VfY2FzdDxjaGFyKj4oVmlld0NsYXNzOjpjcmVhdGUoZXhlYywgc3RydWN0dXJl
LCBsZW5ndGgpKTsKK30KKwogZXh0ZXJuICJDIiB7CiAKIEVuY29kZWRKU1ZhbHVlIERGR19PUEVS
QVRJT04gb3BlcmF0aW9uVG9UaGlzKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZE9wKQpAQCAtMTM2Niw2ICsxNDM3LDExNCBAQCBjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJh
dGlvbk5ld0FycmF5QnVmCiAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxjaGFyKj4oY29uc3RydWN0
QXJyYXkoZXhlYywgYXJyYXlTdHJ1Y3R1cmUsIGV4ZWMtPmNvZGVCbG9jaygpLT5jb25zdGFudEJ1
ZmZlcihzdGFydCksIHNpemUpKTsKIH0KIAorY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25O
ZXdJbnQ4QXJyYXlXaXRoU2l6ZSgKKyAgICBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBpbnQzMl90IGxlbmd0aCkKK3sKKyAgICByZXR1cm4gbmV3VHlwZWRBcnJheVdpdGhT
aXplPEpTSW50OEFycmF5PihleGVjLCBzdHJ1Y3R1cmUsIGxlbmd0aCk7Cit9CisKK2NoYXIqIERG
R19PUEVSQVRJT04gb3BlcmF0aW9uTmV3SW50OEFycmF5V2l0aE9uZUFyZ3VtZW50KAorICAgIEV4
ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRWYWx1ZSkKK3sKKyAgICByZXR1cm4gbmV3VHlwZWRBcnJheVdpdGhPbmVBcmd1bWVudDxKU0lu
dDhBcnJheT4oZXhlYywgc3RydWN0dXJlLCBlbmNvZGVkVmFsdWUpOworfQorCitjaGFyKiBERkdf
T1BFUkFUSU9OIG9wZXJhdGlvbk5ld0ludDE2QXJyYXlXaXRoU2l6ZSgKKyAgICBFeGVjU3RhdGUq
IGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBpbnQzMl90IGxlbmd0aCkKK3sKKyAgICByZXR1
cm4gbmV3VHlwZWRBcnJheVdpdGhTaXplPEpTSW50MTZBcnJheT4oZXhlYywgc3RydWN0dXJlLCBs
ZW5ndGgpOworfQorCitjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0ludDE2QXJyYXlX
aXRoT25lQXJndW1lbnQoCisgICAgRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQoreworICAgIHJldHVybiBuZXdUeXBlZEFy
cmF5V2l0aE9uZUFyZ3VtZW50PEpTSW50MTZBcnJheT4oZXhlYywgc3RydWN0dXJlLCBlbmNvZGVk
VmFsdWUpOworfQorCitjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0ludDMyQXJyYXlX
aXRoU2l6ZSgKKyAgICBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBpbnQz
Ml90IGxlbmd0aCkKK3sKKyAgICByZXR1cm4gbmV3VHlwZWRBcnJheVdpdGhTaXplPEpTSW50MzJB
cnJheT4oZXhlYywgc3RydWN0dXJlLCBsZW5ndGgpOworfQorCitjaGFyKiBERkdfT1BFUkFUSU9O
IG9wZXJhdGlvbk5ld0ludDMyQXJyYXlXaXRoT25lQXJndW1lbnQoCisgICAgRXhlY1N0YXRlKiBl
eGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQor
eworICAgIHJldHVybiBuZXdUeXBlZEFycmF5V2l0aE9uZUFyZ3VtZW50PEpTSW50MzJBcnJheT4o
ZXhlYywgc3RydWN0dXJlLCBlbmNvZGVkVmFsdWUpOworfQorCitjaGFyKiBERkdfT1BFUkFUSU9O
IG9wZXJhdGlvbk5ld1VpbnQ4QXJyYXlXaXRoU2l6ZSgKKyAgICBFeGVjU3RhdGUqIGV4ZWMsIFN0
cnVjdHVyZSogc3RydWN0dXJlLCBpbnQzMl90IGxlbmd0aCkKK3sKKyAgICByZXR1cm4gbmV3VHlw
ZWRBcnJheVdpdGhTaXplPEpTVWludDhBcnJheT4oZXhlYywgc3RydWN0dXJlLCBsZW5ndGgpOwor
fQorCitjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1VpbnQ4QXJyYXlXaXRoT25lQXJn
dW1lbnQoCisgICAgRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQoreworICAgIHJldHVybiBuZXdUeXBlZEFycmF5V2l0aE9u
ZUFyZ3VtZW50PEpTVWludDhBcnJheT4oZXhlYywgc3RydWN0dXJlLCBlbmNvZGVkVmFsdWUpOwor
fQorCitjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1VpbnQ4Q2xhbXBlZEFycmF5V2l0
aFNpemUoCisgICAgRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgaW50MzJf
dCBsZW5ndGgpCit7CisgICAgcmV0dXJuIG5ld1R5cGVkQXJyYXlXaXRoU2l6ZTxKU1VpbnQ4Q2xh
bXBlZEFycmF5PihleGVjLCBzdHJ1Y3R1cmUsIGxlbmd0aCk7Cit9CisKK2NoYXIqIERGR19PUEVS
QVRJT04gb3BlcmF0aW9uTmV3VWludDhDbGFtcGVkQXJyYXlXaXRoT25lQXJndW1lbnQoCisgICAg
RXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZFZhbHVlKQoreworICAgIHJldHVybiBuZXdUeXBlZEFycmF5V2l0aE9uZUFyZ3VtZW50PEpT
VWludDhDbGFtcGVkQXJyYXk+KGV4ZWMsIHN0cnVjdHVyZSwgZW5jb2RlZFZhbHVlKTsKK30KKwor
Y2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdVaW50MTZBcnJheVdpdGhTaXplKAorICAg
IEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGludDMyX3QgbGVuZ3RoKQor
eworICAgIHJldHVybiBuZXdUeXBlZEFycmF5V2l0aFNpemU8SlNVaW50MTZBcnJheT4oZXhlYywg
c3RydWN0dXJlLCBsZW5ndGgpOworfQorCitjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5l
d1VpbnQxNkFycmF5V2l0aE9uZUFyZ3VtZW50KAorICAgIEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3sKKyAgICByZXR1
cm4gbmV3VHlwZWRBcnJheVdpdGhPbmVBcmd1bWVudDxKU1VpbnQxNkFycmF5PihleGVjLCBzdHJ1
Y3R1cmUsIGVuY29kZWRWYWx1ZSk7Cit9CisKK2NoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9u
TmV3VWludDMyQXJyYXlXaXRoU2l6ZSgKKyAgICBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSog
c3RydWN0dXJlLCBpbnQzMl90IGxlbmd0aCkKK3sKKyAgICByZXR1cm4gbmV3VHlwZWRBcnJheVdp
dGhTaXplPEpTVWludDMyQXJyYXk+KGV4ZWMsIHN0cnVjdHVyZSwgbGVuZ3RoKTsKK30KKworY2hh
ciogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdVaW50MzJBcnJheVdpdGhPbmVBcmd1bWVudCgK
KyAgICBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkVmFsdWUpCit7CisgICAgcmV0dXJuIG5ld1R5cGVkQXJyYXlXaXRoT25lQXJndW1l
bnQ8SlNVaW50MzJBcnJheT4oZXhlYywgc3RydWN0dXJlLCBlbmNvZGVkVmFsdWUpOworfQorCitj
aGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0Zsb2F0MzJBcnJheVdpdGhTaXplKAorICAg
IEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGludDMyX3QgbGVuZ3RoKQor
eworICAgIHJldHVybiBuZXdUeXBlZEFycmF5V2l0aFNpemU8SlNGbG9hdDMyQXJyYXk+KGV4ZWMs
IHN0cnVjdHVyZSwgbGVuZ3RoKTsKK30KKworY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25O
ZXdGbG9hdDMyQXJyYXlXaXRoT25lQXJndW1lbnQoCisgICAgRXhlY1N0YXRlKiBleGVjLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQoreworICAgIHJl
dHVybiBuZXdUeXBlZEFycmF5V2l0aE9uZUFyZ3VtZW50PEpTRmxvYXQzMkFycmF5PihleGVjLCBz
dHJ1Y3R1cmUsIGVuY29kZWRWYWx1ZSk7Cit9CisKK2NoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0
aW9uTmV3RmxvYXQ2NEFycmF5V2l0aFNpemUoCisgICAgRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgaW50MzJfdCBsZW5ndGgpCit7CisgICAgcmV0dXJuIG5ld1R5cGVkQXJy
YXlXaXRoU2l6ZTxKU0Zsb2F0NjRBcnJheT4oZXhlYywgc3RydWN0dXJlLCBsZW5ndGgpOworfQor
CitjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0Zsb2F0NjRBcnJheVdpdGhPbmVBcmd1
bWVudCgKKyAgICBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit7CisgICAgcmV0dXJuIG5ld1R5cGVkQXJyYXlXaXRoT25l
QXJndW1lbnQ8SlNGbG9hdDY0QXJyYXk+KGV4ZWMsIHN0cnVjdHVyZSwgZW5jb2RlZFZhbHVlKTsK
K30KKwogRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdSZWdleHAoRXhl
Y1N0YXRlKiBleGVjLCB2b2lkKiByZWdleHBQdHIpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCShyZXZp
c2lvbiAxNTQzNzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEx
LCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMTIyLDYgKzEyMiw3IEBAIHR5cGVkZWYgY2hhciogREZHX09QRVJB
VElPTiAoKlBfREZHT3BlcmEKIHR5cGVkZWYgY2hhciogREZHX09QRVJBVElPTiAoKlBfREZHT3Bl
cmF0aW9uX0VTKShFeGVjU3RhdGUqLCBzaXplX3QpOwogdHlwZWRlZiBjaGFyKiBERkdfT1BFUkFU
SU9OICgqUF9ERkdPcGVyYXRpb25fRVNKc3MpKEV4ZWNTdGF0ZSosIHNpemVfdCwgSlNTdHJpbmcq
KTsKIHR5cGVkZWYgY2hhciogREZHX09QRVJBVElPTiAoKlBfREZHT3BlcmF0aW9uX0VTdCkoRXhl
Y1N0YXRlKiwgU3RydWN0dXJlKik7Cit0eXBlZGVmIGNoYXIqIERGR19PUEVSQVRJT04gKCpQX0RG
R09wZXJhdGlvbl9FU3RKKShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBFbmNvZGVkSlNWYWx1ZSk7
CiB0eXBlZGVmIGNoYXIqIERGR19PUEVSQVRJT04gKCpQX0RGR09wZXJhdGlvbl9FU3RQUykoRXhl
Y1N0YXRlKiwgU3RydWN0dXJlKiwgdm9pZCosIHNpemVfdCk7CiB0eXBlZGVmIGNoYXIqIERGR19P
UEVSQVRJT04gKCpQX0RGR09wZXJhdGlvbl9FU3RTUykoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwg
c2l6ZV90LCBzaXplX3QpOwogdHlwZWRlZiBjaGFyKiBERkdfT1BFUkFUSU9OICgqUF9ERkdPcGVy
YXRpb25fRVN0WikoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgaW50MzJfdCk7CkBAIC0xNTIsNiAr
MTUzLDI0IEBAIGNoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3QXJyYXkoRXgKIGNoYXIq
IERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3QXJyYXlCdWZmZXIoRXhlY1N0YXRlKiwgU3RydWN0
dXJlKiwgc2l6ZV90LCBzaXplX3QpIFdURl9JTlRFUk5BTDsKIGNoYXIqIERGR19PUEVSQVRJT04g
b3BlcmF0aW9uTmV3RW1wdHlBcnJheShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqKSBXVEZfSU5URVJO
QUw7CiBjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemUoRXhlY1N0
YXRlKiwgU3RydWN0dXJlKiwgaW50MzJfdCkgV1RGX0lOVEVSTkFMOworY2hhciogREZHX09QRVJB
VElPTiBvcGVyYXRpb25OZXdJbnQ4QXJyYXlXaXRoU2l6ZShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUq
LCBpbnQzMl90KSBXVEZfSU5URVJOQUw7CitjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5l
d0ludDhBcnJheVdpdGhPbmVBcmd1bWVudChFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBFbmNvZGVk
SlNWYWx1ZSkgV1RGX0lOVEVSTkFMOworY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdJ
bnQxNkFycmF5V2l0aFNpemUoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgaW50MzJfdCkgV1RGX0lO
VEVSTkFMOworY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdJbnQxNkFycmF5V2l0aE9u
ZUFyZ3VtZW50KEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5U
RVJOQUw7CitjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0ludDMyQXJyYXlXaXRoU2l6
ZShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBpbnQzMl90KSBXVEZfSU5URVJOQUw7CitjaGFyKiBE
RkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0ludDMyQXJyYXlXaXRoT25lQXJndW1lbnQoRXhlY1N0
YXRlKiwgU3RydWN0dXJlKiwgRW5jb2RlZEpTVmFsdWUpIFdURl9JTlRFUk5BTDsKK2NoYXIqIERG
R19PUEVSQVRJT04gb3BlcmF0aW9uTmV3VWludDhBcnJheVdpdGhTaXplKEV4ZWNTdGF0ZSosIFN0
cnVjdHVyZSosIGludDMyX3QpIFdURl9JTlRFUk5BTDsKK2NoYXIqIERGR19PUEVSQVRJT04gb3Bl
cmF0aW9uTmV3VWludDhBcnJheVdpdGhPbmVBcmd1bWVudChFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUq
LCBFbmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFMOworY2hhciogREZHX09QRVJBVElPTiBvcGVy
YXRpb25OZXdVaW50OENsYW1wZWRBcnJheVdpdGhTaXplKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSos
IGludDMyX3QpIFdURl9JTlRFUk5BTDsKK2NoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3
VWludDhDbGFtcGVkQXJyYXlXaXRoT25lQXJndW1lbnQoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwg
RW5jb2RlZEpTVmFsdWUpIFdURl9JTlRFUk5BTDsKK2NoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0
aW9uTmV3VWludDE2QXJyYXlXaXRoU2l6ZShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBpbnQzMl90
KSBXVEZfSU5URVJOQUw7CitjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1VpbnQxNkFy
cmF5V2l0aE9uZUFyZ3VtZW50KEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIEVuY29kZWRKU1ZhbHVl
KSBXVEZfSU5URVJOQUw7CitjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1VpbnQzMkFy
cmF5V2l0aFNpemUoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgaW50MzJfdCkgV1RGX0lOVEVSTkFM
OworY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdVaW50MzJBcnJheVdpdGhPbmVBcmd1
bWVudChFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBFbmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFM
OworY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdGbG9hdDMyQXJyYXlXaXRoU2l6ZShF
eGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBpbnQzMl90KSBXVEZfSU5URVJOQUw7CitjaGFyKiBERkdf
T1BFUkFUSU9OIG9wZXJhdGlvbk5ld0Zsb2F0MzJBcnJheVdpdGhPbmVBcmd1bWVudChFeGVjU3Rh
dGUqLCBTdHJ1Y3R1cmUqLCBFbmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFMOworY2hhciogREZH
X09QRVJBVElPTiBvcGVyYXRpb25OZXdGbG9hdDY0QXJyYXlXaXRoU2l6ZShFeGVjU3RhdGUqLCBT
dHJ1Y3R1cmUqLCBpbnQzMl90KSBXVEZfSU5URVJOQUw7CitjaGFyKiBERkdfT1BFUkFUSU9OIG9w
ZXJhdGlvbk5ld0Zsb2F0NjRBcnJheVdpdGhPbmVBcmd1bWVudChFeGVjU3RhdGUqLCBTdHJ1Y3R1
cmUqLCBFbmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFMOwogRW5jb2RlZEpTVmFsdWUgREZHX09Q
RVJBVElPTiBvcGVyYXRpb25OZXdSZWdleHAoRXhlY1N0YXRlKiwgdm9pZCopIFdURl9JTlRFUk5B
TDsKIHZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbFN0cmljdChFeGVjU3RhdGUq
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFByb3Bl
cnR5LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpIFdURl9JTlRFUk5BTDsKIHZvaWQgREZH
X09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdChFeGVjU3RhdGUqLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkQmFzZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFByb3BlcnR5LCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpIFdURl9JTlRFUk5BTDsKQEAgLTI4NCw2ICszMDMsNjUg
QEAgdm9pZCBERkdfT1BFUkFUSU9OIGRlYnVnT3BlcmF0aW9uUHJpbnRTcAogdm9pZCBERkdfT1BF
UkFUSU9OIHRyaWdnZXJSZW9wdGltaXphdGlvbk5vdyhDb2RlQmxvY2sqKSBXVEZfSU5URVJOQUw7
CiAKIH0gLy8gZXh0ZXJuICJDIgorCitpbmxpbmUgUF9ERkdPcGVyYXRpb25fRVN0WiBvcGVyYXRp
b25OZXdUeXBlZEFycmF5V2l0aFNpemVGb3JUeXBlKFR5cGVkQXJyYXlUeXBlIHR5cGUpCit7Cisg
ICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBUeXBlSW50ODoKKyAgICAgICAgcmV0dXJuIG9w
ZXJhdGlvbk5ld0ludDhBcnJheVdpdGhTaXplOworICAgIGNhc2UgVHlwZUludDE2OgorICAgICAg
ICByZXR1cm4gb3BlcmF0aW9uTmV3SW50MTZBcnJheVdpdGhTaXplOworICAgIGNhc2UgVHlwZUlu
dDMyOgorICAgICAgICByZXR1cm4gb3BlcmF0aW9uTmV3SW50MzJBcnJheVdpdGhTaXplOworICAg
IGNhc2UgVHlwZVVpbnQ4OgorICAgICAgICByZXR1cm4gb3BlcmF0aW9uTmV3VWludDhBcnJheVdp
dGhTaXplOworICAgIGNhc2UgVHlwZVVpbnQ4Q2xhbXBlZDoKKyAgICAgICAgcmV0dXJuIG9wZXJh
dGlvbk5ld1VpbnQ4Q2xhbXBlZEFycmF5V2l0aFNpemU7CisgICAgY2FzZSBUeXBlVWludDE2Ogor
ICAgICAgICByZXR1cm4gb3BlcmF0aW9uTmV3VWludDE2QXJyYXlXaXRoU2l6ZTsKKyAgICBjYXNl
IFR5cGVVaW50MzI6CisgICAgICAgIHJldHVybiBvcGVyYXRpb25OZXdVaW50MzJBcnJheVdpdGhT
aXplOworICAgIGNhc2UgVHlwZUZsb2F0MzI6CisgICAgICAgIHJldHVybiBvcGVyYXRpb25OZXdG
bG9hdDMyQXJyYXlXaXRoU2l6ZTsKKyAgICBjYXNlIFR5cGVGbG9hdDY0OgorICAgICAgICByZXR1
cm4gb3BlcmF0aW9uTmV3RmxvYXQ2NEFycmF5V2l0aFNpemU7CisgICAgY2FzZSBOb3RUeXBlZEFy
cmF5OgorICAgIGNhc2UgVHlwZURhdGFWaWV3OgorICAgICAgICBicmVhazsKKyAgICB9CisgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsKK30KKworaW5saW5l
IFBfREZHT3BlcmF0aW9uX0VTdEogb3BlcmF0aW9uTmV3VHlwZWRBcnJheVdpdGhPbmVBcmd1bWVu
dEZvclR5cGUoVHlwZWRBcnJheVR5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAg
ICBjYXNlIFR5cGVJbnQ4OgorICAgICAgICByZXR1cm4gb3BlcmF0aW9uTmV3SW50OEFycmF5V2l0
aE9uZUFyZ3VtZW50OworICAgIGNhc2UgVHlwZUludDE2OgorICAgICAgICByZXR1cm4gb3BlcmF0
aW9uTmV3SW50MTZBcnJheVdpdGhPbmVBcmd1bWVudDsKKyAgICBjYXNlIFR5cGVJbnQzMjoKKyAg
ICAgICAgcmV0dXJuIG9wZXJhdGlvbk5ld0ludDMyQXJyYXlXaXRoT25lQXJndW1lbnQ7CisgICAg
Y2FzZSBUeXBlVWludDg6CisgICAgICAgIHJldHVybiBvcGVyYXRpb25OZXdVaW50OEFycmF5V2l0
aE9uZUFyZ3VtZW50OworICAgIGNhc2UgVHlwZVVpbnQ4Q2xhbXBlZDoKKyAgICAgICAgcmV0dXJu
IG9wZXJhdGlvbk5ld1VpbnQ4Q2xhbXBlZEFycmF5V2l0aE9uZUFyZ3VtZW50OworICAgIGNhc2Ug
VHlwZVVpbnQxNjoKKyAgICAgICAgcmV0dXJuIG9wZXJhdGlvbk5ld1VpbnQxNkFycmF5V2l0aE9u
ZUFyZ3VtZW50OworICAgIGNhc2UgVHlwZVVpbnQzMjoKKyAgICAgICAgcmV0dXJuIG9wZXJhdGlv
bk5ld1VpbnQzMkFycmF5V2l0aE9uZUFyZ3VtZW50OworICAgIGNhc2UgVHlwZUZsb2F0MzI6Cisg
ICAgICAgIHJldHVybiBvcGVyYXRpb25OZXdGbG9hdDMyQXJyYXlXaXRoT25lQXJndW1lbnQ7Cisg
ICAgY2FzZSBUeXBlRmxvYXQ2NDoKKyAgICAgICAgcmV0dXJuIG9wZXJhdGlvbk5ld0Zsb2F0NjRB
cnJheVdpdGhPbmVBcmd1bWVudDsKKyAgICBjYXNlIE5vdFR5cGVkQXJyYXk6CisgICAgY2FzZSBU
eXBlRGF0YVZpZXc6CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAwOworfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
REZHCiAKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0
aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE1NDM3
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9u
UGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MTQsNiArNDE0LDExIEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCisgICAgICAgIGNhc2Ug
TmV3VHlwZWRBcnJheTogeworICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0aW9uKHNw
ZWN1bGF0aW9uRnJvbVR5cGVkQXJyYXlUeXBlKG5vZGUtPnR5cGVkQXJyYXlUeXBlKCkpKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKICAgICAgICAgY2FzZSBO
ZXdSZWdleHA6CiAgICAgICAgIGNhc2UgQ3JlYXRlQWN0aXZhdGlvbjogewogICAgICAgICAgICAg
Y2hhbmdlZCB8PSBzZXRQcmVkaWN0aW9uKFNwZWNPYmplY3RPdGhlcik7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkocmV2aXNpb24gMTU0Mzc3
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTIzMSw2ICsyMzEsNyBAQCBib29sIHNhZmVUb0V4ZWN1dGUoQWJzdHJhY3RT
dGF0ZVR5cGUmIHN0CiAgICAgY2FzZSBGb3JjZU9TUkV4aXQ6CiAgICAgY2FzZSBDaGVja1dhdGNo
ZG9nVGltZXI6CiAgICAgY2FzZSBTdHJpbmdGcm9tQ2hhckNvZGU6CisgICAgY2FzZSBOZXdUeXBl
ZEFycmF5OgogICAgIGNhc2UgVW5yZWFjaGFibGU6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAg
ICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQz
Ml82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMTU0Mzc3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzYwNCw2ICszNjA0LDM3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9k
ZSkKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKKyAgICBjYXNlIE5ld1R5cGVkQXJy
YXk6IHsKKyAgICAgICAgc3dpdGNoIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpIHsKKyAgICAg
ICAgY2FzZSBJbnQzMlVzZToKKyAgICAgICAgICAgIGNvbXBpbGVOZXdUeXBlZEFycmF5KG5vZGUp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVW50eXBlZFVzZTogeworICAgICAg
ICAgICAgSlNWYWx1ZU9wZXJhbmQgYXJndW1lbnQodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAg
ICAgICAgICAgR1BSUmVnIGFyZ3VtZW50VGFnR1BSID0gYXJndW1lbnQudGFnR1BSKCk7CisgICAg
ICAgICAgICBHUFJSZWcgYXJndW1lbnRQYXlsb2FkR1BSID0gYXJndW1lbnQucGF5bG9hZEdQUigp
OworICAgICAgICAgICAgCisgICAgICAgICAgICBmbHVzaFJlZ2lzdGVycygpOworICAgICAgICAg
ICAgCisgICAgICAgICAgICBHUFJSZXN1bHQgcmVzdWx0KHRoaXMpOworICAgICAgICAgICAgR1BS
UmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0
Rm9yKG5vZGUtPmNvZGVPcmlnaW4pOworICAgICAgICAgICAgY2FsbE9wZXJhdGlvbigKKyAgICAg
ICAgICAgICAgICBvcGVyYXRpb25OZXdUeXBlZEFycmF5V2l0aE9uZUFyZ3VtZW50Rm9yVHlwZShu
b2RlLT50eXBlZEFycmF5VHlwZSgpKSwKKyAgICAgICAgICAgICAgICByZXN1bHRHUFIsIGdsb2Jh
bE9iamVjdC0+dHlwZWRBcnJheVN0cnVjdHVyZShub2RlLT50eXBlZEFycmF5VHlwZSgpKSwKKyAg
ICAgICAgICAgICAgICBhcmd1bWVudFRhZ0dQUiwgYXJndW1lbnRQYXlsb2FkR1BSKTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAogICAgIGNhc2UgTmV3UmVnZXhwOiB7
CiAgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CiAgICAgICAgIEdQUlJlc3VsdCByZXN1bHRQYXls
b2FkKHRoaXMpOwpAQCAtMzY4NSw3ICszNzE2LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZShOb2RlKiBub2RlKQogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd1Bh
dGg7CiAgICAgICAgIAogICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG5vZGUtPnN0cnVj
dHVyZSgpOwotICAgICAgICBzaXplX3QgYWxsb2NhdGlvblNpemUgPSBKU09iamVjdDo6YWxsb2Nh
dGlvblNpemUoc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKKyAgICAgICAgc2l6ZV90IGFs
bG9jYXRpb25TaXplID0gSlNGaW5hbE9iamVjdDo6YWxsb2NhdGlvblNpemUoc3RydWN0dXJlLT5p
bmxpbmVDYXBhY2l0eSgpKTsKICAgICAgICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3JQdHIg
PSAmbV9qaXQudm0oKS0+aGVhcC5hbGxvY2F0b3JGb3JPYmplY3RXaXRob3V0RGVzdHJ1Y3Rvcihh
bGxvY2F0aW9uU2l6ZSk7CiAKICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKGFsbG9j
YXRvclB0ciksIGFsbG9jYXRvckdQUik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDE1NDM3NykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM1MjcsNiArMzUyNywzNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
KE5vZGUqIG5vZGUpCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCisgICAgY2FzZSBO
ZXdUeXBlZEFycmF5OiB7CisgICAgICAgIHN3aXRjaCAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgp
KSB7CisgICAgICAgIGNhc2UgSW50MzJVc2U6CisgICAgICAgICAgICBjb21waWxlTmV3VHlwZWRB
cnJheShub2RlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFVudHlwZWRVc2U6
IHsKKyAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIGFyZ3VtZW50KHRoaXMsIG5vZGUtPmNoaWxk
MSgpKTsKKyAgICAgICAgICAgIEdQUlJlZyBhcmd1bWVudEdQUiA9IGFyZ3VtZW50LmdwcigpOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBmbHVzaFJlZ2lzdGVycygpOworICAgICAgICAgICAg
CisgICAgICAgICAgICBHUFJSZXN1bHQgcmVzdWx0KHRoaXMpOworICAgICAgICAgICAgR1BSUmVn
IHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9y
KG5vZGUtPmNvZGVPcmlnaW4pOworICAgICAgICAgICAgY2FsbE9wZXJhdGlvbigKKyAgICAgICAg
ICAgICAgICBvcGVyYXRpb25OZXdUeXBlZEFycmF5V2l0aE9uZUFyZ3VtZW50Rm9yVHlwZShub2Rl
LT50eXBlZEFycmF5VHlwZSgpKSwKKyAgICAgICAgICAgICAgICByZXN1bHRHUFIsIGdsb2JhbE9i
amVjdC0+dHlwZWRBcnJheVN0cnVjdHVyZShub2RlLT50eXBlZEFycmF5VHlwZSgpKSwKKyAgICAg
ICAgICAgICAgICBhcmd1bWVudEdQUik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGNlbGxS
ZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQor
ICAgICAgICAKICAgICBjYXNlIE5ld1JlZ2V4cDogewogICAgICAgICBmbHVzaFJlZ2lzdGVycygp
OwogICAgICAgICBHUFJSZXN1bHQgcmVzdWx0KHRoaXMpOwpAQCAtMzYwMyw3ICszNjMzLDcgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6SnVtcExpc3Qgc2xvd1BhdGg7CiAKICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUgPSBub2RlLT5zdHJ1Y3R1cmUoKTsKLSAgICAgICAgc2l6ZV90IGFsbG9jYXRpb25TaXplID0g
SlNPYmplY3Q6OmFsbG9jYXRpb25TaXplKHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7Cisg
ICAgICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEpTRmluYWxPYmplY3Q6OmFsbG9jYXRpb25T
aXplKHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7CiAgICAgICAgIE1hcmtlZEFsbG9jYXRv
ciogYWxsb2NhdG9yUHRyID0gJm1faml0LnZtKCktPmhlYXAuYWxsb2NhdG9yRm9yT2JqZWN0V2l0
aG91dERlc3RydWN0b3IoYWxsb2NhdGlvblNpemUpOwogCiAgICAgICAgIG1faml0Lm1vdmUoVHJ1
c3RlZEltbVB0cihhbGxvY2F0b3JQdHIpLCBhbGxvY2F0b3JHUFIpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDE1
NDM3NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00NDc2LDYgKzQ0NzYsODMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZU5ld1N0cmluZ09iagogICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsK
IH0KIAordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU5ld1R5cGVkQXJyYXkoTm9kZSogbm9k
ZSkKK3sKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9qaXQuZ3JhcGgoKS5n
bG9iYWxPYmplY3RGb3Iobm9kZS0+Y29kZU9yaWdpbik7CisgICAgVHlwZWRBcnJheVR5cGUgdHlw
ZSA9IG5vZGUtPnR5cGVkQXJyYXlUeXBlKCk7CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBn
bG9iYWxPYmplY3QtPnR5cGVkQXJyYXlTdHJ1Y3R1cmUodHlwZSk7CisgICAgCisgICAgU3BlY3Vs
YXRlSW50ZWdlck9wZXJhbmQgc2l6ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgR1BSUmVn
IHNpemVHUFIgPSBzaXplLmdwcigpOworICAgIAorICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhp
cyk7CisgICAgR1BSVGVtcG9yYXJ5IHN0b3JhZ2UodGhpcyk7CisgICAgR1BSVGVtcG9yYXJ5IHNj
cmF0Y2godGhpcyk7CisgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gyKHRoaXMpOworICAgIEdQUlJl
ZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgR1BSUmVnIHN0b3JhZ2VHUFIgPSBzdG9y
YWdlLmdwcigpOworICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICBH
UFJSZWcgc2NyYXRjaEdQUjIgPSBzY3JhdGNoMi5ncHIoKTsKKyAgICAKKyAgICBKSVRDb21waWxl
cjo6SnVtcExpc3Qgc2xvd0Nhc2VzOworCisgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFu
Y2gzMigKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFib3ZlLCBzaXplR1BSLCBUcnVzdGVkSW1t
MzIoSlNBcnJheUJ1ZmZlclZpZXc6OmZhc3RTaXplTGltaXQpKSk7CisgICAgCisgICAgbV9qaXQu
bW92ZShzaXplR1BSLCBzY3JhdGNoR1BSKTsKKyAgICBtX2ppdC5sc2hpZnQzMihUcnVzdGVkSW1t
MzIobG9nRWxlbWVudFNpemUodHlwZSkpLCBzY3JhdGNoR1BSKTsKKyAgICBpZiAoZWxlbWVudFNp
emUodHlwZSkgPCA4KSB7CisgICAgICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMig3KSwgc2Ny
YXRjaEdQUik7CisgICAgICAgIG1faml0LmFuZDMyKFRydXN0ZWRJbW0zMih+NyksIHNjcmF0Y2hH
UFIpOworICAgIH0KKyAgICBzbG93Q2FzZXMuYXBwZW5kKAorICAgICAgICBlbWl0QWxsb2NhdGVC
YXNpY1N0b3JhZ2Uoc2NyYXRjaEdQUiwgc3RvcmFnZUdQUikpOworICAgIAorICAgIG1faml0LnN1
YlB0cihzY3JhdGNoR1BSLCBzdG9yYWdlR1BSKTsKKyAgICAKKyAgICBlbWl0QWxsb2NhdGVKU09i
amVjdDxKU0FycmF5QnVmZmVyVmlldz4oCisgICAgICAgIHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0
cihzdHJ1Y3R1cmUpLCBUcnVzdGVkSW1tUHRyKDApLCBzY3JhdGNoR1BSLCBzY3JhdGNoR1BSMiwK
KyAgICAgICAgc2xvd0Nhc2VzKTsKKyAgICAKKyAgICBtX2ppdC5zdG9yZVB0cigKKyAgICAgICAg
c3RvcmFnZUdQUiwKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBK
U0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZWZWN0b3IoKSkpOworICAgIG1faml0LnN0b3JlMzIo
CisgICAgICAgIHNpemVHUFIsCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJlc3Vs
dEdQUiwgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mTGVuZ3RoKCkpKTsKKyAgICBtX2ppdC5z
dG9yZTMyKAorICAgICAgICBUcnVzdGVkSW1tMzIoRmFzdFR5cGVkQXJyYXkpLAorICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZz
ZXRPZk1vZGUoKSkpOworICAgIAorI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXAgZG9uZSA9IG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVy
bywgc2l6ZUdQUik7CisgICAgbV9qaXQubW92ZShzaXplR1BSLCBzY3JhdGNoR1BSKTsKKyAgICBp
ZiAoZWxlbWVudFNpemUodHlwZSkgIT0gNCkgeworICAgICAgICBpZiAoZWxlbWVudFNpemUodHlw
ZSkgPiA0KQorICAgICAgICAgICAgbV9qaXQubHNoaWZ0MzIoVHJ1c3RlZEltbTMyKGxvZ0VsZW1l
bnRTaXplKHR5cGUpIC0gMiksIHNjcmF0Y2hHUFIpOworICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgIGlmIChlbGVtZW50U2l6ZSh0eXBlKSA+IDEpCisgICAgICAgICAgICAgICAgbV9qaXQubHNo
aWZ0MzIoVHJ1c3RlZEltbTMyKGxvZ0VsZW1lbnRTaXplKHR5cGUpKSwgc2NyYXRjaEdQUik7Cisg
ICAgICAgICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMyksIHNjcmF0Y2hHUFIpOworICAg
ICAgICAgICAgbV9qaXQudXJzaGlmdDMyKFRydXN0ZWRJbW0zMigyKSwgc2NyYXRjaEdQUik7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGxvb3AgPSBtX2ppdC5s
YWJlbCgpOworICAgIG1faml0LnN1YjMyKFRydXN0ZWRJbW0zMigxKSwgc2NyYXRjaEdQUik7Cisg
ICAgbV9qaXQuc3RvcmUzMigKKyAgICAgICAgVHJ1c3RlZEltbTMyKDApLAorICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1i
bGVyOjpUaW1lc0ZvdXIpKTsKKyAgICBtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6
Ok5vblplcm8sIHNjcmF0Y2hHUFIpLmxpbmtUbyhsb29wLCAmbV9qaXQpOworICAgIGRvbmUubGlu
aygmbV9qaXQpOworI2VuZGlmIC8vIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgCisgICAgYWRkU2xv
d1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKAorICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9w
ZXJhdGlvbk5ld1R5cGVkQXJyYXlXaXRoU2l6ZUZvclR5cGUodHlwZSksCisgICAgICAgIHJlc3Vs
dEdQUiwgc3RydWN0dXJlLCBzaXplR1BSKSk7CisgICAgCisgICAgY2VsbFJlc3VsdChyZXN1bHRH
UFIsIG5vZGUpOworfQorCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVJbnQzMihFZGdl
IGVkZ2UpCiB7CiAgICAgaWYgKCFuZWVkc1R5cGVDaGVjayhlZGdlLCBTcGVjSW50MzIpKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2
aXNpb24gMTU0Mzc3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjQxLDYgKzEyNDEsMTIgQEAgcHVibGljOgogICAg
ICAgICByZXR1cm4gYXBwZW5kQ2FsbFNldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAg
fQogCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihQX0RGR09wZXJhdGlvbl9F
U3RKIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEdQUlJl
ZyBhcmcyKQorICAgIHsKKyAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRl
KFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgYXJnMik7CisgICAgICAgIHJldHVybiBhcHBlbmRD
YWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKKyAgICB9
CisKICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKENfREZHT3BlcmF0aW9uX0VK
IG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEpCiAgICAgewogICAgICAgICBt
X2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSk7CkBAIC0xNDk1LDYgKzE1MDEs
MTIgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFNldFJlc3VsdChvcGVyYXRp
b24sIHJlc3VsdCk7CiAgICAgfQogCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlv
bihQX0RGR09wZXJhdGlvbl9FU3RKIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIEdQUlJlZyBhcmcyVGFnLCBHUFJSZWcgYXJnMlBheWxvYWQpCisgICAgewor
ICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbVB0cihz
dHJ1Y3R1cmUpLCBhcmcyUGF5bG9hZCwgYXJnMlRhZyk7CisgICAgICAgIHJldHVybiBhcHBlbmRD
YWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKKyAgICB9
CisKICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKENfREZHT3BlcmF0aW9uX0VK
IG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzFUYWcsIEdQUlJlZyBhcmcxUGF5
bG9hZCkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShF
QUJJXzMyQklUX0RVTU1ZX0FSRyBhcmcxUGF5bG9hZCwgYXJnMVRhZyk7CkBAIC0xOTI1LDYgKzE5
MzcsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBjb21waWxlVG9TdHJpbmdPbkNlbGwoTm9kZSopOwog
ICAgIHZvaWQgY29tcGlsZU5ld1N0cmluZ09iamVjdChOb2RlKik7CiAgICAgCisgICAgdm9pZCBj
b21waWxlTmV3VHlwZWRBcnJheShOb2RlKik7CisgICAgCiAgICAgdm9pZCBjb21waWxlSW50ZWdl
ckNvbXBhcmUoTm9kZSosIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uKTsKICAg
ICB2b2lkIGNvbXBpbGVCb29sZWFuQ29tcGFyZShOb2RlKiwgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0
aW9uYWxDb25kaXRpb24pOwogICAgIHZvaWQgY29tcGlsZURvdWJsZUNvbXBhcmUoTm9kZSosIE1h
Y3JvQXNzZW1ibGVyOjpEb3VibGVDb25kaXRpb24pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAkocmV2aXNpb24gMTU0Mzc3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yMTEsNyArMjExLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam1wKEluc3RydWN0aW9uKiBj
dXJyZQogdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X29iamVjdChJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gY3VycmVudEluc3RydWN0
aW9uWzNdLnUub2JqZWN0QWxsb2NhdGlvblByb2ZpbGUtPnN0cnVjdHVyZSgpOwotICAgIHNpemVf
dCBhbGxvY2F0aW9uU2l6ZSA9IEpTT2JqZWN0OjphbGxvY2F0aW9uU2l6ZShzdHJ1Y3R1cmUtPmlu
bGluZUNhcGFjaXR5KCkpOworICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEpTRmluYWxPYmpl
Y3Q6OmFsbG9jYXRpb25TaXplKHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7CiAgICAgTWFy
a2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSAmbV92bS0+aGVhcC5hbGxvY2F0b3JGb3JPYmplY3RX
aXRob3V0RGVzdHJ1Y3RvcihhbGxvY2F0aW9uU2l6ZSk7CiAKICAgICBSZWdpc3RlcklEIHJlc3Vs
dFJlZyA9IHJlZ1QwOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMu
Y3BwCShyZXZpc2lvbiAxNTQzNzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9w
Y29kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Nyw3ICs5Nyw3IEBAIHZvaWQgSklUOjplbWl0
X29wX2ptcChJbnN0cnVjdGlvbiogY3VycmUKIHZvaWQgSklUOjplbWl0X29wX25ld19vYmplY3Qo
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9iamVjdEFsbG9jYXRpb25Qcm9maWxlLT5z
dHJ1Y3R1cmUoKTsKLSAgICBzaXplX3QgYWxsb2NhdGlvblNpemUgPSBKU09iamVjdDo6YWxsb2Nh
dGlvblNpemUoc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKKyAgICBzaXplX3QgYWxsb2Nh
dGlvblNpemUgPSBKU0ZpbmFsT2JqZWN0OjphbGxvY2F0aW9uU2l6ZShzdHJ1Y3R1cmUtPmlubGlu
ZUNhcGFjaXR5KCkpOwogICAgIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0gJm1fdm0tPmhl
YXAuYWxsb2NhdG9yRm9yT2JqZWN0V2l0aG91dERlc3RydWN0b3IoYWxsb2NhdGlvblNpemUpOwog
CiAgICAgUmVnaXN0ZXJJRCByZXN1bHRSZWcgPSByZWdUMDsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0FycmF5LmgJKHJldmlzaW9uIDE1NDM3NykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgs
MTIgQEAgY2xhc3MgSlNBcnJheSA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IAogcHVibGljOgog
ICAgIHR5cGVkZWYgSlNOb25GaW5hbE9iamVjdCBCYXNlOwogCisgICAgc3RhdGljIHNpemVfdCBh
bGxvY2F0aW9uU2l6ZShzaXplX3QgaW5saW5lQ2FwYWNpdHkpCisgICAgeworICAgICAgICBBU1NF
UlRfVU5VU0VEKGlubGluZUNhcGFjaXR5LCAhaW5saW5lQ2FwYWNpdHkpOworICAgICAgICByZXR1
cm4gc2l6ZW9mKEpTQXJyYXkpOworICAgIH0KKyAgICAgICAgCiBwcm90ZWN0ZWQ6CiAgICAgZXhw
bGljaXQgSlNBcnJheShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBCdXR0ZXJmbHkqIGJ1
dHRlcmZseSkKICAgICAgICAgOiBKU05vbkZpbmFsT2JqZWN0KHZtLCBzdHJ1Y3R1cmUsIGJ1dHRl
cmZseSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJW
aWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJh
eUJ1ZmZlclZpZXcuaAkocmV2aXNpb24gMTU0Mzc3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtOTEsNiArOTEs
MTIgQEAgcHVibGljOgogICAgICAgICAgICAgJiB+KHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgLSAx
KTsKICAgICB9CiAKKyAgICBzdGF0aWMgc2l6ZV90IGFsbG9jYXRpb25TaXplKHNpemVfdCBpbmxp
bmVDYXBhY2l0eSkKKyAgICB7CisgICAgICAgIEFTU0VSVF9VTlVTRUQoaW5saW5lQ2FwYWNpdHks
ICFpbmxpbmVDYXBhY2l0eSk7CisgICAgICAgIHJldHVybiBzaXplb2YoSlNBcnJheUJ1ZmZlclZp
ZXcpOworICAgIH0KKyAgICAgICAgCiBwcm90ZWN0ZWQ6CiAgICAgY2xhc3MgQ29uc3RydWN0aW9u
Q29udGV4dCB7CiAgICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENvbnN0cnVjdGlvbkNvbnRl
eHQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRB
cnJheVZpZXdDb25zdHJ1Y3RvcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9ySW5saW5l
cy5oCShyZXZpc2lvbiAxNTQzNzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9ySW5saW5lcy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xMDAsNyArMTAwLDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
Y29ucwogICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBpZiAoKGJ1ZmZlci0+Ynl0ZUxlbmd0
aCgpIC0gb2Zmc2V0KSAlIFZpZXdDbGFzczo6ZWxlbWVudFNpemUpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsICJBcnJheUJ1
ZmZlciBsZW5ndGggbWludXMgdGhlIGJ5dGVPZmZzZXQgaXMgbm90IGEgbXVsdGlwbGUgb2YgdGhl
IGVsZW1lbnQgc2l6ZS4iKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihl
eGVjLCBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsICJBcnJheUJ1ZmZlciBsZW5ndGggbWludXMgdGhl
IGJ5dGVPZmZzZXQgaXMgbm90IGEgbXVsdGlwbGUgb2YgdGhlIGVsZW1lbnQgc2l6ZSIpKTsKICAg
ICAgICAgICAgIGxlbmd0aCA9IChidWZmZXItPmJ5dGVMZW5ndGgoKSAtIG9mZnNldCkgLyBWaWV3
Q2xhc3M6OmVsZW1lbnRTaXplOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoVmlld0NsYXNzOjpjcmVhdGUoZXhlYywgc3RydWN0dXJlLCBidWZmZXIsIG9mZnNldCwg
bGVuZ3RoKSk7CkBAIC0xMzUsMTUgKzEzNSwxNSBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBjb25zCiAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50KDApLmlzSW50MzIoKSkKICAg
ICAgICAgbGVuZ3RoID0gZXhlYy0+YXJndW1lbnQoMCkuYXNJbnQzMigpOwogICAgIGVsc2UgaWYg
KCFleGVjLT5hcmd1bWVudCgwKS5pc051bWJlcigpKQotICAgICAgICByZXR1cm4gdGhyb3dWTUVy
cm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiSW52YWxpZCBhcnJheSBsZW5ndGggYXJn
dW1lbnQuIikpOworICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVF
cnJvcihleGVjLCAiSW52YWxpZCBhcnJheSBsZW5ndGggYXJndW1lbnQiKSk7CiAgICAgZWxzZSB7
CiAgICAgICAgIGxlbmd0aCA9IHN0YXRpY19jYXN0PGludD4oZXhlYy0+YXJndW1lbnQoMCkuYXNO
dW1iZXIoKSk7CiAgICAgICAgIGlmIChsZW5ndGggIT0gZXhlYy0+YXJndW1lbnQoMCkuYXNOdW1i
ZXIoKSkKLSAgICAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlVHlwZUVy
cm9yKGV4ZWMsICJJbnZhbGlkIGFycmF5IGxlbmd0aCBhcmd1bWVudCAoZnJhY3Rpb25hbCBsZW5n
dGhzIG5vdCBhbGxvd2VkKS4iKSk7CisgICAgICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4
ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiSW52YWxpZCBhcnJheSBsZW5ndGggYXJndW1lbnQg
KGZyYWN0aW9uYWwgbGVuZ3RocyBub3QgYWxsb3dlZCkiKSk7CiAgICAgfQogCiAgICAgaWYgKGxl
bmd0aCA8IDApCi0gICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlUmFuZ2VF
cnJvcihleGVjLCAiUmVxdWVzdGVkIGxlbmd0aCBpcyBuZWdhdGl2ZS4iKSk7CisgICAgICAgIHJl
dHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCAiUmVxdWVzdGVk
IGxlbmd0aCBpcyBuZWdhdGl2ZSIpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKFZpZXdD
bGFzczo6Y3JlYXRlKGV4ZWMsIHN0cnVjdHVyZSwgbGVuZ3RoKSk7CiB9CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkocmV2aXNpb24gMTU0Mzc3KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkod29ya2luZyBjb3B5KQpA
QCAtOTgsMTEgKzk4LDYgQEAgY2xhc3MgSlNPYmplY3QgOiBwdWJsaWMgSlNDZWxsIHsKIHB1Ymxp
YzoKICAgICB0eXBlZGVmIEpTQ2VsbCBCYXNlOwogICAgICAgICAKLSAgICBzdGF0aWMgc2l6ZV90
IGFsbG9jYXRpb25TaXplKHNpemVfdCBpbmxpbmVDYXBhY2l0eSkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBzaXplb2YoSlNPYmplY3QpICsgaW5saW5lQ2FwYWNpdHkgKiBzaXplb2YoV3JpdGVCYXJy
aWVyQmFzZTxVbmtub3duPik7Ci0gICAgfQotICAgICAgICAKICAgICBKU19FWFBPUlRfUFJJVkFU
RSBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgY29weUJhY2tpbmdTdG9yZShKU0NlbGwqLCBD
b3B5VmlzaXRvciYsIENvcHlUb2tlbik7CiAKQEAgLTEwMTcsNiArMTAxMiwxMSBAQCBjbGFzcyBK
U0ZpbmFsT2JqZWN0IDogcHVibGljIEpTT2JqZWN0IHsKIHB1YmxpYzoKICAgICB0eXBlZGVmIEpT
T2JqZWN0IEJhc2U7CiAKKyAgICBzdGF0aWMgc2l6ZV90IGFsbG9jYXRpb25TaXplKHNpemVfdCBp
bmxpbmVDYXBhY2l0eSkKKyAgICB7CisgICAgICAgIHJldHVybiBzaXplb2YoSlNPYmplY3QpICsg
aW5saW5lQ2FwYWNpdHkgKiBzaXplb2YoV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPik7CisgICAg
fQorICAgICAgICAKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgZGVmYXVsdFNpemUgPSA2NDsK
ICAgICBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGRlZmF1bHRJbmxpbmVDYXBhY2l0eSgpCiAgICAg
ewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJheVR5cGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlU
eXBlLmNwcAkocmV2aXNpb24gMTU0Mzc3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVHlwZWRBcnJheVR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAj
aW5jbHVkZSAiVHlwZWRBcnJheVR5cGUuaCIKIAogI2luY2x1ZGUgIkpTRGF0YVZpZXcuaCIKKyNp
bmNsdWRlICJKU1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnMuaCIKICNpbmNsdWRlICJKU1R5cGVkQXJy
YXlzLmgiCiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtNjEsNiArNjIsMzYgQEAgY29uc3QgQ2xhc3NJ
bmZvKiBjbGFzc0luZm9Gb3JUeXBlKFR5cGVkQQogICAgIHJldHVybiAwOwogfQogCitjb25zdCBD
bGFzc0luZm8qIGNvbnN0cnVjdG9yQ2xhc3NJbmZvRm9yVHlwZShUeXBlZEFycmF5VHlwZSB0eXBl
KQoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgTm90VHlwZWRBcnJheToKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgY2FzZSBUeXBlSW50ODoKKyAgICAgICAgcmV0dXJuIEpTSW50OEFy
cmF5Q29uc3RydWN0b3I6OmluZm8oKTsKKyAgICBjYXNlIFR5cGVVaW50ODoKKyAgICAgICAgcmV0
dXJuIEpTVWludDhBcnJheUNvbnN0cnVjdG9yOjppbmZvKCk7CisgICAgY2FzZSBUeXBlVWludDhD
bGFtcGVkOgorICAgICAgICByZXR1cm4gSlNVaW50OENsYW1wZWRBcnJheUNvbnN0cnVjdG9yOjpp
bmZvKCk7CisgICAgY2FzZSBUeXBlSW50MTY6CisgICAgICAgIHJldHVybiBKU0ludDE2QXJyYXlD
b25zdHJ1Y3Rvcjo6aW5mbygpOworICAgIGNhc2UgVHlwZVVpbnQxNjoKKyAgICAgICAgcmV0dXJu
IEpTVWludDE2QXJyYXlDb25zdHJ1Y3Rvcjo6aW5mbygpOworICAgIGNhc2UgVHlwZUludDMyOgor
ICAgICAgICByZXR1cm4gSlNJbnQzMkFycmF5Q29uc3RydWN0b3I6OmluZm8oKTsKKyAgICBjYXNl
IFR5cGVVaW50MzI6CisgICAgICAgIHJldHVybiBKU1VpbnQzMkFycmF5Q29uc3RydWN0b3I6Omlu
Zm8oKTsKKyAgICBjYXNlIFR5cGVGbG9hdDMyOgorICAgICAgICByZXR1cm4gSlNGbG9hdDMyQXJy
YXlDb25zdHJ1Y3Rvcjo6aW5mbygpOworICAgIGNhc2UgVHlwZUZsb2F0NjQ6CisgICAgICAgIHJl
dHVybiBKU0Zsb2F0NjRBcnJheUNvbnN0cnVjdG9yOjppbmZvKCk7CisgICAgY2FzZSBUeXBlRGF0
YVZpZXc6CisgICAgICAgIHJldHVybiBKU0RhdGFWaWV3Q29uc3RydWN0b3I6OmluZm8oKTsKKyAg
ICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsKK30K
KwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKIG5hbWVzcGFjZSBXVEYgewpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJheVR5cGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5VHlwZS5oCShyZXZpc2lvbiAxNTQz
NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlZEFycmF5VHlwZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC01Myw2ICs1MywxMyBAQCBpbmxpbmUgdW5zaWduZWQgdG9JbmRleChU
eXBlZEFycmF5VHlwZSB0CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPih0eXBlKSAt
IDE7CiB9CiAKK2lubGluZSBUeXBlZEFycmF5VHlwZSBpbmRleFRvVHlwZWRBcnJheVR5cGUodW5z
aWduZWQgaW5kZXgpCit7CisgICAgVHlwZWRBcnJheVR5cGUgcmVzdWx0ID0gc3RhdGljX2Nhc3Q8
VHlwZWRBcnJheVR5cGU+KGluZGV4ICsgMSk7CisgICAgQVNTRVJUKHJlc3VsdCA+PSBUeXBlSW50
OCAmJiByZXN1bHQgPD0gVHlwZURhdGFWaWV3KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiBp
bmxpbmUgYm9vbCBpc1R5cGVkVmlldyhUeXBlZEFycmF5VHlwZSB0eXBlKQogewogICAgIHN3aXRj
aCAodHlwZSkgewpAQCAtOTQsNiArMTAxLDcgQEAgaW5saW5lIHNpemVfdCBlbGVtZW50U2l6ZShU
eXBlZEFycmF5VHlwZQogfQogCiBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mb0ZvclR5cGUoVHlw
ZWRBcnJheVR5cGUpOworY29uc3QgQ2xhc3NJbmZvKiBjb25zdHJ1Y3RvckNsYXNzSW5mb0ZvclR5
cGUoVHlwZWRBcnJheVR5cGUpOwogCiBpbmxpbmUgYm9vbCBpc0ludChUeXBlZEFycmF5VHlwZSB0
eXBlKQogewpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMTU0Mzc3KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTMtMDgtMjAgIEZpbGlwIFBp
emxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBERkcgc2hvdWxkIGlubGluZSBuZXcg
dHlwZWRBcnJheSgpCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMjAwMjIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICAqIGZhc3QvanMvcmVncmVzcy9GbG9hdDY0QXJyYXktYWxsb2MtbG9uZy1saXZlZC1leHBl
Y3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvanMvcmVncmVzcy9GbG9hdDY0QXJyYXkt
YWxsb2MtbG9uZy1saXZlZC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2pzL3JlZ3Jlc3Mv
SW50MTZBcnJheS1hbGxvYy1sb25nLWxpdmVkLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAg
ICogZmFzdC9qcy9yZWdyZXNzL0ludDE2QXJyYXktYWxsb2MtbG9uZy1saXZlZC5odG1sOiBBZGRl
ZC4KKyAgICAgICAgKiBmYXN0L2pzL3JlZ3Jlc3MvSW50OEFycmF5LWFsbG9jLWxvbmctbGl2ZWQt
ZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2pzL3JlZ3Jlc3MvSW50OEFycmF5
LWFsbG9jLWxvbmctbGl2ZWQuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9qcy9yZWdyZXNz
L3NjcmlwdC10ZXN0cy9GbG9hdDY0QXJyYXktYWxsb2MtbG9uZy1saXZlZC5qczogQWRkZWQuCisg
ICAgICAgICogZmFzdC9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9JbnQxNkFycmF5LWFsbG9jLWxv
bmctbGl2ZWQuanM6IEFkZGVkLgorICAgICAgICAqIGZhc3QvanMvcmVncmVzcy9zY3JpcHQtdGVz
dHMvSW50MzJBcnJheS1hbGxvYy1sb25nLWxpdmVkLmpzOgorICAgICAgICAqIGZhc3QvanMvcmVn
cmVzcy9zY3JpcHQtdGVzdHMvSW50OEFycmF5LWFsbG9jLWxvbmctbGl2ZWQuanM6IEFkZGVkLgor
CiAyMDEzLTA4LTIwICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAg
ZmFzdC9qcy9yZWdyZXNzL2Vtc2NyaXB0ZW4tY3ViZTJoYXNoIGlzIGZhaWxpbmcgb24gYWxsIHRo
ZSBNYWMgYm90cwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL0Zsb2F0NjRBcnJh
eS1hbGxvYy1sb25nLWxpdmVkLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9mYXN0L2pzL3JlZ3Jlc3MvRmxvYXQ2NEFycmF5LWFsbG9jLWxvbmctbGl2ZWQtZXhwZWN0ZWQu
dHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL0Zsb2F0NjRB
cnJheS1hbGxvYy1sb25nLWxpdmVkLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDEwIEBACitKU1JlZ3Jlc3MvRmxvYXQ2NEFycmF5LWFsbG9jLWxvbmctbGl2ZWQKKworT24g
c3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93
ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1Mgbm8gZXhjZXB0aW9uIHRocm93bgorUEFT
UyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExh
eW91dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9GbG9hdDY0QXJyYXktYWxsb2MtbG9uZy1saXZlZC5o
dG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9GbG9hdDY0QXJy
YXktYWxsb2MtbG9uZy1saXZlZC5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFz
dC9qcy9yZWdyZXNzL0Zsb2F0NjRBcnJheS1hbGxvYy1sb25nLWxpdmVkLmh0bWwJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwxMiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9E
VEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMv
anMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0i
cmVzb3VyY2VzL3JlZ3Jlc3MtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJzY3JpcHQt
dGVzdHMvRmxvYXQ2NEFycmF5LWFsbG9jLWxvbmctbGl2ZWQuanMiPjwvc2NyaXB0PgorPHNjcmlw
dCBzcmM9InJlc291cmNlcy9yZWdyZXNzLXBvc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9
Ii4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1s
PgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL0ludDhBcnJheS1hbGxvYy1sb25n
LWxpdmVkLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2pzL3Jl
Z3Jlc3MvSW50OEFycmF5LWFsbG9jLWxvbmctbGl2ZWQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAw
KQorKysgTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL0ludDhBcnJheS1hbGxvYy1sb25nLWxp
dmVkLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwIEBACitKU1JlZ3Jl
c3MvSW50OEFycmF5LWFsbG9jLWxvbmctbGl2ZWQKKworT24gc3VjY2VzcywgeW91IHdpbGwgc2Vl
IGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUi
LgorCisKK1BBU1Mgbm8gZXhjZXB0aW9uIHRocm93bgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQg
aXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvanMvcmVn
cmVzcy9JbnQ4QXJyYXktYWxsb2MtbG9uZy1saXZlZC5odG1sCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9JbnQ4QXJyYXktYWxsb2MtbG9uZy1saXZlZC5odG1sCShy
ZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL0ludDhBcnJheS1hbGxv
Yy1sb25nLWxpdmVkLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMiBAQAorPCFET0NU
WVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4K
KzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9o
ZWFkPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3JlZ3Jlc3MtcHJlLmpzIj48L3Nj
cmlwdD4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvSW50OEFycmF5LWFsbG9jLWxvbmctbGl2
ZWQuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9yZWdyZXNzLXBvc3QuanMi
Pjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwv
c2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdy
ZXNzL0ludDE2QXJyYXktYWxsb2MtbG9uZy1saXZlZC1leHBlY3RlZC50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL0ludDE2QXJyYXktYWxsb2MtbG9uZy1saXZl
ZC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2pzL3JlZ3Jl
c3MvSW50MTZBcnJheS1hbGxvYy1sb25nLWxpdmVkLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDEwIEBACitKU1JlZ3Jlc3MvSW50MTZBcnJheS1hbGxvYy1sb25nLWxpdmVk
CisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMs
IGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIG5vIGV4Y2VwdGlvbiB0aHJv
d24KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCklu
ZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2pzL3JlZ3Jlc3MvSW50MTZBcnJheS1hbGxvYy1sb25nLWxp
dmVkLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL0ludDE2
QXJyYXktYWxsb2MtbG9uZy1saXZlZC5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMv
ZmFzdC9qcy9yZWdyZXNzL0ludDE2QXJyYXktYWxsb2MtbG9uZy1saXZlZC5odG1sCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMTIgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8v
RFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2Vz
L2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdCBzcmM9
InJlc291cmNlcy9yZWdyZXNzLXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ic2NyaXB0
LXRlc3RzL0ludDE2QXJyYXktYWxsb2MtbG9uZy1saXZlZC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0
IHNyYz0icmVzb3VyY2VzL3JlZ3Jlc3MtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0i
Li4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+
CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL0Zsb2F0NjRB
cnJheS1hbGxvYy1sb25nLWxpdmVkLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qv
anMvcmVncmVzcy9zY3JpcHQtdGVzdHMvRmxvYXQ2NEFycmF5LWFsbG9jLWxvbmctbGl2ZWQuanMJ
KHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3Rz
L0Zsb2F0NjRBcnJheS1hbGxvYy1sb25nLWxpdmVkLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMTQgQEAKK3ZhciBhcnJheSA9IG5ldyBBcnJheSgxMDAwMDApOworCitmb3IgKHZhciBpID0g
MDsgaSA8IDIwMDAwMDA7ICsraSkKKyAgICBhcnJheVtpICUgYXJyYXkubGVuZ3RoXSA9IG5ldyBG
bG9hdDY0QXJyYXkoOSk7CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyArK2kp
IHsKKyAgICB2YXIgc3ViQXJyYXkgPSBhcnJheVtpXTsKKyAgICBpZiAoc3ViQXJyYXkubGVuZ3Ro
ICE9IDkpCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIGFycmF5IGxlbmd0aDogIiArIHN1YkFy
cmF5Lmxlbmd0aDsKKyAgICBmb3IgKHZhciBqID0gMDsgaiA8IHN1YkFycmF5Lmxlbmd0aDsgKytq
KSB7CisgICAgICAgIGlmIChzdWJBcnJheVtqXSAhPSAwKQorICAgICAgICAgICAgdGhyb3cgIkVy
cm9yOiBhcnJheSBhdCAiICsgaSArICIgaGFzIG5vbi16ZXJvIGVsZW1lbnQ6ICIgKyBBcnJheS5w
cm90b3R5cGUuam9pbi5jYWxsKHN1YkFycmF5LCAiLCIpOworICAgIH0KK30KSW5kZXg6IExheW91
dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvSW50OEFycmF5LWFsbG9jLWxvbmct
bGl2ZWQuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL3Njcmlw
dC10ZXN0cy9JbnQ4QXJyYXktYWxsb2MtbG9uZy1saXZlZC5qcwkocmV2aXNpb24gMCkKKysrIExh
eW91dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvSW50OEFycmF5LWFsbG9jLWxv
bmctbGl2ZWQuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNCBAQAordmFyIGFycmF5ID0g
bmV3IEFycmF5KDEwMDAwMCk7CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMjAwMDAwMDsgKytpKQor
ICAgIGFycmF5W2kgJSBhcnJheS5sZW5ndGhdID0gbmV3IEludDhBcnJheSg5KTsKKworZm9yICh2
YXIgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7ICsraSkgeworICAgIHZhciBzdWJBcnJheSA9IGFy
cmF5W2ldOworICAgIGlmIChzdWJBcnJheS5sZW5ndGggIT0gOSkKKyAgICAgICAgdGhyb3cgIkVy
cm9yOiBiYWQgYXJyYXkgbGVuZ3RoOiAiICsgc3ViQXJyYXkubGVuZ3RoOworICAgIGZvciAodmFy
IGogPSAwOyBqIDwgc3ViQXJyYXkubGVuZ3RoOyArK2opIHsKKyAgICAgICAgaWYgKHN1YkFycmF5
W2pdICE9IDApCisgICAgICAgICAgICB0aHJvdyAiRXJyb3I6IGFycmF5IGF0ICIgKyBpICsgIiBo
YXMgbm9uLXplcm8gZWxlbWVudDogIiArIEFycmF5LnByb3RvdHlwZS5qb2luLmNhbGwoc3ViQXJy
YXksICIsIik7CisgICAgfQorfQpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL3Nj
cmlwdC10ZXN0cy9JbnQxNkFycmF5LWFsbG9jLWxvbmctbGl2ZWQuanMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9JbnQxNkFycmF5LWFsbG9j
LWxvbmctbGl2ZWQuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2pzL3JlZ3Jl
c3Mvc2NyaXB0LXRlc3RzL0ludDE2QXJyYXktYWxsb2MtbG9uZy1saXZlZC5qcwkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDE0IEBACit2YXIgYXJyYXkgPSBuZXcgQXJyYXkoMTAwMDAwKTsKKwor
Zm9yICh2YXIgaSA9IDA7IGkgPCAyMDAwMDAwOyArK2kpCisgICAgYXJyYXlbaSAlIGFycmF5Lmxl
bmd0aF0gPSBuZXcgSW50MTZBcnJheSg5KTsKKworZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheS5s
ZW5ndGg7ICsraSkgeworICAgIHZhciBzdWJBcnJheSA9IGFycmF5W2ldOworICAgIGlmIChzdWJB
cnJheS5sZW5ndGggIT0gOSkKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgYXJyYXkgbGVuZ3Ro
OiAiICsgc3ViQXJyYXkubGVuZ3RoOworICAgIGZvciAodmFyIGogPSAwOyBqIDwgc3ViQXJyYXku
bGVuZ3RoOyArK2opIHsKKyAgICAgICAgaWYgKHN1YkFycmF5W2pdICE9IDApCisgICAgICAgICAg
ICB0aHJvdyAiRXJyb3I6IGFycmF5IGF0ICIgKyBpICsgIiBoYXMgbm9uLXplcm8gZWxlbWVudDog
IiArIEFycmF5LnByb3RvdHlwZS5qb2luLmNhbGwoc3ViQXJyYXksICIsIik7CisgICAgfQorfQpJ
bmRleDogTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9JbnQzMkFycmF5
LWFsbG9jLWxvbmctbGl2ZWQuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9qcy9y
ZWdyZXNzL3NjcmlwdC10ZXN0cy9JbnQzMkFycmF5LWFsbG9jLWxvbmctbGl2ZWQuanMJKHJldmlz
aW9uIDE1NDM3NykKKysrIExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMv
SW50MzJBcnJheS1hbGxvYy1sb25nLWxpdmVkLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0xLDkgKzEs
MTQgQEAKIHZhciBhcnJheSA9IG5ldyBBcnJheSgxMDAwMDApOwogCiBmb3IgKHZhciBpID0gMDsg
aSA8IDIwMDAwMDA7ICsraSkKLSAgICBhcnJheVtpICUgYXJyYXkubGVuZ3RoXSA9IG5ldyBJbnQz
MkFycmF5KDEwKTsKKyAgICBhcnJheVtpICUgYXJyYXkubGVuZ3RoXSA9IG5ldyBJbnQzMkFycmF5
KDkpOwogCiBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgKytpKSB7Ci0gICAgaWYg
KGFycmF5W2ldLmxlbmd0aCAhPSAxMCkKLSAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgYXJyYXkg
bGVuZ3RoOiAiICsgYXJyYXlbaV0ubGVuZ3RoOworICAgIHZhciBzdWJBcnJheSA9IGFycmF5W2ld
OworICAgIGlmIChzdWJBcnJheS5sZW5ndGggIT0gOSkKKyAgICAgICAgdGhyb3cgIkVycm9yOiBi
YWQgYXJyYXkgbGVuZ3RoOiAiICsgc3ViQXJyYXkubGVuZ3RoOworICAgIGZvciAodmFyIGogPSAw
OyBqIDwgc3ViQXJyYXkubGVuZ3RoOyArK2opIHsKKyAgICAgICAgaWYgKHN1YkFycmF5W2pdICE9
IDApCisgICAgICAgICAgICB0aHJvdyAiRXJyb3I6IGFycmF5IGF0ICIgKyBpICsgIiBoYXMgbm9u
LXplcm8gZWxlbWVudDogIiArIEFycmF5LnByb3RvdHlwZS5qb2luLmNhbGwoc3ViQXJyYXksICIs
Iik7CisgICAgfQogfQo=
</data>
<flag name="commit-queue"
          id="231234"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>209247</attachid>
            <date>2013-08-20 20:35:25 -0700</date>
            <delta_ts>2013-08-21 08:52:57 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>58974</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU0Mzc3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg2IEBA
CisyMDEzLTA4LTIwICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIHNob3VsZCBpbmxpbmUgbmV3IHR5cGVkQXJyYXkoKQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIwMDIyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBBZGRzIGlubGluaW5nIG9mIHR5cGVk
IGFycmF5IGFsbG9jYXRpb25zIGluIHRoZSBERkcuIEFueSBvcGVyYXRpb24gb2YgdGhlCisgICAg
ICAgIGZvcm06CisgICAgICAgIAorICAgICAgICAgICAgbmV3IGZvbyhibGFoKQorICAgICAgICAK
KyAgICAgICAgb3I6CisgICAgICAgIAorICAgICAgICAgICAgZm9vKGJsYWgpCisgICAgICAgIAor
ICAgICAgICB3aGVyZSAnZm9vJyBpcyBhIHR5cGVkIGFycmF5IGNvbnN0cnVjdG9yIGFuZCAnYmxh
aCcgaXMgZXhhY3RseSBvbmUgYXJndW1lbnQsCisgICAgICAgIGlzIHR1cm5lZCBpbnRvIHRoZSBO
ZXdUeXBlZEFycmF5IGludHJpbnNpYy4gTGF0ZXIsIG9mIGNoaWxkMSAoaS5lLiAnYmxhaCcpCisg
ICAgICAgIGlzIHByZWRpY3RlZCBpbnRlZ2VyLCB3ZSBnZW5lcmF0ZSBpbmxpbmUgY29kZSBmb3Ig
YW4gYWxsb2NhdGlvbi4gT3RoZXJ3aXNlCisgICAgICAgIGl0IHR1cm5zIGludG8gYSBjYWxsIHRv
IGFuIG9wZXJhdGlvbiB0aGF0IGJlaGF2ZXMgbGlrZSB0aGUgY29uc3RydWN0b3Igd291bGQKKyAg
ICAgICAgaWYgaXQgd2FzIHBhc3NlZCBvbmUgYXJndW1lbnQgKGkuZS4gaXQgbWF5IHdyYXAgYSBi
dWZmZXIgb3IgaXQgbWF5IGNyZWF0ZSBhCisgICAgICAgIGNvcHkgb3IgYW5vdGhlciBhcnJheSwg
b3IgaXQgbWF5IGFsbG9jYXRlIGFuIGFycmF5IG9mIHRoYXQgbGVuZ3RoKS4KKworICAgICAgICAq
IGJ5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmNwcDoKKyAgICAgICAgKEpTQzo6c3BlY3VsYXRpb25G
cm9tVHlwZWRBcnJheVR5cGUpOgorICAgICAgICAoSlNDOjpzcGVjdWxhdGlvbkZyb21DbGFzc0lu
Zm8pOgorICAgICAgICAqIGJ5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmg6CisgICAgICAgICogZGZn
L0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkRGRzo6Ojpl
eGVjdXRlRWZmZWN0cyk6CisgICAgICAgICogZGZnL0RGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhh
c2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2U6OnBy
b3BhZ2F0ZSk6CisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlVHlwZWRBcnJheUNvbnN0cnVjdG9yKToK
KyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlQ29uc3RhbnRJbnRlcm5h
bEZ1bmN0aW9uKToKKyAgICAgICAgKiBkZmcvREZHQ0NhbGxIZWxwZXJzLmg6CisgICAgICAgIChK
U0M6OkRGRzo6Q0NhbGxIZWxwZXJzOjpzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUpOgorICAg
ICAgICAqIGRmZy9ERkdDU0VQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6
OnB1dFN0cnVjdHVyZVN0b3JlRWxpbWluYXRpb24pOgorICAgICAgICAqIGRmZy9ERkdDbG9iYmVy
aXplLmg6CisgICAgICAgIChKU0M6OkRGRzo6Y2xvYmJlcml6ZSk6CisgICAgICAgICogZGZnL0RG
R0ZpeHVwUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OmZpeHVwTm9k
ZSk6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFw
aDo6ZHVtcCk6CisgICAgICAgICogZGZnL0RGR05vZGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpO
b2RlOjpoYXNUeXBlZEFycmF5VHlwZSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6dHlwZWRB
cnJheVR5cGUpOgorICAgICAgICAqIGRmZy9ERkdOb2RlVHlwZS5oOgorICAgICAgICAqIGRmZy9E
RkdPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpuZXdUeXBlZEFycmF5V2l0aFNp
emUpOgorICAgICAgICAoSlNDOjpERkc6Om5ld1R5cGVkQXJyYXlXaXRoT25lQXJndW1lbnQpOgor
ICAgICAgICAqIGRmZy9ERkdPcGVyYXRpb25zLmg6CisgICAgICAgIChKU0M6OkRGRzo6b3BlcmF0
aW9uTmV3VHlwZWRBcnJheVdpdGhTaXplRm9yVHlwZSk6CisgICAgICAgIChKU0M6OkRGRzo6b3Bl
cmF0aW9uTmV3VHlwZWRBcnJheVdpdGhPbmVBcmd1bWVudEZvclR5cGUpOgorICAgICAgICAqIGRm
Zy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
UHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2U6OnByb3BhZ2F0ZSk6CisgICAgICAgICogZGZnL0RG
R1NhZmVUb0V4ZWN1dGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpzYWZlVG9FeGVjdXRlKToKKyAg
ICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpjb21waWxlTmV3VHlwZWRBcnJheSk6CisgICAgICAgICogZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmg6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNhbGxP
cGVyYXRpb24pOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZn
L0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZl
SklUOjpjb21waWxlKToKKyAgICAgICAgKiBqaXQvSklUT3Bjb2Rlcy5jcHA6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9uZXdfb2JqZWN0KToKKyAgICAgICAgKiBqaXQvSklUT3Bjb2RlczMy
XzY0LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX25ld19vYmplY3QpOgorICAgICAg
ICAqIHJ1bnRpbWUvSlNBcnJheS5oOgorICAgICAgICAoSlNDOjpKU0FycmF5OjphbGxvY2F0aW9u
U2l6ZSk6CisgICAgICAgICogcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5oOgorICAgICAgICAo
SlNDOjpKU0FycmF5QnVmZmVyVmlldzo6YWxsb2NhdGlvblNpemUpOgorICAgICAgICAqIHJ1bnRp
bWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcklubGluZXMuaDoKKyAgICAgICAg
KEpTQzo6Y29uc3RydWN0R2VuZXJpY1R5cGVkQXJyYXlWaWV3KToKKyAgICAgICAgKiBydW50aW1l
L0pTT2JqZWN0Lmg6CisgICAgICAgIChKU0M6OkpTRmluYWxPYmplY3Q6OmFsbG9jYXRpb25TaXpl
KToKKyAgICAgICAgKiBydW50aW1lL1R5cGVkQXJyYXlUeXBlLmNwcDoKKyAgICAgICAgKEpTQzo6
Y29uc3RydWN0b3JDbGFzc0luZm9Gb3JUeXBlKToKKyAgICAgICAgKiBydW50aW1lL1R5cGVkQXJy
YXlUeXBlLmg6CisgICAgICAgIChKU0M6OmluZGV4VG9UeXBlZEFycmF5VHlwZSk6CisKIDIwMTMt
MDgtMjAgIEdhdmluIEJhcnJhY2xvdWdoICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgogCiAgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjAwOTMKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmNw
cAkocmV2aXNpb24gMTU0Mzc3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Nw
ZWN1bGF0ZWRUeXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ5LDI0ICsyNDksOSBAQCB2b2lk
IGR1bXBTcGVjdWxhdGlvbkFiYnJldmlhdGVkKFByaW50U3RyCiAgICAgb3V0LnByaW50KHNwZWN1
bGF0aW9uVG9BYmJyZXZpYXRlZFN0cmluZyh2YWx1ZSkpOwogfQogCi1TcGVjdWxhdGVkVHlwZSBz
cGVjdWxhdGlvbkZyb21DbGFzc0luZm8oY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8pCitTcGVj
dWxhdGVkVHlwZSBzcGVjdWxhdGlvbkZyb21UeXBlZEFycmF5VHlwZShUeXBlZEFycmF5VHlwZSB0
eXBlKQogewotICAgIGlmIChjbGFzc0luZm8gPT0gSlNGaW5hbE9iamVjdDo6aW5mbygpKQotICAg
ICAgICByZXR1cm4gU3BlY0ZpbmFsT2JqZWN0OwotICAgIAotICAgIGlmIChjbGFzc0luZm8gPT0g
SlNBcnJheTo6aW5mbygpKQotICAgICAgICByZXR1cm4gU3BlY0FycmF5OwotICAgIAotICAgIGlm
IChjbGFzc0luZm8gPT0gQXJndW1lbnRzOjppbmZvKCkpCi0gICAgICAgIHJldHVybiBTcGVjQXJn
dW1lbnRzOwotICAgIAotICAgIGlmIChjbGFzc0luZm8gPT0gU3RyaW5nT2JqZWN0OjppbmZvKCkp
Ci0gICAgICAgIHJldHVybiBTcGVjU3RyaW5nT2JqZWN0OwotICAgIAotICAgIGlmIChjbGFzc0lu
Zm8tPmlzU3ViQ2xhc3NPZihKU0Z1bmN0aW9uOjppbmZvKCkpKQotICAgICAgICByZXR1cm4gU3Bl
Y0Z1bmN0aW9uOwotICAgIAotICAgIHN3aXRjaCAoY2xhc3NJbmZvLT50eXBlZEFycmF5U3RvcmFn
ZVR5cGUpIHsKKyAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICBjYXNlIFR5cGVJbnQ4OgogICAgICAg
ICByZXR1cm4gU3BlY0ludDhBcnJheTsKICAgICBjYXNlIFR5cGVJbnQxNjoKQEAgLTI4NSw5ICsy
NzAsMzMgQEAgU3BlY3VsYXRlZFR5cGUgc3BlY3VsYXRpb25Gcm9tQ2xhc3NJbmZvKAogICAgICAg
ICByZXR1cm4gU3BlY0Zsb2F0MzJBcnJheTsKICAgICBjYXNlIFR5cGVGbG9hdDY0OgogICAgICAg
ICByZXR1cm4gU3BlY0Zsb2F0NjRBcnJheTsKLSAgICBkZWZhdWx0OgorICAgIGNhc2UgTm90VHlw
ZWRBcnJheToKKyAgICBjYXNlIFR5cGVEYXRhVmlldzoKICAgICAgICAgYnJlYWs7CiAgICAgfQor
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIFNwZWNOb25lOwor
fQorCitTcGVjdWxhdGVkVHlwZSBzcGVjdWxhdGlvbkZyb21DbGFzc0luZm8oY29uc3QgQ2xhc3NJ
bmZvKiBjbGFzc0luZm8pCit7CisgICAgaWYgKGNsYXNzSW5mbyA9PSBKU0ZpbmFsT2JqZWN0Ojpp
bmZvKCkpCisgICAgICAgIHJldHVybiBTcGVjRmluYWxPYmplY3Q7CisgICAgCisgICAgaWYgKGNs
YXNzSW5mbyA9PSBKU0FycmF5OjppbmZvKCkpCisgICAgICAgIHJldHVybiBTcGVjQXJyYXk7Cisg
ICAgCisgICAgaWYgKGNsYXNzSW5mbyA9PSBBcmd1bWVudHM6OmluZm8oKSkKKyAgICAgICAgcmV0
dXJuIFNwZWNBcmd1bWVudHM7CisgICAgCisgICAgaWYgKGNsYXNzSW5mbyA9PSBTdHJpbmdPYmpl
Y3Q6OmluZm8oKSkKKyAgICAgICAgcmV0dXJuIFNwZWNTdHJpbmdPYmplY3Q7CisgICAgCisgICAg
aWYgKGNsYXNzSW5mby0+aXNTdWJDbGFzc09mKEpTRnVuY3Rpb246OmluZm8oKSkpCisgICAgICAg
IHJldHVybiBTcGVjRnVuY3Rpb247CisgICAgCisgICAgaWYgKGlzVHlwZWRWaWV3KGNsYXNzSW5m
by0+dHlwZWRBcnJheVN0b3JhZ2VUeXBlKSkKKyAgICAgICAgcmV0dXJuIHNwZWN1bGF0aW9uRnJv
bVR5cGVkQXJyYXlUeXBlKGNsYXNzSW5mby0+dHlwZWRBcnJheVN0b3JhZ2VUeXBlKTsKICAgICAK
ICAgICBpZiAoY2xhc3NJbmZvLT5pc1N1YkNsYXNzT2YoSlNPYmplY3Q6OmluZm8oKSkpCiAgICAg
ICAgIHJldHVybiBTcGVjT2JqZWN0T3RoZXI7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuaAkocmV2aXNpb24gMTU0Mzc3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTMzMiw2ICszMzIsNyBAQCBTcGVjdWxhdGVkVHlwZSBzcGVjdWxhdGlvbkZyb21TdHJ1
Y3R1cmUoCiBTcGVjdWxhdGVkVHlwZSBzcGVjdWxhdGlvbkZyb21DZWxsKEpTQ2VsbCopOwogU3Bl
Y3VsYXRlZFR5cGUgc3BlY3VsYXRpb25Gcm9tVmFsdWUoSlNWYWx1ZSk7CiAKK1NwZWN1bGF0ZWRU
eXBlIHNwZWN1bGF0aW9uRnJvbVR5cGVkQXJyYXlUeXBlKFR5cGVkQXJyYXlUeXBlKTsgLy8gb25s
eSB2YWxpZCBmb3IgdHlwZWQgdmlld3MuCiBUeXBlZEFycmF5VHlwZSB0eXBlZEFycmF5VHlwZUZy
b21TcGVjdWxhdGlvbihTcGVjdWxhdGVkVHlwZSk7CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5l
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJ
bnRlcnByZXRlcklubGluZXMuaAkocmV2aXNpb24gMTU0Mzc3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xMDQzLDYgKzEwNDMsMjQgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0
U3RhdGVUeQogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0FycmF5KTsKICAgICAg
ICAgbV9zdGF0ZS5zZXRIYXZlU3RydWN0dXJlcyh0cnVlKTsKICAgICAgICAgYnJlYWs7CisgICAg
ICAgIAorICAgIGNhc2UgTmV3VHlwZWRBcnJheToKKyAgICAgICAgc3dpdGNoIChub2RlLT5jaGls
ZDEoKS51c2VLaW5kKCkpIHsKKyAgICAgICAgY2FzZSBJbnQzMlVzZToKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIFVudHlwZWRVc2U6CisgICAgICAgICAgICBjbG9iYmVyV29ybGQo
bm9kZS0+Y29kZU9yaWdpbiwgY2xvYmJlckxpbWl0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGZvck5vZGUobm9kZSkuc2V0
KAorICAgICAgICAgICAgbV9ncmFwaCwKKyAgICAgICAgICAgIG1fZ3JhcGguZ2xvYmFsT2JqZWN0
Rm9yKG5vZGUtPmNvZGVPcmlnaW4pLT50eXBlZEFycmF5U3RydWN0dXJlKAorICAgICAgICAgICAg
ICAgIG5vZGUtPnR5cGVkQXJyYXlUeXBlKCkpKTsKKyAgICAgICAgbV9zdGF0ZS5zZXRIYXZlU3Ry
dWN0dXJlcyh0cnVlKTsKKyAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNlIE5l
d1JlZ2V4cDoKICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQobV9ncmFwaCwgbV9ncmFwaC5nbG9i
YWxPYmplY3RGb3Iobm9kZS0+Y29kZU9yaWdpbiktPnJlZ0V4cFN0cnVjdHVyZSgpKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYWNrd2FyZHNQ
cm9wYWdhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTU0Mzc3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzI0LDYgKzMyNCwxNCBAQCBwcml2YXRlOgogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KICAgICAgICAgICAgIAorICAgICAgICBjYXNlIE5ld1R5cGVkQXJyYXk6IHsKKyAgICAg
ICAgICAgIC8vIE5lZ2F0aXZlIHplcm8gaXMgbm90IG9ic2VydmFibGUuIE5hTiB2ZXJzdXMgdW5k
ZWZpbmVkIGFyZSBvbmx5IG9ic2VydmFibGUKKyAgICAgICAgICAgIC8vIGluIHRoYXQgeW91IHdv
dWxkIGdldCBhIGRpZmZlcmVudCBleGNlcHRpb24gbWVzc2FnZS4gU28sIGxpa2UsIHdoYXRldmVy
OiB3ZQorICAgICAgICAgICAgLy8gY2xhaW0gaGVyZSB0aGF0IE5hTiB2LiB1bmRlZmluZWQgaXMg
b2JzZXJ2YWJsZS4KKyAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKE5vZGVV
c2VkQXNJbnQgfCBOb2RlVXNlZEFzTnVtYmVyIHwgTm9kZVVzZWRBc090aGVyKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKICAgICAgICAgY2FzZSBTdHJpbmdD
aGFyQXQ6IHsKICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKE5vZGVVc2Vk
QXNWYWx1ZSk7CiAgICAgICAgICAgICBub2RlLT5jaGlsZDIoKS0+bWVyZ2VGbGFncyhOb2RlVXNl
ZEFzVmFsdWUgfCBOb2RlVXNlZEFzSW50KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAxNTQzNzcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTY4LDYgKzE2OCw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBoYW5kbGVJbmxpbmluZyhO
b2RlKiBjYWxsVGFyZ2V0Tm9kZSwgaW50IHJlc3VsdE9wZXJhbmQsIGNvbnN0IENhbGxMaW5rU3Rh
dHVzJiwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMs
IHVuc2lnbmVkIG5leHRPZmZzZXQsIENvZGVTcGVjaWFsaXphdGlvbktpbmQpOwogICAgIC8vIEhh
bmRsZSBpbnRyaW5zaWMgZnVuY3Rpb25zLiBSZXR1cm4gdHJ1ZSBpZiBpdCBzdWNjZWVkZWQsIGZh
bHNlIGlmIHdlIG5lZWQgdG8gcGxhbnQgYSBjYWxsLgogICAgIGJvb2wgaGFuZGxlSW50cmluc2lj
KGludCByZXN1bHRPcGVyYW5kLCBJbnRyaW5zaWMsIGludCByZWdpc3Rlck9mZnNldCwgaW50IGFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uKTsKKyAg
ICBib29sIGhhbmRsZVR5cGVkQXJyYXlDb25zdHJ1Y3RvcihpbnQgcmVzdWx0T3BlcmFuZCwgSW50
ZXJuYWxGdW5jdGlvbiosIGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzLCBUeXBlZEFycmF5VHlwZSB0eXBlKTsKICAgICBib29sIGhhbmRsZUNvbnN0YW50
SW50ZXJuYWxGdW5jdGlvbihpbnQgcmVzdWx0T3BlcmFuZCwgSW50ZXJuYWxGdW5jdGlvbiosIGlu
dCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBTcGVjdWxh
dGVkVHlwZSBwcmVkaWN0aW9uLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsKICAgICBOb2RlKiBo
YW5kbGVQdXRCeU9mZnNldChOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyLCBQcm9wZXJ0
eU9mZnNldCwgTm9kZSogdmFsdWUpOwogICAgIE5vZGUqIGhhbmRsZUdldEJ5T2Zmc2V0KFNwZWN1
bGF0ZWRUeXBlLCBOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBQcm9wZXJ0
eU9mZnNldCk7CkBAIC0xNTg4LDYgKzE1ODksNTggQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFu
ZGxlSW50cmluc2ljKGludAogICAgIH0KIH0KIAorYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxl
VHlwZWRBcnJheUNvbnN0cnVjdG9yKAorICAgIGludCByZXN1bHRPcGVyYW5kLCBJbnRlcm5hbEZ1
bmN0aW9uKiBmdW5jdGlvbiwgaW50IHJlZ2lzdGVyT2Zmc2V0LAorICAgIGludCBhcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcywgVHlwZWRBcnJheVR5cGUgdHlwZSkKK3sKKyAgICBpZiAoIWlzVHlw
ZWRWaWV3KHR5cGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgaWYgKGZ1bmN0
aW9uLT5jbGFzc0luZm8oKSAhPSBjb25zdHJ1Y3RvckNsYXNzSW5mb0ZvclR5cGUodHlwZSkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBpZiAoZnVuY3Rpb24tPmdsb2JhbE9iamVj
dCgpICE9IG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIC8vIFdlIG9ubHkgaGF2ZSBhbiBpbnRyaW5z
aWMgZm9yIHRoZSBjYXNlIHdoZXJlIHlvdSBzYXk6CisgICAgLy8KKyAgICAvLyBuZXcgRm9vQXJy
YXkoYmxhaCk7CisgICAgLy8KKyAgICAvLyBPZiBjb3Vyc2UsICdibGFoJyBjb3VsZCBiZSBhbnkg
b2YgdGhlIGZvbGxvd2luZzoKKyAgICAvLworICAgIC8vIC0gSW50ZWdlciwgaW5kaWNhdGluZyB0
aGF0IHlvdSB3YW50IHRvIGFsbG9jYXRlIGFuIGFycmF5IG9mIHRoYXQgbGVuZ3RoLgorICAgIC8v
ICAgVGhpcyBpcyB0aGUgdGhpbmcgd2UncmUgaG9waW5nIGZvciwgYW5kIHdoYXQgd2UgY2FuIGFj
dHVhbGx5IGRvIG1lYW5pbmdmdWwKKyAgICAvLyAgIG9wdGltaXphdGlvbnMgZm9yLgorICAgIC8v
CisgICAgLy8gLSBBcnJheSBidWZmZXIsIGluZGljYXRpbmcgdGhhdCB5b3Ugd2FudCB0byBjcmVh
dGUgYSB2aWV3IG9udG8gdGhhdCBfZW50aXJlXworICAgIC8vICAgYnVmZmVyLgorICAgIC8vCisg
ICAgLy8gLSBOb24tYnVmZmVyIG9iamVjdCwgaW5kaWNhdGluZyB0aGF0IHlvdSB3YW50IHRvIGNy
ZWF0ZSBhIGNvcHkgb2YgdGhhdAorICAgIC8vICAgb2JqZWN0IGJ5IHByZXRlbmRpbmcgdGhhdCBp
dCBxdWFja3MgbGlrZSBhbiBhcnJheS4KKyAgICAvLworICAgIC8vIC0gQW55dGhpbmcgZWxzZSwg
aW5kaWNhdGluZyB0aGF0IHlvdSB3YW50IHRvIGhhdmUgYW4gZXhjZXB0aW9uIHRocm93biBhdAor
ICAgIC8vICAgeW91LgorICAgIC8vCisgICAgLy8gVGhlIGludHJpbnNpYywgTmV3VHlwZWRBcnJh
eSwgd2lsbCBiZWhhdmUgYXMgaWYgaXQgY291bGQgZG8gYW55IG9mIHRoZXNlCisgICAgLy8gdGhp
bmdzIHVwIHVudGlsIHdlIGRvIEZpeHVwLiBUaGVyZWFmdGVyLCBpZiBjaGlsZDEgKGkuZS4gJ2Js
YWgnKSBpcworICAgIC8vIHByZWRpY3RlZCBJbnQzMiwgdGhlbiB3ZSBsb2NrIGl0IGluIGFzIGEg
bm9ybWFsIHR5cGVkIGFycmF5IGFsbG9jYXRpb24uCisgICAgLy8gT3RoZXJ3aXNlLCBOZXdUeXBl
ZEFycmF5IHR1cm5zIGludG8gYSB0b3RhbGx5IG9wYXF1ZSBmdW5jdGlvbiBjYWxsIHRoYXQKKyAg
ICAvLyBtYXkgY2xvYmJlciB0aGUgd29ybGQgLSBieSB2aXJ0dWUgb2YgaXQgYWNjZXNzaW5nIHBy
b3BlcnRpZXMgb24gd2hhdCBjb3VsZAorICAgIC8vIGJlIGFuIG9iamVjdC4KKyAgICAvLworICAg
IC8vIE5vdGUgdGhhdCBhbHRob3VnaCB0aGUgZ2VuZXJpYyBmb3JtIG9mIE5ld1R5cGVkQXJyYXkg
c291bmRzIHNvcnQgb2YgYXdmdWwsCisgICAgLy8gaXQgaXMgYWN0dWFsbHkgcXVpdGUgbGlrZWx5
IHRvIGJlIG1vcmUgZWZmaWNpZW50IHRoYW4gYSBmdWxseSBnZW5lcmljCisgICAgLy8gQ29uc3Ry
dWN0LiBTbywgd2UgbWlnaHQgd2FudCB0byB0aGluayBhYm91dCBtYWtpbmcgTmV3VHlwZWRBcnJh
eSB2YXJpYWRpYywKKyAgICAvLyBvciBlbHNlIG1ha2luZyBDb25zdHJ1Y3Qgbm90IHN1cGVyIHNs
b3cuCisgICAgCisgICAgaWYgKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICE9IDIpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBzZXQocmVzdWx0T3BlcmFuZCwKKyAgICAgICAg
YWRkVG9HcmFwaChOZXdUeXBlZEFycmF5LCBPcEluZm8odHlwZSksIGdldChyZWdpc3Rlck9mZnNl
dCArIGFyZ3VtZW50VG9PcGVyYW5kKDEpKSkpOworICAgIHJldHVybiB0cnVlOworfQorCiBib29s
IEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVDb25zdGFudEludGVybmFsRnVuY3Rpb24oCiAgICAgaW50
IHJlc3VsdE9wZXJhbmQsIEludGVybmFsRnVuY3Rpb24qIGZ1bmN0aW9uLCBpbnQgcmVnaXN0ZXJP
ZmZzZXQsCiAgICAgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBTcGVjdWxhdGVkVHlw
ZSBwcmVkaWN0aW9uLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCkBAIC0xNjE2LDcgKzE2
NjksOSBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVDb25zdGFudEludGVyCiAgICAgICAg
IHNldChyZXN1bHRPcGVyYW5kLAogICAgICAgICAgICAgYWRkVG9HcmFwaChOb2RlOjpWYXJBcmcs
IE5ld0FycmF5LCBPcEluZm8oQXJyYXlXaXRoVW5kZWNpZGVkKSwgT3BJbmZvKDApKSk7CiAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgIH0gZWxzZSBpZiAoZnVuY3Rpb24tPmNsYXNzSW5mbygpID09
IFN0cmluZ0NvbnN0cnVjdG9yOjppbmZvKCkpIHsKKyAgICB9CisgICAgCisgICAgaWYgKGZ1bmN0
aW9uLT5jbGFzc0luZm8oKSA9PSBTdHJpbmdDb25zdHJ1Y3Rvcjo6aW5mbygpKSB7CiAgICAgICAg
IE5vZGUqIHJlc3VsdDsKICAgICAgICAgCiAgICAgICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcyA8PSAxKQpAQCAtMTYzMSw2ICsxNjg2LDEzIEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6
OmhhbmRsZUNvbnN0YW50SW50ZXIKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIAor
ICAgIGZvciAodW5zaWduZWQgdHlwZUluZGV4ID0gMDsgdHlwZUluZGV4IDwgTlVNQkVSX09GX1RZ
UEVEX0FSUkFZX1RZUEVTOyArK3R5cGVJbmRleCkgeworICAgICAgICBpZiAoaGFuZGxlVHlwZWRB
cnJheUNvbnN0cnVjdG9yKAorICAgICAgICAgICAgICAgIHJlc3VsdE9wZXJhbmQsIGZ1bmN0aW9u
LCByZWdpc3Rlck9mZnNldCwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsCisgICAgICAgICAg
ICAgICAgaW5kZXhUb1R5cGVkQXJyYXlUeXBlKHR5cGVJbmRleCkpKQorICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorICAgIAogICAgIHJldHVybiBmYWxzZTsKIH0KIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDQ2FsbEhlbHBlcnMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NDYWxsSGVscGVycy5oCShyZXZpc2lvbiAxNTQz
NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NDYWxsSGVscGVycy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMjgsNiArMjI4LDE1IEBAIHB1YmxpYzoKICAgICAgICAgYWRkQ2FsbEFy
Z3VtZW50KGFyZzMpOwogICAgIH0KIAorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXR1cEFyZ3Vt
ZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbVB0ciBhcmcxLCBHUFJSZWcgYXJnMiwgR1BSUmVn
IGFyZzMpCisgICAgeworICAgICAgICByZXNldENhbGxBcmd1bWVudHMoKTsKKyAgICAgICAgYWRk
Q2FsbEFyZ3VtZW50KEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKKyAgICAgICAgYWRkQ2Fs
bEFyZ3VtZW50KGFyZzEpOworICAgICAgICBhZGRDYWxsQXJndW1lbnQoYXJnMik7CisgICAgICAg
IGFkZENhbGxBcmd1bWVudChhcmczKTsKKyAgICB9CisKICAgICBBTFdBWVNfSU5MSU5FIHZvaWQg
c2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW1QdHIgYXJnMSwgVHJ1c3RlZElt
bVB0ciBhcmcyLCBUcnVzdGVkSW1tUHRyIGFyZzMpCiAgICAgewogICAgICAgICByZXNldENhbGxB
cmd1bWVudHMoKTsKQEAgLTg0Nyw2ICs4NTYsMTMgQEAgcHVibGljOgogICAgICAgICBtb3ZlKEdQ
UkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwogICAgIH0K
IAorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1
c3RlZEltbVB0ciBhcmcxLCBHUFJSZWcgYXJnMiwgR1BSUmVnIGFyZzMpCisgICAgeworICAgICAg
ICBzZXR1cFR3b1N0dWJBcmdzPEdQUkluZm86OmFyZ3VtZW50R1BSMiwgR1BSSW5mbzo6YXJndW1l
bnRHUFIzPihhcmcyLCBhcmczKTsKKyAgICAgICAgbW92ZShhcmcxLCBHUFJJbmZvOjphcmd1bWVu
dEdQUjEpOworICAgICAgICBtb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZv
Ojphcmd1bWVudEdQUjApOworICAgIH0KKwogICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXR1cEFy
Z3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbVB0ciBhcmcxLCBUcnVzdGVkSW1tUHRyIGFy
ZzIsIFRydXN0ZWRJbW1QdHIgYXJnMykKICAgICB7CiAgICAgICAgIG1vdmUoYXJnMSwgR1BSSW5m
bzo6YXJndW1lbnRHUFIxKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NF
UGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NF
UGhhc2UuY3BwCShyZXZpc2lvbiAxNTQzNzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0NTRVBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTg1LDYgKzU4NSw3IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICBjYXNlIFRvU3RyaW5nOgogICAgICAgICAgICAgY2FzZSBOZXdTdHJp
bmdPYmplY3Q6CiAgICAgICAgICAgICBjYXNlIE1ha2VSb3BlOgorICAgICAgICAgICAgY2FzZSBO
ZXdUeXBlZEFycmF5OgogICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgLy8gVGhpcyBlaXRoZXIgZXhpdHMsIGNhdXNlcyBhIEdDIChsYXp5IHN0
cmluZyBhbGxvY2F0aW9uKSwgb3IgY2xvYmJlcnMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ2xvYmJlcml6ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ2xvYmJlcml6ZS5oCShyZXZpc2lvbiAxNTQzNzcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkod29ya2luZyBjb3B5KQpAQCAtNTE5LDYgKzUx
OSwyMSBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgICAg
IHdyaXRlKEdDU3RhdGUpOwogICAgICAgICByZXR1cm47CiAgICAgICAgIAorICAgIGNhc2UgTmV3
VHlwZWRBcnJheToKKyAgICAgICAgc3dpdGNoIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpIHsK
KyAgICAgICAgY2FzZSBJbnQzMlVzZToKKyAgICAgICAgICAgIHJlYWQoR0NTdGF0ZSk7CisgICAg
ICAgICAgICB3cml0ZShHQ1N0YXRlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2Fz
ZSBVbnR5cGVkVXNlOgorICAgICAgICAgICAgcmVhZChXb3JsZCk7CisgICAgICAgICAgICB3cml0
ZShXb3JsZCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgICAgIAogICAgIGNhc2UgUmVnRXhwRXhlYzoKICAgICBjYXNlIFJlZ0V4
cFRlc3Q6CiAgICAgICAgIHJlYWQoUmVnRXhwU3RhdGUpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCShyZXZpc2lvbiAxNTQzNzcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02NzMsNiArNjczLDE1IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogICAgICAgICAgICAgCisgICAgICAgIGNhc2UgTmV3VHlwZWRBcnJheTogeworICAgICAgICAg
ICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpIHsKKyAgICAg
ICAgICAgICAgICBzZXRVc2VLaW5kQW5kVW5ib3hJZlByb2ZpdGFibGU8SW50MzJVc2U+KG5vZGUt
PmNoaWxkMSgpKTsKKyAgICAgICAgICAgICAgICBub2RlLT5jbGVhckZsYWdzKE5vZGVNdXN0R2Vu
ZXJhdGUgfCBOb2RlQ2xvYmJlcnNXb3JsZCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCiAg
ICAgICAgIGNhc2UgTmV3QXJyYXlXaXRoU2l6ZTogewogICAgICAgICAgICAgc2V0VXNlS2luZEFu
ZFVuYm94SWZQcm9maXRhYmxlPEludDMyVXNlPihub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAg
ICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZp
c2lvbiAxNTQzNzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjQ2LDYgKzI0Niw4IEBAIHZvaWQgR3JhcGg6OmR1bXAoUHJpbnRT
dHJlYW0mIG91dCwgY29uc3QKICAgICB9CiAgICAgaWYgKG5vZGUtPmhhc0luZGV4aW5nVHlwZSgp
KQogICAgICAgICBvdXQucHJpbnQoY29tbWEsIEluZGV4aW5nVHlwZUR1bXAobm9kZS0+aW5kZXhp
bmdUeXBlKCkpKTsKKyAgICBpZiAobm9kZS0+aGFzVHlwZWRBcnJheVR5cGUoKSkKKyAgICAgICAg
b3V0LnByaW50KGNvbW1hLCBub2RlLT50eXBlZEFycmF5VHlwZSgpKTsKICAgICBpZiAobm9kZS0+
aGFzUGhpKCkpCiAgICAgICAgIG91dC5wcmludChjb21tYSwgIl4iLCBub2RlLT5waGkoKS0+aW5k
ZXgoKSk7CiAgICAgaWYgKG5vZGUtPmhhc0V4ZWN1dGlvbkNvdW50ZXIoKSkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCShyZXZpc2lvbiAxNTQzNzcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNjM1LDYgKzYzNSwy
NCBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIHJldHVybiBtX29wSW5mbzsKICAgICB9CiAgICAg
CisgICAgYm9vbCBoYXNUeXBlZEFycmF5VHlwZSgpCisgICAgeworICAgICAgICBzd2l0Y2ggKG9w
KCkpIHsKKyAgICAgICAgY2FzZSBOZXdUeXBlZEFycmF5OgorICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IH0KKyAgICB9CisgICAgCisgICAgVHlwZWRBcnJheVR5cGUgdHlwZWRBcnJheVR5cGUoKQorICAg
IHsKKyAgICAgICAgQVNTRVJUKGhhc1R5cGVkQXJyYXlUeXBlKCkpOworICAgICAgICBUeXBlZEFy
cmF5VHlwZSByZXN1bHQgPSBzdGF0aWNfY2FzdDxUeXBlZEFycmF5VHlwZT4obV9vcEluZm8pOwor
ICAgICAgICBBU1NFUlQoaXNUeXBlZFZpZXcocmVzdWx0KSk7CisgICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgfQorICAgIAogICAgIGJvb2wgaGFzSW5saW5lQ2FwYWNpdHkoKQogICAgIHsKICAg
ICAgICAgcmV0dXJuIG9wKCkgPT0gQ3JlYXRlVGhpczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTm9kZVR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR05vZGVUeXBlLmgJKHJldmlzaW9uIDE1NDM3NykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjAyLDYgKzIwMiw3
IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICBtYWNybyhOZXdBcnJheSwg
Tm9kZVJlc3VsdEpTIHwgTm9kZUhhc1ZhckFyZ3MpIFwKICAgICBtYWNybyhOZXdBcnJheVdpdGhT
aXplLCBOb2RlUmVzdWx0SlMpIFwKICAgICBtYWNybyhOZXdBcnJheUJ1ZmZlciwgTm9kZVJlc3Vs
dEpTKSBcCisgICAgbWFjcm8oTmV3VHlwZWRBcnJheSwgTm9kZVJlc3VsdEpTIHwgTm9kZUNsb2Ji
ZXJzV29ybGQgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oTmV3UmVnZXhwLCBOb2Rl
UmVzdWx0SlMpIFwKICAgICBcCiAgICAgLyogTm9kZXMgZm9yIG1pc2Mgb3BlcmF0aW9ucy4gKi9c
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHJl
dmlzaW9uIDE1NDM3NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9u
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMSwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ2LDYgKzQ2LDcgQEAKICNpbmNsdWRlICJPYmplY3RDb25z
dHJ1Y3Rvci5oIgogI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJTdHJpbmdDb25z
dHJ1Y3Rvci5oIgorI2luY2x1ZGUgIlR5cGVkQXJyYXlJbmxpbmVzLmgiCiAjaW5jbHVkZSA8d3Rm
L0lubGluZUFTTS5oPgogCiAjaWYgRU5BQkxFKEpJVCkKQEAgLTM4Nyw2ICszODgsNzYgQEAgQUxX
QVlTX0lOTElORSBzdGF0aWMgdm9pZCBERkdfT1BFUkFUSU9OIAogICAgIH0KIH0KIAordGVtcGxh
dGU8dHlwZW5hbWUgVmlld0NsYXNzPgorY2hhciogbmV3VHlwZWRBcnJheVdpdGhTaXplKEV4ZWNT
dGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGludDMyX3Qgc2l6ZSkKK3sKKyAgICBW
TSYgdm0gPSBleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZt
LCBleGVjKTsKKyAgICBpZiAoc2l6ZSA8IDApIHsKKyAgICAgICAgdGhyb3dFcnJvcihleGVjLCBj
cmVhdGVSYW5nZUVycm9yKGV4ZWMsICJSZXF1ZXN0ZWQgbGVuZ3RoIGlzIG5lZ2F0aXZlIikpOwor
ICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxjaGFyKj4o
Vmlld0NsYXNzOjpjcmVhdGUoZXhlYywgc3RydWN0dXJlLCBzaXplKSk7Cit9CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFZpZXdDbGFzcz4KK2NoYXIqIG5ld1R5cGVkQXJyYXlXaXRoT25lQXJndW1lbnQo
CisgICAgRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFZhbHVlKQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgTmF0aXZl
Q2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIAorICAgIEpTVmFsdWUgdmFs
dWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICAKKyAgICBpZiAoSlNBcnJh
eUJ1ZmZlcioganNCdWZmZXIgPSBqc0R5bmFtaWNDYXN0PEpTQXJyYXlCdWZmZXIqPih2YWx1ZSkp
IHsKKyAgICAgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBidWZmZXIgPSBqc0J1ZmZlci0+aW1wbCgp
OworICAgICAgICAKKyAgICAgICAgaWYgKGJ1ZmZlci0+Ynl0ZUxlbmd0aCgpICUgVmlld0NsYXNz
OjplbGVtZW50U2l6ZSkgeworICAgICAgICAgICAgdGhyb3dFcnJvcihleGVjLCBjcmVhdGVSYW5n
ZUVycm9yKGV4ZWMsICJBcnJheUJ1ZmZlciBsZW5ndGggbWludXMgdGhlIGJ5dGVPZmZzZXQgaXMg
bm90IGEgbXVsdGlwbGUgb2YgdGhlIGVsZW1lbnQgc2l6ZSIpKTsKKyAgICAgICAgICAgIHJldHVy
biAwOworICAgICAgICB9CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8Y2hhcio+KAorICAg
ICAgICAgICAgVmlld0NsYXNzOjpjcmVhdGUoCisgICAgICAgICAgICAgICAgZXhlYywgc3RydWN0
dXJlLCBidWZmZXIsIDAsIGJ1ZmZlci0+Ynl0ZUxlbmd0aCgpIC8gVmlld0NsYXNzOjplbGVtZW50
U2l6ZSkpOworICAgIH0KKyAgICAKKyAgICBpZiAoSlNPYmplY3QqIG9iamVjdCA9IGpzRHluYW1p
Y0Nhc3Q8SlNPYmplY3QqPih2YWx1ZSkpIHsKKyAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gb2Jq
ZWN0LT5nZXQoZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoKS50b1VJbnQzMihleGVjKTsK
KyAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgcmV0dXJuIDA7
CisgICAgICAgIAorICAgICAgICBWaWV3Q2xhc3MqIHJlc3VsdCA9IFZpZXdDbGFzczo6Y3JlYXRl
VW5pbml0aWFsaXplZChleGVjLCBzdHJ1Y3R1cmUsIGxlbmd0aCk7CisgICAgICAgIGlmICghcmVz
dWx0KQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIAorICAgICAgICBpZiAoIXJlc3Vs
dC0+c2V0KGV4ZWMsIG9iamVjdCwgMCwgbGVuZ3RoKSkKKyAgICAgICAgICAgIHJldHVybiAwOwor
ICAgICAgICAKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxjaGFyKj4ocmVzdWx0KTsKKyAg
ICB9CisgICAgCisgICAgaW50IGxlbmd0aDsKKyAgICBpZiAodmFsdWUuaXNJbnQzMigpKQorICAg
ICAgICBsZW5ndGggPSB2YWx1ZS5hc0ludDMyKCk7CisgICAgZWxzZSBpZiAoIXZhbHVlLmlzTnVt
YmVyKCkpIHsKKyAgICAgICAgdGhyb3dFcnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywg
IkludmFsaWQgYXJyYXkgbGVuZ3RoIGFyZ3VtZW50IikpOworICAgICAgICByZXR1cm4gMDsKKyAg
ICB9IGVsc2UgeworICAgICAgICBsZW5ndGggPSBzdGF0aWNfY2FzdDxpbnQ+KHZhbHVlLmFzTnVt
YmVyKCkpOworICAgICAgICBpZiAobGVuZ3RoICE9IHZhbHVlLmFzTnVtYmVyKCkpIHsKKyAgICAg
ICAgICAgIHRocm93RXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJJbnZhbGlkIGFy
cmF5IGxlbmd0aCBhcmd1bWVudCAoZnJhY3Rpb25hbCBsZW5ndGhzIG5vdCBhbGxvd2VkKSIpKTsK
KyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIGlmIChs
ZW5ndGggPCAwKSB7CisgICAgICAgIHRocm93RXJyb3IoZXhlYywgY3JlYXRlUmFuZ2VFcnJvcihl
eGVjLCAiUmVxdWVzdGVkIGxlbmd0aCBpcyBuZWdhdGl2ZSIpKTsKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgfQorICAgIAorICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8Y2hhcio+KFZpZXdDbGFzczo6
Y3JlYXRlKGV4ZWMsIHN0cnVjdHVyZSwgbGVuZ3RoKSk7Cit9CisKIGV4dGVybiAiQyIgewogCiBF
bmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblRvVGhpcyhFeGVjU3RhdGUqIGV4
ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcCkKQEAgLTEzNjYsNiArMTQzNywxMTQgQEAgY2hh
ciogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdBcnJheUJ1ZgogICAgIHJldHVybiBiaXR3aXNl
X2Nhc3Q8Y2hhcio+KGNvbnN0cnVjdEFycmF5KGV4ZWMsIGFycmF5U3RydWN0dXJlLCBleGVjLT5j
b2RlQmxvY2soKS0+Y29uc3RhbnRCdWZmZXIoc3RhcnQpLCBzaXplKSk7CiB9CiAKK2NoYXIqIERG
R19PUEVSQVRJT04gb3BlcmF0aW9uTmV3SW50OEFycmF5V2l0aFNpemUoCisgICAgRXhlY1N0YXRl
KiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgaW50MzJfdCBsZW5ndGgpCit7CisgICAgcmV0
dXJuIG5ld1R5cGVkQXJyYXlXaXRoU2l6ZTxKU0ludDhBcnJheT4oZXhlYywgc3RydWN0dXJlLCBs
ZW5ndGgpOworfQorCitjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0ludDhBcnJheVdp
dGhPbmVBcmd1bWVudCgKKyAgICBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJl
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit7CisgICAgcmV0dXJuIG5ld1R5cGVkQXJy
YXlXaXRoT25lQXJndW1lbnQ8SlNJbnQ4QXJyYXk+KGV4ZWMsIHN0cnVjdHVyZSwgZW5jb2RlZFZh
bHVlKTsKK30KKworY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdJbnQxNkFycmF5V2l0
aFNpemUoCisgICAgRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgaW50MzJf
dCBsZW5ndGgpCit7CisgICAgcmV0dXJuIG5ld1R5cGVkQXJyYXlXaXRoU2l6ZTxKU0ludDE2QXJy
YXk+KGV4ZWMsIHN0cnVjdHVyZSwgbGVuZ3RoKTsKK30KKworY2hhciogREZHX09QRVJBVElPTiBv
cGVyYXRpb25OZXdJbnQxNkFycmF5V2l0aE9uZUFyZ3VtZW50KAorICAgIEV4ZWNTdGF0ZSogZXhl
YywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3sK
KyAgICByZXR1cm4gbmV3VHlwZWRBcnJheVdpdGhPbmVBcmd1bWVudDxKU0ludDE2QXJyYXk+KGV4
ZWMsIHN0cnVjdHVyZSwgZW5jb2RlZFZhbHVlKTsKK30KKworY2hhciogREZHX09QRVJBVElPTiBv
cGVyYXRpb25OZXdJbnQzMkFycmF5V2l0aFNpemUoCisgICAgRXhlY1N0YXRlKiBleGVjLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgaW50MzJfdCBsZW5ndGgpCit7CisgICAgcmV0dXJuIG5ld1R5cGVk
QXJyYXlXaXRoU2l6ZTxKU0ludDMyQXJyYXk+KGV4ZWMsIHN0cnVjdHVyZSwgbGVuZ3RoKTsKK30K
KworY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdJbnQzMkFycmF5V2l0aE9uZUFyZ3Vt
ZW50KAorICAgIEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3sKKyAgICByZXR1cm4gbmV3VHlwZWRBcnJheVdpdGhPbmVB
cmd1bWVudDxKU0ludDMyQXJyYXk+KGV4ZWMsIHN0cnVjdHVyZSwgZW5jb2RlZFZhbHVlKTsKK30K
KworY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdVaW50OEFycmF5V2l0aFNpemUoCisg
ICAgRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgaW50MzJfdCBsZW5ndGgp
Cit7CisgICAgcmV0dXJuIG5ld1R5cGVkQXJyYXlXaXRoU2l6ZTxKU1VpbnQ4QXJyYXk+KGV4ZWMs
IHN0cnVjdHVyZSwgbGVuZ3RoKTsKK30KKworY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25O
ZXdVaW50OEFycmF5V2l0aE9uZUFyZ3VtZW50KAorICAgIEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3sKKyAgICByZXR1
cm4gbmV3VHlwZWRBcnJheVdpdGhPbmVBcmd1bWVudDxKU1VpbnQ4QXJyYXk+KGV4ZWMsIHN0cnVj
dHVyZSwgZW5jb2RlZFZhbHVlKTsKK30KKworY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25O
ZXdVaW50OENsYW1wZWRBcnJheVdpdGhTaXplKAorICAgIEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIGludDMyX3QgbGVuZ3RoKQoreworICAgIHJldHVybiBuZXdUeXBlZEFy
cmF5V2l0aFNpemU8SlNVaW50OENsYW1wZWRBcnJheT4oZXhlYywgc3RydWN0dXJlLCBsZW5ndGgp
OworfQorCitjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1VpbnQ4Q2xhbXBlZEFycmF5
V2l0aE9uZUFyZ3VtZW50KAorICAgIEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3sKKyAgICByZXR1cm4gbmV3VHlwZWRB
cnJheVdpdGhPbmVBcmd1bWVudDxKU1VpbnQ4Q2xhbXBlZEFycmF5PihleGVjLCBzdHJ1Y3R1cmUs
IGVuY29kZWRWYWx1ZSk7Cit9CisKK2NoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3VWlu
dDE2QXJyYXlXaXRoU2l6ZSgKKyAgICBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0
dXJlLCBpbnQzMl90IGxlbmd0aCkKK3sKKyAgICByZXR1cm4gbmV3VHlwZWRBcnJheVdpdGhTaXpl
PEpTVWludDE2QXJyYXk+KGV4ZWMsIHN0cnVjdHVyZSwgbGVuZ3RoKTsKK30KKworY2hhciogREZH
X09QRVJBVElPTiBvcGVyYXRpb25OZXdVaW50MTZBcnJheVdpdGhPbmVBcmd1bWVudCgKKyAgICBF
eGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkVmFsdWUpCit7CisgICAgcmV0dXJuIG5ld1R5cGVkQXJyYXlXaXRoT25lQXJndW1lbnQ8SlNV
aW50MTZBcnJheT4oZXhlYywgc3RydWN0dXJlLCBlbmNvZGVkVmFsdWUpOworfQorCitjaGFyKiBE
RkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1VpbnQzMkFycmF5V2l0aFNpemUoCisgICAgRXhlY1N0
YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgaW50MzJfdCBsZW5ndGgpCit7CisgICAg
cmV0dXJuIG5ld1R5cGVkQXJyYXlXaXRoU2l6ZTxKU1VpbnQzMkFycmF5PihleGVjLCBzdHJ1Y3R1
cmUsIGxlbmd0aCk7Cit9CisKK2NoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3VWludDMy
QXJyYXlXaXRoT25lQXJndW1lbnQoCisgICAgRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQoreworICAgIHJldHVybiBuZXdU
eXBlZEFycmF5V2l0aE9uZUFyZ3VtZW50PEpTVWludDMyQXJyYXk+KGV4ZWMsIHN0cnVjdHVyZSwg
ZW5jb2RlZFZhbHVlKTsKK30KKworY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdGbG9h
dDMyQXJyYXlXaXRoU2l6ZSgKKyAgICBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0
dXJlLCBpbnQzMl90IGxlbmd0aCkKK3sKKyAgICByZXR1cm4gbmV3VHlwZWRBcnJheVdpdGhTaXpl
PEpTRmxvYXQzMkFycmF5PihleGVjLCBzdHJ1Y3R1cmUsIGxlbmd0aCk7Cit9CisKK2NoYXIqIERG
R19PUEVSQVRJT04gb3BlcmF0aW9uTmV3RmxvYXQzMkFycmF5V2l0aE9uZUFyZ3VtZW50KAorICAg
IEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRWYWx1ZSkKK3sKKyAgICByZXR1cm4gbmV3VHlwZWRBcnJheVdpdGhPbmVBcmd1bWVudDxK
U0Zsb2F0MzJBcnJheT4oZXhlYywgc3RydWN0dXJlLCBlbmNvZGVkVmFsdWUpOworfQorCitjaGFy
KiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0Zsb2F0NjRBcnJheVdpdGhTaXplKAorICAgIEV4
ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGludDMyX3QgbGVuZ3RoKQorewor
ICAgIHJldHVybiBuZXdUeXBlZEFycmF5V2l0aFNpemU8SlNGbG9hdDY0QXJyYXk+KGV4ZWMsIHN0
cnVjdHVyZSwgbGVuZ3RoKTsKK30KKworY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdG
bG9hdDY0QXJyYXlXaXRoT25lQXJndW1lbnQoCisgICAgRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQoreworICAgIHJldHVy
biBuZXdUeXBlZEFycmF5V2l0aE9uZUFyZ3VtZW50PEpTRmxvYXQ2NEFycmF5PihleGVjLCBzdHJ1
Y3R1cmUsIGVuY29kZWRWYWx1ZSk7Cit9CisKIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04g
b3BlcmF0aW9uTmV3UmVnZXhwKEV4ZWNTdGF0ZSogZXhlYywgdm9pZCogcmVnZXhwUHRyKQogewog
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09wZXJhdGlvbnMuaAkocmV2aXNpb24gMTU0Mzc3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPcGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEyMiw2ICsxMjIsNyBAQCB0
eXBlZGVmIGNoYXIqIERGR19PUEVSQVRJT04gKCpQX0RGR09wZXJhCiB0eXBlZGVmIGNoYXIqIERG
R19PUEVSQVRJT04gKCpQX0RGR09wZXJhdGlvbl9FUykoRXhlY1N0YXRlKiwgc2l6ZV90KTsKIHR5
cGVkZWYgY2hhciogREZHX09QRVJBVElPTiAoKlBfREZHT3BlcmF0aW9uX0VTSnNzKShFeGVjU3Rh
dGUqLCBzaXplX3QsIEpTU3RyaW5nKik7CiB0eXBlZGVmIGNoYXIqIERGR19PUEVSQVRJT04gKCpQ
X0RGR09wZXJhdGlvbl9FU3QpKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSopOwordHlwZWRlZiBjaGFy
KiBERkdfT1BFUkFUSU9OICgqUF9ERkdPcGVyYXRpb25fRVN0SikoRXhlY1N0YXRlKiwgU3RydWN0
dXJlKiwgRW5jb2RlZEpTVmFsdWUpOwogdHlwZWRlZiBjaGFyKiBERkdfT1BFUkFUSU9OICgqUF9E
RkdPcGVyYXRpb25fRVN0UFMpKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIHZvaWQqLCBzaXplX3Qp
OwogdHlwZWRlZiBjaGFyKiBERkdfT1BFUkFUSU9OICgqUF9ERkdPcGVyYXRpb25fRVN0U1MpKEV4
ZWNTdGF0ZSosIFN0cnVjdHVyZSosIHNpemVfdCwgc2l6ZV90KTsKIHR5cGVkZWYgY2hhciogREZH
X09QRVJBVElPTiAoKlBfREZHT3BlcmF0aW9uX0VTdFopKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSos
IGludDMyX3QpOwpAQCAtMTUyLDYgKzE1MywyNCBAQCBjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJh
dGlvbk5ld0FycmF5KEV4CiBjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0FycmF5QnVm
ZmVyKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIHNpemVfdCwgc2l6ZV90KSBXVEZfSU5URVJOQUw7
CiBjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0VtcHR5QXJyYXkoRXhlY1N0YXRlKiwg
U3RydWN0dXJlKikgV1RGX0lOVEVSTkFMOwogY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25O
ZXdBcnJheVdpdGhTaXplKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIGludDMyX3QpIFdURl9JTlRF
Uk5BTDsKK2NoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3SW50OEFycmF5V2l0aFNpemUo
RXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgaW50MzJfdCkgV1RGX0lOVEVSTkFMOworY2hhciogREZH
X09QRVJBVElPTiBvcGVyYXRpb25OZXdJbnQ4QXJyYXlXaXRoT25lQXJndW1lbnQoRXhlY1N0YXRl
KiwgU3RydWN0dXJlKiwgRW5jb2RlZEpTVmFsdWUpIFdURl9JTlRFUk5BTDsKK2NoYXIqIERGR19P
UEVSQVRJT04gb3BlcmF0aW9uTmV3SW50MTZBcnJheVdpdGhTaXplKEV4ZWNTdGF0ZSosIFN0cnVj
dHVyZSosIGludDMyX3QpIFdURl9JTlRFUk5BTDsKK2NoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0
aW9uTmV3SW50MTZBcnJheVdpdGhPbmVBcmd1bWVudChFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBF
bmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFMOworY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRp
b25OZXdJbnQzMkFycmF5V2l0aFNpemUoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgaW50MzJfdCkg
V1RGX0lOVEVSTkFMOworY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdJbnQzMkFycmF5
V2l0aE9uZUFyZ3VtZW50KEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIEVuY29kZWRKU1ZhbHVlKSBX
VEZfSU5URVJOQUw7CitjaGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1VpbnQ4QXJyYXlX
aXRoU2l6ZShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBpbnQzMl90KSBXVEZfSU5URVJOQUw7Citj
aGFyKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1VpbnQ4QXJyYXlXaXRoT25lQXJndW1lbnQo
RXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgRW5jb2RlZEpTVmFsdWUpIFdURl9JTlRFUk5BTDsKK2No
YXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3VWludDhDbGFtcGVkQXJyYXlXaXRoU2l6ZShF
eGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBpbnQzMl90KSBXVEZfSU5URVJOQUw7CitjaGFyKiBERkdf
T1BFUkFUSU9OIG9wZXJhdGlvbk5ld1VpbnQ4Q2xhbXBlZEFycmF5V2l0aE9uZUFyZ3VtZW50KEV4
ZWNTdGF0ZSosIFN0cnVjdHVyZSosIEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5URVJOQUw7CitjaGFy
KiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1VpbnQxNkFycmF5V2l0aFNpemUoRXhlY1N0YXRl
KiwgU3RydWN0dXJlKiwgaW50MzJfdCkgV1RGX0lOVEVSTkFMOworY2hhciogREZHX09QRVJBVElP
TiBvcGVyYXRpb25OZXdVaW50MTZBcnJheVdpdGhPbmVBcmd1bWVudChFeGVjU3RhdGUqLCBTdHJ1
Y3R1cmUqLCBFbmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFMOworY2hhciogREZHX09QRVJBVElP
TiBvcGVyYXRpb25OZXdVaW50MzJBcnJheVdpdGhTaXplKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSos
IGludDMyX3QpIFdURl9JTlRFUk5BTDsKK2NoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3
VWludDMyQXJyYXlXaXRoT25lQXJndW1lbnQoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgRW5jb2Rl
ZEpTVmFsdWUpIFdURl9JTlRFUk5BTDsKK2NoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3
RmxvYXQzMkFycmF5V2l0aFNpemUoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgaW50MzJfdCkgV1RG
X0lOVEVSTkFMOworY2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdGbG9hdDMyQXJyYXlX
aXRoT25lQXJndW1lbnQoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgRW5jb2RlZEpTVmFsdWUpIFdU
Rl9JTlRFUk5BTDsKK2NoYXIqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3RmxvYXQ2NEFycmF5
V2l0aFNpemUoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgaW50MzJfdCkgV1RGX0lOVEVSTkFMOwor
Y2hhciogREZHX09QRVJBVElPTiBvcGVyYXRpb25OZXdGbG9hdDY0QXJyYXlXaXRoT25lQXJndW1l
bnQoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgRW5jb2RlZEpTVmFsdWUpIFdURl9JTlRFUk5BTDsK
IEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3UmVnZXhwKEV4ZWNTdGF0
ZSosIHZvaWQqKSBXVEZfSU5URVJOQUw7CiB2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0
QnlWYWxTdHJpY3QoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRQcm9wZXJ0eSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKSBX
VEZfSU5URVJOQUw7CiB2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJp
Y3QoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRQcm9wZXJ0eSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKSBXVEZfSU5URVJO
QUw7CkBAIC0yODQsNiArMzAzLDY1IEBAIHZvaWQgREZHX09QRVJBVElPTiBkZWJ1Z09wZXJhdGlv
blByaW50U3AKIHZvaWQgREZHX09QRVJBVElPTiB0cmlnZ2VyUmVvcHRpbWl6YXRpb25Ob3coQ29k
ZUJsb2NrKikgV1RGX0lOVEVSTkFMOwogCiB9IC8vIGV4dGVybiAiQyIKKworaW5saW5lIFBfREZH
T3BlcmF0aW9uX0VTdFogb3BlcmF0aW9uTmV3VHlwZWRBcnJheVdpdGhTaXplRm9yVHlwZShUeXBl
ZEFycmF5VHlwZSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgVHlwZUlu
dDg6CisgICAgICAgIHJldHVybiBvcGVyYXRpb25OZXdJbnQ4QXJyYXlXaXRoU2l6ZTsKKyAgICBj
YXNlIFR5cGVJbnQxNjoKKyAgICAgICAgcmV0dXJuIG9wZXJhdGlvbk5ld0ludDE2QXJyYXlXaXRo
U2l6ZTsKKyAgICBjYXNlIFR5cGVJbnQzMjoKKyAgICAgICAgcmV0dXJuIG9wZXJhdGlvbk5ld0lu
dDMyQXJyYXlXaXRoU2l6ZTsKKyAgICBjYXNlIFR5cGVVaW50ODoKKyAgICAgICAgcmV0dXJuIG9w
ZXJhdGlvbk5ld1VpbnQ4QXJyYXlXaXRoU2l6ZTsKKyAgICBjYXNlIFR5cGVVaW50OENsYW1wZWQ6
CisgICAgICAgIHJldHVybiBvcGVyYXRpb25OZXdVaW50OENsYW1wZWRBcnJheVdpdGhTaXplOwor
ICAgIGNhc2UgVHlwZVVpbnQxNjoKKyAgICAgICAgcmV0dXJuIG9wZXJhdGlvbk5ld1VpbnQxNkFy
cmF5V2l0aFNpemU7CisgICAgY2FzZSBUeXBlVWludDMyOgorICAgICAgICByZXR1cm4gb3BlcmF0
aW9uTmV3VWludDMyQXJyYXlXaXRoU2l6ZTsKKyAgICBjYXNlIFR5cGVGbG9hdDMyOgorICAgICAg
ICByZXR1cm4gb3BlcmF0aW9uTmV3RmxvYXQzMkFycmF5V2l0aFNpemU7CisgICAgY2FzZSBUeXBl
RmxvYXQ2NDoKKyAgICAgICAgcmV0dXJuIG9wZXJhdGlvbk5ld0Zsb2F0NjRBcnJheVdpdGhTaXpl
OworICAgIGNhc2UgTm90VHlwZWRBcnJheToKKyAgICBjYXNlIFR5cGVEYXRhVmlldzoKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
cmV0dXJuIDA7Cit9CisKK2lubGluZSBQX0RGR09wZXJhdGlvbl9FU3RKIG9wZXJhdGlvbk5ld1R5
cGVkQXJyYXlXaXRoT25lQXJndW1lbnRGb3JUeXBlKFR5cGVkQXJyYXlUeXBlIHR5cGUpCit7Cisg
ICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBUeXBlSW50ODoKKyAgICAgICAgcmV0dXJuIG9w
ZXJhdGlvbk5ld0ludDhBcnJheVdpdGhPbmVBcmd1bWVudDsKKyAgICBjYXNlIFR5cGVJbnQxNjoK
KyAgICAgICAgcmV0dXJuIG9wZXJhdGlvbk5ld0ludDE2QXJyYXlXaXRoT25lQXJndW1lbnQ7Cisg
ICAgY2FzZSBUeXBlSW50MzI6CisgICAgICAgIHJldHVybiBvcGVyYXRpb25OZXdJbnQzMkFycmF5
V2l0aE9uZUFyZ3VtZW50OworICAgIGNhc2UgVHlwZVVpbnQ4OgorICAgICAgICByZXR1cm4gb3Bl
cmF0aW9uTmV3VWludDhBcnJheVdpdGhPbmVBcmd1bWVudDsKKyAgICBjYXNlIFR5cGVVaW50OENs
YW1wZWQ6CisgICAgICAgIHJldHVybiBvcGVyYXRpb25OZXdVaW50OENsYW1wZWRBcnJheVdpdGhP
bmVBcmd1bWVudDsKKyAgICBjYXNlIFR5cGVVaW50MTY6CisgICAgICAgIHJldHVybiBvcGVyYXRp
b25OZXdVaW50MTZBcnJheVdpdGhPbmVBcmd1bWVudDsKKyAgICBjYXNlIFR5cGVVaW50MzI6Cisg
ICAgICAgIHJldHVybiBvcGVyYXRpb25OZXdVaW50MzJBcnJheVdpdGhPbmVBcmd1bWVudDsKKyAg
ICBjYXNlIFR5cGVGbG9hdDMyOgorICAgICAgICByZXR1cm4gb3BlcmF0aW9uTmV3RmxvYXQzMkFy
cmF5V2l0aE9uZUFyZ3VtZW50OworICAgIGNhc2UgVHlwZUZsb2F0NjQ6CisgICAgICAgIHJldHVy
biBvcGVyYXRpb25OZXdGbG9hdDY0QXJyYXlXaXRoT25lQXJndW1lbnQ7CisgICAgY2FzZSBOb3RU
eXBlZEFycmF5OgorICAgIGNhc2UgVHlwZURhdGFWaWV3OgorICAgICAgICBicmVhazsKKyAgICB9
CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsKK30KKwog
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhh
c2UuY3BwCShyZXZpc2lvbiAxNTQzNzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDE0LDYg
KzQxNCwxMSBAQCBwcml2YXRlOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAg
ICAgICAgIAorICAgICAgICBjYXNlIE5ld1R5cGVkQXJyYXk6IHsKKyAgICAgICAgICAgIGNoYW5n
ZWQgfD0gc2V0UHJlZGljdGlvbihzcGVjdWxhdGlvbkZyb21UeXBlZEFycmF5VHlwZShub2RlLT50
eXBlZEFycmF5VHlwZSgpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICAgICAgCiAgICAgICAgIGNhc2UgTmV3UmVnZXhwOgogICAgICAgICBjYXNlIENyZWF0ZUFjdGl2
YXRpb246IHsKICAgICAgICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGljdGlvbihTcGVjT2JqZWN0
T3RoZXIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVj
dXRlLmgJKHJldmlzaW9uIDE1NDM3NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U2FmZVRvRXhlY3V0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMzEsNiArMjMxLDcgQEAgYm9vbCBz
YWZlVG9FeGVjdXRlKEFic3RyYWN0U3RhdGVUeXBlJiBzdAogICAgIGNhc2UgRm9yY2VPU1JFeGl0
OgogICAgIGNhc2UgQ2hlY2tXYXRjaGRvZ1RpbWVyOgogICAgIGNhc2UgU3RyaW5nRnJvbUNoYXJD
b2RlOgorICAgIGNhc2UgTmV3VHlwZWRBcnJheToKICAgICBjYXNlIFVucmVhY2hhYmxlOgogICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHJldmlzaW9uIDE1NDM3
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM2MDQsNiArMzYwNCwzNyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAg
CisgICAgY2FzZSBOZXdUeXBlZEFycmF5OiB7CisgICAgICAgIHN3aXRjaCAobm9kZS0+Y2hpbGQx
KCkudXNlS2luZCgpKSB7CisgICAgICAgIGNhc2UgSW50MzJVc2U6CisgICAgICAgICAgICBjb21w
aWxlTmV3VHlwZWRBcnJheShub2RlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IFVudHlwZWRVc2U6IHsKKyAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIGFyZ3VtZW50KHRoaXMs
IG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIEdQUlJlZyBhcmd1bWVudFRhZ0dQUiA9IGFy
Z3VtZW50LnRhZ0dQUigpOworICAgICAgICAgICAgR1BSUmVnIGFyZ3VtZW50UGF5bG9hZEdQUiA9
IGFyZ3VtZW50LnBheWxvYWRHUFIoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZmx1c2hS
ZWdpc3RlcnMoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgR1BSUmVzdWx0IHJlc3VsdCh0
aGlzKTsKKyAgICAgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2pp
dC5ncmFwaCgpLmdsb2JhbE9iamVjdEZvcihub2RlLT5jb2RlT3JpZ2luKTsKKyAgICAgICAgICAg
IGNhbGxPcGVyYXRpb24oCisgICAgICAgICAgICAgICAgb3BlcmF0aW9uTmV3VHlwZWRBcnJheVdp
dGhPbmVBcmd1bWVudEZvclR5cGUobm9kZS0+dHlwZWRBcnJheVR5cGUoKSksCisgICAgICAgICAg
ICAgICAgcmVzdWx0R1BSLCBnbG9iYWxPYmplY3QtPnR5cGVkQXJyYXlTdHJ1Y3R1cmUobm9kZS0+
dHlwZWRBcnJheVR5cGUoKSksCisgICAgICAgICAgICAgICAgYXJndW1lbnRUYWdHUFIsIGFyZ3Vt
ZW50UGF5bG9hZEdQUik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGNlbGxSZXN1bHQocmVz
dWx0R1BSLCBub2RlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAK
ICAgICBjYXNlIE5ld1JlZ2V4cDogewogICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwogICAgICAg
ICBHUFJSZXN1bHQgcmVzdWx0UGF5bG9hZCh0aGlzKTsKQEAgLTM2ODUsNyArMzcxNiw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXBMaXN0IHNsb3dQYXRoOwogICAgICAgICAKICAgICAgICAgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUgPSBub2RlLT5zdHJ1Y3R1cmUoKTsKLSAgICAgICAgc2l6ZV90IGFsbG9jYXRpb25T
aXplID0gSlNPYmplY3Q6OmFsbG9jYXRpb25TaXplKHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHko
KSk7CisgICAgICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEpTRmluYWxPYmplY3Q6OmFsbG9j
YXRpb25TaXplKHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7CiAgICAgICAgIE1hcmtlZEFs
bG9jYXRvciogYWxsb2NhdG9yUHRyID0gJm1faml0LnZtKCktPmhlYXAuYWxsb2NhdG9yRm9yT2Jq
ZWN0V2l0aG91dERlc3RydWN0b3IoYWxsb2NhdGlvblNpemUpOwogCiAgICAgICAgIG1faml0Lm1v
dmUoVHJ1c3RlZEltbVB0cihhbGxvY2F0b3JQdHIpLCBhbGxvY2F0b3JHUFIpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShy
ZXZpc2lvbiAxNTQzNzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNTI3LDYgKzM1MjcsMzYgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBicmVhazsKICAgICB9
CiAgICAgICAgIAorICAgIGNhc2UgTmV3VHlwZWRBcnJheTogeworICAgICAgICBzd2l0Y2ggKG5v
ZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgeworICAgICAgICBjYXNlIEludDMyVXNlOgorICAgICAg
ICAgICAgY29tcGlsZU5ld1R5cGVkQXJyYXkobm9kZSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBVbnR5cGVkVXNlOiB7CisgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBhcmd1
bWVudCh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBHUFJSZWcgYXJndW1lbnRH
UFIgPSBhcmd1bWVudC5ncHIoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZmx1c2hSZWdp
c3RlcnMoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgR1BSUmVzdWx0IHJlc3VsdCh0aGlz
KTsKKyAgICAgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2ppdC5n
cmFwaCgpLmdsb2JhbE9iamVjdEZvcihub2RlLT5jb2RlT3JpZ2luKTsKKyAgICAgICAgICAgIGNh
bGxPcGVyYXRpb24oCisgICAgICAgICAgICAgICAgb3BlcmF0aW9uTmV3VHlwZWRBcnJheVdpdGhP
bmVBcmd1bWVudEZvclR5cGUobm9kZS0+dHlwZWRBcnJheVR5cGUoKSksCisgICAgICAgICAgICAg
ICAgcmVzdWx0R1BSLCBnbG9iYWxPYmplY3QtPnR5cGVkQXJyYXlTdHJ1Y3R1cmUobm9kZS0+dHlw
ZWRBcnJheVR5cGUoKSksCisgICAgICAgICAgICAgICAgYXJndW1lbnRHUFIpOworICAgICAgICAg
ICAgCisgICAgICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCiAgICAgY2FzZSBOZXdSZWdleHA6IHsKICAg
ICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKICAgICAgICAgR1BSUmVzdWx0IHJlc3VsdCh0aGlzKTsK
QEAgLTM2MDMsNyArMzYzMyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSog
bm9kZSkKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dQYXRoOwogCiAgICAg
ICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbm9kZS0+c3RydWN0dXJlKCk7Ci0gICAgICAgIHNp
emVfdCBhbGxvY2F0aW9uU2l6ZSA9IEpTT2JqZWN0OjphbGxvY2F0aW9uU2l6ZShzdHJ1Y3R1cmUt
PmlubGluZUNhcGFjaXR5KCkpOworICAgICAgICBzaXplX3QgYWxsb2NhdGlvblNpemUgPSBKU0Zp
bmFsT2JqZWN0OjphbGxvY2F0aW9uU2l6ZShzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwog
ICAgICAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvclB0ciA9ICZtX2ppdC52bSgpLT5oZWFw
LmFsbG9jYXRvckZvck9iamVjdFdpdGhvdXREZXN0cnVjdG9yKGFsbG9jYXRpb25TaXplKTsKIAog
ICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIoYWxsb2NhdG9yUHRyKSwgYWxsb2NhdG9y
R1BSKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQuY3BwCShyZXZpc2lvbiAxNTQzNzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQ3Niw2ICs0NDc2LDgz
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVOZXdTdHJpbmdPYmoKICAgICBjZWxsUmVz
dWx0KHJlc3VsdEdQUiwgbm9kZSk7CiB9CiAKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVO
ZXdUeXBlZEFycmF5KE5vZGUqIG5vZGUpCit7CisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCA9IG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4pOwor
ICAgIFR5cGVkQXJyYXlUeXBlIHR5cGUgPSBub2RlLT50eXBlZEFycmF5VHlwZSgpOworICAgIFN0
cnVjdHVyZSogc3RydWN0dXJlID0gZ2xvYmFsT2JqZWN0LT50eXBlZEFycmF5U3RydWN0dXJlKHR5
cGUpOworICAgIAorICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIHNpemUodGhpcywgbm9kZS0+
Y2hpbGQxKCkpOworICAgIEdQUlJlZyBzaXplR1BSID0gc2l6ZS5ncHIoKTsKKyAgICAKKyAgICBH
UFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOworICAgIEdQUlRlbXBvcmFyeSBzdG9yYWdlKHRoaXMp
OworICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOworICAgIEdQUlRlbXBvcmFyeSBzY3Jh
dGNoMih0aGlzKTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgIEdQ
UlJlZyBzdG9yYWdlR1BSID0gc3RvcmFnZS5ncHIoKTsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUiA9
IHNjcmF0Y2guZ3ByKCk7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFIyID0gc2NyYXRjaDIuZ3ByKCk7
CisgICAgCisgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsKKworICAgIHNsb3dD
YXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoMzIoCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBYm92
ZSwgc2l6ZUdQUiwgVHJ1c3RlZEltbTMyKEpTQXJyYXlCdWZmZXJWaWV3OjpmYXN0U2l6ZUxpbWl0
KSkpOworICAgIAorICAgIG1faml0Lm1vdmUoc2l6ZUdQUiwgc2NyYXRjaEdQUik7CisgICAgbV9q
aXQubHNoaWZ0MzIoVHJ1c3RlZEltbTMyKGxvZ0VsZW1lbnRTaXplKHR5cGUpKSwgc2NyYXRjaEdQ
Uik7CisgICAgaWYgKGVsZW1lbnRTaXplKHR5cGUpIDwgOCkgeworICAgICAgICBtX2ppdC5hZGQz
MihUcnVzdGVkSW1tMzIoNyksIHNjcmF0Y2hHUFIpOworICAgICAgICBtX2ppdC5hbmQzMihUcnVz
dGVkSW1tMzIofjcpLCBzY3JhdGNoR1BSKTsKKyAgICB9CisgICAgc2xvd0Nhc2VzLmFwcGVuZCgK
KyAgICAgICAgZW1pdEFsbG9jYXRlQmFzaWNTdG9yYWdlKHNjcmF0Y2hHUFIsIHN0b3JhZ2VHUFIp
KTsKKyAgICAKKyAgICBtX2ppdC5zdWJQdHIoc2NyYXRjaEdQUiwgc3RvcmFnZUdQUik7CisgICAg
CisgICAgZW1pdEFsbG9jYXRlSlNPYmplY3Q8SlNBcnJheUJ1ZmZlclZpZXc+KAorICAgICAgICBy
ZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgVHJ1c3RlZEltbVB0cigwKSwgc2Ny
YXRjaEdQUiwgc2NyYXRjaEdQUjIsCisgICAgICAgIHNsb3dDYXNlcyk7CisgICAgCisgICAgbV9q
aXQuc3RvcmVQdHIoCisgICAgICAgIHN0b3JhZ2VHUFIsCisgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHJlc3VsdEdQUiwgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mVmVjdG9yKCkp
KTsKKyAgICBtX2ppdC5zdG9yZTMyKAorICAgICAgICBzaXplR1BSLAorICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZkxl
bmd0aCgpKSk7CisgICAgbV9qaXQuc3RvcmUzMigKKyAgICAgICAgVHJ1c3RlZEltbTMyKEZhc3RU
eXBlZEFycmF5KSwKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBK
U0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZNb2RlKCkpKTsKKyAgICAKKyNpZiBVU0UoSlNWQUxV
RTMyXzY0KQorICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5icmFuY2hUZXN0
MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHNpemVHUFIpOworICAgIG1faml0Lm1vdmUoc2l6ZUdQ
Uiwgc2NyYXRjaEdQUik7CisgICAgaWYgKGVsZW1lbnRTaXplKHR5cGUpICE9IDQpIHsKKyAgICAg
ICAgaWYgKGVsZW1lbnRTaXplKHR5cGUpID4gNCkKKyAgICAgICAgICAgIG1faml0LmxzaGlmdDMy
KFRydXN0ZWRJbW0zMihsb2dFbGVtZW50U2l6ZSh0eXBlKSAtIDIpLCBzY3JhdGNoR1BSKTsKKyAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICBpZiAoZWxlbWVudFNpemUodHlwZSkgPiAxKQorICAg
ICAgICAgICAgICAgIG1faml0LmxzaGlmdDMyKFRydXN0ZWRJbW0zMihsb2dFbGVtZW50U2l6ZSh0
eXBlKSksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMy
KDMpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIG1faml0LnVyc2hpZnQzMihUcnVzdGVkSW1t
MzIoMiksIHNjcmF0Y2hHUFIpOworICAgICAgICB9CisgICAgfQorICAgIE1hY3JvQXNzZW1ibGVy
OjpMYWJlbCBsb29wID0gbV9qaXQubGFiZWwoKTsKKyAgICBtX2ppdC5zdWIzMihUcnVzdGVkSW1t
MzIoMSksIHNjcmF0Y2hHUFIpOworICAgIG1faml0LnN0b3JlMzIoCisgICAgICAgIFRydXN0ZWRJ
bW0zMigwKSwKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBz
Y3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNGb3VyKSk7CisgICAgbV9qaXQuYnJhbmNo
VGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBzY3JhdGNoR1BSKS5saW5rVG8obG9vcCwg
Jm1faml0KTsKKyAgICBkb25lLmxpbmsoJm1faml0KTsKKyNlbmRpZiAvLyBVU0UoSlNWQUxVRTMy
XzY0KQorICAgIAorICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbCgKKyAgICAg
ICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25OZXdUeXBlZEFycmF5V2l0aFNpemVGb3JUeXBl
KHR5cGUpLAorICAgICAgICByZXN1bHRHUFIsIHN0cnVjdHVyZSwgc2l6ZUdQUikpOworICAgIAor
ICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKK30KKwogdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6c3BlY3VsYXRlSW50MzIoRWRnZSBlZGdlKQogewogICAgIGlmICghbmVlZHNUeXBlQ2hlY2so
ZWRnZSwgU3BlY0ludDMyKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklULmgJKHJldmlzaW9uIDE1NDM3NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMTI0MSw2ICsx
MjQxLDEyIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxTZXRSZXN1bHQob3Bl
cmF0aW9uLCByZXN1bHQpOwogICAgIH0KIAorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVy
YXRpb24oUF9ERkdPcGVyYXRpb25fRVN0SiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBHUFJSZWcgYXJnMikKKyAgICB7CisgICAgICAgIG1faml0LnNldHVw
QXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIGFyZzIpOwor
ICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVy
YXRpb24sIHJlc3VsdCk7CisgICAgfQorCiAgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJh
dGlvbihDX0RGR09wZXJhdGlvbl9FSiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBh
cmcxKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFy
ZzEpOwpAQCAtMTQ5NSw2ICsxNTAxLDEyIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFwcGVu
ZENhbGxTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KIAorICAgIEpJVENvbXBp
bGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oUF9ERkdPcGVyYXRpb25fRVN0SiBvcGVyYXRpb24sIEdQ
UlJlZyByZXN1bHQsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBHUFJSZWcgYXJnMlRhZywgR1BSUmVn
IGFyZzJQYXlsb2FkKQorICAgIHsKKyAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhl
Y1N0YXRlKFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgYXJnMlBheWxvYWQsIGFyZzJUYWcpOwor
ICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVy
YXRpb24sIHJlc3VsdCk7CisgICAgfQorCiAgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJh
dGlvbihDX0RGR09wZXJhdGlvbl9FSiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBh
cmcxVGFnLCBHUFJSZWcgYXJnMVBheWxvYWQpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFy
Z3VtZW50c1dpdGhFeGVjU3RhdGUoRUFCSV8zMkJJVF9EVU1NWV9BUkcgYXJnMVBheWxvYWQsIGFy
ZzFUYWcpOwpAQCAtMTkyNSw2ICsxOTM3LDggQEAgcHVibGljOgogICAgIHZvaWQgY29tcGlsZVRv
U3RyaW5nT25DZWxsKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVOZXdTdHJpbmdPYmplY3QoTm9k
ZSopOwogICAgIAorICAgIHZvaWQgY29tcGlsZU5ld1R5cGVkQXJyYXkoTm9kZSopOworICAgIAog
ICAgIHZvaWQgY29tcGlsZUludGVnZXJDb21wYXJlKE5vZGUqLCBNYWNyb0Fzc2VtYmxlcjo6UmVs
YXRpb25hbENvbmRpdGlvbik7CiAgICAgdm9pZCBjb21waWxlQm9vbGVhbkNvbXBhcmUoTm9kZSos
IE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uKTsKICAgICB2b2lkIGNvbXBpbGVE
b3VibGVDb21wYXJlKE5vZGUqLCBNYWNyb0Fzc2VtYmxlcjo6RG91YmxlQ29uZGl0aW9uKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHJl
dmlzaW9uIDE1NDM3NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMy
XzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjExLDcgKzIxMSw3IEBAIHZvaWQgSklUOjplbWl0
X29wX2ptcChJbnN0cnVjdGlvbiogY3VycmUKIHZvaWQgSklUOjplbWl0X29wX25ld19vYmplY3Qo
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9iamVjdEFsbG9jYXRpb25Qcm9maWxlLT5z
dHJ1Y3R1cmUoKTsKLSAgICBzaXplX3QgYWxsb2NhdGlvblNpemUgPSBKU09iamVjdDo6YWxsb2Nh
dGlvblNpemUoc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKKyAgICBzaXplX3QgYWxsb2Nh
dGlvblNpemUgPSBKU0ZpbmFsT2JqZWN0OjphbGxvY2F0aW9uU2l6ZShzdHJ1Y3R1cmUtPmlubGlu
ZUNhcGFjaXR5KCkpOwogICAgIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0gJm1fdm0tPmhl
YXAuYWxsb2NhdG9yRm9yT2JqZWN0V2l0aG91dERlc3RydWN0b3IoYWxsb2NhdGlvblNpemUpOwog
CiAgICAgUmVnaXN0ZXJJRCByZXN1bHRSZWcgPSByZWdUMDsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkocmV2aXNpb24gMTU0Mzc3KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTcsNyAr
OTcsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbXAoSW5zdHJ1Y3Rpb24qIGN1cnJlCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9uZXdfb2JqZWN0KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vYmpl
Y3RBbGxvY2F0aW9uUHJvZmlsZS0+c3RydWN0dXJlKCk7Ci0gICAgc2l6ZV90IGFsbG9jYXRpb25T
aXplID0gSlNPYmplY3Q6OmFsbG9jYXRpb25TaXplKHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHko
KSk7CisgICAgc2l6ZV90IGFsbG9jYXRpb25TaXplID0gSlNGaW5hbE9iamVjdDo6YWxsb2NhdGlv
blNpemUoc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKICAgICBNYXJrZWRBbGxvY2F0b3Iq
IGFsbG9jYXRvciA9ICZtX3ZtLT5oZWFwLmFsbG9jYXRvckZvck9iamVjdFdpdGhvdXREZXN0cnVj
dG9yKGFsbG9jYXRpb25TaXplKTsKIAogICAgIFJlZ2lzdGVySUQgcmVzdWx0UmVnID0gcmVnVDA7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCShyZXZpc2lvbiAx
NTQzNzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgJKHdvcmtp
bmcgY29weSkKQEAgLTM4LDYgKzM4LDEyIEBAIGNsYXNzIEpTQXJyYXkgOiBwdWJsaWMgSlNOb25G
aW5hbE9iamVjdCAKIHB1YmxpYzoKICAgICB0eXBlZGVmIEpTTm9uRmluYWxPYmplY3QgQmFzZTsK
IAorICAgIHN0YXRpYyBzaXplX3QgYWxsb2NhdGlvblNpemUoc2l6ZV90IGlubGluZUNhcGFjaXR5
KQorICAgIHsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChpbmxpbmVDYXBhY2l0eSwgIWlubGluZUNh
cGFjaXR5KTsKKyAgICAgICAgcmV0dXJuIHNpemVvZihKU0FycmF5KTsKKyAgICB9CisgICAgICAg
IAogcHJvdGVjdGVkOgogICAgIGV4cGxpY2l0IEpTQXJyYXkoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgQnV0dGVyZmx5KiBidXR0ZXJmbHkpCiAgICAgICAgIDogSlNOb25GaW5hbE9iamVj
dCh2bSwgc3RydWN0dXJlLCBidXR0ZXJmbHkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmgJKHJldmlzaW9uIDE1NDM3NykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmgJKHdvcmtp
bmcgY29weSkKQEAgLTkxLDYgKzkxLDEyIEBAIHB1YmxpYzoKICAgICAgICAgICAgICYgfihzaXpl
b2YoRW5jb2RlZEpTVmFsdWUpIC0gMSk7CiAgICAgfQogCisgICAgc3RhdGljIHNpemVfdCBhbGxv
Y2F0aW9uU2l6ZShzaXplX3QgaW5saW5lQ2FwYWNpdHkpCisgICAgeworICAgICAgICBBU1NFUlRf
VU5VU0VEKGlubGluZUNhcGFjaXR5LCAhaW5saW5lQ2FwYWNpdHkpOworICAgICAgICByZXR1cm4g
c2l6ZW9mKEpTQXJyYXlCdWZmZXJWaWV3KTsKKyAgICB9CisgICAgICAgIAogcHJvdGVjdGVkOgog
ICAgIGNsYXNzIENvbnN0cnVjdGlvbkNvbnRleHQgewogICAgICAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShDb25zdHJ1Y3Rpb25Db250ZXh0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JJbmxpbmVzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXdDb25zdHJ1Y3RvcklubGluZXMuaAkocmV2aXNpb24gMTU0Mzc3KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rvcklu
bGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTAwLDcgKzEwMCw3IEBAIHN0YXRpYyBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnMKICAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAg
aWYgKChidWZmZXItPmJ5dGVMZW5ndGgoKSAtIG9mZnNldCkgJSBWaWV3Q2xhc3M6OmVsZW1lbnRT
aXplKQotICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlUmFu
Z2VFcnJvcihleGVjLCAiQXJyYXlCdWZmZXIgbGVuZ3RoIG1pbnVzIHRoZSBieXRlT2Zmc2V0IGlz
IG5vdCBhIG11bHRpcGxlIG9mIHRoZSBlbGVtZW50IHNpemUuIikpOworICAgICAgICAgICAgICAg
IHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCAiQXJyYXlC
dWZmZXIgbGVuZ3RoIG1pbnVzIHRoZSBieXRlT2Zmc2V0IGlzIG5vdCBhIG11bHRpcGxlIG9mIHRo
ZSBlbGVtZW50IHNpemUiKSk7CiAgICAgICAgICAgICBsZW5ndGggPSAoYnVmZmVyLT5ieXRlTGVu
Z3RoKCkgLSBvZmZzZXQpIC8gVmlld0NsYXNzOjplbGVtZW50U2l6ZTsKICAgICAgICAgfQogICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKFZpZXdDbGFzczo6Y3JlYXRlKGV4ZWMsIHN0cnVj
dHVyZSwgYnVmZmVyLCBvZmZzZXQsIGxlbmd0aCkpOwpAQCAtMTM1LDE1ICsxMzUsMTUgQEAgc3Rh
dGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29ucwogICAgIGlmIChleGVjLT5hcmd1
bWVudCgwKS5pc0ludDMyKCkpCiAgICAgICAgIGxlbmd0aCA9IGV4ZWMtPmFyZ3VtZW50KDApLmFz
SW50MzIoKTsKICAgICBlbHNlIGlmICghZXhlYy0+YXJndW1lbnQoMCkuaXNOdW1iZXIoKSkKLSAg
ICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIklu
dmFsaWQgYXJyYXkgbGVuZ3RoIGFyZ3VtZW50LiIpKTsKKyAgICAgICAgcmV0dXJuIHRocm93Vk1F
cnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIkludmFsaWQgYXJyYXkgbGVuZ3RoIGFy
Z3VtZW50IikpOwogICAgIGVsc2UgewogICAgICAgICBsZW5ndGggPSBzdGF0aWNfY2FzdDxpbnQ+
KGV4ZWMtPmFyZ3VtZW50KDApLmFzTnVtYmVyKCkpOwogICAgICAgICBpZiAobGVuZ3RoICE9IGV4
ZWMtPmFyZ3VtZW50KDApLmFzTnVtYmVyKCkpCi0gICAgICAgICAgICByZXR1cm4gdGhyb3dWTUVy
cm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCAiSW52YWxpZCBhcnJheSBsZW5ndGggYXJn
dW1lbnQgKGZyYWN0aW9uYWwgbGVuZ3RocyBub3QgYWxsb3dlZCkuIikpOworICAgICAgICAgICAg
cmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIkludmFsaWQg
YXJyYXkgbGVuZ3RoIGFyZ3VtZW50IChmcmFjdGlvbmFsIGxlbmd0aHMgbm90IGFsbG93ZWQpIikp
OwogICAgIH0KIAogICAgIGlmIChsZW5ndGggPCAwKQotICAgICAgICByZXR1cm4gdGhyb3dWTUVy
cm9yKGV4ZWMsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgIlJlcXVlc3RlZCBsZW5ndGggaXMgbmVn
YXRpdmUuIikpOworICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVJhbmdl
RXJyb3IoZXhlYywgIlJlcXVlc3RlZCBsZW5ndGggaXMgbmVnYXRpdmUiKSk7CiAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShWaWV3Q2xhc3M6OmNyZWF0ZShleGVjLCBzdHJ1Y3R1cmUsIGxlbmd0
aCkpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJ
KHJldmlzaW9uIDE1NDM3NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2Jq
ZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTk4LDExICs5OCw2IEBAIGNsYXNzIEpTT2JqZWN0IDog
cHVibGljIEpTQ2VsbCB7CiBwdWJsaWM6CiAgICAgdHlwZWRlZiBKU0NlbGwgQmFzZTsKICAgICAg
ICAgCi0gICAgc3RhdGljIHNpemVfdCBhbGxvY2F0aW9uU2l6ZShzaXplX3QgaW5saW5lQ2FwYWNp
dHkpCi0gICAgewotICAgICAgICByZXR1cm4gc2l6ZW9mKEpTT2JqZWN0KSArIGlubGluZUNhcGFj
aXR5ICogc2l6ZW9mKFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4pOwotICAgIH0KLSAgICAgICAg
CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwq
LCBTbG90VmlzaXRvciYpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGNvcHlC
YWNraW5nU3RvcmUoSlNDZWxsKiwgQ29weVZpc2l0b3ImLCBDb3B5VG9rZW4pOwogCkBAIC0xMDE3
LDYgKzEwMTIsMTEgQEAgY2xhc3MgSlNGaW5hbE9iamVjdCA6IHB1YmxpYyBKU09iamVjdCB7CiBw
dWJsaWM6CiAgICAgdHlwZWRlZiBKU09iamVjdCBCYXNlOwogCisgICAgc3RhdGljIHNpemVfdCBh
bGxvY2F0aW9uU2l6ZShzaXplX3QgaW5saW5lQ2FwYWNpdHkpCisgICAgeworICAgICAgICByZXR1
cm4gc2l6ZW9mKEpTT2JqZWN0KSArIGlubGluZUNhcGFjaXR5ICogc2l6ZW9mKFdyaXRlQmFycmll
ckJhc2U8VW5rbm93bj4pOworICAgIH0KKyAgICAgICAgCiAgICAgc3RhdGljIGNvbnN0IHVuc2ln
bmVkIGRlZmF1bHRTaXplID0gNjQ7CiAgICAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBkZWZhdWx0
SW5saW5lQ2FwYWNpdHkoKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1R5cGVkQXJyYXlUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9UeXBlZEFycmF5VHlwZS5jcHAJKHJldmlzaW9uIDE1NDM3NykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlUeXBlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgIlR5cGVkQXJyYXlUeXBlLmgiCiAKICNpbmNs
dWRlICJKU0RhdGFWaWV3LmgiCisjaW5jbHVkZSAiSlNUeXBlZEFycmF5Q29uc3RydWN0b3JzLmgi
CiAjaW5jbHVkZSAiSlNUeXBlZEFycmF5cy5oIgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTYxLDYg
KzYyLDM2IEBAIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvRm9yVHlwZShUeXBlZEEKICAgICBy
ZXR1cm4gMDsKIH0KIAorY29uc3QgQ2xhc3NJbmZvKiBjb25zdHJ1Y3RvckNsYXNzSW5mb0ZvclR5
cGUoVHlwZWRBcnJheVR5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNl
IE5vdFR5cGVkQXJyYXk6CisgICAgICAgIHJldHVybiAwOworICAgIGNhc2UgVHlwZUludDg6Cisg
ICAgICAgIHJldHVybiBKU0ludDhBcnJheUNvbnN0cnVjdG9yOjppbmZvKCk7CisgICAgY2FzZSBU
eXBlVWludDg6CisgICAgICAgIHJldHVybiBKU1VpbnQ4QXJyYXlDb25zdHJ1Y3Rvcjo6aW5mbygp
OworICAgIGNhc2UgVHlwZVVpbnQ4Q2xhbXBlZDoKKyAgICAgICAgcmV0dXJuIEpTVWludDhDbGFt
cGVkQXJyYXlDb25zdHJ1Y3Rvcjo6aW5mbygpOworICAgIGNhc2UgVHlwZUludDE2OgorICAgICAg
ICByZXR1cm4gSlNJbnQxNkFycmF5Q29uc3RydWN0b3I6OmluZm8oKTsKKyAgICBjYXNlIFR5cGVV
aW50MTY6CisgICAgICAgIHJldHVybiBKU1VpbnQxNkFycmF5Q29uc3RydWN0b3I6OmluZm8oKTsK
KyAgICBjYXNlIFR5cGVJbnQzMjoKKyAgICAgICAgcmV0dXJuIEpTSW50MzJBcnJheUNvbnN0cnVj
dG9yOjppbmZvKCk7CisgICAgY2FzZSBUeXBlVWludDMyOgorICAgICAgICByZXR1cm4gSlNVaW50
MzJBcnJheUNvbnN0cnVjdG9yOjppbmZvKCk7CisgICAgY2FzZSBUeXBlRmxvYXQzMjoKKyAgICAg
ICAgcmV0dXJuIEpTRmxvYXQzMkFycmF5Q29uc3RydWN0b3I6OmluZm8oKTsKKyAgICBjYXNlIFR5
cGVGbG9hdDY0OgorICAgICAgICByZXR1cm4gSlNGbG9hdDY0QXJyYXlDb25zdHJ1Y3Rvcjo6aW5m
bygpOworICAgIGNhc2UgVHlwZURhdGFWaWV3OgorICAgICAgICByZXR1cm4gSlNEYXRhVmlld0Nv
bnN0cnVjdG9yOjppbmZvKCk7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgcmV0dXJuIDA7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiBuYW1lc3BhY2Ug
V1RGIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVkQXJyYXlUeXBl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZWRBcnJh
eVR5cGUuaAkocmV2aXNpb24gMTU0Mzc3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVHlwZWRBcnJheVR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTMsNiArNTMsMTMgQEAgaW5s
aW5lIHVuc2lnbmVkIHRvSW5kZXgoVHlwZWRBcnJheVR5cGUgdAogICAgIHJldHVybiBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4odHlwZSkgLSAxOwogfQogCitpbmxpbmUgVHlwZWRBcnJheVR5cGUgaW5k
ZXhUb1R5cGVkQXJyYXlUeXBlKHVuc2lnbmVkIGluZGV4KQoreworICAgIFR5cGVkQXJyYXlUeXBl
IHJlc3VsdCA9IHN0YXRpY19jYXN0PFR5cGVkQXJyYXlUeXBlPihpbmRleCArIDEpOworICAgIEFT
U0VSVChyZXN1bHQgPj0gVHlwZUludDggJiYgcmVzdWx0IDw9IFR5cGVEYXRhVmlldyk7CisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKwogaW5saW5lIGJvb2wgaXNUeXBlZFZpZXcoVHlwZWRBcnJheVR5
cGUgdHlwZSkKIHsKICAgICBzd2l0Y2ggKHR5cGUpIHsKQEAgLTk0LDYgKzEwMSw3IEBAIGlubGlu
ZSBzaXplX3QgZWxlbWVudFNpemUoVHlwZWRBcnJheVR5cGUKIH0KIAogY29uc3QgQ2xhc3NJbmZv
KiBjbGFzc0luZm9Gb3JUeXBlKFR5cGVkQXJyYXlUeXBlKTsKK2NvbnN0IENsYXNzSW5mbyogY29u
c3RydWN0b3JDbGFzc0luZm9Gb3JUeXBlKFR5cGVkQXJyYXlUeXBlKTsKIAogaW5saW5lIGJvb2wg
aXNJbnQoVHlwZWRBcnJheVR5cGUgdHlwZSkKIHsKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxv
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1NDM3NykK
KysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxIEBA
CisyMDEzLTA4LTIwICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIHNob3VsZCBpbmxpbmUgbmV3IHR5cGVkQXJyYXkoKQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIwMDIyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBmYXN0L2pzL3JlZ3Jlc3MvRmxvYXQ2NEFycmF5
LWFsbG9jLWxvbmctbGl2ZWQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2pz
L3JlZ3Jlc3MvRmxvYXQ2NEFycmF5LWFsbG9jLWxvbmctbGl2ZWQuaHRtbDogQWRkZWQuCisgICAg
ICAgICogZmFzdC9qcy9yZWdyZXNzL0ludDE2QXJyYXktYWxsb2MtbG9uZy1saXZlZC1leHBlY3Rl
ZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvanMvcmVncmVzcy9JbnQxNkFycmF5LWFsbG9j
LWxvbmctbGl2ZWQuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9qcy9yZWdyZXNzL0ludDhB
cnJheS1hbGxvYy1sb25nLWxpdmVkLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFz
dC9qcy9yZWdyZXNzL0ludDhBcnJheS1hbGxvYy1sb25nLWxpdmVkLmh0bWw6IEFkZGVkLgorICAg
ICAgICAqIGZhc3QvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvRmxvYXQ2NEFycmF5LWFsbG9jLWxv
bmctbGl2ZWQuanM6IEFkZGVkLgorICAgICAgICAqIGZhc3QvanMvcmVncmVzcy9zY3JpcHQtdGVz
dHMvSW50MTZBcnJheS1hbGxvYy1sb25nLWxpdmVkLmpzOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0
L2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL0ludDMyQXJyYXktYWxsb2MtbG9uZy1saXZlZC5qczoK
KyAgICAgICAgKiBmYXN0L2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL0ludDhBcnJheS1hbGxvYy1s
b25nLWxpdmVkLmpzOiBBZGRlZC4KKwogMjAxMy0wOC0yMCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9A
YXBwbGUuY29tPgogCiAgICAgICAgIGZhc3QvanMvcmVncmVzcy9lbXNjcmlwdGVuLWN1YmUyaGFz
aCBpcyBmYWlsaW5nIG9uIGFsbCB0aGUgTWFjIGJvdHMKSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qv
anMvcmVncmVzcy9GbG9hdDY0QXJyYXktYWxsb2MtbG9uZy1saXZlZC1leHBlY3RlZC50eHQKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL0Zsb2F0NjRBcnJheS1hbGxv
Yy1sb25nLWxpdmVkLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zh
c3QvanMvcmVncmVzcy9GbG9hdDY0QXJyYXktYWxsb2MtbG9uZy1saXZlZC1leHBlY3RlZC50eHQJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMCBAQAorSlNSZWdyZXNzL0Zsb2F0NjRBcnJheS1h
bGxvYy1sb25nLWxpdmVkCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAi
UEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIG5v
IGV4Y2VwdGlvbiB0aHJvd24KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVT
VCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2pzL3JlZ3Jlc3MvRmxvYXQ2NEFy
cmF5LWFsbG9jLWxvbmctbGl2ZWQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0
L2pzL3JlZ3Jlc3MvRmxvYXQ2NEFycmF5LWFsbG9jLWxvbmctbGl2ZWQuaHRtbAkocmV2aXNpb24g
MCkKKysrIExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9GbG9hdDY0QXJyYXktYWxsb2MtbG9u
Zy1saXZlZC5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIgQEAKKzwhRE9DVFlQRSBI
VE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c2Ny
aXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4K
Kzxib2R5PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9yZWdyZXNzLXByZS5qcyI+PC9zY3JpcHQ+
Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL0Zsb2F0NjRBcnJheS1hbGxvYy1sb25nLWxpdmVk
LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvcmVncmVzcy1wb3N0LmpzIj48
L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3Nj
cmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVz
cy9JbnQ4QXJyYXktYWxsb2MtbG9uZy1saXZlZC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL0ludDhBcnJheS1hbGxvYy1sb25nLWxpdmVkLWV4
cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9J
bnQ4QXJyYXktYWxsb2MtbG9uZy1saXZlZC1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwxMCBAQAorSlNSZWdyZXNzL0ludDhBcnJheS1hbGxvYy1sb25nLWxpdmVkCisKK09u
IHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxv
d2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIG5vIGV4Y2VwdGlvbiB0aHJvd24KK1BB
U1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBM
YXlvdXRUZXN0cy9mYXN0L2pzL3JlZ3Jlc3MvSW50OEFycmF5LWFsbG9jLWxvbmctbGl2ZWQuaHRt
bAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2pzL3JlZ3Jlc3MvSW50OEFycmF5LWFs
bG9jLWxvbmctbGl2ZWQuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvanMv
cmVncmVzcy9JbnQ4QXJyYXktYWxsb2MtbG9uZy1saXZlZC5odG1sCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMTIgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwv
L0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pzLXRlc3Qt
cHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdCBzcmM9InJlc291cmNl
cy9yZWdyZXNzLXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL0lu
dDhBcnJheS1hbGxvYy1sb25nLWxpdmVkLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNv
dXJjZXMvcmVncmVzcy1wb3N0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJj
ZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExh
eW91dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9JbnQxNkFycmF5LWFsbG9jLWxvbmctbGl2ZWQtZXhw
ZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9JbnQx
NkFycmF5LWFsbG9jLWxvbmctbGl2ZWQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5
b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL0ludDE2QXJyYXktYWxsb2MtbG9uZy1saXZlZC1leHBl
Y3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMCBAQAorSlNSZWdyZXNzL0ludDE2
QXJyYXktYWxsb2MtbG9uZy1saXZlZAorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJp
ZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKwor
UEFTUyBubyBleGNlcHRpb24gdGhyb3duCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVl
CisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL0lu
dDE2QXJyYXktYWxsb2MtbG9uZy1saXZlZC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2Zhc3QvanMvcmVncmVzcy9JbnQxNkFycmF5LWFsbG9jLWxvbmctbGl2ZWQuaHRtbAkocmV2aXNp
b24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9JbnQxNkFycmF5LWFsbG9jLWxv
bmctbGl2ZWQuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyIEBACis8IURPQ1RZUEUg
SFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPHNj
cmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+
Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvcmVncmVzcy1wcmUuanMiPjwvc2NyaXB0
PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9JbnQxNkFycmF5LWFsbG9jLWxvbmctbGl2ZWQu
anMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9yZWdyZXNzLXBvc3QuanMiPjwv
c2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2Ny
aXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNz
L3NjcmlwdC10ZXN0cy9GbG9hdDY0QXJyYXktYWxsb2MtbG9uZy1saXZlZC5qcwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL0Zsb2F0NjRBcnJh
eS1hbGxvYy1sb25nLWxpdmVkLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9q
cy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9GbG9hdDY0QXJyYXktYWxsb2MtbG9uZy1saXZlZC5qcwko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE0IEBACit2YXIgYXJyYXkgPSBuZXcgQXJyYXkoMTAw
MDAwKTsKKworZm9yICh2YXIgaSA9IDA7IGkgPCAyMDAwMDAwOyArK2kpCisgICAgYXJyYXlbaSAl
IGFycmF5Lmxlbmd0aF0gPSBuZXcgRmxvYXQ2NEFycmF5KDkpOworCitmb3IgKHZhciBpID0gMDsg
aSA8IGFycmF5Lmxlbmd0aDsgKytpKSB7CisgICAgdmFyIHN1YkFycmF5ID0gYXJyYXlbaV07Cisg
ICAgaWYgKHN1YkFycmF5Lmxlbmd0aCAhPSA5KQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCBh
cnJheSBsZW5ndGg6ICIgKyBzdWJBcnJheS5sZW5ndGg7CisgICAgZm9yICh2YXIgaiA9IDA7IGog
PCBzdWJBcnJheS5sZW5ndGg7ICsraikgeworICAgICAgICBpZiAoc3ViQXJyYXlbal0gIT0gMCkK
KyAgICAgICAgICAgIHRocm93ICJFcnJvcjogYXJyYXkgYXQgIiArIGkgKyAiIGhhcyBub24temVy
byBlbGVtZW50OiAiICsgQXJyYXkucHJvdG90eXBlLmpvaW4uY2FsbChzdWJBcnJheSwgIiwiKTsK
KyAgICB9Cit9CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3Rz
L0ludDhBcnJheS1hbGxvYy1sb25nLWxpdmVkLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2Zhc3QvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvSW50OEFycmF5LWFsbG9jLWxvbmctbGl2ZWQu
anMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2pzL3JlZ3Jlc3Mvc2NyaXB0LXRl
c3RzL0ludDhBcnJheS1hbGxvYy1sb25nLWxpdmVkLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMTQgQEAKK3ZhciBhcnJheSA9IG5ldyBBcnJheSgxMDAwMDApOworCitmb3IgKHZhciBpID0g
MDsgaSA8IDIwMDAwMDA7ICsraSkKKyAgICBhcnJheVtpICUgYXJyYXkubGVuZ3RoXSA9IG5ldyBJ
bnQ4QXJyYXkoOSk7CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyArK2kpIHsK
KyAgICB2YXIgc3ViQXJyYXkgPSBhcnJheVtpXTsKKyAgICBpZiAoc3ViQXJyYXkubGVuZ3RoICE9
IDkpCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIGFycmF5IGxlbmd0aDogIiArIHN1YkFycmF5
Lmxlbmd0aDsKKyAgICBmb3IgKHZhciBqID0gMDsgaiA8IHN1YkFycmF5Lmxlbmd0aDsgKytqKSB7
CisgICAgICAgIGlmIChzdWJBcnJheVtqXSAhPSAwKQorICAgICAgICAgICAgdGhyb3cgIkVycm9y
OiBhcnJheSBhdCAiICsgaSArICIgaGFzIG5vbi16ZXJvIGVsZW1lbnQ6ICIgKyBBcnJheS5wcm90
b3R5cGUuam9pbi5jYWxsKHN1YkFycmF5LCAiLCIpOworICAgIH0KK30KSW5kZXg6IExheW91dFRl
c3RzL2Zhc3QvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvSW50MTZBcnJheS1hbGxvYy1sb25nLWxp
dmVkLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9zY3JpcHQt
dGVzdHMvSW50MTZBcnJheS1hbGxvYy1sb25nLWxpdmVkLmpzCShyZXZpc2lvbiAwKQorKysgTGF5
b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9JbnQxNkFycmF5LWFsbG9jLWxv
bmctbGl2ZWQuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNCBAQAordmFyIGFycmF5ID0g
bmV3IEFycmF5KDEwMDAwMCk7CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMjAwMDAwMDsgKytpKQor
ICAgIGFycmF5W2kgJSBhcnJheS5sZW5ndGhdID0gbmV3IEludDE2QXJyYXkoOSk7CisKK2ZvciAo
dmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyArK2kpIHsKKyAgICB2YXIgc3ViQXJyYXkgPSBh
cnJheVtpXTsKKyAgICBpZiAoc3ViQXJyYXkubGVuZ3RoICE9IDkpCisgICAgICAgIHRocm93ICJF
cnJvcjogYmFkIGFycmF5IGxlbmd0aDogIiArIHN1YkFycmF5Lmxlbmd0aDsKKyAgICBmb3IgKHZh
ciBqID0gMDsgaiA8IHN1YkFycmF5Lmxlbmd0aDsgKytqKSB7CisgICAgICAgIGlmIChzdWJBcnJh
eVtqXSAhPSAwKQorICAgICAgICAgICAgdGhyb3cgIkVycm9yOiBhcnJheSBhdCAiICsgaSArICIg
aGFzIG5vbi16ZXJvIGVsZW1lbnQ6ICIgKyBBcnJheS5wcm90b3R5cGUuam9pbi5jYWxsKHN1YkFy
cmF5LCAiLCIpOworICAgIH0KK30KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9z
Y3JpcHQtdGVzdHMvSW50MzJBcnJheS1hbGxvYy1sb25nLWxpdmVkLmpzCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvSW50MzJBcnJheS1hbGxv
Yy1sb25nLWxpdmVkLmpzCShyZXZpc2lvbiAxNTQzNzcpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2pz
L3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL0ludDMyQXJyYXktYWxsb2MtbG9uZy1saXZlZC5qcwkod29y
a2luZyBjb3B5KQpAQCAtMSw5ICsxLDE0IEBACiB2YXIgYXJyYXkgPSBuZXcgQXJyYXkoMTAwMDAw
KTsKIAogZm9yICh2YXIgaSA9IDA7IGkgPCAyMDAwMDAwOyArK2kpCi0gICAgYXJyYXlbaSAlIGFy
cmF5Lmxlbmd0aF0gPSBuZXcgSW50MzJBcnJheSgxMCk7CisgICAgYXJyYXlbaSAlIGFycmF5Lmxl
bmd0aF0gPSBuZXcgSW50MzJBcnJheSg5KTsKIAogZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheS5s
ZW5ndGg7ICsraSkgewotICAgIGlmIChhcnJheVtpXS5sZW5ndGggIT0gMTApCi0gICAgICAgIHRo
cm93ICJFcnJvcjogYmFkIGFycmF5IGxlbmd0aDogIiArIGFycmF5W2ldLmxlbmd0aDsKKyAgICB2
YXIgc3ViQXJyYXkgPSBhcnJheVtpXTsKKyAgICBpZiAoc3ViQXJyYXkubGVuZ3RoICE9IDkpCisg
ICAgICAgIHRocm93ICJFcnJvcjogYmFkIGFycmF5IGxlbmd0aDogIiArIHN1YkFycmF5Lmxlbmd0
aDsKKyAgICBmb3IgKHZhciBqID0gMDsgaiA8IHN1YkFycmF5Lmxlbmd0aDsgKytqKSB7CisgICAg
ICAgIGlmIChzdWJBcnJheVtqXSAhPSAwKQorICAgICAgICAgICAgdGhyb3cgIkVycm9yOiBhcnJh
eSBhdCAiICsgaSArICIgaGFzIG5vbi16ZXJvIGVsZW1lbnQ6ICIgKyBBcnJheS5wcm90b3R5cGUu
am9pbi5jYWxsKHN1YkFycmF5LCAiLCIpOworICAgIH0KIH0K
</data>
<flag name="review"
          id="231236"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>