<?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>27372</bug_id>
          
          <creation_ts>2009-07-17 08:16:47 -0700</creation_ts>
          <short_desc>[v8] switch to faster methods to obtain and set implementation</short_desc>
          <delta_ts>2009-07-20 19:19:49 -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>WebKit 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>1</everconfirmed>
          <reporter name="anton muhin">antonm</reporter>
          <assigned_to name="Adam Barth">abarth</assigned_to>
          <cc>abarth</cc>
    
    <cc>ager</cc>
    
    <cc>dglazkov</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>132579</commentid>
    <comment_count>0</comment_count>
    <who name="anton muhin">antonm</who>
    <bug_when>2009-07-17 08:16:47 -0700</bug_when>
    <thetext>Recently new methods to access internal fields were introduced which should be faster.  Switch to them plus refactor a bit the code to pass v8::Handle&lt;v8::Object&gt; (instead of &lt;v8::Value&gt;) into the methods fetching implementation from the wrapper.

Please, note, this change should not be landed before http://codereview.chromium.org/159003 is submitted.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132580</commentid>
    <comment_count>1</comment_count>
      <attachid>32942</attachid>
    <who name="anton muhin">antonm</who>
    <bug_when>2009-07-17 08:20:03 -0700</bug_when>
    <thetext>Created attachment 32942
Initial version</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132707</commentid>
    <comment_count>2</comment_count>
    <who name="Mads Ager">ager</who>
    <bug_when>2009-07-17 14:26:37 -0700</bug_when>
    <thetext>This looks fine to me.

I have landed the change in chromium that this change depends on, so it is safe to land this change once it gets the r+.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132853</commentid>
    <comment_count>3</comment_count>
      <attachid>32942</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-07-17 22:55:51 -0700</bug_when>
    <thetext>Comment on attachment 32942
Initial version

Thanks for the patch.  This looks great.  One question, how do we know this is safe:

+        node = V8DOMWrapper::convertDOMWrapperToNode&lt;Node&gt;(v8::Handle&lt;v8::Object&gt;::Cast(args[0]));

or

+        contextNode = V8DOMWrapper::convertDOMWrapperToNode&lt;Node&gt;(v8::Handle&lt;v8::Object&gt;::Cast(args[1]));

Why can&apos;t the page pass a value as the argument?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133111</commentid>
    <comment_count>4</comment_count>
    <who name="anton muhin">antonm</who>
    <bug_when>2009-07-20 04:29:08 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; This looks fine to me.
&gt; 
&gt; I have landed the change in chromium that this change depends on, so it is safe
&gt; to land this change once it gets the r+.

Thanks a lot, Mads.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133112</commentid>
    <comment_count>5</comment_count>
    <who name="anton muhin">antonm</who>
    <bug_when>2009-07-20 04:30:25 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 32942 [details])
&gt; Thanks for the patch.  This looks great.  One question, how do we know this is
&gt; safe:
&gt; 
&gt; +        node =
&gt; V8DOMWrapper::convertDOMWrapperToNode&lt;Node&gt;(v8::Handle&lt;v8::Object&gt;::Cast(args[0]));
&gt; 
&gt; or
&gt; 
&gt; +        contextNode =
&gt; V8DOMWrapper::convertDOMWrapperToNode&lt;Node&gt;(v8::Handle&lt;v8::Object&gt;::Cast(args[1]));
&gt; 
&gt; Why can&apos;t the page pass a value as the argument?

Adam, could you double check, but we did this cast unconditionally in DOMWrapper::convertToNativeObject anyway.  I just moved cast into callers, not callee not to penalize callers which already have an object</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133200</commentid>
    <comment_count>6</comment_count>
      <attachid>32942</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-07-20 12:40:45 -0700</bug_when>
    <thetext>Comment on attachment 32942
Initial version

Awesome.  Thanks for explain this patch to me.  Yes, I see now that the callers all have branches guarding the caste (and that we&apos;ve retained the assert that&apos;s keeping us honest).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133325</commentid>
    <comment_count>7</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-07-20 18:50:13 -0700</bug_when>
    <thetext>Will land.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133333</commentid>
    <comment_count>8</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-07-20 19:19:49 -0700</bug_when>
    <thetext>Committing to http://svn.webkit.org/repository/webkit/trunk ...
	M	WebCore/ChangeLog
	M	WebCore/bindings/scripts/CodeGeneratorV8.pm
	M	WebCore/bindings/v8/V8DOMWrapper.cpp
	M	WebCore/bindings/v8/V8DOMWrapper.h
	M	WebCore/bindings/v8/custom/V8CanvasRenderingContext2DCustom.cpp
	M	WebCore/bindings/v8/custom/V8ClipboardCustom.cpp
	M	WebCore/bindings/v8/custom/V8DocumentCustom.cpp
	M	WebCore/bindings/v8/custom/V8ElementCustom.cpp
	M	WebCore/bindings/v8/custom/V8HTMLCanvasElementCustom.cpp
	M	WebCore/bindings/v8/custom/V8HTMLOptionsCollectionCustom.cpp
	M	WebCore/bindings/v8/custom/V8HTMLSelectElementCustom.cpp
	M	WebCore/bindings/v8/custom/V8InspectorControllerCustom.cpp
	M	WebCore/bindings/v8/custom/V8NodeCustom.cpp
	M	WebCore/bindings/v8/custom/V8XSLTProcessorCustom.cpp
Committed r46145
	M	WebCore/ChangeLog
	M	WebCore/bindings/scripts/CodeGeneratorV8.pm
	M	WebCore/bindings/v8/V8DOMWrapper.cpp
	M	WebCore/bindings/v8/V8DOMWrapper.h
	M	WebCore/bindings/v8/custom/V8HTMLCanvasElementCustom.cpp
	M	WebCore/bindings/v8/custom/V8DocumentCustom.cpp
	M	WebCore/bindings/v8/custom/V8NodeCustom.cpp
	M	WebCore/bindings/v8/custom/V8CanvasRenderingContext2DCustom.cpp
	M	WebCore/bindings/v8/custom/V8InspectorControllerCustom.cpp
	M	WebCore/bindings/v8/custom/V8ElementCustom.cpp
	M	WebCore/bindings/v8/custom/V8HTMLOptionsCollectionCustom.cpp
	M	WebCore/bindings/v8/custom/V8ClipboardCustom.cpp
	M	WebCore/bindings/v8/custom/V8HTMLSelectElementCustom.cpp
	M	WebCore/bindings/v8/custom/V8XSLTProcessorCustom.cpp
r46145 = b8d7bc3aef4a0028123fa2cd9ca298b39e32e9dd (trunk)
No changes between current HEAD and refs/remotes/trunk
Resetting to the latest refs/remotes/trunk
http://trac.webkit.org/changeset/46145</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32942</attachid>
            <date>2009-07-17 08:20:03 -0700</date>
            <delta_ts>2009-07-20 12:40:45 -0700</delta_ts>
            <desc>Initial version</desc>
            <filename>webcore.patch</filename>
            <type>text/plain</type>
            <size>24149</size>
            <attacher name="anton muhin">antonm</attacher>
            
              <data encoding="base64">SW5kZXg6IHRoaXJkX3BhcnR5L1dlYktpdC9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSB0aGlyZF9wYXJ0eS9XZWJLaXQvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDQ2MDM1KQor
