<?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>53173</bug_id>
          
          <creation_ts>2011-01-26 08:43:21 -0800</creation_ts>
          <short_desc>Web Inspector: [Chromium] Landing detailed heap snapshots, part 1</short_desc>
          <delta_ts>2011-03-02 02:21:46 -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>
          
          <blocked>50510</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Mikhail Naganov">mnaganov</reporter>
          <assigned_to name="Mikhail Naganov">mnaganov</assigned_to>
          <cc>abarth</cc>
    
    <cc>apavlov</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>340281</commentid>
    <comment_count>0</comment_count>
    <who name="Mikhail Naganov">mnaganov</who>
    <bug_when>2011-01-26 08:43:21 -0800</bug_when>
    <thetext>See https://bugs.webkit.org/show_bug.cgi?id=50510

Adding code for accessing heap snapshot data and performing graph calculations.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>340283</commentid>
    <comment_count>1</comment_count>
      <attachid>80198</attachid>
    <who name="Mikhail Naganov">mnaganov</who>
    <bug_when>2011-01-26 08:48:20 -0800</bug_when>
    <thetext>Created attachment 80198
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>342593</commentid>
    <comment_count>2</comment_count>
      <attachid>80645</attachid>
    <who name="Mikhail Naganov">mnaganov</who>
    <bug_when>2011-01-31 08:46:40 -0800</bug_when>
    <thetext>Created attachment 80645
rebased</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>342602</commentid>
    <comment_count>3</comment_count>
      <attachid>80645</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2011-01-31 09:07:14 -0800</bug_when>
    <thetext>Comment on attachment 80645
rebased

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

&gt; Source/WebCore/ChangeLog:5
&gt; +        Web Inspector: [Chromium] Landing detailed heap snapshots, part 1.

ChangeLog structure should be:
Web Inspector: &lt;foo&gt;
http:// bug

Detailed description.

...

&gt; Source/WebCore/ChangeLog:19
&gt; +        (WebInspector.HeapSnapshotEdgeWrapper):

No need to enumerate all the new methods.

&gt; Source/WebCore/inspector/front-end/HeapSnapshot.js:50
&gt; +WebInspector.RetainersSlice = function(snapshot, start, end)

NodesSlive and RetainersSlice can inherit from single class.

