<?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>70350</bug_id>
          
          <creation_ts>2011-10-18 12:27:53 -0700</creation_ts>
          <short_desc>Make FilterEffect::apply() independent of image data management</short_desc>
          <delta_ts>2011-10-19 08:31:33 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>SVG</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>70099</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Dirk Schulze">krit</reporter>
          <assigned_to name="Dirk Schulze">krit</assigned_to>
          <cc>cmarrin</cc>
    
    <cc>dglazkov</cc>
    
    <cc>dino</cc>
    
    <cc>senorblanco</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zherczeg</cc>
    
    <cc>zimmermann</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>486227</commentid>
    <comment_count>0</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2011-10-18 12:27:53 -0700</bug_when>
    <thetext>FilterEffect::apply() needs to be independent from the image data management in FilterEffect. This allows implementing effective hardware accelerated alternatives, like OpenGL, CI or OpenCL based filters, to the software rendering. The software rendering code will be used as fallback and moves to platformApplyGeneric().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486245</commentid>
    <comment_count>1</comment_count>
      <attachid>111485</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2011-10-18 12:49:48 -0700</bug_when>
    <thetext>Created attachment 111485
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486250</commentid>
    <comment_count>2</comment_count>
      <attachid>111485</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-18 12:57:41 -0700</bug_when>
    <thetext>Comment on attachment 111485
Patch

Attachment 111485 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/10122409</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486254</commentid>
    <comment_count>3</comment_count>
      <attachid>111485</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-10-18 13:00:39 -0700</bug_when>
    <thetext>Comment on attachment 111485
Patch

Attachment 111485 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/10141002</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486263</commentid>
    <comment_count>4</comment_count>
      <attachid>111490</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2011-10-18 13:11:14 -0700</bug_when>
    <thetext>Created attachment 111490
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486620</commentid>
    <comment_count>5</comment_count>
      <attachid>111490</attachid>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2011-10-19 01:40:55 -0700</bug_when>
    <thetext>Comment on attachment 111490
Patch

The patch looks good, but I am thinking of the following:

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

&gt; Source/WebCore/platform/graphics/filters/FEGaussianBlur.cpp:110
&gt; +inline void FEGaussianBlur::platformApplyGenericBlur(ByteArray* srcPixelArray, ByteArray* tmpPixelArray, unsigned kernelSizeX, unsigned kernelSizeY, IntSize&amp; paintSize)

We need a better naming here, since we should append Blur to the Neon function as well to avoid naming inconsistency.

I would prefer mention that it is a software based option and rename it to: platformApplySoftwareRendering(...) or platformApplySoftwareRender(...) or something similar.

And do this for all filter effects of course.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486693</commentid>
    <comment_count>6</comment_count>
      <attachid>111597</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2011-10-19 05:20:26 -0700</bug_when>
    <thetext>Created attachment 111597
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486708</commentid>
    <comment_count>7</comment_count>
      <attachid>111597</attachid>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2011-10-19 05:53:26 -0700</bug_when>
    <thetext>Comment on attachment 111597
Patch

r=me with the followings:

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

&gt; Source/WebCore/platform/graphics/filters/FEMorphology.cpp:199
&gt;      if (hasResult())
&gt;          return;

Delete hasResult() here

&gt; Source/WebCore/platform/graphics/filters/FilterEffect.cpp:92
&gt; +bool FilterEffect::hasResult() const
&gt; +{
&gt; +    // This function needs platform specific checks, if the memory managment is not done by FilterEffect.
&gt; +    return m_imageBufferResult || m_unmultipliedImageResult || m_premultipliedImageResult;
&gt; +}

I think this is still need to be inline. Mush faster.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486726</commentid>
    <comment_count>8</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2011-10-19 06:27:08 -0700</bug_when>
    <thetext>Committed r97853: &lt;http://trac.webkit.org/changeset/97853&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486771</commentid>
    <comment_count>9</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2011-10-19 07:20:56 -0700</bug_when>
    <thetext>I don&apos;t like the platformApplySoftware() software name. First, what software is being applied?

But my main objection is that the software/hardware distinction is fuzzy. Does &quot;running on the GPU&quot; imply hardware? Is that really so different from running on the CPU?. If you start using OpenCL, you may not even know what&apos;s happening behind the scenes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486815</commentid>
    <comment_count>10</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2011-10-19 08:31:33 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; I don&apos;t like the platformApplySoftware() software name. First, what software is being applied?
&gt; 
&gt; But my main objection is that the software/hardware distinction is fuzzy. Does &quot;running on the GPU&quot; imply hardware? Is that really so different from running on the CPU?. If you start using OpenCL, you may not even know what&apos;s happening behind the scenes.

No, there is no opposite like &quot;platformApplyHardware()&quot;. Software stands for software rendering here. Valid names for other implementations could be &apos;platformApplyOpenGL&apos;, &apos;platformApplyOpenCL&apos; or &apos;platformApplyCIFilter&apos;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>111485</attachid>
            <date>2011-10-18 12:49:48 -0700</date>
            <delta_ts>2011-10-18 13:11:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-70350-20111018214945.patch</filename>
            <type>text/plain</type>
            <size>35728</size>
            <attacher name="Dirk Schulze">krit</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk3NzgyKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsOTAgQEAKKzIwMTEtMTAtMTggIERpcmsgU2No
