<?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>58113</bug_id>
          
          <creation_ts>2011-04-07 19:59:30 -0700</creation_ts>
          <short_desc>[Refactoring] DocumentMarkerController::MarkerMapVectorPair should be replaced with a list of some class.</short_desc>
          <delta_ts>2011-04-27 16:54:22 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>HTML Editing</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>58111</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Hajime Morrita">morrita</reporter>
          <assigned_to name="Hajime Morrita">morrita</assigned_to>
          <cc>abarth</cc>
    
    <cc>dbates</cc>
    
    <cc>eric</cc>
    
    <cc>rniwa</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>381947</commentid>
    <comment_count>0</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2011-04-07 19:59:30 -0700</bug_when>
    <thetext>DocumentMarkerController maintains two lists for each marked node.
But these list should be unified to single list.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>388666</commentid>
    <comment_count>1</comment_count>
      <attachid>90231</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2011-04-19 11:48:23 -0700</bug_when>
    <thetext>Created attachment 90231
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>388668</commentid>
    <comment_count>2</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2011-04-19 11:49:11 -0700</bug_when>
    <thetext>CC-ing people who wrote original DocumentMarkerController class.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>393087</commentid>
    <comment_count>3</comment_count>
      <attachid>90231</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2011-04-26 16:55:15 -0700</bug_when>
    <thetext>Comment on attachment 90231
Patch

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

Does this change improve memory usage or is it just a refactor.  Might be good to include that in the changelog.

r- to get out of the review queue so you can upload a version with the fixed ChangeLog

&gt; Source/WebCore/ChangeLog:47
&gt; +2011-04-19  MORITA Hajime  &lt;morrita@google.com&gt;
&gt; +
&gt; +        Reviewed by NOBODY (OOPS!).

Change description shows up twice.

&gt; Source/WebCore/dom/DocumentMarkerController.cpp:338
&gt; +        unsigned markerCount = list-&gt;size();

Nit: Should we use size_t here?

&gt; Source/WebCore/dom/RenderedDocumentMarker.h:50
&gt; +    static IntRect invalidMarkerRect() { return IntRect(-1, -1, -1, -1); }

Nit: Should we just make this a const static member variable to avoid making a copy for every call?  I guess that has the downside of needing to add a .cpp file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>393637</commentid>
    <comment_count>4</comment_count>
      <attachid>91309</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2011-04-27 10:21:19 -0700</bug_when>
    <thetext>Created attachment 91309
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>393642</commentid>
    <comment_count>5</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2011-04-27 10:25:10 -0700</bug_when>
    <thetext>Hi Tony, thank you for taking a look!
I updated to address the problem.

&gt; &gt; Source/WebCore/ChangeLog:47
&gt; &gt; +2011-04-19  MORITA Hajime  &lt;morrita@google.com&gt;
&gt; &gt; +
&gt; &gt; +        Reviewed by NOBODY (OOPS!).
&gt; 
&gt; Change description shows up twice.
Fixed.

&gt; 
&gt; &gt; Source/WebCore/dom/DocumentMarkerController.cpp:338
&gt; &gt; +        unsigned markerCount = list-&gt;size();
&gt; 
&gt; Nit: Should we use size_t here?
&gt; 
Sure.

&gt; &gt; Source/WebCore/dom/RenderedDocumentMarker.h:50
&gt; &gt; +    static IntRect invalidMarkerRect() { return IntRect(-1, -1, -1, -1); }
&gt; 
&gt; Nit: Should we just make this a const static member variable to avoid making a copy for every call?  I guess that has the downside of needing to add a .cpp file.
Using static class variables generates a &quot;global initializer&quot; error on XCode.
I changed it to use a function static variable, as others do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>393646</commentid>
    <comment_count>6</comment_count>
      <attachid>91309</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2011-04-27 10:42:15 -0700</bug_when>
    <thetext>Comment on attachment 91309
Patch

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

&gt; Source/WebCore/dom/DocumentMarkerController.cpp:457
&gt; +// XXX: something wrong

Did you mean to remove this?

&gt; Source/WebCore/dom/DocumentMarkerController.cpp:466
&gt; +    unsigned markerCount = list-&gt;size();

Nit: size_t</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>393918</commentid>
    <comment_count>7</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2011-04-27 16:02:26 -0700</bug_when>
    <thetext>Hi Tony, thank you for quick review!
I&apos;ll land this after fix your points.