KysgdGhpcmRfcGFydHkvV2ViS2l0L1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDIgQEAKKzIwMDktMDctMTcgIEFudG9uIE11aGluICA8YW50b25tQGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBT
d2l0Y2ggdG8gZmFzdGVyIG1ldGhvZHMgdG8gYWNjZXNzIGludGVybmFsIGZpZWxkcy4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI3MzcyCisKKyAgICAg
ICAgTWlub3IgcmVmYWN0b3JpbmcuCisKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVH
ZW5lcmF0b3JWOC5wbToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOERPTVdyYXBwZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6VjhET01XcmFwcGVyOjpjb252ZXJ0VG9TVkdQT0RUeXBlSW1wbCk6
CisgICAgICAgIChXZWJDb3JlOjpWOERPTVdyYXBwZXI6OnNldERPTVdyYXBwZXIpOgorICAgICAg
ICAqIGJpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5oOgorICAgICAgICAoV2ViQ29yZTo6VjhET01X
cmFwcGVyOjpjb252ZXJ0RE9NV3JhcHBlclRvTmF0aXZlKToKKyAgICAgICAgKFdlYkNvcmU6OlY4
RE9NV3JhcHBlcjo6Y29udmVydERPTVdyYXBwZXJUb05vZGUpOgorICAgICAgICAoV2ViQ29yZTo6
VjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6
VjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVFdmVudCk6CisgICAgICAgICogYmluZGluZ3Mv
djgvY3VzdG9tL1Y4Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNBTExCQUNLX0ZVTkNfREVDTCk6CisgICAgICAgICogYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4Q2xpcGJvYXJkQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNBTExCQUNLX0ZV
TkNfREVDTCk6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4RG9jdW1lbnRDdXN0b20u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0FMTEJBQ0tfRlVOQ19ERUNMKToKKyAgICAgICAgKiBi
aW5kaW5ncy92OC9jdXN0b20vVjhFbGVtZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNBTExCQUNLX0ZVTkNfREVDTCk6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRN
TENhbnZhc0VsZW1lbnRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0FMTEJBQ0tfRlVO
Q19ERUNMKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MT3B0aW9uc0NvbGxl
Y3Rpb25DdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0FMTEJBQ0tfRlVOQ19ERUNMKToK
KyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MU2VsZWN0RWxlbWVudEN1c3RvbS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpyZW1vdmVFbGVtZW50KToKKyAgICAgICAgKiBiaW5kaW5n
cy92OC9jdXN0b20vVjhJbnNwZWN0b3JDb250cm9sbGVyQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkNBTExCQUNLX0ZVTkNfREVDTCk6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9t
L1Y4Tm9kZUN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQUxMQkFDS19GVU5DX0RFQ0wp
OgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOFhTTFRQcm9jZXNzb3JDdXN0b20uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Q0FMTEJBQ0tfRlVOQ19ERUNMKToKKwogMjAwOS0wNy0xNyAg
SG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIgIDx6ZWNrZUBzZWxmaXNoLm9yZz4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBHdXN0YXZvIE5vcm9uaGEuCkluZGV4OiB0aGlyZF9wYXJ0eS9XZWJLaXQv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSB0aGlyZF9wYXJ0eS9XZWJLaXQvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0
b3JWOC5wbQkocmV2aXNpb24gNDU5ODUpCisrKyB0aGlyZF9wYXJ0eS9XZWJLaXQvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQkod29ya2luZyBjb3B5KQpAQCAtMTgz
OSw3ICsxODM5LDcgQEAgc3ViIEpTVmFsdWVUb05hdGl2ZQogICAgICAgICAkaW1wbEluY2x1ZGVz
eyJWOE5vZGUuaCJ9ID0gMTsKIAogICAgICAgICAjIEV2ZW50VGFyZ2V0IGlzIG5vdCBpbiBET00g
aGllcmFyY2h5LCBidXQgYWxsIE5vZGVzIGFyZSBFdmVudFRhcmdldC4KLSAgICAgICAgcmV0dXJu
ICJWOE5vZGU6Okhhc0luc3RhbmNlKCR2YWx1ZSkgPyBWOERPTVdyYXBwZXI6OmNvbnZlcnRET01X
cmFwcGVyVG9Ob2RlPE5vZGU+KCR2YWx1ZSkgOiAwIjsKKyAgICAgICAgcmV0dXJuICJWOE5vZGU6
Okhhc0luc3RhbmNlKCR2YWx1ZSkgPyBWOERPTVdyYXBwZXI6OmNvbnZlcnRET01XcmFwcGVyVG9O
b2RlPE5vZGU+KHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QoJHZhbHVlKSkgOiAwIjsKICAg
ICB9CiAKICAgICBBZGRJbmNsdWRlc0ZvclR5cGUoJHR5cGUpOwpAQCAtMTg1MCw3ICsxODUwLDcg
QEAgc3ViIEpTVmFsdWVUb05hdGl2ZQogCiAgICAgICAgICMgUGVyZm9ybSB0eXBlIGNoZWNrcyBv
biB0aGUgcGFyYW1ldGVyLCBpZiBpdCBpcyBleHBlY3RlZCBOb2RlIHR5cGUsCiAgICAgICAgICMg
cmV0dXJuIE5VTEwuCi0gICAgICAgIHJldHVybiAiVjgke3R5cGV9OjpIYXNJbnN0YW5jZSgkdmFs
dWUpID8gVjhET01XcmFwcGVyOjpjb252ZXJ0RE9NV3JhcHBlclRvTm9kZTwke3R5cGV9PigkdmFs
dWUpIDogMCI7CisgICAgICAgIHJldHVybiAiVjgke3R5cGV9OjpIYXNJbnN0YW5jZSgkdmFsdWUp
ID8gVjhET01XcmFwcGVyOjpjb252ZXJ0RE9NV3JhcHBlclRvTm9kZTwke3R5cGV9Pih2ODo6SGFu
ZGxlPHY4OjpPYmplY3Q+OjpDYXN0KCR2YWx1ZSkpIDogMCI7CiAgICAgfSBlbHNlIHsKICAgICAg
ICAgIyBUT0RPOiBUZW1wb3JhcnkgdG8gYXZvaWQgV2luZG93IG5hbWUgY29uZmxpY3QuCiAgICAg
ICAgIG15ICRjbGFzc0luZGV4ID0gdWMoJHR5cGUpOwpJbmRleDogdGhpcmRfcGFydHkvV2ViS2l0
L1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSB0aGly
ZF9wYXJ0eS9XZWJLaXQvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdyYXBwZXIuY3BwCShyZXZp
c2lvbiA0NTk4NSkKKysrIHRoaXJkX3BhcnR5L1dlYktpdC9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4
RE9NV3JhcHBlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzOSw3ICs2MzksNyBAQCBWOENsYXNz
SW5kZXg6OlY4V3JhcHBlclR5cGUgVjhET01XcmFwcGVyCiAKIHZvaWQqIFY4RE9NV3JhcHBlcjo6
Y29udmVydFRvU1ZHUE9EVHlwZUltcGwoVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlIHR5cGUs
IHY4OjpIYW5kbGU8djg6OlZhbHVlPiBvYmplY3QpCiB7Ci0gICAgcmV0dXJuIGlzV3JhcHBlck9m
VHlwZShvYmplY3QsIHR5cGUpID8gY29udmVydERPTVdyYXBwZXJUb05hdGl2ZTx2b2lkPihvYmpl
Y3QpIDogMDsKKyAgICByZXR1cm4gaXNXcmFwcGVyT2ZUeXBlKG9iamVjdCwgdHlwZSkgPyBjb252
ZXJ0RE9NV3JhcHBlclRvTmF0aXZlPHZvaWQ+KHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3Qo
b2JqZWN0KSkgOiAwOwogfQogCiB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IFY4RE9NV3JhcHBlcjo6
bG9va3VwRE9NV3JhcHBlcihWOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5cGUgdHlwZSwgdjg6Okhh
bmRsZTx2ODo6VmFsdWU+IHZhbHVlKQpAQCAtNjU4LDE4ICs2NTgsNiBAQCB2ODo6SGFuZGxlPHY4
OjpPYmplY3Q+IFY4RE9NV3JhcHBlcjo6bG9vCiAgICAgcmV0dXJuIG5vdEhhbmRsZWRCeUludGVy
Y2VwdG9yKCk7CiB9IAogCi12b2lkKiBWOERPTVdyYXBwZXI6OmNvbnZlcnRET01XcmFwcGVyVG9O
b2RlSGVscGVyKHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSkKLXsKLSAgICBBU1NFUlQobWF5
YmVET01XcmFwcGVyKHZhbHVlKSk7Ci0KLSAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IG9iamVj
dCA9IHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QodmFsdWUpOwotCi0gICAgQVNTRVJUKGRv
bVdyYXBwZXJUeXBlKG9iamVjdCkgPT0gVjhDbGFzc0luZGV4OjpOT0RFKTsKLQotICAgIHY4OjpI
YW5kbGU8djg6OlZhbHVlPiB3cmFwcGVyID0gb2JqZWN0LT5HZXRJbnRlcm5hbEZpZWxkKFY4Q3Vz
dG9tOjprRE9NV3JhcHBlck9iamVjdEluZGV4KTsKLSAgICByZXR1cm4gZXh0cmFjdENQb2ludGVy
PE5vZGU+KHdyYXBwZXIpOwotfQotCiBQYXNzUmVmUHRyPE5vZGVGaWx0ZXI+IFY4RE9NV3JhcHBl
cjo6d3JhcE5hdGl2ZU5vZGVGaWx0ZXIodjg6OkhhbmRsZTx2ODo6VmFsdWU+IGZpbHRlcikKIHsK
ICAgICAvLyBBIE5vZGVGaWx0ZXIgaXMgdXNlZCB3aGVuIHdhbGtpbmcgdGhyb3VnaCBhIERPTSB0
cmVlIG9yIGl0ZXJhdGluZyB0cmVlCkBAIC03MTYsNyArNzA0LDcgQEAgdjg6OkxvY2FsPHY4OjpP
YmplY3Q+IFY4RE9NV3JhcHBlcjo6aW5zdAogdm9pZCBWOERPTVdyYXBwZXI6OnNldERPTVdyYXBw
ZXIodjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBvYmplY3QsIGludCB0eXBlLCB2b2lkKiBjcHRyKQog
ewogICAgIEFTU0VSVChvYmplY3QtPkludGVybmFsRmllbGRDb3VudCgpID49IDIpOwotICAgIG9i
amVjdC0+U2V0SW50ZXJuYWxGaWVsZChWOEN1c3RvbTo6a0RPTVdyYXBwZXJPYmplY3RJbmRleCwg
d3JhcENQb2ludGVyKGNwdHIpKTsKKyAgICBvYmplY3QtPlNldFBvaW50ZXJJbkludGVybmFsRmll
bGQoVjhDdXN0b206OmtET01XcmFwcGVyT2JqZWN0SW5kZXgsIGNwdHIpOwogICAgIG9iamVjdC0+
U2V0SW50ZXJuYWxGaWVsZChWOEN1c3RvbTo6a0RPTVdyYXBwZXJUeXBlSW5kZXgsIHY4OjpJbnRl
Z2VyOjpOZXcodHlwZSkpOwogfQogCkluZGV4OiB0aGlyZF9wYXJ0eS9XZWJLaXQvV2ViQ29yZS9i
aW5kaW5ncy92OC9WOERPTVdyYXBwZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSB0aGlyZF9wYXJ0eS9XZWJL
aXQvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdyYXBwZXIuaAkocmV2aXNpb24gNDU5ODUpCisr
KyB0aGlyZF9wYXJ0eS9XZWJLaXQvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdyYXBwZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtMTAxLDE3ICsxMDEsMTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgICAgICAvLyBBIGhlbHBlciBmdW5jdGlvbiBleHRyYWN0IG5hdGl2ZSBvYmplY3QgcG9pbnRl
ciBmcm9tIGEgRE9NIHdyYXBwZXIKICAgICAgICAgLy8gYW5kIGNhc3QgdG8gdGhlIHNwZWNpZmll
ZCB0eXBlLgogICAgICAgICB0ZW1wbGF0ZSA8Y2xhc3MgQz4KLSAgICAgICAgc3RhdGljIEMqIGNv
bnZlcnRET01XcmFwcGVyVG9OYXRpdmUodjg6OkhhbmRsZTx2ODo6VmFsdWU+IG9iamVjdCkKKyAg
ICAgICAgc3RhdGljIEMqIGNvbnZlcnRET01XcmFwcGVyVG9OYXRpdmUodjg6OkhhbmRsZTx2ODo6
T2JqZWN0PiBvYmplY3QpCiAgICAgICAgIHsKICAgICAgICAgICAgIEFTU0VSVChtYXliZURPTVdy
YXBwZXIob2JqZWN0KSk7Ci0gICAgICAgICAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gcHRyID0g
djg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChvYmplY3QpLT5HZXRJbnRlcm5hbEZpZWxkKFY4
Q3VzdG9tOjprRE9NV3JhcHBlck9iamVjdEluZGV4KTsKLSAgICAgICAgICAgIHJldHVybiBleHRy
YWN0Q1BvaW50ZXI8Qz4ocHRyKTsKKyAgICAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0
PEMqPihvYmplY3QtPkdldFBvaW50ZXJGcm9tSW50ZXJuYWxGaWVsZChWOEN1c3RvbTo6a0RPTVdy
YXBwZXJPYmplY3RJbmRleCkpOwogICAgICAgICB9CiAKLSAgICAgICAgLy8gQSBoZWxwIGZ1bmN0
aW9uIGV4dHJhY3QgYSBub2RlIHR5cGUgcG9pbnRlciBmcm9tIGEgRE9NIHdyYXBwZXIuCi0gICAg
ICAgIC8vIFdyYXBwZWQgcG9pbnRlciBtdXN0IGJlIGNhc3QgdG8gTm9kZSogZmlyc3QuCi0gICAg
ICAgIHN0YXRpYyB2b2lkKiBjb252ZXJ0RE9NV3JhcHBlclRvTm9kZUhlbHBlcih2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4pOwotCiAgICAgICAgIC8vIENyZWF0ZSBhIFY4IHdyYXBwZXIgZm9yIGEgQyBw
b2ludGVyCiAgICAgICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gd3JhcENQb2ludGVy
KHZvaWQqIGNwdHIpCiAgICAgICAgIHsKQEAgLTEyOSw5ICsxMjQsMTEgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgICAgICB9CiAKICAgICAgICAgdGVtcGxhdGUgPGNsYXNzIEM+Ci0gICAgICAg
IHN0YXRpYyBDKiBjb252ZXJ0RE9NV3JhcHBlclRvTm9kZSh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4g
dmFsdWUpCisgICAgICAgIHN0YXRpYyBDKiBjb252ZXJ0RE9NV3JhcHBlclRvTm9kZSh2ODo6SGFu
ZGxlPHY4OjpPYmplY3Q+IG9iamVjdCkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PEMqPihjb252ZXJ0RE9NV3JhcHBlclRvTm9kZUhlbHBlcih2YWx1ZSkpOworICAg
ICAgICAgICAgQVNTRVJUKG1heWJlRE9NV3JhcHBlcihvYmplY3QpKTsKKyAgICAgICAgICAgIEFT
U0VSVChkb21XcmFwcGVyVHlwZShvYmplY3QpID09IFY4Q2xhc3NJbmRleDo6Tk9ERSk7CisgICAg
ICAgICAgICByZXR1cm4gY29udmVydERPTVdyYXBwZXJUb05hdGl2ZTxDPihvYmplY3QpOwogICAg
ICAgICB9CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KQEAgLTE0Niw3ICsxNDMsNyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gY29udmVydE5vZGVUb1Y4T2JqZWN0KE5vZGUqKTsKIAogICAgICAgICB0ZW1wbGF0ZSA8Y2xh
c3MgQz4KLSAgICAgICAgc3RhdGljIEMqIGNvbnZlcnRUb05hdGl2ZU9iamVjdChWOENsYXNzSW5k
ZXg6OlY4V3JhcHBlclR5cGUgdHlwZSwgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IG9iamVjdCkKKyAg
ICAgICAgc3RhdGljIEMqIGNvbnZlcnRUb05hdGl2ZU9iamVjdChWOENsYXNzSW5kZXg6OlY4V3Jh
cHBlclR5cGUgdHlwZSwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBvYmplY3QpCiAgICAgICAgIHsK
ICAgICAgICAgICAgIC8vIE5hdGl2ZSBldmVudCBsaXN0ZW5lciBpcyBwZXIgZnJhbWUsIGl0IGNh
bm5vdCBiZSBoYW5kbGVkIGJ5IHRoaXMgZ2VuZXJpYyBmdW5jdGlvbi4KICAgICAgICAgICAgIEFT
U0VSVCh0eXBlICE9IFY4Q2xhc3NJbmRleDo6RVZFTlRMSVNURU5FUik7CkBAIC0xNzcsNyArMTc0
LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB7CiAgICAgICAgICAgICBpZiAoIWlz
RE9NRXZlbnRXcmFwcGVyKGpzRXZlbnQpKQogICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAg
ICAgICAgICAgcmV0dXJuIGNvbnZlcnRET01XcmFwcGVyVG9OYXRpdmU8RXZlbnQ+KGpzRXZlbnQp
OworICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRET01XcmFwcGVyVG9OYXRpdmU8RXZlbnQ+KHY4
OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QoanNFdmVudCkpOwogICAgICAgICB9CiAKICAgICAg
ICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjb252ZXJ0RXZlbnRUYXJnZXRUb1Y4T2Jq
ZWN0KEV2ZW50VGFyZ2V0Kik7CkluZGV4OiB0aGlyZF9wYXJ0eS9XZWJLaXQvV2ViQ29yZS9iaW5k
aW5ncy92OC9jdXN0b20vVjhDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIHRoaXJkX3BhcnR5L1dlYktpdC9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9W
OENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREN1c3RvbS5jcHAJKHJldmlzaW9uIDQ1OTg1KQorKysg
dGhpcmRfcGFydHkvV2ViS2l0L1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjE4LDcgKzIxOCw3
IEBAIENBTExCQUNLX0ZVTkNfREVDTChDYW52YXNSZW5kZXJpbmdDb250ZXgKIAogICAgIGlmIChW
OEhUTUxJbWFnZUVsZW1lbnQ6Okhhc0luc3RhbmNlKGFyZykpIHsKICAgICAgICAgRXhjZXB0aW9u
Q29kZSBlYyA9IDA7Ci0gICAgICAgIEhUTUxJbWFnZUVsZW1lbnQqIGltYWdlX2VsZW1lbnQgPSBW
OERPTVdyYXBwZXI6OmNvbnZlcnRET01XcmFwcGVyVG9Ob2RlPEhUTUxJbWFnZUVsZW1lbnQ+KGFy
Zyk7CisgICAgICAgIEhUTUxJbWFnZUVsZW1lbnQqIGltYWdlX2VsZW1lbnQgPSBWOERPTVdyYXBw
ZXI6OmNvbnZlcnRET01XcmFwcGVyVG9Ob2RlPEhUTUxJbWFnZUVsZW1lbnQ+KHY4OjpIYW5kbGU8
djg6Ok9iamVjdD46OkNhc3QoYXJnKSk7CiAgICAgICAgIHN3aXRjaCAoYXJncy5MZW5ndGgoKSkg
ewogICAgICAgICBjYXNlIDM6CiAgICAgICAgICAgICBjb250ZXh0LT5kcmF3SW1hZ2UoaW1hZ2Vf
ZWxlbWVudCwgdG9GbG9hdChhcmdzWzFdKSwgdG9GbG9hdChhcmdzWzJdKSk7CkBAIC0yNDksNyAr
MjQ5LDcgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKENhbnZhc1JlbmRlcmluZ0NvbnRleAogICAgIC8v
IEhUTUxDYW52YXNFbGVtZW50CiAgICAgaWYgKFY4SFRNTENhbnZhc0VsZW1lbnQ6Okhhc0luc3Rh
bmNlKGFyZykpIHsKICAgICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgICAgIEhUTUxD
YW52YXNFbGVtZW50KiBjYW52YXNfZWxlbWVudCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydERPTVdy
YXBwZXJUb05vZGU8SFRNTENhbnZhc0VsZW1lbnQ+KGFyZyk7CisgICAgICAgIEhUTUxDYW52YXNF
bGVtZW50KiBjYW52YXNfZWxlbWVudCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydERPTVdyYXBwZXJU
b05vZGU8SFRNTENhbnZhc0VsZW1lbnQ+KHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QoYXJn
KSk7CiAgICAgICAgIHN3aXRjaCAoYXJncy5MZW5ndGgoKSkgewogICAgICAgICBjYXNlIDM6CiAg
ICAgICAgICAgICBjb250ZXh0LT5kcmF3SW1hZ2UoY2FudmFzX2VsZW1lbnQsIHRvRmxvYXQoYXJn
c1sxXSksIHRvRmxvYXQoYXJnc1syXSkpOwpAQCAtMjgxLDcgKzI4MSw3IEBAIENBTExCQUNLX0ZV
TkNfREVDTChDYW52YXNSZW5kZXJpbmdDb250ZXgKICAgICAvLyBIVE1MVmlkZW9FbGVtZW50CiAg
ICAgaWYgKFY4SFRNTFZpZGVvRWxlbWVudDo6SGFzSW5zdGFuY2UoYXJnKSkgewogICAgICAgICBF
eGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICAgICAgSFRNTFZpZGVvRWxlbWVudCogdmlkZW9fZWxl
bWVudCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydERPTVdyYXBwZXJUb05vZGU8SFRNTFZpZGVvRWxl
bWVudD4oYXJnKTsKKyAgICAgICAgSFRNTFZpZGVvRWxlbWVudCogdmlkZW9fZWxlbWVudCA9IFY4
RE9NV3JhcHBlcjo6Y29udmVydERPTVdyYXBwZXJUb05vZGU8SFRNTFZpZGVvRWxlbWVudD4odjg6
OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChhcmcpKTsKICAgICAgICAgc3dpdGNoIChhcmdzLkxl
bmd0aCgpKSB7CiAgICAgICAgIGNhc2UgMzoKICAgICAgICAgICAgIGNvbnRleHQtPmRyYXdJbWFn
ZSh2aWRlb19lbGVtZW50LCB0b0Zsb2F0KGFyZ3NbMV0pLCB0b0Zsb2F0KGFyZ3NbMl0pKTsKQEAg
LTMyMiw3ICszMjIsNyBAQCBDQUxMQkFDS19GVU5DX0RFQ0woQ2FudmFzUmVuZGVyaW5nQ29udGV4
CiAgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGFyZyA9IGFyZ3NbMF07CiAKICAgICBpZiAoVjhI
VE1MSW1hZ2VFbGVtZW50OjpIYXNJbnN0YW5jZShhcmcpKSB7Ci0gICAgICAgIEhUTUxJbWFnZUVs
ZW1lbnQqIGltYWdlX2VsZW1lbnQgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRET01XcmFwcGVyVG9O
b2RlPEhUTUxJbWFnZUVsZW1lbnQ+KGFyZyk7CisgICAgICAgIEhUTUxJbWFnZUVsZW1lbnQqIGlt
YWdlX2VsZW1lbnQgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRET01XcmFwcGVyVG9Ob2RlPEhUTUxJ
bWFnZUVsZW1lbnQ+KHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QoYXJnKSk7CiAgICAgICAg
IGNvbnRleHQtPmRyYXdJbWFnZUZyb21SZWN0KGltYWdlX2VsZW1lbnQsICB0b0Zsb2F0KGFyZ3Nb
MV0pLCB0b0Zsb2F0KGFyZ3NbMl0pLCB0b0Zsb2F0KGFyZ3NbM10pLCB0b0Zsb2F0KGFyZ3NbNF0p
LCB0b0Zsb2F0KGFyZ3NbNV0pLCB0b0Zsb2F0KGFyZ3NbNl0pLCB0b0Zsb2F0KGFyZ3NbN10pLCB0
b0Zsb2F0KGFyZ3NbOF0pLCB0b1dlYkNvcmVTdHJpbmcoYXJnc1s5XSkpOwogICAgIH0gZWxzZQog
ICAgICAgICBWOFByb3h5Ojp0aHJvd0Vycm9yKFY4UHJveHk6OlR5cGVFcnJvciwgImRyYXdJbWFn
ZUZyb21SZWN0OiBJbnZhbGlkIHR5cGUgb2YgYXJndW1lbnRzIik7CkBAIC0zMzgsNyArMzM4LDcg
QEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKENhbnZhc1JlbmRlcmluZ0NvbnRleAogICAgIHY4OjpIYW5k
bGU8djg6OlZhbHVlPiBhcmcgPSBhcmdzWzBdOwogCiAgICAgaWYgKFY4SFRNTEltYWdlRWxlbWVu
dDo6SGFzSW5zdGFuY2UoYXJnKSkgewotICAgICAgICBIVE1MSW1hZ2VFbGVtZW50KiBpbWFnZV9l
bGVtZW50ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0RE9NV3JhcHBlclRvTm9kZTxIVE1MSW1hZ2VF
bGVtZW50PihhcmcpOworICAgICAgICBIVE1MSW1hZ2VFbGVtZW50KiBpbWFnZV9lbGVtZW50ID0g
VjhET01XcmFwcGVyOjpjb252ZXJ0RE9NV3JhcHBlclRvTm9kZTxIVE1MSW1hZ2VFbGVtZW50Pih2
ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KGFyZykpOwogICAgICAgICBFeGNlcHRpb25Db2Rl
IGVjID0gMDsKICAgICAgICAgUmVmUHRyPENhbnZhc1BhdHRlcm4+IHBhdHRlcm4gPSBjb250ZXh0
LT5jcmVhdGVQYXR0ZXJuKGltYWdlX2VsZW1lbnQsIHRvV2ViQ29yZVN0cmluZ1dpdGhOdWxsQ2hl
Y2soYXJnc1sxXSksIGVjKTsKICAgICAgICAgaWYgKGVjICE9IDApIHsKQEAgLTM0OSw3ICszNDks
NyBAQCBDQUxMQkFDS19GVU5DX0RFQ0woQ2FudmFzUmVuZGVyaW5nQ29udGV4CiAgICAgfQogCiAg
ICAgaWYgKFY4SFRNTENhbnZhc0VsZW1lbnQ6Okhhc0luc3RhbmNlKGFyZykpIHsKLSAgICAgICAg
SFRNTENhbnZhc0VsZW1lbnQqIGNhbnZhc19lbGVtZW50ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0
RE9NV3JhcHBlclRvTm9kZTxIVE1MQ2FudmFzRWxlbWVudD4oYXJnKTsKKyAgICAgICAgSFRNTENh
bnZhc0VsZW1lbnQqIGNhbnZhc19lbGVtZW50ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0RE9NV3Jh
cHBlclRvTm9kZTxIVE1MQ2FudmFzRWxlbWVudD4odjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2Fz
dChhcmcpKTsKICAgICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgICAgIFJlZlB0cjxD
YW52YXNQYXR0ZXJuPiBwYXR0ZXJuID0gY29udGV4dC0+Y3JlYXRlUGF0dGVybihjYW52YXNfZWxl
bWVudCwgdG9XZWJDb3JlU3RyaW5nV2l0aE51bGxDaGVjayhhcmdzWzFdKSwgZWMpOwogICAgICAg
ICBpZiAoZWMgIT0gMCkgewpJbmRleDogdGhpcmRfcGFydHkvV2ViS2l0L1dlYkNvcmUvYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4Q2xpcGJvYXJkQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSB0aGlyZF9w
YXJ0eS9XZWJLaXQvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDbGlwYm9hcmRDdXN0b20u
Y3BwCShyZXZpc2lvbiA0NTk4NSkKKysrIHRoaXJkX3BhcnR5L1dlYktpdC9XZWJDb3JlL2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOENsaXBib2FyZEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEy
NSw3ICsxMjUsNyBAQCBDQUxMQkFDS19GVU5DX0RFQ0woQ2xpcGJvYXJkU2V0RHJhZ0ltYWdlCiAK
ICAgICBOb2RlKiBub2RlID0gMDsKICAgICBpZiAoVjhOb2RlOjpIYXNJbnN0YW5jZShhcmdzWzBd
KSkKLSAgICAgICAgbm9kZSA9IFY4RE9NV3JhcHBlcjo6Y29udmVydERPTVdyYXBwZXJUb05vZGU8
Tm9kZT4oYXJnc1swXSk7CisgICAgICAgIG5vZGUgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRET01X
cmFwcGVyVG9Ob2RlPE5vZGU+KHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QoYXJnc1swXSkp
OwogCiAgICAgaWYgKCFub2RlIHx8ICFub2RlLT5pc0VsZW1lbnROb2RlKCkpCiAgICAgICAgIHJl
dHVybiB0aHJvd0Vycm9yKCJzZXREcmFnSW1hZ2VGcm9tRWxlbWVudDogSW52YWxpZCBmaXJzdCBh
cmd1bWVudCIpOwpJbmRleDogdGhpcmRfcGFydHkvV2ViS2l0L1dlYkNvcmUvYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4RG9jdW1lbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHRoaXJkX3BhcnR5L1dl
YktpdC9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOERvY3VtZW50Q3VzdG9tLmNwcAkocmV2
aXNpb24gNDU5ODUpCisrKyB0aGlyZF9wYXJ0eS9XZWJLaXQvV2ViQ29yZS9iaW5kaW5ncy92OC9j
dXN0b20vVjhEb2N1bWVudEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDcg
QEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKERvY3VtZW50RXZhbHVhdGUpCiAgICAgU3RyaW5nIGV4cHJl
c3Npb24gPSB0b1dlYkNvcmVTdHJpbmcoYXJnc1swXSk7CiAgICAgTm9kZSogY29udGV4dE5vZGUg
PSAwOwogICAgIGlmIChWOE5vZGU6Okhhc0luc3RhbmNlKGFyZ3NbMV0pKQotICAgICAgICBjb250
ZXh0Tm9kZSA9IFY4RE9NV3JhcHBlcjo6Y29udmVydERPTVdyYXBwZXJUb05vZGU8Tm9kZT4oYXJn
c1sxXSk7CisgICAgICAgIGNvbnRleHROb2RlID0gVjhET01XcmFwcGVyOjpjb252ZXJ0RE9NV3Jh
cHBlclRvTm9kZTxOb2RlPih2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KGFyZ3NbMV0pKTsK
IAogICAgIFhQYXRoTlNSZXNvbHZlciogcmVzb2x2ZXIgPSAwOwogICAgIGlmIChWOFhQYXRoTlNS
ZXNvbHZlcjo6SGFzSW5zdGFuY2UoYXJnc1syXSkpCkBAIC04Niw3ICs4Niw3IEBAIENBTExCQUNL
X0ZVTkNfREVDTChEb2N1bWVudEV2YWx1YXRlKQogQ0FMTEJBQ0tfRlVOQ19ERUNMKERvY3VtZW50
R2V0Q1NTQ2FudmFzQ29udGV4dCkKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5Eb2N1bWVudC5nZXRD
U1NDYW52YXNDb250ZXh0Iik7Ci0gICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGhvbGRlciA9IGFy
Z3MuSG9sZGVyKCk7CisgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBob2xkZXIgPSBhcmdzLkhv
bGRlcigpOwogICAgIERvY3VtZW50KiBpbXAgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRET01XcmFw
cGVyVG9Ob2RlPERvY3VtZW50Pihob2xkZXIpOwogICAgIFN0cmluZyBjb250ZXh0SWQgPSB0b1dl
YkNvcmVTdHJpbmcoYXJnc1swXSk7CiAgICAgU3RyaW5nIG5hbWUgPSB0b1dlYkNvcmVTdHJpbmco
YXJnc1sxXSk7CkluZGV4OiB0aGlyZF9wYXJ0eS9XZWJLaXQvV2ViQ29yZS9iaW5kaW5ncy92OC9j
dXN0b20vVjhFbGVtZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSB0aGlyZF9wYXJ0eS9XZWJL
aXQvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhFbGVtZW50Q3VzdG9tLmNwcAkocmV2aXNp
b24gNDU5ODUpCisrKyB0aGlyZF9wYXJ0eS9XZWJLaXQvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0
b20vVjhFbGVtZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzQsNyArNzQsNyBAQCBD
QUxMQkFDS19GVU5DX0RFQ0woRWxlbWVudFNldEF0dHJpYnV0ZU5vCiAgICAgaWYgKCFWOEF0dHI6
Okhhc0luc3RhbmNlKGFyZ3NbMF0pKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihUWVBFX01J
U01BVENIX0VSUik7CiAKLSAgICBBdHRyKiBuZXdBdHRyID0gVjhET01XcmFwcGVyOjpjb252ZXJ0
RE9NV3JhcHBlclRvTm9kZTxBdHRyPihhcmdzWzBdKTsKKyAgICBBdHRyKiBuZXdBdHRyID0gVjhE
T01XcmFwcGVyOjpjb252ZXJ0RE9NV3JhcHBlclRvTm9kZTxBdHRyPih2ODo6SGFuZGxlPHY4OjpP
YmplY3Q+OjpDYXN0KGFyZ3NbMF0pKTsKICAgICBFbGVtZW50KiBlbGVtZW50ID0gVjhET01XcmFw
cGVyOjpjb252ZXJ0RE9NV3JhcHBlclRvTm9kZTxFbGVtZW50PihhcmdzLkhvbGRlcigpKTsKIAog
ICAgIGlmICghYWxsb3dTZXR0aW5nU3JjVG9KYXZhc2NyaXB0VVJMKGVsZW1lbnQsIG5ld0F0dHIt
Pm5hbWUoKSwgbmV3QXR0ci0+dmFsdWUoKSkpCkBAIC0xMTMsNyArMTEzLDcgQEAgQ0FMTEJBQ0tf
RlVOQ19ERUNMKEVsZW1lbnRTZXRBdHRyaWJ1dGVObwogICAgIGlmICghVjhBdHRyOjpIYXNJbnN0
YW5jZShhcmdzWzBdKSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoVFlQRV9NSVNNQVRDSF9F
UlIpOwogCi0gICAgQXR0ciogbmV3QXR0ciA9IFY4RE9NV3JhcHBlcjo6Y29udmVydERPTVdyYXBw
ZXJUb05vZGU8QXR0cj4oYXJnc1swXSk7CisgICAgQXR0ciogbmV3QXR0ciA9IFY4RE9NV3JhcHBl
cjo6Y29udmVydERPTVdyYXBwZXJUb05vZGU8QXR0cj4odjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6
Q2FzdChhcmdzWzBdKSk7CiAgICAgRWxlbWVudCogZWxlbWVudCA9IFY4RE9NV3JhcHBlcjo6Y29u
dmVydERPTVdyYXBwZXJUb05vZGU8RWxlbWVudD4oYXJncy5Ib2xkZXIoKSk7CiAKICAgICBpZiAo
IWFsbG93U2V0dGluZ1NyY1RvSmF2YXNjcmlwdFVSTChlbGVtZW50LCBuZXdBdHRyLT5uYW1lKCks
IG5ld0F0dHItPnZhbHVlKCkpKQpJbmRleDogdGhpcmRfcGFydHkvV2ViS2l0L1dlYkNvcmUvYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTENhbnZhc0VsZW1lbnRDdXN0b20uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIHRoaXJkX3BhcnR5L1dlYktpdC9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxD
YW52YXNFbGVtZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gNDU5ODUpCisrKyB0aGlyZF9wYXJ0eS9X
ZWJLaXQvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MQ2FudmFzRWxlbWVudEN1c3Rv
bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogQ0FMTEJBQ0tfRlVOQ19ERUNMKEhUTUxDYW52YXNFbGVtZW50R2V0Q29udGV4dCkKIHsKICAg
ICBJTkNfU1RBVFMoIkRPTS5IVE1MQ2FudmFzRWxlbWVudC5jb250ZXh0Iik7Ci0gICAgdjg6Okhh
bmRsZTx2ODo6VmFsdWU+IGhvbGRlciA9IGFyZ3MuSG9sZGVyKCk7CisgICAgdjg6OkhhbmRsZTx2
ODo6T2JqZWN0PiBob2xkZXIgPSBhcmdzLkhvbGRlcigpOwogICAgIEhUTUxDYW52YXNFbGVtZW50
KiBpbXAgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRET01XcmFwcGVyVG9Ob2RlPEhUTUxDYW52YXNF
bGVtZW50Pihob2xkZXIpOwogICAgIFN0cmluZyBjb250ZXh0SWQgPSB0b1dlYkNvcmVTdHJpbmco
YXJnc1swXSk7CiAgICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKiByZXN1bHQgPSBpbXAtPmdl
dENvbnRleHQoY29udGV4dElkKTsKSW5kZXg6IHRoaXJkX3BhcnR5L1dlYktpdC9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxPcHRpb25zQ29sbGVjdGlvbkN1c3RvbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gdGhpcmRfcGFydHkvV2ViS2l0L1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4
SFRNTE9wdGlvbnNDb2xsZWN0aW9uQ3VzdG9tLmNwcAkocmV2aXNpb24gNDU5ODUpCisrKyB0aGly
ZF9wYXJ0eS9XZWJLaXQvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MT3B0aW9uc0Nv
bGxlY3Rpb25DdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1OSw3IEBAIENBTExC
QUNLX0ZVTkNfREVDTChIVE1MT3B0aW9uc0NvbGxlY3Rpb24KICAgICAgICAgcmV0dXJuIHY4OjpV
bmRlZmluZWQoKTsKICAgICB9CiAgICAgSFRNTE9wdGlvbnNDb2xsZWN0aW9uKiBpbXAgPSBWOERP
TVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxIVE1MT3B0aW9uc0NvbGxlY3Rpb24+KFY4
Q2xhc3NJbmRleDo6SFRNTE9QVElPTlNDT0xMRUNUSU9OLCBhcmdzLkhvbGRlcigpKTsKLSAgICBI
VE1MT3B0aW9uRWxlbWVudCogb3B0aW9uID0gVjhET01XcmFwcGVyOjpjb252ZXJ0RE9NV3JhcHBl
clRvTm9kZTxIVE1MT3B0aW9uRWxlbWVudD4oYXJnc1swXSk7CisgICAgSFRNTE9wdGlvbkVsZW1l
bnQqIG9wdGlvbiA9IFY4RE9NV3JhcHBlcjo6Y29udmVydERPTVdyYXBwZXJUb05vZGU8SFRNTE9w
dGlvbkVsZW1lbnQ+KHY4OjpIYW5kbGU8djg6Ok9iamVjdD4odjg6OkhhbmRsZTx2ODo6T2JqZWN0
Pjo6Q2FzdChhcmdzWzBdKSkpOwogCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgaWYg
KGFyZ3MuTGVuZ3RoKCkgPCAyKQpJbmRleDogdGhpcmRfcGFydHkvV2ViS2l0L1dlYkNvcmUvYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTFNlbGVjdEVsZW1lbnRDdXN0b20uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIHRoaXJkX3BhcnR5L1dlYktpdC9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxT
ZWxlY3RFbGVtZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gNDU5ODUpCisrKyB0aGlyZF9wYXJ0eS9X
ZWJLaXQvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MU2VsZWN0RWxlbWVudEN1c3Rv
bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDcgKzUxLDcgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNM
KEhUTUxTZWxlY3RFbGVtZW50UmVtbwogdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHJlbW92ZUVsZW1l
bnQoSFRNTFNlbGVjdEVsZW1lbnQqIGltcCwgY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykgCiB7
CiAgICAgaWYgKFY4SFRNTE9wdGlvbkVsZW1lbnQ6Okhhc0luc3RhbmNlKGFyZ3NbMF0pKSB7Ci0g
ICAgICAgIEhUTUxPcHRpb25FbGVtZW50KiBlbGVtZW50ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0
RE9NV3JhcHBlclRvTm9kZTxIVE1MT3B0aW9uRWxlbWVudD4oYXJnc1swXSk7CisgICAgICAgIEhU
TUxPcHRpb25FbGVtZW50KiBlbGVtZW50ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0RE9NV3JhcHBl
clRvTm9kZTxIVE1MT3B0aW9uRWxlbWVudD4odjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChh
cmdzWzBdKSk7CiAgICAgICAgIGltcC0+cmVtb3ZlKGVsZW1lbnQtPmluZGV4KCkpOwogICAgICAg
ICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwogICAgIH0KSW5kZXg6IHRoaXJkX3BhcnR5L1dlYktp
dC9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEluc3BlY3RvckNvbnRyb2xsZXJDdXN0b20u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIHRoaXJkX3BhcnR5L1dlYktpdC9XZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOEluc3BlY3RvckNvbnRyb2xsZXJDdXN0b20uY3BwCShyZXZpc2lvbiA0NTk4NSkK
KysrIHRoaXJkX3BhcnR5L1dlYktpdC9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEluc3Bl
Y3RvckNvbnRyb2xsZXJDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1Niw3IEBA
IENBTExCQUNLX0ZVTkNfREVDTChJbnNwZWN0b3JDb250cm9sbGVySGkKICAgICBpZiAoYXJncy5M
ZW5ndGgoKSA8IDEpCiAgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CiAKLSAgICBOb2Rl
KiBub2RlID0gVjhET01XcmFwcGVyOjpjb252ZXJ0RE9NV3JhcHBlclRvTm9kZTxOb2RlPihhcmdz
WzBdKTsKKyAgICBOb2RlKiBub2RlID0gVjhET01XcmFwcGVyOjpjb252ZXJ0RE9NV3JhcHBlclRv
Tm9kZTxOb2RlPih2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KGFyZ3NbMF0pKTsKICAgICBp
ZiAoIW5vZGUpCiAgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CiAKQEAgLTEwMCw3ICsx
MDAsNyBAQCBDQUxMQkFDS19GVU5DX0RFQ0woSW5zcGVjdG9yQ29udHJvbGxlclNlCiAgICAgaWYg
KGFyZ3MuTGVuZ3RoKCkgPCAyKQogICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwogCi0g
ICAgTm9kZSogbm9kZSA9IFY4RE9NV3JhcHBlcjo6Y29udmVydERPTVdyYXBwZXJUb05vZGU8Tm9k
ZT4oYXJnc1swXSk7CisgICAgTm9kZSogbm9kZSA9IFY4RE9NV3JhcHBlcjo6Y29udmVydERPTVdy
YXBwZXJUb05vZGU8Tm9kZT4odjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChhcmdzWzBdKSk7
CiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwogCkluZGV4
OiB0aGlyZF9wYXJ0eS9XZWJLaXQvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhOb2RlQ3Vz
dG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSB0aGlyZF9wYXJ0eS9XZWJLaXQvV2ViQ29yZS9iaW5kaW5n
cy92OC9jdXN0b20vVjhOb2RlQ3VzdG9tLmNwcAkocmV2aXNpb24gNDU5ODUpCisrKyB0aGlyZF9w
YXJ0eS9XZWJLaXQvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhOb2RlQ3VzdG9tLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtODgsMTEgKzg4LDExIEBAIENBTExCQUNLX0ZVTkNfREVDTChOb2Rl
UmVtb3ZlRXZlbnRMaXN0ZW4KIENBTExCQUNLX0ZVTkNfREVDTChOb2RlSW5zZXJ0QmVmb3JlKQog
ewogICAgIElOQ19TVEFUUygiRE9NLk5vZGUuaW5zZXJ0QmVmb3JlIik7Ci0gICAgdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IGhvbGRlciA9IGFyZ3MuSG9sZGVyKCk7CisgICAgdjg6OkhhbmRsZTx2ODo6
T2JqZWN0PiBob2xkZXIgPSBhcmdzLkhvbGRlcigpOwogICAgIE5vZGUqIGltcCA9IFY4RE9NV3Jh
cHBlcjo6Y29udmVydERPTVdyYXBwZXJUb05vZGU8Tm9kZT4oaG9sZGVyKTsKICAgICBFeGNlcHRp
b25Db2RlIGVjID0gMDsKLSAgICBOb2RlKiBuZXdDaGlsZCA9IFY4Tm9kZTo6SGFzSW5zdGFuY2Uo
YXJnc1swXSkgPyBWOERPTVdyYXBwZXI6OmNvbnZlcnRET01XcmFwcGVyVG9Ob2RlPE5vZGU+KGFy
Z3NbMF0pIDogMDsKLSAgICBOb2RlKiByZWZDaGlsZCA9IFY4Tm9kZTo6SGFzSW5zdGFuY2UoYXJn
c1sxXSkgPyBWOERPTVdyYXBwZXI6OmNvbnZlcnRET01XcmFwcGVyVG9Ob2RlPE5vZGU+KGFyZ3Nb
MV0pIDogMDsKKyAgICBOb2RlKiBuZXdDaGlsZCA9IFY4Tm9kZTo6SGFzSW5zdGFuY2UoYXJnc1sw
XSkgPyBWOERPTVdyYXBwZXI6OmNvbnZlcnRET01XcmFwcGVyVG9Ob2RlPE5vZGU+KHY4OjpIYW5k
bGU8djg6Ok9iamVjdD46OkNhc3QoYXJnc1swXSkpIDogMDsKKyAgICBOb2RlKiByZWZDaGlsZCA9
IFY4Tm9kZTo6SGFzSW5zdGFuY2UoYXJnc1sxXSkgPyBWOERPTVdyYXBwZXI6OmNvbnZlcnRET01X
cmFwcGVyVG9Ob2RlPE5vZGU+KHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QoYXJnc1sxXSkp
IDogMDsKICAgICBib29sIHN1Y2Nlc3MgPSBpbXAtPmluc2VydEJlZm9yZShuZXdDaGlsZCwgcmVm
Q2hpbGQsIGVjLCB0cnVlKTsKICAgICBpZiAoZWMpIHsKICAgICAgICAgVjhQcm94eTo6c2V0RE9N
RXhjZXB0aW9uKGVjKTsKQEAgLTEwNywxMSArMTA3LDExIEBAIENBTExCQUNLX0ZVTkNfREVDTChO
b2RlSW5zZXJ0QmVmb3JlKQogQ0FMTEJBQ0tfRlVOQ19ERUNMKE5vZGVSZXBsYWNlQ2hpbGQpCiB7
CiAgICAgSU5DX1NUQVRTKCJET00uTm9kZS5yZXBsYWNlQ2hpbGQiKTsKLSAgICB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gaG9sZGVyID0gYXJncy5Ib2xkZXIoKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpP
YmplY3Q+IGhvbGRlciA9IGFyZ3MuSG9sZGVyKCk7CiAgICAgTm9kZSogaW1wID0gVjhET01XcmFw
cGVyOjpjb252ZXJ0RE9NV3JhcHBlclRvTm9kZTxOb2RlPihob2xkZXIpOwogICAgIEV4Y2VwdGlv
bkNvZGUgZWMgPSAwOwotICAgIE5vZGUqIG5ld0NoaWxkID0gVjhOb2RlOjpIYXNJbnN0YW5jZShh
cmdzWzBdKSA/IFY4RE9NV3JhcHBlcjo6Y29udmVydERPTVdyYXBwZXJUb05vZGU8Tm9kZT4oYXJn
c1swXSkgOiAwOwotICAgIE5vZGUqIG9sZENoaWxkID0gVjhOb2RlOjpIYXNJbnN0YW5jZShhcmdz
WzFdKSA/IFY4RE9NV3JhcHBlcjo6Y29udmVydERPTVdyYXBwZXJUb05vZGU8Tm9kZT4oYXJnc1sx
XSkgOiAwOworICAgIE5vZGUqIG5ld0NoaWxkID0gVjhOb2RlOjpIYXNJbnN0YW5jZShhcmdzWzBd
KSA/IFY4RE9NV3JhcHBlcjo6Y29udmVydERPTVdyYXBwZXJUb05vZGU8Tm9kZT4odjg6OkhhbmRs
ZTx2ODo6T2JqZWN0Pjo6Q2FzdChhcmdzWzBdKSkgOiAwOworICAgIE5vZGUqIG9sZENoaWxkID0g
VjhOb2RlOjpIYXNJbnN0YW5jZShhcmdzWzFdKSA/IFY4RE9NV3JhcHBlcjo6Y29udmVydERPTVdy
YXBwZXJUb05vZGU8Tm9kZT4odjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChhcmdzWzFdKSkg
OiAwOwogICAgIGJvb2wgc3VjY2VzcyA9IGltcC0+cmVwbGFjZUNoaWxkKG5ld0NoaWxkLCBvbGRD
aGlsZCwgZWMsIHRydWUpOwogICAgIGlmIChlYykgewogICAgICAgICBWOFByb3h5OjpzZXRET01F
eGNlcHRpb24oZWMpOwpAQCAtMTI1LDEwICsxMjUsMTAgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKE5v
ZGVSZXBsYWNlQ2hpbGQpCiBDQUxMQkFDS19GVU5DX0RFQ0woTm9kZVJlbW92ZUNoaWxkKQogewog
ICAgIElOQ19TVEFUUygiRE9NLk5vZGUucmVtb3ZlQ2hpbGQiKTsKLSAgICB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gaG9sZGVyID0gYXJncy5Ib2xkZXIoKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpPYmpl
Y3Q+IGhvbGRlciA9IGFyZ3MuSG9sZGVyKCk7CiAgICAgTm9kZSogaW1wID0gVjhET01XcmFwcGVy
Ojpjb252ZXJ0RE9NV3JhcHBlclRvTm9kZTxOb2RlPihob2xkZXIpOwogICAgIEV4Y2VwdGlvbkNv
ZGUgZWMgPSAwOwotICAgIE5vZGUqIG9sZENoaWxkID0gVjhOb2RlOjpIYXNJbnN0YW5jZShhcmdz
WzBdKSA/IFY4RE9NV3JhcHBlcjo6Y29udmVydERPTVdyYXBwZXJUb05vZGU8Tm9kZT4oYXJnc1sw
XSkgOiAwOworICAgIE5vZGUqIG9sZENoaWxkID0gVjhOb2RlOjpIYXNJbnN0YW5jZShhcmdzWzBd
KSA/IFY4RE9NV3JhcHBlcjo6Y29udmVydERPTVdyYXBwZXJUb05vZGU8Tm9kZT4odjg6OkhhbmRs
ZTx2ODo6T2JqZWN0Pjo6Q2FzdChhcmdzWzBdKSkgOiAwOwogICAgIGJvb2wgc3VjY2VzcyA9IGlt
cC0+cmVtb3ZlQ2hpbGQob2xkQ2hpbGQsIGVjKTsKICAgICBpZiAoZWMpIHsKICAgICAgICAgVjhQ
cm94eTo6c2V0RE9NRXhjZXB0aW9uKGVjKTsKQEAgLTE0MywxMCArMTQzLDEwIEBAIENBTExCQUNL
X0ZVTkNfREVDTChOb2RlUmVtb3ZlQ2hpbGQpCiBDQUxMQkFDS19GVU5DX0RFQ0woTm9kZUFwcGVu
ZENoaWxkKQogewogICAgIElOQ19TVEFUUygiRE9NLk5vZGUuYXBwZW5kQ2hpbGQiKTsKLSAgICB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gaG9sZGVyID0gYXJncy5Ib2xkZXIoKTsKKyAgICB2ODo6SGFu
ZGxlPHY4OjpPYmplY3Q+IGhvbGRlciA9IGFyZ3MuSG9sZGVyKCk7CiAgICAgTm9kZSogaW1wID0g
VjhET01XcmFwcGVyOjpjb252ZXJ0RE9NV3JhcHBlclRvTm9kZTxOb2RlPihob2xkZXIpOwogICAg
IEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIE5vZGUqIG5ld0NoaWxkID0gVjhOb2RlOjpIYXNJ
bnN0YW5jZShhcmdzWzBdKSA/IFY4RE9NV3JhcHBlcjo6Y29udmVydERPTVdyYXBwZXJUb05vZGU8
Tm9kZT4oYXJnc1swXSkgOiAwOworICAgIE5vZGUqIG5ld0NoaWxkID0gVjhOb2RlOjpIYXNJbnN0
YW5jZShhcmdzWzBdKSA/IFY4RE9NV3JhcHBlcjo6Y29udmVydERPTVdyYXBwZXJUb05vZGU8Tm9k
ZT4odjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChhcmdzWzBdKSkgOiAwOwogICAgIGJvb2wg
c3VjY2VzcyA9IGltcC0+YXBwZW5kQ2hpbGQobmV3Q2hpbGQsIGVjLCB0cnVlICk7CiAgICAgaWYg
KGVjKSB7CiAgICAgICAgIFY4UHJveHk6OnNldERPTUV4Y2VwdGlvbihlYyk7CkluZGV4OiB0aGly
ZF9wYXJ0eS9XZWJLaXQvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhYU0xUUHJvY2Vzc29y
Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSB0aGlyZF9wYXJ0eS9XZWJLaXQvV2ViQ29yZS9iaW5k
aW5ncy92OC9jdXN0b20vVjhYU0xUUHJvY2Vzc29yQ3VzdG9tLmNwcAkocmV2aXNpb24gNDU5ODUp
CisrKyB0aGlyZF9wYXJ0eS9XZWJLaXQvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhYU0xU
UHJvY2Vzc29yQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAsNyArNjAsNyBAQCBDQUxM
QkFDS19GVU5DX0RFQ0woWFNMVFByb2Nlc3NvckltcG9ydFN0CiAKICAgICBYU0xUUHJvY2Vzc29y
KiBpbXAgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxYU0xUUHJvY2Vzc29y
PihWOENsYXNzSW5kZXg6OlhTTFRQUk9DRVNTT1IsIGFyZ3MuSG9sZGVyKCkpOwogCi0gICAgTm9k
ZSogbm9kZSA9IFY4RE9NV3JhcHBlcjo6Y29udmVydERPTVdyYXBwZXJUb05vZGU8Tm9kZT4oYXJn
c1swXSk7CisgICAgTm9kZSogbm9kZSA9IFY4RE9NV3JhcHBlcjo6Y29udmVydERPTVdyYXBwZXJU
b05vZGU8Tm9kZT4odjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChhcmdzWzBdKSk7CiAgICAg
aW1wLT5pbXBvcnRTdHlsZXNoZWV0KG5vZGUpOwogICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7
CiB9CkBAIC03NCw4ICs3NCw4IEBAIENBTExCQUNLX0ZVTkNfREVDTChYU0xUUHJvY2Vzc29yVHJh
bnNmb3IKIAogICAgIFhTTFRQcm9jZXNzb3IqIGltcCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRv
TmF0aXZlT2JqZWN0PFhTTFRQcm9jZXNzb3I+KFY4Q2xhc3NJbmRleDo6WFNMVFBST0NFU1NPUiwg
YXJncy5Ib2xkZXIoKSk7CiAKLSAgICBOb2RlKiBzb3VyY2UgPSBWOERPTVdyYXBwZXI6OmNvbnZl
cnRET01XcmFwcGVyVG9Ob2RlPE5vZGU+KGFyZ3NbMF0pOwotICAgIERvY3VtZW50KiBvd25lciA9
IFY4RE9NV3JhcHBlcjo6Y29udmVydERPTVdyYXBwZXJUb05vZGU8RG9jdW1lbnQ+KGFyZ3NbMV0p
OworICAgIE5vZGUqIHNvdXJjZSA9IFY4RE9NV3JhcHBlcjo6Y29udmVydERPTVdyYXBwZXJUb05v
ZGU8Tm9kZT4odjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChhcmdzWzBdKSk7CisgICAgRG9j
dW1lbnQqIG93bmVyID0gVjhET01XcmFwcGVyOjpjb252ZXJ0RE9NV3JhcHBlclRvTm9kZTxEb2N1
bWVudD4odjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChhcmdzWzFdKSk7CiAgICAgUmVmUHRy
PERvY3VtZW50RnJhZ21lbnQ+IHJlc3VsdCA9IGltcC0+dHJhbnNmb3JtVG9GcmFnbWVudChzb3Vy
Y2UsIG93bmVyKTsKICAgICByZXR1cm4gVjhET01XcmFwcGVyOjpjb252ZXJ0Tm9kZVRvVjhPYmpl
Y3QocmVzdWx0LmdldCgpKTsKIH0KQEAgLTkwLDcgKzkwLDcgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNM
KFhTTFRQcm9jZXNzb3JUcmFuc2ZvcgogCiAgICAgWFNMVFByb2Nlc3NvciogaW1wID0gVjhET01X
cmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8WFNMVFByb2Nlc3Nvcj4oVjhDbGFzc0luZGV4
OjpYU0xUUFJPQ0VTU09SLCBhcmdzLkhvbGRlcigpKTsKIAotICAgIE5vZGUqIHNvdXJjZSA9IFY4
RE9NV3JhcHBlcjo6Y29udmVydERPTVdyYXBwZXJUb05vZGU8Tm9kZT4oYXJnc1swXSk7CisgICAg
Tm9kZSogc291cmNlID0gVjhET01XcmFwcGVyOjpjb252ZXJ0RE9NV3JhcHBlclRvTm9kZTxOb2Rl
Pih2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KGFyZ3NbMF0pKTsKICAgICBpZiAoIXNvdXJj
ZSkKICAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKIAo=
</data>
<flag name="review"
          id="17286"
          type_id="1"
          status="+"
          setter="abarth"
    />
          </attachment>
      

    </bug>

</bugzilla>