<?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>126876</bug_id>
          
          <creation_ts>2014-01-13 01:48:50 -0800</creation_ts>
          <short_desc>Avoid unnecessary copies of AccessibilityObject::AccessibilityChildrenVector</short_desc>
          <delta_ts>2014-01-13 13:16:40 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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="Zan Dobersek">zan</reporter>
          <assigned_to name="Zan Dobersek">zan</assigned_to>
          <cc>aboxhall</cc>
    
    <cc>apinheiro</cc>
    
    <cc>cfleizach</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dmazzoni</cc>
    
    <cc>jcraig</cc>
    
    <cc>jdiggs</cc>
    
    <cc>mario</cc>
    
    <cc>samuel_white</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>967203</commentid>
    <comment_count>0</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2014-01-13 01:48:50 -0800</bug_when>
    <thetext>Avoid unnecessary copies of AccessibilityObject::AccessibilityChildrenVector</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>967206</commentid>
    <comment_count>1</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2014-01-13 01:57:56 -0800</bug_when>
    <thetext>Avoiding the copies is a huge win on the GTK port. Testing the load of the singe-page HTML Living Standard[1] with WebKitTestRunner, the number of copies is reduced from hundreds of thousands to 75-300.

[1] http://www.whatwg.org/specs/web-apps/current-work/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>967207</commentid>
    <comment_count>2</comment_count>
      <attachid>221016</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2014-01-13 01:58:54 -0800</bug_when>
    <thetext>Created attachment 221016
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>967232</commentid>
    <comment_count>3</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2014-01-13 03:15:34 -0800</bug_when>
    <thetext>Committed r161873: &lt;http://trac.webkit.org/changeset/161873&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>967264</commentid>
    <comment_count>4</comment_count>
      <attachid>221016</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2014-01-13 05:55:45 -0800</bug_when>
    <thetext>Comment on attachment 221016
Patch

I think we probably should use auto in all these cases</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>967464</commentid>
    <comment_count>5</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2014-01-13 13:02:43 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 221016 [details])
&gt; I think we probably should use auto in all these cases

Do these cases align with any of the guildelines on using auto that were recently discussed on webkit-dev? AccessibilityObject::children() doesn&apos;t specifically note that a reference to the vector of object&apos;s children is being returned.

I&apos;d very much like to use auto here, as long as it is used in line with the guidelines.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>967465</commentid>
    <comment_count>6</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2014-01-13 13:03:49 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 221016 [details])
&gt; I think we probably should use auto in all these cases