dWx6ZSAgPGtyaXRAd2Via2l0Lm9yZz4KKworICAgICAgICBNYWtlIEZpbHRlckVmZmVjdDo6YXBw
bHkoKSBpbmRlcGVuZGVudCBvZiBpbWFnZSBkYXRhIG1hbmFnZW1lbnQKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcwMzUwCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBGaWx0ZXJFZmZlY3Q6OmFw
cGx5KCkgbmVlZHMgdG8gYmUgaW5kZXBlbmRlbnQgZnJvbSB0aGUgaW1hZ2UgZGF0YSBtYW5hZ2Vt
ZW50IGluIEZpbHRlckVmZmVjdC4KKyAgICAgICAgVGhpcyBhbGxvd3MgaW1wbGVtZW50aW5nIGVm
ZmVjdGl2ZSBoYXJkd2FyZSBhY2NlbGVyYXRlZCBhbHRlcm5hdGl2ZXMsIGxpa2UgT3BlbkdMLCBD
SSBvciBPcGVuQ0wKKyAgICAgICAgYmFzZWQgZmlsdGVycywgdG8gdGhlIHNvZnR3YXJlIHJlbmRl
cmluZy4gVGhlIHNvZnR3YXJlIHJlbmRlcmluZyBjb2RlIHdpbGwgYmUgdXNlZCBhcyBmYWxsYmFj
aworICAgICAgICBhbmQgbW92ZXMgdG8gcGxhdGZvcm1BcHBseUdlbmVyaWMoKS4KKworICAgICAg
ICBUaGUgcGF0Y2ggZG9lcyBub3QgY2hhbmdlIHRoZSBiZWhhdmlvciBvZiBTVkcgZmlsdGVycy4g
RGlkIG5vdCBhZGQgbmV3IHRlc3QgY2FzZXMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFQmxlbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVCbGVuZDo6cGxhdGZv
cm1BcHBseUdlbmVyaWMpOiBSZW5hbWVkIGFwcGx5KCkgdG8gcGxhdGZvcm1BcHBseUdlbmVyaWMo
KQorICAgICAgICAgICAgYW5kIHJlbW92ZWQgdmFsaWRpdHkgY2hlY2tzIHRoYXQgYXJlIGRvbmUg
YnkgRmlsdGVyRWZmZWN0OjphcHBseSgpLiBUaGlzIGlzIGEKKyAgICAgICAgICAgIHJlY3Vycmlu
ZyBwYXR0ZXJuIGZvciBhbGwgZm9sbG93aW5nIGVmZmVjdHMuIAorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0
cml4OjpwbGF0Zm9ybUFwcGx5R2VuZXJpYyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUNvbG9yTWF0cml4Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9u
ZW50VHJhbnNmZXI6OnBsYXRmb3JtQXBwbHlHZW5lcmljKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZF
Q29tcG9zaXRlOjpwbGF0Zm9ybUFwcGx5R2VuZXJpYyk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZv
bHZlTWF0cml4OjpwbGF0Zm9ybUFwcGx5R2VuZXJpYyk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpG
RURpc3BsYWNlbWVudE1hcDo6cGxhdGZvcm1BcHBseUdlbmVyaWMpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpGRURyb3BTaGFkb3c6OnBsYXRmb3JtQXBwbHlHZW5lcmljKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5oOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUZsb29kOjpw
bGF0Zm9ybUFwcGx5R2VuZXJpYyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUZsb29kLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNz
aWFuQmx1ci5jcHA6IFJlbmFtZWQgYWxyZWFkeSB1c2VkIG5hbWUgcGxhdGZvcm1BcHBseUdlbmVy
aWMgdG8gcGxhdGZvcm1BcHBseUdlbmVyaWNCbHVyLgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVz
c2lhbkJsdXI6OnBsYXRmb3JtQXBwbHlHZW5lcmljQmx1cik6CisgICAgICAgIChXZWJDb3JlOjpG
RUdhdXNzaWFuQmx1cjo6cGxhdGZvcm1BcHBseVdvcmtlcik6CisgICAgICAgIChXZWJDb3JlOjpG
RUdhdXNzaWFuQmx1cjo6cGxhdGZvcm1BcHBseSk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNz
aWFuQmx1cjo6cGxhdGZvcm1BcHBseUdlbmVyaWMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwOiBSZW5hbWVkIGFscmVhZHkgdXNlZCBuYW1lIHBsYXRm
b3JtQXBwbHlHZW5lcmljIHRvIHBsYXRmb3JtQXBwbHlHZW5lcmljTGlnaHRpbmcuCisgICAgICAg
IChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpwbGF0Zm9ybUFwcGx5R2VuZXJpY0xpZ2h0aW5nKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnBsYXRmb3JtQXBwbHkpOgorICAgICAgICAoV2Vi
Q29yZTo6RkVMaWdodGluZzo6cGxhdGZvcm1BcHBseUdlbmVyaWMpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5oOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRU1lcmdlOjpw
bGF0Zm9ybUFwcGx5R2VuZXJpYyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRU1lcmdlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBo
b2xvZ3kuY3BwOiBSZW5hbWVkIGFscmVhZHkgdXNlZCBuYW1lIHBsYXRmb3JtQXBwbHlHZW5lcmlj
IHRvIHBsYXRmb3JtQXBwbHlHZW5lcmljTW9ycGhvbG9neS4KKyAgICAgICAgKFdlYkNvcmU6OkZF
TW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseUdlbmVyaWNNb3JwaG9sb2d5KToKKyAgICAgICAgKFdl
YkNvcmU6OkZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseVdvcmtlcik6CisgICAgICAgIChXZWJD
b3JlOjpGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6RkVN
b3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5R2VuZXJpYyk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFT2Zmc2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFT2Zmc2V0OjpwbGF0
Zm9ybUFwcGx5R2VuZXJpYyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RU9mZnNldC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkZFVGlsZTo6cGxhdGZvcm1BcHBseUdlbmVyaWMpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmg6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RkVUdXJidWxlbmNlOjpwbGF0Zm9ybUFwcGx5R2VuZXJpYyk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHA6IEFkZGVkIG5vbi12aXJ0dWFsIGFwcGx5
KCkgZnVuY3Rpb24uIFRoaXMgd2lsbCBjYWxsIHRoZSBwbGF0Zm9ybSBzcGVjaWZpYyBhcHBseSBm
dW5jdGlvbnMsCisgICAgICAgICAgICB3aGljaCBuZWVkIHRvIGJlIHZpcnR1YWwgbm93LgorICAg
ICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpoYXNSZXN1bHQpOiBBZGRlZCBhIGNvbW1lbnQg
Zm9yIG5ldyBpbXBsZW1lbnRhdGlvbnMuIFRoaXMgZnVuY3Rpb24gbmVlZHMgdG8gYmUgdXBkYXRl
ZCBmb3IgZXZlcnkgbmV3IHBvcnQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmFw
cGx5KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y3JlYXRlSW1hZ2VCdWZmZXJS
ZXN1bHQpOiBSZW1vdmVkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkgY2FsbC4gVGhpcyBp
cyBkb25lIGluIGFwcGx5KCkgbm93LgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpj
cmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
RmlsdGVyRWZmZWN0OjpjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpOiBEaXR0by4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U291cmNlQWxwaGE6OnBsYXRmb3JtQXBwbHlHZW5lcmljKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmg6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlNvdXJjZUdyYXBoaWM6OnBsYXRmb3JtQXBwbHlHZW5lcmljKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuaDoKKyAgICAgICAgKiBzdmcvZ3JhcGhp
Y3MvZmlsdGVycy9TVkdGRUltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFSW1hZ2U6OnBs
YXRmb3JtQXBwbHlHZW5lcmljKToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdG
RUltYWdlLmg6CisKIDIwMTEtMTAtMTggIFNoYXduIFNpbmdoICA8c2hhd25zaW5naEBjaHJvbWl1
bS5vcmc+CiAKICAgICAgICAgW2Nocm9taXVtXSBUcmFja2luZyB1cGRhdGUgcmVjdHMgaW4gTGF5
ZXJDaHJvbWl1bSBhbmQgQ0NMYXllckltcGwuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHAJKHJldmlzaW9uIDk3Nzc1
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtODYsMTYgKzg2LDExIEBAIHN0YXRpYyBpbmxpbmUgdW5zaWdu
ZWQgY2hhciBsaWdodGVuKHVuc2kKICAgICByZXR1cm4gKChzdGQ6Om1heCgoMjU1IC0gYWxwaGFB
KSAqIGNvbG9yQiArIGNvbG9yQSAqIDI1NSwgKDI1NSAtIGFscGhhQikgKiBjb2xvckEgKyBjb2xv
ckIgKiAyNTUpKSAvIDI1NSk7CiB9CiAKLXZvaWQgRkVCbGVuZDo6YXBwbHkoKQordm9pZCBGRUJs
ZW5kOjpwbGF0Zm9ybUFwcGx5R2VuZXJpYygpCiB7Ci0gICAgaWYgKGhhc1Jlc3VsdCgpKQotICAg
ICAgICByZXR1cm47CisKICAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7CiAg
ICAgRmlsdGVyRWZmZWN0KiBpbjIgPSBpbnB1dEVmZmVjdCgxKTsKLSAgICBpbi0+YXBwbHkoKTsK
LSAgICBpbjItPmFwcGx5KCk7Ci0gICAgaWYgKCFpbi0+aGFzUmVzdWx0KCkgfHwgIWluMi0+aGFz
UmVzdWx0KCkpCi0gICAgICAgIHJldHVybjsKIAogICAgIEFTU0VSVChtX21vZGUgPiBGRUJMRU5E
X01PREVfVU5LTk9XTik7CiAgICAgQVNTRVJUKG1fbW9kZSA8PSBGRUJMRU5EX01PREVfTElHSFRF
Tik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxl
bmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFQmxlbmQuaAkocmV2aXNpb24gOTc3NzUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUs
NyBAQCBwdWJsaWM6CiAgICAgQmxlbmRNb2RlVHlwZSBibGVuZE1vZGUoKSBjb25zdDsKICAgICBi
b29sIHNldEJsZW5kTW9kZShCbGVuZE1vZGVUeXBlKTsKIAotICAgIHZpcnR1YWwgdm9pZCBhcHBs
eSgpOworICAgIHZpcnR1YWwgdm9pZCBwbGF0Zm9ybUFwcGx5R2VuZXJpYygpOwogICAgIHZpcnR1
YWwgdm9pZCBkdW1wKCk7CiAKICAgICB2aXJ0dWFsIFRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVz
ZW50YXRpb24oVGV4dFN0cmVhbSYsIGludCBpbmRlbnRpb24pIGNvbnN0OwpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29s
b3JNYXRyaXguY3BwCShyZXZpc2lvbiA5Nzc3NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1
NiwxNCArMTU2LDkgQEAgdm9pZCBlZmZlY3RUeXBlKEJ5dGVBcnJheSogcGl4ZWxBcnJheSwgYwog
ICAgIH0KIH0KIAotdm9pZCBGRUNvbG9yTWF0cml4OjphcHBseSgpCit2b2lkIEZFQ29sb3JNYXRy
aXg6OnBsYXRmb3JtQXBwbHlHZW5lcmljKCkKIHsKLSAgICBpZiAoaGFzUmVzdWx0KCkpCi0gICAg
ICAgIHJldHVybjsKICAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7Ci0gICAg
aW4tPmFwcGx5KCk7Ci0gICAgaWYgKCFpbi0+aGFzUmVzdWx0KCkpCi0gICAgICAgIHJldHVybjsK
IAogICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0
KCk7CiAgICAgaWYgKCFyZXN1bHRJbWFnZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5oCShyZXZpc2lv
biA5Nzc3NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVD
b2xvck1hdHJpeC5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCw3IEBAIHB1YmxpYzoKICAg
ICBjb25zdCBWZWN0b3I8ZmxvYXQ+JiB2YWx1ZXMoKSBjb25zdDsKICAgICBib29sIHNldFZhbHVl
cyhjb25zdCBWZWN0b3I8ZmxvYXQ+Jik7CiAKLSAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1BcHBseUdlbmVyaWMoKTsKICAgICB2aXJ0dWFsIHZvaWQg
ZHVtcCgpOwogCiAgICAgdmlydHVhbCBUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9u
KFRleHRTdHJlYW0mLCBpbnQgaW5kZW50aW9uKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBv
bmVudFRyYW5zZmVyLmNwcAkocmV2aXNpb24gOTc3NzUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xNTAsMTQgKzE1MCw5IEBAIHN0YXRpYyB2b2lkIGdhbW1hKHVuc2lnbmVkIGNoYXIq
IHZhbHVlcywKICAgICB9CiB9CiAKLXZvaWQgRkVDb21wb25lbnRUcmFuc2Zlcjo6YXBwbHkoKQor
dm9pZCBGRUNvbXBvbmVudFRyYW5zZmVyOjpwbGF0Zm9ybUFwcGx5R2VuZXJpYygpCiB7Ci0gICAg
aWYgKGhhc1Jlc3VsdCgpKQotICAgICAgICByZXR1cm47CiAgICAgRmlsdGVyRWZmZWN0KiBpbiA9
IGlucHV0RWZmZWN0KDApOwotICAgIGluLT5hcHBseSgpOwotICAgIGlmICghaW4tPmhhc1Jlc3Vs
dCgpKQotICAgICAgICByZXR1cm47CiAKICAgICBCeXRlQXJyYXkqIHBpeGVsQXJyYXkgPSBjcmVh
dGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwogICAgIGlmICghcGl4ZWxBcnJheSkKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFu
c2Zlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5oCShyZXZpc2lvbiA5Nzc3NSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC03OCw3ICs3OCw3IEBAIHB1YmxpYzoKICAgICBDb21wb25lbnRUcmFu
c2ZlckZ1bmN0aW9uIGFscGhhRnVuY3Rpb24oKSBjb25zdDsKICAgICB2b2lkIHNldEFscGhhRnVu
Y3Rpb24oY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYpOwogCi0gICAgdmlydHVhbCB2
b2lkIGFwcGx5KCk7CisgICAgdmlydHVhbCB2b2lkIHBsYXRmb3JtQXBwbHlHZW5lcmljKCk7CiAg
ICAgdmlydHVhbCB2b2lkIGR1bXAoKTsKIAogICAgIHZpcnR1YWwgVGV4dFN0cmVhbSYgZXh0ZXJu
YWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiwgaW50IGluZGVudGlvbikgY29uc3Q7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFQ29tcG9zaXRlLmNwcAkocmV2aXNpb24gOTc3NzUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTk2LDE2ICsxOTYsMTAgQEAgdm9pZCBGRUNvbXBvc2l0ZTo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWlu
dAogICAgIH0KIH0KIAotdm9pZCBGRUNvbXBvc2l0ZTo6YXBwbHkoKQordm9pZCBGRUNvbXBvc2l0
ZTo6cGxhdGZvcm1BcHBseUdlbmVyaWMoKQogewotICAgIGlmIChoYXNSZXN1bHQoKSkKLSAgICAg
ICAgcmV0dXJuOwogICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKICAgICBG
aWx0ZXJFZmZlY3QqIGluMiA9IGlucHV0RWZmZWN0KDEpOwotICAgIGluLT5hcHBseSgpOwotICAg
IGluMi0+YXBwbHkoKTsKLSAgICBpZiAoIWluLT5oYXNSZXN1bHQoKSB8fCAhaW4yLT5oYXNSZXN1
bHQoKSkKLSAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKG1fdHlwZSA9PSBGRUNPTVBPU0lURV9P
UEVSQVRPUl9BUklUSE1FVElDKSB7CiAgICAgICAgIEJ5dGVBcnJheSogZHN0UGl4ZWxBcnJheSA9
IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuaAkocmV2
aXNpb24gOTc3NzUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFQ29tcG9zaXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDcgKzU5LDcgQEAgcHVibGljOgog
ICAgIGZsb2F0IGs0KCkgY29uc3Q7CiAgICAgYm9vbCBzZXRLNChmbG9hdCk7CiAKLSAgICB2aXJ0
dWFsIHZvaWQgYXBwbHkoKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1BcHBseUdlbmVyaWMo
KTsKICAgICB2aXJ0dWFsIHZvaWQgZHVtcCgpOwogICAgIAogICAgIHZpcnR1YWwgdm9pZCBkZXRl
cm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3Bw
CShyZXZpc2lvbiA5Nzc3NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVDb252b2x2ZU1hdHJpeC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwMSwxNCArNDAx
LDkgQEAgdm9pZCBGRUNvbnZvbHZlTWF0cml4OjpzZXRJbnRlcmlvclBpeGVscwogfQogI2VuZGlm
CiAKLXZvaWQgRkVDb252b2x2ZU1hdHJpeDo6YXBwbHkoKQordm9pZCBGRUNvbnZvbHZlTWF0cml4
OjpwbGF0Zm9ybUFwcGx5R2VuZXJpYygpCiB7Ci0gICAgaWYgKGhhc1Jlc3VsdCgpKQotICAgICAg
ICByZXR1cm47CiAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwotICAgIGlu
LT5hcHBseSgpOwotICAgIGlmICghaW4tPmhhc1Jlc3VsdCgpKQotICAgICAgICByZXR1cm47CiAK
ICAgICBCeXRlQXJyYXkqIHJlc3VsdEltYWdlOwogICAgIGlmIChtX3ByZXNlcnZlQWxwaGEpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVN
YXRyaXguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguaAkocmV2aXNpb24gOTc3NzUpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguaAkod29ya2lu
ZyBjb3B5KQpAQCAtNzIsNyArNzIsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBwcmVzZXJ2ZUFscGhh
KCkgY29uc3Q7CiAgICAgYm9vbCBzZXRQcmVzZXJ2ZUFscGhhKGJvb2wpOwogCi0gICAgdmlydHVh
bCB2b2lkIGFwcGx5KCk7CisgICAgdmlydHVhbCB2b2lkIHBsYXRmb3JtQXBwbHlHZW5lcmljKCk7
CiAgICAgdmlydHVhbCB2b2lkIGR1bXAoKTsKIAogICAgIHZpcnR1YWwgdm9pZCBkZXRlcm1pbmVB
YnNvbHV0ZVBhaW50UmVjdCgpIHsgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVj
dChtYXhFZmZlY3RSZWN0KCkpKTsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5jcHAJ
KHJldmlzaW9uIDk3Nzc1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRURpc3BsYWNlbWVudE1hcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg4LDE2ICs4OCwx
MCBAQCBib29sIEZFRGlzcGxhY2VtZW50TWFwOjpzZXRTY2FsZShmbG9hdCBzCiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLXZvaWQgRkVEaXNwbGFjZW1lbnRNYXA6OmFwcGx5KCkKK3ZvaWQgRkVEaXNw
bGFjZW1lbnRNYXA6OnBsYXRmb3JtQXBwbHlHZW5lcmljKCkKIHsKLSAgICBpZiAoaGFzUmVzdWx0
KCkpCi0gICAgICAgIHJldHVybjsKICAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3Qo
MCk7CiAgICAgRmlsdGVyRWZmZWN0KiBpbjIgPSBpbnB1dEVmZmVjdCgxKTsKLSAgICBpbi0+YXBw
bHkoKTsKLSAgICBpbjItPmFwcGx5KCk7Ci0gICAgaWYgKCFpbi0+aGFzUmVzdWx0KCkgfHwgIWlu
Mi0+aGFzUmVzdWx0KCkpCi0gICAgICAgIHJldHVybjsKIAogICAgIEFTU0VSVChtX3hDaGFubmVs
U2VsZWN0b3IgIT0gQ0hBTk5FTF9VTktOT1dOKTsKICAgICBBU1NFUlQobV95Q2hhbm5lbFNlbGVj
dG9yICE9IENIQU5ORUxfVU5LTk9XTik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5oCShy
ZXZpc2lvbiA5Nzc3NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVEaXNwbGFjZW1lbnRNYXAuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsNyArNTAsNyBAQCBw
dWJsaWM6CiAgICAgZmxvYXQgc2NhbGUoKSBjb25zdDsKICAgICBib29sIHNldFNjYWxlKGZsb2F0
KTsKIAotICAgIHZpcnR1YWwgdm9pZCBhcHBseSgpOworICAgIHZpcnR1YWwgdm9pZCBwbGF0Zm9y
bUFwcGx5R2VuZXJpYygpOwogICAgIHZpcnR1YWwgdm9pZCBkdW1wKCk7CiAKICAgICB2aXJ0dWFs
IHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKSB7IHNldEFic29sdXRlUGFpbnRSZWN0
KGVuY2xvc2luZ0ludFJlY3QobWF4RWZmZWN0UmVjdCgpKSk7IH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRv
dy5jcHAJKHJldmlzaW9uIDk3Nzc1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MywxNSArNzMs
OSBAQCB2b2lkIEZFRHJvcFNoYWRvdzo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWluCiAgICAgc2V0QWJz
b2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChhYnNvbHV0ZVBhaW50UmVjdCkpOwogfQog
Ci12b2lkIEZFRHJvcFNoYWRvdzo6YXBwbHkoKQordm9pZCBGRURyb3BTaGFkb3c6OnBsYXRmb3Jt
QXBwbHlHZW5lcmljKCkKIHsKLSAgICBpZiAoaGFzUmVzdWx0KCkpCi0gICAgICAgIHJldHVybjsK
LQogICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKLSAgICBpbi0+YXBwbHko
KTsKLSAgICBpZiAoIWluLT5oYXNSZXN1bHQoKSkKLSAgICAgICAgcmV0dXJuOwogCiAgICAgSW1h
Z2VCdWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKICAgICBp
ZiAoIXJlc3VsdEltYWdlKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRURyb3BTaGFkb3cuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5oCShyZXZpc2lvbiA5Nzc3NSkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTUxLDcgKzUxLDcgQEAgcHVibGljOgogCiAgICAgc3RhdGljIGZs
b2F0IGNhbGN1bGF0ZVN0ZERldmlhdGlvbihmbG9hdCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgYXBw
bHkoKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1BcHBseUdlbmVyaWMoKTsKICAgICB2aXJ0
dWFsIHZvaWQgZHVtcCgpOwogCiAgICAgdmlydHVhbCB2b2lkIGRldGVybWluZUFic29sdXRlUGFp
bnRSZWN0KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFRmxvb2QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVGbG9vZC5jcHAJKHJldmlzaW9uIDk3Nzc1KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNzAsMTAgKzcwLDggQEAgYm9vbCBGRUZsb29kOjpzZXRGbG9vZE9wYWNpdHkoZmxvYXQgZmxv
bwogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEZFRmxvb2Q6OmFwcGx5KCkKK3ZvaWQgRkVG
bG9vZDo6cGxhdGZvcm1BcHBseUdlbmVyaWMoKQogewotICAgIGlmIChoYXNSZXN1bHQoKSkKLSAg
ICAgICAgcmV0dXJuOwogICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdl
QnVmZmVyUmVzdWx0KCk7CiAgICAgaWYgKCFyZXN1bHRJbWFnZSkKICAgICAgICAgcmV0dXJuOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUZsb29kLmgJKHJldmlzaW9uIDk3Nzc1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUZsb29kLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDcgQEAg
cHVibGljOgogICAgIGZsb2F0IGZsb29kT3BhY2l0eSgpIGNvbnN0OwogICAgIGJvb2wgc2V0Rmxv
b2RPcGFjaXR5KGZsb2F0KTsKIAotICAgIHZpcnR1YWwgdm9pZCBhcHBseSgpOworICAgIHZpcnR1
YWwgdm9pZCBwbGF0Zm9ybUFwcGx5R2VuZXJpYygpOwogICAgIHZpcnR1YWwgdm9pZCBkdW1wKCk7
CiAKICAgICB2aXJ0dWFsIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKSB7IHNldEFi
c29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QobWF4RWZmZWN0UmVjdCgpKSk7IH0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJs
dXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwCShyZXZpc2lvbiA5Nzc3NSkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDcsNyArMTA3LDcgQEAgaW5saW5lIHZvaWQgYm94Qmx1cihCeXRlQXJyYXkq
IHNyY1BpeGVsQQogICAgIH0KIH0KIAotaW5saW5lIHZvaWQgRkVHYXVzc2lhbkJsdXI6OnBsYXRm
b3JtQXBwbHlHZW5lcmljKEJ5dGVBcnJheSogc3JjUGl4ZWxBcnJheSwgQnl0ZUFycmF5KiB0bXBQ
aXhlbEFycmF5LCB1bnNpZ25lZCBrZXJuZWxTaXplWCwgdW5zaWduZWQga2VybmVsU2l6ZVksIElu
dFNpemUmIHBhaW50U2l6ZSkKK2lubGluZSB2b2lkIEZFR2F1c3NpYW5CbHVyOjpwbGF0Zm9ybUFw
cGx5R2VuZXJpY0JsdXIoQnl0ZUFycmF5KiBzcmNQaXhlbEFycmF5LCBCeXRlQXJyYXkqIHRtcFBp
eGVsQXJyYXksIHVuc2lnbmVkIGtlcm5lbFNpemVYLCB1bnNpZ25lZCBrZXJuZWxTaXplWSwgSW50
U2l6ZSYgcGFpbnRTaXplKQogewogICAgIGludCBzdHJpZGUgPSA0ICogcGFpbnRTaXplLndpZHRo
KCk7CiAgICAgaW50IGR4TGVmdCA9IDA7CkBAIC0xNDMsNyArMTQzLDcgQEAgdm9pZCBGRUdhdXNz
aWFuQmx1cjo6cGxhdGZvcm1BcHBseVdvcmtlcgogICAgIHBhcmFtZXRlcnMtPmZpbHRlci0+cGxh
dGZvcm1BcHBseU5lb24ocGFyYW1ldGVycy0+c3JjUGl4ZWxBcnJheS5nZXQoKSwgcGFyYW1ldGVy
cy0+ZHN0UGl4ZWxBcnJheS5nZXQoKSwKICAgICAgICAgcGFyYW1ldGVycy0+a2VybmVsU2l6ZVgs
IHBhcmFtZXRlcnMtPmtlcm5lbFNpemVZLCBwYWludFNpemUpOwogI2Vsc2UKLSAgICBwYXJhbWV0
ZXJzLT5maWx0ZXItPnBsYXRmb3JtQXBwbHlHZW5lcmljKHBhcmFtZXRlcnMtPnNyY1BpeGVsQXJy
YXkuZ2V0KCksIHBhcmFtZXRlcnMtPmRzdFBpeGVsQXJyYXkuZ2V0KCksCisgICAgcGFyYW1ldGVy
cy0+ZmlsdGVyLT5wbGF0Zm9ybUFwcGx5R2VuZXJpY0JsdXIocGFyYW1ldGVycy0+c3JjUGl4ZWxB
cnJheS5nZXQoKSwgcGFyYW1ldGVycy0+ZHN0UGl4ZWxBcnJheS5nZXQoKSwKICAgICAgICAgcGFy
YW1ldGVycy0+a2VybmVsU2l6ZVgsIHBhcmFtZXRlcnMtPmtlcm5lbFNpemVZLCBwYWludFNpemUp
OwogI2VuZGlmCiB9CkBAIC0yMjMsNyArMjIzLDcgQEAgaW5saW5lIHZvaWQgRkVHYXVzc2lhbkJs
dXI6OnBsYXRmb3JtQXBwbAogI2lmIENQVShBUk1fTkVPTikgJiYgQ09NUElMRVIoR0NDKQogICAg
IHBsYXRmb3JtQXBwbHlOZW9uKHNyY1BpeGVsQXJyYXksIHRtcFBpeGVsQXJyYXksIGtlcm5lbFNp
emVYLCBrZXJuZWxTaXplWSwgcGFpbnRTaXplKTsKICNlbHNlCi0gICAgcGxhdGZvcm1BcHBseUdl
bmVyaWMoc3JjUGl4ZWxBcnJheSwgdG1wUGl4ZWxBcnJheSwga2VybmVsU2l6ZVgsIGtlcm5lbFNp
emVZLCBwYWludFNpemUpOworICAgIHBsYXRmb3JtQXBwbHlHZW5lcmljQmx1cihzcmNQaXhlbEFy
cmF5LCB0bXBQaXhlbEFycmF5LCBrZXJuZWxTaXplWCwga2VybmVsU2l6ZVksIHBhaW50U2l6ZSk7
CiAjZW5kaWYKIH0KIApAQCAtMjYyLDE0ICsyNjIsOSBAQCB2b2lkIEZFR2F1c3NpYW5CbHVyOjpk
ZXRlcm1pbmVBYnNvbHV0ZVBhCiAgICAgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50
UmVjdChhYnNvbHV0ZVBhaW50UmVjdCkpOwogfQogCi12b2lkIEZFR2F1c3NpYW5CbHVyOjphcHBs
eSgpCit2b2lkIEZFR2F1c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5R2VuZXJpYygpCiB7Ci0gICAg
aWYgKGhhc1Jlc3VsdCgpKQotICAgICAgICByZXR1cm47CiAgICAgRmlsdGVyRWZmZWN0KiBpbiA9
IGlucHV0RWZmZWN0KDApOwotICAgIGluLT5hcHBseSgpOwotICAgIGlmICghaW4tPmhhc1Jlc3Vs
dCgpKQotICAgICAgICByZXR1cm47CiAKICAgICBCeXRlQXJyYXkqIHNyY1BpeGVsQXJyYXkgPSBj
cmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKICAgICBpZiAoIXNyY1BpeGVsQXJyYXkp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3Np
YW5CbHVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5oCShyZXZpc2lvbiA5Nzc3NSkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuaAkod29ya2luZyBj
b3B5KQpAQCAtNDAsNyArNDAsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgZmxvYXQgY2FsY3Vs
YXRlU3RkRGV2aWF0aW9uKGZsb2F0KTsKIAotICAgIHZpcnR1YWwgdm9pZCBhcHBseSgpOworICAg
IHZpcnR1YWwgdm9pZCBwbGF0Zm9ybUFwcGx5R2VuZXJpYygpOwogICAgIHZpcnR1YWwgdm9pZCBk
dW1wKCk7CiAgICAgCiAgICAgdmlydHVhbCB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0
KCk7CkBAIC03Myw3ICs3Myw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIGlubGluZSB2b2lkIGtl
cm5lbFBvc2l0aW9uKGludCBib3hCbHVyLCB1bnNpZ25lZCYgc3RkLCBpbnQmIGRMZWZ0LCBpbnQm
IGRSaWdodCk7CiAgICAgaW5saW5lIHZvaWQgcGxhdGZvcm1BcHBseShCeXRlQXJyYXkqIHNyY1Bp
eGVsQXJyYXksIEJ5dGVBcnJheSogdG1wUGl4ZWxBcnJheSwgdW5zaWduZWQga2VybmVsU2l6ZVgs
IHVuc2lnbmVkIGtlcm5lbFNpemVZLCBJbnRTaXplJiBwYWludFNpemUpOwogCi0gICAgaW5saW5l
IHZvaWQgcGxhdGZvcm1BcHBseUdlbmVyaWMoQnl0ZUFycmF5KiBzcmNQaXhlbEFycmF5LCBCeXRl
QXJyYXkqIHRtcFBpeGVsQXJyYXksIHVuc2lnbmVkIGtlcm5lbFNpemVYLCB1bnNpZ25lZCBrZXJu
ZWxTaXplWSwgSW50U2l6ZSYgcGFpbnRTaXplKTsKKyAgICBpbmxpbmUgdm9pZCBwbGF0Zm9ybUFw
cGx5R2VuZXJpY0JsdXIoQnl0ZUFycmF5KiBzcmNQaXhlbEFycmF5LCBCeXRlQXJyYXkqIHRtcFBp
eGVsQXJyYXksIHVuc2lnbmVkIGtlcm5lbFNpemVYLCB1bnNpZ25lZCBrZXJuZWxTaXplWSwgSW50
U2l6ZSYgcGFpbnRTaXplKTsKICAgICBpbmxpbmUgdm9pZCBwbGF0Zm9ybUFwcGx5TmVvbihCeXRl
QXJyYXkqIHNyY1BpeGVsQXJyYXksIEJ5dGVBcnJheSogdG1wUGl4ZWxBcnJheSwgdW5zaWduZWQg
a2VybmVsU2l6ZVgsIHVuc2lnbmVkIGtlcm5lbFNpemVZLCBJbnRTaXplJiBwYWludFNpemUpOwog
CiAgICAgZmxvYXQgbV9zdGRYOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwCShyZXZpc2lvbiA5Nzc3NSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI0OSw3ICsyNDksNyBAQCB2b2lkIEZFTGlnaHRpbmc6OnBs
YXRmb3JtQXBwbHlHZW5lcmljV29yCiB9CiAjZW5kaWYgLy8gRU5BQkxFKFBBUkFMTEVMX0pPQlMp
CiAKLWlubGluZSB2b2lkIEZFTGlnaHRpbmc6OnBsYXRmb3JtQXBwbHlHZW5lcmljKExpZ2h0aW5n
RGF0YSYgZGF0YSwgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhKQoraW5s
aW5lIHZvaWQgRkVMaWdodGluZzo6cGxhdGZvcm1BcHBseUdlbmVyaWNMaWdodGluZyhMaWdodGlu
Z0RhdGEmIGRhdGEsIExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSkKIHsK
ICNpZiBFTkFCTEUoUEFSQUxMRUxfSk9CUykKICAgICBpbnQgb3B0aW1hbFRocmVhZE51bWJlciA9
ICgoZGF0YS53aWR0aERlY3JlYXNlZEJ5T25lIC0gMSkgKiAoZGF0YS5oZWlnaHREZWNyZWFzZWRC
eU9uZSAtIDEpKSAvIHNfbWluaW1hbFJlY3REaW1lbnNpb247CkBAIC0yODgsNyArMjg4LDcgQEAg
aW5saW5lIHZvaWQgRkVMaWdodGluZzo6cGxhdGZvcm1BcHBseShMaQogI2lmIENQVShBUk1fTkVP
TikgJiYgQ09NUElMRVIoR0NDKQogICAgIHBsYXRmb3JtQXBwbHlOZW9uKGRhdGEsIHBhaW50aW5n
RGF0YSk7CiAjZWxzZQotICAgIHBsYXRmb3JtQXBwbHlHZW5lcmljKGRhdGEsIHBhaW50aW5nRGF0
YSk7CisgICAgcGxhdGZvcm1BcHBseUdlbmVyaWNMaWdodGluZyhkYXRhLCBwYWludGluZ0RhdGEp
OwogI2VuZGlmCiB9CiAKQEAgLTM4NiwxNCArMzg2LDkgQEAgYm9vbCBGRUxpZ2h0aW5nOjpkcmF3
TGlnaHRpbmcoQnl0ZUFycmF5KgogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEZFTGlnaHRp
bmc6OmFwcGx5KCkKK3ZvaWQgRkVMaWdodGluZzo6cGxhdGZvcm1BcHBseUdlbmVyaWMoKQogewot
ICAgIGlmIChoYXNSZXN1bHQoKSkKLSAgICAgICAgcmV0dXJuOwogICAgIEZpbHRlckVmZmVjdCog
aW4gPSBpbnB1dEVmZmVjdCgwKTsKLSAgICBpbi0+YXBwbHkoKTsKLSAgICBpZiAoIWluLT5oYXNS
ZXN1bHQoKSkKLSAgICAgICAgcmV0dXJuOwogCiAgICAgQnl0ZUFycmF5KiBzcmNQaXhlbEFycmF5
ID0gY3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKICAgICBpZiAoIXNyY1BpeGVsQXJy
YXkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGln
aHRpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFTGlnaHRpbmcuaAkocmV2aXNpb24gOTc3NzUpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuaAkod29ya2luZyBjb3B5KQpAQCAt
MTA3LDcgKzEwNyw3IEBAIHByb3RlY3RlZDoKICAgICBpbmxpbmUgdm9pZCBwbGF0Zm9ybUFwcGx5
KExpZ2h0aW5nRGF0YSYsIExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmKTsKIAogICAgIGlubGlu
ZSB2b2lkIHBsYXRmb3JtQXBwbHlHZW5lcmljUGFpbnQoTGlnaHRpbmdEYXRhJiwgTGlnaHRTb3Vy
Y2U6OlBhaW50aW5nRGF0YSYsIGludCBzdGFydFgsIGludCBzdGFydFkpOwotICAgIGlubGluZSB2
b2lkIHBsYXRmb3JtQXBwbHlHZW5lcmljKExpZ2h0aW5nRGF0YSYsIExpZ2h0U291cmNlOjpQYWlu
dGluZ0RhdGEmKTsKKyAgICBpbmxpbmUgdm9pZCBwbGF0Zm9ybUFwcGx5R2VuZXJpY0xpZ2h0aW5n
KExpZ2h0aW5nRGF0YSYsIExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmKTsKIAogICAgIHN0YXRp
YyBpbnQgZ2V0UG93ZXJDb2VmZmljaWVudHMoZmxvYXQgZXhwb25lbnQpOwogICAgIGlubGluZSB2
b2lkIHBsYXRmb3JtQXBwbHlOZW9uKExpZ2h0aW5nRGF0YSYsIExpZ2h0U291cmNlOjpQYWludGlu
Z0RhdGEmKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVNZXJnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRU1lcmdlLmNwcAkocmV2aXNpb24gOTc3NzUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00MSwxOCArNDEsMTAgQEAgUGFzc1JlZlB0cjxGRU1lcmdlPiBGRU1lcmdlOjpjcmVhdGUoRmls
dAogICAgIHJldHVybiBhZG9wdFJlZihuZXcgRkVNZXJnZShmaWx0ZXIpKTsKIH0KIAotdm9pZCBG
RU1lcmdlOjphcHBseSgpCit2b2lkIEZFTWVyZ2U6OnBsYXRmb3JtQXBwbHlHZW5lcmljKCkKIHsK
LSAgICBpZiAoaGFzUmVzdWx0KCkpCi0gICAgICAgIHJldHVybjsKICAgICB1bnNpZ25lZCBzaXpl
ID0gbnVtYmVyT2ZFZmZlY3RJbnB1dHMoKTsKICAgICBBU1NFUlQoc2l6ZSA+IDApOwotICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgRmlsdGVyRWZmZWN0
KiBpbiA9IGlucHV0RWZmZWN0KGkpOwotICAgICAgICBpbi0+YXBwbHkoKTsKLSAgICAgICAgaWYg
KCFpbi0+aGFzUmVzdWx0KCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgfQogCiAgICAgSW1h
Z2VCdWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKICAgICBp
ZiAoIXJlc3VsdEltYWdlKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRU1lcmdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmgJKHJldmlzaW9uIDk3Nzc1KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTMzLDcgKzMzLDcgQEAgY2xhc3MgRkVNZXJnZSA6IHB1YmxpYyBGaWx0ZXJFZmZlY3Qgewog
cHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZFTWVyZ2U+IGNyZWF0ZShGaWx0ZXIqKTsK
IAotICAgIHZpcnR1YWwgdm9pZCBhcHBseSgpOworICAgIHZpcnR1YWwgdm9pZCBwbGF0Zm9ybUFw
cGx5R2VuZXJpYygpOwogICAgIHZpcnR1YWwgdm9pZCBkdW1wKCk7CiAKICAgICB2aXJ0dWFsIFRl
eHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYsIGludCBpbmRlbnRp
b24pIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRU1vcnBob2xvZ3kuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcAkocmV2aXNpb24gOTc3NzUpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEwMSw3ICsxMDEsNyBAQCBib29sIEZFTW9ycGhvbG9neTo6c2V0
UmFkaXVzWShmbG9hdCByYWRpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgRkVNb3JwaG9s
b2d5OjpwbGF0Zm9ybUFwcGx5R2VuZXJpYyhQYWludGluZ0RhdGEqIHBhaW50aW5nRGF0YSwgaW50
IHlTdGFydCwgaW50IHlFbmQpCit2b2lkIEZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseUdlbmVy
aWNNb3JwaG9sb2d5KFBhaW50aW5nRGF0YSogcGFpbnRpbmdEYXRhLCBpbnQgeVN0YXJ0LCBpbnQg
eUVuZCkKIHsKICAgICBCeXRlQXJyYXkqIHNyY1BpeGVsQXJyYXkgPSBwYWludGluZ0RhdGEtPnNy
Y1BpeGVsQXJyYXk7CiAgICAgQnl0ZUFycmF5KiBkc3RQaXhlbEFycmF5ID0gcGFpbnRpbmdEYXRh
LT5kc3RQaXhlbEFycmF5OwpAQCAtMTYxLDcgKzE2MSw3IEBAIHZvaWQgRkVNb3JwaG9sb2d5Ojpw
bGF0Zm9ybUFwcGx5R2VuZXJpYygKICNpZiBFTkFCTEUoUEFSQUxMRUxfSk9CUykKIHZvaWQgRkVN
b3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5V29ya2VyKFBsYXRmb3JtQXBwbHlQYXJhbWV0ZXJzKiBw
YXJhbSkKIHsKLSAgICBwYXJhbS0+ZmlsdGVyLT5wbGF0Zm9ybUFwcGx5R2VuZXJpYyhwYXJhbS0+
cGFpbnRpbmdEYXRhLCBwYXJhbS0+c3RhcnRZLCBwYXJhbS0+ZW5kWSk7CisgICAgcGFyYW0tPmZp
bHRlci0+cGxhdGZvcm1BcHBseUdlbmVyaWNNb3JwaG9sb2d5KHBhcmFtLT5wYWludGluZ0RhdGEs
IHBhcmFtLT5zdGFydFksIHBhcmFtLT5lbmRZKTsKIH0KICNlbmRpZgogCkBAIC0xODksMTggKzE4
OSwxMyBAQCB2b2lkIEZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseShQYWludGluCiAgICAgICAg
IC8vIEZhbGxiYWNrIHRvIHNpbmdsZSB0aHJlYWQgbW9kZWwKICAgICB9CiAjZW5kaWYKLSAgICBw
bGF0Zm9ybUFwcGx5R2VuZXJpYyhwYWludGluZ0RhdGEsIDAsIHBhaW50aW5nRGF0YS0+aGVpZ2h0
KTsKKyAgICBwbGF0Zm9ybUFwcGx5R2VuZXJpY01vcnBob2xvZ3kocGFpbnRpbmdEYXRhLCAwLCBw
YWludGluZ0RhdGEtPmhlaWdodCk7CiB9CiAKIAotdm9pZCBGRU1vcnBob2xvZ3k6OmFwcGx5KCkK
K3ZvaWQgRkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5R2VuZXJpYygpCiB7Ci0gICAgaWYgKGhh
c1Jlc3VsdCgpKQotICAgICAgICByZXR1cm47CiAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0
RWZmZWN0KDApOwotICAgIGluLT5hcHBseSgpOwotICAgIGlmICghaW4tPmhhc1Jlc3VsdCgpKQot
ICAgICAgICByZXR1cm47CiAKICAgICBCeXRlQXJyYXkqIGRzdFBpeGVsQXJyYXkgPSBjcmVhdGVQ
cmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKICAgICBpZiAoIWRzdFBpeGVsQXJyYXkpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVNb3JwaG9sb2d5LmgJKHJldmlzaW9uIDk3Nzc1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuaAkod29ya2luZyBjb3B5KQpAQCAtNDYs
NyArNDYsNyBAQCBwdWJsaWM6CiAgICAgZmxvYXQgcmFkaXVzWSgpIGNvbnN0OwogICAgIGJvb2wg
c2V0UmFkaXVzWShmbG9hdCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoKTsKKyAgICB2aXJ0
dWFsIHZvaWQgcGxhdGZvcm1BcHBseUdlbmVyaWMoKTsKICAgICB2aXJ0dWFsIHZvaWQgZHVtcCgp
OwogCiAgICAgdmlydHVhbCB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCk7CkBAIC03
Niw3ICs3Niw3IEBAIHB1YmxpYzoKICNlbmRpZgogCiAgICAgaW5saW5lIHZvaWQgcGxhdGZvcm1B
cHBseShQYWludGluZ0RhdGEqKTsKLSAgICBpbmxpbmUgdm9pZCBwbGF0Zm9ybUFwcGx5R2VuZXJp
YyhQYWludGluZ0RhdGEqLCBjb25zdCBpbnQgeVN0YXJ0LCBjb25zdCBpbnQgeUVuZCk7CisgICAg
aW5saW5lIHZvaWQgcGxhdGZvcm1BcHBseUdlbmVyaWNNb3JwaG9sb2d5KFBhaW50aW5nRGF0YSos
IGNvbnN0IGludCB5U3RhcnQsIGNvbnN0IGludCB5RW5kKTsKIHByaXZhdGU6CiAgICAgRkVNb3Jw
aG9sb2d5KEZpbHRlciosIE1vcnBob2xvZ3lPcGVyYXRvclR5cGUsIGZsb2F0IHJhZGl1c1gsIGZs
b2F0IHJhZGl1c1kpOwogICAgIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRU9mZnNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5jcHAJKHJldmlzaW9uIDk3Nzc1KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTc0LDE0ICs3NCw5IEBAIHZvaWQgRkVPZmZzZXQ6OmRldGVybWluZUFi
c29sdXRlUGFpbnRSZWMKICAgICBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0
KHBhaW50UmVjdCkpOwogfQogCi12b2lkIEZFT2Zmc2V0OjphcHBseSgpCit2b2lkIEZFT2Zmc2V0
OjpwbGF0Zm9ybUFwcGx5R2VuZXJpYygpCiB7Ci0gICAgaWYgKGhhc1Jlc3VsdCgpKQotICAgICAg
ICByZXR1cm47CiAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwotICAgIGlu
LT5hcHBseSgpOwotICAgIGlmICghaW4tPmhhc1Jlc3VsdCgpKQotICAgICAgICByZXR1cm47CiAK
ICAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgp
OwogICAgIGlmICghcmVzdWx0SW1hZ2UpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5oCShyZXZpc2lvbiA5Nzc3NSkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuaAkod29y
a2luZyBjb3B5KQpAQCAtMzgsNyArMzgsNyBAQCBwdWJsaWM6CiAgICAgZmxvYXQgZHkoKSBjb25z
dDsKICAgICB2b2lkIHNldER5KGZsb2F0KTsKIAotICAgIHZpcnR1YWwgdm9pZCBhcHBseSgpOwor
ICAgIHZpcnR1YWwgdm9pZCBwbGF0Zm9ybUFwcGx5R2VuZXJpYygpOwogICAgIHZpcnR1YWwgdm9p
ZCBkdW1wKCk7CiAgICAgCiAgICAgdmlydHVhbCB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRS
ZWN0KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
VGlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRVRpbGUuY3BwCShyZXZpc2lvbiA5Nzc3NSkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMs
MTYgKzQzLDExIEBAIFBhc3NSZWZQdHI8RkVUaWxlPiBGRVRpbGU6OmNyZWF0ZShGaWx0ZXIKICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IEZFVGlsZShmaWx0ZXIpKTsKIH0KIAotdm9pZCBGRVRpbGU6
OmFwcGx5KCkKK3ZvaWQgRkVUaWxlOjpwbGF0Zm9ybUFwcGx5R2VuZXJpYygpCiB7CiAvLyBGSVhN
RTogU2VlIGJ1ZyA0NzMxNS4gVGhpcyBpcyBhIGhhY2sgdG8gd29yayBhcm91bmQgYSBjb21waWxl
IGZhaWx1cmUsIGJ1dCBpcyBpbmNvcnJlY3QgYmVoYXZpb3Igb3RoZXJ3aXNlLgogI2lmIEVOQUJM
RShTVkcpCi0gICAgaWYgKGhhc1Jlc3VsdCgpKQotICAgICAgICByZXR1cm47CiAgICAgRmlsdGVy
RWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwotICAgIGluLT5hcHBseSgpOwotICAgIGlmICgh
aW4tPmhhc1Jlc3VsdCgpKQotICAgICAgICByZXR1cm47CiAKICAgICBJbWFnZUJ1ZmZlciogcmVz
dWx0SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOwogICAgIGlmICghcmVzdWx0SW1h
Z2UpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGls
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVUaWxlLmgJKHJldmlzaW9uIDk3Nzc1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBA
QCBjbGFzcyBGRVRpbGUgOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKIHB1YmxpYzoKICAgICBzdGF0
aWMgUGFzc1JlZlB0cjxGRVRpbGU+IGNyZWF0ZShGaWx0ZXIqIGZpbHRlcik7CiAKLSAgICB2aXJ0
dWFsIHZvaWQgYXBwbHkoKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1BcHBseUdlbmVyaWMo
KTsKICAgICB2aXJ0dWFsIHZvaWQgZHVtcCgpOwogCiAgICAgdmlydHVhbCB2b2lkIGRldGVybWlu
ZUFic29sdXRlUGFpbnRSZWN0KCkgeyBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRS
ZWN0KG1heEVmZmVjdFJlY3QoKSkpOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwCShyZXZpc2lv
biA5Nzc3NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVU
dXJidWxlbmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzY0LDEwICszNjQsOCBAQCB2b2lkIEZF
VHVyYnVsZW5jZTo6ZmlsbFJlZ2lvbldvcmtlcihGaWxsCiB9CiAjZW5kaWYgLy8gRU5BQkxFKFBB
UkFMTEVMX0pPQlMpCiAKLXZvaWQgRkVUdXJidWxlbmNlOjphcHBseSgpCit2b2lkIEZFVHVyYnVs
ZW5jZTo6cGxhdGZvcm1BcHBseUdlbmVyaWMoKQogewotICAgIGlmIChoYXNSZXN1bHQoKSkKLSAg
ICAgICAgcmV0dXJuOwogICAgIEJ5dGVBcnJheSogcGl4ZWxBcnJheSA9IGNyZWF0ZVVubXVsdGlw
bGllZEltYWdlUmVzdWx0KCk7CiAgICAgaWYgKCFwaXhlbEFycmF5KQogICAgICAgICByZXR1cm47
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVs
ZW5jZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVUdXJidWxlbmNlLmgJKHJldmlzaW9uIDk3Nzc1KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuaAkod29ya2luZyBjb3B5KQpA
QCAtNjIsNyArNjIsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgZmlsbFJlZ2lvbldvcmtl
cih2b2lkKik7CiAjZW5kaWYKIAotICAgIHZpcnR1YWwgdm9pZCBhcHBseSgpOworICAgIHZpcnR1
YWwgdm9pZCBwbGF0Zm9ybUFwcGx5R2VuZXJpYygpOwogICAgIHZpcnR1YWwgdm9pZCBkdW1wKCk7
CiAgICAgCiAgICAgdmlydHVhbCB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkgeyBz
ZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KG1heEVmZmVjdFJlY3QoKSkpOyB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVm
ZmVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCShyZXZpc2lvbiA5Nzc3NSkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtODUsNiArODUsMjkgQEAgRmlsdGVyRWZmZWN0KiBGaWx0ZXJFZmZlY3Q6OmlucHV0
RWZmZWN0KAogICAgIHJldHVybiBtX2lucHV0RWZmZWN0cy5hdChudW1iZXIpLmdldCgpOwogfQog
Citib29sIEZpbHRlckVmZmVjdDo6aGFzUmVzdWx0KCkgY29uc3QKK3sKKyAgICAvLyBUaGlzIGZ1
bmN0aW9uIG5lZWRzIHBsYXRmb3JtIHNwZWNpZmljIGNoZWNrcywgaWYgdGhlIG1lbW9yeSBtYW5h
Z21lbnQgaXMgbm90IGRvbmUgYnkgRmlsdGVyRWZmZWN0LgorICAgIHJldHVybiBtX2ltYWdlQnVm
ZmVyUmVzdWx0IHx8IG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgfHwgbV9wcmVtdWx0aXBsaWVk
SW1hZ2VSZXN1bHQ7Cit9CisKK3ZvaWQgRmlsdGVyRWZmZWN0OjphcHBseSgpCit7CisgICAgaWYg
KGhhc1Jlc3VsdCgpKQorICAgICAgICByZXR1cm47CisgICAgdW5zaWduZWQgc2l6ZSA9IG1faW5w
dXRFZmZlY3RzLnNpemUoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytp
KSB7CisgICAgICAgIEZpbHRlckVmZmVjdCogaW4gPSBtX2lucHV0RWZmZWN0cy5hdChpKS5nZXQo
KTsKKyAgICAgICAgaW4tPmFwcGx5KCk7CisgICAgICAgIGlmICghaW4tPmhhc1Jlc3VsdCgpKQor
ICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVj
dCgpOworICAgIAorICAgIC8vIEFkZCBwbGF0Zm9ybSBzcGVjaWZpYyBhcHBseSBmdW5jdGlvbnMg
aGVyZSBhbmQgcmV0dXJuIGVhcmxpZXIuCisgICAgcGxhdGZvcm1BcHBseUdlbmVyaWMoKTsKK30K
Kwogdm9pZCBGaWx0ZXJFZmZlY3Q6OmNsZWFyUmVzdWx0KCkKIHsKICAgICBpZiAobV9pbWFnZUJ1
ZmZlclJlc3VsdCkKQEAgLTIzNiw3ICsyNTksNiBAQCBJbWFnZUJ1ZmZlciogRmlsdGVyRWZmZWN0
OjpjcmVhdGVJbWFnZUJ1CiB7CiAgICAgLy8gT25seSBvbmUgcmVzdWx0IHR5cGUgaXMgYWxsb3dl
ZC4KICAgICBBU1NFUlQoIWhhc1Jlc3VsdCgpKTsKLSAgICBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50
UmVjdCgpOwogICAgIGlmIChtX2Fic29sdXRlUGFpbnRSZWN0LmlzRW1wdHkoKSkKICAgICAgICAg
cmV0dXJuIDA7CiAgICAgbV9pbWFnZUJ1ZmZlclJlc3VsdCA9IEltYWdlQnVmZmVyOjpjcmVhdGUo
bV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCksIENvbG9yU3BhY2VMaW5lYXJSR0IpOwpAQCAtMjUy
LDcgKzI3NCw2IEBAIEJ5dGVBcnJheSogRmlsdGVyRWZmZWN0OjpjcmVhdGVVbm11bHRpcGwKICAg
ICBBU1NFUlQoIWhhc1Jlc3VsdCgpKTsKICAgICBBU1NFUlQoaXNGaWx0ZXJTaXplVmFsaWQobV9h
YnNvbHV0ZVBhaW50UmVjdCkpOwogCi0gICAgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKTsK
ICAgICBpZiAobV9hYnNvbHV0ZVBhaW50UmVjdC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiAw
OwogICAgIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBCeXRlQXJyYXk6OmNyZWF0ZShtX2Fi
c29sdXRlUGFpbnRSZWN0LndpZHRoKCkgKiBtX2Fic29sdXRlUGFpbnRSZWN0LmhlaWdodCgpICog
NCk7CkBAIC0yNjUsNyArMjg2LDYgQEAgQnl0ZUFycmF5KiBGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVBy
ZW11bHRpcAogICAgIEFTU0VSVCghaGFzUmVzdWx0KCkpOwogICAgIEFTU0VSVChpc0ZpbHRlclNp
emVWYWxpZChtX2Fic29sdXRlUGFpbnRSZWN0KSk7CiAKLSAgICBkZXRlcm1pbmVBYnNvbHV0ZVBh
aW50UmVjdCgpOwogICAgIGlmIChtX2Fic29sdXRlUGFpbnRSZWN0LmlzRW1wdHkoKSkKICAgICAg
ICAgcmV0dXJuIDA7CiAgICAgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBCeXRlQXJyYXk6
OmNyZWF0ZShtX2Fic29sdXRlUGFpbnRSZWN0LndpZHRoKCkgKiBtX2Fic29sdXRlUGFpbnRSZWN0
LmhlaWdodCgpICogNCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZpbHRlckVmZmVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmgJKHJldmlzaW9uIDk3Nzc1KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaAko
d29ya2luZyBjb3B5KQpAQCAtNTQsNyArNTQsNyBAQCBjbGFzcyBGaWx0ZXJFZmZlY3QgOiBwdWJs
aWMgUmVmQ291bnRlZDxGCiBwdWJsaWM6CiAgICAgdmlydHVhbCB+RmlsdGVyRWZmZWN0KCk7CiAK
LSAgICBib29sIGhhc1Jlc3VsdCgpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2VCdWZmZXJSZXN1bHQg
fHwgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCB8fCBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3Vs
dDsgfQorICAgIGJvb2wgaGFzUmVzdWx0KCkgY29uc3Q7CiAgICAgdm9pZCBjbGVhclJlc3VsdCgp
OwogICAgIEltYWdlQnVmZmVyKiBhc0ltYWdlQnVmZmVyKCk7CiAgICAgUGFzc1JlZlB0cjxCeXRl
QXJyYXk+IGFzVW5tdWx0aXBsaWVkSW1hZ2UoY29uc3QgSW50UmVjdCYpOwpAQCAtNzksNyArNzks
OSBAQCBwdWJsaWM6CiAgICAgRmxvYXRSZWN0IG1heEVmZmVjdFJlY3QoKSBjb25zdCB7IHJldHVy
biBtX21heEVmZmVjdFJlY3Q7IH0KICAgICB2b2lkIHNldE1heEVmZmVjdFJlY3QoY29uc3QgRmxv
YXRSZWN0JiBtYXhFZmZlY3RSZWN0KSB7IG1fbWF4RWZmZWN0UmVjdCA9IG1heEVmZmVjdFJlY3Q7
IH0gCiAKLSAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoKSA9IDA7CisgICAgdm9pZCBhcHBseSgpOwor
ICAgIAorICAgIHZpcnR1YWwgdm9pZCBwbGF0Zm9ybUFwcGx5R2VuZXJpYygpID0gMDsKICAgICB2
aXJ0dWFsIHZvaWQgZHVtcCgpID0gMDsKIAogICAgIHZpcnR1YWwgdm9pZCBkZXRlcm1pbmVBYnNv
bHV0ZVBhaW50UmVjdCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9Tb3VyY2VBbHBoYS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5jcHAJKHJldmlzaW9uIDk3Nzc1KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTUyLDEwICs1Miw4IEBAIHZvaWQgU291cmNlQWxwaGE6OmRl
dGVybWluZUFic29sdXRlUGFpbnQKICAgICBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJ
bnRSZWN0KHBhaW50UmVjdCkpOwogfQogCi12b2lkIFNvdXJjZUFscGhhOjphcHBseSgpCit2b2lk
IFNvdXJjZUFscGhhOjpwbGF0Zm9ybUFwcGx5R2VuZXJpYygpCiB7Ci0gICAgaWYgKGhhc1Jlc3Vs
dCgpKQotICAgICAgICByZXR1cm47CiAgICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gY3Jl
YXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKICAgICBGaWx0ZXIqIGZpbHRlciA9IHRoaXMtPmZpbHRl
cigpOwogICAgIGlmICghcmVzdWx0SW1hZ2UgfHwgIWZpbHRlci0+c291cmNlSW1hZ2UoKSkKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L1NvdXJjZUFscGhhLmgJKHJldmlzaW9uIDk3Nzc1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3
ICszNCw3IEBAIHB1YmxpYzogICAgICAgIAogCiAgICAgc3RhdGljIGNvbnN0IEF0b21pY1N0cmlu
ZyYgZWZmZWN0TmFtZSgpOwogCi0gICAgdmlydHVhbCB2b2lkIGFwcGx5KCk7CisgICAgdmlydHVh
bCB2b2lkIHBsYXRmb3JtQXBwbHlHZW5lcmljKCk7CiAgICAgdmlydHVhbCB2b2lkIGR1bXAoKTsK
IAogICAgIHZpcnR1YWwgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L1NvdXJjZUdyYXBoaWMuY3BwCShyZXZpc2lvbiA5Nzc3NSkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTUxLDEwICs1MSw4IEBAIHZvaWQgU291cmNlR3JhcGhpYzo6ZGV0ZXJtaW5lQWJzb2x1dGVQ
YWkKICAgICBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KHBhaW50UmVjdCkp
OwogfQogCi12b2lkIFNvdXJjZUdyYXBoaWM6OmFwcGx5KCkKK3ZvaWQgU291cmNlR3JhcGhpYzo6
cGxhdGZvcm1BcHBseUdlbmVyaWMoKQogewotICAgIGlmIChoYXNSZXN1bHQoKSkKLSAgICAgICAg
cmV0dXJuOwogICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVy
UmVzdWx0KCk7CiAgICAgRmlsdGVyKiBmaWx0ZXIgPSB0aGlzLT5maWx0ZXIoKTsKICAgICBpZiAo
IXJlc3VsdEltYWdlIHx8ICFmaWx0ZXItPnNvdXJjZUltYWdlKCkpCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBo
aWMuaAkocmV2aXNpb24gOTc3NzUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNyBA
QCBwdWJsaWM6ICAgICAgICAKIAogICAgIHN0YXRpYyBjb25zdCBBdG9taWNTdHJpbmcmIGVmZmVj
dE5hbWUoKTsKIAotICAgIHZpcnR1YWwgdm9pZCBhcHBseSgpOworICAgIHZpcnR1YWwgdm9pZCBw
bGF0Zm9ybUFwcGx5R2VuZXJpYygpOwogICAgIHZpcnR1YWwgdm9pZCBkdW1wKCk7CiAKICAgICB2
aXJ0dWFsIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuY3BwCShyZXZp
c2lvbiA5Nzc3NSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZF
SW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Niw5ICs1Niw5IEBAIHZvaWQgRkVJbWFnZTo6
ZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QKICAgICBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNs
b3NpbmdJbnRSZWN0KHBhaW50UmVjdCkpOwogfQogCi12b2lkIEZFSW1hZ2U6OmFwcGx5KCkKK3Zv
aWQgRkVJbWFnZTo6cGxhdGZvcm1BcHBseUdlbmVyaWMoKQogewotICAgIGlmICghbV9pbWFnZS5n
ZXQoKSB8fCBoYXNSZXN1bHQoKSkKKyAgICBpZiAoIW1faW1hZ2UuZ2V0KCkpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVy
UmVzdWx0KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdG
RUltYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRl
cnMvU1ZHRkVJbWFnZS5oCShyZXZpc2lvbiA5Nzc3NSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9n
cmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcs
NyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldEFic29sdXRlU3VicmVnaW9uKGNvbnN0IEZsb2F0
UmVjdCYgYWJzb2x1dGVTdWJyZWdpb24pIHsgbV9hYnNvbHV0ZVN1YnJlZ2lvbiA9IGFic29sdXRl
U3VicmVnaW9uOyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoKTsKKyAgICB2aXJ0dWFsIHZv
aWQgcGxhdGZvcm1BcHBseUdlbmVyaWMoKTsKICAgICB2aXJ0dWFsIHZvaWQgZHVtcCgpOwogCiAg
ICAgdmlydHVhbCB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>111490</attachid>
            <date>2011-10-18 13:11:14 -0700</date>
            <delta_ts>2011-10-19 05:20:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-70350-20111018221112.patch</filename>
            <type>text/plain</type>
            <size>36018</size>
            <attacher name="Dirk Schulze">krit</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk3NzgyKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsOTAgQEAKKzIwMTEtMTAtMTggIERpcmsgU2No
