<?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>109430</bug_id>
          
          <creation_ts>2013-02-11 07:07:29 -0800</creation_ts>
          <short_desc>Web Inspector: separate SuggestBox from TextPrompt</short_desc>
          <delta_ts>2013-02-12 06:05:52 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector (Deprecated)</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Andrey Lushnikov">lushnikov</reporter>
          <assigned_to name="Andrey Lushnikov">lushnikov</assigned_to>
          <cc>apavlov</cc>
    
    <cc>keishi</cc>
    
    <cc>loislo</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>vsevik</cc>
    
    <cc>web-inspector-bugs</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>829649</commentid>
    <comment_count>0</comment_count>
    <who name="Andrey Lushnikov">lushnikov</who>
    <bug_when>2013-02-11 07:07:29 -0800</bug_when>
    <thetext>Separate SuggestBox implementation from TextPrompt by the means of intermediate interface.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>830727</commentid>
    <comment_count>1</comment_count>
      <attachid>187816</attachid>
    <who name="Andrey Lushnikov">lushnikov</who>
    <bug_when>2013-02-12 02:35:41 -0800</bug_when>
    <thetext>Created attachment 187816
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>830769</commentid>
    <comment_count>2</comment_count>
      <attachid>187816</attachid>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2013-02-12 04:05:24 -0800</bug_when>
    <thetext>Comment on attachment 187816
Patch

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

&gt; Source/WebCore/inspector/front-end/TextPrompt.js:950
&gt; +WebInspector.TextPrompt.SuggestBoxDelegate = function ()

extra whitespace before &quot;()&quot;

