<?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>37052</bug_id>
          
          <creation_ts>2010-04-02 17:37:31 -0700</creation_ts>
          <short_desc>[V8] Extend the set of types supported by SerializedScriptValue</short_desc>
          <delta_ts>2010-04-06 06:34:48 -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>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Vitaly Repeshko">vitalyr</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>commit-queue</cc>
    
    <cc>eric</cc>
    
    <cc>levin</cc>
    
    <cc>pfeldman</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>208183</commentid>
    <comment_count>0</comment_count>
    <who name="Vitaly Repeshko">vitalyr</who>
    <bug_when>2010-04-02 17:37:31 -0700</bug_when>
    <thetext>[V8] Extend the set of types supported by SerializedScriptValue</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>208190</commentid>
    <comment_count>1</comment_count>
      <attachid>52472</attachid>
    <who name="Vitaly Repeshko">vitalyr</who>
    <bug_when>2010-04-02 17:59:28 -0700</bug_when>
    <thetext>Created attachment 52472
patch v1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>208456</commentid>
    <comment_count>2</comment_count>
      <attachid>52472</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-04-05 06:28:21 -0700</bug_when>
    <thetext>Comment on attachment 52472
patch v1

&gt; -            push(new ObjectState(handleCast&lt;v8::Object&gt;(value)));
&gt; -            // FIXME:
&gt; -            // - check not a wrapper
&gt; -            // - support File, ImageData, etc.
&gt; -        }
&gt; -        return true;
Please file a bug for the FIXME.

&gt; +    static StateBase* newArrayState(v8::Handle&lt;v8::Array&gt; array, StateBase* next)
&gt; +    {
&gt; +        // FIXME: use plain Array state when we can quickly check that
&gt; +        // an array is not sparse and has only indexed properties.
&gt; +        return new SparseArrayState(array, next);
&gt; +    }
&gt; +
Ditto.