dWx6ZSAgPGtyaXRAd2Via2l0Lm9yZz4KKworICAgICAgICBNYWtlIEZpbHRlckVmZmVjdDo6YXBw
bHkoKSBpbmRlcGVuZGVudCBvZiBpbWFnZSBkYXRhIG1hbmFnZW1lbnQKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcwMzUwCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBGaWx0ZXJFZmZlY3Q6OmFw
cGx5KCkgbmVlZHMgdG8gYmUgaW5kZXBlbmRlbnQgZnJvbSB0aGUgaW1hZ2UgZGF0YSBtYW5hZ2Vt
ZW50IGluIEZpbHRlckVmZmVjdC4KKyAgICAgICAgVGhpcyBhbGxvd3MgaW1wbGVtZW50aW5nIGVm
ZmVjdGl2ZSBoYXJkd2FyZSBhY2NlbGVyYXRlZCBhbHRlcm5hdGl2ZXMsIGxpa2UgT3BlbkdMLCBD
SSBvciBPcGVuQ0wKKyAgICAgICAgYmFzZWQgZmlsdGVycywgdG8gdGhlIHNvZnR3YXJlIHJlbmRl
cmluZy4gVGhlIHNvZnR3YXJlIHJlbmRlcmluZyBjb2RlIHdpbGwgYmUgdXNlZCBhcyBmYWxsYmFj
aworICAgICAgICBhbmQgbW92ZXMgdG8gcGxhdGZvcm1BcHBseUdlbmVyaWMoKS4KKworICAgICAg
ICBUaGUgcGF0Y2ggZG9lcyBub3QgY2hhbmdlIHRoZSBiZWhhdmlvciBvZiBTVkcgZmlsdGVycy4g
RGlkIG5vdCBhZGQgbmV3IHRlc3QgY2FzZXMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFQmxlbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVCbGVuZDo6cGxhdGZv
cm1BcHBseUdlbmVyaWMpOiBSZW5hbWVkIGFwcGx5KCkgdG8gcGxhdGZvcm1BcHBseUdlbmVyaWMo
KQorICAgICAgICAgICAgYW5kIHJlbW92ZWQgdmFsaWRpdHkgY2hlY2tzIHRoYXQgYXJlIGRvbmUg
YnkgRmlsdGVyRWZmZWN0OjphcHBseSgpLiBUaGlzIGlzIGEKKyAgICAgICAgICAgIHJlY3Vycmlu
ZyBwYXR0ZXJuIGZvciBhbGwgZm9sbG93aW5nIGVmZmVjdHMuIAorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0
cml4OjpwbGF0Zm9ybUFwcGx5R2VuZXJpYyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUNvbG9yTWF0cml4Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9u
ZW50VHJhbnNmZXI6OnBsYXRmb3JtQXBwbHlHZW5lcmljKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZF
Q29tcG9zaXRlOjpwbGF0Zm9ybUFwcGx5R2VuZXJpYyk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbnZv
bHZlTWF0cml4OjpwbGF0Zm9ybUFwcGx5R2VuZXJpYyk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpG
RURpc3BsYWNlbWVudE1hcDo6cGxhdGZvcm1BcHBseUdlbmVyaWMpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpGRURyb3BTaGFkb3c6OnBsYXRmb3JtQXBwbHlHZW5lcmljKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5oOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUZsb29kOjpw
bGF0Zm9ybUFwcGx5R2VuZXJpYyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUZsb29kLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNz
aWFuQmx1ci5jcHA6IFJlbmFtZWQgYWxyZWFkeSB1c2VkIG5hbWUgcGxhdGZvcm1BcHBseUdlbmVy
aWMgdG8gcGxhdGZvcm1BcHBseUdlbmVyaWNCbHVyLgorICAgICAgICAoV2ViQ29yZTo6RkVHYXVz
c2lhbkJsdXI6OnBsYXRmb3JtQXBwbHlHZW5lcmljQmx1cik6CisgICAgICAgIChXZWJDb3JlOjpG
RUdhdXNzaWFuQmx1cjo6cGxhdGZvcm1BcHBseVdvcmtlcik6CisgICAgICAgIChXZWJDb3JlOjpG
RUdhdXNzaWFuQmx1cjo6cGxhdGZvcm1BcHBseSk6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNz
aWFuQmx1cjo6cGxhdGZvcm1BcHBseUdlbmVyaWMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwOiBSZW5hbWVkIGFscmVhZHkgdXNlZCBuYW1lIHBsYXRm
b3JtQXBwbHlHZW5lcmljIHRvIHBsYXRmb3JtQXBwbHlHZW5lcmljTGlnaHRpbmcuCisgICAgICAg
IChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpwbGF0Zm9ybUFwcGx5R2VuZXJpY0xpZ2h0aW5nKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnBsYXRmb3JtQXBwbHkpOgorICAgICAgICAoV2Vi
Q29yZTo6RkVMaWdodGluZzo6cGxhdGZvcm1BcHBseUdlbmVyaWMpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5oOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRU1lcmdlOjpw
bGF0Zm9ybUFwcGx5R2VuZXJpYyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRU1lcmdlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBo
b2xvZ3kuY3BwOiBSZW5hbWVkIGFscmVhZHkgdXNlZCBuYW1lIHBsYXRmb3JtQXBwbHlHZW5lcmlj
IHRvIHBsYXRmb3JtQXBwbHlHZW5lcmljTW9ycGhvbG9neS4KKyAgICAgICAgKFdlYkNvcmU6OkZF
TW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseUdlbmVyaWNNb3JwaG9sb2d5KToKKyAgICAgICAgKFdl
YkNvcmU6OkZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseVdvcmtlcik6CisgICAgICAgIChXZWJD
b3JlOjpGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6RkVN
b3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5R2VuZXJpYyk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFT2Zmc2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFT2Zmc2V0OjpwbGF0
Zm9ybUFwcGx5R2VuZXJpYyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RU9mZnNldC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkZFVGlsZTo6cGxhdGZvcm1BcHBseUdlbmVyaWMpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmg6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RkVUdXJidWxlbmNlOjpwbGF0Zm9ybUFwcGx5R2VuZXJpYyk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHA6IEFkZGVkIG5vbi12aXJ0dWFsIGFwcGx5
KCkgZnVuY3Rpb24uIFRoaXMgd2lsbCBjYWxsIHRoZSBwbGF0Zm9ybSBzcGVjaWZpYyBhcHBseSBm
dW5jdGlvbnMsCisgICAgICAgICAgICB3aGljaCBuZWVkIHRvIGJlIHZpcnR1YWwgbm93LgorICAg
ICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpoYXNSZXN1bHQpOiBBZGRlZCBhIGNvbW1lbnQg
Zm9yIG5ldyBpbXBsZW1lbnRhdGlvbnMuIFRoaXMgZnVuY3Rpb24gbmVlZHMgdG8gYmUgdXBkYXRl
ZCBmb3IgZXZlcnkgbmV3IHBvcnQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmFw
cGx5KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y3JlYXRlSW1hZ2VCdWZmZXJS
ZXN1bHQpOiBSZW1vdmVkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkgY2FsbC4gVGhpcyBp
cyBkb25lIGluIGFwcGx5KCkgbm93LgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpj
cmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
RmlsdGVyRWZmZWN0OjpjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpOiBEaXR0by4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U291cmNlQWxwaGE6OnBsYXRmb3JtQXBwbHlHZW5lcmljKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmg6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlNvdXJjZUdyYXBoaWM6OnBsYXRmb3JtQXBwbHlHZW5lcmljKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuaDoKKyAgICAgICAgKiBzdmcvZ3JhcGhp
Y3MvZmlsdGVycy9TVkdGRUltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFSW1hZ2U6OnBs
YXRmb3JtQXBwbHlHZW5lcmljKToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdG
RUltYWdlLmg6CisKIDIwMTEtMTAtMTggIFNoYXduIFNpbmdoICA8c2hhd25zaW5naEBjaHJvbWl1
bS5vcmc+CiAKICAgICAgICAgW2Nocm9taXVtXSBUcmFja2luZyB1cGRhdGUgcmVjdHMgaW4gTGF5
ZXJDaHJvbWl1bSBhbmQgQ0NMYXllckltcGwuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHAJKHJldmlzaW9uIDk3Nzc1
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtODYsMTYgKzg2LDExIEBAIHN0YXRpYyBpbmxpbmUgdW5zaWdu
ZWQgY2hhciBsaWdodGVuKHVuc2kKICAgICByZXR1cm4gKChzdGQ6Om1heCgoMjU1IC0gYWxwaGFB
KSAqIGNvbG9yQiArIGNvbG9yQSAqIDI1NSwgKDI1NSAtIGFscGhhQikgKiBjb2xvckEgKyBjb2xv
ckIgKiAyNTUpKSAvIDI1NSk7CiB9CiAKLXZvaWQgRkVCbGVuZDo6YXBwbHkoKQordm9pZCBGRUJs
ZW5kOjpwbGF0Zm9ybUFwcGx5R2VuZXJpYygpCiB7Ci0gICAgaWYgKGhhc1Jlc3VsdCgpKQotICAg
ICAgICByZXR1cm47CisKICAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7CiAg
ICAgRmlsdGVyRWZmZWN0KiBpbjIgPSBpbnB1dEVmZmVjdCgxKTsKLSAgICBpbi0+YXBwbHkoKTsK
LSAgICBpbjItPmFwcGx5KCk7Ci0gICAgaWYgKCFpbi0+aGFzUmVzdWx0KCkgfHwgIWluMi0+aGFz
UmVzdWx0KCkpCi0gICAgICAgIHJldHVybjsKIAogICAgIEFTU0VSVChtX21vZGUgPiBGRUJMRU5E
X01PREVfVU5LTk9XTik7CiAgICAgQVNTRVJUKG1fbW9kZSA8PSBGRUJMRU5EX01PREVfTElHSFRF
Tik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxl
bmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFQmxlbmQuaAkocmV2aXNpb24gOTc3NzUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUs
NyBAQCBwdWJsaWM6CiAgICAgQmxlbmRNb2RlVHlwZSBibGVuZE1vZGUoKSBjb25zdDsKICAgICBi
b29sIHNldEJsZW5kTW9kZShCbGVuZE1vZGVUeXBlKTsKIAotICAgIHZpcnR1YWwgdm9pZCBhcHBs
eSgpOworICAgIHZpcnR1YWwgdm9pZCBwbGF0Zm9ybUFwcGx5R2VuZXJpYygpOwogICAgIHZpcnR1
YWwgdm9pZCBkdW1wKCk7CiAKICAgICB2aXJ0dWFsIFRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVz
ZW50YXRpb24oVGV4dFN0cmVhbSYsIGludCBpbmRlbnRpb24pIGNvbnN0OwpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29s
b3JNYXRyaXguY3BwCShyZXZpc2lvbiA5Nzc3NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1
NiwxNCArMTU2LDkgQEAgdm9pZCBlZmZlY3RUeXBlKEJ5dGVBcnJheSogcGl4ZWxBcnJheSwgYwog
ICAgIH0KIH0KIAotdm9pZCBGRUNvbG9yTWF0cml4OjphcHBseSgpCit2b2lkIEZFQ29sb3JNYXRy
aXg6OnBsYXRmb3JtQXBwbHlHZW5lcmljKCkKIHsKLSAgICBpZiAoaGFzUmVzdWx0KCkpCi0gICAg
ICAgIHJldHVybjsKICAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7Ci0gICAg
aW4tPmFwcGx5KCk7Ci0gICAgaWYgKCFpbi0+aGFzUmVzdWx0KCkpCi0gICAgICAgIHJldHVybjsK
IAogICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0
KCk7CiAgICAgaWYgKCFyZXN1bHRJbWFnZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5oCShyZXZpc2lv
biA5Nzc3NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVD
b2xvck1hdHJpeC5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCw3IEBAIHB1YmxpYzoKICAg
ICBjb25zdCBWZWN0b3I8ZmxvYXQ+JiB2YWx1ZXMoKSBjb25zdDsKICAgICBib29sIHNldFZhbHVl
cyhjb25zdCBWZWN0b3I8ZmxvYXQ+Jik7CiAKLSAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1BcHBseUdlbmVyaWMoKTsKICAgICB2aXJ0dWFsIHZvaWQg
ZHVtcCgpOwogCiAgICAgdmlydHVhbCBUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9u
KFRleHRTdHJlYW0mLCBpbnQgaW5kZW50aW9uKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBv
bmVudFRyYW5zZmVyLmNwcAkocmV2aXNpb24gOTc3NzUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xNTAsMTQgKzE1MCw5IEBAIHN0YXRpYyB2b2lkIGdhbW1hKHVuc2lnbmVkIGNoYXIq
IHZhbHVlcywKICAgICB9CiB9CiAKLXZvaWQgRkVDb21wb25lbnRUcmFuc2Zlcjo6YXBwbHkoKQor
dm9pZCBGRUNvbXBvbmVudFRyYW5zZmVyOjpwbGF0Zm9ybUFwcGx5R2VuZXJpYygpCiB7Ci0gICAg
aWYgKGhhc1Jlc3VsdCgpKQotICAgICAgICByZXR1cm47CiAgICAgRmlsdGVyRWZmZWN0KiBpbiA9
IGlucHV0RWZmZWN0KDApOwotICAgIGluLT5hcHBseSgpOwotICAgIGlmICghaW4tPmhhc1Jlc3Vs
dCgpKQotICAgICAgICByZXR1cm47CiAKICAgICBCeXRlQXJyYXkqIHBpeGVsQXJyYXkgPSBjcmVh
dGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwogICAgIGlmICghcGl4ZWxBcnJheSkKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFu
c2Zlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5oCShyZXZpc2lvbiA5Nzc3NSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC03OCw3ICs3OCw3IEBAIHB1YmxpYzoKICAgICBDb21wb25lbnRUcmFu
c2ZlckZ1bmN0aW9uIGFscGhhRnVuY3Rpb24oKSBjb25zdDsKICAgICB2b2lkIHNldEFscGhhRnVu
Y3Rpb24oY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYpOwogCi0gICAgdmlydHVhbCB2
b2lkIGFwcGx5KCk7CisgICAgdmlydHVhbCB2b2lkIHBsYXRmb3JtQXBwbHlHZW5lcmljKCk7CiAg
ICAgdmlydHVhbCB2b2lkIGR1bXAoKTsKIAogICAgIHZpcnR1YWwgVGV4dFN0cmVhbSYgZXh0ZXJu
YWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiwgaW50IGluZGVudGlvbikgY29uc3Q7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFQ29tcG9zaXRlLmNwcAkocmV2aXNpb24gOTc3NzUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTk2LDE2ICsxOTYsMTAgQEAgdm9pZCBGRUNvbXBvc2l0ZTo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWlu
dAogICAgIH0KIH0KIAotdm9pZCBGRUNvbXBvc2l0ZTo6YXBwbHkoKQordm9pZCBGRUNvbXBvc2l0
ZTo6cGxhdGZvcm1BcHBseUdlbmVyaWMoKQogewotICAgIGlmIChoYXNSZXN1bHQoKSkKLSAgICAg
ICAgcmV0dXJuOwogICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKICAgICBG
aWx0ZXJFZmZlY3QqIGluMiA9IGlucHV0RWZmZWN0KDEpOwotICAgIGluLT5hcHBseSgpOwotICAg
IGluMi0+YXBwbHkoKTsKLSAgICBpZiAoIWluLT5oYXNSZXN1bHQoKSB8fCAhaW4yLT5oYXNSZXN1
bHQoKSkKLSAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKG1fdHlwZSA9PSBGRUNPTVBPU0lURV9P
UEVSQVRPUl9BUklUSE1FVElDKSB7CiAgICAgICAgIEJ5dGVBcnJheSogZHN0UGl4ZWxBcnJheSA9
IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuaAkocmV2
aXNpb24gOTc3NzUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFQ29tcG9zaXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDcgKzU5LDcgQEAgcHVibGljOgog
ICAgIGZsb2F0IGs0KCkgY29uc3Q7CiAgICAgYm9vbCBzZXRLNChmbG9hdCk7CiAKLSAgICB2aXJ0
dWFsIHZvaWQgYXBwbHkoKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1BcHBseUdlbmVyaWMo
KTsKICAgICB2aXJ0dWFsIHZvaWQgZHVtcCgpOwogICAgIAogICAgIHZpcnR1YWwgdm9pZCBkZXRl
cm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3Bw
CShyZXZpc2lvbiA5Nzc3NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVDb252b2x2ZU1hdHJpeC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwMSwxNCArNDAx
LDkgQEAgdm9pZCBGRUNvbnZvbHZlTWF0cml4OjpzZXRJbnRlcmlvclBpeGVscwogfQogI2VuZGlm
CiAKLXZvaWQgRkVDb252b2x2ZU1hdHJpeDo6YXBwbHkoKQordm9pZCBGRUNvbnZvbHZlTWF0cml4
OjpwbGF0Zm9ybUFwcGx5R2VuZXJpYygpCiB7Ci0gICAgaWYgKGhhc1Jlc3VsdCgpKQotICAgICAg
ICByZXR1cm47CiAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwotICAgIGlu
LT5hcHBseSgpOwotICAgIGlmICghaW4tPmhhc1Jlc3VsdCgpKQotICAgICAgICByZXR1cm47CiAK
ICAgICBCeXRlQXJyYXkqIHJlc3VsdEltYWdlOwogICAgIGlmIChtX3ByZXNlcnZlQWxwaGEpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVN
YXRyaXguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguaAkocmV2aXNpb24gOTc3NzUpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguaAkod29ya2lu
ZyBjb3B5KQpAQCAtNzIsNyArNzIsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBwcmVzZXJ2ZUFscGhh
KCkgY29uc3Q7CiAgICAgYm9vbCBzZXRQcmVzZXJ2ZUFscGhhKGJvb2wpOwogCi0gICAgdmlydHVh
bCB2b2lkIGFwcGx5KCk7CisgICAgdmlydHVhbCB2b2lkIHBsYXRmb3JtQXBwbHlHZW5lcmljKCk7
CiAgICAgdmlydHVhbCB2b2lkIGR1bXAoKTsKIAogICAgIHZpcnR1YWwgdm9pZCBkZXRlcm1pbmVB
YnNvbHV0ZVBhaW50UmVjdCgpIHsgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVj
dChtYXhFZmZlY3RSZWN0KCkpKTsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5jcHAJ
KHJldmlzaW9uIDk3Nzc1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRURpc3BsYWNlbWVudE1hcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg4LDE2ICs4OCwx
MCBAQCBib29sIEZFRGlzcGxhY2VtZW50TWFwOjpzZXRTY2FsZShmbG9hdCBzCiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLXZvaWQgRkVEaXNwbGFjZW1lbnRNYXA6OmFwcGx5KCkKK3ZvaWQgRkVEaXNw
bGFjZW1lbnRNYXA6OnBsYXRmb3JtQXBwbHlHZW5lcmljKCkKIHsKLSAgICBpZiAoaGFzUmVzdWx0
KCkpCi0gICAgICAgIHJldHVybjsKICAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3Qo
MCk7CiAgICAgRmlsdGVyRWZmZWN0KiBpbjIgPSBpbnB1dEVmZmVjdCgxKTsKLSAgICBpbi0+YXBw
bHkoKTsKLSAgICBpbjItPmFwcGx5KCk7Ci0gICAgaWYgKCFpbi0+aGFzUmVzdWx0KCkgfHwgIWlu
Mi0+aGFzUmVzdWx0KCkpCi0gICAgICAgIHJldHVybjsKIAogICAgIEFTU0VSVChtX3hDaGFubmVs
U2VsZWN0b3IgIT0gQ0hBTk5FTF9VTktOT1dOKTsKICAgICBBU1NFUlQobV95Q2hhbm5lbFNlbGVj
dG9yICE9IENIQU5ORUxfVU5LTk9XTik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5oCShy
ZXZpc2lvbiA5Nzc3NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVEaXNwbGFjZW1lbnRNYXAuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsNyArNTAsNyBAQCBw
dWJsaWM6CiAgICAgZmxvYXQgc2NhbGUoKSBjb25zdDsKICAgICBib29sIHNldFNjYWxlKGZsb2F0
KTsKIAotICAgIHZpcnR1YWwgdm9pZCBhcHBseSgpOworICAgIHZpcnR1YWwgdm9pZCBwbGF0Zm9y
bUFwcGx5R2VuZXJpYygpOwogICAgIHZpcnR1YWwgdm9pZCBkdW1wKCk7CiAKICAgICB2aXJ0dWFs
IHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKSB7IHNldEFic29sdXRlUGFpbnRSZWN0
KGVuY2xvc2luZ0ludFJlY3QobWF4RWZmZWN0UmVjdCgpKSk7IH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRv
dy5jcHAJKHJldmlzaW9uIDk3Nzc1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MywxNSArNzMs
OSBAQCB2b2lkIEZFRHJvcFNoYWRvdzo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWluCiAgICAgc2V0QWJz
b2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChhYnNvbHV0ZVBhaW50UmVjdCkpOwogfQog
Ci12b2lkIEZFRHJvcFNoYWRvdzo6YXBwbHkoKQordm9pZCBGRURyb3BTaGFkb3c6OnBsYXRmb3Jt
QXBwbHlHZW5lcmljKCkKIHsKLSAgICBpZiAoaGFzUmVzdWx0KCkpCi0gICAgICAgIHJldHVybjsK
LQogICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKLSAgICBpbi0+YXBwbHko
KTsKLSAgICBpZiAoIWluLT5oYXNSZXN1bHQoKSkKLSAgICAgICAgcmV0dXJuOwogCiAgICAgSW1h
Z2VCdWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKICAgICBp
ZiAoIXJlc3VsdEltYWdlKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRURyb3BTaGFkb3cuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5oCShyZXZpc2lvbiA5Nzc3NSkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTUxLDcgKzUxLDcgQEAgcHVibGljOgogCiAgICAgc3RhdGljIGZs
b2F0IGNhbGN1bGF0ZVN0ZERldmlhdGlvbihmbG9hdCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgYXBw
bHkoKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1BcHBseUdlbmVyaWMoKTsKICAgICB2aXJ0
dWFsIHZvaWQgZHVtcCgpOwogCiAgICAgdmlydHVhbCB2b2lkIGRldGVybWluZUFic29sdXRlUGFp
bnRSZWN0KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFRmxvb2QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVGbG9vZC5jcHAJKHJldmlzaW9uIDk3Nzc1KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNzAsMTAgKzcwLDggQEAgYm9vbCBGRUZsb29kOjpzZXRGbG9vZE9wYWNpdHkoZmxvYXQgZmxv
bwogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEZFRmxvb2Q6OmFwcGx5KCkKK3ZvaWQgRkVG
bG9vZDo6cGxhdGZvcm1BcHBseUdlbmVyaWMoKQogewotICAgIGlmIChoYXNSZXN1bHQoKSkKLSAg
ICAgICAgcmV0dXJuOwogICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdl
QnVmZmVyUmVzdWx0KCk7CiAgICAgaWYgKCFyZXN1bHRJbWFnZSkKICAgICAgICAgcmV0dXJuOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUZsb29kLmgJKHJldmlzaW9uIDk3Nzc1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUZsb29kLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDcgQEAg
cHVibGljOgogICAgIGZsb2F0IGZsb29kT3BhY2l0eSgpIGNvbnN0OwogICAgIGJvb2wgc2V0Rmxv
b2RPcGFjaXR5KGZsb2F0KTsKIAotICAgIHZpcnR1YWwgdm9pZCBhcHBseSgpOworICAgIHZpcnR1
YWwgdm9pZCBwbGF0Zm9ybUFwcGx5R2VuZXJpYygpOwogICAgIHZpcnR1YWwgdm9pZCBkdW1wKCk7
CiAKICAgICB2aXJ0dWFsIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKSB7IHNldEFi
c29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QobWF4RWZmZWN0UmVjdCgpKSk7IH0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJs
dXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwCShyZXZpc2lvbiA5Nzc3NSkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDcsNyArMTA3LDcgQEAgaW5saW5lIHZvaWQgYm94Qmx1cihCeXRlQXJyYXkq
IHNyY1BpeGVsQQogICAgIH0KIH0KIAotaW5saW5lIHZvaWQgRkVHYXVzc2lhbkJsdXI6OnBsYXRm
b3JtQXBwbHlHZW5lcmljKEJ5dGVBcnJheSogc3JjUGl4ZWxBcnJheSwgQnl0ZUFycmF5KiB0bXBQ
aXhlbEFycmF5LCB1bnNpZ25lZCBrZXJuZWxTaXplWCwgdW5zaWduZWQga2VybmVsU2l6ZVksIElu
dFNpemUmIHBhaW50U2l6ZSkKK2lubGluZSB2b2lkIEZFR2F1c3NpYW5CbHVyOjpwbGF0Zm9ybUFw
cGx5R2VuZXJpY0JsdXIoQnl0ZUFycmF5KiBzcmNQaXhlbEFycmF5LCBCeXRlQXJyYXkqIHRtcFBp
eGVsQXJyYXksIHVuc2lnbmVkIGtlcm5lbFNpemVYLCB1bnNpZ25lZCBrZXJuZWxTaXplWSwgSW50
U2l6ZSYgcGFpbnRTaXplKQogewogICAgIGludCBzdHJpZGUgPSA0ICogcGFpbnRTaXplLndpZHRo
KCk7CiAgICAgaW50IGR4TGVmdCA9IDA7CkBAIC0xNDMsNyArMTQzLDcgQEAgdm9pZCBGRUdhdXNz
aWFuQmx1cjo6cGxhdGZvcm1BcHBseVdvcmtlcgogICAgIHBhcmFtZXRlcnMtPmZpbHRlci0+cGxh
dGZvcm1BcHBseU5lb24ocGFyYW1ldGVycy0+c3JjUGl4ZWxBcnJheS5nZXQoKSwgcGFyYW1ldGVy
cy0+ZHN0UGl4ZWxBcnJheS5nZXQoKSwKICAgICAgICAgcGFyYW1ldGVycy0+a2VybmVsU2l6ZVgs
IHBhcmFtZXRlcnMtPmtlcm5lbFNpemVZLCBwYWludFNpemUpOwogI2Vsc2UKLSAgICBwYXJhbWV0
ZXJzLT5maWx0ZXItPnBsYXRmb3JtQXBwbHlHZW5lcmljKHBhcmFtZXRlcnMtPnNyY1BpeGVsQXJy
YXkuZ2V0KCksIHBhcmFtZXRlcnMtPmRzdFBpeGVsQXJyYXkuZ2V0KCksCisgICAgcGFyYW1ldGVy
cy0+ZmlsdGVyLT5wbGF0Zm9ybUFwcGx5R2VuZXJpY0JsdXIocGFyYW1ldGVycy0+c3JjUGl4ZWxB
cnJheS5nZXQoKSwgcGFyYW1ldGVycy0+ZHN0UGl4ZWxBcnJheS5nZXQoKSwKICAgICAgICAgcGFy
YW1ldGVycy0+a2VybmVsU2l6ZVgsIHBhcmFtZXRlcnMtPmtlcm5lbFNpemVZLCBwYWludFNpemUp
OwogI2VuZGlmCiB9CkBAIC0yMjMsNyArMjIzLDcgQEAgaW5saW5lIHZvaWQgRkVHYXVzc2lhbkJs
dXI6OnBsYXRmb3JtQXBwbAogI2lmIENQVShBUk1fTkVPTikgJiYgQ09NUElMRVIoR0NDKQogICAg
IHBsYXRmb3JtQXBwbHlOZW9uKHNyY1BpeGVsQXJyYXksIHRtcFBpeGVsQXJyYXksIGtlcm5lbFNp
emVYLCBrZXJuZWxTaXplWSwgcGFpbnRTaXplKTsKICNlbHNlCi0gICAgcGxhdGZvcm1BcHBseUdl
bmVyaWMoc3JjUGl4ZWxBcnJheSwgdG1wUGl4ZWxBcnJheSwga2VybmVsU2l6ZVgsIGtlcm5lbFNp
emVZLCBwYWludFNpemUpOworICAgIHBsYXRmb3JtQXBwbHlHZW5lcmljQmx1cihzcmNQaXhlbEFy
cmF5LCB0bXBQaXhlbEFycmF5LCBrZXJuZWxTaXplWCwga2VybmVsU2l6ZVksIHBhaW50U2l6ZSk7
CiAjZW5kaWYKIH0KIApAQCAtMjYyLDE0ICsyNjIsOSBAQCB2b2lkIEZFR2F1c3NpYW5CbHVyOjpk
ZXRlcm1pbmVBYnNvbHV0ZVBhCiAgICAgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50
UmVjdChhYnNvbHV0ZVBhaW50UmVjdCkpOwogfQogCi12b2lkIEZFR2F1c3NpYW5CbHVyOjphcHBs
eSgpCit2b2lkIEZFR2F1c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5R2VuZXJpYygpCiB7Ci0gICAg
aWYgKGhhc1Jlc3VsdCgpKQotICAgICAgICByZXR1cm47CiAgICAgRmlsdGVyRWZmZWN0KiBpbiA9
IGlucHV0RWZmZWN0KDApOwotICAgIGluLT5hcHBseSgpOwotICAgIGlmICghaW4tPmhhc1Jlc3Vs
dCgpKQotICAgICAgICByZXR1cm47CiAKICAgICBCeXRlQXJyYXkqIHNyY1BpeGVsQXJyYXkgPSBj
cmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKICAgICBpZiAoIXNyY1BpeGVsQXJyYXkp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3Np
YW5CbHVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5oCShyZXZpc2lvbiA5Nzc3NSkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuaAkod29ya2luZyBj
b3B5KQpAQCAtNDAsNyArNDAsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgZmxvYXQgY2FsY3Vs
YXRlU3RkRGV2aWF0aW9uKGZsb2F0KTsKIAotICAgIHZpcnR1YWwgdm9pZCBhcHBseSgpOworICAg
IHZpcnR1YWwgdm9pZCBwbGF0Zm9ybUFwcGx5R2VuZXJpYygpOwogICAgIHZpcnR1YWwgdm9pZCBk
dW1wKCk7CiAgICAgCiAgICAgdmlydHVhbCB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0
KCk7CkBAIC03Myw3ICs3Myw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIGlubGluZSB2b2lkIGtl
cm5lbFBvc2l0aW9uKGludCBib3hCbHVyLCB1bnNpZ25lZCYgc3RkLCBpbnQmIGRMZWZ0LCBpbnQm
IGRSaWdodCk7CiAgICAgaW5saW5lIHZvaWQgcGxhdGZvcm1BcHBseShCeXRlQXJyYXkqIHNyY1Bp
eGVsQXJyYXksIEJ5dGVBcnJheSogdG1wUGl4ZWxBcnJheSwgdW5zaWduZWQga2VybmVsU2l6ZVgs
IHVuc2lnbmVkIGtlcm5lbFNpemVZLCBJbnRTaXplJiBwYWludFNpemUpOwogCi0gICAgaW5saW5l
IHZvaWQgcGxhdGZvcm1BcHBseUdlbmVyaWMoQnl0ZUFycmF5KiBzcmNQaXhlbEFycmF5LCBCeXRl
QXJyYXkqIHRtcFBpeGVsQXJyYXksIHVuc2lnbmVkIGtlcm5lbFNpemVYLCB1bnNpZ25lZCBrZXJu
ZWxTaXplWSwgSW50U2l6ZSYgcGFpbnRTaXplKTsKKyAgICBpbmxpbmUgdm9pZCBwbGF0Zm9ybUFw
cGx5R2VuZXJpY0JsdXIoQnl0ZUFycmF5KiBzcmNQaXhlbEFycmF5LCBCeXRlQXJyYXkqIHRtcFBp
eGVsQXJyYXksIHVuc2lnbmVkIGtlcm5lbFNpemVYLCB1bnNpZ25lZCBrZXJuZWxTaXplWSwgSW50
U2l6ZSYgcGFpbnRTaXplKTsKICAgICBpbmxpbmUgdm9pZCBwbGF0Zm9ybUFwcGx5TmVvbihCeXRl
QXJyYXkqIHNyY1BpeGVsQXJyYXksIEJ5dGVBcnJheSogdG1wUGl4ZWxBcnJheSwgdW5zaWduZWQg
a2VybmVsU2l6ZVgsIHVuc2lnbmVkIGtlcm5lbFNpemVZLCBJbnRTaXplJiBwYWludFNpemUpOwog
CiAgICAgZmxvYXQgbV9zdGRYOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwCShyZXZpc2lvbiA5Nzc3NSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI0OSw3ICsyNDksNyBAQCB2b2lkIEZFTGlnaHRpbmc6OnBs
YXRmb3JtQXBwbHlHZW5lcmljV29yCiB9CiAjZW5kaWYgLy8gRU5BQkxFKFBBUkFMTEVMX0pPQlMp
CiAKLWlubGluZSB2b2lkIEZFTGlnaHRpbmc6OnBsYXRmb3JtQXBwbHlHZW5lcmljKExpZ2h0aW5n
RGF0YSYgZGF0YSwgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhKQoraW5s
aW5lIHZvaWQgRkVMaWdodGluZzo6cGxhdGZvcm1BcHBseUdlbmVyaWNMaWdodGluZyhMaWdodGlu
Z0RhdGEmIGRhdGEsIExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSkKIHsK
ICNpZiBFTkFCTEUoUEFSQUxMRUxfSk9CUykKICAgICBpbnQgb3B0aW1hbFRocmVhZE51bWJlciA9
ICgoZGF0YS53aWR0aERlY3JlYXNlZEJ5T25lIC0gMSkgKiAoZGF0YS5oZWlnaHREZWNyZWFzZWRC
eU9uZSAtIDEpKSAvIHNfbWluaW1hbFJlY3REaW1lbnNpb247CkBAIC0yODgsNyArMjg4LDcgQEAg
aW5saW5lIHZvaWQgRkVMaWdodGluZzo6cGxhdGZvcm1BcHBseShMaQogI2lmIENQVShBUk1fTkVP
TikgJiYgQ09NUElMRVIoR0NDKQogICAgIHBsYXRmb3JtQXBwbHlOZW9uKGRhdGEsIHBhaW50aW5n
RGF0YSk7CiAjZWxzZQotICAgIHBsYXRmb3JtQXBwbHlHZW5lcmljKGRhdGEsIHBhaW50aW5nRGF0
YSk7CisgICAgcGxhdGZvcm1BcHBseUdlbmVyaWNMaWdodGluZyhkYXRhLCBwYWludGluZ0RhdGEp
OwogI2VuZGlmCiB9CiAKQEAgLTM4NiwxNCArMzg2LDkgQEAgYm9vbCBGRUxpZ2h0aW5nOjpkcmF3
TGlnaHRpbmcoQnl0ZUFycmF5KgogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEZFTGlnaHRp
bmc6OmFwcGx5KCkKK3ZvaWQgRkVMaWdodGluZzo6cGxhdGZvcm1BcHBseUdlbmVyaWMoKQogewot
ICAgIGlmIChoYXNSZXN1bHQoKSkKLSAgICAgICAgcmV0dXJuOwogICAgIEZpbHRlckVmZmVjdCog
aW4gPSBpbnB1dEVmZmVjdCgwKTsKLSAgICBpbi0+YXBwbHkoKTsKLSAgICBpZiAoIWluLT5oYXNS
ZXN1bHQoKSkKLSAgICAgICAgcmV0dXJuOwogCiAgICAgQnl0ZUFycmF5KiBzcmNQaXhlbEFycmF5
ID0gY3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKICAgICBpZiAoIXNyY1BpeGVsQXJy
YXkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGln
aHRpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFTGlnaHRpbmcuaAkocmV2aXNpb24gOTc3NzUpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuaAkod29ya2luZyBjb3B5KQpAQCAt
NDUsNyArNDUsNyBAQCBzdHJ1Y3QgRkVMaWdodGluZ1BhaW50aW5nRGF0YUZvck5lb247CiAKIGNs
YXNzIEZFTGlnaHRpbmcgOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKIHB1YmxpYzoKLSAgICB2aXJ0
dWFsIHZvaWQgYXBwbHkoKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1BcHBseUdlbmVyaWMo
KTsKIAogICAgIHZpcnR1YWwgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpIHsgc2V0
QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChtYXhFZmZlY3RSZWN0KCkpKTsgfQog
CkBAIC0xMDcsNyArMTA3LDcgQEAgcHJvdGVjdGVkOgogICAgIGlubGluZSB2b2lkIHBsYXRmb3Jt
QXBwbHkoTGlnaHRpbmdEYXRhJiwgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYpOwogCiAgICAg
aW5saW5lIHZvaWQgcGxhdGZvcm1BcHBseUdlbmVyaWNQYWludChMaWdodGluZ0RhdGEmLCBMaWdo
dFNvdXJjZTo6UGFpbnRpbmdEYXRhJiwgaW50IHN0YXJ0WCwgaW50IHN0YXJ0WSk7Ci0gICAgaW5s
aW5lIHZvaWQgcGxhdGZvcm1BcHBseUdlbmVyaWMoTGlnaHRpbmdEYXRhJiwgTGlnaHRTb3VyY2U6
OlBhaW50aW5nRGF0YSYpOworICAgIGlubGluZSB2b2lkIHBsYXRmb3JtQXBwbHlHZW5lcmljTGln
aHRpbmcoTGlnaHRpbmdEYXRhJiwgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYpOwogCiAgICAg
c3RhdGljIGludCBnZXRQb3dlckNvZWZmaWNpZW50cyhmbG9hdCBleHBvbmVudCk7CiAgICAgaW5s
aW5lIHZvaWQgcGxhdGZvcm1BcHBseU5lb24oTGlnaHRpbmdEYXRhJiwgTGlnaHRTb3VyY2U6OlBh
aW50aW5nRGF0YSYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRU1lcmdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuY3BwCShyZXZpc2lvbiA5Nzc3NSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQxLDE4ICs0MSwxMCBAQCBQYXNzUmVmUHRyPEZFTWVyZ2U+IEZFTWVyZ2U6OmNyZWF0
ZShGaWx0CiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGRU1lcmdlKGZpbHRlcikpOwogfQogCi12
b2lkIEZFTWVyZ2U6OmFwcGx5KCkKK3ZvaWQgRkVNZXJnZTo6cGxhdGZvcm1BcHBseUdlbmVyaWMo
KQogewotICAgIGlmIChoYXNSZXN1bHQoKSkKLSAgICAgICAgcmV0dXJuOwogICAgIHVuc2lnbmVk
IHNpemUgPSBudW1iZXJPZkVmZmVjdElucHV0cygpOwogICAgIEFTU0VSVChzaXplID4gMCk7Ci0g
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICBGaWx0ZXJF
ZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoaSk7Ci0gICAgICAgIGluLT5hcHBseSgpOwotICAgICAg
ICBpZiAoIWluLT5oYXNSZXN1bHQoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9CiAKICAg
ICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOwog
ICAgIGlmICghcmVzdWx0SW1hZ2UpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFTWVyZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuaAkocmV2aXNpb24gOTc3NzUpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuaAkod29ya2luZyBj
b3B5KQpAQCAtMzMsNyArMzMsNyBAQCBjbGFzcyBGRU1lcmdlIDogcHVibGljIEZpbHRlckVmZmVj
dCB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8RkVNZXJnZT4gY3JlYXRlKEZpbHRl
ciopOwogCi0gICAgdmlydHVhbCB2b2lkIGFwcGx5KCk7CisgICAgdmlydHVhbCB2b2lkIHBsYXRm
b3JtQXBwbHlHZW5lcmljKCk7CiAgICAgdmlydHVhbCB2b2lkIGR1bXAoKTsKIAogICAgIHZpcnR1
YWwgVGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiwgaW50IGlu
ZGVudGlvbikgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFTW9ycGhvbG9neS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwCShyZXZpc2lvbiA5Nzc3NSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAxLDcgKzEwMSw3IEBAIGJvb2wgRkVNb3JwaG9sb2d5
OjpzZXRSYWRpdXNZKGZsb2F0IHJhZGkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBGRU1v
cnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlHZW5lcmljKFBhaW50aW5nRGF0YSogcGFpbnRpbmdEYXRh
LCBpbnQgeVN0YXJ0LCBpbnQgeUVuZCkKK3ZvaWQgRkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5
R2VuZXJpY01vcnBob2xvZ3koUGFpbnRpbmdEYXRhKiBwYWludGluZ0RhdGEsIGludCB5U3RhcnQs
IGludCB5RW5kKQogewogICAgIEJ5dGVBcnJheSogc3JjUGl4ZWxBcnJheSA9IHBhaW50aW5nRGF0
YS0+c3JjUGl4ZWxBcnJheTsKICAgICBCeXRlQXJyYXkqIGRzdFBpeGVsQXJyYXkgPSBwYWludGlu
Z0RhdGEtPmRzdFBpeGVsQXJyYXk7CkBAIC0xNjEsNyArMTYxLDcgQEAgdm9pZCBGRU1vcnBob2xv
Z3k6OnBsYXRmb3JtQXBwbHlHZW5lcmljKAogI2lmIEVOQUJMRShQQVJBTExFTF9KT0JTKQogdm9p
ZCBGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlXb3JrZXIoUGxhdGZvcm1BcHBseVBhcmFtZXRl
cnMqIHBhcmFtKQogewotICAgIHBhcmFtLT5maWx0ZXItPnBsYXRmb3JtQXBwbHlHZW5lcmljKHBh
cmFtLT5wYWludGluZ0RhdGEsIHBhcmFtLT5zdGFydFksIHBhcmFtLT5lbmRZKTsKKyAgICBwYXJh
bS0+ZmlsdGVyLT5wbGF0Zm9ybUFwcGx5R2VuZXJpY01vcnBob2xvZ3kocGFyYW0tPnBhaW50aW5n
RGF0YSwgcGFyYW0tPnN0YXJ0WSwgcGFyYW0tPmVuZFkpOwogfQogI2VuZGlmCiAKQEAgLTE4OSwx
OCArMTg5LDEzIEBAIHZvaWQgRkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5KFBhaW50aW4KICAg
ICAgICAgLy8gRmFsbGJhY2sgdG8gc2luZ2xlIHRocmVhZCBtb2RlbAogICAgIH0KICNlbmRpZgot
ICAgIHBsYXRmb3JtQXBwbHlHZW5lcmljKHBhaW50aW5nRGF0YSwgMCwgcGFpbnRpbmdEYXRhLT5o
ZWlnaHQpOworICAgIHBsYXRmb3JtQXBwbHlHZW5lcmljTW9ycGhvbG9neShwYWludGluZ0RhdGEs
IDAsIHBhaW50aW5nRGF0YS0+aGVpZ2h0KTsKIH0KIAogCi12b2lkIEZFTW9ycGhvbG9neTo6YXBw
bHkoKQordm9pZCBGRU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlHZW5lcmljKCkKIHsKLSAgICBp
ZiAoaGFzUmVzdWx0KCkpCi0gICAgICAgIHJldHVybjsKICAgICBGaWx0ZXJFZmZlY3QqIGluID0g
aW5wdXRFZmZlY3QoMCk7Ci0gICAgaW4tPmFwcGx5KCk7Ci0gICAgaWYgKCFpbi0+aGFzUmVzdWx0
KCkpCi0gICAgICAgIHJldHVybjsKIAogICAgIEJ5dGVBcnJheSogZHN0UGl4ZWxBcnJheSA9IGNy
ZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwogICAgIGlmICghZHN0UGl4ZWxBcnJheSkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9s
b2d5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRU1vcnBob2xvZ3kuaAkocmV2aXNpb24gOTc3NzUpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5oCSh3b3JraW5nIGNvcHkpCkBA
IC00Niw3ICs0Niw3IEBAIHB1YmxpYzoKICAgICBmbG9hdCByYWRpdXNZKCkgY29uc3Q7CiAgICAg
Ym9vbCBzZXRSYWRpdXNZKGZsb2F0KTsKIAotICAgIHZpcnR1YWwgdm9pZCBhcHBseSgpOworICAg
IHZpcnR1YWwgdm9pZCBwbGF0Zm9ybUFwcGx5R2VuZXJpYygpOwogICAgIHZpcnR1YWwgdm9pZCBk
dW1wKCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKTsK
QEAgLTc2LDcgKzc2LDcgQEAgcHVibGljOgogI2VuZGlmCiAKICAgICBpbmxpbmUgdm9pZCBwbGF0
Zm9ybUFwcGx5KFBhaW50aW5nRGF0YSopOwotICAgIGlubGluZSB2b2lkIHBsYXRmb3JtQXBwbHlH
ZW5lcmljKFBhaW50aW5nRGF0YSosIGNvbnN0IGludCB5U3RhcnQsIGNvbnN0IGludCB5RW5kKTsK
KyAgICBpbmxpbmUgdm9pZCBwbGF0Zm9ybUFwcGx5R2VuZXJpY01vcnBob2xvZ3koUGFpbnRpbmdE
YXRhKiwgY29uc3QgaW50IHlTdGFydCwgY29uc3QgaW50IHlFbmQpOwogcHJpdmF0ZToKICAgICBG
RU1vcnBob2xvZ3koRmlsdGVyKiwgTW9ycGhvbG9neU9wZXJhdG9yVHlwZSwgZmxvYXQgcmFkaXVz
WCwgZmxvYXQgcmFkaXVzWSk7CiAgICAgCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmNwcAkocmV2aXNpb24gOTc3NzUp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNzQsMTQgKzc0LDkgQEAgdm9pZCBGRU9mZnNldDo6ZGV0ZXJt
aW5lQWJzb2x1dGVQYWludFJlYwogICAgIHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0lu
dFJlY3QocGFpbnRSZWN0KSk7CiB9CiAKLXZvaWQgRkVPZmZzZXQ6OmFwcGx5KCkKK3ZvaWQgRkVP
ZmZzZXQ6OnBsYXRmb3JtQXBwbHlHZW5lcmljKCkKIHsKLSAgICBpZiAoaGFzUmVzdWx0KCkpCi0g
ICAgICAgIHJldHVybjsKICAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7Ci0g
ICAgaW4tPmFwcGx5KCk7Ci0gICAgaWYgKCFpbi0+aGFzUmVzdWx0KCkpCi0gICAgICAgIHJldHVy
bjsKIAogICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVyUmVz
dWx0KCk7CiAgICAgaWYgKCFyZXN1bHRJbWFnZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmgJKHJldmlzaW9uIDk3Nzc1
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBAIHB1YmxpYzoKICAgICBmbG9hdCBkeSgp
IGNvbnN0OwogICAgIHZvaWQgc2V0RHkoZmxvYXQpOwogCi0gICAgdmlydHVhbCB2b2lkIGFwcGx5
KCk7CisgICAgdmlydHVhbCB2b2lkIHBsYXRmb3JtQXBwbHlHZW5lcmljKCk7CiAgICAgdmlydHVh
bCB2b2lkIGR1bXAoKTsKICAgICAKICAgICB2aXJ0dWFsIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQ
YWludFJlY3QoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVUaWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFVGlsZS5jcHAJKHJldmlzaW9uIDk3Nzc1KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00MywxNiArNDMsMTEgQEAgUGFzc1JlZlB0cjxGRVRpbGU+IEZFVGlsZTo6Y3JlYXRlKEZpbHRl
cgogICAgIHJldHVybiBhZG9wdFJlZihuZXcgRkVUaWxlKGZpbHRlcikpOwogfQogCi12b2lkIEZF
VGlsZTo6YXBwbHkoKQordm9pZCBGRVRpbGU6OnBsYXRmb3JtQXBwbHlHZW5lcmljKCkKIHsKIC8v
IEZJWE1FOiBTZWUgYnVnIDQ3MzE1LiBUaGlzIGlzIGEgaGFjayB0byB3b3JrIGFyb3VuZCBhIGNv
bXBpbGUgZmFpbHVyZSwgYnV0IGlzIGluY29ycmVjdCBiZWhhdmlvciBvdGhlcndpc2UuCiAjaWYg
RU5BQkxFKFNWRykKLSAgICBpZiAoaGFzUmVzdWx0KCkpCi0gICAgICAgIHJldHVybjsKICAgICBG
aWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7Ci0gICAgaW4tPmFwcGx5KCk7Ci0gICAg
aWYgKCFpbi0+aGFzUmVzdWx0KCkpCi0gICAgICAgIHJldHVybjsKIAogICAgIEltYWdlQnVmZmVy
KiByZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7CiAgICAgaWYgKCFyZXN1
bHRJbWFnZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVUaWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRVRpbGUuaAkocmV2aXNpb24gOTc3NzUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICsz
Miw3IEBAIGNsYXNzIEZFVGlsZSA6IHB1YmxpYyBGaWx0ZXJFZmZlY3QgewogcHVibGljOgogICAg
IHN0YXRpYyBQYXNzUmVmUHRyPEZFVGlsZT4gY3JlYXRlKEZpbHRlciogZmlsdGVyKTsKIAotICAg
IHZpcnR1YWwgdm9pZCBhcHBseSgpOworICAgIHZpcnR1YWwgdm9pZCBwbGF0Zm9ybUFwcGx5R2Vu
ZXJpYygpOwogICAgIHZpcnR1YWwgdm9pZCBkdW1wKCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgZGV0
ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKSB7IHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2lu
Z0ludFJlY3QobWF4RWZmZWN0UmVjdCgpKSk7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHAJKHJl
dmlzaW9uIDk3Nzc1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRVR1cmJ1bGVuY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjQsMTAgKzM2NCw4IEBAIHZv
aWQgRkVUdXJidWxlbmNlOjpmaWxsUmVnaW9uV29ya2VyKEZpbGwKIH0KICNlbmRpZiAvLyBFTkFC
TEUoUEFSQUxMRUxfSk9CUykKIAotdm9pZCBGRVR1cmJ1bGVuY2U6OmFwcGx5KCkKK3ZvaWQgRkVU
dXJidWxlbmNlOjpwbGF0Zm9ybUFwcGx5R2VuZXJpYygpCiB7Ci0gICAgaWYgKGhhc1Jlc3VsdCgp
KQotICAgICAgICByZXR1cm47CiAgICAgQnl0ZUFycmF5KiBwaXhlbEFycmF5ID0gY3JlYXRlVW5t
dWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKICAgICBpZiAoIXBpeGVsQXJyYXkpCiAgICAgICAgIHJl
dHVybjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVU
dXJidWxlbmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuaAkocmV2aXNpb24gOTc3NzUpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC02Miw3ICs2Miw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBmaWxsUmVnaW9u
V29ya2VyKHZvaWQqKTsKICNlbmRpZgogCi0gICAgdmlydHVhbCB2b2lkIGFwcGx5KCk7CisgICAg
dmlydHVhbCB2b2lkIHBsYXRmb3JtQXBwbHlHZW5lcmljKCk7CiAgICAgdmlydHVhbCB2b2lkIGR1
bXAoKTsKICAgICAKICAgICB2aXJ0dWFsIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3Qo
KSB7IHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QobWF4RWZmZWN0UmVjdCgp
KSk7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmls
dGVyRWZmZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAJKHJldmlzaW9uIDk3Nzc1KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC04NSw2ICs4NSwyOSBAQCBGaWx0ZXJFZmZlY3QqIEZpbHRlckVmZmVjdDo6
aW5wdXRFZmZlY3QoCiAgICAgcmV0dXJuIG1faW5wdXRFZmZlY3RzLmF0KG51bWJlcikuZ2V0KCk7
CiB9CiAKK2Jvb2wgRmlsdGVyRWZmZWN0OjpoYXNSZXN1bHQoKSBjb25zdAoreworICAgIC8vIFRo
aXMgZnVuY3Rpb24gbmVlZHMgcGxhdGZvcm0gc3BlY2lmaWMgY2hlY2tzLCBpZiB0aGUgbWVtb3J5
IG1hbmFnbWVudCBpcyBub3QgZG9uZSBieSBGaWx0ZXJFZmZlY3QuCisgICAgcmV0dXJuIG1faW1h
Z2VCdWZmZXJSZXN1bHQgfHwgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCB8fCBtX3ByZW11bHRp
cGxpZWRJbWFnZVJlc3VsdDsKK30KKwordm9pZCBGaWx0ZXJFZmZlY3Q6OmFwcGx5KCkKK3sKKyAg
ICBpZiAoaGFzUmVzdWx0KCkpCisgICAgICAgIHJldHVybjsKKyAgICB1bnNpZ25lZCBzaXplID0g
bV9pbnB1dEVmZmVjdHMuc2l6ZSgpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXpl
OyArK2kpIHsKKyAgICAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IG1faW5wdXRFZmZlY3RzLmF0KGkp
LmdldCgpOworICAgICAgICBpbi0+YXBwbHkoKTsKKyAgICAgICAgaWYgKCFpbi0+aGFzUmVzdWx0
KCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorICAgIGRldGVybWluZUFic29sdXRlUGFp
bnRSZWN0KCk7CisgICAgCisgICAgLy8gQWRkIHBsYXRmb3JtIHNwZWNpZmljIGFwcGx5IGZ1bmN0
aW9ucyBoZXJlIGFuZCByZXR1cm4gZWFybGllci4KKyAgICBwbGF0Zm9ybUFwcGx5R2VuZXJpYygp
OworfQorCiB2b2lkIEZpbHRlckVmZmVjdDo6Y2xlYXJSZXN1bHQoKQogewogICAgIGlmIChtX2lt
YWdlQnVmZmVyUmVzdWx0KQpAQCAtMjM2LDcgKzI1OSw2IEBAIEltYWdlQnVmZmVyKiBGaWx0ZXJF
ZmZlY3Q6OmNyZWF0ZUltYWdlQnUKIHsKICAgICAvLyBPbmx5IG9uZSByZXN1bHQgdHlwZSBpcyBh
bGxvd2VkLgogICAgIEFTU0VSVCghaGFzUmVzdWx0KCkpOwotICAgIGRldGVybWluZUFic29sdXRl
UGFpbnRSZWN0KCk7CiAgICAgaWYgKG1fYWJzb2x1dGVQYWludFJlY3QuaXNFbXB0eSgpKQogICAg
ICAgICByZXR1cm4gMDsKICAgICBtX2ltYWdlQnVmZmVyUmVzdWx0ID0gSW1hZ2VCdWZmZXI6OmNy
ZWF0ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSwgQ29sb3JTcGFjZUxpbmVhclJHQik7CkBA
IC0yNTIsNyArMjc0LDYgQEAgQnl0ZUFycmF5KiBGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVVubXVsdGlw
bAogICAgIEFTU0VSVCghaGFzUmVzdWx0KCkpOwogICAgIEFTU0VSVChpc0ZpbHRlclNpemVWYWxp
ZChtX2Fic29sdXRlUGFpbnRSZWN0KSk7CiAKLSAgICBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVj
dCgpOwogICAgIGlmIChtX2Fic29sdXRlUGFpbnRSZWN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0
dXJuIDA7CiAgICAgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IEJ5dGVBcnJheTo6Y3JlYXRl
KG1fYWJzb2x1dGVQYWludFJlY3Qud2lkdGgoKSAqIG1fYWJzb2x1dGVQYWludFJlY3QuaGVpZ2h0
KCkgKiA0KTsKQEAgLTI2NSw3ICsyODYsNiBAQCBCeXRlQXJyYXkqIEZpbHRlckVmZmVjdDo6Y3Jl
YXRlUHJlbXVsdGlwCiAgICAgQVNTRVJUKCFoYXNSZXN1bHQoKSk7CiAgICAgQVNTRVJUKGlzRmls
dGVyU2l6ZVZhbGlkKG1fYWJzb2x1dGVQYWludFJlY3QpKTsKIAotICAgIGRldGVybWluZUFic29s
dXRlUGFpbnRSZWN0KCk7CiAgICAgaWYgKG1fYWJzb2x1dGVQYWludFJlY3QuaXNFbXB0eSgpKQog
ICAgICAgICByZXR1cm4gMDsKICAgICBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IEJ5dGVB
cnJheTo6Y3JlYXRlKG1fYWJzb2x1dGVQYWludFJlY3Qud2lkdGgoKSAqIG1fYWJzb2x1dGVQYWlu
dFJlY3QuaGVpZ2h0KCkgKiA0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaAkocmV2aXNpb24gOTc3NzUp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVj
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC01NCw3ICs1NCw3IEBAIGNsYXNzIEZpbHRlckVmZmVjdCA6
IHB1YmxpYyBSZWZDb3VudGVkPEYKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5GaWx0ZXJFZmZlY3Qo
KTsKIAotICAgIGJvb2wgaGFzUmVzdWx0KCkgY29uc3QgeyByZXR1cm4gbV9pbWFnZUJ1ZmZlclJl
c3VsdCB8fCBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0IHx8IG1fcHJlbXVsdGlwbGllZEltYWdl
UmVzdWx0OyB9CisgICAgYm9vbCBoYXNSZXN1bHQoKSBjb25zdDsKICAgICB2b2lkIGNsZWFyUmVz
dWx0KCk7CiAgICAgSW1hZ2VCdWZmZXIqIGFzSW1hZ2VCdWZmZXIoKTsKICAgICBQYXNzUmVmUHRy
PEJ5dGVBcnJheT4gYXNVbm11bHRpcGxpZWRJbWFnZShjb25zdCBJbnRSZWN0Jik7CkBAIC03OSw3
ICs3OSw5IEBAIHB1YmxpYzoKICAgICBGbG9hdFJlY3QgbWF4RWZmZWN0UmVjdCgpIGNvbnN0IHsg
cmV0dXJuIG1fbWF4RWZmZWN0UmVjdDsgfQogICAgIHZvaWQgc2V0TWF4RWZmZWN0UmVjdChjb25z
dCBGbG9hdFJlY3QmIG1heEVmZmVjdFJlY3QpIHsgbV9tYXhFZmZlY3RSZWN0ID0gbWF4RWZmZWN0
UmVjdDsgfSAKIAotICAgIHZpcnR1YWwgdm9pZCBhcHBseSgpID0gMDsKKyAgICB2b2lkIGFwcGx5
KCk7CisgICAgCisgICAgdmlydHVhbCB2b2lkIHBsYXRmb3JtQXBwbHlHZW5lcmljKCkgPSAwOwog
ICAgIHZpcnR1YWwgdm9pZCBkdW1wKCkgPSAwOwogCiAgICAgdmlydHVhbCB2b2lkIGRldGVybWlu
ZUFic29sdXRlUGFpbnRSZWN0KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmNwcAkocmV2aXNpb24gOTc3
NzUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFs
cGhhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIsMTAgKzUyLDggQEAgdm9pZCBTb3VyY2VBbHBo
YTo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludAogICAgIHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xv
c2luZ0ludFJlY3QocGFpbnRSZWN0KSk7CiB9CiAKLXZvaWQgU291cmNlQWxwaGE6OmFwcGx5KCkK
K3ZvaWQgU291cmNlQWxwaGE6OnBsYXRmb3JtQXBwbHlHZW5lcmljKCkKIHsKLSAgICBpZiAoaGFz
UmVzdWx0KCkpCi0gICAgICAgIHJldHVybjsKICAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2Ug
PSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOwogICAgIEZpbHRlciogZmlsdGVyID0gdGhpcy0+
ZmlsdGVyKCk7CiAgICAgaWYgKCFyZXN1bHRJbWFnZSB8fCAhZmlsdGVyLT5zb3VyY2VJbWFnZSgp
KQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VB
bHBoYS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvU291cmNlQWxwaGEuaAkocmV2aXNpb24gOTc3NzUpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmgJKHdvcmtpbmcgY29weSkKQEAg
LTM0LDcgKzM0LDcgQEAgcHVibGljOiAgICAgICAgCiAKICAgICBzdGF0aWMgY29uc3QgQXRvbWlj
U3RyaW5nJiBlZmZlY3ROYW1lKCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoKTsKKyAgICB2
aXJ0dWFsIHZvaWQgcGxhdGZvcm1BcHBseUdlbmVyaWMoKTsKICAgICB2aXJ0dWFsIHZvaWQgZHVt
cCgpOwogCiAgICAgdmlydHVhbCB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBo
aWMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvU291cmNlR3JhcGhpYy5jcHAJKHJldmlzaW9uIDk3Nzc1KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTEsMTAgKzUxLDggQEAgdm9pZCBTb3VyY2VHcmFwaGljOjpkZXRlcm1pbmVBYnNv
bHV0ZVBhaQogICAgIHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QocGFpbnRS
ZWN0KSk7CiB9CiAKLXZvaWQgU291cmNlR3JhcGhpYzo6YXBwbHkoKQordm9pZCBTb3VyY2VHcmFw
aGljOjpwbGF0Zm9ybUFwcGx5R2VuZXJpYygpCiB7Ci0gICAgaWYgKGhhc1Jlc3VsdCgpKQotICAg
ICAgICByZXR1cm47CiAgICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRlSW1hZ2VC
dWZmZXJSZXN1bHQoKTsKICAgICBGaWx0ZXIqIGZpbHRlciA9IHRoaXMtPmZpbHRlcigpOwogICAg
IGlmICghcmVzdWx0SW1hZ2UgfHwgIWZpbHRlci0+c291cmNlSW1hZ2UoKSkKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNl
R3JhcGhpYy5oCShyZXZpc2lvbiA5Nzc3NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICsz
NSw3IEBAIHB1YmxpYzogICAgICAgIAogCiAgICAgc3RhdGljIGNvbnN0IEF0b21pY1N0cmluZyYg
ZWZmZWN0TmFtZSgpOwogCi0gICAgdmlydHVhbCB2b2lkIGFwcGx5KCk7CisgICAgdmlydHVhbCB2
b2lkIHBsYXRmb3JtQXBwbHlHZW5lcmljKCk7CiAgICAgdmlydHVhbCB2b2lkIGR1bXAoKTsKIAog
ICAgIHZpcnR1YWwgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5jcHAJ
KHJldmlzaW9uIDk3Nzc1KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMv
U1ZHRkVJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2LDkgKzU2LDkgQEAgdm9pZCBGRUlt
YWdlOjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdAogICAgIHNldEFic29sdXRlUGFpbnRSZWN0
KGVuY2xvc2luZ0ludFJlY3QocGFpbnRSZWN0KSk7CiB9CiAKLXZvaWQgRkVJbWFnZTo6YXBwbHko
KQordm9pZCBGRUltYWdlOjpwbGF0Zm9ybUFwcGx5R2VuZXJpYygpCiB7Ci0gICAgaWYgKCFtX2lt
YWdlLmdldCgpIHx8IGhhc1Jlc3VsdCgpKQorICAgIGlmICghbV9pbWFnZS5nZXQoKSkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRlSW1hZ2VC
dWZmZXJSZXN1bHQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJz
L1NWR0ZFSW1hZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3Mv
ZmlsdGVycy9TVkdGRUltYWdlLmgJKHJldmlzaW9uIDk3Nzc1KQorKysgU291cmNlL1dlYkNvcmUv
c3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3
ICszNyw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2V0QWJzb2x1dGVTdWJyZWdpb24oY29uc3Qg
RmxvYXRSZWN0JiBhYnNvbHV0ZVN1YnJlZ2lvbikgeyBtX2Fic29sdXRlU3VicmVnaW9uID0gYWJz
b2x1dGVTdWJyZWdpb247IH0KIAotICAgIHZpcnR1YWwgdm9pZCBhcHBseSgpOworICAgIHZpcnR1
YWwgdm9pZCBwbGF0Zm9ybUFwcGx5R2VuZXJpYygpOwogICAgIHZpcnR1YWwgdm9pZCBkdW1wKCk7
CiAKICAgICB2aXJ0dWFsIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>111597</attachid>
            <date>2011-10-19 05:20:26 -0700</date>
            <delta_ts>2011-10-19 05:53:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-70350-20111019142024.patch</filename>
            <type>text/plain</type>
            <size>30373</size>
            <attacher name="Dirk Schulze">krit</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk3ODQ5KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsODIgQEAKKzIwMTEtMTAtMTkgIERpcmsgU2No