(In reply to comment #6)
&gt; (From update of attachment 91309 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=91309&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/dom/DocumentMarkerController.cpp:457
&gt; &gt; +// XXX: something wrong
&gt; 
&gt; Did you mean to remove this?
Hmm. I don&apos;t remember what this means... I&apos;m removing this because it doesn&apos;t makes sense.

&gt; 
&gt; &gt; Source/WebCore/dom/DocumentMarkerController.cpp:466
&gt; &gt; +    unsigned markerCount = list-&gt;size();
&gt; 
&gt; Nit: size_t
Will fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>393927</commentid>
    <comment_count>8</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2011-04-27 16:09:11 -0700</bug_when>
    <thetext>Committed r85118: &lt;http://trac.webkit.org/changeset/85118&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>394001</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-04-27 16:54:22 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/85118 might have broken Qt Linux Release</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>90231</attachid>
            <date>2011-04-19 11:48:23 -0700</date>
            <delta_ts>2011-04-27 10:21:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-58113-20110419114822.patch</filename>
            <type>text/plain</type>
            <size>36072</size>
            <attacher name="Hajime Morrita">morrita</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODQyNzIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAwZDUzNmM1M2YwNzgyZTg0
NDExYmZjZjE1MzFmZDAzMWU3MmMzZTJhLi44MWZhZGEwY2Q2NDYyMzdmMDU1MzJiNjhhMWE0OWY1
Y2Y0NmY2Y2Q1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzkgQEAKKzIwMTEtMDQtMTkgIE1PUklU
QSBIYWppbWUgIDxtb3JyaXRhQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpNYXJrZXJN
YXBWZWN0b3JQYWlyIHNob3VsZCBiZSByZXBsYWNlZCB3aXRoIGEgbGlzdCBvZiBzb21lIGNsYXNz
LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTgxMTMK
KworICAgICAgICAqIEludHJvZHVjZWQgUmVuZGVyZWREb2N1bWVudE1hcmtlciwgYSBzdWJjbGFz
cyBvZiBEb2N1bWVudE1hcmtlci4KKyAgICAgICAgKiBFbGltaW5hdGVkIFZlY3RvcjxJbnRSZWN0
PiBhbmQgbW92ZSB0aGUgSW50UmVjdCBpbnRvIFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIKKyAgICAg
ICAgKiBOb3cgTWFya2VyTWFwVmVjdG9yUGFpciBpcyBubyBsb25nZXIgdXNlZC4KKyAgICAgICAg
CisgICAgICAgIE5vIG5ldyB0ZXN0cywgTm8gYmVoYXZpb3IgY2hhbmdlLgorCisgICAgICAgICog
R05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICog
V2ViQ29yZS5wcm86CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6Cisg
ICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGRv
bS9Eb2N1bWVudE1hcmtlci5oOgorICAgICAgICAqIGRvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xs
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjphZGRN
YXJrZXIpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpjb3B5
TWFya2Vycyk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnJl
bW92ZU1hcmtlcnMpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJDb250cm9sbGVy
OjptYXJrZXJDb250YWluaW5nUG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJr
ZXJDb250cm9sbGVyOjptYXJrZXJzRm9yTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVu
dE1hcmtlckNvbnRyb2xsZXI6OnJlbmRlcmVkUmVjdHNGb3JNYXJrZXJzKToKKyAgICAgICAgKFdl
YkNvcmU6OkRvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6cmVtb3ZlTWFya2Vyc0Zyb21MaXN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6cmVwYWludE1hcmtl
cnMpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpzZXRSZW5k
ZXJlZFJlY3RGb3JNYXJrZXIpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJDb250
cm9sbGVyOjppbnZhbGlkYXRlUmVuZGVyZWRSZWN0c0Zvck1hcmtlcnNJblJlY3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpzaGlmdE1hcmtlcnMpOgorICAg
ICAgICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpzZXRNYXJrZXJzQWN0aXZl
KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6Y2xlYXJEZXNj
cmlwdGlvbk9uTWFya2Vyc0ludGVyc2VjdGluZ1JhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkRv
Y3VtZW50TWFya2VyQ29udHJvbGxlcjo6c2hvd01hcmtlcnMpOgorICAgICAgICAqIGRvbS9Eb2N1
bWVudE1hcmtlckNvbnRyb2xsZXIuaDoKKyAgICAgICAgKiBkb20vUmVuZGVyZWREb2N1bWVudE1h
cmtlci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcmVkRG9jdW1lbnRNYXJrZXI6
OlJlbmRlcmVkRG9jdW1lbnRNYXJrZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyZWREb2N1
bWVudE1hcmtlcjo6aXNSZW5kZXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJlZERvY3Vt
ZW50TWFya2VyOjpjb250YWlucyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJlZERvY3VtZW50
TWFya2VyOjpzZXRSZW5kZXJlZFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyZWREb2N1
bWVudE1hcmtlcjo6cmVuZGVyZWRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcmVkRG9j
dW1lbnRNYXJrZXI6OmludmFsaWRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyZWREb2N1
bWVudE1hcmtlcjo6aW52YWxpZE1hcmtlclJlY3QpOgorCisyMDExLTA0LTE5ICBNT1JJVEEgSGFq
aW1lICA8bW9ycml0YUBnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6TWFya2VyTWFwVmVj
dG9yUGFpciBzaG91bGQgYmUgcmVwbGFjZWQgd2l0aCBhIGxpc3Qgb2Ygc29tZSBjbGFzcy4KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU4MTEzCisgICAg
ICAgIAorICAgICAgICBObyBuZXcgdGVzdHMsIE5vIGJlaGF2aW9yIGNoYW5nZS4KKworICAgICAg
ICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAg
ICAqIFdlYkNvcmUucHJvOgorICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9q
OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajogICAgICAgIAor
ICAgICAgICAqIGRvbS9Eb2N1bWVudE1hcmtlci5oOgorICAgICAgICAqIGRvbS9Eb2N1bWVudE1h
cmtlckNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJDb250
cm9sbGVyOjphZGRNYXJrZXIpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJDb250
cm9sbGVyOjpjb3B5TWFya2Vycyk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE1hcmtlckNv
bnRyb2xsZXI6OnJlbW92ZU1hcmtlcnMpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJr
ZXJDb250cm9sbGVyOjptYXJrZXJDb250YWluaW5nUG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6
RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjptYXJrZXJzRm9yTm9kZSk6CisgICAgICAgIChXZWJD
b3JlOjpEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnJlbmRlcmVkUmVjdHNGb3JNYXJrZXJzKToK
KyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6cmVtb3ZlTWFya2Vy
c0Zyb21MaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6
cmVwYWludE1hcmtlcnMpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJDb250cm9s
bGVyOjpzZXRSZW5kZXJlZFJlY3RGb3JNYXJrZXIpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1l
bnRNYXJrZXJDb250cm9sbGVyOjppbnZhbGlkYXRlUmVuZGVyZWRSZWN0c0Zvck1hcmtlcnNJblJl
Y3QpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpzaGlmdE1h
cmtlcnMpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpzZXRN
YXJrZXJzQWN0aXZlKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50TWFya2VyQ29udHJvbGxl
cjo6Y2xlYXJEZXNjcmlwdGlvbk9uTWFya2Vyc0ludGVyc2VjdGluZ1JhbmdlKToKKyAgICAgICAg
KFdlYkNvcmU6OkRvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6c2hvd01hcmtlcnMpOgorICAgICAg
ICAqIGRvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuaDoKKwogMjAxMS0wNC0xOSAgUnlvc3Vr
ZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEaW1pdHJp
IEdsYXprb3YuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFt
IGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQppbmRleCAyODAxMjMyZmQ0YmJl
OWMwOGIwMTE1NGViOGM2ZjU1OTM5MjRlYjM0Li4wOGZlYzYyMGMyM2Q0MDE4ZDRkMTJiNGU0OWJj
MTExMWUyOWJlMjVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0
LmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTEyMzIsNiAr
MTIzMiw3IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvZG9tL1Jhd0Rh
dGFEb2N1bWVudFBhcnNlci5oIFwKIAlTb3VyY2UvV2ViQ29yZS9kb20vUmVnaXN0ZXJlZEV2ZW50
TGlzdGVuZXIuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9kb20vUmVnaXN0ZXJlZEV2ZW50TGlzdGVu
ZXIuaCBcCisJU291cmNlL1dlYkNvcmUvZG9tL1JlbmRlcmVkRG9jdW1lbnRNYXJrZXIuaCBcCiAJ
U291cmNlL1dlYkNvcmUvZG9tL1Njb3BlZEV2ZW50UXVldWUuY3BwIFwKIAlTb3VyY2UvV2ViQ29y
ZS9kb20vU2NvcGVkRXZlbnRRdWV1ZS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0YWJs
ZURvY3VtZW50UGFyc2VyLmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggM2E1Y2VhNTY0MzM3Zjg2
YjI0OGYyMjI0YmI4NDBiZmIyYzRmZDNiNC4uOTk1MTYxZGFhMTMxOWE2MTAzMmMyNmQ0NWUxYjUy
MjdkYzBjYzAyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBi
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtNTQzLDYgKzU0Myw3IEBACiAgICAgICAg
ICAgICAnZG9tL1JhbmdlLmgnLAogICAgICAgICAgICAgJ2RvbS9SYW5nZUJvdW5kYXJ5UG9pbnQu
aCcsCiAgICAgICAgICAgICAnZG9tL1JlZ2lzdGVyZWRFdmVudExpc3RlbmVyLmgnLAorICAgICAg
ICAgICAgJ2RvbS9SZW5kZXJlZERvY3VtZW50TWFya2VyLmgnLAogICAgICAgICAgICAgJ2RvbS9T
Y3JpcHRFeGVjdXRpb25Db250ZXh0LmgnLAogICAgICAgICAgICAgJ2RvbS9TY3JpcHRSdW5uZXIu
aCcsCiAgICAgICAgICAgICAnZG9tL1NoYWRvd1Jvb3QuaCcsCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnBybyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCmluZGV4IGQ4
MDU4MDk2YWY2NjQyMmE2ZDI5M2Y0N2QwMjZlNWVlY2QxYzcwMGYuLjJhYjhmMzQ2MDlhNzNlNzVj
MTY3ODA2ZmU3ZGQ2MzM4NGRmY2JhOGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUucHJvCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCkBAIC0xNTA2LDYgKzE1MDYs
NyBAQCBIRUFERVJTICs9IFwKICAgICBkb20vUXVhbGlmaWVkTmFtZS5oIFwKICAgICBkb20vUmFu
Z2UuaCBcCiAgICAgZG9tL1JlZ2lzdGVyZWRFdmVudExpc3RlbmVyLmggXAorICAgIGRvbS9SZW5k
ZXJlZERvY3VtZW50TWFya2VyLmggXAogICAgIGRvbS9TY3JpcHRFbGVtZW50LmggXAogICAgIGRv
bS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmggXAogICAgIGRvbS9TZWxlY3RFbGVtZW50LmggXApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2og
Yi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagppbmRleCA2NzY5
NDljZmY2NDlhOGUwMzU5NTVkMTJlYTRiYWRiMGFmZTM5ZWRmLi4yMGFkY2EzNzU0Yjc3MjJkMTIz
YzMxMjM1NDc4YTI4YTQzM2IzNDlkIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
LnZjcHJvai9XZWJDb3JlLnZjcHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJv
ai9XZWJDb3JlLnZjcHJvagpAQCAtNDYyNTgsNiArNDYyNTgsMTAgQEAKIAkJCQk+CiAJCQk8L0Zp
bGU+CiAJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cZG9tXFJlbmRlcmVkRG9jdW1lbnRN
YXJrZXIuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0i
Li5cZG9tXFNjb3BlZEV2ZW50UXVldWUuY3BwIgogCQkJCT4KIAkJCQk8RmlsZUNvbmZpZ3VyYXRp
b24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agppbmRleCA4NDc1YTkxODc0OTNlNjJhZjQ5OGQwMzE5NWJiZTg2OGMzMGY3ODIzLi4yYmQzNmY3
M2ZhNTljOWYxYWRlNDQ4MjU4NDJlOTgwNmQ5MzViNjY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0zMjQ1LDYgKzMyNDUsNyBA
QAogCQlBNzVFOEI4RDBFMURFMkQ2MDA3RjI0ODEgLyogRkVDb21wb25lbnRUcmFuc2Zlci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTc1RThCODUwRTFE
RTJENjAwN0YyNDgxIC8qIEZFQ29tcG9uZW50VHJhbnNmZXIuaCAqLzsgfTsKIAkJQTc1RThCOEUw
RTFERTJENjAwN0YyNDgxIC8qIEZFQ29tcG9zaXRlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3NUU4Qjg2MEUxREUyRDYwMDdGMjQ4MSAvKiBGRUNv
bXBvc2l0ZS5jcHAgKi87IH07CiAJCUE3NUU4QjhGMEUxREUyRDYwMDdGMjQ4MSAvKiBGRUNvbXBv
c2l0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTc1
RThCODcwRTFERTJENjAwN0YyNDgxIC8qIEZFQ29tcG9zaXRlLmggKi87IH07CisJCUE3NkU1RjdG
MTM1RTBEQ0YwMEE2OTgzNyAvKiBSZW5kZXJlZERvY3VtZW50TWFya2VyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzZFNUY3RTEzNUUwRENGMDBBNjk4
MzcgLyogUmVuZGVyZWREb2N1bWVudE1hcmtlci5oICovOyB9OwogCQlBNzc5NzkxOTBENkI5RDBD
MDAzODUxQjkgLyogSW1hZ2VEYXRhLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEE3Nzk3OTEzMEQ2QjlEMEMwMDM4NTFCOSAvKiBJbWFnZURhdGEuY3Bw
ICovOyB9OwogCQlBNzc5NzkxQTBENkI5RDBDMDAzODUxQjkgLyogSW1hZ2VEYXRhLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzc5NzkxNDBENkI5RDBD
MDAzODUxQjkgLyogSW1hZ2VEYXRhLmggKi87IH07CiAJCUE3Nzk3OTI4MEQ2QjlFNjQwMDM4NTFC
OSAvKiBKU0ltYWdlRGF0YS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBNzc5NzkyNDBENkI5RTY0MDAzODUxQjkgLyogSlNJbWFnZURhdGEuY3BwICov
OyB9OwpAQCAtOTgxNCw2ICs5ODE1LDcgQEAKIAkJQTc1RThCODUwRTFERTJENjAwN0YyNDgxIC8q
IEZFQ29tcG9uZW50VHJhbnNmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
RkVDb21wb25lbnRUcmFuc2Zlci5oOyBwYXRoID0gZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3NUU4Qjg2MEUxREUyRDYwMDdGMjQ4
MSAvKiBGRUNvbXBvc2l0ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBGRUNvbXBvc2l0ZS5jcHA7IHBhdGggPSBmaWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc1RThCODcwRTFERTJENjAwN0YyNDgxIC8qIEZFQ29t
cG9zaXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZFQ29tcG9zaXRlLmg7
IHBhdGggPSBmaWx0ZXJzL0ZFQ29tcG9zaXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUE3NkU1RjdFMTM1RTBEQ0YwMEE2OTgzNyAvKiBSZW5kZXJlZERvY3VtZW50TWFya2VyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc3OTc5MTMwRDZCOUQwQzAwMzg1MUI5
IC8qIEltYWdlRGF0YS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJ
bWFnZURhdGEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzc5NzkxNDBENkI5
RDBDMDAzODUxQjkgLyogSW1hZ2VEYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEltYWdlRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzc5NzkxNTBE
NkI5RDBDMDAzODUxQjkgLyogSW1hZ2VEYXRhLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBJ
bWFnZURhdGEuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTk1NjUsNiArMTk1
NjcsNyBAQAogCQkJCUE4NEQ4MjdCMTFEMzMzRUQwMDk3Mjk5MCAvKiBSYXdEYXRhRG9jdW1lbnRQ
YXJzZXIuaCAqLywKIAkJCQk4NTAzMUIzNTBBNDRFRkM3MDBGOTkyRTAgLyogUmVnaXN0ZXJlZEV2
ZW50TGlzdGVuZXIuY3BwICovLAogCQkJCTg1MDMxQjM2MEE0NEVGQzcwMEY5OTJFMCAvKiBSZWdp
c3RlcmVkRXZlbnRMaXN0ZW5lci5oICovLAorCQkJCUE3NkU1RjdFMTM1RTBEQ0YwMEE2OTgzNyAv
KiBSZW5kZXJlZERvY3VtZW50TWFya2VyLmggKi8sCiAJCQkJOUJEMEJGOTIxMkE0MkJGNTAwNzJG
RDQzIC8qIFNjb3BlZEV2ZW50UXVldWUuY3BwICovLAogCQkJCTlCRDBCRjkxMTJBNDJCRjUwMDcy
RkQ0MyAvKiBTY29wZWRFdmVudFF1ZXVlLmggKi8sCiAJCQkJQTg0RDgyQzAxMUQzNDc0ODAwOTcy
OTkwIC8qIFNjcmlwdGFibGVEb2N1bWVudFBhcnNlci5jcHAgKi8sCkBAIC0yMjE5OCw2ICsyMjIw
MSw3IEBACiAJCQkJRDA2QzBEOEYwQ0ZEMTE0NjAwNjVGNDNGIC8qIFJlbW92ZUZvcm1hdENvbW1h
bmQuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzMzA5RTA1MDk5RTY0OTIwMDU2RTU4MSAvKiBSZW1v
dmVOb2RlQ29tbWFuZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMzMDlFMDcwOTlFNjQ5MjAwNTZF
NTgxIC8qIFJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW5Db21tYW5kLmggaW4gSGVhZGVycyAq
LywKKwkJCQlBNzZFNUY3RjEzNUUwRENGMDBBNjk4MzcgLyogUmVuZGVyZWREb2N1bWVudE1hcmtl
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNFQTQ4NUMwOTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRl
ckFwcGxldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNFQTQ4NUUwOTdEOTMwMjAwOTRDOUU0IC8q
IFJlbmRlckFyZW5hLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0VBNDg2MDA5N0Q5MzAyMDA5NEM5
RTQgLyogUmVuZGVyQmxvY2suaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZG9tL0RvY3VtZW50TWFya2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRN
YXJrZXIuaAppbmRleCAxNzExYTk2ODcyYTA2NzczYTI3YzczM2VkNDEzNTQ5YmVjMzAzMzU4Li4w
ZjIxMzQ1ZTM4NGRlZjQwZDRmOGI4YmQ1NjIxNGE0MDc3NWExNzA0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
RG9jdW1lbnRNYXJrZXIuaApAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgIlBsYXRmb3JtU3Ry
aW5nLmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KIAorCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIC8vIEEgcmFuZ2Ugb2YgYSBub2RlIHdpdGhpbiBhIGRvY3VtZW50IHRoYXQgaXMgIm1hcmtl
ZCIsIHN1Y2ggYXMgdGhlIHJhbmdlIG9mIGEgbWlzc3BlbGxlZCB3b3JkLgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50TWFya2VyQ29udHJvbGxlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmNwcAppbmRleCBkOTdmMmFmMWJi
N2ZjMWZlNTE2NTk0MjE4MjE5YWExNjJiZjE4YzIyLi5jYzU2YjExY2VlMWVkNmM5MzE0ZTE2ZGM1
ZWZkMTNmYmQwYjFiMTJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRN
YXJrZXJDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJr
ZXJDb250cm9sbGVyLmNwcApAQCAtMjksMTUgKzI5LDExIEBACiAKICNpbmNsdWRlICJOb2RlLmgi
CiAjaW5jbHVkZSAiUmFuZ2UuaCIKKyNpbmNsdWRlICJSZW5kZXJlZERvY3VtZW50TWFya2VyLmgi
CiAjaW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3Rh
dGljIEludFJlY3QgcGxhY2Vob2xkZXJSZWN0Rm9yTWFya2VyKCkKLXsKLSAgICByZXR1cm4gSW50
UmVjdCgtMSwgLTEsIC0xLCAtMSk7Ci19Ci0KIGlubGluZSBib29sIERvY3VtZW50TWFya2VyQ29u
dHJvbGxlcjo6cG9zc2libHlIYXNNYXJrZXJzKERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlcyB0
eXBlcykKIHsKICAgICByZXR1cm4gbV9wb3NzaWJseUV4aXN0aW5nTWFya2VyVHlwZXMuaW50ZXJz
ZWN0cyh0eXBlcyk7CkBAIC04NSw3ICs4MSw3IEBAIHZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9s
bGVyOjpyZW1vdmVNYXJrZXJzKFJhbmdlKiByYW5nZSwgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlCiAv
LyBNYXJrZXJzIGFyZSBzdG9yZWQgaW4gb3JkZXIgc29ydGVkIGJ5IHRoZWlyIHN0YXJ0IG9mZnNl
dC4KIC8vIE1hcmtlcnMgb2YgdGhlIHNhbWUgdHlwZSBkbyBub3Qgb3ZlcmxhcCBlYWNoIG90aGVy
LgogCi12b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6YWRkTWFya2VyKE5vZGUqIG5vZGUs
IERvY3VtZW50TWFya2VyIG5ld01hcmtlcikgCit2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxl
cjo6YWRkTWFya2VyKE5vZGUqIG5vZGUsIGNvbnN0IERvY3VtZW50TWFya2VyJiBuZXdNYXJrZXIp
IAogewogICAgIEFTU0VSVChuZXdNYXJrZXIuZW5kT2Zmc2V0ID49IG5ld01hcmtlci5zdGFydE9m
ZnNldCk7CiAgICAgaWYgKG5ld01hcmtlci5lbmRPZmZzZXQgPT0gbmV3TWFya2VyLnN0YXJ0T2Zm
c2V0KQpAQCAtOTMsMzAgKzg5LDI2IEBAIHZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjph
ZGRNYXJrZXIoTm9kZSogbm9kZSwgRG9jdW1lbnRNYXJrZXIgbmV3TWFya2VyKQogCiAgICAgbV9w
b3NzaWJseUV4aXN0aW5nTWFya2VyVHlwZXMuYWRkKG5ld01hcmtlci50eXBlKTsKIAotICAgIE1h
cmtlck1hcFZlY3RvclBhaXIqIHZlY3RvclBhaXIgPSBtX21hcmtlcnMuZ2V0KG5vZGUpOworICAg
IE1hcmtlckxpc3QqIGxpc3QgPSBtX21hcmtlcnMuZ2V0KG5vZGUpOwogCi0gICAgaWYgKCF2ZWN0
b3JQYWlyKSB7Ci0gICAgICAgIHZlY3RvclBhaXIgPSBuZXcgTWFya2VyTWFwVmVjdG9yUGFpcjsK
LSAgICAgICAgdmVjdG9yUGFpci0+Zmlyc3QuYXBwZW5kKG5ld01hcmtlcik7Ci0gICAgICAgIHZl
Y3RvclBhaXItPnNlY29uZC5hcHBlbmQocGxhY2Vob2xkZXJSZWN0Rm9yTWFya2VyKCkpOwotICAg
ICAgICBtX21hcmtlcnMuc2V0KG5vZGUsIHZlY3RvclBhaXIpOworICAgIGlmICghbGlzdCkgewor
ICAgICAgICBsaXN0ID0gbmV3IE1hcmtlckxpc3Q7CisgICAgICAgIGxpc3QtPmFwcGVuZChSZW5k
ZXJlZERvY3VtZW50TWFya2VyKG5ld01hcmtlcikpOworICAgICAgICBtX21hcmtlcnMuc2V0KG5v
ZGUsIGxpc3QpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIFZlY3RvcjxEb2N1bWVudE1hcmtlcj4m
IG1hcmtlcnMgPSB2ZWN0b3JQYWlyLT5maXJzdDsKLSAgICAgICAgVmVjdG9yPEludFJlY3Q+JiBy
ZWN0cyA9IHZlY3RvclBhaXItPnNlY29uZDsKLSAgICAgICAgc2l6ZV90IG51bU1hcmtlcnMgPSBt
YXJrZXJzLnNpemUoKTsKLSAgICAgICAgQVNTRVJUKG51bU1hcmtlcnMgPT0gcmVjdHMuc2l6ZSgp
KTsKKyAgICAgICAgUmVuZGVyZWREb2N1bWVudE1hcmtlciB0b0luc2VydChuZXdNYXJrZXIpOwor
ICAgICAgICBzaXplX3QgbnVtTWFya2VycyA9IGxpc3QtPnNpemUoKTsKICAgICAgICAgc2l6ZV90
IGk7CiAgICAgICAgIC8vIEl0ZXJhdGUgb3ZlciBhbGwgbWFya2VycyB3aG9zZSBzdGFydCBvZmZz
ZXQgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBuZXcgbWFya2VyJ3MuCiAgICAgICAgIC8v
IElmIG9uZSBvZiB0aGVtIGlzIG9mIHRoZSBzYW1lIHR5cGUgYXMgdGhlIG5ldyBtYXJrZXIgYW5k
IHRvdWNoZXMgaXQgb3IgaW50ZXJzZWN0cyB3aXRoIGl0CiAgICAgICAgIC8vICh0aGVyZSBpcyBh
dCBtb3N0IG9uZSksIHJlbW92ZSBpdCBhbmQgYWRqdXN0IHRoZSBuZXcgbWFya2VyJ3Mgc3RhcnQg
b2Zmc2V0IHRvIGVuY29tcGFzcyBpdC4KICAgICAgICAgZm9yIChpID0gMDsgaSA8IG51bU1hcmtl
cnM7ICsraSkgewotICAgICAgICAgICAgRG9jdW1lbnRNYXJrZXIgbWFya2VyID0gbWFya2Vyc1tp
XTsKLSAgICAgICAgICAgIGlmIChtYXJrZXIuc3RhcnRPZmZzZXQgPiBuZXdNYXJrZXIuc3RhcnRP
ZmZzZXQpCisgICAgICAgICAgICBEb2N1bWVudE1hcmtlciBtYXJrZXIgPSBsaXN0LT5hdChpKTsK
KyAgICAgICAgICAgIGlmIChtYXJrZXIuc3RhcnRPZmZzZXQgPiB0b0luc2VydC5zdGFydE9mZnNl
dCkKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGlmIChtYXJrZXIudHlwZSA9
PSBuZXdNYXJrZXIudHlwZSAmJiBtYXJrZXIuZW5kT2Zmc2V0ID49IG5ld01hcmtlci5zdGFydE9m
ZnNldCkgewotICAgICAgICAgICAgICAgIG5ld01hcmtlci5zdGFydE9mZnNldCA9IG1hcmtlci5z
dGFydE9mZnNldDsKLSAgICAgICAgICAgICAgICBtYXJrZXJzLnJlbW92ZShpKTsKLSAgICAgICAg
ICAgICAgICByZWN0cy5yZW1vdmUoaSk7CisgICAgICAgICAgICBpZiAobWFya2VyLnR5cGUgPT0g
dG9JbnNlcnQudHlwZSAmJiBtYXJrZXIuZW5kT2Zmc2V0ID49IHRvSW5zZXJ0LnN0YXJ0T2Zmc2V0
KSB7CisgICAgICAgICAgICAgICAgdG9JbnNlcnQuc3RhcnRPZmZzZXQgPSBtYXJrZXIuc3RhcnRP
ZmZzZXQ7CisgICAgICAgICAgICAgICAgbGlzdC0+cmVtb3ZlKGkpOwogICAgICAgICAgICAgICAg
IG51bU1hcmtlcnMtLTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KQEAg
LTEyNiwxNCArMTE4LDEzIEBAIHZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjphZGRNYXJr
ZXIoTm9kZSogbm9kZSwgRG9jdW1lbnRNYXJrZXIgbmV3TWFya2VyKQogICAgICAgICAvLyByZW1v
dmluZyBtYXJrZXJzIG9mIHRoZSBzYW1lIHR5cGUgYXMgdGhlIG5ldyBtYXJrZXIgd2hpY2ggdG91
Y2ggaXQgb3IgaW50ZXJzZWN0IHdpdGggaXQsCiAgICAgICAgIC8vIGFkanVzdGluZyB0aGUgbmV3
IG1hcmtlcidzIGVuZCBvZmZzZXQgdG8gY292ZXIgdGhlbSBpZiBuZWNlc3NhcnkuCiAgICAgICAg
IHdoaWxlIChqIDwgbnVtTWFya2VycykgewotICAgICAgICAgICAgRG9jdW1lbnRNYXJrZXIgbWFy
a2VyID0gbWFya2Vyc1tqXTsKLSAgICAgICAgICAgIGlmIChtYXJrZXIuc3RhcnRPZmZzZXQgPiBu
ZXdNYXJrZXIuZW5kT2Zmc2V0KQorICAgICAgICAgICAgRG9jdW1lbnRNYXJrZXIgbWFya2VyID0g
bGlzdC0+YXQoaik7CisgICAgICAgICAgICBpZiAobWFya2VyLnN0YXJ0T2Zmc2V0ID4gdG9JbnNl
cnQuZW5kT2Zmc2V0KQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgaWYgKG1h
cmtlci50eXBlID09IG5ld01hcmtlci50eXBlKSB7Ci0gICAgICAgICAgICAgICAgbWFya2Vycy5y
ZW1vdmUoaik7Ci0gICAgICAgICAgICAgICAgcmVjdHMucmVtb3ZlKGopOwotICAgICAgICAgICAg
ICAgIGlmIChuZXdNYXJrZXIuZW5kT2Zmc2V0IDw9IG1hcmtlci5lbmRPZmZzZXQpIHsKLSAgICAg
ICAgICAgICAgICAgICAgbmV3TWFya2VyLmVuZE9mZnNldCA9IG1hcmtlci5lbmRPZmZzZXQ7Cisg
ICAgICAgICAgICBpZiAobWFya2VyLnR5cGUgPT0gdG9JbnNlcnQudHlwZSkgeworICAgICAgICAg
ICAgICAgIGxpc3QtPnJlbW92ZShqKTsKKyAgICAgICAgICAgICAgICBpZiAodG9JbnNlcnQuZW5k
T2Zmc2V0IDw9IG1hcmtlci5lbmRPZmZzZXQpIHsKKyAgICAgICAgICAgICAgICAgICAgdG9JbnNl
cnQuZW5kT2Zmc2V0ID0gbWFya2VyLmVuZE9mZnNldDsKICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIG51bU1hcmtlcnMtLTsKQEAg
LTE0MSw4ICsxMzIsNyBAQCB2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6YWRkTWFya2Vy
KE5vZGUqIG5vZGUsIERvY3VtZW50TWFya2VyIG5ld01hcmtlcikKICAgICAgICAgICAgICAgICBq
Kys7CiAgICAgICAgIH0KICAgICAgICAgLy8gQXQgdGhpcyBwb2ludCBpIHBvaW50cyB0byB0aGUg
bm9kZSBiZWZvcmUgd2hpY2ggd2Ugd2FudCB0byBpbnNlcnQuCi0gICAgICAgIG1hcmtlcnMuaW5z
ZXJ0KGksIG5ld01hcmtlcik7Ci0gICAgICAgIHJlY3RzLmluc2VydChpLCBwbGFjZWhvbGRlclJl
Y3RGb3JNYXJrZXIoKSk7CisgICAgICAgIGxpc3QtPmluc2VydChpLCBSZW5kZXJlZERvY3VtZW50
TWFya2VyKHRvSW5zZXJ0KSk7CiAgICAgfQogCiAgICAgLy8gcmVwYWludCB0aGUgYWZmZWN0ZWQg
bm9kZQpAQCAtMTYxLDE3ICsxNTEsMTQgQEAgdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6
OmNvcHlNYXJrZXJzKE5vZGUqIHNyY05vZGUsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LAogICAgICAg
ICByZXR1cm47CiAgICAgQVNTRVJUKCFtX21hcmtlcnMuaXNFbXB0eSgpKTsKIAotICAgIE1hcmtl
ck1hcFZlY3RvclBhaXIqIHZlY3RvclBhaXIgPSBtX21hcmtlcnMuZ2V0KHNyY05vZGUpOwotICAg
IGlmICghdmVjdG9yUGFpcikKKyAgICBNYXJrZXJMaXN0KiBsaXN0ID0gbV9tYXJrZXJzLmdldChz
cmNOb2RlKTsKKyAgICBpZiAoIWxpc3QpCiAgICAgICAgIHJldHVybjsKIAotICAgIEFTU0VSVCh2
ZWN0b3JQYWlyLT5maXJzdC5zaXplKCkgPT0gdmVjdG9yUGFpci0+c2Vjb25kLnNpemUoKSk7Ci0K
ICAgICBib29sIGRvY0RpcnR5ID0gZmFsc2U7CiAgICAgdW5zaWduZWQgZW5kT2Zmc2V0ID0gc3Rh
cnRPZmZzZXQgKyBsZW5ndGggLSAxOwotICAgIFZlY3RvcjxEb2N1bWVudE1hcmtlcj4mIG1hcmtl
cnMgPSB2ZWN0b3JQYWlyLT5maXJzdDsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSAhPSBtYXJr
ZXJzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIERvY3VtZW50TWFya2VyIG1hcmtlciA9IG1hcmtl
cnNbaV07CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgIT0gbGlzdC0+c2l6ZSgpOyArK2kpIHsK
KyAgICAgICAgRG9jdW1lbnRNYXJrZXIgbWFya2VyID0gbGlzdC0+YXQoaSk7CiAKICAgICAgICAg
Ly8gc3RvcCBpZiB3ZSBhcmUgbm93IHBhc3QgdGhlIHNwZWNpZmllZCByYW5nZQogICAgICAgICBp
ZiAobWFya2VyLnN0YXJ0T2Zmc2V0ID4gZW5kT2Zmc2V0KQpAQCAtMjA3LDE3ICsxOTQsMTQgQEAg
dm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnJlbW92ZU1hcmtlcnMoTm9kZSogbm9kZSwg
dW5zaWduZWQgc3RhcnRPZmZzZXQsIGkKICAgICAgICAgcmV0dXJuOwogICAgIEFTU0VSVCghKG1f
bWFya2Vycy5pc0VtcHR5KCkpKTsKIAotICAgIE1hcmtlck1hcFZlY3RvclBhaXIqIHZlY3RvclBh
aXIgPSBtX21hcmtlcnMuZ2V0KG5vZGUpOwotICAgIGlmICghdmVjdG9yUGFpcikKKyAgICBNYXJr
ZXJMaXN0KiBsaXN0ID0gbV9tYXJrZXJzLmdldChub2RlKTsKKyAgICBpZiAoIWxpc3QpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIFZlY3RvcjxEb2N1bWVudE1hcmtlcj4mIG1hcmtlcnMgPSB2ZWN0
b3JQYWlyLT5maXJzdDsKLSAgICBWZWN0b3I8SW50UmVjdD4mIHJlY3RzID0gdmVjdG9yUGFpci0+
c2Vjb25kOwotICAgIEFTU0VSVChtYXJrZXJzLnNpemUoKSA9PSByZWN0cy5zaXplKCkpOwogICAg
IGJvb2wgZG9jRGlydHkgPSBmYWxzZTsKICAgICB1bnNpZ25lZCBlbmRPZmZzZXQgPSBzdGFydE9m
ZnNldCArIGxlbmd0aDsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1hcmtlcnMuc2l6ZSgp
OykgewotICAgICAgICBEb2N1bWVudE1hcmtlciBtYXJrZXIgPSBtYXJrZXJzW2ldOworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbGlzdC0+c2l6ZSgpOykgeworICAgICAgICBEb2N1bWVudE1h
cmtlciBtYXJrZXIgPSBsaXN0LT5hdChpKTsKIAogICAgICAgICAvLyBtYXJrZXJzIGFyZSByZXR1
cm5lZCBpbiBvcmRlciwgc28gc3RvcCBpZiB3ZSBhcmUgbm93IHBhc3QgdGhlIHNwZWNpZmllZCBy
YW5nZQogICAgICAgICBpZiAobWFya2VyLnN0YXJ0T2Zmc2V0ID49IGVuZE9mZnNldCkKQEAgLTIz
Miw5ICsyMTYsOCBAQCB2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6cmVtb3ZlTWFya2Vy
cyhOb2RlKiBub2RlLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgaQogICAgICAgICAvLyBhdCB0aGlz
IHBvaW50IHdlIGtub3cgdGhhdCBtYXJrZXIgYW5kIHRhcmdldCBpbnRlcnNlY3QgaW4gc29tZSB3
YXkKICAgICAgICAgZG9jRGlydHkgPSB0cnVlOwogCi0gICAgICAgIC8vIHBpdGNoIHRoZSBvbGQg
bWFya2VyIGFuZCBhbnkgYXNzb2NpYXRlZCByZWN0Ci0gICAgICAgIG1hcmtlcnMucmVtb3ZlKGkp
OwotICAgICAgICByZWN0cy5yZW1vdmUoaSk7CisgICAgICAgIC8vIHBpdGNoIHRoZSBvbGQgbWFy
a2VyCisgICAgICAgIGxpc3QtPnJlbW92ZShpKTsKIAogICAgICAgICBpZiAoc2hvdWxkUmVtb3Zl
UGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXIpCiAgICAgICAgICAgICAvLyBTdG9wIGhlcmUuIERv
bid0IGFkZCByZXN1bHRpbmcgc2xpY2VzIGJhY2suCkBAIC0yNDQsMjUgKzIyNywyMiBAQCB2b2lk
IERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6cmVtb3ZlTWFya2VycyhOb2RlKiBub2RlLCB1bnNp
Z25lZCBzdGFydE9mZnNldCwgaQogICAgICAgICBpZiAoc3RhcnRPZmZzZXQgPiBtYXJrZXIuc3Rh
cnRPZmZzZXQpIHsKICAgICAgICAgICAgIERvY3VtZW50TWFya2VyIG5ld0xlZnQgPSBtYXJrZXI7
CiAgICAgICAgICAgICBuZXdMZWZ0LmVuZE9mZnNldCA9IHN0YXJ0T2Zmc2V0OwotICAgICAgICAg
ICAgbWFya2Vycy5pbnNlcnQoaSwgbmV3TGVmdCk7Ci0gICAgICAgICAgICByZWN0cy5pbnNlcnQo
aSwgcGxhY2Vob2xkZXJSZWN0Rm9yTWFya2VyKCkpOworICAgICAgICAgICAgbGlzdC0+aW5zZXJ0
KGksIFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIobmV3TGVmdCkpOwogICAgICAgICAgICAgLy8gaSBu
b3cgcG9pbnRzIHRvIHRoZSBuZXdseS1pbnNlcnRlZCBub2RlLCBidXQgd2Ugd2FudCB0byBza2lw
IHRoYXQgb25lCiAgICAgICAgICAgICBpKys7CiAgICAgICAgIH0KICAgICAgICAgaWYgKG1hcmtl
ci5lbmRPZmZzZXQgPiBlbmRPZmZzZXQpIHsKICAgICAgICAgICAgIERvY3VtZW50TWFya2VyIG5l
d1JpZ2h0ID0gbWFya2VyOwogICAgICAgICAgICAgbmV3UmlnaHQuc3RhcnRPZmZzZXQgPSBlbmRP
ZmZzZXQ7Ci0gICAgICAgICAgICBtYXJrZXJzLmluc2VydChpLCBuZXdSaWdodCk7Ci0gICAgICAg
ICAgICByZWN0cy5pbnNlcnQoaSwgcGxhY2Vob2xkZXJSZWN0Rm9yTWFya2VyKCkpOworICAgICAg
ICAgICAgbGlzdC0+aW5zZXJ0KGksIFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIobmV3UmlnaHQpKTsK
ICAgICAgICAgICAgIC8vIGkgbm93IHBvaW50cyB0byB0aGUgbmV3bHktaW5zZXJ0ZWQgbm9kZSwg
YnV0IHdlIHdhbnQgdG8gc2tpcCB0aGF0IG9uZQogICAgICAgICAgICAgaSsrOwogICAgICAgICB9
CiAgICAgfQogCi0gICAgaWYgKG1hcmtlcnMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIEFTU0VSVChy
ZWN0cy5pc0VtcHR5KCkpOworICAgIGlmIChsaXN0LT5pc0VtcHR5KCkpIHsKICAgICAgICAgbV9t
YXJrZXJzLnJlbW92ZShub2RlKTsKLSAgICAgICAgZGVsZXRlIHZlY3RvclBhaXI7CisgICAgICAg
IGRlbGV0ZSBsaXN0OwogICAgIH0KICAgICAKICAgICBpZiAobV9tYXJrZXJzLmlzRW1wdHkoKSkK
QEAgLTI4MywyNSArMjYzLDE2IEBAIERvY3VtZW50TWFya2VyKiBEb2N1bWVudE1hcmtlckNvbnRy
b2xsZXI6Om1hcmtlckNvbnRhaW5pbmdQb2ludChjb25zdCBJbnRQb2ludCYKICAgICBNYXJrZXJN
YXA6Oml0ZXJhdG9yIGVuZCA9IG1fbWFya2Vycy5lbmQoKTsKICAgICBmb3IgKE1hcmtlck1hcDo6
aXRlcmF0b3Igbm9kZUl0ZXJhdG9yID0gbV9tYXJrZXJzLmJlZ2luKCk7IG5vZGVJdGVyYXRvciAh
PSBlbmQ7ICsrbm9kZUl0ZXJhdG9yKSB7CiAgICAgICAgIC8vIGlubmVyIGxvb3A7IHByb2Nlc3Mg
ZWFjaCBtYXJrZXIgaW4gdGhpcyBub2RlCi0gICAgICAgIE1hcmtlck1hcFZlY3RvclBhaXIqIHZl
Y3RvclBhaXIgPSBub2RlSXRlcmF0b3ItPnNlY29uZDsKLSAgICAgICAgVmVjdG9yPERvY3VtZW50
TWFya2VyPiYgbWFya2VycyA9IHZlY3RvclBhaXItPmZpcnN0OwotICAgICAgICBWZWN0b3I8SW50
UmVjdD4mIHJlY3RzID0gdmVjdG9yUGFpci0+c2Vjb25kOwotICAgICAgICBBU1NFUlQobWFya2Vy
cy5zaXplKCkgPT0gcmVjdHMuc2l6ZSgpKTsKLSAgICAgICAgdW5zaWduZWQgbWFya2VyQ291bnQg
PSBtYXJrZXJzLnNpemUoKTsKKyAgICAgICAgTWFya2VyTGlzdCogbGlzdCA9IG5vZGVJdGVyYXRv
ci0+c2Vjb25kOworICAgICAgICB1bnNpZ25lZCBtYXJrZXJDb3VudCA9IGxpc3QtPnNpemUoKTsK
ICAgICAgICAgZm9yICh1bnNpZ25lZCBtYXJrZXJJbmRleCA9IDA7IG1hcmtlckluZGV4IDwgbWFy
a2VyQ291bnQ7ICsrbWFya2VySW5kZXgpIHsKLSAgICAgICAgICAgIERvY3VtZW50TWFya2VyJiBt
YXJrZXIgPSBtYXJrZXJzW21hcmtlckluZGV4XTsKKyAgICAgICAgICAgIFJlbmRlcmVkRG9jdW1l
bnRNYXJrZXImIG1hcmtlciA9IGxpc3QtPmF0KG1hcmtlckluZGV4KTsKIAogICAgICAgICAgICAg
Ly8gc2tpcCBtYXJrZXIgdGhhdCBpcyB3cm9uZyB0eXBlCiAgICAgICAgICAgICBpZiAobWFya2Vy
LnR5cGUgIT0gbWFya2VyVHlwZSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAg
ICAgICAgSW50UmVjdCYgciA9IHJlY3RzW21hcmtlckluZGV4XTsKLQotICAgICAgICAgICAgLy8g
c2tpcCBwbGFjZWhvbGRlciByZWN0cwotICAgICAgICAgICAgaWYgKHIgPT0gcGxhY2Vob2xkZXJS
ZWN0Rm9yTWFya2VyKCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAg
IGlmIChyLmNvbnRhaW5zKHBvaW50KSkKKyAgICAgICAgICAgIGlmIChtYXJrZXIuY29udGFpbnMo
cG9pbnQpKQogICAgICAgICAgICAgICAgIHJldHVybiAmbWFya2VyOwogICAgICAgICB9CiAgICAg
fQpAQCAtMzExLDEwICsyODIsMTUgQEAgRG9jdW1lbnRNYXJrZXIqIERvY3VtZW50TWFya2VyQ29u
dHJvbGxlcjo6bWFya2VyQ29udGFpbmluZ1BvaW50KGNvbnN0IEludFBvaW50JgogCiBWZWN0b3I8
RG9jdW1lbnRNYXJrZXI+IERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6bWFya2Vyc0Zvck5vZGUo
Tm9kZSogbm9kZSkKIHsKLSAgICBNYXJrZXJNYXBWZWN0b3JQYWlyKiB2ZWN0b3JQYWlyID0gbV9t
YXJrZXJzLmdldChub2RlKTsKLSAgICBpZiAodmVjdG9yUGFpcikKLSAgICAgICAgcmV0dXJuIHZl
Y3RvclBhaXItPmZpcnN0OwotICAgIHJldHVybiBWZWN0b3I8RG9jdW1lbnRNYXJrZXI+KCk7Cisg
ICAgVmVjdG9yPERvY3VtZW50TWFya2VyPiByZXN1bHQ7CisgICAgTWFya2VyTGlzdCogbGlzdCA9
IG1fbWFya2Vycy5nZXQobm9kZSk7CisgICAgaWYgKCFsaXN0KQorICAgICAgICByZXR1cm4gcmVz
dWx0OworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsaXN0LT5zaXplKCk7ICsraSkKKyAg
ICAgICAgcmVzdWx0LmFwcGVuZChsaXN0LT5hdChpKSk7CisKKyAgICByZXR1cm4gcmVzdWx0Owog
fQogCiBWZWN0b3I8RG9jdW1lbnRNYXJrZXI+IERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6bWFy
a2Vyc0luUmFuZ2UoUmFuZ2UqIHJhbmdlLCBEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZSBtYXJr
ZXJUeXBlKQpAQCAtMzU4LDI0ICszMzQsMTkgQEAgVmVjdG9yPEludFJlY3Q+IERvY3VtZW50TWFy
a2VyQ29udHJvbGxlcjo6cmVuZGVyZWRSZWN0c0Zvck1hcmtlcnMoRG9jdW1lbnRNYXJrZXIKICAg
ICBNYXJrZXJNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fbWFya2Vycy5lbmQoKTsKICAgICBmb3IgKE1h
cmtlck1hcDo6aXRlcmF0b3Igbm9kZUl0ZXJhdG9yID0gbV9tYXJrZXJzLmJlZ2luKCk7IG5vZGVJ
dGVyYXRvciAhPSBlbmQ7ICsrbm9kZUl0ZXJhdG9yKSB7CiAgICAgICAgIC8vIGlubmVyIGxvb3A7
IHByb2Nlc3MgZWFjaCBtYXJrZXIgaW4gdGhpcyBub2RlCi0gICAgICAgIE1hcmtlck1hcFZlY3Rv
clBhaXIqIHZlY3RvclBhaXIgPSBub2RlSXRlcmF0b3ItPnNlY29uZDsKLSAgICAgICAgVmVjdG9y
PERvY3VtZW50TWFya2VyPiYgbWFya2VycyA9IHZlY3RvclBhaXItPmZpcnN0OwotICAgICAgICBW
ZWN0b3I8SW50UmVjdD4mIHJlY3RzID0gdmVjdG9yUGFpci0+c2Vjb25kOwotICAgICAgICBBU1NF
UlQobWFya2Vycy5zaXplKCkgPT0gcmVjdHMuc2l6ZSgpKTsKLSAgICAgICAgdW5zaWduZWQgbWFy
a2VyQ291bnQgPSBtYXJrZXJzLnNpemUoKTsKKyAgICAgICAgTWFya2VyTGlzdCogbGlzdCA9IG5v
ZGVJdGVyYXRvci0+c2Vjb25kOworICAgICAgICB1bnNpZ25lZCBtYXJrZXJDb3VudCA9IGxpc3Qt
PnNpemUoKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBtYXJrZXJJbmRleCA9IDA7IG1hcmtlcklu
ZGV4IDwgbWFya2VyQ291bnQ7ICsrbWFya2VySW5kZXgpIHsKLSAgICAgICAgICAgIERvY3VtZW50
TWFya2VyIG1hcmtlciA9IG1hcmtlcnNbbWFya2VySW5kZXhdOworICAgICAgICAgICAgY29uc3Qg
UmVuZGVyZWREb2N1bWVudE1hcmtlciYgbWFya2VyID0gbGlzdC0+YXQobWFya2VySW5kZXgpOwog
CiAgICAgICAgICAgICAvLyBza2lwIG1hcmtlciB0aGF0IGlzIHdyb25nIHR5cGUKICAgICAgICAg
ICAgIGlmIChtYXJrZXIudHlwZSAhPSBtYXJrZXJUeXBlKQogICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwogCi0gICAgICAgICAgICBJbnRSZWN0IHIgPSByZWN0c1ttYXJrZXJJbmRleF07Ci0gICAg
ICAgICAgICAvLyBza2lwIHBsYWNlaG9sZGVyIHJlY3RzCi0gICAgICAgICAgICBpZiAociA9PSBw
bGFjZWhvbGRlclJlY3RGb3JNYXJrZXIoKSkKKyAgICAgICAgICAgIGlmICghbWFya2VyLmlzUmVu
ZGVyZWQoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICAgICAgcmVzdWx0
LmFwcGVuZChyKTsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQobWFya2VyLnJlbmRlcmVkUmVj
dCgpKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMzkwLDcgKzM2MSw3IEBAIHZvaWQgRG9jdW1l
bnRNYXJrZXJDb250cm9sbGVyOjpyZW1vdmVNYXJrZXJzKE5vZGUqIG5vZGUsIERvY3VtZW50TWFy
a2VyOjpNYXJrZXJUCiAgICAgCiAgICAgTWFya2VyTWFwOjppdGVyYXRvciBpdGVyYXRvciA9IG1f
bWFya2Vycy5maW5kKG5vZGUpOwogICAgIGlmIChpdGVyYXRvciAhPSBtX21hcmtlcnMuZW5kKCkp
Ci0gICAgICAgIHJlbW92ZU1hcmtlcnNGcm9tTWFya2VyTWFwVmVjdG9yUGFpcihub2RlLCBpdGVy
YXRvci0+c2Vjb25kLCBtYXJrZXJUeXBlcyk7CisgICAgICAgIHJlbW92ZU1hcmtlcnNGcm9tTGlz
dChub2RlLCBpdGVyYXRvci0+c2Vjb25kLCBtYXJrZXJUeXBlcyk7CiB9CiAKIHZvaWQgRG9jdW1l
bnRNYXJrZXJDb250cm9sbGVyOjpyZW1vdmVNYXJrZXJzKERvY3VtZW50TWFya2VyOjpNYXJrZXJU
eXBlcyBtYXJrZXJUeXBlcykKQEAgLTQwMiwzMCArMzczLDIzIEBAIHZvaWQgRG9jdW1lbnRNYXJr
ZXJDb250cm9sbGVyOjpyZW1vdmVNYXJrZXJzKERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlcyBt
YXJrZXJUCiAgICAgLy8gb3V0ZXIgbG9vcDogcHJvY2VzcyBlYWNoIG1hcmtlcmVkIG5vZGUgaW4g
dGhlIGRvY3VtZW50CiAgICAgTWFya2VyTWFwIG1hcmtlck1hcENvcHkgPSBtX21hcmtlcnM7CiAg
ICAgTWFya2VyTWFwOjppdGVyYXRvciBlbmQgPSBtYXJrZXJNYXBDb3B5LmVuZCgpOwotICAgIGZv
ciAoTWFya2VyTWFwOjppdGVyYXRvciBpID0gbWFya2VyTWFwQ29weS5iZWdpbigpOyBpICE9IGVu
ZDsgKytpKSB7Ci0gICAgICAgIE5vZGUqIG5vZGUgPSBpLT5maXJzdC5nZXQoKTsKLSAgICAgICAg
TWFya2VyTWFwVmVjdG9yUGFpciogdmVjdG9yUGFpciA9IGktPnNlY29uZDsKLSAgICAgICAgcmVt
b3ZlTWFya2Vyc0Zyb21NYXJrZXJNYXBWZWN0b3JQYWlyKG5vZGUsIHZlY3RvclBhaXIsIG1hcmtl
clR5cGVzKTsKLSAgICB9Ci0KKyAgICBmb3IgKE1hcmtlck1hcDo6aXRlcmF0b3IgaSA9IG1hcmtl
ck1hcENvcHkuYmVnaW4oKTsgaSAhPSBlbmQ7ICsraSkKKyAgICAgICAgcmVtb3ZlTWFya2Vyc0Zy
b21MaXN0KGktPmZpcnN0LmdldCgpLCBpLT5zZWNvbmQsIG1hcmtlclR5cGVzKTsKICAgICBtX3Bv
c3NpYmx5RXhpc3RpbmdNYXJrZXJUeXBlcy5yZW1vdmUobWFya2VyVHlwZXMpOwogfQogCiAvLyBU
aGlzIGZ1bmN0aW9uIG1heSByZWxlYXNlIG5vZGUgYW5kIHZlY3RvclBhaXIuCi12b2lkIERvY3Vt
ZW50TWFya2VyQ29udHJvbGxlcjo6cmVtb3ZlTWFya2Vyc0Zyb21NYXJrZXJNYXBWZWN0b3JQYWly
KE5vZGUqIG5vZGUsIE1hcmtlck1hcFZlY3RvclBhaXIqIHZlY3RvclBhaXIsIERvY3VtZW50TWFy
a2VyOjpNYXJrZXJUeXBlcyBtYXJrZXJUeXBlcykKK3ZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9s
bGVyOjpyZW1vdmVNYXJrZXJzRnJvbUxpc3QoTm9kZSogbm9kZSwgTWFya2VyTGlzdCogbGlzdCwg
RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGVzIG1hcmtlclR5cGVzKQogewogICAgIGlmIChtYXJr
ZXJUeXBlcyA9PSBEb2N1bWVudE1hcmtlcjo6QWxsTWFya2VycygpKSB7Ci0gICAgICAgIGRlbGV0
ZSB2ZWN0b3JQYWlyOworICAgICAgICBkZWxldGUgbGlzdDsKICAgICAgICAgbV9tYXJrZXJzLnJl
bW92ZShub2RlKTsKICAgICAgICAgaWYgKFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBub2RlLT5y
ZW5kZXJlcigpKQogICAgICAgICAgICAgcmVuZGVyZXItPnJlcGFpbnQoKTsKICAgICB9IGVsc2Ug
ewogICAgICAgICBib29sIG5lZWRzUmVwYWludCA9IGZhbHNlOwotICAgICAgICBWZWN0b3I8RG9j
dW1lbnRNYXJrZXI+JiBtYXJrZXJzID0gdmVjdG9yUGFpci0+Zmlyc3Q7Ci0gICAgICAgIFZlY3Rv
cjxJbnRSZWN0PiYgcmVjdHMgPSB2ZWN0b3JQYWlyLT5zZWNvbmQ7Ci0gICAgICAgIEFTU0VSVCht
YXJrZXJzLnNpemUoKSA9PSByZWN0cy5zaXplKCkpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSAhPSBtYXJrZXJzLnNpemUoKTspIHsKLSAgICAgICAgICAgIERvY3VtZW50TWFya2VyIG1h
cmtlciA9IG1hcmtlcnNbaV07CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpICE9IGxpc3Qt
PnNpemUoKTspIHsKKyAgICAgICAgICAgIERvY3VtZW50TWFya2VyIG1hcmtlciA9IGxpc3QtPmF0
KGkpOwogCiAgICAgICAgICAgICAvLyBza2lwIG5vZGVzIHRoYXQgYXJlIG5vdCBvZiB0aGUgc3Bl
Y2lmaWVkIHR5cGUKICAgICAgICAgICAgIGlmICghbWFya2VyVHlwZXMuY29udGFpbnMobWFya2Vy
LnR5cGUpKSB7CkBAIC00MzQsOCArMzk4LDcgQEAgdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xs
ZXI6OnJlbW92ZU1hcmtlcnNGcm9tTWFya2VyTWFwVmVjdG9yUGFpcihOb2RlKiBub2RlLAogICAg
ICAgICAgICAgfQogCiAgICAgICAgICAgICAvLyBwaXRjaCB0aGUgb2xkIG1hcmtlcgotICAgICAg
ICAgICAgbWFya2Vycy5yZW1vdmUoaSk7Ci0gICAgICAgICAgICByZWN0cy5yZW1vdmUoaSk7Cisg
ICAgICAgICAgICBsaXN0LT5yZW1vdmUoaSk7CiAgICAgICAgICAgICBuZWVkc1JlcGFpbnQgPSB0
cnVlOwogICAgICAgICAgICAgLy8gaSBub3cgaXMgdGhlIGluZGV4IG9mIHRoZSBuZXh0IG1hcmtl
cgogICAgICAgICB9CkBAIC00NDksMTAgKzQxMiw5IEBAIHZvaWQgRG9jdW1lbnRNYXJrZXJDb250
cm9sbGVyOjpyZW1vdmVNYXJrZXJzRnJvbU1hcmtlck1hcFZlY3RvclBhaXIoTm9kZSogbm9kZSwK
ICAgICAgICAgfQogCiAgICAgICAgIC8vIGRlbGV0ZSB0aGUgbm9kZSdzIGxpc3QgaWYgaXQgaXMg
bm93IGVtcHR5Ci0gICAgICAgIGlmIChtYXJrZXJzLmlzRW1wdHkoKSkgewotICAgICAgICAgICAg
QVNTRVJUKHJlY3RzLmlzRW1wdHkoKSk7CisgICAgICAgIGlmIChsaXN0LT5pc0VtcHR5KCkpIHsK
ICAgICAgICAgICAgIG1fbWFya2Vycy5yZW1vdmUobm9kZSk7Ci0gICAgICAgICAgICBkZWxldGUg
dmVjdG9yUGFpcjsKKyAgICAgICAgICAgIGRlbGV0ZSBsaXN0OwogICAgICAgICB9CiAgICAgfQog
ICAgIGlmIChtX21hcmtlcnMuaXNFbXB0eSgpKQpAQCAtNDcxLDExICs0MzMsMTAgQEAgdm9pZCBE
b2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnJlcGFpbnRNYXJrZXJzKERvY3VtZW50TWFya2VyOjpN
YXJrZXJUeXBlcyBtYXJrZXIKICAgICAgICAgTm9kZSogbm9kZSA9IGktPmZpcnN0LmdldCgpOwog
CiAgICAgICAgIC8vIGlubmVyIGxvb3A6IHByb2Nlc3MgZWFjaCBtYXJrZXIgaW4gdGhlIGN1cnJl
bnQgbm9kZQotICAgICAgICBNYXJrZXJNYXBWZWN0b3JQYWlyKiB2ZWN0b3JQYWlyID0gaS0+c2Vj
b25kOwotICAgICAgICBWZWN0b3I8RG9jdW1lbnRNYXJrZXI+JiBtYXJrZXJzID0gdmVjdG9yUGFp
ci0+Zmlyc3Q7CisgICAgICAgIE1hcmtlckxpc3QqIGxpc3QgPSBpLT5zZWNvbmQ7CiAgICAgICAg
IGJvb2wgbm9kZU5lZWRzUmVwYWludCA9IGZhbHNlOwotICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSAhPSBtYXJrZXJzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBEb2N1bWVudE1hcmtl
ciBtYXJrZXIgPSBtYXJrZXJzW2ldOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSAhPSBs
aXN0LT5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgRG9jdW1lbnRNYXJrZXIgbWFya2VyID0g
bGlzdC0+YXQoaSk7CiAKICAgICAgICAgICAgIC8vIHNraXAgbm9kZXMgdGhhdCBhcmUgbm90IG9m
IHRoZSBzcGVjaWZpZWQgdHlwZQogICAgICAgICAgICAgaWYgKG1hcmtlclR5cGVzLmNvbnRhaW5z
KG1hcmtlci50eXBlKSkgewpAQCAtNDkzLDIxICs0NTQsMjAgQEAgdm9pZCBEb2N1bWVudE1hcmtl
ckNvbnRyb2xsZXI6OnJlcGFpbnRNYXJrZXJzKERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlcyBt
YXJrZXIKICAgICB9CiB9CiAKKy8vIFhYWDogc29tZXRoaW5nIHdyb25nCiB2b2lkIERvY3VtZW50
TWFya2VyQ29udHJvbGxlcjo6c2V0UmVuZGVyZWRSZWN0Rm9yTWFya2VyKE5vZGUqIG5vZGUsIGNv
bnN0IERvY3VtZW50TWFya2VyJiBtYXJrZXIsIGNvbnN0IEludFJlY3QmIHIpCiB7Ci0gICAgTWFy
a2VyTWFwVmVjdG9yUGFpciogdmVjdG9yUGFpciA9IG1fbWFya2Vycy5nZXQobm9kZSk7Ci0gICAg
aWYgKCF2ZWN0b3JQYWlyKSB7CisgICAgTWFya2VyTGlzdCogbGlzdCA9IG1fbWFya2Vycy5nZXQo
bm9kZSk7CisgICAgaWYgKCFsaXN0KSB7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyAv
LyBzaG91bGRuJ3QgYmUgdHJ5aW5nIHRvIHNldCB0aGUgcmVjdCBmb3IgYSBtYXJrZXIgd2UgZG9u
J3QgYWxyZWFkeSBrbm93IGFib3V0CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBWZWN0
b3I8RG9jdW1lbnRNYXJrZXI+JiBtYXJrZXJzID0gdmVjdG9yUGFpci0+Zmlyc3Q7Ci0gICAgQVNT
RVJUKG1hcmtlcnMuc2l6ZSgpID09IHZlY3RvclBhaXItPnNlY29uZC5zaXplKCkpOwotICAgIHVu
c2lnbmVkIG1hcmtlckNvdW50ID0gbWFya2Vycy5zaXplKCk7CisgICAgdW5zaWduZWQgbWFya2Vy
Q291bnQgPSBsaXN0LT5zaXplKCk7CiAgICAgZm9yICh1bnNpZ25lZCBtYXJrZXJJbmRleCA9IDA7
IG1hcmtlckluZGV4IDwgbWFya2VyQ291bnQ7ICsrbWFya2VySW5kZXgpIHsKLSAgICAgICAgRG9j
dW1lbnRNYXJrZXIgbSA9IG1hcmtlcnNbbWFya2VySW5kZXhdOworICAgICAgICBSZW5kZXJlZERv
Y3VtZW50TWFya2VyJiBtID0gbGlzdC0+YXQobWFya2VySW5kZXgpOwogICAgICAgICBpZiAobSA9
PSBtYXJrZXIpIHsKLSAgICAgICAgICAgIHZlY3RvclBhaXItPnNlY29uZFttYXJrZXJJbmRleF0g
PSByOworICAgICAgICAgICAgbS5zZXRSZW5kZXJlZFJlY3Qocik7CiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KICAgICB9CkBAIC01MjIsMTMgKzQ4Miw5IEBAIHZvaWQgRG9jdW1lbnRN
YXJrZXJDb250cm9sbGVyOjppbnZhbGlkYXRlUmVuZGVyZWRSZWN0c0Zvck1hcmtlcnNJblJlY3Qo
Y29uc3QgSW50CiAgICAgZm9yIChNYXJrZXJNYXA6Oml0ZXJhdG9yIGkgPSBtX21hcmtlcnMuYmVn
aW4oKTsgaSAhPSBlbmQ7ICsraSkgewogCiAgICAgICAgIC8vIGlubmVyIGxvb3A6IHByb2Nlc3Mg
ZWFjaCByZWN0IGluIHRoZSBjdXJyZW50IG5vZGUKLSAgICAgICAgTWFya2VyTWFwVmVjdG9yUGFp
ciogdmVjdG9yUGFpciA9IGktPnNlY29uZDsKLSAgICAgICAgVmVjdG9yPEludFJlY3Q+JiByZWN0
cyA9IHZlY3RvclBhaXItPnNlY29uZDsKLQotICAgICAgICB1bnNpZ25lZCByZWN0Q291bnQgPSBy
ZWN0cy5zaXplKCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgcmVjdEluZGV4ID0gMDsgcmVjdElu
ZGV4IDwgcmVjdENvdW50OyArK3JlY3RJbmRleCkKLSAgICAgICAgICAgIGlmIChyZWN0c1tyZWN0
SW5kZXhdLmludGVyc2VjdHMocikpCi0gICAgICAgICAgICAgICAgcmVjdHNbcmVjdEluZGV4XSA9
IHBsYWNlaG9sZGVyUmVjdEZvck1hcmtlcigpOworICAgICAgICBNYXJrZXJMaXN0KiBsaXN0ID0g
aS0+c2Vjb25kOworICAgICAgICBmb3IgKHVuc2lnbmVkIGxpc3RJbmRleCA9IDA7IGxpc3RJbmRl
eCA8IGxpc3QtPnNpemUoKTsgKytsaXN0SW5kZXgpCisgICAgICAgICAgICBsaXN0LT5hdChsaXN0
SW5kZXgpLmludmFsaWRhdGUocik7CiAgICAgfQogfQogCkBAIC01MzgsMTcgKzQ5NCwxMyBAQCB2
b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6c2hpZnRNYXJrZXJzKE5vZGUqIG5vZGUsIHVu
c2lnbmVkIHN0YXJ0T2Zmc2V0LCBpbgogICAgICAgICByZXR1cm47CiAgICAgQVNTRVJUKCFtX21h
cmtlcnMuaXNFbXB0eSgpKTsKIAotICAgIE1hcmtlck1hcFZlY3RvclBhaXIqIHZlY3RvclBhaXIg
PSBtX21hcmtlcnMuZ2V0KG5vZGUpOwotICAgIGlmICghdmVjdG9yUGFpcikKKyAgICBNYXJrZXJM
aXN0KiBsaXN0ID0gbV9tYXJrZXJzLmdldChub2RlKTsKKyAgICBpZiAoIWxpc3QpCiAgICAgICAg
IHJldHVybjsKIAotICAgIFZlY3RvcjxEb2N1bWVudE1hcmtlcj4mIG1hcmtlcnMgPSB2ZWN0b3JQ
YWlyLT5maXJzdDsKLSAgICBWZWN0b3I8SW50UmVjdD4mIHJlY3RzID0gdmVjdG9yUGFpci0+c2Vj
b25kOwotICAgIEFTU0VSVChtYXJrZXJzLnNpemUoKSA9PSByZWN0cy5zaXplKCkpOwotCiAgICAg
Ym9vbCBkb2NEaXJ0eSA9IGZhbHNlOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpICE9IG1hcmtl
cnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgRG9jdW1lbnRNYXJrZXImIG1hcmtlciA9IG1hcmtl
cnNbaV07CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgIT0gbGlzdC0+c2l6ZSgpOyArK2kpIHsK
KyAgICAgICAgUmVuZGVyZWREb2N1bWVudE1hcmtlciYgbWFya2VyID0gbGlzdC0+YXQoaSk7CiAg
ICAgICAgIGlmIChtYXJrZXIuc3RhcnRPZmZzZXQgPj0gc3RhcnRPZmZzZXQpIHsKICAgICAgICAg
ICAgIEFTU0VSVCgoaW50KW1hcmtlci5zdGFydE9mZnNldCArIGRlbHRhID49IDApOwogICAgICAg
ICAgICAgbWFya2VyLnN0YXJ0T2Zmc2V0ICs9IGRlbHRhOwpAQCAtNTU2LDcgKzUwOCw3IEBAIHZv
aWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpzaGlmdE1hcmtlcnMoTm9kZSogbm9kZSwgdW5z
aWduZWQgc3RhcnRPZmZzZXQsIGluCiAgICAgICAgICAgICBkb2NEaXJ0eSA9IHRydWU7CiAKICAg
ICAgICAgICAgIC8vIE1hcmtlciBtb3ZlZCwgc28gcHJldmlvdXNseS1jb21wdXRlZCByZW5kZXJl
ZCByZWN0YW5nbGUgaXMgbm93IGludmFsaWQKLSAgICAgICAgICAgIHJlY3RzW2ldID0gcGxhY2Vo
b2xkZXJSZWN0Rm9yTWFya2VyKCk7CisgICAgICAgICAgICBtYXJrZXIuaW52YWxpZGF0ZSgpOwog
ICAgICAgICB9CiAgICAgfQogCkBAIC01ODUsMTYgKzUzNywxMyBAQCB2b2lkIERvY3VtZW50TWFy
a2VyQ29udHJvbGxlcjo6c2V0TWFya2Vyc0FjdGl2ZShSYW5nZSogcmFuZ2UsIGJvb2wgYWN0aXZl
KQogCiB2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6c2V0TWFya2Vyc0FjdGl2ZShOb2Rl
KiBub2RlLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0LCBib29sIGFj
dGl2ZSkKIHsKLSAgICBNYXJrZXJNYXBWZWN0b3JQYWlyKiB2ZWN0b3JQYWlyID0gbV9tYXJrZXJz
LmdldChub2RlKTsKLSAgICBpZiAoIXZlY3RvclBhaXIpCisgICAgTWFya2VyTGlzdCogbGlzdCA9
IG1fbWFya2Vycy5nZXQobm9kZSk7CisgICAgaWYgKCFsaXN0KQogICAgICAgICByZXR1cm47CiAK
LSAgICBWZWN0b3I8RG9jdW1lbnRNYXJrZXI+JiBtYXJrZXJzID0gdmVjdG9yUGFpci0+Zmlyc3Q7
Ci0gICAgQVNTRVJUKG1hcmtlcnMuc2l6ZSgpID09IHZlY3RvclBhaXItPnNlY29uZC5zaXplKCkp
OwotCiAgICAgYm9vbCBkb2NEaXJ0eSA9IGZhbHNlOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
ICE9IG1hcmtlcnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgRG9jdW1lbnRNYXJrZXImIG1hcmtl
ciA9IG1hcmtlcnNbaV07CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgIT0gbGlzdC0+c2l6ZSgp
OyArK2kpIHsKKyAgICAgICAgRG9jdW1lbnRNYXJrZXImIG1hcmtlciA9IGxpc3QtPmF0KGkpOwog
CiAgICAgICAgIC8vIE1hcmtlcnMgYXJlIHJldHVybmVkIGluIG9yZGVyLCBzbyBzdG9wIGlmIHdl
IGFyZSBub3cgcGFzdCB0aGUgc3BlY2lmaWVkIHJhbmdlLgogICAgICAgICBpZiAobWFya2VyLnN0
YXJ0T2Zmc2V0ID49IGVuZE9mZnNldCkKQEAgLTY1NCwxMyArNjAzLDEyIEBAIHZvaWQgRG9jdW1l
bnRNYXJrZXJDb250cm9sbGVyOjpjbGVhckRlc2NyaXB0aW9uT25NYXJrZXJzSW50ZXJzZWN0aW5n
UmFuZ2UoUmFuZ2UqCiAgICAgZm9yIChOb2RlKiBub2RlID0gcmFuZ2UtPmZpcnN0Tm9kZSgpOyBu
b2RlICE9IHBhc3RMYXN0Tm9kZTsgbm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoKSkgewog
ICAgICAgICB1bnNpZ25lZCBzdGFydE9mZnNldCA9IG5vZGUgPT0gc3RhcnRDb250YWluZXIgPyBy
YW5nZS0+c3RhcnRPZmZzZXQoKSA6IDA7CiAgICAgICAgIHVuc2lnbmVkIGVuZE9mZnNldCA9IG5v
ZGUgPT0gZW5kQ29udGFpbmVyID8gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHJhbmdlLT5lbmRPZmZz
ZXQoKSkgOiBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCk7Ci0gICAgICAgIE1h
cmtlck1hcFZlY3RvclBhaXIqIHZlY3RvclBhaXIgPSBtX21hcmtlcnMuZ2V0KG5vZGUpOwotICAg
ICAgICBpZiAoIXZlY3RvclBhaXIpCisgICAgICAgIE1hcmtlckxpc3QqIGxpc3QgPSBtX21hcmtl
cnMuZ2V0KG5vZGUpOworICAgICAgICBpZiAoIWxpc3QpCiAgICAgICAgICAgICBjb250aW51ZTsK
IAotICAgICAgICBWZWN0b3I8RG9jdW1lbnRNYXJrZXI+JiBtYXJrZXJzID0gdmVjdG9yUGFpci0+
Zmlyc3Q7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbWFya2Vycy5zaXplKCk7ICsr
aSkgewotICAgICAgICAgICAgRG9jdW1lbnRNYXJrZXImIG1hcmtlciA9IG1hcmtlcnNbaV07Cisg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGlzdC0+c2l6ZSgpOyArK2kpIHsKKyAgICAg
ICAgICAgIERvY3VtZW50TWFya2VyJiBtYXJrZXIgPSBsaXN0LT5hdChpKTsKIAogICAgICAgICAg
ICAgLy8gbWFya2VycyBhcmUgcmV0dXJuZWQgaW4gb3JkZXIsIHNvIHN0b3AgaWYgd2UgYXJlIG5v
dyBwYXN0IHRoZSBzcGVjaWZpZWQgcmFuZ2UKICAgICAgICAgICAgIGlmIChtYXJrZXIuc3RhcnRP
ZmZzZXQgPj0gZW5kT2Zmc2V0KQpAQCAtNjg1LDExICs2MzMsOSBAQCB2b2lkIERvY3VtZW50TWFy
a2VyQ29udHJvbGxlcjo6c2hvd01hcmtlcnMoKSBjb25zdAogICAgIGZvciAoTWFya2VyTWFwOjpj
b25zdF9pdGVyYXRvciBub2RlSXRlcmF0b3IgPSBtX21hcmtlcnMuYmVnaW4oKTsgbm9kZUl0ZXJh
dG9yICE9IGVuZDsgKytub2RlSXRlcmF0b3IpIHsKICAgICAgICAgTm9kZSogbm9kZSA9IG5vZGVJ
dGVyYXRvci0+Zmlyc3QuZ2V0KCk7CiAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXAiLCBub2Rl
KTsKLSAgICAgICAgTWFya2VyTWFwVmVjdG9yUGFpciogdmVjdG9yUGFpciA9IG5vZGVJdGVyYXRv
ci0+c2Vjb25kOwotICAgICAgICBWZWN0b3I8RG9jdW1lbnRNYXJrZXI+JiBtYXJrZXJzID0gdmVj
dG9yUGFpci0+Zmlyc3Q7Ci0gICAgICAgIHVuc2lnbmVkIG1hcmtlckNvdW50ID0gbWFya2Vycy5z
aXplKCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgbWFya2VySW5kZXggPSAwOyBtYXJrZXJJbmRl
eCA8IG1hcmtlckNvdW50OyArK21hcmtlckluZGV4KQotICAgICAgICAgICAgZnByaW50ZihzdGRl
cnIsICIgJWQ6WyVkOiVkXSglZCkiLCBtYXJrZXJzW21hcmtlckluZGV4XS50eXBlLCBtYXJrZXJz
W21hcmtlckluZGV4XS5zdGFydE9mZnNldCwgbWFya2Vyc1ttYXJrZXJJbmRleF0uZW5kT2Zmc2V0
LCBtYXJrZXJzW21hcmtlckluZGV4XS5hY3RpdmVNYXRjaCk7CisgICAgICAgIE1hcmtlckxpc3Qq
IGxpc3QgPSBub2RlSXRlcmF0b3ItPnNlY29uZDsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBtYXJr
ZXJJbmRleCA9IDA7IG1hcmtlckluZGV4IDwgbGlzdC0+c2l6ZSgpOyArK21hcmtlckluZGV4KQor
ICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIgJWQ6WyVkOiVkXSglZCkiLCBsaXN0LT5hdCht
YXJrZXJJbmRleCkudHlwZSwgbGlzdC0+YXQobWFya2VySW5kZXgpLnN0YXJ0T2Zmc2V0LCBsaXN0
LT5hdChtYXJrZXJJbmRleCkuZW5kT2Zmc2V0LCBsaXN0LT5hdChtYXJrZXJJbmRleCkuYWN0aXZl
TWF0Y2gpOwogICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlxuIik7CiAgICAgfQogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50TWFya2VyQ29udHJvbGxlci5oIGIvU291
cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50TWFya2VyQ29udHJvbGxlci5oCmluZGV4IDBmMzRjOWZh
NTJlZGJiMzllNmU5MTI2Y2JlNGU4OGFmNjgxNTNkZWUuLjM5MmE0NmQ4ZjI4YjljOTY3Y2Y4ZjIx
MDhlNjA2YTFiMDY3ZTk4YjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVu
dE1hcmtlckNvbnRyb2xsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJr
ZXJDb250cm9sbGVyLmgKQEAgLTM3LDE2ICszNywxOCBAQCBjbGFzcyBJbnRQb2ludDsKIGNsYXNz
IEludFJlY3Q7CiBjbGFzcyBOb2RlOwogY2xhc3MgUmFuZ2U7CitjbGFzcyBSZW5kZXJlZERvY3Vt
ZW50TWFya2VyOwogCiBjbGFzcyBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXIgewogICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKERvY3VtZW50TWFya2VyQ29udHJvbGxlcik7IFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOwogcHVibGljOgorCiAgICAgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyKCk7CiAg
ICAgfkRvY3VtZW50TWFya2VyQ29udHJvbGxlcigpIHsgZGV0YWNoKCk7IH0KIAogICAgIHZvaWQg
ZGV0YWNoKCk7CiAgICAgdm9pZCBhZGRNYXJrZXIoUmFuZ2UqLCBEb2N1bWVudE1hcmtlcjo6TWFy
a2VyVHlwZSwgU3RyaW5nIGRlc2NyaXB0aW9uID0gU3RyaW5nKCkpOwotICAgIHZvaWQgYWRkTWFy
a2VyKE5vZGUqLCBEb2N1bWVudE1hcmtlcik7CisgICAgdm9pZCBhZGRNYXJrZXIoTm9kZSosIGNv
bnN0IERvY3VtZW50TWFya2VyJik7CiAgICAgdm9pZCBjb3B5TWFya2VycyhOb2RlKiBzcmNOb2Rl
LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgaW50IGxlbmd0aCwgTm9kZSogZHN0Tm9kZSwgaW50IGRl
bHRhKTsKICAgICBib29sIGhhc01hcmtlcnMoUmFuZ2UqLCBEb2N1bWVudE1hcmtlcjo6TWFya2Vy
VHlwZXMgPSBEb2N1bWVudE1hcmtlcjo6QWxsTWFya2VycygpKTsKIApAQCAtNzcsMTAgKzc5LDEw
IEBAIHB1YmxpYzoKICNlbmRpZgogCiBwcml2YXRlOgotICAgIHR5cGVkZWYgc3RkOjpwYWlyPFZl
Y3RvcjxEb2N1bWVudE1hcmtlcj4sIFZlY3RvcjxJbnRSZWN0PiA+IE1hcmtlck1hcFZlY3RvclBh
aXI7Ci0gICAgdHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxOb2RlPiwgTWFya2VyTWFwVmVjdG9yUGFp
cio+IE1hcmtlck1hcDsKKyAgICB0eXBlZGVmIFZlY3RvcjxSZW5kZXJlZERvY3VtZW50TWFya2Vy
PiBNYXJrZXJMaXN0OworICAgIHR5cGVkZWYgSGFzaE1hcDxSZWZQdHI8Tm9kZT4sIE1hcmtlckxp
c3QqPiBNYXJrZXJNYXA7CiAgICAgYm9vbCBwb3NzaWJseUhhc01hcmtlcnMoRG9jdW1lbnRNYXJr
ZXI6Ok1hcmtlclR5cGVzKTsKLSAgICB2b2lkIHJlbW92ZU1hcmtlcnNGcm9tTWFya2VyTWFwVmVj
dG9yUGFpcihOb2RlKiwgTWFya2VyTWFwVmVjdG9yUGFpciosIERvY3VtZW50TWFya2VyOjpNYXJr
ZXJUeXBlcyk7CisgICAgdm9pZCByZW1vdmVNYXJrZXJzRnJvbUxpc3QoTm9kZSosIE1hcmtlckxp
c3QqLCBEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZXMpOwogCiAgICAgTWFya2VyTWFwIG1fbWFy
a2VyczsKICAgICAvLyBQcm92aWRlIGEgcXVpY2sgd2F5IHRvIGRldGVybWluZSB3aGV0aGVyIGEg
cGFydGljdWxhciBtYXJrZXIgdHlwZSBpcyBhYnNlbnQgd2l0aG91dCBnb2luZyB0aHJvdWdoIHRo
ZSBtYXAuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vUmVuZGVyZWREb2N1bWVudE1h
cmtlci5oIGIvU291cmNlL1dlYkNvcmUvZG9tL1JlbmRlcmVkRG9jdW1lbnRNYXJrZXIuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5jZDcxMGNhMDg5MTJkNmZlOGNmMjMyN2FjNDFmMTk1NjA5Y2U4NDI5Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1JlbmRlcmVkRG9jdW1lbnRNYXJrZXIuaApA
QCAtMCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisg
KiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
CisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAq
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBSZW5kZXJlZERvY3VtZW50TWFya2VyX2gKKyNkZWZp
bmUgUmVuZGVyZWREb2N1bWVudE1hcmtlcl9oCisKKyNpbmNsdWRlICJEb2N1bWVudE1hcmtlci5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIg
OiBwdWJsaWMgRG9jdW1lbnRNYXJrZXIgeworcHVibGljOgorCisgICAgZXhwbGljaXQgUmVuZGVy
ZWREb2N1bWVudE1hcmtlcihjb25zdCBEb2N1bWVudE1hcmtlciYgbWFya2VyKQorICAgICAgICA6
IERvY3VtZW50TWFya2VyKG1hcmtlciksIG1fcmVuZGVyZWRSZWN0KGludmFsaWRNYXJrZXJSZWN0
KCkpCisgICAgeworICAgIH0KKworICAgIGJvb2wgaXNSZW5kZXJlZCgpIGNvbnN0IHsgcmV0dXJu
IGludmFsaWRNYXJrZXJSZWN0KCkgIT0gbV9yZW5kZXJlZFJlY3Q7IH0KKyAgICBib29sIGNvbnRh
aW5zKGNvbnN0IEludFBvaW50JiBwb2ludCkgY29uc3QgeyByZXR1cm4gaXNSZW5kZXJlZCgpICYm
IG1fcmVuZGVyZWRSZWN0LmNvbnRhaW5zKHBvaW50KTsgfQorICAgIHZvaWQgc2V0UmVuZGVyZWRS
ZWN0KGNvbnN0IEludFJlY3QmIHIpIHsgbV9yZW5kZXJlZFJlY3QgPSByOyB9CisgICAgY29uc3Qg
SW50UmVjdCYgcmVuZGVyZWRSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZW5kZXJlZFJlY3Q7IH0K
KyAgICB2b2lkIGludmFsaWRhdGUoY29uc3QgSW50UmVjdCYpOworICAgIHZvaWQgaW52YWxpZGF0
ZSgpIHsgbV9yZW5kZXJlZFJlY3QgPSBpbnZhbGlkTWFya2VyUmVjdCgpOyB9CisKK3ByaXZhdGU6
CisgICAgc3RhdGljIEludFJlY3QgaW52YWxpZE1hcmtlclJlY3QoKSB7IHJldHVybiBJbnRSZWN0
KC0xLCAtMSwgLTEsIC0xKTsgfQorCisgICAgSW50UmVjdCBtX3JlbmRlcmVkUmVjdDsKK307CisK
K2lubGluZSB2b2lkIFJlbmRlcmVkRG9jdW1lbnRNYXJrZXI6OmludmFsaWRhdGUoY29uc3QgSW50
UmVjdCYgcikKK3sKKyAgICBpZiAobV9yZW5kZXJlZFJlY3QuaW50ZXJzZWN0cyhyKSkKKyAgICAg
ICAgaW52YWxpZGF0ZSgpOworfQorCit9IC8vIG5hbWVzcGFjZQorCisjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>91309</attachid>
            <date>2011-04-27 10:21:19 -0700</date>
            <delta_ts>2011-04-27 10:42:14 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-58113-20110427102118.patch</filename>
            <type>text/plain</type>
            <size>34603</size>
            <attacher name="Hajime Morrita">morrita</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODUwNTYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAxZmViMGEwODU2OWViMDNl
ZGEyZmE2YmYwZTk1NDRiZWQyNDczZGJjLi4xY2E1YjBmNjhkNzgwOWQxOWJlZDk5NTNhNzRmOTRk
NTk0NTNlMmJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDcgQEAKKzIwMTEtMDQtMTkgIE1PUklU
QSBIYWppbWUgIDxtb3JyaXRhQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgW1JlZmFjdG9yaW5nXSBEb2N1bWVudE1hcmtlckNvbnRy
b2xsZXI6Ok1hcmtlck1hcFZlY3RvclBhaXIgc2hvdWxkIGJlIHJlcGxhY2VkIHdpdGggYSBsaXN0
IG9mIHNvbWUgY2xhc3MuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD01ODExMworCisgICAgICAgICogSW50cm9kdWNlZCBSZW5kZXJlZERvY3VtZW50TWFy
a2VyLCBhIHN1YmNsYXNzIG9mIERvY3VtZW50TWFya2VyLgorICAgICAgICAqIEVsaW1pbmF0ZWQg
VmVjdG9yPEludFJlY3Q+IGFuZCBtb3ZlIHRoZSBJbnRSZWN0IGludG8gUmVuZGVyZWREb2N1bWVu
dE1hcmtlcgorICAgICAgICAqIE5vdyBNYXJrZXJNYXBWZWN0b3JQYWlyIGlzIG5vIGxvbmdlciB1
c2VkLgorICAgICAgICAKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBObyBiZWhhdmlvciBjaGFuZ2Uu
CisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAgICAqIFdlYkNvcmUuZ3lw
aToKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJD
b3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6
CisgICAgICAgICogZG9tL0RvY3VtZW50TWFya2VyLmg6CisgICAgICAgICogZG9tL0RvY3VtZW50
TWFya2VyQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE1hcmtlckNv
bnRyb2xsZXI6OmFkZE1hcmtlcik6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE1hcmtlckNv
bnRyb2xsZXI6OmNvcHlNYXJrZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50TWFya2Vy
Q29udHJvbGxlcjo6cmVtb3ZlTWFya2Vycyk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE1h
cmtlckNvbnRyb2xsZXI6Om1hcmtlckNvbnRhaW5pbmdQb2ludCk6CisgICAgICAgIChXZWJDb3Jl
OjpEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6Om1hcmtlcnNGb3JOb2RlKToKKyAgICAgICAgKFdl
YkNvcmU6OkRvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6cmVuZGVyZWRSZWN0c0Zvck1hcmtlcnMp
OgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpyZW1vdmVNYXJr
ZXJzRnJvbUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJDb250cm9sbGVy
OjpyZXBhaW50TWFya2Vycyk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE1hcmtlckNvbnRy
b2xsZXI6OnNldFJlbmRlcmVkUmVjdEZvck1hcmtlcik6CisgICAgICAgIChXZWJDb3JlOjpEb2N1
bWVudE1hcmtlckNvbnRyb2xsZXI6OmludmFsaWRhdGVSZW5kZXJlZFJlY3RzRm9yTWFya2Vyc0lu
UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnNoaWZ0
TWFya2Vycyk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnNl
dE1hcmtlcnNBY3RpdmUpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJDb250cm9s
bGVyOjpjbGVhckRlc2NyaXB0aW9uT25NYXJrZXJzSW50ZXJzZWN0aW5nUmFuZ2UpOgorICAgICAg
ICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpzaG93TWFya2Vycyk6CisgICAg
ICAgICogZG9tL0RvY3VtZW50TWFya2VyQ29udHJvbGxlci5oOgorICAgICAgICAqIGRvbS9SZW5k
ZXJlZERvY3VtZW50TWFya2VyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyZWRE
b2N1bWVudE1hcmtlcjo6UmVuZGVyZWREb2N1bWVudE1hcmtlcik6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJlZERvY3VtZW50TWFya2VyOjppc1JlbmRlcmVkKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlcmVkRG9jdW1lbnRNYXJrZXI6OmNvbnRhaW5zKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlcmVkRG9jdW1lbnRNYXJrZXI6OnNldFJlbmRlcmVkUmVjdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJlZERvY3VtZW50TWFya2VyOjpyZW5kZXJlZFJlY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyZWREb2N1bWVudE1hcmtlcjo6aW52YWxpZGF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJlZERvY3VtZW50TWFya2VyOjppbnZhbGlkTWFya2VyUmVjdCk6CisKIDIwMTEtMDQt
MjcgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IFNhbSBXZWluaWcuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0
LmFtIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQppbmRleCA0OGZjMTk1MmQx
MDFlMWVkM2QwZDllNTg2M2Q4MTY3Y2YyZDRiOGU3Li4xMmQzMzE2YjkxMjM0ODg3Y2ViOWNkMTM3
MTQyZGRkN2ZmMjg1ZGYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5s
aXN0LmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTEyMTgs
NiArMTIxOCw3IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvZG9tL1Jh
d0RhdGFEb2N1bWVudFBhcnNlci5oIFwKIAlTb3VyY2UvV2ViQ29yZS9kb20vUmVnaXN0ZXJlZEV2
ZW50TGlzdGVuZXIuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9kb20vUmVnaXN0ZXJlZEV2ZW50TGlz
dGVuZXIuaCBcCisJU291cmNlL1dlYkNvcmUvZG9tL1JlbmRlcmVkRG9jdW1lbnRNYXJrZXIuaCBc
CiAJU291cmNlL1dlYkNvcmUvZG9tL1Njb3BlZEV2ZW50UXVldWUuY3BwIFwKIAlTb3VyY2UvV2Vi
Q29yZS9kb20vU2NvcGVkRXZlbnRRdWV1ZS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0
YWJsZURvY3VtZW50UGFyc2VyLmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggMmFhYTI1ZTI3YTFh
MjNlNTc0OWE1ZmZmMTY0ZjM4MDA0MzMxMDE2Ni4uMWQyNDg4ZWI5N2Q4YzQyMWQ0YzZhNWFlZGEw
YzM5NWY1YmQ5MWFkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisr
KyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtNTQ1LDYgKzU0NSw3IEBACiAgICAg
ICAgICAgICAnZG9tL1JhbmdlLmgnLAogICAgICAgICAgICAgJ2RvbS9SYW5nZUJvdW5kYXJ5UG9p
bnQuaCcsCiAgICAgICAgICAgICAnZG9tL1JlZ2lzdGVyZWRFdmVudExpc3RlbmVyLmgnLAorICAg
ICAgICAgICAgJ2RvbS9SZW5kZXJlZERvY3VtZW50TWFya2VyLmgnLAogICAgICAgICAgICAgJ2Rv
bS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmgnLAogICAgICAgICAgICAgJ2RvbS9TY3JpcHRSdW5u
ZXIuaCcsCiAgICAgICAgICAgICAnZG9tL1NoYWRvd1Jvb3QuaCcsCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnBybyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCmluZGV4
IDFiZmZiYmZkODY1MjIwOThhMDgzZmQ0M2QwYTFlZTFlMTY1ZWEyYzcuLmQ4ZDdmNWRhMzZkYWYz
ZDdhMGUyOTY3N2YzOGIxNDYyYzIyNzJhYmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUucHJvCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCkBAIC0xNDk1LDYgKzE0
OTUsNyBAQCBIRUFERVJTICs9IFwKICAgICBkb20vUXVhbGlmaWVkTmFtZS5oIFwKICAgICBkb20v
UmFuZ2UuaCBcCiAgICAgZG9tL1JlZ2lzdGVyZWRFdmVudExpc3RlbmVyLmggXAorICAgIGRvbS9S
ZW5kZXJlZERvY3VtZW50TWFya2VyLmggXAogICAgIGRvbS9TY3JpcHRFbGVtZW50LmggXAogICAg
IGRvbS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmggXAogICAgIGRvbS9TZWxlY3RFbGVtZW50Lmgg
XApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3By
b2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagppbmRleCA3
NzY1NDlmMGY4ZGE4NjNmZDg1M2MxMjliZGM0YWUzZjIyNjdlNzAzLi5mZWYxZDUyMDVhY2NkM2Fl
MDgwN2RjNDJmNDEwOGQ3M2I5NDY1ZTdhIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZj
cHJvai9XZWJDb3JlLnZjcHJvagpAQCAtNDYwMzQsNiArNDYwMzQsMTAgQEAKIAkJCQk+CiAJCQk8
L0ZpbGU+CiAJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cZG9tXFJlbmRlcmVkRG9jdW1l
bnRNYXJrZXIuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQogCQkJCVJlbGF0aXZlUGF0
aD0iLi5cZG9tXFNjb3BlZEV2ZW50UXVldWUuY3BwIgogCQkJCT4KIAkJCQk8RmlsZUNvbmZpZ3Vy
YXRpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagppbmRleCAyMGNkZmU0OWQ1ZDQxODg4YzI4N2RmYjJjOWJjZjIwZmYyOWM2M2UzLi4wZDZm
N2I4NDA2Y2UzNjU4N2VmYTQ4ZGRjYzJiMWFjMTIyOTI1NjdlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0zMjYyLDYgKzMyNjIs
NyBAQAogCQlBNzVFOEI4RDBFMURFMkQ2MDA3RjI0ODEgLyogRkVDb21wb25lbnRUcmFuc2Zlci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTc1RThCODUw
RTFERTJENjAwN0YyNDgxIC8qIEZFQ29tcG9uZW50VHJhbnNmZXIuaCAqLzsgfTsKIAkJQTc1RThC
OEUwRTFERTJENjAwN0YyNDgxIC8qIEZFQ29tcG9zaXRlLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3NUU4Qjg2MEUxREUyRDYwMDdGMjQ4MSAvKiBG
RUNvbXBvc2l0ZS5jcHAgKi87IH07CiAJCUE3NUU4QjhGMEUxREUyRDYwMDdGMjQ4MSAvKiBGRUNv
bXBvc2l0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QTc1RThCODcwRTFERTJENjAwN0YyNDgxIC8qIEZFQ29tcG9zaXRlLmggKi87IH07CisJCUE3NkU1
RjdGMTM1RTBEQ0YwMEE2OTgzNyAvKiBSZW5kZXJlZERvY3VtZW50TWFya2VyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzZFNUY3RTEzNUUwRENGMDBB
Njk4MzcgLyogUmVuZGVyZWREb2N1bWVudE1hcmtlci5oICovOyB9OwogCQlBNzc5NzkxOTBENkI5
RDBDMDAzODUxQjkgLyogSW1hZ2VEYXRhLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEE3Nzk3OTEzMEQ2QjlEMEMwMDM4NTFCOSAvKiBJbWFnZURhdGEu
Y3BwICovOyB9OwogCQlBNzc5NzkxQTBENkI5RDBDMDAzODUxQjkgLyogSW1hZ2VEYXRhLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzc5NzkxNDBENkI5
RDBDMDAzODUxQjkgLyogSW1hZ2VEYXRhLmggKi87IH07CiAJCUE3Nzk3OTI4MEQ2QjlFNjQwMDM4
NTFCOSAvKiBKU0ltYWdlRGF0YS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBNzc5NzkyNDBENkI5RTY0MDAzODUxQjkgLyogSlNJbWFnZURhdGEuY3Bw
ICovOyB9OwpAQCAtOTgyMyw2ICs5ODI0LDcgQEAKIAkJQTc1RThCODUwRTFERTJENjAwN0YyNDgx
IC8qIEZFQ29tcG9uZW50VHJhbnNmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gRkVDb21wb25lbnRUcmFuc2Zlci5oOyBwYXRoID0gZmlsdGVycy9GRUNvbXBvbmVudFRyYW5z
ZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3NUU4Qjg2MEUxREUyRDYwMDdG
MjQ4MSAvKiBGRUNvbXBvc2l0ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBGRUNvbXBvc2l0ZS5jcHA7IHBhdGggPSBmaWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc1RThCODcwRTFERTJENjAwN0YyNDgxIC8qIEZF
Q29tcG9zaXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZFQ29tcG9zaXRl
Lmg7IHBhdGggPSBmaWx0ZXJzL0ZFQ29tcG9zaXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUE3NkU1RjdFMTM1RTBEQ0YwMEE2OTgzNyAvKiBSZW5kZXJlZERvY3VtZW50TWFya2Vy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlcmVkRG9jdW1lbnRNYXJr
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc3OTc5MTMwRDZCOUQwQzAwMzg1
MUI5IC8qIEltYWdlRGF0YS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBJbWFnZURhdGEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzc5NzkxNDBE
NkI5RDBDMDAzODUxQjkgLyogSW1hZ2VEYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEltYWdlRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzc5Nzkx
NTBENkI5RDBDMDAzODUxQjkgLyogSW1hZ2VEYXRhLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGgg
PSBJbWFnZURhdGEuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTk1MjIsNiAr
MTk1MjQsNyBAQAogCQkJCUE4NEQ4MjdCMTFEMzMzRUQwMDk3Mjk5MCAvKiBSYXdEYXRhRG9jdW1l
bnRQYXJzZXIuaCAqLywKIAkJCQk4NTAzMUIzNTBBNDRFRkM3MDBGOTkyRTAgLyogUmVnaXN0ZXJl
ZEV2ZW50TGlzdGVuZXIuY3BwICovLAogCQkJCTg1MDMxQjM2MEE0NEVGQzcwMEY5OTJFMCAvKiBS
ZWdpc3RlcmVkRXZlbnRMaXN0ZW5lci5oICovLAorCQkJCUE3NkU1RjdFMTM1RTBEQ0YwMEE2OTgz
NyAvKiBSZW5kZXJlZERvY3VtZW50TWFya2VyLmggKi8sCiAJCQkJOUJEMEJGOTIxMkE0MkJGNTAw
NzJGRDQzIC8qIFNjb3BlZEV2ZW50UXVldWUuY3BwICovLAogCQkJCTlCRDBCRjkxMTJBNDJCRjUw
MDcyRkQ0MyAvKiBTY29wZWRFdmVudFF1ZXVlLmggKi8sCiAJCQkJQTg0RDgyQzAxMUQzNDc0ODAw
OTcyOTkwIC8qIFNjcmlwdGFibGVEb2N1bWVudFBhcnNlci5jcHAgKi8sCkBAIC0yMjE0MCw2ICsy
MjE0Myw3IEBACiAJCQkJRDA2QzBEOEYwQ0ZEMTE0NjAwNjVGNDNGIC8qIFJlbW92ZUZvcm1hdENv
bW1hbmQuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzMzA5RTA1MDk5RTY0OTIwMDU2RTU4MSAvKiBS
ZW1vdmVOb2RlQ29tbWFuZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMzMDlFMDcwOTlFNjQ5MjAw
NTZFNTgxIC8qIFJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW5Db21tYW5kLmggaW4gSGVhZGVy
cyAqLywKKwkJCQlBNzZFNUY3RjEzNUUwRENGMDBBNjk4MzcgLyogUmVuZGVyZWREb2N1bWVudE1h
cmtlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNFQTQ4NUMwOTdEOTMwMjAwOTRDOUU0IC8qIFJl
bmRlckFwcGxldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNFQTQ4NUUwOTdEOTMwMjAwOTRDOUU0
IC8qIFJlbmRlckFyZW5hLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0VBNDg2MDA5N0Q5MzAyMDA5
NEM5RTQgLyogUmVuZGVyQmxvY2suaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZG9tL0RvY3VtZW50TWFya2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1l
bnRNYXJrZXIuaAppbmRleCAxNzExYTk2ODcyYTA2NzczYTI3YzczM2VkNDEzNTQ5YmVjMzAzMzU4
Li4wZjIxMzQ1ZTM4NGRlZjQwZDRmOGI4YmQ1NjIxNGE0MDc3NWExNzA0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9k
b20vRG9jdW1lbnRNYXJrZXIuaApAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgIlBsYXRmb3Jt
U3RyaW5nLmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KIAorCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIC8vIEEgcmFuZ2Ugb2YgYSBub2RlIHdpdGhpbiBhIGRvY3VtZW50IHRoYXQgaXMgIm1h
cmtlZCIsIHN1Y2ggYXMgdGhlIHJhbmdlIG9mIGEgbWlzc3BlbGxlZCB3b3JkLgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50TWFya2VyQ29udHJvbGxlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmNwcAppbmRleCBkOTdmMmFm
MWJiN2ZjMWZlNTE2NTk0MjE4MjE5YWExNjJiZjE4YzIyLi5jM2VkYzJhN2MyODczZmM1M2M2NjBi
MzNmOGIxZWE2NjRiZmVjYzYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1l
bnRNYXJrZXJDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRN
YXJrZXJDb250cm9sbGVyLmNwcApAQCAtMjksMTUgKzI5LDExIEBACiAKICNpbmNsdWRlICJOb2Rl
LmgiCiAjaW5jbHVkZSAiUmFuZ2UuaCIKKyNpbmNsdWRlICJSZW5kZXJlZERvY3VtZW50TWFya2Vy
LmgiCiAjaW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
c3RhdGljIEludFJlY3QgcGxhY2Vob2xkZXJSZWN0Rm9yTWFya2VyKCkKLXsKLSAgICByZXR1cm4g
SW50UmVjdCgtMSwgLTEsIC0xLCAtMSk7Ci19Ci0KIGlubGluZSBib29sIERvY3VtZW50TWFya2Vy
Q29udHJvbGxlcjo6cG9zc2libHlIYXNNYXJrZXJzKERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBl
cyB0eXBlcykKIHsKICAgICByZXR1cm4gbV9wb3NzaWJseUV4aXN0aW5nTWFya2VyVHlwZXMuaW50
ZXJzZWN0cyh0eXBlcyk7CkBAIC04NSw3ICs4MSw3IEBAIHZvaWQgRG9jdW1lbnRNYXJrZXJDb250
cm9sbGVyOjpyZW1vdmVNYXJrZXJzKFJhbmdlKiByYW5nZSwgRG9jdW1lbnRNYXJrZXI6Ok1hcmtl
CiAvLyBNYXJrZXJzIGFyZSBzdG9yZWQgaW4gb3JkZXIgc29ydGVkIGJ5IHRoZWlyIHN0YXJ0IG9m
ZnNldC4KIC8vIE1hcmtlcnMgb2YgdGhlIHNhbWUgdHlwZSBkbyBub3Qgb3ZlcmxhcCBlYWNoIG90
aGVyLgogCi12b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6YWRkTWFya2VyKE5vZGUqIG5v
ZGUsIERvY3VtZW50TWFya2VyIG5ld01hcmtlcikgCit2b2lkIERvY3VtZW50TWFya2VyQ29udHJv
bGxlcjo6YWRkTWFya2VyKE5vZGUqIG5vZGUsIGNvbnN0IERvY3VtZW50TWFya2VyJiBuZXdNYXJr
ZXIpIAogewogICAgIEFTU0VSVChuZXdNYXJrZXIuZW5kT2Zmc2V0ID49IG5ld01hcmtlci5zdGFy
dE9mZnNldCk7CiAgICAgaWYgKG5ld01hcmtlci5lbmRPZmZzZXQgPT0gbmV3TWFya2VyLnN0YXJ0
T2Zmc2V0KQpAQCAtOTMsMzAgKzg5LDI2IEBAIHZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVy
OjphZGRNYXJrZXIoTm9kZSogbm9kZSwgRG9jdW1lbnRNYXJrZXIgbmV3TWFya2VyKQogCiAgICAg
bV9wb3NzaWJseUV4aXN0aW5nTWFya2VyVHlwZXMuYWRkKG5ld01hcmtlci50eXBlKTsKIAotICAg
IE1hcmtlck1hcFZlY3RvclBhaXIqIHZlY3RvclBhaXIgPSBtX21hcmtlcnMuZ2V0KG5vZGUpOwor
ICAgIE1hcmtlckxpc3QqIGxpc3QgPSBtX21hcmtlcnMuZ2V0KG5vZGUpOwogCi0gICAgaWYgKCF2
ZWN0b3JQYWlyKSB7Ci0gICAgICAgIHZlY3RvclBhaXIgPSBuZXcgTWFya2VyTWFwVmVjdG9yUGFp
cjsKLSAgICAgICAgdmVjdG9yUGFpci0+Zmlyc3QuYXBwZW5kKG5ld01hcmtlcik7Ci0gICAgICAg
IHZlY3RvclBhaXItPnNlY29uZC5hcHBlbmQocGxhY2Vob2xkZXJSZWN0Rm9yTWFya2VyKCkpOwot
ICAgICAgICBtX21hcmtlcnMuc2V0KG5vZGUsIHZlY3RvclBhaXIpOworICAgIGlmICghbGlzdCkg
eworICAgICAgICBsaXN0ID0gbmV3IE1hcmtlckxpc3Q7CisgICAgICAgIGxpc3QtPmFwcGVuZChS
ZW5kZXJlZERvY3VtZW50TWFya2VyKG5ld01hcmtlcikpOworICAgICAgICBtX21hcmtlcnMuc2V0
KG5vZGUsIGxpc3QpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIFZlY3RvcjxEb2N1bWVudE1hcmtl
cj4mIG1hcmtlcnMgPSB2ZWN0b3JQYWlyLT5maXJzdDsKLSAgICAgICAgVmVjdG9yPEludFJlY3Q+
JiByZWN0cyA9IHZlY3RvclBhaXItPnNlY29uZDsKLSAgICAgICAgc2l6ZV90IG51bU1hcmtlcnMg
PSBtYXJrZXJzLnNpemUoKTsKLSAgICAgICAgQVNTRVJUKG51bU1hcmtlcnMgPT0gcmVjdHMuc2l6
ZSgpKTsKKyAgICAgICAgUmVuZGVyZWREb2N1bWVudE1hcmtlciB0b0luc2VydChuZXdNYXJrZXIp
OworICAgICAgICBzaXplX3QgbnVtTWFya2VycyA9IGxpc3QtPnNpemUoKTsKICAgICAgICAgc2l6
ZV90IGk7CiAgICAgICAgIC8vIEl0ZXJhdGUgb3ZlciBhbGwgbWFya2VycyB3aG9zZSBzdGFydCBv
ZmZzZXQgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBuZXcgbWFya2VyJ3MuCiAgICAgICAg
IC8vIElmIG9uZSBvZiB0aGVtIGlzIG9mIHRoZSBzYW1lIHR5cGUgYXMgdGhlIG5ldyBtYXJrZXIg
YW5kIHRvdWNoZXMgaXQgb3IgaW50ZXJzZWN0cyB3aXRoIGl0CiAgICAgICAgIC8vICh0aGVyZSBp
cyBhdCBtb3N0IG9uZSksIHJlbW92ZSBpdCBhbmQgYWRqdXN0IHRoZSBuZXcgbWFya2VyJ3Mgc3Rh
cnQgb2Zmc2V0IHRvIGVuY29tcGFzcyBpdC4KICAgICAgICAgZm9yIChpID0gMDsgaSA8IG51bU1h
cmtlcnM7ICsraSkgewotICAgICAgICAgICAgRG9jdW1lbnRNYXJrZXIgbWFya2VyID0gbWFya2Vy
c1tpXTsKLSAgICAgICAgICAgIGlmIChtYXJrZXIuc3RhcnRPZmZzZXQgPiBuZXdNYXJrZXIuc3Rh
cnRPZmZzZXQpCisgICAgICAgICAgICBEb2N1bWVudE1hcmtlciBtYXJrZXIgPSBsaXN0LT5hdChp
KTsKKyAgICAgICAgICAgIGlmIChtYXJrZXIuc3RhcnRPZmZzZXQgPiB0b0luc2VydC5zdGFydE9m
ZnNldCkKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGlmIChtYXJrZXIudHlw
ZSA9PSBuZXdNYXJrZXIudHlwZSAmJiBtYXJrZXIuZW5kT2Zmc2V0ID49IG5ld01hcmtlci5zdGFy
dE9mZnNldCkgewotICAgICAgICAgICAgICAgIG5ld01hcmtlci5zdGFydE9mZnNldCA9IG1hcmtl
ci5zdGFydE9mZnNldDsKLSAgICAgICAgICAgICAgICBtYXJrZXJzLnJlbW92ZShpKTsKLSAgICAg
ICAgICAgICAgICByZWN0cy5yZW1vdmUoaSk7CisgICAgICAgICAgICBpZiAobWFya2VyLnR5cGUg
PT0gdG9JbnNlcnQudHlwZSAmJiBtYXJrZXIuZW5kT2Zmc2V0ID49IHRvSW5zZXJ0LnN0YXJ0T2Zm
c2V0KSB7CisgICAgICAgICAgICAgICAgdG9JbnNlcnQuc3RhcnRPZmZzZXQgPSBtYXJrZXIuc3Rh
cnRPZmZzZXQ7CisgICAgICAgICAgICAgICAgbGlzdC0+cmVtb3ZlKGkpOwogICAgICAgICAgICAg
ICAgIG51bU1hcmtlcnMtLTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0K
QEAgLTEyNiwxNCArMTE4LDEzIEBAIHZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjphZGRN
YXJrZXIoTm9kZSogbm9kZSwgRG9jdW1lbnRNYXJrZXIgbmV3TWFya2VyKQogICAgICAgICAvLyBy
ZW1vdmluZyBtYXJrZXJzIG9mIHRoZSBzYW1lIHR5cGUgYXMgdGhlIG5ldyBtYXJrZXIgd2hpY2gg
dG91Y2ggaXQgb3IgaW50ZXJzZWN0IHdpdGggaXQsCiAgICAgICAgIC8vIGFkanVzdGluZyB0aGUg
bmV3IG1hcmtlcidzIGVuZCBvZmZzZXQgdG8gY292ZXIgdGhlbSBpZiBuZWNlc3NhcnkuCiAgICAg
ICAgIHdoaWxlIChqIDwgbnVtTWFya2VycykgewotICAgICAgICAgICAgRG9jdW1lbnRNYXJrZXIg
bWFya2VyID0gbWFya2Vyc1tqXTsKLSAgICAgICAgICAgIGlmIChtYXJrZXIuc3RhcnRPZmZzZXQg
PiBuZXdNYXJrZXIuZW5kT2Zmc2V0KQorICAgICAgICAgICAgRG9jdW1lbnRNYXJrZXIgbWFya2Vy
ID0gbGlzdC0+YXQoaik7CisgICAgICAgICAgICBpZiAobWFya2VyLnN0YXJ0T2Zmc2V0ID4gdG9J
bnNlcnQuZW5kT2Zmc2V0KQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgaWYg
KG1hcmtlci50eXBlID09IG5ld01hcmtlci50eXBlKSB7Ci0gICAgICAgICAgICAgICAgbWFya2Vy
cy5yZW1vdmUoaik7Ci0gICAgICAgICAgICAgICAgcmVjdHMucmVtb3ZlKGopOwotICAgICAgICAg
ICAgICAgIGlmIChuZXdNYXJrZXIuZW5kT2Zmc2V0IDw9IG1hcmtlci5lbmRPZmZzZXQpIHsKLSAg
ICAgICAgICAgICAgICAgICAgbmV3TWFya2VyLmVuZE9mZnNldCA9IG1hcmtlci5lbmRPZmZzZXQ7
CisgICAgICAgICAgICBpZiAobWFya2VyLnR5cGUgPT0gdG9JbnNlcnQudHlwZSkgeworICAgICAg
ICAgICAgICAgIGxpc3QtPnJlbW92ZShqKTsKKyAgICAgICAgICAgICAgICBpZiAodG9JbnNlcnQu
ZW5kT2Zmc2V0IDw9IG1hcmtlci5lbmRPZmZzZXQpIHsKKyAgICAgICAgICAgICAgICAgICAgdG9J
bnNlcnQuZW5kT2Zmc2V0ID0gbWFya2VyLmVuZE9mZnNldDsKICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIG51bU1hcmtlcnMtLTsK
QEAgLTE0MSw4ICsxMzIsNyBAQCB2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6YWRkTWFy
a2VyKE5vZGUqIG5vZGUsIERvY3VtZW50TWFya2VyIG5ld01hcmtlcikKICAgICAgICAgICAgICAg
ICBqKys7CiAgICAgICAgIH0KICAgICAgICAgLy8gQXQgdGhpcyBwb2ludCBpIHBvaW50cyB0byB0
aGUgbm9kZSBiZWZvcmUgd2hpY2ggd2Ugd2FudCB0byBpbnNlcnQuCi0gICAgICAgIG1hcmtlcnMu
aW5zZXJ0KGksIG5ld01hcmtlcik7Ci0gICAgICAgIHJlY3RzLmluc2VydChpLCBwbGFjZWhvbGRl
clJlY3RGb3JNYXJrZXIoKSk7CisgICAgICAgIGxpc3QtPmluc2VydChpLCBSZW5kZXJlZERvY3Vt
ZW50TWFya2VyKHRvSW5zZXJ0KSk7CiAgICAgfQogCiAgICAgLy8gcmVwYWludCB0aGUgYWZmZWN0
ZWQgbm9kZQpAQCAtMTYxLDE3ICsxNTEsMTQgQEAgdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xs
ZXI6OmNvcHlNYXJrZXJzKE5vZGUqIHNyY05vZGUsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LAogICAg
ICAgICByZXR1cm47CiAgICAgQVNTRVJUKCFtX21hcmtlcnMuaXNFbXB0eSgpKTsKIAotICAgIE1h
cmtlck1hcFZlY3RvclBhaXIqIHZlY3RvclBhaXIgPSBtX21hcmtlcnMuZ2V0KHNyY05vZGUpOwot
ICAgIGlmICghdmVjdG9yUGFpcikKKyAgICBNYXJrZXJMaXN0KiBsaXN0ID0gbV9tYXJrZXJzLmdl
dChzcmNOb2RlKTsKKyAgICBpZiAoIWxpc3QpCiAgICAgICAgIHJldHVybjsKIAotICAgIEFTU0VS
VCh2ZWN0b3JQYWlyLT5maXJzdC5zaXplKCkgPT0gdmVjdG9yUGFpci0+c2Vjb25kLnNpemUoKSk7
Ci0KICAgICBib29sIGRvY0RpcnR5ID0gZmFsc2U7CiAgICAgdW5zaWduZWQgZW5kT2Zmc2V0ID0g
c3RhcnRPZmZzZXQgKyBsZW5ndGggLSAxOwotICAgIFZlY3RvcjxEb2N1bWVudE1hcmtlcj4mIG1h
cmtlcnMgPSB2ZWN0b3JQYWlyLT5maXJzdDsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSAhPSBt
YXJrZXJzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIERvY3VtZW50TWFya2VyIG1hcmtlciA9IG1h
cmtlcnNbaV07CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgIT0gbGlzdC0+c2l6ZSgpOyArK2kp
IHsKKyAgICAgICAgRG9jdW1lbnRNYXJrZXIgbWFya2VyID0gbGlzdC0+YXQoaSk7CiAKICAgICAg
ICAgLy8gc3RvcCBpZiB3ZSBhcmUgbm93IHBhc3QgdGhlIHNwZWNpZmllZCByYW5nZQogICAgICAg
ICBpZiAobWFya2VyLnN0YXJ0T2Zmc2V0ID4gZW5kT2Zmc2V0KQpAQCAtMjA3LDE3ICsxOTQsMTQg
QEAgdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnJlbW92ZU1hcmtlcnMoTm9kZSogbm9k
ZSwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIGkKICAgICAgICAgcmV0dXJuOwogICAgIEFTU0VSVCgh
KG1fbWFya2Vycy5pc0VtcHR5KCkpKTsKIAotICAgIE1hcmtlck1hcFZlY3RvclBhaXIqIHZlY3Rv
clBhaXIgPSBtX21hcmtlcnMuZ2V0KG5vZGUpOwotICAgIGlmICghdmVjdG9yUGFpcikKKyAgICBN
YXJrZXJMaXN0KiBsaXN0ID0gbV9tYXJrZXJzLmdldChub2RlKTsKKyAgICBpZiAoIWxpc3QpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIFZlY3RvcjxEb2N1bWVudE1hcmtlcj4mIG1hcmtlcnMgPSB2
ZWN0b3JQYWlyLT5maXJzdDsKLSAgICBWZWN0b3I8SW50UmVjdD4mIHJlY3RzID0gdmVjdG9yUGFp
ci0+c2Vjb25kOwotICAgIEFTU0VSVChtYXJrZXJzLnNpemUoKSA9PSByZWN0cy5zaXplKCkpOwog
ICAgIGJvb2wgZG9jRGlydHkgPSBmYWxzZTsKICAgICB1bnNpZ25lZCBlbmRPZmZzZXQgPSBzdGFy
dE9mZnNldCArIGxlbmd0aDsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1hcmtlcnMuc2l6
ZSgpOykgewotICAgICAgICBEb2N1bWVudE1hcmtlciBtYXJrZXIgPSBtYXJrZXJzW2ldOworICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGlzdC0+c2l6ZSgpOykgeworICAgICAgICBEb2N1bWVu
dE1hcmtlciBtYXJrZXIgPSBsaXN0LT5hdChpKTsKIAogICAgICAgICAvLyBtYXJrZXJzIGFyZSBy
ZXR1cm5lZCBpbiBvcmRlciwgc28gc3RvcCBpZiB3ZSBhcmUgbm93IHBhc3QgdGhlIHNwZWNpZmll
ZCByYW5nZQogICAgICAgICBpZiAobWFya2VyLnN0YXJ0T2Zmc2V0ID49IGVuZE9mZnNldCkKQEAg
LTIzMiw5ICsyMTYsOCBAQCB2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6cmVtb3ZlTWFy
a2VycyhOb2RlKiBub2RlLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgaQogICAgICAgICAvLyBhdCB0
aGlzIHBvaW50IHdlIGtub3cgdGhhdCBtYXJrZXIgYW5kIHRhcmdldCBpbnRlcnNlY3QgaW4gc29t
ZSB3YXkKICAgICAgICAgZG9jRGlydHkgPSB0cnVlOwogCi0gICAgICAgIC8vIHBpdGNoIHRoZSBv
bGQgbWFya2VyIGFuZCBhbnkgYXNzb2NpYXRlZCByZWN0Ci0gICAgICAgIG1hcmtlcnMucmVtb3Zl
KGkpOwotICAgICAgICByZWN0cy5yZW1vdmUoaSk7CisgICAgICAgIC8vIHBpdGNoIHRoZSBvbGQg
bWFya2VyCisgICAgICAgIGxpc3QtPnJlbW92ZShpKTsKIAogICAgICAgICBpZiAoc2hvdWxkUmVt
b3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXIpCiAgICAgICAgICAgICAvLyBTdG9wIGhlcmUu
IERvbid0IGFkZCByZXN1bHRpbmcgc2xpY2VzIGJhY2suCkBAIC0yNDQsMjUgKzIyNywyMiBAQCB2
b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6cmVtb3ZlTWFya2VycyhOb2RlKiBub2RlLCB1
bnNpZ25lZCBzdGFydE9mZnNldCwgaQogICAgICAgICBpZiAoc3RhcnRPZmZzZXQgPiBtYXJrZXIu
c3RhcnRPZmZzZXQpIHsKICAgICAgICAgICAgIERvY3VtZW50TWFya2VyIG5ld0xlZnQgPSBtYXJr
ZXI7CiAgICAgICAgICAgICBuZXdMZWZ0LmVuZE9mZnNldCA9IHN0YXJ0T2Zmc2V0OwotICAgICAg
ICAgICAgbWFya2Vycy5pbnNlcnQoaSwgbmV3TGVmdCk7Ci0gICAgICAgICAgICByZWN0cy5pbnNl
cnQoaSwgcGxhY2Vob2xkZXJSZWN0Rm9yTWFya2VyKCkpOworICAgICAgICAgICAgbGlzdC0+aW5z
ZXJ0KGksIFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIobmV3TGVmdCkpOwogICAgICAgICAgICAgLy8g
aSBub3cgcG9pbnRzIHRvIHRoZSBuZXdseS1pbnNlcnRlZCBub2RlLCBidXQgd2Ugd2FudCB0byBz
a2lwIHRoYXQgb25lCiAgICAgICAgICAgICBpKys7CiAgICAgICAgIH0KICAgICAgICAgaWYgKG1h
cmtlci5lbmRPZmZzZXQgPiBlbmRPZmZzZXQpIHsKICAgICAgICAgICAgIERvY3VtZW50TWFya2Vy
IG5ld1JpZ2h0ID0gbWFya2VyOwogICAgICAgICAgICAgbmV3UmlnaHQuc3RhcnRPZmZzZXQgPSBl
bmRPZmZzZXQ7Ci0gICAgICAgICAgICBtYXJrZXJzLmluc2VydChpLCBuZXdSaWdodCk7Ci0gICAg
ICAgICAgICByZWN0cy5pbnNlcnQoaSwgcGxhY2Vob2xkZXJSZWN0Rm9yTWFya2VyKCkpOworICAg
ICAgICAgICAgbGlzdC0+aW5zZXJ0KGksIFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIobmV3UmlnaHQp
KTsKICAgICAgICAgICAgIC8vIGkgbm93IHBvaW50cyB0byB0aGUgbmV3bHktaW5zZXJ0ZWQgbm9k
ZSwgYnV0IHdlIHdhbnQgdG8gc2tpcCB0aGF0IG9uZQogICAgICAgICAgICAgaSsrOwogICAgICAg
ICB9CiAgICAgfQogCi0gICAgaWYgKG1hcmtlcnMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIEFTU0VS
VChyZWN0cy5pc0VtcHR5KCkpOworICAgIGlmIChsaXN0LT5pc0VtcHR5KCkpIHsKICAgICAgICAg
bV9tYXJrZXJzLnJlbW92ZShub2RlKTsKLSAgICAgICAgZGVsZXRlIHZlY3RvclBhaXI7CisgICAg
ICAgIGRlbGV0ZSBsaXN0OwogICAgIH0KICAgICAKICAgICBpZiAobV9tYXJrZXJzLmlzRW1wdHko
KSkKQEAgLTI4MywyNSArMjYzLDE2IEBAIERvY3VtZW50TWFya2VyKiBEb2N1bWVudE1hcmtlckNv
bnRyb2xsZXI6Om1hcmtlckNvbnRhaW5pbmdQb2ludChjb25zdCBJbnRQb2ludCYKICAgICBNYXJr
ZXJNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fbWFya2Vycy5lbmQoKTsKICAgICBmb3IgKE1hcmtlck1h
cDo6aXRlcmF0b3Igbm9kZUl0ZXJhdG9yID0gbV9tYXJrZXJzLmJlZ2luKCk7IG5vZGVJdGVyYXRv
ciAhPSBlbmQ7ICsrbm9kZUl0ZXJhdG9yKSB7CiAgICAgICAgIC8vIGlubmVyIGxvb3A7IHByb2Nl
c3MgZWFjaCBtYXJrZXIgaW4gdGhpcyBub2RlCi0gICAgICAgIE1hcmtlck1hcFZlY3RvclBhaXIq
IHZlY3RvclBhaXIgPSBub2RlSXRlcmF0b3ItPnNlY29uZDsKLSAgICAgICAgVmVjdG9yPERvY3Vt
ZW50TWFya2VyPiYgbWFya2VycyA9IHZlY3RvclBhaXItPmZpcnN0OwotICAgICAgICBWZWN0b3I8
SW50UmVjdD4mIHJlY3RzID0gdmVjdG9yUGFpci0+c2Vjb25kOwotICAgICAgICBBU1NFUlQobWFy
a2Vycy5zaXplKCkgPT0gcmVjdHMuc2l6ZSgpKTsKLSAgICAgICAgdW5zaWduZWQgbWFya2VyQ291
bnQgPSBtYXJrZXJzLnNpemUoKTsKKyAgICAgICAgTWFya2VyTGlzdCogbGlzdCA9IG5vZGVJdGVy
YXRvci0+c2Vjb25kOworICAgICAgICB1bnNpZ25lZCBtYXJrZXJDb3VudCA9IGxpc3QtPnNpemUo
KTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBtYXJrZXJJbmRleCA9IDA7IG1hcmtlckluZGV4IDwg
bWFya2VyQ291bnQ7ICsrbWFya2VySW5kZXgpIHsKLSAgICAgICAgICAgIERvY3VtZW50TWFya2Vy
JiBtYXJrZXIgPSBtYXJrZXJzW21hcmtlckluZGV4XTsKKyAgICAgICAgICAgIFJlbmRlcmVkRG9j
dW1lbnRNYXJrZXImIG1hcmtlciA9IGxpc3QtPmF0KG1hcmtlckluZGV4KTsKIAogICAgICAgICAg
ICAgLy8gc2tpcCBtYXJrZXIgdGhhdCBpcyB3cm9uZyB0eXBlCiAgICAgICAgICAgICBpZiAobWFy
a2VyLnR5cGUgIT0gbWFya2VyVHlwZSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAotICAg
ICAgICAgICAgSW50UmVjdCYgciA9IHJlY3RzW21hcmtlckluZGV4XTsKLQotICAgICAgICAgICAg
Ly8gc2tpcCBwbGFjZWhvbGRlciByZWN0cwotICAgICAgICAgICAgaWYgKHIgPT0gcGxhY2Vob2xk
ZXJSZWN0Rm9yTWFya2VyKCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAg
ICAgIGlmIChyLmNvbnRhaW5zKHBvaW50KSkKKyAgICAgICAgICAgIGlmIChtYXJrZXIuY29udGFp
bnMocG9pbnQpKQogICAgICAgICAgICAgICAgIHJldHVybiAmbWFya2VyOwogICAgICAgICB9CiAg
ICAgfQpAQCAtMzExLDEwICsyODIsMTUgQEAgRG9jdW1lbnRNYXJrZXIqIERvY3VtZW50TWFya2Vy
Q29udHJvbGxlcjo6bWFya2VyQ29udGFpbmluZ1BvaW50KGNvbnN0IEludFBvaW50JgogCiBWZWN0
b3I8RG9jdW1lbnRNYXJrZXI+IERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6bWFya2Vyc0Zvck5v
ZGUoTm9kZSogbm9kZSkKIHsKLSAgICBNYXJrZXJNYXBWZWN0b3JQYWlyKiB2ZWN0b3JQYWlyID0g
bV9tYXJrZXJzLmdldChub2RlKTsKLSAgICBpZiAodmVjdG9yUGFpcikKLSAgICAgICAgcmV0dXJu
IHZlY3RvclBhaXItPmZpcnN0OwotICAgIHJldHVybiBWZWN0b3I8RG9jdW1lbnRNYXJrZXI+KCk7
CisgICAgVmVjdG9yPERvY3VtZW50TWFya2VyPiByZXN1bHQ7CisgICAgTWFya2VyTGlzdCogbGlz
dCA9IG1fbWFya2Vycy5nZXQobm9kZSk7CisgICAgaWYgKCFsaXN0KQorICAgICAgICByZXR1cm4g
cmVzdWx0OworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsaXN0LT5zaXplKCk7ICsraSkK
KyAgICAgICAgcmVzdWx0LmFwcGVuZChsaXN0LT5hdChpKSk7CisKKyAgICByZXR1cm4gcmVzdWx0
OwogfQogCiBWZWN0b3I8RG9jdW1lbnRNYXJrZXI+IERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6
bWFya2Vyc0luUmFuZ2UoUmFuZ2UqIHJhbmdlLCBEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZSBt
YXJrZXJUeXBlKQpAQCAtMzU4LDI0ICszMzQsMTkgQEAgVmVjdG9yPEludFJlY3Q+IERvY3VtZW50
TWFya2VyQ29udHJvbGxlcjo6cmVuZGVyZWRSZWN0c0Zvck1hcmtlcnMoRG9jdW1lbnRNYXJrZXIK
ICAgICBNYXJrZXJNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fbWFya2Vycy5lbmQoKTsKICAgICBmb3Ig
KE1hcmtlck1hcDo6aXRlcmF0b3Igbm9kZUl0ZXJhdG9yID0gbV9tYXJrZXJzLmJlZ2luKCk7IG5v
ZGVJdGVyYXRvciAhPSBlbmQ7ICsrbm9kZUl0ZXJhdG9yKSB7CiAgICAgICAgIC8vIGlubmVyIGxv
b3A7IHByb2Nlc3MgZWFjaCBtYXJrZXIgaW4gdGhpcyBub2RlCi0gICAgICAgIE1hcmtlck1hcFZl
Y3RvclBhaXIqIHZlY3RvclBhaXIgPSBub2RlSXRlcmF0b3ItPnNlY29uZDsKLSAgICAgICAgVmVj
dG9yPERvY3VtZW50TWFya2VyPiYgbWFya2VycyA9IHZlY3RvclBhaXItPmZpcnN0OwotICAgICAg
ICBWZWN0b3I8SW50UmVjdD4mIHJlY3RzID0gdmVjdG9yUGFpci0+c2Vjb25kOwotICAgICAgICBB
U1NFUlQobWFya2Vycy5zaXplKCkgPT0gcmVjdHMuc2l6ZSgpKTsKLSAgICAgICAgdW5zaWduZWQg
bWFya2VyQ291bnQgPSBtYXJrZXJzLnNpemUoKTsKKyAgICAgICAgTWFya2VyTGlzdCogbGlzdCA9
IG5vZGVJdGVyYXRvci0+c2Vjb25kOworICAgICAgICB1bnNpZ25lZCBtYXJrZXJDb3VudCA9IGxp
c3QtPnNpemUoKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBtYXJrZXJJbmRleCA9IDA7IG1hcmtl
ckluZGV4IDwgbWFya2VyQ291bnQ7ICsrbWFya2VySW5kZXgpIHsKLSAgICAgICAgICAgIERvY3Vt
ZW50TWFya2VyIG1hcmtlciA9IG1hcmtlcnNbbWFya2VySW5kZXhdOworICAgICAgICAgICAgY29u
c3QgUmVuZGVyZWREb2N1bWVudE1hcmtlciYgbWFya2VyID0gbGlzdC0+YXQobWFya2VySW5kZXgp
OwogCiAgICAgICAgICAgICAvLyBza2lwIG1hcmtlciB0aGF0IGlzIHdyb25nIHR5cGUKICAgICAg
ICAgICAgIGlmIChtYXJrZXIudHlwZSAhPSBtYXJrZXJUeXBlKQogICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwogCi0gICAgICAgICAgICBJbnRSZWN0IHIgPSByZWN0c1ttYXJrZXJJbmRleF07Ci0g
ICAgICAgICAgICAvLyBza2lwIHBsYWNlaG9sZGVyIHJlY3RzCi0gICAgICAgICAgICBpZiAociA9
PSBwbGFjZWhvbGRlclJlY3RGb3JNYXJrZXIoKSkKKyAgICAgICAgICAgIGlmICghbWFya2VyLmlz
UmVuZGVyZWQoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICAgICAgcmVz
dWx0LmFwcGVuZChyKTsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQobWFya2VyLnJlbmRlcmVk
UmVjdCgpKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMzkwLDcgKzM2MSw3IEBAIHZvaWQgRG9j
dW1lbnRNYXJrZXJDb250cm9sbGVyOjpyZW1vdmVNYXJrZXJzKE5vZGUqIG5vZGUsIERvY3VtZW50
TWFya2VyOjpNYXJrZXJUCiAgICAgCiAgICAgTWFya2VyTWFwOjppdGVyYXRvciBpdGVyYXRvciA9
IG1fbWFya2Vycy5maW5kKG5vZGUpOwogICAgIGlmIChpdGVyYXRvciAhPSBtX21hcmtlcnMuZW5k
KCkpCi0gICAgICAgIHJlbW92ZU1hcmtlcnNGcm9tTWFya2VyTWFwVmVjdG9yUGFpcihub2RlLCBp
dGVyYXRvci0+c2Vjb25kLCBtYXJrZXJUeXBlcyk7CisgICAgICAgIHJlbW92ZU1hcmtlcnNGcm9t
TGlzdChub2RlLCBpdGVyYXRvci0+c2Vjb25kLCBtYXJrZXJUeXBlcyk7CiB9CiAKIHZvaWQgRG9j
dW1lbnRNYXJrZXJDb250cm9sbGVyOjpyZW1vdmVNYXJrZXJzKERvY3VtZW50TWFya2VyOjpNYXJr
ZXJUeXBlcyBtYXJrZXJUeXBlcykKQEAgLTQwMiwzMCArMzczLDIzIEBAIHZvaWQgRG9jdW1lbnRN
YXJrZXJDb250cm9sbGVyOjpyZW1vdmVNYXJrZXJzKERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBl
cyBtYXJrZXJUCiAgICAgLy8gb3V0ZXIgbG9vcDogcHJvY2VzcyBlYWNoIG1hcmtlcmVkIG5vZGUg
aW4gdGhlIGRvY3VtZW50CiAgICAgTWFya2VyTWFwIG1hcmtlck1hcENvcHkgPSBtX21hcmtlcnM7
CiAgICAgTWFya2VyTWFwOjppdGVyYXRvciBlbmQgPSBtYXJrZXJNYXBDb3B5LmVuZCgpOwotICAg
IGZvciAoTWFya2VyTWFwOjppdGVyYXRvciBpID0gbWFya2VyTWFwQ29weS5iZWdpbigpOyBpICE9
IGVuZDsgKytpKSB7Ci0gICAgICAgIE5vZGUqIG5vZGUgPSBpLT5maXJzdC5nZXQoKTsKLSAgICAg
ICAgTWFya2VyTWFwVmVjdG9yUGFpciogdmVjdG9yUGFpciA9IGktPnNlY29uZDsKLSAgICAgICAg
cmVtb3ZlTWFya2Vyc0Zyb21NYXJrZXJNYXBWZWN0b3JQYWlyKG5vZGUsIHZlY3RvclBhaXIsIG1h
cmtlclR5cGVzKTsKLSAgICB9Ci0KKyAgICBmb3IgKE1hcmtlck1hcDo6aXRlcmF0b3IgaSA9IG1h
cmtlck1hcENvcHkuYmVnaW4oKTsgaSAhPSBlbmQ7ICsraSkKKyAgICAgICAgcmVtb3ZlTWFya2Vy
c0Zyb21MaXN0KGktPmZpcnN0LmdldCgpLCBpLT5zZWNvbmQsIG1hcmtlclR5cGVzKTsKICAgICBt
X3Bvc3NpYmx5RXhpc3RpbmdNYXJrZXJUeXBlcy5yZW1vdmUobWFya2VyVHlwZXMpOwogfQogCiAv
LyBUaGlzIGZ1bmN0aW9uIG1heSByZWxlYXNlIG5vZGUgYW5kIHZlY3RvclBhaXIuCi12b2lkIERv
Y3VtZW50TWFya2VyQ29udHJvbGxlcjo6cmVtb3ZlTWFya2Vyc0Zyb21NYXJrZXJNYXBWZWN0b3JQ
YWlyKE5vZGUqIG5vZGUsIE1hcmtlck1hcFZlY3RvclBhaXIqIHZlY3RvclBhaXIsIERvY3VtZW50
TWFya2VyOjpNYXJrZXJUeXBlcyBtYXJrZXJUeXBlcykKK3ZvaWQgRG9jdW1lbnRNYXJrZXJDb250
cm9sbGVyOjpyZW1vdmVNYXJrZXJzRnJvbUxpc3QoTm9kZSogbm9kZSwgTWFya2VyTGlzdCogbGlz
dCwgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGVzIG1hcmtlclR5cGVzKQogewogICAgIGlmICht
YXJrZXJUeXBlcyA9PSBEb2N1bWVudE1hcmtlcjo6QWxsTWFya2VycygpKSB7Ci0gICAgICAgIGRl
bGV0ZSB2ZWN0b3JQYWlyOworICAgICAgICBkZWxldGUgbGlzdDsKICAgICAgICAgbV9tYXJrZXJz
LnJlbW92ZShub2RlKTsKICAgICAgICAgaWYgKFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBub2Rl
LT5yZW5kZXJlcigpKQogICAgICAgICAgICAgcmVuZGVyZXItPnJlcGFpbnQoKTsKICAgICB9IGVs
c2UgewogICAgICAgICBib29sIG5lZWRzUmVwYWludCA9IGZhbHNlOwotICAgICAgICBWZWN0b3I8
RG9jdW1lbnRNYXJrZXI+JiBtYXJrZXJzID0gdmVjdG9yUGFpci0+Zmlyc3Q7Ci0gICAgICAgIFZl
Y3RvcjxJbnRSZWN0PiYgcmVjdHMgPSB2ZWN0b3JQYWlyLT5zZWNvbmQ7Ci0gICAgICAgIEFTU0VS
VChtYXJrZXJzLnNpemUoKSA9PSByZWN0cy5zaXplKCkpOwotICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSAhPSBtYXJrZXJzLnNpemUoKTspIHsKLSAgICAgICAgICAgIERvY3VtZW50TWFya2Vy
IG1hcmtlciA9IG1hcmtlcnNbaV07CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpICE9IGxp
c3QtPnNpemUoKTspIHsKKyAgICAgICAgICAgIERvY3VtZW50TWFya2VyIG1hcmtlciA9IGxpc3Qt
PmF0KGkpOwogCiAgICAgICAgICAgICAvLyBza2lwIG5vZGVzIHRoYXQgYXJlIG5vdCBvZiB0aGUg
c3BlY2lmaWVkIHR5cGUKICAgICAgICAgICAgIGlmICghbWFya2VyVHlwZXMuY29udGFpbnMobWFy
a2VyLnR5cGUpKSB7CkBAIC00MzQsOCArMzk4LDcgQEAgdm9pZCBEb2N1bWVudE1hcmtlckNvbnRy
b2xsZXI6OnJlbW92ZU1hcmtlcnNGcm9tTWFya2VyTWFwVmVjdG9yUGFpcihOb2RlKiBub2RlLAog
ICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAvLyBwaXRjaCB0aGUgb2xkIG1hcmtlcgotICAg
ICAgICAgICAgbWFya2Vycy5yZW1vdmUoaSk7Ci0gICAgICAgICAgICByZWN0cy5yZW1vdmUoaSk7
CisgICAgICAgICAgICBsaXN0LT5yZW1vdmUoaSk7CiAgICAgICAgICAgICBuZWVkc1JlcGFpbnQg
PSB0cnVlOwogICAgICAgICAgICAgLy8gaSBub3cgaXMgdGhlIGluZGV4IG9mIHRoZSBuZXh0IG1h
cmtlcgogICAgICAgICB9CkBAIC00NDksMTAgKzQxMiw5IEBAIHZvaWQgRG9jdW1lbnRNYXJrZXJD
b250cm9sbGVyOjpyZW1vdmVNYXJrZXJzRnJvbU1hcmtlck1hcFZlY3RvclBhaXIoTm9kZSogbm9k
ZSwKICAgICAgICAgfQogCiAgICAgICAgIC8vIGRlbGV0ZSB0aGUgbm9kZSdzIGxpc3QgaWYgaXQg
aXMgbm93IGVtcHR5Ci0gICAgICAgIGlmIChtYXJrZXJzLmlzRW1wdHkoKSkgewotICAgICAgICAg
ICAgQVNTRVJUKHJlY3RzLmlzRW1wdHkoKSk7CisgICAgICAgIGlmIChsaXN0LT5pc0VtcHR5KCkp
IHsKICAgICAgICAgICAgIG1fbWFya2Vycy5yZW1vdmUobm9kZSk7Ci0gICAgICAgICAgICBkZWxl
dGUgdmVjdG9yUGFpcjsKKyAgICAgICAgICAgIGRlbGV0ZSBsaXN0OwogICAgICAgICB9CiAgICAg
fQogICAgIGlmIChtX21hcmtlcnMuaXNFbXB0eSgpKQpAQCAtNDcxLDExICs0MzMsMTAgQEAgdm9p
ZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnJlcGFpbnRNYXJrZXJzKERvY3VtZW50TWFya2Vy
OjpNYXJrZXJUeXBlcyBtYXJrZXIKICAgICAgICAgTm9kZSogbm9kZSA9IGktPmZpcnN0LmdldCgp
OwogCiAgICAgICAgIC8vIGlubmVyIGxvb3A6IHByb2Nlc3MgZWFjaCBtYXJrZXIgaW4gdGhlIGN1
cnJlbnQgbm9kZQotICAgICAgICBNYXJrZXJNYXBWZWN0b3JQYWlyKiB2ZWN0b3JQYWlyID0gaS0+
c2Vjb25kOwotICAgICAgICBWZWN0b3I8RG9jdW1lbnRNYXJrZXI+JiBtYXJrZXJzID0gdmVjdG9y
UGFpci0+Zmlyc3Q7CisgICAgICAgIE1hcmtlckxpc3QqIGxpc3QgPSBpLT5zZWNvbmQ7CiAgICAg
ICAgIGJvb2wgbm9kZU5lZWRzUmVwYWludCA9IGZhbHNlOwotICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSAhPSBtYXJrZXJzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBEb2N1bWVudE1h
cmtlciBtYXJrZXIgPSBtYXJrZXJzW2ldOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSAh
PSBsaXN0LT5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgRG9jdW1lbnRNYXJrZXIgbWFya2Vy
ID0gbGlzdC0+YXQoaSk7CiAKICAgICAgICAgICAgIC8vIHNraXAgbm9kZXMgdGhhdCBhcmUgbm90
IG9mIHRoZSBzcGVjaWZpZWQgdHlwZQogICAgICAgICAgICAgaWYgKG1hcmtlclR5cGVzLmNvbnRh
aW5zKG1hcmtlci50eXBlKSkgewpAQCAtNDkzLDIxICs0NTQsMjAgQEAgdm9pZCBEb2N1bWVudE1h
cmtlckNvbnRyb2xsZXI6OnJlcGFpbnRNYXJrZXJzKERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBl
cyBtYXJrZXIKICAgICB9CiB9CiAKKy8vIFhYWDogc29tZXRoaW5nIHdyb25nCiB2b2lkIERvY3Vt
ZW50TWFya2VyQ29udHJvbGxlcjo6c2V0UmVuZGVyZWRSZWN0Rm9yTWFya2VyKE5vZGUqIG5vZGUs
IGNvbnN0IERvY3VtZW50TWFya2VyJiBtYXJrZXIsIGNvbnN0IEludFJlY3QmIHIpCiB7Ci0gICAg
TWFya2VyTWFwVmVjdG9yUGFpciogdmVjdG9yUGFpciA9IG1fbWFya2Vycy5nZXQobm9kZSk7Ci0g
ICAgaWYgKCF2ZWN0b3JQYWlyKSB7CisgICAgTWFya2VyTGlzdCogbGlzdCA9IG1fbWFya2Vycy5n
ZXQobm9kZSk7CisgICAgaWYgKCFsaXN0KSB7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OyAvLyBzaG91bGRuJ3QgYmUgdHJ5aW5nIHRvIHNldCB0aGUgcmVjdCBmb3IgYSBtYXJrZXIgd2Ug
ZG9uJ3QgYWxyZWFkeSBrbm93IGFib3V0CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBW
ZWN0b3I8RG9jdW1lbnRNYXJrZXI+JiBtYXJrZXJzID0gdmVjdG9yUGFpci0+Zmlyc3Q7Ci0gICAg
QVNTRVJUKG1hcmtlcnMuc2l6ZSgpID09IHZlY3RvclBhaXItPnNlY29uZC5zaXplKCkpOwotICAg
IHVuc2lnbmVkIG1hcmtlckNvdW50ID0gbWFya2Vycy5zaXplKCk7CisgICAgdW5zaWduZWQgbWFy
a2VyQ291bnQgPSBsaXN0LT5zaXplKCk7CiAgICAgZm9yICh1bnNpZ25lZCBtYXJrZXJJbmRleCA9
IDA7IG1hcmtlckluZGV4IDwgbWFya2VyQ291bnQ7ICsrbWFya2VySW5kZXgpIHsKLSAgICAgICAg
RG9jdW1lbnRNYXJrZXIgbSA9IG1hcmtlcnNbbWFya2VySW5kZXhdOworICAgICAgICBSZW5kZXJl
ZERvY3VtZW50TWFya2VyJiBtID0gbGlzdC0+YXQobWFya2VySW5kZXgpOwogICAgICAgICBpZiAo
bSA9PSBtYXJrZXIpIHsKLSAgICAgICAgICAgIHZlY3RvclBhaXItPnNlY29uZFttYXJrZXJJbmRl
eF0gPSByOworICAgICAgICAgICAgbS5zZXRSZW5kZXJlZFJlY3Qocik7CiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KICAgICB9CkBAIC01MjIsMTMgKzQ4Miw5IEBAIHZvaWQgRG9jdW1l
bnRNYXJrZXJDb250cm9sbGVyOjppbnZhbGlkYXRlUmVuZGVyZWRSZWN0c0Zvck1hcmtlcnNJblJl
Y3QoY29uc3QgSW50CiAgICAgZm9yIChNYXJrZXJNYXA6Oml0ZXJhdG9yIGkgPSBtX21hcmtlcnMu
YmVnaW4oKTsgaSAhPSBlbmQ7ICsraSkgewogCiAgICAgICAgIC8vIGlubmVyIGxvb3A6IHByb2Nl
c3MgZWFjaCByZWN0IGluIHRoZSBjdXJyZW50IG5vZGUKLSAgICAgICAgTWFya2VyTWFwVmVjdG9y
UGFpciogdmVjdG9yUGFpciA9IGktPnNlY29uZDsKLSAgICAgICAgVmVjdG9yPEludFJlY3Q+JiBy
ZWN0cyA9IHZlY3RvclBhaXItPnNlY29uZDsKLQotICAgICAgICB1bnNpZ25lZCByZWN0Q291bnQg
PSByZWN0cy5zaXplKCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgcmVjdEluZGV4ID0gMDsgcmVj
dEluZGV4IDwgcmVjdENvdW50OyArK3JlY3RJbmRleCkKLSAgICAgICAgICAgIGlmIChyZWN0c1ty
ZWN0SW5kZXhdLmludGVyc2VjdHMocikpCi0gICAgICAgICAgICAgICAgcmVjdHNbcmVjdEluZGV4
XSA9IHBsYWNlaG9sZGVyUmVjdEZvck1hcmtlcigpOworICAgICAgICBNYXJrZXJMaXN0KiBsaXN0
ID0gaS0+c2Vjb25kOworICAgICAgICBmb3IgKHNpemVfdCBsaXN0SW5kZXggPSAwOyBsaXN0SW5k
ZXggPCBsaXN0LT5zaXplKCk7ICsrbGlzdEluZGV4KQorICAgICAgICAgICAgbGlzdC0+YXQobGlz
dEluZGV4KS5pbnZhbGlkYXRlKHIpOwogICAgIH0KIH0KIApAQCAtNTM4LDE3ICs0OTQsMTMgQEAg
dm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnNoaWZ0TWFya2VycyhOb2RlKiBub2RlLCB1
bnNpZ25lZCBzdGFydE9mZnNldCwgaW4KICAgICAgICAgcmV0dXJuOwogICAgIEFTU0VSVCghbV9t
YXJrZXJzLmlzRW1wdHkoKSk7CiAKLSAgICBNYXJrZXJNYXBWZWN0b3JQYWlyKiB2ZWN0b3JQYWly
ID0gbV9tYXJrZXJzLmdldChub2RlKTsKLSAgICBpZiAoIXZlY3RvclBhaXIpCisgICAgTWFya2Vy
TGlzdCogbGlzdCA9IG1fbWFya2Vycy5nZXQobm9kZSk7CisgICAgaWYgKCFsaXN0KQogICAgICAg
ICByZXR1cm47CiAKLSAgICBWZWN0b3I8RG9jdW1lbnRNYXJrZXI+JiBtYXJrZXJzID0gdmVjdG9y
UGFpci0+Zmlyc3Q7Ci0gICAgVmVjdG9yPEludFJlY3Q+JiByZWN0cyA9IHZlY3RvclBhaXItPnNl
Y29uZDsKLSAgICBBU1NFUlQobWFya2Vycy5zaXplKCkgPT0gcmVjdHMuc2l6ZSgpKTsKLQogICAg
IGJvb2wgZG9jRGlydHkgPSBmYWxzZTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSAhPSBtYXJr
ZXJzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIERvY3VtZW50TWFya2VyJiBtYXJrZXIgPSBtYXJr
ZXJzW2ldOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpICE9IGxpc3QtPnNpemUoKTsgKytpKSB7
CisgICAgICAgIFJlbmRlcmVkRG9jdW1lbnRNYXJrZXImIG1hcmtlciA9IGxpc3QtPmF0KGkpOwog
ICAgICAgICBpZiAobWFya2VyLnN0YXJ0T2Zmc2V0ID49IHN0YXJ0T2Zmc2V0KSB7CiAgICAgICAg
ICAgICBBU1NFUlQoKGludCltYXJrZXIuc3RhcnRPZmZzZXQgKyBkZWx0YSA+PSAwKTsKICAgICAg
ICAgICAgIG1hcmtlci5zdGFydE9mZnNldCArPSBkZWx0YTsKQEAgLTU1Niw3ICs1MDgsNyBAQCB2
b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6c2hpZnRNYXJrZXJzKE5vZGUqIG5vZGUsIHVu
c2lnbmVkIHN0YXJ0T2Zmc2V0LCBpbgogICAgICAgICAgICAgZG9jRGlydHkgPSB0cnVlOwogCiAg
ICAgICAgICAgICAvLyBNYXJrZXIgbW92ZWQsIHNvIHByZXZpb3VzbHktY29tcHV0ZWQgcmVuZGVy
ZWQgcmVjdGFuZ2xlIGlzIG5vdyBpbnZhbGlkCi0gICAgICAgICAgICByZWN0c1tpXSA9IHBsYWNl
aG9sZGVyUmVjdEZvck1hcmtlcigpOworICAgICAgICAgICAgbWFya2VyLmludmFsaWRhdGUoKTsK
ICAgICAgICAgfQogICAgIH0KIApAQCAtNTg1LDE2ICs1MzcsMTMgQEAgdm9pZCBEb2N1bWVudE1h
cmtlckNvbnRyb2xsZXI6OnNldE1hcmtlcnNBY3RpdmUoUmFuZ2UqIHJhbmdlLCBib29sIGFjdGl2
ZSkKIAogdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnNldE1hcmtlcnNBY3RpdmUoTm9k
ZSogbm9kZSwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCwgYm9vbCBh
Y3RpdmUpCiB7Ci0gICAgTWFya2VyTWFwVmVjdG9yUGFpciogdmVjdG9yUGFpciA9IG1fbWFya2Vy
cy5nZXQobm9kZSk7Ci0gICAgaWYgKCF2ZWN0b3JQYWlyKQorICAgIE1hcmtlckxpc3QqIGxpc3Qg
PSBtX21hcmtlcnMuZ2V0KG5vZGUpOworICAgIGlmICghbGlzdCkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgVmVjdG9yPERvY3VtZW50TWFya2VyPiYgbWFya2VycyA9IHZlY3RvclBhaXItPmZpcnN0
OwotICAgIEFTU0VSVChtYXJrZXJzLnNpemUoKSA9PSB2ZWN0b3JQYWlyLT5zZWNvbmQuc2l6ZSgp
KTsKLQogICAgIGJvb2wgZG9jRGlydHkgPSBmYWxzZTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSAhPSBtYXJrZXJzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIERvY3VtZW50TWFya2VyJiBtYXJr
ZXIgPSBtYXJrZXJzW2ldOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpICE9IGxpc3QtPnNpemUo
KTsgKytpKSB7CisgICAgICAgIERvY3VtZW50TWFya2VyJiBtYXJrZXIgPSBsaXN0LT5hdChpKTsK
IAogICAgICAgICAvLyBNYXJrZXJzIGFyZSByZXR1cm5lZCBpbiBvcmRlciwgc28gc3RvcCBpZiB3
ZSBhcmUgbm93IHBhc3QgdGhlIHNwZWNpZmllZCByYW5nZS4KICAgICAgICAgaWYgKG1hcmtlci5z
dGFydE9mZnNldCA+PSBlbmRPZmZzZXQpCkBAIC02NTQsMTMgKzYwMywxMiBAQCB2b2lkIERvY3Vt
ZW50TWFya2VyQ29udHJvbGxlcjo6Y2xlYXJEZXNjcmlwdGlvbk9uTWFya2Vyc0ludGVyc2VjdGlu
Z1JhbmdlKFJhbmdlKgogICAgIGZvciAoTm9kZSogbm9kZSA9IHJhbmdlLT5maXJzdE5vZGUoKTsg
bm9kZSAhPSBwYXN0TGFzdE5vZGU7IG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKCkpIHsK
ICAgICAgICAgdW5zaWduZWQgc3RhcnRPZmZzZXQgPSBub2RlID09IHN0YXJ0Q29udGFpbmVyID8g
cmFuZ2UtPnN0YXJ0T2Zmc2V0KCkgOiAwOwogICAgICAgICB1bnNpZ25lZCBlbmRPZmZzZXQgPSBu
b2RlID09IGVuZENvbnRhaW5lciA/IHN0YXRpY19jYXN0PHVuc2lnbmVkPihyYW5nZS0+ZW5kT2Zm
c2V0KCkpIDogc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpOwotICAgICAgICBN
YXJrZXJNYXBWZWN0b3JQYWlyKiB2ZWN0b3JQYWlyID0gbV9tYXJrZXJzLmdldChub2RlKTsKLSAg
ICAgICAgaWYgKCF2ZWN0b3JQYWlyKQorICAgICAgICBNYXJrZXJMaXN0KiBsaXN0ID0gbV9tYXJr
ZXJzLmdldChub2RlKTsKKyAgICAgICAgaWYgKCFsaXN0KQogICAgICAgICAgICAgY29udGludWU7
CiAKLSAgICAgICAgVmVjdG9yPERvY3VtZW50TWFya2VyPiYgbWFya2VycyA9IHZlY3RvclBhaXIt
PmZpcnN0OwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1hcmtlcnMuc2l6ZSgpOyAr
K2kpIHsKLSAgICAgICAgICAgIERvY3VtZW50TWFya2VyJiBtYXJrZXIgPSBtYXJrZXJzW2ldOwor
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxpc3QtPnNpemUoKTsgKytpKSB7CisgICAg
ICAgICAgICBEb2N1bWVudE1hcmtlciYgbWFya2VyID0gbGlzdC0+YXQoaSk7CiAKICAgICAgICAg
ICAgIC8vIG1hcmtlcnMgYXJlIHJldHVybmVkIGluIG9yZGVyLCBzbyBzdG9wIGlmIHdlIGFyZSBu
b3cgcGFzdCB0aGUgc3BlY2lmaWVkIHJhbmdlCiAgICAgICAgICAgICBpZiAobWFya2VyLnN0YXJ0
T2Zmc2V0ID49IGVuZE9mZnNldCkKQEAgLTY4NSwxMSArNjMzLDkgQEAgdm9pZCBEb2N1bWVudE1h
cmtlckNvbnRyb2xsZXI6OnNob3dNYXJrZXJzKCkgY29uc3QKICAgICBmb3IgKE1hcmtlck1hcDo6
Y29uc3RfaXRlcmF0b3Igbm9kZUl0ZXJhdG9yID0gbV9tYXJrZXJzLmJlZ2luKCk7IG5vZGVJdGVy
YXRvciAhPSBlbmQ7ICsrbm9kZUl0ZXJhdG9yKSB7CiAgICAgICAgIE5vZGUqIG5vZGUgPSBub2Rl
SXRlcmF0b3ItPmZpcnN0LmdldCgpOwogICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVwIiwgbm9k
ZSk7Ci0gICAgICAgIE1hcmtlck1hcFZlY3RvclBhaXIqIHZlY3RvclBhaXIgPSBub2RlSXRlcmF0
b3ItPnNlY29uZDsKLSAgICAgICAgVmVjdG9yPERvY3VtZW50TWFya2VyPiYgbWFya2VycyA9IHZl
Y3RvclBhaXItPmZpcnN0OwotICAgICAgICB1bnNpZ25lZCBtYXJrZXJDb3VudCA9IG1hcmtlcnMu
c2l6ZSgpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIG1hcmtlckluZGV4ID0gMDsgbWFya2VySW5k
ZXggPCBtYXJrZXJDb3VudDsgKyttYXJrZXJJbmRleCkKLSAgICAgICAgICAgIGZwcmludGYoc3Rk
ZXJyLCAiICVkOlslZDolZF0oJWQpIiwgbWFya2Vyc1ttYXJrZXJJbmRleF0udHlwZSwgbWFya2Vy
c1ttYXJrZXJJbmRleF0uc3RhcnRPZmZzZXQsIG1hcmtlcnNbbWFya2VySW5kZXhdLmVuZE9mZnNl
dCwgbWFya2Vyc1ttYXJrZXJJbmRleF0uYWN0aXZlTWF0Y2gpOworICAgICAgICBNYXJrZXJMaXN0
KiBsaXN0ID0gbm9kZUl0ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAgIGZvciAodW5zaWduZWQgbWFy
a2VySW5kZXggPSAwOyBtYXJrZXJJbmRleCA8IGxpc3QtPnNpemUoKTsgKyttYXJrZXJJbmRleCkK
KyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiICVkOlslZDolZF0oJWQpIiwgbGlzdC0+YXQo
bWFya2VySW5kZXgpLnR5cGUsIGxpc3QtPmF0KG1hcmtlckluZGV4KS5zdGFydE9mZnNldCwgbGlz
dC0+YXQobWFya2VySW5kZXgpLmVuZE9mZnNldCwgbGlzdC0+YXQobWFya2VySW5kZXgpLmFjdGl2
ZU1hdGNoKTsKICAgICAgICAgZnByaW50ZihzdGRlcnIsICJcbiIpOwogICAgIH0KIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuaCBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuaAppbmRleCAwZjM0Yzlm
YTUyZWRiYjM5ZTZlOTEyNmNiZTRlODhhZjY4MTUzZGVlLi4zOTJhNDZkOGYyOGI5Yzk2N2NmOGYy
MTA4ZTYwNmExYjA2N2U5OGI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1l
bnRNYXJrZXJDb250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50TWFy
a2VyQ29udHJvbGxlci5oCkBAIC0zNywxNiArMzcsMTggQEAgY2xhc3MgSW50UG9pbnQ7CiBjbGFz
cyBJbnRSZWN0OwogY2xhc3MgTm9kZTsKIGNsYXNzIFJhbmdlOworY2xhc3MgUmVuZGVyZWREb2N1
bWVudE1hcmtlcjsKIAogY2xhc3MgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyIHsKICAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShEb2N1bWVudE1hcmtlckNvbnRyb2xsZXIpOyBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKIHB1YmxpYzoKKwogICAgIERvY3VtZW50TWFya2VyQ29udHJvbGxlcigpOwog
ICAgIH5Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIoKSB7IGRldGFjaCgpOyB9CiAKICAgICB2b2lk
IGRldGFjaCgpOwogICAgIHZvaWQgYWRkTWFya2VyKFJhbmdlKiwgRG9jdW1lbnRNYXJrZXI6Ok1h
cmtlclR5cGUsIFN0cmluZyBkZXNjcmlwdGlvbiA9IFN0cmluZygpKTsKLSAgICB2b2lkIGFkZE1h
cmtlcihOb2RlKiwgRG9jdW1lbnRNYXJrZXIpOworICAgIHZvaWQgYWRkTWFya2VyKE5vZGUqLCBj
b25zdCBEb2N1bWVudE1hcmtlciYpOwogICAgIHZvaWQgY29weU1hcmtlcnMoTm9kZSogc3JjTm9k
ZSwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIGludCBsZW5ndGgsIE5vZGUqIGRzdE5vZGUsIGludCBk
ZWx0YSk7CiAgICAgYm9vbCBoYXNNYXJrZXJzKFJhbmdlKiwgRG9jdW1lbnRNYXJrZXI6Ok1hcmtl
clR5cGVzID0gRG9jdW1lbnRNYXJrZXI6OkFsbE1hcmtlcnMoKSk7CiAKQEAgLTc3LDEwICs3OSwx
MCBAQCBwdWJsaWM6CiAjZW5kaWYKIAogcHJpdmF0ZToKLSAgICB0eXBlZGVmIHN0ZDo6cGFpcjxW
ZWN0b3I8RG9jdW1lbnRNYXJrZXI+LCBWZWN0b3I8SW50UmVjdD4gPiBNYXJrZXJNYXBWZWN0b3JQ
YWlyOwotICAgIHR5cGVkZWYgSGFzaE1hcDxSZWZQdHI8Tm9kZT4sIE1hcmtlck1hcFZlY3RvclBh
aXIqPiBNYXJrZXJNYXA7CisgICAgdHlwZWRlZiBWZWN0b3I8UmVuZGVyZWREb2N1bWVudE1hcmtl
cj4gTWFya2VyTGlzdDsKKyAgICB0eXBlZGVmIEhhc2hNYXA8UmVmUHRyPE5vZGU+LCBNYXJrZXJM
aXN0Kj4gTWFya2VyTWFwOwogICAgIGJvb2wgcG9zc2libHlIYXNNYXJrZXJzKERvY3VtZW50TWFy
a2VyOjpNYXJrZXJUeXBlcyk7Ci0gICAgdm9pZCByZW1vdmVNYXJrZXJzRnJvbU1hcmtlck1hcFZl
Y3RvclBhaXIoTm9kZSosIE1hcmtlck1hcFZlY3RvclBhaXIqLCBEb2N1bWVudE1hcmtlcjo6TWFy
a2VyVHlwZXMpOworICAgIHZvaWQgcmVtb3ZlTWFya2Vyc0Zyb21MaXN0KE5vZGUqLCBNYXJrZXJM
aXN0KiwgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGVzKTsKIAogICAgIE1hcmtlck1hcCBtX21h
cmtlcnM7CiAgICAgLy8gUHJvdmlkZSBhIHF1aWNrIHdheSB0byBkZXRlcm1pbmUgd2hldGhlciBh
IHBhcnRpY3VsYXIgbWFya2VyIHR5cGUgaXMgYWJzZW50IHdpdGhvdXQgZ29pbmcgdGhyb3VnaCB0
aGUgbWFwLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1JlbmRlcmVkRG9jdW1lbnRN
YXJrZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9SZW5kZXJlZERvY3VtZW50TWFya2VyLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uNDcyYzRkZTM4YTkwY2I1NWU0MzllODE4ZjgyOGFjOGY0OThkMmFiYQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9SZW5kZXJlZERvY3VtZW50TWFya2VyLmgK
QEAgLTAsMCArMSw2NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQor
ICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisg
KiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgUmVuZGVyZWREb2N1bWVudE1hcmtlcl9oCisjZGVm
aW5lIFJlbmRlcmVkRG9jdW1lbnRNYXJrZXJfaAorCisjaW5jbHVkZSAiRG9jdW1lbnRNYXJrZXIu
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBSZW5kZXJlZERvY3VtZW50TWFya2Vy
IDogcHVibGljIERvY3VtZW50TWFya2VyIHsKK3B1YmxpYzoKKworICAgIGV4cGxpY2l0IFJlbmRl
cmVkRG9jdW1lbnRNYXJrZXIoY29uc3QgRG9jdW1lbnRNYXJrZXImIG1hcmtlcikKKyAgICAgICAg
OiBEb2N1bWVudE1hcmtlcihtYXJrZXIpLCBtX3JlbmRlcmVkUmVjdChpbnZhbGlkTWFya2VyUmVj
dCgpKQorICAgIHsKKyAgICB9CisKKyAgICBib29sIGlzUmVuZGVyZWQoKSBjb25zdCB7IHJldHVy
biBpbnZhbGlkTWFya2VyUmVjdCgpICE9IG1fcmVuZGVyZWRSZWN0OyB9CisgICAgYm9vbCBjb250
YWlucyhjb25zdCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0IHsgcmV0dXJuIGlzUmVuZGVyZWQoKSAm
JiBtX3JlbmRlcmVkUmVjdC5jb250YWlucyhwb2ludCk7IH0KKyAgICB2b2lkIHNldFJlbmRlcmVk
UmVjdChjb25zdCBJbnRSZWN0JiByKSB7IG1fcmVuZGVyZWRSZWN0ID0gcjsgfQorICAgIGNvbnN0
IEludFJlY3QmIHJlbmRlcmVkUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVuZGVyZWRSZWN0OyB9
CisgICAgdm9pZCBpbnZhbGlkYXRlKGNvbnN0IEludFJlY3QmKTsKKyAgICB2b2lkIGludmFsaWRh
dGUoKSB7IG1fcmVuZGVyZWRSZWN0ID0gaW52YWxpZE1hcmtlclJlY3QoKTsgfQorCitwcml2YXRl
OgorICAgIHN0YXRpYyBjb25zdCBJbnRSZWN0JiBpbnZhbGlkTWFya2VyUmVjdCgpCisgICAgewor
ICAgICAgICBzdGF0aWMgY29uc3QgSW50UmVjdCByZWN0ID0gSW50UmVjdCgtMSwgLTEsIC0xLCAt
MSk7CisgICAgICAgIHJldHVybiByZWN0OworICAgIH0KKworICAgIEludFJlY3QgbV9yZW5kZXJl
ZFJlY3Q7Cit9OworCitpbmxpbmUgdm9pZCBSZW5kZXJlZERvY3VtZW50TWFya2VyOjppbnZhbGlk
YXRlKGNvbnN0IEludFJlY3QmIHIpCit7CisgICAgaWYgKG1fcmVuZGVyZWRSZWN0LmludGVyc2Vj
dHMocikpCisgICAgICAgIGludmFsaWRhdGUoKTsKK30KKworfSAvLyBuYW1lc3BhY2UKKworI2Vu
ZGlmCg==
</data>
<flag name="review"
          id="84137"
          type_id="1"
          status="+"
          setter="tony"
    />
          </attachment>
      

    </bug>

</bugzilla>