<?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>49971</bug_id>
          
          <creation_ts>2010-11-23 06:55:55 -0800</creation_ts>
          <short_desc>Web Inspector: pass style id to front-end as Object, not string.</short_desc>
          <delta_ts>2010-11-24 02:43:24 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector (Deprecated)</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="Pavel Feldman">pfeldman</reporter>
          <assigned_to name="Pavel Feldman">pfeldman</assigned_to>
          <cc>abarth</cc>
    
    <cc>apavlov</cc>
    
    <cc>buildbot</cc>
    
    <cc>bweinstein</cc>
    
    <cc>eric</cc>
    
    <cc>joepeck</cc>
    
    <cc>keishi</cc>
    
    <cc>loislo</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>rik</cc>
    
    <cc>timothy</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>312816</commentid>
    <comment_count>0</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-11-23 06:55:55 -0800</bug_when>
    <thetext>Patch to follow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>312818</commentid>
    <comment_count>1</comment_count>
      <attachid>74658</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-11-23 07:00:53 -0800</bug_when>
    <thetext>Created attachment 74658
[PATCH] Proposed change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>312826</commentid>
    <comment_count>2</comment_count>
      <attachid>74658</attachid>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2010-11-23 07:17:25 -0800</bug_when>
    <thetext>Comment on attachment 74658
[PATCH] Proposed change.

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

&gt; WebCore/inspector/InspectorStyleSheet.h:75
&gt; +    unsigned int ordinal() const { return m_ordinal; }

unsigned int -&gt; unsigned as per the common webkit style

&gt; WebCore/inspector/InspectorStyleSheet.h:85
&gt; +        return result;

return result.release(); is better

&gt; WebCore/inspector/InspectorStyleSheet.h:90
&gt; +    unsigned int m_ordinal;

unsigned int -&gt; unsigned</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>312827</commentid>
    <comment_count>3</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2010-11-23 07:17:39 -0800</bug_when>
    <thetext>Attachment 74658 did not build on win:
Build output: http://queues.webkit.org/results/6300020</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>312861</commentid>
    <comment_count>4</comment_count>
      <attachid>74671</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-11-23 08:27:38 -0800</bug_when>
    <thetext>Created attachment 74671
[PATCH] Review comments addressed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>312863</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-11-23 08:30:13 -0800</bug_when>
    <thetext>Attachment 74671 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;LayoutTests/ChangeLog&apos;, u&apos;LayoutTests/inspector/styles-new-API.html&apos;, u&apos;WebCore/ChangeLog&apos;, u&apos;WebCore/inspector/Inspector.idl&apos;, u&apos;WebCore/inspector/InspectorCSSAgent.cpp&apos;, u&apos;WebCore/inspector/InspectorCSSAgent.h&apos;, u&apos;WebCore/inspector/InspectorStyleSheet.cpp&apos;, u&apos;WebCore/inspector/InspectorStyleSheet.h&apos;, u&apos;WebCore/inspector/front-end/CSSStyleModel.js&apos;]&quot; exit_code: 1
WebCore/inspector/InspectorStyleSheet.h:241:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Total errors found: 1 in 9 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>312866</commentid>
    <comment_count>6</comment_count>
      <attachid>74671</attachid>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2010-11-23 08:38:50 -0800</bug_when>
    <thetext>Comment on attachment 74671
[PATCH] Review comments addressed.

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

I suggest that the bug be renamed to include the styleSheetChanged aspect of the patch

&gt; WebCore/inspector/InspectorCSSAgent.cpp:284
&gt; +    *url = inspectorStyleSheet-&gt;finalURL();

I&apos;m wary of hitting the multiple inline stylesheets case....

&gt; WebCore/inspector/InspectorStyleSheet.h:241
&gt; +    virtual CSSStyleDeclaration* styleForId(const InspectorCSSId&amp; id) const { ASSERT_UNUSED(id, id.ordinal() == 0); return inlineStyle(); }

id.ordinal() == 0 -&gt; !id.ordinal()

&gt; WebCore/inspector/front-end/CSSStyleModel.js:122
&gt; +            WebInspector.cssModel._styleSheetChanged(rule.id.styleSheetId);

Why not bind the two callbacks to &quot;this&quot; and invoke this._styleSheetChanged() ? We know this is the best practice.

&gt; WebCore/inspector/front-end/CSSStyleModel.js:143
&gt; +            WebInspector.cssModel._styleSheetChanged(rule.id.styleSheetId);

ditto

&gt; WebCore/inspector/front-end/CSSStyleModel.js:326
&gt; +                WebInspector.cssModel._styleSheetChanged(this.id.styleSheetId);

ditto

&gt; WebCore/inspector/front-end/CSSStyleModel.js:450
&gt; +                WebInspector.cssModel._styleSheetChanged(style.id.styleSheetId);

ditto (this callback already seems to be bound to &quot;this&quot;, so nothing extra is necessary)

&gt; WebCore/inspector/front-end/CSSStyleModel.js:483
&gt; +                WebInspector.cssModel._styleSheetChanged(this.ownerStyle.id.styleSheetId);

ditto, callback already bound

&gt; WebCore/inspector/front-end/CSSStyleModel.js:535
&gt; +                WebInspector.cssModel._styleSheetChanged(this.id);

ditto, callback already bound</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>312908</commentid>
    <comment_count>7</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2010-11-23 10:09:46 -0800</bug_when>
    <thetext>Attachment 74671 did not build on win:
Build output: http://queues.webkit.org/results/6356012</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>313177</commentid>
    <comment_count>8</comment_count>
      <attachid>74734</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-11-24 01:49:30 -0800</bug_when>
    <thetext>Created attachment 74734
[PATCH] Review comments addressed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>313178</commentid>
    <comment_count>9</comment_count>
      <attachid>74734</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-11-24 02:04:07 -0800</bug_when>
    <thetext>Comment on attachment 74734
[PATCH] Review comments addressed.

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

&gt; WebCore/inspector/InspectorCSSAgent.cpp:285
&gt; +    inspectorStyleSheet-&gt;text(result);

this call may fail, should we report such failures to the caller?

&gt; WebCore/inspector/InspectorStyleSheet.h:58
&gt; +        if (!value-&gt;getString(&quot;styleSheetId&quot;, &amp;m_styleSheetId))