https://bugs.webkit.org/show_bug.cgi?id=126915</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>967468</commentid>
    <comment_count>7</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2014-01-13 13:04:19 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; (In reply to comment #4)
&gt; &gt; (From update of attachment 221016 [details] [details])
&gt; &gt; I think we probably should use auto in all these cases
&gt; 
&gt; Do these cases align with any of the guildelines on using auto that were recently discussed on webkit-dev? AccessibilityObject::children() doesn&apos;t specifically note that a reference to the vector of object&apos;s children is being returned.
&gt; 
&gt; I&apos;d very much like to use auto here, as long as it is used in line with the guidelines.

After reading that discussion, I feel like this would probably fit the criteria. It removes a lot of disgusting code to write</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>967471</commentid>
    <comment_count>8</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2014-01-13 13:10:08 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; (In reply to comment #5)
&gt; &gt; (In reply to comment #4)
&gt; &gt; &gt; (From update of attachment 221016 [details] [details] [details])
&gt; &gt; &gt; I think we probably should use auto in all these cases
&gt; &gt; 
&gt; &gt; Do these cases align with any of the guildelines on using auto that were recently discussed on webkit-dev? AccessibilityObject::children() doesn&apos;t specifically note that a reference to the vector of object&apos;s children is being returned.
&gt; &gt; 
&gt; &gt; I&apos;d very much like to use auto here, as long as it is used in line with the guidelines.
&gt; 
&gt; After reading that discussion, I feel like this would probably fit the criteria. It removes a lot of disgusting code to write

Ah, changing to using the range-based for loops in bug #126876 makes things much better-looking, and auto also makes sense in that context.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>967474</commentid>
    <comment_count>9</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2014-01-13 13:16:40 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; (In reply to comment #7)
&gt; &gt; (In reply to comment #5)
&gt; &gt; &gt; (In reply to comment #4)
&gt; &gt; &gt; &gt; (From update of attachment 221016 [details] [details] [details] [details])
&gt; &gt; &gt; &gt; I think we probably should use auto in all these cases
&gt; &gt; &gt; 
&gt; &gt; &gt; Do these cases align with any of the guildelines on using auto that were recently discussed on webkit-dev? AccessibilityObject::children() doesn&apos;t specifically note that a reference to the vector of object&apos;s children is being returned.
&gt; &gt; &gt; 
&gt; &gt; &gt; I&apos;d very much like to use auto here, as long as it is used in line with the guidelines.
&gt; &gt; 
&gt; &gt; After reading that discussion, I feel like this would probably fit the criteria. It removes a lot of disgusting code to write
&gt; 
&gt; Ah, changing to using the range-based for loops in bug #126876 makes things much better-looking, and auto also makes sense in that context.

The question I had is whether a range based loop will ensure that only a reference is used.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>221016</attachid>
            <date>2014-01-13 01:58:54 -0800</date>
            <delta_ts>2014-01-13 05:55:45 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-126876-20140113015852.patch</filename>
            <type>text/plain</type>
            <size>33015</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2MTg2NykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgwIEBACisyMDE0LTAxLTEzICBaYW4gRG9i
ZXJzZWsgIDx6ZG9iZXJzZWtAaWdhbGlhLmNvbT4KKworICAgICAgICBBdm9pZCB1bm5lY2Vzc2Fy
eSBjb3BpZXMgb2YgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVj
dG9yCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjY4
NzYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBY2Nl
c3NpYmlsaXR5T2JqZWN0OjpjaGlsZHJlbigpIHJldHVybnMgYSByZWZlcmVuY2UgdG8gdGhlIFZl
Y3RvciBvZiB0aGF0IEFjY2Vzc2liaWxpdHlPYmplY3QncyBjaGlsZHJlbi4KKyAgICAgICAgVGhl
IG1ham9yaXR5IG9mIGNhbGxzaXRlcyBzdG9yZXMgdGhlIHJldHVybiB2YWx1ZSBpbiBhIHRlbXBv
cmFyeSB2YWx1ZSBpbnN0ZWFkIG9mIGEgcmVmZXJlbmNlLCBjYXVzaW5nCisgICAgICAgIGEgY29w
eSBlYWNoIHRpbWUuIEEgcmVmZXJlbmNlIHRvIHRoZSByZXR1cm4gdmFsdWUgc2hvdWxkIGJlIHVz
ZWQgaW5zdGVhZC4KKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpmb2N1c2VkSW1hZ2VNYXBVSUVsZW1l
bnQpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUFSSUFHcmlkLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlBUklBR3JpZDo6YWRkUm93RGVzY2VuZGFu
dCk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5QVJJQUdyaWRDZWxsLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlBUklBR3JpZENlbGw6OnJvd0luZGV4
UmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eUFSSUFHcmlkQ2VsbDo6Y29s
dW1uSW5kZXhSYW5nZSk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5QVJJ
QUdyaWRSb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eUFSSUFHcmlkUm93
OjpoZWFkZXJPYmplY3QpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUxp
c3RCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eUxpc3RCb3g6OnNldFNl
bGVjdGVkQ2hpbGRyZW4pOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUxp
c3RCb3guaDoKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjppbnNlcnRD
aGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6c2VsZWN0
ZWRSYWRpb0J1dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVj
dDo6c2VsZWN0ZWRUYWJJdGVtKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YXBwZW5kQ2hpbGRyZW5Ub0FycmF5KToK
KyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6OmFyaWFUcmVlUm93cyk6Cisg
ICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0OjphcmlhVHJlZUl0ZW1Db250ZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6OmFyaWFUcmVlSXRlbURp
c2Nsb3NlZFJvd3MpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRl
ck9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0
OjphY2Nlc3NpYmlsaXR5SW1hZ2VNYXBIaXRUZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vz
c2liaWxpdHlSZW5kZXJPYmplY3Q6OmFkZFJlbW90ZVNWR0NoaWxkcmVuKToKKyAgICAgICAgKFdl
YkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmFkZEhpZGRlbkNoaWxkcmVuKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmFyaWFMaXN0Ym94U2Vs
ZWN0ZWRDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2Jq
ZWN0OjphcmlhTGlzdGJveFZpc2libGVDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpBY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojp0YWJDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpB
Y2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjptYXRoUmFkaWNhbmRPYmplY3QpOgorICAgICAgICAo
V2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6bWF0aFJvb3RJbmRleE9iamVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjptYXRoTnVtZXJh
dG9yT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6
Om1hdGhEZW5vbWluYXRvck9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5
UmVuZGVyT2JqZWN0OjptYXRoVW5kZXJPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNz
aWJpbGl0eVJlbmRlck9iamVjdDo6bWF0aE92ZXJPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6
QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6bWF0aEJhc2VPYmplY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6bWF0aFN1YnNjcmlwdE9iamVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjptYXRoU3VwZXJzY3Jp
cHRPYmplY3QpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlUYWJsZTo6Y2VsbEZvckNvbHVtbkFu
ZFJvdyk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVDb2x1bW4u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVRhYmxlQ29sdW1uOjpoZWFkZXJP
YmplY3QpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlUm93LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlUYWJsZVJvdzo6aGVhZGVyT2JqZWN0
KToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2F0ay9BWE9iamVjdENhY2hlQXRrLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OmdldExpc3RPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6bm90aWZ5
Q2hpbGRyZW5TZWxlY3Rpb25DaGFuZ2UpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvYXRrL1dl
YktpdEFjY2Vzc2libGVJbnRlcmZhY2VIeXBlcnRleHQuY3BwOgorICAgICAgICAod2Via2l0QWNj
ZXNzaWJsZUh5cGVydGV4dEdldExpbmspOgorICAgICAgICAod2Via2l0QWNjZXNzaWJsZUh5cGVy
dGV4dEdldE5MaW5rcyk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNz
aWJsZUludGVyZmFjZVNlbGVjdGlvbi5jcHA6CisgICAgICAgIChsaXN0T2JqZWN0Rm9yU2VsZWN0
aW9uKToKKyAgICAgICAgKG9wdGlvbkZyb21MaXN0KToKKyAgICAgICAgKHdlYmtpdEFjY2Vzc2li
bGVTZWxlY3Rpb25TZWxlY3RBbGxTZWxlY3Rpb24pOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkv
YXRrL1dlYktpdEFjY2Vzc2libGVXcmFwcGVyQXRrLmNwcDoKKyAgICAgICAgKGdldE5DaGlsZHJl
bkZvclRhYmxlKToKKyAgICAgICAgKGdldENoaWxkRm9yVGFibGUpOgorICAgICAgICAod2Via2l0
QWNjZXNzaWJsZVJlZkNoaWxkKToKKyAgICAgICAgKGdldEluZGV4SW5QYXJlbnRGb3JDZWxsSW5S
b3cpOgorICAgICAgICAoZ2V0SW50ZXJmYWNlTWFza0Zyb21PYmplY3QpOgorICAgICAgICAqIGFj
Y2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1tOgorICAg
ICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5RWxlbWVu
dEF0SW5kZXg6XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGlu
ZGV4T2ZBY2Nlc3NpYmlsaXR5RWxlbWVudDpdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0
eU9iamVjdFdyYXBwZXIgY29udGFpbnNVbm5hdHVyYWxseVNlZ21lbnRlZENoaWxkcmVuXSk6Cisg
ICAgICAgICogYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJN
YWMubW06CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2li
aWxpdHlBdHRyaWJ1dGVWYWx1ZTpdKToKKwogMjAxNC0wMS0xMyAgTMOhc3psw7MgTGFuZ8OzICA8
bGxhbmdvLnUtc3plZ2VkQHBhcnRuZXIuc2Ftc3VuZy5jb20+CiAKICAgICAgICAgQ29tbWVudCBz
aG91bGQgYmUgY29uc3J1Y3RhYmxlLgpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BWE9iamVjdENhY2hlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCShyZXZpc2lvbiAxNjE4NjYpCisrKyBTb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NDIsNyArMTQyLDcgQEAgQWNjZXNzaWJpbGl0eU9iamVjdCogQVhPYmplY3RDYWNoZTo6Zm9jdQog
ICAgIGlmICghYXhSZW5kZXJJbWFnZSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgCi0gICAgQWNj
ZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIGltYWdlQ2hpbGRy
ZW4gPSBheFJlbmRlckltYWdlLT5jaGlsZHJlbigpOworICAgIGNvbnN0IEFjY2Vzc2liaWxpdHlP
YmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYgaW1hZ2VDaGlsZHJlbiA9IGF4UmVu
ZGVySW1hZ2UtPmNoaWxkcmVuKCk7CiAgICAgdW5zaWduZWQgY291bnQgPSBpbWFnZUNoaWxkcmVu
LnNpemUoKTsKICAgICBmb3IgKHVuc2lnbmVkIGsgPSAwOyBrIDwgY291bnQ7ICsraykgewogICAg
ICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjaGlsZCA9IGltYWdlQ2hpbGRyZW5ba10uZ2V0KCk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBUklBR3Jp
ZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5QVJJQUdyaWQuY3BwCShyZXZpc2lvbiAxNjE4NjYpCisrKyBTb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBUklBR3JpZC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTg4LDcgKzg4LDcgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5QVJJQUdyaWQ6OmFkZFJvd0Rlc2Nlbgog
ICAgIGlmICghcm93Q2hpbGQtPmlzVGFibGVSb3coKSkgewogICAgICAgICAvLyBBbHRob3VnaCBh
ICJncmlkIiBzaG91bGQgaGF2ZSByb3dzIGFzIGl0cyBkaXJlY3QgZGVzY2VuZGFudHMsIGlmIHRo
aXMgaXMgbm90IGEgdGFibGUgcm93LAogICAgICAgICAvLyBkaXZlIGRlZXBlciBpbnRvIHRoZSBk
ZXNjZW5kYW50cyB0byB0cnkgdG8gZmluZCBhIHZhbGlkIHJvdy4KLSAgICAgICAgQWNjZXNzaWJp
bGl0eUNoaWxkcmVuVmVjdG9yIGNoaWxkcmVuID0gcm93Q2hpbGQtPmNoaWxkcmVuKCk7CisgICAg
ICAgIGNvbnN0IEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYgY2hpbGRyZW4gPSByb3dDaGls
ZC0+Y2hpbGRyZW4oKTsKICAgICAgICAgc2l6ZV90IGxlbmd0aCA9IGNoaWxkcmVuLnNpemUoKTsK
ICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkKICAgICAgICAgICAg
IGFkZFJvd0Rlc2NlbmRhbnQoY2hpbGRyZW5baV0uZ2V0KCksIGFwcGVuZGVkUm93cywgY29sdW1u
Q291bnQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
QVJJQUdyaWRDZWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlBUklBR3JpZENlbGwuY3BwCShyZXZpc2lvbiAxNjE4NjYpCisrKyBT
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBUklBR3JpZENlbGwuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC04NCw3ICs4NCw3IEBAIHZvaWQgQWNjZXNzaWJpbGl0eUFSSUFH
cmlkQ2VsbDo6cm93SW5kZXgKICAgICAgICAgaWYgKCFjb2x1bW5Db3VudCkKICAgICAgICAgICAg
IHJldHVybjsKIAotICAgICAgICBBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3Igc2libGluZ3Mg
PSBwYXJlbnQtPmNoaWxkcmVuKCk7CisgICAgICAgIGNvbnN0IEFjY2Vzc2liaWxpdHlDaGlsZHJl
blZlY3RvciYgc2libGluZ3MgPSBwYXJlbnQtPmNoaWxkcmVuKCk7CiAgICAgICAgIHVuc2lnbmVk
IGNoaWxkcmVuU2l6ZSA9IHNpYmxpbmdzLnNpemUoKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBr
ID0gMDsgayA8IGNoaWxkcmVuU2l6ZTsgKytrKSB7CiAgICAgICAgICAgICBpZiAoc2libGluZ3Nb
a10uZ2V0KCkgPT0gdGhpcykgewpAQCAtMTA3LDcgKzEwNyw3IEBAIHZvaWQgQWNjZXNzaWJpbGl0
eUFSSUFHcmlkQ2VsbDo6Y29sdW1uSW4KICAgICBpZiAoIXBhcmVudC0+aXNUYWJsZVJvdygpICYm
ICFwYXJlbnQtPmlzQWNjZXNzaWJpbGl0eVRhYmxlKCkpCiAgICAgICAgIHJldHVybjsKIAotICAg
IEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBzaWJsaW5ncyA9IHBhcmVudC0+Y2hpbGRyZW4o
KTsKKyAgICBjb25zdCBBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImIHNpYmxpbmdzID0gcGFy
ZW50LT5jaGlsZHJlbigpOwogICAgIHVuc2lnbmVkIGNoaWxkcmVuU2l6ZSA9IHNpYmxpbmdzLnNp
emUoKTsKICAgICBmb3IgKHVuc2lnbmVkIGsgPSAwOyBrIDwgY2hpbGRyZW5TaXplOyArK2spIHsK
ICAgICAgICAgaWYgKHNpYmxpbmdzW2tdLmdldCgpID09IHRoaXMpIHsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUFSSUFHcmlkUm93LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBUklBR3Jp
ZFJvdy5jcHAJKHJldmlzaW9uIDE2MTg2NikKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvQWNjZXNzaWJpbGl0eUFSSUFHcmlkUm93LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI5LDcg
KzEyOSw3IEBAIEFjY2Vzc2liaWxpdHlPYmplY3QqIEFjY2Vzc2liaWxpdHlBUklBR3IKIAogQWNj
ZXNzaWJpbGl0eU9iamVjdCogQWNjZXNzaWJpbGl0eUFSSUFHcmlkUm93OjpoZWFkZXJPYmplY3Qo
KQogewotICAgIEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciByb3dDaGlsZHJlbiA9IGNoaWxk
cmVuKCk7CisgICAgY29uc3QgQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJiByb3dDaGlsZHJl
biA9IGNoaWxkcmVuKCk7CiAgICAgdW5zaWduZWQgY2hpbGRyZW5Db3VudCA9IHJvd0NoaWxkcmVu
LnNpemUoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY2hpbGRyZW5Db3VudDsgKytp
KSB7CiAgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNlbGwgPSByb3dDaGlsZHJlbltpXS5n
ZXQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUxp
c3RCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eUxpc3RCb3guY3BwCShyZXZpc2lvbiAxNjE4NjYpCisrKyBTb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlMaXN0Qm94LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtODMsNyArODMsNyBAQCB2b2lkIEFjY2Vzc2liaWxpdHlMaXN0Qm94OjphZGRDaGlsZHJlbigp
CiAgICAgfQogfQogCi12b2lkIEFjY2Vzc2liaWxpdHlMaXN0Qm94OjpzZXRTZWxlY3RlZENoaWxk
cmVuKEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYgY2hpbGRyZW4pCit2b2lkIEFjY2Vzc2li
aWxpdHlMaXN0Qm94OjpzZXRTZWxlY3RlZENoaWxkcmVuKGNvbnN0IEFjY2Vzc2liaWxpdHlDaGls
ZHJlblZlY3RvciYgY2hpbGRyZW4pCiB7CiAgICAgaWYgKCFjYW5TZXRTZWxlY3RlZENoaWxkcmVu
QXR0cmlidXRlKCkpCiAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eUxpc3RCb3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlMaXN0Qm94LmgJKHJldmlzaW9uIDE2MTg2
NikKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUxpc3RCb3gu
aAkod29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBi
b29sIGlzTGlzdEJveCgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIHRydWU7IH0KICAgICAKICAg
ICB2aXJ0dWFsIGJvb2wgY2FuU2V0U2VsZWN0ZWRDaGlsZHJlbkF0dHJpYnV0ZSgpIGNvbnN0IE9W
RVJSSURFOwotICAgIHZvaWQgc2V0U2VsZWN0ZWRDaGlsZHJlbihBY2Nlc3NpYmlsaXR5Q2hpbGRy
ZW5WZWN0b3ImKTsKKyAgICB2b2lkIHNldFNlbGVjdGVkQ2hpbGRyZW4oY29uc3QgQWNjZXNzaWJp
bGl0eUNoaWxkcmVuVmVjdG9yJik7CiAgICAgdmlydHVhbCBBY2Nlc3NpYmlsaXR5Um9sZSByb2xl
VmFsdWUoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBMaXN0Qm94Um9sZTsgfQogICAgICAgICAK
ICAgICB2aXJ0dWFsIHZvaWQgc2VsZWN0ZWRDaGlsZHJlbihBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5W
ZWN0b3ImKSBPVkVSUklERTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eU5vZGVPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuY3BwCShyZXZpc2lvbiAxNjE4NjYp
CisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzM1LDcgKzMzNSw3IEBAIHZvaWQgQWNjZXNzaWJpbGl0
eU5vZGVPYmplY3Q6Omluc2VydENoaWwKICAgICBjaGlsZC0+Y2xlYXJDaGlsZHJlbigpOwogICAg
IAogICAgIGlmIChjaGlsZC0+YWNjZXNzaWJpbGl0eUlzSWdub3JlZCgpKSB7Ci0gICAgICAgIEFj
Y2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBjaGlsZHJlbiA9IGNoaWxkLT5jaGlsZHJlbigpOwor
ICAgICAgICBjb25zdCBBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImIGNoaWxkcmVuID0gY2hp
bGQtPmNoaWxkcmVuKCk7CiAgICAgICAgIHNpemVfdCBsZW5ndGggPSBjaGlsZHJlbi5zaXplKCk7
CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCiAgICAgICAgICAg
ICBtX2NoaWxkcmVuLmluc2VydChpbmRleCArIGksIGNoaWxkcmVuW2ldKTsKQEAgLTkxMSw3ICs5
MTEsNyBAQCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBY2Nlc3NpYmlsaXR5Tm9kZU9iCiAgICAgaWYg
KCFpc1JhZGlvR3JvdXAoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBBY2Nlc3NpYmlsaXR5
T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgY2hpbGRyZW4gPSB0aGlzLT5jaGls
ZHJlbigpOworICAgIGNvbnN0IEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGls
ZHJlblZlY3RvciYgY2hpbGRyZW4gPSB0aGlzLT5jaGlsZHJlbigpOwogCiAgICAgLy8gRmluZCB0
aGUgY2hpbGQgcmFkaW8gYnV0dG9uIHRoYXQgaXMgc2VsZWN0ZWQgKGllLiB0aGUgaW50VmFsdWUg
PT0gMSkuCiAgICAgc2l6ZV90IHNpemUgPSBjaGlsZHJlbi5zaXplKCk7CkBAIC05MzIsNyArOTMy
LDcgQEAgQWNjZXNzaWJpbGl0eU9iamVjdCogQWNjZXNzaWJpbGl0eU5vZGVPYgogICAgIEFjY2Vz
c2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciB0YWJzOwogICAgIHRh
YkNoaWxkcmVuKHRhYnMpOwogCi0gICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0
eUNoaWxkcmVuVmVjdG9yIGNoaWxkcmVuID0gdGhpcy0+Y2hpbGRyZW4oKTsKKyAgICBjb25zdCBB
Y2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImIGNoaWxkcmVu
ID0gdGhpcy0+Y2hpbGRyZW4oKTsKICAgICBzaXplX3Qgc2l6ZSA9IHRhYnMuc2l6ZSgpOwogICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CiAgICAgICAgIEFjY2Vzc2liaWxp
dHlPYmplY3QqIG9iamVjdCA9IGNoaWxkcmVuW2ldLmdldCgpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCShyZXZp
c2lvbiAxNjE4NjYpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MTUsMTMgKzQxNSw5IEBAIHN0YXRpYyB2
b2lkIGFwcGVuZEFjY2Vzc2liaWxpdHlPYmplY3QoQWMKICAgICAKIHN0YXRpYyB2b2lkIGFwcGVu
ZENoaWxkcmVuVG9BcnJheShBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmplY3QsIGJvb2wgaXNGb3J3
YXJkLCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBzdGFydE9iamVjdCwgQWNjZXNzaWJpbGl0eU9iamVj
dDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJiByZXN1bHRzKQogewotICAgIEFjY2Vzc2li
aWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBzZWFyY2hDaGlsZHJlbjsK
ICAgICAvLyBBIHRhYmxlJ3MgY2hpbGRyZW4gaW5jbHVkZXMgZWxlbWVudHMgd2hvc2Ugb3duIGNo
aWxkcmVuIGFyZSBhbHNvIHRoZSB0YWJsZSdzIGNoaWxkcmVuIChkdWUgdG8gdGhlIHdheSB0aGUg
TWFjIGV4cG9zZXMgdGFibGVzKS4KICAgICAvLyBUaGUgcm93cyBmcm9tIHRoZSB0YWJsZSBzaG91
bGQgYmUgcXVlcmllZCwgc2luY2UgdGhvc2UgYXJlIGRpcmVjdCBkZXNjZW5kYW50cyBvZiB0aGUg
dGFibGUsIGFuZCB0aGV5IGNvbnRhaW4gY29udGVudC4KLSAgICBpZiAob2JqZWN0LT5pc0FjY2Vz
c2liaWxpdHlUYWJsZSgpKQotICAgICAgICBzZWFyY2hDaGlsZHJlbiA9IHRvQWNjZXNzaWJpbGl0
eVRhYmxlKG9iamVjdCktPnJvd3MoKTsKLSAgICBlbHNlCi0gICAgICAgIHNlYXJjaENoaWxkcmVu
ID0gb2JqZWN0LT5jaGlsZHJlbigpOworICAgIGNvbnN0IEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFj
Y2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYgc2VhcmNoQ2hpbGRyZW4gPSBvYmplY3QtPmlzQWNj
ZXNzaWJpbGl0eVRhYmxlKCkgPyB0b0FjY2Vzc2liaWxpdHlUYWJsZShvYmplY3QpLT5yb3dzKCkg
OiBvYmplY3QtPmNoaWxkcmVuKCk7CiAKICAgICBzaXplX3QgY2hpbGRyZW5TaXplID0gc2VhcmNo
Q2hpbGRyZW4uc2l6ZSgpOwogCkBAIC0xMzI0LDcgKzEzMjAsNyBAQCBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0KiBBY2Nlc3NpYmlsaXR5T2JqZWN0CiAKIHZvaWQgQWNjZXNzaWJpbGl0eU9iamVjdDo6YXJp
YVRyZWVSb3dzKEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYgcmVzdWx0KQogewotICAgIEFj
Y2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBheENoaWxkcmVuID0gY2hpbGRyZW4oKTsKKyAgICBj
b25zdCBBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImIGF4Q2hpbGRyZW4gPSBjaGlsZHJlbigp
OwogICAgIHVuc2lnbmVkIGNvdW50ID0gYXhDaGlsZHJlbi5zaXplKCk7CiAgICAgZm9yICh1bnNp
Z25lZCBrID0gMDsgayA8IGNvdW50OyArK2spIHsKICAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVj
dCogb2JqID0gYXhDaGlsZHJlbltrXS5nZXQoKTsKQEAgLTEzNDEsNyArMTMzNyw3IEBAIHZvaWQg
QWNjZXNzaWJpbGl0eU9iamVjdDo6YXJpYVRyZWVSb3dzKEEKIHZvaWQgQWNjZXNzaWJpbGl0eU9i
amVjdDo6YXJpYVRyZWVJdGVtQ29udGVudChBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImIHJl
c3VsdCkKIHsKICAgICAvLyBUaGUgQVJJQSB0cmVlIGl0ZW0gY29udGVudCBhcmUgdGhlIGl0ZW0g
dGhhdCBhcmUgbm90IG90aGVyIHRyZWUgaXRlbXMgb3IgdGhlaXIgY29udGFpbmluZyBncm91cHMu
Ci0gICAgQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIGF4Q2hpbGRyZW4gPSBjaGlsZHJlbigp
OworICAgIGNvbnN0IEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYgYXhDaGlsZHJlbiA9IGNo
aWxkcmVuKCk7CiAgICAgdW5zaWduZWQgY291bnQgPSBheENoaWxkcmVuLnNpemUoKTsKICAgICBm
b3IgKHVuc2lnbmVkIGsgPSAwOyBrIDwgY291bnQ7ICsraykgewogICAgICAgICBBY2Nlc3NpYmls
aXR5T2JqZWN0KiBvYmogPSBheENoaWxkcmVuW2tdLmdldCgpOwpAQCAtMTM1NSw3ICsxMzUxLDcg
QEAgdm9pZCBBY2Nlc3NpYmlsaXR5T2JqZWN0OjphcmlhVHJlZUl0ZW1DbwogCiB2b2lkIEFjY2Vz
c2liaWxpdHlPYmplY3Q6OmFyaWFUcmVlSXRlbURpc2Nsb3NlZFJvd3MoQWNjZXNzaWJpbGl0eUNo
aWxkcmVuVmVjdG9yJiByZXN1bHQpCiB7Ci0gICAgQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9y
IGF4Q2hpbGRyZW4gPSBjaGlsZHJlbigpOworICAgIGNvbnN0IEFjY2Vzc2liaWxpdHlDaGlsZHJl
blZlY3RvciYgYXhDaGlsZHJlbiA9IGNoaWxkcmVuKCk7CiAgICAgdW5zaWduZWQgY291bnQgPSBh
eENoaWxkcmVuLnNpemUoKTsKICAgICBmb3IgKHVuc2lnbmVkIGsgPSAwOyBrIDwgY291bnQ7ICsr
aykgewogICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmogPSBheENoaWxkcmVuW2tdLmdl
dCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVu
ZGVyT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCShyZXZpc2lvbiAxNjE4NjYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yMTU1LDcgKzIxNTUsNyBAQCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBB
Y2Nlc3NpYmlsaXR5UmVuZGVyCiAgICAgaWYgKCFwYXJlbnQpCiAgICAgICAgIHJldHVybiAwOwog
ICAgIAotICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3Rv
ciBjaGlsZHJlbiA9IHBhcmVudC0+Y2hpbGRyZW4oKTsKKyAgICBjb25zdCBBY2Nlc3NpYmlsaXR5
T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImIGNoaWxkcmVuID0gcGFyZW50LT5j
aGlsZHJlbigpOwogICAgIAogICAgIHVuc2lnbmVkIGNvdW50ID0gY2hpbGRyZW4uc2l6ZSgpOwog
ICAgIGZvciAodW5zaWduZWQgayA9IDA7IGsgPCBjb3VudDsgKytrKSB7CkBAIC0yODU5LDcgKzI4
NTksNyBAQCB2b2lkIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmFkZFJlbW90CiAgICAgcm9v
dC0+c2V0UGFyZW50KHRoaXMpOwogICAgIAogICAgIGlmIChyb290LT5hY2Nlc3NpYmlsaXR5SXNJ
Z25vcmVkKCkpIHsKLSAgICAgICAgQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIGNoaWxkcmVu
ID0gcm9vdC0+Y2hpbGRyZW4oKTsKKyAgICAgICAgY29uc3QgQWNjZXNzaWJpbGl0eUNoaWxkcmVu
VmVjdG9yJiBjaGlsZHJlbiA9IHJvb3QtPmNoaWxkcmVuKCk7CiAgICAgICAgIHVuc2lnbmVkIGxl
bmd0aCA9IGNoaWxkcmVuLnNpemUoKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGxlbmd0aDsgKytpKQogICAgICAgICAgICAgbV9jaGlsZHJlbi5hcHBlbmQoY2hpbGRyZW5baV0p
OwpAQCAtMjk0MSw3ICsyOTQxLDcgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojph
ZGRIaWRkZQogICAgICAgICAgICAgLy8gRmluZCBvdXQgd2hlcmUgdGhlIGxhc3QgcmVuZGVyIHNp
YmxpbmcgaXMgbG9jYXRlZCB3aXRoaW4gbV9jaGlsZHJlbi4KICAgICAgICAgICAgIEFjY2Vzc2li
aWxpdHlPYmplY3QqIGNoaWxkT2JqZWN0ID0gYXhPYmplY3RDYWNoZSgpLT5nZXQoY2hpbGQtPnJl
bmRlcmVyKCkpOwogICAgICAgICAgICAgaWYgKGNoaWxkT2JqZWN0ICYmIGNoaWxkT2JqZWN0LT5h
Y2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCkpIHsKLSAgICAgICAgICAgICAgICBBY2Nlc3NpYmlsaXR5
Q2hpbGRyZW5WZWN0b3IgY2hpbGRyZW4gPSBjaGlsZE9iamVjdC0+Y2hpbGRyZW4oKTsKKyAgICAg
ICAgICAgICAgICBjb25zdCBBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImIGNoaWxkcmVuID0g
Y2hpbGRPYmplY3QtPmNoaWxkcmVuKCk7CiAgICAgICAgICAgICAgICAgaWYgKGNoaWxkcmVuLnNp
emUoKSkKICAgICAgICAgICAgICAgICAgICAgY2hpbGRPYmplY3QgPSBjaGlsZHJlbi5sYXN0KCku
Z2V0KCk7CiAgICAgICAgICAgICAgICAgZWxzZQpAQCAtMzA4Miw3ICszMDgyLDcgQEAgdm9pZCBB
Y2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjphcmlhTGlzdAogewogICAgIGJvb2wgaXNNdWx0aSA9
IGlzTXVsdGlTZWxlY3RhYmxlKCk7CiAKLSAgICBBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3Ig
Y2hpbGRPYmplY3RzID0gY2hpbGRyZW4oKTsKKyAgICBjb25zdCBBY2Nlc3NpYmlsaXR5Q2hpbGRy
ZW5WZWN0b3ImIGNoaWxkT2JqZWN0cyA9IGNoaWxkcmVuKCk7CiAgICAgdW5zaWduZWQgY2hpbGRy
ZW5TaXplID0gY2hpbGRPYmplY3RzLnNpemUoKTsKICAgICBmb3IgKHVuc2lnbmVkIGsgPSAwOyBr
IDwgY2hpbGRyZW5TaXplOyArK2spIHsKICAgICAgICAgLy8gRXZlcnkgY2hpbGQgc2hvdWxkIGhh
dmUgYXJpYS1yb2xlIG9wdGlvbiwgYW5kIGlmIHNvLCBjaGVjayBmb3Igc2VsZWN0ZWQgYXR0cmli
dXRlL3N0YXRlLgpAQCAtMzExMiw3ICszMTEyLDcgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5UmVuZGVy
T2JqZWN0OjphcmlhTGlzdAogICAgIGlmICghaGFzQ2hpbGRyZW4oKSkKICAgICAgICAgYWRkQ2hp
bGRyZW4oKTsKICAgICAKLSAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hp
bGRyZW5WZWN0b3IgY2hpbGRyZW4gPSB0aGlzLT5jaGlsZHJlbigpOworICAgIGNvbnN0IEFjY2Vz
c2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYgY2hpbGRyZW4gPSB0
aGlzLT5jaGlsZHJlbigpOwogICAgIHNpemVfdCBzaXplID0gY2hpbGRyZW4uc2l6ZSgpOwogICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CiAgICAgICAgIGlmICghY2hpbGRy
ZW5baV0tPmlzT2ZmU2NyZWVuKCkpCkBAIC0zMTM2LDcgKzMxMzYsNyBAQCB2b2lkIEFjY2Vzc2li
aWxpdHlSZW5kZXJPYmplY3Q6OnRhYkNoaWxkCiB7CiAgICAgQVNTRVJUKHJvbGVWYWx1ZSgpID09
IFRhYkxpc3RSb2xlKTsKICAgICAKLSAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmls
aXR5Q2hpbGRyZW5WZWN0b3IgY2hpbGRyZW4gPSB0aGlzLT5jaGlsZHJlbigpOworICAgIGNvbnN0
IEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYgY2hpbGRy
ZW4gPSB0aGlzLT5jaGlsZHJlbigpOwogICAgIHNpemVfdCBzaXplID0gY2hpbGRyZW4uc2l6ZSgp
OwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CiAgICAgICAgIGlmIChj
aGlsZHJlbltpXS0+aXNUYWJJdGVtKCkpCkBAIC0zNTcxLDcgKzM1NzEsNyBAQCBBY2Nlc3NpYmls
aXR5T2JqZWN0KiBBY2Nlc3NpYmlsaXR5UmVuZGVyCiAgICAgaWYgKCFpc01hdGhSb290KCkpCiAg
ICAgICAgIHJldHVybiAwOwogICAgIAotICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2li
aWxpdHlDaGlsZHJlblZlY3RvciBjaGlsZHJlbiA9IHRoaXMtPmNoaWxkcmVuKCk7CisgICAgY29u
c3QgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJiBjaGls
ZHJlbiA9IHRoaXMtPmNoaWxkcmVuKCk7CiAgICAgaWYgKGNoaWxkcmVuLnNpemUoKSA8IDEpCiAg
ICAgICAgIHJldHVybiAwOwogICAgIApAQCAtMzU4NCw3ICszNTg0LDcgQEAgQWNjZXNzaWJpbGl0
eU9iamVjdCogQWNjZXNzaWJpbGl0eVJlbmRlcgogICAgIGlmICghaXNNYXRoUm9vdCgpKQogICAg
ICAgICByZXR1cm4gMDsKICAgICAKLSAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmls
aXR5Q2hpbGRyZW5WZWN0b3IgY2hpbGRyZW4gPSB0aGlzLT5jaGlsZHJlbigpOworICAgIGNvbnN0
IEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYgY2hpbGRy
ZW4gPSB0aGlzLT5jaGlsZHJlbigpOwogICAgIGlmIChjaGlsZHJlbi5zaXplKCkgIT0gMikKICAg
ICAgICAgcmV0dXJuIDA7CiAKQEAgLTM1OTgsNyArMzU5OCw3IEBAIEFjY2Vzc2liaWxpdHlPYmpl
Y3QqIEFjY2Vzc2liaWxpdHlSZW5kZXIKICAgICBpZiAoIWlzTWF0aEZyYWN0aW9uKCkpCiAgICAg
ICAgIHJldHVybiAwOwogICAgIAotICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxp
dHlDaGlsZHJlblZlY3RvciBjaGlsZHJlbiA9IHRoaXMtPmNoaWxkcmVuKCk7CisgICAgY29uc3Qg
QWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJiBjaGlsZHJl
biA9IHRoaXMtPmNoaWxkcmVuKCk7CiAgICAgaWYgKGNoaWxkcmVuLnNpemUoKSAhPSAyKQogICAg
ICAgICByZXR1cm4gMDsKICAgICAKQEAgLTM2MTAsNyArMzYxMCw3IEBAIEFjY2Vzc2liaWxpdHlP
YmplY3QqIEFjY2Vzc2liaWxpdHlSZW5kZXIKICAgICBpZiAoIWlzTWF0aEZyYWN0aW9uKCkpCiAg
ICAgICAgIHJldHVybiAwOwogCi0gICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0
eUNoaWxkcmVuVmVjdG9yIGNoaWxkcmVuID0gdGhpcy0+Y2hpbGRyZW4oKTsKKyAgICBjb25zdCBB
Y2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImIGNoaWxkcmVu
ID0gdGhpcy0+Y2hpbGRyZW4oKTsKICAgICBpZiAoY2hpbGRyZW4uc2l6ZSgpICE9IDIpCiAgICAg
ICAgIHJldHVybiAwOwogICAgIApAQCAtMzYyMiw3ICszNjIyLDcgQEAgQWNjZXNzaWJpbGl0eU9i
amVjdCogQWNjZXNzaWJpbGl0eVJlbmRlcgogICAgIGlmICghaXNNYXRoVW5kZXJPdmVyKCkgfHwg
IW5vZGUoKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgCi0gICAgQWNjZXNzaWJpbGl0eUNoaWxk
cmVuVmVjdG9yIGNoaWxkcmVuID0gdGhpcy0+Y2hpbGRyZW4oKTsKKyAgICBjb25zdCBBY2Nlc3Np
YmlsaXR5Q2hpbGRyZW5WZWN0b3ImIGNoaWxkcmVuID0gdGhpcy0+Y2hpbGRyZW4oKTsKICAgICBp
ZiAoY2hpbGRyZW4uc2l6ZSgpIDwgMikKICAgICAgICAgcmV0dXJuIDA7CiAgICAgCkBAIC0zNjM3
LDcgKzM2MzcsNyBAQCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBY2Nlc3NpYmlsaXR5UmVuZGVyCiAg
ICAgaWYgKCFpc01hdGhVbmRlck92ZXIoKSB8fCAhbm9kZSgpKQogICAgICAgICByZXR1cm4gMDsK
ICAgICAKLSAgICBBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgY2hpbGRyZW4gPSB0aGlzLT5j
aGlsZHJlbigpOworICAgIGNvbnN0IEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYgY2hpbGRy
ZW4gPSB0aGlzLT5jaGlsZHJlbigpOwogICAgIGlmIChjaGlsZHJlbi5zaXplKCkgPCAyKQogICAg
ICAgICByZXR1cm4gMDsKICAgICAKQEAgLTM2NTQsNyArMzY1NCw3IEBAIEFjY2Vzc2liaWxpdHlP
YmplY3QqIEFjY2Vzc2liaWxpdHlSZW5kZXIKICAgICBpZiAoIWlzTWF0aFN1YnNjcmlwdFN1cGVy
c2NyaXB0KCkgJiYgIWlzTWF0aFVuZGVyT3ZlcigpICYmICFpc01hdGhNdWx0aXNjcmlwdCgpKQog
ICAgICAgICByZXR1cm4gMDsKICAgICAKLSAgICBBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3Ig
Y2hpbGRyZW4gPSB0aGlzLT5jaGlsZHJlbigpOworICAgIGNvbnN0IEFjY2Vzc2liaWxpdHlDaGls
ZHJlblZlY3RvciYgY2hpbGRyZW4gPSB0aGlzLT5jaGlsZHJlbigpOwogICAgIC8vIFRoZSBiYXNl
IG9iamVjdCBpbiBxdWVzdGlvbiBpcyBhbHdheXMgdGhlIGZpcnN0IGNoaWxkLgogICAgIGlmIChj
aGlsZHJlbi5zaXplKCkgPiAwKQogICAgICAgICByZXR1cm4gY2hpbGRyZW5bMF0uZ2V0KCk7CkBA
IC0zNjY3LDcgKzM2NjcsNyBAQCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBY2Nlc3NpYmlsaXR5UmVu
ZGVyCiAgICAgaWYgKCFpc01hdGhTdWJzY3JpcHRTdXBlcnNjcmlwdCgpIHx8ICFub2RlKCkpCiAg
ICAgICAgIHJldHVybiAwOwogICAgIAotICAgIEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBj
aGlsZHJlbiA9IHRoaXMtPmNoaWxkcmVuKCk7CisgICAgY29uc3QgQWNjZXNzaWJpbGl0eUNoaWxk
cmVuVmVjdG9yJiBjaGlsZHJlbiA9IHRoaXMtPmNoaWxkcmVuKCk7CiAgICAgaWYgKGNoaWxkcmVu
LnNpemUoKSA8IDIpCiAgICAgICAgIHJldHVybiAwOwogCkBAIC0zNjgyLDcgKzM2ODIsNyBAQCBB
Y2Nlc3NpYmlsaXR5T2JqZWN0KiBBY2Nlc3NpYmlsaXR5UmVuZGVyCiAgICAgaWYgKCFpc01hdGhT
dWJzY3JpcHRTdXBlcnNjcmlwdCgpIHx8ICFub2RlKCkpCiAgICAgICAgIHJldHVybiAwOwogICAg
IAotICAgIEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBjaGlsZHJlbiA9IHRoaXMtPmNoaWxk
cmVuKCk7CisgICAgY29uc3QgQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJiBjaGlsZHJlbiA9
IHRoaXMtPmNoaWxkcmVuKCk7CiAgICAgdW5zaWduZWQgY291bnQgPSBjaGlsZHJlbi5zaXplKCk7
CiAKICAgICBpZiAoY291bnQgPj0gMiAmJiBub2RlKCktPmhhc1RhZ05hbWUoTWF0aE1MTmFtZXM6
Om1zdXBUYWcpKQpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5VGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QWNjZXNzaWJpbGl0eVRhYmxlLmNwcAkocmV2aXNpb24gMTYxODY2KQorKysgU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01MDksNyArNTA5LDcgQEAgQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbCogQWNjZXNzaWJpbGl0eVRh
YgogICAgIC8vIEl0ZXJhdGUgYmFja3dhcmRzIHRocm91Z2ggdGhlIHJvd3MgaW4gY2FzZSB0aGUg
ZGVzaXJlZCBjZWxsIGhhcyBhIHJvd3NwYW4gYW5kIGV4aXN0cyBpbiBhIHByZXZpb3VzIHJvdy4K
ICAgICBmb3IgKHVuc2lnbmVkIHJvd0luZGV4Q291bnRlciA9IHJvdyArIDE7IHJvd0luZGV4Q291
bnRlciA+IDA7IC0tcm93SW5kZXhDb3VudGVyKSB7CiAgICAgICAgIHVuc2lnbmVkIHJvd0luZGV4
ID0gcm93SW5kZXhDb3VudGVyIC0gMTsKLSAgICAgICAgQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVj
dG9yIGNoaWxkcmVuID0gbV9yb3dzW3Jvd0luZGV4XS0+Y2hpbGRyZW4oKTsKKyAgICAgICAgY29u
c3QgQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJiBjaGlsZHJlbiA9IG1fcm93c1tyb3dJbmRl
eF0tPmNoaWxkcmVuKCk7CiAgICAgICAgIC8vIFNpbmNlIHNvbWUgY2VsbHMgbWF5IGhhdmUgY29s
c3BhbnMsIHdlIGhhdmUgdG8gY2hlY2sgdGhlIGFjdHVhbCByYW5nZSBvZiBlYWNoCiAgICAgICAg
IC8vIGNlbGwgdG8gZGV0ZXJtaW5lIHdoaWNoIGlzIHRoZSByaWdodCBvbmUuCiAgICAgICAgIGZv
ciAodW5zaWduZWQgY29sSW5kZXhDb3VudGVyID0gc3RkOjptaW4oc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KGNoaWxkcmVuLnNpemUoKSksIGNvbHVtbiArIDEpOyBjb2xJbmRleENvdW50ZXIgPiAwOyAt
LWNvbEluZGV4Q291bnRlcikgewpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5VGFibGVDb2x1bW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlQ29sdW1uLmNwcAkocmV2aXNpb24gMTYx
ODY2KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVD
b2x1bW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MCw3ICs4MCw3IEBAIEFjY2Vzc2liaWxpdHlP
YmplY3QqIEFjY2Vzc2liaWxpdHlUYWJsZUMKICAgICAKICAgICBBY2Nlc3NpYmlsaXR5VGFibGUq
IHBhcmVudFRhYmxlID0gdG9BY2Nlc3NpYmlsaXR5VGFibGUobV9wYXJlbnQpOwogICAgIGlmIChw
YXJlbnRUYWJsZS0+aXNBcmlhVGFibGUoKSkgewotICAgICAgICBBY2Nlc3NpYmlsaXR5Q2hpbGRy
ZW5WZWN0b3Igcm93Q2hpbGRyZW4gPSBjaGlsZHJlbigpOworICAgICAgICBjb25zdCBBY2Nlc3Np
YmlsaXR5Q2hpbGRyZW5WZWN0b3ImIHJvd0NoaWxkcmVuID0gY2hpbGRyZW4oKTsKICAgICAgICAg
dW5zaWduZWQgY2hpbGRyZW5Db3VudCA9IHJvd0NoaWxkcmVuLnNpemUoKTsKICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGNoaWxkcmVuQ291bnQ7ICsraSkgewogICAgICAgICAgICAg
QWNjZXNzaWJpbGl0eU9iamVjdCogY2VsbCA9IHJvd0NoaWxkcmVuW2ldLmdldCgpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVSb3cuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRh
YmxlUm93LmNwcAkocmV2aXNpb24gMTYxODY2KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVSb3cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTcsNyAr
MTE3LDcgQEAgQWNjZXNzaWJpbGl0eU9iamVjdCogQWNjZXNzaWJpbGl0eVRhYmxlUgogICAgIGlm
ICghbV9yZW5kZXJlciB8fCAhbV9yZW5kZXJlci0+aXNUYWJsZVJvdygpKQogICAgICAgICByZXR1
cm4gMDsKICAgICAKLSAgICBBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3Igcm93Q2hpbGRyZW4g
PSBjaGlsZHJlbigpOworICAgIGNvbnN0IEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYgcm93
Q2hpbGRyZW4gPSBjaGlsZHJlbigpOwogICAgIGlmICghcm93Q2hpbGRyZW4uc2l6ZSgpKQogICAg
ICAgICByZXR1cm4gMDsKICAgICAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
YXRrL0FYT2JqZWN0Q2FjaGVBdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvYXRrL0FYT2JqZWN0Q2FjaGVBdGsuY3BwCShyZXZpc2lvbiAxNjE4NjYpCisr
KyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9BWE9iamVjdENhY2hlQXRrLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTAzLDcgKzEwMyw3IEBAIHN0YXRpYyBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0KiBnZXRMaXN0T2JqZWMKICAgICAvLyBGb3IgbWVudSBsaXN0cyB3ZSBuZWVkIHRvIHJldHVy
biB0aGUgZmlyc3QgYWNjZXNzaWJsZSBjaGlsZCwKICAgICAvLyB3aXRoIHJvbGUgTWVudUxpc3RQ
b3B1cFJvbGUsIHNpbmNlIHRoYXQncyB0aGUgb25lIGhvbGRpbmcgdGhlIGxpc3QKICAgICAvLyBv
ZiBpdGVtcyB3aXRoIHJvbGUgTWVudUxpc3RPcHRpb25Sb2xlLgotICAgIEFjY2Vzc2liaWxpdHlP
YmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBjaGlsZHJlbiA9IG9iamVjdC0+Y2hp
bGRyZW4oKTsKKyAgICBjb25zdCBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hp
bGRyZW5WZWN0b3ImIGNoaWxkcmVuID0gb2JqZWN0LT5jaGlsZHJlbigpOwogICAgIGlmICghY2hp
bGRyZW4uc2l6ZSgpKQogICAgICAgICByZXR1cm4gMDsKIApAQCAtMTQ3LDcgKzE0Nyw3IEBAIHN0
YXRpYyB2b2lkIG5vdGlmeUNoaWxkcmVuU2VsZWN0aW9uQ2hhbmcKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZl
Y3RvciBpdGVtcyA9IGxpc3RPYmplY3QtPmNoaWxkcmVuKCk7CisgICAgY29uc3QgQWNjZXNzaWJp
bGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJiBpdGVtcyA9IGxpc3RPYmpl
Y3QtPmNoaWxkcmVuKCk7CiAgICAgaWYgKGNoYW5nZWRJdGVtSW5kZXggPCAwIHx8IGNoYW5nZWRJ
dGVtSW5kZXggPj0gc3RhdGljX2Nhc3Q8aW50PihpdGVtcy5zaXplKCkpKQogICAgICAgICByZXR1
cm47CiAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogaXRlbSA9IGl0ZW1zLmF0KGNoYW5nZWRJdGVt
SW5kZXgpLmdldCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2Vi
S2l0QWNjZXNzaWJsZUludGVyZmFjZUh5cGVydGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZUh5cGVy
dGV4dC5jcHAJKHJldmlzaW9uIDE2MTg2NikKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VIeXBlcnRleHQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00MSw3ICs0MSw3IEBAIHN0YXRpYyBBdGtIeXBlcmxpbmsqIHdlYmtpdEFjY2Vzc2li
bGVIeXAKICAgICBnX3JldHVybl92YWxfaWZfZmFpbChBVEtfSFlQRVJURVhUKGh5cGVydGV4dCks
IDApOwogICAgIHJldHVyblZhbElmV2ViS2l0QWNjZXNzaWJsZUlzSW52YWxpZChXRUJLSVRfQUND
RVNTSUJMRShoeXBlcnRleHQpLCAwKTsKIAotICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vz
c2liaWxpdHlDaGlsZHJlblZlY3RvciBjaGlsZHJlbiA9IGNvcmUoaHlwZXJ0ZXh0KS0+Y2hpbGRy
ZW4oKTsKKyAgICBjb25zdCBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRy
ZW5WZWN0b3ImIGNoaWxkcmVuID0gY29yZShoeXBlcnRleHQpLT5jaGlsZHJlbigpOwogICAgIGlm
IChpbmRleCA8IDAgfHwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGluZGV4KSA+PSBjaGlsZHJlbi5z
aXplKCkpCiAgICAgICAgIHJldHVybiAwOwogCkBAIC02OSw3ICs2OSw3IEBAIHN0YXRpYyBnaW50
IHdlYmtpdEFjY2Vzc2libGVIeXBlcnRleHRHZXQKICAgICBnX3JldHVybl92YWxfaWZfZmFpbChB
VEtfSFlQRVJURVhUKGh5cGVydGV4dCksIDApOwogICAgIHJldHVyblZhbElmV2ViS2l0QWNjZXNz
aWJsZUlzSW52YWxpZChXRUJLSVRfQUNDRVNTSUJMRShoeXBlcnRleHQpLCAwKTsKIAotICAgIEFj
Y2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBjaGlsZHJlbiA9
IGNvcmUoaHlwZXJ0ZXh0KS0+Y2hpbGRyZW4oKTsKKyAgICBjb25zdCBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImIGNoaWxkcmVuID0gY29yZShoeXBlcnRl
eHQpLT5jaGlsZHJlbigpOwogICAgIGlmICghY2hpbGRyZW4uc2l6ZSgpKQogICAgICAgICByZXR1
cm4gMDsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNj
ZXNzaWJsZUludGVyZmFjZVNlbGVjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVNlbGVjdGlvbi5j
cHAJKHJldmlzaW9uIDE2MTg2NikKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRr
L1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VTZWxlY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02NSw3ICs2NSw3IEBAIHN0YXRpYyBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBsaXN0T2JqZWN0Rm8K
ICAgICAvLyBGb3IgbWVudSBsaXN0cyB3ZSBuZWVkIHRvIHJldHVybiB0aGUgZmlyc3QgYWNjZXNz
aWJsZSBjaGlsZCwKICAgICAvLyB3aXRoIHJvbGUgTWVudUxpc3RQb3B1cFJvbGUsIHNpbmNlIHRo
YXQncyB0aGUgb25lIGhvbGRpbmcgdGhlIGxpc3QKICAgICAvLyBvZiBpdGVtcyB3aXRoIHJvbGUg
TWVudUxpc3RPcHRpb25Sb2xlLgotICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxp
dHlDaGlsZHJlblZlY3RvciBjaGlsZHJlbiA9IGNvcmVTZWxlY3Rpb24tPmNoaWxkcmVuKCk7Cisg
ICAgY29uc3QgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9y
JiBjaGlsZHJlbiA9IGNvcmVTZWxlY3Rpb24tPmNoaWxkcmVuKCk7CiAgICAgaWYgKCFjaGlsZHJl
bi5zaXplKCkpCiAgICAgICAgIHJldHVybiAwOwogCkBAIC04Nyw3ICs4Nyw3IEBAIHN0YXRpYyBB
Y2Nlc3NpYmlsaXR5T2JqZWN0KiBvcHRpb25Gcm9tTGkKICAgICBpZiAoIWxpc3RPYmplY3QpCiAg
ICAgICAgIHJldHVybiAwOwogCi0gICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0
eUNoaWxkcmVuVmVjdG9yIG9wdGlvbnMgPSBsaXN0T2JqZWN0LT5jaGlsZHJlbigpOworICAgIGNv
bnN0IEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYgb3B0
aW9ucyA9IGxpc3RPYmplY3QtPmNoaWxkcmVuKCk7CiAgICAgaWYgKGluZGV4IDwgc3RhdGljX2Nh
c3Q8Z2ludD4ob3B0aW9ucy5zaXplKCkpKQogICAgICAgICByZXR1cm4gb3B0aW9ucy5hdChpbmRl
eCkuZ2V0KCk7CiAKQEAgLTI1MCw4ICsyNTAsOCBAQCBzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0QWNj
ZXNzaWJsZVNlbGVjdGlvCiAgICAgaWYgKCFjb3JlU2VsZWN0aW9uIHx8ICFjb3JlU2VsZWN0aW9u
LT5pc011bHRpU2VsZWN0YWJsZSgpKQogICAgICAgICByZXR1cm4gRkFMU0U7CiAKLSAgICBBY2Nl
c3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgY2hpbGRyZW4gPSBj
b3JlU2VsZWN0aW9uLT5jaGlsZHJlbigpOwogICAgIGlmIChjb3JlU2VsZWN0aW9uLT5pc0xpc3RC
b3goKSkgeworICAgICAgICBjb25zdCBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5
Q2hpbGRyZW5WZWN0b3ImIGNoaWxkcmVuID0gY29yZVNlbGVjdGlvbi0+Y2hpbGRyZW4oKTsKICAg
ICAgICAgQWNjZXNzaWJpbGl0eUxpc3RCb3gqIGxpc3RCb3ggPSB0b0FjY2Vzc2liaWxpdHlMaXN0
Qm94KGNvcmVTZWxlY3Rpb24pOwogICAgICAgICBsaXN0Qm94LT5zZXRTZWxlY3RlZENoaWxkcmVu
KGNoaWxkcmVuKTsKICAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNo
aWxkcmVuVmVjdG9yIHNlbGVjdGVkSXRlbXM7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlV3JhcHBlckF0ay5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZVdyYXBwZXJB
dGsuY3BwCShyZXZpc2lvbiAxNjE4NjYpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L2F0ay9XZWJLaXRBY2Nlc3NpYmxlV3JhcHBlckF0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMy
MCw3ICszMjAsNyBAQCBzdGF0aWMgQXRrT2JqZWN0KiB3ZWJraXRBY2Nlc3NpYmxlR2V0UGFyCiAK
IHN0YXRpYyBnaW50IGdldE5DaGlsZHJlbkZvclRhYmxlKEFjY2Vzc2liaWxpdHlPYmplY3QqIGNv
cmVPYmplY3QpCiB7Ci0gICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxk
cmVuVmVjdG9yIHRhYmxlQ2hpbGRyZW4gPSBjb3JlT2JqZWN0LT5jaGlsZHJlbigpOworICAgIGNv
bnN0IEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYgdGFi
bGVDaGlsZHJlbiA9IGNvcmVPYmplY3QtPmNoaWxkcmVuKCk7CiAgICAgc2l6ZV90IHRhYmxlQ2hp
bGRyZW5Db3VudCA9IHRhYmxlQ2hpbGRyZW4uc2l6ZSgpOwogICAgIHNpemVfdCBjZWxsc0NvdW50
ID0gMDsKIApAQCAtMzUzLDcgKzM1Myw3IEBAIHN0YXRpYyBnaW50IHdlYmtpdEFjY2Vzc2libGVH
ZXROQ2hpbGRyZW4KIAogc3RhdGljIEFjY2Vzc2liaWxpdHlPYmplY3QqIGdldENoaWxkRm9yVGFi
bGUoQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9iamVjdCwgZ2ludCBpbmRleCkKIHsKLSAgICBB
Y2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgdGFibGVDaGls
ZHJlbiA9IGNvcmVPYmplY3QtPmNoaWxkcmVuKCk7CisgICAgY29uc3QgQWNjZXNzaWJpbGl0eU9i
amVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJiB0YWJsZUNoaWxkcmVuID0gY29yZU9i
amVjdC0+Y2hpbGRyZW4oKTsKICAgICBzaXplX3QgdGFibGVDaGlsZHJlbkNvdW50ID0gdGFibGVD
aGlsZHJlbi5zaXplKCk7CiAgICAgc2l6ZV90IGNlbGxzQ291bnQgPSAwOwogCkBAIC0zNjEsNyAr
MzYxLDcgQEAgc3RhdGljIEFjY2Vzc2liaWxpdHlPYmplY3QqIGdldENoaWxkRm9yVAogICAgIHNp
emVfdCBjdXJyZW50ID0gc3RhdGljX2Nhc3Q8c2l6ZV90PihpbmRleCk7CiAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHRhYmxlQ2hpbGRyZW5Db3VudDsgKytpKSB7CiAgICAgICAgIGlmICh0
YWJsZUNoaWxkcmVuW2ldLT5pc1RhYmxlUm93KCkpIHsKLSAgICAgICAgICAgIEFjY2Vzc2liaWxp
dHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciByb3dDaGlsZHJlbiA9IHRhYmxl
Q2hpbGRyZW5baV0tPmNoaWxkcmVuKCk7CisgICAgICAgICAgICBjb25zdCBBY2Nlc3NpYmlsaXR5
T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImIHJvd0NoaWxkcmVuID0gdGFibGVD
aGlsZHJlbltpXS0+Y2hpbGRyZW4oKTsKICAgICAgICAgICAgIHNpemVfdCByb3dDaGlsZHJlbkNv
dW50ID0gcm93Q2hpbGRyZW4uc2l6ZSgpOwogICAgICAgICAgICAgaWYgKGN1cnJlbnQgPCBjZWxs
c0NvdW50ICsgcm93Q2hpbGRyZW5Db3VudCkKICAgICAgICAgICAgICAgICByZXR1cm4gcm93Q2hp
bGRyZW4uYXQoY3VycmVudCAtIGNlbGxzQ291bnQpLmdldCgpOwpAQCAtMzkyLDcgKzM5Miw3IEBA
IHN0YXRpYyBBdGtPYmplY3QqIHdlYmtpdEFjY2Vzc2libGVSZWZDaGkKICAgICBpZiAoY29yZU9i
amVjdC0+aXNBY2Nlc3NpYmlsaXR5VGFibGUoKSkKICAgICAgICAgY29yZUNoaWxkID0gZ2V0Q2hp
bGRGb3JUYWJsZShjb3JlT2JqZWN0LCBpbmRleCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIEFjY2Vz
c2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBjaGlsZHJlbiA9IGNv
cmVPYmplY3QtPmNoaWxkcmVuKCk7CisgICAgICAgIGNvbnN0IEFjY2Vzc2liaWxpdHlPYmplY3Q6
OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYgY2hpbGRyZW4gPSBjb3JlT2JqZWN0LT5jaGls
ZHJlbigpOwogICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGluZGV4KSA+PSBjaGls
ZHJlbi5zaXplKCkpCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgY29yZUNoaWxkID0g
Y2hpbGRyZW4uYXQoaW5kZXgpLmdldCgpOwpAQCAtNDE4LDcgKzQxOCw3IEBAIHN0YXRpYyBnaW50
IGdldEluZGV4SW5QYXJlbnRGb3JDZWxsSW5Sb3cKICAgICBpZiAoIWdyYW5kUGFyZW50KQogICAg
ICAgICByZXR1cm4gLTE7CiAKLSAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5
Q2hpbGRyZW5WZWN0b3Igcm93cyA9IGdyYW5kUGFyZW50LT5jaGlsZHJlbigpOworICAgIGNvbnN0
IEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYgcm93cyA9
IGdyYW5kUGFyZW50LT5jaGlsZHJlbigpOwogICAgIHNpemVfdCByb3dzQ291bnQgPSByb3dzLnNp
emUoKTsKICAgICBzaXplX3QgcHJldmlvdXNDZWxsc0NvdW50ID0gMDsKIApAQCAtNDI3LDcgKzQy
Nyw3IEBAIHN0YXRpYyBnaW50IGdldEluZGV4SW5QYXJlbnRGb3JDZWxsSW5Sb3cKICAgICAgICAg
aWYgKCFyb3dzW2ldLT5pc1RhYmxlUm93KCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAg
ICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgY2Vs
bHMgPSByb3dzW2ldLT5jaGlsZHJlbigpOworICAgICAgICBjb25zdCBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImIGNlbGxzID0gcm93c1tpXS0+Y2hpbGRy
ZW4oKTsKICAgICAgICAgc2l6ZV90IGNlbGxzQ291bnQgPSBjZWxscy5zaXplKCk7CiAKICAgICAg
ICAgaWYgKHJvd3NbaV0gPT0gcGFyZW50KSB7CkBAIC0xMTMzLDcgKzExMzMsNyBAQCBzdGF0aWMg
Z3VpbnQxNiBnZXRJbnRlcmZhY2VNYXNrRnJvbU9iamVjCiAgICAgICAgICAgICAvLyBBZGQgdGhl
IFRFWFQgaW50ZXJmYWNlIGZvciBsaXN0IGl0ZW1zIHdob3NlCiAgICAgICAgICAgICAvLyBmaXJz
dCBhY2Nlc3NpYmxlIGNoaWxkIGhhcyBhIHRleHQgcmVuZGVyZXIKICAgICAgICAgICAgIGlmIChy
b2xlID09IExpc3RJdGVtUm9sZSkgewotICAgICAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlPYmpl
Y3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBjaGlsZHJlbiA9IGNvcmVPYmplY3QtPmNo
aWxkcmVuKCk7CisgICAgICAgICAgICAgICAgY29uc3QgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNj
ZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJiBjaGlsZHJlbiA9IGNvcmVPYmplY3QtPmNoaWxkcmVu
KCk7CiAgICAgICAgICAgICAgICAgaWYgKGNoaWxkcmVuLnNpemUoKSkgewogICAgICAgICAgICAg
ICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBheFJlbmRlckNoaWxkID0gY2hpbGRyZW4uYXQo
MCkuZ2V0KCk7CiAgICAgICAgICAgICAgICAgICAgIGludGVyZmFjZU1hc2sgfD0gZ2V0SW50ZXJm
YWNlTWFza0Zyb21PYmplY3QoYXhSZW5kZXJDaGlsZCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmls
aXR5T2JqZWN0V3JhcHBlcklPUy5tbQkocmV2aXNpb24gMTYxODY2KQorKysgU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1MubW0J
KHdvcmtpbmcgY29weSkKQEAgLTM0Nyw3ICszNDcsNyBAQCAtIChpZClhY2Nlc3NpYmlsaXR5RWxl
bWVudEF0SW5kZXg6KE5TSW50CiAgICAgaWYgKFtzZWxmIGlzQXR0YWNobWVudF0pCiAgICAgICAg
IHJldHVybiBbW3NlbGYgYXR0YWNobWVudFZpZXddIGFjY2Vzc2liaWxpdHlFbGVtZW50QXRJbmRl
eDppbmRleF07CiAgICAgCi0gICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNo
aWxkcmVuVmVjdG9yIGNoaWxkcmVuID0gbV9vYmplY3QtPmNoaWxkcmVuKCk7CisgICAgY29uc3Qg
QWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJiBjaGlsZHJl
biA9IG1fb2JqZWN0LT5jaGlsZHJlbigpOwogICAgIGlmIChzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
aW5kZXgpID49IGNoaWxkcmVuLnNpemUoKSkKICAgICAgICAgcmV0dXJuIG5pbDsKICAgICAKQEAg
LTM2Nyw3ICszNjcsNyBAQCAtIChOU0ludGVnZXIpaW5kZXhPZkFjY2Vzc2liaWxpdHlFbGVtZW50
CiAgICAgaWYgKFtzZWxmIGlzQXR0YWNobWVudF0pCiAgICAgICAgIHJldHVybiBbW3NlbGYgYXR0
YWNobWVudFZpZXddIGluZGV4T2ZBY2Nlc3NpYmlsaXR5RWxlbWVudDplbGVtZW50XTsKICAgICAK
LSAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgY2hp
bGRyZW4gPSBtX29iamVjdC0+Y2hpbGRyZW4oKTsKKyAgICBjb25zdCBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImIGNoaWxkcmVuID0gbV9vYmplY3QtPmNo
aWxkcmVuKCk7CiAgICAgdW5zaWduZWQgY291bnQgPSBjaGlsZHJlbi5zaXplKCk7CiAgICAgZm9y
ICh1bnNpZ25lZCBrID0gMDsgayA8IGNvdW50OyArK2spIHsKICAgICAgICAgQWNjZXNzaWJpbGl0
eU9iamVjdFdyYXBwZXIqIHdyYXBwZXIgPSBjaGlsZHJlbltrXS0+d3JhcHBlcigpOwpAQCAtMTA3
Myw3ICsxMDczLDcgQEAgLSAoQk9PTCljb250YWluc1VubmF0dXJhbGx5U2VnbWVudGVkQ2hpbAog
ICAgIGlmIChyb2xlICE9IExpbmtSb2xlICYmIHJvbGUgIT0gV2ViQ29yZUxpbmtSb2xlKQogICAg
ICAgICByZXR1cm4gTk87CiAgICAgCi0gICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJp
bGl0eUNoaWxkcmVuVmVjdG9yIGNoaWxkcmVuID0gbV9vYmplY3QtPmNoaWxkcmVuKCk7CisgICAg
Y29uc3QgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJiBj
aGlsZHJlbiA9IG1fb2JqZWN0LT5jaGlsZHJlbigpOwogICAgIHVuc2lnbmVkIGNoaWxkcmVuU2l6
ZSA9IGNoaWxkcmVuLnNpemUoKTsKIAogICAgIC8vIElmIHRoZXJlJ3Mgb25seSBvbmUgY2hpbGQs
IHRoZW4gaXQgZG9lc24ndCBoYXZlIHNlZ21lbnRlZCBjaGlsZHJlbi4gCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1h
Yy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJB
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbQkocmV2aXNpb24gMTYxODY2KQorKysgU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXJNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTIzNzcsNyArMjM3Nyw3IEBAIC0gKGlkKWFjY2Vz
c2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTooTlNTdHIKICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNF
cXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eUNvbnRlbnRzQXR0cmlidXRlXSkgewogICAgICAg
ICAvLyBUaGUgY29udGVudHMgb2YgYSB0YWIgbGlzdCBhcmUgYWxsIHRoZSBjaGlsZHJlbiBleGNl
cHQgdGhlIHRhYnMuCiAgICAgICAgIGlmIChtX29iamVjdC0+aXNUYWJMaXN0KCkpIHsKLSAgICAg
ICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBj
aGlsZHJlbiA9IG1fb2JqZWN0LT5jaGlsZHJlbigpOworICAgICAgICAgICAgY29uc3QgQWNjZXNz
aWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJiBjaGlsZHJlbiA9IG1f
b2JqZWN0LT5jaGlsZHJlbigpOwogICAgICAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNj
ZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIHRhYnNDaGlsZHJlbjsKICAgICAgICAgICAgIG1fb2Jq
ZWN0LT50YWJDaGlsZHJlbih0YWJzQ2hpbGRyZW4pOwogICAgICAgICAgICAgCkBAIC0yMzg5LDcg
KzIzODksNyBAQCAtIChpZClhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6KE5TU3RyCiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gY29udmVydFRvTlNBcnJheShjb250ZW50cyk7
CiAgICAgICAgIH0gZWxzZSBpZiAobV9vYmplY3QtPmlzU2Nyb2xsVmlldygpKSB7Ci0gICAgICAg
ICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgY2hp
bGRyZW4gPSBtX29iamVjdC0+Y2hpbGRyZW4oKTsKKyAgICAgICAgICAgIGNvbnN0IEFjY2Vzc2li
aWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYgY2hpbGRyZW4gPSBtX29i
amVjdC0+Y2hpbGRyZW4oKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgLy8gQSBzY3JvbGxW
aWV3J3MgY29udGVudHMgYXJlIGV2ZXJ5dGhpbmcgZXhjZXB0IHRoZSBzY3JvbGwgYmFycy4KICAg
ICAgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3Rv
ciBjb250ZW50czsK
</data>
<flag name="review"
          id="244858"
          type_id="1"
          status="+"
          setter="kling"
    />
          </attachment>
      

    </bug>

</bugzilla>