&gt; +    static StateBase* newObjectState(v8::Handle&lt;v8::Object&gt; object, StateBase* next)
&gt; +    {
&gt; +        // FIXME:
&gt; +        // - check not a wrapper
&gt; +        // - support File, etc.
&gt; +        return new ObjectState(object, next);
&gt; +    }
Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>208458</commentid>
    <comment_count>3</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-04-05 06:29:30 -0700</bug_when>
    <thetext>(In reply to comment #0)
&gt; [V8] Extend the set of types supported by SerializedScriptValue

Can we write unit tests for serialize script values?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>208514</commentid>
    <comment_count>4</comment_count>
    <who name="Vitaly Repeshko">vitalyr</who>
    <bug_when>2010-04-05 09:39:49 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (In reply to comment #0)
&gt; &gt; [V8] Extend the set of types supported by SerializedScriptValue
&gt; 
&gt; Can we write unit tests for serialize script values?

We can, but most interesting stuff is already covered by existing layout tests. (See fast/dom/Window/window-postmessage*.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>208517</commentid>
    <comment_count>5</comment_count>
      <attachid>52539</attachid>
    <who name="Vitaly Repeshko">vitalyr</who>
    <bug_when>2010-04-05 09:47:38 -0700</bug_when>
    <thetext>Created attachment 52539
patch v1.1: rebased</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>208527</commentid>
    <comment_count>6</comment_count>
    <who name="Vitaly Repeshko">vitalyr</who>
    <bug_when>2010-04-05 10:06:47 -0700</bug_when>
    <thetext>	M	WebCore/ChangeLog
	M	WebCore/bindings/v8/SerializedScriptValue.cpp
Committed r57079</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>208629</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-04-05 12:13:42 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/57079 might have broken Tiger Intel Release</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>208633</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-04-05 12:16:46 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/57079 might have broken Tiger Intel Release</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>208637</commentid>
    <comment_count>9</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-04-05 12:18:53 -0700</bug_when>
    <thetext>bug 36798 seems to be the actual culprit.  Sheriffbot should not have warned twice.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>208640</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-04-05 12:22:12 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/57079 might have broken Tiger Intel Release</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>208641</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-04-05 12:25:31 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/57079 might have broken Tiger Intel Release</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>208642</commentid>
    <comment_count>12</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-04-05 12:25:44 -0700</bug_when>
    <thetext>Sorry for the repeated messages.  I&apos;m figuring out why he&apos;s spamming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>208644</commentid>
    <comment_count>13</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-04-05 12:29:43 -0700</bug_when>
    <thetext>The problem is vitalyr@chromium.org is not in committers.py.  Fixing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>208645</commentid>
    <comment_count>14</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-04-05 12:33:54 -0700</bug_when>
    <thetext>Sorry, he&apos;s going to spam one more time when I bring him back online.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>208650</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-04-05 12:47:19 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/57079 might have broken Tiger Intel Release</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>208940</commentid>
    <comment_count>16</comment_count>
      <attachid>52539</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-04-06 01:14:06 -0700</bug_when>
    <thetext>Comment on attachment 52539
patch v1.1: rebased

Reverted for crashing layout test in:
fast/dom/Window/window-postmessage-clone.html = CRASH

Committing to http://svn.webkit.org/repository/webkit/trunk 
	M	WebCore/ChangeLog
	M	WebCore/bindings/v8/SerializedScriptValue.cpp
Committed r57133</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>208942</commentid>
    <comment_count>17</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-04-06 01:14:37 -0700</bug_when>
    <thetext>Reopening since has been rolled out.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>209012</commentid>
    <comment_count>18</comment_count>
      <attachid>52625</attachid>
    <who name="Vitaly Repeshko">vitalyr</who>
    <bug_when>2010-04-06 06:32:46 -0700</bug_when>
    <thetext>Created attachment 52625
patch v1.2: fixed delete bug in handleError</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>209014</commentid>
    <comment_count>19</comment_count>
    <who name="Vitaly Repeshko">vitalyr</who>
    <bug_when>2010-04-06 06:34:48 -0700</bug_when>
    <thetext>	M	WebCore/ChangeLog
	M	WebCore/bindings/v8/SerializedScriptValue.cpp
Committed r57145</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>52472</attachid>
            <date>2010-04-02 17:59:28 -0700</date>
            <delta_ts>2010-04-05 09:47:38 -0700</delta_ts>
            <desc>patch v1</desc>
            <filename>serialize.patch</filename>
            <type>text/plain</type>
            <size>34444</size>
            <attacher name="Vitaly Repeshko">vitalyr</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
OTkzNmM1My4uYzc3NDRjOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw4NCBAQAorMjAxMC0wNC0wMiAgVml0YWx5IFJlcGVz
aGtvICA8dml0YWx5ckBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgW1Y4XSBFeHRlbmQgdGhlIHNldCBvZiB0eXBlcyBzdXBwb3J0
ZWQgYnkgU2VyaWFsaXplZFNjcmlwdFZhbHVlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0zNzA1MgorCisgICAgICAgIE5ldyB0eXBlcyBpbmNsdWRlIHNw
YXJzZSBhcnJheXMsIFVpbnQzMiwgRGF0ZSwgYW5kIEltYWdlRGF0YS4KKworICAgICAgICBTZXJp
YWxpemF0aW9uIHByb2Nlc3MgYmVjYW1lIG1vcmUgZmxleGlibGUuIEEgc3RhdGUgY2FuIGVpdGhl
cgorICAgICAgICBkaXJlY3RseSB3cml0ZSBwcmltaXRpdmUgdmFsdWVzIChpbnN0ZWFkIG9mIHJl
dHVybmluZyB0aGVtIGxpa2UKKyAgICAgICAgaXRlcmF0b3IpIG9yIGNvbnN0cnVjdCBhIG5ldyBz
dGF0ZSBmb3Igc2VyaWFsaXppbmcgY29tcGxleCB2YWx1ZXMKKyAgICAgICAgdGhhdCB3aWxsIHJl
dHVybiB0byB0aGUgY3VycmVudCBzdGF0ZSB3aGVuIGRvbmUuCisKKyAgICAgICAgRGVzZXJpYWxp
emF0aW9uIHByb2Nlc3Mgbm93IGF2b2lkcyBleHBvc2luZyB0aGUgdGFncyB1c2luZyBhIHNldAor
ICAgICAgICBvZiBmYWN0b3J5IGZ1bmN0aW9ucyBmb3IgY29tcGxleCBvYmplY3RzIGluc3RlYWQu
CisKKyAgICAgICAgSW50ZXJuYWwgYnVmZmVyIHR5cGUgY2hhbmdlZCB0byB1aW50OF90IHRvIGJl
IGluZGVwZW5kZW50IG9mCisgICAgICAgIHdoZXRoZXIgY2hhciBpcyBzaWduZWQgb3Igbm90Lgor
CisgICAgICAgICogYmluZGluZ3MvdjgvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6Oik6CisgICAgICAgIChXZWJDb3JlOjpXcml0ZXI6OldyaXRlcik6CisgICAg
ICAgIChXZWJDb3JlOjpXcml0ZXI6OndyaXRlU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6Oldy
aXRlcjo6d3JpdGVVaW50MzIpOgorICAgICAgICAoV2ViQ29yZTo6V3JpdGVyOjp3cml0ZURhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6V3JpdGVyOjp3cml0ZU51bWJlcik6CisgICAgICAgIChXZWJD
b3JlOjpXcml0ZXI6OndyaXRlSW1hZ2VEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OldyaXRlcjo6
d3JpdGVBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpXcml0ZXI6OndyaXRlT2JqZWN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OldyaXRlcjo6d3JpdGVTcGFyc2VBcnJheSk6CisgICAgICAgIChXZWJD
b3JlOjpXcml0ZXI6OmRvV3JpdGVVaW50MzIpOgorICAgICAgICAoV2ViQ29yZTo6V3JpdGVyOjpk
b1dyaXRlTnVtYmVyKToKKyAgICAgICAgKFdlYkNvcmU6OldyaXRlcjo6YXBwZW5kKToKKyAgICAg
ICAgKFdlYkNvcmU6OldyaXRlcjo6ZmlsbEhvbGUpOgorICAgICAgICAoV2ViQ29yZTo6V3JpdGVy
OjpieXRlQXQpOgorICAgICAgICAoV2ViQ29yZTo6U2VyaWFsaXplcjo6U2VyaWFsaXplcik6Cisg
ICAgICAgIChXZWJDb3JlOjpTZXJpYWxpemVyOjpzZXJpYWxpemUpOgorICAgICAgICAoV2ViQ29y
ZTo6U2VyaWFsaXplcjo6d3JpdGVBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpTZXJpYWxpemVy
Ojp3cml0ZU9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpTZXJpYWxpemVyOjp3cml0ZVNwYXJz
ZUFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6OlNlcmlhbGl6ZXI6OlN0YXRlQmFzZTo6U3RhdGVC
YXNlKToKKyAgICAgICAgKFdlYkNvcmU6OlNlcmlhbGl6ZXI6OkVycm9yU3RhdGU6OkVycm9yU3Rh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6U2VyaWFsaXplcjo6RXJyb3JTdGF0ZTo6YWR2YW5jZSk6
CisgICAgICAgIChXZWJDb3JlOjpTZXJpYWxpemVyOjpTdGF0ZTo6Y29tcG9zaXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNlcmlhbGl6ZXI6OlN0YXRlOjpTdGF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTZXJpYWxpemVyOjpBcnJheVN0YXRlOjpBcnJheVN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OlNlcmlhbGl6ZXI6OkFycmF5U3RhdGU6OmFkdmFuY2UpOgorICAgICAgICAoV2ViQ29yZTo6U2Vy
aWFsaXplcjo6QWJzdHJhY3RPYmplY3RTdGF0ZTo6QWJzdHJhY3RPYmplY3RTdGF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTZXJpYWxpemVyOjpBYnN0cmFjdE9iamVjdFN0YXRlOjphZHZhbmNlKToK
KyAgICAgICAgKFdlYkNvcmU6OlNlcmlhbGl6ZXI6Ok9iamVjdFN0YXRlOjpPYmplY3RTdGF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpTZXJpYWxpemVyOjpPYmplY3RTdGF0ZTo6b2JqZWN0RG9uZSk6
CisgICAgICAgIChXZWJDb3JlOjpTZXJpYWxpemVyOjpTcGFyc2VBcnJheVN0YXRlOjpTcGFyc2VB
cnJheVN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNlcmlhbGl6ZXI6OlNwYXJzZUFycmF5U3Rh
dGU6Om9iamVjdERvbmUpOgorICAgICAgICAoV2ViQ29yZTo6U2VyaWFsaXplcjo6cHVzaCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTZXJpYWxpemVyOjpwb3ApOgorICAgICAgICAoV2ViQ29yZTo6U2Vy
aWFsaXplcjo6aGFuZGxlRXJyb3IpOgorICAgICAgICAoV2ViQ29yZTo6U2VyaWFsaXplcjo6Y2hl
Y2tDb21wb3NpdGUpOgorICAgICAgICAoV2ViQ29yZTo6U2VyaWFsaXplcjo6d3JpdGVTdHJpbmcp
OgorICAgICAgICAoV2ViQ29yZTo6U2VyaWFsaXplcjo6d3JpdGVJbWFnZURhdGEpOgorICAgICAg
ICAoV2ViQ29yZTo6U2VyaWFsaXplcjo6bmV3QXJyYXlTdGF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTZXJpYWxpemVyOjpuZXdPYmplY3RTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTZXJpYWxp
emVyOjpkb1NlcmlhbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZWFkZXI6OlJlYWRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpSZWFkZXI6OnJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVhZGVy
OjpyZWFkU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWRlcjo6cmVhZFVpbnQzMik6Cisg
ICAgICAgIChXZWJDb3JlOjpSZWFkZXI6OnJlYWREYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
YWRlcjo6cmVhZE51bWJlcik6CisgICAgICAgIChXZWJDb3JlOjpSZWFkZXI6OnJlYWRJbWFnZURh
dGEpOgorICAgICAgICAoV2ViQ29yZTo6UmVhZGVyOjpkb1JlYWRVaW50MzIpOgorICAgICAgICAo
V2ViQ29yZTo6UmVhZGVyOjpkb1JlYWROdW1iZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGVzZXJp
YWxpemVyOjpEZXNlcmlhbGl6ZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGVzZXJpYWxpemVyOjpj
cmVhdGVBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpEZXNlcmlhbGl6ZXI6OmNyZWF0ZU9iamVj
dCk6CisgICAgICAgIChXZWJDb3JlOjpEZXNlcmlhbGl6ZXI6OmNyZWF0ZVNwYXJzZUFycmF5KToK
KyAgICAgICAgKFdlYkNvcmU6OkRlc2VyaWFsaXplcjo6aW5pdGlhbGl6ZU9iamVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpEZXNlcmlhbGl6ZXI6OmRvRGVzZXJpYWxpemUpOgorICAgICAgICAoV2Vi
Q29yZTo6RGVzZXJpYWxpemVyOjpzdGFja0RlcHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZTo6ZGVzZXJpYWxpemUpOgorCiAyMDEwLTA0LTAxICBWaXRhbHkgUmVw
ZXNoa28gIDx2aXRhbHlyQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJp
biBGaXNoZXIuCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZS5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5j
cHAKaW5kZXggNDY2NDVkNS4uN2JiYjM0YyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92
OC9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvU2Vy
aWFsaXplZFNjcmlwdFZhbHVlLmNwcApAQCAtMzEsNyArMzEsMTEgQEAKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKIAorI2luY2x1ZGUgIkJ5
dGVBcnJheS5oIgorI2luY2x1ZGUgIkNhbnZhc1BpeGVsQXJyYXkuaCIKKyNpbmNsdWRlICJJbWFn
ZURhdGEuaCIKICNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKyNpbmNsdWRlICJWOEltYWdlRGF0
YS5oIgogCiAjaW5jbHVkZSA8djguaD4KICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgpAQCAt
NDAsNyArNDQsNiBAQAogCiAvLyBGSVhNRToKIC8vIC0gY2F0Y2ggVjggZXhjZXB0aW9ucwotLy8g
LSBiZSByZWFkeSB0byBnZXQgZW1wdHkgaGFuZGxlcwogLy8gLSBjb25zaWRlciBjcmFzaGluZyBp
biBkZWJ1ZyBtb2RlIG9uIGRlc2VyaWFsaXphdGlvbiBlcnJvcnMKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewpAQCAtNjAsMTkgKzYzLDE1IEBAIGVudW0gU2VyaWFsaXphdGlvblRhZyB7CiAgICAgRmFs
c2VUYWcgPSAnRicsCiAgICAgU3RyaW5nVGFnID0gJ1MnLAogICAgIEludDMyVGFnID0gJ0knLAor
ICAgIFVpbnQzMlRhZyA9ICdVJywKKyAgICBEYXRlVGFnID0gJ0QnLAogICAgIE51bWJlclRhZyA9
ICdOJywKLSAgICBPYmplY3RUYWcgPSAneycsCisgICAgSW1hZ2VEYXRhVGFnID0gJyMnLAogICAg
IEFycmF5VGFnID0gJ1snLAorICAgIE9iamVjdFRhZyA9ICd7JywKKyAgICBTcGFyc2VBcnJheVRh
ZyA9ICdAJywKIH07CiAKLS8vIEhlbHBlcnMgdG8gZG8gdmVyYm9zZSBoYW5kbGUgY2FzdHMuCi0K
LXRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPgotc3RhdGljIHY4OjpIYW5kbGU8VD4g
aGFuZGxlQ2FzdCh2ODo6SGFuZGxlPFU+IGhhbmRsZSkgeyByZXR1cm4gdjg6OkhhbmRsZTxUPjo6
Q2FzdChoYW5kbGUpOyB9Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPgotc3Rh
dGljIHY4OjpMb2NhbDxUPiBoYW5kbGVDYXN0KHY4OjpMb2NhbDxVPiBoYW5kbGUpIHsgcmV0dXJu
IHY4OjpMb2NhbDxUPjo6Q2FzdChoYW5kbGUpOyB9Ci0KIHN0YXRpYyBib29sIHNob3VsZENoZWNr
Rm9yQ3ljbGVzKGludCBkZXB0aCkKIHsKICAgICBBU1NFUlQoZGVwdGggPj0gMCk7CkBAIC0xMTgs
NyArMTE3LDggQEAgcHJpdmF0ZToKIC8vIGluZm9ybWF0aW9uIHVzZWQgdG8gcmVjb25zdHJ1Y3Qg
Y29tcG9zaXRlIHR5cGVzLgogY2xhc3MgV3JpdGVyIDogTm9uY29weWFibGUgewogcHVibGljOgot
ICAgIFdyaXRlcigpIDogbV9wb3NpdGlvbigwKQorICAgIFdyaXRlcigpCisgICAgICAgIDogbV9w
b3NpdGlvbigwKQogICAgIHsKICAgICB9CiAKQEAgLTEzNCw5ICsxMzQsMTAgQEAgcHVibGljOgog
CiAgICAgdm9pZCB3cml0ZVN0cmluZyhjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKQogICAg
IHsKKyAgICAgICAgQVNTRVJUKGxlbmd0aCA+PSAwKTsKICAgICAgICAgYXBwZW5kKFN0cmluZ1Rh
Zyk7CiAgICAgICAgIGRvV3JpdGVVaW50MzIoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGxlbmd0aCkp
OwotICAgICAgICBhcHBlbmQoZGF0YSwgbGVuZ3RoKTsKKyAgICAgICAgYXBwZW5kKHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEpLCBsZW5ndGgpOwogICAgIH0KIAogICAgIHZv
aWQgd3JpdGVJbnQzMihpbnQzMl90IHZhbHVlKQpAQCAtMTQ1LDE5ICsxNDYsNTAgQEAgcHVibGlj
OgogICAgICAgICBkb1dyaXRlVWludDMyKFppZ1phZzo6ZW5jb2RlKHN0YXRpY19jYXN0PHVpbnQz
Ml90Pih2YWx1ZSkpKTsKICAgICB9CiAKKyAgICB2b2lkIHdyaXRlVWludDMyKHVpbnQzMl90IHZh
bHVlKQorICAgIHsKKyAgICAgICAgYXBwZW5kKFVpbnQzMlRhZyk7CisgICAgICAgIGRvV3JpdGVV
aW50MzIodmFsdWUpOworICAgIH0KKworICAgIHZvaWQgd3JpdGVEYXRlKGRvdWJsZSBudW1iZXJW
YWx1ZSkKKyAgICB7CisgICAgICAgIGFwcGVuZChEYXRlVGFnKTsKKyAgICAgICAgZG9Xcml0ZU51
bWJlcihudW1iZXJWYWx1ZSk7CisgICAgfQorCiAgICAgdm9pZCB3cml0ZU51bWJlcihkb3VibGUg
bnVtYmVyKQogICAgIHsKICAgICAgICAgYXBwZW5kKE51bWJlclRhZyk7Ci0gICAgICAgIGFwcGVu
ZChyZWludGVycHJldF9jYXN0PGNoYXIqPigmbnVtYmVyKSwgc2l6ZW9mKG51bWJlcikpOworICAg
ICAgICBkb1dyaXRlTnVtYmVyKG51bWJlcik7CiAgICAgfQogCi0gICAgLy8gUmVjb3JkcyB0aGF0
IGEgY29tcG9zaXRlIG9iamVjdCBjYW4gYmUgY29uc3RydWN0ZWQgYnkgdXNpbmcKLSAgICAvLyB8
bGVuZ3RofCBwcmV2aW91c2x5IHN0b3JlZCB2YWx1ZXMuCi0gICAgdm9pZCBlbmRDb21wb3NpdGUo
U2VyaWFsaXphdGlvblRhZyB0YWcsIGludDMyX3QgbGVuZ3RoKQorICAgIHZvaWQgd3JpdGVJbWFn
ZURhdGEodWludDMyX3Qgd2lkdGgsIHVpbnQzMl90IGhlaWdodCwgY29uc3QgdWludDhfdCogcGl4
ZWxEYXRhLCB1aW50MzJfdCBwaXhlbERhdGFMZW5ndGgpCiAgICAgewotICAgICAgICBBU1NFUlQo
dGFnID09IE9iamVjdFRhZyB8fCB0YWcgPT0gQXJyYXlUYWcpOwotICAgICAgICBhcHBlbmQodGFn
KTsKLSAgICAgICAgZG9Xcml0ZVVpbnQzMihzdGF0aWNfY2FzdDx1aW50MzJfdD4obGVuZ3RoKSk7
CisgICAgICAgIGFwcGVuZChJbWFnZURhdGFUYWcpOworICAgICAgICBkb1dyaXRlVWludDMyKHdp
ZHRoKTsKKyAgICAgICAgZG9Xcml0ZVVpbnQzMihoZWlnaHQpOworICAgICAgICBkb1dyaXRlVWlu
dDMyKHBpeGVsRGF0YUxlbmd0aCk7CisgICAgICAgIGFwcGVuZChwaXhlbERhdGEsIHBpeGVsRGF0
YUxlbmd0aCk7CisgICAgfQorCisgICAgdm9pZCB3cml0ZUFycmF5KHVpbnQzMl90IGxlbmd0aCkK
KyAgICB7CisgICAgICAgIGFwcGVuZChBcnJheVRhZyk7CisgICAgICAgIGRvV3JpdGVVaW50MzIo
bGVuZ3RoKTsKKyAgICB9CisKKyAgICB2b2lkIHdyaXRlT2JqZWN0KHVpbnQzMl90IG51bVByb3Bl
cnRpZXMpCisgICAgeworICAgICAgICBhcHBlbmQoT2JqZWN0VGFnKTsKKyAgICAgICAgZG9Xcml0
ZVVpbnQzMihudW1Qcm9wZXJ0aWVzKTsKKyAgICB9CisKKyAgICB2b2lkIHdyaXRlU3BhcnNlQXJy
YXkodWludDMyX3QgbnVtUHJvcGVydGllcywgdWludDMyX3QgbGVuZ3RoKQorICAgIHsKKyAgICAg
ICAgYXBwZW5kKFNwYXJzZUFycmF5VGFnKTsKKyAgICAgICAgZG9Xcml0ZVVpbnQzMihudW1Qcm9w
ZXJ0aWVzKTsKKyAgICAgICAgZG9Xcml0ZVVpbnQzMihsZW5ndGgpOwogICAgIH0KIAogICAgIFZl
Y3RvcjxCdWZmZXJWYWx1ZVR5cGU+JiBkYXRhKCkKQEAgLTE3MCw3ICsyMDIsNyBAQCBwcml2YXRl
OgogICAgIHZvaWQgZG9Xcml0ZVVpbnQzMih1aW50MzJfdCB2YWx1ZSkKICAgICB7CiAgICAgICAg
IHdoaWxlICh0cnVlKSB7Ci0gICAgICAgICAgICBjaGFyIGIgPSAodmFsdWUgJiB2YXJJbnRNYXNr
KTsKKyAgICAgICAgICAgIHVpbnQ4X3QgYiA9ICh2YWx1ZSAmIHZhckludE1hc2spOwogICAgICAg
ICAgICAgdmFsdWUgPj49IHZhckludFNoaWZ0OwogICAgICAgICAgICAgaWYgKCF2YWx1ZSkgewog
ICAgICAgICAgICAgICAgIGFwcGVuZChiKTsKQEAgLTE4MCwyMSArMjEyLDI2IEBAIHByaXZhdGU6
CiAgICAgICAgIH0KICAgICB9CiAKKyAgICB2b2lkIGRvV3JpdGVOdW1iZXIoZG91YmxlIG51bWJl
cikKKyAgICB7CisgICAgICAgIGFwcGVuZChyZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPigmbnVt
YmVyKSwgc2l6ZW9mKG51bWJlcikpOworICAgIH0KKwogICAgIHZvaWQgYXBwZW5kKFNlcmlhbGl6
YXRpb25UYWcgdGFnKQogICAgIHsKLSAgICAgICAgYXBwZW5kKHN0YXRpY19jYXN0PGNoYXI+KHRh
ZykpOworICAgICAgICBhcHBlbmQoc3RhdGljX2Nhc3Q8dWludDhfdD4odGFnKSk7CiAgICAgfQog
Ci0gICAgdm9pZCBhcHBlbmQoY2hhciBiKQorICAgIHZvaWQgYXBwZW5kKHVpbnQ4X3QgYikKICAg
ICB7CiAgICAgICAgIGVuc3VyZVNwYWNlKDEpOwotICAgICAgICAqY2hhckF0KG1fcG9zaXRpb24r
KykgPSBiOworICAgICAgICAqYnl0ZUF0KG1fcG9zaXRpb24rKykgPSBiOwogICAgIH0KIAotICAg
IHZvaWQgYXBwZW5kKGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpCisgICAgdm9pZCBhcHBl
bmQoY29uc3QgdWludDhfdCogZGF0YSwgaW50IGxlbmd0aCkKICAgICB7CiAgICAgICAgIGVuc3Vy
ZVNwYWNlKGxlbmd0aCk7Ci0gICAgICAgIG1lbWNweShjaGFyQXQobV9wb3NpdGlvbiksIGRhdGEs
IGxlbmd0aCk7CisgICAgICAgIG1lbWNweShieXRlQXQobV9wb3NpdGlvbiksIGRhdGEsIGxlbmd0
aCk7CiAgICAgICAgIG1fcG9zaXRpb24gKz0gbGVuZ3RoOwogICAgIH0KIApAQCAtMjEwLDQxICsy
NDcsNTQgQEAgcHJpdmF0ZToKICAgICAgICAgLy8gSWYgdGhlIHdyaXRlciBpcyBhdCBvZGQgcG9z
aXRpb24gaW4gdGhlIGJ1ZmZlciwgdGhlbiBvbmUgb2YKICAgICAgICAgLy8gdGhlIGJ5dGVzIGlu
IHRoZSBsYXN0IFVDaGFyIGlzIG5vdCBpbml0aWFsaXplZC4KICAgICAgICAgaWYgKG1fcG9zaXRp
b24gJSAyKQotICAgICAgICAgICAgKmNoYXJBdChtX3Bvc2l0aW9uKSA9IHN0YXRpY19jYXN0PGNo
YXI+KFBhZGRpbmdUYWcpOworICAgICAgICAgICAgKmJ5dGVBdChtX3Bvc2l0aW9uKSA9IHN0YXRp
Y19jYXN0PHVpbnQ4X3Q+KFBhZGRpbmdUYWcpOwogICAgIH0KIAotICAgIGNoYXIqIGNoYXJBdChp
bnQgcG9zaXRpb24pIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG1fYnVmZmVyLmRh
dGEoKSkgKyBwb3NpdGlvbjsgfQorICAgIHVpbnQ4X3QqIGJ5dGVBdChpbnQgcG9zaXRpb24pIHsg
cmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KG1fYnVmZmVyLmRhdGEoKSkgKyBwb3Np
dGlvbjsgfQogCiAgICAgVmVjdG9yPEJ1ZmZlclZhbHVlVHlwZT4gbV9idWZmZXI7CiAgICAgdW5z
aWduZWQgbV9wb3NpdGlvbjsKIH07CiAKIGNsYXNzIFNlcmlhbGl6ZXIgeworICAgIGNsYXNzIFN0
YXRlQmFzZTsKIHB1YmxpYzoKICAgICBleHBsaWNpdCBTZXJpYWxpemVyKFdyaXRlciYgd3JpdGVy
KQogICAgICAgICA6IG1fd3JpdGVyKHdyaXRlcikKLSAgICAgICAgLCBtX3N0YXRlKDApCiAgICAg
ICAgICwgbV9kZXB0aCgwKQorICAgICAgICAsIG1faGFzRXJyb3IoZmFsc2UpCiAgICAgewogICAg
IH0KIAogICAgIGJvb2wgc2VyaWFsaXplKHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSkKICAg
ICB7CiAgICAgICAgIHY4OjpIYW5kbGVTY29wZSBzY29wZTsKLSAgICAgICAgU3RhY2tDbGVhbmVy
IGNsZWFuZXIoJm1fc3RhdGUpOwotICAgICAgICBpZiAoIWRvU2VyaWFsaXplKHZhbHVlKSkKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgd2hpbGUgKHRvcCgpKSB7Ci0gICAgICAg
ICAgICBpbnQgbGVuZ3RoOwotICAgICAgICAgICAgd2hpbGUgKCF0b3AoKS0+aXNEb25lKCZsZW5n
dGgpKSB7Ci0gICAgICAgICAgICAgICAgLy8gTm90ZSB0aGF0IGRvU2VyaWFsaXplKCkgY2FuIGNo
YW5nZSBjdXJyZW50IHRvcCgpLgotICAgICAgICAgICAgICAgIGlmICghZG9TZXJpYWxpemUodG9w
KCktPmFkdmFuY2UoKSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIG1fd3JpdGVyLmVuZENvbXBvc2l0ZSh0b3AoKS0+dGFnKCks
IGxlbmd0aCk7Ci0gICAgICAgICAgICBwb3AoKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgU3RhdGVCYXNlKiBzdGF0ZSA9IGRvU2VyaWFsaXplKHZhbHVlLCAwKTsK
KyAgICAgICAgd2hpbGUgKHN0YXRlKQorICAgICAgICAgICAgc3RhdGUgPSBzdGF0ZS0+YWR2YW5j
ZSgqdGhpcyk7CisgICAgICAgIHJldHVybiAhbV9oYXNFcnJvcjsKKyAgICB9CisKKyAgICAvLyBG
dW5jdGlvbnMgdXNlZCBieSBzZXJpYWxpemF0aW9uIHN0YXRlcy4KKworICAgIFN0YXRlQmFzZSog
ZG9TZXJpYWxpemUodjg6OkhhbmRsZTx2ODo6VmFsdWU+IHZhbHVlLCBTdGF0ZUJhc2UqIG5leHQp
OworCisgICAgU3RhdGVCYXNlKiB3cml0ZUFycmF5KHVpbnQzMl90IGxlbmd0aCwgU3RhdGVCYXNl
KiBzdGF0ZSkKKyAgICB7CisgICAgICAgIG1fd3JpdGVyLndyaXRlQXJyYXkobGVuZ3RoKTsKKyAg
ICAgICAgcmV0dXJuIHBvcChzdGF0ZSk7CisgICAgfQorCisgICAgU3RhdGVCYXNlKiB3cml0ZU9i
amVjdCh1aW50MzJfdCBudW1Qcm9wZXJ0aWVzLCBTdGF0ZUJhc2UqIHN0YXRlKQorICAgIHsKKyAg
ICAgICAgbV93cml0ZXIud3JpdGVPYmplY3QobnVtUHJvcGVydGllcyk7CisgICAgICAgIHJldHVy
biBwb3Aoc3RhdGUpOworICAgIH0KKworICAgIFN0YXRlQmFzZSogd3JpdGVTcGFyc2VBcnJheSh1
aW50MzJfdCBudW1Qcm9wZXJ0aWVzLCB1aW50MzJfdCBsZW5ndGgsIFN0YXRlQmFzZSogc3RhdGUp
CisgICAgeworICAgICAgICBtX3dyaXRlci53cml0ZVNwYXJzZUFycmF5KG51bVByb3BlcnRpZXMs
IGxlbmd0aCk7CisgICAgICAgIHJldHVybiBwb3Aoc3RhdGUpOwogICAgIH0KIAogcHJpdmF0ZToK
QEAgLTI1NCwyMjEgKzMwNCwyNzUgQEAgcHJpdmF0ZToKIAogICAgICAgICAvLyBMaW5rIHRvIHRo
ZSBuZXh0IHN0YXRlIHRvIGZvcm0gYSBzdGFjay4KICAgICAgICAgU3RhdGVCYXNlKiBuZXh0U3Rh
dGUoKSB7IHJldHVybiBtX25leHQ7IH0KLSAgICAgICAgdm9pZCBzZXROZXh0U3RhdGUoU3RhdGVC
YXNlKiBuZXh0KSB7IG1fbmV4dCA9IG5leHQ7IH0KIAogICAgICAgICAvLyBDb21wb3NpdGUgb2Jq
ZWN0IHdlJ3JlIHByb2Nlc3NpbmcgaW4gdGhpcyBzdGF0ZS4KICAgICAgICAgdjg6OkhhbmRsZTx2
ODo6VmFsdWU+IGNvbXBvc2l0ZSgpIHsgcmV0dXJuIG1fY29tcG9zaXRlOyB9CiAKLSAgICAgICAg
Ly8gU2VyaWFsaXphdGlvbiB0YWcgZm9yIHRoZSBjdXJyZW50IGNvbXBvc2l0ZS4KLSAgICAgICAg
dmlydHVhbCBTZXJpYWxpemF0aW9uVGFnIHRhZygpIGNvbnN0ID0gMDsKLQotICAgICAgICAvLyBS
ZXR1cm5zIHdoZXRoZXIgaXRlcmF0aW9uIG92ZXIgc3Vib2JqZWN0cyBvZiB0aGUgY3VycmVudAot
ICAgICAgICAvLyBjb21wb3NpdGUgb2JqZWN0IGlzIGRvbmUuIElmIHllcywgfCpsZW5ndGh8IGlz
IHNldCB0byB0aGUKLSAgICAgICAgLy8gbnVtYmVyIG9mIHN1Ym9iamVjdHMuCi0gICAgICAgIHZp
cnR1YWwgYm9vbCBpc0RvbmUoaW50KiBsZW5ndGgpID0gMDsKLQotICAgICAgICAvLyBBZHZhbmNl
cyB0byB0aGUgbmV4dCBzdWJvYmplY3QuCi0gICAgICAgIC8vIFJlcXVpcmVzOiAhdGhpcy0+aXNE
b25lKCkuCi0gICAgICAgIHZpcnR1YWwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gYWR2YW5jZSgpID0g
MDsKKyAgICAgICAgLy8gU2VyaWFsaXplcyAoYSBwYXJ0IG9mKSB0aGUgY3VycmVudCBjb21wb3Np
dGUgYW5kIHJldHVybnMKKyAgICAgICAgLy8gdGhlIG5leHQgc3RhdGUgdG8gcHJvY2VzcyBvciBu
dWxsIHdoZW4gdGhpcyBpcyB0aGUgZmluYWwKKyAgICAgICAgLy8gc3RhdGUuCisgICAgICAgIHZp
cnR1YWwgU3RhdGVCYXNlKiBhZHZhbmNlKFNlcmlhbGl6ZXImKSA9IDA7CiAKICAgICBwcm90ZWN0
ZWQ6Ci0gICAgICAgIFN0YXRlQmFzZSh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY29tcG9zaXRlKQot
ICAgICAgICAgICAgOiBtX25leHQoMCkKLSAgICAgICAgICAgICwgbV9jb21wb3NpdGUoY29tcG9z
aXRlKQorICAgICAgICBTdGF0ZUJhc2Uodjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNvbXBvc2l0ZSwg
U3RhdGVCYXNlKiBuZXh0KQorICAgICAgICAgICAgOiBtX2NvbXBvc2l0ZShjb21wb3NpdGUpCisg
ICAgICAgICAgICAsIG1fbmV4dChuZXh0KQogICAgICAgICB7CiAgICAgICAgIH0KIAogICAgIHBy
aXZhdGU6Ci0gICAgICAgIFN0YXRlQmFzZSogbV9uZXh0OwogICAgICAgICB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gbV9jb21wb3NpdGU7CisgICAgICAgIFN0YXRlQmFzZSogbV9uZXh0OwogICAgIH07
CiAKLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgU2VyaWFsaXphdGlvblRhZyBjb21wb3NpdGVU
YWc+Ci0gICAgY2xhc3MgU3RhdGUgOiBwdWJsaWMgU3RhdGVCYXNlIHsKKyAgICAvLyBEdW1teSBz
dGF0ZSB0aGF0IGlzIHVzZWQgdG8gc2lnbmFsIHNlcmlhbGl6YXRpb24gZXJyb3JzLgorICAgIGNs
YXNzIEVycm9yU3RhdGUgOiBwdWJsaWMgU3RhdGVCYXNlIHsKICAgICBwdWJsaWM6Ci0gICAgICAg
IHY4OjpIYW5kbGU8VD4gY29tcG9zaXRlKCkgeyByZXR1cm4gaGFuZGxlQ2FzdDxUPihTdGF0ZUJh
c2U6OmNvbXBvc2l0ZSgpKTsgfQorICAgICAgICBFcnJvclN0YXRlKCkKKyAgICAgICAgICAgIDog
U3RhdGVCYXNlKHY4OjpIYW5kbGU8djg6OlZhbHVlPigpLCAwKQorICAgICAgICB7CisgICAgICAg
IH0KKworICAgICAgICB2aXJ0dWFsIFN0YXRlQmFzZSogYWR2YW5jZShTZXJpYWxpemVyJikKKyAg
ICAgICAgeworICAgICAgICAgICAgZGVsZXRlIHRoaXM7CisgICAgICAgICAgICByZXR1cm4gMDsK
KyAgICAgICAgfQorICAgIH07CiAKLSAgICAgICAgdmlydHVhbCBTZXJpYWxpemF0aW9uVGFnIHRh
ZygpIGNvbnN0IHsgcmV0dXJuIGNvbXBvc2l0ZVRhZzsgfQorICAgIHRlbXBsYXRlIDx0eXBlbmFt
ZSBUPgorICAgIGNsYXNzIFN0YXRlIDogcHVibGljIFN0YXRlQmFzZSB7CisgICAgcHVibGljOgor
ICAgICAgICB2ODo6SGFuZGxlPFQ+IGNvbXBvc2l0ZSgpIHsgcmV0dXJuIHY4OjpIYW5kbGU8VD46
OkNhc3QoU3RhdGVCYXNlOjpjb21wb3NpdGUoKSk7IH0KIAogICAgIHByb3RlY3RlZDoKLSAgICAg
ICAgZXhwbGljaXQgU3RhdGUodjg6OkhhbmRsZTxUPiBjb21wb3NpdGUpIDogU3RhdGVCYXNlKGNv
bXBvc2l0ZSkKKyAgICAgICAgU3RhdGUodjg6OkhhbmRsZTxUPiBjb21wb3NpdGUsIFN0YXRlQmFz
ZSogbmV4dCkKKyAgICAgICAgICAgIDogU3RhdGVCYXNlKGNvbXBvc2l0ZSwgbmV4dCkKICAgICAg
ICAgewogICAgICAgICB9CiAgICAgfTsKIAotICAgIC8vIEhlbHBlciB0byBjbGVhbiB1cCB0aGUg
c3RhdGUgc3RhY2sgaW4gY2FzZSBvZiBlcnJvcnMuCi0gICAgY2xhc3MgU3RhY2tDbGVhbmVyIDog
Tm9uY29weWFibGUgeworI2lmIDAKKyAgICAvLyBDdXJyZW50bHkgdW51c2VkLCBzZWUgY29tbWVu
dCBpbiBuZXdBcnJheVN0YXRlLgorICAgIGNsYXNzIEFycmF5U3RhdGUgOiBwdWJsaWMgU3RhdGU8
djg6OkFycmF5PiB7CiAgICAgcHVibGljOgotICAgICAgICBleHBsaWNpdCBTdGFja0NsZWFuZXIo
U3RhdGVCYXNlKiogc3RhY2spIDogbV9zdGFjayhzdGFjaykKKyAgICAgICAgQXJyYXlTdGF0ZSh2
ODo6SGFuZGxlPHY4OjpBcnJheT4gYXJyYXksIFN0YXRlQmFzZSogbmV4dCkKKyAgICAgICAgICAg
IDogU3RhdGU8djg6OkFycmF5PihhcnJheSwgbmV4dCkKKyAgICAgICAgICAgICwgbV9pbmRleCgt
MSkKICAgICAgICAgewogICAgICAgICB9CiAKLSAgICAgICAgflN0YWNrQ2xlYW5lcigpCisgICAg
ICAgIHZpcnR1YWwgU3RhdGVCYXNlKiBhZHZhbmNlKFNlcmlhbGl6ZXImIHNlcmlhbGl6ZXIpCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIFN0YXRlQmFzZSogc3RhdGUgPSAqbV9zdGFjazsKLSAgICAg
ICAgICAgIHdoaWxlIChzdGF0ZSkgewotICAgICAgICAgICAgICAgIFN0YXRlQmFzZSogdG1wID0g
c3RhdGUtPm5leHRTdGF0ZSgpOwotICAgICAgICAgICAgICAgIGRlbGV0ZSBzdGF0ZTsKLSAgICAg
ICAgICAgICAgICBzdGF0ZSA9IHRtcDsKKyAgICAgICAgICAgICsrbV9pbmRleDsKKyAgICAgICAg
ICAgIGZvciAoOyBtX2luZGV4IDwgY29tcG9zaXRlKCktPkxlbmd0aCgpOyArK21faW5kZXgpIHsK
KyAgICAgICAgICAgICAgICBpZiAoU3RhdGVCYXNlKiBuZXdTdGF0ZSA9IHNlcmlhbGl6ZXIuZG9T
ZXJpYWxpemUoY29tcG9zaXRlKCktPkdldChtX2luZGV4KSwgdGhpcykpCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBuZXdTdGF0ZTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICptX3N0
YWNrID0gMDsKKyAgICAgICAgICAgIHJldHVybiBzZXJpYWxpemVyLndyaXRlQXJyYXkoY29tcG9z
aXRlKCktPkxlbmd0aCgpLCB0aGlzKTsKICAgICAgICAgfQogCiAgICAgcHJpdmF0ZToKLSAgICAg
ICAgU3RhdGVCYXNlKiogbV9zdGFjazsKKyAgICAgICAgdW5zaWduZWQgbV9pbmRleDsKICAgICB9
OworI2VuZGlmCiAKLSAgICBjbGFzcyBBcnJheVN0YXRlIDogcHVibGljIFN0YXRlPHY4OjpBcnJh
eSwgQXJyYXlUYWc+IHsKKyAgICBjbGFzcyBBYnN0cmFjdE9iamVjdFN0YXRlIDogcHVibGljIFN0
YXRlPHY4OjpPYmplY3Q+IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIEFycmF5U3RhdGUodjg6Okhh
bmRsZTx2ODo6QXJyYXk+IGFycmF5KQotICAgICAgICAgICAgOiBTdGF0ZTx2ODo6QXJyYXksIEFy
cmF5VGFnPihhcnJheSkKLSAgICAgICAgICAgICwgbV9pbmRleCgwKQorICAgICAgICBBYnN0cmFj
dE9iamVjdFN0YXRlKHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gb2JqZWN0LCBTdGF0ZUJhc2UqIG5l
eHQpCisgICAgICAgICAgICA6IFN0YXRlPHY4OjpPYmplY3Q+KG9iamVjdCwgbmV4dCkKKyAgICAg
ICAgICAgICwgbV9wcm9wZXJ0eU5hbWVzKG9iamVjdC0+R2V0UHJvcGVydHlOYW1lcygpKQorICAg
ICAgICAgICAgLCBtX2luZGV4KC0xKQorICAgICAgICAgICAgLCBtX25hbWVEb25lKGZhbHNlKQog
ICAgICAgICB7CiAgICAgICAgIH0KIAotICAgICAgICB2aXJ0dWFsIGJvb2wgaXNEb25lKGludCog
bGVuZ3RoKQorICAgICAgICB2aXJ0dWFsIFN0YXRlQmFzZSogYWR2YW5jZShTZXJpYWxpemVyJiBz
ZXJpYWxpemVyKQogICAgICAgICB7Ci0gICAgICAgICAgICAqbGVuZ3RoID0gY29tcG9zaXRlKCkt
Pkxlbmd0aCgpOwotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4obV9pbmRleCkg
Pj0gKmxlbmd0aDsKKyAgICAgICAgICAgICsrbV9pbmRleDsKKyAgICAgICAgICAgIGZvciAoOyBt
X2luZGV4IDwgbV9wcm9wZXJ0eU5hbWVzLT5MZW5ndGgoKTsgKyttX2luZGV4KSB7CisgICAgICAg
ICAgICAgICAgaWYgKG1fcHJvcGVydHlOYW1lLklzRW1wdHkoKSkgeworICAgICAgICAgICAgICAg
ICAgICB2ODo6TG9jYWw8djg6OlZhbHVlPiBwcm9wZXJ0eU5hbWUgPSBtX3Byb3BlcnR5TmFtZXMt
PkdldChtX2luZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKChwcm9wZXJ0eU5hbWUtPklz
U3RyaW5nKCkgJiYgY29tcG9zaXRlKCktPkhhc1JlYWxOYW1lZFByb3BlcnR5KHByb3BlcnR5TmFt
ZS5Bczx2ODo6U3RyaW5nPigpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHx8IChwcm9wZXJ0
eU5hbWUtPklzVWludDMyKCkgJiYgY29tcG9zaXRlKCktPkhhc1JlYWxJbmRleGVkUHJvcGVydHko
cHJvcGVydHlOYW1lLT5VaW50MzJWYWx1ZSgpKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IG1fcHJvcGVydHlOYW1lID0gcHJvcGVydHlOYW1lOworICAgICAgICAgICAgICAgICAgICB9IGVs
c2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBBU1NFUlQoIW1fcHJvcGVydHlOYW1lLklzRW1wdHkoKSk7CisgICAg
ICAgICAgICAgICAgaWYgKCFtX25hbWVEb25lKSB7CisgICAgICAgICAgICAgICAgICAgIG1fbmFt
ZURvbmUgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBpZiAoU3RhdGVCYXNlKiBuZXdTdGF0
ZSA9IHNlcmlhbGl6ZXIuZG9TZXJpYWxpemUobV9wcm9wZXJ0eU5hbWUsIHRoaXMpKQorICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ld1N0YXRlOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSA9IGNvbXBvc2l0ZSgpLT5H
ZXQobV9wcm9wZXJ0eU5hbWUpOworICAgICAgICAgICAgICAgIG1fbmFtZURvbmUgPSBmYWxzZTsK
KyAgICAgICAgICAgICAgICBtX3Byb3BlcnR5TmFtZS5DbGVhcigpOworICAgICAgICAgICAgICAg
IGlmIChTdGF0ZUJhc2UqIG5ld1N0YXRlID0gc2VyaWFsaXplci5kb1NlcmlhbGl6ZSh2YWx1ZSwg
dGhpcykpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXdTdGF0ZTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIHJldHVybiBvYmplY3REb25lKG1faW5kZXgsIHNlcmlhbGl6ZXIpOwog
ICAgICAgICB9CiAKLSAgICAgICAgdmlydHVhbCB2ODo6TG9jYWw8djg6OlZhbHVlPiBhZHZhbmNl
KCkKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKG1faW5kZXggPCBjb21wb3NpdGUoKS0+
TGVuZ3RoKCkpOwotICAgICAgICAgICAgdjg6OkhhbmRsZVNjb3BlIHNjb3BlOwotICAgICAgICAg
ICAgcmV0dXJuIHNjb3BlLkNsb3NlKGNvbXBvc2l0ZSgpLT5HZXQodjg6OkludGVnZXI6Ok5ldyht
X2luZGV4KyspKSk7Ci0gICAgICAgIH0KKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIHZpcnR1YWwg
U3RhdGVCYXNlKiBvYmplY3REb25lKHVuc2lnbmVkIG51bVByb3BlcnRpZXMsIFNlcmlhbGl6ZXIm
KSA9IDA7CiAKICAgICBwcml2YXRlOgorICAgICAgICB2ODo6TG9jYWw8djg6OkFycmF5PiBtX3By
b3BlcnR5TmFtZXM7CisgICAgICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+IG1fcHJvcGVydHlOYW1l
OwogICAgICAgICB1bnNpZ25lZCBtX2luZGV4OworICAgICAgICBib29sIG1fbmFtZURvbmU7CiAg
ICAgfTsKIAotICAgIGNsYXNzIE9iamVjdFN0YXRlIDogcHVibGljIFN0YXRlPHY4OjpPYmplY3Qs
IE9iamVjdFRhZz4geworICAgIGNsYXNzIE9iamVjdFN0YXRlIDogcHVibGljIEFic3RyYWN0T2Jq
ZWN0U3RhdGUgewogICAgIHB1YmxpYzoKLSAgICAgICAgT2JqZWN0U3RhdGUodjg6OkhhbmRsZTx2
ODo6T2JqZWN0PiBvYmplY3QpCi0gICAgICAgICAgICA6IFN0YXRlPHY4OjpPYmplY3QsIE9iamVj
dFRhZz4ob2JqZWN0KQotICAgICAgICAgICAgLCBtX3Byb3BlcnR5TmFtZXMob2JqZWN0LT5HZXRQ
cm9wZXJ0eU5hbWVzKCkpCi0gICAgICAgICAgICAsIG1faW5kZXgoLTEpCi0gICAgICAgICAgICAs
IG1fbGVuZ3RoKDApCisgICAgICAgIE9iamVjdFN0YXRlKHY4OjpIYW5kbGU8djg6Ok9iamVjdD4g
b2JqZWN0LCBTdGF0ZUJhc2UqIG5leHQpCisgICAgICAgICAgICA6IEFic3RyYWN0T2JqZWN0U3Rh
dGUob2JqZWN0LCBuZXh0KQogICAgICAgICB7Ci0gICAgICAgICAgICBuZXh0UHJvcGVydHkoKTsK
ICAgICAgICAgfQogCi0gICAgICAgIHZpcnR1YWwgYm9vbCBpc0RvbmUoaW50KiBsZW5ndGgpCisg
ICAgcHJvdGVjdGVkOgorICAgICAgICB2aXJ0dWFsIFN0YXRlQmFzZSogb2JqZWN0RG9uZSh1bnNp
Z25lZCBudW1Qcm9wZXJ0aWVzLCBTZXJpYWxpemVyJiBzZXJpYWxpemVyKQogICAgICAgICB7Ci0g
ICAgICAgICAgICAqbGVuZ3RoID0gbV9sZW5ndGg7Ci0gICAgICAgICAgICByZXR1cm4gbV9pbmRl
eCA+PSAyICogbV9wcm9wZXJ0eU5hbWVzLT5MZW5ndGgoKTsKKyAgICAgICAgICAgIHJldHVybiBz
ZXJpYWxpemVyLndyaXRlT2JqZWN0KG51bVByb3BlcnRpZXMsIHRoaXMpOwogICAgICAgICB9Cisg
ICAgfTsKIAotICAgICAgICB2aXJ0dWFsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IGFkdmFuY2UoKQor
ICAgIGNsYXNzIFNwYXJzZUFycmF5U3RhdGUgOiBwdWJsaWMgQWJzdHJhY3RPYmplY3RTdGF0ZSB7
CisgICAgcHVibGljOgorICAgICAgICBTcGFyc2VBcnJheVN0YXRlKHY4OjpIYW5kbGU8djg6OkFy
cmF5PiBhcnJheSwgU3RhdGVCYXNlKiBuZXh0KQorICAgICAgICAgICAgOiBBYnN0cmFjdE9iamVj
dFN0YXRlKGFycmF5LCBuZXh0KQogICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQobV9pbmRl
eCA8IDIgKiBtX3Byb3BlcnR5TmFtZXMtPkxlbmd0aCgpKTsKLSAgICAgICAgICAgIGlmICghKG1f
aW5kZXggJSAyKSkgewotICAgICAgICAgICAgICAgICsrbV9pbmRleDsKLSAgICAgICAgICAgICAg
ICByZXR1cm4gbV9wcm9wZXJ0eU5hbWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB2ODo6
TG9jYWw8djg6OlZhbHVlPiByZXN1bHQgPSBjb21wb3NpdGUoKS0+R2V0KG1fcHJvcGVydHlOYW1l
KTsKLSAgICAgICAgICAgIG5leHRQcm9wZXJ0eSgpOwotICAgICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKICAgICAgICAgfQogCi0gICAgcHJpdmF0ZToKLSAgICAgICAgdm9pZCBuZXh0UHJvcGVydHko
KQorICAgIHByb3RlY3RlZDoKKyAgICAgICAgdmlydHVhbCBTdGF0ZUJhc2UqIG9iamVjdERvbmUo
dW5zaWduZWQgbnVtUHJvcGVydGllcywgU2VyaWFsaXplciYgc2VyaWFsaXplcikKICAgICAgICAg
ewotICAgICAgICAgICAgdjg6OkhhbmRsZVNjb3BlIHNjb3BlOwotICAgICAgICAgICAgKyttX2lu
ZGV4OwotICAgICAgICAgICAgQVNTRVJUKCEobV9pbmRleCAlIDIpKTsKLSAgICAgICAgICAgIGZv
ciAoOyBtX2luZGV4IDwgMiAqIG1fcHJvcGVydHlOYW1lcy0+TGVuZ3RoKCk7IG1faW5kZXggKz0g
MikgewotICAgICAgICAgICAgICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHByb3BlcnR5TmFtZSA9
IG1fcHJvcGVydHlOYW1lcy0+R2V0KHY4OjpJbnRlZ2VyOjpOZXcobV9pbmRleCAvIDIpKTsKLSAg
ICAgICAgICAgICAgICBpZiAoKHByb3BlcnR5TmFtZS0+SXNTdHJpbmcoKSAmJiBjb21wb3NpdGUo
KS0+SGFzUmVhbE5hbWVkUHJvcGVydHkoaGFuZGxlQ2FzdDx2ODo6U3RyaW5nPihwcm9wZXJ0eU5h
bWUpKSkKLSAgICAgICAgICAgICAgICAgICAgfHwgKHByb3BlcnR5TmFtZS0+SXNJbnQzMigpICYm
IGNvbXBvc2l0ZSgpLT5IYXNSZWFsSW5kZXhlZFByb3BlcnR5KHByb3BlcnR5TmFtZS0+VWludDMy
VmFsdWUoKSkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fcHJvcGVydHlOYW1lID0gc2NvcGUu
Q2xvc2UocHJvcGVydHlOYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgbV9sZW5ndGggKz0gMjsK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIHJldHVybiBzZXJpYWxpemVyLndyaXRlU3BhcnNlQXJyYXkobnVt
UHJvcGVydGllcywgY29tcG9zaXRlKCkuQXM8djg6OkFycmF5PigpLT5MZW5ndGgoKSwgdGhpcyk7
CiAgICAgICAgIH0KLQotICAgICAgICB2ODo6TG9jYWw8djg6OkFycmF5PiBtX3Byb3BlcnR5TmFt
ZXM7Ci0gICAgICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+IG1fcHJvcGVydHlOYW1lOwotICAgICAg
ICB1bnNpZ25lZCBtX2luZGV4OwotICAgICAgICB1bnNpZ25lZCBtX2xlbmd0aDsKICAgICB9Owog
Ci0gICAgYm9vbCBkb1NlcmlhbGl6ZSh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUpCi0gICAg
ewotICAgICAgICBpZiAodmFsdWUtPklzVW5kZWZpbmVkKCkpCi0gICAgICAgICAgICBtX3dyaXRl
ci53cml0ZVVuZGVmaW5lZCgpOwotICAgICAgICBlbHNlIGlmICh2YWx1ZS0+SXNOdWxsKCkpCi0g
ICAgICAgICAgICBtX3dyaXRlci53cml0ZU51bGwoKTsKLSAgICAgICAgZWxzZSBpZiAodmFsdWUt
PklzVHJ1ZSgpKQotICAgICAgICAgICAgbV93cml0ZXIud3JpdGVUcnVlKCk7Ci0gICAgICAgIGVs
c2UgaWYgKHZhbHVlLT5Jc0ZhbHNlKCkpCi0gICAgICAgICAgICBtX3dyaXRlci53cml0ZUZhbHNl
KCk7Ci0gICAgICAgIGVsc2UgaWYgKHZhbHVlLT5Jc0ludDMyKCkpCi0gICAgICAgICAgICBtX3dy
aXRlci53cml0ZUludDMyKHZhbHVlLT5JbnQzMlZhbHVlKCkpOwotICAgICAgICBlbHNlIGlmICh2
YWx1ZS0+SXNOdW1iZXIoKSkKLSAgICAgICAgICAgIG1fd3JpdGVyLndyaXRlTnVtYmVyKGhhbmRs
ZUNhc3Q8djg6Ok51bWJlcj4odmFsdWUpLT5WYWx1ZSgpKTsKLSAgICAgICAgZWxzZSBpZiAodmFs
dWUtPklzU3RyaW5nKCkpIHsKLSAgICAgICAgICAgIHY4OjpTdHJpbmc6OlV0ZjhWYWx1ZSBzdHJp
bmdWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgICAgICBtX3dyaXRlci53cml0ZVN0cmluZygqc3RyaW5n
VmFsdWUsIHN0cmluZ1ZhbHVlLmxlbmd0aCgpKTsKLSAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS0+
SXNBcnJheSgpKSB7Ci0gICAgICAgICAgICBpZiAoIWNoZWNrQ29tcG9zaXRlKHZhbHVlKSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBwdXNoKG5ldyBBcnJheVN0
YXRlKGhhbmRsZUNhc3Q8djg6OkFycmF5Pih2YWx1ZSkpKTsKLSAgICAgICAgfSBlbHNlIGlmICh2
YWx1ZS0+SXNPYmplY3QoKSkgewotICAgICAgICAgICAgaWYgKCFjaGVja0NvbXBvc2l0ZSh2YWx1
ZSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgcHVzaChuZXcg
T2JqZWN0U3RhdGUoaGFuZGxlQ2FzdDx2ODo6T2JqZWN0Pih2YWx1ZSkpKTsKLSAgICAgICAgICAg
IC8vIEZJWE1FOgotICAgICAgICAgICAgLy8gLSBjaGVjayBub3QgYSB3cmFwcGVyCi0gICAgICAg
ICAgICAvLyAtIHN1cHBvcnQgRmlsZSwgSW1hZ2VEYXRhLCBldGMuCi0gICAgICAgIH0KLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgdm9pZCBwdXNoKFN0YXRlQmFzZSogc3RhdGUp
CisgICAgU3RhdGVCYXNlKiBwdXNoKFN0YXRlQmFzZSogc3RhdGUpCiAgICAgewotICAgICAgICBz
dGF0ZS0+c2V0TmV4dFN0YXRlKG1fc3RhdGUpOwotICAgICAgICBtX3N0YXRlID0gc3RhdGU7Cisg
ICAgICAgIEFTU0VSVChzdGF0ZSk7CiAgICAgICAgICsrbV9kZXB0aDsKKyAgICAgICAgcmV0dXJu
IGNoZWNrQ29tcG9zaXRlKHN0YXRlKSA/IHN0YXRlIDogaGFuZGxlRXJyb3Ioc3RhdGUpOwogICAg
IH0KIAotICAgIFN0YXRlQmFzZSogdG9wKCkgeyByZXR1cm4gbV9zdGF0ZTsgfQotCi0gICAgdm9p
ZCBwb3AoKQorICAgIFN0YXRlQmFzZSogcG9wKFN0YXRlQmFzZSogc3RhdGUpCiAgICAgewotICAg
ICAgICBpZiAoIW1fc3RhdGUpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIFN0YXRlQmFz
ZSogdG9wID0gbV9zdGF0ZTsKLSAgICAgICAgbV9zdGF0ZSA9IHRvcC0+bmV4dFN0YXRlKCk7Ci0g
ICAgICAgIGRlbGV0ZSB0b3A7CisgICAgICAgIEFTU0VSVChzdGF0ZSk7CiAgICAgICAgIC0tbV9k
ZXB0aDsKKyAgICAgICAgU3RhdGVCYXNlKiBuZXh0ID0gc3RhdGUtPm5leHRTdGF0ZSgpOworICAg
ICAgICBkZWxldGUgc3RhdGU7CisgICAgICAgIHJldHVybiBuZXh0OworICAgIH0KKworICAgIFN0
YXRlQmFzZSogaGFuZGxlRXJyb3IoU3RhdGVCYXNlKiBzdGF0ZSkKKyAgICB7CisgICAgICAgIG1f
aGFzRXJyb3IgPSB0cnVlOworICAgICAgICB3aGlsZSAoc3RhdGUpIHsKKyAgICAgICAgICAgIFN0
YXRlQmFzZSogdG1wID0gc3RhdGUtPm5leHRTdGF0ZSgpOworICAgICAgICAgICAgZGVsZXRlIHRt
cDsKKyAgICAgICAgICAgIHN0YXRlID0gdG1wOworICAgICAgICB9CisgICAgICAgIHJldHVybiBu
ZXcgRXJyb3JTdGF0ZTsKICAgICB9CiAKLSAgICBib29sIGNoZWNrQ29tcG9zaXRlKHY4OjpIYW5k
bGU8djg6OlZhbHVlPiBjb21wb3NpdGUpCisgICAgYm9vbCBjaGVja0NvbXBvc2l0ZShTdGF0ZUJh
c2UqIHRvcCkKICAgICB7CisgICAgICAgIEFTU0VSVCh0b3ApOwogICAgICAgICBpZiAobV9kZXB0
aCA+IG1heERlcHRoKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBpZiAoIXNo
b3VsZENoZWNrRm9yQ3ljbGVzKG1fZGVwdGgpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgICAgIGZvciAoU3RhdGVCYXNlKiBzdGF0ZSA9IHRvcCgpOyBzdGF0ZTsgc3RhdGUgPSBzdGF0
ZS0+bmV4dFN0YXRlKCkpIHsKKyAgICAgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNvbXBvc2l0
ZSA9IHRvcC0+Y29tcG9zaXRlKCk7CisgICAgICAgIGZvciAoU3RhdGVCYXNlKiBzdGF0ZSA9IHRv
cC0+bmV4dFN0YXRlKCk7IHN0YXRlOyBzdGF0ZSA9IHN0YXRlLT5uZXh0U3RhdGUoKSkgewogICAg
ICAgICAgICAgaWYgKHN0YXRlLT5jb21wb3NpdGUoKSA9PSBjb21wb3NpdGUpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiB0cnVlOwogICAg
IH0KIAorICAgIHZvaWQgd3JpdGVTdHJpbmcodjg6OkhhbmRsZTx2ODo6VmFsdWU+IHZhbHVlKQor
ICAgIHsKKyAgICAgICAgdjg6OlN0cmluZzo6VXRmOFZhbHVlIHN0cmluZ1ZhbHVlKHZhbHVlKTsK
KyAgICAgICAgbV93cml0ZXIud3JpdGVTdHJpbmcoKnN0cmluZ1ZhbHVlLCBzdHJpbmdWYWx1ZS5s
ZW5ndGgoKSk7CisgICAgfQorCisgICAgdm9pZCB3cml0ZUltYWdlRGF0YSh2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gdmFsdWUpCisgICAgeworICAgICAgICBJbWFnZURhdGEqIGltYWdlRGF0YSA9IFY4
SW1hZ2VEYXRhOjp0b05hdGl2ZSh2YWx1ZS5Bczx2ODo6T2JqZWN0PigpKTsKKyAgICAgICAgaWYg
KCFpbWFnZURhdGEpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIFdURjo6Qnl0ZUFycmF5
KiBwaXhlbEFycmF5ID0gaW1hZ2VEYXRhLT5kYXRhKCktPmRhdGEoKTsKKyAgICAgICAgbV93cml0
ZXIud3JpdGVJbWFnZURhdGEoaW1hZ2VEYXRhLT53aWR0aCgpLCBpbWFnZURhdGEtPmhlaWdodCgp
LCBwaXhlbEFycmF5LT5kYXRhKCksIHBpeGVsQXJyYXktPmxlbmd0aCgpKTsKKyAgICB9CisKKyAg
ICBzdGF0aWMgU3RhdGVCYXNlKiBuZXdBcnJheVN0YXRlKHY4OjpIYW5kbGU8djg6OkFycmF5PiBh
cnJheSwgU3RhdGVCYXNlKiBuZXh0KQorICAgIHsKKyAgICAgICAgLy8gRklYTUU6IHVzZSBwbGFp
biBBcnJheSBzdGF0ZSB3aGVuIHdlIGNhbiBxdWlja2x5IGNoZWNrIHRoYXQKKyAgICAgICAgLy8g
YW4gYXJyYXkgaXMgbm90IHNwYXJzZSBhbmQgaGFzIG9ubHkgaW5kZXhlZCBwcm9wZXJ0aWVzLgor
ICAgICAgICByZXR1cm4gbmV3IFNwYXJzZUFycmF5U3RhdGUoYXJyYXksIG5leHQpOworICAgIH0K
KworICAgIHN0YXRpYyBTdGF0ZUJhc2UqIG5ld09iamVjdFN0YXRlKHY4OjpIYW5kbGU8djg6Ok9i
amVjdD4gb2JqZWN0LCBTdGF0ZUJhc2UqIG5leHQpCisgICAgeworICAgICAgICAvLyBGSVhNRToK
KyAgICAgICAgLy8gLSBjaGVjayBub3QgYSB3cmFwcGVyCisgICAgICAgIC8vIC0gc3VwcG9ydCBG
aWxlLCBldGMuCisgICAgICAgIHJldHVybiBuZXcgT2JqZWN0U3RhdGUob2JqZWN0LCBuZXh0KTsK
KyAgICB9CisKICAgICBXcml0ZXImIG1fd3JpdGVyOwotICAgIFN0YXRlQmFzZSogbV9zdGF0ZTsK
ICAgICBpbnQgbV9kZXB0aDsKKyAgICBib29sIG1faGFzRXJyb3I7Cit9OworCitTZXJpYWxpemVy
OjpTdGF0ZUJhc2UqIFNlcmlhbGl6ZXI6OmRvU2VyaWFsaXplKHY4OjpIYW5kbGU8djg6OlZhbHVl
PiB2YWx1ZSwgU3RhdGVCYXNlKiBuZXh0KQoreworICAgIGlmICh2YWx1ZS0+SXNVbmRlZmluZWQo
KSkKKyAgICAgICAgbV93cml0ZXIud3JpdGVVbmRlZmluZWQoKTsKKyAgICBlbHNlIGlmICh2YWx1
ZS0+SXNOdWxsKCkpCisgICAgICAgIG1fd3JpdGVyLndyaXRlTnVsbCgpOworICAgIGVsc2UgaWYg
KHZhbHVlLT5Jc1RydWUoKSkKKyAgICAgICAgbV93cml0ZXIud3JpdGVUcnVlKCk7CisgICAgZWxz
ZSBpZiAodmFsdWUtPklzRmFsc2UoKSkKKyAgICAgICAgbV93cml0ZXIud3JpdGVGYWxzZSgpOwor
ICAgIGVsc2UgaWYgKHZhbHVlLT5Jc0ludDMyKCkpCisgICAgICAgIG1fd3JpdGVyLndyaXRlSW50
MzIodmFsdWUtPkludDMyVmFsdWUoKSk7CisgICAgZWxzZSBpZiAodmFsdWUtPklzVWludDMyKCkp
CisgICAgICAgIG1fd3JpdGVyLndyaXRlVWludDMyKHZhbHVlLT5VaW50MzJWYWx1ZSgpKTsKKyAg
ICBlbHNlIGlmICh2YWx1ZS0+SXNEYXRlKCkpCisgICAgICAgIG1fd3JpdGVyLndyaXRlRGF0ZSh2
YWx1ZS0+TnVtYmVyVmFsdWUoKSk7CisgICAgZWxzZSBpZiAodmFsdWUtPklzTnVtYmVyKCkpCisg
ICAgICAgIG1fd3JpdGVyLndyaXRlTnVtYmVyKHZhbHVlLkFzPHY4OjpOdW1iZXI+KCktPlZhbHVl
KCkpOworICAgIGVsc2UgaWYgKHZhbHVlLT5Jc1N0cmluZygpKQorICAgICAgICB3cml0ZVN0cmlu
Zyh2YWx1ZSk7CisgICAgZWxzZSBpZiAodmFsdWUtPklzQXJyYXkoKSkKKyAgICAgICAgcmV0dXJu
IHB1c2gobmV3QXJyYXlTdGF0ZSh2YWx1ZS5Bczx2ODo6QXJyYXk+KCksIG5leHQpKTsKKyAgICBl
bHNlIGlmIChWOEltYWdlRGF0YTo6SGFzSW5zdGFuY2UodmFsdWUpKQorICAgICAgICB3cml0ZUlt
YWdlRGF0YSh2YWx1ZSk7CisgICAgZWxzZSBpZiAodmFsdWUtPklzT2JqZWN0KCkpCisgICAgICAg
IHJldHVybiBwdXNoKG5ld09iamVjdFN0YXRlKHZhbHVlLkFzPHY4OjpPYmplY3Q+KCksIG5leHQp
KTsKKyAgICByZXR1cm4gMDsKK30KKworLy8gSW50ZXJmYWNlIHVzZWQgYnkgUmVhZGVyIHRvIGNy
ZWF0ZSBvYmplY3RzIG9mIGNvbXBvc2l0ZSB0eXBlcy4KK2NsYXNzIENvbXBvc2l0ZUNyZWF0b3Ig
eworcHVibGljOgorICAgIHZpcnR1YWwgfkNvbXBvc2l0ZUNyZWF0b3IoKSB7IH0KKworICAgIHZp
cnR1YWwgYm9vbCBjcmVhdGVBcnJheSh1aW50MzJfdCBsZW5ndGgsIHY4OjpIYW5kbGU8djg6OlZh
bHVlPiogdmFsdWUpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgY3JlYXRlT2JqZWN0KHVpbnQzMl90
IG51bVByb3BlcnRpZXMsIHY4OjpIYW5kbGU8djg6OlZhbHVlPiogdmFsdWUpID0gMDsKKyAgICB2
aXJ0dWFsIGJvb2wgY3JlYXRlU3BhcnNlQXJyYXkodWludDMyX3QgbnVtUHJvcGVydGllcywgdWlu
dDMyX3QgbGVuZ3RoLCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4qIHZhbHVlKSA9IDA7CiB9OwogCiAv
LyBSZWFkZXIgaXMgcmVzcG9uc2libGUgZm9yIGRlc2VyaWFsaXppbmcgcHJpbWl0aXZlIHR5cGVz
IGFuZAogLy8gcmVzdG9yaW5nIGluZm9ybWF0aW9uIGFib3V0IHNhdmVkIG9iamVjdHMgb2YgY29t
cG9zaXRlIHR5cGVzLgogY2xhc3MgUmVhZGVyIHsKIHB1YmxpYzoKLSAgICBSZWFkZXIoY29uc3Qg
Y2hhciogYnVmZmVyLCBpbnQgbGVuZ3RoKQorICAgIFJlYWRlcihjb25zdCB1aW50OF90KiBidWZm
ZXIsIGludCBsZW5ndGgpCiAgICAgICAgIDogbV9idWZmZXIoYnVmZmVyKQogICAgICAgICAsIG1f
bGVuZ3RoKGxlbmd0aCkKICAgICAgICAgLCBtX3Bvc2l0aW9uKDApCkBAIC00NzgsMTYgKzU4Miwx
NiBAQCBwdWJsaWM6CiAKICAgICBib29sIGlzRW9mKCkgY29uc3QgeyByZXR1cm4gbV9wb3NpdGlv
biA+PSBtX2xlbmd0aDsgfQogCi0gICAgYm9vbCByZWFkKFNlcmlhbGl6YXRpb25UYWcqIHRhZywg
djg6OkhhbmRsZTx2ODo6VmFsdWU+KiB2YWx1ZSwgaW50KiBsZW5ndGgpCisgICAgYm9vbCByZWFk
KHY4OjpIYW5kbGU8djg6OlZhbHVlPiogdmFsdWUsIENvbXBvc2l0ZUNyZWF0b3ImIGNyZWF0b3Ip
CiAgICAgewotICAgICAgICB1aW50MzJfdCByYXdMZW5ndGg7Ci0gICAgICAgIGlmICghcmVhZFRh
Zyh0YWcpKQorICAgICAgICBTZXJpYWxpemF0aW9uVGFnIHRhZzsKKyAgICAgICAgaWYgKCFyZWFk
VGFnKCZ0YWcpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBzd2l0Y2ggKCp0
YWcpIHsKKyAgICAgICAgc3dpdGNoICh0YWcpIHsKICAgICAgICAgY2FzZSBJbnZhbGlkVGFnOgog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBjYXNlIFBhZGRpbmdUYWc6Ci0gICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICBjYXNlIFVu
ZGVmaW5lZFRhZzoKICAgICAgICAgICAgICp2YWx1ZSA9IHY4OjpVbmRlZmluZWQoKTsKICAgICAg
ICAgICAgIGJyZWFrOwpAQCAtNTA4LDE4ICs2MTIsNTMgQEAgcHVibGljOgogICAgICAgICAgICAg
aWYgKCFyZWFkSW50MzIodmFsdWUpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFVpbnQzMlRhZzoKKyAgICAgICAgICAgIGlm
ICghcmVhZFVpbnQzMih2YWx1ZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRGF0ZVRhZzoKKyAgICAgICAgICAgIGlmICgh
cmVhZERhdGUodmFsdWUpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICBjYXNlIE51bWJlclRhZzoKICAgICAgICAgICAgIGlmICghcmVh
ZE51bWJlcih2YWx1ZSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgT2JqZWN0VGFnOgotICAgICAgICBjYXNlIEFycmF5VGFn
OgotICAgICAgICAgICAgaWYgKCFkb1JlYWRVaW50MzIoJnJhd0xlbmd0aCkpCisgICAgICAgIGNh
c2UgSW1hZ2VEYXRhVGFnOgorICAgICAgICAgICAgaWYgKCFyZWFkSW1hZ2VEYXRhKHZhbHVlKSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBBcnJheVRhZzogeworICAgICAgICAgICAgdWludDMyX3QgbGVuZ3RoOworICAgICAg
ICAgICAgaWYgKCFkb1JlYWRVaW50MzIoJmxlbmd0aCkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgaWYgKCFjcmVhdG9yLmNyZWF0ZUFycmF5KGxlbmd0aCwgdmFs
dWUpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICpsZW5ndGgg
PSByYXdMZW5ndGg7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgY2FzZSBPYmplY3RUYWc6IHsKKyAgICAgICAgICAgIHVpbnQzMl90
IG51bVByb3BlcnRpZXM7CisgICAgICAgICAgICBpZiAoIWRvUmVhZFVpbnQzMigmbnVtUHJvcGVy
dGllcykpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgaWYgKCFj
cmVhdG9yLmNyZWF0ZU9iamVjdChudW1Qcm9wZXJ0aWVzLCB2YWx1ZSkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
Y2FzZSBTcGFyc2VBcnJheVRhZzogeworICAgICAgICAgICAgdWludDMyX3QgbnVtUHJvcGVydGll
czsKKyAgICAgICAgICAgIHVpbnQzMl90IGxlbmd0aDsKKyAgICAgICAgICAgIGlmICghZG9SZWFk
VWludDMyKCZudW1Qcm9wZXJ0aWVzKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgICBpZiAoIWRvUmVhZFVpbnQzMigmbGVuZ3RoKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBpZiAoIWNyZWF0b3IuY3JlYXRlU3BhcnNlQXJyYXko
bnVtUHJvcGVydGllcywgbGVuZ3RoLCB2YWx1ZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gIXZhbHVl
LT5Jc0VtcHR5KCk7CiAgICAgfQogCiBwcml2YXRlOgpAQCAtNTM4LDcgKzY3Nyw3IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGlmIChtX3Bvc2l0aW9uICsg
bGVuZ3RoID4gbV9sZW5ndGgpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICp2
YWx1ZSA9IHY4OjpTdHJpbmc6Ok5ldyhtX2J1ZmZlciArIG1fcG9zaXRpb24sIGxlbmd0aCk7Cisg
ICAgICAgICp2YWx1ZSA9IHY4OjpTdHJpbmc6Ok5ldyhyZWludGVycHJldF9jYXN0PGNvbnN0IGNo
YXIqPihtX2J1ZmZlciArIG1fcG9zaXRpb24pLCBsZW5ndGgpOwogICAgICAgICBtX3Bvc2l0aW9u
ICs9IGxlbmd0aDsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtNTUyLDIyICs2OTEs
NjAgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgYm9vbCBy
ZWFkTnVtYmVyKHY4OjpIYW5kbGU8djg6OlZhbHVlPiogdmFsdWUpCisgICAgYm9vbCByZWFkVWlu
dDMyKHY4OjpIYW5kbGU8djg6OlZhbHVlPiogdmFsdWUpCiAgICAgewotICAgICAgICBpZiAobV9w
b3NpdGlvbiArIHNpemVvZihkb3VibGUpID4gbV9sZW5ndGgpCisgICAgICAgIHVpbnQzMl90IHJh
d1ZhbHVlOworICAgICAgICBpZiAoIWRvUmVhZFVpbnQzMigmcmF3VmFsdWUpKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAqdmFsdWUgPSB2ODo6SW50ZWdlcjo6TmV3KHJhd1Zh
bHVlKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgYm9vbCByZWFkRGF0ZSh2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4qIHZhbHVlKQorICAgIHsKKyAgICAgICAgZG91YmxlIG51bWJl
clZhbHVlOworICAgICAgICBpZiAoIWRvUmVhZE51bWJlcigmbnVtYmVyVmFsdWUpKQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAqdmFsdWUgPSB2ODo6RGF0ZTo6TmV3KG51bWJl
clZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgYm9vbCByZWFkTnVt
YmVyKHY4OjpIYW5kbGU8djg6OlZhbHVlPiogdmFsdWUpCisgICAgewogICAgICAgICBkb3VibGUg
bnVtYmVyOwotICAgICAgICBjaGFyKiBudW1iZXJBc0J5dGVBcnJheSA9IHJlaW50ZXJwcmV0X2Nh
c3Q8Y2hhcio+KCZudW1iZXIpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6
ZW9mKGRvdWJsZSk7ICsraSkKLSAgICAgICAgICAgIG51bWJlckFzQnl0ZUFycmF5W2ldID0gbV9i
dWZmZXJbbV9wb3NpdGlvbisrXTsKKyAgICAgICAgaWYgKCFkb1JlYWROdW1iZXIoJm51bWJlcikp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICp2YWx1ZSA9IHY4OjpOdW1iZXI6
Ok5ldyhudW1iZXIpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKKyAgICBib29sIHJl
YWRJbWFnZURhdGEodjg6OkhhbmRsZTx2ODo6VmFsdWU+KiB2YWx1ZSkKKyAgICB7CisgICAgICAg
IHVpbnQzMl90IHdpZHRoOworICAgICAgICB1aW50MzJfdCBoZWlnaHQ7CisgICAgICAgIHVpbnQz
Ml90IHBpeGVsRGF0YUxlbmd0aDsKKyAgICAgICAgaWYgKCFkb1JlYWRVaW50MzIoJndpZHRoKSkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKCFkb1JlYWRVaW50MzIoJmhl
aWdodCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICghZG9SZWFkVWlu
dDMyKCZwaXhlbERhdGFMZW5ndGgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICBpZiAobV9wb3NpdGlvbiArIHBpeGVsRGF0YUxlbmd0aCA+IG1fbGVuZ3RoKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICBQYXNzUmVmUHRyPEltYWdlRGF0YT4gaW1hZ2VEYXRh
ID0gSW1hZ2VEYXRhOjpjcmVhdGUod2lkdGgsIGhlaWdodCk7CisgICAgICAgIFdURjo6Qnl0ZUFy
cmF5KiBwaXhlbEFycmF5ID0gaW1hZ2VEYXRhLT5kYXRhKCktPmRhdGEoKTsKKyAgICAgICAgQVNT
RVJUKHBpeGVsQXJyYXkpOworICAgICAgICBBU1NFUlQocGl4ZWxBcnJheS0+bGVuZ3RoKCkgPj0g
cGl4ZWxEYXRhTGVuZ3RoKTsKKyAgICAgICAgbWVtY3B5KHBpeGVsQXJyYXktPmRhdGEoKSwgbV9i
dWZmZXIgKyBtX3Bvc2l0aW9uLCBwaXhlbERhdGFMZW5ndGgpOworICAgICAgICBtX3Bvc2l0aW9u
ICs9IHBpeGVsRGF0YUxlbmd0aDsKKyAgICAgICAgKnZhbHVlID0gdG9WOChpbWFnZURhdGEpOwor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKICAgICBib29sIGRvUmVhZFVpbnQzMih1aW50
MzJfdCogdmFsdWUpCiAgICAgewogICAgICAgICAqdmFsdWUgPSAwOwotICAgICAgICBjaGFyIGN1
cnJlbnRCeXRlOworICAgICAgICB1aW50OF90IGN1cnJlbnRCeXRlOwogICAgICAgICBpbnQgc2hp
ZnQgPSAwOwogICAgICAgICBkbyB7CiAgICAgICAgICAgICBpZiAobV9wb3NpdGlvbiA+PSBtX2xl
bmd0aCkKQEAgLTU3OSwxNCArNzU2LDI1IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiB0cnVl
OwogICAgIH0KIAotICAgIGNvbnN0IGNoYXIqIG1fYnVmZmVyOworICAgIGJvb2wgZG9SZWFkTnVt
YmVyKGRvdWJsZSogbnVtYmVyKQorICAgIHsKKyAgICAgICAgaWYgKG1fcG9zaXRpb24gKyBzaXpl
b2YoZG91YmxlKSA+IG1fbGVuZ3RoKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB1aW50OF90KiBudW1iZXJBc0J5dGVBcnJheSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+
KG51bWJlcik7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplb2YoZG91Ymxl
KTsgKytpKQorICAgICAgICAgICAgbnVtYmVyQXNCeXRlQXJyYXlbaV0gPSBtX2J1ZmZlclttX3Bv
c2l0aW9uKytdOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBjb25zdCB1aW50
OF90KiBtX2J1ZmZlcjsKICAgICBjb25zdCB1bnNpZ25lZCBtX2xlbmd0aDsKICAgICB1bnNpZ25l
ZCBtX3Bvc2l0aW9uOwogfTsKIAotY2xhc3MgRGVzZXJpYWxpemVyIHsKK2NsYXNzIERlc2VyaWFs
aXplciA6IHB1YmxpYyBDb21wb3NpdGVDcmVhdG9yIHsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBE
ZXNlcmlhbGl6ZXIoUmVhZGVyJiByZWFkZXIpIDogbV9yZWFkZXIocmVhZGVyKQorICAgIGV4cGxp
Y2l0IERlc2VyaWFsaXplcihSZWFkZXImIHJlYWRlcikKKyAgICAgICAgOiBtX3JlYWRlcihyZWFk
ZXIpCiAgICAgewogICAgIH0KIApAQCAtNjAyLDQxICs3OTAsNjAgQEAgcHVibGljOgogICAgICAg
ICByZXR1cm4gc2NvcGUuQ2xvc2UoZWxlbWVudCgwKSk7CiAgICAgfQogCisgICAgdmlydHVhbCBi
b29sIGNyZWF0ZUFycmF5KHVpbnQzMl90IGxlbmd0aCwgdjg6OkhhbmRsZTx2ODo6VmFsdWU+KiB2
YWx1ZSkKKyAgICB7CisgICAgICAgIGlmIChsZW5ndGggPiBzdGFja0RlcHRoKCkpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHY4OjpMb2NhbDx2ODo6QXJyYXk+IGFycmF5ID0g
djg6OkFycmF5OjpOZXcobGVuZ3RoKTsKKyAgICAgICAgaWYgKGFycmF5LklzRW1wdHkoKSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgY29uc3QgaW50IGRlcHRoID0gc3RhY2tE
ZXB0aCgpIC0gbGVuZ3RoOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3Ro
OyArK2kpCisgICAgICAgICAgICBhcnJheS0+U2V0KGksIGVsZW1lbnQoZGVwdGggKyBpKSk7Cisg
ICAgICAgIHBvcChsZW5ndGgpOworICAgICAgICAqdmFsdWUgPSBhcnJheTsKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorCisgICAgdmlydHVhbCBib29sIGNyZWF0ZU9iamVjdCh1aW50MzJf
dCBudW1Qcm9wZXJ0aWVzLCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4qIHZhbHVlKQorICAgIHsKKyAg
ICAgICAgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IG9iamVjdCA9IHY4OjpPYmplY3Q6Ok5ldygpOwor
ICAgICAgICBpZiAob2JqZWN0LklzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgcmV0dXJuIGluaXRpYWxpemVPYmplY3Qob2JqZWN0LCBudW1Qcm9wZXJ0aWVzLCB2
YWx1ZSk7CisgICAgfQorCisgICAgdmlydHVhbCBib29sIGNyZWF0ZVNwYXJzZUFycmF5KHVpbnQz
Ml90IG51bVByb3BlcnRpZXMsIHVpbnQzMl90IGxlbmd0aCwgdjg6OkhhbmRsZTx2ODo6VmFsdWU+
KiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHY4OjpMb2NhbDx2ODo6QXJyYXk+IGFycmF5ID0gdjg6
OkFycmF5OjpOZXcobGVuZ3RoKTsKKyAgICAgICAgaWYgKGFycmF5LklzRW1wdHkoKSkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIGluaXRpYWxpemVPYmplY3QoYXJy
YXksIG51bVByb3BlcnRpZXMsIHZhbHVlKTsKKyAgICB9CisKIHByaXZhdGU6CisgICAgYm9vbCBp
bml0aWFsaXplT2JqZWN0KHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gb2JqZWN0LCB1aW50MzJfdCBu
dW1Qcm9wZXJ0aWVzLCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4qIHZhbHVlKQorICAgIHsKKyAgICAg
ICAgdW5zaWduZWQgbGVuZ3RoID0gMiAqIG51bVByb3BlcnRpZXM7CisgICAgICAgIGlmIChsZW5n
dGggPiBzdGFja0RlcHRoKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IHN0YWNrRGVwdGgoKSAtIGxlbmd0aDsgaSA8IHN0YWNrRGVwdGgoKTsg
aSArPSAyKSB7CisgICAgICAgICAgICB2ODo6TG9jYWw8djg6OlZhbHVlPiBwcm9wZXJ0eU5hbWUg
PSBlbGVtZW50KGkpOworICAgICAgICAgICAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gcHJvcGVydHlW
YWx1ZSA9IGVsZW1lbnQoaSArIDEpOworICAgICAgICAgICAgb2JqZWN0LT5TZXQocHJvcGVydHlO
YW1lLCBwcm9wZXJ0eVZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICBwb3AobGVuZ3RoKTsKKyAg
ICAgICAgKnZhbHVlID0gb2JqZWN0OworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKICAg
ICBib29sIGRvRGVzZXJpYWxpemUoKQogICAgIHsKLSAgICAgICAgU2VyaWFsaXphdGlvblRhZyB0
YWc7CiAgICAgICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlOwotICAgICAgICBpbnQgbGVu
Z3RoID0gMDsKLSAgICAgICAgaWYgKCFtX3JlYWRlci5yZWFkKCZ0YWcsICZ2YWx1ZSwgJmxlbmd0
aCkpCisgICAgICAgIGlmICghbV9yZWFkZXIucmVhZCgmdmFsdWUsICp0aGlzKSkKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKCF2YWx1ZS5Jc0VtcHR5KCkpIHsKKyAgICAg
ICAgaWYgKCF2YWx1ZS5Jc0VtcHR5KCkpCiAgICAgICAgICAgICBwdXNoKHZhbHVlKTsKLSAgICAg
ICAgfSBlbHNlIGlmICh0YWcgPT0gT2JqZWN0VGFnKSB7Ci0gICAgICAgICAgICBpZiAobGVuZ3Ro
ID4gc3RhY2tEZXB0aCgpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
ICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBvYmplY3QgPSB2ODo6T2JqZWN0OjpOZXcoKTsKLSAg
ICAgICAgICAgIGZvciAoaW50IGkgPSBzdGFja0RlcHRoKCkgLSBsZW5ndGg7IGkgPCBzdGFja0Rl
cHRoKCk7IGkgKz0gMikgewotICAgICAgICAgICAgICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHBy
b3BlcnR5TmFtZSA9IGVsZW1lbnQoaSk7Ci0gICAgICAgICAgICAgICAgdjg6OkxvY2FsPHY4OjpW
YWx1ZT4gcHJvcGVydHlWYWx1ZSA9IGVsZW1lbnQoaSArIDEpOwotICAgICAgICAgICAgICAgIG9i
amVjdC0+U2V0KHByb3BlcnR5TmFtZSwgcHJvcGVydHlWYWx1ZSk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBwb3AobGVuZ3RoKTsKLSAgICAgICAgICAgIHB1c2gob2JqZWN0KTsKLSAgICAg
ICAgfSBlbHNlIGlmICh0YWcgPT0gQXJyYXlUYWcpIHsKLSAgICAgICAgICAgIGlmIChsZW5ndGgg
PiBzdGFja0RlcHRoKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAg
ICAgdjg6OkxvY2FsPHY4OjpBcnJheT4gYXJyYXkgPSB2ODo6QXJyYXk6Ok5ldyhsZW5ndGgpOwot
ICAgICAgICAgICAgY29uc3QgaW50IGRlcHRoID0gc3RhY2tEZXB0aCgpIC0gbGVuZ3RoOwotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIHY4OjpIYW5kbGVTY29wZSBzY29wZTsKLSAgICAg
ICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQotICAgICAgICAgICAg
ICAgICAgICBhcnJheS0+U2V0KHY4OjpJbnRlZ2VyOjpOZXcoaSksIGVsZW1lbnQoZGVwdGggKyBp
KSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBwb3AobGVuZ3RoKTsKLSAgICAgICAgICAg
IHB1c2goYXJyYXkpOwotICAgICAgICB9IGVsc2UgaWYgKHRhZyAhPSBQYWRkaW5nVGFnKQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAg
LTY0OCw3ICs4NTUsNyBAQCBwcml2YXRlOgogICAgICAgICBtX3N0YWNrLnNocmluayhtX3N0YWNr
LnNpemUoKSAtIGxlbmd0aCk7CiAgICAgfQogCi0gICAgaW50IHN0YWNrRGVwdGgoKSBjb25zdCB7
IHJldHVybiBtX3N0YWNrLnNpemUoKTsgfQorICAgIHVuc2lnbmVkIHN0YWNrRGVwdGgoKSBjb25z
dCB7IHJldHVybiBtX3N0YWNrLnNpemUoKTsgfQogCiAgICAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4g
ZWxlbWVudCh1bnNpZ25lZCBpbmRleCkKICAgICB7CkBAIC02OTEsNyArODk4LDcgQEAgdjg6Okhh
bmRsZTx2ODo6VmFsdWU+IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6ZGVzZXJpYWxpemUoKQogICAg
IGlmICghbV9kYXRhLmltcGwoKSkKICAgICAgICAgcmV0dXJuIHY4OjpOdWxsKCk7CiAgICAgQ09N
UElMRV9BU1NFUlQoc2l6ZW9mKEJ1ZmZlclZhbHVlVHlwZSkgPT0gMiwgQnVmZmVyVmFsdWVUeXBl
SXNUd29CeXRlcyk7Ci0gICAgUmVhZGVyIHJlYWRlcihyZWludGVycHJldF9jYXN0PGNvbnN0IGNo
YXIqPihtX2RhdGEuaW1wbCgpLT5jaGFyYWN0ZXJzKCkpLCAyICogbV9kYXRhLmxlbmd0aCgpKTsK
KyAgICBSZWFkZXIgcmVhZGVyKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KG1fZGF0
YS5pbXBsKCktPmNoYXJhY3RlcnMoKSksIDIgKiBtX2RhdGEubGVuZ3RoKCkpOwogICAgIERlc2Vy
aWFsaXplciBkZXNlcmlhbGl6ZXIocmVhZGVyKTsKICAgICByZXR1cm4gZGVzZXJpYWxpemVyLmRl
c2VyaWFsaXplKCk7CiB9Cg==
</data>
<flag name="review"
          id="35971"
          type_id="1"
          status="+"
          setter="yurys"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>52539</attachid>
            <date>2010-04-05 09:47:38 -0700</date>
            <delta_ts>2010-04-06 06:32:46 -0700</delta_ts>
            <desc>patch v1.1: rebased</desc>
            <filename>serialize.patch</filename>
            <type>text/plain</type>
            <size>34480</size>
            <attacher name="Vitaly Repeshko">vitalyr</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MzYwMzg2MC4uYWFmNDlkYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw4NCBAQAorMjAxMC0wNC0wNCAgVml0YWx5IFJlcGVz
aGtvICA8dml0YWx5ckBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgWXVyeSBT
ZW1pa2hhdHNreS4KKworICAgICAgICBbVjhdIEV4dGVuZCB0aGUgc2V0IG9mIHR5cGVzIHN1cHBv
cnRlZCBieSBTZXJpYWxpemVkU2NyaXB0VmFsdWUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTM3MDUyCisKKyAgICAgICAgTmV3IHR5cGVzIGluY2x1ZGUg
c3BhcnNlIGFycmF5cywgVWludDMyLCBEYXRlLCBhbmQgSW1hZ2VEYXRhLgorCisgICAgICAgIFNl
cmlhbGl6YXRpb24gcHJvY2VzcyBiZWNhbWUgbW9yZSBmbGV4aWJsZS4gQSBzdGF0ZSBjYW4gZWl0
aGVyCisgICAgICAgIGRpcmVjdGx5IHdyaXRlIHByaW1pdGl2ZSB2YWx1ZXMgKGluc3RlYWQgb2Yg
cmV0dXJuaW5nIHRoZW0gbGlrZQorICAgICAgICBpdGVyYXRvcikgb3IgY29uc3RydWN0IGEgbmV3
IHN0YXRlIGZvciBzZXJpYWxpemluZyBjb21wbGV4IHZhbHVlcworICAgICAgICB0aGF0IHdpbGwg
cmV0dXJuIHRvIHRoZSBjdXJyZW50IHN0YXRlIHdoZW4gZG9uZS4KKworICAgICAgICBEZXNlcmlh
bGl6YXRpb24gcHJvY2VzcyBub3cgYXZvaWRzIGV4cG9zaW5nIHRoZSB0YWdzIHVzaW5nIGEgc2V0
CisgICAgICAgIG9mIGZhY3RvcnkgZnVuY3Rpb25zIGZvciBjb21wbGV4IG9iamVjdHMgaW5zdGVh
ZC4KKworICAgICAgICBJbnRlcm5hbCBidWZmZXIgdHlwZSBjaGFuZ2VkIHRvIHVpbnQ4X3QgdG8g
YmUgaW5kZXBlbmRlbnQgb2YKKyAgICAgICAgd2hldGhlciBjaGFyIGlzIHNpZ25lZCBvciBub3Qu
CisKKyAgICAgICAgKiBiaW5kaW5ncy92OC9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6KToKKyAgICAgICAgKFdlYkNvcmU6OldyaXRlcjo6V3JpdGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OldyaXRlcjo6d3JpdGVTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6
V3JpdGVyOjp3cml0ZVVpbnQzMik6CisgICAgICAgIChXZWJDb3JlOjpXcml0ZXI6OndyaXRlRGF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpXcml0ZXI6OndyaXRlTnVtYmVyKToKKyAgICAgICAgKFdl
YkNvcmU6OldyaXRlcjo6d3JpdGVJbWFnZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6V3JpdGVy
Ojp3cml0ZUFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6OldyaXRlcjo6d3JpdGVPYmplY3QpOgor
ICAgICAgICAoV2ViQ29yZTo6V3JpdGVyOjp3cml0ZVNwYXJzZUFycmF5KToKKyAgICAgICAgKFdl
YkNvcmU6OldyaXRlcjo6ZG9Xcml0ZVVpbnQzMik6CisgICAgICAgIChXZWJDb3JlOjpXcml0ZXI6
OmRvV3JpdGVOdW1iZXIpOgorICAgICAgICAoV2ViQ29yZTo6V3JpdGVyOjphcHBlbmQpOgorICAg
ICAgICAoV2ViQ29yZTo6V3JpdGVyOjpmaWxsSG9sZSk6CisgICAgICAgIChXZWJDb3JlOjpXcml0
ZXI6OmJ5dGVBdCk6CisgICAgICAgIChXZWJDb3JlOjpTZXJpYWxpemVyOjpTZXJpYWxpemVyKToK
KyAgICAgICAgKFdlYkNvcmU6OlNlcmlhbGl6ZXI6OnNlcmlhbGl6ZSk6CisgICAgICAgIChXZWJD
b3JlOjpTZXJpYWxpemVyOjp3cml0ZUFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6OlNlcmlhbGl6
ZXI6OndyaXRlT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNlcmlhbGl6ZXI6OndyaXRlU3Bh
cnNlQXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6U2VyaWFsaXplcjo6U3RhdGVCYXNlOjpTdGF0
ZUJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6U2VyaWFsaXplcjo6RXJyb3JTdGF0ZTo6RXJyb3JT
dGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTZXJpYWxpemVyOjpFcnJvclN0YXRlOjphZHZhbmNl
KToKKyAgICAgICAgKFdlYkNvcmU6OlNlcmlhbGl6ZXI6OlN0YXRlOjpjb21wb3NpdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6U2VyaWFsaXplcjo6U3RhdGU6OlN0YXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OlNlcmlhbGl6ZXI6OkFycmF5U3RhdGU6OkFycmF5U3RhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6U2VyaWFsaXplcjo6QXJyYXlTdGF0ZTo6YWR2YW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpT
ZXJpYWxpemVyOjpBYnN0cmFjdE9iamVjdFN0YXRlOjpBYnN0cmFjdE9iamVjdFN0YXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNlcmlhbGl6ZXI6OkFic3RyYWN0T2JqZWN0U3RhdGU6OmFkdmFuY2Up
OgorICAgICAgICAoV2ViQ29yZTo6U2VyaWFsaXplcjo6T2JqZWN0U3RhdGU6Ok9iamVjdFN0YXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OlNlcmlhbGl6ZXI6Ok9iamVjdFN0YXRlOjpvYmplY3REb25l
KToKKyAgICAgICAgKFdlYkNvcmU6OlNlcmlhbGl6ZXI6OlNwYXJzZUFycmF5U3RhdGU6OlNwYXJz
ZUFycmF5U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U2VyaWFsaXplcjo6U3BhcnNlQXJyYXlT
dGF0ZTo6b2JqZWN0RG9uZSk6CisgICAgICAgIChXZWJDb3JlOjpTZXJpYWxpemVyOjpwdXNoKToK
KyAgICAgICAgKFdlYkNvcmU6OlNlcmlhbGl6ZXI6OnBvcCk6CisgICAgICAgIChXZWJDb3JlOjpT
ZXJpYWxpemVyOjpoYW5kbGVFcnJvcik6CisgICAgICAgIChXZWJDb3JlOjpTZXJpYWxpemVyOjpj
aGVja0NvbXBvc2l0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTZXJpYWxpemVyOjp3cml0ZVN0cmlu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpTZXJpYWxpemVyOjp3cml0ZUltYWdlRGF0YSk6CisgICAg
ICAgIChXZWJDb3JlOjpTZXJpYWxpemVyOjpuZXdBcnJheVN0YXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OlNlcmlhbGl6ZXI6Om5ld09iamVjdFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNlcmlh
bGl6ZXI6OmRvU2VyaWFsaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWRlcjo6UmVhZGVyKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlYWRlcjo6cmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpSZWFk
ZXI6OnJlYWRTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVhZGVyOjpyZWFkVWludDMyKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlYWRlcjo6cmVhZERhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
UmVhZGVyOjpyZWFkTnVtYmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWRlcjo6cmVhZEltYWdl
RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpSZWFkZXI6OmRvUmVhZFVpbnQzMik6CisgICAgICAg
IChXZWJDb3JlOjpSZWFkZXI6OmRvUmVhZE51bWJlcik6CisgICAgICAgIChXZWJDb3JlOjpEZXNl
cmlhbGl6ZXI6OkRlc2VyaWFsaXplcik6CisgICAgICAgIChXZWJDb3JlOjpEZXNlcmlhbGl6ZXI6
OmNyZWF0ZUFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6OkRlc2VyaWFsaXplcjo6Y3JlYXRlT2Jq
ZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRlc2VyaWFsaXplcjo6Y3JlYXRlU3BhcnNlQXJyYXkp
OgorICAgICAgICAoV2ViQ29yZTo6RGVzZXJpYWxpemVyOjppbml0aWFsaXplT2JqZWN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkRlc2VyaWFsaXplcjo6ZG9EZXNlcmlhbGl6ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpEZXNlcmlhbGl6ZXI6OnN0YWNrRGVwdGgpOgorICAgICAgICAoV2ViQ29yZTo6U2Vy
aWFsaXplZFNjcmlwdFZhbHVlOjpkZXNlcmlhbGl6ZSk6CisKIDIwMTAtMDQtMDQgIFBhdmVsIEZl
bGRtYW4gIDxwZmVsZG1hbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgTm90IHJldmlld2VkLiBS
b2xsaW5nIG91dCBjaHJvbWl1bSBjaGFuZ2VzIHI1NzAyOCBhbmQgcjU3MDMyCmRpZmYgLS1naXQg
YS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAgYi9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKaW5kZXggNDY2NDVkNS4uN2Ji
YjM0YyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9TZXJpYWxpemVkU2NyaXB0VmFs
dWUuY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNw
cApAQCAtMzEsNyArMzEsMTEgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTZXJp
YWxpemVkU2NyaXB0VmFsdWUuaCIKIAorI2luY2x1ZGUgIkJ5dGVBcnJheS5oIgorI2luY2x1ZGUg
IkNhbnZhc1BpeGVsQXJyYXkuaCIKKyNpbmNsdWRlICJJbWFnZURhdGEuaCIKICNpbmNsdWRlICJT
aGFyZWRCdWZmZXIuaCIKKyNpbmNsdWRlICJWOEltYWdlRGF0YS5oIgogCiAjaW5jbHVkZSA8djgu
aD4KICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgpAQCAtNDAsNyArNDQsNiBAQAogCiAvLyBG
SVhNRToKIC8vIC0gY2F0Y2ggVjggZXhjZXB0aW9ucwotLy8gLSBiZSByZWFkeSB0byBnZXQgZW1w
dHkgaGFuZGxlcwogLy8gLSBjb25zaWRlciBjcmFzaGluZyBpbiBkZWJ1ZyBtb2RlIG9uIGRlc2Vy
aWFsaXphdGlvbiBlcnJvcnMKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNjAsMTkgKzYzLDE1
IEBAIGVudW0gU2VyaWFsaXphdGlvblRhZyB7CiAgICAgRmFsc2VUYWcgPSAnRicsCiAgICAgU3Ry
aW5nVGFnID0gJ1MnLAogICAgIEludDMyVGFnID0gJ0knLAorICAgIFVpbnQzMlRhZyA9ICdVJywK
KyAgICBEYXRlVGFnID0gJ0QnLAogICAgIE51bWJlclRhZyA9ICdOJywKLSAgICBPYmplY3RUYWcg
PSAneycsCisgICAgSW1hZ2VEYXRhVGFnID0gJyMnLAogICAgIEFycmF5VGFnID0gJ1snLAorICAg
IE9iamVjdFRhZyA9ICd7JywKKyAgICBTcGFyc2VBcnJheVRhZyA9ICdAJywKIH07CiAKLS8vIEhl
bHBlcnMgdG8gZG8gdmVyYm9zZSBoYW5kbGUgY2FzdHMuCi0KLXRlbXBsYXRlIDx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBVPgotc3RhdGljIHY4OjpIYW5kbGU8VD4gaGFuZGxlQ2FzdCh2ODo6SGFuZGxl
PFU+IGhhbmRsZSkgeyByZXR1cm4gdjg6OkhhbmRsZTxUPjo6Q2FzdChoYW5kbGUpOyB9Ci0KLXRl
bXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPgotc3RhdGljIHY4OjpMb2NhbDxUPiBoYW5k
bGVDYXN0KHY4OjpMb2NhbDxVPiBoYW5kbGUpIHsgcmV0dXJuIHY4OjpMb2NhbDxUPjo6Q2FzdCho
YW5kbGUpOyB9Ci0KIHN0YXRpYyBib29sIHNob3VsZENoZWNrRm9yQ3ljbGVzKGludCBkZXB0aCkK
IHsKICAgICBBU1NFUlQoZGVwdGggPj0gMCk7CkBAIC0xMTgsNyArMTE3LDggQEAgcHJpdmF0ZToK
IC8vIGluZm9ybWF0aW9uIHVzZWQgdG8gcmVjb25zdHJ1Y3QgY29tcG9zaXRlIHR5cGVzLgogY2xh
c3MgV3JpdGVyIDogTm9uY29weWFibGUgewogcHVibGljOgotICAgIFdyaXRlcigpIDogbV9wb3Np
dGlvbigwKQorICAgIFdyaXRlcigpCisgICAgICAgIDogbV9wb3NpdGlvbigwKQogICAgIHsKICAg
ICB9CiAKQEAgLTEzNCw5ICsxMzQsMTAgQEAgcHVibGljOgogCiAgICAgdm9pZCB3cml0ZVN0cmlu
Zyhjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKQogICAgIHsKKyAgICAgICAgQVNTRVJUKGxl
bmd0aCA+PSAwKTsKICAgICAgICAgYXBwZW5kKFN0cmluZ1RhZyk7CiAgICAgICAgIGRvV3JpdGVV
aW50MzIoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGxlbmd0aCkpOwotICAgICAgICBhcHBlbmQoZGF0
YSwgbGVuZ3RoKTsKKyAgICAgICAgYXBwZW5kKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhf
dCo+KGRhdGEpLCBsZW5ndGgpOwogICAgIH0KIAogICAgIHZvaWQgd3JpdGVJbnQzMihpbnQzMl90
IHZhbHVlKQpAQCAtMTQ1LDE5ICsxNDYsNTAgQEAgcHVibGljOgogICAgICAgICBkb1dyaXRlVWlu
dDMyKFppZ1phZzo6ZW5jb2RlKHN0YXRpY19jYXN0PHVpbnQzMl90Pih2YWx1ZSkpKTsKICAgICB9
CiAKKyAgICB2b2lkIHdyaXRlVWludDMyKHVpbnQzMl90IHZhbHVlKQorICAgIHsKKyAgICAgICAg
YXBwZW5kKFVpbnQzMlRhZyk7CisgICAgICAgIGRvV3JpdGVVaW50MzIodmFsdWUpOworICAgIH0K
KworICAgIHZvaWQgd3JpdGVEYXRlKGRvdWJsZSBudW1iZXJWYWx1ZSkKKyAgICB7CisgICAgICAg
IGFwcGVuZChEYXRlVGFnKTsKKyAgICAgICAgZG9Xcml0ZU51bWJlcihudW1iZXJWYWx1ZSk7Cisg
ICAgfQorCiAgICAgdm9pZCB3cml0ZU51bWJlcihkb3VibGUgbnVtYmVyKQogICAgIHsKICAgICAg
ICAgYXBwZW5kKE51bWJlclRhZyk7Ci0gICAgICAgIGFwcGVuZChyZWludGVycHJldF9jYXN0PGNo
YXIqPigmbnVtYmVyKSwgc2l6ZW9mKG51bWJlcikpOworICAgICAgICBkb1dyaXRlTnVtYmVyKG51
bWJlcik7CiAgICAgfQogCi0gICAgLy8gUmVjb3JkcyB0aGF0IGEgY29tcG9zaXRlIG9iamVjdCBj
YW4gYmUgY29uc3RydWN0ZWQgYnkgdXNpbmcKLSAgICAvLyB8bGVuZ3RofCBwcmV2aW91c2x5IHN0
b3JlZCB2YWx1ZXMuCi0gICAgdm9pZCBlbmRDb21wb3NpdGUoU2VyaWFsaXphdGlvblRhZyB0YWcs
IGludDMyX3QgbGVuZ3RoKQorICAgIHZvaWQgd3JpdGVJbWFnZURhdGEodWludDMyX3Qgd2lkdGgs
IHVpbnQzMl90IGhlaWdodCwgY29uc3QgdWludDhfdCogcGl4ZWxEYXRhLCB1aW50MzJfdCBwaXhl
bERhdGFMZW5ndGgpCiAgICAgewotICAgICAgICBBU1NFUlQodGFnID09IE9iamVjdFRhZyB8fCB0
YWcgPT0gQXJyYXlUYWcpOwotICAgICAgICBhcHBlbmQodGFnKTsKLSAgICAgICAgZG9Xcml0ZVVp
bnQzMihzdGF0aWNfY2FzdDx1aW50MzJfdD4obGVuZ3RoKSk7CisgICAgICAgIGFwcGVuZChJbWFn
ZURhdGFUYWcpOworICAgICAgICBkb1dyaXRlVWludDMyKHdpZHRoKTsKKyAgICAgICAgZG9Xcml0
ZVVpbnQzMihoZWlnaHQpOworICAgICAgICBkb1dyaXRlVWludDMyKHBpeGVsRGF0YUxlbmd0aCk7
CisgICAgICAgIGFwcGVuZChwaXhlbERhdGEsIHBpeGVsRGF0YUxlbmd0aCk7CisgICAgfQorCisg
ICAgdm9pZCB3cml0ZUFycmF5KHVpbnQzMl90IGxlbmd0aCkKKyAgICB7CisgICAgICAgIGFwcGVu
ZChBcnJheVRhZyk7CisgICAgICAgIGRvV3JpdGVVaW50MzIobGVuZ3RoKTsKKyAgICB9CisKKyAg
ICB2b2lkIHdyaXRlT2JqZWN0KHVpbnQzMl90IG51bVByb3BlcnRpZXMpCisgICAgeworICAgICAg
ICBhcHBlbmQoT2JqZWN0VGFnKTsKKyAgICAgICAgZG9Xcml0ZVVpbnQzMihudW1Qcm9wZXJ0aWVz
KTsKKyAgICB9CisKKyAgICB2b2lkIHdyaXRlU3BhcnNlQXJyYXkodWludDMyX3QgbnVtUHJvcGVy
dGllcywgdWludDMyX3QgbGVuZ3RoKQorICAgIHsKKyAgICAgICAgYXBwZW5kKFNwYXJzZUFycmF5
VGFnKTsKKyAgICAgICAgZG9Xcml0ZVVpbnQzMihudW1Qcm9wZXJ0aWVzKTsKKyAgICAgICAgZG9X
cml0ZVVpbnQzMihsZW5ndGgpOwogICAgIH0KIAogICAgIFZlY3RvcjxCdWZmZXJWYWx1ZVR5cGU+
JiBkYXRhKCkKQEAgLTE3MCw3ICsyMDIsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgZG9Xcml0ZVVp
bnQzMih1aW50MzJfdCB2YWx1ZSkKICAgICB7CiAgICAgICAgIHdoaWxlICh0cnVlKSB7Ci0gICAg
ICAgICAgICBjaGFyIGIgPSAodmFsdWUgJiB2YXJJbnRNYXNrKTsKKyAgICAgICAgICAgIHVpbnQ4
X3QgYiA9ICh2YWx1ZSAmIHZhckludE1hc2spOwogICAgICAgICAgICAgdmFsdWUgPj49IHZhcklu
dFNoaWZ0OwogICAgICAgICAgICAgaWYgKCF2YWx1ZSkgewogICAgICAgICAgICAgICAgIGFwcGVu
ZChiKTsKQEAgLTE4MCwyMSArMjEyLDI2IEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICB9CiAK
KyAgICB2b2lkIGRvV3JpdGVOdW1iZXIoZG91YmxlIG51bWJlcikKKyAgICB7CisgICAgICAgIGFw
cGVuZChyZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPigmbnVtYmVyKSwgc2l6ZW9mKG51bWJlcikp
OworICAgIH0KKwogICAgIHZvaWQgYXBwZW5kKFNlcmlhbGl6YXRpb25UYWcgdGFnKQogICAgIHsK
LSAgICAgICAgYXBwZW5kKHN0YXRpY19jYXN0PGNoYXI+KHRhZykpOworICAgICAgICBhcHBlbmQo
c3RhdGljX2Nhc3Q8dWludDhfdD4odGFnKSk7CiAgICAgfQogCi0gICAgdm9pZCBhcHBlbmQoY2hh
ciBiKQorICAgIHZvaWQgYXBwZW5kKHVpbnQ4X3QgYikKICAgICB7CiAgICAgICAgIGVuc3VyZVNw
YWNlKDEpOwotICAgICAgICAqY2hhckF0KG1fcG9zaXRpb24rKykgPSBiOworICAgICAgICAqYnl0
ZUF0KG1fcG9zaXRpb24rKykgPSBiOwogICAgIH0KIAotICAgIHZvaWQgYXBwZW5kKGNvbnN0IGNo
YXIqIGRhdGEsIGludCBsZW5ndGgpCisgICAgdm9pZCBhcHBlbmQoY29uc3QgdWludDhfdCogZGF0
YSwgaW50IGxlbmd0aCkKICAgICB7CiAgICAgICAgIGVuc3VyZVNwYWNlKGxlbmd0aCk7Ci0gICAg
ICAgIG1lbWNweShjaGFyQXQobV9wb3NpdGlvbiksIGRhdGEsIGxlbmd0aCk7CisgICAgICAgIG1l
bWNweShieXRlQXQobV9wb3NpdGlvbiksIGRhdGEsIGxlbmd0aCk7CiAgICAgICAgIG1fcG9zaXRp
b24gKz0gbGVuZ3RoOwogICAgIH0KIApAQCAtMjEwLDQxICsyNDcsNTQgQEAgcHJpdmF0ZToKICAg
ICAgICAgLy8gSWYgdGhlIHdyaXRlciBpcyBhdCBvZGQgcG9zaXRpb24gaW4gdGhlIGJ1ZmZlciwg
dGhlbiBvbmUgb2YKICAgICAgICAgLy8gdGhlIGJ5dGVzIGluIHRoZSBsYXN0IFVDaGFyIGlzIG5v
dCBpbml0aWFsaXplZC4KICAgICAgICAgaWYgKG1fcG9zaXRpb24gJSAyKQotICAgICAgICAgICAg
KmNoYXJBdChtX3Bvc2l0aW9uKSA9IHN0YXRpY19jYXN0PGNoYXI+KFBhZGRpbmdUYWcpOworICAg
ICAgICAgICAgKmJ5dGVBdChtX3Bvc2l0aW9uKSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KFBhZGRp
bmdUYWcpOwogICAgIH0KIAotICAgIGNoYXIqIGNoYXJBdChpbnQgcG9zaXRpb24pIHsgcmV0dXJu
IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG1fYnVmZmVyLmRhdGEoKSkgKyBwb3NpdGlvbjsgfQor
ICAgIHVpbnQ4X3QqIGJ5dGVBdChpbnQgcG9zaXRpb24pIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nh
c3Q8dWludDhfdCo+KG1fYnVmZmVyLmRhdGEoKSkgKyBwb3NpdGlvbjsgfQogCiAgICAgVmVjdG9y
PEJ1ZmZlclZhbHVlVHlwZT4gbV9idWZmZXI7CiAgICAgdW5zaWduZWQgbV9wb3NpdGlvbjsKIH07
CiAKIGNsYXNzIFNlcmlhbGl6ZXIgeworICAgIGNsYXNzIFN0YXRlQmFzZTsKIHB1YmxpYzoKICAg
ICBleHBsaWNpdCBTZXJpYWxpemVyKFdyaXRlciYgd3JpdGVyKQogICAgICAgICA6IG1fd3JpdGVy
KHdyaXRlcikKLSAgICAgICAgLCBtX3N0YXRlKDApCiAgICAgICAgICwgbV9kZXB0aCgwKQorICAg
ICAgICAsIG1faGFzRXJyb3IoZmFsc2UpCiAgICAgewogICAgIH0KIAogICAgIGJvb2wgc2VyaWFs
aXplKHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSkKICAgICB7CiAgICAgICAgIHY4OjpIYW5k
bGVTY29wZSBzY29wZTsKLSAgICAgICAgU3RhY2tDbGVhbmVyIGNsZWFuZXIoJm1fc3RhdGUpOwot
ICAgICAgICBpZiAoIWRvU2VyaWFsaXplKHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgd2hpbGUgKHRvcCgpKSB7Ci0gICAgICAgICAgICBpbnQgbGVuZ3RoOwotICAg
ICAgICAgICAgd2hpbGUgKCF0b3AoKS0+aXNEb25lKCZsZW5ndGgpKSB7Ci0gICAgICAgICAgICAg
ICAgLy8gTm90ZSB0aGF0IGRvU2VyaWFsaXplKCkgY2FuIGNoYW5nZSBjdXJyZW50IHRvcCgpLgot
ICAgICAgICAgICAgICAgIGlmICghZG9TZXJpYWxpemUodG9wKCktPmFkdmFuY2UoKSkpCi0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IG1fd3JpdGVyLmVuZENvbXBvc2l0ZSh0b3AoKS0+dGFnKCksIGxlbmd0aCk7Ci0gICAgICAgICAg
ICBwb3AoKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgU3RhdGVC
YXNlKiBzdGF0ZSA9IGRvU2VyaWFsaXplKHZhbHVlLCAwKTsKKyAgICAgICAgd2hpbGUgKHN0YXRl
KQorICAgICAgICAgICAgc3RhdGUgPSBzdGF0ZS0+YWR2YW5jZSgqdGhpcyk7CisgICAgICAgIHJl
dHVybiAhbV9oYXNFcnJvcjsKKyAgICB9CisKKyAgICAvLyBGdW5jdGlvbnMgdXNlZCBieSBzZXJp
YWxpemF0aW9uIHN0YXRlcy4KKworICAgIFN0YXRlQmFzZSogZG9TZXJpYWxpemUodjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IHZhbHVlLCBTdGF0ZUJhc2UqIG5leHQpOworCisgICAgU3RhdGVCYXNlKiB3
cml0ZUFycmF5KHVpbnQzMl90IGxlbmd0aCwgU3RhdGVCYXNlKiBzdGF0ZSkKKyAgICB7CisgICAg
ICAgIG1fd3JpdGVyLndyaXRlQXJyYXkobGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIHBvcChzdGF0
ZSk7CisgICAgfQorCisgICAgU3RhdGVCYXNlKiB3cml0ZU9iamVjdCh1aW50MzJfdCBudW1Qcm9w
ZXJ0aWVzLCBTdGF0ZUJhc2UqIHN0YXRlKQorICAgIHsKKyAgICAgICAgbV93cml0ZXIud3JpdGVP
YmplY3QobnVtUHJvcGVydGllcyk7CisgICAgICAgIHJldHVybiBwb3Aoc3RhdGUpOworICAgIH0K
KworICAgIFN0YXRlQmFzZSogd3JpdGVTcGFyc2VBcnJheSh1aW50MzJfdCBudW1Qcm9wZXJ0aWVz
LCB1aW50MzJfdCBsZW5ndGgsIFN0YXRlQmFzZSogc3RhdGUpCisgICAgeworICAgICAgICBtX3dy
aXRlci53cml0ZVNwYXJzZUFycmF5KG51bVByb3BlcnRpZXMsIGxlbmd0aCk7CisgICAgICAgIHJl
dHVybiBwb3Aoc3RhdGUpOwogICAgIH0KIAogcHJpdmF0ZToKQEAgLTI1NCwyMjEgKzMwNCwyNzUg
QEAgcHJpdmF0ZToKIAogICAgICAgICAvLyBMaW5rIHRvIHRoZSBuZXh0IHN0YXRlIHRvIGZvcm0g
YSBzdGFjay4KICAgICAgICAgU3RhdGVCYXNlKiBuZXh0U3RhdGUoKSB7IHJldHVybiBtX25leHQ7
IH0KLSAgICAgICAgdm9pZCBzZXROZXh0U3RhdGUoU3RhdGVCYXNlKiBuZXh0KSB7IG1fbmV4dCA9
IG5leHQ7IH0KIAogICAgICAgICAvLyBDb21wb3NpdGUgb2JqZWN0IHdlJ3JlIHByb2Nlc3Npbmcg
aW4gdGhpcyBzdGF0ZS4KICAgICAgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNvbXBvc2l0ZSgp
IHsgcmV0dXJuIG1fY29tcG9zaXRlOyB9CiAKLSAgICAgICAgLy8gU2VyaWFsaXphdGlvbiB0YWcg
Zm9yIHRoZSBjdXJyZW50IGNvbXBvc2l0ZS4KLSAgICAgICAgdmlydHVhbCBTZXJpYWxpemF0aW9u
VGFnIHRhZygpIGNvbnN0ID0gMDsKLQotICAgICAgICAvLyBSZXR1cm5zIHdoZXRoZXIgaXRlcmF0
aW9uIG92ZXIgc3Vib2JqZWN0cyBvZiB0aGUgY3VycmVudAotICAgICAgICAvLyBjb21wb3NpdGUg
b2JqZWN0IGlzIGRvbmUuIElmIHllcywgfCpsZW5ndGh8IGlzIHNldCB0byB0aGUKLSAgICAgICAg
Ly8gbnVtYmVyIG9mIHN1Ym9iamVjdHMuCi0gICAgICAgIHZpcnR1YWwgYm9vbCBpc0RvbmUoaW50
KiBsZW5ndGgpID0gMDsKLQotICAgICAgICAvLyBBZHZhbmNlcyB0byB0aGUgbmV4dCBzdWJvYmpl
Y3QuCi0gICAgICAgIC8vIFJlcXVpcmVzOiAhdGhpcy0+aXNEb25lKCkuCi0gICAgICAgIHZpcnR1
YWwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gYWR2YW5jZSgpID0gMDsKKyAgICAgICAgLy8gU2VyaWFs
aXplcyAoYSBwYXJ0IG9mKSB0aGUgY3VycmVudCBjb21wb3NpdGUgYW5kIHJldHVybnMKKyAgICAg
ICAgLy8gdGhlIG5leHQgc3RhdGUgdG8gcHJvY2VzcyBvciBudWxsIHdoZW4gdGhpcyBpcyB0aGUg
ZmluYWwKKyAgICAgICAgLy8gc3RhdGUuCisgICAgICAgIHZpcnR1YWwgU3RhdGVCYXNlKiBhZHZh
bmNlKFNlcmlhbGl6ZXImKSA9IDA7CiAKICAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIFN0YXRlQmFz
ZSh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY29tcG9zaXRlKQotICAgICAgICAgICAgOiBtX25leHQo
MCkKLSAgICAgICAgICAgICwgbV9jb21wb3NpdGUoY29tcG9zaXRlKQorICAgICAgICBTdGF0ZUJh
c2Uodjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNvbXBvc2l0ZSwgU3RhdGVCYXNlKiBuZXh0KQorICAg
ICAgICAgICAgOiBtX2NvbXBvc2l0ZShjb21wb3NpdGUpCisgICAgICAgICAgICAsIG1fbmV4dChu
ZXh0KQogICAgICAgICB7CiAgICAgICAgIH0KIAogICAgIHByaXZhdGU6Ci0gICAgICAgIFN0YXRl
QmFzZSogbV9uZXh0OwogICAgICAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gbV9jb21wb3NpdGU7
CisgICAgICAgIFN0YXRlQmFzZSogbV9uZXh0OwogICAgIH07CiAKLSAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVCwgU2VyaWFsaXphdGlvblRhZyBjb21wb3NpdGVUYWc+Ci0gICAgY2xhc3MgU3RhdGUg
OiBwdWJsaWMgU3RhdGVCYXNlIHsKKyAgICAvLyBEdW1teSBzdGF0ZSB0aGF0IGlzIHVzZWQgdG8g
c2lnbmFsIHNlcmlhbGl6YXRpb24gZXJyb3JzLgorICAgIGNsYXNzIEVycm9yU3RhdGUgOiBwdWJs
aWMgU3RhdGVCYXNlIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIHY4OjpIYW5kbGU8VD4gY29tcG9z
aXRlKCkgeyByZXR1cm4gaGFuZGxlQ2FzdDxUPihTdGF0ZUJhc2U6OmNvbXBvc2l0ZSgpKTsgfQor
ICAgICAgICBFcnJvclN0YXRlKCkKKyAgICAgICAgICAgIDogU3RhdGVCYXNlKHY4OjpIYW5kbGU8
djg6OlZhbHVlPigpLCAwKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICB2aXJ0dWFs
IFN0YXRlQmFzZSogYWR2YW5jZShTZXJpYWxpemVyJikKKyAgICAgICAgeworICAgICAgICAgICAg
ZGVsZXRlIHRoaXM7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgIH07CiAK
LSAgICAgICAgdmlydHVhbCBTZXJpYWxpemF0aW9uVGFnIHRhZygpIGNvbnN0IHsgcmV0dXJuIGNv
bXBvc2l0ZVRhZzsgfQorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICAgIGNsYXNzIFN0YXRl
IDogcHVibGljIFN0YXRlQmFzZSB7CisgICAgcHVibGljOgorICAgICAgICB2ODo6SGFuZGxlPFQ+
IGNvbXBvc2l0ZSgpIHsgcmV0dXJuIHY4OjpIYW5kbGU8VD46OkNhc3QoU3RhdGVCYXNlOjpjb21w
b3NpdGUoKSk7IH0KIAogICAgIHByb3RlY3RlZDoKLSAgICAgICAgZXhwbGljaXQgU3RhdGUodjg6
OkhhbmRsZTxUPiBjb21wb3NpdGUpIDogU3RhdGVCYXNlKGNvbXBvc2l0ZSkKKyAgICAgICAgU3Rh
dGUodjg6OkhhbmRsZTxUPiBjb21wb3NpdGUsIFN0YXRlQmFzZSogbmV4dCkKKyAgICAgICAgICAg
IDogU3RhdGVCYXNlKGNvbXBvc2l0ZSwgbmV4dCkKICAgICAgICAgewogICAgICAgICB9CiAgICAg
fTsKIAotICAgIC8vIEhlbHBlciB0byBjbGVhbiB1cCB0aGUgc3RhdGUgc3RhY2sgaW4gY2FzZSBv
ZiBlcnJvcnMuCi0gICAgY2xhc3MgU3RhY2tDbGVhbmVyIDogTm9uY29weWFibGUgeworI2lmIDAK
KyAgICAvLyBDdXJyZW50bHkgdW51c2VkLCBzZWUgY29tbWVudCBpbiBuZXdBcnJheVN0YXRlLgor
ICAgIGNsYXNzIEFycmF5U3RhdGUgOiBwdWJsaWMgU3RhdGU8djg6OkFycmF5PiB7CiAgICAgcHVi
bGljOgotICAgICAgICBleHBsaWNpdCBTdGFja0NsZWFuZXIoU3RhdGVCYXNlKiogc3RhY2spIDog
bV9zdGFjayhzdGFjaykKKyAgICAgICAgQXJyYXlTdGF0ZSh2ODo6SGFuZGxlPHY4OjpBcnJheT4g
YXJyYXksIFN0YXRlQmFzZSogbmV4dCkKKyAgICAgICAgICAgIDogU3RhdGU8djg6OkFycmF5Pihh
cnJheSwgbmV4dCkKKyAgICAgICAgICAgICwgbV9pbmRleCgtMSkKICAgICAgICAgewogICAgICAg
ICB9CiAKLSAgICAgICAgflN0YWNrQ2xlYW5lcigpCisgICAgICAgIHZpcnR1YWwgU3RhdGVCYXNl
KiBhZHZhbmNlKFNlcmlhbGl6ZXImIHNlcmlhbGl6ZXIpCiAgICAgICAgIHsKLSAgICAgICAgICAg
IFN0YXRlQmFzZSogc3RhdGUgPSAqbV9zdGFjazsKLSAgICAgICAgICAgIHdoaWxlIChzdGF0ZSkg
ewotICAgICAgICAgICAgICAgIFN0YXRlQmFzZSogdG1wID0gc3RhdGUtPm5leHRTdGF0ZSgpOwot
ICAgICAgICAgICAgICAgIGRlbGV0ZSBzdGF0ZTsKLSAgICAgICAgICAgICAgICBzdGF0ZSA9IHRt
cDsKKyAgICAgICAgICAgICsrbV9pbmRleDsKKyAgICAgICAgICAgIGZvciAoOyBtX2luZGV4IDwg
Y29tcG9zaXRlKCktPkxlbmd0aCgpOyArK21faW5kZXgpIHsKKyAgICAgICAgICAgICAgICBpZiAo
U3RhdGVCYXNlKiBuZXdTdGF0ZSA9IHNlcmlhbGl6ZXIuZG9TZXJpYWxpemUoY29tcG9zaXRlKCkt
PkdldChtX2luZGV4KSwgdGhpcykpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXdTdGF0
ZTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICptX3N0YWNrID0gMDsKKyAgICAgICAgICAg
IHJldHVybiBzZXJpYWxpemVyLndyaXRlQXJyYXkoY29tcG9zaXRlKCktPkxlbmd0aCgpLCB0aGlz
KTsKICAgICAgICAgfQogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgU3RhdGVCYXNlKiogbV9zdGFj
azsKKyAgICAgICAgdW5zaWduZWQgbV9pbmRleDsKICAgICB9OworI2VuZGlmCiAKLSAgICBjbGFz
cyBBcnJheVN0YXRlIDogcHVibGljIFN0YXRlPHY4OjpBcnJheSwgQXJyYXlUYWc+IHsKKyAgICBj
bGFzcyBBYnN0cmFjdE9iamVjdFN0YXRlIDogcHVibGljIFN0YXRlPHY4OjpPYmplY3Q+IHsKICAg
ICBwdWJsaWM6Ci0gICAgICAgIEFycmF5U3RhdGUodjg6OkhhbmRsZTx2ODo6QXJyYXk+IGFycmF5
KQotICAgICAgICAgICAgOiBTdGF0ZTx2ODo6QXJyYXksIEFycmF5VGFnPihhcnJheSkKLSAgICAg
ICAgICAgICwgbV9pbmRleCgwKQorICAgICAgICBBYnN0cmFjdE9iamVjdFN0YXRlKHY4OjpIYW5k
bGU8djg6Ok9iamVjdD4gb2JqZWN0LCBTdGF0ZUJhc2UqIG5leHQpCisgICAgICAgICAgICA6IFN0
YXRlPHY4OjpPYmplY3Q+KG9iamVjdCwgbmV4dCkKKyAgICAgICAgICAgICwgbV9wcm9wZXJ0eU5h
bWVzKG9iamVjdC0+R2V0UHJvcGVydHlOYW1lcygpKQorICAgICAgICAgICAgLCBtX2luZGV4KC0x
KQorICAgICAgICAgICAgLCBtX25hbWVEb25lKGZhbHNlKQogICAgICAgICB7CiAgICAgICAgIH0K
IAotICAgICAgICB2aXJ0dWFsIGJvb2wgaXNEb25lKGludCogbGVuZ3RoKQorICAgICAgICB2aXJ0
dWFsIFN0YXRlQmFzZSogYWR2YW5jZShTZXJpYWxpemVyJiBzZXJpYWxpemVyKQogICAgICAgICB7
Ci0gICAgICAgICAgICAqbGVuZ3RoID0gY29tcG9zaXRlKCktPkxlbmd0aCgpOwotICAgICAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4obV9pbmRleCkgPj0gKmxlbmd0aDsKKyAgICAgICAg
ICAgICsrbV9pbmRleDsKKyAgICAgICAgICAgIGZvciAoOyBtX2luZGV4IDwgbV9wcm9wZXJ0eU5h
bWVzLT5MZW5ndGgoKTsgKyttX2luZGV4KSB7CisgICAgICAgICAgICAgICAgaWYgKG1fcHJvcGVy
dHlOYW1lLklzRW1wdHkoKSkgeworICAgICAgICAgICAgICAgICAgICB2ODo6TG9jYWw8djg6OlZh
bHVlPiBwcm9wZXJ0eU5hbWUgPSBtX3Byb3BlcnR5TmFtZXMtPkdldChtX2luZGV4KTsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKChwcm9wZXJ0eU5hbWUtPklzU3RyaW5nKCkgJiYgY29tcG9zaXRl
KCktPkhhc1JlYWxOYW1lZFByb3BlcnR5KHByb3BlcnR5TmFtZS5Bczx2ODo6U3RyaW5nPigpKSkK
KyAgICAgICAgICAgICAgICAgICAgICAgIHx8IChwcm9wZXJ0eU5hbWUtPklzVWludDMyKCkgJiYg
Y29tcG9zaXRlKCktPkhhc1JlYWxJbmRleGVkUHJvcGVydHkocHJvcGVydHlOYW1lLT5VaW50MzJW
YWx1ZSgpKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fcHJvcGVydHlOYW1lID0gcHJv
cGVydHlOYW1lOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBBU1NF
UlQoIW1fcHJvcGVydHlOYW1lLklzRW1wdHkoKSk7CisgICAgICAgICAgICAgICAgaWYgKCFtX25h
bWVEb25lKSB7CisgICAgICAgICAgICAgICAgICAgIG1fbmFtZURvbmUgPSB0cnVlOworICAgICAg
ICAgICAgICAgICAgICBpZiAoU3RhdGVCYXNlKiBuZXdTdGF0ZSA9IHNlcmlhbGl6ZXIuZG9TZXJp
YWxpemUobV9wcm9wZXJ0eU5hbWUsIHRoaXMpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIG5ld1N0YXRlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB2ODo6TG9j
YWw8djg6OlZhbHVlPiB2YWx1ZSA9IGNvbXBvc2l0ZSgpLT5HZXQobV9wcm9wZXJ0eU5hbWUpOwor
ICAgICAgICAgICAgICAgIG1fbmFtZURvbmUgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBtX3By
b3BlcnR5TmFtZS5DbGVhcigpOworICAgICAgICAgICAgICAgIGlmIChTdGF0ZUJhc2UqIG5ld1N0
YXRlID0gc2VyaWFsaXplci5kb1NlcmlhbGl6ZSh2YWx1ZSwgdGhpcykpCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBuZXdTdGF0ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVy
biBvYmplY3REb25lKG1faW5kZXgsIHNlcmlhbGl6ZXIpOwogICAgICAgICB9CiAKLSAgICAgICAg
dmlydHVhbCB2ODo6TG9jYWw8djg6OlZhbHVlPiBhZHZhbmNlKCkKLSAgICAgICAgewotICAgICAg
ICAgICAgQVNTRVJUKG1faW5kZXggPCBjb21wb3NpdGUoKS0+TGVuZ3RoKCkpOwotICAgICAgICAg
ICAgdjg6OkhhbmRsZVNjb3BlIHNjb3BlOwotICAgICAgICAgICAgcmV0dXJuIHNjb3BlLkNsb3Nl
KGNvbXBvc2l0ZSgpLT5HZXQodjg6OkludGVnZXI6Ok5ldyhtX2luZGV4KyspKSk7Ci0gICAgICAg
IH0KKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIHZpcnR1YWwgU3RhdGVCYXNlKiBvYmplY3REb25l
KHVuc2lnbmVkIG51bVByb3BlcnRpZXMsIFNlcmlhbGl6ZXImKSA9IDA7CiAKICAgICBwcml2YXRl
OgorICAgICAgICB2ODo6TG9jYWw8djg6OkFycmF5PiBtX3Byb3BlcnR5TmFtZXM7CisgICAgICAg
IHY4OjpMb2NhbDx2ODo6VmFsdWU+IG1fcHJvcGVydHlOYW1lOwogICAgICAgICB1bnNpZ25lZCBt
X2luZGV4OworICAgICAgICBib29sIG1fbmFtZURvbmU7CiAgICAgfTsKIAotICAgIGNsYXNzIE9i
amVjdFN0YXRlIDogcHVibGljIFN0YXRlPHY4OjpPYmplY3QsIE9iamVjdFRhZz4geworICAgIGNs
YXNzIE9iamVjdFN0YXRlIDogcHVibGljIEFic3RyYWN0T2JqZWN0U3RhdGUgewogICAgIHB1Ymxp
YzoKLSAgICAgICAgT2JqZWN0U3RhdGUodjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBvYmplY3QpCi0g
ICAgICAgICAgICA6IFN0YXRlPHY4OjpPYmplY3QsIE9iamVjdFRhZz4ob2JqZWN0KQotICAgICAg
ICAgICAgLCBtX3Byb3BlcnR5TmFtZXMob2JqZWN0LT5HZXRQcm9wZXJ0eU5hbWVzKCkpCi0gICAg
ICAgICAgICAsIG1faW5kZXgoLTEpCi0gICAgICAgICAgICAsIG1fbGVuZ3RoKDApCisgICAgICAg
IE9iamVjdFN0YXRlKHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gb2JqZWN0LCBTdGF0ZUJhc2UqIG5l
eHQpCisgICAgICAgICAgICA6IEFic3RyYWN0T2JqZWN0U3RhdGUob2JqZWN0LCBuZXh0KQogICAg
ICAgICB7Ci0gICAgICAgICAgICBuZXh0UHJvcGVydHkoKTsKICAgICAgICAgfQogCi0gICAgICAg
IHZpcnR1YWwgYm9vbCBpc0RvbmUoaW50KiBsZW5ndGgpCisgICAgcHJvdGVjdGVkOgorICAgICAg
ICB2aXJ0dWFsIFN0YXRlQmFzZSogb2JqZWN0RG9uZSh1bnNpZ25lZCBudW1Qcm9wZXJ0aWVzLCBT
ZXJpYWxpemVyJiBzZXJpYWxpemVyKQogICAgICAgICB7Ci0gICAgICAgICAgICAqbGVuZ3RoID0g
bV9sZW5ndGg7Ci0gICAgICAgICAgICByZXR1cm4gbV9pbmRleCA+PSAyICogbV9wcm9wZXJ0eU5h
bWVzLT5MZW5ndGgoKTsKKyAgICAgICAgICAgIHJldHVybiBzZXJpYWxpemVyLndyaXRlT2JqZWN0
KG51bVByb3BlcnRpZXMsIHRoaXMpOwogICAgICAgICB9CisgICAgfTsKIAotICAgICAgICB2aXJ0
dWFsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IGFkdmFuY2UoKQorICAgIGNsYXNzIFNwYXJzZUFycmF5
U3RhdGUgOiBwdWJsaWMgQWJzdHJhY3RPYmplY3RTdGF0ZSB7CisgICAgcHVibGljOgorICAgICAg
ICBTcGFyc2VBcnJheVN0YXRlKHY4OjpIYW5kbGU8djg6OkFycmF5PiBhcnJheSwgU3RhdGVCYXNl
KiBuZXh0KQorICAgICAgICAgICAgOiBBYnN0cmFjdE9iamVjdFN0YXRlKGFycmF5LCBuZXh0KQog
ICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQobV9pbmRleCA8IDIgKiBtX3Byb3BlcnR5TmFt
ZXMtPkxlbmd0aCgpKTsKLSAgICAgICAgICAgIGlmICghKG1faW5kZXggJSAyKSkgewotICAgICAg
ICAgICAgICAgICsrbV9pbmRleDsKLSAgICAgICAgICAgICAgICByZXR1cm4gbV9wcm9wZXJ0eU5h
bWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB2ODo6TG9jYWw8djg6OlZhbHVlPiByZXN1
bHQgPSBjb21wb3NpdGUoKS0+R2V0KG1fcHJvcGVydHlOYW1lKTsKLSAgICAgICAgICAgIG5leHRQ
cm9wZXJ0eSgpOwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgfQogCi0gICAg
cHJpdmF0ZToKLSAgICAgICAgdm9pZCBuZXh0UHJvcGVydHkoKQorICAgIHByb3RlY3RlZDoKKyAg
ICAgICAgdmlydHVhbCBTdGF0ZUJhc2UqIG9iamVjdERvbmUodW5zaWduZWQgbnVtUHJvcGVydGll
cywgU2VyaWFsaXplciYgc2VyaWFsaXplcikKICAgICAgICAgewotICAgICAgICAgICAgdjg6Okhh
bmRsZVNjb3BlIHNjb3BlOwotICAgICAgICAgICAgKyttX2luZGV4OwotICAgICAgICAgICAgQVNT
RVJUKCEobV9pbmRleCAlIDIpKTsKLSAgICAgICAgICAgIGZvciAoOyBtX2luZGV4IDwgMiAqIG1f
cHJvcGVydHlOYW1lcy0+TGVuZ3RoKCk7IG1faW5kZXggKz0gMikgewotICAgICAgICAgICAgICAg
IHY4OjpMb2NhbDx2ODo6VmFsdWU+IHByb3BlcnR5TmFtZSA9IG1fcHJvcGVydHlOYW1lcy0+R2V0
KHY4OjpJbnRlZ2VyOjpOZXcobV9pbmRleCAvIDIpKTsKLSAgICAgICAgICAgICAgICBpZiAoKHBy
b3BlcnR5TmFtZS0+SXNTdHJpbmcoKSAmJiBjb21wb3NpdGUoKS0+SGFzUmVhbE5hbWVkUHJvcGVy
dHkoaGFuZGxlQ2FzdDx2ODo6U3RyaW5nPihwcm9wZXJ0eU5hbWUpKSkKLSAgICAgICAgICAgICAg
ICAgICAgfHwgKHByb3BlcnR5TmFtZS0+SXNJbnQzMigpICYmIGNvbXBvc2l0ZSgpLT5IYXNSZWFs
SW5kZXhlZFByb3BlcnR5KHByb3BlcnR5TmFtZS0+VWludDMyVmFsdWUoKSkpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIG1fcHJvcGVydHlOYW1lID0gc2NvcGUuQ2xvc2UocHJvcGVydHlOYW1lKTsK
LSAgICAgICAgICAgICAgICAgICAgbV9sZW5ndGggKz0gMjsKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJl
dHVybiBzZXJpYWxpemVyLndyaXRlU3BhcnNlQXJyYXkobnVtUHJvcGVydGllcywgY29tcG9zaXRl
KCkuQXM8djg6OkFycmF5PigpLT5MZW5ndGgoKSwgdGhpcyk7CiAgICAgICAgIH0KLQotICAgICAg
ICB2ODo6TG9jYWw8djg6OkFycmF5PiBtX3Byb3BlcnR5TmFtZXM7Ci0gICAgICAgIHY4OjpMb2Nh
bDx2ODo6VmFsdWU+IG1fcHJvcGVydHlOYW1lOwotICAgICAgICB1bnNpZ25lZCBtX2luZGV4Owot
ICAgICAgICB1bnNpZ25lZCBtX2xlbmd0aDsKICAgICB9OwogCi0gICAgYm9vbCBkb1NlcmlhbGl6
ZSh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUpCi0gICAgewotICAgICAgICBpZiAodmFsdWUt
PklzVW5kZWZpbmVkKCkpCi0gICAgICAgICAgICBtX3dyaXRlci53cml0ZVVuZGVmaW5lZCgpOwot
ICAgICAgICBlbHNlIGlmICh2YWx1ZS0+SXNOdWxsKCkpCi0gICAgICAgICAgICBtX3dyaXRlci53
cml0ZU51bGwoKTsKLSAgICAgICAgZWxzZSBpZiAodmFsdWUtPklzVHJ1ZSgpKQotICAgICAgICAg
ICAgbV93cml0ZXIud3JpdGVUcnVlKCk7Ci0gICAgICAgIGVsc2UgaWYgKHZhbHVlLT5Jc0ZhbHNl
KCkpCi0gICAgICAgICAgICBtX3dyaXRlci53cml0ZUZhbHNlKCk7Ci0gICAgICAgIGVsc2UgaWYg
KHZhbHVlLT5Jc0ludDMyKCkpCi0gICAgICAgICAgICBtX3dyaXRlci53cml0ZUludDMyKHZhbHVl
LT5JbnQzMlZhbHVlKCkpOwotICAgICAgICBlbHNlIGlmICh2YWx1ZS0+SXNOdW1iZXIoKSkKLSAg
ICAgICAgICAgIG1fd3JpdGVyLndyaXRlTnVtYmVyKGhhbmRsZUNhc3Q8djg6Ok51bWJlcj4odmFs
dWUpLT5WYWx1ZSgpKTsKLSAgICAgICAgZWxzZSBpZiAodmFsdWUtPklzU3RyaW5nKCkpIHsKLSAg
ICAgICAgICAgIHY4OjpTdHJpbmc6OlV0ZjhWYWx1ZSBzdHJpbmdWYWx1ZSh2YWx1ZSk7Ci0gICAg
ICAgICAgICBtX3dyaXRlci53cml0ZVN0cmluZygqc3RyaW5nVmFsdWUsIHN0cmluZ1ZhbHVlLmxl
bmd0aCgpKTsKLSAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS0+SXNBcnJheSgpKSB7Ci0gICAgICAg
ICAgICBpZiAoIWNoZWNrQ29tcG9zaXRlKHZhbHVlKSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgICAgICBwdXNoKG5ldyBBcnJheVN0YXRlKGhhbmRsZUNhc3Q8djg6OkFy
cmF5Pih2YWx1ZSkpKTsKLSAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS0+SXNPYmplY3QoKSkgewot
ICAgICAgICAgICAgaWYgKCFjaGVja0NvbXBvc2l0ZSh2YWx1ZSkpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgcHVzaChuZXcgT2JqZWN0U3RhdGUoaGFuZGxlQ2Fz
dDx2ODo6T2JqZWN0Pih2YWx1ZSkpKTsKLSAgICAgICAgICAgIC8vIEZJWE1FOgotICAgICAgICAg
ICAgLy8gLSBjaGVjayBub3QgYSB3cmFwcGVyCi0gICAgICAgICAgICAvLyAtIHN1cHBvcnQgRmls
ZSwgSW1hZ2VEYXRhLCBldGMuCi0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
fQotCi0gICAgdm9pZCBwdXNoKFN0YXRlQmFzZSogc3RhdGUpCisgICAgU3RhdGVCYXNlKiBwdXNo
KFN0YXRlQmFzZSogc3RhdGUpCiAgICAgewotICAgICAgICBzdGF0ZS0+c2V0TmV4dFN0YXRlKG1f
c3RhdGUpOwotICAgICAgICBtX3N0YXRlID0gc3RhdGU7CisgICAgICAgIEFTU0VSVChzdGF0ZSk7
CiAgICAgICAgICsrbV9kZXB0aDsKKyAgICAgICAgcmV0dXJuIGNoZWNrQ29tcG9zaXRlKHN0YXRl
KSA/IHN0YXRlIDogaGFuZGxlRXJyb3Ioc3RhdGUpOwogICAgIH0KIAotICAgIFN0YXRlQmFzZSog
dG9wKCkgeyByZXR1cm4gbV9zdGF0ZTsgfQotCi0gICAgdm9pZCBwb3AoKQorICAgIFN0YXRlQmFz
ZSogcG9wKFN0YXRlQmFzZSogc3RhdGUpCiAgICAgewotICAgICAgICBpZiAoIW1fc3RhdGUpCi0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIFN0YXRlQmFzZSogdG9wID0gbV9zdGF0ZTsKLSAg
ICAgICAgbV9zdGF0ZSA9IHRvcC0+bmV4dFN0YXRlKCk7Ci0gICAgICAgIGRlbGV0ZSB0b3A7Cisg
ICAgICAgIEFTU0VSVChzdGF0ZSk7CiAgICAgICAgIC0tbV9kZXB0aDsKKyAgICAgICAgU3RhdGVC
YXNlKiBuZXh0ID0gc3RhdGUtPm5leHRTdGF0ZSgpOworICAgICAgICBkZWxldGUgc3RhdGU7Cisg
ICAgICAgIHJldHVybiBuZXh0OworICAgIH0KKworICAgIFN0YXRlQmFzZSogaGFuZGxlRXJyb3Io
U3RhdGVCYXNlKiBzdGF0ZSkKKyAgICB7CisgICAgICAgIG1faGFzRXJyb3IgPSB0cnVlOworICAg
ICAgICB3aGlsZSAoc3RhdGUpIHsKKyAgICAgICAgICAgIFN0YXRlQmFzZSogdG1wID0gc3RhdGUt
Pm5leHRTdGF0ZSgpOworICAgICAgICAgICAgZGVsZXRlIHRtcDsKKyAgICAgICAgICAgIHN0YXRl
ID0gdG1wOworICAgICAgICB9CisgICAgICAgIHJldHVybiBuZXcgRXJyb3JTdGF0ZTsKICAgICB9
CiAKLSAgICBib29sIGNoZWNrQ29tcG9zaXRlKHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjb21wb3Np
dGUpCisgICAgYm9vbCBjaGVja0NvbXBvc2l0ZShTdGF0ZUJhc2UqIHRvcCkKICAgICB7CisgICAg
ICAgIEFTU0VSVCh0b3ApOwogICAgICAgICBpZiAobV9kZXB0aCA+IG1heERlcHRoKQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBpZiAoIXNob3VsZENoZWNrRm9yQ3ljbGVzKG1f
ZGVwdGgpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGZvciAoU3RhdGVCYXNl
KiBzdGF0ZSA9IHRvcCgpOyBzdGF0ZTsgc3RhdGUgPSBzdGF0ZS0+bmV4dFN0YXRlKCkpIHsKKyAg
ICAgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNvbXBvc2l0ZSA9IHRvcC0+Y29tcG9zaXRlKCk7
CisgICAgICAgIGZvciAoU3RhdGVCYXNlKiBzdGF0ZSA9IHRvcC0+bmV4dFN0YXRlKCk7IHN0YXRl
OyBzdGF0ZSA9IHN0YXRlLT5uZXh0U3RhdGUoKSkgewogICAgICAgICAgICAgaWYgKHN0YXRlLT5j
b21wb3NpdGUoKSA9PSBjb21wb3NpdGUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgICB9CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAorICAgIHZvaWQgd3JpdGVT
dHJpbmcodjg6OkhhbmRsZTx2ODo6VmFsdWU+IHZhbHVlKQorICAgIHsKKyAgICAgICAgdjg6OlN0
cmluZzo6VXRmOFZhbHVlIHN0cmluZ1ZhbHVlKHZhbHVlKTsKKyAgICAgICAgbV93cml0ZXIud3Jp
dGVTdHJpbmcoKnN0cmluZ1ZhbHVlLCBzdHJpbmdWYWx1ZS5sZW5ndGgoKSk7CisgICAgfQorCisg
ICAgdm9pZCB3cml0ZUltYWdlRGF0YSh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUpCisgICAg
eworICAgICAgICBJbWFnZURhdGEqIGltYWdlRGF0YSA9IFY4SW1hZ2VEYXRhOjp0b05hdGl2ZSh2
YWx1ZS5Bczx2ODo6T2JqZWN0PigpKTsKKyAgICAgICAgaWYgKCFpbWFnZURhdGEpCisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIFdURjo6Qnl0ZUFycmF5KiBwaXhlbEFycmF5ID0gaW1hZ2VE
YXRhLT5kYXRhKCktPmRhdGEoKTsKKyAgICAgICAgbV93cml0ZXIud3JpdGVJbWFnZURhdGEoaW1h
Z2VEYXRhLT53aWR0aCgpLCBpbWFnZURhdGEtPmhlaWdodCgpLCBwaXhlbEFycmF5LT5kYXRhKCks
IHBpeGVsQXJyYXktPmxlbmd0aCgpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgU3RhdGVCYXNlKiBu
ZXdBcnJheVN0YXRlKHY4OjpIYW5kbGU8djg6OkFycmF5PiBhcnJheSwgU3RhdGVCYXNlKiBuZXh0
KQorICAgIHsKKyAgICAgICAgLy8gRklYTUU6IHVzZSBwbGFpbiBBcnJheSBzdGF0ZSB3aGVuIHdl
IGNhbiBxdWlja2x5IGNoZWNrIHRoYXQKKyAgICAgICAgLy8gYW4gYXJyYXkgaXMgbm90IHNwYXJz
ZSBhbmQgaGFzIG9ubHkgaW5kZXhlZCBwcm9wZXJ0aWVzLgorICAgICAgICByZXR1cm4gbmV3IFNw
YXJzZUFycmF5U3RhdGUoYXJyYXksIG5leHQpOworICAgIH0KKworICAgIHN0YXRpYyBTdGF0ZUJh
c2UqIG5ld09iamVjdFN0YXRlKHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gb2JqZWN0LCBTdGF0ZUJh
c2UqIG5leHQpCisgICAgeworICAgICAgICAvLyBGSVhNRToKKyAgICAgICAgLy8gLSBjaGVjayBu
b3QgYSB3cmFwcGVyCisgICAgICAgIC8vIC0gc3VwcG9ydCBGaWxlLCBldGMuCisgICAgICAgIHJl
dHVybiBuZXcgT2JqZWN0U3RhdGUob2JqZWN0LCBuZXh0KTsKKyAgICB9CisKICAgICBXcml0ZXIm
IG1fd3JpdGVyOwotICAgIFN0YXRlQmFzZSogbV9zdGF0ZTsKICAgICBpbnQgbV9kZXB0aDsKKyAg
ICBib29sIG1faGFzRXJyb3I7Cit9OworCitTZXJpYWxpemVyOjpTdGF0ZUJhc2UqIFNlcmlhbGl6
ZXI6OmRvU2VyaWFsaXplKHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSwgU3RhdGVCYXNlKiBu
ZXh0KQoreworICAgIGlmICh2YWx1ZS0+SXNVbmRlZmluZWQoKSkKKyAgICAgICAgbV93cml0ZXIu
d3JpdGVVbmRlZmluZWQoKTsKKyAgICBlbHNlIGlmICh2YWx1ZS0+SXNOdWxsKCkpCisgICAgICAg
IG1fd3JpdGVyLndyaXRlTnVsbCgpOworICAgIGVsc2UgaWYgKHZhbHVlLT5Jc1RydWUoKSkKKyAg
ICAgICAgbV93cml0ZXIud3JpdGVUcnVlKCk7CisgICAgZWxzZSBpZiAodmFsdWUtPklzRmFsc2Uo
KSkKKyAgICAgICAgbV93cml0ZXIud3JpdGVGYWxzZSgpOworICAgIGVsc2UgaWYgKHZhbHVlLT5J
c0ludDMyKCkpCisgICAgICAgIG1fd3JpdGVyLndyaXRlSW50MzIodmFsdWUtPkludDMyVmFsdWUo
KSk7CisgICAgZWxzZSBpZiAodmFsdWUtPklzVWludDMyKCkpCisgICAgICAgIG1fd3JpdGVyLndy
aXRlVWludDMyKHZhbHVlLT5VaW50MzJWYWx1ZSgpKTsKKyAgICBlbHNlIGlmICh2YWx1ZS0+SXNE
YXRlKCkpCisgICAgICAgIG1fd3JpdGVyLndyaXRlRGF0ZSh2YWx1ZS0+TnVtYmVyVmFsdWUoKSk7
CisgICAgZWxzZSBpZiAodmFsdWUtPklzTnVtYmVyKCkpCisgICAgICAgIG1fd3JpdGVyLndyaXRl
TnVtYmVyKHZhbHVlLkFzPHY4OjpOdW1iZXI+KCktPlZhbHVlKCkpOworICAgIGVsc2UgaWYgKHZh
bHVlLT5Jc1N0cmluZygpKQorICAgICAgICB3cml0ZVN0cmluZyh2YWx1ZSk7CisgICAgZWxzZSBp
ZiAodmFsdWUtPklzQXJyYXkoKSkKKyAgICAgICAgcmV0dXJuIHB1c2gobmV3QXJyYXlTdGF0ZSh2
YWx1ZS5Bczx2ODo6QXJyYXk+KCksIG5leHQpKTsKKyAgICBlbHNlIGlmIChWOEltYWdlRGF0YTo6
SGFzSW5zdGFuY2UodmFsdWUpKQorICAgICAgICB3cml0ZUltYWdlRGF0YSh2YWx1ZSk7CisgICAg
ZWxzZSBpZiAodmFsdWUtPklzT2JqZWN0KCkpCisgICAgICAgIHJldHVybiBwdXNoKG5ld09iamVj
dFN0YXRlKHZhbHVlLkFzPHY4OjpPYmplY3Q+KCksIG5leHQpKTsKKyAgICByZXR1cm4gMDsKK30K
KworLy8gSW50ZXJmYWNlIHVzZWQgYnkgUmVhZGVyIHRvIGNyZWF0ZSBvYmplY3RzIG9mIGNvbXBv
c2l0ZSB0eXBlcy4KK2NsYXNzIENvbXBvc2l0ZUNyZWF0b3IgeworcHVibGljOgorICAgIHZpcnR1
YWwgfkNvbXBvc2l0ZUNyZWF0b3IoKSB7IH0KKworICAgIHZpcnR1YWwgYm9vbCBjcmVhdGVBcnJh
eSh1aW50MzJfdCBsZW5ndGgsIHY4OjpIYW5kbGU8djg6OlZhbHVlPiogdmFsdWUpID0gMDsKKyAg
ICB2aXJ0dWFsIGJvb2wgY3JlYXRlT2JqZWN0KHVpbnQzMl90IG51bVByb3BlcnRpZXMsIHY4OjpI
YW5kbGU8djg6OlZhbHVlPiogdmFsdWUpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgY3JlYXRlU3Bh
cnNlQXJyYXkodWludDMyX3QgbnVtUHJvcGVydGllcywgdWludDMyX3QgbGVuZ3RoLCB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4qIHZhbHVlKSA9IDA7CiB9OwogCiAvLyBSZWFkZXIgaXMgcmVzcG9uc2li
bGUgZm9yIGRlc2VyaWFsaXppbmcgcHJpbWl0aXZlIHR5cGVzIGFuZAogLy8gcmVzdG9yaW5nIGlu
Zm9ybWF0aW9uIGFib3V0IHNhdmVkIG9iamVjdHMgb2YgY29tcG9zaXRlIHR5cGVzLgogY2xhc3Mg
UmVhZGVyIHsKIHB1YmxpYzoKLSAgICBSZWFkZXIoY29uc3QgY2hhciogYnVmZmVyLCBpbnQgbGVu
Z3RoKQorICAgIFJlYWRlcihjb25zdCB1aW50OF90KiBidWZmZXIsIGludCBsZW5ndGgpCiAgICAg
ICAgIDogbV9idWZmZXIoYnVmZmVyKQogICAgICAgICAsIG1fbGVuZ3RoKGxlbmd0aCkKICAgICAg
ICAgLCBtX3Bvc2l0aW9uKDApCkBAIC00NzgsMTYgKzU4MiwxNiBAQCBwdWJsaWM6CiAKICAgICBi
b29sIGlzRW9mKCkgY29uc3QgeyByZXR1cm4gbV9wb3NpdGlvbiA+PSBtX2xlbmd0aDsgfQogCi0g
ICAgYm9vbCByZWFkKFNlcmlhbGl6YXRpb25UYWcqIHRhZywgdjg6OkhhbmRsZTx2ODo6VmFsdWU+
KiB2YWx1ZSwgaW50KiBsZW5ndGgpCisgICAgYm9vbCByZWFkKHY4OjpIYW5kbGU8djg6OlZhbHVl
PiogdmFsdWUsIENvbXBvc2l0ZUNyZWF0b3ImIGNyZWF0b3IpCiAgICAgewotICAgICAgICB1aW50
MzJfdCByYXdMZW5ndGg7Ci0gICAgICAgIGlmICghcmVhZFRhZyh0YWcpKQorICAgICAgICBTZXJp
YWxpemF0aW9uVGFnIHRhZzsKKyAgICAgICAgaWYgKCFyZWFkVGFnKCZ0YWcpKQogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBzd2l0Y2ggKCp0YWcpIHsKKyAgICAgICAgc3dpdGNo
ICh0YWcpIHsKICAgICAgICAgY2FzZSBJbnZhbGlkVGFnOgogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICBjYXNlIFBhZGRpbmdUYWc6Ci0gICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICBjYXNlIFVuZGVmaW5lZFRhZzoKICAgICAgICAg
ICAgICp2YWx1ZSA9IHY4OjpVbmRlZmluZWQoKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtNTA4
LDE4ICs2MTIsNTMgQEAgcHVibGljOgogICAgICAgICAgICAgaWYgKCFyZWFkSW50MzIodmFsdWUp
KQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIFVpbnQzMlRhZzoKKyAgICAgICAgICAgIGlmICghcmVhZFVpbnQzMih2YWx1ZSkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgRGF0ZVRhZzoKKyAgICAgICAgICAgIGlmICghcmVhZERhdGUodmFsdWUpKQorICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBj
YXNlIE51bWJlclRhZzoKICAgICAgICAgICAgIGlmICghcmVhZE51bWJlcih2YWx1ZSkpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgT2JqZWN0VGFnOgotICAgICAgICBjYXNlIEFycmF5VGFnOgotICAgICAgICAgICAgaWYgKCFk
b1JlYWRVaW50MzIoJnJhd0xlbmd0aCkpCisgICAgICAgIGNhc2UgSW1hZ2VEYXRhVGFnOgorICAg
ICAgICAgICAgaWYgKCFyZWFkSW1hZ2VEYXRhKHZhbHVlKSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBcnJheVRhZzogewor
ICAgICAgICAgICAgdWludDMyX3QgbGVuZ3RoOworICAgICAgICAgICAgaWYgKCFkb1JlYWRVaW50
MzIoJmxlbmd0aCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
aWYgKCFjcmVhdG9yLmNyZWF0ZUFycmF5KGxlbmd0aCwgdmFsdWUpKQogICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICpsZW5ndGggPSByYXdMZW5ndGg7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgY2Fz
ZSBPYmplY3RUYWc6IHsKKyAgICAgICAgICAgIHVpbnQzMl90IG51bVByb3BlcnRpZXM7CisgICAg
ICAgICAgICBpZiAoIWRvUmVhZFVpbnQzMigmbnVtUHJvcGVydGllcykpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgaWYgKCFjcmVhdG9yLmNyZWF0ZU9iamVjdChu
dW1Qcm9wZXJ0aWVzLCB2YWx1ZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBTcGFyc2VBcnJheVRhZzog
eworICAgICAgICAgICAgdWludDMyX3QgbnVtUHJvcGVydGllczsKKyAgICAgICAgICAgIHVpbnQz
Ml90IGxlbmd0aDsKKyAgICAgICAgICAgIGlmICghZG9SZWFkVWludDMyKCZudW1Qcm9wZXJ0aWVz
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBpZiAoIWRvUmVh
ZFVpbnQzMigmbGVuZ3RoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICBpZiAoIWNyZWF0b3IuY3JlYXRlU3BhcnNlQXJyYXkobnVtUHJvcGVydGllcywgbGVuZ3Ro
LCB2YWx1ZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gIXZhbHVlLT5Jc0VtcHR5KCk7CiAgICAgfQog
CiBwcml2YXRlOgpAQCAtNTM4LDcgKzY3Nyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgIGlmIChtX3Bvc2l0aW9uICsgbGVuZ3RoID4gbV9sZW5ndGgpCiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICp2YWx1ZSA9IHY4OjpTdHJpbmc6Ok5l
dyhtX2J1ZmZlciArIG1fcG9zaXRpb24sIGxlbmd0aCk7CisgICAgICAgICp2YWx1ZSA9IHY4OjpT
dHJpbmc6Ok5ldyhyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihtX2J1ZmZlciArIG1fcG9z
aXRpb24pLCBsZW5ndGgpOwogICAgICAgICBtX3Bvc2l0aW9uICs9IGxlbmd0aDsKICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgfQpAQCAtNTUyLDIyICs2OTEsNjAgQEAgcHJpdmF0ZToKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgYm9vbCByZWFkTnVtYmVyKHY4OjpIYW5kbGU8
djg6OlZhbHVlPiogdmFsdWUpCisgICAgYm9vbCByZWFkVWludDMyKHY4OjpIYW5kbGU8djg6OlZh
bHVlPiogdmFsdWUpCiAgICAgewotICAgICAgICBpZiAobV9wb3NpdGlvbiArIHNpemVvZihkb3Vi
bGUpID4gbV9sZW5ndGgpCisgICAgICAgIHVpbnQzMl90IHJhd1ZhbHVlOworICAgICAgICBpZiAo
IWRvUmVhZFVpbnQzMigmcmF3VmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAqdmFsdWUgPSB2ODo6SW50ZWdlcjo6TmV3KHJhd1ZhbHVlKTsKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorCisgICAgYm9vbCByZWFkRGF0ZSh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4q
IHZhbHVlKQorICAgIHsKKyAgICAgICAgZG91YmxlIG51bWJlclZhbHVlOworICAgICAgICBpZiAo
IWRvUmVhZE51bWJlcigmbnVtYmVyVmFsdWUpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAqdmFsdWUgPSB2ODo6RGF0ZTo6TmV3KG51bWJlclZhbHVlKTsKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorCisgICAgYm9vbCByZWFkTnVtYmVyKHY4OjpIYW5kbGU8djg6OlZh
bHVlPiogdmFsdWUpCisgICAgewogICAgICAgICBkb3VibGUgbnVtYmVyOwotICAgICAgICBjaGFy
KiBudW1iZXJBc0J5dGVBcnJheSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KCZudW1iZXIpOwot
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZW9mKGRvdWJsZSk7ICsraSkKLSAg
ICAgICAgICAgIG51bWJlckFzQnl0ZUFycmF5W2ldID0gbV9idWZmZXJbbV9wb3NpdGlvbisrXTsK
KyAgICAgICAgaWYgKCFkb1JlYWROdW1iZXIoJm51bWJlcikpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgICAgICp2YWx1ZSA9IHY4OjpOdW1iZXI6Ok5ldyhudW1iZXIpOwogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKKyAgICBib29sIHJlYWRJbWFnZURhdGEodjg6OkhhbmRs
ZTx2ODo6VmFsdWU+KiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHVpbnQzMl90IHdpZHRoOworICAg
ICAgICB1aW50MzJfdCBoZWlnaHQ7CisgICAgICAgIHVpbnQzMl90IHBpeGVsRGF0YUxlbmd0aDsK
KyAgICAgICAgaWYgKCFkb1JlYWRVaW50MzIoJndpZHRoKSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgaWYgKCFkb1JlYWRVaW50MzIoJmhlaWdodCkpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICghZG9SZWFkVWludDMyKCZwaXhlbERhdGFMZW5ndGgp
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAobV9wb3NpdGlvbiArIHBp
eGVsRGF0YUxlbmd0aCA+IG1fbGVuZ3RoKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICBQYXNzUmVmUHRyPEltYWdlRGF0YT4gaW1hZ2VEYXRhID0gSW1hZ2VEYXRhOjpjcmVhdGUo
d2lkdGgsIGhlaWdodCk7CisgICAgICAgIFdURjo6Qnl0ZUFycmF5KiBwaXhlbEFycmF5ID0gaW1h
Z2VEYXRhLT5kYXRhKCktPmRhdGEoKTsKKyAgICAgICAgQVNTRVJUKHBpeGVsQXJyYXkpOworICAg
ICAgICBBU1NFUlQocGl4ZWxBcnJheS0+bGVuZ3RoKCkgPj0gcGl4ZWxEYXRhTGVuZ3RoKTsKKyAg
ICAgICAgbWVtY3B5KHBpeGVsQXJyYXktPmRhdGEoKSwgbV9idWZmZXIgKyBtX3Bvc2l0aW9uLCBw
aXhlbERhdGFMZW5ndGgpOworICAgICAgICBtX3Bvc2l0aW9uICs9IHBpeGVsRGF0YUxlbmd0aDsK
KyAgICAgICAgKnZhbHVlID0gdG9WOChpbWFnZURhdGEpOworICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisKICAgICBib29sIGRvUmVhZFVpbnQzMih1aW50MzJfdCogdmFsdWUpCiAgICAgewog
ICAgICAgICAqdmFsdWUgPSAwOwotICAgICAgICBjaGFyIGN1cnJlbnRCeXRlOworICAgICAgICB1
aW50OF90IGN1cnJlbnRCeXRlOwogICAgICAgICBpbnQgc2hpZnQgPSAwOwogICAgICAgICBkbyB7
CiAgICAgICAgICAgICBpZiAobV9wb3NpdGlvbiA+PSBtX2xlbmd0aCkKQEAgLTU3OSwxNCArNzU2
LDI1IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIGNvbnN0
IGNoYXIqIG1fYnVmZmVyOworICAgIGJvb2wgZG9SZWFkTnVtYmVyKGRvdWJsZSogbnVtYmVyKQor
ICAgIHsKKyAgICAgICAgaWYgKG1fcG9zaXRpb24gKyBzaXplb2YoZG91YmxlKSA+IG1fbGVuZ3Ro
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB1aW50OF90KiBudW1iZXJBc0J5
dGVBcnJheSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KG51bWJlcik7CisgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplb2YoZG91YmxlKTsgKytpKQorICAgICAgICAgICAg
bnVtYmVyQXNCeXRlQXJyYXlbaV0gPSBtX2J1ZmZlclttX3Bvc2l0aW9uKytdOworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBjb25zdCB1aW50OF90KiBtX2J1ZmZlcjsKICAgICBj
b25zdCB1bnNpZ25lZCBtX2xlbmd0aDsKICAgICB1bnNpZ25lZCBtX3Bvc2l0aW9uOwogfTsKIAot
Y2xhc3MgRGVzZXJpYWxpemVyIHsKK2NsYXNzIERlc2VyaWFsaXplciA6IHB1YmxpYyBDb21wb3Np
dGVDcmVhdG9yIHsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBEZXNlcmlhbGl6ZXIoUmVhZGVyJiBy
ZWFkZXIpIDogbV9yZWFkZXIocmVhZGVyKQorICAgIGV4cGxpY2l0IERlc2VyaWFsaXplcihSZWFk
ZXImIHJlYWRlcikKKyAgICAgICAgOiBtX3JlYWRlcihyZWFkZXIpCiAgICAgewogICAgIH0KIApA
QCAtNjAyLDQxICs3OTAsNjAgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gc2NvcGUuQ2xvc2Uo
ZWxlbWVudCgwKSk7CiAgICAgfQogCisgICAgdmlydHVhbCBib29sIGNyZWF0ZUFycmF5KHVpbnQz
Ml90IGxlbmd0aCwgdjg6OkhhbmRsZTx2ODo6VmFsdWU+KiB2YWx1ZSkKKyAgICB7CisgICAgICAg
IGlmIChsZW5ndGggPiBzdGFja0RlcHRoKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIHY4OjpMb2NhbDx2ODo6QXJyYXk+IGFycmF5ID0gdjg6OkFycmF5OjpOZXcobGVuZ3Ro
KTsKKyAgICAgICAgaWYgKGFycmF5LklzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgY29uc3QgaW50IGRlcHRoID0gc3RhY2tEZXB0aCgpIC0gbGVuZ3RoOworICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCisgICAgICAgICAgICBh
cnJheS0+U2V0KGksIGVsZW1lbnQoZGVwdGggKyBpKSk7CisgICAgICAgIHBvcChsZW5ndGgpOwor
ICAgICAgICAqdmFsdWUgPSBhcnJheTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisg
ICAgdmlydHVhbCBib29sIGNyZWF0ZU9iamVjdCh1aW50MzJfdCBudW1Qcm9wZXJ0aWVzLCB2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4qIHZhbHVlKQorICAgIHsKKyAgICAgICAgdjg6OkxvY2FsPHY4OjpP
YmplY3Q+IG9iamVjdCA9IHY4OjpPYmplY3Q6Ok5ldygpOworICAgICAgICBpZiAob2JqZWN0Lklz
RW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIGluaXRp
YWxpemVPYmplY3Qob2JqZWN0LCBudW1Qcm9wZXJ0aWVzLCB2YWx1ZSk7CisgICAgfQorCisgICAg
dmlydHVhbCBib29sIGNyZWF0ZVNwYXJzZUFycmF5KHVpbnQzMl90IG51bVByb3BlcnRpZXMsIHVp
bnQzMl90IGxlbmd0aCwgdjg6OkhhbmRsZTx2ODo6VmFsdWU+KiB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIHY4OjpMb2NhbDx2ODo6QXJyYXk+IGFycmF5ID0gdjg6OkFycmF5OjpOZXcobGVuZ3RoKTsK
KyAgICAgICAgaWYgKGFycmF5LklzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgcmV0dXJuIGluaXRpYWxpemVPYmplY3QoYXJyYXksIG51bVByb3BlcnRpZXMsIHZh
bHVlKTsKKyAgICB9CisKIHByaXZhdGU6CisgICAgYm9vbCBpbml0aWFsaXplT2JqZWN0KHY4OjpI
YW5kbGU8djg6Ok9iamVjdD4gb2JqZWN0LCB1aW50MzJfdCBudW1Qcm9wZXJ0aWVzLCB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4qIHZhbHVlKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0g
MiAqIG51bVByb3BlcnRpZXM7CisgICAgICAgIGlmIChsZW5ndGggPiBzdGFja0RlcHRoKCkpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHN0YWNr
RGVwdGgoKSAtIGxlbmd0aDsgaSA8IHN0YWNrRGVwdGgoKTsgaSArPSAyKSB7CisgICAgICAgICAg
ICB2ODo6TG9jYWw8djg6OlZhbHVlPiBwcm9wZXJ0eU5hbWUgPSBlbGVtZW50KGkpOworICAgICAg
ICAgICAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gcHJvcGVydHlWYWx1ZSA9IGVsZW1lbnQoaSArIDEp
OworICAgICAgICAgICAgb2JqZWN0LT5TZXQocHJvcGVydHlOYW1lLCBwcm9wZXJ0eVZhbHVlKTsK
KyAgICAgICAgfQorICAgICAgICBwb3AobGVuZ3RoKTsKKyAgICAgICAgKnZhbHVlID0gb2JqZWN0
OworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKICAgICBib29sIGRvRGVzZXJpYWxpemUo
KQogICAgIHsKLSAgICAgICAgU2VyaWFsaXphdGlvblRhZyB0YWc7CiAgICAgICAgIHY4OjpMb2Nh
bDx2ODo6VmFsdWU+IHZhbHVlOwotICAgICAgICBpbnQgbGVuZ3RoID0gMDsKLSAgICAgICAgaWYg
KCFtX3JlYWRlci5yZWFkKCZ0YWcsICZ2YWx1ZSwgJmxlbmd0aCkpCisgICAgICAgIGlmICghbV9y
ZWFkZXIucmVhZCgmdmFsdWUsICp0aGlzKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgaWYgKCF2YWx1ZS5Jc0VtcHR5KCkpIHsKKyAgICAgICAgaWYgKCF2YWx1ZS5Jc0VtcHR5
KCkpCiAgICAgICAgICAgICBwdXNoKHZhbHVlKTsKLSAgICAgICAgfSBlbHNlIGlmICh0YWcgPT0g
T2JqZWN0VGFnKSB7Ci0gICAgICAgICAgICBpZiAobGVuZ3RoID4gc3RhY2tEZXB0aCgpKQotICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIHY4OjpMb2NhbDx2ODo6T2Jq
ZWN0PiBvYmplY3QgPSB2ODo6T2JqZWN0OjpOZXcoKTsKLSAgICAgICAgICAgIGZvciAoaW50IGkg
PSBzdGFja0RlcHRoKCkgLSBsZW5ndGg7IGkgPCBzdGFja0RlcHRoKCk7IGkgKz0gMikgewotICAg
ICAgICAgICAgICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHByb3BlcnR5TmFtZSA9IGVsZW1lbnQo
aSk7Ci0gICAgICAgICAgICAgICAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gcHJvcGVydHlWYWx1ZSA9
IGVsZW1lbnQoaSArIDEpOwotICAgICAgICAgICAgICAgIG9iamVjdC0+U2V0KHByb3BlcnR5TmFt
ZSwgcHJvcGVydHlWYWx1ZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBwb3AobGVuZ3Ro
KTsKLSAgICAgICAgICAgIHB1c2gob2JqZWN0KTsKLSAgICAgICAgfSBlbHNlIGlmICh0YWcgPT0g
QXJyYXlUYWcpIHsKLSAgICAgICAgICAgIGlmIChsZW5ndGggPiBzdGFja0RlcHRoKCkpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgdjg6OkxvY2FsPHY4OjpBcnJh
eT4gYXJyYXkgPSB2ODo6QXJyYXk6Ok5ldyhsZW5ndGgpOwotICAgICAgICAgICAgY29uc3QgaW50
IGRlcHRoID0gc3RhY2tEZXB0aCgpIC0gbGVuZ3RoOwotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIHY4OjpIYW5kbGVTY29wZSBzY29wZTsKLSAgICAgICAgICAgICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IGxlbmd0aDsgKytpKQotICAgICAgICAgICAgICAgICAgICBhcnJheS0+U2V0KHY4
OjpJbnRlZ2VyOjpOZXcoaSksIGVsZW1lbnQoZGVwdGggKyBpKSk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBwb3AobGVuZ3RoKTsKLSAgICAgICAgICAgIHB1c2goYXJyYXkpOwotICAgICAg
ICB9IGVsc2UgaWYgKHRhZyAhPSBQYWRkaW5nVGFnKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTY0OCw3ICs4NTUsNyBAQCBwcml2
YXRlOgogICAgICAgICBtX3N0YWNrLnNocmluayhtX3N0YWNrLnNpemUoKSAtIGxlbmd0aCk7CiAg
ICAgfQogCi0gICAgaW50IHN0YWNrRGVwdGgoKSBjb25zdCB7IHJldHVybiBtX3N0YWNrLnNpemUo
KTsgfQorICAgIHVuc2lnbmVkIHN0YWNrRGVwdGgoKSBjb25zdCB7IHJldHVybiBtX3N0YWNrLnNp
emUoKTsgfQogCiAgICAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gZWxlbWVudCh1bnNpZ25lZCBpbmRl
eCkKICAgICB7CkBAIC02OTEsNyArODk4LDcgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZTo6ZGVzZXJpYWxpemUoKQogICAgIGlmICghbV9kYXRhLmltcGwoKSkK
ICAgICAgICAgcmV0dXJuIHY4OjpOdWxsKCk7CiAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKEJ1
ZmZlclZhbHVlVHlwZSkgPT0gMiwgQnVmZmVyVmFsdWVUeXBlSXNUd29CeXRlcyk7Ci0gICAgUmVh
ZGVyIHJlYWRlcihyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihtX2RhdGEuaW1wbCgpLT5j
aGFyYWN0ZXJzKCkpLCAyICogbV9kYXRhLmxlbmd0aCgpKTsKKyAgICBSZWFkZXIgcmVhZGVyKHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KG1fZGF0YS5pbXBsKCktPmNoYXJhY3RlcnMo
KSksIDIgKiBtX2RhdGEubGVuZ3RoKCkpOwogICAgIERlc2VyaWFsaXplciBkZXNlcmlhbGl6ZXIo
cmVhZGVyKTsKICAgICByZXR1cm4gZGVzZXJpYWxpemVyLmRlc2VyaWFsaXplKCk7CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>52625</attachid>
            <date>2010-04-06 06:32:46 -0700</date>
            <delta_ts>2010-04-06 06:32:46 -0700</delta_ts>
            <desc>patch v1.2: fixed delete bug in handleError</desc>
            <filename>serialize.patch</filename>
            <type>text/plain</type>
            <size>34461</size>
            <attacher name="Vitaly Repeshko">vitalyr</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
OTk3Yjg5Yy4uYzlkZTI0YyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw4NCBAQAorMjAxMC0wNC0wNiAgVml0YWx5IFJlcGVz
aGtvICA8dml0YWx5ckBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgWXVyeSBT
ZW1pa2hhdHNreS4KKworICAgICAgICBbVjhdIEV4dGVuZCB0aGUgc2V0IG9mIHR5cGVzIHN1cHBv
cnRlZCBieSBTZXJpYWxpemVkU2NyaXB0VmFsdWUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTM3MDUyCisKKyAgICAgICAgTmV3IHR5cGVzIGluY2x1ZGUg
c3BhcnNlIGFycmF5cywgVWludDMyLCBEYXRlLCBhbmQgSW1hZ2VEYXRhLgorCisgICAgICAgIFNl
cmlhbGl6YXRpb24gcHJvY2VzcyBiZWNhbWUgbW9yZSBmbGV4aWJsZS4gQSBzdGF0ZSBjYW4gZWl0
aGVyCisgICAgICAgIGRpcmVjdGx5IHdyaXRlIHByaW1pdGl2ZSB2YWx1ZXMgKGluc3RlYWQgb2Yg
cmV0dXJuaW5nIHRoZW0gbGlrZQorICAgICAgICBpdGVyYXRvcikgb3IgY29uc3RydWN0IGEgbmV3
IHN0YXRlIGZvciBzZXJpYWxpemluZyBjb21wbGV4IHZhbHVlcworICAgICAgICB0aGF0IHdpbGwg
cmV0dXJuIHRvIHRoZSBjdXJyZW50IHN0YXRlIHdoZW4gZG9uZS4KKworICAgICAgICBEZXNlcmlh
bGl6YXRpb24gcHJvY2VzcyBub3cgYXZvaWRzIGV4cG9zaW5nIHRoZSB0YWdzIHVzaW5nIGEgc2V0
CisgICAgICAgIG9mIGZhY3RvcnkgZnVuY3Rpb25zIGZvciBjb21wbGV4IG9iamVjdHMgaW5zdGVh
ZC4KKworICAgICAgICBJbnRlcm5hbCBidWZmZXIgdHlwZSBjaGFuZ2VkIHRvIHVpbnQ4X3QgdG8g
YmUgaW5kZXBlbmRlbnQgb2YKKyAgICAgICAgd2hldGhlciBjaGFyIGlzIHNpZ25lZCBvciBub3Qu
CisKKyAgICAgICAgKiBiaW5kaW5ncy92OC9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6KToKKyAgICAgICAgKFdlYkNvcmU6OldyaXRlcjo6V3JpdGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OldyaXRlcjo6d3JpdGVTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6
V3JpdGVyOjp3cml0ZVVpbnQzMik6CisgICAgICAgIChXZWJDb3JlOjpXcml0ZXI6OndyaXRlRGF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpXcml0ZXI6OndyaXRlTnVtYmVyKToKKyAgICAgICAgKFdl
YkNvcmU6OldyaXRlcjo6d3JpdGVJbWFnZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6V3JpdGVy
Ojp3cml0ZUFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6OldyaXRlcjo6d3JpdGVPYmplY3QpOgor
ICAgICAgICAoV2ViQ29yZTo6V3JpdGVyOjp3cml0ZVNwYXJzZUFycmF5KToKKyAgICAgICAgKFdl
YkNvcmU6OldyaXRlcjo6ZG9Xcml0ZVVpbnQzMik6CisgICAgICAgIChXZWJDb3JlOjpXcml0ZXI6
OmRvV3JpdGVOdW1iZXIpOgorICAgICAgICAoV2ViQ29yZTo6V3JpdGVyOjphcHBlbmQpOgorICAg
ICAgICAoV2ViQ29yZTo6V3JpdGVyOjpmaWxsSG9sZSk6CisgICAgICAgIChXZWJDb3JlOjpXcml0
ZXI6OmJ5dGVBdCk6CisgICAgICAgIChXZWJDb3JlOjpTZXJpYWxpemVyOjpTZXJpYWxpemVyKToK
KyAgICAgICAgKFdlYkNvcmU6OlNlcmlhbGl6ZXI6OnNlcmlhbGl6ZSk6CisgICAgICAgIChXZWJD
b3JlOjpTZXJpYWxpemVyOjp3cml0ZUFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6OlNlcmlhbGl6
ZXI6OndyaXRlT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNlcmlhbGl6ZXI6OndyaXRlU3Bh
cnNlQXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6U2VyaWFsaXplcjo6U3RhdGVCYXNlOjpTdGF0
ZUJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6U2VyaWFsaXplcjo6RXJyb3JTdGF0ZTo6RXJyb3JT
dGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTZXJpYWxpemVyOjpFcnJvclN0YXRlOjphZHZhbmNl
KToKKyAgICAgICAgKFdlYkNvcmU6OlNlcmlhbGl6ZXI6OlN0YXRlOjpjb21wb3NpdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6U2VyaWFsaXplcjo6U3RhdGU6OlN0YXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OlNlcmlhbGl6ZXI6OkFycmF5U3RhdGU6OkFycmF5U3RhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6U2VyaWFsaXplcjo6QXJyYXlTdGF0ZTo6YWR2YW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpT
ZXJpYWxpemVyOjpBYnN0cmFjdE9iamVjdFN0YXRlOjpBYnN0cmFjdE9iamVjdFN0YXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNlcmlhbGl6ZXI6OkFic3RyYWN0T2JqZWN0U3RhdGU6OmFkdmFuY2Up
OgorICAgICAgICAoV2ViQ29yZTo6U2VyaWFsaXplcjo6T2JqZWN0U3RhdGU6Ok9iamVjdFN0YXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OlNlcmlhbGl6ZXI6Ok9iamVjdFN0YXRlOjpvYmplY3REb25l
KToKKyAgICAgICAgKFdlYkNvcmU6OlNlcmlhbGl6ZXI6OlNwYXJzZUFycmF5U3RhdGU6OlNwYXJz
ZUFycmF5U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U2VyaWFsaXplcjo6U3BhcnNlQXJyYXlT
dGF0ZTo6b2JqZWN0RG9uZSk6CisgICAgICAgIChXZWJDb3JlOjpTZXJpYWxpemVyOjpwdXNoKToK
KyAgICAgICAgKFdlYkNvcmU6OlNlcmlhbGl6ZXI6OnBvcCk6CisgICAgICAgIChXZWJDb3JlOjpT
ZXJpYWxpemVyOjpoYW5kbGVFcnJvcik6CisgICAgICAgIChXZWJDb3JlOjpTZXJpYWxpemVyOjpj
aGVja0NvbXBvc2l0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTZXJpYWxpemVyOjp3cml0ZVN0cmlu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpTZXJpYWxpemVyOjp3cml0ZUltYWdlRGF0YSk6CisgICAg
ICAgIChXZWJDb3JlOjpTZXJpYWxpemVyOjpuZXdBcnJheVN0YXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OlNlcmlhbGl6ZXI6Om5ld09iamVjdFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNlcmlh
bGl6ZXI6OmRvU2VyaWFsaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWRlcjo6UmVhZGVyKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlYWRlcjo6cmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpSZWFk
ZXI6OnJlYWRTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVhZGVyOjpyZWFkVWludDMyKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlYWRlcjo6cmVhZERhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
UmVhZGVyOjpyZWFkTnVtYmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWRlcjo6cmVhZEltYWdl
RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpSZWFkZXI6OmRvUmVhZFVpbnQzMik6CisgICAgICAg
IChXZWJDb3JlOjpSZWFkZXI6OmRvUmVhZE51bWJlcik6CisgICAgICAgIChXZWJDb3JlOjpEZXNl
cmlhbGl6ZXI6OkRlc2VyaWFsaXplcik6CisgICAgICAgIChXZWJDb3JlOjpEZXNlcmlhbGl6ZXI6
OmNyZWF0ZUFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6OkRlc2VyaWFsaXplcjo6Y3JlYXRlT2Jq
ZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRlc2VyaWFsaXplcjo6Y3JlYXRlU3BhcnNlQXJyYXkp
OgorICAgICAgICAoV2ViQ29yZTo6RGVzZXJpYWxpemVyOjppbml0aWFsaXplT2JqZWN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkRlc2VyaWFsaXplcjo6ZG9EZXNlcmlhbGl6ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpEZXNlcmlhbGl6ZXI6OnN0YWNrRGVwdGgpOgorICAgICAgICAoV2ViQ29yZTo6U2Vy
aWFsaXplZFNjcmlwdFZhbHVlOjpkZXNlcmlhbGl6ZSk6CisKIDIwMTAtMDQtMDYgIENzYWJhIE9z
enRyb2dvbsOhYyAgPG9zc3lAd2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJldmlld2VkIGJ1aWxk
Zml4IGZvciAtLW1pbmltYWwgYnVpbGQuCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NlcmlhbGl6
ZWRTY3JpcHRWYWx1ZS5jcHAKaW5kZXggNDY2NDVkNS4uOGI4NmViZSAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9iaW5kaW5ncy92OC9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCisrKyBiL1dlYkNvcmUv
YmluZGluZ3MvdjgvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcApAQCAtMzEsNyArMzEsMTEgQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIK
IAorI2luY2x1ZGUgIkJ5dGVBcnJheS5oIgorI2luY2x1ZGUgIkNhbnZhc1BpeGVsQXJyYXkuaCIK
KyNpbmNsdWRlICJJbWFnZURhdGEuaCIKICNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKyNpbmNs
dWRlICJWOEltYWdlRGF0YS5oIgogCiAjaW5jbHVkZSA8djguaD4KICNpbmNsdWRlIDx3dGYvQXNz
ZXJ0aW9ucy5oPgpAQCAtNDAsNyArNDQsNiBAQAogCiAvLyBGSVhNRToKIC8vIC0gY2F0Y2ggVjgg
ZXhjZXB0aW9ucwotLy8gLSBiZSByZWFkeSB0byBnZXQgZW1wdHkgaGFuZGxlcwogLy8gLSBjb25z
aWRlciBjcmFzaGluZyBpbiBkZWJ1ZyBtb2RlIG9uIGRlc2VyaWFsaXphdGlvbiBlcnJvcnMKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNjAsMTkgKzYzLDE1IEBAIGVudW0gU2VyaWFsaXphdGlv
blRhZyB7CiAgICAgRmFsc2VUYWcgPSAnRicsCiAgICAgU3RyaW5nVGFnID0gJ1MnLAogICAgIElu
dDMyVGFnID0gJ0knLAorICAgIFVpbnQzMlRhZyA9ICdVJywKKyAgICBEYXRlVGFnID0gJ0QnLAog
ICAgIE51bWJlclRhZyA9ICdOJywKLSAgICBPYmplY3RUYWcgPSAneycsCisgICAgSW1hZ2VEYXRh
VGFnID0gJyMnLAogICAgIEFycmF5VGFnID0gJ1snLAorICAgIE9iamVjdFRhZyA9ICd7JywKKyAg
ICBTcGFyc2VBcnJheVRhZyA9ICdAJywKIH07CiAKLS8vIEhlbHBlcnMgdG8gZG8gdmVyYm9zZSBo
YW5kbGUgY2FzdHMuCi0KLXRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPgotc3RhdGlj
IHY4OjpIYW5kbGU8VD4gaGFuZGxlQ2FzdCh2ODo6SGFuZGxlPFU+IGhhbmRsZSkgeyByZXR1cm4g
djg6OkhhbmRsZTxUPjo6Q2FzdChoYW5kbGUpOyB9Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBULCB0
eXBlbmFtZSBVPgotc3RhdGljIHY4OjpMb2NhbDxUPiBoYW5kbGVDYXN0KHY4OjpMb2NhbDxVPiBo
YW5kbGUpIHsgcmV0dXJuIHY4OjpMb2NhbDxUPjo6Q2FzdChoYW5kbGUpOyB9Ci0KIHN0YXRpYyBi
b29sIHNob3VsZENoZWNrRm9yQ3ljbGVzKGludCBkZXB0aCkKIHsKICAgICBBU1NFUlQoZGVwdGgg
Pj0gMCk7CkBAIC0xMTgsNyArMTE3LDggQEAgcHJpdmF0ZToKIC8vIGluZm9ybWF0aW9uIHVzZWQg
dG8gcmVjb25zdHJ1Y3QgY29tcG9zaXRlIHR5cGVzLgogY2xhc3MgV3JpdGVyIDogTm9uY29weWFi
bGUgewogcHVibGljOgotICAgIFdyaXRlcigpIDogbV9wb3NpdGlvbigwKQorICAgIFdyaXRlcigp
CisgICAgICAgIDogbV9wb3NpdGlvbigwKQogICAgIHsKICAgICB9CiAKQEAgLTEzNCw5ICsxMzQs
MTAgQEAgcHVibGljOgogCiAgICAgdm9pZCB3cml0ZVN0cmluZyhjb25zdCBjaGFyKiBkYXRhLCBp
bnQgbGVuZ3RoKQogICAgIHsKKyAgICAgICAgQVNTRVJUKGxlbmd0aCA+PSAwKTsKICAgICAgICAg
YXBwZW5kKFN0cmluZ1RhZyk7CiAgICAgICAgIGRvV3JpdGVVaW50MzIoc3RhdGljX2Nhc3Q8dWlu
dDMyX3Q+KGxlbmd0aCkpOwotICAgICAgICBhcHBlbmQoZGF0YSwgbGVuZ3RoKTsKKyAgICAgICAg
YXBwZW5kKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGRhdGEpLCBsZW5ndGgpOwog
ICAgIH0KIAogICAgIHZvaWQgd3JpdGVJbnQzMihpbnQzMl90IHZhbHVlKQpAQCAtMTQ1LDE5ICsx
NDYsNTAgQEAgcHVibGljOgogICAgICAgICBkb1dyaXRlVWludDMyKFppZ1phZzo6ZW5jb2RlKHN0
YXRpY19jYXN0PHVpbnQzMl90Pih2YWx1ZSkpKTsKICAgICB9CiAKKyAgICB2b2lkIHdyaXRlVWlu
dDMyKHVpbnQzMl90IHZhbHVlKQorICAgIHsKKyAgICAgICAgYXBwZW5kKFVpbnQzMlRhZyk7Cisg
ICAgICAgIGRvV3JpdGVVaW50MzIodmFsdWUpOworICAgIH0KKworICAgIHZvaWQgd3JpdGVEYXRl
KGRvdWJsZSBudW1iZXJWYWx1ZSkKKyAgICB7CisgICAgICAgIGFwcGVuZChEYXRlVGFnKTsKKyAg
ICAgICAgZG9Xcml0ZU51bWJlcihudW1iZXJWYWx1ZSk7CisgICAgfQorCiAgICAgdm9pZCB3cml0
ZU51bWJlcihkb3VibGUgbnVtYmVyKQogICAgIHsKICAgICAgICAgYXBwZW5kKE51bWJlclRhZyk7
Ci0gICAgICAgIGFwcGVuZChyZWludGVycHJldF9jYXN0PGNoYXIqPigmbnVtYmVyKSwgc2l6ZW9m
KG51bWJlcikpOworICAgICAgICBkb1dyaXRlTnVtYmVyKG51bWJlcik7CiAgICAgfQogCi0gICAg
Ly8gUmVjb3JkcyB0aGF0IGEgY29tcG9zaXRlIG9iamVjdCBjYW4gYmUgY29uc3RydWN0ZWQgYnkg
dXNpbmcKLSAgICAvLyB8bGVuZ3RofCBwcmV2aW91c2x5IHN0b3JlZCB2YWx1ZXMuCi0gICAgdm9p
ZCBlbmRDb21wb3NpdGUoU2VyaWFsaXphdGlvblRhZyB0YWcsIGludDMyX3QgbGVuZ3RoKQorICAg
IHZvaWQgd3JpdGVJbWFnZURhdGEodWludDMyX3Qgd2lkdGgsIHVpbnQzMl90IGhlaWdodCwgY29u
c3QgdWludDhfdCogcGl4ZWxEYXRhLCB1aW50MzJfdCBwaXhlbERhdGFMZW5ndGgpCiAgICAgewot
ICAgICAgICBBU1NFUlQodGFnID09IE9iamVjdFRhZyB8fCB0YWcgPT0gQXJyYXlUYWcpOwotICAg
ICAgICBhcHBlbmQodGFnKTsKLSAgICAgICAgZG9Xcml0ZVVpbnQzMihzdGF0aWNfY2FzdDx1aW50
MzJfdD4obGVuZ3RoKSk7CisgICAgICAgIGFwcGVuZChJbWFnZURhdGFUYWcpOworICAgICAgICBk
b1dyaXRlVWludDMyKHdpZHRoKTsKKyAgICAgICAgZG9Xcml0ZVVpbnQzMihoZWlnaHQpOworICAg
ICAgICBkb1dyaXRlVWludDMyKHBpeGVsRGF0YUxlbmd0aCk7CisgICAgICAgIGFwcGVuZChwaXhl
bERhdGEsIHBpeGVsRGF0YUxlbmd0aCk7CisgICAgfQorCisgICAgdm9pZCB3cml0ZUFycmF5KHVp
bnQzMl90IGxlbmd0aCkKKyAgICB7CisgICAgICAgIGFwcGVuZChBcnJheVRhZyk7CisgICAgICAg
IGRvV3JpdGVVaW50MzIobGVuZ3RoKTsKKyAgICB9CisKKyAgICB2b2lkIHdyaXRlT2JqZWN0KHVp
bnQzMl90IG51bVByb3BlcnRpZXMpCisgICAgeworICAgICAgICBhcHBlbmQoT2JqZWN0VGFnKTsK
KyAgICAgICAgZG9Xcml0ZVVpbnQzMihudW1Qcm9wZXJ0aWVzKTsKKyAgICB9CisKKyAgICB2b2lk
IHdyaXRlU3BhcnNlQXJyYXkodWludDMyX3QgbnVtUHJvcGVydGllcywgdWludDMyX3QgbGVuZ3Ro
KQorICAgIHsKKyAgICAgICAgYXBwZW5kKFNwYXJzZUFycmF5VGFnKTsKKyAgICAgICAgZG9Xcml0
ZVVpbnQzMihudW1Qcm9wZXJ0aWVzKTsKKyAgICAgICAgZG9Xcml0ZVVpbnQzMihsZW5ndGgpOwog
ICAgIH0KIAogICAgIFZlY3RvcjxCdWZmZXJWYWx1ZVR5cGU+JiBkYXRhKCkKQEAgLTE3MCw3ICsy
MDIsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgZG9Xcml0ZVVpbnQzMih1aW50MzJfdCB2YWx1ZSkK
ICAgICB7CiAgICAgICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgICAgICBjaGFyIGIgPSAodmFs
dWUgJiB2YXJJbnRNYXNrKTsKKyAgICAgICAgICAgIHVpbnQ4X3QgYiA9ICh2YWx1ZSAmIHZhcklu
dE1hc2spOwogICAgICAgICAgICAgdmFsdWUgPj49IHZhckludFNoaWZ0OwogICAgICAgICAgICAg
aWYgKCF2YWx1ZSkgewogICAgICAgICAgICAgICAgIGFwcGVuZChiKTsKQEAgLTE4MCwyMSArMjEy
LDI2IEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICB9CiAKKyAgICB2b2lkIGRvV3JpdGVOdW1i
ZXIoZG91YmxlIG51bWJlcikKKyAgICB7CisgICAgICAgIGFwcGVuZChyZWludGVycHJldF9jYXN0
PHVpbnQ4X3QqPigmbnVtYmVyKSwgc2l6ZW9mKG51bWJlcikpOworICAgIH0KKwogICAgIHZvaWQg
YXBwZW5kKFNlcmlhbGl6YXRpb25UYWcgdGFnKQogICAgIHsKLSAgICAgICAgYXBwZW5kKHN0YXRp
Y19jYXN0PGNoYXI+KHRhZykpOworICAgICAgICBhcHBlbmQoc3RhdGljX2Nhc3Q8dWludDhfdD4o
dGFnKSk7CiAgICAgfQogCi0gICAgdm9pZCBhcHBlbmQoY2hhciBiKQorICAgIHZvaWQgYXBwZW5k
KHVpbnQ4X3QgYikKICAgICB7CiAgICAgICAgIGVuc3VyZVNwYWNlKDEpOwotICAgICAgICAqY2hh
ckF0KG1fcG9zaXRpb24rKykgPSBiOworICAgICAgICAqYnl0ZUF0KG1fcG9zaXRpb24rKykgPSBi
OwogICAgIH0KIAotICAgIHZvaWQgYXBwZW5kKGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgp
CisgICAgdm9pZCBhcHBlbmQoY29uc3QgdWludDhfdCogZGF0YSwgaW50IGxlbmd0aCkKICAgICB7
CiAgICAgICAgIGVuc3VyZVNwYWNlKGxlbmd0aCk7Ci0gICAgICAgIG1lbWNweShjaGFyQXQobV9w
b3NpdGlvbiksIGRhdGEsIGxlbmd0aCk7CisgICAgICAgIG1lbWNweShieXRlQXQobV9wb3NpdGlv
biksIGRhdGEsIGxlbmd0aCk7CiAgICAgICAgIG1fcG9zaXRpb24gKz0gbGVuZ3RoOwogICAgIH0K
IApAQCAtMjEwLDQxICsyNDcsNTQgQEAgcHJpdmF0ZToKICAgICAgICAgLy8gSWYgdGhlIHdyaXRl
ciBpcyBhdCBvZGQgcG9zaXRpb24gaW4gdGhlIGJ1ZmZlciwgdGhlbiBvbmUgb2YKICAgICAgICAg
Ly8gdGhlIGJ5dGVzIGluIHRoZSBsYXN0IFVDaGFyIGlzIG5vdCBpbml0aWFsaXplZC4KICAgICAg
ICAgaWYgKG1fcG9zaXRpb24gJSAyKQotICAgICAgICAgICAgKmNoYXJBdChtX3Bvc2l0aW9uKSA9
IHN0YXRpY19jYXN0PGNoYXI+KFBhZGRpbmdUYWcpOworICAgICAgICAgICAgKmJ5dGVBdChtX3Bv
c2l0aW9uKSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KFBhZGRpbmdUYWcpOwogICAgIH0KIAotICAg
IGNoYXIqIGNoYXJBdChpbnQgcG9zaXRpb24pIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hh
cio+KG1fYnVmZmVyLmRhdGEoKSkgKyBwb3NpdGlvbjsgfQorICAgIHVpbnQ4X3QqIGJ5dGVBdChp
bnQgcG9zaXRpb24pIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KG1fYnVmZmVy
LmRhdGEoKSkgKyBwb3NpdGlvbjsgfQogCiAgICAgVmVjdG9yPEJ1ZmZlclZhbHVlVHlwZT4gbV9i
dWZmZXI7CiAgICAgdW5zaWduZWQgbV9wb3NpdGlvbjsKIH07CiAKIGNsYXNzIFNlcmlhbGl6ZXIg
eworICAgIGNsYXNzIFN0YXRlQmFzZTsKIHB1YmxpYzoKICAgICBleHBsaWNpdCBTZXJpYWxpemVy
KFdyaXRlciYgd3JpdGVyKQogICAgICAgICA6IG1fd3JpdGVyKHdyaXRlcikKLSAgICAgICAgLCBt
X3N0YXRlKDApCiAgICAgICAgICwgbV9kZXB0aCgwKQorICAgICAgICAsIG1faGFzRXJyb3IoZmFs
c2UpCiAgICAgewogICAgIH0KIAogICAgIGJvb2wgc2VyaWFsaXplKHY4OjpIYW5kbGU8djg6OlZh
bHVlPiB2YWx1ZSkKICAgICB7CiAgICAgICAgIHY4OjpIYW5kbGVTY29wZSBzY29wZTsKLSAgICAg
ICAgU3RhY2tDbGVhbmVyIGNsZWFuZXIoJm1fc3RhdGUpOwotICAgICAgICBpZiAoIWRvU2VyaWFs
aXplKHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgd2hpbGUgKHRv
cCgpKSB7Ci0gICAgICAgICAgICBpbnQgbGVuZ3RoOwotICAgICAgICAgICAgd2hpbGUgKCF0b3Ao
KS0+aXNEb25lKCZsZW5ndGgpKSB7Ci0gICAgICAgICAgICAgICAgLy8gTm90ZSB0aGF0IGRvU2Vy
aWFsaXplKCkgY2FuIGNoYW5nZSBjdXJyZW50IHRvcCgpLgotICAgICAgICAgICAgICAgIGlmICgh
ZG9TZXJpYWxpemUodG9wKCktPmFkdmFuY2UoKSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1fd3JpdGVyLmVuZENvbXBvc2l0
ZSh0b3AoKS0+dGFnKCksIGxlbmd0aCk7Ci0gICAgICAgICAgICBwb3AoKTsKLSAgICAgICAgfQot
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgU3RhdGVCYXNlKiBzdGF0ZSA9IGRvU2VyaWFs
aXplKHZhbHVlLCAwKTsKKyAgICAgICAgd2hpbGUgKHN0YXRlKQorICAgICAgICAgICAgc3RhdGUg
PSBzdGF0ZS0+YWR2YW5jZSgqdGhpcyk7CisgICAgICAgIHJldHVybiAhbV9oYXNFcnJvcjsKKyAg
ICB9CisKKyAgICAvLyBGdW5jdGlvbnMgdXNlZCBieSBzZXJpYWxpemF0aW9uIHN0YXRlcy4KKwor
ICAgIFN0YXRlQmFzZSogZG9TZXJpYWxpemUodjg6OkhhbmRsZTx2ODo6VmFsdWU+IHZhbHVlLCBT
dGF0ZUJhc2UqIG5leHQpOworCisgICAgU3RhdGVCYXNlKiB3cml0ZUFycmF5KHVpbnQzMl90IGxl
bmd0aCwgU3RhdGVCYXNlKiBzdGF0ZSkKKyAgICB7CisgICAgICAgIG1fd3JpdGVyLndyaXRlQXJy
YXkobGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIHBvcChzdGF0ZSk7CisgICAgfQorCisgICAgU3Rh
dGVCYXNlKiB3cml0ZU9iamVjdCh1aW50MzJfdCBudW1Qcm9wZXJ0aWVzLCBTdGF0ZUJhc2UqIHN0
YXRlKQorICAgIHsKKyAgICAgICAgbV93cml0ZXIud3JpdGVPYmplY3QobnVtUHJvcGVydGllcyk7
CisgICAgICAgIHJldHVybiBwb3Aoc3RhdGUpOworICAgIH0KKworICAgIFN0YXRlQmFzZSogd3Jp
dGVTcGFyc2VBcnJheSh1aW50MzJfdCBudW1Qcm9wZXJ0aWVzLCB1aW50MzJfdCBsZW5ndGgsIFN0
YXRlQmFzZSogc3RhdGUpCisgICAgeworICAgICAgICBtX3dyaXRlci53cml0ZVNwYXJzZUFycmF5
KG51bVByb3BlcnRpZXMsIGxlbmd0aCk7CisgICAgICAgIHJldHVybiBwb3Aoc3RhdGUpOwogICAg
IH0KIAogcHJpdmF0ZToKQEAgLTI1NCwyMjEgKzMwNCwyNzUgQEAgcHJpdmF0ZToKIAogICAgICAg
ICAvLyBMaW5rIHRvIHRoZSBuZXh0IHN0YXRlIHRvIGZvcm0gYSBzdGFjay4KICAgICAgICAgU3Rh
dGVCYXNlKiBuZXh0U3RhdGUoKSB7IHJldHVybiBtX25leHQ7IH0KLSAgICAgICAgdm9pZCBzZXRO
ZXh0U3RhdGUoU3RhdGVCYXNlKiBuZXh0KSB7IG1fbmV4dCA9IG5leHQ7IH0KIAogICAgICAgICAv
LyBDb21wb3NpdGUgb2JqZWN0IHdlJ3JlIHByb2Nlc3NpbmcgaW4gdGhpcyBzdGF0ZS4KICAgICAg
ICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNvbXBvc2l0ZSgpIHsgcmV0dXJuIG1fY29tcG9zaXRl
OyB9CiAKLSAgICAgICAgLy8gU2VyaWFsaXphdGlvbiB0YWcgZm9yIHRoZSBjdXJyZW50IGNvbXBv
c2l0ZS4KLSAgICAgICAgdmlydHVhbCBTZXJpYWxpemF0aW9uVGFnIHRhZygpIGNvbnN0ID0gMDsK
LQotICAgICAgICAvLyBSZXR1cm5zIHdoZXRoZXIgaXRlcmF0aW9uIG92ZXIgc3Vib2JqZWN0cyBv
ZiB0aGUgY3VycmVudAotICAgICAgICAvLyBjb21wb3NpdGUgb2JqZWN0IGlzIGRvbmUuIElmIHll
cywgfCpsZW5ndGh8IGlzIHNldCB0byB0aGUKLSAgICAgICAgLy8gbnVtYmVyIG9mIHN1Ym9iamVj
dHMuCi0gICAgICAgIHZpcnR1YWwgYm9vbCBpc0RvbmUoaW50KiBsZW5ndGgpID0gMDsKLQotICAg
ICAgICAvLyBBZHZhbmNlcyB0byB0aGUgbmV4dCBzdWJvYmplY3QuCi0gICAgICAgIC8vIFJlcXVp
cmVzOiAhdGhpcy0+aXNEb25lKCkuCi0gICAgICAgIHZpcnR1YWwgdjg6OkxvY2FsPHY4OjpWYWx1
ZT4gYWR2YW5jZSgpID0gMDsKKyAgICAgICAgLy8gU2VyaWFsaXplcyAoYSBwYXJ0IG9mKSB0aGUg
Y3VycmVudCBjb21wb3NpdGUgYW5kIHJldHVybnMKKyAgICAgICAgLy8gdGhlIG5leHQgc3RhdGUg
dG8gcHJvY2VzcyBvciBudWxsIHdoZW4gdGhpcyBpcyB0aGUgZmluYWwKKyAgICAgICAgLy8gc3Rh
dGUuCisgICAgICAgIHZpcnR1YWwgU3RhdGVCYXNlKiBhZHZhbmNlKFNlcmlhbGl6ZXImKSA9IDA7
CiAKICAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIFN0YXRlQmFzZSh2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gY29tcG9zaXRlKQotICAgICAgICAgICAgOiBtX25leHQoMCkKLSAgICAgICAgICAgICwgbV9j
b21wb3NpdGUoY29tcG9zaXRlKQorICAgICAgICBTdGF0ZUJhc2Uodjg6OkhhbmRsZTx2ODo6VmFs
dWU+IGNvbXBvc2l0ZSwgU3RhdGVCYXNlKiBuZXh0KQorICAgICAgICAgICAgOiBtX2NvbXBvc2l0
ZShjb21wb3NpdGUpCisgICAgICAgICAgICAsIG1fbmV4dChuZXh0KQogICAgICAgICB7CiAgICAg
ICAgIH0KIAogICAgIHByaXZhdGU6Ci0gICAgICAgIFN0YXRlQmFzZSogbV9uZXh0OwogICAgICAg
ICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gbV9jb21wb3NpdGU7CisgICAgICAgIFN0YXRlQmFzZSog
bV9uZXh0OwogICAgIH07CiAKLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgU2VyaWFsaXphdGlv
blRhZyBjb21wb3NpdGVUYWc+Ci0gICAgY2xhc3MgU3RhdGUgOiBwdWJsaWMgU3RhdGVCYXNlIHsK
KyAgICAvLyBEdW1teSBzdGF0ZSB0aGF0IGlzIHVzZWQgdG8gc2lnbmFsIHNlcmlhbGl6YXRpb24g
ZXJyb3JzLgorICAgIGNsYXNzIEVycm9yU3RhdGUgOiBwdWJsaWMgU3RhdGVCYXNlIHsKICAgICBw
dWJsaWM6Ci0gICAgICAgIHY4OjpIYW5kbGU8VD4gY29tcG9zaXRlKCkgeyByZXR1cm4gaGFuZGxl
Q2FzdDxUPihTdGF0ZUJhc2U6OmNvbXBvc2l0ZSgpKTsgfQorICAgICAgICBFcnJvclN0YXRlKCkK
KyAgICAgICAgICAgIDogU3RhdGVCYXNlKHY4OjpIYW5kbGU8djg6OlZhbHVlPigpLCAwKQorICAg
ICAgICB7CisgICAgICAgIH0KKworICAgICAgICB2aXJ0dWFsIFN0YXRlQmFzZSogYWR2YW5jZShT
ZXJpYWxpemVyJikKKyAgICAgICAgeworICAgICAgICAgICAgZGVsZXRlIHRoaXM7CisgICAgICAg
ICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgIH07CiAKLSAgICAgICAgdmlydHVhbCBTZXJp
YWxpemF0aW9uVGFnIHRhZygpIGNvbnN0IHsgcmV0dXJuIGNvbXBvc2l0ZVRhZzsgfQorICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBUPgorICAgIGNsYXNzIFN0YXRlIDogcHVibGljIFN0YXRlQmFzZSB7
CisgICAgcHVibGljOgorICAgICAgICB2ODo6SGFuZGxlPFQ+IGNvbXBvc2l0ZSgpIHsgcmV0dXJu
IHY4OjpIYW5kbGU8VD46OkNhc3QoU3RhdGVCYXNlOjpjb21wb3NpdGUoKSk7IH0KIAogICAgIHBy
b3RlY3RlZDoKLSAgICAgICAgZXhwbGljaXQgU3RhdGUodjg6OkhhbmRsZTxUPiBjb21wb3NpdGUp
IDogU3RhdGVCYXNlKGNvbXBvc2l0ZSkKKyAgICAgICAgU3RhdGUodjg6OkhhbmRsZTxUPiBjb21w
b3NpdGUsIFN0YXRlQmFzZSogbmV4dCkKKyAgICAgICAgICAgIDogU3RhdGVCYXNlKGNvbXBvc2l0
ZSwgbmV4dCkKICAgICAgICAgewogICAgICAgICB9CiAgICAgfTsKIAotICAgIC8vIEhlbHBlciB0
byBjbGVhbiB1cCB0aGUgc3RhdGUgc3RhY2sgaW4gY2FzZSBvZiBlcnJvcnMuCi0gICAgY2xhc3Mg
U3RhY2tDbGVhbmVyIDogTm9uY29weWFibGUgeworI2lmIDAKKyAgICAvLyBDdXJyZW50bHkgdW51
c2VkLCBzZWUgY29tbWVudCBpbiBuZXdBcnJheVN0YXRlLgorICAgIGNsYXNzIEFycmF5U3RhdGUg
OiBwdWJsaWMgU3RhdGU8djg6OkFycmF5PiB7CiAgICAgcHVibGljOgotICAgICAgICBleHBsaWNp
dCBTdGFja0NsZWFuZXIoU3RhdGVCYXNlKiogc3RhY2spIDogbV9zdGFjayhzdGFjaykKKyAgICAg
ICAgQXJyYXlTdGF0ZSh2ODo6SGFuZGxlPHY4OjpBcnJheT4gYXJyYXksIFN0YXRlQmFzZSogbmV4
dCkKKyAgICAgICAgICAgIDogU3RhdGU8djg6OkFycmF5PihhcnJheSwgbmV4dCkKKyAgICAgICAg
ICAgICwgbV9pbmRleCgtMSkKICAgICAgICAgewogICAgICAgICB9CiAKLSAgICAgICAgflN0YWNr
Q2xlYW5lcigpCisgICAgICAgIHZpcnR1YWwgU3RhdGVCYXNlKiBhZHZhbmNlKFNlcmlhbGl6ZXIm
IHNlcmlhbGl6ZXIpCiAgICAgICAgIHsKLSAgICAgICAgICAgIFN0YXRlQmFzZSogc3RhdGUgPSAq
bV9zdGFjazsKLSAgICAgICAgICAgIHdoaWxlIChzdGF0ZSkgewotICAgICAgICAgICAgICAgIFN0
YXRlQmFzZSogdG1wID0gc3RhdGUtPm5leHRTdGF0ZSgpOwotICAgICAgICAgICAgICAgIGRlbGV0
ZSBzdGF0ZTsKLSAgICAgICAgICAgICAgICBzdGF0ZSA9IHRtcDsKKyAgICAgICAgICAgICsrbV9p
bmRleDsKKyAgICAgICAgICAgIGZvciAoOyBtX2luZGV4IDwgY29tcG9zaXRlKCktPkxlbmd0aCgp
OyArK21faW5kZXgpIHsKKyAgICAgICAgICAgICAgICBpZiAoU3RhdGVCYXNlKiBuZXdTdGF0ZSA9
IHNlcmlhbGl6ZXIuZG9TZXJpYWxpemUoY29tcG9zaXRlKCktPkdldChtX2luZGV4KSwgdGhpcykp
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXdTdGF0ZTsKICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICptX3N0YWNrID0gMDsKKyAgICAgICAgICAgIHJldHVybiBzZXJpYWxpemVyLndy
aXRlQXJyYXkoY29tcG9zaXRlKCktPkxlbmd0aCgpLCB0aGlzKTsKICAgICAgICAgfQogCiAgICAg
cHJpdmF0ZToKLSAgICAgICAgU3RhdGVCYXNlKiogbV9zdGFjazsKKyAgICAgICAgdW5zaWduZWQg
bV9pbmRleDsKICAgICB9OworI2VuZGlmCiAKLSAgICBjbGFzcyBBcnJheVN0YXRlIDogcHVibGlj
IFN0YXRlPHY4OjpBcnJheSwgQXJyYXlUYWc+IHsKKyAgICBjbGFzcyBBYnN0cmFjdE9iamVjdFN0
YXRlIDogcHVibGljIFN0YXRlPHY4OjpPYmplY3Q+IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIEFy
cmF5U3RhdGUodjg6OkhhbmRsZTx2ODo6QXJyYXk+IGFycmF5KQotICAgICAgICAgICAgOiBTdGF0
ZTx2ODo6QXJyYXksIEFycmF5VGFnPihhcnJheSkKLSAgICAgICAgICAgICwgbV9pbmRleCgwKQor
ICAgICAgICBBYnN0cmFjdE9iamVjdFN0YXRlKHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gb2JqZWN0
LCBTdGF0ZUJhc2UqIG5leHQpCisgICAgICAgICAgICA6IFN0YXRlPHY4OjpPYmplY3Q+KG9iamVj
dCwgbmV4dCkKKyAgICAgICAgICAgICwgbV9wcm9wZXJ0eU5hbWVzKG9iamVjdC0+R2V0UHJvcGVy
dHlOYW1lcygpKQorICAgICAgICAgICAgLCBtX2luZGV4KC0xKQorICAgICAgICAgICAgLCBtX25h
bWVEb25lKGZhbHNlKQogICAgICAgICB7CiAgICAgICAgIH0KIAotICAgICAgICB2aXJ0dWFsIGJv
b2wgaXNEb25lKGludCogbGVuZ3RoKQorICAgICAgICB2aXJ0dWFsIFN0YXRlQmFzZSogYWR2YW5j
ZShTZXJpYWxpemVyJiBzZXJpYWxpemVyKQogICAgICAgICB7Ci0gICAgICAgICAgICAqbGVuZ3Ro
ID0gY29tcG9zaXRlKCktPkxlbmd0aCgpOwotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PGludD4obV9pbmRleCkgPj0gKmxlbmd0aDsKKyAgICAgICAgICAgICsrbV9pbmRleDsKKyAgICAg
ICAgICAgIGZvciAoOyBtX2luZGV4IDwgbV9wcm9wZXJ0eU5hbWVzLT5MZW5ndGgoKTsgKyttX2lu
ZGV4KSB7CisgICAgICAgICAgICAgICAgaWYgKG1fcHJvcGVydHlOYW1lLklzRW1wdHkoKSkgewor
ICAgICAgICAgICAgICAgICAgICB2ODo6TG9jYWw8djg6OlZhbHVlPiBwcm9wZXJ0eU5hbWUgPSBt
X3Byb3BlcnR5TmFtZXMtPkdldChtX2luZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKChw
cm9wZXJ0eU5hbWUtPklzU3RyaW5nKCkgJiYgY29tcG9zaXRlKCktPkhhc1JlYWxOYW1lZFByb3Bl
cnR5KHByb3BlcnR5TmFtZS5Bczx2ODo6U3RyaW5nPigpKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHx8IChwcm9wZXJ0eU5hbWUtPklzVWludDMyKCkgJiYgY29tcG9zaXRlKCktPkhhc1JlYWxJ
bmRleGVkUHJvcGVydHkocHJvcGVydHlOYW1lLT5VaW50MzJWYWx1ZSgpKSkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG1fcHJvcGVydHlOYW1lID0gcHJvcGVydHlOYW1lOworICAgICAgICAg
ICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBBU1NFUlQoIW1fcHJvcGVydHlOYW1lLklz
RW1wdHkoKSk7CisgICAgICAgICAgICAgICAgaWYgKCFtX25hbWVEb25lKSB7CisgICAgICAgICAg
ICAgICAgICAgIG1fbmFtZURvbmUgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBpZiAoU3Rh
dGVCYXNlKiBuZXdTdGF0ZSA9IHNlcmlhbGl6ZXIuZG9TZXJpYWxpemUobV9wcm9wZXJ0eU5hbWUs
IHRoaXMpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ld1N0YXRlOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSA9
IGNvbXBvc2l0ZSgpLT5HZXQobV9wcm9wZXJ0eU5hbWUpOworICAgICAgICAgICAgICAgIG1fbmFt
ZURvbmUgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBtX3Byb3BlcnR5TmFtZS5DbGVhcigpOwor
ICAgICAgICAgICAgICAgIGlmIChTdGF0ZUJhc2UqIG5ld1N0YXRlID0gc2VyaWFsaXplci5kb1Nl
cmlhbGl6ZSh2YWx1ZSwgdGhpcykpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXdTdGF0
ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBvYmplY3REb25lKG1faW5kZXgs
IHNlcmlhbGl6ZXIpOwogICAgICAgICB9CiAKLSAgICAgICAgdmlydHVhbCB2ODo6TG9jYWw8djg6
OlZhbHVlPiBhZHZhbmNlKCkKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKG1faW5kZXgg
PCBjb21wb3NpdGUoKS0+TGVuZ3RoKCkpOwotICAgICAgICAgICAgdjg6OkhhbmRsZVNjb3BlIHNj
b3BlOwotICAgICAgICAgICAgcmV0dXJuIHNjb3BlLkNsb3NlKGNvbXBvc2l0ZSgpLT5HZXQodjg6
OkludGVnZXI6Ok5ldyhtX2luZGV4KyspKSk7Ci0gICAgICAgIH0KKyAgICBwcm90ZWN0ZWQ6Cisg
ICAgICAgIHZpcnR1YWwgU3RhdGVCYXNlKiBvYmplY3REb25lKHVuc2lnbmVkIG51bVByb3BlcnRp
ZXMsIFNlcmlhbGl6ZXImKSA9IDA7CiAKICAgICBwcml2YXRlOgorICAgICAgICB2ODo6TG9jYWw8
djg6OkFycmF5PiBtX3Byb3BlcnR5TmFtZXM7CisgICAgICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+
IG1fcHJvcGVydHlOYW1lOwogICAgICAgICB1bnNpZ25lZCBtX2luZGV4OworICAgICAgICBib29s
IG1fbmFtZURvbmU7CiAgICAgfTsKIAotICAgIGNsYXNzIE9iamVjdFN0YXRlIDogcHVibGljIFN0
YXRlPHY4OjpPYmplY3QsIE9iamVjdFRhZz4geworICAgIGNsYXNzIE9iamVjdFN0YXRlIDogcHVi
bGljIEFic3RyYWN0T2JqZWN0U3RhdGUgewogICAgIHB1YmxpYzoKLSAgICAgICAgT2JqZWN0U3Rh
dGUodjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBvYmplY3QpCi0gICAgICAgICAgICA6IFN0YXRlPHY4
OjpPYmplY3QsIE9iamVjdFRhZz4ob2JqZWN0KQotICAgICAgICAgICAgLCBtX3Byb3BlcnR5TmFt
ZXMob2JqZWN0LT5HZXRQcm9wZXJ0eU5hbWVzKCkpCi0gICAgICAgICAgICAsIG1faW5kZXgoLTEp
Ci0gICAgICAgICAgICAsIG1fbGVuZ3RoKDApCisgICAgICAgIE9iamVjdFN0YXRlKHY4OjpIYW5k
bGU8djg6Ok9iamVjdD4gb2JqZWN0LCBTdGF0ZUJhc2UqIG5leHQpCisgICAgICAgICAgICA6IEFi
c3RyYWN0T2JqZWN0U3RhdGUob2JqZWN0LCBuZXh0KQogICAgICAgICB7Ci0gICAgICAgICAgICBu
ZXh0UHJvcGVydHkoKTsKICAgICAgICAgfQogCi0gICAgICAgIHZpcnR1YWwgYm9vbCBpc0RvbmUo
aW50KiBsZW5ndGgpCisgICAgcHJvdGVjdGVkOgorICAgICAgICB2aXJ0dWFsIFN0YXRlQmFzZSog
b2JqZWN0RG9uZSh1bnNpZ25lZCBudW1Qcm9wZXJ0aWVzLCBTZXJpYWxpemVyJiBzZXJpYWxpemVy
KQogICAgICAgICB7Ci0gICAgICAgICAgICAqbGVuZ3RoID0gbV9sZW5ndGg7Ci0gICAgICAgICAg
ICByZXR1cm4gbV9pbmRleCA+PSAyICogbV9wcm9wZXJ0eU5hbWVzLT5MZW5ndGgoKTsKKyAgICAg
ICAgICAgIHJldHVybiBzZXJpYWxpemVyLndyaXRlT2JqZWN0KG51bVByb3BlcnRpZXMsIHRoaXMp
OwogICAgICAgICB9CisgICAgfTsKIAotICAgICAgICB2aXJ0dWFsIHY4OjpMb2NhbDx2ODo6VmFs
dWU+IGFkdmFuY2UoKQorICAgIGNsYXNzIFNwYXJzZUFycmF5U3RhdGUgOiBwdWJsaWMgQWJzdHJh
Y3RPYmplY3RTdGF0ZSB7CisgICAgcHVibGljOgorICAgICAgICBTcGFyc2VBcnJheVN0YXRlKHY4
OjpIYW5kbGU8djg6OkFycmF5PiBhcnJheSwgU3RhdGVCYXNlKiBuZXh0KQorICAgICAgICAgICAg
OiBBYnN0cmFjdE9iamVjdFN0YXRlKGFycmF5LCBuZXh0KQogICAgICAgICB7Ci0gICAgICAgICAg
ICBBU1NFUlQobV9pbmRleCA8IDIgKiBtX3Byb3BlcnR5TmFtZXMtPkxlbmd0aCgpKTsKLSAgICAg
ICAgICAgIGlmICghKG1faW5kZXggJSAyKSkgewotICAgICAgICAgICAgICAgICsrbV9pbmRleDsK
LSAgICAgICAgICAgICAgICByZXR1cm4gbV9wcm9wZXJ0eU5hbWU7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB2ODo6TG9jYWw8djg6OlZhbHVlPiByZXN1bHQgPSBjb21wb3NpdGUoKS0+R2V0
KG1fcHJvcGVydHlOYW1lKTsKLSAgICAgICAgICAgIG5leHRQcm9wZXJ0eSgpOwotICAgICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgfQogCi0gICAgcHJpdmF0ZToKLSAgICAgICAgdm9p
ZCBuZXh0UHJvcGVydHkoKQorICAgIHByb3RlY3RlZDoKKyAgICAgICAgdmlydHVhbCBTdGF0ZUJh
c2UqIG9iamVjdERvbmUodW5zaWduZWQgbnVtUHJvcGVydGllcywgU2VyaWFsaXplciYgc2VyaWFs
aXplcikKICAgICAgICAgewotICAgICAgICAgICAgdjg6OkhhbmRsZVNjb3BlIHNjb3BlOwotICAg
ICAgICAgICAgKyttX2luZGV4OwotICAgICAgICAgICAgQVNTRVJUKCEobV9pbmRleCAlIDIpKTsK
LSAgICAgICAgICAgIGZvciAoOyBtX2luZGV4IDwgMiAqIG1fcHJvcGVydHlOYW1lcy0+TGVuZ3Ro
KCk7IG1faW5kZXggKz0gMikgewotICAgICAgICAgICAgICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+
IHByb3BlcnR5TmFtZSA9IG1fcHJvcGVydHlOYW1lcy0+R2V0KHY4OjpJbnRlZ2VyOjpOZXcobV9p
bmRleCAvIDIpKTsKLSAgICAgICAgICAgICAgICBpZiAoKHByb3BlcnR5TmFtZS0+SXNTdHJpbmco
KSAmJiBjb21wb3NpdGUoKS0+SGFzUmVhbE5hbWVkUHJvcGVydHkoaGFuZGxlQ2FzdDx2ODo6U3Ry
aW5nPihwcm9wZXJ0eU5hbWUpKSkKLSAgICAgICAgICAgICAgICAgICAgfHwgKHByb3BlcnR5TmFt
ZS0+SXNJbnQzMigpICYmIGNvbXBvc2l0ZSgpLT5IYXNSZWFsSW5kZXhlZFByb3BlcnR5KHByb3Bl
cnR5TmFtZS0+VWludDMyVmFsdWUoKSkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fcHJvcGVy
dHlOYW1lID0gc2NvcGUuQ2xvc2UocHJvcGVydHlOYW1lKTsKLSAgICAgICAgICAgICAgICAgICAg
bV9sZW5ndGggKz0gMjsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBzZXJpYWxpemVyLndyaXRl
U3BhcnNlQXJyYXkobnVtUHJvcGVydGllcywgY29tcG9zaXRlKCkuQXM8djg6OkFycmF5PigpLT5M
ZW5ndGgoKSwgdGhpcyk7CiAgICAgICAgIH0KLQotICAgICAgICB2ODo6TG9jYWw8djg6OkFycmF5
PiBtX3Byb3BlcnR5TmFtZXM7Ci0gICAgICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+IG1fcHJvcGVy
dHlOYW1lOwotICAgICAgICB1bnNpZ25lZCBtX2luZGV4OwotICAgICAgICB1bnNpZ25lZCBtX2xl
bmd0aDsKICAgICB9OwogCi0gICAgYm9vbCBkb1NlcmlhbGl6ZSh2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gdmFsdWUpCi0gICAgewotICAgICAgICBpZiAodmFsdWUtPklzVW5kZWZpbmVkKCkpCi0gICAg
ICAgICAgICBtX3dyaXRlci53cml0ZVVuZGVmaW5lZCgpOwotICAgICAgICBlbHNlIGlmICh2YWx1
ZS0+SXNOdWxsKCkpCi0gICAgICAgICAgICBtX3dyaXRlci53cml0ZU51bGwoKTsKLSAgICAgICAg
ZWxzZSBpZiAodmFsdWUtPklzVHJ1ZSgpKQotICAgICAgICAgICAgbV93cml0ZXIud3JpdGVUcnVl
KCk7Ci0gICAgICAgIGVsc2UgaWYgKHZhbHVlLT5Jc0ZhbHNlKCkpCi0gICAgICAgICAgICBtX3dy
aXRlci53cml0ZUZhbHNlKCk7Ci0gICAgICAgIGVsc2UgaWYgKHZhbHVlLT5Jc0ludDMyKCkpCi0g
ICAgICAgICAgICBtX3dyaXRlci53cml0ZUludDMyKHZhbHVlLT5JbnQzMlZhbHVlKCkpOwotICAg
ICAgICBlbHNlIGlmICh2YWx1ZS0+SXNOdW1iZXIoKSkKLSAgICAgICAgICAgIG1fd3JpdGVyLndy
aXRlTnVtYmVyKGhhbmRsZUNhc3Q8djg6Ok51bWJlcj4odmFsdWUpLT5WYWx1ZSgpKTsKLSAgICAg
ICAgZWxzZSBpZiAodmFsdWUtPklzU3RyaW5nKCkpIHsKLSAgICAgICAgICAgIHY4OjpTdHJpbmc6
OlV0ZjhWYWx1ZSBzdHJpbmdWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgICAgICBtX3dyaXRlci53cml0
ZVN0cmluZygqc3RyaW5nVmFsdWUsIHN0cmluZ1ZhbHVlLmxlbmd0aCgpKTsKLSAgICAgICAgfSBl
bHNlIGlmICh2YWx1ZS0+SXNBcnJheSgpKSB7Ci0gICAgICAgICAgICBpZiAoIWNoZWNrQ29tcG9z
aXRlKHZhbHVlKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBw
dXNoKG5ldyBBcnJheVN0YXRlKGhhbmRsZUNhc3Q8djg6OkFycmF5Pih2YWx1ZSkpKTsKLSAgICAg
ICAgfSBlbHNlIGlmICh2YWx1ZS0+SXNPYmplY3QoKSkgewotICAgICAgICAgICAgaWYgKCFjaGVj
a0NvbXBvc2l0ZSh2YWx1ZSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICAgICAgcHVzaChuZXcgT2JqZWN0U3RhdGUoaGFuZGxlQ2FzdDx2ODo6T2JqZWN0Pih2YWx1ZSkp
KTsKLSAgICAgICAgICAgIC8vIEZJWE1FOgotICAgICAgICAgICAgLy8gLSBjaGVjayBub3QgYSB3
cmFwcGVyCi0gICAgICAgICAgICAvLyAtIHN1cHBvcnQgRmlsZSwgSW1hZ2VEYXRhLCBldGMuCi0g
ICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgdm9pZCBwdXNoKFN0
YXRlQmFzZSogc3RhdGUpCisgICAgU3RhdGVCYXNlKiBwdXNoKFN0YXRlQmFzZSogc3RhdGUpCiAg
ICAgewotICAgICAgICBzdGF0ZS0+c2V0TmV4dFN0YXRlKG1fc3RhdGUpOwotICAgICAgICBtX3N0
YXRlID0gc3RhdGU7CisgICAgICAgIEFTU0VSVChzdGF0ZSk7CiAgICAgICAgICsrbV9kZXB0aDsK
KyAgICAgICAgcmV0dXJuIGNoZWNrQ29tcG9zaXRlKHN0YXRlKSA/IHN0YXRlIDogaGFuZGxlRXJy
b3Ioc3RhdGUpOwogICAgIH0KIAotICAgIFN0YXRlQmFzZSogdG9wKCkgeyByZXR1cm4gbV9zdGF0
ZTsgfQotCi0gICAgdm9pZCBwb3AoKQorICAgIFN0YXRlQmFzZSogcG9wKFN0YXRlQmFzZSogc3Rh
dGUpCiAgICAgewotICAgICAgICBpZiAoIW1fc3RhdGUpCi0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIFN0YXRlQmFzZSogdG9wID0gbV9zdGF0ZTsKLSAgICAgICAgbV9zdGF0ZSA9IHRvcC0+
bmV4dFN0YXRlKCk7Ci0gICAgICAgIGRlbGV0ZSB0b3A7CisgICAgICAgIEFTU0VSVChzdGF0ZSk7
CiAgICAgICAgIC0tbV9kZXB0aDsKKyAgICAgICAgU3RhdGVCYXNlKiBuZXh0ID0gc3RhdGUtPm5l
eHRTdGF0ZSgpOworICAgICAgICBkZWxldGUgc3RhdGU7CisgICAgICAgIHJldHVybiBuZXh0Owor
ICAgIH0KKworICAgIFN0YXRlQmFzZSogaGFuZGxlRXJyb3IoU3RhdGVCYXNlKiBzdGF0ZSkKKyAg
ICB7CisgICAgICAgIG1faGFzRXJyb3IgPSB0cnVlOworICAgICAgICB3aGlsZSAoc3RhdGUpIHsK
KyAgICAgICAgICAgIFN0YXRlQmFzZSogdG1wID0gc3RhdGUtPm5leHRTdGF0ZSgpOworICAgICAg
ICAgICAgZGVsZXRlIHN0YXRlOworICAgICAgICAgICAgc3RhdGUgPSB0bXA7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIG5ldyBFcnJvclN0YXRlOwogICAgIH0KIAotICAgIGJvb2wgY2hlY2tD
b21wb3NpdGUodjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNvbXBvc2l0ZSkKKyAgICBib29sIGNoZWNr
Q29tcG9zaXRlKFN0YXRlQmFzZSogdG9wKQogICAgIHsKKyAgICAgICAgQVNTRVJUKHRvcCk7CiAg
ICAgICAgIGlmIChtX2RlcHRoID4gbWF4RGVwdGgpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgIGlmICghc2hvdWxkQ2hlY2tGb3JDeWNsZXMobV9kZXB0aCkpCiAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgZm9yIChTdGF0ZUJhc2UqIHN0YXRlID0gdG9wKCk7IHN0
YXRlOyBzdGF0ZSA9IHN0YXRlLT5uZXh0U3RhdGUoKSkgeworICAgICAgICB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gY29tcG9zaXRlID0gdG9wLT5jb21wb3NpdGUoKTsKKyAgICAgICAgZm9yIChTdGF0
ZUJhc2UqIHN0YXRlID0gdG9wLT5uZXh0U3RhdGUoKTsgc3RhdGU7IHN0YXRlID0gc3RhdGUtPm5l
eHRTdGF0ZSgpKSB7CiAgICAgICAgICAgICBpZiAoc3RhdGUtPmNvbXBvc2l0ZSgpID09IGNvbXBv
c2l0ZSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgfQogCisgICAgdm9pZCB3cml0ZVN0cmluZyh2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gdmFsdWUpCisgICAgeworICAgICAgICB2ODo6U3RyaW5nOjpVdGY4VmFsdWUgc3Ry
aW5nVmFsdWUodmFsdWUpOworICAgICAgICBtX3dyaXRlci53cml0ZVN0cmluZygqc3RyaW5nVmFs
dWUsIHN0cmluZ1ZhbHVlLmxlbmd0aCgpKTsKKyAgICB9CisKKyAgICB2b2lkIHdyaXRlSW1hZ2VE
YXRhKHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSkKKyAgICB7CisgICAgICAgIEltYWdlRGF0
YSogaW1hZ2VEYXRhID0gVjhJbWFnZURhdGE6OnRvTmF0aXZlKHZhbHVlLkFzPHY4OjpPYmplY3Q+
KCkpOworICAgICAgICBpZiAoIWltYWdlRGF0YSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgV1RGOjpCeXRlQXJyYXkqIHBpeGVsQXJyYXkgPSBpbWFnZURhdGEtPmRhdGEoKS0+ZGF0YSgp
OworICAgICAgICBtX3dyaXRlci53cml0ZUltYWdlRGF0YShpbWFnZURhdGEtPndpZHRoKCksIGlt
YWdlRGF0YS0+aGVpZ2h0KCksIHBpeGVsQXJyYXktPmRhdGEoKSwgcGl4ZWxBcnJheS0+bGVuZ3Ro
KCkpOworICAgIH0KKworICAgIHN0YXRpYyBTdGF0ZUJhc2UqIG5ld0FycmF5U3RhdGUodjg6Okhh
bmRsZTx2ODo6QXJyYXk+IGFycmF5LCBTdGF0ZUJhc2UqIG5leHQpCisgICAgeworICAgICAgICAv
LyBGSVhNRTogdXNlIHBsYWluIEFycmF5IHN0YXRlIHdoZW4gd2UgY2FuIHF1aWNrbHkgY2hlY2sg
dGhhdAorICAgICAgICAvLyBhbiBhcnJheSBpcyBub3Qgc3BhcnNlIGFuZCBoYXMgb25seSBpbmRl
eGVkIHByb3BlcnRpZXMuCisgICAgICAgIHJldHVybiBuZXcgU3BhcnNlQXJyYXlTdGF0ZShhcnJh
eSwgbmV4dCk7CisgICAgfQorCisgICAgc3RhdGljIFN0YXRlQmFzZSogbmV3T2JqZWN0U3RhdGUo
djg6OkhhbmRsZTx2ODo6T2JqZWN0PiBvYmplY3QsIFN0YXRlQmFzZSogbmV4dCkKKyAgICB7Cisg
ICAgICAgIC8vIEZJWE1FOgorICAgICAgICAvLyAtIGNoZWNrIG5vdCBhIHdyYXBwZXIKKyAgICAg
ICAgLy8gLSBzdXBwb3J0IEZpbGUsIGV0Yy4KKyAgICAgICAgcmV0dXJuIG5ldyBPYmplY3RTdGF0
ZShvYmplY3QsIG5leHQpOworICAgIH0KKwogICAgIFdyaXRlciYgbV93cml0ZXI7Ci0gICAgU3Rh
dGVCYXNlKiBtX3N0YXRlOwogICAgIGludCBtX2RlcHRoOworICAgIGJvb2wgbV9oYXNFcnJvcjsK
K307CisKK1NlcmlhbGl6ZXI6OlN0YXRlQmFzZSogU2VyaWFsaXplcjo6ZG9TZXJpYWxpemUodjg6
OkhhbmRsZTx2ODo6VmFsdWU+IHZhbHVlLCBTdGF0ZUJhc2UqIG5leHQpCit7CisgICAgaWYgKHZh
bHVlLT5Jc1VuZGVmaW5lZCgpKQorICAgICAgICBtX3dyaXRlci53cml0ZVVuZGVmaW5lZCgpOwor
ICAgIGVsc2UgaWYgKHZhbHVlLT5Jc051bGwoKSkKKyAgICAgICAgbV93cml0ZXIud3JpdGVOdWxs
KCk7CisgICAgZWxzZSBpZiAodmFsdWUtPklzVHJ1ZSgpKQorICAgICAgICBtX3dyaXRlci53cml0
ZVRydWUoKTsKKyAgICBlbHNlIGlmICh2YWx1ZS0+SXNGYWxzZSgpKQorICAgICAgICBtX3dyaXRl
ci53cml0ZUZhbHNlKCk7CisgICAgZWxzZSBpZiAodmFsdWUtPklzSW50MzIoKSkKKyAgICAgICAg
bV93cml0ZXIud3JpdGVJbnQzMih2YWx1ZS0+SW50MzJWYWx1ZSgpKTsKKyAgICBlbHNlIGlmICh2
YWx1ZS0+SXNVaW50MzIoKSkKKyAgICAgICAgbV93cml0ZXIud3JpdGVVaW50MzIodmFsdWUtPlVp
bnQzMlZhbHVlKCkpOworICAgIGVsc2UgaWYgKHZhbHVlLT5Jc0RhdGUoKSkKKyAgICAgICAgbV93
cml0ZXIud3JpdGVEYXRlKHZhbHVlLT5OdW1iZXJWYWx1ZSgpKTsKKyAgICBlbHNlIGlmICh2YWx1
ZS0+SXNOdW1iZXIoKSkKKyAgICAgICAgbV93cml0ZXIud3JpdGVOdW1iZXIodmFsdWUuQXM8djg6
Ok51bWJlcj4oKS0+VmFsdWUoKSk7CisgICAgZWxzZSBpZiAodmFsdWUtPklzU3RyaW5nKCkpCisg
ICAgICAgIHdyaXRlU3RyaW5nKHZhbHVlKTsKKyAgICBlbHNlIGlmICh2YWx1ZS0+SXNBcnJheSgp
KQorICAgICAgICByZXR1cm4gcHVzaChuZXdBcnJheVN0YXRlKHZhbHVlLkFzPHY4OjpBcnJheT4o
KSwgbmV4dCkpOworICAgIGVsc2UgaWYgKFY4SW1hZ2VEYXRhOjpIYXNJbnN0YW5jZSh2YWx1ZSkp
CisgICAgICAgIHdyaXRlSW1hZ2VEYXRhKHZhbHVlKTsKKyAgICBlbHNlIGlmICh2YWx1ZS0+SXNP
YmplY3QoKSkKKyAgICAgICAgcmV0dXJuIHB1c2gobmV3T2JqZWN0U3RhdGUodmFsdWUuQXM8djg6
Ok9iamVjdD4oKSwgbmV4dCkpOworICAgIHJldHVybiAwOworfQorCisvLyBJbnRlcmZhY2UgdXNl
ZCBieSBSZWFkZXIgdG8gY3JlYXRlIG9iamVjdHMgb2YgY29tcG9zaXRlIHR5cGVzLgorY2xhc3Mg
Q29tcG9zaXRlQ3JlYXRvciB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+Q29tcG9zaXRlQ3JlYXRv
cigpIHsgfQorCisgICAgdmlydHVhbCBib29sIGNyZWF0ZUFycmF5KHVpbnQzMl90IGxlbmd0aCwg
djg6OkhhbmRsZTx2ODo6VmFsdWU+KiB2YWx1ZSkgPSAwOworICAgIHZpcnR1YWwgYm9vbCBjcmVh
dGVPYmplY3QodWludDMyX3QgbnVtUHJvcGVydGllcywgdjg6OkhhbmRsZTx2ODo6VmFsdWU+KiB2
YWx1ZSkgPSAwOworICAgIHZpcnR1YWwgYm9vbCBjcmVhdGVTcGFyc2VBcnJheSh1aW50MzJfdCBu
dW1Qcm9wZXJ0aWVzLCB1aW50MzJfdCBsZW5ndGgsIHY4OjpIYW5kbGU8djg6OlZhbHVlPiogdmFs
dWUpID0gMDsKIH07CiAKIC8vIFJlYWRlciBpcyByZXNwb25zaWJsZSBmb3IgZGVzZXJpYWxpemlu
ZyBwcmltaXRpdmUgdHlwZXMgYW5kCiAvLyByZXN0b3JpbmcgaW5mb3JtYXRpb24gYWJvdXQgc2F2
ZWQgb2JqZWN0cyBvZiBjb21wb3NpdGUgdHlwZXMuCiBjbGFzcyBSZWFkZXIgewogcHVibGljOgot
ICAgIFJlYWRlcihjb25zdCBjaGFyKiBidWZmZXIsIGludCBsZW5ndGgpCisgICAgUmVhZGVyKGNv
bnN0IHVpbnQ4X3QqIGJ1ZmZlciwgaW50IGxlbmd0aCkKICAgICAgICAgOiBtX2J1ZmZlcihidWZm
ZXIpCiAgICAgICAgICwgbV9sZW5ndGgobGVuZ3RoKQogICAgICAgICAsIG1fcG9zaXRpb24oMCkK
QEAgLTQ3OCwxNiArNTgyLDE2IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNFb2YoKSBjb25zdCB7
IHJldHVybiBtX3Bvc2l0aW9uID49IG1fbGVuZ3RoOyB9CiAKLSAgICBib29sIHJlYWQoU2VyaWFs
aXphdGlvblRhZyogdGFnLCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4qIHZhbHVlLCBpbnQqIGxlbmd0
aCkKKyAgICBib29sIHJlYWQodjg6OkhhbmRsZTx2ODo6VmFsdWU+KiB2YWx1ZSwgQ29tcG9zaXRl
Q3JlYXRvciYgY3JlYXRvcikKICAgICB7Ci0gICAgICAgIHVpbnQzMl90IHJhd0xlbmd0aDsKLSAg
ICAgICAgaWYgKCFyZWFkVGFnKHRhZykpCisgICAgICAgIFNlcmlhbGl6YXRpb25UYWcgdGFnOwor
ICAgICAgICBpZiAoIXJlYWRUYWcoJnRhZykpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgIHN3aXRjaCAoKnRhZykgeworICAgICAgICBzd2l0Y2ggKHRhZykgewogICAgICAgICBj
YXNlIEludmFsaWRUYWc6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGNhc2Ug
UGFkZGluZ1RhZzoKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgICAgIGNhc2UgVW5kZWZpbmVkVGFnOgogICAgICAgICAgICAgKnZhbHVlID0gdjg6OlVu
ZGVmaW5lZCgpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC01MDgsMTggKzYxMiw1MyBAQCBwdWJs
aWM6CiAgICAgICAgICAgICBpZiAoIXJlYWRJbnQzMih2YWx1ZSkpCiAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVWludDMyVGFn
OgorICAgICAgICAgICAgaWYgKCFyZWFkVWludDMyKHZhbHVlKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBEYXRlVGFnOgor
ICAgICAgICAgICAgaWYgKCFyZWFkRGF0ZSh2YWx1ZSkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgTnVtYmVyVGFnOgogICAg
ICAgICAgICAgaWYgKCFyZWFkTnVtYmVyKHZhbHVlKSkKICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBPYmplY3RUYWc6Ci0gICAg
ICAgIGNhc2UgQXJyYXlUYWc6Ci0gICAgICAgICAgICBpZiAoIWRvUmVhZFVpbnQzMigmcmF3TGVu
Z3RoKSkKKyAgICAgICAgY2FzZSBJbWFnZURhdGFUYWc6CisgICAgICAgICAgICBpZiAoIXJlYWRJ
bWFnZURhdGEodmFsdWUpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIEFycmF5VGFnOiB7CisgICAgICAgICAgICB1aW50MzJf
dCBsZW5ndGg7CisgICAgICAgICAgICBpZiAoIWRvUmVhZFVpbnQzMigmbGVuZ3RoKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBpZiAoIWNyZWF0b3IuY3JlYXRl
QXJyYXkobGVuZ3RoLCB2YWx1ZSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICAgICAgKmxlbmd0aCA9IHJhd0xlbmd0aDsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBjYXNlIE9iamVjdFRhZzogeworICAg
ICAgICAgICAgdWludDMyX3QgbnVtUHJvcGVydGllczsKKyAgICAgICAgICAgIGlmICghZG9SZWFk
VWludDMyKCZudW1Qcm9wZXJ0aWVzKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgICBpZiAoIWNyZWF0b3IuY3JlYXRlT2JqZWN0KG51bVByb3BlcnRpZXMsIHZhbHVl
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICBjYXNlIFNwYXJzZUFycmF5VGFnOiB7CisgICAgICAgICAgICB1aW50
MzJfdCBudW1Qcm9wZXJ0aWVzOworICAgICAgICAgICAgdWludDMyX3QgbGVuZ3RoOworICAgICAg
ICAgICAgaWYgKCFkb1JlYWRVaW50MzIoJm51bVByb3BlcnRpZXMpKQorICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGlmICghZG9SZWFkVWludDMyKCZsZW5ndGgpKQor
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGlmICghY3JlYXRvci5j
cmVhdGVTcGFyc2VBcnJheShudW1Qcm9wZXJ0aWVzLCBsZW5ndGgsIHZhbHVlKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiAhdmFsdWUtPklzRW1wdHkoKTsKICAgICB9CiAKIHByaXZhdGU6CkBAIC01Mzgs
NyArNjc3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAg
aWYgKG1fcG9zaXRpb24gKyBsZW5ndGggPiBtX2xlbmd0aCkKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgKnZhbHVlID0gdjg6OlN0cmluZzo6TmV3KG1fYnVmZmVyICsgbV9wb3Np
dGlvbiwgbGVuZ3RoKTsKKyAgICAgICAgKnZhbHVlID0gdjg6OlN0cmluZzo6TmV3KHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgY2hhcio+KG1fYnVmZmVyICsgbV9wb3NpdGlvbiksIGxlbmd0aCk7CiAg
ICAgICAgIG1fcG9zaXRpb24gKz0gbGVuZ3RoOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9
CkBAIC01NTIsMjIgKzY5MSw2MCBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9CiAKLSAgICBib29sIHJlYWROdW1iZXIodjg6OkhhbmRsZTx2ODo6VmFsdWU+KiB2YWx1ZSkK
KyAgICBib29sIHJlYWRVaW50MzIodjg6OkhhbmRsZTx2ODo6VmFsdWU+KiB2YWx1ZSkKICAgICB7
Ci0gICAgICAgIGlmIChtX3Bvc2l0aW9uICsgc2l6ZW9mKGRvdWJsZSkgPiBtX2xlbmd0aCkKKyAg
ICAgICAgdWludDMyX3QgcmF3VmFsdWU7CisgICAgICAgIGlmICghZG9SZWFkVWludDMyKCZyYXdW
YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICp2YWx1ZSA9IHY4OjpJ
bnRlZ2VyOjpOZXcocmF3VmFsdWUpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAg
ICBib29sIHJlYWREYXRlKHY4OjpIYW5kbGU8djg6OlZhbHVlPiogdmFsdWUpCisgICAgeworICAg
ICAgICBkb3VibGUgbnVtYmVyVmFsdWU7CisgICAgICAgIGlmICghZG9SZWFkTnVtYmVyKCZudW1i
ZXJWYWx1ZSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICp2YWx1ZSA9IHY4
OjpEYXRlOjpOZXcobnVtYmVyVmFsdWUpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisK
KyAgICBib29sIHJlYWROdW1iZXIodjg6OkhhbmRsZTx2ODo6VmFsdWU+KiB2YWx1ZSkKKyAgICB7
CiAgICAgICAgIGRvdWJsZSBudW1iZXI7Ci0gICAgICAgIGNoYXIqIG51bWJlckFzQnl0ZUFycmF5
ID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oJm51bWJlcik7Ci0gICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBzaXplb2YoZG91YmxlKTsgKytpKQotICAgICAgICAgICAgbnVtYmVyQXNC
eXRlQXJyYXlbaV0gPSBtX2J1ZmZlclttX3Bvc2l0aW9uKytdOworICAgICAgICBpZiAoIWRvUmVh
ZE51bWJlcigmbnVtYmVyKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgKnZh
bHVlID0gdjg6Ok51bWJlcjo6TmV3KG51bWJlcik7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAg
IH0KIAorICAgIGJvb2wgcmVhZEltYWdlRGF0YSh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4qIHZhbHVl
KQorICAgIHsKKyAgICAgICAgdWludDMyX3Qgd2lkdGg7CisgICAgICAgIHVpbnQzMl90IGhlaWdo
dDsKKyAgICAgICAgdWludDMyX3QgcGl4ZWxEYXRhTGVuZ3RoOworICAgICAgICBpZiAoIWRvUmVh
ZFVpbnQzMigmd2lkdGgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAo
IWRvUmVhZFVpbnQzMigmaGVpZ2h0KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgaWYgKCFkb1JlYWRVaW50MzIoJnBpeGVsRGF0YUxlbmd0aCkpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIGlmIChtX3Bvc2l0aW9uICsgcGl4ZWxEYXRhTGVuZ3RoID4gbV9s
ZW5ndGgpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIFBhc3NSZWZQdHI8SW1h
Z2VEYXRhPiBpbWFnZURhdGEgPSBJbWFnZURhdGE6OmNyZWF0ZSh3aWR0aCwgaGVpZ2h0KTsKKyAg
ICAgICAgV1RGOjpCeXRlQXJyYXkqIHBpeGVsQXJyYXkgPSBpbWFnZURhdGEtPmRhdGEoKS0+ZGF0
YSgpOworICAgICAgICBBU1NFUlQocGl4ZWxBcnJheSk7CisgICAgICAgIEFTU0VSVChwaXhlbEFy
cmF5LT5sZW5ndGgoKSA+PSBwaXhlbERhdGFMZW5ndGgpOworICAgICAgICBtZW1jcHkocGl4ZWxB
cnJheS0+ZGF0YSgpLCBtX2J1ZmZlciArIG1fcG9zaXRpb24sIHBpeGVsRGF0YUxlbmd0aCk7Cisg
ICAgICAgIG1fcG9zaXRpb24gKz0gcGl4ZWxEYXRhTGVuZ3RoOworICAgICAgICAqdmFsdWUgPSB0
b1Y4KGltYWdlRGF0YSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKwogICAgIGJvb2wg
ZG9SZWFkVWludDMyKHVpbnQzMl90KiB2YWx1ZSkKICAgICB7CiAgICAgICAgICp2YWx1ZSA9IDA7
Ci0gICAgICAgIGNoYXIgY3VycmVudEJ5dGU7CisgICAgICAgIHVpbnQ4X3QgY3VycmVudEJ5dGU7
CiAgICAgICAgIGludCBzaGlmdCA9IDA7CiAgICAgICAgIGRvIHsKICAgICAgICAgICAgIGlmICht
X3Bvc2l0aW9uID49IG1fbGVuZ3RoKQpAQCAtNTc5LDE0ICs3NTYsMjUgQEAgcHJpdmF0ZToKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgY29uc3QgY2hhciogbV9idWZmZXI7Cisg
ICAgYm9vbCBkb1JlYWROdW1iZXIoZG91YmxlKiBudW1iZXIpCisgICAgeworICAgICAgICBpZiAo
bV9wb3NpdGlvbiArIHNpemVvZihkb3VibGUpID4gbV9sZW5ndGgpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIHVpbnQ4X3QqIG51bWJlckFzQnl0ZUFycmF5ID0gcmVpbnRlcnBy
ZXRfY2FzdDx1aW50OF90Kj4obnVtYmVyKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHNpemVvZihkb3VibGUpOyArK2kpCisgICAgICAgICAgICBudW1iZXJBc0J5dGVBcnJheVtp
XSA9IG1fYnVmZmVyW21fcG9zaXRpb24rK107CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KworICAgIGNvbnN0IHVpbnQ4X3QqIG1fYnVmZmVyOwogICAgIGNvbnN0IHVuc2lnbmVkIG1fbGVu
Z3RoOwogICAgIHVuc2lnbmVkIG1fcG9zaXRpb247CiB9OwogCi1jbGFzcyBEZXNlcmlhbGl6ZXIg
eworY2xhc3MgRGVzZXJpYWxpemVyIDogcHVibGljIENvbXBvc2l0ZUNyZWF0b3IgewogcHVibGlj
OgotICAgIGV4cGxpY2l0IERlc2VyaWFsaXplcihSZWFkZXImIHJlYWRlcikgOiBtX3JlYWRlcihy
ZWFkZXIpCisgICAgZXhwbGljaXQgRGVzZXJpYWxpemVyKFJlYWRlciYgcmVhZGVyKQorICAgICAg
ICA6IG1fcmVhZGVyKHJlYWRlcikKICAgICB7CiAgICAgfQogCkBAIC02MDIsNDEgKzc5MCw2MCBA
QCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBzY29wZS5DbG9zZShlbGVtZW50KDApKTsKICAgICB9
CiAKKyAgICB2aXJ0dWFsIGJvb2wgY3JlYXRlQXJyYXkodWludDMyX3QgbGVuZ3RoLCB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4qIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKGxlbmd0aCA+IHN0YWNr
RGVwdGgoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgdjg6OkxvY2FsPHY4
OjpBcnJheT4gYXJyYXkgPSB2ODo6QXJyYXk6Ok5ldyhsZW5ndGgpOworICAgICAgICBpZiAoYXJy
YXkuSXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBjb25zdCBp
bnQgZGVwdGggPSBzdGFja0RlcHRoKCkgLSBsZW5ndGg7CisgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBsZW5ndGg7ICsraSkKKyAgICAgICAgICAgIGFycmF5LT5TZXQoaSwgZWxlbWVu
dChkZXB0aCArIGkpKTsKKyAgICAgICAgcG9wKGxlbmd0aCk7CisgICAgICAgICp2YWx1ZSA9IGFy
cmF5OworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIGJvb2wgY3Jl
YXRlT2JqZWN0KHVpbnQzMl90IG51bVByb3BlcnRpZXMsIHY4OjpIYW5kbGU8djg6OlZhbHVlPiog
dmFsdWUpCisgICAgeworICAgICAgICB2ODo6TG9jYWw8djg6Ok9iamVjdD4gb2JqZWN0ID0gdjg6
Ok9iamVjdDo6TmV3KCk7CisgICAgICAgIGlmIChvYmplY3QuSXNFbXB0eSgpKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gaW5pdGlhbGl6ZU9iamVjdChvYmplY3Qs
IG51bVByb3BlcnRpZXMsIHZhbHVlKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIGJvb2wgY3JlYXRl
U3BhcnNlQXJyYXkodWludDMyX3QgbnVtUHJvcGVydGllcywgdWludDMyX3QgbGVuZ3RoLCB2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4qIHZhbHVlKQorICAgIHsKKyAgICAgICAgdjg6OkxvY2FsPHY4OjpB
cnJheT4gYXJyYXkgPSB2ODo6QXJyYXk6Ok5ldyhsZW5ndGgpOworICAgICAgICBpZiAoYXJyYXku
SXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gaW5p
dGlhbGl6ZU9iamVjdChhcnJheSwgbnVtUHJvcGVydGllcywgdmFsdWUpOworICAgIH0KKwogcHJp
dmF0ZToKKyAgICBib29sIGluaXRpYWxpemVPYmplY3Qodjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBv
YmplY3QsIHVpbnQzMl90IG51bVByb3BlcnRpZXMsIHY4OjpIYW5kbGU8djg6OlZhbHVlPiogdmFs
dWUpCisgICAgeworICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSAyICogbnVtUHJvcGVydGllczsK
KyAgICAgICAgaWYgKGxlbmd0aCA+IHN0YWNrRGVwdGgoKSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gc3RhY2tEZXB0aCgpIC0gbGVuZ3RoOyBp
IDwgc3RhY2tEZXB0aCgpOyBpICs9IDIpIHsKKyAgICAgICAgICAgIHY4OjpMb2NhbDx2ODo6VmFs
dWU+IHByb3BlcnR5TmFtZSA9IGVsZW1lbnQoaSk7CisgICAgICAgICAgICB2ODo6TG9jYWw8djg6
OlZhbHVlPiBwcm9wZXJ0eVZhbHVlID0gZWxlbWVudChpICsgMSk7CisgICAgICAgICAgICBvYmpl
Y3QtPlNldChwcm9wZXJ0eU5hbWUsIHByb3BlcnR5VmFsdWUpOworICAgICAgICB9CisgICAgICAg
IHBvcChsZW5ndGgpOworICAgICAgICAqdmFsdWUgPSBvYmplY3Q7CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKwogICAgIGJvb2wgZG9EZXNlcmlhbGl6ZSgpCiAgICAgewotICAgICAgICBT
ZXJpYWxpemF0aW9uVGFnIHRhZzsKICAgICAgICAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWU7
Ci0gICAgICAgIGludCBsZW5ndGggPSAwOwotICAgICAgICBpZiAoIW1fcmVhZGVyLnJlYWQoJnRh
ZywgJnZhbHVlLCAmbGVuZ3RoKSkKKyAgICAgICAgaWYgKCFtX3JlYWRlci5yZWFkKCZ2YWx1ZSwg
KnRoaXMpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoIXZhbHVlLklz
RW1wdHkoKSkgeworICAgICAgICBpZiAoIXZhbHVlLklzRW1wdHkoKSkKICAgICAgICAgICAgIHB1
c2godmFsdWUpOwotICAgICAgICB9IGVsc2UgaWYgKHRhZyA9PSBPYmplY3RUYWcpIHsKLSAgICAg
ICAgICAgIGlmIChsZW5ndGggPiBzdGFja0RlcHRoKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICAgICAgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IG9iamVjdCA9IHY4OjpP
YmplY3Q6Ok5ldygpOwotICAgICAgICAgICAgZm9yIChpbnQgaSA9IHN0YWNrRGVwdGgoKSAtIGxl
bmd0aDsgaSA8IHN0YWNrRGVwdGgoKTsgaSArPSAyKSB7Ci0gICAgICAgICAgICAgICAgdjg6Okxv
Y2FsPHY4OjpWYWx1ZT4gcHJvcGVydHlOYW1lID0gZWxlbWVudChpKTsKLSAgICAgICAgICAgICAg
ICB2ODo6TG9jYWw8djg6OlZhbHVlPiBwcm9wZXJ0eVZhbHVlID0gZWxlbWVudChpICsgMSk7Ci0g
ICAgICAgICAgICAgICAgb2JqZWN0LT5TZXQocHJvcGVydHlOYW1lLCBwcm9wZXJ0eVZhbHVlKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHBvcChsZW5ndGgpOwotICAgICAgICAgICAgcHVz
aChvYmplY3QpOwotICAgICAgICB9IGVsc2UgaWYgKHRhZyA9PSBBcnJheVRhZykgewotICAgICAg
ICAgICAgaWYgKGxlbmd0aCA+IHN0YWNrRGVwdGgoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgICAgICB2ODo6TG9jYWw8djg6OkFycmF5PiBhcnJheSA9IHY4OjpBcnJh
eTo6TmV3KGxlbmd0aCk7Ci0gICAgICAgICAgICBjb25zdCBpbnQgZGVwdGggPSBzdGFja0RlcHRo
KCkgLSBsZW5ndGg7Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdjg6OkhhbmRsZVNj
b3BlIHNjb3BlOwotICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyAr
K2kpCi0gICAgICAgICAgICAgICAgICAgIGFycmF5LT5TZXQodjg6OkludGVnZXI6Ok5ldyhpKSwg
ZWxlbWVudChkZXB0aCArIGkpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHBvcChsZW5n
dGgpOwotICAgICAgICAgICAgcHVzaChhcnJheSk7Ci0gICAgICAgIH0gZWxzZSBpZiAodGFnICE9
IFBhZGRpbmdUYWcpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0KIApAQCAtNjQ4LDcgKzg1NSw3IEBAIHByaXZhdGU6CiAgICAgICAgIG1fc3Rh
Y2suc2hyaW5rKG1fc3RhY2suc2l6ZSgpIC0gbGVuZ3RoKTsKICAgICB9CiAKLSAgICBpbnQgc3Rh
Y2tEZXB0aCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhY2suc2l6ZSgpOyB9CisgICAgdW5zaWduZWQg
c3RhY2tEZXB0aCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhY2suc2l6ZSgpOyB9CiAKICAgICB2ODo6
TG9jYWw8djg6OlZhbHVlPiBlbGVtZW50KHVuc2lnbmVkIGluZGV4KQogICAgIHsKQEAgLTY5MSw3
ICs4OTgsNyBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpk
ZXNlcmlhbGl6ZSgpCiAgICAgaWYgKCFtX2RhdGEuaW1wbCgpKQogICAgICAgICByZXR1cm4gdjg6
Ok51bGwoKTsKICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoQnVmZmVyVmFsdWVUeXBlKSA9PSAy
LCBCdWZmZXJWYWx1ZVR5cGVJc1R3b0J5dGVzKTsKLSAgICBSZWFkZXIgcmVhZGVyKHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgY2hhcio+KG1fZGF0YS5pbXBsKCktPmNoYXJhY3RlcnMoKSksIDIgKiBt
X2RhdGEubGVuZ3RoKCkpOworICAgIFJlYWRlciByZWFkZXIocmVpbnRlcnByZXRfY2FzdDxjb25z
dCB1aW50OF90Kj4obV9kYXRhLmltcGwoKS0+Y2hhcmFjdGVycygpKSwgMiAqIG1fZGF0YS5sZW5n
dGgoKSk7CiAgICAgRGVzZXJpYWxpemVyIGRlc2VyaWFsaXplcihyZWFkZXIpOwogICAgIHJldHVy
biBkZXNlcmlhbGl6ZXIuZGVzZXJpYWxpemUoKTsKIH0K
</data>

          </attachment>
      

    </bug>

</bugzilla>