&quot;styleSheetId&quot; is used in at least to places in the code. Please use constants for property names like this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>313181</commentid>
    <comment_count>10</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-11-24 02:11:58 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; (From update of attachment 74734 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=74734&amp;action=review
&gt; 
&gt; &gt; WebCore/inspector/InspectorCSSAgent.cpp:285
&gt; &gt; +    inspectorStyleSheet-&gt;text(result);
&gt; 
&gt; this call may fail, should we report such failures to the caller?
&gt; 

We default to empty results on errors in entire CSSAgent. Needs to be fixed everywhere.

&gt; &gt; WebCore/inspector/InspectorStyleSheet.h:58
&gt; &gt; +        if (!value-&gt;getString(&quot;styleSheetId&quot;, &amp;m_styleSheetId))
&gt; 
&gt; &quot;styleSheetId&quot; is used in at least to places in the code. Please use constants for property names like this.

Needs to be fixed everywhere.


Committing to http://svn.webkit.org/repository/webkit/trunk ...
	M	LayoutTests/ChangeLog
	M	LayoutTests/inspector/styles-new-API.html
	M	WebCore/ChangeLog
	M	WebCore/inspector/Inspector.idl
	M	WebCore/inspector/InspectorCSSAgent.cpp
	M	WebCore/inspector/InspectorCSSAgent.h
	M	WebCore/inspector/InspectorStyleSheet.cpp
	M	WebCore/inspector/InspectorStyleSheet.h
	M	WebCore/inspector/front-end/CSSStyleModel.js
Committed r72652</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>313192</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-11-24 02:43:24 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/72652 might have broken GTK Linux 32-bit Release
The following tests are not passing:
inspector/audits-panel-functional.html</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>74658</attachid>
            <date>2010-11-23 07:00:53 -0800</date>
            <delta_ts>2010-11-23 08:27:38 -0800</delta_ts>
            <desc>[PATCH] Proposed change.</desc>
            <filename>style_id</filename>
            <type>text/plain</type>
            <size>13915</size>
            <attacher name="Pavel Feldman">pfeldman</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAzMWZlMTFiLi5mYmRmMjg5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTAtMTEt
MjMgIFBhdmVsIEZlbGRtYW4gIDxwZmVsZG1hbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogcGFzcyBz
dHlsZSBpZCB0byBmcm9udC1lbmQgYXMgT2JqZWN0LCBub3Qgc3RyaW5nLgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDk5NzEKKworICAgICAgICAqIGlu
c3BlY3Rvci9zdHlsZXMtbmV3LUFQSS5odG1sOgorCiAyMDEwLTExLTIzICBBbGVqYW5kcm8gRy4g
Q2FzdHJvICA8YWxleEBpZ2FsaWEuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQuIFJlYmFzZWxp
bmVkCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3Ivc3R5bGVzLW5ldy1BUEkuaHRt
bCBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9zdHlsZXMtbmV3LUFQSS5odG1sCmluZGV4IDhkNjQz
MmQuLmJmNWQwYjMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9zdHlsZXMtbmV3
LUFQSS5odG1sCisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9zdHlsZXMtbmV3LUFQSS5odG1s
CkBAIC0xLDcgKzEsNyBAQAogPGh0bWw+CiA8aGVhZD4KIAotPGxpbmsgcmVsPSJzdHlsZXNoZWV0
IiBocmVmPSJyZXNvdXJjZXMvc3R5bGVzLW5ldy1BUEkuY3NzIiAtLT4KKzxsaW5rIHJlbD0ic3R5
bGVzaGVldCIgaHJlZj0icmVzb3VyY2VzL3N0eWxlcy1uZXctQVBJLmNzcyI+CiAKIDxzY3JpcHQg
c3JjPSIuLi9odHRwL3Rlc3RzL2luc3BlY3Rvci9pbnNwZWN0b3ItdGVzdC5qcyI+PC9zY3JpcHQ+
CiA8c2NyaXB0IHNyYz0iZWxlbWVudHMtdGVzdHMuanMiPjwvc2NyaXB0PgpAQCAtMTEyLDI1ICsx
MTIsMTkgQEAgZnVuY3Rpb24gZnJvbnRlbmRfY2hhbmdlU2VsZWN0b3IodGVzdENvbnRyb2xsZXIs
IHN0eWxlU2hlZXQpCiAgICAgewogICAgICAgICB0ZXN0Q29udHJvbGxlci5yZXN1bHRzLnB1c2go
IiIpOwogICAgICAgICB0ZXN0Q29udHJvbGxlci5yZXN1bHRzLnB1c2goIj09PSBBZnRlciBzZWxl
Y3RvciBzZXQgPT09Iik7Ci0gICAgICAgIGZyb250ZW5kX2xvYWRBbmREdW1wU3R5bGVTaGVldCh0
ZXN0Q29udHJvbGxlciwgZnJvbnRlbmRfcGFyZW50U3R5bGVTaGVldElkKHJ1bGUucnVsZUlkKSwg
ZnJvbnRlbmRfc2V0U3R5bGVUZXh0LmJpbmQobnVsbCwgdGVzdENvbnRyb2xsZXIpKTsKKyAgICAg
ICAgZnJvbnRlbmRfbG9hZEFuZER1bXBTdHlsZVNoZWV0KHRlc3RDb250cm9sbGVyLCBydWxlLnJ1
bGVJZC5zdHlsZVNoZWV0SWQsIGZyb250ZW5kX3NldFN0eWxlVGV4dC5iaW5kKG51bGwsIHRlc3RD
b250cm9sbGVyKSk7CiAgICAgfQogCiAgICAgSW5zcGVjdG9yQmFja2VuZC5zZXRSdWxlU2VsZWN0
b3IyKHN0eWxlU2hlZXQucnVsZXNbMF0ucnVsZUlkLCAiaHRtbCAqLCBib2R5W2Zvbz1cImJhclwi
XSIsIGRpZFNldFNlbGVjdG9yLmJpbmQobnVsbCwgdGVzdENvbnRyb2xsZXIpKTsKIH0KIAotZnVu
Y3Rpb24gZnJvbnRlbmRfcGFyZW50U3R5bGVTaGVldElkKHJ1bGVPclN0eWxlSWQpCi17Ci0gICAg
cmV0dXJuIHJ1bGVPclN0eWxlSWQuc3Vic3RyaW5nKDAsIHJ1bGVPclN0eWxlSWQuaW5kZXhPZign
OicpKTsKLX0KLQotCiBmdW5jdGlvbiBmcm9udGVuZF9zZXRTdHlsZVRleHQodGVzdENvbnRyb2xs
ZXIsIHN0eWxlU2hlZXQpCiB7CiAgICAgZnVuY3Rpb24gZGlkU2V0U3R5bGVUZXh0KHRlc3RDb250
cm9sbGVyLCBzdHlsZSkKICAgICB7CiAgICAgICAgIHRlc3RDb250cm9sbGVyLnJlc3VsdHMucHVz
aCgiIik7CiAgICAgICAgIHRlc3RDb250cm9sbGVyLnJlc3VsdHMucHVzaCgiPT09IEFmdGVyIHN0
eWxlIHRleHQgc2V0ID09PSIpOwotICAgICAgICBmcm9udGVuZF9sb2FkQW5kRHVtcFN0eWxlU2hl
ZXQodGVzdENvbnRyb2xsZXIsIGZyb250ZW5kX3BhcmVudFN0eWxlU2hlZXRJZChzdHlsZS5zdHls
ZUlkKSwgZnJvbnRlbmRfYWRkUnVsZS5iaW5kKG51bGwsIHRlc3RDb250cm9sbGVyKSk7CisgICAg
ICAgIGZyb250ZW5kX2xvYWRBbmREdW1wU3R5bGVTaGVldCh0ZXN0Q29udHJvbGxlciwgc3R5bGUu
c3R5bGVJZC5zdHlsZVNoZWV0SWQsIGZyb250ZW5kX2FkZFJ1bGUuYmluZChudWxsLCB0ZXN0Q29u
dHJvbGxlcikpOwogICAgIH0KIAogICAgIEluc3BlY3RvckJhY2tlbmQuc2V0UHJvcGVydHlUZXh0
MihzdHlsZVNoZWV0LnJ1bGVzWzBdLnN0eWxlLnN0eWxlSWQsIDAsICIiLCB0cnVlKTsKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTFmNzJh
OC4uMjQ5ZWIzYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwzMCBAQAorMjAxMC0xMS0yMyAgUGF2ZWwgRmVsZG1hbiAgPHBm
ZWxkbWFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBwYXNzIHN0eWxlIGlkIHRvIGZyb250LWVuZCBh
cyBPYmplY3QsIG5vdCBzdHJpbmcuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD00OTk3MQorCisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rvci5pZGw6
CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvckNTU0FnZW50OjpnZXRTdHlsZXNGb3JOb2RlMik6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6c2V0UHJvcGVydHlUZXh0Mik6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6dG9nZ2xlUHJvcGVydHkyKToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvckNTU0FnZW50OjpzZXRSdWxlU2VsZWN0b3IyKToKKyAgICAgICAgKiBp
bnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVj
dG9yU3R5bGVTaGVldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHlsZTo6YnVp
bGRPYmplY3RGb3JTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHlsZVNoZWV0
OjpydWxlRm9ySWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5bGVTaGVldDo6YnVp
bGRPYmplY3RGb3JSdWxlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0eWxlU2hlZXQ6
OnJ1bGVPclN0eWxlSWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5bGVTaGVldEZv
cklubGluZVN0eWxlOjpJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGUpOgorICAgICAg
ICAqIGluc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0Lmg6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JDU1NJZDo6SW5zcGVjdG9yQ1NTSWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yQ1NTSWQ6OmlzRW1wdHkpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTSWQ6OnN0
eWxlU2hlZXRJZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NJZDo6b3JkaW5hbCk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NJZDo6YXNJbnNwZWN0b3JWYWx1ZSk6CisK
IDIwMTAtMTEtMjMgIEplcmVteSBPcmxvdyAgPGpvcmxvd0BjaHJvbWl1bS5vcmc+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgU3RldmUgQmxvY2suCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3IuaWRsIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmlkbAppbmRleCAy
OWEzYmEwLi41NGI1ZDU4IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3Iu
aWRsCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvci5pZGwKQEAgLTIxNCw5ICsyMTQs
OSBAQCBtb2R1bGUgY29yZSB7CiAgICAgICAgIFtoYW5kbGVyPUNTU10gdm9pZCBnZXRBbGxTdHls
ZXMyKG91dCBBcnJheSBzdHlsZVNoZWV0SWRzKTsKICAgICAgICAgW2hhbmRsZXI9Q1NTXSB2b2lk
IGdldFN0eWxlU2hlZXQyKGluIFN0cmluZyBzdHlsZVNoZWV0SWQsIG91dCBWYWx1ZSBzdHlsZVNo
ZWV0KTsKICAgICAgICAgW2hhbmRsZXI9Q1NTXSB2b2lkIHNldFN0eWxlU2hlZXRUZXh0MihpbiBT
dHJpbmcgc3R5bGVTaGVldElkLCBpbiBTdHJpbmcgdGV4dCk7Ci0gICAgICAgIFtoYW5kbGVyPUNT
U10gdm9pZCBzZXRQcm9wZXJ0eVRleHQyKGluIFN0cmluZyBzdHlsZUlkLCBpbiBsb25nIHByb3Bl
cnR5SW5kZXgsIGluIFN0cmluZyB0ZXh0LCBpbiBib29sZWFuIG92ZXJ3cml0ZSwgb3V0IFZhbHVl
IHN0eWxlKTsKLSAgICAgICAgW2hhbmRsZXI9Q1NTXSB2b2lkIHRvZ2dsZVByb3BlcnR5MihpbiBT
dHJpbmcgc3R5bGVJZCwgaW4gbG9uZyBwcm9wZXJ0eUluZGV4LCBpbiBib29sZWFuIGRpc2FibGUs
IG91dCBWYWx1ZSBzdHlsZSk7Ci0gICAgICAgIFtoYW5kbGVyPUNTU10gdm9pZCBzZXRSdWxlU2Vs
ZWN0b3IyKGluIFN0cmluZyBydWxlSWQsIGluIFN0cmluZyBzZWxlY3Rvciwgb3V0IFZhbHVlIHJ1
bGUpOworICAgICAgICBbaGFuZGxlcj1DU1NdIHZvaWQgc2V0UHJvcGVydHlUZXh0MihpbiBPYmpl
Y3Qgc3R5bGVJZCwgaW4gbG9uZyBwcm9wZXJ0eUluZGV4LCBpbiBTdHJpbmcgdGV4dCwgaW4gYm9v
bGVhbiBvdmVyd3JpdGUsIG91dCBWYWx1ZSBzdHlsZSk7CisgICAgICAgIFtoYW5kbGVyPUNTU10g
dm9pZCB0b2dnbGVQcm9wZXJ0eTIoaW4gT2JqZWN0IHN0eWxlSWQsIGluIGxvbmcgcHJvcGVydHlJ
bmRleCwgaW4gYm9vbGVhbiBkaXNhYmxlLCBvdXQgVmFsdWUgc3R5bGUpOworICAgICAgICBbaGFu
ZGxlcj1DU1NdIHZvaWQgc2V0UnVsZVNlbGVjdG9yMihpbiBPYmplY3QgcnVsZUlkLCBpbiBTdHJp
bmcgc2VsZWN0b3IsIG91dCBWYWx1ZSBydWxlKTsKICAgICAgICAgW2hhbmRsZXI9Q1NTXSB2b2lk
IGFkZFJ1bGUyKGluIGxvbmcgY29udGV4dE5vZGVJZCwgaW4gU3RyaW5nIHNlbGVjdG9yLCBvdXQg
VmFsdWUgcnVsZSk7CiAgICAgICAgIFtoYW5kbGVyPUNTU10gdm9pZCBnZXRTdXBwb3J0ZWRDU1NQ
cm9wZXJ0aWVzKG91dCBBcnJheSBjc3NQcm9wZXJ0aWVzKTsKICAgICAgICAgW2hhbmRsZXI9Q1NT
XSB2b2lkIHF1ZXJ5U2VsZWN0b3JBbGwoaW4gbG9uZyBkb2N1bWVudElkLCBpbiBTdHJpbmcgc2Vs
ZWN0b3IsIG91dCBBcnJheSByZXN1bHQpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yQ1NTQWdlbnQuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdl
bnQuY3BwCmluZGV4IGFiYzk4M2UuLmUzMDRjNjMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckNTU0FnZW50LmNwcAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JDU1NBZ2VudC5jcHAKQEAgLTIxNCw3ICsyMTQsNyBAQCB2b2lkIEluc3BlY3RvckNTU0FnZW50
OjpnZXRTdHlsZXNGb3JOb2RlMihsb25nIG5vZGVJZCwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiog
cgogICAgICAgICBpZiAocGFyZW50RWxlbWVudC0+c3R5bGUoKSAmJiBwYXJlbnRFbGVtZW50LT5z
dHlsZSgpLT5sZW5ndGgoKSkgewogICAgICAgICAgICAgSW5zcGVjdG9yU3R5bGVTaGVldEZvcklu
bGluZVN0eWxlKiBzdHlsZVNoZWV0ID0gYXNJbnNwZWN0b3JTdHlsZVNoZWV0KHBhcmVudEVsZW1l
bnQpOwogICAgICAgICAgICAgaWYgKHN0eWxlU2hlZXQpCi0gICAgICAgICAgICAgICAgcGFyZW50
U3R5bGUtPnNldE9iamVjdCgiaW5saW5lU3R5bGUiLCBzdHlsZVNoZWV0LT5idWlsZE9iamVjdEZv
clN0eWxlKHN0eWxlU2hlZXQtPnN0eWxlRm9ySWQoSW5zcGVjdG9yQ1NTSWQ6OmNyZWF0ZUZyb21Q
YXJ0cyhzdHlsZVNoZWV0LT5pZCgpLCAiMCIpKSkpOworICAgICAgICAgICAgICAgIHBhcmVudFN0
eWxlLT5zZXRPYmplY3QoImlubGluZVN0eWxlIiwgc3R5bGVTaGVldC0+YnVpbGRPYmplY3RGb3JT
dHlsZShzdHlsZVNoZWV0LT5zdHlsZUZvcklkKEluc3BlY3RvckNTU0lkKHN0eWxlU2hlZXQtPmlk
KCksIDApKSkpOwogICAgICAgICB9CiAKICAgICAgICAgQ1NTU3R5bGVTZWxlY3RvciogcGFyZW50
U2VsZWN0b3IgPSBwYXJlbnRFbGVtZW50LT5vd25lckRvY3VtZW50KCktPnN0eWxlU2VsZWN0b3Io
KTsKQEAgLTI4Nyw3ICsyODcsNyBAQCB2b2lkIEluc3BlY3RvckNTU0FnZW50OjpzZXRTdHlsZVNo
ZWV0VGV4dDIoY29uc3QgU3RyaW5nJiBzdHlsZVNoZWV0SWQsIGNvbnN0IFN0cgogICAgICAgICBp
bnNwZWN0b3JTdHlsZVNoZWV0LT5yZXBhcnNlU3R5bGVTaGVldCh0ZXh0KTsKIH0KIAotdm9pZCBJ
bnNwZWN0b3JDU1NBZ2VudDo6c2V0UHJvcGVydHlUZXh0Mihjb25zdCBTdHJpbmcmIGZ1bGxTdHls
ZUlkLCBsb25nIHByb3BlcnR5SW5kZXgsIGNvbnN0IFN0cmluZyYgdGV4dCwgYm9vbCBvdmVyd3Jp
dGUsIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4qIHJlc3VsdCkKK3ZvaWQgSW5zcGVjdG9yQ1NTQWdl
bnQ6OnNldFByb3BlcnR5VGV4dDIoY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIGZ1bGxT
dHlsZUlkLCBsb25nIHByb3BlcnR5SW5kZXgsIGNvbnN0IFN0cmluZyYgdGV4dCwgYm9vbCBvdmVy
d3JpdGUsIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4qIHJlc3VsdCkKIHsKICAgICBJbnNwZWN0b3JD
U1NJZCBjb21wb3VuZElkKGZ1bGxTdHlsZUlkKTsKICAgICBBU1NFUlQoIWNvbXBvdW5kSWQuaXNF
bXB0eSgpKTsKQEAgLTMwMSw3ICszMDEsNyBAQCB2b2lkIEluc3BlY3RvckNTU0FnZW50OjpzZXRQ
cm9wZXJ0eVRleHQyKGNvbnN0IFN0cmluZyYgZnVsbFN0eWxlSWQsIGxvbmcgcHJvcGVydAogICAg
ICAgICAqcmVzdWx0ID0gaW5zcGVjdG9yU3R5bGVTaGVldC0+YnVpbGRPYmplY3RGb3JTdHlsZShp
bnNwZWN0b3JTdHlsZVNoZWV0LT5zdHlsZUZvcklkKGNvbXBvdW5kSWQpKTsKIH0KIAotdm9pZCBJ
bnNwZWN0b3JDU1NBZ2VudDo6dG9nZ2xlUHJvcGVydHkyKGNvbnN0IFN0cmluZyYgZnVsbFN0eWxl
SWQsIGxvbmcgcHJvcGVydHlJbmRleCwgYm9vbCBkaXNhYmxlLCBSZWZQdHI8SW5zcGVjdG9yVmFs
dWU+KiByZXN1bHQpCit2b2lkIEluc3BlY3RvckNTU0FnZW50Ojp0b2dnbGVQcm9wZXJ0eTIoY29u
c3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIGZ1bGxTdHlsZUlkLCBsb25nIHByb3BlcnR5SW5k
ZXgsIGJvb2wgZGlzYWJsZSwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiogcmVzdWx0KQogewogICAg
IEluc3BlY3RvckNTU0lkIGNvbXBvdW5kSWQoZnVsbFN0eWxlSWQpOwogICAgIEFTU0VSVCghY29t
cG91bmRJZC5pc0VtcHR5KCkpOwpAQCAtMzE1LDcgKzMxNSw3IEBAIHZvaWQgSW5zcGVjdG9yQ1NT
QWdlbnQ6OnRvZ2dsZVByb3BlcnR5Mihjb25zdCBTdHJpbmcmIGZ1bGxTdHlsZUlkLCBsb25nIHBy
b3BlcnR5CiAgICAgICAgICpyZXN1bHQgPSBpbnNwZWN0b3JTdHlsZVNoZWV0LT5idWlsZE9iamVj
dEZvclN0eWxlKGluc3BlY3RvclN0eWxlU2hlZXQtPnN0eWxlRm9ySWQoY29tcG91bmRJZCkpOwog
fQogCi12b2lkIEluc3BlY3RvckNTU0FnZW50OjpzZXRSdWxlU2VsZWN0b3IyKGNvbnN0IFN0cmlu
ZyYgZnVsbFJ1bGVJZCwgY29uc3QgU3RyaW5nJiBzZWxlY3RvciwgUmVmUHRyPEluc3BlY3RvclZh
bHVlPiogcmVzdWx0KQordm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6c2V0UnVsZVNlbGVjdG9yMihj
b25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgZnVsbFJ1bGVJZCwgY29uc3QgU3RyaW5nJiBz
ZWxlY3RvciwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiogcmVzdWx0KQogewogICAgIEluc3BlY3Rv
ckNTU0lkIGNvbXBvdW5kSWQoZnVsbFJ1bGVJZCk7CiAgICAgQVNTRVJUKCFjb21wb3VuZElkLmlz
RW1wdHkoKSk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2Vu
dC5oIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuaAppbmRleCA3MWNhNTgw
Li4xYWJjNjY1IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2Vu
dC5oCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmgKQEAgLTY2LDkg
KzY2LDkgQEAgcHVibGljOgogICAgIHZvaWQgZ2V0QWxsU3R5bGVzMihSZWZQdHI8SW5zcGVjdG9y
QXJyYXk+KiBzdHlsZXMpOwogICAgIHZvaWQgZ2V0U3R5bGVTaGVldDIoY29uc3QgU3RyaW5nJiBz
dHlsZVNoZWV0SWQsIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4qIHJlc3VsdCk7CiAgICAgdm9pZCBz
ZXRTdHlsZVNoZWV0VGV4dDIoY29uc3QgU3RyaW5nJiBzdHlsZVNoZWV0SWQsIGNvbnN0IFN0cmlu
ZyYgdGV4dCk7Ci0gICAgdm9pZCBzZXRQcm9wZXJ0eVRleHQyKGNvbnN0IFN0cmluZyYgc3R5bGVJ
ZCwgbG9uZyBwcm9wZXJ0eUluZGV4LCBjb25zdCBTdHJpbmcmIHRleHQsIGJvb2wgb3ZlcndyaXRl
LCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiByZXN1bHQpOwotICAgIHZvaWQgdG9nZ2xlUHJvcGVy
dHkyKGNvbnN0IFN0cmluZyYgc3R5bGVJZCwgbG9uZyBwcm9wZXJ0eUluZGV4LCBib29sIGRpc2Fi
bGUsIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4qIHJlc3VsdCk7Ci0gICAgdm9pZCBzZXRSdWxlU2Vs
ZWN0b3IyKGNvbnN0IFN0cmluZyYgcnVsZUlkLCBjb25zdCBTdHJpbmcmIHNlbGVjdG9yLCBSZWZQ
dHI8SW5zcGVjdG9yVmFsdWU+KiByZXN1bHQpOworICAgIHZvaWQgc2V0UHJvcGVydHlUZXh0Mihj
b25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgc3R5bGVJZCwgbG9uZyBwcm9wZXJ0eUluZGV4
LCBjb25zdCBTdHJpbmcmIHRleHQsIGJvb2wgb3ZlcndyaXRlLCBSZWZQdHI8SW5zcGVjdG9yVmFs
dWU+KiByZXN1bHQpOworICAgIHZvaWQgdG9nZ2xlUHJvcGVydHkyKGNvbnN0IFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+JiBzdHlsZUlkLCBsb25nIHByb3BlcnR5SW5kZXgsIGJvb2wgZGlzYWJsZSwg
UmVmUHRyPEluc3BlY3RvclZhbHVlPiogcmVzdWx0KTsKKyAgICB2b2lkIHNldFJ1bGVTZWxlY3Rv
cjIoY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIHJ1bGVJZCwgY29uc3QgU3RyaW5nJiBz
ZWxlY3RvciwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiogcmVzdWx0KTsKICAgICB2b2lkIGFkZFJ1
bGUyKGNvbnN0IGxvbmcgY29udGV4dE5vZGVJZCwgY29uc3QgU3RyaW5nJiBzZWxlY3RvciwgUmVm
UHRyPEluc3BlY3RvclZhbHVlPiogcmVzdWx0KTsKICAgICB2b2lkIGdldFN1cHBvcnRlZENTU1By
b3BlcnRpZXMoUmVmUHRyPEluc3BlY3RvckFycmF5PiogcmVzdWx0KTsKICAgICB2b2lkIHF1ZXJ5
U2VsZWN0b3JBbGwoY29uc3QgbG9uZyBub2RlSWQsIGNvbnN0IFN0cmluZyYgc2VsZWN0b3IsIFJl
ZlB0cjxJbnNwZWN0b3JBcnJheT4qIHJlc3VsdCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNwcCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
clN0eWxlU2hlZXQuY3BwCmluZGV4IDlmNGNhMzcuLmNlOTQ4MWEgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3BwCisrKyBiL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3BwCkBAIC0xMzUsNyArMTM1LDcgQEAgUGFzc1JlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IEluc3BlY3RvclN0eWxlOjpidWlsZE9iamVjdEZvclN0eWxlKCkg
Y29uc3QKIHsKICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JP
YmplY3Q6OmNyZWF0ZSgpOwogICAgIGlmICghbV9zdHlsZUlkLmlzRW1wdHkoKSkKLSAgICAgICAg
cmVzdWx0LT5zZXRTdHJpbmcoInN0eWxlSWQiLCBtX3N0eWxlSWQuYXNTdHJpbmcoKSk7CisgICAg
ICAgIHJlc3VsdC0+c2V0VmFsdWUoInN0eWxlSWQiLCBtX3N0eWxlSWQuYXNJbnNwZWN0b3JWYWx1
ZSgpKTsKIAogICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHByb3BlcnRpZXNPYmplY3QgPSBJ
bnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgIHByb3BlcnRpZXNPYmplY3QtPnNldFN0cmlu
Zygid2lkdGgiLCBtX3N0eWxlLT5nZXRQcm9wZXJ0eVZhbHVlKCJ3aWR0aCIpKTsKQEAgLTYzMywx
MyArNjMzLDggQEAgQ1NTU3R5bGVSdWxlKiBJbnNwZWN0b3JTdHlsZVNoZWV0OjpydWxlRm9ySWQo
Y29uc3QgSW5zcGVjdG9yQ1NTSWQmIGlkKSBjb25zdAogICAgICAgICByZXR1cm4gMDsKIAogICAg
IEFTU0VSVCghaWQuaXNFbXB0eSgpKTsKLSAgICBib29sIG9rOwotICAgIHVuc2lnbmVkIGluZGV4
ID0gaWQub3JkaW5hbCgpLnRvVUludCgmb2spOwotICAgIGlmICghb2spCi0gICAgICAgIHJldHVy
biAwOwotCiAgICAgZW5zdXJlRmxhdFJ1bGVzKCk7Ci0gICAgcmV0dXJuIGluZGV4ID49IG1fZmxh
dFJ1bGVzLnNpemUoKSA/IDAgOiBtX2ZsYXRSdWxlcy5hdChpbmRleCk7CisgICAgcmV0dXJuIGlk
Lm9yZGluYWwoKSA+PSBtX2ZsYXRSdWxlcy5zaXplKCkgPyAwIDogbV9mbGF0UnVsZXMuYXQoaWQu
b3JkaW5hbCgpKTsKIAogfQogCkBAIC02ODUsNyArNjgwLDcgQEAgUGFzc1JlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IEluc3BlY3RvclN0eWxlU2hlZXQ6OmJ1aWxkT2JqZWN0Rm9yUnVsZShDU1NTdHls
ZVJ1bGUKICAgICBpZiAoY2FuQmluZCgpKSB7CiAgICAgICAgIEluc3BlY3RvckNTU0lkIGlkKHJ1
bGVJZChydWxlKSk7CiAgICAgICAgIGlmICghaWQuaXNFbXB0eSgpKQotICAgICAgICAgICAgcmVz
dWx0LT5zZXRTdHJpbmcoInJ1bGVJZCIsIGlkLmFzU3RyaW5nKCkpOworICAgICAgICAgICAgcmVz
dWx0LT5zZXRWYWx1ZSgicnVsZUlkIiwgaWQuYXNJbnNwZWN0b3JWYWx1ZSgpKTsKICAgICB9CiAK
ICAgICBSZWZQdHI8Q1NTUnVsZVNvdXJjZURhdGE+IHNvdXJjZURhdGE7CkBAIC03OTMsNyArNzg4
LDcgQEAgSW5zcGVjdG9yQ1NTSWQgSW5zcGVjdG9yU3R5bGVTaGVldDo6cnVsZU9yU3R5bGVJZChD
U1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSkgY28KIHsKICAgICB1bnNpZ25lZCBpbmRleCA9IHJ1
bGVJbmRleEJ5U3R5bGUoc3R5bGUpOwogICAgIGlmIChpbmRleCAhPSBVSU5UX01BWCkKLSAgICAg
ICAgcmV0dXJuIEluc3BlY3RvckNTU0lkOjpjcmVhdGVGcm9tUGFydHMoaWQoKSwgU3RyaW5nOjpu
dW1iZXIoaW5kZXgpKTsKKyAgICAgICAgcmV0dXJuIEluc3BlY3RvckNTU0lkKGlkKCksIGluZGV4
KTsKICAgICByZXR1cm4gSW5zcGVjdG9yQ1NTSWQoKTsKIH0KIApAQCAtMTA3Niw3ICsxMDcxLDcg
QEAgSW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlOjpJbnNwZWN0b3JTdHlsZVNoZWV0
Rm9ySW5saW5lU3R5bGUoY29uc3QgU3RyaW4KICAgICAsIG1fcnVsZVNvdXJjZURhdGEoMCkKIHsK
ICAgICBBU1NFUlQoZWxlbWVudCk7Ci0gICAgbV9pbnNwZWN0b3JTdHlsZSA9IEluc3BlY3RvclN0
eWxlOjpjcmVhdGUoSW5zcGVjdG9yQ1NTSWQ6OmNyZWF0ZUZyb21QYXJ0cyhpZCwgIjAiKSwgaW5s
aW5lU3R5bGUoKSwgdGhpcyk7CisgICAgbV9pbnNwZWN0b3JTdHlsZSA9IEluc3BlY3RvclN0eWxl
OjpjcmVhdGUoSW5zcGVjdG9yQ1NTSWQoaWQsIDApLCBpbmxpbmVTdHlsZSgpLCB0aGlzKTsKIH0K
IAogYm9vbCBJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU6OnNldFN0eWxlVGV4dChD
U1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSwgY29uc3QgU3RyaW5nJiB0ZXh0KQpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5oIGIvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5oCmluZGV4IGEwNjIyZmUuLmI1NjUxMTMgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuaAorKysgYi9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmgKQEAgLTUxLDI4ICs1MSw0MyBAQCBj
bGFzcyBOb2RlOwogCiBjbGFzcyBJbnNwZWN0b3JDU1NJZCB7CiBwdWJsaWM6Ci0gICAgc3RhdGlj
IEluc3BlY3RvckNTU0lkIGNyZWF0ZUZyb21QYXJ0cyhjb25zdCBTdHJpbmcmIHN0eWxlU2hlZXRJ
ZCwgY29uc3QgU3RyaW5nJiBvcmRpbmFsKSB7IHJldHVybiBJbnNwZWN0b3JDU1NJZChzdHlsZVNo
ZWV0SWQgKyAiOiIgKyBvcmRpbmFsKTsgfQotCiAgICAgSW5zcGVjdG9yQ1NTSWQoKSB7IH0KLSAg
ICBleHBsaWNpdCBJbnNwZWN0b3JDU1NJZChjb25zdCBTdHJpbmcmIGlkKQorCisgICAgZXhwbGlj
aXQgSW5zcGVjdG9yQ1NTSWQoUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICAgewot
ICAgICAgICBpZC5zcGxpdCgnOicsIG1faWRQYXJ0cyk7Ci0gICAgICAgIEFTU0VSVChtX2lkUGFy
dHMuc2l6ZSgpID09IDIpOworICAgICAgICBpZiAoIXZhbHVlLT5nZXRTdHJpbmcoInN0eWxlU2hl
ZXRJZCIsICZtX3N0eWxlU2hlZXRJZCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAor
ICAgICAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IG9yZGluYWxWYWx1ZSA9IHZhbHVlLT5nZXQo
Im9yZGluYWwiKTsKKyAgICAgICAgaWYgKCFvcmRpbmFsVmFsdWUgfHwgIW9yZGluYWxWYWx1ZS0+
YXNOdW1iZXIoJm1fb3JkaW5hbCkpCisgICAgICAgICAgICBtX3N0eWxlU2hlZXRJZCA9ICIiOwog
ICAgIH0KIAotICAgIGNvbnN0IFN0cmluZyYgc3R5bGVTaGVldElkKCkgY29uc3QgeyBBU1NFUlQo
bV9pZFBhcnRzLnNpemUoKSA9PSAyKTsgcmV0dXJuIG1faWRQYXJ0cy5hdCgwKTsgfQotICAgIGNv
bnN0IFN0cmluZyYgb3JkaW5hbCgpIGNvbnN0IHsgQVNTRVJUKG1faWRQYXJ0cy5zaXplKCkgPT0g
Mik7IHJldHVybiBtX2lkUGFydHMuYXQoMSk7IH0KLSAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7
IHJldHVybiBtX2lkUGFydHMuaXNFbXB0eSgpOyB9Ci0gICAgU3RyaW5nIGFzU3RyaW5nKCkgY29u
c3QKKyAgICBJbnNwZWN0b3JDU1NJZChjb25zdCBTdHJpbmcmIHN0eWxlU2hlZXRJZCwgdW5zaWdu
ZWQgaW50IG9yZGluYWwpCisgICAgICAgIDogbV9zdHlsZVNoZWV0SWQoc3R5bGVTaGVldElkKQor
ICAgICAgICAsIG1fb3JkaW5hbChvcmRpbmFsKQorICAgIHsKKyAgICB9CisKKyAgICBib29sIGlz
RW1wdHkoKSBjb25zdCB7IHJldHVybiBtX3N0eWxlU2hlZXRJZC5pc0VtcHR5KCk7IH0KKworICAg
IGNvbnN0IFN0cmluZyYgc3R5bGVTaGVldElkKCkgY29uc3QgeyByZXR1cm4gbV9zdHlsZVNoZWV0
SWQ7IH0KKyAgICB1bnNpZ25lZCBpbnQgb3JkaW5hbCgpIGNvbnN0IHsgcmV0dXJuIG1fb3JkaW5h
bDsgfQorCisgICAgUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gYXNJbnNwZWN0b3JWYWx1ZSgp
IGNvbnN0CiAgICAgewogICAgICAgICBpZiAoaXNFbXB0eSgpKQotICAgICAgICAgICAgcmV0dXJu
IFN0cmluZygpOworICAgICAgICAgICAgcmV0dXJuIEluc3BlY3RvclZhbHVlOjpudWxsKCk7CiAK
LSAgICAgICAgcmV0dXJuIG1faWRQYXJ0cy5hdCgwKSArICI6IiArIG1faWRQYXJ0cy5hdCgxKTsK
KyAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0
OjpjcmVhdGUoKTsKKyAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoInN0eWxlU2hlZXRJZCIsIG1f
c3R5bGVTaGVldElkKTsKKyAgICAgICAgcmVzdWx0LT5zZXROdW1iZXIoIm9yZGluYWwiLCBtX29y
ZGluYWwpOworICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAogcHJpdmF0ZToKLSAgICBW
ZWN0b3I8U3RyaW5nPiBtX2lkUGFydHM7CisgICAgU3RyaW5nIG1fc3R5bGVTaGVldElkOworICAg
IHVuc2lnbmVkIGludCBtX29yZGluYWw7CiB9OwogCiBzdHJ1Y3QgSW5zcGVjdG9yU3R5bGVQcm9w
ZXJ0eSB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>74671</attachid>
            <date>2010-11-23 08:27:38 -0800</date>
            <delta_ts>2010-11-24 01:49:30 -0800</delta_ts>
            <desc>[PATCH] Review comments addressed.</desc>
            <filename>style_id</filename>
            <type>text/plain</type>
            <size>27320</size>
            <attacher name="Pavel Feldman">pfeldman</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAzMWZlMTFiLi45NjVkNTIyIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjIgQEAKKzIwMTAtMTEt
MjMgIFBhdmVsIEZlbGRtYW4gIDxwZmVsZG1hbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogcGFzcyBz
dHlsZSBpZCB0byBmcm9udC1lbmQgYXMgT2JqZWN0LCBub3Qgc3RyaW5nLgorCisgICAgICAgIE5l
ZWQgYSBzaG9ydCBkZXNjcmlwdGlvbiBhbmQgYnVnIFVSTCAoT09QUyEpCisKKyAgICAgICAgKiBp
bnNwZWN0b3Ivc3R5bGVzLW5ldy1BUEkuaHRtbDoKKworMjAxMC0xMS0yMyAgUGF2ZWwgRmVsZG1h
biAgPHBmZWxkbWFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBwYXNzIHN0eWxlIGlkIHRvIGZyb250
LWVuZCBhcyBPYmplY3QsIG5vdCBzdHJpbmcuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD00OTk3MQorCisgICAgICAgICogaW5zcGVjdG9yL3N0eWxlcy1u
ZXctQVBJLmh0bWw6CisKIDIwMTAtMTEtMjMgIEFsZWphbmRybyBHLiBDYXN0cm8gIDxhbGV4QGln
YWxpYS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZC4gUmViYXNlbGluZWQKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL2luc3BlY3Rvci9zdHlsZXMtbmV3LUFQSS5odG1sIGIvTGF5b3V0VGVzdHMv
aW5zcGVjdG9yL3N0eWxlcy1uZXctQVBJLmh0bWwKaW5kZXggOGQ2NDMyZC4uYmY1ZDBiMyAxMDA2
NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3N0eWxlcy1uZXctQVBJLmh0bWwKKysrIGIv
TGF5b3V0VGVzdHMvaW5zcGVjdG9yL3N0eWxlcy1uZXctQVBJLmh0bWwKQEAgLTEsNyArMSw3IEBA
CiA8aHRtbD4KIDxoZWFkPgogCi08bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InJlc291cmNl
cy9zdHlsZXMtbmV3LUFQSS5jc3MiIC0tPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJy
ZXNvdXJjZXMvc3R5bGVzLW5ldy1BUEkuY3NzIj4KIAogPHNjcmlwdCBzcmM9Ii4uL2h0dHAvdGVz
dHMvaW5zcGVjdG9yL2luc3BlY3Rvci10ZXN0LmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJl
bGVtZW50cy10ZXN0cy5qcyI+PC9zY3JpcHQ+CkBAIC0xMTIsMjUgKzExMiwxOSBAQCBmdW5jdGlv
biBmcm9udGVuZF9jaGFuZ2VTZWxlY3Rvcih0ZXN0Q29udHJvbGxlciwgc3R5bGVTaGVldCkKICAg
ICB7CiAgICAgICAgIHRlc3RDb250cm9sbGVyLnJlc3VsdHMucHVzaCgiIik7CiAgICAgICAgIHRl
c3RDb250cm9sbGVyLnJlc3VsdHMucHVzaCgiPT09IEFmdGVyIHNlbGVjdG9yIHNldCA9PT0iKTsK
LSAgICAgICAgZnJvbnRlbmRfbG9hZEFuZER1bXBTdHlsZVNoZWV0KHRlc3RDb250cm9sbGVyLCBm
cm9udGVuZF9wYXJlbnRTdHlsZVNoZWV0SWQocnVsZS5ydWxlSWQpLCBmcm9udGVuZF9zZXRTdHls
ZVRleHQuYmluZChudWxsLCB0ZXN0Q29udHJvbGxlcikpOworICAgICAgICBmcm9udGVuZF9sb2Fk
QW5kRHVtcFN0eWxlU2hlZXQodGVzdENvbnRyb2xsZXIsIHJ1bGUucnVsZUlkLnN0eWxlU2hlZXRJ
ZCwgZnJvbnRlbmRfc2V0U3R5bGVUZXh0LmJpbmQobnVsbCwgdGVzdENvbnRyb2xsZXIpKTsKICAg
ICB9CiAKICAgICBJbnNwZWN0b3JCYWNrZW5kLnNldFJ1bGVTZWxlY3RvcjIoc3R5bGVTaGVldC5y
dWxlc1swXS5ydWxlSWQsICJodG1sICosIGJvZHlbZm9vPVwiYmFyXCJdIiwgZGlkU2V0U2VsZWN0
b3IuYmluZChudWxsLCB0ZXN0Q29udHJvbGxlcikpOwogfQogCi1mdW5jdGlvbiBmcm9udGVuZF9w
YXJlbnRTdHlsZVNoZWV0SWQocnVsZU9yU3R5bGVJZCkKLXsKLSAgICByZXR1cm4gcnVsZU9yU3R5
bGVJZC5zdWJzdHJpbmcoMCwgcnVsZU9yU3R5bGVJZC5pbmRleE9mKCc6JykpOwotfQotCi0KIGZ1
bmN0aW9uIGZyb250ZW5kX3NldFN0eWxlVGV4dCh0ZXN0Q29udHJvbGxlciwgc3R5bGVTaGVldCkK
IHsKICAgICBmdW5jdGlvbiBkaWRTZXRTdHlsZVRleHQodGVzdENvbnRyb2xsZXIsIHN0eWxlKQog
ICAgIHsKICAgICAgICAgdGVzdENvbnRyb2xsZXIucmVzdWx0cy5wdXNoKCIiKTsKICAgICAgICAg
dGVzdENvbnRyb2xsZXIucmVzdWx0cy5wdXNoKCI9PT0gQWZ0ZXIgc3R5bGUgdGV4dCBzZXQgPT09
Iik7Ci0gICAgICAgIGZyb250ZW5kX2xvYWRBbmREdW1wU3R5bGVTaGVldCh0ZXN0Q29udHJvbGxl
ciwgZnJvbnRlbmRfcGFyZW50U3R5bGVTaGVldElkKHN0eWxlLnN0eWxlSWQpLCBmcm9udGVuZF9h
ZGRSdWxlLmJpbmQobnVsbCwgdGVzdENvbnRyb2xsZXIpKTsKKyAgICAgICAgZnJvbnRlbmRfbG9h
ZEFuZER1bXBTdHlsZVNoZWV0KHRlc3RDb250cm9sbGVyLCBzdHlsZS5zdHlsZUlkLnN0eWxlU2hl
ZXRJZCwgZnJvbnRlbmRfYWRkUnVsZS5iaW5kKG51bGwsIHRlc3RDb250cm9sbGVyKSk7CiAgICAg
fQogCiAgICAgSW5zcGVjdG9yQmFja2VuZC5zZXRQcm9wZXJ0eVRleHQyKHN0eWxlU2hlZXQucnVs
ZXNbMF0uc3R5bGUuc3R5bGVJZCwgMCwgIiIsIHRydWUpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBhMWY3MmE4Li5hNzljNzY2IDEwMDY0
NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDQ3IEBACisyMDEwLTExLTIzICBQYXZlbCBGZWxkbWFuICA8cGZlbGRtYW5AY2hyb21pdW0u
b3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdl
YiBJbnNwZWN0b3I6IHBhc3Mgc3R5bGUgaWQgdG8gZnJvbnQtZW5kIGFzIE9iamVjdCwgbm90IHN0
cmluZy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ5
OTcxCisKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yLmlkbDoKKyAgICAgICAgKiBpbnNw
ZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
Q1NTQWdlbnQ6OmdldFN0eWxlc0Zvck5vZGUyKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckNTU0FnZW50OjpnZXRTdHlsZVNoZWV0VGV4dDIpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yQ1NTQWdlbnQ6OnNldFByb3BlcnR5VGV4dDIpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yQ1NTQWdlbnQ6OnRvZ2dsZVByb3BlcnR5Mik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JDU1NBZ2VudDo6c2V0UnVsZVNlbGVjdG9yMik6CisgICAgICAgICogaW5zcGVjdG9yL0luc3Bl
Y3RvckNTU0FnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5bGU6OmJ1aWxkT2JqZWN0Rm9yU3R5
bGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5bGVTaGVldDo6ZmluYWxVUkwpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5bGVTaGVldDo6cnVsZUZvcklkKToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvclN0eWxlU2hlZXQ6OmJ1aWxkT2JqZWN0Rm9yU3R5bGVTaGVl
dCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHlsZVNoZWV0OjpidWlsZE9iamVjdEZv
clJ1bGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5bGVTaGVldDo6dGV4dCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHlsZVNoZWV0OjpydWxlT3JTdHlsZUlkKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZTo6SW5zcGVj
dG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
clN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZTo6dGV4dCk6CisgICAgICAgICogaW5zcGVjdG9yL0lu
c3BlY3RvclN0eWxlU2hlZXQuaDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0lkOjpJ
bnNwZWN0b3JDU1NJZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NJZDo6aXNFbXB0
eSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NJZDo6c3R5bGVTaGVldElkKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0lkOjpvcmRpbmFsKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvckNTU0lkOjphc0luc3BlY3RvclZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvclN0eWxlU2hlZXQ6OmlkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0
eWxlU2hlZXRGb3JJbmxpbmVTdHlsZTo6c3R5bGVGb3JJZCk6CisgICAgICAgICogaW5zcGVjdG9y
L2Zyb250LWVuZC9DU1NTdHlsZU1vZGVsLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0
eWxlTW9kZWwucHJvdG90eXBlLnNldFJ1bGVTZWxlY3Rvcik6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuQ1NTU3R5bGVNb2RlbC5wcm90b3R5cGUuYWRkUnVsZSk6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuQ1NTU3R5bGVNb2RlbC5wcm90b3R5cGUuX3N0eWxlU2hlZXRDaGFuZ2VkKToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uLnByb3RvdHlwZS5pbnNlcnRQcm9wZXJ0
eUF0KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NQcm9wZXJ0eS5wcm90b3R5cGUuc2V0VGV4
dCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTUHJvcGVydHkucHJvdG90eXBlLnNldERpc2Fi
bGVkLmNhbGxiYWNrKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NQcm9wZXJ0eS5wcm90b3R5
cGUuc2V0RGlzYWJsZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlU2hlZXQuY3Jl
YXRlRm9ySWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlU2hlZXQucHJvdG90eXBl
LnNldFRleHQpOgorCiAyMDEwLTExLTIzICBKZXJlbXkgT3Jsb3cgIDxqb3Jsb3dAY2hyb21pdW0u
b3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFN0ZXZlIEJsb2NrLgpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmlkbCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ci5pZGwKaW5kZXggMjlhM2JhMC4uZjdhY2ZlOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yLmlkbAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3IuaWRsCkBA
IC0yMTMsMTAgKzIxMywxMSBAQCBtb2R1bGUgY29yZSB7CiAgICAgICAgIFtoYW5kbGVyPUNTU10g
dm9pZCBnZXRJbmxpbmVTdHlsZUZvck5vZGUyKGluIGxvbmcgbm9kZUlkLCBvdXQgVmFsdWUgc3R5
bGUpOwogICAgICAgICBbaGFuZGxlcj1DU1NdIHZvaWQgZ2V0QWxsU3R5bGVzMihvdXQgQXJyYXkg
c3R5bGVTaGVldElkcyk7CiAgICAgICAgIFtoYW5kbGVyPUNTU10gdm9pZCBnZXRTdHlsZVNoZWV0
MihpbiBTdHJpbmcgc3R5bGVTaGVldElkLCBvdXQgVmFsdWUgc3R5bGVTaGVldCk7CisgICAgICAg
IFtoYW5kbGVyPUNTU10gdm9pZCBnZXRTdHlsZVNoZWV0VGV4dDIoaW4gU3RyaW5nIHN0eWxlU2hl
ZXRJZCwgb3V0IFN0cmluZyB1cmwsIG91dCBTdHJpbmcgdGV4dCk7CiAgICAgICAgIFtoYW5kbGVy
PUNTU10gdm9pZCBzZXRTdHlsZVNoZWV0VGV4dDIoaW4gU3RyaW5nIHN0eWxlU2hlZXRJZCwgaW4g
U3RyaW5nIHRleHQpOwotICAgICAgICBbaGFuZGxlcj1DU1NdIHZvaWQgc2V0UHJvcGVydHlUZXh0
MihpbiBTdHJpbmcgc3R5bGVJZCwgaW4gbG9uZyBwcm9wZXJ0eUluZGV4LCBpbiBTdHJpbmcgdGV4
dCwgaW4gYm9vbGVhbiBvdmVyd3JpdGUsIG91dCBWYWx1ZSBzdHlsZSk7Ci0gICAgICAgIFtoYW5k
bGVyPUNTU10gdm9pZCB0b2dnbGVQcm9wZXJ0eTIoaW4gU3RyaW5nIHN0eWxlSWQsIGluIGxvbmcg
cHJvcGVydHlJbmRleCwgaW4gYm9vbGVhbiBkaXNhYmxlLCBvdXQgVmFsdWUgc3R5bGUpOwotICAg
ICAgICBbaGFuZGxlcj1DU1NdIHZvaWQgc2V0UnVsZVNlbGVjdG9yMihpbiBTdHJpbmcgcnVsZUlk
LCBpbiBTdHJpbmcgc2VsZWN0b3IsIG91dCBWYWx1ZSBydWxlKTsKKyAgICAgICAgW2hhbmRsZXI9
Q1NTXSB2b2lkIHNldFByb3BlcnR5VGV4dDIoaW4gT2JqZWN0IHN0eWxlSWQsIGluIGxvbmcgcHJv
cGVydHlJbmRleCwgaW4gU3RyaW5nIHRleHQsIGluIGJvb2xlYW4gb3ZlcndyaXRlLCBvdXQgVmFs
dWUgc3R5bGUpOworICAgICAgICBbaGFuZGxlcj1DU1NdIHZvaWQgdG9nZ2xlUHJvcGVydHkyKGlu
IE9iamVjdCBzdHlsZUlkLCBpbiBsb25nIHByb3BlcnR5SW5kZXgsIGluIGJvb2xlYW4gZGlzYWJs
ZSwgb3V0IFZhbHVlIHN0eWxlKTsKKyAgICAgICAgW2hhbmRsZXI9Q1NTXSB2b2lkIHNldFJ1bGVT
ZWxlY3RvcjIoaW4gT2JqZWN0IHJ1bGVJZCwgaW4gU3RyaW5nIHNlbGVjdG9yLCBvdXQgVmFsdWUg
cnVsZSk7CiAgICAgICAgIFtoYW5kbGVyPUNTU10gdm9pZCBhZGRSdWxlMihpbiBsb25nIGNvbnRl
eHROb2RlSWQsIGluIFN0cmluZyBzZWxlY3Rvciwgb3V0IFZhbHVlIHJ1bGUpOwogICAgICAgICBb
aGFuZGxlcj1DU1NdIHZvaWQgZ2V0U3VwcG9ydGVkQ1NTUHJvcGVydGllcyhvdXQgQXJyYXkgY3Nz
UHJvcGVydGllcyk7CiAgICAgICAgIFtoYW5kbGVyPUNTU10gdm9pZCBxdWVyeVNlbGVjdG9yQWxs
KGluIGxvbmcgZG9jdW1lbnRJZCwgaW4gU3RyaW5nIHNlbGVjdG9yLCBvdXQgQXJyYXkgcmVzdWx0
KTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmNwcCBi
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmNwcAppbmRleCBhYmM5ODNlLi5m
ZDFkZWI1IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5j
cHAKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwCkBAIC0yMTQs
NyArMjE0LDcgQEAgdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0U3R5bGVzRm9yTm9kZTIobG9u
ZyBub2RlSWQsIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4qIHIKICAgICAgICAgaWYgKHBhcmVudEVs
ZW1lbnQtPnN0eWxlKCkgJiYgcGFyZW50RWxlbWVudC0+c3R5bGUoKS0+bGVuZ3RoKCkpIHsKICAg
ICAgICAgICAgIEluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZSogc3R5bGVTaGVldCA9
IGFzSW5zcGVjdG9yU3R5bGVTaGVldChwYXJlbnRFbGVtZW50KTsKICAgICAgICAgICAgIGlmIChz
dHlsZVNoZWV0KQotICAgICAgICAgICAgICAgIHBhcmVudFN0eWxlLT5zZXRPYmplY3QoImlubGlu
ZVN0eWxlIiwgc3R5bGVTaGVldC0+YnVpbGRPYmplY3RGb3JTdHlsZShzdHlsZVNoZWV0LT5zdHls
ZUZvcklkKEluc3BlY3RvckNTU0lkOjpjcmVhdGVGcm9tUGFydHMoc3R5bGVTaGVldC0+aWQoKSwg
IjAiKSkpKTsKKyAgICAgICAgICAgICAgICBwYXJlbnRTdHlsZS0+c2V0T2JqZWN0KCJpbmxpbmVT
dHlsZSIsIHN0eWxlU2hlZXQtPmJ1aWxkT2JqZWN0Rm9yU3R5bGUoc3R5bGVTaGVldC0+c3R5bGVG
b3JJZChJbnNwZWN0b3JDU1NJZChzdHlsZVNoZWV0LT5pZCgpLCAwKSkpKTsKICAgICAgICAgfQog
CiAgICAgICAgIENTU1N0eWxlU2VsZWN0b3IqIHBhcmVudFNlbGVjdG9yID0gcGFyZW50RWxlbWVu
dC0+b3duZXJEb2N1bWVudCgpLT5zdHlsZVNlbGVjdG9yKCk7CkBAIC0yNzYsNiArMjc2LDE1IEBA
IHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmdldFN0eWxlU2hlZXQyKGNvbnN0IFN0cmluZyYgc3R5
bGVTaGVldElkLCBSZWZQdHI8SW5zcGVjCiAgICAgKnN0eWxlU2hlZXRPYmplY3QgPSBpbnNwZWN0
b3JTdHlsZVNoZWV0LT5idWlsZE9iamVjdEZvclN0eWxlU2hlZXQoKTsKIH0KIAordm9pZCBJbnNw
ZWN0b3JDU1NBZ2VudDo6Z2V0U3R5bGVTaGVldFRleHQyKGNvbnN0IFN0cmluZyYgc3R5bGVTaGVl
dElkLCBTdHJpbmcqIHVybCwgU3RyaW5nKiByZXN1bHQpCit7CisgICAgSW5zcGVjdG9yU3R5bGVT
aGVldCogaW5zcGVjdG9yU3R5bGVTaGVldCA9IHN0eWxlU2hlZXRGb3JJZChzdHlsZVNoZWV0SWQp
OworICAgIGlmICghaW5zcGVjdG9yU3R5bGVTaGVldCkKKyAgICAgICAgcmV0dXJuOworICAgICp1
cmwgPSBpbnNwZWN0b3JTdHlsZVNoZWV0LT5maW5hbFVSTCgpOworICAgIGluc3BlY3RvclN0eWxl
U2hlZXQtPnRleHQocmVzdWx0KTsKK30KKwogdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6c2V0U3R5
bGVTaGVldFRleHQyKGNvbnN0IFN0cmluZyYgc3R5bGVTaGVldElkLCBjb25zdCBTdHJpbmcmIHRl
eHQpCiB7CiAgICAgSW5zcGVjdG9yU3R5bGVTaGVldCogaW5zcGVjdG9yU3R5bGVTaGVldCA9IHN0
eWxlU2hlZXRGb3JJZChzdHlsZVNoZWV0SWQpOwpAQCAtMjg3LDcgKzI5Niw3IEBAIHZvaWQgSW5z
cGVjdG9yQ1NTQWdlbnQ6OnNldFN0eWxlU2hlZXRUZXh0Mihjb25zdCBTdHJpbmcmIHN0eWxlU2hl
ZXRJZCwgY29uc3QgU3RyCiAgICAgICAgIGluc3BlY3RvclN0eWxlU2hlZXQtPnJlcGFyc2VTdHls
ZVNoZWV0KHRleHQpOwogfQogCi12b2lkIEluc3BlY3RvckNTU0FnZW50OjpzZXRQcm9wZXJ0eVRl
eHQyKGNvbnN0IFN0cmluZyYgZnVsbFN0eWxlSWQsIGxvbmcgcHJvcGVydHlJbmRleCwgY29uc3Qg
U3RyaW5nJiB0ZXh0LCBib29sIG92ZXJ3cml0ZSwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiogcmVz
dWx0KQordm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6c2V0UHJvcGVydHlUZXh0Mihjb25zdCBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiYgZnVsbFN0eWxlSWQsIGxvbmcgcHJvcGVydHlJbmRleCwgY29u
c3QgU3RyaW5nJiB0ZXh0LCBib29sIG92ZXJ3cml0ZSwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiog
cmVzdWx0KQogewogICAgIEluc3BlY3RvckNTU0lkIGNvbXBvdW5kSWQoZnVsbFN0eWxlSWQpOwog
ICAgIEFTU0VSVCghY29tcG91bmRJZC5pc0VtcHR5KCkpOwpAQCAtMzAxLDcgKzMxMCw3IEBAIHZv
aWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OnNldFByb3BlcnR5VGV4dDIoY29uc3QgU3RyaW5nJiBmdWxs
U3R5bGVJZCwgbG9uZyBwcm9wZXJ0CiAgICAgICAgICpyZXN1bHQgPSBpbnNwZWN0b3JTdHlsZVNo
ZWV0LT5idWlsZE9iamVjdEZvclN0eWxlKGluc3BlY3RvclN0eWxlU2hlZXQtPnN0eWxlRm9ySWQo
Y29tcG91bmRJZCkpOwogfQogCi12b2lkIEluc3BlY3RvckNTU0FnZW50Ojp0b2dnbGVQcm9wZXJ0
eTIoY29uc3QgU3RyaW5nJiBmdWxsU3R5bGVJZCwgbG9uZyBwcm9wZXJ0eUluZGV4LCBib29sIGRp
c2FibGUsIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4qIHJlc3VsdCkKK3ZvaWQgSW5zcGVjdG9yQ1NT
QWdlbnQ6OnRvZ2dsZVByb3BlcnR5Mihjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgZnVs
bFN0eWxlSWQsIGxvbmcgcHJvcGVydHlJbmRleCwgYm9vbCBkaXNhYmxlLCBSZWZQdHI8SW5zcGVj
dG9yVmFsdWU+KiByZXN1bHQpCiB7CiAgICAgSW5zcGVjdG9yQ1NTSWQgY29tcG91bmRJZChmdWxs
U3R5bGVJZCk7CiAgICAgQVNTRVJUKCFjb21wb3VuZElkLmlzRW1wdHkoKSk7CkBAIC0zMTUsNyAr
MzI0LDcgQEAgdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6dG9nZ2xlUHJvcGVydHkyKGNvbnN0IFN0
cmluZyYgZnVsbFN0eWxlSWQsIGxvbmcgcHJvcGVydHkKICAgICAgICAgKnJlc3VsdCA9IGluc3Bl
Y3RvclN0eWxlU2hlZXQtPmJ1aWxkT2JqZWN0Rm9yU3R5bGUoaW5zcGVjdG9yU3R5bGVTaGVldC0+
c3R5bGVGb3JJZChjb21wb3VuZElkKSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OnNl
dFJ1bGVTZWxlY3RvcjIoY29uc3QgU3RyaW5nJiBmdWxsUnVsZUlkLCBjb25zdCBTdHJpbmcmIHNl
bGVjdG9yLCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiByZXN1bHQpCit2b2lkIEluc3BlY3RvckNT
U0FnZW50OjpzZXRSdWxlU2VsZWN0b3IyKGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBm
dWxsUnVsZUlkLCBjb25zdCBTdHJpbmcmIHNlbGVjdG9yLCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+
KiByZXN1bHQpCiB7CiAgICAgSW5zcGVjdG9yQ1NTSWQgY29tcG91bmRJZChmdWxsUnVsZUlkKTsK
ICAgICBBU1NFUlQoIWNvbXBvdW5kSWQuaXNFbXB0eSgpKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmggYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JDU1NBZ2VudC5oCmluZGV4IDcxY2E1ODAuLjZlOGYyNDQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmgKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yQ1NTQWdlbnQuaApAQCAtNjUsMTAgKzY1LDExIEBAIHB1YmxpYzoKICAgICB2b2lkIGdl
dENvbXB1dGVkU3R5bGVGb3JOb2RlMihsb25nIG5vZGVJZCwgUmVmUHRyPEluc3BlY3RvclZhbHVl
Piogc3R5bGUpOwogICAgIHZvaWQgZ2V0QWxsU3R5bGVzMihSZWZQdHI8SW5zcGVjdG9yQXJyYXk+
KiBzdHlsZXMpOwogICAgIHZvaWQgZ2V0U3R5bGVTaGVldDIoY29uc3QgU3RyaW5nJiBzdHlsZVNo
ZWV0SWQsIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4qIHJlc3VsdCk7CisgICAgdm9pZCBnZXRTdHls
ZVNoZWV0VGV4dDIoY29uc3QgU3RyaW5nJiBzdHlsZVNoZWV0SWQsIFN0cmluZyogdXJsLCBTdHJp
bmcqIHJlc3VsdCk7CiAgICAgdm9pZCBzZXRTdHlsZVNoZWV0VGV4dDIoY29uc3QgU3RyaW5nJiBz
dHlsZVNoZWV0SWQsIGNvbnN0IFN0cmluZyYgdGV4dCk7Ci0gICAgdm9pZCBzZXRQcm9wZXJ0eVRl
eHQyKGNvbnN0IFN0cmluZyYgc3R5bGVJZCwgbG9uZyBwcm9wZXJ0eUluZGV4LCBjb25zdCBTdHJp
bmcmIHRleHQsIGJvb2wgb3ZlcndyaXRlLCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiByZXN1bHQp
OwotICAgIHZvaWQgdG9nZ2xlUHJvcGVydHkyKGNvbnN0IFN0cmluZyYgc3R5bGVJZCwgbG9uZyBw
cm9wZXJ0eUluZGV4LCBib29sIGRpc2FibGUsIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4qIHJlc3Vs
dCk7Ci0gICAgdm9pZCBzZXRSdWxlU2VsZWN0b3IyKGNvbnN0IFN0cmluZyYgcnVsZUlkLCBjb25z
dCBTdHJpbmcmIHNlbGVjdG9yLCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiByZXN1bHQpOworICAg
IHZvaWQgc2V0UHJvcGVydHlUZXh0Mihjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYgc3R5
bGVJZCwgbG9uZyBwcm9wZXJ0eUluZGV4LCBjb25zdCBTdHJpbmcmIHRleHQsIGJvb2wgb3Zlcndy
aXRlLCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiByZXN1bHQpOworICAgIHZvaWQgdG9nZ2xlUHJv
cGVydHkyKGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBzdHlsZUlkLCBsb25nIHByb3Bl
cnR5SW5kZXgsIGJvb2wgZGlzYWJsZSwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiogcmVzdWx0KTsK
KyAgICB2b2lkIHNldFJ1bGVTZWxlY3RvcjIoY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4m
IHJ1bGVJZCwgY29uc3QgU3RyaW5nJiBzZWxlY3RvciwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiog
cmVzdWx0KTsKICAgICB2b2lkIGFkZFJ1bGUyKGNvbnN0IGxvbmcgY29udGV4dE5vZGVJZCwgY29u
c3QgU3RyaW5nJiBzZWxlY3RvciwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiogcmVzdWx0KTsKICAg
ICB2b2lkIGdldFN1cHBvcnRlZENTU1Byb3BlcnRpZXMoUmVmUHRyPEluc3BlY3RvckFycmF5Piog
cmVzdWx0KTsKICAgICB2b2lkIHF1ZXJ5U2VsZWN0b3JBbGwoY29uc3QgbG9uZyBub2RlSWQsIGNv
bnN0IFN0cmluZyYgc2VsZWN0b3IsIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4qIHJlc3VsdCk7CmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNwcCBiL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3BwCmluZGV4IDlmNGNhMzcuLmJl
OGE2NzkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQu
Y3BwCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3BwCkBAIC0x
MzUsNyArMTM1LDcgQEAgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IEluc3BlY3RvclN0eWxl
OjpidWlsZE9iamVjdEZvclN0eWxlKCkgY29uc3QKIHsKICAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgIGlmICghbV9zdHls
ZUlkLmlzRW1wdHkoKSkKLSAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoInN0eWxlSWQiLCBtX3N0
eWxlSWQuYXNTdHJpbmcoKSk7CisgICAgICAgIHJlc3VsdC0+c2V0VmFsdWUoInN0eWxlSWQiLCBt
X3N0eWxlSWQuYXNJbnNwZWN0b3JWYWx1ZSgpKTsKIAogICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IHByb3BlcnRpZXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgIHBy
b3BlcnRpZXNPYmplY3QtPnNldFN0cmluZygid2lkdGgiLCBtX3N0eWxlLT5nZXRQcm9wZXJ0eVZh
bHVlKCJ3aWR0aCIpKTsKQEAgLTU2MSw2ICs1NjEsMTMgQEAgSW5zcGVjdG9yU3R5bGVTaGVldDo6
fkluc3BlY3RvclN0eWxlU2hlZXQoKQogICAgIGRlbGV0ZSBtX3BhcnNlZFN0eWxlU2hlZXQ7CiB9
CiAKK1N0cmluZyBJbnNwZWN0b3JTdHlsZVNoZWV0OjpmaW5hbFVSTCgpIGNvbnN0Cit7CisgICAg
aWYgKG1fcGFnZVN0eWxlU2hlZXQgJiYgIW1fcGFnZVN0eWxlU2hlZXQtPmZpbmFsVVJMKCkuaXNF
bXB0eSgpKQorICAgICAgICByZXR1cm4gbV9wYWdlU3R5bGVTaGVldC0+ZmluYWxVUkwoKS5zdHJp
bmcoKTsKKyAgICByZXR1cm4gbV9kb2N1bWVudFVSTDsKK30KKwogdm9pZCBJbnNwZWN0b3JTdHls
ZVNoZWV0OjpyZXBhcnNlU3R5bGVTaGVldChjb25zdCBTdHJpbmcmIHRleHQpCiB7CiAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMCwgc2l6ZSA9IG1fcGFnZVN0eWxlU2hlZXQtPmxlbmd0aCgpOyBpIDwg
c2l6ZTsgKytpKQpAQCAtNjMzLDEzICs2NDAsOCBAQCBDU1NTdHlsZVJ1bGUqIEluc3BlY3RvclN0
eWxlU2hlZXQ6OnJ1bGVGb3JJZChjb25zdCBJbnNwZWN0b3JDU1NJZCYgaWQpIGNvbnN0CiAgICAg
ICAgIHJldHVybiAwOwogCiAgICAgQVNTRVJUKCFpZC5pc0VtcHR5KCkpOwotICAgIGJvb2wgb2s7
Ci0gICAgdW5zaWduZWQgaW5kZXggPSBpZC5vcmRpbmFsKCkudG9VSW50KCZvayk7Ci0gICAgaWYg
KCFvaykKLSAgICAgICAgcmV0dXJuIDA7Ci0KICAgICBlbnN1cmVGbGF0UnVsZXMoKTsKLSAgICBy
ZXR1cm4gaW5kZXggPj0gbV9mbGF0UnVsZXMuc2l6ZSgpID8gMCA6IG1fZmxhdFJ1bGVzLmF0KGlu
ZGV4KTsKKyAgICByZXR1cm4gaWQub3JkaW5hbCgpID49IG1fZmxhdFJ1bGVzLnNpemUoKSA/IDAg
OiBtX2ZsYXRSdWxlcy5hdChpZC5vcmRpbmFsKCkpOwogCiB9CiAKQEAgLTY1MSw3ICs2NTMsNyBA
QCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gSW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGRP
YmplY3RGb3JTdHlsZVNoZWV0KCkKIAogICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3Vs
dCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgcmVzdWx0LT5zZXRCb29sZWFuKCJk
aXNhYmxlZCIsIHN0eWxlU2hlZXQtPmRpc2FibGVkKCkpOwotICAgIHJlc3VsdC0+c2V0U3RyaW5n
KCJzb3VyY2VVUkwiLCBzdHlsZVNoZWV0LT5ocmVmKCkpOworICAgIHJlc3VsdC0+c2V0U3RyaW5n
KCJzb3VyY2VVUkwiLCBmaW5hbFVSTCgpKTsKICAgICByZXN1bHQtPnNldFN0cmluZygidGl0bGUi
LCBzdHlsZVNoZWV0LT50aXRsZSgpKTsKICAgICBSZWZQdHI8Q1NTUnVsZUxpc3Q+IGNzc1J1bGVM
aXN0ID0gQ1NTUnVsZUxpc3Q6OmNyZWF0ZShzdHlsZVNoZWV0LCB0cnVlKTsKICAgICBSZWZQdHI8
SW5zcGVjdG9yQXJyYXk+IGNzc1J1bGVzID0gYnVpbGRBcnJheUZvclJ1bGVMaXN0KGNzc1J1bGVM
aXN0LmdldCgpKTsKQEAgLTY3Nyw3ICs2NzksNyBAQCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gSW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGRPYmplY3RGb3JSdWxlKENTU1N0eWxlUnVsZQog
ICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJzZWxlY3RvclRleHQiLCBydWxlLT5zZWxlY3RvclRleHQo
KSk7CiAgICAgLy8gInNvdXJjZVVSTCIgaXMgcHJlc2VudCBvbmx5IGZvciByZWd1bGFyIHJ1bGVz
LCBvdGhlcndpc2UgIm9yaWdpbiIgc2hvdWxkIGJlIHVzZWQgaW4gdGhlIGZyb250ZW5kLgogICAg
IGlmICghbV9vcmlnaW4ubGVuZ3RoKCkpCi0gICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJzb3Vy
Y2VVUkwiLCAhc3R5bGVTaGVldC0+aHJlZigpLmlzRW1wdHkoKSA/IHN0eWxlU2hlZXQtPmhyZWYo
KSA6IG1fZG9jdW1lbnRVUkwpOworICAgICAgICByZXN1bHQtPnNldFN0cmluZygic291cmNlVVJM
IiwgZmluYWxVUkwoKSk7CiAgICAgcmVzdWx0LT5zZXROdW1iZXIoInNvdXJjZUxpbmUiLCBydWxl
LT5zb3VyY2VMaW5lKCkpOwogICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJvcmlnaW4iLCBtX29yaWdp
bik7CiAKQEAgLTY4NSw3ICs2ODcsNyBAQCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gSW5z
cGVjdG9yU3R5bGVTaGVldDo6YnVpbGRPYmplY3RGb3JSdWxlKENTU1N0eWxlUnVsZQogICAgIGlm
IChjYW5CaW5kKCkpIHsKICAgICAgICAgSW5zcGVjdG9yQ1NTSWQgaWQocnVsZUlkKHJ1bGUpKTsK
ICAgICAgICAgaWYgKCFpZC5pc0VtcHR5KCkpCi0gICAgICAgICAgICByZXN1bHQtPnNldFN0cmlu
ZygicnVsZUlkIiwgaWQuYXNTdHJpbmcoKSk7CisgICAgICAgICAgICByZXN1bHQtPnNldFZhbHVl
KCJydWxlSWQiLCBpZC5hc0luc3BlY3RvclZhbHVlKCkpOwogICAgIH0KIAogICAgIFJlZlB0cjxD
U1NSdWxlU291cmNlRGF0YT4gc291cmNlRGF0YTsKQEAgLTc1Niw2ICs3NTgsMTQgQEAgYm9vbCBJ
bnNwZWN0b3JTdHlsZVNoZWV0Ojp0b2dnbGVQcm9wZXJ0eShjb25zdCBJbnNwZWN0b3JDU1NJZCYg
aWQsIHVuc2lnbmVkIHByb3AKICAgICByZXR1cm4gc3VjY2VzczsKIH0KIAorYm9vbCBJbnNwZWN0
b3JTdHlsZVNoZWV0Ojp0ZXh0KFN0cmluZyogcmVzdWx0KSBjb25zdAoreworICAgIGlmICghZW5z
dXJlVGV4dCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgKnJlc3VsdCA9IG1fcGFyc2Vk
U3R5bGVTaGVldC0+dGV4dCgpOworICAgIHJldHVybiB0cnVlOworfQorCiBDU1NTdHlsZURlY2xh
cmF0aW9uKiBJbnNwZWN0b3JTdHlsZVNoZWV0OjpzdHlsZUZvcklkKGNvbnN0IEluc3BlY3RvckNT
U0lkJiBpZCkgY29uc3QKIHsKICAgICBDU1NTdHlsZVJ1bGUqIHJ1bGUgPSBydWxlRm9ySWQoaWQp
OwpAQCAtNzkzLDcgKzgwMyw3IEBAIEluc3BlY3RvckNTU0lkIEluc3BlY3RvclN0eWxlU2hlZXQ6
OnJ1bGVPclN0eWxlSWQoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUpIGNvCiB7CiAgICAgdW5z
aWduZWQgaW5kZXggPSBydWxlSW5kZXhCeVN0eWxlKHN0eWxlKTsKICAgICBpZiAoaW5kZXggIT0g
VUlOVF9NQVgpCi0gICAgICAgIHJldHVybiBJbnNwZWN0b3JDU1NJZDo6Y3JlYXRlRnJvbVBhcnRz
KGlkKCksIFN0cmluZzo6bnVtYmVyKGluZGV4KSk7CisgICAgICAgIHJldHVybiBJbnNwZWN0b3JD
U1NJZChpZCgpLCBpbmRleCk7CiAgICAgcmV0dXJuIEluc3BlY3RvckNTU0lkKCk7CiB9CiAKQEAg
LTgyNSwxNCArODM1LDYgQEAgYm9vbCBJbnNwZWN0b3JTdHlsZVNoZWV0OjplbnN1cmVQYXJzZWRE
YXRhUmVhZHkoKQogICAgIHJldHVybiBlbnN1cmVUZXh0KCkgJiYgZW5zdXJlU291cmNlRGF0YSgp
OwogfQogCi1ib29sIEluc3BlY3RvclN0eWxlU2hlZXQ6OnRleHQoU3RyaW5nKiByZXN1bHQpIGNv
bnN0Ci17Ci0gICAgaWYgKCFlbnN1cmVUZXh0KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAqcmVzdWx0ID0gbV9wYXJzZWRTdHlsZVNoZWV0LT50ZXh0KCk7Ci0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KIGJvb2wgSW5zcGVjdG9yU3R5bGVTaGVldDo6ZW5zdXJlVGV4dCgpIGNvbnN0CiB7CiAg
ICAgaWYgKCFtX3BhcnNlZFN0eWxlU2hlZXQpCkBAIC0xMDY5LDE0ICsxMDcxLDE5IEBAIHZvaWQg
SW5zcGVjdG9yU3R5bGVTaGVldDo6Y29sbGVjdEZsYXRSdWxlcyhQYXNzUmVmUHRyPENTU1J1bGVM
aXN0PiBydWxlTGlzdCwgVmVjCiAgICAgfQogfQogCi0KIEluc3BlY3RvclN0eWxlU2hlZXRGb3JJ
bmxpbmVTdHlsZTo6SW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlKGNvbnN0IFN0cmlu
ZyYgaWQsIEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IFN0cmluZyYgb3JpZ2luKQogICAgIDogSW5z
cGVjdG9yU3R5bGVTaGVldChpZCwgMCwgb3JpZ2luLCAiIikKICAgICAsIG1fZWxlbWVudChlbGVt
ZW50KQogICAgICwgbV9ydWxlU291cmNlRGF0YSgwKQogewogICAgIEFTU0VSVChlbGVtZW50KTsK
LSAgICBtX2luc3BlY3RvclN0eWxlID0gSW5zcGVjdG9yU3R5bGU6OmNyZWF0ZShJbnNwZWN0b3JD
U1NJZDo6Y3JlYXRlRnJvbVBhcnRzKGlkLCAiMCIpLCBpbmxpbmVTdHlsZSgpLCB0aGlzKTsKKyAg
ICBtX2luc3BlY3RvclN0eWxlID0gSW5zcGVjdG9yU3R5bGU6OmNyZWF0ZShJbnNwZWN0b3JDU1NJ
ZChpZCwgMCksIGlubGluZVN0eWxlKCksIHRoaXMpOworfQorCitib29sIEluc3BlY3RvclN0eWxl
U2hlZXRGb3JJbmxpbmVTdHlsZTo6dGV4dChTdHJpbmcqIHJlc3VsdCkgY29uc3QKK3sKKyAgICAq
cmVzdWx0ID0gbV9lbGVtZW50LT5nZXRBdHRyaWJ1dGUoInN0eWxlIik7CisgICAgcmV0dXJuIHRy
dWU7CiB9CiAKIGJvb2wgSW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlOjpzZXRTdHls
ZVRleHQoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUsIGNvbnN0IFN0cmluZyYgdGV4dCkKQEAg
LTEwODgsMTIgKzEwOTUsNiBAQCBib29sIEluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHls
ZTo6c2V0U3R5bGVUZXh0KENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlLAogICAgIHJldHVybiAh
ZWM7CiB9CiAKLWJvb2wgSW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlOjp0ZXh0KFN0
cmluZyogcmVzdWx0KSBjb25zdAotewotICAgICpyZXN1bHQgPSBtX2VsZW1lbnQtPmdldEF0dHJp
YnV0ZSgic3R5bGUiKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogRG9jdW1lbnQqIEluc3BlY3Rv
clN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZTo6b3duZXJEb2N1bWVudCgpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIG1fZWxlbWVudC0+ZG9jdW1lbnQoKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvclN0eWxlU2hlZXQuaCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0
eWxlU2hlZXQuaAppbmRleCBhMDYyMmZlLi5hMzgwYTNhIDEwMDY0NAotLS0gYS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmgKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yU3R5bGVTaGVldC5oCkBAIC01MSwyOCArNTEsNDMgQEAgY2xhc3MgTm9kZTsKIAogY2xh
c3MgSW5zcGVjdG9yQ1NTSWQgewogcHVibGljOgotICAgIHN0YXRpYyBJbnNwZWN0b3JDU1NJZCBj
cmVhdGVGcm9tUGFydHMoY29uc3QgU3RyaW5nJiBzdHlsZVNoZWV0SWQsIGNvbnN0IFN0cmluZyYg
b3JkaW5hbCkgeyByZXR1cm4gSW5zcGVjdG9yQ1NTSWQoc3R5bGVTaGVldElkICsgIjoiICsgb3Jk
aW5hbCk7IH0KLQogICAgIEluc3BlY3RvckNTU0lkKCkgeyB9Ci0gICAgZXhwbGljaXQgSW5zcGVj
dG9yQ1NTSWQoY29uc3QgU3RyaW5nJiBpZCkKKworICAgIGV4cGxpY2l0IEluc3BlY3RvckNTU0lk
KFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQogICAgIHsKLSAgICAgICAgaWQuc3BsaXQo
JzonLCBtX2lkUGFydHMpOwotICAgICAgICBBU1NFUlQobV9pZFBhcnRzLnNpemUoKSA9PSAyKTsK
KyAgICAgICAgaWYgKCF2YWx1ZS0+Z2V0U3RyaW5nKCJzdHlsZVNoZWV0SWQiLCAmbV9zdHlsZVNo
ZWV0SWQpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgUmVmUHRyPElu
c3BlY3RvclZhbHVlPiBvcmRpbmFsVmFsdWUgPSB2YWx1ZS0+Z2V0KCJvcmRpbmFsIik7CisgICAg
ICAgIGlmICghb3JkaW5hbFZhbHVlIHx8ICFvcmRpbmFsVmFsdWUtPmFzTnVtYmVyKCZtX29yZGlu
YWwpKQorICAgICAgICAgICAgbV9zdHlsZVNoZWV0SWQgPSAiIjsKICAgICB9CiAKLSAgICBjb25z
dCBTdHJpbmcmIHN0eWxlU2hlZXRJZCgpIGNvbnN0IHsgQVNTRVJUKG1faWRQYXJ0cy5zaXplKCkg
PT0gMik7IHJldHVybiBtX2lkUGFydHMuYXQoMCk7IH0KLSAgICBjb25zdCBTdHJpbmcmIG9yZGlu
YWwoKSBjb25zdCB7IEFTU0VSVChtX2lkUGFydHMuc2l6ZSgpID09IDIpOyByZXR1cm4gbV9pZFBh
cnRzLmF0KDEpOyB9Ci0gICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9pZFBhcnRz
LmlzRW1wdHkoKTsgfQotICAgIFN0cmluZyBhc1N0cmluZygpIGNvbnN0CisgICAgSW5zcGVjdG9y
Q1NTSWQoY29uc3QgU3RyaW5nJiBzdHlsZVNoZWV0SWQsIHVuc2lnbmVkIG9yZGluYWwpCisgICAg
ICAgIDogbV9zdHlsZVNoZWV0SWQoc3R5bGVTaGVldElkKQorICAgICAgICAsIG1fb3JkaW5hbChv
cmRpbmFsKQorICAgIHsKKyAgICB9CisKKyAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVy
biBtX3N0eWxlU2hlZXRJZC5pc0VtcHR5KCk7IH0KKworICAgIGNvbnN0IFN0cmluZyYgc3R5bGVT
aGVldElkKCkgY29uc3QgeyByZXR1cm4gbV9zdHlsZVNoZWV0SWQ7IH0KKyAgICB1bnNpZ25lZCBv
cmRpbmFsKCkgY29uc3QgeyByZXR1cm4gbV9vcmRpbmFsOyB9CisKKyAgICBQYXNzUmVmUHRyPElu
c3BlY3RvclZhbHVlPiBhc0luc3BlY3RvclZhbHVlKCkgY29uc3QKICAgICB7CiAgICAgICAgIGlm
IChpc0VtcHR5KCkpCi0gICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgICAgICAgICBy
ZXR1cm4gSW5zcGVjdG9yVmFsdWU6Om51bGwoKTsKIAotICAgICAgICByZXR1cm4gbV9pZFBhcnRz
LmF0KDApICsgIjoiICsgbV9pZFBhcnRzLmF0KDEpOworICAgICAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICByZXN1
bHQtPnNldFN0cmluZygic3R5bGVTaGVldElkIiwgbV9zdHlsZVNoZWV0SWQpOworICAgICAgICBy
ZXN1bHQtPnNldE51bWJlcigib3JkaW5hbCIsIG1fb3JkaW5hbCk7CisgICAgICAgIHJldHVybiBy
ZXN1bHQucmVsZWFzZSgpOwogICAgIH0KIAogcHJpdmF0ZToKLSAgICBWZWN0b3I8U3RyaW5nPiBt
X2lkUGFydHM7CisgICAgU3RyaW5nIG1fc3R5bGVTaGVldElkOworICAgIHVuc2lnbmVkIG1fb3Jk
aW5hbDsKIH07CiAKIHN0cnVjdCBJbnNwZWN0b3JTdHlsZVByb3BlcnR5IHsKQEAgLTE1Niw3ICsx
NzEsOCBAQCBwdWJsaWM6CiAgICAgSW5zcGVjdG9yU3R5bGVTaGVldChjb25zdCBTdHJpbmcmIGlk
LCBDU1NTdHlsZVNoZWV0KiBwYWdlU3R5bGVTaGVldCwgY29uc3QgU3RyaW5nJiBvcmlnaW4sIGNv
bnN0IFN0cmluZyYgZG9jdW1lbnRVUkwpOwogICAgIHZpcnR1YWwgfkluc3BlY3RvclN0eWxlU2hl
ZXQoKTsKIAotICAgIGNvbnN0IFN0cmluZyYgaWQoKSBjb25zdCB7IHJldHVybiBtX2lkOyB9Cisg
ICAgU3RyaW5nIGlkKCkgY29uc3QgeyByZXR1cm4gbV9pZDsgfQorICAgIFN0cmluZyBmaW5hbFVS
TCgpIGNvbnN0OwogICAgIENTU1N0eWxlU2hlZXQqIHBhZ2VTdHlsZVNoZWV0KCkgY29uc3QgeyBy
ZXR1cm4gbV9wYWdlU3R5bGVTaGVldDsgfQogICAgIHZvaWQgcmVwYXJzZVN0eWxlU2hlZXQoY29u
c3QgU3RyaW5nJik7CiAgICAgYm9vbCBzZXRUZXh0KGNvbnN0IFN0cmluZyYpOwpAQCAtMTY5LDEy
ICsxODUsMTIgQEAgcHVibGljOgogICAgIGJvb2wgc2V0UHJvcGVydHlUZXh0KGNvbnN0IEluc3Bl
Y3RvckNTU0lkJiwgdW5zaWduZWQgcHJvcGVydHlJbmRleCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBi
b29sIG92ZXJ3cml0ZSk7CiAgICAgYm9vbCB0b2dnbGVQcm9wZXJ0eShjb25zdCBJbnNwZWN0b3JD
U1NJZCYsIHVuc2lnbmVkIHByb3BlcnR5SW5kZXgsIGJvb2wgZGlzYWJsZSk7CiAKKyAgICB2aXJ0
dWFsIGJvb2wgdGV4dChTdHJpbmcqIHJlc3VsdCkgY29uc3Q7CiAgICAgdmlydHVhbCBDU1NTdHls
ZURlY2xhcmF0aW9uKiBzdHlsZUZvcklkKGNvbnN0IEluc3BlY3RvckNTU0lkJikgY29uc3Q7CiAK
IHByb3RlY3RlZDoKICAgICBib29sIGNhbkJpbmQoKSBjb25zdCB7IHJldHVybiBtX29yaWdpbiAh
PSAidXNlckFnZW50IiAmJiBtX29yaWdpbiAhPSAidXNlciI7IH0KICAgICBJbnNwZWN0b3JDU1NJ
ZCBydWxlT3JTdHlsZUlkKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlKSBjb25zdDsKLSAgICB2
aXJ0dWFsIGJvb2wgdGV4dChTdHJpbmcqIHJlc3VsdCkgY29uc3Q7CiAgICAgdmlydHVhbCBEb2N1
bWVudCogb3duZXJEb2N1bWVudCgpIGNvbnN0OwogICAgIHZpcnR1YWwgUmVmUHRyPENTU1J1bGVT
b3VyY2VEYXRhPiBydWxlU291cmNlRGF0YUZvcihDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSkg
Y29uc3Q7CiAgICAgdmlydHVhbCB1bnNpZ25lZCBydWxlSW5kZXhCeVN0eWxlKENTU1N0eWxlRGVj
bGFyYXRpb24qKSBjb25zdDsKQEAgLTIyMSwxMCArMjM3LDEwIEBAIHB1YmxpYzoKICAgICB9CiAK
ICAgICBJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGUoY29uc3QgU3RyaW5nJiBpZCwg
RWxlbWVudCogZWxlbWVudCwgY29uc3QgU3RyaW5nJiBvcmlnaW4pOwotICAgIHZpcnR1YWwgQ1NT
U3R5bGVEZWNsYXJhdGlvbiogc3R5bGVGb3JJZChjb25zdCBJbnNwZWN0b3JDU1NJZCYgaWQpIGNv
bnN0IHsgQVNTRVJUX1VOVVNFRChpZCwgaWQub3JkaW5hbCgpID09ICIwIik7IHJldHVybiBpbmxp
bmVTdHlsZSgpOyB9CisgICAgdmlydHVhbCBib29sIHRleHQoU3RyaW5nKiByZXN1bHQpIGNvbnN0
OworICAgIHZpcnR1YWwgQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGVGb3JJZChjb25zdCBJbnNw
ZWN0b3JDU1NJZCYgaWQpIGNvbnN0IHsgQVNTRVJUX1VOVVNFRChpZCwgaWQub3JkaW5hbCgpID09
IDApOyByZXR1cm4gaW5saW5lU3R5bGUoKTsgfQogCiBwcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCBi
b29sIHRleHQoU3RyaW5nKiByZXN1bHQpIGNvbnN0OwogICAgIHZpcnR1YWwgRG9jdW1lbnQqIG93
bmVyRG9jdW1lbnQoKSBjb25zdDsKICAgICB2aXJ0dWFsIFJlZlB0cjxDU1NSdWxlU291cmNlRGF0
YT4gcnVsZVNvdXJjZURhdGFGb3IoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUpIGNvbnN0IHsg
QVNTRVJUX1VOVVNFRChzdHlsZSwgc3R5bGUgPT0gaW5saW5lU3R5bGUoKSk7IHJldHVybiBtX3J1
bGVTb3VyY2VEYXRhOyB9CiAgICAgdmlydHVhbCB1bnNpZ25lZCBydWxlSW5kZXhCeVN0eWxlKENT
U1N0eWxlRGVjbGFyYXRpb24qKSBjb25zdCB7IHJldHVybiAwOyB9CmRpZmYgLS1naXQgYS9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ1NTU3R5bGVNb2RlbC5qcyBiL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9DU1NTdHlsZU1vZGVsLmpzCmluZGV4IGMzNDI5ZmQuLjI4YzVmZWEgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9DU1NTdHlsZU1vZGVsLmpzCisr
KyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9DU1NTdHlsZU1vZGVsLmpzCkBAIC0xMTcs
NyArMTE3LDkgQEAgV2ViSW5zcGVjdG9yLkNTU1N0eWxlTW9kZWwucHJvdG90eXBlID0gewogICAg
ICAgICBmdW5jdGlvbiBjaGVja0FmZmVjdHNDYWxsYmFjayhub2RlSWQsIHN1Y2Nlc3NDYWxsYmFj
aywgcnVsZVBheWxvYWQsIHNlbGVjdGVkTm9kZUlkcykKICAgICAgICAgewogICAgICAgICAgICAg
dmFyIGRvZXNBZmZlY3RTZWxlY3RlZE5vZGUgPSAoc2VsZWN0ZWROb2RlSWRzLmluZGV4T2Yobm9k
ZUlkKSA+PSAwKTsKLSAgICAgICAgICAgIHN1Y2Nlc3NDYWxsYmFjayhXZWJJbnNwZWN0b3IuQ1NT
UnVsZS5wYXJzZVBheWxvYWQocnVsZVBheWxvYWQpLCBkb2VzQWZmZWN0U2VsZWN0ZWROb2RlKTsK
KyAgICAgICAgICAgIHZhciBydWxlID0gV2ViSW5zcGVjdG9yLkNTU1J1bGUucGFyc2VQYXlsb2Fk
KHJ1bGVQYXlsb2FkKTsKKyAgICAgICAgICAgIHN1Y2Nlc3NDYWxsYmFjayhydWxlLCBkb2VzQWZm
ZWN0U2VsZWN0ZWROb2RlKTsKKyAgICAgICAgICAgIFdlYkluc3BlY3Rvci5jc3NNb2RlbC5fc3R5
bGVTaGVldENoYW5nZWQocnVsZS5pZC5zdHlsZVNoZWV0SWQpOwogICAgICAgICB9CiAKICAgICAg
ICAgZnVuY3Rpb24gY2FsbGJhY2sobm9kZUlkLCBzdWNjZXNzQ2FsbGJhY2ssIGZhaWx1cmVDYWxs
YmFjaywgbmV3U2VsZWN0b3IsIHJ1bGVQYXlsb2FkKQpAQCAtMTM2LDcgKzEzOCw5IEBAIFdlYklu
c3BlY3Rvci5DU1NTdHlsZU1vZGVsLnByb3RvdHlwZSA9IHsKICAgICAgICAgZnVuY3Rpb24gY2hl
Y2tBZmZlY3RzQ2FsbGJhY2sobm9kZUlkLCBzdWNjZXNzQ2FsbGJhY2ssIHJ1bGVQYXlsb2FkLCBz
ZWxlY3RlZE5vZGVJZHMpCiAgICAgICAgIHsKICAgICAgICAgICAgIHZhciBkb2VzQWZmZWN0U2Vs
ZWN0ZWROb2RlID0gKHNlbGVjdGVkTm9kZUlkcy5pbmRleE9mKG5vZGVJZCkgPj0gMCk7Ci0gICAg
ICAgICAgICBzdWNjZXNzQ2FsbGJhY2soV2ViSW5zcGVjdG9yLkNTU1J1bGUucGFyc2VQYXlsb2Fk
KHJ1bGVQYXlsb2FkKSwgZG9lc0FmZmVjdFNlbGVjdGVkTm9kZSk7CisgICAgICAgICAgICB2YXIg
cnVsZSA9IFdlYkluc3BlY3Rvci5DU1NSdWxlLnBhcnNlUGF5bG9hZChydWxlUGF5bG9hZCk7Cisg
ICAgICAgICAgICBzdWNjZXNzQ2FsbGJhY2socnVsZSwgZG9lc0FmZmVjdFNlbGVjdGVkTm9kZSk7
CisgICAgICAgICAgICBXZWJJbnNwZWN0b3IuY3NzTW9kZWwuX3N0eWxlU2hlZXRDaGFuZ2VkKHJ1
bGUuaWQuc3R5bGVTaGVldElkKTsKICAgICAgICAgfQogCiAgICAgICAgIGZ1bmN0aW9uIGNhbGxi
YWNrKHN1Y2Nlc3NDYWxsYmFjaywgZmFpbHVyZUNhbGxiYWNrLCBzZWxlY3RvciwgcnVsZVBheWxv
YWQpCkBAIC0xNDksNiArMTUzLDExIEBAIFdlYkluc3BlY3Rvci5DU1NTdHlsZU1vZGVsLnByb3Rv
dHlwZSA9IHsKICAgICAgICAgfQogCiAgICAgICAgIEluc3BlY3RvckJhY2tlbmQuYWRkUnVsZTIo
bm9kZUlkLCBzZWxlY3RvciwgY2FsbGJhY2suYmluZChudWxsLCBzdWNjZXNzQ2FsbGJhY2ssIGZh
aWx1cmVDYWxsYmFjaywgc2VsZWN0b3IpKTsKKyAgICB9LAorCisgICAgX3N0eWxlU2hlZXRDaGFu
Z2VkOiBmdW5jdGlvbihzdHlsZVNoZWV0SWQpCisgICAgeworICAgICAgICAvLyBGSVhNRTogdXNl
IEluc3BlY3RvckJhY2tlbmQuZ2V0U3R5bGVTaGVldFRleHQyIGhlcmU7CiAgICAgfQogfQogCkBA
IC0zMTIsOCArMzIxLDEwIEBAIFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uLnByb3Rv
dHlwZSA9IHsKIAogICAgICAgICAgICAgaWYgKCFwYXlsb2FkKQogICAgICAgICAgICAgICAgIHVz
ZXJDYWxsYmFjayhudWxsKTsKLSAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVsc2Ugewog
ICAgICAgICAgICAgICAgIHVzZXJDYWxsYmFjayhXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJh
dGlvbi5wYXJzZVBheWxvYWQocGF5bG9hZCkpOworICAgICAgICAgICAgICAgIFdlYkluc3BlY3Rv
ci5jc3NNb2RlbC5fc3R5bGVTaGVldENoYW5nZWQodGhpcy5pZC5zdHlsZVNoZWV0SWQpOworICAg
ICAgICAgICAgfQogICAgICAgICB9CiAKICAgICAgICAgSW5zcGVjdG9yQmFja2VuZC5zZXRQcm9w
ZXJ0eVRleHQyKHRoaXMuaWQsIGluZGV4LCBuYW1lICsgIjogIiArIHZhbHVlICsgIjsiLCBmYWxz
ZSwgY2FsbGJhY2suYmluZChudWxsLCB1c2VyQ2FsbGJhY2spKTsKQEAgLTQyNCw3ICs0MzUsNyBA
QCBXZWJJbnNwZWN0b3IuQ1NTUHJvcGVydHkucHJvdG90eXBlID0gewogICAgIC8vIFJlcGxhY2Vz
ICJwcm9wZXJ0eU5hbWU6IHByb3BlcnR5VmFsdWUgWyFpbXBvcnRhbnRdOyIgaW4gdGhlIHN0eWxl
c2hlZXQgYnkgYW4gYXJiaXRyYXJ5IHByb3BlcnR5VGV4dC4KICAgICBzZXRUZXh0OiBmdW5jdGlv
bihwcm9wZXJ0eVRleHQsIHVzZXJDYWxsYmFjaykKICAgICB7Ci0gICAgICAgIGZ1bmN0aW9uIGNh
bGxiYWNrKHVzZXJDYWxsYmFjaywgc3R5bGVQYXlsb2FkKQorICAgICAgICBmdW5jdGlvbiBjYWxs
YmFjayhzdHlsZVBheWxvYWQpCiAgICAgICAgIHsKICAgICAgICAgICAgIGlmIChzdHlsZVBheWxv
YWQpCiAgICAgICAgICAgICAgICAgdGhpcy50ZXh0ID0gcHJvcGVydHlUZXh0OwpAQCAtNDM2LDYg
KzQ0Nyw3IEBAIFdlYkluc3BlY3Rvci5DU1NQcm9wZXJ0eS5wcm90b3R5cGUgPSB7CiAgICAgICAg
ICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICB2YXIgc3R5bGUgPSBXZWJJbnNwZWN0b3IuQ1NT
U3R5bGVEZWNsYXJhdGlvbi5wYXJzZVBheWxvYWQoc3R5bGVQYXlsb2FkKTsKICAgICAgICAgICAg
ICAgICB1c2VyQ2FsbGJhY2soc3R5bGUpOworICAgICAgICAgICAgICAgIFdlYkluc3BlY3Rvci5j
c3NNb2RlbC5fc3R5bGVTaGVldENoYW5nZWQoc3R5bGUuaWQuc3R5bGVTaGVldElkKTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfQogCkBAIC00NDMsNyArNDU1LDcgQEAgV2ViSW5zcGVjdG9yLkNT
U1Byb3BlcnR5LnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIHRocm93ICJObyBvd25lclN0eWxl
IGZvciBwcm9wZXJ0eSI7CiAKICAgICAgICAgLy8gQW4gaW5kZXggcGFzdCBhbGwgdGhlIHByb3Bl
cnRpZXMgYWRkcyBhIG5ldyBwcm9wZXJ0eSB0byB0aGUgc3R5bGUuCi0gICAgICAgIEluc3BlY3Rv
ckJhY2tlbmQuc2V0UHJvcGVydHlUZXh0Mih0aGlzLm93bmVyU3R5bGUuaWQsIHRoaXMuaW5kZXgs
IHByb3BlcnR5VGV4dCwgdGhpcy5pbmRleCA8IHRoaXMub3duZXJTdHlsZS5wYXN0TGFzdFNvdXJj
ZVByb3BlcnR5SW5kZXgoKSwgY2FsbGJhY2suYmluZCh0aGlzLCB1c2VyQ2FsbGJhY2spKTsKKyAg
ICAgICAgSW5zcGVjdG9yQmFja2VuZC5zZXRQcm9wZXJ0eVRleHQyKHRoaXMub3duZXJTdHlsZS5p
ZCwgdGhpcy5pbmRleCwgcHJvcGVydHlUZXh0LCB0aGlzLmluZGV4IDwgdGhpcy5vd25lclN0eWxl
LnBhc3RMYXN0U291cmNlUHJvcGVydHlJbmRleCgpLCBjYWxsYmFjay5iaW5kKHRoaXMpKTsKICAg
ICB9LAogCiAgICAgc2V0VmFsdWU6IGZ1bmN0aW9uKG5ld1ZhbHVlLCB1c2VyQ2FsbGJhY2spCkBA
IC00NTksNyArNDcxLDcgQEAgV2ViSW5zcGVjdG9yLkNTU1Byb3BlcnR5LnByb3RvdHlwZSA9IHsK
ICAgICAgICAgaWYgKGRpc2FibGVkID09PSB0aGlzLmRpc2FibGVkICYmIHVzZXJDYWxsYmFjaykK
ICAgICAgICAgICAgIHVzZXJDYWxsYmFjayh0aGlzLm93bmVyU3R5bGUpOwogCi0gICAgICAgIGZ1
bmN0aW9uIGNhbGxiYWNrKHVzZXJDYWxsYmFjaywgc3R5bGVQYXlsb2FkKQorICAgICAgICBmdW5j
dGlvbiBjYWxsYmFjayhzdHlsZVBheWxvYWQpCiAgICAgICAgIHsKICAgICAgICAgICAgIGlmICgh
dXNlckNhbGxiYWNrKQogICAgICAgICAgICAgICAgIHJldHVybjsKQEAgLTQ2OCwxMCArNDgwLDEx
IEBAIFdlYkluc3BlY3Rvci5DU1NQcm9wZXJ0eS5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICBl
bHNlIHsKICAgICAgICAgICAgICAgICB2YXIgc3R5bGUgPSBXZWJJbnNwZWN0b3IuQ1NTU3R5bGVE
ZWNsYXJhdGlvbi5wYXJzZVBheWxvYWQoc3R5bGVQYXlsb2FkKTsKICAgICAgICAgICAgICAgICB1
c2VyQ2FsbGJhY2soc3R5bGUpOworICAgICAgICAgICAgICAgIFdlYkluc3BlY3Rvci5jc3NNb2Rl
bC5fc3R5bGVTaGVldENoYW5nZWQodGhpcy5vd25lclN0eWxlLmlkLnN0eWxlU2hlZXRJZCk7CiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBJbnNwZWN0b3JCYWNrZW5kLnRvZ2ds
ZVByb3BlcnR5Mih0aGlzLm93bmVyU3R5bGUuaWQsIHRoaXMuaW5kZXgsIGRpc2FibGVkLCBjYWxs
YmFjay5iaW5kKHRoaXMsIHVzZXJDYWxsYmFjaykpOworICAgICAgICBJbnNwZWN0b3JCYWNrZW5k
LnRvZ2dsZVByb3BlcnR5Mih0aGlzLm93bmVyU3R5bGUuaWQsIHRoaXMuaW5kZXgsIGRpc2FibGVk
LCBjYWxsYmFjay5iaW5kKHRoaXMpKTsKICAgICB9CiB9CiAKQEAgLTQ5NSwxNCArNTA4LDE0IEBA
IFdlYkluc3BlY3Rvci5DU1NTdHlsZVNoZWV0ID0gZnVuY3Rpb24ocGF5bG9hZCkKIAogV2ViSW5z
cGVjdG9yLkNTU1N0eWxlU2hlZXQuY3JlYXRlRm9ySWQgPSBmdW5jdGlvbihzdHlsZVNoZWV0SWQs
IHVzZXJDYWxsYmFjaykKIHsKLSAgICBmdW5jdGlvbiBjYWxsYmFjayh1c2VyQ2FsbGJhY2ssIHN0
eWxlU2hlZXRQYXlsb2FkKQorICAgIGZ1bmN0aW9uIGNhbGxiYWNrKHN0eWxlU2hlZXRQYXlsb2Fk
KQogICAgIHsKICAgICAgICAgaWYgKCFzdHlsZVNoZWV0UGF5bG9hZCkKICAgICAgICAgICAgIHVz
ZXJDYWxsYmFjayhudWxsKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgdXNlckNhbGxiYWNr
KG5ldyBXZWJJbnNwZWN0b3IuQ1NTU3R5bGVTaGVldChzdHlsZVNoZWV0UGF5bG9hZCkpOwogICAg
IH0KLSAgICBJbnNwZWN0b3JCYWNrZW5kLmdldFN0eWxlU2hlZXQyKHN0eWxlU2hlZXRJZCwgY2Fs
bGJhY2suYmluZCh0aGlzLCB1c2VyQ2FsbGJhY2spKTsKKyAgICBJbnNwZWN0b3JCYWNrZW5kLmdl
dFN0eWxlU2hlZXQyKHN0eWxlU2hlZXRJZCwgY2FsbGJhY2suYmluZCh0aGlzKSk7CiB9CiAKIFdl
Ykluc3BlY3Rvci5DU1NTdHlsZVNoZWV0LnByb3RvdHlwZSA9IHsKQEAgLTUxMywxNCArNTI2LDE2
IEBAIFdlYkluc3BlY3Rvci5DU1NTdHlsZVNoZWV0LnByb3RvdHlwZSA9IHsKIAogICAgIHNldFRl
eHQ6IGZ1bmN0aW9uKG5ld1RleHQsIHVzZXJDYWxsYmFjaykKICAgICB7Ci0gICAgICAgIGZ1bmN0
aW9uIGNhbGxiYWNrKHVzZXJDYWxsYmFjaywgc3R5bGVTaGVldFBheWxvYWQpCisgICAgICAgIGZ1
bmN0aW9uIGNhbGxiYWNrKHN0eWxlU2hlZXRQYXlsb2FkKQogICAgICAgICB7CiAgICAgICAgICAg
ICBpZiAoIXN0eWxlU2hlZXRQYXlsb2FkKQogICAgICAgICAgICAgICAgIHVzZXJDYWxsYmFjayhu
dWxsKTsKLSAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAg
ICAgIHVzZXJDYWxsYmFjayhuZXcgV2ViSW5zcGVjdG9yLkNTU1N0eWxlU2hlZXQoc3R5bGVTaGVl
dFBheWxvYWQpKTsKKyAgICAgICAgICAgICAgICBXZWJJbnNwZWN0b3IuY3NzTW9kZWwuX3N0eWxl
U2hlZXRDaGFuZ2VkKHRoaXMuaWQpOworICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAg
ICAgSW5zcGVjdG9yQmFja2VuZC5zZXRTdHlsZVNoZWV0VGV4dDIodGhpcy5pZCwgbmV3VGV4dCwg
Y2FsbGJhY2suYmluZCh0aGlzLCB1c2VyQ2FsbGJhY2spKTsKKyAgICAgICAgSW5zcGVjdG9yQmFj
a2VuZC5zZXRTdHlsZVNoZWV0VGV4dDIodGhpcy5pZCwgbmV3VGV4dCwgY2FsbGJhY2suYmluZCh0
aGlzKSk7CiAgICAgfQogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>74734</attachid>
            <date>2010-11-24 01:49:30 -0800</date>
            <delta_ts>2010-11-24 02:04:07 -0800</delta_ts>
            <desc>[PATCH] Review comments addressed.</desc>
            <filename>style_id</filename>
            <type>text/plain</type>
            <size>28633</size>
            <attacher name="Pavel Feldman">pfeldman</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAyNDMxMjZhLi42N2E0ZjNlIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTAtMTEt
MjMgIFBhdmVsIEZlbGRtYW4gIDxwZmVsZG1hbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogcGFzcyBz
dHlsZSBpZCB0byBmcm9udC1lbmQgYXMgT2JqZWN0LCBub3Qgc3RyaW5nLgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDk5NzEKKworICAgICAgICAqIGlu
c3BlY3Rvci9zdHlsZXMtbmV3LUFQSS5odG1sOgorCiAyMDEwLTExLTIzICBJbHlhIFRpa2hvbm92
c2t5ICA8bG9pc2xvQGNocm9taXVtLm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLgpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3N0eWxlcy1uZXctQVBJLmh0bWwgYi9MYXlvdXRU
ZXN0cy9pbnNwZWN0b3Ivc3R5bGVzLW5ldy1BUEkuaHRtbAppbmRleCA4ZDY0MzJkLi5iZjVkMGIz
IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3Ivc3R5bGVzLW5ldy1BUEkuaHRtbAor
KysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3Ivc3R5bGVzLW5ldy1BUEkuaHRtbApAQCAtMSw3ICsx
LDcgQEAKIDxodG1sPgogPGhlYWQ+CiAKLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0icmVz
b3VyY2VzL3N0eWxlcy1uZXctQVBJLmNzcyIgLS0+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhy
ZWY9InJlc291cmNlcy9zdHlsZXMtbmV3LUFQSS5jc3MiPgogCiA8c2NyaXB0IHNyYz0iLi4vaHR0
cC90ZXN0cy9pbnNwZWN0b3IvaW5zcGVjdG9yLXRlc3QuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBz
cmM9ImVsZW1lbnRzLXRlc3RzLmpzIj48L3NjcmlwdD4KQEAgLTExMiwyNSArMTEyLDE5IEBAIGZ1
bmN0aW9uIGZyb250ZW5kX2NoYW5nZVNlbGVjdG9yKHRlc3RDb250cm9sbGVyLCBzdHlsZVNoZWV0
KQogICAgIHsKICAgICAgICAgdGVzdENvbnRyb2xsZXIucmVzdWx0cy5wdXNoKCIiKTsKICAgICAg
ICAgdGVzdENvbnRyb2xsZXIucmVzdWx0cy5wdXNoKCI9PT0gQWZ0ZXIgc2VsZWN0b3Igc2V0ID09
PSIpOwotICAgICAgICBmcm9udGVuZF9sb2FkQW5kRHVtcFN0eWxlU2hlZXQodGVzdENvbnRyb2xs
ZXIsIGZyb250ZW5kX3BhcmVudFN0eWxlU2hlZXRJZChydWxlLnJ1bGVJZCksIGZyb250ZW5kX3Nl
dFN0eWxlVGV4dC5iaW5kKG51bGwsIHRlc3RDb250cm9sbGVyKSk7CisgICAgICAgIGZyb250ZW5k
X2xvYWRBbmREdW1wU3R5bGVTaGVldCh0ZXN0Q29udHJvbGxlciwgcnVsZS5ydWxlSWQuc3R5bGVT
aGVldElkLCBmcm9udGVuZF9zZXRTdHlsZVRleHQuYmluZChudWxsLCB0ZXN0Q29udHJvbGxlcikp
OwogICAgIH0KIAogICAgIEluc3BlY3RvckJhY2tlbmQuc2V0UnVsZVNlbGVjdG9yMihzdHlsZVNo
ZWV0LnJ1bGVzWzBdLnJ1bGVJZCwgImh0bWwgKiwgYm9keVtmb289XCJiYXJcIl0iLCBkaWRTZXRT
ZWxlY3Rvci5iaW5kKG51bGwsIHRlc3RDb250cm9sbGVyKSk7CiB9CiAKLWZ1bmN0aW9uIGZyb250
ZW5kX3BhcmVudFN0eWxlU2hlZXRJZChydWxlT3JTdHlsZUlkKQotewotICAgIHJldHVybiBydWxl
T3JTdHlsZUlkLnN1YnN0cmluZygwLCBydWxlT3JTdHlsZUlkLmluZGV4T2YoJzonKSk7Ci19Ci0K
LQogZnVuY3Rpb24gZnJvbnRlbmRfc2V0U3R5bGVUZXh0KHRlc3RDb250cm9sbGVyLCBzdHlsZVNo
ZWV0KQogewogICAgIGZ1bmN0aW9uIGRpZFNldFN0eWxlVGV4dCh0ZXN0Q29udHJvbGxlciwgc3R5
bGUpCiAgICAgewogICAgICAgICB0ZXN0Q29udHJvbGxlci5yZXN1bHRzLnB1c2goIiIpOwogICAg
ICAgICB0ZXN0Q29udHJvbGxlci5yZXN1bHRzLnB1c2goIj09PSBBZnRlciBzdHlsZSB0ZXh0IHNl
dCA9PT0iKTsKLSAgICAgICAgZnJvbnRlbmRfbG9hZEFuZER1bXBTdHlsZVNoZWV0KHRlc3RDb250
cm9sbGVyLCBmcm9udGVuZF9wYXJlbnRTdHlsZVNoZWV0SWQoc3R5bGUuc3R5bGVJZCksIGZyb250
ZW5kX2FkZFJ1bGUuYmluZChudWxsLCB0ZXN0Q29udHJvbGxlcikpOworICAgICAgICBmcm9udGVu
ZF9sb2FkQW5kRHVtcFN0eWxlU2hlZXQodGVzdENvbnRyb2xsZXIsIHN0eWxlLnN0eWxlSWQuc3R5
bGVTaGVldElkLCBmcm9udGVuZF9hZGRSdWxlLmJpbmQobnVsbCwgdGVzdENvbnRyb2xsZXIpKTsK
ICAgICB9CiAKICAgICBJbnNwZWN0b3JCYWNrZW5kLnNldFByb3BlcnR5VGV4dDIoc3R5bGVTaGVl
dC5ydWxlc1swXS5zdHlsZS5zdHlsZUlkLCAwLCAiIiwgdHJ1ZSk7CmRpZmYgLS1naXQgYS9XZWJD
b3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDkxMzQxMTkuLjQ4Y2I2YTAg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsNDcgQEAKKzIwMTAtMTEtMjQgIFBhdmVsIEZlbGRtYW4gIDxwZmVsZG1hbkBjaHJv
bWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgV2ViIEluc3BlY3RvcjogcGFzcyBzdHlsZSBpZCB0byBmcm9udC1lbmQgYXMgT2JqZWN0LCBu
b3Qgc3RyaW5nLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NDk5NzEKKworICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3IuaWRsOgorICAgICAgICAq
IGluc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JDU1NBZ2VudDo6Z2V0U3R5bGVzRm9yTm9kZTIpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yQ1NTQWdlbnQ6OmdldFN0eWxlU2hlZXRUZXh0Mik6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JDU1NBZ2VudDo6c2V0UHJvcGVydHlUZXh0Mik6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JDU1NBZ2VudDo6dG9nZ2xlUHJvcGVydHkyKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvckNTU0FnZW50OjpzZXRSdWxlU2VsZWN0b3IyKToKKyAgICAgICAgKiBpbnNwZWN0b3Iv
SW5zcGVjdG9yQ1NTQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVT
aGVldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHlsZTo6YnVpbGRPYmplY3RG
b3JTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHlsZVNoZWV0OjpmaW5hbFVS
TCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHlsZVNoZWV0OjpydWxlRm9ySWQpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGRPYmplY3RGb3JTdHls
ZVNoZWV0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0eWxlU2hlZXQ6OmJ1aWxkT2Jq
ZWN0Rm9yUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHlsZVNoZWV0Ojp0ZXh0
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0eWxlU2hlZXQ6OnJ1bGVPclN0eWxlSWQp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlOjpJ
bnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlOjp0ZXh0KToKKyAgICAgICAgKiBpbnNwZWN0
b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5oOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NT
SWQ6Okluc3BlY3RvckNTU0lkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0lkOjpp
c0VtcHR5KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0lkOjpzdHlsZVNoZWV0SWQp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTSWQ6Om9yZGluYWwpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yQ1NTSWQ6OmFzSW5zcGVjdG9yVmFsdWUpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yU3R5bGVTaGVldDo6aWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlOjpzdHlsZUZvcklkKToKKyAgICAgICAgKiBpbnNw
ZWN0b3IvZnJvbnQtZW5kL0NTU1N0eWxlTW9kZWwuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
Q1NTU3R5bGVNb2RlbC5wcm90b3R5cGUuc2V0UnVsZVNlbGVjdG9yKToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5DU1NTdHlsZU1vZGVsLnByb3RvdHlwZS5hZGRSdWxlKToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5DU1NTdHlsZU1vZGVsLnByb3RvdHlwZS5fc3R5bGVTaGVldENoYW5nZWQpOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb24ucHJvdG90eXBlLmluc2VydFBy
b3BlcnR5QXQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1Byb3BlcnR5LnByb3RvdHlwZS5z
ZXRUZXh0KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NQcm9wZXJ0eS5wcm90b3R5cGUuc2V0
RGlzYWJsZWQuY2FsbGJhY2spOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1Byb3BlcnR5LnBy
b3RvdHlwZS5zZXREaXNhYmxlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVTaGVl
dC5jcmVhdGVGb3JJZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVTaGVldC5wcm90
b3R5cGUuc2V0VGV4dCk6CisKIDIwMTAtMTEtMjQgIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmll
dy5ib3RAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHI3MjY0
Ny4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvci5pZGwgYi9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3IuaWRsCmluZGV4IDI5YTNiYTAuLmY3YWNmZTkgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvci5pZGwKKysrIGIvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yLmlkbApAQCAtMjEzLDEwICsyMTMsMTEgQEAgbW9kdWxlIGNvcmUgewogICAg
ICAgICBbaGFuZGxlcj1DU1NdIHZvaWQgZ2V0SW5saW5lU3R5bGVGb3JOb2RlMihpbiBsb25nIG5v
ZGVJZCwgb3V0IFZhbHVlIHN0eWxlKTsKICAgICAgICAgW2hhbmRsZXI9Q1NTXSB2b2lkIGdldEFs
bFN0eWxlczIob3V0IEFycmF5IHN0eWxlU2hlZXRJZHMpOwogICAgICAgICBbaGFuZGxlcj1DU1Nd
IHZvaWQgZ2V0U3R5bGVTaGVldDIoaW4gU3RyaW5nIHN0eWxlU2hlZXRJZCwgb3V0IFZhbHVlIHN0
eWxlU2hlZXQpOworICAgICAgICBbaGFuZGxlcj1DU1NdIHZvaWQgZ2V0U3R5bGVTaGVldFRleHQy
KGluIFN0cmluZyBzdHlsZVNoZWV0SWQsIG91dCBTdHJpbmcgdXJsLCBvdXQgU3RyaW5nIHRleHQp
OwogICAgICAgICBbaGFuZGxlcj1DU1NdIHZvaWQgc2V0U3R5bGVTaGVldFRleHQyKGluIFN0cmlu
ZyBzdHlsZVNoZWV0SWQsIGluIFN0cmluZyB0ZXh0KTsKLSAgICAgICAgW2hhbmRsZXI9Q1NTXSB2
b2lkIHNldFByb3BlcnR5VGV4dDIoaW4gU3RyaW5nIHN0eWxlSWQsIGluIGxvbmcgcHJvcGVydHlJ
bmRleCwgaW4gU3RyaW5nIHRleHQsIGluIGJvb2xlYW4gb3ZlcndyaXRlLCBvdXQgVmFsdWUgc3R5
bGUpOwotICAgICAgICBbaGFuZGxlcj1DU1NdIHZvaWQgdG9nZ2xlUHJvcGVydHkyKGluIFN0cmlu
ZyBzdHlsZUlkLCBpbiBsb25nIHByb3BlcnR5SW5kZXgsIGluIGJvb2xlYW4gZGlzYWJsZSwgb3V0
IFZhbHVlIHN0eWxlKTsKLSAgICAgICAgW2hhbmRsZXI9Q1NTXSB2b2lkIHNldFJ1bGVTZWxlY3Rv
cjIoaW4gU3RyaW5nIHJ1bGVJZCwgaW4gU3RyaW5nIHNlbGVjdG9yLCBvdXQgVmFsdWUgcnVsZSk7
CisgICAgICAgIFtoYW5kbGVyPUNTU10gdm9pZCBzZXRQcm9wZXJ0eVRleHQyKGluIE9iamVjdCBz
dHlsZUlkLCBpbiBsb25nIHByb3BlcnR5SW5kZXgsIGluIFN0cmluZyB0ZXh0LCBpbiBib29sZWFu
IG92ZXJ3cml0ZSwgb3V0IFZhbHVlIHN0eWxlKTsKKyAgICAgICAgW2hhbmRsZXI9Q1NTXSB2b2lk
IHRvZ2dsZVByb3BlcnR5MihpbiBPYmplY3Qgc3R5bGVJZCwgaW4gbG9uZyBwcm9wZXJ0eUluZGV4
LCBpbiBib29sZWFuIGRpc2FibGUsIG91dCBWYWx1ZSBzdHlsZSk7CisgICAgICAgIFtoYW5kbGVy
PUNTU10gdm9pZCBzZXRSdWxlU2VsZWN0b3IyKGluIE9iamVjdCBydWxlSWQsIGluIFN0cmluZyBz
ZWxlY3Rvciwgb3V0IFZhbHVlIHJ1bGUpOwogICAgICAgICBbaGFuZGxlcj1DU1NdIHZvaWQgYWRk
UnVsZTIoaW4gbG9uZyBjb250ZXh0Tm9kZUlkLCBpbiBTdHJpbmcgc2VsZWN0b3IsIG91dCBWYWx1
ZSBydWxlKTsKICAgICAgICAgW2hhbmRsZXI9Q1NTXSB2b2lkIGdldFN1cHBvcnRlZENTU1Byb3Bl
cnRpZXMob3V0IEFycmF5IGNzc1Byb3BlcnRpZXMpOwogICAgICAgICBbaGFuZGxlcj1DU1NdIHZv
aWQgcXVlcnlTZWxlY3RvckFsbChpbiBsb25nIGRvY3VtZW50SWQsIGluIFN0cmluZyBzZWxlY3Rv
ciwgb3V0IEFycmF5IHJlc3VsdCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JDU1NBZ2VudC5jcHAgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5j
cHAKaW5kZXggYWJjOTgzZS4uZmQxZGViNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yQ1NTQWdlbnQuY3BwCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNT
U0FnZW50LmNwcApAQCAtMjE0LDcgKzIxNCw3IEBAIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6Omdl
dFN0eWxlc0Zvck5vZGUyKGxvbmcgbm9kZUlkLCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiByCiAg
ICAgICAgIGlmIChwYXJlbnRFbGVtZW50LT5zdHlsZSgpICYmIHBhcmVudEVsZW1lbnQtPnN0eWxl
KCktPmxlbmd0aCgpKSB7CiAgICAgICAgICAgICBJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5l
U3R5bGUqIHN0eWxlU2hlZXQgPSBhc0luc3BlY3RvclN0eWxlU2hlZXQocGFyZW50RWxlbWVudCk7
CiAgICAgICAgICAgICBpZiAoc3R5bGVTaGVldCkKLSAgICAgICAgICAgICAgICBwYXJlbnRTdHls
ZS0+c2V0T2JqZWN0KCJpbmxpbmVTdHlsZSIsIHN0eWxlU2hlZXQtPmJ1aWxkT2JqZWN0Rm9yU3R5
bGUoc3R5bGVTaGVldC0+c3R5bGVGb3JJZChJbnNwZWN0b3JDU1NJZDo6Y3JlYXRlRnJvbVBhcnRz
KHN0eWxlU2hlZXQtPmlkKCksICIwIikpKSk7CisgICAgICAgICAgICAgICAgcGFyZW50U3R5bGUt
PnNldE9iamVjdCgiaW5saW5lU3R5bGUiLCBzdHlsZVNoZWV0LT5idWlsZE9iamVjdEZvclN0eWxl
KHN0eWxlU2hlZXQtPnN0eWxlRm9ySWQoSW5zcGVjdG9yQ1NTSWQoc3R5bGVTaGVldC0+aWQoKSwg
MCkpKSk7CiAgICAgICAgIH0KIAogICAgICAgICBDU1NTdHlsZVNlbGVjdG9yKiBwYXJlbnRTZWxl
Y3RvciA9IHBhcmVudEVsZW1lbnQtPm93bmVyRG9jdW1lbnQoKS0+c3R5bGVTZWxlY3RvcigpOwpA
QCAtMjc2LDYgKzI3NiwxNSBAQCB2b2lkIEluc3BlY3RvckNTU0FnZW50OjpnZXRTdHlsZVNoZWV0
Mihjb25zdCBTdHJpbmcmIHN0eWxlU2hlZXRJZCwgUmVmUHRyPEluc3BlYwogICAgICpzdHlsZVNo
ZWV0T2JqZWN0ID0gaW5zcGVjdG9yU3R5bGVTaGVldC0+YnVpbGRPYmplY3RGb3JTdHlsZVNoZWV0
KCk7CiB9CiAKK3ZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmdldFN0eWxlU2hlZXRUZXh0Mihjb25z
dCBTdHJpbmcmIHN0eWxlU2hlZXRJZCwgU3RyaW5nKiB1cmwsIFN0cmluZyogcmVzdWx0KQorewor
ICAgIEluc3BlY3RvclN0eWxlU2hlZXQqIGluc3BlY3RvclN0eWxlU2hlZXQgPSBzdHlsZVNoZWV0
Rm9ySWQoc3R5bGVTaGVldElkKTsKKyAgICBpZiAoIWluc3BlY3RvclN0eWxlU2hlZXQpCisgICAg
ICAgIHJldHVybjsKKyAgICAqdXJsID0gaW5zcGVjdG9yU3R5bGVTaGVldC0+ZmluYWxVUkwoKTsK
KyAgICBpbnNwZWN0b3JTdHlsZVNoZWV0LT50ZXh0KHJlc3VsdCk7Cit9CisKIHZvaWQgSW5zcGVj
dG9yQ1NTQWdlbnQ6OnNldFN0eWxlU2hlZXRUZXh0Mihjb25zdCBTdHJpbmcmIHN0eWxlU2hlZXRJ
ZCwgY29uc3QgU3RyaW5nJiB0ZXh0KQogewogICAgIEluc3BlY3RvclN0eWxlU2hlZXQqIGluc3Bl
Y3RvclN0eWxlU2hlZXQgPSBzdHlsZVNoZWV0Rm9ySWQoc3R5bGVTaGVldElkKTsKQEAgLTI4Nyw3
ICsyOTYsNyBAQCB2b2lkIEluc3BlY3RvckNTU0FnZW50OjpzZXRTdHlsZVNoZWV0VGV4dDIoY29u
c3QgU3RyaW5nJiBzdHlsZVNoZWV0SWQsIGNvbnN0IFN0cgogICAgICAgICBpbnNwZWN0b3JTdHls
ZVNoZWV0LT5yZXBhcnNlU3R5bGVTaGVldCh0ZXh0KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDU1NB
Z2VudDo6c2V0UHJvcGVydHlUZXh0Mihjb25zdCBTdHJpbmcmIGZ1bGxTdHlsZUlkLCBsb25nIHBy
b3BlcnR5SW5kZXgsIGNvbnN0IFN0cmluZyYgdGV4dCwgYm9vbCBvdmVyd3JpdGUsIFJlZlB0cjxJ
bnNwZWN0b3JWYWx1ZT4qIHJlc3VsdCkKK3ZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OnNldFByb3Bl
cnR5VGV4dDIoY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mIGZ1bGxTdHlsZUlkLCBsb25n
IHByb3BlcnR5SW5kZXgsIGNvbnN0IFN0cmluZyYgdGV4dCwgYm9vbCBvdmVyd3JpdGUsIFJlZlB0
cjxJbnNwZWN0b3JWYWx1ZT4qIHJlc3VsdCkKIHsKICAgICBJbnNwZWN0b3JDU1NJZCBjb21wb3Vu
ZElkKGZ1bGxTdHlsZUlkKTsKICAgICBBU1NFUlQoIWNvbXBvdW5kSWQuaXNFbXB0eSgpKTsKQEAg
LTMwMSw3ICszMTAsNyBAQCB2b2lkIEluc3BlY3RvckNTU0FnZW50OjpzZXRQcm9wZXJ0eVRleHQy
KGNvbnN0IFN0cmluZyYgZnVsbFN0eWxlSWQsIGxvbmcgcHJvcGVydAogICAgICAgICAqcmVzdWx0
ID0gaW5zcGVjdG9yU3R5bGVTaGVldC0+YnVpbGRPYmplY3RGb3JTdHlsZShpbnNwZWN0b3JTdHls
ZVNoZWV0LT5zdHlsZUZvcklkKGNvbXBvdW5kSWQpKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDU1NB
Z2VudDo6dG9nZ2xlUHJvcGVydHkyKGNvbnN0IFN0cmluZyYgZnVsbFN0eWxlSWQsIGxvbmcgcHJv
cGVydHlJbmRleCwgYm9vbCBkaXNhYmxlLCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiByZXN1bHQp
Cit2b2lkIEluc3BlY3RvckNTU0FnZW50Ojp0b2dnbGVQcm9wZXJ0eTIoY29uc3QgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4mIGZ1bGxTdHlsZUlkLCBsb25nIHByb3BlcnR5SW5kZXgsIGJvb2wgZGlz
YWJsZSwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiogcmVzdWx0KQogewogICAgIEluc3BlY3RvckNT
U0lkIGNvbXBvdW5kSWQoZnVsbFN0eWxlSWQpOwogICAgIEFTU0VSVCghY29tcG91bmRJZC5pc0Vt
cHR5KCkpOwpAQCAtMzE1LDcgKzMyNCw3IEBAIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OnRvZ2ds
ZVByb3BlcnR5Mihjb25zdCBTdHJpbmcmIGZ1bGxTdHlsZUlkLCBsb25nIHByb3BlcnR5CiAgICAg
ICAgICpyZXN1bHQgPSBpbnNwZWN0b3JTdHlsZVNoZWV0LT5idWlsZE9iamVjdEZvclN0eWxlKGlu
c3BlY3RvclN0eWxlU2hlZXQtPnN0eWxlRm9ySWQoY29tcG91bmRJZCkpOwogfQogCi12b2lkIElu
c3BlY3RvckNTU0FnZW50OjpzZXRSdWxlU2VsZWN0b3IyKGNvbnN0IFN0cmluZyYgZnVsbFJ1bGVJ
ZCwgY29uc3QgU3RyaW5nJiBzZWxlY3RvciwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiogcmVzdWx0
KQordm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6c2V0UnVsZVNlbGVjdG9yMihjb25zdCBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiYgZnVsbFJ1bGVJZCwgY29uc3QgU3RyaW5nJiBzZWxlY3RvciwgUmVm
UHRyPEluc3BlY3RvclZhbHVlPiogcmVzdWx0KQogewogICAgIEluc3BlY3RvckNTU0lkIGNvbXBv
dW5kSWQoZnVsbFJ1bGVJZCk7CiAgICAgQVNTRVJUKCFjb21wb3VuZElkLmlzRW1wdHkoKSk7CmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5oIGIvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuaAppbmRleCA3MWNhNTgwLi42ZThmMjQ0IDEw
MDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5oCisrKyBiL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmgKQEAgLTY1LDEwICs2NSwxMSBAQCBw
dWJsaWM6CiAgICAgdm9pZCBnZXRDb21wdXRlZFN0eWxlRm9yTm9kZTIobG9uZyBub2RlSWQsIFJl
ZlB0cjxJbnNwZWN0b3JWYWx1ZT4qIHN0eWxlKTsKICAgICB2b2lkIGdldEFsbFN0eWxlczIoUmVm
UHRyPEluc3BlY3RvckFycmF5Piogc3R5bGVzKTsKICAgICB2b2lkIGdldFN0eWxlU2hlZXQyKGNv
bnN0IFN0cmluZyYgc3R5bGVTaGVldElkLCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiByZXN1bHQp
OworICAgIHZvaWQgZ2V0U3R5bGVTaGVldFRleHQyKGNvbnN0IFN0cmluZyYgc3R5bGVTaGVldElk
LCBTdHJpbmcqIHVybCwgU3RyaW5nKiByZXN1bHQpOwogICAgIHZvaWQgc2V0U3R5bGVTaGVldFRl
eHQyKGNvbnN0IFN0cmluZyYgc3R5bGVTaGVldElkLCBjb25zdCBTdHJpbmcmIHRleHQpOwotICAg
IHZvaWQgc2V0UHJvcGVydHlUZXh0Mihjb25zdCBTdHJpbmcmIHN0eWxlSWQsIGxvbmcgcHJvcGVy
dHlJbmRleCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBib29sIG92ZXJ3cml0ZSwgUmVmUHRyPEluc3Bl
Y3RvclZhbHVlPiogcmVzdWx0KTsKLSAgICB2b2lkIHRvZ2dsZVByb3BlcnR5Mihjb25zdCBTdHJp
bmcmIHN0eWxlSWQsIGxvbmcgcHJvcGVydHlJbmRleCwgYm9vbCBkaXNhYmxlLCBSZWZQdHI8SW5z
cGVjdG9yVmFsdWU+KiByZXN1bHQpOwotICAgIHZvaWQgc2V0UnVsZVNlbGVjdG9yMihjb25zdCBT
dHJpbmcmIHJ1bGVJZCwgY29uc3QgU3RyaW5nJiBzZWxlY3RvciwgUmVmUHRyPEluc3BlY3RvclZh
bHVlPiogcmVzdWx0KTsKKyAgICB2b2lkIHNldFByb3BlcnR5VGV4dDIoY29uc3QgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4mIHN0eWxlSWQsIGxvbmcgcHJvcGVydHlJbmRleCwgY29uc3QgU3RyaW5n
JiB0ZXh0LCBib29sIG92ZXJ3cml0ZSwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiogcmVzdWx0KTsK
KyAgICB2b2lkIHRvZ2dsZVByb3BlcnR5Mihjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYg
c3R5bGVJZCwgbG9uZyBwcm9wZXJ0eUluZGV4LCBib29sIGRpc2FibGUsIFJlZlB0cjxJbnNwZWN0
b3JWYWx1ZT4qIHJlc3VsdCk7CisgICAgdm9pZCBzZXRSdWxlU2VsZWN0b3IyKGNvbnN0IFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+JiBydWxlSWQsIGNvbnN0IFN0cmluZyYgc2VsZWN0b3IsIFJlZlB0
cjxJbnNwZWN0b3JWYWx1ZT4qIHJlc3VsdCk7CiAgICAgdm9pZCBhZGRSdWxlMihjb25zdCBsb25n
IGNvbnRleHROb2RlSWQsIGNvbnN0IFN0cmluZyYgc2VsZWN0b3IsIFJlZlB0cjxJbnNwZWN0b3JW
YWx1ZT4qIHJlc3VsdCk7CiAgICAgdm9pZCBnZXRTdXBwb3J0ZWRDU1NQcm9wZXJ0aWVzKFJlZlB0
cjxJbnNwZWN0b3JBcnJheT4qIHJlc3VsdCk7CiAgICAgdm9pZCBxdWVyeVNlbGVjdG9yQWxsKGNv
bnN0IGxvbmcgbm9kZUlkLCBjb25zdCBTdHJpbmcmIHNlbGVjdG9yLCBSZWZQdHI8SW5zcGVjdG9y
QXJyYXk+KiByZXN1bHQpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
U3R5bGVTaGVldC5jcHAgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNw
cAppbmRleCA3OTM2Yjc2Li4wYWQzODIxIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JTdHlsZVNoZWV0LmNwcAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JT
dHlsZVNoZWV0LmNwcApAQCAtMTM1LDcgKzEzNSw3IEBAIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBJbnNwZWN0b3JTdHlsZTo6YnVpbGRPYmplY3RGb3JTdHlsZSgpIGNvbnN0CiB7CiAgICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUo
KTsKICAgICBpZiAoIW1fc3R5bGVJZC5pc0VtcHR5KCkpCi0gICAgICAgIHJlc3VsdC0+c2V0U3Ry
aW5nKCJzdHlsZUlkIiwgbV9zdHlsZUlkLmFzU3RyaW5nKCkpOworICAgICAgICByZXN1bHQtPnNl
dFZhbHVlKCJzdHlsZUlkIiwgbV9zdHlsZUlkLmFzSW5zcGVjdG9yVmFsdWUoKSk7CiAKICAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwcm9wZXJ0aWVzT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0
OjpjcmVhdGUoKTsKICAgICBwcm9wZXJ0aWVzT2JqZWN0LT5zZXRTdHJpbmcoIndpZHRoIiwgbV9z
dHlsZS0+Z2V0UHJvcGVydHlWYWx1ZSgid2lkdGgiKSk7CkBAIC01NzYsNiArNTc2LDEzIEBAIElu
c3BlY3RvclN0eWxlU2hlZXQ6On5JbnNwZWN0b3JTdHlsZVNoZWV0KCkKICAgICBkZWxldGUgbV9w
YXJzZWRTdHlsZVNoZWV0OwogfQogCitTdHJpbmcgSW5zcGVjdG9yU3R5bGVTaGVldDo6ZmluYWxV
UkwoKSBjb25zdAoreworICAgIGlmIChtX3BhZ2VTdHlsZVNoZWV0ICYmICFtX3BhZ2VTdHlsZVNo
ZWV0LT5maW5hbFVSTCgpLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIG1fcGFnZVN0eWxlU2hl
ZXQtPmZpbmFsVVJMKCkuc3RyaW5nKCk7CisgICAgcmV0dXJuIG1fZG9jdW1lbnRVUkw7Cit9CisK
IHZvaWQgSW5zcGVjdG9yU3R5bGVTaGVldDo6cmVwYXJzZVN0eWxlU2hlZXQoY29uc3QgU3RyaW5n
JiB0ZXh0KQogewogICAgIGZvciAodW5zaWduZWQgaSA9IDAsIHNpemUgPSBtX3BhZ2VTdHlsZVNo
ZWV0LT5sZW5ndGgoKTsgaSA8IHNpemU7ICsraSkKQEAgLTY0OCwxMyArNjU1LDggQEAgQ1NTU3R5
bGVSdWxlKiBJbnNwZWN0b3JTdHlsZVNoZWV0OjpydWxlRm9ySWQoY29uc3QgSW5zcGVjdG9yQ1NT
SWQmIGlkKSBjb25zdAogICAgICAgICByZXR1cm4gMDsKIAogICAgIEFTU0VSVCghaWQuaXNFbXB0
eSgpKTsKLSAgICBib29sIG9rOwotICAgIHVuc2lnbmVkIGluZGV4ID0gaWQub3JkaW5hbCgpLnRv
VUludCgmb2spOwotICAgIGlmICghb2spCi0gICAgICAgIHJldHVybiAwOwotCiAgICAgZW5zdXJl
RmxhdFJ1bGVzKCk7Ci0gICAgcmV0dXJuIGluZGV4ID49IG1fZmxhdFJ1bGVzLnNpemUoKSA/IDAg
OiBtX2ZsYXRSdWxlcy5hdChpbmRleCk7CisgICAgcmV0dXJuIGlkLm9yZGluYWwoKSA+PSBtX2Zs
YXRSdWxlcy5zaXplKCkgPyAwIDogbV9mbGF0UnVsZXMuYXQoaWQub3JkaW5hbCgpKTsKIAogfQog
CkBAIC02NjYsNyArNjY4LDcgQEAgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IEluc3BlY3Rv
clN0eWxlU2hlZXQ6OmJ1aWxkT2JqZWN0Rm9yU3R5bGVTaGVldCgpCiAKICAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgIHJl
c3VsdC0+c2V0Qm9vbGVhbigiZGlzYWJsZWQiLCBzdHlsZVNoZWV0LT5kaXNhYmxlZCgpKTsKLSAg
ICByZXN1bHQtPnNldFN0cmluZygic291cmNlVVJMIiwgc3R5bGVTaGVldC0+aHJlZigpKTsKKyAg
ICByZXN1bHQtPnNldFN0cmluZygic291cmNlVVJMIiwgZmluYWxVUkwoKSk7CiAgICAgcmVzdWx0
LT5zZXRTdHJpbmcoInRpdGxlIiwgc3R5bGVTaGVldC0+dGl0bGUoKSk7CiAgICAgUmVmUHRyPENT
U1J1bGVMaXN0PiBjc3NSdWxlTGlzdCA9IENTU1J1bGVMaXN0OjpjcmVhdGUoc3R5bGVTaGVldCwg
dHJ1ZSk7CiAgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBjc3NSdWxlcyA9IGJ1aWxkQXJyYXlG
b3JSdWxlTGlzdChjc3NSdWxlTGlzdC5nZXQoKSk7CkBAIC02OTIsNyArNjk0LDcgQEAgUGFzc1Jl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IEluc3BlY3RvclN0eWxlU2hlZXQ6OmJ1aWxkT2JqZWN0Rm9y
UnVsZShDU1NTdHlsZVJ1bGUKICAgICByZXN1bHQtPnNldFN0cmluZygic2VsZWN0b3JUZXh0Iiwg
cnVsZS0+c2VsZWN0b3JUZXh0KCkpOwogICAgIC8vICJzb3VyY2VVUkwiIGlzIHByZXNlbnQgb25s
eSBmb3IgcmVndWxhciBydWxlcywgb3RoZXJ3aXNlICJvcmlnaW4iIHNob3VsZCBiZSB1c2VkIGlu
IHRoZSBmcm9udGVuZC4KICAgICBpZiAoIW1fb3JpZ2luLmxlbmd0aCgpKQotICAgICAgICByZXN1
bHQtPnNldFN0cmluZygic291cmNlVVJMIiwgIXN0eWxlU2hlZXQtPmhyZWYoKS5pc0VtcHR5KCkg
PyBzdHlsZVNoZWV0LT5ocmVmKCkgOiBtX2RvY3VtZW50VVJMKTsKKyAgICAgICAgcmVzdWx0LT5z
ZXRTdHJpbmcoInNvdXJjZVVSTCIsIGZpbmFsVVJMKCkpOwogICAgIHJlc3VsdC0+c2V0TnVtYmVy
KCJzb3VyY2VMaW5lIiwgcnVsZS0+c291cmNlTGluZSgpKTsKICAgICByZXN1bHQtPnNldFN0cmlu
Zygib3JpZ2luIiwgbV9vcmlnaW4pOwogCkBAIC03MDAsNyArNzAyLDcgQEAgUGFzc1JlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IEluc3BlY3RvclN0eWxlU2hlZXQ6OmJ1aWxkT2JqZWN0Rm9yUnVsZShD
U1NTdHlsZVJ1bGUKICAgICBpZiAoY2FuQmluZCgpKSB7CiAgICAgICAgIEluc3BlY3RvckNTU0lk
IGlkKHJ1bGVJZChydWxlKSk7CiAgICAgICAgIGlmICghaWQuaXNFbXB0eSgpKQotICAgICAgICAg
ICAgcmVzdWx0LT5zZXRTdHJpbmcoInJ1bGVJZCIsIGlkLmFzU3RyaW5nKCkpOworICAgICAgICAg
ICAgcmVzdWx0LT5zZXRWYWx1ZSgicnVsZUlkIiwgaWQuYXNJbnNwZWN0b3JWYWx1ZSgpKTsKICAg
ICB9CiAKICAgICBSZWZQdHI8Q1NTUnVsZVNvdXJjZURhdGE+IHNvdXJjZURhdGE7CkBAIC03NzEs
NiArNzczLDE0IEBAIGJvb2wgSW5zcGVjdG9yU3R5bGVTaGVldDo6dG9nZ2xlUHJvcGVydHkoY29u
c3QgSW5zcGVjdG9yQ1NTSWQmIGlkLCB1bnNpZ25lZCBwcm9wCiAgICAgcmV0dXJuIHN1Y2Nlc3M7
CiB9CiAKK2Jvb2wgSW5zcGVjdG9yU3R5bGVTaGVldDo6dGV4dChTdHJpbmcqIHJlc3VsdCkgY29u
c3QKK3sKKyAgICBpZiAoIWVuc3VyZVRleHQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICpyZXN1bHQgPSBtX3BhcnNlZFN0eWxlU2hlZXQtPnRleHQoKTsKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKwogQ1NTU3R5bGVEZWNsYXJhdGlvbiogSW5zcGVjdG9yU3R5bGVTaGVldDo6c3R5bGVGb3JJ
ZChjb25zdCBJbnNwZWN0b3JDU1NJZCYgaWQpIGNvbnN0CiB7CiAgICAgQ1NTU3R5bGVSdWxlKiBy
dWxlID0gcnVsZUZvcklkKGlkKTsKQEAgLTgwOCw3ICs4MTgsNyBAQCBJbnNwZWN0b3JDU1NJZCBJ
bnNwZWN0b3JTdHlsZVNoZWV0OjpydWxlT3JTdHlsZUlkKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0
eWxlKSBjbwogewogICAgIHVuc2lnbmVkIGluZGV4ID0gcnVsZUluZGV4QnlTdHlsZShzdHlsZSk7
CiAgICAgaWYgKGluZGV4ICE9IFVJTlRfTUFYKQotICAgICAgICByZXR1cm4gSW5zcGVjdG9yQ1NT
SWQ6OmNyZWF0ZUZyb21QYXJ0cyhpZCgpLCBTdHJpbmc6Om51bWJlcihpbmRleCkpOworICAgICAg
ICByZXR1cm4gSW5zcGVjdG9yQ1NTSWQoaWQoKSwgaW5kZXgpOwogICAgIHJldHVybiBJbnNwZWN0
b3JDU1NJZCgpOwogfQogCkBAIC04NDAsMTQgKzg1MCw2IEBAIGJvb2wgSW5zcGVjdG9yU3R5bGVT
aGVldDo6ZW5zdXJlUGFyc2VkRGF0YVJlYWR5KCkKICAgICByZXR1cm4gZW5zdXJlVGV4dCgpICYm
IGVuc3VyZVNvdXJjZURhdGEoKTsKIH0KIAotYm9vbCBJbnNwZWN0b3JTdHlsZVNoZWV0Ojp0ZXh0
KFN0cmluZyogcmVzdWx0KSBjb25zdAotewotICAgIGlmICghZW5zdXJlVGV4dCgpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgKnJlc3VsdCA9IG1fcGFyc2VkU3R5bGVTaGVldC0+dGV4dCgp
OwotICAgIHJldHVybiB0cnVlOwotfQotCiBib29sIEluc3BlY3RvclN0eWxlU2hlZXQ6OmVuc3Vy
ZVRleHQoKSBjb25zdAogewogICAgIGlmICghbV9wYXJzZWRTdHlsZVNoZWV0KQpAQCAtMTA4NCwx
NCArMTA4NiwxOSBAQCB2b2lkIEluc3BlY3RvclN0eWxlU2hlZXQ6OmNvbGxlY3RGbGF0UnVsZXMo
UGFzc1JlZlB0cjxDU1NSdWxlTGlzdD4gcnVsZUxpc3QsIFZlYwogICAgIH0KIH0KIAotCiBJbnNw
ZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU6Okluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxp
bmVTdHlsZShjb25zdCBTdHJpbmcmIGlkLCBFbGVtZW50KiBlbGVtZW50LCBjb25zdCBTdHJpbmcm
IG9yaWdpbikKICAgICA6IEluc3BlY3RvclN0eWxlU2hlZXQoaWQsIDAsIG9yaWdpbiwgIiIpCiAg
ICAgLCBtX2VsZW1lbnQoZWxlbWVudCkKICAgICAsIG1fcnVsZVNvdXJjZURhdGEoMCkKIHsKICAg
ICBBU1NFUlQoZWxlbWVudCk7Ci0gICAgbV9pbnNwZWN0b3JTdHlsZSA9IEluc3BlY3RvclN0eWxl
OjpjcmVhdGUoSW5zcGVjdG9yQ1NTSWQ6OmNyZWF0ZUZyb21QYXJ0cyhpZCwgIjAiKSwgaW5saW5l
U3R5bGUoKSwgdGhpcyk7CisgICAgbV9pbnNwZWN0b3JTdHlsZSA9IEluc3BlY3RvclN0eWxlOjpj
cmVhdGUoSW5zcGVjdG9yQ1NTSWQoaWQsIDApLCBpbmxpbmVTdHlsZSgpLCB0aGlzKTsKK30KKwor
Ym9vbCBJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU6OnRleHQoU3RyaW5nKiByZXN1
bHQpIGNvbnN0Cit7CisgICAgKnJlc3VsdCA9IG1fZWxlbWVudC0+Z2V0QXR0cmlidXRlKCJzdHls
ZSIpOworICAgIHJldHVybiB0cnVlOwogfQogCiBib29sIEluc3BlY3RvclN0eWxlU2hlZXRGb3JJ
bmxpbmVTdHlsZTo6c2V0U3R5bGVUZXh0KENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlLCBjb25z
dCBTdHJpbmcmIHRleHQpCkBAIC0xMTAzLDEyICsxMTEwLDYgQEAgYm9vbCBJbnNwZWN0b3JTdHls
ZVNoZWV0Rm9ySW5saW5lU3R5bGU6OnNldFN0eWxlVGV4dChDU1NTdHlsZURlY2xhcmF0aW9uKiBz
dHlsZSwKICAgICByZXR1cm4gIWVjOwogfQogCi1ib29sIEluc3BlY3RvclN0eWxlU2hlZXRGb3JJ
bmxpbmVTdHlsZTo6dGV4dChTdHJpbmcqIHJlc3VsdCkgY29uc3QKLXsKLSAgICAqcmVzdWx0ID0g
bV9lbGVtZW50LT5nZXRBdHRyaWJ1dGUoInN0eWxlIik7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
IERvY3VtZW50KiBJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU6Om93bmVyRG9jdW1l
bnQoKSBjb25zdAogewogICAgIHJldHVybiBtX2VsZW1lbnQtPmRvY3VtZW50KCk7CkBAIC0xMTMx
LDcgKzExMzIsNyBAQCBib29sIEluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZTo6ZW5z
dXJlUGFyc2VkRGF0YVJlYWR5KCkKIAogUGFzc1JlZlB0cjxJbnNwZWN0b3JTdHlsZT4gSW5zcGVj
dG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlOjppbnNwZWN0b3JTdHlsZUZvcklkKGNvbnN0IElu
c3BlY3RvckNTU0lkJiBpZCkKIHsKLSAgICBBU1NFUlRfVU5VU0VEKGlkLCBpZC5vcmRpbmFsKCkg
PT0gIjAiKTsKKyAgICBBU1NFUlRfVU5VU0VEKGlkLCAhaWQub3JkaW5hbCgpKTsKICAgICByZXR1
cm4gbV9pbnNwZWN0b3JTdHlsZTsKIH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yU3R5bGVTaGVldC5oIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVT
aGVldC5oCmluZGV4IGEwNjIyZmUuLmI2NDliZWQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvclN0eWxlU2hlZXQuaAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JTdHlsZVNoZWV0LmgKQEAgLTUxLDI4ICs1MSw0MyBAQCBjbGFzcyBOb2RlOwogCiBjbGFzcyBJ
bnNwZWN0b3JDU1NJZCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIEluc3BlY3RvckNTU0lkIGNyZWF0
ZUZyb21QYXJ0cyhjb25zdCBTdHJpbmcmIHN0eWxlU2hlZXRJZCwgY29uc3QgU3RyaW5nJiBvcmRp
bmFsKSB7IHJldHVybiBJbnNwZWN0b3JDU1NJZChzdHlsZVNoZWV0SWQgKyAiOiIgKyBvcmRpbmFs
KTsgfQotCiAgICAgSW5zcGVjdG9yQ1NTSWQoKSB7IH0KLSAgICBleHBsaWNpdCBJbnNwZWN0b3JD
U1NJZChjb25zdCBTdHJpbmcmIGlkKQorCisgICAgZXhwbGljaXQgSW5zcGVjdG9yQ1NTSWQoUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICAgewotICAgICAgICBpZC5zcGxpdCgnOics
IG1faWRQYXJ0cyk7Ci0gICAgICAgIEFTU0VSVChtX2lkUGFydHMuc2l6ZSgpID09IDIpOworICAg
ICAgICBpZiAoIXZhbHVlLT5nZXRTdHJpbmcoInN0eWxlU2hlZXRJZCIsICZtX3N0eWxlU2hlZXRJ
ZCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBSZWZQdHI8SW5zcGVj
dG9yVmFsdWU+IG9yZGluYWxWYWx1ZSA9IHZhbHVlLT5nZXQoIm9yZGluYWwiKTsKKyAgICAgICAg
aWYgKCFvcmRpbmFsVmFsdWUgfHwgIW9yZGluYWxWYWx1ZS0+YXNOdW1iZXIoJm1fb3JkaW5hbCkp
CisgICAgICAgICAgICBtX3N0eWxlU2hlZXRJZCA9ICIiOwogICAgIH0KIAotICAgIGNvbnN0IFN0
cmluZyYgc3R5bGVTaGVldElkKCkgY29uc3QgeyBBU1NFUlQobV9pZFBhcnRzLnNpemUoKSA9PSAy
KTsgcmV0dXJuIG1faWRQYXJ0cy5hdCgwKTsgfQotICAgIGNvbnN0IFN0cmluZyYgb3JkaW5hbCgp
IGNvbnN0IHsgQVNTRVJUKG1faWRQYXJ0cy5zaXplKCkgPT0gMik7IHJldHVybiBtX2lkUGFydHMu
YXQoMSk7IH0KLSAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX2lkUGFydHMuaXNF
bXB0eSgpOyB9Ci0gICAgU3RyaW5nIGFzU3RyaW5nKCkgY29uc3QKKyAgICBJbnNwZWN0b3JDU1NJ
ZChjb25zdCBTdHJpbmcmIHN0eWxlU2hlZXRJZCwgdW5zaWduZWQgb3JkaW5hbCkKKyAgICAgICAg
OiBtX3N0eWxlU2hlZXRJZChzdHlsZVNoZWV0SWQpCisgICAgICAgICwgbV9vcmRpbmFsKG9yZGlu
YWwpCisgICAgeworICAgIH0KKworICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1f
c3R5bGVTaGVldElkLmlzRW1wdHkoKTsgfQorCisgICAgY29uc3QgU3RyaW5nJiBzdHlsZVNoZWV0
SWQoKSBjb25zdCB7IHJldHVybiBtX3N0eWxlU2hlZXRJZDsgfQorICAgIHVuc2lnbmVkIG9yZGlu
YWwoKSBjb25zdCB7IHJldHVybiBtX29yZGluYWw7IH0KKworICAgIFBhc3NSZWZQdHI8SW5zcGVj
dG9yVmFsdWU+IGFzSW5zcGVjdG9yVmFsdWUoKSBjb25zdAogICAgIHsKICAgICAgICAgaWYgKGlz
RW1wdHkoKSkKLSAgICAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICAgICAgICAgIHJldHVy
biBJbnNwZWN0b3JWYWx1ZTo6bnVsbCgpOwogCi0gICAgICAgIHJldHVybiBtX2lkUGFydHMuYXQo
MCkgKyAiOiIgKyBtX2lkUGFydHMuYXQoMSk7CisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIHJlc3VsdC0+
c2V0U3RyaW5nKCJzdHlsZVNoZWV0SWQiLCBtX3N0eWxlU2hlZXRJZCk7CisgICAgICAgIHJlc3Vs
dC0+c2V0TnVtYmVyKCJvcmRpbmFsIiwgbV9vcmRpbmFsKTsKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dC5yZWxlYXNlKCk7CiAgICAgfQogCiBwcml2YXRlOgotICAgIFZlY3RvcjxTdHJpbmc+IG1faWRQ
YXJ0czsKKyAgICBTdHJpbmcgbV9zdHlsZVNoZWV0SWQ7CisgICAgdW5zaWduZWQgbV9vcmRpbmFs
OwogfTsKIAogc3RydWN0IEluc3BlY3RvclN0eWxlUHJvcGVydHkgewpAQCAtMTU2LDcgKzE3MSw4
IEBAIHB1YmxpYzoKICAgICBJbnNwZWN0b3JTdHlsZVNoZWV0KGNvbnN0IFN0cmluZyYgaWQsIENT
U1N0eWxlU2hlZXQqIHBhZ2VTdHlsZVNoZWV0LCBjb25zdCBTdHJpbmcmIG9yaWdpbiwgY29uc3Qg
U3RyaW5nJiBkb2N1bWVudFVSTCk7CiAgICAgdmlydHVhbCB+SW5zcGVjdG9yU3R5bGVTaGVldCgp
OwogCi0gICAgY29uc3QgU3RyaW5nJiBpZCgpIGNvbnN0IHsgcmV0dXJuIG1faWQ7IH0KKyAgICBT
dHJpbmcgaWQoKSBjb25zdCB7IHJldHVybiBtX2lkOyB9CisgICAgU3RyaW5nIGZpbmFsVVJMKCkg
Y29uc3Q7CiAgICAgQ1NTU3R5bGVTaGVldCogcGFnZVN0eWxlU2hlZXQoKSBjb25zdCB7IHJldHVy
biBtX3BhZ2VTdHlsZVNoZWV0OyB9CiAgICAgdm9pZCByZXBhcnNlU3R5bGVTaGVldChjb25zdCBT
dHJpbmcmKTsKICAgICBib29sIHNldFRleHQoY29uc3QgU3RyaW5nJik7CkBAIC0xNjksMTIgKzE4
NSwxMiBAQCBwdWJsaWM6CiAgICAgYm9vbCBzZXRQcm9wZXJ0eVRleHQoY29uc3QgSW5zcGVjdG9y
Q1NTSWQmLCB1bnNpZ25lZCBwcm9wZXJ0eUluZGV4LCBjb25zdCBTdHJpbmcmIHRleHQsIGJvb2wg
b3ZlcndyaXRlKTsKICAgICBib29sIHRvZ2dsZVByb3BlcnR5KGNvbnN0IEluc3BlY3RvckNTU0lk
JiwgdW5zaWduZWQgcHJvcGVydHlJbmRleCwgYm9vbCBkaXNhYmxlKTsKIAorICAgIHZpcnR1YWwg
Ym9vbCB0ZXh0KFN0cmluZyogcmVzdWx0KSBjb25zdDsKICAgICB2aXJ0dWFsIENTU1N0eWxlRGVj
bGFyYXRpb24qIHN0eWxlRm9ySWQoY29uc3QgSW5zcGVjdG9yQ1NTSWQmKSBjb25zdDsKIAogcHJv
dGVjdGVkOgogICAgIGJvb2wgY2FuQmluZCgpIGNvbnN0IHsgcmV0dXJuIG1fb3JpZ2luICE9ICJ1
c2VyQWdlbnQiICYmIG1fb3JpZ2luICE9ICJ1c2VyIjsgfQogICAgIEluc3BlY3RvckNTU0lkIHJ1
bGVPclN0eWxlSWQoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUpIGNvbnN0OwotICAgIHZpcnR1
YWwgYm9vbCB0ZXh0KFN0cmluZyogcmVzdWx0KSBjb25zdDsKICAgICB2aXJ0dWFsIERvY3VtZW50
KiBvd25lckRvY3VtZW50KCkgY29uc3Q7CiAgICAgdmlydHVhbCBSZWZQdHI8Q1NTUnVsZVNvdXJj
ZURhdGE+IHJ1bGVTb3VyY2VEYXRhRm9yKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlKSBjb25z
dDsKICAgICB2aXJ0dWFsIHVuc2lnbmVkIHJ1bGVJbmRleEJ5U3R5bGUoQ1NTU3R5bGVEZWNsYXJh
dGlvbiopIGNvbnN0OwpAQCAtMjIxLDEwICsyMzcsMTAgQEAgcHVibGljOgogICAgIH0KIAogICAg
IEluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZShjb25zdCBTdHJpbmcmIGlkLCBFbGVt
ZW50KiBlbGVtZW50LCBjb25zdCBTdHJpbmcmIG9yaWdpbik7Ci0gICAgdmlydHVhbCBDU1NTdHls
ZURlY2xhcmF0aW9uKiBzdHlsZUZvcklkKGNvbnN0IEluc3BlY3RvckNTU0lkJiBpZCkgY29uc3Qg
eyBBU1NFUlRfVU5VU0VEKGlkLCBpZC5vcmRpbmFsKCkgPT0gIjAiKTsgcmV0dXJuIGlubGluZVN0
eWxlKCk7IH0KKyAgICB2aXJ0dWFsIGJvb2wgdGV4dChTdHJpbmcqIHJlc3VsdCkgY29uc3Q7Cisg
ICAgdmlydHVhbCBDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZUZvcklkKGNvbnN0IEluc3BlY3Rv
ckNTU0lkJiBpZCkgY29uc3QgeyBBU1NFUlRfVU5VU0VEKGlkLCAhaWQub3JkaW5hbCgpKTsgcmV0
dXJuIGlubGluZVN0eWxlKCk7IH0KIAogcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgYm9vbCB0ZXh0
KFN0cmluZyogcmVzdWx0KSBjb25zdDsKICAgICB2aXJ0dWFsIERvY3VtZW50KiBvd25lckRvY3Vt
ZW50KCkgY29uc3Q7CiAgICAgdmlydHVhbCBSZWZQdHI8Q1NTUnVsZVNvdXJjZURhdGE+IHJ1bGVT
b3VyY2VEYXRhRm9yKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlKSBjb25zdCB7IEFTU0VSVF9V
TlVTRUQoc3R5bGUsIHN0eWxlID09IGlubGluZVN0eWxlKCkpOyByZXR1cm4gbV9ydWxlU291cmNl
RGF0YTsgfQogICAgIHZpcnR1YWwgdW5zaWduZWQgcnVsZUluZGV4QnlTdHlsZShDU1NTdHlsZURl
Y2xhcmF0aW9uKikgY29uc3QgeyByZXR1cm4gMDsgfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL0NTU1N0eWxlTW9kZWwuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvQ1NTU3R5bGVNb2RlbC5qcwppbmRleCBjMzQyOWZkLi41NTMwZjU3IDEwMDY0NAotLS0g
YS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ1NTU3R5bGVNb2RlbC5qcworKysgYi9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQ1NTU3R5bGVNb2RlbC5qcwpAQCAtMTE3LDcgKzExNyw5
IEBAIFdlYkluc3BlY3Rvci5DU1NTdHlsZU1vZGVsLnByb3RvdHlwZSA9IHsKICAgICAgICAgZnVu
Y3Rpb24gY2hlY2tBZmZlY3RzQ2FsbGJhY2sobm9kZUlkLCBzdWNjZXNzQ2FsbGJhY2ssIHJ1bGVQ
YXlsb2FkLCBzZWxlY3RlZE5vZGVJZHMpCiAgICAgICAgIHsKICAgICAgICAgICAgIHZhciBkb2Vz
QWZmZWN0U2VsZWN0ZWROb2RlID0gKHNlbGVjdGVkTm9kZUlkcy5pbmRleE9mKG5vZGVJZCkgPj0g
MCk7Ci0gICAgICAgICAgICBzdWNjZXNzQ2FsbGJhY2soV2ViSW5zcGVjdG9yLkNTU1J1bGUucGFy
c2VQYXlsb2FkKHJ1bGVQYXlsb2FkKSwgZG9lc0FmZmVjdFNlbGVjdGVkTm9kZSk7CisgICAgICAg
ICAgICB2YXIgcnVsZSA9IFdlYkluc3BlY3Rvci5DU1NSdWxlLnBhcnNlUGF5bG9hZChydWxlUGF5
bG9hZCk7CisgICAgICAgICAgICBzdWNjZXNzQ2FsbGJhY2socnVsZSwgZG9lc0FmZmVjdFNlbGVj
dGVkTm9kZSk7CisgICAgICAgICAgICB0aGlzLl9zdHlsZVNoZWV0Q2hhbmdlZChydWxlLmlkLnN0
eWxlU2hlZXRJZCk7CiAgICAgICAgIH0KIAogICAgICAgICBmdW5jdGlvbiBjYWxsYmFjayhub2Rl
SWQsIHN1Y2Nlc3NDYWxsYmFjaywgZmFpbHVyZUNhbGxiYWNrLCBuZXdTZWxlY3RvciwgcnVsZVBh
eWxvYWQpCkBAIC0xMjUsMTAgKzEyNywxMCBAQCBXZWJJbnNwZWN0b3IuQ1NTU3R5bGVNb2RlbC5w
cm90b3R5cGUgPSB7CiAgICAgICAgICAgICBpZiAoIXJ1bGVQYXlsb2FkKQogICAgICAgICAgICAg
ICAgIGZhaWx1cmVDYWxsYmFjaygpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
IEluc3BlY3RvckJhY2tlbmQucXVlcnlTZWxlY3RvckFsbChub2RlSWQsIG5ld1NlbGVjdG9yLCBj
aGVja0FmZmVjdHNDYWxsYmFjay5iaW5kKG51bGwsIG5vZGVJZCwgc3VjY2Vzc0NhbGxiYWNrLCBy
dWxlUGF5bG9hZCkpOworICAgICAgICAgICAgICAgIEluc3BlY3RvckJhY2tlbmQucXVlcnlTZWxl
Y3RvckFsbChub2RlSWQsIG5ld1NlbGVjdG9yLCBjaGVja0FmZmVjdHNDYWxsYmFjay5iaW5kKHRo
aXMsIG5vZGVJZCwgc3VjY2Vzc0NhbGxiYWNrLCBydWxlUGF5bG9hZCkpOwogICAgICAgICB9CiAK
LSAgICAgICAgSW5zcGVjdG9yQmFja2VuZC5zZXRSdWxlU2VsZWN0b3IyKHJ1bGVJZCwgbmV3U2Vs
ZWN0b3IsIGNhbGxiYWNrLmJpbmQobnVsbCwgbm9kZUlkLCBzdWNjZXNzQ2FsbGJhY2ssIGZhaWx1
cmVDYWxsYmFjaykpOworICAgICAgICBJbnNwZWN0b3JCYWNrZW5kLnNldFJ1bGVTZWxlY3RvcjIo
cnVsZUlkLCBuZXdTZWxlY3RvciwgY2FsbGJhY2suYmluZCh0aGlzLCBub2RlSWQsIHN1Y2Nlc3ND
YWxsYmFjaywgZmFpbHVyZUNhbGxiYWNrKSk7CiAgICAgfSwKIAogICAgIGFkZFJ1bGU6IGZ1bmN0
aW9uKG5vZGVJZCwgc2VsZWN0b3IsIHN1Y2Nlc3NDYWxsYmFjaywgZmFpbHVyZUNhbGxiYWNrKQpA
QCAtMTM2LDcgKzEzOCw5IEBAIFdlYkluc3BlY3Rvci5DU1NTdHlsZU1vZGVsLnByb3RvdHlwZSA9
IHsKICAgICAgICAgZnVuY3Rpb24gY2hlY2tBZmZlY3RzQ2FsbGJhY2sobm9kZUlkLCBzdWNjZXNz
Q2FsbGJhY2ssIHJ1bGVQYXlsb2FkLCBzZWxlY3RlZE5vZGVJZHMpCiAgICAgICAgIHsKICAgICAg
ICAgICAgIHZhciBkb2VzQWZmZWN0U2VsZWN0ZWROb2RlID0gKHNlbGVjdGVkTm9kZUlkcy5pbmRl
eE9mKG5vZGVJZCkgPj0gMCk7Ci0gICAgICAgICAgICBzdWNjZXNzQ2FsbGJhY2soV2ViSW5zcGVj
dG9yLkNTU1J1bGUucGFyc2VQYXlsb2FkKHJ1bGVQYXlsb2FkKSwgZG9lc0FmZmVjdFNlbGVjdGVk
Tm9kZSk7CisgICAgICAgICAgICB2YXIgcnVsZSA9IFdlYkluc3BlY3Rvci5DU1NSdWxlLnBhcnNl
UGF5bG9hZChydWxlUGF5bG9hZCk7CisgICAgICAgICAgICBzdWNjZXNzQ2FsbGJhY2socnVsZSwg
ZG9lc0FmZmVjdFNlbGVjdGVkTm9kZSk7CisgICAgICAgICAgICB0aGlzLl9zdHlsZVNoZWV0Q2hh
bmdlZChydWxlLmlkLnN0eWxlU2hlZXRJZCk7CiAgICAgICAgIH0KIAogICAgICAgICBmdW5jdGlv
biBjYWxsYmFjayhzdWNjZXNzQ2FsbGJhY2ssIGZhaWx1cmVDYWxsYmFjaywgc2VsZWN0b3IsIHJ1
bGVQYXlsb2FkKQpAQCAtMTQ1LDEwICsxNDksMTUgQEAgV2ViSW5zcGVjdG9yLkNTU1N0eWxlTW9k
ZWwucHJvdG90eXBlID0gewogICAgICAgICAgICAgICAgIC8vIEludmFsaWQgc3ludGF4IGZvciBh
IHNlbGVjdG9yCiAgICAgICAgICAgICAgICAgZmFpbHVyZUNhbGxiYWNrKCk7CiAgICAgICAgICAg
ICB9IGVsc2UKLSAgICAgICAgICAgICAgICBJbnNwZWN0b3JCYWNrZW5kLnF1ZXJ5U2VsZWN0b3JB
bGwobm9kZUlkLCBzZWxlY3RvciwgY2hlY2tBZmZlY3RzQ2FsbGJhY2suYmluZChudWxsLCBub2Rl
SWQsIHN1Y2Nlc3NDYWxsYmFjaywgcnVsZVBheWxvYWQpKTsKKyAgICAgICAgICAgICAgICBJbnNw
ZWN0b3JCYWNrZW5kLnF1ZXJ5U2VsZWN0b3JBbGwobm9kZUlkLCBzZWxlY3RvciwgY2hlY2tBZmZl
Y3RzQ2FsbGJhY2suYmluZCh0aGlzLCBub2RlSWQsIHN1Y2Nlc3NDYWxsYmFjaywgcnVsZVBheWxv
YWQpKTsKICAgICAgICAgfQogCi0gICAgICAgIEluc3BlY3RvckJhY2tlbmQuYWRkUnVsZTIobm9k
ZUlkLCBzZWxlY3RvciwgY2FsbGJhY2suYmluZChudWxsLCBzdWNjZXNzQ2FsbGJhY2ssIGZhaWx1
cmVDYWxsYmFjaywgc2VsZWN0b3IpKTsKKyAgICAgICAgSW5zcGVjdG9yQmFja2VuZC5hZGRSdWxl
Mihub2RlSWQsIHNlbGVjdG9yLCBjYWxsYmFjay5iaW5kKHRoaXMsIHN1Y2Nlc3NDYWxsYmFjaywg
ZmFpbHVyZUNhbGxiYWNrLCBzZWxlY3RvcikpOworICAgIH0sCisKKyAgICBfc3R5bGVTaGVldENo
YW5nZWQ6IGZ1bmN0aW9uKHN0eWxlU2hlZXRJZCkKKyAgICB7CisgICAgICAgIC8vIEZJWE1FOiB1
c2UgSW5zcGVjdG9yQmFja2VuZC5nZXRTdHlsZVNoZWV0VGV4dDIgaGVyZTsKICAgICB9CiB9CiAK
QEAgLTMxMiw4ICszMjEsMTAgQEAgV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb24ucHJv
dG90eXBlID0gewogCiAgICAgICAgICAgICBpZiAoIXBheWxvYWQpCiAgICAgICAgICAgICAgICAg
dXNlckNhbGxiYWNrKG51bGwpOwotICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgZWxzZSB7
CiAgICAgICAgICAgICAgICAgdXNlckNhbGxiYWNrKFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xh
cmF0aW9uLnBhcnNlUGF5bG9hZChwYXlsb2FkKSk7CisgICAgICAgICAgICAgICAgV2ViSW5zcGVj
dG9yLmNzc01vZGVsLl9zdHlsZVNoZWV0Q2hhbmdlZCh0aGlzLmlkLnN0eWxlU2hlZXRJZCk7Cisg
ICAgICAgICAgICB9CiAgICAgICAgIH0KIAogICAgICAgICBJbnNwZWN0b3JCYWNrZW5kLnNldFBy
b3BlcnR5VGV4dDIodGhpcy5pZCwgaW5kZXgsIG5hbWUgKyAiOiAiICsgdmFsdWUgKyAiOyIsIGZh
bHNlLCBjYWxsYmFjay5iaW5kKG51bGwsIHVzZXJDYWxsYmFjaykpOwpAQCAtNDI0LDcgKzQzNSw3
IEBAIFdlYkluc3BlY3Rvci5DU1NQcm9wZXJ0eS5wcm90b3R5cGUgPSB7CiAgICAgLy8gUmVwbGFj
ZXMgInByb3BlcnR5TmFtZTogcHJvcGVydHlWYWx1ZSBbIWltcG9ydGFudF07IiBpbiB0aGUgc3R5
bGVzaGVldCBieSBhbiBhcmJpdHJhcnkgcHJvcGVydHlUZXh0LgogICAgIHNldFRleHQ6IGZ1bmN0
aW9uKHByb3BlcnR5VGV4dCwgdXNlckNhbGxiYWNrKQogICAgIHsKLSAgICAgICAgZnVuY3Rpb24g
Y2FsbGJhY2sodXNlckNhbGxiYWNrLCBzdHlsZVBheWxvYWQpCisgICAgICAgIGZ1bmN0aW9uIGNh
bGxiYWNrKHN0eWxlUGF5bG9hZCkKICAgICAgICAgewogICAgICAgICAgICAgaWYgKHN0eWxlUGF5
bG9hZCkKICAgICAgICAgICAgICAgICB0aGlzLnRleHQgPSBwcm9wZXJ0eVRleHQ7CkBAIC00MzYs
NiArNDQ3LDcgQEAgV2ViSW5zcGVjdG9yLkNTU1Byb3BlcnR5LnByb3RvdHlwZSA9IHsKICAgICAg
ICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIHZhciBzdHlsZSA9IFdlYkluc3BlY3Rvci5D
U1NTdHlsZURlY2xhcmF0aW9uLnBhcnNlUGF5bG9hZChzdHlsZVBheWxvYWQpOwogICAgICAgICAg
ICAgICAgIHVzZXJDYWxsYmFjayhzdHlsZSk7CisgICAgICAgICAgICAgICAgV2ViSW5zcGVjdG9y
LmNzc01vZGVsLl9zdHlsZVNoZWV0Q2hhbmdlZChzdHlsZS5pZC5zdHlsZVNoZWV0SWQpOwogICAg
ICAgICAgICAgfQogICAgICAgICB9CiAKQEAgLTQ0Myw3ICs0NTUsNyBAQCBXZWJJbnNwZWN0b3Iu
Q1NTUHJvcGVydHkucHJvdG90eXBlID0gewogICAgICAgICAgICAgdGhyb3cgIk5vIG93bmVyU3R5
bGUgZm9yIHByb3BlcnR5IjsKIAogICAgICAgICAvLyBBbiBpbmRleCBwYXN0IGFsbCB0aGUgcHJv
cGVydGllcyBhZGRzIGEgbmV3IHByb3BlcnR5IHRvIHRoZSBzdHlsZS4KLSAgICAgICAgSW5zcGVj
dG9yQmFja2VuZC5zZXRQcm9wZXJ0eVRleHQyKHRoaXMub3duZXJTdHlsZS5pZCwgdGhpcy5pbmRl
eCwgcHJvcGVydHlUZXh0LCB0aGlzLmluZGV4IDwgdGhpcy5vd25lclN0eWxlLnBhc3RMYXN0U291
cmNlUHJvcGVydHlJbmRleCgpLCBjYWxsYmFjay5iaW5kKHRoaXMsIHVzZXJDYWxsYmFjaykpOwor
ICAgICAgICBJbnNwZWN0b3JCYWNrZW5kLnNldFByb3BlcnR5VGV4dDIodGhpcy5vd25lclN0eWxl
LmlkLCB0aGlzLmluZGV4LCBwcm9wZXJ0eVRleHQsIHRoaXMuaW5kZXggPCB0aGlzLm93bmVyU3R5
bGUucGFzdExhc3RTb3VyY2VQcm9wZXJ0eUluZGV4KCksIGNhbGxiYWNrLmJpbmQodGhpcykpOwog
ICAgIH0sCiAKICAgICBzZXRWYWx1ZTogZnVuY3Rpb24obmV3VmFsdWUsIHVzZXJDYWxsYmFjaykK
QEAgLTQ1OSw3ICs0NzEsNyBAQCBXZWJJbnNwZWN0b3IuQ1NTUHJvcGVydHkucHJvdG90eXBlID0g
ewogICAgICAgICBpZiAoZGlzYWJsZWQgPT09IHRoaXMuZGlzYWJsZWQgJiYgdXNlckNhbGxiYWNr
KQogICAgICAgICAgICAgdXNlckNhbGxiYWNrKHRoaXMub3duZXJTdHlsZSk7CiAKLSAgICAgICAg
ZnVuY3Rpb24gY2FsbGJhY2sodXNlckNhbGxiYWNrLCBzdHlsZVBheWxvYWQpCisgICAgICAgIGZ1
bmN0aW9uIGNhbGxiYWNrKHN0eWxlUGF5bG9hZCkKICAgICAgICAgewogICAgICAgICAgICAgaWYg
KCF1c2VyQ2FsbGJhY2spCiAgICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAtNDY4LDEwICs0ODAs
MTEgQEAgV2ViSW5zcGVjdG9yLkNTU1Byb3BlcnR5LnByb3RvdHlwZSA9IHsKICAgICAgICAgICAg
IGVsc2UgewogICAgICAgICAgICAgICAgIHZhciBzdHlsZSA9IFdlYkluc3BlY3Rvci5DU1NTdHls
ZURlY2xhcmF0aW9uLnBhcnNlUGF5bG9hZChzdHlsZVBheWxvYWQpOwogICAgICAgICAgICAgICAg
IHVzZXJDYWxsYmFjayhzdHlsZSk7CisgICAgICAgICAgICAgICAgV2ViSW5zcGVjdG9yLmNzc01v
ZGVsLl9zdHlsZVNoZWV0Q2hhbmdlZCh0aGlzLm93bmVyU3R5bGUuaWQuc3R5bGVTaGVldElkKTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIEluc3BlY3RvckJhY2tlbmQudG9n
Z2xlUHJvcGVydHkyKHRoaXMub3duZXJTdHlsZS5pZCwgdGhpcy5pbmRleCwgZGlzYWJsZWQsIGNh
bGxiYWNrLmJpbmQodGhpcywgdXNlckNhbGxiYWNrKSk7CisgICAgICAgIEluc3BlY3RvckJhY2tl
bmQudG9nZ2xlUHJvcGVydHkyKHRoaXMub3duZXJTdHlsZS5pZCwgdGhpcy5pbmRleCwgZGlzYWJs
ZWQsIGNhbGxiYWNrLmJpbmQodGhpcykpOwogICAgIH0KIH0KIApAQCAtNDk1LDE0ICs1MDgsMTQg
QEAgV2ViSW5zcGVjdG9yLkNTU1N0eWxlU2hlZXQgPSBmdW5jdGlvbihwYXlsb2FkKQogCiBXZWJJ
bnNwZWN0b3IuQ1NTU3R5bGVTaGVldC5jcmVhdGVGb3JJZCA9IGZ1bmN0aW9uKHN0eWxlU2hlZXRJ
ZCwgdXNlckNhbGxiYWNrKQogewotICAgIGZ1bmN0aW9uIGNhbGxiYWNrKHVzZXJDYWxsYmFjaywg
c3R5bGVTaGVldFBheWxvYWQpCisgICAgZnVuY3Rpb24gY2FsbGJhY2soc3R5bGVTaGVldFBheWxv
YWQpCiAgICAgewogICAgICAgICBpZiAoIXN0eWxlU2hlZXRQYXlsb2FkKQogICAgICAgICAgICAg
dXNlckNhbGxiYWNrKG51bGwpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICB1c2VyQ2FsbGJh
Y2sobmV3IFdlYkluc3BlY3Rvci5DU1NTdHlsZVNoZWV0KHN0eWxlU2hlZXRQYXlsb2FkKSk7CiAg
ICAgfQotICAgIEluc3BlY3RvckJhY2tlbmQuZ2V0U3R5bGVTaGVldDIoc3R5bGVTaGVldElkLCBj
YWxsYmFjay5iaW5kKHRoaXMsIHVzZXJDYWxsYmFjaykpOworICAgIEluc3BlY3RvckJhY2tlbmQu
Z2V0U3R5bGVTaGVldDIoc3R5bGVTaGVldElkLCBjYWxsYmFjay5iaW5kKHRoaXMpKTsKIH0KIAog
V2ViSW5zcGVjdG9yLkNTU1N0eWxlU2hlZXQucHJvdG90eXBlID0gewpAQCAtNTEzLDE0ICs1MjYs
MTYgQEAgV2ViSW5zcGVjdG9yLkNTU1N0eWxlU2hlZXQucHJvdG90eXBlID0gewogCiAgICAgc2V0
VGV4dDogZnVuY3Rpb24obmV3VGV4dCwgdXNlckNhbGxiYWNrKQogICAgIHsKLSAgICAgICAgZnVu
Y3Rpb24gY2FsbGJhY2sodXNlckNhbGxiYWNrLCBzdHlsZVNoZWV0UGF5bG9hZCkKKyAgICAgICAg
ZnVuY3Rpb24gY2FsbGJhY2soc3R5bGVTaGVldFBheWxvYWQpCiAgICAgICAgIHsKICAgICAgICAg
ICAgIGlmICghc3R5bGVTaGVldFBheWxvYWQpCiAgICAgICAgICAgICAgICAgdXNlckNhbGxiYWNr
KG51bGwpOwotICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAg
ICAgICAgdXNlckNhbGxiYWNrKG5ldyBXZWJJbnNwZWN0b3IuQ1NTU3R5bGVTaGVldChzdHlsZVNo
ZWV0UGF5bG9hZCkpOworICAgICAgICAgICAgICAgIFdlYkluc3BlY3Rvci5jc3NNb2RlbC5fc3R5
bGVTaGVldENoYW5nZWQodGhpcy5pZCk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAg
ICAgICBJbnNwZWN0b3JCYWNrZW5kLnNldFN0eWxlU2hlZXRUZXh0Mih0aGlzLmlkLCBuZXdUZXh0
LCBjYWxsYmFjay5iaW5kKHRoaXMsIHVzZXJDYWxsYmFjaykpOworICAgICAgICBJbnNwZWN0b3JC
YWNrZW5kLnNldFN0eWxlU2hlZXRUZXh0Mih0aGlzLmlkLCBuZXdUZXh0LCBjYWxsYmFjay5iaW5k
KHRoaXMpKTsKICAgICB9CiB9Cg==
</data>
<flag name="review"
          id="65408"
          type_id="1"
          status="+"
          setter="yurys"
    />
          </attachment>
      

    </bug>

</bugzilla>