&gt; Source/WebCore/inspector/front-end/HeapSnapshot.js:76
&gt; +WebInspector.HeapSnapshotEdgeWrapper.prototype = {

I like iterator name better.

&gt; Source/WebCore/inspector/front-end/HeapSnapshot.js:77
&gt; +    becomeFirst: function()

reset: function

&gt; Source/WebCore/inspector/front-end/HeapSnapshot.js:82
&gt; +    becomeNext: function()

next: function()

&gt; Source/WebCore/inspector/front-end/HeapSnapshot.js:92
&gt; +    get count()

length

&gt; Source/WebCore/inspector/front-end/HeapSnapshot.js:102
&gt; +    get hasNext()

hasNext: function()

&gt; Source/WebCore/inspector/front-end/HeapSnapshot.js:184
&gt; +        return &quot;???&quot;;

Should this string be localized?

&gt; Source/WebCore/inspector/front-end/HeapSnapshot.js:221
&gt; +    becomeDominator: function()

ditto to the naming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343179</commentid>
    <comment_count>4</comment_count>
      <attachid>80645</attachid>
    <who name="Mikhail Naganov">mnaganov</who>
    <bug_when>2011-02-01 06:00:05 -0800</bug_when>
    <thetext>Comment on attachment 80645
rebased

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

&gt;&gt; Source/WebCore/ChangeLog:5
&gt;&gt; +        Web Inspector: [Chromium] Landing detailed heap snapshots, part 1.
&gt; 
&gt; ChangeLog structure should be:
&gt; Web Inspector: &lt;foo&gt;
&gt; http:// bug
&gt; 
&gt; Detailed description.
&gt; 
&gt; ...

Changed.

&gt;&gt; Source/WebCore/ChangeLog:19
&gt;&gt; +        (WebInspector.HeapSnapshotEdgeWrapper):
&gt; 
&gt; No need to enumerate all the new methods.

Fixed.

&gt;&gt; Source/WebCore/inspector/front-end/HeapSnapshot.js:50
&gt;&gt; +WebInspector.RetainersSlice = function(snapshot, start, end)
&gt; 
&gt; NodesSlive and RetainersSlice can inherit from single class.

Merged into a single class that receives array name as a constructor argument.

&gt;&gt; Source/WebCore/inspector/front-end/HeapSnapshot.js:76
&gt;&gt; +WebInspector.HeapSnapshotEdgeWrapper.prototype = {
&gt; 
&gt; I like iterator name better.

Changed.

&gt;&gt; Source/WebCore/inspector/front-end/HeapSnapshot.js:77
&gt;&gt; +    becomeFirst: function()
&gt; 
&gt; reset: function

Changed.

&gt;&gt; Source/WebCore/inspector/front-end/HeapSnapshot.js:82
&gt;&gt; +    becomeNext: function()
&gt; 
&gt; next: function()

Changed.

&gt;&gt; Source/WebCore/inspector/front-end/HeapSnapshot.js:92
&gt;&gt; +    get count()
&gt; 
&gt; length

Changed.

&gt;&gt; Source/WebCore/inspector/front-end/HeapSnapshot.js:102
&gt;&gt; +    get hasNext()
&gt; 
&gt; hasNext: function()

Changed.

&gt;&gt; Source/WebCore/inspector/front-end/HeapSnapshot.js:184
&gt;&gt; +        return &quot;???&quot;;
&gt; 
&gt; Should this string be localized?

Changed string to eliminate the need to localize.

&gt;&gt; Source/WebCore/inspector/front-end/HeapSnapshot.js:221
&gt;&gt; +    becomeDominator: function()
&gt; 
&gt; ditto to the naming.

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343180</commentid>
    <comment_count>5</comment_count>
      <attachid>80752</attachid>
    <who name="Mikhail Naganov">mnaganov</who>
    <bug_when>2011-02-01 06:01:32 -0800</bug_when>
    <thetext>Created attachment 80752
comments addressed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343224</commentid>
    <comment_count>6</comment_count>
      <attachid>80752</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2011-02-01 08:15:17 -0800</bug_when>
    <thetext>Comment on attachment 80752
comments addressed

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

&gt; Source/WebCore/inspector/front-end/HeapSnapshot.js:683
&gt; +        if (fieldName1 === &quot;!edgeName&quot;)

Please surround with {}

&gt; Source/WebCore/inspector/front-end/HeapSnapshot.js:746
&gt; +            function(indexA, indexB) {

please declare named local function above (as sortByNodeField).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343237</commentid>
    <comment_count>7</comment_count>
      <attachid>80752</attachid>
    <who name="Mikhail Naganov">mnaganov</who>
    <bug_when>2011-02-01 08:41:54 -0800</bug_when>
    <thetext>Comment on attachment 80752
comments addressed

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

&gt;&gt; Source/WebCore/inspector/front-end/HeapSnapshot.js:683
&gt;&gt; +        if (fieldName1 === &quot;!edgeName&quot;)
&gt; 
&gt; Please surround with {}

After declaring order functions separately above, this no longer applies.

&gt;&gt; Source/WebCore/inspector/front-end/HeapSnapshot.js:746

&gt; 
&gt; please declare named local function above (as sortByNodeField).

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343247</commentid>
    <comment_count>8</comment_count>
    <who name="Mikhail Naganov">mnaganov</who>
    <bug_when>2011-02-01 09:04:44 -0800</bug_when>
    <thetext>Manually committed http://trac.webkit.org/changeset/77252


    2011-02-01  Mikhail Naganov  &lt;mnaganov@chromium.org&gt;
    
            Reviewed by Pavel Feldman.
    
            Web Inspector: [Chromium] Landing detailed heap snapshots, part 1.
    
            https://bugs.webkit.org/show_bug.cgi?id=53173
    
            Adding code for accessing heap snapshot data and
            performing graph calculations.
    
            * English.lproj/localizedStrings.js:
            * inspector/front-end/HeapSnapshot.js:
            (WebInspector.HeapSnapshotArraySlice): Helper class to avoid array contents copying.
            (WebInspector.HeapSnapshotEdge): Wrapper for accessing graph edge properties.
            (WebInspector.HeapSnapshotEdgeIterator):
            (WebInspector.HeapSnapshotNode): Wrapper for accessing graph node properties.
            (WebInspector.HeapSnapshotNodeIterator):
            (WebInspector.HeapSnapshot): Wrapper for the heap snapshot.
            (WebInspector.HeapSnapshotFilteredOrderedIterator):
            (WebInspector.HeapSnapshotEdgesProvider):
            (WebInspector.HeapSnapshotNodesProvider):
            (WebInspector.HeapSnapshotPathFinder):
            * inspector/front-end/HeapSnapshotView.js:
            (WebInspector.HeapSnapshotView.prototype._convertSnapshot):</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343355</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-02-01 11:06:08 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/77252 might have broken GTK Linux 32-bit Debug</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>80198</attachid>
            <date>2011-01-26 08:48:20 -0800</date>
            <delta_ts>2011-01-31 08:46:40 -0800</delta_ts>
            <desc>patch</desc>
            <filename>patch-53173</filename>
            <type>text/plain</type>
            <size>36670</size>
            <attacher name="Mikhail Naganov">mnaganov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAwYmY4NGM5Li40MzI5MTlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTA2
IEBACisyMDExLTAxLTI2ICBNaWtoYWlsIE5hZ2Fub3YgIDxtbmFnYW5vdkBjaHJvbWl1bS5vcmc+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViIElu
c3BlY3RvcjogW0Nocm9taXVtXSBMYW5kaW5nIGRldGFpbGVkIGhlYXAgc25hcHNob3RzLCBwYXJ0
IDEuCisKKyAgICAgICAgQWRkaW5nIGNvZGUgZm9yIGFjY2Vzc2luZyBoZWFwIHNuYXBzaG90IGRh
dGEgYW5kIHBlcmZvcm1pbmcgZ3JhcGggY2FsY3VsYXRpb25zLgorCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MzE3MworCisgICAgICAgICogRW5nbGlz
aC5scHJvai9sb2NhbGl6ZWRTdHJpbmdzLmpzOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1l
bmQvSGVhcFNuYXBzaG90LmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLk5vZGVzU2xpY2UpOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLk5vZGVzU2xpY2UucHJvdG90eXBlLml0ZW0pOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLk5vZGVzU2xpY2UucHJvdG90eXBlLmxlbik6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuUmV0YWluZXJzU2xpY2UpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlJldGFpbmVy
c1NsaWNlLnByb3RvdHlwZS5pdGVtKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5SZXRhaW5lcnNT
bGljZS5wcm90b3R5cGUubGVuKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RF
ZGdlV3JhcHBlcik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RWRnZVdyYXBw
ZXIucHJvdG90eXBlLmJlY29tZUZpcnN0KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25h
cHNob3RFZGdlV3JhcHBlci5wcm90b3R5cGUuYmVjb21lTmV4dCk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuSGVhcFNuYXBzaG90RWRnZVdyYXBwZXIucHJvdG90eXBlLmJlY29tZU50aCk6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RWRnZVdyYXBwZXIucHJvdG90eXBlLmdldCBj
b3VudCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RWRnZVdyYXBwZXIucHJv
dG90eXBlLmNsb25lKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RFZGdlV3Jh
cHBlci5wcm90b3R5cGUuZ2V0IGhhc05leHQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBT
bmFwc2hvdEVkZ2VXcmFwcGVyLnByb3RvdHlwZS5nZXQgaGFzU3RyaW5nTmFtZSk6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RWRnZVdyYXBwZXIucHJvdG90eXBlLmdldCBpbmRl
eCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RWRnZVdyYXBwZXIucHJvdG90
eXBlLnNldCBpbmRleCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RWRnZVdy
YXBwZXIucHJvdG90eXBlLmdldCBpc0ludGVybmFsKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5I
ZWFwU25hcHNob3RFZGdlV3JhcHBlci5wcm90b3R5cGUuZ2V0IGlzU2hvcnRjdXQpOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdEVkZ2VXcmFwcGVyLnByb3RvdHlwZS5nZXQgbmFt
ZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RWRnZVdyYXBwZXIucHJvdG90
eXBlLmdldCBub2RlSW5kZXgpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdEVk
Z2VXcmFwcGVyLnByb3RvdHlwZS5nZXQgcmF3RWRnZXMpOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LkhlYXBTbmFwc2hvdEVkZ2VXcmFwcGVyLnByb3RvdHlwZS50b1N0cmluZyk6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RWRnZVdyYXBwZXIucHJvdG90eXBlLmdldCB0eXBlKToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RFZGdlV3JhcHBlci5wcm90b3R5cGUu
Z2V0IF9oYXNTdHJpbmdOYW1lKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RF
ZGdlV3JhcHBlci5wcm90b3R5cGUuZ2V0IF9uYW1lKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5I
ZWFwU25hcHNob3RFZGdlV3JhcHBlci5wcm90b3R5cGUuZ2V0IF9uYW1lT3JJbmRleCk6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RWRnZVdyYXBwZXIucHJvdG90eXBlLl90eXBl
KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3ROb2RlV3JhcHBlcik6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Tm9kZVdyYXBwZXIucHJvdG90eXBlLmJlY29t
ZURvbWluYXRvcik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Tm9kZVdyYXBw
ZXIucHJvdG90eXBlLmJlY29tZUZpcnN0KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25h
cHNob3ROb2RlV3JhcHBlci5wcm90b3R5cGUuYmVjb21lTmV4dCk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuSGVhcFNuYXBzaG90Tm9kZVdyYXBwZXIucHJvdG90eXBlLmdldCBjbGFzc05hbWUpOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdE5vZGVXcmFwcGVyLnByb3RvdHlwZS5n
ZXQgZG9taW5hdG9yKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3ROb2RlV3Jh
cHBlci5wcm90b3R5cGUuZ2V0IGVkZ2VzKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25h
cHNob3ROb2RlV3JhcHBlci5wcm90b3R5cGUuZ2V0IGhhc05leHQpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLkhlYXBTbmFwc2hvdE5vZGVXcmFwcGVyLnByb3RvdHlwZS5nZXQgaWQpOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdE5vZGVXcmFwcGVyLnByb3RvdHlwZS5nZXQgaW5k
ZXgpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdE5vZGVXcmFwcGVyLnByb3Rv
dHlwZS5zZXQgaW5kZXgpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdE5vZGVX
cmFwcGVyLnByb3RvdHlwZS5nZXQgaXNSb290KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFw
U25hcHNob3ROb2RlV3JhcHBlci5wcm90b3R5cGUuZ2V0IHJldGFpbmVkU2l6ZSk6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Tm9kZVdyYXBwZXIucHJvdG90eXBlLmdldCByZXRh
aW5lcnMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdE5vZGVXcmFwcGVyLnBy
b3RvdHlwZS5nZXQgdHlwZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Tm9k
ZVdyYXBwZXIucHJvdG90eXBlLl9kb21pbmF0b3JJbmRleCk6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuSGVhcFNuYXBzaG90Tm9kZVdyYXBwZXIucHJvdG90eXBlLmdldCByYXdFZGdlcyk6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Tm9kZVdyYXBwZXIucHJvdG90eXBlLmdldCBf
bmV4dE5vZGVJbmRleCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Tm9kZVdy
YXBwZXIucHJvdG90eXBlLl9maXJzdEVkZ2VJbmRleCk6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
SGVhcFNuYXBzaG90Tm9kZVdyYXBwZXIucHJvdG90eXBlLl90eXBlKToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5IZWFwU25hcHNob3ROb2RlV3JhcHBlci5wcm90b3R5cGUuZ2V0IF9ub2Rlcyk6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90KToKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5IZWFwU25hcHNob3QucHJvdG90eXBlLl9pbml0KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5I
ZWFwU25hcHNob3QucHJvdG90eXBlLmRpc3Bvc2UpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhl
YXBTbmFwc2hvdC5wcm90b3R5cGUucmVzdG9yZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVh
cFNuYXBzaG90LnByb3RvdHlwZS5nZXQgcm9vdE5vZGUpOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LkhlYXBTbmFwc2hvdC5wcm90b3R5cGUuZ2V0IGlkc01hcCk6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuSGVhcFNuYXBzaG90LnByb3RvdHlwZS5nZXRSZXRhaW5lcnMpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLkhlYXBTbmFwc2hvdC5wcm90b3R5cGUuZ2V0U3VtT2ZTZWxmU2l6ZXMpOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdC5wcm90b3R5cGUuZ2V0QWdncmVnYXRlcyk6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90LnByb3RvdHlwZS5fYnVpbGRSZXRhaW5l
cnMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdC5wcm90b3R5cGUuX2J1aWxk
QWdncmVnYXRlcyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90LnByb3RvdHlw
ZS5fYnVpbGRBZ2dyZWdhdGVzSW5kZXhlcyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNu
YXBzaG90R2VuZXJpY1Byb3ZpZGVyKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNo
b3RHZW5lcmljUHJvdmlkZXIucHJvdG90eXBlLmdldCBjb3VudCk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuSGVhcFNuYXBzaG90R2VuZXJpY1Byb3ZpZGVyLnByb3RvdHlwZS5fY3JlYXRlSXRlcmF0
aW9uT3JkZXIpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdEdlbmVyaWNQcm92
aWRlci5wcm90b3R5cGUuZ2V0IGVtcHR5KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25h
cHNob3RHZW5lcmljUHJvdmlkZXIucHJvdG90eXBlLmdldCBmaXJzdCk6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuSGVhcFNuYXBzaG90R2VuZXJpY1Byb3ZpZGVyLnByb3RvdHlwZS5nZXQgbGFzdENv
bXBhcmF0b3IpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdEdlbmVyaWNQcm92
aWRlci5wcm90b3R5cGUuZ2V0IG5leHQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFw
c2hvdEdlbmVyaWNQcm92aWRlci5wcm90b3R5cGUuY3JlYXRlQ29tcGFyYXRvcik6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RWRnZXNQcm92aWRlcik6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuSGVhcFNuYXBzaG90RWRnZXNQcm92aWRlci5wcm90b3R5cGUuc29ydC5zb3J0QnlF
ZGdlRmllbGROYW1lKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RFZGdlc1By
b3ZpZGVyLnByb3RvdHlwZS5zb3J0LnNvcnRCeU5vZGVGaWVsZCk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuSGVhcFNuYXBzaG90RWRnZXNQcm92aWRlci5wcm90b3R5cGUuc29ydCk6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Tm9kZXNQcm92aWRlcik6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuSGVhcFNuYXBzaG90Tm9kZXNQcm92aWRlci5wcm90b3R5cGUuc29ydC5zb3J0QnlO
b2RlRmllbGQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdE5vZGVzUHJvdmlk
ZXIucHJvdG90eXBlLnNvcnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFBh
dGhGaW5kZXIpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFBhdGhGaW5kZXIu
cHJvdG90eXBlLmZpbmROZXh0KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RQ
YXRoRmluZGVyLnByb3RvdHlwZS5fZmlsbFJvb3RDaGlsZHJlbik6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuSGVhcFNuYXBzaG90UGF0aEZpbmRlci5wcm90b3R5cGUuX2FwcGVuZFRvQ3VycmVudFBh
dGgpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFBhdGhGaW5kZXIucHJvdG90
eXBlLl9yZW1vdmVMYXN0RnJvbUN1cnJlbnRQYXRoKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5I
ZWFwU25hcHNob3RQYXRoRmluZGVyLnByb3RvdHlwZS5faGFzSW5QYXRoKToKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5IZWFwU25hcHNob3RQYXRoRmluZGVyLnByb3RvdHlwZS5faXNQYXRoRm91bmQp
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFBhdGhGaW5kZXIucHJvdG90eXBl
LmdldCBfbGFzdEVkZ2UpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFBhdGhG
aW5kZXIucHJvdG90eXBlLl9za2lwRWRnZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNu
YXBzaG90UGF0aEZpbmRlci5wcm90b3R5cGUuX25leHRFZGdlKToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5IZWFwU25hcHNob3RQYXRoRmluZGVyLnByb3RvdHlwZS5fYnVpbGROZXh0UGF0aCk6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UGF0aEZpbmRlci5wcm90b3R5cGUuX25v
ZGVUb1N0cmluZyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UGF0aEZpbmRl
ci5wcm90b3R5cGUuX3BhdGhUb1N0cmluZyk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVu
ZC9IZWFwU25hcHNob3RWaWV3LmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hv
dFZpZXcucHJvdG90eXBlLl9jb252ZXJ0U25hcHNob3QpOgorCiAyMDExLTAxLTI2ICBQYXRyaWNr
IEdhbnN0ZXJlciAgPHBhcm9nYUB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFu
ZHJlYXMgS2xpbmcuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9FbmdsaXNoLmxwcm9qL2xv
Y2FsaXplZFN0cmluZ3MuanMgYi9Tb3VyY2UvV2ViQ29yZS9FbmdsaXNoLmxwcm9qL2xvY2FsaXpl
ZFN0cmluZ3MuanMKaW5kZXggMGQ2YmMzY2UwNzQwZDlhMWYxNTJkN2VmZmMzYTY0MjZmYTM0MmNl
Zi4uOWY5NjU2MjE0MjA3NzU0ODI3NzcwNTA3MTQwNDlkMzliNzlmMzY3MSAxMDA2NDQKR0lUIGJp
bmFyeSBwYXRjaApkZWx0YSAxMzQKemNtYlEhJi1gUXBeTSpPY0MlPnskUVAqSDdXfmM8PjV7NldV
VG4wQEJDNUJpQTFxTkZuUiRAU3NvOXJsSj0jJEtsCmU0XiZnWWtqYW4oUkdrNzswfUBGQXZlRVY3
UzgyX18jUSo/S29mQFM4CgpkZWx0YSA5ClFjbWFEZGZxNzBwXk0qT2MwVChhP3hjfnFGCgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9IZWFwU25hcHNob3Qu
anMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0hlYXBTbmFwc2hvdC5qcwpp
bmRleCA2ZjkxYTgwLi4xOWQ1NzVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL0hlYXBTbmFwc2hvdC5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL0hlYXBTbmFwc2hvdC5qcwpAQCAtMjgsMTcgKzI4LDk3IEBACiAgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgogICovCiAKLVdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RFZGdlc0l0ZXJhdG9yID0g
ZnVuY3Rpb24oc25hcHNob3QsIGVkZ2VzKQorV2ViSW5zcGVjdG9yLk5vZGVzU2xpY2UgPSBmdW5j
dGlvbihzbmFwc2hvdCwgc3RhcnQsIGVuZCkKK3sKKyAgICB0aGlzLl9zbmFwc2hvdCA9IHNuYXBz
aG90OworICAgIHRoaXMuX3N0YXJ0ID0gc3RhcnQ7CisgICAgdGhpcy5fZW5kID0gZW5kOworfQor
CitXZWJJbnNwZWN0b3IuTm9kZXNTbGljZS5wcm90b3R5cGUgPSB7CisgICAgaXRlbTogZnVuY3Rp
b24oaW5kZXgpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fc25hcHNob3QuX25vZGVzW3Ro
aXMuX3N0YXJ0ICsgaW5kZXhdOworICAgIH0sCisKKyAgICBsZW46IGZ1bmN0aW9uKCkKKyAgICB7
CisgICAgICAgIHJldHVybiB0aGlzLl9lbmQgLSB0aGlzLl9zdGFydDsKKyAgICB9Cit9OworCitX
ZWJJbnNwZWN0b3IuUmV0YWluZXJzU2xpY2UgPSBmdW5jdGlvbihzbmFwc2hvdCwgc3RhcnQsIGVu
ZCkKK3sKKyAgICB0aGlzLl9zbmFwc2hvdCA9IHNuYXBzaG90OworICAgIHRoaXMuX3N0YXJ0ID0g
c3RhcnQ7CisgICAgdGhpcy5fZW5kID0gZW5kOworfQorCitXZWJJbnNwZWN0b3IuUmV0YWluZXJz
U2xpY2UucHJvdG90eXBlID0geworICAgIGl0ZW06IGZ1bmN0aW9uKGluZGV4KQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHRoaXMuX3NuYXBzaG90Ll9yZXRhaW5lcnNbdGhpcy5fc3RhcnQgKyBpbmRl
eF07CisgICAgfSwKKworICAgIGxlbjogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IHRoaXMuX2VuZCAtIHRoaXMuX3N0YXJ0OworICAgIH0KK307CisKK1dlYkluc3BlY3Rvci5IZWFw
U25hcHNob3RFZGdlV3JhcHBlciA9IGZ1bmN0aW9uKHNuYXBzaG90LCBlZGdlcywgZWRnZUluZGV4
KQogewogICAgIHRoaXMuX3NuYXBzaG90ID0gc25hcHNob3Q7CiAgICAgdGhpcy5fZWRnZXMgPSBl
ZGdlczsKLSAgICB0aGlzLl9lZGdlSW5kZXggPSAwOworICAgIHRoaXMuX2VkZ2VJbmRleCA9IGVk
Z2VJbmRleCB8fCAwOwogfQogCi1XZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RWRnZXNJdGVyYXRv
ci5wcm90b3R5cGUgPSB7Ci0gICAgZ2V0IGRvbmUoKQorV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hv
dEVkZ2VXcmFwcGVyLnByb3RvdHlwZSA9IHsKKyAgICBiZWNvbWVGaXJzdDogZnVuY3Rpb24oKQog
ICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX2VkZ2VJbmRleCA+PSB0aGlzLl9lZGdlcy5sZW5n
dGg7CisgICAgICAgIHRoaXMuX2VkZ2VJbmRleCA9IDA7CisgICAgfSwKKworICAgIGJlY29tZU5l
eHQ6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHRoaXMuX2VkZ2VJbmRleCArPSB0aGlzLl9z
bmFwc2hvdC5fZWRnZUZpZWxkc0NvdW50OworICAgIH0sCisKKyAgICBiZWNvbWVOdGg6IGZ1bmN0
aW9uKG4pCisgICAgeworICAgICAgICB0aGlzLl9lZGdlSW5kZXggPSBuICogdGhpcy5fc25hcHNo
b3QuX2VkZ2VGaWVsZHNDb3VudDsKKyAgICB9LAorCisgICAgZ2V0IGNvdW50KCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiB0aGlzLl9lZGdlcy5sZW4oKSAvIHRoaXMuX3NuYXBzaG90Ll9lZGdlRmll
bGRzQ291bnQ7CisgICAgfSwKKworICAgIGNsb25lOiBmdW5jdGlvbigpCisgICAgeworICAgICAg
ICByZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RFZGdlV3JhcHBlcih0aGlzLl9z
bmFwc2hvdCwgdGhpcy5fZWRnZXMsIHRoaXMuX2VkZ2VJbmRleCk7CisgICAgfSwKKworICAgIGdl
dCBoYXNOZXh0KCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9lZGdlSW5kZXggPCB0aGlz
Ll9lZGdlcy5sZW4oKTsKKyAgICB9LAorCisgICAgZ2V0IGhhc1N0cmluZ05hbWUoKQorICAgIHsK
KyAgICAgICAgaWYgKCF0aGlzLmlzU2hvcnRjdXQpCisgICAgICAgICAgICByZXR1cm4gdGhpcy5f
aGFzU3RyaW5nTmFtZTsKKyAgICAgICAgcmV0dXJuIGlzTmFOKHBhcnNlSW50KHRoaXMuX25hbWUs
IDEwKSk7CisgICAgfSwKKworICAgIGdldCBpbmRleCgpCisgICAgeworICAgICAgICByZXR1cm4g
dGhpcy5fZWRnZUluZGV4OworICAgIH0sCisKKyAgICBzZXQgaW5kZXgobmV3SW5kZXgpCisgICAg
eworICAgICAgICB0aGlzLl9lZGdlSW5kZXggPSBuZXdJbmRleDsKICAgICB9LAogCiAgICAgZ2V0
IGlzRWxlbWVudCgpCkBAIC01MSwxNCArMTMxLDIyIEBAIFdlYkluc3BlY3Rvci5IZWFwU25hcHNo
b3RFZGdlc0l0ZXJhdG9yLnByb3RvdHlwZSA9IHsKICAgICAgICAgcmV0dXJuIHRoaXMuX3R5cGUo
KSA9PT0gdGhpcy5fc25hcHNob3QuX2VkZ2VIaWRkZW5UeXBlOwogICAgIH0sCiAKLSAgICBnZXQg
bmFtZSgpCisgICAgZ2V0IGlzSW50ZXJuYWwoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMu
aXNFbGVtZW50IHx8IHRoaXMuaXNIaWRkZW4gPyB0aGlzLl9uYW1lT3JJbmRleCgpIDogdGhpcy5f
c25hcHNob3QuX3N0cmluZ3NbdGhpcy5fbmFtZU9ySW5kZXgoKV07CisgICAgICAgIHJldHVybiB0
aGlzLl90eXBlKCkgPT09IHRoaXMuX3NuYXBzaG90Ll9lZGdlSW50ZXJuYWxUeXBlOwogICAgIH0s
CiAKLSAgICBuZXh0OiBmdW5jdGlvbigpCisgICAgZ2V0IGlzU2hvcnRjdXQoKQogICAgIHsKLSAg
ICAgICAgdGhpcy5fZWRnZUluZGV4ICs9IHRoaXMuX3NuYXBzaG90Ll9lZGdlRmllbGRzQ291bnQ7
CisgICAgICAgIHJldHVybiB0aGlzLl90eXBlKCkgPT09IHRoaXMuX3NuYXBzaG90Ll9lZGdlU2hv
cnRjdXRUeXBlOworICAgIH0sCisKKyAgICBnZXQgbmFtZSgpCisgICAgeworICAgICAgICBpZiAo
IXRoaXMuaXNTaG9ydGN1dCkKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9uYW1lOworICAgICAg
ICB2YXIgbnVtTmFtZSA9IHBhcnNlSW50KHRoaXMuX25hbWUsIDEwKTsKKyAgICAgICAgcmV0dXJu
IGlzTmFOKG51bU5hbWUpID8gdGhpcy5fbmFtZSA6IG51bU5hbWU7CiAgICAgfSwKIAogICAgIGdl
dCBub2RlKCkKQEAgLTY4LDMxICsxNTYsMTA1IEBAIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RF
ZGdlc0l0ZXJhdG9yLnByb3RvdHlwZSA9IHsKIAogICAgIGdldCBub2RlSW5kZXgoKQogICAgIHsK
LSAgICAgICAgcmV0dXJuIHRoaXMuX2VkZ2VzW3RoaXMuX2VkZ2VJbmRleCArIHRoaXMuX3NuYXBz
aG90Ll9lZGdlVG9Ob2RlT2Zmc2V0XTsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2VkZ2VzLml0ZW0o
dGhpcy5fZWRnZUluZGV4ICsgdGhpcy5fc25hcHNob3QuX2VkZ2VUb05vZGVPZmZzZXQpOwogICAg
IH0sCiAKLSAgICBfbmFtZU9ySW5kZXg6IGZ1bmN0aW9uKCkKKyAgICBnZXQgcmF3RWRnZXMoKQog
ICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX2VkZ2VzW3RoaXMuX2VkZ2VJbmRleCArIHRoaXMu
X3NuYXBzaG90Ll9lZGdlTmFtZU9mZnNldF07CisgICAgICAgIHJldHVybiB0aGlzLl9lZGdlczsK
KyAgICB9LAorCisgICAgdG9TdHJpbmc6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHN3aXRj
aCAodGhpcy50eXBlKSB7CisgICAgICAgIGNhc2UgImNvbnRleHQiOiByZXR1cm4gIi0+IiArIHRo
aXMubmFtZTsKKyAgICAgICAgY2FzZSAiZWxlbWVudCI6IHJldHVybiAiWyIgKyB0aGlzLm5hbWUg
KyAiXSI7CisgICAgICAgIGNhc2UgInByb3BlcnR5IjoKKyAgICAgICAgICAgIHJldHVybiB0aGlz
Lm5hbWUuaW5kZXhPZigiICIpID09PSAtMSA/ICIuIiArIHRoaXMubmFtZSA6ICJbXCIiICsgdGhp
cy5uYW1lICsgIlwiXSI7CisgICAgICAgIGNhc2UgInNob3J0Y3V0IjoKKyAgICAgICAgICAgIHZh
ciBuYW1lID0gdGhpcy5uYW1lOworICAgICAgICAgICAgaWYgKHR5cGVvZiBuYW1lID09PSAic3Ry
aW5nIikKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5uYW1lLmluZGV4T2YoIiAiKSA9PT0g
LTEgPyAiLiIgKyB0aGlzLm5hbWUgOiAiW1wiIiArIHRoaXMubmFtZSArICJcIl0iOworICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiAiWyIgKyB0aGlzLm5hbWUgKyAiXSI7
CisgICAgICAgIGNhc2UgImludGVybmFsIjoKKyAgICAgICAgY2FzZSAiaGlkZGVuIjoKKyAgICAg
ICAgICAgIHJldHVybiAieyIgKyB0aGlzLm5hbWUgKyAifSI7CisgICAgICAgIH07CisgICAgICAg
IHJldHVybiAiPz8/IjsKKyAgICB9LAorCisgICAgZ2V0IHR5cGUoKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIHRoaXMuX3NuYXBzaG90Ll9lZGdlVHlwZXNbdGhpcy5fdHlwZSgpXTsKKyAgICB9LAor
CisgICAgZ2V0IF9oYXNTdHJpbmdOYW1lKCkKKyAgICB7CisgICAgICAgIHJldHVybiAhdGhpcy5p
c0VsZW1lbnQgJiYgIXRoaXMuaXNIaWRkZW47CisgICAgfSwKKworICAgIGdldCBfbmFtZSgpCisg
ICAgeworICAgICAgICByZXR1cm4gdGhpcy5faGFzU3RyaW5nTmFtZSA/IHRoaXMuX3NuYXBzaG90
Ll9zdHJpbmdzW3RoaXMuX25hbWVPckluZGV4XSA6IHRoaXMuX25hbWVPckluZGV4OworICAgIH0s
CisKKyAgICBnZXQgX25hbWVPckluZGV4KCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9l
ZGdlcy5pdGVtKHRoaXMuX2VkZ2VJbmRleCArIHRoaXMuX3NuYXBzaG90Ll9lZGdlTmFtZU9mZnNl
dCk7CiAgICAgfSwKIAogICAgIF90eXBlOiBmdW5jdGlvbigpCiAgICAgewotICAgICAgICByZXR1
cm4gdGhpcy5fZWRnZXNbdGhpcy5fZWRnZUluZGV4ICsgdGhpcy5fc25hcHNob3QuX2VkZ2VUeXBl
T2Zmc2V0XTsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2VkZ2VzLml0ZW0odGhpcy5fZWRnZUluZGV4
ICsgdGhpcy5fc25hcHNob3QuX2VkZ2VUeXBlT2Zmc2V0KTsKICAgICB9CiB9OwogCiBXZWJJbnNw
ZWN0b3IuSGVhcFNuYXBzaG90Tm9kZVdyYXBwZXIgPSBmdW5jdGlvbihzbmFwc2hvdCwgbm9kZUlu
ZGV4KQogewogICAgIHRoaXMuX3NuYXBzaG90ID0gc25hcHNob3Q7Ci0gICAgdGhpcy5fbm9kZXMg
PSBzbmFwc2hvdC5fbm9kZXM7CiAgICAgdGhpcy5fbm9kZUluZGV4ID0gbm9kZUluZGV4OworICAg
IHRoaXMuX2ZpcnN0Tm9kZUluZGV4ID0gbm9kZUluZGV4OwogfQogCiBXZWJJbnNwZWN0b3IuSGVh
cFNuYXBzaG90Tm9kZVdyYXBwZXIucHJvdG90eXBlID0geworICAgIGJlY29tZURvbWluYXRvcjog
ZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdGhpcy5fbm9kZUluZGV4ID0gdGhpcy5fZG9taW5h
dG9ySW5kZXgoKTsKKyAgICB9LAorCisgICAgYmVjb21lRmlyc3Q6IGZ1bmN0aW9uKCkKKyAgICB7
CisgICAgICAgIHRoaXMuX25vZGVJbmRleCA9IHRoaXMuX2ZpcnN0Tm9kZUluZGV4OworICAgIH0s
CisKKyAgICBiZWNvbWVOZXh0OiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB0aGlzLl9ub2Rl
SW5kZXggPSB0aGlzLl9uZXh0Tm9kZUluZGV4OworICAgIH0sCisKKyAgICBnZXQgY2xhc3NOYW1l
KCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAodGhpcy50eXBlKSB7CisgICAgICAgIGNhc2UgImhp
ZGRlbiI6CisgICAgICAgICAgICByZXR1cm4gV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCIoc3lzdGVt
KSIpOworICAgICAgICBjYXNlICJvYmplY3QiOgorICAgICAgICAgICAgcmV0dXJuIHRoaXMubmFt
ZTsKKyAgICAgICAgY2FzZSAiY29kZSI6CisgICAgICAgICAgICByZXR1cm4gV2ViSW5zcGVjdG9y
LlVJU3RyaW5nKCIoY29tcGlsZWQgY29kZSkiKTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgIHJldHVybiAiKCIgKyB0aGlzLnR5cGUgKyAiKSI7CisgICAgICAgIH0KKyAgICB9LAorCisg
ICAgZ2V0IGRvbWluYXRvcigpCisgICAgeworICAgICAgICByZXR1cm4gbmV3IFdlYkluc3BlY3Rv
ci5IZWFwU25hcHNob3ROb2RlV3JhcHBlcih0aGlzLl9zbmFwc2hvdCwgdGhpcy5fZG9taW5hdG9y
SW5kZXgoKSk7CisgICAgfSwKKwogICAgIGdldCBlZGdlcygpCiAgICAgewotICAgICAgICByZXR1
cm4gbmV3IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RFZGdlc0l0ZXJhdG9yKHRoaXMuX3NuYXBz
aG90LCB0aGlzLl9lZGdlcygpKTsKKyAgICAgICAgcmV0dXJuIG5ldyBXZWJJbnNwZWN0b3IuSGVh
cFNuYXBzaG90RWRnZVdyYXBwZXIodGhpcy5fc25hcHNob3QsIHRoaXMucmF3RWRnZXMpOwogICAg
IH0sCiAKICAgICBnZXQgZWRnZXNDb3VudCgpCkBAIC0xMDAsNiArMjYyLDI2IEBAIFdlYkluc3Bl
Y3Rvci5IZWFwU25hcHNob3ROb2RlV3JhcHBlci5wcm90b3R5cGUgPSB7CiAgICAgICAgIHJldHVy
biB0aGlzLl9ub2Rlc1t0aGlzLl9ub2RlSW5kZXggKyB0aGlzLl9zbmFwc2hvdC5fZWRnZXNDb3Vu
dE9mZnNldF07CiAgICAgfSwKIAorICAgIGdldCBoYXNOZXh0KCkKKyAgICB7CisgICAgICAgIHJl
dHVybiB0aGlzLl9ub2RlSW5kZXggPCB0aGlzLl9zbmFwc2hvdC5fbm9kZXMubGVuZ3RoOworICAg
IH0sCisKKyAgICBnZXQgaWQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX25vZGVzW3Ro
aXMuX25vZGVJbmRleCArIHRoaXMuX3NuYXBzaG90Ll9ub2RlSWRPZmZzZXRdOworICAgIH0sCisK
KyAgICBnZXQgaW5kZXgoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX25vZGVJbmRleDsK
KyAgICB9LAorCisgICAgc2V0IGluZGV4KG5ld0luZGV4KQorICAgIHsKKyAgICAgICAgdGhpcy5f
bm9kZUluZGV4ID0gbmV3SW5kZXg7CisgICAgfSwKKwogICAgIGdldCBpbnN0YW5jZXNDb3VudCgp
CiAgICAgewogICAgICAgICByZXR1cm4gdGhpcy5fbm9kZXNbdGhpcy5fbm9kZUluZGV4ICsgdGhp
cy5fc25hcHNob3QuX25vZGVJbnN0YW5jZXNDb3VudE9mZnNldF07CkBAIC0xMTAsMzYgKzI5Miw3
NSBAQCBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Tm9kZVdyYXBwZXIucHJvdG90eXBlID0gewog
ICAgICAgICByZXR1cm4gdGhpcy5fdHlwZSgpID09PSB0aGlzLl9zbmFwc2hvdC5fbm9kZUhpZGRl
blR5cGU7CiAgICAgfSwKIAorICAgIGdldCBpc1Jvb3QoKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IHRoaXMuX25vZGVJbmRleCA9PT0gdGhpcy5fc25hcHNob3QuX3Jvb3ROb2RlSW5kZXg7CisgICAg
fSwKKwogICAgIGdldCBuYW1lKCkKICAgICB7CiAgICAgICAgIHJldHVybiB0aGlzLl9zbmFwc2hv
dC5fc3RyaW5nc1t0aGlzLl9uYW1lKCldOwogICAgIH0sCiAKKyAgICBnZXQgcmV0YWluZWRTaXpl
KCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9ub2Rlc1t0aGlzLl9ub2RlSW5kZXggKyB0
aGlzLl9zbmFwc2hvdC5fbm9kZVJldGFpbmVkU2l6ZU9mZnNldF07CisgICAgfSwKKworICAgIGdl
dCByZXRhaW5lcnMoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyBXZWJJbnNwZWN0b3IuSGVh
cFNuYXBzaG90RWRnZVdyYXBwZXIodGhpcy5fc25hcHNob3QsIHRoaXMuX3NuYXBzaG90LmdldFJl
dGFpbmVycyh0aGlzKSk7CisgICAgfSwKKwogICAgIGdldCBzZWxmU2l6ZSgpCiAgICAgewogICAg
ICAgICByZXR1cm4gdGhpcy5fbm9kZXNbdGhpcy5fbm9kZUluZGV4ICsgdGhpcy5fc25hcHNob3Qu
X25vZGVTZWxmU2l6ZU9mZnNldF07IAogICAgIH0sCiAKKyAgICBnZXQgdHlwZSgpCisgICAgewor
ICAgICAgICByZXR1cm4gdGhpcy5fc25hcHNob3QuX25vZGVUeXBlc1t0aGlzLl90eXBlKCldOwor
ICAgIH0sCisKKyAgICBfZG9taW5hdG9ySW5kZXg6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAg
IHJldHVybiB0aGlzLl9ub2Rlc1t0aGlzLl9ub2RlSW5kZXggKyB0aGlzLl9zbmFwc2hvdC5fZG9t
aW5hdG9yT2Zmc2V0XTsKKyAgICB9LAorCiAgICAgX25hbWU6IGZ1bmN0aW9uKCkKICAgICB7CiAg
ICAgICAgIHJldHVybiB0aGlzLl9ub2Rlc1t0aGlzLl9ub2RlSW5kZXggKyB0aGlzLl9zbmFwc2hv
dC5fbm9kZU5hbWVPZmZzZXRdOyAKICAgICB9LAogCi0gICAgX2VkZ2VzOiBmdW5jdGlvbigpCisg
ICAgZ2V0IHJhd0VkZ2VzKCkKICAgICB7Ci0gICAgICAgIHZhciBmaXJzdEVkZ2VJbmRleCA9IHRo
aXMuX25vZGVJbmRleCArIHRoaXMuX3NuYXBzaG90Ll9maXJzdEVkZ2VPZmZzZXQ7Ci0gICAgICAg
IHJldHVybiB0aGlzLl9ub2Rlcy5zbGljZShmaXJzdEVkZ2VJbmRleCwgZmlyc3RFZGdlSW5kZXgg
KyB0aGlzLmVkZ2VzQ291bnQgKiB0aGlzLl9zbmFwc2hvdC5fZWRnZUZpZWxkc0NvdW50KTsKKyAg
ICAgICAgdmFyIGZpcnN0RWRnZUluZGV4ID0gdGhpcy5fZmlyc3RFZGdlSW5kZXgoKTsKKyAgICAg
ICAgcmV0dXJuIG5ldyBXZWJJbnNwZWN0b3IuTm9kZXNTbGljZSh0aGlzLl9zbmFwc2hvdCwgZmly
c3RFZGdlSW5kZXgsIGZpcnN0RWRnZUluZGV4ICsgdGhpcy5lZGdlc0NvdW50ICogdGhpcy5fc25h
cHNob3QuX2VkZ2VGaWVsZHNDb3VudCk7CisgICAgfSwKKworICAgIGdldCBfbmV4dE5vZGVJbmRl
eCgpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fZmlyc3RFZGdlSW5kZXgoKSArIHRoaXMu
ZWRnZXNDb3VudCAqIHRoaXMuX3NuYXBzaG90Ll9lZGdlRmllbGRzQ291bnQ7CisgICAgfSwKKwor
ICAgIF9maXJzdEVkZ2VJbmRleDogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRo
aXMuX25vZGVJbmRleCArIHRoaXMuX3NuYXBzaG90Ll9maXJzdEVkZ2VPZmZzZXQ7CiAgICAgfSwK
IAogICAgIF90eXBlOiBmdW5jdGlvbigpCiAgICAgewogICAgICAgICByZXR1cm4gdGhpcy5fbm9k
ZXNbdGhpcy5fbm9kZUluZGV4ICsgdGhpcy5fc25hcHNob3QuX25vZGVUeXBlT2Zmc2V0XTsKKyAg
ICB9LAorICAgIAorICAgIGdldCBfbm9kZXMoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMu
X3NuYXBzaG90Ll9ub2RlczsKICAgICB9CiB9OwogCiBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90
ID0gZnVuY3Rpb24ocHJvZmlsZSkKIHsKLSAgICB0aGlzLl9wcm9maWxlID0gcHJvZmlsZTsKICAg
ICB0aGlzLl9ub2RlcyA9IHByb2ZpbGUubm9kZXM7CiAgICAgdGhpcy5fc3RyaW5ncyA9IHByb2Zp
bGUuc3RyaW5nczsKIApAQCAtMTU3LDYgKzM3OCw4IEBAIFdlYkluc3BlY3Rvci5IZWFwU25hcHNo
b3QucHJvdG90eXBlID0gewogICAgICAgICB0aGlzLl9ub2RlSWRPZmZzZXQgPSBtZXRhLmZpZWxk
cy5pbmRleE9mKCJpZCIpOwogICAgICAgICB0aGlzLl9ub2RlSW5zdGFuY2VzQ291bnRPZmZzZXQg
PSB0aGlzLl9ub2RlSWRPZmZzZXQ7CiAgICAgICAgIHRoaXMuX25vZGVTZWxmU2l6ZU9mZnNldCA9
IG1ldGEuZmllbGRzLmluZGV4T2YoInNlbGZfc2l6ZSIpOworICAgICAgICB0aGlzLl9ub2RlUmV0
YWluZWRTaXplT2Zmc2V0ID0gbWV0YS5maWVsZHMuaW5kZXhPZigicmV0YWluZWRfc2l6ZSIpOwor
ICAgICAgICB0aGlzLl9kb21pbmF0b3JPZmZzZXQgPSBtZXRhLmZpZWxkcy5pbmRleE9mKCJkb21p
bmF0b3IiKTsKICAgICAgICAgdGhpcy5fZWRnZXNDb3VudE9mZnNldCA9IG1ldGEuZmllbGRzLmlu
ZGV4T2YoImNoaWxkcmVuX2NvdW50Iik7CiAgICAgICAgIHRoaXMuX2ZpcnN0RWRnZU9mZnNldCA9
IG1ldGEuZmllbGRzLmluZGV4T2YoImNoaWxkcmVuIik7CiAgICAgICAgIHRoaXMuX25vZGVUeXBl
cyA9IG1ldGEudHlwZXNbdGhpcy5fbm9kZVR5cGVPZmZzZXRdOwpAQCAtMTY5LDEwICszOTIsNTA1
IEBAIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3QucHJvdG90eXBlID0gewogICAgICAgICB0aGlz
Ll9lZGdlVHlwZXMgPSBlZGdlc01ldGEudHlwZXNbdGhpcy5fZWRnZVR5cGVPZmZzZXRdOwogICAg
ICAgICB0aGlzLl9lZGdlRWxlbWVudFR5cGUgPSB0aGlzLl9lZGdlVHlwZXMuaW5kZXhPZigiZWxl
bWVudCIpOwogICAgICAgICB0aGlzLl9lZGdlSGlkZGVuVHlwZSA9IHRoaXMuX2VkZ2VUeXBlcy5p
bmRleE9mKCJoaWRkZW4iKTsKKyAgICAgICAgdGhpcy5fZWRnZUludGVybmFsVHlwZSA9IHRoaXMu
X2VkZ2VUeXBlcy5pbmRleE9mKCJpbnRlcm5hbCIpOworICAgICAgICB0aGlzLl9lZGdlU2hvcnRj
dXRUeXBlID0gdGhpcy5fZWRnZVR5cGVzLmluZGV4T2YoInNob3J0Y3V0Iik7CisgICAgfSwKKwor
ICAgIGRpc3Bvc2U6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIGRlbGV0ZSB0aGlzLl9ub2Rl
czsKKyAgICAgICAgZGVsZXRlIHRoaXMuX3N0cmluZ3M7CisgICAgICAgIGlmICh0aGlzLl9pZHNN
YXApCisgICAgICAgICAgICBkZWxldGUgdGhpcy5faWRzTWFwOworICAgICAgICBpZiAodGhpcy5f
cmV0YWluZXJzKSB7CisgICAgICAgICAgICBkZWxldGUgdGhpcy5fcmV0YWluZXJzOworICAgICAg
ICAgICAgZGVsZXRlIHRoaXMuX25vZGVzVG9SZXRhaW5lcnM7CisgICAgICAgIH0KKyAgICAgICAg
aWYgKHRoaXMuX2FnZ3JlZ2F0ZXMpIHsKKyAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9hZ2dyZWdh
dGVzOworICAgICAgICAgICAgdGhpcy5fYWdncmVnYXRlc1dpdGhJbmRleGVzID0gZmFsc2U7Cisg
ICAgICAgIH0KKyAgICB9LAorCisgICAgcmVzdG9yZTogZnVuY3Rpb24ocHJvZmlsZSkKKyAgICB7
CisgICAgICAgIHRoaXMuX25vZGVzID0gcHJvZmlsZS5ub2RlczsKKyAgICAgICAgdGhpcy5fc3Ry
aW5ncyA9IHByb2ZpbGUuc3RyaW5nczsKKyAgICB9LAorCisgICAgZ2V0IHJvb3ROb2RlKCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBuZXcgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdE5vZGVXcmFw
cGVyKHRoaXMsIHRoaXMuX3Jvb3ROb2RlSW5kZXgpOworICAgIH0sCisKKyAgICBnZXQgaWRzTWFw
KCkKKyAgICB7CisgICAgICAgIGlmICh0aGlzLl9pZHNNYXApCisgICAgICAgICAgICByZXR1cm4g
dGhpcy5faWRzTWFwOworCisgICAgICAgIHRoaXMuX2lkc01hcCA9IFtdOworICAgICAgICBmb3Ig
KHZhciBub2RlID0gdGhpcy5yb290Tm9kZTsgbm9kZS5oYXNOZXh0OyBub2RlLmJlY29tZU5leHQo
KSkgeworICAgICAgICAgICAgdGhpcy5faWRzTWFwW25vZGUuaWRdID0gdHJ1ZTsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gdGhpcy5faWRzTWFwOworICAgIH0sCisKKyAgICBnZXRSZXRhaW5l
cnM6IGZ1bmN0aW9uKG5vZGUpCisgICAgeworICAgICAgICBpZiAoIXRoaXMuX3JldGFpbmVycykK
KyAgICAgICAgICAgIHRoaXMuX2J1aWxkUmV0YWluZXJzKCk7CisgICAgICAgIHZhciByZXRJbmRl
eEZyb20gPSB0aGlzLl9ub2Rlc1RvUmV0YWluZXJzW25vZGUuX25vZGVJbmRleF07CisgICAgICAg
IHZhciByZXRJbmRleFRvID0gdGhpcy5fbm9kZXNUb1JldGFpbmVyc1tub2RlLl9uZXh0Tm9kZUlu
ZGV4XTsKKyAgICAgICAgcmV0dXJuIG5ldyBXZWJJbnNwZWN0b3IuUmV0YWluZXJzU2xpY2UodGhp
cywgcmV0SW5kZXhGcm9tLCByZXRJbmRleFRvKTsKKyAgICB9LAorCisgICAgZ2V0U3VtT2ZTZWxm
U2l6ZXM6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHZhciBzdW0gPSAwOworICAgICAgICBm
b3IgKHZhciBub2RlID0gdGhpcy5yb290Tm9kZTsgbm9kZS5oYXNOZXh0OyBub2RlLmJlY29tZU5l
eHQoKSkgeworICAgICAgICAgICAgc3VtICs9IG5vZGUuc2VsZlNpemU7CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIHN1bTsKKyAgICB9LAorCisgICAgZ2V0QWdncmVnYXRlczogZnVuY3Rpb24o
d2l0aE5vZGVJbmRleGVzKQorICAgIHsKKyAgICAgICAgaWYgKCF0aGlzLl9hZ2dyZWdhdGVzKQor
ICAgICAgICAgICAgdGhpcy5fYnVpbGRBZ2dyZWdhdGVzKCk7CisgICAgICAgIGlmICh3aXRoTm9k
ZUluZGV4ZXMgJiYgIXRoaXMuX2FnZ3JlZ2F0ZXNXaXRoSW5kZXhlcykKKyAgICAgICAgICAgIHRo
aXMuX2J1aWxkQWdncmVnYXRlc0luZGV4ZXMoKTsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2FnZ3Jl
Z2F0ZXM7CisgICAgfSwKKworICAgIF9idWlsZFJldGFpbmVyczogZnVuY3Rpb24oKQorICAgIHsK
KyAgICAgICAgdGhpcy5fbm9kZXNUb1JldGFpbmVycyA9IFtdOworICAgICAgICBmb3IgKHZhciBu
b2RlID0gdGhpcy5yb290Tm9kZTsgbm9kZS5oYXNOZXh0OyBub2RlLmJlY29tZU5leHQoKSkgewor
ICAgICAgICAgICAgaWYgKCEobm9kZS5fbm9kZUluZGV4IGluIHRoaXMuX25vZGVzVG9SZXRhaW5l
cnMpKQorICAgICAgICAgICAgICAgIHRoaXMuX25vZGVzVG9SZXRhaW5lcnNbbm9kZS5fbm9kZUlu
ZGV4XSA9IDA7CisgICAgICAgICAgICBmb3IgKHZhciBlZGdlID0gbm9kZS5lZGdlczsgZWRnZS5o
YXNOZXh0OyBlZGdlLmJlY29tZU5leHQoKSkgeworICAgICAgICAgICAgICAgIHZhciBub2RlSW5k
ZXggPSBlZGdlLm5vZGVJbmRleDsKKyAgICAgICAgICAgICAgICBpZiAoIShub2RlSW5kZXggaW4g
dGhpcy5fbm9kZXNUb1JldGFpbmVycykpCisgICAgICAgICAgICAgICAgICAgIHRoaXMuX25vZGVz
VG9SZXRhaW5lcnNbbm9kZUluZGV4XSA9IDA7CisgICAgICAgICAgICAgICAgdGhpcy5fbm9kZXNU
b1JldGFpbmVyc1tub2RlSW5kZXhdICs9IHRoaXMuX2VkZ2VGaWVsZHNDb3VudDsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgICBub2RlID0gdGhpcy5yb290Tm9kZTsKKyAgICAgICAg
dmFyIHByZXZJbmRleCA9IHRoaXMuX25vZGVzVG9SZXRhaW5lcnNbbm9kZS5fbm9kZUluZGV4XSA9
IDA7CisgICAgICAgIHZhciBwcmV2UmV0c0NvdW50ID0gdGhpcy5fbm9kZXNUb1JldGFpbmVyc1tu
b2RlLl9ub2RlSW5kZXhdOworICAgICAgICBub2RlLmJlY29tZU5leHQoKTsKKyAgICAgICAgZm9y
ICg7IG5vZGUuaGFzTmV4dDsgbm9kZS5iZWNvbWVOZXh0KCkpIHsKKyAgICAgICAgICAgIHZhciBz
YXZlZFJlZnNDb3VudCA9IHRoaXMuX25vZGVzVG9SZXRhaW5lcnNbbm9kZS5fbm9kZUluZGV4XTsK
KyAgICAgICAgICAgIGlmICghc2F2ZWRSZWZzQ291bnQgJiYgc2F2ZWRSZWZzQ291bnQgIT09IDAp
IGRlYnVnZ2VyOworICAgICAgICAgICAgdGhpcy5fbm9kZXNUb1JldGFpbmVyc1tub2RlLl9ub2Rl
SW5kZXhdID0gcHJldkluZGV4ICsgcHJldlJldHNDb3VudDsKKyAgICAgICAgICAgIHByZXZJbmRl
eCA9IHRoaXMuX25vZGVzVG9SZXRhaW5lcnNbbm9kZS5fbm9kZUluZGV4XTsKKyAgICAgICAgICAg
IGlmICghcHJldkluZGV4ICYmIHByZXZJbmRleCAhPT0gMCkgZGVidWdnZXI7CisgICAgICAgICAg
ICBwcmV2UmV0c0NvdW50ID0gc2F2ZWRSZWZzQ291bnQ7CisgICAgICAgIH0KKyAgICAgICAgdGhp
cy5fcmV0YWluZXJzID0gbmV3IEFycmF5KHByZXZJbmRleCArIHByZXZSZXRzQ291bnQpOworICAg
ICAgICB0aGlzLl9ub2Rlc1RvUmV0YWluZXJzW3RoaXMuX25vZGVzLmxlbmd0aF0gPSB0aGlzLl9y
ZXRhaW5lcnMubGVuZ3RoOworICAgICAgICBmb3IgKG5vZGUgPSB0aGlzLnJvb3ROb2RlOyBub2Rl
Lmhhc05leHQ7IG5vZGUuYmVjb21lTmV4dCgpKSB7CisgICAgICAgICAgICB2YXIgcmV0c0NvdW50
ID0gdGhpcy5fbm9kZXNUb1JldGFpbmVyc1tub2RlLl9uZXh0Tm9kZUluZGV4XSAtIHRoaXMuX25v
ZGVzVG9SZXRhaW5lcnNbbm9kZS5fbm9kZUluZGV4XTsKKyAgICAgICAgICAgIGlmIChyZXRzQ291
bnQgPiAwKSB7CisgICAgICAgICAgICAgICAgdGhpcy5fcmV0YWluZXJzW3RoaXMuX25vZGVzVG9S
ZXRhaW5lcnNbbm9kZS5fbm9kZUluZGV4XV0gPSByZXRzQ291bnQ7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgICAgZm9yIChub2RlID0gdGhpcy5yb290Tm9kZTsgbm9kZS5oYXNOZXh0
OyBub2RlLmJlY29tZU5leHQoKSkgeworICAgICAgICAgICAgZm9yICh2YXIgZWRnZSA9IG5vZGUu
ZWRnZXM7IGVkZ2UuaGFzTmV4dDsgZWRnZS5iZWNvbWVOZXh0KCkpIHsKKyAgICAgICAgICAgICAg
ICB2YXIgbm9kZUluZGV4ID0gZWRnZS5ub2RlSW5kZXg7CisgICAgICAgICAgICAgICAgdmFyIHJl
dEluZGV4ID0gdGhpcy5fbm9kZXNUb1JldGFpbmVyc1tub2RlSW5kZXhdOworICAgICAgICAgICAg
ICAgIHRoaXMuX3JldGFpbmVyc1tyZXRJbmRleF0gLT0gdGhpcy5fZWRnZUZpZWxkc0NvdW50Owor
ICAgICAgICAgICAgICAgIHZhciBpZHggPSByZXRJbmRleCArIHRoaXMuX3JldGFpbmVyc1tyZXRJ
bmRleF07CisgICAgICAgICAgICAgICAgdGhpcy5fcmV0YWluZXJzW2lkeCArIHRoaXMuX2VkZ2VU
eXBlT2Zmc2V0XSA9IGVkZ2UuX3R5cGUoKTsKKyAgICAgICAgICAgICAgICB0aGlzLl9yZXRhaW5l
cnNbaWR4ICsgdGhpcy5fZWRnZU5hbWVPZmZzZXRdID0gZWRnZS5fbmFtZU9ySW5kZXg7CisgICAg
ICAgICAgICAgICAgdGhpcy5fcmV0YWluZXJzW2lkeCArIHRoaXMuX2VkZ2VUb05vZGVPZmZzZXRd
ID0gbm9kZS5fbm9kZUluZGV4OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSwKKwor
ICAgIF9idWlsZEFnZ3JlZ2F0ZXM6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHRoaXMuX2Fn
Z3JlZ2F0ZXMgPSB7fTsKKyAgICAgICAgZm9yICh2YXIgbm9kZSA9IHRoaXMucm9vdE5vZGU7IG5v
ZGUuaGFzTmV4dDsgbm9kZS5iZWNvbWVOZXh0KCkpIHsKKyAgICAgICAgICAgIHZhciBjbGFzc05h
bWUgPSBub2RlLmNsYXNzTmFtZTsKKyAgICAgICAgICAgIHZhciBuYW1lTWF0dGVycyA9IG5vZGUu
dHlwZSA9PT0gIm9iamVjdCI7CisgICAgICAgICAgICBpZiAobm9kZS5zZWxmU2l6ZSA9PT0gMCkK
KyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmICghKGNsYXNzTmFtZSBp
biB0aGlzLl9hZ2dyZWdhdGVzKSkKKyAgICAgICAgICAgICAgICB0aGlzLl9hZ2dyZWdhdGVzW2Ns
YXNzTmFtZV0gPSB7IGNvdW50OiAwLCBzZWxmOiAwLCBtYXhSZXQ6IDAsIHR5cGU6IG5vZGUudHlw
ZSwgbmFtZTogbmFtZU1hdHRlcnMgPyBub2RlLm5hbWUgOiBudWxsLCBpZHhzOiBbXSB9OworICAg
ICAgICAgICAgdmFyIGNsc3MgPSB0aGlzLl9hZ2dyZWdhdGVzW2NsYXNzTmFtZV07CisgICAgICAg
ICAgICArK2Nsc3MuY291bnQ7CisgICAgICAgICAgICBjbHNzLnNlbGYgKz0gbm9kZS5zZWxmU2l6
ZTsKKyAgICAgICAgICAgIGlmIChub2RlLnJldGFpbmVkU2l6ZSA+IGNsc3MubWF4UmV0KQorICAg
ICAgICAgICAgICAgIGNsc3MubWF4UmV0ID0gbm9kZS5yZXRhaW5lZFNpemU7CisgICAgICAgIH0K
KyAgICB9LAorCisgICAgX2J1aWxkQWdncmVnYXRlc0luZGV4ZXM6IGZ1bmN0aW9uKCkKKyAgICB7
CisgICAgICAgIGZvciAodmFyIG5vZGUgPSB0aGlzLnJvb3ROb2RlOyBub2RlLmhhc05leHQ7IG5v
ZGUuYmVjb21lTmV4dCgpKSB7CisgICAgICAgICAgICB2YXIgY2xhc3NOYW1lID0gbm9kZS5jbGFz
c05hbWU7CisgICAgICAgICAgICB2YXIgY2xzcyA9IHRoaXMuX2FnZ3JlZ2F0ZXNbY2xhc3NOYW1l
XTsKKyAgICAgICAgICAgIGlmIChjbHNzKQorICAgICAgICAgICAgICAgIGNsc3MuaWR4cy5wdXNo
KG5vZGUuX25vZGVJbmRleCk7CisgICAgICAgIH0KKworICAgICAgICB2YXIgbm9kZUEgPSBuZXcg
V2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdE5vZGVXcmFwcGVyKHRoaXMpOworICAgICAgICB2YXIg
bm9kZUIgPSBuZXcgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdE5vZGVXcmFwcGVyKHRoaXMpOwor
ICAgICAgICBmb3IgKHZhciBjbHNzIGluIHRoaXMuX2FnZ3JlZ2F0ZXMpCisgICAgICAgICAgICB0
aGlzLl9hZ2dyZWdhdGVzW2Nsc3NdLmlkeHMuc29ydCgKKyAgICAgICAgICAgICAgICBmdW5jdGlv
bihpZHhBLCBpZHhCKSB7CisgICAgICAgICAgICAgICAgICAgIG5vZGVBLl9ub2RlSW5kZXggPSBp
ZHhBOworICAgICAgICAgICAgICAgICAgICBub2RlQi5fbm9kZUluZGV4ID0gaWR4QjsKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIG5vZGVBLmlkIDwgbm9kZUIuaWQgPyAtMSA6IDE7CisgICAg
ICAgICAgICAgICAgfSk7CisKKyAgICAgICAgdGhpcy5fYWdncmVnYXRlc1dpdGhJbmRleGVzID0g
dHJ1ZTsKKyAgICB9Cit9OworCitXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90R2VuZXJpY1Byb3Zp
ZGVyID0gZnVuY3Rpb24oc25hcHNob3QsIGVudGl0aWVzLCBmaWx0ZXIpCit7CisgICAgdGhpcy5f
c25hcHNob3QgPSBzbmFwc2hvdDsKKyAgICB0aGlzLl9maWx0ZXIgPSBmaWx0ZXI7CisgICAgdGhp
cy5fZW50aXRpZXMgPSBlbnRpdGllczsKKyAgICB0aGlzLl9pdGVyYXRpb25PcmRlciA9IG51bGw7
CisgICAgdGhpcy5fcG9zaXRpb24gPSAwOworICAgIHRoaXMuX2xhc3RDb21wYXJhdG9yID0gbnVs
bDsKK30KKworV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdEdlbmVyaWNQcm92aWRlci5wcm90b3R5
cGUgPSB7CisgICAgZ2V0IGNvdW50KCkKKyAgICB7CisgICAgICAgIGlmICghdGhpcy5faXRlcmF0
aW9uT3JkZXIpCisgICAgICAgICAgICB0aGlzLl9jcmVhdGVJdGVyYXRpb25PcmRlcigpOworICAg
ICAgICByZXR1cm4gdGhpcy5faXRlcmF0aW9uT3JkZXIubGVuZ3RoOworICAgIH0sCisKKyAgICBf
Y3JlYXRlSXRlcmF0aW9uT3JkZXI6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHRoaXMuX2l0
ZXJhdGlvbk9yZGVyID0gW107CisgICAgICAgIHZhciBlbnRpdGllcyA9IHRoaXMuX2VudGl0aWVz
OworICAgICAgICBpZiAoIXRoaXMuX2ZpbHRlcikgeworICAgICAgICAgICAgZm9yIChlbnRpdGll
cy5iZWNvbWVGaXJzdCgpOyBlbnRpdGllcy5oYXNOZXh0OyBlbnRpdGllcy5iZWNvbWVOZXh0KCkp
CisgICAgICAgICAgICAgICAgdGhpcy5faXRlcmF0aW9uT3JkZXIucHVzaChlbnRpdGllcy5pbmRl
eCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBmb3IgKGVudGl0aWVzLmJlY29tZUZp
cnN0KCk7IGVudGl0aWVzLmhhc05leHQ7IGVudGl0aWVzLmJlY29tZU5leHQoKSkgeworICAgICAg
ICAgICAgICAgIGlmICh0aGlzLl9maWx0ZXIoZW50aXRpZXMpKQorICAgICAgICAgICAgICAgICAg
ICB0aGlzLl9pdGVyYXRpb25PcmRlci5wdXNoKGVudGl0aWVzLmluZGV4KTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0sCisKKyAgICBnZXQgZW1wdHkoKQorICAgIHsKKyAgICAgICAg
aWYgKHRoaXMuX2l0ZXJhdGlvbk9yZGVyKQorICAgICAgICAgICAgcmV0dXJuICF0aGlzLmNvdW50
OworICAgICAgICBpZiAoIXRoaXMuX2ZpbHRlcikKKyAgICAgICAgICAgIHJldHVybiAhdGhpcy5f
ZW50aXRpZXMuY291bnQ7CisgICAgICAgIHZhciBlbnRpdGllcyA9IHRoaXMuX2VudGl0aWVzOwor
ICAgICAgICBmb3IgKGVudGl0aWVzLmJlY29tZUZpcnN0KCk7IGVudGl0aWVzLmhhc05leHQ7IGVu
dGl0aWVzLmJlY29tZU5leHQoKSkKKyAgICAgICAgICAgIGlmICh0aGlzLl9maWx0ZXIoZW50aXRp
ZXMpKSByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiB0cnVlOyAgICAgICAgCisgICAgfSwK
KworICAgIGdldCBmaXJzdCgpCisgICAgeworICAgICAgICB0aGlzLl9wb3NpdGlvbiA9IDA7Cisg
ICAgICAgIHJldHVybiB0aGlzLm5leHQ7CisgICAgfSwKKworICAgIGdldCBsYXN0Q29tcGFyYXRv
cigpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fbGFzdENvbXBhcmF0b3I7CisgICAgfSwK
KworICAgIGdldCBuZXh0KCkKKyAgICB7CisgICAgICAgIGlmICh0aGlzLl9wb3NpdGlvbiA8IHRo
aXMuX2l0ZXJhdGlvbk9yZGVyLmxlbmd0aCkgeworICAgICAgICAgICAgdGhpcy5fZW50aXRpZXMu
aW5kZXggPSB0aGlzLl9pdGVyYXRpb25PcmRlclt0aGlzLl9wb3NpdGlvbisrXTsKKyAgICAgICAg
ICAgIHJldHVybiB0aGlzLl9lbnRpdGllczsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBy
ZXR1cm4gbnVsbDsKKyAgICB9Cit9CisKK1dlYkluc3BlY3Rvci5IZWFwU25hcHNob3RHZW5lcmlj
UHJvdmlkZXIucHJvdG90eXBlLmNyZWF0ZUNvbXBhcmF0b3IgPSBmdW5jdGlvbihmaWVsZE5hbWVz
KQoreworICAgIHJldHVybiB7ZmllbGROYW1lMTpmaWVsZE5hbWVzWzBdLCBhc2NlbmRpbmcxOmZp
ZWxkTmFtZXNbMV0sIGZpZWxkTmFtZTI6ZmllbGROYW1lc1syXSwgYXNjZW5kaW5nMjpmaWVsZE5h
bWVzWzNdfTsKK30KKworV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdEVkZ2VzUHJvdmlkZXIgPSBm
dW5jdGlvbihzbmFwc2hvdCwgcmF3RWRnZXMsIGZpbHRlcikKK3sKKyAgICBXZWJJbnNwZWN0b3Iu
SGVhcFNuYXBzaG90R2VuZXJpY1Byb3ZpZGVyLmNhbGwodGhpcywgc25hcHNob3QsIG5ldyBXZWJJ
bnNwZWN0b3IuSGVhcFNuYXBzaG90RWRnZVdyYXBwZXIoc25hcHNob3QsIHJhd0VkZ2VzKSwgZmls
dGVyKTsKK30KKworV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdEVkZ2VzUHJvdmlkZXIucHJvdG90
eXBlID0geworICAgIHNvcnQ6IGZ1bmN0aW9uKGNvbXBhcmF0b3IpCisgICAgeworICAgICAgICBp
ZiAodGhpcy5fbGFzdENvbXBhcmF0b3IgPT09IGNvbXBhcmF0b3IpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIHRoaXMuX2xhc3RDb21wYXJhdG9yID0gY29tcGFyYXRvcjsKKyAg
ICAgICAgdmFyIGZpZWxkTmFtZTEgPSBjb21wYXJhdG9yLmZpZWxkTmFtZTE7CisgICAgICAgIHZh
ciBmaWVsZE5hbWUyID0gY29tcGFyYXRvci5maWVsZE5hbWUyOworICAgICAgICB2YXIgYXNjZW5k
aW5nMSA9IGNvbXBhcmF0b3IuYXNjZW5kaW5nMTsKKyAgICAgICAgdmFyIGFzY2VuZGluZzIgPSBj
b21wYXJhdG9yLmFzY2VuZGluZzI7CisKKyAgICAgICAgdmFyIGVkZ2VBID0gdGhpcy5fZW50aXRp
ZXMuY2xvbmUoKTsKKyAgICAgICAgdmFyIGVkZ2VCID0gdGhpcy5fZW50aXRpZXMuY2xvbmUoKTsK
KyAgICAgICAgdmFyIG5vZGVBID0gbmV3IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3ROb2RlV3Jh
cHBlcih0aGlzLl9zbmFwc2hvdCk7CisgICAgICAgIHZhciBub2RlQiA9IG5ldyBXZWJJbnNwZWN0
b3IuSGVhcFNuYXBzaG90Tm9kZVdyYXBwZXIodGhpcy5fc25hcHNob3QpOworCisgICAgICAgIGZ1
bmN0aW9uIHNvcnRCeUVkZ2VGaWVsZE5hbWUoYXNjZW5kaW5nLCBpbmRleEEsIGluZGV4QikKKyAg
ICAgICAgeworICAgICAgICAgICAgZWRnZUEuX2VkZ2VJbmRleCA9IGluZGV4QTsKKyAgICAgICAg
ICAgIGVkZ2VCLl9lZGdlSW5kZXggPSBpbmRleEI7CisgICAgICAgICAgICBpZiAoZWRnZUIubmFt
ZSA9PT0gIl9fcHJvdG9fXyIpIHJldHVybiAtMTsKKyAgICAgICAgICAgIGlmIChlZGdlQS5uYW1l
ID09PSAiX19wcm90b19fIikgcmV0dXJuIDE7CisgICAgICAgICAgICB2YXIgcmVzdWx0ID0KKyAg
ICAgICAgICAgICAgICBlZGdlQS5oYXNTdHJpbmdOYW1lID09PSBlZGdlQi5oYXNTdHJpbmdOYW1l
ID8KKyAgICAgICAgICAgICAgICAoZWRnZUEubmFtZSA8IGVkZ2VCLm5hbWUgPyAtMSA6IChlZGdl
QS5uYW1lID4gZWRnZUIubmFtZSA/IDEgOiAwKSkgOgorICAgICAgICAgICAgICAgIChlZGdlQS5o
YXNTdHJpbmdOYW1lID8gLTEgOiAxKTsKKyAgICAgICAgICAgIHJldHVybiBhc2NlbmRpbmcgPyBy
ZXN1bHQgOiAtcmVzdWx0OworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gc29ydEJ5Tm9k
ZUZpZWxkKGZpZWxkTmFtZSwgYXNjZW5kaW5nLCBpbmRleEEsIGluZGV4QikKKyAgICAgICAgewor
ICAgICAgICAgICAgZWRnZUEuX2VkZ2VJbmRleCA9IGluZGV4QTsKKyAgICAgICAgICAgIGVkZ2VC
Ll9lZGdlSW5kZXggPSBpbmRleEI7CisgICAgICAgICAgICBub2RlQS5fbm9kZUluZGV4ID0gZWRn
ZUEubm9kZUluZGV4OworICAgICAgICAgICAgbm9kZUIuX25vZGVJbmRleCA9IGVkZ2VCLm5vZGVJ
bmRleDsKKyAgICAgICAgICAgIHZhciB2YWx1ZUEgPSBub2RlQVtmaWVsZE5hbWVdOworICAgICAg
ICAgICAgdmFyIHZhbHVlQiA9IG5vZGVCW2ZpZWxkTmFtZV07CisgICAgICAgICAgICB2YXIgcmVz
dWx0ID0gdmFsdWVBIDwgdmFsdWVCID8gLTEgOiAodmFsdWVBID4gdmFsdWVCID8gMSA6IDApOwor
ICAgICAgICAgICAgcmV0dXJuIGFzY2VuZGluZyA/IHJlc3VsdCA6IC1yZXN1bHQ7CisgICAgICAg
IH0KKworICAgICAgICBpZiAoIXRoaXMuX2l0ZXJhdGlvbk9yZGVyKQorICAgICAgICAgICAgdGhp
cy5fY3JlYXRlSXRlcmF0aW9uT3JkZXIoKTsKKworICAgICAgICBpZiAoZmllbGROYW1lMSA9PT0g
IiFlZGdlTmFtZSIpCisgICAgICAgICAgICB0aGlzLl9pdGVyYXRpb25PcmRlci5zb3J0KAorICAg
ICAgICAgICAgICAgIGZ1bmN0aW9uKGluZGV4QSwgaW5kZXhCKSB7CisgICAgICAgICAgICAgICAg
ICAgIHZhciByZXN1bHQgPSBzb3J0QnlFZGdlRmllbGROYW1lKGFzY2VuZGluZzEsIGluZGV4QSwg
aW5kZXhCKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCA9PT0gMCkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJlc3VsdCA9IHNvcnRCeU5vZGVGaWVsZChmaWVsZE5hbWUyLCBhc2Nl
bmRpbmcyLCBpbmRleEEsIGluZGV4Qik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgIGVsc2UgaWYgKGZpZWxkTmFtZTIgPT09
ICIhZWRnZU5hbWUiKQorICAgICAgICAgICAgdGhpcy5faXRlcmF0aW9uT3JkZXIuc29ydCgKKyAg
ICAgICAgICAgICAgICBmdW5jdGlvbihpbmRleEEsIGluZGV4QikgeworICAgICAgICAgICAgICAg
ICAgICB2YXIgcmVzdWx0ID0gc29ydEJ5Tm9kZUZpZWxkKGZpZWxkTmFtZTEsIGFzY2VuZGluZzEs
IGluZGV4QSwgaW5kZXhCKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCA9PT0gMCkK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHNvcnRCeUVkZ2VGaWVsZE5hbWUoYXNj
ZW5kaW5nMiwgaW5kZXhBLCBpbmRleEIpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgICAgICAgICAgICAgIH0pOworICAgICAgICBlbHNlCisgICAgICAgICAgICB0aGlz
Ll9pdGVyYXRpb25PcmRlci5zb3J0KAorICAgICAgICAgICAgICAgIGZ1bmN0aW9uKGluZGV4QSwg
aW5kZXhCKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSBzb3J0QnlOb2RlRmll
bGQoZmllbGROYW1lMSwgYXNjZW5kaW5nMSwgaW5kZXhBLCBpbmRleEIpOworICAgICAgICAgICAg
ICAgICAgICBpZiAocmVzdWx0ID09PSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0
ID0gc29ydEJ5Tm9kZUZpZWxkKGZpZWxkTmFtZTIsIGFzY2VuZGluZzIsIGluZGV4QSwgaW5kZXhC
KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgICAgICB9
KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorfTsKKworV2ViSW5zcGVjdG9yLkhlYXBT
bmFwc2hvdEVkZ2VzUHJvdmlkZXIucHJvdG90eXBlLl9fcHJvdG9fXyA9IFdlYkluc3BlY3Rvci5I
ZWFwU25hcHNob3RHZW5lcmljUHJvdmlkZXIucHJvdG90eXBlOworCitXZWJJbnNwZWN0b3IuSGVh
cFNuYXBzaG90Tm9kZXNQcm92aWRlciA9IGZ1bmN0aW9uKHNuYXBzaG90LCBub2RlcywgZmlsdGVy
KQoreworICAgIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RHZW5lcmljUHJvdmlkZXIuY2FsbCh0
aGlzLCBzbmFwc2hvdCwgbm9kZXMsIGZpbHRlcik7Cit9CisKK1dlYkluc3BlY3Rvci5IZWFwU25h
cHNob3ROb2Rlc1Byb3ZpZGVyLnByb3RvdHlwZSA9IHsKKyAgICBzb3J0OiBmdW5jdGlvbihjb21w
YXJhdG9yKQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMuX2xhc3RDb21wYXJhdG9yID09PSBjb21w
YXJhdG9yKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB0aGlzLl9sYXN0Q29t
cGFyYXRvciA9IGNvbXBhcmF0b3I7CisgICAgICAgIHZhciBmaWVsZE5hbWUxID0gY29tcGFyYXRv
ci5maWVsZE5hbWUxOworICAgICAgICB2YXIgZmllbGROYW1lMiA9IGNvbXBhcmF0b3IuZmllbGRO
YW1lMjsKKyAgICAgICAgdmFyIGFzY2VuZGluZzEgPSBjb21wYXJhdG9yLmFzY2VuZGluZzE7Cisg
ICAgICAgIHZhciBhc2NlbmRpbmcyID0gY29tcGFyYXRvci5hc2NlbmRpbmcyOworCisgICAgICAg
IHZhciBub2RlQSA9IG5ldyBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Tm9kZVdyYXBwZXIodGhp
cy5fc25hcHNob3QpOworICAgICAgICB2YXIgbm9kZUIgPSBuZXcgV2ViSW5zcGVjdG9yLkhlYXBT
bmFwc2hvdE5vZGVXcmFwcGVyKHRoaXMuX3NuYXBzaG90KTsKKworICAgICAgICBmdW5jdGlvbiBz
b3J0QnlOb2RlRmllbGQoZmllbGROYW1lLCBhc2NlbmRpbmcsIGluZGV4QSwgaW5kZXhCKQorICAg
ICAgICB7CisgICAgICAgICAgICBub2RlQS5fbm9kZUluZGV4ID0gaW5kZXhBOworICAgICAgICAg
ICAgbm9kZUIuX25vZGVJbmRleCA9IGluZGV4QjsKKyAgICAgICAgICAgIHZhciB2YWx1ZUEgPSBu
b2RlQVtmaWVsZE5hbWVdOworICAgICAgICAgICAgdmFyIHZhbHVlQiA9IG5vZGVCW2ZpZWxkTmFt
ZV07CisgICAgICAgICAgICB2YXIgcmVzdWx0ID0gdmFsdWVBIDwgdmFsdWVCID8gLTEgOiAodmFs
dWVBID4gdmFsdWVCID8gMSA6IDApOworICAgICAgICAgICAgcmV0dXJuIGFzY2VuZGluZyA/IHJl
c3VsdCA6IC1yZXN1bHQ7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIXRoaXMuX2l0ZXJhdGlv
bk9yZGVyKQorICAgICAgICAgICAgdGhpcy5fY3JlYXRlSXRlcmF0aW9uT3JkZXIoKTsKKworICAg
ICAgICB0aGlzLl9pdGVyYXRpb25PcmRlci5zb3J0KAorICAgICAgICAgICAgZnVuY3Rpb24oaW5k
ZXhBLCBpbmRleEIpIHsKKyAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gc29ydEJ5Tm9kZUZp
ZWxkKGZpZWxkTmFtZTEsIGFzY2VuZGluZzEsIGluZGV4QSwgaW5kZXhCKTsKKyAgICAgICAgICAg
ICAgICBpZiAocmVzdWx0ID09PSAwKQorICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBzb3J0
QnlOb2RlRmllbGQoZmllbGROYW1lMiwgYXNjZW5kaW5nMiwgaW5kZXhBLCBpbmRleEIpOworICAg
ICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorfTsKKworV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdE5vZGVzUHJv
dmlkZXIucHJvdG90eXBlLl9fcHJvdG9fXyA9IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RHZW5l
cmljUHJvdmlkZXIucHJvdG90eXBlOworCitXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UGF0aEZp
bmRlciA9IGZ1bmN0aW9uKHNuYXBzaG90LCB0YXJnZXROb2RlSW5kZXgpCit7CisgICAgdGhpcy5f
c25hcHNob3QgPSBzbmFwc2hvdDsKKyAgICB0aGlzLl9tYXhMZW5ndGggPSAwOworICAgIHRoaXMu
X2xlbmd0aExpbWl0ID0gMTU7CisgICAgdGhpcy5fdGFyZ2V0Tm9kZUluZGV4ID0gdGFyZ2V0Tm9k
ZUluZGV4OworICAgIHRoaXMuX2N1cnJlbnRQYXRoID0gbnVsbDsKKyAgICB0aGlzLl9za2lwSGlk
ZGVuID0gIVdlYkluc3BlY3Rvci5EZXRhaWxlZEhlYXBzaG90Vmlldy5wcm90b3R5cGUuc2hvd0hp
ZGRlbkRhdGE7CisgICAgdGhpcy5fcm9vdENoaWxkcmVuID0gdGhpcy5fZmlsbFJvb3RDaGlsZHJl
bigpOworfQorCitXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UGF0aEZpbmRlci5wcm90b3R5cGUg
PSB7CisgICAgZmluZE5leHQ6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIGlmICh0aGlzLl9t
YXhMZW5ndGggPT09IDApIHsKKyAgICAgICAgICAgICsrdGhpcy5fbWF4TGVuZ3RoOworICAgICAg
ICAgICAgaWYgKHRoaXMuX3RhcmdldE5vZGVJbmRleCBpbiB0aGlzLl9yb290Q2hpbGRyZW4pCisg
ICAgICAgICAgICAgICAgcmV0dXJuIHtwYXRoOnRoaXMuX25vZGVUb1N0cmluZyhuZXcgV2ViSW5z
cGVjdG9yLkhlYXBTbmFwc2hvdE5vZGVXcmFwcGVyKHRoaXMuX3NuYXBzaG90LCB0aGlzLl90YXJn
ZXROb2RlSW5kZXgpKSwgbGVuOiAwfTsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgMTAwMDAwOyArK2kpIHsKKyAgICAgICAgICAgIGlmICghdGhpcy5fYnVpbGROZXh0
UGF0aCgpKSB7CisgICAgICAgICAgICAgICAgaWYgKCsrdGhpcy5fbWF4TGVuZ3RoID49IHRoaXMu
X2xlbmd0aExpbWl0KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAg
ICAgICAgICB0aGlzLl9jdXJyZW50UGF0aCA9IG51bGw7CisgICAgICAgICAgICAgICAgaWYgKCF0
aGlzLl9idWlsZE5leHRQYXRoKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHRoaXMuX2lzUGF0aEZvdW5kKCkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIHtwYXRoOnRoaXMuX3BhdGhUb1N0cmluZyh0aGlzLl9jdXJyZW50
UGF0aCksIGxlbjp0aGlzLl9jdXJyZW50UGF0aC5sZW5ndGh9OworICAgICAgICB9CisKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0sCisKKyAgICBfZmlsbFJvb3RDaGlsZHJlbjogZnVuY3Rp
b24oKQorICAgIHsKKyAgICAgICAgdmFyIHJlc3VsdCA9IFtdOworICAgICAgICBmb3IgKHZhciBl
ZGdlID0gdGhpcy5fc25hcHNob3Qucm9vdE5vZGUuZWRnZXM7IGVkZ2UuaGFzTmV4dDsgZWRnZS5i
ZWNvbWVOZXh0KCkpCisgICAgICAgICAgICByZXN1bHRbZWRnZS5ub2RlSW5kZXhdID0gdHJ1ZTsK
KyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9LAorCisgICAgX2FwcGVuZFRvQ3VycmVudFBh
dGg6IGZ1bmN0aW9uKHJldGFpbmVyKQorICAgIHsKKyAgICAgICAgdGhpcy5fY3VycmVudFBhdGgu
X2NhY2hlW3RoaXMuX2xhc3RFZGdlLm5vZGVJbmRleF0gPSB0cnVlOworICAgICAgICB0aGlzLl9j
dXJyZW50UGF0aC5wdXNoKHJldGFpbmVyKTsKKyAgICB9LAorCisgICAgX3JlbW92ZUxhc3RGcm9t
Q3VycmVudFBhdGg6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHRoaXMuX2N1cnJlbnRQYXRo
LnBvcCgpOworICAgICAgICBkZWxldGUgdGhpcy5fY3VycmVudFBhdGguX2NhY2hlW3RoaXMuX2xh
c3RFZGdlLm5vZGVJbmRleF07CisgICAgfSwKKworICAgIF9oYXNJblBhdGg6IGZ1bmN0aW9uKG5v
ZGVJbmRleCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl90YXJnZXROb2RlSW5kZXggPT09
IG5vZGVJbmRleAorICAgICAgICAgICAgfHwgISF0aGlzLl9jdXJyZW50UGF0aC5fY2FjaGVbbm9k
ZUluZGV4XTsKKyAgICB9LAorCisgICAgX2lzUGF0aEZvdW5kOiBmdW5jdGlvbigpCisgICAgewor
ICAgICAgICByZXR1cm4gdGhpcy5fY3VycmVudFBhdGgubGVuZ3RoID09PSB0aGlzLl9tYXhMZW5n
dGgKKyAgICAgICAgICAgICYmIHRoaXMuX2xhc3RFZGdlLm5vZGVJbmRleCBpbiB0aGlzLl9yb290
Q2hpbGRyZW47CisgICAgfSwKKworICAgIGdldCBfbGFzdEVkZ2UoKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIHRoaXMuX2N1cnJlbnRQYXRoW3RoaXMuX2N1cnJlbnRQYXRoLmxlbmd0aCAtIDFdOwor
ICAgIH0sCisKKyAgICBfc2tpcEVkZ2U6IGZ1bmN0aW9uKGVkZ2UpCisgICAgeworICAgICAgICBy
ZXR1cm4gKHRoaXMuX3NraXBIaWRkZW4gJiYgKGVkZ2UuaXNIaWRkZW4gfHwgZWRnZS5ub2RlLmlz
SGlkZGVuKSkKKyAgICAgICAgICAgIHx8IHRoaXMuX2hhc0luUGF0aChlZGdlLm5vZGVJbmRleCk7
CisgICAgfSwKKworICAgIF9uZXh0RWRnZTogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdmFy
IGVkZ2UgPSB0aGlzLl9sYXN0RWRnZTsKKyAgICAgICAgd2hpbGUgKHRoaXMuX3NraXBFZGdlKGVk
Z2UpICYmIGVkZ2UuaGFzTmV4dCkKKyAgICAgICAgICAgIGVkZ2UuYmVjb21lTmV4dCgpOworICAg
ICAgICByZXR1cm4gZWRnZTsKKyAgICB9LAorCisgICAgX2J1aWxkTmV4dFBhdGg6IGZ1bmN0aW9u
KCkKKyAgICB7CisgICAgICAgIGlmICh0aGlzLl9jdXJyZW50UGF0aCAhPT0gbnVsbCkgeworICAg
ICAgICAgICAgdmFyIGVkZ2UgPSB0aGlzLl9sYXN0RWRnZTsKKyAgICAgICAgICAgIHdoaWxlICh0
cnVlKSB7CisgICAgICAgICAgICAgICAgZWRnZS5iZWNvbWVOZXh0KCk7CisgICAgICAgICAgICAg
ICAgZWRnZSA9IHRoaXMuX25leHRFZGdlKCk7CisgICAgICAgICAgICAgICAgaWYgKGVkZ2UuaGFz
TmV4dCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAg
d2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRQYXRo
Lmxlbmd0aCA+IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlbW92ZUxhc3RG
cm9tQ3VycmVudFBhdGgoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVkZ2UgPSB0aGlzLl9s
YXN0RWRnZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVkZ2UuYmVjb21lTmV4dCgpOworICAg
ICAgICAgICAgICAgICAgICAgICAgZWRnZSA9IHRoaXMuX25leHRFZGdlKCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoZWRnZS5oYXNOZXh0KSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgd2hpbGUgKHRoaXMuX2N1cnJlbnRQYXRoLmxlbmd0aCA8IHRoaXMuX21heExlbmd0aCkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGdlID0gdGhpcy5fbmV4dEVkZ2Uo
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVkZ2UuaGFzTmV4dCkKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2FwcGVuZFRvQ3VycmVudFBh
dGgoZWRnZS5ub2RlLnJldGFpbmVycyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgdmFyIG5vZGUgPSBuZXcgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdE5vZGVXcmFwcGVyKHRo
aXMuX3NuYXBzaG90LCB0aGlzLl90YXJnZXROb2RlSW5kZXgpOworICAgICAgICAgICAgdGhpcy5f
Y3VycmVudFBhdGggPSBbbm9kZS5yZXRhaW5lcnNdOworICAgICAgICAgICAgdGhpcy5fY3VycmVu
dFBhdGguX2NhY2hlID0ge307CisgICAgICAgICAgICB3aGlsZSAodGhpcy5fY3VycmVudFBhdGgu
bGVuZ3RoIDwgdGhpcy5fbWF4TGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgdmFyIGVkZ2UgPSB0
aGlzLl9uZXh0RWRnZSgpOworICAgICAgICAgICAgICAgIGlmIChlZGdlLmhhc05leHQpCisgICAg
ICAgICAgICAgICAgICAgIHRoaXMuX2FwcGVuZFRvQ3VycmVudFBhdGgoZWRnZS5ub2RlLnJldGFp
bmVycyk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAg
fSwKKworICAgIF9ub2RlVG9TdHJpbmc6IGZ1bmN0aW9uKG5vZGUpCisgICAgeworICAgICAgICBp
ZiAobm9kZS5pZCA9PT0gMSkKKyAgICAgICAgICAgIHJldHVybiBub2RlLm5hbWU7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIHJldHVybiBub2RlLm5hbWUgKyAiQCIgKyBub2RlLmlkOwogICAg
IH0sCiAKLSAgICBnZXQgcm9vdEVkZ2VzKCkKKyAgICBfcGF0aFRvU3RyaW5nOiBmdW5jdGlvbihw
YXRoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIChuZXcgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hv
dE5vZGVXcmFwcGVyKHRoaXMsIHRoaXMuX3Jvb3ROb2RlSW5kZXgpKS5lZGdlczsKKyAgICAgICAg
aWYgKCFwYXRoKQorICAgICAgICAgICAgcmV0dXJuICIiOworICAgICAgICB2YXIgc1BhdGggPSBb
XTsKKyAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBwYXRoLmxlbmd0aDsgKytqKQorICAgICAg
ICAgICAgc1BhdGgucHVzaChwYXRoW2pdLnRvU3RyaW5nKCkpOworICAgICAgICBzUGF0aC5wdXNo
KHRoaXMuX25vZGVUb1N0cmluZyhwYXRoW3BhdGgubGVuZ3RoIC0gMV0ubm9kZSkpOworICAgICAg
ICBzUGF0aC5yZXZlcnNlKCk7CisgICAgICAgIHJldHVybiBzUGF0aC5qb2luKCIiKTsKICAgICB9
CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9IZWFw
U25hcHNob3RWaWV3LmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9IZWFw
U25hcHNob3RWaWV3LmpzCmluZGV4IDExMzUxODMuLjdhZDBmMTYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSGVhcFNuYXBzaG90Vmlldy5qcworKysgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0hlYXBTbmFwc2hvdFZpZXcuanMKQEAg
LTM4MiwxNSArMzgyLDE2IEBAIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RWaWV3LnByb3RvdHlw
ZSA9IHsKICAgICB7CiAgICAgICAgIHZhciBzbmFwc2hvdCA9IG5ldyBXZWJJbnNwZWN0b3IuSGVh
cFNuYXBzaG90KGxvYWRlZFNuYXBzaG90KTsKICAgICAgICAgdmFyIHJlc3VsdCA9IHtsb3dsZXZl
bHM6IHt9LCBlbnRyaWVzOiB7fSwgY2hpbGRyZW46IHt9fTsKLSAgICAgICAgZm9yICh2YXIgcm9v
dEVkZ2VzID0gc25hcHNob3Qucm9vdEVkZ2VzOyAhcm9vdEVkZ2VzLmRvbmU7IHJvb3RFZGdlcy5u
ZXh0KCkpIHsKLSAgICAgICAgICAgIHZhciBub2RlID0gcm9vdEVkZ2VzLm5vZGU7CisgICAgICAg
IHZhciByb290RWRnZXMgPSBzbmFwc2hvdC5yb290Tm9kZS5lZGdlczsKKyAgICAgICAgZm9yICh2
YXIgZWRnZSA9IHJvb3RFZGdlczsgZWRnZS5oYXNOZXh0OyBlZGdlLmJlY29tZU5leHQoKSkgewor
ICAgICAgICAgICAgdmFyIG5vZGUgPSBlZGdlLm5vZGU7CiAgICAgICAgICAgICBpZiAobm9kZS5p
c0hpZGRlbikKICAgICAgICAgICAgICAgICByZXN1bHQubG93bGV2ZWxzW25vZGUubmFtZV0gPSB7
Y291bnQ6IG5vZGUuaW5zdGFuY2VzQ291bnQsIHNpemU6IG5vZGUuc2VsZlNpemUsIHR5cGU6IG5v
ZGUubmFtZX07CiAgICAgICAgICAgICBlbHNlIGlmIChub2RlLmluc3RhbmNlc0NvdW50KQogICAg
ICAgICAgICAgICAgIHJlc3VsdC5lbnRyaWVzW25vZGUubmFtZV0gPSB7Y29uc3RydWN0b3JOYW1l
OiBub2RlLm5hbWUsIGNvdW50OiBub2RlLmluc3RhbmNlc0NvdW50LCBzaXplOiBub2RlLnNlbGZT
aXplfTsKICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIHZhciBlbnRyeSA9IHtj
b25zdHJ1Y3Rvck5hbWU6IG5vZGUubmFtZX07Ci0gICAgICAgICAgICAgICAgZm9yICh2YXIgZWRn
ZXMgPSBub2RlLmVkZ2VzOyAhZWRnZXMuZG9uZTsgZWRnZXMubmV4dCgpKQorICAgICAgICAgICAg
ICAgIGZvciAodmFyIGVkZ2VzID0gbm9kZS5lZGdlczsgZWRnZXMuaGFzTmV4dDsgZWRnZXMuYmVj
b21lTmV4dCgpKQogICAgICAgICAgICAgICAgICAgICBlbnRyeVtlZGdlcy5ub2RlSW5kZXhdID0g
e2NvbnN0cnVjdG9yTmFtZTogZWRnZXMubm9kZS5uYW1lLCBjb3VudDogZWRnZXMubmFtZX07CiAg
ICAgICAgICAgICAgICAgcmVzdWx0LmNoaWxkcmVuW3Jvb3RFZGdlcy5ub2RlSW5kZXhdID0gZW50
cnk7CiAgICAgICAgICAgICB9Cg==
</data>
<flag name="commit-queue"
          id="71666"
          type_id="3"
          status="-"
          setter="mnaganov"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>80645</attachid>
            <date>2011-01-31 08:46:40 -0800</date>
            <delta_ts>2011-02-01 06:01:32 -0800</delta_ts>
            <desc>rebased</desc>
            <filename>patch-53173</filename>
            <type>text/plain</type>
            <size>36242</size>
            <attacher name="Mikhail Naganov">mnaganov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAwY2RiZmI3Li5kMjYwYTFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTA1
IEBACisyMDExLTAxLTMxICBNaWtoYWlsIE5hZ2Fub3YgIDxtbmFnYW5vdkBjaHJvbWl1bS5vcmc+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViIElu
c3BlY3RvcjogW0Nocm9taXVtXSBMYW5kaW5nIGRldGFpbGVkIGhlYXAgc25hcHNob3RzLCBwYXJ0
IDEuCisKKyAgICAgICAgQWRkaW5nIGNvZGUgZm9yIGFjY2Vzc2luZyBoZWFwIHNuYXBzaG90IGRh
dGEgYW5kIHBlcmZvcm1pbmcgZ3JhcGggY2FsY3VsYXRpb25zLgorCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MzE3MworCisgICAgICAgICogRW5nbGlz
aC5scHJvai9sb2NhbGl6ZWRTdHJpbmdzLmpzOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1l
bmQvSGVhcFNuYXBzaG90LmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLk5vZGVzU2xpY2UpOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLk5vZGVzU2xpY2UucHJvdG90eXBlLml0ZW0pOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLk5vZGVzU2xpY2UucHJvdG90eXBlLmxlbik6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuUmV0YWluZXJzU2xpY2UpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlJldGFpbmVy
c1NsaWNlLnByb3RvdHlwZS5pdGVtKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5SZXRhaW5lcnNT
bGljZS5wcm90b3R5cGUubGVuKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RF
ZGdlV3JhcHBlcik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RWRnZVdyYXBw
ZXIucHJvdG90eXBlLmJlY29tZUZpcnN0KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25h
cHNob3RFZGdlV3JhcHBlci5wcm90b3R5cGUuYmVjb21lTmV4dCk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuSGVhcFNuYXBzaG90RWRnZVdyYXBwZXIucHJvdG90eXBlLmJlY29tZU50aCk6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RWRnZVdyYXBwZXIucHJvdG90eXBlLmdldCBj
b3VudCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RWRnZVdyYXBwZXIucHJv
dG90eXBlLmNsb25lKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RFZGdlV3Jh
cHBlci5wcm90b3R5cGUuZ2V0IGhhc05leHQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBT
bmFwc2hvdEVkZ2VXcmFwcGVyLnByb3RvdHlwZS5nZXQgaGFzU3RyaW5nTmFtZSk6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RWRnZVdyYXBwZXIucHJvdG90eXBlLmdldCBpbmRl
eCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RWRnZVdyYXBwZXIucHJvdG90
eXBlLnNldCBpbmRleCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RWRnZVdy
YXBwZXIucHJvdG90eXBlLmdldCBpc0ludGVybmFsKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5I
ZWFwU25hcHNob3RFZGdlV3JhcHBlci5wcm90b3R5cGUuZ2V0IGlzU2hvcnRjdXQpOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdEVkZ2VXcmFwcGVyLnByb3RvdHlwZS5nZXQgbmFt
ZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RWRnZVdyYXBwZXIucHJvdG90
eXBlLmdldCBub2RlSW5kZXgpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdEVk
Z2VXcmFwcGVyLnByb3RvdHlwZS5nZXQgcmF3RWRnZXMpOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LkhlYXBTbmFwc2hvdEVkZ2VXcmFwcGVyLnByb3RvdHlwZS50b1N0cmluZyk6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RWRnZVdyYXBwZXIucHJvdG90eXBlLmdldCB0eXBlKToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RFZGdlV3JhcHBlci5wcm90b3R5cGUu
Z2V0IF9oYXNTdHJpbmdOYW1lKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RF
ZGdlV3JhcHBlci5wcm90b3R5cGUuZ2V0IF9uYW1lKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5I
ZWFwU25hcHNob3RFZGdlV3JhcHBlci5wcm90b3R5cGUuZ2V0IF9uYW1lT3JJbmRleCk6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RWRnZVdyYXBwZXIucHJvdG90eXBlLl90eXBl
KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3ROb2RlV3JhcHBlcik6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Tm9kZVdyYXBwZXIucHJvdG90eXBlLmJlY29t
ZURvbWluYXRvcik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Tm9kZVdyYXBw
ZXIucHJvdG90eXBlLmJlY29tZUZpcnN0KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25h
cHNob3ROb2RlV3JhcHBlci5wcm90b3R5cGUuYmVjb21lTmV4dCk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuSGVhcFNuYXBzaG90Tm9kZVdyYXBwZXIucHJvdG90eXBlLmdldCBjbGFzc05hbWUpOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdE5vZGVXcmFwcGVyLnByb3RvdHlwZS5n
ZXQgZG9taW5hdG9yKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3ROb2RlV3Jh
cHBlci5wcm90b3R5cGUuZ2V0IGVkZ2VzKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25h
cHNob3ROb2RlV3JhcHBlci5wcm90b3R5cGUuZ2V0IGhhc05leHQpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLkhlYXBTbmFwc2hvdE5vZGVXcmFwcGVyLnByb3RvdHlwZS5nZXQgaWQpOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdE5vZGVXcmFwcGVyLnByb3RvdHlwZS5nZXQgaW5k
ZXgpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdE5vZGVXcmFwcGVyLnByb3Rv
dHlwZS5zZXQgaW5kZXgpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdE5vZGVX
cmFwcGVyLnByb3RvdHlwZS5nZXQgaXNSb290KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFw
U25hcHNob3ROb2RlV3JhcHBlci5wcm90b3R5cGUuZ2V0IHJldGFpbmVkU2l6ZSk6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Tm9kZVdyYXBwZXIucHJvdG90eXBlLmdldCByZXRh
aW5lcnMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdE5vZGVXcmFwcGVyLnBy
b3RvdHlwZS5nZXQgdHlwZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Tm9k
ZVdyYXBwZXIucHJvdG90eXBlLl9kb21pbmF0b3JJbmRleCk6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuSGVhcFNuYXBzaG90Tm9kZVdyYXBwZXIucHJvdG90eXBlLmdldCByYXdFZGdlcyk6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Tm9kZVdyYXBwZXIucHJvdG90eXBlLmdldCBf
bmV4dE5vZGVJbmRleCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Tm9kZVdy
YXBwZXIucHJvdG90eXBlLl9maXJzdEVkZ2VJbmRleCk6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
SGVhcFNuYXBzaG90Tm9kZVdyYXBwZXIucHJvdG90eXBlLl90eXBlKToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5IZWFwU25hcHNob3ROb2RlV3JhcHBlci5wcm90b3R5cGUuZ2V0IF9ub2Rlcyk6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90KToKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5IZWFwU25hcHNob3QucHJvdG90eXBlLl9pbml0KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5I
ZWFwU25hcHNob3QucHJvdG90eXBlLmRpc3Bvc2UpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhl
YXBTbmFwc2hvdC5wcm90b3R5cGUucmVzdG9yZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVh
cFNuYXBzaG90LnByb3RvdHlwZS5nZXQgcm9vdE5vZGUpOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LkhlYXBTbmFwc2hvdC5wcm90b3R5cGUuZ2V0IGlkc01hcCk6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuSGVhcFNuYXBzaG90LnByb3RvdHlwZS5yZXRhaW5lcnMpOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLkhlYXBTbmFwc2hvdC5wcm90b3R5cGUuYWdncmVnYXRlcyk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuSGVhcFNuYXBzaG90LnByb3RvdHlwZS5fYnVpbGRSZXRhaW5lcnMpOgorICAgICAgICAo
V2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdC5wcm90b3R5cGUuX2J1aWxkQWdncmVnYXRlcyk6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90LnByb3RvdHlwZS5fYnVpbGRBZ2dyZWdh
dGVzSW5kZXhlcyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90R2VuZXJpY1By
b3ZpZGVyKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RHZW5lcmljUHJvdmlk
ZXIucHJvdG90eXBlLmdldCBjb3VudCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBz
aG90R2VuZXJpY1Byb3ZpZGVyLnByb3RvdHlwZS5fY3JlYXRlSXRlcmF0aW9uT3JkZXIpOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdEdlbmVyaWNQcm92aWRlci5wcm90b3R5cGUu
Z2V0IGVtcHR5KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RHZW5lcmljUHJv
dmlkZXIucHJvdG90eXBlLmdldCBmaXJzdCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNu
YXBzaG90R2VuZXJpY1Byb3ZpZGVyLnByb3RvdHlwZS5nZXQgbGFzdENvbXBhcmF0b3IpOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdEdlbmVyaWNQcm92aWRlci5wcm90b3R5cGUu
Z2V0IG5leHQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdEdlbmVyaWNQcm92
aWRlci5wcm90b3R5cGUuY3JlYXRlQ29tcGFyYXRvcik6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
SGVhcFNuYXBzaG90RWRnZXNQcm92aWRlcik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNu
YXBzaG90RWRnZXNQcm92aWRlci5wcm90b3R5cGUuc29ydC5zb3J0QnlFZGdlRmllbGROYW1lKToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RFZGdlc1Byb3ZpZGVyLnByb3RvdHlw
ZS5zb3J0LnNvcnRCeU5vZGVGaWVsZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBz
aG90RWRnZXNQcm92aWRlci5wcm90b3R5cGUuc29ydCk6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
SGVhcFNuYXBzaG90Tm9kZXNQcm92aWRlcik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNu
YXBzaG90Tm9kZXNQcm92aWRlci5wcm90b3R5cGUuc29ydC5zb3J0QnlOb2RlRmllbGQpOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdE5vZGVzUHJvdmlkZXIucHJvdG90eXBlLnNv
cnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFBhdGhGaW5kZXIpOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFBhdGhGaW5kZXIucHJvdG90eXBlLmZpbmRO
ZXh0KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RQYXRoRmluZGVyLnByb3Rv
dHlwZS5fZmlsbFJvb3RDaGlsZHJlbik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBz
aG90UGF0aEZpbmRlci5wcm90b3R5cGUuX2FwcGVuZFRvQ3VycmVudFBhdGgpOgorICAgICAgICAo
V2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFBhdGhGaW5kZXIucHJvdG90eXBlLl9yZW1vdmVMYXN0
RnJvbUN1cnJlbnRQYXRoKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RQYXRo
RmluZGVyLnByb3RvdHlwZS5faGFzSW5QYXRoKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFw
U25hcHNob3RQYXRoRmluZGVyLnByb3RvdHlwZS5faXNQYXRoRm91bmQpOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLkhlYXBTbmFwc2hvdFBhdGhGaW5kZXIucHJvdG90eXBlLmdldCBfbGFzdEVkZ2Up
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFBhdGhGaW5kZXIucHJvdG90eXBl
Ll9za2lwRWRnZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UGF0aEZpbmRl
ci5wcm90b3R5cGUuX25leHRFZGdlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNo
b3RQYXRoRmluZGVyLnByb3RvdHlwZS5fYnVpbGROZXh0UGF0aCk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuSGVhcFNuYXBzaG90UGF0aEZpbmRlci5wcm90b3R5cGUuX25vZGVUb1N0cmluZyk6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UGF0aEZpbmRlci5wcm90b3R5cGUuX3Bh
dGhUb1N0cmluZyk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9IZWFwU25hcHNob3RW
aWV3LmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFZpZXcucHJvdG90eXBl
Ll9jb252ZXJ0U25hcHNob3QpOgorCiAyMDExLTAxLTMxICBBbnR0aSBLb2l2aXN0byAgPGFudHRp
QGFwcGxlLmNvbT4KIAogICAgICAgICBOb3QgcmV2aWV3ZWQuCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9FbmdsaXNoLmxwcm9qL2xvY2FsaXplZFN0cmluZ3MuanMgYi9Tb3VyY2UvV2ViQ29y
ZS9FbmdsaXNoLmxwcm9qL2xvY2FsaXplZFN0cmluZ3MuanMKaW5kZXggN2FlY2JiNi4uZmQ5OTg3
YSAxMDA2NDQKQmluYXJ5IGZpbGVzIGEvU291cmNlL1dlYkNvcmUvRW5nbGlzaC5scHJvai9sb2Nh
bGl6ZWRTdHJpbmdzLmpzIGFuZCBiL1NvdXJjZS9XZWJDb3JlL0VuZ2xpc2gubHByb2ovbG9jYWxp
emVkU3RyaW5ncy5qcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvSGVhcFNuYXBzaG90LmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9IZWFwU25hcHNob3QuanMKaW5kZXggNmY5MWE4MC4uOTAzYmE5ZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9IZWFwU25hcHNob3QuanMKKysr
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9IZWFwU25hcHNob3QuanMKQEAg
LTI4LDE3ICsyOCw5NyBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi1XZWJJbnNwZWN0b3IuSGVh
cFNuYXBzaG90RWRnZXNJdGVyYXRvciA9IGZ1bmN0aW9uKHNuYXBzaG90LCBlZGdlcykKK1dlYklu
c3BlY3Rvci5Ob2Rlc1NsaWNlID0gZnVuY3Rpb24oc25hcHNob3QsIHN0YXJ0LCBlbmQpCit7Cisg
ICAgdGhpcy5fc25hcHNob3QgPSBzbmFwc2hvdDsKKyAgICB0aGlzLl9zdGFydCA9IHN0YXJ0Owor
ICAgIHRoaXMuX2VuZCA9IGVuZDsKK30KKworV2ViSW5zcGVjdG9yLk5vZGVzU2xpY2UucHJvdG90
eXBlID0geworICAgIGl0ZW06IGZ1bmN0aW9uKGluZGV4KQorICAgIHsKKyAgICAgICAgcmV0dXJu
IHRoaXMuX3NuYXBzaG90Ll9ub2Rlc1t0aGlzLl9zdGFydCArIGluZGV4XTsKKyAgICB9LAorCisg
ICAgbGVuOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fZW5kIC0gdGhp
cy5fc3RhcnQ7CisgICAgfQorfTsKKworV2ViSW5zcGVjdG9yLlJldGFpbmVyc1NsaWNlID0gZnVu
Y3Rpb24oc25hcHNob3QsIHN0YXJ0LCBlbmQpCit7CisgICAgdGhpcy5fc25hcHNob3QgPSBzbmFw
c2hvdDsKKyAgICB0aGlzLl9zdGFydCA9IHN0YXJ0OworICAgIHRoaXMuX2VuZCA9IGVuZDsKK30K
KworV2ViSW5zcGVjdG9yLlJldGFpbmVyc1NsaWNlLnByb3RvdHlwZSA9IHsKKyAgICBpdGVtOiBm
dW5jdGlvbihpbmRleCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9zbmFwc2hvdC5fcmV0
YWluZXJzW3RoaXMuX3N0YXJ0ICsgaW5kZXhdOworICAgIH0sCisKKyAgICBsZW46IGZ1bmN0aW9u
KCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9lbmQgLSB0aGlzLl9zdGFydDsKKyAgICB9
Cit9OworCitXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RWRnZVdyYXBwZXIgPSBmdW5jdGlvbihz
bmFwc2hvdCwgZWRnZXMsIGVkZ2VJbmRleCkKIHsKICAgICB0aGlzLl9zbmFwc2hvdCA9IHNuYXBz
aG90OwogICAgIHRoaXMuX2VkZ2VzID0gZWRnZXM7Ci0gICAgdGhpcy5fZWRnZUluZGV4ID0gMDsK
KyAgICB0aGlzLl9lZGdlSW5kZXggPSBlZGdlSW5kZXggfHwgMDsKIH0KIAotV2ViSW5zcGVjdG9y
LkhlYXBTbmFwc2hvdEVkZ2VzSXRlcmF0b3IucHJvdG90eXBlID0gewotICAgIGdldCBkb25lKCkK
K1dlYkluc3BlY3Rvci5IZWFwU25hcHNob3RFZGdlV3JhcHBlci5wcm90b3R5cGUgPSB7CisgICAg
YmVjb21lRmlyc3Q6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHRoaXMuX2VkZ2VJbmRleCA9
IDA7CisgICAgfSwKKworICAgIGJlY29tZU5leHQ6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAg
IHRoaXMuX2VkZ2VJbmRleCArPSB0aGlzLl9zbmFwc2hvdC5fZWRnZUZpZWxkc0NvdW50OworICAg
IH0sCisKKyAgICBiZWNvbWVOdGg6IGZ1bmN0aW9uKG4pCisgICAgeworICAgICAgICB0aGlzLl9l
ZGdlSW5kZXggPSBuICogdGhpcy5fc25hcHNob3QuX2VkZ2VGaWVsZHNDb3VudDsKKyAgICB9LAor
CisgICAgZ2V0IGNvdW50KCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9lZGdlcy5sZW4o
KSAvIHRoaXMuX3NuYXBzaG90Ll9lZGdlRmllbGRzQ291bnQ7CisgICAgfSwKKworICAgIGNsb25l
OiBmdW5jdGlvbigpCisgICAgeworICAgICAgICByZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5IZWFw
U25hcHNob3RFZGdlV3JhcHBlcih0aGlzLl9zbmFwc2hvdCwgdGhpcy5fZWRnZXMsIHRoaXMuX2Vk
Z2VJbmRleCk7CisgICAgfSwKKworICAgIGdldCBoYXNOZXh0KCkKKyAgICB7CisgICAgICAgIHJl
dHVybiB0aGlzLl9lZGdlSW5kZXggPCB0aGlzLl9lZGdlcy5sZW4oKTsKKyAgICB9LAorCisgICAg
Z2V0IGhhc1N0cmluZ05hbWUoKQorICAgIHsKKyAgICAgICAgaWYgKCF0aGlzLmlzU2hvcnRjdXQp
CisgICAgICAgICAgICByZXR1cm4gdGhpcy5faGFzU3RyaW5nTmFtZTsKKyAgICAgICAgcmV0dXJu
IGlzTmFOKHBhcnNlSW50KHRoaXMuX25hbWUsIDEwKSk7CisgICAgfSwKKworICAgIGdldCBpbmRl
eCgpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fZWRnZUluZGV4OworICAgIH0sCisKKyAg
ICBzZXQgaW5kZXgobmV3SW5kZXgpCiAgICAgewotICAgICAgICByZXR1cm4gdGhpcy5fZWRnZUlu
ZGV4ID49IHRoaXMuX2VkZ2VzLmxlbmd0aDsKKyAgICAgICAgdGhpcy5fZWRnZUluZGV4ID0gbmV3
SW5kZXg7CiAgICAgfSwKIAogICAgIGdldCBpc0VsZW1lbnQoKQpAQCAtNTEsMTQgKzEzMSwyMiBA
QCBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RWRnZXNJdGVyYXRvci5wcm90b3R5cGUgPSB7CiAg
ICAgICAgIHJldHVybiB0aGlzLl90eXBlKCkgPT09IHRoaXMuX3NuYXBzaG90Ll9lZGdlSGlkZGVu
VHlwZTsKICAgICB9LAogCi0gICAgZ2V0IG5hbWUoKQorICAgIGdldCBpc0ludGVybmFsKCkKICAg
ICB7Ci0gICAgICAgIHJldHVybiB0aGlzLmlzRWxlbWVudCB8fCB0aGlzLmlzSGlkZGVuID8gdGhp
cy5fbmFtZU9ySW5kZXgoKSA6IHRoaXMuX3NuYXBzaG90Ll9zdHJpbmdzW3RoaXMuX25hbWVPcklu
ZGV4KCldOworICAgICAgICByZXR1cm4gdGhpcy5fdHlwZSgpID09PSB0aGlzLl9zbmFwc2hvdC5f
ZWRnZUludGVybmFsVHlwZTsKICAgICB9LAogCi0gICAgbmV4dDogZnVuY3Rpb24oKQorICAgIGdl
dCBpc1Nob3J0Y3V0KCkKICAgICB7Ci0gICAgICAgIHRoaXMuX2VkZ2VJbmRleCArPSB0aGlzLl9z
bmFwc2hvdC5fZWRnZUZpZWxkc0NvdW50OworICAgICAgICByZXR1cm4gdGhpcy5fdHlwZSgpID09
PSB0aGlzLl9zbmFwc2hvdC5fZWRnZVNob3J0Y3V0VHlwZTsKKyAgICB9LAorCisgICAgZ2V0IG5h
bWUoKQorICAgIHsKKyAgICAgICAgaWYgKCF0aGlzLmlzU2hvcnRjdXQpCisgICAgICAgICAgICBy
ZXR1cm4gdGhpcy5fbmFtZTsKKyAgICAgICAgdmFyIG51bU5hbWUgPSBwYXJzZUludCh0aGlzLl9u
YW1lLCAxMCk7CisgICAgICAgIHJldHVybiBpc05hTihudW1OYW1lKSA/IHRoaXMuX25hbWUgOiBu
dW1OYW1lOwogICAgIH0sCiAKICAgICBnZXQgbm9kZSgpCkBAIC02OCwzMSArMTU2LDEwNSBAQCBX
ZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RWRnZXNJdGVyYXRvci5wcm90b3R5cGUgPSB7CiAKICAg
ICBnZXQgbm9kZUluZGV4KCkKICAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9lZGdlc1t0aGlz
Ll9lZGdlSW5kZXggKyB0aGlzLl9zbmFwc2hvdC5fZWRnZVRvTm9kZU9mZnNldF07CisgICAgICAg
IHJldHVybiB0aGlzLl9lZGdlcy5pdGVtKHRoaXMuX2VkZ2VJbmRleCArIHRoaXMuX3NuYXBzaG90
Ll9lZGdlVG9Ob2RlT2Zmc2V0KTsKKyAgICB9LAorCisgICAgZ2V0IHJhd0VkZ2VzKCkKKyAgICB7
CisgICAgICAgIHJldHVybiB0aGlzLl9lZGdlczsKKyAgICB9LAorCisgICAgdG9TdHJpbmc6IGZ1
bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAodGhpcy50eXBlKSB7CisgICAgICAgIGNh
c2UgImNvbnRleHQiOiByZXR1cm4gIi0+IiArIHRoaXMubmFtZTsKKyAgICAgICAgY2FzZSAiZWxl
bWVudCI6IHJldHVybiAiWyIgKyB0aGlzLm5hbWUgKyAiXSI7CisgICAgICAgIGNhc2UgInByb3Bl
cnR5IjoKKyAgICAgICAgICAgIHJldHVybiB0aGlzLm5hbWUuaW5kZXhPZigiICIpID09PSAtMSA/
ICIuIiArIHRoaXMubmFtZSA6ICJbXCIiICsgdGhpcy5uYW1lICsgIlwiXSI7CisgICAgICAgIGNh
c2UgInNob3J0Y3V0IjoKKyAgICAgICAgICAgIHZhciBuYW1lID0gdGhpcy5uYW1lOworICAgICAg
ICAgICAgaWYgKHR5cGVvZiBuYW1lID09PSAic3RyaW5nIikKKyAgICAgICAgICAgICAgICByZXR1
cm4gdGhpcy5uYW1lLmluZGV4T2YoIiAiKSA9PT0gLTEgPyAiLiIgKyB0aGlzLm5hbWUgOiAiW1wi
IiArIHRoaXMubmFtZSArICJcIl0iOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
IHJldHVybiAiWyIgKyB0aGlzLm5hbWUgKyAiXSI7CisgICAgICAgIGNhc2UgImludGVybmFsIjoK
KyAgICAgICAgY2FzZSAiaGlkZGVuIjoKKyAgICAgICAgICAgIHJldHVybiAieyIgKyB0aGlzLm5h
bWUgKyAifSI7CisgICAgICAgIH07CisgICAgICAgIHJldHVybiAiPz8/IjsKKyAgICB9LAorCisg
ICAgZ2V0IHR5cGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3NuYXBzaG90Ll9lZGdl
VHlwZXNbdGhpcy5fdHlwZSgpXTsKKyAgICB9LAorCisgICAgZ2V0IF9oYXNTdHJpbmdOYW1lKCkK
KyAgICB7CisgICAgICAgIHJldHVybiAhdGhpcy5pc0VsZW1lbnQgJiYgIXRoaXMuaXNIaWRkZW47
CisgICAgfSwKKworICAgIGdldCBfbmFtZSgpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5f
aGFzU3RyaW5nTmFtZSA/IHRoaXMuX3NuYXBzaG90Ll9zdHJpbmdzW3RoaXMuX25hbWVPckluZGV4
XSA6IHRoaXMuX25hbWVPckluZGV4OwogICAgIH0sCiAKLSAgICBfbmFtZU9ySW5kZXg6IGZ1bmN0
aW9uKCkKKyAgICBnZXQgX25hbWVPckluZGV4KCkKICAgICB7Ci0gICAgICAgIHJldHVybiB0aGlz
Ll9lZGdlc1t0aGlzLl9lZGdlSW5kZXggKyB0aGlzLl9zbmFwc2hvdC5fZWRnZU5hbWVPZmZzZXRd
OworICAgICAgICByZXR1cm4gdGhpcy5fZWRnZXMuaXRlbSh0aGlzLl9lZGdlSW5kZXggKyB0aGlz
Ll9zbmFwc2hvdC5fZWRnZU5hbWVPZmZzZXQpOwogICAgIH0sCiAKICAgICBfdHlwZTogZnVuY3Rp
b24oKQogICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX2VkZ2VzW3RoaXMuX2VkZ2VJbmRleCAr
IHRoaXMuX3NuYXBzaG90Ll9lZGdlVHlwZU9mZnNldF07CisgICAgICAgIHJldHVybiB0aGlzLl9l
ZGdlcy5pdGVtKHRoaXMuX2VkZ2VJbmRleCArIHRoaXMuX3NuYXBzaG90Ll9lZGdlVHlwZU9mZnNl
dCk7CiAgICAgfQogfTsKIAogV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdE5vZGVXcmFwcGVyID0g
ZnVuY3Rpb24oc25hcHNob3QsIG5vZGVJbmRleCkKIHsKICAgICB0aGlzLl9zbmFwc2hvdCA9IHNu
YXBzaG90OwotICAgIHRoaXMuX25vZGVzID0gc25hcHNob3QuX25vZGVzOwogICAgIHRoaXMuX25v
ZGVJbmRleCA9IG5vZGVJbmRleDsKKyAgICB0aGlzLl9maXJzdE5vZGVJbmRleCA9IG5vZGVJbmRl
eDsKIH0KIAogV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdE5vZGVXcmFwcGVyLnByb3RvdHlwZSA9
IHsKKyAgICBiZWNvbWVEb21pbmF0b3I6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHRoaXMu
X25vZGVJbmRleCA9IHRoaXMuX2RvbWluYXRvckluZGV4KCk7CisgICAgfSwKKworICAgIGJlY29t
ZUZpcnN0OiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB0aGlzLl9ub2RlSW5kZXggPSB0aGlz
Ll9maXJzdE5vZGVJbmRleDsKKyAgICB9LAorCisgICAgYmVjb21lTmV4dDogZnVuY3Rpb24oKQor
ICAgIHsKKyAgICAgICAgdGhpcy5fbm9kZUluZGV4ID0gdGhpcy5fbmV4dE5vZGVJbmRleDsKKyAg
ICB9LAorCisgICAgZ2V0IGNsYXNzTmFtZSgpCisgICAgeworICAgICAgICBzd2l0Y2ggKHRoaXMu
dHlwZSkgeworICAgICAgICBjYXNlICJoaWRkZW4iOgorICAgICAgICAgICAgcmV0dXJuIFdlYklu
c3BlY3Rvci5VSVN0cmluZygiKHN5c3RlbSkiKTsKKyAgICAgICAgY2FzZSAib2JqZWN0IjoKKyAg
ICAgICAgICAgIHJldHVybiB0aGlzLm5hbWU7CisgICAgICAgIGNhc2UgImNvZGUiOgorICAgICAg
ICAgICAgcmV0dXJuIFdlYkluc3BlY3Rvci5VSVN0cmluZygiKGNvbXBpbGVkIGNvZGUpIik7Cisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gIigiICsgdGhpcy50eXBlICsgIiki
OworICAgICAgICB9CisgICAgfSwKKworICAgIGdldCBkb21pbmF0b3IoKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG5ldyBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Tm9kZVdyYXBwZXIodGhpcy5f
c25hcHNob3QsIHRoaXMuX2RvbWluYXRvckluZGV4KCkpOworICAgIH0sCisKICAgICBnZXQgZWRn
ZXMoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG5ldyBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90
RWRnZXNJdGVyYXRvcih0aGlzLl9zbmFwc2hvdCwgdGhpcy5fZWRnZXMoKSk7CisgICAgICAgIHJl
dHVybiBuZXcgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdEVkZ2VXcmFwcGVyKHRoaXMuX3NuYXBz
aG90LCB0aGlzLnJhd0VkZ2VzKTsKICAgICB9LAogCiAgICAgZ2V0IGVkZ2VzQ291bnQoKQpAQCAt
MTAwLDYgKzI2MiwyNiBAQCBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Tm9kZVdyYXBwZXIucHJv
dG90eXBlID0gewogICAgICAgICByZXR1cm4gdGhpcy5fbm9kZXNbdGhpcy5fbm9kZUluZGV4ICsg
dGhpcy5fc25hcHNob3QuX2VkZ2VzQ291bnRPZmZzZXRdOwogICAgIH0sCiAKKyAgICBnZXQgaGFz
TmV4dCgpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fbm9kZUluZGV4IDwgdGhpcy5fc25h
cHNob3QuX25vZGVzLmxlbmd0aDsKKyAgICB9LAorCisgICAgZ2V0IGlkKCkKKyAgICB7CisgICAg
ICAgIHJldHVybiB0aGlzLl9ub2Rlc1t0aGlzLl9ub2RlSW5kZXggKyB0aGlzLl9zbmFwc2hvdC5f
bm9kZUlkT2Zmc2V0XTsKKyAgICB9LAorCisgICAgZ2V0IGluZGV4KCkKKyAgICB7CisgICAgICAg
IHJldHVybiB0aGlzLl9ub2RlSW5kZXg7CisgICAgfSwKKworICAgIHNldCBpbmRleChuZXdJbmRl
eCkKKyAgICB7CisgICAgICAgIHRoaXMuX25vZGVJbmRleCA9IG5ld0luZGV4OworICAgIH0sCisK
ICAgICBnZXQgaW5zdGFuY2VzQ291bnQoKQogICAgIHsKICAgICAgICAgcmV0dXJuIHRoaXMuX25v
ZGVzW3RoaXMuX25vZGVJbmRleCArIHRoaXMuX3NuYXBzaG90Ll9ub2RlSW5zdGFuY2VzQ291bnRP
ZmZzZXRdOwpAQCAtMTEwLDM2ICsyOTIsNzUgQEAgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdE5v
ZGVXcmFwcGVyLnByb3RvdHlwZSA9IHsKICAgICAgICAgcmV0dXJuIHRoaXMuX3R5cGUoKSA9PT0g
dGhpcy5fc25hcHNob3QuX25vZGVIaWRkZW5UeXBlOwogICAgIH0sCiAKKyAgICBnZXQgaXNSb290
KCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9ub2RlSW5kZXggPT09IHRoaXMuX3NuYXBz
aG90Ll9yb290Tm9kZUluZGV4OworICAgIH0sCisKICAgICBnZXQgbmFtZSgpCiAgICAgewogICAg
ICAgICByZXR1cm4gdGhpcy5fc25hcHNob3QuX3N0cmluZ3NbdGhpcy5fbmFtZSgpXTsKICAgICB9
LAogCisgICAgZ2V0IHJldGFpbmVkU2l6ZSgpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5f
bm9kZXNbdGhpcy5fbm9kZUluZGV4ICsgdGhpcy5fc25hcHNob3QuX25vZGVSZXRhaW5lZFNpemVP
ZmZzZXRdOworICAgIH0sCisKKyAgICBnZXQgcmV0YWluZXJzKCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBuZXcgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdEVkZ2VXcmFwcGVyKHRoaXMuX3NuYXBz
aG90LCB0aGlzLl9zbmFwc2hvdC5yZXRhaW5lcnModGhpcykpOworICAgIH0sCisKICAgICBnZXQg
c2VsZlNpemUoKQogICAgIHsKICAgICAgICAgcmV0dXJuIHRoaXMuX25vZGVzW3RoaXMuX25vZGVJ
bmRleCArIHRoaXMuX3NuYXBzaG90Ll9ub2RlU2VsZlNpemVPZmZzZXRdOyAKICAgICB9LAogCisg
ICAgZ2V0IHR5cGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3NuYXBzaG90Ll9ub2Rl
VHlwZXNbdGhpcy5fdHlwZSgpXTsKKyAgICB9LAorCisgICAgX2RvbWluYXRvckluZGV4OiBmdW5j
dGlvbigpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fbm9kZXNbdGhpcy5fbm9kZUluZGV4
ICsgdGhpcy5fc25hcHNob3QuX2RvbWluYXRvck9mZnNldF07CisgICAgfSwKKwogICAgIF9uYW1l
OiBmdW5jdGlvbigpCiAgICAgewogICAgICAgICByZXR1cm4gdGhpcy5fbm9kZXNbdGhpcy5fbm9k
ZUluZGV4ICsgdGhpcy5fc25hcHNob3QuX25vZGVOYW1lT2Zmc2V0XTsgCiAgICAgfSwKIAotICAg
IF9lZGdlczogZnVuY3Rpb24oKQorICAgIGdldCByYXdFZGdlcygpCisgICAgeworICAgICAgICB2
YXIgZmlyc3RFZGdlSW5kZXggPSB0aGlzLl9maXJzdEVkZ2VJbmRleCgpOworICAgICAgICByZXR1
cm4gbmV3IFdlYkluc3BlY3Rvci5Ob2Rlc1NsaWNlKHRoaXMuX3NuYXBzaG90LCBmaXJzdEVkZ2VJ
bmRleCwgZmlyc3RFZGdlSW5kZXggKyB0aGlzLmVkZ2VzQ291bnQgKiB0aGlzLl9zbmFwc2hvdC5f
ZWRnZUZpZWxkc0NvdW50KTsKKyAgICB9LAorCisgICAgZ2V0IF9uZXh0Tm9kZUluZGV4KCkKICAg
ICB7Ci0gICAgICAgIHZhciBmaXJzdEVkZ2VJbmRleCA9IHRoaXMuX25vZGVJbmRleCArIHRoaXMu
X3NuYXBzaG90Ll9maXJzdEVkZ2VPZmZzZXQ7Ci0gICAgICAgIHJldHVybiB0aGlzLl9ub2Rlcy5z
bGljZShmaXJzdEVkZ2VJbmRleCwgZmlyc3RFZGdlSW5kZXggKyB0aGlzLmVkZ2VzQ291bnQgKiB0
aGlzLl9zbmFwc2hvdC5fZWRnZUZpZWxkc0NvdW50KTsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2Zp
cnN0RWRnZUluZGV4KCkgKyB0aGlzLmVkZ2VzQ291bnQgKiB0aGlzLl9zbmFwc2hvdC5fZWRnZUZp
ZWxkc0NvdW50OworICAgIH0sCisKKyAgICBfZmlyc3RFZGdlSW5kZXg6IGZ1bmN0aW9uKCkKKyAg
ICB7CisgICAgICAgIHJldHVybiB0aGlzLl9ub2RlSW5kZXggKyB0aGlzLl9zbmFwc2hvdC5fZmly
c3RFZGdlT2Zmc2V0OwogICAgIH0sCiAKICAgICBfdHlwZTogZnVuY3Rpb24oKQogICAgIHsKICAg
ICAgICAgcmV0dXJuIHRoaXMuX25vZGVzW3RoaXMuX25vZGVJbmRleCArIHRoaXMuX3NuYXBzaG90
Ll9ub2RlVHlwZU9mZnNldF07CisgICAgfSwKKyAgICAKKyAgICBnZXQgX25vZGVzKCkKKyAgICB7
CisgICAgICAgIHJldHVybiB0aGlzLl9zbmFwc2hvdC5fbm9kZXM7CiAgICAgfQogfTsKIAogV2Vi
SW5zcGVjdG9yLkhlYXBTbmFwc2hvdCA9IGZ1bmN0aW9uKHByb2ZpbGUpCiB7Ci0gICAgdGhpcy5f
cHJvZmlsZSA9IHByb2ZpbGU7CiAgICAgdGhpcy5fbm9kZXMgPSBwcm9maWxlLm5vZGVzOwogICAg
IHRoaXMuX3N0cmluZ3MgPSBwcm9maWxlLnN0cmluZ3M7CiAKQEAgLTE1Nyw2ICszNzgsOCBAQCBX
ZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90LnByb3RvdHlwZSA9IHsKICAgICAgICAgdGhpcy5fbm9k
ZUlkT2Zmc2V0ID0gbWV0YS5maWVsZHMuaW5kZXhPZigiaWQiKTsKICAgICAgICAgdGhpcy5fbm9k
ZUluc3RhbmNlc0NvdW50T2Zmc2V0ID0gdGhpcy5fbm9kZUlkT2Zmc2V0OwogICAgICAgICB0aGlz
Ll9ub2RlU2VsZlNpemVPZmZzZXQgPSBtZXRhLmZpZWxkcy5pbmRleE9mKCJzZWxmX3NpemUiKTsK
KyAgICAgICAgdGhpcy5fbm9kZVJldGFpbmVkU2l6ZU9mZnNldCA9IG1ldGEuZmllbGRzLmluZGV4
T2YoInJldGFpbmVkX3NpemUiKTsKKyAgICAgICAgdGhpcy5fZG9taW5hdG9yT2Zmc2V0ID0gbWV0
YS5maWVsZHMuaW5kZXhPZigiZG9taW5hdG9yIik7CiAgICAgICAgIHRoaXMuX2VkZ2VzQ291bnRP
ZmZzZXQgPSBtZXRhLmZpZWxkcy5pbmRleE9mKCJjaGlsZHJlbl9jb3VudCIpOwogICAgICAgICB0
aGlzLl9maXJzdEVkZ2VPZmZzZXQgPSBtZXRhLmZpZWxkcy5pbmRleE9mKCJjaGlsZHJlbiIpOwog
ICAgICAgICB0aGlzLl9ub2RlVHlwZXMgPSBtZXRhLnR5cGVzW3RoaXMuX25vZGVUeXBlT2Zmc2V0
XTsKQEAgLTE2OSwxMCArMzkyLDQ5NiBAQCBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90LnByb3Rv
dHlwZSA9IHsKICAgICAgICAgdGhpcy5fZWRnZVR5cGVzID0gZWRnZXNNZXRhLnR5cGVzW3RoaXMu
X2VkZ2VUeXBlT2Zmc2V0XTsKICAgICAgICAgdGhpcy5fZWRnZUVsZW1lbnRUeXBlID0gdGhpcy5f
ZWRnZVR5cGVzLmluZGV4T2YoImVsZW1lbnQiKTsKICAgICAgICAgdGhpcy5fZWRnZUhpZGRlblR5
cGUgPSB0aGlzLl9lZGdlVHlwZXMuaW5kZXhPZigiaGlkZGVuIik7CisgICAgICAgIHRoaXMuX2Vk
Z2VJbnRlcm5hbFR5cGUgPSB0aGlzLl9lZGdlVHlwZXMuaW5kZXhPZigiaW50ZXJuYWwiKTsKKyAg
ICAgICAgdGhpcy5fZWRnZVNob3J0Y3V0VHlwZSA9IHRoaXMuX2VkZ2VUeXBlcy5pbmRleE9mKCJz
aG9ydGN1dCIpOworICAgIH0sCisKKyAgICBkaXNwb3NlOiBmdW5jdGlvbigpCisgICAgeworICAg
ICAgICBkZWxldGUgdGhpcy5fbm9kZXM7CisgICAgICAgIGRlbGV0ZSB0aGlzLl9zdHJpbmdzOwor
ICAgICAgICBpZiAodGhpcy5faWRzTWFwKQorICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2lkc01h
cDsKKyAgICAgICAgaWYgKHRoaXMuX3JldGFpbmVycykgeworICAgICAgICAgICAgZGVsZXRlIHRo
aXMuX3JldGFpbmVyczsKKyAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9ub2Rlc1RvUmV0YWluZXJz
OworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLl9hZ2dyZWdhdGVzKSB7CisgICAgICAgICAg
ICBkZWxldGUgdGhpcy5fYWdncmVnYXRlczsKKyAgICAgICAgICAgIHRoaXMuX2FnZ3JlZ2F0ZXNX
aXRoSW5kZXhlcyA9IGZhbHNlOworICAgICAgICB9CisgICAgfSwKKworICAgIHJlc3RvcmU6IGZ1
bmN0aW9uKHByb2ZpbGUpCisgICAgeworICAgICAgICB0aGlzLl9ub2RlcyA9IHByb2ZpbGUubm9k
ZXM7CisgICAgICAgIHRoaXMuX3N0cmluZ3MgPSBwcm9maWxlLnN0cmluZ3M7CisgICAgfSwKKwor
ICAgIGdldCByb290Tm9kZSgpCisgICAgeworICAgICAgICByZXR1cm4gbmV3IFdlYkluc3BlY3Rv
ci5IZWFwU25hcHNob3ROb2RlV3JhcHBlcih0aGlzLCB0aGlzLl9yb290Tm9kZUluZGV4KTsKKyAg
ICB9LAorCisgICAgZ2V0IGlkc01hcCgpCisgICAgeworICAgICAgICBpZiAodGhpcy5faWRzTWFw
KQorICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lkc01hcDsKKworICAgICAgICB0aGlzLl9pZHNN
YXAgPSBbXTsKKyAgICAgICAgZm9yICh2YXIgbm9kZSA9IHRoaXMucm9vdE5vZGU7IG5vZGUuaGFz
TmV4dDsgbm9kZS5iZWNvbWVOZXh0KCkpIHsKKyAgICAgICAgICAgIHRoaXMuX2lkc01hcFtub2Rl
LmlkXSA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXMuX2lkc01hcDsKKyAg
ICB9LAorCisgICAgcmV0YWluZXJzOiBmdW5jdGlvbihub2RlKQorICAgIHsKKyAgICAgICAgaWYg
KCF0aGlzLl9yZXRhaW5lcnMpCisgICAgICAgICAgICB0aGlzLl9idWlsZFJldGFpbmVycygpOwor
ICAgICAgICB2YXIgcmV0SW5kZXhGcm9tID0gdGhpcy5fbm9kZXNUb1JldGFpbmVyc1tub2RlLl9u
b2RlSW5kZXhdOworICAgICAgICB2YXIgcmV0SW5kZXhUbyA9IHRoaXMuX25vZGVzVG9SZXRhaW5l
cnNbbm9kZS5fbmV4dE5vZGVJbmRleF07CisgICAgICAgIHJldHVybiBuZXcgV2ViSW5zcGVjdG9y
LlJldGFpbmVyc1NsaWNlKHRoaXMsIHJldEluZGV4RnJvbSwgcmV0SW5kZXhUbyk7CisgICAgfSwK
KworICAgIGFnZ3JlZ2F0ZXM6IGZ1bmN0aW9uKHdpdGhOb2RlSW5kZXhlcykKKyAgICB7CisgICAg
ICAgIGlmICghdGhpcy5fYWdncmVnYXRlcykKKyAgICAgICAgICAgIHRoaXMuX2J1aWxkQWdncmVn
YXRlcygpOworICAgICAgICBpZiAod2l0aE5vZGVJbmRleGVzICYmICF0aGlzLl9hZ2dyZWdhdGVz
V2l0aEluZGV4ZXMpCisgICAgICAgICAgICB0aGlzLl9idWlsZEFnZ3JlZ2F0ZXNJbmRleGVzKCk7
CisgICAgICAgIHJldHVybiB0aGlzLl9hZ2dyZWdhdGVzOworICAgIH0sCisKKyAgICBfYnVpbGRS
ZXRhaW5lcnM6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHRoaXMuX25vZGVzVG9SZXRhaW5l
cnMgPSBbXTsKKyAgICAgICAgZm9yICh2YXIgbm9kZSA9IHRoaXMucm9vdE5vZGU7IG5vZGUuaGFz
TmV4dDsgbm9kZS5iZWNvbWVOZXh0KCkpIHsKKyAgICAgICAgICAgIGlmICghKG5vZGUuX25vZGVJ
bmRleCBpbiB0aGlzLl9ub2Rlc1RvUmV0YWluZXJzKSkKKyAgICAgICAgICAgICAgICB0aGlzLl9u
b2Rlc1RvUmV0YWluZXJzW25vZGUuX25vZGVJbmRleF0gPSAwOworICAgICAgICAgICAgZm9yICh2
YXIgZWRnZSA9IG5vZGUuZWRnZXM7IGVkZ2UuaGFzTmV4dDsgZWRnZS5iZWNvbWVOZXh0KCkpIHsK
KyAgICAgICAgICAgICAgICB2YXIgbm9kZUluZGV4ID0gZWRnZS5ub2RlSW5kZXg7CisgICAgICAg
ICAgICAgICAgaWYgKCEobm9kZUluZGV4IGluIHRoaXMuX25vZGVzVG9SZXRhaW5lcnMpKQorICAg
ICAgICAgICAgICAgICAgICB0aGlzLl9ub2Rlc1RvUmV0YWluZXJzW25vZGVJbmRleF0gPSAwOwor
ICAgICAgICAgICAgICAgIHRoaXMuX25vZGVzVG9SZXRhaW5lcnNbbm9kZUluZGV4XSArPSB0aGlz
Ll9lZGdlRmllbGRzQ291bnQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgbm9k
ZSA9IHRoaXMucm9vdE5vZGU7CisgICAgICAgIHZhciBwcmV2SW5kZXggPSB0aGlzLl9ub2Rlc1Rv
UmV0YWluZXJzW25vZGUuX25vZGVJbmRleF0gPSAwOworICAgICAgICB2YXIgcHJldlJldHNDb3Vu
dCA9IHRoaXMuX25vZGVzVG9SZXRhaW5lcnNbbm9kZS5fbm9kZUluZGV4XTsKKyAgICAgICAgbm9k
ZS5iZWNvbWVOZXh0KCk7CisgICAgICAgIGZvciAoOyBub2RlLmhhc05leHQ7IG5vZGUuYmVjb21l
TmV4dCgpKSB7CisgICAgICAgICAgICB2YXIgc2F2ZWRSZWZzQ291bnQgPSB0aGlzLl9ub2Rlc1Rv
UmV0YWluZXJzW25vZGUuX25vZGVJbmRleF07CisgICAgICAgICAgICBpZiAoIXNhdmVkUmVmc0Nv
dW50ICYmIHNhdmVkUmVmc0NvdW50ICE9PSAwKSBkZWJ1Z2dlcjsKKyAgICAgICAgICAgIHRoaXMu
X25vZGVzVG9SZXRhaW5lcnNbbm9kZS5fbm9kZUluZGV4XSA9IHByZXZJbmRleCArIHByZXZSZXRz
Q291bnQ7CisgICAgICAgICAgICBwcmV2SW5kZXggPSB0aGlzLl9ub2Rlc1RvUmV0YWluZXJzW25v
ZGUuX25vZGVJbmRleF07CisgICAgICAgICAgICBpZiAoIXByZXZJbmRleCAmJiBwcmV2SW5kZXgg
IT09IDApIGRlYnVnZ2VyOworICAgICAgICAgICAgcHJldlJldHNDb3VudCA9IHNhdmVkUmVmc0Nv
dW50OworICAgICAgICB9CisgICAgICAgIHRoaXMuX3JldGFpbmVycyA9IG5ldyBBcnJheShwcmV2
SW5kZXggKyBwcmV2UmV0c0NvdW50KTsKKyAgICAgICAgdGhpcy5fbm9kZXNUb1JldGFpbmVyc1t0
aGlzLl9ub2Rlcy5sZW5ndGhdID0gdGhpcy5fcmV0YWluZXJzLmxlbmd0aDsKKyAgICAgICAgZm9y
IChub2RlID0gdGhpcy5yb290Tm9kZTsgbm9kZS5oYXNOZXh0OyBub2RlLmJlY29tZU5leHQoKSkg
eworICAgICAgICAgICAgdmFyIHJldHNDb3VudCA9IHRoaXMuX25vZGVzVG9SZXRhaW5lcnNbbm9k
ZS5fbmV4dE5vZGVJbmRleF0gLSB0aGlzLl9ub2Rlc1RvUmV0YWluZXJzW25vZGUuX25vZGVJbmRl
eF07CisgICAgICAgICAgICBpZiAocmV0c0NvdW50ID4gMCkgeworICAgICAgICAgICAgICAgIHRo
aXMuX3JldGFpbmVyc1t0aGlzLl9ub2Rlc1RvUmV0YWluZXJzW25vZGUuX25vZGVJbmRleF1dID0g
cmV0c0NvdW50OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGZvciAobm9kZSA9
IHRoaXMucm9vdE5vZGU7IG5vZGUuaGFzTmV4dDsgbm9kZS5iZWNvbWVOZXh0KCkpIHsKKyAgICAg
ICAgICAgIGZvciAodmFyIGVkZ2UgPSBub2RlLmVkZ2VzOyBlZGdlLmhhc05leHQ7IGVkZ2UuYmVj
b21lTmV4dCgpKSB7CisgICAgICAgICAgICAgICAgdmFyIG5vZGVJbmRleCA9IGVkZ2Uubm9kZUlu
ZGV4OworICAgICAgICAgICAgICAgIHZhciByZXRJbmRleCA9IHRoaXMuX25vZGVzVG9SZXRhaW5l
cnNbbm9kZUluZGV4XTsKKyAgICAgICAgICAgICAgICB0aGlzLl9yZXRhaW5lcnNbcmV0SW5kZXhd
IC09IHRoaXMuX2VkZ2VGaWVsZHNDb3VudDsKKyAgICAgICAgICAgICAgICB2YXIgaWR4ID0gcmV0
SW5kZXggKyB0aGlzLl9yZXRhaW5lcnNbcmV0SW5kZXhdOworICAgICAgICAgICAgICAgIHRoaXMu
X3JldGFpbmVyc1tpZHggKyB0aGlzLl9lZGdlVHlwZU9mZnNldF0gPSBlZGdlLl90eXBlKCk7Cisg
ICAgICAgICAgICAgICAgdGhpcy5fcmV0YWluZXJzW2lkeCArIHRoaXMuX2VkZ2VOYW1lT2Zmc2V0
XSA9IGVkZ2UuX25hbWVPckluZGV4OworICAgICAgICAgICAgICAgIHRoaXMuX3JldGFpbmVyc1tp
ZHggKyB0aGlzLl9lZGdlVG9Ob2RlT2Zmc2V0XSA9IG5vZGUuX25vZGVJbmRleDsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0sCisKKyAgICBfYnVpbGRBZ2dyZWdhdGVzOiBmdW5jdGlv
bigpCisgICAgeworICAgICAgICB0aGlzLl9hZ2dyZWdhdGVzID0ge307CisgICAgICAgIGZvciAo
dmFyIG5vZGUgPSB0aGlzLnJvb3ROb2RlOyBub2RlLmhhc05leHQ7IG5vZGUuYmVjb21lTmV4dCgp
KSB7CisgICAgICAgICAgICB2YXIgY2xhc3NOYW1lID0gbm9kZS5jbGFzc05hbWU7CisgICAgICAg
ICAgICB2YXIgbmFtZU1hdHRlcnMgPSBub2RlLnR5cGUgPT09ICJvYmplY3QiOworICAgICAgICAg
ICAgaWYgKG5vZGUuc2VsZlNpemUgPT09IDApCisgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICBpZiAoIShjbGFzc05hbWUgaW4gdGhpcy5fYWdncmVnYXRlcykpCisgICAgICAg
ICAgICAgICAgdGhpcy5fYWdncmVnYXRlc1tjbGFzc05hbWVdID0geyBjb3VudDogMCwgc2VsZjog
MCwgbWF4UmV0OiAwLCB0eXBlOiBub2RlLnR5cGUsIG5hbWU6IG5hbWVNYXR0ZXJzID8gbm9kZS5u
YW1lIDogbnVsbCwgaWR4czogW10gfTsKKyAgICAgICAgICAgIHZhciBjbHNzID0gdGhpcy5fYWdn
cmVnYXRlc1tjbGFzc05hbWVdOworICAgICAgICAgICAgKytjbHNzLmNvdW50OworICAgICAgICAg
ICAgY2xzcy5zZWxmICs9IG5vZGUuc2VsZlNpemU7CisgICAgICAgICAgICBpZiAobm9kZS5yZXRh
aW5lZFNpemUgPiBjbHNzLm1heFJldCkKKyAgICAgICAgICAgICAgICBjbHNzLm1heFJldCA9IG5v
ZGUucmV0YWluZWRTaXplOworICAgICAgICB9CisgICAgfSwKKworICAgIF9idWlsZEFnZ3JlZ2F0
ZXNJbmRleGVzOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICBmb3IgKHZhciBub2RlID0gdGhp
cy5yb290Tm9kZTsgbm9kZS5oYXNOZXh0OyBub2RlLmJlY29tZU5leHQoKSkgeworICAgICAgICAg
ICAgdmFyIGNsYXNzTmFtZSA9IG5vZGUuY2xhc3NOYW1lOworICAgICAgICAgICAgdmFyIGNsc3Mg
PSB0aGlzLl9hZ2dyZWdhdGVzW2NsYXNzTmFtZV07CisgICAgICAgICAgICBpZiAoY2xzcykKKyAg
ICAgICAgICAgICAgICBjbHNzLmlkeHMucHVzaChub2RlLl9ub2RlSW5kZXgpOworICAgICAgICB9
CisKKyAgICAgICAgdmFyIG5vZGVBID0gbmV3IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3ROb2Rl
V3JhcHBlcih0aGlzKTsKKyAgICAgICAgdmFyIG5vZGVCID0gbmV3IFdlYkluc3BlY3Rvci5IZWFw
U25hcHNob3ROb2RlV3JhcHBlcih0aGlzKTsKKyAgICAgICAgZm9yICh2YXIgY2xzcyBpbiB0aGlz
Ll9hZ2dyZWdhdGVzKQorICAgICAgICAgICAgdGhpcy5fYWdncmVnYXRlc1tjbHNzXS5pZHhzLnNv
cnQoCisgICAgICAgICAgICAgICAgZnVuY3Rpb24oaWR4QSwgaWR4QikgeworICAgICAgICAgICAg
ICAgICAgICBub2RlQS5fbm9kZUluZGV4ID0gaWR4QTsKKyAgICAgICAgICAgICAgICAgICAgbm9k
ZUIuX25vZGVJbmRleCA9IGlkeEI7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlQS5p
ZCA8IG5vZGVCLmlkID8gLTEgOiAxOworICAgICAgICAgICAgICAgIH0pOworCisgICAgICAgIHRo
aXMuX2FnZ3JlZ2F0ZXNXaXRoSW5kZXhlcyA9IHRydWU7CisgICAgfQorfTsKKworV2ViSW5zcGVj
dG9yLkhlYXBTbmFwc2hvdEdlbmVyaWNQcm92aWRlciA9IGZ1bmN0aW9uKHNuYXBzaG90LCBlbnRp
dGllcywgZmlsdGVyKQoreworICAgIHRoaXMuX3NuYXBzaG90ID0gc25hcHNob3Q7CisgICAgdGhp
cy5fZmlsdGVyID0gZmlsdGVyOworICAgIHRoaXMuX2VudGl0aWVzID0gZW50aXRpZXM7CisgICAg
dGhpcy5faXRlcmF0aW9uT3JkZXIgPSBudWxsOworICAgIHRoaXMuX3Bvc2l0aW9uID0gMDsKKyAg
ICB0aGlzLl9sYXN0Q29tcGFyYXRvciA9IG51bGw7Cit9CisKK1dlYkluc3BlY3Rvci5IZWFwU25h
cHNob3RHZW5lcmljUHJvdmlkZXIucHJvdG90eXBlID0geworICAgIGdldCBjb3VudCgpCisgICAg
eworICAgICAgICBpZiAoIXRoaXMuX2l0ZXJhdGlvbk9yZGVyKQorICAgICAgICAgICAgdGhpcy5f
Y3JlYXRlSXRlcmF0aW9uT3JkZXIoKTsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2l0ZXJhdGlvbk9y
ZGVyLmxlbmd0aDsKKyAgICB9LAorCisgICAgX2NyZWF0ZUl0ZXJhdGlvbk9yZGVyOiBmdW5jdGlv
bigpCisgICAgeworICAgICAgICB0aGlzLl9pdGVyYXRpb25PcmRlciA9IFtdOworICAgICAgICB2
YXIgZW50aXRpZXMgPSB0aGlzLl9lbnRpdGllczsKKyAgICAgICAgaWYgKCF0aGlzLl9maWx0ZXIp
IHsKKyAgICAgICAgICAgIGZvciAoZW50aXRpZXMuYmVjb21lRmlyc3QoKTsgZW50aXRpZXMuaGFz
TmV4dDsgZW50aXRpZXMuYmVjb21lTmV4dCgpKQorICAgICAgICAgICAgICAgIHRoaXMuX2l0ZXJh
dGlvbk9yZGVyLnB1c2goZW50aXRpZXMuaW5kZXgpOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgZm9yIChlbnRpdGllcy5iZWNvbWVGaXJzdCgpOyBlbnRpdGllcy5oYXNOZXh0OyBlbnRp
dGllcy5iZWNvbWVOZXh0KCkpIHsKKyAgICAgICAgICAgICAgICBpZiAodGhpcy5fZmlsdGVyKGVu
dGl0aWVzKSkKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5faXRlcmF0aW9uT3JkZXIucHVzaChl
bnRpdGllcy5pbmRleCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9LAorCisgICAg
Z2V0IGVtcHR5KCkKKyAgICB7CisgICAgICAgIGlmICh0aGlzLl9pdGVyYXRpb25PcmRlcikKKyAg
ICAgICAgICAgIHJldHVybiAhdGhpcy5jb3VudDsKKyAgICAgICAgaWYgKCF0aGlzLl9maWx0ZXIp
CisgICAgICAgICAgICByZXR1cm4gIXRoaXMuX2VudGl0aWVzLmNvdW50OworICAgICAgICB2YXIg
ZW50aXRpZXMgPSB0aGlzLl9lbnRpdGllczsKKyAgICAgICAgZm9yIChlbnRpdGllcy5iZWNvbWVG
aXJzdCgpOyBlbnRpdGllcy5oYXNOZXh0OyBlbnRpdGllcy5iZWNvbWVOZXh0KCkpCisgICAgICAg
ICAgICBpZiAodGhpcy5fZmlsdGVyKGVudGl0aWVzKSkgcmV0dXJuIGZhbHNlOworICAgICAgICBy
ZXR1cm4gdHJ1ZTsgICAgICAgIAorICAgIH0sCisKKyAgICBnZXQgZmlyc3QoKQorICAgIHsKKyAg
ICAgICAgdGhpcy5fcG9zaXRpb24gPSAwOworICAgICAgICByZXR1cm4gdGhpcy5uZXh0OworICAg
IH0sCisKKyAgICBnZXQgbGFzdENvbXBhcmF0b3IoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRo
aXMuX2xhc3RDb21wYXJhdG9yOworICAgIH0sCisKKyAgICBnZXQgbmV4dCgpCisgICAgeworICAg
ICAgICBpZiAodGhpcy5fcG9zaXRpb24gPCB0aGlzLl9pdGVyYXRpb25PcmRlci5sZW5ndGgpIHsK
KyAgICAgICAgICAgIHRoaXMuX2VudGl0aWVzLmluZGV4ID0gdGhpcy5faXRlcmF0aW9uT3JkZXJb
dGhpcy5fcG9zaXRpb24rK107CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fZW50aXRpZXM7Cisg
ICAgICAgIH0gZWxzZQorICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorfQorCitXZWJJ
bnNwZWN0b3IuSGVhcFNuYXBzaG90R2VuZXJpY1Byb3ZpZGVyLnByb3RvdHlwZS5jcmVhdGVDb21w
YXJhdG9yID0gZnVuY3Rpb24oZmllbGROYW1lcykKK3sKKyAgICByZXR1cm4ge2ZpZWxkTmFtZTE6
ZmllbGROYW1lc1swXSwgYXNjZW5kaW5nMTpmaWVsZE5hbWVzWzFdLCBmaWVsZE5hbWUyOmZpZWxk
TmFtZXNbMl0sIGFzY2VuZGluZzI6ZmllbGROYW1lc1szXX07Cit9CisKK1dlYkluc3BlY3Rvci5I
ZWFwU25hcHNob3RFZGdlc1Byb3ZpZGVyID0gZnVuY3Rpb24oc25hcHNob3QsIHJhd0VkZ2VzLCBm
aWx0ZXIpCit7CisgICAgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdEdlbmVyaWNQcm92aWRlci5j
YWxsKHRoaXMsIHNuYXBzaG90LCBuZXcgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdEVkZ2VXcmFw
cGVyKHNuYXBzaG90LCByYXdFZGdlcyksIGZpbHRlcik7Cit9CisKK1dlYkluc3BlY3Rvci5IZWFw
U25hcHNob3RFZGdlc1Byb3ZpZGVyLnByb3RvdHlwZSA9IHsKKyAgICBzb3J0OiBmdW5jdGlvbihj
b21wYXJhdG9yKQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMuX2xhc3RDb21wYXJhdG9yID09PSBj
b21wYXJhdG9yKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB0aGlzLl9sYXN0
Q29tcGFyYXRvciA9IGNvbXBhcmF0b3I7CisgICAgICAgIHZhciBmaWVsZE5hbWUxID0gY29tcGFy
YXRvci5maWVsZE5hbWUxOworICAgICAgICB2YXIgZmllbGROYW1lMiA9IGNvbXBhcmF0b3IuZmll
bGROYW1lMjsKKyAgICAgICAgdmFyIGFzY2VuZGluZzEgPSBjb21wYXJhdG9yLmFzY2VuZGluZzE7
CisgICAgICAgIHZhciBhc2NlbmRpbmcyID0gY29tcGFyYXRvci5hc2NlbmRpbmcyOworCisgICAg
ICAgIHZhciBlZGdlQSA9IHRoaXMuX2VudGl0aWVzLmNsb25lKCk7CisgICAgICAgIHZhciBlZGdl
QiA9IHRoaXMuX2VudGl0aWVzLmNsb25lKCk7CisgICAgICAgIHZhciBub2RlQSA9IG5ldyBXZWJJ
bnNwZWN0b3IuSGVhcFNuYXBzaG90Tm9kZVdyYXBwZXIodGhpcy5fc25hcHNob3QpOworICAgICAg
ICB2YXIgbm9kZUIgPSBuZXcgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdE5vZGVXcmFwcGVyKHRo
aXMuX3NuYXBzaG90KTsKKworICAgICAgICBmdW5jdGlvbiBzb3J0QnlFZGdlRmllbGROYW1lKGFz
Y2VuZGluZywgaW5kZXhBLCBpbmRleEIpCisgICAgICAgIHsKKyAgICAgICAgICAgIGVkZ2VBLl9l
ZGdlSW5kZXggPSBpbmRleEE7CisgICAgICAgICAgICBlZGdlQi5fZWRnZUluZGV4ID0gaW5kZXhC
OworICAgICAgICAgICAgaWYgKGVkZ2VCLm5hbWUgPT09ICJfX3Byb3RvX18iKSByZXR1cm4gLTE7
CisgICAgICAgICAgICBpZiAoZWRnZUEubmFtZSA9PT0gIl9fcHJvdG9fXyIpIHJldHVybiAxOwor
ICAgICAgICAgICAgdmFyIHJlc3VsdCA9CisgICAgICAgICAgICAgICAgZWRnZUEuaGFzU3RyaW5n
TmFtZSA9PT0gZWRnZUIuaGFzU3RyaW5nTmFtZSA/CisgICAgICAgICAgICAgICAgKGVkZ2VBLm5h
bWUgPCBlZGdlQi5uYW1lID8gLTEgOiAoZWRnZUEubmFtZSA+IGVkZ2VCLm5hbWUgPyAxIDogMCkp
IDoKKyAgICAgICAgICAgICAgICAoZWRnZUEuaGFzU3RyaW5nTmFtZSA/IC0xIDogMSk7CisgICAg
ICAgICAgICByZXR1cm4gYXNjZW5kaW5nID8gcmVzdWx0IDogLXJlc3VsdDsKKyAgICAgICAgfQor
CisgICAgICAgIGZ1bmN0aW9uIHNvcnRCeU5vZGVGaWVsZChmaWVsZE5hbWUsIGFzY2VuZGluZywg
aW5kZXhBLCBpbmRleEIpCisgICAgICAgIHsKKyAgICAgICAgICAgIGVkZ2VBLl9lZGdlSW5kZXgg
PSBpbmRleEE7CisgICAgICAgICAgICBlZGdlQi5fZWRnZUluZGV4ID0gaW5kZXhCOworICAgICAg
ICAgICAgbm9kZUEuX25vZGVJbmRleCA9IGVkZ2VBLm5vZGVJbmRleDsKKyAgICAgICAgICAgIG5v
ZGVCLl9ub2RlSW5kZXggPSBlZGdlQi5ub2RlSW5kZXg7CisgICAgICAgICAgICB2YXIgdmFsdWVB
ID0gbm9kZUFbZmllbGROYW1lXTsKKyAgICAgICAgICAgIHZhciB2YWx1ZUIgPSBub2RlQltmaWVs
ZE5hbWVdOworICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHZhbHVlQSA8IHZhbHVlQiA/IC0xIDog
KHZhbHVlQSA+IHZhbHVlQiA/IDEgOiAwKTsKKyAgICAgICAgICAgIHJldHVybiBhc2NlbmRpbmcg
PyByZXN1bHQgOiAtcmVzdWx0OworICAgICAgICB9CisKKyAgICAgICAgaWYgKCF0aGlzLl9pdGVy
YXRpb25PcmRlcikKKyAgICAgICAgICAgIHRoaXMuX2NyZWF0ZUl0ZXJhdGlvbk9yZGVyKCk7CisK
KyAgICAgICAgaWYgKGZpZWxkTmFtZTEgPT09ICIhZWRnZU5hbWUiKQorICAgICAgICAgICAgdGhp
cy5faXRlcmF0aW9uT3JkZXIuc29ydCgKKyAgICAgICAgICAgICAgICBmdW5jdGlvbihpbmRleEEs
IGluZGV4QikgeworICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gc29ydEJ5RWRnZUZp
ZWxkTmFtZShhc2NlbmRpbmcxLCBpbmRleEEsIGluZGV4Qik7CisgICAgICAgICAgICAgICAgICAg
IGlmIChyZXN1bHQgPT09IDApCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBzb3J0
QnlOb2RlRmllbGQoZmllbGROYW1lMiwgYXNjZW5kaW5nMiwgaW5kZXhBLCBpbmRleEIpOworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgICAgIH0pOworICAg
ICAgICBlbHNlIGlmIChmaWVsZE5hbWUyID09PSAiIWVkZ2VOYW1lIikKKyAgICAgICAgICAgIHRo
aXMuX2l0ZXJhdGlvbk9yZGVyLnNvcnQoCisgICAgICAgICAgICAgICAgZnVuY3Rpb24oaW5kZXhB
LCBpbmRleEIpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHNvcnRCeU5vZGVG
aWVsZChmaWVsZE5hbWUxLCBhc2NlbmRpbmcxLCBpbmRleEEsIGluZGV4Qik7CisgICAgICAgICAg
ICAgICAgICAgIGlmIChyZXN1bHQgPT09IDApCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1
bHQgPSBzb3J0QnlFZGdlRmllbGROYW1lKGFzY2VuZGluZzIsIGluZGV4QSwgaW5kZXhCKTsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgICAgICB9KTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgdGhpcy5faXRlcmF0aW9uT3JkZXIuc29ydCgKKyAgICAg
ICAgICAgICAgICBmdW5jdGlvbihpbmRleEEsIGluZGV4QikgeworICAgICAgICAgICAgICAgICAg
ICB2YXIgcmVzdWx0ID0gc29ydEJ5Tm9kZUZpZWxkKGZpZWxkTmFtZTEsIGFzY2VuZGluZzEsIGlu
ZGV4QSwgaW5kZXhCKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCA9PT0gMCkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHNvcnRCeU5vZGVGaWVsZChmaWVsZE5hbWUy
LCBhc2NlbmRpbmcyLCBpbmRleEEsIGluZGV4Qik7CisgICAgICAgICAgICAgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KK307CisKK1dlYkluc3BlY3Rvci5IZWFwU25hcHNob3RFZGdlc1Byb3ZpZGVyLnByb3RvdHlw
ZS5fX3Byb3RvX18gPSBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90R2VuZXJpY1Byb3ZpZGVyLnBy
b3RvdHlwZTsKKworV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdE5vZGVzUHJvdmlkZXIgPSBmdW5j
dGlvbihzbmFwc2hvdCwgbm9kZXMsIGZpbHRlcikKK3sKKyAgICBXZWJJbnNwZWN0b3IuSGVhcFNu
YXBzaG90R2VuZXJpY1Byb3ZpZGVyLmNhbGwodGhpcywgc25hcHNob3QsIG5vZGVzLCBmaWx0ZXIp
OworfQorCitXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Tm9kZXNQcm92aWRlci5wcm90b3R5cGUg
PSB7CisgICAgc29ydDogZnVuY3Rpb24oY29tcGFyYXRvcikKKyAgICB7CisgICAgICAgIGlmICh0
aGlzLl9sYXN0Q29tcGFyYXRvciA9PT0gY29tcGFyYXRvcikKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgdGhpcy5fbGFzdENvbXBhcmF0b3IgPSBjb21wYXJhdG9yOworICAgICAg
ICB2YXIgZmllbGROYW1lMSA9IGNvbXBhcmF0b3IuZmllbGROYW1lMTsKKyAgICAgICAgdmFyIGZp
ZWxkTmFtZTIgPSBjb21wYXJhdG9yLmZpZWxkTmFtZTI7CisgICAgICAgIHZhciBhc2NlbmRpbmcx
ID0gY29tcGFyYXRvci5hc2NlbmRpbmcxOworICAgICAgICB2YXIgYXNjZW5kaW5nMiA9IGNvbXBh
cmF0b3IuYXNjZW5kaW5nMjsKKworICAgICAgICB2YXIgbm9kZUEgPSBuZXcgV2ViSW5zcGVjdG9y
LkhlYXBTbmFwc2hvdE5vZGVXcmFwcGVyKHRoaXMuX3NuYXBzaG90KTsKKyAgICAgICAgdmFyIG5v
ZGVCID0gbmV3IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3ROb2RlV3JhcHBlcih0aGlzLl9zbmFw
c2hvdCk7CisKKyAgICAgICAgZnVuY3Rpb24gc29ydEJ5Tm9kZUZpZWxkKGZpZWxkTmFtZSwgYXNj
ZW5kaW5nLCBpbmRleEEsIGluZGV4QikKKyAgICAgICAgeworICAgICAgICAgICAgbm9kZUEuX25v
ZGVJbmRleCA9IGluZGV4QTsKKyAgICAgICAgICAgIG5vZGVCLl9ub2RlSW5kZXggPSBpbmRleEI7
CisgICAgICAgICAgICB2YXIgdmFsdWVBID0gbm9kZUFbZmllbGROYW1lXTsKKyAgICAgICAgICAg
IHZhciB2YWx1ZUIgPSBub2RlQltmaWVsZE5hbWVdOworICAgICAgICAgICAgdmFyIHJlc3VsdCA9
IHZhbHVlQSA8IHZhbHVlQiA/IC0xIDogKHZhbHVlQSA+IHZhbHVlQiA/IDEgOiAwKTsKKyAgICAg
ICAgICAgIHJldHVybiBhc2NlbmRpbmcgPyByZXN1bHQgOiAtcmVzdWx0OworICAgICAgICB9CisK
KyAgICAgICAgaWYgKCF0aGlzLl9pdGVyYXRpb25PcmRlcikKKyAgICAgICAgICAgIHRoaXMuX2Ny
ZWF0ZUl0ZXJhdGlvbk9yZGVyKCk7CisKKyAgICAgICAgdGhpcy5faXRlcmF0aW9uT3JkZXIuc29y
dCgKKyAgICAgICAgICAgIGZ1bmN0aW9uKGluZGV4QSwgaW5kZXhCKSB7CisgICAgICAgICAgICAg
ICAgdmFyIHJlc3VsdCA9IHNvcnRCeU5vZGVGaWVsZChmaWVsZE5hbWUxLCBhc2NlbmRpbmcxLCBp
bmRleEEsIGluZGV4Qik7CisgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCA9PT0gMCkKKyAgICAg
ICAgICAgICAgICAgICAgcmVzdWx0ID0gc29ydEJ5Tm9kZUZpZWxkKGZpZWxkTmFtZTIsIGFzY2Vu
ZGluZzIsIGluZGV4QSwgaW5kZXhCKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgICAgICAgICAgfSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KK307CisKK1dlYklu
c3BlY3Rvci5IZWFwU25hcHNob3ROb2Rlc1Byb3ZpZGVyLnByb3RvdHlwZS5fX3Byb3RvX18gPSBX
ZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90R2VuZXJpY1Byb3ZpZGVyLnByb3RvdHlwZTsKKworV2Vi
SW5zcGVjdG9yLkhlYXBTbmFwc2hvdFBhdGhGaW5kZXIgPSBmdW5jdGlvbihzbmFwc2hvdCwgdGFy
Z2V0Tm9kZUluZGV4KQoreworICAgIHRoaXMuX3NuYXBzaG90ID0gc25hcHNob3Q7CisgICAgdGhp
cy5fbWF4TGVuZ3RoID0gMDsKKyAgICB0aGlzLl9sZW5ndGhMaW1pdCA9IDE1OworICAgIHRoaXMu
X3RhcmdldE5vZGVJbmRleCA9IHRhcmdldE5vZGVJbmRleDsKKyAgICB0aGlzLl9jdXJyZW50UGF0
aCA9IG51bGw7CisgICAgdGhpcy5fc2tpcEhpZGRlbiA9ICFXZWJJbnNwZWN0b3IuRGV0YWlsZWRI
ZWFwc2hvdFZpZXcucHJvdG90eXBlLnNob3dIaWRkZW5EYXRhOworICAgIHRoaXMuX3Jvb3RDaGls
ZHJlbiA9IHRoaXMuX2ZpbGxSb290Q2hpbGRyZW4oKTsKK30KKworV2ViSW5zcGVjdG9yLkhlYXBT
bmFwc2hvdFBhdGhGaW5kZXIucHJvdG90eXBlID0geworICAgIGZpbmROZXh0OiBmdW5jdGlvbigp
CisgICAgeworICAgICAgICBpZiAodGhpcy5fbWF4TGVuZ3RoID09PSAwKSB7CisgICAgICAgICAg
ICArK3RoaXMuX21heExlbmd0aDsKKyAgICAgICAgICAgIGlmICh0aGlzLl90YXJnZXROb2RlSW5k
ZXggaW4gdGhpcy5fcm9vdENoaWxkcmVuKQorICAgICAgICAgICAgICAgIHJldHVybiB7cGF0aDp0
aGlzLl9ub2RlVG9TdHJpbmcobmV3IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3ROb2RlV3JhcHBl
cih0aGlzLl9zbmFwc2hvdCwgdGhpcy5fdGFyZ2V0Tm9kZUluZGV4KSksIGxlbjogMH07CisgICAg
ICAgIH0KKworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwMDsgKytpKSB7CisgICAg
ICAgICAgICBpZiAoIXRoaXMuX2J1aWxkTmV4dFBhdGgoKSkgeworICAgICAgICAgICAgICAgIGlm
ICgrK3RoaXMuX21heExlbmd0aCA+PSB0aGlzLl9sZW5ndGhMaW1pdCkKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgICAgICAgICAgdGhpcy5fY3VycmVudFBhdGggPSBu
dWxsOworICAgICAgICAgICAgICAgIGlmICghdGhpcy5fYnVpbGROZXh0UGF0aCgpKQorICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlm
ICh0aGlzLl9pc1BhdGhGb3VuZCgpKQorICAgICAgICAgICAgICAgIHJldHVybiB7cGF0aDp0aGlz
Ll9wYXRoVG9TdHJpbmcodGhpcy5fY3VycmVudFBhdGgpLCBsZW46dGhpcy5fY3VycmVudFBhdGgu
bGVuZ3RofTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9LAorCisg
ICAgX2ZpbGxSb290Q2hpbGRyZW46IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHZhciByZXN1
bHQgPSBbXTsKKyAgICAgICAgZm9yICh2YXIgZWRnZSA9IHRoaXMuX3NuYXBzaG90LnJvb3ROb2Rl
LmVkZ2VzOyBlZGdlLmhhc05leHQ7IGVkZ2UuYmVjb21lTmV4dCgpKQorICAgICAgICAgICAgcmVz
dWx0W2VkZ2Uubm9kZUluZGV4XSA9IHRydWU7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
fSwKKworICAgIF9hcHBlbmRUb0N1cnJlbnRQYXRoOiBmdW5jdGlvbihyZXRhaW5lcikKKyAgICB7
CisgICAgICAgIHRoaXMuX2N1cnJlbnRQYXRoLl9jYWNoZVt0aGlzLl9sYXN0RWRnZS5ub2RlSW5k
ZXhdID0gdHJ1ZTsKKyAgICAgICAgdGhpcy5fY3VycmVudFBhdGgucHVzaChyZXRhaW5lcik7Cisg
ICAgfSwKKworICAgIF9yZW1vdmVMYXN0RnJvbUN1cnJlbnRQYXRoOiBmdW5jdGlvbigpCisgICAg
eworICAgICAgICB0aGlzLl9jdXJyZW50UGF0aC5wb3AoKTsKKyAgICAgICAgZGVsZXRlIHRoaXMu
X2N1cnJlbnRQYXRoLl9jYWNoZVt0aGlzLl9sYXN0RWRnZS5ub2RlSW5kZXhdOworICAgIH0sCisK
KyAgICBfaGFzSW5QYXRoOiBmdW5jdGlvbihub2RlSW5kZXgpCisgICAgeworICAgICAgICByZXR1
cm4gdGhpcy5fdGFyZ2V0Tm9kZUluZGV4ID09PSBub2RlSW5kZXgKKyAgICAgICAgICAgIHx8ICEh
dGhpcy5fY3VycmVudFBhdGguX2NhY2hlW25vZGVJbmRleF07CisgICAgfSwKKworICAgIF9pc1Bh
dGhGb3VuZDogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRQ
YXRoLmxlbmd0aCA9PT0gdGhpcy5fbWF4TGVuZ3RoCisgICAgICAgICAgICAmJiB0aGlzLl9sYXN0
RWRnZS5ub2RlSW5kZXggaW4gdGhpcy5fcm9vdENoaWxkcmVuOworICAgIH0sCisKKyAgICBnZXQg
X2xhc3RFZGdlKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9jdXJyZW50UGF0aFt0aGlz
Ll9jdXJyZW50UGF0aC5sZW5ndGggLSAxXTsKKyAgICB9LAorCisgICAgX3NraXBFZGdlOiBmdW5j
dGlvbihlZGdlKQorICAgIHsKKyAgICAgICAgcmV0dXJuICh0aGlzLl9za2lwSGlkZGVuICYmIChl
ZGdlLmlzSGlkZGVuIHx8IGVkZ2Uubm9kZS5pc0hpZGRlbikpCisgICAgICAgICAgICB8fCB0aGlz
Ll9oYXNJblBhdGgoZWRnZS5ub2RlSW5kZXgpOworICAgIH0sCisKKyAgICBfbmV4dEVkZ2U6IGZ1
bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHZhciBlZGdlID0gdGhpcy5fbGFzdEVkZ2U7CisgICAg
ICAgIHdoaWxlICh0aGlzLl9za2lwRWRnZShlZGdlKSAmJiBlZGdlLmhhc05leHQpCisgICAgICAg
ICAgICBlZGdlLmJlY29tZU5leHQoKTsKKyAgICAgICAgcmV0dXJuIGVkZ2U7CisgICAgfSwKKwor
ICAgIF9idWlsZE5leHRQYXRoOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICBpZiAodGhpcy5f
Y3VycmVudFBhdGggIT09IG51bGwpIHsKKyAgICAgICAgICAgIHZhciBlZGdlID0gdGhpcy5fbGFz
dEVkZ2U7CisgICAgICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgICAgIGVkZ2Uu
YmVjb21lTmV4dCgpOworICAgICAgICAgICAgICAgIGVkZ2UgPSB0aGlzLl9uZXh0RWRnZSgpOwor
ICAgICAgICAgICAgICAgIGlmIChlZGdlLmhhc05leHQpCisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICAg
ICAgICAgIGlmICh0aGlzLl9jdXJyZW50UGF0aC5sZW5ndGggPiAxKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICB0aGlzLl9yZW1vdmVMYXN0RnJvbUN1cnJlbnRQYXRoKCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBlZGdlID0gdGhpcy5fbGFzdEVkZ2U7CisgICAgICAgICAgICAgICAgICAg
ICAgICBlZGdlLmJlY29tZU5leHQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVkZ2UgPSB0
aGlzLl9uZXh0RWRnZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVkZ2UuaGFzTmV4
dCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICh0aGlzLl9jdXJyZW50UGF0
aC5sZW5ndGggPCB0aGlzLl9tYXhMZW5ndGgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZWRnZSA9IHRoaXMuX25leHRFZGdlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChlZGdlLmhhc05leHQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0aGlzLl9hcHBlbmRUb0N1cnJlbnRQYXRoKGVkZ2Uubm9kZS5yZXRhaW5lcnMpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHZhciBub2RlID0gbmV3IFdlYkluc3BlY3Rv
ci5IZWFwU25hcHNob3ROb2RlV3JhcHBlcih0aGlzLl9zbmFwc2hvdCwgdGhpcy5fdGFyZ2V0Tm9k
ZUluZGV4KTsKKyAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRQYXRoID0gW25vZGUucmV0YWluZXJz
XTsKKyAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRQYXRoLl9jYWNoZSA9IHt9OworICAgICAgICAg
ICAgd2hpbGUgKHRoaXMuX2N1cnJlbnRQYXRoLmxlbmd0aCA8IHRoaXMuX21heExlbmd0aCkgewor
ICAgICAgICAgICAgICAgIHZhciBlZGdlID0gdGhpcy5fbmV4dEVkZ2UoKTsKKyAgICAgICAgICAg
ICAgICBpZiAoZWRnZS5oYXNOZXh0KQorICAgICAgICAgICAgICAgICAgICB0aGlzLl9hcHBlbmRU
b0N1cnJlbnRQYXRoKGVkZ2Uubm9kZS5yZXRhaW5lcnMpOworICAgICAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0sCisKKyAgICBfbm9kZVRvU3RyaW5nOiBmdW5j
dGlvbihub2RlKQorICAgIHsKKyAgICAgICAgaWYgKG5vZGUuaWQgPT09IDEpCisgICAgICAgICAg
ICByZXR1cm4gbm9kZS5uYW1lOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gbm9k
ZS5uYW1lICsgIkAiICsgbm9kZS5pZDsKICAgICB9LAogCi0gICAgZ2V0IHJvb3RFZGdlcygpCisg
ICAgX3BhdGhUb1N0cmluZzogZnVuY3Rpb24ocGF0aCkKICAgICB7Ci0gICAgICAgIHJldHVybiAo
bmV3IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3ROb2RlV3JhcHBlcih0aGlzLCB0aGlzLl9yb290
Tm9kZUluZGV4KSkuZWRnZXM7CisgICAgICAgIGlmICghcGF0aCkKKyAgICAgICAgICAgIHJldHVy
biAiIjsKKyAgICAgICAgdmFyIHNQYXRoID0gW107CisgICAgICAgIGZvciAodmFyIGogPSAwOyBq
IDwgcGF0aC5sZW5ndGg7ICsraikKKyAgICAgICAgICAgIHNQYXRoLnB1c2gocGF0aFtqXS50b1N0
cmluZygpKTsKKyAgICAgICAgc1BhdGgucHVzaCh0aGlzLl9ub2RlVG9TdHJpbmcocGF0aFtwYXRo
Lmxlbmd0aCAtIDFdLm5vZGUpKTsKKyAgICAgICAgc1BhdGgucmV2ZXJzZSgpOworICAgICAgICBy
ZXR1cm4gc1BhdGguam9pbigiIik7CiAgICAgfQogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSGVhcFNuYXBzaG90Vmlldy5qcyBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSGVhcFNuYXBzaG90Vmlldy5qcwppbmRleCAxMTM1MTgz
Li43YWQwZjE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L0hlYXBTbmFwc2hvdFZpZXcuanMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9IZWFwU25hcHNob3RWaWV3LmpzCkBAIC0zODIsMTUgKzM4MiwxNiBAQCBXZWJJbnNwZWN0
b3IuSGVhcFNuYXBzaG90Vmlldy5wcm90b3R5cGUgPSB7CiAgICAgewogICAgICAgICB2YXIgc25h
cHNob3QgPSBuZXcgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdChsb2FkZWRTbmFwc2hvdCk7CiAg
ICAgICAgIHZhciByZXN1bHQgPSB7bG93bGV2ZWxzOiB7fSwgZW50cmllczoge30sIGNoaWxkcmVu
OiB7fX07Ci0gICAgICAgIGZvciAodmFyIHJvb3RFZGdlcyA9IHNuYXBzaG90LnJvb3RFZGdlczsg
IXJvb3RFZGdlcy5kb25lOyByb290RWRnZXMubmV4dCgpKSB7Ci0gICAgICAgICAgICB2YXIgbm9k
ZSA9IHJvb3RFZGdlcy5ub2RlOworICAgICAgICB2YXIgcm9vdEVkZ2VzID0gc25hcHNob3Qucm9v
dE5vZGUuZWRnZXM7CisgICAgICAgIGZvciAodmFyIGVkZ2UgPSByb290RWRnZXM7IGVkZ2UuaGFz
TmV4dDsgZWRnZS5iZWNvbWVOZXh0KCkpIHsKKyAgICAgICAgICAgIHZhciBub2RlID0gZWRnZS5u
b2RlOwogICAgICAgICAgICAgaWYgKG5vZGUuaXNIaWRkZW4pCiAgICAgICAgICAgICAgICAgcmVz
dWx0Lmxvd2xldmVsc1tub2RlLm5hbWVdID0ge2NvdW50OiBub2RlLmluc3RhbmNlc0NvdW50LCBz
aXplOiBub2RlLnNlbGZTaXplLCB0eXBlOiBub2RlLm5hbWV9OwogICAgICAgICAgICAgZWxzZSBp
ZiAobm9kZS5pbnN0YW5jZXNDb3VudCkKICAgICAgICAgICAgICAgICByZXN1bHQuZW50cmllc1tu
b2RlLm5hbWVdID0ge2NvbnN0cnVjdG9yTmFtZTogbm9kZS5uYW1lLCBjb3VudDogbm9kZS5pbnN0
YW5jZXNDb3VudCwgc2l6ZTogbm9kZS5zZWxmU2l6ZX07CiAgICAgICAgICAgICBlbHNlIHsKICAg
ICAgICAgICAgICAgICB2YXIgZW50cnkgPSB7Y29uc3RydWN0b3JOYW1lOiBub2RlLm5hbWV9Owot
ICAgICAgICAgICAgICAgIGZvciAodmFyIGVkZ2VzID0gbm9kZS5lZGdlczsgIWVkZ2VzLmRvbmU7
IGVkZ2VzLm5leHQoKSkKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBlZGdlcyA9IG5vZGUuZWRn
ZXM7IGVkZ2VzLmhhc05leHQ7IGVkZ2VzLmJlY29tZU5leHQoKSkKICAgICAgICAgICAgICAgICAg
ICAgZW50cnlbZWRnZXMubm9kZUluZGV4XSA9IHtjb25zdHJ1Y3Rvck5hbWU6IGVkZ2VzLm5vZGUu
bmFtZSwgY291bnQ6IGVkZ2VzLm5hbWV9OwogICAgICAgICAgICAgICAgIHJlc3VsdC5jaGlsZHJl
bltyb290RWRnZXMubm9kZUluZGV4XSA9IGVudHJ5OwogICAgICAgICAgICAgfQo=
</data>
<flag name="review"
          id="72149"
          type_id="1"
          status="-"
          setter="pfeldman"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>80752</attachid>
            <date>2011-02-01 06:01:32 -0800</date>
            <delta_ts>2011-02-01 08:41:54 -0800</delta_ts>
            <desc>comments addressed</desc>
            <filename>patch-53173</filename>
            <type>text/plain</type>
            <size>32404</size>
            <attacher name="Mikhail Naganov">mnaganov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAwY2RiZmI3Li4wMjk3ZTY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjcg
QEAKKzIwMTEtMDItMDEgIE1pa2hhaWwgTmFnYW5vdiAgPG1uYWdhbm92QGNocm9taXVtLm9yZz4K
KworICAgICAgICBXZWIgSW5zcGVjdG9yOiBbQ2hyb21pdW1dIExhbmRpbmcgZGV0YWlsZWQgaGVh
cCBzbmFwc2hvdHMsIHBhcnQgMS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NTMxNzMKKworICAgICAgICBBZGRpbmcgY29kZSBmb3IgYWNjZXNzaW5n
IGhlYXAgc25hcHNob3QgZGF0YSBhbmQKKyAgICAgICAgcGVyZm9ybWluZyBncmFwaCBjYWxjdWxh
dGlvbnMuCisKKyAgICAgICAgKiBFbmdsaXNoLmxwcm9qL2xvY2FsaXplZFN0cmluZ3MuanM6Cisg
ICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9IZWFwU25hcHNob3QuanM6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90QXJyYXlTbGljZSk6IEhlbHBlciBjbGFzcyB0byBhdm9p
ZCBhcnJheSBjb250ZW50cyBjb3B5aW5nLgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFw
c2hvdEVkZ2UpOiBXcmFwcGVyIGZvciBhY2Nlc3NpbmcgZ3JhcGggZWRnZSBwcm9wZXJ0aWVzLgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdEVkZ2VJdGVyYXRvcik6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Tm9kZSk6IFdyYXBwZXIgZm9yIGFjY2Vzc2luZyBn
cmFwaCBub2RlIHByb3BlcnRpZXMuCisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90
Tm9kZUl0ZXJhdG9yKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3QpOiBXcmFw
cGVyIGZvciB0aGUgaGVhcCBzbmFwc2hvdC4KKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25h
cHNob3RGaWx0ZXJlZE9yZGVyZWRJdGVyYXRvcik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVh
cFNuYXBzaG90RWRnZXNQcm92aWRlcik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBz
aG90Tm9kZXNQcm92aWRlcik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UGF0
aEZpbmRlcik6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9IZWFwU25hcHNob3RWaWV3
LmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdFZpZXcucHJvdG90eXBlLl9j
b252ZXJ0U25hcHNob3QpOgorCiAyMDExLTAxLTMxICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFw
cGxlLmNvbT4KIAogICAgICAgICBOb3QgcmV2aWV3ZWQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9FbmdsaXNoLmxwcm9qL2xvY2FsaXplZFN0cmluZ3MuanMgYi9Tb3VyY2UvV2ViQ29yZS9F
bmdsaXNoLmxwcm9qL2xvY2FsaXplZFN0cmluZ3MuanMKaW5kZXggN2FlY2JiNi4uZmQ5OTg3YSAx
MDA2NDQKQmluYXJ5IGZpbGVzIGEvU291cmNlL1dlYkNvcmUvRW5nbGlzaC5scHJvai9sb2NhbGl6
ZWRTdHJpbmdzLmpzIGFuZCBiL1NvdXJjZS9XZWJDb3JlL0VuZ2xpc2gubHByb2ovbG9jYWxpemVk
U3RyaW5ncy5qcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvSGVhcFNuYXBzaG90LmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9IZWFwU25hcHNob3QuanMKaW5kZXggNmY5MWE4MC4uNjkzNjkwNSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9IZWFwU25hcHNob3QuanMKKysrIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9IZWFwU25hcHNob3QuanMKQEAgLTI4
LDE3ICsyOCw0MSBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi1XZWJJbnNwZWN0b3IuSGVhcFNu
YXBzaG90RWRnZXNJdGVyYXRvciA9IGZ1bmN0aW9uKHNuYXBzaG90LCBlZGdlcykKK1dlYkluc3Bl
Y3Rvci5IZWFwU25hcHNob3RBcnJheVNsaWNlID0gZnVuY3Rpb24oc25hcHNob3QsIGFycmF5TmFt
ZSwgc3RhcnQsIGVuZCkKK3sKKyAgICAvLyBOb3RlOiB3ZSBkb24ndCByZWZlcmVuY2Ugc25hcHNo
b3QgY29udGVudHMgZGlyZWN0bHkgdG8gYXZvaWQKKyAgICAvLyBob2xkaW5nIHJlZmVyZW5jZXMg
dG8gYmlnIGNodW5rcyBvZiBkYXRhLgorICAgIHRoaXMuX3NuYXBzaG90ID0gc25hcHNob3Q7Cisg
ICAgdGhpcy5fYXJyYXlOYW1lID0gYXJyYXlOYW1lOworICAgIHRoaXMuX3N0YXJ0ID0gc3RhcnQ7
CisgICAgdGhpcy5sZW5ndGggPSBlbmQgLSBzdGFydDsKK30KKworV2ViSW5zcGVjdG9yLkhlYXBT
bmFwc2hvdEFycmF5U2xpY2UucHJvdG90eXBlID0geworICAgIGl0ZW06IGZ1bmN0aW9uKGluZGV4
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3NuYXBzaG90W3RoaXMuX2FycmF5TmFtZV1b
dGhpcy5fc3RhcnQgKyBpbmRleF07CisgICAgfQorfQorCitXZWJJbnNwZWN0b3IuSGVhcFNuYXBz
aG90RWRnZSA9IGZ1bmN0aW9uKHNuYXBzaG90LCBlZGdlcywgZWRnZUluZGV4KQogewogICAgIHRo
aXMuX3NuYXBzaG90ID0gc25hcHNob3Q7CiAgICAgdGhpcy5fZWRnZXMgPSBlZGdlczsKLSAgICB0
aGlzLl9lZGdlSW5kZXggPSAwOworICAgIHRoaXMuZWRnZUluZGV4ID0gZWRnZUluZGV4IHx8IDA7
CiB9CiAKLVdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RFZGdlc0l0ZXJhdG9yLnByb3RvdHlwZSA9
IHsKLSAgICBnZXQgZG9uZSgpCitXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RWRnZS5wcm90b3R5
cGUgPSB7CisgICAgY2xvbmU6IGZ1bmN0aW9uKCkKICAgICB7Ci0gICAgICAgIHJldHVybiB0aGlz
Ll9lZGdlSW5kZXggPj0gdGhpcy5fZWRnZXMubGVuZ3RoOworICAgICAgICByZXR1cm4gbmV3IFdl
Ykluc3BlY3Rvci5IZWFwU25hcHNob3RFZGdlKHRoaXMuX3NuYXBzaG90LCB0aGlzLl9lZGdlcywg
dGhpcy5lZGdlSW5kZXgpOworICAgIH0sCisKKyAgICBnZXQgaGFzU3RyaW5nTmFtZSgpCisgICAg
eworICAgICAgICBpZiAoIXRoaXMuaXNTaG9ydGN1dCkKKyAgICAgICAgICAgIHJldHVybiB0aGlz
Ll9oYXNTdHJpbmdOYW1lOworICAgICAgICByZXR1cm4gaXNOYU4ocGFyc2VJbnQodGhpcy5fbmFt
ZSwgMTApKTsKICAgICB9LAogCiAgICAgZ2V0IGlzRWxlbWVudCgpCkBAIC01MSw1OCArNzUsMTY3
IEBAIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RFZGdlc0l0ZXJhdG9yLnByb3RvdHlwZSA9IHsK
ICAgICAgICAgcmV0dXJuIHRoaXMuX3R5cGUoKSA9PT0gdGhpcy5fc25hcHNob3QuX2VkZ2VIaWRk
ZW5UeXBlOwogICAgIH0sCiAKLSAgICBnZXQgbmFtZSgpCisgICAgZ2V0IGlzSW50ZXJuYWwoKQog
ICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuaXNFbGVtZW50IHx8IHRoaXMuaXNIaWRkZW4gPyB0
aGlzLl9uYW1lT3JJbmRleCgpIDogdGhpcy5fc25hcHNob3QuX3N0cmluZ3NbdGhpcy5fbmFtZU9y
SW5kZXgoKV07CisgICAgICAgIHJldHVybiB0aGlzLl90eXBlKCkgPT09IHRoaXMuX3NuYXBzaG90
Ll9lZGdlSW50ZXJuYWxUeXBlOwogICAgIH0sCiAKLSAgICBuZXh0OiBmdW5jdGlvbigpCisgICAg
Z2V0IGlzU2hvcnRjdXQoKQogICAgIHsKLSAgICAgICAgdGhpcy5fZWRnZUluZGV4ICs9IHRoaXMu
X3NuYXBzaG90Ll9lZGdlRmllbGRzQ291bnQ7CisgICAgICAgIHJldHVybiB0aGlzLl90eXBlKCkg
PT09IHRoaXMuX3NuYXBzaG90Ll9lZGdlU2hvcnRjdXRUeXBlOworICAgIH0sCisKKyAgICBnZXQg
bmFtZSgpCisgICAgeworICAgICAgICBpZiAoIXRoaXMuaXNTaG9ydGN1dCkKKyAgICAgICAgICAg
IHJldHVybiB0aGlzLl9uYW1lOworICAgICAgICB2YXIgbnVtTmFtZSA9IHBhcnNlSW50KHRoaXMu
X25hbWUsIDEwKTsKKyAgICAgICAgcmV0dXJuIGlzTmFOKG51bU5hbWUpID8gdGhpcy5fbmFtZSA6
IG51bU5hbWU7CiAgICAgfSwKIAogICAgIGdldCBub2RlKCkKICAgICB7Ci0gICAgICAgIHJldHVy
biBuZXcgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdE5vZGVXcmFwcGVyKHRoaXMuX3NuYXBzaG90
LCB0aGlzLm5vZGVJbmRleCk7CisgICAgICAgIHJldHVybiBuZXcgV2ViSW5zcGVjdG9yLkhlYXBT
bmFwc2hvdE5vZGUodGhpcy5fc25hcHNob3QsIHRoaXMubm9kZUluZGV4KTsKICAgICB9LAogCiAg
ICAgZ2V0IG5vZGVJbmRleCgpCiAgICAgewotICAgICAgICByZXR1cm4gdGhpcy5fZWRnZXNbdGhp
cy5fZWRnZUluZGV4ICsgdGhpcy5fc25hcHNob3QuX2VkZ2VUb05vZGVPZmZzZXRdOworICAgICAg
ICByZXR1cm4gdGhpcy5fZWRnZXMuaXRlbSh0aGlzLmVkZ2VJbmRleCArIHRoaXMuX3NuYXBzaG90
Ll9lZGdlVG9Ob2RlT2Zmc2V0KTsKKyAgICB9LAorCisgICAgZ2V0IHJhd0VkZ2VzKCkKKyAgICB7
CisgICAgICAgIHJldHVybiB0aGlzLl9lZGdlczsKKyAgICB9LAorCisgICAgdG9TdHJpbmc6IGZ1
bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAodGhpcy50eXBlKSB7CisgICAgICAgIGNh
c2UgImNvbnRleHQiOiByZXR1cm4gIi0+IiArIHRoaXMubmFtZTsKKyAgICAgICAgY2FzZSAiZWxl
bWVudCI6IHJldHVybiAiWyIgKyB0aGlzLm5hbWUgKyAiXSI7CisgICAgICAgIGNhc2UgInByb3Bl
cnR5IjoKKyAgICAgICAgICAgIHJldHVybiB0aGlzLm5hbWUuaW5kZXhPZigiICIpID09PSAtMSA/
ICIuIiArIHRoaXMubmFtZSA6ICJbXCIiICsgdGhpcy5uYW1lICsgIlwiXSI7CisgICAgICAgIGNh
c2UgInNob3J0Y3V0IjoKKyAgICAgICAgICAgIHZhciBuYW1lID0gdGhpcy5uYW1lOworICAgICAg
ICAgICAgaWYgKHR5cGVvZiBuYW1lID09PSAic3RyaW5nIikKKyAgICAgICAgICAgICAgICByZXR1
cm4gdGhpcy5uYW1lLmluZGV4T2YoIiAiKSA9PT0gLTEgPyAiLiIgKyB0aGlzLm5hbWUgOiAiW1wi
IiArIHRoaXMubmFtZSArICJcIl0iOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
IHJldHVybiAiWyIgKyB0aGlzLm5hbWUgKyAiXSI7CisgICAgICAgIGNhc2UgImludGVybmFsIjoK
KyAgICAgICAgY2FzZSAiaGlkZGVuIjoKKyAgICAgICAgICAgIHJldHVybiAieyIgKyB0aGlzLm5h
bWUgKyAifSI7CisgICAgICAgIH07CisgICAgICAgIHJldHVybiAiPyIgKyB0aGlzLm5hbWUgKyAi
PyI7CisgICAgfSwKKworICAgIGdldCB0eXBlKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlz
Ll9zbmFwc2hvdC5fZWRnZVR5cGVzW3RoaXMuX3R5cGUoKV07CisgICAgfSwKKworICAgIGdldCBf
aGFzU3RyaW5nTmFtZSgpCisgICAgeworICAgICAgICByZXR1cm4gIXRoaXMuaXNFbGVtZW50ICYm
ICF0aGlzLmlzSGlkZGVuOworICAgIH0sCisKKyAgICBnZXQgX25hbWUoKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHRoaXMuX2hhc1N0cmluZ05hbWUgPyB0aGlzLl9zbmFwc2hvdC5fc3RyaW5nc1t0
aGlzLl9uYW1lT3JJbmRleF0gOiB0aGlzLl9uYW1lT3JJbmRleDsKICAgICB9LAogCi0gICAgX25h
bWVPckluZGV4OiBmdW5jdGlvbigpCisgICAgZ2V0IF9uYW1lT3JJbmRleCgpCiAgICAgewotICAg
ICAgICByZXR1cm4gdGhpcy5fZWRnZXNbdGhpcy5fZWRnZUluZGV4ICsgdGhpcy5fc25hcHNob3Qu
X2VkZ2VOYW1lT2Zmc2V0XTsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2VkZ2VzLml0ZW0odGhpcy5l
ZGdlSW5kZXggKyB0aGlzLl9zbmFwc2hvdC5fZWRnZU5hbWVPZmZzZXQpOwogICAgIH0sCiAKICAg
ICBfdHlwZTogZnVuY3Rpb24oKQogICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX2VkZ2VzW3Ro
aXMuX2VkZ2VJbmRleCArIHRoaXMuX3NuYXBzaG90Ll9lZGdlVHlwZU9mZnNldF07CisgICAgICAg
IHJldHVybiB0aGlzLl9lZGdlcy5pdGVtKHRoaXMuZWRnZUluZGV4ICsgdGhpcy5fc25hcHNob3Qu
X2VkZ2VUeXBlT2Zmc2V0KTsKICAgICB9CiB9OwogCi1XZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90
Tm9kZVdyYXBwZXIgPSBmdW5jdGlvbihzbmFwc2hvdCwgbm9kZUluZGV4KQorV2ViSW5zcGVjdG9y
LkhlYXBTbmFwc2hvdEVkZ2VJdGVyYXRvciA9IGZ1bmN0aW9uKGVkZ2UpCit7CisgICAgdGhpcy5l
ZGdlID0gZWRnZTsKK30KKworV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdEVkZ2VJdGVyYXRvci5w
cm90b3R5cGUgPSB7CisgICAgZmlyc3Q6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHRoaXMu
ZWRnZS5lZGdlSW5kZXggPSAwOworICAgIH0sCisKKyAgICBoYXNOZXh0OiBmdW5jdGlvbigpCisg
ICAgeworICAgICAgICByZXR1cm4gdGhpcy5lZGdlLmVkZ2VJbmRleCA8IHRoaXMuZWRnZS5fZWRn
ZXMubGVuZ3RoOworICAgIH0sCisKKyAgICBnZXQgaW5kZXgoKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIHRoaXMuZWRnZS5lZGdlSW5kZXg7CisgICAgfSwKKworICAgIHNldCBpbmRleChuZXdJbmRl
eCkKKyAgICB7CisgICAgICAgIHRoaXMuZWRnZS5lZGdlSW5kZXggPSBuZXdJbmRleDsKKyAgICB9
LAorCisgICAgZ2V0IGl0ZW0oKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuZWRnZTsKKyAg
ICB9LAorCisgICAgbmV4dDogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdGhpcy5lZGdlLmVk
Z2VJbmRleCArPSB0aGlzLmVkZ2UuX3NuYXBzaG90Ll9lZGdlRmllbGRzQ291bnQ7CisgICAgfQor
fTsKKworV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdE5vZGUgPSBmdW5jdGlvbihzbmFwc2hvdCwg
bm9kZUluZGV4KQogewogICAgIHRoaXMuX3NuYXBzaG90ID0gc25hcHNob3Q7Ci0gICAgdGhpcy5f
bm9kZXMgPSBzbmFwc2hvdC5fbm9kZXM7Ci0gICAgdGhpcy5fbm9kZUluZGV4ID0gbm9kZUluZGV4
OworICAgIHRoaXMuX2ZpcnN0Tm9kZUluZGV4ID0gbm9kZUluZGV4OworICAgIHRoaXMubm9kZUlu
ZGV4ID0gbm9kZUluZGV4OwogfQogCi1XZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Tm9kZVdyYXBw
ZXIucHJvdG90eXBlID0geworV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdE5vZGUucHJvdG90eXBl
ID0geworICAgIGdldCBjbGFzc05hbWUoKQorICAgIHsKKyAgICAgICAgc3dpdGNoICh0aGlzLnR5
cGUpIHsKKyAgICAgICAgY2FzZSAiaGlkZGVuIjoKKyAgICAgICAgICAgIHJldHVybiBXZWJJbnNw
ZWN0b3IuVUlTdHJpbmcoIihzeXN0ZW0pIik7CisgICAgICAgIGNhc2UgIm9iamVjdCI6CisgICAg
ICAgICAgICByZXR1cm4gdGhpcy5uYW1lOworICAgICAgICBjYXNlICJjb2RlIjoKKyAgICAgICAg
ICAgIHJldHVybiBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIihjb21waWxlZCBjb2RlKSIpOworICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuICIoIiArIHRoaXMudHlwZSArICIpIjsK
KyAgICAgICAgfQorICAgIH0sCisKKyAgICBkb21pbmF0b3JJbmRleDogZnVuY3Rpb24oKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX25vZGVzW3RoaXMubm9kZUluZGV4ICsgdGhpcy5fc25h
cHNob3QuX2RvbWluYXRvck9mZnNldF07CisgICAgfSwKKwogICAgIGdldCBlZGdlcygpCiAgICAg
ewotICAgICAgICByZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RFZGdlc0l0ZXJh
dG9yKHRoaXMuX3NuYXBzaG90LCB0aGlzLl9lZGdlcygpKTsKKyAgICAgICAgcmV0dXJuIG5ldyBX
ZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RWRnZUl0ZXJhdG9yKG5ldyBXZWJJbnNwZWN0b3IuSGVh
cFNuYXBzaG90RWRnZSh0aGlzLl9zbmFwc2hvdCwgdGhpcy5yYXdFZGdlcykpOwogICAgIH0sCiAK
ICAgICBnZXQgZWRnZXNDb3VudCgpCiAgICAgewotICAgICAgICByZXR1cm4gdGhpcy5fbm9kZXNb
dGhpcy5fbm9kZUluZGV4ICsgdGhpcy5fc25hcHNob3QuX2VkZ2VzQ291bnRPZmZzZXRdOworICAg
ICAgICByZXR1cm4gdGhpcy5fbm9kZXNbdGhpcy5ub2RlSW5kZXggKyB0aGlzLl9zbmFwc2hvdC5f
ZWRnZXNDb3VudE9mZnNldF07CisgICAgfSwKKworICAgIGdldCBpZCgpCisgICAgeworICAgICAg
ICByZXR1cm4gdGhpcy5fbm9kZXNbdGhpcy5ub2RlSW5kZXggKyB0aGlzLl9zbmFwc2hvdC5fbm9k
ZUlkT2Zmc2V0XTsKICAgICB9LAogCiAgICAgZ2V0IGluc3RhbmNlc0NvdW50KCkKICAgICB7Ci0g
ICAgICAgIHJldHVybiB0aGlzLl9ub2Rlc1t0aGlzLl9ub2RlSW5kZXggKyB0aGlzLl9zbmFwc2hv
dC5fbm9kZUluc3RhbmNlc0NvdW50T2Zmc2V0XTsKKyAgICAgICAgcmV0dXJuIHRoaXMuX25vZGVz
W3RoaXMubm9kZUluZGV4ICsgdGhpcy5fc25hcHNob3QuX25vZGVJbnN0YW5jZXNDb3VudE9mZnNl
dF07CiAgICAgfSwKIAogICAgIGdldCBpc0hpZGRlbigpCkBAIC0xMTAsMzYgKzI0MywxMDcgQEAg
V2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdE5vZGVXcmFwcGVyLnByb3RvdHlwZSA9IHsKICAgICAg
ICAgcmV0dXJuIHRoaXMuX3R5cGUoKSA9PT0gdGhpcy5fc25hcHNob3QuX25vZGVIaWRkZW5UeXBl
OwogICAgIH0sCiAKKyAgICBnZXQgaXNSb290KCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlz
Lm5vZGVJbmRleCA9PT0gdGhpcy5fc25hcHNob3QuX3Jvb3ROb2RlSW5kZXg7CisgICAgfSwKKwog
ICAgIGdldCBuYW1lKCkKICAgICB7CiAgICAgICAgIHJldHVybiB0aGlzLl9zbmFwc2hvdC5fc3Ry
aW5nc1t0aGlzLl9uYW1lKCldOwogICAgIH0sCiAKKyAgICBnZXQgcmF3RWRnZXMoKQorICAgIHsK
KyAgICAgICAgdmFyIGZpcnN0RWRnZUluZGV4ID0gdGhpcy5fZmlyc3RFZGdlSW5kZXgoKTsKKyAg
ICAgICAgcmV0dXJuIG5ldyBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90QXJyYXlTbGljZSh0aGlz
Ll9zbmFwc2hvdCwgIl9ub2RlcyIsIGZpcnN0RWRnZUluZGV4LCBmaXJzdEVkZ2VJbmRleCArIHRo
aXMuZWRnZXNDb3VudCAqIHRoaXMuX3NuYXBzaG90Ll9lZGdlRmllbGRzQ291bnQpOworICAgIH0s
CisKKyAgICBnZXQgcmV0YWluZWRTaXplKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9u
b2Rlc1t0aGlzLm5vZGVJbmRleCArIHRoaXMuX3NuYXBzaG90Ll9ub2RlUmV0YWluZWRTaXplT2Zm
c2V0XTsKKyAgICB9LAorCisgICAgZ2V0IHJldGFpbmVycygpCisgICAgeworICAgICAgICByZXR1
cm4gbmV3IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RFZGdlSXRlcmF0b3IobmV3IFdlYkluc3Bl
Y3Rvci5IZWFwU25hcHNob3RFZGdlKHRoaXMuX3NuYXBzaG90LCB0aGlzLl9zbmFwc2hvdC5yZXRh
aW5lcnModGhpcykpKTsKKyAgICB9LAorCiAgICAgZ2V0IHNlbGZTaXplKCkKICAgICB7Ci0gICAg
ICAgIHJldHVybiB0aGlzLl9ub2Rlc1t0aGlzLl9ub2RlSW5kZXggKyB0aGlzLl9zbmFwc2hvdC5f
bm9kZVNlbGZTaXplT2Zmc2V0XTsgCisgICAgICAgIHJldHVybiB0aGlzLl9ub2Rlc1t0aGlzLm5v
ZGVJbmRleCArIHRoaXMuX3NuYXBzaG90Ll9ub2RlU2VsZlNpemVPZmZzZXRdOyAKKyAgICB9LAor
CisgICAgZ2V0IHR5cGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3NuYXBzaG90Ll9u
b2RlVHlwZXNbdGhpcy5fdHlwZSgpXTsKICAgICB9LAogCiAgICAgX25hbWU6IGZ1bmN0aW9uKCkK
ICAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9ub2Rlc1t0aGlzLl9ub2RlSW5kZXggKyB0aGlz
Ll9zbmFwc2hvdC5fbm9kZU5hbWVPZmZzZXRdOyAKKyAgICAgICAgcmV0dXJuIHRoaXMuX25vZGVz
W3RoaXMubm9kZUluZGV4ICsgdGhpcy5fc25hcHNob3QuX25vZGVOYW1lT2Zmc2V0XTsgCisgICAg
fSwKKworICAgIGdldCBfbm9kZXMoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3NuYXBz
aG90Ll9ub2RlczsKICAgICB9LAogCi0gICAgX2VkZ2VzOiBmdW5jdGlvbigpCisgICAgX2ZpcnN0
RWRnZUluZGV4OiBmdW5jdGlvbigpCiAgICAgewotICAgICAgICB2YXIgZmlyc3RFZGdlSW5kZXgg
PSB0aGlzLl9ub2RlSW5kZXggKyB0aGlzLl9zbmFwc2hvdC5fZmlyc3RFZGdlT2Zmc2V0OwotICAg
ICAgICByZXR1cm4gdGhpcy5fbm9kZXMuc2xpY2UoZmlyc3RFZGdlSW5kZXgsIGZpcnN0RWRnZUlu
ZGV4ICsgdGhpcy5lZGdlc0NvdW50ICogdGhpcy5fc25hcHNob3QuX2VkZ2VGaWVsZHNDb3VudCk7
CisgICAgICAgIHJldHVybiB0aGlzLm5vZGVJbmRleCArIHRoaXMuX3NuYXBzaG90Ll9maXJzdEVk
Z2VPZmZzZXQ7CisgICAgfSwKKworICAgIGdldCBfbmV4dE5vZGVJbmRleCgpCisgICAgeworICAg
ICAgICByZXR1cm4gdGhpcy5fZmlyc3RFZGdlSW5kZXgoKSArIHRoaXMuZWRnZXNDb3VudCAqIHRo
aXMuX3NuYXBzaG90Ll9lZGdlRmllbGRzQ291bnQ7CiAgICAgfSwKIAogICAgIF90eXBlOiBmdW5j
dGlvbigpCiAgICAgewotICAgICAgICByZXR1cm4gdGhpcy5fbm9kZXNbdGhpcy5fbm9kZUluZGV4
ICsgdGhpcy5fc25hcHNob3QuX25vZGVUeXBlT2Zmc2V0XTsKKyAgICAgICAgcmV0dXJuIHRoaXMu
X25vZGVzW3RoaXMubm9kZUluZGV4ICsgdGhpcy5fc25hcHNob3QuX25vZGVUeXBlT2Zmc2V0XTsK
ICAgICB9CiB9OwogCitXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Tm9kZUl0ZXJhdG9yID0gZnVu
Y3Rpb24obm9kZSkKK3sKKyAgICB0aGlzLm5vZGUgPSBub2RlOworfQorCitXZWJJbnNwZWN0b3Iu
SGVhcFNuYXBzaG90Tm9kZUl0ZXJhdG9yLnByb3RvdHlwZSA9IHsKKyAgICBmaXJzdDogZnVuY3Rp
b24oKQorICAgIHsKKyAgICAgICAgdGhpcy5ub2RlLm5vZGVJbmRleCA9IHRoaXMubm9kZS5fZmly
c3ROb2RlSW5kZXg7CisgICAgfSwKKworICAgIGhhc05leHQ6IGZ1bmN0aW9uKCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiB0aGlzLm5vZGUubm9kZUluZGV4IDwgdGhpcy5ub2RlLl9ub2Rlcy5sZW5n
dGg7CisgICAgfSwKKworICAgIGdldCBpbmRleCgpCisgICAgeworICAgICAgICByZXR1cm4gdGhp
cy5ub2RlLm5vZGVJbmRleDsKKyAgICB9LAorCisgICAgc2V0IGluZGV4KG5ld0luZGV4KQorICAg
IHsKKyAgICAgICAgdGhpcy5ub2RlLm5vZGVJbmRleCA9IG5ld0luZGV4OworICAgIH0sCisKKyAg
ICBnZXQgaXRlbSgpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5ub2RlOworICAgIH0sCisK
KyAgICBuZXh0OiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB0aGlzLm5vZGUubm9kZUluZGV4
ID0gdGhpcy5ub2RlLl9uZXh0Tm9kZUluZGV4OworICAgIH0KK30KKwogV2ViSW5zcGVjdG9yLkhl
YXBTbmFwc2hvdCA9IGZ1bmN0aW9uKHByb2ZpbGUpCiB7Ci0gICAgdGhpcy5fcHJvZmlsZSA9IHBy
b2ZpbGU7CiAgICAgdGhpcy5fbm9kZXMgPSBwcm9maWxlLm5vZGVzOwogICAgIHRoaXMuX3N0cmlu
Z3MgPSBwcm9maWxlLnN0cmluZ3M7CiAKQEAgLTE1Nyw2ICszNjEsOCBAQCBXZWJJbnNwZWN0b3Iu
SGVhcFNuYXBzaG90LnByb3RvdHlwZSA9IHsKICAgICAgICAgdGhpcy5fbm9kZUlkT2Zmc2V0ID0g
bWV0YS5maWVsZHMuaW5kZXhPZigiaWQiKTsKICAgICAgICAgdGhpcy5fbm9kZUluc3RhbmNlc0Nv
dW50T2Zmc2V0ID0gdGhpcy5fbm9kZUlkT2Zmc2V0OwogICAgICAgICB0aGlzLl9ub2RlU2VsZlNp
emVPZmZzZXQgPSBtZXRhLmZpZWxkcy5pbmRleE9mKCJzZWxmX3NpemUiKTsKKyAgICAgICAgdGhp
cy5fbm9kZVJldGFpbmVkU2l6ZU9mZnNldCA9IG1ldGEuZmllbGRzLmluZGV4T2YoInJldGFpbmVk
X3NpemUiKTsKKyAgICAgICAgdGhpcy5fZG9taW5hdG9yT2Zmc2V0ID0gbWV0YS5maWVsZHMuaW5k
ZXhPZigiZG9taW5hdG9yIik7CiAgICAgICAgIHRoaXMuX2VkZ2VzQ291bnRPZmZzZXQgPSBtZXRh
LmZpZWxkcy5pbmRleE9mKCJjaGlsZHJlbl9jb3VudCIpOwogICAgICAgICB0aGlzLl9maXJzdEVk
Z2VPZmZzZXQgPSBtZXRhLmZpZWxkcy5pbmRleE9mKCJjaGlsZHJlbiIpOwogICAgICAgICB0aGlz
Ll9ub2RlVHlwZXMgPSBtZXRhLnR5cGVzW3RoaXMuX25vZGVUeXBlT2Zmc2V0XTsKQEAgLTE2OSwx
MCArMzc1LDUzMSBAQCBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90LnByb3RvdHlwZSA9IHsKICAg
ICAgICAgdGhpcy5fZWRnZVR5cGVzID0gZWRnZXNNZXRhLnR5cGVzW3RoaXMuX2VkZ2VUeXBlT2Zm
c2V0XTsKICAgICAgICAgdGhpcy5fZWRnZUVsZW1lbnRUeXBlID0gdGhpcy5fZWRnZVR5cGVzLmlu
ZGV4T2YoImVsZW1lbnQiKTsKICAgICAgICAgdGhpcy5fZWRnZUhpZGRlblR5cGUgPSB0aGlzLl9l
ZGdlVHlwZXMuaW5kZXhPZigiaGlkZGVuIik7CisgICAgICAgIHRoaXMuX2VkZ2VJbnRlcm5hbFR5
cGUgPSB0aGlzLl9lZGdlVHlwZXMuaW5kZXhPZigiaW50ZXJuYWwiKTsKKyAgICAgICAgdGhpcy5f
ZWRnZVNob3J0Y3V0VHlwZSA9IHRoaXMuX2VkZ2VUeXBlcy5pbmRleE9mKCJzaG9ydGN1dCIpOwor
ICAgIH0sCisKKyAgICBkaXNwb3NlOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICBkZWxldGUg
dGhpcy5fbm9kZXM7CisgICAgICAgIGRlbGV0ZSB0aGlzLl9zdHJpbmdzOworICAgICAgICBpZiAo
dGhpcy5faWRzTWFwKQorICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2lkc01hcDsKKyAgICAgICAg
aWYgKHRoaXMuX3JldGFpbmVycykgeworICAgICAgICAgICAgZGVsZXRlIHRoaXMuX3JldGFpbmVy
czsKKyAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9ub2Rlc1RvUmV0YWluZXJzOworICAgICAgICB9
CisgICAgICAgIGlmICh0aGlzLl9hZ2dyZWdhdGVzKSB7CisgICAgICAgICAgICBkZWxldGUgdGhp
cy5fYWdncmVnYXRlczsKKyAgICAgICAgICAgIHRoaXMuX2FnZ3JlZ2F0ZXNXaXRoSW5kZXhlcyA9
IGZhbHNlOworICAgICAgICB9CisgICAgfSwKKworICAgIGdldCBhbGxOb2RlcygpCisgICAgewor
ICAgICAgICByZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3ROb2RlSXRlcmF0b3Io
dGhpcy5yb290Tm9kZSk7CisgICAgfSwKKworICAgIGdldCBub2Rlc0NvdW50KCkKKyAgICB7Cisg
ICAgICAgIGlmICh0aGlzLl9ub2Rlc0NvdW50KQorICAgICAgICAgICAgcmV0dXJuIHRoaXMuX25v
ZGVzQ291bnQ7CisKKyAgICAgICAgdGhpcy5fbm9kZXNDb3VudCA9IDA7CisgICAgICAgIGZvciAo
dmFyIGl0ZXIgPSB0aGlzLmFsbE5vZGVzOyBpdGVyLmhhc05leHQoKTsgaXRlci5uZXh0KCkpCisg
ICAgICAgICAgICArK3RoaXMuX25vZGVzQ291bnQ7CisgICAgICAgIHJldHVybiB0aGlzLl9ub2Rl
c0NvdW50OworICAgIH0sCisKKyAgICByZXN0b3JlOiBmdW5jdGlvbihwcm9maWxlKQorICAgIHsK
KyAgICAgICAgdGhpcy5fbm9kZXMgPSBwcm9maWxlLm5vZGVzOworICAgICAgICB0aGlzLl9zdHJp
bmdzID0gcHJvZmlsZS5zdHJpbmdzOworICAgIH0sCisKKyAgICBnZXQgcm9vdE5vZGUoKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIG5ldyBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Tm9kZSh0aGlz
LCB0aGlzLl9yb290Tm9kZUluZGV4KTsKKyAgICB9LAorCisgICAgZ2V0IHRvdGFsU2l6ZSgpCisg
ICAgeworICAgICAgICByZXR1cm4gdGhpcy5yb290Tm9kZS5yZXRhaW5lZFNpemU7CisgICAgfSwK
KworICAgIGdldCBpZHNNYXAoKQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMuX2lkc01hcCkKKyAg
ICAgICAgICAgIHJldHVybiB0aGlzLl9pZHNNYXA7CisKKyAgICAgICAgdGhpcy5faWRzTWFwID0g
W107CisgICAgICAgIGZvciAodmFyIGl0ZXIgPSB0aGlzLmFsbE5vZGVzOyBpdGVyLmhhc05leHQo
KTsgaXRlci5uZXh0KCkpIHsKKyAgICAgICAgICAgIHRoaXMuX2lkc01hcFtpdGVyLm5vZGUuaWRd
ID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhpcy5faWRzTWFwOworICAgIH0s
CisKKyAgICByZXRhaW5lcnM6IGZ1bmN0aW9uKG5vZGUpCisgICAgeworICAgICAgICBpZiAoIXRo
aXMuX3JldGFpbmVycykKKyAgICAgICAgICAgIHRoaXMuX2J1aWxkUmV0YWluZXJzKCk7CisKKyAg
ICAgICAgdmFyIHJldEluZGV4RnJvbSA9IHRoaXMuX25vZGVzVG9SZXRhaW5lcnNbbm9kZS5ub2Rl
SW5kZXhdOworICAgICAgICB2YXIgcmV0SW5kZXhUbyA9IHRoaXMuX25vZGVzVG9SZXRhaW5lcnNb
bm9kZS5fbmV4dE5vZGVJbmRleF07CisgICAgICAgIHJldHVybiBuZXcgV2ViSW5zcGVjdG9yLkhl
YXBTbmFwc2hvdEFycmF5U2xpY2UodGhpcywgIl9yZXRhaW5lcnMiLCByZXRJbmRleEZyb20sIHJl
dEluZGV4VG8pOworICAgIH0sCisKKyAgICBhZ2dyZWdhdGVzOiBmdW5jdGlvbih3aXRoTm9kZUlu
ZGV4ZXMpCisgICAgeworICAgICAgICBpZiAoIXRoaXMuX2FnZ3JlZ2F0ZXMpCisgICAgICAgICAg
ICB0aGlzLl9idWlsZEFnZ3JlZ2F0ZXMoKTsKKyAgICAgICAgaWYgKHdpdGhOb2RlSW5kZXhlcyAm
JiAhdGhpcy5fYWdncmVnYXRlc1dpdGhJbmRleGVzKQorICAgICAgICAgICAgdGhpcy5fYnVpbGRB
Z2dyZWdhdGVzSW5kZXhlcygpOworICAgICAgICByZXR1cm4gdGhpcy5fYWdncmVnYXRlczsKKyAg
ICB9LAorCisgICAgX2J1aWxkUmV0YWluZXJzOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB0
aGlzLl9ub2Rlc1RvUmV0YWluZXJzID0gW107CisgICAgICAgIGZvciAodmFyIG5vZGVzSXRlciA9
IHRoaXMuYWxsTm9kZXM7IG5vZGVzSXRlci5oYXNOZXh0KCk7IG5vZGVzSXRlci5uZXh0KCkpIHsK
KyAgICAgICAgICAgIHZhciBub2RlID0gbm9kZXNJdGVyLm5vZGU7CisgICAgICAgICAgICBpZiAo
IShub2RlLm5vZGVJbmRleCBpbiB0aGlzLl9ub2Rlc1RvUmV0YWluZXJzKSkKKyAgICAgICAgICAg
ICAgICB0aGlzLl9ub2Rlc1RvUmV0YWluZXJzW25vZGUubm9kZUluZGV4XSA9IDA7CisgICAgICAg
ICAgICBmb3IgKHZhciBlZGdlc0l0ZXIgPSBub2RlLmVkZ2VzOyBlZGdlc0l0ZXIuaGFzTmV4dCgp
OyBlZGdlc0l0ZXIubmV4dCgpKSB7CisgICAgICAgICAgICAgICAgdmFyIGVkZ2UgPSBlZGdlc0l0
ZXIuZWRnZTsKKyAgICAgICAgICAgICAgICB2YXIgbm9kZUluZGV4ID0gZWRnZS5ub2RlSW5kZXg7
CisgICAgICAgICAgICAgICAgaWYgKCEobm9kZUluZGV4IGluIHRoaXMuX25vZGVzVG9SZXRhaW5l
cnMpKQorICAgICAgICAgICAgICAgICAgICB0aGlzLl9ub2Rlc1RvUmV0YWluZXJzW25vZGVJbmRl
eF0gPSAwOworICAgICAgICAgICAgICAgIHRoaXMuX25vZGVzVG9SZXRhaW5lcnNbbm9kZUluZGV4
XSArPSB0aGlzLl9lZGdlRmllbGRzQ291bnQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgbm9kZXNJdGVyID0gdGhpcy5hbGxOb2RlczsKKyAgICAgICAgdmFyIG5vZGUgPSBub2Rl
c0l0ZXIubm9kZTsKKyAgICAgICAgdmFyIHByZXZJbmRleCA9IHRoaXMuX25vZGVzVG9SZXRhaW5l
cnNbbm9kZS5ub2RlSW5kZXhdID0gMDsKKyAgICAgICAgdmFyIHByZXZSZXRzQ291bnQgPSB0aGlz
Ll9ub2Rlc1RvUmV0YWluZXJzW25vZGUubm9kZUluZGV4XTsKKyAgICAgICAgbm9kZXNJdGVyLm5l
eHQoKTsKKyAgICAgICAgZm9yICg7IG5vZGVzSXRlci5oYXNOZXh0KCk7IG5vZGVzSXRlci5uZXh0
KCkpIHsKKyAgICAgICAgICAgIG5vZGUgPSBub2Rlc0l0ZXIubm9kZTsKKyAgICAgICAgICAgIHZh
ciBzYXZlZFJlZnNDb3VudCA9IHRoaXMuX25vZGVzVG9SZXRhaW5lcnNbbm9kZS5ub2RlSW5kZXhd
OworICAgICAgICAgICAgdGhpcy5fbm9kZXNUb1JldGFpbmVyc1tub2RlLm5vZGVJbmRleF0gPSBw
cmV2SW5kZXggKyBwcmV2UmV0c0NvdW50OworICAgICAgICAgICAgcHJldkluZGV4ID0gdGhpcy5f
bm9kZXNUb1JldGFpbmVyc1tub2RlLm5vZGVJbmRleF07CisgICAgICAgICAgICBwcmV2UmV0c0Nv
dW50ID0gc2F2ZWRSZWZzQ291bnQ7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fcmV0YWluZXJz
ID0gbmV3IEFycmF5KHByZXZJbmRleCArIHByZXZSZXRzQ291bnQpOworICAgICAgICB0aGlzLl9u
b2Rlc1RvUmV0YWluZXJzW3RoaXMuX25vZGVzLmxlbmd0aF0gPSB0aGlzLl9yZXRhaW5lcnMubGVu
Z3RoOworICAgICAgICBmb3IgKG5vZGVzSXRlciA9IHRoaXMuYWxsTm9kZXM7IG5vZGVzSXRlci5o
YXNOZXh0KCk7IG5vZGVzSXRlci5uZXh0KCkpIHsKKyAgICAgICAgICAgIG5vZGUgPSBub2Rlc0l0
ZXIubm9kZTsKKyAgICAgICAgICAgIHZhciByZXRzQ291bnQgPSB0aGlzLl9ub2Rlc1RvUmV0YWlu
ZXJzW25vZGUuX25leHROb2RlSW5kZXhdIC0gdGhpcy5fbm9kZXNUb1JldGFpbmVyc1tub2RlLm5v
ZGVJbmRleF07CisgICAgICAgICAgICBpZiAocmV0c0NvdW50ID4gMCkgeworICAgICAgICAgICAg
ICAgIHRoaXMuX3JldGFpbmVyc1t0aGlzLl9ub2Rlc1RvUmV0YWluZXJzW25vZGUubm9kZUluZGV4
XV0gPSByZXRzQ291bnQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZm9yIChu
b2Rlc0l0ZXIgPSB0aGlzLmFsbE5vZGVzOyBub2Rlc0l0ZXIuaGFzTmV4dCgpOyBub2Rlc0l0ZXIu
bmV4dCgpKSB7CisgICAgICAgICAgICBub2RlID0gbm9kZXNJdGVyLm5vZGU7CisgICAgICAgICAg
ICBmb3IgKHZhciBlZGdlc0l0ZXIgPSBub2RlLmVkZ2VzOyBlZGdlc0l0ZXIuaGFzTmV4dCgpOyBl
ZGdlc0l0ZXIubmV4dCgpKSB7CisgICAgICAgICAgICAgICAgdmFyIGVkZ2UgPSBlZGdlc0l0ZXIu
ZWRnZTsKKyAgICAgICAgICAgICAgICB2YXIgbm9kZUluZGV4ID0gZWRnZS5ub2RlSW5kZXg7Cisg
ICAgICAgICAgICAgICAgdmFyIHJldEluZGV4ID0gdGhpcy5fbm9kZXNUb1JldGFpbmVyc1tub2Rl
SW5kZXhdOworICAgICAgICAgICAgICAgIHRoaXMuX3JldGFpbmVyc1tyZXRJbmRleF0gLT0gdGhp
cy5fZWRnZUZpZWxkc0NvdW50OworICAgICAgICAgICAgICAgIHZhciBpZHggPSByZXRJbmRleCAr
IHRoaXMuX3JldGFpbmVyc1tyZXRJbmRleF07CisgICAgICAgICAgICAgICAgdGhpcy5fcmV0YWlu
ZXJzW2lkeCArIHRoaXMuX2VkZ2VUeXBlT2Zmc2V0XSA9IGVkZ2UuX3R5cGUoKTsKKyAgICAgICAg
ICAgICAgICB0aGlzLl9yZXRhaW5lcnNbaWR4ICsgdGhpcy5fZWRnZU5hbWVPZmZzZXRdID0gZWRn
ZS5fbmFtZU9ySW5kZXg7CisgICAgICAgICAgICAgICAgdGhpcy5fcmV0YWluZXJzW2lkeCArIHRo
aXMuX2VkZ2VUb05vZGVPZmZzZXRdID0gbm9kZS5ub2RlSW5kZXg7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9LAorCisgICAgX2J1aWxkQWdncmVnYXRlczogZnVuY3Rpb24oKQorICAg
IHsKKyAgICAgICAgdGhpcy5fYWdncmVnYXRlcyA9IHt9OworICAgICAgICBmb3IgKHZhciBpdGVy
ID0gdGhpcy5hbGxOb2RlczsgaXRlci5oYXNOZXh0KCk7IGl0ZXIubmV4dCgpKSB7CisgICAgICAg
ICAgICB2YXIgbm9kZSA9IGl0ZXIubm9kZTsKKyAgICAgICAgICAgIHZhciBjbGFzc05hbWUgPSBu
b2RlLmNsYXNzTmFtZTsKKyAgICAgICAgICAgIHZhciBuYW1lTWF0dGVycyA9IG5vZGUudHlwZSA9
PT0gIm9iamVjdCI7CisgICAgICAgICAgICBpZiAobm9kZS5zZWxmU2l6ZSA9PT0gMCkKKyAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmICghKGNsYXNzTmFtZSBpbiB0aGlz
Ll9hZ2dyZWdhdGVzKSkKKyAgICAgICAgICAgICAgICB0aGlzLl9hZ2dyZWdhdGVzW2NsYXNzTmFt
ZV0gPSB7IGNvdW50OiAwLCBzZWxmOiAwLCBtYXhSZXQ6IDAsIHR5cGU6IG5vZGUudHlwZSwgbmFt
ZTogbmFtZU1hdHRlcnMgPyBub2RlLm5hbWUgOiBudWxsLCBpZHhzOiBbXSB9OworICAgICAgICAg
ICAgdmFyIGNsc3MgPSB0aGlzLl9hZ2dyZWdhdGVzW2NsYXNzTmFtZV07CisgICAgICAgICAgICAr
K2Nsc3MuY291bnQ7CisgICAgICAgICAgICBjbHNzLnNlbGYgKz0gbm9kZS5zZWxmU2l6ZTsKKyAg
ICAgICAgICAgIGlmIChub2RlLnJldGFpbmVkU2l6ZSA+IGNsc3MubWF4UmV0KQorICAgICAgICAg
ICAgICAgIGNsc3MubWF4UmV0ID0gbm9kZS5yZXRhaW5lZFNpemU7CisgICAgICAgIH0KKyAgICB9
LAorCisgICAgX2J1aWxkQWdncmVnYXRlc0luZGV4ZXM6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAg
ICAgIGZvciAodmFyIGl0ZXIgPSB0aGlzLmFsbE5vZGVzOyBpdGVyLmhhc05leHQoKTsgaXRlci5u
ZXh0KCkpIHsKKyAgICAgICAgICAgIHZhciBub2RlID0gaXRlci5ub2RlOworICAgICAgICAgICAg
dmFyIGNsYXNzTmFtZSA9IG5vZGUuY2xhc3NOYW1lOworICAgICAgICAgICAgdmFyIGNsc3MgPSB0
aGlzLl9hZ2dyZWdhdGVzW2NsYXNzTmFtZV07CisgICAgICAgICAgICBpZiAoY2xzcykKKyAgICAg
ICAgICAgICAgICBjbHNzLmlkeHMucHVzaChub2RlLm5vZGVJbmRleCk7CisgICAgICAgIH0KKwor
ICAgICAgICB2YXIgbm9kZUEgPSBuZXcgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdE5vZGUodGhp
cyk7CisgICAgICAgIHZhciBub2RlQiA9IG5ldyBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Tm9k
ZSh0aGlzKTsKKyAgICAgICAgZm9yICh2YXIgY2xzcyBpbiB0aGlzLl9hZ2dyZWdhdGVzKQorICAg
ICAgICAgICAgdGhpcy5fYWdncmVnYXRlc1tjbHNzXS5pZHhzLnNvcnQoCisgICAgICAgICAgICAg
ICAgZnVuY3Rpb24oaWR4QSwgaWR4QikgeworICAgICAgICAgICAgICAgICAgICBub2RlQS5ub2Rl
SW5kZXggPSBpZHhBOworICAgICAgICAgICAgICAgICAgICBub2RlQi5ub2RlSW5kZXggPSBpZHhC
OworICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZUEuaWQgPCBub2RlQi5pZCA/IC0xIDog
MTsKKyAgICAgICAgICAgICAgICB9KTsKKworICAgICAgICB0aGlzLl9hZ2dyZWdhdGVzV2l0aElu
ZGV4ZXMgPSB0cnVlOworICAgIH0KK307CisKK1dlYkluc3BlY3Rvci5IZWFwU25hcHNob3RGaWx0
ZXJlZE9yZGVyZWRJdGVyYXRvciA9IGZ1bmN0aW9uKHNuYXBzaG90LCBpdGVyYXRvciwgZmlsdGVy
KQoreworICAgIHRoaXMuX3NuYXBzaG90ID0gc25hcHNob3Q7CisgICAgdGhpcy5fZmlsdGVyID0g
ZmlsdGVyOworICAgIHRoaXMuX2l0ZXJhdG9yID0gaXRlcmF0b3I7CisgICAgdGhpcy5faXRlcmF0
aW9uT3JkZXIgPSBudWxsOworICAgIHRoaXMuX3Bvc2l0aW9uID0gMDsKKyAgICB0aGlzLl9sYXN0
Q29tcGFyYXRvciA9IG51bGw7Cit9CisKK1dlYkluc3BlY3Rvci5IZWFwU25hcHNob3RGaWx0ZXJl
ZE9yZGVyZWRJdGVyYXRvci5wcm90b3R5cGUgPSB7CisgICAgX2NyZWF0ZUl0ZXJhdGlvbk9yZGVy
OiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB0aGlzLl9pdGVyYXRpb25PcmRlciA9IFtdOwor
ICAgICAgICB2YXIgaXRlcmF0b3IgPSB0aGlzLl9pdGVyYXRvcjsKKyAgICAgICAgaWYgKCF0aGlz
Ll9maWx0ZXIpIHsKKyAgICAgICAgICAgIGZvciAoaXRlcmF0b3IuZmlyc3QoKTsgaXRlcmF0b3Iu
aGFzTmV4dCgpOyBpdGVyYXRvci5uZXh0KCkpCisgICAgICAgICAgICAgICAgdGhpcy5faXRlcmF0
aW9uT3JkZXIucHVzaChpdGVyYXRvci5pbmRleCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICBmb3IgKGl0ZXJhdG9yLmZpcnN0KCk7IGl0ZXJhdG9yLmhhc05leHQoKTsgaXRlcmF0b3Iu
bmV4dCgpKSB7CisgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2ZpbHRlcihpdGVyYXRvci5pdGVt
KSkKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5faXRlcmF0aW9uT3JkZXIucHVzaChpdGVyYXRv
ci5pbmRleCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9LAorCisgICAgZmlyc3Q6
IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHRoaXMuX3Bvc2l0aW9uID0gMDsKKyAgICB9LAor
CisgICAgaGFzTmV4dDogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3Bv
c2l0aW9uIDwgdGhpcy5faXRlcmF0aW9uT3JkZXIubGVuZ3RoOworICAgIH0sCisKKyAgICBnZXQg
aXNFbXB0eSgpCisgICAgeworICAgICAgICBpZiAodGhpcy5faXRlcmF0aW9uT3JkZXIpCisgICAg
ICAgICAgICByZXR1cm4gIXRoaXMuX2l0ZXJhdGlvbk9yZGVyLmxlbmd0aDsKKyAgICAgICAgdmFy
IGl0ZXJhdG9yID0gdGhpcy5faXRlcmF0b3I7CisgICAgICAgIGlmICghdGhpcy5fZmlsdGVyKSB7
CisgICAgICAgICAgICBpdGVyYXRvci5maXJzdCgpOyAgICAgICAgICAgIAorICAgICAgICAgICAg
cmV0dXJuICFpdGVyYXRvci5oYXNOZXh0KCk7CisgICAgICAgIH0KKyAgICAgICAgZm9yIChpdGVy
YXRvci5maXJzdCgpOyBpdGVyYXRvci5oYXNOZXh0KCk7IGl0ZXJhdG9yLm5leHQoKSkKKyAgICAg
ICAgICAgIGlmICh0aGlzLl9maWx0ZXIoaXRlcmF0b3IuaXRlbSkpIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgcmV0dXJuIHRydWU7ICAgICAgICAKKyAgICB9LAorCisgICAgZ2V0IGl0ZW0oKQorICAg
IHsKKyAgICAgICAgdGhpcy5faXRlcmF0b3IuaW5kZXggPSB0aGlzLl9pdGVyYXRpb25PcmRlclt0
aGlzLl9wb3NpdGlvbl07CisgICAgICAgIHJldHVybiB0aGlzLl9pdGVyYXRvci5pdGVtOworICAg
IH0sCisgICAgCisgICAgZ2V0IGxhc3RDb21wYXJhdG9yKCkKKyAgICB7CisgICAgICAgIHJldHVy
biB0aGlzLl9sYXN0Q29tcGFyYXRvcjsKKyAgICB9LAorCisgICAgZ2V0IGxlbmd0aCgpCisgICAg
eworICAgICAgICBpZiAoIXRoaXMuX2l0ZXJhdGlvbk9yZGVyKQorICAgICAgICAgICAgdGhpcy5f
Y3JlYXRlSXRlcmF0aW9uT3JkZXIoKTsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2l0ZXJhdGlvbk9y
ZGVyLmxlbmd0aDsKKyAgICB9LAorCisgICAgbmV4dDogZnVuY3Rpb24oKQorICAgIHsKKyAgICAg
ICAgKyt0aGlzLl9wb3NpdGlvbjsKKyAgICB9Cit9CisKK1dlYkluc3BlY3Rvci5IZWFwU25hcHNo
b3RGaWx0ZXJlZE9yZGVyZWRJdGVyYXRvci5wcm90b3R5cGUuY3JlYXRlQ29tcGFyYXRvciA9IGZ1
bmN0aW9uKGZpZWxkTmFtZXMpCit7CisgICAgcmV0dXJuIHtmaWVsZE5hbWUxOmZpZWxkTmFtZXNb
MF0sIGFzY2VuZGluZzE6ZmllbGROYW1lc1sxXSwgZmllbGROYW1lMjpmaWVsZE5hbWVzWzJdLCBh
c2NlbmRpbmcyOmZpZWxkTmFtZXNbM119OworfQorCitXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90
RWRnZXNQcm92aWRlciA9IGZ1bmN0aW9uKHNuYXBzaG90LCByYXdFZGdlcywgZmlsdGVyKQorewor
ICAgIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RGaWx0ZXJlZE9yZGVyZWRJdGVyYXRvci5jYWxs
KHRoaXMsIHNuYXBzaG90LCBuZXcgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdEVkZ2VJdGVyYXRv
cihuZXcgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdEVkZ2Uoc25hcHNob3QsIHJhd0VkZ2VzKSks
IGZpbHRlcik7Cit9CisKK1dlYkluc3BlY3Rvci5IZWFwU25hcHNob3RFZGdlc1Byb3ZpZGVyLnBy
b3RvdHlwZSA9IHsKKyAgICBzb3J0OiBmdW5jdGlvbihjb21wYXJhdG9yKQorICAgIHsKKyAgICAg
ICAgaWYgKHRoaXMuX2xhc3RDb21wYXJhdG9yID09PSBjb21wYXJhdG9yKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICB0aGlzLl9sYXN0Q29tcGFyYXRvciA9IGNvbXBhcmF0b3I7
CisgICAgICAgIHZhciBmaWVsZE5hbWUxID0gY29tcGFyYXRvci5maWVsZE5hbWUxOworICAgICAg
ICB2YXIgZmllbGROYW1lMiA9IGNvbXBhcmF0b3IuZmllbGROYW1lMjsKKyAgICAgICAgdmFyIGFz
Y2VuZGluZzEgPSBjb21wYXJhdG9yLmFzY2VuZGluZzE7CisgICAgICAgIHZhciBhc2NlbmRpbmcy
ID0gY29tcGFyYXRvci5hc2NlbmRpbmcyOworCisgICAgICAgIHZhciBlZGdlQSA9IHRoaXMuX2l0
ZXJhdG9yLml0ZW0uY2xvbmUoKTsKKyAgICAgICAgdmFyIGVkZ2VCID0gZWRnZUEuY2xvbmUoKTsK
KyAgICAgICAgdmFyIG5vZGVBID0gbmV3IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3ROb2RlKHRo
aXMuX3NuYXBzaG90KTsKKyAgICAgICAgdmFyIG5vZGVCID0gbmV3IFdlYkluc3BlY3Rvci5IZWFw
U25hcHNob3ROb2RlKHRoaXMuX3NuYXBzaG90KTsKKworICAgICAgICBmdW5jdGlvbiBzb3J0QnlF
ZGdlRmllbGROYW1lKGFzY2VuZGluZywgaW5kZXhBLCBpbmRleEIpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGVkZ2VBLmVkZ2VJbmRleCA9IGluZGV4QTsKKyAgICAgICAgICAgIGVkZ2VCLmVkZ2VJ
bmRleCA9IGluZGV4QjsKKyAgICAgICAgICAgIGlmIChlZGdlQi5uYW1lID09PSAiX19wcm90b19f
IikgcmV0dXJuIC0xOworICAgICAgICAgICAgaWYgKGVkZ2VBLm5hbWUgPT09ICJfX3Byb3RvX18i
KSByZXR1cm4gMTsKKyAgICAgICAgICAgIHZhciByZXN1bHQgPQorICAgICAgICAgICAgICAgIGVk
Z2VBLmhhc1N0cmluZ05hbWUgPT09IGVkZ2VCLmhhc1N0cmluZ05hbWUgPworICAgICAgICAgICAg
ICAgIChlZGdlQS5uYW1lIDwgZWRnZUIubmFtZSA/IC0xIDogKGVkZ2VBLm5hbWUgPiBlZGdlQi5u
YW1lID8gMSA6IDApKSA6CisgICAgICAgICAgICAgICAgKGVkZ2VBLmhhc1N0cmluZ05hbWUgPyAt
MSA6IDEpOworICAgICAgICAgICAgcmV0dXJuIGFzY2VuZGluZyA/IHJlc3VsdCA6IC1yZXN1bHQ7
CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBzb3J0QnlOb2RlRmllbGQoZmllbGROYW1l
LCBhc2NlbmRpbmcsIGluZGV4QSwgaW5kZXhCKQorICAgICAgICB7CisgICAgICAgICAgICBlZGdl
QS5lZGdlSW5kZXggPSBpbmRleEE7CisgICAgICAgICAgICBlZGdlQi5lZGdlSW5kZXggPSBpbmRl
eEI7CisgICAgICAgICAgICBub2RlQS5ub2RlSW5kZXggPSBlZGdlQS5ub2RlSW5kZXg7CisgICAg
ICAgICAgICBub2RlQi5ub2RlSW5kZXggPSBlZGdlQi5ub2RlSW5kZXg7CisgICAgICAgICAgICB2
YXIgdmFsdWVBID0gbm9kZUFbZmllbGROYW1lXTsKKyAgICAgICAgICAgIHZhciB2YWx1ZUIgPSBu
b2RlQltmaWVsZE5hbWVdOworICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHZhbHVlQSA8IHZhbHVl
QiA/IC0xIDogKHZhbHVlQSA+IHZhbHVlQiA/IDEgOiAwKTsKKyAgICAgICAgICAgIHJldHVybiBh
c2NlbmRpbmcgPyByZXN1bHQgOiAtcmVzdWx0OworICAgICAgICB9CisKKyAgICAgICAgaWYgKCF0
aGlzLl9pdGVyYXRpb25PcmRlcikKKyAgICAgICAgICAgIHRoaXMuX2NyZWF0ZUl0ZXJhdGlvbk9y
ZGVyKCk7CisKKyAgICAgICAgaWYgKGZpZWxkTmFtZTEgPT09ICIhZWRnZU5hbWUiKQorICAgICAg
ICAgICAgdGhpcy5faXRlcmF0aW9uT3JkZXIuc29ydCgKKyAgICAgICAgICAgICAgICBmdW5jdGlv
bihpbmRleEEsIGluZGV4QikgeworICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gc29y
dEJ5RWRnZUZpZWxkTmFtZShhc2NlbmRpbmcxLCBpbmRleEEsIGluZGV4Qik7CisgICAgICAgICAg
ICAgICAgICAgIGlmIChyZXN1bHQgPT09IDApCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1
bHQgPSBzb3J0QnlOb2RlRmllbGQoZmllbGROYW1lMiwgYXNjZW5kaW5nMiwgaW5kZXhBLCBpbmRl
eEIpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgICAg
IH0pOworICAgICAgICBlbHNlIGlmIChmaWVsZE5hbWUyID09PSAiIWVkZ2VOYW1lIikKKyAgICAg
ICAgICAgIHRoaXMuX2l0ZXJhdGlvbk9yZGVyLnNvcnQoCisgICAgICAgICAgICAgICAgZnVuY3Rp
b24oaW5kZXhBLCBpbmRleEIpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHNv
cnRCeU5vZGVGaWVsZChmaWVsZE5hbWUxLCBhc2NlbmRpbmcxLCBpbmRleEEsIGluZGV4Qik7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgPT09IDApCisgICAgICAgICAgICAgICAgICAg
ICAgICByZXN1bHQgPSBzb3J0QnlFZGdlRmllbGROYW1lKGFzY2VuZGluZzIsIGluZGV4QSwgaW5k
ZXhCKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgICAg
ICB9KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdGhpcy5faXRlcmF0aW9uT3JkZXIuc29y
dCgKKyAgICAgICAgICAgICAgICBmdW5jdGlvbihpbmRleEEsIGluZGV4QikgeworICAgICAgICAg
ICAgICAgICAgICB2YXIgcmVzdWx0ID0gc29ydEJ5Tm9kZUZpZWxkKGZpZWxkTmFtZTEsIGFzY2Vu
ZGluZzEsIGluZGV4QSwgaW5kZXhCKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCA9
PT0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHNvcnRCeU5vZGVGaWVsZChm
aWVsZE5hbWUyLCBhc2NlbmRpbmcyLCBpbmRleEEsIGluZGV4Qik7CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KK307CisKK1dlYkluc3BlY3Rvci5IZWFwU25hcHNob3RFZGdlc1Byb3ZpZGVy
LnByb3RvdHlwZS5fX3Byb3RvX18gPSBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RmlsdGVyZWRP
cmRlcmVkSXRlcmF0b3IucHJvdG90eXBlOworCitXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Tm9k
ZXNQcm92aWRlciA9IGZ1bmN0aW9uKHNuYXBzaG90LCBub2RlcywgZmlsdGVyKQoreworICAgIFdl
Ykluc3BlY3Rvci5IZWFwU25hcHNob3RGaWx0ZXJlZE9yZGVyZWRJdGVyYXRvci5jYWxsKHRoaXMs
IHNuYXBzaG90LCBub2RlcywgZmlsdGVyKTsKK30KKworV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hv
dE5vZGVzUHJvdmlkZXIucHJvdG90eXBlID0geworICAgIHNvcnQ6IGZ1bmN0aW9uKGNvbXBhcmF0
b3IpCisgICAgeworICAgICAgICBpZiAodGhpcy5fbGFzdENvbXBhcmF0b3IgPT09IGNvbXBhcmF0
b3IpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHRoaXMuX2xhc3RDb21wYXJh
dG9yID0gY29tcGFyYXRvcjsKKyAgICAgICAgdmFyIGZpZWxkTmFtZTEgPSBjb21wYXJhdG9yLmZp
ZWxkTmFtZTE7CisgICAgICAgIHZhciBmaWVsZE5hbWUyID0gY29tcGFyYXRvci5maWVsZE5hbWUy
OworICAgICAgICB2YXIgYXNjZW5kaW5nMSA9IGNvbXBhcmF0b3IuYXNjZW5kaW5nMTsKKyAgICAg
ICAgdmFyIGFzY2VuZGluZzIgPSBjb21wYXJhdG9yLmFzY2VuZGluZzI7CisKKyAgICAgICAgdmFy
IG5vZGVBID0gbmV3IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3ROb2RlKHRoaXMuX3NuYXBzaG90
KTsKKyAgICAgICAgdmFyIG5vZGVCID0gbmV3IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3ROb2Rl
KHRoaXMuX3NuYXBzaG90KTsKKworICAgICAgICBmdW5jdGlvbiBzb3J0QnlOb2RlRmllbGQoZmll
bGROYW1lLCBhc2NlbmRpbmcsIGluZGV4QSwgaW5kZXhCKQorICAgICAgICB7CisgICAgICAgICAg
ICBub2RlQS5ub2RlSW5kZXggPSBpbmRleEE7CisgICAgICAgICAgICBub2RlQi5ub2RlSW5kZXgg
PSBpbmRleEI7CisgICAgICAgICAgICB2YXIgdmFsdWVBID0gbm9kZUFbZmllbGROYW1lXTsKKyAg
ICAgICAgICAgIHZhciB2YWx1ZUIgPSBub2RlQltmaWVsZE5hbWVdOworICAgICAgICAgICAgdmFy
IHJlc3VsdCA9IHZhbHVlQSA8IHZhbHVlQiA/IC0xIDogKHZhbHVlQSA+IHZhbHVlQiA/IDEgOiAw
KTsKKyAgICAgICAgICAgIHJldHVybiBhc2NlbmRpbmcgPyByZXN1bHQgOiAtcmVzdWx0OworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKCF0aGlzLl9pdGVyYXRpb25PcmRlcikKKyAgICAgICAgICAg
IHRoaXMuX2NyZWF0ZUl0ZXJhdGlvbk9yZGVyKCk7CisKKyAgICAgICAgdGhpcy5faXRlcmF0aW9u
T3JkZXIuc29ydCgKKyAgICAgICAgICAgIGZ1bmN0aW9uKGluZGV4QSwgaW5kZXhCKSB7CisgICAg
ICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHNvcnRCeU5vZGVGaWVsZChmaWVsZE5hbWUxLCBhc2Nl
bmRpbmcxLCBpbmRleEEsIGluZGV4Qik7CisgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCA9PT0g
MCkKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gc29ydEJ5Tm9kZUZpZWxkKGZpZWxkTmFt
ZTIsIGFzY2VuZGluZzIsIGluZGV4QSwgaW5kZXhCKTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
cmVzdWx0OworICAgICAgICAgICAgfSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KK307
CisKK1dlYkluc3BlY3Rvci5IZWFwU25hcHNob3ROb2Rlc1Byb3ZpZGVyLnByb3RvdHlwZS5fX3By
b3RvX18gPSBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90RmlsdGVyZWRPcmRlcmVkSXRlcmF0b3Iu
cHJvdG90eXBlOworCitXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UGF0aEZpbmRlciA9IGZ1bmN0
aW9uKHNuYXBzaG90LCB0YXJnZXROb2RlSW5kZXgpCit7CisgICAgdGhpcy5fc25hcHNob3QgPSBz
bmFwc2hvdDsKKyAgICB0aGlzLl9tYXhMZW5ndGggPSAxOworICAgIHRoaXMuX2xlbmd0aExpbWl0
ID0gMTU7CisgICAgdGhpcy5fdGFyZ2V0Tm9kZUluZGV4ID0gdGFyZ2V0Tm9kZUluZGV4OworICAg
IHRoaXMuX2N1cnJlbnRQYXRoID0gbnVsbDsKKyAgICB0aGlzLl9za2lwSGlkZGVuID0gIVdlYklu
c3BlY3Rvci5EZXRhaWxlZEhlYXBzaG90Vmlldy5wcm90b3R5cGUuc2hvd0hpZGRlbkRhdGE7Cisg
ICAgdGhpcy5fcm9vdENoaWxkcmVuID0gdGhpcy5fZmlsbFJvb3RDaGlsZHJlbigpOworfQorCitX
ZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UGF0aEZpbmRlci5wcm90b3R5cGUgPSB7CisgICAgZmlu
ZE5leHQ6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAw
MDAwOyArK2kpIHsKKyAgICAgICAgICAgIGlmICghdGhpcy5fYnVpbGROZXh0UGF0aCgpKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKCsrdGhpcy5fbWF4TGVuZ3RoID49IHRoaXMuX2xlbmd0aExpbWl0
KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgICAgICAgICB0aGlz
Ll9jdXJyZW50UGF0aCA9IG51bGw7CisgICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9idWlsZE5l
eHRQYXRoKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgaWYgKHRoaXMuX2lzUGF0aEZvdW5kKCkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIHtwYXRoOnRoaXMuX3BhdGhUb1N0cmluZyh0aGlzLl9jdXJyZW50UGF0aCksIGxlbjp0
aGlzLl9jdXJyZW50UGF0aC5sZW5ndGh9OworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0sCisKKyAgICBfZmlsbFJvb3RDaGlsZHJlbjogZnVuY3Rpb24oKQorICAgIHsK
KyAgICAgICAgdmFyIHJlc3VsdCA9IFtdOworICAgICAgICBmb3IgKHZhciBpdGVyID0gdGhpcy5f
c25hcHNob3Qucm9vdE5vZGUuZWRnZXM7IGl0ZXIuaGFzTmV4dCgpOyBpdGVyLm5leHQoKSkKKyAg
ICAgICAgICAgIHJlc3VsdFtpdGVyLmVkZ2Uubm9kZUluZGV4XSA9IHRydWU7CisgICAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgfSwKKworICAgIF9hcHBlbmRUb0N1cnJlbnRQYXRoOiBmdW5jdGlv
bihpdGVyKQorICAgIHsKKyAgICAgICAgdGhpcy5fY3VycmVudFBhdGguX2NhY2hlW3RoaXMuX2xh
c3RFZGdlLm5vZGVJbmRleF0gPSB0cnVlOworICAgICAgICB0aGlzLl9jdXJyZW50UGF0aC5wdXNo
KGl0ZXIpOworICAgIH0sCisKKyAgICBfcmVtb3ZlTGFzdEZyb21DdXJyZW50UGF0aDogZnVuY3Rp
b24oKQorICAgIHsKKyAgICAgICAgdGhpcy5fY3VycmVudFBhdGgucG9wKCk7CisgICAgICAgIGRl
bGV0ZSB0aGlzLl9jdXJyZW50UGF0aC5fY2FjaGVbdGhpcy5fbGFzdEVkZ2Uubm9kZUluZGV4XTsK
KyAgICB9LAorCisgICAgX2hhc0luUGF0aDogZnVuY3Rpb24obm9kZUluZGV4KQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHRoaXMuX3RhcmdldE5vZGVJbmRleCA9PT0gbm9kZUluZGV4CisgICAgICAg
ICAgICB8fCAhIXRoaXMuX2N1cnJlbnRQYXRoLl9jYWNoZVtub2RlSW5kZXhdOworICAgIH0sCisK
KyAgICBfaXNQYXRoRm91bmQ6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlz
Ll9jdXJyZW50UGF0aC5sZW5ndGggPT09IHRoaXMuX21heExlbmd0aAorICAgICAgICAgICAgJiYg
dGhpcy5fbGFzdEVkZ2Uubm9kZUluZGV4IGluIHRoaXMuX3Jvb3RDaGlsZHJlbjsKKyAgICB9LAor
CisgICAgZ2V0IF9sYXN0RWRnZUl0ZXIoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2N1
cnJlbnRQYXRoW3RoaXMuX2N1cnJlbnRQYXRoLmxlbmd0aCAtIDFdOworICAgIH0sCisKKyAgICBn
ZXQgX2xhc3RFZGdlKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9sYXN0RWRnZUl0ZXIu
ZWRnZTsKKyAgICB9LAorCisgICAgX3NraXBFZGdlOiBmdW5jdGlvbihlZGdlKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuICh0aGlzLl9za2lwSGlkZGVuICYmIChlZGdlLmlzSGlkZGVuIHx8IGVkZ2Uu
bm9kZS5pc0hpZGRlbikpCisgICAgICAgICAgICB8fCB0aGlzLl9oYXNJblBhdGgoZWRnZS5ub2Rl
SW5kZXgpOworICAgIH0sCisKKyAgICBfbmV4dEVkZ2VJdGVyOiBmdW5jdGlvbigpCisgICAgewor
ICAgICAgICB2YXIgaXRlciA9IHRoaXMuX2xhc3RFZGdlSXRlcjsKKyAgICAgICAgd2hpbGUgKHRo
aXMuX3NraXBFZGdlKGl0ZXIuZWRnZSkgJiYgaXRlci5oYXNOZXh0KCkpCisgICAgICAgICAgICBp
dGVyLm5leHQoKTsKKyAgICAgICAgcmV0dXJuIGl0ZXI7CisgICAgfSwKKworICAgIF9idWlsZE5l
eHRQYXRoOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICBpZiAodGhpcy5fY3VycmVudFBhdGgg
IT09IG51bGwpIHsKKyAgICAgICAgICAgIHZhciBpdGVyID0gdGhpcy5fbGFzdEVkZ2VJdGVyOwor
ICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAgICAgICBpdGVyLm5leHQoKTsK
KyAgICAgICAgICAgICAgICBpZiAoaXRlci5oYXNOZXh0KCkpCisgICAgICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAg
ICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50UGF0aC5sZW5ndGggPiAxKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICB0aGlzLl9yZW1vdmVMYXN0RnJvbUN1cnJlbnRQYXRoKCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBpdGVyID0gdGhpcy5fbGFzdEVkZ2VJdGVyOworICAgICAgICAgICAg
ICAgICAgICAgICAgaXRlci5uZXh0KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpdGVyID0g
dGhpcy5fbmV4dEVkZ2VJdGVyKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlci5o
YXNOZXh0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAodGhpcy5fY3Vy
cmVudFBhdGgubGVuZ3RoIDwgdGhpcy5fbWF4TGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGl0ZXIgPSB0aGlzLl9uZXh0RWRnZUl0ZXIoKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKGl0ZXIuaGFzTmV4dCgpKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdGhpcy5fYXBwZW5kVG9DdXJyZW50UGF0aChpdGVyLmVkZ2Uubm9k
ZS5yZXRhaW5lcnMpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0gZWxz
ZQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHZhciBub2Rl
ID0gbmV3IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3ROb2RlKHRoaXMuX3NuYXBzaG90LCB0aGlz
Ll90YXJnZXROb2RlSW5kZXgpOworICAgICAgICAgICAgdGhpcy5fY3VycmVudFBhdGggPSBbbm9k
ZS5yZXRhaW5lcnNdOworICAgICAgICAgICAgdGhpcy5fY3VycmVudFBhdGguX2NhY2hlID0ge307
CisgICAgICAgICAgICB3aGlsZSAodGhpcy5fY3VycmVudFBhdGgubGVuZ3RoIDwgdGhpcy5fbWF4
TGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgdmFyIGl0ZXIgPSB0aGlzLl9uZXh0RWRnZUl0ZXIo
KTsKKyAgICAgICAgICAgICAgICBpZiAoaXRlci5oYXNOZXh0KCkpCisgICAgICAgICAgICAgICAg
ICAgIHRoaXMuX2FwcGVuZFRvQ3VycmVudFBhdGgoaXRlci5lZGdlLm5vZGUucmV0YWluZXJzKTsK
KyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9LAorCisg
ICAgX25vZGVUb1N0cmluZzogZnVuY3Rpb24obm9kZSkKKyAgICB7CisgICAgICAgIGlmIChub2Rl
LmlkID09PSAxKQorICAgICAgICAgICAgcmV0dXJuIG5vZGUubmFtZTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgcmV0dXJuIG5vZGUubmFtZSArICJAIiArIG5vZGUuaWQ7CiAgICAgfSwKIAot
ICAgIGdldCByb290RWRnZXMoKQorICAgIF9wYXRoVG9TdHJpbmc6IGZ1bmN0aW9uKHBhdGgpCiAg
ICAgewotICAgICAgICByZXR1cm4gKG5ldyBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Tm9kZVdy
YXBwZXIodGhpcywgdGhpcy5fcm9vdE5vZGVJbmRleCkpLmVkZ2VzOworICAgICAgICBpZiAoIXBh
dGgpCisgICAgICAgICAgICByZXR1cm4gIiI7CisgICAgICAgIHZhciBzUGF0aCA9IFtdOworICAg
ICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHBhdGgubGVuZ3RoOyArK2opCisgICAgICAgICAgICBz
UGF0aC5wdXNoKHBhdGhbal0uZWRnZS50b1N0cmluZygpKTsKKyAgICAgICAgc1BhdGgucHVzaCh0
aGlzLl9ub2RlVG9TdHJpbmcocGF0aFtwYXRoLmxlbmd0aCAtIDFdLmVkZ2Uubm9kZSkpOworICAg
ICAgICBzUGF0aC5yZXZlcnNlKCk7CisgICAgICAgIHJldHVybiBzUGF0aC5qb2luKCIiKTsKICAg
ICB9CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9I
ZWFwU25hcHNob3RWaWV3LmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9I
ZWFwU25hcHNob3RWaWV3LmpzCmluZGV4IDExMzUxODMuLjQ0Yjk1YzMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSGVhcFNuYXBzaG90Vmlldy5qcworKysg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0hlYXBTbmFwc2hvdFZpZXcuanMK
QEAgLTM4MiwxNyArMzgyLDIwIEBAIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RWaWV3LnByb3Rv
dHlwZSA9IHsKICAgICB7CiAgICAgICAgIHZhciBzbmFwc2hvdCA9IG5ldyBXZWJJbnNwZWN0b3Iu
SGVhcFNuYXBzaG90KGxvYWRlZFNuYXBzaG90KTsKICAgICAgICAgdmFyIHJlc3VsdCA9IHtsb3ds
ZXZlbHM6IHt9LCBlbnRyaWVzOiB7fSwgY2hpbGRyZW46IHt9fTsKLSAgICAgICAgZm9yICh2YXIg
cm9vdEVkZ2VzID0gc25hcHNob3Qucm9vdEVkZ2VzOyAhcm9vdEVkZ2VzLmRvbmU7IHJvb3RFZGdl
cy5uZXh0KCkpIHsKLSAgICAgICAgICAgIHZhciBub2RlID0gcm9vdEVkZ2VzLm5vZGU7CisgICAg
ICAgIHZhciByb290RWRnZXNJdGVyID0gc25hcHNob3Qucm9vdE5vZGUuZWRnZXM7CisgICAgICAg
IGZvciAodmFyIGl0ZXIgPSByb290RWRnZXNJdGVyOyBpdGVyLmhhc05leHQoKTsgaXRlci5uZXh0
KCkpIHsKKyAgICAgICAgICAgIHZhciBub2RlID0gaXRlci5lZGdlLm5vZGU7CiAgICAgICAgICAg
ICBpZiAobm9kZS5pc0hpZGRlbikKICAgICAgICAgICAgICAgICByZXN1bHQubG93bGV2ZWxzW25v
ZGUubmFtZV0gPSB7Y291bnQ6IG5vZGUuaW5zdGFuY2VzQ291bnQsIHNpemU6IG5vZGUuc2VsZlNp
emUsIHR5cGU6IG5vZGUubmFtZX07CiAgICAgICAgICAgICBlbHNlIGlmIChub2RlLmluc3RhbmNl
c0NvdW50KQogICAgICAgICAgICAgICAgIHJlc3VsdC5lbnRyaWVzW25vZGUubmFtZV0gPSB7Y29u
c3RydWN0b3JOYW1lOiBub2RlLm5hbWUsIGNvdW50OiBub2RlLmluc3RhbmNlc0NvdW50LCBzaXpl
OiBub2RlLnNlbGZTaXplfTsKICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIHZh
ciBlbnRyeSA9IHtjb25zdHJ1Y3Rvck5hbWU6IG5vZGUubmFtZX07Ci0gICAgICAgICAgICAgICAg
Zm9yICh2YXIgZWRnZXMgPSBub2RlLmVkZ2VzOyAhZWRnZXMuZG9uZTsgZWRnZXMubmV4dCgpKQot
ICAgICAgICAgICAgICAgICAgICBlbnRyeVtlZGdlcy5ub2RlSW5kZXhdID0ge2NvbnN0cnVjdG9y
TmFtZTogZWRnZXMubm9kZS5uYW1lLCBjb3VudDogZWRnZXMubmFtZX07Ci0gICAgICAgICAgICAg
ICAgcmVzdWx0LmNoaWxkcmVuW3Jvb3RFZGdlcy5ub2RlSW5kZXhdID0gZW50cnk7CisgICAgICAg
ICAgICAgICAgZm9yICh2YXIgaW5uZXJJdGVyID0gbm9kZS5lZGdlczsgaW5uZXJJdGVyLmhhc05l
eHQoKTsgaW5uZXJJdGVyLm5leHQoKSkgeworICAgICAgICAgICAgICAgICAgICB2YXIgZWRnZSA9
IGlubmVySXRlci5lZGdlOworICAgICAgICAgICAgICAgICAgICBlbnRyeVtlZGdlLm5vZGVJbmRl
eF0gPSB7Y29uc3RydWN0b3JOYW1lOiBlZGdlLm5vZGUubmFtZSwgY291bnQ6IGVkZ2UubmFtZX07
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJlc3VsdC5jaGlsZHJlbltyb290
RWRnZXNJdGVyLmVkZ2Uubm9kZUluZGV4XSA9IGVudHJ5OwogICAgICAgICAgICAgfQogICAgICAg
ICB9CiAgICAgICAgIHJldHVybiByZXN1bHQ7Cg==
</data>
<flag name="review"
          id="72246"
          type_id="1"
          status="+"
          setter="pfeldman"
    />
    <flag name="commit-queue"
          id="72247"
          type_id="3"
          status="-"
          setter="mnaganov"
    />
          </attachment>
      

    </bug>

</bugzilla>