<?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>142519</bug_id>
          
          <creation_ts>2015-03-09 18:40:55 -0700</creation_ts>
          <short_desc>Extend URL filter&apos;s Term definition to support groups/subpatterns</short_desc>
          <delta_ts>2015-03-10 13:09:54 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Benjamin Poulain">benjamin</reporter>
          <assigned_to name="Benjamin Poulain">benjamin</assigned_to>
          <cc>achristensen</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1075850</commentid>
    <comment_count>0</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-03-09 18:40:55 -0700</bug_when>
    <thetext>Extend URL filter&apos;s Term definition to support groups/subpatterns</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1075851</commentid>
    <comment_count>1</comment_count>
      <attachid>248306</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-03-09 18:46:03 -0700</bug_when>
    <thetext>Created attachment 248306
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1075892</commentid>
    <comment_count>2</comment_count>
      <attachid>248306</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-03-09 21:54:57 -0700</bug_when>
    <thetext>Comment on attachment 248306
Patch

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

A few small comments to be addressed, but it looks good.

&gt; Source/WebCore/contentextensions/URLFilterParser.cpp:161
&gt; +        ASSERT_WITH_SECURITY_IMPLICATION(m_termType == TermType::Group);
&gt; +        if (m_termType != TermType::Group)
&gt; +            return;

Does ASSERT_WITH_SECURITY_IMPLICATION assert in release builds?  If so, this is redundant.  If not, why not just use RELEASE_ASSERT here?

&gt; Source/WebCore/contentextensions/URLFilterParser.cpp:291
&gt; +            ASSERT_NOT_REACHED();
&gt; +            return -1;

These two lines are not necessary.

&gt; Source/WebCore/contentextensions/URLFilterParser.cpp:571
&gt; +        m_openGroups.append(Term(Term::GroupTerm));

Is the explicit constructor call necessary?

