<?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>38282</bug_id>
          
          <creation_ts>2010-04-28 14:08:12 -0700</creation_ts>
          <short_desc>Passing premultiplyAlpha=false to tex{Sub}Image2D loses information (skia)</short_desc>
          <delta_ts>2024-12-23 12:51:27 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebGL</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>
          
          <blocked>44661</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Kenneth Russell">kbr</reporter>
          <assigned_to name="Zhenyao Mo">zmo</assigned_to>
          <cc>cmarrin</cc>
    
    <cc>dglazkov</cc>
    
    <cc>enne</cc>
    
    <cc>eric</cc>
    
    <cc>oliver</cc>
    
    <cc>ossy</cc>
    
    <cc>pkasting</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zmo</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>218626</commentid>
    <comment_count>0</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-04-28 14:08:12 -0700</bug_when>
    <thetext>If an RGBA PNG image is uploaded via texImage2D or texSubImage2D and false is passed for the premultiplyAlpha argument, the result is currently lossy; the alpha channel is multiplied in to the color channels by the browser and then divided out later. The WebGL specification requires that this upload path be lossless so that images which do not contain color and alpha information (for example, using the RGBA channels as arbitrary data inputs to a shader) are not destroyed during the upload process.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>268928</commentid>
    <comment_count>1</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-08-24 17:35:41 -0700</bug_when>
    <thetext>break the bug into two: skia and cg

cg is here: https://bugs.webkit.org/show_bug.cgi?id=44566</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>268933</commentid>
    <comment_count>2</comment_count>
      <attachid>65347</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-08-24 17:45:41 -0700</bug_when>
    <thetext>Created attachment 65347
patch

Test is in sync with khronos (with certain parts commented out).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>268936</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-24 17:52:16 -0700</bug_when>
    <thetext>Attachment 65347 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebCore/platform/image-decoders/gif/GIFImageDecoder.cpp:87:  Missing spaces around &lt;  [whitespace/operators] [3]
WebCore/platform/image-decoders/ImageDecoder.h:158:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Total errors found: 2 in 27 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>268941</commentid>
    <comment_count>4</comment_count>
      <attachid>65349</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-08-24 17:56:34 -0700</bug_when>
    <thetext>Created attachment 65349
revised patch: fixing style issues</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>269320</commentid>
    <comment_count>5</comment_count>
      <attachid>65433</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-08-25 10:20:25 -0700</bug_when>
    <thetext>Created attachment 65433
revised patch: an attempt to fix the Qt port</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>269321</commentid>
    <comment_count>6</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-08-25 10:22:51 -0700</bug_when>
    <thetext>Eric, is there anyway we can get the output from Qt?  I see it&apos;s failing, but have no idea why.  If I can get the output, it will be much easier for me to fix the issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>269397</commentid>
    <comment_count>7</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-08-25 11:34:48 -0700</bug_when>
    <thetext>I&apos;m not sure why Qt failed to post results here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>269422</commentid>
    <comment_count>8</comment_count>
      <attachid>65433</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-08-25 11:58:53 -0700</bug_when>
    <thetext>Comment on attachment 65433
revised patch: an attempt to fix the Qt port

Generally looks good. A few comments; please address before committing.

WebCore/platform/graphics/cg/ImageSourceCG.cpp:68
 +      , m_premultiplyAlpha(premultiplyAlpha)
Should add a FIXME indicating this isn&apos;t obeyed yet.

WebCore/platform/graphics/skia/GraphicsContext3DSkia.cpp: 
 +      if (skiaConfig != SkBitmap::kARGB_8888_Config)
I think it would be a good idea to retain some sort of this test of the configuration rather than just the assertion about pixels-&gt;rowBytes() below.

WebCore/platform/image-decoders/ImageDecoder.h:158
 +              if (!a &amp;&amp; m_premultiplyAlpha)
It may be clearer here and below if m_premultiplyAlpha is tested first; i.e., &quot;if (m_premultiplyAlpha &amp;&amp; !a)&quot;.

WebCore/platform/image-decoders/ImageDecoder.h:197
 +                                // Whether to premultiply alpha to R, G, B channels;
alpha to -&gt; alpha into

LayoutTests/fast/canvas/webgl/gl-teximage-expected.txt:1
 +  CONSOLE MESSAGE: line 260: ReferenceError: Can&apos;t find variable: notifyFinishedToHarness
This looks bad. Please investigate why this is being reported and fix.


LayoutTests/platform/mac/Skipped:297
 +  fast/canvas/webgl/gl-teximage.html
We should consider either adding this to mac-snowleopard or moving the skipped entries from that directory to this one. Doesn&apos;t need to be fixed right now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>269470</commentid>
    <comment_count>9</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-08-25 13:29:20 -0700</bug_when>
    <thetext>Committed r66039: &lt;http://trac.webkit.org/changeset/66039&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>269474</commentid>
    <comment_count>10</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-08-25 13:31:59 -0700</bug_when>
    <thetext>The landed patch addressed all the comments here except the last one.

(In reply to comment #8)
&gt; (From update of attachment 65433 [details])
&gt; Generally looks good. A few comments; please address before committing.
&gt; 
&gt; WebCore/platform/graphics/cg/ImageSourceCG.cpp:68
&gt;  +      , m_premultiplyAlpha(premultiplyAlpha)
&gt; Should add a FIXME indicating this isn&apos;t obeyed yet.
&gt; 
&gt; WebCore/platform/graphics/skia/GraphicsContext3DSkia.cpp: 
&gt;  +      if (skiaConfig != SkBitmap::kARGB_8888_Config)
&gt; I think it would be a good idea to retain some sort of this test of the configuration rather than just the assertion about pixels-&gt;rowBytes() below.
&gt; 
&gt; WebCore/platform/image-decoders/ImageDecoder.h:158
&gt;  +              if (!a &amp;&amp; m_premultiplyAlpha)
&gt; It may be clearer here and below if m_premultiplyAlpha is tested first; i.e., &quot;if (m_premultiplyAlpha &amp;&amp; !a)&quot;.
&gt; 
&gt; WebCore/platform/image-decoders/ImageDecoder.h:197
&gt;  +                                // Whether to premultiply alpha to R, G, B channels;
&gt; alpha to -&gt; alpha into
&gt; 
&gt; LayoutTests/fast/canvas/webgl/gl-teximage-expected.txt:1
&gt;  +  CONSOLE MESSAGE: line 260: ReferenceError: Can&apos;t find variable: notifyFinishedToHarness
&gt; This looks bad. Please investigate why this is being reported and fix.
&gt; 
&gt; 
&gt; LayoutTests/platform/mac/Skipped:297
&gt;  +  fast/canvas/webgl/gl-teximage.html
&gt; We should consider either adding this to mac-snowleopard or moving the skipped entries from that directory to this one. Doesn&apos;t need to be fixed right now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>269703</commentid>
    <comment_count>11</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-08-25 20:50:43 -0700</bug_when>
    <thetext>Need to deal with the case where image-&gt;data() == null (in texImage2D with HTMLCanvasElement input)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>269992</commentid>
    <comment_count>12</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-08-26 11:31:58 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; Need to deal with the case where image-&gt;data() == null (in texImage2D with HTMLCanvasElement input)

Is it possible to refer to the Canvas&apos;s ImageBuffer rather than an Image for this upload case?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>270010</commentid>
    <comment_count>13</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-08-26 11:52:18 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; (In reply to comment #11)
&gt; &gt; Need to deal with the case where image-&gt;data() == null (in texImage2D with HTMLCanvasElement input)
&gt; 
&gt; Is it possible to refer to the Canvas&apos;s ImageBuffer rather than an Image for this upload case?

I&apos;ll have a look.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>270271</commentid>
    <comment_count>14</comment_count>
      <attachid>65659</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-08-26 19:14:25 -0700</bug_when>
    <thetext>Created attachment 65659
patch: dealing case of texImage2D using HTMLCanvasElement as input</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>270272</commentid>
    <comment_count>15</comment_count>
      <attachid>65660</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-08-26 19:16:54 -0700</bug_when>
    <thetext>Created attachment 65660
revised patch: fix a tiny logic bug</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>270863</commentid>
    <comment_count>16</comment_count>
      <attachid>65660</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-08-27 18:00:20 -0700</bug_when>
    <thetext>Comment on attachment 65660
revised patch: fix a tiny logic bug

Looks good to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>270865</commentid>
    <comment_count>17</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-08-27 18:06:18 -0700</bug_when>
    <thetext>Committed r66288: &lt;http://trac.webkit.org/changeset/66288&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>65347</attachid>
            <date>2010-08-24 17:45:41 -0700</date>
            <delta_ts>2010-08-24 17:56:34 -0700</delta_ts>
            <desc>patch</desc>
            <filename>alpha.patch</filename>
            <type>text/plain</type>
            <size>53156</size>
            <attacher name="Zhenyao Mo">zmo</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NTk1NikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTUgQEAKKzIwMTAtMDgtMjQgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQYXNzaW5n
IHByZW11bHRpcGx5QWxwaGE9ZmFsc2UgdG8gdGV4e1N1Yn1JbWFnZTJEIGxvc2VzIGluZm9ybWF0
aW9uIChza2lhKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MzgyODIKKworICAgICAgICBUZXN0OiBmYXN0L2NhbnZhcy93ZWJnbC9nbC10ZXhpbWFnZS5o
dG1sCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5jcHA6
IEZpeCBhIGJ1ZyB3aGVyZSBhbHBoYSBjaGFubmVsIGlzIGlnbm9yZWQuCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwOiBBZGQgcHJlbXVsdGlwbHlBbHBoYSBmbGFn
LgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OkltYWdlU291cmNlKToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlU291cmNlOjpzZXREYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZVNvdXJjZS5oOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
Zy9JbWFnZVNvdXJjZUNHLmNwcDogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJj
ZTo6SW1hZ2VTb3VyY2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhp
Y3NDb250ZXh0M0RTa2lhLmNwcDogRml4IHRoZSBwcmVtdWx0aXBseUFscGhhIGRhdGEgbG9zcyBp
c3N1ZSBpbiBza2lhLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldElt
YWdlRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVy
LmNwcDogQWRkIHByZW11bHRpcGx5QWxwaGEgZmxhZy4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
RGVjb2Rlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlJHQkEzMkJ1ZmZlcjo6UkdCQTMy
QnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJHQkEzMkJ1ZmZlcjo6b3BlcmF0b3I9KToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaDogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpSR0JBMzJCdWZmZXI6OnByZW11bHRpcGx5QWxwaGEpOgorICAgICAg
ICAoV2ViQ29yZTo6UkdCQTMyQnVmZmVyOjpzZXRQcmVtdWx0aXBseUFscGhhKToKKyAgICAgICAg
KFdlYkNvcmU6OlJHQkEzMkJ1ZmZlcjo6c2V0UkdCQSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZURlY29kZXI6OkltYWdlRGVjb2Rlcik6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2Rl
cnMvYm1wL0JNUEltYWdlRGVjb2Rlci5jcHA6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Qk1Q
SW1hZ2VEZWNvZGVyOjpCTVBJbWFnZURlY29kZXIpOgorICAgICAgICAoV2ViQ29yZTo6Qk1QSW1h
Z2VEZWNvZGVyOjpmcmFtZUJ1ZmZlckF0SW5kZXgpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL2JtcC9CTVBJbWFnZURlY29kZXIuaDogRGl0dG8uCisgICAgICAgICogcGxhdGZv
cm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHA6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyOjpHSUZJbWFnZURlY29kZXIpOgorICAgICAgICAo
V2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyOjpmcmFtZUNvdW50KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmg6IERpdHRvLgorICAgICAgICAq
IHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2ljby9JQ09JbWFnZURlY29kZXIuY3BwOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OklDT0ltYWdlRGVjb2Rlcjo6SUNPSW1hZ2VEZWNvZGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OklDT0ltYWdlRGVjb2Rlcjo6ZnJhbWVDb3VudCk6CisgICAgICAgIChX
ZWJDb3JlOjpJQ09JbWFnZURlY29kZXI6OmRlY29kZUF0SW5kZXgpOgorICAgICAgICAqIHBsYXRm
b3JtL2ltYWdlLWRlY29kZXJzL2ljby9JQ09JbWFnZURlY29kZXIuaDogRGl0dG8uCisgICAgICAg
ICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmNwcDogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpKUEVHSW1hZ2VEZWNvZGVyOjpKUEVHSW1hZ2VEZWNvZGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkpQRUdJbWFnZURlY29kZXI6OmZyYW1lQnVmZmVyQXRJbmRl
eCk6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNv
ZGVyLmg6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJ
bWFnZURlY29kZXIuY3BwOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlBOR0ltYWdlRGVjb2Rl
cjo6UE5HSW1hZ2VEZWNvZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlBOR0ltYWdlRGVjb2Rlcjo6
ZnJhbWVCdWZmZXJBdEluZGV4KToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9w
bmcvUE5HSW1hZ2VEZWNvZGVyLmg6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL3NraWEvSW1hZ2VEZWNvZGVyU2tpYS5jcHA6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6UkdCQTMyQnVmZmVyOjpSR0JBMzJCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6UkdCQTMy
QnVmZmVyOjpvcGVyYXRvcj0pOgorCiAyMDEwLTA4LTI0ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3
ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQuCkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmNwcAkocmV2aXNpb24gNjU5NTApCisr
KyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDI0LDYgKzQyNCw3IEBAIHZvaWQgcGFja1JHQkE4VG9SR0JBOFByZW11bHRp
cGx5KGNvbnN0IHUKICAgICBkZXN0aW5hdGlvblswXSA9IHNvdXJjZVI7CiAgICAgZGVzdGluYXRp
b25bMV0gPSBzb3VyY2VHOwogICAgIGRlc3RpbmF0aW9uWzJdID0gc291cmNlQjsKKyAgICBkZXN0
aW5hdGlvblszXSA9IHNvdXJjZVszXTsKIH0KIAogLy8gRklYTUU6IHRoaXMgcm91dGluZSBpcyBs
b3NzeSBhbmQgbXVzdCBiZSByZW1vdmVkLgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZVNvdXJjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZVNvdXJjZS5jcHAJKHJldmlzaW9uIDY1OTUwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZVNvdXJjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDggKzQxLDkgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogdW5zaWduZWQgSW1hZ2VTb3VyY2U6OnNfbWF4UGl4ZWxzUGVy
RGVjb2RlZEltYWdlID0gMTAyNCAqIDEwMjQ7CiAjZW5kaWYKIAotSW1hZ2VTb3VyY2U6OkltYWdl
U291cmNlKCkKK0ltYWdlU291cmNlOjpJbWFnZVNvdXJjZShib29sIHByZW11bHRpcGx5QWxwaGEp
CiAgICAgOiBtX2RlY29kZXIoMCkKKyAgICAsIG1fcHJlbXVsdGlwbHlBbHBoYShwcmVtdWx0aXBs
eUFscGhhKQogewogfQogCkBAIC03Nyw3ICs3OCw3IEBAIHZvaWQgSW1hZ2VTb3VyY2U6OnNldERh
dGEoU2hhcmVkQnVmZmVyKiAKICAgICAvLyBJZiBpbnN1ZmZpY2llbnQgYnl0ZXMgYXJlIGF2YWls
YWJsZSB0byBkZXRlcm1pbmUgdGhlIGltYWdlIHR5cGUsIG5vIGRlY29kZXIgcGx1Z2luIHdpbGwg
YmUKICAgICAvLyBtYWRlLgogICAgIGlmICghbV9kZWNvZGVyKSB7Ci0gICAgICAgIG1fZGVjb2Rl
ciA9IHN0YXRpY19jYXN0PE5hdGl2ZUltYWdlU291cmNlUHRyPihJbWFnZURlY29kZXI6OmNyZWF0
ZSgqZGF0YSkpOworICAgICAgICBtX2RlY29kZXIgPSBzdGF0aWNfY2FzdDxOYXRpdmVJbWFnZVNv
dXJjZVB0cj4oSW1hZ2VEZWNvZGVyOjpjcmVhdGUoKmRhdGEsIG1fcHJlbXVsdGlwbHlBbHBoYSkp
OwogI2lmIEVOQUJMRShJTUFHRV9ERUNPREVSX0RPV05fU0FNUExJTkcpCiAgICAgICAgIGlmICht
X2RlY29kZXIgJiYgc19tYXhQaXhlbHNQZXJEZWNvZGVkSW1hZ2UpCiAgICAgICAgICAgICBtX2Rl
Y29kZXItPnNldE1heE51bVBpeGVscyhzX21heFBpeGVsc1BlckRlY29kZWRJbWFnZSk7CkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oCShyZXZpc2lvbiA2NTk1MCkK
KysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaAkod29ya2luZyBjb3B5
KQpAQCAtMTE0LDcgKzExNCw3IEBAIGNvbnN0IGludCBjQW5pbWF0aW9uTm9uZSA9IC0yOwogCiBj
bGFzcyBJbWFnZVNvdXJjZSA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CiBwdWJsaWM6Ci0gICAgSW1h
Z2VTb3VyY2UoKTsKKyAgICBJbWFnZVNvdXJjZShib29sIHByZW11bHRpcGx5QWxwaGEgPSB0cnVl
KTsKICAgICB+SW1hZ2VTb3VyY2UoKTsKIAogICAgIC8vIFRlbGxzIHRoZSBJbWFnZVNvdXJjZSB0
aGF0IHRoZSBJbWFnZSBubyBsb25nZXIgY2FyZXMgYWJvdXQgZGVjb2RlZCBmcmFtZQpAQCAtMTcy
LDYgKzE3Miw3IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBOYXRpdmVJbWFnZVNvdXJjZVB0
ciBtX2RlY29kZXI7CisgICAgYm9vbCBtX3ByZW11bHRpcGx5QWxwaGE7CiAjaWYgRU5BQkxFKElN
QUdFX0RFQ09ERVJfRE9XTl9TQU1QTElORykKICAgICBzdGF0aWMgdW5zaWduZWQgc19tYXhQaXhl
bHNQZXJEZWNvZGVkSW1hZ2U7CiAjZW5kaWYKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvSW1hZ2VTb3VyY2VDRy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9JbWFnZVNvdXJjZUNHLmNwcAkocmV2aXNpb24gNjU5NTApCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlU291cmNlQ0cuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02Myw4ICs2Myw5IEBAIHZvaWQgc2hhcmVkQnVmZmVyUmVsZWFzZSh2b2lkKiBpbmZvKQogfQog
I2VuZGlmCiAKLUltYWdlU291cmNlOjpJbWFnZVNvdXJjZSgpCitJbWFnZVNvdXJjZTo6SW1hZ2VT
b3VyY2UoYm9vbCBwcmVtdWx0aXBseUFscGhhKQogICAgIDogbV9kZWNvZGVyKDApCisgICAgLCBt
X3ByZW11bHRpcGx5QWxwaGEocHJlbXVsdGlwbHlBbHBoYSkKIHsKIH0KIApJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNzQ29udGV4dDNEU2tpYS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNzQ29udGV4dDNE
U2tpYS5jcHAJKHJldmlzaW9uIDY1OTUwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9z
a2lhL0dyYXBoaWNzQ29udGV4dDNEU2tpYS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMx
LDcgQEAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgogCiAjaW5jbHVkZSAiSW1hZ2Uu
aCIKKyNpbmNsdWRlICJJbWFnZVNvdXJjZS5oIgogI2luY2x1ZGUgIk5hdGl2ZUltYWdlU2tpYS5o
IgogCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgpAQCAtNDMsMjcgKzQ0LDI1IEBAIGJvb2wgR3JhcGhp
Y3NDb250ZXh0M0Q6OmdldEltYWdlRGF0YShJbWEKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBib29sIHByZW11bHRpcGx5QWxwaGEsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+JiBvdXRwdXRWZWN0b3IpCiB7Ci0gICAgaWYg
KCFpbWFnZSkKKyAgICBpZiAoIWltYWdlIHx8ICFpbWFnZS0+ZGF0YSgpKQogICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgTmF0aXZlSW1hZ2VTa2lhKiBza2lhSW1hZ2UgPSBpbWFnZS0+bmF0aXZl
SW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKLSAgICBpZiAoIXNraWFJbWFnZSkKKyAgICBJbWFnZVNv
dXJjZSBkZWNvZGVyKGZhbHNlKTsKKyAgICBkZWNvZGVyLnNldERhdGEoaW1hZ2UtPmRhdGEoKSwg
dHJ1ZSk7CisgICAgaWYgKCFkZWNvZGVyLmZyYW1lQ291bnQoKSB8fCAhZGVjb2Rlci5mcmFtZUlz
Q29tcGxldGVBdEluZGV4KDApKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgU2tCaXRtYXA6
OkNvbmZpZyBza2lhQ29uZmlnID0gc2tpYUltYWdlLT5jb25maWcoKTsKLSAgICAvLyBGSVhNRTog
bXVzdCBzdXBwb3J0IG1vcmUgaW1hZ2UgY29uZmlndXJhdGlvbnMuCi0gICAgaWYgKHNraWFDb25m
aWcgIT0gU2tCaXRtYXA6OmtBUkdCXzg4ODhfQ29uZmlnKQorICAgIGJvb2wgaGFzQWxwaGEgPSBk
ZWNvZGVyLmZyYW1lSGFzQWxwaGFBdEluZGV4KDApOworICAgIE93blB0cjxOYXRpdmVJbWFnZVNr
aWE+IHBpeGVscyhkZWNvZGVyLmNyZWF0ZUZyYW1lQXRJbmRleCgwKSk7CisgICAgaWYgKCFwaXhl
bHMuZ2V0KCkgfHwgIXBpeGVscy0+aXNEYXRhQ29tcGxldGUoKSB8fCAhcGl4ZWxzLT53aWR0aCgp
IHx8ICFwaXhlbHMtPmhlaWdodCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgU2tCaXRt
YXAmIHNraWFJbWFnZVJlZiA9ICpza2lhSW1hZ2U7CisgICAgU2tCaXRtYXAmIHNraWFJbWFnZVJl
ZiA9ICpwaXhlbHM7CiAgICAgU2tBdXRvTG9ja1BpeGVscyBsb2NrKHNraWFJbWFnZVJlZik7Ci0g
ICAgaW50IGhlaWdodCA9IHNraWFJbWFnZS0+aGVpZ2h0KCk7Ci0gICAgaW50IHJvd0J5dGVzID0g
c2tpYUltYWdlLT5yb3dCeXRlcygpOwotICAgIEFTU0VSVChyb3dCeXRlcyA9PSBza2lhSW1hZ2Ut
PndpZHRoKCkgKiA0KTsKLSAgICB1aW50OF90KiBwaXhlbHMgPSByZWludGVycHJldF9jYXN0PHVp
bnQ4X3QqPihza2lhSW1hZ2UtPmdldFBpeGVscygpKTsKLSAgICBvdXRwdXRWZWN0b3IucmVzaXpl
KHJvd0J5dGVzICogaGVpZ2h0KTsKKyAgICBBU1NFUlQocGl4ZWxzLT5yb3dCeXRlcygpID09IHBp
eGVscy0+d2lkdGgoKSAqIDQpOworICAgIG91dHB1dFZlY3Rvci5yZXNpemUocGl4ZWxzLT5yb3dC
eXRlcygpICogcGl4ZWxzLT5oZWlnaHQoKSk7CiAgICAgQWxwaGFPcCBuZWVkZWRBbHBoYU9wID0g
a0FscGhhRG9Ob3RoaW5nOwotICAgIGlmICghcHJlbXVsdGlwbHlBbHBoYSkKLSAgICAgICAgLy8g
RklYTUU6IG11c3QgZmV0Y2ggdGhlIGltYWdlIGRhdGEgYmVmb3JlIHRoZSBwcmVtdWx0aXBsaWNh
dGlvbiBzdGVwCi0gICAgICAgIG5lZWRlZEFscGhhT3AgPSBrQWxwaGFEb1VubXVsdGlwbHk7Ci0g
ICAgcmV0dXJuIHBhY2tQaXhlbHMocGl4ZWxzLCBrU291cmNlRm9ybWF0QkdSQTgsIHNraWFJbWFn
ZS0+d2lkdGgoKSwgaGVpZ2h0LCAwLAorICAgIGlmIChoYXNBbHBoYSAmJiBwcmVtdWx0aXBseUFs
cGhhKQorICAgICAgICBuZWVkZWRBbHBoYU9wID0ga0FscGhhRG9QcmVtdWx0aXBseTsKKyAgICBy
ZXR1cm4gcGFja1BpeGVscyhyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihwaXhlbHMt
PmdldFBpeGVscygpKSwKKyAgICAgICAgICAgICAgICAgICAgICBrU291cmNlRm9ybWF0QkdSQTgs
IHBpeGVscy0+d2lkdGgoKSwgcGl4ZWxzLT5oZWlnaHQoKSwgMCwKICAgICAgICAgICAgICAgICAg
ICAgICBmb3JtYXQsIHR5cGUsIG5lZWRlZEFscGhhT3AsIG91dHB1dFZlY3Rvci5kYXRhKCkpOwog
fQogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURl
Y29kZXIuY3BwCShyZXZpc2lvbiA2NTk1MCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVj
b2RlcnMvSW1hZ2VEZWNvZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIsNyArNTIsNyBAQCBz
dGF0aWMgdW5zaWduZWQgY29weUZyb21TaGFyZWRCdWZmZXIoY2hhCiAgICAgcmV0dXJuIGJ5dGVz
RXh0cmFjdGVkOwogfQogCi1JbWFnZURlY29kZXIqIEltYWdlRGVjb2Rlcjo6Y3JlYXRlKGNvbnN0
IFNoYXJlZEJ1ZmZlciYgZGF0YSkKK0ltYWdlRGVjb2RlciogSW1hZ2VEZWNvZGVyOjpjcmVhdGUo
Y29uc3QgU2hhcmVkQnVmZmVyJiBkYXRhLCBib29sIHByZW11bHRpcGx5QWxwaGEpCiB7CiAgICAg
Ly8gV2UgbmVlZCBhdCBsZWFzdCA0IGJ5dGVzIHRvIGZpZ3VyZSBvdXQgd2hhdCBraW5kIG9mIGlt
YWdlIHdlJ3JlIGRlYWxpbmcKICAgICAvLyB3aXRoLgpAQCAtNjQsMjQgKzY0LDI0IEBAIEltYWdl
RGVjb2RlciogSW1hZ2VEZWNvZGVyOjpjcmVhdGUoY29uc3QKIAogICAgIC8vIEdJRnMgYmVnaW4g
d2l0aCBHSUY4KDcgb3IgOSkuCiAgICAgaWYgKHN0cm5jbXAoY29udGVudHMsICJHSUY4IiwgNCkg
PT0gMCkKLSAgICAgICAgcmV0dXJuIG5ldyBHSUZJbWFnZURlY29kZXIoKTsKKyAgICAgICAgcmV0
dXJuIG5ldyBHSUZJbWFnZURlY29kZXIocHJlbXVsdGlwbHlBbHBoYSk7CiAKICAgICAvLyBUZXN0
IGZvciBQTkcuCiAgICAgaWYgKCFtZW1jbXAoY29udGVudHMsICJceDg5XHg1MFx4NEVceDQ3Iiwg
NCkpCi0gICAgICAgIHJldHVybiBuZXcgUE5HSW1hZ2VEZWNvZGVyKCk7CisgICAgICAgIHJldHVy
biBuZXcgUE5HSW1hZ2VEZWNvZGVyKHByZW11bHRpcGx5QWxwaGEpOwogCiAgICAgLy8gSlBFRwog
ICAgIGlmICghbWVtY21wKGNvbnRlbnRzLCAiXHhGRlx4RDhceEZGIiwgMykpCi0gICAgICAgIHJl
dHVybiBuZXcgSlBFR0ltYWdlRGVjb2RlcigpOworICAgICAgICByZXR1cm4gbmV3IEpQRUdJbWFn
ZURlY29kZXIocHJlbXVsdGlwbHlBbHBoYSk7CiAKICAgICAvLyBCTVAKICAgICBpZiAoc3RybmNt
cChjb250ZW50cywgIkJNIiwgMikgPT0gMCkKLSAgICAgICAgcmV0dXJuIG5ldyBCTVBJbWFnZURl
Y29kZXIoKTsKKyAgICAgICAgcmV0dXJuIG5ldyBCTVBJbWFnZURlY29kZXIocHJlbXVsdGlwbHlB
bHBoYSk7CiAKICAgICAvLyBJQ09zIGFsd2F5cyBiZWdpbiB3aXRoIGEgMi1ieXRlIDAgZm9sbG93
ZWQgYnkgYSAyLWJ5dGUgMS4KICAgICAvLyBDVVJzIGJlZ2luIHdpdGggMi1ieXRlIDAgZm9sbG93
ZWQgYnkgMi1ieXRlIDIuCiAgICAgaWYgKCFtZW1jbXAoY29udGVudHMsICJceDAwXHgwMFx4MDFc
eDAwIiwgNCkgfHwgIW1lbWNtcChjb250ZW50cywgIlx4MDBceDAwXHgwMlx4MDAiLCA0KSkKLSAg
ICAgICAgcmV0dXJuIG5ldyBJQ09JbWFnZURlY29kZXIoKTsKKyAgICAgICAgcmV0dXJuIG5ldyBJ
Q09JbWFnZURlY29kZXIocHJlbXVsdGlwbHlBbHBoYSk7CiAKICAgICAvLyBHaXZlIHVwLiBXZSBk
b24ndCBrbm93IHdoYXQgdGhlIGhlY2sgdGhpcyBpcy4KICAgICByZXR1cm4gMDsKQEAgLTk0LDYg
Kzk0LDcgQEAgUkdCQTMyQnVmZmVyOjpSR0JBMzJCdWZmZXIoKQogICAgICwgbV9zdGF0dXMoRnJh
bWVFbXB0eSkKICAgICAsIG1fZHVyYXRpb24oMCkKICAgICAsIG1fZGlzcG9zYWxNZXRob2QoRGlz
cG9zZU5vdFNwZWNpZmllZCkKKyAgICAsIG1fcHJlbXVsdGlwbHlBbHBoYSh0cnVlKQogewogfSAK
IApAQCAtMTA3LDYgKzEwOCw3IEBAIFJHQkEzMkJ1ZmZlciYgUkdCQTMyQnVmZmVyOjpvcGVyYXRv
cj0oY28KICAgICBzZXRTdGF0dXMob3RoZXIuc3RhdHVzKCkpOwogICAgIHNldER1cmF0aW9uKG90
aGVyLmR1cmF0aW9uKCkpOwogICAgIHNldERpc3Bvc2FsTWV0aG9kKG90aGVyLmRpc3Bvc2FsTWV0
aG9kKCkpOworICAgIHNldFByZW11bHRpcGx5QWxwaGEob3RoZXIucHJlbXVsdGlwbHlBbHBoYSgp
KTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2Ut
ZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaAkocmV2aXNpb24gNjU5NTApCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xMTgsMTIgKzExOCwxNCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIEZyYW1lU3Rh
dHVzIHN0YXR1cygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdHVzOyB9CiAgICAgICAgIHVuc2lnbmVk
IGR1cmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9kdXJhdGlvbjsgfQogICAgICAgICBGcmFtZURp
c3Bvc2FsTWV0aG9kIGRpc3Bvc2FsTWV0aG9kKCkgY29uc3QgeyByZXR1cm4gbV9kaXNwb3NhbE1l
dGhvZDsgfQorICAgICAgICBib29sIHByZW11bHRpcGx5QWxwaGEoKSBjb25zdCB7IHJldHVybiBt
X3ByZW11bHRpcGx5QWxwaGE7IH0KIAogICAgICAgICB2b2lkIHNldEhhc0FscGhhKGJvb2wgYWxw
aGEpOwogICAgICAgICB2b2lkIHNldFJlY3QoY29uc3QgSW50UmVjdCYgcikgeyBtX3JlY3QgPSBy
OyB9CiAgICAgICAgIHZvaWQgc2V0U3RhdHVzKEZyYW1lU3RhdHVzIHN0YXR1cyk7CiAgICAgICAg
IHZvaWQgc2V0RHVyYXRpb24odW5zaWduZWQgZHVyYXRpb24pIHsgbV9kdXJhdGlvbiA9IGR1cmF0
aW9uOyB9CiAgICAgICAgIHZvaWQgc2V0RGlzcG9zYWxNZXRob2QoRnJhbWVEaXNwb3NhbE1ldGhv
ZCBtZXRob2QpIHsgbV9kaXNwb3NhbE1ldGhvZCA9IG1ldGhvZDsgfQorICAgICAgICB2b2lkIHNl
dFByZW11bHRpcGx5QWxwaGEoYm9vbCBwcmVtdWx0aXBseUFscGhhKSB7IG1fcHJlbXVsdGlwbHlB
bHBoYSA9IHByZW11bHRpcGx5QWxwaGE7IH0KIAogICAgICAgICBpbmxpbmUgdm9pZCBzZXRSR0JB
KGludCB4LCBpbnQgeSwgdW5zaWduZWQgciwgdW5zaWduZWQgZywgdW5zaWduZWQgYiwgdW5zaWdu
ZWQgYSkKICAgICAgICAgewpAQCAtMTUzLDExICsxNTUsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiAgICAgICAgIGlubGluZSB2b2lkIHNldFJHQkEoUGl4ZWxEYXRhKiBkZXN0LCB1bnNpZ25l
ZCByLCB1bnNpZ25lZCBnLCB1bnNpZ25lZCBiLCB1bnNpZ25lZCBhKQogICAgICAgICB7Ci0gICAg
ICAgICAgICAvLyBXZSBzdG9yZSB0aGlzIGRhdGEgcHJlLW11bHRpcGxpZWQuCi0gICAgICAgICAg
ICBpZiAoYSA9PSAwKQorICAgICAgICAgICAgaWYgKGEgPT0gMCAmJiBtX3ByZW11bHRpcGx5QWxw
aGEpCiAgICAgICAgICAgICAgICAgKmRlc3QgPSAwOwogICAgICAgICAgICAgZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKGEgPCAyNTUpIHsKKyAgICAgICAgICAgICAgICBpZiAoYSA8IDI1NSAm
JiBtX3ByZW11bHRpcGx5QWxwaGEpIHsKICAgICAgICAgICAgICAgICAgICAgZmxvYXQgYWxwaGFQ
ZXJjZW50ID0gYSAvIDI1NS4wZjsKICAgICAgICAgICAgICAgICAgICAgciA9IHN0YXRpY19jYXN0
PHVuc2lnbmVkPihyICogYWxwaGFQZXJjZW50KTsKICAgICAgICAgICAgICAgICAgICAgZyA9IHN0
YXRpY19jYXN0PHVuc2lnbmVkPihnICogYWxwaGFQZXJjZW50KTsKQEAgLTE5Miw2ICsxOTMsOSBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIEZyYW1lRGlzcG9zYWxNZXRob2QgbV9kaXNw
b3NhbE1ldGhvZDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdoYXQgdG8gZG8g
d2l0aCB0aGlzIGZyYW1lJ3MgZGF0YSB3aGVuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBpbml0aWFsaXppbmcgdGhlIG5leHQgZnJhbWUuCisgICAgICAgIGJvb2wgbV9wcmVtdWx0
aXBseUFscGhhOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2hldGhlciB0byBw
cmVtdWx0aXBseSBhbHBoYSB0byBSLCBHLCBCIGNoYW5uZWxzOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gYnkgZGVmYXVsdCBpdCdzIHRydWUuCiAgICAgfTsKIAogICAgIC8vIFRo
ZSBJbWFnZURlY29kZXIgY2xhc3MgcmVwcmVzZW50cyBhIGJhc2UgY2xhc3MgZm9yIHNwZWNpZmlj
IGltYWdlIGZvcm1hdApAQCAtMjA1LDggKzIwOSw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICAvLyBtX21heE51bVBpeGVscy4gKE5vdCBzdXBwb3J0ZWQgYnkgYWxsIGltYWdlIGRlY29kZXJz
IHlldCkKICAgICBjbGFzcyBJbWFnZURlY29kZXIgOiBwdWJsaWMgTm9uY29weWFibGUgewogICAg
IHB1YmxpYzoKLSAgICAgICAgSW1hZ2VEZWNvZGVyKCkKKyAgICAgICAgSW1hZ2VEZWNvZGVyKGJv
b2wgcHJlbXVsdGlwbHlBbHBoYSkKICAgICAgICAgICAgIDogbV9zY2FsZWQoZmFsc2UpCisgICAg
ICAgICAgICAsIG1fcHJlbXVsdGlwbHlBbHBoYShwcmVtdWx0aXBseUFscGhhKQogICAgICAgICAg
ICAgLCBtX3NpemVBdmFpbGFibGUoZmFsc2UpCiAgICAgICAgICAgICAsIG1fbWF4TnVtUGl4ZWxz
KC0xKQogICAgICAgICAgICAgLCBtX2lzQWxsRGF0YVJlY2VpdmVkKGZhbHNlKQpAQCAtMjE5LDcg
KzIyNCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgLy8gRmFjdG9yeSBmdW5jdGlv
biB0byBjcmVhdGUgYW4gSW1hZ2VEZWNvZGVyLiAgUG9ydHMgdGhhdCBzdWJjbGFzcwogICAgICAg
ICAvLyBJbWFnZURlY29kZXIgY2FuIHByb3ZpZGUgdGhlaXIgb3duIGltcGxlbWVudGF0aW9uIG9m
IHRoaXMgdG8gYXZvaWQKICAgICAgICAgLy8gbmVlZGluZyB0byB3cml0ZSBhIGRlZGljYXRlZCBz
ZXREYXRhKCkgaW1wbGVtZW50YXRpb24uCi0gICAgICAgIHN0YXRpYyBJbWFnZURlY29kZXIqIGNy
ZWF0ZShjb25zdCBTaGFyZWRCdWZmZXImIGRhdGEpOworICAgICAgICBzdGF0aWMgSW1hZ2VEZWNv
ZGVyKiBjcmVhdGUoY29uc3QgU2hhcmVkQnVmZmVyJiBkYXRhLCBib29sIHByZW11bHRpcGx5QWxw
aGEpOwogCiAgICAgICAgIC8vIFRoZSB0aGUgZmlsZW5hbWUgZXh0ZW5zaW9uIHVzdWFsbHkgYXNz
b2NpYXRlZCB3aXRoIGFuIHVuZGVjb2RlZCBpbWFnZQogICAgICAgICAvLyBvZiB0aGlzIHR5cGUu
CkBAIC0zMzMsNiArMzM4LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBib29sIG1f
c2NhbGVkOwogICAgICAgICBWZWN0b3I8aW50PiBtX3NjYWxlZENvbHVtbnM7CiAgICAgICAgIFZl
Y3RvcjxpbnQ+IG1fc2NhbGVkUm93czsKKyAgICAgICAgYm9vbCBtX3ByZW11bHRpcGx5QWxwaGE7
CiAKICAgICBwcml2YXRlOgogICAgICAgICAvLyBTb21lIGNvZGUgcGF0aHMgY29tcHV0ZSB0aGUg
c2l6ZSBvZiB0aGUgaW1hZ2UgYXMgIndpZHRoICogaGVpZ2h0ICogNCIKSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1wL0JNUEltYWdlRGVjb2Rlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9ibXAvQk1QSW1hZ2VEZWNvZGVy
LmNwcAkocmV2aXNpb24gNjU5NTApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJz
L2JtcC9CTVBJbWFnZURlY29kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw4ICs0MCw5IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIC8vIGRvbid0IHBhY2spLgogc3RhdGljIGNvbnN0IHNpemVf
dCBzaXplT2ZGaWxlSGVhZGVyID0gMTQ7CiAKLUJNUEltYWdlRGVjb2Rlcjo6Qk1QSW1hZ2VEZWNv
ZGVyKCkKLSAgICA6IG1fZGVjb2RlZE9mZnNldCgwKQorQk1QSW1hZ2VEZWNvZGVyOjpCTVBJbWFn
ZURlY29kZXIoYm9vbCBwcmVtdWx0aXBseUFscGhhKQorICAgIDogSW1hZ2VEZWNvZGVyKHByZW11
bHRpcGx5QWxwaGEpCisgICAgLCBtX2RlY29kZWRPZmZzZXQoMCkKIHsKIH0KIApAQCAtNjgsOCAr
NjksMTAgQEAgUkdCQTMyQnVmZmVyKiBCTVBJbWFnZURlY29kZXI6OmZyYW1lQnVmZgogICAgIGlm
IChpbmRleCkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBpZiAobV9mcmFtZUJ1ZmZlckNhY2hl
LmlzRW1wdHkoKSkKKyAgICBpZiAobV9mcmFtZUJ1ZmZlckNhY2hlLmlzRW1wdHkoKSkgewogICAg
ICAgICBtX2ZyYW1lQnVmZmVyQ2FjaGUucmVzaXplKDEpOworICAgICAgICBtX2ZyYW1lQnVmZmVy
Q2FjaGUuZmlyc3QoKS5zZXRQcmVtdWx0aXBseUFscGhhKG1fcHJlbXVsdGlwbHlBbHBoYSk7Cisg
ICAgfQogCiAgICAgUkdCQTMyQnVmZmVyKiBidWZmZXIgPSAmbV9mcmFtZUJ1ZmZlckNhY2hlLmZp
cnN0KCk7CiAgICAgaWYgKGJ1ZmZlci0+c3RhdHVzKCkgIT0gUkdCQTMyQnVmZmVyOjpGcmFtZUNv
bXBsZXRlKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9ibXAvQk1QSW1h
Z2VEZWNvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVy
cy9ibXAvQk1QSW1hZ2VEZWNvZGVyLmgJKHJldmlzaW9uIDY1OTUwKQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9pbWFnZS1kZWNvZGVycy9ibXAvQk1QSW1hZ2VEZWNvZGVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM5LDcgKzM5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIC8vIFRoaXMgY2xhc3Mg
ZGVjb2RlcyB0aGUgQk1QIGltYWdlIGZvcm1hdC4KICAgICBjbGFzcyBCTVBJbWFnZURlY29kZXIg
OiBwdWJsaWMgSW1hZ2VEZWNvZGVyIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIEJNUEltYWdlRGVj
b2RlcigpOworICAgICAgICBCTVBJbWFnZURlY29kZXIoYm9vbCBwcmVtdWx0aXBseUFscGhhKTsK
IAogICAgICAgICAvLyBJbWFnZURlY29kZXIKICAgICAgICAgdmlydHVhbCBTdHJpbmcgZmlsZW5h
bWVFeHRlbnNpb24oKSBjb25zdCB7IHJldHVybiAiYm1wIjsgfQpJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3Bw
CShyZXZpc2lvbiA2NTk1MCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lm
L0dJRkltYWdlRGVjb2Rlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDggKzI5LDkgQEAKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1HSUZJbWFnZURlY29kZXI6OkdJRkltYWdlRGVjb2Rlcigp
Ci0gICAgOiBtX2FscmVhZHlTY2FubmVkVGhpc0RhdGFGb3JGcmFtZUNvdW50KHRydWUpCitHSUZJ
bWFnZURlY29kZXI6OkdJRkltYWdlRGVjb2Rlcihib29sIHByZW11bHRpcGx5QWxwaGEpCisgICAg
OiBJbWFnZURlY29kZXIocHJlbXVsdGlwbHlBbHBoYSkKKyAgICAsIG1fYWxyZWFkeVNjYW5uZWRU
aGlzRGF0YUZvckZyYW1lQ291bnQodHJ1ZSkKICAgICAsIG1fcmVwZXRpdGlvbkNvdW50KGNBbmlt
YXRpb25Mb29wT25jZSkKICAgICAsIG1fcmVhZE9mZnNldCgwKQogewpAQCAtODMsNiArODQsOCBA
QCBzaXplX3QgR0lGSW1hZ2VEZWNvZGVyOjpmcmFtZUNvdW50KCkKICAgICAgICAgcmVhZGVyLnJl
YWQoKGNvbnN0IHVuc2lnbmVkIGNoYXIqKW1fZGF0YS0+ZGF0YSgpLCBtX2RhdGEtPnNpemUoKSwg
R0lGRnJhbWVDb3VudFF1ZXJ5LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oLTEpKTsKICAgICAgICAg
bV9hbHJlYWR5U2Nhbm5lZFRoaXNEYXRhRm9yRnJhbWVDb3VudCA9IHRydWU7CiAgICAgICAgIG1f
ZnJhbWVCdWZmZXJDYWNoZS5yZXNpemUocmVhZGVyLmltYWdlc19jb3VudCk7CisgICAgICAgIGZv
ciAoaW50IGkgPSAwOyBpPHJlYWRlci5pbWFnZXNfY291bnQ7ICsraSkKKyAgICAgICAgICAgIG1f
ZnJhbWVCdWZmZXJDYWNoZVtpXS5zZXRQcmVtdWx0aXBseUFscGhhKG1fcHJlbXVsdGlwbHlBbHBo
YSk7CiAgICAgfQogCiAgICAgcmV0dXJuIG1fZnJhbWVCdWZmZXJDYWNoZS5zaXplKCk7CkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFn
ZURlY29kZXIuaAkocmV2aXNpb24gNjU5NTApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYs
NyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgLy8gVGhpcyBjbGFzcyBkZWNvZGVzIHRoZSBH
SUYgaW1hZ2UgZm9ybWF0LgogICAgIGNsYXNzIEdJRkltYWdlRGVjb2RlciA6IHB1YmxpYyBJbWFn
ZURlY29kZXIgewogICAgIHB1YmxpYzoKLSAgICAgICAgR0lGSW1hZ2VEZWNvZGVyKCk7CisgICAg
ICAgIEdJRkltYWdlRGVjb2Rlcihib29sIHByZW11bHRpcGx5QWxwaGEpOwogICAgICAgICB2aXJ0
dWFsIH5HSUZJbWFnZURlY29kZXIoKTsKIAogICAgICAgICBlbnVtIEdJRlF1ZXJ5IHsgR0lGRnVs
bFF1ZXJ5LCBHSUZTaXplUXVlcnksIEdJRkZyYW1lQ291bnRRdWVyeSB9OwpJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9pY28vSUNPSW1hZ2VEZWNvZGVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2ljby9JQ09JbWFnZURlY29k
ZXIuY3BwCShyZXZpc2lvbiA2NTk1MCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2Rl
cnMvaWNvL0lDT0ltYWdlRGVjb2Rlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDggKzQ0LDkg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogc3RhdGljIGNvbnN0IHNpemVfdCBzaXplT2ZEaXJlY3Rv
cnkgPSA2Owogc3RhdGljIGNvbnN0IHNpemVfdCBzaXplT2ZEaXJFbnRyeSA9IDE2OwogCi1JQ09J
bWFnZURlY29kZXI6OklDT0ltYWdlRGVjb2RlcigpCi0gICAgOiBtX2RlY29kZWRPZmZzZXQoMCkK
K0lDT0ltYWdlRGVjb2Rlcjo6SUNPSW1hZ2VEZWNvZGVyKGJvb2wgcHJlbXVsdGlwbHlBbHBoYSkK
KyAgICA6IEltYWdlRGVjb2RlcihwcmVtdWx0aXBseUFscGhhKQorICAgICwgbV9kZWNvZGVkT2Zm
c2V0KDApCiB7CiB9CiAKQEAgLTk2LDggKzk3LDExIEBAIGJvb2wgSUNPSW1hZ2VEZWNvZGVyOjpz
ZXRTaXplKHVuc2lnbmVkIHcKIHNpemVfdCBJQ09JbWFnZURlY29kZXI6OmZyYW1lQ291bnQoKQog
ewogICAgIGRlY29kZSgwLCB0cnVlKTsKLSAgICBpZiAobV9mcmFtZUJ1ZmZlckNhY2hlLmlzRW1w
dHkoKSkKKyAgICBpZiAobV9mcmFtZUJ1ZmZlckNhY2hlLmlzRW1wdHkoKSkgewogICAgICAgICBt
X2ZyYW1lQnVmZmVyQ2FjaGUucmVzaXplKG1fZGlyRW50cmllcy5zaXplKCkpOworICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZGlyRW50cmllcy5zaXplKCk7ICsraSkKKyAgICAgICAg
ICAgIG1fZnJhbWVCdWZmZXJDYWNoZVtpXS5zZXRQcmVtdWx0aXBseUFscGhhKG1fcHJlbXVsdGlw
bHlBbHBoYSk7CisgICAgfQogICAgIC8vIENBVVRJT046IFdlIG11c3Qgbm90IHJlc2l6ZSBtX2Zy
YW1lQnVmZmVyQ2FjaGUgYWdhaW4gYWZ0ZXIgdGhpcywgYXMKICAgICAvLyBkZWNvZGVBdEluZGV4
KCkgbWF5IGdpdmUgYSBCTVBJbWFnZVJlYWRlciBhIHBvaW50ZXIgdG8gb25lIG9mIHRoZQogICAg
IC8vIGVudHJpZXMuCkBAIC0xOTcsNyArMjAxLDcgQEAgYm9vbCBJQ09JbWFnZURlY29kZXI6OmRl
Y29kZUF0SW5kZXgoc2l6ZQogICAgIH0KIAogICAgIGlmICghbV9wbmdEZWNvZGVyc1tpbmRleF0p
IHsKLSAgICAgICAgbV9wbmdEZWNvZGVyc1tpbmRleF0uc2V0KG5ldyBQTkdJbWFnZURlY29kZXIo
KSk7CisgICAgICAgIG1fcG5nRGVjb2RlcnNbaW5kZXhdLnNldChuZXcgUE5HSW1hZ2VEZWNvZGVy
KG1fcHJlbXVsdGlwbHlBbHBoYSkpOwogICAgICAgICBzZXREYXRhRm9yUE5HRGVjb2RlckF0SW5k
ZXgoaW5kZXgpOwogICAgIH0KICAgICAvLyBGYWlsIGlmIHRoZSBzaXplIHRoZSBQTkdJbWFnZURl
Y29kZXIgY2FsY3VsYXRlZCBkb2VzIG5vdCBtYXRjaCB0aGUgc2l6ZQpJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9pY28vSUNPSW1hZ2VEZWNvZGVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9pY28vSUNPSW1hZ2VEZWNvZGVyLmgJ
KHJldmlzaW9uIDY1OTUwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9pY28v
SUNPSW1hZ2VEZWNvZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgIC8vIFRoaXMgY2xhc3MgZGVjb2RlcyB0aGUgSUNPIGFuZCBDVVIg
aW1hZ2UgZm9ybWF0cy4KICAgICBjbGFzcyBJQ09JbWFnZURlY29kZXIgOiBwdWJsaWMgSW1hZ2VE
ZWNvZGVyIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIElDT0ltYWdlRGVjb2RlcigpOworICAgICAg
ICBJQ09JbWFnZURlY29kZXIoYm9vbCBwcmVtdWx0aXBseUFscGhhKTsKICAgICAgICAgdmlydHVh
bCB+SUNPSW1hZ2VEZWNvZGVyKCk7CiAKICAgICAgICAgLy8gSW1hZ2VEZWNvZGVyCkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJ
bWFnZURlY29kZXIuY3BwCShyZXZpc2lvbiA2NTk1MCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzYxLDcgKzM2MSw4IEBAIHZvaWQgdGVybV9zb3VyY2Uoal9kZWNvbXByZXNzX3B0ciBqZCkKICAg
ICBzcmMtPmRlY29kZXItPmRlY29kZXIoKS0+anBlZ0NvbXBsZXRlKCk7CiB9CiAKLUpQRUdJbWFn
ZURlY29kZXI6OkpQRUdJbWFnZURlY29kZXIoKQorSlBFR0ltYWdlRGVjb2Rlcjo6SlBFR0ltYWdl
RGVjb2Rlcihib29sIHByZW11bHRpcGx5QWxwaGEpCisgICAgOiBJbWFnZURlY29kZXIocHJlbXVs
dGlwbHlBbHBoYSkKIHsKIH0KIApAQCAtMzkxLDggKzM5MiwxMCBAQCBSR0JBMzJCdWZmZXIqIEpQ
RUdJbWFnZURlY29kZXI6OmZyYW1lQnVmCiAgICAgaWYgKGluZGV4KQogICAgICAgICByZXR1cm4g
MDsKIAotICAgIGlmIChtX2ZyYW1lQnVmZmVyQ2FjaGUuaXNFbXB0eSgpKQorICAgIGlmIChtX2Zy
YW1lQnVmZmVyQ2FjaGUuaXNFbXB0eSgpKSB7CiAgICAgICAgIG1fZnJhbWVCdWZmZXJDYWNoZS5y
ZXNpemUoMSk7CisgICAgICAgIG1fZnJhbWVCdWZmZXJDYWNoZVswXS5zZXRQcmVtdWx0aXBseUFs
cGhhKG1fcHJlbXVsdGlwbHlBbHBoYSk7CisgICAgfQogCiAgICAgUkdCQTMyQnVmZmVyJiBmcmFt
ZSA9IG1fZnJhbWVCdWZmZXJDYWNoZVswXTsKICAgICBpZiAoZnJhbWUuc3RhdHVzKCkgIT0gUkdC
QTMyQnVmZmVyOjpGcmFtZUNvbXBsZXRlKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5oCShyZXZpc2lvbiA2
NTk1MCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VE
ZWNvZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgIC8vIFRoaXMgY2xhc3MgZGVjb2RlcyB0aGUgSlBFRyBpbWFnZSBmb3JtYXQuCiAg
ICAgY2xhc3MgSlBFR0ltYWdlRGVjb2RlciA6IHB1YmxpYyBJbWFnZURlY29kZXIgewogICAgIHB1
YmxpYzoKLSAgICAgICAgSlBFR0ltYWdlRGVjb2RlcigpOworICAgICAgICBKUEVHSW1hZ2VEZWNv
ZGVyKGJvb2wgcHJlbXVsdGlwbHlBbHBoYSk7CiAgICAgICAgIHZpcnR1YWwgfkpQRUdJbWFnZURl
Y29kZXIoKTsKIAogICAgICAgICAvLyBJbWFnZURlY29kZXIKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmNwcAko
cmV2aXNpb24gNjU5NTApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9Q
TkdJbWFnZURlY29kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjksOCArMTY5LDkgQEAgcHJp
dmF0ZToKICAgICB1bnNpZ25lZCBtX2N1cnJlbnRCdWZmZXJTaXplOwogfTsKIAotUE5HSW1hZ2VE
ZWNvZGVyOjpQTkdJbWFnZURlY29kZXIoKQotICAgIDogbV9kb05vdGhpbmdPbkZhaWx1cmUoZmFs
c2UpCitQTkdJbWFnZURlY29kZXI6OlBOR0ltYWdlRGVjb2Rlcihib29sIHByZW11bHRpcGx5QWxw
aGEpCisgICAgOiBJbWFnZURlY29kZXIocHJlbXVsdGlwbHlBbHBoYSkKKyAgICAsIG1fZG9Ob3Ro
aW5nT25GYWlsdXJlKGZhbHNlKQogewogfQogCkBAIC0yMDAsOCArMjAxLDEwIEBAIFJHQkEzMkJ1
ZmZlciogUE5HSW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZmYKICAgICBpZiAoaW5kZXgpCiAgICAgICAg
IHJldHVybiAwOwogCi0gICAgaWYgKG1fZnJhbWVCdWZmZXJDYWNoZS5pc0VtcHR5KCkpCisgICAg
aWYgKG1fZnJhbWVCdWZmZXJDYWNoZS5pc0VtcHR5KCkpIHsKICAgICAgICAgbV9mcmFtZUJ1ZmZl
ckNhY2hlLnJlc2l6ZSgxKTsKKyAgICAgICAgbV9mcmFtZUJ1ZmZlckNhY2hlWzBdLnNldFByZW11
bHRpcGx5QWxwaGEobV9wcmVtdWx0aXBseUFscGhhKTsKKyAgICB9CiAKICAgICBSR0JBMzJCdWZm
ZXImIGZyYW1lID0gbV9mcmFtZUJ1ZmZlckNhY2hlWzBdOwogICAgIGlmIChmcmFtZS5zdGF0dXMo
KSAhPSBSR0JBMzJCdWZmZXI6OkZyYW1lQ29tcGxldGUpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuaAkocmV2aXNp
b24gNjU5NTApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFn
ZURlY29kZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgLy8gVGhpcyBjbGFzcyBkZWNvZGVzIHRoZSBQTkcgaW1hZ2UgZm9ybWF0Lgog
ICAgIGNsYXNzIFBOR0ltYWdlRGVjb2RlciA6IHB1YmxpYyBJbWFnZURlY29kZXIgewogICAgIHB1
YmxpYzoKLSAgICAgICAgUE5HSW1hZ2VEZWNvZGVyKCk7CisgICAgICAgIFBOR0ltYWdlRGVjb2Rl
cihib29sIHByZW11bHRpcGx5QWxwaGEpOwogICAgICAgICB2aXJ0dWFsIH5QTkdJbWFnZURlY29k
ZXIoKTsKIAogICAgICAgICAvLyBJbWFnZURlY29kZXIKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvc2tpYS9JbWFnZURlY29kZXJTa2lhLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3NraWEvSW1hZ2VEZWNvZGVyU2tpYS5jcHAJ
KHJldmlzaW9uIDY1OTUwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9za2lh
L0ltYWdlRGVjb2RlclNraWEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBAIFJH
QkEzMkJ1ZmZlcjo6UkdCQTMyQnVmZmVyKCkKICAgICA6IG1fc3RhdHVzKEZyYW1lRW1wdHkpCiAg
ICAgLCBtX2R1cmF0aW9uKDApCiAgICAgLCBtX2Rpc3Bvc2FsTWV0aG9kKERpc3Bvc2VOb3RTcGVj
aWZpZWQpCisgICAgLCBtX3ByZW11bHRpcGx5QWxwaGEodHJ1ZSkKIHsKIH0KIApAQCAtNDksNiAr
NTAsNyBAQCBSR0JBMzJCdWZmZXImIFJHQkEzMkJ1ZmZlcjo6b3BlcmF0b3I9KGNvCiAgICAgc2V0
U3RhdHVzKG90aGVyLnN0YXR1cygpKTsKICAgICBzZXREdXJhdGlvbihvdGhlci5kdXJhdGlvbigp
KTsKICAgICBzZXREaXNwb3NhbE1ldGhvZChvdGhlci5kaXNwb3NhbE1ldGhvZCgpKTsKKyAgICBz
ZXRQcmVtdWx0aXBseUFscGhhKG90aGVyLnByZW11bHRpcGx5QWxwaGEoKSk7CiAgICAgcmV0dXJu
ICp0aGlzOwogfQogCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHJldmlzaW9uIDY1OTU2KQorKysgV2ViS2l0
L2Nocm9taXVtL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDEw
LTA4LTI0ICBaaGVueWFvIE1vICA8em1vQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUGFzc2luZyBwcmVtdWx0aXBseUFscGhhPWZh
bHNlIHRvIHRleHtTdWJ9SW1hZ2UyRCBsb3NlcyBpbmZvcm1hdGlvbiAoc2tpYSkKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM4MjgyCisKKyAgICAgICAg
KiBzcmMvV2ViSW1hZ2VEZWNvZGVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViSW1hZ2VEZWNv
ZGVyOjppbml0KTogQWRkIHByZW11bHRpcGx5QWxwaGEgZmxhZy4KKwogMjAxMC0wOC0yNCAgSmlh
biBMaSAgPGppYW5saUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4g
RmlzaGVyLgpJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJbWFnZURlY29kZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViSW1hZ2VEZWNvZGVyLmNwcAkocmV2
aXNpb24gNjU5NTApCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYkltYWdlRGVjb2Rlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTU2LDEwICs1NiwxMCBAQCB2b2lkIFdlYkltYWdlRGVjb2Rlcjo6
aW5pdChUeXBlIHR5cGUpCiB7CiAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAgY2FzZSBUeXBlQk1Q
OgotICAgICAgICBtX3ByaXZhdGUgPSBuZXcgQk1QSW1hZ2VEZWNvZGVyKCk7CisgICAgICAgIG1f
cHJpdmF0ZSA9IG5ldyBCTVBJbWFnZURlY29kZXIodHJ1ZSk7CiAgICAgICAgIGJyZWFrOwogICAg
IGNhc2UgVHlwZUlDTzoKLSAgICAgICAgbV9wcml2YXRlID0gbmV3IElDT0ltYWdlRGVjb2Rlcigp
OworICAgICAgICBtX3ByaXZhdGUgPSBuZXcgSUNPSW1hZ2VEZWNvZGVyKHRydWUpOwogICAgICAg
ICBicmVhazsKICAgICB9CiB9CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA2NTk1NikKKysrIExheW91dFRl
c3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI4IEBACisyMDEwLTA4LTI0
ICBaaGVueWFvIE1vICA8em1vQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgUGFzc2luZyBwcmVtdWx0aXBseUFscGhhPWZhbHNlIHRv
IHRleHtTdWJ9SW1hZ2UyRCBsb3NlcyBpbmZvcm1hdGlvbiAoc2tpYSkKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM4MjgyCisKKyAgICAgICAgKiBmYXN0
L2NhbnZhcy93ZWJnbC9nbC10ZXhpbWFnZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAq
IGZhc3QvY2FudmFzL3dlYmdsL2dsLXRleGltYWdlLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZh
c3QvY2FudmFzL3dlYmdsL3Jlc291cmNlcy8zeDMucG5nOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0
L2NhbnZhcy93ZWJnbC9yZXNvdXJjZXMvZ3JheS1yYW1wLTI1Ni13aXRoLTEyOC1hbHBoYS5wbmc6
IEFkZGVkLgorICAgICAgICAqIGZhc3QvY2FudmFzL3dlYmdsL3Jlc291cmNlcy9ncmF5LXJhbXAt
MjU2LnBuZzogQWRkZWQuCisgICAgICAgICogZmFzdC9jYW52YXMvd2ViZ2wvcmVzb3VyY2VzL2dy
YXktcmFtcC1kZWZhdWx0LWdhbW1hLnBuZzogQWRkZWQuCisgICAgICAgICogZmFzdC9jYW52YXMv
d2ViZ2wvcmVzb3VyY2VzL2dyYXktcmFtcC1nYW1tYTAuMS5wbmc6IEFkZGVkLgorICAgICAgICAq
IGZhc3QvY2FudmFzL3dlYmdsL3Jlc291cmNlcy9ncmF5LXJhbXAtZ2FtbWExLjAucG5nOiBBZGRl
ZC4KKyAgICAgICAgKiBmYXN0L2NhbnZhcy93ZWJnbC9yZXNvdXJjZXMvZ3JheS1yYW1wLWdhbW1h
Mi4wLnBuZzogQWRkZWQuCisgICAgICAgICogZmFzdC9jYW52YXMvd2ViZ2wvcmVzb3VyY2VzL2dy
YXktcmFtcC1nYW1tYTQuMC5wbmc6IEFkZGVkLgorICAgICAgICAqIGZhc3QvY2FudmFzL3dlYmds
L3Jlc291cmNlcy9ncmF5LXJhbXAtZ2FtbWE5LjAucG5nOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0
L2NhbnZhcy93ZWJnbC9yZXNvdXJjZXMvZ3JheS1yYW1wLnBuZzogQWRkZWQuCisgICAgICAgICog
ZmFzdC9jYW52YXMvd2ViZ2wvcmVzb3VyY2VzL3dlYmdsLXRlc3QtdXRpbHMuanM6IFN5bmMgd2l0
aCBraHJvbm9zLgorICAgICAgICAoV2ViR0xUZXN0VXRpbHMpOgorICAgICAgICAqIGZhc3QvY2Fu
dmFzL3dlYmdsL3Jlc291cmNlcy96ZXJvLWFscGhhLnBuZzogQWRkZWQuCisgICAgICAgICogcGxh
dGZvcm0vY2hyb21pdW0vdGVzdF9leHBlY3RhdGlvbnMudHh0OiBEb24ndCBydW4gZ2wtdGV4aW1h
Z2UuaHRtbCBmb3IgbWFjLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9Ta2lwcGVkOiBEb24ndCBy
dW4gZ2wtdGV4aW1hZ2UuaHRtbCBmb3IgbWFjLgorCiAyMDEwLTA4LTI0ICBEdW1pdHJ1IERhbmls
aXVjICA8ZHVtaUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgdXBkYXRpbmcg
YSBjaHJvbWl1bS1saW51eCBleHBlY3RhdGlvbi4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvY2Fu
dmFzL3dlYmdsL2dsLXRleGltYWdlLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9nbC10ZXhpbWFnZS1leHBlY3RlZC50eHQJKHJldmlzaW9u
IDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9nbC10ZXhpbWFnZS1leHBlY3Rl
ZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjIgQEAKK0NPTlNPTEUgTUVTU0FHRTogbGlu
ZSAyNjA6IFJlZmVyZW5jZUVycm9yOiBDYW4ndCBmaW5kIHZhcmlhYmxlOiBub3RpZnlGaW5pc2hl
ZFRvSGFybmVzcworVGVzdCB0ZXhJbWFnZTJEIGNvbnZlcnNpb25zLgorCitPbiBzdWNjZXNzLCB5
b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVT
VCBDT01QTEVURSIuCisKK1BBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJP
UiA6IFNob3VsZCBiZSBubyBlcnJvcnMgZnJvbSBzZXR1cC4KKworY2hlY2sgcGl4ZWxzIGFyZSBO
T1QgcHJlLW11bHRpcGxpZWQKK1BBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19F
UlJPUiA6IFNob3VsZCBiZSBubyBlcnJvcnMgZnJvbSBzZXR1cAorUEFTUyBwaXhlbCAwLCAxNSBz
aG91bGQgYmUgMCwgMCwgMCwgMjU1IHdhcyAwLCAwLCAwLCAyNTUKK1BBU1MgcGl4ZWwgMTI4LCAx
NSBzaG91bGQgYmUgMjU1LCAwLCAyNTUsIDI1NSB3YXMgMjU1LCAwLCAwLCAyNTUKK1BBU1MgcGl4
ZWwgMjU1LCAxNSBzaG91bGQgYmUgMCwgMCwgMjU1LCAyNTUgd2FzIDAsIDAsIDI1NSwgMjU1CitQ
QVNTIHBpeGVsIDAsIDggc2hvdWxkIGJlIDEyOCwgMTI4LCAxMjgsIDI1NSB3YXMgMTI4LCAxMjgs
IDEyOCwgMjU1CitQQVNTIHBpeGVsIDEyOCwgOCBzaG91bGQgYmUgMjU1LCAyNTUsIDI1NSwgMjU1
IHdhcyAyNTUsIDI1NSwgMjU1LCAyNTUKK1BBU1MgcGl4ZWwgMjU1LCA4IHNob3VsZCBiZSAwLCAy
NTUsIDI1NSwgMjU1IHdhcyAwLCAyNTUsIDI1NSwgMjU1CitQQVNTIHBpeGVsIDAsIDAgc2hvdWxk
IGJlIDI1NSwgMCwgMCwgMjU1IHdhcyAyNTUsIDAsIDAsIDI1NQorUEFTUyBwaXhlbCAxMjgsIDAg
c2hvdWxkIGJlIDI1NSwgMjU1LCAwLCAyNTUgd2FzIDI1NSwgMjU1LCAwLCAyNTUKK1BBU1MgcGl4
ZWwgMjU1LCAwIHNob3VsZCBiZSAwLCAyNTUsIDAsIDI1NSB3YXMgMCwgMjU1LCAwLCAyNTUKKwor
Y2hlY2sgcXVhbnRpemF0aW9uCitQQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9f
RVJST1IgOiBTaG91bGQgYmUgbm8gZXJyb3JzIGZyb20gc2V0dXAuCitQQVNTIFRoZXJlIHNob3Vs
ZCBiZSAyNTYgdW5pcXVlIHZhbHVlcyBpbiBjaGFubmVsIDAuIEZvdW5kIDI1NgorUEFTUyBUaGVy
ZSBzaG91bGQgYmUgMjU2IHVuaXF1ZSB2YWx1ZXMgaW4gY2hhbm5lbCAxLiBGb3VuZCAyNTYKK1BB
U1MgVGhlcmUgc2hvdWxkIGJlIDI1NiB1bmlxdWUgdmFsdWVzIGluIGNoYW5uZWwgMi4gRm91bmQg
MjU2CitQQVNTIFRoZXJlIHNob3VsZCBiZSAyNTYgdW5pcXVlIHZhbHVlcyBpbiBjaGFubmVsIDMu
IEZvdW5kIDI1NgorUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDog
U2hvdWxkIGJlIG5vIGVycm9ycyBmcm9tIHNldHVwLgorUEFTUyBUaGVyZSBzaG91bGQgYmUgMTYg
dW5pcXVlIHZhbHVlcyBpbiBjaGFubmVsIDAuIEZvdW5kIDE2CitQQVNTIFRoZXJlIHNob3VsZCBi
ZSAxNiB1bmlxdWUgdmFsdWVzIGluIGNoYW5uZWwgMS4gRm91bmQgMTYKK1BBU1MgVGhlcmUgc2hv
dWxkIGJlIDE2IHVuaXF1ZSB2YWx1ZXMgaW4gY2hhbm5lbCAyLiBGb3VuZCAxNgorUEFTUyBUaGVy
ZSBzaG91bGQgYmUgMTYgdW5pcXVlIHZhbHVlcyBpbiBjaGFubmVsIDMuIEZvdW5kIDE2CitQQVNT
IGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiBTaG91bGQgYmUgbm8gZXJy
b3JzIGZyb20gc2V0dXAuCitQQVNTIFRoZXJlIHNob3VsZCBiZSAzMiB1bmlxdWUgdmFsdWVzIGlu
IGNoYW5uZWwgMC4gRm91bmQgMzIKK1BBU1MgVGhlcmUgc2hvdWxkIGJlIDY0IHVuaXF1ZSB2YWx1
ZXMgaW4gY2hhbm5lbCAxLiBGb3VuZCA2NAorUEFTUyBUaGVyZSBzaG91bGQgYmUgMzIgdW5pcXVl
IHZhbHVlcyBpbiBjaGFubmVsIDIuIEZvdW5kIDMyCitQQVNTIFRoZXJlIHNob3VsZCBiZSAxIHVu
aXF1ZSB2YWx1ZXMgaW4gY2hhbm5lbCAzLiBGb3VuZCAxCitQQVNTIGdldEVycm9yIHdhcyBleHBl
Y3RlZCB2YWx1ZTogTk9fRVJST1IgOiBTaG91bGQgYmUgbm8gZXJyb3JzIGZyb20gc2V0dXAuCitQ
QVNTIFRoZXJlIHNob3VsZCBiZSAzMiB1bmlxdWUgdmFsdWVzIGluIGNoYW5uZWwgMC4gRm91bmQg
MzIKK1BBU1MgVGhlcmUgc2hvdWxkIGJlIDMyIHVuaXF1ZSB2YWx1ZXMgaW4gY2hhbm5lbCAxLiBG
b3VuZCAzMgorUEFTUyBUaGVyZSBzaG91bGQgYmUgMzIgdW5pcXVlIHZhbHVlcyBpbiBjaGFubmVs
IDIuIEZvdW5kIDMyCitQQVNTIFRoZXJlIHNob3VsZCBiZSAyIHVuaXF1ZSB2YWx1ZXMgaW4gY2hh
bm5lbCAzLiBGb3VuZCAyCisKK2NoZWNrIHBpeGVscyBhcmUgcHJlLW11bHRpcGxpZWQKK1BBU1Mg
Z2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IFNob3VsZCBiZSBubyBlcnJv
cnMgZnJvbSBzZXR1cAorUEFTUyBwaXhlbHMgc2hvdWxkIGFsbCBiZSAwLgorCitjaGVjayBwaXhl
bHMgYXJlIGZsaXBwZWQKK1BBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJP
UiA6IFNob3VsZCBiZSBubyBlcnJvcnMgZnJvbSBzZXR1cAorUEFTUyBwaXhlbCAwLCAxNSBzaG91
bGQgYmUgMjU1LCAwLCAwLCAyNTUgd2FzIDI1NSwgMCwgMCwgMjU1CitQQVNTIHBpeGVsIDEyOCwg
MTUgc2hvdWxkIGJlIDI1NSwgMjU1LCAwLCAyNTUgd2FzIDI1NSwgMjU1LCAwLCAyNTUKK1BBU1Mg
cGl4ZWwgMjU1LCAxNSBzaG91bGQgYmUgMjU1LCAwLCAwLCAyNTUgd2FzIDI1NSwgMCwgMCwgMjU1
CitQQVNTIHBpeGVsIDAsIDggc2hvdWxkIGJlIDI1NSwgMCwgMjU1LCAyNTUgd2FzIDI1NSwgMCwg
MjU1LCAyNTUKK1BBU1MgcGl4ZWwgMTI4LCA4IHNob3VsZCBiZSAyNTUsIDAsIDAsIDI1NSB3YXMg
MjU1LCAwLCAwLCAyNTUKK1BBU1MgcGl4ZWwgMjU1LCA4IHNob3VsZCBiZSAwLCAyNTUsIDAsIDI1
NSB3YXMgMCwgMjU1LCAwLCAyNTUKK1BBU1MgcGl4ZWwgMCwgMCBzaG91bGQgYmUgMCwgMCwgMCwg
MjU1IHdhcyAwLCAwLCAwLCAyNTUKK1BBU1MgcGl4ZWwgMTI4LCAwIHNob3VsZCBiZSAwLCAwLCAy
NTUsIDI1NSB3YXMgMCwgMCwgMjU1LCAyNTUKK1BBU1MgcGl4ZWwgMjU1LCAwIHNob3VsZCBiZSAy
NTUsIDAsIDAsIDI1NSB3YXMgMjU1LCAwLCAwLCAyNTUKK1BBU1MgZ2V0RXJyb3Igd2FzIGV4cGVj
dGVkIHZhbHVlOiBOT19FUlJPUiA6IFNob3VsZCBiZSBubyBlcnJvcnMKKworUEFTUyBzdWNjZXNz
ZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3Rz
L2Zhc3QvY2FudmFzL3dlYmdsL2dsLXRleGltYWdlLmh0bWwKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvZ2wtdGV4aW1hZ2UuaHRtbAkocmV2aXNpb24gMCkKKysr
IExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2dsLXRleGltYWdlLmh0bWwJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsMjY1IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFRE
IEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIgorICAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRt
bDQvbG9vc2UuZHRkIj4KKzxodG1sPgorPGhlYWQ+Cis8dGl0bGU+V2ViR0wgdGV4SW1hZ2UyRCBj
b25mb3JtYW5jZSB0ZXN0LjwvdGl0bGU+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4u
Ly4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyIvPgorPHNjcmlwdCBzcmM9Ii4uLy4u
L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVz
b3VyY2VzL3dlYmdsLXRlc3QuanMiPiA8L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMv
d2ViZ2wtdGVzdC11dGlscy5qcyI+IDwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8Y2FudmFz
IGlkPSJleGFtcGxlIiB3aWR0aD0iMjU2IiBoZWlnaHQ9IjE2IiBzdHlsZT0id2lkdGg6IDI1NnB4
OyBoZWlnaHQ6IDQ4cHg7Ij48L2NhbnZhcz4KKzxkaXYgaWQ9ImRlc2NyaXB0aW9uIj48L2Rpdj4K
KzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdD4KK2Rlc2NyaXB0aW9uKCJUZXN0IHRl
eEltYWdlMkQgY29udmVyc2lvbnMuIik7Cit2YXIgd3R1ID0gV2ViR0xUZXN0VXRpbHM7Cit2YXIg
Y2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImV4YW1wbGUiKTsKK3ZhciBnbCA9IHd0
dS5jcmVhdGUzRENvbnRleHQoY2FudmFzKTsKK3ZhciBwcm9ncmFtID0gd3R1LnNldHVwVGV4dHVy
ZWRRdWFkKGdsKTsKKworZ2xFcnJvclNob3VsZEJlKGdsLCBnbC5OT19FUlJPUiwgIlNob3VsZCBi
ZSBubyBlcnJvcnMgZnJvbSBzZXR1cC4iKTsKKwordmFyIGltZ1VSTHMgPSBbCisgICdyZXNvdXJj
ZXMvZ3JheS1yYW1wLTI1Ni13aXRoLTEyOC1hbHBoYS5wbmcnLAorICAncmVzb3VyY2VzL2dyYXkt
cmFtcC0yNTYucG5nJywKKyAgJ3Jlc291cmNlcy9ncmF5LXJhbXAtZGVmYXVsdC1nYW1tYS5wbmcn
LAorICAncmVzb3VyY2VzL2dyYXktcmFtcC1nYW1tYTAuMS5wbmcnLAorICAncmVzb3VyY2VzL2dy
YXktcmFtcC1nYW1tYTEuMC5wbmcnLAorICAncmVzb3VyY2VzL2dyYXktcmFtcC1nYW1tYTIuMC5w
bmcnLAorICAncmVzb3VyY2VzL2dyYXktcmFtcC1nYW1tYTQuMC5wbmcnLAorICAncmVzb3VyY2Vz
L2dyYXktcmFtcC1nYW1tYTkuMC5wbmcnLAorICAncmVzb3VyY2VzL2dyYXktcmFtcC5wbmcnLAor
ICAncmVzb3VyY2VzL3plcm8tYWxwaGEucG5nJywKKyAgJ3Jlc291cmNlcy8zeDMucG5nJ107CisK
K3d0dS5sb2FkSW1hZ2VzQXN5bmMoaW1nVVJMcywgcnVuVGVzdHMpOworCitmdW5jdGlvbiBydW5U
ZXN0cyhpbWdzKSB7CisKKyAgdmFyIGxvYyA9IGdsLmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFt
LCAidGV4Iik7CisgIGdsLnVuaWZvcm0xaShsb2MsIDApOworCisgIGdsLmRpc2FibGUoZ2wuQkxF
TkQpOworICBnbC5kaXNhYmxlKGdsLkRFUFRIX1RFU1QpOworCisgIHZhciB3aWR0aCA9IGNhbnZh
cy53aWR0aDsKKyAgdmFyIGhlaWdodCA9IGNhbnZhcy5oZWlnaHQ7CisKKyAgZnVuY3Rpb24gY2hl
Y2tQaXhlbChidWYsIHgsIHksIGNvbG9yKSB7CisgICAgdmFyIG9mZiA9ICh5ICogd2lkdGggKyB4
KSAqIDQ7CisgICAgdmFyIG1zZyA9ICJwaXhlbCAiICsgeCArICIsICIgKyB5ICsgIiBzaG91bGQg
YmUgIiArCisgICAgICAgICAgICAgIGNvbG9yWzBdICsgIiwgIiArCisgICAgICAgICAgICAgIGNv
bG9yWzFdICsgIiwgIiArCisgICAgICAgICAgICAgIGNvbG9yWzJdICsgIiwgIiArCisgICAgICAg
ICAgICAgIGNvbG9yWzNdICsgIiB3YXMgIiArCisgICAgICAgICAgICAgIGJ1ZltvZmYgKyAwXSAr
ICIsICIgKworICAgICAgICAgICAgICBidWZbb2ZmICsgMV0gKyAiLCAiICsKKyAgICAgICAgICAg
ICAgYnVmW29mZiArIDJdICsgIiwgIiArCisgICAgICAgICAgICAgIGJ1ZltvZmYgKyAzXTsKKwor
ICAgIGZvciAodmFyIGlpID0gMDsgaWkgPCA0OyArK2lpKSB7CisgICAgICBpZiAoYnVmW29mZiAr
IGlpXSAhPSBjb2xvcltpaV0pIHsKKyAgICAgICAgdGVzdEZhaWxlZChtc2cpOworICAgICAgICBy
ZXR1cm47CisgICAgICB9CisgICAgfQorICAgIHRlc3RQYXNzZWQobXNnKTsKKyAgfQorCisgIHZh
ciB0ZXggPSBnbC5jcmVhdGVUZXh0dXJlKCk7CisgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVf
MkQsIHRleCk7CisgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9X
UkFQX1MsIGdsLkNMQU1QX1RPX0VER0UpOworICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVf
MkQsIGdsLlRFWFRVUkVfV1JBUF9ULCBnbC5DTEFNUF9UT19FREdFKTsKKyAgZ2wudGV4UGFyYW1l
dGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01JTl9GSUxURVIsIGdsLk5FQVJFU1QpOwor
ICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfTUFHX0ZJTFRFUiwg
Z2wuTkVBUkVTVCk7CisKKyAgdmFyIGJ1ZiA9IG5ldyBVaW50OEFycmF5KHdpZHRoICogaGVpZ2h0
ICogNCk7CisKKyAgZGVidWcoIiIpOworICBkZWJ1ZygiY2hlY2sgcGl4ZWxzIGFyZSBOT1QgcHJl
LW11bHRpcGxpZWQiKTsKKyAgZ2wudGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCBnbC5SR0Is
IGdsLlJHQiwgZ2wuVU5TSUdORURfQllURSwKKyAgICAgICAgICAgICAgICBpbWdzWydyZXNvdXJj
ZXMvemVyby1hbHBoYS5wbmcnXSk7CisgIGdsRXJyb3JTaG91bGRCZShnbCwgZ2wuTk9fRVJST1Is
ICJTaG91bGQgYmUgbm8gZXJyb3JzIGZyb20gc2V0dXAiKTsKKyAgd3R1LmRyYXdRdWFkKGdsKTsK
KyAgZ2wucmVhZFBpeGVscygwLCAwLCB3aWR0aCwgaGVpZ2h0LCBnbC5SR0JBLCBnbC5VTlNJR05F
RF9CWVRFLCBidWYpOworCisgIHZhciBsZWZ0ID0gMDsKKyAgdmFyIG1pZGRsZSA9IE1hdGguZmxv
b3Iod2lkdGggLyAyKTsKKyAgdmFyIHJpZ2h0ID0gd2lkdGggLSAxOworICB2YXIgYm90dG9tID0g
MDsKKyAgdmFyIGNlbnRlciA9IE1hdGguZmxvb3IoaGVpZ2h0IC8gMik7CisgIHZhciB0b3AgPSBo
ZWlnaHQgLSAxOworICBjaGVja1BpeGVsKGJ1ZiwgbGVmdCwgICB0b3AsICAgIFsgIDAsICAgMCwg
ICAwLCAyNTVdKTsKKyAgY2hlY2tQaXhlbChidWYsIG1pZGRsZSwgdG9wLCAgICBbMjU1LCAgIDAs
IDI1NSwgMjU1XSk7CisgIGNoZWNrUGl4ZWwoYnVmLCByaWdodCwgIHRvcCwgICAgWyAgMCwgICAw
LCAyNTUsIDI1NV0pOworICBjaGVja1BpeGVsKGJ1ZiwgbGVmdCwgICBjZW50ZXIsIFsxMjgsIDEy
OCwgMTI4LCAyNTVdKTsKKyAgY2hlY2tQaXhlbChidWYsIG1pZGRsZSwgY2VudGVyLCBbMjU1LCAy
NTUsIDI1NSwgMjU1XSk7CisgIGNoZWNrUGl4ZWwoYnVmLCByaWdodCwgIGNlbnRlciwgWyAgMCwg
MjU1LCAyNTUsIDI1NV0pOworICBjaGVja1BpeGVsKGJ1ZiwgbGVmdCwgICBib3R0b20sIFsyNTUs
ICAgMCwgICAwLCAyNTVdKTsKKyAgY2hlY2tQaXhlbChidWYsIG1pZGRsZSwgYm90dG9tLCBbMjU1
LCAyNTUsICAgMCwgMjU1XSk7CisgIGNoZWNrUGl4ZWwoYnVmLCByaWdodCwgIGJvdHRvbSwgWyAg
MCwgMjU1LCAgIDAsIDI1NV0pOworCisgIGRlYnVnKCIiKTsKKyAgZGVidWcoImNoZWNrIHF1YW50
aXphdGlvbiIpOworICB2YXIgcXVhbnRJbmZvID0gWworICAgIHtmb3JtYXQ6IGdsLlJHQkEsIHR5
cGU6IGdsLlVOU0lHTkVEX0JZVEUsICAgICAgICAgIGNvdW50czogWzI1NiwgMjU2LCAyNTYsIDI1
Nl19LAorICAgIHtmb3JtYXQ6IGdsLlJHQkEsIHR5cGU6IGdsLlVOU0lHTkVEX1NIT1JUXzRfNF80
XzQsIGNvdW50czogWyAxNiwgIDE2LCAgMTYsICAxNl19LAorICAgIHtmb3JtYXQ6IGdsLlJHQiwg
IHR5cGU6IGdsLlVOU0lHTkVEX1NIT1JUXzVfNl81LCAgIGNvdW50czogWyAzMiwgIDY0LCAgMzIs
ICAgMV19LAorICAgIHtmb3JtYXQ6IGdsLlJHQkEsIHR5cGU6IGdsLlVOU0lHTkVEX1NIT1JUXzVf
NV81XzEsIGNvdW50czogWyAzMiwgIDMyLCAgMzIsICAgMl19XTsKKyAgZm9yICh2YXIgcXEgPSAw
OyBxcSA8IHF1YW50SW5mby5sZW5ndGg7ICsrcXEpIHsKKyAgICB2YXIgaW5mbyA9IHF1YW50SW5m
b1txcV07CisgICAgZ2wudGV4SW1hZ2UyRCgKKyAgICAgICAgZ2wuVEVYVFVSRV8yRCwgMCwgaW5m
by5mb3JtYXQsIGluZm8uZm9ybWF0LCBpbmZvLnR5cGUsCisgICAgICAgIGltZ3NbJ3Jlc291cmNl
cy9ncmF5LXJhbXAtMjU2LnBuZyddKTsKKyAgICBnbEVycm9yU2hvdWxkQmUoZ2wsIGdsLk5PX0VS
Uk9SLCAiU2hvdWxkIGJlIG5vIGVycm9ycyBmcm9tIHNldHVwLiIpOworICAgIHd0dS5kcmF3UXVh
ZChnbCk7CisgICAgZ2wucmVhZFBpeGVscygwLCAwLCB3aWR0aCwgaGVpZ2h0LCBnbC5SR0JBLCBn
bC5VTlNJR05FRF9CWVRFLCBidWYpOworICAgIHZhciBjb3VudHMgPSBbeyB9LCB7IH0sIHsgfSwg
eyB9XTsKKyAgICB2YXIgbnVtVW5pcXVlVmFsdWVzID0gWzAsIDAsIDAsIDBdOworICAgIC8vIENv
dW50IHRoZSBudW1iZXIgb2YgdW5pcXVlIHZhbHVlcyBpbiBlYWNoIGNoYW5uZWwuCisgICAgZm9y
ICh2YXIgaWkgPSAwOyBpaSA8IHdpZHRoICogaGVpZ2h0ICogNDsgaWkgKz0gNCkgeworICAgICAg
Zm9yICh2YXIgamogPSAwOyBqaiA8IDQ7ICsramopIHsKKyAgICAgICAgdmFyIHYgPSBidWZbaWkg
KyBqal07CisgICAgICAgIGlmICghY291bnRzW2pqXVt2XSkgeworICAgICAgICAgIGNvdW50c1tq
al1bdl0gPSAxOworICAgICAgICAgICsrbnVtVW5pcXVlVmFsdWVzW2pqXTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICArK2NvdW50c1tqal1bdl07CisgICAgICAgIH0KKyAgICAgIH0KKyAg
ICB9CisgICAgZm9yICh2YXIgaWkgPSAwOyBpaSA8IDQ7ICsraWkpIHsKKyAgICAgIGFzc2VydE1z
ZyhudW1VbmlxdWVWYWx1ZXNbaWldID09IGluZm8uY291bnRzW2lpXSwKKyAgICAgICAgICAgICAg
ICAiVGhlcmUgc2hvdWxkIGJlICIgKyBpbmZvLmNvdW50c1tpaV0gKworICAgICAgICAgICAgICAg
ICIgdW5pcXVlIHZhbHVlcyBpbiBjaGFubmVsICIgKyBpaSArICIuIEZvdW5kICIgKworICAgICAg
ICAgICAgICAgIG51bVVuaXF1ZVZhbHVlc1tpaV0pOworICAgIH0KKyAgfQorCisvLyBGSVhNRSh6
bW8pOiBmaXggdGhlIGdhbW1hIGNvcnJlY3Rpb24gYW5kIGFkZCBiYWNrIHRoZSBjb21tZW50ZWQg
b3V0IHRlc3RzIGJlbG93LgorLyoKKyAgZGVidWcoIiIpOworICBkZWJ1ZygiQ2hlY2sgdGhhdCBn
YW1tYSBzZXR0aW5ncyBkb24ndCBlZmZlY3QgOGJpdCBwbmdzIik7CisgIGdsLnRleEltYWdlMkQo
Z2wuVEVYVFVSRV8yRCwgMCwgZ2wuUkdCLCBnbC5SR0IsIGdsLlVOU0lHTkVEX0JZVEUsCisgICAg
ICAgICAgICAgICAgaW1nc1sncmVzb3VyY2VzL2dyYXktcmFtcC1kZWZhdWx0LWdhbW1hLnBuZydd
KTsKKyAgZ2xFcnJvclNob3VsZEJlKGdsLCBnbC5OT19FUlJPUiwgIlNob3VsZCBiZSBubyBlcnJv
cnMgZnJvbSBzZXR1cC4iKTsKKyAgd3R1LmRyYXdRdWFkKGdsKTsKKyAgdmFyIHJlZiA9IG5ldyBV
aW50OEFycmF5KHdpZHRoICogaGVpZ2h0ICogNCk7CisgIGdsLnJlYWRQaXhlbHMoMCwgMCwgd2lk
dGgsIGhlaWdodCwgZ2wuUkdCQSwgZ2wuVU5TSUdORURfQllURSwgcmVmKTsKKworICB2YXIgZ2Ft
bWFJbWFnZXMgPSBbCisgICAgJ3Jlc291cmNlcy9ncmF5LXJhbXAtZ2FtbWEwLjEucG5nJywKKyAg
ICAncmVzb3VyY2VzL2dyYXktcmFtcC1nYW1tYTEuMC5wbmcnLAorICAgICdyZXNvdXJjZXMvZ3Jh
eS1yYW1wLWdhbW1hMi4wLnBuZycsCisgICAgJ3Jlc291cmNlcy9ncmF5LXJhbXAtZ2FtbWE0LjAu
cG5nJywKKyAgICAncmVzb3VyY2VzL2dyYXktcmFtcC1nYW1tYTkuMC5wbmcnXTsKKyAgZm9yICh2
YXIgaWkgPSAwOyBpaSA8IGdhbW1hSW1hZ2VzLmxlbmd0aDsgKytpaSkgeworICAgIGdsLnRleElt
YWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgZ2wuUkdCLCBnbC5SR0IsIGdsLlVOU0lHTkVEX0JZVEUs
CisgICAgICAgICAgICAgICAgICBpbWdzW2dhbW1hSW1hZ2VzW2lpXV0pOworICAgIHd0dS5kcmF3
UXVhZChnbCk7CisgICAgZ2wucmVhZFBpeGVscygwLCAwLCB3aWR0aCwgaGVpZ2h0LCBnbC5SR0JB
LCBnbC5VTlNJR05FRF9CWVRFLCBidWYpOworICAgIHZhciBzYW1lID0gdHJ1ZTsKKyAgICBmb3Ig
KHZhciBqaiA9IDA7IGpqIDwgd2lkdGggKiBoZWlnaHQgKiA0OyArK2pqKSB7CisgICAgICBpZiAo
YnVmW2pqXSAhPSByZWZbampdKSB7CisgICAgICAgIHNhbWUgPSBmYWxzZTsKKyAgICAgICAgYnJl
YWs7CisgICAgICB9CisgICAgfQorICAgIGFzc2VydE1zZyhzYW1lLCAicGl4ZWxzIHNob3VsZCBi
ZSBzYW1lIHJlZ2FyZGxlc3Mgb2YgZ2FtbWEgc2V0dGluZ3MuIik7CisgIH0KKworICBkZWJ1Zygi
Iik7CisgIGRlYnVnKCJjaGVjayBwaXhlbHMgYXJlIFVOIHByZS1tdWx0aXBsaWVkIik7CisgIHZh
ciBjYW52YXMyZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpOworICBjYW52YXMy
ZC53aWR0aCA9IDI1NjsKKyAgY2FudmFzMmQuaGVpZ2h0ID0gMTsKKyAgLy9jYW52YXMyZC5zdHls
ZS5oZWlnaHQgPSAiNDBweCI7CisgIC8vdmFyIGRlc2NyaXB0aW9uID0gZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoImRlc2NyaXB0aW9uIik7CisgIC8vZGVzY3JpcHRpb24uYXBwZW5kQ2hpbGQoY2Fu
dmFzMmQpOworICB2YXIgY3R4ID0gY2FudmFzMmQuZ2V0Q29udGV4dCgiMmQiKTsKKyAgY3R4LmZp
bGxSZWN0KDAsIDAsIDI1NiwgMSk7CisgIGN0eC5kcmF3SW1hZ2UoaW1nc1sncmVzb3VyY2VzL2dy
YXktcmFtcC0yNTYtd2l0aC0xMjgtYWxwaGEucG5nJ10sIDAsIDApOworICBnbC50ZXhJbWFnZTJE
KGdsLlRFWFRVUkVfMkQsIDAsIGdsLlJHQiwgZ2wuUkdCLCBnbC5VTlNJR05FRF9CWVRFLCBjYW52
YXMyZCk7CisgIGdsRXJyb3JTaG91bGRCZShnbCwgZ2wuTk9fRVJST1IsICJTaG91bGQgYmUgbm8g
ZXJyb3JzIGZyb20gc2V0dXAuIik7CisgIHd0dS5kcmF3UXVhZChnbCk7CisgIHZhciByZWYgPSBu
ZXcgVWludDhBcnJheSh3aWR0aCAqIGhlaWdodCAqIDQpOworICBnbC5yZWFkUGl4ZWxzKDAsIDAs
IHdpZHRoLCBoZWlnaHQsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIHJlZik7CisgIHZhciBs
dDEyOENvdW50ID0gWzAsIDAsIDBdOworICB2YXIgZ2UxMjhDb3VudCA9IFswLCAwLCAwXTsKKyAg
Zm9yICh2YXIgamogPSAwOyBqaiA8IHdpZHRoOyArK2pqKSB7CisgICAgdmFyIG9mZiA9IGpqICog
NDsKKyAgICBmb3IgKHZhciBjYyA9IDA7IGNjIDwgMzsgKytjYykgeworICAgICAgaWYgKGJ1Zltv
ZmYgKyBjY10gPCAxMjgpIHsKKyAgICAgICAgKytsdDEyOENvdW50W2NjXTsKKyAgICAgIH0gZWxz
ZSB7CisgICAgICAgICsrZ2UxMjhDb3VudFtjY107CisgICAgICB9CisgICAgfQorICB9CisgIC8v
IE5vdCBzdXJlIHRoZSBleGFjdCBjb3VudCBoZXJlIGJlY2F1c2UgZ2FtbWEgZG9lcyBlZmZlY3Qg
ZHJhd2luZyBpbnRvIHRoZQorICAvLyBjYW52YXMgYnV0IGl0IHNob3VsZCBiZSBjbG9zZSB0byA1
MCUgc28gSSdsbCBwYXNzIDQ1JQorICBmb3IgKHZhciBqaiA9IDA7IGpqIDwgMzsgKytqaikgewor
ICAgIGFzc2VydE1zZyhnZTEyOENvdW50W2pqXSA+IDI1NiAqIDAuNDUsCisgICAgICAgICAgICAg
ICJIYWxmIHRoZSBwaXhlbHMgaW4gY2hhbm5lbCAiICsgamogKworICAgICAgICAgICAgICAiIHNo
b3VsZCBiZSA+PSAxMjgsMTI4LDEyOC4gZm91bmQgIiArCisgICAgICAgICAgICAgICgoZ2UxMjhD
b3VudFtqal0gLyAyNTYpICogMTAwKS50b0ZpeGVkKCkgKyAiJSIpOworICAgIGFzc2VydE1zZyhs
dDEyOENvdW50W2pqXSA+IDI1NiAqIDAuNDUsCisgICAgICAgICAgICAgICJIYWxmIHRoZSBwaXhl
bHMgaW4gY2hhbm5lbCAiICsgamogKworICAgICAgICAgICAgICAiIHNob3VsZCBiZSA8IDEyOCwx
MjgsMTI4LiBmb3VuZCAiICsKKyAgICAgICAgICAgICAgKChsdDEyOENvdW50W2pqXSAvIDI1Nikg
KiAxMDApLnRvRml4ZWQoKSArICIlIik7CisgIH0KKyovCisKKyAgZGVidWcoIiIpOworICBkZWJ1
ZygiY2hlY2sgcGl4ZWxzIGFyZSBwcmUtbXVsdGlwbGllZCIpOworICBnbC5waXhlbFN0b3JlaShn
bC5VTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0wsIHRydWUpOworICAvLyBUT0RPKGdtYW4p
OiB1c2UgZGlmZmVyZW50IHRleHR1cmUgdGhhdCB3b24ndCBwYXNzIG9uIGZhaWx1cmUKKyAgZ2wu
dGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCBnbC5SR0JBLCBnbC5SR0JBLCBnbC5VTlNJR05F
RF9CWVRFLAorICAgICAgICAgICAgICAgIGltZ3NbJ3Jlc291cmNlcy96ZXJvLWFscGhhLnBuZydd
KTsKKyAgZ2xFcnJvclNob3VsZEJlKGdsLCBnbC5OT19FUlJPUiwgIlNob3VsZCBiZSBubyBlcnJv
cnMgZnJvbSBzZXR1cCIpOworICB3dHUuZHJhd1F1YWQoZ2wpOworICBnbC5yZWFkUGl4ZWxzKDAs
IDAsIHdpZHRoLCBoZWlnaHQsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIGJ1Zik7CisKKyAg
dmFyIHNhbWUgPSB0cnVlOworICBmb3IgKHZhciBqaiA9IDA7IGpqIDwgd2lkdGggKiBoZWlnaHQg
KiA0OyArK2pqKSB7CisgICAgaWYgKGJ1Zltqal0gIT0gMCkgeworICAgICAgc2FtZSA9IGZhbHNl
OworICAgICAgYnJlYWs7CisgICAgfQorICB9CisgIGFzc2VydE1zZyhzYW1lLCAicGl4ZWxzIHNo
b3VsZCBhbGwgYmUgMC4iKTsKKworICBkZWJ1ZygiIik7CisgIGRlYnVnKCJjaGVjayBwaXhlbHMg
YXJlIGZsaXBwZWQiKTsKKyAgZ2wucGl4ZWxTdG9yZWkoZ2wuVU5QQUNLX1BSRU1VTFRJUExZX0FM
UEhBX1dFQkdMLCBmYWxzZSk7CisgIGdsLnBpeGVsU3RvcmVpKGdsLlVOUEFDS19GTElQX1lfV0VC
R0wsIHRydWUpOworICBnbC50ZXhJbWFnZTJEKGdsLlRFWFRVUkVfMkQsIDAsIGdsLlJHQiwgZ2wu
UkdCLCBnbC5VTlNJR05FRF9CWVRFLAorICAgICAgICAgICAgICAgIGltZ3NbJ3Jlc291cmNlcy8z
eDMucG5nJ10pOworICBnbEVycm9yU2hvdWxkQmUoZ2wsIGdsLk5PX0VSUk9SLCAiU2hvdWxkIGJl
IG5vIGVycm9ycyBmcm9tIHNldHVwIik7CisgIHd0dS5kcmF3UXVhZChnbCk7CisgIGdsLnJlYWRQ
aXhlbHMoMCwgMCwgd2lkdGgsIGhlaWdodCwgZ2wuUkdCQSwgZ2wuVU5TSUdORURfQllURSwgYnVm
KTsKKworICBjaGVja1BpeGVsKGJ1ZiwgbGVmdCwgICB0b3AsICAgIFsyNTUsICAgMCwgICAwLCAy
NTVdKTsKKyAgY2hlY2tQaXhlbChidWYsIG1pZGRsZSwgdG9wLCAgICBbMjU1LCAyNTUsICAgMCwg
MjU1XSk7CisgIGNoZWNrUGl4ZWwoYnVmLCByaWdodCwgIHRvcCwgICAgWzI1NSwgICAwLCAgIDAs
IDI1NV0pOworICBjaGVja1BpeGVsKGJ1ZiwgbGVmdCwgICBjZW50ZXIsIFsyNTUsICAgMCwgMjU1
LCAyNTVdKTsKKyAgY2hlY2tQaXhlbChidWYsIG1pZGRsZSwgY2VudGVyLCBbMjU1LCAgIDAsICAg
MCwgMjU1XSk7CisgIGNoZWNrUGl4ZWwoYnVmLCByaWdodCwgIGNlbnRlciwgWyAgMCwgMjU1LCAg
IDAsIDI1NV0pOworICBjaGVja1BpeGVsKGJ1ZiwgbGVmdCwgICBib3R0b20sIFsgIDAsICAgMCwg
ICAwLCAyNTVdKTsKKyAgY2hlY2tQaXhlbChidWYsIG1pZGRsZSwgYm90dG9tLCBbICAwLCAgIDAs
IDI1NSwgMjU1XSk7CisgIGNoZWNrUGl4ZWwoYnVmLCByaWdodCwgIGJvdHRvbSwgWzI1NSwgICAw
LCAgIDAsIDI1NV0pOworCisgIGdsRXJyb3JTaG91bGRCZShnbCwgZ2wuTk9fRVJST1IsICJTaG91
bGQgYmUgbm8gZXJyb3JzIik7CisKKyAgZGVidWcoIiIpOworICBzdWNjZXNzZnVsbHlQYXJzZWQg
PSB0cnVlOworICBzaG91bGRCZVRydWUoInN1Y2Nlc3NmdWxseVBhcnNlZCIpOworICBkZWJ1Zygn
PGJyIC8+PHNwYW4gY2xhc3M9InBhc3MiPlRFU1QgQ09NUExFVEU8L3NwYW4+Jyk7CisgIG5vdGlm
eUZpbmlzaGVkVG9IYXJuZXNzKCk7Cit9Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KKwpJ
bmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvcmVzb3VyY2VzL3dlYmdsLXRlc3Qt
dXRpbHMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvcmVz
b3VyY2VzL3dlYmdsLXRlc3QtdXRpbHMuanMJKHJldmlzaW9uIDY1OTUwKQorKysgTGF5b3V0VGVz
dHMvZmFzdC9jYW52YXMvd2ViZ2wvcmVzb3VyY2VzL3dlYmdsLXRlc3QtdXRpbHMuanMJKHdvcmtp
bmcgY29weSkKQEAgLTI5LDYgKzI5LDIwIEBAIHZhciBlcnJvciA9IGZ1bmN0aW9uKG1zZykgewog
ICB9CiB9OwogCisvKioKKyAqIENvbnZlcnRzIGEgV2ViR0wgZW51bSB0byBhIHN0cmluZworICog
QHBhcmFtIHshV2ViR0xDb250ZXh0fSBnbCBUaGUgV2ViR0xDb250ZXh0IHRvIHVzZS4KKyAqIEBw
YXJhbSB7bnVtYmVyfSB2YWx1ZSBUaGUgZW51bSB2YWx1ZS4KKyAqIEByZXR1cm4ge3N0cmluZ30g
VGhlIGVudW0gYXMgYSBzdHJpbmcuCisgKi8KK3ZhciBnbEVudW1Ub1N0cmluZyA9IGZ1bmN0aW9u
KGdsLCB2YWx1ZSkgeworICBmb3IgKHZhciBwIGluIGdsKSB7CisgICAgaWYgKGdsW3BdID09IHZh
bHVlKSB7CisgICAgICByZXR1cm4gcDsKKyAgICB9CisgIH0KKyAgcmV0dXJuICIweCIgKyB2YWx1
ZS50b1N0cmluZygxNik7Cit9OwogCiB2YXIgbGFzdEVycm9yID0gIiI7CiAKQEAgLTExMCwxOSAr
MTI0LDIxIEBAIHZhciBzZXR1cFNpbXBsZVRleHR1cmVGcmFnbWVudFNoYWRlciA9IGYKICAqIENy
ZWF0ZXMgYSBwcm9ncmFtLCBhdHRhY2hlcyBzaGFkZXJzLCBiaW5kcyBhdHRyaWIgbG9jYXRpb25z
LCBsaW5rcyB0aGUKICAqIHByb2dyYW0gYW5kIGNhbGxzIHVzZVByb2dyYW0uCiAgKiBAcGFyYW0g
eyFBcnJheS48IVdlYkdMU2hhZGVyPn0gc2hhZGVycyBUaGUgc2hhZGVycyB0byBhdHRhY2ggLgot
ICogQHBhcmFtIHshQXJyYXkuPHN0cmluZz59IGF0dHJpYnMgVGhlIGF0dHJpYnMgbmFtZXMuCisg
KiBAcGFyYW0geyFBcnJheS48c3RyaW5nPn0gb3B0X2F0dHJpYnMgVGhlIGF0dHJpYnMgbmFtZXMu
CiAgKiBAcGFyYW0geyFBcnJheS48bnVtYmVyPn0gb3B0X2xvY2F0aW9ucyBUaGUgbG9jYXRpb25z
IGZvciB0aGUgYXR0cmlicy4KICAqLwotdmFyIHNldHVwUHJvZ3JhbSA9IGZ1bmN0aW9uKGdsLCBz
aGFkZXJzLCBhdHRyaWJzLCBvcHRfbG9jYXRpb25zKSB7Cit2YXIgc2V0dXBQcm9ncmFtID0gZnVu
Y3Rpb24oZ2wsIHNoYWRlcnMsIG9wdF9hdHRyaWJzLCBvcHRfbG9jYXRpb25zKSB7CiAgIHZhciBw
cm9ncmFtID0gZ2wuY3JlYXRlUHJvZ3JhbSgpOwogICBmb3IgKHZhciBpaSA9IDA7IGlpIDwgc2hh
ZGVycy5sZW5ndGg7ICsraWkpIHsKICAgICBnbC5hdHRhY2hTaGFkZXIocHJvZ3JhbSwgc2hhZGVy
c1tpaV0pOwogICB9Ci0gIGZvciAodmFyIGlpID0gMDsgaWkgPCBhdHRyaWJzLmxlbmd0aDsgKytp
aSkgewotICAgIGdsLmJpbmRBdHRyaWJMb2NhdGlvbigKLSAgICAgICAgcHJvZ3JhbSwKLSAgICAg
ICAgb3B0X2xvY2F0aW9ucyA/IG9wdF9sb2NhdGlvbnNbaWldIDogaWksCi0gICAgICAgIGF0dHJp
YnNbaWldKTsKKyAgaWYgKG9wdF9hdHRyaWJzKSB7CisgICAgZm9yICh2YXIgaWkgPSAwOyBpaSA8
IG9wdF9hdHRyaWJzLmxlbmd0aDsgKytpaSkgeworICAgICAgZ2wuYmluZEF0dHJpYkxvY2F0aW9u
KAorICAgICAgICAgIHByb2dyYW0sCisgICAgICAgICAgb3B0X2xvY2F0aW9ucyA/IG9wdF9sb2Nh
dGlvbnNbaWldIDogaWksCisgICAgICAgICAgb3B0X2F0dHJpYnNbaWldKTsKKyAgICB9CiAgIH0K
ICAgZ2wubGlua1Byb2dyYW0ocHJvZ3JhbSk7CiAKQEAgLTgxMyw2ICs4MjksNyBAQCByZXR1cm4g
ewogICBkcmF3UXVhZDogZHJhd1F1YWQsCiAgIGVuZHNXaXRoOiBlbmRzV2l0aCwKICAgZ2V0TGFz
dEVycm9yOiBnZXRMYXN0RXJyb3IsCisgIGdsRW51bVRvU3RyaW5nOiBnbEVudW1Ub1N0cmluZywK
ICAgZ2xFcnJvclNob3VsZEJlOiBnbEVycm9yU2hvdWxkQmUsCiAgIGZpbGxUZXh0dXJlOiBmaWxs
VGV4dHVyZSwKICAgbG9hZEltYWdlQXN5bmM6IGxvYWRJbWFnZUFzeW5jLApJbmRleDogTGF5b3V0
VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vdGVzdF9leHBlY3RhdGlvbnMudHh0Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL3Rlc3RfZXhwZWN0YXRpb25zLnR4dAko
cmV2aXNpb24gNjU5NTApCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS90ZXN0X2V4
cGVjdGF0aW9ucy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTI1ODMsNiArMjU4Myw5IEBAIEJVR1dL
MzcyOTcgOiBmYXN0L2hpc3Rvcnkvc2libGluZy12aXNpdGUKIEJVR1dLMzY5ODMgTUFDIDogZmFz
dC9jYW52YXMvd2ViZ2wvbnVsbC1vYmplY3QtYmVoYXZpb3VyLmh0bWwgPSBURVhUCiBCVUdXSzM2
OTgzIE1BQyA6IGZhc3QvY2FudmFzL3dlYmdsL3VuaWZvcm0tbG9jYXRpb24uaHRtbCA9IFRFWFQK
IAorLy8gQ2F1c2VkIGJ5IHByZW11bHRpcGx5aW5nIGFscGhhcyBpbiBDRyBpbWFnZSBkZWNvZGlu
Zy4KK0JVRzQ0NTY2IE1BQyA6IGZhc3QvY2FudmFzL3dlYmdsL2dsLXRleGltYWdlLmh0bWwgPSBU
RVhUCisKIC8vIEFkZGVkIGluIGh0dHA6Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0LzU3NDc2
LiBGYWlscyBpbiBDaHJvbWl1bSBiZWNhdXNlCiAvLyBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y29t
cHV0ZWRTdHlsZVdpdGhWaXNpdGVkSW5mbygpIGlzIG1pc3NpbmcuCiBCVUc0MTIwNiA6IGZhc3Qv
aGlzdG9yeS9tdWx0aXBsZS1jbGFzc2VzLXZpc2l0ZWQuaHRtbCA9IFRFWFQgVElNRU9VVApJbmRl
eDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL1NraXBwZWQKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvcGxhdGZvcm0vbWFjL1NraXBwZWQJKHJldmlzaW9uIDY1OTUwKQorKysgTGF5b3V0VGVz
dHMvcGxhdGZvcm0vbWFjL1NraXBwZWQJKHdvcmtpbmcgY29weSkKQEAgLTI5MiwzICsyOTIsNiBA
QCBhbmltYXRpb25zL3BsYXktc3RhdGUuaHRtbAogCiAjIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD00MzMzMgogaW5zcGVjdG9yL2RvbS1icmVha3BvaW50cy5odG1sCisK
KyMgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ0NTY2CitmYXN0L2Nh
bnZhcy93ZWJnbC9nbC10ZXhpbWFnZS5odG1sCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZh
cy93ZWJnbC9yZXNvdXJjZXMvM3gzLnBuZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNhbm5vdCBkaXNwbGF5OiBmaWxl
IG1hcmtlZCBhcyBhIGJpbmFyeSB0eXBlLgpzdm46bWltZS10eXBlID0gYXBwbGljYXRpb24vb2N0
ZXQtc3RyZWFtCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93
ZWJnbC9yZXNvdXJjZXMvM3gzLnBuZwpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46bWltZS10eXBlCiAg
ICsgYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtCgoKaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUFN
QUFBQURDQUlBQUFEWlNpTG9BQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBSwpUMmxEUTFC
UWFHOTBiM05vYjNBZ1NVTkRJSEJ5YjJacGJHVUFBSGphblZOblZGUHBGajMzM3ZSQ1M0aUFsRXR2
VWhVSUlGSkNpNEFVCmtTWXFJUWtRU29naG9ka1ZVY0VSUlVVRUc4aWdpQU9Pam9DTUZWRXNESW9L
MkFma0lhS09nNk9JaXNyNzRYdWphOWE4OStiTi9yWFgKUHVlczg1Mnp6d2ZBQ0F5V1NETlJOWUFN
cVVJZUVlQ0R4OFRHNGVRdVFJRUtKSEFBRUFpelpDRnovU01CQVBoK1BEd3JJc0FIdmdBQgplTk1M
Q0FEQVRadkFNQnlIL3cvcVFwbGNBWUNFQWNCMGtUaExDSUFVQUVCNmprS21BRUJHQVlDZG1DWlRB
S0FFQUdETFkyTGpBRkF0CkFHQW5mK2JUQUlDZCtKbDdBUUJibENFVkFhQ1JBQ0FUWlloRUFHZzdB
S3pQVm9wRkFGZ3dBQlJtUzhRNUFOZ3RBREJKVjJaSUFMQzMKQU1ET0VBdXlBQWdNQURCUmlJVXBB
QVI3QUdESUl5TjRBSVNaQUJSRzhsYzg4U3V1RU9jcUFBQjRtYkk4dVNRNVJZRmJDQzF4QjFkWApM
aDRvemtrWEt4UTJZUUpobWtBdXdubVpHVEtCTkEvZzg4d0FBS0NSRlJIZ2cvUDllTTRPcnM3T05v
NjJEbDh0NnI4Ry95SmlZdVArCjVjK3JjRUFBQU9GMGZ0SCtMQyt6R29BN0JvQnQvcUlsN2dSb1hn
dWdkZmVMWnJJUFFMVUFvT25hVi9OdytINDhQRVdoa0xuWjJlWGsKNU5oS3hFSmJZY3BYZmY1bnds
L0FWLzFzK1g0OC9QZjE0TDdpSklFeVhZRkhCUGpnd3N6MFRLVWN6NUlKaEdMYzVvOUgvTGNMLy93
ZAoweUxFU1dLNVdDb1U0MUVTY1k1RW1venpNcVVpaVVLU0tjVWwwdjlrNHQ4cyt3TSszelVBc0dv
K0FYdVJMYWhkWXdQMlN5Y1FXSFRBCjR2Y0FBUEs3YjhIVUtBZ0RnR2lENGM5My8rOC8vVWVnSlFD
QVprbVNjUUFBWGtRa0xsVEtzei9IQ0FBQVJLQ0JLckJCRy9UQkdDekEKQmh6QkJkekJDL3hnTm9S
Q0pNVENRaEJDQ21TQUhISmdLYXlDUWlpR3piQWRLbUF2MUVBZE5NQlJhSWFUY0E0dXdsVzREajF3
RC9waApDSjdCS0x5QkNRUkJ5QWdUWVNIYWlBRmlpbGdqamdnWG1ZWDRJY0ZJQkJLTEpDREppQlJS
SWt1Uk5VZ3hVb3BVSUZWSUhmSTljZ0k1CmgxeEd1cEU3eUFBeWd2eUd2RWN4bElHeVVUM1VETFZE
dWFnM0dvUkdvZ3ZRWkhReG1vOFdvSnZRY3JRYVBZdzJvZWZRcTJnUDJvOCsKUThjd3dPZ1lCelBF
YkRBdXhzTkNzVGdzQ1pOank3RWlyQXlyeGhxd1Zxd0R1NG4xWTgreGR3UVNnVVhBQ1RZRWQwSWdZ
UjVCU0ZoTQpXRTdZU0tnZ0hDUTBFZG9KTndrRGhGSENKeUtUcUV1MEpyb1IrY1FZWWpJeGgxaElM
Q1BXRW84VEx4QjdpRVBFTnlRU2lVTXlKN21RCkFrbXhwRlRTRXRKRzBtNVNJK2tzcVpzMFNCb2pr
OG5hWkd1eUJ6bVVMQ0FyeUlYa25lVEQ1RFBrRytRaDhsc0tuV0pBY2FUNFUrSW8KVXNwcVNobmxF
T1UwNVFabG1ESkJWYU9hVXQyb29WUVJOWTlhUXEyaHRsS3ZVWWVvRXpSMW1qbk5neFpKUzZXdG9w
WFRHbWdYYVBkcApyK2gwdWhIZGxSNU9sOUJYMHN2cFIraVg2QVAwZHd3TmhoV0R4NGhuS0JtYkdB
Y1laeGwzR0srWVRLWVowNHNaeDFRd056SHJtT2VaCkQ1bHZWVmdxdGlwOEZaSEtDcFZLbFNhVkd5
b3ZWS21xcHFyZXFndFY4MVhMVkkrcFhsTjlya1pWTTFQanFRblVscXRWcXAxUTYxTWIKVTJlcE82
aUhxbWVvYjFRL3BINVovWWtHV2NOTXcwOURwRkdnc1YvanZNWWdDMk1aczNnc0lXc05xNFoxZ1RY
RUpySE4yWHgyS3J1WQovUjI3aXoycXFhRTVRek5LTTFlelV2T1VaajhINDVoeCtKeDBUZ25uS0tl
WDgzNkszaFR2S2VJcEc2WTBUTGt4WlZ4cnFwYVhsbGlyClNLdFJxMGZydlRhdTdhZWRwcjFGdTFu
N2dRNUJ4MG9uWENkSFo0L09CWjNuVTlsVDNhY0tweFpOUFRyMXJpNnFhNlVib2J0RWQ3OXUKcCs2
WW5yNWVnSjVNYjZmZWViM24raHg5TC8xVS9XMzZwL1ZIREZnR3N3d2tCdHNNemhnOHhUVnhiendk
TDhmYjhWRkRYY05BUTZWaApsV0dYNFlTUnVkRThvOVZHalVZUGpHbkdYT01rNDIzR2JjYWpKZ1lt
SVNaTFRlcE43cHBTVGJtbUthWTdURHRNeDgzTXphTE4xcGsxCm16MHgxekxubStlYjE1dmZ0MkJh
ZUZvc3RxaTJ1R1ZKc3VSYXBsbnV0cnh1aFZvNVdhVllWVnBkczBhdG5hMGwxcnV0dTZjUnA3bE8K
azA2cm50Wm53N0R4dHNtMnFiY1pzT1hZQnR1dXRtMjJmV0ZuWWhkbnQ4V3V3KzZUdlpOOXVuMk4v
VDBIRFlmWkRxc2RXaDErYzdSeQpGRHBXT3Q2YXpwenVQMzNGOUpicEwyZFl6eERQMkRQanRoUExL
Y1JwblZPYjAwZG5GMmU1YzRQemlJdUpTNExMTHBjK0xwc2J4dDNJCnZlUktkUFZ4WGVGNjB2V2Rt
N09id3UybzI2L3VOdTVwN29mY244dzBueW1lV1ROejBNUElRK0JSNWRFL0M1K1ZNR3Zmckg1UFEw
K0IKWjdYbkl5OWpMNUZYcmRld3Q2VjNxdmRoN3hjKzlqNXluK00rNHp3MzNqTGVXVi9NTjhDM3lM
ZkxUOE52bmwrRjMwTi9JLzlrLzNyLwowUUNuZ0NVQlp3T0pnVUdCV3dMNytIcDhJYitPUHpyYlpm
YXkyZTFCaktDNVFSVkJqNEt0Z3VYQnJTRm95T3lRclNIMzU1ak9rYzVwCkRvVlFmdWpXMEFkaDVt
R0x3MzRNSjRXSGhWZUdQNDV3aUZnYTBUR1hOWGZSM0VOejMwVDZSSlpFM3B0bk1VODVyeTFLTlNv
K3FpNXEKUE5vM3VqUzZQOFl1WmxuTTFWaWRXRWxzU3h3NUxpcXVObTVzdnQvODdmT0g0cDNpQytO
N0Y1Z3Z5RjF3ZWFIT3d2U0ZweGFwTGhJcwpPcFpBVEloT09KVHdRUkFxcUJhTUpmSVRkeVdPQ25u
Q0hjSm5JaS9STnRHSTJFTmNLaDVPOGtncVRYcVM3Skc4Tlhra3hUT2xMT1c1CmhDZXBrTHhNRFV6
ZG16cWVGcHAySUcweVBUcTlNWU9Ta1pCeFFxb2hUWk8yWitwbjVtWjJ5NnhsaGJMK3hXNkx0eThl
bFFmSmE3T1EKckFWWkxRcTJRcWJvVkZvbzF5b0hzbWRsVjJhL3pZbktPWmFybml2TjdjeXp5dHVR
TjV6dm4vL3RFc0lTNFpLMnBZWkxWeTBkV09hOQpyR281c2p4eGVkc0s0eFVGSzRaV0Jxdzh1SXEy
S20zVlQ2dnRWNWV1ZnIwbWVrMXJnVjdCeW9MQnRRRnI2d3RWQ3VXRmZldmMxKzFkClQxZ3ZXZCsx
WWZxR25ScytGWW1LcmhUYkY1Y1ZmOWdvM0hqbEc0ZHZ5citaM0pTMHFhdkV1V1RQWnRKbTZlYmVM
WjViRHBhcWwrYVgKRG00TjJkcTBEZDlXdE8zMTlrWGJMNWZOS051N2c3WkR1YU8vUExpOFphZkp6
czA3UDFTa1ZQUlUrbFEyN3RMZHRXSFgrRzdSN2h0Nwp2UFkwN05YYlc3ejMvVDdKdnR0VkFWVk4x
V2JWWmZ0Sis3UDNQNjZKcXVuNGx2dHRYYTFPYlhIdHh3UFNBLzBISXc2MjE3blUxUjNTClBWUlNq
OVlyNjBjT3h4KysvcDN2ZHkwTk5nMVZqWnpHNGlOd1JIbms2ZmNKMy9jZURUcmFkb3g3ck9FSDB4
OTJIV2NkTDJwQ212S2EKUnB0VG12dGJZbHU2VDh3KzBkYnEzbnI4UjlzZkQ1dzBQRmw1U3ZOVXlX
bmE2WUxUazJmeXo0eWRsWjE5Zmk3NTNHRGJvclo3NTJQTwozMm9QYisrNkVIVGgwa1gvaStjN3ZE
dk9YUEs0ZFBLeTIrVVRWN2hYbXE4NlgyM3FkT284L3BQVFQ4ZTduTHVhcnJsY2E3bnVlcjIxCmUy
YjM2UnVlTjg3ZDlMMTU4UmIvMXRXZU9UM2R2Zk42Yi9mRjkvWGZGdDErY2lmOXpzdTcyWGNuN3Ey
OFQ3eGY5RUR0UWRsRDNZZlYKUDF2KzNOanYzSDlxd0hlZzg5SGNSL2NHaFlQUC9wSDFqdzlEQlkr
Wmo4dUdEWWJybmpnK09UbmlQM0w5NmZ5blE4OWt6eWFlRi82aQovc3V1RnhZdmZ2alY2OWZPMFpq
Um9aZnlsNU8vYlh5bC9lckE2eG12MjhiQ3hoNit5WGd6TVY3MFZ2dnR3WGZjZHgzdm85OFBUK1I4
CklIOG8vMmo1c2ZWVDBLZjdreG1Uay84RUE1anovR016TGRzQUFBQWdZMGhTVFFBQWVpVUFBSUNE
QUFENS93QUFnT2tBQUhVd0FBRHEKWUFBQU9wZ0FBQmR2a2wvRlJnQUFBQ0ZKUkVGVWVOb3N4N0VC
QUFBSXd5RDYvOUZ4a1kyRkdPa0RpZ01BQVAvL0F3QjgxUWY3NDAzawpSQUFBQUFCSlJVNUVya0pn
Z2c9PQoKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3Jlc291cmNlcy9ncmF5
LXJhbXAtMjU2LXdpdGgtMTI4LWFscGhhLnBuZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNhbm5vdCBkaXNwbGF5OiBm
aWxlIG1hcmtlZCBhcyBhIGJpbmFyeSB0eXBlLgpzdm46bWltZS10eXBlID0gYXBwbGljYXRpb24v
b2N0ZXQtc3RyZWFtCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZh
cy93ZWJnbC9yZXNvdXJjZXMvZ3JheS1yYW1wLTI1Ni13aXRoLTEyOC1hbHBoYS5wbmcKX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fXwpBZGRlZDogc3ZuOm1pbWUtdHlwZQogICArIGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQoK
CmlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFRQUFBQUFCQ0FZQUFBQXhXWEIzQUFBQUdFbEVRVlE0
aldOa1lHQm9ZR1JrWkJqRm8zZ1UKanp3TUFQM3VBMzlURzl0QkFBQUFBRWxGVGtTdVFtQ0MKCklu
ZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9yZXNvdXJjZXMvZ3JheS1yYW1wLTI1
Ni5wbmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpDYW5ub3QgZGlzcGxheTogZmlsZSBtYXJrZWQgYXMgYSBiaW5hcnkg
dHlwZS4Kc3ZuOm1pbWUtdHlwZSA9IGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQoKUHJvcGVydHkg
Y2hhbmdlcyBvbjogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvcmVzb3VyY2VzL2dyYXkt
cmFtcC0yNTYucG5nCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjptaW1lLXR5cGUKICAgKyBhcHBsaWNh
dGlvbi9vY3RldC1zdHJlYW0KCgppVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBUUFBQUFBQkNBWUFB
QUF4V1hCM0FBQUFGVWxFUVZRNGpXTmtZR0JnWUJ3Rm8yQVVqRWdBCkFQcHhBLzd4WStDR0FBQUFB
RWxGVGtTdVFtQ0MKCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9yZXNvdXJj
ZXMvZ3JheS1yYW1wLWRlZmF1bHQtZ2FtbWEucG5nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2Fubm90IGRpc3BsYXk6
IGZpbGUgbWFya2VkIGFzIGEgYmluYXJ5IHR5cGUuCnN2bjptaW1lLXR5cGUgPSBhcHBsaWNhdGlv
bi9vY3RldC1zdHJlYW0KClByb3BlcnR5IGNoYW5nZXMgb246IExheW91dFRlc3RzL2Zhc3QvY2Fu
dmFzL3dlYmdsL3Jlc291cmNlcy9ncmF5LXJhbXAtZGVmYXVsdC1nYW1tYS5wbmcKX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
XwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUKICAgKyAqCkFkZGVkOiBzdm46bWltZS10eXBlCiAgICsg
YXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtCgoKaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQVFBQUFB
QUJDQVlBQUFBeFdYQjNBQUFBUWtsRVFWUjRuR05rWUdCZ1lHUmtaQ1JFRXhKRApaeFBEeHlWR2pC
dzlBUk1URXhPNTh0amtxQ2xHYlQ2OXpLUlVqQmc1WXVUcEJVaE41NlRrSldMektEWTVBUEtSQS80
ejBRVG1BQUFBCkFFbEZUa1N1UW1DQwoKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dl
YmdsL3Jlc291cmNlcy9ncmF5LXJhbXAtZ2FtbWEwLjEucG5nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2Fubm90IGRp
c3BsYXk6IGZpbGUgbWFya2VkIGFzIGEgYmluYXJ5IHR5cGUuCnN2bjptaW1lLXR5cGUgPSBhcHBs
aWNhdGlvbi9vY3RldC1zdHJlYW0KClByb3BlcnR5IGNoYW5nZXMgb246IExheW91dFRlc3RzL2Zh
c3QvY2FudmFzL3dlYmdsL3Jlc291cmNlcy9ncmF5LXJhbXAtZ2FtbWEwLjEucG5nCl9fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X18KQWRkZWQ6IHN2bjpleGVjdXRhYmxlCiAgICsgKgpBZGRlZDogc3ZuOm1pbWUtdHlwZQogICAr
IGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQoKCmlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFRQUFB
QUFCQ0FZQUFBQXhXWEIzQUFBQUJHZEJUVUVBQUNjUVRGZkNUQUFBQUR4SlJFRlUKT010alpBQUNS
aUFnUkJNU1EyY1R3OGNsUm93Y1BRRVRFSkFyajAyT21tTFU1dFBMVEVyRnFCRTM5QVNrcG5OUzho
S3hlUlNiSEFEeQprUVArcUpUbGR3QUFBQUJKUlU1RXJrSmdnZz09CgpJbmRleDogTGF5b3V0VGVz
dHMvZmFzdC9jYW52YXMvd2ViZ2wvcmVzb3VyY2VzL2dyYXktcmFtcC1nYW1tYTEuMC5wbmcKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQpDYW5ub3QgZGlzcGxheTogZmlsZSBtYXJrZWQgYXMgYSBiaW5hcnkgdHlwZS4Kc3Zu
Om1pbWUtdHlwZSA9IGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQoKUHJvcGVydHkgY2hhbmdlcyBv
bjogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvcmVzb3VyY2VzL2dyYXktcmFtcC1nYW1t
YTEuMC5wbmcKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUKICAgKyAqCkFkZGVkOiBz
dm46bWltZS10eXBlCiAgICsgYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtCgoKaVZCT1J3MEtHZ29B
QUFBTlNVaEVVZ0FBQVFBQUFBQUJDQVlBQUFBeFdYQjNBQUFBQkdkQlRVRUFBWWFnTWVpV1h3QUFB
RHhKUkVGVQpPTXRqWkFBQ1JpQWdSQk1TUTJjVHc4Y2xSb3djUFFFVEVKQXJqMDJPbW1MVTV0UExU
RXJGcUJFMzlBU2twbk5TOGhLeGVSU2JIQUR5CmtRUCtxSlRsZHdBQUFBQkpSVTVFcmtKZ2dnPT0K
CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9yZXNvdXJjZXMvZ3JheS1yYW1w
LWdhbW1hMi4wLnBuZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09CkNhbm5vdCBkaXNwbGF5OiBmaWxlIG1hcmtlZCBhcyBh
IGJpbmFyeSB0eXBlLgpzdm46bWltZS10eXBlID0gYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtCgpQ
cm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9yZXNvdXJj
ZXMvZ3JheS1yYW1wLWdhbW1hMi4wLnBuZwpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZXhlY3V0YWJs
ZQogICArICoKQWRkZWQ6IHN2bjptaW1lLXR5cGUKICAgKyBhcHBsaWNhdGlvbi9vY3RldC1zdHJl
YW0KCgppVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBUUFBQUFBQkNBWUFBQUF4V1hCM0FBQUFCR2RC
VFVFQUF3MUFTaEhoeVFBQUFEeEpSRUZVCk9NdGpaQUFDUmlBZ1JCTVNRMmNUdzhjbFJvd2NQUUVU
RUpBcmowMk9tbUxVNXRQTFRFckZxQkUzOUFTa3BuTlM4aEt4ZVJTYkhBRHkKa1FQK3FKVGxkd0FB
QUFCSlJVNUVya0pnZ2c9PQoKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3Jl
c291cmNlcy9ncmF5LXJhbXAtZ2FtbWE0LjAucG5nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2Fubm90IGRpc3BsYXk6
IGZpbGUgbWFya2VkIGFzIGEgYmluYXJ5IHR5cGUuCnN2bjptaW1lLXR5cGUgPSBhcHBsaWNhdGlv
bi9vY3RldC1zdHJlYW0KClByb3BlcnR5IGNoYW5nZXMgb246IExheW91dFRlc3RzL2Zhc3QvY2Fu
dmFzL3dlYmdsL3Jlc291cmNlcy9ncmF5LXJhbXAtZ2FtbWE0LjAucG5nCl9fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRk
ZWQ6IHN2bjpleGVjdXRhYmxlCiAgICsgKgpBZGRlZDogc3ZuOm1pbWUtdHlwZQogICArIGFwcGxp
Y2F0aW9uL29jdGV0LXN0cmVhbQoKCmlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFRQUFBQUFCQ0FZ
QUFBQXhXWEIzQUFBQUJHZEJUVUVBQmhxQTBqMWxCQUFBQUR4SlJFRlUKT010alpBQUNSaUFnUkJN
U1EyY1R3OGNsUm93Y1BRRVRFSkFyajAyT21tTFU1dFBMVEVyRnFCRTM5QVNrcG5OUzhoS3hlUlNi
SEFEeQprUVArcUpUbGR3QUFBQUJKUlU1RXJrSmdnZz09CgpJbmRleDogTGF5b3V0VGVzdHMvZmFz
dC9jYW52YXMvd2ViZ2wvcmVzb3VyY2VzL2dyYXktcmFtcC1nYW1tYTkuMC5wbmcKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQpDYW5ub3QgZGlzcGxheTogZmlsZSBtYXJrZWQgYXMgYSBiaW5hcnkgdHlwZS4Kc3ZuOm1pbWUt
dHlwZSA9IGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQoKUHJvcGVydHkgY2hhbmdlcyBvbjogTGF5
b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvcmVzb3VyY2VzL2dyYXktcmFtcC1nYW1tYTkuMC5w
bmcKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUKICAgKyAqCkFkZGVkOiBzdm46bWlt
ZS10eXBlCiAgICsgYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtCgoKaVZCT1J3MEtHZ29BQUFBTlNV
aEVVZ0FBQVFBQUFBQUJDQVlBQUFBeFdYQjNBQUFBQkdkQlRVRUFEYnVnVWhvbmhRQUFBRHhKUkVG
VQpPTXRqWkFBQ1JpQWdSQk1TUTJjVHc4Y2xSb3djUFFFVEVKQXJqMDJPbW1MVTV0UExURXJGcUJF
MzlBU2twbk5TOGhLeGVSU2JIQUR5CmtRUCtxSlRsZHdBQUFBQkpSVTVFcmtKZ2dnPT0KCkluZGV4
OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9yZXNvdXJjZXMvZ3JheS1yYW1wLnBuZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09CkNhbm5vdCBkaXNwbGF5OiBmaWxlIG1hcmtlZCBhcyBhIGJpbmFyeSB0eXBlLgpz
dm46bWltZS10eXBlID0gYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtCgpQcm9wZXJ0eSBjaGFuZ2Vz
IG9uOiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9yZXNvdXJjZXMvZ3JheS1yYW1wLnBu
ZwpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fCkFkZGVkOiBzdm46ZXhlY3V0YWJsZQogICArICoKQWRkZWQ6IHN2bjptaW1l
LXR5cGUKICAgKyBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KCgppVkJPUncwS0dnb0FBQUFOU1Vo
RVVnQUFBUUFBQUFBQkNBWUFBQUF4V1hCM0FBQUFRa2xFUVZSNG5HTmtZR0JnWUdSa1pDUkVFeEpE
Clp4UER4eVZHakJ3OUFSTVRFeE81OHRqa3FDbEdiVDY5ektSVWpCZzVZdVRwQlVoTjU2VGtKV0x6
S0RZNUFQS1JBLzR6MFFUbUFBQUEKQUVsRlRrU3VRbUNDCgpJbmRleDogTGF5b3V0VGVzdHMvZmFz
dC9jYW52YXMvd2ViZ2wvcmVzb3VyY2VzL3plcm8tYWxwaGEucG5nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2Fubm90
IGRpc3BsYXk6IGZpbGUgbWFya2VkIGFzIGEgYmluYXJ5IHR5cGUuCnN2bjptaW1lLXR5cGUgPSBh
cHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KClByb3BlcnR5IGNoYW5nZXMgb246IExheW91dFRlc3Rz
L2Zhc3QvY2FudmFzL3dlYmdsL3Jlc291cmNlcy96ZXJvLWFscGhhLnBuZwpfX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFk
ZGVkOiBzdm46ZXhlY3V0YWJsZQogICArICoKQWRkZWQ6IHN2bjptaW1lLXR5cGUKICAgKyBhcHBs
aWNhdGlvbi9vY3RldC1zdHJlYW0KCgppVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQU1BQUFBRENB
WUFBQUJXS0xXL0FBQUFJRWxFUVZSNG5DWEpzUTBBTUFnRE1OUEw0ZkowCnlHaDVBbUh3YnJjU0dz
VUhuVUFJZnhGd3lyb0FBQUFBU1VWT1JLNUNZSUk9Cgo=
</data>
<flag name="commit-queue"
          id="54108"
          type_id="3"
          status="-"
          setter="zmo"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>65349</attachid>
            <date>2010-08-24 17:56:34 -0700</date>
            <delta_ts>2010-08-25 10:20:25 -0700</delta_ts>
            <desc>revised patch: fixing style issues</desc>
            <filename>alpha.patch</filename>
            <type>text/plain</type>
            <size>53154</size>
            <attacher name="Zhenyao Mo">zmo</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NTk1NikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTUgQEAKKzIwMTAtMDgtMjQgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQYXNzaW5n
IHByZW11bHRpcGx5QWxwaGE9ZmFsc2UgdG8gdGV4e1N1Yn1JbWFnZTJEIGxvc2VzIGluZm9ybWF0
aW9uIChza2lhKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MzgyODIKKworICAgICAgICBUZXN0OiBmYXN0L2NhbnZhcy93ZWJnbC9nbC10ZXhpbWFnZS5o
dG1sCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5jcHA6
IEZpeCBhIGJ1ZyB3aGVyZSBhbHBoYSBjaGFubmVsIGlzIGlnbm9yZWQuCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwOiBBZGQgcHJlbXVsdGlwbHlBbHBoYSBmbGFn
LgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OkltYWdlU291cmNlKToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlU291cmNlOjpzZXREYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZVNvdXJjZS5oOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
Zy9JbWFnZVNvdXJjZUNHLmNwcDogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJj
ZTo6SW1hZ2VTb3VyY2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhp
Y3NDb250ZXh0M0RTa2lhLmNwcDogRml4IHRoZSBwcmVtdWx0aXBseUFscGhhIGRhdGEgbG9zcyBp
c3N1ZSBpbiBza2lhLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldElt
YWdlRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVy
LmNwcDogQWRkIHByZW11bHRpcGx5QWxwaGEgZmxhZy4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
RGVjb2Rlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlJHQkEzMkJ1ZmZlcjo6UkdCQTMy
QnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJHQkEzMkJ1ZmZlcjo6b3BlcmF0b3I9KToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaDogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpSR0JBMzJCdWZmZXI6OnByZW11bHRpcGx5QWxwaGEpOgorICAgICAg
ICAoV2ViQ29yZTo6UkdCQTMyQnVmZmVyOjpzZXRQcmVtdWx0aXBseUFscGhhKToKKyAgICAgICAg
KFdlYkNvcmU6OlJHQkEzMkJ1ZmZlcjo6c2V0UkdCQSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZURlY29kZXI6OkltYWdlRGVjb2Rlcik6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2Rl
cnMvYm1wL0JNUEltYWdlRGVjb2Rlci5jcHA6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Qk1Q
SW1hZ2VEZWNvZGVyOjpCTVBJbWFnZURlY29kZXIpOgorICAgICAgICAoV2ViQ29yZTo6Qk1QSW1h
Z2VEZWNvZGVyOjpmcmFtZUJ1ZmZlckF0SW5kZXgpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL2JtcC9CTVBJbWFnZURlY29kZXIuaDogRGl0dG8uCisgICAgICAgICogcGxhdGZv
cm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHA6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyOjpHSUZJbWFnZURlY29kZXIpOgorICAgICAgICAo
V2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyOjpmcmFtZUNvdW50KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmg6IERpdHRvLgorICAgICAgICAq
IHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2ljby9JQ09JbWFnZURlY29kZXIuY3BwOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OklDT0ltYWdlRGVjb2Rlcjo6SUNPSW1hZ2VEZWNvZGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OklDT0ltYWdlRGVjb2Rlcjo6ZnJhbWVDb3VudCk6CisgICAgICAgIChX
ZWJDb3JlOjpJQ09JbWFnZURlY29kZXI6OmRlY29kZUF0SW5kZXgpOgorICAgICAgICAqIHBsYXRm
b3JtL2ltYWdlLWRlY29kZXJzL2ljby9JQ09JbWFnZURlY29kZXIuaDogRGl0dG8uCisgICAgICAg
ICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmNwcDogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpKUEVHSW1hZ2VEZWNvZGVyOjpKUEVHSW1hZ2VEZWNvZGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkpQRUdJbWFnZURlY29kZXI6OmZyYW1lQnVmZmVyQXRJbmRl
eCk6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNv
ZGVyLmg6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJ
bWFnZURlY29kZXIuY3BwOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlBOR0ltYWdlRGVjb2Rl
cjo6UE5HSW1hZ2VEZWNvZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlBOR0ltYWdlRGVjb2Rlcjo6
ZnJhbWVCdWZmZXJBdEluZGV4KToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9w
bmcvUE5HSW1hZ2VEZWNvZGVyLmg6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL3NraWEvSW1hZ2VEZWNvZGVyU2tpYS5jcHA6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6UkdCQTMyQnVmZmVyOjpSR0JBMzJCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6UkdCQTMy
QnVmZmVyOjpvcGVyYXRvcj0pOgorCiAyMDEwLTA4LTI0ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3
ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQuCkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmNwcAkocmV2aXNpb24gNjU5NTApCisr
KyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDI0LDYgKzQyNCw3IEBAIHZvaWQgcGFja1JHQkE4VG9SR0JBOFByZW11bHRp
cGx5KGNvbnN0IHUKICAgICBkZXN0aW5hdGlvblswXSA9IHNvdXJjZVI7CiAgICAgZGVzdGluYXRp
b25bMV0gPSBzb3VyY2VHOwogICAgIGRlc3RpbmF0aW9uWzJdID0gc291cmNlQjsKKyAgICBkZXN0
aW5hdGlvblszXSA9IHNvdXJjZVszXTsKIH0KIAogLy8gRklYTUU6IHRoaXMgcm91dGluZSBpcyBs
b3NzeSBhbmQgbXVzdCBiZSByZW1vdmVkLgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZVNvdXJjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZVNvdXJjZS5jcHAJKHJldmlzaW9uIDY1OTUwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZVNvdXJjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDggKzQxLDkgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogdW5zaWduZWQgSW1hZ2VTb3VyY2U6OnNfbWF4UGl4ZWxzUGVy
RGVjb2RlZEltYWdlID0gMTAyNCAqIDEwMjQ7CiAjZW5kaWYKIAotSW1hZ2VTb3VyY2U6OkltYWdl
U291cmNlKCkKK0ltYWdlU291cmNlOjpJbWFnZVNvdXJjZShib29sIHByZW11bHRpcGx5QWxwaGEp
CiAgICAgOiBtX2RlY29kZXIoMCkKKyAgICAsIG1fcHJlbXVsdGlwbHlBbHBoYShwcmVtdWx0aXBs
eUFscGhhKQogewogfQogCkBAIC03Nyw3ICs3OCw3IEBAIHZvaWQgSW1hZ2VTb3VyY2U6OnNldERh
dGEoU2hhcmVkQnVmZmVyKiAKICAgICAvLyBJZiBpbnN1ZmZpY2llbnQgYnl0ZXMgYXJlIGF2YWls
YWJsZSB0byBkZXRlcm1pbmUgdGhlIGltYWdlIHR5cGUsIG5vIGRlY29kZXIgcGx1Z2luIHdpbGwg
YmUKICAgICAvLyBtYWRlLgogICAgIGlmICghbV9kZWNvZGVyKSB7Ci0gICAgICAgIG1fZGVjb2Rl
ciA9IHN0YXRpY19jYXN0PE5hdGl2ZUltYWdlU291cmNlUHRyPihJbWFnZURlY29kZXI6OmNyZWF0
ZSgqZGF0YSkpOworICAgICAgICBtX2RlY29kZXIgPSBzdGF0aWNfY2FzdDxOYXRpdmVJbWFnZVNv
dXJjZVB0cj4oSW1hZ2VEZWNvZGVyOjpjcmVhdGUoKmRhdGEsIG1fcHJlbXVsdGlwbHlBbHBoYSkp
OwogI2lmIEVOQUJMRShJTUFHRV9ERUNPREVSX0RPV05fU0FNUExJTkcpCiAgICAgICAgIGlmICht
X2RlY29kZXIgJiYgc19tYXhQaXhlbHNQZXJEZWNvZGVkSW1hZ2UpCiAgICAgICAgICAgICBtX2Rl
Y29kZXItPnNldE1heE51bVBpeGVscyhzX21heFBpeGVsc1BlckRlY29kZWRJbWFnZSk7CkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oCShyZXZpc2lvbiA2NTk1MCkK
KysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaAkod29ya2luZyBjb3B5
KQpAQCAtMTE0LDcgKzExNCw3IEBAIGNvbnN0IGludCBjQW5pbWF0aW9uTm9uZSA9IC0yOwogCiBj
bGFzcyBJbWFnZVNvdXJjZSA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CiBwdWJsaWM6Ci0gICAgSW1h
Z2VTb3VyY2UoKTsKKyAgICBJbWFnZVNvdXJjZShib29sIHByZW11bHRpcGx5QWxwaGEgPSB0cnVl
KTsKICAgICB+SW1hZ2VTb3VyY2UoKTsKIAogICAgIC8vIFRlbGxzIHRoZSBJbWFnZVNvdXJjZSB0
aGF0IHRoZSBJbWFnZSBubyBsb25nZXIgY2FyZXMgYWJvdXQgZGVjb2RlZCBmcmFtZQpAQCAtMTcy
LDYgKzE3Miw3IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBOYXRpdmVJbWFnZVNvdXJjZVB0
ciBtX2RlY29kZXI7CisgICAgYm9vbCBtX3ByZW11bHRpcGx5QWxwaGE7CiAjaWYgRU5BQkxFKElN
QUdFX0RFQ09ERVJfRE9XTl9TQU1QTElORykKICAgICBzdGF0aWMgdW5zaWduZWQgc19tYXhQaXhl
bHNQZXJEZWNvZGVkSW1hZ2U7CiAjZW5kaWYKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvSW1hZ2VTb3VyY2VDRy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9JbWFnZVNvdXJjZUNHLmNwcAkocmV2aXNpb24gNjU5NTApCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlU291cmNlQ0cuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02Myw4ICs2Myw5IEBAIHZvaWQgc2hhcmVkQnVmZmVyUmVsZWFzZSh2b2lkKiBpbmZvKQogfQog
I2VuZGlmCiAKLUltYWdlU291cmNlOjpJbWFnZVNvdXJjZSgpCitJbWFnZVNvdXJjZTo6SW1hZ2VT
b3VyY2UoYm9vbCBwcmVtdWx0aXBseUFscGhhKQogICAgIDogbV9kZWNvZGVyKDApCisgICAgLCBt
X3ByZW11bHRpcGx5QWxwaGEocHJlbXVsdGlwbHlBbHBoYSkKIHsKIH0KIApJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNzQ29udGV4dDNEU2tpYS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNzQ29udGV4dDNE
U2tpYS5jcHAJKHJldmlzaW9uIDY1OTUwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9z
a2lhL0dyYXBoaWNzQ29udGV4dDNEU2tpYS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMx
LDcgQEAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgogCiAjaW5jbHVkZSAiSW1hZ2Uu
aCIKKyNpbmNsdWRlICJJbWFnZVNvdXJjZS5oIgogI2luY2x1ZGUgIk5hdGl2ZUltYWdlU2tpYS5o
IgogCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgpAQCAtNDMsMjcgKzQ0LDI1IEBAIGJvb2wgR3JhcGhp
Y3NDb250ZXh0M0Q6OmdldEltYWdlRGF0YShJbWEKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBib29sIHByZW11bHRpcGx5QWxwaGEsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+JiBvdXRwdXRWZWN0b3IpCiB7Ci0gICAgaWYg
KCFpbWFnZSkKKyAgICBpZiAoIWltYWdlIHx8ICFpbWFnZS0+ZGF0YSgpKQogICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgTmF0aXZlSW1hZ2VTa2lhKiBza2lhSW1hZ2UgPSBpbWFnZS0+bmF0aXZl
SW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKLSAgICBpZiAoIXNraWFJbWFnZSkKKyAgICBJbWFnZVNv
dXJjZSBkZWNvZGVyKGZhbHNlKTsKKyAgICBkZWNvZGVyLnNldERhdGEoaW1hZ2UtPmRhdGEoKSwg
dHJ1ZSk7CisgICAgaWYgKCFkZWNvZGVyLmZyYW1lQ291bnQoKSB8fCAhZGVjb2Rlci5mcmFtZUlz
Q29tcGxldGVBdEluZGV4KDApKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgU2tCaXRtYXA6
OkNvbmZpZyBza2lhQ29uZmlnID0gc2tpYUltYWdlLT5jb25maWcoKTsKLSAgICAvLyBGSVhNRTog
bXVzdCBzdXBwb3J0IG1vcmUgaW1hZ2UgY29uZmlndXJhdGlvbnMuCi0gICAgaWYgKHNraWFDb25m
aWcgIT0gU2tCaXRtYXA6OmtBUkdCXzg4ODhfQ29uZmlnKQorICAgIGJvb2wgaGFzQWxwaGEgPSBk
ZWNvZGVyLmZyYW1lSGFzQWxwaGFBdEluZGV4KDApOworICAgIE93blB0cjxOYXRpdmVJbWFnZVNr
aWE+IHBpeGVscyhkZWNvZGVyLmNyZWF0ZUZyYW1lQXRJbmRleCgwKSk7CisgICAgaWYgKCFwaXhl
bHMuZ2V0KCkgfHwgIXBpeGVscy0+aXNEYXRhQ29tcGxldGUoKSB8fCAhcGl4ZWxzLT53aWR0aCgp
IHx8ICFwaXhlbHMtPmhlaWdodCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgU2tCaXRt
YXAmIHNraWFJbWFnZVJlZiA9ICpza2lhSW1hZ2U7CisgICAgU2tCaXRtYXAmIHNraWFJbWFnZVJl
ZiA9ICpwaXhlbHM7CiAgICAgU2tBdXRvTG9ja1BpeGVscyBsb2NrKHNraWFJbWFnZVJlZik7Ci0g
ICAgaW50IGhlaWdodCA9IHNraWFJbWFnZS0+aGVpZ2h0KCk7Ci0gICAgaW50IHJvd0J5dGVzID0g
c2tpYUltYWdlLT5yb3dCeXRlcygpOwotICAgIEFTU0VSVChyb3dCeXRlcyA9PSBza2lhSW1hZ2Ut
PndpZHRoKCkgKiA0KTsKLSAgICB1aW50OF90KiBwaXhlbHMgPSByZWludGVycHJldF9jYXN0PHVp
bnQ4X3QqPihza2lhSW1hZ2UtPmdldFBpeGVscygpKTsKLSAgICBvdXRwdXRWZWN0b3IucmVzaXpl
KHJvd0J5dGVzICogaGVpZ2h0KTsKKyAgICBBU1NFUlQocGl4ZWxzLT5yb3dCeXRlcygpID09IHBp
eGVscy0+d2lkdGgoKSAqIDQpOworICAgIG91dHB1dFZlY3Rvci5yZXNpemUocGl4ZWxzLT5yb3dC
eXRlcygpICogcGl4ZWxzLT5oZWlnaHQoKSk7CiAgICAgQWxwaGFPcCBuZWVkZWRBbHBoYU9wID0g
a0FscGhhRG9Ob3RoaW5nOwotICAgIGlmICghcHJlbXVsdGlwbHlBbHBoYSkKLSAgICAgICAgLy8g
RklYTUU6IG11c3QgZmV0Y2ggdGhlIGltYWdlIGRhdGEgYmVmb3JlIHRoZSBwcmVtdWx0aXBsaWNh
dGlvbiBzdGVwCi0gICAgICAgIG5lZWRlZEFscGhhT3AgPSBrQWxwaGFEb1VubXVsdGlwbHk7Ci0g
ICAgcmV0dXJuIHBhY2tQaXhlbHMocGl4ZWxzLCBrU291cmNlRm9ybWF0QkdSQTgsIHNraWFJbWFn
ZS0+d2lkdGgoKSwgaGVpZ2h0LCAwLAorICAgIGlmIChoYXNBbHBoYSAmJiBwcmVtdWx0aXBseUFs
cGhhKQorICAgICAgICBuZWVkZWRBbHBoYU9wID0ga0FscGhhRG9QcmVtdWx0aXBseTsKKyAgICBy
ZXR1cm4gcGFja1BpeGVscyhyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihwaXhlbHMt
PmdldFBpeGVscygpKSwKKyAgICAgICAgICAgICAgICAgICAgICBrU291cmNlRm9ybWF0QkdSQTgs
IHBpeGVscy0+d2lkdGgoKSwgcGl4ZWxzLT5oZWlnaHQoKSwgMCwKICAgICAgICAgICAgICAgICAg
ICAgICBmb3JtYXQsIHR5cGUsIG5lZWRlZEFscGhhT3AsIG91dHB1dFZlY3Rvci5kYXRhKCkpOwog
fQogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURl
Y29kZXIuY3BwCShyZXZpc2lvbiA2NTk1MCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVj
b2RlcnMvSW1hZ2VEZWNvZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIsNyArNTIsNyBAQCBz
dGF0aWMgdW5zaWduZWQgY29weUZyb21TaGFyZWRCdWZmZXIoY2hhCiAgICAgcmV0dXJuIGJ5dGVz
RXh0cmFjdGVkOwogfQogCi1JbWFnZURlY29kZXIqIEltYWdlRGVjb2Rlcjo6Y3JlYXRlKGNvbnN0
IFNoYXJlZEJ1ZmZlciYgZGF0YSkKK0ltYWdlRGVjb2RlciogSW1hZ2VEZWNvZGVyOjpjcmVhdGUo
Y29uc3QgU2hhcmVkQnVmZmVyJiBkYXRhLCBib29sIHByZW11bHRpcGx5QWxwaGEpCiB7CiAgICAg
Ly8gV2UgbmVlZCBhdCBsZWFzdCA0IGJ5dGVzIHRvIGZpZ3VyZSBvdXQgd2hhdCBraW5kIG9mIGlt
YWdlIHdlJ3JlIGRlYWxpbmcKICAgICAvLyB3aXRoLgpAQCAtNjQsMjQgKzY0LDI0IEBAIEltYWdl
RGVjb2RlciogSW1hZ2VEZWNvZGVyOjpjcmVhdGUoY29uc3QKIAogICAgIC8vIEdJRnMgYmVnaW4g
d2l0aCBHSUY4KDcgb3IgOSkuCiAgICAgaWYgKHN0cm5jbXAoY29udGVudHMsICJHSUY4IiwgNCkg
PT0gMCkKLSAgICAgICAgcmV0dXJuIG5ldyBHSUZJbWFnZURlY29kZXIoKTsKKyAgICAgICAgcmV0
dXJuIG5ldyBHSUZJbWFnZURlY29kZXIocHJlbXVsdGlwbHlBbHBoYSk7CiAKICAgICAvLyBUZXN0
IGZvciBQTkcuCiAgICAgaWYgKCFtZW1jbXAoY29udGVudHMsICJceDg5XHg1MFx4NEVceDQ3Iiwg
NCkpCi0gICAgICAgIHJldHVybiBuZXcgUE5HSW1hZ2VEZWNvZGVyKCk7CisgICAgICAgIHJldHVy
biBuZXcgUE5HSW1hZ2VEZWNvZGVyKHByZW11bHRpcGx5QWxwaGEpOwogCiAgICAgLy8gSlBFRwog
ICAgIGlmICghbWVtY21wKGNvbnRlbnRzLCAiXHhGRlx4RDhceEZGIiwgMykpCi0gICAgICAgIHJl
dHVybiBuZXcgSlBFR0ltYWdlRGVjb2RlcigpOworICAgICAgICByZXR1cm4gbmV3IEpQRUdJbWFn
ZURlY29kZXIocHJlbXVsdGlwbHlBbHBoYSk7CiAKICAgICAvLyBCTVAKICAgICBpZiAoc3RybmNt
cChjb250ZW50cywgIkJNIiwgMikgPT0gMCkKLSAgICAgICAgcmV0dXJuIG5ldyBCTVBJbWFnZURl
Y29kZXIoKTsKKyAgICAgICAgcmV0dXJuIG5ldyBCTVBJbWFnZURlY29kZXIocHJlbXVsdGlwbHlB
bHBoYSk7CiAKICAgICAvLyBJQ09zIGFsd2F5cyBiZWdpbiB3aXRoIGEgMi1ieXRlIDAgZm9sbG93
ZWQgYnkgYSAyLWJ5dGUgMS4KICAgICAvLyBDVVJzIGJlZ2luIHdpdGggMi1ieXRlIDAgZm9sbG93
ZWQgYnkgMi1ieXRlIDIuCiAgICAgaWYgKCFtZW1jbXAoY29udGVudHMsICJceDAwXHgwMFx4MDFc
eDAwIiwgNCkgfHwgIW1lbWNtcChjb250ZW50cywgIlx4MDBceDAwXHgwMlx4MDAiLCA0KSkKLSAg
ICAgICAgcmV0dXJuIG5ldyBJQ09JbWFnZURlY29kZXIoKTsKKyAgICAgICAgcmV0dXJuIG5ldyBJ
Q09JbWFnZURlY29kZXIocHJlbXVsdGlwbHlBbHBoYSk7CiAKICAgICAvLyBHaXZlIHVwLiBXZSBk
b24ndCBrbm93IHdoYXQgdGhlIGhlY2sgdGhpcyBpcy4KICAgICByZXR1cm4gMDsKQEAgLTk0LDYg
Kzk0LDcgQEAgUkdCQTMyQnVmZmVyOjpSR0JBMzJCdWZmZXIoKQogICAgICwgbV9zdGF0dXMoRnJh
bWVFbXB0eSkKICAgICAsIG1fZHVyYXRpb24oMCkKICAgICAsIG1fZGlzcG9zYWxNZXRob2QoRGlz
cG9zZU5vdFNwZWNpZmllZCkKKyAgICAsIG1fcHJlbXVsdGlwbHlBbHBoYSh0cnVlKQogewogfSAK
IApAQCAtMTA3LDYgKzEwOCw3IEBAIFJHQkEzMkJ1ZmZlciYgUkdCQTMyQnVmZmVyOjpvcGVyYXRv
cj0oY28KICAgICBzZXRTdGF0dXMob3RoZXIuc3RhdHVzKCkpOwogICAgIHNldER1cmF0aW9uKG90
aGVyLmR1cmF0aW9uKCkpOwogICAgIHNldERpc3Bvc2FsTWV0aG9kKG90aGVyLmRpc3Bvc2FsTWV0
aG9kKCkpOworICAgIHNldFByZW11bHRpcGx5QWxwaGEob3RoZXIucHJlbXVsdGlwbHlBbHBoYSgp
KTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2Ut
ZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaAkocmV2aXNpb24gNjU5NTApCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xMTgsMTIgKzExOCwxNCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIEZyYW1lU3Rh
dHVzIHN0YXR1cygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdHVzOyB9CiAgICAgICAgIHVuc2lnbmVk
IGR1cmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9kdXJhdGlvbjsgfQogICAgICAgICBGcmFtZURp
c3Bvc2FsTWV0aG9kIGRpc3Bvc2FsTWV0aG9kKCkgY29uc3QgeyByZXR1cm4gbV9kaXNwb3NhbE1l
dGhvZDsgfQorICAgICAgICBib29sIHByZW11bHRpcGx5QWxwaGEoKSBjb25zdCB7IHJldHVybiBt
X3ByZW11bHRpcGx5QWxwaGE7IH0KIAogICAgICAgICB2b2lkIHNldEhhc0FscGhhKGJvb2wgYWxw
aGEpOwogICAgICAgICB2b2lkIHNldFJlY3QoY29uc3QgSW50UmVjdCYgcikgeyBtX3JlY3QgPSBy
OyB9CiAgICAgICAgIHZvaWQgc2V0U3RhdHVzKEZyYW1lU3RhdHVzIHN0YXR1cyk7CiAgICAgICAg
IHZvaWQgc2V0RHVyYXRpb24odW5zaWduZWQgZHVyYXRpb24pIHsgbV9kdXJhdGlvbiA9IGR1cmF0
aW9uOyB9CiAgICAgICAgIHZvaWQgc2V0RGlzcG9zYWxNZXRob2QoRnJhbWVEaXNwb3NhbE1ldGhv
ZCBtZXRob2QpIHsgbV9kaXNwb3NhbE1ldGhvZCA9IG1ldGhvZDsgfQorICAgICAgICB2b2lkIHNl
dFByZW11bHRpcGx5QWxwaGEoYm9vbCBwcmVtdWx0aXBseUFscGhhKSB7IG1fcHJlbXVsdGlwbHlB
bHBoYSA9IHByZW11bHRpcGx5QWxwaGE7IH0KIAogICAgICAgICBpbmxpbmUgdm9pZCBzZXRSR0JB
KGludCB4LCBpbnQgeSwgdW5zaWduZWQgciwgdW5zaWduZWQgZywgdW5zaWduZWQgYiwgdW5zaWdu
ZWQgYSkKICAgICAgICAgewpAQCAtMTUzLDExICsxNTUsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiAgICAgICAgIGlubGluZSB2b2lkIHNldFJHQkEoUGl4ZWxEYXRhKiBkZXN0LCB1bnNpZ25l
ZCByLCB1bnNpZ25lZCBnLCB1bnNpZ25lZCBiLCB1bnNpZ25lZCBhKQogICAgICAgICB7Ci0gICAg
ICAgICAgICAvLyBXZSBzdG9yZSB0aGlzIGRhdGEgcHJlLW11bHRpcGxpZWQuCi0gICAgICAgICAg
ICBpZiAoYSA9PSAwKQorICAgICAgICAgICAgaWYgKCFhICYmIG1fcHJlbXVsdGlwbHlBbHBoYSkK
ICAgICAgICAgICAgICAgICAqZGVzdCA9IDA7CiAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAg
ICAgICAgICBpZiAoYSA8IDI1NSkgeworICAgICAgICAgICAgICAgIGlmIChhIDwgMjU1ICYmIG1f
cHJlbXVsdGlwbHlBbHBoYSkgewogICAgICAgICAgICAgICAgICAgICBmbG9hdCBhbHBoYVBlcmNl
bnQgPSBhIC8gMjU1LjBmOwogICAgICAgICAgICAgICAgICAgICByID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KHIgKiBhbHBoYVBlcmNlbnQpOwogICAgICAgICAgICAgICAgICAgICBnID0gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KGcgKiBhbHBoYVBlcmNlbnQpOwpAQCAtMTkyLDYgKzE5Myw5IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgRnJhbWVEaXNwb3NhbE1ldGhvZCBtX2Rpc3Bvc2Fs
TWV0aG9kOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2hhdCB0byBkbyB3aXRo
IHRoaXMgZnJhbWUncyBkYXRhIHdoZW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IGluaXRpYWxpemluZyB0aGUgbmV4dCBmcmFtZS4KKyAgICAgICAgYm9vbCBtX3ByZW11bHRpcGx5
QWxwaGE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXaGV0aGVyIHRvIHByZW11
bHRpcGx5IGFscGhhIHRvIFIsIEcsIEIgY2hhbm5lbHM7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBieSBkZWZhdWx0IGl0J3MgdHJ1ZS4KICAgICB9OwogCiAgICAgLy8gVGhlIElt
YWdlRGVjb2RlciBjbGFzcyByZXByZXNlbnRzIGEgYmFzZSBjbGFzcyBmb3Igc3BlY2lmaWMgaW1h
Z2UgZm9ybWF0CkBAIC0yMDUsOCArMjA5LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIC8v
IG1fbWF4TnVtUGl4ZWxzLiAoTm90IHN1cHBvcnRlZCBieSBhbGwgaW1hZ2UgZGVjb2RlcnMgeWV0
KQogICAgIGNsYXNzIEltYWdlRGVjb2RlciA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CiAgICAgcHVi
bGljOgotICAgICAgICBJbWFnZURlY29kZXIoKQorICAgICAgICBJbWFnZURlY29kZXIoYm9vbCBw
cmVtdWx0aXBseUFscGhhKQogICAgICAgICAgICAgOiBtX3NjYWxlZChmYWxzZSkKKyAgICAgICAg
ICAgICwgbV9wcmVtdWx0aXBseUFscGhhKHByZW11bHRpcGx5QWxwaGEpCiAgICAgICAgICAgICAs
IG1fc2l6ZUF2YWlsYWJsZShmYWxzZSkKICAgICAgICAgICAgICwgbV9tYXhOdW1QaXhlbHMoLTEp
CiAgICAgICAgICAgICAsIG1faXNBbGxEYXRhUmVjZWl2ZWQoZmFsc2UpCkBAIC0yMTksNyArMjI0
LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAvLyBGYWN0b3J5IGZ1bmN0aW9uIHRv
IGNyZWF0ZSBhbiBJbWFnZURlY29kZXIuICBQb3J0cyB0aGF0IHN1YmNsYXNzCiAgICAgICAgIC8v
IEltYWdlRGVjb2RlciBjYW4gcHJvdmlkZSB0aGVpciBvd24gaW1wbGVtZW50YXRpb24gb2YgdGhp
cyB0byBhdm9pZAogICAgICAgICAvLyBuZWVkaW5nIHRvIHdyaXRlIGEgZGVkaWNhdGVkIHNldERh
dGEoKSBpbXBsZW1lbnRhdGlvbi4KLSAgICAgICAgc3RhdGljIEltYWdlRGVjb2RlciogY3JlYXRl
KGNvbnN0IFNoYXJlZEJ1ZmZlciYgZGF0YSk7CisgICAgICAgIHN0YXRpYyBJbWFnZURlY29kZXIq
IGNyZWF0ZShjb25zdCBTaGFyZWRCdWZmZXImIGRhdGEsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSk7
CiAKICAgICAgICAgLy8gVGhlIHRoZSBmaWxlbmFtZSBleHRlbnNpb24gdXN1YWxseSBhc3NvY2lh
dGVkIHdpdGggYW4gdW5kZWNvZGVkIGltYWdlCiAgICAgICAgIC8vIG9mIHRoaXMgdHlwZS4KQEAg
LTMzMyw2ICszMzgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGJvb2wgbV9zY2Fs
ZWQ7CiAgICAgICAgIFZlY3RvcjxpbnQ+IG1fc2NhbGVkQ29sdW1uczsKICAgICAgICAgVmVjdG9y
PGludD4gbV9zY2FsZWRSb3dzOworICAgICAgICBib29sIG1fcHJlbXVsdGlwbHlBbHBoYTsKIAog
ICAgIHByaXZhdGU6CiAgICAgICAgIC8vIFNvbWUgY29kZSBwYXRocyBjb21wdXRlIHRoZSBzaXpl
IG9mIHRoZSBpbWFnZSBhcyAid2lkdGggKiBoZWlnaHQgKiA0IgpJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9pbWFnZS1kZWNvZGVycy9ibXAvQk1QSW1hZ2VEZWNvZGVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJbWFnZURlY29kZXIuY3Bw
CShyZXZpc2lvbiA2NTk1MCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1w
L0JNUEltYWdlRGVjb2Rlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDggKzQwLDkgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogLy8gZG9uJ3QgcGFjaykuCiBzdGF0aWMgY29uc3Qgc2l6ZV90IHNp
emVPZkZpbGVIZWFkZXIgPSAxNDsKIAotQk1QSW1hZ2VEZWNvZGVyOjpCTVBJbWFnZURlY29kZXIo
KQotICAgIDogbV9kZWNvZGVkT2Zmc2V0KDApCitCTVBJbWFnZURlY29kZXI6OkJNUEltYWdlRGVj
b2Rlcihib29sIHByZW11bHRpcGx5QWxwaGEpCisgICAgOiBJbWFnZURlY29kZXIocHJlbXVsdGlw
bHlBbHBoYSkKKyAgICAsIG1fZGVjb2RlZE9mZnNldCgwKQogewogfQogCkBAIC02OCw4ICs2OSwx
MCBAQCBSR0JBMzJCdWZmZXIqIEJNUEltYWdlRGVjb2Rlcjo6ZnJhbWVCdWZmCiAgICAgaWYgKGlu
ZGV4KQogICAgICAgICByZXR1cm4gMDsKIAotICAgIGlmIChtX2ZyYW1lQnVmZmVyQ2FjaGUuaXNF
bXB0eSgpKQorICAgIGlmIChtX2ZyYW1lQnVmZmVyQ2FjaGUuaXNFbXB0eSgpKSB7CiAgICAgICAg
IG1fZnJhbWVCdWZmZXJDYWNoZS5yZXNpemUoMSk7CisgICAgICAgIG1fZnJhbWVCdWZmZXJDYWNo
ZS5maXJzdCgpLnNldFByZW11bHRpcGx5QWxwaGEobV9wcmVtdWx0aXBseUFscGhhKTsKKyAgICB9
CiAKICAgICBSR0JBMzJCdWZmZXIqIGJ1ZmZlciA9ICZtX2ZyYW1lQnVmZmVyQ2FjaGUuZmlyc3Qo
KTsKICAgICBpZiAoYnVmZmVyLT5zdGF0dXMoKSAhPSBSR0JBMzJCdWZmZXI6OkZyYW1lQ29tcGxl
dGUpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJbWFnZURl
Y29kZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2Jt
cC9CTVBJbWFnZURlY29kZXIuaAkocmV2aXNpb24gNjU5NTApCisrKyBXZWJDb3JlL3BsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJbWFnZURlY29kZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
MzksNyArMzksNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgLy8gVGhpcyBjbGFzcyBkZWNv
ZGVzIHRoZSBCTVAgaW1hZ2UgZm9ybWF0LgogICAgIGNsYXNzIEJNUEltYWdlRGVjb2RlciA6IHB1
YmxpYyBJbWFnZURlY29kZXIgewogICAgIHB1YmxpYzoKLSAgICAgICAgQk1QSW1hZ2VEZWNvZGVy
KCk7CisgICAgICAgIEJNUEltYWdlRGVjb2Rlcihib29sIHByZW11bHRpcGx5QWxwaGEpOwogCiAg
ICAgICAgIC8vIEltYWdlRGVjb2RlcgogICAgICAgICB2aXJ0dWFsIFN0cmluZyBmaWxlbmFtZUV4
dGVuc2lvbigpIGNvbnN0IHsgcmV0dXJuICJibXAiOyB9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHAJKHJl
dmlzaW9uIDY1OTUwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lG
SW1hZ2VEZWNvZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksOCArMjksOSBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLUdJRkltYWdlRGVjb2Rlcjo6R0lGSW1hZ2VEZWNvZGVyKCkKLSAg
ICA6IG1fYWxyZWFkeVNjYW5uZWRUaGlzRGF0YUZvckZyYW1lQ291bnQodHJ1ZSkKK0dJRkltYWdl
RGVjb2Rlcjo6R0lGSW1hZ2VEZWNvZGVyKGJvb2wgcHJlbXVsdGlwbHlBbHBoYSkKKyAgICA6IElt
YWdlRGVjb2RlcihwcmVtdWx0aXBseUFscGhhKQorICAgICwgbV9hbHJlYWR5U2Nhbm5lZFRoaXNE
YXRhRm9yRnJhbWVDb3VudCh0cnVlKQogICAgICwgbV9yZXBldGl0aW9uQ291bnQoY0FuaW1hdGlv
bkxvb3BPbmNlKQogICAgICwgbV9yZWFkT2Zmc2V0KDApCiB7CkBAIC04Myw2ICs4NCw4IEBAIHNp
emVfdCBHSUZJbWFnZURlY29kZXI6OmZyYW1lQ291bnQoKQogICAgICAgICByZWFkZXIucmVhZCgo
Y29uc3QgdW5zaWduZWQgY2hhciopbV9kYXRhLT5kYXRhKCksIG1fZGF0YS0+c2l6ZSgpLCBHSUZG
cmFtZUNvdW50UXVlcnksIHN0YXRpY19jYXN0PHVuc2lnbmVkPigtMSkpOwogICAgICAgICBtX2Fs
cmVhZHlTY2FubmVkVGhpc0RhdGFGb3JGcmFtZUNvdW50ID0gdHJ1ZTsKICAgICAgICAgbV9mcmFt
ZUJ1ZmZlckNhY2hlLnJlc2l6ZShyZWFkZXIuaW1hZ2VzX2NvdW50KTsKKyAgICAgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCByZWFkZXIuaW1hZ2VzX2NvdW50OyArK2kpCisgICAgICAgICAgICBtX2Zy
YW1lQnVmZmVyQ2FjaGVbaV0uc2V0UHJlbXVsdGlwbHlBbHBoYShtX3ByZW11bHRpcGx5QWxwaGEp
OwogICAgIH0KIAogICAgIHJldHVybiBtX2ZyYW1lQnVmZmVyQ2FjaGUuc2l6ZSgpOwpJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VE
ZWNvZGVyLmgJKHJldmlzaW9uIDY1OTUwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIC8vIFRoaXMgY2xhc3MgZGVjb2RlcyB0aGUgR0lG
IGltYWdlIGZvcm1hdC4KICAgICBjbGFzcyBHSUZJbWFnZURlY29kZXIgOiBwdWJsaWMgSW1hZ2VE
ZWNvZGVyIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIEdJRkltYWdlRGVjb2RlcigpOworICAgICAg
ICBHSUZJbWFnZURlY29kZXIoYm9vbCBwcmVtdWx0aXBseUFscGhhKTsKICAgICAgICAgdmlydHVh
bCB+R0lGSW1hZ2VEZWNvZGVyKCk7CiAKICAgICAgICAgZW51bSBHSUZRdWVyeSB7IEdJRkZ1bGxR
dWVyeSwgR0lGU2l6ZVF1ZXJ5LCBHSUZGcmFtZUNvdW50UXVlcnkgfTsKSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvaWNvL0lDT0ltYWdlRGVjb2Rlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9pY28vSUNPSW1hZ2VEZWNvZGVy
LmNwcAkocmV2aXNpb24gNjU5NTApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJz
L2ljby9JQ09JbWFnZURlY29kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCw4ICs0NCw5IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIHN0YXRpYyBjb25zdCBzaXplX3Qgc2l6ZU9mRGlyZWN0b3J5
ID0gNjsKIHN0YXRpYyBjb25zdCBzaXplX3Qgc2l6ZU9mRGlyRW50cnkgPSAxNjsKIAotSUNPSW1h
Z2VEZWNvZGVyOjpJQ09JbWFnZURlY29kZXIoKQotICAgIDogbV9kZWNvZGVkT2Zmc2V0KDApCitJ
Q09JbWFnZURlY29kZXI6OklDT0ltYWdlRGVjb2Rlcihib29sIHByZW11bHRpcGx5QWxwaGEpCisg
ICAgOiBJbWFnZURlY29kZXIocHJlbXVsdGlwbHlBbHBoYSkKKyAgICAsIG1fZGVjb2RlZE9mZnNl
dCgwKQogewogfQogCkBAIC05Niw4ICs5NywxMSBAQCBib29sIElDT0ltYWdlRGVjb2Rlcjo6c2V0
U2l6ZSh1bnNpZ25lZCB3CiBzaXplX3QgSUNPSW1hZ2VEZWNvZGVyOjpmcmFtZUNvdW50KCkKIHsK
ICAgICBkZWNvZGUoMCwgdHJ1ZSk7Ci0gICAgaWYgKG1fZnJhbWVCdWZmZXJDYWNoZS5pc0VtcHR5
KCkpCisgICAgaWYgKG1fZnJhbWVCdWZmZXJDYWNoZS5pc0VtcHR5KCkpIHsKICAgICAgICAgbV9m
cmFtZUJ1ZmZlckNhY2hlLnJlc2l6ZShtX2RpckVudHJpZXMuc2l6ZSgpKTsKKyAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBtX2RpckVudHJpZXMuc2l6ZSgpOyArK2kpCisgICAgICAgICAg
ICBtX2ZyYW1lQnVmZmVyQ2FjaGVbaV0uc2V0UHJlbXVsdGlwbHlBbHBoYShtX3ByZW11bHRpcGx5
QWxwaGEpOworICAgIH0KICAgICAvLyBDQVVUSU9OOiBXZSBtdXN0IG5vdCByZXNpemUgbV9mcmFt
ZUJ1ZmZlckNhY2hlIGFnYWluIGFmdGVyIHRoaXMsIGFzCiAgICAgLy8gZGVjb2RlQXRJbmRleCgp
IG1heSBnaXZlIGEgQk1QSW1hZ2VSZWFkZXIgYSBwb2ludGVyIHRvIG9uZSBvZiB0aGUKICAgICAv
LyBlbnRyaWVzLgpAQCAtMTk3LDcgKzIwMSw3IEBAIGJvb2wgSUNPSW1hZ2VEZWNvZGVyOjpkZWNv
ZGVBdEluZGV4KHNpemUKICAgICB9CiAKICAgICBpZiAoIW1fcG5nRGVjb2RlcnNbaW5kZXhdKSB7
Ci0gICAgICAgIG1fcG5nRGVjb2RlcnNbaW5kZXhdLnNldChuZXcgUE5HSW1hZ2VEZWNvZGVyKCkp
OworICAgICAgICBtX3BuZ0RlY29kZXJzW2luZGV4XS5zZXQobmV3IFBOR0ltYWdlRGVjb2Rlciht
X3ByZW11bHRpcGx5QWxwaGEpKTsKICAgICAgICAgc2V0RGF0YUZvclBOR0RlY29kZXJBdEluZGV4
KGluZGV4KTsKICAgICB9CiAgICAgLy8gRmFpbCBpZiB0aGUgc2l6ZSB0aGUgUE5HSW1hZ2VEZWNv
ZGVyIGNhbGN1bGF0ZWQgZG9lcyBub3QgbWF0Y2ggdGhlIHNpemUKSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvaWNvL0lDT0ltYWdlRGVjb2Rlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvaWNvL0lDT0ltYWdlRGVjb2Rlci5oCShy
ZXZpc2lvbiA2NTk1MCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvaWNvL0lD
T0ltYWdlRGVjb2Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICAvLyBUaGlzIGNsYXNzIGRlY29kZXMgdGhlIElDTyBhbmQgQ1VSIGlt
YWdlIGZvcm1hdHMuCiAgICAgY2xhc3MgSUNPSW1hZ2VEZWNvZGVyIDogcHVibGljIEltYWdlRGVj
b2RlciB7CiAgICAgcHVibGljOgotICAgICAgICBJQ09JbWFnZURlY29kZXIoKTsKKyAgICAgICAg
SUNPSW1hZ2VEZWNvZGVyKGJvb2wgcHJlbXVsdGlwbHlBbHBoYSk7CiAgICAgICAgIHZpcnR1YWwg
fklDT0ltYWdlRGVjb2RlcigpOwogCiAgICAgICAgIC8vIEltYWdlRGVjb2RlcgpJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1h
Z2VEZWNvZGVyLmNwcAkocmV2aXNpb24gNjU5NTApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2
MSw3ICszNjEsOCBAQCB2b2lkIHRlcm1fc291cmNlKGpfZGVjb21wcmVzc19wdHIgamQpCiAgICAg
c3JjLT5kZWNvZGVyLT5kZWNvZGVyKCktPmpwZWdDb21wbGV0ZSgpOwogfQogCi1KUEVHSW1hZ2VE
ZWNvZGVyOjpKUEVHSW1hZ2VEZWNvZGVyKCkKK0pQRUdJbWFnZURlY29kZXI6OkpQRUdJbWFnZURl
Y29kZXIoYm9vbCBwcmVtdWx0aXBseUFscGhhKQorICAgIDogSW1hZ2VEZWNvZGVyKHByZW11bHRp
cGx5QWxwaGEpCiB7CiB9CiAKQEAgLTM5MSw4ICszOTIsMTAgQEAgUkdCQTMyQnVmZmVyKiBKUEVH
SW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZgogICAgIGlmIChpbmRleCkKICAgICAgICAgcmV0dXJuIDA7
CiAKLSAgICBpZiAobV9mcmFtZUJ1ZmZlckNhY2hlLmlzRW1wdHkoKSkKKyAgICBpZiAobV9mcmFt
ZUJ1ZmZlckNhY2hlLmlzRW1wdHkoKSkgewogICAgICAgICBtX2ZyYW1lQnVmZmVyQ2FjaGUucmVz
aXplKDEpOworICAgICAgICBtX2ZyYW1lQnVmZmVyQ2FjaGVbMF0uc2V0UHJlbXVsdGlwbHlBbHBo
YShtX3ByZW11bHRpcGx5QWxwaGEpOworICAgIH0KIAogICAgIFJHQkEzMkJ1ZmZlciYgZnJhbWUg
PSBtX2ZyYW1lQnVmZmVyQ2FjaGVbMF07CiAgICAgaWYgKGZyYW1lLnN0YXR1cygpICE9IFJHQkEz
MkJ1ZmZlcjo6RnJhbWVDb21wbGV0ZSkKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVj
b2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIuaAkocmV2aXNpb24gNjU5
NTApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVj
b2Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw3IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICAvLyBUaGlzIGNsYXNzIGRlY29kZXMgdGhlIEpQRUcgaW1hZ2UgZm9ybWF0LgogICAg
IGNsYXNzIEpQRUdJbWFnZURlY29kZXIgOiBwdWJsaWMgSW1hZ2VEZWNvZGVyIHsKICAgICBwdWJs
aWM6Ci0gICAgICAgIEpQRUdJbWFnZURlY29kZXIoKTsKKyAgICAgICAgSlBFR0ltYWdlRGVjb2Rl
cihib29sIHByZW11bHRpcGx5QWxwaGEpOwogICAgICAgICB2aXJ0dWFsIH5KUEVHSW1hZ2VEZWNv
ZGVyKCk7CiAKICAgICAgICAgLy8gSW1hZ2VEZWNvZGVyCkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5jcHAJKHJl
dmlzaW9uIDY1OTUwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9wbmcvUE5H
SW1hZ2VEZWNvZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY5LDggKzE2OSw5IEBAIHByaXZh
dGU6CiAgICAgdW5zaWduZWQgbV9jdXJyZW50QnVmZmVyU2l6ZTsKIH07CiAKLVBOR0ltYWdlRGVj
b2Rlcjo6UE5HSW1hZ2VEZWNvZGVyKCkKLSAgICA6IG1fZG9Ob3RoaW5nT25GYWlsdXJlKGZhbHNl
KQorUE5HSW1hZ2VEZWNvZGVyOjpQTkdJbWFnZURlY29kZXIoYm9vbCBwcmVtdWx0aXBseUFscGhh
KQorICAgIDogSW1hZ2VEZWNvZGVyKHByZW11bHRpcGx5QWxwaGEpCisgICAgLCBtX2RvTm90aGlu
Z09uRmFpbHVyZShmYWxzZSkKIHsKIH0KIApAQCAtMjAwLDggKzIwMSwxMCBAQCBSR0JBMzJCdWZm
ZXIqIFBOR0ltYWdlRGVjb2Rlcjo6ZnJhbWVCdWZmCiAgICAgaWYgKGluZGV4KQogICAgICAgICBy
ZXR1cm4gMDsKIAotICAgIGlmIChtX2ZyYW1lQnVmZmVyQ2FjaGUuaXNFbXB0eSgpKQorICAgIGlm
IChtX2ZyYW1lQnVmZmVyQ2FjaGUuaXNFbXB0eSgpKSB7CiAgICAgICAgIG1fZnJhbWVCdWZmZXJD
YWNoZS5yZXNpemUoMSk7CisgICAgICAgIG1fZnJhbWVCdWZmZXJDYWNoZVswXS5zZXRQcmVtdWx0
aXBseUFscGhhKG1fcHJlbXVsdGlwbHlBbHBoYSk7CisgICAgfQogCiAgICAgUkdCQTMyQnVmZmVy
JiBmcmFtZSA9IG1fZnJhbWVCdWZmZXJDYWNoZVswXTsKICAgICBpZiAoZnJhbWUuc3RhdHVzKCkg
IT0gUkdCQTMyQnVmZmVyOjpGcmFtZUNvbXBsZXRlKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmgJKHJldmlzaW9u
IDY1OTUwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9wbmcvUE5HSW1hZ2VE
ZWNvZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgIC8vIFRoaXMgY2xhc3MgZGVjb2RlcyB0aGUgUE5HIGltYWdlIGZvcm1hdC4KICAg
ICBjbGFzcyBQTkdJbWFnZURlY29kZXIgOiBwdWJsaWMgSW1hZ2VEZWNvZGVyIHsKICAgICBwdWJs
aWM6Ci0gICAgICAgIFBOR0ltYWdlRGVjb2RlcigpOworICAgICAgICBQTkdJbWFnZURlY29kZXIo
Ym9vbCBwcmVtdWx0aXBseUFscGhhKTsKICAgICAgICAgdmlydHVhbCB+UE5HSW1hZ2VEZWNvZGVy
KCk7CiAKICAgICAgICAgLy8gSW1hZ2VEZWNvZGVyCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL3NraWEvSW1hZ2VEZWNvZGVyU2tpYS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9za2lhL0ltYWdlRGVjb2RlclNraWEuY3BwCShy
ZXZpc2lvbiA2NTk1MCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvc2tpYS9J
bWFnZURlY29kZXJTa2lhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQCBSR0JB
MzJCdWZmZXI6OlJHQkEzMkJ1ZmZlcigpCiAgICAgOiBtX3N0YXR1cyhGcmFtZUVtcHR5KQogICAg
ICwgbV9kdXJhdGlvbigwKQogICAgICwgbV9kaXNwb3NhbE1ldGhvZChEaXNwb3NlTm90U3BlY2lm
aWVkKQorICAgICwgbV9wcmVtdWx0aXBseUFscGhhKHRydWUpCiB7CiB9CiAKQEAgLTQ5LDYgKzUw
LDcgQEAgUkdCQTMyQnVmZmVyJiBSR0JBMzJCdWZmZXI6Om9wZXJhdG9yPShjbwogICAgIHNldFN0
YXR1cyhvdGhlci5zdGF0dXMoKSk7CiAgICAgc2V0RHVyYXRpb24ob3RoZXIuZHVyYXRpb24oKSk7
CiAgICAgc2V0RGlzcG9zYWxNZXRob2Qob3RoZXIuZGlzcG9zYWxNZXRob2QoKSk7CisgICAgc2V0
UHJlbXVsdGlwbHlBbHBoYShvdGhlci5wcmVtdWx0aXBseUFscGhhKCkpOwogICAgIHJldHVybiAq
dGhpczsKIH0KIApJbmRleDogV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiA2NTk1NikKKysrIFdlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAxMC0w
OC0yNCAgWmhlbnlhbyBNbyAgPHptb0Bnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFBhc3NpbmcgcHJlbXVsdGlwbHlBbHBoYT1mYWxz
ZSB0byB0ZXh7U3VifUltYWdlMkQgbG9zZXMgaW5mb3JtYXRpb24gKHNraWEpCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zODI4MgorCisgICAgICAgICog
c3JjL1dlYkltYWdlRGVjb2Rlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkltYWdlRGVjb2Rl
cjo6aW5pdCk6IEFkZCBwcmVtdWx0aXBseUFscGhhIGZsYWcuCisKIDIwMTAtMDgtMjQgIEppYW4g
TGkgIDxqaWFubGlAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEZp
c2hlci4KSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViSW1hZ2VEZWNvZGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYkltYWdlRGVjb2Rlci5jcHAJKHJldmlz
aW9uIDY1OTUwKQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJbWFnZURlY29kZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01NiwxMCArNTYsMTAgQEAgdm9pZCBXZWJJbWFnZURlY29kZXI6Omlu
aXQoVHlwZSB0eXBlKQogewogICAgIHN3aXRjaCAodHlwZSkgewogICAgIGNhc2UgVHlwZUJNUDoK
LSAgICAgICAgbV9wcml2YXRlID0gbmV3IEJNUEltYWdlRGVjb2RlcigpOworICAgICAgICBtX3By
aXZhdGUgPSBuZXcgQk1QSW1hZ2VEZWNvZGVyKHRydWUpOwogICAgICAgICBicmVhazsKICAgICBj
YXNlIFR5cGVJQ086Ci0gICAgICAgIG1fcHJpdmF0ZSA9IG5ldyBJQ09JbWFnZURlY29kZXIoKTsK
KyAgICAgICAgbV9wcml2YXRlID0gbmV3IElDT0ltYWdlRGVjb2Rlcih0cnVlKTsKICAgICAgICAg
YnJlYWs7CiAgICAgfQogfQpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNjU5NTYpCisrKyBMYXlvdXRUZXN0
cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyOCBAQAorMjAxMC0wOC0yNCAg
WmhlbnlhbyBNbyAgPHptb0Bnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFBhc3NpbmcgcHJlbXVsdGlwbHlBbHBoYT1mYWxzZSB0byB0
ZXh7U3VifUltYWdlMkQgbG9zZXMgaW5mb3JtYXRpb24gKHNraWEpCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zODI4MgorCisgICAgICAgICogZmFzdC9j
YW52YXMvd2ViZ2wvZ2wtdGV4aW1hZ2UtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBm
YXN0L2NhbnZhcy93ZWJnbC9nbC10ZXhpbWFnZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0
L2NhbnZhcy93ZWJnbC9yZXNvdXJjZXMvM3gzLnBuZzogQWRkZWQuCisgICAgICAgICogZmFzdC9j
YW52YXMvd2ViZ2wvcmVzb3VyY2VzL2dyYXktcmFtcC0yNTYtd2l0aC0xMjgtYWxwaGEucG5nOiBB
ZGRlZC4KKyAgICAgICAgKiBmYXN0L2NhbnZhcy93ZWJnbC9yZXNvdXJjZXMvZ3JheS1yYW1wLTI1
Ni5wbmc6IEFkZGVkLgorICAgICAgICAqIGZhc3QvY2FudmFzL3dlYmdsL3Jlc291cmNlcy9ncmF5
LXJhbXAtZGVmYXVsdC1nYW1tYS5wbmc6IEFkZGVkLgorICAgICAgICAqIGZhc3QvY2FudmFzL3dl
YmdsL3Jlc291cmNlcy9ncmF5LXJhbXAtZ2FtbWEwLjEucG5nOiBBZGRlZC4KKyAgICAgICAgKiBm
YXN0L2NhbnZhcy93ZWJnbC9yZXNvdXJjZXMvZ3JheS1yYW1wLWdhbW1hMS4wLnBuZzogQWRkZWQu
CisgICAgICAgICogZmFzdC9jYW52YXMvd2ViZ2wvcmVzb3VyY2VzL2dyYXktcmFtcC1nYW1tYTIu
MC5wbmc6IEFkZGVkLgorICAgICAgICAqIGZhc3QvY2FudmFzL3dlYmdsL3Jlc291cmNlcy9ncmF5
LXJhbXAtZ2FtbWE0LjAucG5nOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2NhbnZhcy93ZWJnbC9y
ZXNvdXJjZXMvZ3JheS1yYW1wLWdhbW1hOS4wLnBuZzogQWRkZWQuCisgICAgICAgICogZmFzdC9j
YW52YXMvd2ViZ2wvcmVzb3VyY2VzL2dyYXktcmFtcC5wbmc6IEFkZGVkLgorICAgICAgICAqIGZh
c3QvY2FudmFzL3dlYmdsL3Jlc291cmNlcy93ZWJnbC10ZXN0LXV0aWxzLmpzOiBTeW5jIHdpdGgg
a2hyb25vcy4KKyAgICAgICAgKFdlYkdMVGVzdFV0aWxzKToKKyAgICAgICAgKiBmYXN0L2NhbnZh
cy93ZWJnbC9yZXNvdXJjZXMvemVyby1hbHBoYS5wbmc6IEFkZGVkLgorICAgICAgICAqIHBsYXRm
b3JtL2Nocm9taXVtL3Rlc3RfZXhwZWN0YXRpb25zLnR4dDogRG9uJ3QgcnVuIGdsLXRleGltYWdl
Lmh0bWwgZm9yIG1hYy4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvU2tpcHBlZDogRG9uJ3QgcnVu
IGdsLXRleGltYWdlLmh0bWwgZm9yIG1hYy4KKwogMjAxMC0wOC0yNCAgRHVtaXRydSBEYW5pbGl1
YyAgPGR1bWlAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHVwZGF0aW5nIGEg
Y2hyb21pdW0tbGludXggZXhwZWN0YXRpb24uCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZh
cy93ZWJnbC9nbC10ZXhpbWFnZS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvZmFzdC9jYW52YXMvd2ViZ2wvZ2wtdGV4aW1hZ2UtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAw
KQorKysgTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvZ2wtdGV4aW1hZ2UtZXhwZWN0ZWQu
dHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDYyIEBACitDT05TT0xFIE1FU1NBR0U6IGxpbmUg
MjYwOiBSZWZlcmVuY2VFcnJvcjogQ2FuJ3QgZmluZCB2YXJpYWJsZTogbm90aWZ5RmluaXNoZWRU
b0hhcm5lc3MKK1Rlc3QgdGV4SW1hZ2UyRCBjb252ZXJzaW9ucy4KKworT24gc3VjY2VzcywgeW91
IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1Qg
Q09NUExFVEUiLgorCitQQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1Ig
OiBTaG91bGQgYmUgbm8gZXJyb3JzIGZyb20gc2V0dXAuCisKK2NoZWNrIHBpeGVscyBhcmUgTk9U
IHByZS1tdWx0aXBsaWVkCitQQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJS
T1IgOiBTaG91bGQgYmUgbm8gZXJyb3JzIGZyb20gc2V0dXAKK1BBU1MgcGl4ZWwgMCwgMTUgc2hv
dWxkIGJlIDAsIDAsIDAsIDI1NSB3YXMgMCwgMCwgMCwgMjU1CitQQVNTIHBpeGVsIDEyOCwgMTUg
c2hvdWxkIGJlIDI1NSwgMCwgMjU1LCAyNTUgd2FzIDI1NSwgMCwgMCwgMjU1CitQQVNTIHBpeGVs
IDI1NSwgMTUgc2hvdWxkIGJlIDAsIDAsIDI1NSwgMjU1IHdhcyAwLCAwLCAyNTUsIDI1NQorUEFT
UyBwaXhlbCAwLCA4IHNob3VsZCBiZSAxMjgsIDEyOCwgMTI4LCAyNTUgd2FzIDEyOCwgMTI4LCAx
MjgsIDI1NQorUEFTUyBwaXhlbCAxMjgsIDggc2hvdWxkIGJlIDI1NSwgMjU1LCAyNTUsIDI1NSB3
YXMgMjU1LCAyNTUsIDI1NSwgMjU1CitQQVNTIHBpeGVsIDI1NSwgOCBzaG91bGQgYmUgMCwgMjU1
LCAyNTUsIDI1NSB3YXMgMCwgMjU1LCAyNTUsIDI1NQorUEFTUyBwaXhlbCAwLCAwIHNob3VsZCBi
ZSAyNTUsIDAsIDAsIDI1NSB3YXMgMjU1LCAwLCAwLCAyNTUKK1BBU1MgcGl4ZWwgMTI4LCAwIHNo
b3VsZCBiZSAyNTUsIDI1NSwgMCwgMjU1IHdhcyAyNTUsIDI1NSwgMCwgMjU1CitQQVNTIHBpeGVs
IDI1NSwgMCBzaG91bGQgYmUgMCwgMjU1LCAwLCAyNTUgd2FzIDAsIDI1NSwgMCwgMjU1CisKK2No
ZWNrIHF1YW50aXphdGlvbgorUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VS
Uk9SIDogU2hvdWxkIGJlIG5vIGVycm9ycyBmcm9tIHNldHVwLgorUEFTUyBUaGVyZSBzaG91bGQg
YmUgMjU2IHVuaXF1ZSB2YWx1ZXMgaW4gY2hhbm5lbCAwLiBGb3VuZCAyNTYKK1BBU1MgVGhlcmUg
c2hvdWxkIGJlIDI1NiB1bmlxdWUgdmFsdWVzIGluIGNoYW5uZWwgMS4gRm91bmQgMjU2CitQQVNT
IFRoZXJlIHNob3VsZCBiZSAyNTYgdW5pcXVlIHZhbHVlcyBpbiBjaGFubmVsIDIuIEZvdW5kIDI1
NgorUEFTUyBUaGVyZSBzaG91bGQgYmUgMjU2IHVuaXF1ZSB2YWx1ZXMgaW4gY2hhbm5lbCAzLiBG
b3VuZCAyNTYKK1BBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IFNo
b3VsZCBiZSBubyBlcnJvcnMgZnJvbSBzZXR1cC4KK1BBU1MgVGhlcmUgc2hvdWxkIGJlIDE2IHVu
aXF1ZSB2YWx1ZXMgaW4gY2hhbm5lbCAwLiBGb3VuZCAxNgorUEFTUyBUaGVyZSBzaG91bGQgYmUg
MTYgdW5pcXVlIHZhbHVlcyBpbiBjaGFubmVsIDEuIEZvdW5kIDE2CitQQVNTIFRoZXJlIHNob3Vs
ZCBiZSAxNiB1bmlxdWUgdmFsdWVzIGluIGNoYW5uZWwgMi4gRm91bmQgMTYKK1BBU1MgVGhlcmUg
c2hvdWxkIGJlIDE2IHVuaXF1ZSB2YWx1ZXMgaW4gY2hhbm5lbCAzLiBGb3VuZCAxNgorUEFTUyBn
ZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogU2hvdWxkIGJlIG5vIGVycm9y
cyBmcm9tIHNldHVwLgorUEFTUyBUaGVyZSBzaG91bGQgYmUgMzIgdW5pcXVlIHZhbHVlcyBpbiBj
aGFubmVsIDAuIEZvdW5kIDMyCitQQVNTIFRoZXJlIHNob3VsZCBiZSA2NCB1bmlxdWUgdmFsdWVz
IGluIGNoYW5uZWwgMS4gRm91bmQgNjQKK1BBU1MgVGhlcmUgc2hvdWxkIGJlIDMyIHVuaXF1ZSB2
YWx1ZXMgaW4gY2hhbm5lbCAyLiBGb3VuZCAzMgorUEFTUyBUaGVyZSBzaG91bGQgYmUgMSB1bmlx
dWUgdmFsdWVzIGluIGNoYW5uZWwgMy4gRm91bmQgMQorUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0
ZWQgdmFsdWU6IE5PX0VSUk9SIDogU2hvdWxkIGJlIG5vIGVycm9ycyBmcm9tIHNldHVwLgorUEFT
UyBUaGVyZSBzaG91bGQgYmUgMzIgdW5pcXVlIHZhbHVlcyBpbiBjaGFubmVsIDAuIEZvdW5kIDMy
CitQQVNTIFRoZXJlIHNob3VsZCBiZSAzMiB1bmlxdWUgdmFsdWVzIGluIGNoYW5uZWwgMS4gRm91
bmQgMzIKK1BBU1MgVGhlcmUgc2hvdWxkIGJlIDMyIHVuaXF1ZSB2YWx1ZXMgaW4gY2hhbm5lbCAy
LiBGb3VuZCAzMgorUEFTUyBUaGVyZSBzaG91bGQgYmUgMiB1bmlxdWUgdmFsdWVzIGluIGNoYW5u
ZWwgMy4gRm91bmQgMgorCitjaGVjayBwaXhlbHMgYXJlIHByZS1tdWx0aXBsaWVkCitQQVNTIGdl
dEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiBTaG91bGQgYmUgbm8gZXJyb3Jz
IGZyb20gc2V0dXAKK1BBU1MgcGl4ZWxzIHNob3VsZCBhbGwgYmUgMC4KKworY2hlY2sgcGl4ZWxz
IGFyZSBmbGlwcGVkCitQQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1Ig
OiBTaG91bGQgYmUgbm8gZXJyb3JzIGZyb20gc2V0dXAKK1BBU1MgcGl4ZWwgMCwgMTUgc2hvdWxk
IGJlIDI1NSwgMCwgMCwgMjU1IHdhcyAyNTUsIDAsIDAsIDI1NQorUEFTUyBwaXhlbCAxMjgsIDE1
IHNob3VsZCBiZSAyNTUsIDI1NSwgMCwgMjU1IHdhcyAyNTUsIDI1NSwgMCwgMjU1CitQQVNTIHBp
eGVsIDI1NSwgMTUgc2hvdWxkIGJlIDI1NSwgMCwgMCwgMjU1IHdhcyAyNTUsIDAsIDAsIDI1NQor
UEFTUyBwaXhlbCAwLCA4IHNob3VsZCBiZSAyNTUsIDAsIDI1NSwgMjU1IHdhcyAyNTUsIDAsIDI1
NSwgMjU1CitQQVNTIHBpeGVsIDEyOCwgOCBzaG91bGQgYmUgMjU1LCAwLCAwLCAyNTUgd2FzIDI1
NSwgMCwgMCwgMjU1CitQQVNTIHBpeGVsIDI1NSwgOCBzaG91bGQgYmUgMCwgMjU1LCAwLCAyNTUg
d2FzIDAsIDI1NSwgMCwgMjU1CitQQVNTIHBpeGVsIDAsIDAgc2hvdWxkIGJlIDAsIDAsIDAsIDI1
NSB3YXMgMCwgMCwgMCwgMjU1CitQQVNTIHBpeGVsIDEyOCwgMCBzaG91bGQgYmUgMCwgMCwgMjU1
LCAyNTUgd2FzIDAsIDAsIDI1NSwgMjU1CitQQVNTIHBpeGVsIDI1NSwgMCBzaG91bGQgYmUgMjU1
LCAwLCAwLCAyNTUgd2FzIDI1NSwgMCwgMCwgMjU1CitQQVNTIGdldEVycm9yIHdhcyBleHBlY3Rl
ZCB2YWx1ZTogTk9fRVJST1IgOiBTaG91bGQgYmUgbm8gZXJyb3JzCisKK1BBU1Mgc3VjY2Vzc2Z1
bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9m
YXN0L2NhbnZhcy93ZWJnbC9nbC10ZXhpbWFnZS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2Zhc3QvY2FudmFzL3dlYmdsL2dsLXRleGltYWdlLmh0bWwJKHJldmlzaW9uIDApCisrKyBM
YXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9nbC10ZXhpbWFnZS5odG1sCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDI2NSBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBI
VE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIKKyAgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0
L2xvb3NlLmR0ZCI+Cis8aHRtbD4KKzxoZWFkPgorPHRpdGxlPldlYkdMIHRleEltYWdlMkQgY29u
Zm9ybWFuY2UgdGVzdC48L3RpdGxlPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8u
Li9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiLz4KKzxzY3JpcHQgc3JjPSIuLi8uLi9q
cy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291
cmNlcy93ZWJnbC10ZXN0LmpzIj4gPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3dl
YmdsLXRlc3QtdXRpbHMuanMiPiA8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGNhbnZhcyBp
ZD0iZXhhbXBsZSIgd2lkdGg9IjI1NiIgaGVpZ2h0PSIxNiIgc3R5bGU9IndpZHRoOiAyNTZweDsg
aGVpZ2h0OiA0OHB4OyI+PC9jYW52YXM+Cis8ZGl2IGlkPSJkZXNjcmlwdGlvbiI+PC9kaXY+Cis8
ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQ+CitkZXNjcmlwdGlvbigiVGVzdCB0ZXhJ
bWFnZTJEIGNvbnZlcnNpb25zLiIpOwordmFyIHd0dSA9IFdlYkdMVGVzdFV0aWxzOwordmFyIGNh
bnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJleGFtcGxlIik7Cit2YXIgZ2wgPSB3dHUu
Y3JlYXRlM0RDb250ZXh0KGNhbnZhcyk7Cit2YXIgcHJvZ3JhbSA9IHd0dS5zZXR1cFRleHR1cmVk
UXVhZChnbCk7CisKK2dsRXJyb3JTaG91bGRCZShnbCwgZ2wuTk9fRVJST1IsICJTaG91bGQgYmUg
bm8gZXJyb3JzIGZyb20gc2V0dXAuIik7CisKK3ZhciBpbWdVUkxzID0gWworICAncmVzb3VyY2Vz
L2dyYXktcmFtcC0yNTYtd2l0aC0xMjgtYWxwaGEucG5nJywKKyAgJ3Jlc291cmNlcy9ncmF5LXJh
bXAtMjU2LnBuZycsCisgICdyZXNvdXJjZXMvZ3JheS1yYW1wLWRlZmF1bHQtZ2FtbWEucG5nJywK
KyAgJ3Jlc291cmNlcy9ncmF5LXJhbXAtZ2FtbWEwLjEucG5nJywKKyAgJ3Jlc291cmNlcy9ncmF5
LXJhbXAtZ2FtbWExLjAucG5nJywKKyAgJ3Jlc291cmNlcy9ncmF5LXJhbXAtZ2FtbWEyLjAucG5n
JywKKyAgJ3Jlc291cmNlcy9ncmF5LXJhbXAtZ2FtbWE0LjAucG5nJywKKyAgJ3Jlc291cmNlcy9n
cmF5LXJhbXAtZ2FtbWE5LjAucG5nJywKKyAgJ3Jlc291cmNlcy9ncmF5LXJhbXAucG5nJywKKyAg
J3Jlc291cmNlcy96ZXJvLWFscGhhLnBuZycsCisgICdyZXNvdXJjZXMvM3gzLnBuZyddOworCit3
dHUubG9hZEltYWdlc0FzeW5jKGltZ1VSTHMsIHJ1blRlc3RzKTsKKworZnVuY3Rpb24gcnVuVGVz
dHMoaW1ncykgeworCisgIHZhciBsb2MgPSBnbC5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwg
InRleCIpOworICBnbC51bmlmb3JtMWkobG9jLCAwKTsKKworICBnbC5kaXNhYmxlKGdsLkJMRU5E
KTsKKyAgZ2wuZGlzYWJsZShnbC5ERVBUSF9URVNUKTsKKworICB2YXIgd2lkdGggPSBjYW52YXMu
d2lkdGg7CisgIHZhciBoZWlnaHQgPSBjYW52YXMuaGVpZ2h0OworCisgIGZ1bmN0aW9uIGNoZWNr
UGl4ZWwoYnVmLCB4LCB5LCBjb2xvcikgeworICAgIHZhciBvZmYgPSAoeSAqIHdpZHRoICsgeCkg
KiA0OworICAgIHZhciBtc2cgPSAicGl4ZWwgIiArIHggKyAiLCAiICsgeSArICIgc2hvdWxkIGJl
ICIgKworICAgICAgICAgICAgICBjb2xvclswXSArICIsICIgKworICAgICAgICAgICAgICBjb2xv
clsxXSArICIsICIgKworICAgICAgICAgICAgICBjb2xvclsyXSArICIsICIgKworICAgICAgICAg
ICAgICBjb2xvclszXSArICIgd2FzICIgKworICAgICAgICAgICAgICBidWZbb2ZmICsgMF0gKyAi
LCAiICsKKyAgICAgICAgICAgICAgYnVmW29mZiArIDFdICsgIiwgIiArCisgICAgICAgICAgICAg
IGJ1ZltvZmYgKyAyXSArICIsICIgKworICAgICAgICAgICAgICBidWZbb2ZmICsgM107CisKKyAg
ICBmb3IgKHZhciBpaSA9IDA7IGlpIDwgNDsgKytpaSkgeworICAgICAgaWYgKGJ1ZltvZmYgKyBp
aV0gIT0gY29sb3JbaWldKSB7CisgICAgICAgIHRlc3RGYWlsZWQobXNnKTsKKyAgICAgICAgcmV0
dXJuOworICAgICAgfQorICAgIH0KKyAgICB0ZXN0UGFzc2VkKG1zZyk7CisgIH0KKworICB2YXIg
dGV4ID0gZ2wuY3JlYXRlVGV4dHVyZSgpOworICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJE
LCB0ZXgpOworICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfV1JB
UF9TLCBnbC5DTEFNUF9UT19FREdFKTsKKyAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJE
LCBnbC5URVhUVVJFX1dSQVBfVCwgZ2wuQ0xBTVBfVE9fRURHRSk7CisgIGdsLnRleFBhcmFtZXRl
cmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9NSU5fRklMVEVSLCBnbC5ORUFSRVNUKTsKKyAg
Z2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01BR19GSUxURVIsIGds
Lk5FQVJFU1QpOworCisgIHZhciBidWYgPSBuZXcgVWludDhBcnJheSh3aWR0aCAqIGhlaWdodCAq
IDQpOworCisgIGRlYnVnKCIiKTsKKyAgZGVidWcoImNoZWNrIHBpeGVscyBhcmUgTk9UIHByZS1t
dWx0aXBsaWVkIik7CisgIGdsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgZ2wuUkdCLCBn
bC5SR0IsIGdsLlVOU0lHTkVEX0JZVEUsCisgICAgICAgICAgICAgICAgaW1nc1sncmVzb3VyY2Vz
L3plcm8tYWxwaGEucG5nJ10pOworICBnbEVycm9yU2hvdWxkQmUoZ2wsIGdsLk5PX0VSUk9SLCAi
U2hvdWxkIGJlIG5vIGVycm9ycyBmcm9tIHNldHVwIik7CisgIHd0dS5kcmF3UXVhZChnbCk7Cisg
IGdsLnJlYWRQaXhlbHMoMCwgMCwgd2lkdGgsIGhlaWdodCwgZ2wuUkdCQSwgZ2wuVU5TSUdORURf
QllURSwgYnVmKTsKKworICB2YXIgbGVmdCA9IDA7CisgIHZhciBtaWRkbGUgPSBNYXRoLmZsb29y
KHdpZHRoIC8gMik7CisgIHZhciByaWdodCA9IHdpZHRoIC0gMTsKKyAgdmFyIGJvdHRvbSA9IDA7
CisgIHZhciBjZW50ZXIgPSBNYXRoLmZsb29yKGhlaWdodCAvIDIpOworICB2YXIgdG9wID0gaGVp
Z2h0IC0gMTsKKyAgY2hlY2tQaXhlbChidWYsIGxlZnQsICAgdG9wLCAgICBbICAwLCAgIDAsICAg
MCwgMjU1XSk7CisgIGNoZWNrUGl4ZWwoYnVmLCBtaWRkbGUsIHRvcCwgICAgWzI1NSwgICAwLCAy
NTUsIDI1NV0pOworICBjaGVja1BpeGVsKGJ1ZiwgcmlnaHQsICB0b3AsICAgIFsgIDAsICAgMCwg
MjU1LCAyNTVdKTsKKyAgY2hlY2tQaXhlbChidWYsIGxlZnQsICAgY2VudGVyLCBbMTI4LCAxMjgs
IDEyOCwgMjU1XSk7CisgIGNoZWNrUGl4ZWwoYnVmLCBtaWRkbGUsIGNlbnRlciwgWzI1NSwgMjU1
LCAyNTUsIDI1NV0pOworICBjaGVja1BpeGVsKGJ1ZiwgcmlnaHQsICBjZW50ZXIsIFsgIDAsIDI1
NSwgMjU1LCAyNTVdKTsKKyAgY2hlY2tQaXhlbChidWYsIGxlZnQsICAgYm90dG9tLCBbMjU1LCAg
IDAsICAgMCwgMjU1XSk7CisgIGNoZWNrUGl4ZWwoYnVmLCBtaWRkbGUsIGJvdHRvbSwgWzI1NSwg
MjU1LCAgIDAsIDI1NV0pOworICBjaGVja1BpeGVsKGJ1ZiwgcmlnaHQsICBib3R0b20sIFsgIDAs
IDI1NSwgICAwLCAyNTVdKTsKKworICBkZWJ1ZygiIik7CisgIGRlYnVnKCJjaGVjayBxdWFudGl6
YXRpb24iKTsKKyAgdmFyIHF1YW50SW5mbyA9IFsKKyAgICB7Zm9ybWF0OiBnbC5SR0JBLCB0eXBl
OiBnbC5VTlNJR05FRF9CWVRFLCAgICAgICAgICBjb3VudHM6IFsyNTYsIDI1NiwgMjU2LCAyNTZd
fSwKKyAgICB7Zm9ybWF0OiBnbC5SR0JBLCB0eXBlOiBnbC5VTlNJR05FRF9TSE9SVF80XzRfNF80
LCBjb3VudHM6IFsgMTYsICAxNiwgIDE2LCAgMTZdfSwKKyAgICB7Zm9ybWF0OiBnbC5SR0IsICB0
eXBlOiBnbC5VTlNJR05FRF9TSE9SVF81XzZfNSwgICBjb3VudHM6IFsgMzIsICA2NCwgIDMyLCAg
IDFdfSwKKyAgICB7Zm9ybWF0OiBnbC5SR0JBLCB0eXBlOiBnbC5VTlNJR05FRF9TSE9SVF81XzVf
NV8xLCBjb3VudHM6IFsgMzIsICAzMiwgIDMyLCAgIDJdfV07CisgIGZvciAodmFyIHFxID0gMDsg
cXEgPCBxdWFudEluZm8ubGVuZ3RoOyArK3FxKSB7CisgICAgdmFyIGluZm8gPSBxdWFudEluZm9b
cXFdOworICAgIGdsLnRleEltYWdlMkQoCisgICAgICAgIGdsLlRFWFRVUkVfMkQsIDAsIGluZm8u
Zm9ybWF0LCBpbmZvLmZvcm1hdCwgaW5mby50eXBlLAorICAgICAgICBpbWdzWydyZXNvdXJjZXMv
Z3JheS1yYW1wLTI1Ni5wbmcnXSk7CisgICAgZ2xFcnJvclNob3VsZEJlKGdsLCBnbC5OT19FUlJP
UiwgIlNob3VsZCBiZSBubyBlcnJvcnMgZnJvbSBzZXR1cC4iKTsKKyAgICB3dHUuZHJhd1F1YWQo
Z2wpOworICAgIGdsLnJlYWRQaXhlbHMoMCwgMCwgd2lkdGgsIGhlaWdodCwgZ2wuUkdCQSwgZ2wu
VU5TSUdORURfQllURSwgYnVmKTsKKyAgICB2YXIgY291bnRzID0gW3sgfSwgeyB9LCB7IH0sIHsg
fV07CisgICAgdmFyIG51bVVuaXF1ZVZhbHVlcyA9IFswLCAwLCAwLCAwXTsKKyAgICAvLyBDb3Vu
dCB0aGUgbnVtYmVyIG9mIHVuaXF1ZSB2YWx1ZXMgaW4gZWFjaCBjaGFubmVsLgorICAgIGZvciAo
dmFyIGlpID0gMDsgaWkgPCB3aWR0aCAqIGhlaWdodCAqIDQ7IGlpICs9IDQpIHsKKyAgICAgIGZv
ciAodmFyIGpqID0gMDsgamogPCA0OyArK2pqKSB7CisgICAgICAgIHZhciB2ID0gYnVmW2lpICsg
ampdOworICAgICAgICBpZiAoIWNvdW50c1tqal1bdl0pIHsKKyAgICAgICAgICBjb3VudHNbampd
W3ZdID0gMTsKKyAgICAgICAgICArK251bVVuaXF1ZVZhbHVlc1tqal07CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgKytjb3VudHNbampdW3ZdOworICAgICAgICB9CisgICAgICB9CisgICAg
fQorICAgIGZvciAodmFyIGlpID0gMDsgaWkgPCA0OyArK2lpKSB7CisgICAgICBhc3NlcnRNc2co
bnVtVW5pcXVlVmFsdWVzW2lpXSA9PSBpbmZvLmNvdW50c1tpaV0sCisgICAgICAgICAgICAgICAg
IlRoZXJlIHNob3VsZCBiZSAiICsgaW5mby5jb3VudHNbaWldICsKKyAgICAgICAgICAgICAgICAi
IHVuaXF1ZSB2YWx1ZXMgaW4gY2hhbm5lbCAiICsgaWkgKyAiLiBGb3VuZCAiICsKKyAgICAgICAg
ICAgICAgICBudW1VbmlxdWVWYWx1ZXNbaWldKTsKKyAgICB9CisgIH0KKworLy8gRklYTUUoem1v
KTogZml4IHRoZSBnYW1tYSBjb3JyZWN0aW9uIGFuZCBhZGQgYmFjayB0aGUgY29tbWVudGVkIG91
dCB0ZXN0cyBiZWxvdy4KKy8qCisgIGRlYnVnKCIiKTsKKyAgZGVidWcoIkNoZWNrIHRoYXQgZ2Ft
bWEgc2V0dGluZ3MgZG9uJ3QgZWZmZWN0IDhiaXQgcG5ncyIpOworICBnbC50ZXhJbWFnZTJEKGds
LlRFWFRVUkVfMkQsIDAsIGdsLlJHQiwgZ2wuUkdCLCBnbC5VTlNJR05FRF9CWVRFLAorICAgICAg
ICAgICAgICAgIGltZ3NbJ3Jlc291cmNlcy9ncmF5LXJhbXAtZGVmYXVsdC1nYW1tYS5wbmcnXSk7
CisgIGdsRXJyb3JTaG91bGRCZShnbCwgZ2wuTk9fRVJST1IsICJTaG91bGQgYmUgbm8gZXJyb3Jz
IGZyb20gc2V0dXAuIik7CisgIHd0dS5kcmF3UXVhZChnbCk7CisgIHZhciByZWYgPSBuZXcgVWlu
dDhBcnJheSh3aWR0aCAqIGhlaWdodCAqIDQpOworICBnbC5yZWFkUGl4ZWxzKDAsIDAsIHdpZHRo
LCBoZWlnaHQsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIHJlZik7CisKKyAgdmFyIGdhbW1h
SW1hZ2VzID0gWworICAgICdyZXNvdXJjZXMvZ3JheS1yYW1wLWdhbW1hMC4xLnBuZycsCisgICAg
J3Jlc291cmNlcy9ncmF5LXJhbXAtZ2FtbWExLjAucG5nJywKKyAgICAncmVzb3VyY2VzL2dyYXkt
cmFtcC1nYW1tYTIuMC5wbmcnLAorICAgICdyZXNvdXJjZXMvZ3JheS1yYW1wLWdhbW1hNC4wLnBu
ZycsCisgICAgJ3Jlc291cmNlcy9ncmF5LXJhbXAtZ2FtbWE5LjAucG5nJ107CisgIGZvciAodmFy
IGlpID0gMDsgaWkgPCBnYW1tYUltYWdlcy5sZW5ndGg7ICsraWkpIHsKKyAgICBnbC50ZXhJbWFn
ZTJEKGdsLlRFWFRVUkVfMkQsIDAsIGdsLlJHQiwgZ2wuUkdCLCBnbC5VTlNJR05FRF9CWVRFLAor
ICAgICAgICAgICAgICAgICAgaW1nc1tnYW1tYUltYWdlc1tpaV1dKTsKKyAgICB3dHUuZHJhd1F1
YWQoZ2wpOworICAgIGdsLnJlYWRQaXhlbHMoMCwgMCwgd2lkdGgsIGhlaWdodCwgZ2wuUkdCQSwg
Z2wuVU5TSUdORURfQllURSwgYnVmKTsKKyAgICB2YXIgc2FtZSA9IHRydWU7CisgICAgZm9yICh2
YXIgamogPSAwOyBqaiA8IHdpZHRoICogaGVpZ2h0ICogNDsgKytqaikgeworICAgICAgaWYgKGJ1
Zltqal0gIT0gcmVmW2pqXSkgeworICAgICAgICBzYW1lID0gZmFsc2U7CisgICAgICAgIGJyZWFr
OworICAgICAgfQorICAgIH0KKyAgICBhc3NlcnRNc2coc2FtZSwgInBpeGVscyBzaG91bGQgYmUg
c2FtZSByZWdhcmRsZXNzIG9mIGdhbW1hIHNldHRpbmdzLiIpOworICB9CisKKyAgZGVidWcoIiIp
OworICBkZWJ1ZygiY2hlY2sgcGl4ZWxzIGFyZSBVTiBwcmUtbXVsdGlwbGllZCIpOworICB2YXIg
Y2FudmFzMmQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTsKKyAgY2FudmFzMmQu
d2lkdGggPSAyNTY7CisgIGNhbnZhczJkLmhlaWdodCA9IDE7CisgIC8vY2FudmFzMmQuc3R5bGUu
aGVpZ2h0ID0gIjQwcHgiOworICAvL3ZhciBkZXNjcmlwdGlvbiA9IGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCJkZXNjcmlwdGlvbiIpOworICAvL2Rlc2NyaXB0aW9uLmFwcGVuZENoaWxkKGNhbnZh
czJkKTsKKyAgdmFyIGN0eCA9IGNhbnZhczJkLmdldENvbnRleHQoIjJkIik7CisgIGN0eC5maWxs
UmVjdCgwLCAwLCAyNTYsIDEpOworICBjdHguZHJhd0ltYWdlKGltZ3NbJ3Jlc291cmNlcy9ncmF5
LXJhbXAtMjU2LXdpdGgtMTI4LWFscGhhLnBuZyddLCAwLCAwKTsKKyAgZ2wudGV4SW1hZ2UyRChn
bC5URVhUVVJFXzJELCAwLCBnbC5SR0IsIGdsLlJHQiwgZ2wuVU5TSUdORURfQllURSwgY2FudmFz
MmQpOworICBnbEVycm9yU2hvdWxkQmUoZ2wsIGdsLk5PX0VSUk9SLCAiU2hvdWxkIGJlIG5vIGVy
cm9ycyBmcm9tIHNldHVwLiIpOworICB3dHUuZHJhd1F1YWQoZ2wpOworICB2YXIgcmVmID0gbmV3
IFVpbnQ4QXJyYXkod2lkdGggKiBoZWlnaHQgKiA0KTsKKyAgZ2wucmVhZFBpeGVscygwLCAwLCB3
aWR0aCwgaGVpZ2h0LCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCByZWYpOworICB2YXIgbHQx
MjhDb3VudCA9IFswLCAwLCAwXTsKKyAgdmFyIGdlMTI4Q291bnQgPSBbMCwgMCwgMF07CisgIGZv
ciAodmFyIGpqID0gMDsgamogPCB3aWR0aDsgKytqaikgeworICAgIHZhciBvZmYgPSBqaiAqIDQ7
CisgICAgZm9yICh2YXIgY2MgPSAwOyBjYyA8IDM7ICsrY2MpIHsKKyAgICAgIGlmIChidWZbb2Zm
ICsgY2NdIDwgMTI4KSB7CisgICAgICAgICsrbHQxMjhDb3VudFtjY107CisgICAgICB9IGVsc2Ug
eworICAgICAgICArK2dlMTI4Q291bnRbY2NdOworICAgICAgfQorICAgIH0KKyAgfQorICAvLyBO
b3Qgc3VyZSB0aGUgZXhhY3QgY291bnQgaGVyZSBiZWNhdXNlIGdhbW1hIGRvZXMgZWZmZWN0IGRy
YXdpbmcgaW50byB0aGUKKyAgLy8gY2FudmFzIGJ1dCBpdCBzaG91bGQgYmUgY2xvc2UgdG8gNTAl
IHNvIEknbGwgcGFzcyA0NSUKKyAgZm9yICh2YXIgamogPSAwOyBqaiA8IDM7ICsramopIHsKKyAg
ICBhc3NlcnRNc2coZ2UxMjhDb3VudFtqal0gPiAyNTYgKiAwLjQ1LAorICAgICAgICAgICAgICAi
SGFsZiB0aGUgcGl4ZWxzIGluIGNoYW5uZWwgIiArIGpqICsKKyAgICAgICAgICAgICAgIiBzaG91
bGQgYmUgPj0gMTI4LDEyOCwxMjguIGZvdW5kICIgKworICAgICAgICAgICAgICAoKGdlMTI4Q291
bnRbampdIC8gMjU2KSAqIDEwMCkudG9GaXhlZCgpICsgIiUiKTsKKyAgICBhc3NlcnRNc2cobHQx
MjhDb3VudFtqal0gPiAyNTYgKiAwLjQ1LAorICAgICAgICAgICAgICAiSGFsZiB0aGUgcGl4ZWxz
IGluIGNoYW5uZWwgIiArIGpqICsKKyAgICAgICAgICAgICAgIiBzaG91bGQgYmUgPCAxMjgsMTI4
LDEyOC4gZm91bmQgIiArCisgICAgICAgICAgICAgICgobHQxMjhDb3VudFtqal0gLyAyNTYpICog
MTAwKS50b0ZpeGVkKCkgKyAiJSIpOworICB9CisqLworCisgIGRlYnVnKCIiKTsKKyAgZGVidWco
ImNoZWNrIHBpeGVscyBhcmUgcHJlLW11bHRpcGxpZWQiKTsKKyAgZ2wucGl4ZWxTdG9yZWkoZ2wu
VU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMLCB0cnVlKTsKKyAgLy8gVE9ETyhnbWFuKTog
dXNlIGRpZmZlcmVudCB0ZXh0dXJlIHRoYXQgd29uJ3QgcGFzcyBvbiBmYWlsdXJlCisgIGdsLnRl
eEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgZ2wuUkdCQSwgZ2wuUkdCQSwgZ2wuVU5TSUdORURf
QllURSwKKyAgICAgICAgICAgICAgICBpbWdzWydyZXNvdXJjZXMvemVyby1hbHBoYS5wbmcnXSk7
CisgIGdsRXJyb3JTaG91bGRCZShnbCwgZ2wuTk9fRVJST1IsICJTaG91bGQgYmUgbm8gZXJyb3Jz
IGZyb20gc2V0dXAiKTsKKyAgd3R1LmRyYXdRdWFkKGdsKTsKKyAgZ2wucmVhZFBpeGVscygwLCAw
LCB3aWR0aCwgaGVpZ2h0LCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCBidWYpOworCisgIHZh
ciBzYW1lID0gdHJ1ZTsKKyAgZm9yICh2YXIgamogPSAwOyBqaiA8IHdpZHRoICogaGVpZ2h0ICog
NDsgKytqaikgeworICAgIGlmIChidWZbampdICE9IDApIHsKKyAgICAgIHNhbWUgPSBmYWxzZTsK
KyAgICAgIGJyZWFrOworICAgIH0KKyAgfQorICBhc3NlcnRNc2coc2FtZSwgInBpeGVscyBzaG91
bGQgYWxsIGJlIDAuIik7CisKKyAgZGVidWcoIiIpOworICBkZWJ1ZygiY2hlY2sgcGl4ZWxzIGFy
ZSBmbGlwcGVkIik7CisgIGdsLnBpeGVsU3RvcmVpKGdsLlVOUEFDS19QUkVNVUxUSVBMWV9BTFBI
QV9XRUJHTCwgZmFsc2UpOworICBnbC5waXhlbFN0b3JlaShnbC5VTlBBQ0tfRkxJUF9ZX1dFQkdM
LCB0cnVlKTsKKyAgZ2wudGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCBnbC5SR0IsIGdsLlJH
QiwgZ2wuVU5TSUdORURfQllURSwKKyAgICAgICAgICAgICAgICBpbWdzWydyZXNvdXJjZXMvM3gz
LnBuZyddKTsKKyAgZ2xFcnJvclNob3VsZEJlKGdsLCBnbC5OT19FUlJPUiwgIlNob3VsZCBiZSBu
byBlcnJvcnMgZnJvbSBzZXR1cCIpOworICB3dHUuZHJhd1F1YWQoZ2wpOworICBnbC5yZWFkUGl4
ZWxzKDAsIDAsIHdpZHRoLCBoZWlnaHQsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIGJ1Zik7
CisKKyAgY2hlY2tQaXhlbChidWYsIGxlZnQsICAgdG9wLCAgICBbMjU1LCAgIDAsICAgMCwgMjU1
XSk7CisgIGNoZWNrUGl4ZWwoYnVmLCBtaWRkbGUsIHRvcCwgICAgWzI1NSwgMjU1LCAgIDAsIDI1
NV0pOworICBjaGVja1BpeGVsKGJ1ZiwgcmlnaHQsICB0b3AsICAgIFsyNTUsICAgMCwgICAwLCAy
NTVdKTsKKyAgY2hlY2tQaXhlbChidWYsIGxlZnQsICAgY2VudGVyLCBbMjU1LCAgIDAsIDI1NSwg
MjU1XSk7CisgIGNoZWNrUGl4ZWwoYnVmLCBtaWRkbGUsIGNlbnRlciwgWzI1NSwgICAwLCAgIDAs
IDI1NV0pOworICBjaGVja1BpeGVsKGJ1ZiwgcmlnaHQsICBjZW50ZXIsIFsgIDAsIDI1NSwgICAw
LCAyNTVdKTsKKyAgY2hlY2tQaXhlbChidWYsIGxlZnQsICAgYm90dG9tLCBbICAwLCAgIDAsICAg
MCwgMjU1XSk7CisgIGNoZWNrUGl4ZWwoYnVmLCBtaWRkbGUsIGJvdHRvbSwgWyAgMCwgICAwLCAy
NTUsIDI1NV0pOworICBjaGVja1BpeGVsKGJ1ZiwgcmlnaHQsICBib3R0b20sIFsyNTUsICAgMCwg
ICAwLCAyNTVdKTsKKworICBnbEVycm9yU2hvdWxkQmUoZ2wsIGdsLk5PX0VSUk9SLCAiU2hvdWxk
IGJlIG5vIGVycm9ycyIpOworCisgIGRlYnVnKCIiKTsKKyAgc3VjY2Vzc2Z1bGx5UGFyc2VkID0g
dHJ1ZTsKKyAgc2hvdWxkQmVUcnVlKCJzdWNjZXNzZnVsbHlQYXJzZWQiKTsKKyAgZGVidWcoJzxi
ciAvPjxzcGFuIGNsYXNzPSJwYXNzIj5URVNUIENPTVBMRVRFPC9zcGFuPicpOworICBub3RpZnlG
aW5pc2hlZFRvSGFybmVzcygpOworfQorPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CisKSW5k
ZXg6IExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3Jlc291cmNlcy93ZWJnbC10ZXN0LXV0
aWxzLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3Jlc291
cmNlcy93ZWJnbC10ZXN0LXV0aWxzLmpzCShyZXZpc2lvbiA2NTk1MCkKKysrIExheW91dFRlc3Rz
L2Zhc3QvY2FudmFzL3dlYmdsL3Jlc291cmNlcy93ZWJnbC10ZXN0LXV0aWxzLmpzCSh3b3JraW5n
IGNvcHkpCkBAIC0yOSw2ICsyOSwyMCBAQCB2YXIgZXJyb3IgPSBmdW5jdGlvbihtc2cpIHsKICAg
fQogfTsKIAorLyoqCisgKiBDb252ZXJ0cyBhIFdlYkdMIGVudW0gdG8gYSBzdHJpbmcKKyAqIEBw
YXJhbSB7IVdlYkdMQ29udGV4dH0gZ2wgVGhlIFdlYkdMQ29udGV4dCB0byB1c2UuCisgKiBAcGFy
YW0ge251bWJlcn0gdmFsdWUgVGhlIGVudW0gdmFsdWUuCisgKiBAcmV0dXJuIHtzdHJpbmd9IFRo
ZSBlbnVtIGFzIGEgc3RyaW5nLgorICovCit2YXIgZ2xFbnVtVG9TdHJpbmcgPSBmdW5jdGlvbihn
bCwgdmFsdWUpIHsKKyAgZm9yICh2YXIgcCBpbiBnbCkgeworICAgIGlmIChnbFtwXSA9PSB2YWx1
ZSkgeworICAgICAgcmV0dXJuIHA7CisgICAgfQorICB9CisgIHJldHVybiAiMHgiICsgdmFsdWUu
dG9TdHJpbmcoMTYpOworfTsKIAogdmFyIGxhc3RFcnJvciA9ICIiOwogCkBAIC0xMTAsMTkgKzEy
NCwyMSBAQCB2YXIgc2V0dXBTaW1wbGVUZXh0dXJlRnJhZ21lbnRTaGFkZXIgPSBmCiAgKiBDcmVh
dGVzIGEgcHJvZ3JhbSwgYXR0YWNoZXMgc2hhZGVycywgYmluZHMgYXR0cmliIGxvY2F0aW9ucywg
bGlua3MgdGhlCiAgKiBwcm9ncmFtIGFuZCBjYWxscyB1c2VQcm9ncmFtLgogICogQHBhcmFtIHsh
QXJyYXkuPCFXZWJHTFNoYWRlcj59IHNoYWRlcnMgVGhlIHNoYWRlcnMgdG8gYXR0YWNoIC4KLSAq
IEBwYXJhbSB7IUFycmF5LjxzdHJpbmc+fSBhdHRyaWJzIFRoZSBhdHRyaWJzIG5hbWVzLgorICog
QHBhcmFtIHshQXJyYXkuPHN0cmluZz59IG9wdF9hdHRyaWJzIFRoZSBhdHRyaWJzIG5hbWVzLgog
ICogQHBhcmFtIHshQXJyYXkuPG51bWJlcj59IG9wdF9sb2NhdGlvbnMgVGhlIGxvY2F0aW9ucyBm
b3IgdGhlIGF0dHJpYnMuCiAgKi8KLXZhciBzZXR1cFByb2dyYW0gPSBmdW5jdGlvbihnbCwgc2hh
ZGVycywgYXR0cmlicywgb3B0X2xvY2F0aW9ucykgewordmFyIHNldHVwUHJvZ3JhbSA9IGZ1bmN0
aW9uKGdsLCBzaGFkZXJzLCBvcHRfYXR0cmlicywgb3B0X2xvY2F0aW9ucykgewogICB2YXIgcHJv
Z3JhbSA9IGdsLmNyZWF0ZVByb2dyYW0oKTsKICAgZm9yICh2YXIgaWkgPSAwOyBpaSA8IHNoYWRl
cnMubGVuZ3RoOyArK2lpKSB7CiAgICAgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIHNoYWRlcnNb
aWldKTsKICAgfQotICBmb3IgKHZhciBpaSA9IDA7IGlpIDwgYXR0cmlicy5sZW5ndGg7ICsraWkp
IHsKLSAgICBnbC5iaW5kQXR0cmliTG9jYXRpb24oCi0gICAgICAgIHByb2dyYW0sCi0gICAgICAg
IG9wdF9sb2NhdGlvbnMgPyBvcHRfbG9jYXRpb25zW2lpXSA6IGlpLAotICAgICAgICBhdHRyaWJz
W2lpXSk7CisgIGlmIChvcHRfYXR0cmlicykgeworICAgIGZvciAodmFyIGlpID0gMDsgaWkgPCBv
cHRfYXR0cmlicy5sZW5ndGg7ICsraWkpIHsKKyAgICAgIGdsLmJpbmRBdHRyaWJMb2NhdGlvbigK
KyAgICAgICAgICBwcm9ncmFtLAorICAgICAgICAgIG9wdF9sb2NhdGlvbnMgPyBvcHRfbG9jYXRp
b25zW2lpXSA6IGlpLAorICAgICAgICAgIG9wdF9hdHRyaWJzW2lpXSk7CisgICAgfQogICB9CiAg
IGdsLmxpbmtQcm9ncmFtKHByb2dyYW0pOwogCkBAIC04MTMsNiArODI5LDcgQEAgcmV0dXJuIHsK
ICAgZHJhd1F1YWQ6IGRyYXdRdWFkLAogICBlbmRzV2l0aDogZW5kc1dpdGgsCiAgIGdldExhc3RF
cnJvcjogZ2V0TGFzdEVycm9yLAorICBnbEVudW1Ub1N0cmluZzogZ2xFbnVtVG9TdHJpbmcsCiAg
IGdsRXJyb3JTaG91bGRCZTogZ2xFcnJvclNob3VsZEJlLAogICBmaWxsVGV4dHVyZTogZmlsbFRl
eHR1cmUsCiAgIGxvYWRJbWFnZUFzeW5jOiBsb2FkSW1hZ2VBc3luYywKSW5kZXg6IExheW91dFRl
c3RzL3BsYXRmb3JtL2Nocm9taXVtL3Rlc3RfZXhwZWN0YXRpb25zLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS90ZXN0X2V4cGVjdGF0aW9ucy50eHQJKHJl
dmlzaW9uIDY1OTUwKQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vdGVzdF9leHBl
Y3RhdGlvbnMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0yNTgzLDYgKzI1ODMsOSBAQCBCVUdXSzM3
Mjk3IDogZmFzdC9oaXN0b3J5L3NpYmxpbmctdmlzaXRlCiBCVUdXSzM2OTgzIE1BQyA6IGZhc3Qv
Y2FudmFzL3dlYmdsL251bGwtb2JqZWN0LWJlaGF2aW91ci5odG1sID0gVEVYVAogQlVHV0szNjk4
MyBNQUMgOiBmYXN0L2NhbnZhcy93ZWJnbC91bmlmb3JtLWxvY2F0aW9uLmh0bWwgPSBURVhUCiAK
Ky8vIENhdXNlZCBieSBwcmVtdWx0aXBseWluZyBhbHBoYXMgaW4gQ0cgaW1hZ2UgZGVjb2Rpbmcu
CitCVUc0NDU2NiBNQUMgOiBmYXN0L2NhbnZhcy93ZWJnbC9nbC10ZXhpbWFnZS5odG1sID0gVEVY
VAorCiAvLyBBZGRlZCBpbiBodHRwOi8vdHJhYy53ZWJraXQub3JnL2NoYW5nZXNldC81NzQ3Ni4g
RmFpbHMgaW4gQ2hyb21pdW0gYmVjYXVzZQogLy8gTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNvbXB1
dGVkU3R5bGVXaXRoVmlzaXRlZEluZm8oKSBpcyBtaXNzaW5nLgogQlVHNDEyMDYgOiBmYXN0L2hp
c3RvcnkvbXVsdGlwbGUtY2xhc3Nlcy12aXNpdGVkLmh0bWwgPSBURVhUIFRJTUVPVVQKSW5kZXg6
IExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9Ta2lwcGVkCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL3BsYXRmb3JtL21hYy9Ta2lwcGVkCShyZXZpc2lvbiA2NTk1MCkKKysrIExheW91dFRlc3Rz
L3BsYXRmb3JtL21hYy9Ta2lwcGVkCSh3b3JraW5nIGNvcHkpCkBAIC0yOTIsMyArMjkyLDYgQEAg
YW5pbWF0aW9ucy9wbGF5LXN0YXRlLmh0bWwKIAogIyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NDMzMzIKIGluc3BlY3Rvci9kb20tYnJlYWtwb2ludHMuaHRtbAorCisj
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NDU2NgorZmFzdC9jYW52
YXMvd2ViZ2wvZ2wtdGV4aW1hZ2UuaHRtbApJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMv
d2ViZ2wvcmVzb3VyY2VzLzN4My5wbmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDYW5ub3QgZGlzcGxheTogZmlsZSBt
YXJrZWQgYXMgYSBiaW5hcnkgdHlwZS4Kc3ZuOm1pbWUtdHlwZSA9IGFwcGxpY2F0aW9uL29jdGV0
LXN0cmVhbQoKUHJvcGVydHkgY2hhbmdlcyBvbjogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2Vi
Z2wvcmVzb3VyY2VzLzN4My5wbmcKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOm1pbWUtdHlwZQogICAr
IGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQoKCmlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBTUFB
QUFEQ0FJQUFBRFpTaUxvQUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUsKVDJsRFExQlFh
RzkwYjNOb2IzQWdTVU5ESUhCeWIyWnBiR1VBQUhqYW5WTm5WRlBwRmozMzN2UkNTNGlBbEV0dlVo
VUlJRkpDaTRBVQprU1lxSVFrUVNvZ2hvZGtWVWNFUlJVVUVHOGlnaUFPT2pvQ01GVkVzRElvSzJB
ZmtJYUtPZzZPSWlzcjc0WHVqYTlhODkrYk4vclhYClB1ZXM4NTJ6endmQUNBeVdTRE5STllBTXFV
SWVFZUNEeDhURzRlUXVRSUVLSkhBQUVBaXpaQ0Z6L1NNQkFQaCtQRHdySXNBSHZnQUIKZU5NTENB
REFUWnZBTUJ5SC93L3FRcGxjQVlDRUFjQjBrVGhMQ0lBVUFFQjZqa0ttQUVCR0FZQ2RtQ1pUQUtB
RUFHRExZMkxqQUZBdApBR0FuZitiVEFJQ2QrSmw3QVFCYmxDRVZBYUNSQUNBVFpZaEVBR2c3QUt6
UFZvcEZBRmd3QUJSbVM4UTVBTmd0QURCSlYyWklBTEMzCkFNRE9FQXV5QUFnTUFEQlJpSVVwQUFS
N0FHRElJeU40QUlTWkFCUkc4bGM4OFN1dUVPY3FBQUI0bWJJOHVTUTVSWUZiQ0MxeEIxZFgKTGg0
b3pra1hLeFEyWVFKaG1rQXV3bm1aR1RLQk5BL2c4OHdBQUtDUkZSSGdnL1A5ZU00T3JzN09ObzYy
RGw4dDZyOEcveUppWXVQKwo1YytyY0VBQUFPRjBmdEgrTEMrekdvQTdCb0J0L3FJbDdnUm9YZ3Vn
ZGZlTFpySVBRTFVBb09uYVYvTncrSDQ4UEVXaGtMbloyZVhrCjVOaEt4RUpiWWNwWGZmNW53bC9B
Vi8xcytYNDgvUGYxNEw3aUpJRXlYWUZIQlBqZ3dzejBUS1VjejVJSmhHTGM1bzlIL0xjTC8vd2QK
MHlMRVNXSzVXQ29VNDFFU2NZNUVtb3p6TXFVaWlVS1NLY1VsMHY5azR0OHMrd00rM3pVQXNHbytB
WHVSTGFoZFl3UDJTeWNRV0hUQQo0dmNBQVBLN2I4SFVLQWdEZ0dpRDRjOTMvKzgvL1VlZ0pRQ0Fa
a21TY1FBQVhrUWtMbFRLc3ovSENBQUFSS0NCS3JCQkcvVEJHQ3pBCkJoekJCZHpCQy94Z05vUkNK
TVRDUWhCQ0NtU0FISEpnS2F5Q1FpaUd6YkFkS21BdjFFQWROTUJSYUlhVGNBNHV3bFc0RGoxd0Qv
cGgKQ0o3QktMeUJDUVJCeUFnVFlTSGFpQUZpaWxnampnZ1htWVg0SWNGSUJCS0xKQ0RKaUJSUklr
dVJOVWd4VW9wVUlGVklIZkk5Y2dJNQpoMXhHdXBFN3lBQXlndnlHdkVjeGxJR3lVVDNVRExWRHVh
ZzNHb1JHb2d2UVpIUXhtbzhXb0p2UWNyUWFQWXcyb2VmUXEyZ1AybzgrClE4Y3d3T2dZQnpQRWJE
QXV4c05Dc1Rnc0NaTmp5N0VpckF5cnhocXdWcXdEdTRuMVk4K3hkd1FTZ1VYQUNUWUVkMElnWVI1
QlNGaE0KV0U3WVNLZ2dIQ1EwRWRvSk53a0RoRkhDSnlLVHFFdTBKcm9SK2NRWVlqSXhoMWhJTENQ
V0VvOFRMeEI3aUVQRU55UVNpVU15SjdtUQpBa214cEZUU0V0SkcwbTVTSStrc3FaczBTQm9qazhu
YVpHdXlCem1VTENBcnlJWGtuZVRENURQa0crUWg4bHNLbldKQWNhVDRVK0lvClVzcHFTaG5sRU9V
MDVRWmxtREpCVmFPYVV0Mm9vVlFSTlk5YVFxMmh0bEt2VVllb0V6UjFtam5OZ3haSlM2V3RvcFhU
R21nWGFQZHAKcitoMHVoSGRsUjVPbDlCWDBzdnBSK2lYNkFQMGR3d05oaFdEeDRobktCbWJHQWNZ
WnhsM0dLK1lUS1laMDRzWngxUXdOekhybU9lWgpENWx2VlZncXRpcDhGWkhLQ3BWS2xTYVZHeW92
VkttcXBxcmVxZ3RWODFYTFZJK3BYbE45cmtaVk0xUGpxUW5VbHF0VnFwMVE2MU1iClUyZXBPNmlI
cW1lb2IxUS9wSDVaL1lrR1djTk13MDlEcEZHZ3NWL2p2TVlnQzJNWnMzZ3NJV3NOcTRaMWdUWEVK
ckhOMlh4MktydVkKL1IyN2l6MnFxYUU1UXpOS00xZXpVdk9VWmo4SDQ1aHgrSngwVGdubktLZVg4
MzZLM2hUdktlSXBHNlkwVExreFpWeHJxcGFYbGxpcgpTS3RScTBmcnZUYXU3YWVkcHIxRnUxbjdn
UTVCeDBvblhDZEhaNC9PQlozblU5bFQzYWNLcHhaTlBUcjFyaTZxYTZVYm9idEVkNzl1CnArNllu
cjVlZ0o1TWI2ZmVlYjNuK2h4OUwvMVUvVzM2cC9WSERGZ0dzd3drQnRzTXpoZzh4VFZ4Ynp3ZEw4
ZmI4VkZEWGNOQVE2VmgKbFdHWDRZU1J1ZEU4bzlWR2pVWVBqR25HWE9NazQyM0diY2FqSmdZbUlT
WkxUZXBON3BwU1RibW1LYVk3VER0TXg4M016YUxOMXBrMQptejB4MXpMbm0rZWIxNXZmdDJCYWVG
b3N0cWkydUdWSnN1UmFwbG51dHJ4dWhWbzVXYVZZVlZwZHMwYXRuYTBsMXJ1dHU2Y1JwN2xPCmsw
NnJudFpudzdEeHRzbTJxYmNac09YWUJ0dXV0bTIyZldGblloZG50OFd1dys2VHZaTjl1bjJOL1Qw
SERZZlpEcXNkV2gxK2M3UnkKRkRwV090NmF6cHp1UDMzRjlKYnBMMmRZenhEUDJEUGp0aFBMS2NS
cG5WT2IwMGRuRjJlNWM0UHppSXVKUzRMTExwYytMcHNieHQzSQp2ZVJLZFBWeFhlRjYwdldkbTdP
Ynd1Mm8yNi91TnU1cDdvZmNuOHcwbnltZVdUTnowTVBJUStCUjVkRS9DNStWTUd2ZnJINVBRMCtC
Clo3WG5JeTlqTDVGWHJkZXd0NlYzcXZkaDd4Yys5ajV5bitNKzR6dzMzakxlV1YvTU44QzN5TGZM
VDhOdm5sK0YzME4vSS85ay8zci8KMFFDbmdDVUJad09KZ1VHQld3TDcrSHA4SWIrT1B6cmJaZmF5
MmUxQmpLQzVRUlZCajRLdGd1WEJyU0ZveU95UXJTSDM1NWpPa2M1cApEb1ZRZnVqVzBBZGg1bUdM
dzM0TUo0V0hoVmVHUDQ1d2lGZ2EwVEdYTlhmUjNFTnozMFQ2UkpaRTNwdG5NVTg1cnkxS05Tbytx
aTVxClBObzN1alM2UDhZdVpsbk0xVmlkV0Vsc1N4dzVMaXF1Tm01c3Z0Lzg3Zk9INHAzaUMrTjdG
NWd2eUYxd2VhSE93dlNGcHhhcExoSXMKT3BaQVRJaE9PSlR3UVJBcXFCYU1KZklUZHlXT0NubkNI
Y0puSWkvUk50R0kyRU5jS2g1TzhrZ3FUWHFTN0pHOE5Ya2t4VE9sTE9XNQpoQ2Vwa0x4TURVemRt
enFlRnBwMklHMHlQVHE5TVlPU2taQnhRcW9oVFpPMlorcG41bVoyeTZ4bGhiTCt4VzZMdHk4ZWxR
ZkphN09RCnJBVlpMUXEyUXFib1ZGb28xeW9Ic21kbFYyYS96WW5LT1phcm5pdk43Y3l6eXR1UU41
enZuLy90RXNJUzRaSzJwWVpMVnkwZFdPYTkKckdvNXNqeHhlZHNLNHhVRks0WldCcXc4dUlxMktt
M1ZUNnZ0VjVldWZyMG1lazFyZ1Y3QnlvTEJ0UUZyNnd0VkN1V0ZmZXZjMSsxZApUMWd2V2QrMVlm
cUduUnMrRlltS3JoVGJGNWNWZjlnbzNIamxHNGR2eXIrWjNKUzBxYXZFdVdUUFp0Sm02ZWJlTFo1
YkRwYXFsK2FYCkRtNE4yZHEwRGQ5V3RPMzE5a1hiTDVmTktOdTdnN1pEdWFPL1BMaThaYWZKenMw
N1AxU2tWUFJVK2xRMjd0TGR0V0hYK0c3UjdodDcKdlBZMDdOWGJXN3ozL1Q3SnZ0dFZBVlZOMVdi
VlpmdEorN1AzUDY2SnF1bjRsdnR0WGExT2JYSHR4d1BTQS8wSEl3NjIxN25VMVIzUwpQVlJTajlZ
cjYwY094eCsrL3AzdmR5ME5OZzFWalp6RzRpTndSSG5rNmZjSjMvY2VEVHJhZG94N3JPRUgweDky
SFdjZEwycENtdkthClJwdFRtdnRiWWx1NlQ4dyswZGJxM25yOFI5c2ZENXcwUEZsNVN2TlV5V25h
NllMVGsyZnl6NHlkbFoxOWZpNzUzR0Rib3JaNzUyUE8KMzJvUGIrKzZFSFRoMGtYL2krYzd2RHZP
WFBLNGRQS3kyK1VUVjdoWG1xODZYMjNxZE9vOC9wUFRUOGU3bkx1YXJybGNhN251ZXIyMQplMmIz
NlJ1ZU44N2Q5TDE1OFJiLzF0V2VPVDNkdmZONmIvZkY5L1hmRnQxK2NpZjl6c3U3MlhjbjdxMjhU
N3hmOUVEdFFkbEQzWWZWClAxdiszTmp2M0g5cXdIZWc4OUhjUi9jR2hZUFAvcEgxanc5REJZK1pq
OHVHRFlicm5qZytPVG5pUDNMOTZmeW5RODlrenlhZUYvNmkKL3N1dUZ4WXZmdmpWNjlmTzBaalJv
WmZ5bDVPL2JYeWwvZXJBNnhtdjI4YkN4aDYreVhnek1WNzBWdnZ0d1hmY2R4M3ZvOThQVCtSOApJ
SDhvLzJqNXNmVlQwS2Y3a3htVGsvOEVBNWp6L0dNekxkc0FBQUFnWTBoU1RRQUFlaVVBQUlDREFB
RDUvd0FBZ09rQUFIVXdBQURxCllBQUFPcGdBQUJkdmtsL0ZSZ0FBQUNGSlJFRlVlTm9zeDdFQkFB
QUl3eUQ2LzlGeGtZMkZHT2tEaWdNQUFQLy9Bd0I4MVFmNzQwM2sKUkFBQUFBQkpSVTVFcmtKZ2dn
PT0KCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9yZXNvdXJjZXMvZ3JheS1y
YW1wLTI1Ni13aXRoLTEyOC1hbHBoYS5wbmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDYW5ub3QgZGlzcGxheTogZmls
ZSBtYXJrZWQgYXMgYSBiaW5hcnkgdHlwZS4Kc3ZuOm1pbWUtdHlwZSA9IGFwcGxpY2F0aW9uL29j
dGV0LXN0cmVhbQoKUHJvcGVydHkgY2hhbmdlcyBvbjogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMv
d2ViZ2wvcmVzb3VyY2VzL2dyYXktcmFtcC0yNTYtd2l0aC0xMjgtYWxwaGEucG5nCl9fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X18KQWRkZWQ6IHN2bjptaW1lLXR5cGUKICAgKyBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KCgpp
VkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBUUFBQUFBQkNBWUFBQUF4V1hCM0FBQUFHRWxFUVZRNGpX
TmtZR0JvWUdSa1pCakZvM2dVCmp6d01BUDN1QTM5VEc5dEJBQUFBQUVsRlRrU3VRbUNDCgpJbmRl
eDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvcmVzb3VyY2VzL2dyYXktcmFtcC0yNTYu
cG5nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KQ2Fubm90IGRpc3BsYXk6IGZpbGUgbWFya2VkIGFzIGEgYmluYXJ5IHR5
cGUuCnN2bjptaW1lLXR5cGUgPSBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KClByb3BlcnR5IGNo
YW5nZXMgb246IExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3Jlc291cmNlcy9ncmF5LXJh
bXAtMjU2LnBuZwpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46bWltZS10eXBlCiAgICsgYXBwbGljYXRp
b24vb2N0ZXQtc3RyZWFtCgoKaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQVFBQUFBQUJDQVlBQUFB
eFdYQjNBQUFBRlVsRVFWUTRqV05rWUdCZ1lCd0ZvMkFVakVnQQpBUHB4QS83eFkrQ0dBQUFBQUVs
RlRrU3VRbUNDCgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvcmVzb3VyY2Vz
L2dyYXktcmFtcC1kZWZhdWx0LWdhbW1hLnBuZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNhbm5vdCBkaXNwbGF5OiBm
aWxlIG1hcmtlZCBhcyBhIGJpbmFyeSB0eXBlLgpzdm46bWltZS10eXBlID0gYXBwbGljYXRpb24v
b2N0ZXQtc3RyZWFtCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZh
cy93ZWJnbC9yZXNvdXJjZXMvZ3JheS1yYW1wLWRlZmF1bHQtZ2FtbWEucG5nCl9fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K
QWRkZWQ6IHN2bjpleGVjdXRhYmxlCiAgICsgKgpBZGRlZDogc3ZuOm1pbWUtdHlwZQogICArIGFw
cGxpY2F0aW9uL29jdGV0LXN0cmVhbQoKCmlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFRQUFBQUFC
Q0FZQUFBQXhXWEIzQUFBQVFrbEVRVlI0bkdOa1lHQmdZR1JrWkNSRUV4SkQKWnhQRHh5VkdqQnc5
QVJNVEV4TzU4dGprcUNsR2JUNjl6S1JVakJnNVl1VHBCVWhONTZUa0pXTHpLRFk1QVBLUkEvNHow
UVRtQUFBQQpBRWxGVGtTdVFtQ0MKCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJn
bC9yZXNvdXJjZXMvZ3JheS1yYW1wLWdhbW1hMC4xLnBuZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNhbm5vdCBkaXNw
bGF5OiBmaWxlIG1hcmtlZCBhcyBhIGJpbmFyeSB0eXBlLgpzdm46bWltZS10eXBlID0gYXBwbGlj
YXRpb24vb2N0ZXQtc3RyZWFtCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9mYXN0
L2NhbnZhcy93ZWJnbC9yZXNvdXJjZXMvZ3JheS1yYW1wLWdhbW1hMC4xLnBuZwpfX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
CkFkZGVkOiBzdm46ZXhlY3V0YWJsZQogICArICoKQWRkZWQ6IHN2bjptaW1lLXR5cGUKICAgKyBh
cHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KCgppVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBUUFBQUFB
QkNBWUFBQUF4V1hCM0FBQUFCR2RCVFVFQUFDY1FURmZDVEFBQUFEeEpSRUZVCk9NdGpaQUFDUmlB
Z1JCTVNRMmNUdzhjbFJvd2NQUUVURUpBcmowMk9tbUxVNXRQTFRFckZxQkUzOUFTa3BuTlM4aEt4
ZVJTYkhBRHkKa1FQK3FKVGxkd0FBQUFCSlJVNUVya0pnZ2c9PQoKSW5kZXg6IExheW91dFRlc3Rz
L2Zhc3QvY2FudmFzL3dlYmdsL3Jlc291cmNlcy9ncmF5LXJhbXAtZ2FtbWExLjAucG5nCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KQ2Fubm90IGRpc3BsYXk6IGZpbGUgbWFya2VkIGFzIGEgYmluYXJ5IHR5cGUuCnN2bjpt
aW1lLXR5cGUgPSBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KClByb3BlcnR5IGNoYW5nZXMgb246
IExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3Jlc291cmNlcy9ncmF5LXJhbXAtZ2FtbWEx
LjAucG5nCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjpleGVjdXRhYmxlCiAgICsgKgpBZGRlZDogc3Zu
Om1pbWUtdHlwZQogICArIGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQoKCmlWQk9SdzBLR2dvQUFB
QU5TVWhFVWdBQUFRQUFBQUFCQ0FZQUFBQXhXWEIzQUFBQUJHZEJUVUVBQVlhZ01laVdYd0FBQUR4
SlJFRlUKT010alpBQUNSaUFnUkJNU1EyY1R3OGNsUm93Y1BRRVRFSkFyajAyT21tTFU1dFBMVEVy
RnFCRTM5QVNrcG5OUzhoS3hlUlNiSEFEeQprUVArcUpUbGR3QUFBQUJKUlU1RXJrSmdnZz09CgpJ
bmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvcmVzb3VyY2VzL2dyYXktcmFtcC1n
YW1tYTIuMC5wbmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQpDYW5ub3QgZGlzcGxheTogZmlsZSBtYXJrZWQgYXMgYSBi
aW5hcnkgdHlwZS4Kc3ZuOm1pbWUtdHlwZSA9IGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQoKUHJv
cGVydHkgY2hhbmdlcyBvbjogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvcmVzb3VyY2Vz
L2dyYXktcmFtcC1nYW1tYTIuMC5wbmcKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUK
ICAgKyAqCkFkZGVkOiBzdm46bWltZS10eXBlCiAgICsgYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFt
CgoKaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQVFBQUFBQUJDQVlBQUFBeFdYQjNBQUFBQkdkQlRV
RUFBdzFBU2hIaHlRQUFBRHhKUkVGVQpPTXRqWkFBQ1JpQWdSQk1TUTJjVHc4Y2xSb3djUFFFVEVK
QXJqMDJPbW1MVTV0UExURXJGcUJFMzlBU2twbk5TOGhLeGVSU2JIQUR5CmtRUCtxSlRsZHdBQUFB
QkpSVTVFcmtKZ2dnPT0KCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9yZXNv
dXJjZXMvZ3JheS1yYW1wLWdhbW1hNC4wLnBuZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNhbm5vdCBkaXNwbGF5OiBm
aWxlIG1hcmtlZCBhcyBhIGJpbmFyeSB0eXBlLgpzdm46bWltZS10eXBlID0gYXBwbGljYXRpb24v
b2N0ZXQtc3RyZWFtCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZh
cy93ZWJnbC9yZXNvdXJjZXMvZ3JheS1yYW1wLWdhbW1hNC4wLnBuZwpfX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVk
OiBzdm46ZXhlY3V0YWJsZQogICArICoKQWRkZWQ6IHN2bjptaW1lLXR5cGUKICAgKyBhcHBsaWNh
dGlvbi9vY3RldC1zdHJlYW0KCgppVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBUUFBQUFBQkNBWUFB
QUF4V1hCM0FBQUFCR2RCVFVFQUJocUEwajFsQkFBQUFEeEpSRUZVCk9NdGpaQUFDUmlBZ1JCTVNR
MmNUdzhjbFJvd2NQUUVURUpBcmowMk9tbUxVNXRQTFRFckZxQkUzOUFTa3BuTlM4aEt4ZVJTYkhB
RHkKa1FQK3FKVGxkd0FBQUFCSlJVNUVya0pnZ2c9PQoKSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qv
Y2FudmFzL3dlYmdsL3Jlc291cmNlcy9ncmF5LXJhbXAtZ2FtbWE5LjAucG5nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
Q2Fubm90IGRpc3BsYXk6IGZpbGUgbWFya2VkIGFzIGEgYmluYXJ5IHR5cGUuCnN2bjptaW1lLXR5
cGUgPSBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KClByb3BlcnR5IGNoYW5nZXMgb246IExheW91
dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3Jlc291cmNlcy9ncmF5LXJhbXAtZ2FtbWE5LjAucG5n
Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX18KQWRkZWQ6IHN2bjpleGVjdXRhYmxlCiAgICsgKgpBZGRlZDogc3ZuOm1pbWUt
dHlwZQogICArIGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQoKCmlWQk9SdzBLR2dvQUFBQU5TVWhF
VWdBQUFRQUFBQUFCQ0FZQUFBQXhXWEIzQUFBQUJHZEJUVUVBRGJ1Z1Vob25oUUFBQUR4SlJFRlUK
T010alpBQUNSaUFnUkJNU1EyY1R3OGNsUm93Y1BRRVRFSkFyajAyT21tTFU1dFBMVEVyRnFCRTM5
QVNrcG5OUzhoS3hlUlNiSEFEeQprUVArcUpUbGR3QUFBQUJKUlU1RXJrSmdnZz09CgpJbmRleDog
TGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvcmVzb3VyY2VzL2dyYXktcmFtcC5wbmcKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQpDYW5ub3QgZGlzcGxheTogZmlsZSBtYXJrZWQgYXMgYSBiaW5hcnkgdHlwZS4Kc3Zu
Om1pbWUtdHlwZSA9IGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQoKUHJvcGVydHkgY2hhbmdlcyBv
bjogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvcmVzb3VyY2VzL2dyYXktcmFtcC5wbmcK
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUKICAgKyAqCkFkZGVkOiBzdm46bWltZS10
eXBlCiAgICsgYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtCgoKaVZCT1J3MEtHZ29BQUFBTlNVaEVV
Z0FBQVFBQUFBQUJDQVlBQUFBeFdYQjNBQUFBUWtsRVFWUjRuR05rWUdCZ1lHUmtaQ1JFRXhKRApa
eFBEeHlWR2pCdzlBUk1URXhPNTh0amtxQ2xHYlQ2OXpLUlVqQmc1WXVUcEJVaE41NlRrSldMektE
WTVBUEtSQS80ejBRVG1BQUFBCkFFbEZUa1N1UW1DQwoKSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qv
Y2FudmFzL3dlYmdsL3Jlc291cmNlcy96ZXJvLWFscGhhLnBuZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNhbm5vdCBk
aXNwbGF5OiBmaWxlIG1hcmtlZCBhcyBhIGJpbmFyeSB0eXBlLgpzdm46bWltZS10eXBlID0gYXBw
bGljYXRpb24vb2N0ZXQtc3RyZWFtCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9m
YXN0L2NhbnZhcy93ZWJnbC9yZXNvdXJjZXMvemVyby1hbHBoYS5wbmcKX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRl
ZDogc3ZuOmV4ZWN1dGFibGUKICAgKyAqCkFkZGVkOiBzdm46bWltZS10eXBlCiAgICsgYXBwbGlj
YXRpb24vb2N0ZXQtc3RyZWFtCgoKaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUFNQUFBQURDQVlB
QUFCV0tMVy9BQUFBSUVsRVFWUjRuQ1hKc1EwQU1BZ0RNTlBMNGZKMAp5R2g1QW1Id2JyY1NHc1VI
blVBSWZ4Rnd5cm9BQUFBQVNVVk9SSzVDWUlJPQoK
</data>
<flag name="commit-queue"
          id="54112"
          type_id="3"
          status="-"
          setter="zmo"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>65433</attachid>
            <date>2010-08-25 10:20:25 -0700</date>
            <delta_ts>2010-08-25 11:58:53 -0700</delta_ts>
            <desc>revised patch: an attempt to fix the Qt port</desc>
            <filename>alpha.patch</filename>
            <type>text/plain</type>
            <size>55893</size>
            <attacher name="Zhenyao Mo">zmo</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NjAyMCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNjEgQEAKKzIwMTAtMDgtMjQgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQYXNzaW5n
IHByZW11bHRpcGx5QWxwaGE9ZmFsc2UgdG8gdGV4e1N1Yn1JbWFnZTJEIGxvc2VzIGluZm9ybWF0
aW9uIChza2lhKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MzgyODIKKworICAgICAgICBUZXN0OiBmYXN0L2NhbnZhcy93ZWJnbC9nbC10ZXhpbWFnZS5o
dG1sCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5jcHA6
IEZpeCBhIGJ1ZyB3aGVyZSBhbHBoYSBjaGFubmVsIGlzIGlnbm9yZWQuCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwOiBBZGQgcHJlbXVsdGlwbHlBbHBoYSBmbGFn
LgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OkltYWdlU291cmNlKToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlU291cmNlOjpzZXREYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZVNvdXJjZS5oOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
Zy9JbWFnZVNvdXJjZUNHLmNwcDogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJj
ZTo6SW1hZ2VTb3VyY2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlRGVj
b2RlclF0LmNwcDogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6OmNyZWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXJRdDo6SW1hZ2VEZWNvZGVyUXQpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyUXQ6OmZyYW1lQ291bnQpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VEZWNvZGVyUXQ6OmZvcmNlTG9hZEV2ZXJ5dGhpbmcpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlRGVjb2RlclF0Lmg6IERpdHRvLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NDb250ZXh0M0RTa2lhLmNwcDogRml4IHRo
ZSBwcmVtdWx0aXBseUFscGhhIGRhdGEgbG9zcyBpc3N1ZSBpbiBza2lhLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldEltYWdlRGF0YSk6CisgICAgICAgICogcGxhdGZv
cm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmNwcDogQWRkIHByZW11bHRpcGx5QWxwaGEg
ZmxhZy4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OlJHQkEzMkJ1ZmZlcjo6UkdCQTMyQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6
OlJHQkEzMkJ1ZmZlcjo6b3BlcmF0b3I9KToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9JbWFnZURlY29kZXIuaDogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSR0JBMzJCdWZm
ZXI6OnByZW11bHRpcGx5QWxwaGEpOgorICAgICAgICAoV2ViQ29yZTo6UkdCQTMyQnVmZmVyOjpz
ZXRQcmVtdWx0aXBseUFscGhhKToKKyAgICAgICAgKFdlYkNvcmU6OlJHQkEzMkJ1ZmZlcjo6c2V0
UkdCQSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6OkltYWdlRGVjb2Rlcik6Cisg
ICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1wL0JNUEltYWdlRGVjb2Rlci5jcHA6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Qk1QSW1hZ2VEZWNvZGVyOjpCTVBJbWFnZURlY29k
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Qk1QSW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZmZlckF0SW5k
ZXgpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJbWFnZURlY29k
ZXIuaDogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRklt
YWdlRGVjb2Rlci5jcHA6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVy
OjpHSUZJbWFnZURlY29kZXIpOgorICAgICAgICAoV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyOjpm
cmFtZUNvdW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1h
Z2VEZWNvZGVyLmg6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2lj
by9JQ09JbWFnZURlY29kZXIuY3BwOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OklDT0ltYWdl
RGVjb2Rlcjo6SUNPSW1hZ2VEZWNvZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OklDT0ltYWdlRGVj
b2Rlcjo6ZnJhbWVDb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpJQ09JbWFnZURlY29kZXI6OmRl
Y29kZUF0SW5kZXgpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2ljby9JQ09J
bWFnZURlY29kZXIuaDogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMv
anBlZy9KUEVHSW1hZ2VEZWNvZGVyLmNwcDogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpKUEVH
SW1hZ2VEZWNvZGVyOjpKUEVHSW1hZ2VEZWNvZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkpQRUdJ
bWFnZURlY29kZXI6OmZyYW1lQnVmZmVyQXRJbmRleCk6CisgICAgICAgICogcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmg6IERpdHRvLgorICAgICAgICAqIHBs
YXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuY3BwOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6OlBOR0ltYWdlRGVjb2Rlcjo6UE5HSW1hZ2VEZWNvZGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBOR0ltYWdlRGVjb2Rlcjo6ZnJhbWVCdWZmZXJBdEluZGV4KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmg6IERpdHRv
LgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3NraWEvSW1hZ2VEZWNvZGVyU2tp
YS5jcHA6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UkdCQTMyQnVmZmVyOjpSR0JBMzJCdWZm
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UkdCQTMyQnVmZmVyOjpvcGVyYXRvcj0pOgorCiAyMDEw
LTA4LTI1ICBEYXdpdCBBbGVtYXllaHUgIDxhZGF3aXRAa2RlLm9yZz4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBBcml5YSBIaWRheWF0LgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0NvbnRleHQzRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9HcmFwaGljc0NvbnRleHQzRC5jcHAJKHJldmlzaW9uIDY2MDIwKQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQyNCw2ICs0MjQsNyBAQCB2b2lkIHBhY2tSR0JBOFRvUkdCQThQcmVtdWx0aXBseShjb25zdCB1
CiAgICAgZGVzdGluYXRpb25bMF0gPSBzb3VyY2VSOwogICAgIGRlc3RpbmF0aW9uWzFdID0gc291
cmNlRzsKICAgICBkZXN0aW5hdGlvblsyXSA9IHNvdXJjZUI7CisgICAgZGVzdGluYXRpb25bM10g
PSBzb3VyY2VbM107CiB9CiAKIC8vIEZJWE1FOiB0aGlzIHJvdXRpbmUgaXMgbG9zc3kgYW5kIG11
c3QgYmUgcmVtb3ZlZC4KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3Vy
Y2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3Vy
Y2UuY3BwCShyZXZpc2lvbiA2NjAyMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1h
Z2VTb3VyY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw4ICs0MSw5IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIHVuc2lnbmVkIEltYWdlU291cmNlOjpzX21heFBpeGVsc1BlckRlY29kZWRJbWFn
ZSA9IDEwMjQgKiAxMDI0OwogI2VuZGlmCiAKLUltYWdlU291cmNlOjpJbWFnZVNvdXJjZSgpCitJ
bWFnZVNvdXJjZTo6SW1hZ2VTb3VyY2UoYm9vbCBwcmVtdWx0aXBseUFscGhhKQogICAgIDogbV9k
ZWNvZGVyKDApCisgICAgLCBtX3ByZW11bHRpcGx5QWxwaGEocHJlbXVsdGlwbHlBbHBoYSkKIHsK
IH0KIApAQCAtNzcsNyArNzgsNyBAQCB2b2lkIEltYWdlU291cmNlOjpzZXREYXRhKFNoYXJlZEJ1
ZmZlciogCiAgICAgLy8gSWYgaW5zdWZmaWNpZW50IGJ5dGVzIGFyZSBhdmFpbGFibGUgdG8gZGV0
ZXJtaW5lIHRoZSBpbWFnZSB0eXBlLCBubyBkZWNvZGVyIHBsdWdpbiB3aWxsIGJlCiAgICAgLy8g
bWFkZS4KICAgICBpZiAoIW1fZGVjb2RlcikgewotICAgICAgICBtX2RlY29kZXIgPSBzdGF0aWNf
Y2FzdDxOYXRpdmVJbWFnZVNvdXJjZVB0cj4oSW1hZ2VEZWNvZGVyOjpjcmVhdGUoKmRhdGEpKTsK
KyAgICAgICAgbV9kZWNvZGVyID0gc3RhdGljX2Nhc3Q8TmF0aXZlSW1hZ2VTb3VyY2VQdHI+KElt
YWdlRGVjb2Rlcjo6Y3JlYXRlKCpkYXRhLCBtX3ByZW11bHRpcGx5QWxwaGEpKTsKICNpZiBFTkFC
TEUoSU1BR0VfREVDT0RFUl9ET1dOX1NBTVBMSU5HKQogICAgICAgICBpZiAobV9kZWNvZGVyICYm
IHNfbWF4UGl4ZWxzUGVyRGVjb2RlZEltYWdlKQogICAgICAgICAgICAgbV9kZWNvZGVyLT5zZXRN
YXhOdW1QaXhlbHMoc19tYXhQaXhlbHNQZXJEZWNvZGVkSW1hZ2UpOwpJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaAkocmV2aXNpb24gNjYwMjApCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTExNCw3
ICsxMTQsNyBAQCBjb25zdCBpbnQgY0FuaW1hdGlvbk5vbmUgPSAtMjsKIAogY2xhc3MgSW1hZ2VT
b3VyY2UgOiBwdWJsaWMgTm9uY29weWFibGUgewogcHVibGljOgotICAgIEltYWdlU291cmNlKCk7
CisgICAgSW1hZ2VTb3VyY2UoYm9vbCBwcmVtdWx0aXBseUFscGhhID0gdHJ1ZSk7CiAgICAgfklt
YWdlU291cmNlKCk7CiAKICAgICAvLyBUZWxscyB0aGUgSW1hZ2VTb3VyY2UgdGhhdCB0aGUgSW1h
Z2Ugbm8gbG9uZ2VyIGNhcmVzIGFib3V0IGRlY29kZWQgZnJhbWUKQEAgLTE3Miw2ICsxNzIsNyBA
QCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgTmF0aXZlSW1hZ2VTb3VyY2VQdHIgbV9kZWNvZGVy
OworICAgIGJvb2wgbV9wcmVtdWx0aXBseUFscGhhOwogI2lmIEVOQUJMRShJTUFHRV9ERUNPREVS
X0RPV05fU0FNUExJTkcpCiAgICAgc3RhdGljIHVuc2lnbmVkIHNfbWF4UGl4ZWxzUGVyRGVjb2Rl
ZEltYWdlOwogI2VuZGlmCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdl
U291cmNlQ0cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
SW1hZ2VTb3VyY2VDRy5jcHAJKHJldmlzaW9uIDY2MDIwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9JbWFnZVNvdXJjZUNHLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMsOCArNjMs
OSBAQCB2b2lkIHNoYXJlZEJ1ZmZlclJlbGVhc2Uodm9pZCogaW5mbykKIH0KICNlbmRpZgogCi1J
bWFnZVNvdXJjZTo6SW1hZ2VTb3VyY2UoKQorSW1hZ2VTb3VyY2U6OkltYWdlU291cmNlKGJvb2wg
cHJlbXVsdGlwbHlBbHBoYSkKICAgICA6IG1fZGVjb2RlcigwKQorICAgICwgbV9wcmVtdWx0aXBs
eUFscGhhKHByZW11bHRpcGx5QWxwaGEpCiB7CiB9CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvcXQvSW1hZ2VEZWNvZGVyUXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VEZWNvZGVyUXQuY3BwCShyZXZpc2lvbiA2NjAyMCkKKysr
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VEZWNvZGVyUXQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zNywxNyArMzcsMTggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1JbWFn
ZURlY29kZXIqIEltYWdlRGVjb2Rlcjo6Y3JlYXRlKGNvbnN0IFNoYXJlZEJ1ZmZlciYgZGF0YSkK
K0ltYWdlRGVjb2RlciogSW1hZ2VEZWNvZGVyOjpjcmVhdGUoY29uc3QgU2hhcmVkQnVmZmVyJiBk
YXRhLCBib29sIHByZW11bHRpcGx5QWxwaGEpCiB7CiAgICAgLy8gV2UgbmVlZCBhdCBsZWFzdCA0
IGJ5dGVzIHRvIGZpZ3VyZSBvdXQgd2hhdCBraW5kIG9mIGltYWdlIHdlJ3JlIGRlYWxpbmcgd2l0
aC4KICAgICBpZiAoZGF0YS5zaXplKCkgPCA0KQogICAgICAgICByZXR1cm4gMDsKIAotICAgIHJl
dHVybiBuZXcgSW1hZ2VEZWNvZGVyUXQ7CisgICAgcmV0dXJuIG5ldyBJbWFnZURlY29kZXJRdChw
cmVtdWx0aXBseUFscGhhKTsKIH0KIAotSW1hZ2VEZWNvZGVyUXQ6OkltYWdlRGVjb2RlclF0KCkK
LSAgICA6IG1fcmVwZXRpdGlvbkNvdW50KGNBbmltYXRpb25Ob25lKQorSW1hZ2VEZWNvZGVyUXQ6
OkltYWdlRGVjb2RlclF0KGJvb2wgcHJlbXVsdGlwbHlBbHBoYSkKKyAgICA6IEltYWdlRGVjb2Rl
cihwcmVtdWx0aXBseUFscGhhKQorICAgICwgbV9yZXBldGl0aW9uQ291bnQoY0FuaW1hdGlvbk5v
bmUpCiB7CiB9CiAKQEAgLTEwNCwxMCArMTA1LDE1IEBAIHNpemVfdCBJbWFnZURlY29kZXJRdDo6
ZnJhbWVDb3VudCgpCiAgICAgICAgICAgICAvLyB3ZSB3aWxsIGhhdmUgdG8gcGFyc2UgZXZlcnl0
aGluZy4uLgogICAgICAgICAgICAgaWYgKCFpbWFnZUNvdW50KQogICAgICAgICAgICAgICAgIGZv
cmNlTG9hZEV2ZXJ5dGhpbmcoKTsKLSAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVsc2Ug
ewogICAgICAgICAgICAgICAgIG1fZnJhbWVCdWZmZXJDYWNoZS5yZXNpemUoaW1hZ2VDb3VudCk7
Ci0gICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bV9mcmFtZUJ1ZmZlckNhY2hlLnNpemUoKTsgKytpKQorICAgICAgICAgICAgICAgICAgICBtX2Zy
YW1lQnVmZmVyQ2FjaGVbaV0uc2V0UHJlbXVsdGlwbHlBbHBoYShtX3ByZW11bHRpcGx5QWxwaGEp
OworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgbV9mcmFtZUJ1
ZmZlckNhY2hlLnJlc2l6ZSgxKTsKKyAgICAgICAgICAgIG1fZnJhbWVCdWZmZXJDYWNoZVswXS5z
ZXRQcmVtdWx0aXBseUFscGhhKG1fcHJlbXVsdGlwbHlBbHBoYSk7CisgICAgICAgIH0KICAgICB9
CiAKICAgICByZXR1cm4gbV9mcmFtZUJ1ZmZlckNhY2hlLnNpemUoKTsKQEAgLTIzNiw2ICsyNDIs
OCBAQCB2b2lkIEltYWdlRGVjb2RlclF0Ojpmb3JjZUxvYWRFdmVyeXRoaW5nCiAgICAgLy8gT3Ro
ZXJ3aXNlLCB3ZSB3YW50IHRvIGZvcmdldCBhYm91dAogICAgIC8vIHRoZSBsYXN0IGF0dGVtcHQg
dG8gZGVjb2RlIGEgaW1hZ2UuCiAgICAgbV9mcmFtZUJ1ZmZlckNhY2hlLnJlc2l6ZShpbWFnZUNv
dW50IC0gMSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2ZyYW1lQnVmZmVyQ2FjaGUu
c2l6ZSgpOyArK2kpCisgICAgICAgIG1fZnJhbWVCdWZmZXJDYWNoZVtpXS5zZXRQcmVtdWx0aXBs
eUFscGhhKG1fcHJlbXVsdGlwbHlBbHBoYSk7CiAgICAgaWYgKGltYWdlQ291bnQgPT0gMSkKICAg
ICAgIHNldEZhaWxlZCgpOwogfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9J
bWFnZURlY29kZXJRdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
cXQvSW1hZ2VEZWNvZGVyUXQuaAkocmV2aXNpb24gNjYwMjApCisrKyBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3F0L0ltYWdlRGVjb2RlclF0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQx
LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgSW1hZ2VEZWNvZGVyUXQgOiBwdWJsaWMg
SW1hZ2VEZWNvZGVyCiB7CiBwdWJsaWM6Ci0gICAgSW1hZ2VEZWNvZGVyUXQoKTsKKyAgICBJbWFn
ZURlY29kZXJRdChib29sIHByZW11bHRpcGx5QWxwaGEpOwogICAgIH5JbWFnZURlY29kZXJRdCgp
OwogCiAgICAgdmlydHVhbCB2b2lkIHNldERhdGEoU2hhcmVkQnVmZmVyKiBkYXRhLCBib29sIGFs
bERhdGFSZWNlaXZlZCk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3Jh
cGhpY3NDb250ZXh0M0RTa2lhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3NraWEvR3JhcGhpY3NDb250ZXh0M0RTa2lhLmNwcAkocmV2aXNpb24gNjYwMjApCisr
KyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NDb250ZXh0M0RTa2lhLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dDNELmgiCiAKICNpbmNsdWRlICJJbWFnZS5oIgorI2luY2x1ZGUgIkltYWdlU291cmNlLmgi
CiAjaW5jbHVkZSAiTmF0aXZlSW1hZ2VTa2lhLmgiCiAKICNpbmNsdWRlIDxhbGdvcml0aG0+CkBA
IC00MywyNyArNDQsMjUgQEAgYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0SW1hZ2VEYXRhKElt
YQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcHJlbXVsdGlwbHlB
bHBoYSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZWN0b3I8dWludDhf
dD4mIG91dHB1dFZlY3RvcikKIHsKLSAgICBpZiAoIWltYWdlKQorICAgIGlmICghaW1hZ2UgfHwg
IWltYWdlLT5kYXRhKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBOYXRpdmVJbWFnZVNr
aWEqIHNraWFJbWFnZSA9IGltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOwotICAg
IGlmICghc2tpYUltYWdlKQorICAgIEltYWdlU291cmNlIGRlY29kZXIoZmFsc2UpOworICAgIGRl
Y29kZXIuc2V0RGF0YShpbWFnZS0+ZGF0YSgpLCB0cnVlKTsKKyAgICBpZiAoIWRlY29kZXIuZnJh
bWVDb3VudCgpIHx8ICFkZWNvZGVyLmZyYW1lSXNDb21wbGV0ZUF0SW5kZXgoMCkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBTa0JpdG1hcDo6Q29uZmlnIHNraWFDb25maWcgPSBza2lhSW1h
Z2UtPmNvbmZpZygpOwotICAgIC8vIEZJWE1FOiBtdXN0IHN1cHBvcnQgbW9yZSBpbWFnZSBjb25m
aWd1cmF0aW9ucy4KLSAgICBpZiAoc2tpYUNvbmZpZyAhPSBTa0JpdG1hcDo6a0FSR0JfODg4OF9D
b25maWcpCisgICAgYm9vbCBoYXNBbHBoYSA9IGRlY29kZXIuZnJhbWVIYXNBbHBoYUF0SW5kZXgo
MCk7CisgICAgT3duUHRyPE5hdGl2ZUltYWdlU2tpYT4gcGl4ZWxzKGRlY29kZXIuY3JlYXRlRnJh
bWVBdEluZGV4KDApKTsKKyAgICBpZiAoIXBpeGVscy5nZXQoKSB8fCAhcGl4ZWxzLT5pc0RhdGFD
b21wbGV0ZSgpIHx8ICFwaXhlbHMtPndpZHRoKCkgfHwgIXBpeGVscy0+aGVpZ2h0KCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICBTa0JpdG1hcCYgc2tpYUltYWdlUmVmID0gKnNraWFJbWFn
ZTsKKyAgICBTa0JpdG1hcCYgc2tpYUltYWdlUmVmID0gKnBpeGVsczsKICAgICBTa0F1dG9Mb2Nr
UGl4ZWxzIGxvY2soc2tpYUltYWdlUmVmKTsKLSAgICBpbnQgaGVpZ2h0ID0gc2tpYUltYWdlLT5o
ZWlnaHQoKTsKLSAgICBpbnQgcm93Qnl0ZXMgPSBza2lhSW1hZ2UtPnJvd0J5dGVzKCk7Ci0gICAg
QVNTRVJUKHJvd0J5dGVzID09IHNraWFJbWFnZS0+d2lkdGgoKSAqIDQpOwotICAgIHVpbnQ4X3Qq
IHBpeGVscyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KHNraWFJbWFnZS0+Z2V0UGl4ZWxz
KCkpOwotICAgIG91dHB1dFZlY3Rvci5yZXNpemUocm93Qnl0ZXMgKiBoZWlnaHQpOworICAgIEFT
U0VSVChwaXhlbHMtPnJvd0J5dGVzKCkgPT0gcGl4ZWxzLT53aWR0aCgpICogNCk7CisgICAgb3V0
cHV0VmVjdG9yLnJlc2l6ZShwaXhlbHMtPnJvd0J5dGVzKCkgKiBwaXhlbHMtPmhlaWdodCgpKTsK
ICAgICBBbHBoYU9wIG5lZWRlZEFscGhhT3AgPSBrQWxwaGFEb05vdGhpbmc7Ci0gICAgaWYgKCFw
cmVtdWx0aXBseUFscGhhKQotICAgICAgICAvLyBGSVhNRTogbXVzdCBmZXRjaCB0aGUgaW1hZ2Ug
ZGF0YSBiZWZvcmUgdGhlIHByZW11bHRpcGxpY2F0aW9uIHN0ZXAKLSAgICAgICAgbmVlZGVkQWxw
aGFPcCA9IGtBbHBoYURvVW5tdWx0aXBseTsKLSAgICByZXR1cm4gcGFja1BpeGVscyhwaXhlbHMs
IGtTb3VyY2VGb3JtYXRCR1JBOCwgc2tpYUltYWdlLT53aWR0aCgpLCBoZWlnaHQsIDAsCisgICAg
aWYgKGhhc0FscGhhICYmIHByZW11bHRpcGx5QWxwaGEpCisgICAgICAgIG5lZWRlZEFscGhhT3Ag
PSBrQWxwaGFEb1ByZW11bHRpcGx5OworICAgIHJldHVybiBwYWNrUGl4ZWxzKHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHBpeGVscy0+Z2V0UGl4ZWxzKCkpLAorICAgICAgICAgICAg
ICAgICAgICAgIGtTb3VyY2VGb3JtYXRCR1JBOCwgcGl4ZWxzLT53aWR0aCgpLCBwaXhlbHMtPmhl
aWdodCgpLCAwLAogICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdCwgdHlwZSwgbmVlZGVkQWxw
aGFPcCwgb3V0cHV0VmVjdG9yLmRhdGEoKSk7CiB9CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5jcHAJKHJldmlzaW9uIDY2MDIwKQor
KysgV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01Miw3ICs1Miw3IEBAIHN0YXRpYyB1bnNpZ25lZCBjb3B5RnJvbVNoYXJl
ZEJ1ZmZlcihjaGEKICAgICByZXR1cm4gYnl0ZXNFeHRyYWN0ZWQ7CiB9CiAKLUltYWdlRGVjb2Rl
ciogSW1hZ2VEZWNvZGVyOjpjcmVhdGUoY29uc3QgU2hhcmVkQnVmZmVyJiBkYXRhKQorSW1hZ2VE
ZWNvZGVyKiBJbWFnZURlY29kZXI6OmNyZWF0ZShjb25zdCBTaGFyZWRCdWZmZXImIGRhdGEsIGJv
b2wgcHJlbXVsdGlwbHlBbHBoYSkKIHsKICAgICAvLyBXZSBuZWVkIGF0IGxlYXN0IDQgYnl0ZXMg
dG8gZmlndXJlIG91dCB3aGF0IGtpbmQgb2YgaW1hZ2Ugd2UncmUgZGVhbGluZwogICAgIC8vIHdp
dGguCkBAIC02NCwyNCArNjQsMjQgQEAgSW1hZ2VEZWNvZGVyKiBJbWFnZURlY29kZXI6OmNyZWF0
ZShjb25zdAogCiAgICAgLy8gR0lGcyBiZWdpbiB3aXRoIEdJRjgoNyBvciA5KS4KICAgICBpZiAo
c3RybmNtcChjb250ZW50cywgIkdJRjgiLCA0KSA9PSAwKQotICAgICAgICByZXR1cm4gbmV3IEdJ
RkltYWdlRGVjb2RlcigpOworICAgICAgICByZXR1cm4gbmV3IEdJRkltYWdlRGVjb2RlcihwcmVt
dWx0aXBseUFscGhhKTsKIAogICAgIC8vIFRlc3QgZm9yIFBORy4KICAgICBpZiAoIW1lbWNtcChj
b250ZW50cywgIlx4ODlceDUwXHg0RVx4NDciLCA0KSkKLSAgICAgICAgcmV0dXJuIG5ldyBQTkdJ
bWFnZURlY29kZXIoKTsKKyAgICAgICAgcmV0dXJuIG5ldyBQTkdJbWFnZURlY29kZXIocHJlbXVs
dGlwbHlBbHBoYSk7CiAKICAgICAvLyBKUEVHCiAgICAgaWYgKCFtZW1jbXAoY29udGVudHMsICJc
eEZGXHhEOFx4RkYiLCAzKSkKLSAgICAgICAgcmV0dXJuIG5ldyBKUEVHSW1hZ2VEZWNvZGVyKCk7
CisgICAgICAgIHJldHVybiBuZXcgSlBFR0ltYWdlRGVjb2RlcihwcmVtdWx0aXBseUFscGhhKTsK
IAogICAgIC8vIEJNUAogICAgIGlmIChzdHJuY21wKGNvbnRlbnRzLCAiQk0iLCAyKSA9PSAwKQot
ICAgICAgICByZXR1cm4gbmV3IEJNUEltYWdlRGVjb2RlcigpOworICAgICAgICByZXR1cm4gbmV3
IEJNUEltYWdlRGVjb2RlcihwcmVtdWx0aXBseUFscGhhKTsKIAogICAgIC8vIElDT3MgYWx3YXlz
IGJlZ2luIHdpdGggYSAyLWJ5dGUgMCBmb2xsb3dlZCBieSBhIDItYnl0ZSAxLgogICAgIC8vIENV
UnMgYmVnaW4gd2l0aCAyLWJ5dGUgMCBmb2xsb3dlZCBieSAyLWJ5dGUgMi4KICAgICBpZiAoIW1l
bWNtcChjb250ZW50cywgIlx4MDBceDAwXHgwMVx4MDAiLCA0KSB8fCAhbWVtY21wKGNvbnRlbnRz
LCAiXHgwMFx4MDBceDAyXHgwMCIsIDQpKQotICAgICAgICByZXR1cm4gbmV3IElDT0ltYWdlRGVj
b2RlcigpOworICAgICAgICByZXR1cm4gbmV3IElDT0ltYWdlRGVjb2RlcihwcmVtdWx0aXBseUFs
cGhhKTsKIAogICAgIC8vIEdpdmUgdXAuIFdlIGRvbid0IGtub3cgd2hhdCB0aGUgaGVjayB0aGlz
IGlzLgogICAgIHJldHVybiAwOwpAQCAtOTQsNiArOTQsNyBAQCBSR0JBMzJCdWZmZXI6OlJHQkEz
MkJ1ZmZlcigpCiAgICAgLCBtX3N0YXR1cyhGcmFtZUVtcHR5KQogICAgICwgbV9kdXJhdGlvbigw
KQogICAgICwgbV9kaXNwb3NhbE1ldGhvZChEaXNwb3NlTm90U3BlY2lmaWVkKQorICAgICwgbV9w
cmVtdWx0aXBseUFscGhhKHRydWUpCiB7CiB9IAogCkBAIC0xMDcsNiArMTA4LDcgQEAgUkdCQTMy
QnVmZmVyJiBSR0JBMzJCdWZmZXI6Om9wZXJhdG9yPShjbwogICAgIHNldFN0YXR1cyhvdGhlci5z
dGF0dXMoKSk7CiAgICAgc2V0RHVyYXRpb24ob3RoZXIuZHVyYXRpb24oKSk7CiAgICAgc2V0RGlz
cG9zYWxNZXRob2Qob3RoZXIuZGlzcG9zYWxNZXRob2QoKSk7CisgICAgc2V0UHJlbXVsdGlwbHlB
bHBoYShvdGhlci5wcmVtdWx0aXBseUFscGhhKCkpOwogICAgIHJldHVybiAqdGhpczsKIH0KIApJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5o
CShyZXZpc2lvbiA2NjAyMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1h
Z2VEZWNvZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTExOCwxMiArMTE4LDE0IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICAgICAgRnJhbWVTdGF0dXMgc3RhdHVzKCkgY29uc3QgeyByZXR1cm4g
bV9zdGF0dXM7IH0KICAgICAgICAgdW5zaWduZWQgZHVyYXRpb24oKSBjb25zdCB7IHJldHVybiBt
X2R1cmF0aW9uOyB9CiAgICAgICAgIEZyYW1lRGlzcG9zYWxNZXRob2QgZGlzcG9zYWxNZXRob2Qo
KSBjb25zdCB7IHJldHVybiBtX2Rpc3Bvc2FsTWV0aG9kOyB9CisgICAgICAgIGJvb2wgcHJlbXVs
dGlwbHlBbHBoYSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJlbXVsdGlwbHlBbHBoYTsgfQogCiAgICAg
ICAgIHZvaWQgc2V0SGFzQWxwaGEoYm9vbCBhbHBoYSk7CiAgICAgICAgIHZvaWQgc2V0UmVjdChj
b25zdCBJbnRSZWN0JiByKSB7IG1fcmVjdCA9IHI7IH0KICAgICAgICAgdm9pZCBzZXRTdGF0dXMo
RnJhbWVTdGF0dXMgc3RhdHVzKTsKICAgICAgICAgdm9pZCBzZXREdXJhdGlvbih1bnNpZ25lZCBk
dXJhdGlvbikgeyBtX2R1cmF0aW9uID0gZHVyYXRpb247IH0KICAgICAgICAgdm9pZCBzZXREaXNw
b3NhbE1ldGhvZChGcmFtZURpc3Bvc2FsTWV0aG9kIG1ldGhvZCkgeyBtX2Rpc3Bvc2FsTWV0aG9k
ID0gbWV0aG9kOyB9CisgICAgICAgIHZvaWQgc2V0UHJlbXVsdGlwbHlBbHBoYShib29sIHByZW11
bHRpcGx5QWxwaGEpIHsgbV9wcmVtdWx0aXBseUFscGhhID0gcHJlbXVsdGlwbHlBbHBoYTsgfQog
CiAgICAgICAgIGlubGluZSB2b2lkIHNldFJHQkEoaW50IHgsIGludCB5LCB1bnNpZ25lZCByLCB1
bnNpZ25lZCBnLCB1bnNpZ25lZCBiLCB1bnNpZ25lZCBhKQogICAgICAgICB7CkBAIC0xNTMsMTEg
KzE1NSwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgaW5saW5lIHZvaWQgc2V0
UkdCQShQaXhlbERhdGEqIGRlc3QsIHVuc2lnbmVkIHIsIHVuc2lnbmVkIGcsIHVuc2lnbmVkIGIs
IHVuc2lnbmVkIGEpCiAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIFdlIHN0b3JlIHRoaXMgZGF0
YSBwcmUtbXVsdGlwbGllZC4KLSAgICAgICAgICAgIGlmIChhID09IDApCisgICAgICAgICAgICBp
ZiAoIWEgJiYgbV9wcmVtdWx0aXBseUFscGhhKQogICAgICAgICAgICAgICAgICpkZXN0ID0gMDsK
ICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIGlmIChhIDwgMjU1KSB7CisgICAg
ICAgICAgICAgICAgaWYgKGEgPCAyNTUgJiYgbV9wcmVtdWx0aXBseUFscGhhKSB7CiAgICAgICAg
ICAgICAgICAgICAgIGZsb2F0IGFscGhhUGVyY2VudCA9IGEgLyAyNTUuMGY7CiAgICAgICAgICAg
ICAgICAgICAgIHIgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ociAqIGFscGhhUGVyY2VudCk7CiAg
ICAgICAgICAgICAgICAgICAgIGcgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZyAqIGFscGhhUGVy
Y2VudCk7CkBAIC0xOTIsNiArMTkzLDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBG
cmFtZURpc3Bvc2FsTWV0aG9kIG1fZGlzcG9zYWxNZXRob2Q7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBXaGF0IHRvIGRvIHdpdGggdGhpcyBmcmFtZSdzIGRhdGEgd2hlbgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW5pdGlhbGl6aW5nIHRoZSBuZXh0IGZyYW1l
LgorICAgICAgICBib29sIG1fcHJlbXVsdGlwbHlBbHBoYTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIFdoZXRoZXIgdG8gcHJlbXVsdGlwbHkgYWxwaGEgdG8gUiwgRywgQiBjaGFu
bmVsczsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJ5IGRlZmF1bHQgaXQncyB0
cnVlLgogICAgIH07CiAKICAgICAvLyBUaGUgSW1hZ2VEZWNvZGVyIGNsYXNzIHJlcHJlc2VudHMg
YSBiYXNlIGNsYXNzIGZvciBzcGVjaWZpYyBpbWFnZSBmb3JtYXQKQEAgLTIwNSw4ICsyMDksOSBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgLy8gbV9tYXhOdW1QaXhlbHMuIChOb3Qgc3VwcG9y
dGVkIGJ5IGFsbCBpbWFnZSBkZWNvZGVycyB5ZXQpCiAgICAgY2xhc3MgSW1hZ2VEZWNvZGVyIDog
cHVibGljIE5vbmNvcHlhYmxlIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIEltYWdlRGVjb2Rlcigp
CisgICAgICAgIEltYWdlRGVjb2Rlcihib29sIHByZW11bHRpcGx5QWxwaGEpCiAgICAgICAgICAg
ICA6IG1fc2NhbGVkKGZhbHNlKQorICAgICAgICAgICAgLCBtX3ByZW11bHRpcGx5QWxwaGEocHJl
bXVsdGlwbHlBbHBoYSkKICAgICAgICAgICAgICwgbV9zaXplQXZhaWxhYmxlKGZhbHNlKQogICAg
ICAgICAgICAgLCBtX21heE51bVBpeGVscygtMSkKICAgICAgICAgICAgICwgbV9pc0FsbERhdGFS
ZWNlaXZlZChmYWxzZSkKQEAgLTIxOSw3ICsyMjQsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgICAgIC8vIEZhY3RvcnkgZnVuY3Rpb24gdG8gY3JlYXRlIGFuIEltYWdlRGVjb2Rlci4gIFBv
cnRzIHRoYXQgc3ViY2xhc3MKICAgICAgICAgLy8gSW1hZ2VEZWNvZGVyIGNhbiBwcm92aWRlIHRo
ZWlyIG93biBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIHRvIGF2b2lkCiAgICAgICAgIC8vIG5lZWRp
bmcgdG8gd3JpdGUgYSBkZWRpY2F0ZWQgc2V0RGF0YSgpIGltcGxlbWVudGF0aW9uLgotICAgICAg
ICBzdGF0aWMgSW1hZ2VEZWNvZGVyKiBjcmVhdGUoY29uc3QgU2hhcmVkQnVmZmVyJiBkYXRhKTsK
KyAgICAgICAgc3RhdGljIEltYWdlRGVjb2RlciogY3JlYXRlKGNvbnN0IFNoYXJlZEJ1ZmZlciYg
ZGF0YSwgYm9vbCBwcmVtdWx0aXBseUFscGhhKTsKIAogICAgICAgICAvLyBUaGUgdGhlIGZpbGVu
YW1lIGV4dGVuc2lvbiB1c3VhbGx5IGFzc29jaWF0ZWQgd2l0aCBhbiB1bmRlY29kZWQgaW1hZ2UK
ICAgICAgICAgLy8gb2YgdGhpcyB0eXBlLgpAQCAtMzMzLDYgKzMzOCw3IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICAgICAgYm9vbCBtX3NjYWxlZDsKICAgICAgICAgVmVjdG9yPGludD4gbV9z
Y2FsZWRDb2x1bW5zOwogICAgICAgICBWZWN0b3I8aW50PiBtX3NjYWxlZFJvd3M7CisgICAgICAg
IGJvb2wgbV9wcmVtdWx0aXBseUFscGhhOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgLy8gU29t
ZSBjb2RlIHBhdGhzIGNvbXB1dGUgdGhlIHNpemUgb2YgdGhlIGltYWdlIGFzICJ3aWR0aCAqIGhl
aWdodCAqIDQiCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJ
bWFnZURlY29kZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVj
b2RlcnMvYm1wL0JNUEltYWdlRGVjb2Rlci5jcHAJKHJldmlzaW9uIDY2MDIwKQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9ibXAvQk1QSW1hZ2VEZWNvZGVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDAsOCArNDAsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAvLyBkb24ndCBw
YWNrKS4KIHN0YXRpYyBjb25zdCBzaXplX3Qgc2l6ZU9mRmlsZUhlYWRlciA9IDE0OwogCi1CTVBJ
bWFnZURlY29kZXI6OkJNUEltYWdlRGVjb2RlcigpCi0gICAgOiBtX2RlY29kZWRPZmZzZXQoMCkK
K0JNUEltYWdlRGVjb2Rlcjo6Qk1QSW1hZ2VEZWNvZGVyKGJvb2wgcHJlbXVsdGlwbHlBbHBoYSkK
KyAgICA6IEltYWdlRGVjb2RlcihwcmVtdWx0aXBseUFscGhhKQorICAgICwgbV9kZWNvZGVkT2Zm
c2V0KDApCiB7CiB9CiAKQEAgLTY4LDggKzY5LDEwIEBAIFJHQkEzMkJ1ZmZlciogQk1QSW1hZ2VE
ZWNvZGVyOjpmcmFtZUJ1ZmYKICAgICBpZiAoaW5kZXgpCiAgICAgICAgIHJldHVybiAwOwogCi0g
ICAgaWYgKG1fZnJhbWVCdWZmZXJDYWNoZS5pc0VtcHR5KCkpCisgICAgaWYgKG1fZnJhbWVCdWZm
ZXJDYWNoZS5pc0VtcHR5KCkpIHsKICAgICAgICAgbV9mcmFtZUJ1ZmZlckNhY2hlLnJlc2l6ZSgx
KTsKKyAgICAgICAgbV9mcmFtZUJ1ZmZlckNhY2hlLmZpcnN0KCkuc2V0UHJlbXVsdGlwbHlBbHBo
YShtX3ByZW11bHRpcGx5QWxwaGEpOworICAgIH0KIAogICAgIFJHQkEzMkJ1ZmZlciogYnVmZmVy
ID0gJm1fZnJhbWVCdWZmZXJDYWNoZS5maXJzdCgpOwogICAgIGlmIChidWZmZXItPnN0YXR1cygp
ICE9IFJHQkEzMkJ1ZmZlcjo6RnJhbWVDb21wbGV0ZSkKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvYm1wL0JNUEltYWdlRGVjb2Rlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1wL0JNUEltYWdlRGVjb2Rlci5oCShyZXZpc2lv
biA2NjAyMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1wL0JNUEltYWdl
RGVjb2Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICAvLyBUaGlzIGNsYXNzIGRlY29kZXMgdGhlIEJNUCBpbWFnZSBmb3JtYXQuCiAg
ICAgY2xhc3MgQk1QSW1hZ2VEZWNvZGVyIDogcHVibGljIEltYWdlRGVjb2RlciB7CiAgICAgcHVi
bGljOgotICAgICAgICBCTVBJbWFnZURlY29kZXIoKTsKKyAgICAgICAgQk1QSW1hZ2VEZWNvZGVy
KGJvb2wgcHJlbXVsdGlwbHlBbHBoYSk7CiAKICAgICAgICAgLy8gSW1hZ2VEZWNvZGVyCiAgICAg
ICAgIHZpcnR1YWwgU3RyaW5nIGZpbGVuYW1lRXh0ZW5zaW9uKCkgY29uc3QgeyByZXR1cm4gImJt
cCI7IH0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdl
RGVjb2Rlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVy
cy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcAkocmV2aXNpb24gNjYwMjApCisrKyBXZWJDb3JlL3Bs
YXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yOSw4ICsyOSw5IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotR0lGSW1hZ2VE
ZWNvZGVyOjpHSUZJbWFnZURlY29kZXIoKQotICAgIDogbV9hbHJlYWR5U2Nhbm5lZFRoaXNEYXRh
Rm9yRnJhbWVDb3VudCh0cnVlKQorR0lGSW1hZ2VEZWNvZGVyOjpHSUZJbWFnZURlY29kZXIoYm9v
bCBwcmVtdWx0aXBseUFscGhhKQorICAgIDogSW1hZ2VEZWNvZGVyKHByZW11bHRpcGx5QWxwaGEp
CisgICAgLCBtX2FscmVhZHlTY2FubmVkVGhpc0RhdGFGb3JGcmFtZUNvdW50KHRydWUpCiAgICAg
LCBtX3JlcGV0aXRpb25Db3VudChjQW5pbWF0aW9uTG9vcE9uY2UpCiAgICAgLCBtX3JlYWRPZmZz
ZXQoMCkKIHsKQEAgLTgzLDYgKzg0LDggQEAgc2l6ZV90IEdJRkltYWdlRGVjb2Rlcjo6ZnJhbWVD
b3VudCgpCiAgICAgICAgIHJlYWRlci5yZWFkKChjb25zdCB1bnNpZ25lZCBjaGFyKiltX2RhdGEt
PmRhdGEoKSwgbV9kYXRhLT5zaXplKCksIEdJRkZyYW1lQ291bnRRdWVyeSwgc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KC0xKSk7CiAgICAgICAgIG1fYWxyZWFkeVNjYW5uZWRUaGlzRGF0YUZvckZyYW1l
Q291bnQgPSB0cnVlOwogICAgICAgICBtX2ZyYW1lQnVmZmVyQ2FjaGUucmVzaXplKHJlYWRlci5p
bWFnZXNfY291bnQpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlYWRlci5pbWFnZXNf
Y291bnQ7ICsraSkKKyAgICAgICAgICAgIG1fZnJhbWVCdWZmZXJDYWNoZVtpXS5zZXRQcmVtdWx0
aXBseUFscGhhKG1fcHJlbXVsdGlwbHlBbHBoYSk7CiAgICAgfQogCiAgICAgcmV0dXJuIG1fZnJh
bWVCdWZmZXJDYWNoZS5zaXplKCk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuaAkocmV2aXNpb24gNjYwMjApCisr
KyBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
Ly8gVGhpcyBjbGFzcyBkZWNvZGVzIHRoZSBHSUYgaW1hZ2UgZm9ybWF0LgogICAgIGNsYXNzIEdJ
RkltYWdlRGVjb2RlciA6IHB1YmxpYyBJbWFnZURlY29kZXIgewogICAgIHB1YmxpYzoKLSAgICAg
ICAgR0lGSW1hZ2VEZWNvZGVyKCk7CisgICAgICAgIEdJRkltYWdlRGVjb2Rlcihib29sIHByZW11
bHRpcGx5QWxwaGEpOwogICAgICAgICB2aXJ0dWFsIH5HSUZJbWFnZURlY29kZXIoKTsKIAogICAg
ICAgICBlbnVtIEdJRlF1ZXJ5IHsgR0lGRnVsbFF1ZXJ5LCBHSUZTaXplUXVlcnksIEdJRkZyYW1l
Q291bnRRdWVyeSB9OwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9pY28v
SUNPSW1hZ2VEZWNvZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL2ljby9JQ09JbWFnZURlY29kZXIuY3BwCShyZXZpc2lvbiA2NjAyMCkKKysrIFdl
YkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvaWNvL0lDT0ltYWdlRGVjb2Rlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ0LDggKzQ0LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogc3RhdGlj
IGNvbnN0IHNpemVfdCBzaXplT2ZEaXJlY3RvcnkgPSA2Owogc3RhdGljIGNvbnN0IHNpemVfdCBz
aXplT2ZEaXJFbnRyeSA9IDE2OwogCi1JQ09JbWFnZURlY29kZXI6OklDT0ltYWdlRGVjb2Rlcigp
Ci0gICAgOiBtX2RlY29kZWRPZmZzZXQoMCkKK0lDT0ltYWdlRGVjb2Rlcjo6SUNPSW1hZ2VEZWNv
ZGVyKGJvb2wgcHJlbXVsdGlwbHlBbHBoYSkKKyAgICA6IEltYWdlRGVjb2RlcihwcmVtdWx0aXBs
eUFscGhhKQorICAgICwgbV9kZWNvZGVkT2Zmc2V0KDApCiB7CiB9CiAKQEAgLTk2LDggKzk3LDEx
IEBAIGJvb2wgSUNPSW1hZ2VEZWNvZGVyOjpzZXRTaXplKHVuc2lnbmVkIHcKIHNpemVfdCBJQ09J
bWFnZURlY29kZXI6OmZyYW1lQ291bnQoKQogewogICAgIGRlY29kZSgwLCB0cnVlKTsKLSAgICBp
ZiAobV9mcmFtZUJ1ZmZlckNhY2hlLmlzRW1wdHkoKSkKKyAgICBpZiAobV9mcmFtZUJ1ZmZlckNh
Y2hlLmlzRW1wdHkoKSkgewogICAgICAgICBtX2ZyYW1lQnVmZmVyQ2FjaGUucmVzaXplKG1fZGly
RW50cmllcy5zaXplKCkpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZGlyRW50
cmllcy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIG1fZnJhbWVCdWZmZXJDYWNoZVtpXS5zZXRQ
cmVtdWx0aXBseUFscGhhKG1fcHJlbXVsdGlwbHlBbHBoYSk7CisgICAgfQogICAgIC8vIENBVVRJ
T046IFdlIG11c3Qgbm90IHJlc2l6ZSBtX2ZyYW1lQnVmZmVyQ2FjaGUgYWdhaW4gYWZ0ZXIgdGhp
cywgYXMKICAgICAvLyBkZWNvZGVBdEluZGV4KCkgbWF5IGdpdmUgYSBCTVBJbWFnZVJlYWRlciBh
IHBvaW50ZXIgdG8gb25lIG9mIHRoZQogICAgIC8vIGVudHJpZXMuCkBAIC0xOTcsNyArMjAxLDcg
QEAgYm9vbCBJQ09JbWFnZURlY29kZXI6OmRlY29kZUF0SW5kZXgoc2l6ZQogICAgIH0KIAogICAg
IGlmICghbV9wbmdEZWNvZGVyc1tpbmRleF0pIHsKLSAgICAgICAgbV9wbmdEZWNvZGVyc1tpbmRl
eF0uc2V0KG5ldyBQTkdJbWFnZURlY29kZXIoKSk7CisgICAgICAgIG1fcG5nRGVjb2RlcnNbaW5k
ZXhdLnNldChuZXcgUE5HSW1hZ2VEZWNvZGVyKG1fcHJlbXVsdGlwbHlBbHBoYSkpOwogICAgICAg
ICBzZXREYXRhRm9yUE5HRGVjb2RlckF0SW5kZXgoaW5kZXgpOwogICAgIH0KICAgICAvLyBGYWls
IGlmIHRoZSBzaXplIHRoZSBQTkdJbWFnZURlY29kZXIgY2FsY3VsYXRlZCBkb2VzIG5vdCBtYXRj
aCB0aGUgc2l6ZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9pY28vSUNP
SW1hZ2VEZWNvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9pY28vSUNPSW1hZ2VEZWNvZGVyLmgJKHJldmlzaW9uIDY2MDIwKQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9pY28vSUNPSW1hZ2VEZWNvZGVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQwLDcgKzQwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIC8vIFRoaXMgY2xh
c3MgZGVjb2RlcyB0aGUgSUNPIGFuZCBDVVIgaW1hZ2UgZm9ybWF0cy4KICAgICBjbGFzcyBJQ09J
bWFnZURlY29kZXIgOiBwdWJsaWMgSW1hZ2VEZWNvZGVyIHsKICAgICBwdWJsaWM6Ci0gICAgICAg
IElDT0ltYWdlRGVjb2RlcigpOworICAgICAgICBJQ09JbWFnZURlY29kZXIoYm9vbCBwcmVtdWx0
aXBseUFscGhhKTsKICAgICAgICAgdmlydHVhbCB+SUNPSW1hZ2VEZWNvZGVyKCk7CiAKICAgICAg
ICAgLy8gSW1hZ2VEZWNvZGVyCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJz
L2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIuY3BwCShyZXZpc2lvbiA2NjAy
MCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNv
ZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYxLDcgKzM2MSw4IEBAIHZvaWQgdGVybV9zb3Vy
Y2Uoal9kZWNvbXByZXNzX3B0ciBqZCkKICAgICBzcmMtPmRlY29kZXItPmRlY29kZXIoKS0+anBl
Z0NvbXBsZXRlKCk7CiB9CiAKLUpQRUdJbWFnZURlY29kZXI6OkpQRUdJbWFnZURlY29kZXIoKQor
SlBFR0ltYWdlRGVjb2Rlcjo6SlBFR0ltYWdlRGVjb2Rlcihib29sIHByZW11bHRpcGx5QWxwaGEp
CisgICAgOiBJbWFnZURlY29kZXIocHJlbXVsdGlwbHlBbHBoYSkKIHsKIH0KIApAQCAtMzkxLDgg
KzM5MiwxMCBAQCBSR0JBMzJCdWZmZXIqIEpQRUdJbWFnZURlY29kZXI6OmZyYW1lQnVmCiAgICAg
aWYgKGluZGV4KQogICAgICAgICByZXR1cm4gMDsKIAotICAgIGlmIChtX2ZyYW1lQnVmZmVyQ2Fj
aGUuaXNFbXB0eSgpKQorICAgIGlmIChtX2ZyYW1lQnVmZmVyQ2FjaGUuaXNFbXB0eSgpKSB7CiAg
ICAgICAgIG1fZnJhbWVCdWZmZXJDYWNoZS5yZXNpemUoMSk7CisgICAgICAgIG1fZnJhbWVCdWZm
ZXJDYWNoZVswXS5zZXRQcmVtdWx0aXBseUFscGhhKG1fcHJlbXVsdGlwbHlBbHBoYSk7CisgICAg
fQogCiAgICAgUkdCQTMyQnVmZmVyJiBmcmFtZSA9IG1fZnJhbWVCdWZmZXJDYWNoZVswXTsKICAg
ICBpZiAoZnJhbWUuc3RhdHVzKCkgIT0gUkdCQTMyQnVmZmVyOjpGcmFtZUNvbXBsZXRlKQpJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBF
R0ltYWdlRGVjb2Rlci5oCShyZXZpc2lvbiA2NjAyMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3
LDcgKzM3LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIC8vIFRoaXMgY2xhc3MgZGVjb2Rl
cyB0aGUgSlBFRyBpbWFnZSBmb3JtYXQuCiAgICAgY2xhc3MgSlBFR0ltYWdlRGVjb2RlciA6IHB1
YmxpYyBJbWFnZURlY29kZXIgewogICAgIHB1YmxpYzoKLSAgICAgICAgSlBFR0ltYWdlRGVjb2Rl
cigpOworICAgICAgICBKUEVHSW1hZ2VEZWNvZGVyKGJvb2wgcHJlbXVsdGlwbHlBbHBoYSk7CiAg
ICAgICAgIHZpcnR1YWwgfkpQRUdJbWFnZURlY29kZXIoKTsKIAogICAgICAgICAvLyBJbWFnZURl
Y29kZXIKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdl
RGVjb2Rlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVy
cy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmNwcAkocmV2aXNpb24gNjYwMjApCisrKyBXZWJDb3JlL3Bs
YXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xNjksOCArMTY5LDkgQEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX2N1cnJlbnRC
dWZmZXJTaXplOwogfTsKIAotUE5HSW1hZ2VEZWNvZGVyOjpQTkdJbWFnZURlY29kZXIoKQotICAg
IDogbV9kb05vdGhpbmdPbkZhaWx1cmUoZmFsc2UpCitQTkdJbWFnZURlY29kZXI6OlBOR0ltYWdl
RGVjb2Rlcihib29sIHByZW11bHRpcGx5QWxwaGEpCisgICAgOiBJbWFnZURlY29kZXIocHJlbXVs
dGlwbHlBbHBoYSkKKyAgICAsIG1fZG9Ob3RoaW5nT25GYWlsdXJlKGZhbHNlKQogewogfQogCkBA
IC0yMDAsOCArMjAxLDEwIEBAIFJHQkEzMkJ1ZmZlciogUE5HSW1hZ2VEZWNvZGVyOjpmcmFtZUJ1
ZmYKICAgICBpZiAoaW5kZXgpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgaWYgKG1fZnJhbWVC
dWZmZXJDYWNoZS5pc0VtcHR5KCkpCisgICAgaWYgKG1fZnJhbWVCdWZmZXJDYWNoZS5pc0VtcHR5
KCkpIHsKICAgICAgICAgbV9mcmFtZUJ1ZmZlckNhY2hlLnJlc2l6ZSgxKTsKKyAgICAgICAgbV9m
cmFtZUJ1ZmZlckNhY2hlWzBdLnNldFByZW11bHRpcGx5QWxwaGEobV9wcmVtdWx0aXBseUFscGhh
KTsKKyAgICB9CiAKICAgICBSR0JBMzJCdWZmZXImIGZyYW1lID0gbV9mcmFtZUJ1ZmZlckNhY2hl
WzBdOwogICAgIGlmIChmcmFtZS5zdGF0dXMoKSAhPSBSR0JBMzJCdWZmZXI6OkZyYW1lQ29tcGxl
dGUpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURl
Y29kZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3Bu
Zy9QTkdJbWFnZURlY29kZXIuaAkocmV2aXNpb24gNjYwMjApCisrKyBXZWJDb3JlL3BsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
MzYsNyArMzYsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgLy8gVGhpcyBjbGFzcyBkZWNv
ZGVzIHRoZSBQTkcgaW1hZ2UgZm9ybWF0LgogICAgIGNsYXNzIFBOR0ltYWdlRGVjb2RlciA6IHB1
YmxpYyBJbWFnZURlY29kZXIgewogICAgIHB1YmxpYzoKLSAgICAgICAgUE5HSW1hZ2VEZWNvZGVy
KCk7CisgICAgICAgIFBOR0ltYWdlRGVjb2Rlcihib29sIHByZW11bHRpcGx5QWxwaGEpOwogICAg
ICAgICB2aXJ0dWFsIH5QTkdJbWFnZURlY29kZXIoKTsKIAogICAgICAgICAvLyBJbWFnZURlY29k
ZXIKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvc2tpYS9JbWFnZURlY29k
ZXJTa2lhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJz
L3NraWEvSW1hZ2VEZWNvZGVyU2tpYS5jcHAJKHJldmlzaW9uIDY2MDIwKQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9za2lhL0ltYWdlRGVjb2RlclNraWEuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMyw2ICszMyw3IEBAIFJHQkEzMkJ1ZmZlcjo6UkdCQTMyQnVmZmVyKCkKICAg
ICA6IG1fc3RhdHVzKEZyYW1lRW1wdHkpCiAgICAgLCBtX2R1cmF0aW9uKDApCiAgICAgLCBtX2Rp
c3Bvc2FsTWV0aG9kKERpc3Bvc2VOb3RTcGVjaWZpZWQpCisgICAgLCBtX3ByZW11bHRpcGx5QWxw
aGEodHJ1ZSkKIHsKIH0KIApAQCAtNDksNiArNTAsNyBAQCBSR0JBMzJCdWZmZXImIFJHQkEzMkJ1
ZmZlcjo6b3BlcmF0b3I9KGNvCiAgICAgc2V0U3RhdHVzKG90aGVyLnN0YXR1cygpKTsKICAgICBz
ZXREdXJhdGlvbihvdGhlci5kdXJhdGlvbigpKTsKICAgICBzZXREaXNwb3NhbE1ldGhvZChvdGhl
ci5kaXNwb3NhbE1ldGhvZCgpKTsKKyAgICBzZXRQcmVtdWx0aXBseUFscGhhKG90aGVyLnByZW11
bHRpcGx5QWxwaGEoKSk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkluZGV4OiBXZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDY2MDIwKQorKysgV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkod29ya2luZyBj
b3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDEwLTA4LTI0ICBaaGVueWFvIE1vICA8em1vQGdvb2ds
ZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
UGFzc2luZyBwcmVtdWx0aXBseUFscGhhPWZhbHNlIHRvIHRleHtTdWJ9SW1hZ2UyRCBsb3NlcyBp
bmZvcm1hdGlvbiAoc2tpYSkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTM4MjgyCisKKyAgICAgICAgKiBzcmMvV2ViSW1hZ2VEZWNvZGVyLmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6V2ViSW1hZ2VEZWNvZGVyOjppbml0KTogQWRkIHByZW11bHRpcGx5QWxw
aGEgZmxhZy4KKwogMjAxMC0wOC0yNSAgU2F0aXNoIFNhbXBhdGggIDxzYXRpc2hAY2hyb21pdW0u
b3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEplcmVteSBPcmxvdy4KSW5kZXg6IFdlYktpdC9j
aHJvbWl1bS9zcmMvV2ViSW1hZ2VEZWNvZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hy
b21pdW0vc3JjL1dlYkltYWdlRGVjb2Rlci5jcHAJKHJldmlzaW9uIDY2MDIwKQorKysgV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJJbWFnZURlY29kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Niwx
MCArNTYsMTAgQEAgdm9pZCBXZWJJbWFnZURlY29kZXI6OmluaXQoVHlwZSB0eXBlKQogewogICAg
IHN3aXRjaCAodHlwZSkgewogICAgIGNhc2UgVHlwZUJNUDoKLSAgICAgICAgbV9wcml2YXRlID0g
bmV3IEJNUEltYWdlRGVjb2RlcigpOworICAgICAgICBtX3ByaXZhdGUgPSBuZXcgQk1QSW1hZ2VE
ZWNvZGVyKHRydWUpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFR5cGVJQ086Ci0gICAgICAg
IG1fcHJpdmF0ZSA9IG5ldyBJQ09JbWFnZURlY29kZXIoKTsKKyAgICAgICAgbV9wcml2YXRlID0g
bmV3IElDT0ltYWdlRGVjb2Rlcih0cnVlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogfQpJbmRl
eDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5n
ZUxvZwkocmV2aXNpb24gNjYwMjApCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMyArMSwyOCBAQAorMjAxMC0wOC0yNCAgWmhlbnlhbyBNbyAgPHptb0Bnb29n
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFBhc3NpbmcgcHJlbXVsdGlwbHlBbHBoYT1mYWxzZSB0byB0ZXh7U3VifUltYWdlMkQgbG9zZXMg
aW5mb3JtYXRpb24gKHNraWEpCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0zODI4MgorCisgICAgICAgICogZmFzdC9jYW52YXMvd2ViZ2wvZ2wtdGV4aW1h
Z2UtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2NhbnZhcy93ZWJnbC9nbC10
ZXhpbWFnZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2NhbnZhcy93ZWJnbC9yZXNvdXJj
ZXMvM3gzLnBuZzogQWRkZWQuCisgICAgICAgICogZmFzdC9jYW52YXMvd2ViZ2wvcmVzb3VyY2Vz
L2dyYXktcmFtcC0yNTYtd2l0aC0xMjgtYWxwaGEucG5nOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0
L2NhbnZhcy93ZWJnbC9yZXNvdXJjZXMvZ3JheS1yYW1wLTI1Ni5wbmc6IEFkZGVkLgorICAgICAg
ICAqIGZhc3QvY2FudmFzL3dlYmdsL3Jlc291cmNlcy9ncmF5LXJhbXAtZGVmYXVsdC1nYW1tYS5w
bmc6IEFkZGVkLgorICAgICAgICAqIGZhc3QvY2FudmFzL3dlYmdsL3Jlc291cmNlcy9ncmF5LXJh
bXAtZ2FtbWEwLjEucG5nOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2NhbnZhcy93ZWJnbC9yZXNv
dXJjZXMvZ3JheS1yYW1wLWdhbW1hMS4wLnBuZzogQWRkZWQuCisgICAgICAgICogZmFzdC9jYW52
YXMvd2ViZ2wvcmVzb3VyY2VzL2dyYXktcmFtcC1nYW1tYTIuMC5wbmc6IEFkZGVkLgorICAgICAg
ICAqIGZhc3QvY2FudmFzL3dlYmdsL3Jlc291cmNlcy9ncmF5LXJhbXAtZ2FtbWE0LjAucG5nOiBB
ZGRlZC4KKyAgICAgICAgKiBmYXN0L2NhbnZhcy93ZWJnbC9yZXNvdXJjZXMvZ3JheS1yYW1wLWdh
bW1hOS4wLnBuZzogQWRkZWQuCisgICAgICAgICogZmFzdC9jYW52YXMvd2ViZ2wvcmVzb3VyY2Vz
L2dyYXktcmFtcC5wbmc6IEFkZGVkLgorICAgICAgICAqIGZhc3QvY2FudmFzL3dlYmdsL3Jlc291
cmNlcy93ZWJnbC10ZXN0LXV0aWxzLmpzOiBTeW5jIHdpdGgga2hyb25vcy4KKyAgICAgICAgKFdl
YkdMVGVzdFV0aWxzKToKKyAgICAgICAgKiBmYXN0L2NhbnZhcy93ZWJnbC9yZXNvdXJjZXMvemVy
by1hbHBoYS5wbmc6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL3Rlc3RfZXhw
ZWN0YXRpb25zLnR4dDogRG9uJ3QgcnVuIGdsLXRleGltYWdlLmh0bWwgZm9yIG1hYy4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9tYWMvU2tpcHBlZDogRG9uJ3QgcnVuIGdsLXRleGltYWdlLmh0bWwgZm9y
IG1hYy4KKwogMjAxMC0wOC0yNSAgVG9ueSBDaGFuZyAgPHRvbnlAY2hyb21pdW0ub3JnPgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IE9qYW4gVmFmYWkuCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2Nh
bnZhcy93ZWJnbC9nbC10ZXhpbWFnZS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvZ2wtdGV4aW1hZ2UtZXhwZWN0ZWQudHh0CShyZXZpc2lv
biAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvZ2wtdGV4aW1hZ2UtZXhwZWN0
ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDYyIEBACitDT05TT0xFIE1FU1NBR0U6IGxp
bmUgMjYwOiBSZWZlcmVuY2VFcnJvcjogQ2FuJ3QgZmluZCB2YXJpYWJsZTogbm90aWZ5RmluaXNo
ZWRUb0hhcm5lc3MKK1Rlc3QgdGV4SW1hZ2UyRCBjb252ZXJzaW9ucy4KKworT24gc3VjY2Vzcywg
eW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRF
U1QgQ09NUExFVEUiLgorCitQQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJS
T1IgOiBTaG91bGQgYmUgbm8gZXJyb3JzIGZyb20gc2V0dXAuCisKK2NoZWNrIHBpeGVscyBhcmUg
Tk9UIHByZS1tdWx0aXBsaWVkCitQQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9f
RVJST1IgOiBTaG91bGQgYmUgbm8gZXJyb3JzIGZyb20gc2V0dXAKK1BBU1MgcGl4ZWwgMCwgMTUg
c2hvdWxkIGJlIDAsIDAsIDAsIDI1NSB3YXMgMCwgMCwgMCwgMjU1CitQQVNTIHBpeGVsIDEyOCwg
MTUgc2hvdWxkIGJlIDI1NSwgMCwgMjU1LCAyNTUgd2FzIDI1NSwgMCwgMCwgMjU1CitQQVNTIHBp
eGVsIDI1NSwgMTUgc2hvdWxkIGJlIDAsIDAsIDI1NSwgMjU1IHdhcyAwLCAwLCAyNTUsIDI1NQor
UEFTUyBwaXhlbCAwLCA4IHNob3VsZCBiZSAxMjgsIDEyOCwgMTI4LCAyNTUgd2FzIDEyOCwgMTI4
LCAxMjgsIDI1NQorUEFTUyBwaXhlbCAxMjgsIDggc2hvdWxkIGJlIDI1NSwgMjU1LCAyNTUsIDI1
NSB3YXMgMjU1LCAyNTUsIDI1NSwgMjU1CitQQVNTIHBpeGVsIDI1NSwgOCBzaG91bGQgYmUgMCwg
MjU1LCAyNTUsIDI1NSB3YXMgMCwgMjU1LCAyNTUsIDI1NQorUEFTUyBwaXhlbCAwLCAwIHNob3Vs
ZCBiZSAyNTUsIDAsIDAsIDI1NSB3YXMgMjU1LCAwLCAwLCAyNTUKK1BBU1MgcGl4ZWwgMTI4LCAw
IHNob3VsZCBiZSAyNTUsIDI1NSwgMCwgMjU1IHdhcyAyNTUsIDI1NSwgMCwgMjU1CitQQVNTIHBp
eGVsIDI1NSwgMCBzaG91bGQgYmUgMCwgMjU1LCAwLCAyNTUgd2FzIDAsIDI1NSwgMCwgMjU1CisK
K2NoZWNrIHF1YW50aXphdGlvbgorUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5P
X0VSUk9SIDogU2hvdWxkIGJlIG5vIGVycm9ycyBmcm9tIHNldHVwLgorUEFTUyBUaGVyZSBzaG91
bGQgYmUgMjU2IHVuaXF1ZSB2YWx1ZXMgaW4gY2hhbm5lbCAwLiBGb3VuZCAyNTYKK1BBU1MgVGhl
cmUgc2hvdWxkIGJlIDI1NiB1bmlxdWUgdmFsdWVzIGluIGNoYW5uZWwgMS4gRm91bmQgMjU2CitQ
QVNTIFRoZXJlIHNob3VsZCBiZSAyNTYgdW5pcXVlIHZhbHVlcyBpbiBjaGFubmVsIDIuIEZvdW5k
IDI1NgorUEFTUyBUaGVyZSBzaG91bGQgYmUgMjU2IHVuaXF1ZSB2YWx1ZXMgaW4gY2hhbm5lbCAz
LiBGb3VuZCAyNTYKK1BBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6
IFNob3VsZCBiZSBubyBlcnJvcnMgZnJvbSBzZXR1cC4KK1BBU1MgVGhlcmUgc2hvdWxkIGJlIDE2
IHVuaXF1ZSB2YWx1ZXMgaW4gY2hhbm5lbCAwLiBGb3VuZCAxNgorUEFTUyBUaGVyZSBzaG91bGQg
YmUgMTYgdW5pcXVlIHZhbHVlcyBpbiBjaGFubmVsIDEuIEZvdW5kIDE2CitQQVNTIFRoZXJlIHNo
b3VsZCBiZSAxNiB1bmlxdWUgdmFsdWVzIGluIGNoYW5uZWwgMi4gRm91bmQgMTYKK1BBU1MgVGhl
cmUgc2hvdWxkIGJlIDE2IHVuaXF1ZSB2YWx1ZXMgaW4gY2hhbm5lbCAzLiBGb3VuZCAxNgorUEFT
UyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogU2hvdWxkIGJlIG5vIGVy
cm9ycyBmcm9tIHNldHVwLgorUEFTUyBUaGVyZSBzaG91bGQgYmUgMzIgdW5pcXVlIHZhbHVlcyBp
biBjaGFubmVsIDAuIEZvdW5kIDMyCitQQVNTIFRoZXJlIHNob3VsZCBiZSA2NCB1bmlxdWUgdmFs
dWVzIGluIGNoYW5uZWwgMS4gRm91bmQgNjQKK1BBU1MgVGhlcmUgc2hvdWxkIGJlIDMyIHVuaXF1
ZSB2YWx1ZXMgaW4gY2hhbm5lbCAyLiBGb3VuZCAzMgorUEFTUyBUaGVyZSBzaG91bGQgYmUgMSB1
bmlxdWUgdmFsdWVzIGluIGNoYW5uZWwgMy4gRm91bmQgMQorUEFTUyBnZXRFcnJvciB3YXMgZXhw
ZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogU2hvdWxkIGJlIG5vIGVycm9ycyBmcm9tIHNldHVwLgor
UEFTUyBUaGVyZSBzaG91bGQgYmUgMzIgdW5pcXVlIHZhbHVlcyBpbiBjaGFubmVsIDAuIEZvdW5k
IDMyCitQQVNTIFRoZXJlIHNob3VsZCBiZSAzMiB1bmlxdWUgdmFsdWVzIGluIGNoYW5uZWwgMS4g
Rm91bmQgMzIKK1BBU1MgVGhlcmUgc2hvdWxkIGJlIDMyIHVuaXF1ZSB2YWx1ZXMgaW4gY2hhbm5l
bCAyLiBGb3VuZCAzMgorUEFTUyBUaGVyZSBzaG91bGQgYmUgMiB1bmlxdWUgdmFsdWVzIGluIGNo
YW5uZWwgMy4gRm91bmQgMgorCitjaGVjayBwaXhlbHMgYXJlIHByZS1tdWx0aXBsaWVkCitQQVNT
IGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiBTaG91bGQgYmUgbm8gZXJy
b3JzIGZyb20gc2V0dXAKK1BBU1MgcGl4ZWxzIHNob3VsZCBhbGwgYmUgMC4KKworY2hlY2sgcGl4
ZWxzIGFyZSBmbGlwcGVkCitQQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJS
T1IgOiBTaG91bGQgYmUgbm8gZXJyb3JzIGZyb20gc2V0dXAKK1BBU1MgcGl4ZWwgMCwgMTUgc2hv
dWxkIGJlIDI1NSwgMCwgMCwgMjU1IHdhcyAyNTUsIDAsIDAsIDI1NQorUEFTUyBwaXhlbCAxMjgs
IDE1IHNob3VsZCBiZSAyNTUsIDI1NSwgMCwgMjU1IHdhcyAyNTUsIDI1NSwgMCwgMjU1CitQQVNT
IHBpeGVsIDI1NSwgMTUgc2hvdWxkIGJlIDI1NSwgMCwgMCwgMjU1IHdhcyAyNTUsIDAsIDAsIDI1
NQorUEFTUyBwaXhlbCAwLCA4IHNob3VsZCBiZSAyNTUsIDAsIDI1NSwgMjU1IHdhcyAyNTUsIDAs
IDI1NSwgMjU1CitQQVNTIHBpeGVsIDEyOCwgOCBzaG91bGQgYmUgMjU1LCAwLCAwLCAyNTUgd2Fz
IDI1NSwgMCwgMCwgMjU1CitQQVNTIHBpeGVsIDI1NSwgOCBzaG91bGQgYmUgMCwgMjU1LCAwLCAy
NTUgd2FzIDAsIDI1NSwgMCwgMjU1CitQQVNTIHBpeGVsIDAsIDAgc2hvdWxkIGJlIDAsIDAsIDAs
IDI1NSB3YXMgMCwgMCwgMCwgMjU1CitQQVNTIHBpeGVsIDEyOCwgMCBzaG91bGQgYmUgMCwgMCwg
MjU1LCAyNTUgd2FzIDAsIDAsIDI1NSwgMjU1CitQQVNTIHBpeGVsIDI1NSwgMCBzaG91bGQgYmUg
MjU1LCAwLCAwLCAyNTUgd2FzIDI1NSwgMCwgMCwgMjU1CitQQVNTIGdldEVycm9yIHdhcyBleHBl
Y3RlZCB2YWx1ZTogTk9fRVJST1IgOiBTaG91bGQgYmUgbm8gZXJyb3JzCisKK1BBU1Mgc3VjY2Vz
c2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0
cy9mYXN0L2NhbnZhcy93ZWJnbC9nbC10ZXhpbWFnZS5odG1sCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2dsLXRleGltYWdlLmh0bWwJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9nbC10ZXhpbWFnZS5odG1sCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDI2NSBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RU
RCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIKKyAgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0
bWw0L2xvb3NlLmR0ZCI+Cis8aHRtbD4KKzxoZWFkPgorPHRpdGxlPldlYkdMIHRleEltYWdlMkQg
Y29uZm9ybWFuY2UgdGVzdC48L3RpdGxlPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIu
Li8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiLz4KKzxzY3JpcHQgc3JjPSIuLi8u
Li9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJl
c291cmNlcy93ZWJnbC10ZXN0LmpzIj4gPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2Vz
L3dlYmdsLXRlc3QtdXRpbHMuanMiPiA8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGNhbnZh
cyBpZD0iZXhhbXBsZSIgd2lkdGg9IjI1NiIgaGVpZ2h0PSIxNiIgc3R5bGU9IndpZHRoOiAyNTZw
eDsgaGVpZ2h0OiA0OHB4OyI+PC9jYW52YXM+Cis8ZGl2IGlkPSJkZXNjcmlwdGlvbiI+PC9kaXY+
Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQ+CitkZXNjcmlwdGlvbigiVGVzdCB0
ZXhJbWFnZTJEIGNvbnZlcnNpb25zLiIpOwordmFyIHd0dSA9IFdlYkdMVGVzdFV0aWxzOwordmFy
IGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJleGFtcGxlIik7Cit2YXIgZ2wgPSB3
dHUuY3JlYXRlM0RDb250ZXh0KGNhbnZhcyk7Cit2YXIgcHJvZ3JhbSA9IHd0dS5zZXR1cFRleHR1
cmVkUXVhZChnbCk7CisKK2dsRXJyb3JTaG91bGRCZShnbCwgZ2wuTk9fRVJST1IsICJTaG91bGQg
YmUgbm8gZXJyb3JzIGZyb20gc2V0dXAuIik7CisKK3ZhciBpbWdVUkxzID0gWworICAncmVzb3Vy
Y2VzL2dyYXktcmFtcC0yNTYtd2l0aC0xMjgtYWxwaGEucG5nJywKKyAgJ3Jlc291cmNlcy9ncmF5
LXJhbXAtMjU2LnBuZycsCisgICdyZXNvdXJjZXMvZ3JheS1yYW1wLWRlZmF1bHQtZ2FtbWEucG5n
JywKKyAgJ3Jlc291cmNlcy9ncmF5LXJhbXAtZ2FtbWEwLjEucG5nJywKKyAgJ3Jlc291cmNlcy9n
cmF5LXJhbXAtZ2FtbWExLjAucG5nJywKKyAgJ3Jlc291cmNlcy9ncmF5LXJhbXAtZ2FtbWEyLjAu
cG5nJywKKyAgJ3Jlc291cmNlcy9ncmF5LXJhbXAtZ2FtbWE0LjAucG5nJywKKyAgJ3Jlc291cmNl
cy9ncmF5LXJhbXAtZ2FtbWE5LjAucG5nJywKKyAgJ3Jlc291cmNlcy9ncmF5LXJhbXAucG5nJywK
KyAgJ3Jlc291cmNlcy96ZXJvLWFscGhhLnBuZycsCisgICdyZXNvdXJjZXMvM3gzLnBuZyddOwor
Cit3dHUubG9hZEltYWdlc0FzeW5jKGltZ1VSTHMsIHJ1blRlc3RzKTsKKworZnVuY3Rpb24gcnVu
VGVzdHMoaW1ncykgeworCisgIHZhciBsb2MgPSBnbC5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3Jh
bSwgInRleCIpOworICBnbC51bmlmb3JtMWkobG9jLCAwKTsKKworICBnbC5kaXNhYmxlKGdsLkJM
RU5EKTsKKyAgZ2wuZGlzYWJsZShnbC5ERVBUSF9URVNUKTsKKworICB2YXIgd2lkdGggPSBjYW52
YXMud2lkdGg7CisgIHZhciBoZWlnaHQgPSBjYW52YXMuaGVpZ2h0OworCisgIGZ1bmN0aW9uIGNo
ZWNrUGl4ZWwoYnVmLCB4LCB5LCBjb2xvcikgeworICAgIHZhciBvZmYgPSAoeSAqIHdpZHRoICsg
eCkgKiA0OworICAgIHZhciBtc2cgPSAicGl4ZWwgIiArIHggKyAiLCAiICsgeSArICIgc2hvdWxk
IGJlICIgKworICAgICAgICAgICAgICBjb2xvclswXSArICIsICIgKworICAgICAgICAgICAgICBj
b2xvclsxXSArICIsICIgKworICAgICAgICAgICAgICBjb2xvclsyXSArICIsICIgKworICAgICAg
ICAgICAgICBjb2xvclszXSArICIgd2FzICIgKworICAgICAgICAgICAgICBidWZbb2ZmICsgMF0g
KyAiLCAiICsKKyAgICAgICAgICAgICAgYnVmW29mZiArIDFdICsgIiwgIiArCisgICAgICAgICAg
ICAgIGJ1ZltvZmYgKyAyXSArICIsICIgKworICAgICAgICAgICAgICBidWZbb2ZmICsgM107CisK
KyAgICBmb3IgKHZhciBpaSA9IDA7IGlpIDwgNDsgKytpaSkgeworICAgICAgaWYgKGJ1ZltvZmYg
KyBpaV0gIT0gY29sb3JbaWldKSB7CisgICAgICAgIHRlc3RGYWlsZWQobXNnKTsKKyAgICAgICAg
cmV0dXJuOworICAgICAgfQorICAgIH0KKyAgICB0ZXN0UGFzc2VkKG1zZyk7CisgIH0KKworICB2
YXIgdGV4ID0gZ2wuY3JlYXRlVGV4dHVyZSgpOworICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJF
XzJELCB0ZXgpOworICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVf
V1JBUF9TLCBnbC5DTEFNUF9UT19FREdFKTsKKyAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJF
XzJELCBnbC5URVhUVVJFX1dSQVBfVCwgZ2wuQ0xBTVBfVE9fRURHRSk7CisgIGdsLnRleFBhcmFt
ZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9NSU5fRklMVEVSLCBnbC5ORUFSRVNUKTsK
KyAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01BR19GSUxURVIs
IGdsLk5FQVJFU1QpOworCisgIHZhciBidWYgPSBuZXcgVWludDhBcnJheSh3aWR0aCAqIGhlaWdo
dCAqIDQpOworCisgIGRlYnVnKCIiKTsKKyAgZGVidWcoImNoZWNrIHBpeGVscyBhcmUgTk9UIHBy
ZS1tdWx0aXBsaWVkIik7CisgIGdsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgZ2wuUkdC
LCBnbC5SR0IsIGdsLlVOU0lHTkVEX0JZVEUsCisgICAgICAgICAgICAgICAgaW1nc1sncmVzb3Vy
Y2VzL3plcm8tYWxwaGEucG5nJ10pOworICBnbEVycm9yU2hvdWxkQmUoZ2wsIGdsLk5PX0VSUk9S
LCAiU2hvdWxkIGJlIG5vIGVycm9ycyBmcm9tIHNldHVwIik7CisgIHd0dS5kcmF3UXVhZChnbCk7
CisgIGdsLnJlYWRQaXhlbHMoMCwgMCwgd2lkdGgsIGhlaWdodCwgZ2wuUkdCQSwgZ2wuVU5TSUdO
RURfQllURSwgYnVmKTsKKworICB2YXIgbGVmdCA9IDA7CisgIHZhciBtaWRkbGUgPSBNYXRoLmZs
b29yKHdpZHRoIC8gMik7CisgIHZhciByaWdodCA9IHdpZHRoIC0gMTsKKyAgdmFyIGJvdHRvbSA9
IDA7CisgIHZhciBjZW50ZXIgPSBNYXRoLmZsb29yKGhlaWdodCAvIDIpOworICB2YXIgdG9wID0g
aGVpZ2h0IC0gMTsKKyAgY2hlY2tQaXhlbChidWYsIGxlZnQsICAgdG9wLCAgICBbICAwLCAgIDAs
ICAgMCwgMjU1XSk7CisgIGNoZWNrUGl4ZWwoYnVmLCBtaWRkbGUsIHRvcCwgICAgWzI1NSwgICAw
LCAyNTUsIDI1NV0pOworICBjaGVja1BpeGVsKGJ1ZiwgcmlnaHQsICB0b3AsICAgIFsgIDAsICAg
MCwgMjU1LCAyNTVdKTsKKyAgY2hlY2tQaXhlbChidWYsIGxlZnQsICAgY2VudGVyLCBbMTI4LCAx
MjgsIDEyOCwgMjU1XSk7CisgIGNoZWNrUGl4ZWwoYnVmLCBtaWRkbGUsIGNlbnRlciwgWzI1NSwg
MjU1LCAyNTUsIDI1NV0pOworICBjaGVja1BpeGVsKGJ1ZiwgcmlnaHQsICBjZW50ZXIsIFsgIDAs
IDI1NSwgMjU1LCAyNTVdKTsKKyAgY2hlY2tQaXhlbChidWYsIGxlZnQsICAgYm90dG9tLCBbMjU1
LCAgIDAsICAgMCwgMjU1XSk7CisgIGNoZWNrUGl4ZWwoYnVmLCBtaWRkbGUsIGJvdHRvbSwgWzI1
NSwgMjU1LCAgIDAsIDI1NV0pOworICBjaGVja1BpeGVsKGJ1ZiwgcmlnaHQsICBib3R0b20sIFsg
IDAsIDI1NSwgICAwLCAyNTVdKTsKKworICBkZWJ1ZygiIik7CisgIGRlYnVnKCJjaGVjayBxdWFu
dGl6YXRpb24iKTsKKyAgdmFyIHF1YW50SW5mbyA9IFsKKyAgICB7Zm9ybWF0OiBnbC5SR0JBLCB0
eXBlOiBnbC5VTlNJR05FRF9CWVRFLCAgICAgICAgICBjb3VudHM6IFsyNTYsIDI1NiwgMjU2LCAy
NTZdfSwKKyAgICB7Zm9ybWF0OiBnbC5SR0JBLCB0eXBlOiBnbC5VTlNJR05FRF9TSE9SVF80XzRf
NF80LCBjb3VudHM6IFsgMTYsICAxNiwgIDE2LCAgMTZdfSwKKyAgICB7Zm9ybWF0OiBnbC5SR0Is
ICB0eXBlOiBnbC5VTlNJR05FRF9TSE9SVF81XzZfNSwgICBjb3VudHM6IFsgMzIsICA2NCwgIDMy
LCAgIDFdfSwKKyAgICB7Zm9ybWF0OiBnbC5SR0JBLCB0eXBlOiBnbC5VTlNJR05FRF9TSE9SVF81
XzVfNV8xLCBjb3VudHM6IFsgMzIsICAzMiwgIDMyLCAgIDJdfV07CisgIGZvciAodmFyIHFxID0g
MDsgcXEgPCBxdWFudEluZm8ubGVuZ3RoOyArK3FxKSB7CisgICAgdmFyIGluZm8gPSBxdWFudElu
Zm9bcXFdOworICAgIGdsLnRleEltYWdlMkQoCisgICAgICAgIGdsLlRFWFRVUkVfMkQsIDAsIGlu
Zm8uZm9ybWF0LCBpbmZvLmZvcm1hdCwgaW5mby50eXBlLAorICAgICAgICBpbWdzWydyZXNvdXJj
ZXMvZ3JheS1yYW1wLTI1Ni5wbmcnXSk7CisgICAgZ2xFcnJvclNob3VsZEJlKGdsLCBnbC5OT19F
UlJPUiwgIlNob3VsZCBiZSBubyBlcnJvcnMgZnJvbSBzZXR1cC4iKTsKKyAgICB3dHUuZHJhd1F1
YWQoZ2wpOworICAgIGdsLnJlYWRQaXhlbHMoMCwgMCwgd2lkdGgsIGhlaWdodCwgZ2wuUkdCQSwg
Z2wuVU5TSUdORURfQllURSwgYnVmKTsKKyAgICB2YXIgY291bnRzID0gW3sgfSwgeyB9LCB7IH0s
IHsgfV07CisgICAgdmFyIG51bVVuaXF1ZVZhbHVlcyA9IFswLCAwLCAwLCAwXTsKKyAgICAvLyBD
b3VudCB0aGUgbnVtYmVyIG9mIHVuaXF1ZSB2YWx1ZXMgaW4gZWFjaCBjaGFubmVsLgorICAgIGZv
ciAodmFyIGlpID0gMDsgaWkgPCB3aWR0aCAqIGhlaWdodCAqIDQ7IGlpICs9IDQpIHsKKyAgICAg
IGZvciAodmFyIGpqID0gMDsgamogPCA0OyArK2pqKSB7CisgICAgICAgIHZhciB2ID0gYnVmW2lp
ICsgampdOworICAgICAgICBpZiAoIWNvdW50c1tqal1bdl0pIHsKKyAgICAgICAgICBjb3VudHNb
ampdW3ZdID0gMTsKKyAgICAgICAgICArK251bVVuaXF1ZVZhbHVlc1tqal07CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgKytjb3VudHNbampdW3ZdOworICAgICAgICB9CisgICAgICB9Cisg
ICAgfQorICAgIGZvciAodmFyIGlpID0gMDsgaWkgPCA0OyArK2lpKSB7CisgICAgICBhc3NlcnRN
c2cobnVtVW5pcXVlVmFsdWVzW2lpXSA9PSBpbmZvLmNvdW50c1tpaV0sCisgICAgICAgICAgICAg
ICAgIlRoZXJlIHNob3VsZCBiZSAiICsgaW5mby5jb3VudHNbaWldICsKKyAgICAgICAgICAgICAg
ICAiIHVuaXF1ZSB2YWx1ZXMgaW4gY2hhbm5lbCAiICsgaWkgKyAiLiBGb3VuZCAiICsKKyAgICAg
ICAgICAgICAgICBudW1VbmlxdWVWYWx1ZXNbaWldKTsKKyAgICB9CisgIH0KKworLy8gRklYTUUo
em1vKTogZml4IHRoZSBnYW1tYSBjb3JyZWN0aW9uIGFuZCBhZGQgYmFjayB0aGUgY29tbWVudGVk
IG91dCB0ZXN0cyBiZWxvdy4KKy8qCisgIGRlYnVnKCIiKTsKKyAgZGVidWcoIkNoZWNrIHRoYXQg
Z2FtbWEgc2V0dGluZ3MgZG9uJ3QgZWZmZWN0IDhiaXQgcG5ncyIpOworICBnbC50ZXhJbWFnZTJE
KGdsLlRFWFRVUkVfMkQsIDAsIGdsLlJHQiwgZ2wuUkdCLCBnbC5VTlNJR05FRF9CWVRFLAorICAg
ICAgICAgICAgICAgIGltZ3NbJ3Jlc291cmNlcy9ncmF5LXJhbXAtZGVmYXVsdC1nYW1tYS5wbmcn
XSk7CisgIGdsRXJyb3JTaG91bGRCZShnbCwgZ2wuTk9fRVJST1IsICJTaG91bGQgYmUgbm8gZXJy
b3JzIGZyb20gc2V0dXAuIik7CisgIHd0dS5kcmF3UXVhZChnbCk7CisgIHZhciByZWYgPSBuZXcg
VWludDhBcnJheSh3aWR0aCAqIGhlaWdodCAqIDQpOworICBnbC5yZWFkUGl4ZWxzKDAsIDAsIHdp
ZHRoLCBoZWlnaHQsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIHJlZik7CisKKyAgdmFyIGdh
bW1hSW1hZ2VzID0gWworICAgICdyZXNvdXJjZXMvZ3JheS1yYW1wLWdhbW1hMC4xLnBuZycsCisg
ICAgJ3Jlc291cmNlcy9ncmF5LXJhbXAtZ2FtbWExLjAucG5nJywKKyAgICAncmVzb3VyY2VzL2dy
YXktcmFtcC1nYW1tYTIuMC5wbmcnLAorICAgICdyZXNvdXJjZXMvZ3JheS1yYW1wLWdhbW1hNC4w
LnBuZycsCisgICAgJ3Jlc291cmNlcy9ncmF5LXJhbXAtZ2FtbWE5LjAucG5nJ107CisgIGZvciAo
dmFyIGlpID0gMDsgaWkgPCBnYW1tYUltYWdlcy5sZW5ndGg7ICsraWkpIHsKKyAgICBnbC50ZXhJ
bWFnZTJEKGdsLlRFWFRVUkVfMkQsIDAsIGdsLlJHQiwgZ2wuUkdCLCBnbC5VTlNJR05FRF9CWVRF
LAorICAgICAgICAgICAgICAgICAgaW1nc1tnYW1tYUltYWdlc1tpaV1dKTsKKyAgICB3dHUuZHJh
d1F1YWQoZ2wpOworICAgIGdsLnJlYWRQaXhlbHMoMCwgMCwgd2lkdGgsIGhlaWdodCwgZ2wuUkdC
QSwgZ2wuVU5TSUdORURfQllURSwgYnVmKTsKKyAgICB2YXIgc2FtZSA9IHRydWU7CisgICAgZm9y
ICh2YXIgamogPSAwOyBqaiA8IHdpZHRoICogaGVpZ2h0ICogNDsgKytqaikgeworICAgICAgaWYg
KGJ1Zltqal0gIT0gcmVmW2pqXSkgeworICAgICAgICBzYW1lID0gZmFsc2U7CisgICAgICAgIGJy
ZWFrOworICAgICAgfQorICAgIH0KKyAgICBhc3NlcnRNc2coc2FtZSwgInBpeGVscyBzaG91bGQg
YmUgc2FtZSByZWdhcmRsZXNzIG9mIGdhbW1hIHNldHRpbmdzLiIpOworICB9CisKKyAgZGVidWco
IiIpOworICBkZWJ1ZygiY2hlY2sgcGl4ZWxzIGFyZSBVTiBwcmUtbXVsdGlwbGllZCIpOworICB2
YXIgY2FudmFzMmQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTsKKyAgY2FudmFz
MmQud2lkdGggPSAyNTY7CisgIGNhbnZhczJkLmhlaWdodCA9IDE7CisgIC8vY2FudmFzMmQuc3R5
bGUuaGVpZ2h0ID0gIjQwcHgiOworICAvL3ZhciBkZXNjcmlwdGlvbiA9IGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCJkZXNjcmlwdGlvbiIpOworICAvL2Rlc2NyaXB0aW9uLmFwcGVuZENoaWxkKGNh
bnZhczJkKTsKKyAgdmFyIGN0eCA9IGNhbnZhczJkLmdldENvbnRleHQoIjJkIik7CisgIGN0eC5m
aWxsUmVjdCgwLCAwLCAyNTYsIDEpOworICBjdHguZHJhd0ltYWdlKGltZ3NbJ3Jlc291cmNlcy9n
cmF5LXJhbXAtMjU2LXdpdGgtMTI4LWFscGhhLnBuZyddLCAwLCAwKTsKKyAgZ2wudGV4SW1hZ2Uy
RChnbC5URVhUVVJFXzJELCAwLCBnbC5SR0IsIGdsLlJHQiwgZ2wuVU5TSUdORURfQllURSwgY2Fu
dmFzMmQpOworICBnbEVycm9yU2hvdWxkQmUoZ2wsIGdsLk5PX0VSUk9SLCAiU2hvdWxkIGJlIG5v
IGVycm9ycyBmcm9tIHNldHVwLiIpOworICB3dHUuZHJhd1F1YWQoZ2wpOworICB2YXIgcmVmID0g
bmV3IFVpbnQ4QXJyYXkod2lkdGggKiBoZWlnaHQgKiA0KTsKKyAgZ2wucmVhZFBpeGVscygwLCAw
LCB3aWR0aCwgaGVpZ2h0LCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCByZWYpOworICB2YXIg
bHQxMjhDb3VudCA9IFswLCAwLCAwXTsKKyAgdmFyIGdlMTI4Q291bnQgPSBbMCwgMCwgMF07Cisg
IGZvciAodmFyIGpqID0gMDsgamogPCB3aWR0aDsgKytqaikgeworICAgIHZhciBvZmYgPSBqaiAq
IDQ7CisgICAgZm9yICh2YXIgY2MgPSAwOyBjYyA8IDM7ICsrY2MpIHsKKyAgICAgIGlmIChidWZb
b2ZmICsgY2NdIDwgMTI4KSB7CisgICAgICAgICsrbHQxMjhDb3VudFtjY107CisgICAgICB9IGVs
c2UgeworICAgICAgICArK2dlMTI4Q291bnRbY2NdOworICAgICAgfQorICAgIH0KKyAgfQorICAv
LyBOb3Qgc3VyZSB0aGUgZXhhY3QgY291bnQgaGVyZSBiZWNhdXNlIGdhbW1hIGRvZXMgZWZmZWN0
IGRyYXdpbmcgaW50byB0aGUKKyAgLy8gY2FudmFzIGJ1dCBpdCBzaG91bGQgYmUgY2xvc2UgdG8g
NTAlIHNvIEknbGwgcGFzcyA0NSUKKyAgZm9yICh2YXIgamogPSAwOyBqaiA8IDM7ICsramopIHsK
KyAgICBhc3NlcnRNc2coZ2UxMjhDb3VudFtqal0gPiAyNTYgKiAwLjQ1LAorICAgICAgICAgICAg
ICAiSGFsZiB0aGUgcGl4ZWxzIGluIGNoYW5uZWwgIiArIGpqICsKKyAgICAgICAgICAgICAgIiBz
aG91bGQgYmUgPj0gMTI4LDEyOCwxMjguIGZvdW5kICIgKworICAgICAgICAgICAgICAoKGdlMTI4
Q291bnRbampdIC8gMjU2KSAqIDEwMCkudG9GaXhlZCgpICsgIiUiKTsKKyAgICBhc3NlcnRNc2co
bHQxMjhDb3VudFtqal0gPiAyNTYgKiAwLjQ1LAorICAgICAgICAgICAgICAiSGFsZiB0aGUgcGl4
ZWxzIGluIGNoYW5uZWwgIiArIGpqICsKKyAgICAgICAgICAgICAgIiBzaG91bGQgYmUgPCAxMjgs
MTI4LDEyOC4gZm91bmQgIiArCisgICAgICAgICAgICAgICgobHQxMjhDb3VudFtqal0gLyAyNTYp
ICogMTAwKS50b0ZpeGVkKCkgKyAiJSIpOworICB9CisqLworCisgIGRlYnVnKCIiKTsKKyAgZGVi
dWcoImNoZWNrIHBpeGVscyBhcmUgcHJlLW11bHRpcGxpZWQiKTsKKyAgZ2wucGl4ZWxTdG9yZWko
Z2wuVU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMLCB0cnVlKTsKKyAgLy8gVE9ETyhnbWFu
KTogdXNlIGRpZmZlcmVudCB0ZXh0dXJlIHRoYXQgd29uJ3QgcGFzcyBvbiBmYWlsdXJlCisgIGds
LnRleEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgZ2wuUkdCQSwgZ2wuUkdCQSwgZ2wuVU5TSUdO
RURfQllURSwKKyAgICAgICAgICAgICAgICBpbWdzWydyZXNvdXJjZXMvemVyby1hbHBoYS5wbmcn
XSk7CisgIGdsRXJyb3JTaG91bGRCZShnbCwgZ2wuTk9fRVJST1IsICJTaG91bGQgYmUgbm8gZXJy
b3JzIGZyb20gc2V0dXAiKTsKKyAgd3R1LmRyYXdRdWFkKGdsKTsKKyAgZ2wucmVhZFBpeGVscygw
LCAwLCB3aWR0aCwgaGVpZ2h0LCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCBidWYpOworCisg
IHZhciBzYW1lID0gdHJ1ZTsKKyAgZm9yICh2YXIgamogPSAwOyBqaiA8IHdpZHRoICogaGVpZ2h0
ICogNDsgKytqaikgeworICAgIGlmIChidWZbampdICE9IDApIHsKKyAgICAgIHNhbWUgPSBmYWxz
ZTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgfQorICBhc3NlcnRNc2coc2FtZSwgInBpeGVscyBz
aG91bGQgYWxsIGJlIDAuIik7CisKKyAgZGVidWcoIiIpOworICBkZWJ1ZygiY2hlY2sgcGl4ZWxz
IGFyZSBmbGlwcGVkIik7CisgIGdsLnBpeGVsU3RvcmVpKGdsLlVOUEFDS19QUkVNVUxUSVBMWV9B
TFBIQV9XRUJHTCwgZmFsc2UpOworICBnbC5waXhlbFN0b3JlaShnbC5VTlBBQ0tfRkxJUF9ZX1dF
QkdMLCB0cnVlKTsKKyAgZ2wudGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCBnbC5SR0IsIGds
LlJHQiwgZ2wuVU5TSUdORURfQllURSwKKyAgICAgICAgICAgICAgICBpbWdzWydyZXNvdXJjZXMv
M3gzLnBuZyddKTsKKyAgZ2xFcnJvclNob3VsZEJlKGdsLCBnbC5OT19FUlJPUiwgIlNob3VsZCBi
ZSBubyBlcnJvcnMgZnJvbSBzZXR1cCIpOworICB3dHUuZHJhd1F1YWQoZ2wpOworICBnbC5yZWFk
UGl4ZWxzKDAsIDAsIHdpZHRoLCBoZWlnaHQsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIGJ1
Zik7CisKKyAgY2hlY2tQaXhlbChidWYsIGxlZnQsICAgdG9wLCAgICBbMjU1LCAgIDAsICAgMCwg
MjU1XSk7CisgIGNoZWNrUGl4ZWwoYnVmLCBtaWRkbGUsIHRvcCwgICAgWzI1NSwgMjU1LCAgIDAs
IDI1NV0pOworICBjaGVja1BpeGVsKGJ1ZiwgcmlnaHQsICB0b3AsICAgIFsyNTUsICAgMCwgICAw
LCAyNTVdKTsKKyAgY2hlY2tQaXhlbChidWYsIGxlZnQsICAgY2VudGVyLCBbMjU1LCAgIDAsIDI1
NSwgMjU1XSk7CisgIGNoZWNrUGl4ZWwoYnVmLCBtaWRkbGUsIGNlbnRlciwgWzI1NSwgICAwLCAg
IDAsIDI1NV0pOworICBjaGVja1BpeGVsKGJ1ZiwgcmlnaHQsICBjZW50ZXIsIFsgIDAsIDI1NSwg
ICAwLCAyNTVdKTsKKyAgY2hlY2tQaXhlbChidWYsIGxlZnQsICAgYm90dG9tLCBbICAwLCAgIDAs
ICAgMCwgMjU1XSk7CisgIGNoZWNrUGl4ZWwoYnVmLCBtaWRkbGUsIGJvdHRvbSwgWyAgMCwgICAw
LCAyNTUsIDI1NV0pOworICBjaGVja1BpeGVsKGJ1ZiwgcmlnaHQsICBib3R0b20sIFsyNTUsICAg
MCwgICAwLCAyNTVdKTsKKworICBnbEVycm9yU2hvdWxkQmUoZ2wsIGdsLk5PX0VSUk9SLCAiU2hv
dWxkIGJlIG5vIGVycm9ycyIpOworCisgIGRlYnVnKCIiKTsKKyAgc3VjY2Vzc2Z1bGx5UGFyc2Vk
ID0gdHJ1ZTsKKyAgc2hvdWxkQmVUcnVlKCJzdWNjZXNzZnVsbHlQYXJzZWQiKTsKKyAgZGVidWco
JzxiciAvPjxzcGFuIGNsYXNzPSJwYXNzIj5URVNUIENPTVBMRVRFPC9zcGFuPicpOworICBub3Rp
ZnlGaW5pc2hlZFRvSGFybmVzcygpOworfQorPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CisK
SW5kZXg6IExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3Jlc291cmNlcy93ZWJnbC10ZXN0
LXV0aWxzLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3Jl
c291cmNlcy93ZWJnbC10ZXN0LXV0aWxzLmpzCShyZXZpc2lvbiA2NjAyMCkKKysrIExheW91dFRl
c3RzL2Zhc3QvY2FudmFzL3dlYmdsL3Jlc291cmNlcy93ZWJnbC10ZXN0LXV0aWxzLmpzCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOSw2ICsyOSwyMCBAQCB2YXIgZXJyb3IgPSBmdW5jdGlvbihtc2cpIHsK
ICAgfQogfTsKIAorLyoqCisgKiBDb252ZXJ0cyBhIFdlYkdMIGVudW0gdG8gYSBzdHJpbmcKKyAq
IEBwYXJhbSB7IVdlYkdMQ29udGV4dH0gZ2wgVGhlIFdlYkdMQ29udGV4dCB0byB1c2UuCisgKiBA
cGFyYW0ge251bWJlcn0gdmFsdWUgVGhlIGVudW0gdmFsdWUuCisgKiBAcmV0dXJuIHtzdHJpbmd9
IFRoZSBlbnVtIGFzIGEgc3RyaW5nLgorICovCit2YXIgZ2xFbnVtVG9TdHJpbmcgPSBmdW5jdGlv
bihnbCwgdmFsdWUpIHsKKyAgZm9yICh2YXIgcCBpbiBnbCkgeworICAgIGlmIChnbFtwXSA9PSB2
YWx1ZSkgeworICAgICAgcmV0dXJuIHA7CisgICAgfQorICB9CisgIHJldHVybiAiMHgiICsgdmFs
dWUudG9TdHJpbmcoMTYpOworfTsKIAogdmFyIGxhc3RFcnJvciA9ICIiOwogCkBAIC0xMTAsMTkg
KzEyNCwyMSBAQCB2YXIgc2V0dXBTaW1wbGVUZXh0dXJlRnJhZ21lbnRTaGFkZXIgPSBmCiAgKiBD
cmVhdGVzIGEgcHJvZ3JhbSwgYXR0YWNoZXMgc2hhZGVycywgYmluZHMgYXR0cmliIGxvY2F0aW9u
cywgbGlua3MgdGhlCiAgKiBwcm9ncmFtIGFuZCBjYWxscyB1c2VQcm9ncmFtLgogICogQHBhcmFt
IHshQXJyYXkuPCFXZWJHTFNoYWRlcj59IHNoYWRlcnMgVGhlIHNoYWRlcnMgdG8gYXR0YWNoIC4K
LSAqIEBwYXJhbSB7IUFycmF5LjxzdHJpbmc+fSBhdHRyaWJzIFRoZSBhdHRyaWJzIG5hbWVzLgor
ICogQHBhcmFtIHshQXJyYXkuPHN0cmluZz59IG9wdF9hdHRyaWJzIFRoZSBhdHRyaWJzIG5hbWVz
LgogICogQHBhcmFtIHshQXJyYXkuPG51bWJlcj59IG9wdF9sb2NhdGlvbnMgVGhlIGxvY2F0aW9u
cyBmb3IgdGhlIGF0dHJpYnMuCiAgKi8KLXZhciBzZXR1cFByb2dyYW0gPSBmdW5jdGlvbihnbCwg
c2hhZGVycywgYXR0cmlicywgb3B0X2xvY2F0aW9ucykgewordmFyIHNldHVwUHJvZ3JhbSA9IGZ1
bmN0aW9uKGdsLCBzaGFkZXJzLCBvcHRfYXR0cmlicywgb3B0X2xvY2F0aW9ucykgewogICB2YXIg
cHJvZ3JhbSA9IGdsLmNyZWF0ZVByb2dyYW0oKTsKICAgZm9yICh2YXIgaWkgPSAwOyBpaSA8IHNo
YWRlcnMubGVuZ3RoOyArK2lpKSB7CiAgICAgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIHNoYWRl
cnNbaWldKTsKICAgfQotICBmb3IgKHZhciBpaSA9IDA7IGlpIDwgYXR0cmlicy5sZW5ndGg7ICsr
aWkpIHsKLSAgICBnbC5iaW5kQXR0cmliTG9jYXRpb24oCi0gICAgICAgIHByb2dyYW0sCi0gICAg
ICAgIG9wdF9sb2NhdGlvbnMgPyBvcHRfbG9jYXRpb25zW2lpXSA6IGlpLAotICAgICAgICBhdHRy
aWJzW2lpXSk7CisgIGlmIChvcHRfYXR0cmlicykgeworICAgIGZvciAodmFyIGlpID0gMDsgaWkg
PCBvcHRfYXR0cmlicy5sZW5ndGg7ICsraWkpIHsKKyAgICAgIGdsLmJpbmRBdHRyaWJMb2NhdGlv
bigKKyAgICAgICAgICBwcm9ncmFtLAorICAgICAgICAgIG9wdF9sb2NhdGlvbnMgPyBvcHRfbG9j
YXRpb25zW2lpXSA6IGlpLAorICAgICAgICAgIG9wdF9hdHRyaWJzW2lpXSk7CisgICAgfQogICB9
CiAgIGdsLmxpbmtQcm9ncmFtKHByb2dyYW0pOwogCkBAIC04MTMsNiArODI5LDcgQEAgcmV0dXJu
IHsKICAgZHJhd1F1YWQ6IGRyYXdRdWFkLAogICBlbmRzV2l0aDogZW5kc1dpdGgsCiAgIGdldExh
c3RFcnJvcjogZ2V0TGFzdEVycm9yLAorICBnbEVudW1Ub1N0cmluZzogZ2xFbnVtVG9TdHJpbmcs
CiAgIGdsRXJyb3JTaG91bGRCZTogZ2xFcnJvclNob3VsZEJlLAogICBmaWxsVGV4dHVyZTogZmls
bFRleHR1cmUsCiAgIGxvYWRJbWFnZUFzeW5jOiBsb2FkSW1hZ2VBc3luYywKSW5kZXg6IExheW91
dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL3Rlc3RfZXhwZWN0YXRpb25zLnR4dAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS90ZXN0X2V4cGVjdGF0aW9ucy50eHQJ
KHJldmlzaW9uIDY2MDIwKQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vdGVzdF9l
eHBlY3RhdGlvbnMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0yNTY1LDYgKzI1NjUsOSBAQCBCVUdX
SzM3Mjk3IDogZmFzdC9oaXN0b3J5L3NpYmxpbmctdmlzaXRlCiBCVUdXSzM2OTgzIE1BQyA6IGZh
c3QvY2FudmFzL3dlYmdsL251bGwtb2JqZWN0LWJlaGF2aW91ci5odG1sID0gVEVYVAogQlVHV0sz
Njk4MyBNQUMgOiBmYXN0L2NhbnZhcy93ZWJnbC91bmlmb3JtLWxvY2F0aW9uLmh0bWwgPSBURVhU
CiAKKy8vIENhdXNlZCBieSBwcmVtdWx0aXBseWluZyBhbHBoYXMgaW4gQ0cgaW1hZ2UgZGVjb2Rp
bmcuCitCVUc0NDU2NiBNQUMgOiBmYXN0L2NhbnZhcy93ZWJnbC9nbC10ZXhpbWFnZS5odG1sID0g
VEVYVAorCiAvLyBBZGRlZCBpbiBodHRwOi8vdHJhYy53ZWJraXQub3JnL2NoYW5nZXNldC81NzQ3
Ni4gRmFpbHMgaW4gQ2hyb21pdW0gYmVjYXVzZQogLy8gTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNv
bXB1dGVkU3R5bGVXaXRoVmlzaXRlZEluZm8oKSBpcyBtaXNzaW5nLgogQlVHNDEyMDYgOiBmYXN0
L2hpc3RvcnkvbXVsdGlwbGUtY2xhc3Nlcy12aXNpdGVkLmh0bWwgPSBURVhUIFRJTUVPVVQKSW5k
ZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9Ta2lwcGVkCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL3BsYXRmb3JtL21hYy9Ta2lwcGVkCShyZXZpc2lvbiA2NjAyMCkKKysrIExheW91dFRl
c3RzL3BsYXRmb3JtL21hYy9Ta2lwcGVkCSh3b3JraW5nIGNvcHkpCkBAIC0yOTIsMyArMjkyLDYg
QEAgYW5pbWF0aW9ucy9wbGF5LXN0YXRlLmh0bWwKIAogIyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NDMzMzIKIGluc3BlY3Rvci9kb20tYnJlYWtwb2ludHMuaHRtbAor
CisjIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NDU2NgorZmFzdC9j
YW52YXMvd2ViZ2wvZ2wtdGV4aW1hZ2UuaHRtbApJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52
YXMvd2ViZ2wvcmVzb3VyY2VzLzN4My5wbmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDYW5ub3QgZGlzcGxheTogZmls
ZSBtYXJrZWQgYXMgYSBiaW5hcnkgdHlwZS4Kc3ZuOm1pbWUtdHlwZSA9IGFwcGxpY2F0aW9uL29j
dGV0LXN0cmVhbQoKUHJvcGVydHkgY2hhbmdlcyBvbjogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMv
d2ViZ2wvcmVzb3VyY2VzLzN4My5wbmcKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOm1pbWUtdHlwZQog
ICArIGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQoKCmlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFB
TUFBQUFEQ0FJQUFBRFpTaUxvQUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUsKVDJsRFEx
QlFhRzkwYjNOb2IzQWdTVU5ESUhCeWIyWnBiR1VBQUhqYW5WTm5WRlBwRmozMzN2UkNTNGlBbEV0
dlVoVUlJRkpDaTRBVQprU1lxSVFrUVNvZ2hvZGtWVWNFUlJVVUVHOGlnaUFPT2pvQ01GVkVzRElv
SzJBZmtJYUtPZzZPSWlzcjc0WHVqYTlhODkrYk4vclhYClB1ZXM4NTJ6endmQUNBeVdTRE5STllB
TXFVSWVFZUNEeDhURzRlUXVRSUVLSkhBQUVBaXpaQ0Z6L1NNQkFQaCtQRHdySXNBSHZnQUIKZU5N
TENBREFUWnZBTUJ5SC93L3FRcGxjQVlDRUFjQjBrVGhMQ0lBVUFFQjZqa0ttQUVCR0FZQ2RtQ1pU
QUtBRUFHRExZMkxqQUZBdApBR0FuZitiVEFJQ2QrSmw3QVFCYmxDRVZBYUNSQUNBVFpZaEVBR2c3
QUt6UFZvcEZBRmd3QUJSbVM4UTVBTmd0QURCSlYyWklBTEMzCkFNRE9FQXV5QUFnTUFEQlJpSVVw
QUFSN0FHRElJeU40QUlTWkFCUkc4bGM4OFN1dUVPY3FBQUI0bWJJOHVTUTVSWUZiQ0MxeEIxZFgK
TGg0b3pra1hLeFEyWVFKaG1rQXV3bm1aR1RLQk5BL2c4OHdBQUtDUkZSSGdnL1A5ZU00T3JzN09O
bzYyRGw4dDZyOEcveUppWXVQKwo1YytyY0VBQUFPRjBmdEgrTEMrekdvQTdCb0J0L3FJbDdnUm9Y
Z3VnZGZlTFpySVBRTFVBb09uYVYvTncrSDQ4UEVXaGtMbloyZVhrCjVOaEt4RUpiWWNwWGZmNW53
bC9BVi8xcytYNDgvUGYxNEw3aUpJRXlYWUZIQlBqZ3dzejBUS1VjejVJSmhHTGM1bzlIL0xjTC8v
d2QKMHlMRVNXSzVXQ29VNDFFU2NZNUVtb3p6TXFVaWlVS1NLY1VsMHY5azR0OHMrd00rM3pVQXNH
bytBWHVSTGFoZFl3UDJTeWNRV0hUQQo0dmNBQVBLN2I4SFVLQWdEZ0dpRDRjOTMvKzgvL1VlZ0pR
Q0Faa21TY1FBQVhrUWtMbFRLc3ovSENBQUFSS0NCS3JCQkcvVEJHQ3pBCkJoekJCZHpCQy94Z05v
UkNKTVRDUWhCQ0NtU0FISEpnS2F5Q1FpaUd6YkFkS21BdjFFQWROTUJSYUlhVGNBNHV3bFc0RGox
d0QvcGgKQ0o3QktMeUJDUVJCeUFnVFlTSGFpQUZpaWxnampnZ1htWVg0SWNGSUJCS0xKQ0RKaUJS
UklrdVJOVWd4VW9wVUlGVklIZkk5Y2dJNQpoMXhHdXBFN3lBQXlndnlHdkVjeGxJR3lVVDNVRExW
RHVhZzNHb1JHb2d2UVpIUXhtbzhXb0p2UWNyUWFQWXcyb2VmUXEyZ1AybzgrClE4Y3d3T2dZQnpQ
RWJEQXV4c05Dc1Rnc0NaTmp5N0VpckF5cnhocXdWcXdEdTRuMVk4K3hkd1FTZ1VYQUNUWUVkMEln
WVI1QlNGaE0KV0U3WVNLZ2dIQ1EwRWRvSk53a0RoRkhDSnlLVHFFdTBKcm9SK2NRWVlqSXhoMWhJ
TENQV0VvOFRMeEI3aUVQRU55UVNpVU15SjdtUQpBa214cEZUU0V0SkcwbTVTSStrc3FaczBTQm9q
azhuYVpHdXlCem1VTENBcnlJWGtuZVRENURQa0crUWg4bHNLbldKQWNhVDRVK0lvClVzcHFTaG5s
RU9VMDVRWmxtREpCVmFPYVV0Mm9vVlFSTlk5YVFxMmh0bEt2VVllb0V6UjFtam5OZ3haSlM2V3Rv
cFhUR21nWGFQZHAKcitoMHVoSGRsUjVPbDlCWDBzdnBSK2lYNkFQMGR3d05oaFdEeDRobktCbWJH
QWNZWnhsM0dLK1lUS1laMDRzWngxUXdOekhybU9lWgpENWx2VlZncXRpcDhGWkhLQ3BWS2xTYVZH
eW92VkttcXBxcmVxZ3RWODFYTFZJK3BYbE45cmtaVk0xUGpxUW5VbHF0VnFwMVE2MU1iClUyZXBP
NmlIcW1lb2IxUS9wSDVaL1lrR1djTk13MDlEcEZHZ3NWL2p2TVlnQzJNWnMzZ3NJV3NOcTRaMWdU
WEVKckhOMlh4MktydVkKL1IyN2l6MnFxYUU1UXpOS00xZXpVdk9VWmo4SDQ1aHgrSngwVGdubktL
ZVg4MzZLM2hUdktlSXBHNlkwVExreFpWeHJxcGFYbGxpcgpTS3RScTBmcnZUYXU3YWVkcHIxRnUx
bjdnUTVCeDBvblhDZEhaNC9PQlozblU5bFQzYWNLcHhaTlBUcjFyaTZxYTZVYm9idEVkNzl1CnAr
NllucjVlZ0o1TWI2ZmVlYjNuK2h4OUwvMVUvVzM2cC9WSERGZ0dzd3drQnRzTXpoZzh4VFZ4Ynp3
ZEw4ZmI4VkZEWGNOQVE2VmgKbFdHWDRZU1J1ZEU4bzlWR2pVWVBqR25HWE9NazQyM0diY2FqSmdZ
bUlTWkxUZXBON3BwU1RibW1LYVk3VER0TXg4M016YUxOMXBrMQptejB4MXpMbm0rZWIxNXZmdDJC
YWVGb3N0cWkydUdWSnN1UmFwbG51dHJ4dWhWbzVXYVZZVlZwZHMwYXRuYTBsMXJ1dHU2Y1JwN2xP
CmswNnJudFpudzdEeHRzbTJxYmNac09YWUJ0dXV0bTIyZldGblloZG50OFd1dys2VHZaTjl1bjJO
L1QwSERZZlpEcXNkV2gxK2M3UnkKRkRwV090NmF6cHp1UDMzRjlKYnBMMmRZenhEUDJEUGp0aFBM
S2NScG5WT2IwMGRuRjJlNWM0UHppSXVKUzRMTExwYytMcHNieHQzSQp2ZVJLZFBWeFhlRjYwdldk
bTdPYnd1Mm8yNi91TnU1cDdvZmNuOHcwbnltZVdUTnowTVBJUStCUjVkRS9DNStWTUd2ZnJINVBR
MCtCClo3WG5JeTlqTDVGWHJkZXd0NlYzcXZkaDd4Yys5ajV5bitNKzR6dzMzakxlV1YvTU44QzN5
TGZMVDhOdm5sK0YzME4vSS85ay8zci8KMFFDbmdDVUJad09KZ1VHQld3TDcrSHA4SWIrT1B6cmJa
ZmF5MmUxQmpLQzVRUlZCajRLdGd1WEJyU0ZveU95UXJTSDM1NWpPa2M1cApEb1ZRZnVqVzBBZGg1
bUdMdzM0TUo0V0hoVmVHUDQ1d2lGZ2EwVEdYTlhmUjNFTnozMFQ2UkpaRTNwdG5NVTg1cnkxS05T
bytxaTVxClBObzN1alM2UDhZdVpsbk0xVmlkV0Vsc1N4dzVMaXF1Tm01c3Z0Lzg3Zk9INHAzaUMr
TjdGNWd2eUYxd2VhSE93dlNGcHhhcExoSXMKT3BaQVRJaE9PSlR3UVJBcXFCYU1KZklUZHlXT0Nu
bkNIY0puSWkvUk50R0kyRU5jS2g1TzhrZ3FUWHFTN0pHOE5Ya2t4VE9sTE9XNQpoQ2Vwa0x4TURV
emRtenFlRnBwMklHMHlQVHE5TVlPU2taQnhRcW9oVFpPMlorcG41bVoyeTZ4bGhiTCt4VzZMdHk4
ZWxRZkphN09RCnJBVlpMUXEyUXFib1ZGb28xeW9Ic21kbFYyYS96WW5LT1phcm5pdk43Y3l6eXR1
UU41enZuLy90RXNJUzRaSzJwWVpMVnkwZFdPYTkKckdvNXNqeHhlZHNLNHhVRks0WldCcXc4dUlx
MkttM1ZUNnZ0VjVldWZyMG1lazFyZ1Y3QnlvTEJ0UUZyNnd0VkN1V0ZmZXZjMSsxZApUMWd2V2Qr
MVlmcUduUnMrRlltS3JoVGJGNWNWZjlnbzNIamxHNGR2eXIrWjNKUzBxYXZFdVdUUFp0Sm02ZWJl
TFo1YkRwYXFsK2FYCkRtNE4yZHEwRGQ5V3RPMzE5a1hiTDVmTktOdTdnN1pEdWFPL1BMaThaYWZK
enMwN1AxU2tWUFJVK2xRMjd0TGR0V0hYK0c3UjdodDcKdlBZMDdOWGJXN3ozL1Q3SnZ0dFZBVlZO
MVdiVlpmdEorN1AzUDY2SnF1bjRsdnR0WGExT2JYSHR4d1BTQS8wSEl3NjIxN25VMVIzUwpQVlJT
ajlZcjYwY094eCsrL3AzdmR5ME5OZzFWalp6RzRpTndSSG5rNmZjSjMvY2VEVHJhZG94N3JPRUgw
eDkySFdjZEwycENtdkthClJwdFRtdnRiWWx1NlQ4dyswZGJxM25yOFI5c2ZENXcwUEZsNVN2TlV5
V25hNllMVGsyZnl6NHlkbFoxOWZpNzUzR0Rib3JaNzUyUE8KMzJvUGIrKzZFSFRoMGtYL2krYzd2
RHZPWFBLNGRQS3kyK1VUVjdoWG1xODZYMjNxZE9vOC9wUFRUOGU3bkx1YXJybGNhN251ZXIyMQpl
MmIzNlJ1ZU44N2Q5TDE1OFJiLzF0V2VPVDNkdmZONmIvZkY5L1hmRnQxK2NpZjl6c3U3Mlhjbjdx
MjhUN3hmOUVEdFFkbEQzWWZWClAxdiszTmp2M0g5cXdIZWc4OUhjUi9jR2hZUFAvcEgxanc5REJZ
K1pqOHVHRFlicm5qZytPVG5pUDNMOTZmeW5RODlrenlhZUYvNmkKL3N1dUZ4WXZmdmpWNjlmTzBa
alJvWmZ5bDVPL2JYeWwvZXJBNnhtdjI4YkN4aDYreVhnek1WNzBWdnZ0d1hmY2R4M3ZvOThQVCtS
OApJSDhvLzJqNXNmVlQwS2Y3a3htVGsvOEVBNWp6L0dNekxkc0FBQUFnWTBoU1RRQUFlaVVBQUlD
REFBRDUvd0FBZ09rQUFIVXdBQURxCllBQUFPcGdBQUJkdmtsL0ZSZ0FBQUNGSlJFRlVlTm9zeDdF
QkFBQUl3eUQ2LzlGeGtZMkZHT2tEaWdNQUFQLy9Bd0I4MVFmNzQwM2sKUkFBQUFBQkpSVTVFcmtK
Z2dnPT0KCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9yZXNvdXJjZXMvZ3Jh
eS1yYW1wLTI1Ni13aXRoLTEyOC1hbHBoYS5wbmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDYW5ub3QgZGlzcGxheTog
ZmlsZSBtYXJrZWQgYXMgYSBiaW5hcnkgdHlwZS4Kc3ZuOm1pbWUtdHlwZSA9IGFwcGxpY2F0aW9u
L29jdGV0LXN0cmVhbQoKUHJvcGVydHkgY2hhbmdlcyBvbjogTGF5b3V0VGVzdHMvZmFzdC9jYW52
YXMvd2ViZ2wvcmVzb3VyY2VzL2dyYXktcmFtcC0yNTYtd2l0aC0xMjgtYWxwaGEucG5nCl9fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX18KQWRkZWQ6IHN2bjptaW1lLXR5cGUKICAgKyBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0K
CgppVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBUUFBQUFBQkNBWUFBQUF4V1hCM0FBQUFHRWxFUVZR
NGpXTmtZR0JvWUdSa1pCakZvM2dVCmp6d01BUDN1QTM5VEc5dEJBQUFBQUVsRlRrU3VRbUNDCgpJ
bmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvcmVzb3VyY2VzL2dyYXktcmFtcC0y
NTYucG5nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KQ2Fubm90IGRpc3BsYXk6IGZpbGUgbWFya2VkIGFzIGEgYmluYXJ5
IHR5cGUuCnN2bjptaW1lLXR5cGUgPSBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KClByb3BlcnR5
IGNoYW5nZXMgb246IExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3Jlc291cmNlcy9ncmF5
LXJhbXAtMjU2LnBuZwpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46bWltZS10eXBlCiAgICsgYXBwbGlj
YXRpb24vb2N0ZXQtc3RyZWFtCgoKaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQVFBQUFBQUJDQVlB
QUFBeFdYQjNBQUFBRlVsRVFWUTRqV05rWUdCZ1lCd0ZvMkFVakVnQQpBUHB4QS83eFkrQ0dBQUFB
QUVsRlRrU3VRbUNDCgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvcmVzb3Vy
Y2VzL2dyYXktcmFtcC1kZWZhdWx0LWdhbW1hLnBuZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNhbm5vdCBkaXNwbGF5
OiBmaWxlIG1hcmtlZCBhcyBhIGJpbmFyeSB0eXBlLgpzdm46bWltZS10eXBlID0gYXBwbGljYXRp
b24vb2N0ZXQtc3RyZWFtCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9mYXN0L2Nh
bnZhcy93ZWJnbC9yZXNvdXJjZXMvZ3JheS1yYW1wLWRlZmF1bHQtZ2FtbWEucG5nCl9fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X18KQWRkZWQ6IHN2bjpleGVjdXRhYmxlCiAgICsgKgpBZGRlZDogc3ZuOm1pbWUtdHlwZQogICAr
IGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQoKCmlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFRQUFB
QUFCQ0FZQUFBQXhXWEIzQUFBQVFrbEVRVlI0bkdOa1lHQmdZR1JrWkNSRUV4SkQKWnhQRHh5Vkdq
Qnc5QVJNVEV4TzU4dGprcUNsR2JUNjl6S1JVakJnNVl1VHBCVWhONTZUa0pXTHpLRFk1QVBLUkEv
NHowUVRtQUFBQQpBRWxGVGtTdVFtQ0MKCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93
ZWJnbC9yZXNvdXJjZXMvZ3JheS1yYW1wLWdhbW1hMC4xLnBuZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNhbm5vdCBk
aXNwbGF5OiBmaWxlIG1hcmtlZCBhcyBhIGJpbmFyeSB0eXBlLgpzdm46bWltZS10eXBlID0gYXBw
bGljYXRpb24vb2N0ZXQtc3RyZWFtCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9m
YXN0L2NhbnZhcy93ZWJnbC9yZXNvdXJjZXMvZ3JheS1yYW1wLWdhbW1hMC4xLnBuZwpfX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fCkFkZGVkOiBzdm46ZXhlY3V0YWJsZQogICArICoKQWRkZWQ6IHN2bjptaW1lLXR5cGUKICAg
KyBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KCgppVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBUUFB
QUFBQkNBWUFBQUF4V1hCM0FBQUFCR2RCVFVFQUFDY1FURmZDVEFBQUFEeEpSRUZVCk9NdGpaQUFD
UmlBZ1JCTVNRMmNUdzhjbFJvd2NQUUVURUpBcmowMk9tbUxVNXRQTFRFckZxQkUzOUFTa3BuTlM4
aEt4ZVJTYkhBRHkKa1FQK3FKVGxkd0FBQUFCSlJVNUVya0pnZ2c9PQoKSW5kZXg6IExheW91dFRl
c3RzL2Zhc3QvY2FudmFzL3dlYmdsL3Jlc291cmNlcy9ncmF5LXJhbXAtZ2FtbWExLjAucG5nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KQ2Fubm90IGRpc3BsYXk6IGZpbGUgbWFya2VkIGFzIGEgYmluYXJ5IHR5cGUuCnN2
bjptaW1lLXR5cGUgPSBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KClByb3BlcnR5IGNoYW5nZXMg
b246IExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3Jlc291cmNlcy9ncmF5LXJhbXAtZ2Ft
bWExLjAucG5nCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjpleGVjdXRhYmxlCiAgICsgKgpBZGRlZDog
c3ZuOm1pbWUtdHlwZQogICArIGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQoKCmlWQk9SdzBLR2dv
QUFBQU5TVWhFVWdBQUFRQUFBQUFCQ0FZQUFBQXhXWEIzQUFBQUJHZEJUVUVBQVlhZ01laVdYd0FB
QUR4SlJFRlUKT010alpBQUNSaUFnUkJNU1EyY1R3OGNsUm93Y1BRRVRFSkFyajAyT21tTFU1dFBM
VEVyRnFCRTM5QVNrcG5OUzhoS3hlUlNiSEFEeQprUVArcUpUbGR3QUFBQUJKUlU1RXJrSmdnZz09
CgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvcmVzb3VyY2VzL2dyYXktcmFt
cC1nYW1tYTIuMC5wbmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQpDYW5ub3QgZGlzcGxheTogZmlsZSBtYXJrZWQgYXMg
YSBiaW5hcnkgdHlwZS4Kc3ZuOm1pbWUtdHlwZSA9IGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQoK
UHJvcGVydHkgY2hhbmdlcyBvbjogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvcmVzb3Vy
Y2VzL2dyYXktcmFtcC1nYW1tYTIuMC5wbmcKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFi
bGUKICAgKyAqCkFkZGVkOiBzdm46bWltZS10eXBlCiAgICsgYXBwbGljYXRpb24vb2N0ZXQtc3Ry
ZWFtCgoKaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQVFBQUFBQUJDQVlBQUFBeFdYQjNBQUFBQkdk
QlRVRUFBdzFBU2hIaHlRQUFBRHhKUkVGVQpPTXRqWkFBQ1JpQWdSQk1TUTJjVHc4Y2xSb3djUFFF
VEVKQXJqMDJPbW1MVTV0UExURXJGcUJFMzlBU2twbk5TOGhLeGVSU2JIQUR5CmtRUCtxSlRsZHdB
QUFBQkpSVTVFcmtKZ2dnPT0KCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9y
ZXNvdXJjZXMvZ3JheS1yYW1wLWdhbW1hNC4wLnBuZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNhbm5vdCBkaXNwbGF5
OiBmaWxlIG1hcmtlZCBhcyBhIGJpbmFyeSB0eXBlLgpzdm46bWltZS10eXBlID0gYXBwbGljYXRp
b24vb2N0ZXQtc3RyZWFtCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9mYXN0L2Nh
bnZhcy93ZWJnbC9yZXNvdXJjZXMvZ3JheS1yYW1wLWdhbW1hNC4wLnBuZwpfX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFk
ZGVkOiBzdm46ZXhlY3V0YWJsZQogICArICoKQWRkZWQ6IHN2bjptaW1lLXR5cGUKICAgKyBhcHBs
aWNhdGlvbi9vY3RldC1zdHJlYW0KCgppVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBUUFBQUFBQkNB
WUFBQUF4V1hCM0FBQUFCR2RCVFVFQUJocUEwajFsQkFBQUFEeEpSRUZVCk9NdGpaQUFDUmlBZ1JC
TVNRMmNUdzhjbFJvd2NQUUVURUpBcmowMk9tbUxVNXRQTFRFckZxQkUzOUFTa3BuTlM4aEt4ZVJT
YkhBRHkKa1FQK3FKVGxkd0FBQUFCSlJVNUVya0pnZ2c9PQoKSW5kZXg6IExheW91dFRlc3RzL2Zh
c3QvY2FudmFzL3dlYmdsL3Jlc291cmNlcy9ncmF5LXJhbXAtZ2FtbWE5LjAucG5nCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KQ2Fubm90IGRpc3BsYXk6IGZpbGUgbWFya2VkIGFzIGEgYmluYXJ5IHR5cGUuCnN2bjptaW1l
LXR5cGUgPSBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KClByb3BlcnR5IGNoYW5nZXMgb246IExh
eW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3Jlc291cmNlcy9ncmF5LXJhbXAtZ2FtbWE5LjAu
cG5nCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX18KQWRkZWQ6IHN2bjpleGVjdXRhYmxlCiAgICsgKgpBZGRlZDogc3ZuOm1p
bWUtdHlwZQogICArIGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQoKCmlWQk9SdzBLR2dvQUFBQU5T
VWhFVWdBQUFRQUFBQUFCQ0FZQUFBQXhXWEIzQUFBQUJHZEJUVUVBRGJ1Z1Vob25oUUFBQUR4SlJF
RlUKT010alpBQUNSaUFnUkJNU1EyY1R3OGNsUm93Y1BRRVRFSkFyajAyT21tTFU1dFBMVEVyRnFC
RTM5QVNrcG5OUzhoS3hlUlNiSEFEeQprUVArcUpUbGR3QUFBQUJKUlU1RXJrSmdnZz09CgpJbmRl
eDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvcmVzb3VyY2VzL2dyYXktcmFtcC5wbmcK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQpDYW5ub3QgZGlzcGxheTogZmlsZSBtYXJrZWQgYXMgYSBiaW5hcnkgdHlwZS4K
c3ZuOm1pbWUtdHlwZSA9IGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQoKUHJvcGVydHkgY2hhbmdl
cyBvbjogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvcmVzb3VyY2VzL2dyYXktcmFtcC5w
bmcKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUKICAgKyAqCkFkZGVkOiBzdm46bWlt
ZS10eXBlCiAgICsgYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtCgoKaVZCT1J3MEtHZ29BQUFBTlNV
aEVVZ0FBQVFBQUFBQUJDQVlBQUFBeFdYQjNBQUFBUWtsRVFWUjRuR05rWUdCZ1lHUmtaQ1JFRXhK
RApaeFBEeHlWR2pCdzlBUk1URXhPNTh0amtxQ2xHYlQ2OXpLUlVqQmc1WXVUcEJVaE41NlRrSldM
ektEWTVBUEtSQS80ejBRVG1BQUFBCkFFbEZUa1N1UW1DQwoKSW5kZXg6IExheW91dFRlc3RzL2Zh
c3QvY2FudmFzL3dlYmdsL3Jlc291cmNlcy96ZXJvLWFscGhhLnBuZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNhbm5v
dCBkaXNwbGF5OiBmaWxlIG1hcmtlZCBhcyBhIGJpbmFyeSB0eXBlLgpzdm46bWltZS10eXBlID0g
YXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0
cy9mYXN0L2NhbnZhcy93ZWJnbC9yZXNvdXJjZXMvemVyby1hbHBoYS5wbmcKX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpB
ZGRlZDogc3ZuOmV4ZWN1dGFibGUKICAgKyAqCkFkZGVkOiBzdm46bWltZS10eXBlCiAgICsgYXBw
bGljYXRpb24vb2N0ZXQtc3RyZWFtCgoKaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUFNQUFBQURD
QVlBQUFCV0tMVy9BQUFBSUVsRVFWUjRuQ1hKc1EwQU1BZ0RNTlBMNGZKMAp5R2g1QW1Id2JyY1NH
c1VIblVBSWZ4Rnd5cm9BQUFBQVNVVk9SSzVDWUlJPQoK
</data>
<flag name="review"
          id="54216"
          type_id="1"
          status="+"
          setter="kbr"
    />
    <flag name="commit-queue"
          id="54217"
          type_id="3"
          status="-"
          setter="zmo"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>65659</attachid>
            <date>2010-08-26 19:14:25 -0700</date>
            <delta_ts>2010-08-26 19:16:54 -0700</delta_ts>
            <desc>patch: dealing case of texImage2D using HTMLCanvasElement as input</desc>
            <filename>skia.patch</filename>
            <type>text/plain</type>
            <size>6834</size>
            <attacher name="Zhenyao Mo">zmo</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NjE2NikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTMgQEAKKzIwMTAtMDgtMjYgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQYXNzaW5n
IHByZW11bHRpcGx5QWxwaGE9ZmFsc2UgdG8gdGV4e1N1Yn1JbWFnZTJEIGxvc2VzIGluZm9ybWF0
aW9uIChza2lhKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MzgyODIKKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NDb250
ZXh0M0RTa2lhLmNwcDogRGVhbGluZyB3aXRoIHRoZSBjYXNlIG9mIHRleEltYWdlMkQgd2l0aCBI
VE1MQ2FudmFzRWxlbWVudCBpbnB1dC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNEOjpnZXRJbWFnZURhdGEpOgorCiAyMDEwLTA4LTI2ICBKYW1lcyBSb2JpbnNvbiAgPGphbWVz
ckBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgRml4IGNocm9taXVtIG1hYyBidWlsZC4gVW5yZXZp
ZXdlZC4KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRl
eHQzRFNraWEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tp
YS9HcmFwaGljc0NvbnRleHQzRFNraWEuY3BwCShyZXZpc2lvbiA2NjE2MSkKKysrIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRleHQzRFNraWEuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00NCwyOCArNDQsMzkgQEAgYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0SW1h
Z2VEYXRhKEltYQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcHJl
bXVsdGlwbHlBbHBoYSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZWN0
b3I8dWludDhfdD4mIG91dHB1dFZlY3RvcikKIHsKLSAgICBpZiAoIWltYWdlIHx8ICFpbWFnZS0+
ZGF0YSgpKQorICAgIGlmICghaW1hZ2UpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBJbWFn
ZVNvdXJjZSBkZWNvZGVyKGZhbHNlKTsKLSAgICBkZWNvZGVyLnNldERhdGEoaW1hZ2UtPmRhdGEo
KSwgdHJ1ZSk7Ci0gICAgaWYgKCFkZWNvZGVyLmZyYW1lQ291bnQoKSB8fCAhZGVjb2Rlci5mcmFt
ZUlzQ29tcGxldGVBdEluZGV4KDApKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgYm9vbCBo
YXNBbHBoYSA9IGRlY29kZXIuZnJhbWVIYXNBbHBoYUF0SW5kZXgoMCk7Ci0gICAgT3duUHRyPE5h
dGl2ZUltYWdlU2tpYT4gcGl4ZWxzKGRlY29kZXIuY3JlYXRlRnJhbWVBdEluZGV4KDApKTsKLSAg
ICBpZiAoIXBpeGVscy5nZXQoKSB8fCAhcGl4ZWxzLT5pc0RhdGFDb21wbGV0ZSgpIHx8ICFwaXhl
bHMtPndpZHRoKCkgfHwgIXBpeGVscy0+aGVpZ2h0KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICBTa0JpdG1hcDo6Q29uZmlnIHNraWFDb25maWcgPSBwaXhlbHMtPmNvbmZpZygpOwotICAg
IGlmIChza2lhQ29uZmlnICE9IFNrQml0bWFwOjprQVJHQl84ODg4X0NvbmZpZykKKyAgICBPd25Q
dHI8TmF0aXZlSW1hZ2VTa2lhPiBwaXhlbHM7CisgICAgTmF0aXZlSW1hZ2VTa2lhKiBza2lhSW1h
Z2UgPSAwOworICAgIEFscGhhT3AgbmVlZGVkQWxwaGFPcCA9IGtBbHBoYURvTm90aGluZzsKKyAg
ICBpZiAoaW1hZ2UtPmRhdGEoKSkgeworICAgICAgICBJbWFnZVNvdXJjZSBkZWNvZGVyKGZhbHNl
KTsKKyAgICAgICAgZGVjb2Rlci5zZXREYXRhKGltYWdlLT5kYXRhKCksIHRydWUpOworICAgICAg
ICBpZiAoIWRlY29kZXIuZnJhbWVDb3VudCgpIHx8ICFkZWNvZGVyLmZyYW1lSXNDb21wbGV0ZUF0
SW5kZXgoMCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGJvb2wgaGFzQWxw
aGEgPSBkZWNvZGVyLmZyYW1lSGFzQWxwaGFBdEluZGV4KDApOworICAgICAgICBwaXhlbHMgPSBk
ZWNvZGVyLmNyZWF0ZUZyYW1lQXRJbmRleCgwKTsKKyAgICAgICAgaWYgKCFwaXhlbHMuZ2V0KCkg
fHwgIXBpeGVscy0+aXNEYXRhQ29tcGxldGUoKSB8fCAhcGl4ZWxzLT53aWR0aCgpIHx8ICFwaXhl
bHMtPmhlaWdodCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBTa0JpdG1h
cDo6Q29uZmlnIHNraWFDb25maWcgPSBwaXhlbHMtPmNvbmZpZygpOworICAgICAgICBpZiAoc2tp
YUNvbmZpZyAhPSBTa0JpdG1hcDo6a0FSR0JfODg4OF9Db25maWcpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIHNraWFJbWFnZSA9IHBpeGVscy5nZXQoKTsKKyAgICAgICAgaWYg
KGhhc0FscGhhICYmIHByZW11bHRpcGx5QWxwaGEpCisgICAgICAgICAgICBuZWVkZWRBbHBoYU9w
ID0ga0FscGhhRG9QcmVtdWx0aXBseTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBUaGlzIGlz
IGEgc3BlY2lhbCBjYXNlIGZvciB0ZXhJbWFnZTJEIHdpdGggSFRNTENhbnZhc0VsZW1lbnQgaW5w
dXQuCisgICAgICAgIHNraWFJbWFnZSA9IGltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFt
ZSgpOworICAgICAgICBuZWVkZWRBbHBoYU9wID0ga0FscGhhRG9Vbm11bHRpcGx5OworICAgIH0K
KyAgICBpZiAoIXNraWFJbWFnZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIFNrQml0bWFw
JiBza2lhSW1hZ2VSZWYgPSAqcGl4ZWxzOworICAgIFNrQml0bWFwJiBza2lhSW1hZ2VSZWYgPSAq
c2tpYUltYWdlOwogICAgIFNrQXV0b0xvY2tQaXhlbHMgbG9jayhza2lhSW1hZ2VSZWYpOwotICAg
IEFTU0VSVChwaXhlbHMtPnJvd0J5dGVzKCkgPT0gcGl4ZWxzLT53aWR0aCgpICogNCk7Ci0gICAg
b3V0cHV0VmVjdG9yLnJlc2l6ZShwaXhlbHMtPnJvd0J5dGVzKCkgKiBwaXhlbHMtPmhlaWdodCgp
KTsKLSAgICBBbHBoYU9wIG5lZWRlZEFscGhhT3AgPSBrQWxwaGFEb05vdGhpbmc7Ci0gICAgaWYg
KGhhc0FscGhhICYmIHByZW11bHRpcGx5QWxwaGEpCi0gICAgICAgIG5lZWRlZEFscGhhT3AgPSBr
QWxwaGFEb1ByZW11bHRpcGx5OwotICAgIHJldHVybiBwYWNrUGl4ZWxzKHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgdWludDhfdCo+KHBpeGVscy0+Z2V0UGl4ZWxzKCkpLAotICAgICAgICAgICAgICAg
ICAgICAgIGtTb3VyY2VGb3JtYXRCR1JBOCwgcGl4ZWxzLT53aWR0aCgpLCBwaXhlbHMtPmhlaWdo
dCgpLCAwLAorICAgIEFTU0VSVChza2lhSW1hZ2UtPnJvd0J5dGVzKCkgPT0gc2tpYUltYWdlLT53
aWR0aCgpICogNCk7CisgICAgb3V0cHV0VmVjdG9yLnJlc2l6ZShza2lhSW1hZ2UtPnJvd0J5dGVz
KCkgKiBza2lhSW1hZ2UtPmhlaWdodCgpKTsKKyAgICByZXR1cm4gcGFja1BpeGVscyhyZWludGVy
cHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihza2lhSW1hZ2UtPmdldFBpeGVscygpKSwKKyAgICAg
ICAgICAgICAgICAgICAgICBrU291cmNlRm9ybWF0QkdSQTgsIHNraWFJbWFnZS0+d2lkdGgoKSwg
c2tpYUltYWdlLT5oZWlnaHQoKSwgMCwKICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQsIHR5
cGUsIG5lZWRlZEFscGhhT3AsIG91dHB1dFZlY3Rvci5kYXRhKCkpOwogfQogCkluZGV4OiBMYXlv
dXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShy
ZXZpc2lvbiA2NjE2NikKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDEzIEBACisyMDEwLTA4LTI2ICBaaGVueWFvIE1vICA8em1vQGdvb2dsZS5jb20+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUGFzc2lu
ZyBwcmVtdWx0aXBseUFscGhhPWZhbHNlIHRvIHRleHtTdWJ9SW1hZ2UyRCBsb3NlcyBpbmZvcm1h
dGlvbiAoc2tpYSkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTM4MjgyCisKKyAgICAgICAgKiBmYXN0L2NhbnZhcy93ZWJnbC9nbC10ZXhpbWFnZS1leHBl
Y3RlZC50eHQ6IEFkZGluZyBiYWNrIHRoZSB0ZXN0cyB1c2luZyBjYW52YXMgYXMgdGV4SW1hZ2Uy
RCBpbnB1dC4KKyAgICAgICAgKiBmYXN0L2NhbnZhcy93ZWJnbC9nbC10ZXhpbWFnZS5odG1sOiBE
aXR0by4KKwogMjAxMC0wOC0yNiAgQnJpYW4gV2VpbnN0ZWluICA8YndlaW5zdGVpbkBhcHBsZS5j
b20+CiAKICAgICAgICAgUnViYmVyLXN0YW1wZWQgYnkgTWFyayBSb3dlLgpJbmRleDogTGF5b3V0
VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvZ2wtdGV4aW1hZ2UtZXhwZWN0ZWQudHh0Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2dsLXRleGltYWdlLWV4cGVjdGVk
LnR4dAkocmV2aXNpb24gNjYxNjEpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9n
bC10ZXhpbWFnZS1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTcsNyArNyw3IEBAIFBB
U1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlIKIGNoZWNrIHBpeGVscyBhcmUg
Tk9UIHByZS1tdWx0aXBsaWVkCiBQQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9f
RVJST1IgOiBTaG91bGQgYmUgbm8gZXJyb3JzIGZyb20gc2V0dXAKIFBBU1MgcGl4ZWwgMCwgMTUg
c2hvdWxkIGJlIDAsIDAsIDAsIDI1NSB3YXMgMCwgMCwgMCwgMjU1Ci1QQVNTIHBpeGVsIDEyOCwg
MTUgc2hvdWxkIGJlIDI1NSwgMCwgMjU1LCAyNTUgd2FzIDI1NSwgMCwgMCwgMjU1CitQQVNTIHBp
eGVsIDEyOCwgMTUgc2hvdWxkIGJlIDI1NSwgMCwgMjU1LCAyNTUgd2FzIDI1NSwgMCwgMjU1LCAy
NTUKIFBBU1MgcGl4ZWwgMjU1LCAxNSBzaG91bGQgYmUgMCwgMCwgMjU1LCAyNTUgd2FzIDAsIDAs
IDI1NSwgMjU1CiBQQVNTIHBpeGVsIDAsIDggc2hvdWxkIGJlIDEyOCwgMTI4LCAxMjgsIDI1NSB3
YXMgMTI4LCAxMjgsIDEyOCwgMjU1CiBQQVNTIHBpeGVsIDEyOCwgOCBzaG91bGQgYmUgMjU1LCAy
NTUsIDI1NSwgMjU1IHdhcyAyNTUsIDI1NSwgMjU1LCAyNTUKQEAgLTM4LDYgKzM4LDE1IEBAIFBB
U1MgVGhlcmUgc2hvdWxkIGJlIDMyIHVuaXF1ZSB2YWx1ZXMgaW4KIFBBU1MgVGhlcmUgc2hvdWxk
IGJlIDMyIHVuaXF1ZSB2YWx1ZXMgaW4gY2hhbm5lbCAyLiBGb3VuZCAzMgogUEFTUyBUaGVyZSBz
aG91bGQgYmUgMiB1bmlxdWUgdmFsdWVzIGluIGNoYW5uZWwgMy4gRm91bmQgMgogCitjaGVjayBw
aXhlbHMgYXJlIFVOIHByZS1tdWx0aXBsaWVkCitQQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2
YWx1ZTogTk9fRVJST1IgOiBTaG91bGQgYmUgbm8gZXJyb3JzIGZyb20gc2V0dXAuCitQQVNTIEhh
bGYgdGhlIHBpeGVscyBpbiBjaGFubmVsIDAgc2hvdWxkIGJlID49IDEyOCwxMjgsMTI4LiBmb3Vu
ZCA1MCUKK1BBU1MgSGFsZiB0aGUgcGl4ZWxzIGluIGNoYW5uZWwgMCBzaG91bGQgYmUgPCAxMjgs
MTI4LDEyOC4gZm91bmQgNTAlCitQQVNTIEhhbGYgdGhlIHBpeGVscyBpbiBjaGFubmVsIDEgc2hv
dWxkIGJlID49IDEyOCwxMjgsMTI4LiBmb3VuZCA1MCUKK1BBU1MgSGFsZiB0aGUgcGl4ZWxzIGlu
IGNoYW5uZWwgMSBzaG91bGQgYmUgPCAxMjgsMTI4LDEyOC4gZm91bmQgNTAlCitQQVNTIEhhbGYg
dGhlIHBpeGVscyBpbiBjaGFubmVsIDIgc2hvdWxkIGJlID49IDEyOCwxMjgsMTI4LiBmb3VuZCA1
MCUKK1BBU1MgSGFsZiB0aGUgcGl4ZWxzIGluIGNoYW5uZWwgMiBzaG91bGQgYmUgPCAxMjgsMTI4
LDEyOC4gZm91bmQgNTAlCisKIGNoZWNrIHBpeGVscyBhcmUgcHJlLW11bHRpcGxpZWQKIFBBU1Mg
Z2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IFNob3VsZCBiZSBubyBlcnJv
cnMgZnJvbSBzZXR1cAogUEFTUyBwaXhlbHMgc2hvdWxkIGFsbCBiZSAwLgpJbmRleDogTGF5b3V0
VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvZ2wtdGV4aW1hZ2UuaHRtbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9nbC10ZXhpbWFnZS5odG1sCShyZXZpc2lvbiA2
NjE2MSkKKysrIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2dsLXRleGltYWdlLmh0bWwJ
KHdvcmtpbmcgY29weSkKQEAgLTE2OSw2ICsxNjksNyBAQCBmdW5jdGlvbiBydW5UZXN0cyhpbWdz
KSB7CiAgICAgfQogICAgIGFzc2VydE1zZyhzYW1lLCAicGl4ZWxzIHNob3VsZCBiZSBzYW1lIHJl
Z2FyZGxlc3Mgb2YgZ2FtbWEgc2V0dGluZ3MuIik7CiAgIH0KKyovCiAKICAgZGVidWcoIiIpOwog
ICBkZWJ1ZygiY2hlY2sgcGl4ZWxzIGFyZSBVTiBwcmUtbXVsdGlwbGllZCIpOwpAQCAtMjEwLDcg
KzIxMSw2IEBAIGZ1bmN0aW9uIHJ1blRlc3RzKGltZ3MpIHsKICAgICAgICAgICAgICAgIiBzaG91
bGQgYmUgPCAxMjgsMTI4LDEyOC4gZm91bmQgIiArCiAgICAgICAgICAgICAgICgobHQxMjhDb3Vu
dFtqal0gLyAyNTYpICogMTAwKS50b0ZpeGVkKCkgKyAiJSIpOwogICB9Ci0qLwogCiAgIGRlYnVn
KCIiKTsKICAgZGVidWcoImNoZWNrIHBpeGVscyBhcmUgcHJlLW11bHRpcGxpZWQiKTsK
</data>
<flag name="commit-queue"
          id="54489"
          type_id="3"
          status="-"
          setter="zmo"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>65660</attachid>
            <date>2010-08-26 19:16:54 -0700</date>
            <delta_ts>2010-08-27 18:00:20 -0700</delta_ts>
            <desc>revised patch: fix a tiny logic bug</desc>
            <filename>skia.patch</filename>
            <type>text/plain</type>
            <size>6870</size>
            <attacher name="Zhenyao Mo">zmo</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NjE2NikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTMgQEAKKzIwMTAtMDgtMjYgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQYXNzaW5n
IHByZW11bHRpcGx5QWxwaGE9ZmFsc2UgdG8gdGV4e1N1Yn1JbWFnZTJEIGxvc2VzIGluZm9ybWF0
aW9uIChza2lhKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MzgyODIKKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NDb250
ZXh0M0RTa2lhLmNwcDogRGVhbGluZyB3aXRoIHRoZSBjYXNlIG9mIHRleEltYWdlMkQgd2l0aCBI
VE1MQ2FudmFzRWxlbWVudCBpbnB1dC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNEOjpnZXRJbWFnZURhdGEpOgorCiAyMDEwLTA4LTI2ICBKYW1lcyBSb2JpbnNvbiAgPGphbWVz
ckBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgRml4IGNocm9taXVtIG1hYyBidWlsZC4gVW5yZXZp
ZXdlZC4KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRl
eHQzRFNraWEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tp
YS9HcmFwaGljc0NvbnRleHQzRFNraWEuY3BwCShyZXZpc2lvbiA2NjE2MSkKKysrIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRleHQzRFNraWEuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00NCwyOCArNDQsNDAgQEAgYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0SW1h
Z2VEYXRhKEltYQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcHJl
bXVsdGlwbHlBbHBoYSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZWN0
b3I8dWludDhfdD4mIG91dHB1dFZlY3RvcikKIHsKLSAgICBpZiAoIWltYWdlIHx8ICFpbWFnZS0+
ZGF0YSgpKQorICAgIGlmICghaW1hZ2UpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBJbWFn
ZVNvdXJjZSBkZWNvZGVyKGZhbHNlKTsKLSAgICBkZWNvZGVyLnNldERhdGEoaW1hZ2UtPmRhdGEo
KSwgdHJ1ZSk7Ci0gICAgaWYgKCFkZWNvZGVyLmZyYW1lQ291bnQoKSB8fCAhZGVjb2Rlci5mcmFt
ZUlzQ29tcGxldGVBdEluZGV4KDApKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgYm9vbCBo
YXNBbHBoYSA9IGRlY29kZXIuZnJhbWVIYXNBbHBoYUF0SW5kZXgoMCk7Ci0gICAgT3duUHRyPE5h
dGl2ZUltYWdlU2tpYT4gcGl4ZWxzKGRlY29kZXIuY3JlYXRlRnJhbWVBdEluZGV4KDApKTsKLSAg
ICBpZiAoIXBpeGVscy5nZXQoKSB8fCAhcGl4ZWxzLT5pc0RhdGFDb21wbGV0ZSgpIHx8ICFwaXhl
bHMtPndpZHRoKCkgfHwgIXBpeGVscy0+aGVpZ2h0KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICBTa0JpdG1hcDo6Q29uZmlnIHNraWFDb25maWcgPSBwaXhlbHMtPmNvbmZpZygpOwotICAg
IGlmIChza2lhQ29uZmlnICE9IFNrQml0bWFwOjprQVJHQl84ODg4X0NvbmZpZykKKyAgICBPd25Q
dHI8TmF0aXZlSW1hZ2VTa2lhPiBwaXhlbHM7CisgICAgTmF0aXZlSW1hZ2VTa2lhKiBza2lhSW1h
Z2UgPSAwOworICAgIEFscGhhT3AgbmVlZGVkQWxwaGFPcCA9IGtBbHBoYURvTm90aGluZzsKKyAg
ICBpZiAoaW1hZ2UtPmRhdGEoKSkgeworICAgICAgICBJbWFnZVNvdXJjZSBkZWNvZGVyKGZhbHNl
KTsKKyAgICAgICAgZGVjb2Rlci5zZXREYXRhKGltYWdlLT5kYXRhKCksIHRydWUpOworICAgICAg
ICBpZiAoIWRlY29kZXIuZnJhbWVDb3VudCgpIHx8ICFkZWNvZGVyLmZyYW1lSXNDb21wbGV0ZUF0
SW5kZXgoMCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGJvb2wgaGFzQWxw
aGEgPSBkZWNvZGVyLmZyYW1lSGFzQWxwaGFBdEluZGV4KDApOworICAgICAgICBwaXhlbHMgPSBk
ZWNvZGVyLmNyZWF0ZUZyYW1lQXRJbmRleCgwKTsKKyAgICAgICAgaWYgKCFwaXhlbHMuZ2V0KCkg
fHwgIXBpeGVscy0+aXNEYXRhQ29tcGxldGUoKSB8fCAhcGl4ZWxzLT53aWR0aCgpIHx8ICFwaXhl
bHMtPmhlaWdodCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBTa0JpdG1h
cDo6Q29uZmlnIHNraWFDb25maWcgPSBwaXhlbHMtPmNvbmZpZygpOworICAgICAgICBpZiAoc2tp
YUNvbmZpZyAhPSBTa0JpdG1hcDo6a0FSR0JfODg4OF9Db25maWcpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIHNraWFJbWFnZSA9IHBpeGVscy5nZXQoKTsKKyAgICAgICAgaWYg
KGhhc0FscGhhICYmIHByZW11bHRpcGx5QWxwaGEpCisgICAgICAgICAgICBuZWVkZWRBbHBoYU9w
ID0ga0FscGhhRG9QcmVtdWx0aXBseTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBUaGlzIGlz
IGEgc3BlY2lhbCBjYXNlIGZvciB0ZXhJbWFnZTJEIHdpdGggSFRNTENhbnZhc0VsZW1lbnQgaW5w
dXQuCisgICAgICAgIHNraWFJbWFnZSA9IGltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFt
ZSgpOworICAgICAgICBpZiAoIXByZW11bHRpcGx5QWxwaGEpCisgICAgICAgICAgICBuZWVkZWRB
bHBoYU9wID0ga0FscGhhRG9Vbm11bHRpcGx5OworICAgIH0KKyAgICBpZiAoIXNraWFJbWFnZSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIFNrQml0bWFwJiBza2lhSW1hZ2VSZWYgPSAqcGl4
ZWxzOworICAgIFNrQml0bWFwJiBza2lhSW1hZ2VSZWYgPSAqc2tpYUltYWdlOwogICAgIFNrQXV0
b0xvY2tQaXhlbHMgbG9jayhza2lhSW1hZ2VSZWYpOwotICAgIEFTU0VSVChwaXhlbHMtPnJvd0J5
dGVzKCkgPT0gcGl4ZWxzLT53aWR0aCgpICogNCk7Ci0gICAgb3V0cHV0VmVjdG9yLnJlc2l6ZShw
aXhlbHMtPnJvd0J5dGVzKCkgKiBwaXhlbHMtPmhlaWdodCgpKTsKLSAgICBBbHBoYU9wIG5lZWRl
ZEFscGhhT3AgPSBrQWxwaGFEb05vdGhpbmc7Ci0gICAgaWYgKGhhc0FscGhhICYmIHByZW11bHRp
cGx5QWxwaGEpCi0gICAgICAgIG5lZWRlZEFscGhhT3AgPSBrQWxwaGFEb1ByZW11bHRpcGx5Owot
ICAgIHJldHVybiBwYWNrUGl4ZWxzKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHBp
eGVscy0+Z2V0UGl4ZWxzKCkpLAotICAgICAgICAgICAgICAgICAgICAgIGtTb3VyY2VGb3JtYXRC
R1JBOCwgcGl4ZWxzLT53aWR0aCgpLCBwaXhlbHMtPmhlaWdodCgpLCAwLAorICAgIEFTU0VSVChz
a2lhSW1hZ2UtPnJvd0J5dGVzKCkgPT0gc2tpYUltYWdlLT53aWR0aCgpICogNCk7CisgICAgb3V0
cHV0VmVjdG9yLnJlc2l6ZShza2lhSW1hZ2UtPnJvd0J5dGVzKCkgKiBza2lhSW1hZ2UtPmhlaWdo
dCgpKTsKKyAgICByZXR1cm4gcGFja1BpeGVscyhyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4
X3QqPihza2lhSW1hZ2UtPmdldFBpeGVscygpKSwKKyAgICAgICAgICAgICAgICAgICAgICBrU291
cmNlRm9ybWF0QkdSQTgsIHNraWFJbWFnZS0+d2lkdGgoKSwgc2tpYUltYWdlLT5oZWlnaHQoKSwg
MCwKICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQsIHR5cGUsIG5lZWRlZEFscGhhT3AsIG91
dHB1dFZlY3Rvci5kYXRhKCkpOwogfQogCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA2NjE2NikKKysrIExh
eW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDEw
LTA4LTI2ICBaaGVueWFvIE1vICA8em1vQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUGFzc2luZyBwcmVtdWx0aXBseUFscGhhPWZh
bHNlIHRvIHRleHtTdWJ9SW1hZ2UyRCBsb3NlcyBpbmZvcm1hdGlvbiAoc2tpYSkKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM4MjgyCisKKyAgICAgICAg
KiBmYXN0L2NhbnZhcy93ZWJnbC9nbC10ZXhpbWFnZS1leHBlY3RlZC50eHQ6IEFkZGluZyBiYWNr
IHRoZSB0ZXN0cyB1c2luZyBjYW52YXMgYXMgdGV4SW1hZ2UyRCBpbnB1dC4KKyAgICAgICAgKiBm
YXN0L2NhbnZhcy93ZWJnbC9nbC10ZXhpbWFnZS5odG1sOiBEaXR0by4KKwogMjAxMC0wOC0yNiAg
QnJpYW4gV2VpbnN0ZWluICA8YndlaW5zdGVpbkBhcHBsZS5jb20+CiAKICAgICAgICAgUnViYmVy
LXN0YW1wZWQgYnkgTWFyayBSb3dlLgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2Vi
Z2wvZ2wtdGV4aW1hZ2UtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zh
c3QvY2FudmFzL3dlYmdsL2dsLXRleGltYWdlLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gNjYxNjEp
CisrKyBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9nbC10ZXhpbWFnZS1leHBlY3RlZC50
eHQJKHdvcmtpbmcgY29weSkKQEAgLTcsNyArNyw3IEBAIFBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVj
dGVkIHZhbHVlOiBOT19FUlIKIGNoZWNrIHBpeGVscyBhcmUgTk9UIHByZS1tdWx0aXBsaWVkCiBQ
QVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiBTaG91bGQgYmUgbm8g
ZXJyb3JzIGZyb20gc2V0dXAKIFBBU1MgcGl4ZWwgMCwgMTUgc2hvdWxkIGJlIDAsIDAsIDAsIDI1
NSB3YXMgMCwgMCwgMCwgMjU1Ci1QQVNTIHBpeGVsIDEyOCwgMTUgc2hvdWxkIGJlIDI1NSwgMCwg
MjU1LCAyNTUgd2FzIDI1NSwgMCwgMCwgMjU1CitQQVNTIHBpeGVsIDEyOCwgMTUgc2hvdWxkIGJl
IDI1NSwgMCwgMjU1LCAyNTUgd2FzIDI1NSwgMCwgMjU1LCAyNTUKIFBBU1MgcGl4ZWwgMjU1LCAx
NSBzaG91bGQgYmUgMCwgMCwgMjU1LCAyNTUgd2FzIDAsIDAsIDI1NSwgMjU1CiBQQVNTIHBpeGVs
IDAsIDggc2hvdWxkIGJlIDEyOCwgMTI4LCAxMjgsIDI1NSB3YXMgMTI4LCAxMjgsIDEyOCwgMjU1
CiBQQVNTIHBpeGVsIDEyOCwgOCBzaG91bGQgYmUgMjU1LCAyNTUsIDI1NSwgMjU1IHdhcyAyNTUs
IDI1NSwgMjU1LCAyNTUKQEAgLTM4LDYgKzM4LDE1IEBAIFBBU1MgVGhlcmUgc2hvdWxkIGJlIDMy
IHVuaXF1ZSB2YWx1ZXMgaW4KIFBBU1MgVGhlcmUgc2hvdWxkIGJlIDMyIHVuaXF1ZSB2YWx1ZXMg
aW4gY2hhbm5lbCAyLiBGb3VuZCAzMgogUEFTUyBUaGVyZSBzaG91bGQgYmUgMiB1bmlxdWUgdmFs
dWVzIGluIGNoYW5uZWwgMy4gRm91bmQgMgogCitjaGVjayBwaXhlbHMgYXJlIFVOIHByZS1tdWx0
aXBsaWVkCitQQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiBTaG91
bGQgYmUgbm8gZXJyb3JzIGZyb20gc2V0dXAuCitQQVNTIEhhbGYgdGhlIHBpeGVscyBpbiBjaGFu
bmVsIDAgc2hvdWxkIGJlID49IDEyOCwxMjgsMTI4LiBmb3VuZCA1MCUKK1BBU1MgSGFsZiB0aGUg
cGl4ZWxzIGluIGNoYW5uZWwgMCBzaG91bGQgYmUgPCAxMjgsMTI4LDEyOC4gZm91bmQgNTAlCitQ
QVNTIEhhbGYgdGhlIHBpeGVscyBpbiBjaGFubmVsIDEgc2hvdWxkIGJlID49IDEyOCwxMjgsMTI4
LiBmb3VuZCA1MCUKK1BBU1MgSGFsZiB0aGUgcGl4ZWxzIGluIGNoYW5uZWwgMSBzaG91bGQgYmUg
PCAxMjgsMTI4LDEyOC4gZm91bmQgNTAlCitQQVNTIEhhbGYgdGhlIHBpeGVscyBpbiBjaGFubmVs
IDIgc2hvdWxkIGJlID49IDEyOCwxMjgsMTI4LiBmb3VuZCA1MCUKK1BBU1MgSGFsZiB0aGUgcGl4
ZWxzIGluIGNoYW5uZWwgMiBzaG91bGQgYmUgPCAxMjgsMTI4LDEyOC4gZm91bmQgNTAlCisKIGNo
ZWNrIHBpeGVscyBhcmUgcHJlLW11bHRpcGxpZWQKIFBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVk
IHZhbHVlOiBOT19FUlJPUiA6IFNob3VsZCBiZSBubyBlcnJvcnMgZnJvbSBzZXR1cAogUEFTUyBw
aXhlbHMgc2hvdWxkIGFsbCBiZSAwLgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2Vi
Z2wvZ2wtdGV4aW1hZ2UuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2NhbnZh
cy93ZWJnbC9nbC10ZXhpbWFnZS5odG1sCShyZXZpc2lvbiA2NjE2MSkKKysrIExheW91dFRlc3Rz
L2Zhc3QvY2FudmFzL3dlYmdsL2dsLXRleGltYWdlLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTE2
OSw2ICsxNjksNyBAQCBmdW5jdGlvbiBydW5UZXN0cyhpbWdzKSB7CiAgICAgfQogICAgIGFzc2Vy
dE1zZyhzYW1lLCAicGl4ZWxzIHNob3VsZCBiZSBzYW1lIHJlZ2FyZGxlc3Mgb2YgZ2FtbWEgc2V0
dGluZ3MuIik7CiAgIH0KKyovCiAKICAgZGVidWcoIiIpOwogICBkZWJ1ZygiY2hlY2sgcGl4ZWxz
IGFyZSBVTiBwcmUtbXVsdGlwbGllZCIpOwpAQCAtMjEwLDcgKzIxMSw2IEBAIGZ1bmN0aW9uIHJ1
blRlc3RzKGltZ3MpIHsKICAgICAgICAgICAgICAgIiBzaG91bGQgYmUgPCAxMjgsMTI4LDEyOC4g
Zm91bmQgIiArCiAgICAgICAgICAgICAgICgobHQxMjhDb3VudFtqal0gLyAyNTYpICogMTAwKS50
b0ZpeGVkKCkgKyAiJSIpOwogICB9Ci0qLwogCiAgIGRlYnVnKCIiKTsKICAgZGVidWcoImNoZWNr
IHBpeGVscyBhcmUgcHJlLW11bHRpcGxpZWQiKTsK
</data>
<flag name="review"
          id="54490"
          type_id="1"
          status="+"
          setter="kbr"
    />
    <flag name="commit-queue"
          id="54491"
          type_id="3"
          status="-"
          setter="zmo"
    />
          </attachment>
      

    </bug>

</bugzilla>