dWx6ZSAgPGtyaXRAd2Via2l0Lm9yZz4KKworICAgICAgICBNYWtlIEZpbHRlckVmZmVjdDo6YXBw
bHkoKSBpbmRlcGVuZGVudCBvZiBpbWFnZSBkYXRhIG1hbmFnZW1lbnQKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcwMzUwCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBGaWx0ZXJFZmZlY3Q6OmFw
cGx5KCkgbmVlZHMgdG8gYmUgaW5kZXBlbmRlbnQgZnJvbSB0aGUgaW1hZ2UgZGF0YSBtYW5hZ2Vt
ZW50IGluIEZpbHRlckVmZmVjdC4KKyAgICAgICAgVGhpcyBhbGxvd3MgaW1wbGVtZW50aW5nIGVm
ZmVjdGl2ZSBoYXJkd2FyZSBhY2NlbGVyYXRlZCBhbHRlcm5hdGl2ZXMsIGxpa2UgT3BlbkdMLCBD
SSBvciBPcGVuQ0wKKyAgICAgICAgYmFzZWQgZmlsdGVycywgdG8gdGhlIHNvZnR3YXJlIHJlbmRl
cmluZy4gVGhlIHNvZnR3YXJlIHJlbmRlcmluZyBjb2RlIHdpbGwgYmUgdXNlZCBhcyBmYWxsYmFj
aworICAgICAgICBhbmQgbW92ZXMgdG8gcGxhdGZvcm1BcHBseVNvZnR3YXJlKCkuCisKKyAgICAg
ICAgVGhlIHBhdGNoIGRvZXMgbm90IGNoYW5nZSB0aGUgYmVoYXZpb3Igb2YgU1ZHIGZpbHRlcnMu
IERpZCBub3QgYWRkIG5ldyB0ZXN0IGNhc2VzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUJsZW5kLmNwcDogUmVuYW1lZCBhcHBseSgpIHRvIHBsYXRmb3JtQXBwbHlH
ZW5lcmljKCkKKyAgICAgICAgICAgIGFuZCByZW1vdmVkIHZhbGlkaXR5IGNoZWNrcyB0aGF0IGFy
ZSBkb25lIGJ5IEZpbHRlckVmZmVjdDo6YXBwbHkoKS4gVGhpcyBpcyBhCisgICAgICAgICAgICBy
ZWN1cnJpbmcgcGF0dGVybiBmb3IgYWxsIGZvbGxvd2luZyBlZmZlY3RzLiAKKyAgICAgICAgKFdl
YkNvcmU6OkZFQmxlbmQ6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JN
YXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUNvbG9yTWF0cml4Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29t
cG9uZW50VHJhbnNmZXI6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmg6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpGRUNvbXBvc2l0ZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZF
Q29udm9sdmVNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4Lmg6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpGRURpc3BsYWNlbWVudE1hcDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmg6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RkVEcm9wU2hhZG93OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93Lmg6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZF
Rmxvb2Q6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUZsb29kLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUdhdXNzaWFuQmx1ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNzaWFuQmx1cjo6
cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFR2F1c3NpYW5CbHVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUxpZ2h0aW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnBsYXRmb3Jt
QXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxp
Z2h0aW5nLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkZFTWVyZ2U6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1lcmdlLmg6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5Lmg6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRU9m
ZnNldDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFT2Zmc2V0Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRVRpbGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVUaWxlOjpwbGF0Zm9ybUFwcGx5U29m
dHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmg6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmg6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwOiBBZGRlZCBub24t
dmlydHVhbCBhcHBseSgpIGZ1bmN0aW9uLiBUaGlzIHdpbGwgY2FsbCB0aGUgcGxhdGZvcm0gc3Bl
Y2lmaWMgYXBwbHkgZnVuY3Rpb25zLAorICAgICAgICAgICAgd2hpY2ggbmVlZCB0byBiZSB2aXJ0
dWFsIG5vdy4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6aGFzUmVzdWx0KTogQWRk
ZWQgYSBjb21tZW50IGZvciBuZXcgaW1wbGVtZW50YXRpb25zLiBUaGlzIGZ1bmN0aW9uIG5lZWRz
IHRvIGJlIHVwZGF0ZWQgZm9yIGV2ZXJ5IG5ldyBwb3J0LgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVyRWZmZWN0OjphcHBseSk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNyZWF0
ZUltYWdlQnVmZmVyUmVzdWx0KTogUmVtb3ZlZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgp
IGNhbGwuIFRoaXMgaXMgZG9uZSBpbiBhcHBseSgpIG5vdy4KKyAgICAgICAgKFdlYkNvcmU6OkZp
bHRlckVmZmVjdDo6Y3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQpOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0
KTogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZl
Y3QuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUFscGhhOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuaDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U291cmNlR3JhcGhpYzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuaDoKKyAgICAg
ICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkZFSW1hZ2U6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogc3ZnL2dyYXBo
aWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5oOgorCiAyMDExLTEwLTE5ICBBbmRyZWFzIEtsaW5nICA8
a2xpbmdAd2Via2l0Lm9yZz4KIAogICAgICAgICBNZWRpYUxpc3Q6IFJlbW92ZSBpbmhlcml0YW5j
ZSBmcm9tIFN0eWxlQmFzZS4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVCbGVuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmNwcAkocmV2aXNpb24gOTc3NzUpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC04NiwxNiArODYsMTAgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBjaGFyIGxp
Z2h0ZW4odW5zaQogICAgIHJldHVybiAoKHN0ZDo6bWF4KCgyNTUgLSBhbHBoYUEpICogY29sb3JC
ICsgY29sb3JBICogMjU1LCAoMjU1IC0gYWxwaGFCKSAqIGNvbG9yQSArIGNvbG9yQiAqIDI1NSkp
IC8gMjU1KTsKIH0KIAotdm9pZCBGRUJsZW5kOjphcHBseSgpCit2b2lkIEZFQmxlbmQ6OnBsYXRm
b3JtQXBwbHlTb2Z0d2FyZSgpCiB7Ci0gICAgaWYgKGhhc1Jlc3VsdCgpKQotICAgICAgICByZXR1
cm47CiAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwogICAgIEZpbHRlckVm
ZmVjdCogaW4yID0gaW5wdXRFZmZlY3QoMSk7Ci0gICAgaW4tPmFwcGx5KCk7Ci0gICAgaW4yLT5h
cHBseSgpOwotICAgIGlmICghaW4tPmhhc1Jlc3VsdCgpIHx8ICFpbjItPmhhc1Jlc3VsdCgpKQot
ICAgICAgICByZXR1cm47CiAKICAgICBBU1NFUlQobV9tb2RlID4gRkVCTEVORF9NT0RFX1VOS05P
V04pOwogICAgIEFTU0VSVChtX21vZGUgPD0gRkVCTEVORF9NT0RFX0xJR0hURU4pOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5k
LmgJKHJldmlzaW9uIDk3Nzc1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUJsZW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDcgQEAgcHVibGlj
OgogICAgIEJsZW5kTW9kZVR5cGUgYmxlbmRNb2RlKCkgY29uc3Q7CiAgICAgYm9vbCBzZXRCbGVu
ZE1vZGUoQmxlbmRNb2RlVHlwZSk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoKTsKKyAgICB2
aXJ0dWFsIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCk7CiAgICAgdmlydHVhbCB2b2lkIGR1
bXAoKTsKIAogICAgIHZpcnR1YWwgVGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihU
ZXh0U3RyZWFtJiwgaW50IGluZGVudGlvbikgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5j
cHAJKHJldmlzaW9uIDk3Nzc1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU2LDE0ICsxNTYs
OSBAQCB2b2lkIGVmZmVjdFR5cGUoQnl0ZUFycmF5KiBwaXhlbEFycmF5LCBjCiAgICAgfQogfQog
Ci12b2lkIEZFQ29sb3JNYXRyaXg6OmFwcGx5KCkKK3ZvaWQgRkVDb2xvck1hdHJpeDo6cGxhdGZv
cm1BcHBseVNvZnR3YXJlKCkKIHsKLSAgICBpZiAoaGFzUmVzdWx0KCkpCi0gICAgICAgIHJldHVy
bjsKICAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7Ci0gICAgaW4tPmFwcGx5
KCk7Ci0gICAgaWYgKCFpbi0+aGFzUmVzdWx0KCkpCi0gICAgICAgIHJldHVybjsKIAogICAgIElt
YWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7CiAgICAg
aWYgKCFyZXN1bHRJbWFnZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5oCShyZXZpc2lvbiA5Nzc3NSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJp
eC5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCw3IEBAIHB1YmxpYzoKICAgICBjb25zdCBW
ZWN0b3I8ZmxvYXQ+JiB2YWx1ZXMoKSBjb25zdDsKICAgICBib29sIHNldFZhbHVlcyhjb25zdCBW
ZWN0b3I8ZmxvYXQ+Jik7CiAKLSAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoKTsKKyAgICB2aXJ0dWFs
IHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCk7CiAgICAgdmlydHVhbCB2b2lkIGR1bXAoKTsK
IAogICAgIHZpcnR1YWwgVGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihUZXh0U3Ry
ZWFtJiwgaW50IGluZGVudGlvbikgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFu
c2Zlci5jcHAJKHJldmlzaW9uIDk3Nzc1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTUwLDE0ICsxNTAsOSBAQCBzdGF0aWMgdm9pZCBnYW1tYSh1bnNpZ25lZCBjaGFyKiB2YWx1ZXMs
CiAgICAgfQogfQogCi12b2lkIEZFQ29tcG9uZW50VHJhbnNmZXI6OmFwcGx5KCkKK3ZvaWQgRkVD
b21wb25lbnRUcmFuc2Zlcjo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKIHsKLSAgICBpZiAoaGFz
UmVzdWx0KCkpCi0gICAgICAgIHJldHVybjsKICAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRF
ZmZlY3QoMCk7Ci0gICAgaW4tPmFwcGx5KCk7Ci0gICAgaWYgKCFpbi0+aGFzUmVzdWx0KCkpCi0g
ICAgICAgIHJldHVybjsKIAogICAgIEJ5dGVBcnJheSogcGl4ZWxBcnJheSA9IGNyZWF0ZVVubXVs
dGlwbGllZEltYWdlUmVzdWx0KCk7CiAgICAgaWYgKCFwaXhlbEFycmF5KQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUNvbXBvbmVudFRyYW5zZmVyLmgJKHJldmlzaW9uIDk3Nzc1KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTc4LDcgKzc4LDcgQEAgcHVibGljOgogICAgIENvbXBvbmVudFRyYW5zZmVyRnVu
Y3Rpb24gYWxwaGFGdW5jdGlvbigpIGNvbnN0OwogICAgIHZvaWQgc2V0QWxwaGFGdW5jdGlvbihj
b25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJik7CiAKLSAgICB2aXJ0dWFsIHZvaWQgYXBw
bHkoKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCk7CiAgICAgdmly
dHVhbCB2b2lkIGR1bXAoKTsKIAogICAgIHZpcnR1YWwgVGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXBy
ZXNlbnRhdGlvbihUZXh0U3RyZWFtJiwgaW50IGluZGVudGlvbikgY29uc3Q7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29t
cG9zaXRlLmNwcAkocmV2aXNpb24gOTc3NzUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk2LDE2
ICsxOTYsMTAgQEAgdm9pZCBGRUNvbXBvc2l0ZTo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWludAogICAg
IH0KIH0KIAotdm9pZCBGRUNvbXBvc2l0ZTo6YXBwbHkoKQordm9pZCBGRUNvbXBvc2l0ZTo6cGxh
dGZvcm1BcHBseVNvZnR3YXJlKCkKIHsKLSAgICBpZiAoaGFzUmVzdWx0KCkpCi0gICAgICAgIHJl
dHVybjsKICAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7CiAgICAgRmlsdGVy
RWZmZWN0KiBpbjIgPSBpbnB1dEVmZmVjdCgxKTsKLSAgICBpbi0+YXBwbHkoKTsKLSAgICBpbjIt
PmFwcGx5KCk7Ci0gICAgaWYgKCFpbi0+aGFzUmVzdWx0KCkgfHwgIWluMi0+aGFzUmVzdWx0KCkp
Ci0gICAgICAgIHJldHVybjsKIAogICAgIGlmIChtX3R5cGUgPT0gRkVDT01QT1NJVEVfT1BFUkFU
T1JfQVJJVEhNRVRJQykgewogICAgICAgICBCeXRlQXJyYXkqIGRzdFBpeGVsQXJyYXkgPSBjcmVh
dGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmgJKHJldmlzaW9u
IDk3Nzc1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNv
bXBvc2l0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1OSw3IEBAIHB1YmxpYzoKICAgICBm
bG9hdCBrNCgpIGNvbnN0OwogICAgIGJvb2wgc2V0SzQoZmxvYXQpOwogCi0gICAgdmlydHVhbCB2
b2lkIGFwcGx5KCk7CisgICAgdmlydHVhbCB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpOwog
ICAgIHZpcnR1YWwgdm9pZCBkdW1wKCk7CiAgICAgCiAgICAgdmlydHVhbCB2b2lkIGRldGVybWlu
ZUFic29sdXRlUGFpbnRSZWN0KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5jcHAJKHJl
dmlzaW9uIDk3Nzc1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUNvbnZvbHZlTWF0cml4LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAxLDE0ICs0MDEsOSBA
QCB2b2lkIEZFQ29udm9sdmVNYXRyaXg6OnNldEludGVyaW9yUGl4ZWxzCiB9CiAjZW5kaWYKIAot
dm9pZCBGRUNvbnZvbHZlTWF0cml4OjphcHBseSgpCit2b2lkIEZFQ29udm9sdmVNYXRyaXg6OnBs
YXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiB7Ci0gICAgaWYgKGhhc1Jlc3VsdCgpKQotICAgICAgICBy
ZXR1cm47CiAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwotICAgIGluLT5h
cHBseSgpOwotICAgIGlmICghaW4tPmhhc1Jlc3VsdCgpKQotICAgICAgICByZXR1cm47CiAKICAg
ICBCeXRlQXJyYXkqIHJlc3VsdEltYWdlOwogICAgIGlmIChtX3ByZXNlcnZlQWxwaGEpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRy
aXguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFQ29udm9sdmVNYXRyaXguaAkocmV2aXNpb24gOTc3NzUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguaAkod29ya2luZyBj
b3B5KQpAQCAtNzIsNyArNzIsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBwcmVzZXJ2ZUFscGhhKCkg
Y29uc3Q7CiAgICAgYm9vbCBzZXRQcmVzZXJ2ZUFscGhhKGJvb2wpOwogCi0gICAgdmlydHVhbCB2
b2lkIGFwcGx5KCk7CisgICAgdmlydHVhbCB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpOwog
ICAgIHZpcnR1YWwgdm9pZCBkdW1wKCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgZGV0ZXJtaW5lQWJz
b2x1dGVQYWludFJlY3QoKSB7IHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3Qo
bWF4RWZmZWN0UmVjdCgpKSk7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwCShy
ZXZpc2lvbiA5Nzc3NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OCwxNiArODgsMTAg
QEAgYm9vbCBGRURpc3BsYWNlbWVudE1hcDo6c2V0U2NhbGUoZmxvYXQgcwogICAgIHJldHVybiB0
cnVlOwogfQogCi12b2lkIEZFRGlzcGxhY2VtZW50TWFwOjphcHBseSgpCit2b2lkIEZFRGlzcGxh
Y2VtZW50TWFwOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogewotICAgIGlmIChoYXNSZXN1bHQo
KSkKLSAgICAgICAgcmV0dXJuOwogICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgw
KTsKICAgICBGaWx0ZXJFZmZlY3QqIGluMiA9IGlucHV0RWZmZWN0KDEpOwotICAgIGluLT5hcHBs
eSgpOwotICAgIGluMi0+YXBwbHkoKTsKLSAgICBpZiAoIWluLT5oYXNSZXN1bHQoKSB8fCAhaW4y
LT5oYXNSZXN1bHQoKSkKLSAgICAgICAgcmV0dXJuOwogCiAgICAgQVNTRVJUKG1feENoYW5uZWxT
ZWxlY3RvciAhPSBDSEFOTkVMX1VOS05PV04pOwogICAgIEFTU0VSVChtX3lDaGFubmVsU2VsZWN0
b3IgIT0gQ0hBTk5FTF9VTktOT1dOKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmgJKHJl
dmlzaW9uIDk3Nzc1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRURpc3BsYWNlbWVudE1hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1MCw3IEBAIHB1
YmxpYzoKICAgICBmbG9hdCBzY2FsZSgpIGNvbnN0OwogICAgIGJvb2wgc2V0U2NhbGUoZmxvYXQp
OwogCi0gICAgdmlydHVhbCB2b2lkIGFwcGx5KCk7CisgICAgdmlydHVhbCB2b2lkIHBsYXRmb3Jt
QXBwbHlTb2Z0d2FyZSgpOwogICAgIHZpcnR1YWwgdm9pZCBkdW1wKCk7CiAKICAgICB2aXJ0dWFs
IHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKSB7IHNldEFic29sdXRlUGFpbnRSZWN0
KGVuY2xvc2luZ0ludFJlY3QobWF4RWZmZWN0UmVjdCgpKSk7IH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRv
dy5jcHAJKHJldmlzaW9uIDk3Nzc1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MywxNSArNzMs
OSBAQCB2b2lkIEZFRHJvcFNoYWRvdzo6ZGV0ZXJtaW5lQWJzb2x1dGVQYWluCiAgICAgc2V0QWJz
b2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChhYnNvbHV0ZVBhaW50UmVjdCkpOwogfQog
Ci12b2lkIEZFRHJvcFNoYWRvdzo6YXBwbHkoKQordm9pZCBGRURyb3BTaGFkb3c6OnBsYXRmb3Jt
QXBwbHlTb2Z0d2FyZSgpCiB7Ci0gICAgaWYgKGhhc1Jlc3VsdCgpKQotICAgICAgICByZXR1cm47
Ci0KICAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7Ci0gICAgaW4tPmFwcGx5
KCk7Ci0gICAgaWYgKCFpbi0+aGFzUmVzdWx0KCkpCi0gICAgICAgIHJldHVybjsKIAogICAgIElt
YWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7CiAgICAg
aWYgKCFyZXN1bHRJbWFnZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVEcm9wU2hhZG93LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuaAkocmV2aXNpb24gOTc3NzUpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5o
CSh3b3JraW5nIGNvcHkpCkBAIC01MSw3ICs1MSw3IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBm
bG9hdCBjYWxjdWxhdGVTdGREZXZpYXRpb24oZmxvYXQpOwogCi0gICAgdmlydHVhbCB2b2lkIGFw
cGx5KCk7CisgICAgdmlydHVhbCB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpOwogICAgIHZp
cnR1YWwgdm9pZCBkdW1wKCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQ
YWludFJlY3QoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVGbG9vZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUZsb29kLmNwcAkocmV2aXNpb24gOTc3NzUpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC03MCwxMCArNzAsOCBAQCBib29sIEZFRmxvb2Q6OnNldEZsb29kT3BhY2l0eShmbG9hdCBm
bG9vCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgRkVGbG9vZDo6YXBwbHkoKQordm9pZCBG
RUZsb29kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogewotICAgIGlmIChoYXNSZXN1bHQoKSkK
LSAgICAgICAgcmV0dXJuOwogICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0ZUlt
YWdlQnVmZmVyUmVzdWx0KCk7CiAgICAgaWYgKCFyZXN1bHRJbWFnZSkKICAgICAgICAgcmV0dXJu
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29k
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUZsb29kLmgJKHJldmlzaW9uIDk3Nzc1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDcg
QEAgcHVibGljOgogICAgIGZsb2F0IGZsb29kT3BhY2l0eSgpIGNvbnN0OwogICAgIGJvb2wgc2V0
Rmxvb2RPcGFjaXR5KGZsb2F0KTsKIAotICAgIHZpcnR1YWwgdm9pZCBhcHBseSgpOworICAgIHZp
cnR1YWwgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKTsKICAgICB2aXJ0dWFsIHZvaWQgZHVt
cCgpOwogCiAgICAgdmlydHVhbCB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkgeyBz
ZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KG1heEVmZmVjdFJlY3QoKSkpOyB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3Np
YW5CbHVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcAkocmV2aXNpb24gOTc3NzUpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjYyLDE0ICsyNjIsOSBAQCB2b2lkIEZFR2F1c3NpYW5CbHVyOjpkZXRl
cm1pbmVBYnNvbHV0ZVBhCiAgICAgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVj
dChhYnNvbHV0ZVBhaW50UmVjdCkpOwogfQogCi12b2lkIEZFR2F1c3NpYW5CbHVyOjphcHBseSgp
Cit2b2lkIEZFR2F1c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogewotICAgIGlm
IChoYXNSZXN1bHQoKSkKLSAgICAgICAgcmV0dXJuOwogICAgIEZpbHRlckVmZmVjdCogaW4gPSBp
bnB1dEVmZmVjdCgwKTsKLSAgICBpbi0+YXBwbHkoKTsKLSAgICBpZiAoIWluLT5oYXNSZXN1bHQo
KSkKLSAgICAgICAgcmV0dXJuOwogCiAgICAgQnl0ZUFycmF5KiBzcmNQaXhlbEFycmF5ID0gY3Jl
YXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CiAgICAgaWYgKCFzcmNQaXhlbEFycmF5KQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFu
Qmx1ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVHYXVzc2lhbkJsdXIuaAkocmV2aXNpb24gOTc3NzUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQwLDcgKzQwLDcgQEAgcHVibGljOgogCiAgICAgc3RhdGljIGZsb2F0IGNhbGN1bGF0
ZVN0ZERldmlhdGlvbihmbG9hdCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoKTsKKyAgICB2
aXJ0dWFsIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCk7CiAgICAgdmlydHVhbCB2b2lkIGR1
bXAoKTsKICAgICAKICAgICB2aXJ0dWFsIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3Qo
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdo
dGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUxpZ2h0aW5nLmNwcAkocmV2aXNpb24gOTc3NzUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zODYsMTQgKzM4Niw5IEBAIGJvb2wgRkVMaWdodGluZzo6ZHJhd0xpZ2h0aW5nKEJ5dGVB
cnJheSoKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBGRUxpZ2h0aW5nOjphcHBseSgpCit2
b2lkIEZFTGlnaHRpbmc6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiB7Ci0gICAgaWYgKGhhc1Jl
c3VsdCgpKQotICAgICAgICByZXR1cm47CiAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZm
ZWN0KDApOwotICAgIGluLT5hcHBseSgpOwotICAgIGlmICghaW4tPmhhc1Jlc3VsdCgpKQotICAg
ICAgICByZXR1cm47CiAKICAgICBCeXRlQXJyYXkqIHNyY1BpeGVsQXJyYXkgPSBjcmVhdGVVbm11
bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwogICAgIGlmICghc3JjUGl4ZWxBcnJheSkKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdo
dGluZy5oCShyZXZpc2lvbiA5Nzc3NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVMaWdodGluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw3IEBA
IHN0cnVjdCBGRUxpZ2h0aW5nUGFpbnRpbmdEYXRhRm9yTmVvbjsKIAogY2xhc3MgRkVMaWdodGlu
ZyA6IHB1YmxpYyBGaWx0ZXJFZmZlY3QgewogcHVibGljOgotICAgIHZpcnR1YWwgdm9pZCBhcHBs
eSgpOworICAgIHZpcnR1YWwgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKTsKIAogICAgIHZp
cnR1YWwgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpIHsgc2V0QWJzb2x1dGVQYWlu
dFJlY3QoZW5jbG9zaW5nSW50UmVjdChtYXhFZmZlY3RSZWN0KCkpKTsgfQogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNZXJnZS5j
cHAJKHJldmlzaW9uIDk3Nzc1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRU1lcmdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsMTggKzQxLDEwIEBAIFBh
c3NSZWZQdHI8RkVNZXJnZT4gRkVNZXJnZTo6Y3JlYXRlKEZpbHQKICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IEZFTWVyZ2UoZmlsdGVyKSk7CiB9CiAKLXZvaWQgRkVNZXJnZTo6YXBwbHkoKQordm9p
ZCBGRU1lcmdlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogewotICAgIGlmIChoYXNSZXN1bHQo
KSkKLSAgICAgICAgcmV0dXJuOwogICAgIHVuc2lnbmVkIHNpemUgPSBudW1iZXJPZkVmZmVjdElu
cHV0cygpOwogICAgIEFTU0VSVChzaXplID4gMCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHNpemU7ICsraSkgewotICAgICAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3Qo
aSk7Ci0gICAgICAgIGluLT5hcHBseSgpOwotICAgICAgICBpZiAoIWluLT5oYXNSZXN1bHQoKSkK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICB9CiAKICAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1h
Z2UgPSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOwogICAgIGlmICghcmVzdWx0SW1hZ2UpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTWVyZ2UuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
TWVyZ2UuaAkocmV2aXNpb24gOTc3NzUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFTWVyZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsNyBAQCBj
bGFzcyBGRU1lcmdlIDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6CiAgICAgc3RhdGlj
IFBhc3NSZWZQdHI8RkVNZXJnZT4gY3JlYXRlKEZpbHRlciopOwogCi0gICAgdmlydHVhbCB2b2lk
IGFwcGx5KCk7CisgICAgdmlydHVhbCB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpOwogICAg
IHZpcnR1YWwgdm9pZCBkdW1wKCk7CiAKICAgICB2aXJ0dWFsIFRleHRTdHJlYW0mIGV4dGVybmFs
UmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYsIGludCBpbmRlbnRpb24pIGNvbnN0OwpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVNb3JwaG9sb2d5LmNwcAkocmV2aXNpb24gOTc3NzUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE5Myw3ICsxOTMsNyBAQCB2b2lkIEZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseShQYWludGlu
CiB9CiAKIAotdm9pZCBGRU1vcnBob2xvZ3k6OmFwcGx5KCkKK3ZvaWQgRkVNb3JwaG9sb2d5Ojpw
bGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogewogICAgIGlmIChoYXNSZXN1bHQoKSkKICAgICAgICAg
cmV0dXJuOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RU1vcnBob2xvZ3kuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5oCShyZXZpc2lvbiA5Nzc3NSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAgcHVibGljOgogICAgIGZsb2F0IHJhZGl1c1koKSBjb25z
dDsKICAgICBib29sIHNldFJhZGl1c1koZmxvYXQpOwogCi0gICAgdmlydHVhbCB2b2lkIGFwcGx5
KCk7CisgICAgdmlydHVhbCB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpOwogICAgIHZpcnR1
YWwgdm9pZCBkdW1wKCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWlu
dFJlY3QoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVPZmZzZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwCShyZXZpc2lvbiA5Nzc3NSkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVPZmZzZXQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC03NCwxNCArNzQsOSBAQCB2b2lkIEZFT2Zmc2V0OjpkZXRlcm1pbmVBYnNvbHV0ZVBhaW50
UmVjCiAgICAgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChwYWludFJlY3Qp
KTsKIH0KIAotdm9pZCBGRU9mZnNldDo6YXBwbHkoKQordm9pZCBGRU9mZnNldDo6cGxhdGZvcm1B
cHBseVNvZnR3YXJlKCkKIHsKLSAgICBpZiAoaGFzUmVzdWx0KCkpCi0gICAgICAgIHJldHVybjsK
ICAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7Ci0gICAgaW4tPmFwcGx5KCk7
Ci0gICAgaWYgKCFpbi0+aGFzUmVzdWx0KCkpCi0gICAgICAgIHJldHVybjsKIAogICAgIEltYWdl
QnVmZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7CiAgICAgaWYg
KCFyZXN1bHRJbWFnZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVPZmZzZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFT2Zmc2V0LmgJKHJldmlzaW9uIDk3Nzc1KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU9mZnNldC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zOCw3ICszOCw3IEBAIHB1YmxpYzoKICAgICBmbG9hdCBkeSgpIGNvbnN0OwogICAgIHZv
aWQgc2V0RHkoZmxvYXQpOwogCi0gICAgdmlydHVhbCB2b2lkIGFwcGx5KCk7CisgICAgdmlydHVh
bCB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpOwogICAgIHZpcnR1YWwgdm9pZCBkdW1wKCk7
CiAgICAgCiAgICAgdmlydHVhbCB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RVRpbGUuY3BwCShyZXZpc2lvbiA5Nzc3NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsMTYgKzQzLDEx
IEBAIFBhc3NSZWZQdHI8RkVUaWxlPiBGRVRpbGU6OmNyZWF0ZShGaWx0ZXIKICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IEZFVGlsZShmaWx0ZXIpKTsKIH0KIAotdm9pZCBGRVRpbGU6OmFwcGx5KCkK
K3ZvaWQgRkVUaWxlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogewogLy8gRklYTUU6IFNlZSBi
dWcgNDczMTUuIFRoaXMgaXMgYSBoYWNrIHRvIHdvcmsgYXJvdW5kIGEgY29tcGlsZSBmYWlsdXJl
LCBidXQgaXMgaW5jb3JyZWN0IGJlaGF2aW9yIG90aGVyd2lzZS4KICNpZiBFTkFCTEUoU1ZHKQot
ICAgIGlmIChoYXNSZXN1bHQoKSkKLSAgICAgICAgcmV0dXJuOwogICAgIEZpbHRlckVmZmVjdCog
aW4gPSBpbnB1dEVmZmVjdCgwKTsKLSAgICBpbi0+YXBwbHkoKTsKLSAgICBpZiAoIWluLT5oYXNS
ZXN1bHQoKSkKLSAgICAgICAgcmV0dXJuOwogCiAgICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdl
ID0gY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKICAgICBpZiAoIXJlc3VsdEltYWdlKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGls
ZS5oCShyZXZpc2lvbiA5Nzc3NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVUaWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAgY2xhc3Mg
RkVUaWxlIDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NS
ZWZQdHI8RkVUaWxlPiBjcmVhdGUoRmlsdGVyKiBmaWx0ZXIpOwogCi0gICAgdmlydHVhbCB2b2lk
IGFwcGx5KCk7CisgICAgdmlydHVhbCB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpOwogICAg
IHZpcnR1YWwgdm9pZCBkdW1wKCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgZGV0ZXJtaW5lQWJzb2x1
dGVQYWludFJlY3QoKSB7IHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QobWF4
RWZmZWN0UmVjdCgpKSk7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHAJKHJldmlzaW9uIDk3Nzc1
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVu
Y2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjQsMTAgKzM2NCw4IEBAIHZvaWQgRkVUdXJidWxl
bmNlOjpmaWxsUmVnaW9uV29ya2VyKEZpbGwKIH0KICNlbmRpZiAvLyBFTkFCTEUoUEFSQUxMRUxf
Sk9CUykKIAotdm9pZCBGRVR1cmJ1bGVuY2U6OmFwcGx5KCkKK3ZvaWQgRkVUdXJidWxlbmNlOjpw
bGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogewotICAgIGlmIChoYXNSZXN1bHQoKSkKLSAgICAgICAg
cmV0dXJuOwogICAgIEJ5dGVBcnJheSogcGl4ZWxBcnJheSA9IGNyZWF0ZVVubXVsdGlwbGllZElt
YWdlUmVzdWx0KCk7CiAgICAgaWYgKCFwaXhlbEFycmF5KQogICAgICAgICByZXR1cm47CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVUdXJidWxlbmNlLmgJKHJldmlzaW9uIDk3Nzc1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuaAkod29ya2luZyBjb3B5KQpAQCAtNjIs
NyArNjIsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgZmlsbFJlZ2lvbldvcmtlcih2b2lk
Kik7CiAjZW5kaWYKIAotICAgIHZpcnR1YWwgdm9pZCBhcHBseSgpOworICAgIHZpcnR1YWwgdm9p
ZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKTsKICAgICB2aXJ0dWFsIHZvaWQgZHVtcCgpOwogICAg
IAogICAgIHZpcnR1YWwgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpIHsgc2V0QWJz
b2x1dGVQYWludFJlY3QoZW5jbG9zaW5nSW50UmVjdChtYXhFZmZlY3RSZWN0KCkpKTsgfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3Qu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRmlsdGVyRWZmZWN0LmNwcAkocmV2aXNpb24gOTc3NzUpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTg1LDYgKzg1LDI5IEBAIEZpbHRlckVmZmVjdCogRmlsdGVyRWZmZWN0OjppbnB1dEVmZmVj
dCgKICAgICByZXR1cm4gbV9pbnB1dEVmZmVjdHMuYXQobnVtYmVyKS5nZXQoKTsKIH0KIAorYm9v
bCBGaWx0ZXJFZmZlY3Q6Omhhc1Jlc3VsdCgpIGNvbnN0Cit7CisgICAgLy8gVGhpcyBmdW5jdGlv
biBuZWVkcyBwbGF0Zm9ybSBzcGVjaWZpYyBjaGVja3MsIGlmIHRoZSBtZW1vcnkgbWFuYWdtZW50
IGlzIG5vdCBkb25lIGJ5IEZpbHRlckVmZmVjdC4KKyAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlclJl
c3VsdCB8fCBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0IHx8IG1fcHJlbXVsdGlwbGllZEltYWdl
UmVzdWx0OworfQorCit2b2lkIEZpbHRlckVmZmVjdDo6YXBwbHkoKQoreworICAgIGlmIChoYXNS
ZXN1bHQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIHVuc2lnbmVkIHNpemUgPSBtX2lucHV0RWZm
ZWN0cy5zaXplKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkgewor
ICAgICAgICBGaWx0ZXJFZmZlY3QqIGluID0gbV9pbnB1dEVmZmVjdHMuYXQoaSkuZ2V0KCk7Cisg
ICAgICAgIGluLT5hcHBseSgpOworICAgICAgICBpZiAoIWluLT5oYXNSZXN1bHQoKSkKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKTsK
KyAgICAKKyAgICAvLyBBZGQgcGxhdGZvcm0gc3BlY2lmaWMgYXBwbHkgZnVuY3Rpb25zIGhlcmUg
YW5kIHJldHVybiBlYXJsaWVyLgorICAgIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpOworfQorCiB2
b2lkIEZpbHRlckVmZmVjdDo6Y2xlYXJSZXN1bHQoKQogewogICAgIGlmIChtX2ltYWdlQnVmZmVy
UmVzdWx0KQpAQCAtMjM2LDcgKzI1OSw2IEBAIEltYWdlQnVmZmVyKiBGaWx0ZXJFZmZlY3Q6OmNy
ZWF0ZUltYWdlQnUKIHsKICAgICAvLyBPbmx5IG9uZSByZXN1bHQgdHlwZSBpcyBhbGxvd2VkLgog
ICAgIEFTU0VSVCghaGFzUmVzdWx0KCkpOwotICAgIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0
KCk7CiAgICAgaWYgKG1fYWJzb2x1dGVQYWludFJlY3QuaXNFbXB0eSgpKQogICAgICAgICByZXR1
cm4gMDsKICAgICBtX2ltYWdlQnVmZmVyUmVzdWx0ID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShtX2Fi
c29sdXRlUGFpbnRSZWN0LnNpemUoKSwgQ29sb3JTcGFjZUxpbmVhclJHQik7CkBAIC0yNTIsNyAr
Mjc0LDYgQEAgQnl0ZUFycmF5KiBGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVVubXVsdGlwbAogICAgIEFT
U0VSVCghaGFzUmVzdWx0KCkpOwogICAgIEFTU0VSVChpc0ZpbHRlclNpemVWYWxpZChtX2Fic29s
dXRlUGFpbnRSZWN0KSk7CiAKLSAgICBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpOwogICAg
IGlmIChtX2Fic29sdXRlUGFpbnRSZWN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIDA7CiAg
ICAgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IEJ5dGVBcnJheTo6Y3JlYXRlKG1fYWJzb2x1
dGVQYWludFJlY3Qud2lkdGgoKSAqIG1fYWJzb2x1dGVQYWludFJlY3QuaGVpZ2h0KCkgKiA0KTsK
QEAgLTI2NSw3ICsyODYsNiBAQCBCeXRlQXJyYXkqIEZpbHRlckVmZmVjdDo6Y3JlYXRlUHJlbXVs
dGlwCiAgICAgQVNTRVJUKCFoYXNSZXN1bHQoKSk7CiAgICAgQVNTRVJUKGlzRmlsdGVyU2l6ZVZh
bGlkKG1fYWJzb2x1dGVQYWludFJlY3QpKTsKIAotICAgIGRldGVybWluZUFic29sdXRlUGFpbnRS
ZWN0KCk7CiAgICAgaWYgKG1fYWJzb2x1dGVQYWludFJlY3QuaXNFbXB0eSgpKQogICAgICAgICBy
ZXR1cm4gMDsKICAgICBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IEJ5dGVBcnJheTo6Y3Jl
YXRlKG1fYWJzb2x1dGVQYWludFJlY3Qud2lkdGgoKSAqIG1fYWJzb2x1dGVQYWludFJlY3QuaGVp
Z2h0KCkgKiA0KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRmlsdGVyRWZmZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaAkocmV2aXNpb24gOTc3NzUpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01NCw3ICs1NCw3IEBAIGNsYXNzIEZpbHRlckVmZmVjdCA6IHB1YmxpYyBS
ZWZDb3VudGVkPEYKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5GaWx0ZXJFZmZlY3QoKTsKIAotICAg
IGJvb2wgaGFzUmVzdWx0KCkgY29uc3QgeyByZXR1cm4gbV9pbWFnZUJ1ZmZlclJlc3VsdCB8fCBt
X3VubXVsdGlwbGllZEltYWdlUmVzdWx0IHx8IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0OyB9
CisgICAgYm9vbCBoYXNSZXN1bHQoKSBjb25zdDsKICAgICB2b2lkIGNsZWFyUmVzdWx0KCk7CiAg
ICAgSW1hZ2VCdWZmZXIqIGFzSW1hZ2VCdWZmZXIoKTsKICAgICBQYXNzUmVmUHRyPEJ5dGVBcnJh
eT4gYXNVbm11bHRpcGxpZWRJbWFnZShjb25zdCBJbnRSZWN0Jik7CkBAIC03OSw3ICs3OSw5IEBA
IHB1YmxpYzoKICAgICBGbG9hdFJlY3QgbWF4RWZmZWN0UmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1f
bWF4RWZmZWN0UmVjdDsgfQogICAgIHZvaWQgc2V0TWF4RWZmZWN0UmVjdChjb25zdCBGbG9hdFJl
Y3QmIG1heEVmZmVjdFJlY3QpIHsgbV9tYXhFZmZlY3RSZWN0ID0gbWF4RWZmZWN0UmVjdDsgfSAK
IAotICAgIHZpcnR1YWwgdm9pZCBhcHBseSgpID0gMDsKKyAgICB2b2lkIGFwcGx5KCk7CisgICAg
CisgICAgdmlydHVhbCB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpID0gMDsKICAgICB2aXJ0
dWFsIHZvaWQgZHVtcCgpID0gMDsKIAogICAgIHZpcnR1YWwgdm9pZCBkZXRlcm1pbmVBYnNvbHV0
ZVBhaW50UmVjdCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9Tb3VyY2VBbHBoYS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5jcHAJKHJldmlzaW9uIDk3Nzc1KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTUyLDEwICs1Miw4IEBAIHZvaWQgU291cmNlQWxwaGE6OmRldGVy
bWluZUFic29sdXRlUGFpbnQKICAgICBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRS
ZWN0KHBhaW50UmVjdCkpOwogfQogCi12b2lkIFNvdXJjZUFscGhhOjphcHBseSgpCit2b2lkIFNv
dXJjZUFscGhhOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogewotICAgIGlmIChoYXNSZXN1bHQo
KSkKLSAgICAgICAgcmV0dXJuOwogICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0
ZUltYWdlQnVmZmVyUmVzdWx0KCk7CiAgICAgRmlsdGVyKiBmaWx0ZXIgPSB0aGlzLT5maWx0ZXIo
KTsKICAgICBpZiAoIXJlc3VsdEltYWdlIHx8ICFmaWx0ZXItPnNvdXJjZUltYWdlKCkpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9T
b3VyY2VBbHBoYS5oCShyZXZpc2lvbiA5Nzc3NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyAr
MzQsNyBAQCBwdWJsaWM6ICAgICAgICAKIAogICAgIHN0YXRpYyBjb25zdCBBdG9taWNTdHJpbmcm
IGVmZmVjdE5hbWUoKTsKIAotICAgIHZpcnR1YWwgdm9pZCBhcHBseSgpOworICAgIHZpcnR1YWwg
dm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKTsKICAgICB2aXJ0dWFsIHZvaWQgZHVtcCgpOwog
CiAgICAgdmlydHVhbCB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
U291cmNlR3JhcGhpYy5jcHAJKHJldmlzaW9uIDk3Nzc1KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTEsMTAgKzUxLDggQEAgdm9pZCBTb3VyY2VHcmFwaGljOjpkZXRlcm1pbmVBYnNvbHV0ZVBh
aQogICAgIHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QocGFpbnRSZWN0KSk7
CiB9CiAKLXZvaWQgU291cmNlR3JhcGhpYzo6YXBwbHkoKQordm9pZCBTb3VyY2VHcmFwaGljOjpw
bGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogewotICAgIGlmIChoYXNSZXN1bHQoKSkKLSAgICAgICAg
cmV0dXJuOwogICAgIEltYWdlQnVmZmVyKiByZXN1bHRJbWFnZSA9IGNyZWF0ZUltYWdlQnVmZmVy
UmVzdWx0KCk7CiAgICAgRmlsdGVyKiBmaWx0ZXIgPSB0aGlzLT5maWx0ZXIoKTsKICAgICBpZiAo
IXJlc3VsdEltYWdlIHx8ICFmaWx0ZXItPnNvdXJjZUltYWdlKCkpCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBo
aWMuaAkocmV2aXNpb24gOTc3NzUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNyBA
QCBwdWJsaWM6ICAgICAgICAKIAogICAgIHN0YXRpYyBjb25zdCBBdG9taWNTdHJpbmcmIGVmZmVj
dE5hbWUoKTsKIAotICAgIHZpcnR1YWwgdm9pZCBhcHBseSgpOworICAgIHZpcnR1YWwgdm9pZCBw
bGF0Zm9ybUFwcGx5U29mdHdhcmUoKTsKICAgICB2aXJ0dWFsIHZvaWQgZHVtcCgpOwogCiAgICAg
dmlydHVhbCB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGRUltYWdlLmNwcAkocmV2
aXNpb24gOTc3NzUpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdG
RUltYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYsOSArNTYsOSBAQCB2b2lkIEZFSW1hZ2U6
OmRldGVybWluZUFic29sdXRlUGFpbnRSZWN0CiAgICAgc2V0QWJzb2x1dGVQYWludFJlY3QoZW5j
bG9zaW5nSW50UmVjdChwYWludFJlY3QpKTsKIH0KIAotdm9pZCBGRUltYWdlOjphcHBseSgpCit2
b2lkIEZFSW1hZ2U6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiB7Ci0gICAgaWYgKCFtX2ltYWdl
LmdldCgpIHx8IGhhc1Jlc3VsdCgpKQorICAgIGlmICghbV9pbWFnZS5nZXQoKSkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgSW1hZ2VCdWZmZXIqIHJlc3VsdEltYWdlID0gY3JlYXRlSW1hZ2VCdWZm
ZXJSZXN1bHQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NW
R0ZFSW1hZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmls
dGVycy9TVkdGRUltYWdlLmgJKHJldmlzaW9uIDk3Nzc1KQorKysgU291cmNlL1dlYkNvcmUvc3Zn
L2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICsz
Nyw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2V0QWJzb2x1dGVTdWJyZWdpb24oY29uc3QgRmxv
YXRSZWN0JiBhYnNvbHV0ZVN1YnJlZ2lvbikgeyBtX2Fic29sdXRlU3VicmVnaW9uID0gYWJzb2x1
dGVTdWJyZWdpb247IH0KIAotICAgIHZpcnR1YWwgdm9pZCBhcHBseSgpOworICAgIHZpcnR1YWwg
dm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKTsKICAgICB2aXJ0dWFsIHZvaWQgZHVtcCgpOwog
CiAgICAgdmlydHVhbCB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCk7Cg==
</data>
<flag name="review"
          id="109463"
          type_id="1"
          status="+"
          setter="zherczeg"
    />
          </attachment>
      

    </bug>

</bugzilla>