&gt; Tools/TestWebKitAPI/Tests/WebCore/ContentExtensions.cpp:119
&gt; +const char* patternsStartingWithGroupFilter = &quot;[{\&quot;action\&quot;:{\&quot;type\&quot;:\&quot;block\&quot;},\&quot;trigger\&quot;:{\&quot;url-filter\&quot;:\&quot;(http://whatwg\\\\.org/)?webkit\134\134.org\&quot;}}]&quot;;

I think \134\134 should be \\\\

&gt; Tools/TestWebKitAPI/Tests/WebCore/ContentExtensions.cpp:121
&gt; +TEST_F(ContentExtensionTest, PatternStartingWithGroup)

Hooray!  Test cases :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1075893</commentid>
    <comment_count>3</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-03-09 22:02:08 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; A few small comments to be addressed, but it looks good.

Will fix, thanks for the review!

&gt; &gt; Source/WebCore/contentextensions/URLFilterParser.cpp:161
&gt; &gt; +        ASSERT_WITH_SECURITY_IMPLICATION(m_termType == TermType::Group);
&gt; &gt; +        if (m_termType != TermType::Group)
&gt; &gt; +            return;
&gt; 
&gt; Does ASSERT_WITH_SECURITY_IMPLICATION assert in release builds?  If so, this
&gt; is redundant.  If not, why not just use RELEASE_ASSERT here?

That&apos;s up to each port really, but by default ASSERT_WITH_SECURITY_IMPLICATION is a debug assert, not a release one.

&gt; &gt; Source/WebCore/contentextensions/URLFilterParser.cpp:291
&gt; &gt; +            ASSERT_NOT_REACHED();
&gt; &gt; +            return -1;
&gt; 
&gt; These two lines are not necessary.

They are for GCC :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1075894</commentid>
    <comment_count>4</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-03-09 22:03:11 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; &gt; &gt; Source/WebCore/contentextensions/URLFilterParser.cpp:291
&gt; &gt; &gt; +            ASSERT_NOT_REACHED();
&gt; &gt; &gt; +            return -1;
&gt; &gt; 
&gt; &gt; These two lines are not necessary.
&gt; 
&gt; They are for GCC :(

Ahah, no my bad, those two are useless.
Without opening the patch I thought those were faster the switch().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1076046</commentid>
    <comment_count>5</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-03-10 13:09:54 -0700</bug_when>
    <thetext>Committed r181341: &lt;http://trac.webkit.org/changeset/181341&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>248306</attachid>
            <date>2015-03-09 18:46:03 -0700</date>
            <delta_ts>2015-03-09 21:54:57 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-142519-20150309184540.patch</filename>
            <type>text/plain</type>
            <size>21100</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgxMjgzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2UwN2Q2NWIwNGIwYWM4
ZGQ3MmFlMDcwNmE4YTUxNzQ1YzBhYzg1ZS4uYTU3NDM5N2NjY2Y2MzkzYjE3MWYwNDkzNTkyNjgz
NDg2ODNiOTYwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ3IEBACisyMDE1LTAzLTA5ICBCZW5q
YW1pbiBQb3VsYWluICA8YnBvdWxhaW5AYXBwbGUuY29tPgorCisgICAgICAgIEV4dGVuZCBVUkwg
ZmlsdGVyJ3MgVGVybSBkZWZpbml0aW9uIHRvIHN1cHBvcnQgZ3JvdXBzL3N1YnBhdHRlcm5zCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDI1MTkKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQcmV0dHkgc2lt
cGxlIGV4dGVuc2lvbjogVGVybSBpcyBleHRlbmRlZCB0byBzdXBwb3J0IGhvbGRpbmcKKyAgICAg
ICAgYSBWZWN0b3Igb2YgVGVybS4gVGhlIHF1YW50aWZpZXIgb2YgdGhlIFRlcm0gYXBwbGllcyB0
byBpdHMKKyAgICAgICAgVmVjdG9yIG9mIHRlcm0gYXMgYSB3aG9sZS4KKworICAgICAgICBUbyBh
dm9pZCBleHBvc2luZyB0b28gbXVjaCBpbnRlcm5hbCBpbiB0aGUgQVBJIG9mIFRlcm0sIEkgbW92
ZWQKKyAgICAgICAgZ3JhcGggZ2VuZXJhdGlvbiBmcm9tIEdyYXBoQnVpbGRlciB0byBUZXJtLgor
CisgICAgICAgIFNpbmtpbmcgYSBDaGFyYWN0ZXJTZXQgd29ya3MgYXMgdXN1YWwuIFNpbmtpbmcg
YSBHcm91cCBpcyBkb25lCisgICAgICAgIGJ5IHNpbmtpbmcgZWFjaCBvZiBpdHMgVGVybXMgb25l
IGJ5IG9uZSBhbmQgdGhlbiBhcHBseSB0aGUgcXVhbnRpZmllcgorICAgICAgICBvbiB0aGUgd2hv
bGUgc3ViZ3JhcGguIFRoaXMgaXMgZG9uZSBieSByZWN1cnNpdmVseSBjYWxsaW5nIGludG8KKyAg
ICAgICAgVGVybTo6Z2VuZXJhdGVHcmFwaCgpLgorCisgICAgICAgIFNpbmNlIGdyb3VwcyBjb3Vs
ZCBiZSBuZXN0ZWQsIHRoZSBncm91cHMgbWFrZSBhIHN0YWNrIHdpdGggdGhlIGxhdGVzdAorICAg
ICAgICBvcGVuIGdyb3VwIG9uIHRvcC4KKyAgICAgICAgV2hlbiBzaW5raW5nIGEgZmxvYXRpbmcg
VGVybSwgaXQgaXMgc3VuayB0byB0aGUgbGF0ZXN0IG9wZW4gZ3JvdXAuIElmIHRoZXJlIGlzIG5v
IG9wZW4KKyAgICAgICAgZ3JvdXAsIHdlIHVzZSB0aGUgcHJlZml4IHRyZWUgYW5kIHNpbmsgdGhl
IHdob2xlIHN1YnBhdHRlcm4gdG8gdGhlIGdyYXBoLgorCisgICAgICAgICogY29udGVudGV4dGVu
c2lvbnMvVVJMRmlsdGVyUGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRl
bnNpb25zOjpUZXJtOjpUZXJtKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25z
OjpUZXJtOjpleHRlbmRHcm91cFN1YnBhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVu
dEV4dGVuc2lvbnM6OlRlcm06OmdlbmVyYXRlR3JhcGgpOgorICAgICAgICAoV2ViQ29yZTo6Q29u
dGVudEV4dGVuc2lvbnM6OlRlcm06Om9wZXJhdG9yPT0pOgorICAgICAgICAoV2ViQ29yZTo6Q29u
dGVudEV4dGVuc2lvbnM6OlRlcm06Omhhc2gpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudEV4
dGVuc2lvbnM6OlRlcm06OmlzVW5pdmVyc2FsVHJhbnNpdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpDb250ZW50RXh0ZW5zaW9uczo6VGVybTo6Z2VuZXJhdGVTdWJncmFwaEZvckF0b20pOgorICAg
ICAgICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OlRlcm06OmRlc3Ryb3kpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29udGVudEV4dGVuc2lvbnM6OlRlcm06Okdyb3VwOjpvcGVyYXRvcj09KToK
KyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpUZXJtOjpHcm91cDo6aGFzaCk6
CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6R3JhcGhCdWlsZGVyOjpmaW5h
bGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6R3JhcGhCdWlsZGVy
OjphdG9tUGFyZW50aGVzZXNTdWJwYXR0ZXJuQmVnaW4pOgorICAgICAgICAoV2ViQ29yZTo6Q29u
dGVudEV4dGVuc2lvbnM6OkdyYXBoQnVpbGRlcjo6YXRvbVBhcmVudGhlc2VzRW5kKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpHcmFwaEJ1aWxkZXI6OnNpbmtGbG9hdGlu
Z1Rlcm1JZk5lY2Vzc2FyeSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6
VGVybTo6cXVhbnRpZmllcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0
ZW5zaW9uczo6VGVybTo6dmlzaXRTaW1wbGVUcmFuc2l0aW9ucyk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6R3JhcGhCdWlsZGVyOjphZGRUcmFuc2l0aW9u
cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6R3JhcGhC
dWlsZGVyOjpzaW5rRmxvYXRpbmdUZXJtKTogRGVsZXRlZC4KKwogMjAxNS0wMy0wOSAgQmVuamFt
aW4gUG91bGFpbiAgPGJlbmphbWluQHdlYmtpdC5vcmc+CiAKICAgICAgICAgQ1NTIEpJVDogYWRk
IGFsaWFzZXMgYmV0d2VlbiA6bnRoLWNoaWxkKCkvOm50aC1sYXN0LWNoaWxkKCkgYW5kIDpmaXJz
dC1jaGlsZC86bGFzdC1jaGlsZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY29udGVudGV4
dGVuc2lvbnMvVVJMRmlsdGVyUGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRl
bnNpb25zL1VSTEZpbHRlclBhcnNlci5jcHAKaW5kZXggMjZjM2Y0NmRlMmRkN2RlNjU3ZmRmMzQw
YTRmNjdmNTZmODJlYzkyZS4uMGRhMGMyM2UwNDZkOTM2Mjc2ZDNiNmUyY2ZmYjQyNmFjZGZmZGVl
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvVVJMRmlsdGVy
UGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9VUkxGaWx0
ZXJQYXJzZXIuY3BwCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiTkZBLmgiCiAjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvWWFyclBhcnNlci5oPgogI2luY2x1ZGUgPHd0Zi9CaXRWZWN0b3Iu
aD4KKyNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC03
Myw2ICs3NCwxMyBAQCBwdWJsaWM6CiAgICAgICAgIG1fYXRvbURhdGEuY2hhcmFjdGVyU2V0Lmlu
dmVydGVkID0gaXNJbnZlcnRlZDsKICAgICB9CiAKKyAgICBlbnVtIEdyb3VwVGVybVRhZyB7IEdy
b3VwVGVybSB9OworICAgIFRlcm0oR3JvdXBUZXJtVGFnKQorICAgICAgICA6IG1fdGVybVR5cGUo
VGVybVR5cGU6Okdyb3VwKQorICAgIHsKKyAgICAgICAgbmV3IChOb3ROdWxsLCAmbV9hdG9tRGF0
YS5ncm91cCkgR3JvdXAoKTsKKyAgICB9CisKICAgICBUZXJtKGNvbnN0IFRlcm0mIG90aGVyKQog
ICAgICAgICA6IG1fdGVybVR5cGUob3RoZXIubV90ZXJtVHlwZSkKICAgICAgICAgLCBtX3F1YW50
aWZpZXIob3RoZXIubV9xdWFudGlmaWVyKQpAQCAtODQsNiArOTIsOSBAQCBwdWJsaWM6CiAgICAg
ICAgIGNhc2UgVGVybVR5cGU6OkNoYXJhY3RlclNldDoKICAgICAgICAgICAgIG5ldyAoTm90TnVs
bCwgJm1fYXRvbURhdGEuY2hhcmFjdGVyU2V0KSBDaGFyYWN0ZXJTZXQob3RoZXIubV9hdG9tRGF0
YS5jaGFyYWN0ZXJTZXQpOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVGVybVR5
cGU6Okdyb3VwOgorICAgICAgICAgICAgbmV3IChOb3ROdWxsLCAmbV9hdG9tRGF0YS5ncm91cCkg
R3JvdXAob3RoZXIubV9hdG9tRGF0YS5ncm91cCk7CisgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogICAgIH0KIApAQCAtOTgsNiArMTA5LDkgQEAgcHVibGljOgogICAgICAgICBjYXNlIFRl
cm1UeXBlOjpDaGFyYWN0ZXJTZXQ6CiAgICAgICAgICAgICBuZXcgKE5vdE51bGwsICZtX2F0b21E
YXRhLmNoYXJhY3RlclNldCkgQ2hhcmFjdGVyU2V0KFdURjo6bW92ZShvdGhlci5tX2F0b21EYXRh
LmNoYXJhY3RlclNldCkpOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVGVybVR5
cGU6Okdyb3VwOgorICAgICAgICAgICAgbmV3IChOb3ROdWxsLCAmbV9hdG9tRGF0YS5ncm91cCkg
R3JvdXAoV1RGOjptb3ZlKG90aGVyLm1fYXRvbURhdGEuZ3JvdXApKTsKKyAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CiAgICAgICAgIG90aGVyLmRlc3Ryb3koKTsKICAgICB9CkBAIC0xNDAs
MzkgKzE1NCw2MSBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICB9CiAKKyAgICB2b2lkIGV4dGVu
ZEdyb3VwU3VicGF0dGVybihjb25zdCBUZXJtJiB0ZXJtKQorICAgIHsKKyAgICAgICAgQVNTRVJU
X1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04obV90ZXJtVHlwZSA9PSBUZXJtVHlwZTo6R3JvdXAp
OworICAgICAgICBpZiAobV90ZXJtVHlwZSAhPSBUZXJtVHlwZTo6R3JvdXApCisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIG1fYXRvbURhdGEuZ3JvdXAudGVybXMuYXBwZW5kKHRlcm0pOwor
ICAgIH0KKwogICAgIHZvaWQgcXVhbnRpZnkoY29uc3QgQXRvbVF1YW50aWZpZXImIHF1YW50aWZp
ZXIpCiAgICAgewogICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKG1fcXVhbnRpZmllciA9PSBB
dG9tUXVhbnRpZmllcjo6T25lLCAiVHJhbnNpdGlvbiB0byBxdWFudGlmaWVkIHRlcm0gc2hvdWxk
IG9ubHkgaGFwcGVuIG9uY2UuIik7CiAgICAgICAgIG1fcXVhbnRpZmllciA9IHF1YW50aWZpZXI7
CiAgICAgfQogCi0gICAgQXRvbVF1YW50aWZpZXIgcXVhbnRpZmllcigpIGNvbnN0CisgICAgdW5z
aWduZWQgZ2VuZXJhdGVHcmFwaChORkEmIG5mYSwgdWludDY0X3QgcGF0dGVybklkLCB1bnNpZ25l
ZCBzdGFydCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBtX3F1YW50aWZpZXI7Ci0gICAg
fQorICAgICAgICBBU1NFUlQoaXNWYWxpZCgpKTsKIAotICAgIGJvb2wgaXNVbml2ZXJzYWxUcmFu
c2l0aW9uKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3Rlcm1UeXBlID09IFRlcm1U
eXBlOjpDaGFyYWN0ZXJTZXQKLSAgICAgICAgICAgICYmICgobV9hdG9tRGF0YS5jaGFyYWN0ZXJT
ZXQuaW52ZXJ0ZWQgJiYgIW1fYXRvbURhdGEuY2hhcmFjdGVyU2V0LmNoYXJhY3RlcnMuYml0Q291
bnQoKSkKLSAgICAgICAgICAgICAgICB8fCAoIW1fYXRvbURhdGEuY2hhcmFjdGVyU2V0LmludmVy
dGVkICYmIG1fYXRvbURhdGEuY2hhcmFjdGVyU2V0LmNoYXJhY3RlcnMuYml0Q291bnQoKSA9PSAx
MjgpKTsKLSAgICB9CisgICAgICAgIHN3aXRjaCAobV9xdWFudGlmaWVyKSB7CisgICAgICAgIGNh
c2UgQXRvbVF1YW50aWZpZXI6Ok9uZTogeworICAgICAgICAgICAgdW5zaWduZWQgbmV3RW5kID0g
Z2VuZXJhdGVTdWJncmFwaEZvckF0b20obmZhLCBwYXR0ZXJuSWQsIHN0YXJ0KTsKKyAgICAgICAg
ICAgIHJldHVybiBuZXdFbmQ7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBBdG9tUXVhbnRpZmll
cjo6WmVyb09yT25lOiB7CisgICAgICAgICAgICB1bnNpZ25lZCBuZXdFbmQgPSBnZW5lcmF0ZVN1
YmdyYXBoRm9yQXRvbShuZmEsIHBhdHRlcm5JZCwgc3RhcnQpOworICAgICAgICAgICAgbmZhLmFk
ZEVwc2lsb25UcmFuc2l0aW9uKHN0YXJ0LCBuZXdFbmQpOworICAgICAgICAgICAgcmV0dXJuIG5l
d0VuZDsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEF0b21RdWFudGlmaWVyOjpaZXJvT3JNb3Jl
OiB7CisgICAgICAgICAgICB1bnNpZ25lZCByZXBlYXRTdGFydCA9IG5mYS5jcmVhdGVOb2RlKCk7
CisgICAgICAgICAgICBuZmEuYWRkUnVsZUlkKHJlcGVhdFN0YXJ0LCBwYXR0ZXJuSWQpOworICAg
ICAgICAgICAgbmZhLmFkZEVwc2lsb25UcmFuc2l0aW9uKHN0YXJ0LCByZXBlYXRTdGFydCk7CiAK
LSAgICB2b2lkIHZpc2l0U2ltcGxlVHJhbnNpdGlvbnMoc3RkOjpmdW5jdGlvbjx2b2lkKGNoYXIp
PiB2aXNpdG9yKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1Q
TElDQVRJT04obV90ZXJtVHlwZSA9PSBUZXJtVHlwZTo6Q2hhcmFjdGVyU2V0KTsKLSAgICAgICAg
aWYgKG1fdGVybVR5cGUgIT0gVGVybVR5cGU6OkNoYXJhY3RlclNldCkKLSAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgIHVuc2lnbmVkIHJlcGVhdEVuZCA9IGdlbmVyYXRlU3ViZ3JhcGhG
b3JBdG9tKG5mYSwgcGF0dGVybklkLCByZXBlYXRTdGFydCk7CisgICAgICAgICAgICBuZmEuYWRk
RXBzaWxvblRyYW5zaXRpb24ocmVwZWF0RW5kLCByZXBlYXRTdGFydCk7CiAKLSAgICAgICAgaWYg
KCFtX2F0b21EYXRhLmNoYXJhY3RlclNldC5pbnZlcnRlZCkgewotICAgICAgICAgICAgZm9yIChj
b25zdCBhdXRvJiBjaGFyYWN0ZXJJdGVyYXRvciA6IG1fYXRvbURhdGEuY2hhcmFjdGVyU2V0LmNo
YXJhY3RlcnMuc2V0Qml0cygpKQotICAgICAgICAgICAgICAgIHZpc2l0b3Ioc3RhdGljX2Nhc3Q8
Y2hhcj4oY2hhcmFjdGVySXRlcmF0b3IpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBtX2F0b21EYXRhLmNoYXJhY3RlclNldC5jaGFyYWN0
ZXJzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1fYXRvbURhdGEuY2hhcmFj
dGVyU2V0LmNoYXJhY3RlcnMuZ2V0KGkpKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgICAgICAgICB2aXNpdG9yKHN0YXRpY19jYXN0PGNoYXI+KGkpKTsKLSAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIHVuc2lnbmVkIGtsZWVuRW5kID0gbmZhLmNyZWF0ZU5vZGUoKTsK
KyAgICAgICAgICAgIG5mYS5hZGRSdWxlSWQoa2xlZW5FbmQsIHBhdHRlcm5JZCk7CisgICAgICAg
ICAgICBuZmEuYWRkRXBzaWxvblRyYW5zaXRpb24ocmVwZWF0RW5kLCBrbGVlbkVuZCk7CisgICAg
ICAgICAgICBuZmEuYWRkRXBzaWxvblRyYW5zaXRpb24oc3RhcnQsIGtsZWVuRW5kKTsKKyAgICAg
ICAgICAgIHJldHVybiBrbGVlbkVuZDsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEF0b21RdWFu
dGlmaWVyOjpPbmVPck1vcmU6IHsKKyAgICAgICAgICAgIHVuc2lnbmVkIHJlcGVhdFN0YXJ0ID0g
bmZhLmNyZWF0ZU5vZGUoKTsKKyAgICAgICAgICAgIG5mYS5hZGRSdWxlSWQocmVwZWF0U3RhcnQs
IHBhdHRlcm5JZCk7CisgICAgICAgICAgICBuZmEuYWRkRXBzaWxvblRyYW5zaXRpb24oc3RhcnQs
IHJlcGVhdFN0YXJ0KTsKKworICAgICAgICAgICAgdW5zaWduZWQgcmVwZWF0RW5kID0gZ2VuZXJh
dGVTdWJncmFwaEZvckF0b20obmZhLCBwYXR0ZXJuSWQsIHJlcGVhdFN0YXJ0KTsKKyAgICAgICAg
ICAgIG5mYS5hZGRFcHNpbG9uVHJhbnNpdGlvbihyZXBlYXRFbmQsIHJlcGVhdFN0YXJ0KTsKKwor
ICAgICAgICAgICAgdW5zaWduZWQgYWZ0ZXJSZXBlYXQgPSBuZmEuY3JlYXRlTm9kZSgpOworICAg
ICAgICAgICAgbmZhLmFkZFJ1bGVJZChhZnRlclJlcGVhdCwgcGF0dGVybklkKTsKKyAgICAgICAg
ICAgIG5mYS5hZGRFcHNpbG9uVHJhbnNpdGlvbihyZXBlYXRFbmQsIGFmdGVyUmVwZWF0KTsKKyAg
ICAgICAgICAgIHJldHVybiBhZnRlclJlcGVhdDsKKyAgICAgICAgfQogICAgICAgICB9CiAgICAg
fQogCkBAIC0yMDEsNiArMjM3LDggQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgICAgIGNhc2UgVGVybVR5cGU6OkNoYXJhY3RlclNldDoKICAgICAgICAgICAgIHJldHVy
biBtX2F0b21EYXRhLmNoYXJhY3RlclNldCA9PSBvdGhlci5tX2F0b21EYXRhLmNoYXJhY3RlclNl
dDsKKyAgICAgICAgY2FzZSBUZXJtVHlwZTo6R3JvdXA6CisgICAgICAgICAgICByZXR1cm4gbV9h
dG9tRGF0YS5ncm91cCA9PSBvdGhlci5tX2F0b21EYXRhLmdyb3VwOwogICAgICAgICB9CiAgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0yMjAs
NiArMjU4LDkgQEAgcHVibGljOgogICAgICAgICBjYXNlIFRlcm1UeXBlOjpDaGFyYWN0ZXJTZXQ6
CiAgICAgICAgICAgICBzZWNvbmRhcnkgPSBtX2F0b21EYXRhLmNoYXJhY3RlclNldC5oYXNoKCk7
CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUZXJtVHlwZTo6R3JvdXA6CisgICAg
ICAgICAgICBzZWNvbmRhcnkgPSBtX2F0b21EYXRhLmdyb3VwLmhhc2goKTsKKyAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBXVEY6OnBhaXJJbnRIYXNoKHByaW1h
cnksIHNlY29uZGFyeSk7CiAgICAgfQpAQCAtMjM1LDYgKzI3Niw1MCBAQCBwdWJsaWM6CiAgICAg
fQogCiBwcml2YXRlOgorICAgIGJvb2wgaXNVbml2ZXJzYWxUcmFuc2l0aW9uKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBtX3Rlcm1UeXBlID09IFRlcm1UeXBlOjpDaGFyYWN0ZXJTZXQK
KyAgICAgICAgICAgICYmICgobV9hdG9tRGF0YS5jaGFyYWN0ZXJTZXQuaW52ZXJ0ZWQgJiYgIW1f
YXRvbURhdGEuY2hhcmFjdGVyU2V0LmNoYXJhY3RlcnMuYml0Q291bnQoKSkKKyAgICAgICAgICAg
ICAgICB8fCAoIW1fYXRvbURhdGEuY2hhcmFjdGVyU2V0LmludmVydGVkICYmIG1fYXRvbURhdGEu
Y2hhcmFjdGVyU2V0LmNoYXJhY3RlcnMuYml0Q291bnQoKSA9PSAxMjgpKTsKKyAgICB9CisKKyAg
ICB1bnNpZ25lZCBnZW5lcmF0ZVN1YmdyYXBoRm9yQXRvbShORkEmIG5mYSwgdWludDY0X3QgcGF0
dGVybklkLCB1bnNpZ25lZCBzb3VyY2UpIGNvbnN0CisgICAgeworICAgICAgICBzd2l0Y2ggKG1f
dGVybVR5cGUpIHsKKyAgICAgICAgY2FzZSBUZXJtVHlwZTo6RW1wdHk6CisgICAgICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgY2Fz
ZSBUZXJtVHlwZTo6RGVsZXRlZDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICBjYXNlIFRlcm1UeXBlOjpDaGFyYWN0ZXJT
ZXQ6IHsKKyAgICAgICAgICAgIHVuc2lnbmVkIHRhcmdldCA9IG5mYS5jcmVhdGVOb2RlKCk7Cisg
ICAgICAgICAgICBuZmEuYWRkUnVsZUlkKHRhcmdldCwgcGF0dGVybklkKTsKKyAgICAgICAgICAg
IGlmIChpc1VuaXZlcnNhbFRyYW5zaXRpb24oKSkKKyAgICAgICAgICAgICAgICBuZmEuYWRkVHJh
bnNpdGlvbnNPbkFueUNoYXJhY3Rlcihzb3VyY2UsIHRhcmdldCk7CisgICAgICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgICAgICBpZiAoIW1fYXRvbURhdGEuY2hhcmFjdGVyU2V0LmludmVydGVk
KSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgYXV0byYgY2hhcmFjdGVySXRlcmF0
b3IgOiBtX2F0b21EYXRhLmNoYXJhY3RlclNldC5jaGFyYWN0ZXJzLnNldEJpdHMoKSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIG5mYS5hZGRUcmFuc2l0aW9uKHNvdXJjZSwgdGFyZ2V0LCBzdGF0
aWNfY2FzdDxjaGFyPihjaGFyYWN0ZXJJdGVyYXRvcikpOworICAgICAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBtX2F0b21E
YXRhLmNoYXJhY3RlclNldC5jaGFyYWN0ZXJzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAobV9hdG9tRGF0YS5jaGFyYWN0ZXJTZXQuY2hhcmFjdGVycy5nZXQoaSkp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAg
ICAgICAgICBuZmEuYWRkVHJhbnNpdGlvbihzb3VyY2UsIHRhcmdldCwgc3RhdGljX2Nhc3Q8Y2hh
cj4oaSkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRhcmdldDsKKyAgICAgICAgfQorICAgICAgICBj
YXNlIFRlcm1UeXBlOjpHcm91cDogeworICAgICAgICAgICAgdW5zaWduZWQgbGFzdFRhcmdldCA9
IHNvdXJjZTsKKyAgICAgICAgICAgIGZvciAoY29uc3QgVGVybSYgdGVybSA6IG1fYXRvbURhdGEu
Z3JvdXAudGVybXMpCisgICAgICAgICAgICAgICAgbGFzdFRhcmdldCA9IHRlcm0uZ2VuZXJhdGVH
cmFwaChuZmEsIHBhdHRlcm5JZCwgbGFzdFRhcmdldCk7CisgICAgICAgICAgICByZXR1cm4gbGFz
dFRhcmdldDsKKyAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCiAgICAgdm9pZCBkZXN0cm95
KCkKICAgICB7CiAgICAgICAgIHN3aXRjaCAobV90ZXJtVHlwZSkgewpAQCAtMjQ0LDYgKzMyOSw5
IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgVGVybVR5cGU6OkNoYXJhY3RlclNldDoKICAgICAg
ICAgICAgIG1fYXRvbURhdGEuY2hhcmFjdGVyU2V0Ln5DaGFyYWN0ZXJTZXQoKTsKICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIFRlcm1UeXBlOjpHcm91cDoKKyAgICAgICAgICAgIG1f
YXRvbURhdGEuZ3JvdXAufkdyb3VwKCk7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQog
ICAgICAgICBtX3Rlcm1UeXBlID0gVGVybVR5cGU6OkRlbGV0ZWQ7CiAgICAgfQpAQCAtMjUxLDcg
KzMzOSw4IEBAIHByaXZhdGU6CiAgICAgZW51bSBjbGFzcyBUZXJtVHlwZSA6IHVpbnQ4X3Qgewog
ICAgICAgICBFbXB0eSwKICAgICAgICAgRGVsZXRlZCwKLSAgICAgICAgQ2hhcmFjdGVyU2V0Cisg
ICAgICAgIENoYXJhY3RlclNldCwKKyAgICAgICAgR3JvdXAKICAgICB9OwogCiAgICAgVGVybVR5
cGUgbV90ZXJtVHlwZSB7IFRlcm1UeXBlOjpFbXB0eSB9OwpAQCAtMjcyLDYgKzM2MSwyNiBAQCBw
cml2YXRlOgogICAgICAgICB9CiAgICAgfTsKIAorICAgIHN0cnVjdCBHcm91cCB7CisgICAgICAg
IFZlY3RvcjxUZXJtPiB0ZXJtczsKKworICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgR3Jv
dXAmIG90aGVyKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gb3RoZXIudGVy
bXMgPT0gdGVybXM7CisgICAgICAgIH0KKworICAgICAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QK
KyAgICAgICAgeworICAgICAgICAgICAgdW5zaWduZWQgaGFzaCA9IDY0MjE3NDk7CisgICAgICAg
ICAgICBmb3IgKGNvbnN0IFRlcm0mIHRlcm0gOiB0ZXJtcykgeworICAgICAgICAgICAgICAgIHVu
c2lnbmVkIHRlcm1IYXNoID0gdGVybS5oYXNoKCk7CisgICAgICAgICAgICAgICAgaGFzaCA9ICho
YXNoIDw8IDE2KSBeICgodGVybUhhc2ggPDwgMTEpIF4gaGFzaCk7CisgICAgICAgICAgICAgICAg
aGFzaCArPSBoYXNoID4+IDExOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGhh
c2g7CisgICAgICAgIH0KKyAgICB9OworCiAgICAgdW5pb24gQXRvbURhdGEgewogICAgICAgICBB
dG9tRGF0YSgpCiAgICAgICAgICAgICA6IGludmFsaWRUZXJtKDApCkBAIC0yODMsNiArMzkyLDcg
QEAgcHJpdmF0ZToKIAogICAgICAgICBjaGFyIGludmFsaWRUZXJtOwogICAgICAgICBDaGFyYWN0
ZXJTZXQgY2hhcmFjdGVyU2V0OworICAgICAgICBHcm91cCBncm91cDsKICAgICB9IG1fYXRvbURh
dGE7CiB9OwogCkBAIC0zMTgsNiArNDI4LDExIEBAIHB1YmxpYzoKIAogICAgICAgICBzaW5rRmxv
YXRpbmdUZXJtSWZOZWNlc3NhcnkoKTsKIAorICAgICAgICBpZiAoIW1fb3Blbkdyb3Vwcy5pc0Vt
cHR5KCkpIHsKKyAgICAgICAgICAgIGZhaWwoQVNDSUlMaXRlcmFsKCJUaGUgZXhwcmVzc2lvbiBo
YXMgdW5jbG9zZWQgZ3JvdXBzLiIpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
CiAgICAgICAgIGlmIChtX3N1YnRyZWVTdGFydCAhPSBtX3N1YnRyZWVFbmQpCiAgICAgICAgICAg
ICBtX25mYS5zZXRGaW5hbChtX3N1YnRyZWVFbmQsIG1fcGF0dGVybklkKTsKICAgICAgICAgZWxz
ZQpAQCAtNDQ4LDcgKzU2MywxMiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGF0b21QYXJlbnRoZXNl
c1N1YnBhdHRlcm5CZWdpbihib29sID0gdHJ1ZSkKICAgICB7Ci0gICAgICAgIGZhaWwoQVNDSUlM
aXRlcmFsKCJHcm91cHMgYXJlIG5vdCBzdXBwb3J0ZWQgeWV0LiIpKTsKKyAgICAgICAgaWYgKGhh
c0Vycm9yKCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgc2lua0Zsb2F0aW5nVGVy
bUlmTmVjZXNzYXJ5KCk7CisKKyAgICAgICAgbV9vcGVuR3JvdXBzLmFwcGVuZChUZXJtKFRlcm06
Okdyb3VwVGVybSkpOwogICAgIH0KIAogICAgIHZvaWQgYXRvbVBhcmVudGhldGljYWxBc3NlcnRp
b25CZWdpbihib29sID0gZmFsc2UpCkBAIC00NTgsNyArNTc4LDEzIEBAIHB1YmxpYzoKIAogICAg
IHZvaWQgYXRvbVBhcmVudGhlc2VzRW5kKCkKICAgICB7Ci0gICAgICAgIGZhaWwoQVNDSUlMaXRl
cmFsKCJHcm91cHMgYXJlIG5vdCBzdXBwb3J0ZWQgeWV0LiIpKTsKKyAgICAgICAgaWYgKGhhc0Vy
cm9yKCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgc2lua0Zsb2F0aW5nVGVybUlm
TmVjZXNzYXJ5KCk7CisgICAgICAgIEFTU0VSVCghbV9mbG9hdGluZ1Rlcm0uaXNWYWxpZCgpKTsK
KworICAgICAgICBtX2Zsb2F0aW5nVGVybSA9IG1fb3Blbkdyb3Vwcy50YWtlTGFzdCgpOwogICAg
IH0KIAogICAgIHZvaWQgZGlzanVuY3Rpb24oKQpAQCAtNDgzLDY4ICs2MDksNiBAQCBwcml2YXRl
OgogICAgICAgICBtX2Vycm9yTWVzc2FnZSA9IGVycm9yTWVzc2FnZTsKICAgICB9CiAKLSAgICB2
b2lkIGFkZFRyYW5zaXRpb25zKHVuc2lnbmVkIHNvdXJjZSwgdW5zaWduZWQgdGFyZ2V0KQotICAg
IHsKLSAgICAgICAgYXV0byB2aXNpdG9yID0gW3RoaXMsIHNvdXJjZSwgdGFyZ2V0XShjaGFyIGNo
YXJhY3RlcikgewotICAgICAgICAgICAgaWYgKG1fZmxvYXRpbmdUZXJtLmlzVW5pdmVyc2FsVHJh
bnNpdGlvbigpKQotICAgICAgICAgICAgICAgIG1fbmZhLmFkZFRyYW5zaXRpb25zT25BbnlDaGFy
YWN0ZXIoc291cmNlLCB0YXJnZXQpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
IG1fbmZhLmFkZFRyYW5zaXRpb24oc291cmNlLCB0YXJnZXQsIGNoYXJhY3Rlcik7Ci0gICAgICAg
IH07Ci0gICAgICAgIG1fZmxvYXRpbmdUZXJtLnZpc2l0U2ltcGxlVHJhbnNpdGlvbnModmlzaXRv
cik7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgc2lua0Zsb2F0aW5nVGVybSh1bnNpZ25lZCBzdGFy
dCkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAobV9mbG9hdGluZ1Rlcm0ucXVhbnRpZmllcigpKSB7
Ci0gICAgICAgIGNhc2UgQXRvbVF1YW50aWZpZXI6Ok9uZTogewotICAgICAgICAgICAgdW5zaWdu
ZWQgbmV3RW5kID0gbV9uZmEuY3JlYXRlTm9kZSgpOwotICAgICAgICAgICAgbV9uZmEuYWRkUnVs
ZUlkKG5ld0VuZCwgbV9wYXR0ZXJuSWQpOwotICAgICAgICAgICAgYWRkVHJhbnNpdGlvbnMoc3Rh
cnQsIG5ld0VuZCk7Ci0gICAgICAgICAgICByZXR1cm4gbmV3RW5kOwotICAgICAgICB9Ci0gICAg
ICAgIGNhc2UgQXRvbVF1YW50aWZpZXI6Olplcm9Pck9uZTogewotICAgICAgICAgICAgdW5zaWdu
ZWQgbmV3RW5kID0gbV9uZmEuY3JlYXRlTm9kZSgpOwotICAgICAgICAgICAgbV9uZmEuYWRkUnVs
ZUlkKG5ld0VuZCwgbV9wYXR0ZXJuSWQpOwotICAgICAgICAgICAgYWRkVHJhbnNpdGlvbnMoc3Rh
cnQsIG5ld0VuZCk7Ci0gICAgICAgICAgICByZXR1cm4gbmV3RW5kOwotICAgICAgICB9Ci0gICAg
ICAgIGNhc2UgQXRvbVF1YW50aWZpZXI6Olplcm9Pck1vcmU6IHsKLSAgICAgICAgICAgIHVuc2ln
bmVkIHJlcGVhdFN0YXJ0ID0gbV9uZmEuY3JlYXRlTm9kZSgpOwotICAgICAgICAgICAgbV9uZmEu
YWRkUnVsZUlkKHJlcGVhdFN0YXJ0LCBtX3BhdHRlcm5JZCk7Ci0gICAgICAgICAgICB1bnNpZ25l
ZCByZXBlYXRFbmQgPSBtX25mYS5jcmVhdGVOb2RlKCk7Ci0gICAgICAgICAgICBtX25mYS5hZGRS
dWxlSWQocmVwZWF0RW5kLCBtX3BhdHRlcm5JZCk7Ci0KLSAgICAgICAgICAgIGFkZFRyYW5zaXRp
b25zKHJlcGVhdFN0YXJ0LCByZXBlYXRFbmQpOwotICAgICAgICAgICAgbV9uZmEuYWRkRXBzaWxv
blRyYW5zaXRpb24ocmVwZWF0RW5kLCByZXBlYXRTdGFydCk7Ci0KLSAgICAgICAgICAgIG1fbmZh
LmFkZEVwc2lsb25UcmFuc2l0aW9uKHN0YXJ0LCByZXBlYXRTdGFydCk7Ci0KLSAgICAgICAgICAg
IHVuc2lnbmVkIGtsZWVuRW5kID0gbV9uZmEuY3JlYXRlTm9kZSgpOwotICAgICAgICAgICAgbV9u
ZmEuYWRkUnVsZUlkKGtsZWVuRW5kLCBtX3BhdHRlcm5JZCk7Ci0gICAgICAgICAgICBtX25mYS5h
ZGRFcHNpbG9uVHJhbnNpdGlvbihyZXBlYXRFbmQsIGtsZWVuRW5kKTsKLSAgICAgICAgICAgIG1f
bmZhLmFkZEVwc2lsb25UcmFuc2l0aW9uKHN0YXJ0LCBrbGVlbkVuZCk7Ci0gICAgICAgICAgICBy
ZXR1cm4ga2xlZW5FbmQ7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBBdG9tUXVhbnRpZmllcjo6
T25lT3JNb3JlOiB7Ci0gICAgICAgICAgICB1bnNpZ25lZCByZXBlYXRTdGFydCA9IG1fbmZhLmNy
ZWF0ZU5vZGUoKTsKLSAgICAgICAgICAgIG1fbmZhLmFkZFJ1bGVJZChyZXBlYXRTdGFydCwgbV9w
YXR0ZXJuSWQpOwotICAgICAgICAgICAgdW5zaWduZWQgcmVwZWF0RW5kID0gbV9uZmEuY3JlYXRl
Tm9kZSgpOwotICAgICAgICAgICAgbV9uZmEuYWRkUnVsZUlkKHJlcGVhdEVuZCwgbV9wYXR0ZXJu
SWQpOwotCi0gICAgICAgICAgICBhZGRUcmFuc2l0aW9ucyhyZXBlYXRTdGFydCwgcmVwZWF0RW5k
KTsKLSAgICAgICAgICAgIG1fbmZhLmFkZEVwc2lsb25UcmFuc2l0aW9uKHJlcGVhdEVuZCwgcmVw
ZWF0U3RhcnQpOwotCi0gICAgICAgICAgICBtX25mYS5hZGRFcHNpbG9uVHJhbnNpdGlvbihzdGFy
dCwgcmVwZWF0U3RhcnQpOwotCi0gICAgICAgICAgICB1bnNpZ25lZCBhZnRlclJlcGVhdCA9IG1f
bmZhLmNyZWF0ZU5vZGUoKTsKLSAgICAgICAgICAgIG1fbmZhLmFkZFJ1bGVJZChhZnRlclJlcGVh
dCwgbV9wYXR0ZXJuSWQpOwotICAgICAgICAgICAgbV9uZmEuYWRkRXBzaWxvblRyYW5zaXRpb24o
cmVwZWF0RW5kLCBhZnRlclJlcGVhdCk7Ci0gICAgICAgICAgICByZXR1cm4gYWZ0ZXJSZXBlYXQ7
Ci0gICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQogICAgIHZvaWQgc2lua0Zsb2F0aW5nVGVy
bUlmTmVjZXNzYXJ5KCkKICAgICB7CiAgICAgICAgIGlmICghbV9mbG9hdGluZ1Rlcm0uaXNWYWxp
ZCgpKQpAQCAtNTUyLDYgKzYxNiwxMiBAQCBwcml2YXRlOgogCiAgICAgICAgIEFTU0VSVChtX2xh
c3RQcmVmaXhUcmVlRW50cnkpOwogCisgICAgICAgIGlmICghbV9vcGVuR3JvdXBzLmlzRW1wdHko
KSkgeworICAgICAgICAgICAgbV9vcGVuR3JvdXBzLmxhc3QoKS5leHRlbmRHcm91cFN1YnBhdHRl
cm4obV9mbG9hdGluZ1Rlcm0pOworICAgICAgICAgICAgbV9mbG9hdGluZ1Rlcm0gPSBUZXJtKCk7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwogICAgICAgICBhdXRvIG5leHRFbnRy
eSA9IG1fbGFzdFByZWZpeFRyZWVFbnRyeS0+bmV4dFBhdHRlcm4uZmluZChtX2Zsb2F0aW5nVGVy
bSk7CiAgICAgICAgIGlmIChuZXh0RW50cnkgIT0gbV9sYXN0UHJlZml4VHJlZUVudHJ5LT5uZXh0
UGF0dGVybi5lbmQoKSkgewogICAgICAgICAgICAgbV9sYXN0UHJlZml4VHJlZUVudHJ5ID0gbmV4
dEVudHJ5LT52YWx1ZS5nZXQoKTsKQEAgLTU1OSw3ICs2MjksNyBAQCBwcml2YXRlOgogICAgICAg
ICB9IGVsc2UgewogICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFByZWZpeFRyZWVFbnRyeT4g
bmV4dFByZWZpeFRyZWVFbnRyeSA9IHN0ZDo6bWFrZV91bmlxdWU8UHJlZml4VHJlZUVudHJ5Pigp
OwogCi0gICAgICAgICAgICB1bnNpZ25lZCBuZXdFbmQgPSBzaW5rRmxvYXRpbmdUZXJtKG1fbGFz
dFByZWZpeFRyZWVFbnRyeS0+bmZhTm9kZSk7CisgICAgICAgICAgICB1bnNpZ25lZCBuZXdFbmQg
PSBtX2Zsb2F0aW5nVGVybS5nZW5lcmF0ZUdyYXBoKG1fbmZhLCBtX3BhdHRlcm5JZCwgbV9sYXN0
UHJlZml4VHJlZUVudHJ5LT5uZmFOb2RlKTsKICAgICAgICAgICAgIG5leHRQcmVmaXhUcmVlRW50
cnktPm5mYU5vZGUgPSBuZXdFbmQ7CiAKICAgICAgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9s
YXN0UHJlZml4VHJlZUVudHJ5LT5uZXh0UGF0dGVybi5zZXQobV9mbG9hdGluZ1Rlcm0sIFdURjo6
bW92ZShuZXh0UHJlZml4VHJlZUVudHJ5KSk7CkBAIC01ODYsNiArNjU2LDcgQEAgcHJpdmF0ZToK
ICAgICB1bnNpZ25lZCBtX3N1YnRyZWVFbmQgeyAwIH07CiAKICAgICBQcmVmaXhUcmVlRW50cnkq
IG1fbGFzdFByZWZpeFRyZWVFbnRyeTsKKyAgICBEZXF1ZTxUZXJtPiBtX29wZW5Hcm91cHM7CiAg
ICAgVGVybSBtX2Zsb2F0aW5nVGVybTsKIAogICAgIFByZWZpeFRyZWVFbnRyeSogbV9uZXdQcmVm
aXhTdWJ0cmVlUm9vdCA9IG51bGxwdHI7CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9U
b29scy9DaGFuZ2VMb2cKaW5kZXggZWFkZDgxZjA2NzljMGRjMDJhMDBmMzdiOGRhMTQ3OWJlNTI2
NDZiYS4uODdjNGM1M2IwOGJiNTYwZTU2MGU0NGZkNmQ1YjVhODAyMWI5MDE3ZCAxMDA2NDQKLS0t
IGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBA
CisyMDE1LTAzLTA5ICBCZW5qYW1pbiBQb3VsYWluICA8YnBvdWxhaW5AYXBwbGUuY29tPgorCisg
ICAgICAgIEV4dGVuZCBVUkwgZmlsdGVyJ3MgVGVybSBkZWZpbml0aW9uIHRvIHN1cHBvcnQgZ3Jv
dXBzL3N1YnBhdHRlcm5zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNDI1MTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Db250ZW50RXh0ZW5zaW9ucy5j
cHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjp0ZXN0VVJMKToKKwogMjAxNS0wMy0wNiAgSmVy
IE5vYmxlICA8amVyLm5vYmxlQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgYW4gb3B0aW9uIHRv
IHJ1bi13ZWJraXQtdGVzdHMgdG8gb3ZlcnJpZGUgdGhlIExheW91dFRlc3RzLyBkaXJlY3RvcnkK
ZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Db250ZW50RXh0
ZW5zaW9ucy5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29udGVudEV4
dGVuc2lvbnMuY3BwCmluZGV4IGIwZGE2NDM5NGU2NjI0MzcxYzRiMWRmZjdkZWZiZGM3ZjY1Mjg0
Y2IuLmQ4YTI2YmQ2MDU0NjI2M2IwMDQzNzkwMWI4OTlhY2FiMjYyNzZmNzYgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Db250ZW50RXh0ZW5zaW9ucy5jcHAK
KysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0NvbnRlbnRFeHRlbnNpb25z
LmNwcApAQCAtOTIsNiArOTIsMTcgQEAgcHJpdmF0ZToKICAgICBDb250ZW50RXh0ZW5zaW9uczo6
Q29tcGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YSBtX2RhdGE7CiB9OwogCit2b2lkIHN0YXRpYyB0
ZXN0VVJMKENvbnRlbnRFeHRlbnNpb25zOjpDb250ZW50RXh0ZW5zaW9uc0JhY2tlbmQgY29udGVu
dEV4dGVuc2lvbnNCYWNrZW5kLCBjb25zdCBVUkwmIHVybCwgVmVjdG9yPENvbnRlbnRFeHRlbnNp
b25zOjpBY3Rpb25UeXBlPiBleHBlY3RlZEFjdGlvbnMpCit7CisgICAgYXV0byBhY3Rpb25zID0g
Y29udGVudEV4dGVuc2lvbnNCYWNrZW5kLmFjdGlvbnNGb3JVUkwodXJsKTsKKyAgICBFWFBFQ1Rf
RVEoZXhwZWN0ZWRBY3Rpb25zLnNpemUoKSwgYWN0aW9ucy5zaXplKCkpOworICAgIGlmIChleHBl
Y3RlZEFjdGlvbnMuc2l6ZSgpICE9IGFjdGlvbnMuc2l6ZSgpKQorICAgICAgICByZXR1cm47CisK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZXhwZWN0ZWRBY3Rpb25zLnNpemUoKTsgKytp
KQorICAgICAgICBFWFBFQ1RfRVEoZXhwZWN0ZWRBY3Rpb25zW2ldLCBhY3Rpb25zW2ldLnR5cGUo
KSk7Cit9CisKIGNvbnN0IGNoYXIqIGJhc2ljRmlsdGVyID0gIlt7XCJhY3Rpb25cIjp7XCJ0eXBl
XCI6XCJibG9ja1wifSxcInRyaWdnZXJcIjp7XCJ1cmwtZmlsdGVyXCI6XCIuKndlYmtpdC5vcmdc
In19XSI7CiAKIFRFU1RfRihDb250ZW50RXh0ZW5zaW9uVGVzdCwgQmFzaWMpCkBAIC0xMDEsMTAg
KzExMiw0OSBAQCBURVNUX0YoQ29udGVudEV4dGVuc2lvblRlc3QsIEJhc2ljKQogCiAgICAgQ29u
dGVudEV4dGVuc2lvbnM6OkNvbnRlbnRFeHRlbnNpb25zQmFja2VuZCBiYWNrZW5kOwogICAgIGJh
Y2tlbmQuYWRkQ29udGVudEV4dGVuc2lvbigidGVzdEZpbHRlciIsIGV4dGVuc2lvbik7Ci0gICAg
Ci0gICAgYXV0byBhY3Rpb25zID0gYmFja2VuZC5hY3Rpb25zRm9yVVJMKFVSTChQYXJzZWRVUkxT
dHJpbmcsICJodHRwOi8vd2Via2l0Lm9yZy8iKSk7Ci0gICAgRVhQRUNUX0VRKDF1LCBhY3Rpb25z
LnNpemUoKSk7Ci0gICAgRVhQRUNUX0VRKENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpC
bG9ja0xvYWQsIGFjdGlvbnNbMF0udHlwZSgpKTsKKworICAgIHRlc3RVUkwoYmFja2VuZCwgVVJM
KFBhcnNlZFVSTFN0cmluZywgImh0dHA6Ly93ZWJraXQub3JnLyIpLCB7IENvbnRlbnRFeHRlbnNp
b25zOjpBY3Rpb25UeXBlOjpCbG9ja0xvYWQgfSk7Cit9CisKK2NvbnN0IGNoYXIqIHBhdHRlcm5z
U3RhcnRpbmdXaXRoR3JvdXBGaWx0ZXIgPSAiW3tcImFjdGlvblwiOntcInR5cGVcIjpcImJsb2Nr
XCJ9LFwidHJpZ2dlclwiOntcInVybC1maWx0ZXJcIjpcIihodHRwOi8vd2hhdHdnXFxcXC5vcmcv
KT93ZWJraXRcMTM0XDEzNC5vcmdcIn19XSI7CisKK1RFU1RfRihDb250ZW50RXh0ZW5zaW9uVGVz
dCwgUGF0dGVyblN0YXJ0aW5nV2l0aEdyb3VwKQoreworICAgIGF1dG8gZXh0ZW5zaW9uRGF0YSA9
IENvbnRlbnRFeHRlbnNpb25zOjpjb21waWxlUnVsZUxpc3QocGF0dGVybnNTdGFydGluZ1dpdGhH
cm91cEZpbHRlcik7CisgICAgYXV0byBleHRlbnNpb24gPSBJbk1lbW9yeUNvbXBpbGVkQ29udGVu
dEV4dGVuc2lvbjo6Y3JlYXRlKFdURjo6bW92ZShleHRlbnNpb25EYXRhKSk7CisKKyAgICBDb250
ZW50RXh0ZW5zaW9uczo6Q29udGVudEV4dGVuc2lvbnNCYWNrZW5kIGJhY2tlbmQ7CisgICAgYmFj
a2VuZC5hZGRDb250ZW50RXh0ZW5zaW9uKCJQYXR0ZXJuTmVzdGVkR3JvdXBzRmlsdGVyIiwgZXh0
ZW5zaW9uKTsKKworICAgIHRlc3RVUkwoYmFja2VuZCwgVVJMKFVSTCgpLCAiaHR0cDovL3doYXR3
Zy5vcmcvd2Via2l0Lm9yZy8iKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6Qmxv
Y2tMb2FkIH0pOworICAgIHRlc3RVUkwoYmFja2VuZCwgVVJMKFVSTCgpLCAiaHR0cDovL3doYXR3
Zy5vcmcvd2Via2l0Lm9yZyIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25UeXBlOjpCbG9j
a0xvYWQgfSk7CisgICAgdGVzdFVSTChiYWNrZW5kLCBVUkwoVVJMKCksICJodHRwOi8vd2Via2l0
Lm9yZy8iKSwgeyB9KTsKKyAgICB0ZXN0VVJMKGJhY2tlbmQsIFVSTChVUkwoKSwgImh0dHA6Ly93
aGF0d2cub3JnLyIpLCB7IH0pOworICAgIHRlc3RVUkwoYmFja2VuZCwgVVJMKFVSTCgpLCAiaHR0
cDovL3doYXR3Zy5vcmciKSwgeyB9KTsKK30KKworY29uc3QgY2hhciogcGF0dGVybk5lc3RlZEdy
b3Vwc0ZpbHRlciA9ICJbe1wiYWN0aW9uXCI6e1widHlwZVwiOlwiYmxvY2tcIn0sXCJ0cmlnZ2Vy
XCI6e1widXJsLWZpbHRlclwiOlwiaHR0cDovL3dlYmtpdFxcXFwub3JnLyhmb28oYmFyKSopK1wi
fX1dIjsKKworVEVTVF9GKENvbnRlbnRFeHRlbnNpb25UZXN0LCBQYXR0ZXJuTmVzdGVkR3JvdXBz
KQoreworICAgIGF1dG8gZXh0ZW5zaW9uRGF0YSA9IENvbnRlbnRFeHRlbnNpb25zOjpjb21waWxl
UnVsZUxpc3QocGF0dGVybk5lc3RlZEdyb3Vwc0ZpbHRlcik7CisgICAgYXV0byBleHRlbnNpb24g
PSBJbk1lbW9yeUNvbXBpbGVkQ29udGVudEV4dGVuc2lvbjo6Y3JlYXRlKFdURjo6bW92ZShleHRl
bnNpb25EYXRhKSk7CisKKyAgICBDb250ZW50RXh0ZW5zaW9uczo6Q29udGVudEV4dGVuc2lvbnNC
YWNrZW5kIGJhY2tlbmQ7CisgICAgYmFja2VuZC5hZGRDb250ZW50RXh0ZW5zaW9uKCJQYXR0ZXJu
TmVzdGVkR3JvdXBzRmlsdGVyIiwgZXh0ZW5zaW9uKTsKKworICAgIHRlc3RVUkwoYmFja2VuZCwg
VVJMKFVSTCgpLCAiaHR0cDovL3dlYmtpdC5vcmcvZm9vIiksIHsgQ29udGVudEV4dGVuc2lvbnM6
OkFjdGlvblR5cGU6OkJsb2NrTG9hZCB9KTsKKyAgICB0ZXN0VVJMKGJhY2tlbmQsIFVSTChVUkwo
KSwgImh0dHA6Ly93ZWJraXQub3JnL2Zvb2JhciIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rp
b25UeXBlOjpCbG9ja0xvYWQgfSk7CisgICAgdGVzdFVSTChiYWNrZW5kLCBVUkwoVVJMKCksICJo
dHRwOi8vd2Via2l0Lm9yZy9mb29iYXJiYXIiKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9u
VHlwZTo6QmxvY2tMb2FkIH0pOworICAgIHRlc3RVUkwoYmFja2VuZCwgVVJMKFVSTCgpLCAiaHR0
cDovL3dlYmtpdC5vcmcvZm9vZm9vYmFyIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5
cGU6OkJsb2NrTG9hZCB9KTsKKyAgICB0ZXN0VVJMKGJhY2tlbmQsIFVSTChVUkwoKSwgImh0dHA6
Ly93ZWJraXQub3JnL2Zvb2JhcmZvb2JhciIpLCB7IENvbnRlbnRFeHRlbnNpb25zOjpBY3Rpb25U
eXBlOjpCbG9ja0xvYWQgfSk7CisgICAgdGVzdFVSTChiYWNrZW5kLCBVUkwoVVJMKCksICJodHRw
Oi8vd2Via2l0Lm9yZy9mb29iIiksIHsgQ29udGVudEV4dGVuc2lvbnM6OkFjdGlvblR5cGU6OkJs
b2NrTG9hZCB9KTsKKyAgICB0ZXN0VVJMKGJhY2tlbmQsIFVSTChVUkwoKSwgImh0dHA6Ly93ZWJr
aXQub3JnL2Zvb3IiKSwgeyBDb250ZW50RXh0ZW5zaW9uczo6QWN0aW9uVHlwZTo6QmxvY2tMb2Fk
IH0pOworCisKKyAgICB0ZXN0VVJMKGJhY2tlbmQsIFVSTChVUkwoKSwgImh0dHA6Ly93ZWJraXQu
b3JnLyIpLCB7IH0pOworICAgIHRlc3RVUkwoYmFja2VuZCwgVVJMKFVSTCgpLCAiaHR0cDovL3dl
YmtpdC5vcmcvYmFyIiksIHsgfSk7CisgICAgdGVzdFVSTChiYWNrZW5kLCBVUkwoVVJMKCksICJo
dHRwOi8vd2Via2l0Lm9yZy9mb2JhciIpLCB7IH0pOwogfQogCiB9IC8vIG5hbWVzcGFjZSBUZXN0
V2ViS2l0QVBJCg==
</data>
<flag name="review"
          id="273204"
          type_id="1"
          status="+"
          setter="achristensen"
    />
          </attachment>
      

    </bug>

</bugzilla>