&gt; Source/WebCore/inspector/front-end/TextPrompt.js:954
&gt; +WebInspector.TextPrompt.SuggestBoxDelegate.prototype = {

This should rather be WebInspector.SuggestBoxDelegate, next to WebInspector.SuggestBox

&gt; Source/WebCore/inspector/front-end/TextPrompt.js:975
&gt; +WebInspector.TextPrompt.SuggestBox = function(suggestBoxDelegate, inputElement, className)

This should become WebInspector.SuggestBox, preferably in its own file</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>830774</commentid>
    <comment_count>3</comment_count>
      <attachid>187831</attachid>
    <who name="Andrey Lushnikov">lushnikov</who>
    <bug_when>2013-02-12 04:29:51 -0800</bug_when>
    <thetext>Created attachment 187831
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>830789</commentid>
    <comment_count>4</comment_count>
      <attachid>187836</attachid>
    <who name="Andrey Lushnikov">lushnikov</who>
    <bug_when>2013-02-12 05:01:32 -0800</bug_when>
    <thetext>Created attachment 187836
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>830812</commentid>
    <comment_count>5</comment_count>
      <attachid>187841</attachid>
    <who name="Andrey Lushnikov">lushnikov</who>
    <bug_when>2013-02-12 05:28:18 -0800</bug_when>
    <thetext>Created attachment 187841
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>830853</commentid>
    <comment_count>6</comment_count>
      <attachid>187841</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-12 06:05:47 -0800</bug_when>
    <thetext>Comment on attachment 187841
Patch

Clearing flags on attachment: 187841

Committed r142610: &lt;http://trac.webkit.org/changeset/142610&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>830854</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-12 06:05:52 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>187816</attachid>
            <date>2013-02-12 02:35:41 -0800</date>
            <delta_ts>2013-02-12 04:29:46 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-109430-20130212143211.patch</filename>
            <type>text/plain</type>
            <size>9308</size>
            <attacher name="Andrey Lushnikov">lushnikov</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQyNTg4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTE3MTMwZDVjZDgzYTMz
MmZhYzM4YThjYzI0ZDcxZmVmMDUwZjQyMy4uOGI1OTEzMGEyMjcyN2VkYzU1YTg0Njg0YjA0MTgy
MGZiODdhNGVhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMwIEBACisyMDEzLTAyLTEyICBBbmRy
ZXkgTHVzaG5pa292ICA8bHVzaG5pa292QGNocm9taXVtLm9yZz4KKworICAgICAgICBXZWIgSW5z
cGVjdG9yOiBzZXBhcmF0ZSBTdWdnZXN0Qm94IGZyb20gVGV4dFByb21wdAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA5NDMwCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ3JlYXRlIFdlYkluc3BlY3Rvci5U
ZXh0UHJvbXB0LlN1Z2dlc3RCb3hEZWxlZ2F0ZSBpbnRlcmZhY2UgYW5kCisgICAgICAgIHJlZmFj
dG9yIFRleHRQcm9tcHQgdG8gdXNlIHRoaXMgaW50ZXJmYWNlLgorCisgICAgICAgIE5vIG5ldyB0
ZXN0czogbm8gY2hhbmdlIGluIGJlaGF2aW91ci4KKworICAgICAgICAqIGluc3BlY3Rvci9mcm9u
dC1lbmQvVGV4dFByb21wdC5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0UHJvbXB0LnBy
b3RvdHlwZS51c2VyRW50ZXJlZFRleHQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRQcm9t
cHQucHJvdG90eXBlLl9jb21wbGV0aW9uc1JlYWR5KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5U
ZXh0UHJvbXB0LnByb3RvdHlwZS5hcHBseVN1Z2dlc3Rpb24pOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLlRleHRQcm9tcHQucHJvdG90eXBlLl9hcHBseVN1Z2dlc3Rpb24pOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLlRleHRQcm9tcHQuU3VnZ2VzdEJveERlbGVnYXRlKToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5UZXh0UHJvbXB0LlN1Z2dlc3RCb3hEZWxlZ2F0ZS5wcm90b3R5cGUuYXBwbHlTdWdn
ZXN0aW9uKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0UHJvbXB0LlN1Z2dlc3RCb3hEZWxl
Z2F0ZS5wcm90b3R5cGUuYWNjZXB0U3VnZ2VzdGlvbik6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
VGV4dFByb21wdC5TdWdnZXN0Qm94RGVsZWdhdGUucHJvdG90eXBlLnVzZXJFbnRlcmVkVGV4dCk6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFByb21wdC5TdWdnZXN0Qm94KToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5UZXh0UHJvbXB0LlN1Z2dlc3RCb3gucHJvdG90eXBlLl9hcHBseVN1Z2dl
c3Rpb24pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRQcm9tcHQuU3VnZ2VzdEJveC5wcm90
b3R5cGUuYWNjZXB0U3VnZ2VzdGlvbik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFByb21w
dC5TdWdnZXN0Qm94LnByb3RvdHlwZS5fdXBkYXRlSXRlbXMpOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLlRleHRQcm9tcHQuU3VnZ2VzdEJveC5wcm90b3R5cGUuX2NhblNob3dCb3gpOgorCiAyMDEz
LTAyLTExICBWaWF0Y2hlc2xhdiBPc3RhcGVua28gIDxzbC5vc3RhcGVua29Ac2Ftc3VuZy5jb20+
CiAKICAgICAgICAgW1F0XVtFRkxdW1dlYkdMXSBNaW5vciByZWZhY3RvcmluZyBvZiBHcmFwaGlj
c1N1cmZhY2UvR3JhcGhpY3NTdXJmYWNlR0xYCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL1RleHRQcm9tcHQuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL1RleHRQcm9tcHQuanMKaW5kZXggMmI1YjJkNWFhOGRkZjNjNGQyMzMwYzRh
MGM2NDMwMzcxMjkyNGM3Yi4uNjM5MDM2YmI4NWE1NzRhNmQ1ZTU0MTU0MWIxYmY4NjJkYjg5MzJl
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9UZXh0UHJv
bXB0LmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvVGV4dFByb21w
dC5qcwpAQCAtMzAsNiArMzAsNyBAQAogLyoqCiAgKiBAY29uc3RydWN0b3IKICAqIEBleHRlbmRz
IFdlYkluc3BlY3Rvci5PYmplY3QKKyAqIEBpbXBsZW1lbnRzIHtXZWJJbnNwZWN0b3IuVGV4dFBy
b21wdC5TdWdnZXN0Qm94RGVsZWdhdGV9CiAgKiBAcGFyYW0ge2Z1bmN0aW9uKEVsZW1lbnQsIFJh
bmdlLCBib29sZWFuLCBmdW5jdGlvbihBcnJheS48c3RyaW5nPiwgbnVtYmVyPSkpfSBjb21wbGV0
aW9ucwogICogQHBhcmFtIHtzdHJpbmc9fSBzdG9wQ2hhcmFjdGVycwogICovCkBAIC01MSw2ICs1
MiwxMSBAQCBXZWJJbnNwZWN0b3IuVGV4dFByb21wdC5FdmVudHMgPSB7CiB9OwogCiBXZWJJbnNw
ZWN0b3IuVGV4dFByb21wdC5wcm90b3R5cGUgPSB7CisgICAgdXNlckVudGVyZWRUZXh0OiBmdW5j
dGlvbigpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fdXNlckVudGVyZWRUZXh0OworICAg
IH0sCisKICAgICBnZXQgcHJveHlFbGVtZW50KCkKICAgICB7CiAgICAgICAgIHJldHVybiB0aGlz
Ll9wcm94eUVsZW1lbnQ7CkBAIC01MjAsNyArNTI2LDcgQEAgV2ViSW5zcGVjdG9yLlRleHRQcm9t
cHQucHJvdG90eXBlID0gewogICAgICAgICAgICAgICAgIHNlbGVjdGlvbi5hZGRSYW5nZShmaW5h
bFNlbGVjdGlvblJhbmdlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlCi0gICAgICAg
ICAgICB0aGlzLmFwcGx5U3VnZ2VzdGlvbihjb21wbGV0aW9uVGV4dCwgY29tcGxldGlvbnMubGVu
Z3RoID4gMSwgb3JpZ2luYWxXb3JkUHJlZml4UmFuZ2UpOworICAgICAgICAgICAgdGhpcy5fYXBw
bHlTdWdnZXN0aW9uKGNvbXBsZXRpb25UZXh0LCBjb21wbGV0aW9ucy5sZW5ndGggPiAxLCBvcmln
aW5hbFdvcmRQcmVmaXhSYW5nZSk7CiAgICAgfSwKIAogICAgIF9jb21wbGV0ZUNvbW1vblByZWZp
eDogZnVuY3Rpb24oKQpAQCAtNTM4LDkgKzU0NCwyMCBAQCBXZWJJbnNwZWN0b3IuVGV4dFByb21w
dC5wcm90b3R5cGUgPSB7CiAgICAgfSwKIAogICAgIC8qKgotICAgICAqIEBwYXJhbSB7UmFuZ2U9
fSBvcmlnaW5hbFByZWZpeFJhbmdlCisgICAgICogQHBhcmFtIHtzdHJpbmd9IGNvbXBsZXRpb25U
ZXh0CisgICAgICogQHBhcmFtIHtib29sZWFuPX0gaXNJbnRlcm1lZGlhdGVTdWdnZXN0aW9uCiAg
ICAgICovCi0gICAgYXBwbHlTdWdnZXN0aW9uOiBmdW5jdGlvbihjb21wbGV0aW9uVGV4dCwgaXNJ
bnRlcm1lZGlhdGVTdWdnZXN0aW9uLCBvcmlnaW5hbFByZWZpeFJhbmdlKQorICAgIGFwcGx5U3Vn
Z2VzdGlvbjogZnVuY3Rpb24oY29tcGxldGlvblRleHQsIGlzSW50ZXJtZWRpYXRlU3VnZ2VzdGlv
bikKKyAgICB7CisgICAgICAgIHRoaXMuX2FwcGx5U3VnZ2VzdGlvbihjb21wbGV0aW9uVGV4dCwg
aXNJbnRlcm1lZGlhdGVTdWdnZXN0aW9uKTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogQHBh
cmFtIHtzdHJpbmd9IGNvbXBsZXRpb25UZXh0CisgICAgICogQHBhcmFtIHtib29sZWFuPX0gaXNJ
bnRlcm1lZGlhdGVTdWdnZXN0aW9uCisgICAgICogQHBhcmFtIHtSYW5nZX0gb3JpZ2luYWxQcmVm
aXhSYW5nZQorICAgICAqLworICAgIF9hcHBseVN1Z2dlc3Rpb246IGZ1bmN0aW9uKGNvbXBsZXRp
b25UZXh0LCBpc0ludGVybWVkaWF0ZVN1Z2dlc3Rpb24sIG9yaWdpbmFsUHJlZml4UmFuZ2UpCiAg
ICAgewogICAgICAgICB2YXIgd29yZFByZWZpeExlbmd0aDsKICAgICAgICAgaWYgKG9yaWdpbmFs
UHJlZml4UmFuZ2UpCkBAIC03MTcsNyArNzM0LDcgQEAgV2ViSW5zcGVjdG9yLlRleHRQcm9tcHQu
cHJvdG90eXBlID0gewogICAgIGVudGVyS2V5UHJlc3NlZDogZnVuY3Rpb24oZXZlbnQpCiAgICAg
ewogICAgICAgICBpZiAodGhpcy5pc1N1Z2dlc3RCb3hWaXNpYmxlKCkpCi0gICAgICAgICAgICBy
ZXR1cm4gdGhpcy5fc3VnZ2VzdEJveC5lbnRlcktleVByZXNzZWQoZXZlbnQpOworICAgICAgICAg
ICAgcmV0dXJuIHRoaXMuX3N1Z2dlc3RCb3guZW50ZXJLZXlQcmVzc2VkKCk7CiAKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIH0sCkBAIC03MjUsNyArNzQyLDcgQEAgV2ViSW5zcGVjdG9yLlRl
eHRQcm9tcHQucHJvdG90eXBlID0gewogICAgIHVwS2V5UHJlc3NlZDogZnVuY3Rpb24oZXZlbnQp
CiAgICAgewogICAgICAgICBpZiAodGhpcy5pc1N1Z2dlc3RCb3hWaXNpYmxlKCkpCi0gICAgICAg
ICAgICByZXR1cm4gdGhpcy5fc3VnZ2VzdEJveC51cEtleVByZXNzZWQoZXZlbnQpOworICAgICAg
ICAgICAgcmV0dXJuIHRoaXMuX3N1Z2dlc3RCb3gudXBLZXlQcmVzc2VkKCk7CiAKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIH0sCkBAIC03MzMsNyArNzUwLDcgQEAgV2ViSW5zcGVjdG9yLlRl
eHRQcm9tcHQucHJvdG90eXBlID0gewogICAgIGRvd25LZXlQcmVzc2VkOiBmdW5jdGlvbihldmVu
dCkKICAgICB7CiAgICAgICAgIGlmICh0aGlzLmlzU3VnZ2VzdEJveFZpc2libGUoKSkKLSAgICAg
ICAgICAgIHJldHVybiB0aGlzLl9zdWdnZXN0Qm94LmRvd25LZXlQcmVzc2VkKGV2ZW50KTsKKyAg
ICAgICAgICAgIHJldHVybiB0aGlzLl9zdWdnZXN0Qm94LmRvd25LZXlQcmVzc2VkKCk7CiAKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0sCkBAIC03NDEsNyArNzU4LDcgQEAgV2ViSW5zcGVj
dG9yLlRleHRQcm9tcHQucHJvdG90eXBlID0gewogICAgIHBhZ2VVcEtleVByZXNzZWQ6IGZ1bmN0
aW9uKGV2ZW50KQogICAgIHsKICAgICAgICAgaWYgKHRoaXMuaXNTdWdnZXN0Qm94VmlzaWJsZSgp
KQotICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N1Z2dlc3RCb3gucGFnZVVwS2V5UHJlc3NlZChl
dmVudCk7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fc3VnZ2VzdEJveC5wYWdlVXBLZXlQcmVz
c2VkKCk7CiAKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0sCkBAIC03NDksNyArNzY2LDcg
QEAgV2ViSW5zcGVjdG9yLlRleHRQcm9tcHQucHJvdG90eXBlID0gewogICAgIHBhZ2VEb3duS2V5
UHJlc3NlZDogZnVuY3Rpb24oZXZlbnQpCiAgICAgewogICAgICAgICBpZiAodGhpcy5pc1N1Z2dl
c3RCb3hWaXNpYmxlKCkpCi0gICAgICAgICAgICByZXR1cm4gdGhpcy5fc3VnZ2VzdEJveC5wYWdl
RG93bktleVByZXNzZWQoZXZlbnQpOworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N1Z2dlc3RC
b3gucGFnZURvd25LZXlQcmVzc2VkKCk7CiAKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0s
CkBAIC05MjYsMTIgKzk0MywzOCBAQCBXZWJJbnNwZWN0b3IuVGV4dFByb21wdFdpdGhIaXN0b3J5
LnByb3RvdHlwZSA9IHsKICAgICBfX3Byb3RvX186IFdlYkluc3BlY3Rvci5UZXh0UHJvbXB0LnBy
b3RvdHlwZQogfQogCisKKy8qKgorICogQGludGVyZmFjZQorICovCitXZWJJbnNwZWN0b3IuVGV4
dFByb21wdC5TdWdnZXN0Qm94RGVsZWdhdGUgPSBmdW5jdGlvbiAoKQoreworfQorCitXZWJJbnNw
ZWN0b3IuVGV4dFByb21wdC5TdWdnZXN0Qm94RGVsZWdhdGUucHJvdG90eXBlID0geworICAgIC8q
KgorICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzdWdnZXN0aW9uCisgICAgICogQHBhcmFtIHtib29s
ZWFuPX0gaXNJbnRlcm1lZGlhdGVTdWdnZXN0aW9uCisgICAgICovCisgICAgYXBwbHlTdWdnZXN0
aW9uOiBmdW5jdGlvbihzdWdnZXN0aW9uLCBpc0ludGVybWVkaWF0ZVN1Z2dlc3Rpb24pIHsgfSwK
KworICAgIGFjY2VwdFN1Z2dlc3Rpb246IGZ1bmN0aW9uKCkgeyB9LAorCisgICAgLyoqCisgICAg
ICogQHJldHVybiB7c3RyaW5nfQorICAgICAqLworICAgIHVzZXJFbnRlcmVkVGV4dDogZnVuY3Rp
b24oKSB7IH0KK30KKwogLyoqCiAgKiBAY29uc3RydWN0b3IKKyAqIEBwYXJhbSB7V2ViSW5zcGVj
dG9yLlRleHRQcm9tcHQuU3VnZ2VzdEJveERlbGVnYXRlfSBzdWdnZXN0Qm94RGVsZWdhdGUKKyAq
IEBwYXJhbSB7RWxlbWVudH0gaW5wdXRFbGVtZW50CisgKiBAcGFyYW0ge3N0cmluZ30gY2xhc3NO
YW1lCiAgKi8KLVdlYkluc3BlY3Rvci5UZXh0UHJvbXB0LlN1Z2dlc3RCb3ggPSBmdW5jdGlvbih0
ZXh0UHJvbXB0LCBpbnB1dEVsZW1lbnQsIGNsYXNzTmFtZSkKK1dlYkluc3BlY3Rvci5UZXh0UHJv
bXB0LlN1Z2dlc3RCb3ggPSBmdW5jdGlvbihzdWdnZXN0Qm94RGVsZWdhdGUsIGlucHV0RWxlbWVu
dCwgY2xhc3NOYW1lKQogewotICAgIHRoaXMuX3RleHRQcm9tcHQgPSB0ZXh0UHJvbXB0OworICAg
IHRoaXMuX3N1Z2dlc3RCb3hEZWxlZ2F0ZSA9IHN1Z2dlc3RCb3hEZWxlZ2F0ZTsKICAgICB0aGlz
Ll9pbnB1dEVsZW1lbnQgPSBpbnB1dEVsZW1lbnQ7CiAgICAgdGhpcy5fbGVuZ3RoID0gMDsKICAg
ICB0aGlzLl9zZWxlY3RlZEluZGV4ID0gLTE7CkBAIC0xMDU5LDcgKzExMDIsNyBAQCBXZWJJbnNw
ZWN0b3IuVGV4dFByb21wdC5TdWdnZXN0Qm94LnByb3RvdHlwZSA9IHsKICAgICAgICAgaWYgKCFz
dWdnZXN0aW9uKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIHRoaXMuX3Rl
eHRQcm9tcHQuYXBwbHlTdWdnZXN0aW9uKHN1Z2dlc3Rpb24sIGlzSW50ZXJtZWRpYXRlU3VnZ2Vz
dGlvbik7CisgICAgICAgIHRoaXMuX3N1Z2dlc3RCb3hEZWxlZ2F0ZS5hcHBseVN1Z2dlc3Rpb24o
c3VnZ2VzdGlvbiwgaXNJbnRlcm1lZGlhdGVTdWdnZXN0aW9uKTsKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgfSwKIApAQCAtMTA3Myw3ICsxMTE2LDcgQEAgV2ViSW5zcGVjdG9yLlRleHRQcm9t
cHQuU3VnZ2VzdEJveC5wcm90b3R5cGUgPSB7CiAgICAgICAgIGlmICghcmVzdWx0KQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIHRoaXMuX3RleHRQcm9tcHQuYWNjZXB0U3Vn
Z2VzdGlvbigpOworICAgICAgICB0aGlzLl9zdWdnZXN0Qm94RGVsZWdhdGUuYWNjZXB0U3VnZ2Vz
dGlvbigpOwogCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0sCkBAIC0xMTQ4LDcgKzExOTEs
NyBAQCBXZWJJbnNwZWN0b3IuVGV4dFByb21wdC5TdWdnZXN0Qm94LnByb3RvdHlwZSA9IHsKICAg
ICAgICAgdGhpcy5fbGVuZ3RoID0gaXRlbXMubGVuZ3RoOwogICAgICAgICB0aGlzLmNvbnRlbnRF
bGVtZW50LnJlbW92ZUNoaWxkcmVuKCk7CiAKLSAgICAgICAgdmFyIHVzZXJFbnRlcmVkVGV4dCA9
IHRoaXMuX3RleHRQcm9tcHQuX3VzZXJFbnRlcmVkVGV4dDsKKyAgICAgICAgdmFyIHVzZXJFbnRl
cmVkVGV4dCA9IHRoaXMuX3N1Z2dlc3RCb3hEZWxlZ2F0ZS51c2VyRW50ZXJlZFRleHQoKTsKICAg
ICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7ICsraSkgewogICAgICAgICAg
ICAgdmFyIGl0ZW0gPSBpdGVtc1tpXTsKICAgICAgICAgICAgIHZhciBjdXJyZW50SXRlbUVsZW1l
bnQgPSB0aGlzLl9jcmVhdGVJdGVtRWxlbWVudCh1c2VyRW50ZXJlZFRleHQsIGl0ZW0pOwpAQCAt
MTE4OCw3ICsxMjMxLDcgQEAgV2ViSW5zcGVjdG9yLlRleHRQcm9tcHQuU3VnZ2VzdEJveC5wcm90
b3R5cGUgPSB7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgICAgICAvLyBEbyBub3Qg
c2hvdyBhIHNpbmdsZSBzdWdnZXN0aW9uIGlmIGl0IGlzIHRoZSBzYW1lIGFzIHVzZXItZW50ZXJl
ZCBwcmVmaXgsIGV2ZW4gaWYgYWxsb3dlZCB0byBzaG93IHNpbmdsZS1pdGVtIHN1Z2dlc3QgYm94
ZXMuCi0gICAgICAgIHJldHVybiBjYW5TaG93Rm9yU2luZ2xlSXRlbSAmJiBjb21wbGV0aW9uc1sw
XSAhPT0gdGhpcy5fdGV4dFByb21wdC5fdXNlckVudGVyZWRUZXh0OworICAgICAgICByZXR1cm4g
Y2FuU2hvd0ZvclNpbmdsZUl0ZW0gJiYgY29tcGxldGlvbnNbMF0gIT09IHRoaXMuX3N1Z2dlc3RC
b3hEZWxlZ2F0ZS51c2VyRW50ZXJlZFRleHQoKTsKICAgICB9LAogCiAgICAgX3JlbWVtYmVyUm93
Q291bnRQZXJWaWV3cG9ydDogZnVuY3Rpb24oKQpAQCAtMTIxNywyNyArMTI2MCw0MiBAQCBXZWJJ
bnNwZWN0b3IuVGV4dFByb21wdC5TdWdnZXN0Qm94LnByb3RvdHlwZSA9IHsKICAgICAgICAgICAg
IHRoaXMuaGlkZSgpOwogICAgIH0sCiAKLSAgICB1cEtleVByZXNzZWQ6IGZ1bmN0aW9uKGV2ZW50
KQorICAgIC8qKgorICAgICAqIEByZXR1cm4ge2Jvb2xlYW59CisgICAgICovCisgICAgdXBLZXlQ
cmVzc2VkOiBmdW5jdGlvbigpCiAgICAgewogICAgICAgICByZXR1cm4gdGhpcy5fc2VsZWN0Q2xv
c2VzdCgtMSwgdHJ1ZSk7CiAgICAgfSwKIAotICAgIGRvd25LZXlQcmVzc2VkOiBmdW5jdGlvbihl
dmVudCkKKyAgICAvKioKKyAgICAgKiBAcmV0dXJuIHtib29sZWFufQorICAgICAqLworICAgIGRv
d25LZXlQcmVzc2VkOiBmdW5jdGlvbigpCiAgICAgewogICAgICAgICByZXR1cm4gdGhpcy5fc2Vs
ZWN0Q2xvc2VzdCgxLCB0cnVlKTsKICAgICB9LAogCi0gICAgcGFnZVVwS2V5UHJlc3NlZDogZnVu
Y3Rpb24oZXZlbnQpCisgICAgLyoqCisgICAgICogQHJldHVybiB7Ym9vbGVhbn0KKyAgICAgKi8K
KyAgICBwYWdlVXBLZXlQcmVzc2VkOiBmdW5jdGlvbigpCiAgICAgewogICAgICAgICByZXR1cm4g
dGhpcy5fc2VsZWN0Q2xvc2VzdCgtdGhpcy5fcm93Q291bnRQZXJWaWV3cG9ydCwgZmFsc2UpOwog
ICAgIH0sCiAKLSAgICBwYWdlRG93bktleVByZXNzZWQ6IGZ1bmN0aW9uKGV2ZW50KQorICAgIC8q
KgorICAgICAqIEByZXR1cm4ge2Jvb2xlYW59CisgICAgICovCisgICAgcGFnZURvd25LZXlQcmVz
c2VkOiBmdW5jdGlvbigpCiAgICAgewogICAgICAgICByZXR1cm4gdGhpcy5fc2VsZWN0Q2xvc2Vz
dCh0aGlzLl9yb3dDb3VudFBlclZpZXdwb3J0LCBmYWxzZSk7CiAgICAgfSwKIAotICAgIGVudGVy
S2V5UHJlc3NlZDogZnVuY3Rpb24oZXZlbnQpCisgICAgLyoqCisgICAgICogQHJldHVybiB7Ym9v
bGVhbn0KKyAgICAgKi8KKyAgICBlbnRlcktleVByZXNzZWQ6IGZ1bmN0aW9uKCkKICAgICB7CiAg
ICAgICAgIHZhciBoYXNTZWxlY3RlZEl0ZW0gPSAhIXRoaXMuX3NlbGVjdGVkRWxlbWVudDsKICAg
ICAgICAgdGhpcy5hY2NlcHRTdWdnZXN0aW9uKCk7CkBAIC0xMjQ3LDggKzEzMDUsMTEgQEAgV2Vi
SW5zcGVjdG9yLlRleHRQcm9tcHQuU3VnZ2VzdEJveC5wcm90b3R5cGUgPSB7CiAgICAgICAgIHJl
dHVybiBoYXNTZWxlY3RlZEl0ZW07CiAgICAgfSwKIAotICAgIHRhYktleVByZXNzZWQ6IGZ1bmN0
aW9uKGV2ZW50KQorICAgIC8qKgorICAgICAqIEByZXR1cm4ge2Jvb2xlYW59CisgICAgICovCisg
ICAgdGFiS2V5UHJlc3NlZDogZnVuY3Rpb24oKQogICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMu
ZW50ZXJLZXlQcmVzc2VkKGV2ZW50KTsKKyAgICAgICAgcmV0dXJuIHRoaXMuZW50ZXJLZXlQcmVz
c2VkKCk7CiAgICAgfQogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>187831</attachid>
            <date>2013-02-12 04:29:51 -0800</date>
            <delta_ts>2013-02-12 05:01:26 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-109430-20130212162620.patch</filename>
            <type>text/plain</type>
            <size>35376</size>
            <attacher name="Andrey Lushnikov">lushnikov</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQyNTk4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGQ0ZjFkYzE3YTk5OGJj
NTU0OTRkMmE5YjkzYmM3OWJjMzM5N2UxNy4uMWM2ZmE2YjZjNjE1NzlmZWI5YzE1YTg2MjIyY2Zi
NDNjMjZhMDZiMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY0IEBACisyMDEzLTAyLTEyICBBbmRy
ZXkgTHVzaG5pa292ICA8bHVzaG5pa292QGNocm9taXVtLm9yZz4KKworICAgICAgICBXZWIgSW5z
cGVjdG9yOiBzZXBhcmF0ZSBTdWdnZXN0Qm94IGZyb20gVGV4dFByb21wdAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA5NDMwCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ3JlYXRlIFdlYkluc3BlY3Rvci5T
dWdnZXN0Qm94RGVsZWdhdGUgaW50ZXJmYWNlIGFuZAorICAgICAgICByZWZhY3RvciBUZXh0UHJv
bXB0IHRvIHVzZSB0aGlzIGludGVyZmFjZS4gU2VwYXJhdGUgU3VnZ2VzdEJveCBpbnRvCisgICAg
ICAgIFdlYkluc3BlY3Rvci5TdWdnZXN0Qm94IG5hbWVzcGFjZSBhbmQgcHV0IGl0IGludG8gaXRz
IG93biBmaWxlLgorCisgICAgICAgIE5vIG5ldyB0ZXN0czogbm8gY2hhbmdlIGluIGJlaGF2aW91
ci4KKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9X
ZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBpbnNwZWN0b3IvY29tcGlsZS1mcm9udC1lbmQucHk6
CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9TdWdnZXN0Qm94LmpzOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5TdWdnZXN0Qm94RGVsZWdhdGUpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLlN1Z2dlc3RCb3hEZWxlZ2F0ZS5wcm90b3R5cGUuYXBwbHlTdWdnZXN0aW9uKToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5TdWdnZXN0Qm94RGVsZWdhdGUucHJvdG90eXBlLmFjY2VwdFN1
Z2dlc3Rpb24pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlN1Z2dlc3RCb3hEZWxlZ2F0ZS5wcm90
b3R5cGUudXNlckVudGVyZWRUZXh0KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TdWdnZXN0Qm94
KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TdWdnZXN0Qm94LnByb3RvdHlwZS5nZXQgdmlzaWJs
ZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU3VnZ2VzdEJveC5wcm90b3R5cGUuZ2V0IGhhc1Nl
bGVjdGlvbik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU3VnZ2VzdEJveC5wcm90b3R5cGUuX29u
c2Nyb2xscmVzaXplKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TdWdnZXN0Qm94LnByb3RvdHlw
ZS5fdXBkYXRlQm94UG9zaXRpb25XaXRoRXhpc3RpbmdBbmNob3IpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLlN1Z2dlc3RCb3gucHJvdG90eXBlLl91cGRhdGVCb3hQb3NpdGlvbik6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuU3VnZ2VzdEJveC5wcm90b3R5cGUuX29uYm94bW91c2Vkb3duKToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5TdWdnZXN0Qm94LnByb3RvdHlwZS5oaWRlKToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5TdWdnZXN0Qm94LnByb3RvdHlwZS5yZW1vdmVGcm9tRWxlbWVudCk6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IuU3VnZ2VzdEJveC5wcm90b3R5cGUuX2FwcGx5U3VnZ2VzdGlv
bik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU3VnZ2VzdEJveC5wcm90b3R5cGUuYWNjZXB0U3Vn
Z2VzdGlvbik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU3VnZ2VzdEJveC5wcm90b3R5cGUuX3Nl
bGVjdENsb3Nlc3QpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlN1Z2dlc3RCb3gucHJvdG90eXBl
LnVwZGF0ZVN1Z2dlc3Rpb25zKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TdWdnZXN0Qm94LnBy
b3RvdHlwZS5fb25JdGVtTW91c2VEb3duKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TdWdnZXN0
Qm94LnByb3RvdHlwZS5fY3JlYXRlSXRlbUVsZW1lbnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LlN1Z2dlc3RCb3gucHJvdG90eXBlLl91cGRhdGVJdGVtcyk6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuU3VnZ2VzdEJveC5wcm90b3R5cGUuX3NlbGVjdEl0ZW0pOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLlN1Z2dlc3RCb3gucHJvdG90eXBlLl9jYW5TaG93Qm94KToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5TdWdnZXN0Qm94LnByb3RvdHlwZS5fcmVtZW1iZXJSb3dDb3VudFBlclZpZXdwb3J0KToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5TdWdnZXN0Qm94LnByb3RvdHlwZS5fY29tcGxldGlvbnNS
ZWFkeSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU3VnZ2VzdEJveC5wcm90b3R5cGUudXBLZXlQ
cmVzc2VkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TdWdnZXN0Qm94LnByb3RvdHlwZS5kb3du
S2V5UHJlc3NlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU3VnZ2VzdEJveC5wcm90b3R5cGUu
cGFnZVVwS2V5UHJlc3NlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU3VnZ2VzdEJveC5wcm90
b3R5cGUucGFnZURvd25LZXlQcmVzc2VkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TdWdnZXN0
Qm94LnByb3RvdHlwZS5lbnRlcktleVByZXNzZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlN1
Z2dlc3RCb3gucHJvdG90eXBlLnRhYktleVByZXNzZWQpOgorICAgICAgICAqIGluc3BlY3Rvci9m
cm9udC1lbmQvVGV4dFByb21wdC5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0UHJvbXB0
LnByb3RvdHlwZS51c2VyRW50ZXJlZFRleHQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRQ
cm9tcHQucHJvdG90eXBlLl9hdHRhY2hJbnRlcm5hbCk6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
VGV4dFByb21wdC5wcm90b3R5cGUuX2NvbXBsZXRpb25zUmVhZHkpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLlRleHRQcm9tcHQucHJvdG90eXBlLmFwcGx5U3VnZ2VzdGlvbik6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuVGV4dFByb21wdC5wcm90b3R5cGUuX2FwcGx5U3VnZ2VzdGlvbik6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuVGV4dFByb21wdC5wcm90b3R5cGUuZW50ZXJLZXlQcmVzc2VkKToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0UHJvbXB0LnByb3RvdHlwZS51cEtleVByZXNzZWQp
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRQcm9tcHQucHJvdG90eXBlLmRvd25LZXlQcmVz
c2VkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0UHJvbXB0LnByb3RvdHlwZS5wYWdlVXBL
ZXlQcmVzc2VkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0UHJvbXB0LnByb3RvdHlwZS5w
YWdlRG93bktleVByZXNzZWQpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvV2ViS2l0
LnFyYzoKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5odG1sOgorCiAy
MDEzLTAyLTEyICBab2x0YW4gQXJ2YWkgIDx6YXJ2YWlAaW5mLnUtc3plZ2VkLmh1PgogCiAgICAg
ICAgIFVucmV2aWV3ZWQuIEZpeCAhRU5BQkxFKElOU1BFQ1RPUikgYnVpbGRzIGFmdGVyIHIxNDI1
NzUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUuZ3lwaQppbmRleCAxNzVlZDY2YmM0NTE4MGEzZmVjN2RmNzQzNTBkZjFmMzQz
YjczMTYxLi4yNGZjZTFhYmJjNmM5MTJjODY3NjhiODIwYjBiZjA4MzgzZTk4MzI3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5neXBpCkBAIC01Mjc3LDYgKzUyNzcsNyBAQAogICAgICAgICAgICAgJ2luc3BlY3Rvci9m
cm9udC1lbmQvU3BsaXRWaWV3LmpzJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5k
L1N0YXR1c0JhckJ1dHRvbi5qcycsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9T
dHlsZXNTb3VyY2VNYXBwaW5nLmpzJywKKyAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5k
L1N1Z2dlc3RCb3guanMnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvVGFiYmVk
UGFuZS5qcycsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9UZXN0Q29udHJvbGxl
ci5qcycsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9UZXh0RWRpdG9yLmpzJywK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9q
IGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKaW5kZXggOTZj
ZWQ3ZGM5ZTJkOWU2ZmMzMDYxOGZlYjczMmU4NTk2YjRkNjU3Ni4uMWVhYzk5MzA0ZTM2NGNhNzhh
ZDVmODRiMjYxYmQyZTJlNTE0M2VjZCAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3By
b2ovV2ViQ29yZS52Y3Byb2oKQEAgLTc3NzcwLDYgKzc3NzcwLDEwIEBACiAJCQkJCT4KIAkJCQk8
L0ZpbGU+CiAJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcZnJvbnQt
ZW5kXFN1Z2dlc3RCb3guanMiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKIAkJCQkJ
UmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXFRleHRQcm9tcHQuanMiCiAJCQkJ
CT4KIAkJCQk8L0ZpbGU+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvY29t
cGlsZS1mcm9udC1lbmQucHkgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvY29tcGlsZS1mcm9u
dC1lbmQucHkKaW5kZXggZjllMWUzMWVkZTMzZjMzNjc4OTZiZDliZWU3ODgwMzM5Mzk3MDJkYy4u
Y2E5NDZiOWRmNTI0NmMxNWEyZTI1YjhlYjJlMTdmY2QzOTIxZjBmMCAxMDA3NTUKLS0tIGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2NvbXBpbGUtZnJvbnQtZW5kLnB5CisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9jb21waWxlLWZyb250LWVuZC5weQpAQCAtMTU1LDYgKzE1NSw3IEBA
IG1vZHVsZXMgPSBbCiAgICAgICAgICAgICAiVGV4dEVkaXRvci5qcyIsCiAgICAgICAgICAgICAi
VGV4dEVkaXRvckhpZ2hsaWdodGVyLmpzIiwKICAgICAgICAgICAgICJUZXh0RWRpdG9yTW9kZWwu
anMiLAorICAgICAgICAgICAgIlN1Z2dlc3RCb3guanMiLAogICAgICAgICAgICAgIlRleHRQcm9t
cHQuanMiLAogICAgICAgICAgICAgIlRleHRVdGlscy5qcyIsCiAgICAgICAgICAgICAiVGltZWxp
bmVHcmlkLmpzIiwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvU3VnZ2VzdEJveC5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU3Vn
Z2VzdEJveC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40Njc4NjFjNDZmNzM2ODQxNWMxMGZhMzkyNjExZWMzZjIz
MzlmODkzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9TdWdnZXN0Qm94LmpzCkBAIC0wLDAgKzEsNDAyIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAq
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAaW50ZXJmYWNlCisg
Ki8KK1dlYkluc3BlY3Rvci5TdWdnZXN0Qm94RGVsZWdhdGUgPSBmdW5jdGlvbigpCit7Cit9CisK
K1dlYkluc3BlY3Rvci5TdWdnZXN0Qm94RGVsZWdhdGUucHJvdG90eXBlID0geworICAgIC8qKgor
ICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzdWdnZXN0aW9uCisgICAgICogQHBhcmFtIHtib29sZWFu
PX0gaXNJbnRlcm1lZGlhdGVTdWdnZXN0aW9uCisgICAgICovCisgICAgYXBwbHlTdWdnZXN0aW9u
OiBmdW5jdGlvbihzdWdnZXN0aW9uLCBpc0ludGVybWVkaWF0ZVN1Z2dlc3Rpb24pIHsgfSwKKwor
ICAgIC8qKgorICAgICAqIGFjY2VwdFN1Z2dlc3Rpb24gd2lsbCBiZSBhbHdheXMgY2FsbGVkIGFm
dGVyIGNhbGwgdG8gYXBwbHlTdWdnZXN0aW9uLgorICAgICAqLworICAgIGFjY2VwdFN1Z2dlc3Rp
b246IGZ1bmN0aW9uKCkgeyB9LAorCisgICAgLyoqCisgICAgICogQHJldHVybiB7c3RyaW5nfQor
ICAgICAqLworICAgIHVzZXJFbnRlcmVkVGV4dDogZnVuY3Rpb24oKSB7IH0KK30KKworLyoqCisg
KiBAY29uc3RydWN0b3IKKyAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlN1Z2dlc3RCb3hEZWxlZ2F0
ZX0gc3VnZ2VzdEJveERlbGVnYXRlCisgKiBAcGFyYW0ge0VsZW1lbnR9IGlucHV0RWxlbWVudAor
ICogQHBhcmFtIHtzdHJpbmd9IGNsYXNzTmFtZQorICovCitXZWJJbnNwZWN0b3IuU3VnZ2VzdEJv
eCA9IGZ1bmN0aW9uKHN1Z2dlc3RCb3hEZWxlZ2F0ZSwgaW5wdXRFbGVtZW50LCBjbGFzc05hbWUp
Cit7CisgICAgdGhpcy5fc3VnZ2VzdEJveERlbGVnYXRlID0gc3VnZ2VzdEJveERlbGVnYXRlOwor
ICAgIHRoaXMuX2lucHV0RWxlbWVudCA9IGlucHV0RWxlbWVudDsKKyAgICB0aGlzLl9sZW5ndGgg
PSAwOworICAgIHRoaXMuX3NlbGVjdGVkSW5kZXggPSAtMTsKKyAgICB0aGlzLl9zZWxlY3RlZEVs
ZW1lbnQgPSBudWxsOworICAgIHRoaXMuX2JvdW5kT25TY3JvbGwgPSB0aGlzLl9vbnNjcm9sbHJl
c2l6ZS5iaW5kKHRoaXMsIHRydWUpOworICAgIHRoaXMuX2JvdW5kT25SZXNpemUgPSB0aGlzLl9v
bnNjcm9sbHJlc2l6ZS5iaW5kKHRoaXMsIGZhbHNlKTsKKyAgICB3aW5kb3cuYWRkRXZlbnRMaXN0
ZW5lcigic2Nyb2xsIiwgdGhpcy5fYm91bmRPblNjcm9sbCwgdHJ1ZSk7CisgICAgd2luZG93LmFk
ZEV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsIHRoaXMuX2JvdW5kT25SZXNpemUsIHRydWUpOworCisg
ICAgdGhpcy5fYm9keUVsZW1lbnQgPSBpbnB1dEVsZW1lbnQub3duZXJEb2N1bWVudC5ib2R5Owor
ICAgIHRoaXMuX2VsZW1lbnQgPSBpbnB1dEVsZW1lbnQub3duZXJEb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCJkaXYiKTsKKyAgICB0aGlzLl9lbGVtZW50LmNsYXNzTmFtZSA9ICJzdWdnZXN0LWJveCAi
ICsgKGNsYXNzTmFtZSB8fCAiIik7CisgICAgdGhpcy5fZWxlbWVudC5hZGRFdmVudExpc3RlbmVy
KCJtb3VzZWRvd24iLCB0aGlzLl9vbmJveG1vdXNlZG93bi5iaW5kKHRoaXMpLCB0cnVlKTsKKyAg
ICB0aGlzLmNvbnRhaW5lckVsZW1lbnQgPSB0aGlzLl9lbGVtZW50LmNyZWF0ZUNoaWxkKCJkaXYi
LCAiY29udGFpbmVyIik7CisgICAgdGhpcy5jb250ZW50RWxlbWVudCA9IHRoaXMuY29udGFpbmVy
RWxlbWVudC5jcmVhdGVDaGlsZCgiZGl2IiwgImNvbnRlbnQiKTsKK30KKworV2ViSW5zcGVjdG9y
LlN1Z2dlc3RCb3gucHJvdG90eXBlID0geworICAgIGdldCB2aXNpYmxlKCkKKyAgICB7CisgICAg
ICAgIHJldHVybiAhIXRoaXMuX2VsZW1lbnQucGFyZW50RWxlbWVudDsKKyAgICB9LAorCisgICAg
Z2V0IGhhc1NlbGVjdGlvbigpCisgICAgeworICAgICAgICByZXR1cm4gISF0aGlzLl9zZWxlY3Rl
ZEVsZW1lbnQ7CisgICAgfSwKKworICAgIF9vbnNjcm9sbHJlc2l6ZTogZnVuY3Rpb24oaXNTY3Jv
bGwsIGV2ZW50KQorICAgIHsKKyAgICAgICAgaWYgKGlzU2Nyb2xsICYmIHRoaXMuX2VsZW1lbnQu
aXNBbmNlc3RvcihldmVudC50YXJnZXQpIHx8ICF0aGlzLnZpc2libGUpCisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIHRoaXMuX3VwZGF0ZUJveFBvc2l0aW9uV2l0aEV4aXN0aW5nQW5jaG9y
KCk7CisgICAgfSwKKworICAgIF91cGRhdGVCb3hQb3NpdGlvbldpdGhFeGlzdGluZ0FuY2hvcjog
ZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdGhpcy5fdXBkYXRlQm94UG9zaXRpb24odGhpcy5f
YW5jaG9yQm94KTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogQHBhcmFtIHtBbmNob3JCb3h9
IGFuY2hvckJveAorICAgICAqLworICAgIF91cGRhdGVCb3hQb3NpdGlvbjogZnVuY3Rpb24oYW5j
aG9yQm94KQorICAgIHsKKyAgICAgICAgLy8gTWVhc3VyZSB0aGUgY29udGVudCBlbGVtZW50IGJv
eC4KKyAgICAgICAgdGhpcy5jb250ZW50RWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gImlubGluZS1i
bG9jayI7CisgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGhpcy5jb250ZW50RWxl
bWVudCk7CisgICAgICAgIHRoaXMuY29udGVudEVsZW1lbnQucG9zaXRpb25BdCgwLCAwKTsKKyAg
ICAgICAgdmFyIGNvbnRlbnRXaWR0aCA9IHRoaXMuY29udGVudEVsZW1lbnQub2Zmc2V0V2lkdGg7
CisgICAgICAgIHZhciBjb250ZW50SGVpZ2h0ID0gdGhpcy5jb250ZW50RWxlbWVudC5vZmZzZXRI
ZWlnaHQ7CisgICAgICAgIHRoaXMuY29udGVudEVsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICJibG9j
ayI7CisgICAgICAgIHRoaXMuY29udGFpbmVyRWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLmNvbnRl
bnRFbGVtZW50KTsKKworICAgICAgICAvLyBMYXkgb3V0IHRoZSBzdWdnZXN0LWJveCByZWxhdGl2
ZSB0byB0aGUgYW5jaG9yQm94LgorICAgICAgICB0aGlzLl9hbmNob3JCb3ggPSBhbmNob3JCb3g7
CisgICAgICAgIGNvbnN0IHNwYWNlciA9IDY7CisKKyAgICAgICAgY29uc3Qgc3VnZ2VzdEJveFBh
ZGRpbmdYID0gMjE7CisgICAgICAgIHZhciBtYXhXaWR0aCA9IGRvY3VtZW50LmJvZHkub2Zmc2V0
V2lkdGggLSBhbmNob3JCb3gueCAtIHNwYWNlcjsKKyAgICAgICAgdmFyIHdpZHRoID0gTWF0aC5t
aW4oY29udGVudFdpZHRoLCBtYXhXaWR0aCAtIHN1Z2dlc3RCb3hQYWRkaW5nWCkgKyBzdWdnZXN0
Qm94UGFkZGluZ1g7CisgICAgICAgIHZhciBwYWRkZWRXaWR0aCA9IGNvbnRlbnRXaWR0aCArIHN1
Z2dlc3RCb3hQYWRkaW5nWDsKKyAgICAgICAgdmFyIGJveFggPSBhbmNob3JCb3gueDsKKyAgICAg
ICAgaWYgKHdpZHRoIDwgcGFkZGVkV2lkdGgpIHsKKyAgICAgICAgICAgIC8vIFNoaWZ0IHRoZSBz
dWdnZXN0IGJveCB0byB0aGUgbGVmdCB0byBhY2NvbW1vZGF0ZSB0aGUgY29udGVudCB3aXRob3V0
IHRyaW1taW5nIHRvIHRoZSBCT0RZIGVkZ2UuCisgICAgICAgICAgICBtYXhXaWR0aCA9IGRvY3Vt
ZW50LmJvZHkub2Zmc2V0V2lkdGggLSBzcGFjZXI7CisgICAgICAgICAgICB3aWR0aCA9IE1hdGgu
bWluKGNvbnRlbnRXaWR0aCwgbWF4V2lkdGggLSBzdWdnZXN0Qm94UGFkZGluZ1gpICsgc3VnZ2Vz
dEJveFBhZGRpbmdYOworICAgICAgICAgICAgYm94WCA9IGRvY3VtZW50LmJvZHkub2Zmc2V0V2lk
dGggLSB3aWR0aDsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IHN1Z2dlc3RCb3hQYWRkaW5n
WSA9IDI7CisgICAgICAgIHZhciBib3hZOworICAgICAgICB2YXIgYWJvdmVIZWlnaHQgPSBhbmNo
b3JCb3gueTsKKyAgICAgICAgdmFyIHVuZGVySGVpZ2h0ID0gZG9jdW1lbnQuYm9keS5vZmZzZXRI
ZWlnaHQgLSBhbmNob3JCb3gueSAtIGFuY2hvckJveC5oZWlnaHQ7CisgICAgICAgIHZhciBtYXhI
ZWlnaHQgPSBNYXRoLm1heCh1bmRlckhlaWdodCwgYWJvdmVIZWlnaHQpIC0gc3BhY2VyOworICAg
ICAgICB2YXIgaGVpZ2h0ID0gTWF0aC5taW4oY29udGVudEhlaWdodCwgbWF4SGVpZ2h0IC0gc3Vn
Z2VzdEJveFBhZGRpbmdZKSArIHN1Z2dlc3RCb3hQYWRkaW5nWTsKKyAgICAgICAgaWYgKHVuZGVy
SGVpZ2h0ID49IGFib3ZlSGVpZ2h0KSB7CisgICAgICAgICAgICAvLyBMb2NhdGUgdGhlIHN1Z2dl
c3QgYm94IHVuZGVyIHRoZSBhbmNob3JCb3guCisgICAgICAgICAgICBib3hZID0gYW5jaG9yQm94
LnkgKyBhbmNob3JCb3guaGVpZ2h0OworICAgICAgICAgICAgdGhpcy5fZWxlbWVudC5yZW1vdmVT
dHlsZUNsYXNzKCJhYm92ZS1hbmNob3IiKTsKKyAgICAgICAgICAgIHRoaXMuX2VsZW1lbnQuYWRk
U3R5bGVDbGFzcygidW5kZXItYW5jaG9yIik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAvLyBMb2NhdGUgdGhlIHN1Z2dlc3QgYm94IGFib3ZlIHRoZSBhbmNob3JCb3guCisgICAgICAg
ICAgICBib3hZID0gYW5jaG9yQm94LnkgLSBoZWlnaHQ7CisgICAgICAgICAgICB0aGlzLl9lbGVt
ZW50LnJlbW92ZVN0eWxlQ2xhc3MoInVuZGVyLWFuY2hvciIpOworICAgICAgICAgICAgdGhpcy5f
ZWxlbWVudC5hZGRTdHlsZUNsYXNzKCJhYm92ZS1hbmNob3IiKTsKKyAgICAgICAgfQorCisgICAg
ICAgIHRoaXMuX2VsZW1lbnQucG9zaXRpb25BdChib3hYLCBib3hZKTsKKyAgICAgICAgdGhpcy5f
ZWxlbWVudC5zdHlsZS53aWR0aCA9IHdpZHRoICsgInB4IjsKKyAgICAgICAgdGhpcy5fZWxlbWVu
dC5zdHlsZS5oZWlnaHQgPSBoZWlnaHQgKyAicHgiOworICAgIH0sCisKKyAgICBfb25ib3htb3Vz
ZWRvd246IGZ1bmN0aW9uKGV2ZW50KQorICAgIHsKKyAgICAgICAgZXZlbnQucHJldmVudERlZmF1
bHQoKTsKKyAgICB9LAorCisgICAgaGlkZTogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgaWYg
KCF0aGlzLnZpc2libGUpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgdGhpcy5fZWxl
bWVudC5wYXJlbnRFbGVtZW50LnJlbW92ZUNoaWxkKHRoaXMuX2VsZW1lbnQpOworICAgICAgICBk
ZWxldGUgdGhpcy5fc2VsZWN0ZWRFbGVtZW50OworICAgIH0sCisKKyAgICByZW1vdmVGcm9tRWxl
bWVudDogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVu
ZXIoInNjcm9sbCIsIHRoaXMuX2JvdW5kT25TY3JvbGwsIHRydWUpOworICAgICAgICB3aW5kb3cu
cmVtb3ZlRXZlbnRMaXN0ZW5lcigicmVzaXplIiwgdGhpcy5fYm91bmRPblJlc2l6ZSwgdHJ1ZSk7
CisgICAgICAgIHRoaXMuaGlkZSgpOworICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBAcGFyYW0g
e3N0cmluZz19IHRleHQKKyAgICAgKiBAcGFyYW0ge2Jvb2xlYW49fSBpc0ludGVybWVkaWF0ZVN1
Z2dlc3Rpb24KKyAgICAgKi8KKyAgICBfYXBwbHlTdWdnZXN0aW9uOiBmdW5jdGlvbih0ZXh0LCBp
c0ludGVybWVkaWF0ZVN1Z2dlc3Rpb24pCisgICAgeworICAgICAgICBpZiAoIXRoaXMudmlzaWJs
ZSB8fCAhKHRleHQgfHwgdGhpcy5fc2VsZWN0ZWRFbGVtZW50KSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgICAgICB2YXIgc3VnZ2VzdGlvbiA9IHRleHQgfHwgdGhpcy5fc2VsZWN0
ZWRFbGVtZW50LnRleHRDb250ZW50OworICAgICAgICBpZiAoIXN1Z2dlc3Rpb24pCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgdGhpcy5fc3VnZ2VzdEJveERlbGVnYXRlLmFw
cGx5U3VnZ2VzdGlvbihzdWdnZXN0aW9uLCBpc0ludGVybWVkaWF0ZVN1Z2dlc3Rpb24pOworICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogQHBhcmFtIHtzdHJp
bmc9fSB0ZXh0CisgICAgICovCisgICAgYWNjZXB0U3VnZ2VzdGlvbjogZnVuY3Rpb24odGV4dCkK
KyAgICB7CisgICAgICAgIHZhciByZXN1bHQgPSB0aGlzLl9hcHBseVN1Z2dlc3Rpb24odGV4dCwg
ZmFsc2UpOworICAgICAgICB0aGlzLmhpZGUoKTsKKyAgICAgICAgaWYgKCFyZXN1bHQpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgdGhpcy5fc3VnZ2VzdEJveERlbGVnYXRl
LmFjY2VwdFN1Z2dlc3Rpb24oKTsKKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9LAorCisg
ICAgLyoqCisgICAgICogQHBhcmFtIHtudW1iZXJ9IHNoaWZ0CisgICAgICogQHBhcmFtIHtib29s
ZWFuPX0gaXNDaXJjdWxhcgorICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IGlzIGNoYW5nZWQKKyAg
ICAgKi8KKyAgICBfc2VsZWN0Q2xvc2VzdDogZnVuY3Rpb24oc2hpZnQsIGlzQ2lyY3VsYXIpCisg
ICAgeworICAgICAgICBpZiAoIXRoaXMuX2xlbmd0aCkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgICAgICB2YXIgaW5kZXggPSB0aGlzLl9zZWxlY3RlZEluZGV4ICsgc2hpZnQ7CisK
KyAgICAgICAgaWYgKGlzQ2lyY3VsYXIpCisgICAgICAgICAgICBpbmRleCA9ICh0aGlzLl9sZW5n
dGggKyBpbmRleCkgJSB0aGlzLl9sZW5ndGg7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGlu
ZGV4ID0gTnVtYmVyLmNvbnN0cmFpbihpbmRleCwgMCwgdGhpcy5fbGVuZ3RoIC0gMSk7CisKKyAg
ICAgICAgdGhpcy5fc2VsZWN0SXRlbShpbmRleCk7CisgICAgICAgIHRoaXMuX2FwcGx5U3VnZ2Vz
dGlvbih1bmRlZmluZWQsIHRydWUpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9LAorCisg
ICAgLyoqCisgICAgICogQHBhcmFtIHtBbmNob3JCb3h9IGFuY2hvckJveAorICAgICAqIEBwYXJh
bSB7QXJyYXkuPHN0cmluZz49fSBjb21wbGV0aW9ucworICAgICAqIEBwYXJhbSB7bnVtYmVyPX0g
c2VsZWN0ZWRJbmRleAorICAgICAqIEBwYXJhbSB7Ym9vbGVhbj19IGNhblNob3dGb3JTaW5nbGVJ
dGVtCisgICAgICovCisgICAgdXBkYXRlU3VnZ2VzdGlvbnM6IGZ1bmN0aW9uKGFuY2hvckJveCwg
Y29tcGxldGlvbnMsIHNlbGVjdGVkSW5kZXgsIGNhblNob3dGb3JTaW5nbGVJdGVtKQorICAgIHsK
KyAgICAgICAgaWYgKHRoaXMuX3N1Z2dlc3RUaW1lb3V0KSB7CisgICAgICAgICAgICBjbGVhclRp
bWVvdXQodGhpcy5fc3VnZ2VzdFRpbWVvdXQpOworICAgICAgICAgICAgZGVsZXRlIHRoaXMuX3N1
Z2dlc3RUaW1lb3V0OworICAgICAgICB9CisgICAgICAgIHRoaXMuX2NvbXBsZXRpb25zUmVhZHko
YW5jaG9yQm94LCBjb21wbGV0aW9ucywgc2VsZWN0ZWRJbmRleCwgY2FuU2hvd0ZvclNpbmdsZUl0
ZW0pOworICAgIH0sCisKKyAgICBfb25JdGVtTW91c2VEb3duOiBmdW5jdGlvbih0ZXh0LCBldmVu
dCkKKyAgICB7CisgICAgICAgIHRoaXMuYWNjZXB0U3VnZ2VzdGlvbih0ZXh0KTsKKyAgICAgICAg
ZXZlbnQuY29uc3VtZSh0cnVlKTsKKyAgICB9LAorCisgICAgX2NyZWF0ZUl0ZW1FbGVtZW50OiBm
dW5jdGlvbihwcmVmaXgsIHRleHQpCisgICAgeworICAgICAgICB2YXIgZWxlbWVudCA9IGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOworICAgICAgICBlbGVtZW50LmNsYXNzTmFtZSA9ICJz
dWdnZXN0LWJveC1jb250ZW50LWl0ZW0gc291cmNlLWNvZGUiOworICAgICAgICBlbGVtZW50LnRh
YkluZGV4ID0gLTE7CisgICAgICAgIGlmIChwcmVmaXggJiYgcHJlZml4Lmxlbmd0aCAmJiAhdGV4
dC5pbmRleE9mKHByZWZpeCkpIHsKKyAgICAgICAgICAgIHZhciBwcmVmaXhFbGVtZW50ID0gZWxl
bWVudC5jcmVhdGVDaGlsZCgic3BhbiIsICJwcmVmaXgiKTsKKyAgICAgICAgICAgIHByZWZpeEVs
ZW1lbnQudGV4dENvbnRlbnQgPSBwcmVmaXg7CisgICAgICAgICAgICB2YXIgc3VmZml4RWxlbWVu
dCA9IGVsZW1lbnQuY3JlYXRlQ2hpbGQoInNwYW4iLCAic3VmZml4Iik7CisgICAgICAgICAgICBz
dWZmaXhFbGVtZW50LnRleHRDb250ZW50ID0gdGV4dC5zdWJzdHJpbmcocHJlZml4Lmxlbmd0aCk7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB2YXIgc3VmZml4RWxlbWVudCA9IGVsZW1l
bnQuY3JlYXRlQ2hpbGQoInNwYW4iLCAic3VmZml4Iik7CisgICAgICAgICAgICBzdWZmaXhFbGVt
ZW50LnRleHRDb250ZW50ID0gdGV4dDsKKyAgICAgICAgfQorICAgICAgICBlbGVtZW50LmFkZEV2
ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsIHRoaXMuX29uSXRlbU1vdXNlRG93bi5iaW5kKHRoaXMs
IHRleHQpLCBmYWxzZSk7CisgICAgICAgIHJldHVybiBlbGVtZW50OworICAgIH0sCisKKyAgICAv
KioKKyAgICAgKiBAcGFyYW0ge0FycmF5LjxzdHJpbmc+PX0gaXRlbXMKKyAgICAgKiBAcGFyYW0g
e251bWJlcj19IHNlbGVjdGVkSW5kZXgKKyAgICAgKi8KKyAgICBfdXBkYXRlSXRlbXM6IGZ1bmN0
aW9uKGl0ZW1zLCBzZWxlY3RlZEluZGV4KQorICAgIHsKKyAgICAgICAgdGhpcy5fbGVuZ3RoID0g
aXRlbXMubGVuZ3RoOworICAgICAgICB0aGlzLmNvbnRlbnRFbGVtZW50LnJlbW92ZUNoaWxkcmVu
KCk7CisKKyAgICAgICAgdmFyIHVzZXJFbnRlcmVkVGV4dCA9IHRoaXMuX3N1Z2dlc3RCb3hEZWxl
Z2F0ZS51c2VyRW50ZXJlZFRleHQoKTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpdGVt
cy5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgdmFyIGl0ZW0gPSBpdGVtc1tpXTsKKyAgICAg
ICAgICAgIHZhciBjdXJyZW50SXRlbUVsZW1lbnQgPSB0aGlzLl9jcmVhdGVJdGVtRWxlbWVudCh1
c2VyRW50ZXJlZFRleHQsIGl0ZW0pOworICAgICAgICAgICAgdGhpcy5jb250ZW50RWxlbWVudC5h
cHBlbmRDaGlsZChjdXJyZW50SXRlbUVsZW1lbnQpOworICAgICAgICB9CisKKyAgICAgICAgdGhp
cy5fc2VsZWN0ZWRFbGVtZW50ID0gbnVsbDsKKyAgICAgICAgaWYgKHR5cGVvZiBzZWxlY3RlZElu
ZGV4ID09PSAibnVtYmVyIikKKyAgICAgICAgICAgIHRoaXMuX3NlbGVjdEl0ZW0oc2VsZWN0ZWRJ
bmRleCk7CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleAor
ICAgICAqLworICAgIF9zZWxlY3RJdGVtOiBmdW5jdGlvbihpbmRleCkKKyAgICB7CisgICAgICAg
IGlmICh0aGlzLl9zZWxlY3RlZEVsZW1lbnQpCisgICAgICAgICAgICB0aGlzLl9zZWxlY3RlZEVs
ZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgic2VsZWN0ZWQiKTsKKworICAgICAgICB0aGlzLl9zZWxl
Y3RlZEluZGV4ID0gaW5kZXg7CisgICAgICAgIHRoaXMuX3NlbGVjdGVkRWxlbWVudCA9IHRoaXMu
Y29udGVudEVsZW1lbnQuY2hpbGRyZW5baW5kZXhdOworICAgICAgICB0aGlzLl9zZWxlY3RlZEVs
ZW1lbnQuY2xhc3NMaXN0LmFkZCgic2VsZWN0ZWQiKTsKKworICAgICAgICB0aGlzLl9zZWxlY3Rl
ZEVsZW1lbnQuc2Nyb2xsSW50b1ZpZXdJZk5lZWRlZChmYWxzZSk7CisgICAgfSwKKworICAgIC8q
KgorICAgICAqIEBwYXJhbSB7QXJyYXkuPHN0cmluZz49fSBjb21wbGV0aW9ucworICAgICAqIEBw
YXJhbSB7Ym9vbGVhbj19IGNhblNob3dGb3JTaW5nbGVJdGVtCisgICAgICovCisgICAgX2NhblNo
b3dCb3g6IGZ1bmN0aW9uKGNvbXBsZXRpb25zLCBjYW5TaG93Rm9yU2luZ2xlSXRlbSkKKyAgICB7
CisgICAgICAgIGlmICghY29tcGxldGlvbnMgfHwgIWNvbXBsZXRpb25zLmxlbmd0aCkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBpZiAoY29tcGxldGlvbnMubGVuZ3RoID4g
MSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAgIC8vIERvIG5vdCBzaG93IGEg
c2luZ2xlIHN1Z2dlc3Rpb24gaWYgaXQgaXMgdGhlIHNhbWUgYXMgdXNlci1lbnRlcmVkIHByZWZp
eCwgZXZlbiBpZiBhbGxvd2VkIHRvIHNob3cgc2luZ2xlLWl0ZW0gc3VnZ2VzdCBib3hlcy4KKyAg
ICAgICAgcmV0dXJuIGNhblNob3dGb3JTaW5nbGVJdGVtICYmIGNvbXBsZXRpb25zWzBdICE9PSB0
aGlzLl9zdWdnZXN0Qm94RGVsZWdhdGUudXNlckVudGVyZWRUZXh0KCk7CisgICAgfSwKKworICAg
IF9yZW1lbWJlclJvd0NvdW50UGVyVmlld3BvcnQ6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAg
IGlmICghdGhpcy5jb250ZW50RWxlbWVudC5maXJzdENoaWxkKQorICAgICAgICAgICAgcmV0dXJu
OworCisgICAgICAgIHRoaXMuX3Jvd0NvdW50UGVyVmlld3BvcnQgPSBNYXRoLmZsb29yKHRoaXMu
Y29udGFpbmVyRWxlbWVudC5vZmZzZXRIZWlnaHQgLyB0aGlzLmNvbnRlbnRFbGVtZW50LmZpcnN0
Q2hpbGQub2Zmc2V0SGVpZ2h0KTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogQHBhcmFtIHtB
bmNob3JCb3h9IGFuY2hvckJveAorICAgICAqIEBwYXJhbSB7QXJyYXkuPHN0cmluZz49fSBjb21w
bGV0aW9ucworICAgICAqIEBwYXJhbSB7bnVtYmVyPX0gc2VsZWN0ZWRJbmRleAorICAgICAqIEBw
YXJhbSB7Ym9vbGVhbj19IGNhblNob3dGb3JTaW5nbGVJdGVtCisgICAgICovCisgICAgX2NvbXBs
ZXRpb25zUmVhZHk6IGZ1bmN0aW9uKGFuY2hvckJveCwgY29tcGxldGlvbnMsIHNlbGVjdGVkSW5k
ZXgsIGNhblNob3dGb3JTaW5nbGVJdGVtKQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMuX2NhblNo
b3dCb3goY29tcGxldGlvbnMsIGNhblNob3dGb3JTaW5nbGVJdGVtKSkgeworICAgICAgICAgICAg
dGhpcy5fdXBkYXRlSXRlbXMoY29tcGxldGlvbnMsIHNlbGVjdGVkSW5kZXgpOworICAgICAgICAg
ICAgdGhpcy5fdXBkYXRlQm94UG9zaXRpb24oYW5jaG9yQm94KTsKKyAgICAgICAgICAgIGlmICgh
dGhpcy52aXNpYmxlKQorICAgICAgICAgICAgICAgIHRoaXMuX2JvZHlFbGVtZW50LmFwcGVuZENo
aWxkKHRoaXMuX2VsZW1lbnQpOworICAgICAgICAgICAgdGhpcy5fcmVtZW1iZXJSb3dDb3VudFBl
clZpZXdwb3J0KCk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgdGhpcy5oaWRlKCk7Cisg
ICAgfSwKKworICAgIC8qKgorICAgICAqIEByZXR1cm4ge2Jvb2xlYW59CisgICAgICovCisgICAg
dXBLZXlQcmVzc2VkOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fc2Vs
ZWN0Q2xvc2VzdCgtMSwgdHJ1ZSk7CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEByZXR1cm4g
e2Jvb2xlYW59CisgICAgICovCisgICAgZG93bktleVByZXNzZWQ6IGZ1bmN0aW9uKCkKKyAgICB7
CisgICAgICAgIHJldHVybiB0aGlzLl9zZWxlY3RDbG9zZXN0KDEsIHRydWUpOworICAgIH0sCisK
KyAgICAvKioKKyAgICAgKiBAcmV0dXJuIHtib29sZWFufQorICAgICAqLworICAgIHBhZ2VVcEtl
eVByZXNzZWQ6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9zZWxlY3RD
bG9zZXN0KC10aGlzLl9yb3dDb3VudFBlclZpZXdwb3J0LCBmYWxzZSk7CisgICAgfSwKKworICAg
IC8qKgorICAgICAqIEByZXR1cm4ge2Jvb2xlYW59CisgICAgICovCisgICAgcGFnZURvd25LZXlQ
cmVzc2VkOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fc2VsZWN0Q2xv
c2VzdCh0aGlzLl9yb3dDb3VudFBlclZpZXdwb3J0LCBmYWxzZSk7CisgICAgfSwKKworICAgIC8q
KgorICAgICAqIEByZXR1cm4ge2Jvb2xlYW59CisgICAgICovCisgICAgZW50ZXJLZXlQcmVzc2Vk
OiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB2YXIgaGFzU2VsZWN0ZWRJdGVtID0gISF0aGlz
Ll9zZWxlY3RlZEVsZW1lbnQ7CisgICAgICAgIHRoaXMuYWNjZXB0U3VnZ2VzdGlvbigpOworCisg
ICAgICAgIC8vIFJlcG9ydCB0aGUgZXZlbnQgYXMgbm9uLWhhbmRsZWQgaWYgdGhlcmUgaXMgbm8g
c2VsZWN0ZWQgaXRlbSwKKyAgICAgICAgLy8gdG8gY29tbWl0IHRoZSBpbnB1dCBvciBoYW5kbGUg
aXQgb3RoZXJ3aXNlLgorICAgICAgICByZXR1cm4gaGFzU2VsZWN0ZWRJdGVtOworICAgIH0sCisK
KyAgICAvKioKKyAgICAgKiBAcmV0dXJuIHtib29sZWFufQorICAgICAqLworICAgIHRhYktleVBy
ZXNzZWQ6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLmVudGVyS2V5UHJl
c3NlZCgpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvVGV4dFByb21wdC5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvVGV4dFByb21wdC5qcwppbmRleCAyYjViMmQ1YWE4ZGRmM2M0ZDIzMzBjNGEwYzY0MzAzNzEy
OTI0YzdiLi42ZWY4ZGZkZGYzZjIxNmIwNzJiYzgxZDk1ZmZkMjkzMjExNzFiMWM2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1RleHRQcm9tcHQuanMKKysr
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9UZXh0UHJvbXB0LmpzCkBAIC0z
MCw2ICszMCw3IEBACiAvKioKICAqIEBjb25zdHJ1Y3RvcgogICogQGV4dGVuZHMgV2ViSW5zcGVj
dG9yLk9iamVjdAorICogQGltcGxlbWVudHMge1dlYkluc3BlY3Rvci5TdWdnZXN0Qm94RGVsZWdh
dGV9CiAgKiBAcGFyYW0ge2Z1bmN0aW9uKEVsZW1lbnQsIFJhbmdlLCBib29sZWFuLCBmdW5jdGlv
bihBcnJheS48c3RyaW5nPiwgbnVtYmVyPSkpfSBjb21wbGV0aW9ucwogICogQHBhcmFtIHtzdHJp
bmc9fSBzdG9wQ2hhcmFjdGVycwogICovCkBAIC01MSw2ICs1MiwxMSBAQCBXZWJJbnNwZWN0b3Iu
VGV4dFByb21wdC5FdmVudHMgPSB7CiB9OwogCiBXZWJJbnNwZWN0b3IuVGV4dFByb21wdC5wcm90
b3R5cGUgPSB7CisgICAgdXNlckVudGVyZWRUZXh0OiBmdW5jdGlvbigpCisgICAgeworICAgICAg
ICByZXR1cm4gdGhpcy5fdXNlckVudGVyZWRUZXh0OworICAgIH0sCisKICAgICBnZXQgcHJveHlF
bGVtZW50KCkKICAgICB7CiAgICAgICAgIHJldHVybiB0aGlzLl9wcm94eUVsZW1lbnQ7CkBAIC0x
MTcsNyArMTIzLDcgQEAgV2ViSW5zcGVjdG9yLlRleHRQcm9tcHQucHJvdG90eXBlID0gewogICAg
ICAgICB0aGlzLl9lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoInNlbGVjdHN0YXJ0IiwgdGhpcy5f
Ym91bmRTZWxlY3RTdGFydCwgZmFsc2UpOwogCiAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5fc3Vn
Z2VzdEJveENsYXNzTmFtZSA9PT0gInN0cmluZyIpCi0gICAgICAgICAgICB0aGlzLl9zdWdnZXN0
Qm94ID0gbmV3IFdlYkluc3BlY3Rvci5UZXh0UHJvbXB0LlN1Z2dlc3RCb3godGhpcywgdGhpcy5f
ZWxlbWVudCwgdGhpcy5fc3VnZ2VzdEJveENsYXNzTmFtZSk7CisgICAgICAgICAgICB0aGlzLl9z
dWdnZXN0Qm94ID0gbmV3IFdlYkluc3BlY3Rvci5TdWdnZXN0Qm94KHRoaXMsIHRoaXMuX2VsZW1l
bnQsIHRoaXMuX3N1Z2dlc3RCb3hDbGFzc05hbWUpOwogCiAgICAgICAgIHJldHVybiB0aGlzLnBy
b3h5RWxlbWVudDsKICAgICB9LApAQCAtNTIwLDcgKzUyNiw3IEBAIFdlYkluc3BlY3Rvci5UZXh0
UHJvbXB0LnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgICAgICBzZWxlY3Rpb24uYWRkUmFuZ2Uo
ZmluYWxTZWxlY3Rpb25SYW5nZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZQotICAg
ICAgICAgICAgdGhpcy5hcHBseVN1Z2dlc3Rpb24oY29tcGxldGlvblRleHQsIGNvbXBsZXRpb25z
Lmxlbmd0aCA+IDEsIG9yaWdpbmFsV29yZFByZWZpeFJhbmdlKTsKKyAgICAgICAgICAgIHRoaXMu
X2FwcGx5U3VnZ2VzdGlvbihjb21wbGV0aW9uVGV4dCwgY29tcGxldGlvbnMubGVuZ3RoID4gMSwg
b3JpZ2luYWxXb3JkUHJlZml4UmFuZ2UpOwogICAgIH0sCiAKICAgICBfY29tcGxldGVDb21tb25Q
cmVmaXg6IGZ1bmN0aW9uKCkKQEAgLTUzOCw5ICs1NDQsMjAgQEAgV2ViSW5zcGVjdG9yLlRleHRQ
cm9tcHQucHJvdG90eXBlID0gewogICAgIH0sCiAKICAgICAvKioKLSAgICAgKiBAcGFyYW0ge1Jh
bmdlPX0gb3JpZ2luYWxQcmVmaXhSYW5nZQorICAgICAqIEBwYXJhbSB7c3RyaW5nfSBjb21wbGV0
aW9uVGV4dAorICAgICAqIEBwYXJhbSB7Ym9vbGVhbj19IGlzSW50ZXJtZWRpYXRlU3VnZ2VzdGlv
bgorICAgICAqLworICAgIGFwcGx5U3VnZ2VzdGlvbjogZnVuY3Rpb24oY29tcGxldGlvblRleHQs
IGlzSW50ZXJtZWRpYXRlU3VnZ2VzdGlvbikKKyAgICB7CisgICAgICAgIHRoaXMuX2FwcGx5U3Vn
Z2VzdGlvbihjb21wbGV0aW9uVGV4dCwgaXNJbnRlcm1lZGlhdGVTdWdnZXN0aW9uKTsKKyAgICB9
LAorCisgICAgLyoqCisgICAgICogQHBhcmFtIHtzdHJpbmd9IGNvbXBsZXRpb25UZXh0CisgICAg
ICogQHBhcmFtIHtib29sZWFuPX0gaXNJbnRlcm1lZGlhdGVTdWdnZXN0aW9uCisgICAgICogQHBh
cmFtIHtSYW5nZX0gb3JpZ2luYWxQcmVmaXhSYW5nZQogICAgICAqLwotICAgIGFwcGx5U3VnZ2Vz
dGlvbjogZnVuY3Rpb24oY29tcGxldGlvblRleHQsIGlzSW50ZXJtZWRpYXRlU3VnZ2VzdGlvbiwg
b3JpZ2luYWxQcmVmaXhSYW5nZSkKKyAgICBfYXBwbHlTdWdnZXN0aW9uOiBmdW5jdGlvbihjb21w
bGV0aW9uVGV4dCwgaXNJbnRlcm1lZGlhdGVTdWdnZXN0aW9uLCBvcmlnaW5hbFByZWZpeFJhbmdl
KQogICAgIHsKICAgICAgICAgdmFyIHdvcmRQcmVmaXhMZW5ndGg7CiAgICAgICAgIGlmIChvcmln
aW5hbFByZWZpeFJhbmdlKQpAQCAtNzE3LDcgKzczNCw3IEBAIFdlYkluc3BlY3Rvci5UZXh0UHJv
bXB0LnByb3RvdHlwZSA9IHsKICAgICBlbnRlcktleVByZXNzZWQ6IGZ1bmN0aW9uKGV2ZW50KQog
ICAgIHsKICAgICAgICAgaWYgKHRoaXMuaXNTdWdnZXN0Qm94VmlzaWJsZSgpKQotICAgICAgICAg
ICAgcmV0dXJuIHRoaXMuX3N1Z2dlc3RCb3guZW50ZXJLZXlQcmVzc2VkKGV2ZW50KTsKKyAgICAg
ICAgICAgIHJldHVybiB0aGlzLl9zdWdnZXN0Qm94LmVudGVyS2V5UHJlc3NlZCgpOwogCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICB9LApAQCAtNzI1LDcgKzc0Miw3IEBAIFdlYkluc3BlY3Rv
ci5UZXh0UHJvbXB0LnByb3RvdHlwZSA9IHsKICAgICB1cEtleVByZXNzZWQ6IGZ1bmN0aW9uKGV2
ZW50KQogICAgIHsKICAgICAgICAgaWYgKHRoaXMuaXNTdWdnZXN0Qm94VmlzaWJsZSgpKQotICAg
ICAgICAgICAgcmV0dXJuIHRoaXMuX3N1Z2dlc3RCb3gudXBLZXlQcmVzc2VkKGV2ZW50KTsKKyAg
ICAgICAgICAgIHJldHVybiB0aGlzLl9zdWdnZXN0Qm94LnVwS2V5UHJlc3NlZCgpOwogCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICB9LApAQCAtNzMzLDcgKzc1MCw3IEBAIFdlYkluc3BlY3Rv
ci5UZXh0UHJvbXB0LnByb3RvdHlwZSA9IHsKICAgICBkb3duS2V5UHJlc3NlZDogZnVuY3Rpb24o
ZXZlbnQpCiAgICAgewogICAgICAgICBpZiAodGhpcy5pc1N1Z2dlc3RCb3hWaXNpYmxlKCkpCi0g
ICAgICAgICAgICByZXR1cm4gdGhpcy5fc3VnZ2VzdEJveC5kb3duS2V5UHJlc3NlZChldmVudCk7
CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fc3VnZ2VzdEJveC5kb3duS2V5UHJlc3NlZCgpOwog
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9LApAQCAtNzQxLDcgKzc1OCw3IEBAIFdlYklu
c3BlY3Rvci5UZXh0UHJvbXB0LnByb3RvdHlwZSA9IHsKICAgICBwYWdlVXBLZXlQcmVzc2VkOiBm
dW5jdGlvbihldmVudCkKICAgICB7CiAgICAgICAgIGlmICh0aGlzLmlzU3VnZ2VzdEJveFZpc2li
bGUoKSkKLSAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdWdnZXN0Qm94LnBhZ2VVcEtleVByZXNz
ZWQoZXZlbnQpOworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N1Z2dlc3RCb3gucGFnZVVwS2V5
UHJlc3NlZCgpOwogCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9LApAQCAtNzQ5LDcgKzc2
Niw3IEBAIFdlYkluc3BlY3Rvci5UZXh0UHJvbXB0LnByb3RvdHlwZSA9IHsKICAgICBwYWdlRG93
bktleVByZXNzZWQ6IGZ1bmN0aW9uKGV2ZW50KQogICAgIHsKICAgICAgICAgaWYgKHRoaXMuaXNT
dWdnZXN0Qm94VmlzaWJsZSgpKQotICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N1Z2dlc3RCb3gu
cGFnZURvd25LZXlQcmVzc2VkKGV2ZW50KTsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdWdn
ZXN0Qm94LnBhZ2VEb3duS2V5UHJlc3NlZCgpOwogCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICB9LApAQCAtOTI2LDMyOSArOTQzLDMgQEAgV2ViSW5zcGVjdG9yLlRleHRQcm9tcHRXaXRoSGlz
dG9yeS5wcm90b3R5cGUgPSB7CiAgICAgX19wcm90b19fOiBXZWJJbnNwZWN0b3IuVGV4dFByb21w
dC5wcm90b3R5cGUKIH0KIAotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqLwotV2ViSW5zcGVjdG9y
LlRleHRQcm9tcHQuU3VnZ2VzdEJveCA9IGZ1bmN0aW9uKHRleHRQcm9tcHQsIGlucHV0RWxlbWVu
dCwgY2xhc3NOYW1lKQotewotICAgIHRoaXMuX3RleHRQcm9tcHQgPSB0ZXh0UHJvbXB0OwotICAg
IHRoaXMuX2lucHV0RWxlbWVudCA9IGlucHV0RWxlbWVudDsKLSAgICB0aGlzLl9sZW5ndGggPSAw
OwotICAgIHRoaXMuX3NlbGVjdGVkSW5kZXggPSAtMTsKLSAgICB0aGlzLl9zZWxlY3RlZEVsZW1l
bnQgPSBudWxsOwotICAgIHRoaXMuX2JvdW5kT25TY3JvbGwgPSB0aGlzLl9vbnNjcm9sbHJlc2l6
ZS5iaW5kKHRoaXMsIHRydWUpOwotICAgIHRoaXMuX2JvdW5kT25SZXNpemUgPSB0aGlzLl9vbnNj
cm9sbHJlc2l6ZS5iaW5kKHRoaXMsIGZhbHNlKTsKLSAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5l
cigic2Nyb2xsIiwgdGhpcy5fYm91bmRPblNjcm9sbCwgdHJ1ZSk7Ci0gICAgd2luZG93LmFkZEV2
ZW50TGlzdGVuZXIoInJlc2l6ZSIsIHRoaXMuX2JvdW5kT25SZXNpemUsIHRydWUpOwotCi0gICAg
dGhpcy5fYm9keUVsZW1lbnQgPSBpbnB1dEVsZW1lbnQub3duZXJEb2N1bWVudC5ib2R5OwotICAg
IHRoaXMuX2VsZW1lbnQgPSBpbnB1dEVsZW1lbnQub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50
KCJkaXYiKTsKLSAgICB0aGlzLl9lbGVtZW50LmNsYXNzTmFtZSA9ICJzdWdnZXN0LWJveCAiICsg
KGNsYXNzTmFtZSB8fCAiIik7Ci0gICAgdGhpcy5fZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJt
b3VzZWRvd24iLCB0aGlzLl9vbmJveG1vdXNlZG93bi5iaW5kKHRoaXMpLCB0cnVlKTsKLSAgICB0
aGlzLmNvbnRhaW5lckVsZW1lbnQgPSB0aGlzLl9lbGVtZW50LmNyZWF0ZUNoaWxkKCJkaXYiLCAi
Y29udGFpbmVyIik7Ci0gICAgdGhpcy5jb250ZW50RWxlbWVudCA9IHRoaXMuY29udGFpbmVyRWxl
bWVudC5jcmVhdGVDaGlsZCgiZGl2IiwgImNvbnRlbnQiKTsKLX0KLQotV2ViSW5zcGVjdG9yLlRl
eHRQcm9tcHQuU3VnZ2VzdEJveC5wcm90b3R5cGUgPSB7Ci0gICAgZ2V0IHZpc2libGUoKQotICAg
IHsKLSAgICAgICAgcmV0dXJuICEhdGhpcy5fZWxlbWVudC5wYXJlbnRFbGVtZW50OwotICAgIH0s
Ci0KLSAgICBnZXQgaGFzU2VsZWN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAhIXRoaXMu
X3NlbGVjdGVkRWxlbWVudDsKLSAgICB9LAotCi0gICAgX29uc2Nyb2xscmVzaXplOiBmdW5jdGlv
bihpc1Njcm9sbCwgZXZlbnQpCi0gICAgewotICAgICAgICBpZiAoaXNTY3JvbGwgJiYgdGhpcy5f
ZWxlbWVudC5pc0FuY2VzdG9yKGV2ZW50LnRhcmdldCkgfHwgIXRoaXMudmlzaWJsZSkKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgdGhpcy5fdXBkYXRlQm94UG9zaXRpb25XaXRoRXhpc3Rp
bmdBbmNob3IoKTsKLSAgICB9LAotCi0gICAgX3VwZGF0ZUJveFBvc2l0aW9uV2l0aEV4aXN0aW5n
QW5jaG9yOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB0aGlzLl91cGRhdGVCb3hQb3NpdGlv
bih0aGlzLl9hbmNob3JCb3gpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge0Fu
Y2hvckJveH0gYW5jaG9yQm94Ci0gICAgICovCi0gICAgX3VwZGF0ZUJveFBvc2l0aW9uOiBmdW5j
dGlvbihhbmNob3JCb3gpCi0gICAgewotICAgICAgICAvLyBNZWFzdXJlIHRoZSBjb250ZW50IGVs
ZW1lbnQgYm94LgotICAgICAgICB0aGlzLmNvbnRlbnRFbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAi
aW5saW5lLWJsb2NrIjsKLSAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aGlzLmNv
bnRlbnRFbGVtZW50KTsKLSAgICAgICAgdGhpcy5jb250ZW50RWxlbWVudC5wb3NpdGlvbkF0KDAs
IDApOwotICAgICAgICB2YXIgY29udGVudFdpZHRoID0gdGhpcy5jb250ZW50RWxlbWVudC5vZmZz
ZXRXaWR0aDsKLSAgICAgICAgdmFyIGNvbnRlbnRIZWlnaHQgPSB0aGlzLmNvbnRlbnRFbGVtZW50
Lm9mZnNldEhlaWdodDsKLSAgICAgICAgdGhpcy5jb250ZW50RWxlbWVudC5zdHlsZS5kaXNwbGF5
ID0gImJsb2NrIjsKLSAgICAgICAgdGhpcy5jb250YWluZXJFbGVtZW50LmFwcGVuZENoaWxkKHRo
aXMuY29udGVudEVsZW1lbnQpOwotCi0gICAgICAgIC8vIExheSBvdXQgdGhlIHN1Z2dlc3QtYm94
IHJlbGF0aXZlIHRvIHRoZSBhbmNob3JCb3guCi0gICAgICAgIHRoaXMuX2FuY2hvckJveCA9IGFu
Y2hvckJveDsKLSAgICAgICAgY29uc3Qgc3BhY2VyID0gNjsKLQotICAgICAgICBjb25zdCBzdWdn
ZXN0Qm94UGFkZGluZ1ggPSAyMTsKLSAgICAgICAgdmFyIG1heFdpZHRoID0gZG9jdW1lbnQuYm9k
eS5vZmZzZXRXaWR0aCAtIGFuY2hvckJveC54IC0gc3BhY2VyOwotICAgICAgICB2YXIgd2lkdGgg
PSBNYXRoLm1pbihjb250ZW50V2lkdGgsIG1heFdpZHRoIC0gc3VnZ2VzdEJveFBhZGRpbmdYKSAr
IHN1Z2dlc3RCb3hQYWRkaW5nWDsKLSAgICAgICAgdmFyIHBhZGRlZFdpZHRoID0gY29udGVudFdp
ZHRoICsgc3VnZ2VzdEJveFBhZGRpbmdYOwotICAgICAgICB2YXIgYm94WCA9IGFuY2hvckJveC54
OwotICAgICAgICBpZiAod2lkdGggPCBwYWRkZWRXaWR0aCkgewotICAgICAgICAgICAgLy8gU2hp
ZnQgdGhlIHN1Z2dlc3QgYm94IHRvIHRoZSBsZWZ0IHRvIGFjY29tbW9kYXRlIHRoZSBjb250ZW50
IHdpdGhvdXQgdHJpbW1pbmcgdG8gdGhlIEJPRFkgZWRnZS4KLSAgICAgICAgICAgIG1heFdpZHRo
ID0gZG9jdW1lbnQuYm9keS5vZmZzZXRXaWR0aCAtIHNwYWNlcjsKLSAgICAgICAgICAgIHdpZHRo
ID0gTWF0aC5taW4oY29udGVudFdpZHRoLCBtYXhXaWR0aCAtIHN1Z2dlc3RCb3hQYWRkaW5nWCkg
KyBzdWdnZXN0Qm94UGFkZGluZ1g7Ci0gICAgICAgICAgICBib3hYID0gZG9jdW1lbnQuYm9keS5v
ZmZzZXRXaWR0aCAtIHdpZHRoOwotICAgICAgICB9Ci0KLSAgICAgICAgY29uc3Qgc3VnZ2VzdEJv
eFBhZGRpbmdZID0gMjsKLSAgICAgICAgdmFyIGJveFk7Ci0gICAgICAgIHZhciBhYm92ZUhlaWdo
dCA9IGFuY2hvckJveC55OwotICAgICAgICB2YXIgdW5kZXJIZWlnaHQgPSBkb2N1bWVudC5ib2R5
Lm9mZnNldEhlaWdodCAtIGFuY2hvckJveC55IC0gYW5jaG9yQm94LmhlaWdodDsKLSAgICAgICAg
dmFyIG1heEhlaWdodCA9IE1hdGgubWF4KHVuZGVySGVpZ2h0LCBhYm92ZUhlaWdodCkgLSBzcGFj
ZXI7Ci0gICAgICAgIHZhciBoZWlnaHQgPSBNYXRoLm1pbihjb250ZW50SGVpZ2h0LCBtYXhIZWln
aHQgLSBzdWdnZXN0Qm94UGFkZGluZ1kpICsgc3VnZ2VzdEJveFBhZGRpbmdZOwotICAgICAgICBp
ZiAodW5kZXJIZWlnaHQgPj0gYWJvdmVIZWlnaHQpIHsKLSAgICAgICAgICAgIC8vIExvY2F0ZSB0
aGUgc3VnZ2VzdCBib3ggdW5kZXIgdGhlIGFuY2hvckJveC4KLSAgICAgICAgICAgIGJveFkgPSBh
bmNob3JCb3gueSArIGFuY2hvckJveC5oZWlnaHQ7Ci0gICAgICAgICAgICB0aGlzLl9lbGVtZW50
LnJlbW92ZVN0eWxlQ2xhc3MoImFib3ZlLWFuY2hvciIpOwotICAgICAgICAgICAgdGhpcy5fZWxl
bWVudC5hZGRTdHlsZUNsYXNzKCJ1bmRlci1hbmNob3IiKTsKLSAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgIC8vIExvY2F0ZSB0aGUgc3VnZ2VzdCBib3ggYWJvdmUgdGhlIGFuY2hvckJveC4K
LSAgICAgICAgICAgIGJveFkgPSBhbmNob3JCb3gueSAtIGhlaWdodDsKLSAgICAgICAgICAgIHRo
aXMuX2VsZW1lbnQucmVtb3ZlU3R5bGVDbGFzcygidW5kZXItYW5jaG9yIik7Ci0gICAgICAgICAg
ICB0aGlzLl9lbGVtZW50LmFkZFN0eWxlQ2xhc3MoImFib3ZlLWFuY2hvciIpOwotICAgICAgICB9
Ci0KLSAgICAgICAgdGhpcy5fZWxlbWVudC5wb3NpdGlvbkF0KGJveFgsIGJveFkpOwotICAgICAg
ICB0aGlzLl9lbGVtZW50LnN0eWxlLndpZHRoID0gd2lkdGggKyAicHgiOwotICAgICAgICB0aGlz
Ll9lbGVtZW50LnN0eWxlLmhlaWdodCA9IGhlaWdodCArICJweCI7Ci0gICAgfSwKLQotICAgIF9v
bmJveG1vdXNlZG93bjogZnVuY3Rpb24oZXZlbnQpCi0gICAgewotICAgICAgICBldmVudC5wcmV2
ZW50RGVmYXVsdCgpOwotICAgIH0sCi0KLSAgICBoaWRlOiBmdW5jdGlvbigpCi0gICAgewotICAg
ICAgICBpZiAoIXRoaXMudmlzaWJsZSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICB0
aGlzLl9lbGVtZW50LnBhcmVudEVsZW1lbnQucmVtb3ZlQ2hpbGQodGhpcy5fZWxlbWVudCk7Ci0g
ICAgICAgIGRlbGV0ZSB0aGlzLl9zZWxlY3RlZEVsZW1lbnQ7Ci0gICAgfSwKLQotICAgIHJlbW92
ZUZyb21FbGVtZW50OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB3aW5kb3cucmVtb3ZlRXZl
bnRMaXN0ZW5lcigic2Nyb2xsIiwgdGhpcy5fYm91bmRPblNjcm9sbCwgdHJ1ZSk7Ci0gICAgICAg
IHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJyZXNpemUiLCB0aGlzLl9ib3VuZE9uUmVzaXpl
LCB0cnVlKTsKLSAgICAgICAgdGhpcy5oaWRlKCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAq
IEBwYXJhbSB7c3RyaW5nPX0gdGV4dAotICAgICAqIEBwYXJhbSB7Ym9vbGVhbj19IGlzSW50ZXJt
ZWRpYXRlU3VnZ2VzdGlvbgotICAgICAqLwotICAgIF9hcHBseVN1Z2dlc3Rpb246IGZ1bmN0aW9u
KHRleHQsIGlzSW50ZXJtZWRpYXRlU3VnZ2VzdGlvbikKLSAgICB7Ci0gICAgICAgIGlmICghdGhp
cy52aXNpYmxlIHx8ICEodGV4dCB8fCB0aGlzLl9zZWxlY3RlZEVsZW1lbnQpKQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIHZhciBzdWdnZXN0aW9uID0gdGV4dCB8fCB0aGlz
Ll9zZWxlY3RlZEVsZW1lbnQudGV4dENvbnRlbnQ7Ci0gICAgICAgIGlmICghc3VnZ2VzdGlvbikK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICB0aGlzLl90ZXh0UHJvbXB0LmFw
cGx5U3VnZ2VzdGlvbihzdWdnZXN0aW9uLCBpc0ludGVybWVkaWF0ZVN1Z2dlc3Rpb24pOwotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtzdHJp
bmc9fSB0ZXh0Ci0gICAgICovCi0gICAgYWNjZXB0U3VnZ2VzdGlvbjogZnVuY3Rpb24odGV4dCkK
LSAgICB7Ci0gICAgICAgIHZhciByZXN1bHQgPSB0aGlzLl9hcHBseVN1Z2dlc3Rpb24odGV4dCwg
ZmFsc2UpOwotICAgICAgICB0aGlzLmhpZGUoKTsKLSAgICAgICAgaWYgKCFyZXN1bHQpCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgdGhpcy5fdGV4dFByb21wdC5hY2NlcHRT
dWdnZXN0aW9uKCk7Ci0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSwKLQotICAgIC8qKgot
ICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzaGlmdAotICAgICAqIEBwYXJhbSB7Ym9vbGVhbj19IGlz
Q2lyY3VsYXIKLSAgICAgKiBAcmV0dXJuIHtib29sZWFufSBpcyBjaGFuZ2VkCi0gICAgICovCi0g
ICAgX3NlbGVjdENsb3Nlc3Q6IGZ1bmN0aW9uKHNoaWZ0LCBpc0NpcmN1bGFyKQotICAgIHsKLSAg
ICAgICAgaWYgKCF0aGlzLl9sZW5ndGgpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICAgICAgdmFyIGluZGV4ID0gdGhpcy5fc2VsZWN0ZWRJbmRleCArIHNoaWZ0OwotCi0gICAgICAg
IGlmIChpc0NpcmN1bGFyKQotICAgICAgICAgICAgaW5kZXggPSAodGhpcy5fbGVuZ3RoICsgaW5k
ZXgpICUgdGhpcy5fbGVuZ3RoOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBpbmRleCA9IE51
bWJlci5jb25zdHJhaW4oaW5kZXgsIDAsIHRoaXMuX2xlbmd0aCAtIDEpOwotCi0gICAgICAgIHRo
aXMuX3NlbGVjdEl0ZW0oaW5kZXgpOwotICAgICAgICB0aGlzLl9hcHBseVN1Z2dlc3Rpb24odW5k
ZWZpbmVkLCB0cnVlKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSwKLQotICAgIC8qKgot
ICAgICAqIEBwYXJhbSB7QW5jaG9yQm94fSBhbmNob3JCb3gKLSAgICAgKiBAcGFyYW0ge0FycmF5
LjxzdHJpbmc+PX0gY29tcGxldGlvbnMKLSAgICAgKiBAcGFyYW0ge251bWJlcj19IHNlbGVjdGVk
SW5kZXgKLSAgICAgKiBAcGFyYW0ge2Jvb2xlYW49fSBjYW5TaG93Rm9yU2luZ2xlSXRlbQotICAg
ICAqLwotICAgIHVwZGF0ZVN1Z2dlc3Rpb25zOiBmdW5jdGlvbihhbmNob3JCb3gsIGNvbXBsZXRp
b25zLCBzZWxlY3RlZEluZGV4LCBjYW5TaG93Rm9yU2luZ2xlSXRlbSkKLSAgICB7Ci0gICAgICAg
IGlmICh0aGlzLl9zdWdnZXN0VGltZW91dCkgewotICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRo
aXMuX3N1Z2dlc3RUaW1lb3V0KTsKLSAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9zdWdnZXN0VGlt
ZW91dDsKLSAgICAgICAgfQotICAgICAgICB0aGlzLl9jb21wbGV0aW9uc1JlYWR5KGFuY2hvckJv
eCwgY29tcGxldGlvbnMsIHNlbGVjdGVkSW5kZXgsIGNhblNob3dGb3JTaW5nbGVJdGVtKTsKLSAg
ICB9LAotCi0gICAgX29uSXRlbU1vdXNlRG93bjogZnVuY3Rpb24odGV4dCwgZXZlbnQpCi0gICAg
ewotICAgICAgICB0aGlzLmFjY2VwdFN1Z2dlc3Rpb24odGV4dCk7Ci0gICAgICAgIGV2ZW50LmNv
bnN1bWUodHJ1ZSk7Ci0gICAgfSwKLQotICAgIF9jcmVhdGVJdGVtRWxlbWVudDogZnVuY3Rpb24o
cHJlZml4LCB0ZXh0KQotICAgIHsKLSAgICAgICAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCJkaXYiKTsKLSAgICAgICAgZWxlbWVudC5jbGFzc05hbWUgPSAic3VnZ2VzdC1i
b3gtY29udGVudC1pdGVtIHNvdXJjZS1jb2RlIjsKLSAgICAgICAgZWxlbWVudC50YWJJbmRleCA9
IC0xOwotICAgICAgICBpZiAocHJlZml4ICYmIHByZWZpeC5sZW5ndGggJiYgIXRleHQuaW5kZXhP
ZihwcmVmaXgpKSB7Ci0gICAgICAgICAgICB2YXIgcHJlZml4RWxlbWVudCA9IGVsZW1lbnQuY3Jl
YXRlQ2hpbGQoInNwYW4iLCAicHJlZml4Iik7Ci0gICAgICAgICAgICBwcmVmaXhFbGVtZW50LnRl
eHRDb250ZW50ID0gcHJlZml4OwotICAgICAgICAgICAgdmFyIHN1ZmZpeEVsZW1lbnQgPSBlbGVt
ZW50LmNyZWF0ZUNoaWxkKCJzcGFuIiwgInN1ZmZpeCIpOwotICAgICAgICAgICAgc3VmZml4RWxl
bWVudC50ZXh0Q29udGVudCA9IHRleHQuc3Vic3RyaW5nKHByZWZpeC5sZW5ndGgpOwotICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgdmFyIHN1ZmZpeEVsZW1lbnQgPSBlbGVtZW50LmNyZWF0
ZUNoaWxkKCJzcGFuIiwgInN1ZmZpeCIpOwotICAgICAgICAgICAgc3VmZml4RWxlbWVudC50ZXh0
Q29udGVudCA9IHRleHQ7Ci0gICAgICAgIH0KLSAgICAgICAgZWxlbWVudC5hZGRFdmVudExpc3Rl
bmVyKCJtb3VzZWRvd24iLCB0aGlzLl9vbkl0ZW1Nb3VzZURvd24uYmluZCh0aGlzLCB0ZXh0KSwg
ZmFsc2UpOwotICAgICAgICByZXR1cm4gZWxlbWVudDsKLSAgICB9LAotCi0gICAgLyoqCi0gICAg
ICogQHBhcmFtIHtBcnJheS48c3RyaW5nPj19IGl0ZW1zCi0gICAgICogQHBhcmFtIHtudW1iZXI9
fSBzZWxlY3RlZEluZGV4Ci0gICAgICovCi0gICAgX3VwZGF0ZUl0ZW1zOiBmdW5jdGlvbihpdGVt
cywgc2VsZWN0ZWRJbmRleCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX2xlbmd0aCA9IGl0ZW1zLmxl
bmd0aDsKLSAgICAgICAgdGhpcy5jb250ZW50RWxlbWVudC5yZW1vdmVDaGlsZHJlbigpOwotCi0g
ICAgICAgIHZhciB1c2VyRW50ZXJlZFRleHQgPSB0aGlzLl90ZXh0UHJvbXB0Ll91c2VyRW50ZXJl
ZFRleHQ7Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyArK2kpIHsK
LSAgICAgICAgICAgIHZhciBpdGVtID0gaXRlbXNbaV07Ci0gICAgICAgICAgICB2YXIgY3VycmVu
dEl0ZW1FbGVtZW50ID0gdGhpcy5fY3JlYXRlSXRlbUVsZW1lbnQodXNlckVudGVyZWRUZXh0LCBp
dGVtKTsKLSAgICAgICAgICAgIHRoaXMuY29udGVudEVsZW1lbnQuYXBwZW5kQ2hpbGQoY3VycmVu
dEl0ZW1FbGVtZW50KTsKLSAgICAgICAgfQotCi0gICAgICAgIHRoaXMuX3NlbGVjdGVkRWxlbWVu
dCA9IG51bGw7Ci0gICAgICAgIGlmICh0eXBlb2Ygc2VsZWN0ZWRJbmRleCA9PT0gIm51bWJlciIp
Ci0gICAgICAgICAgICB0aGlzLl9zZWxlY3RJdGVtKHNlbGVjdGVkSW5kZXgpOwotICAgIH0sCi0K
LSAgICAvKioKLSAgICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXgKLSAgICAgKi8KLSAgICBfc2Vs
ZWN0SXRlbTogZnVuY3Rpb24oaW5kZXgpCi0gICAgewotICAgICAgICBpZiAodGhpcy5fc2VsZWN0
ZWRFbGVtZW50KQotICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWRFbGVtZW50LmNsYXNzTGlzdC5y
ZW1vdmUoInNlbGVjdGVkIik7Ci0KLSAgICAgICAgdGhpcy5fc2VsZWN0ZWRJbmRleCA9IGluZGV4
OwotICAgICAgICB0aGlzLl9zZWxlY3RlZEVsZW1lbnQgPSB0aGlzLmNvbnRlbnRFbGVtZW50LmNo
aWxkcmVuW2luZGV4XTsKLSAgICAgICAgdGhpcy5fc2VsZWN0ZWRFbGVtZW50LmNsYXNzTGlzdC5h
ZGQoInNlbGVjdGVkIik7Ci0KLSAgICAgICAgdGhpcy5fc2VsZWN0ZWRFbGVtZW50LnNjcm9sbElu
dG9WaWV3SWZOZWVkZWQoZmFsc2UpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0g
e0FycmF5LjxzdHJpbmc+PX0gY29tcGxldGlvbnMKLSAgICAgKiBAcGFyYW0ge2Jvb2xlYW49fSBj
YW5TaG93Rm9yU2luZ2xlSXRlbQotICAgICAqLwotICAgIF9jYW5TaG93Qm94OiBmdW5jdGlvbihj
b21wbGV0aW9ucywgY2FuU2hvd0ZvclNpbmdsZUl0ZW0pCi0gICAgewotICAgICAgICBpZiAoIWNv
bXBsZXRpb25zIHx8ICFjb21wbGV0aW9ucy5sZW5ndGgpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICAgICAgaWYgKGNvbXBsZXRpb25zLmxlbmd0aCA+IDEpCi0gICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLQotICAgICAgICAvLyBEbyBub3Qgc2hvdyBhIHNpbmdsZSBzdWdnZXN0aW9u
IGlmIGl0IGlzIHRoZSBzYW1lIGFzIHVzZXItZW50ZXJlZCBwcmVmaXgsIGV2ZW4gaWYgYWxsb3dl
ZCB0byBzaG93IHNpbmdsZS1pdGVtIHN1Z2dlc3QgYm94ZXMuCi0gICAgICAgIHJldHVybiBjYW5T
aG93Rm9yU2luZ2xlSXRlbSAmJiBjb21wbGV0aW9uc1swXSAhPT0gdGhpcy5fdGV4dFByb21wdC5f
dXNlckVudGVyZWRUZXh0OwotICAgIH0sCi0KLSAgICBfcmVtZW1iZXJSb3dDb3VudFBlclZpZXdw
b3J0OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBpZiAoIXRoaXMuY29udGVudEVsZW1lbnQu
Zmlyc3RDaGlsZCkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICB0aGlzLl9yb3dDb3Vu
dFBlclZpZXdwb3J0ID0gTWF0aC5mbG9vcih0aGlzLmNvbnRhaW5lckVsZW1lbnQub2Zmc2V0SGVp
Z2h0IC8gdGhpcy5jb250ZW50RWxlbWVudC5maXJzdENoaWxkLm9mZnNldEhlaWdodCk7Ci0gICAg
fSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7QW5jaG9yQm94fSBhbmNob3JCb3gKLSAgICAg
KiBAcGFyYW0ge0FycmF5LjxzdHJpbmc+PX0gY29tcGxldGlvbnMKLSAgICAgKiBAcGFyYW0ge251
bWJlcj19IHNlbGVjdGVkSW5kZXgKLSAgICAgKiBAcGFyYW0ge2Jvb2xlYW49fSBjYW5TaG93Rm9y
U2luZ2xlSXRlbQotICAgICAqLwotICAgIF9jb21wbGV0aW9uc1JlYWR5OiBmdW5jdGlvbihhbmNo
b3JCb3gsIGNvbXBsZXRpb25zLCBzZWxlY3RlZEluZGV4LCBjYW5TaG93Rm9yU2luZ2xlSXRlbSkK
LSAgICB7Ci0gICAgICAgIGlmICh0aGlzLl9jYW5TaG93Qm94KGNvbXBsZXRpb25zLCBjYW5TaG93
Rm9yU2luZ2xlSXRlbSkpIHsKLSAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUl0ZW1zKGNvbXBsZXRp
b25zLCBzZWxlY3RlZEluZGV4KTsKLSAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUJveFBvc2l0aW9u
KGFuY2hvckJveCk7Ci0gICAgICAgICAgICBpZiAoIXRoaXMudmlzaWJsZSkKLSAgICAgICAgICAg
ICAgICB0aGlzLl9ib2R5RWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLl9lbGVtZW50KTsKLSAgICAg
ICAgICAgIHRoaXMuX3JlbWVtYmVyUm93Q291bnRQZXJWaWV3cG9ydCgpOwotICAgICAgICB9IGVs
c2UKLSAgICAgICAgICAgIHRoaXMuaGlkZSgpOwotICAgIH0sCi0KLSAgICB1cEtleVByZXNzZWQ6
IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdENsb3Nl
c3QoLTEsIHRydWUpOwotICAgIH0sCi0KLSAgICBkb3duS2V5UHJlc3NlZDogZnVuY3Rpb24oZXZl
bnQpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fc2VsZWN0Q2xvc2VzdCgxLCB0cnVlKTsK
LSAgICB9LAotCi0gICAgcGFnZVVwS2V5UHJlc3NlZDogZnVuY3Rpb24oZXZlbnQpCi0gICAgewot
ICAgICAgICByZXR1cm4gdGhpcy5fc2VsZWN0Q2xvc2VzdCgtdGhpcy5fcm93Q291bnRQZXJWaWV3
cG9ydCwgZmFsc2UpOwotICAgIH0sCi0KLSAgICBwYWdlRG93bktleVByZXNzZWQ6IGZ1bmN0aW9u
KGV2ZW50KQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdENsb3Nlc3QodGhpcy5f
cm93Q291bnRQZXJWaWV3cG9ydCwgZmFsc2UpOwotICAgIH0sCi0KLSAgICBlbnRlcktleVByZXNz
ZWQ6IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsKLSAgICAgICAgdmFyIGhhc1NlbGVjdGVkSXRlbSA9
ICEhdGhpcy5fc2VsZWN0ZWRFbGVtZW50OwotICAgICAgICB0aGlzLmFjY2VwdFN1Z2dlc3Rpb24o
KTsKLQotICAgICAgICAvLyBSZXBvcnQgdGhlIGV2ZW50IGFzIG5vbi1oYW5kbGVkIGlmIHRoZXJl
IGlzIG5vIHNlbGVjdGVkIGl0ZW0sCi0gICAgICAgIC8vIHRvIGNvbW1pdCB0aGUgaW5wdXQgb3Ig
aGFuZGxlIGl0IG90aGVyd2lzZS4KLSAgICAgICAgcmV0dXJuIGhhc1NlbGVjdGVkSXRlbTsKLSAg
ICB9LAotCi0gICAgdGFiS2V5UHJlc3NlZDogZnVuY3Rpb24oZXZlbnQpCi0gICAgewotICAgICAg
ICByZXR1cm4gdGhpcy5lbnRlcktleVByZXNzZWQoZXZlbnQpOwotICAgIH0KLX0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvV2ViS2l0LnFyYyBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvV2ViS2l0LnFyYwppbmRleCBmZjM1OTFkYWY0
YjA0NDFhMmU2NTU5ZTVmYTM2NjE1NDljNDlkY2IxLi5jMDMwNTY4ZDAxYTM5MmI4YjJiMGQyZjhh
Y2NjNTk4MzkyZmI3OGIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL1dlYktpdC5xcmMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9XZWJLaXQucXJjCkBAIC0xOTcsNiArMTk3LDcgQEAKICAgICA8ZmlsZT5TdHlsZVNoZWV0T3V0
bGluZURpYWxvZy5qczwvZmlsZT4KICAgICA8ZmlsZT5TdHlsZXNTb3VyY2VNYXBwaW5nLmpzPC9m
aWxlPgogICAgIDxmaWxlPlN0eWxlc1NpZGViYXJQYW5lLmpzPC9maWxlPgorICAgIDxmaWxlPlN1
Z2dlc3RCb3guanM8L2ZpbGU+CiAgICAgPGZpbGU+VGFiYmVkRWRpdG9yQ29udGFpbmVyLmpzPC9m
aWxlPgogICAgIDxmaWxlPlRhYmJlZFBhbmUuanM8L2ZpbGU+CiAgICAgPGZpbGU+VGVzdENvbnRy
b2xsZXIuanM8L2ZpbGU+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL2luc3BlY3Rvci5odG1sIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9pbnNwZWN0b3IuaHRtbAppbmRleCAzNTY5MGY1NGYyMzA0MTEyNzdlZTZlNDcwZjE1N2E1OWIw
MjY0NDU3Li5jNDY0OTU2MmU5ZmMzMjE1MzVhNjRiZmRmZTQxMWExNzg3Y2M3NGU2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5odG1sCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmh0bWwKQEAg
LTU2LDYgKzU2LDcgQEAgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlw
dCIgc3JjPSJDb250ZXh0TWVudS5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0
L2phdmFzY3JpcHQiIHNyYz0iU29mdENvbnRleHRNZW51LmpzIj48L3NjcmlwdD4KICAgICA8c2Ny
aXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJLZXlib2FyZFNob3J0Y3V0LmpzIj48L3Nj
cmlwdD4KKyAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJTdWdnZXN0Qm94
LmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJU
ZXh0UHJvbXB0LmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlw
dCIgc3JjPSJQb3BvdmVyLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2
YXNjcmlwdCIgc3JjPSJQbGFjYXJkLmpzIj48L3NjcmlwdD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>187836</attachid>
            <date>2013-02-12 05:01:32 -0800</date>
            <delta_ts>2013-02-12 05:28:13 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-109430-20130212165801.patch</filename>
            <type>text/plain</type>
            <size>35427</size>
            <attacher name="Andrey Lushnikov">lushnikov</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQyNTk4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGQ0ZjFkYzE3YTk5OGJj
NTU0OTRkMmE5YjkzYmM3OWJjMzM5N2UxNy4uMWM2ZmE2YjZjNjE1NzlmZWI5YzE1YTg2MjIyY2Zi
NDNjMjZhMDZiMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY0IEBACisyMDEzLTAyLTEyICBBbmRy
ZXkgTHVzaG5pa292ICA8bHVzaG5pa292QGNocm9taXVtLm9yZz4KKworICAgICAgICBXZWIgSW5z
cGVjdG9yOiBzZXBhcmF0ZSBTdWdnZXN0Qm94IGZyb20gVGV4dFByb21wdAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA5NDMwCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ3JlYXRlIFdlYkluc3BlY3Rvci5T
dWdnZXN0Qm94RGVsZWdhdGUgaW50ZXJmYWNlIGFuZAorICAgICAgICByZWZhY3RvciBUZXh0UHJv
bXB0IHRvIHVzZSB0aGlzIGludGVyZmFjZS4gU2VwYXJhdGUgU3VnZ2VzdEJveCBpbnRvCisgICAg
ICAgIFdlYkluc3BlY3Rvci5TdWdnZXN0Qm94IG5hbWVzcGFjZSBhbmQgcHV0IGl0IGludG8gaXRz
IG93biBmaWxlLgorCisgICAgICAgIE5vIG5ldyB0ZXN0czogbm8gY2hhbmdlIGluIGJlaGF2aW91
ci4KKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9X
ZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBpbnNwZWN0b3IvY29tcGlsZS1mcm9udC1lbmQucHk6
CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9TdWdnZXN0Qm94LmpzOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5TdWdnZXN0Qm94RGVsZWdhdGUpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLlN1Z2dlc3RCb3hEZWxlZ2F0ZS5wcm90b3R5cGUuYXBwbHlTdWdnZXN0aW9uKToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5TdWdnZXN0Qm94RGVsZWdhdGUucHJvdG90eXBlLmFjY2VwdFN1
Z2dlc3Rpb24pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlN1Z2dlc3RCb3hEZWxlZ2F0ZS5wcm90
b3R5cGUudXNlckVudGVyZWRUZXh0KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TdWdnZXN0Qm94
KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TdWdnZXN0Qm94LnByb3RvdHlwZS5nZXQgdmlzaWJs
ZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU3VnZ2VzdEJveC5wcm90b3R5cGUuZ2V0IGhhc1Nl
bGVjdGlvbik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU3VnZ2VzdEJveC5wcm90b3R5cGUuX29u
c2Nyb2xscmVzaXplKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TdWdnZXN0Qm94LnByb3RvdHlw
ZS5fdXBkYXRlQm94UG9zaXRpb25XaXRoRXhpc3RpbmdBbmNob3IpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLlN1Z2dlc3RCb3gucHJvdG90eXBlLl91cGRhdGVCb3hQb3NpdGlvbik6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuU3VnZ2VzdEJveC5wcm90b3R5cGUuX29uYm94bW91c2Vkb3duKToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5TdWdnZXN0Qm94LnByb3RvdHlwZS5oaWRlKToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5TdWdnZXN0Qm94LnByb3RvdHlwZS5yZW1vdmVGcm9tRWxlbWVudCk6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IuU3VnZ2VzdEJveC5wcm90b3R5cGUuX2FwcGx5U3VnZ2VzdGlv
bik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU3VnZ2VzdEJveC5wcm90b3R5cGUuYWNjZXB0U3Vn
Z2VzdGlvbik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU3VnZ2VzdEJveC5wcm90b3R5cGUuX3Nl
bGVjdENsb3Nlc3QpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlN1Z2dlc3RCb3gucHJvdG90eXBl
LnVwZGF0ZVN1Z2dlc3Rpb25zKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TdWdnZXN0Qm94LnBy
b3RvdHlwZS5fb25JdGVtTW91c2VEb3duKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TdWdnZXN0
Qm94LnByb3RvdHlwZS5fY3JlYXRlSXRlbUVsZW1lbnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LlN1Z2dlc3RCb3gucHJvdG90eXBlLl91cGRhdGVJdGVtcyk6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuU3VnZ2VzdEJveC5wcm90b3R5cGUuX3NlbGVjdEl0ZW0pOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLlN1Z2dlc3RCb3gucHJvdG90eXBlLl9jYW5TaG93Qm94KToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5TdWdnZXN0Qm94LnByb3RvdHlwZS5fcmVtZW1iZXJSb3dDb3VudFBlclZpZXdwb3J0KToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5TdWdnZXN0Qm94LnByb3RvdHlwZS5fY29tcGxldGlvbnNS
ZWFkeSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU3VnZ2VzdEJveC5wcm90b3R5cGUudXBLZXlQ
cmVzc2VkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TdWdnZXN0Qm94LnByb3RvdHlwZS5kb3du
S2V5UHJlc3NlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU3VnZ2VzdEJveC5wcm90b3R5cGUu
cGFnZVVwS2V5UHJlc3NlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU3VnZ2VzdEJveC5wcm90
b3R5cGUucGFnZURvd25LZXlQcmVzc2VkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TdWdnZXN0
Qm94LnByb3RvdHlwZS5lbnRlcktleVByZXNzZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlN1
Z2dlc3RCb3gucHJvdG90eXBlLnRhYktleVByZXNzZWQpOgorICAgICAgICAqIGluc3BlY3Rvci9m
cm9udC1lbmQvVGV4dFByb21wdC5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0UHJvbXB0
LnByb3RvdHlwZS51c2VyRW50ZXJlZFRleHQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRQ
cm9tcHQucHJvdG90eXBlLl9hdHRhY2hJbnRlcm5hbCk6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
VGV4dFByb21wdC5wcm90b3R5cGUuX2NvbXBsZXRpb25zUmVhZHkpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLlRleHRQcm9tcHQucHJvdG90eXBlLmFwcGx5U3VnZ2VzdGlvbik6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuVGV4dFByb21wdC5wcm90b3R5cGUuX2FwcGx5U3VnZ2VzdGlvbik6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuVGV4dFByb21wdC5wcm90b3R5cGUuZW50ZXJLZXlQcmVzc2VkKToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0UHJvbXB0LnByb3RvdHlwZS51cEtleVByZXNzZWQp
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRQcm9tcHQucHJvdG90eXBlLmRvd25LZXlQcmVz
c2VkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0UHJvbXB0LnByb3RvdHlwZS5wYWdlVXBL
ZXlQcmVzc2VkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0UHJvbXB0LnByb3RvdHlwZS5w
YWdlRG93bktleVByZXNzZWQpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvV2ViS2l0
LnFyYzoKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5odG1sOgorCiAy
MDEzLTAyLTEyICBab2x0YW4gQXJ2YWkgIDx6YXJ2YWlAaW5mLnUtc3plZ2VkLmh1PgogCiAgICAg
ICAgIFVucmV2aWV3ZWQuIEZpeCAhRU5BQkxFKElOU1BFQ1RPUikgYnVpbGRzIGFmdGVyIHIxNDI1
NzUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUuZ3lwaQppbmRleCAxNzVlZDY2YmM0NTE4MGEzZmVjN2RmNzQzNTBkZjFmMzQz
YjczMTYxLi4yNGZjZTFhYmJjNmM5MTJjODY3NjhiODIwYjBiZjA4MzgzZTk4MzI3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5neXBpCkBAIC01Mjc3LDYgKzUyNzcsNyBAQAogICAgICAgICAgICAgJ2luc3BlY3Rvci9m
cm9udC1lbmQvU3BsaXRWaWV3LmpzJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5k
L1N0YXR1c0JhckJ1dHRvbi5qcycsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9T
dHlsZXNTb3VyY2VNYXBwaW5nLmpzJywKKyAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5k
L1N1Z2dlc3RCb3guanMnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvVGFiYmVk
UGFuZS5qcycsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9UZXN0Q29udHJvbGxl
ci5qcycsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9UZXh0RWRpdG9yLmpzJywK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9q
IGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKaW5kZXggOTZj
ZWQ3ZGM5ZTJkOWU2ZmMzMDYxOGZlYjczMmU4NTk2YjRkNjU3Ni4uMWVhYzk5MzA0ZTM2NGNhNzhh
ZDVmODRiMjYxYmQyZTJlNTE0M2VjZCAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3By
b2ovV2ViQ29yZS52Y3Byb2oKQEAgLTc3NzcwLDYgKzc3NzcwLDEwIEBACiAJCQkJCT4KIAkJCQk8
L0ZpbGU+CiAJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcZnJvbnQt
ZW5kXFN1Z2dlc3RCb3guanMiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKIAkJCQkJ
UmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXFRleHRQcm9tcHQuanMiCiAJCQkJ
CT4KIAkJCQk8L0ZpbGU+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvY29t
cGlsZS1mcm9udC1lbmQucHkgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvY29tcGlsZS1mcm9u
dC1lbmQucHkKaW5kZXggZjllMWUzMWVkZTMzZjMzNjc4OTZiZDliZWU3ODgwMzM5Mzk3MDJkYy4u
Y2E5NDZiOWRmNTI0NmMxNWEyZTI1YjhlYjJlMTdmY2QzOTIxZjBmMCAxMDA3NTUKLS0tIGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2NvbXBpbGUtZnJvbnQtZW5kLnB5CisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9jb21waWxlLWZyb250LWVuZC5weQpAQCAtMTU1LDYgKzE1NSw3IEBA
IG1vZHVsZXMgPSBbCiAgICAgICAgICAgICAiVGV4dEVkaXRvci5qcyIsCiAgICAgICAgICAgICAi
VGV4dEVkaXRvckhpZ2hsaWdodGVyLmpzIiwKICAgICAgICAgICAgICJUZXh0RWRpdG9yTW9kZWwu
anMiLAorICAgICAgICAgICAgIlN1Z2dlc3RCb3guanMiLAogICAgICAgICAgICAgIlRleHRQcm9t
cHQuanMiLAogICAgICAgICAgICAgIlRleHRVdGlscy5qcyIsCiAgICAgICAgICAgICAiVGltZWxp
bmVHcmlkLmpzIiwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvU3VnZ2VzdEJveC5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU3Vn
Z2VzdEJveC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kNjg5OTY1ZDYxNzZhZWM1Mzk4N2QzMzIwZjdiYjIwM2E5
ZTk5N2Y3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9TdWdnZXN0Qm94LmpzCkBAIC0wLDAgKzEsNDAyIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAq
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAaW50ZXJmYWNlCisg
Ki8KK1dlYkluc3BlY3Rvci5TdWdnZXN0Qm94RGVsZWdhdGUgPSBmdW5jdGlvbigpCit7Cit9CisK
K1dlYkluc3BlY3Rvci5TdWdnZXN0Qm94RGVsZWdhdGUucHJvdG90eXBlID0geworICAgIC8qKgor
ICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzdWdnZXN0aW9uCisgICAgICogQHBhcmFtIHtib29sZWFu
PX0gaXNJbnRlcm1lZGlhdGVTdWdnZXN0aW9uCisgICAgICovCisgICAgYXBwbHlTdWdnZXN0aW9u
OiBmdW5jdGlvbihzdWdnZXN0aW9uLCBpc0ludGVybWVkaWF0ZVN1Z2dlc3Rpb24pIHsgfSwKKwor
ICAgIC8qKgorICAgICAqIGFjY2VwdFN1Z2dlc3Rpb24gd2lsbCBiZSBhbHdheXMgY2FsbGVkIGFm
dGVyIGNhbGwgdG8gYXBwbHlTdWdnZXN0aW9uIHdpdGggaXNJbnRlcm1lZGlhdGVTdWdnZXN0aW9u
IGJlaW5nIGVxdWFsIHRvIGZhbHNlLgorICAgICAqLworICAgIGFjY2VwdFN1Z2dlc3Rpb246IGZ1
bmN0aW9uKCkgeyB9LAorCisgICAgLyoqCisgICAgICogQHJldHVybiB7c3RyaW5nfQorICAgICAq
LworICAgIHVzZXJFbnRlcmVkVGV4dDogZnVuY3Rpb24oKSB7IH0KK30KKworLyoqCisgKiBAY29u
c3RydWN0b3IKKyAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLlN1Z2dlc3RCb3hEZWxlZ2F0ZX0gc3Vn
Z2VzdEJveERlbGVnYXRlCisgKiBAcGFyYW0ge0VsZW1lbnR9IGlucHV0RWxlbWVudAorICogQHBh
cmFtIHtzdHJpbmd9IGNsYXNzTmFtZQorICovCitXZWJJbnNwZWN0b3IuU3VnZ2VzdEJveCA9IGZ1
bmN0aW9uKHN1Z2dlc3RCb3hEZWxlZ2F0ZSwgaW5wdXRFbGVtZW50LCBjbGFzc05hbWUpCit7Cisg
ICAgdGhpcy5fc3VnZ2VzdEJveERlbGVnYXRlID0gc3VnZ2VzdEJveERlbGVnYXRlOworICAgIHRo
aXMuX2lucHV0RWxlbWVudCA9IGlucHV0RWxlbWVudDsKKyAgICB0aGlzLl9sZW5ndGggPSAwOwor
ICAgIHRoaXMuX3NlbGVjdGVkSW5kZXggPSAtMTsKKyAgICB0aGlzLl9zZWxlY3RlZEVsZW1lbnQg
PSBudWxsOworICAgIHRoaXMuX2JvdW5kT25TY3JvbGwgPSB0aGlzLl9vbnNjcm9sbHJlc2l6ZS5i
aW5kKHRoaXMsIHRydWUpOworICAgIHRoaXMuX2JvdW5kT25SZXNpemUgPSB0aGlzLl9vbnNjcm9s
bHJlc2l6ZS5iaW5kKHRoaXMsIGZhbHNlKTsKKyAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigi
c2Nyb2xsIiwgdGhpcy5fYm91bmRPblNjcm9sbCwgdHJ1ZSk7CisgICAgd2luZG93LmFkZEV2ZW50
TGlzdGVuZXIoInJlc2l6ZSIsIHRoaXMuX2JvdW5kT25SZXNpemUsIHRydWUpOworCisgICAgdGhp
cy5fYm9keUVsZW1lbnQgPSBpbnB1dEVsZW1lbnQub3duZXJEb2N1bWVudC5ib2R5OworICAgIHRo
aXMuX2VsZW1lbnQgPSBpbnB1dEVsZW1lbnQub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KCJk
aXYiKTsKKyAgICB0aGlzLl9lbGVtZW50LmNsYXNzTmFtZSA9ICJzdWdnZXN0LWJveCAiICsgKGNs
YXNzTmFtZSB8fCAiIik7CisgICAgdGhpcy5fZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3Vz
ZWRvd24iLCB0aGlzLl9vbmJveG1vdXNlZG93bi5iaW5kKHRoaXMpLCB0cnVlKTsKKyAgICB0aGlz
LmNvbnRhaW5lckVsZW1lbnQgPSB0aGlzLl9lbGVtZW50LmNyZWF0ZUNoaWxkKCJkaXYiLCAiY29u
dGFpbmVyIik7CisgICAgdGhpcy5jb250ZW50RWxlbWVudCA9IHRoaXMuY29udGFpbmVyRWxlbWVu
dC5jcmVhdGVDaGlsZCgiZGl2IiwgImNvbnRlbnQiKTsKK30KKworV2ViSW5zcGVjdG9yLlN1Z2dl
c3RCb3gucHJvdG90eXBlID0geworICAgIGdldCB2aXNpYmxlKCkKKyAgICB7CisgICAgICAgIHJl
dHVybiAhIXRoaXMuX2VsZW1lbnQucGFyZW50RWxlbWVudDsKKyAgICB9LAorCisgICAgZ2V0IGhh
c1NlbGVjdGlvbigpCisgICAgeworICAgICAgICByZXR1cm4gISF0aGlzLl9zZWxlY3RlZEVsZW1l
bnQ7CisgICAgfSwKKworICAgIF9vbnNjcm9sbHJlc2l6ZTogZnVuY3Rpb24oaXNTY3JvbGwsIGV2
ZW50KQorICAgIHsKKyAgICAgICAgaWYgKGlzU2Nyb2xsICYmIHRoaXMuX2VsZW1lbnQuaXNBbmNl
c3RvcihldmVudC50YXJnZXQpIHx8ICF0aGlzLnZpc2libGUpCisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIHRoaXMuX3VwZGF0ZUJveFBvc2l0aW9uV2l0aEV4aXN0aW5nQW5jaG9yKCk7Cisg
ICAgfSwKKworICAgIF91cGRhdGVCb3hQb3NpdGlvbldpdGhFeGlzdGluZ0FuY2hvcjogZnVuY3Rp
b24oKQorICAgIHsKKyAgICAgICAgdGhpcy5fdXBkYXRlQm94UG9zaXRpb24odGhpcy5fYW5jaG9y
Qm94KTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogQHBhcmFtIHtBbmNob3JCb3h9IGFuY2hv
ckJveAorICAgICAqLworICAgIF91cGRhdGVCb3hQb3NpdGlvbjogZnVuY3Rpb24oYW5jaG9yQm94
KQorICAgIHsKKyAgICAgICAgLy8gTWVhc3VyZSB0aGUgY29udGVudCBlbGVtZW50IGJveC4KKyAg
ICAgICAgdGhpcy5jb250ZW50RWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gImlubGluZS1ibG9jayI7
CisgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGhpcy5jb250ZW50RWxlbWVudCk7
CisgICAgICAgIHRoaXMuY29udGVudEVsZW1lbnQucG9zaXRpb25BdCgwLCAwKTsKKyAgICAgICAg
dmFyIGNvbnRlbnRXaWR0aCA9IHRoaXMuY29udGVudEVsZW1lbnQub2Zmc2V0V2lkdGg7CisgICAg
ICAgIHZhciBjb250ZW50SGVpZ2h0ID0gdGhpcy5jb250ZW50RWxlbWVudC5vZmZzZXRIZWlnaHQ7
CisgICAgICAgIHRoaXMuY29udGVudEVsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICJibG9jayI7Cisg
ICAgICAgIHRoaXMuY29udGFpbmVyRWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLmNvbnRlbnRFbGVt
ZW50KTsKKworICAgICAgICAvLyBMYXkgb3V0IHRoZSBzdWdnZXN0LWJveCByZWxhdGl2ZSB0byB0
aGUgYW5jaG9yQm94LgorICAgICAgICB0aGlzLl9hbmNob3JCb3ggPSBhbmNob3JCb3g7CisgICAg
ICAgIGNvbnN0IHNwYWNlciA9IDY7CisKKyAgICAgICAgY29uc3Qgc3VnZ2VzdEJveFBhZGRpbmdY
ID0gMjE7CisgICAgICAgIHZhciBtYXhXaWR0aCA9IGRvY3VtZW50LmJvZHkub2Zmc2V0V2lkdGgg
LSBhbmNob3JCb3gueCAtIHNwYWNlcjsKKyAgICAgICAgdmFyIHdpZHRoID0gTWF0aC5taW4oY29u
dGVudFdpZHRoLCBtYXhXaWR0aCAtIHN1Z2dlc3RCb3hQYWRkaW5nWCkgKyBzdWdnZXN0Qm94UGFk
ZGluZ1g7CisgICAgICAgIHZhciBwYWRkZWRXaWR0aCA9IGNvbnRlbnRXaWR0aCArIHN1Z2dlc3RC
b3hQYWRkaW5nWDsKKyAgICAgICAgdmFyIGJveFggPSBhbmNob3JCb3gueDsKKyAgICAgICAgaWYg
KHdpZHRoIDwgcGFkZGVkV2lkdGgpIHsKKyAgICAgICAgICAgIC8vIFNoaWZ0IHRoZSBzdWdnZXN0
IGJveCB0byB0aGUgbGVmdCB0byBhY2NvbW1vZGF0ZSB0aGUgY29udGVudCB3aXRob3V0IHRyaW1t
aW5nIHRvIHRoZSBCT0RZIGVkZ2UuCisgICAgICAgICAgICBtYXhXaWR0aCA9IGRvY3VtZW50LmJv
ZHkub2Zmc2V0V2lkdGggLSBzcGFjZXI7CisgICAgICAgICAgICB3aWR0aCA9IE1hdGgubWluKGNv
bnRlbnRXaWR0aCwgbWF4V2lkdGggLSBzdWdnZXN0Qm94UGFkZGluZ1gpICsgc3VnZ2VzdEJveFBh
ZGRpbmdYOworICAgICAgICAgICAgYm94WCA9IGRvY3VtZW50LmJvZHkub2Zmc2V0V2lkdGggLSB3
aWR0aDsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IHN1Z2dlc3RCb3hQYWRkaW5nWSA9IDI7
CisgICAgICAgIHZhciBib3hZOworICAgICAgICB2YXIgYWJvdmVIZWlnaHQgPSBhbmNob3JCb3gu
eTsKKyAgICAgICAgdmFyIHVuZGVySGVpZ2h0ID0gZG9jdW1lbnQuYm9keS5vZmZzZXRIZWlnaHQg
LSBhbmNob3JCb3gueSAtIGFuY2hvckJveC5oZWlnaHQ7CisgICAgICAgIHZhciBtYXhIZWlnaHQg
PSBNYXRoLm1heCh1bmRlckhlaWdodCwgYWJvdmVIZWlnaHQpIC0gc3BhY2VyOworICAgICAgICB2
YXIgaGVpZ2h0ID0gTWF0aC5taW4oY29udGVudEhlaWdodCwgbWF4SGVpZ2h0IC0gc3VnZ2VzdEJv
eFBhZGRpbmdZKSArIHN1Z2dlc3RCb3hQYWRkaW5nWTsKKyAgICAgICAgaWYgKHVuZGVySGVpZ2h0
ID49IGFib3ZlSGVpZ2h0KSB7CisgICAgICAgICAgICAvLyBMb2NhdGUgdGhlIHN1Z2dlc3QgYm94
IHVuZGVyIHRoZSBhbmNob3JCb3guCisgICAgICAgICAgICBib3hZID0gYW5jaG9yQm94LnkgKyBh
bmNob3JCb3guaGVpZ2h0OworICAgICAgICAgICAgdGhpcy5fZWxlbWVudC5yZW1vdmVTdHlsZUNs
YXNzKCJhYm92ZS1hbmNob3IiKTsKKyAgICAgICAgICAgIHRoaXMuX2VsZW1lbnQuYWRkU3R5bGVD
bGFzcygidW5kZXItYW5jaG9yIik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBM
b2NhdGUgdGhlIHN1Z2dlc3QgYm94IGFib3ZlIHRoZSBhbmNob3JCb3guCisgICAgICAgICAgICBi
b3hZID0gYW5jaG9yQm94LnkgLSBoZWlnaHQ7CisgICAgICAgICAgICB0aGlzLl9lbGVtZW50LnJl
bW92ZVN0eWxlQ2xhc3MoInVuZGVyLWFuY2hvciIpOworICAgICAgICAgICAgdGhpcy5fZWxlbWVu
dC5hZGRTdHlsZUNsYXNzKCJhYm92ZS1hbmNob3IiKTsKKyAgICAgICAgfQorCisgICAgICAgIHRo
aXMuX2VsZW1lbnQucG9zaXRpb25BdChib3hYLCBib3hZKTsKKyAgICAgICAgdGhpcy5fZWxlbWVu
dC5zdHlsZS53aWR0aCA9IHdpZHRoICsgInB4IjsKKyAgICAgICAgdGhpcy5fZWxlbWVudC5zdHls
ZS5oZWlnaHQgPSBoZWlnaHQgKyAicHgiOworICAgIH0sCisKKyAgICBfb25ib3htb3VzZWRvd246
IGZ1bmN0aW9uKGV2ZW50KQorICAgIHsKKyAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsK
KyAgICB9LAorCisgICAgaGlkZTogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgaWYgKCF0aGlz
LnZpc2libGUpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgdGhpcy5fZWxlbWVudC5w
YXJlbnRFbGVtZW50LnJlbW92ZUNoaWxkKHRoaXMuX2VsZW1lbnQpOworICAgICAgICBkZWxldGUg
dGhpcy5fc2VsZWN0ZWRFbGVtZW50OworICAgIH0sCisKKyAgICByZW1vdmVGcm9tRWxlbWVudDog
ZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInNj
cm9sbCIsIHRoaXMuX2JvdW5kT25TY3JvbGwsIHRydWUpOworICAgICAgICB3aW5kb3cucmVtb3Zl
RXZlbnRMaXN0ZW5lcigicmVzaXplIiwgdGhpcy5fYm91bmRPblJlc2l6ZSwgdHJ1ZSk7CisgICAg
ICAgIHRoaXMuaGlkZSgpOworICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBAcGFyYW0ge3N0cmlu
Zz19IHRleHQKKyAgICAgKiBAcGFyYW0ge2Jvb2xlYW49fSBpc0ludGVybWVkaWF0ZVN1Z2dlc3Rp
b24KKyAgICAgKi8KKyAgICBfYXBwbHlTdWdnZXN0aW9uOiBmdW5jdGlvbih0ZXh0LCBpc0ludGVy
bWVkaWF0ZVN1Z2dlc3Rpb24pCisgICAgeworICAgICAgICBpZiAoIXRoaXMudmlzaWJsZSB8fCAh
KHRleHQgfHwgdGhpcy5fc2VsZWN0ZWRFbGVtZW50KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgICAgICB2YXIgc3VnZ2VzdGlvbiA9IHRleHQgfHwgdGhpcy5fc2VsZWN0ZWRFbGVt
ZW50LnRleHRDb250ZW50OworICAgICAgICBpZiAoIXN1Z2dlc3Rpb24pCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICAgICAgdGhpcy5fc3VnZ2VzdEJveERlbGVnYXRlLmFwcGx5U3Vn
Z2VzdGlvbihzdWdnZXN0aW9uLCBpc0ludGVybWVkaWF0ZVN1Z2dlc3Rpb24pOworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogQHBhcmFtIHtzdHJpbmc9fSB0
ZXh0CisgICAgICovCisgICAgYWNjZXB0U3VnZ2VzdGlvbjogZnVuY3Rpb24odGV4dCkKKyAgICB7
CisgICAgICAgIHZhciByZXN1bHQgPSB0aGlzLl9hcHBseVN1Z2dlc3Rpb24odGV4dCwgZmFsc2Up
OworICAgICAgICB0aGlzLmhpZGUoKTsKKyAgICAgICAgaWYgKCFyZXN1bHQpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgdGhpcy5fc3VnZ2VzdEJveERlbGVnYXRlLmFjY2Vw
dFN1Z2dlc3Rpb24oKTsKKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9LAorCisgICAgLyoq
CisgICAgICogQHBhcmFtIHtudW1iZXJ9IHNoaWZ0CisgICAgICogQHBhcmFtIHtib29sZWFuPX0g
aXNDaXJjdWxhcgorICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IGlzIGNoYW5nZWQKKyAgICAgKi8K
KyAgICBfc2VsZWN0Q2xvc2VzdDogZnVuY3Rpb24oc2hpZnQsIGlzQ2lyY3VsYXIpCisgICAgewor
ICAgICAgICBpZiAoIXRoaXMuX2xlbmd0aCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgICAgICB2YXIgaW5kZXggPSB0aGlzLl9zZWxlY3RlZEluZGV4ICsgc2hpZnQ7CisKKyAgICAg
ICAgaWYgKGlzQ2lyY3VsYXIpCisgICAgICAgICAgICBpbmRleCA9ICh0aGlzLl9sZW5ndGggKyBp
bmRleCkgJSB0aGlzLl9sZW5ndGg7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGluZGV4ID0g
TnVtYmVyLmNvbnN0cmFpbihpbmRleCwgMCwgdGhpcy5fbGVuZ3RoIC0gMSk7CisKKyAgICAgICAg
dGhpcy5fc2VsZWN0SXRlbShpbmRleCk7CisgICAgICAgIHRoaXMuX2FwcGx5U3VnZ2VzdGlvbih1
bmRlZmluZWQsIHRydWUpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9LAorCisgICAgLyoq
CisgICAgICogQHBhcmFtIHtBbmNob3JCb3h9IGFuY2hvckJveAorICAgICAqIEBwYXJhbSB7QXJy
YXkuPHN0cmluZz49fSBjb21wbGV0aW9ucworICAgICAqIEBwYXJhbSB7bnVtYmVyPX0gc2VsZWN0
ZWRJbmRleAorICAgICAqIEBwYXJhbSB7Ym9vbGVhbj19IGNhblNob3dGb3JTaW5nbGVJdGVtCisg
ICAgICovCisgICAgdXBkYXRlU3VnZ2VzdGlvbnM6IGZ1bmN0aW9uKGFuY2hvckJveCwgY29tcGxl
dGlvbnMsIHNlbGVjdGVkSW5kZXgsIGNhblNob3dGb3JTaW5nbGVJdGVtKQorICAgIHsKKyAgICAg
ICAgaWYgKHRoaXMuX3N1Z2dlc3RUaW1lb3V0KSB7CisgICAgICAgICAgICBjbGVhclRpbWVvdXQo
dGhpcy5fc3VnZ2VzdFRpbWVvdXQpOworICAgICAgICAgICAgZGVsZXRlIHRoaXMuX3N1Z2dlc3RU
aW1lb3V0OworICAgICAgICB9CisgICAgICAgIHRoaXMuX2NvbXBsZXRpb25zUmVhZHkoYW5jaG9y
Qm94LCBjb21wbGV0aW9ucywgc2VsZWN0ZWRJbmRleCwgY2FuU2hvd0ZvclNpbmdsZUl0ZW0pOwor
ICAgIH0sCisKKyAgICBfb25JdGVtTW91c2VEb3duOiBmdW5jdGlvbih0ZXh0LCBldmVudCkKKyAg
ICB7CisgICAgICAgIHRoaXMuYWNjZXB0U3VnZ2VzdGlvbih0ZXh0KTsKKyAgICAgICAgZXZlbnQu
Y29uc3VtZSh0cnVlKTsKKyAgICB9LAorCisgICAgX2NyZWF0ZUl0ZW1FbGVtZW50OiBmdW5jdGlv
bihwcmVmaXgsIHRleHQpCisgICAgeworICAgICAgICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoImRpdiIpOworICAgICAgICBlbGVtZW50LmNsYXNzTmFtZSA9ICJzdWdnZXN0
LWJveC1jb250ZW50LWl0ZW0gc291cmNlLWNvZGUiOworICAgICAgICBlbGVtZW50LnRhYkluZGV4
ID0gLTE7CisgICAgICAgIGlmIChwcmVmaXggJiYgcHJlZml4Lmxlbmd0aCAmJiAhdGV4dC5pbmRl
eE9mKHByZWZpeCkpIHsKKyAgICAgICAgICAgIHZhciBwcmVmaXhFbGVtZW50ID0gZWxlbWVudC5j
cmVhdGVDaGlsZCgic3BhbiIsICJwcmVmaXgiKTsKKyAgICAgICAgICAgIHByZWZpeEVsZW1lbnQu
dGV4dENvbnRlbnQgPSBwcmVmaXg7CisgICAgICAgICAgICB2YXIgc3VmZml4RWxlbWVudCA9IGVs
ZW1lbnQuY3JlYXRlQ2hpbGQoInNwYW4iLCAic3VmZml4Iik7CisgICAgICAgICAgICBzdWZmaXhF
bGVtZW50LnRleHRDb250ZW50ID0gdGV4dC5zdWJzdHJpbmcocHJlZml4Lmxlbmd0aCk7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICB2YXIgc3VmZml4RWxlbWVudCA9IGVsZW1lbnQuY3Jl
YXRlQ2hpbGQoInNwYW4iLCAic3VmZml4Iik7CisgICAgICAgICAgICBzdWZmaXhFbGVtZW50LnRl
eHRDb250ZW50ID0gdGV4dDsKKyAgICAgICAgfQorICAgICAgICBlbGVtZW50LmFkZEV2ZW50TGlz
dGVuZXIoIm1vdXNlZG93biIsIHRoaXMuX29uSXRlbU1vdXNlRG93bi5iaW5kKHRoaXMsIHRleHQp
LCBmYWxzZSk7CisgICAgICAgIHJldHVybiBlbGVtZW50OworICAgIH0sCisKKyAgICAvKioKKyAg
ICAgKiBAcGFyYW0ge0FycmF5LjxzdHJpbmc+PX0gaXRlbXMKKyAgICAgKiBAcGFyYW0ge251bWJl
cj19IHNlbGVjdGVkSW5kZXgKKyAgICAgKi8KKyAgICBfdXBkYXRlSXRlbXM6IGZ1bmN0aW9uKGl0
ZW1zLCBzZWxlY3RlZEluZGV4KQorICAgIHsKKyAgICAgICAgdGhpcy5fbGVuZ3RoID0gaXRlbXMu
bGVuZ3RoOworICAgICAgICB0aGlzLmNvbnRlbnRFbGVtZW50LnJlbW92ZUNoaWxkcmVuKCk7CisK
KyAgICAgICAgdmFyIHVzZXJFbnRlcmVkVGV4dCA9IHRoaXMuX3N1Z2dlc3RCb3hEZWxlZ2F0ZS51
c2VyRW50ZXJlZFRleHQoKTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpdGVtcy5sZW5n
dGg7ICsraSkgeworICAgICAgICAgICAgdmFyIGl0ZW0gPSBpdGVtc1tpXTsKKyAgICAgICAgICAg
IHZhciBjdXJyZW50SXRlbUVsZW1lbnQgPSB0aGlzLl9jcmVhdGVJdGVtRWxlbWVudCh1c2VyRW50
ZXJlZFRleHQsIGl0ZW0pOworICAgICAgICAgICAgdGhpcy5jb250ZW50RWxlbWVudC5hcHBlbmRD
aGlsZChjdXJyZW50SXRlbUVsZW1lbnQpOworICAgICAgICB9CisKKyAgICAgICAgdGhpcy5fc2Vs
ZWN0ZWRFbGVtZW50ID0gbnVsbDsKKyAgICAgICAgaWYgKHR5cGVvZiBzZWxlY3RlZEluZGV4ID09
PSAibnVtYmVyIikKKyAgICAgICAgICAgIHRoaXMuX3NlbGVjdEl0ZW0oc2VsZWN0ZWRJbmRleCk7
CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleAorICAgICAq
LworICAgIF9zZWxlY3RJdGVtOiBmdW5jdGlvbihpbmRleCkKKyAgICB7CisgICAgICAgIGlmICh0
aGlzLl9zZWxlY3RlZEVsZW1lbnQpCisgICAgICAgICAgICB0aGlzLl9zZWxlY3RlZEVsZW1lbnQu
Y2xhc3NMaXN0LnJlbW92ZSgic2VsZWN0ZWQiKTsKKworICAgICAgICB0aGlzLl9zZWxlY3RlZElu
ZGV4ID0gaW5kZXg7CisgICAgICAgIHRoaXMuX3NlbGVjdGVkRWxlbWVudCA9IHRoaXMuY29udGVu
dEVsZW1lbnQuY2hpbGRyZW5baW5kZXhdOworICAgICAgICB0aGlzLl9zZWxlY3RlZEVsZW1lbnQu
Y2xhc3NMaXN0LmFkZCgic2VsZWN0ZWQiKTsKKworICAgICAgICB0aGlzLl9zZWxlY3RlZEVsZW1l
bnQuc2Nyb2xsSW50b1ZpZXdJZk5lZWRlZChmYWxzZSk7CisgICAgfSwKKworICAgIC8qKgorICAg
ICAqIEBwYXJhbSB7QXJyYXkuPHN0cmluZz49fSBjb21wbGV0aW9ucworICAgICAqIEBwYXJhbSB7
Ym9vbGVhbj19IGNhblNob3dGb3JTaW5nbGVJdGVtCisgICAgICovCisgICAgX2NhblNob3dCb3g6
IGZ1bmN0aW9uKGNvbXBsZXRpb25zLCBjYW5TaG93Rm9yU2luZ2xlSXRlbSkKKyAgICB7CisgICAg
ICAgIGlmICghY29tcGxldGlvbnMgfHwgIWNvbXBsZXRpb25zLmxlbmd0aCkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgICAgICBpZiAoY29tcGxldGlvbnMubGVuZ3RoID4gMSkKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAgIC8vIERvIG5vdCBzaG93IGEgc2luZ2xl
IHN1Z2dlc3Rpb24gaWYgaXQgaXMgdGhlIHNhbWUgYXMgdXNlci1lbnRlcmVkIHByZWZpeCwgZXZl
biBpZiBhbGxvd2VkIHRvIHNob3cgc2luZ2xlLWl0ZW0gc3VnZ2VzdCBib3hlcy4KKyAgICAgICAg
cmV0dXJuIGNhblNob3dGb3JTaW5nbGVJdGVtICYmIGNvbXBsZXRpb25zWzBdICE9PSB0aGlzLl9z
dWdnZXN0Qm94RGVsZWdhdGUudXNlckVudGVyZWRUZXh0KCk7CisgICAgfSwKKworICAgIF9yZW1l
bWJlclJvd0NvdW50UGVyVmlld3BvcnQ6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIGlmICgh
dGhpcy5jb250ZW50RWxlbWVudC5maXJzdENoaWxkKQorICAgICAgICAgICAgcmV0dXJuOworCisg
ICAgICAgIHRoaXMuX3Jvd0NvdW50UGVyVmlld3BvcnQgPSBNYXRoLmZsb29yKHRoaXMuY29udGFp
bmVyRWxlbWVudC5vZmZzZXRIZWlnaHQgLyB0aGlzLmNvbnRlbnRFbGVtZW50LmZpcnN0Q2hpbGQu
b2Zmc2V0SGVpZ2h0KTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogQHBhcmFtIHtBbmNob3JC
b3h9IGFuY2hvckJveAorICAgICAqIEBwYXJhbSB7QXJyYXkuPHN0cmluZz49fSBjb21wbGV0aW9u
cworICAgICAqIEBwYXJhbSB7bnVtYmVyPX0gc2VsZWN0ZWRJbmRleAorICAgICAqIEBwYXJhbSB7
Ym9vbGVhbj19IGNhblNob3dGb3JTaW5nbGVJdGVtCisgICAgICovCisgICAgX2NvbXBsZXRpb25z
UmVhZHk6IGZ1bmN0aW9uKGFuY2hvckJveCwgY29tcGxldGlvbnMsIHNlbGVjdGVkSW5kZXgsIGNh
blNob3dGb3JTaW5nbGVJdGVtKQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMuX2NhblNob3dCb3go
Y29tcGxldGlvbnMsIGNhblNob3dGb3JTaW5nbGVJdGVtKSkgeworICAgICAgICAgICAgdGhpcy5f
dXBkYXRlSXRlbXMoY29tcGxldGlvbnMsIHNlbGVjdGVkSW5kZXgpOworICAgICAgICAgICAgdGhp
cy5fdXBkYXRlQm94UG9zaXRpb24oYW5jaG9yQm94KTsKKyAgICAgICAgICAgIGlmICghdGhpcy52
aXNpYmxlKQorICAgICAgICAgICAgICAgIHRoaXMuX2JvZHlFbGVtZW50LmFwcGVuZENoaWxkKHRo
aXMuX2VsZW1lbnQpOworICAgICAgICAgICAgdGhpcy5fcmVtZW1iZXJSb3dDb3VudFBlclZpZXdw
b3J0KCk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgdGhpcy5oaWRlKCk7CisgICAgfSwK
KworICAgIC8qKgorICAgICAqIEByZXR1cm4ge2Jvb2xlYW59CisgICAgICovCisgICAgdXBLZXlQ
cmVzc2VkOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fc2VsZWN0Q2xv
c2VzdCgtMSwgdHJ1ZSk7CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEByZXR1cm4ge2Jvb2xl
YW59CisgICAgICovCisgICAgZG93bktleVByZXNzZWQ6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAg
ICAgIHJldHVybiB0aGlzLl9zZWxlY3RDbG9zZXN0KDEsIHRydWUpOworICAgIH0sCisKKyAgICAv
KioKKyAgICAgKiBAcmV0dXJuIHtib29sZWFufQorICAgICAqLworICAgIHBhZ2VVcEtleVByZXNz
ZWQ6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9zZWxlY3RDbG9zZXN0
KC10aGlzLl9yb3dDb3VudFBlclZpZXdwb3J0LCBmYWxzZSk7CisgICAgfSwKKworICAgIC8qKgor
ICAgICAqIEByZXR1cm4ge2Jvb2xlYW59CisgICAgICovCisgICAgcGFnZURvd25LZXlQcmVzc2Vk
OiBmdW5jdGlvbigpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fc2VsZWN0Q2xvc2VzdCh0
aGlzLl9yb3dDb3VudFBlclZpZXdwb3J0LCBmYWxzZSk7CisgICAgfSwKKworICAgIC8qKgorICAg
ICAqIEByZXR1cm4ge2Jvb2xlYW59CisgICAgICovCisgICAgZW50ZXJLZXlQcmVzc2VkOiBmdW5j
dGlvbigpCisgICAgeworICAgICAgICB2YXIgaGFzU2VsZWN0ZWRJdGVtID0gISF0aGlzLl9zZWxl
Y3RlZEVsZW1lbnQ7CisgICAgICAgIHRoaXMuYWNjZXB0U3VnZ2VzdGlvbigpOworCisgICAgICAg
IC8vIFJlcG9ydCB0aGUgZXZlbnQgYXMgbm9uLWhhbmRsZWQgaWYgdGhlcmUgaXMgbm8gc2VsZWN0
ZWQgaXRlbSwKKyAgICAgICAgLy8gdG8gY29tbWl0IHRoZSBpbnB1dCBvciBoYW5kbGUgaXQgb3Ro
ZXJ3aXNlLgorICAgICAgICByZXR1cm4gaGFzU2VsZWN0ZWRJdGVtOworICAgIH0sCisKKyAgICAv
KioKKyAgICAgKiBAcmV0dXJuIHtib29sZWFufQorICAgICAqLworICAgIHRhYktleVByZXNzZWQ6
IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLmVudGVyS2V5UHJlc3NlZCgp
OworICAgIH0KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvVGV4dFByb21wdC5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvVGV4
dFByb21wdC5qcwppbmRleCAyYjViMmQ1YWE4ZGRmM2M0ZDIzMzBjNGEwYzY0MzAzNzEyOTI0Yzdi
Li42ZWY4ZGZkZGYzZjIxNmIwNzJiYzgxZDk1ZmZkMjkzMjExNzFiMWM2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1RleHRQcm9tcHQuanMKKysrIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9UZXh0UHJvbXB0LmpzCkBAIC0zMCw2ICsz
MCw3IEBACiAvKioKICAqIEBjb25zdHJ1Y3RvcgogICogQGV4dGVuZHMgV2ViSW5zcGVjdG9yLk9i
amVjdAorICogQGltcGxlbWVudHMge1dlYkluc3BlY3Rvci5TdWdnZXN0Qm94RGVsZWdhdGV9CiAg
KiBAcGFyYW0ge2Z1bmN0aW9uKEVsZW1lbnQsIFJhbmdlLCBib29sZWFuLCBmdW5jdGlvbihBcnJh
eS48c3RyaW5nPiwgbnVtYmVyPSkpfSBjb21wbGV0aW9ucwogICogQHBhcmFtIHtzdHJpbmc9fSBz
dG9wQ2hhcmFjdGVycwogICovCkBAIC01MSw2ICs1MiwxMSBAQCBXZWJJbnNwZWN0b3IuVGV4dFBy
b21wdC5FdmVudHMgPSB7CiB9OwogCiBXZWJJbnNwZWN0b3IuVGV4dFByb21wdC5wcm90b3R5cGUg
PSB7CisgICAgdXNlckVudGVyZWRUZXh0OiBmdW5jdGlvbigpCisgICAgeworICAgICAgICByZXR1
cm4gdGhpcy5fdXNlckVudGVyZWRUZXh0OworICAgIH0sCisKICAgICBnZXQgcHJveHlFbGVtZW50
KCkKICAgICB7CiAgICAgICAgIHJldHVybiB0aGlzLl9wcm94eUVsZW1lbnQ7CkBAIC0xMTcsNyAr
MTIzLDcgQEAgV2ViSW5zcGVjdG9yLlRleHRQcm9tcHQucHJvdG90eXBlID0gewogICAgICAgICB0
aGlzLl9lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoInNlbGVjdHN0YXJ0IiwgdGhpcy5fYm91bmRT
ZWxlY3RTdGFydCwgZmFsc2UpOwogCiAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5fc3VnZ2VzdEJv
eENsYXNzTmFtZSA9PT0gInN0cmluZyIpCi0gICAgICAgICAgICB0aGlzLl9zdWdnZXN0Qm94ID0g
bmV3IFdlYkluc3BlY3Rvci5UZXh0UHJvbXB0LlN1Z2dlc3RCb3godGhpcywgdGhpcy5fZWxlbWVu
dCwgdGhpcy5fc3VnZ2VzdEJveENsYXNzTmFtZSk7CisgICAgICAgICAgICB0aGlzLl9zdWdnZXN0
Qm94ID0gbmV3IFdlYkluc3BlY3Rvci5TdWdnZXN0Qm94KHRoaXMsIHRoaXMuX2VsZW1lbnQsIHRo
aXMuX3N1Z2dlc3RCb3hDbGFzc05hbWUpOwogCiAgICAgICAgIHJldHVybiB0aGlzLnByb3h5RWxl
bWVudDsKICAgICB9LApAQCAtNTIwLDcgKzUyNiw3IEBAIFdlYkluc3BlY3Rvci5UZXh0UHJvbXB0
LnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgICAgICBzZWxlY3Rpb24uYWRkUmFuZ2UoZmluYWxT
ZWxlY3Rpb25SYW5nZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZQotICAgICAgICAg
ICAgdGhpcy5hcHBseVN1Z2dlc3Rpb24oY29tcGxldGlvblRleHQsIGNvbXBsZXRpb25zLmxlbmd0
aCA+IDEsIG9yaWdpbmFsV29yZFByZWZpeFJhbmdlKTsKKyAgICAgICAgICAgIHRoaXMuX2FwcGx5
U3VnZ2VzdGlvbihjb21wbGV0aW9uVGV4dCwgY29tcGxldGlvbnMubGVuZ3RoID4gMSwgb3JpZ2lu
YWxXb3JkUHJlZml4UmFuZ2UpOwogICAgIH0sCiAKICAgICBfY29tcGxldGVDb21tb25QcmVmaXg6
IGZ1bmN0aW9uKCkKQEAgLTUzOCw5ICs1NDQsMjAgQEAgV2ViSW5zcGVjdG9yLlRleHRQcm9tcHQu
cHJvdG90eXBlID0gewogICAgIH0sCiAKICAgICAvKioKLSAgICAgKiBAcGFyYW0ge1JhbmdlPX0g
b3JpZ2luYWxQcmVmaXhSYW5nZQorICAgICAqIEBwYXJhbSB7c3RyaW5nfSBjb21wbGV0aW9uVGV4
dAorICAgICAqIEBwYXJhbSB7Ym9vbGVhbj19IGlzSW50ZXJtZWRpYXRlU3VnZ2VzdGlvbgorICAg
ICAqLworICAgIGFwcGx5U3VnZ2VzdGlvbjogZnVuY3Rpb24oY29tcGxldGlvblRleHQsIGlzSW50
ZXJtZWRpYXRlU3VnZ2VzdGlvbikKKyAgICB7CisgICAgICAgIHRoaXMuX2FwcGx5U3VnZ2VzdGlv
bihjb21wbGV0aW9uVGV4dCwgaXNJbnRlcm1lZGlhdGVTdWdnZXN0aW9uKTsKKyAgICB9LAorCisg
ICAgLyoqCisgICAgICogQHBhcmFtIHtzdHJpbmd9IGNvbXBsZXRpb25UZXh0CisgICAgICogQHBh
cmFtIHtib29sZWFuPX0gaXNJbnRlcm1lZGlhdGVTdWdnZXN0aW9uCisgICAgICogQHBhcmFtIHtS
YW5nZX0gb3JpZ2luYWxQcmVmaXhSYW5nZQogICAgICAqLwotICAgIGFwcGx5U3VnZ2VzdGlvbjog
ZnVuY3Rpb24oY29tcGxldGlvblRleHQsIGlzSW50ZXJtZWRpYXRlU3VnZ2VzdGlvbiwgb3JpZ2lu
YWxQcmVmaXhSYW5nZSkKKyAgICBfYXBwbHlTdWdnZXN0aW9uOiBmdW5jdGlvbihjb21wbGV0aW9u
VGV4dCwgaXNJbnRlcm1lZGlhdGVTdWdnZXN0aW9uLCBvcmlnaW5hbFByZWZpeFJhbmdlKQogICAg
IHsKICAgICAgICAgdmFyIHdvcmRQcmVmaXhMZW5ndGg7CiAgICAgICAgIGlmIChvcmlnaW5hbFBy
ZWZpeFJhbmdlKQpAQCAtNzE3LDcgKzczNCw3IEBAIFdlYkluc3BlY3Rvci5UZXh0UHJvbXB0LnBy
b3RvdHlwZSA9IHsKICAgICBlbnRlcktleVByZXNzZWQ6IGZ1bmN0aW9uKGV2ZW50KQogICAgIHsK
ICAgICAgICAgaWYgKHRoaXMuaXNTdWdnZXN0Qm94VmlzaWJsZSgpKQotICAgICAgICAgICAgcmV0
dXJuIHRoaXMuX3N1Z2dlc3RCb3guZW50ZXJLZXlQcmVzc2VkKGV2ZW50KTsKKyAgICAgICAgICAg
IHJldHVybiB0aGlzLl9zdWdnZXN0Qm94LmVudGVyS2V5UHJlc3NlZCgpOwogCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICB9LApAQCAtNzI1LDcgKzc0Miw3IEBAIFdlYkluc3BlY3Rvci5UZXh0
UHJvbXB0LnByb3RvdHlwZSA9IHsKICAgICB1cEtleVByZXNzZWQ6IGZ1bmN0aW9uKGV2ZW50KQog
ICAgIHsKICAgICAgICAgaWYgKHRoaXMuaXNTdWdnZXN0Qm94VmlzaWJsZSgpKQotICAgICAgICAg
ICAgcmV0dXJuIHRoaXMuX3N1Z2dlc3RCb3gudXBLZXlQcmVzc2VkKGV2ZW50KTsKKyAgICAgICAg
ICAgIHJldHVybiB0aGlzLl9zdWdnZXN0Qm94LnVwS2V5UHJlc3NlZCgpOwogCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICB9LApAQCAtNzMzLDcgKzc1MCw3IEBAIFdlYkluc3BlY3Rvci5UZXh0
UHJvbXB0LnByb3RvdHlwZSA9IHsKICAgICBkb3duS2V5UHJlc3NlZDogZnVuY3Rpb24oZXZlbnQp
CiAgICAgewogICAgICAgICBpZiAodGhpcy5pc1N1Z2dlc3RCb3hWaXNpYmxlKCkpCi0gICAgICAg
ICAgICByZXR1cm4gdGhpcy5fc3VnZ2VzdEJveC5kb3duS2V5UHJlc3NlZChldmVudCk7CisgICAg
ICAgICAgICByZXR1cm4gdGhpcy5fc3VnZ2VzdEJveC5kb3duS2V5UHJlc3NlZCgpOwogCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICB9LApAQCAtNzQxLDcgKzc1OCw3IEBAIFdlYkluc3BlY3Rv
ci5UZXh0UHJvbXB0LnByb3RvdHlwZSA9IHsKICAgICBwYWdlVXBLZXlQcmVzc2VkOiBmdW5jdGlv
bihldmVudCkKICAgICB7CiAgICAgICAgIGlmICh0aGlzLmlzU3VnZ2VzdEJveFZpc2libGUoKSkK
LSAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdWdnZXN0Qm94LnBhZ2VVcEtleVByZXNzZWQoZXZl
bnQpOworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N1Z2dlc3RCb3gucGFnZVVwS2V5UHJlc3Nl
ZCgpOwogCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9LApAQCAtNzQ5LDcgKzc2Niw3IEBA
IFdlYkluc3BlY3Rvci5UZXh0UHJvbXB0LnByb3RvdHlwZSA9IHsKICAgICBwYWdlRG93bktleVBy
ZXNzZWQ6IGZ1bmN0aW9uKGV2ZW50KQogICAgIHsKICAgICAgICAgaWYgKHRoaXMuaXNTdWdnZXN0
Qm94VmlzaWJsZSgpKQotICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N1Z2dlc3RCb3gucGFnZURv
d25LZXlQcmVzc2VkKGV2ZW50KTsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdWdnZXN0Qm94
LnBhZ2VEb3duS2V5UHJlc3NlZCgpOwogCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9LApA
QCAtOTI2LDMyOSArOTQzLDMgQEAgV2ViSW5zcGVjdG9yLlRleHRQcm9tcHRXaXRoSGlzdG9yeS5w
cm90b3R5cGUgPSB7CiAgICAgX19wcm90b19fOiBXZWJJbnNwZWN0b3IuVGV4dFByb21wdC5wcm90
b3R5cGUKIH0KIAotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqLwotV2ViSW5zcGVjdG9yLlRleHRQ
cm9tcHQuU3VnZ2VzdEJveCA9IGZ1bmN0aW9uKHRleHRQcm9tcHQsIGlucHV0RWxlbWVudCwgY2xh
c3NOYW1lKQotewotICAgIHRoaXMuX3RleHRQcm9tcHQgPSB0ZXh0UHJvbXB0OwotICAgIHRoaXMu
X2lucHV0RWxlbWVudCA9IGlucHV0RWxlbWVudDsKLSAgICB0aGlzLl9sZW5ndGggPSAwOwotICAg
IHRoaXMuX3NlbGVjdGVkSW5kZXggPSAtMTsKLSAgICB0aGlzLl9zZWxlY3RlZEVsZW1lbnQgPSBu
dWxsOwotICAgIHRoaXMuX2JvdW5kT25TY3JvbGwgPSB0aGlzLl9vbnNjcm9sbHJlc2l6ZS5iaW5k
KHRoaXMsIHRydWUpOwotICAgIHRoaXMuX2JvdW5kT25SZXNpemUgPSB0aGlzLl9vbnNjcm9sbHJl
c2l6ZS5iaW5kKHRoaXMsIGZhbHNlKTsKLSAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigic2Ny
b2xsIiwgdGhpcy5fYm91bmRPblNjcm9sbCwgdHJ1ZSk7Ci0gICAgd2luZG93LmFkZEV2ZW50TGlz
dGVuZXIoInJlc2l6ZSIsIHRoaXMuX2JvdW5kT25SZXNpemUsIHRydWUpOwotCi0gICAgdGhpcy5f
Ym9keUVsZW1lbnQgPSBpbnB1dEVsZW1lbnQub3duZXJEb2N1bWVudC5ib2R5OwotICAgIHRoaXMu
X2VsZW1lbnQgPSBpbnB1dEVsZW1lbnQub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYi
KTsKLSAgICB0aGlzLl9lbGVtZW50LmNsYXNzTmFtZSA9ICJzdWdnZXN0LWJveCAiICsgKGNsYXNz
TmFtZSB8fCAiIik7Ci0gICAgdGhpcy5fZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRv
d24iLCB0aGlzLl9vbmJveG1vdXNlZG93bi5iaW5kKHRoaXMpLCB0cnVlKTsKLSAgICB0aGlzLmNv
bnRhaW5lckVsZW1lbnQgPSB0aGlzLl9lbGVtZW50LmNyZWF0ZUNoaWxkKCJkaXYiLCAiY29udGFp
bmVyIik7Ci0gICAgdGhpcy5jb250ZW50RWxlbWVudCA9IHRoaXMuY29udGFpbmVyRWxlbWVudC5j
cmVhdGVDaGlsZCgiZGl2IiwgImNvbnRlbnQiKTsKLX0KLQotV2ViSW5zcGVjdG9yLlRleHRQcm9t
cHQuU3VnZ2VzdEJveC5wcm90b3R5cGUgPSB7Ci0gICAgZ2V0IHZpc2libGUoKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuICEhdGhpcy5fZWxlbWVudC5wYXJlbnRFbGVtZW50OwotICAgIH0sCi0KLSAg
ICBnZXQgaGFzU2VsZWN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAhIXRoaXMuX3NlbGVj
dGVkRWxlbWVudDsKLSAgICB9LAotCi0gICAgX29uc2Nyb2xscmVzaXplOiBmdW5jdGlvbihpc1Nj
cm9sbCwgZXZlbnQpCi0gICAgewotICAgICAgICBpZiAoaXNTY3JvbGwgJiYgdGhpcy5fZWxlbWVu
dC5pc0FuY2VzdG9yKGV2ZW50LnRhcmdldCkgfHwgIXRoaXMudmlzaWJsZSkKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgdGhpcy5fdXBkYXRlQm94UG9zaXRpb25XaXRoRXhpc3RpbmdBbmNo
b3IoKTsKLSAgICB9LAotCi0gICAgX3VwZGF0ZUJveFBvc2l0aW9uV2l0aEV4aXN0aW5nQW5jaG9y
OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB0aGlzLl91cGRhdGVCb3hQb3NpdGlvbih0aGlz
Ll9hbmNob3JCb3gpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge0FuY2hvckJv
eH0gYW5jaG9yQm94Ci0gICAgICovCi0gICAgX3VwZGF0ZUJveFBvc2l0aW9uOiBmdW5jdGlvbihh
bmNob3JCb3gpCi0gICAgewotICAgICAgICAvLyBNZWFzdXJlIHRoZSBjb250ZW50IGVsZW1lbnQg
Ym94LgotICAgICAgICB0aGlzLmNvbnRlbnRFbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAiaW5saW5l
LWJsb2NrIjsKLSAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aGlzLmNvbnRlbnRF
bGVtZW50KTsKLSAgICAgICAgdGhpcy5jb250ZW50RWxlbWVudC5wb3NpdGlvbkF0KDAsIDApOwot
ICAgICAgICB2YXIgY29udGVudFdpZHRoID0gdGhpcy5jb250ZW50RWxlbWVudC5vZmZzZXRXaWR0
aDsKLSAgICAgICAgdmFyIGNvbnRlbnRIZWlnaHQgPSB0aGlzLmNvbnRlbnRFbGVtZW50Lm9mZnNl
dEhlaWdodDsKLSAgICAgICAgdGhpcy5jb250ZW50RWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gImJs
b2NrIjsKLSAgICAgICAgdGhpcy5jb250YWluZXJFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuY29u
dGVudEVsZW1lbnQpOwotCi0gICAgICAgIC8vIExheSBvdXQgdGhlIHN1Z2dlc3QtYm94IHJlbGF0
aXZlIHRvIHRoZSBhbmNob3JCb3guCi0gICAgICAgIHRoaXMuX2FuY2hvckJveCA9IGFuY2hvckJv
eDsKLSAgICAgICAgY29uc3Qgc3BhY2VyID0gNjsKLQotICAgICAgICBjb25zdCBzdWdnZXN0Qm94
UGFkZGluZ1ggPSAyMTsKLSAgICAgICAgdmFyIG1heFdpZHRoID0gZG9jdW1lbnQuYm9keS5vZmZz
ZXRXaWR0aCAtIGFuY2hvckJveC54IC0gc3BhY2VyOwotICAgICAgICB2YXIgd2lkdGggPSBNYXRo
Lm1pbihjb250ZW50V2lkdGgsIG1heFdpZHRoIC0gc3VnZ2VzdEJveFBhZGRpbmdYKSArIHN1Z2dl
c3RCb3hQYWRkaW5nWDsKLSAgICAgICAgdmFyIHBhZGRlZFdpZHRoID0gY29udGVudFdpZHRoICsg
c3VnZ2VzdEJveFBhZGRpbmdYOwotICAgICAgICB2YXIgYm94WCA9IGFuY2hvckJveC54OwotICAg
ICAgICBpZiAod2lkdGggPCBwYWRkZWRXaWR0aCkgewotICAgICAgICAgICAgLy8gU2hpZnQgdGhl
IHN1Z2dlc3QgYm94IHRvIHRoZSBsZWZ0IHRvIGFjY29tbW9kYXRlIHRoZSBjb250ZW50IHdpdGhv
dXQgdHJpbW1pbmcgdG8gdGhlIEJPRFkgZWRnZS4KLSAgICAgICAgICAgIG1heFdpZHRoID0gZG9j
dW1lbnQuYm9keS5vZmZzZXRXaWR0aCAtIHNwYWNlcjsKLSAgICAgICAgICAgIHdpZHRoID0gTWF0
aC5taW4oY29udGVudFdpZHRoLCBtYXhXaWR0aCAtIHN1Z2dlc3RCb3hQYWRkaW5nWCkgKyBzdWdn
ZXN0Qm94UGFkZGluZ1g7Ci0gICAgICAgICAgICBib3hYID0gZG9jdW1lbnQuYm9keS5vZmZzZXRX
aWR0aCAtIHdpZHRoOwotICAgICAgICB9Ci0KLSAgICAgICAgY29uc3Qgc3VnZ2VzdEJveFBhZGRp
bmdZID0gMjsKLSAgICAgICAgdmFyIGJveFk7Ci0gICAgICAgIHZhciBhYm92ZUhlaWdodCA9IGFu
Y2hvckJveC55OwotICAgICAgICB2YXIgdW5kZXJIZWlnaHQgPSBkb2N1bWVudC5ib2R5Lm9mZnNl
dEhlaWdodCAtIGFuY2hvckJveC55IC0gYW5jaG9yQm94LmhlaWdodDsKLSAgICAgICAgdmFyIG1h
eEhlaWdodCA9IE1hdGgubWF4KHVuZGVySGVpZ2h0LCBhYm92ZUhlaWdodCkgLSBzcGFjZXI7Ci0g
ICAgICAgIHZhciBoZWlnaHQgPSBNYXRoLm1pbihjb250ZW50SGVpZ2h0LCBtYXhIZWlnaHQgLSBz
dWdnZXN0Qm94UGFkZGluZ1kpICsgc3VnZ2VzdEJveFBhZGRpbmdZOwotICAgICAgICBpZiAodW5k
ZXJIZWlnaHQgPj0gYWJvdmVIZWlnaHQpIHsKLSAgICAgICAgICAgIC8vIExvY2F0ZSB0aGUgc3Vn
Z2VzdCBib3ggdW5kZXIgdGhlIGFuY2hvckJveC4KLSAgICAgICAgICAgIGJveFkgPSBhbmNob3JC
b3gueSArIGFuY2hvckJveC5oZWlnaHQ7Ci0gICAgICAgICAgICB0aGlzLl9lbGVtZW50LnJlbW92
ZVN0eWxlQ2xhc3MoImFib3ZlLWFuY2hvciIpOwotICAgICAgICAgICAgdGhpcy5fZWxlbWVudC5h
ZGRTdHlsZUNsYXNzKCJ1bmRlci1hbmNob3IiKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgIC8vIExvY2F0ZSB0aGUgc3VnZ2VzdCBib3ggYWJvdmUgdGhlIGFuY2hvckJveC4KLSAgICAg
ICAgICAgIGJveFkgPSBhbmNob3JCb3gueSAtIGhlaWdodDsKLSAgICAgICAgICAgIHRoaXMuX2Vs
ZW1lbnQucmVtb3ZlU3R5bGVDbGFzcygidW5kZXItYW5jaG9yIik7Ci0gICAgICAgICAgICB0aGlz
Ll9lbGVtZW50LmFkZFN0eWxlQ2xhc3MoImFib3ZlLWFuY2hvciIpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgdGhpcy5fZWxlbWVudC5wb3NpdGlvbkF0KGJveFgsIGJveFkpOwotICAgICAgICB0aGlz
Ll9lbGVtZW50LnN0eWxlLndpZHRoID0gd2lkdGggKyAicHgiOwotICAgICAgICB0aGlzLl9lbGVt
ZW50LnN0eWxlLmhlaWdodCA9IGhlaWdodCArICJweCI7Ci0gICAgfSwKLQotICAgIF9vbmJveG1v
dXNlZG93bjogZnVuY3Rpb24oZXZlbnQpCi0gICAgewotICAgICAgICBldmVudC5wcmV2ZW50RGVm
YXVsdCgpOwotICAgIH0sCi0KLSAgICBoaWRlOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBp
ZiAoIXRoaXMudmlzaWJsZSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICB0aGlzLl9l
bGVtZW50LnBhcmVudEVsZW1lbnQucmVtb3ZlQ2hpbGQodGhpcy5fZWxlbWVudCk7Ci0gICAgICAg
IGRlbGV0ZSB0aGlzLl9zZWxlY3RlZEVsZW1lbnQ7Ci0gICAgfSwKLQotICAgIHJlbW92ZUZyb21F
bGVtZW50OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0
ZW5lcigic2Nyb2xsIiwgdGhpcy5fYm91bmRPblNjcm9sbCwgdHJ1ZSk7Ci0gICAgICAgIHdpbmRv
dy5yZW1vdmVFdmVudExpc3RlbmVyKCJyZXNpemUiLCB0aGlzLl9ib3VuZE9uUmVzaXplLCB0cnVl
KTsKLSAgICAgICAgdGhpcy5oaWRlKCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJh
bSB7c3RyaW5nPX0gdGV4dAotICAgICAqIEBwYXJhbSB7Ym9vbGVhbj19IGlzSW50ZXJtZWRpYXRl
U3VnZ2VzdGlvbgotICAgICAqLwotICAgIF9hcHBseVN1Z2dlc3Rpb246IGZ1bmN0aW9uKHRleHQs
IGlzSW50ZXJtZWRpYXRlU3VnZ2VzdGlvbikKLSAgICB7Ci0gICAgICAgIGlmICghdGhpcy52aXNp
YmxlIHx8ICEodGV4dCB8fCB0aGlzLl9zZWxlY3RlZEVsZW1lbnQpKQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgICAgIHZhciBzdWdnZXN0aW9uID0gdGV4dCB8fCB0aGlzLl9zZWxl
Y3RlZEVsZW1lbnQudGV4dENvbnRlbnQ7Ci0gICAgICAgIGlmICghc3VnZ2VzdGlvbikKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICB0aGlzLl90ZXh0UHJvbXB0LmFwcGx5U3Vn
Z2VzdGlvbihzdWdnZXN0aW9uLCBpc0ludGVybWVkaWF0ZVN1Z2dlc3Rpb24pOwotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFtIHtzdHJpbmc9fSB0
ZXh0Ci0gICAgICovCi0gICAgYWNjZXB0U3VnZ2VzdGlvbjogZnVuY3Rpb24odGV4dCkKLSAgICB7
Ci0gICAgICAgIHZhciByZXN1bHQgPSB0aGlzLl9hcHBseVN1Z2dlc3Rpb24odGV4dCwgZmFsc2Up
OwotICAgICAgICB0aGlzLmhpZGUoKTsKLSAgICAgICAgaWYgKCFyZXN1bHQpCi0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgdGhpcy5fdGV4dFByb21wdC5hY2NlcHRTdWdnZXN0
aW9uKCk7Ci0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAq
IEBwYXJhbSB7bnVtYmVyfSBzaGlmdAotICAgICAqIEBwYXJhbSB7Ym9vbGVhbj19IGlzQ2lyY3Vs
YXIKLSAgICAgKiBAcmV0dXJuIHtib29sZWFufSBpcyBjaGFuZ2VkCi0gICAgICovCi0gICAgX3Nl
bGVjdENsb3Nlc3Q6IGZ1bmN0aW9uKHNoaWZ0LCBpc0NpcmN1bGFyKQotICAgIHsKLSAgICAgICAg
aWYgKCF0aGlzLl9sZW5ndGgpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAg
dmFyIGluZGV4ID0gdGhpcy5fc2VsZWN0ZWRJbmRleCArIHNoaWZ0OwotCi0gICAgICAgIGlmIChp
c0NpcmN1bGFyKQotICAgICAgICAgICAgaW5kZXggPSAodGhpcy5fbGVuZ3RoICsgaW5kZXgpICUg
dGhpcy5fbGVuZ3RoOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBpbmRleCA9IE51bWJlci5j
b25zdHJhaW4oaW5kZXgsIDAsIHRoaXMuX2xlbmd0aCAtIDEpOwotCi0gICAgICAgIHRoaXMuX3Nl
bGVjdEl0ZW0oaW5kZXgpOwotICAgICAgICB0aGlzLl9hcHBseVN1Z2dlc3Rpb24odW5kZWZpbmVk
LCB0cnVlKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAq
IEBwYXJhbSB7QW5jaG9yQm94fSBhbmNob3JCb3gKLSAgICAgKiBAcGFyYW0ge0FycmF5LjxzdHJp
bmc+PX0gY29tcGxldGlvbnMKLSAgICAgKiBAcGFyYW0ge251bWJlcj19IHNlbGVjdGVkSW5kZXgK
LSAgICAgKiBAcGFyYW0ge2Jvb2xlYW49fSBjYW5TaG93Rm9yU2luZ2xlSXRlbQotICAgICAqLwot
ICAgIHVwZGF0ZVN1Z2dlc3Rpb25zOiBmdW5jdGlvbihhbmNob3JCb3gsIGNvbXBsZXRpb25zLCBz
ZWxlY3RlZEluZGV4LCBjYW5TaG93Rm9yU2luZ2xlSXRlbSkKLSAgICB7Ci0gICAgICAgIGlmICh0
aGlzLl9zdWdnZXN0VGltZW91dCkgewotICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3N1
Z2dlc3RUaW1lb3V0KTsKLSAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9zdWdnZXN0VGltZW91dDsK
LSAgICAgICAgfQotICAgICAgICB0aGlzLl9jb21wbGV0aW9uc1JlYWR5KGFuY2hvckJveCwgY29t
cGxldGlvbnMsIHNlbGVjdGVkSW5kZXgsIGNhblNob3dGb3JTaW5nbGVJdGVtKTsKLSAgICB9LAot
Ci0gICAgX29uSXRlbU1vdXNlRG93bjogZnVuY3Rpb24odGV4dCwgZXZlbnQpCi0gICAgewotICAg
ICAgICB0aGlzLmFjY2VwdFN1Z2dlc3Rpb24odGV4dCk7Ci0gICAgICAgIGV2ZW50LmNvbnN1bWUo
dHJ1ZSk7Ci0gICAgfSwKLQotICAgIF9jcmVhdGVJdGVtRWxlbWVudDogZnVuY3Rpb24ocHJlZml4
LCB0ZXh0KQotICAgIHsKLSAgICAgICAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCJkaXYiKTsKLSAgICAgICAgZWxlbWVudC5jbGFzc05hbWUgPSAic3VnZ2VzdC1ib3gtY29u
dGVudC1pdGVtIHNvdXJjZS1jb2RlIjsKLSAgICAgICAgZWxlbWVudC50YWJJbmRleCA9IC0xOwot
ICAgICAgICBpZiAocHJlZml4ICYmIHByZWZpeC5sZW5ndGggJiYgIXRleHQuaW5kZXhPZihwcmVm
aXgpKSB7Ci0gICAgICAgICAgICB2YXIgcHJlZml4RWxlbWVudCA9IGVsZW1lbnQuY3JlYXRlQ2hp
bGQoInNwYW4iLCAicHJlZml4Iik7Ci0gICAgICAgICAgICBwcmVmaXhFbGVtZW50LnRleHRDb250
ZW50ID0gcHJlZml4OwotICAgICAgICAgICAgdmFyIHN1ZmZpeEVsZW1lbnQgPSBlbGVtZW50LmNy
ZWF0ZUNoaWxkKCJzcGFuIiwgInN1ZmZpeCIpOwotICAgICAgICAgICAgc3VmZml4RWxlbWVudC50
ZXh0Q29udGVudCA9IHRleHQuc3Vic3RyaW5nKHByZWZpeC5sZW5ndGgpOwotICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgdmFyIHN1ZmZpeEVsZW1lbnQgPSBlbGVtZW50LmNyZWF0ZUNoaWxk
KCJzcGFuIiwgInN1ZmZpeCIpOwotICAgICAgICAgICAgc3VmZml4RWxlbWVudC50ZXh0Q29udGVu
dCA9IHRleHQ7Ci0gICAgICAgIH0KLSAgICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJt
b3VzZWRvd24iLCB0aGlzLl9vbkl0ZW1Nb3VzZURvd24uYmluZCh0aGlzLCB0ZXh0KSwgZmFsc2Up
OwotICAgICAgICByZXR1cm4gZWxlbWVudDsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBh
cmFtIHtBcnJheS48c3RyaW5nPj19IGl0ZW1zCi0gICAgICogQHBhcmFtIHtudW1iZXI9fSBzZWxl
Y3RlZEluZGV4Ci0gICAgICovCi0gICAgX3VwZGF0ZUl0ZW1zOiBmdW5jdGlvbihpdGVtcywgc2Vs
ZWN0ZWRJbmRleCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX2xlbmd0aCA9IGl0ZW1zLmxlbmd0aDsK
LSAgICAgICAgdGhpcy5jb250ZW50RWxlbWVudC5yZW1vdmVDaGlsZHJlbigpOwotCi0gICAgICAg
IHZhciB1c2VyRW50ZXJlZFRleHQgPSB0aGlzLl90ZXh0UHJvbXB0Ll91c2VyRW50ZXJlZFRleHQ7
Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyArK2kpIHsKLSAgICAg
ICAgICAgIHZhciBpdGVtID0gaXRlbXNbaV07Ci0gICAgICAgICAgICB2YXIgY3VycmVudEl0ZW1F
bGVtZW50ID0gdGhpcy5fY3JlYXRlSXRlbUVsZW1lbnQodXNlckVudGVyZWRUZXh0LCBpdGVtKTsK
LSAgICAgICAgICAgIHRoaXMuY29udGVudEVsZW1lbnQuYXBwZW5kQ2hpbGQoY3VycmVudEl0ZW1F
bGVtZW50KTsKLSAgICAgICAgfQotCi0gICAgICAgIHRoaXMuX3NlbGVjdGVkRWxlbWVudCA9IG51
bGw7Ci0gICAgICAgIGlmICh0eXBlb2Ygc2VsZWN0ZWRJbmRleCA9PT0gIm51bWJlciIpCi0gICAg
ICAgICAgICB0aGlzLl9zZWxlY3RJdGVtKHNlbGVjdGVkSW5kZXgpOwotICAgIH0sCi0KLSAgICAv
KioKLSAgICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXgKLSAgICAgKi8KLSAgICBfc2VsZWN0SXRl
bTogZnVuY3Rpb24oaW5kZXgpCi0gICAgewotICAgICAgICBpZiAodGhpcy5fc2VsZWN0ZWRFbGVt
ZW50KQotICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWRFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUo
InNlbGVjdGVkIik7Ci0KLSAgICAgICAgdGhpcy5fc2VsZWN0ZWRJbmRleCA9IGluZGV4OwotICAg
ICAgICB0aGlzLl9zZWxlY3RlZEVsZW1lbnQgPSB0aGlzLmNvbnRlbnRFbGVtZW50LmNoaWxkcmVu
W2luZGV4XTsKLSAgICAgICAgdGhpcy5fc2VsZWN0ZWRFbGVtZW50LmNsYXNzTGlzdC5hZGQoInNl
bGVjdGVkIik7Ci0KLSAgICAgICAgdGhpcy5fc2VsZWN0ZWRFbGVtZW50LnNjcm9sbEludG9WaWV3
SWZOZWVkZWQoZmFsc2UpOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge0FycmF5
LjxzdHJpbmc+PX0gY29tcGxldGlvbnMKLSAgICAgKiBAcGFyYW0ge2Jvb2xlYW49fSBjYW5TaG93
Rm9yU2luZ2xlSXRlbQotICAgICAqLwotICAgIF9jYW5TaG93Qm94OiBmdW5jdGlvbihjb21wbGV0
aW9ucywgY2FuU2hvd0ZvclNpbmdsZUl0ZW0pCi0gICAgewotICAgICAgICBpZiAoIWNvbXBsZXRp
b25zIHx8ICFjb21wbGV0aW9ucy5sZW5ndGgpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICAgICAgaWYgKGNvbXBsZXRpb25zLmxlbmd0aCA+IDEpCi0gICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLQotICAgICAgICAvLyBEbyBub3Qgc2hvdyBhIHNpbmdsZSBzdWdnZXN0aW9uIGlmIGl0
IGlzIHRoZSBzYW1lIGFzIHVzZXItZW50ZXJlZCBwcmVmaXgsIGV2ZW4gaWYgYWxsb3dlZCB0byBz
aG93IHNpbmdsZS1pdGVtIHN1Z2dlc3QgYm94ZXMuCi0gICAgICAgIHJldHVybiBjYW5TaG93Rm9y
U2luZ2xlSXRlbSAmJiBjb21wbGV0aW9uc1swXSAhPT0gdGhpcy5fdGV4dFByb21wdC5fdXNlckVu
dGVyZWRUZXh0OwotICAgIH0sCi0KLSAgICBfcmVtZW1iZXJSb3dDb3VudFBlclZpZXdwb3J0OiBm
dW5jdGlvbigpCi0gICAgewotICAgICAgICBpZiAoIXRoaXMuY29udGVudEVsZW1lbnQuZmlyc3RD
aGlsZCkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICB0aGlzLl9yb3dDb3VudFBlclZp
ZXdwb3J0ID0gTWF0aC5mbG9vcih0aGlzLmNvbnRhaW5lckVsZW1lbnQub2Zmc2V0SGVpZ2h0IC8g
dGhpcy5jb250ZW50RWxlbWVudC5maXJzdENoaWxkLm9mZnNldEhlaWdodCk7Ci0gICAgfSwKLQot
ICAgIC8qKgotICAgICAqIEBwYXJhbSB7QW5jaG9yQm94fSBhbmNob3JCb3gKLSAgICAgKiBAcGFy
YW0ge0FycmF5LjxzdHJpbmc+PX0gY29tcGxldGlvbnMKLSAgICAgKiBAcGFyYW0ge251bWJlcj19
IHNlbGVjdGVkSW5kZXgKLSAgICAgKiBAcGFyYW0ge2Jvb2xlYW49fSBjYW5TaG93Rm9yU2luZ2xl
SXRlbQotICAgICAqLwotICAgIF9jb21wbGV0aW9uc1JlYWR5OiBmdW5jdGlvbihhbmNob3JCb3gs
IGNvbXBsZXRpb25zLCBzZWxlY3RlZEluZGV4LCBjYW5TaG93Rm9yU2luZ2xlSXRlbSkKLSAgICB7
Ci0gICAgICAgIGlmICh0aGlzLl9jYW5TaG93Qm94KGNvbXBsZXRpb25zLCBjYW5TaG93Rm9yU2lu
Z2xlSXRlbSkpIHsKLSAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUl0ZW1zKGNvbXBsZXRpb25zLCBz
ZWxlY3RlZEluZGV4KTsKLSAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUJveFBvc2l0aW9uKGFuY2hv
ckJveCk7Ci0gICAgICAgICAgICBpZiAoIXRoaXMudmlzaWJsZSkKLSAgICAgICAgICAgICAgICB0
aGlzLl9ib2R5RWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLl9lbGVtZW50KTsKLSAgICAgICAgICAg
IHRoaXMuX3JlbWVtYmVyUm93Q291bnRQZXJWaWV3cG9ydCgpOwotICAgICAgICB9IGVsc2UKLSAg
ICAgICAgICAgIHRoaXMuaGlkZSgpOwotICAgIH0sCi0KLSAgICB1cEtleVByZXNzZWQ6IGZ1bmN0
aW9uKGV2ZW50KQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdENsb3Nlc3QoLTEs
IHRydWUpOwotICAgIH0sCi0KLSAgICBkb3duS2V5UHJlc3NlZDogZnVuY3Rpb24oZXZlbnQpCi0g
ICAgewotICAgICAgICByZXR1cm4gdGhpcy5fc2VsZWN0Q2xvc2VzdCgxLCB0cnVlKTsKLSAgICB9
LAotCi0gICAgcGFnZVVwS2V5UHJlc3NlZDogZnVuY3Rpb24oZXZlbnQpCi0gICAgewotICAgICAg
ICByZXR1cm4gdGhpcy5fc2VsZWN0Q2xvc2VzdCgtdGhpcy5fcm93Q291bnRQZXJWaWV3cG9ydCwg
ZmFsc2UpOwotICAgIH0sCi0KLSAgICBwYWdlRG93bktleVByZXNzZWQ6IGZ1bmN0aW9uKGV2ZW50
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdENsb3Nlc3QodGhpcy5fcm93Q291
bnRQZXJWaWV3cG9ydCwgZmFsc2UpOwotICAgIH0sCi0KLSAgICBlbnRlcktleVByZXNzZWQ6IGZ1
bmN0aW9uKGV2ZW50KQotICAgIHsKLSAgICAgICAgdmFyIGhhc1NlbGVjdGVkSXRlbSA9ICEhdGhp
cy5fc2VsZWN0ZWRFbGVtZW50OwotICAgICAgICB0aGlzLmFjY2VwdFN1Z2dlc3Rpb24oKTsKLQot
ICAgICAgICAvLyBSZXBvcnQgdGhlIGV2ZW50IGFzIG5vbi1oYW5kbGVkIGlmIHRoZXJlIGlzIG5v
IHNlbGVjdGVkIGl0ZW0sCi0gICAgICAgIC8vIHRvIGNvbW1pdCB0aGUgaW5wdXQgb3IgaGFuZGxl
IGl0IG90aGVyd2lzZS4KLSAgICAgICAgcmV0dXJuIGhhc1NlbGVjdGVkSXRlbTsKLSAgICB9LAot
Ci0gICAgdGFiS2V5UHJlc3NlZDogZnVuY3Rpb24oZXZlbnQpCi0gICAgewotICAgICAgICByZXR1
cm4gdGhpcy5lbnRlcktleVByZXNzZWQoZXZlbnQpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvV2ViS2l0LnFyYyBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvV2ViS2l0LnFyYwppbmRleCBmZjM1OTFkYWY0YjA0NDFh
MmU2NTU5ZTVmYTM2NjE1NDljNDlkY2IxLi5jMDMwNTY4ZDAxYTM5MmI4YjJiMGQyZjhhY2NjNTk4
MzkyZmI3OGIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L1dlYktpdC5xcmMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9XZWJL
aXQucXJjCkBAIC0xOTcsNiArMTk3LDcgQEAKICAgICA8ZmlsZT5TdHlsZVNoZWV0T3V0bGluZURp
YWxvZy5qczwvZmlsZT4KICAgICA8ZmlsZT5TdHlsZXNTb3VyY2VNYXBwaW5nLmpzPC9maWxlPgog
ICAgIDxmaWxlPlN0eWxlc1NpZGViYXJQYW5lLmpzPC9maWxlPgorICAgIDxmaWxlPlN1Z2dlc3RC
b3guanM8L2ZpbGU+CiAgICAgPGZpbGU+VGFiYmVkRWRpdG9yQ29udGFpbmVyLmpzPC9maWxlPgog
ICAgIDxmaWxlPlRhYmJlZFBhbmUuanM8L2ZpbGU+CiAgICAgPGZpbGU+VGVzdENvbnRyb2xsZXIu
anM8L2ZpbGU+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L2luc3BlY3Rvci5odG1sIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNw
ZWN0b3IuaHRtbAppbmRleCAzNTY5MGY1NGYyMzA0MTEyNzdlZTZlNDcwZjE1N2E1OWIwMjY0NDU3
Li5jNDY0OTU2MmU5ZmMzMjE1MzVhNjRiZmRmZTQxMWExNzg3Y2M3NGU2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5odG1sCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmh0bWwKQEAgLTU2LDYg
KzU2LDcgQEAgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3Jj
PSJDb250ZXh0TWVudS5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFz
Y3JpcHQiIHNyYz0iU29mdENvbnRleHRNZW51LmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHR5
cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJLZXlib2FyZFNob3J0Y3V0LmpzIj48L3NjcmlwdD4K
KyAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJTdWdnZXN0Qm94LmpzIj48
L3NjcmlwdD4KICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJUZXh0UHJv
bXB0LmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3Jj
PSJQb3BvdmVyLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlw
dCIgc3JjPSJQbGFjYXJkLmpzIj48L3NjcmlwdD4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>187841</attachid>
            <date>2013-02-12 05:28:18 -0800</date>
            <delta_ts>2013-02-12 06:05:47 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-109430-20130212172447.patch</filename>
            <type>text/plain</type>
            <size>35426</size>
            <attacher name="Andrey Lushnikov">lushnikov</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQyNTk4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGQ0ZjFkYzE3YTk5OGJj
NTU0OTRkMmE5YjkzYmM3OWJjMzM5N2UxNy4uMWM2ZmE2YjZjNjE1NzlmZWI5YzE1YTg2MjIyY2Zi
NDNjMjZhMDZiMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY0IEBACisyMDEzLTAyLTEyICBBbmRy
ZXkgTHVzaG5pa292ICA8bHVzaG5pa292QGNocm9taXVtLm9yZz4KKworICAgICAgICBXZWIgSW5z
cGVjdG9yOiBzZXBhcmF0ZSBTdWdnZXN0Qm94IGZyb20gVGV4dFByb21wdAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA5NDMwCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ3JlYXRlIFdlYkluc3BlY3Rvci5T
dWdnZXN0Qm94RGVsZWdhdGUgaW50ZXJmYWNlIGFuZAorICAgICAgICByZWZhY3RvciBUZXh0UHJv
bXB0IHRvIHVzZSB0aGlzIGludGVyZmFjZS4gU2VwYXJhdGUgU3VnZ2VzdEJveCBpbnRvCisgICAg
ICAgIFdlYkluc3BlY3Rvci5TdWdnZXN0Qm94IG5hbWVzcGFjZSBhbmQgcHV0IGl0IGludG8gaXRz
IG93biBmaWxlLgorCisgICAgICAgIE5vIG5ldyB0ZXN0czogbm8gY2hhbmdlIGluIGJlaGF2aW91
ci4KKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9X
ZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBpbnNwZWN0b3IvY29tcGlsZS1mcm9udC1lbmQucHk6
CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9TdWdnZXN0Qm94LmpzOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5TdWdnZXN0Qm94RGVsZWdhdGUpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLlN1Z2dlc3RCb3hEZWxlZ2F0ZS5wcm90b3R5cGUuYXBwbHlTdWdnZXN0aW9uKToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5TdWdnZXN0Qm94RGVsZWdhdGUucHJvdG90eXBlLmFjY2VwdFN1
Z2dlc3Rpb24pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlN1Z2dlc3RCb3hEZWxlZ2F0ZS5wcm90
b3R5cGUudXNlckVudGVyZWRUZXh0KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TdWdnZXN0Qm94
KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TdWdnZXN0Qm94LnByb3RvdHlwZS5nZXQgdmlzaWJs
ZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU3VnZ2VzdEJveC5wcm90b3R5cGUuZ2V0IGhhc1Nl
bGVjdGlvbik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU3VnZ2VzdEJveC5wcm90b3R5cGUuX29u
c2Nyb2xscmVzaXplKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TdWdnZXN0Qm94LnByb3RvdHlw
ZS5fdXBkYXRlQm94UG9zaXRpb25XaXRoRXhpc3RpbmdBbmNob3IpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLlN1Z2dlc3RCb3gucHJvdG90eXBlLl91cGRhdGVCb3hQb3NpdGlvbik6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuU3VnZ2VzdEJveC5wcm90b3R5cGUuX29uYm94bW91c2Vkb3duKToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5TdWdnZXN0Qm94LnByb3RvdHlwZS5oaWRlKToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5TdWdnZXN0Qm94LnByb3RvdHlwZS5yZW1vdmVGcm9tRWxlbWVudCk6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IuU3VnZ2VzdEJveC5wcm90b3R5cGUuX2FwcGx5U3VnZ2VzdGlv
bik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU3VnZ2VzdEJveC5wcm90b3R5cGUuYWNjZXB0U3Vn
Z2VzdGlvbik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU3VnZ2VzdEJveC5wcm90b3R5cGUuX3Nl
bGVjdENsb3Nlc3QpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlN1Z2dlc3RCb3gucHJvdG90eXBl
LnVwZGF0ZVN1Z2dlc3Rpb25zKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TdWdnZXN0Qm94LnBy
b3RvdHlwZS5fb25JdGVtTW91c2VEb3duKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TdWdnZXN0
Qm94LnByb3RvdHlwZS5fY3JlYXRlSXRlbUVsZW1lbnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LlN1Z2dlc3RCb3gucHJvdG90eXBlLl91cGRhdGVJdGVtcyk6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuU3VnZ2VzdEJveC5wcm90b3R5cGUuX3NlbGVjdEl0ZW0pOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLlN1Z2dlc3RCb3gucHJvdG90eXBlLl9jYW5TaG93Qm94KToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5TdWdnZXN0Qm94LnByb3RvdHlwZS5fcmVtZW1iZXJSb3dDb3VudFBlclZpZXdwb3J0KToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5TdWdnZXN0Qm94LnByb3RvdHlwZS5fY29tcGxldGlvbnNS
ZWFkeSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU3VnZ2VzdEJveC5wcm90b3R5cGUudXBLZXlQ
cmVzc2VkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TdWdnZXN0Qm94LnByb3RvdHlwZS5kb3du
S2V5UHJlc3NlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU3VnZ2VzdEJveC5wcm90b3R5cGUu
cGFnZVVwS2V5UHJlc3NlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU3VnZ2VzdEJveC5wcm90
b3R5cGUucGFnZURvd25LZXlQcmVzc2VkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TdWdnZXN0
Qm94LnByb3RvdHlwZS5lbnRlcktleVByZXNzZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlN1
Z2dlc3RCb3gucHJvdG90eXBlLnRhYktleVByZXNzZWQpOgorICAgICAgICAqIGluc3BlY3Rvci9m
cm9udC1lbmQvVGV4dFByb21wdC5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0UHJvbXB0
LnByb3RvdHlwZS51c2VyRW50ZXJlZFRleHQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRQ
cm9tcHQucHJvdG90eXBlLl9hdHRhY2hJbnRlcm5hbCk6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
VGV4dFByb21wdC5wcm90b3R5cGUuX2NvbXBsZXRpb25zUmVhZHkpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLlRleHRQcm9tcHQucHJvdG90eXBlLmFwcGx5U3VnZ2VzdGlvbik6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuVGV4dFByb21wdC5wcm90b3R5cGUuX2FwcGx5U3VnZ2VzdGlvbik6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuVGV4dFByb21wdC5wcm90b3R5cGUuZW50ZXJLZXlQcmVzc2VkKToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0UHJvbXB0LnByb3RvdHlwZS51cEtleVByZXNzZWQp
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRQcm9tcHQucHJvdG90eXBlLmRvd25LZXlQcmVz
c2VkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0UHJvbXB0LnByb3RvdHlwZS5wYWdlVXBL
ZXlQcmVzc2VkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0UHJvbXB0LnByb3RvdHlwZS5w
YWdlRG93bktleVByZXNzZWQpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvV2ViS2l0
LnFyYzoKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5odG1sOgorCiAy
MDEzLTAyLTEyICBab2x0YW4gQXJ2YWkgIDx6YXJ2YWlAaW5mLnUtc3plZ2VkLmh1PgogCiAgICAg
ICAgIFVucmV2aWV3ZWQuIEZpeCAhRU5BQkxFKElOU1BFQ1RPUikgYnVpbGRzIGFmdGVyIHIxNDI1
NzUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUuZ3lwaQppbmRleCAxNzVlZDY2YmM0NTE4MGEzZmVjN2RmNzQzNTBkZjFmMzQz
YjczMTYxLi4yNGZjZTFhYmJjNmM5MTJjODY3NjhiODIwYjBiZjA4MzgzZTk4MzI3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5neXBpCkBAIC01Mjc3LDYgKzUyNzcsNyBAQAogICAgICAgICAgICAgJ2luc3BlY3Rvci9m
cm9udC1lbmQvU3BsaXRWaWV3LmpzJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5k
L1N0YXR1c0JhckJ1dHRvbi5qcycsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9T
dHlsZXNTb3VyY2VNYXBwaW5nLmpzJywKKyAgICAgICAgICAgICdpbnNwZWN0b3IvZnJvbnQtZW5k
L1N1Z2dlc3RCb3guanMnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9mcm9udC1lbmQvVGFiYmVk
UGFuZS5qcycsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9UZXN0Q29udHJvbGxl
ci5qcycsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL2Zyb250LWVuZC9UZXh0RWRpdG9yLmpzJywK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9q
IGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKaW5kZXggOTZj
ZWQ3ZGM5ZTJkOWU2ZmMzMDYxOGZlYjczMmU4NTk2YjRkNjU3Ni4uMWVhYzk5MzA0ZTM2NGNhNzhh
ZDVmODRiMjYxYmQyZTJlNTE0M2VjZCAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3By
b2ovV2ViQ29yZS52Y3Byb2oKQEAgLTc3NzcwLDYgKzc3NzcwLDEwIEBACiAJCQkJCT4KIAkJCQk8
L0ZpbGU+CiAJCQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcZnJvbnQt
ZW5kXFN1Z2dlc3RCb3guanMiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKIAkJCQkJ
UmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcZnJvbnQtZW5kXFRleHRQcm9tcHQuanMiCiAJCQkJ
CT4KIAkJCQk8L0ZpbGU+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvY29t
cGlsZS1mcm9udC1lbmQucHkgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvY29tcGlsZS1mcm9u
dC1lbmQucHkKaW5kZXggZjllMWUzMWVkZTMzZjMzNjc4OTZiZDliZWU3ODgwMzM5Mzk3MDJkYy4u
MGQxNzFhZDEyMWE4ZGFjODQ5MTc1M2RjMmQ2ZDgzM2E4NzAyNDBjZiAxMDA3NTUKLS0tIGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2NvbXBpbGUtZnJvbnQtZW5kLnB5CisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9jb21waWxlLWZyb250LWVuZC5weQpAQCAtMTUxLDYgKzE1MSw3IEBA
IG1vZHVsZXMgPSBbCiAgICAgICAgICAgICAiU3BsaXRWaWV3LmpzIiwKICAgICAgICAgICAgICJT
aWRlYmFyVmlldy5qcyIsCiAgICAgICAgICAgICAiU3RhdHVzQmFyQnV0dG9uLmpzIiwKKyAgICAg
ICAgICAgICJTdWdnZXN0Qm94LmpzIiwKICAgICAgICAgICAgICJUYWJiZWRQYW5lLmpzIiwKICAg
ICAgICAgICAgICJUZXh0RWRpdG9yLmpzIiwKICAgICAgICAgICAgICJUZXh0RWRpdG9ySGlnaGxp
Z2h0ZXIuanMiLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9TdWdnZXN0Qm94LmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TdWdn
ZXN0Qm94LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ2ODk5NjVkNjE3NmFlYzUzOTg3ZDMzMjBmN2JiMjAzYTll
OTk3ZjcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL1N1Z2dlc3RCb3guanMKQEAgLTAsMCArMSw0MDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICog
ICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBpbnRlcmZhY2UKKyAq
LworV2ViSW5zcGVjdG9yLlN1Z2dlc3RCb3hEZWxlZ2F0ZSA9IGZ1bmN0aW9uKCkKK3sKK30KKwor
V2ViSW5zcGVjdG9yLlN1Z2dlc3RCb3hEZWxlZ2F0ZS5wcm90b3R5cGUgPSB7CisgICAgLyoqCisg
ICAgICogQHBhcmFtIHtzdHJpbmd9IHN1Z2dlc3Rpb24KKyAgICAgKiBAcGFyYW0ge2Jvb2xlYW49
fSBpc0ludGVybWVkaWF0ZVN1Z2dlc3Rpb24KKyAgICAgKi8KKyAgICBhcHBseVN1Z2dlc3Rpb246
IGZ1bmN0aW9uKHN1Z2dlc3Rpb24sIGlzSW50ZXJtZWRpYXRlU3VnZ2VzdGlvbikgeyB9LAorCisg
ICAgLyoqCisgICAgICogYWNjZXB0U3VnZ2VzdGlvbiB3aWxsIGJlIGFsd2F5cyBjYWxsZWQgYWZ0
ZXIgY2FsbCB0byBhcHBseVN1Z2dlc3Rpb24gd2l0aCBpc0ludGVybWVkaWF0ZVN1Z2dlc3Rpb24g
YmVpbmcgZXF1YWwgdG8gZmFsc2UuCisgICAgICovCisgICAgYWNjZXB0U3VnZ2VzdGlvbjogZnVu
Y3Rpb24oKSB7IH0sCisKKyAgICAvKioKKyAgICAgKiBAcmV0dXJuIHtzdHJpbmd9CisgICAgICov
CisgICAgdXNlckVudGVyZWRUZXh0OiBmdW5jdGlvbigpIHsgfQorfQorCisvKioKKyAqIEBjb25z
dHJ1Y3RvcgorICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuU3VnZ2VzdEJveERlbGVnYXRlfSBzdWdn
ZXN0Qm94RGVsZWdhdGUKKyAqIEBwYXJhbSB7RWxlbWVudH0gaW5wdXRFbGVtZW50CisgKiBAcGFy
YW0ge3N0cmluZ30gY2xhc3NOYW1lCisgKi8KK1dlYkluc3BlY3Rvci5TdWdnZXN0Qm94ID0gZnVu
Y3Rpb24oc3VnZ2VzdEJveERlbGVnYXRlLCBpbnB1dEVsZW1lbnQsIGNsYXNzTmFtZSkKK3sKKyAg
ICB0aGlzLl9zdWdnZXN0Qm94RGVsZWdhdGUgPSBzdWdnZXN0Qm94RGVsZWdhdGU7CisgICAgdGhp
cy5faW5wdXRFbGVtZW50ID0gaW5wdXRFbGVtZW50OworICAgIHRoaXMuX2xlbmd0aCA9IDA7Cisg
ICAgdGhpcy5fc2VsZWN0ZWRJbmRleCA9IC0xOworICAgIHRoaXMuX3NlbGVjdGVkRWxlbWVudCA9
IG51bGw7CisgICAgdGhpcy5fYm91bmRPblNjcm9sbCA9IHRoaXMuX29uc2Nyb2xscmVzaXplLmJp
bmQodGhpcywgdHJ1ZSk7CisgICAgdGhpcy5fYm91bmRPblJlc2l6ZSA9IHRoaXMuX29uc2Nyb2xs
cmVzaXplLmJpbmQodGhpcywgZmFsc2UpOworICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJz
Y3JvbGwiLCB0aGlzLl9ib3VuZE9uU2Nyb2xsLCB0cnVlKTsKKyAgICB3aW5kb3cuYWRkRXZlbnRM
aXN0ZW5lcigicmVzaXplIiwgdGhpcy5fYm91bmRPblJlc2l6ZSwgdHJ1ZSk7CisKKyAgICB0aGlz
Ll9ib2R5RWxlbWVudCA9IGlucHV0RWxlbWVudC5vd25lckRvY3VtZW50LmJvZHk7CisgICAgdGhp
cy5fZWxlbWVudCA9IGlucHV0RWxlbWVudC5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRp
diIpOworICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NOYW1lID0gInN1Z2dlc3QtYm94ICIgKyAoY2xh
c3NOYW1lIHx8ICIiKTsKKyAgICB0aGlzLl9lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNl
ZG93biIsIHRoaXMuX29uYm94bW91c2Vkb3duLmJpbmQodGhpcyksIHRydWUpOworICAgIHRoaXMu
Y29udGFpbmVyRWxlbWVudCA9IHRoaXMuX2VsZW1lbnQuY3JlYXRlQ2hpbGQoImRpdiIsICJjb250
YWluZXIiKTsKKyAgICB0aGlzLmNvbnRlbnRFbGVtZW50ID0gdGhpcy5jb250YWluZXJFbGVtZW50
LmNyZWF0ZUNoaWxkKCJkaXYiLCAiY29udGVudCIpOworfQorCitXZWJJbnNwZWN0b3IuU3VnZ2Vz
dEJveC5wcm90b3R5cGUgPSB7CisgICAgZ2V0IHZpc2libGUoKQorICAgIHsKKyAgICAgICAgcmV0
dXJuICEhdGhpcy5fZWxlbWVudC5wYXJlbnRFbGVtZW50OworICAgIH0sCisKKyAgICBnZXQgaGFz
U2VsZWN0aW9uKCkKKyAgICB7CisgICAgICAgIHJldHVybiAhIXRoaXMuX3NlbGVjdGVkRWxlbWVu
dDsKKyAgICB9LAorCisgICAgX29uc2Nyb2xscmVzaXplOiBmdW5jdGlvbihpc1Njcm9sbCwgZXZl
bnQpCisgICAgeworICAgICAgICBpZiAoaXNTY3JvbGwgJiYgdGhpcy5fZWxlbWVudC5pc0FuY2Vz
dG9yKGV2ZW50LnRhcmdldCkgfHwgIXRoaXMudmlzaWJsZSkKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgdGhpcy5fdXBkYXRlQm94UG9zaXRpb25XaXRoRXhpc3RpbmdBbmNob3IoKTsKKyAg
ICB9LAorCisgICAgX3VwZGF0ZUJveFBvc2l0aW9uV2l0aEV4aXN0aW5nQW5jaG9yOiBmdW5jdGlv
bigpCisgICAgeworICAgICAgICB0aGlzLl91cGRhdGVCb3hQb3NpdGlvbih0aGlzLl9hbmNob3JC
b3gpOworICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBAcGFyYW0ge0FuY2hvckJveH0gYW5jaG9y
Qm94CisgICAgICovCisgICAgX3VwZGF0ZUJveFBvc2l0aW9uOiBmdW5jdGlvbihhbmNob3JCb3gp
CisgICAgeworICAgICAgICAvLyBNZWFzdXJlIHRoZSBjb250ZW50IGVsZW1lbnQgYm94LgorICAg
ICAgICB0aGlzLmNvbnRlbnRFbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAiaW5saW5lLWJsb2NrIjsK
KyAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aGlzLmNvbnRlbnRFbGVtZW50KTsK
KyAgICAgICAgdGhpcy5jb250ZW50RWxlbWVudC5wb3NpdGlvbkF0KDAsIDApOworICAgICAgICB2
YXIgY29udGVudFdpZHRoID0gdGhpcy5jb250ZW50RWxlbWVudC5vZmZzZXRXaWR0aDsKKyAgICAg
ICAgdmFyIGNvbnRlbnRIZWlnaHQgPSB0aGlzLmNvbnRlbnRFbGVtZW50Lm9mZnNldEhlaWdodDsK
KyAgICAgICAgdGhpcy5jb250ZW50RWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gImJsb2NrIjsKKyAg
ICAgICAgdGhpcy5jb250YWluZXJFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuY29udGVudEVsZW1l
bnQpOworCisgICAgICAgIC8vIExheSBvdXQgdGhlIHN1Z2dlc3QtYm94IHJlbGF0aXZlIHRvIHRo
ZSBhbmNob3JCb3guCisgICAgICAgIHRoaXMuX2FuY2hvckJveCA9IGFuY2hvckJveDsKKyAgICAg
ICAgY29uc3Qgc3BhY2VyID0gNjsKKworICAgICAgICBjb25zdCBzdWdnZXN0Qm94UGFkZGluZ1gg
PSAyMTsKKyAgICAgICAgdmFyIG1heFdpZHRoID0gZG9jdW1lbnQuYm9keS5vZmZzZXRXaWR0aCAt
IGFuY2hvckJveC54IC0gc3BhY2VyOworICAgICAgICB2YXIgd2lkdGggPSBNYXRoLm1pbihjb250
ZW50V2lkdGgsIG1heFdpZHRoIC0gc3VnZ2VzdEJveFBhZGRpbmdYKSArIHN1Z2dlc3RCb3hQYWRk
aW5nWDsKKyAgICAgICAgdmFyIHBhZGRlZFdpZHRoID0gY29udGVudFdpZHRoICsgc3VnZ2VzdEJv
eFBhZGRpbmdYOworICAgICAgICB2YXIgYm94WCA9IGFuY2hvckJveC54OworICAgICAgICBpZiAo
d2lkdGggPCBwYWRkZWRXaWR0aCkgeworICAgICAgICAgICAgLy8gU2hpZnQgdGhlIHN1Z2dlc3Qg
Ym94IHRvIHRoZSBsZWZ0IHRvIGFjY29tbW9kYXRlIHRoZSBjb250ZW50IHdpdGhvdXQgdHJpbW1p
bmcgdG8gdGhlIEJPRFkgZWRnZS4KKyAgICAgICAgICAgIG1heFdpZHRoID0gZG9jdW1lbnQuYm9k
eS5vZmZzZXRXaWR0aCAtIHNwYWNlcjsKKyAgICAgICAgICAgIHdpZHRoID0gTWF0aC5taW4oY29u
dGVudFdpZHRoLCBtYXhXaWR0aCAtIHN1Z2dlc3RCb3hQYWRkaW5nWCkgKyBzdWdnZXN0Qm94UGFk
ZGluZ1g7CisgICAgICAgICAgICBib3hYID0gZG9jdW1lbnQuYm9keS5vZmZzZXRXaWR0aCAtIHdp
ZHRoOworICAgICAgICB9CisKKyAgICAgICAgY29uc3Qgc3VnZ2VzdEJveFBhZGRpbmdZID0gMjsK
KyAgICAgICAgdmFyIGJveFk7CisgICAgICAgIHZhciBhYm92ZUhlaWdodCA9IGFuY2hvckJveC55
OworICAgICAgICB2YXIgdW5kZXJIZWlnaHQgPSBkb2N1bWVudC5ib2R5Lm9mZnNldEhlaWdodCAt
IGFuY2hvckJveC55IC0gYW5jaG9yQm94LmhlaWdodDsKKyAgICAgICAgdmFyIG1heEhlaWdodCA9
IE1hdGgubWF4KHVuZGVySGVpZ2h0LCBhYm92ZUhlaWdodCkgLSBzcGFjZXI7CisgICAgICAgIHZh
ciBoZWlnaHQgPSBNYXRoLm1pbihjb250ZW50SGVpZ2h0LCBtYXhIZWlnaHQgLSBzdWdnZXN0Qm94
UGFkZGluZ1kpICsgc3VnZ2VzdEJveFBhZGRpbmdZOworICAgICAgICBpZiAodW5kZXJIZWlnaHQg
Pj0gYWJvdmVIZWlnaHQpIHsKKyAgICAgICAgICAgIC8vIExvY2F0ZSB0aGUgc3VnZ2VzdCBib3gg
dW5kZXIgdGhlIGFuY2hvckJveC4KKyAgICAgICAgICAgIGJveFkgPSBhbmNob3JCb3gueSArIGFu
Y2hvckJveC5oZWlnaHQ7CisgICAgICAgICAgICB0aGlzLl9lbGVtZW50LnJlbW92ZVN0eWxlQ2xh
c3MoImFib3ZlLWFuY2hvciIpOworICAgICAgICAgICAgdGhpcy5fZWxlbWVudC5hZGRTdHlsZUNs
YXNzKCJ1bmRlci1hbmNob3IiKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIExv
Y2F0ZSB0aGUgc3VnZ2VzdCBib3ggYWJvdmUgdGhlIGFuY2hvckJveC4KKyAgICAgICAgICAgIGJv
eFkgPSBhbmNob3JCb3gueSAtIGhlaWdodDsKKyAgICAgICAgICAgIHRoaXMuX2VsZW1lbnQucmVt
b3ZlU3R5bGVDbGFzcygidW5kZXItYW5jaG9yIik7CisgICAgICAgICAgICB0aGlzLl9lbGVtZW50
LmFkZFN0eWxlQ2xhc3MoImFib3ZlLWFuY2hvciIpOworICAgICAgICB9CisKKyAgICAgICAgdGhp
cy5fZWxlbWVudC5wb3NpdGlvbkF0KGJveFgsIGJveFkpOworICAgICAgICB0aGlzLl9lbGVtZW50
LnN0eWxlLndpZHRoID0gd2lkdGggKyAicHgiOworICAgICAgICB0aGlzLl9lbGVtZW50LnN0eWxl
LmhlaWdodCA9IGhlaWdodCArICJweCI7CisgICAgfSwKKworICAgIF9vbmJveG1vdXNlZG93bjog
ZnVuY3Rpb24oZXZlbnQpCisgICAgeworICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwor
ICAgIH0sCisKKyAgICBoaWRlOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICBpZiAoIXRoaXMu
dmlzaWJsZSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICB0aGlzLl9lbGVtZW50LnBh
cmVudEVsZW1lbnQucmVtb3ZlQ2hpbGQodGhpcy5fZWxlbWVudCk7CisgICAgICAgIGRlbGV0ZSB0
aGlzLl9zZWxlY3RlZEVsZW1lbnQ7CisgICAgfSwKKworICAgIHJlbW92ZUZyb21FbGVtZW50OiBm
dW5jdGlvbigpCisgICAgeworICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigic2Ny
b2xsIiwgdGhpcy5fYm91bmRPblNjcm9sbCwgdHJ1ZSk7CisgICAgICAgIHdpbmRvdy5yZW1vdmVF
dmVudExpc3RlbmVyKCJyZXNpemUiLCB0aGlzLl9ib3VuZE9uUmVzaXplLCB0cnVlKTsKKyAgICAg
ICAgdGhpcy5oaWRlKCk7CisgICAgfSwKKworICAgIC8qKgorICAgICAqIEBwYXJhbSB7c3RyaW5n
PX0gdGV4dAorICAgICAqIEBwYXJhbSB7Ym9vbGVhbj19IGlzSW50ZXJtZWRpYXRlU3VnZ2VzdGlv
bgorICAgICAqLworICAgIF9hcHBseVN1Z2dlc3Rpb246IGZ1bmN0aW9uKHRleHQsIGlzSW50ZXJt
ZWRpYXRlU3VnZ2VzdGlvbikKKyAgICB7CisgICAgICAgIGlmICghdGhpcy52aXNpYmxlIHx8ICEo
dGV4dCB8fCB0aGlzLl9zZWxlY3RlZEVsZW1lbnQpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgICAgIHZhciBzdWdnZXN0aW9uID0gdGV4dCB8fCB0aGlzLl9zZWxlY3RlZEVsZW1l
bnQudGV4dENvbnRlbnQ7CisgICAgICAgIGlmICghc3VnZ2VzdGlvbikKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgICAgICB0aGlzLl9zdWdnZXN0Qm94RGVsZWdhdGUuYXBwbHlTdWdn
ZXN0aW9uKHN1Z2dlc3Rpb24sIGlzSW50ZXJtZWRpYXRlU3VnZ2VzdGlvbik7CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBAcGFyYW0ge3N0cmluZz19IHRl
eHQKKyAgICAgKi8KKyAgICBhY2NlcHRTdWdnZXN0aW9uOiBmdW5jdGlvbih0ZXh0KQorICAgIHsK
KyAgICAgICAgdmFyIHJlc3VsdCA9IHRoaXMuX2FwcGx5U3VnZ2VzdGlvbih0ZXh0LCBmYWxzZSk7
CisgICAgICAgIHRoaXMuaGlkZSgpOworICAgICAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgICAgICB0aGlzLl9zdWdnZXN0Qm94RGVsZWdhdGUuYWNjZXB0
U3VnZ2VzdGlvbigpOworCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0sCisKKyAgICAvKioK
KyAgICAgKiBAcGFyYW0ge251bWJlcn0gc2hpZnQKKyAgICAgKiBAcGFyYW0ge2Jvb2xlYW49fSBp
c0NpcmN1bGFyCisgICAgICogQHJldHVybiB7Ym9vbGVhbn0gaXMgY2hhbmdlZAorICAgICAqLwor
ICAgIF9zZWxlY3RDbG9zZXN0OiBmdW5jdGlvbihzaGlmdCwgaXNDaXJjdWxhcikKKyAgICB7Cisg
ICAgICAgIGlmICghdGhpcy5fbGVuZ3RoKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgICAgIHZhciBpbmRleCA9IHRoaXMuX3NlbGVjdGVkSW5kZXggKyBzaGlmdDsKKworICAgICAg
ICBpZiAoaXNDaXJjdWxhcikKKyAgICAgICAgICAgIGluZGV4ID0gKHRoaXMuX2xlbmd0aCArIGlu
ZGV4KSAlIHRoaXMuX2xlbmd0aDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaW5kZXggPSBO
dW1iZXIuY29uc3RyYWluKGluZGV4LCAwLCB0aGlzLl9sZW5ndGggLSAxKTsKKworICAgICAgICB0
aGlzLl9zZWxlY3RJdGVtKGluZGV4KTsKKyAgICAgICAgdGhpcy5fYXBwbHlTdWdnZXN0aW9uKHVu
ZGVmaW5lZCwgdHJ1ZSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0sCisKKyAgICAvKioK
KyAgICAgKiBAcGFyYW0ge0FuY2hvckJveH0gYW5jaG9yQm94CisgICAgICogQHBhcmFtIHtBcnJh
eS48c3RyaW5nPj19IGNvbXBsZXRpb25zCisgICAgICogQHBhcmFtIHtudW1iZXI9fSBzZWxlY3Rl
ZEluZGV4CisgICAgICogQHBhcmFtIHtib29sZWFuPX0gY2FuU2hvd0ZvclNpbmdsZUl0ZW0KKyAg
ICAgKi8KKyAgICB1cGRhdGVTdWdnZXN0aW9uczogZnVuY3Rpb24oYW5jaG9yQm94LCBjb21wbGV0
aW9ucywgc2VsZWN0ZWRJbmRleCwgY2FuU2hvd0ZvclNpbmdsZUl0ZW0pCisgICAgeworICAgICAg
ICBpZiAodGhpcy5fc3VnZ2VzdFRpbWVvdXQpIHsKKyAgICAgICAgICAgIGNsZWFyVGltZW91dCh0
aGlzLl9zdWdnZXN0VGltZW91dCk7CisgICAgICAgICAgICBkZWxldGUgdGhpcy5fc3VnZ2VzdFRp
bWVvdXQ7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fY29tcGxldGlvbnNSZWFkeShhbmNob3JC
b3gsIGNvbXBsZXRpb25zLCBzZWxlY3RlZEluZGV4LCBjYW5TaG93Rm9yU2luZ2xlSXRlbSk7Cisg
ICAgfSwKKworICAgIF9vbkl0ZW1Nb3VzZURvd246IGZ1bmN0aW9uKHRleHQsIGV2ZW50KQorICAg
IHsKKyAgICAgICAgdGhpcy5hY2NlcHRTdWdnZXN0aW9uKHRleHQpOworICAgICAgICBldmVudC5j
b25zdW1lKHRydWUpOworICAgIH0sCisKKyAgICBfY3JlYXRlSXRlbUVsZW1lbnQ6IGZ1bmN0aW9u
KHByZWZpeCwgdGV4dCkKKyAgICB7CisgICAgICAgIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgiZGl2Iik7CisgICAgICAgIGVsZW1lbnQuY2xhc3NOYW1lID0gInN1Z2dlc3Qt
Ym94LWNvbnRlbnQtaXRlbSBzb3VyY2UtY29kZSI7CisgICAgICAgIGVsZW1lbnQudGFiSW5kZXgg
PSAtMTsKKyAgICAgICAgaWYgKHByZWZpeCAmJiBwcmVmaXgubGVuZ3RoICYmICF0ZXh0LmluZGV4
T2YocHJlZml4KSkgeworICAgICAgICAgICAgdmFyIHByZWZpeEVsZW1lbnQgPSBlbGVtZW50LmNy
ZWF0ZUNoaWxkKCJzcGFuIiwgInByZWZpeCIpOworICAgICAgICAgICAgcHJlZml4RWxlbWVudC50
ZXh0Q29udGVudCA9IHByZWZpeDsKKyAgICAgICAgICAgIHZhciBzdWZmaXhFbGVtZW50ID0gZWxl
bWVudC5jcmVhdGVDaGlsZCgic3BhbiIsICJzdWZmaXgiKTsKKyAgICAgICAgICAgIHN1ZmZpeEVs
ZW1lbnQudGV4dENvbnRlbnQgPSB0ZXh0LnN1YnN0cmluZyhwcmVmaXgubGVuZ3RoKTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHZhciBzdWZmaXhFbGVtZW50ID0gZWxlbWVudC5jcmVh
dGVDaGlsZCgic3BhbiIsICJzdWZmaXgiKTsKKyAgICAgICAgICAgIHN1ZmZpeEVsZW1lbnQudGV4
dENvbnRlbnQgPSB0ZXh0OworICAgICAgICB9CisgICAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0
ZW5lcigibW91c2Vkb3duIiwgdGhpcy5fb25JdGVtTW91c2VEb3duLmJpbmQodGhpcywgdGV4dCks
IGZhbHNlKTsKKyAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CisgICAgfSwKKworICAgIC8qKgorICAg
ICAqIEBwYXJhbSB7QXJyYXkuPHN0cmluZz49fSBpdGVtcworICAgICAqIEBwYXJhbSB7bnVtYmVy
PX0gc2VsZWN0ZWRJbmRleAorICAgICAqLworICAgIF91cGRhdGVJdGVtczogZnVuY3Rpb24oaXRl
bXMsIHNlbGVjdGVkSW5kZXgpCisgICAgeworICAgICAgICB0aGlzLl9sZW5ndGggPSBpdGVtcy5s
ZW5ndGg7CisgICAgICAgIHRoaXMuY29udGVudEVsZW1lbnQucmVtb3ZlQ2hpbGRyZW4oKTsKKwor
ICAgICAgICB2YXIgdXNlckVudGVyZWRUZXh0ID0gdGhpcy5fc3VnZ2VzdEJveERlbGVnYXRlLnVz
ZXJFbnRlcmVkVGV4dCgpOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0
aDsgKytpKSB7CisgICAgICAgICAgICB2YXIgaXRlbSA9IGl0ZW1zW2ldOworICAgICAgICAgICAg
dmFyIGN1cnJlbnRJdGVtRWxlbWVudCA9IHRoaXMuX2NyZWF0ZUl0ZW1FbGVtZW50KHVzZXJFbnRl
cmVkVGV4dCwgaXRlbSk7CisgICAgICAgICAgICB0aGlzLmNvbnRlbnRFbGVtZW50LmFwcGVuZENo
aWxkKGN1cnJlbnRJdGVtRWxlbWVudCk7CisgICAgICAgIH0KKworICAgICAgICB0aGlzLl9zZWxl
Y3RlZEVsZW1lbnQgPSBudWxsOworICAgICAgICBpZiAodHlwZW9mIHNlbGVjdGVkSW5kZXggPT09
ICJudW1iZXIiKQorICAgICAgICAgICAgdGhpcy5fc2VsZWN0SXRlbShzZWxlY3RlZEluZGV4KTsK
KyAgICB9LAorCisgICAgLyoqCisgICAgICogQHBhcmFtIHtudW1iZXJ9IGluZGV4CisgICAgICov
CisgICAgX3NlbGVjdEl0ZW06IGZ1bmN0aW9uKGluZGV4KQorICAgIHsKKyAgICAgICAgaWYgKHRo
aXMuX3NlbGVjdGVkRWxlbWVudCkKKyAgICAgICAgICAgIHRoaXMuX3NlbGVjdGVkRWxlbWVudC5j
bGFzc0xpc3QucmVtb3ZlKCJzZWxlY3RlZCIpOworCisgICAgICAgIHRoaXMuX3NlbGVjdGVkSW5k
ZXggPSBpbmRleDsKKyAgICAgICAgdGhpcy5fc2VsZWN0ZWRFbGVtZW50ID0gdGhpcy5jb250ZW50
RWxlbWVudC5jaGlsZHJlbltpbmRleF07CisgICAgICAgIHRoaXMuX3NlbGVjdGVkRWxlbWVudC5j
bGFzc0xpc3QuYWRkKCJzZWxlY3RlZCIpOworCisgICAgICAgIHRoaXMuX3NlbGVjdGVkRWxlbWVu
dC5zY3JvbGxJbnRvVmlld0lmTmVlZGVkKGZhbHNlKTsKKyAgICB9LAorCisgICAgLyoqCisgICAg
ICogQHBhcmFtIHtBcnJheS48c3RyaW5nPj19IGNvbXBsZXRpb25zCisgICAgICogQHBhcmFtIHti
b29sZWFuPX0gY2FuU2hvd0ZvclNpbmdsZUl0ZW0KKyAgICAgKi8KKyAgICBfY2FuU2hvd0JveDog
ZnVuY3Rpb24oY29tcGxldGlvbnMsIGNhblNob3dGb3JTaW5nbGVJdGVtKQorICAgIHsKKyAgICAg
ICAgaWYgKCFjb21wbGV0aW9ucyB8fCAhY29tcGxldGlvbnMubGVuZ3RoKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgICAgIGlmIChjb21wbGV0aW9ucy5sZW5ndGggPiAxKQorICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAgICAgLy8gRG8gbm90IHNob3cgYSBzaW5nbGUg
c3VnZ2VzdGlvbiBpZiBpdCBpcyB0aGUgc2FtZSBhcyB1c2VyLWVudGVyZWQgcHJlZml4LCBldmVu
IGlmIGFsbG93ZWQgdG8gc2hvdyBzaW5nbGUtaXRlbSBzdWdnZXN0IGJveGVzLgorICAgICAgICBy
ZXR1cm4gY2FuU2hvd0ZvclNpbmdsZUl0ZW0gJiYgY29tcGxldGlvbnNbMF0gIT09IHRoaXMuX3N1
Z2dlc3RCb3hEZWxlZ2F0ZS51c2VyRW50ZXJlZFRleHQoKTsKKyAgICB9LAorCisgICAgX3JlbWVt
YmVyUm93Q291bnRQZXJWaWV3cG9ydDogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgaWYgKCF0
aGlzLmNvbnRlbnRFbGVtZW50LmZpcnN0Q2hpbGQpCisgICAgICAgICAgICByZXR1cm47CisKKyAg
ICAgICAgdGhpcy5fcm93Q291bnRQZXJWaWV3cG9ydCA9IE1hdGguZmxvb3IodGhpcy5jb250YWlu
ZXJFbGVtZW50Lm9mZnNldEhlaWdodCAvIHRoaXMuY29udGVudEVsZW1lbnQuZmlyc3RDaGlsZC5v
ZmZzZXRIZWlnaHQpOworICAgIH0sCisKKyAgICAvKioKKyAgICAgKiBAcGFyYW0ge0FuY2hvckJv
eH0gYW5jaG9yQm94CisgICAgICogQHBhcmFtIHtBcnJheS48c3RyaW5nPj19IGNvbXBsZXRpb25z
CisgICAgICogQHBhcmFtIHtudW1iZXI9fSBzZWxlY3RlZEluZGV4CisgICAgICogQHBhcmFtIHti
b29sZWFuPX0gY2FuU2hvd0ZvclNpbmdsZUl0ZW0KKyAgICAgKi8KKyAgICBfY29tcGxldGlvbnNS
ZWFkeTogZnVuY3Rpb24oYW5jaG9yQm94LCBjb21wbGV0aW9ucywgc2VsZWN0ZWRJbmRleCwgY2Fu
U2hvd0ZvclNpbmdsZUl0ZW0pCisgICAgeworICAgICAgICBpZiAodGhpcy5fY2FuU2hvd0JveChj
b21wbGV0aW9ucywgY2FuU2hvd0ZvclNpbmdsZUl0ZW0pKSB7CisgICAgICAgICAgICB0aGlzLl91
cGRhdGVJdGVtcyhjb21wbGV0aW9ucywgc2VsZWN0ZWRJbmRleCk7CisgICAgICAgICAgICB0aGlz
Ll91cGRhdGVCb3hQb3NpdGlvbihhbmNob3JCb3gpOworICAgICAgICAgICAgaWYgKCF0aGlzLnZp
c2libGUpCisgICAgICAgICAgICAgICAgdGhpcy5fYm9keUVsZW1lbnQuYXBwZW5kQ2hpbGQodGhp
cy5fZWxlbWVudCk7CisgICAgICAgICAgICB0aGlzLl9yZW1lbWJlclJvd0NvdW50UGVyVmlld3Bv
cnQoKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICB0aGlzLmhpZGUoKTsKKyAgICB9LAor
CisgICAgLyoqCisgICAgICogQHJldHVybiB7Ym9vbGVhbn0KKyAgICAgKi8KKyAgICB1cEtleVBy
ZXNzZWQ6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9zZWxlY3RDbG9z
ZXN0KC0xLCB0cnVlKTsKKyAgICB9LAorCisgICAgLyoqCisgICAgICogQHJldHVybiB7Ym9vbGVh
bn0KKyAgICAgKi8KKyAgICBkb3duS2V5UHJlc3NlZDogZnVuY3Rpb24oKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHRoaXMuX3NlbGVjdENsb3Nlc3QoMSwgdHJ1ZSk7CisgICAgfSwKKworICAgIC8q
KgorICAgICAqIEByZXR1cm4ge2Jvb2xlYW59CisgICAgICovCisgICAgcGFnZVVwS2V5UHJlc3Nl
ZDogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdENsb3Nlc3Qo
LXRoaXMuX3Jvd0NvdW50UGVyVmlld3BvcnQsIGZhbHNlKTsKKyAgICB9LAorCisgICAgLyoqCisg
ICAgICogQHJldHVybiB7Ym9vbGVhbn0KKyAgICAgKi8KKyAgICBwYWdlRG93bktleVByZXNzZWQ6
IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9zZWxlY3RDbG9zZXN0KHRo
aXMuX3Jvd0NvdW50UGVyVmlld3BvcnQsIGZhbHNlKTsKKyAgICB9LAorCisgICAgLyoqCisgICAg
ICogQHJldHVybiB7Ym9vbGVhbn0KKyAgICAgKi8KKyAgICBlbnRlcktleVByZXNzZWQ6IGZ1bmN0
aW9uKCkKKyAgICB7CisgICAgICAgIHZhciBoYXNTZWxlY3RlZEl0ZW0gPSAhIXRoaXMuX3NlbGVj
dGVkRWxlbWVudDsKKyAgICAgICAgdGhpcy5hY2NlcHRTdWdnZXN0aW9uKCk7CisKKyAgICAgICAg
Ly8gUmVwb3J0IHRoZSBldmVudCBhcyBub24taGFuZGxlZCBpZiB0aGVyZSBpcyBubyBzZWxlY3Rl
ZCBpdGVtLAorICAgICAgICAvLyB0byBjb21taXQgdGhlIGlucHV0IG9yIGhhbmRsZSBpdCBvdGhl
cndpc2UuCisgICAgICAgIHJldHVybiBoYXNTZWxlY3RlZEl0ZW07CisgICAgfSwKKworICAgIC8q
KgorICAgICAqIEByZXR1cm4ge2Jvb2xlYW59CisgICAgICovCisgICAgdGFiS2V5UHJlc3NlZDog
ZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuZW50ZXJLZXlQcmVzc2VkKCk7
CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9UZXh0UHJvbXB0LmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9UZXh0
UHJvbXB0LmpzCmluZGV4IDJiNWIyZDVhYThkZGYzYzRkMjMzMGM0YTBjNjQzMDM3MTI5MjRjN2Iu
LjZlZjhkZmRkZjNmMjE2YjA3MmJjODFkOTVmZmQyOTMyMTE3MWIxYzYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvVGV4dFByb21wdC5qcworKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1RleHRQcm9tcHQuanMKQEAgLTMwLDYgKzMw
LDcgQEAKIC8qKgogICogQGNvbnN0cnVjdG9yCiAgKiBAZXh0ZW5kcyBXZWJJbnNwZWN0b3IuT2Jq
ZWN0CisgKiBAaW1wbGVtZW50cyB7V2ViSW5zcGVjdG9yLlN1Z2dlc3RCb3hEZWxlZ2F0ZX0KICAq
IEBwYXJhbSB7ZnVuY3Rpb24oRWxlbWVudCwgUmFuZ2UsIGJvb2xlYW4sIGZ1bmN0aW9uKEFycmF5
LjxzdHJpbmc+LCBudW1iZXI9KSl9IGNvbXBsZXRpb25zCiAgKiBAcGFyYW0ge3N0cmluZz19IHN0
b3BDaGFyYWN0ZXJzCiAgKi8KQEAgLTUxLDYgKzUyLDExIEBAIFdlYkluc3BlY3Rvci5UZXh0UHJv
bXB0LkV2ZW50cyA9IHsKIH07CiAKIFdlYkluc3BlY3Rvci5UZXh0UHJvbXB0LnByb3RvdHlwZSA9
IHsKKyAgICB1c2VyRW50ZXJlZFRleHQ6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHJldHVy
biB0aGlzLl91c2VyRW50ZXJlZFRleHQ7CisgICAgfSwKKwogICAgIGdldCBwcm94eUVsZW1lbnQo
KQogICAgIHsKICAgICAgICAgcmV0dXJuIHRoaXMuX3Byb3h5RWxlbWVudDsKQEAgLTExNyw3ICsx
MjMsNyBAQCBXZWJJbnNwZWN0b3IuVGV4dFByb21wdC5wcm90b3R5cGUgPSB7CiAgICAgICAgIHRo
aXMuX2VsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigic2VsZWN0c3RhcnQiLCB0aGlzLl9ib3VuZFNl
bGVjdFN0YXJ0LCBmYWxzZSk7CiAKICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLl9zdWdnZXN0Qm94
Q2xhc3NOYW1lID09PSAic3RyaW5nIikKLSAgICAgICAgICAgIHRoaXMuX3N1Z2dlc3RCb3ggPSBu
ZXcgV2ViSW5zcGVjdG9yLlRleHRQcm9tcHQuU3VnZ2VzdEJveCh0aGlzLCB0aGlzLl9lbGVtZW50
LCB0aGlzLl9zdWdnZXN0Qm94Q2xhc3NOYW1lKTsKKyAgICAgICAgICAgIHRoaXMuX3N1Z2dlc3RC
b3ggPSBuZXcgV2ViSW5zcGVjdG9yLlN1Z2dlc3RCb3godGhpcywgdGhpcy5fZWxlbWVudCwgdGhp
cy5fc3VnZ2VzdEJveENsYXNzTmFtZSk7CiAKICAgICAgICAgcmV0dXJuIHRoaXMucHJveHlFbGVt
ZW50OwogICAgIH0sCkBAIC01MjAsNyArNTI2LDcgQEAgV2ViSW5zcGVjdG9yLlRleHRQcm9tcHQu
cHJvdG90eXBlID0gewogICAgICAgICAgICAgICAgIHNlbGVjdGlvbi5hZGRSYW5nZShmaW5hbFNl
bGVjdGlvblJhbmdlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlCi0gICAgICAgICAg
ICB0aGlzLmFwcGx5U3VnZ2VzdGlvbihjb21wbGV0aW9uVGV4dCwgY29tcGxldGlvbnMubGVuZ3Ro
ID4gMSwgb3JpZ2luYWxXb3JkUHJlZml4UmFuZ2UpOworICAgICAgICAgICAgdGhpcy5fYXBwbHlT
dWdnZXN0aW9uKGNvbXBsZXRpb25UZXh0LCBjb21wbGV0aW9ucy5sZW5ndGggPiAxLCBvcmlnaW5h
bFdvcmRQcmVmaXhSYW5nZSk7CiAgICAgfSwKIAogICAgIF9jb21wbGV0ZUNvbW1vblByZWZpeDog
ZnVuY3Rpb24oKQpAQCAtNTM4LDkgKzU0NCwyMCBAQCBXZWJJbnNwZWN0b3IuVGV4dFByb21wdC5w
cm90b3R5cGUgPSB7CiAgICAgfSwKIAogICAgIC8qKgotICAgICAqIEBwYXJhbSB7UmFuZ2U9fSBv
cmlnaW5hbFByZWZpeFJhbmdlCisgICAgICogQHBhcmFtIHtzdHJpbmd9IGNvbXBsZXRpb25UZXh0
CisgICAgICogQHBhcmFtIHtib29sZWFuPX0gaXNJbnRlcm1lZGlhdGVTdWdnZXN0aW9uCisgICAg
ICovCisgICAgYXBwbHlTdWdnZXN0aW9uOiBmdW5jdGlvbihjb21wbGV0aW9uVGV4dCwgaXNJbnRl
cm1lZGlhdGVTdWdnZXN0aW9uKQorICAgIHsKKyAgICAgICAgdGhpcy5fYXBwbHlTdWdnZXN0aW9u
KGNvbXBsZXRpb25UZXh0LCBpc0ludGVybWVkaWF0ZVN1Z2dlc3Rpb24pOworICAgIH0sCisKKyAg
ICAvKioKKyAgICAgKiBAcGFyYW0ge3N0cmluZ30gY29tcGxldGlvblRleHQKKyAgICAgKiBAcGFy
YW0ge2Jvb2xlYW49fSBpc0ludGVybWVkaWF0ZVN1Z2dlc3Rpb24KKyAgICAgKiBAcGFyYW0ge1Jh
bmdlfSBvcmlnaW5hbFByZWZpeFJhbmdlCiAgICAgICovCi0gICAgYXBwbHlTdWdnZXN0aW9uOiBm
dW5jdGlvbihjb21wbGV0aW9uVGV4dCwgaXNJbnRlcm1lZGlhdGVTdWdnZXN0aW9uLCBvcmlnaW5h
bFByZWZpeFJhbmdlKQorICAgIF9hcHBseVN1Z2dlc3Rpb246IGZ1bmN0aW9uKGNvbXBsZXRpb25U
ZXh0LCBpc0ludGVybWVkaWF0ZVN1Z2dlc3Rpb24sIG9yaWdpbmFsUHJlZml4UmFuZ2UpCiAgICAg
ewogICAgICAgICB2YXIgd29yZFByZWZpeExlbmd0aDsKICAgICAgICAgaWYgKG9yaWdpbmFsUHJl
Zml4UmFuZ2UpCkBAIC03MTcsNyArNzM0LDcgQEAgV2ViSW5zcGVjdG9yLlRleHRQcm9tcHQucHJv
dG90eXBlID0gewogICAgIGVudGVyS2V5UHJlc3NlZDogZnVuY3Rpb24oZXZlbnQpCiAgICAgewog
ICAgICAgICBpZiAodGhpcy5pc1N1Z2dlc3RCb3hWaXNpYmxlKCkpCi0gICAgICAgICAgICByZXR1
cm4gdGhpcy5fc3VnZ2VzdEJveC5lbnRlcktleVByZXNzZWQoZXZlbnQpOworICAgICAgICAgICAg
cmV0dXJuIHRoaXMuX3N1Z2dlc3RCb3guZW50ZXJLZXlQcmVzc2VkKCk7CiAKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIH0sCkBAIC03MjUsNyArNzQyLDcgQEAgV2ViSW5zcGVjdG9yLlRleHRQ
cm9tcHQucHJvdG90eXBlID0gewogICAgIHVwS2V5UHJlc3NlZDogZnVuY3Rpb24oZXZlbnQpCiAg
ICAgewogICAgICAgICBpZiAodGhpcy5pc1N1Z2dlc3RCb3hWaXNpYmxlKCkpCi0gICAgICAgICAg
ICByZXR1cm4gdGhpcy5fc3VnZ2VzdEJveC51cEtleVByZXNzZWQoZXZlbnQpOworICAgICAgICAg
ICAgcmV0dXJuIHRoaXMuX3N1Z2dlc3RCb3gudXBLZXlQcmVzc2VkKCk7CiAKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIH0sCkBAIC03MzMsNyArNzUwLDcgQEAgV2ViSW5zcGVjdG9yLlRleHRQ
cm9tcHQucHJvdG90eXBlID0gewogICAgIGRvd25LZXlQcmVzc2VkOiBmdW5jdGlvbihldmVudCkK
ICAgICB7CiAgICAgICAgIGlmICh0aGlzLmlzU3VnZ2VzdEJveFZpc2libGUoKSkKLSAgICAgICAg
ICAgIHJldHVybiB0aGlzLl9zdWdnZXN0Qm94LmRvd25LZXlQcmVzc2VkKGV2ZW50KTsKKyAgICAg
ICAgICAgIHJldHVybiB0aGlzLl9zdWdnZXN0Qm94LmRvd25LZXlQcmVzc2VkKCk7CiAKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIH0sCkBAIC03NDEsNyArNzU4LDcgQEAgV2ViSW5zcGVjdG9y
LlRleHRQcm9tcHQucHJvdG90eXBlID0gewogICAgIHBhZ2VVcEtleVByZXNzZWQ6IGZ1bmN0aW9u
KGV2ZW50KQogICAgIHsKICAgICAgICAgaWYgKHRoaXMuaXNTdWdnZXN0Qm94VmlzaWJsZSgpKQot
ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N1Z2dlc3RCb3gucGFnZVVwS2V5UHJlc3NlZChldmVu
dCk7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fc3VnZ2VzdEJveC5wYWdlVXBLZXlQcmVzc2Vk
KCk7CiAKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0sCkBAIC03NDksNyArNzY2LDcgQEAg
V2ViSW5zcGVjdG9yLlRleHRQcm9tcHQucHJvdG90eXBlID0gewogICAgIHBhZ2VEb3duS2V5UHJl
c3NlZDogZnVuY3Rpb24oZXZlbnQpCiAgICAgewogICAgICAgICBpZiAodGhpcy5pc1N1Z2dlc3RC
b3hWaXNpYmxlKCkpCi0gICAgICAgICAgICByZXR1cm4gdGhpcy5fc3VnZ2VzdEJveC5wYWdlRG93
bktleVByZXNzZWQoZXZlbnQpOworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N1Z2dlc3RCb3gu
cGFnZURvd25LZXlQcmVzc2VkKCk7CiAKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0sCkBA
IC05MjYsMzI5ICs5NDMsMyBAQCBXZWJJbnNwZWN0b3IuVGV4dFByb21wdFdpdGhIaXN0b3J5LnBy
b3RvdHlwZSA9IHsKICAgICBfX3Byb3RvX186IFdlYkluc3BlY3Rvci5UZXh0UHJvbXB0LnByb3Rv
dHlwZQogfQogCi0vKioKLSAqIEBjb25zdHJ1Y3RvcgotICovCi1XZWJJbnNwZWN0b3IuVGV4dFBy
b21wdC5TdWdnZXN0Qm94ID0gZnVuY3Rpb24odGV4dFByb21wdCwgaW5wdXRFbGVtZW50LCBjbGFz
c05hbWUpCi17Ci0gICAgdGhpcy5fdGV4dFByb21wdCA9IHRleHRQcm9tcHQ7Ci0gICAgdGhpcy5f
aW5wdXRFbGVtZW50ID0gaW5wdXRFbGVtZW50OwotICAgIHRoaXMuX2xlbmd0aCA9IDA7Ci0gICAg
dGhpcy5fc2VsZWN0ZWRJbmRleCA9IC0xOwotICAgIHRoaXMuX3NlbGVjdGVkRWxlbWVudCA9IG51
bGw7Ci0gICAgdGhpcy5fYm91bmRPblNjcm9sbCA9IHRoaXMuX29uc2Nyb2xscmVzaXplLmJpbmQo
dGhpcywgdHJ1ZSk7Ci0gICAgdGhpcy5fYm91bmRPblJlc2l6ZSA9IHRoaXMuX29uc2Nyb2xscmVz
aXplLmJpbmQodGhpcywgZmFsc2UpOwotICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJzY3Jv
bGwiLCB0aGlzLl9ib3VuZE9uU2Nyb2xsLCB0cnVlKTsKLSAgICB3aW5kb3cuYWRkRXZlbnRMaXN0
ZW5lcigicmVzaXplIiwgdGhpcy5fYm91bmRPblJlc2l6ZSwgdHJ1ZSk7Ci0KLSAgICB0aGlzLl9i
b2R5RWxlbWVudCA9IGlucHV0RWxlbWVudC5vd25lckRvY3VtZW50LmJvZHk7Ci0gICAgdGhpcy5f
ZWxlbWVudCA9IGlucHV0RWxlbWVudC5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIp
OwotICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NOYW1lID0gInN1Z2dlc3QtYm94ICIgKyAoY2xhc3NO
YW1lIHx8ICIiKTsKLSAgICB0aGlzLl9lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93
biIsIHRoaXMuX29uYm94bW91c2Vkb3duLmJpbmQodGhpcyksIHRydWUpOwotICAgIHRoaXMuY29u
dGFpbmVyRWxlbWVudCA9IHRoaXMuX2VsZW1lbnQuY3JlYXRlQ2hpbGQoImRpdiIsICJjb250YWlu
ZXIiKTsKLSAgICB0aGlzLmNvbnRlbnRFbGVtZW50ID0gdGhpcy5jb250YWluZXJFbGVtZW50LmNy
ZWF0ZUNoaWxkKCJkaXYiLCAiY29udGVudCIpOwotfQotCi1XZWJJbnNwZWN0b3IuVGV4dFByb21w
dC5TdWdnZXN0Qm94LnByb3RvdHlwZSA9IHsKLSAgICBnZXQgdmlzaWJsZSgpCi0gICAgewotICAg
ICAgICByZXR1cm4gISF0aGlzLl9lbGVtZW50LnBhcmVudEVsZW1lbnQ7Ci0gICAgfSwKLQotICAg
IGdldCBoYXNTZWxlY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuICEhdGhpcy5fc2VsZWN0
ZWRFbGVtZW50OwotICAgIH0sCi0KLSAgICBfb25zY3JvbGxyZXNpemU6IGZ1bmN0aW9uKGlzU2Ny
b2xsLCBldmVudCkKLSAgICB7Ci0gICAgICAgIGlmIChpc1Njcm9sbCAmJiB0aGlzLl9lbGVtZW50
LmlzQW5jZXN0b3IoZXZlbnQudGFyZ2V0KSB8fCAhdGhpcy52aXNpYmxlKQotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB0aGlzLl91cGRhdGVCb3hQb3NpdGlvbldpdGhFeGlzdGluZ0FuY2hv
cigpOwotICAgIH0sCi0KLSAgICBfdXBkYXRlQm94UG9zaXRpb25XaXRoRXhpc3RpbmdBbmNob3I6
IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX3VwZGF0ZUJveFBvc2l0aW9uKHRoaXMu
X2FuY2hvckJveCk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7QW5jaG9yQm94
fSBhbmNob3JCb3gKLSAgICAgKi8KLSAgICBfdXBkYXRlQm94UG9zaXRpb246IGZ1bmN0aW9uKGFu
Y2hvckJveCkKLSAgICB7Ci0gICAgICAgIC8vIE1lYXN1cmUgdGhlIGNvbnRlbnQgZWxlbWVudCBi
b3guCi0gICAgICAgIHRoaXMuY29udGVudEVsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICJpbmxpbmUt
YmxvY2siOwotICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRoaXMuY29udGVudEVs
ZW1lbnQpOwotICAgICAgICB0aGlzLmNvbnRlbnRFbGVtZW50LnBvc2l0aW9uQXQoMCwgMCk7Ci0g
ICAgICAgIHZhciBjb250ZW50V2lkdGggPSB0aGlzLmNvbnRlbnRFbGVtZW50Lm9mZnNldFdpZHRo
OwotICAgICAgICB2YXIgY29udGVudEhlaWdodCA9IHRoaXMuY29udGVudEVsZW1lbnQub2Zmc2V0
SGVpZ2h0OwotICAgICAgICB0aGlzLmNvbnRlbnRFbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAiYmxv
Y2siOwotICAgICAgICB0aGlzLmNvbnRhaW5lckVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5jb250
ZW50RWxlbWVudCk7Ci0KLSAgICAgICAgLy8gTGF5IG91dCB0aGUgc3VnZ2VzdC1ib3ggcmVsYXRp
dmUgdG8gdGhlIGFuY2hvckJveC4KLSAgICAgICAgdGhpcy5fYW5jaG9yQm94ID0gYW5jaG9yQm94
OwotICAgICAgICBjb25zdCBzcGFjZXIgPSA2OwotCi0gICAgICAgIGNvbnN0IHN1Z2dlc3RCb3hQ
YWRkaW5nWCA9IDIxOwotICAgICAgICB2YXIgbWF4V2lkdGggPSBkb2N1bWVudC5ib2R5Lm9mZnNl
dFdpZHRoIC0gYW5jaG9yQm94LnggLSBzcGFjZXI7Ci0gICAgICAgIHZhciB3aWR0aCA9IE1hdGgu
bWluKGNvbnRlbnRXaWR0aCwgbWF4V2lkdGggLSBzdWdnZXN0Qm94UGFkZGluZ1gpICsgc3VnZ2Vz
dEJveFBhZGRpbmdYOwotICAgICAgICB2YXIgcGFkZGVkV2lkdGggPSBjb250ZW50V2lkdGggKyBz
dWdnZXN0Qm94UGFkZGluZ1g7Ci0gICAgICAgIHZhciBib3hYID0gYW5jaG9yQm94Lng7Ci0gICAg
ICAgIGlmICh3aWR0aCA8IHBhZGRlZFdpZHRoKSB7Ci0gICAgICAgICAgICAvLyBTaGlmdCB0aGUg
c3VnZ2VzdCBib3ggdG8gdGhlIGxlZnQgdG8gYWNjb21tb2RhdGUgdGhlIGNvbnRlbnQgd2l0aG91
dCB0cmltbWluZyB0byB0aGUgQk9EWSBlZGdlLgotICAgICAgICAgICAgbWF4V2lkdGggPSBkb2N1
bWVudC5ib2R5Lm9mZnNldFdpZHRoIC0gc3BhY2VyOwotICAgICAgICAgICAgd2lkdGggPSBNYXRo
Lm1pbihjb250ZW50V2lkdGgsIG1heFdpZHRoIC0gc3VnZ2VzdEJveFBhZGRpbmdYKSArIHN1Z2dl
c3RCb3hQYWRkaW5nWDsKLSAgICAgICAgICAgIGJveFggPSBkb2N1bWVudC5ib2R5Lm9mZnNldFdp
ZHRoIC0gd2lkdGg7Ci0gICAgICAgIH0KLQotICAgICAgICBjb25zdCBzdWdnZXN0Qm94UGFkZGlu
Z1kgPSAyOwotICAgICAgICB2YXIgYm94WTsKLSAgICAgICAgdmFyIGFib3ZlSGVpZ2h0ID0gYW5j
aG9yQm94Lnk7Ci0gICAgICAgIHZhciB1bmRlckhlaWdodCA9IGRvY3VtZW50LmJvZHkub2Zmc2V0
SGVpZ2h0IC0gYW5jaG9yQm94LnkgLSBhbmNob3JCb3guaGVpZ2h0OwotICAgICAgICB2YXIgbWF4
SGVpZ2h0ID0gTWF0aC5tYXgodW5kZXJIZWlnaHQsIGFib3ZlSGVpZ2h0KSAtIHNwYWNlcjsKLSAg
ICAgICAgdmFyIGhlaWdodCA9IE1hdGgubWluKGNvbnRlbnRIZWlnaHQsIG1heEhlaWdodCAtIHN1
Z2dlc3RCb3hQYWRkaW5nWSkgKyBzdWdnZXN0Qm94UGFkZGluZ1k7Ci0gICAgICAgIGlmICh1bmRl
ckhlaWdodCA+PSBhYm92ZUhlaWdodCkgewotICAgICAgICAgICAgLy8gTG9jYXRlIHRoZSBzdWdn
ZXN0IGJveCB1bmRlciB0aGUgYW5jaG9yQm94LgotICAgICAgICAgICAgYm94WSA9IGFuY2hvckJv
eC55ICsgYW5jaG9yQm94LmhlaWdodDsKLSAgICAgICAgICAgIHRoaXMuX2VsZW1lbnQucmVtb3Zl
U3R5bGVDbGFzcygiYWJvdmUtYW5jaG9yIik7Ci0gICAgICAgICAgICB0aGlzLl9lbGVtZW50LmFk
ZFN0eWxlQ2xhc3MoInVuZGVyLWFuY2hvciIpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgLy8gTG9jYXRlIHRoZSBzdWdnZXN0IGJveCBhYm92ZSB0aGUgYW5jaG9yQm94LgotICAgICAg
ICAgICAgYm94WSA9IGFuY2hvckJveC55IC0gaGVpZ2h0OwotICAgICAgICAgICAgdGhpcy5fZWxl
bWVudC5yZW1vdmVTdHlsZUNsYXNzKCJ1bmRlci1hbmNob3IiKTsKLSAgICAgICAgICAgIHRoaXMu
X2VsZW1lbnQuYWRkU3R5bGVDbGFzcygiYWJvdmUtYW5jaG9yIik7Ci0gICAgICAgIH0KLQotICAg
ICAgICB0aGlzLl9lbGVtZW50LnBvc2l0aW9uQXQoYm94WCwgYm94WSk7Ci0gICAgICAgIHRoaXMu
X2VsZW1lbnQuc3R5bGUud2lkdGggPSB3aWR0aCArICJweCI7Ci0gICAgICAgIHRoaXMuX2VsZW1l
bnQuc3R5bGUuaGVpZ2h0ID0gaGVpZ2h0ICsgInB4IjsKLSAgICB9LAotCi0gICAgX29uYm94bW91
c2Vkb3duOiBmdW5jdGlvbihldmVudCkKLSAgICB7Ci0gICAgICAgIGV2ZW50LnByZXZlbnREZWZh
dWx0KCk7Ci0gICAgfSwKLQotICAgIGhpZGU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGlm
ICghdGhpcy52aXNpYmxlKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHRoaXMuX2Vs
ZW1lbnQucGFyZW50RWxlbWVudC5yZW1vdmVDaGlsZCh0aGlzLl9lbGVtZW50KTsKLSAgICAgICAg
ZGVsZXRlIHRoaXMuX3NlbGVjdGVkRWxlbWVudDsKLSAgICB9LAotCi0gICAgcmVtb3ZlRnJvbUVs
ZW1lbnQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3Rl
bmVyKCJzY3JvbGwiLCB0aGlzLl9ib3VuZE9uU2Nyb2xsLCB0cnVlKTsKLSAgICAgICAgd2luZG93
LnJlbW92ZUV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsIHRoaXMuX2JvdW5kT25SZXNpemUsIHRydWUp
OwotICAgICAgICB0aGlzLmhpZGUoKTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICogQHBhcmFt
IHtzdHJpbmc9fSB0ZXh0Ci0gICAgICogQHBhcmFtIHtib29sZWFuPX0gaXNJbnRlcm1lZGlhdGVT
dWdnZXN0aW9uCi0gICAgICovCi0gICAgX2FwcGx5U3VnZ2VzdGlvbjogZnVuY3Rpb24odGV4dCwg
aXNJbnRlcm1lZGlhdGVTdWdnZXN0aW9uKQotICAgIHsKLSAgICAgICAgaWYgKCF0aGlzLnZpc2li
bGUgfHwgISh0ZXh0IHx8IHRoaXMuX3NlbGVjdGVkRWxlbWVudCkpCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICAgICAgdmFyIHN1Z2dlc3Rpb24gPSB0ZXh0IHx8IHRoaXMuX3NlbGVj
dGVkRWxlbWVudC50ZXh0Q29udGVudDsKLSAgICAgICAgaWYgKCFzdWdnZXN0aW9uKQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIHRoaXMuX3RleHRQcm9tcHQuYXBwbHlTdWdn
ZXN0aW9uKHN1Z2dlc3Rpb24sIGlzSW50ZXJtZWRpYXRlU3VnZ2VzdGlvbik7Ci0gICAgICAgIHJl
dHVybiB0cnVlOwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0ge3N0cmluZz19IHRl
eHQKLSAgICAgKi8KLSAgICBhY2NlcHRTdWdnZXN0aW9uOiBmdW5jdGlvbih0ZXh0KQotICAgIHsK
LSAgICAgICAgdmFyIHJlc3VsdCA9IHRoaXMuX2FwcGx5U3VnZ2VzdGlvbih0ZXh0LCBmYWxzZSk7
Ci0gICAgICAgIHRoaXMuaGlkZSgpOwotICAgICAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgICAgICB0aGlzLl90ZXh0UHJvbXB0LmFjY2VwdFN1Z2dlc3Rp
b24oKTsKLQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICog
QHBhcmFtIHtudW1iZXJ9IHNoaWZ0Ci0gICAgICogQHBhcmFtIHtib29sZWFuPX0gaXNDaXJjdWxh
cgotICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IGlzIGNoYW5nZWQKLSAgICAgKi8KLSAgICBfc2Vs
ZWN0Q2xvc2VzdDogZnVuY3Rpb24oc2hpZnQsIGlzQ2lyY3VsYXIpCi0gICAgewotICAgICAgICBp
ZiAoIXRoaXMuX2xlbmd0aCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICB2
YXIgaW5kZXggPSB0aGlzLl9zZWxlY3RlZEluZGV4ICsgc2hpZnQ7Ci0KLSAgICAgICAgaWYgKGlz
Q2lyY3VsYXIpCi0gICAgICAgICAgICBpbmRleCA9ICh0aGlzLl9sZW5ndGggKyBpbmRleCkgJSB0
aGlzLl9sZW5ndGg7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGluZGV4ID0gTnVtYmVyLmNv
bnN0cmFpbihpbmRleCwgMCwgdGhpcy5fbGVuZ3RoIC0gMSk7Ci0KLSAgICAgICAgdGhpcy5fc2Vs
ZWN0SXRlbShpbmRleCk7Ci0gICAgICAgIHRoaXMuX2FwcGx5U3VnZ2VzdGlvbih1bmRlZmluZWQs
IHRydWUpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9LAotCi0gICAgLyoqCi0gICAgICog
QHBhcmFtIHtBbmNob3JCb3h9IGFuY2hvckJveAotICAgICAqIEBwYXJhbSB7QXJyYXkuPHN0cmlu
Zz49fSBjb21wbGV0aW9ucwotICAgICAqIEBwYXJhbSB7bnVtYmVyPX0gc2VsZWN0ZWRJbmRleAot
ICAgICAqIEBwYXJhbSB7Ym9vbGVhbj19IGNhblNob3dGb3JTaW5nbGVJdGVtCi0gICAgICovCi0g
ICAgdXBkYXRlU3VnZ2VzdGlvbnM6IGZ1bmN0aW9uKGFuY2hvckJveCwgY29tcGxldGlvbnMsIHNl
bGVjdGVkSW5kZXgsIGNhblNob3dGb3JTaW5nbGVJdGVtKQotICAgIHsKLSAgICAgICAgaWYgKHRo
aXMuX3N1Z2dlc3RUaW1lb3V0KSB7Ci0gICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5fc3Vn
Z2VzdFRpbWVvdXQpOwotICAgICAgICAgICAgZGVsZXRlIHRoaXMuX3N1Z2dlc3RUaW1lb3V0Owot
ICAgICAgICB9Ci0gICAgICAgIHRoaXMuX2NvbXBsZXRpb25zUmVhZHkoYW5jaG9yQm94LCBjb21w
bGV0aW9ucywgc2VsZWN0ZWRJbmRleCwgY2FuU2hvd0ZvclNpbmdsZUl0ZW0pOwotICAgIH0sCi0K
LSAgICBfb25JdGVtTW91c2VEb3duOiBmdW5jdGlvbih0ZXh0LCBldmVudCkKLSAgICB7Ci0gICAg
ICAgIHRoaXMuYWNjZXB0U3VnZ2VzdGlvbih0ZXh0KTsKLSAgICAgICAgZXZlbnQuY29uc3VtZSh0
cnVlKTsKLSAgICB9LAotCi0gICAgX2NyZWF0ZUl0ZW1FbGVtZW50OiBmdW5jdGlvbihwcmVmaXgs
IHRleHQpCi0gICAgewotICAgICAgICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoImRpdiIpOwotICAgICAgICBlbGVtZW50LmNsYXNzTmFtZSA9ICJzdWdnZXN0LWJveC1jb250
ZW50LWl0ZW0gc291cmNlLWNvZGUiOwotICAgICAgICBlbGVtZW50LnRhYkluZGV4ID0gLTE7Ci0g
ICAgICAgIGlmIChwcmVmaXggJiYgcHJlZml4Lmxlbmd0aCAmJiAhdGV4dC5pbmRleE9mKHByZWZp
eCkpIHsKLSAgICAgICAgICAgIHZhciBwcmVmaXhFbGVtZW50ID0gZWxlbWVudC5jcmVhdGVDaGls
ZCgic3BhbiIsICJwcmVmaXgiKTsKLSAgICAgICAgICAgIHByZWZpeEVsZW1lbnQudGV4dENvbnRl
bnQgPSBwcmVmaXg7Ci0gICAgICAgICAgICB2YXIgc3VmZml4RWxlbWVudCA9IGVsZW1lbnQuY3Jl
YXRlQ2hpbGQoInNwYW4iLCAic3VmZml4Iik7Ci0gICAgICAgICAgICBzdWZmaXhFbGVtZW50LnRl
eHRDb250ZW50ID0gdGV4dC5zdWJzdHJpbmcocHJlZml4Lmxlbmd0aCk7Ci0gICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICB2YXIgc3VmZml4RWxlbWVudCA9IGVsZW1lbnQuY3JlYXRlQ2hpbGQo
InNwYW4iLCAic3VmZml4Iik7Ci0gICAgICAgICAgICBzdWZmaXhFbGVtZW50LnRleHRDb250ZW50
ID0gdGV4dDsKLSAgICAgICAgfQotICAgICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1v
dXNlZG93biIsIHRoaXMuX29uSXRlbU1vdXNlRG93bi5iaW5kKHRoaXMsIHRleHQpLCBmYWxzZSk7
Ci0gICAgICAgIHJldHVybiBlbGVtZW50OwotICAgIH0sCi0KLSAgICAvKioKLSAgICAgKiBAcGFy
YW0ge0FycmF5LjxzdHJpbmc+PX0gaXRlbXMKLSAgICAgKiBAcGFyYW0ge251bWJlcj19IHNlbGVj
dGVkSW5kZXgKLSAgICAgKi8KLSAgICBfdXBkYXRlSXRlbXM6IGZ1bmN0aW9uKGl0ZW1zLCBzZWxl
Y3RlZEluZGV4KQotICAgIHsKLSAgICAgICAgdGhpcy5fbGVuZ3RoID0gaXRlbXMubGVuZ3RoOwot
ICAgICAgICB0aGlzLmNvbnRlbnRFbGVtZW50LnJlbW92ZUNoaWxkcmVuKCk7Ci0KLSAgICAgICAg
dmFyIHVzZXJFbnRlcmVkVGV4dCA9IHRoaXMuX3RleHRQcm9tcHQuX3VzZXJFbnRlcmVkVGV4dDsK
LSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7ICsraSkgewotICAgICAg
ICAgICAgdmFyIGl0ZW0gPSBpdGVtc1tpXTsKLSAgICAgICAgICAgIHZhciBjdXJyZW50SXRlbUVs
ZW1lbnQgPSB0aGlzLl9jcmVhdGVJdGVtRWxlbWVudCh1c2VyRW50ZXJlZFRleHQsIGl0ZW0pOwot
ICAgICAgICAgICAgdGhpcy5jb250ZW50RWxlbWVudC5hcHBlbmRDaGlsZChjdXJyZW50SXRlbUVs
ZW1lbnQpOwotICAgICAgICB9Ci0KLSAgICAgICAgdGhpcy5fc2VsZWN0ZWRFbGVtZW50ID0gbnVs
bDsKLSAgICAgICAgaWYgKHR5cGVvZiBzZWxlY3RlZEluZGV4ID09PSAibnVtYmVyIikKLSAgICAg
ICAgICAgIHRoaXMuX3NlbGVjdEl0ZW0oc2VsZWN0ZWRJbmRleCk7Ci0gICAgfSwKLQotICAgIC8q
KgotICAgICAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleAotICAgICAqLwotICAgIF9zZWxlY3RJdGVt
OiBmdW5jdGlvbihpbmRleCkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLl9zZWxlY3RlZEVsZW1l
bnQpCi0gICAgICAgICAgICB0aGlzLl9zZWxlY3RlZEVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgi
c2VsZWN0ZWQiKTsKLQotICAgICAgICB0aGlzLl9zZWxlY3RlZEluZGV4ID0gaW5kZXg7Ci0gICAg
ICAgIHRoaXMuX3NlbGVjdGVkRWxlbWVudCA9IHRoaXMuY29udGVudEVsZW1lbnQuY2hpbGRyZW5b
aW5kZXhdOwotICAgICAgICB0aGlzLl9zZWxlY3RlZEVsZW1lbnQuY2xhc3NMaXN0LmFkZCgic2Vs
ZWN0ZWQiKTsKLQotICAgICAgICB0aGlzLl9zZWxlY3RlZEVsZW1lbnQuc2Nyb2xsSW50b1ZpZXdJ
Zk5lZWRlZChmYWxzZSk7Ci0gICAgfSwKLQotICAgIC8qKgotICAgICAqIEBwYXJhbSB7QXJyYXku
PHN0cmluZz49fSBjb21wbGV0aW9ucwotICAgICAqIEBwYXJhbSB7Ym9vbGVhbj19IGNhblNob3dG
b3JTaW5nbGVJdGVtCi0gICAgICovCi0gICAgX2NhblNob3dCb3g6IGZ1bmN0aW9uKGNvbXBsZXRp
b25zLCBjYW5TaG93Rm9yU2luZ2xlSXRlbSkKLSAgICB7Ci0gICAgICAgIGlmICghY29tcGxldGlv
bnMgfHwgIWNvbXBsZXRpb25zLmxlbmd0aCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgICAgICBpZiAoY29tcGxldGlvbnMubGVuZ3RoID4gMSkKLSAgICAgICAgICAgIHJldHVybiB0
cnVlOwotCi0gICAgICAgIC8vIERvIG5vdCBzaG93IGEgc2luZ2xlIHN1Z2dlc3Rpb24gaWYgaXQg
aXMgdGhlIHNhbWUgYXMgdXNlci1lbnRlcmVkIHByZWZpeCwgZXZlbiBpZiBhbGxvd2VkIHRvIHNo
b3cgc2luZ2xlLWl0ZW0gc3VnZ2VzdCBib3hlcy4KLSAgICAgICAgcmV0dXJuIGNhblNob3dGb3JT
aW5nbGVJdGVtICYmIGNvbXBsZXRpb25zWzBdICE9PSB0aGlzLl90ZXh0UHJvbXB0Ll91c2VyRW50
ZXJlZFRleHQ7Ci0gICAgfSwKLQotICAgIF9yZW1lbWJlclJvd0NvdW50UGVyVmlld3BvcnQ6IGZ1
bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGlmICghdGhpcy5jb250ZW50RWxlbWVudC5maXJzdENo
aWxkKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIHRoaXMuX3Jvd0NvdW50UGVyVmll
d3BvcnQgPSBNYXRoLmZsb29yKHRoaXMuY29udGFpbmVyRWxlbWVudC5vZmZzZXRIZWlnaHQgLyB0
aGlzLmNvbnRlbnRFbGVtZW50LmZpcnN0Q2hpbGQub2Zmc2V0SGVpZ2h0KTsKLSAgICB9LAotCi0g
ICAgLyoqCi0gICAgICogQHBhcmFtIHtBbmNob3JCb3h9IGFuY2hvckJveAotICAgICAqIEBwYXJh
bSB7QXJyYXkuPHN0cmluZz49fSBjb21wbGV0aW9ucwotICAgICAqIEBwYXJhbSB7bnVtYmVyPX0g
c2VsZWN0ZWRJbmRleAotICAgICAqIEBwYXJhbSB7Ym9vbGVhbj19IGNhblNob3dGb3JTaW5nbGVJ
dGVtCi0gICAgICovCi0gICAgX2NvbXBsZXRpb25zUmVhZHk6IGZ1bmN0aW9uKGFuY2hvckJveCwg
Y29tcGxldGlvbnMsIHNlbGVjdGVkSW5kZXgsIGNhblNob3dGb3JTaW5nbGVJdGVtKQotICAgIHsK
LSAgICAgICAgaWYgKHRoaXMuX2NhblNob3dCb3goY29tcGxldGlvbnMsIGNhblNob3dGb3JTaW5n
bGVJdGVtKSkgewotICAgICAgICAgICAgdGhpcy5fdXBkYXRlSXRlbXMoY29tcGxldGlvbnMsIHNl
bGVjdGVkSW5kZXgpOwotICAgICAgICAgICAgdGhpcy5fdXBkYXRlQm94UG9zaXRpb24oYW5jaG9y
Qm94KTsKLSAgICAgICAgICAgIGlmICghdGhpcy52aXNpYmxlKQotICAgICAgICAgICAgICAgIHRo
aXMuX2JvZHlFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuX2VsZW1lbnQpOwotICAgICAgICAgICAg
dGhpcy5fcmVtZW1iZXJSb3dDb3VudFBlclZpZXdwb3J0KCk7Ci0gICAgICAgIH0gZWxzZQotICAg
ICAgICAgICAgdGhpcy5oaWRlKCk7Ci0gICAgfSwKLQotICAgIHVwS2V5UHJlc3NlZDogZnVuY3Rp
b24oZXZlbnQpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fc2VsZWN0Q2xvc2VzdCgtMSwg
dHJ1ZSk7Ci0gICAgfSwKLQotICAgIGRvd25LZXlQcmVzc2VkOiBmdW5jdGlvbihldmVudCkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9zZWxlY3RDbG9zZXN0KDEsIHRydWUpOwotICAgIH0s
Ci0KLSAgICBwYWdlVXBLZXlQcmVzc2VkOiBmdW5jdGlvbihldmVudCkKLSAgICB7Ci0gICAgICAg
IHJldHVybiB0aGlzLl9zZWxlY3RDbG9zZXN0KC10aGlzLl9yb3dDb3VudFBlclZpZXdwb3J0LCBm
YWxzZSk7Ci0gICAgfSwKLQotICAgIHBhZ2VEb3duS2V5UHJlc3NlZDogZnVuY3Rpb24oZXZlbnQp
Ci0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fc2VsZWN0Q2xvc2VzdCh0aGlzLl9yb3dDb3Vu
dFBlclZpZXdwb3J0LCBmYWxzZSk7Ci0gICAgfSwKLQotICAgIGVudGVyS2V5UHJlc3NlZDogZnVu
Y3Rpb24oZXZlbnQpCi0gICAgewotICAgICAgICB2YXIgaGFzU2VsZWN0ZWRJdGVtID0gISF0aGlz
Ll9zZWxlY3RlZEVsZW1lbnQ7Ci0gICAgICAgIHRoaXMuYWNjZXB0U3VnZ2VzdGlvbigpOwotCi0g
ICAgICAgIC8vIFJlcG9ydCB0aGUgZXZlbnQgYXMgbm9uLWhhbmRsZWQgaWYgdGhlcmUgaXMgbm8g
c2VsZWN0ZWQgaXRlbSwKLSAgICAgICAgLy8gdG8gY29tbWl0IHRoZSBpbnB1dCBvciBoYW5kbGUg
aXQgb3RoZXJ3aXNlLgotICAgICAgICByZXR1cm4gaGFzU2VsZWN0ZWRJdGVtOwotICAgIH0sCi0K
LSAgICB0YWJLZXlQcmVzc2VkOiBmdW5jdGlvbihldmVudCkKLSAgICB7Ci0gICAgICAgIHJldHVy
biB0aGlzLmVudGVyS2V5UHJlc3NlZChldmVudCk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9XZWJLaXQucXJjIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9XZWJLaXQucXJjCmluZGV4IGZmMzU5MWRhZjRiMDQ0MWEy
ZTY1NTllNWZhMzY2MTU0OWM0OWRjYjEuLmMwMzA1NjhkMDFhMzkyYjhiMmIwZDJmOGFjY2M1OTgz
OTJmYjc4YjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
V2ViS2l0LnFyYworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1dlYktp
dC5xcmMKQEAgLTE5Nyw2ICsxOTcsNyBAQAogICAgIDxmaWxlPlN0eWxlU2hlZXRPdXRsaW5lRGlh
bG9nLmpzPC9maWxlPgogICAgIDxmaWxlPlN0eWxlc1NvdXJjZU1hcHBpbmcuanM8L2ZpbGU+CiAg
ICAgPGZpbGU+U3R5bGVzU2lkZWJhclBhbmUuanM8L2ZpbGU+CisgICAgPGZpbGU+U3VnZ2VzdEJv
eC5qczwvZmlsZT4KICAgICA8ZmlsZT5UYWJiZWRFZGl0b3JDb250YWluZXIuanM8L2ZpbGU+CiAg
ICAgPGZpbGU+VGFiYmVkUGFuZS5qczwvZmlsZT4KICAgICA8ZmlsZT5UZXN0Q29udHJvbGxlci5q
czwvZmlsZT4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
aW5zcGVjdG9yLmh0bWwgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3Bl
Y3Rvci5odG1sCmluZGV4IDM1NjkwZjU0ZjIzMDQxMTI3N2VlNmU0NzBmMTU3YTU5YjAyNjQ0NTcu
LmM0NjQ5NTYyZTlmYzMyMTUzNWE2NGJmZGZlNDExYTE3ODdjYzc0ZTYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmh0bWwKKysrIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuaHRtbApAQCAtNTYsNiAr
NTYsNyBAQCBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgogICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9
IkNvbnRleHRNZW51LmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNj
cmlwdCIgc3JjPSJTb2Z0Q29udGV4dE1lbnUuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgdHlw
ZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IktleWJvYXJkU2hvcnRjdXQuanMiPjwvc2NyaXB0Pgor
ICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IlN1Z2dlc3RCb3guanMiPjwv
c2NyaXB0PgogICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IlRleHRQcm9t
cHQuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9
IlBvcG92ZXIuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0
IiBzcmM9IlBsYWNhcmQuanMiPjwvc2NyaXB0Pgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>