<?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>136993</bug_id>
          
          <creation_ts>2014-09-21 22:09:24 -0700</creation_ts>
          <short_desc>bmalloc: Allocation should be more precise</short_desc>
          <delta_ts>2014-09-23 11:24:10 -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="Geoffrey Garen">ggaren</reporter>
          <assigned_to name="Geoffrey Garen">ggaren</assigned_to>
          <cc>barraclough</cc>
    
    <cc>benjamin</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>kling</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1036429</commentid>
    <comment_count>0</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2014-09-21 22:09:24 -0700</bug_when>
    <thetext>bmalloc: Allocation should be more precise</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1036431</commentid>
    <comment_count>1</comment_count>
      <attachid>238450</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2014-09-21 23:01:30 -0700</bug_when>
    <thetext>Created attachment 238450
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1036432</commentid>
    <comment_count>2</comment_count>
      <attachid>238451</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2014-09-21 23:02:49 -0700</bug_when>
    <thetext>Created attachment 238451
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1036433</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-09-21 23:03:52 -0700</bug_when>
    <thetext>Attachment 238451 did not pass style-queue:


ERROR: Source/bmalloc/bmalloc/Heap.cpp:237:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/bmalloc/bmalloc/Heap.cpp:262:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 2 in 14 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1036448</commentid>
    <comment_count>4</comment_count>
      <attachid>238455</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2014-09-22 00:29:26 -0700</bug_when>
    <thetext>Created attachment 238455
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1036449</commentid>
    <comment_count>5</comment_count>
      <attachid>238456</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2014-09-22 00:30:19 -0700</bug_when>
    <thetext>Created attachment 238456
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1036450</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-09-22 00:31:30 -0700</bug_when>
    <thetext>Attachment 238456 did not pass style-queue:


ERROR: Source/bmalloc/bmalloc/Heap.cpp:237:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/bmalloc/bmalloc/Heap.cpp:262:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 2 in 16 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1036452</commentid>
    <comment_count>7</comment_count>
      <attachid>238457</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2014-09-22 00:43:34 -0700</bug_when>
    <thetext>Created attachment 238457
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1036453</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-09-22 00:46:33 -0700</bug_when>
    <thetext>Attachment 238457 did not pass style-queue:


ERROR: Source/bmalloc/bmalloc/Heap.cpp:237:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/bmalloc/bmalloc/Heap.cpp:262:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 2 in 16 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1036645</commentid>
    <comment_count>9</comment_count>
      <attachid>238511</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2014-09-22 18:37:57 -0700</bug_when>
    <thetext>Created attachment 238511
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1036646</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-09-22 18:39:08 -0700</bug_when>
    <thetext>Attachment 238511 did not pass style-queue:


ERROR: Source/bmalloc/bmalloc/Heap.cpp:237:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/bmalloc/bmalloc/Heap.cpp:262:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 2 in 16 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1036739</commentid>
    <comment_count>11</comment_count>
      <attachid>238457</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2014-09-23 09:26:47 -0700</bug_when>
    <thetext>Comment on attachment 238457
Patch

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

r+ with discussed scavenge changes.

&gt; Source/bmalloc/ChangeLog:74
&gt; +        (bmalloc::Heap::allocateMediumLineSlowCase): Deleted. Foled into the

Folded?

&gt; Source/bmalloc/bmalloc/Heap.cpp:190
&gt; +void Heap::refillMediumBumpRangeCache(std::lock_guard&lt;StaticMutex&gt;&amp; lock, size_t sizeClass, MediumBumpRangeCache&amp; rangeCache)

Much duplication! so copy!

&gt; Source/bmalloc/bmalloc/Heap.cpp:201
&gt; +    for (size_t lineNumber = 0; lineNumber &lt; end; ++lineNumber) {

Could be worth a comment on these two loops – outer loop finds new disjoint ranges, inner loop coalesces additional lines into a range.

&gt; Source/bmalloc/bmalloc/Heap.cpp:211
&gt; +        while (++lineNumber &lt; end) {

Could be worth a comment on these two loops – outer loop finds new disjoint ranges, inner loop coalesces additional lines into a range.

&gt; Source/bmalloc/bmalloc/Heap.cpp:250
&gt; +MediumPage* Heap::allocateMediumPage(std::lock_guard&lt;StaticMutex&gt;&amp; lock, size_t sizeClass)

Much duplication! so copy!

&gt; Source/bmalloc/bmalloc/Heap.cpp:297
&gt; +void Heap::deallocateMediumLine(std::lock_guard&lt;StaticMutex&gt;&amp; lock, MediumLine* line)

Much duplication! so copy!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1036769</commentid>
    <comment_count>12</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2014-09-23 11:24:10 -0700</bug_when>
    <thetext>Committed r173881: &lt;http://trac.webkit.org/changeset/173881&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>238450</attachid>
            <date>2014-09-21 23:01:30 -0700</date>
            <delta_ts>2014-09-21 23:03:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-136993-20140921230129.patch</filename>
            <type>text/plain</type>
            <size>48535</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9ibWFsbG9jL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1h
bGxvYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3MzgwNCkKKysrIFNvdXJjZS9ibWFsbG9jL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyMiBAQAorMjAxNC0wOS0yMSAgR2VvZmZy
ZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29tPgorCisgICAgICAgIGJtYWxsb2M6IEFsbG9jYXRp
b24gc2hvdWxkIGJlIG1vcmUgcHJlY2lzZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTM2OTkzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgMTMlIHJlZHVjdGlvbiBpbiBoZWFwIHNpemUgb24gdGhlIE1hbGxv
Y0JlbmNoICpfbWVtb3J5X3dhcm5pbmcgYmVuY2htYXJrcy4KKworICAgICAgICBUaGlzIHBhdGNo
IHRlYWNoZXMgdGhlIGFsbG9jYXRvciB0byBtZXJnZSBhZGphY2VudCBmcmVlIGxpbmVzIGludG8g
YQorICAgICAgICBzaW5nbGUgYWxsb2NhdGFibGUgcmFuZ2UuIFRoaXMgYWxsb3dzIHVzIHRvIHNo
cmluayB0aGUgc2l6ZSBvZiBhbgorICAgICAgICBpbmRpdmlkdWFsIGxpbmUgd2l0aG91dCBpbmNy
ZWFzaW5nIGZyYWdtZW50YXRpb24gb3IgdGhlIHJhdGUgb2YgYWxsb2NhdG9yCisgICAgICAgIHNs
b3cgcGF0aHMuCisKKyAgICAgICAgV2UnbGwgb25seSB0YWtlIG1vcmUgc2xvdyBwYXRocyB3aGVu
IGF2YWlsYWJsZSBtZW1vcnkgaXMgc3BhcnNlLCB3aGljaAorICAgICAgICBpcyBleGFjdGx5IHdo
ZW4gaXQncyB3b3J0aCBpdC4gV2hlbiBhdmFpbGFibGUgbWVtb3J5IGlzIGRlbnNlLCB3ZSdsbAor
ICAgICAgICB0YWtlIGZld2VyIHNsb3cgcGF0aHMuCisKKyAgICAgICAgKiBibWFsbG9jLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYm1hbGxvYy9BbGdvcml0aG0uaDoKKyAg
ICAgICAgKGJtYWxsb2M6OmRpdmlkZVJvdW5kaW5nVXApOgorCisgICAgICAgICogYm1hbGxvYy9B
bGxvY2F0b3IuY3BwOgorICAgICAgICAoYm1hbGxvYzo6QWxsb2NhdG9yOjpBbGxvY2F0b3IpOiBV
cGRhdGVkIGZvciBpbnRlcmZhY2UgY2hhbmdlcy4KKworICAgICAgICAoYm1hbGxvYzo6QWxsb2Nh
dG9yOjpzY2F2ZW5nZSk6IFNjYXZlbmdlIGJ5IG9iamVjdCBpbnN0ZWFkIG9mIGJ5IGxpbmUuCisg
ICAgICAgIE5vdyB0aGF0IHdlIG1lcmdlIGxpbmVzLCBpdCdzIG5vdCBjb252ZW5pZW50IHRvIHNj
YXZlbmdlIGJ5IGxpbmUuCisKKyAgICAgICAgKGJtYWxsb2M6OkFsbG9jYXRvcjo6YWxsb2NhdGVT
bWFsbEJ1bXBSYW5nZSk6CisgICAgICAgIChibWFsbG9jOjpBbGxvY2F0b3I6OmFsbG9jYXRlTWVk
aXVtQnVtcFJhbmdlKTogQWxsb2NhdGUgd2hvbGUgcmFuZ2VzCisgICAgICAgIGluc3RlYWQgb2Yg
aW5kaXZpZHVhbCBsaW5lcy4KKworICAgICAgICAoYm1hbGxvYzo6QWxsb2NhdG9yOjphbGxvY2F0
ZVNsb3dDYXNlKToKKyAgICAgICAgKGJtYWxsb2M6OkFsbG9jYXRvcjo6YWxsb2NhdGVTbWFsbExp
bmUpOiBEZWxldGVkLgorICAgICAgICAoYm1hbGxvYzo6QWxsb2NhdG9yOjphbGxvY2F0ZU1lZGl1
bUxpbmUpOiBEZWxldGVkLgorICAgICAgICAoYm1hbGxvYzo6QWxsb2NhdG9yOjphbGxvY2F0ZU1l
ZGl1bSk6IERlbGV0ZWQuCisgICAgICAgICogYm1hbGxvYy9BbGxvY2F0b3IuaDoKKyAgICAgICAg
KGJtYWxsb2M6OkFsbG9jYXRvcjo6YWxsb2NhdGVGYXN0Q2FzZSk6IEZvbGRlZCBtZWRpdW0gYWxs
b2NhdGlvbnMKKyAgICAgICAgaW50byB0aGUgc3RhbmRhcmQgZmFzdCBwYXRoIHdpdGggc21hbGwg
YWxsb2NhdGlvbnMuIFNpbmNlIGEgQnVtcEFsbG9jYXRvcgorICAgICAgICBqdXN0IGFsbG9jYXRl
cyBvdXQgb2YgYW4gYXJiaXRyYXJ5IHJhbmdlLCBpdCBkb2Vzbid0IG5lZWQgdG8gZGlzdGluZ3Vp
c2gKKyAgICAgICAgYmV0d2VlbiBzbWFsbCBhbmQgbWVkaXVtIGxpbmVzLgorCisgICAgICAgICog
Ym1hbGxvYy9CdW1wQWxsb2NhdG9yLmg6CisgICAgICAgIChibWFsbG9jOjpCdW1wQWxsb2NhdG9y
OjpzaXplKToKKyAgICAgICAgKGJtYWxsb2M6OkJ1bXBBbGxvY2F0b3I6OkJ1bXBBbGxvY2F0b3Ip
OgorICAgICAgICAoYm1hbGxvYzo6QnVtcEFsbG9jYXRvcjo6aW5pdCk6CisgICAgICAgIChibWFs
bG9jOjpCdW1wQWxsb2NhdG9yOjpyZWZpbGwpOgorICAgICAgICAoYm1hbGxvYzo6QnVtcEFsbG9j
YXRvcjo6bGluZSk6IERlbGV0ZWQuIE5vIG5lZWQgdG8gdHJhY2sgbGluZSBpbmZvcm1hdGlvbgor
ICAgICAgICBhbnltb3JlOiB0aGUgaGVhcCBqdXN0IGdpdmVzIHVzIGEgcG9pbnRlciBhbmQgYSBw
cmUtY29tcHV0ZWQgbnVtYmVyIG9mCisgICAgICAgIG9iamVjdHMsIGFuZCB3ZSBhbGxvY2F0ZSB0
aGVtLgorCisgICAgICAgICogYm1hbGxvYy9EZWFsbG9jYXRvci5jcHA6CisgICAgICAgIChibWFs
bG9jOjpEZWFsbG9jYXRvcjo6cHJvY2Vzc09iamVjdExvZyk6IFVwZGF0ZWQgZm9yIGludGVyZmFj
ZSBjaGFuZ2VzLgorCisgICAgICAgICogYm1hbGxvYy9IZWFwLmNwcDoKKyAgICAgICAgKGJtYWxs
b2M6OkhlYXA6OkhlYXApOgorICAgICAgICAoYm1hbGxvYzo6SGVhcDo6aW5pdGlhbGl6ZUxpbmVN
ZXRhZGF0YSk6IFByZS1jb21wdXRlIHByZWNpc2UgbWV0YWRhdGEKKyAgICAgICAgZGV0YWlsaW5n
IHdoZXJlIGFsbCBvYmplY3RzIHdpbGwgbGllIGluIG1lbW9yeS4gQWZ0ZXIgd2UgbWVyZ2UgdHdv
IGxpbmVzLAorICAgICAgICB3ZSBtaWdodCBhbGxvY2F0ZSBhbiBvYmplY3QgdGhhdCBzcGFucyBm
cm9tIG9uZSBsaW5lIHRvIHRoZSBuZXh0LiBUaGlzCisgICAgICAgIG1ldGFkYXRhIGRldGFpbHMg
d2hpY2ggYml0cyBvZiBtZW1vcnkgb3ZlcmxhcCBpbiB0aGF0IHdheSwgYW5kIGhvdyB0aGV5Cisg
ICAgICAgIG92ZXJsYXAuCisKKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OnJlZmlsbFNtYWxsQnVt
cFJhbmdlQ2FjaGUpOgorICAgICAgICAoYm1hbGxvYzo6SGVhcDo6cmVmaWxsTWVkaXVtQnVtcFJh
bmdlQ2FjaGUpOiBTY2FuIGEgd2hvbGUgcGFnZSBhdCBhIHRpbWUsCisgICAgICAgIGFuZCBtZXJn
ZSBhZGphY2VudCBmcmVlIGxpbmVzIGludG8gQnVtcFJhbmdlcy4KKworICAgICAgICAoYm1hbGxv
Yzo6SGVhcDo6YWxsb2NhdGVTbWFsbFBhZ2UpOgorICAgICAgICAoYm1hbGxvYzo6SGVhcDo6YWxs
b2NhdGVNZWRpdW1QYWdlKToKKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OmRlYWxsb2NhdGVTbWFs
bExpbmUpOgorICAgICAgICAoYm1hbGxvYzo6SGVhcDo6ZGVhbGxvY2F0ZU1lZGl1bUxpbmUpOiBU
cmFjayBwYWdlcyByYXRoZXIgdGhhbiBsaW5lcywKKyAgICAgICAgc2luY2Ugd2Ugc2NhbiBmb3Ig
ZnJlZSBtZW1vcnkgYSBwYWdlIGF0IGEgdGltZS4KKworICAgICAgICAoYm1hbGxvYzo6SGVhcDo6
YWxsb2NhdGVTbWFsbExpbmVTbG93Q2FzZSk6IERlbGV0ZWQuCisgICAgICAgIChibWFsbG9jOjpI
ZWFwOjphbGxvY2F0ZU1lZGl1bUxpbmVTbG93Q2FzZSk6IERlbGV0ZWQuIEZvbGVkIGludG8gdGhl
CisgICAgICAgIGZhc3QgcGF0aC4KKworICAgICAgICAqIGJtYWxsb2MvSGVhcC5oOgorICAgICAg
ICAoYm1hbGxvYzo6SGVhcDo6ZGVyZWZTbWFsbExpbmUpOgorICAgICAgICAoYm1hbGxvYzo6SGVh
cDo6ZGVyZWZNZWRpdW1MaW5lKToKKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OmRlYWxsb2NhdGVT
bWFsbExpbmUpOiBEZWxldGVkLgorICAgICAgICAoYm1hbGxvYzo6SGVhcDo6YWxsb2NhdGVTbWFs
bExpbmUpOiBEZWxldGVkLgorICAgICAgICAoYm1hbGxvYzo6SGVhcDo6ZGVhbGxvY2F0ZU1lZGl1
bUxpbmUpOiBEZWxldGVkLgorICAgICAgICAoYm1hbGxvYzo6SGVhcDo6YWxsb2NhdGVNZWRpdW1M
aW5lKTogRGVsZXRlZC4gVXBkYXRlZCBmb3IgaW50ZXJmYWNlIGNoYW5nZXMuCisKKyAgICAgICAg
KiBibWFsbG9jL0xpbmUuaDoKKyAgICAgICAgKGJtYWxsb2M6OkxpbmU8VHJhaXRzPjo6cmVmKToK
KyAgICAgICAgKGJtYWxsb2M6OkxpbmU8VHJhaXRzPjo6ZGVyZWYpOgorICAgICAgICAoYm1hbGxv
Yzo6TGluZTxUcmFpdHM+Ojpjb25jdXJyZW50UmVmKTogRGVsZXRlZC4gV2UgZG9uJ3QgcGFzcyBh
IGRlcmVmQ291bnQKKyAgICAgICAgYW55bW9yZSwgc2luY2Ugd2Ugb25seSBldmVyIGRlcmVmIGJ5
IDEgbm93LgorCisgICAgICAgICogYm1hbGxvYy9NZWRpdW1BbGxvY2F0b3IuaDoKKyAgICAgICAg
KGJtYWxsb2M6Ok1lZGl1bUFsbG9jYXRvcjo6aXNOdWxsKTogRGVsZXRlZC4KKyAgICAgICAgKGJt
YWxsb2M6Ok1lZGl1bUFsbG9jYXRvcjo6TWVkaXVtQWxsb2NhdG9yKTogRGVsZXRlZC4KKyAgICAg
ICAgKGJtYWxsb2M6Ok1lZGl1bUFsbG9jYXRvcjo6bGluZSk6IERlbGV0ZWQuCisgICAgICAgIChi
bWFsbG9jOjpNZWRpdW1BbGxvY2F0b3I6OmFsbG9jYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKGJt
YWxsb2M6Ok1lZGl1bUFsbG9jYXRvcjo6ZGVyZWZDb3VudCk6IERlbGV0ZWQuCisgICAgICAgIChi
bWFsbG9jOjpNZWRpdW1BbGxvY2F0b3I6OnJlZmlsbCk6IERlbGV0ZWQuCisgICAgICAgIChibWFs
bG9jOjpNZWRpdW1BbGxvY2F0b3I6OmNsZWFyKTogRGVsZXRlZC4gRGVsZXRlZCBzb21lIGNvZGUg
dGhhdCdzCisgICAgICAgIGJlZW4gZGVhZCBmb3IgYSB3aGlsZSwgc2luY2UgaXQgZG9lc24ndCBi
dWlsZCBhbnltb3JlIHdpdGggdGhpcyBwYXRjaC4KKworICAgICAgICAqIGJtYWxsb2MvUGFnZS5o
OgorICAgICAgICAoYm1hbGxvYzo6UGFnZTo6c2l6ZUNsYXNzKToKKyAgICAgICAgKGJtYWxsb2M6
OlBhZ2U6OnNldFNpemVDbGFzcyk6CisgICAgICAgIChibWFsbG9jOjpQYWdlOjpzbWFsbFNpemVD
bGFzcyk6IERlbGV0ZWQuCisgICAgICAgIChibWFsbG9jOjpQYWdlOjpzZXRTbWFsbFNpemVDbGFz
cyk6IERlbGV0ZWQuIFJlbmFtZWQgc2V0U21hbGxTaXplQ2xhc3MKKyAgICAgICAgdG8gc2l6ZUNs
YXNzLCBzaW5jZSB3ZSB1c2UgaXQgZm9yIG1lZGl1bSBzaXplcyB0b28uCisKKyAgICAgICAgKiBi
bWFsbG9jL1NpemVzLmg6CisgICAgICAgIChibWFsbG9jOjpTaXplczo6c2l6ZUNsYXNzKToKKyAg
ICAgICAgKGJtYWxsb2M6OlNpemVzOjpvYmplY3RTaXplKTogU2hyYW5rIGxpbmUgc2l6ZXMgdG8g
c2F2ZSBtZW1vcnkuCisKKyAgICAgICAgKGJtYWxsb2M6OlNpemVzOjpzbWFsbFNpemVDbGFzc0Zv
cik6IERlbGV0ZWQuCisgICAgICAgIChibWFsbG9jOjpTaXplczo6bWVkaXVtU2l6ZUNsYXNzRm9y
KTogRGVsZXRlZC4KKworICAgICAgICAqIGJtYWxsb2MvYm1hbGxvYy5oOgorICAgICAgICAoYm1h
bGxvYzo6YXBpOjpyZWFsbG9jKTogTm93IHRoYXQgd2UgaGF2ZSBwcmVjaXNlIG9iamVjdHMgc2l6
ZXMsIHJlYWxsb2MKKyAgICAgICAgY2FuIGJlIGEgYml0IG1vcmUgcHJlY2lzZS4gSXQgYWxzbyBo
YXMgdG8gYmUsIHNpbmNlIHdlIGNhbid0IGd1YXJhbnRlZQorICAgICAgICB0aGF0IGFuIG9iamVj
dCBlbmRzIGF0IHRoZSBlbmQgb2YgYSBsaW5lIGFueW1vcmUuCisKIDIwMTQtMDktMTkgIERhbmll
bCBCYXRlcyAgPGRhYmF0ZXNAYXBwbGUuY29tPgogCiAgICAgICAgIEFsd2F5cyBhc3N1bWUgaW50
ZXJuYWwgU0RLIHdoZW4gYnVpbGRpbmcgY29uZmlndXJhdGlvbiBQcm9kdWN0aW9uCkluZGV4OiBT
b3VyY2UvYm1hbGxvYy9ibWFsbG9jLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShy
ZXZpc2lvbiAxNzM2NzMpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTExLDYgKzExLDggQEAKIAkJMTQwMDI3NEEx
OEY4OUMyMzAwMTE1Qzk3IC8qIFZNSGVhcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMTQ0RjdCRkMxOEJGQzUxNzAwMzUzN0YzIC8qIFZNSGVhcC5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTE0MDAyNzRC
MThGODlDM0QwMDExNUM5NyAvKiBCb3VuZGFyeVRhZ0lubGluZXMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0MTA1RTdCMThEQkQ3QUYwMDNBMTA2RSAv
KiBCb3VuZGFyeVRhZ0lubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkxNDAwMjc0QzE4Rjg5QzNEMDAxMTVDOTcgLyogU2VncmVnYXRlZEZy
ZWVMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAx
NDZCRUUxRTE4Qzg0MUM1MDAwMkQ1QTIgLyogU2VncmVnYXRlZEZyZWVMaXN0LmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMTQwRkEwMDMxOUNFNDI5
QzAwRkZEM0M4IC8qIEJ1bXBSYW5nZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMTQwRkEwMDIxOUNFNDI5QzAwRkZEM0M4IC8qIEJ1bXBSYW5nZS5oICov
OyB9OworCQkxNDBGQTAwNTE5Q0U0QjY4MDBGRkQzQzggLyogTGluZU1ldGFkYXRhLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDBGQTAwNDE5Q0U0QjY4
MDBGRkQzQzggLyogTGluZU1ldGFkYXRhLmggKi87IH07CiAJCTE0M0NCODFDMTkwMjJCQzkwMEIx
NkE0NSAvKiBTdGF0aWNNdXRleC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAxNDNDQjgxQTE5MDIyQkM5MDBCMTZBNDUgLyogU3RhdGljTXV0ZXguY3Bw
ICovOyB9OwogCQkxNDNDQjgxRDE5MDIyQkM5MDBCMTZBNDUgLyogU3RhdGljTXV0ZXguaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0M0NCODFCMTkwMjJC
QzkwMEIxNkE0NSAvKiBTdGF0aWNNdXRleC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTE0NDhDMzAwMThGMzc1NDYwMDUwMjgzOSAvKiBtYm1hbGxv
Yy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDQ4
QzJGRjE4RjM3NTQzMDA1MDI4MzkgLyogbWJtYWxsb2MuY3BwICovOyB9OwpAQCAtMjYsNyArMjgs
NiBAQAogCQkxNERENzg5ODE4RjQ4RDRBMDA5NTA3MDIgLyogQWxsb2NhdG9yLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDVGNjg1NjE3OURDOENBMDBE
NjU1OTggLyogQWxsb2NhdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJMTRERDc4OTkxOEY0OEQ0QTAwOTUwNzAyIC8qIENhY2hlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDQ0NjlFNTE3QTQ2QkZF
MDBGOUVBMUQgLyogQ2FjaGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQkxNERENzg5QTE4RjQ4RDRBMDA5NTA3MDIgLyogRGVhbGxvY2F0b3IuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0NUY2ODVBMTc5
REM5MDIwMEQ2NTU5OCAvKiBEZWFsbG9jYXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTE0REQ3ODlCMThGNDhENEEwMDk1MDcwMiAvKiBNZWRp
dW1BbGxvY2F0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDE0MTNFNDcwMThBMDY2MTcwMDU0NkQ2OCAvKiBNZWRpdW1BbGxvY2F0b3IuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxNERENzg5QzE4RjQ4
RDRBMDA5NTA3MDIgLyogQnVtcEFsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMTQxM0U0NjIxODlERTFDRDAwNTQ2RDY4IC8qIEJ1bXBBbGxv
Y2F0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkxNERENzhCNDE4RjQ4RDZCMDA5NTA3MDIgLyogQ2h1bmsuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0N0FBQTk0MThDRTVDQTYwMDIyMDFFNCAvKiBD
aHVuay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTE0REQ3OEI1MThGNDhENkIwMDk1MDcwMiAvKiBMaW5lLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNERBMzIwNzE4ODVGOUU2MDA3MjY5RTAgLyogTGlu
ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC03
MiwxMiArNzMsMTMgQEAKIC8qIEVuZCBQQlhDb250YWluZXJJdGVtUHJveHkgc2VjdGlvbiAqLwog
CiAvKiBCZWdpbiBQQlhGaWxlUmVmZXJlbmNlIHNlY3Rpb24gKi8KKwkJMTQwRkEwMDIxOUNFNDI5
QzAwRkZEM0M4IC8qIEJ1bXBSYW5nZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBCdW1wUmFuZ2UuaDsgcGF0aCA9IGJtYWxsb2MvQnVtcFJhbmdlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTE0MEZBMDA0MTlDRTRCNjgwMEZGRDNDOCAvKiBMaW5lTWV0YWRhdGEu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTGluZU1ldGFkYXRhLmg7IHBhdGgg
PSBibWFsbG9jL0xpbmVNZXRhZGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkx
NDEwNUU3QjE4REJEN0FGMDAzQTEwNkUgLyogQm91bmRhcnlUYWdJbmxpbmVzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEJvdW5kYXJ5VGFnSW5saW5lcy5oOyBwYXRoID0gYm1h
bGxvYy9Cb3VuZGFyeVRhZ0lubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MTQxMDVFODMxOEUxNDM3NDAwM0ExMDZFIC8qIE9iamVjdFR5cGUuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gT2JqZWN0VHlwZS5jcHA7IHBhdGggPSBibWFsbG9jL09i
amVjdFR5cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDEzRTQ2MDE4OURD
RTFFMDA1NDZENjggLyogSW5saW5lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IElubGluZS5oOyBwYXRoID0gYm1hbGxvYy9JbmxpbmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMTQxM0U0NjIxODlERTFDRDAwNTQ2RDY4IC8qIEJ1bXBBbGxvY2F0b3IuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBsaW5lRW5kaW5nID0gMDsgbmFtZSA9IEJ1bXBBbGxvY2F0
b3IuaDsgcGF0aCA9IGJtYWxsb2MvQnVtcEFsbG9jYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkxNDEzRTQ2ODE4OUVFREU0MDA1NDZENjggLyogQkFzc2VydC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCQXNzZXJ0Lmg7IHBhdGggPSBibWFsbG9jL0JBc3Nl
cnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMTQxM0U0NzAxOEEwNjYxNzAwNTQ2
RDY4IC8qIE1lZGl1bUFsbG9jYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBNZWRpdW1BbGxvY2F0b3IuaDsgcGF0aCA9IGJtYWxsb2MvTWVkaXVtQWxsb2NhdG9yLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0MTdGNjQ1MThCNTRBNzAwMDc2RkEzRiAvKiBC
ZWdpblRhZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCZWdpblRhZy5oOyBw
YXRoID0gYm1hbGxvYy9CZWdpblRhZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkx
NDE3RjY0NjE4QjU0QTcwMDA3NkZBM0YgLyogRW5kVGFnLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IEVuZFRhZy5oOyBwYXRoID0gYm1hbGxvYy9FbmRUYWcuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQxN0Y2NEYxOEI3MjgwQzAwNzZGQTNGIC8qIFN5c2NhbGwu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gU3lzY2FsbC5oOyBwYXRoID0gYm1h
bGxvYy9TeXNjYWxsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMzUsNyArMjM3
LDYgQEAKIAkJCQkxNDQ0NjlFNTE3QTQ2QkZFMDBGOUVBMUQgLyogQ2FjaGUuaCAqLywKIAkJCQkx
NDVGNjg1OTE3OURDOTAyMDBENjU1OTggLyogRGVhbGxvY2F0b3IuY3BwICovLAogCQkJCTE0NUY2
ODVBMTc5REM5MDIwMEQ2NTU5OCAvKiBEZWFsbG9jYXRvci5oICovLAotCQkJCTE0MTNFNDcwMThB
MDY2MTcwMDU0NkQ2OCAvKiBNZWRpdW1BbGxvY2F0b3IuaCAqLywKIAkJCQkxNDEzRTQ2MjE4OURF
MUNEMDA1NDZENjggLyogQnVtcEFsbG9jYXRvci5oICovLAogCQkJKTsKIAkJCW5hbWUgPSBjYWNo
ZTsKQEAgLTI0NCw4ICsyNDUsMTAgQEAKIAkJMTREOURCNEUxN0YyODY2RTAwRUFBQjc5IC8qIGhl
YXAgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTE0MEZB
MDAyMTlDRTQyOUMwMEZGRDNDOCAvKiBCdW1wUmFuZ2UuaCAqLywKIAkJCQkxNERBMzIwRTE4ODc1
RDlGMDA3MjY5RTAgLyogSGVhcC5jcHAgKi8sCiAJCQkJMTREQTMyMEMxODg3NUIwOTAwNzI2OUUw
IC8qIEhlYXAuaCAqLywKKwkJCQkxNDBGQTAwNDE5Q0U0QjY4MDBGRkQzQzggLyogTGluZU1ldGFk
YXRhLmggKi8sCiAJCQkJMTQxMDVFODMxOEUxNDM3NDAwM0ExMDZFIC8qIE9iamVjdFR5cGUuY3Bw
ICovLAogCQkJCTE0ODU2NTYwMThBNDNEQkEwMEVENjk0MiAvKiBPYmplY3RUeXBlLmggKi8sCiAJ
CQkJMTQ1RjY4NzQxNzlERjg0MTAwRDY1NTk4IC8qIFNpemVzLmggKi8sCkBAIC0yOTYsNiArMjk5
LDcgQEAKIAkJCQkxNEM5MTlDOTE4RkNDNTlGMDAyOERCNDMgLyogQlBsYXRmb3JtLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkxNERENzg4QzE4RjQ4Q0FFMDA5NTA3MDIgLyogTGFyZ2VDaHVuay5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMTRERDc4OTIxOEY0OENGQzAwOTUwNzAyIC8qIEVuZFRhZy5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMTQwRkEwMDUxOUNFNEI2ODAwRkZEM0M4IC8qIExpbmVNZXRhZGF0
YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRERDc4Q0MxOEY0OEQ3NTAwOTUwNzAyIC8qIFBlclRo
cmVhZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRERDc4QjQxOEY0OEQ2QjAwOTUwNzAyIC8qIENo
dW5rLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNERENzhDQTE4RjQ4RDc1MDA5NTA3MDIgLyogTXV0
ZXguaCBpbiBIZWFkZXJzICovLApAQCAtMzA5LDcgKzMxMyw2IEBACiAJCQkJMTRERDc4Q0QxOEY0
OEQ3NTAwOTUwNzAyIC8qIFJhbmdlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNERENzg5QzE4RjQ4
RDRBMDA5NTA3MDIgLyogQnVtcEFsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRERDc4
OTkxOEY0OEQ0QTAwOTUwNzAyIC8qIENhY2hlLmggaW4gSGVhZGVycyAqLywKLQkJCQkxNERENzg5
QjE4RjQ4RDRBMDA5NTA3MDIgLyogTWVkaXVtQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkxNERENzhCRTE4RjQ4RDZCMDA5NTA3MDIgLyogU21hbGxUcmFpdHMuaCBpbiBIZWFkZXJzICov
LAogCQkJCTE0REQ3ODkwMThGNDhDRUIwMDk1MDcwMiAvKiBTaXplcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMTRERDc4QzcxOEY0OEQ3NTAwOTUwNzAyIC8qIEJBc3NlcnQuaCBpbiBIZWFkZXJzICov
LApAQCAtMzIyLDYgKzMyNSw3IEBACiAJCQkJMTQwMDI3NEExOEY4OUMyMzAwMTE1Qzk3IC8qIFZN
SGVhcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQwMDI3NDkxOEY4OUMxMzAwMTE1Qzk3IC8qIEhl
YXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0REQ3OEI4MThGNDhENkIwMDk1MDcwMiAvKiBNZWRp
dW1QYWdlLmggaW4gSGVhZGVycyAqLywKKwkJCQkxNDBGQTAwMzE5Q0U0MjlDMDBGRkQzQzggLyog
QnVtcFJhbmdlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNERENzhDNTE4RjQ4RDc1MDA5NTA3MDIg
LyogQWxnb3JpdGhtLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNERENzhCRDE4RjQ4RDZCMDA5NTA3
MDIgLyogU21hbGxQYWdlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDAwMjc0QjE4Rjg5QzNEMDAx
MTVDOTcgLyogQm91bmRhcnlUYWdJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJj
ZS9ibWFsbG9jL2JtYWxsb2MvQWxnb3JpdGhtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxs
b2MvYm1hbGxvYy9BbGdvcml0aG0uaAkocmV2aXNpb24gMTczNjczKQorKysgU291cmNlL2JtYWxs
b2MvYm1hbGxvYy9BbGdvcml0aG0uaAkod29ya2luZyBjb3B5KQpAQCAtNzQsNiArNzQsMTQgQEAg
dGVtcGxhdGU8c2l6ZV90IGRpdmlzb3IsIHR5cGVuYW1lIFQ+IGlubAogICAgIHJldHVybiByZWlu
dGVycHJldF9jYXN0PFQ+KG1hc2socmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHgpLCB+KGRp
dmlzb3IgLSAxdWwpKSk7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgZGl2aWRlUm91
bmRpbmdVcChUIG51bWVyYXRvciwgVCBkZW5vbWluYXRvciwgVCYgcXVvdGllbnQsIFQmIHJlbWFp
bmRlcikKK3sKKyAgICBxdW90aWVudCA9IG51bWVyYXRvciAvIGRlbm9taW5hdG9yOworICAgIHJl
bWFpbmRlciA9IG51bWVyYXRvciAlIGRlbm9taW5hdG9yOworICAgIGlmIChyZW1haW5kZXIpCisg
ICAgICAgIHF1b3RpZW50ICs9IDE7Cit9CisKIC8vIFZlcnNpb24gb2Ygc2l6ZW9mIHRoYXQgcmV0
dXJucyAwIGZvciBlbXB0eSBjbGFzc2VzLgogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUg
Y29uc3RleHByIHNpemVfdCBzaXplT2YoKQpJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9B
bGxvY2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQWxsb2Nh
dG9yLmNwcAkocmV2aXNpb24gMTczNjc1KQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9BbGxv
Y2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCwxMSArMzgsMTEgQEAgbmFtZXNwYWNlIGJt
YWxsb2MgewogQWxsb2NhdG9yOjpBbGxvY2F0b3IoRGVhbGxvY2F0b3ImIGRlYWxsb2NhdG9yKQog
ICAgIDogbV9kZWFsbG9jYXRvcihkZWFsbG9jYXRvcikKIHsKLSAgICBmb3IgKHVuc2lnbmVkIHNo
b3J0IGkgPSBhbGlnbm1lbnQ7IGkgPD0gc21hbGxNYXg7IGkgKz0gYWxpZ25tZW50KQotICAgICAg
ICBtX3NtYWxsQWxsb2NhdG9yc1tzbWFsbFNpemVDbGFzc0ZvcihpKV0uaW5pdDxTbWFsbExpbmU+
KGkpOworICAgIGZvciAodW5zaWduZWQgc2hvcnQgc2l6ZSA9IGFsaWdubWVudDsgc2l6ZSA8PSBz
bWFsbE1heDsgc2l6ZSArPSBhbGlnbm1lbnQpCisgICAgICAgIG1fYnVtcEFsbG9jYXRvcnNbc2l6
ZUNsYXNzKHNpemUpXS5pbml0KHNpemUpOwogCi0gICAgZm9yICh1bnNpZ25lZCBzaG9ydCBpID0g
c21hbGxNYXggKyBhbGlnbm1lbnQ7IGkgPD0gbWVkaXVtTWF4OyBpICs9IGFsaWdubWVudCkKLSAg
ICAgICAgbV9tZWRpdW1BbGxvY2F0b3JzW21lZGl1bVNpemVDbGFzc0ZvcihpKV0uaW5pdDxNZWRp
dW1MaW5lPihpKTsKKyAgICBmb3IgKHVuc2lnbmVkIHNob3J0IHNpemUgPSBzbWFsbE1heCArIGFs
aWdubWVudDsgc2l6ZSA8PSBtZWRpdW1NYXg7IHNpemUgKz0gYWxpZ25tZW50KQorICAgICAgICBt
X2J1bXBBbGxvY2F0b3JzW3NpemVDbGFzcyhzaXplKV0uaW5pdChzaXplKTsKIH0KIAogQWxsb2Nh
dG9yOjp+QWxsb2NhdG9yKCkKQEAgLTUyLDU0ICs1Miw1MyBAQCBBbGxvY2F0b3I6On5BbGxvY2F0
b3IoKQogCiB2b2lkIEFsbG9jYXRvcjo6c2NhdmVuZ2UoKQogewotICAgIGZvciAoYXV0byYgYWxs
b2NhdG9yIDogbV9zbWFsbEFsbG9jYXRvcnMpIHsKLSAgICAgICAgd2hpbGUgKGFsbG9jYXRvci5j
YW5BbGxvY2F0ZSgpKQotICAgICAgICAgICAgbV9kZWFsbG9jYXRvci5kZWFsbG9jYXRlKGFsbG9j
YXRvci5hbGxvY2F0ZSgpKTsKKyAgICBmb3IgKHVuc2lnbmVkIHNob3J0IGkgPSBhbGlnbm1lbnQ7
IGkgPD0gc21hbGxNYXg7IGkgKz0gYWxpZ25tZW50KSB7CisgICAgICAgIEJ1bXBBbGxvY2F0b3Im
IGFsbG9jYXRvciA9IG1fYnVtcEFsbG9jYXRvcnNbc2l6ZUNsYXNzKGkpXTsKKyAgICAgICAgd2hp
bGUgKGFsbG9jYXRvci5jYW5BbGxvY2F0ZSgpKSB7CisgICAgICAgICAgICB3aGlsZSAoYWxsb2Nh
dG9yLmNhbkFsbG9jYXRlKCkpCisgICAgICAgICAgICAgICAgbV9kZWFsbG9jYXRvci5kZWFsbG9j
YXRlKGFsbG9jYXRvci5hbGxvY2F0ZSgpKTsKKworICAgICAgICAgICAgU21hbGxCdW1wUmFuZ2VD
YWNoZSYgYnVtcFJhbmdlQ2FjaGUgPSBtX3NtYWxsQnVtcFJhbmdlQ2FjaGVzW3NpemVDbGFzcyhp
KV07CisgICAgICAgICAgICBpZiAoYnVtcFJhbmdlQ2FjaGUuc2l6ZSgpKQorICAgICAgICAgICAg
ICAgIGFsbG9jYXRvci5yZWZpbGwoYnVtcFJhbmdlQ2FjaGUucG9wKCkpOworICAgICAgICB9CiAg
ICAgICAgIGFsbG9jYXRvci5jbGVhcigpOwogICAgIH0KIAotICAgIGZvciAoYXV0byYgYWxsb2Nh
dG9yIDogbV9tZWRpdW1BbGxvY2F0b3JzKSB7Ci0gICAgICAgIHdoaWxlIChhbGxvY2F0b3IuY2Fu
QWxsb2NhdGUoKSkKLSAgICAgICAgICAgIG1fZGVhbGxvY2F0b3IuZGVhbGxvY2F0ZShhbGxvY2F0
b3IuYWxsb2NhdGUoKSk7CisgICAgZm9yICh1bnNpZ25lZCBzaG9ydCBpID0gc21hbGxNYXggKyBh
bGlnbm1lbnQ7IGkgPD0gbWVkaXVtTWF4OyBpICs9IGFsaWdubWVudCkgeworICAgICAgICBCdW1w
QWxsb2NhdG9yJiBhbGxvY2F0b3IgPSBtX2J1bXBBbGxvY2F0b3JzW3NpemVDbGFzcyhpKV07Cisg
ICAgICAgIHdoaWxlIChhbGxvY2F0b3IuY2FuQWxsb2NhdGUoKSkgeworICAgICAgICAgICAgd2hp
bGUgKGFsbG9jYXRvci5jYW5BbGxvY2F0ZSgpKQorICAgICAgICAgICAgICAgIG1fZGVhbGxvY2F0
b3IuZGVhbGxvY2F0ZShhbGxvY2F0b3IuYWxsb2NhdGUoKSk7CisKKyAgICAgICAgICAgIE1lZGl1
bUJ1bXBSYW5nZUNhY2hlJiBidW1wUmFuZ2VDYWNoZSA9IG1fbWVkaXVtQnVtcFJhbmdlQ2FjaGVz
W3NpemVDbGFzcyhpKV07CisgICAgICAgICAgICBpZiAoYnVtcFJhbmdlQ2FjaGUuc2l6ZSgpKQor
ICAgICAgICAgICAgICAgIGFsbG9jYXRvci5yZWZpbGwoYnVtcFJhbmdlQ2FjaGUucG9wKCkpOwor
ICAgICAgICB9CiAgICAgICAgIGFsbG9jYXRvci5jbGVhcigpOwogICAgIH0KLQotICAgIHN0ZDo6
bG9ja19ndWFyZDxTdGF0aWNNdXRleD4gbG9jayhQZXJQcm9jZXNzPEhlYXA+OjptdXRleCgpKTsK
LSAgICBIZWFwKiBoZWFwID0gUGVyUHJvY2VzczxIZWFwPjo6Z2V0RmFzdENhc2UoKTsKLSAgICAK
LSAgICBmb3IgKGF1dG8mIHNtYWxsTGluZUNhY2hlIDogbV9zbWFsbExpbmVDYWNoZXMpIHsKLSAg
ICAgICAgd2hpbGUgKHNtYWxsTGluZUNhY2hlLnNpemUoKSkKLSAgICAgICAgICAgIGhlYXAtPmRl
YWxsb2NhdGVTbWFsbExpbmUobG9jaywgc21hbGxMaW5lQ2FjaGUucG9wKCkpOwotICAgIH0KLSAg
ICB3aGlsZSAobV9tZWRpdW1MaW5lQ2FjaGUuc2l6ZSgpKQotICAgICAgICBoZWFwLT5kZWFsbG9j
YXRlTWVkaXVtTGluZShsb2NrLCBtX21lZGl1bUxpbmVDYWNoZS5wb3AoKSk7CiB9CiAKLVNtYWxs
TGluZSogQWxsb2NhdG9yOjphbGxvY2F0ZVNtYWxsTGluZShzaXplX3Qgc21hbGxTaXplQ2xhc3Mp
CitCdW1wUmFuZ2UgQWxsb2NhdG9yOjphbGxvY2F0ZVNtYWxsQnVtcFJhbmdlKHNpemVfdCBzaXpl
Q2xhc3MpCiB7Ci0gICAgU21hbGxMaW5lQ2FjaGUmIHNtYWxsTGluZUNhY2hlID0gbV9zbWFsbExp
bmVDYWNoZXNbc21hbGxTaXplQ2xhc3NdOwotICAgIGlmICghc21hbGxMaW5lQ2FjaGUuc2l6ZSgp
KSB7CisgICAgU21hbGxCdW1wUmFuZ2VDYWNoZSYgYnVtcFJhbmdlQ2FjaGUgPSBtX3NtYWxsQnVt
cFJhbmdlQ2FjaGVzW3NpemVDbGFzc107CisgICAgaWYgKCFidW1wUmFuZ2VDYWNoZS5zaXplKCkp
IHsKICAgICAgICAgc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiBsb2NrKFBlclByb2Nlc3M8
SGVhcD46Om11dGV4KCkpOwotICAgICAgICBIZWFwKiBoZWFwID0gUGVyUHJvY2VzczxIZWFwPjo6
Z2V0RmFzdENhc2UoKTsKLQotICAgICAgICB3aGlsZSAoc21hbGxMaW5lQ2FjaGUuc2l6ZSgpICE9
IHNtYWxsTGluZUNhY2hlLmNhcGFjaXR5KCkpCi0gICAgICAgICAgICBzbWFsbExpbmVDYWNoZS5w
dXNoKGhlYXAtPmFsbG9jYXRlU21hbGxMaW5lKGxvY2ssIHNtYWxsU2l6ZUNsYXNzKSk7CisgICAg
ICAgIFBlclByb2Nlc3M8SGVhcD46OmdldEZhc3RDYXNlKCktPnJlZmlsbFNtYWxsQnVtcFJhbmdl
Q2FjaGUobG9jaywgc2l6ZUNsYXNzLCBidW1wUmFuZ2VDYWNoZSk7CiAgICAgfQogCi0gICAgcmV0
dXJuIHNtYWxsTGluZUNhY2hlLnBvcCgpOworICAgIHJldHVybiBidW1wUmFuZ2VDYWNoZS5wb3Ao
KTsKIH0KIAotTWVkaXVtTGluZSogQWxsb2NhdG9yOjphbGxvY2F0ZU1lZGl1bUxpbmUoKQorQnVt
cFJhbmdlIEFsbG9jYXRvcjo6YWxsb2NhdGVNZWRpdW1CdW1wUmFuZ2Uoc2l6ZV90IHNpemVDbGFz
cykKIHsKLSAgICBpZiAoIW1fbWVkaXVtTGluZUNhY2hlLnNpemUoKSkgeworICAgIE1lZGl1bUJ1
bXBSYW5nZUNhY2hlJiBidW1wUmFuZ2VDYWNoZSA9IG1fbWVkaXVtQnVtcFJhbmdlQ2FjaGVzW3Np
emVDbGFzc107CisgICAgaWYgKCFidW1wUmFuZ2VDYWNoZS5zaXplKCkpIHsKICAgICAgICAgc3Rk
Ojpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiBsb2NrKFBlclByb2Nlc3M8SGVhcD46Om11dGV4KCkp
OwotICAgICAgICBIZWFwKiBoZWFwID0gUGVyUHJvY2VzczxIZWFwPjo6Z2V0RmFzdENhc2UoKTsK
LQotICAgICAgICB3aGlsZSAobV9tZWRpdW1MaW5lQ2FjaGUuc2l6ZSgpICE9IG1fbWVkaXVtTGlu
ZUNhY2hlLmNhcGFjaXR5KCkpCi0gICAgICAgICAgICBtX21lZGl1bUxpbmVDYWNoZS5wdXNoKGhl
YXAtPmFsbG9jYXRlTWVkaXVtTGluZShsb2NrKSk7CisgICAgICAgIFBlclByb2Nlc3M8SGVhcD46
OmdldEZhc3RDYXNlKCktPnJlZmlsbE1lZGl1bUJ1bXBSYW5nZUNhY2hlKGxvY2ssIHNpemVDbGFz
cywgYnVtcFJhbmdlQ2FjaGUpOwogICAgIH0KIAotICAgIHJldHVybiBtX21lZGl1bUxpbmVDYWNo
ZS5wb3AoKTsKKyAgICByZXR1cm4gYnVtcFJhbmdlQ2FjaGUucG9wKCk7CiB9CiAKIHZvaWQqIEFs
bG9jYXRvcjo6YWxsb2NhdGVMYXJnZShzaXplX3Qgc2l6ZSkKQEAgLTExNiwzMCArMTE1LDI3IEBA
IHZvaWQqIEFsbG9jYXRvcjo6YWxsb2NhdGVYTGFyZ2Uoc2l6ZV90IHMKICAgICByZXR1cm4gUGVy
UHJvY2VzczxIZWFwPjo6Z2V0RmFzdENhc2UoKS0+YWxsb2NhdGVYTGFyZ2UobG9jaywgc2l6ZSk7
CiB9CiAKLXZvaWQqIEFsbG9jYXRvcjo6YWxsb2NhdGVNZWRpdW0oc2l6ZV90IHNpemUpCi17Ci0g
ICAgQnVtcEFsbG9jYXRvciYgYWxsb2NhdG9yID0gbV9tZWRpdW1BbGxvY2F0b3JzW21lZGl1bVNp
emVDbGFzc0ZvcihzaXplKV07Ci0KLSAgICBpZiAoIWFsbG9jYXRvci5jYW5BbGxvY2F0ZSgpKQot
ICAgICAgICBhbGxvY2F0b3IucmVmaWxsKGFsbG9jYXRlTWVkaXVtTGluZSgpKTsKLSAgICByZXR1
cm4gYWxsb2NhdG9yLmFsbG9jYXRlKCk7Ci19Ci0KIHZvaWQqIEFsbG9jYXRvcjo6YWxsb2NhdGVT
bG93Q2FzZShzaXplX3Qgc2l6ZSkKIHsKIElGX0RFQlVHKAogICAgIHZvaWQqIGR1bW15OwogICAg
IEJBU1NFUlQoIWFsbG9jYXRlRmFzdENhc2Uoc2l6ZSwgZHVtbXkpKTsKICkKLSAgICBpZiAoc2l6
ZSA8PSBzbWFsbE1heCkgewotICAgICAgICBzaXplX3Qgc21hbGxTaXplQ2xhc3MgPSBzbWFsbFNp
emVDbGFzc0ZvcihzaXplKTsKLSAgICAgICAgQnVtcEFsbG9jYXRvciYgYWxsb2NhdG9yID0gbV9z
bWFsbEFsbG9jYXRvcnNbc21hbGxTaXplQ2xhc3NdOwotICAgICAgICBhbGxvY2F0b3IucmVmaWxs
KGFsbG9jYXRlU21hbGxMaW5lKHNtYWxsU2l6ZUNsYXNzKSk7Ci0gICAgICAgIHJldHVybiBhbGxv
Y2F0b3IuYWxsb2NhdGUoKTsKLSAgICB9CiAKLSAgICBpZiAoc2l6ZSA8PSBtZWRpdW1NYXgpCi0g
ICAgICAgIHJldHVybiBhbGxvY2F0ZU1lZGl1bShzaXplKTsKKyAgICBpZiAoc2l6ZSA8PSBtZWRp
dW1NYXgpIHsKKyAgICAgICAgc2l6ZV90IHNpemVDbGFzcyA9IGJtYWxsb2M6OnNpemVDbGFzcyhz
aXplKTsKKyAgICAgICAgQnVtcEFsbG9jYXRvciYgYWxsb2NhdG9yID0gbV9idW1wQWxsb2NhdG9y
c1tzaXplQ2xhc3NdOworCisgICAgICAgIGlmIChhbGxvY2F0b3Iuc2l6ZSgpIDw9IHNtYWxsTWF4
KSB7CisgICAgICAgICAgICBhbGxvY2F0b3IucmVmaWxsKGFsbG9jYXRlU21hbGxCdW1wUmFuZ2Uo
c2l6ZUNsYXNzKSk7CisgICAgICAgICAgICByZXR1cm4gYWxsb2NhdG9yLmFsbG9jYXRlKCk7Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAoYWxsb2NhdG9yLnNpemUoKSA8PSBtZWRpdW1NYXgpIHsK
KyAgICAgICAgICAgIGFsbG9jYXRvci5yZWZpbGwoYWxsb2NhdGVNZWRpdW1CdW1wUmFuZ2Uoc2l6
ZUNsYXNzKSk7CisgICAgICAgICAgICByZXR1cm4gYWxsb2NhdG9yLmFsbG9jYXRlKCk7CisgICAg
ICAgIH0KKyAgICB9CiAgICAgCiAgICAgaWYgKHNpemUgPD0gbGFyZ2VNYXgpCiAgICAgICAgIHJl
dHVybiBhbGxvY2F0ZUxhcmdlKHNpemUpOwpJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9B
bGxvY2F0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0FsbG9jYXRv
ci5oCShyZXZpc2lvbiAxNzM2NzUpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0FsbG9jYXRv
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3IEBACiAKICNpbmNsdWRlICJCdW1wQWxs
b2NhdG9yLmgiCiAjaW5jbHVkZSAiRml4ZWRWZWN0b3IuaCIKLSNpbmNsdWRlICJNZWRpdW1BbGxv
Y2F0b3IuaCIKKyNpbmNsdWRlICJIZWFwLmgiCiAjaW5jbHVkZSAiU2l6ZXMuaCIKICNpbmNsdWRl
ICJTbWFsbExpbmUuaCIKICNpbmNsdWRlIDxhcnJheT4KQEAgLTUxLDMzICs1MSwyOSBAQCBwdWJs
aWM6CiAgICAgdm9pZCBzY2F2ZW5nZSgpOwogCiBwcml2YXRlOgotICAgIHR5cGVkZWYgRml4ZWRW
ZWN0b3I8U21hbGxMaW5lKiwgc21hbGxMaW5lQ2FjaGVDYXBhY2l0eT4gU21hbGxMaW5lQ2FjaGU7
Ci0gICAgdHlwZWRlZiBGaXhlZFZlY3RvcjxNZWRpdW1MaW5lKiwgbWVkaXVtTGluZUNhY2hlQ2Fw
YWNpdHk+IE1lZGl1bUxpbmVDYWNoZTsKLQogICAgIHZvaWQqIGFsbG9jYXRlRmFzdENhc2UoQnVt
cEFsbG9jYXRvciYpOwogCiAgICAgdm9pZCogYWxsb2NhdGVNZWRpdW0oc2l6ZV90KTsKICAgICB2
b2lkKiBhbGxvY2F0ZUxhcmdlKHNpemVfdCk7CiAgICAgdm9pZCogYWxsb2NhdGVYTGFyZ2Uoc2l6
ZV90KTsKICAgICAKLSAgICBTbWFsbExpbmUqIGFsbG9jYXRlU21hbGxMaW5lKHNpemVfdCBzbWFs
bFNpemVDbGFzcyk7Ci0gICAgTWVkaXVtTGluZSogYWxsb2NhdGVNZWRpdW1MaW5lKCk7CisgICAg
QnVtcFJhbmdlIGFsbG9jYXRlU21hbGxCdW1wUmFuZ2Uoc2l6ZV90IHNpemVDbGFzcyk7CisgICAg
QnVtcFJhbmdlIGFsbG9jYXRlTWVkaXVtQnVtcFJhbmdlKHNpemVfdCBzaXplQ2xhc3MpOwogICAg
IAogICAgIERlYWxsb2NhdG9yJiBtX2RlYWxsb2NhdG9yOwogCi0gICAgc3RkOjphcnJheTxCdW1w
QWxsb2NhdG9yLCBzbWFsbE1heCAvIGFsaWdubWVudD4gbV9zbWFsbEFsbG9jYXRvcnM7Ci0gICAg
c3RkOjphcnJheTxCdW1wQWxsb2NhdG9yLCBtZWRpdW1NYXggLyBhbGlnbm1lbnQ+IG1fbWVkaXVt
QWxsb2NhdG9yczsKKyAgICBzdGQ6OmFycmF5PEJ1bXBBbGxvY2F0b3IsIG1lZGl1bU1heCAvIGFs
aWdubWVudD4gbV9idW1wQWxsb2NhdG9yczsKIAotICAgIHN0ZDo6YXJyYXk8U21hbGxMaW5lQ2Fj
aGUsIHNtYWxsTWF4IC8gYWxpZ25tZW50PiBtX3NtYWxsTGluZUNhY2hlczsKLSAgICBNZWRpdW1M
aW5lQ2FjaGUgbV9tZWRpdW1MaW5lQ2FjaGU7CisgICAgc3RkOjphcnJheTxTbWFsbEJ1bXBSYW5n
ZUNhY2hlLCBzbWFsbE1heCAvIGFsaWdubWVudD4gbV9zbWFsbEJ1bXBSYW5nZUNhY2hlczsKKyAg
ICBzdGQ6OmFycmF5PE1lZGl1bUJ1bXBSYW5nZUNhY2hlLCBtZWRpdW1NYXggLyBhbGlnbm1lbnQ+
IG1fbWVkaXVtQnVtcFJhbmdlQ2FjaGVzOwogfTsKIAogaW5saW5lIGJvb2wgQWxsb2NhdG9yOjph
bGxvY2F0ZUZhc3RDYXNlKHNpemVfdCBzaXplLCB2b2lkKiYgb2JqZWN0KQogewotICAgIGlmIChz
aXplID4gc21hbGxNYXgpCisgICAgaWYgKHNpemUgPiBtZWRpdW1NYXgpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAotICAgIEJ1bXBBbGxvY2F0b3ImIGFsbG9jYXRvciA9IG1fc21hbGxBbGxvY2F0
b3JzW3NtYWxsU2l6ZUNsYXNzRm9yKHNpemUpXTsKKyAgICBCdW1wQWxsb2NhdG9yJiBhbGxvY2F0
b3IgPSBtX2J1bXBBbGxvY2F0b3JzW3NpemVDbGFzcyhzaXplKV07CiAgICAgaWYgKCFhbGxvY2F0
b3IuY2FuQWxsb2NhdGUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkluZGV4OiBTb3VyY2Uv
Ym1hbGxvYy9ibWFsbG9jL0J1bXBBbGxvY2F0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1h
bGxvYy9ibWFsbG9jL0J1bXBBbGxvY2F0b3IuaAkocmV2aXNpb24gMTczNjczKQorKysgU291cmNl
L2JtYWxsb2MvYm1hbGxvYy9CdW1wQWxsb2NhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYg
KzI3LDcgQEAKICNkZWZpbmUgQnVtcEFsbG9jYXRvcl9oCiAKICNpbmNsdWRlICJCQXNzZXJ0Lmgi
CisjaW5jbHVkZSAiQnVtcFJhbmdlLmgiCiAjaW5jbHVkZSAiT2JqZWN0VHlwZS5oIgogCiBuYW1l
c3BhY2UgYm1hbGxvYyB7CkBAIC0zNiw0OSArMzcsMzggQEAgbmFtZXNwYWNlIGJtYWxsb2Mgewog
Y2xhc3MgQnVtcEFsbG9jYXRvciB7CiBwdWJsaWM6CiAgICAgQnVtcEFsbG9jYXRvcigpOwotICAg
IHRlbXBsYXRlPHR5cGVuYW1lIExpbmU+IHZvaWQgaW5pdChzaXplX3QpOworICAgIHZvaWQgaW5p
dChzaXplX3QpOworICAgIAorICAgIHNpemVfdCBzaXplKCkgeyByZXR1cm4gbV9zaXplOyB9CiAg
ICAgCiAgICAgYm9vbCBpc051bGwoKSB7IHJldHVybiAhbV9wdHI7IH0KLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBMaW5lPiBMaW5lKiBsaW5lKCk7CisgICAgdm9pZCBjbGVhcigpOwogCiAgICAgYm9v
bCBjYW5BbGxvY2F0ZSgpIHsgcmV0dXJuICEhbV9yZW1haW5pbmc7IH0KICAgICB2b2lkKiBhbGxv
Y2F0ZSgpOwogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgTGluZT4gdm9pZCByZWZpbGwoTGluZSop
OwotICAgIHZvaWQgY2xlYXIoKTsKKyAgICB2b2lkIHJlZmlsbChjb25zdCBCdW1wUmFuZ2UmKTsK
IAogcHJpdmF0ZToKICAgICB2b2lkIHZhbGlkYXRlKHZvaWQqKTsKIAogICAgIGNoYXIqIG1fcHRy
OwogICAgIHVuc2lnbmVkIHNob3J0IG1fc2l6ZTsKLSAgICB1bnNpZ25lZCBjaGFyIG1fcmVtYWlu
aW5nOwotICAgIHVuc2lnbmVkIGNoYXIgbV9tYXhPYmplY3RDb3VudDsKKyAgICB1bnNpZ25lZCBz
aG9ydCBtX3JlbWFpbmluZzsKIH07CiAKIGlubGluZSBCdW1wQWxsb2NhdG9yOjpCdW1wQWxsb2Nh
dG9yKCkKICAgICA6IG1fcHRyKCkKICAgICAsIG1fc2l6ZSgpCiAgICAgLCBtX3JlbWFpbmluZygp
Ci0gICAgLCBtX21heE9iamVjdENvdW50KCkKIHsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgTGlu
ZT4KIGlubGluZSB2b2lkIEJ1bXBBbGxvY2F0b3I6OmluaXQoc2l6ZV90IHNpemUpCiB7Ci0gICAg
QkFTU0VSVChzaXplID49IExpbmU6Om1pbmltdW1PYmplY3RTaXplKTsKLQogICAgIG1fcHRyID0g
bnVsbHB0cjsKICAgICBtX3NpemUgPSBzaXplOwogICAgIG1fcmVtYWluaW5nID0gMDsKLSAgICBt
X21heE9iamVjdENvdW50ID0gTGluZTo6bGluZVNpemUgLyBzaXplOwotfQotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBMaW5lPgotaW5saW5lIExpbmUqIEJ1bXBBbGxvY2F0b3I6OmxpbmUoKQotewotICAg
IHJldHVybiBMaW5lOjpnZXQoY2FuQWxsb2NhdGUoKSA/IG1fcHRyIDogbV9wdHIgLSAxKTsKIH0K
IAogaW5saW5lIHZvaWQgQnVtcEFsbG9jYXRvcjo6dmFsaWRhdGUodm9pZCogcHRyKQpAQCAtMTA0
LDEzICs5NCwxMSBAQCBpbmxpbmUgdm9pZCogQnVtcEFsbG9jYXRvcjo6YWxsb2NhdGUoKQogICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIExpbmU+Ci1pbmxpbmUgdm9p
ZCBCdW1wQWxsb2NhdG9yOjpyZWZpbGwoTGluZSogbGluZSkKK2lubGluZSB2b2lkIEJ1bXBBbGxv
Y2F0b3I6OnJlZmlsbChjb25zdCBCdW1wUmFuZ2UmIGJ1bXBSYW5nZSkKIHsKICAgICBCQVNTRVJU
KCFjYW5BbGxvY2F0ZSgpKTsKLSAgICBsaW5lLT5jb25jdXJyZW50UmVmKG1fbWF4T2JqZWN0Q291
bnQpOwotICAgIG1fcHRyID0gbGluZS0+YmVnaW4oKTsKLSAgICBtX3JlbWFpbmluZyA9IG1fbWF4
T2JqZWN0Q291bnQ7CisgICAgbV9wdHIgPSBidW1wUmFuZ2UuYmVnaW47CisgICAgbV9yZW1haW5p
bmcgPSBidW1wUmFuZ2Uub2JqZWN0Q291bnQ7CiB9CiAKIGlubGluZSB2b2lkIEJ1bXBBbGxvY2F0
b3I6OmNsZWFyKCkKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvRGVhbGxvY2F0b3IuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvRGVhbGxvY2F0b3IuY3BwCShy
ZXZpc2lvbiAxNzM2NzUpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0RlYWxsb2NhdG9yLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNzIsMTUgKzcyLDExIEBAIHZvaWQgRGVhbGxvY2F0b3I6OnBy
b2Nlc3NPYmplY3RMb2coKQogICAgIGZvciAoYXV0byBvYmplY3QgOiBtX29iamVjdExvZykgewog
ICAgICAgICBpZiAoaXNTbWFsbChvYmplY3QpKSB7CiAgICAgICAgICAgICBTbWFsbExpbmUqIGxp
bmUgPSBTbWFsbExpbmU6OmdldChvYmplY3QpOwotICAgICAgICAgICAgaWYgKCFsaW5lLT5kZXJl
Zihsb2NrKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGhlYXAtPmRl
YWxsb2NhdGVTbWFsbExpbmUobG9jaywgbGluZSk7CisgICAgICAgICAgICBoZWFwLT5kZXJlZlNt
YWxsTGluZShsb2NrLCBsaW5lKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEJBU1NF
UlQoaXNTbWFsbE9yTWVkaXVtKG9iamVjdCkpOworICAgICAgICAgICAgQkFTU0VSVChpc01lZGl1
bShvYmplY3QpKTsKICAgICAgICAgICAgIE1lZGl1bUxpbmUqIGxpbmUgPSBNZWRpdW1MaW5lOjpn
ZXQob2JqZWN0KTsKLSAgICAgICAgICAgIGlmICghbGluZS0+ZGVyZWYobG9jaykpCi0gICAgICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBoZWFwLT5kZWFsbG9jYXRlTWVkaXVtTGlu
ZShsb2NrLCBsaW5lKTsKKyAgICAgICAgICAgIGhlYXAtPmRlcmVmTWVkaXVtTGluZShsb2NrLCBs
aW5lKTsKICAgICAgICAgfQogICAgIH0KICAgICAKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxs
b2MvSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9IZWFwLmNw
cAkocmV2aXNpb24gMTczNjczKQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9IZWFwLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTAsNiArNTAsNDIgQEAgSGVhcDo6SGVhcChzdGQ6OmxvY2tfZ3Vh
cmQ8U3RhdGljTXV0ZXg+JgogICAgIDogbV9pc0FsbG9jYXRpbmdQYWdlcyhmYWxzZSkKICAgICAs
IG1fc2NhdmVuZ2VyKCp0aGlzLCAmSGVhcDo6Y29uY3VycmVudFNjYXZlbmdlKQogeworICAgIGlu
aXRpYWxpemVMaW5lTWV0YWRhdGEoKTsKK30KKwordm9pZCBIZWFwOjppbml0aWFsaXplTGluZU1l
dGFkYXRhKCkKK3sKKyAgICBmb3IgKHVuc2lnbmVkIHNob3J0IHNpemUgPSBhbGlnbm1lbnQ7IHNp
emUgPD0gc21hbGxNYXg7IHNpemUgKz0gYWxpZ25tZW50KSB7CisgICAgICAgIHVuc2lnbmVkIHNo
b3J0IHN0YXJ0T2Zmc2V0ID0gMDsKKyAgICAgICAgZm9yIChzaXplX3QgbGluZU51bWJlciA9IDA7
IGxpbmVOdW1iZXIgPCBTbWFsbFBhZ2U6OmxpbmVDb3VudCAtIDE7ICsrbGluZU51bWJlcikgewor
ICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgb2JqZWN0Q291bnQ7CisgICAgICAgICAgICB1bnNp
Z25lZCBzaG9ydCByZW1haW5kZXI7CisgICAgICAgICAgICBkaXZpZGVSb3VuZGluZ1VwKHN0YXRp
Y19jYXN0PHVuc2lnbmVkIHNob3J0PihTbWFsbFBhZ2U6OmxpbmVTaXplIC0gc3RhcnRPZmZzZXQp
LCBzaXplLCBvYmplY3RDb3VudCwgcmVtYWluZGVyKTsKKyAgICAgICAgICAgIEJBU1NFUlQob2Jq
ZWN0Q291bnQpOworICAgICAgICAgICAgbV9zbWFsbExpbmVNZXRhZGF0YVtzaXplQ2xhc3Moc2l6
ZSldW2xpbmVOdW1iZXJdID0geyBzdGFydE9mZnNldCwgb2JqZWN0Q291bnQgfTsKKyAgICAgICAg
ICAgIHN0YXJ0T2Zmc2V0ID0gcmVtYWluZGVyID8gc2l6ZSAtIHJlbWFpbmRlciA6IDA7CisgICAg
ICAgIH0KKworICAgICAgICAvLyBUaGUgbGFzdCBsaW5lIGluIHRoZSBwYWdlIHJvdW5kcyBkb3du
IGluc3RlYWQgb2YgdXAgYmVjYXVzZSBpdCdzIG5vdCBhbGxvd2VkIHRvIG92ZXJsYXAgaW50byBp
dHMgbmVpZ2hib3IuCisgICAgICAgIHVuc2lnbmVkIHNob3J0IG9iamVjdENvdW50ID0gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KChTbWFsbFBhZ2U6OmxpbmVTaXplIC0gc3RhcnRPZmZzZXQp
IC8gc2l6ZSk7CisgICAgICAgIG1fc21hbGxMaW5lTWV0YWRhdGFbc2l6ZUNsYXNzKHNpemUpXVtT
bWFsbFBhZ2U6OmxpbmVDb3VudCAtIDFdID0geyBzdGFydE9mZnNldCwgb2JqZWN0Q291bnQgfTsK
KyAgICB9CisKKyAgICBmb3IgKHVuc2lnbmVkIHNob3J0IHNpemUgPSBzbWFsbE1heCArIGFsaWdu
bWVudDsgc2l6ZSA8PSBtZWRpdW1NYXg7IHNpemUgKz0gYWxpZ25tZW50KSB7CisgICAgICAgIHVu
c2lnbmVkIHNob3J0IHN0YXJ0T2Zmc2V0ID0gMDsKKyAgICAgICAgZm9yIChzaXplX3QgbGluZU51
bWJlciA9IDA7IGxpbmVOdW1iZXIgPCBNZWRpdW1QYWdlOjpsaW5lQ291bnQgLSAxOyArK2xpbmVO
dW1iZXIpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IG9iamVjdENvdW50OworICAgICAg
ICAgICAgdW5zaWduZWQgc2hvcnQgcmVtYWluZGVyOworICAgICAgICAgICAgZGl2aWRlUm91bmRp
bmdVcChzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oTWVkaXVtUGFnZTo6bGluZVNpemUgLSBz
dGFydE9mZnNldCksIHNpemUsIG9iamVjdENvdW50LCByZW1haW5kZXIpOworICAgICAgICAgICAg
QkFTU0VSVChvYmplY3RDb3VudCk7CisgICAgICAgICAgICBtX21lZGl1bUxpbmVNZXRhZGF0YVtz
aXplQ2xhc3Moc2l6ZSldW2xpbmVOdW1iZXJdID0geyBzdGFydE9mZnNldCwgb2JqZWN0Q291bnQg
fTsKKyAgICAgICAgICAgIHN0YXJ0T2Zmc2V0ID0gcmVtYWluZGVyID8gc2l6ZSAtIHJlbWFpbmRl
ciA6IDA7CisgICAgICAgIH0KKworICAgICAgICAvLyBUaGUgbGFzdCBsaW5lIGluIHRoZSBwYWdl
IHJvdW5kcyBkb3duIGluc3RlYWQgb2YgdXAgYmVjYXVzZSBpdCdzIG5vdCBhbGxvd2VkIHRvIG92
ZXJsYXAgaW50byBpdHMgbmVpZ2hib3IuCisgICAgICAgIHVuc2lnbmVkIHNob3J0IG9iamVjdENv
dW50ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KChNZWRpdW1QYWdlOjpsaW5lU2l6ZSAt
IHN0YXJ0T2Zmc2V0KSAvIHNpemUpOworICAgICAgICBtX21lZGl1bUxpbmVNZXRhZGF0YVtzaXpl
Q2xhc3Moc2l6ZSldW01lZGl1bVBhZ2U6OmxpbmVDb3VudCAtIDFdID0geyBzdGFydE9mZnNldCwg
b2JqZWN0Q291bnQgfTsKKyAgICB9CiB9CiAKIHZvaWQgSGVhcDo6Y29uY3VycmVudFNjYXZlbmdl
KCkKQEAgLTExNiwxMSArMTUyLDg5IEBAIHZvaWQgSGVhcDo6c2NhdmVuZ2VMYXJnZVJhbmdlcyhz
dGQ6OnVuaXEKICAgICB9CiB9CiAKLVNtYWxsTGluZSogSGVhcDo6YWxsb2NhdGVTbWFsbExpbmVT
bG93Q2FzZShzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+JiBsb2NrLCBzaXplX3Qgc21hbGxT
aXplQ2xhc3MpCit2b2lkIEhlYXA6OnJlZmlsbFNtYWxsQnVtcFJhbmdlQ2FjaGUoc3RkOjpsb2Nr
X2d1YXJkPFN0YXRpY011dGV4PiYgbG9jaywgc2l6ZV90IHNpemVDbGFzcywgU21hbGxCdW1wUmFu
Z2VDYWNoZSYgcmFuZ2VDYWNoZSkKK3sKKyAgICBCQVNTRVJUKCFyYW5nZUNhY2hlLnNpemUoKSk7
CisgICAgU21hbGxQYWdlKiBwYWdlID0gYWxsb2NhdGVTbWFsbFBhZ2UobG9jaywgc2l6ZUNsYXNz
KTsKKyAgICBTbWFsbExpbmUqIGxpbmVzID0gcGFnZS0+YmVnaW4oKTsKKworICAgIC8vIER1ZSB0
byBvdmVybGFwIGZyb20gdGhlIHByZXZpb3VzIGxpbmUsIHRoZSBsYXN0IGxpbmUgaW4gdGhlIHBh
Z2UgbWF5IG5vdCBiZSBhYmxlIHRvIGZpdCBhbnkgb2JqZWN0cy4KKyAgICBzaXplX3QgZW5kID0g
U21hbGxQYWdlOjpsaW5lQ291bnQ7CisgICAgaWYgKCFtX3NtYWxsTGluZU1ldGFkYXRhW3NpemVD
bGFzc11bU21hbGxQYWdlOjpsaW5lQ291bnQgLSAxXS5vYmplY3RDb3VudCkKKyAgICAgICAgLS1l
bmQ7CisKKyAgICBmb3IgKHNpemVfdCBsaW5lTnVtYmVyID0gMDsgbGluZU51bWJlciA8IGVuZDsg
KytsaW5lTnVtYmVyKSB7CisgICAgICAgIGlmIChsaW5lc1tsaW5lTnVtYmVyXS5yZWZDb3VudChs
b2NrKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIExpbmVNZXRhZGF0YSYgbGlu
ZU1ldGFkYXRhID0gbV9zbWFsbExpbmVNZXRhZGF0YVtzaXplQ2xhc3NdW2xpbmVOdW1iZXJdOwor
ICAgICAgICBjaGFyKiBiZWdpbiA9IGxpbmVzW2xpbmVOdW1iZXJdLmJlZ2luKCkgKyBsaW5lTWV0
YWRhdGEuc3RhcnRPZmZzZXQ7CisgICAgICAgIHVuc2lnbmVkIHNob3J0IG9iamVjdENvdW50ID0g
bGluZU1ldGFkYXRhLm9iamVjdENvdW50OworICAgICAgICBsaW5lc1tsaW5lTnVtYmVyXS5yZWYo
bG9jaywgbGluZU1ldGFkYXRhLm9iamVjdENvdW50KTsKKyAgICAgICAgcGFnZS0+cmVmKGxvY2sp
OworCisgICAgICAgIHdoaWxlICgrK2xpbmVOdW1iZXIgPCBlbmQpIHsKKyAgICAgICAgICAgIGlm
IChsaW5lc1tsaW5lTnVtYmVyXS5yZWZDb3VudChsb2NrKSkKKyAgICAgICAgICAgICAgICBicmVh
azsKKworICAgICAgICAgICAgTGluZU1ldGFkYXRhJiBsaW5lTWV0YWRhdGEgPSBtX3NtYWxsTGlu
ZU1ldGFkYXRhW3NpemVDbGFzc11bbGluZU51bWJlcl07CisgICAgICAgICAgICBvYmplY3RDb3Vu
dCArPSBsaW5lTWV0YWRhdGEub2JqZWN0Q291bnQ7CisgICAgICAgICAgICBsaW5lc1tsaW5lTnVt
YmVyXS5yZWYobG9jaywgbGluZU1ldGFkYXRhLm9iamVjdENvdW50KTsKKyAgICAgICAgICAgIHBh
Z2UtPnJlZihsb2NrKTsKKyAgICAgICAgfQorCisgICAgICAgIHJhbmdlQ2FjaGUucHVzaCh7IGJl
Z2luLCBvYmplY3RDb3VudCB9KTsKKyAgICB9Cit9CisKK3ZvaWQgSGVhcDo6cmVmaWxsTWVkaXVt
QnVtcFJhbmdlQ2FjaGUoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYgbG9jaywgc2l6ZV90
IHNpemVDbGFzcywgTWVkaXVtQnVtcFJhbmdlQ2FjaGUmIHJhbmdlQ2FjaGUpCit7CisgICAgQkFT
U0VSVCghcmFuZ2VDYWNoZS5zaXplKCkpOworICAgIE1lZGl1bVBhZ2UqIHBhZ2UgPSBhbGxvY2F0
ZU1lZGl1bVBhZ2UobG9jaywgc2l6ZUNsYXNzKTsKKyAgICBNZWRpdW1MaW5lKiBsaW5lcyA9IHBh
Z2UtPmJlZ2luKCk7CisKKyAgICAvLyBEdWUgdG8gb3ZlcmxhcCBmcm9tIHRoZSBwcmV2aW91cyBs
aW5lLCB0aGUgbGFzdCBsaW5lIGluIHRoZSBwYWdlIG1heSBub3QgYmUgYWJsZSB0byBmaXQgYW55
IG9iamVjdHMuCisgICAgc2l6ZV90IGVuZCA9IE1lZGl1bVBhZ2U6OmxpbmVDb3VudDsKKyAgICBp
ZiAoIW1fbWVkaXVtTGluZU1ldGFkYXRhW3NpemVDbGFzc11bTWVkaXVtUGFnZTo6bGluZUNvdW50
IC0gMV0ub2JqZWN0Q291bnQpCisgICAgICAgIC0tZW5kOworCisgICAgZm9yIChzaXplX3QgbGlu
ZU51bWJlciA9IDA7IGxpbmVOdW1iZXIgPCBlbmQ7ICsrbGluZU51bWJlcikgeworICAgICAgICBp
ZiAobGluZXNbbGluZU51bWJlcl0ucmVmQ291bnQobG9jaykpCisgICAgICAgICAgICBjb250aW51
ZTsKKworICAgICAgICBMaW5lTWV0YWRhdGEmIGxpbmVNZXRhZGF0YSA9IG1fbWVkaXVtTGluZU1l
dGFkYXRhW3NpemVDbGFzc11bbGluZU51bWJlcl07CisgICAgICAgIGNoYXIqIGJlZ2luID0gbGlu
ZXNbbGluZU51bWJlcl0uYmVnaW4oKSArIGxpbmVNZXRhZGF0YS5zdGFydE9mZnNldDsKKyAgICAg
ICAgdW5zaWduZWQgc2hvcnQgb2JqZWN0Q291bnQgPSBsaW5lTWV0YWRhdGEub2JqZWN0Q291bnQ7
CisgICAgICAgIGxpbmVzW2xpbmVOdW1iZXJdLnJlZihsb2NrLCBsaW5lTWV0YWRhdGEub2JqZWN0
Q291bnQpOworICAgICAgICBwYWdlLT5yZWYobG9jayk7CisgICAgICAgIAorICAgICAgICB3aGls
ZSAoKytsaW5lTnVtYmVyIDwgZW5kKSB7CisgICAgICAgICAgICBpZiAobGluZXNbbGluZU51bWJl
cl0ucmVmQ291bnQobG9jaykpCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAg
IExpbmVNZXRhZGF0YSYgbGluZU1ldGFkYXRhID0gbV9tZWRpdW1MaW5lTWV0YWRhdGFbc2l6ZUNs
YXNzXVtsaW5lTnVtYmVyXTsKKyAgICAgICAgICAgIG9iamVjdENvdW50ICs9IGxpbmVNZXRhZGF0
YS5vYmplY3RDb3VudDsKKyAgICAgICAgICAgIGxpbmVzW2xpbmVOdW1iZXJdLnJlZihsb2NrLCBs
aW5lTWV0YWRhdGEub2JqZWN0Q291bnQpOworICAgICAgICAgICAgcGFnZS0+cmVmKGxvY2spOwor
ICAgICAgICB9CisKKyAgICAgICAgcmFuZ2VDYWNoZS5wdXNoKHsgYmVnaW4sIG9iamVjdENvdW50
IH0pOworICAgIH0KK30KKworU21hbGxQYWdlKiBIZWFwOjphbGxvY2F0ZVNtYWxsUGFnZShzdGQ6
OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+JiBsb2NrLCBzaXplX3Qgc2l6ZUNsYXNzKQogeworICAg
IFZlY3RvcjxTbWFsbFBhZ2UqPiYgc21hbGxQYWdlc1dpdGhGcmVlTGluZXMgPSBtX3NtYWxsUGFn
ZXNXaXRoRnJlZUxpbmVzW3NpemVDbGFzc107CisgICAgd2hpbGUgKHNtYWxsUGFnZXNXaXRoRnJl
ZUxpbmVzLnNpemUoKSkgeworICAgICAgICBTbWFsbFBhZ2UqIHBhZ2UgPSBzbWFsbFBhZ2VzV2l0
aEZyZWVMaW5lcy5wb3AoKTsKKyAgICAgICAgaWYgKCFwYWdlLT5yZWZDb3VudChsb2NrKSB8fCBw
YWdlLT5zaXplQ2xhc3MoKSAhPSBzaXplQ2xhc3MpIC8vIFBhZ2Ugd2FzIHByb21vdGVkIHRvIHRo
ZSBwYWdlcyBsaXN0LgorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIHJldHVybiBwYWdl
OworICAgIH0KKyAgICAKICAgICBtX2lzQWxsb2NhdGluZ1BhZ2VzID0gdHJ1ZTsKIAotICAgIFNt
YWxsUGFnZSogcGFnZSA9IFt0aGlzXSgpIHsKKyAgICBTbWFsbFBhZ2UqIHBhZ2UgPSBbdGhpcywg
c2l6ZUNsYXNzXSgpIHsKICAgICAgICAgaWYgKG1fc21hbGxQYWdlcy5zaXplKCkpCiAgICAgICAg
ICAgICByZXR1cm4gbV9zbWFsbFBhZ2VzLnBvcCgpOwogICAgICAgICAKQEAgLTEyOSwyMiArMjQz
LDIzIEBAIFNtYWxsTGluZSogSGVhcDo6YWxsb2NhdGVTbWFsbExpbmVTbG93Q2EKICAgICAgICAg
cmV0dXJuIHBhZ2U7CiAgICAgfSgpOwogCi0gICAgU21hbGxMaW5lKiBsaW5lID0gcGFnZS0+YmVn
aW4oKTsKLSAgICBWZWN0b3I8U21hbGxMaW5lKj4mIHNtYWxsTGluZXMgPSBtX3NtYWxsTGluZXNb
c21hbGxTaXplQ2xhc3NdOwotICAgIGZvciAoYXV0byBpdCA9IGxpbmUgKyAxOyBpdCAhPSBwYWdl
LT5lbmQoKTsgKytpdCkKLSAgICAgICAgc21hbGxMaW5lcy5wdXNoKGl0KTsKLQotICAgIEJBU1NF
UlQoIWxpbmUtPnJlZkNvdW50KGxvY2spKTsKLSAgICBwYWdlLT5zZXRTbWFsbFNpemVDbGFzcyhz
bWFsbFNpemVDbGFzcyk7Ci0gICAgcGFnZS0+cmVmKGxvY2spOwotICAgIHJldHVybiBsaW5lOwor
ICAgIHBhZ2UtPnNldFNpemVDbGFzcyhzaXplQ2xhc3MpOworICAgIHJldHVybiBwYWdlOwogfQog
Ci1NZWRpdW1MaW5lKiBIZWFwOjphbGxvY2F0ZU1lZGl1bUxpbmVTbG93Q2FzZShzdGQ6OmxvY2tf
Z3VhcmQ8U3RhdGljTXV0ZXg+JiBsb2NrKQorTWVkaXVtUGFnZSogSGVhcDo6YWxsb2NhdGVNZWRp
dW1QYWdlKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mIGxvY2ssIHNpemVfdCBzaXplQ2xh
c3MpCiB7CisgICAgVmVjdG9yPE1lZGl1bVBhZ2UqPiYgbWVkaXVtUGFnZXNXaXRoRnJlZUxpbmVz
ID0gbV9tZWRpdW1QYWdlc1dpdGhGcmVlTGluZXNbc2l6ZUNsYXNzXTsKKyAgICB3aGlsZSAobWVk
aXVtUGFnZXNXaXRoRnJlZUxpbmVzLnNpemUoKSkgeworICAgICAgICBNZWRpdW1QYWdlKiBwYWdl
ID0gbWVkaXVtUGFnZXNXaXRoRnJlZUxpbmVzLnBvcCgpOworICAgICAgICBpZiAoIXBhZ2UtPnJl
ZkNvdW50KGxvY2spIHx8IHBhZ2UtPnNpemVDbGFzcygpICE9IHNpemVDbGFzcykgLy8gUGFnZSB3
YXMgcHJvbW90ZWQgdG8gdGhlIHBhZ2VzIGxpc3QuCisgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgcmV0dXJuIHBhZ2U7CisgICAgfQorICAgIAogICAgIG1faXNBbGxvY2F0aW5nUGFnZXMg
PSB0cnVlOwogCi0gICAgTWVkaXVtUGFnZSogcGFnZSA9IFt0aGlzXSgpIHsKKyAgICBNZWRpdW1Q
YWdlKiBwYWdlID0gW3RoaXMsIHNpemVDbGFzc10oKSB7CiAgICAgICAgIGlmIChtX21lZGl1bVBh
Z2VzLnNpemUoKSkKICAgICAgICAgICAgIHJldHVybiBtX21lZGl1bVBhZ2VzLnBvcCgpOwogICAg
ICAgICAKQEAgLTE1MywxMiArMjY4LDUyIEBAIE1lZGl1bUxpbmUqIEhlYXA6OmFsbG9jYXRlTWVk
aXVtTGluZVNsb3cKICAgICAgICAgcmV0dXJuIHBhZ2U7CiAgICAgfSgpOwogCi0gICAgTWVkaXVt
TGluZSogbGluZSA9IHBhZ2UtPmJlZ2luKCk7Ci0gICAgZm9yIChhdXRvIGl0ID0gbGluZSArIDE7
IGl0ICE9IHBhZ2UtPmVuZCgpOyArK2l0KQotICAgICAgICBtX21lZGl1bUxpbmVzLnB1c2goaXQp
OworICAgIHBhZ2UtPnNldFNpemVDbGFzcyhzaXplQ2xhc3MpOworICAgIHJldHVybiBwYWdlOwor
fQogCi0gICAgcGFnZS0+cmVmKGxvY2spOwotICAgIHJldHVybiBsaW5lOwordm9pZCBIZWFwOjpk
ZWFsbG9jYXRlU21hbGxMaW5lKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mIGxvY2ssIFNt
YWxsTGluZSogbGluZSkKK3sKKyAgICBCQVNTRVJUKCFsaW5lLT5yZWZDb3VudChsb2NrKSk7Cisg
ICAgU21hbGxQYWdlKiBwYWdlID0gU21hbGxQYWdlOjpnZXQobGluZSk7CisgICAgc2l6ZV90IHJl
ZkNvdW50ID0gcGFnZS0+cmVmQ291bnQobG9jayk7CisgICAgcGFnZS0+ZGVyZWYobG9jayk7CisK
KyAgICBzd2l0Y2ggKHJlZkNvdW50KSB7CisgICAgY2FzZSBTbWFsbFBhZ2U6OmxpbmVDb3VudDog
eworICAgICAgICAvLyBGaXJzdCBmcmVlIGxpbmUgaW4gdGhlIHBhZ2UuCisgICAgICAgIG1fc21h
bGxQYWdlc1dpdGhGcmVlTGluZXNbcGFnZS0+c2l6ZUNsYXNzKCldLnB1c2gocGFnZSk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIDE6IHsKKyAgICAgICAgLy8gTGFzdCBmcmVlIGxp
bmUgaW4gdGhlIHBhZ2UuCisgICAgICAgIG1fc21hbGxQYWdlcy5wdXNoKHBhZ2UpOworICAgICAg
ICBtX3NjYXZlbmdlci5ydW4oKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIH0KK30KKwor
dm9pZCBIZWFwOjpkZWFsbG9jYXRlTWVkaXVtTGluZShzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0
ZXg+JiBsb2NrLCBNZWRpdW1MaW5lKiBsaW5lKQoreworICAgIEJBU1NFUlQoIWxpbmUtPnJlZkNv
dW50KGxvY2spKTsKKyAgICBNZWRpdW1QYWdlKiBwYWdlID0gTWVkaXVtUGFnZTo6Z2V0KGxpbmUp
OworICAgIHNpemVfdCByZWZDb3VudCA9IHBhZ2UtPnJlZkNvdW50KGxvY2spOworICAgIHBhZ2Ut
PmRlcmVmKGxvY2spOworCisgICAgc3dpdGNoIChyZWZDb3VudCkgeworICAgIGNhc2UgTWVkaXVt
UGFnZTo6bGluZUNvdW50OiB7CisgICAgICAgIC8vIEZpcnN0IGZyZWUgbGluZSBpbiB0aGUgcGFn
ZS4KKyAgICAgICAgbV9tZWRpdW1QYWdlc1dpdGhGcmVlTGluZXNbcGFnZS0+c2l6ZUNsYXNzKCld
LnB1c2gocGFnZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIDE6IHsKKyAgICAg
ICAgLy8gTGFzdCBmcmVlIGxpbmUgaW4gdGhlIHBhZ2UuCisgICAgICAgIG1fbWVkaXVtUGFnZXMu
cHVzaChwYWdlKTsKKyAgICAgICAgbV9zY2F2ZW5nZXIucnVuKCk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKyAgICB9CiB9CiAKIHZvaWQqIEhlYXA6OmFsbG9jYXRlWExhcmdlKHN0ZDo6bG9ja19n
dWFyZDxTdGF0aWNNdXRleD4mLCBzaXplX3Qgc2l6ZSkKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2Jt
YWxsb2MvSGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSGVhcC5o
CShyZXZpc2lvbiAxNzM2NzMpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0hlYXAuaAkod29y
a2luZyBjb3B5KQpAQCAtMjYsMTYgKzI2LDE3IEBACiAjaWZuZGVmIEhlYXBfaAogI2RlZmluZSBI
ZWFwX2gKIAotI2luY2x1ZGUgIkZpeGVkVmVjdG9yLmgiCi0jaW5jbHVkZSAiVk1IZWFwLmgiCi0j
aW5jbHVkZSAiTWVkaXVtTGluZS5oIgotI2luY2x1ZGUgIk11dGV4LmgiCi0jaW5jbHVkZSAiU21h
bGxQYWdlLmgiCisjaW5jbHVkZSAiQnVtcFJhbmdlLmgiCisjaW5jbHVkZSAiTGluZU1ldGFkYXRh
LmgiCiAjaW5jbHVkZSAiTWVkaXVtQ2h1bmsuaCIKKyNpbmNsdWRlICJNZWRpdW1MaW5lLmgiCiAj
aW5jbHVkZSAiTWVkaXVtUGFnZS5oIgorI2luY2x1ZGUgIk11dGV4LmgiCiAjaW5jbHVkZSAiU2Vn
cmVnYXRlZEZyZWVMaXN0LmgiCiAjaW5jbHVkZSAiU21hbGxDaHVuay5oIgogI2luY2x1ZGUgIlNt
YWxsTGluZS5oIgorI2luY2x1ZGUgIlNtYWxsUGFnZS5oIgorI2luY2x1ZGUgIlZNSGVhcC5oIgog
I2luY2x1ZGUgIlZlY3Rvci5oIgogI2luY2x1ZGUgPGFycmF5PgogI2luY2x1ZGUgPG11dGV4PgpA
QCAtNDksMTIgKzUwLDEyIEBAIGNsYXNzIEhlYXAgewogcHVibGljOgogICAgIEhlYXAoc3RkOjps
b2NrX2d1YXJkPFN0YXRpY011dGV4PiYpOwogCi0gICAgU21hbGxMaW5lKiBhbGxvY2F0ZVNtYWxs
TGluZShzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+Jiwgc2l6ZV90IHNtYWxsU2l6ZUNsYXNz
KTsKLSAgICB2b2lkIGRlYWxsb2NhdGVTbWFsbExpbmUoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011
dGV4PiYsIFNtYWxsTGluZSopOworICAgIHZvaWQgcmVmaWxsU21hbGxCdW1wUmFuZ2VDYWNoZShz
dGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+Jiwgc2l6ZV90IHNpemVDbGFzcywgU21hbGxCdW1w
UmFuZ2VDYWNoZSYpOworICAgIHZvaWQgZGVyZWZTbWFsbExpbmUoc3RkOjpsb2NrX2d1YXJkPFN0
YXRpY011dGV4PiYsIFNtYWxsTGluZSopOworCisgICAgdm9pZCByZWZpbGxNZWRpdW1CdW1wUmFu
Z2VDYWNoZShzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+Jiwgc2l6ZV90IHNpemVDbGFzcywg
TWVkaXVtQnVtcFJhbmdlQ2FjaGUmKTsKKyAgICB2b2lkIGRlcmVmTWVkaXVtTGluZShzdGQ6Omxv
Y2tfZ3VhcmQ8U3RhdGljTXV0ZXg+JiwgTWVkaXVtTGluZSopOwogCi0gICAgTWVkaXVtTGluZSog
YWxsb2NhdGVNZWRpdW1MaW5lKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mKTsKLSAgICB2
b2lkIGRlYWxsb2NhdGVNZWRpdW1MaW5lKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mLCBN
ZWRpdW1MaW5lKik7Ci0gICAgCiAgICAgdm9pZCogYWxsb2NhdGVMYXJnZShzdGQ6OmxvY2tfZ3Vh
cmQ8U3RhdGljTXV0ZXg+Jiwgc2l6ZV90KTsKICAgICB2b2lkIGRlYWxsb2NhdGVMYXJnZShzdGQ6
OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+Jiwgdm9pZCopOwogCkBAIC02OCw5ICs2OSwxNCBAQCBw
dWJsaWM6CiAKIHByaXZhdGU6CiAgICAgfkhlYXAoKSA9IGRlbGV0ZTsKKyAgICAKKyAgICB2b2lk
IGluaXRpYWxpemVMaW5lTWV0YWRhdGEoKTsKIAotICAgIFNtYWxsTGluZSogYWxsb2NhdGVTbWFs
bExpbmVTbG93Q2FzZShzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+Jiwgc2l6ZV90IHNtYWxs
U2l6ZUNsYXNzKTsKLSAgICBNZWRpdW1MaW5lKiBhbGxvY2F0ZU1lZGl1bUxpbmVTbG93Q2FzZShz
dGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+Jik7CisgICAgU21hbGxQYWdlKiBhbGxvY2F0ZVNt
YWxsUGFnZShzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+Jiwgc2l6ZV90IHNpemVDbGFzcyk7
CisgICAgTWVkaXVtUGFnZSogYWxsb2NhdGVNZWRpdW1QYWdlKHN0ZDo6bG9ja19ndWFyZDxTdGF0
aWNNdXRleD4mLCBzaXplX3Qgc2l6ZUNsYXNzKTsKKworICAgIHZvaWQgZGVhbGxvY2F0ZVNtYWxs
TGluZShzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+JiwgU21hbGxMaW5lKik7CisgICAgdm9p
ZCBkZWFsbG9jYXRlTWVkaXVtTGluZShzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+JiwgTWVk
aXVtTGluZSopOwogCiAgICAgdm9pZCogYWxsb2NhdGVMYXJnZShSYW5nZSwgc2l6ZV90KTsKICAg
ICBSYW5nZSBhbGxvY2F0ZUxhcmdlQ2h1bmsoKTsKQEAgLTg1LDggKzkxLDExIEBAIHByaXZhdGU6
CiAgICAgdm9pZCBzY2F2ZW5nZU1lZGl1bVBhZ2VzKHN0ZDo6dW5pcXVlX2xvY2s8U3RhdGljTXV0
ZXg+Jiwgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyk7CiAgICAgdm9pZCBzY2F2ZW5nZUxhcmdl
UmFuZ2VzKHN0ZDo6dW5pcXVlX2xvY2s8U3RhdGljTXV0ZXg+Jiwgc3RkOjpjaHJvbm86Om1pbGxp
c2Vjb25kcyk7CiAKLSAgICBzdGQ6OmFycmF5PFZlY3RvcjxTbWFsbExpbmUqPiwgc21hbGxNYXgg
LyBhbGlnbm1lbnQ+IG1fc21hbGxMaW5lczsKLSAgICBWZWN0b3I8TWVkaXVtTGluZSo+IG1fbWVk
aXVtTGluZXM7CisgICAgc3RkOjphcnJheTxzdGQ6OmFycmF5PExpbmVNZXRhZGF0YSwgU21hbGxQ
YWdlOjpsaW5lQ291bnQ+LCBzbWFsbE1heCAvIGFsaWdubWVudD4gbV9zbWFsbExpbmVNZXRhZGF0
YTsKKyAgICBzdGQ6OmFycmF5PHN0ZDo6YXJyYXk8TGluZU1ldGFkYXRhLCBNZWRpdW1QYWdlOjps
aW5lQ291bnQ+LCBtZWRpdW1NYXggLyBhbGlnbm1lbnQ+IG1fbWVkaXVtTGluZU1ldGFkYXRhOwor
CisgICAgc3RkOjphcnJheTxWZWN0b3I8U21hbGxQYWdlKj4sIHNtYWxsTWF4IC8gYWxpZ25tZW50
PiBtX3NtYWxsUGFnZXNXaXRoRnJlZUxpbmVzOworICAgIHN0ZDo6YXJyYXk8VmVjdG9yPE1lZGl1
bVBhZ2UqPiwgbWVkaXVtTWF4IC8gYWxpZ25tZW50PiBtX21lZGl1bVBhZ2VzV2l0aEZyZWVMaW5l
czsKIAogICAgIFZlY3RvcjxTbWFsbFBhZ2UqPiBtX3NtYWxsUGFnZXM7CiAgICAgVmVjdG9yPE1l
ZGl1bVBhZ2UqPiBtX21lZGl1bVBhZ2VzOwpAQCAtOTksNTkgKzEwOCwxOCBAQCBwcml2YXRlOgog
ICAgIEFzeW5jVGFzazxIZWFwLCBkZWNsdHlwZSgmSGVhcDo6Y29uY3VycmVudFNjYXZlbmdlKT4g
bV9zY2F2ZW5nZXI7CiB9OwogCi1pbmxpbmUgdm9pZCBIZWFwOjpkZWFsbG9jYXRlU21hbGxMaW5l
KHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mIGxvY2ssIFNtYWxsTGluZSogbGluZSkKK2lu
bGluZSB2b2lkIEhlYXA6OmRlcmVmU21hbGxMaW5lKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRl
eD4mIGxvY2ssIFNtYWxsTGluZSogbGluZSkKIHsKLSAgICBCQVNTRVJUKCFsaW5lLT5yZWZDb3Vu
dChsb2NrKSk7Ci0gICAgU21hbGxQYWdlKiBwYWdlID0gU21hbGxQYWdlOjpnZXQobGluZSk7Ci0g
ICAgaWYgKHBhZ2UtPmRlcmVmKGxvY2spKSB7Ci0gICAgICAgIG1fc21hbGxQYWdlcy5wdXNoKHBh
Z2UpOwotICAgICAgICBtX3NjYXZlbmdlci5ydW4oKTsKKyAgICBpZiAoIWxpbmUtPmRlcmVmKGxv
Y2spKQogICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIG1fc21hbGxMaW5lc1twYWdlLT5zbWFs
bFNpemVDbGFzcygpXS5wdXNoKGxpbmUpOwotfQotCi1pbmxpbmUgU21hbGxMaW5lKiBIZWFwOjph
bGxvY2F0ZVNtYWxsTGluZShzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+JiBsb2NrLCBzaXpl
X3Qgc21hbGxTaXplQ2xhc3MpCi17Ci0gICAgVmVjdG9yPFNtYWxsTGluZSo+JiBzbWFsbExpbmVz
ID0gbV9zbWFsbExpbmVzW3NtYWxsU2l6ZUNsYXNzXTsKLSAgICB3aGlsZSAoc21hbGxMaW5lcy5z
aXplKCkpIHsKLSAgICAgICAgU21hbGxMaW5lKiBsaW5lID0gc21hbGxMaW5lcy5wb3AoKTsKLSAg
ICAgICAgU21hbGxQYWdlKiBwYWdlID0gU21hbGxQYWdlOjpnZXQobGluZSk7Ci0gICAgICAgIGlm
ICghcGFnZS0+cmVmQ291bnQobG9jaykgfHwgcGFnZS0+c21hbGxTaXplQ2xhc3MoKSAhPSBzbWFs
bFNpemVDbGFzcykgLy8gVGhlIGxpbmUgd2FzIHByb21vdGVkIHRvIHRoZSBzbWFsbCBwYWdlcyBs
aXN0LgotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIEJBU1NFUlQoIWxpbmUtPnJlZkNv
dW50KGxvY2spKTsKLSAgICAgICAgcGFnZS0+cmVmKGxvY2spOwotICAgICAgICByZXR1cm4gbGlu
ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gYWxsb2NhdGVTbWFsbExpbmVTbG93Q2FzZShsb2NrLCBz
bWFsbFNpemVDbGFzcyk7CisgICAgZGVhbGxvY2F0ZVNtYWxsTGluZShsb2NrLCBsaW5lKTsKIH0K
IAotaW5saW5lIHZvaWQgSGVhcDo6ZGVhbGxvY2F0ZU1lZGl1bUxpbmUoc3RkOjpsb2NrX2d1YXJk
PFN0YXRpY011dGV4PiYgbG9jaywgTWVkaXVtTGluZSogbGluZSkKK2lubGluZSB2b2lkIEhlYXA6
OmRlcmVmTWVkaXVtTGluZShzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+JiBsb2NrLCBNZWRp
dW1MaW5lKiBsaW5lKQogewotICAgIEJBU1NFUlQoIWxpbmUtPnJlZkNvdW50KGxvY2spKTsKLSAg
ICBNZWRpdW1QYWdlKiBwYWdlID0gTWVkaXVtUGFnZTo6Z2V0KGxpbmUpOwotICAgIGlmIChwYWdl
LT5kZXJlZihsb2NrKSkgewotICAgICAgICBtX21lZGl1bVBhZ2VzLnB1c2gocGFnZSk7Ci0gICAg
ICAgIG1fc2NhdmVuZ2VyLnJ1bigpOworICAgIGlmICghbGluZS0+ZGVyZWYobG9jaykpCiAgICAg
ICAgIHJldHVybjsKLSAgICB9Ci0gICAgbV9tZWRpdW1MaW5lcy5wdXNoKGxpbmUpOwotfQotCi1p
bmxpbmUgTWVkaXVtTGluZSogSGVhcDo6YWxsb2NhdGVNZWRpdW1MaW5lKHN0ZDo6bG9ja19ndWFy
ZDxTdGF0aWNNdXRleD4mIGxvY2spCi17Ci0gICAgd2hpbGUgKG1fbWVkaXVtTGluZXMuc2l6ZSgp
KSB7Ci0gICAgICAgIE1lZGl1bUxpbmUqIGxpbmUgPSBtX21lZGl1bUxpbmVzLnBvcCgpOwotICAg
ICAgICBNZWRpdW1QYWdlKiBwYWdlID0gTWVkaXVtUGFnZTo6Z2V0KGxpbmUpOwotICAgICAgICBp
ZiAoIXBhZ2UtPnJlZkNvdW50KGxvY2spKSAvLyBUaGUgbGluZSB3YXMgcHJvbW90ZWQgdG8gdGhl
IG1lZGl1bSBwYWdlcyBsaXN0LgotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIEJBU1NF
UlQoIWxpbmUtPnJlZkNvdW50KGxvY2spKTsKLSAgICAgICAgcGFnZS0+cmVmKGxvY2spOwotICAg
ICAgICByZXR1cm4gbGluZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gYWxsb2NhdGVNZWRpdW1MaW5l
U2xvd0Nhc2UobG9jayk7CisgICAgZGVhbGxvY2F0ZU1lZGl1bUxpbmUobG9jaywgbGluZSk7CiB9
CiAKIH0gLy8gbmFtZXNwYWNlIGJtYWxsb2MKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2Mv
TGluZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvTGluZS5oCShyZXZp
c2lvbiAxNzM2NzMpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0xpbmUuaAkod29ya2luZyBj
b3B5KQpAQCAtNDUsOCArNDUsOCBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgTGluZSogZ2V0KHZv
aWQqKTsKIAotICAgIHZvaWQgY29uY3VycmVudFJlZih1bnNpZ25lZCBjaGFyID0gMSk7Ci0gICAg
Ym9vbCBkZXJlZihzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+JiwgdW5zaWduZWQgY2hhciA9
IDEpOworICAgIHZvaWQgcmVmKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mLCB1bnNpZ25l
ZCBjaGFyKTsKKyAgICBib29sIGRlcmVmKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mKTsK
ICAgICB1bnNpZ25lZCByZWZDb3VudChzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+JikgeyBy
ZXR1cm4gbV9yZWZDb3VudDsgfQogICAgIAogICAgIGNoYXIqIGJlZ2luKCk7CkBAIC04MSwxOCAr
ODEsMTggQEAgaW5saW5lIGNoYXIqIExpbmU8VHJhaXRzPjo6ZW5kKCkKIH0KIAogdGVtcGxhdGU8
Y2xhc3MgVHJhaXRzPgotaW5saW5lIHZvaWQgTGluZTxUcmFpdHM+Ojpjb25jdXJyZW50UmVmKHVu
c2lnbmVkIGNoYXIgY291bnQpCitpbmxpbmUgdm9pZCBMaW5lPFRyYWl0cz46OnJlZihzdGQ6Omxv
Y2tfZ3VhcmQ8U3RhdGljTXV0ZXg+JiwgdW5zaWduZWQgY2hhciByZWZDb3VudCkKIHsKLSAgICBC
QVNTRVJUKCFtX3JlZkNvdW50KTsgLy8gVXAtcmVmIGZyb20gemVybyBjYW4gYmUgbG9jay1mcmVl
IGJlY2F1c2UgdGhlcmUgYXJlIG5vIG90aGVyIGNsaWVudHMuCi0gICAgQkFTU0VSVChjb3VudCA8
PSBtYXhSZWZDb3VudCk7Ci0gICAgbV9yZWZDb3VudCA9IGNvdW50OworICAgIEJBU1NFUlQoIW1f
cmVmQ291bnQpOworICAgIEJBU1NFUlQocmVmQ291bnQgPD0gbWF4UmVmQ291bnQpOworICAgIG1f
cmVmQ291bnQgPSByZWZDb3VudDsKIH0KIAogdGVtcGxhdGU8Y2xhc3MgVHJhaXRzPgotaW5saW5l
IGJvb2wgTGluZTxUcmFpdHM+OjpkZXJlZihzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+Jiwg
dW5zaWduZWQgY2hhciBjb3VudCkKK2lubGluZSBib29sIExpbmU8VHJhaXRzPjo6ZGVyZWYoc3Rk
Ojpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYpCiB7Ci0gICAgQkFTU0VSVChjb3VudCA8PSBtX3Jl
ZkNvdW50KTsKLSAgICBtX3JlZkNvdW50IC09IGNvdW50OworICAgIEJBU1NFUlQobV9yZWZDb3Vu
dCk7CisgICAgLS1tX3JlZkNvdW50OwogICAgIHJldHVybiAhbV9yZWZDb3VudDsKIH0KIApJbmRl
eDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9NZWRpdW1BbGxvY2F0b3IuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL01lZGl1bUFsbG9jYXRvci5oCShyZXZpc2lvbiAxNzM2
NzMpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL01lZGl1bUFsbG9jYXRvci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDExNSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
Ci0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAotICovCi0KLSNpZm5kZWYgTWVkaXVtQWxsb2NhdG9yX2gKLSNkZWZpbmUgTWVkaXVt
QWxsb2NhdG9yX2gKLQotI2luY2x1ZGUgIkJBc3NlcnQuaCIKLSNpbmNsdWRlICJNZWRpdW1DaHVu
ay5oIgotI2luY2x1ZGUgIk1lZGl1bUxpbmUuaCIKLQotbmFtZXNwYWNlIGJtYWxsb2MgewotCi0v
LyBIZWxwZXIgb2JqZWN0IGZvciBhbGxvY2F0aW5nIG1lZGl1bSBvYmplY3RzLgotCi1jbGFzcyBN
ZWRpdW1BbGxvY2F0b3IgewotcHVibGljOgotICAgIE1lZGl1bUFsbG9jYXRvcigpOwotCi0gICAg
Ym9vbCBpc051bGwoKSB7IHJldHVybiAhbV9lbmQ7IH0KLSAgICBNZWRpdW1MaW5lKiBsaW5lKCk7
Ci0KLSAgICB2b2lkKiBhbGxvY2F0ZShzaXplX3QpOwotICAgIGJvb2wgYWxsb2NhdGUoc2l6ZV90
LCB2b2lkKiYpOwotCi0gICAgdW5zaWduZWQgY2hhciBkZXJlZkNvdW50KCk7Ci0KLSAgICB2b2lk
IHJlZmlsbChNZWRpdW1MaW5lKik7Ci0gICAgdm9pZCBjbGVhcigpOwotCi1wcml2YXRlOgotICAg
IGNoYXIqIG1fZW5kOwotICAgIHNpemVfdCBtX3JlbWFpbmluZzsKLSAgICBzaXplX3QgbV9vYmpl
Y3RDb3VudDsKLX07Ci0KLWlubGluZSBNZWRpdW1BbGxvY2F0b3I6Ok1lZGl1bUFsbG9jYXRvcigp
Ci0gICAgOiBtX2VuZCgpCi0gICAgLCBtX3JlbWFpbmluZygpCi0gICAgLCBtX29iamVjdENvdW50
KCkKLXsKLX0KLQotaW5saW5lIE1lZGl1bUxpbmUqIE1lZGl1bUFsbG9jYXRvcjo6bGluZSgpCi17
Ci0gICAgcmV0dXJuIE1lZGl1bUxpbmU6OmdldChtX2VuZCAtIDEpOwotfQotCi1pbmxpbmUgdm9p
ZCogTWVkaXVtQWxsb2NhdG9yOjphbGxvY2F0ZShzaXplX3Qgc2l6ZSkKLXsKLSAgICBCQVNTRVJU
KHNpemUgPD0gbV9yZW1haW5pbmcpOwotICAgIEJBU1NFUlQoc2l6ZSA9PSByb3VuZFVwVG9NdWx0
aXBsZU9mPGFsaWdubWVudD4oc2l6ZSkpOwotICAgIEJBU1NFUlQoc2l6ZSA+PSBNZWRpdW1MaW5l
OjptaW5pbXVtT2JqZWN0U2l6ZSk7Ci0KLSAgICBtX3JlbWFpbmluZyAtPSBzaXplOwotICAgIHZv
aWQqIG9iamVjdCA9IG1fZW5kIC0gbV9yZW1haW5pbmcgLSBzaXplOwotICAgIEJBU1NFUlQoaXNT
bWFsbE9yTWVkaXVtKG9iamVjdCkgJiYgIWlzU21hbGwob2JqZWN0KSk7Ci0KLSAgICArK21fb2Jq
ZWN0Q291bnQ7Ci0gICAgcmV0dXJuIG9iamVjdDsKLX0KLQotaW5saW5lIGJvb2wgTWVkaXVtQWxs
b2NhdG9yOjphbGxvY2F0ZShzaXplX3Qgc2l6ZSwgdm9pZComIG9iamVjdCkKLXsKLSAgICBpZiAo
c2l6ZSA+IG1fcmVtYWluaW5nKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBvYmplY3Qg
PSBhbGxvY2F0ZShzaXplKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotaW5saW5lIHVuc2lnbmVk
IGNoYXIgTWVkaXVtQWxsb2NhdG9yOjpkZXJlZkNvdW50KCkKLXsKLSAgICByZXR1cm4gTWVkaXVt
TGluZTo6bWF4UmVmQ291bnQgLSBtX29iamVjdENvdW50OwotfQotCi1pbmxpbmUgdm9pZCBNZWRp
dW1BbGxvY2F0b3I6OnJlZmlsbChNZWRpdW1MaW5lKiBsaW5lKQotewotICAgIGxpbmUtPmNvbmN1
cnJlbnRSZWYoTWVkaXVtTGluZTo6bWF4UmVmQ291bnQpOwotICAgIG1fZW5kID0gbGluZS0+ZW5k
KCk7Ci0gICAgbV9yZW1haW5pbmcgPSBtZWRpdW1MaW5lU2l6ZTsKLSAgICBtX29iamVjdENvdW50
ID0gMDsKLX0KLQotaW5saW5lIHZvaWQgTWVkaXVtQWxsb2NhdG9yOjpjbGVhcigpCi17Ci0gICAg
bV9lbmQgPSBudWxscHRyOwotICAgIG1fcmVtYWluaW5nID0gMDsKLSAgICBtX29iamVjdENvdW50
ID0gMDsKLX0KLQotfSAvLyBuYW1lc3BhY2UgYm1hbGxvYwotCi0jZW5kaWYgLy8gTWVkaXVtQWxs
b2NhdG9yX2gKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvUGFnZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvUGFnZS5oCShyZXZpc2lvbiAxNzM2NzMpCisrKyBT
b3VyY2UvYm1hbGxvYy9ibWFsbG9jL1BhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzksOSArMzks
MTAgQEAgcHVibGljOgogICAgIHR5cGVkZWYgdHlwZW5hbWUgVHJhaXRzOjpDaHVuayBDaHVuazsK
ICAgICB0eXBlZGVmIHR5cGVuYW1lIFRyYWl0czo6TGluZSBMaW5lOwogICAgIHN0YXRpYyBjb25z
dCBzaXplX3QgbGluZVNpemUgPSBUcmFpdHM6OmxpbmVTaXplOworICAgIHN0YXRpYyBjb25zdCBz
aXplX3QgbGluZUNvdW50ID0gdm1QYWdlU2l6ZSAvIGxpbmVTaXplOwogCiAgICAgc3RhdGljIGNv
bnN0IHVuc2lnbmVkIGNoYXIgbWF4UmVmQ291bnQgPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2ln
bmVkIGNoYXI+OjptYXgoKTsKLSAgICBzdGF0aWNfYXNzZXJ0KHZtUGFnZVNpemUgLyBsaW5lU2l6
ZSA8IG1heFJlZkNvdW50LCAibWF4aW11bSBsaW5lIGNvdW50IG11c3QgZml0IGluIFBhZ2UiKTsK
KyAgICBzdGF0aWNfYXNzZXJ0KGxpbmVDb3VudCA8IG1heFJlZkNvdW50LCAibWF4aW11bSBsaW5l
IGNvdW50IG11c3QgZml0IGluIFBhZ2UiKTsKICAgICAKICAgICBzdGF0aWMgUGFnZSogZ2V0KExp
bmUqKTsKIApAQCAtNDksMTUgKzUwLDE1IEBAIHB1YmxpYzoKICAgICBib29sIGRlcmVmKHN0ZDo6
bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mKTsKICAgICB1bnNpZ25lZCByZWZDb3VudChzdGQ6Omxv
Y2tfZ3VhcmQ8U3RhdGljTXV0ZXg+JikgeyByZXR1cm4gbV9yZWZDb3VudDsgfQogICAgIAotICAg
IHNpemVfdCBzbWFsbFNpemVDbGFzcygpIHsgcmV0dXJuIG1fc21hbGxTaXplQ2xhc3M7IH0KLSAg
ICB2b2lkIHNldFNtYWxsU2l6ZUNsYXNzKHNpemVfdCBzbWFsbFNpemVDbGFzcykgeyBtX3NtYWxs
U2l6ZUNsYXNzID0gc21hbGxTaXplQ2xhc3M7IH0KKyAgICBzaXplX3Qgc2l6ZUNsYXNzKCkgeyBy
ZXR1cm4gbV9zaXplQ2xhc3M7IH0KKyAgICB2b2lkIHNldFNpemVDbGFzcyhzaXplX3Qgc2l6ZUNs
YXNzKSB7IG1fc2l6ZUNsYXNzID0gc2l6ZUNsYXNzOyB9CiAgICAgCiAgICAgTGluZSogYmVnaW4o
KTsKICAgICBMaW5lKiBlbmQoKTsKIAogcHJpdmF0ZToKICAgICB1bnNpZ25lZCBjaGFyIG1fcmVm
Q291bnQ7Ci0gICAgdW5zaWduZWQgY2hhciBtX3NtYWxsU2l6ZUNsYXNzOworICAgIHVuc2lnbmVk
IGNoYXIgbV9zaXplQ2xhc3M7CiB9OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUcmFpdHM+CkBAIC04
OSwxNCArOTAsMTQgQEAgaW5saW5lIGF1dG8gUGFnZTxUcmFpdHM+OjpiZWdpbigpIC0+IExpbgog
ewogICAgIENodW5rKiBjaHVuayA9IENodW5rOjpnZXQodGhpcyk7CiAgICAgc2l6ZV90IHBhZ2VO
dW1iZXIgPSB0aGlzIC0gY2h1bmstPnBhZ2VzKCk7Ci0gICAgc2l6ZV90IGxpbmVOdW1iZXIgPSBw
YWdlTnVtYmVyICogdm1QYWdlU2l6ZSAvIGxpbmVTaXplOworICAgIHNpemVfdCBsaW5lTnVtYmVy
ID0gcGFnZU51bWJlciAqIGxpbmVDb3VudDsKICAgICByZXR1cm4gJmNodW5rLT5saW5lcygpW2xp
bmVOdW1iZXJdOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUcmFpdHM+CiBpbmxpbmUgYXV0byBQ
YWdlPFRyYWl0cz46OmVuZCgpIC0+IExpbmUqCiB7Ci0gICAgcmV0dXJuIGJlZ2luKCkgKyB2bVBh
Z2VTaXplIC8gbGluZVNpemU7CisgICAgcmV0dXJuIGJlZ2luKCkgKyBsaW5lQ291bnQ7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIGJtYWxsb2MKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvU2l6
ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1NpemVzLmgJKHJldmlz
aW9uIDE3MzY3NSkKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvU2l6ZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtNTYsNyArNTYsNyBAQCBuYW1lc3BhY2UgU2l6ZXMgewogICAgIHN0YXRpYyBjb25z
dCBzaXplX3Qgc3VwZXJDaHVua1NpemUgPSAzMiAqIE1COwogCiAgICAgc3RhdGljIGNvbnN0IHNp
emVfdCBzbWFsbE1heCA9IDI1NjsKLSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IHNtYWxsTGluZVNp
emUgPSA1MTI7CisgICAgc3RhdGljIGNvbnN0IHNpemVfdCBzbWFsbExpbmVTaXplID0gMjU2Owog
ICAgIHN0YXRpYyBjb25zdCBzaXplX3Qgc21hbGxMaW5lTWFzayA9IH4oc21hbGxMaW5lU2l6ZSAt
IDF1bCk7CiAKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IHNtYWxsQ2h1bmtTaXplID0gc3VwZXJD
aHVua1NpemUgLyA0OwpAQCAtNjQsNyArNjQsNyBAQCBuYW1lc3BhY2UgU2l6ZXMgewogICAgIHN0
YXRpYyBjb25zdCBzaXplX3Qgc21hbGxDaHVua01hc2sgPSB+KHNtYWxsQ2h1bmtTaXplIC0gMXVs
KTsKIAogICAgIHN0YXRpYyBjb25zdCBzaXplX3QgbWVkaXVtTWF4ID0gMTAyNDsKLSAgICBzdGF0
aWMgY29uc3Qgc2l6ZV90IG1lZGl1bUxpbmVTaXplID0gMjA0ODsKKyAgICBzdGF0aWMgY29uc3Qg
c2l6ZV90IG1lZGl1bUxpbmVTaXplID0gMTAyNDsKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IG1l
ZGl1bUxpbmVNYXNrID0gfihtZWRpdW1MaW5lU2l6ZSAtIDF1bCk7CiAKICAgICBzdGF0aWMgY29u
c3Qgc2l6ZV90IG1lZGl1bUNodW5rU2l6ZSA9IHN1cGVyQ2h1bmtTaXplIC8gNDsKQEAgLTkyLDIx
ICs5MiwyMCBAQCBuYW1lc3BhY2UgU2l6ZXMgewogCiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBk
ZWFsbG9jYXRvckxvZ0NhcGFjaXR5ID0gMjU2OwogCi0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBz
bWFsbExpbmVDYWNoZUNhcGFjaXR5ID0gdm1QYWdlU2l6ZSAvIHNtYWxsTGluZVNpemU7Ci0gICAg
c3RhdGljIGNvbnN0IHNpemVfdCBtZWRpdW1MaW5lQ2FjaGVDYXBhY2l0eSA9IHZtUGFnZVNpemUg
LyBtZWRpdW1MaW5lU2l6ZTsKKyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IHNtYWxsUmFuZ2VDYWNo
ZUNhcGFjaXR5ID0gdm1QYWdlU2l6ZSAvIHNtYWxsTGluZVNpemU7CisgICAgc3RhdGljIGNvbnN0
IHNpemVfdCBtZWRpdW1SYW5nZUNhY2hlQ2FwYWNpdHkgPSB2bVBhZ2VTaXplIC8gbWVkaXVtTGlu
ZVNpemU7CiAgICAgCiAgICAgc3RhdGljIGNvbnN0IHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMg
c2NhdmVuZ2VTbGVlcER1cmF0aW9uID0gc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyg1MTIpOwog
Ci0gICAgaW5saW5lIHNpemVfdCBzbWFsbFNpemVDbGFzc0ZvcihzaXplX3Qgc2l6ZSkKKyAgICBp
bmxpbmUgc2l6ZV90IHNpemVDbGFzcyhzaXplX3Qgc2l6ZSkKICAgICB7Ci0gICAgICAgIHN0YXRp
YyBjb25zdCBzaXplX3Qgc21hbGxTaXplQ2xhc3NNYXNrID0gKHNtYWxsTWF4IC8gYWxpZ25tZW50
KSAtIDE7Ci0gICAgICAgIHJldHVybiBtYXNrKChzaXplIC0gMXVsKSAvIGFsaWdubWVudCwgc21h
bGxTaXplQ2xhc3NNYXNrKTsKKyAgICAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBzaXplQ2xhc3NN
YXNrID0gKG1lZGl1bU1heCAvIGFsaWdubWVudCkgLSAxOworICAgICAgICByZXR1cm4gbWFzaygo
c2l6ZSAtIDF1bCkgLyBhbGlnbm1lbnQsIHNpemVDbGFzc01hc2spOwogICAgIH0KIAotICAgIGlu
bGluZSBzaXplX3QgbWVkaXVtU2l6ZUNsYXNzRm9yKHNpemVfdCBzaXplKQorICAgIGlubGluZSBz
aXplX3Qgb2JqZWN0U2l6ZShzaXplX3Qgc2l6ZUNsYXNzKQogICAgIHsKLSAgICAgICAgc3RhdGlj
IGNvbnN0IHNpemVfdCBtZWRpdW1TaXplQ2xhc3NNYXNrID0gKG1lZGl1bU1heCAvIGFsaWdubWVu
dCkgLSAxOwotICAgICAgICByZXR1cm4gbWFzaygoc2l6ZSAtIDF1bCkgLyBhbGlnbm1lbnQsIG1l
ZGl1bVNpemVDbGFzc01hc2spOworICAgICAgICByZXR1cm4gKHNpemVDbGFzcyArIDEpICogYWxp
Z25tZW50OwogICAgIH0KIH07CiAKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvYm1hbGxv
Yy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvYm1hbGxvYy5oCShyZXZp
c2lvbiAxNzM2NzMpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL2JtYWxsb2MuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTIsMTUgKzUyLDEzIEBAIGlubGluZSB2b2lkKiByZWFsbG9jKHZvaWQqIG9i
amVjdCwgc2l6ZV8KICAgICBzaXplX3Qgb2xkU2l6ZSA9IDA7CiAgICAgc3dpdGNoKG9iamVjdFR5
cGUob2JqZWN0KSkgewogICAgIGNhc2UgU21hbGw6IHsKLSAgICAgICAgLy8gV2UgZG9uJ3QgaGF2
ZSBhbiBleGFjdCBzaXplLCBidXQgd2UgY2FuIGNhbGN1bGF0ZSBhIG1heGltdW0uCi0gICAgICAg
IHZvaWQqIGVuZCA9IHJvdW5kVXBUb011bHRpcGxlT2Y8c21hbGxMaW5lU2l6ZT4oc3RhdGljX2Nh
c3Q8Y2hhcio+KG9iamVjdCkgKyAxKTsKLSAgICAgICAgb2xkU2l6ZSA9IHN0YXRpY19jYXN0PGNo
YXIqPihlbmQpIC0gc3RhdGljX2Nhc3Q8Y2hhcio+KG9iamVjdCk7CisgICAgICAgIFNtYWxsUGFn
ZSogcGFnZSA9IFNtYWxsUGFnZTo6Z2V0KFNtYWxsTGluZTo6Z2V0KG9iamVjdCkpOworICAgICAg
ICBvbGRTaXplID0gb2JqZWN0U2l6ZShwYWdlLT5zaXplQ2xhc3MoKSk7CiAgICAgICAgIGJyZWFr
OwogICAgIH0KICAgICBjYXNlIE1lZGl1bTogewotICAgICAgICAvLyBXZSBkb24ndCBoYXZlIGFu
IGV4YWN0IHNpemUsIGJ1dCB3ZSBjYW4gY2FsY3VsYXRlIGEgbWF4aW11bS4KLSAgICAgICAgdm9p
ZCogZW5kID0gcm91bmRVcFRvTXVsdGlwbGVPZjxtZWRpdW1MaW5lU2l6ZT4oc3RhdGljX2Nhc3Q8
Y2hhcio+KG9iamVjdCkgKyAxKTsKLSAgICAgICAgb2xkU2l6ZSA9IHN0YXRpY19jYXN0PGNoYXIq
PihlbmQpIC0gc3RhdGljX2Nhc3Q8Y2hhcio+KG9iamVjdCk7CisgICAgICAgIE1lZGl1bVBhZ2Uq
IHBhZ2UgPSBNZWRpdW1QYWdlOjpnZXQoTWVkaXVtTGluZTo6Z2V0KG9iamVjdCkpOworICAgICAg
ICBvbGRTaXplID0gb2JqZWN0U2l6ZShwYWdlLT5zaXplQ2xhc3MoKSk7CiAgICAgICAgIGJyZWFr
OwogICAgIH0KICAgICBjYXNlIExhcmdlOiB7Cg==
</data>
<flag name="review"
          id="263184"
          type_id="1"
          status="-"
          setter="ggaren"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>238451</attachid>
            <date>2014-09-21 23:02:49 -0700</date>
            <delta_ts>2014-09-22 00:29:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-136993-20140921230247.patch</filename>
            <type>text/plain</type>
            <size>48980</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvd3RmL0Zhc3RNYWxsb2MuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XVEYvd3RmL0Zhc3RNYWxsb2MuY3BwCShyZXZpc2lvbiAxNzM2NzMpCisrKyBTb3VyY2UvV1RG
L3d0Zi9GYXN0TWFsbG9jLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAxLDYgKzEwMSwxMCBAQAog
I2VuZGlmCiAjZW5kaWYKIAorI2lmIChQTEFURk9STShDT0NPQSkgJiYgKENQVShYODZfNjQpIHx8
IENQVShBUk02NCkpKQorI2RlZmluZSBVU0VfQk1BTExPQyAxCisjZW5kaWYKKwogI2lmICEoZGVm
aW5lZChVU0VfU1lTVEVNX01BTExPQykgJiYgVVNFX1NZU1RFTV9NQUxMT0MpICYmIGRlZmluZWQo
TkRFQlVHKQogI2RlZmluZSBGT1JDRV9TWVNURU1fTUFMTE9DIDAKICNlbHNlCkluZGV4OiBTb3Vy
Y2UvYm1hbGxvYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvQ2hhbmdl
TG9nCShyZXZpc2lvbiAxNzM4MDQpCisrKyBTb3VyY2UvYm1hbGxvYy9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSwxMjIgQEAKKzIwMTQtMDktMjEgIEdlb2ZmcmV5IEdhcmVuICA8
Z2dhcmVuQGFwcGxlLmNvbT4KKworICAgICAgICBibWFsbG9jOiBBbGxvY2F0aW9uIHNob3VsZCBi
ZSBtb3JlIHByZWNpc2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTEzNjk5MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIDEzJSByZWR1Y3Rpb24gaW4gaGVhcCBzaXplIG9uIHRoZSBNYWxsb2NCZW5jaCAqX21l
bW9yeV93YXJuaW5nIGJlbmNobWFya3MuCisKKyAgICAgICAgVGhpcyBwYXRjaCB0ZWFjaGVzIHRo
ZSBhbGxvY2F0b3IgdG8gbWVyZ2UgYWRqYWNlbnQgZnJlZSBsaW5lcyBpbnRvIGEKKyAgICAgICAg
c2luZ2xlIGFsbG9jYXRhYmxlIHJhbmdlLiBUaGlzIGFsbG93cyB1cyB0byBzaHJpbmsgdGhlIHNp
emUgb2YgYW4KKyAgICAgICAgaW5kaXZpZHVhbCBsaW5lIHdpdGhvdXQgaW5jcmVhc2luZyBmcmFn
bWVudGF0aW9uIG9yIHRoZSByYXRlIG9mIGFsbG9jYXRvcgorICAgICAgICBzbG93IHBhdGhzLgor
CisgICAgICAgIFdlJ2xsIG9ubHkgdGFrZSBtb3JlIHNsb3cgcGF0aHMgd2hlbiBhdmFpbGFibGUg
bWVtb3J5IGlzIHNwYXJzZSwgd2hpY2gKKyAgICAgICAgaXMgZXhhY3RseSB3aGVuIGl0J3Mgd29y
dGggaXQuIFdoZW4gYXZhaWxhYmxlIG1lbW9yeSBpcyBkZW5zZSwgd2UnbGwKKyAgICAgICAgdGFr
ZSBmZXdlciBzbG93IHBhdGhzLgorCisgICAgICAgICogYm1hbGxvYy54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qOgorICAgICAgICAqIGJtYWxsb2MvQWxnb3JpdGhtLmg6CisgICAgICAgIChibWFs
bG9jOjpkaXZpZGVSb3VuZGluZ1VwKToKKworICAgICAgICAqIGJtYWxsb2MvQWxsb2NhdG9yLmNw
cDoKKyAgICAgICAgKGJtYWxsb2M6OkFsbG9jYXRvcjo6QWxsb2NhdG9yKTogVXBkYXRlZCBmb3Ig
aW50ZXJmYWNlIGNoYW5nZXMuCisKKyAgICAgICAgKGJtYWxsb2M6OkFsbG9jYXRvcjo6c2NhdmVu
Z2UpOiBTY2F2ZW5nZSBieSBvYmplY3QgaW5zdGVhZCBvZiBieSBsaW5lLgorICAgICAgICBOb3cg
dGhhdCB3ZSBtZXJnZSBsaW5lcywgaXQncyBub3QgY29udmVuaWVudCB0byBzY2F2ZW5nZSBieSBs
aW5lLgorCisgICAgICAgIChibWFsbG9jOjpBbGxvY2F0b3I6OmFsbG9jYXRlU21hbGxCdW1wUmFu
Z2UpOgorICAgICAgICAoYm1hbGxvYzo6QWxsb2NhdG9yOjphbGxvY2F0ZU1lZGl1bUJ1bXBSYW5n
ZSk6IEFsbG9jYXRlIHdob2xlIHJhbmdlcworICAgICAgICBpbnN0ZWFkIG9mIGluZGl2aWR1YWwg
bGluZXMuCisKKyAgICAgICAgKGJtYWxsb2M6OkFsbG9jYXRvcjo6YWxsb2NhdGVTbG93Q2FzZSk6
CisgICAgICAgIChibWFsbG9jOjpBbGxvY2F0b3I6OmFsbG9jYXRlU21hbGxMaW5lKTogRGVsZXRl
ZC4KKyAgICAgICAgKGJtYWxsb2M6OkFsbG9jYXRvcjo6YWxsb2NhdGVNZWRpdW1MaW5lKTogRGVs
ZXRlZC4KKyAgICAgICAgKGJtYWxsb2M6OkFsbG9jYXRvcjo6YWxsb2NhdGVNZWRpdW0pOiBEZWxl
dGVkLgorICAgICAgICAqIGJtYWxsb2MvQWxsb2NhdG9yLmg6CisgICAgICAgIChibWFsbG9jOjpB
bGxvY2F0b3I6OmFsbG9jYXRlRmFzdENhc2UpOiBGb2xkZWQgbWVkaXVtIGFsbG9jYXRpb25zCisg
ICAgICAgIGludG8gdGhlIHN0YW5kYXJkIGZhc3QgcGF0aCB3aXRoIHNtYWxsIGFsbG9jYXRpb25z
LiBTaW5jZSBhIEJ1bXBBbGxvY2F0b3IKKyAgICAgICAganVzdCBhbGxvY2F0ZXMgb3V0IG9mIGFu
IGFyYml0cmFyeSByYW5nZSwgaXQgZG9lc24ndCBuZWVkIHRvIGRpc3Rpbmd1aXNoCisgICAgICAg
IGJldHdlZW4gc21hbGwgYW5kIG1lZGl1bSBsaW5lcy4KKworICAgICAgICAqIGJtYWxsb2MvQnVt
cEFsbG9jYXRvci5oOgorICAgICAgICAoYm1hbGxvYzo6QnVtcEFsbG9jYXRvcjo6c2l6ZSk6Cisg
ICAgICAgIChibWFsbG9jOjpCdW1wQWxsb2NhdG9yOjpCdW1wQWxsb2NhdG9yKToKKyAgICAgICAg
KGJtYWxsb2M6OkJ1bXBBbGxvY2F0b3I6OmluaXQpOgorICAgICAgICAoYm1hbGxvYzo6QnVtcEFs
bG9jYXRvcjo6cmVmaWxsKToKKyAgICAgICAgKGJtYWxsb2M6OkJ1bXBBbGxvY2F0b3I6OmxpbmUp
OiBEZWxldGVkLiBObyBuZWVkIHRvIHRyYWNrIGxpbmUgaW5mb3JtYXRpb24KKyAgICAgICAgYW55
bW9yZTogdGhlIGhlYXAganVzdCBnaXZlcyB1cyBhIHBvaW50ZXIgYW5kIGEgcHJlLWNvbXB1dGVk
IG51bWJlciBvZgorICAgICAgICBvYmplY3RzLCBhbmQgd2UgYWxsb2NhdGUgdGhlbS4KKworICAg
ICAgICAqIGJtYWxsb2MvRGVhbGxvY2F0b3IuY3BwOgorICAgICAgICAoYm1hbGxvYzo6RGVhbGxv
Y2F0b3I6OnByb2Nlc3NPYmplY3RMb2cpOiBVcGRhdGVkIGZvciBpbnRlcmZhY2UgY2hhbmdlcy4K
KworICAgICAgICAqIGJtYWxsb2MvSGVhcC5jcHA6CisgICAgICAgIChibWFsbG9jOjpIZWFwOjpI
ZWFwKToKKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OmluaXRpYWxpemVMaW5lTWV0YWRhdGEpOiBQ
cmUtY29tcHV0ZSBwcmVjaXNlIG1ldGFkYXRhCisgICAgICAgIGRldGFpbGluZyB3aGVyZSBhbGwg
b2JqZWN0cyB3aWxsIGxpZSBpbiBtZW1vcnkuIEFmdGVyIHdlIG1lcmdlIHR3byBsaW5lcywKKyAg
ICAgICAgd2UgbWlnaHQgYWxsb2NhdGUgYW4gb2JqZWN0IHRoYXQgc3BhbnMgZnJvbSBvbmUgbGlu
ZSB0byB0aGUgbmV4dC4gVGhpcworICAgICAgICBtZXRhZGF0YSBkZXRhaWxzIHdoaWNoIGJpdHMg
b2YgbWVtb3J5IG92ZXJsYXAgaW4gdGhhdCB3YXksIGFuZCBob3cgdGhleQorICAgICAgICBvdmVy
bGFwLgorCisgICAgICAgIChibWFsbG9jOjpIZWFwOjpyZWZpbGxTbWFsbEJ1bXBSYW5nZUNhY2hl
KToKKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OnJlZmlsbE1lZGl1bUJ1bXBSYW5nZUNhY2hlKTog
U2NhbiBhIHdob2xlIHBhZ2UgYXQgYSB0aW1lLAorICAgICAgICBhbmQgbWVyZ2UgYWRqYWNlbnQg
ZnJlZSBsaW5lcyBpbnRvIEJ1bXBSYW5nZXMuCisKKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OmFs
bG9jYXRlU21hbGxQYWdlKToKKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OmFsbG9jYXRlTWVkaXVt
UGFnZSk6CisgICAgICAgIChibWFsbG9jOjpIZWFwOjpkZWFsbG9jYXRlU21hbGxMaW5lKToKKyAg
ICAgICAgKGJtYWxsb2M6OkhlYXA6OmRlYWxsb2NhdGVNZWRpdW1MaW5lKTogVHJhY2sgcGFnZXMg
cmF0aGVyIHRoYW4gbGluZXMsCisgICAgICAgIHNpbmNlIHdlIHNjYW4gZm9yIGZyZWUgbWVtb3J5
IGEgcGFnZSBhdCBhIHRpbWUuCisKKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OmFsbG9jYXRlU21h
bGxMaW5lU2xvd0Nhc2UpOiBEZWxldGVkLgorICAgICAgICAoYm1hbGxvYzo6SGVhcDo6YWxsb2Nh
dGVNZWRpdW1MaW5lU2xvd0Nhc2UpOiBEZWxldGVkLiBGb2xlZCBpbnRvIHRoZQorICAgICAgICBm
YXN0IHBhdGguCisKKyAgICAgICAgKiBibWFsbG9jL0hlYXAuaDoKKyAgICAgICAgKGJtYWxsb2M6
OkhlYXA6OmRlcmVmU21hbGxMaW5lKToKKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OmRlcmVmTWVk
aXVtTGluZSk6CisgICAgICAgIChibWFsbG9jOjpIZWFwOjpkZWFsbG9jYXRlU21hbGxMaW5lKTog
RGVsZXRlZC4KKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OmFsbG9jYXRlU21hbGxMaW5lKTogRGVs
ZXRlZC4KKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OmRlYWxsb2NhdGVNZWRpdW1MaW5lKTogRGVs
ZXRlZC4KKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OmFsbG9jYXRlTWVkaXVtTGluZSk6IERlbGV0
ZWQuIFVwZGF0ZWQgZm9yIGludGVyZmFjZSBjaGFuZ2VzLgorCisgICAgICAgICogYm1hbGxvYy9M
aW5lLmg6CisgICAgICAgIChibWFsbG9jOjpMaW5lPFRyYWl0cz46OnJlZik6CisgICAgICAgIChi
bWFsbG9jOjpMaW5lPFRyYWl0cz46OmRlcmVmKToKKyAgICAgICAgKGJtYWxsb2M6OkxpbmU8VHJh
aXRzPjo6Y29uY3VycmVudFJlZik6IERlbGV0ZWQuIFdlIGRvbid0IHBhc3MgYSBkZXJlZkNvdW50
CisgICAgICAgIGFueW1vcmUsIHNpbmNlIHdlIG9ubHkgZXZlciBkZXJlZiBieSAxIG5vdy4KKwor
ICAgICAgICAqIGJtYWxsb2MvTWVkaXVtQWxsb2NhdG9yLmg6CisgICAgICAgIChibWFsbG9jOjpN
ZWRpdW1BbGxvY2F0b3I6OmlzTnVsbCk6IERlbGV0ZWQuCisgICAgICAgIChibWFsbG9jOjpNZWRp
dW1BbGxvY2F0b3I6Ok1lZGl1bUFsbG9jYXRvcik6IERlbGV0ZWQuCisgICAgICAgIChibWFsbG9j
OjpNZWRpdW1BbGxvY2F0b3I6OmxpbmUpOiBEZWxldGVkLgorICAgICAgICAoYm1hbGxvYzo6TWVk
aXVtQWxsb2NhdG9yOjphbGxvY2F0ZSk6IERlbGV0ZWQuCisgICAgICAgIChibWFsbG9jOjpNZWRp
dW1BbGxvY2F0b3I6OmRlcmVmQ291bnQpOiBEZWxldGVkLgorICAgICAgICAoYm1hbGxvYzo6TWVk
aXVtQWxsb2NhdG9yOjpyZWZpbGwpOiBEZWxldGVkLgorICAgICAgICAoYm1hbGxvYzo6TWVkaXVt
QWxsb2NhdG9yOjpjbGVhcik6IERlbGV0ZWQuIERlbGV0ZWQgc29tZSBjb2RlIHRoYXQncworICAg
ICAgICBiZWVuIGRlYWQgZm9yIGEgd2hpbGUsIHNpbmNlIGl0IGRvZXNuJ3QgYnVpbGQgYW55bW9y
ZSB3aXRoIHRoaXMgcGF0Y2guCisKKyAgICAgICAgKiBibWFsbG9jL1BhZ2UuaDoKKyAgICAgICAg
KGJtYWxsb2M6OlBhZ2U6OnNpemVDbGFzcyk6CisgICAgICAgIChibWFsbG9jOjpQYWdlOjpzZXRT
aXplQ2xhc3MpOgorICAgICAgICAoYm1hbGxvYzo6UGFnZTo6c21hbGxTaXplQ2xhc3MpOiBEZWxl
dGVkLgorICAgICAgICAoYm1hbGxvYzo6UGFnZTo6c2V0U21hbGxTaXplQ2xhc3MpOiBEZWxldGVk
LiBSZW5hbWVkIHNldFNtYWxsU2l6ZUNsYXNzCisgICAgICAgIHRvIHNpemVDbGFzcywgc2luY2Ug
d2UgdXNlIGl0IGZvciBtZWRpdW0gc2l6ZXMgdG9vLgorCisgICAgICAgICogYm1hbGxvYy9TaXpl
cy5oOgorICAgICAgICAoYm1hbGxvYzo6U2l6ZXM6OnNpemVDbGFzcyk6CisgICAgICAgIChibWFs
bG9jOjpTaXplczo6b2JqZWN0U2l6ZSk6IFNocmFuayBsaW5lIHNpemVzIHRvIHNhdmUgbWVtb3J5
LgorCisgICAgICAgIChibWFsbG9jOjpTaXplczo6c21hbGxTaXplQ2xhc3NGb3IpOiBEZWxldGVk
LgorICAgICAgICAoYm1hbGxvYzo6U2l6ZXM6Om1lZGl1bVNpemVDbGFzc0Zvcik6IERlbGV0ZWQu
CisKKyAgICAgICAgKiBibWFsbG9jL2JtYWxsb2MuaDoKKyAgICAgICAgKGJtYWxsb2M6OmFwaTo6
cmVhbGxvYyk6IE5vdyB0aGF0IHdlIGhhdmUgcHJlY2lzZSBvYmplY3RzIHNpemVzLCByZWFsbG9j
CisgICAgICAgIGNhbiBiZSBhIGJpdCBtb3JlIHByZWNpc2UuIEl0IGFsc28gaGFzIHRvIGJlLCBz
aW5jZSB3ZSBjYW4ndCBndWFyYW50ZWUKKyAgICAgICAgdGhhdCBhbiBvYmplY3QgZW5kcyBhdCB0
aGUgZW5kIG9mIGEgbGluZSBhbnltb3JlLgorCiAyMDE0LTA5LTE5ICBEYW5pZWwgQmF0ZXMgIDxk
YWJhdGVzQGFwcGxlLmNvbT4KIAogICAgICAgICBBbHdheXMgYXNzdW1lIGludGVybmFsIFNESyB3
aGVuIGJ1aWxkaW5nIGNvbmZpZ3VyYXRpb24gUHJvZHVjdGlvbgpJbmRleDogU291cmNlL2JtYWxs
b2MvYm1hbGxvYy54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9ibWFsbG9jL2JtYWxsb2MueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTcz
NjczKQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CSh3b3JraW5nIGNvcHkpCkBAIC0xMSw2ICsxMSw4IEBACiAJCTE0MDAyNzRBMThGODlDMjMwMDEx
NUM5NyAvKiBWTUhlYXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDE0NEY3QkZDMThCRkM1MTcwMDM1MzdGMyAvKiBWTUhlYXAuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxNDAwMjc0QjE4Rjg5QzNEMDAx
MTVDOTcgLyogQm91bmRhcnlUYWdJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAxNDEwNUU3QjE4REJEN0FGMDAzQTEwNkUgLyogQm91bmRhcnlU
YWdJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMTQwMDI3NEMxOEY4OUMzRDAwMTE1Qzk3IC8qIFNlZ3JlZ2F0ZWRGcmVlTGlzdC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ2QkVFMUUxOEM4
NDFDNTAwMDJENUEyIC8qIFNlZ3JlZ2F0ZWRGcmVlTGlzdC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTE0MEZBMDAzMTlDRTQyOUMwMEZGRDNDOCAv
KiBCdW1wUmFuZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDE0MEZBMDAyMTlDRTQyOUMwMEZGRDNDOCAvKiBCdW1wUmFuZ2UuaCAqLzsgfTsKKwkJMTQw
RkEwMDUxOUNFNEI2ODAwRkZEM0M4IC8qIExpbmVNZXRhZGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQwRkEwMDQxOUNFNEI2ODAwRkZEM0M4IC8q
IExpbmVNZXRhZGF0YS5oICovOyB9OwogCQkxNDNDQjgxQzE5MDIyQkM5MDBCMTZBNDUgLyogU3Rh
dGljTXV0ZXguY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMTQzQ0I4MUExOTAyMkJDOTAwQjE2QTQ1IC8qIFN0YXRpY011dGV4LmNwcCAqLzsgfTsKIAkJ
MTQzQ0I4MUQxOTAyMkJDOTAwQjE2QTQ1IC8qIFN0YXRpY011dGV4LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDNDQjgxQjE5MDIyQkM5MDBCMTZBNDUg
LyogU3RhdGljTXV0ZXguaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkxNDQ4QzMwMDE4RjM3NTQ2MDA1MDI4MzkgLyogbWJtYWxsb2MuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ0OEMyRkYxOEYzNzU0
MzAwNTAyODM5IC8qIG1ibWFsbG9jLmNwcCAqLzsgfTsKQEAgLTI2LDcgKzI4LDYgQEAKIAkJMTRE
RDc4OTgxOEY0OEQ0QTAwOTUwNzAyIC8qIEFsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ1RjY4NTYxNzlEQzhDQTAwRDY1NTk4IC8qIEFs
bG9jYXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTE0REQ3ODk5MThGNDhENEEwMDk1MDcwMiAvKiBDYWNoZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ0NDY5RTUxN0E0NkJGRTAwRjlFQTFEIC8q
IENhY2hlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMTRERDc4OUExOEY0OEQ0QTAwOTUwNzAyIC8qIERlYWxsb2NhdG9yLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDVGNjg1QTE3OURDOTAyMDBENjU1
OTggLyogRGVhbGxvY2F0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwotCQkxNERENzg5QjE4RjQ4RDRBMDA5NTA3MDIgLyogTWVkaXVtQWxsb2NhdG9y
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDEzRTQ3
MDE4QTA2NjE3MDA1NDZENjggLyogTWVkaXVtQWxsb2NhdG9yLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTRERDc4OUMxOEY0OEQ0QTAwOTUwNzAy
IC8qIEJ1bXBBbGxvY2F0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDE0MTNFNDYyMTg5REUxQ0QwMDU0NkQ2OCAvKiBCdW1wQWxsb2NhdG9yLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTRERDc4QjQx
OEY0OEQ2QjAwOTUwNzAyIC8qIENodW5rLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAxNDdBQUE5NDE4Q0U1Q0E2MDAyMjAxRTQgLyogQ2h1bmsuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxNERENzhCNTE4
RjQ4RDZCMDA5NTA3MDIgLyogTGluZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMTREQTMyMDcxODg1RjlFNjAwNzI2OUUwIC8qIExpbmUuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNzIsMTIgKzczLDEz
IEBACiAvKiBFbmQgUEJYQ29udGFpbmVySXRlbVByb3h5IHNlY3Rpb24gKi8KIAogLyogQmVnaW4g
UEJYRmlsZVJlZmVyZW5jZSBzZWN0aW9uICovCisJCTE0MEZBMDAyMTlDRTQyOUMwMEZGRDNDOCAv
KiBCdW1wUmFuZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQnVtcFJhbmdl
Lmg7IHBhdGggPSBibWFsbG9jL0J1bXBSYW5nZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkxNDBGQTAwNDE5Q0U0QjY4MDBGRkQzQzggLyogTGluZU1ldGFkYXRhLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IExpbmVNZXRhZGF0YS5oOyBwYXRoID0gYm1hbGxvYy9M
aW5lTWV0YWRhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQxMDVFN0IxOERC
RDdBRjAwM0ExMDZFIC8qIEJvdW5kYXJ5VGFnSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBCb3VuZGFyeVRhZ0lubGluZXMuaDsgcGF0aCA9IGJtYWxsb2MvQm91bmRh
cnlUYWdJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0MTA1RTgzMThF
MTQzNzQwMDNBMTA2RSAvKiBPYmplY3RUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgbmFtZSA9IE9iamVjdFR5cGUuY3BwOyBwYXRoID0gYm1hbGxvYy9PYmplY3RUeXBlLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQxM0U0NjAxODlEQ0UxRTAwNTQ2RDY4
IC8qIElubGluZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBJbmxpbmUuaDsg
cGF0aCA9IGJtYWxsb2MvSW5saW5lLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0
MTNFNDYyMTg5REUxQ0QwMDU0NkQ2OCAvKiBCdW1wQWxsb2NhdG9yLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbGluZUVuZGluZyA9IDA7IG5hbWUgPSBCdW1wQWxsb2NhdG9yLmg7IHBhdGgg
PSBibWFsbG9jL0J1bXBBbGxvY2F0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MTQxM0U0NjgxODlFRURFNDAwNTQ2RDY4IC8qIEJBc3NlcnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gQkFzc2VydC5oOyBwYXRoID0gYm1hbGxvYy9CQXNzZXJ0Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTE0MTNFNDcwMThBMDY2MTcwMDU0NkQ2OCAvKiBNZWRp
dW1BbGxvY2F0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTWVkaXVtQWxs
b2NhdG9yLmg7IHBhdGggPSBibWFsbG9jL01lZGl1bUFsbG9jYXRvci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkxNDE3RjY0NTE4QjU0QTcwMDA3NkZBM0YgLyogQmVnaW5UYWcuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQmVnaW5UYWcuaDsgcGF0aCA9IGJtYWxs
b2MvQmVnaW5UYWcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQxN0Y2NDYxOEI1
NEE3MDAwNzZGQTNGIC8qIEVuZFRhZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBFbmRUYWcuaDsgcGF0aCA9IGJtYWxsb2MvRW5kVGFnLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTE0MTdGNjRGMThCNzI4MEMwMDc2RkEzRiAvKiBTeXNjYWxsLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFN5c2NhbGwuaDsgcGF0aCA9IGJtYWxsb2MvU3lzY2Fs
bC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjM1LDcgKzIzNyw2IEBACiAJCQkJ
MTQ0NDY5RTUxN0E0NkJGRTAwRjlFQTFEIC8qIENhY2hlLmggKi8sCiAJCQkJMTQ1RjY4NTkxNzlE
QzkwMjAwRDY1NTk4IC8qIERlYWxsb2NhdG9yLmNwcCAqLywKIAkJCQkxNDVGNjg1QTE3OURDOTAy
MDBENjU1OTggLyogRGVhbGxvY2F0b3IuaCAqLywKLQkJCQkxNDEzRTQ3MDE4QTA2NjE3MDA1NDZE
NjggLyogTWVkaXVtQWxsb2NhdG9yLmggKi8sCiAJCQkJMTQxM0U0NjIxODlERTFDRDAwNTQ2RDY4
IC8qIEJ1bXBBbGxvY2F0b3IuaCAqLywKIAkJCSk7CiAJCQluYW1lID0gY2FjaGU7CkBAIC0yNDQs
OCArMjQ1LDEwIEBACiAJCTE0RDlEQjRFMTdGMjg2NkUwMEVBQUI3OSAvKiBoZWFwICovID0gewog
CQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQkxNDBGQTAwMjE5Q0U0MjlD
MDBGRkQzQzggLyogQnVtcFJhbmdlLmggKi8sCiAJCQkJMTREQTMyMEUxODg3NUQ5RjAwNzI2OUUw
IC8qIEhlYXAuY3BwICovLAogCQkJCTE0REEzMjBDMTg4NzVCMDkwMDcyNjlFMCAvKiBIZWFwLmgg
Ki8sCisJCQkJMTQwRkEwMDQxOUNFNEI2ODAwRkZEM0M4IC8qIExpbmVNZXRhZGF0YS5oICovLAog
CQkJCTE0MTA1RTgzMThFMTQzNzQwMDNBMTA2RSAvKiBPYmplY3RUeXBlLmNwcCAqLywKIAkJCQkx
NDg1NjU2MDE4QTQzREJBMDBFRDY5NDIgLyogT2JqZWN0VHlwZS5oICovLAogCQkJCTE0NUY2ODc0
MTc5REY4NDEwMEQ2NTU5OCAvKiBTaXplcy5oICovLApAQCAtMjk2LDYgKzI5OSw3IEBACiAJCQkJ
MTRDOTE5QzkxOEZDQzU5RjAwMjhEQjQzIC8qIEJQbGF0Zm9ybS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMTRERDc4OEMxOEY0OENBRTAwOTUwNzAyIC8qIExhcmdlQ2h1bmsuaCBpbiBIZWFkZXJzICov
LAogCQkJCTE0REQ3ODkyMThGNDhDRkMwMDk1MDcwMiAvKiBFbmRUYWcuaCBpbiBIZWFkZXJzICov
LAorCQkJCTE0MEZBMDA1MTlDRTRCNjgwMEZGRDNDOCAvKiBMaW5lTWV0YWRhdGEuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTE0REQ3OENDMThGNDhENzUwMDk1MDcwMiAvKiBQZXJUaHJlYWQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTE0REQ3OEI0MThGNDhENkIwMDk1MDcwMiAvKiBDaHVuay5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMTRERDc4Q0ExOEY0OEQ3NTAwOTUwNzAyIC8qIE11dGV4LmggaW4gSGVh
ZGVycyAqLywKQEAgLTMwOSw3ICszMTMsNiBAQAogCQkJCTE0REQ3OENEMThGNDhENzUwMDk1MDcw
MiAvKiBSYW5nZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRERDc4OUMxOEY0OEQ0QTAwOTUwNzAy
IC8qIEJ1bXBBbGxvY2F0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0REQ3ODk5MThGNDhENEEw
MDk1MDcwMiAvKiBDYWNoZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMTRERDc4OUIxOEY0OEQ0QTAw
OTUwNzAyIC8qIE1lZGl1bUFsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRERDc4QkUx
OEY0OEQ2QjAwOTUwNzAyIC8qIFNtYWxsVHJhaXRzLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNERE
Nzg5MDE4RjQ4Q0VCMDA5NTA3MDIgLyogU2l6ZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0REQ3
OEM3MThGNDhENzUwMDk1MDcwMiAvKiBCQXNzZXJ0LmggaW4gSGVhZGVycyAqLywKQEAgLTMyMiw2
ICszMjUsNyBAQAogCQkJCTE0MDAyNzRBMThGODlDMjMwMDExNUM5NyAvKiBWTUhlYXAuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTE0MDAyNzQ5MThGODlDMTMwMDExNUM5NyAvKiBIZWFwLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkxNERENzhCODE4RjQ4RDZCMDA5NTA3MDIgLyogTWVkaXVtUGFnZS5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMTQwRkEwMDMxOUNFNDI5QzAwRkZEM0M4IC8qIEJ1bXBSYW5nZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMTRERDc4QzUxOEY0OEQ3NTAwOTUwNzAyIC8qIEFsZ29yaXRo
bS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRERDc4QkQxOEY0OEQ2QjAwOTUwNzAyIC8qIFNtYWxs
UGFnZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQwMDI3NEIxOEY4OUMzRDAwMTE1Qzk3IC8qIEJv
dW5kYXJ5VGFnSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvYm1hbGxvYy9i
bWFsbG9jL0FsZ29yaXRobS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2Mv
QWxnb3JpdGhtLmgJKHJldmlzaW9uIDE3MzY3MykKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2Mv
QWxnb3JpdGhtLmgJKHdvcmtpbmcgY29weSkKQEAgLTc0LDYgKzc0LDE0IEBAIHRlbXBsYXRlPHNp
emVfdCBkaXZpc29yLCB0eXBlbmFtZSBUPiBpbmwKICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2Fz
dDxUPihtYXNrKHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pih4KSwgfihkaXZpc29yIC0gMXVs
KSkpOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIGRpdmlkZVJvdW5kaW5nVXAoVCBu
dW1lcmF0b3IsIFQgZGVub21pbmF0b3IsIFQmIHF1b3RpZW50LCBUJiByZW1haW5kZXIpCit7Cisg
ICAgcXVvdGllbnQgPSBudW1lcmF0b3IgLyBkZW5vbWluYXRvcjsKKyAgICByZW1haW5kZXIgPSBu
dW1lcmF0b3IgJSBkZW5vbWluYXRvcjsKKyAgICBpZiAocmVtYWluZGVyKQorICAgICAgICBxdW90
aWVudCArPSAxOworfQorCiAvLyBWZXJzaW9uIG9mIHNpemVvZiB0aGF0IHJldHVybnMgMCBmb3Ig
ZW1wdHkgY2xhc3Nlcy4KIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIGNvbnN0ZXhwciBz
aXplX3Qgc2l6ZU9mKCkKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQWxsb2NhdG9yLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0FsbG9jYXRvci5jcHAJKHJl
dmlzaW9uIDE3MzY3NSkKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQWxsb2NhdG9yLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzgsMTEgKzM4LDExIEBAIG5hbWVzcGFjZSBibWFsbG9jIHsKIEFs
bG9jYXRvcjo6QWxsb2NhdG9yKERlYWxsb2NhdG9yJiBkZWFsbG9jYXRvcikKICAgICA6IG1fZGVh
bGxvY2F0b3IoZGVhbGxvY2F0b3IpCiB7Ci0gICAgZm9yICh1bnNpZ25lZCBzaG9ydCBpID0gYWxp
Z25tZW50OyBpIDw9IHNtYWxsTWF4OyBpICs9IGFsaWdubWVudCkKLSAgICAgICAgbV9zbWFsbEFs
bG9jYXRvcnNbc21hbGxTaXplQ2xhc3NGb3IoaSldLmluaXQ8U21hbGxMaW5lPihpKTsKKyAgICBm
b3IgKHVuc2lnbmVkIHNob3J0IHNpemUgPSBhbGlnbm1lbnQ7IHNpemUgPD0gc21hbGxNYXg7IHNp
emUgKz0gYWxpZ25tZW50KQorICAgICAgICBtX2J1bXBBbGxvY2F0b3JzW3NpemVDbGFzcyhzaXpl
KV0uaW5pdChzaXplKTsKIAotICAgIGZvciAodW5zaWduZWQgc2hvcnQgaSA9IHNtYWxsTWF4ICsg
YWxpZ25tZW50OyBpIDw9IG1lZGl1bU1heDsgaSArPSBhbGlnbm1lbnQpCi0gICAgICAgIG1fbWVk
aXVtQWxsb2NhdG9yc1ttZWRpdW1TaXplQ2xhc3NGb3IoaSldLmluaXQ8TWVkaXVtTGluZT4oaSk7
CisgICAgZm9yICh1bnNpZ25lZCBzaG9ydCBzaXplID0gc21hbGxNYXggKyBhbGlnbm1lbnQ7IHNp
emUgPD0gbWVkaXVtTWF4OyBzaXplICs9IGFsaWdubWVudCkKKyAgICAgICAgbV9idW1wQWxsb2Nh
dG9yc1tzaXplQ2xhc3Moc2l6ZSldLmluaXQoc2l6ZSk7CiB9CiAKIEFsbG9jYXRvcjo6fkFsbG9j
YXRvcigpCkBAIC01Miw1NCArNTIsNTMgQEAgQWxsb2NhdG9yOjp+QWxsb2NhdG9yKCkKIAogdm9p
ZCBBbGxvY2F0b3I6OnNjYXZlbmdlKCkKIHsKLSAgICBmb3IgKGF1dG8mIGFsbG9jYXRvciA6IG1f
c21hbGxBbGxvY2F0b3JzKSB7Ci0gICAgICAgIHdoaWxlIChhbGxvY2F0b3IuY2FuQWxsb2NhdGUo
KSkKLSAgICAgICAgICAgIG1fZGVhbGxvY2F0b3IuZGVhbGxvY2F0ZShhbGxvY2F0b3IuYWxsb2Nh
dGUoKSk7CisgICAgZm9yICh1bnNpZ25lZCBzaG9ydCBpID0gYWxpZ25tZW50OyBpIDw9IHNtYWxs
TWF4OyBpICs9IGFsaWdubWVudCkgeworICAgICAgICBCdW1wQWxsb2NhdG9yJiBhbGxvY2F0b3Ig
PSBtX2J1bXBBbGxvY2F0b3JzW3NpemVDbGFzcyhpKV07CisgICAgICAgIHdoaWxlIChhbGxvY2F0
b3IuY2FuQWxsb2NhdGUoKSkgeworICAgICAgICAgICAgd2hpbGUgKGFsbG9jYXRvci5jYW5BbGxv
Y2F0ZSgpKQorICAgICAgICAgICAgICAgIG1fZGVhbGxvY2F0b3IuZGVhbGxvY2F0ZShhbGxvY2F0
b3IuYWxsb2NhdGUoKSk7CisKKyAgICAgICAgICAgIFNtYWxsQnVtcFJhbmdlQ2FjaGUmIGJ1bXBS
YW5nZUNhY2hlID0gbV9zbWFsbEJ1bXBSYW5nZUNhY2hlc1tzaXplQ2xhc3MoaSldOworICAgICAg
ICAgICAgaWYgKGJ1bXBSYW5nZUNhY2hlLnNpemUoKSkKKyAgICAgICAgICAgICAgICBhbGxvY2F0
b3IucmVmaWxsKGJ1bXBSYW5nZUNhY2hlLnBvcCgpKTsKKyAgICAgICAgfQogICAgICAgICBhbGxv
Y2F0b3IuY2xlYXIoKTsKICAgICB9CiAKLSAgICBmb3IgKGF1dG8mIGFsbG9jYXRvciA6IG1fbWVk
aXVtQWxsb2NhdG9ycykgewotICAgICAgICB3aGlsZSAoYWxsb2NhdG9yLmNhbkFsbG9jYXRlKCkp
Ci0gICAgICAgICAgICBtX2RlYWxsb2NhdG9yLmRlYWxsb2NhdGUoYWxsb2NhdG9yLmFsbG9jYXRl
KCkpOworICAgIGZvciAodW5zaWduZWQgc2hvcnQgaSA9IHNtYWxsTWF4ICsgYWxpZ25tZW50OyBp
IDw9IG1lZGl1bU1heDsgaSArPSBhbGlnbm1lbnQpIHsKKyAgICAgICAgQnVtcEFsbG9jYXRvciYg
YWxsb2NhdG9yID0gbV9idW1wQWxsb2NhdG9yc1tzaXplQ2xhc3MoaSldOworICAgICAgICB3aGls
ZSAoYWxsb2NhdG9yLmNhbkFsbG9jYXRlKCkpIHsKKyAgICAgICAgICAgIHdoaWxlIChhbGxvY2F0
b3IuY2FuQWxsb2NhdGUoKSkKKyAgICAgICAgICAgICAgICBtX2RlYWxsb2NhdG9yLmRlYWxsb2Nh
dGUoYWxsb2NhdG9yLmFsbG9jYXRlKCkpOworCisgICAgICAgICAgICBNZWRpdW1CdW1wUmFuZ2VD
YWNoZSYgYnVtcFJhbmdlQ2FjaGUgPSBtX21lZGl1bUJ1bXBSYW5nZUNhY2hlc1tzaXplQ2xhc3Mo
aSldOworICAgICAgICAgICAgaWYgKGJ1bXBSYW5nZUNhY2hlLnNpemUoKSkKKyAgICAgICAgICAg
ICAgICBhbGxvY2F0b3IucmVmaWxsKGJ1bXBSYW5nZUNhY2hlLnBvcCgpKTsKKyAgICAgICAgfQog
ICAgICAgICBhbGxvY2F0b3IuY2xlYXIoKTsKICAgICB9Ci0KLSAgICBzdGQ6OmxvY2tfZ3VhcmQ8
U3RhdGljTXV0ZXg+IGxvY2soUGVyUHJvY2VzczxIZWFwPjo6bXV0ZXgoKSk7Ci0gICAgSGVhcCog
aGVhcCA9IFBlclByb2Nlc3M8SGVhcD46OmdldEZhc3RDYXNlKCk7Ci0gICAgCi0gICAgZm9yIChh
dXRvJiBzbWFsbExpbmVDYWNoZSA6IG1fc21hbGxMaW5lQ2FjaGVzKSB7Ci0gICAgICAgIHdoaWxl
IChzbWFsbExpbmVDYWNoZS5zaXplKCkpCi0gICAgICAgICAgICBoZWFwLT5kZWFsbG9jYXRlU21h
bGxMaW5lKGxvY2ssIHNtYWxsTGluZUNhY2hlLnBvcCgpKTsKLSAgICB9Ci0gICAgd2hpbGUgKG1f
bWVkaXVtTGluZUNhY2hlLnNpemUoKSkKLSAgICAgICAgaGVhcC0+ZGVhbGxvY2F0ZU1lZGl1bUxp
bmUobG9jaywgbV9tZWRpdW1MaW5lQ2FjaGUucG9wKCkpOwogfQogCi1TbWFsbExpbmUqIEFsbG9j
YXRvcjo6YWxsb2NhdGVTbWFsbExpbmUoc2l6ZV90IHNtYWxsU2l6ZUNsYXNzKQorQnVtcFJhbmdl
IEFsbG9jYXRvcjo6YWxsb2NhdGVTbWFsbEJ1bXBSYW5nZShzaXplX3Qgc2l6ZUNsYXNzKQogewot
ICAgIFNtYWxsTGluZUNhY2hlJiBzbWFsbExpbmVDYWNoZSA9IG1fc21hbGxMaW5lQ2FjaGVzW3Nt
YWxsU2l6ZUNsYXNzXTsKLSAgICBpZiAoIXNtYWxsTGluZUNhY2hlLnNpemUoKSkgeworICAgIFNt
YWxsQnVtcFJhbmdlQ2FjaGUmIGJ1bXBSYW5nZUNhY2hlID0gbV9zbWFsbEJ1bXBSYW5nZUNhY2hl
c1tzaXplQ2xhc3NdOworICAgIGlmICghYnVtcFJhbmdlQ2FjaGUuc2l6ZSgpKSB7CiAgICAgICAg
IHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4gbG9jayhQZXJQcm9jZXNzPEhlYXA+OjptdXRl
eCgpKTsKLSAgICAgICAgSGVhcCogaGVhcCA9IFBlclByb2Nlc3M8SGVhcD46OmdldEZhc3RDYXNl
KCk7Ci0KLSAgICAgICAgd2hpbGUgKHNtYWxsTGluZUNhY2hlLnNpemUoKSAhPSBzbWFsbExpbmVD
YWNoZS5jYXBhY2l0eSgpKQotICAgICAgICAgICAgc21hbGxMaW5lQ2FjaGUucHVzaChoZWFwLT5h
bGxvY2F0ZVNtYWxsTGluZShsb2NrLCBzbWFsbFNpemVDbGFzcykpOworICAgICAgICBQZXJQcm9j
ZXNzPEhlYXA+OjpnZXRGYXN0Q2FzZSgpLT5yZWZpbGxTbWFsbEJ1bXBSYW5nZUNhY2hlKGxvY2ss
IHNpemVDbGFzcywgYnVtcFJhbmdlQ2FjaGUpOwogICAgIH0KIAotICAgIHJldHVybiBzbWFsbExp
bmVDYWNoZS5wb3AoKTsKKyAgICByZXR1cm4gYnVtcFJhbmdlQ2FjaGUucG9wKCk7CiB9CiAKLU1l
ZGl1bUxpbmUqIEFsbG9jYXRvcjo6YWxsb2NhdGVNZWRpdW1MaW5lKCkKK0J1bXBSYW5nZSBBbGxv
Y2F0b3I6OmFsbG9jYXRlTWVkaXVtQnVtcFJhbmdlKHNpemVfdCBzaXplQ2xhc3MpCiB7Ci0gICAg
aWYgKCFtX21lZGl1bUxpbmVDYWNoZS5zaXplKCkpIHsKKyAgICBNZWRpdW1CdW1wUmFuZ2VDYWNo
ZSYgYnVtcFJhbmdlQ2FjaGUgPSBtX21lZGl1bUJ1bXBSYW5nZUNhY2hlc1tzaXplQ2xhc3NdOwor
ICAgIGlmICghYnVtcFJhbmdlQ2FjaGUuc2l6ZSgpKSB7CiAgICAgICAgIHN0ZDo6bG9ja19ndWFy
ZDxTdGF0aWNNdXRleD4gbG9jayhQZXJQcm9jZXNzPEhlYXA+OjptdXRleCgpKTsKLSAgICAgICAg
SGVhcCogaGVhcCA9IFBlclByb2Nlc3M8SGVhcD46OmdldEZhc3RDYXNlKCk7Ci0KLSAgICAgICAg
d2hpbGUgKG1fbWVkaXVtTGluZUNhY2hlLnNpemUoKSAhPSBtX21lZGl1bUxpbmVDYWNoZS5jYXBh
Y2l0eSgpKQotICAgICAgICAgICAgbV9tZWRpdW1MaW5lQ2FjaGUucHVzaChoZWFwLT5hbGxvY2F0
ZU1lZGl1bUxpbmUobG9jaykpOworICAgICAgICBQZXJQcm9jZXNzPEhlYXA+OjpnZXRGYXN0Q2Fz
ZSgpLT5yZWZpbGxNZWRpdW1CdW1wUmFuZ2VDYWNoZShsb2NrLCBzaXplQ2xhc3MsIGJ1bXBSYW5n
ZUNhY2hlKTsKICAgICB9CiAKLSAgICByZXR1cm4gbV9tZWRpdW1MaW5lQ2FjaGUucG9wKCk7Cisg
ICAgcmV0dXJuIGJ1bXBSYW5nZUNhY2hlLnBvcCgpOwogfQogCiB2b2lkKiBBbGxvY2F0b3I6OmFs
bG9jYXRlTGFyZ2Uoc2l6ZV90IHNpemUpCkBAIC0xMTYsMzAgKzExNSwyNyBAQCB2b2lkKiBBbGxv
Y2F0b3I6OmFsbG9jYXRlWExhcmdlKHNpemVfdCBzCiAgICAgcmV0dXJuIFBlclByb2Nlc3M8SGVh
cD46OmdldEZhc3RDYXNlKCktPmFsbG9jYXRlWExhcmdlKGxvY2ssIHNpemUpOwogfQogCi12b2lk
KiBBbGxvY2F0b3I6OmFsbG9jYXRlTWVkaXVtKHNpemVfdCBzaXplKQotewotICAgIEJ1bXBBbGxv
Y2F0b3ImIGFsbG9jYXRvciA9IG1fbWVkaXVtQWxsb2NhdG9yc1ttZWRpdW1TaXplQ2xhc3NGb3Io
c2l6ZSldOwotCi0gICAgaWYgKCFhbGxvY2F0b3IuY2FuQWxsb2NhdGUoKSkKLSAgICAgICAgYWxs
b2NhdG9yLnJlZmlsbChhbGxvY2F0ZU1lZGl1bUxpbmUoKSk7Ci0gICAgcmV0dXJuIGFsbG9jYXRv
ci5hbGxvY2F0ZSgpOwotfQotCiB2b2lkKiBBbGxvY2F0b3I6OmFsbG9jYXRlU2xvd0Nhc2Uoc2l6
ZV90IHNpemUpCiB7CiBJRl9ERUJVRygKICAgICB2b2lkKiBkdW1teTsKICAgICBCQVNTRVJUKCFh
bGxvY2F0ZUZhc3RDYXNlKHNpemUsIGR1bW15KSk7CiApCi0gICAgaWYgKHNpemUgPD0gc21hbGxN
YXgpIHsKLSAgICAgICAgc2l6ZV90IHNtYWxsU2l6ZUNsYXNzID0gc21hbGxTaXplQ2xhc3NGb3Io
c2l6ZSk7Ci0gICAgICAgIEJ1bXBBbGxvY2F0b3ImIGFsbG9jYXRvciA9IG1fc21hbGxBbGxvY2F0
b3JzW3NtYWxsU2l6ZUNsYXNzXTsKLSAgICAgICAgYWxsb2NhdG9yLnJlZmlsbChhbGxvY2F0ZVNt
YWxsTGluZShzbWFsbFNpemVDbGFzcykpOwotICAgICAgICByZXR1cm4gYWxsb2NhdG9yLmFsbG9j
YXRlKCk7Ci0gICAgfQogCi0gICAgaWYgKHNpemUgPD0gbWVkaXVtTWF4KQotICAgICAgICByZXR1
cm4gYWxsb2NhdGVNZWRpdW0oc2l6ZSk7CisgICAgaWYgKHNpemUgPD0gbWVkaXVtTWF4KSB7Cisg
ICAgICAgIHNpemVfdCBzaXplQ2xhc3MgPSBibWFsbG9jOjpzaXplQ2xhc3Moc2l6ZSk7CisgICAg
ICAgIEJ1bXBBbGxvY2F0b3ImIGFsbG9jYXRvciA9IG1fYnVtcEFsbG9jYXRvcnNbc2l6ZUNsYXNz
XTsKKworICAgICAgICBpZiAoYWxsb2NhdG9yLnNpemUoKSA8PSBzbWFsbE1heCkgeworICAgICAg
ICAgICAgYWxsb2NhdG9yLnJlZmlsbChhbGxvY2F0ZVNtYWxsQnVtcFJhbmdlKHNpemVDbGFzcykp
OworICAgICAgICAgICAgcmV0dXJuIGFsbG9jYXRvci5hbGxvY2F0ZSgpOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKGFsbG9jYXRvci5zaXplKCkgPD0gbWVkaXVtTWF4KSB7CisgICAgICAgICAg
ICBhbGxvY2F0b3IucmVmaWxsKGFsbG9jYXRlTWVkaXVtQnVtcFJhbmdlKHNpemVDbGFzcykpOwor
ICAgICAgICAgICAgcmV0dXJuIGFsbG9jYXRvci5hbGxvY2F0ZSgpOworICAgICAgICB9CisgICAg
fQogICAgIAogICAgIGlmIChzaXplIDw9IGxhcmdlTWF4KQogICAgICAgICByZXR1cm4gYWxsb2Nh
dGVMYXJnZShzaXplKTsKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQWxsb2NhdG9yLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9BbGxvY2F0b3IuaAkocmV2aXNp
b24gMTczNjc1KQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9BbGxvY2F0b3IuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjgsNyArMjgsNyBAQAogCiAjaW5jbHVkZSAiQnVtcEFsbG9jYXRvci5oIgog
I2luY2x1ZGUgIkZpeGVkVmVjdG9yLmgiCi0jaW5jbHVkZSAiTWVkaXVtQWxsb2NhdG9yLmgiCisj
aW5jbHVkZSAiSGVhcC5oIgogI2luY2x1ZGUgIlNpemVzLmgiCiAjaW5jbHVkZSAiU21hbGxMaW5l
LmgiCiAjaW5jbHVkZSA8YXJyYXk+CkBAIC01MSwzMyArNTEsMjkgQEAgcHVibGljOgogICAgIHZv
aWQgc2NhdmVuZ2UoKTsKIAogcHJpdmF0ZToKLSAgICB0eXBlZGVmIEZpeGVkVmVjdG9yPFNtYWxs
TGluZSosIHNtYWxsTGluZUNhY2hlQ2FwYWNpdHk+IFNtYWxsTGluZUNhY2hlOwotICAgIHR5cGVk
ZWYgRml4ZWRWZWN0b3I8TWVkaXVtTGluZSosIG1lZGl1bUxpbmVDYWNoZUNhcGFjaXR5PiBNZWRp
dW1MaW5lQ2FjaGU7Ci0KICAgICB2b2lkKiBhbGxvY2F0ZUZhc3RDYXNlKEJ1bXBBbGxvY2F0b3Im
KTsKIAogICAgIHZvaWQqIGFsbG9jYXRlTWVkaXVtKHNpemVfdCk7CiAgICAgdm9pZCogYWxsb2Nh
dGVMYXJnZShzaXplX3QpOwogICAgIHZvaWQqIGFsbG9jYXRlWExhcmdlKHNpemVfdCk7CiAgICAg
Ci0gICAgU21hbGxMaW5lKiBhbGxvY2F0ZVNtYWxsTGluZShzaXplX3Qgc21hbGxTaXplQ2xhc3Mp
OwotICAgIE1lZGl1bUxpbmUqIGFsbG9jYXRlTWVkaXVtTGluZSgpOworICAgIEJ1bXBSYW5nZSBh
bGxvY2F0ZVNtYWxsQnVtcFJhbmdlKHNpemVfdCBzaXplQ2xhc3MpOworICAgIEJ1bXBSYW5nZSBh
bGxvY2F0ZU1lZGl1bUJ1bXBSYW5nZShzaXplX3Qgc2l6ZUNsYXNzKTsKICAgICAKICAgICBEZWFs
bG9jYXRvciYgbV9kZWFsbG9jYXRvcjsKIAotICAgIHN0ZDo6YXJyYXk8QnVtcEFsbG9jYXRvciwg
c21hbGxNYXggLyBhbGlnbm1lbnQ+IG1fc21hbGxBbGxvY2F0b3JzOwotICAgIHN0ZDo6YXJyYXk8
QnVtcEFsbG9jYXRvciwgbWVkaXVtTWF4IC8gYWxpZ25tZW50PiBtX21lZGl1bUFsbG9jYXRvcnM7
CisgICAgc3RkOjphcnJheTxCdW1wQWxsb2NhdG9yLCBtZWRpdW1NYXggLyBhbGlnbm1lbnQ+IG1f
YnVtcEFsbG9jYXRvcnM7CiAKLSAgICBzdGQ6OmFycmF5PFNtYWxsTGluZUNhY2hlLCBzbWFsbE1h
eCAvIGFsaWdubWVudD4gbV9zbWFsbExpbmVDYWNoZXM7Ci0gICAgTWVkaXVtTGluZUNhY2hlIG1f
bWVkaXVtTGluZUNhY2hlOworICAgIHN0ZDo6YXJyYXk8U21hbGxCdW1wUmFuZ2VDYWNoZSwgc21h
bGxNYXggLyBhbGlnbm1lbnQ+IG1fc21hbGxCdW1wUmFuZ2VDYWNoZXM7CisgICAgc3RkOjphcnJh
eTxNZWRpdW1CdW1wUmFuZ2VDYWNoZSwgbWVkaXVtTWF4IC8gYWxpZ25tZW50PiBtX21lZGl1bUJ1
bXBSYW5nZUNhY2hlczsKIH07CiAKIGlubGluZSBib29sIEFsbG9jYXRvcjo6YWxsb2NhdGVGYXN0
Q2FzZShzaXplX3Qgc2l6ZSwgdm9pZComIG9iamVjdCkKIHsKLSAgICBpZiAoc2l6ZSA+IHNtYWxs
TWF4KQorICAgIGlmIChzaXplID4gbWVkaXVtTWF4KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
LSAgICBCdW1wQWxsb2NhdG9yJiBhbGxvY2F0b3IgPSBtX3NtYWxsQWxsb2NhdG9yc1tzbWFsbFNp
emVDbGFzc0ZvcihzaXplKV07CisgICAgQnVtcEFsbG9jYXRvciYgYWxsb2NhdG9yID0gbV9idW1w
QWxsb2NhdG9yc1tzaXplQ2xhc3Moc2l6ZSldOwogICAgIGlmICghYWxsb2NhdG9yLmNhbkFsbG9j
YXRlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApJbmRleDogU291cmNlL2JtYWxsb2MvYm1h
bGxvYy9CdW1wQWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxv
Yy9CdW1wQWxsb2NhdG9yLmgJKHJldmlzaW9uIDE3MzY3MykKKysrIFNvdXJjZS9ibWFsbG9jL2Jt
YWxsb2MvQnVtcEFsbG9jYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAj
ZGVmaW5lIEJ1bXBBbGxvY2F0b3JfaAogCiAjaW5jbHVkZSAiQkFzc2VydC5oIgorI2luY2x1ZGUg
IkJ1bXBSYW5nZS5oIgogI2luY2x1ZGUgIk9iamVjdFR5cGUuaCIKIAogbmFtZXNwYWNlIGJtYWxs
b2MgewpAQCAtMzYsNDkgKzM3LDM4IEBAIG5hbWVzcGFjZSBibWFsbG9jIHsKIGNsYXNzIEJ1bXBB
bGxvY2F0b3IgewogcHVibGljOgogICAgIEJ1bXBBbGxvY2F0b3IoKTsKLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBMaW5lPiB2b2lkIGluaXQoc2l6ZV90KTsKKyAgICB2b2lkIGluaXQoc2l6ZV90KTsK
KyAgICAKKyAgICBzaXplX3Qgc2l6ZSgpIHsgcmV0dXJuIG1fc2l6ZTsgfQogICAgIAogICAgIGJv
b2wgaXNOdWxsKCkgeyByZXR1cm4gIW1fcHRyOyB9Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgTGlu
ZT4gTGluZSogbGluZSgpOworICAgIHZvaWQgY2xlYXIoKTsKIAogICAgIGJvb2wgY2FuQWxsb2Nh
dGUoKSB7IHJldHVybiAhIW1fcmVtYWluaW5nOyB9CiAgICAgdm9pZCogYWxsb2NhdGUoKTsKIAot
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIExpbmU+IHZvaWQgcmVmaWxsKExpbmUqKTsKLSAgICB2b2lk
IGNsZWFyKCk7CisgICAgdm9pZCByZWZpbGwoY29uc3QgQnVtcFJhbmdlJik7CiAKIHByaXZhdGU6
CiAgICAgdm9pZCB2YWxpZGF0ZSh2b2lkKik7CiAKICAgICBjaGFyKiBtX3B0cjsKICAgICB1bnNp
Z25lZCBzaG9ydCBtX3NpemU7Ci0gICAgdW5zaWduZWQgY2hhciBtX3JlbWFpbmluZzsKLSAgICB1
bnNpZ25lZCBjaGFyIG1fbWF4T2JqZWN0Q291bnQ7CisgICAgdW5zaWduZWQgc2hvcnQgbV9yZW1h
aW5pbmc7CiB9OwogCiBpbmxpbmUgQnVtcEFsbG9jYXRvcjo6QnVtcEFsbG9jYXRvcigpCiAgICAg
OiBtX3B0cigpCiAgICAgLCBtX3NpemUoKQogICAgICwgbV9yZW1haW5pbmcoKQotICAgICwgbV9t
YXhPYmplY3RDb3VudCgpCiB7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIExpbmU+CiBpbmxpbmUg
dm9pZCBCdW1wQWxsb2NhdG9yOjppbml0KHNpemVfdCBzaXplKQogewotICAgIEJBU1NFUlQoc2l6
ZSA+PSBMaW5lOjptaW5pbXVtT2JqZWN0U2l6ZSk7Ci0KICAgICBtX3B0ciA9IG51bGxwdHI7CiAg
ICAgbV9zaXplID0gc2l6ZTsKICAgICBtX3JlbWFpbmluZyA9IDA7Ci0gICAgbV9tYXhPYmplY3RD
b3VudCA9IExpbmU6OmxpbmVTaXplIC8gc2l6ZTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgTGlu
ZT4KLWlubGluZSBMaW5lKiBCdW1wQWxsb2NhdG9yOjpsaW5lKCkKLXsKLSAgICByZXR1cm4gTGlu
ZTo6Z2V0KGNhbkFsbG9jYXRlKCkgPyBtX3B0ciA6IG1fcHRyIC0gMSk7CiB9CiAKIGlubGluZSB2
b2lkIEJ1bXBBbGxvY2F0b3I6OnZhbGlkYXRlKHZvaWQqIHB0cikKQEAgLTEwNCwxMyArOTQsMTEg
QEAgaW5saW5lIHZvaWQqIEJ1bXBBbGxvY2F0b3I6OmFsbG9jYXRlKCkKICAgICByZXR1cm4gcmVz
dWx0OwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBMaW5lPgotaW5saW5lIHZvaWQgQnVtcEFsbG9j
YXRvcjo6cmVmaWxsKExpbmUqIGxpbmUpCitpbmxpbmUgdm9pZCBCdW1wQWxsb2NhdG9yOjpyZWZp
bGwoY29uc3QgQnVtcFJhbmdlJiBidW1wUmFuZ2UpCiB7CiAgICAgQkFTU0VSVCghY2FuQWxsb2Nh
dGUoKSk7Ci0gICAgbGluZS0+Y29uY3VycmVudFJlZihtX21heE9iamVjdENvdW50KTsKLSAgICBt
X3B0ciA9IGxpbmUtPmJlZ2luKCk7Ci0gICAgbV9yZW1haW5pbmcgPSBtX21heE9iamVjdENvdW50
OworICAgIG1fcHRyID0gYnVtcFJhbmdlLmJlZ2luOworICAgIG1fcmVtYWluaW5nID0gYnVtcFJh
bmdlLm9iamVjdENvdW50OwogfQogCiBpbmxpbmUgdm9pZCBCdW1wQWxsb2NhdG9yOjpjbGVhcigp
CkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0RlYWxsb2NhdG9yLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0RlYWxsb2NhdG9yLmNwcAkocmV2aXNpb24gMTcz
Njc1KQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9EZWFsbG9jYXRvci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTcyLDE1ICs3MiwxMSBAQCB2b2lkIERlYWxsb2NhdG9yOjpwcm9jZXNzT2JqZWN0
TG9nKCkKICAgICBmb3IgKGF1dG8gb2JqZWN0IDogbV9vYmplY3RMb2cpIHsKICAgICAgICAgaWYg
KGlzU21hbGwob2JqZWN0KSkgewogICAgICAgICAgICAgU21hbGxMaW5lKiBsaW5lID0gU21hbGxM
aW5lOjpnZXQob2JqZWN0KTsKLSAgICAgICAgICAgIGlmICghbGluZS0+ZGVyZWYobG9jaykpCi0g
ICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBoZWFwLT5kZWFsbG9jYXRlU21h
bGxMaW5lKGxvY2ssIGxpbmUpOworICAgICAgICAgICAgaGVhcC0+ZGVyZWZTbWFsbExpbmUobG9j
aywgbGluZSk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBCQVNTRVJUKGlzU21hbGxP
ck1lZGl1bShvYmplY3QpKTsKKyAgICAgICAgICAgIEJBU1NFUlQoaXNNZWRpdW0ob2JqZWN0KSk7
CiAgICAgICAgICAgICBNZWRpdW1MaW5lKiBsaW5lID0gTWVkaXVtTGluZTo6Z2V0KG9iamVjdCk7
Ci0gICAgICAgICAgICBpZiAoIWxpbmUtPmRlcmVmKGxvY2spKQotICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICAgICAgaGVhcC0+ZGVhbGxvY2F0ZU1lZGl1bUxpbmUobG9jaywgbGlu
ZSk7CisgICAgICAgICAgICBoZWFwLT5kZXJlZk1lZGl1bUxpbmUobG9jaywgbGluZSk7CiAgICAg
ICAgIH0KICAgICB9CiAgICAgCkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0hlYXAuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSGVhcC5jcHAJKHJldmlzaW9u
IDE3MzY3MykKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSGVhcC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTUwLDYgKzUwLDQyIEBAIEhlYXA6OkhlYXAoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011
dGV4PiYKICAgICA6IG1faXNBbGxvY2F0aW5nUGFnZXMoZmFsc2UpCiAgICAgLCBtX3NjYXZlbmdl
cigqdGhpcywgJkhlYXA6OmNvbmN1cnJlbnRTY2F2ZW5nZSkKIHsKKyAgICBpbml0aWFsaXplTGlu
ZU1ldGFkYXRhKCk7Cit9CisKK3ZvaWQgSGVhcDo6aW5pdGlhbGl6ZUxpbmVNZXRhZGF0YSgpCit7
CisgICAgZm9yICh1bnNpZ25lZCBzaG9ydCBzaXplID0gYWxpZ25tZW50OyBzaXplIDw9IHNtYWxs
TWF4OyBzaXplICs9IGFsaWdubWVudCkgeworICAgICAgICB1bnNpZ25lZCBzaG9ydCBzdGFydE9m
ZnNldCA9IDA7CisgICAgICAgIGZvciAoc2l6ZV90IGxpbmVOdW1iZXIgPSAwOyBsaW5lTnVtYmVy
IDwgU21hbGxQYWdlOjpsaW5lQ291bnQgLSAxOyArK2xpbmVOdW1iZXIpIHsKKyAgICAgICAgICAg
IHVuc2lnbmVkIHNob3J0IG9iamVjdENvdW50OworICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQg
cmVtYWluZGVyOworICAgICAgICAgICAgZGl2aWRlUm91bmRpbmdVcChzdGF0aWNfY2FzdDx1bnNp
Z25lZCBzaG9ydD4oU21hbGxQYWdlOjpsaW5lU2l6ZSAtIHN0YXJ0T2Zmc2V0KSwgc2l6ZSwgb2Jq
ZWN0Q291bnQsIHJlbWFpbmRlcik7CisgICAgICAgICAgICBCQVNTRVJUKG9iamVjdENvdW50KTsK
KyAgICAgICAgICAgIG1fc21hbGxMaW5lTWV0YWRhdGFbc2l6ZUNsYXNzKHNpemUpXVtsaW5lTnVt
YmVyXSA9IHsgc3RhcnRPZmZzZXQsIG9iamVjdENvdW50IH07CisgICAgICAgICAgICBzdGFydE9m
ZnNldCA9IHJlbWFpbmRlciA/IHNpemUgLSByZW1haW5kZXIgOiAwOworICAgICAgICB9CisKKyAg
ICAgICAgLy8gVGhlIGxhc3QgbGluZSBpbiB0aGUgcGFnZSByb3VuZHMgZG93biBpbnN0ZWFkIG9m
IHVwIGJlY2F1c2UgaXQncyBub3QgYWxsb3dlZCB0byBvdmVybGFwIGludG8gaXRzIG5laWdoYm9y
LgorICAgICAgICB1bnNpZ25lZCBzaG9ydCBvYmplY3RDb3VudCA9IHN0YXRpY19jYXN0PHVuc2ln
bmVkIHNob3J0PigoU21hbGxQYWdlOjpsaW5lU2l6ZSAtIHN0YXJ0T2Zmc2V0KSAvIHNpemUpOwor
ICAgICAgICBtX3NtYWxsTGluZU1ldGFkYXRhW3NpemVDbGFzcyhzaXplKV1bU21hbGxQYWdlOjps
aW5lQ291bnQgLSAxXSA9IHsgc3RhcnRPZmZzZXQsIG9iamVjdENvdW50IH07CisgICAgfQorCisg
ICAgZm9yICh1bnNpZ25lZCBzaG9ydCBzaXplID0gc21hbGxNYXggKyBhbGlnbm1lbnQ7IHNpemUg
PD0gbWVkaXVtTWF4OyBzaXplICs9IGFsaWdubWVudCkgeworICAgICAgICB1bnNpZ25lZCBzaG9y
dCBzdGFydE9mZnNldCA9IDA7CisgICAgICAgIGZvciAoc2l6ZV90IGxpbmVOdW1iZXIgPSAwOyBs
aW5lTnVtYmVyIDwgTWVkaXVtUGFnZTo6bGluZUNvdW50IC0gMTsgKytsaW5lTnVtYmVyKSB7Cisg
ICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCBvYmplY3RDb3VudDsKKyAgICAgICAgICAgIHVuc2ln
bmVkIHNob3J0IHJlbWFpbmRlcjsKKyAgICAgICAgICAgIGRpdmlkZVJvdW5kaW5nVXAoc3RhdGlj
X2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KE1lZGl1bVBhZ2U6OmxpbmVTaXplIC0gc3RhcnRPZmZzZXQp
LCBzaXplLCBvYmplY3RDb3VudCwgcmVtYWluZGVyKTsKKyAgICAgICAgICAgIEJBU1NFUlQob2Jq
ZWN0Q291bnQpOworICAgICAgICAgICAgbV9tZWRpdW1MaW5lTWV0YWRhdGFbc2l6ZUNsYXNzKHNp
emUpXVtsaW5lTnVtYmVyXSA9IHsgc3RhcnRPZmZzZXQsIG9iamVjdENvdW50IH07CisgICAgICAg
ICAgICBzdGFydE9mZnNldCA9IHJlbWFpbmRlciA/IHNpemUgLSByZW1haW5kZXIgOiAwOworICAg
ICAgICB9CisKKyAgICAgICAgLy8gVGhlIGxhc3QgbGluZSBpbiB0aGUgcGFnZSByb3VuZHMgZG93
biBpbnN0ZWFkIG9mIHVwIGJlY2F1c2UgaXQncyBub3QgYWxsb3dlZCB0byBvdmVybGFwIGludG8g
aXRzIG5laWdoYm9yLgorICAgICAgICB1bnNpZ25lZCBzaG9ydCBvYmplY3RDb3VudCA9IHN0YXRp
Y19jYXN0PHVuc2lnbmVkIHNob3J0PigoTWVkaXVtUGFnZTo6bGluZVNpemUgLSBzdGFydE9mZnNl
dCkgLyBzaXplKTsKKyAgICAgICAgbV9tZWRpdW1MaW5lTWV0YWRhdGFbc2l6ZUNsYXNzKHNpemUp
XVtNZWRpdW1QYWdlOjpsaW5lQ291bnQgLSAxXSA9IHsgc3RhcnRPZmZzZXQsIG9iamVjdENvdW50
IH07CisgICAgfQogfQogCiB2b2lkIEhlYXA6OmNvbmN1cnJlbnRTY2F2ZW5nZSgpCkBAIC0xMTYs
MTEgKzE1Miw4OSBAQCB2b2lkIEhlYXA6OnNjYXZlbmdlTGFyZ2VSYW5nZXMoc3RkOjp1bmlxCiAg
ICAgfQogfQogCi1TbWFsbExpbmUqIEhlYXA6OmFsbG9jYXRlU21hbGxMaW5lU2xvd0Nhc2Uoc3Rk
Ojpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYgbG9jaywgc2l6ZV90IHNtYWxsU2l6ZUNsYXNzKQor
dm9pZCBIZWFwOjpyZWZpbGxTbWFsbEJ1bXBSYW5nZUNhY2hlKHN0ZDo6bG9ja19ndWFyZDxTdGF0
aWNNdXRleD4mIGxvY2ssIHNpemVfdCBzaXplQ2xhc3MsIFNtYWxsQnVtcFJhbmdlQ2FjaGUmIHJh
bmdlQ2FjaGUpCit7CisgICAgQkFTU0VSVCghcmFuZ2VDYWNoZS5zaXplKCkpOworICAgIFNtYWxs
UGFnZSogcGFnZSA9IGFsbG9jYXRlU21hbGxQYWdlKGxvY2ssIHNpemVDbGFzcyk7CisgICAgU21h
bGxMaW5lKiBsaW5lcyA9IHBhZ2UtPmJlZ2luKCk7CisKKyAgICAvLyBEdWUgdG8gb3ZlcmxhcCBm
cm9tIHRoZSBwcmV2aW91cyBsaW5lLCB0aGUgbGFzdCBsaW5lIGluIHRoZSBwYWdlIG1heSBub3Qg
YmUgYWJsZSB0byBmaXQgYW55IG9iamVjdHMuCisgICAgc2l6ZV90IGVuZCA9IFNtYWxsUGFnZTo6
bGluZUNvdW50OworICAgIGlmICghbV9zbWFsbExpbmVNZXRhZGF0YVtzaXplQ2xhc3NdW1NtYWxs
UGFnZTo6bGluZUNvdW50IC0gMV0ub2JqZWN0Q291bnQpCisgICAgICAgIC0tZW5kOworCisgICAg
Zm9yIChzaXplX3QgbGluZU51bWJlciA9IDA7IGxpbmVOdW1iZXIgPCBlbmQ7ICsrbGluZU51bWJl
cikgeworICAgICAgICBpZiAobGluZXNbbGluZU51bWJlcl0ucmVmQ291bnQobG9jaykpCisgICAg
ICAgICAgICBjb250aW51ZTsKKworICAgICAgICBMaW5lTWV0YWRhdGEmIGxpbmVNZXRhZGF0YSA9
IG1fc21hbGxMaW5lTWV0YWRhdGFbc2l6ZUNsYXNzXVtsaW5lTnVtYmVyXTsKKyAgICAgICAgY2hh
ciogYmVnaW4gPSBsaW5lc1tsaW5lTnVtYmVyXS5iZWdpbigpICsgbGluZU1ldGFkYXRhLnN0YXJ0
T2Zmc2V0OworICAgICAgICB1bnNpZ25lZCBzaG9ydCBvYmplY3RDb3VudCA9IGxpbmVNZXRhZGF0
YS5vYmplY3RDb3VudDsKKyAgICAgICAgbGluZXNbbGluZU51bWJlcl0ucmVmKGxvY2ssIGxpbmVN
ZXRhZGF0YS5vYmplY3RDb3VudCk7CisgICAgICAgIHBhZ2UtPnJlZihsb2NrKTsKKworICAgICAg
ICB3aGlsZSAoKytsaW5lTnVtYmVyIDwgZW5kKSB7CisgICAgICAgICAgICBpZiAobGluZXNbbGlu
ZU51bWJlcl0ucmVmQ291bnQobG9jaykpCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAg
ICAgICAgIExpbmVNZXRhZGF0YSYgbGluZU1ldGFkYXRhID0gbV9zbWFsbExpbmVNZXRhZGF0YVtz
aXplQ2xhc3NdW2xpbmVOdW1iZXJdOworICAgICAgICAgICAgb2JqZWN0Q291bnQgKz0gbGluZU1l
dGFkYXRhLm9iamVjdENvdW50OworICAgICAgICAgICAgbGluZXNbbGluZU51bWJlcl0ucmVmKGxv
Y2ssIGxpbmVNZXRhZGF0YS5vYmplY3RDb3VudCk7CisgICAgICAgICAgICBwYWdlLT5yZWYobG9j
ayk7CisgICAgICAgIH0KKworICAgICAgICByYW5nZUNhY2hlLnB1c2goeyBiZWdpbiwgb2JqZWN0
Q291bnQgfSk7CisgICAgfQorfQorCit2b2lkIEhlYXA6OnJlZmlsbE1lZGl1bUJ1bXBSYW5nZUNh
Y2hlKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mIGxvY2ssIHNpemVfdCBzaXplQ2xhc3Ms
IE1lZGl1bUJ1bXBSYW5nZUNhY2hlJiByYW5nZUNhY2hlKQoreworICAgIEJBU1NFUlQoIXJhbmdl
Q2FjaGUuc2l6ZSgpKTsKKyAgICBNZWRpdW1QYWdlKiBwYWdlID0gYWxsb2NhdGVNZWRpdW1QYWdl
KGxvY2ssIHNpemVDbGFzcyk7CisgICAgTWVkaXVtTGluZSogbGluZXMgPSBwYWdlLT5iZWdpbigp
OworCisgICAgLy8gRHVlIHRvIG92ZXJsYXAgZnJvbSB0aGUgcHJldmlvdXMgbGluZSwgdGhlIGxh
c3QgbGluZSBpbiB0aGUgcGFnZSBtYXkgbm90IGJlIGFibGUgdG8gZml0IGFueSBvYmplY3RzLgor
ICAgIHNpemVfdCBlbmQgPSBNZWRpdW1QYWdlOjpsaW5lQ291bnQ7CisgICAgaWYgKCFtX21lZGl1
bUxpbmVNZXRhZGF0YVtzaXplQ2xhc3NdW01lZGl1bVBhZ2U6OmxpbmVDb3VudCAtIDFdLm9iamVj
dENvdW50KQorICAgICAgICAtLWVuZDsKKworICAgIGZvciAoc2l6ZV90IGxpbmVOdW1iZXIgPSAw
OyBsaW5lTnVtYmVyIDwgZW5kOyArK2xpbmVOdW1iZXIpIHsKKyAgICAgICAgaWYgKGxpbmVzW2xp
bmVOdW1iZXJdLnJlZkNvdW50KGxvY2spKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAg
ICAgTGluZU1ldGFkYXRhJiBsaW5lTWV0YWRhdGEgPSBtX21lZGl1bUxpbmVNZXRhZGF0YVtzaXpl
Q2xhc3NdW2xpbmVOdW1iZXJdOworICAgICAgICBjaGFyKiBiZWdpbiA9IGxpbmVzW2xpbmVOdW1i
ZXJdLmJlZ2luKCkgKyBsaW5lTWV0YWRhdGEuc3RhcnRPZmZzZXQ7CisgICAgICAgIHVuc2lnbmVk
IHNob3J0IG9iamVjdENvdW50ID0gbGluZU1ldGFkYXRhLm9iamVjdENvdW50OworICAgICAgICBs
aW5lc1tsaW5lTnVtYmVyXS5yZWYobG9jaywgbGluZU1ldGFkYXRhLm9iamVjdENvdW50KTsKKyAg
ICAgICAgcGFnZS0+cmVmKGxvY2spOworICAgICAgICAKKyAgICAgICAgd2hpbGUgKCsrbGluZU51
bWJlciA8IGVuZCkgeworICAgICAgICAgICAgaWYgKGxpbmVzW2xpbmVOdW1iZXJdLnJlZkNvdW50
KGxvY2spKQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBMaW5lTWV0YWRh
dGEmIGxpbmVNZXRhZGF0YSA9IG1fbWVkaXVtTGluZU1ldGFkYXRhW3NpemVDbGFzc11bbGluZU51
bWJlcl07CisgICAgICAgICAgICBvYmplY3RDb3VudCArPSBsaW5lTWV0YWRhdGEub2JqZWN0Q291
bnQ7CisgICAgICAgICAgICBsaW5lc1tsaW5lTnVtYmVyXS5yZWYobG9jaywgbGluZU1ldGFkYXRh
Lm9iamVjdENvdW50KTsKKyAgICAgICAgICAgIHBhZ2UtPnJlZihsb2NrKTsKKyAgICAgICAgfQor
CisgICAgICAgIHJhbmdlQ2FjaGUucHVzaCh7IGJlZ2luLCBvYmplY3RDb3VudCB9KTsKKyAgICB9
Cit9CisKK1NtYWxsUGFnZSogSGVhcDo6YWxsb2NhdGVTbWFsbFBhZ2Uoc3RkOjpsb2NrX2d1YXJk
PFN0YXRpY011dGV4PiYgbG9jaywgc2l6ZV90IHNpemVDbGFzcykKIHsKKyAgICBWZWN0b3I8U21h
bGxQYWdlKj4mIHNtYWxsUGFnZXNXaXRoRnJlZUxpbmVzID0gbV9zbWFsbFBhZ2VzV2l0aEZyZWVM
aW5lc1tzaXplQ2xhc3NdOworICAgIHdoaWxlIChzbWFsbFBhZ2VzV2l0aEZyZWVMaW5lcy5zaXpl
KCkpIHsKKyAgICAgICAgU21hbGxQYWdlKiBwYWdlID0gc21hbGxQYWdlc1dpdGhGcmVlTGluZXMu
cG9wKCk7CisgICAgICAgIGlmICghcGFnZS0+cmVmQ291bnQobG9jaykgfHwgcGFnZS0+c2l6ZUNs
YXNzKCkgIT0gc2l6ZUNsYXNzKSAvLyBQYWdlIHdhcyBwcm9tb3RlZCB0byB0aGUgcGFnZXMgbGlz
dC4KKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICByZXR1cm4gcGFnZTsKKyAgICB9Cisg
ICAgCiAgICAgbV9pc0FsbG9jYXRpbmdQYWdlcyA9IHRydWU7CiAKLSAgICBTbWFsbFBhZ2UqIHBh
Z2UgPSBbdGhpc10oKSB7CisgICAgU21hbGxQYWdlKiBwYWdlID0gW3RoaXMsIHNpemVDbGFzc10o
KSB7CiAgICAgICAgIGlmIChtX3NtYWxsUGFnZXMuc2l6ZSgpKQogICAgICAgICAgICAgcmV0dXJu
IG1fc21hbGxQYWdlcy5wb3AoKTsKICAgICAgICAgCkBAIC0xMjksMjIgKzI0MywyMyBAQCBTbWFs
bExpbmUqIEhlYXA6OmFsbG9jYXRlU21hbGxMaW5lU2xvd0NhCiAgICAgICAgIHJldHVybiBwYWdl
OwogICAgIH0oKTsKIAotICAgIFNtYWxsTGluZSogbGluZSA9IHBhZ2UtPmJlZ2luKCk7Ci0gICAg
VmVjdG9yPFNtYWxsTGluZSo+JiBzbWFsbExpbmVzID0gbV9zbWFsbExpbmVzW3NtYWxsU2l6ZUNs
YXNzXTsKLSAgICBmb3IgKGF1dG8gaXQgPSBsaW5lICsgMTsgaXQgIT0gcGFnZS0+ZW5kKCk7ICsr
aXQpCi0gICAgICAgIHNtYWxsTGluZXMucHVzaChpdCk7Ci0KLSAgICBCQVNTRVJUKCFsaW5lLT5y
ZWZDb3VudChsb2NrKSk7Ci0gICAgcGFnZS0+c2V0U21hbGxTaXplQ2xhc3Moc21hbGxTaXplQ2xh
c3MpOwotICAgIHBhZ2UtPnJlZihsb2NrKTsKLSAgICByZXR1cm4gbGluZTsKKyAgICBwYWdlLT5z
ZXRTaXplQ2xhc3Moc2l6ZUNsYXNzKTsKKyAgICByZXR1cm4gcGFnZTsKIH0KIAotTWVkaXVtTGlu
ZSogSGVhcDo6YWxsb2NhdGVNZWRpdW1MaW5lU2xvd0Nhc2Uoc3RkOjpsb2NrX2d1YXJkPFN0YXRp
Y011dGV4PiYgbG9jaykKK01lZGl1bVBhZ2UqIEhlYXA6OmFsbG9jYXRlTWVkaXVtUGFnZShzdGQ6
OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+JiBsb2NrLCBzaXplX3Qgc2l6ZUNsYXNzKQogeworICAg
IFZlY3RvcjxNZWRpdW1QYWdlKj4mIG1lZGl1bVBhZ2VzV2l0aEZyZWVMaW5lcyA9IG1fbWVkaXVt
UGFnZXNXaXRoRnJlZUxpbmVzW3NpemVDbGFzc107CisgICAgd2hpbGUgKG1lZGl1bVBhZ2VzV2l0
aEZyZWVMaW5lcy5zaXplKCkpIHsKKyAgICAgICAgTWVkaXVtUGFnZSogcGFnZSA9IG1lZGl1bVBh
Z2VzV2l0aEZyZWVMaW5lcy5wb3AoKTsKKyAgICAgICAgaWYgKCFwYWdlLT5yZWZDb3VudChsb2Nr
KSB8fCBwYWdlLT5zaXplQ2xhc3MoKSAhPSBzaXplQ2xhc3MpIC8vIFBhZ2Ugd2FzIHByb21vdGVk
IHRvIHRoZSBwYWdlcyBsaXN0LgorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIHJldHVy
biBwYWdlOworICAgIH0KKyAgICAKICAgICBtX2lzQWxsb2NhdGluZ1BhZ2VzID0gdHJ1ZTsKIAot
ICAgIE1lZGl1bVBhZ2UqIHBhZ2UgPSBbdGhpc10oKSB7CisgICAgTWVkaXVtUGFnZSogcGFnZSA9
IFt0aGlzLCBzaXplQ2xhc3NdKCkgewogICAgICAgICBpZiAobV9tZWRpdW1QYWdlcy5zaXplKCkp
CiAgICAgICAgICAgICByZXR1cm4gbV9tZWRpdW1QYWdlcy5wb3AoKTsKICAgICAgICAgCkBAIC0x
NTMsMTIgKzI2OCw1MiBAQCBNZWRpdW1MaW5lKiBIZWFwOjphbGxvY2F0ZU1lZGl1bUxpbmVTbG93
CiAgICAgICAgIHJldHVybiBwYWdlOwogICAgIH0oKTsKIAotICAgIE1lZGl1bUxpbmUqIGxpbmUg
PSBwYWdlLT5iZWdpbigpOwotICAgIGZvciAoYXV0byBpdCA9IGxpbmUgKyAxOyBpdCAhPSBwYWdl
LT5lbmQoKTsgKytpdCkKLSAgICAgICAgbV9tZWRpdW1MaW5lcy5wdXNoKGl0KTsKKyAgICBwYWdl
LT5zZXRTaXplQ2xhc3Moc2l6ZUNsYXNzKTsKKyAgICByZXR1cm4gcGFnZTsKK30KIAotICAgIHBh
Z2UtPnJlZihsb2NrKTsKLSAgICByZXR1cm4gbGluZTsKK3ZvaWQgSGVhcDo6ZGVhbGxvY2F0ZVNt
YWxsTGluZShzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+JiBsb2NrLCBTbWFsbExpbmUqIGxp
bmUpCit7CisgICAgQkFTU0VSVCghbGluZS0+cmVmQ291bnQobG9jaykpOworICAgIFNtYWxsUGFn
ZSogcGFnZSA9IFNtYWxsUGFnZTo6Z2V0KGxpbmUpOworICAgIHNpemVfdCByZWZDb3VudCA9IHBh
Z2UtPnJlZkNvdW50KGxvY2spOworICAgIHBhZ2UtPmRlcmVmKGxvY2spOworCisgICAgc3dpdGNo
IChyZWZDb3VudCkgeworICAgIGNhc2UgU21hbGxQYWdlOjpsaW5lQ291bnQ6IHsKKyAgICAgICAg
Ly8gRmlyc3QgZnJlZSBsaW5lIGluIHRoZSBwYWdlLgorICAgICAgICBtX3NtYWxsUGFnZXNXaXRo
RnJlZUxpbmVzW3BhZ2UtPnNpemVDbGFzcygpXS5wdXNoKHBhZ2UpOworICAgICAgICBicmVhazsK
KyAgICB9CisgICAgY2FzZSAxOiB7CisgICAgICAgIC8vIExhc3QgZnJlZSBsaW5lIGluIHRoZSBw
YWdlLgorICAgICAgICBtX3NtYWxsUGFnZXMucHVzaChwYWdlKTsKKyAgICAgICAgbV9zY2F2ZW5n
ZXIucnVuKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgSGVhcDo6
ZGVhbGxvY2F0ZU1lZGl1bUxpbmUoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYgbG9jaywg
TWVkaXVtTGluZSogbGluZSkKK3sKKyAgICBCQVNTRVJUKCFsaW5lLT5yZWZDb3VudChsb2NrKSk7
CisgICAgTWVkaXVtUGFnZSogcGFnZSA9IE1lZGl1bVBhZ2U6OmdldChsaW5lKTsKKyAgICBzaXpl
X3QgcmVmQ291bnQgPSBwYWdlLT5yZWZDb3VudChsb2NrKTsKKyAgICBwYWdlLT5kZXJlZihsb2Nr
KTsKKworICAgIHN3aXRjaCAocmVmQ291bnQpIHsKKyAgICBjYXNlIE1lZGl1bVBhZ2U6OmxpbmVD
b3VudDogeworICAgICAgICAvLyBGaXJzdCBmcmVlIGxpbmUgaW4gdGhlIHBhZ2UuCisgICAgICAg
IG1fbWVkaXVtUGFnZXNXaXRoRnJlZUxpbmVzW3BhZ2UtPnNpemVDbGFzcygpXS5wdXNoKHBhZ2Up
OworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSAxOiB7CisgICAgICAgIC8vIExhc3Qg
ZnJlZSBsaW5lIGluIHRoZSBwYWdlLgorICAgICAgICBtX21lZGl1bVBhZ2VzLnB1c2gocGFnZSk7
CisgICAgICAgIG1fc2NhdmVuZ2VyLnJ1bigpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAg
fQogfQogCiB2b2lkKiBIZWFwOjphbGxvY2F0ZVhMYXJnZShzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGlj
TXV0ZXg+Jiwgc2l6ZV90IHNpemUpCkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0hlYXAu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0hlYXAuaAkocmV2aXNpb24g
MTczNjczKQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9IZWFwLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI2LDE2ICsyNiwxNyBAQAogI2lmbmRlZiBIZWFwX2gKICNkZWZpbmUgSGVhcF9oCiAKLSNp
bmNsdWRlICJGaXhlZFZlY3Rvci5oIgotI2luY2x1ZGUgIlZNSGVhcC5oIgotI2luY2x1ZGUgIk1l
ZGl1bUxpbmUuaCIKLSNpbmNsdWRlICJNdXRleC5oIgotI2luY2x1ZGUgIlNtYWxsUGFnZS5oIgor
I2luY2x1ZGUgIkJ1bXBSYW5nZS5oIgorI2luY2x1ZGUgIkxpbmVNZXRhZGF0YS5oIgogI2luY2x1
ZGUgIk1lZGl1bUNodW5rLmgiCisjaW5jbHVkZSAiTWVkaXVtTGluZS5oIgogI2luY2x1ZGUgIk1l
ZGl1bVBhZ2UuaCIKKyNpbmNsdWRlICJNdXRleC5oIgogI2luY2x1ZGUgIlNlZ3JlZ2F0ZWRGcmVl
TGlzdC5oIgogI2luY2x1ZGUgIlNtYWxsQ2h1bmsuaCIKICNpbmNsdWRlICJTbWFsbExpbmUuaCIK
KyNpbmNsdWRlICJTbWFsbFBhZ2UuaCIKKyNpbmNsdWRlICJWTUhlYXAuaCIKICNpbmNsdWRlICJW
ZWN0b3IuaCIKICNpbmNsdWRlIDxhcnJheT4KICNpbmNsdWRlIDxtdXRleD4KQEAgLTQ5LDEyICs1
MCwxMiBAQCBjbGFzcyBIZWFwIHsKIHB1YmxpYzoKICAgICBIZWFwKHN0ZDo6bG9ja19ndWFyZDxT
dGF0aWNNdXRleD4mKTsKIAotICAgIFNtYWxsTGluZSogYWxsb2NhdGVTbWFsbExpbmUoc3RkOjps
b2NrX2d1YXJkPFN0YXRpY011dGV4PiYsIHNpemVfdCBzbWFsbFNpemVDbGFzcyk7Ci0gICAgdm9p
ZCBkZWFsbG9jYXRlU21hbGxMaW5lKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mLCBTbWFs
bExpbmUqKTsKKyAgICB2b2lkIHJlZmlsbFNtYWxsQnVtcFJhbmdlQ2FjaGUoc3RkOjpsb2NrX2d1
YXJkPFN0YXRpY011dGV4PiYsIHNpemVfdCBzaXplQ2xhc3MsIFNtYWxsQnVtcFJhbmdlQ2FjaGUm
KTsKKyAgICB2b2lkIGRlcmVmU21hbGxMaW5lKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4m
LCBTbWFsbExpbmUqKTsKKworICAgIHZvaWQgcmVmaWxsTWVkaXVtQnVtcFJhbmdlQ2FjaGUoc3Rk
Ojpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYsIHNpemVfdCBzaXplQ2xhc3MsIE1lZGl1bUJ1bXBS
YW5nZUNhY2hlJik7CisgICAgdm9pZCBkZXJlZk1lZGl1bUxpbmUoc3RkOjpsb2NrX2d1YXJkPFN0
YXRpY011dGV4PiYsIE1lZGl1bUxpbmUqKTsKIAotICAgIE1lZGl1bUxpbmUqIGFsbG9jYXRlTWVk
aXVtTGluZShzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+Jik7Ci0gICAgdm9pZCBkZWFsbG9j
YXRlTWVkaXVtTGluZShzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+JiwgTWVkaXVtTGluZSop
OwotICAgIAogICAgIHZvaWQqIGFsbG9jYXRlTGFyZ2Uoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011
dGV4PiYsIHNpemVfdCk7CiAgICAgdm9pZCBkZWFsbG9jYXRlTGFyZ2Uoc3RkOjpsb2NrX2d1YXJk
PFN0YXRpY011dGV4PiYsIHZvaWQqKTsKIApAQCAtNjgsOSArNjksMTQgQEAgcHVibGljOgogCiBw
cml2YXRlOgogICAgIH5IZWFwKCkgPSBkZWxldGU7CisgICAgCisgICAgdm9pZCBpbml0aWFsaXpl
TGluZU1ldGFkYXRhKCk7CiAKLSAgICBTbWFsbExpbmUqIGFsbG9jYXRlU21hbGxMaW5lU2xvd0Nh
c2Uoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYsIHNpemVfdCBzbWFsbFNpemVDbGFzcyk7
Ci0gICAgTWVkaXVtTGluZSogYWxsb2NhdGVNZWRpdW1MaW5lU2xvd0Nhc2Uoc3RkOjpsb2NrX2d1
YXJkPFN0YXRpY011dGV4PiYpOworICAgIFNtYWxsUGFnZSogYWxsb2NhdGVTbWFsbFBhZ2Uoc3Rk
Ojpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYsIHNpemVfdCBzaXplQ2xhc3MpOworICAgIE1lZGl1
bVBhZ2UqIGFsbG9jYXRlTWVkaXVtUGFnZShzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+Jiwg
c2l6ZV90IHNpemVDbGFzcyk7CisKKyAgICB2b2lkIGRlYWxsb2NhdGVTbWFsbExpbmUoc3RkOjps
b2NrX2d1YXJkPFN0YXRpY011dGV4PiYsIFNtYWxsTGluZSopOworICAgIHZvaWQgZGVhbGxvY2F0
ZU1lZGl1bUxpbmUoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYsIE1lZGl1bUxpbmUqKTsK
IAogICAgIHZvaWQqIGFsbG9jYXRlTGFyZ2UoUmFuZ2UsIHNpemVfdCk7CiAgICAgUmFuZ2UgYWxs
b2NhdGVMYXJnZUNodW5rKCk7CkBAIC04NSw4ICs5MSwxMSBAQCBwcml2YXRlOgogICAgIHZvaWQg
c2NhdmVuZ2VNZWRpdW1QYWdlcyhzdGQ6OnVuaXF1ZV9sb2NrPFN0YXRpY011dGV4PiYsIHN0ZDo6
Y2hyb25vOjptaWxsaXNlY29uZHMpOwogICAgIHZvaWQgc2NhdmVuZ2VMYXJnZVJhbmdlcyhzdGQ6
OnVuaXF1ZV9sb2NrPFN0YXRpY011dGV4PiYsIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMpOwog
Ci0gICAgc3RkOjphcnJheTxWZWN0b3I8U21hbGxMaW5lKj4sIHNtYWxsTWF4IC8gYWxpZ25tZW50
PiBtX3NtYWxsTGluZXM7Ci0gICAgVmVjdG9yPE1lZGl1bUxpbmUqPiBtX21lZGl1bUxpbmVzOwor
ICAgIHN0ZDo6YXJyYXk8c3RkOjphcnJheTxMaW5lTWV0YWRhdGEsIFNtYWxsUGFnZTo6bGluZUNv
dW50Piwgc21hbGxNYXggLyBhbGlnbm1lbnQ+IG1fc21hbGxMaW5lTWV0YWRhdGE7CisgICAgc3Rk
OjphcnJheTxzdGQ6OmFycmF5PExpbmVNZXRhZGF0YSwgTWVkaXVtUGFnZTo6bGluZUNvdW50Piwg
bWVkaXVtTWF4IC8gYWxpZ25tZW50PiBtX21lZGl1bUxpbmVNZXRhZGF0YTsKKworICAgIHN0ZDo6
YXJyYXk8VmVjdG9yPFNtYWxsUGFnZSo+LCBzbWFsbE1heCAvIGFsaWdubWVudD4gbV9zbWFsbFBh
Z2VzV2l0aEZyZWVMaW5lczsKKyAgICBzdGQ6OmFycmF5PFZlY3RvcjxNZWRpdW1QYWdlKj4sIG1l
ZGl1bU1heCAvIGFsaWdubWVudD4gbV9tZWRpdW1QYWdlc1dpdGhGcmVlTGluZXM7CiAKICAgICBW
ZWN0b3I8U21hbGxQYWdlKj4gbV9zbWFsbFBhZ2VzOwogICAgIFZlY3RvcjxNZWRpdW1QYWdlKj4g
bV9tZWRpdW1QYWdlczsKQEAgLTk5LDU5ICsxMDgsMTggQEAgcHJpdmF0ZToKICAgICBBc3luY1Rh
c2s8SGVhcCwgZGVjbHR5cGUoJkhlYXA6OmNvbmN1cnJlbnRTY2F2ZW5nZSk+IG1fc2NhdmVuZ2Vy
OwogfTsKIAotaW5saW5lIHZvaWQgSGVhcDo6ZGVhbGxvY2F0ZVNtYWxsTGluZShzdGQ6OmxvY2tf
Z3VhcmQ8U3RhdGljTXV0ZXg+JiBsb2NrLCBTbWFsbExpbmUqIGxpbmUpCitpbmxpbmUgdm9pZCBI
ZWFwOjpkZXJlZlNtYWxsTGluZShzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+JiBsb2NrLCBT
bWFsbExpbmUqIGxpbmUpCiB7Ci0gICAgQkFTU0VSVCghbGluZS0+cmVmQ291bnQobG9jaykpOwot
ICAgIFNtYWxsUGFnZSogcGFnZSA9IFNtYWxsUGFnZTo6Z2V0KGxpbmUpOwotICAgIGlmIChwYWdl
LT5kZXJlZihsb2NrKSkgewotICAgICAgICBtX3NtYWxsUGFnZXMucHVzaChwYWdlKTsKLSAgICAg
ICAgbV9zY2F2ZW5nZXIucnVuKCk7CisgICAgaWYgKCFsaW5lLT5kZXJlZihsb2NrKSkKICAgICAg
ICAgcmV0dXJuOwotICAgIH0KLSAgICBtX3NtYWxsTGluZXNbcGFnZS0+c21hbGxTaXplQ2xhc3Mo
KV0ucHVzaChsaW5lKTsKLX0KLQotaW5saW5lIFNtYWxsTGluZSogSGVhcDo6YWxsb2NhdGVTbWFs
bExpbmUoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYgbG9jaywgc2l6ZV90IHNtYWxsU2l6
ZUNsYXNzKQotewotICAgIFZlY3RvcjxTbWFsbExpbmUqPiYgc21hbGxMaW5lcyA9IG1fc21hbGxM
aW5lc1tzbWFsbFNpemVDbGFzc107Ci0gICAgd2hpbGUgKHNtYWxsTGluZXMuc2l6ZSgpKSB7Ci0g
ICAgICAgIFNtYWxsTGluZSogbGluZSA9IHNtYWxsTGluZXMucG9wKCk7Ci0gICAgICAgIFNtYWxs
UGFnZSogcGFnZSA9IFNtYWxsUGFnZTo6Z2V0KGxpbmUpOwotICAgICAgICBpZiAoIXBhZ2UtPnJl
ZkNvdW50KGxvY2spIHx8IHBhZ2UtPnNtYWxsU2l6ZUNsYXNzKCkgIT0gc21hbGxTaXplQ2xhc3Mp
IC8vIFRoZSBsaW5lIHdhcyBwcm9tb3RlZCB0byB0aGUgc21hbGwgcGFnZXMgbGlzdC4KLSAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICBCQVNTRVJUKCFsaW5lLT5yZWZDb3VudChsb2NrKSk7
Ci0gICAgICAgIHBhZ2UtPnJlZihsb2NrKTsKLSAgICAgICAgcmV0dXJuIGxpbmU7Ci0gICAgfQot
Ci0gICAgcmV0dXJuIGFsbG9jYXRlU21hbGxMaW5lU2xvd0Nhc2UobG9jaywgc21hbGxTaXplQ2xh
c3MpOworICAgIGRlYWxsb2NhdGVTbWFsbExpbmUobG9jaywgbGluZSk7CiB9CiAKLWlubGluZSB2
b2lkIEhlYXA6OmRlYWxsb2NhdGVNZWRpdW1MaW5lKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRl
eD4mIGxvY2ssIE1lZGl1bUxpbmUqIGxpbmUpCitpbmxpbmUgdm9pZCBIZWFwOjpkZXJlZk1lZGl1
bUxpbmUoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYgbG9jaywgTWVkaXVtTGluZSogbGlu
ZSkKIHsKLSAgICBCQVNTRVJUKCFsaW5lLT5yZWZDb3VudChsb2NrKSk7Ci0gICAgTWVkaXVtUGFn
ZSogcGFnZSA9IE1lZGl1bVBhZ2U6OmdldChsaW5lKTsKLSAgICBpZiAocGFnZS0+ZGVyZWYobG9j
aykpIHsKLSAgICAgICAgbV9tZWRpdW1QYWdlcy5wdXNoKHBhZ2UpOwotICAgICAgICBtX3NjYXZl
bmdlci5ydW4oKTsKKyAgICBpZiAoIWxpbmUtPmRlcmVmKGxvY2spKQogICAgICAgICByZXR1cm47
Ci0gICAgfQotICAgIG1fbWVkaXVtTGluZXMucHVzaChsaW5lKTsKLX0KLQotaW5saW5lIE1lZGl1
bUxpbmUqIEhlYXA6OmFsbG9jYXRlTWVkaXVtTGluZShzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0
ZXg+JiBsb2NrKQotewotICAgIHdoaWxlIChtX21lZGl1bUxpbmVzLnNpemUoKSkgewotICAgICAg
ICBNZWRpdW1MaW5lKiBsaW5lID0gbV9tZWRpdW1MaW5lcy5wb3AoKTsKLSAgICAgICAgTWVkaXVt
UGFnZSogcGFnZSA9IE1lZGl1bVBhZ2U6OmdldChsaW5lKTsKLSAgICAgICAgaWYgKCFwYWdlLT5y
ZWZDb3VudChsb2NrKSkgLy8gVGhlIGxpbmUgd2FzIHByb21vdGVkIHRvIHRoZSBtZWRpdW0gcGFn
ZXMgbGlzdC4KLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBCQVNTRVJUKCFsaW5lLT5y
ZWZDb3VudChsb2NrKSk7Ci0gICAgICAgIHBhZ2UtPnJlZihsb2NrKTsKLSAgICAgICAgcmV0dXJu
IGxpbmU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGFsbG9jYXRlTWVkaXVtTGluZVNsb3dDYXNlKGxv
Y2spOworICAgIGRlYWxsb2NhdGVNZWRpdW1MaW5lKGxvY2ssIGxpbmUpOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBibWFsbG9jCkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0xpbmUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0xpbmUuaAkocmV2aXNpb24gMTczNjcz
KQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9MaW5lLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1
LDggKzQ1LDggQEAgcHVibGljOgogCiAgICAgc3RhdGljIExpbmUqIGdldCh2b2lkKik7CiAKLSAg
ICB2b2lkIGNvbmN1cnJlbnRSZWYodW5zaWduZWQgY2hhciA9IDEpOwotICAgIGJvb2wgZGVyZWYo
c3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYsIHVuc2lnbmVkIGNoYXIgPSAxKTsKKyAgICB2
b2lkIHJlZihzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+JiwgdW5zaWduZWQgY2hhcik7Cisg
ICAgYm9vbCBkZXJlZihzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+Jik7CiAgICAgdW5zaWdu
ZWQgcmVmQ291bnQoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYpIHsgcmV0dXJuIG1fcmVm
Q291bnQ7IH0KICAgICAKICAgICBjaGFyKiBiZWdpbigpOwpAQCAtODEsMTggKzgxLDE4IEBAIGlu
bGluZSBjaGFyKiBMaW5lPFRyYWl0cz46OmVuZCgpCiB9CiAKIHRlbXBsYXRlPGNsYXNzIFRyYWl0
cz4KLWlubGluZSB2b2lkIExpbmU8VHJhaXRzPjo6Y29uY3VycmVudFJlZih1bnNpZ25lZCBjaGFy
IGNvdW50KQoraW5saW5lIHZvaWQgTGluZTxUcmFpdHM+OjpyZWYoc3RkOjpsb2NrX2d1YXJkPFN0
YXRpY011dGV4PiYsIHVuc2lnbmVkIGNoYXIgcmVmQ291bnQpCiB7Ci0gICAgQkFTU0VSVCghbV9y
ZWZDb3VudCk7IC8vIFVwLXJlZiBmcm9tIHplcm8gY2FuIGJlIGxvY2stZnJlZSBiZWNhdXNlIHRo
ZXJlIGFyZSBubyBvdGhlciBjbGllbnRzLgotICAgIEJBU1NFUlQoY291bnQgPD0gbWF4UmVmQ291
bnQpOwotICAgIG1fcmVmQ291bnQgPSBjb3VudDsKKyAgICBCQVNTRVJUKCFtX3JlZkNvdW50KTsK
KyAgICBCQVNTRVJUKHJlZkNvdW50IDw9IG1heFJlZkNvdW50KTsKKyAgICBtX3JlZkNvdW50ID0g
cmVmQ291bnQ7CiB9CiAKIHRlbXBsYXRlPGNsYXNzIFRyYWl0cz4KLWlubGluZSBib29sIExpbmU8
VHJhaXRzPjo6ZGVyZWYoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYsIHVuc2lnbmVkIGNo
YXIgY291bnQpCitpbmxpbmUgYm9vbCBMaW5lPFRyYWl0cz46OmRlcmVmKHN0ZDo6bG9ja19ndWFy
ZDxTdGF0aWNNdXRleD4mKQogewotICAgIEJBU1NFUlQoY291bnQgPD0gbV9yZWZDb3VudCk7Ci0g
ICAgbV9yZWZDb3VudCAtPSBjb3VudDsKKyAgICBCQVNTRVJUKG1fcmVmQ291bnQpOworICAgIC0t
bV9yZWZDb3VudDsKICAgICByZXR1cm4gIW1fcmVmQ291bnQ7CiB9CiAKSW5kZXg6IFNvdXJjZS9i
bWFsbG9jL2JtYWxsb2MvTWVkaXVtQWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2Jt
YWxsb2MvYm1hbGxvYy9NZWRpdW1BbGxvY2F0b3IuaAkocmV2aXNpb24gMTczNjczKQorKysgU291
cmNlL2JtYWxsb2MvYm1hbGxvYy9NZWRpdW1BbGxvY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAt
MSwxMTUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAq
LwotCi0jaWZuZGVmIE1lZGl1bUFsbG9jYXRvcl9oCi0jZGVmaW5lIE1lZGl1bUFsbG9jYXRvcl9o
Ci0KLSNpbmNsdWRlICJCQXNzZXJ0LmgiCi0jaW5jbHVkZSAiTWVkaXVtQ2h1bmsuaCIKLSNpbmNs
dWRlICJNZWRpdW1MaW5lLmgiCi0KLW5hbWVzcGFjZSBibWFsbG9jIHsKLQotLy8gSGVscGVyIG9i
amVjdCBmb3IgYWxsb2NhdGluZyBtZWRpdW0gb2JqZWN0cy4KLQotY2xhc3MgTWVkaXVtQWxsb2Nh
dG9yIHsKLXB1YmxpYzoKLSAgICBNZWRpdW1BbGxvY2F0b3IoKTsKLQotICAgIGJvb2wgaXNOdWxs
KCkgeyByZXR1cm4gIW1fZW5kOyB9Ci0gICAgTWVkaXVtTGluZSogbGluZSgpOwotCi0gICAgdm9p
ZCogYWxsb2NhdGUoc2l6ZV90KTsKLSAgICBib29sIGFsbG9jYXRlKHNpemVfdCwgdm9pZComKTsK
LQotICAgIHVuc2lnbmVkIGNoYXIgZGVyZWZDb3VudCgpOwotCi0gICAgdm9pZCByZWZpbGwoTWVk
aXVtTGluZSopOwotICAgIHZvaWQgY2xlYXIoKTsKLQotcHJpdmF0ZToKLSAgICBjaGFyKiBtX2Vu
ZDsKLSAgICBzaXplX3QgbV9yZW1haW5pbmc7Ci0gICAgc2l6ZV90IG1fb2JqZWN0Q291bnQ7Ci19
OwotCi1pbmxpbmUgTWVkaXVtQWxsb2NhdG9yOjpNZWRpdW1BbGxvY2F0b3IoKQotICAgIDogbV9l
bmQoKQotICAgICwgbV9yZW1haW5pbmcoKQotICAgICwgbV9vYmplY3RDb3VudCgpCi17Ci19Ci0K
LWlubGluZSBNZWRpdW1MaW5lKiBNZWRpdW1BbGxvY2F0b3I6OmxpbmUoKQotewotICAgIHJldHVy
biBNZWRpdW1MaW5lOjpnZXQobV9lbmQgLSAxKTsKLX0KLQotaW5saW5lIHZvaWQqIE1lZGl1bUFs
bG9jYXRvcjo6YWxsb2NhdGUoc2l6ZV90IHNpemUpCi17Ci0gICAgQkFTU0VSVChzaXplIDw9IG1f
cmVtYWluaW5nKTsKLSAgICBCQVNTRVJUKHNpemUgPT0gcm91bmRVcFRvTXVsdGlwbGVPZjxhbGln
bm1lbnQ+KHNpemUpKTsKLSAgICBCQVNTRVJUKHNpemUgPj0gTWVkaXVtTGluZTo6bWluaW11bU9i
amVjdFNpemUpOwotCi0gICAgbV9yZW1haW5pbmcgLT0gc2l6ZTsKLSAgICB2b2lkKiBvYmplY3Qg
PSBtX2VuZCAtIG1fcmVtYWluaW5nIC0gc2l6ZTsKLSAgICBCQVNTRVJUKGlzU21hbGxPck1lZGl1
bShvYmplY3QpICYmICFpc1NtYWxsKG9iamVjdCkpOwotCi0gICAgKyttX29iamVjdENvdW50Owot
ICAgIHJldHVybiBvYmplY3Q7Ci19Ci0KLWlubGluZSBib29sIE1lZGl1bUFsbG9jYXRvcjo6YWxs
b2NhdGUoc2l6ZV90IHNpemUsIHZvaWQqJiBvYmplY3QpCi17Ci0gICAgaWYgKHNpemUgPiBtX3Jl
bWFpbmluZykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgb2JqZWN0ID0gYWxsb2NhdGUo
c2l6ZSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWlubGluZSB1bnNpZ25lZCBjaGFyIE1lZGl1
bUFsbG9jYXRvcjo6ZGVyZWZDb3VudCgpCi17Ci0gICAgcmV0dXJuIE1lZGl1bUxpbmU6Om1heFJl
ZkNvdW50IC0gbV9vYmplY3RDb3VudDsKLX0KLQotaW5saW5lIHZvaWQgTWVkaXVtQWxsb2NhdG9y
OjpyZWZpbGwoTWVkaXVtTGluZSogbGluZSkKLXsKLSAgICBsaW5lLT5jb25jdXJyZW50UmVmKE1l
ZGl1bUxpbmU6Om1heFJlZkNvdW50KTsKLSAgICBtX2VuZCA9IGxpbmUtPmVuZCgpOwotICAgIG1f
cmVtYWluaW5nID0gbWVkaXVtTGluZVNpemU7Ci0gICAgbV9vYmplY3RDb3VudCA9IDA7Ci19Ci0K
LWlubGluZSB2b2lkIE1lZGl1bUFsbG9jYXRvcjo6Y2xlYXIoKQotewotICAgIG1fZW5kID0gbnVs
bHB0cjsKLSAgICBtX3JlbWFpbmluZyA9IDA7Ci0gICAgbV9vYmplY3RDb3VudCA9IDA7Ci19Ci0K
LX0gLy8gbmFtZXNwYWNlIGJtYWxsb2MKLQotI2VuZGlmIC8vIE1lZGl1bUFsbG9jYXRvcl9oCklu
ZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1BhZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
Ym1hbGxvYy9ibWFsbG9jL1BhZ2UuaAkocmV2aXNpb24gMTczNjczKQorKysgU291cmNlL2JtYWxs
b2MvYm1hbGxvYy9QYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDkgKzM5LDEwIEBAIHB1Ymxp
YzoKICAgICB0eXBlZGVmIHR5cGVuYW1lIFRyYWl0czo6Q2h1bmsgQ2h1bms7CiAgICAgdHlwZWRl
ZiB0eXBlbmFtZSBUcmFpdHM6OkxpbmUgTGluZTsKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGxp
bmVTaXplID0gVHJhaXRzOjpsaW5lU2l6ZTsKKyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGxpbmVD
b3VudCA9IHZtUGFnZVNpemUgLyBsaW5lU2l6ZTsKIAogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25l
ZCBjaGFyIG1heFJlZkNvdW50ID0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZCBjaGFyPjo6
bWF4KCk7Ci0gICAgc3RhdGljX2Fzc2VydCh2bVBhZ2VTaXplIC8gbGluZVNpemUgPCBtYXhSZWZD
b3VudCwgIm1heGltdW0gbGluZSBjb3VudCBtdXN0IGZpdCBpbiBQYWdlIik7CisgICAgc3RhdGlj
X2Fzc2VydChsaW5lQ291bnQgPCBtYXhSZWZDb3VudCwgIm1heGltdW0gbGluZSBjb3VudCBtdXN0
IGZpdCBpbiBQYWdlIik7CiAgICAgCiAgICAgc3RhdGljIFBhZ2UqIGdldChMaW5lKik7CiAKQEAg
LTQ5LDE1ICs1MCwxNSBAQCBwdWJsaWM6CiAgICAgYm9vbCBkZXJlZihzdGQ6OmxvY2tfZ3VhcmQ8
U3RhdGljTXV0ZXg+Jik7CiAgICAgdW5zaWduZWQgcmVmQ291bnQoc3RkOjpsb2NrX2d1YXJkPFN0
YXRpY011dGV4PiYpIHsgcmV0dXJuIG1fcmVmQ291bnQ7IH0KICAgICAKLSAgICBzaXplX3Qgc21h
bGxTaXplQ2xhc3MoKSB7IHJldHVybiBtX3NtYWxsU2l6ZUNsYXNzOyB9Ci0gICAgdm9pZCBzZXRT
bWFsbFNpemVDbGFzcyhzaXplX3Qgc21hbGxTaXplQ2xhc3MpIHsgbV9zbWFsbFNpemVDbGFzcyA9
IHNtYWxsU2l6ZUNsYXNzOyB9CisgICAgc2l6ZV90IHNpemVDbGFzcygpIHsgcmV0dXJuIG1fc2l6
ZUNsYXNzOyB9CisgICAgdm9pZCBzZXRTaXplQ2xhc3Moc2l6ZV90IHNpemVDbGFzcykgeyBtX3Np
emVDbGFzcyA9IHNpemVDbGFzczsgfQogICAgIAogICAgIExpbmUqIGJlZ2luKCk7CiAgICAgTGlu
ZSogZW5kKCk7CiAKIHByaXZhdGU6CiAgICAgdW5zaWduZWQgY2hhciBtX3JlZkNvdW50OwotICAg
IHVuc2lnbmVkIGNoYXIgbV9zbWFsbFNpemVDbGFzczsKKyAgICB1bnNpZ25lZCBjaGFyIG1fc2l6
ZUNsYXNzOwogfTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgVHJhaXRzPgpAQCAtODksMTQgKzkwLDE0
IEBAIGlubGluZSBhdXRvIFBhZ2U8VHJhaXRzPjo6YmVnaW4oKSAtPiBMaW4KIHsKICAgICBDaHVu
ayogY2h1bmsgPSBDaHVuazo6Z2V0KHRoaXMpOwogICAgIHNpemVfdCBwYWdlTnVtYmVyID0gdGhp
cyAtIGNodW5rLT5wYWdlcygpOwotICAgIHNpemVfdCBsaW5lTnVtYmVyID0gcGFnZU51bWJlciAq
IHZtUGFnZVNpemUgLyBsaW5lU2l6ZTsKKyAgICBzaXplX3QgbGluZU51bWJlciA9IHBhZ2VOdW1i
ZXIgKiBsaW5lQ291bnQ7CiAgICAgcmV0dXJuICZjaHVuay0+bGluZXMoKVtsaW5lTnVtYmVyXTsK
IH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVHJhaXRzPgogaW5saW5lIGF1dG8gUGFnZTxUcmFpdHM+
OjplbmQoKSAtPiBMaW5lKgogewotICAgIHJldHVybiBiZWdpbigpICsgdm1QYWdlU2l6ZSAvIGxp
bmVTaXplOworICAgIHJldHVybiBiZWdpbigpICsgbGluZUNvdW50OwogfQogCiB9IC8vIG5hbWVz
cGFjZSBibWFsbG9jCkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1NpemVzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9TaXplcy5oCShyZXZpc2lvbiAxNzM2NzUp
CisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1NpemVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTU2
LDcgKzU2LDcgQEAgbmFtZXNwYWNlIFNpemVzIHsKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IHN1
cGVyQ2h1bmtTaXplID0gMzIgKiBNQjsKIAogICAgIHN0YXRpYyBjb25zdCBzaXplX3Qgc21hbGxN
YXggPSAyNTY7Ci0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBzbWFsbExpbmVTaXplID0gNTEyOwor
ICAgIHN0YXRpYyBjb25zdCBzaXplX3Qgc21hbGxMaW5lU2l6ZSA9IDI1NjsKICAgICBzdGF0aWMg
Y29uc3Qgc2l6ZV90IHNtYWxsTGluZU1hc2sgPSB+KHNtYWxsTGluZVNpemUgLSAxdWwpOwogCiAg
ICAgc3RhdGljIGNvbnN0IHNpemVfdCBzbWFsbENodW5rU2l6ZSA9IHN1cGVyQ2h1bmtTaXplIC8g
NDsKQEAgLTY0LDcgKzY0LDcgQEAgbmFtZXNwYWNlIFNpemVzIHsKICAgICBzdGF0aWMgY29uc3Qg
c2l6ZV90IHNtYWxsQ2h1bmtNYXNrID0gfihzbWFsbENodW5rU2l6ZSAtIDF1bCk7CiAKICAgICBz
dGF0aWMgY29uc3Qgc2l6ZV90IG1lZGl1bU1heCA9IDEwMjQ7Ci0gICAgc3RhdGljIGNvbnN0IHNp
emVfdCBtZWRpdW1MaW5lU2l6ZSA9IDIwNDg7CisgICAgc3RhdGljIGNvbnN0IHNpemVfdCBtZWRp
dW1MaW5lU2l6ZSA9IDEwMjQ7CiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBtZWRpdW1MaW5lTWFz
ayA9IH4obWVkaXVtTGluZVNpemUgLSAxdWwpOwogCiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBt
ZWRpdW1DaHVua1NpemUgPSBzdXBlckNodW5rU2l6ZSAvIDQ7CkBAIC05MiwyMSArOTIsMjAgQEAg
bmFtZXNwYWNlIFNpemVzIHsKIAogICAgIHN0YXRpYyBjb25zdCBzaXplX3QgZGVhbGxvY2F0b3JM
b2dDYXBhY2l0eSA9IDI1NjsKIAotICAgIHN0YXRpYyBjb25zdCBzaXplX3Qgc21hbGxMaW5lQ2Fj
aGVDYXBhY2l0eSA9IHZtUGFnZVNpemUgLyBzbWFsbExpbmVTaXplOwotICAgIHN0YXRpYyBjb25z
dCBzaXplX3QgbWVkaXVtTGluZUNhY2hlQ2FwYWNpdHkgPSB2bVBhZ2VTaXplIC8gbWVkaXVtTGlu
ZVNpemU7CisgICAgc3RhdGljIGNvbnN0IHNpemVfdCBzbWFsbFJhbmdlQ2FjaGVDYXBhY2l0eSA9
IHZtUGFnZVNpemUgLyBzbWFsbExpbmVTaXplOworICAgIHN0YXRpYyBjb25zdCBzaXplX3QgbWVk
aXVtUmFuZ2VDYWNoZUNhcGFjaXR5ID0gdm1QYWdlU2l6ZSAvIG1lZGl1bUxpbmVTaXplOwogICAg
IAogICAgIHN0YXRpYyBjb25zdCBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzIHNjYXZlbmdlU2xl
ZXBEdXJhdGlvbiA9IHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMoNTEyKTsKIAotICAgIGlubGlu
ZSBzaXplX3Qgc21hbGxTaXplQ2xhc3NGb3Ioc2l6ZV90IHNpemUpCisgICAgaW5saW5lIHNpemVf
dCBzaXplQ2xhc3Moc2l6ZV90IHNpemUpCiAgICAgewotICAgICAgICBzdGF0aWMgY29uc3Qgc2l6
ZV90IHNtYWxsU2l6ZUNsYXNzTWFzayA9IChzbWFsbE1heCAvIGFsaWdubWVudCkgLSAxOwotICAg
ICAgICByZXR1cm4gbWFzaygoc2l6ZSAtIDF1bCkgLyBhbGlnbm1lbnQsIHNtYWxsU2l6ZUNsYXNz
TWFzayk7CisgICAgICAgIHN0YXRpYyBjb25zdCBzaXplX3Qgc2l6ZUNsYXNzTWFzayA9IChtZWRp
dW1NYXggLyBhbGlnbm1lbnQpIC0gMTsKKyAgICAgICAgcmV0dXJuIG1hc2soKHNpemUgLSAxdWwp
IC8gYWxpZ25tZW50LCBzaXplQ2xhc3NNYXNrKTsKICAgICB9CiAKLSAgICBpbmxpbmUgc2l6ZV90
IG1lZGl1bVNpemVDbGFzc0ZvcihzaXplX3Qgc2l6ZSkKKyAgICBpbmxpbmUgc2l6ZV90IG9iamVj
dFNpemUoc2l6ZV90IHNpemVDbGFzcykKICAgICB7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBzaXpl
X3QgbWVkaXVtU2l6ZUNsYXNzTWFzayA9IChtZWRpdW1NYXggLyBhbGlnbm1lbnQpIC0gMTsKLSAg
ICAgICAgcmV0dXJuIG1hc2soKHNpemUgLSAxdWwpIC8gYWxpZ25tZW50LCBtZWRpdW1TaXplQ2xh
c3NNYXNrKTsKKyAgICAgICAgcmV0dXJuIChzaXplQ2xhc3MgKyAxKSAqIGFsaWdubWVudDsKICAg
ICB9CiB9OwogCkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL2JtYWxsb2MuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL2JtYWxsb2MuaAkocmV2aXNpb24gMTczNjcz
KQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9ibWFsbG9jLmgJKHdvcmtpbmcgY29weSkKQEAg
LTUyLDE1ICs1MiwxMyBAQCBpbmxpbmUgdm9pZCogcmVhbGxvYyh2b2lkKiBvYmplY3QsIHNpemVf
CiAgICAgc2l6ZV90IG9sZFNpemUgPSAwOwogICAgIHN3aXRjaChvYmplY3RUeXBlKG9iamVjdCkp
IHsKICAgICBjYXNlIFNtYWxsOiB7Ci0gICAgICAgIC8vIFdlIGRvbid0IGhhdmUgYW4gZXhhY3Qg
c2l6ZSwgYnV0IHdlIGNhbiBjYWxjdWxhdGUgYSBtYXhpbXVtLgotICAgICAgICB2b2lkKiBlbmQg
PSByb3VuZFVwVG9NdWx0aXBsZU9mPHNtYWxsTGluZVNpemU+KHN0YXRpY19jYXN0PGNoYXIqPihv
YmplY3QpICsgMSk7Ci0gICAgICAgIG9sZFNpemUgPSBzdGF0aWNfY2FzdDxjaGFyKj4oZW5kKSAt
IHN0YXRpY19jYXN0PGNoYXIqPihvYmplY3QpOworICAgICAgICBTbWFsbFBhZ2UqIHBhZ2UgPSBT
bWFsbFBhZ2U6OmdldChTbWFsbExpbmU6OmdldChvYmplY3QpKTsKKyAgICAgICAgb2xkU2l6ZSA9
IG9iamVjdFNpemUocGFnZS0+c2l6ZUNsYXNzKCkpOwogICAgICAgICBicmVhazsKICAgICB9CiAg
ICAgY2FzZSBNZWRpdW06IHsKLSAgICAgICAgLy8gV2UgZG9uJ3QgaGF2ZSBhbiBleGFjdCBzaXpl
LCBidXQgd2UgY2FuIGNhbGN1bGF0ZSBhIG1heGltdW0uCi0gICAgICAgIHZvaWQqIGVuZCA9IHJv
dW5kVXBUb011bHRpcGxlT2Y8bWVkaXVtTGluZVNpemU+KHN0YXRpY19jYXN0PGNoYXIqPihvYmpl
Y3QpICsgMSk7Ci0gICAgICAgIG9sZFNpemUgPSBzdGF0aWNfY2FzdDxjaGFyKj4oZW5kKSAtIHN0
YXRpY19jYXN0PGNoYXIqPihvYmplY3QpOworICAgICAgICBNZWRpdW1QYWdlKiBwYWdlID0gTWVk
aXVtUGFnZTo6Z2V0KE1lZGl1bUxpbmU6OmdldChvYmplY3QpKTsKKyAgICAgICAgb2xkU2l6ZSA9
IG9iamVjdFNpemUocGFnZS0+c2l6ZUNsYXNzKCkpOwogICAgICAgICBicmVhazsKICAgICB9CiAg
ICAgY2FzZSBMYXJnZTogewo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>238455</attachid>
            <date>2014-09-22 00:29:26 -0700</date>
            <delta_ts>2014-09-22 00:30:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-136993-20140922002924.patch</filename>
            <type>text/plain</type>
            <size>52367</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9ibWFsbG9jL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1h
bGxvYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3MzgwNCkKKysrIFNvdXJjZS9ibWFsbG9jL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyMiBAQAorMjAxNC0wOS0yMSAgR2VvZmZy
ZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29tPgorCisgICAgICAgIGJtYWxsb2M6IEFsbG9jYXRp
b24gc2hvdWxkIGJlIG1vcmUgcHJlY2lzZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTM2OTkzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgMTMlIHJlZHVjdGlvbiBpbiBoZWFwIHNpemUgb24gdGhlIE1hbGxv
Y0JlbmNoICpfbWVtb3J5X3dhcm5pbmcgYmVuY2htYXJrcy4KKworICAgICAgICBUaGlzIHBhdGNo
IHRlYWNoZXMgdGhlIGFsbG9jYXRvciB0byBtZXJnZSBhZGphY2VudCBmcmVlIGxpbmVzIGludG8g
YQorICAgICAgICBzaW5nbGUgYWxsb2NhdGFibGUgcmFuZ2UuIFRoaXMgYWxsb3dzIHVzIHRvIHNo
cmluayB0aGUgc2l6ZSBvZiBhbgorICAgICAgICBpbmRpdmlkdWFsIGxpbmUgd2l0aG91dCBpbmNy
ZWFzaW5nIGZyYWdtZW50YXRpb24gb3IgdGhlIHJhdGUgb2YgYWxsb2NhdG9yCisgICAgICAgIHNs
b3cgcGF0aHMuCisKKyAgICAgICAgV2UnbGwgb25seSB0YWtlIG1vcmUgc2xvdyBwYXRocyB3aGVu
IGF2YWlsYWJsZSBtZW1vcnkgaXMgc3BhcnNlLCB3aGljaAorICAgICAgICBpcyBleGFjdGx5IHdo
ZW4gaXQncyB3b3J0aCBpdC4gV2hlbiBhdmFpbGFibGUgbWVtb3J5IGlzIGRlbnNlLCB3ZSdsbAor
ICAgICAgICB0YWtlIGZld2VyIHNsb3cgcGF0aHMuCisKKyAgICAgICAgKiBibWFsbG9jLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYm1hbGxvYy9BbGdvcml0aG0uaDoKKyAg
ICAgICAgKGJtYWxsb2M6OmRpdmlkZVJvdW5kaW5nVXApOgorCisgICAgICAgICogYm1hbGxvYy9B
bGxvY2F0b3IuY3BwOgorICAgICAgICAoYm1hbGxvYzo6QWxsb2NhdG9yOjpBbGxvY2F0b3IpOiBV
cGRhdGVkIGZvciBpbnRlcmZhY2UgY2hhbmdlcy4KKworICAgICAgICAoYm1hbGxvYzo6QWxsb2Nh
dG9yOjpzY2F2ZW5nZSk6IFNjYXZlbmdlIGJ5IG9iamVjdCBpbnN0ZWFkIG9mIGJ5IGxpbmUuCisg
ICAgICAgIE5vdyB0aGF0IHdlIG1lcmdlIGxpbmVzLCBpdCdzIG5vdCBjb252ZW5pZW50IHRvIHNj
YXZlbmdlIGJ5IGxpbmUuCisKKyAgICAgICAgKGJtYWxsb2M6OkFsbG9jYXRvcjo6YWxsb2NhdGVT
bWFsbEJ1bXBSYW5nZSk6CisgICAgICAgIChibWFsbG9jOjpBbGxvY2F0b3I6OmFsbG9jYXRlTWVk
aXVtQnVtcFJhbmdlKTogQWxsb2NhdGUgd2hvbGUgcmFuZ2VzCisgICAgICAgIGluc3RlYWQgb2Yg
aW5kaXZpZHVhbCBsaW5lcy4KKworICAgICAgICAoYm1hbGxvYzo6QWxsb2NhdG9yOjphbGxvY2F0
ZVNsb3dDYXNlKToKKyAgICAgICAgKGJtYWxsb2M6OkFsbG9jYXRvcjo6YWxsb2NhdGVTbWFsbExp
bmUpOiBEZWxldGVkLgorICAgICAgICAoYm1hbGxvYzo6QWxsb2NhdG9yOjphbGxvY2F0ZU1lZGl1
bUxpbmUpOiBEZWxldGVkLgorICAgICAgICAoYm1hbGxvYzo6QWxsb2NhdG9yOjphbGxvY2F0ZU1l
ZGl1bSk6IERlbGV0ZWQuCisgICAgICAgICogYm1hbGxvYy9BbGxvY2F0b3IuaDoKKyAgICAgICAg
KGJtYWxsb2M6OkFsbG9jYXRvcjo6YWxsb2NhdGVGYXN0Q2FzZSk6IEZvbGRlZCBtZWRpdW0gYWxs
b2NhdGlvbnMKKyAgICAgICAgaW50byB0aGUgc3RhbmRhcmQgZmFzdCBwYXRoIHdpdGggc21hbGwg
YWxsb2NhdGlvbnMuIFNpbmNlIGEgQnVtcEFsbG9jYXRvcgorICAgICAgICBqdXN0IGFsbG9jYXRl
cyBvdXQgb2YgYW4gYXJiaXRyYXJ5IHJhbmdlLCBpdCBkb2Vzbid0IG5lZWQgdG8gZGlzdGluZ3Vp
c2gKKyAgICAgICAgYmV0d2VlbiBzbWFsbCBhbmQgbWVkaXVtIGxpbmVzLgorCisgICAgICAgICog
Ym1hbGxvYy9CdW1wQWxsb2NhdG9yLmg6CisgICAgICAgIChibWFsbG9jOjpCdW1wQWxsb2NhdG9y
OjpzaXplKToKKyAgICAgICAgKGJtYWxsb2M6OkJ1bXBBbGxvY2F0b3I6OkJ1bXBBbGxvY2F0b3Ip
OgorICAgICAgICAoYm1hbGxvYzo6QnVtcEFsbG9jYXRvcjo6aW5pdCk6CisgICAgICAgIChibWFs
bG9jOjpCdW1wQWxsb2NhdG9yOjpyZWZpbGwpOgorICAgICAgICAoYm1hbGxvYzo6QnVtcEFsbG9j
YXRvcjo6bGluZSk6IERlbGV0ZWQuIE5vIG5lZWQgdG8gdHJhY2sgbGluZSBpbmZvcm1hdGlvbgor
ICAgICAgICBhbnltb3JlOiB0aGUgaGVhcCBqdXN0IGdpdmVzIHVzIGEgcG9pbnRlciBhbmQgYSBw
cmUtY29tcHV0ZWQgbnVtYmVyIG9mCisgICAgICAgIG9iamVjdHMsIGFuZCB3ZSBhbGxvY2F0ZSB0
aGVtLgorCisgICAgICAgICogYm1hbGxvYy9EZWFsbG9jYXRvci5jcHA6CisgICAgICAgIChibWFs
bG9jOjpEZWFsbG9jYXRvcjo6cHJvY2Vzc09iamVjdExvZyk6IFVwZGF0ZWQgZm9yIGludGVyZmFj
ZSBjaGFuZ2VzLgorCisgICAgICAgICogYm1hbGxvYy9IZWFwLmNwcDoKKyAgICAgICAgKGJtYWxs
b2M6OkhlYXA6OkhlYXApOgorICAgICAgICAoYm1hbGxvYzo6SGVhcDo6aW5pdGlhbGl6ZUxpbmVN
ZXRhZGF0YSk6IFByZS1jb21wdXRlIHByZWNpc2UgbWV0YWRhdGEKKyAgICAgICAgZGV0YWlsaW5n
IHdoZXJlIGFsbCBvYmplY3RzIHdpbGwgbGllIGluIG1lbW9yeS4gQWZ0ZXIgd2UgbWVyZ2UgdHdv
IGxpbmVzLAorICAgICAgICB3ZSBtaWdodCBhbGxvY2F0ZSBhbiBvYmplY3QgdGhhdCBzcGFucyBm
cm9tIG9uZSBsaW5lIHRvIHRoZSBuZXh0LiBUaGlzCisgICAgICAgIG1ldGFkYXRhIGRldGFpbHMg
d2hpY2ggYml0cyBvZiBtZW1vcnkgb3ZlcmxhcCBpbiB0aGF0IHdheSwgYW5kIGhvdyB0aGV5Cisg
ICAgICAgIG92ZXJsYXAuCisKKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OnJlZmlsbFNtYWxsQnVt
cFJhbmdlQ2FjaGUpOgorICAgICAgICAoYm1hbGxvYzo6SGVhcDo6cmVmaWxsTWVkaXVtQnVtcFJh
bmdlQ2FjaGUpOiBTY2FuIGEgd2hvbGUgcGFnZSBhdCBhIHRpbWUsCisgICAgICAgIGFuZCBtZXJn
ZSBhZGphY2VudCBmcmVlIGxpbmVzIGludG8gQnVtcFJhbmdlcy4KKworICAgICAgICAoYm1hbGxv
Yzo6SGVhcDo6YWxsb2NhdGVTbWFsbFBhZ2UpOgorICAgICAgICAoYm1hbGxvYzo6SGVhcDo6YWxs
b2NhdGVNZWRpdW1QYWdlKToKKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OmRlYWxsb2NhdGVTbWFs
bExpbmUpOgorICAgICAgICAoYm1hbGxvYzo6SGVhcDo6ZGVhbGxvY2F0ZU1lZGl1bUxpbmUpOiBU
cmFjayBwYWdlcyByYXRoZXIgdGhhbiBsaW5lcywKKyAgICAgICAgc2luY2Ugd2Ugc2NhbiBmb3Ig
ZnJlZSBtZW1vcnkgYSBwYWdlIGF0IGEgdGltZS4KKworICAgICAgICAoYm1hbGxvYzo6SGVhcDo6
YWxsb2NhdGVTbWFsbExpbmVTbG93Q2FzZSk6IERlbGV0ZWQuCisgICAgICAgIChibWFsbG9jOjpI
ZWFwOjphbGxvY2F0ZU1lZGl1bUxpbmVTbG93Q2FzZSk6IERlbGV0ZWQuIEZvbGVkIGludG8gdGhl
CisgICAgICAgIGZhc3QgcGF0aC4KKworICAgICAgICAqIGJtYWxsb2MvSGVhcC5oOgorICAgICAg
ICAoYm1hbGxvYzo6SGVhcDo6ZGVyZWZTbWFsbExpbmUpOgorICAgICAgICAoYm1hbGxvYzo6SGVh
cDo6ZGVyZWZNZWRpdW1MaW5lKToKKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OmRlYWxsb2NhdGVT
bWFsbExpbmUpOiBEZWxldGVkLgorICAgICAgICAoYm1hbGxvYzo6SGVhcDo6YWxsb2NhdGVTbWFs
bExpbmUpOiBEZWxldGVkLgorICAgICAgICAoYm1hbGxvYzo6SGVhcDo6ZGVhbGxvY2F0ZU1lZGl1
bUxpbmUpOiBEZWxldGVkLgorICAgICAgICAoYm1hbGxvYzo6SGVhcDo6YWxsb2NhdGVNZWRpdW1M
aW5lKTogRGVsZXRlZC4gVXBkYXRlZCBmb3IgaW50ZXJmYWNlIGNoYW5nZXMuCisKKyAgICAgICAg
KiBibWFsbG9jL0xpbmUuaDoKKyAgICAgICAgKGJtYWxsb2M6OkxpbmU8VHJhaXRzPjo6cmVmKToK
KyAgICAgICAgKGJtYWxsb2M6OkxpbmU8VHJhaXRzPjo6ZGVyZWYpOgorICAgICAgICAoYm1hbGxv
Yzo6TGluZTxUcmFpdHM+Ojpjb25jdXJyZW50UmVmKTogRGVsZXRlZC4gV2UgZG9uJ3QgcGFzcyBh
IGRlcmVmQ291bnQKKyAgICAgICAgYW55bW9yZSwgc2luY2Ugd2Ugb25seSBldmVyIGRlcmVmIGJ5
IDEgbm93LgorCisgICAgICAgICogYm1hbGxvYy9NZWRpdW1BbGxvY2F0b3IuaDoKKyAgICAgICAg
KGJtYWxsb2M6Ok1lZGl1bUFsbG9jYXRvcjo6aXNOdWxsKTogRGVsZXRlZC4KKyAgICAgICAgKGJt
YWxsb2M6Ok1lZGl1bUFsbG9jYXRvcjo6TWVkaXVtQWxsb2NhdG9yKTogRGVsZXRlZC4KKyAgICAg
ICAgKGJtYWxsb2M6Ok1lZGl1bUFsbG9jYXRvcjo6bGluZSk6IERlbGV0ZWQuCisgICAgICAgIChi
bWFsbG9jOjpNZWRpdW1BbGxvY2F0b3I6OmFsbG9jYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKGJt
YWxsb2M6Ok1lZGl1bUFsbG9jYXRvcjo6ZGVyZWZDb3VudCk6IERlbGV0ZWQuCisgICAgICAgIChi
bWFsbG9jOjpNZWRpdW1BbGxvY2F0b3I6OnJlZmlsbCk6IERlbGV0ZWQuCisgICAgICAgIChibWFs
bG9jOjpNZWRpdW1BbGxvY2F0b3I6OmNsZWFyKTogRGVsZXRlZC4gRGVsZXRlZCBzb21lIGNvZGUg
dGhhdCdzCisgICAgICAgIGJlZW4gZGVhZCBmb3IgYSB3aGlsZSwgc2luY2UgaXQgZG9lc24ndCBi
dWlsZCBhbnltb3JlIHdpdGggdGhpcyBwYXRjaC4KKworICAgICAgICAqIGJtYWxsb2MvUGFnZS5o
OgorICAgICAgICAoYm1hbGxvYzo6UGFnZTo6c2l6ZUNsYXNzKToKKyAgICAgICAgKGJtYWxsb2M6
OlBhZ2U6OnNldFNpemVDbGFzcyk6CisgICAgICAgIChibWFsbG9jOjpQYWdlOjpzbWFsbFNpemVD
bGFzcyk6IERlbGV0ZWQuCisgICAgICAgIChibWFsbG9jOjpQYWdlOjpzZXRTbWFsbFNpemVDbGFz
cyk6IERlbGV0ZWQuIFJlbmFtZWQgc2V0U21hbGxTaXplQ2xhc3MKKyAgICAgICAgdG8gc2l6ZUNs
YXNzLCBzaW5jZSB3ZSB1c2UgaXQgZm9yIG1lZGl1bSBzaXplcyB0b28uCisKKyAgICAgICAgKiBi
bWFsbG9jL1NpemVzLmg6CisgICAgICAgIChibWFsbG9jOjpTaXplczo6c2l6ZUNsYXNzKToKKyAg
ICAgICAgKGJtYWxsb2M6OlNpemVzOjpvYmplY3RTaXplKTogU2hyYW5rIGxpbmUgc2l6ZXMgdG8g
c2F2ZSBtZW1vcnkuCisKKyAgICAgICAgKGJtYWxsb2M6OlNpemVzOjpzbWFsbFNpemVDbGFzc0Zv
cik6IERlbGV0ZWQuCisgICAgICAgIChibWFsbG9jOjpTaXplczo6bWVkaXVtU2l6ZUNsYXNzRm9y
KTogRGVsZXRlZC4KKworICAgICAgICAqIGJtYWxsb2MvYm1hbGxvYy5oOgorICAgICAgICAoYm1h
bGxvYzo6YXBpOjpyZWFsbG9jKTogTm93IHRoYXQgd2UgaGF2ZSBwcmVjaXNlIG9iamVjdHMgc2l6
ZXMsIHJlYWxsb2MKKyAgICAgICAgY2FuIGJlIGEgYml0IG1vcmUgcHJlY2lzZS4gSXQgYWxzbyBo
YXMgdG8gYmUsIHNpbmNlIHdlIGNhbid0IGd1YXJhbnRlZQorICAgICAgICB0aGF0IGFuIG9iamVj
dCBlbmRzIGF0IHRoZSBlbmQgb2YgYSBsaW5lIGFueW1vcmUuCisKIDIwMTQtMDktMTkgIERhbmll
bCBCYXRlcyAgPGRhYmF0ZXNAYXBwbGUuY29tPgogCiAgICAgICAgIEFsd2F5cyBhc3N1bWUgaW50
ZXJuYWwgU0RLIHdoZW4gYnVpbGRpbmcgY29uZmlndXJhdGlvbiBQcm9kdWN0aW9uCkluZGV4OiBT
b3VyY2UvYm1hbGxvYy9ibWFsbG9jLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShy
ZXZpc2lvbiAxNzM2NzMpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTExLDYgKzExLDggQEAKIAkJMTQwMDI3NEEx
OEY4OUMyMzAwMTE1Qzk3IC8qIFZNSGVhcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMTQ0RjdCRkMxOEJGQzUxNzAwMzUzN0YzIC8qIFZNSGVhcC5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTE0MDAyNzRC
MThGODlDM0QwMDExNUM5NyAvKiBCb3VuZGFyeVRhZ0lubGluZXMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0MTA1RTdCMThEQkQ3QUYwMDNBMTA2RSAv
KiBCb3VuZGFyeVRhZ0lubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkxNDAwMjc0QzE4Rjg5QzNEMDAxMTVDOTcgLyogU2VncmVnYXRlZEZy
ZWVMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAx
NDZCRUUxRTE4Qzg0MUM1MDAwMkQ1QTIgLyogU2VncmVnYXRlZEZyZWVMaXN0LmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMTQwRkEwMDMxOUNFNDI5
QzAwRkZEM0M4IC8qIEJ1bXBSYW5nZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMTQwRkEwMDIxOUNFNDI5QzAwRkZEM0M4IC8qIEJ1bXBSYW5nZS5oICov
OyB9OworCQkxNDBGQTAwNTE5Q0U0QjY4MDBGRkQzQzggLyogTGluZU1ldGFkYXRhLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDBGQTAwNDE5Q0U0QjY4
MDBGRkQzQzggLyogTGluZU1ldGFkYXRhLmggKi87IH07CiAJCTE0M0NCODFDMTkwMjJCQzkwMEIx
NkE0NSAvKiBTdGF0aWNNdXRleC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAxNDNDQjgxQTE5MDIyQkM5MDBCMTZBNDUgLyogU3RhdGljTXV0ZXguY3Bw
ICovOyB9OwogCQkxNDNDQjgxRDE5MDIyQkM5MDBCMTZBNDUgLyogU3RhdGljTXV0ZXguaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0M0NCODFCMTkwMjJC
QzkwMEIxNkE0NSAvKiBTdGF0aWNNdXRleC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTE0NDhDMzAwMThGMzc1NDYwMDUwMjgzOSAvKiBtYm1hbGxv
Yy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDQ4
QzJGRjE4RjM3NTQzMDA1MDI4MzkgLyogbWJtYWxsb2MuY3BwICovOyB9OwpAQCAtMjYsNyArMjgs
NiBAQAogCQkxNERENzg5ODE4RjQ4RDRBMDA5NTA3MDIgLyogQWxsb2NhdG9yLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDVGNjg1NjE3OURDOENBMDBE
NjU1OTggLyogQWxsb2NhdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJMTRERDc4OTkxOEY0OEQ0QTAwOTUwNzAyIC8qIENhY2hlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDQ0NjlFNTE3QTQ2QkZF
MDBGOUVBMUQgLyogQ2FjaGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQkxNERENzg5QTE4RjQ4RDRBMDA5NTA3MDIgLyogRGVhbGxvY2F0b3IuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0NUY2ODVBMTc5
REM5MDIwMEQ2NTU5OCAvKiBEZWFsbG9jYXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTE0REQ3ODlCMThGNDhENEEwMDk1MDcwMiAvKiBNZWRp
dW1BbGxvY2F0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDE0MTNFNDcwMThBMDY2MTcwMDU0NkQ2OCAvKiBNZWRpdW1BbGxvY2F0b3IuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxNERENzg5QzE4RjQ4
RDRBMDA5NTA3MDIgLyogQnVtcEFsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMTQxM0U0NjIxODlERTFDRDAwNTQ2RDY4IC8qIEJ1bXBBbGxv
Y2F0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkxNERENzhCNDE4RjQ4RDZCMDA5NTA3MDIgLyogQ2h1bmsuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0N0FBQTk0MThDRTVDQTYwMDIyMDFFNCAvKiBD
aHVuay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTE0REQ3OEI1MThGNDhENkIwMDk1MDcwMiAvKiBMaW5lLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNERBMzIwNzE4ODVGOUU2MDA3MjY5RTAgLyogTGlu
ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC03
MiwxMiArNzMsMTMgQEAKIC8qIEVuZCBQQlhDb250YWluZXJJdGVtUHJveHkgc2VjdGlvbiAqLwog
CiAvKiBCZWdpbiBQQlhGaWxlUmVmZXJlbmNlIHNlY3Rpb24gKi8KKwkJMTQwRkEwMDIxOUNFNDI5
QzAwRkZEM0M4IC8qIEJ1bXBSYW5nZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBCdW1wUmFuZ2UuaDsgcGF0aCA9IGJtYWxsb2MvQnVtcFJhbmdlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTE0MEZBMDA0MTlDRTRCNjgwMEZGRDNDOCAvKiBMaW5lTWV0YWRhdGEu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTGluZU1ldGFkYXRhLmg7IHBhdGgg
PSBibWFsbG9jL0xpbmVNZXRhZGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkx
NDEwNUU3QjE4REJEN0FGMDAzQTEwNkUgLyogQm91bmRhcnlUYWdJbmxpbmVzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEJvdW5kYXJ5VGFnSW5saW5lcy5oOyBwYXRoID0gYm1h
bGxvYy9Cb3VuZGFyeVRhZ0lubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MTQxMDVFODMxOEUxNDM3NDAwM0ExMDZFIC8qIE9iamVjdFR5cGUuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gT2JqZWN0VHlwZS5jcHA7IHBhdGggPSBibWFsbG9jL09i
amVjdFR5cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDEzRTQ2MDE4OURD
RTFFMDA1NDZENjggLyogSW5saW5lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IElubGluZS5oOyBwYXRoID0gYm1hbGxvYy9JbmxpbmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMTQxM0U0NjIxODlERTFDRDAwNTQ2RDY4IC8qIEJ1bXBBbGxvY2F0b3IuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBsaW5lRW5kaW5nID0gMDsgbmFtZSA9IEJ1bXBBbGxvY2F0
b3IuaDsgcGF0aCA9IGJtYWxsb2MvQnVtcEFsbG9jYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkxNDEzRTQ2ODE4OUVFREU0MDA1NDZENjggLyogQkFzc2VydC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCQXNzZXJ0Lmg7IHBhdGggPSBibWFsbG9jL0JBc3Nl
cnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMTQxM0U0NzAxOEEwNjYxNzAwNTQ2
RDY4IC8qIE1lZGl1bUFsbG9jYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBNZWRpdW1BbGxvY2F0b3IuaDsgcGF0aCA9IGJtYWxsb2MvTWVkaXVtQWxsb2NhdG9yLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0MTdGNjQ1MThCNTRBNzAwMDc2RkEzRiAvKiBC
ZWdpblRhZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCZWdpblRhZy5oOyBw
YXRoID0gYm1hbGxvYy9CZWdpblRhZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkx
NDE3RjY0NjE4QjU0QTcwMDA3NkZBM0YgLyogRW5kVGFnLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IEVuZFRhZy5oOyBwYXRoID0gYm1hbGxvYy9FbmRUYWcuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQxN0Y2NEYxOEI3MjgwQzAwNzZGQTNGIC8qIFN5c2NhbGwu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gU3lzY2FsbC5oOyBwYXRoID0gYm1h
bGxvYy9TeXNjYWxsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMzUsNyArMjM3
LDYgQEAKIAkJCQkxNDQ0NjlFNTE3QTQ2QkZFMDBGOUVBMUQgLyogQ2FjaGUuaCAqLywKIAkJCQkx
NDVGNjg1OTE3OURDOTAyMDBENjU1OTggLyogRGVhbGxvY2F0b3IuY3BwICovLAogCQkJCTE0NUY2
ODVBMTc5REM5MDIwMEQ2NTU5OCAvKiBEZWFsbG9jYXRvci5oICovLAotCQkJCTE0MTNFNDcwMThB
MDY2MTcwMDU0NkQ2OCAvKiBNZWRpdW1BbGxvY2F0b3IuaCAqLywKIAkJCQkxNDEzRTQ2MjE4OURF
MUNEMDA1NDZENjggLyogQnVtcEFsbG9jYXRvci5oICovLAogCQkJKTsKIAkJCW5hbWUgPSBjYWNo
ZTsKQEAgLTI0NCw4ICsyNDUsMTAgQEAKIAkJMTREOURCNEUxN0YyODY2RTAwRUFBQjc5IC8qIGhl
YXAgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTE0MEZB
MDAyMTlDRTQyOUMwMEZGRDNDOCAvKiBCdW1wUmFuZ2UuaCAqLywKIAkJCQkxNERBMzIwRTE4ODc1
RDlGMDA3MjY5RTAgLyogSGVhcC5jcHAgKi8sCiAJCQkJMTREQTMyMEMxODg3NUIwOTAwNzI2OUUw
IC8qIEhlYXAuaCAqLywKKwkJCQkxNDBGQTAwNDE5Q0U0QjY4MDBGRkQzQzggLyogTGluZU1ldGFk
YXRhLmggKi8sCiAJCQkJMTQxMDVFODMxOEUxNDM3NDAwM0ExMDZFIC8qIE9iamVjdFR5cGUuY3Bw
ICovLAogCQkJCTE0ODU2NTYwMThBNDNEQkEwMEVENjk0MiAvKiBPYmplY3RUeXBlLmggKi8sCiAJ
CQkJMTQ1RjY4NzQxNzlERjg0MTAwRDY1NTk4IC8qIFNpemVzLmggKi8sCkBAIC0yOTYsNiArMjk5
LDcgQEAKIAkJCQkxNEM5MTlDOTE4RkNDNTlGMDAyOERCNDMgLyogQlBsYXRmb3JtLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkxNERENzg4QzE4RjQ4Q0FFMDA5NTA3MDIgLyogTGFyZ2VDaHVuay5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMTRERDc4OTIxOEY0OENGQzAwOTUwNzAyIC8qIEVuZFRhZy5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMTQwRkEwMDUxOUNFNEI2ODAwRkZEM0M4IC8qIExpbmVNZXRhZGF0
YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRERDc4Q0MxOEY0OEQ3NTAwOTUwNzAyIC8qIFBlclRo
cmVhZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRERDc4QjQxOEY0OEQ2QjAwOTUwNzAyIC8qIENo
dW5rLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNERENzhDQTE4RjQ4RDc1MDA5NTA3MDIgLyogTXV0
ZXguaCBpbiBIZWFkZXJzICovLApAQCAtMzA5LDcgKzMxMyw2IEBACiAJCQkJMTRERDc4Q0QxOEY0
OEQ3NTAwOTUwNzAyIC8qIFJhbmdlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNERENzg5QzE4RjQ4
RDRBMDA5NTA3MDIgLyogQnVtcEFsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRERDc4
OTkxOEY0OEQ0QTAwOTUwNzAyIC8qIENhY2hlLmggaW4gSGVhZGVycyAqLywKLQkJCQkxNERENzg5
QjE4RjQ4RDRBMDA5NTA3MDIgLyogTWVkaXVtQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkxNERENzhCRTE4RjQ4RDZCMDA5NTA3MDIgLyogU21hbGxUcmFpdHMuaCBpbiBIZWFkZXJzICov
LAogCQkJCTE0REQ3ODkwMThGNDhDRUIwMDk1MDcwMiAvKiBTaXplcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMTRERDc4QzcxOEY0OEQ3NTAwOTUwNzAyIC8qIEJBc3NlcnQuaCBpbiBIZWFkZXJzICov
LApAQCAtMzIyLDYgKzMyNSw3IEBACiAJCQkJMTQwMDI3NEExOEY4OUMyMzAwMTE1Qzk3IC8qIFZN
SGVhcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQwMDI3NDkxOEY4OUMxMzAwMTE1Qzk3IC8qIEhl
YXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0REQ3OEI4MThGNDhENkIwMDk1MDcwMiAvKiBNZWRp
dW1QYWdlLmggaW4gSGVhZGVycyAqLywKKwkJCQkxNDBGQTAwMzE5Q0U0MjlDMDBGRkQzQzggLyog
QnVtcFJhbmdlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNERENzhDNTE4RjQ4RDc1MDA5NTA3MDIg
LyogQWxnb3JpdGhtLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNERENzhCRDE4RjQ4RDZCMDA5NTA3
MDIgLyogU21hbGxQYWdlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDAwMjc0QjE4Rjg5QzNEMDAx
MTVDOTcgLyogQm91bmRhcnlUYWdJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJj
ZS9ibWFsbG9jL2JtYWxsb2MvQWxnb3JpdGhtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxs
b2MvYm1hbGxvYy9BbGdvcml0aG0uaAkocmV2aXNpb24gMTczNjczKQorKysgU291cmNlL2JtYWxs
b2MvYm1hbGxvYy9BbGdvcml0aG0uaAkod29ya2luZyBjb3B5KQpAQCAtNzQsNiArNzQsMTQgQEAg
dGVtcGxhdGU8c2l6ZV90IGRpdmlzb3IsIHR5cGVuYW1lIFQ+IGlubAogICAgIHJldHVybiByZWlu
dGVycHJldF9jYXN0PFQ+KG1hc2socmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHgpLCB+KGRp
dmlzb3IgLSAxdWwpKSk7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgZGl2aWRlUm91
bmRpbmdVcChUIG51bWVyYXRvciwgVCBkZW5vbWluYXRvciwgVCYgcXVvdGllbnQsIFQmIHJlbWFp
bmRlcikKK3sKKyAgICBxdW90aWVudCA9IG51bWVyYXRvciAvIGRlbm9taW5hdG9yOworICAgIHJl
bWFpbmRlciA9IG51bWVyYXRvciAlIGRlbm9taW5hdG9yOworICAgIGlmIChyZW1haW5kZXIpCisg
ICAgICAgIHF1b3RpZW50ICs9IDE7Cit9CisKIC8vIFZlcnNpb24gb2Ygc2l6ZW9mIHRoYXQgcmV0
dXJucyAwIGZvciBlbXB0eSBjbGFzc2VzLgogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUg
Y29uc3RleHByIHNpemVfdCBzaXplT2YoKQpJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9B
bGxvY2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQWxsb2Nh
dG9yLmNwcAkocmV2aXNpb24gMTczNjc1KQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9BbGxv
Y2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCwxMSArMzgsMTEgQEAgbmFtZXNwYWNlIGJt
YWxsb2MgewogQWxsb2NhdG9yOjpBbGxvY2F0b3IoRGVhbGxvY2F0b3ImIGRlYWxsb2NhdG9yKQog
ICAgIDogbV9kZWFsbG9jYXRvcihkZWFsbG9jYXRvcikKIHsKLSAgICBmb3IgKHVuc2lnbmVkIHNo
b3J0IGkgPSBhbGlnbm1lbnQ7IGkgPD0gc21hbGxNYXg7IGkgKz0gYWxpZ25tZW50KQotICAgICAg
ICBtX3NtYWxsQWxsb2NhdG9yc1tzbWFsbFNpemVDbGFzc0ZvcihpKV0uaW5pdDxTbWFsbExpbmU+
KGkpOworICAgIGZvciAodW5zaWduZWQgc2hvcnQgc2l6ZSA9IGFsaWdubWVudDsgc2l6ZSA8PSBz
bWFsbE1heDsgc2l6ZSArPSBhbGlnbm1lbnQpCisgICAgICAgIG1fYnVtcEFsbG9jYXRvcnNbc2l6
ZUNsYXNzKHNpemUpXS5pbml0KHNpemUpOwogCi0gICAgZm9yICh1bnNpZ25lZCBzaG9ydCBpID0g
c21hbGxNYXggKyBhbGlnbm1lbnQ7IGkgPD0gbWVkaXVtTWF4OyBpICs9IGFsaWdubWVudCkKLSAg
ICAgICAgbV9tZWRpdW1BbGxvY2F0b3JzW21lZGl1bVNpemVDbGFzc0ZvcihpKV0uaW5pdDxNZWRp
dW1MaW5lPihpKTsKKyAgICBmb3IgKHVuc2lnbmVkIHNob3J0IHNpemUgPSBzbWFsbE1heCArIGFs
aWdubWVudDsgc2l6ZSA8PSBtZWRpdW1NYXg7IHNpemUgKz0gYWxpZ25tZW50KQorICAgICAgICBt
X2J1bXBBbGxvY2F0b3JzW3NpemVDbGFzcyhzaXplKV0uaW5pdChzaXplKTsKIH0KIAogQWxsb2Nh
dG9yOjp+QWxsb2NhdG9yKCkKQEAgLTUyLDU0ICs1Miw1MyBAQCBBbGxvY2F0b3I6On5BbGxvY2F0
b3IoKQogCiB2b2lkIEFsbG9jYXRvcjo6c2NhdmVuZ2UoKQogewotICAgIGZvciAoYXV0byYgYWxs
b2NhdG9yIDogbV9zbWFsbEFsbG9jYXRvcnMpIHsKLSAgICAgICAgd2hpbGUgKGFsbG9jYXRvci5j
YW5BbGxvY2F0ZSgpKQotICAgICAgICAgICAgbV9kZWFsbG9jYXRvci5kZWFsbG9jYXRlKGFsbG9j
YXRvci5hbGxvY2F0ZSgpKTsKKyAgICBmb3IgKHVuc2lnbmVkIHNob3J0IGkgPSBhbGlnbm1lbnQ7
IGkgPD0gc21hbGxNYXg7IGkgKz0gYWxpZ25tZW50KSB7CisgICAgICAgIEJ1bXBBbGxvY2F0b3Im
IGFsbG9jYXRvciA9IG1fYnVtcEFsbG9jYXRvcnNbc2l6ZUNsYXNzKGkpXTsKKyAgICAgICAgd2hp
bGUgKGFsbG9jYXRvci5jYW5BbGxvY2F0ZSgpKSB7CisgICAgICAgICAgICB3aGlsZSAoYWxsb2Nh
dG9yLmNhbkFsbG9jYXRlKCkpCisgICAgICAgICAgICAgICAgbV9kZWFsbG9jYXRvci5kZWFsbG9j
YXRlKGFsbG9jYXRvci5hbGxvY2F0ZSgpKTsKKworICAgICAgICAgICAgU21hbGxCdW1wUmFuZ2VD
YWNoZSYgYnVtcFJhbmdlQ2FjaGUgPSBtX3NtYWxsQnVtcFJhbmdlQ2FjaGVzW3NpemVDbGFzcyhp
KV07CisgICAgICAgICAgICBpZiAoYnVtcFJhbmdlQ2FjaGUuc2l6ZSgpKQorICAgICAgICAgICAg
ICAgIGFsbG9jYXRvci5yZWZpbGwoYnVtcFJhbmdlQ2FjaGUucG9wKCkpOworICAgICAgICB9CiAg
ICAgICAgIGFsbG9jYXRvci5jbGVhcigpOwogICAgIH0KIAotICAgIGZvciAoYXV0byYgYWxsb2Nh
dG9yIDogbV9tZWRpdW1BbGxvY2F0b3JzKSB7Ci0gICAgICAgIHdoaWxlIChhbGxvY2F0b3IuY2Fu
QWxsb2NhdGUoKSkKLSAgICAgICAgICAgIG1fZGVhbGxvY2F0b3IuZGVhbGxvY2F0ZShhbGxvY2F0
b3IuYWxsb2NhdGUoKSk7CisgICAgZm9yICh1bnNpZ25lZCBzaG9ydCBpID0gc21hbGxNYXggKyBh
bGlnbm1lbnQ7IGkgPD0gbWVkaXVtTWF4OyBpICs9IGFsaWdubWVudCkgeworICAgICAgICBCdW1w
QWxsb2NhdG9yJiBhbGxvY2F0b3IgPSBtX2J1bXBBbGxvY2F0b3JzW3NpemVDbGFzcyhpKV07Cisg
ICAgICAgIHdoaWxlIChhbGxvY2F0b3IuY2FuQWxsb2NhdGUoKSkgeworICAgICAgICAgICAgd2hp
bGUgKGFsbG9jYXRvci5jYW5BbGxvY2F0ZSgpKQorICAgICAgICAgICAgICAgIG1fZGVhbGxvY2F0
b3IuZGVhbGxvY2F0ZShhbGxvY2F0b3IuYWxsb2NhdGUoKSk7CisKKyAgICAgICAgICAgIE1lZGl1
bUJ1bXBSYW5nZUNhY2hlJiBidW1wUmFuZ2VDYWNoZSA9IG1fbWVkaXVtQnVtcFJhbmdlQ2FjaGVz
W3NpemVDbGFzcyhpKV07CisgICAgICAgICAgICBpZiAoYnVtcFJhbmdlQ2FjaGUuc2l6ZSgpKQor
ICAgICAgICAgICAgICAgIGFsbG9jYXRvci5yZWZpbGwoYnVtcFJhbmdlQ2FjaGUucG9wKCkpOwor
ICAgICAgICB9CiAgICAgICAgIGFsbG9jYXRvci5jbGVhcigpOwogICAgIH0KLQotICAgIHN0ZDo6
bG9ja19ndWFyZDxTdGF0aWNNdXRleD4gbG9jayhQZXJQcm9jZXNzPEhlYXA+OjptdXRleCgpKTsK
LSAgICBIZWFwKiBoZWFwID0gUGVyUHJvY2VzczxIZWFwPjo6Z2V0RmFzdENhc2UoKTsKLSAgICAK
LSAgICBmb3IgKGF1dG8mIHNtYWxsTGluZUNhY2hlIDogbV9zbWFsbExpbmVDYWNoZXMpIHsKLSAg
ICAgICAgd2hpbGUgKHNtYWxsTGluZUNhY2hlLnNpemUoKSkKLSAgICAgICAgICAgIGhlYXAtPmRl
YWxsb2NhdGVTbWFsbExpbmUobG9jaywgc21hbGxMaW5lQ2FjaGUucG9wKCkpOwotICAgIH0KLSAg
ICB3aGlsZSAobV9tZWRpdW1MaW5lQ2FjaGUuc2l6ZSgpKQotICAgICAgICBoZWFwLT5kZWFsbG9j
YXRlTWVkaXVtTGluZShsb2NrLCBtX21lZGl1bUxpbmVDYWNoZS5wb3AoKSk7CiB9CiAKLVNtYWxs
TGluZSogQWxsb2NhdG9yOjphbGxvY2F0ZVNtYWxsTGluZShzaXplX3Qgc21hbGxTaXplQ2xhc3Mp
CitCdW1wUmFuZ2UgQWxsb2NhdG9yOjphbGxvY2F0ZVNtYWxsQnVtcFJhbmdlKHNpemVfdCBzaXpl
Q2xhc3MpCiB7Ci0gICAgU21hbGxMaW5lQ2FjaGUmIHNtYWxsTGluZUNhY2hlID0gbV9zbWFsbExp
bmVDYWNoZXNbc21hbGxTaXplQ2xhc3NdOwotICAgIGlmICghc21hbGxMaW5lQ2FjaGUuc2l6ZSgp
KSB7CisgICAgU21hbGxCdW1wUmFuZ2VDYWNoZSYgYnVtcFJhbmdlQ2FjaGUgPSBtX3NtYWxsQnVt
cFJhbmdlQ2FjaGVzW3NpemVDbGFzc107CisgICAgaWYgKCFidW1wUmFuZ2VDYWNoZS5zaXplKCkp
IHsKICAgICAgICAgc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiBsb2NrKFBlclByb2Nlc3M8
SGVhcD46Om11dGV4KCkpOwotICAgICAgICBIZWFwKiBoZWFwID0gUGVyUHJvY2VzczxIZWFwPjo6
Z2V0RmFzdENhc2UoKTsKLQotICAgICAgICB3aGlsZSAoc21hbGxMaW5lQ2FjaGUuc2l6ZSgpICE9
IHNtYWxsTGluZUNhY2hlLmNhcGFjaXR5KCkpCi0gICAgICAgICAgICBzbWFsbExpbmVDYWNoZS5w
dXNoKGhlYXAtPmFsbG9jYXRlU21hbGxMaW5lKGxvY2ssIHNtYWxsU2l6ZUNsYXNzKSk7CisgICAg
ICAgIFBlclByb2Nlc3M8SGVhcD46OmdldEZhc3RDYXNlKCktPnJlZmlsbFNtYWxsQnVtcFJhbmdl
Q2FjaGUobG9jaywgc2l6ZUNsYXNzLCBidW1wUmFuZ2VDYWNoZSk7CiAgICAgfQogCi0gICAgcmV0
dXJuIHNtYWxsTGluZUNhY2hlLnBvcCgpOworICAgIHJldHVybiBidW1wUmFuZ2VDYWNoZS5wb3Ao
KTsKIH0KIAotTWVkaXVtTGluZSogQWxsb2NhdG9yOjphbGxvY2F0ZU1lZGl1bUxpbmUoKQorQnVt
cFJhbmdlIEFsbG9jYXRvcjo6YWxsb2NhdGVNZWRpdW1CdW1wUmFuZ2Uoc2l6ZV90IHNpemVDbGFz
cykKIHsKLSAgICBpZiAoIW1fbWVkaXVtTGluZUNhY2hlLnNpemUoKSkgeworICAgIE1lZGl1bUJ1
bXBSYW5nZUNhY2hlJiBidW1wUmFuZ2VDYWNoZSA9IG1fbWVkaXVtQnVtcFJhbmdlQ2FjaGVzW3Np
emVDbGFzc107CisgICAgaWYgKCFidW1wUmFuZ2VDYWNoZS5zaXplKCkpIHsKICAgICAgICAgc3Rk
Ojpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiBsb2NrKFBlclByb2Nlc3M8SGVhcD46Om11dGV4KCkp
OwotICAgICAgICBIZWFwKiBoZWFwID0gUGVyUHJvY2VzczxIZWFwPjo6Z2V0RmFzdENhc2UoKTsK
LQotICAgICAgICB3aGlsZSAobV9tZWRpdW1MaW5lQ2FjaGUuc2l6ZSgpICE9IG1fbWVkaXVtTGlu
ZUNhY2hlLmNhcGFjaXR5KCkpCi0gICAgICAgICAgICBtX21lZGl1bUxpbmVDYWNoZS5wdXNoKGhl
YXAtPmFsbG9jYXRlTWVkaXVtTGluZShsb2NrKSk7CisgICAgICAgIFBlclByb2Nlc3M8SGVhcD46
OmdldEZhc3RDYXNlKCktPnJlZmlsbE1lZGl1bUJ1bXBSYW5nZUNhY2hlKGxvY2ssIHNpemVDbGFz
cywgYnVtcFJhbmdlQ2FjaGUpOwogICAgIH0KIAotICAgIHJldHVybiBtX21lZGl1bUxpbmVDYWNo
ZS5wb3AoKTsKKyAgICByZXR1cm4gYnVtcFJhbmdlQ2FjaGUucG9wKCk7CiB9CiAKIHZvaWQqIEFs
bG9jYXRvcjo6YWxsb2NhdGVMYXJnZShzaXplX3Qgc2l6ZSkKQEAgLTExNiwzMCArMTE1LDI3IEBA
IHZvaWQqIEFsbG9jYXRvcjo6YWxsb2NhdGVYTGFyZ2Uoc2l6ZV90IHMKICAgICByZXR1cm4gUGVy
UHJvY2VzczxIZWFwPjo6Z2V0RmFzdENhc2UoKS0+YWxsb2NhdGVYTGFyZ2UobG9jaywgc2l6ZSk7
CiB9CiAKLXZvaWQqIEFsbG9jYXRvcjo6YWxsb2NhdGVNZWRpdW0oc2l6ZV90IHNpemUpCi17Ci0g
ICAgQnVtcEFsbG9jYXRvciYgYWxsb2NhdG9yID0gbV9tZWRpdW1BbGxvY2F0b3JzW21lZGl1bVNp
emVDbGFzc0ZvcihzaXplKV07Ci0KLSAgICBpZiAoIWFsbG9jYXRvci5jYW5BbGxvY2F0ZSgpKQot
ICAgICAgICBhbGxvY2F0b3IucmVmaWxsKGFsbG9jYXRlTWVkaXVtTGluZSgpKTsKLSAgICByZXR1
cm4gYWxsb2NhdG9yLmFsbG9jYXRlKCk7Ci19Ci0KIHZvaWQqIEFsbG9jYXRvcjo6YWxsb2NhdGVT
bG93Q2FzZShzaXplX3Qgc2l6ZSkKIHsKIElGX0RFQlVHKAogICAgIHZvaWQqIGR1bW15OwogICAg
IEJBU1NFUlQoIWFsbG9jYXRlRmFzdENhc2Uoc2l6ZSwgZHVtbXkpKTsKICkKLSAgICBpZiAoc2l6
ZSA8PSBzbWFsbE1heCkgewotICAgICAgICBzaXplX3Qgc21hbGxTaXplQ2xhc3MgPSBzbWFsbFNp
emVDbGFzc0ZvcihzaXplKTsKLSAgICAgICAgQnVtcEFsbG9jYXRvciYgYWxsb2NhdG9yID0gbV9z
bWFsbEFsbG9jYXRvcnNbc21hbGxTaXplQ2xhc3NdOwotICAgICAgICBhbGxvY2F0b3IucmVmaWxs
KGFsbG9jYXRlU21hbGxMaW5lKHNtYWxsU2l6ZUNsYXNzKSk7Ci0gICAgICAgIHJldHVybiBhbGxv
Y2F0b3IuYWxsb2NhdGUoKTsKLSAgICB9CiAKLSAgICBpZiAoc2l6ZSA8PSBtZWRpdW1NYXgpCi0g
ICAgICAgIHJldHVybiBhbGxvY2F0ZU1lZGl1bShzaXplKTsKKyAgICBpZiAoc2l6ZSA8PSBtZWRp
dW1NYXgpIHsKKyAgICAgICAgc2l6ZV90IHNpemVDbGFzcyA9IGJtYWxsb2M6OnNpemVDbGFzcyhz
aXplKTsKKyAgICAgICAgQnVtcEFsbG9jYXRvciYgYWxsb2NhdG9yID0gbV9idW1wQWxsb2NhdG9y
c1tzaXplQ2xhc3NdOworCisgICAgICAgIGlmIChhbGxvY2F0b3Iuc2l6ZSgpIDw9IHNtYWxsTWF4
KSB7CisgICAgICAgICAgICBhbGxvY2F0b3IucmVmaWxsKGFsbG9jYXRlU21hbGxCdW1wUmFuZ2Uo
c2l6ZUNsYXNzKSk7CisgICAgICAgICAgICByZXR1cm4gYWxsb2NhdG9yLmFsbG9jYXRlKCk7Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAoYWxsb2NhdG9yLnNpemUoKSA8PSBtZWRpdW1NYXgpIHsK
KyAgICAgICAgICAgIGFsbG9jYXRvci5yZWZpbGwoYWxsb2NhdGVNZWRpdW1CdW1wUmFuZ2Uoc2l6
ZUNsYXNzKSk7CisgICAgICAgICAgICByZXR1cm4gYWxsb2NhdG9yLmFsbG9jYXRlKCk7CisgICAg
ICAgIH0KKyAgICB9CiAgICAgCiAgICAgaWYgKHNpemUgPD0gbGFyZ2VNYXgpCiAgICAgICAgIHJl
dHVybiBhbGxvY2F0ZUxhcmdlKHNpemUpOwpJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9B
bGxvY2F0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0FsbG9jYXRv
ci5oCShyZXZpc2lvbiAxNzM2NzUpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0FsbG9jYXRv
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3IEBACiAKICNpbmNsdWRlICJCdW1wQWxs
b2NhdG9yLmgiCiAjaW5jbHVkZSAiRml4ZWRWZWN0b3IuaCIKLSNpbmNsdWRlICJNZWRpdW1BbGxv
Y2F0b3IuaCIKKyNpbmNsdWRlICJIZWFwLmgiCiAjaW5jbHVkZSAiU2l6ZXMuaCIKICNpbmNsdWRl
ICJTbWFsbExpbmUuaCIKICNpbmNsdWRlIDxhcnJheT4KQEAgLTUxLDMzICs1MSwyOSBAQCBwdWJs
aWM6CiAgICAgdm9pZCBzY2F2ZW5nZSgpOwogCiBwcml2YXRlOgotICAgIHR5cGVkZWYgRml4ZWRW
ZWN0b3I8U21hbGxMaW5lKiwgc21hbGxMaW5lQ2FjaGVDYXBhY2l0eT4gU21hbGxMaW5lQ2FjaGU7
Ci0gICAgdHlwZWRlZiBGaXhlZFZlY3RvcjxNZWRpdW1MaW5lKiwgbWVkaXVtTGluZUNhY2hlQ2Fw
YWNpdHk+IE1lZGl1bUxpbmVDYWNoZTsKLQogICAgIHZvaWQqIGFsbG9jYXRlRmFzdENhc2UoQnVt
cEFsbG9jYXRvciYpOwogCiAgICAgdm9pZCogYWxsb2NhdGVNZWRpdW0oc2l6ZV90KTsKICAgICB2
b2lkKiBhbGxvY2F0ZUxhcmdlKHNpemVfdCk7CiAgICAgdm9pZCogYWxsb2NhdGVYTGFyZ2Uoc2l6
ZV90KTsKICAgICAKLSAgICBTbWFsbExpbmUqIGFsbG9jYXRlU21hbGxMaW5lKHNpemVfdCBzbWFs
bFNpemVDbGFzcyk7Ci0gICAgTWVkaXVtTGluZSogYWxsb2NhdGVNZWRpdW1MaW5lKCk7CisgICAg
QnVtcFJhbmdlIGFsbG9jYXRlU21hbGxCdW1wUmFuZ2Uoc2l6ZV90IHNpemVDbGFzcyk7CisgICAg
QnVtcFJhbmdlIGFsbG9jYXRlTWVkaXVtQnVtcFJhbmdlKHNpemVfdCBzaXplQ2xhc3MpOwogICAg
IAogICAgIERlYWxsb2NhdG9yJiBtX2RlYWxsb2NhdG9yOwogCi0gICAgc3RkOjphcnJheTxCdW1w
QWxsb2NhdG9yLCBzbWFsbE1heCAvIGFsaWdubWVudD4gbV9zbWFsbEFsbG9jYXRvcnM7Ci0gICAg
c3RkOjphcnJheTxCdW1wQWxsb2NhdG9yLCBtZWRpdW1NYXggLyBhbGlnbm1lbnQ+IG1fbWVkaXVt
QWxsb2NhdG9yczsKKyAgICBzdGQ6OmFycmF5PEJ1bXBBbGxvY2F0b3IsIG1lZGl1bU1heCAvIGFs
aWdubWVudD4gbV9idW1wQWxsb2NhdG9yczsKIAotICAgIHN0ZDo6YXJyYXk8U21hbGxMaW5lQ2Fj
aGUsIHNtYWxsTWF4IC8gYWxpZ25tZW50PiBtX3NtYWxsTGluZUNhY2hlczsKLSAgICBNZWRpdW1M
aW5lQ2FjaGUgbV9tZWRpdW1MaW5lQ2FjaGU7CisgICAgc3RkOjphcnJheTxTbWFsbEJ1bXBSYW5n
ZUNhY2hlLCBzbWFsbE1heCAvIGFsaWdubWVudD4gbV9zbWFsbEJ1bXBSYW5nZUNhY2hlczsKKyAg
ICBzdGQ6OmFycmF5PE1lZGl1bUJ1bXBSYW5nZUNhY2hlLCBtZWRpdW1NYXggLyBhbGlnbm1lbnQ+
IG1fbWVkaXVtQnVtcFJhbmdlQ2FjaGVzOwogfTsKIAogaW5saW5lIGJvb2wgQWxsb2NhdG9yOjph
bGxvY2F0ZUZhc3RDYXNlKHNpemVfdCBzaXplLCB2b2lkKiYgb2JqZWN0KQogewotICAgIGlmIChz
aXplID4gc21hbGxNYXgpCisgICAgaWYgKHNpemUgPiBtZWRpdW1NYXgpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAotICAgIEJ1bXBBbGxvY2F0b3ImIGFsbG9jYXRvciA9IG1fc21hbGxBbGxvY2F0
b3JzW3NtYWxsU2l6ZUNsYXNzRm9yKHNpemUpXTsKKyAgICBCdW1wQWxsb2NhdG9yJiBhbGxvY2F0
b3IgPSBtX2J1bXBBbGxvY2F0b3JzW3NpemVDbGFzcyhzaXplKV07CiAgICAgaWYgKCFhbGxvY2F0
b3IuY2FuQWxsb2NhdGUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkluZGV4OiBTb3VyY2Uv
Ym1hbGxvYy9ibWFsbG9jL0J1bXBBbGxvY2F0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1h
bGxvYy9ibWFsbG9jL0J1bXBBbGxvY2F0b3IuaAkocmV2aXNpb24gMTczNjczKQorKysgU291cmNl
L2JtYWxsb2MvYm1hbGxvYy9CdW1wQWxsb2NhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYg
KzI3LDcgQEAKICNkZWZpbmUgQnVtcEFsbG9jYXRvcl9oCiAKICNpbmNsdWRlICJCQXNzZXJ0Lmgi
CisjaW5jbHVkZSAiQnVtcFJhbmdlLmgiCiAjaW5jbHVkZSAiT2JqZWN0VHlwZS5oIgogCiBuYW1l
c3BhY2UgYm1hbGxvYyB7CkBAIC0zNiw0OSArMzcsMzggQEAgbmFtZXNwYWNlIGJtYWxsb2Mgewog
Y2xhc3MgQnVtcEFsbG9jYXRvciB7CiBwdWJsaWM6CiAgICAgQnVtcEFsbG9jYXRvcigpOwotICAg
IHRlbXBsYXRlPHR5cGVuYW1lIExpbmU+IHZvaWQgaW5pdChzaXplX3QpOworICAgIHZvaWQgaW5p
dChzaXplX3QpOworICAgIAorICAgIHNpemVfdCBzaXplKCkgeyByZXR1cm4gbV9zaXplOyB9CiAg
ICAgCiAgICAgYm9vbCBpc051bGwoKSB7IHJldHVybiAhbV9wdHI7IH0KLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBMaW5lPiBMaW5lKiBsaW5lKCk7CisgICAgdm9pZCBjbGVhcigpOwogCiAgICAgYm9v
bCBjYW5BbGxvY2F0ZSgpIHsgcmV0dXJuICEhbV9yZW1haW5pbmc7IH0KICAgICB2b2lkKiBhbGxv
Y2F0ZSgpOwogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgTGluZT4gdm9pZCByZWZpbGwoTGluZSop
OwotICAgIHZvaWQgY2xlYXIoKTsKKyAgICB2b2lkIHJlZmlsbChjb25zdCBCdW1wUmFuZ2UmKTsK
IAogcHJpdmF0ZToKICAgICB2b2lkIHZhbGlkYXRlKHZvaWQqKTsKIAogICAgIGNoYXIqIG1fcHRy
OwogICAgIHVuc2lnbmVkIHNob3J0IG1fc2l6ZTsKLSAgICB1bnNpZ25lZCBjaGFyIG1fcmVtYWlu
aW5nOwotICAgIHVuc2lnbmVkIGNoYXIgbV9tYXhPYmplY3RDb3VudDsKKyAgICB1bnNpZ25lZCBz
aG9ydCBtX3JlbWFpbmluZzsKIH07CiAKIGlubGluZSBCdW1wQWxsb2NhdG9yOjpCdW1wQWxsb2Nh
dG9yKCkKICAgICA6IG1fcHRyKCkKICAgICAsIG1fc2l6ZSgpCiAgICAgLCBtX3JlbWFpbmluZygp
Ci0gICAgLCBtX21heE9iamVjdENvdW50KCkKIHsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgTGlu
ZT4KIGlubGluZSB2b2lkIEJ1bXBBbGxvY2F0b3I6OmluaXQoc2l6ZV90IHNpemUpCiB7Ci0gICAg
QkFTU0VSVChzaXplID49IExpbmU6Om1pbmltdW1PYmplY3RTaXplKTsKLQogICAgIG1fcHRyID0g
bnVsbHB0cjsKICAgICBtX3NpemUgPSBzaXplOwogICAgIG1fcmVtYWluaW5nID0gMDsKLSAgICBt
X21heE9iamVjdENvdW50ID0gTGluZTo6bGluZVNpemUgLyBzaXplOwotfQotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBMaW5lPgotaW5saW5lIExpbmUqIEJ1bXBBbGxvY2F0b3I6OmxpbmUoKQotewotICAg
IHJldHVybiBMaW5lOjpnZXQoY2FuQWxsb2NhdGUoKSA/IG1fcHRyIDogbV9wdHIgLSAxKTsKIH0K
IAogaW5saW5lIHZvaWQgQnVtcEFsbG9jYXRvcjo6dmFsaWRhdGUodm9pZCogcHRyKQpAQCAtMTA0
LDEzICs5NCwxMSBAQCBpbmxpbmUgdm9pZCogQnVtcEFsbG9jYXRvcjo6YWxsb2NhdGUoKQogICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIExpbmU+Ci1pbmxpbmUgdm9p
ZCBCdW1wQWxsb2NhdG9yOjpyZWZpbGwoTGluZSogbGluZSkKK2lubGluZSB2b2lkIEJ1bXBBbGxv
Y2F0b3I6OnJlZmlsbChjb25zdCBCdW1wUmFuZ2UmIGJ1bXBSYW5nZSkKIHsKICAgICBCQVNTRVJU
KCFjYW5BbGxvY2F0ZSgpKTsKLSAgICBsaW5lLT5jb25jdXJyZW50UmVmKG1fbWF4T2JqZWN0Q291
bnQpOwotICAgIG1fcHRyID0gbGluZS0+YmVnaW4oKTsKLSAgICBtX3JlbWFpbmluZyA9IG1fbWF4
T2JqZWN0Q291bnQ7CisgICAgbV9wdHIgPSBidW1wUmFuZ2UuYmVnaW47CisgICAgbV9yZW1haW5p
bmcgPSBidW1wUmFuZ2Uub2JqZWN0Q291bnQ7CiB9CiAKIGlubGluZSB2b2lkIEJ1bXBBbGxvY2F0
b3I6OmNsZWFyKCkKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQnVtcFJhbmdlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9CdW1wUmFuZ2UuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQnVtcFJhbmdlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIEJ1bXBSYW5nZV9oCisjZGVmaW5lIEJ1bXBSYW5nZV9oCisKKyNpbmNs
dWRlICJGaXhlZFZlY3Rvci5oIgorI2luY2x1ZGUgIlJhbmdlLmgiCisjaW5jbHVkZSAiU2l6ZXMu
aCIKKworbmFtZXNwYWNlIGJtYWxsb2MgeworCitzdHJ1Y3QgQnVtcFJhbmdlIHsKKyAgICBjaGFy
KiBiZWdpbjsKKyAgICB1bnNpZ25lZCBzaG9ydCBvYmplY3RDb3VudDsKK307CisKK3R5cGVkZWYg
Rml4ZWRWZWN0b3I8QnVtcFJhbmdlLCBzbWFsbFJhbmdlQ2FjaGVDYXBhY2l0eT4gU21hbGxCdW1w
UmFuZ2VDYWNoZTsKK3R5cGVkZWYgRml4ZWRWZWN0b3I8QnVtcFJhbmdlLCBtZWRpdW1SYW5nZUNh
Y2hlQ2FwYWNpdHk+IE1lZGl1bUJ1bXBSYW5nZUNhY2hlOworCit9IC8vIG5hbWVzcGFjZSBibWFs
bG9jCisKKyNlbmRpZiAvLyBCdW1wUmFuZ2VfaApJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxv
Yy9EZWFsbG9jYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9E
ZWFsbG9jYXRvci5jcHAJKHJldmlzaW9uIDE3MzY3NSkKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxs
b2MvRGVhbGxvY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MiwxNSArNzIsMTEgQEAgdm9p
ZCBEZWFsbG9jYXRvcjo6cHJvY2Vzc09iamVjdExvZygpCiAgICAgZm9yIChhdXRvIG9iamVjdCA6
IG1fb2JqZWN0TG9nKSB7CiAgICAgICAgIGlmIChpc1NtYWxsKG9iamVjdCkpIHsKICAgICAgICAg
ICAgIFNtYWxsTGluZSogbGluZSA9IFNtYWxsTGluZTo6Z2V0KG9iamVjdCk7Ci0gICAgICAgICAg
ICBpZiAoIWxpbmUtPmRlcmVmKGxvY2spKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICAgICAgaGVhcC0+ZGVhbGxvY2F0ZVNtYWxsTGluZShsb2NrLCBsaW5lKTsKKyAgICAgICAg
ICAgIGhlYXAtPmRlcmVmU21hbGxMaW5lKGxvY2ssIGxpbmUpOwogICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgQkFTU0VSVChpc1NtYWxsT3JNZWRpdW0ob2JqZWN0KSk7CisgICAgICAgICAg
ICBCQVNTRVJUKGlzTWVkaXVtKG9iamVjdCkpOwogICAgICAgICAgICAgTWVkaXVtTGluZSogbGlu
ZSA9IE1lZGl1bUxpbmU6OmdldChvYmplY3QpOwotICAgICAgICAgICAgaWYgKCFsaW5lLT5kZXJl
Zihsb2NrKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGhlYXAtPmRl
YWxsb2NhdGVNZWRpdW1MaW5lKGxvY2ssIGxpbmUpOworICAgICAgICAgICAgaGVhcC0+ZGVyZWZN
ZWRpdW1MaW5lKGxvY2ssIGxpbmUpOwogICAgICAgICB9CiAgICAgfQogICAgIApJbmRleDogU291
cmNlL2JtYWxsb2MvYm1hbGxvYy9IZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxv
Yy9ibWFsbG9jL0hlYXAuY3BwCShyZXZpc2lvbiAxNzM2NzMpCisrKyBTb3VyY2UvYm1hbGxvYy9i
bWFsbG9jL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCw2ICs1MCw0MiBAQCBIZWFwOjpI
ZWFwKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mCiAgICAgOiBtX2lzQWxsb2NhdGluZ1Bh
Z2VzKGZhbHNlKQogICAgICwgbV9zY2F2ZW5nZXIoKnRoaXMsICZIZWFwOjpjb25jdXJyZW50U2Nh
dmVuZ2UpCiB7CisgICAgaW5pdGlhbGl6ZUxpbmVNZXRhZGF0YSgpOworfQorCit2b2lkIEhlYXA6
OmluaXRpYWxpemVMaW5lTWV0YWRhdGEoKQoreworICAgIGZvciAodW5zaWduZWQgc2hvcnQgc2l6
ZSA9IGFsaWdubWVudDsgc2l6ZSA8PSBzbWFsbE1heDsgc2l6ZSArPSBhbGlnbm1lbnQpIHsKKyAg
ICAgICAgdW5zaWduZWQgc2hvcnQgc3RhcnRPZmZzZXQgPSAwOworICAgICAgICBmb3IgKHNpemVf
dCBsaW5lTnVtYmVyID0gMDsgbGluZU51bWJlciA8IFNtYWxsUGFnZTo6bGluZUNvdW50IC0gMTsg
KytsaW5lTnVtYmVyKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCBvYmplY3RDb3VudDsK
KyAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHJlbWFpbmRlcjsKKyAgICAgICAgICAgIGRpdmlk
ZVJvdW5kaW5nVXAoc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KFNtYWxsUGFnZTo6bGluZVNp
emUgLSBzdGFydE9mZnNldCksIHNpemUsIG9iamVjdENvdW50LCByZW1haW5kZXIpOworICAgICAg
ICAgICAgQkFTU0VSVChvYmplY3RDb3VudCk7CisgICAgICAgICAgICBtX3NtYWxsTGluZU1ldGFk
YXRhW3NpemVDbGFzcyhzaXplKV1bbGluZU51bWJlcl0gPSB7IHN0YXJ0T2Zmc2V0LCBvYmplY3RD
b3VudCB9OworICAgICAgICAgICAgc3RhcnRPZmZzZXQgPSByZW1haW5kZXIgPyBzaXplIC0gcmVt
YWluZGVyIDogMDsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFRoZSBsYXN0IGxpbmUgaW4gdGhl
IHBhZ2Ugcm91bmRzIGRvd24gaW5zdGVhZCBvZiB1cCBiZWNhdXNlIGl0J3Mgbm90IGFsbG93ZWQg
dG8gb3ZlcmxhcCBpbnRvIGl0cyBuZWlnaGJvci4KKyAgICAgICAgdW5zaWduZWQgc2hvcnQgb2Jq
ZWN0Q291bnQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oKFNtYWxsUGFnZTo6bGluZVNp
emUgLSBzdGFydE9mZnNldCkgLyBzaXplKTsKKyAgICAgICAgbV9zbWFsbExpbmVNZXRhZGF0YVtz
aXplQ2xhc3Moc2l6ZSldW1NtYWxsUGFnZTo6bGluZUNvdW50IC0gMV0gPSB7IHN0YXJ0T2Zmc2V0
LCBvYmplY3RDb3VudCB9OworICAgIH0KKworICAgIGZvciAodW5zaWduZWQgc2hvcnQgc2l6ZSA9
IHNtYWxsTWF4ICsgYWxpZ25tZW50OyBzaXplIDw9IG1lZGl1bU1heDsgc2l6ZSArPSBhbGlnbm1l
bnQpIHsKKyAgICAgICAgdW5zaWduZWQgc2hvcnQgc3RhcnRPZmZzZXQgPSAwOworICAgICAgICBm
b3IgKHNpemVfdCBsaW5lTnVtYmVyID0gMDsgbGluZU51bWJlciA8IE1lZGl1bVBhZ2U6OmxpbmVD
b3VudCAtIDE7ICsrbGluZU51bWJlcikgeworICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgb2Jq
ZWN0Q291bnQ7CisgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCByZW1haW5kZXI7CisgICAgICAg
ICAgICBkaXZpZGVSb3VuZGluZ1VwKHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PihNZWRpdW1Q
YWdlOjpsaW5lU2l6ZSAtIHN0YXJ0T2Zmc2V0KSwgc2l6ZSwgb2JqZWN0Q291bnQsIHJlbWFpbmRl
cik7CisgICAgICAgICAgICBCQVNTRVJUKG9iamVjdENvdW50KTsKKyAgICAgICAgICAgIG1fbWVk
aXVtTGluZU1ldGFkYXRhW3NpemVDbGFzcyhzaXplKV1bbGluZU51bWJlcl0gPSB7IHN0YXJ0T2Zm
c2V0LCBvYmplY3RDb3VudCB9OworICAgICAgICAgICAgc3RhcnRPZmZzZXQgPSByZW1haW5kZXIg
PyBzaXplIC0gcmVtYWluZGVyIDogMDsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFRoZSBsYXN0
IGxpbmUgaW4gdGhlIHBhZ2Ugcm91bmRzIGRvd24gaW5zdGVhZCBvZiB1cCBiZWNhdXNlIGl0J3Mg
bm90IGFsbG93ZWQgdG8gb3ZlcmxhcCBpbnRvIGl0cyBuZWlnaGJvci4KKyAgICAgICAgdW5zaWdu
ZWQgc2hvcnQgb2JqZWN0Q291bnQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oKE1lZGl1
bVBhZ2U6OmxpbmVTaXplIC0gc3RhcnRPZmZzZXQpIC8gc2l6ZSk7CisgICAgICAgIG1fbWVkaXVt
TGluZU1ldGFkYXRhW3NpemVDbGFzcyhzaXplKV1bTWVkaXVtUGFnZTo6bGluZUNvdW50IC0gMV0g
PSB7IHN0YXJ0T2Zmc2V0LCBvYmplY3RDb3VudCB9OworICAgIH0KIH0KIAogdm9pZCBIZWFwOjpj
b25jdXJyZW50U2NhdmVuZ2UoKQpAQCAtMTE2LDExICsxNTIsODkgQEAgdm9pZCBIZWFwOjpzY2F2
ZW5nZUxhcmdlUmFuZ2VzKHN0ZDo6dW5pcQogICAgIH0KIH0KIAotU21hbGxMaW5lKiBIZWFwOjph
bGxvY2F0ZVNtYWxsTGluZVNsb3dDYXNlKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mIGxv
Y2ssIHNpemVfdCBzbWFsbFNpemVDbGFzcykKK3ZvaWQgSGVhcDo6cmVmaWxsU21hbGxCdW1wUmFu
Z2VDYWNoZShzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+JiBsb2NrLCBzaXplX3Qgc2l6ZUNs
YXNzLCBTbWFsbEJ1bXBSYW5nZUNhY2hlJiByYW5nZUNhY2hlKQoreworICAgIEJBU1NFUlQoIXJh
bmdlQ2FjaGUuc2l6ZSgpKTsKKyAgICBTbWFsbFBhZ2UqIHBhZ2UgPSBhbGxvY2F0ZVNtYWxsUGFn
ZShsb2NrLCBzaXplQ2xhc3MpOworICAgIFNtYWxsTGluZSogbGluZXMgPSBwYWdlLT5iZWdpbigp
OworCisgICAgLy8gRHVlIHRvIG92ZXJsYXAgZnJvbSB0aGUgcHJldmlvdXMgbGluZSwgdGhlIGxh
c3QgbGluZSBpbiB0aGUgcGFnZSBtYXkgbm90IGJlIGFibGUgdG8gZml0IGFueSBvYmplY3RzLgor
ICAgIHNpemVfdCBlbmQgPSBTbWFsbFBhZ2U6OmxpbmVDb3VudDsKKyAgICBpZiAoIW1fc21hbGxM
aW5lTWV0YWRhdGFbc2l6ZUNsYXNzXVtTbWFsbFBhZ2U6OmxpbmVDb3VudCAtIDFdLm9iamVjdENv
dW50KQorICAgICAgICAtLWVuZDsKKworICAgIGZvciAoc2l6ZV90IGxpbmVOdW1iZXIgPSAwOyBs
aW5lTnVtYmVyIDwgZW5kOyArK2xpbmVOdW1iZXIpIHsKKyAgICAgICAgaWYgKGxpbmVzW2xpbmVO
dW1iZXJdLnJlZkNvdW50KGxvY2spKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAg
TGluZU1ldGFkYXRhJiBsaW5lTWV0YWRhdGEgPSBtX3NtYWxsTGluZU1ldGFkYXRhW3NpemVDbGFz
c11bbGluZU51bWJlcl07CisgICAgICAgIGNoYXIqIGJlZ2luID0gbGluZXNbbGluZU51bWJlcl0u
YmVnaW4oKSArIGxpbmVNZXRhZGF0YS5zdGFydE9mZnNldDsKKyAgICAgICAgdW5zaWduZWQgc2hv
cnQgb2JqZWN0Q291bnQgPSBsaW5lTWV0YWRhdGEub2JqZWN0Q291bnQ7CisgICAgICAgIGxpbmVz
W2xpbmVOdW1iZXJdLnJlZihsb2NrLCBsaW5lTWV0YWRhdGEub2JqZWN0Q291bnQpOworICAgICAg
ICBwYWdlLT5yZWYobG9jayk7CisKKyAgICAgICAgd2hpbGUgKCsrbGluZU51bWJlciA8IGVuZCkg
eworICAgICAgICAgICAgaWYgKGxpbmVzW2xpbmVOdW1iZXJdLnJlZkNvdW50KGxvY2spKQorICAg
ICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBMaW5lTWV0YWRhdGEmIGxpbmVNZXRh
ZGF0YSA9IG1fc21hbGxMaW5lTWV0YWRhdGFbc2l6ZUNsYXNzXVtsaW5lTnVtYmVyXTsKKyAgICAg
ICAgICAgIG9iamVjdENvdW50ICs9IGxpbmVNZXRhZGF0YS5vYmplY3RDb3VudDsKKyAgICAgICAg
ICAgIGxpbmVzW2xpbmVOdW1iZXJdLnJlZihsb2NrLCBsaW5lTWV0YWRhdGEub2JqZWN0Q291bnQp
OworICAgICAgICAgICAgcGFnZS0+cmVmKGxvY2spOworICAgICAgICB9CisKKyAgICAgICAgcmFu
Z2VDYWNoZS5wdXNoKHsgYmVnaW4sIG9iamVjdENvdW50IH0pOworICAgIH0KK30KKwordm9pZCBI
ZWFwOjpyZWZpbGxNZWRpdW1CdW1wUmFuZ2VDYWNoZShzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0
ZXg+JiBsb2NrLCBzaXplX3Qgc2l6ZUNsYXNzLCBNZWRpdW1CdW1wUmFuZ2VDYWNoZSYgcmFuZ2VD
YWNoZSkKK3sKKyAgICBCQVNTRVJUKCFyYW5nZUNhY2hlLnNpemUoKSk7CisgICAgTWVkaXVtUGFn
ZSogcGFnZSA9IGFsbG9jYXRlTWVkaXVtUGFnZShsb2NrLCBzaXplQ2xhc3MpOworICAgIE1lZGl1
bUxpbmUqIGxpbmVzID0gcGFnZS0+YmVnaW4oKTsKKworICAgIC8vIER1ZSB0byBvdmVybGFwIGZy
b20gdGhlIHByZXZpb3VzIGxpbmUsIHRoZSBsYXN0IGxpbmUgaW4gdGhlIHBhZ2UgbWF5IG5vdCBi
ZSBhYmxlIHRvIGZpdCBhbnkgb2JqZWN0cy4KKyAgICBzaXplX3QgZW5kID0gTWVkaXVtUGFnZTo6
bGluZUNvdW50OworICAgIGlmICghbV9tZWRpdW1MaW5lTWV0YWRhdGFbc2l6ZUNsYXNzXVtNZWRp
dW1QYWdlOjpsaW5lQ291bnQgLSAxXS5vYmplY3RDb3VudCkKKyAgICAgICAgLS1lbmQ7CisKKyAg
ICBmb3IgKHNpemVfdCBsaW5lTnVtYmVyID0gMDsgbGluZU51bWJlciA8IGVuZDsgKytsaW5lTnVt
YmVyKSB7CisgICAgICAgIGlmIChsaW5lc1tsaW5lTnVtYmVyXS5yZWZDb3VudChsb2NrKSkKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIExpbmVNZXRhZGF0YSYgbGluZU1ldGFkYXRh
ID0gbV9tZWRpdW1MaW5lTWV0YWRhdGFbc2l6ZUNsYXNzXVtsaW5lTnVtYmVyXTsKKyAgICAgICAg
Y2hhciogYmVnaW4gPSBsaW5lc1tsaW5lTnVtYmVyXS5iZWdpbigpICsgbGluZU1ldGFkYXRhLnN0
YXJ0T2Zmc2V0OworICAgICAgICB1bnNpZ25lZCBzaG9ydCBvYmplY3RDb3VudCA9IGxpbmVNZXRh
ZGF0YS5vYmplY3RDb3VudDsKKyAgICAgICAgbGluZXNbbGluZU51bWJlcl0ucmVmKGxvY2ssIGxp
bmVNZXRhZGF0YS5vYmplY3RDb3VudCk7CisgICAgICAgIHBhZ2UtPnJlZihsb2NrKTsKKyAgICAg
ICAgCisgICAgICAgIHdoaWxlICgrK2xpbmVOdW1iZXIgPCBlbmQpIHsKKyAgICAgICAgICAgIGlm
IChsaW5lc1tsaW5lTnVtYmVyXS5yZWZDb3VudChsb2NrKSkKKyAgICAgICAgICAgICAgICBicmVh
azsKKworICAgICAgICAgICAgTGluZU1ldGFkYXRhJiBsaW5lTWV0YWRhdGEgPSBtX21lZGl1bUxp
bmVNZXRhZGF0YVtzaXplQ2xhc3NdW2xpbmVOdW1iZXJdOworICAgICAgICAgICAgb2JqZWN0Q291
bnQgKz0gbGluZU1ldGFkYXRhLm9iamVjdENvdW50OworICAgICAgICAgICAgbGluZXNbbGluZU51
bWJlcl0ucmVmKGxvY2ssIGxpbmVNZXRhZGF0YS5vYmplY3RDb3VudCk7CisgICAgICAgICAgICBw
YWdlLT5yZWYobG9jayk7CisgICAgICAgIH0KKworICAgICAgICByYW5nZUNhY2hlLnB1c2goeyBi
ZWdpbiwgb2JqZWN0Q291bnQgfSk7CisgICAgfQorfQorCitTbWFsbFBhZ2UqIEhlYXA6OmFsbG9j
YXRlU21hbGxQYWdlKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mIGxvY2ssIHNpemVfdCBz
aXplQ2xhc3MpCiB7CisgICAgVmVjdG9yPFNtYWxsUGFnZSo+JiBzbWFsbFBhZ2VzV2l0aEZyZWVM
aW5lcyA9IG1fc21hbGxQYWdlc1dpdGhGcmVlTGluZXNbc2l6ZUNsYXNzXTsKKyAgICB3aGlsZSAo
c21hbGxQYWdlc1dpdGhGcmVlTGluZXMuc2l6ZSgpKSB7CisgICAgICAgIFNtYWxsUGFnZSogcGFn
ZSA9IHNtYWxsUGFnZXNXaXRoRnJlZUxpbmVzLnBvcCgpOworICAgICAgICBpZiAoIXBhZ2UtPnJl
ZkNvdW50KGxvY2spIHx8IHBhZ2UtPnNpemVDbGFzcygpICE9IHNpemVDbGFzcykgLy8gUGFnZSB3
YXMgcHJvbW90ZWQgdG8gdGhlIHBhZ2VzIGxpc3QuCisgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgcmV0dXJuIHBhZ2U7CisgICAgfQorICAgIAogICAgIG1faXNBbGxvY2F0aW5nUGFnZXMg
PSB0cnVlOwogCi0gICAgU21hbGxQYWdlKiBwYWdlID0gW3RoaXNdKCkgeworICAgIFNtYWxsUGFn
ZSogcGFnZSA9IFt0aGlzLCBzaXplQ2xhc3NdKCkgewogICAgICAgICBpZiAobV9zbWFsbFBhZ2Vz
LnNpemUoKSkKICAgICAgICAgICAgIHJldHVybiBtX3NtYWxsUGFnZXMucG9wKCk7CiAgICAgICAg
IApAQCAtMTI5LDIyICsyNDMsMjMgQEAgU21hbGxMaW5lKiBIZWFwOjphbGxvY2F0ZVNtYWxsTGlu
ZVNsb3dDYQogICAgICAgICByZXR1cm4gcGFnZTsKICAgICB9KCk7CiAKLSAgICBTbWFsbExpbmUq
IGxpbmUgPSBwYWdlLT5iZWdpbigpOwotICAgIFZlY3RvcjxTbWFsbExpbmUqPiYgc21hbGxMaW5l
cyA9IG1fc21hbGxMaW5lc1tzbWFsbFNpemVDbGFzc107Ci0gICAgZm9yIChhdXRvIGl0ID0gbGlu
ZSArIDE7IGl0ICE9IHBhZ2UtPmVuZCgpOyArK2l0KQotICAgICAgICBzbWFsbExpbmVzLnB1c2go
aXQpOwotCi0gICAgQkFTU0VSVCghbGluZS0+cmVmQ291bnQobG9jaykpOwotICAgIHBhZ2UtPnNl
dFNtYWxsU2l6ZUNsYXNzKHNtYWxsU2l6ZUNsYXNzKTsKLSAgICBwYWdlLT5yZWYobG9jayk7Ci0g
ICAgcmV0dXJuIGxpbmU7CisgICAgcGFnZS0+c2V0U2l6ZUNsYXNzKHNpemVDbGFzcyk7CisgICAg
cmV0dXJuIHBhZ2U7CiB9CiAKLU1lZGl1bUxpbmUqIEhlYXA6OmFsbG9jYXRlTWVkaXVtTGluZVNs
b3dDYXNlKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mIGxvY2spCitNZWRpdW1QYWdlKiBI
ZWFwOjphbGxvY2F0ZU1lZGl1bVBhZ2Uoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYgbG9j
aywgc2l6ZV90IHNpemVDbGFzcykKIHsKKyAgICBWZWN0b3I8TWVkaXVtUGFnZSo+JiBtZWRpdW1Q
YWdlc1dpdGhGcmVlTGluZXMgPSBtX21lZGl1bVBhZ2VzV2l0aEZyZWVMaW5lc1tzaXplQ2xhc3Nd
OworICAgIHdoaWxlIChtZWRpdW1QYWdlc1dpdGhGcmVlTGluZXMuc2l6ZSgpKSB7CisgICAgICAg
IE1lZGl1bVBhZ2UqIHBhZ2UgPSBtZWRpdW1QYWdlc1dpdGhGcmVlTGluZXMucG9wKCk7CisgICAg
ICAgIGlmICghcGFnZS0+cmVmQ291bnQobG9jaykgfHwgcGFnZS0+c2l6ZUNsYXNzKCkgIT0gc2l6
ZUNsYXNzKSAvLyBQYWdlIHdhcyBwcm9tb3RlZCB0byB0aGUgcGFnZXMgbGlzdC4KKyAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICByZXR1cm4gcGFnZTsKKyAgICB9CisgICAgCiAgICAgbV9p
c0FsbG9jYXRpbmdQYWdlcyA9IHRydWU7CiAKLSAgICBNZWRpdW1QYWdlKiBwYWdlID0gW3RoaXNd
KCkgeworICAgIE1lZGl1bVBhZ2UqIHBhZ2UgPSBbdGhpcywgc2l6ZUNsYXNzXSgpIHsKICAgICAg
ICAgaWYgKG1fbWVkaXVtUGFnZXMuc2l6ZSgpKQogICAgICAgICAgICAgcmV0dXJuIG1fbWVkaXVt
UGFnZXMucG9wKCk7CiAgICAgICAgIApAQCAtMTUzLDEyICsyNjgsNTIgQEAgTWVkaXVtTGluZSog
SGVhcDo6YWxsb2NhdGVNZWRpdW1MaW5lU2xvdwogICAgICAgICByZXR1cm4gcGFnZTsKICAgICB9
KCk7CiAKLSAgICBNZWRpdW1MaW5lKiBsaW5lID0gcGFnZS0+YmVnaW4oKTsKLSAgICBmb3IgKGF1
dG8gaXQgPSBsaW5lICsgMTsgaXQgIT0gcGFnZS0+ZW5kKCk7ICsraXQpCi0gICAgICAgIG1fbWVk
aXVtTGluZXMucHVzaChpdCk7CisgICAgcGFnZS0+c2V0U2l6ZUNsYXNzKHNpemVDbGFzcyk7Cisg
ICAgcmV0dXJuIHBhZ2U7Cit9CiAKLSAgICBwYWdlLT5yZWYobG9jayk7Ci0gICAgcmV0dXJuIGxp
bmU7Cit2b2lkIEhlYXA6OmRlYWxsb2NhdGVTbWFsbExpbmUoc3RkOjpsb2NrX2d1YXJkPFN0YXRp
Y011dGV4PiYgbG9jaywgU21hbGxMaW5lKiBsaW5lKQoreworICAgIEJBU1NFUlQoIWxpbmUtPnJl
ZkNvdW50KGxvY2spKTsKKyAgICBTbWFsbFBhZ2UqIHBhZ2UgPSBTbWFsbFBhZ2U6OmdldChsaW5l
KTsKKyAgICBzaXplX3QgcmVmQ291bnQgPSBwYWdlLT5yZWZDb3VudChsb2NrKTsKKyAgICBwYWdl
LT5kZXJlZihsb2NrKTsKKworICAgIHN3aXRjaCAocmVmQ291bnQpIHsKKyAgICBjYXNlIFNtYWxs
UGFnZTo6bGluZUNvdW50OiB7CisgICAgICAgIC8vIEZpcnN0IGZyZWUgbGluZSBpbiB0aGUgcGFn
ZS4KKyAgICAgICAgbV9zbWFsbFBhZ2VzV2l0aEZyZWVMaW5lc1twYWdlLT5zaXplQ2xhc3MoKV0u
cHVzaChwYWdlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgMTogeworICAgICAg
ICAvLyBMYXN0IGZyZWUgbGluZSBpbiB0aGUgcGFnZS4KKyAgICAgICAgbV9zbWFsbFBhZ2VzLnB1
c2gocGFnZSk7CisgICAgICAgIG1fc2NhdmVuZ2VyLnJ1bigpOworICAgICAgICBicmVhazsKKyAg
ICB9CisgICAgfQorfQorCit2b2lkIEhlYXA6OmRlYWxsb2NhdGVNZWRpdW1MaW5lKHN0ZDo6bG9j
a19ndWFyZDxTdGF0aWNNdXRleD4mIGxvY2ssIE1lZGl1bUxpbmUqIGxpbmUpCit7CisgICAgQkFT
U0VSVCghbGluZS0+cmVmQ291bnQobG9jaykpOworICAgIE1lZGl1bVBhZ2UqIHBhZ2UgPSBNZWRp
dW1QYWdlOjpnZXQobGluZSk7CisgICAgc2l6ZV90IHJlZkNvdW50ID0gcGFnZS0+cmVmQ291bnQo
bG9jayk7CisgICAgcGFnZS0+ZGVyZWYobG9jayk7CisKKyAgICBzd2l0Y2ggKHJlZkNvdW50KSB7
CisgICAgY2FzZSBNZWRpdW1QYWdlOjpsaW5lQ291bnQ6IHsKKyAgICAgICAgLy8gRmlyc3QgZnJl
ZSBsaW5lIGluIHRoZSBwYWdlLgorICAgICAgICBtX21lZGl1bVBhZ2VzV2l0aEZyZWVMaW5lc1tw
YWdlLT5zaXplQ2xhc3MoKV0ucHVzaChwYWdlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAg
IGNhc2UgMTogeworICAgICAgICAvLyBMYXN0IGZyZWUgbGluZSBpbiB0aGUgcGFnZS4KKyAgICAg
ICAgbV9tZWRpdW1QYWdlcy5wdXNoKHBhZ2UpOworICAgICAgICBtX3NjYXZlbmdlci5ydW4oKTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIH0KIH0KIAogdm9pZCogSGVhcDo6YWxsb2NhdGVY
TGFyZ2Uoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYsIHNpemVfdCBzaXplKQpJbmRleDog
U291cmNlL2JtYWxsb2MvYm1hbGxvYy9IZWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxs
b2MvYm1hbGxvYy9IZWFwLmgJKHJldmlzaW9uIDE3MzY3MykKKysrIFNvdXJjZS9ibWFsbG9jL2Jt
YWxsb2MvSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxNiArMjYsMTcgQEAKICNpZm5kZWYg
SGVhcF9oCiAjZGVmaW5lIEhlYXBfaAogCi0jaW5jbHVkZSAiRml4ZWRWZWN0b3IuaCIKLSNpbmNs
dWRlICJWTUhlYXAuaCIKLSNpbmNsdWRlICJNZWRpdW1MaW5lLmgiCi0jaW5jbHVkZSAiTXV0ZXgu
aCIKLSNpbmNsdWRlICJTbWFsbFBhZ2UuaCIKKyNpbmNsdWRlICJCdW1wUmFuZ2UuaCIKKyNpbmNs
dWRlICJMaW5lTWV0YWRhdGEuaCIKICNpbmNsdWRlICJNZWRpdW1DaHVuay5oIgorI2luY2x1ZGUg
Ik1lZGl1bUxpbmUuaCIKICNpbmNsdWRlICJNZWRpdW1QYWdlLmgiCisjaW5jbHVkZSAiTXV0ZXgu
aCIKICNpbmNsdWRlICJTZWdyZWdhdGVkRnJlZUxpc3QuaCIKICNpbmNsdWRlICJTbWFsbENodW5r
LmgiCiAjaW5jbHVkZSAiU21hbGxMaW5lLmgiCisjaW5jbHVkZSAiU21hbGxQYWdlLmgiCisjaW5j
bHVkZSAiVk1IZWFwLmgiCiAjaW5jbHVkZSAiVmVjdG9yLmgiCiAjaW5jbHVkZSA8YXJyYXk+CiAj
aW5jbHVkZSA8bXV0ZXg+CkBAIC00OSwxMiArNTAsMTIgQEAgY2xhc3MgSGVhcCB7CiBwdWJsaWM6
CiAgICAgSGVhcChzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+Jik7CiAKLSAgICBTbWFsbExp
bmUqIGFsbG9jYXRlU21hbGxMaW5lKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mLCBzaXpl
X3Qgc21hbGxTaXplQ2xhc3MpOwotICAgIHZvaWQgZGVhbGxvY2F0ZVNtYWxsTGluZShzdGQ6Omxv
Y2tfZ3VhcmQ8U3RhdGljTXV0ZXg+JiwgU21hbGxMaW5lKik7CisgICAgdm9pZCByZWZpbGxTbWFs
bEJ1bXBSYW5nZUNhY2hlKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mLCBzaXplX3Qgc2l6
ZUNsYXNzLCBTbWFsbEJ1bXBSYW5nZUNhY2hlJik7CisgICAgdm9pZCBkZXJlZlNtYWxsTGluZShz
dGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+JiwgU21hbGxMaW5lKik7CisKKyAgICB2b2lkIHJl
ZmlsbE1lZGl1bUJ1bXBSYW5nZUNhY2hlKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mLCBz
aXplX3Qgc2l6ZUNsYXNzLCBNZWRpdW1CdW1wUmFuZ2VDYWNoZSYpOworICAgIHZvaWQgZGVyZWZN
ZWRpdW1MaW5lKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mLCBNZWRpdW1MaW5lKik7CiAK
LSAgICBNZWRpdW1MaW5lKiBhbGxvY2F0ZU1lZGl1bUxpbmUoc3RkOjpsb2NrX2d1YXJkPFN0YXRp
Y011dGV4PiYpOwotICAgIHZvaWQgZGVhbGxvY2F0ZU1lZGl1bUxpbmUoc3RkOjpsb2NrX2d1YXJk
PFN0YXRpY011dGV4PiYsIE1lZGl1bUxpbmUqKTsKLSAgICAKICAgICB2b2lkKiBhbGxvY2F0ZUxh
cmdlKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mLCBzaXplX3QpOwogICAgIHZvaWQgZGVh
bGxvY2F0ZUxhcmdlKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mLCB2b2lkKik7CiAKQEAg
LTY4LDkgKzY5LDE0IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICB+SGVhcCgpID0gZGVsZXRl
OworICAgIAorICAgIHZvaWQgaW5pdGlhbGl6ZUxpbmVNZXRhZGF0YSgpOwogCi0gICAgU21hbGxM
aW5lKiBhbGxvY2F0ZVNtYWxsTGluZVNsb3dDYXNlKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRl
eD4mLCBzaXplX3Qgc21hbGxTaXplQ2xhc3MpOwotICAgIE1lZGl1bUxpbmUqIGFsbG9jYXRlTWVk
aXVtTGluZVNsb3dDYXNlKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mKTsKKyAgICBTbWFs
bFBhZ2UqIGFsbG9jYXRlU21hbGxQYWdlKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mLCBz
aXplX3Qgc2l6ZUNsYXNzKTsKKyAgICBNZWRpdW1QYWdlKiBhbGxvY2F0ZU1lZGl1bVBhZ2Uoc3Rk
Ojpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYsIHNpemVfdCBzaXplQ2xhc3MpOworCisgICAgdm9p
ZCBkZWFsbG9jYXRlU21hbGxMaW5lKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mLCBTbWFs
bExpbmUqKTsKKyAgICB2b2lkIGRlYWxsb2NhdGVNZWRpdW1MaW5lKHN0ZDo6bG9ja19ndWFyZDxT
dGF0aWNNdXRleD4mLCBNZWRpdW1MaW5lKik7CiAKICAgICB2b2lkKiBhbGxvY2F0ZUxhcmdlKFJh
bmdlLCBzaXplX3QpOwogICAgIFJhbmdlIGFsbG9jYXRlTGFyZ2VDaHVuaygpOwpAQCAtODUsOCAr
OTEsMTEgQEAgcHJpdmF0ZToKICAgICB2b2lkIHNjYXZlbmdlTWVkaXVtUGFnZXMoc3RkOjp1bmlx
dWVfbG9jazxTdGF0aWNNdXRleD4mLCBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzKTsKICAgICB2
b2lkIHNjYXZlbmdlTGFyZ2VSYW5nZXMoc3RkOjp1bmlxdWVfbG9jazxTdGF0aWNNdXRleD4mLCBz
dGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzKTsKIAotICAgIHN0ZDo6YXJyYXk8VmVjdG9yPFNtYWxs
TGluZSo+LCBzbWFsbE1heCAvIGFsaWdubWVudD4gbV9zbWFsbExpbmVzOwotICAgIFZlY3RvcjxN
ZWRpdW1MaW5lKj4gbV9tZWRpdW1MaW5lczsKKyAgICBzdGQ6OmFycmF5PHN0ZDo6YXJyYXk8TGlu
ZU1ldGFkYXRhLCBTbWFsbFBhZ2U6OmxpbmVDb3VudD4sIHNtYWxsTWF4IC8gYWxpZ25tZW50PiBt
X3NtYWxsTGluZU1ldGFkYXRhOworICAgIHN0ZDo6YXJyYXk8c3RkOjphcnJheTxMaW5lTWV0YWRh
dGEsIE1lZGl1bVBhZ2U6OmxpbmVDb3VudD4sIG1lZGl1bU1heCAvIGFsaWdubWVudD4gbV9tZWRp
dW1MaW5lTWV0YWRhdGE7CisKKyAgICBzdGQ6OmFycmF5PFZlY3RvcjxTbWFsbFBhZ2UqPiwgc21h
bGxNYXggLyBhbGlnbm1lbnQ+IG1fc21hbGxQYWdlc1dpdGhGcmVlTGluZXM7CisgICAgc3RkOjph
cnJheTxWZWN0b3I8TWVkaXVtUGFnZSo+LCBtZWRpdW1NYXggLyBhbGlnbm1lbnQ+IG1fbWVkaXVt
UGFnZXNXaXRoRnJlZUxpbmVzOwogCiAgICAgVmVjdG9yPFNtYWxsUGFnZSo+IG1fc21hbGxQYWdl
czsKICAgICBWZWN0b3I8TWVkaXVtUGFnZSo+IG1fbWVkaXVtUGFnZXM7CkBAIC05OSw1OSArMTA4
LDE4IEBAIHByaXZhdGU6CiAgICAgQXN5bmNUYXNrPEhlYXAsIGRlY2x0eXBlKCZIZWFwOjpjb25j
dXJyZW50U2NhdmVuZ2UpPiBtX3NjYXZlbmdlcjsKIH07CiAKLWlubGluZSB2b2lkIEhlYXA6OmRl
YWxsb2NhdGVTbWFsbExpbmUoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYgbG9jaywgU21h
bGxMaW5lKiBsaW5lKQoraW5saW5lIHZvaWQgSGVhcDo6ZGVyZWZTbWFsbExpbmUoc3RkOjpsb2Nr
X2d1YXJkPFN0YXRpY011dGV4PiYgbG9jaywgU21hbGxMaW5lKiBsaW5lKQogewotICAgIEJBU1NF
UlQoIWxpbmUtPnJlZkNvdW50KGxvY2spKTsKLSAgICBTbWFsbFBhZ2UqIHBhZ2UgPSBTbWFsbFBh
Z2U6OmdldChsaW5lKTsKLSAgICBpZiAocGFnZS0+ZGVyZWYobG9jaykpIHsKLSAgICAgICAgbV9z
bWFsbFBhZ2VzLnB1c2gocGFnZSk7Ci0gICAgICAgIG1fc2NhdmVuZ2VyLnJ1bigpOworICAgIGlm
ICghbGluZS0+ZGVyZWYobG9jaykpCiAgICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgbV9zbWFs
bExpbmVzW3BhZ2UtPnNtYWxsU2l6ZUNsYXNzKCldLnB1c2gobGluZSk7Ci19Ci0KLWlubGluZSBT
bWFsbExpbmUqIEhlYXA6OmFsbG9jYXRlU21hbGxMaW5lKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNN
dXRleD4mIGxvY2ssIHNpemVfdCBzbWFsbFNpemVDbGFzcykKLXsKLSAgICBWZWN0b3I8U21hbGxM
aW5lKj4mIHNtYWxsTGluZXMgPSBtX3NtYWxsTGluZXNbc21hbGxTaXplQ2xhc3NdOwotICAgIHdo
aWxlIChzbWFsbExpbmVzLnNpemUoKSkgewotICAgICAgICBTbWFsbExpbmUqIGxpbmUgPSBzbWFs
bExpbmVzLnBvcCgpOwotICAgICAgICBTbWFsbFBhZ2UqIHBhZ2UgPSBTbWFsbFBhZ2U6OmdldChs
aW5lKTsKLSAgICAgICAgaWYgKCFwYWdlLT5yZWZDb3VudChsb2NrKSB8fCBwYWdlLT5zbWFsbFNp
emVDbGFzcygpICE9IHNtYWxsU2l6ZUNsYXNzKSAvLyBUaGUgbGluZSB3YXMgcHJvbW90ZWQgdG8g
dGhlIHNtYWxsIHBhZ2VzIGxpc3QuCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgQkFT
U0VSVCghbGluZS0+cmVmQ291bnQobG9jaykpOwotICAgICAgICBwYWdlLT5yZWYobG9jayk7Ci0g
ICAgICAgIHJldHVybiBsaW5lOwotICAgIH0KLQotICAgIHJldHVybiBhbGxvY2F0ZVNtYWxsTGlu
ZVNsb3dDYXNlKGxvY2ssIHNtYWxsU2l6ZUNsYXNzKTsKKyAgICBkZWFsbG9jYXRlU21hbGxMaW5l
KGxvY2ssIGxpbmUpOwogfQogCi1pbmxpbmUgdm9pZCBIZWFwOjpkZWFsbG9jYXRlTWVkaXVtTGlu
ZShzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+JiBsb2NrLCBNZWRpdW1MaW5lKiBsaW5lKQor
aW5saW5lIHZvaWQgSGVhcDo6ZGVyZWZNZWRpdW1MaW5lKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNN
dXRleD4mIGxvY2ssIE1lZGl1bUxpbmUqIGxpbmUpCiB7Ci0gICAgQkFTU0VSVCghbGluZS0+cmVm
Q291bnQobG9jaykpOwotICAgIE1lZGl1bVBhZ2UqIHBhZ2UgPSBNZWRpdW1QYWdlOjpnZXQobGlu
ZSk7Ci0gICAgaWYgKHBhZ2UtPmRlcmVmKGxvY2spKSB7Ci0gICAgICAgIG1fbWVkaXVtUGFnZXMu
cHVzaChwYWdlKTsKLSAgICAgICAgbV9zY2F2ZW5nZXIucnVuKCk7CisgICAgaWYgKCFsaW5lLT5k
ZXJlZihsb2NrKSkKICAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBtX21lZGl1bUxpbmVzLnB1
c2gobGluZSk7Ci19Ci0KLWlubGluZSBNZWRpdW1MaW5lKiBIZWFwOjphbGxvY2F0ZU1lZGl1bUxp
bmUoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYgbG9jaykKLXsKLSAgICB3aGlsZSAobV9t
ZWRpdW1MaW5lcy5zaXplKCkpIHsKLSAgICAgICAgTWVkaXVtTGluZSogbGluZSA9IG1fbWVkaXVt
TGluZXMucG9wKCk7Ci0gICAgICAgIE1lZGl1bVBhZ2UqIHBhZ2UgPSBNZWRpdW1QYWdlOjpnZXQo
bGluZSk7Ci0gICAgICAgIGlmICghcGFnZS0+cmVmQ291bnQobG9jaykpIC8vIFRoZSBsaW5lIHdh
cyBwcm9tb3RlZCB0byB0aGUgbWVkaXVtIHBhZ2VzIGxpc3QuCi0gICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgQkFTU0VSVCghbGluZS0+cmVmQ291bnQobG9jaykpOwotICAgICAgICBwYWdl
LT5yZWYobG9jayk7Ci0gICAgICAgIHJldHVybiBsaW5lOwotICAgIH0KLQotICAgIHJldHVybiBh
bGxvY2F0ZU1lZGl1bUxpbmVTbG93Q2FzZShsb2NrKTsKKyAgICBkZWFsbG9jYXRlTWVkaXVtTGlu
ZShsb2NrLCBsaW5lKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgYm1hbGxvYwpJbmRleDogU291cmNl
L2JtYWxsb2MvYm1hbGxvYy9MaW5lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1h
bGxvYy9MaW5lLmgJKHJldmlzaW9uIDE3MzY3MykKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2Mv
TGluZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSw4ICs0NSw4IEBAIHB1YmxpYzoKIAogICAgIHN0
YXRpYyBMaW5lKiBnZXQodm9pZCopOwogCi0gICAgdm9pZCBjb25jdXJyZW50UmVmKHVuc2lnbmVk
IGNoYXIgPSAxKTsKLSAgICBib29sIGRlcmVmKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4m
LCB1bnNpZ25lZCBjaGFyID0gMSk7CisgICAgdm9pZCByZWYoc3RkOjpsb2NrX2d1YXJkPFN0YXRp
Y011dGV4PiYsIHVuc2lnbmVkIGNoYXIpOworICAgIGJvb2wgZGVyZWYoc3RkOjpsb2NrX2d1YXJk
PFN0YXRpY011dGV4PiYpOwogICAgIHVuc2lnbmVkIHJlZkNvdW50KHN0ZDo6bG9ja19ndWFyZDxT
dGF0aWNNdXRleD4mKSB7IHJldHVybiBtX3JlZkNvdW50OyB9CiAgICAgCiAgICAgY2hhciogYmVn
aW4oKTsKQEAgLTgxLDE4ICs4MSwxOCBAQCBpbmxpbmUgY2hhciogTGluZTxUcmFpdHM+OjplbmQo
KQogfQogCiB0ZW1wbGF0ZTxjbGFzcyBUcmFpdHM+Ci1pbmxpbmUgdm9pZCBMaW5lPFRyYWl0cz46
OmNvbmN1cnJlbnRSZWYodW5zaWduZWQgY2hhciBjb3VudCkKK2lubGluZSB2b2lkIExpbmU8VHJh
aXRzPjo6cmVmKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mLCB1bnNpZ25lZCBjaGFyIHJl
ZkNvdW50KQogewotICAgIEJBU1NFUlQoIW1fcmVmQ291bnQpOyAvLyBVcC1yZWYgZnJvbSB6ZXJv
IGNhbiBiZSBsb2NrLWZyZWUgYmVjYXVzZSB0aGVyZSBhcmUgbm8gb3RoZXIgY2xpZW50cy4KLSAg
ICBCQVNTRVJUKGNvdW50IDw9IG1heFJlZkNvdW50KTsKLSAgICBtX3JlZkNvdW50ID0gY291bnQ7
CisgICAgQkFTU0VSVCghbV9yZWZDb3VudCk7CisgICAgQkFTU0VSVChyZWZDb3VudCA8PSBtYXhS
ZWZDb3VudCk7CisgICAgbV9yZWZDb3VudCA9IHJlZkNvdW50OwogfQogCiB0ZW1wbGF0ZTxjbGFz
cyBUcmFpdHM+Ci1pbmxpbmUgYm9vbCBMaW5lPFRyYWl0cz46OmRlcmVmKHN0ZDo6bG9ja19ndWFy
ZDxTdGF0aWNNdXRleD4mLCB1bnNpZ25lZCBjaGFyIGNvdW50KQoraW5saW5lIGJvb2wgTGluZTxU
cmFpdHM+OjpkZXJlZihzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+JikKIHsKLSAgICBCQVNT
RVJUKGNvdW50IDw9IG1fcmVmQ291bnQpOwotICAgIG1fcmVmQ291bnQgLT0gY291bnQ7CisgICAg
QkFTU0VSVChtX3JlZkNvdW50KTsKKyAgICAtLW1fcmVmQ291bnQ7CiAgICAgcmV0dXJuICFtX3Jl
ZkNvdW50OwogfQogCkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0xpbmVNZXRhZGF0YS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvTGluZU1ldGFkYXRhLmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0xpbmVNZXRhZGF0YS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBMaW5lTWV0YWRhdGFfaAorI2RlZmluZSBMaW5lTWV0
YWRhdGFfaAorCituYW1lc3BhY2UgYm1hbGxvYyB7CisKK3N0cnVjdCBMaW5lTWV0YWRhdGEgewor
ICAgIHVuc2lnbmVkIHNob3J0IHN0YXJ0T2Zmc2V0OworICAgIHVuc2lnbmVkIHNob3J0IG9iamVj
dENvdW50OworfTsKKworfSAvLyBuYW1lc3BhY2UgYm1hbGxvYworCisjZW5kaWYgLy8gTGluZU1l
dGFkYXRhX2gKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvTWVkaXVtQWxsb2NhdG9yLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9NZWRpdW1BbGxvY2F0b3IuaAko
cmV2aXNpb24gMTczNjczKQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9NZWRpdW1BbGxvY2F0
b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSwxMTUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIE1lZGl1bUFsbG9jYXRvcl9oCi0j
ZGVmaW5lIE1lZGl1bUFsbG9jYXRvcl9oCi0KLSNpbmNsdWRlICJCQXNzZXJ0LmgiCi0jaW5jbHVk
ZSAiTWVkaXVtQ2h1bmsuaCIKLSNpbmNsdWRlICJNZWRpdW1MaW5lLmgiCi0KLW5hbWVzcGFjZSBi
bWFsbG9jIHsKLQotLy8gSGVscGVyIG9iamVjdCBmb3IgYWxsb2NhdGluZyBtZWRpdW0gb2JqZWN0
cy4KLQotY2xhc3MgTWVkaXVtQWxsb2NhdG9yIHsKLXB1YmxpYzoKLSAgICBNZWRpdW1BbGxvY2F0
b3IoKTsKLQotICAgIGJvb2wgaXNOdWxsKCkgeyByZXR1cm4gIW1fZW5kOyB9Ci0gICAgTWVkaXVt
TGluZSogbGluZSgpOwotCi0gICAgdm9pZCogYWxsb2NhdGUoc2l6ZV90KTsKLSAgICBib29sIGFs
bG9jYXRlKHNpemVfdCwgdm9pZComKTsKLQotICAgIHVuc2lnbmVkIGNoYXIgZGVyZWZDb3VudCgp
OwotCi0gICAgdm9pZCByZWZpbGwoTWVkaXVtTGluZSopOwotICAgIHZvaWQgY2xlYXIoKTsKLQot
cHJpdmF0ZToKLSAgICBjaGFyKiBtX2VuZDsKLSAgICBzaXplX3QgbV9yZW1haW5pbmc7Ci0gICAg
c2l6ZV90IG1fb2JqZWN0Q291bnQ7Ci19OwotCi1pbmxpbmUgTWVkaXVtQWxsb2NhdG9yOjpNZWRp
dW1BbGxvY2F0b3IoKQotICAgIDogbV9lbmQoKQotICAgICwgbV9yZW1haW5pbmcoKQotICAgICwg
bV9vYmplY3RDb3VudCgpCi17Ci19Ci0KLWlubGluZSBNZWRpdW1MaW5lKiBNZWRpdW1BbGxvY2F0
b3I6OmxpbmUoKQotewotICAgIHJldHVybiBNZWRpdW1MaW5lOjpnZXQobV9lbmQgLSAxKTsKLX0K
LQotaW5saW5lIHZvaWQqIE1lZGl1bUFsbG9jYXRvcjo6YWxsb2NhdGUoc2l6ZV90IHNpemUpCi17
Ci0gICAgQkFTU0VSVChzaXplIDw9IG1fcmVtYWluaW5nKTsKLSAgICBCQVNTRVJUKHNpemUgPT0g
cm91bmRVcFRvTXVsdGlwbGVPZjxhbGlnbm1lbnQ+KHNpemUpKTsKLSAgICBCQVNTRVJUKHNpemUg
Pj0gTWVkaXVtTGluZTo6bWluaW11bU9iamVjdFNpemUpOwotCi0gICAgbV9yZW1haW5pbmcgLT0g
c2l6ZTsKLSAgICB2b2lkKiBvYmplY3QgPSBtX2VuZCAtIG1fcmVtYWluaW5nIC0gc2l6ZTsKLSAg
ICBCQVNTRVJUKGlzU21hbGxPck1lZGl1bShvYmplY3QpICYmICFpc1NtYWxsKG9iamVjdCkpOwot
Ci0gICAgKyttX29iamVjdENvdW50OwotICAgIHJldHVybiBvYmplY3Q7Ci19Ci0KLWlubGluZSBi
b29sIE1lZGl1bUFsbG9jYXRvcjo6YWxsb2NhdGUoc2l6ZV90IHNpemUsIHZvaWQqJiBvYmplY3Qp
Ci17Ci0gICAgaWYgKHNpemUgPiBtX3JlbWFpbmluZykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgb2JqZWN0ID0gYWxsb2NhdGUoc2l6ZSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWlu
bGluZSB1bnNpZ25lZCBjaGFyIE1lZGl1bUFsbG9jYXRvcjo6ZGVyZWZDb3VudCgpCi17Ci0gICAg
cmV0dXJuIE1lZGl1bUxpbmU6Om1heFJlZkNvdW50IC0gbV9vYmplY3RDb3VudDsKLX0KLQotaW5s
aW5lIHZvaWQgTWVkaXVtQWxsb2NhdG9yOjpyZWZpbGwoTWVkaXVtTGluZSogbGluZSkKLXsKLSAg
ICBsaW5lLT5jb25jdXJyZW50UmVmKE1lZGl1bUxpbmU6Om1heFJlZkNvdW50KTsKLSAgICBtX2Vu
ZCA9IGxpbmUtPmVuZCgpOwotICAgIG1fcmVtYWluaW5nID0gbWVkaXVtTGluZVNpemU7Ci0gICAg
bV9vYmplY3RDb3VudCA9IDA7Ci19Ci0KLWlubGluZSB2b2lkIE1lZGl1bUFsbG9jYXRvcjo6Y2xl
YXIoKQotewotICAgIG1fZW5kID0gbnVsbHB0cjsKLSAgICBtX3JlbWFpbmluZyA9IDA7Ci0gICAg
bV9vYmplY3RDb3VudCA9IDA7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIGJtYWxsb2MKLQotI2VuZGlm
IC8vIE1lZGl1bUFsbG9jYXRvcl9oCkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1BhZ2Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1BhZ2UuaAkocmV2aXNpb24g
MTczNjczKQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9QYWdlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM5LDkgKzM5LDEwIEBAIHB1YmxpYzoKICAgICB0eXBlZGVmIHR5cGVuYW1lIFRyYWl0czo6
Q2h1bmsgQ2h1bms7CiAgICAgdHlwZWRlZiB0eXBlbmFtZSBUcmFpdHM6OkxpbmUgTGluZTsKICAg
ICBzdGF0aWMgY29uc3Qgc2l6ZV90IGxpbmVTaXplID0gVHJhaXRzOjpsaW5lU2l6ZTsKKyAgICBz
dGF0aWMgY29uc3Qgc2l6ZV90IGxpbmVDb3VudCA9IHZtUGFnZVNpemUgLyBsaW5lU2l6ZTsKIAog
ICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIG1heFJlZkNvdW50ID0gc3RkOjpudW1lcmlj
X2xpbWl0czx1bnNpZ25lZCBjaGFyPjo6bWF4KCk7Ci0gICAgc3RhdGljX2Fzc2VydCh2bVBhZ2VT
aXplIC8gbGluZVNpemUgPCBtYXhSZWZDb3VudCwgIm1heGltdW0gbGluZSBjb3VudCBtdXN0IGZp
dCBpbiBQYWdlIik7CisgICAgc3RhdGljX2Fzc2VydChsaW5lQ291bnQgPCBtYXhSZWZDb3VudCwg
Im1heGltdW0gbGluZSBjb3VudCBtdXN0IGZpdCBpbiBQYWdlIik7CiAgICAgCiAgICAgc3RhdGlj
IFBhZ2UqIGdldChMaW5lKik7CiAKQEAgLTQ5LDE1ICs1MCwxNSBAQCBwdWJsaWM6CiAgICAgYm9v
bCBkZXJlZihzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+Jik7CiAgICAgdW5zaWduZWQgcmVm
Q291bnQoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYpIHsgcmV0dXJuIG1fcmVmQ291bnQ7
IH0KICAgICAKLSAgICBzaXplX3Qgc21hbGxTaXplQ2xhc3MoKSB7IHJldHVybiBtX3NtYWxsU2l6
ZUNsYXNzOyB9Ci0gICAgdm9pZCBzZXRTbWFsbFNpemVDbGFzcyhzaXplX3Qgc21hbGxTaXplQ2xh
c3MpIHsgbV9zbWFsbFNpemVDbGFzcyA9IHNtYWxsU2l6ZUNsYXNzOyB9CisgICAgc2l6ZV90IHNp
emVDbGFzcygpIHsgcmV0dXJuIG1fc2l6ZUNsYXNzOyB9CisgICAgdm9pZCBzZXRTaXplQ2xhc3Mo
c2l6ZV90IHNpemVDbGFzcykgeyBtX3NpemVDbGFzcyA9IHNpemVDbGFzczsgfQogICAgIAogICAg
IExpbmUqIGJlZ2luKCk7CiAgICAgTGluZSogZW5kKCk7CiAKIHByaXZhdGU6CiAgICAgdW5zaWdu
ZWQgY2hhciBtX3JlZkNvdW50OwotICAgIHVuc2lnbmVkIGNoYXIgbV9zbWFsbFNpemVDbGFzczsK
KyAgICB1bnNpZ25lZCBjaGFyIG1fc2l6ZUNsYXNzOwogfTsKIAogdGVtcGxhdGU8dHlwZW5hbWUg
VHJhaXRzPgpAQCAtODksMTQgKzkwLDE0IEBAIGlubGluZSBhdXRvIFBhZ2U8VHJhaXRzPjo6YmVn
aW4oKSAtPiBMaW4KIHsKICAgICBDaHVuayogY2h1bmsgPSBDaHVuazo6Z2V0KHRoaXMpOwogICAg
IHNpemVfdCBwYWdlTnVtYmVyID0gdGhpcyAtIGNodW5rLT5wYWdlcygpOwotICAgIHNpemVfdCBs
aW5lTnVtYmVyID0gcGFnZU51bWJlciAqIHZtUGFnZVNpemUgLyBsaW5lU2l6ZTsKKyAgICBzaXpl
X3QgbGluZU51bWJlciA9IHBhZ2VOdW1iZXIgKiBsaW5lQ291bnQ7CiAgICAgcmV0dXJuICZjaHVu
ay0+bGluZXMoKVtsaW5lTnVtYmVyXTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVHJhaXRzPgog
aW5saW5lIGF1dG8gUGFnZTxUcmFpdHM+OjplbmQoKSAtPiBMaW5lKgogewotICAgIHJldHVybiBi
ZWdpbigpICsgdm1QYWdlU2l6ZSAvIGxpbmVTaXplOworICAgIHJldHVybiBiZWdpbigpICsgbGlu
ZUNvdW50OwogfQogCiB9IC8vIG5hbWVzcGFjZSBibWFsbG9jCkluZGV4OiBTb3VyY2UvYm1hbGxv
Yy9ibWFsbG9jL1NpemVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9T
aXplcy5oCShyZXZpc2lvbiAxNzM2NzUpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1NpemVz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTU2LDcgKzU2LDcgQEAgbmFtZXNwYWNlIFNpemVzIHsKICAg
ICBzdGF0aWMgY29uc3Qgc2l6ZV90IHN1cGVyQ2h1bmtTaXplID0gMzIgKiBNQjsKIAogICAgIHN0
YXRpYyBjb25zdCBzaXplX3Qgc21hbGxNYXggPSAyNTY7Ci0gICAgc3RhdGljIGNvbnN0IHNpemVf
dCBzbWFsbExpbmVTaXplID0gNTEyOworICAgIHN0YXRpYyBjb25zdCBzaXplX3Qgc21hbGxMaW5l
U2l6ZSA9IDI1NjsKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IHNtYWxsTGluZU1hc2sgPSB+KHNt
YWxsTGluZVNpemUgLSAxdWwpOwogCiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBzbWFsbENodW5r
U2l6ZSA9IHN1cGVyQ2h1bmtTaXplIC8gNDsKQEAgLTY0LDcgKzY0LDcgQEAgbmFtZXNwYWNlIFNp
emVzIHsKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IHNtYWxsQ2h1bmtNYXNrID0gfihzbWFsbENo
dW5rU2l6ZSAtIDF1bCk7CiAKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IG1lZGl1bU1heCA9IDEw
MjQ7Ci0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBtZWRpdW1MaW5lU2l6ZSA9IDIwNDg7CisgICAg
c3RhdGljIGNvbnN0IHNpemVfdCBtZWRpdW1MaW5lU2l6ZSA9IDEwMjQ7CiAgICAgc3RhdGljIGNv
bnN0IHNpemVfdCBtZWRpdW1MaW5lTWFzayA9IH4obWVkaXVtTGluZVNpemUgLSAxdWwpOwogCiAg
ICAgc3RhdGljIGNvbnN0IHNpemVfdCBtZWRpdW1DaHVua1NpemUgPSBzdXBlckNodW5rU2l6ZSAv
IDQ7CkBAIC05MiwyMSArOTIsMjAgQEAgbmFtZXNwYWNlIFNpemVzIHsKIAogICAgIHN0YXRpYyBj
b25zdCBzaXplX3QgZGVhbGxvY2F0b3JMb2dDYXBhY2l0eSA9IDI1NjsKIAotICAgIHN0YXRpYyBj
b25zdCBzaXplX3Qgc21hbGxMaW5lQ2FjaGVDYXBhY2l0eSA9IHZtUGFnZVNpemUgLyBzbWFsbExp
bmVTaXplOwotICAgIHN0YXRpYyBjb25zdCBzaXplX3QgbWVkaXVtTGluZUNhY2hlQ2FwYWNpdHkg
PSB2bVBhZ2VTaXplIC8gbWVkaXVtTGluZVNpemU7CisgICAgc3RhdGljIGNvbnN0IHNpemVfdCBz
bWFsbFJhbmdlQ2FjaGVDYXBhY2l0eSA9IHZtUGFnZVNpemUgLyBzbWFsbExpbmVTaXplOworICAg
IHN0YXRpYyBjb25zdCBzaXplX3QgbWVkaXVtUmFuZ2VDYWNoZUNhcGFjaXR5ID0gdm1QYWdlU2l6
ZSAvIG1lZGl1bUxpbmVTaXplOwogICAgIAogICAgIHN0YXRpYyBjb25zdCBzdGQ6OmNocm9ubzo6
bWlsbGlzZWNvbmRzIHNjYXZlbmdlU2xlZXBEdXJhdGlvbiA9IHN0ZDo6Y2hyb25vOjptaWxsaXNl
Y29uZHMoNTEyKTsKIAotICAgIGlubGluZSBzaXplX3Qgc21hbGxTaXplQ2xhc3NGb3Ioc2l6ZV90
IHNpemUpCisgICAgaW5saW5lIHNpemVfdCBzaXplQ2xhc3Moc2l6ZV90IHNpemUpCiAgICAgewot
ICAgICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IHNtYWxsU2l6ZUNsYXNzTWFzayA9IChzbWFsbE1h
eCAvIGFsaWdubWVudCkgLSAxOwotICAgICAgICByZXR1cm4gbWFzaygoc2l6ZSAtIDF1bCkgLyBh
bGlnbm1lbnQsIHNtYWxsU2l6ZUNsYXNzTWFzayk7CisgICAgICAgIHN0YXRpYyBjb25zdCBzaXpl
X3Qgc2l6ZUNsYXNzTWFzayA9IChtZWRpdW1NYXggLyBhbGlnbm1lbnQpIC0gMTsKKyAgICAgICAg
cmV0dXJuIG1hc2soKHNpemUgLSAxdWwpIC8gYWxpZ25tZW50LCBzaXplQ2xhc3NNYXNrKTsKICAg
ICB9CiAKLSAgICBpbmxpbmUgc2l6ZV90IG1lZGl1bVNpemVDbGFzc0ZvcihzaXplX3Qgc2l6ZSkK
KyAgICBpbmxpbmUgc2l6ZV90IG9iamVjdFNpemUoc2l6ZV90IHNpemVDbGFzcykKICAgICB7Ci0g
ICAgICAgIHN0YXRpYyBjb25zdCBzaXplX3QgbWVkaXVtU2l6ZUNsYXNzTWFzayA9IChtZWRpdW1N
YXggLyBhbGlnbm1lbnQpIC0gMTsKLSAgICAgICAgcmV0dXJuIG1hc2soKHNpemUgLSAxdWwpIC8g
YWxpZ25tZW50LCBtZWRpdW1TaXplQ2xhc3NNYXNrKTsKKyAgICAgICAgcmV0dXJuIChzaXplQ2xh
c3MgKyAxKSAqIGFsaWdubWVudDsKICAgICB9CiB9OwogCkluZGV4OiBTb3VyY2UvYm1hbGxvYy9i
bWFsbG9jL2JtYWxsb2MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL2Jt
YWxsb2MuaAkocmV2aXNpb24gMTczNjczKQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9ibWFs
bG9jLmgJKHdvcmtpbmcgY29weSkKQEAgLTUyLDE1ICs1MiwxMyBAQCBpbmxpbmUgdm9pZCogcmVh
bGxvYyh2b2lkKiBvYmplY3QsIHNpemVfCiAgICAgc2l6ZV90IG9sZFNpemUgPSAwOwogICAgIHN3
aXRjaChvYmplY3RUeXBlKG9iamVjdCkpIHsKICAgICBjYXNlIFNtYWxsOiB7Ci0gICAgICAgIC8v
IFdlIGRvbid0IGhhdmUgYW4gZXhhY3Qgc2l6ZSwgYnV0IHdlIGNhbiBjYWxjdWxhdGUgYSBtYXhp
bXVtLgotICAgICAgICB2b2lkKiBlbmQgPSByb3VuZFVwVG9NdWx0aXBsZU9mPHNtYWxsTGluZVNp
emU+KHN0YXRpY19jYXN0PGNoYXIqPihvYmplY3QpICsgMSk7Ci0gICAgICAgIG9sZFNpemUgPSBz
dGF0aWNfY2FzdDxjaGFyKj4oZW5kKSAtIHN0YXRpY19jYXN0PGNoYXIqPihvYmplY3QpOworICAg
ICAgICBTbWFsbFBhZ2UqIHBhZ2UgPSBTbWFsbFBhZ2U6OmdldChTbWFsbExpbmU6OmdldChvYmpl
Y3QpKTsKKyAgICAgICAgb2xkU2l6ZSA9IG9iamVjdFNpemUocGFnZS0+c2l6ZUNsYXNzKCkpOwog
ICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBNZWRpdW06IHsKLSAgICAgICAgLy8gV2Ug
ZG9uJ3QgaGF2ZSBhbiBleGFjdCBzaXplLCBidXQgd2UgY2FuIGNhbGN1bGF0ZSBhIG1heGltdW0u
Ci0gICAgICAgIHZvaWQqIGVuZCA9IHJvdW5kVXBUb011bHRpcGxlT2Y8bWVkaXVtTGluZVNpemU+
KHN0YXRpY19jYXN0PGNoYXIqPihvYmplY3QpICsgMSk7Ci0gICAgICAgIG9sZFNpemUgPSBzdGF0
aWNfY2FzdDxjaGFyKj4oZW5kKSAtIHN0YXRpY19jYXN0PGNoYXIqPihvYmplY3QpOworICAgICAg
ICBNZWRpdW1QYWdlKiBwYWdlID0gTWVkaXVtUGFnZTo6Z2V0KE1lZGl1bUxpbmU6OmdldChvYmpl
Y3QpKTsKKyAgICAgICAgb2xkU2l6ZSA9IG9iamVjdFNpemUocGFnZS0+c2l6ZUNsYXNzKCkpOwog
ICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBMYXJnZTogewo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>238456</attachid>
            <date>2014-09-22 00:30:19 -0700</date>
            <delta_ts>2014-09-22 00:43:30 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-136993-20140922003018.patch</filename>
            <type>text/plain</type>
            <size>52812</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvd3RmL0Zhc3RNYWxsb2MuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XVEYvd3RmL0Zhc3RNYWxsb2MuY3BwCShyZXZpc2lvbiAxNzM2NzMpCisrKyBTb3VyY2UvV1RG
L3d0Zi9GYXN0TWFsbG9jLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAxLDYgKzEwMSwxMCBAQAog
I2VuZGlmCiAjZW5kaWYKIAorI2lmIChQTEFURk9STShDT0NPQSkgJiYgKENQVShYODZfNjQpIHx8
IENQVShBUk02NCkpKQorI2RlZmluZSBVU0VfQk1BTExPQyAxCisjZW5kaWYKKwogI2lmICEoZGVm
aW5lZChVU0VfU1lTVEVNX01BTExPQykgJiYgVVNFX1NZU1RFTV9NQUxMT0MpICYmIGRlZmluZWQo
TkRFQlVHKQogI2RlZmluZSBGT1JDRV9TWVNURU1fTUFMTE9DIDAKICNlbHNlCkluZGV4OiBTb3Vy
Y2UvYm1hbGxvYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvQ2hhbmdl
TG9nCShyZXZpc2lvbiAxNzM4MDQpCisrKyBTb3VyY2UvYm1hbGxvYy9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSwxMjIgQEAKKzIwMTQtMDktMjEgIEdlb2ZmcmV5IEdhcmVuICA8
Z2dhcmVuQGFwcGxlLmNvbT4KKworICAgICAgICBibWFsbG9jOiBBbGxvY2F0aW9uIHNob3VsZCBi
ZSBtb3JlIHByZWNpc2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTEzNjk5MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIDEzJSByZWR1Y3Rpb24gaW4gaGVhcCBzaXplIG9uIHRoZSBNYWxsb2NCZW5jaCAqX21l
bW9yeV93YXJuaW5nIGJlbmNobWFya3MuCisKKyAgICAgICAgVGhpcyBwYXRjaCB0ZWFjaGVzIHRo
ZSBhbGxvY2F0b3IgdG8gbWVyZ2UgYWRqYWNlbnQgZnJlZSBsaW5lcyBpbnRvIGEKKyAgICAgICAg
c2luZ2xlIGFsbG9jYXRhYmxlIHJhbmdlLiBUaGlzIGFsbG93cyB1cyB0byBzaHJpbmsgdGhlIHNp
emUgb2YgYW4KKyAgICAgICAgaW5kaXZpZHVhbCBsaW5lIHdpdGhvdXQgaW5jcmVhc2luZyBmcmFn
bWVudGF0aW9uIG9yIHRoZSByYXRlIG9mIGFsbG9jYXRvcgorICAgICAgICBzbG93IHBhdGhzLgor
CisgICAgICAgIFdlJ2xsIG9ubHkgdGFrZSBtb3JlIHNsb3cgcGF0aHMgd2hlbiBhdmFpbGFibGUg
bWVtb3J5IGlzIHNwYXJzZSwgd2hpY2gKKyAgICAgICAgaXMgZXhhY3RseSB3aGVuIGl0J3Mgd29y
dGggaXQuIFdoZW4gYXZhaWxhYmxlIG1lbW9yeSBpcyBkZW5zZSwgd2UnbGwKKyAgICAgICAgdGFr
ZSBmZXdlciBzbG93IHBhdGhzLgorCisgICAgICAgICogYm1hbGxvYy54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qOgorICAgICAgICAqIGJtYWxsb2MvQWxnb3JpdGhtLmg6CisgICAgICAgIChibWFs
bG9jOjpkaXZpZGVSb3VuZGluZ1VwKToKKworICAgICAgICAqIGJtYWxsb2MvQWxsb2NhdG9yLmNw
cDoKKyAgICAgICAgKGJtYWxsb2M6OkFsbG9jYXRvcjo6QWxsb2NhdG9yKTogVXBkYXRlZCBmb3Ig
aW50ZXJmYWNlIGNoYW5nZXMuCisKKyAgICAgICAgKGJtYWxsb2M6OkFsbG9jYXRvcjo6c2NhdmVu
Z2UpOiBTY2F2ZW5nZSBieSBvYmplY3QgaW5zdGVhZCBvZiBieSBsaW5lLgorICAgICAgICBOb3cg
dGhhdCB3ZSBtZXJnZSBsaW5lcywgaXQncyBub3QgY29udmVuaWVudCB0byBzY2F2ZW5nZSBieSBs
aW5lLgorCisgICAgICAgIChibWFsbG9jOjpBbGxvY2F0b3I6OmFsbG9jYXRlU21hbGxCdW1wUmFu
Z2UpOgorICAgICAgICAoYm1hbGxvYzo6QWxsb2NhdG9yOjphbGxvY2F0ZU1lZGl1bUJ1bXBSYW5n
ZSk6IEFsbG9jYXRlIHdob2xlIHJhbmdlcworICAgICAgICBpbnN0ZWFkIG9mIGluZGl2aWR1YWwg
bGluZXMuCisKKyAgICAgICAgKGJtYWxsb2M6OkFsbG9jYXRvcjo6YWxsb2NhdGVTbG93Q2FzZSk6
CisgICAgICAgIChibWFsbG9jOjpBbGxvY2F0b3I6OmFsbG9jYXRlU21hbGxMaW5lKTogRGVsZXRl
ZC4KKyAgICAgICAgKGJtYWxsb2M6OkFsbG9jYXRvcjo6YWxsb2NhdGVNZWRpdW1MaW5lKTogRGVs
ZXRlZC4KKyAgICAgICAgKGJtYWxsb2M6OkFsbG9jYXRvcjo6YWxsb2NhdGVNZWRpdW0pOiBEZWxl
dGVkLgorICAgICAgICAqIGJtYWxsb2MvQWxsb2NhdG9yLmg6CisgICAgICAgIChibWFsbG9jOjpB
bGxvY2F0b3I6OmFsbG9jYXRlRmFzdENhc2UpOiBGb2xkZWQgbWVkaXVtIGFsbG9jYXRpb25zCisg
ICAgICAgIGludG8gdGhlIHN0YW5kYXJkIGZhc3QgcGF0aCB3aXRoIHNtYWxsIGFsbG9jYXRpb25z
LiBTaW5jZSBhIEJ1bXBBbGxvY2F0b3IKKyAgICAgICAganVzdCBhbGxvY2F0ZXMgb3V0IG9mIGFu
IGFyYml0cmFyeSByYW5nZSwgaXQgZG9lc24ndCBuZWVkIHRvIGRpc3Rpbmd1aXNoCisgICAgICAg
IGJldHdlZW4gc21hbGwgYW5kIG1lZGl1bSBsaW5lcy4KKworICAgICAgICAqIGJtYWxsb2MvQnVt
cEFsbG9jYXRvci5oOgorICAgICAgICAoYm1hbGxvYzo6QnVtcEFsbG9jYXRvcjo6c2l6ZSk6Cisg
ICAgICAgIChibWFsbG9jOjpCdW1wQWxsb2NhdG9yOjpCdW1wQWxsb2NhdG9yKToKKyAgICAgICAg
KGJtYWxsb2M6OkJ1bXBBbGxvY2F0b3I6OmluaXQpOgorICAgICAgICAoYm1hbGxvYzo6QnVtcEFs
bG9jYXRvcjo6cmVmaWxsKToKKyAgICAgICAgKGJtYWxsb2M6OkJ1bXBBbGxvY2F0b3I6OmxpbmUp
OiBEZWxldGVkLiBObyBuZWVkIHRvIHRyYWNrIGxpbmUgaW5mb3JtYXRpb24KKyAgICAgICAgYW55
bW9yZTogdGhlIGhlYXAganVzdCBnaXZlcyB1cyBhIHBvaW50ZXIgYW5kIGEgcHJlLWNvbXB1dGVk
IG51bWJlciBvZgorICAgICAgICBvYmplY3RzLCBhbmQgd2UgYWxsb2NhdGUgdGhlbS4KKworICAg
ICAgICAqIGJtYWxsb2MvRGVhbGxvY2F0b3IuY3BwOgorICAgICAgICAoYm1hbGxvYzo6RGVhbGxv
Y2F0b3I6OnByb2Nlc3NPYmplY3RMb2cpOiBVcGRhdGVkIGZvciBpbnRlcmZhY2UgY2hhbmdlcy4K
KworICAgICAgICAqIGJtYWxsb2MvSGVhcC5jcHA6CisgICAgICAgIChibWFsbG9jOjpIZWFwOjpI
ZWFwKToKKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OmluaXRpYWxpemVMaW5lTWV0YWRhdGEpOiBQ
cmUtY29tcHV0ZSBwcmVjaXNlIG1ldGFkYXRhCisgICAgICAgIGRldGFpbGluZyB3aGVyZSBhbGwg
b2JqZWN0cyB3aWxsIGxpZSBpbiBtZW1vcnkuIEFmdGVyIHdlIG1lcmdlIHR3byBsaW5lcywKKyAg
ICAgICAgd2UgbWlnaHQgYWxsb2NhdGUgYW4gb2JqZWN0IHRoYXQgc3BhbnMgZnJvbSBvbmUgbGlu
ZSB0byB0aGUgbmV4dC4gVGhpcworICAgICAgICBtZXRhZGF0YSBkZXRhaWxzIHdoaWNoIGJpdHMg
b2YgbWVtb3J5IG92ZXJsYXAgaW4gdGhhdCB3YXksIGFuZCBob3cgdGhleQorICAgICAgICBvdmVy
bGFwLgorCisgICAgICAgIChibWFsbG9jOjpIZWFwOjpyZWZpbGxTbWFsbEJ1bXBSYW5nZUNhY2hl
KToKKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OnJlZmlsbE1lZGl1bUJ1bXBSYW5nZUNhY2hlKTog
U2NhbiBhIHdob2xlIHBhZ2UgYXQgYSB0aW1lLAorICAgICAgICBhbmQgbWVyZ2UgYWRqYWNlbnQg
ZnJlZSBsaW5lcyBpbnRvIEJ1bXBSYW5nZXMuCisKKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OmFs
bG9jYXRlU21hbGxQYWdlKToKKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OmFsbG9jYXRlTWVkaXVt
UGFnZSk6CisgICAgICAgIChibWFsbG9jOjpIZWFwOjpkZWFsbG9jYXRlU21hbGxMaW5lKToKKyAg
ICAgICAgKGJtYWxsb2M6OkhlYXA6OmRlYWxsb2NhdGVNZWRpdW1MaW5lKTogVHJhY2sgcGFnZXMg
cmF0aGVyIHRoYW4gbGluZXMsCisgICAgICAgIHNpbmNlIHdlIHNjYW4gZm9yIGZyZWUgbWVtb3J5
IGEgcGFnZSBhdCBhIHRpbWUuCisKKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OmFsbG9jYXRlU21h
bGxMaW5lU2xvd0Nhc2UpOiBEZWxldGVkLgorICAgICAgICAoYm1hbGxvYzo6SGVhcDo6YWxsb2Nh
dGVNZWRpdW1MaW5lU2xvd0Nhc2UpOiBEZWxldGVkLiBGb2xlZCBpbnRvIHRoZQorICAgICAgICBm
YXN0IHBhdGguCisKKyAgICAgICAgKiBibWFsbG9jL0hlYXAuaDoKKyAgICAgICAgKGJtYWxsb2M6
OkhlYXA6OmRlcmVmU21hbGxMaW5lKToKKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OmRlcmVmTWVk
aXVtTGluZSk6CisgICAgICAgIChibWFsbG9jOjpIZWFwOjpkZWFsbG9jYXRlU21hbGxMaW5lKTog
RGVsZXRlZC4KKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OmFsbG9jYXRlU21hbGxMaW5lKTogRGVs
ZXRlZC4KKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OmRlYWxsb2NhdGVNZWRpdW1MaW5lKTogRGVs
ZXRlZC4KKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OmFsbG9jYXRlTWVkaXVtTGluZSk6IERlbGV0
ZWQuIFVwZGF0ZWQgZm9yIGludGVyZmFjZSBjaGFuZ2VzLgorCisgICAgICAgICogYm1hbGxvYy9M
aW5lLmg6CisgICAgICAgIChibWFsbG9jOjpMaW5lPFRyYWl0cz46OnJlZik6CisgICAgICAgIChi
bWFsbG9jOjpMaW5lPFRyYWl0cz46OmRlcmVmKToKKyAgICAgICAgKGJtYWxsb2M6OkxpbmU8VHJh
aXRzPjo6Y29uY3VycmVudFJlZik6IERlbGV0ZWQuIFdlIGRvbid0IHBhc3MgYSBkZXJlZkNvdW50
CisgICAgICAgIGFueW1vcmUsIHNpbmNlIHdlIG9ubHkgZXZlciBkZXJlZiBieSAxIG5vdy4KKwor
ICAgICAgICAqIGJtYWxsb2MvTWVkaXVtQWxsb2NhdG9yLmg6CisgICAgICAgIChibWFsbG9jOjpN
ZWRpdW1BbGxvY2F0b3I6OmlzTnVsbCk6IERlbGV0ZWQuCisgICAgICAgIChibWFsbG9jOjpNZWRp
dW1BbGxvY2F0b3I6Ok1lZGl1bUFsbG9jYXRvcik6IERlbGV0ZWQuCisgICAgICAgIChibWFsbG9j
OjpNZWRpdW1BbGxvY2F0b3I6OmxpbmUpOiBEZWxldGVkLgorICAgICAgICAoYm1hbGxvYzo6TWVk
aXVtQWxsb2NhdG9yOjphbGxvY2F0ZSk6IERlbGV0ZWQuCisgICAgICAgIChibWFsbG9jOjpNZWRp
dW1BbGxvY2F0b3I6OmRlcmVmQ291bnQpOiBEZWxldGVkLgorICAgICAgICAoYm1hbGxvYzo6TWVk
aXVtQWxsb2NhdG9yOjpyZWZpbGwpOiBEZWxldGVkLgorICAgICAgICAoYm1hbGxvYzo6TWVkaXVt
QWxsb2NhdG9yOjpjbGVhcik6IERlbGV0ZWQuIERlbGV0ZWQgc29tZSBjb2RlIHRoYXQncworICAg
ICAgICBiZWVuIGRlYWQgZm9yIGEgd2hpbGUsIHNpbmNlIGl0IGRvZXNuJ3QgYnVpbGQgYW55bW9y
ZSB3aXRoIHRoaXMgcGF0Y2guCisKKyAgICAgICAgKiBibWFsbG9jL1BhZ2UuaDoKKyAgICAgICAg
KGJtYWxsb2M6OlBhZ2U6OnNpemVDbGFzcyk6CisgICAgICAgIChibWFsbG9jOjpQYWdlOjpzZXRT
aXplQ2xhc3MpOgorICAgICAgICAoYm1hbGxvYzo6UGFnZTo6c21hbGxTaXplQ2xhc3MpOiBEZWxl
dGVkLgorICAgICAgICAoYm1hbGxvYzo6UGFnZTo6c2V0U21hbGxTaXplQ2xhc3MpOiBEZWxldGVk
LiBSZW5hbWVkIHNldFNtYWxsU2l6ZUNsYXNzCisgICAgICAgIHRvIHNpemVDbGFzcywgc2luY2Ug
d2UgdXNlIGl0IGZvciBtZWRpdW0gc2l6ZXMgdG9vLgorCisgICAgICAgICogYm1hbGxvYy9TaXpl
cy5oOgorICAgICAgICAoYm1hbGxvYzo6U2l6ZXM6OnNpemVDbGFzcyk6CisgICAgICAgIChibWFs
bG9jOjpTaXplczo6b2JqZWN0U2l6ZSk6IFNocmFuayBsaW5lIHNpemVzIHRvIHNhdmUgbWVtb3J5
LgorCisgICAgICAgIChibWFsbG9jOjpTaXplczo6c21hbGxTaXplQ2xhc3NGb3IpOiBEZWxldGVk
LgorICAgICAgICAoYm1hbGxvYzo6U2l6ZXM6Om1lZGl1bVNpemVDbGFzc0Zvcik6IERlbGV0ZWQu
CisKKyAgICAgICAgKiBibWFsbG9jL2JtYWxsb2MuaDoKKyAgICAgICAgKGJtYWxsb2M6OmFwaTo6
cmVhbGxvYyk6IE5vdyB0aGF0IHdlIGhhdmUgcHJlY2lzZSBvYmplY3RzIHNpemVzLCByZWFsbG9j
CisgICAgICAgIGNhbiBiZSBhIGJpdCBtb3JlIHByZWNpc2UuIEl0IGFsc28gaGFzIHRvIGJlLCBz
aW5jZSB3ZSBjYW4ndCBndWFyYW50ZWUKKyAgICAgICAgdGhhdCBhbiBvYmplY3QgZW5kcyBhdCB0
aGUgZW5kIG9mIGEgbGluZSBhbnltb3JlLgorCiAyMDE0LTA5LTE5ICBEYW5pZWwgQmF0ZXMgIDxk
YWJhdGVzQGFwcGxlLmNvbT4KIAogICAgICAgICBBbHdheXMgYXNzdW1lIGludGVybmFsIFNESyB3
aGVuIGJ1aWxkaW5nIGNvbmZpZ3VyYXRpb24gUHJvZHVjdGlvbgpJbmRleDogU291cmNlL2JtYWxs
b2MvYm1hbGxvYy54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9ibWFsbG9jL2JtYWxsb2MueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTcz
NjczKQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CSh3b3JraW5nIGNvcHkpCkBAIC0xMSw2ICsxMSw4IEBACiAJCTE0MDAyNzRBMThGODlDMjMwMDEx
NUM5NyAvKiBWTUhlYXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDE0NEY3QkZDMThCRkM1MTcwMDM1MzdGMyAvKiBWTUhlYXAuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxNDAwMjc0QjE4Rjg5QzNEMDAx
MTVDOTcgLyogQm91bmRhcnlUYWdJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAxNDEwNUU3QjE4REJEN0FGMDAzQTEwNkUgLyogQm91bmRhcnlU
YWdJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMTQwMDI3NEMxOEY4OUMzRDAwMTE1Qzk3IC8qIFNlZ3JlZ2F0ZWRGcmVlTGlzdC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ2QkVFMUUxOEM4
NDFDNTAwMDJENUEyIC8qIFNlZ3JlZ2F0ZWRGcmVlTGlzdC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTE0MEZBMDAzMTlDRTQyOUMwMEZGRDNDOCAv
KiBCdW1wUmFuZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDE0MEZBMDAyMTlDRTQyOUMwMEZGRDNDOCAvKiBCdW1wUmFuZ2UuaCAqLzsgfTsKKwkJMTQw
RkEwMDUxOUNFNEI2ODAwRkZEM0M4IC8qIExpbmVNZXRhZGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQwRkEwMDQxOUNFNEI2ODAwRkZEM0M4IC8q
IExpbmVNZXRhZGF0YS5oICovOyB9OwogCQkxNDNDQjgxQzE5MDIyQkM5MDBCMTZBNDUgLyogU3Rh
dGljTXV0ZXguY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMTQzQ0I4MUExOTAyMkJDOTAwQjE2QTQ1IC8qIFN0YXRpY011dGV4LmNwcCAqLzsgfTsKIAkJ
MTQzQ0I4MUQxOTAyMkJDOTAwQjE2QTQ1IC8qIFN0YXRpY011dGV4LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDNDQjgxQjE5MDIyQkM5MDBCMTZBNDUg
LyogU3RhdGljTXV0ZXguaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkxNDQ4QzMwMDE4RjM3NTQ2MDA1MDI4MzkgLyogbWJtYWxsb2MuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ0OEMyRkYxOEYzNzU0
MzAwNTAyODM5IC8qIG1ibWFsbG9jLmNwcCAqLzsgfTsKQEAgLTI2LDcgKzI4LDYgQEAKIAkJMTRE
RDc4OTgxOEY0OEQ0QTAwOTUwNzAyIC8qIEFsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ1RjY4NTYxNzlEQzhDQTAwRDY1NTk4IC8qIEFs
bG9jYXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTE0REQ3ODk5MThGNDhENEEwMDk1MDcwMiAvKiBDYWNoZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ0NDY5RTUxN0E0NkJGRTAwRjlFQTFEIC8q
IENhY2hlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMTRERDc4OUExOEY0OEQ0QTAwOTUwNzAyIC8qIERlYWxsb2NhdG9yLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDVGNjg1QTE3OURDOTAyMDBENjU1
OTggLyogRGVhbGxvY2F0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwotCQkxNERENzg5QjE4RjQ4RDRBMDA5NTA3MDIgLyogTWVkaXVtQWxsb2NhdG9y
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDEzRTQ3
MDE4QTA2NjE3MDA1NDZENjggLyogTWVkaXVtQWxsb2NhdG9yLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTRERDc4OUMxOEY0OEQ0QTAwOTUwNzAy
IC8qIEJ1bXBBbGxvY2F0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDE0MTNFNDYyMTg5REUxQ0QwMDU0NkQ2OCAvKiBCdW1wQWxsb2NhdG9yLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTRERDc4QjQx
OEY0OEQ2QjAwOTUwNzAyIC8qIENodW5rLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAxNDdBQUE5NDE4Q0U1Q0E2MDAyMjAxRTQgLyogQ2h1bmsuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxNERENzhCNTE4
RjQ4RDZCMDA5NTA3MDIgLyogTGluZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMTREQTMyMDcxODg1RjlFNjAwNzI2OUUwIC8qIExpbmUuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNzIsMTIgKzczLDEz
IEBACiAvKiBFbmQgUEJYQ29udGFpbmVySXRlbVByb3h5IHNlY3Rpb24gKi8KIAogLyogQmVnaW4g
UEJYRmlsZVJlZmVyZW5jZSBzZWN0aW9uICovCisJCTE0MEZBMDAyMTlDRTQyOUMwMEZGRDNDOCAv
KiBCdW1wUmFuZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQnVtcFJhbmdl
Lmg7IHBhdGggPSBibWFsbG9jL0J1bXBSYW5nZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkxNDBGQTAwNDE5Q0U0QjY4MDBGRkQzQzggLyogTGluZU1ldGFkYXRhLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IExpbmVNZXRhZGF0YS5oOyBwYXRoID0gYm1hbGxvYy9M
aW5lTWV0YWRhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQxMDVFN0IxOERC
RDdBRjAwM0ExMDZFIC8qIEJvdW5kYXJ5VGFnSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBCb3VuZGFyeVRhZ0lubGluZXMuaDsgcGF0aCA9IGJtYWxsb2MvQm91bmRh
cnlUYWdJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0MTA1RTgzMThF
MTQzNzQwMDNBMTA2RSAvKiBPYmplY3RUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgbmFtZSA9IE9iamVjdFR5cGUuY3BwOyBwYXRoID0gYm1hbGxvYy9PYmplY3RUeXBlLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQxM0U0NjAxODlEQ0UxRTAwNTQ2RDY4
IC8qIElubGluZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBJbmxpbmUuaDsg
cGF0aCA9IGJtYWxsb2MvSW5saW5lLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0
MTNFNDYyMTg5REUxQ0QwMDU0NkQ2OCAvKiBCdW1wQWxsb2NhdG9yLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbGluZUVuZGluZyA9IDA7IG5hbWUgPSBCdW1wQWxsb2NhdG9yLmg7IHBhdGgg
PSBibWFsbG9jL0J1bXBBbGxvY2F0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MTQxM0U0NjgxODlFRURFNDAwNTQ2RDY4IC8qIEJBc3NlcnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gQkFzc2VydC5oOyBwYXRoID0gYm1hbGxvYy9CQXNzZXJ0Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTE0MTNFNDcwMThBMDY2MTcwMDU0NkQ2OCAvKiBNZWRp
dW1BbGxvY2F0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTWVkaXVtQWxs
b2NhdG9yLmg7IHBhdGggPSBibWFsbG9jL01lZGl1bUFsbG9jYXRvci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkxNDE3RjY0NTE4QjU0QTcwMDA3NkZBM0YgLyogQmVnaW5UYWcuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQmVnaW5UYWcuaDsgcGF0aCA9IGJtYWxs
b2MvQmVnaW5UYWcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQxN0Y2NDYxOEI1
NEE3MDAwNzZGQTNGIC8qIEVuZFRhZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBFbmRUYWcuaDsgcGF0aCA9IGJtYWxsb2MvRW5kVGFnLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTE0MTdGNjRGMThCNzI4MEMwMDc2RkEzRiAvKiBTeXNjYWxsLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFN5c2NhbGwuaDsgcGF0aCA9IGJtYWxsb2MvU3lzY2Fs
bC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjM1LDcgKzIzNyw2IEBACiAJCQkJ
MTQ0NDY5RTUxN0E0NkJGRTAwRjlFQTFEIC8qIENhY2hlLmggKi8sCiAJCQkJMTQ1RjY4NTkxNzlE
QzkwMjAwRDY1NTk4IC8qIERlYWxsb2NhdG9yLmNwcCAqLywKIAkJCQkxNDVGNjg1QTE3OURDOTAy
MDBENjU1OTggLyogRGVhbGxvY2F0b3IuaCAqLywKLQkJCQkxNDEzRTQ3MDE4QTA2NjE3MDA1NDZE
NjggLyogTWVkaXVtQWxsb2NhdG9yLmggKi8sCiAJCQkJMTQxM0U0NjIxODlERTFDRDAwNTQ2RDY4
IC8qIEJ1bXBBbGxvY2F0b3IuaCAqLywKIAkJCSk7CiAJCQluYW1lID0gY2FjaGU7CkBAIC0yNDQs
OCArMjQ1LDEwIEBACiAJCTE0RDlEQjRFMTdGMjg2NkUwMEVBQUI3OSAvKiBoZWFwICovID0gewog
CQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQkxNDBGQTAwMjE5Q0U0MjlD
MDBGRkQzQzggLyogQnVtcFJhbmdlLmggKi8sCiAJCQkJMTREQTMyMEUxODg3NUQ5RjAwNzI2OUUw
IC8qIEhlYXAuY3BwICovLAogCQkJCTE0REEzMjBDMTg4NzVCMDkwMDcyNjlFMCAvKiBIZWFwLmgg
Ki8sCisJCQkJMTQwRkEwMDQxOUNFNEI2ODAwRkZEM0M4IC8qIExpbmVNZXRhZGF0YS5oICovLAog
CQkJCTE0MTA1RTgzMThFMTQzNzQwMDNBMTA2RSAvKiBPYmplY3RUeXBlLmNwcCAqLywKIAkJCQkx
NDg1NjU2MDE4QTQzREJBMDBFRDY5NDIgLyogT2JqZWN0VHlwZS5oICovLAogCQkJCTE0NUY2ODc0
MTc5REY4NDEwMEQ2NTU5OCAvKiBTaXplcy5oICovLApAQCAtMjk2LDYgKzI5OSw3IEBACiAJCQkJ
MTRDOTE5QzkxOEZDQzU5RjAwMjhEQjQzIC8qIEJQbGF0Zm9ybS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMTRERDc4OEMxOEY0OENBRTAwOTUwNzAyIC8qIExhcmdlQ2h1bmsuaCBpbiBIZWFkZXJzICov
LAogCQkJCTE0REQ3ODkyMThGNDhDRkMwMDk1MDcwMiAvKiBFbmRUYWcuaCBpbiBIZWFkZXJzICov
LAorCQkJCTE0MEZBMDA1MTlDRTRCNjgwMEZGRDNDOCAvKiBMaW5lTWV0YWRhdGEuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTE0REQ3OENDMThGNDhENzUwMDk1MDcwMiAvKiBQZXJUaHJlYWQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTE0REQ3OEI0MThGNDhENkIwMDk1MDcwMiAvKiBDaHVuay5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMTRERDc4Q0ExOEY0OEQ3NTAwOTUwNzAyIC8qIE11dGV4LmggaW4gSGVh
ZGVycyAqLywKQEAgLTMwOSw3ICszMTMsNiBAQAogCQkJCTE0REQ3OENEMThGNDhENzUwMDk1MDcw
MiAvKiBSYW5nZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRERDc4OUMxOEY0OEQ0QTAwOTUwNzAy
IC8qIEJ1bXBBbGxvY2F0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0REQ3ODk5MThGNDhENEEw
MDk1MDcwMiAvKiBDYWNoZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMTRERDc4OUIxOEY0OEQ0QTAw
OTUwNzAyIC8qIE1lZGl1bUFsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRERDc4QkUx
OEY0OEQ2QjAwOTUwNzAyIC8qIFNtYWxsVHJhaXRzLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNERE
Nzg5MDE4RjQ4Q0VCMDA5NTA3MDIgLyogU2l6ZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0REQ3
OEM3MThGNDhENzUwMDk1MDcwMiAvKiBCQXNzZXJ0LmggaW4gSGVhZGVycyAqLywKQEAgLTMyMiw2
ICszMjUsNyBAQAogCQkJCTE0MDAyNzRBMThGODlDMjMwMDExNUM5NyAvKiBWTUhlYXAuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTE0MDAyNzQ5MThGODlDMTMwMDExNUM5NyAvKiBIZWFwLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkxNERENzhCODE4RjQ4RDZCMDA5NTA3MDIgLyogTWVkaXVtUGFnZS5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMTQwRkEwMDMxOUNFNDI5QzAwRkZEM0M4IC8qIEJ1bXBSYW5nZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMTRERDc4QzUxOEY0OEQ3NTAwOTUwNzAyIC8qIEFsZ29yaXRo
bS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRERDc4QkQxOEY0OEQ2QjAwOTUwNzAyIC8qIFNtYWxs
UGFnZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQwMDI3NEIxOEY4OUMzRDAwMTE1Qzk3IC8qIEJv
dW5kYXJ5VGFnSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvYm1hbGxvYy9i
bWFsbG9jL0FsZ29yaXRobS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2Mv
QWxnb3JpdGhtLmgJKHJldmlzaW9uIDE3MzY3MykKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2Mv
QWxnb3JpdGhtLmgJKHdvcmtpbmcgY29weSkKQEAgLTc0LDYgKzc0LDE0IEBAIHRlbXBsYXRlPHNp
emVfdCBkaXZpc29yLCB0eXBlbmFtZSBUPiBpbmwKICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2Fz
dDxUPihtYXNrKHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pih4KSwgfihkaXZpc29yIC0gMXVs
KSkpOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIGRpdmlkZVJvdW5kaW5nVXAoVCBu
dW1lcmF0b3IsIFQgZGVub21pbmF0b3IsIFQmIHF1b3RpZW50LCBUJiByZW1haW5kZXIpCit7Cisg
ICAgcXVvdGllbnQgPSBudW1lcmF0b3IgLyBkZW5vbWluYXRvcjsKKyAgICByZW1haW5kZXIgPSBu
dW1lcmF0b3IgJSBkZW5vbWluYXRvcjsKKyAgICBpZiAocmVtYWluZGVyKQorICAgICAgICBxdW90
aWVudCArPSAxOworfQorCiAvLyBWZXJzaW9uIG9mIHNpemVvZiB0aGF0IHJldHVybnMgMCBmb3Ig
ZW1wdHkgY2xhc3Nlcy4KIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIGNvbnN0ZXhwciBz
aXplX3Qgc2l6ZU9mKCkKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQWxsb2NhdG9yLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0FsbG9jYXRvci5jcHAJKHJl
dmlzaW9uIDE3MzY3NSkKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQWxsb2NhdG9yLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzgsMTEgKzM4LDExIEBAIG5hbWVzcGFjZSBibWFsbG9jIHsKIEFs
bG9jYXRvcjo6QWxsb2NhdG9yKERlYWxsb2NhdG9yJiBkZWFsbG9jYXRvcikKICAgICA6IG1fZGVh
bGxvY2F0b3IoZGVhbGxvY2F0b3IpCiB7Ci0gICAgZm9yICh1bnNpZ25lZCBzaG9ydCBpID0gYWxp
Z25tZW50OyBpIDw9IHNtYWxsTWF4OyBpICs9IGFsaWdubWVudCkKLSAgICAgICAgbV9zbWFsbEFs
bG9jYXRvcnNbc21hbGxTaXplQ2xhc3NGb3IoaSldLmluaXQ8U21hbGxMaW5lPihpKTsKKyAgICBm
b3IgKHVuc2lnbmVkIHNob3J0IHNpemUgPSBhbGlnbm1lbnQ7IHNpemUgPD0gc21hbGxNYXg7IHNp
emUgKz0gYWxpZ25tZW50KQorICAgICAgICBtX2J1bXBBbGxvY2F0b3JzW3NpemVDbGFzcyhzaXpl
KV0uaW5pdChzaXplKTsKIAotICAgIGZvciAodW5zaWduZWQgc2hvcnQgaSA9IHNtYWxsTWF4ICsg
YWxpZ25tZW50OyBpIDw9IG1lZGl1bU1heDsgaSArPSBhbGlnbm1lbnQpCi0gICAgICAgIG1fbWVk
aXVtQWxsb2NhdG9yc1ttZWRpdW1TaXplQ2xhc3NGb3IoaSldLmluaXQ8TWVkaXVtTGluZT4oaSk7
CisgICAgZm9yICh1bnNpZ25lZCBzaG9ydCBzaXplID0gc21hbGxNYXggKyBhbGlnbm1lbnQ7IHNp
emUgPD0gbWVkaXVtTWF4OyBzaXplICs9IGFsaWdubWVudCkKKyAgICAgICAgbV9idW1wQWxsb2Nh
dG9yc1tzaXplQ2xhc3Moc2l6ZSldLmluaXQoc2l6ZSk7CiB9CiAKIEFsbG9jYXRvcjo6fkFsbG9j
YXRvcigpCkBAIC01Miw1NCArNTIsNTMgQEAgQWxsb2NhdG9yOjp+QWxsb2NhdG9yKCkKIAogdm9p
ZCBBbGxvY2F0b3I6OnNjYXZlbmdlKCkKIHsKLSAgICBmb3IgKGF1dG8mIGFsbG9jYXRvciA6IG1f
c21hbGxBbGxvY2F0b3JzKSB7Ci0gICAgICAgIHdoaWxlIChhbGxvY2F0b3IuY2FuQWxsb2NhdGUo
KSkKLSAgICAgICAgICAgIG1fZGVhbGxvY2F0b3IuZGVhbGxvY2F0ZShhbGxvY2F0b3IuYWxsb2Nh
dGUoKSk7CisgICAgZm9yICh1bnNpZ25lZCBzaG9ydCBpID0gYWxpZ25tZW50OyBpIDw9IHNtYWxs
TWF4OyBpICs9IGFsaWdubWVudCkgeworICAgICAgICBCdW1wQWxsb2NhdG9yJiBhbGxvY2F0b3Ig
PSBtX2J1bXBBbGxvY2F0b3JzW3NpemVDbGFzcyhpKV07CisgICAgICAgIHdoaWxlIChhbGxvY2F0
b3IuY2FuQWxsb2NhdGUoKSkgeworICAgICAgICAgICAgd2hpbGUgKGFsbG9jYXRvci5jYW5BbGxv
Y2F0ZSgpKQorICAgICAgICAgICAgICAgIG1fZGVhbGxvY2F0b3IuZGVhbGxvY2F0ZShhbGxvY2F0
b3IuYWxsb2NhdGUoKSk7CisKKyAgICAgICAgICAgIFNtYWxsQnVtcFJhbmdlQ2FjaGUmIGJ1bXBS
YW5nZUNhY2hlID0gbV9zbWFsbEJ1bXBSYW5nZUNhY2hlc1tzaXplQ2xhc3MoaSldOworICAgICAg
ICAgICAgaWYgKGJ1bXBSYW5nZUNhY2hlLnNpemUoKSkKKyAgICAgICAgICAgICAgICBhbGxvY2F0
b3IucmVmaWxsKGJ1bXBSYW5nZUNhY2hlLnBvcCgpKTsKKyAgICAgICAgfQogICAgICAgICBhbGxv
Y2F0b3IuY2xlYXIoKTsKICAgICB9CiAKLSAgICBmb3IgKGF1dG8mIGFsbG9jYXRvciA6IG1fbWVk
aXVtQWxsb2NhdG9ycykgewotICAgICAgICB3aGlsZSAoYWxsb2NhdG9yLmNhbkFsbG9jYXRlKCkp
Ci0gICAgICAgICAgICBtX2RlYWxsb2NhdG9yLmRlYWxsb2NhdGUoYWxsb2NhdG9yLmFsbG9jYXRl
KCkpOworICAgIGZvciAodW5zaWduZWQgc2hvcnQgaSA9IHNtYWxsTWF4ICsgYWxpZ25tZW50OyBp
IDw9IG1lZGl1bU1heDsgaSArPSBhbGlnbm1lbnQpIHsKKyAgICAgICAgQnVtcEFsbG9jYXRvciYg
YWxsb2NhdG9yID0gbV9idW1wQWxsb2NhdG9yc1tzaXplQ2xhc3MoaSldOworICAgICAgICB3aGls
ZSAoYWxsb2NhdG9yLmNhbkFsbG9jYXRlKCkpIHsKKyAgICAgICAgICAgIHdoaWxlIChhbGxvY2F0
b3IuY2FuQWxsb2NhdGUoKSkKKyAgICAgICAgICAgICAgICBtX2RlYWxsb2NhdG9yLmRlYWxsb2Nh
dGUoYWxsb2NhdG9yLmFsbG9jYXRlKCkpOworCisgICAgICAgICAgICBNZWRpdW1CdW1wUmFuZ2VD
YWNoZSYgYnVtcFJhbmdlQ2FjaGUgPSBtX21lZGl1bUJ1bXBSYW5nZUNhY2hlc1tzaXplQ2xhc3Mo
aSldOworICAgICAgICAgICAgaWYgKGJ1bXBSYW5nZUNhY2hlLnNpemUoKSkKKyAgICAgICAgICAg
ICAgICBhbGxvY2F0b3IucmVmaWxsKGJ1bXBSYW5nZUNhY2hlLnBvcCgpKTsKKyAgICAgICAgfQog
ICAgICAgICBhbGxvY2F0b3IuY2xlYXIoKTsKICAgICB9Ci0KLSAgICBzdGQ6OmxvY2tfZ3VhcmQ8
U3RhdGljTXV0ZXg+IGxvY2soUGVyUHJvY2VzczxIZWFwPjo6bXV0ZXgoKSk7Ci0gICAgSGVhcCog
aGVhcCA9IFBlclByb2Nlc3M8SGVhcD46OmdldEZhc3RDYXNlKCk7Ci0gICAgCi0gICAgZm9yIChh
dXRvJiBzbWFsbExpbmVDYWNoZSA6IG1fc21hbGxMaW5lQ2FjaGVzKSB7Ci0gICAgICAgIHdoaWxl
IChzbWFsbExpbmVDYWNoZS5zaXplKCkpCi0gICAgICAgICAgICBoZWFwLT5kZWFsbG9jYXRlU21h
bGxMaW5lKGxvY2ssIHNtYWxsTGluZUNhY2hlLnBvcCgpKTsKLSAgICB9Ci0gICAgd2hpbGUgKG1f
bWVkaXVtTGluZUNhY2hlLnNpemUoKSkKLSAgICAgICAgaGVhcC0+ZGVhbGxvY2F0ZU1lZGl1bUxp
bmUobG9jaywgbV9tZWRpdW1MaW5lQ2FjaGUucG9wKCkpOwogfQogCi1TbWFsbExpbmUqIEFsbG9j
YXRvcjo6YWxsb2NhdGVTbWFsbExpbmUoc2l6ZV90IHNtYWxsU2l6ZUNsYXNzKQorQnVtcFJhbmdl
IEFsbG9jYXRvcjo6YWxsb2NhdGVTbWFsbEJ1bXBSYW5nZShzaXplX3Qgc2l6ZUNsYXNzKQogewot
ICAgIFNtYWxsTGluZUNhY2hlJiBzbWFsbExpbmVDYWNoZSA9IG1fc21hbGxMaW5lQ2FjaGVzW3Nt
YWxsU2l6ZUNsYXNzXTsKLSAgICBpZiAoIXNtYWxsTGluZUNhY2hlLnNpemUoKSkgeworICAgIFNt
YWxsQnVtcFJhbmdlQ2FjaGUmIGJ1bXBSYW5nZUNhY2hlID0gbV9zbWFsbEJ1bXBSYW5nZUNhY2hl
c1tzaXplQ2xhc3NdOworICAgIGlmICghYnVtcFJhbmdlQ2FjaGUuc2l6ZSgpKSB7CiAgICAgICAg
IHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4gbG9jayhQZXJQcm9jZXNzPEhlYXA+OjptdXRl
eCgpKTsKLSAgICAgICAgSGVhcCogaGVhcCA9IFBlclByb2Nlc3M8SGVhcD46OmdldEZhc3RDYXNl
KCk7Ci0KLSAgICAgICAgd2hpbGUgKHNtYWxsTGluZUNhY2hlLnNpemUoKSAhPSBzbWFsbExpbmVD
YWNoZS5jYXBhY2l0eSgpKQotICAgICAgICAgICAgc21hbGxMaW5lQ2FjaGUucHVzaChoZWFwLT5h
bGxvY2F0ZVNtYWxsTGluZShsb2NrLCBzbWFsbFNpemVDbGFzcykpOworICAgICAgICBQZXJQcm9j
ZXNzPEhlYXA+OjpnZXRGYXN0Q2FzZSgpLT5yZWZpbGxTbWFsbEJ1bXBSYW5nZUNhY2hlKGxvY2ss
IHNpemVDbGFzcywgYnVtcFJhbmdlQ2FjaGUpOwogICAgIH0KIAotICAgIHJldHVybiBzbWFsbExp
bmVDYWNoZS5wb3AoKTsKKyAgICByZXR1cm4gYnVtcFJhbmdlQ2FjaGUucG9wKCk7CiB9CiAKLU1l
ZGl1bUxpbmUqIEFsbG9jYXRvcjo6YWxsb2NhdGVNZWRpdW1MaW5lKCkKK0J1bXBSYW5nZSBBbGxv
Y2F0b3I6OmFsbG9jYXRlTWVkaXVtQnVtcFJhbmdlKHNpemVfdCBzaXplQ2xhc3MpCiB7Ci0gICAg
aWYgKCFtX21lZGl1bUxpbmVDYWNoZS5zaXplKCkpIHsKKyAgICBNZWRpdW1CdW1wUmFuZ2VDYWNo
ZSYgYnVtcFJhbmdlQ2FjaGUgPSBtX21lZGl1bUJ1bXBSYW5nZUNhY2hlc1tzaXplQ2xhc3NdOwor
ICAgIGlmICghYnVtcFJhbmdlQ2FjaGUuc2l6ZSgpKSB7CiAgICAgICAgIHN0ZDo6bG9ja19ndWFy
ZDxTdGF0aWNNdXRleD4gbG9jayhQZXJQcm9jZXNzPEhlYXA+OjptdXRleCgpKTsKLSAgICAgICAg
SGVhcCogaGVhcCA9IFBlclByb2Nlc3M8SGVhcD46OmdldEZhc3RDYXNlKCk7Ci0KLSAgICAgICAg
d2hpbGUgKG1fbWVkaXVtTGluZUNhY2hlLnNpemUoKSAhPSBtX21lZGl1bUxpbmVDYWNoZS5jYXBh
Y2l0eSgpKQotICAgICAgICAgICAgbV9tZWRpdW1MaW5lQ2FjaGUucHVzaChoZWFwLT5hbGxvY2F0
ZU1lZGl1bUxpbmUobG9jaykpOworICAgICAgICBQZXJQcm9jZXNzPEhlYXA+OjpnZXRGYXN0Q2Fz
ZSgpLT5yZWZpbGxNZWRpdW1CdW1wUmFuZ2VDYWNoZShsb2NrLCBzaXplQ2xhc3MsIGJ1bXBSYW5n
ZUNhY2hlKTsKICAgICB9CiAKLSAgICByZXR1cm4gbV9tZWRpdW1MaW5lQ2FjaGUucG9wKCk7Cisg
ICAgcmV0dXJuIGJ1bXBSYW5nZUNhY2hlLnBvcCgpOwogfQogCiB2b2lkKiBBbGxvY2F0b3I6OmFs
bG9jYXRlTGFyZ2Uoc2l6ZV90IHNpemUpCkBAIC0xMTYsMzAgKzExNSwyNyBAQCB2b2lkKiBBbGxv
Y2F0b3I6OmFsbG9jYXRlWExhcmdlKHNpemVfdCBzCiAgICAgcmV0dXJuIFBlclByb2Nlc3M8SGVh
cD46OmdldEZhc3RDYXNlKCktPmFsbG9jYXRlWExhcmdlKGxvY2ssIHNpemUpOwogfQogCi12b2lk
KiBBbGxvY2F0b3I6OmFsbG9jYXRlTWVkaXVtKHNpemVfdCBzaXplKQotewotICAgIEJ1bXBBbGxv
Y2F0b3ImIGFsbG9jYXRvciA9IG1fbWVkaXVtQWxsb2NhdG9yc1ttZWRpdW1TaXplQ2xhc3NGb3Io
c2l6ZSldOwotCi0gICAgaWYgKCFhbGxvY2F0b3IuY2FuQWxsb2NhdGUoKSkKLSAgICAgICAgYWxs
b2NhdG9yLnJlZmlsbChhbGxvY2F0ZU1lZGl1bUxpbmUoKSk7Ci0gICAgcmV0dXJuIGFsbG9jYXRv
ci5hbGxvY2F0ZSgpOwotfQotCiB2b2lkKiBBbGxvY2F0b3I6OmFsbG9jYXRlU2xvd0Nhc2Uoc2l6
ZV90IHNpemUpCiB7CiBJRl9ERUJVRygKICAgICB2b2lkKiBkdW1teTsKICAgICBCQVNTRVJUKCFh
bGxvY2F0ZUZhc3RDYXNlKHNpemUsIGR1bW15KSk7CiApCi0gICAgaWYgKHNpemUgPD0gc21hbGxN
YXgpIHsKLSAgICAgICAgc2l6ZV90IHNtYWxsU2l6ZUNsYXNzID0gc21hbGxTaXplQ2xhc3NGb3Io
c2l6ZSk7Ci0gICAgICAgIEJ1bXBBbGxvY2F0b3ImIGFsbG9jYXRvciA9IG1fc21hbGxBbGxvY2F0
b3JzW3NtYWxsU2l6ZUNsYXNzXTsKLSAgICAgICAgYWxsb2NhdG9yLnJlZmlsbChhbGxvY2F0ZVNt
YWxsTGluZShzbWFsbFNpemVDbGFzcykpOwotICAgICAgICByZXR1cm4gYWxsb2NhdG9yLmFsbG9j
YXRlKCk7Ci0gICAgfQogCi0gICAgaWYgKHNpemUgPD0gbWVkaXVtTWF4KQotICAgICAgICByZXR1
cm4gYWxsb2NhdGVNZWRpdW0oc2l6ZSk7CisgICAgaWYgKHNpemUgPD0gbWVkaXVtTWF4KSB7Cisg
ICAgICAgIHNpemVfdCBzaXplQ2xhc3MgPSBibWFsbG9jOjpzaXplQ2xhc3Moc2l6ZSk7CisgICAg
ICAgIEJ1bXBBbGxvY2F0b3ImIGFsbG9jYXRvciA9IG1fYnVtcEFsbG9jYXRvcnNbc2l6ZUNsYXNz
XTsKKworICAgICAgICBpZiAoYWxsb2NhdG9yLnNpemUoKSA8PSBzbWFsbE1heCkgeworICAgICAg
ICAgICAgYWxsb2NhdG9yLnJlZmlsbChhbGxvY2F0ZVNtYWxsQnVtcFJhbmdlKHNpemVDbGFzcykp
OworICAgICAgICAgICAgcmV0dXJuIGFsbG9jYXRvci5hbGxvY2F0ZSgpOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKGFsbG9jYXRvci5zaXplKCkgPD0gbWVkaXVtTWF4KSB7CisgICAgICAgICAg
ICBhbGxvY2F0b3IucmVmaWxsKGFsbG9jYXRlTWVkaXVtQnVtcFJhbmdlKHNpemVDbGFzcykpOwor
ICAgICAgICAgICAgcmV0dXJuIGFsbG9jYXRvci5hbGxvY2F0ZSgpOworICAgICAgICB9CisgICAg
fQogICAgIAogICAgIGlmIChzaXplIDw9IGxhcmdlTWF4KQogICAgICAgICByZXR1cm4gYWxsb2Nh
dGVMYXJnZShzaXplKTsKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQWxsb2NhdG9yLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9BbGxvY2F0b3IuaAkocmV2aXNp
b24gMTczNjc1KQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9BbGxvY2F0b3IuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjgsNyArMjgsNyBAQAogCiAjaW5jbHVkZSAiQnVtcEFsbG9jYXRvci5oIgog
I2luY2x1ZGUgIkZpeGVkVmVjdG9yLmgiCi0jaW5jbHVkZSAiTWVkaXVtQWxsb2NhdG9yLmgiCisj
aW5jbHVkZSAiSGVhcC5oIgogI2luY2x1ZGUgIlNpemVzLmgiCiAjaW5jbHVkZSAiU21hbGxMaW5l
LmgiCiAjaW5jbHVkZSA8YXJyYXk+CkBAIC01MSwzMyArNTEsMjkgQEAgcHVibGljOgogICAgIHZv
aWQgc2NhdmVuZ2UoKTsKIAogcHJpdmF0ZToKLSAgICB0eXBlZGVmIEZpeGVkVmVjdG9yPFNtYWxs
TGluZSosIHNtYWxsTGluZUNhY2hlQ2FwYWNpdHk+IFNtYWxsTGluZUNhY2hlOwotICAgIHR5cGVk
ZWYgRml4ZWRWZWN0b3I8TWVkaXVtTGluZSosIG1lZGl1bUxpbmVDYWNoZUNhcGFjaXR5PiBNZWRp
dW1MaW5lQ2FjaGU7Ci0KICAgICB2b2lkKiBhbGxvY2F0ZUZhc3RDYXNlKEJ1bXBBbGxvY2F0b3Im
KTsKIAogICAgIHZvaWQqIGFsbG9jYXRlTWVkaXVtKHNpemVfdCk7CiAgICAgdm9pZCogYWxsb2Nh
dGVMYXJnZShzaXplX3QpOwogICAgIHZvaWQqIGFsbG9jYXRlWExhcmdlKHNpemVfdCk7CiAgICAg
Ci0gICAgU21hbGxMaW5lKiBhbGxvY2F0ZVNtYWxsTGluZShzaXplX3Qgc21hbGxTaXplQ2xhc3Mp
OwotICAgIE1lZGl1bUxpbmUqIGFsbG9jYXRlTWVkaXVtTGluZSgpOworICAgIEJ1bXBSYW5nZSBh
bGxvY2F0ZVNtYWxsQnVtcFJhbmdlKHNpemVfdCBzaXplQ2xhc3MpOworICAgIEJ1bXBSYW5nZSBh
bGxvY2F0ZU1lZGl1bUJ1bXBSYW5nZShzaXplX3Qgc2l6ZUNsYXNzKTsKICAgICAKICAgICBEZWFs
bG9jYXRvciYgbV9kZWFsbG9jYXRvcjsKIAotICAgIHN0ZDo6YXJyYXk8QnVtcEFsbG9jYXRvciwg
c21hbGxNYXggLyBhbGlnbm1lbnQ+IG1fc21hbGxBbGxvY2F0b3JzOwotICAgIHN0ZDo6YXJyYXk8
QnVtcEFsbG9jYXRvciwgbWVkaXVtTWF4IC8gYWxpZ25tZW50PiBtX21lZGl1bUFsbG9jYXRvcnM7
CisgICAgc3RkOjphcnJheTxCdW1wQWxsb2NhdG9yLCBtZWRpdW1NYXggLyBhbGlnbm1lbnQ+IG1f
YnVtcEFsbG9jYXRvcnM7CiAKLSAgICBzdGQ6OmFycmF5PFNtYWxsTGluZUNhY2hlLCBzbWFsbE1h
eCAvIGFsaWdubWVudD4gbV9zbWFsbExpbmVDYWNoZXM7Ci0gICAgTWVkaXVtTGluZUNhY2hlIG1f
bWVkaXVtTGluZUNhY2hlOworICAgIHN0ZDo6YXJyYXk8U21hbGxCdW1wUmFuZ2VDYWNoZSwgc21h
bGxNYXggLyBhbGlnbm1lbnQ+IG1fc21hbGxCdW1wUmFuZ2VDYWNoZXM7CisgICAgc3RkOjphcnJh
eTxNZWRpdW1CdW1wUmFuZ2VDYWNoZSwgbWVkaXVtTWF4IC8gYWxpZ25tZW50PiBtX21lZGl1bUJ1
bXBSYW5nZUNhY2hlczsKIH07CiAKIGlubGluZSBib29sIEFsbG9jYXRvcjo6YWxsb2NhdGVGYXN0
Q2FzZShzaXplX3Qgc2l6ZSwgdm9pZComIG9iamVjdCkKIHsKLSAgICBpZiAoc2l6ZSA+IHNtYWxs
TWF4KQorICAgIGlmIChzaXplID4gbWVkaXVtTWF4KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
LSAgICBCdW1wQWxsb2NhdG9yJiBhbGxvY2F0b3IgPSBtX3NtYWxsQWxsb2NhdG9yc1tzbWFsbFNp
emVDbGFzc0ZvcihzaXplKV07CisgICAgQnVtcEFsbG9jYXRvciYgYWxsb2NhdG9yID0gbV9idW1w
QWxsb2NhdG9yc1tzaXplQ2xhc3Moc2l6ZSldOwogICAgIGlmICghYWxsb2NhdG9yLmNhbkFsbG9j
YXRlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApJbmRleDogU291cmNlL2JtYWxsb2MvYm1h
bGxvYy9CdW1wQWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxv
Yy9CdW1wQWxsb2NhdG9yLmgJKHJldmlzaW9uIDE3MzY3MykKKysrIFNvdXJjZS9ibWFsbG9jL2Jt
YWxsb2MvQnVtcEFsbG9jYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAj
ZGVmaW5lIEJ1bXBBbGxvY2F0b3JfaAogCiAjaW5jbHVkZSAiQkFzc2VydC5oIgorI2luY2x1ZGUg
IkJ1bXBSYW5nZS5oIgogI2luY2x1ZGUgIk9iamVjdFR5cGUuaCIKIAogbmFtZXNwYWNlIGJtYWxs
b2MgewpAQCAtMzYsNDkgKzM3LDM4IEBAIG5hbWVzcGFjZSBibWFsbG9jIHsKIGNsYXNzIEJ1bXBB
bGxvY2F0b3IgewogcHVibGljOgogICAgIEJ1bXBBbGxvY2F0b3IoKTsKLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBMaW5lPiB2b2lkIGluaXQoc2l6ZV90KTsKKyAgICB2b2lkIGluaXQoc2l6ZV90KTsK
KyAgICAKKyAgICBzaXplX3Qgc2l6ZSgpIHsgcmV0dXJuIG1fc2l6ZTsgfQogICAgIAogICAgIGJv
b2wgaXNOdWxsKCkgeyByZXR1cm4gIW1fcHRyOyB9Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgTGlu
ZT4gTGluZSogbGluZSgpOworICAgIHZvaWQgY2xlYXIoKTsKIAogICAgIGJvb2wgY2FuQWxsb2Nh
dGUoKSB7IHJldHVybiAhIW1fcmVtYWluaW5nOyB9CiAgICAgdm9pZCogYWxsb2NhdGUoKTsKIAot
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIExpbmU+IHZvaWQgcmVmaWxsKExpbmUqKTsKLSAgICB2b2lk
IGNsZWFyKCk7CisgICAgdm9pZCByZWZpbGwoY29uc3QgQnVtcFJhbmdlJik7CiAKIHByaXZhdGU6
CiAgICAgdm9pZCB2YWxpZGF0ZSh2b2lkKik7CiAKICAgICBjaGFyKiBtX3B0cjsKICAgICB1bnNp
Z25lZCBzaG9ydCBtX3NpemU7Ci0gICAgdW5zaWduZWQgY2hhciBtX3JlbWFpbmluZzsKLSAgICB1
bnNpZ25lZCBjaGFyIG1fbWF4T2JqZWN0Q291bnQ7CisgICAgdW5zaWduZWQgc2hvcnQgbV9yZW1h
aW5pbmc7CiB9OwogCiBpbmxpbmUgQnVtcEFsbG9jYXRvcjo6QnVtcEFsbG9jYXRvcigpCiAgICAg
OiBtX3B0cigpCiAgICAgLCBtX3NpemUoKQogICAgICwgbV9yZW1haW5pbmcoKQotICAgICwgbV9t
YXhPYmplY3RDb3VudCgpCiB7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIExpbmU+CiBpbmxpbmUg
dm9pZCBCdW1wQWxsb2NhdG9yOjppbml0KHNpemVfdCBzaXplKQogewotICAgIEJBU1NFUlQoc2l6
ZSA+PSBMaW5lOjptaW5pbXVtT2JqZWN0U2l6ZSk7Ci0KICAgICBtX3B0ciA9IG51bGxwdHI7CiAg
ICAgbV9zaXplID0gc2l6ZTsKICAgICBtX3JlbWFpbmluZyA9IDA7Ci0gICAgbV9tYXhPYmplY3RD
b3VudCA9IExpbmU6OmxpbmVTaXplIC8gc2l6ZTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgTGlu
ZT4KLWlubGluZSBMaW5lKiBCdW1wQWxsb2NhdG9yOjpsaW5lKCkKLXsKLSAgICByZXR1cm4gTGlu
ZTo6Z2V0KGNhbkFsbG9jYXRlKCkgPyBtX3B0ciA6IG1fcHRyIC0gMSk7CiB9CiAKIGlubGluZSB2
b2lkIEJ1bXBBbGxvY2F0b3I6OnZhbGlkYXRlKHZvaWQqIHB0cikKQEAgLTEwNCwxMyArOTQsMTEg
QEAgaW5saW5lIHZvaWQqIEJ1bXBBbGxvY2F0b3I6OmFsbG9jYXRlKCkKICAgICByZXR1cm4gcmVz
dWx0OwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBMaW5lPgotaW5saW5lIHZvaWQgQnVtcEFsbG9j
YXRvcjo6cmVmaWxsKExpbmUqIGxpbmUpCitpbmxpbmUgdm9pZCBCdW1wQWxsb2NhdG9yOjpyZWZp
bGwoY29uc3QgQnVtcFJhbmdlJiBidW1wUmFuZ2UpCiB7CiAgICAgQkFTU0VSVCghY2FuQWxsb2Nh
dGUoKSk7Ci0gICAgbGluZS0+Y29uY3VycmVudFJlZihtX21heE9iamVjdENvdW50KTsKLSAgICBt
X3B0ciA9IGxpbmUtPmJlZ2luKCk7Ci0gICAgbV9yZW1haW5pbmcgPSBtX21heE9iamVjdENvdW50
OworICAgIG1fcHRyID0gYnVtcFJhbmdlLmJlZ2luOworICAgIG1fcmVtYWluaW5nID0gYnVtcFJh
bmdlLm9iamVjdENvdW50OwogfQogCiBpbmxpbmUgdm9pZCBCdW1wQWxsb2NhdG9yOjpjbGVhcigp
CkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0J1bXBSYW5nZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQnVtcFJhbmdlLmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvYm1hbGxvYy9ibWFsbG9jL0J1bXBSYW5nZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lm
bmRlZiBCdW1wUmFuZ2VfaAorI2RlZmluZSBCdW1wUmFuZ2VfaAorCisjaW5jbHVkZSAiRml4ZWRW
ZWN0b3IuaCIKKyNpbmNsdWRlICJSYW5nZS5oIgorI2luY2x1ZGUgIlNpemVzLmgiCisKK25hbWVz
cGFjZSBibWFsbG9jIHsKKworc3RydWN0IEJ1bXBSYW5nZSB7CisgICAgY2hhciogYmVnaW47Cisg
ICAgdW5zaWduZWQgc2hvcnQgb2JqZWN0Q291bnQ7Cit9OworCit0eXBlZGVmIEZpeGVkVmVjdG9y
PEJ1bXBSYW5nZSwgc21hbGxSYW5nZUNhY2hlQ2FwYWNpdHk+IFNtYWxsQnVtcFJhbmdlQ2FjaGU7
Cit0eXBlZGVmIEZpeGVkVmVjdG9yPEJ1bXBSYW5nZSwgbWVkaXVtUmFuZ2VDYWNoZUNhcGFjaXR5
PiBNZWRpdW1CdW1wUmFuZ2VDYWNoZTsKKworfSAvLyBuYW1lc3BhY2UgYm1hbGxvYworCisjZW5k
aWYgLy8gQnVtcFJhbmdlX2gKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvRGVhbGxvY2F0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvRGVhbGxvY2F0b3Iu
Y3BwCShyZXZpc2lvbiAxNzM2NzUpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0RlYWxsb2Nh
dG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzIsMTUgKzcyLDExIEBAIHZvaWQgRGVhbGxvY2F0
b3I6OnByb2Nlc3NPYmplY3RMb2coKQogICAgIGZvciAoYXV0byBvYmplY3QgOiBtX29iamVjdExv
ZykgewogICAgICAgICBpZiAoaXNTbWFsbChvYmplY3QpKSB7CiAgICAgICAgICAgICBTbWFsbExp
bmUqIGxpbmUgPSBTbWFsbExpbmU6OmdldChvYmplY3QpOwotICAgICAgICAgICAgaWYgKCFsaW5l
LT5kZXJlZihsb2NrKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGhl
YXAtPmRlYWxsb2NhdGVTbWFsbExpbmUobG9jaywgbGluZSk7CisgICAgICAgICAgICBoZWFwLT5k
ZXJlZlNtYWxsTGluZShsb2NrLCBsaW5lKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IEJBU1NFUlQoaXNTbWFsbE9yTWVkaXVtKG9iamVjdCkpOworICAgICAgICAgICAgQkFTU0VSVChp
c01lZGl1bShvYmplY3QpKTsKICAgICAgICAgICAgIE1lZGl1bUxpbmUqIGxpbmUgPSBNZWRpdW1M
aW5lOjpnZXQob2JqZWN0KTsKLSAgICAgICAgICAgIGlmICghbGluZS0+ZGVyZWYobG9jaykpCi0g
ICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBoZWFwLT5kZWFsbG9jYXRlTWVk
aXVtTGluZShsb2NrLCBsaW5lKTsKKyAgICAgICAgICAgIGhlYXAtPmRlcmVmTWVkaXVtTGluZShs
b2NrLCBsaW5lKTsKICAgICAgICAgfQogICAgIH0KICAgICAKSW5kZXg6IFNvdXJjZS9ibWFsbG9j
L2JtYWxsb2MvSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9I
ZWFwLmNwcAkocmV2aXNpb24gMTczNjczKQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9IZWFw
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAsNiArNTAsNDIgQEAgSGVhcDo6SGVhcChzdGQ6Omxv
Y2tfZ3VhcmQ8U3RhdGljTXV0ZXg+JgogICAgIDogbV9pc0FsbG9jYXRpbmdQYWdlcyhmYWxzZSkK
ICAgICAsIG1fc2NhdmVuZ2VyKCp0aGlzLCAmSGVhcDo6Y29uY3VycmVudFNjYXZlbmdlKQogewor
ICAgIGluaXRpYWxpemVMaW5lTWV0YWRhdGEoKTsKK30KKwordm9pZCBIZWFwOjppbml0aWFsaXpl
TGluZU1ldGFkYXRhKCkKK3sKKyAgICBmb3IgKHVuc2lnbmVkIHNob3J0IHNpemUgPSBhbGlnbm1l
bnQ7IHNpemUgPD0gc21hbGxNYXg7IHNpemUgKz0gYWxpZ25tZW50KSB7CisgICAgICAgIHVuc2ln
bmVkIHNob3J0IHN0YXJ0T2Zmc2V0ID0gMDsKKyAgICAgICAgZm9yIChzaXplX3QgbGluZU51bWJl
ciA9IDA7IGxpbmVOdW1iZXIgPCBTbWFsbFBhZ2U6OmxpbmVDb3VudCAtIDE7ICsrbGluZU51bWJl
cikgeworICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgb2JqZWN0Q291bnQ7CisgICAgICAgICAg
ICB1bnNpZ25lZCBzaG9ydCByZW1haW5kZXI7CisgICAgICAgICAgICBkaXZpZGVSb3VuZGluZ1Vw
KHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PihTbWFsbFBhZ2U6OmxpbmVTaXplIC0gc3RhcnRP
ZmZzZXQpLCBzaXplLCBvYmplY3RDb3VudCwgcmVtYWluZGVyKTsKKyAgICAgICAgICAgIEJBU1NF
UlQob2JqZWN0Q291bnQpOworICAgICAgICAgICAgbV9zbWFsbExpbmVNZXRhZGF0YVtzaXplQ2xh
c3Moc2l6ZSldW2xpbmVOdW1iZXJdID0geyBzdGFydE9mZnNldCwgb2JqZWN0Q291bnQgfTsKKyAg
ICAgICAgICAgIHN0YXJ0T2Zmc2V0ID0gcmVtYWluZGVyID8gc2l6ZSAtIHJlbWFpbmRlciA6IDA7
CisgICAgICAgIH0KKworICAgICAgICAvLyBUaGUgbGFzdCBsaW5lIGluIHRoZSBwYWdlIHJvdW5k
cyBkb3duIGluc3RlYWQgb2YgdXAgYmVjYXVzZSBpdCdzIG5vdCBhbGxvd2VkIHRvIG92ZXJsYXAg
aW50byBpdHMgbmVpZ2hib3IuCisgICAgICAgIHVuc2lnbmVkIHNob3J0IG9iamVjdENvdW50ID0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KChTbWFsbFBhZ2U6OmxpbmVTaXplIC0gc3RhcnRP
ZmZzZXQpIC8gc2l6ZSk7CisgICAgICAgIG1fc21hbGxMaW5lTWV0YWRhdGFbc2l6ZUNsYXNzKHNp
emUpXVtTbWFsbFBhZ2U6OmxpbmVDb3VudCAtIDFdID0geyBzdGFydE9mZnNldCwgb2JqZWN0Q291
bnQgfTsKKyAgICB9CisKKyAgICBmb3IgKHVuc2lnbmVkIHNob3J0IHNpemUgPSBzbWFsbE1heCAr
IGFsaWdubWVudDsgc2l6ZSA8PSBtZWRpdW1NYXg7IHNpemUgKz0gYWxpZ25tZW50KSB7CisgICAg
ICAgIHVuc2lnbmVkIHNob3J0IHN0YXJ0T2Zmc2V0ID0gMDsKKyAgICAgICAgZm9yIChzaXplX3Qg
bGluZU51bWJlciA9IDA7IGxpbmVOdW1iZXIgPCBNZWRpdW1QYWdlOjpsaW5lQ291bnQgLSAxOyAr
K2xpbmVOdW1iZXIpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IG9iamVjdENvdW50Owor
ICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgcmVtYWluZGVyOworICAgICAgICAgICAgZGl2aWRl
Um91bmRpbmdVcChzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oTWVkaXVtUGFnZTo6bGluZVNp
emUgLSBzdGFydE9mZnNldCksIHNpemUsIG9iamVjdENvdW50LCByZW1haW5kZXIpOworICAgICAg
ICAgICAgQkFTU0VSVChvYmplY3RDb3VudCk7CisgICAgICAgICAgICBtX21lZGl1bUxpbmVNZXRh
ZGF0YVtzaXplQ2xhc3Moc2l6ZSldW2xpbmVOdW1iZXJdID0geyBzdGFydE9mZnNldCwgb2JqZWN0
Q291bnQgfTsKKyAgICAgICAgICAgIHN0YXJ0T2Zmc2V0ID0gcmVtYWluZGVyID8gc2l6ZSAtIHJl
bWFpbmRlciA6IDA7CisgICAgICAgIH0KKworICAgICAgICAvLyBUaGUgbGFzdCBsaW5lIGluIHRo
ZSBwYWdlIHJvdW5kcyBkb3duIGluc3RlYWQgb2YgdXAgYmVjYXVzZSBpdCdzIG5vdCBhbGxvd2Vk
IHRvIG92ZXJsYXAgaW50byBpdHMgbmVpZ2hib3IuCisgICAgICAgIHVuc2lnbmVkIHNob3J0IG9i
amVjdENvdW50ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KChNZWRpdW1QYWdlOjpsaW5l
U2l6ZSAtIHN0YXJ0T2Zmc2V0KSAvIHNpemUpOworICAgICAgICBtX21lZGl1bUxpbmVNZXRhZGF0
YVtzaXplQ2xhc3Moc2l6ZSldW01lZGl1bVBhZ2U6OmxpbmVDb3VudCAtIDFdID0geyBzdGFydE9m
ZnNldCwgb2JqZWN0Q291bnQgfTsKKyAgICB9CiB9CiAKIHZvaWQgSGVhcDo6Y29uY3VycmVudFNj
YXZlbmdlKCkKQEAgLTExNiwxMSArMTUyLDg5IEBAIHZvaWQgSGVhcDo6c2NhdmVuZ2VMYXJnZVJh
bmdlcyhzdGQ6OnVuaXEKICAgICB9CiB9CiAKLVNtYWxsTGluZSogSGVhcDo6YWxsb2NhdGVTbWFs
bExpbmVTbG93Q2FzZShzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+JiBsb2NrLCBzaXplX3Qg
c21hbGxTaXplQ2xhc3MpCit2b2lkIEhlYXA6OnJlZmlsbFNtYWxsQnVtcFJhbmdlQ2FjaGUoc3Rk
Ojpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYgbG9jaywgc2l6ZV90IHNpemVDbGFzcywgU21hbGxC
dW1wUmFuZ2VDYWNoZSYgcmFuZ2VDYWNoZSkKK3sKKyAgICBCQVNTRVJUKCFyYW5nZUNhY2hlLnNp
emUoKSk7CisgICAgU21hbGxQYWdlKiBwYWdlID0gYWxsb2NhdGVTbWFsbFBhZ2UobG9jaywgc2l6
ZUNsYXNzKTsKKyAgICBTbWFsbExpbmUqIGxpbmVzID0gcGFnZS0+YmVnaW4oKTsKKworICAgIC8v
IER1ZSB0byBvdmVybGFwIGZyb20gdGhlIHByZXZpb3VzIGxpbmUsIHRoZSBsYXN0IGxpbmUgaW4g
dGhlIHBhZ2UgbWF5IG5vdCBiZSBhYmxlIHRvIGZpdCBhbnkgb2JqZWN0cy4KKyAgICBzaXplX3Qg
ZW5kID0gU21hbGxQYWdlOjpsaW5lQ291bnQ7CisgICAgaWYgKCFtX3NtYWxsTGluZU1ldGFkYXRh
W3NpemVDbGFzc11bU21hbGxQYWdlOjpsaW5lQ291bnQgLSAxXS5vYmplY3RDb3VudCkKKyAgICAg
ICAgLS1lbmQ7CisKKyAgICBmb3IgKHNpemVfdCBsaW5lTnVtYmVyID0gMDsgbGluZU51bWJlciA8
IGVuZDsgKytsaW5lTnVtYmVyKSB7CisgICAgICAgIGlmIChsaW5lc1tsaW5lTnVtYmVyXS5yZWZD
b3VudChsb2NrKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIExpbmVNZXRhZGF0
YSYgbGluZU1ldGFkYXRhID0gbV9zbWFsbExpbmVNZXRhZGF0YVtzaXplQ2xhc3NdW2xpbmVOdW1i
ZXJdOworICAgICAgICBjaGFyKiBiZWdpbiA9IGxpbmVzW2xpbmVOdW1iZXJdLmJlZ2luKCkgKyBs
aW5lTWV0YWRhdGEuc3RhcnRPZmZzZXQ7CisgICAgICAgIHVuc2lnbmVkIHNob3J0IG9iamVjdENv
dW50ID0gbGluZU1ldGFkYXRhLm9iamVjdENvdW50OworICAgICAgICBsaW5lc1tsaW5lTnVtYmVy
XS5yZWYobG9jaywgbGluZU1ldGFkYXRhLm9iamVjdENvdW50KTsKKyAgICAgICAgcGFnZS0+cmVm
KGxvY2spOworCisgICAgICAgIHdoaWxlICgrK2xpbmVOdW1iZXIgPCBlbmQpIHsKKyAgICAgICAg
ICAgIGlmIChsaW5lc1tsaW5lTnVtYmVyXS5yZWZDb3VudChsb2NrKSkKKyAgICAgICAgICAgICAg
ICBicmVhazsKKworICAgICAgICAgICAgTGluZU1ldGFkYXRhJiBsaW5lTWV0YWRhdGEgPSBtX3Nt
YWxsTGluZU1ldGFkYXRhW3NpemVDbGFzc11bbGluZU51bWJlcl07CisgICAgICAgICAgICBvYmpl
Y3RDb3VudCArPSBsaW5lTWV0YWRhdGEub2JqZWN0Q291bnQ7CisgICAgICAgICAgICBsaW5lc1ts
aW5lTnVtYmVyXS5yZWYobG9jaywgbGluZU1ldGFkYXRhLm9iamVjdENvdW50KTsKKyAgICAgICAg
ICAgIHBhZ2UtPnJlZihsb2NrKTsKKyAgICAgICAgfQorCisgICAgICAgIHJhbmdlQ2FjaGUucHVz
aCh7IGJlZ2luLCBvYmplY3RDb3VudCB9KTsKKyAgICB9Cit9CisKK3ZvaWQgSGVhcDo6cmVmaWxs
TWVkaXVtQnVtcFJhbmdlQ2FjaGUoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYgbG9jaywg
c2l6ZV90IHNpemVDbGFzcywgTWVkaXVtQnVtcFJhbmdlQ2FjaGUmIHJhbmdlQ2FjaGUpCit7Cisg
ICAgQkFTU0VSVCghcmFuZ2VDYWNoZS5zaXplKCkpOworICAgIE1lZGl1bVBhZ2UqIHBhZ2UgPSBh
bGxvY2F0ZU1lZGl1bVBhZ2UobG9jaywgc2l6ZUNsYXNzKTsKKyAgICBNZWRpdW1MaW5lKiBsaW5l
cyA9IHBhZ2UtPmJlZ2luKCk7CisKKyAgICAvLyBEdWUgdG8gb3ZlcmxhcCBmcm9tIHRoZSBwcmV2
aW91cyBsaW5lLCB0aGUgbGFzdCBsaW5lIGluIHRoZSBwYWdlIG1heSBub3QgYmUgYWJsZSB0byBm
aXQgYW55IG9iamVjdHMuCisgICAgc2l6ZV90IGVuZCA9IE1lZGl1bVBhZ2U6OmxpbmVDb3VudDsK
KyAgICBpZiAoIW1fbWVkaXVtTGluZU1ldGFkYXRhW3NpemVDbGFzc11bTWVkaXVtUGFnZTo6bGlu
ZUNvdW50IC0gMV0ub2JqZWN0Q291bnQpCisgICAgICAgIC0tZW5kOworCisgICAgZm9yIChzaXpl
X3QgbGluZU51bWJlciA9IDA7IGxpbmVOdW1iZXIgPCBlbmQ7ICsrbGluZU51bWJlcikgeworICAg
ICAgICBpZiAobGluZXNbbGluZU51bWJlcl0ucmVmQ291bnQobG9jaykpCisgICAgICAgICAgICBj
b250aW51ZTsKKworICAgICAgICBMaW5lTWV0YWRhdGEmIGxpbmVNZXRhZGF0YSA9IG1fbWVkaXVt
TGluZU1ldGFkYXRhW3NpemVDbGFzc11bbGluZU51bWJlcl07CisgICAgICAgIGNoYXIqIGJlZ2lu
ID0gbGluZXNbbGluZU51bWJlcl0uYmVnaW4oKSArIGxpbmVNZXRhZGF0YS5zdGFydE9mZnNldDsK
KyAgICAgICAgdW5zaWduZWQgc2hvcnQgb2JqZWN0Q291bnQgPSBsaW5lTWV0YWRhdGEub2JqZWN0
Q291bnQ7CisgICAgICAgIGxpbmVzW2xpbmVOdW1iZXJdLnJlZihsb2NrLCBsaW5lTWV0YWRhdGEu
b2JqZWN0Q291bnQpOworICAgICAgICBwYWdlLT5yZWYobG9jayk7CisgICAgICAgIAorICAgICAg
ICB3aGlsZSAoKytsaW5lTnVtYmVyIDwgZW5kKSB7CisgICAgICAgICAgICBpZiAobGluZXNbbGlu
ZU51bWJlcl0ucmVmQ291bnQobG9jaykpCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAg
ICAgICAgIExpbmVNZXRhZGF0YSYgbGluZU1ldGFkYXRhID0gbV9tZWRpdW1MaW5lTWV0YWRhdGFb
c2l6ZUNsYXNzXVtsaW5lTnVtYmVyXTsKKyAgICAgICAgICAgIG9iamVjdENvdW50ICs9IGxpbmVN
ZXRhZGF0YS5vYmplY3RDb3VudDsKKyAgICAgICAgICAgIGxpbmVzW2xpbmVOdW1iZXJdLnJlZihs
b2NrLCBsaW5lTWV0YWRhdGEub2JqZWN0Q291bnQpOworICAgICAgICAgICAgcGFnZS0+cmVmKGxv
Y2spOworICAgICAgICB9CisKKyAgICAgICAgcmFuZ2VDYWNoZS5wdXNoKHsgYmVnaW4sIG9iamVj
dENvdW50IH0pOworICAgIH0KK30KKworU21hbGxQYWdlKiBIZWFwOjphbGxvY2F0ZVNtYWxsUGFn
ZShzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+JiBsb2NrLCBzaXplX3Qgc2l6ZUNsYXNzKQog
eworICAgIFZlY3RvcjxTbWFsbFBhZ2UqPiYgc21hbGxQYWdlc1dpdGhGcmVlTGluZXMgPSBtX3Nt
YWxsUGFnZXNXaXRoRnJlZUxpbmVzW3NpemVDbGFzc107CisgICAgd2hpbGUgKHNtYWxsUGFnZXNX
aXRoRnJlZUxpbmVzLnNpemUoKSkgeworICAgICAgICBTbWFsbFBhZ2UqIHBhZ2UgPSBzbWFsbFBh
Z2VzV2l0aEZyZWVMaW5lcy5wb3AoKTsKKyAgICAgICAgaWYgKCFwYWdlLT5yZWZDb3VudChsb2Nr
KSB8fCBwYWdlLT5zaXplQ2xhc3MoKSAhPSBzaXplQ2xhc3MpIC8vIFBhZ2Ugd2FzIHByb21vdGVk
IHRvIHRoZSBwYWdlcyBsaXN0LgorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIHJldHVy
biBwYWdlOworICAgIH0KKyAgICAKICAgICBtX2lzQWxsb2NhdGluZ1BhZ2VzID0gdHJ1ZTsKIAot
ICAgIFNtYWxsUGFnZSogcGFnZSA9IFt0aGlzXSgpIHsKKyAgICBTbWFsbFBhZ2UqIHBhZ2UgPSBb
dGhpcywgc2l6ZUNsYXNzXSgpIHsKICAgICAgICAgaWYgKG1fc21hbGxQYWdlcy5zaXplKCkpCiAg
ICAgICAgICAgICByZXR1cm4gbV9zbWFsbFBhZ2VzLnBvcCgpOwogICAgICAgICAKQEAgLTEyOSwy
MiArMjQzLDIzIEBAIFNtYWxsTGluZSogSGVhcDo6YWxsb2NhdGVTbWFsbExpbmVTbG93Q2EKICAg
ICAgICAgcmV0dXJuIHBhZ2U7CiAgICAgfSgpOwogCi0gICAgU21hbGxMaW5lKiBsaW5lID0gcGFn
ZS0+YmVnaW4oKTsKLSAgICBWZWN0b3I8U21hbGxMaW5lKj4mIHNtYWxsTGluZXMgPSBtX3NtYWxs
TGluZXNbc21hbGxTaXplQ2xhc3NdOwotICAgIGZvciAoYXV0byBpdCA9IGxpbmUgKyAxOyBpdCAh
PSBwYWdlLT5lbmQoKTsgKytpdCkKLSAgICAgICAgc21hbGxMaW5lcy5wdXNoKGl0KTsKLQotICAg
IEJBU1NFUlQoIWxpbmUtPnJlZkNvdW50KGxvY2spKTsKLSAgICBwYWdlLT5zZXRTbWFsbFNpemVD
bGFzcyhzbWFsbFNpemVDbGFzcyk7Ci0gICAgcGFnZS0+cmVmKGxvY2spOwotICAgIHJldHVybiBs
aW5lOworICAgIHBhZ2UtPnNldFNpemVDbGFzcyhzaXplQ2xhc3MpOworICAgIHJldHVybiBwYWdl
OwogfQogCi1NZWRpdW1MaW5lKiBIZWFwOjphbGxvY2F0ZU1lZGl1bUxpbmVTbG93Q2FzZShzdGQ6
OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+JiBsb2NrKQorTWVkaXVtUGFnZSogSGVhcDo6YWxsb2Nh
dGVNZWRpdW1QYWdlKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mIGxvY2ssIHNpemVfdCBz
aXplQ2xhc3MpCiB7CisgICAgVmVjdG9yPE1lZGl1bVBhZ2UqPiYgbWVkaXVtUGFnZXNXaXRoRnJl
ZUxpbmVzID0gbV9tZWRpdW1QYWdlc1dpdGhGcmVlTGluZXNbc2l6ZUNsYXNzXTsKKyAgICB3aGls
ZSAobWVkaXVtUGFnZXNXaXRoRnJlZUxpbmVzLnNpemUoKSkgeworICAgICAgICBNZWRpdW1QYWdl
KiBwYWdlID0gbWVkaXVtUGFnZXNXaXRoRnJlZUxpbmVzLnBvcCgpOworICAgICAgICBpZiAoIXBh
Z2UtPnJlZkNvdW50KGxvY2spIHx8IHBhZ2UtPnNpemVDbGFzcygpICE9IHNpemVDbGFzcykgLy8g
UGFnZSB3YXMgcHJvbW90ZWQgdG8gdGhlIHBhZ2VzIGxpc3QuCisgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgcmV0dXJuIHBhZ2U7CisgICAgfQorICAgIAogICAgIG1faXNBbGxvY2F0aW5n
UGFnZXMgPSB0cnVlOwogCi0gICAgTWVkaXVtUGFnZSogcGFnZSA9IFt0aGlzXSgpIHsKKyAgICBN
ZWRpdW1QYWdlKiBwYWdlID0gW3RoaXMsIHNpemVDbGFzc10oKSB7CiAgICAgICAgIGlmIChtX21l
ZGl1bVBhZ2VzLnNpemUoKSkKICAgICAgICAgICAgIHJldHVybiBtX21lZGl1bVBhZ2VzLnBvcCgp
OwogICAgICAgICAKQEAgLTE1MywxMiArMjY4LDUyIEBAIE1lZGl1bUxpbmUqIEhlYXA6OmFsbG9j
YXRlTWVkaXVtTGluZVNsb3cKICAgICAgICAgcmV0dXJuIHBhZ2U7CiAgICAgfSgpOwogCi0gICAg
TWVkaXVtTGluZSogbGluZSA9IHBhZ2UtPmJlZ2luKCk7Ci0gICAgZm9yIChhdXRvIGl0ID0gbGlu
ZSArIDE7IGl0ICE9IHBhZ2UtPmVuZCgpOyArK2l0KQotICAgICAgICBtX21lZGl1bUxpbmVzLnB1
c2goaXQpOworICAgIHBhZ2UtPnNldFNpemVDbGFzcyhzaXplQ2xhc3MpOworICAgIHJldHVybiBw
YWdlOworfQogCi0gICAgcGFnZS0+cmVmKGxvY2spOwotICAgIHJldHVybiBsaW5lOwordm9pZCBI
ZWFwOjpkZWFsbG9jYXRlU21hbGxMaW5lKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mIGxv
Y2ssIFNtYWxsTGluZSogbGluZSkKK3sKKyAgICBCQVNTRVJUKCFsaW5lLT5yZWZDb3VudChsb2Nr
KSk7CisgICAgU21hbGxQYWdlKiBwYWdlID0gU21hbGxQYWdlOjpnZXQobGluZSk7CisgICAgc2l6
ZV90IHJlZkNvdW50ID0gcGFnZS0+cmVmQ291bnQobG9jayk7CisgICAgcGFnZS0+ZGVyZWYobG9j
ayk7CisKKyAgICBzd2l0Y2ggKHJlZkNvdW50KSB7CisgICAgY2FzZSBTbWFsbFBhZ2U6OmxpbmVD
b3VudDogeworICAgICAgICAvLyBGaXJzdCBmcmVlIGxpbmUgaW4gdGhlIHBhZ2UuCisgICAgICAg
IG1fc21hbGxQYWdlc1dpdGhGcmVlTGluZXNbcGFnZS0+c2l6ZUNsYXNzKCldLnB1c2gocGFnZSk7
CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIDE6IHsKKyAgICAgICAgLy8gTGFzdCBm
cmVlIGxpbmUgaW4gdGhlIHBhZ2UuCisgICAgICAgIG1fc21hbGxQYWdlcy5wdXNoKHBhZ2UpOwor
ICAgICAgICBtX3NjYXZlbmdlci5ydW4oKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIH0K
K30KKwordm9pZCBIZWFwOjpkZWFsbG9jYXRlTWVkaXVtTGluZShzdGQ6OmxvY2tfZ3VhcmQ8U3Rh
dGljTXV0ZXg+JiBsb2NrLCBNZWRpdW1MaW5lKiBsaW5lKQoreworICAgIEJBU1NFUlQoIWxpbmUt
PnJlZkNvdW50KGxvY2spKTsKKyAgICBNZWRpdW1QYWdlKiBwYWdlID0gTWVkaXVtUGFnZTo6Z2V0
KGxpbmUpOworICAgIHNpemVfdCByZWZDb3VudCA9IHBhZ2UtPnJlZkNvdW50KGxvY2spOworICAg
IHBhZ2UtPmRlcmVmKGxvY2spOworCisgICAgc3dpdGNoIChyZWZDb3VudCkgeworICAgIGNhc2Ug
TWVkaXVtUGFnZTo6bGluZUNvdW50OiB7CisgICAgICAgIC8vIEZpcnN0IGZyZWUgbGluZSBpbiB0
aGUgcGFnZS4KKyAgICAgICAgbV9tZWRpdW1QYWdlc1dpdGhGcmVlTGluZXNbcGFnZS0+c2l6ZUNs
YXNzKCldLnB1c2gocGFnZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIDE6IHsK
KyAgICAgICAgLy8gTGFzdCBmcmVlIGxpbmUgaW4gdGhlIHBhZ2UuCisgICAgICAgIG1fbWVkaXVt
UGFnZXMucHVzaChwYWdlKTsKKyAgICAgICAgbV9zY2F2ZW5nZXIucnVuKCk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KKyAgICB9CiB9CiAKIHZvaWQqIEhlYXA6OmFsbG9jYXRlWExhcmdlKHN0ZDo6
bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mLCBzaXplX3Qgc2l6ZSkKSW5kZXg6IFNvdXJjZS9ibWFs
bG9jL2JtYWxsb2MvSGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2Mv
SGVhcC5oCShyZXZpc2lvbiAxNzM2NzMpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0hlYXAu
aAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTYgKzI2LDE3IEBACiAjaWZuZGVmIEhlYXBfaAogI2Rl
ZmluZSBIZWFwX2gKIAotI2luY2x1ZGUgIkZpeGVkVmVjdG9yLmgiCi0jaW5jbHVkZSAiVk1IZWFw
LmgiCi0jaW5jbHVkZSAiTWVkaXVtTGluZS5oIgotI2luY2x1ZGUgIk11dGV4LmgiCi0jaW5jbHVk
ZSAiU21hbGxQYWdlLmgiCisjaW5jbHVkZSAiQnVtcFJhbmdlLmgiCisjaW5jbHVkZSAiTGluZU1l
dGFkYXRhLmgiCiAjaW5jbHVkZSAiTWVkaXVtQ2h1bmsuaCIKKyNpbmNsdWRlICJNZWRpdW1MaW5l
LmgiCiAjaW5jbHVkZSAiTWVkaXVtUGFnZS5oIgorI2luY2x1ZGUgIk11dGV4LmgiCiAjaW5jbHVk
ZSAiU2VncmVnYXRlZEZyZWVMaXN0LmgiCiAjaW5jbHVkZSAiU21hbGxDaHVuay5oIgogI2luY2x1
ZGUgIlNtYWxsTGluZS5oIgorI2luY2x1ZGUgIlNtYWxsUGFnZS5oIgorI2luY2x1ZGUgIlZNSGVh
cC5oIgogI2luY2x1ZGUgIlZlY3Rvci5oIgogI2luY2x1ZGUgPGFycmF5PgogI2luY2x1ZGUgPG11
dGV4PgpAQCAtNDksMTIgKzUwLDEyIEBAIGNsYXNzIEhlYXAgewogcHVibGljOgogICAgIEhlYXAo
c3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYpOwogCi0gICAgU21hbGxMaW5lKiBhbGxvY2F0
ZVNtYWxsTGluZShzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+Jiwgc2l6ZV90IHNtYWxsU2l6
ZUNsYXNzKTsKLSAgICB2b2lkIGRlYWxsb2NhdGVTbWFsbExpbmUoc3RkOjpsb2NrX2d1YXJkPFN0
YXRpY011dGV4PiYsIFNtYWxsTGluZSopOworICAgIHZvaWQgcmVmaWxsU21hbGxCdW1wUmFuZ2VD
YWNoZShzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+Jiwgc2l6ZV90IHNpemVDbGFzcywgU21h
bGxCdW1wUmFuZ2VDYWNoZSYpOworICAgIHZvaWQgZGVyZWZTbWFsbExpbmUoc3RkOjpsb2NrX2d1
YXJkPFN0YXRpY011dGV4PiYsIFNtYWxsTGluZSopOworCisgICAgdm9pZCByZWZpbGxNZWRpdW1C
dW1wUmFuZ2VDYWNoZShzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+Jiwgc2l6ZV90IHNpemVD
bGFzcywgTWVkaXVtQnVtcFJhbmdlQ2FjaGUmKTsKKyAgICB2b2lkIGRlcmVmTWVkaXVtTGluZShz
dGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+JiwgTWVkaXVtTGluZSopOwogCi0gICAgTWVkaXVt
TGluZSogYWxsb2NhdGVNZWRpdW1MaW5lKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mKTsK
LSAgICB2b2lkIGRlYWxsb2NhdGVNZWRpdW1MaW5lKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRl
eD4mLCBNZWRpdW1MaW5lKik7Ci0gICAgCiAgICAgdm9pZCogYWxsb2NhdGVMYXJnZShzdGQ6Omxv
Y2tfZ3VhcmQ8U3RhdGljTXV0ZXg+Jiwgc2l6ZV90KTsKICAgICB2b2lkIGRlYWxsb2NhdGVMYXJn
ZShzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+Jiwgdm9pZCopOwogCkBAIC02OCw5ICs2OSwx
NCBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgfkhlYXAoKSA9IGRlbGV0ZTsKKyAgICAKKyAg
ICB2b2lkIGluaXRpYWxpemVMaW5lTWV0YWRhdGEoKTsKIAotICAgIFNtYWxsTGluZSogYWxsb2Nh
dGVTbWFsbExpbmVTbG93Q2FzZShzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+Jiwgc2l6ZV90
IHNtYWxsU2l6ZUNsYXNzKTsKLSAgICBNZWRpdW1MaW5lKiBhbGxvY2F0ZU1lZGl1bUxpbmVTbG93
Q2FzZShzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+Jik7CisgICAgU21hbGxQYWdlKiBhbGxv
Y2F0ZVNtYWxsUGFnZShzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+Jiwgc2l6ZV90IHNpemVD
bGFzcyk7CisgICAgTWVkaXVtUGFnZSogYWxsb2NhdGVNZWRpdW1QYWdlKHN0ZDo6bG9ja19ndWFy
ZDxTdGF0aWNNdXRleD4mLCBzaXplX3Qgc2l6ZUNsYXNzKTsKKworICAgIHZvaWQgZGVhbGxvY2F0
ZVNtYWxsTGluZShzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+JiwgU21hbGxMaW5lKik7Cisg
ICAgdm9pZCBkZWFsbG9jYXRlTWVkaXVtTGluZShzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+
JiwgTWVkaXVtTGluZSopOwogCiAgICAgdm9pZCogYWxsb2NhdGVMYXJnZShSYW5nZSwgc2l6ZV90
KTsKICAgICBSYW5nZSBhbGxvY2F0ZUxhcmdlQ2h1bmsoKTsKQEAgLTg1LDggKzkxLDExIEBAIHBy
aXZhdGU6CiAgICAgdm9pZCBzY2F2ZW5nZU1lZGl1bVBhZ2VzKHN0ZDo6dW5pcXVlX2xvY2s8U3Rh
dGljTXV0ZXg+Jiwgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyk7CiAgICAgdm9pZCBzY2F2ZW5n
ZUxhcmdlUmFuZ2VzKHN0ZDo6dW5pcXVlX2xvY2s8U3RhdGljTXV0ZXg+Jiwgc3RkOjpjaHJvbm86
Om1pbGxpc2Vjb25kcyk7CiAKLSAgICBzdGQ6OmFycmF5PFZlY3RvcjxTbWFsbExpbmUqPiwgc21h
bGxNYXggLyBhbGlnbm1lbnQ+IG1fc21hbGxMaW5lczsKLSAgICBWZWN0b3I8TWVkaXVtTGluZSo+
IG1fbWVkaXVtTGluZXM7CisgICAgc3RkOjphcnJheTxzdGQ6OmFycmF5PExpbmVNZXRhZGF0YSwg
U21hbGxQYWdlOjpsaW5lQ291bnQ+LCBzbWFsbE1heCAvIGFsaWdubWVudD4gbV9zbWFsbExpbmVN
ZXRhZGF0YTsKKyAgICBzdGQ6OmFycmF5PHN0ZDo6YXJyYXk8TGluZU1ldGFkYXRhLCBNZWRpdW1Q
YWdlOjpsaW5lQ291bnQ+LCBtZWRpdW1NYXggLyBhbGlnbm1lbnQ+IG1fbWVkaXVtTGluZU1ldGFk
YXRhOworCisgICAgc3RkOjphcnJheTxWZWN0b3I8U21hbGxQYWdlKj4sIHNtYWxsTWF4IC8gYWxp
Z25tZW50PiBtX3NtYWxsUGFnZXNXaXRoRnJlZUxpbmVzOworICAgIHN0ZDo6YXJyYXk8VmVjdG9y
PE1lZGl1bVBhZ2UqPiwgbWVkaXVtTWF4IC8gYWxpZ25tZW50PiBtX21lZGl1bVBhZ2VzV2l0aEZy
ZWVMaW5lczsKIAogICAgIFZlY3RvcjxTbWFsbFBhZ2UqPiBtX3NtYWxsUGFnZXM7CiAgICAgVmVj
dG9yPE1lZGl1bVBhZ2UqPiBtX21lZGl1bVBhZ2VzOwpAQCAtOTksNTkgKzEwOCwxOCBAQCBwcml2
YXRlOgogICAgIEFzeW5jVGFzazxIZWFwLCBkZWNsdHlwZSgmSGVhcDo6Y29uY3VycmVudFNjYXZl
bmdlKT4gbV9zY2F2ZW5nZXI7CiB9OwogCi1pbmxpbmUgdm9pZCBIZWFwOjpkZWFsbG9jYXRlU21h
bGxMaW5lKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mIGxvY2ssIFNtYWxsTGluZSogbGlu
ZSkKK2lubGluZSB2b2lkIEhlYXA6OmRlcmVmU21hbGxMaW5lKHN0ZDo6bG9ja19ndWFyZDxTdGF0
aWNNdXRleD4mIGxvY2ssIFNtYWxsTGluZSogbGluZSkKIHsKLSAgICBCQVNTRVJUKCFsaW5lLT5y
ZWZDb3VudChsb2NrKSk7Ci0gICAgU21hbGxQYWdlKiBwYWdlID0gU21hbGxQYWdlOjpnZXQobGlu
ZSk7Ci0gICAgaWYgKHBhZ2UtPmRlcmVmKGxvY2spKSB7Ci0gICAgICAgIG1fc21hbGxQYWdlcy5w
dXNoKHBhZ2UpOwotICAgICAgICBtX3NjYXZlbmdlci5ydW4oKTsKKyAgICBpZiAoIWxpbmUtPmRl
cmVmKGxvY2spKQogICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIG1fc21hbGxMaW5lc1twYWdl
LT5zbWFsbFNpemVDbGFzcygpXS5wdXNoKGxpbmUpOwotfQotCi1pbmxpbmUgU21hbGxMaW5lKiBI
ZWFwOjphbGxvY2F0ZVNtYWxsTGluZShzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+JiBsb2Nr
LCBzaXplX3Qgc21hbGxTaXplQ2xhc3MpCi17Ci0gICAgVmVjdG9yPFNtYWxsTGluZSo+JiBzbWFs
bExpbmVzID0gbV9zbWFsbExpbmVzW3NtYWxsU2l6ZUNsYXNzXTsKLSAgICB3aGlsZSAoc21hbGxM
aW5lcy5zaXplKCkpIHsKLSAgICAgICAgU21hbGxMaW5lKiBsaW5lID0gc21hbGxMaW5lcy5wb3Ao
KTsKLSAgICAgICAgU21hbGxQYWdlKiBwYWdlID0gU21hbGxQYWdlOjpnZXQobGluZSk7Ci0gICAg
ICAgIGlmICghcGFnZS0+cmVmQ291bnQobG9jaykgfHwgcGFnZS0+c21hbGxTaXplQ2xhc3MoKSAh
PSBzbWFsbFNpemVDbGFzcykgLy8gVGhlIGxpbmUgd2FzIHByb21vdGVkIHRvIHRoZSBzbWFsbCBw
YWdlcyBsaXN0LgotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIEJBU1NFUlQoIWxpbmUt
PnJlZkNvdW50KGxvY2spKTsKLSAgICAgICAgcGFnZS0+cmVmKGxvY2spOwotICAgICAgICByZXR1
cm4gbGluZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gYWxsb2NhdGVTbWFsbExpbmVTbG93Q2FzZShs
b2NrLCBzbWFsbFNpemVDbGFzcyk7CisgICAgZGVhbGxvY2F0ZVNtYWxsTGluZShsb2NrLCBsaW5l
KTsKIH0KIAotaW5saW5lIHZvaWQgSGVhcDo6ZGVhbGxvY2F0ZU1lZGl1bUxpbmUoc3RkOjpsb2Nr
X2d1YXJkPFN0YXRpY011dGV4PiYgbG9jaywgTWVkaXVtTGluZSogbGluZSkKK2lubGluZSB2b2lk
IEhlYXA6OmRlcmVmTWVkaXVtTGluZShzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+JiBsb2Nr
LCBNZWRpdW1MaW5lKiBsaW5lKQogewotICAgIEJBU1NFUlQoIWxpbmUtPnJlZkNvdW50KGxvY2sp
KTsKLSAgICBNZWRpdW1QYWdlKiBwYWdlID0gTWVkaXVtUGFnZTo6Z2V0KGxpbmUpOwotICAgIGlm
IChwYWdlLT5kZXJlZihsb2NrKSkgewotICAgICAgICBtX21lZGl1bVBhZ2VzLnB1c2gocGFnZSk7
Ci0gICAgICAgIG1fc2NhdmVuZ2VyLnJ1bigpOworICAgIGlmICghbGluZS0+ZGVyZWYobG9jaykp
CiAgICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgbV9tZWRpdW1MaW5lcy5wdXNoKGxpbmUpOwot
fQotCi1pbmxpbmUgTWVkaXVtTGluZSogSGVhcDo6YWxsb2NhdGVNZWRpdW1MaW5lKHN0ZDo6bG9j
a19ndWFyZDxTdGF0aWNNdXRleD4mIGxvY2spCi17Ci0gICAgd2hpbGUgKG1fbWVkaXVtTGluZXMu
c2l6ZSgpKSB7Ci0gICAgICAgIE1lZGl1bUxpbmUqIGxpbmUgPSBtX21lZGl1bUxpbmVzLnBvcCgp
OwotICAgICAgICBNZWRpdW1QYWdlKiBwYWdlID0gTWVkaXVtUGFnZTo6Z2V0KGxpbmUpOwotICAg
ICAgICBpZiAoIXBhZ2UtPnJlZkNvdW50KGxvY2spKSAvLyBUaGUgbGluZSB3YXMgcHJvbW90ZWQg
dG8gdGhlIG1lZGl1bSBwYWdlcyBsaXN0LgotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
IEJBU1NFUlQoIWxpbmUtPnJlZkNvdW50KGxvY2spKTsKLSAgICAgICAgcGFnZS0+cmVmKGxvY2sp
OwotICAgICAgICByZXR1cm4gbGluZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gYWxsb2NhdGVNZWRp
dW1MaW5lU2xvd0Nhc2UobG9jayk7CisgICAgZGVhbGxvY2F0ZU1lZGl1bUxpbmUobG9jaywgbGlu
ZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIGJtYWxsb2MKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2Jt
YWxsb2MvTGluZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvTGluZS5o
CShyZXZpc2lvbiAxNzM2NzMpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0xpbmUuaAkod29y
a2luZyBjb3B5KQpAQCAtNDUsOCArNDUsOCBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgTGluZSog
Z2V0KHZvaWQqKTsKIAotICAgIHZvaWQgY29uY3VycmVudFJlZih1bnNpZ25lZCBjaGFyID0gMSk7
Ci0gICAgYm9vbCBkZXJlZihzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+JiwgdW5zaWduZWQg
Y2hhciA9IDEpOworICAgIHZvaWQgcmVmKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mLCB1
bnNpZ25lZCBjaGFyKTsKKyAgICBib29sIGRlcmVmKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRl
eD4mKTsKICAgICB1bnNpZ25lZCByZWZDb3VudChzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+
JikgeyByZXR1cm4gbV9yZWZDb3VudDsgfQogICAgIAogICAgIGNoYXIqIGJlZ2luKCk7CkBAIC04
MSwxOCArODEsMTggQEAgaW5saW5lIGNoYXIqIExpbmU8VHJhaXRzPjo6ZW5kKCkKIH0KIAogdGVt
cGxhdGU8Y2xhc3MgVHJhaXRzPgotaW5saW5lIHZvaWQgTGluZTxUcmFpdHM+Ojpjb25jdXJyZW50
UmVmKHVuc2lnbmVkIGNoYXIgY291bnQpCitpbmxpbmUgdm9pZCBMaW5lPFRyYWl0cz46OnJlZihz
dGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+JiwgdW5zaWduZWQgY2hhciByZWZDb3VudCkKIHsK
LSAgICBCQVNTRVJUKCFtX3JlZkNvdW50KTsgLy8gVXAtcmVmIGZyb20gemVybyBjYW4gYmUgbG9j
ay1mcmVlIGJlY2F1c2UgdGhlcmUgYXJlIG5vIG90aGVyIGNsaWVudHMuCi0gICAgQkFTU0VSVChj
b3VudCA8PSBtYXhSZWZDb3VudCk7Ci0gICAgbV9yZWZDb3VudCA9IGNvdW50OworICAgIEJBU1NF
UlQoIW1fcmVmQ291bnQpOworICAgIEJBU1NFUlQocmVmQ291bnQgPD0gbWF4UmVmQ291bnQpOwor
ICAgIG1fcmVmQ291bnQgPSByZWZDb3VudDsKIH0KIAogdGVtcGxhdGU8Y2xhc3MgVHJhaXRzPgot
aW5saW5lIGJvb2wgTGluZTxUcmFpdHM+OjpkZXJlZihzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0
ZXg+JiwgdW5zaWduZWQgY2hhciBjb3VudCkKK2lubGluZSBib29sIExpbmU8VHJhaXRzPjo6ZGVy
ZWYoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYpCiB7Ci0gICAgQkFTU0VSVChjb3VudCA8
PSBtX3JlZkNvdW50KTsKLSAgICBtX3JlZkNvdW50IC09IGNvdW50OworICAgIEJBU1NFUlQobV9y
ZWZDb3VudCk7CisgICAgLS1tX3JlZkNvdW50OwogICAgIHJldHVybiAhbV9yZWZDb3VudDsKIH0K
IApJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9MaW5lTWV0YWRhdGEuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0xpbmVNZXRhZGF0YS5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9MaW5lTWV0YWRhdGEuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDM4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgTGluZU1ldGFkYXRhX2gKKyNkZWZpbmUgTGluZU1ldGFkYXRhX2gKKwor
bmFtZXNwYWNlIGJtYWxsb2MgeworCitzdHJ1Y3QgTGluZU1ldGFkYXRhIHsKKyAgICB1bnNpZ25l
ZCBzaG9ydCBzdGFydE9mZnNldDsKKyAgICB1bnNpZ25lZCBzaG9ydCBvYmplY3RDb3VudDsKK307
CisKK30gLy8gbmFtZXNwYWNlIGJtYWxsb2MKKworI2VuZGlmIC8vIExpbmVNZXRhZGF0YV9oCklu
ZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL01lZGl1bUFsbG9jYXRvci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvTWVkaXVtQWxsb2NhdG9yLmgJKHJldmlzaW9uIDE3
MzY3MykKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvTWVkaXVtQWxsb2NhdG9yLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsMTE1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBNZWRpdW1BbGxvY2F0b3JfaAotI2RlZmluZSBNZWRp
dW1BbGxvY2F0b3JfaAotCi0jaW5jbHVkZSAiQkFzc2VydC5oIgotI2luY2x1ZGUgIk1lZGl1bUNo
dW5rLmgiCi0jaW5jbHVkZSAiTWVkaXVtTGluZS5oIgotCi1uYW1lc3BhY2UgYm1hbGxvYyB7Ci0K
LS8vIEhlbHBlciBvYmplY3QgZm9yIGFsbG9jYXRpbmcgbWVkaXVtIG9iamVjdHMuCi0KLWNsYXNz
IE1lZGl1bUFsbG9jYXRvciB7Ci1wdWJsaWM6Ci0gICAgTWVkaXVtQWxsb2NhdG9yKCk7Ci0KLSAg
ICBib29sIGlzTnVsbCgpIHsgcmV0dXJuICFtX2VuZDsgfQotICAgIE1lZGl1bUxpbmUqIGxpbmUo
KTsKLQotICAgIHZvaWQqIGFsbG9jYXRlKHNpemVfdCk7Ci0gICAgYm9vbCBhbGxvY2F0ZShzaXpl
X3QsIHZvaWQqJik7Ci0KLSAgICB1bnNpZ25lZCBjaGFyIGRlcmVmQ291bnQoKTsKLQotICAgIHZv
aWQgcmVmaWxsKE1lZGl1bUxpbmUqKTsKLSAgICB2b2lkIGNsZWFyKCk7Ci0KLXByaXZhdGU6Ci0g
ICAgY2hhciogbV9lbmQ7Ci0gICAgc2l6ZV90IG1fcmVtYWluaW5nOwotICAgIHNpemVfdCBtX29i
amVjdENvdW50OwotfTsKLQotaW5saW5lIE1lZGl1bUFsbG9jYXRvcjo6TWVkaXVtQWxsb2NhdG9y
KCkKLSAgICA6IG1fZW5kKCkKLSAgICAsIG1fcmVtYWluaW5nKCkKLSAgICAsIG1fb2JqZWN0Q291
bnQoKQotewotfQotCi1pbmxpbmUgTWVkaXVtTGluZSogTWVkaXVtQWxsb2NhdG9yOjpsaW5lKCkK
LXsKLSAgICByZXR1cm4gTWVkaXVtTGluZTo6Z2V0KG1fZW5kIC0gMSk7Ci19Ci0KLWlubGluZSB2
b2lkKiBNZWRpdW1BbGxvY2F0b3I6OmFsbG9jYXRlKHNpemVfdCBzaXplKQotewotICAgIEJBU1NF
UlQoc2l6ZSA8PSBtX3JlbWFpbmluZyk7Ci0gICAgQkFTU0VSVChzaXplID09IHJvdW5kVXBUb011
bHRpcGxlT2Y8YWxpZ25tZW50PihzaXplKSk7Ci0gICAgQkFTU0VSVChzaXplID49IE1lZGl1bUxp
bmU6Om1pbmltdW1PYmplY3RTaXplKTsKLQotICAgIG1fcmVtYWluaW5nIC09IHNpemU7Ci0gICAg
dm9pZCogb2JqZWN0ID0gbV9lbmQgLSBtX3JlbWFpbmluZyAtIHNpemU7Ci0gICAgQkFTU0VSVChp
c1NtYWxsT3JNZWRpdW0ob2JqZWN0KSAmJiAhaXNTbWFsbChvYmplY3QpKTsKLQotICAgICsrbV9v
YmplY3RDb3VudDsKLSAgICByZXR1cm4gb2JqZWN0OwotfQotCi1pbmxpbmUgYm9vbCBNZWRpdW1B
bGxvY2F0b3I6OmFsbG9jYXRlKHNpemVfdCBzaXplLCB2b2lkKiYgb2JqZWN0KQotewotICAgIGlm
IChzaXplID4gbV9yZW1haW5pbmcpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIG9iamVj
dCA9IGFsbG9jYXRlKHNpemUpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1pbmxpbmUgdW5zaWdu
ZWQgY2hhciBNZWRpdW1BbGxvY2F0b3I6OmRlcmVmQ291bnQoKQotewotICAgIHJldHVybiBNZWRp
dW1MaW5lOjptYXhSZWZDb3VudCAtIG1fb2JqZWN0Q291bnQ7Ci19Ci0KLWlubGluZSB2b2lkIE1l
ZGl1bUFsbG9jYXRvcjo6cmVmaWxsKE1lZGl1bUxpbmUqIGxpbmUpCi17Ci0gICAgbGluZS0+Y29u
Y3VycmVudFJlZihNZWRpdW1MaW5lOjptYXhSZWZDb3VudCk7Ci0gICAgbV9lbmQgPSBsaW5lLT5l
bmQoKTsKLSAgICBtX3JlbWFpbmluZyA9IG1lZGl1bUxpbmVTaXplOwotICAgIG1fb2JqZWN0Q291
bnQgPSAwOwotfQotCi1pbmxpbmUgdm9pZCBNZWRpdW1BbGxvY2F0b3I6OmNsZWFyKCkKLXsKLSAg
ICBtX2VuZCA9IG51bGxwdHI7Ci0gICAgbV9yZW1haW5pbmcgPSAwOwotICAgIG1fb2JqZWN0Q291
bnQgPSAwOwotfQotCi19IC8vIG5hbWVzcGFjZSBibWFsbG9jCi0KLSNlbmRpZiAvLyBNZWRpdW1B
bGxvY2F0b3JfaApJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9QYWdlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9QYWdlLmgJKHJldmlzaW9uIDE3MzY3MykKKysr
IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvUGFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw5ICsz
OSwxMCBAQCBwdWJsaWM6CiAgICAgdHlwZWRlZiB0eXBlbmFtZSBUcmFpdHM6OkNodW5rIENodW5r
OwogICAgIHR5cGVkZWYgdHlwZW5hbWUgVHJhaXRzOjpMaW5lIExpbmU7CiAgICAgc3RhdGljIGNv
bnN0IHNpemVfdCBsaW5lU2l6ZSA9IFRyYWl0czo6bGluZVNpemU7CisgICAgc3RhdGljIGNvbnN0
IHNpemVfdCBsaW5lQ291bnQgPSB2bVBhZ2VTaXplIC8gbGluZVNpemU7CiAKICAgICBzdGF0aWMg
Y29uc3QgdW5zaWduZWQgY2hhciBtYXhSZWZDb3VudCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5z
aWduZWQgY2hhcj46Om1heCgpOwotICAgIHN0YXRpY19hc3NlcnQodm1QYWdlU2l6ZSAvIGxpbmVT
aXplIDwgbWF4UmVmQ291bnQsICJtYXhpbXVtIGxpbmUgY291bnQgbXVzdCBmaXQgaW4gUGFnZSIp
OworICAgIHN0YXRpY19hc3NlcnQobGluZUNvdW50IDwgbWF4UmVmQ291bnQsICJtYXhpbXVtIGxp
bmUgY291bnQgbXVzdCBmaXQgaW4gUGFnZSIpOwogICAgIAogICAgIHN0YXRpYyBQYWdlKiBnZXQo
TGluZSopOwogCkBAIC00OSwxNSArNTAsMTUgQEAgcHVibGljOgogICAgIGJvb2wgZGVyZWYoc3Rk
Ojpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYpOwogICAgIHVuc2lnbmVkIHJlZkNvdW50KHN0ZDo6
bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mKSB7IHJldHVybiBtX3JlZkNvdW50OyB9CiAgICAgCi0g
ICAgc2l6ZV90IHNtYWxsU2l6ZUNsYXNzKCkgeyByZXR1cm4gbV9zbWFsbFNpemVDbGFzczsgfQot
ICAgIHZvaWQgc2V0U21hbGxTaXplQ2xhc3Moc2l6ZV90IHNtYWxsU2l6ZUNsYXNzKSB7IG1fc21h
bGxTaXplQ2xhc3MgPSBzbWFsbFNpemVDbGFzczsgfQorICAgIHNpemVfdCBzaXplQ2xhc3MoKSB7
IHJldHVybiBtX3NpemVDbGFzczsgfQorICAgIHZvaWQgc2V0U2l6ZUNsYXNzKHNpemVfdCBzaXpl
Q2xhc3MpIHsgbV9zaXplQ2xhc3MgPSBzaXplQ2xhc3M7IH0KICAgICAKICAgICBMaW5lKiBiZWdp
bigpOwogICAgIExpbmUqIGVuZCgpOwogCiBwcml2YXRlOgogICAgIHVuc2lnbmVkIGNoYXIgbV9y
ZWZDb3VudDsKLSAgICB1bnNpZ25lZCBjaGFyIG1fc21hbGxTaXplQ2xhc3M7CisgICAgdW5zaWdu
ZWQgY2hhciBtX3NpemVDbGFzczsKIH07CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFRyYWl0cz4KQEAg
LTg5LDE0ICs5MCwxNCBAQCBpbmxpbmUgYXV0byBQYWdlPFRyYWl0cz46OmJlZ2luKCkgLT4gTGlu
CiB7CiAgICAgQ2h1bmsqIGNodW5rID0gQ2h1bms6OmdldCh0aGlzKTsKICAgICBzaXplX3QgcGFn
ZU51bWJlciA9IHRoaXMgLSBjaHVuay0+cGFnZXMoKTsKLSAgICBzaXplX3QgbGluZU51bWJlciA9
IHBhZ2VOdW1iZXIgKiB2bVBhZ2VTaXplIC8gbGluZVNpemU7CisgICAgc2l6ZV90IGxpbmVOdW1i
ZXIgPSBwYWdlTnVtYmVyICogbGluZUNvdW50OwogICAgIHJldHVybiAmY2h1bmstPmxpbmVzKClb
bGluZU51bWJlcl07CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFRyYWl0cz4KIGlubGluZSBhdXRv
IFBhZ2U8VHJhaXRzPjo6ZW5kKCkgLT4gTGluZSoKIHsKLSAgICByZXR1cm4gYmVnaW4oKSArIHZt
UGFnZVNpemUgLyBsaW5lU2l6ZTsKKyAgICByZXR1cm4gYmVnaW4oKSArIGxpbmVDb3VudDsKIH0K
IAogfSAvLyBuYW1lc3BhY2UgYm1hbGxvYwpJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9T
aXplcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvU2l6ZXMuaAkocmV2
aXNpb24gMTczNjc1KQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9TaXplcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC01Niw3ICs1Niw3IEBAIG5hbWVzcGFjZSBTaXplcyB7CiAgICAgc3RhdGljIGNv
bnN0IHNpemVfdCBzdXBlckNodW5rU2l6ZSA9IDMyICogTUI7CiAKICAgICBzdGF0aWMgY29uc3Qg
c2l6ZV90IHNtYWxsTWF4ID0gMjU2OwotICAgIHN0YXRpYyBjb25zdCBzaXplX3Qgc21hbGxMaW5l
U2l6ZSA9IDUxMjsKKyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IHNtYWxsTGluZVNpemUgPSAyNTY7
CiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBzbWFsbExpbmVNYXNrID0gfihzbWFsbExpbmVTaXpl
IC0gMXVsKTsKIAogICAgIHN0YXRpYyBjb25zdCBzaXplX3Qgc21hbGxDaHVua1NpemUgPSBzdXBl
ckNodW5rU2l6ZSAvIDQ7CkBAIC02NCw3ICs2NCw3IEBAIG5hbWVzcGFjZSBTaXplcyB7CiAgICAg
c3RhdGljIGNvbnN0IHNpemVfdCBzbWFsbENodW5rTWFzayA9IH4oc21hbGxDaHVua1NpemUgLSAx
dWwpOwogCiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBtZWRpdW1NYXggPSAxMDI0OwotICAgIHN0
YXRpYyBjb25zdCBzaXplX3QgbWVkaXVtTGluZVNpemUgPSAyMDQ4OworICAgIHN0YXRpYyBjb25z
dCBzaXplX3QgbWVkaXVtTGluZVNpemUgPSAxMDI0OwogICAgIHN0YXRpYyBjb25zdCBzaXplX3Qg
bWVkaXVtTGluZU1hc2sgPSB+KG1lZGl1bUxpbmVTaXplIC0gMXVsKTsKIAogICAgIHN0YXRpYyBj
b25zdCBzaXplX3QgbWVkaXVtQ2h1bmtTaXplID0gc3VwZXJDaHVua1NpemUgLyA0OwpAQCAtOTIs
MjEgKzkyLDIwIEBAIG5hbWVzcGFjZSBTaXplcyB7CiAKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90
IGRlYWxsb2NhdG9yTG9nQ2FwYWNpdHkgPSAyNTY7CiAKLSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90
IHNtYWxsTGluZUNhY2hlQ2FwYWNpdHkgPSB2bVBhZ2VTaXplIC8gc21hbGxMaW5lU2l6ZTsKLSAg
ICBzdGF0aWMgY29uc3Qgc2l6ZV90IG1lZGl1bUxpbmVDYWNoZUNhcGFjaXR5ID0gdm1QYWdlU2l6
ZSAvIG1lZGl1bUxpbmVTaXplOworICAgIHN0YXRpYyBjb25zdCBzaXplX3Qgc21hbGxSYW5nZUNh
Y2hlQ2FwYWNpdHkgPSB2bVBhZ2VTaXplIC8gc21hbGxMaW5lU2l6ZTsKKyAgICBzdGF0aWMgY29u
c3Qgc2l6ZV90IG1lZGl1bVJhbmdlQ2FjaGVDYXBhY2l0eSA9IHZtUGFnZVNpemUgLyBtZWRpdW1M
aW5lU2l6ZTsKICAgICAKICAgICBzdGF0aWMgY29uc3Qgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25k
cyBzY2F2ZW5nZVNsZWVwRHVyYXRpb24gPSBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzKDUxMik7
CiAKLSAgICBpbmxpbmUgc2l6ZV90IHNtYWxsU2l6ZUNsYXNzRm9yKHNpemVfdCBzaXplKQorICAg
IGlubGluZSBzaXplX3Qgc2l6ZUNsYXNzKHNpemVfdCBzaXplKQogICAgIHsKLSAgICAgICAgc3Rh
dGljIGNvbnN0IHNpemVfdCBzbWFsbFNpemVDbGFzc01hc2sgPSAoc21hbGxNYXggLyBhbGlnbm1l
bnQpIC0gMTsKLSAgICAgICAgcmV0dXJuIG1hc2soKHNpemUgLSAxdWwpIC8gYWxpZ25tZW50LCBz
bWFsbFNpemVDbGFzc01hc2spOworICAgICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IHNpemVDbGFz
c01hc2sgPSAobWVkaXVtTWF4IC8gYWxpZ25tZW50KSAtIDE7CisgICAgICAgIHJldHVybiBtYXNr
KChzaXplIC0gMXVsKSAvIGFsaWdubWVudCwgc2l6ZUNsYXNzTWFzayk7CiAgICAgfQogCi0gICAg
aW5saW5lIHNpemVfdCBtZWRpdW1TaXplQ2xhc3NGb3Ioc2l6ZV90IHNpemUpCisgICAgaW5saW5l
IHNpemVfdCBvYmplY3RTaXplKHNpemVfdCBzaXplQ2xhc3MpCiAgICAgewotICAgICAgICBzdGF0
aWMgY29uc3Qgc2l6ZV90IG1lZGl1bVNpemVDbGFzc01hc2sgPSAobWVkaXVtTWF4IC8gYWxpZ25t
ZW50KSAtIDE7Ci0gICAgICAgIHJldHVybiBtYXNrKChzaXplIC0gMXVsKSAvIGFsaWdubWVudCwg
bWVkaXVtU2l6ZUNsYXNzTWFzayk7CisgICAgICAgIHJldHVybiAoc2l6ZUNsYXNzICsgMSkgKiBh
bGlnbm1lbnQ7CiAgICAgfQogfTsKIApJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9ibWFs
bG9jLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9ibWFsbG9jLmgJKHJl
dmlzaW9uIDE3MzY3MykKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvYm1hbGxvYy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01MiwxNSArNTIsMTMgQEAgaW5saW5lIHZvaWQqIHJlYWxsb2Modm9pZCog
b2JqZWN0LCBzaXplXwogICAgIHNpemVfdCBvbGRTaXplID0gMDsKICAgICBzd2l0Y2gob2JqZWN0
VHlwZShvYmplY3QpKSB7CiAgICAgY2FzZSBTbWFsbDogewotICAgICAgICAvLyBXZSBkb24ndCBo
YXZlIGFuIGV4YWN0IHNpemUsIGJ1dCB3ZSBjYW4gY2FsY3VsYXRlIGEgbWF4aW11bS4KLSAgICAg
ICAgdm9pZCogZW5kID0gcm91bmRVcFRvTXVsdGlwbGVPZjxzbWFsbExpbmVTaXplPihzdGF0aWNf
Y2FzdDxjaGFyKj4ob2JqZWN0KSArIDEpOwotICAgICAgICBvbGRTaXplID0gc3RhdGljX2Nhc3Q8
Y2hhcio+KGVuZCkgLSBzdGF0aWNfY2FzdDxjaGFyKj4ob2JqZWN0KTsKKyAgICAgICAgU21hbGxQ
YWdlKiBwYWdlID0gU21hbGxQYWdlOjpnZXQoU21hbGxMaW5lOjpnZXQob2JqZWN0KSk7CisgICAg
ICAgIG9sZFNpemUgPSBvYmplY3RTaXplKHBhZ2UtPnNpemVDbGFzcygpKTsKICAgICAgICAgYnJl
YWs7CiAgICAgfQogICAgIGNhc2UgTWVkaXVtOiB7Ci0gICAgICAgIC8vIFdlIGRvbid0IGhhdmUg
YW4gZXhhY3Qgc2l6ZSwgYnV0IHdlIGNhbiBjYWxjdWxhdGUgYSBtYXhpbXVtLgotICAgICAgICB2
b2lkKiBlbmQgPSByb3VuZFVwVG9NdWx0aXBsZU9mPG1lZGl1bUxpbmVTaXplPihzdGF0aWNfY2Fz
dDxjaGFyKj4ob2JqZWN0KSArIDEpOwotICAgICAgICBvbGRTaXplID0gc3RhdGljX2Nhc3Q8Y2hh
cio+KGVuZCkgLSBzdGF0aWNfY2FzdDxjaGFyKj4ob2JqZWN0KTsKKyAgICAgICAgTWVkaXVtUGFn
ZSogcGFnZSA9IE1lZGl1bVBhZ2U6OmdldChNZWRpdW1MaW5lOjpnZXQob2JqZWN0KSk7CisgICAg
ICAgIG9sZFNpemUgPSBvYmplY3RTaXplKHBhZ2UtPnNpemVDbGFzcygpKTsKICAgICAgICAgYnJl
YWs7CiAgICAgfQogICAgIGNhc2UgTGFyZ2U6IHsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>238457</attachid>
            <date>2014-09-22 00:43:34 -0700</date>
            <delta_ts>2014-09-23 09:26:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-136993-20140922004333.patch</filename>
            <type>text/plain</type>
            <size>52894</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvd3RmL0Zhc3RNYWxsb2MuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XVEYvd3RmL0Zhc3RNYWxsb2MuY3BwCShyZXZpc2lvbiAxNzM2NzMpCisrKyBTb3VyY2UvV1RG
L3d0Zi9GYXN0TWFsbG9jLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAxLDYgKzEwMSwxMCBAQAog
I2VuZGlmCiAjZW5kaWYKIAorI2lmIChQTEFURk9STShDT0NPQSkgJiYgKENQVShYODZfNjQpIHx8
IENQVShBUk02NCkpKQorI2RlZmluZSBVU0VfQk1BTExPQyAxCisjZW5kaWYKKwogI2lmICEoZGVm
aW5lZChVU0VfU1lTVEVNX01BTExPQykgJiYgVVNFX1NZU1RFTV9NQUxMT0MpICYmIGRlZmluZWQo
TkRFQlVHKQogI2RlZmluZSBGT1JDRV9TWVNURU1fTUFMTE9DIDAKICNlbHNlCkluZGV4OiBTb3Vy
Y2UvYm1hbGxvYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvQ2hhbmdl
TG9nCShyZXZpc2lvbiAxNzM4MDQpCisrKyBTb3VyY2UvYm1hbGxvYy9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSwxMjIgQEAKKzIwMTQtMDktMjEgIEdlb2ZmcmV5IEdhcmVuICA8
Z2dhcmVuQGFwcGxlLmNvbT4KKworICAgICAgICBibWFsbG9jOiBBbGxvY2F0aW9uIHNob3VsZCBi
ZSBtb3JlIHByZWNpc2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTEzNjk5MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIDEzJSByZWR1Y3Rpb24gaW4gaGVhcCBzaXplIG9uIHRoZSBNYWxsb2NCZW5jaCAqX21l
bW9yeV93YXJuaW5nIGJlbmNobWFya3MuCisKKyAgICAgICAgVGhpcyBwYXRjaCB0ZWFjaGVzIHRo
ZSBhbGxvY2F0b3IgdG8gbWVyZ2UgYWRqYWNlbnQgZnJlZSBsaW5lcyBpbnRvIGEKKyAgICAgICAg
c2luZ2xlIGFsbG9jYXRhYmxlIHJhbmdlLiBUaGlzIGFsbG93cyB1cyB0byBzaHJpbmsgdGhlIHNp
emUgb2YgYW4KKyAgICAgICAgaW5kaXZpZHVhbCBsaW5lIHdpdGhvdXQgaW5jcmVhc2luZyBmcmFn
bWVudGF0aW9uIG9yIHRoZSByYXRlIG9mIGFsbG9jYXRvcgorICAgICAgICBzbG93IHBhdGhzLgor
CisgICAgICAgIFdlJ2xsIG9ubHkgdGFrZSBtb3JlIHNsb3cgcGF0aHMgd2hlbiBhdmFpbGFibGUg
bWVtb3J5IGlzIHNwYXJzZSwgd2hpY2gKKyAgICAgICAgaXMgZXhhY3RseSB3aGVuIGl0J3Mgd29y
dGggaXQuIFdoZW4gYXZhaWxhYmxlIG1lbW9yeSBpcyBkZW5zZSwgd2UnbGwKKyAgICAgICAgdGFr
ZSBmZXdlciBzbG93IHBhdGhzLgorCisgICAgICAgICogYm1hbGxvYy54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qOgorICAgICAgICAqIGJtYWxsb2MvQWxnb3JpdGhtLmg6CisgICAgICAgIChibWFs
bG9jOjpkaXZpZGVSb3VuZGluZ1VwKToKKworICAgICAgICAqIGJtYWxsb2MvQWxsb2NhdG9yLmNw
cDoKKyAgICAgICAgKGJtYWxsb2M6OkFsbG9jYXRvcjo6QWxsb2NhdG9yKTogVXBkYXRlZCBmb3Ig
aW50ZXJmYWNlIGNoYW5nZXMuCisKKyAgICAgICAgKGJtYWxsb2M6OkFsbG9jYXRvcjo6c2NhdmVu
Z2UpOiBTY2F2ZW5nZSBieSBvYmplY3QgaW5zdGVhZCBvZiBieSBsaW5lLgorICAgICAgICBOb3cg
dGhhdCB3ZSBtZXJnZSBsaW5lcywgaXQncyBub3QgY29udmVuaWVudCB0byBzY2F2ZW5nZSBieSBs
aW5lLgorCisgICAgICAgIChibWFsbG9jOjpBbGxvY2F0b3I6OmFsbG9jYXRlU21hbGxCdW1wUmFu
Z2UpOgorICAgICAgICAoYm1hbGxvYzo6QWxsb2NhdG9yOjphbGxvY2F0ZU1lZGl1bUJ1bXBSYW5n
ZSk6IEFsbG9jYXRlIHdob2xlIHJhbmdlcworICAgICAgICBpbnN0ZWFkIG9mIGluZGl2aWR1YWwg
bGluZXMuCisKKyAgICAgICAgKGJtYWxsb2M6OkFsbG9jYXRvcjo6YWxsb2NhdGVTbG93Q2FzZSk6
CisgICAgICAgIChibWFsbG9jOjpBbGxvY2F0b3I6OmFsbG9jYXRlU21hbGxMaW5lKTogRGVsZXRl
ZC4KKyAgICAgICAgKGJtYWxsb2M6OkFsbG9jYXRvcjo6YWxsb2NhdGVNZWRpdW1MaW5lKTogRGVs
ZXRlZC4KKyAgICAgICAgKGJtYWxsb2M6OkFsbG9jYXRvcjo6YWxsb2NhdGVNZWRpdW0pOiBEZWxl
dGVkLgorICAgICAgICAqIGJtYWxsb2MvQWxsb2NhdG9yLmg6CisgICAgICAgIChibWFsbG9jOjpB
bGxvY2F0b3I6OmFsbG9jYXRlRmFzdENhc2UpOiBGb2xkZWQgbWVkaXVtIGFsbG9jYXRpb25zCisg
ICAgICAgIGludG8gdGhlIHN0YW5kYXJkIGZhc3QgcGF0aCB3aXRoIHNtYWxsIGFsbG9jYXRpb25z
LiBTaW5jZSBhIEJ1bXBBbGxvY2F0b3IKKyAgICAgICAganVzdCBhbGxvY2F0ZXMgb3V0IG9mIGFu
IGFyYml0cmFyeSByYW5nZSwgaXQgZG9lc24ndCBuZWVkIHRvIGRpc3Rpbmd1aXNoCisgICAgICAg
IGJldHdlZW4gc21hbGwgYW5kIG1lZGl1bSBsaW5lcy4KKworICAgICAgICAqIGJtYWxsb2MvQnVt
cEFsbG9jYXRvci5oOgorICAgICAgICAoYm1hbGxvYzo6QnVtcEFsbG9jYXRvcjo6c2l6ZSk6Cisg
ICAgICAgIChibWFsbG9jOjpCdW1wQWxsb2NhdG9yOjpCdW1wQWxsb2NhdG9yKToKKyAgICAgICAg
KGJtYWxsb2M6OkJ1bXBBbGxvY2F0b3I6OmluaXQpOgorICAgICAgICAoYm1hbGxvYzo6QnVtcEFs
bG9jYXRvcjo6cmVmaWxsKToKKyAgICAgICAgKGJtYWxsb2M6OkJ1bXBBbGxvY2F0b3I6OmxpbmUp
OiBEZWxldGVkLiBObyBuZWVkIHRvIHRyYWNrIGxpbmUgaW5mb3JtYXRpb24KKyAgICAgICAgYW55
bW9yZTogdGhlIGhlYXAganVzdCBnaXZlcyB1cyBhIHBvaW50ZXIgYW5kIGEgcHJlLWNvbXB1dGVk
IG51bWJlciBvZgorICAgICAgICBvYmplY3RzLCBhbmQgd2UgYWxsb2NhdGUgdGhlbS4KKworICAg
ICAgICAqIGJtYWxsb2MvRGVhbGxvY2F0b3IuY3BwOgorICAgICAgICAoYm1hbGxvYzo6RGVhbGxv
Y2F0b3I6OnByb2Nlc3NPYmplY3RMb2cpOiBVcGRhdGVkIGZvciBpbnRlcmZhY2UgY2hhbmdlcy4K
KworICAgICAgICAqIGJtYWxsb2MvSGVhcC5jcHA6CisgICAgICAgIChibWFsbG9jOjpIZWFwOjpI
ZWFwKToKKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OmluaXRpYWxpemVMaW5lTWV0YWRhdGEpOiBQ
cmUtY29tcHV0ZSBwcmVjaXNlIG1ldGFkYXRhCisgICAgICAgIGRldGFpbGluZyB3aGVyZSBhbGwg
b2JqZWN0cyB3aWxsIGxpZSBpbiBtZW1vcnkuIEFmdGVyIHdlIG1lcmdlIHR3byBsaW5lcywKKyAg
ICAgICAgd2UgbWlnaHQgYWxsb2NhdGUgYW4gb2JqZWN0IHRoYXQgc3BhbnMgZnJvbSBvbmUgbGlu
ZSB0byB0aGUgbmV4dC4gVGhpcworICAgICAgICBtZXRhZGF0YSBkZXRhaWxzIHdoaWNoIGJpdHMg
b2YgbWVtb3J5IG92ZXJsYXAgaW4gdGhhdCB3YXksIGFuZCBob3cgdGhleQorICAgICAgICBvdmVy
bGFwLgorCisgICAgICAgIChibWFsbG9jOjpIZWFwOjpyZWZpbGxTbWFsbEJ1bXBSYW5nZUNhY2hl
KToKKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OnJlZmlsbE1lZGl1bUJ1bXBSYW5nZUNhY2hlKTog
U2NhbiBhIHdob2xlIHBhZ2UgYXQgYSB0aW1lLAorICAgICAgICBhbmQgbWVyZ2UgYWRqYWNlbnQg
ZnJlZSBsaW5lcyBpbnRvIEJ1bXBSYW5nZXMuCisKKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OmFs
bG9jYXRlU21hbGxQYWdlKToKKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OmFsbG9jYXRlTWVkaXVt
UGFnZSk6CisgICAgICAgIChibWFsbG9jOjpIZWFwOjpkZWFsbG9jYXRlU21hbGxMaW5lKToKKyAg
ICAgICAgKGJtYWxsb2M6OkhlYXA6OmRlYWxsb2NhdGVNZWRpdW1MaW5lKTogVHJhY2sgcGFnZXMg
cmF0aGVyIHRoYW4gbGluZXMsCisgICAgICAgIHNpbmNlIHdlIHNjYW4gZm9yIGZyZWUgbWVtb3J5
IGEgcGFnZSBhdCBhIHRpbWUuCisKKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OmFsbG9jYXRlU21h
bGxMaW5lU2xvd0Nhc2UpOiBEZWxldGVkLgorICAgICAgICAoYm1hbGxvYzo6SGVhcDo6YWxsb2Nh
dGVNZWRpdW1MaW5lU2xvd0Nhc2UpOiBEZWxldGVkLiBGb2xlZCBpbnRvIHRoZQorICAgICAgICBm
YXN0IHBhdGguCisKKyAgICAgICAgKiBibWFsbG9jL0hlYXAuaDoKKyAgICAgICAgKGJtYWxsb2M6
OkhlYXA6OmRlcmVmU21hbGxMaW5lKToKKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OmRlcmVmTWVk
aXVtTGluZSk6CisgICAgICAgIChibWFsbG9jOjpIZWFwOjpkZWFsbG9jYXRlU21hbGxMaW5lKTog
RGVsZXRlZC4KKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OmFsbG9jYXRlU21hbGxMaW5lKTogRGVs
ZXRlZC4KKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OmRlYWxsb2NhdGVNZWRpdW1MaW5lKTogRGVs
ZXRlZC4KKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OmFsbG9jYXRlTWVkaXVtTGluZSk6IERlbGV0
ZWQuIFVwZGF0ZWQgZm9yIGludGVyZmFjZSBjaGFuZ2VzLgorCisgICAgICAgICogYm1hbGxvYy9M
aW5lLmg6CisgICAgICAgIChibWFsbG9jOjpMaW5lPFRyYWl0cz46OnJlZik6CisgICAgICAgIChi
bWFsbG9jOjpMaW5lPFRyYWl0cz46OmRlcmVmKToKKyAgICAgICAgKGJtYWxsb2M6OkxpbmU8VHJh
aXRzPjo6Y29uY3VycmVudFJlZik6IERlbGV0ZWQuIFdlIGRvbid0IHBhc3MgYSBkZXJlZkNvdW50
CisgICAgICAgIGFueW1vcmUsIHNpbmNlIHdlIG9ubHkgZXZlciBkZXJlZiBieSAxIG5vdy4KKwor
ICAgICAgICAqIGJtYWxsb2MvTWVkaXVtQWxsb2NhdG9yLmg6CisgICAgICAgIChibWFsbG9jOjpN
ZWRpdW1BbGxvY2F0b3I6OmlzTnVsbCk6IERlbGV0ZWQuCisgICAgICAgIChibWFsbG9jOjpNZWRp
dW1BbGxvY2F0b3I6Ok1lZGl1bUFsbG9jYXRvcik6IERlbGV0ZWQuCisgICAgICAgIChibWFsbG9j
OjpNZWRpdW1BbGxvY2F0b3I6OmxpbmUpOiBEZWxldGVkLgorICAgICAgICAoYm1hbGxvYzo6TWVk
aXVtQWxsb2NhdG9yOjphbGxvY2F0ZSk6IERlbGV0ZWQuCisgICAgICAgIChibWFsbG9jOjpNZWRp
dW1BbGxvY2F0b3I6OmRlcmVmQ291bnQpOiBEZWxldGVkLgorICAgICAgICAoYm1hbGxvYzo6TWVk
aXVtQWxsb2NhdG9yOjpyZWZpbGwpOiBEZWxldGVkLgorICAgICAgICAoYm1hbGxvYzo6TWVkaXVt
QWxsb2NhdG9yOjpjbGVhcik6IERlbGV0ZWQuIERlbGV0ZWQgc29tZSBjb2RlIHRoYXQncworICAg
ICAgICBiZWVuIGRlYWQgZm9yIGEgd2hpbGUsIHNpbmNlIGl0IGRvZXNuJ3QgYnVpbGQgYW55bW9y
ZSB3aXRoIHRoaXMgcGF0Y2guCisKKyAgICAgICAgKiBibWFsbG9jL1BhZ2UuaDoKKyAgICAgICAg
KGJtYWxsb2M6OlBhZ2U6OnNpemVDbGFzcyk6CisgICAgICAgIChibWFsbG9jOjpQYWdlOjpzZXRT
aXplQ2xhc3MpOgorICAgICAgICAoYm1hbGxvYzo6UGFnZTo6c21hbGxTaXplQ2xhc3MpOiBEZWxl
dGVkLgorICAgICAgICAoYm1hbGxvYzo6UGFnZTo6c2V0U21hbGxTaXplQ2xhc3MpOiBEZWxldGVk
LiBSZW5hbWVkIHNldFNtYWxsU2l6ZUNsYXNzCisgICAgICAgIHRvIHNpemVDbGFzcywgc2luY2Ug
d2UgdXNlIGl0IGZvciBtZWRpdW0gc2l6ZXMgdG9vLgorCisgICAgICAgICogYm1hbGxvYy9TaXpl
cy5oOgorICAgICAgICAoYm1hbGxvYzo6U2l6ZXM6OnNpemVDbGFzcyk6CisgICAgICAgIChibWFs
bG9jOjpTaXplczo6b2JqZWN0U2l6ZSk6IFNocmFuayBsaW5lIHNpemVzIHRvIHNhdmUgbWVtb3J5
LgorCisgICAgICAgIChibWFsbG9jOjpTaXplczo6c21hbGxTaXplQ2xhc3NGb3IpOiBEZWxldGVk
LgorICAgICAgICAoYm1hbGxvYzo6U2l6ZXM6Om1lZGl1bVNpemVDbGFzc0Zvcik6IERlbGV0ZWQu
CisKKyAgICAgICAgKiBibWFsbG9jL2JtYWxsb2MuaDoKKyAgICAgICAgKGJtYWxsb2M6OmFwaTo6
cmVhbGxvYyk6IE5vdyB0aGF0IHdlIGhhdmUgcHJlY2lzZSBvYmplY3RzIHNpemVzLCByZWFsbG9j
CisgICAgICAgIGNhbiBiZSBhIGJpdCBtb3JlIHByZWNpc2UuIEl0IGFsc28gaGFzIHRvIGJlLCBz
aW5jZSB3ZSBjYW4ndCBndWFyYW50ZWUKKyAgICAgICAgdGhhdCBhbiBvYmplY3QgZW5kcyBhdCB0
aGUgZW5kIG9mIGEgbGluZSBhbnltb3JlLgorCiAyMDE0LTA5LTE5ICBEYW5pZWwgQmF0ZXMgIDxk
YWJhdGVzQGFwcGxlLmNvbT4KIAogICAgICAgICBBbHdheXMgYXNzdW1lIGludGVybmFsIFNESyB3
aGVuIGJ1aWxkaW5nIGNvbmZpZ3VyYXRpb24gUHJvZHVjdGlvbgpJbmRleDogU291cmNlL2JtYWxs
b2MvYm1hbGxvYy54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9ibWFsbG9jL2JtYWxsb2MueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTcz
NjczKQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CSh3b3JraW5nIGNvcHkpCkBAIC0xMSw2ICsxMSw4IEBACiAJCTE0MDAyNzRBMThGODlDMjMwMDEx
NUM5NyAvKiBWTUhlYXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDE0NEY3QkZDMThCRkM1MTcwMDM1MzdGMyAvKiBWTUhlYXAuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxNDAwMjc0QjE4Rjg5QzNEMDAx
MTVDOTcgLyogQm91bmRhcnlUYWdJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAxNDEwNUU3QjE4REJEN0FGMDAzQTEwNkUgLyogQm91bmRhcnlU
YWdJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMTQwMDI3NEMxOEY4OUMzRDAwMTE1Qzk3IC8qIFNlZ3JlZ2F0ZWRGcmVlTGlzdC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ2QkVFMUUxOEM4
NDFDNTAwMDJENUEyIC8qIFNlZ3JlZ2F0ZWRGcmVlTGlzdC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTE0MEZBMDAzMTlDRTQyOUMwMEZGRDNDOCAv
KiBCdW1wUmFuZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDE0MEZBMDAyMTlDRTQyOUMwMEZGRDNDOCAvKiBCdW1wUmFuZ2UuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkxNDBGQTAwNTE5Q0U0QjY4MDBG
RkQzQzggLyogTGluZU1ldGFkYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAxNDBGQTAwNDE5Q0U0QjY4MDBGRkQzQzggLyogTGluZU1ldGFkYXRhLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTQzQ0I4
MUMxOTAyMkJDOTAwQjE2QTQ1IC8qIFN0YXRpY011dGV4LmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0M0NCODFBMTkwMjJCQzkwMEIxNkE0NSAvKiBT
dGF0aWNNdXRleC5jcHAgKi87IH07CiAJCTE0M0NCODFEMTkwMjJCQzkwMEIxNkE0NSAvKiBTdGF0
aWNNdXRleC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MTQzQ0I4MUIxOTAyMkJDOTAwQjE2QTQ1IC8qIFN0YXRpY011dGV4LmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTQ0OEMzMDAxOEYzNzU0NjAwNTAy
ODM5IC8qIG1ibWFsbG9jLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDE0NDhDMkZGMThGMzc1NDMwMDUwMjgzOSAvKiBtYm1hbGxvYy5jcHAgKi87IH07
CkBAIC0yNiw3ICsyOCw2IEBACiAJCTE0REQ3ODk4MThGNDhENEEwMDk1MDcwMiAvKiBBbGxvY2F0
b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0NUY2
ODU2MTc5REM4Q0EwMEQ2NTU5OCAvKiBBbGxvY2F0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxNERENzg5OTE4RjQ4RDRBMDA5NTA3MDIgLyog
Q2FjaGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0
NDQ2OUU1MTdBNDZCRkUwMEY5RUExRCAvKiBDYWNoZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTE0REQ3ODlBMThGNDhENEEwMDk1MDcwMiAvKiBE
ZWFsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMTQ1RjY4NUExNzlEQzkwMjAwRDY1NTk4IC8qIERlYWxsb2NhdG9yLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMTRERDc4OUIxOEY0OEQ0QTAw
OTUwNzAyIC8qIE1lZGl1bUFsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMTQxM0U0NzAxOEEwNjYxNzAwNTQ2RDY4IC8qIE1lZGl1bUFsbG9j
YXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTE0REQ3ODlDMThGNDhENEEwMDk1MDcwMiAvKiBCdW1wQWxsb2NhdG9yLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDEzRTQ2MjE4OURFMUNEMDA1NDZE
NjggLyogQnVtcEFsbG9jYXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTE0REQ3OEI0MThGNDhENkIwMDk1MDcwMiAvKiBDaHVuay5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ3QUFBOTQxOENFNUNB
NjAwMjIwMUU0IC8qIENodW5rLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJMTRERDc4QjUxOEY0OEQ2QjAwOTUwNzAyIC8qIExpbmUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0REEzMjA3MTg4NUY5RTYw
MDcyNjlFMCAvKiBMaW5lLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKQEAgLTcyLDEyICs3MywxMyBAQAogLyogRW5kIFBCWENvbnRhaW5lckl0ZW1Qcm94
eSBzZWN0aW9uICovCiAKIC8qIEJlZ2luIFBCWEZpbGVSZWZlcmVuY2Ugc2VjdGlvbiAqLworCQkx
NDBGQTAwMjE5Q0U0MjlDMDBGRkQzQzggLyogQnVtcFJhbmdlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IEJ1bXBSYW5nZS5oOyBwYXRoID0gYm1hbGxvYy9CdW1wUmFuZ2UuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMTQwRkEwMDQxOUNFNEI2ODAwRkZEM0M4IC8q
IExpbmVNZXRhZGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBMaW5lTWV0
YWRhdGEuaDsgcGF0aCA9IGJtYWxsb2MvTGluZU1ldGFkYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTE0MTA1RTdCMThEQkQ3QUYwMDNBMTA2RSAvKiBCb3VuZGFyeVRhZ0lubGlu
ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQm91bmRhcnlUYWdJbmxpbmVz
Lmg7IHBhdGggPSBibWFsbG9jL0JvdW5kYXJ5VGFnSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkxNDEwNUU4MzE4RTE0Mzc0MDAzQTEwNkUgLyogT2JqZWN0VHlwZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBPYmplY3RUeXBlLmNwcDsgcGF0
aCA9IGJtYWxsb2MvT2JqZWN0VHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTE0MTNFNDYwMTg5RENFMUUwMDU0NkQ2OCAvKiBJbmxpbmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gSW5saW5lLmg7IHBhdGggPSBibWFsbG9jL0lubGluZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkxNDEzRTQ2MjE4OURFMUNEMDA1NDZENjggLyogQnVtcEFs
bG9jYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IGxpbmVFbmRpbmcgPSAwOyBuYW1l
ID0gQnVtcEFsbG9jYXRvci5oOyBwYXRoID0gYm1hbGxvYy9CdW1wQWxsb2NhdG9yLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0MTNFNDY4MTg5RUVERTQwMDU0NkQ2OCAvKiBCQXNz
ZXJ0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEJBc3NlcnQuaDsgcGF0aCA9
IGJtYWxsb2MvQkFzc2VydC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxNDEzRTQ3
MDE4QTA2NjE3MDA1NDZENjggLyogTWVkaXVtQWxsb2NhdG9yLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IE1lZGl1bUFsbG9jYXRvci5oOyBwYXRoID0gYm1hbGxvYy9NZWRpdW1B
bGxvY2F0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQxN0Y2NDUxOEI1NEE3
MDAwNzZGQTNGIC8qIEJlZ2luVGFnLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IEJlZ2luVGFnLmg7IHBhdGggPSBibWFsbG9jL0JlZ2luVGFnLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTE0MTdGNjQ2MThCNTRBNzAwMDc2RkEzRiAvKiBFbmRUYWcuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRW5kVGFnLmg7IHBhdGggPSBibWFsbG9jL0VuZFRh
Zy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDE3RjY0RjE4QjcyODBDMDA3NkZB
M0YgLyogU3lzY2FsbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBTeXNjYWxs
Lmg7IHBhdGggPSBibWFsbG9jL1N5c2NhbGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTIzNSw3ICsyMzcsNiBAQAogCQkJCTE0NDQ2OUU1MTdBNDZCRkUwMEY5RUExRCAvKiBDYWNo
ZS5oICovLAogCQkJCTE0NUY2ODU5MTc5REM5MDIwMEQ2NTU5OCAvKiBEZWFsbG9jYXRvci5jcHAg
Ki8sCiAJCQkJMTQ1RjY4NUExNzlEQzkwMjAwRDY1NTk4IC8qIERlYWxsb2NhdG9yLmggKi8sCi0J
CQkJMTQxM0U0NzAxOEEwNjYxNzAwNTQ2RDY4IC8qIE1lZGl1bUFsbG9jYXRvci5oICovLAogCQkJ
CTE0MTNFNDYyMTg5REUxQ0QwMDU0NkQ2OCAvKiBCdW1wQWxsb2NhdG9yLmggKi8sCiAJCQkpOwog
CQkJbmFtZSA9IGNhY2hlOwpAQCAtMjQ0LDggKzI0NSwxMCBAQAogCQkxNEQ5REI0RTE3RjI4NjZF
MDBFQUFCNzkgLyogaGVhcCAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4g
PSAoCisJCQkJMTQwRkEwMDIxOUNFNDI5QzAwRkZEM0M4IC8qIEJ1bXBSYW5nZS5oICovLAogCQkJ
CTE0REEzMjBFMTg4NzVEOUYwMDcyNjlFMCAvKiBIZWFwLmNwcCAqLywKIAkJCQkxNERBMzIwQzE4
ODc1QjA5MDA3MjY5RTAgLyogSGVhcC5oICovLAorCQkJCTE0MEZBMDA0MTlDRTRCNjgwMEZGRDND
OCAvKiBMaW5lTWV0YWRhdGEuaCAqLywKIAkJCQkxNDEwNUU4MzE4RTE0Mzc0MDAzQTEwNkUgLyog
T2JqZWN0VHlwZS5jcHAgKi8sCiAJCQkJMTQ4NTY1NjAxOEE0M0RCQTAwRUQ2OTQyIC8qIE9iamVj
dFR5cGUuaCAqLywKIAkJCQkxNDVGNjg3NDE3OURGODQxMDBENjU1OTggLyogU2l6ZXMuaCAqLywK
QEAgLTI5Niw2ICsyOTksNyBAQAogCQkJCTE0QzkxOUM5MThGQ0M1OUYwMDI4REI0MyAvKiBCUGxh
dGZvcm0uaCBpbiBIZWFkZXJzICovLAogCQkJCTE0REQ3ODhDMThGNDhDQUUwMDk1MDcwMiAvKiBM
YXJnZUNodW5rLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNERENzg5MjE4RjQ4Q0ZDMDA5NTA3MDIg
LyogRW5kVGFnLmggaW4gSGVhZGVycyAqLywKKwkJCQkxNDBGQTAwNTE5Q0U0QjY4MDBGRkQzQzgg
LyogTGluZU1ldGFkYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNERENzhDQzE4RjQ4RDc1MDA5
NTA3MDIgLyogUGVyVGhyZWFkLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNERENzhCNDE4RjQ4RDZC
MDA5NTA3MDIgLyogQ2h1bmsuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0REQ3OENBMThGNDhENzUw
MDk1MDcwMiAvKiBNdXRleC5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMDksNyArMzEzLDYgQEAKIAkJ
CQkxNERENzhDRDE4RjQ4RDc1MDA5NTA3MDIgLyogUmFuZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTE0REQ3ODlDMThGNDhENEEwMDk1MDcwMiAvKiBCdW1wQWxsb2NhdG9yLmggaW4gSGVhZGVycyAq
LywKIAkJCQkxNERENzg5OTE4RjQ4RDRBMDA5NTA3MDIgLyogQ2FjaGUuaCBpbiBIZWFkZXJzICov
LAotCQkJCTE0REQ3ODlCMThGNDhENEEwMDk1MDcwMiAvKiBNZWRpdW1BbGxvY2F0b3IuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTE0REQ3OEJFMThGNDhENkIwMDk1MDcwMiAvKiBTbWFsbFRyYWl0cy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMTRERDc4OTAxOEY0OENFQjAwOTUwNzAyIC8qIFNpemVzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkxNERENzhDNzE4RjQ4RDc1MDA5NTA3MDIgLyogQkFzc2VydC5o
IGluIEhlYWRlcnMgKi8sCkBAIC0zMjIsNiArMzI1LDcgQEAKIAkJCQkxNDAwMjc0QTE4Rjg5QzIz
MDAxMTVDOTcgLyogVk1IZWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDAwMjc0OTE4Rjg5QzEz
MDAxMTVDOTcgLyogSGVhcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRERDc4QjgxOEY0OEQ2QjAw
OTUwNzAyIC8qIE1lZGl1bVBhZ2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTE0MEZBMDAzMTlDRTQy
OUMwMEZGRDNDOCAvKiBCdW1wUmFuZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0REQ3OEM1MThG
NDhENzUwMDk1MDcwMiAvKiBBbGdvcml0aG0uaCBpbiBIZWFkZXJzICovLAogCQkJCTE0REQ3OEJE
MThGNDhENkIwMDk1MDcwMiAvKiBTbWFsbFBhZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0MDAy
NzRCMThGODlDM0QwMDExNUM5NyAvKiBCb3VuZGFyeVRhZ0lubGluZXMuaCBpbiBIZWFkZXJzICov
LApJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9BbGdvcml0aG0uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0FsZ29yaXRobS5oCShyZXZpc2lvbiAxNzM2NzMpCisr
KyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0FsZ29yaXRobS5oCSh3b3JraW5nIGNvcHkpCkBAIC03
NCw2ICs3NCwxNCBAQCB0ZW1wbGF0ZTxzaXplX3QgZGl2aXNvciwgdHlwZW5hbWUgVD4gaW5sCiAg
ICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VD4obWFzayhyZWludGVycHJldF9jYXN0PHVpbnRw
dHJfdD4oeCksIH4oZGl2aXNvciAtIDF1bCkpKTsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUgVD4g
dm9pZCBkaXZpZGVSb3VuZGluZ1VwKFQgbnVtZXJhdG9yLCBUIGRlbm9taW5hdG9yLCBUJiBxdW90
aWVudCwgVCYgcmVtYWluZGVyKQoreworICAgIHF1b3RpZW50ID0gbnVtZXJhdG9yIC8gZGVub21p
bmF0b3I7CisgICAgcmVtYWluZGVyID0gbnVtZXJhdG9yICUgZGVub21pbmF0b3I7CisgICAgaWYg
KHJlbWFpbmRlcikKKyAgICAgICAgcXVvdGllbnQgKz0gMTsKK30KKwogLy8gVmVyc2lvbiBvZiBz
aXplb2YgdGhhdCByZXR1cm5zIDAgZm9yIGVtcHR5IGNsYXNzZXMuCiAKIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+IGlubGluZSBjb25zdGV4cHIgc2l6ZV90IHNpemVPZigpCkluZGV4OiBTb3VyY2UvYm1h
bGxvYy9ibWFsbG9jL0FsbG9jYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2Mv
Ym1hbGxvYy9BbGxvY2F0b3IuY3BwCShyZXZpc2lvbiAxNzM2NzUpCisrKyBTb3VyY2UvYm1hbGxv
Yy9ibWFsbG9jL0FsbG9jYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDExICszOCwxMSBA
QCBuYW1lc3BhY2UgYm1hbGxvYyB7CiBBbGxvY2F0b3I6OkFsbG9jYXRvcihEZWFsbG9jYXRvciYg
ZGVhbGxvY2F0b3IpCiAgICAgOiBtX2RlYWxsb2NhdG9yKGRlYWxsb2NhdG9yKQogewotICAgIGZv
ciAodW5zaWduZWQgc2hvcnQgaSA9IGFsaWdubWVudDsgaSA8PSBzbWFsbE1heDsgaSArPSBhbGln
bm1lbnQpCi0gICAgICAgIG1fc21hbGxBbGxvY2F0b3JzW3NtYWxsU2l6ZUNsYXNzRm9yKGkpXS5p
bml0PFNtYWxsTGluZT4oaSk7CisgICAgZm9yICh1bnNpZ25lZCBzaG9ydCBzaXplID0gYWxpZ25t
ZW50OyBzaXplIDw9IHNtYWxsTWF4OyBzaXplICs9IGFsaWdubWVudCkKKyAgICAgICAgbV9idW1w
QWxsb2NhdG9yc1tzaXplQ2xhc3Moc2l6ZSldLmluaXQoc2l6ZSk7CiAKLSAgICBmb3IgKHVuc2ln
bmVkIHNob3J0IGkgPSBzbWFsbE1heCArIGFsaWdubWVudDsgaSA8PSBtZWRpdW1NYXg7IGkgKz0g
YWxpZ25tZW50KQotICAgICAgICBtX21lZGl1bUFsbG9jYXRvcnNbbWVkaXVtU2l6ZUNsYXNzRm9y
KGkpXS5pbml0PE1lZGl1bUxpbmU+KGkpOworICAgIGZvciAodW5zaWduZWQgc2hvcnQgc2l6ZSA9
IHNtYWxsTWF4ICsgYWxpZ25tZW50OyBzaXplIDw9IG1lZGl1bU1heDsgc2l6ZSArPSBhbGlnbm1l
bnQpCisgICAgICAgIG1fYnVtcEFsbG9jYXRvcnNbc2l6ZUNsYXNzKHNpemUpXS5pbml0KHNpemUp
OwogfQogCiBBbGxvY2F0b3I6On5BbGxvY2F0b3IoKQpAQCAtNTIsNTQgKzUyLDUzIEBAIEFsbG9j
YXRvcjo6fkFsbG9jYXRvcigpCiAKIHZvaWQgQWxsb2NhdG9yOjpzY2F2ZW5nZSgpCiB7Ci0gICAg
Zm9yIChhdXRvJiBhbGxvY2F0b3IgOiBtX3NtYWxsQWxsb2NhdG9ycykgewotICAgICAgICB3aGls
ZSAoYWxsb2NhdG9yLmNhbkFsbG9jYXRlKCkpCi0gICAgICAgICAgICBtX2RlYWxsb2NhdG9yLmRl
YWxsb2NhdGUoYWxsb2NhdG9yLmFsbG9jYXRlKCkpOworICAgIGZvciAodW5zaWduZWQgc2hvcnQg
aSA9IGFsaWdubWVudDsgaSA8PSBzbWFsbE1heDsgaSArPSBhbGlnbm1lbnQpIHsKKyAgICAgICAg
QnVtcEFsbG9jYXRvciYgYWxsb2NhdG9yID0gbV9idW1wQWxsb2NhdG9yc1tzaXplQ2xhc3MoaSld
OworICAgICAgICB3aGlsZSAoYWxsb2NhdG9yLmNhbkFsbG9jYXRlKCkpIHsKKyAgICAgICAgICAg
IHdoaWxlIChhbGxvY2F0b3IuY2FuQWxsb2NhdGUoKSkKKyAgICAgICAgICAgICAgICBtX2RlYWxs
b2NhdG9yLmRlYWxsb2NhdGUoYWxsb2NhdG9yLmFsbG9jYXRlKCkpOworCisgICAgICAgICAgICBT
bWFsbEJ1bXBSYW5nZUNhY2hlJiBidW1wUmFuZ2VDYWNoZSA9IG1fc21hbGxCdW1wUmFuZ2VDYWNo
ZXNbc2l6ZUNsYXNzKGkpXTsKKyAgICAgICAgICAgIGlmIChidW1wUmFuZ2VDYWNoZS5zaXplKCkp
CisgICAgICAgICAgICAgICAgYWxsb2NhdG9yLnJlZmlsbChidW1wUmFuZ2VDYWNoZS5wb3AoKSk7
CisgICAgICAgIH0KICAgICAgICAgYWxsb2NhdG9yLmNsZWFyKCk7CiAgICAgfQogCi0gICAgZm9y
IChhdXRvJiBhbGxvY2F0b3IgOiBtX21lZGl1bUFsbG9jYXRvcnMpIHsKLSAgICAgICAgd2hpbGUg
KGFsbG9jYXRvci5jYW5BbGxvY2F0ZSgpKQotICAgICAgICAgICAgbV9kZWFsbG9jYXRvci5kZWFs
bG9jYXRlKGFsbG9jYXRvci5hbGxvY2F0ZSgpKTsKKyAgICBmb3IgKHVuc2lnbmVkIHNob3J0IGkg
PSBzbWFsbE1heCArIGFsaWdubWVudDsgaSA8PSBtZWRpdW1NYXg7IGkgKz0gYWxpZ25tZW50KSB7
CisgICAgICAgIEJ1bXBBbGxvY2F0b3ImIGFsbG9jYXRvciA9IG1fYnVtcEFsbG9jYXRvcnNbc2l6
ZUNsYXNzKGkpXTsKKyAgICAgICAgd2hpbGUgKGFsbG9jYXRvci5jYW5BbGxvY2F0ZSgpKSB7Cisg
ICAgICAgICAgICB3aGlsZSAoYWxsb2NhdG9yLmNhbkFsbG9jYXRlKCkpCisgICAgICAgICAgICAg
ICAgbV9kZWFsbG9jYXRvci5kZWFsbG9jYXRlKGFsbG9jYXRvci5hbGxvY2F0ZSgpKTsKKworICAg
ICAgICAgICAgTWVkaXVtQnVtcFJhbmdlQ2FjaGUmIGJ1bXBSYW5nZUNhY2hlID0gbV9tZWRpdW1C
dW1wUmFuZ2VDYWNoZXNbc2l6ZUNsYXNzKGkpXTsKKyAgICAgICAgICAgIGlmIChidW1wUmFuZ2VD
YWNoZS5zaXplKCkpCisgICAgICAgICAgICAgICAgYWxsb2NhdG9yLnJlZmlsbChidW1wUmFuZ2VD
YWNoZS5wb3AoKSk7CisgICAgICAgIH0KICAgICAgICAgYWxsb2NhdG9yLmNsZWFyKCk7CiAgICAg
fQotCi0gICAgc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiBsb2NrKFBlclByb2Nlc3M8SGVh
cD46Om11dGV4KCkpOwotICAgIEhlYXAqIGhlYXAgPSBQZXJQcm9jZXNzPEhlYXA+OjpnZXRGYXN0
Q2FzZSgpOwotICAgIAotICAgIGZvciAoYXV0byYgc21hbGxMaW5lQ2FjaGUgOiBtX3NtYWxsTGlu
ZUNhY2hlcykgewotICAgICAgICB3aGlsZSAoc21hbGxMaW5lQ2FjaGUuc2l6ZSgpKQotICAgICAg
ICAgICAgaGVhcC0+ZGVhbGxvY2F0ZVNtYWxsTGluZShsb2NrLCBzbWFsbExpbmVDYWNoZS5wb3Ao
KSk7Ci0gICAgfQotICAgIHdoaWxlIChtX21lZGl1bUxpbmVDYWNoZS5zaXplKCkpCi0gICAgICAg
IGhlYXAtPmRlYWxsb2NhdGVNZWRpdW1MaW5lKGxvY2ssIG1fbWVkaXVtTGluZUNhY2hlLnBvcCgp
KTsKIH0KIAotU21hbGxMaW5lKiBBbGxvY2F0b3I6OmFsbG9jYXRlU21hbGxMaW5lKHNpemVfdCBz
bWFsbFNpemVDbGFzcykKK0J1bXBSYW5nZSBBbGxvY2F0b3I6OmFsbG9jYXRlU21hbGxCdW1wUmFu
Z2Uoc2l6ZV90IHNpemVDbGFzcykKIHsKLSAgICBTbWFsbExpbmVDYWNoZSYgc21hbGxMaW5lQ2Fj
aGUgPSBtX3NtYWxsTGluZUNhY2hlc1tzbWFsbFNpemVDbGFzc107Ci0gICAgaWYgKCFzbWFsbExp
bmVDYWNoZS5zaXplKCkpIHsKKyAgICBTbWFsbEJ1bXBSYW5nZUNhY2hlJiBidW1wUmFuZ2VDYWNo
ZSA9IG1fc21hbGxCdW1wUmFuZ2VDYWNoZXNbc2l6ZUNsYXNzXTsKKyAgICBpZiAoIWJ1bXBSYW5n
ZUNhY2hlLnNpemUoKSkgewogICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+IGxv
Y2soUGVyUHJvY2VzczxIZWFwPjo6bXV0ZXgoKSk7Ci0gICAgICAgIEhlYXAqIGhlYXAgPSBQZXJQ
cm9jZXNzPEhlYXA+OjpnZXRGYXN0Q2FzZSgpOwotCi0gICAgICAgIHdoaWxlIChzbWFsbExpbmVD
YWNoZS5zaXplKCkgIT0gc21hbGxMaW5lQ2FjaGUuY2FwYWNpdHkoKSkKLSAgICAgICAgICAgIHNt
YWxsTGluZUNhY2hlLnB1c2goaGVhcC0+YWxsb2NhdGVTbWFsbExpbmUobG9jaywgc21hbGxTaXpl
Q2xhc3MpKTsKKyAgICAgICAgUGVyUHJvY2VzczxIZWFwPjo6Z2V0RmFzdENhc2UoKS0+cmVmaWxs
U21hbGxCdW1wUmFuZ2VDYWNoZShsb2NrLCBzaXplQ2xhc3MsIGJ1bXBSYW5nZUNhY2hlKTsKICAg
ICB9CiAKLSAgICByZXR1cm4gc21hbGxMaW5lQ2FjaGUucG9wKCk7CisgICAgcmV0dXJuIGJ1bXBS
YW5nZUNhY2hlLnBvcCgpOwogfQogCi1NZWRpdW1MaW5lKiBBbGxvY2F0b3I6OmFsbG9jYXRlTWVk
aXVtTGluZSgpCitCdW1wUmFuZ2UgQWxsb2NhdG9yOjphbGxvY2F0ZU1lZGl1bUJ1bXBSYW5nZShz
aXplX3Qgc2l6ZUNsYXNzKQogewotICAgIGlmICghbV9tZWRpdW1MaW5lQ2FjaGUuc2l6ZSgpKSB7
CisgICAgTWVkaXVtQnVtcFJhbmdlQ2FjaGUmIGJ1bXBSYW5nZUNhY2hlID0gbV9tZWRpdW1CdW1w
UmFuZ2VDYWNoZXNbc2l6ZUNsYXNzXTsKKyAgICBpZiAoIWJ1bXBSYW5nZUNhY2hlLnNpemUoKSkg
ewogICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+IGxvY2soUGVyUHJvY2VzczxI
ZWFwPjo6bXV0ZXgoKSk7Ci0gICAgICAgIEhlYXAqIGhlYXAgPSBQZXJQcm9jZXNzPEhlYXA+Ojpn
ZXRGYXN0Q2FzZSgpOwotCi0gICAgICAgIHdoaWxlIChtX21lZGl1bUxpbmVDYWNoZS5zaXplKCkg
IT0gbV9tZWRpdW1MaW5lQ2FjaGUuY2FwYWNpdHkoKSkKLSAgICAgICAgICAgIG1fbWVkaXVtTGlu
ZUNhY2hlLnB1c2goaGVhcC0+YWxsb2NhdGVNZWRpdW1MaW5lKGxvY2spKTsKKyAgICAgICAgUGVy
UHJvY2VzczxIZWFwPjo6Z2V0RmFzdENhc2UoKS0+cmVmaWxsTWVkaXVtQnVtcFJhbmdlQ2FjaGUo
bG9jaywgc2l6ZUNsYXNzLCBidW1wUmFuZ2VDYWNoZSk7CiAgICAgfQogCi0gICAgcmV0dXJuIG1f
bWVkaXVtTGluZUNhY2hlLnBvcCgpOworICAgIHJldHVybiBidW1wUmFuZ2VDYWNoZS5wb3AoKTsK
IH0KIAogdm9pZCogQWxsb2NhdG9yOjphbGxvY2F0ZUxhcmdlKHNpemVfdCBzaXplKQpAQCAtMTE2
LDMwICsxMTUsMjcgQEAgdm9pZCogQWxsb2NhdG9yOjphbGxvY2F0ZVhMYXJnZShzaXplX3Qgcwog
ICAgIHJldHVybiBQZXJQcm9jZXNzPEhlYXA+OjpnZXRGYXN0Q2FzZSgpLT5hbGxvY2F0ZVhMYXJn
ZShsb2NrLCBzaXplKTsKIH0KIAotdm9pZCogQWxsb2NhdG9yOjphbGxvY2F0ZU1lZGl1bShzaXpl
X3Qgc2l6ZSkKLXsKLSAgICBCdW1wQWxsb2NhdG9yJiBhbGxvY2F0b3IgPSBtX21lZGl1bUFsbG9j
YXRvcnNbbWVkaXVtU2l6ZUNsYXNzRm9yKHNpemUpXTsKLQotICAgIGlmICghYWxsb2NhdG9yLmNh
bkFsbG9jYXRlKCkpCi0gICAgICAgIGFsbG9jYXRvci5yZWZpbGwoYWxsb2NhdGVNZWRpdW1MaW5l
KCkpOwotICAgIHJldHVybiBhbGxvY2F0b3IuYWxsb2NhdGUoKTsKLX0KLQogdm9pZCogQWxsb2Nh
dG9yOjphbGxvY2F0ZVNsb3dDYXNlKHNpemVfdCBzaXplKQogewogSUZfREVCVUcoCiAgICAgdm9p
ZCogZHVtbXk7CiAgICAgQkFTU0VSVCghYWxsb2NhdGVGYXN0Q2FzZShzaXplLCBkdW1teSkpOwog
KQotICAgIGlmIChzaXplIDw9IHNtYWxsTWF4KSB7Ci0gICAgICAgIHNpemVfdCBzbWFsbFNpemVD
bGFzcyA9IHNtYWxsU2l6ZUNsYXNzRm9yKHNpemUpOwotICAgICAgICBCdW1wQWxsb2NhdG9yJiBh
bGxvY2F0b3IgPSBtX3NtYWxsQWxsb2NhdG9yc1tzbWFsbFNpemVDbGFzc107Ci0gICAgICAgIGFs
bG9jYXRvci5yZWZpbGwoYWxsb2NhdGVTbWFsbExpbmUoc21hbGxTaXplQ2xhc3MpKTsKLSAgICAg
ICAgcmV0dXJuIGFsbG9jYXRvci5hbGxvY2F0ZSgpOwotICAgIH0KIAotICAgIGlmIChzaXplIDw9
IG1lZGl1bU1heCkKLSAgICAgICAgcmV0dXJuIGFsbG9jYXRlTWVkaXVtKHNpemUpOworICAgIGlm
IChzaXplIDw9IG1lZGl1bU1heCkgeworICAgICAgICBzaXplX3Qgc2l6ZUNsYXNzID0gYm1hbGxv
Yzo6c2l6ZUNsYXNzKHNpemUpOworICAgICAgICBCdW1wQWxsb2NhdG9yJiBhbGxvY2F0b3IgPSBt
X2J1bXBBbGxvY2F0b3JzW3NpemVDbGFzc107CisKKyAgICAgICAgaWYgKGFsbG9jYXRvci5zaXpl
KCkgPD0gc21hbGxNYXgpIHsKKyAgICAgICAgICAgIGFsbG9jYXRvci5yZWZpbGwoYWxsb2NhdGVT
bWFsbEJ1bXBSYW5nZShzaXplQ2xhc3MpKTsKKyAgICAgICAgICAgIHJldHVybiBhbGxvY2F0b3Iu
YWxsb2NhdGUoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChhbGxvY2F0b3Iuc2l6ZSgpIDw9
IG1lZGl1bU1heCkgeworICAgICAgICAgICAgYWxsb2NhdG9yLnJlZmlsbChhbGxvY2F0ZU1lZGl1
bUJ1bXBSYW5nZShzaXplQ2xhc3MpKTsKKyAgICAgICAgICAgIHJldHVybiBhbGxvY2F0b3IuYWxs
b2NhdGUoKTsKKyAgICAgICAgfQorICAgIH0KICAgICAKICAgICBpZiAoc2l6ZSA8PSBsYXJnZU1h
eCkKICAgICAgICAgcmV0dXJuIGFsbG9jYXRlTGFyZ2Uoc2l6ZSk7CkluZGV4OiBTb3VyY2UvYm1h
bGxvYy9ibWFsbG9jL0FsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2Jt
YWxsb2MvQWxsb2NhdG9yLmgJKHJldmlzaW9uIDE3MzY3NSkKKysrIFNvdXJjZS9ibWFsbG9jL2Jt
YWxsb2MvQWxsb2NhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAKIAogI2lu
Y2x1ZGUgIkJ1bXBBbGxvY2F0b3IuaCIKICNpbmNsdWRlICJGaXhlZFZlY3Rvci5oIgotI2luY2x1
ZGUgIk1lZGl1bUFsbG9jYXRvci5oIgorI2luY2x1ZGUgIkhlYXAuaCIKICNpbmNsdWRlICJTaXpl
cy5oIgogI2luY2x1ZGUgIlNtYWxsTGluZS5oIgogI2luY2x1ZGUgPGFycmF5PgpAQCAtNTEsMzMg
KzUxLDI5IEBAIHB1YmxpYzoKICAgICB2b2lkIHNjYXZlbmdlKCk7CiAKIHByaXZhdGU6Ci0gICAg
dHlwZWRlZiBGaXhlZFZlY3RvcjxTbWFsbExpbmUqLCBzbWFsbExpbmVDYWNoZUNhcGFjaXR5PiBT
bWFsbExpbmVDYWNoZTsKLSAgICB0eXBlZGVmIEZpeGVkVmVjdG9yPE1lZGl1bUxpbmUqLCBtZWRp
dW1MaW5lQ2FjaGVDYXBhY2l0eT4gTWVkaXVtTGluZUNhY2hlOwotCiAgICAgdm9pZCogYWxsb2Nh
dGVGYXN0Q2FzZShCdW1wQWxsb2NhdG9yJik7CiAKICAgICB2b2lkKiBhbGxvY2F0ZU1lZGl1bShz
aXplX3QpOwogICAgIHZvaWQqIGFsbG9jYXRlTGFyZ2Uoc2l6ZV90KTsKICAgICB2b2lkKiBhbGxv
Y2F0ZVhMYXJnZShzaXplX3QpOwogICAgIAotICAgIFNtYWxsTGluZSogYWxsb2NhdGVTbWFsbExp
bmUoc2l6ZV90IHNtYWxsU2l6ZUNsYXNzKTsKLSAgICBNZWRpdW1MaW5lKiBhbGxvY2F0ZU1lZGl1
bUxpbmUoKTsKKyAgICBCdW1wUmFuZ2UgYWxsb2NhdGVTbWFsbEJ1bXBSYW5nZShzaXplX3Qgc2l6
ZUNsYXNzKTsKKyAgICBCdW1wUmFuZ2UgYWxsb2NhdGVNZWRpdW1CdW1wUmFuZ2Uoc2l6ZV90IHNp
emVDbGFzcyk7CiAgICAgCiAgICAgRGVhbGxvY2F0b3ImIG1fZGVhbGxvY2F0b3I7CiAKLSAgICBz
dGQ6OmFycmF5PEJ1bXBBbGxvY2F0b3IsIHNtYWxsTWF4IC8gYWxpZ25tZW50PiBtX3NtYWxsQWxs
b2NhdG9yczsKLSAgICBzdGQ6OmFycmF5PEJ1bXBBbGxvY2F0b3IsIG1lZGl1bU1heCAvIGFsaWdu
bWVudD4gbV9tZWRpdW1BbGxvY2F0b3JzOworICAgIHN0ZDo6YXJyYXk8QnVtcEFsbG9jYXRvciwg
bWVkaXVtTWF4IC8gYWxpZ25tZW50PiBtX2J1bXBBbGxvY2F0b3JzOwogCi0gICAgc3RkOjphcnJh
eTxTbWFsbExpbmVDYWNoZSwgc21hbGxNYXggLyBhbGlnbm1lbnQ+IG1fc21hbGxMaW5lQ2FjaGVz
OwotICAgIE1lZGl1bUxpbmVDYWNoZSBtX21lZGl1bUxpbmVDYWNoZTsKKyAgICBzdGQ6OmFycmF5
PFNtYWxsQnVtcFJhbmdlQ2FjaGUsIHNtYWxsTWF4IC8gYWxpZ25tZW50PiBtX3NtYWxsQnVtcFJh
bmdlQ2FjaGVzOworICAgIHN0ZDo6YXJyYXk8TWVkaXVtQnVtcFJhbmdlQ2FjaGUsIG1lZGl1bU1h
eCAvIGFsaWdubWVudD4gbV9tZWRpdW1CdW1wUmFuZ2VDYWNoZXM7CiB9OwogCiBpbmxpbmUgYm9v
bCBBbGxvY2F0b3I6OmFsbG9jYXRlRmFzdENhc2Uoc2l6ZV90IHNpemUsIHZvaWQqJiBvYmplY3Qp
CiB7Ci0gICAgaWYgKHNpemUgPiBzbWFsbE1heCkKKyAgICBpZiAoc2l6ZSA+IG1lZGl1bU1heCkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgQnVtcEFsbG9jYXRvciYgYWxsb2NhdG9yID0g
bV9zbWFsbEFsbG9jYXRvcnNbc21hbGxTaXplQ2xhc3NGb3Ioc2l6ZSldOworICAgIEJ1bXBBbGxv
Y2F0b3ImIGFsbG9jYXRvciA9IG1fYnVtcEFsbG9jYXRvcnNbc2l6ZUNsYXNzKHNpemUpXTsKICAg
ICBpZiAoIWFsbG9jYXRvci5jYW5BbGxvY2F0ZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
SW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQnVtcEFsbG9jYXRvci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQnVtcEFsbG9jYXRvci5oCShyZXZpc2lvbiAxNzM2
NzMpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0J1bXBBbGxvY2F0b3IuaAkod29ya2luZyBj
b3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2RlZmluZSBCdW1wQWxsb2NhdG9yX2gKIAogI2luY2x1
ZGUgIkJBc3NlcnQuaCIKKyNpbmNsdWRlICJCdW1wUmFuZ2UuaCIKICNpbmNsdWRlICJPYmplY3RU
eXBlLmgiCiAKIG5hbWVzcGFjZSBibWFsbG9jIHsKQEAgLTM2LDQ5ICszNywzOCBAQCBuYW1lc3Bh
Y2UgYm1hbGxvYyB7CiBjbGFzcyBCdW1wQWxsb2NhdG9yIHsKIHB1YmxpYzoKICAgICBCdW1wQWxs
b2NhdG9yKCk7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgTGluZT4gdm9pZCBpbml0KHNpemVfdCk7
CisgICAgdm9pZCBpbml0KHNpemVfdCk7CisgICAgCisgICAgc2l6ZV90IHNpemUoKSB7IHJldHVy
biBtX3NpemU7IH0KICAgICAKICAgICBib29sIGlzTnVsbCgpIHsgcmV0dXJuICFtX3B0cjsgfQot
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIExpbmU+IExpbmUqIGxpbmUoKTsKKyAgICB2b2lkIGNsZWFy
KCk7CiAKICAgICBib29sIGNhbkFsbG9jYXRlKCkgeyByZXR1cm4gISFtX3JlbWFpbmluZzsgfQog
ICAgIHZvaWQqIGFsbG9jYXRlKCk7CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBMaW5lPiB2b2lk
IHJlZmlsbChMaW5lKik7Ci0gICAgdm9pZCBjbGVhcigpOworICAgIHZvaWQgcmVmaWxsKGNvbnN0
IEJ1bXBSYW5nZSYpOwogCiBwcml2YXRlOgogICAgIHZvaWQgdmFsaWRhdGUodm9pZCopOwogCiAg
ICAgY2hhciogbV9wdHI7CiAgICAgdW5zaWduZWQgc2hvcnQgbV9zaXplOwotICAgIHVuc2lnbmVk
IGNoYXIgbV9yZW1haW5pbmc7Ci0gICAgdW5zaWduZWQgY2hhciBtX21heE9iamVjdENvdW50Owor
ICAgIHVuc2lnbmVkIHNob3J0IG1fcmVtYWluaW5nOwogfTsKIAogaW5saW5lIEJ1bXBBbGxvY2F0
b3I6OkJ1bXBBbGxvY2F0b3IoKQogICAgIDogbV9wdHIoKQogICAgICwgbV9zaXplKCkKICAgICAs
IG1fcmVtYWluaW5nKCkKLSAgICAsIG1fbWF4T2JqZWN0Q291bnQoKQogewogfQogCi10ZW1wbGF0
ZTx0eXBlbmFtZSBMaW5lPgogaW5saW5lIHZvaWQgQnVtcEFsbG9jYXRvcjo6aW5pdChzaXplX3Qg
c2l6ZSkKIHsKLSAgICBCQVNTRVJUKHNpemUgPj0gTGluZTo6bWluaW11bU9iamVjdFNpemUpOwot
CiAgICAgbV9wdHIgPSBudWxscHRyOwogICAgIG1fc2l6ZSA9IHNpemU7CiAgICAgbV9yZW1haW5p
bmcgPSAwOwotICAgIG1fbWF4T2JqZWN0Q291bnQgPSBMaW5lOjpsaW5lU2l6ZSAvIHNpemU7Ci19
Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIExpbmU+Ci1pbmxpbmUgTGluZSogQnVtcEFsbG9jYXRvcjo6
bGluZSgpCi17Ci0gICAgcmV0dXJuIExpbmU6OmdldChjYW5BbGxvY2F0ZSgpID8gbV9wdHIgOiBt
X3B0ciAtIDEpOwogfQogCiBpbmxpbmUgdm9pZCBCdW1wQWxsb2NhdG9yOjp2YWxpZGF0ZSh2b2lk
KiBwdHIpCkBAIC0xMDQsMTMgKzk0LDExIEBAIGlubGluZSB2b2lkKiBCdW1wQWxsb2NhdG9yOjph
bGxvY2F0ZSgpCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgTGlu
ZT4KLWlubGluZSB2b2lkIEJ1bXBBbGxvY2F0b3I6OnJlZmlsbChMaW5lKiBsaW5lKQoraW5saW5l
IHZvaWQgQnVtcEFsbG9jYXRvcjo6cmVmaWxsKGNvbnN0IEJ1bXBSYW5nZSYgYnVtcFJhbmdlKQog
ewogICAgIEJBU1NFUlQoIWNhbkFsbG9jYXRlKCkpOwotICAgIGxpbmUtPmNvbmN1cnJlbnRSZWYo
bV9tYXhPYmplY3RDb3VudCk7Ci0gICAgbV9wdHIgPSBsaW5lLT5iZWdpbigpOwotICAgIG1fcmVt
YWluaW5nID0gbV9tYXhPYmplY3RDb3VudDsKKyAgICBtX3B0ciA9IGJ1bXBSYW5nZS5iZWdpbjsK
KyAgICBtX3JlbWFpbmluZyA9IGJ1bXBSYW5nZS5vYmplY3RDb3VudDsKIH0KIAogaW5saW5lIHZv
aWQgQnVtcEFsbG9jYXRvcjo6Y2xlYXIoKQpJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9C
dW1wUmFuZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0J1bXBSYW5n
ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9CdW1wUmFuZ2UuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQnVtcFJhbmdlX2gKKyNkZWZpbmUgQnVtcFJh
bmdlX2gKKworI2luY2x1ZGUgIkZpeGVkVmVjdG9yLmgiCisjaW5jbHVkZSAiUmFuZ2UuaCIKKyNp
bmNsdWRlICJTaXplcy5oIgorCituYW1lc3BhY2UgYm1hbGxvYyB7CisKK3N0cnVjdCBCdW1wUmFu
Z2UgeworICAgIGNoYXIqIGJlZ2luOworICAgIHVuc2lnbmVkIHNob3J0IG9iamVjdENvdW50Owor
fTsKKwordHlwZWRlZiBGaXhlZFZlY3RvcjxCdW1wUmFuZ2UsIHNtYWxsUmFuZ2VDYWNoZUNhcGFj
aXR5PiBTbWFsbEJ1bXBSYW5nZUNhY2hlOwordHlwZWRlZiBGaXhlZFZlY3RvcjxCdW1wUmFuZ2Us
IG1lZGl1bVJhbmdlQ2FjaGVDYXBhY2l0eT4gTWVkaXVtQnVtcFJhbmdlQ2FjaGU7CisKK30gLy8g
bmFtZXNwYWNlIGJtYWxsb2MKKworI2VuZGlmIC8vIEJ1bXBSYW5nZV9oCkluZGV4OiBTb3VyY2Uv
Ym1hbGxvYy9ibWFsbG9jL0RlYWxsb2NhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1h
bGxvYy9ibWFsbG9jL0RlYWxsb2NhdG9yLmNwcAkocmV2aXNpb24gMTczNjc1KQorKysgU291cmNl
L2JtYWxsb2MvYm1hbGxvYy9EZWFsbG9jYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcyLDE1
ICs3MiwxMSBAQCB2b2lkIERlYWxsb2NhdG9yOjpwcm9jZXNzT2JqZWN0TG9nKCkKICAgICBmb3Ig
KGF1dG8gb2JqZWN0IDogbV9vYmplY3RMb2cpIHsKICAgICAgICAgaWYgKGlzU21hbGwob2JqZWN0
KSkgewogICAgICAgICAgICAgU21hbGxMaW5lKiBsaW5lID0gU21hbGxMaW5lOjpnZXQob2JqZWN0
KTsKLSAgICAgICAgICAgIGlmICghbGluZS0+ZGVyZWYobG9jaykpCi0gICAgICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgICAgICBoZWFwLT5kZWFsbG9jYXRlU21hbGxMaW5lKGxvY2ssIGxp
bmUpOworICAgICAgICAgICAgaGVhcC0+ZGVyZWZTbWFsbExpbmUobG9jaywgbGluZSk7CiAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBCQVNTRVJUKGlzU21hbGxPck1lZGl1bShvYmplY3Qp
KTsKKyAgICAgICAgICAgIEJBU1NFUlQoaXNNZWRpdW0ob2JqZWN0KSk7CiAgICAgICAgICAgICBN
ZWRpdW1MaW5lKiBsaW5lID0gTWVkaXVtTGluZTo6Z2V0KG9iamVjdCk7Ci0gICAgICAgICAgICBp
ZiAoIWxpbmUtPmRlcmVmKGxvY2spKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICAgICAgaGVhcC0+ZGVhbGxvY2F0ZU1lZGl1bUxpbmUobG9jaywgbGluZSk7CisgICAgICAgICAg
ICBoZWFwLT5kZXJlZk1lZGl1bUxpbmUobG9jaywgbGluZSk7CiAgICAgICAgIH0KICAgICB9CiAg
ICAgCkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0hlYXAuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSGVhcC5jcHAJKHJldmlzaW9uIDE3MzY3MykKKysrIFNv
dXJjZS9ibWFsbG9jL2JtYWxsb2MvSGVhcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDYgKzUw
LDQyIEBAIEhlYXA6OkhlYXAoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYKICAgICA6IG1f
aXNBbGxvY2F0aW5nUGFnZXMoZmFsc2UpCiAgICAgLCBtX3NjYXZlbmdlcigqdGhpcywgJkhlYXA6
OmNvbmN1cnJlbnRTY2F2ZW5nZSkKIHsKKyAgICBpbml0aWFsaXplTGluZU1ldGFkYXRhKCk7Cit9
CisKK3ZvaWQgSGVhcDo6aW5pdGlhbGl6ZUxpbmVNZXRhZGF0YSgpCit7CisgICAgZm9yICh1bnNp
Z25lZCBzaG9ydCBzaXplID0gYWxpZ25tZW50OyBzaXplIDw9IHNtYWxsTWF4OyBzaXplICs9IGFs
aWdubWVudCkgeworICAgICAgICB1bnNpZ25lZCBzaG9ydCBzdGFydE9mZnNldCA9IDA7CisgICAg
ICAgIGZvciAoc2l6ZV90IGxpbmVOdW1iZXIgPSAwOyBsaW5lTnVtYmVyIDwgU21hbGxQYWdlOjps
aW5lQ291bnQgLSAxOyArK2xpbmVOdW1iZXIpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0
IG9iamVjdENvdW50OworICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgcmVtYWluZGVyOworICAg
ICAgICAgICAgZGl2aWRlUm91bmRpbmdVcChzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oU21h
bGxQYWdlOjpsaW5lU2l6ZSAtIHN0YXJ0T2Zmc2V0KSwgc2l6ZSwgb2JqZWN0Q291bnQsIHJlbWFp
bmRlcik7CisgICAgICAgICAgICBCQVNTRVJUKG9iamVjdENvdW50KTsKKyAgICAgICAgICAgIG1f
c21hbGxMaW5lTWV0YWRhdGFbc2l6ZUNsYXNzKHNpemUpXVtsaW5lTnVtYmVyXSA9IHsgc3RhcnRP
ZmZzZXQsIG9iamVjdENvdW50IH07CisgICAgICAgICAgICBzdGFydE9mZnNldCA9IHJlbWFpbmRl
ciA/IHNpemUgLSByZW1haW5kZXIgOiAwOworICAgICAgICB9CisKKyAgICAgICAgLy8gVGhlIGxh
c3QgbGluZSBpbiB0aGUgcGFnZSByb3VuZHMgZG93biBpbnN0ZWFkIG9mIHVwIGJlY2F1c2UgaXQn
cyBub3QgYWxsb3dlZCB0byBvdmVybGFwIGludG8gaXRzIG5laWdoYm9yLgorICAgICAgICB1bnNp
Z25lZCBzaG9ydCBvYmplY3RDb3VudCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PigoU21h
bGxQYWdlOjpsaW5lU2l6ZSAtIHN0YXJ0T2Zmc2V0KSAvIHNpemUpOworICAgICAgICBtX3NtYWxs
TGluZU1ldGFkYXRhW3NpemVDbGFzcyhzaXplKV1bU21hbGxQYWdlOjpsaW5lQ291bnQgLSAxXSA9
IHsgc3RhcnRPZmZzZXQsIG9iamVjdENvdW50IH07CisgICAgfQorCisgICAgZm9yICh1bnNpZ25l
ZCBzaG9ydCBzaXplID0gc21hbGxNYXggKyBhbGlnbm1lbnQ7IHNpemUgPD0gbWVkaXVtTWF4OyBz
aXplICs9IGFsaWdubWVudCkgeworICAgICAgICB1bnNpZ25lZCBzaG9ydCBzdGFydE9mZnNldCA9
IDA7CisgICAgICAgIGZvciAoc2l6ZV90IGxpbmVOdW1iZXIgPSAwOyBsaW5lTnVtYmVyIDwgTWVk
aXVtUGFnZTo6bGluZUNvdW50IC0gMTsgKytsaW5lTnVtYmVyKSB7CisgICAgICAgICAgICB1bnNp
Z25lZCBzaG9ydCBvYmplY3RDb3VudDsKKyAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHJlbWFp
bmRlcjsKKyAgICAgICAgICAgIGRpdmlkZVJvdW5kaW5nVXAoc3RhdGljX2Nhc3Q8dW5zaWduZWQg
c2hvcnQ+KE1lZGl1bVBhZ2U6OmxpbmVTaXplIC0gc3RhcnRPZmZzZXQpLCBzaXplLCBvYmplY3RD
b3VudCwgcmVtYWluZGVyKTsKKyAgICAgICAgICAgIEJBU1NFUlQob2JqZWN0Q291bnQpOworICAg
ICAgICAgICAgbV9tZWRpdW1MaW5lTWV0YWRhdGFbc2l6ZUNsYXNzKHNpemUpXVtsaW5lTnVtYmVy
XSA9IHsgc3RhcnRPZmZzZXQsIG9iamVjdENvdW50IH07CisgICAgICAgICAgICBzdGFydE9mZnNl
dCA9IHJlbWFpbmRlciA/IHNpemUgLSByZW1haW5kZXIgOiAwOworICAgICAgICB9CisKKyAgICAg
ICAgLy8gVGhlIGxhc3QgbGluZSBpbiB0aGUgcGFnZSByb3VuZHMgZG93biBpbnN0ZWFkIG9mIHVw
IGJlY2F1c2UgaXQncyBub3QgYWxsb3dlZCB0byBvdmVybGFwIGludG8gaXRzIG5laWdoYm9yLgor
ICAgICAgICB1bnNpZ25lZCBzaG9ydCBvYmplY3RDb3VudCA9IHN0YXRpY19jYXN0PHVuc2lnbmVk
IHNob3J0PigoTWVkaXVtUGFnZTo6bGluZVNpemUgLSBzdGFydE9mZnNldCkgLyBzaXplKTsKKyAg
ICAgICAgbV9tZWRpdW1MaW5lTWV0YWRhdGFbc2l6ZUNsYXNzKHNpemUpXVtNZWRpdW1QYWdlOjps
aW5lQ291bnQgLSAxXSA9IHsgc3RhcnRPZmZzZXQsIG9iamVjdENvdW50IH07CisgICAgfQogfQog
CiB2b2lkIEhlYXA6OmNvbmN1cnJlbnRTY2F2ZW5nZSgpCkBAIC0xMTYsMTEgKzE1Miw4OSBAQCB2
b2lkIEhlYXA6OnNjYXZlbmdlTGFyZ2VSYW5nZXMoc3RkOjp1bmlxCiAgICAgfQogfQogCi1TbWFs
bExpbmUqIEhlYXA6OmFsbG9jYXRlU21hbGxMaW5lU2xvd0Nhc2Uoc3RkOjpsb2NrX2d1YXJkPFN0
YXRpY011dGV4PiYgbG9jaywgc2l6ZV90IHNtYWxsU2l6ZUNsYXNzKQordm9pZCBIZWFwOjpyZWZp
bGxTbWFsbEJ1bXBSYW5nZUNhY2hlKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mIGxvY2ss
IHNpemVfdCBzaXplQ2xhc3MsIFNtYWxsQnVtcFJhbmdlQ2FjaGUmIHJhbmdlQ2FjaGUpCit7Cisg
ICAgQkFTU0VSVCghcmFuZ2VDYWNoZS5zaXplKCkpOworICAgIFNtYWxsUGFnZSogcGFnZSA9IGFs
bG9jYXRlU21hbGxQYWdlKGxvY2ssIHNpemVDbGFzcyk7CisgICAgU21hbGxMaW5lKiBsaW5lcyA9
IHBhZ2UtPmJlZ2luKCk7CisKKyAgICAvLyBEdWUgdG8gb3ZlcmxhcCBmcm9tIHRoZSBwcmV2aW91
cyBsaW5lLCB0aGUgbGFzdCBsaW5lIGluIHRoZSBwYWdlIG1heSBub3QgYmUgYWJsZSB0byBmaXQg
YW55IG9iamVjdHMuCisgICAgc2l6ZV90IGVuZCA9IFNtYWxsUGFnZTo6bGluZUNvdW50OworICAg
IGlmICghbV9zbWFsbExpbmVNZXRhZGF0YVtzaXplQ2xhc3NdW1NtYWxsUGFnZTo6bGluZUNvdW50
IC0gMV0ub2JqZWN0Q291bnQpCisgICAgICAgIC0tZW5kOworCisgICAgZm9yIChzaXplX3QgbGlu
ZU51bWJlciA9IDA7IGxpbmVOdW1iZXIgPCBlbmQ7ICsrbGluZU51bWJlcikgeworICAgICAgICBp
ZiAobGluZXNbbGluZU51bWJlcl0ucmVmQ291bnQobG9jaykpCisgICAgICAgICAgICBjb250aW51
ZTsKKworICAgICAgICBMaW5lTWV0YWRhdGEmIGxpbmVNZXRhZGF0YSA9IG1fc21hbGxMaW5lTWV0
YWRhdGFbc2l6ZUNsYXNzXVtsaW5lTnVtYmVyXTsKKyAgICAgICAgY2hhciogYmVnaW4gPSBsaW5l
c1tsaW5lTnVtYmVyXS5iZWdpbigpICsgbGluZU1ldGFkYXRhLnN0YXJ0T2Zmc2V0OworICAgICAg
ICB1bnNpZ25lZCBzaG9ydCBvYmplY3RDb3VudCA9IGxpbmVNZXRhZGF0YS5vYmplY3RDb3VudDsK
KyAgICAgICAgbGluZXNbbGluZU51bWJlcl0ucmVmKGxvY2ssIGxpbmVNZXRhZGF0YS5vYmplY3RD
b3VudCk7CisgICAgICAgIHBhZ2UtPnJlZihsb2NrKTsKKworICAgICAgICB3aGlsZSAoKytsaW5l
TnVtYmVyIDwgZW5kKSB7CisgICAgICAgICAgICBpZiAobGluZXNbbGluZU51bWJlcl0ucmVmQ291
bnQobG9jaykpCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIExpbmVNZXRh
ZGF0YSYgbGluZU1ldGFkYXRhID0gbV9zbWFsbExpbmVNZXRhZGF0YVtzaXplQ2xhc3NdW2xpbmVO
dW1iZXJdOworICAgICAgICAgICAgb2JqZWN0Q291bnQgKz0gbGluZU1ldGFkYXRhLm9iamVjdENv
dW50OworICAgICAgICAgICAgbGluZXNbbGluZU51bWJlcl0ucmVmKGxvY2ssIGxpbmVNZXRhZGF0
YS5vYmplY3RDb3VudCk7CisgICAgICAgICAgICBwYWdlLT5yZWYobG9jayk7CisgICAgICAgIH0K
KworICAgICAgICByYW5nZUNhY2hlLnB1c2goeyBiZWdpbiwgb2JqZWN0Q291bnQgfSk7CisgICAg
fQorfQorCit2b2lkIEhlYXA6OnJlZmlsbE1lZGl1bUJ1bXBSYW5nZUNhY2hlKHN0ZDo6bG9ja19n
dWFyZDxTdGF0aWNNdXRleD4mIGxvY2ssIHNpemVfdCBzaXplQ2xhc3MsIE1lZGl1bUJ1bXBSYW5n
ZUNhY2hlJiByYW5nZUNhY2hlKQoreworICAgIEJBU1NFUlQoIXJhbmdlQ2FjaGUuc2l6ZSgpKTsK
KyAgICBNZWRpdW1QYWdlKiBwYWdlID0gYWxsb2NhdGVNZWRpdW1QYWdlKGxvY2ssIHNpemVDbGFz
cyk7CisgICAgTWVkaXVtTGluZSogbGluZXMgPSBwYWdlLT5iZWdpbigpOworCisgICAgLy8gRHVl
IHRvIG92ZXJsYXAgZnJvbSB0aGUgcHJldmlvdXMgbGluZSwgdGhlIGxhc3QgbGluZSBpbiB0aGUg
cGFnZSBtYXkgbm90IGJlIGFibGUgdG8gZml0IGFueSBvYmplY3RzLgorICAgIHNpemVfdCBlbmQg
PSBNZWRpdW1QYWdlOjpsaW5lQ291bnQ7CisgICAgaWYgKCFtX21lZGl1bUxpbmVNZXRhZGF0YVtz
aXplQ2xhc3NdW01lZGl1bVBhZ2U6OmxpbmVDb3VudCAtIDFdLm9iamVjdENvdW50KQorICAgICAg
ICAtLWVuZDsKKworICAgIGZvciAoc2l6ZV90IGxpbmVOdW1iZXIgPSAwOyBsaW5lTnVtYmVyIDwg
ZW5kOyArK2xpbmVOdW1iZXIpIHsKKyAgICAgICAgaWYgKGxpbmVzW2xpbmVOdW1iZXJdLnJlZkNv
dW50KGxvY2spKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgTGluZU1ldGFkYXRh
JiBsaW5lTWV0YWRhdGEgPSBtX21lZGl1bUxpbmVNZXRhZGF0YVtzaXplQ2xhc3NdW2xpbmVOdW1i
ZXJdOworICAgICAgICBjaGFyKiBiZWdpbiA9IGxpbmVzW2xpbmVOdW1iZXJdLmJlZ2luKCkgKyBs
aW5lTWV0YWRhdGEuc3RhcnRPZmZzZXQ7CisgICAgICAgIHVuc2lnbmVkIHNob3J0IG9iamVjdENv
dW50ID0gbGluZU1ldGFkYXRhLm9iamVjdENvdW50OworICAgICAgICBsaW5lc1tsaW5lTnVtYmVy
XS5yZWYobG9jaywgbGluZU1ldGFkYXRhLm9iamVjdENvdW50KTsKKyAgICAgICAgcGFnZS0+cmVm
KGxvY2spOworICAgICAgICAKKyAgICAgICAgd2hpbGUgKCsrbGluZU51bWJlciA8IGVuZCkgewor
ICAgICAgICAgICAgaWYgKGxpbmVzW2xpbmVOdW1iZXJdLnJlZkNvdW50KGxvY2spKQorICAgICAg
ICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBMaW5lTWV0YWRhdGEmIGxpbmVNZXRhZGF0
YSA9IG1fbWVkaXVtTGluZU1ldGFkYXRhW3NpemVDbGFzc11bbGluZU51bWJlcl07CisgICAgICAg
ICAgICBvYmplY3RDb3VudCArPSBsaW5lTWV0YWRhdGEub2JqZWN0Q291bnQ7CisgICAgICAgICAg
ICBsaW5lc1tsaW5lTnVtYmVyXS5yZWYobG9jaywgbGluZU1ldGFkYXRhLm9iamVjdENvdW50KTsK
KyAgICAgICAgICAgIHBhZ2UtPnJlZihsb2NrKTsKKyAgICAgICAgfQorCisgICAgICAgIHJhbmdl
Q2FjaGUucHVzaCh7IGJlZ2luLCBvYmplY3RDb3VudCB9KTsKKyAgICB9Cit9CisKK1NtYWxsUGFn
ZSogSGVhcDo6YWxsb2NhdGVTbWFsbFBhZ2Uoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYg
bG9jaywgc2l6ZV90IHNpemVDbGFzcykKIHsKKyAgICBWZWN0b3I8U21hbGxQYWdlKj4mIHNtYWxs
UGFnZXNXaXRoRnJlZUxpbmVzID0gbV9zbWFsbFBhZ2VzV2l0aEZyZWVMaW5lc1tzaXplQ2xhc3Nd
OworICAgIHdoaWxlIChzbWFsbFBhZ2VzV2l0aEZyZWVMaW5lcy5zaXplKCkpIHsKKyAgICAgICAg
U21hbGxQYWdlKiBwYWdlID0gc21hbGxQYWdlc1dpdGhGcmVlTGluZXMucG9wKCk7CisgICAgICAg
IGlmICghcGFnZS0+cmVmQ291bnQobG9jaykgfHwgcGFnZS0+c2l6ZUNsYXNzKCkgIT0gc2l6ZUNs
YXNzKSAvLyBQYWdlIHdhcyBwcm9tb3RlZCB0byB0aGUgcGFnZXMgbGlzdC4KKyAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICByZXR1cm4gcGFnZTsKKyAgICB9CisgICAgCiAgICAgbV9pc0Fs
bG9jYXRpbmdQYWdlcyA9IHRydWU7CiAKLSAgICBTbWFsbFBhZ2UqIHBhZ2UgPSBbdGhpc10oKSB7
CisgICAgU21hbGxQYWdlKiBwYWdlID0gW3RoaXMsIHNpemVDbGFzc10oKSB7CiAgICAgICAgIGlm
IChtX3NtYWxsUGFnZXMuc2l6ZSgpKQogICAgICAgICAgICAgcmV0dXJuIG1fc21hbGxQYWdlcy5w
b3AoKTsKICAgICAgICAgCkBAIC0xMjksMjIgKzI0MywyMyBAQCBTbWFsbExpbmUqIEhlYXA6OmFs
bG9jYXRlU21hbGxMaW5lU2xvd0NhCiAgICAgICAgIHJldHVybiBwYWdlOwogICAgIH0oKTsKIAot
ICAgIFNtYWxsTGluZSogbGluZSA9IHBhZ2UtPmJlZ2luKCk7Ci0gICAgVmVjdG9yPFNtYWxsTGlu
ZSo+JiBzbWFsbExpbmVzID0gbV9zbWFsbExpbmVzW3NtYWxsU2l6ZUNsYXNzXTsKLSAgICBmb3Ig
KGF1dG8gaXQgPSBsaW5lICsgMTsgaXQgIT0gcGFnZS0+ZW5kKCk7ICsraXQpCi0gICAgICAgIHNt
YWxsTGluZXMucHVzaChpdCk7Ci0KLSAgICBCQVNTRVJUKCFsaW5lLT5yZWZDb3VudChsb2NrKSk7
Ci0gICAgcGFnZS0+c2V0U21hbGxTaXplQ2xhc3Moc21hbGxTaXplQ2xhc3MpOwotICAgIHBhZ2Ut
PnJlZihsb2NrKTsKLSAgICByZXR1cm4gbGluZTsKKyAgICBwYWdlLT5zZXRTaXplQ2xhc3Moc2l6
ZUNsYXNzKTsKKyAgICByZXR1cm4gcGFnZTsKIH0KIAotTWVkaXVtTGluZSogSGVhcDo6YWxsb2Nh
dGVNZWRpdW1MaW5lU2xvd0Nhc2Uoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYgbG9jaykK
K01lZGl1bVBhZ2UqIEhlYXA6OmFsbG9jYXRlTWVkaXVtUGFnZShzdGQ6OmxvY2tfZ3VhcmQ8U3Rh
dGljTXV0ZXg+JiBsb2NrLCBzaXplX3Qgc2l6ZUNsYXNzKQogeworICAgIFZlY3RvcjxNZWRpdW1Q
YWdlKj4mIG1lZGl1bVBhZ2VzV2l0aEZyZWVMaW5lcyA9IG1fbWVkaXVtUGFnZXNXaXRoRnJlZUxp
bmVzW3NpemVDbGFzc107CisgICAgd2hpbGUgKG1lZGl1bVBhZ2VzV2l0aEZyZWVMaW5lcy5zaXpl
KCkpIHsKKyAgICAgICAgTWVkaXVtUGFnZSogcGFnZSA9IG1lZGl1bVBhZ2VzV2l0aEZyZWVMaW5l
cy5wb3AoKTsKKyAgICAgICAgaWYgKCFwYWdlLT5yZWZDb3VudChsb2NrKSB8fCBwYWdlLT5zaXpl
Q2xhc3MoKSAhPSBzaXplQ2xhc3MpIC8vIFBhZ2Ugd2FzIHByb21vdGVkIHRvIHRoZSBwYWdlcyBs
aXN0LgorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIHJldHVybiBwYWdlOworICAgIH0K
KyAgICAKICAgICBtX2lzQWxsb2NhdGluZ1BhZ2VzID0gdHJ1ZTsKIAotICAgIE1lZGl1bVBhZ2Uq
IHBhZ2UgPSBbdGhpc10oKSB7CisgICAgTWVkaXVtUGFnZSogcGFnZSA9IFt0aGlzLCBzaXplQ2xh
c3NdKCkgewogICAgICAgICBpZiAobV9tZWRpdW1QYWdlcy5zaXplKCkpCiAgICAgICAgICAgICBy
ZXR1cm4gbV9tZWRpdW1QYWdlcy5wb3AoKTsKICAgICAgICAgCkBAIC0xNTMsMTIgKzI2OCw1MiBA
QCBNZWRpdW1MaW5lKiBIZWFwOjphbGxvY2F0ZU1lZGl1bUxpbmVTbG93CiAgICAgICAgIHJldHVy
biBwYWdlOwogICAgIH0oKTsKIAotICAgIE1lZGl1bUxpbmUqIGxpbmUgPSBwYWdlLT5iZWdpbigp
OwotICAgIGZvciAoYXV0byBpdCA9IGxpbmUgKyAxOyBpdCAhPSBwYWdlLT5lbmQoKTsgKytpdCkK
LSAgICAgICAgbV9tZWRpdW1MaW5lcy5wdXNoKGl0KTsKKyAgICBwYWdlLT5zZXRTaXplQ2xhc3Mo
c2l6ZUNsYXNzKTsKKyAgICByZXR1cm4gcGFnZTsKK30KIAotICAgIHBhZ2UtPnJlZihsb2NrKTsK
LSAgICByZXR1cm4gbGluZTsKK3ZvaWQgSGVhcDo6ZGVhbGxvY2F0ZVNtYWxsTGluZShzdGQ6Omxv
Y2tfZ3VhcmQ8U3RhdGljTXV0ZXg+JiBsb2NrLCBTbWFsbExpbmUqIGxpbmUpCit7CisgICAgQkFT
U0VSVCghbGluZS0+cmVmQ291bnQobG9jaykpOworICAgIFNtYWxsUGFnZSogcGFnZSA9IFNtYWxs
UGFnZTo6Z2V0KGxpbmUpOworICAgIHNpemVfdCByZWZDb3VudCA9IHBhZ2UtPnJlZkNvdW50KGxv
Y2spOworICAgIHBhZ2UtPmRlcmVmKGxvY2spOworCisgICAgc3dpdGNoIChyZWZDb3VudCkgewor
ICAgIGNhc2UgU21hbGxQYWdlOjpsaW5lQ291bnQ6IHsKKyAgICAgICAgLy8gRmlyc3QgZnJlZSBs
aW5lIGluIHRoZSBwYWdlLgorICAgICAgICBtX3NtYWxsUGFnZXNXaXRoRnJlZUxpbmVzW3BhZ2Ut
PnNpemVDbGFzcygpXS5wdXNoKHBhZ2UpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2Fz
ZSAxOiB7CisgICAgICAgIC8vIExhc3QgZnJlZSBsaW5lIGluIHRoZSBwYWdlLgorICAgICAgICBt
X3NtYWxsUGFnZXMucHVzaChwYWdlKTsKKyAgICAgICAgbV9zY2F2ZW5nZXIucnVuKCk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgSGVhcDo6ZGVhbGxvY2F0ZU1lZGl1
bUxpbmUoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYgbG9jaywgTWVkaXVtTGluZSogbGlu
ZSkKK3sKKyAgICBCQVNTRVJUKCFsaW5lLT5yZWZDb3VudChsb2NrKSk7CisgICAgTWVkaXVtUGFn
ZSogcGFnZSA9IE1lZGl1bVBhZ2U6OmdldChsaW5lKTsKKyAgICBzaXplX3QgcmVmQ291bnQgPSBw
YWdlLT5yZWZDb3VudChsb2NrKTsKKyAgICBwYWdlLT5kZXJlZihsb2NrKTsKKworICAgIHN3aXRj
aCAocmVmQ291bnQpIHsKKyAgICBjYXNlIE1lZGl1bVBhZ2U6OmxpbmVDb3VudDogeworICAgICAg
ICAvLyBGaXJzdCBmcmVlIGxpbmUgaW4gdGhlIHBhZ2UuCisgICAgICAgIG1fbWVkaXVtUGFnZXNX
aXRoRnJlZUxpbmVzW3BhZ2UtPnNpemVDbGFzcygpXS5wdXNoKHBhZ2UpOworICAgICAgICBicmVh
azsKKyAgICB9CisgICAgY2FzZSAxOiB7CisgICAgICAgIC8vIExhc3QgZnJlZSBsaW5lIGluIHRo
ZSBwYWdlLgorICAgICAgICBtX21lZGl1bVBhZ2VzLnB1c2gocGFnZSk7CisgICAgICAgIG1fc2Nh
dmVuZ2VyLnJ1bigpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgfQogfQogCiB2b2lkKiBI
ZWFwOjphbGxvY2F0ZVhMYXJnZShzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+Jiwgc2l6ZV90
IHNpemUpCkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0hlYXAuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0hlYXAuaAkocmV2aXNpb24gMTczNjczKQorKysgU291
cmNlL2JtYWxsb2MvYm1hbGxvYy9IZWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDE2ICsyNiwx
NyBAQAogI2lmbmRlZiBIZWFwX2gKICNkZWZpbmUgSGVhcF9oCiAKLSNpbmNsdWRlICJGaXhlZFZl
Y3Rvci5oIgotI2luY2x1ZGUgIlZNSGVhcC5oIgotI2luY2x1ZGUgIk1lZGl1bUxpbmUuaCIKLSNp
bmNsdWRlICJNdXRleC5oIgotI2luY2x1ZGUgIlNtYWxsUGFnZS5oIgorI2luY2x1ZGUgIkJ1bXBS
YW5nZS5oIgorI2luY2x1ZGUgIkxpbmVNZXRhZGF0YS5oIgogI2luY2x1ZGUgIk1lZGl1bUNodW5r
LmgiCisjaW5jbHVkZSAiTWVkaXVtTGluZS5oIgogI2luY2x1ZGUgIk1lZGl1bVBhZ2UuaCIKKyNp
bmNsdWRlICJNdXRleC5oIgogI2luY2x1ZGUgIlNlZ3JlZ2F0ZWRGcmVlTGlzdC5oIgogI2luY2x1
ZGUgIlNtYWxsQ2h1bmsuaCIKICNpbmNsdWRlICJTbWFsbExpbmUuaCIKKyNpbmNsdWRlICJTbWFs
bFBhZ2UuaCIKKyNpbmNsdWRlICJWTUhlYXAuaCIKICNpbmNsdWRlICJWZWN0b3IuaCIKICNpbmNs
dWRlIDxhcnJheT4KICNpbmNsdWRlIDxtdXRleD4KQEAgLTQ5LDEyICs1MCwxMiBAQCBjbGFzcyBI
ZWFwIHsKIHB1YmxpYzoKICAgICBIZWFwKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mKTsK
IAotICAgIFNtYWxsTGluZSogYWxsb2NhdGVTbWFsbExpbmUoc3RkOjpsb2NrX2d1YXJkPFN0YXRp
Y011dGV4PiYsIHNpemVfdCBzbWFsbFNpemVDbGFzcyk7Ci0gICAgdm9pZCBkZWFsbG9jYXRlU21h
bGxMaW5lKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mLCBTbWFsbExpbmUqKTsKKyAgICB2
b2lkIHJlZmlsbFNtYWxsQnVtcFJhbmdlQ2FjaGUoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4
PiYsIHNpemVfdCBzaXplQ2xhc3MsIFNtYWxsQnVtcFJhbmdlQ2FjaGUmKTsKKyAgICB2b2lkIGRl
cmVmU21hbGxMaW5lKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mLCBTbWFsbExpbmUqKTsK
KworICAgIHZvaWQgcmVmaWxsTWVkaXVtQnVtcFJhbmdlQ2FjaGUoc3RkOjpsb2NrX2d1YXJkPFN0
YXRpY011dGV4PiYsIHNpemVfdCBzaXplQ2xhc3MsIE1lZGl1bUJ1bXBSYW5nZUNhY2hlJik7Cisg
ICAgdm9pZCBkZXJlZk1lZGl1bUxpbmUoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYsIE1l
ZGl1bUxpbmUqKTsKIAotICAgIE1lZGl1bUxpbmUqIGFsbG9jYXRlTWVkaXVtTGluZShzdGQ6Omxv
Y2tfZ3VhcmQ8U3RhdGljTXV0ZXg+Jik7Ci0gICAgdm9pZCBkZWFsbG9jYXRlTWVkaXVtTGluZShz
dGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+JiwgTWVkaXVtTGluZSopOwotICAgIAogICAgIHZv
aWQqIGFsbG9jYXRlTGFyZ2Uoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYsIHNpemVfdCk7
CiAgICAgdm9pZCBkZWFsbG9jYXRlTGFyZ2Uoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYs
IHZvaWQqKTsKIApAQCAtNjgsOSArNjksMTQgQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIH5I
ZWFwKCkgPSBkZWxldGU7CisgICAgCisgICAgdm9pZCBpbml0aWFsaXplTGluZU1ldGFkYXRhKCk7
CiAKLSAgICBTbWFsbExpbmUqIGFsbG9jYXRlU21hbGxMaW5lU2xvd0Nhc2Uoc3RkOjpsb2NrX2d1
YXJkPFN0YXRpY011dGV4PiYsIHNpemVfdCBzbWFsbFNpemVDbGFzcyk7Ci0gICAgTWVkaXVtTGlu
ZSogYWxsb2NhdGVNZWRpdW1MaW5lU2xvd0Nhc2Uoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4
PiYpOworICAgIFNtYWxsUGFnZSogYWxsb2NhdGVTbWFsbFBhZ2Uoc3RkOjpsb2NrX2d1YXJkPFN0
YXRpY011dGV4PiYsIHNpemVfdCBzaXplQ2xhc3MpOworICAgIE1lZGl1bVBhZ2UqIGFsbG9jYXRl
TWVkaXVtUGFnZShzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+Jiwgc2l6ZV90IHNpemVDbGFz
cyk7CisKKyAgICB2b2lkIGRlYWxsb2NhdGVTbWFsbExpbmUoc3RkOjpsb2NrX2d1YXJkPFN0YXRp
Y011dGV4PiYsIFNtYWxsTGluZSopOworICAgIHZvaWQgZGVhbGxvY2F0ZU1lZGl1bUxpbmUoc3Rk
Ojpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYsIE1lZGl1bUxpbmUqKTsKIAogICAgIHZvaWQqIGFs
bG9jYXRlTGFyZ2UoUmFuZ2UsIHNpemVfdCk7CiAgICAgUmFuZ2UgYWxsb2NhdGVMYXJnZUNodW5r
KCk7CkBAIC04NSw4ICs5MSwxMSBAQCBwcml2YXRlOgogICAgIHZvaWQgc2NhdmVuZ2VNZWRpdW1Q
YWdlcyhzdGQ6OnVuaXF1ZV9sb2NrPFN0YXRpY011dGV4PiYsIHN0ZDo6Y2hyb25vOjptaWxsaXNl
Y29uZHMpOwogICAgIHZvaWQgc2NhdmVuZ2VMYXJnZVJhbmdlcyhzdGQ6OnVuaXF1ZV9sb2NrPFN0
YXRpY011dGV4PiYsIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMpOwogCi0gICAgc3RkOjphcnJh
eTxWZWN0b3I8U21hbGxMaW5lKj4sIHNtYWxsTWF4IC8gYWxpZ25tZW50PiBtX3NtYWxsTGluZXM7
Ci0gICAgVmVjdG9yPE1lZGl1bUxpbmUqPiBtX21lZGl1bUxpbmVzOworICAgIHN0ZDo6YXJyYXk8
c3RkOjphcnJheTxMaW5lTWV0YWRhdGEsIFNtYWxsUGFnZTo6bGluZUNvdW50Piwgc21hbGxNYXgg
LyBhbGlnbm1lbnQ+IG1fc21hbGxMaW5lTWV0YWRhdGE7CisgICAgc3RkOjphcnJheTxzdGQ6OmFy
cmF5PExpbmVNZXRhZGF0YSwgTWVkaXVtUGFnZTo6bGluZUNvdW50PiwgbWVkaXVtTWF4IC8gYWxp
Z25tZW50PiBtX21lZGl1bUxpbmVNZXRhZGF0YTsKKworICAgIHN0ZDo6YXJyYXk8VmVjdG9yPFNt
YWxsUGFnZSo+LCBzbWFsbE1heCAvIGFsaWdubWVudD4gbV9zbWFsbFBhZ2VzV2l0aEZyZWVMaW5l
czsKKyAgICBzdGQ6OmFycmF5PFZlY3RvcjxNZWRpdW1QYWdlKj4sIG1lZGl1bU1heCAvIGFsaWdu
bWVudD4gbV9tZWRpdW1QYWdlc1dpdGhGcmVlTGluZXM7CiAKICAgICBWZWN0b3I8U21hbGxQYWdl
Kj4gbV9zbWFsbFBhZ2VzOwogICAgIFZlY3RvcjxNZWRpdW1QYWdlKj4gbV9tZWRpdW1QYWdlczsK
QEAgLTk5LDU5ICsxMDgsMTggQEAgcHJpdmF0ZToKICAgICBBc3luY1Rhc2s8SGVhcCwgZGVjbHR5
cGUoJkhlYXA6OmNvbmN1cnJlbnRTY2F2ZW5nZSk+IG1fc2NhdmVuZ2VyOwogfTsKIAotaW5saW5l
IHZvaWQgSGVhcDo6ZGVhbGxvY2F0ZVNtYWxsTGluZShzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0
ZXg+JiBsb2NrLCBTbWFsbExpbmUqIGxpbmUpCitpbmxpbmUgdm9pZCBIZWFwOjpkZXJlZlNtYWxs
TGluZShzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+JiBsb2NrLCBTbWFsbExpbmUqIGxpbmUp
CiB7Ci0gICAgQkFTU0VSVCghbGluZS0+cmVmQ291bnQobG9jaykpOwotICAgIFNtYWxsUGFnZSog
cGFnZSA9IFNtYWxsUGFnZTo6Z2V0KGxpbmUpOwotICAgIGlmIChwYWdlLT5kZXJlZihsb2NrKSkg
ewotICAgICAgICBtX3NtYWxsUGFnZXMucHVzaChwYWdlKTsKLSAgICAgICAgbV9zY2F2ZW5nZXIu
cnVuKCk7CisgICAgaWYgKCFsaW5lLT5kZXJlZihsb2NrKSkKICAgICAgICAgcmV0dXJuOwotICAg
IH0KLSAgICBtX3NtYWxsTGluZXNbcGFnZS0+c21hbGxTaXplQ2xhc3MoKV0ucHVzaChsaW5lKTsK
LX0KLQotaW5saW5lIFNtYWxsTGluZSogSGVhcDo6YWxsb2NhdGVTbWFsbExpbmUoc3RkOjpsb2Nr
X2d1YXJkPFN0YXRpY011dGV4PiYgbG9jaywgc2l6ZV90IHNtYWxsU2l6ZUNsYXNzKQotewotICAg
IFZlY3RvcjxTbWFsbExpbmUqPiYgc21hbGxMaW5lcyA9IG1fc21hbGxMaW5lc1tzbWFsbFNpemVD
bGFzc107Ci0gICAgd2hpbGUgKHNtYWxsTGluZXMuc2l6ZSgpKSB7Ci0gICAgICAgIFNtYWxsTGlu
ZSogbGluZSA9IHNtYWxsTGluZXMucG9wKCk7Ci0gICAgICAgIFNtYWxsUGFnZSogcGFnZSA9IFNt
YWxsUGFnZTo6Z2V0KGxpbmUpOwotICAgICAgICBpZiAoIXBhZ2UtPnJlZkNvdW50KGxvY2spIHx8
IHBhZ2UtPnNtYWxsU2l6ZUNsYXNzKCkgIT0gc21hbGxTaXplQ2xhc3MpIC8vIFRoZSBsaW5lIHdh
cyBwcm9tb3RlZCB0byB0aGUgc21hbGwgcGFnZXMgbGlzdC4KLSAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICBCQVNTRVJUKCFsaW5lLT5yZWZDb3VudChsb2NrKSk7Ci0gICAgICAgIHBhZ2Ut
PnJlZihsb2NrKTsKLSAgICAgICAgcmV0dXJuIGxpbmU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGFs
bG9jYXRlU21hbGxMaW5lU2xvd0Nhc2UobG9jaywgc21hbGxTaXplQ2xhc3MpOworICAgIGRlYWxs
b2NhdGVTbWFsbExpbmUobG9jaywgbGluZSk7CiB9CiAKLWlubGluZSB2b2lkIEhlYXA6OmRlYWxs
b2NhdGVNZWRpdW1MaW5lKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mIGxvY2ssIE1lZGl1
bUxpbmUqIGxpbmUpCitpbmxpbmUgdm9pZCBIZWFwOjpkZXJlZk1lZGl1bUxpbmUoc3RkOjpsb2Nr
X2d1YXJkPFN0YXRpY011dGV4PiYgbG9jaywgTWVkaXVtTGluZSogbGluZSkKIHsKLSAgICBCQVNT
RVJUKCFsaW5lLT5yZWZDb3VudChsb2NrKSk7Ci0gICAgTWVkaXVtUGFnZSogcGFnZSA9IE1lZGl1
bVBhZ2U6OmdldChsaW5lKTsKLSAgICBpZiAocGFnZS0+ZGVyZWYobG9jaykpIHsKLSAgICAgICAg
bV9tZWRpdW1QYWdlcy5wdXNoKHBhZ2UpOwotICAgICAgICBtX3NjYXZlbmdlci5ydW4oKTsKKyAg
ICBpZiAoIWxpbmUtPmRlcmVmKGxvY2spKQogICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIG1f
bWVkaXVtTGluZXMucHVzaChsaW5lKTsKLX0KLQotaW5saW5lIE1lZGl1bUxpbmUqIEhlYXA6OmFs
bG9jYXRlTWVkaXVtTGluZShzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+JiBsb2NrKQotewot
ICAgIHdoaWxlIChtX21lZGl1bUxpbmVzLnNpemUoKSkgewotICAgICAgICBNZWRpdW1MaW5lKiBs
aW5lID0gbV9tZWRpdW1MaW5lcy5wb3AoKTsKLSAgICAgICAgTWVkaXVtUGFnZSogcGFnZSA9IE1l
ZGl1bVBhZ2U6OmdldChsaW5lKTsKLSAgICAgICAgaWYgKCFwYWdlLT5yZWZDb3VudChsb2NrKSkg
Ly8gVGhlIGxpbmUgd2FzIHByb21vdGVkIHRvIHRoZSBtZWRpdW0gcGFnZXMgbGlzdC4KLSAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICBCQVNTRVJUKCFsaW5lLT5yZWZDb3VudChsb2NrKSk7
Ci0gICAgICAgIHBhZ2UtPnJlZihsb2NrKTsKLSAgICAgICAgcmV0dXJuIGxpbmU7Ci0gICAgfQot
Ci0gICAgcmV0dXJuIGFsbG9jYXRlTWVkaXVtTGluZVNsb3dDYXNlKGxvY2spOworICAgIGRlYWxs
b2NhdGVNZWRpdW1MaW5lKGxvY2ssIGxpbmUpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBibWFsbG9j
CkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0xpbmUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvYm1hbGxvYy9ibWFsbG9jL0xpbmUuaAkocmV2aXNpb24gMTczNjczKQorKysgU291cmNlL2Jt
YWxsb2MvYm1hbGxvYy9MaW5lLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDggKzQ1LDggQEAgcHVi
bGljOgogCiAgICAgc3RhdGljIExpbmUqIGdldCh2b2lkKik7CiAKLSAgICB2b2lkIGNvbmN1cnJl
bnRSZWYodW5zaWduZWQgY2hhciA9IDEpOwotICAgIGJvb2wgZGVyZWYoc3RkOjpsb2NrX2d1YXJk
PFN0YXRpY011dGV4PiYsIHVuc2lnbmVkIGNoYXIgPSAxKTsKKyAgICB2b2lkIHJlZihzdGQ6Omxv
Y2tfZ3VhcmQ8U3RhdGljTXV0ZXg+JiwgdW5zaWduZWQgY2hhcik7CisgICAgYm9vbCBkZXJlZihz
dGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+Jik7CiAgICAgdW5zaWduZWQgcmVmQ291bnQoc3Rk
Ojpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYpIHsgcmV0dXJuIG1fcmVmQ291bnQ7IH0KICAgICAK
ICAgICBjaGFyKiBiZWdpbigpOwpAQCAtODEsMTggKzgxLDE4IEBAIGlubGluZSBjaGFyKiBMaW5l
PFRyYWl0cz46OmVuZCgpCiB9CiAKIHRlbXBsYXRlPGNsYXNzIFRyYWl0cz4KLWlubGluZSB2b2lk
IExpbmU8VHJhaXRzPjo6Y29uY3VycmVudFJlZih1bnNpZ25lZCBjaGFyIGNvdW50KQoraW5saW5l
IHZvaWQgTGluZTxUcmFpdHM+OjpyZWYoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYsIHVu
c2lnbmVkIGNoYXIgcmVmQ291bnQpCiB7Ci0gICAgQkFTU0VSVCghbV9yZWZDb3VudCk7IC8vIFVw
LXJlZiBmcm9tIHplcm8gY2FuIGJlIGxvY2stZnJlZSBiZWNhdXNlIHRoZXJlIGFyZSBubyBvdGhl
ciBjbGllbnRzLgotICAgIEJBU1NFUlQoY291bnQgPD0gbWF4UmVmQ291bnQpOwotICAgIG1fcmVm
Q291bnQgPSBjb3VudDsKKyAgICBCQVNTRVJUKCFtX3JlZkNvdW50KTsKKyAgICBCQVNTRVJUKHJl
ZkNvdW50IDw9IG1heFJlZkNvdW50KTsKKyAgICBtX3JlZkNvdW50ID0gcmVmQ291bnQ7CiB9CiAK
IHRlbXBsYXRlPGNsYXNzIFRyYWl0cz4KLWlubGluZSBib29sIExpbmU8VHJhaXRzPjo6ZGVyZWYo
c3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYsIHVuc2lnbmVkIGNoYXIgY291bnQpCitpbmxp
bmUgYm9vbCBMaW5lPFRyYWl0cz46OmRlcmVmKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4m
KQogewotICAgIEJBU1NFUlQoY291bnQgPD0gbV9yZWZDb3VudCk7Ci0gICAgbV9yZWZDb3VudCAt
PSBjb3VudDsKKyAgICBCQVNTRVJUKG1fcmVmQ291bnQpOworICAgIC0tbV9yZWZDb3VudDsKICAg
ICByZXR1cm4gIW1fcmVmQ291bnQ7CiB9CiAKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2Mv
TGluZU1ldGFkYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9MaW5l
TWV0YWRhdGEuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvTGluZU1l
dGFkYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzOCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIExpbmVNZXRhZGF0YV9oCisj
ZGVmaW5lIExpbmVNZXRhZGF0YV9oCisKK25hbWVzcGFjZSBibWFsbG9jIHsKKworc3RydWN0IExp
bmVNZXRhZGF0YSB7CisgICAgdW5zaWduZWQgc2hvcnQgc3RhcnRPZmZzZXQ7CisgICAgdW5zaWdu
ZWQgc2hvcnQgb2JqZWN0Q291bnQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBibWFsbG9jCisKKyNl
bmRpZiAvLyBMaW5lTWV0YWRhdGFfaApJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9NZWRp
dW1BbGxvY2F0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL01lZGl1
bUFsbG9jYXRvci5oCShyZXZpc2lvbiAxNzM2NzMpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9j
L01lZGl1bUFsbG9jYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDExNSArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgTWVkaXVt
QWxsb2NhdG9yX2gKLSNkZWZpbmUgTWVkaXVtQWxsb2NhdG9yX2gKLQotI2luY2x1ZGUgIkJBc3Nl
cnQuaCIKLSNpbmNsdWRlICJNZWRpdW1DaHVuay5oIgotI2luY2x1ZGUgIk1lZGl1bUxpbmUuaCIK
LQotbmFtZXNwYWNlIGJtYWxsb2MgewotCi0vLyBIZWxwZXIgb2JqZWN0IGZvciBhbGxvY2F0aW5n
IG1lZGl1bSBvYmplY3RzLgotCi1jbGFzcyBNZWRpdW1BbGxvY2F0b3IgewotcHVibGljOgotICAg
IE1lZGl1bUFsbG9jYXRvcigpOwotCi0gICAgYm9vbCBpc051bGwoKSB7IHJldHVybiAhbV9lbmQ7
IH0KLSAgICBNZWRpdW1MaW5lKiBsaW5lKCk7Ci0KLSAgICB2b2lkKiBhbGxvY2F0ZShzaXplX3Qp
OwotICAgIGJvb2wgYWxsb2NhdGUoc2l6ZV90LCB2b2lkKiYpOwotCi0gICAgdW5zaWduZWQgY2hh
ciBkZXJlZkNvdW50KCk7Ci0KLSAgICB2b2lkIHJlZmlsbChNZWRpdW1MaW5lKik7Ci0gICAgdm9p
ZCBjbGVhcigpOwotCi1wcml2YXRlOgotICAgIGNoYXIqIG1fZW5kOwotICAgIHNpemVfdCBtX3Jl
bWFpbmluZzsKLSAgICBzaXplX3QgbV9vYmplY3RDb3VudDsKLX07Ci0KLWlubGluZSBNZWRpdW1B
bGxvY2F0b3I6Ok1lZGl1bUFsbG9jYXRvcigpCi0gICAgOiBtX2VuZCgpCi0gICAgLCBtX3JlbWFp
bmluZygpCi0gICAgLCBtX29iamVjdENvdW50KCkKLXsKLX0KLQotaW5saW5lIE1lZGl1bUxpbmUq
IE1lZGl1bUFsbG9jYXRvcjo6bGluZSgpCi17Ci0gICAgcmV0dXJuIE1lZGl1bUxpbmU6OmdldCht
X2VuZCAtIDEpOwotfQotCi1pbmxpbmUgdm9pZCogTWVkaXVtQWxsb2NhdG9yOjphbGxvY2F0ZShz
aXplX3Qgc2l6ZSkKLXsKLSAgICBCQVNTRVJUKHNpemUgPD0gbV9yZW1haW5pbmcpOwotICAgIEJB
U1NFUlQoc2l6ZSA9PSByb3VuZFVwVG9NdWx0aXBsZU9mPGFsaWdubWVudD4oc2l6ZSkpOwotICAg
IEJBU1NFUlQoc2l6ZSA+PSBNZWRpdW1MaW5lOjptaW5pbXVtT2JqZWN0U2l6ZSk7Ci0KLSAgICBt
X3JlbWFpbmluZyAtPSBzaXplOwotICAgIHZvaWQqIG9iamVjdCA9IG1fZW5kIC0gbV9yZW1haW5p
bmcgLSBzaXplOwotICAgIEJBU1NFUlQoaXNTbWFsbE9yTWVkaXVtKG9iamVjdCkgJiYgIWlzU21h
bGwob2JqZWN0KSk7Ci0KLSAgICArK21fb2JqZWN0Q291bnQ7Ci0gICAgcmV0dXJuIG9iamVjdDsK
LX0KLQotaW5saW5lIGJvb2wgTWVkaXVtQWxsb2NhdG9yOjphbGxvY2F0ZShzaXplX3Qgc2l6ZSwg
dm9pZComIG9iamVjdCkKLXsKLSAgICBpZiAoc2l6ZSA+IG1fcmVtYWluaW5nKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICBvYmplY3QgPSBhbGxvY2F0ZShzaXplKTsKLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotaW5saW5lIHVuc2lnbmVkIGNoYXIgTWVkaXVtQWxsb2NhdG9yOjpkZXJlZkNv
dW50KCkKLXsKLSAgICByZXR1cm4gTWVkaXVtTGluZTo6bWF4UmVmQ291bnQgLSBtX29iamVjdENv
dW50OwotfQotCi1pbmxpbmUgdm9pZCBNZWRpdW1BbGxvY2F0b3I6OnJlZmlsbChNZWRpdW1MaW5l
KiBsaW5lKQotewotICAgIGxpbmUtPmNvbmN1cnJlbnRSZWYoTWVkaXVtTGluZTo6bWF4UmVmQ291
bnQpOwotICAgIG1fZW5kID0gbGluZS0+ZW5kKCk7Ci0gICAgbV9yZW1haW5pbmcgPSBtZWRpdW1M
aW5lU2l6ZTsKLSAgICBtX29iamVjdENvdW50ID0gMDsKLX0KLQotaW5saW5lIHZvaWQgTWVkaXVt
QWxsb2NhdG9yOjpjbGVhcigpCi17Ci0gICAgbV9lbmQgPSBudWxscHRyOwotICAgIG1fcmVtYWlu
aW5nID0gMDsKLSAgICBtX29iamVjdENvdW50ID0gMDsKLX0KLQotfSAvLyBuYW1lc3BhY2UgYm1h
bGxvYwotCi0jZW5kaWYgLy8gTWVkaXVtQWxsb2NhdG9yX2gKSW5kZXg6IFNvdXJjZS9ibWFsbG9j
L2JtYWxsb2MvUGFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvUGFn
ZS5oCShyZXZpc2lvbiAxNzM2NzMpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1BhZ2UuaAko
d29ya2luZyBjb3B5KQpAQCAtMzksOSArMzksMTAgQEAgcHVibGljOgogICAgIHR5cGVkZWYgdHlw
ZW5hbWUgVHJhaXRzOjpDaHVuayBDaHVuazsKICAgICB0eXBlZGVmIHR5cGVuYW1lIFRyYWl0czo6
TGluZSBMaW5lOwogICAgIHN0YXRpYyBjb25zdCBzaXplX3QgbGluZVNpemUgPSBUcmFpdHM6Omxp
bmVTaXplOworICAgIHN0YXRpYyBjb25zdCBzaXplX3QgbGluZUNvdW50ID0gdm1QYWdlU2l6ZSAv
IGxpbmVTaXplOwogCiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgbWF4UmVmQ291bnQg
PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGNoYXI+OjptYXgoKTsKLSAgICBzdGF0aWNf
YXNzZXJ0KHZtUGFnZVNpemUgLyBsaW5lU2l6ZSA8IG1heFJlZkNvdW50LCAibWF4aW11bSBsaW5l
IGNvdW50IG11c3QgZml0IGluIFBhZ2UiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KGxpbmVDb3VudCA8
IG1heFJlZkNvdW50LCAibWF4aW11bSBsaW5lIGNvdW50IG11c3QgZml0IGluIFBhZ2UiKTsKICAg
ICAKICAgICBzdGF0aWMgUGFnZSogZ2V0KExpbmUqKTsKIApAQCAtNDksMTUgKzUwLDE1IEBAIHB1
YmxpYzoKICAgICBib29sIGRlcmVmKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mKTsKICAg
ICB1bnNpZ25lZCByZWZDb3VudChzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+JikgeyByZXR1
cm4gbV9yZWZDb3VudDsgfQogICAgIAotICAgIHNpemVfdCBzbWFsbFNpemVDbGFzcygpIHsgcmV0
dXJuIG1fc21hbGxTaXplQ2xhc3M7IH0KLSAgICB2b2lkIHNldFNtYWxsU2l6ZUNsYXNzKHNpemVf
dCBzbWFsbFNpemVDbGFzcykgeyBtX3NtYWxsU2l6ZUNsYXNzID0gc21hbGxTaXplQ2xhc3M7IH0K
KyAgICBzaXplX3Qgc2l6ZUNsYXNzKCkgeyByZXR1cm4gbV9zaXplQ2xhc3M7IH0KKyAgICB2b2lk
IHNldFNpemVDbGFzcyhzaXplX3Qgc2l6ZUNsYXNzKSB7IG1fc2l6ZUNsYXNzID0gc2l6ZUNsYXNz
OyB9CiAgICAgCiAgICAgTGluZSogYmVnaW4oKTsKICAgICBMaW5lKiBlbmQoKTsKIAogcHJpdmF0
ZToKICAgICB1bnNpZ25lZCBjaGFyIG1fcmVmQ291bnQ7Ci0gICAgdW5zaWduZWQgY2hhciBtX3Nt
YWxsU2l6ZUNsYXNzOworICAgIHVuc2lnbmVkIGNoYXIgbV9zaXplQ2xhc3M7CiB9OwogCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBUcmFpdHM+CkBAIC04OSwxNCArOTAsMTQgQEAgaW5saW5lIGF1dG8gUGFn
ZTxUcmFpdHM+OjpiZWdpbigpIC0+IExpbgogewogICAgIENodW5rKiBjaHVuayA9IENodW5rOjpn
ZXQodGhpcyk7CiAgICAgc2l6ZV90IHBhZ2VOdW1iZXIgPSB0aGlzIC0gY2h1bmstPnBhZ2VzKCk7
Ci0gICAgc2l6ZV90IGxpbmVOdW1iZXIgPSBwYWdlTnVtYmVyICogdm1QYWdlU2l6ZSAvIGxpbmVT
aXplOworICAgIHNpemVfdCBsaW5lTnVtYmVyID0gcGFnZU51bWJlciAqIGxpbmVDb3VudDsKICAg
ICByZXR1cm4gJmNodW5rLT5saW5lcygpW2xpbmVOdW1iZXJdOwogfQogCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBUcmFpdHM+CiBpbmxpbmUgYXV0byBQYWdlPFRyYWl0cz46OmVuZCgpIC0+IExpbmUqCiB7
Ci0gICAgcmV0dXJuIGJlZ2luKCkgKyB2bVBhZ2VTaXplIC8gbGluZVNpemU7CisgICAgcmV0dXJu
IGJlZ2luKCkgKyBsaW5lQ291bnQ7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIGJtYWxsb2MKSW5kZXg6
IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvU2l6ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1h
bGxvYy9ibWFsbG9jL1NpemVzLmgJKHJldmlzaW9uIDE3MzY3NSkKKysrIFNvdXJjZS9ibWFsbG9j
L2JtYWxsb2MvU2l6ZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNTYsNyArNTYsNyBAQCBuYW1lc3Bh
Y2UgU2l6ZXMgewogICAgIHN0YXRpYyBjb25zdCBzaXplX3Qgc3VwZXJDaHVua1NpemUgPSAzMiAq
IE1COwogCiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBzbWFsbE1heCA9IDI1NjsKLSAgICBzdGF0
aWMgY29uc3Qgc2l6ZV90IHNtYWxsTGluZVNpemUgPSA1MTI7CisgICAgc3RhdGljIGNvbnN0IHNp
emVfdCBzbWFsbExpbmVTaXplID0gMjU2OwogICAgIHN0YXRpYyBjb25zdCBzaXplX3Qgc21hbGxM
aW5lTWFzayA9IH4oc21hbGxMaW5lU2l6ZSAtIDF1bCk7CiAKICAgICBzdGF0aWMgY29uc3Qgc2l6
ZV90IHNtYWxsQ2h1bmtTaXplID0gc3VwZXJDaHVua1NpemUgLyA0OwpAQCAtNjQsNyArNjQsNyBA
QCBuYW1lc3BhY2UgU2l6ZXMgewogICAgIHN0YXRpYyBjb25zdCBzaXplX3Qgc21hbGxDaHVua01h
c2sgPSB+KHNtYWxsQ2h1bmtTaXplIC0gMXVsKTsKIAogICAgIHN0YXRpYyBjb25zdCBzaXplX3Qg
bWVkaXVtTWF4ID0gMTAyNDsKLSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IG1lZGl1bUxpbmVTaXpl
ID0gMjA0ODsKKyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IG1lZGl1bUxpbmVTaXplID0gMTAyNDsK
ICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IG1lZGl1bUxpbmVNYXNrID0gfihtZWRpdW1MaW5lU2l6
ZSAtIDF1bCk7CiAKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IG1lZGl1bUNodW5rU2l6ZSA9IHN1
cGVyQ2h1bmtTaXplIC8gNDsKQEAgLTkyLDIxICs5MiwyMCBAQCBuYW1lc3BhY2UgU2l6ZXMgewog
CiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBkZWFsbG9jYXRvckxvZ0NhcGFjaXR5ID0gMjU2Owog
Ci0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBzbWFsbExpbmVDYWNoZUNhcGFjaXR5ID0gdm1QYWdl
U2l6ZSAvIHNtYWxsTGluZVNpemU7Ci0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBtZWRpdW1MaW5l
Q2FjaGVDYXBhY2l0eSA9IHZtUGFnZVNpemUgLyBtZWRpdW1MaW5lU2l6ZTsKKyAgICBzdGF0aWMg
Y29uc3Qgc2l6ZV90IHNtYWxsUmFuZ2VDYWNoZUNhcGFjaXR5ID0gdm1QYWdlU2l6ZSAvIHNtYWxs
TGluZVNpemU7CisgICAgc3RhdGljIGNvbnN0IHNpemVfdCBtZWRpdW1SYW5nZUNhY2hlQ2FwYWNp
dHkgPSB2bVBhZ2VTaXplIC8gbWVkaXVtTGluZVNpemU7CiAgICAgCiAgICAgc3RhdGljIGNvbnN0
IHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMgc2NhdmVuZ2VTbGVlcER1cmF0aW9uID0gc3RkOjpj
aHJvbm86Om1pbGxpc2Vjb25kcyg1MTIpOwogCi0gICAgaW5saW5lIHNpemVfdCBzbWFsbFNpemVD
bGFzc0ZvcihzaXplX3Qgc2l6ZSkKKyAgICBpbmxpbmUgc2l6ZV90IHNpemVDbGFzcyhzaXplX3Qg
c2l6ZSkKICAgICB7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBzaXplX3Qgc21hbGxTaXplQ2xhc3NN
YXNrID0gKHNtYWxsTWF4IC8gYWxpZ25tZW50KSAtIDE7Ci0gICAgICAgIHJldHVybiBtYXNrKChz
aXplIC0gMXVsKSAvIGFsaWdubWVudCwgc21hbGxTaXplQ2xhc3NNYXNrKTsKKyAgICAgICAgc3Rh
dGljIGNvbnN0IHNpemVfdCBzaXplQ2xhc3NNYXNrID0gKG1lZGl1bU1heCAvIGFsaWdubWVudCkg
LSAxOworICAgICAgICByZXR1cm4gbWFzaygoc2l6ZSAtIDF1bCkgLyBhbGlnbm1lbnQsIHNpemVD
bGFzc01hc2spOwogICAgIH0KIAotICAgIGlubGluZSBzaXplX3QgbWVkaXVtU2l6ZUNsYXNzRm9y
KHNpemVfdCBzaXplKQorICAgIGlubGluZSBzaXplX3Qgb2JqZWN0U2l6ZShzaXplX3Qgc2l6ZUNs
YXNzKQogICAgIHsKLSAgICAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBtZWRpdW1TaXplQ2xhc3NN
YXNrID0gKG1lZGl1bU1heCAvIGFsaWdubWVudCkgLSAxOwotICAgICAgICByZXR1cm4gbWFzaygo
c2l6ZSAtIDF1bCkgLyBhbGlnbm1lbnQsIG1lZGl1bVNpemVDbGFzc01hc2spOworICAgICAgICBy
ZXR1cm4gKHNpemVDbGFzcyArIDEpICogYWxpZ25tZW50OwogICAgIH0KIH07CiAKSW5kZXg6IFNv
dXJjZS9ibWFsbG9jL2JtYWxsb2MvYm1hbGxvYy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFs
bG9jL2JtYWxsb2MvYm1hbGxvYy5oCShyZXZpc2lvbiAxNzM2NzMpCisrKyBTb3VyY2UvYm1hbGxv
Yy9ibWFsbG9jL2JtYWxsb2MuaAkod29ya2luZyBjb3B5KQpAQCAtNTIsMTUgKzUyLDEzIEBAIGlu
bGluZSB2b2lkKiByZWFsbG9jKHZvaWQqIG9iamVjdCwgc2l6ZV8KICAgICBzaXplX3Qgb2xkU2l6
ZSA9IDA7CiAgICAgc3dpdGNoKG9iamVjdFR5cGUob2JqZWN0KSkgewogICAgIGNhc2UgU21hbGw6
IHsKLSAgICAgICAgLy8gV2UgZG9uJ3QgaGF2ZSBhbiBleGFjdCBzaXplLCBidXQgd2UgY2FuIGNh
bGN1bGF0ZSBhIG1heGltdW0uCi0gICAgICAgIHZvaWQqIGVuZCA9IHJvdW5kVXBUb011bHRpcGxl
T2Y8c21hbGxMaW5lU2l6ZT4oc3RhdGljX2Nhc3Q8Y2hhcio+KG9iamVjdCkgKyAxKTsKLSAgICAg
ICAgb2xkU2l6ZSA9IHN0YXRpY19jYXN0PGNoYXIqPihlbmQpIC0gc3RhdGljX2Nhc3Q8Y2hhcio+
KG9iamVjdCk7CisgICAgICAgIFNtYWxsUGFnZSogcGFnZSA9IFNtYWxsUGFnZTo6Z2V0KFNtYWxs
TGluZTo6Z2V0KG9iamVjdCkpOworICAgICAgICBvbGRTaXplID0gb2JqZWN0U2l6ZShwYWdlLT5z
aXplQ2xhc3MoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIE1lZGl1bTogewot
ICAgICAgICAvLyBXZSBkb24ndCBoYXZlIGFuIGV4YWN0IHNpemUsIGJ1dCB3ZSBjYW4gY2FsY3Vs
YXRlIGEgbWF4aW11bS4KLSAgICAgICAgdm9pZCogZW5kID0gcm91bmRVcFRvTXVsdGlwbGVPZjxt
ZWRpdW1MaW5lU2l6ZT4oc3RhdGljX2Nhc3Q8Y2hhcio+KG9iamVjdCkgKyAxKTsKLSAgICAgICAg
b2xkU2l6ZSA9IHN0YXRpY19jYXN0PGNoYXIqPihlbmQpIC0gc3RhdGljX2Nhc3Q8Y2hhcio+KG9i
amVjdCk7CisgICAgICAgIE1lZGl1bVBhZ2UqIHBhZ2UgPSBNZWRpdW1QYWdlOjpnZXQoTWVkaXVt
TGluZTo6Z2V0KG9iamVjdCkpOworICAgICAgICBvbGRTaXplID0gb2JqZWN0U2l6ZShwYWdlLT5z
aXplQ2xhc3MoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIExhcmdlOiB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>238511</attachid>
            <date>2014-09-22 18:37:57 -0700</date>
            <delta_ts>2014-09-23 09:27:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-136993-20140922183754.patch</filename>
            <type>text/plain</type>
            <size>52828</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvd3RmL0Zhc3RNYWxsb2MuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XVEYvd3RmL0Zhc3RNYWxsb2MuY3BwCShyZXZpc2lvbiAxNzM4NTYpCisrKyBTb3VyY2UvV1RG
L3d0Zi9GYXN0TWFsbG9jLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAxLDYgKzEwMSwxMCBAQAog
I2VuZGlmCiAjZW5kaWYKIAorI2lmIChQTEFURk9STShDT0NPQSkgJiYgKENQVShYODZfNjQpIHx8
IENQVShBUk02NCkpKQorI2RlZmluZSBVU0VfQk1BTExPQyAxCisjZW5kaWYKKwogI2lmICEoZGVm
aW5lZChVU0VfU1lTVEVNX01BTExPQykgJiYgVVNFX1NZU1RFTV9NQUxMT0MpICYmIGRlZmluZWQo
TkRFQlVHKQogI2RlZmluZSBGT1JDRV9TWVNURU1fTUFMTE9DIDAKICNlbHNlCkluZGV4OiBTb3Vy
Y2UvYm1hbGxvYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvQ2hhbmdl
TG9nCShyZXZpc2lvbiAxNzM4NTYpCisrKyBTb3VyY2UvYm1hbGxvYy9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSwxMjIgQEAKKzIwMTQtMDktMjIgIEdlb2ZmcmV5IEdhcmVuICA8
Z2dhcmVuQGFwcGxlLmNvbT4KKworICAgICAgICBibWFsbG9jOiBBbGxvY2F0aW9uIHNob3VsZCBi
ZSBtb3JlIHByZWNpc2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTEzNjk5MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIDEzJSByZWR1Y3Rpb24gaW4gaGVhcCBzaXplIG9uIHRoZSBNYWxsb2NCZW5jaCAqX21l
bW9yeV93YXJuaW5nIGJlbmNobWFya3MuCisKKyAgICAgICAgVGhpcyBwYXRjaCB0ZWFjaGVzIHRo
ZSBhbGxvY2F0b3IgdG8gbWVyZ2UgYWRqYWNlbnQgZnJlZSBsaW5lcyBpbnRvIGEKKyAgICAgICAg
c2luZ2xlIGFsbG9jYXRhYmxlIHJhbmdlLiBUaGlzIGFsbG93cyB1cyB0byBzaHJpbmsgdGhlIHNp
emUgb2YgYW4KKyAgICAgICAgaW5kaXZpZHVhbCBsaW5lIHdpdGhvdXQgaW5jcmVhc2luZyBmcmFn
bWVudGF0aW9uIG9yIHRoZSByYXRlIG9mIGFsbG9jYXRvcgorICAgICAgICBzbG93IHBhdGhzLgor
CisgICAgICAgIFdlJ2xsIG9ubHkgdGFrZSBtb3JlIHNsb3cgcGF0aHMgd2hlbiBhdmFpbGFibGUg
bWVtb3J5IGlzIHNwYXJzZSwgd2hpY2gKKyAgICAgICAgaXMgZXhhY3RseSB3aGVuIGl0J3Mgd29y
dGggaXQuIFdoZW4gYXZhaWxhYmxlIG1lbW9yeSBpcyBkZW5zZSwgd2UnbGwKKyAgICAgICAgdGFr
ZSBmZXdlciBzbG93IHBhdGhzLgorCisgICAgICAgICogYm1hbGxvYy54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qOgorICAgICAgICAqIGJtYWxsb2MvQWxnb3JpdGhtLmg6CisgICAgICAgIChibWFs
bG9jOjpkaXZpZGVSb3VuZGluZ1VwKToKKworICAgICAgICAqIGJtYWxsb2MvQWxsb2NhdG9yLmNw
cDoKKyAgICAgICAgKGJtYWxsb2M6OkFsbG9jYXRvcjo6QWxsb2NhdG9yKTogVXBkYXRlZCBmb3Ig
aW50ZXJmYWNlIGNoYW5nZXMuCisKKyAgICAgICAgKGJtYWxsb2M6OkFsbG9jYXRvcjo6c2NhdmVu
Z2UpOiBTY2F2ZW5nZSBieSBvYmplY3QgaW5zdGVhZCBvZiBieSBsaW5lLgorICAgICAgICBOb3cg
dGhhdCB3ZSBtZXJnZSBsaW5lcywgaXQncyBub3QgY29udmVuaWVudCB0byBzY2F2ZW5nZSBieSBs
aW5lLgorCisgICAgICAgIChibWFsbG9jOjpBbGxvY2F0b3I6OmFsbG9jYXRlU21hbGxCdW1wUmFu
Z2UpOgorICAgICAgICAoYm1hbGxvYzo6QWxsb2NhdG9yOjphbGxvY2F0ZU1lZGl1bUJ1bXBSYW5n
ZSk6IEFsbG9jYXRlIHdob2xlIHJhbmdlcworICAgICAgICBpbnN0ZWFkIG9mIGluZGl2aWR1YWwg
bGluZXMuCisKKyAgICAgICAgKGJtYWxsb2M6OkFsbG9jYXRvcjo6YWxsb2NhdGVTbG93Q2FzZSk6
CisgICAgICAgIChibWFsbG9jOjpBbGxvY2F0b3I6OmFsbG9jYXRlU21hbGxMaW5lKTogRGVsZXRl
ZC4KKyAgICAgICAgKGJtYWxsb2M6OkFsbG9jYXRvcjo6YWxsb2NhdGVNZWRpdW1MaW5lKTogRGVs
ZXRlZC4KKyAgICAgICAgKGJtYWxsb2M6OkFsbG9jYXRvcjo6YWxsb2NhdGVNZWRpdW0pOiBEZWxl
dGVkLgorICAgICAgICAqIGJtYWxsb2MvQWxsb2NhdG9yLmg6CisgICAgICAgIChibWFsbG9jOjpB
bGxvY2F0b3I6OmFsbG9jYXRlRmFzdENhc2UpOiBGb2xkZWQgbWVkaXVtIGFsbG9jYXRpb25zCisg
ICAgICAgIGludG8gdGhlIHN0YW5kYXJkIGZhc3QgcGF0aCB3aXRoIHNtYWxsIGFsbG9jYXRpb25z
LiBTaW5jZSBhIEJ1bXBBbGxvY2F0b3IKKyAgICAgICAganVzdCBhbGxvY2F0ZXMgb3V0IG9mIGFu
IGFyYml0cmFyeSByYW5nZSwgaXQgZG9lc24ndCBuZWVkIHRvIGRpc3Rpbmd1aXNoCisgICAgICAg
IGJldHdlZW4gc21hbGwgYW5kIG1lZGl1bSBsaW5lcy4KKworICAgICAgICAqIGJtYWxsb2MvQnVt
cEFsbG9jYXRvci5oOgorICAgICAgICAoYm1hbGxvYzo6QnVtcEFsbG9jYXRvcjo6c2l6ZSk6Cisg
ICAgICAgIChibWFsbG9jOjpCdW1wQWxsb2NhdG9yOjpCdW1wQWxsb2NhdG9yKToKKyAgICAgICAg
KGJtYWxsb2M6OkJ1bXBBbGxvY2F0b3I6OmluaXQpOgorICAgICAgICAoYm1hbGxvYzo6QnVtcEFs
bG9jYXRvcjo6cmVmaWxsKToKKyAgICAgICAgKGJtYWxsb2M6OkJ1bXBBbGxvY2F0b3I6OmxpbmUp
OiBEZWxldGVkLiBObyBuZWVkIHRvIHRyYWNrIGxpbmUgaW5mb3JtYXRpb24KKyAgICAgICAgYW55
bW9yZTogdGhlIGhlYXAganVzdCBnaXZlcyB1cyBhIHBvaW50ZXIgYW5kIGEgcHJlLWNvbXB1dGVk
IG51bWJlciBvZgorICAgICAgICBvYmplY3RzLCBhbmQgd2UgYWxsb2NhdGUgdGhlbS4KKworICAg
ICAgICAqIGJtYWxsb2MvRGVhbGxvY2F0b3IuY3BwOgorICAgICAgICAoYm1hbGxvYzo6RGVhbGxv
Y2F0b3I6OnByb2Nlc3NPYmplY3RMb2cpOiBVcGRhdGVkIGZvciBpbnRlcmZhY2UgY2hhbmdlcy4K
KworICAgICAgICAqIGJtYWxsb2MvSGVhcC5jcHA6CisgICAgICAgIChibWFsbG9jOjpIZWFwOjpI
ZWFwKToKKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OmluaXRpYWxpemVMaW5lTWV0YWRhdGEpOiBQ
cmUtY29tcHV0ZSBwcmVjaXNlIG1ldGFkYXRhCisgICAgICAgIGRldGFpbGluZyB3aGVyZSBhbGwg
b2JqZWN0cyB3aWxsIGxpZSBpbiBtZW1vcnkuIEFmdGVyIHdlIG1lcmdlIHR3byBsaW5lcywKKyAg
ICAgICAgd2UgbWlnaHQgYWxsb2NhdGUgYW4gb2JqZWN0IHRoYXQgc3BhbnMgZnJvbSBvbmUgbGlu
ZSB0byB0aGUgbmV4dC4gVGhpcworICAgICAgICBtZXRhZGF0YSBkZXRhaWxzIHdoaWNoIGJpdHMg
b2YgbWVtb3J5IG92ZXJsYXAgaW4gdGhhdCB3YXksIGFuZCBob3cgdGhleQorICAgICAgICBvdmVy
bGFwLgorCisgICAgICAgIChibWFsbG9jOjpIZWFwOjpyZWZpbGxTbWFsbEJ1bXBSYW5nZUNhY2hl
KToKKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OnJlZmlsbE1lZGl1bUJ1bXBSYW5nZUNhY2hlKTog
U2NhbiBhIHdob2xlIHBhZ2UgYXQgYSB0aW1lLAorICAgICAgICBhbmQgbWVyZ2UgYWRqYWNlbnQg
ZnJlZSBsaW5lcyBpbnRvIEJ1bXBSYW5nZXMuCisKKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OmFs
bG9jYXRlU21hbGxQYWdlKToKKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OmFsbG9jYXRlTWVkaXVt
UGFnZSk6CisgICAgICAgIChibWFsbG9jOjpIZWFwOjpkZWFsbG9jYXRlU21hbGxMaW5lKToKKyAg
ICAgICAgKGJtYWxsb2M6OkhlYXA6OmRlYWxsb2NhdGVNZWRpdW1MaW5lKTogVHJhY2sgcGFnZXMg
cmF0aGVyIHRoYW4gbGluZXMsCisgICAgICAgIHNpbmNlIHdlIHNjYW4gZm9yIGZyZWUgbWVtb3J5
IGEgcGFnZSBhdCBhIHRpbWUuCisKKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OmFsbG9jYXRlU21h
bGxMaW5lU2xvd0Nhc2UpOiBEZWxldGVkLgorICAgICAgICAoYm1hbGxvYzo6SGVhcDo6YWxsb2Nh
dGVNZWRpdW1MaW5lU2xvd0Nhc2UpOiBEZWxldGVkLiBGb2xlZCBpbnRvIHRoZQorICAgICAgICBm
YXN0IHBhdGguCisKKyAgICAgICAgKiBibWFsbG9jL0hlYXAuaDoKKyAgICAgICAgKGJtYWxsb2M6
OkhlYXA6OmRlcmVmU21hbGxMaW5lKToKKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OmRlcmVmTWVk
aXVtTGluZSk6CisgICAgICAgIChibWFsbG9jOjpIZWFwOjpkZWFsbG9jYXRlU21hbGxMaW5lKTog
RGVsZXRlZC4KKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OmFsbG9jYXRlU21hbGxMaW5lKTogRGVs
ZXRlZC4KKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OmRlYWxsb2NhdGVNZWRpdW1MaW5lKTogRGVs
ZXRlZC4KKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OmFsbG9jYXRlTWVkaXVtTGluZSk6IERlbGV0
ZWQuIFVwZGF0ZWQgZm9yIGludGVyZmFjZSBjaGFuZ2VzLgorCisgICAgICAgICogYm1hbGxvYy9M
aW5lLmg6CisgICAgICAgIChibWFsbG9jOjpMaW5lPFRyYWl0cz46OnJlZik6CisgICAgICAgIChi
bWFsbG9jOjpMaW5lPFRyYWl0cz46OmRlcmVmKToKKyAgICAgICAgKGJtYWxsb2M6OkxpbmU8VHJh
aXRzPjo6Y29uY3VycmVudFJlZik6IERlbGV0ZWQuIFdlIGRvbid0IHBhc3MgYSBkZXJlZkNvdW50
CisgICAgICAgIGFueW1vcmUsIHNpbmNlIHdlIG9ubHkgZXZlciBkZXJlZiBieSAxIG5vdy4KKwor
ICAgICAgICAqIGJtYWxsb2MvTWVkaXVtQWxsb2NhdG9yLmg6CisgICAgICAgIChibWFsbG9jOjpN
ZWRpdW1BbGxvY2F0b3I6OmlzTnVsbCk6IERlbGV0ZWQuCisgICAgICAgIChibWFsbG9jOjpNZWRp
dW1BbGxvY2F0b3I6Ok1lZGl1bUFsbG9jYXRvcik6IERlbGV0ZWQuCisgICAgICAgIChibWFsbG9j
OjpNZWRpdW1BbGxvY2F0b3I6OmxpbmUpOiBEZWxldGVkLgorICAgICAgICAoYm1hbGxvYzo6TWVk
aXVtQWxsb2NhdG9yOjphbGxvY2F0ZSk6IERlbGV0ZWQuCisgICAgICAgIChibWFsbG9jOjpNZWRp
dW1BbGxvY2F0b3I6OmRlcmVmQ291bnQpOiBEZWxldGVkLgorICAgICAgICAoYm1hbGxvYzo6TWVk
aXVtQWxsb2NhdG9yOjpyZWZpbGwpOiBEZWxldGVkLgorICAgICAgICAoYm1hbGxvYzo6TWVkaXVt
QWxsb2NhdG9yOjpjbGVhcik6IERlbGV0ZWQuIERlbGV0ZWQgc29tZSBjb2RlIHRoYXQncworICAg
ICAgICBiZWVuIGRlYWQgZm9yIGEgd2hpbGUsIHNpbmNlIGl0IGRvZXNuJ3QgYnVpbGQgYW55bW9y
ZSB3aXRoIHRoaXMgcGF0Y2guCisKKyAgICAgICAgKiBibWFsbG9jL1BhZ2UuaDoKKyAgICAgICAg
KGJtYWxsb2M6OlBhZ2U6OnNpemVDbGFzcyk6CisgICAgICAgIChibWFsbG9jOjpQYWdlOjpzZXRT
aXplQ2xhc3MpOgorICAgICAgICAoYm1hbGxvYzo6UGFnZTo6c21hbGxTaXplQ2xhc3MpOiBEZWxl
dGVkLgorICAgICAgICAoYm1hbGxvYzo6UGFnZTo6c2V0U21hbGxTaXplQ2xhc3MpOiBEZWxldGVk
LiBSZW5hbWVkIHNldFNtYWxsU2l6ZUNsYXNzCisgICAgICAgIHRvIHNpemVDbGFzcywgc2luY2Ug
d2UgdXNlIGl0IGZvciBtZWRpdW0gc2l6ZXMgdG9vLgorCisgICAgICAgICogYm1hbGxvYy9TaXpl
cy5oOgorICAgICAgICAoYm1hbGxvYzo6U2l6ZXM6OnNpemVDbGFzcyk6CisgICAgICAgIChibWFs
bG9jOjpTaXplczo6b2JqZWN0U2l6ZSk6IFNocmFuayBsaW5lIHNpemVzIHRvIHNhdmUgbWVtb3J5
LgorCisgICAgICAgIChibWFsbG9jOjpTaXplczo6c21hbGxTaXplQ2xhc3NGb3IpOiBEZWxldGVk
LgorICAgICAgICAoYm1hbGxvYzo6U2l6ZXM6Om1lZGl1bVNpemVDbGFzc0Zvcik6IERlbGV0ZWQu
CisKKyAgICAgICAgKiBibWFsbG9jL2JtYWxsb2MuaDoKKyAgICAgICAgKGJtYWxsb2M6OmFwaTo6
cmVhbGxvYyk6IE5vdyB0aGF0IHdlIGhhdmUgcHJlY2lzZSBvYmplY3RzIHNpemVzLCByZWFsbG9j
CisgICAgICAgIGNhbiBiZSBhIGJpdCBtb3JlIHByZWNpc2UuIEl0IGFsc28gaGFzIHRvIGJlLCBz
aW5jZSB3ZSBjYW4ndCBndWFyYW50ZWUKKyAgICAgICAgdGhhdCBhbiBvYmplY3QgZW5kcyBhdCB0
aGUgZW5kIG9mIGEgbGluZSBhbnltb3JlLgorCiAyMDE0LTA5LTE5ICBEYW5pZWwgQmF0ZXMgIDxk
YWJhdGVzQGFwcGxlLmNvbT4KIAogICAgICAgICBBbHdheXMgYXNzdW1lIGludGVybmFsIFNESyB3
aGVuIGJ1aWxkaW5nIGNvbmZpZ3VyYXRpb24gUHJvZHVjdGlvbgpJbmRleDogU291cmNlL2JtYWxs
b2MvYm1hbGxvYy54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9ibWFsbG9jL2JtYWxsb2MueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTcz
ODU2KQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CSh3b3JraW5nIGNvcHkpCkBAIC0xMSw2ICsxMSw4IEBACiAJCTE0MDAyNzRBMThGODlDMjMwMDEx
NUM5NyAvKiBWTUhlYXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDE0NEY3QkZDMThCRkM1MTcwMDM1MzdGMyAvKiBWTUhlYXAuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxNDAwMjc0QjE4Rjg5QzNEMDAx
MTVDOTcgLyogQm91bmRhcnlUYWdJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAxNDEwNUU3QjE4REJEN0FGMDAzQTEwNkUgLyogQm91bmRhcnlU
YWdJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMTQwMDI3NEMxOEY4OUMzRDAwMTE1Qzk3IC8qIFNlZ3JlZ2F0ZWRGcmVlTGlzdC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ2QkVFMUUxOEM4
NDFDNTAwMDJENUEyIC8qIFNlZ3JlZ2F0ZWRGcmVlTGlzdC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTE0MEZBMDAzMTlDRTQyOUMwMEZGRDNDOCAv
KiBCdW1wUmFuZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDE0MEZBMDAyMTlDRTQyOUMwMEZGRDNDOCAvKiBCdW1wUmFuZ2UuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkxNDBGQTAwNTE5Q0U0QjY4MDBG
RkQzQzggLyogTGluZU1ldGFkYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAxNDBGQTAwNDE5Q0U0QjY4MDBGRkQzQzggLyogTGluZU1ldGFkYXRhLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTQzQ0I4
MUMxOTAyMkJDOTAwQjE2QTQ1IC8qIFN0YXRpY011dGV4LmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0M0NCODFBMTkwMjJCQzkwMEIxNkE0NSAvKiBT
dGF0aWNNdXRleC5jcHAgKi87IH07CiAJCTE0M0NCODFEMTkwMjJCQzkwMEIxNkE0NSAvKiBTdGF0
aWNNdXRleC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MTQzQ0I4MUIxOTAyMkJDOTAwQjE2QTQ1IC8qIFN0YXRpY011dGV4LmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTQ0OEMzMDAxOEYzNzU0NjAwNTAy
ODM5IC8qIG1ibWFsbG9jLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDE0NDhDMkZGMThGMzc1NDMwMDUwMjgzOSAvKiBtYm1hbGxvYy5jcHAgKi87IH07
CkBAIC0yNiw3ICsyOCw2IEBACiAJCTE0REQ3ODk4MThGNDhENEEwMDk1MDcwMiAvKiBBbGxvY2F0
b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0NUY2
ODU2MTc5REM4Q0EwMEQ2NTU5OCAvKiBBbGxvY2F0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxNERENzg5OTE4RjQ4RDRBMDA5NTA3MDIgLyog
Q2FjaGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0
NDQ2OUU1MTdBNDZCRkUwMEY5RUExRCAvKiBDYWNoZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTE0REQ3ODlBMThGNDhENEEwMDk1MDcwMiAvKiBE
ZWFsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMTQ1RjY4NUExNzlEQzkwMjAwRDY1NTk4IC8qIERlYWxsb2NhdG9yLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMTRERDc4OUIxOEY0OEQ0QTAw
OTUwNzAyIC8qIE1lZGl1bUFsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMTQxM0U0NzAxOEEwNjYxNzAwNTQ2RDY4IC8qIE1lZGl1bUFsbG9j
YXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTE0REQ3ODlDMThGNDhENEEwMDk1MDcwMiAvKiBCdW1wQWxsb2NhdG9yLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDEzRTQ2MjE4OURFMUNEMDA1NDZE
NjggLyogQnVtcEFsbG9jYXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTE0REQ3OEI0MThGNDhENkIwMDk1MDcwMiAvKiBDaHVuay5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ3QUFBOTQxOENFNUNB
NjAwMjIwMUU0IC8qIENodW5rLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJMTRERDc4QjUxOEY0OEQ2QjAwOTUwNzAyIC8qIExpbmUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0REEzMjA3MTg4NUY5RTYw
MDcyNjlFMCAvKiBMaW5lLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKQEAgLTcyLDEyICs3MywxMyBAQAogLyogRW5kIFBCWENvbnRhaW5lckl0ZW1Qcm94
eSBzZWN0aW9uICovCiAKIC8qIEJlZ2luIFBCWEZpbGVSZWZlcmVuY2Ugc2VjdGlvbiAqLworCQkx
NDBGQTAwMjE5Q0U0MjlDMDBGRkQzQzggLyogQnVtcFJhbmdlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IEJ1bXBSYW5nZS5oOyBwYXRoID0gYm1hbGxvYy9CdW1wUmFuZ2UuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMTQwRkEwMDQxOUNFNEI2ODAwRkZEM0M4IC8q
IExpbmVNZXRhZGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBMaW5lTWV0
YWRhdGEuaDsgcGF0aCA9IGJtYWxsb2MvTGluZU1ldGFkYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTE0MTA1RTdCMThEQkQ3QUYwMDNBMTA2RSAvKiBCb3VuZGFyeVRhZ0lubGlu
ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQm91bmRhcnlUYWdJbmxpbmVz
Lmg7IHBhdGggPSBibWFsbG9jL0JvdW5kYXJ5VGFnSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkxNDEwNUU4MzE4RTE0Mzc0MDAzQTEwNkUgLyogT2JqZWN0VHlwZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBPYmplY3RUeXBlLmNwcDsgcGF0
aCA9IGJtYWxsb2MvT2JqZWN0VHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTE0MTNFNDYwMTg5RENFMUUwMDU0NkQ2OCAvKiBJbmxpbmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gSW5saW5lLmg7IHBhdGggPSBibWFsbG9jL0lubGluZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkxNDEzRTQ2MjE4OURFMUNEMDA1NDZENjggLyogQnVtcEFs
bG9jYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IGxpbmVFbmRpbmcgPSAwOyBuYW1l
ID0gQnVtcEFsbG9jYXRvci5oOyBwYXRoID0gYm1hbGxvYy9CdW1wQWxsb2NhdG9yLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0MTNFNDY4MTg5RUVERTQwMDU0NkQ2OCAvKiBCQXNz
ZXJ0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEJBc3NlcnQuaDsgcGF0aCA9
IGJtYWxsb2MvQkFzc2VydC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxNDEzRTQ3
MDE4QTA2NjE3MDA1NDZENjggLyogTWVkaXVtQWxsb2NhdG9yLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IE1lZGl1bUFsbG9jYXRvci5oOyBwYXRoID0gYm1hbGxvYy9NZWRpdW1B
bGxvY2F0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQxN0Y2NDUxOEI1NEE3
MDAwNzZGQTNGIC8qIEJlZ2luVGFnLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IEJlZ2luVGFnLmg7IHBhdGggPSBibWFsbG9jL0JlZ2luVGFnLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTE0MTdGNjQ2MThCNTRBNzAwMDc2RkEzRiAvKiBFbmRUYWcuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRW5kVGFnLmg7IHBhdGggPSBibWFsbG9jL0VuZFRh
Zy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDE3RjY0RjE4QjcyODBDMDA3NkZB
M0YgLyogU3lzY2FsbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBTeXNjYWxs
Lmg7IHBhdGggPSBibWFsbG9jL1N5c2NhbGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTIzNSw3ICsyMzcsNiBAQAogCQkJCTE0NDQ2OUU1MTdBNDZCRkUwMEY5RUExRCAvKiBDYWNo
ZS5oICovLAogCQkJCTE0NUY2ODU5MTc5REM5MDIwMEQ2NTU5OCAvKiBEZWFsbG9jYXRvci5jcHAg
Ki8sCiAJCQkJMTQ1RjY4NUExNzlEQzkwMjAwRDY1NTk4IC8qIERlYWxsb2NhdG9yLmggKi8sCi0J
CQkJMTQxM0U0NzAxOEEwNjYxNzAwNTQ2RDY4IC8qIE1lZGl1bUFsbG9jYXRvci5oICovLAogCQkJ
CTE0MTNFNDYyMTg5REUxQ0QwMDU0NkQ2OCAvKiBCdW1wQWxsb2NhdG9yLmggKi8sCiAJCQkpOwog
CQkJbmFtZSA9IGNhY2hlOwpAQCAtMjQ0LDggKzI0NSwxMCBAQAogCQkxNEQ5REI0RTE3RjI4NjZF
MDBFQUFCNzkgLyogaGVhcCAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4g
PSAoCisJCQkJMTQwRkEwMDIxOUNFNDI5QzAwRkZEM0M4IC8qIEJ1bXBSYW5nZS5oICovLAogCQkJ
CTE0REEzMjBFMTg4NzVEOUYwMDcyNjlFMCAvKiBIZWFwLmNwcCAqLywKIAkJCQkxNERBMzIwQzE4
ODc1QjA5MDA3MjY5RTAgLyogSGVhcC5oICovLAorCQkJCTE0MEZBMDA0MTlDRTRCNjgwMEZGRDND
OCAvKiBMaW5lTWV0YWRhdGEuaCAqLywKIAkJCQkxNDEwNUU4MzE4RTE0Mzc0MDAzQTEwNkUgLyog
T2JqZWN0VHlwZS5jcHAgKi8sCiAJCQkJMTQ4NTY1NjAxOEE0M0RCQTAwRUQ2OTQyIC8qIE9iamVj
dFR5cGUuaCAqLywKIAkJCQkxNDVGNjg3NDE3OURGODQxMDBENjU1OTggLyogU2l6ZXMuaCAqLywK
QEAgLTI5Niw2ICsyOTksNyBAQAogCQkJCTE0QzkxOUM5MThGQ0M1OUYwMDI4REI0MyAvKiBCUGxh
dGZvcm0uaCBpbiBIZWFkZXJzICovLAogCQkJCTE0REQ3ODhDMThGNDhDQUUwMDk1MDcwMiAvKiBM
YXJnZUNodW5rLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNERENzg5MjE4RjQ4Q0ZDMDA5NTA3MDIg
LyogRW5kVGFnLmggaW4gSGVhZGVycyAqLywKKwkJCQkxNDBGQTAwNTE5Q0U0QjY4MDBGRkQzQzgg
LyogTGluZU1ldGFkYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNERENzhDQzE4RjQ4RDc1MDA5
NTA3MDIgLyogUGVyVGhyZWFkLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNERENzhCNDE4RjQ4RDZC
MDA5NTA3MDIgLyogQ2h1bmsuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0REQ3OENBMThGNDhENzUw
MDk1MDcwMiAvKiBNdXRleC5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMDksNyArMzEzLDYgQEAKIAkJ
CQkxNERENzhDRDE4RjQ4RDc1MDA5NTA3MDIgLyogUmFuZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTE0REQ3ODlDMThGNDhENEEwMDk1MDcwMiAvKiBCdW1wQWxsb2NhdG9yLmggaW4gSGVhZGVycyAq
LywKIAkJCQkxNERENzg5OTE4RjQ4RDRBMDA5NTA3MDIgLyogQ2FjaGUuaCBpbiBIZWFkZXJzICov
LAotCQkJCTE0REQ3ODlCMThGNDhENEEwMDk1MDcwMiAvKiBNZWRpdW1BbGxvY2F0b3IuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTE0REQ3OEJFMThGNDhENkIwMDk1MDcwMiAvKiBTbWFsbFRyYWl0cy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMTRERDc4OTAxOEY0OENFQjAwOTUwNzAyIC8qIFNpemVzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkxNERENzhDNzE4RjQ4RDc1MDA5NTA3MDIgLyogQkFzc2VydC5o
IGluIEhlYWRlcnMgKi8sCkBAIC0zMjIsNiArMzI1LDcgQEAKIAkJCQkxNDAwMjc0QTE4Rjg5QzIz
MDAxMTVDOTcgLyogVk1IZWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDAwMjc0OTE4Rjg5QzEz
MDAxMTVDOTcgLyogSGVhcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRERDc4QjgxOEY0OEQ2QjAw
OTUwNzAyIC8qIE1lZGl1bVBhZ2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTE0MEZBMDAzMTlDRTQy
OUMwMEZGRDNDOCAvKiBCdW1wUmFuZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0REQ3OEM1MThG
NDhENzUwMDk1MDcwMiAvKiBBbGdvcml0aG0uaCBpbiBIZWFkZXJzICovLAogCQkJCTE0REQ3OEJE
MThGNDhENkIwMDk1MDcwMiAvKiBTbWFsbFBhZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0MDAy
NzRCMThGODlDM0QwMDExNUM5NyAvKiBCb3VuZGFyeVRhZ0lubGluZXMuaCBpbiBIZWFkZXJzICov
LApJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9BbGdvcml0aG0uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0FsZ29yaXRobS5oCShyZXZpc2lvbiAxNzM4NTYpCisr
KyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0FsZ29yaXRobS5oCSh3b3JraW5nIGNvcHkpCkBAIC03
NCw2ICs3NCwxNCBAQCB0ZW1wbGF0ZTxzaXplX3QgZGl2aXNvciwgdHlwZW5hbWUgVD4gaW5sCiAg
ICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VD4obWFzayhyZWludGVycHJldF9jYXN0PHVpbnRw
dHJfdD4oeCksIH4oZGl2aXNvciAtIDF1bCkpKTsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUgVD4g
dm9pZCBkaXZpZGVSb3VuZGluZ1VwKFQgbnVtZXJhdG9yLCBUIGRlbm9taW5hdG9yLCBUJiBxdW90
aWVudCwgVCYgcmVtYWluZGVyKQoreworICAgIHF1b3RpZW50ID0gbnVtZXJhdG9yIC8gZGVub21p
bmF0b3I7CisgICAgcmVtYWluZGVyID0gbnVtZXJhdG9yICUgZGVub21pbmF0b3I7CisgICAgaWYg
KHJlbWFpbmRlcikKKyAgICAgICAgcXVvdGllbnQgKz0gMTsKK30KKwogLy8gVmVyc2lvbiBvZiBz
aXplb2YgdGhhdCByZXR1cm5zIDAgZm9yIGVtcHR5IGNsYXNzZXMuCiAKIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+IGlubGluZSBjb25zdGV4cHIgc2l6ZV90IHNpemVPZigpCkluZGV4OiBTb3VyY2UvYm1h
bGxvYy9ibWFsbG9jL0FsbG9jYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2Mv
Ym1hbGxvYy9BbGxvY2F0b3IuY3BwCShyZXZpc2lvbiAxNzM4NTYpCisrKyBTb3VyY2UvYm1hbGxv
Yy9ibWFsbG9jL0FsbG9jYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDExICszOCwxMSBA
QCBuYW1lc3BhY2UgYm1hbGxvYyB7CiBBbGxvY2F0b3I6OkFsbG9jYXRvcihEZWFsbG9jYXRvciYg
ZGVhbGxvY2F0b3IpCiAgICAgOiBtX2RlYWxsb2NhdG9yKGRlYWxsb2NhdG9yKQogewotICAgIGZv
ciAodW5zaWduZWQgc2hvcnQgaSA9IGFsaWdubWVudDsgaSA8PSBzbWFsbE1heDsgaSArPSBhbGln
bm1lbnQpCi0gICAgICAgIG1fc21hbGxBbGxvY2F0b3JzW3NtYWxsU2l6ZUNsYXNzRm9yKGkpXS5p
bml0PFNtYWxsTGluZT4oaSk7CisgICAgZm9yICh1bnNpZ25lZCBzaG9ydCBzaXplID0gYWxpZ25t
ZW50OyBzaXplIDw9IHNtYWxsTWF4OyBzaXplICs9IGFsaWdubWVudCkKKyAgICAgICAgbV9idW1w
QWxsb2NhdG9yc1tzaXplQ2xhc3Moc2l6ZSldLmluaXQoc2l6ZSk7CiAKLSAgICBmb3IgKHVuc2ln
bmVkIHNob3J0IGkgPSBzbWFsbE1heCArIGFsaWdubWVudDsgaSA8PSBtZWRpdW1NYXg7IGkgKz0g
YWxpZ25tZW50KQotICAgICAgICBtX21lZGl1bUFsbG9jYXRvcnNbbWVkaXVtU2l6ZUNsYXNzRm9y
KGkpXS5pbml0PE1lZGl1bUxpbmU+KGkpOworICAgIGZvciAodW5zaWduZWQgc2hvcnQgc2l6ZSA9
IHNtYWxsTWF4ICsgYWxpZ25tZW50OyBzaXplIDw9IG1lZGl1bU1heDsgc2l6ZSArPSBhbGlnbm1l
bnQpCisgICAgICAgIG1fYnVtcEFsbG9jYXRvcnNbc2l6ZUNsYXNzKHNpemUpXS5pbml0KHNpemUp
OwogfQogCiBBbGxvY2F0b3I6On5BbGxvY2F0b3IoKQpAQCAtNTIsNTQgKzUyLDU5IEBAIEFsbG9j
YXRvcjo6fkFsbG9jYXRvcigpCiAKIHZvaWQgQWxsb2NhdG9yOjpzY2F2ZW5nZSgpCiB7Ci0gICAg
Zm9yIChhdXRvJiBhbGxvY2F0b3IgOiBtX3NtYWxsQWxsb2NhdG9ycykgeworICAgIGZvciAodW5z
aWduZWQgc2hvcnQgaSA9IGFsaWdubWVudDsgaSA8PSBzbWFsbE1heDsgaSArPSBhbGlnbm1lbnQp
IHsKKyAgICAgICAgQnVtcEFsbG9jYXRvciYgYWxsb2NhdG9yID0gbV9idW1wQWxsb2NhdG9yc1tz
aXplQ2xhc3MoaSldOworICAgICAgICBTbWFsbEJ1bXBSYW5nZUNhY2hlJiBidW1wUmFuZ2VDYWNo
ZSA9IG1fc21hbGxCdW1wUmFuZ2VDYWNoZXNbc2l6ZUNsYXNzKGkpXTsKKwogICAgICAgICB3aGls
ZSAoYWxsb2NhdG9yLmNhbkFsbG9jYXRlKCkpCiAgICAgICAgICAgICBtX2RlYWxsb2NhdG9yLmRl
YWxsb2NhdGUoYWxsb2NhdG9yLmFsbG9jYXRlKCkpOworCisgICAgICAgIHdoaWxlIChidW1wUmFu
Z2VDYWNoZS5zaXplKCkpIHsKKyAgICAgICAgICAgIGFsbG9jYXRvci5yZWZpbGwoYnVtcFJhbmdl
Q2FjaGUucG9wKCkpOworICAgICAgICAgICAgd2hpbGUgKGFsbG9jYXRvci5jYW5BbGxvY2F0ZSgp
KQorICAgICAgICAgICAgICAgIG1fZGVhbGxvY2F0b3IuZGVhbGxvY2F0ZShhbGxvY2F0b3IuYWxs
b2NhdGUoKSk7CisgICAgICAgIH0KKwogICAgICAgICBhbGxvY2F0b3IuY2xlYXIoKTsKICAgICB9
CiAKLSAgICBmb3IgKGF1dG8mIGFsbG9jYXRvciA6IG1fbWVkaXVtQWxsb2NhdG9ycykgeworICAg
IGZvciAodW5zaWduZWQgc2hvcnQgaSA9IHNtYWxsTWF4ICsgYWxpZ25tZW50OyBpIDw9IG1lZGl1
bU1heDsgaSArPSBhbGlnbm1lbnQpIHsKKyAgICAgICAgQnVtcEFsbG9jYXRvciYgYWxsb2NhdG9y
ID0gbV9idW1wQWxsb2NhdG9yc1tzaXplQ2xhc3MoaSldOworICAgICAgICBNZWRpdW1CdW1wUmFu
Z2VDYWNoZSYgYnVtcFJhbmdlQ2FjaGUgPSBtX21lZGl1bUJ1bXBSYW5nZUNhY2hlc1tzaXplQ2xh
c3MoaSldOworCiAgICAgICAgIHdoaWxlIChhbGxvY2F0b3IuY2FuQWxsb2NhdGUoKSkKICAgICAg
ICAgICAgIG1fZGVhbGxvY2F0b3IuZGVhbGxvY2F0ZShhbGxvY2F0b3IuYWxsb2NhdGUoKSk7Ci0g
ICAgICAgIGFsbG9jYXRvci5jbGVhcigpOwotICAgIH0KIAotICAgIHN0ZDo6bG9ja19ndWFyZDxT
dGF0aWNNdXRleD4gbG9jayhQZXJQcm9jZXNzPEhlYXA+OjptdXRleCgpKTsKLSAgICBIZWFwKiBo
ZWFwID0gUGVyUHJvY2VzczxIZWFwPjo6Z2V0RmFzdENhc2UoKTsKLSAgICAKLSAgICBmb3IgKGF1
dG8mIHNtYWxsTGluZUNhY2hlIDogbV9zbWFsbExpbmVDYWNoZXMpIHsKLSAgICAgICAgd2hpbGUg
KHNtYWxsTGluZUNhY2hlLnNpemUoKSkKLSAgICAgICAgICAgIGhlYXAtPmRlYWxsb2NhdGVTbWFs
bExpbmUobG9jaywgc21hbGxMaW5lQ2FjaGUucG9wKCkpOworICAgICAgICB3aGlsZSAoYnVtcFJh
bmdlQ2FjaGUuc2l6ZSgpKSB7CisgICAgICAgICAgICBhbGxvY2F0b3IucmVmaWxsKGJ1bXBSYW5n
ZUNhY2hlLnBvcCgpKTsKKyAgICAgICAgICAgIHdoaWxlIChhbGxvY2F0b3IuY2FuQWxsb2NhdGUo
KSkKKyAgICAgICAgICAgICAgICBtX2RlYWxsb2NhdG9yLmRlYWxsb2NhdGUoYWxsb2NhdG9yLmFs
bG9jYXRlKCkpOworICAgICAgICB9CisKKyAgICAgICAgYWxsb2NhdG9yLmNsZWFyKCk7CiAgICAg
fQotICAgIHdoaWxlIChtX21lZGl1bUxpbmVDYWNoZS5zaXplKCkpCi0gICAgICAgIGhlYXAtPmRl
YWxsb2NhdGVNZWRpdW1MaW5lKGxvY2ssIG1fbWVkaXVtTGluZUNhY2hlLnBvcCgpKTsKIH0KIAot
U21hbGxMaW5lKiBBbGxvY2F0b3I6OmFsbG9jYXRlU21hbGxMaW5lKHNpemVfdCBzbWFsbFNpemVD
bGFzcykKK0J1bXBSYW5nZSBBbGxvY2F0b3I6OmFsbG9jYXRlU21hbGxCdW1wUmFuZ2Uoc2l6ZV90
IHNpemVDbGFzcykKIHsKLSAgICBTbWFsbExpbmVDYWNoZSYgc21hbGxMaW5lQ2FjaGUgPSBtX3Nt
YWxsTGluZUNhY2hlc1tzbWFsbFNpemVDbGFzc107Ci0gICAgaWYgKCFzbWFsbExpbmVDYWNoZS5z
aXplKCkpIHsKKyAgICBTbWFsbEJ1bXBSYW5nZUNhY2hlJiBidW1wUmFuZ2VDYWNoZSA9IG1fc21h
bGxCdW1wUmFuZ2VDYWNoZXNbc2l6ZUNsYXNzXTsKKyAgICBpZiAoIWJ1bXBSYW5nZUNhY2hlLnNp
emUoKSkgewogICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+IGxvY2soUGVyUHJv
Y2VzczxIZWFwPjo6bXV0ZXgoKSk7Ci0gICAgICAgIEhlYXAqIGhlYXAgPSBQZXJQcm9jZXNzPEhl
YXA+OjpnZXRGYXN0Q2FzZSgpOwotCi0gICAgICAgIHdoaWxlIChzbWFsbExpbmVDYWNoZS5zaXpl
KCkgIT0gc21hbGxMaW5lQ2FjaGUuY2FwYWNpdHkoKSkKLSAgICAgICAgICAgIHNtYWxsTGluZUNh
Y2hlLnB1c2goaGVhcC0+YWxsb2NhdGVTbWFsbExpbmUobG9jaywgc21hbGxTaXplQ2xhc3MpKTsK
KyAgICAgICAgUGVyUHJvY2VzczxIZWFwPjo6Z2V0RmFzdENhc2UoKS0+cmVmaWxsU21hbGxCdW1w
UmFuZ2VDYWNoZShsb2NrLCBzaXplQ2xhc3MsIGJ1bXBSYW5nZUNhY2hlKTsKICAgICB9CiAKLSAg
ICByZXR1cm4gc21hbGxMaW5lQ2FjaGUucG9wKCk7CisgICAgcmV0dXJuIGJ1bXBSYW5nZUNhY2hl
LnBvcCgpOwogfQogCi1NZWRpdW1MaW5lKiBBbGxvY2F0b3I6OmFsbG9jYXRlTWVkaXVtTGluZSgp
CitCdW1wUmFuZ2UgQWxsb2NhdG9yOjphbGxvY2F0ZU1lZGl1bUJ1bXBSYW5nZShzaXplX3Qgc2l6
ZUNsYXNzKQogewotICAgIGlmICghbV9tZWRpdW1MaW5lQ2FjaGUuc2l6ZSgpKSB7CisgICAgTWVk
aXVtQnVtcFJhbmdlQ2FjaGUmIGJ1bXBSYW5nZUNhY2hlID0gbV9tZWRpdW1CdW1wUmFuZ2VDYWNo
ZXNbc2l6ZUNsYXNzXTsKKyAgICBpZiAoIWJ1bXBSYW5nZUNhY2hlLnNpemUoKSkgewogICAgICAg
ICBzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+IGxvY2soUGVyUHJvY2VzczxIZWFwPjo6bXV0
ZXgoKSk7Ci0gICAgICAgIEhlYXAqIGhlYXAgPSBQZXJQcm9jZXNzPEhlYXA+OjpnZXRGYXN0Q2Fz
ZSgpOwotCi0gICAgICAgIHdoaWxlIChtX21lZGl1bUxpbmVDYWNoZS5zaXplKCkgIT0gbV9tZWRp
dW1MaW5lQ2FjaGUuY2FwYWNpdHkoKSkKLSAgICAgICAgICAgIG1fbWVkaXVtTGluZUNhY2hlLnB1
c2goaGVhcC0+YWxsb2NhdGVNZWRpdW1MaW5lKGxvY2spKTsKKyAgICAgICAgUGVyUHJvY2VzczxI
ZWFwPjo6Z2V0RmFzdENhc2UoKS0+cmVmaWxsTWVkaXVtQnVtcFJhbmdlQ2FjaGUobG9jaywgc2l6
ZUNsYXNzLCBidW1wUmFuZ2VDYWNoZSk7CiAgICAgfQogCi0gICAgcmV0dXJuIG1fbWVkaXVtTGlu
ZUNhY2hlLnBvcCgpOworICAgIHJldHVybiBidW1wUmFuZ2VDYWNoZS5wb3AoKTsKIH0KIAogdm9p
ZCogQWxsb2NhdG9yOjphbGxvY2F0ZUxhcmdlKHNpemVfdCBzaXplKQpAQCAtMTE2LDMwICsxMjEs
MjcgQEAgdm9pZCogQWxsb2NhdG9yOjphbGxvY2F0ZVhMYXJnZShzaXplX3QgcwogICAgIHJldHVy
biBQZXJQcm9jZXNzPEhlYXA+OjpnZXRGYXN0Q2FzZSgpLT5hbGxvY2F0ZVhMYXJnZShsb2NrLCBz
aXplKTsKIH0KIAotdm9pZCogQWxsb2NhdG9yOjphbGxvY2F0ZU1lZGl1bShzaXplX3Qgc2l6ZSkK
LXsKLSAgICBCdW1wQWxsb2NhdG9yJiBhbGxvY2F0b3IgPSBtX21lZGl1bUFsbG9jYXRvcnNbbWVk
aXVtU2l6ZUNsYXNzRm9yKHNpemUpXTsKLQotICAgIGlmICghYWxsb2NhdG9yLmNhbkFsbG9jYXRl
KCkpCi0gICAgICAgIGFsbG9jYXRvci5yZWZpbGwoYWxsb2NhdGVNZWRpdW1MaW5lKCkpOwotICAg
IHJldHVybiBhbGxvY2F0b3IuYWxsb2NhdGUoKTsKLX0KLQogdm9pZCogQWxsb2NhdG9yOjphbGxv
Y2F0ZVNsb3dDYXNlKHNpemVfdCBzaXplKQogewogSUZfREVCVUcoCiAgICAgdm9pZCogZHVtbXk7
CiAgICAgQkFTU0VSVCghYWxsb2NhdGVGYXN0Q2FzZShzaXplLCBkdW1teSkpOwogKQotICAgIGlm
IChzaXplIDw9IHNtYWxsTWF4KSB7Ci0gICAgICAgIHNpemVfdCBzbWFsbFNpemVDbGFzcyA9IHNt
YWxsU2l6ZUNsYXNzRm9yKHNpemUpOwotICAgICAgICBCdW1wQWxsb2NhdG9yJiBhbGxvY2F0b3Ig
PSBtX3NtYWxsQWxsb2NhdG9yc1tzbWFsbFNpemVDbGFzc107Ci0gICAgICAgIGFsbG9jYXRvci5y
ZWZpbGwoYWxsb2NhdGVTbWFsbExpbmUoc21hbGxTaXplQ2xhc3MpKTsKLSAgICAgICAgcmV0dXJu
IGFsbG9jYXRvci5hbGxvY2F0ZSgpOwotICAgIH0KIAotICAgIGlmIChzaXplIDw9IG1lZGl1bU1h
eCkKLSAgICAgICAgcmV0dXJuIGFsbG9jYXRlTWVkaXVtKHNpemUpOworICAgIGlmIChzaXplIDw9
IG1lZGl1bU1heCkgeworICAgICAgICBzaXplX3Qgc2l6ZUNsYXNzID0gYm1hbGxvYzo6c2l6ZUNs
YXNzKHNpemUpOworICAgICAgICBCdW1wQWxsb2NhdG9yJiBhbGxvY2F0b3IgPSBtX2J1bXBBbGxv
Y2F0b3JzW3NpemVDbGFzc107CisKKyAgICAgICAgaWYgKGFsbG9jYXRvci5zaXplKCkgPD0gc21h
bGxNYXgpIHsKKyAgICAgICAgICAgIGFsbG9jYXRvci5yZWZpbGwoYWxsb2NhdGVTbWFsbEJ1bXBS
YW5nZShzaXplQ2xhc3MpKTsKKyAgICAgICAgICAgIHJldHVybiBhbGxvY2F0b3IuYWxsb2NhdGUo
KTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChhbGxvY2F0b3Iuc2l6ZSgpIDw9IG1lZGl1bU1h
eCkgeworICAgICAgICAgICAgYWxsb2NhdG9yLnJlZmlsbChhbGxvY2F0ZU1lZGl1bUJ1bXBSYW5n
ZShzaXplQ2xhc3MpKTsKKyAgICAgICAgICAgIHJldHVybiBhbGxvY2F0b3IuYWxsb2NhdGUoKTsK
KyAgICAgICAgfQorICAgIH0KICAgICAKICAgICBpZiAoc2l6ZSA8PSBsYXJnZU1heCkKICAgICAg
ICAgcmV0dXJuIGFsbG9jYXRlTGFyZ2Uoc2l6ZSk7CkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFs
bG9jL0FsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQWxs
b2NhdG9yLmgJKHJldmlzaW9uIDE3Mzg1NikKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQWxs
b2NhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAKIAogI2luY2x1ZGUgIkJ1
bXBBbGxvY2F0b3IuaCIKICNpbmNsdWRlICJGaXhlZFZlY3Rvci5oIgotI2luY2x1ZGUgIk1lZGl1
bUFsbG9jYXRvci5oIgorI2luY2x1ZGUgIkhlYXAuaCIKICNpbmNsdWRlICJTaXplcy5oIgogI2lu
Y2x1ZGUgIlNtYWxsTGluZS5oIgogI2luY2x1ZGUgPGFycmF5PgpAQCAtNTEsMzMgKzUxLDI5IEBA
IHB1YmxpYzoKICAgICB2b2lkIHNjYXZlbmdlKCk7CiAKIHByaXZhdGU6Ci0gICAgdHlwZWRlZiBG
aXhlZFZlY3RvcjxTbWFsbExpbmUqLCBzbWFsbExpbmVDYWNoZUNhcGFjaXR5PiBTbWFsbExpbmVD
YWNoZTsKLSAgICB0eXBlZGVmIEZpeGVkVmVjdG9yPE1lZGl1bUxpbmUqLCBtZWRpdW1MaW5lQ2Fj
aGVDYXBhY2l0eT4gTWVkaXVtTGluZUNhY2hlOwotCiAgICAgdm9pZCogYWxsb2NhdGVGYXN0Q2Fz
ZShCdW1wQWxsb2NhdG9yJik7CiAKICAgICB2b2lkKiBhbGxvY2F0ZU1lZGl1bShzaXplX3QpOwog
ICAgIHZvaWQqIGFsbG9jYXRlTGFyZ2Uoc2l6ZV90KTsKICAgICB2b2lkKiBhbGxvY2F0ZVhMYXJn
ZShzaXplX3QpOwogICAgIAotICAgIFNtYWxsTGluZSogYWxsb2NhdGVTbWFsbExpbmUoc2l6ZV90
IHNtYWxsU2l6ZUNsYXNzKTsKLSAgICBNZWRpdW1MaW5lKiBhbGxvY2F0ZU1lZGl1bUxpbmUoKTsK
KyAgICBCdW1wUmFuZ2UgYWxsb2NhdGVTbWFsbEJ1bXBSYW5nZShzaXplX3Qgc2l6ZUNsYXNzKTsK
KyAgICBCdW1wUmFuZ2UgYWxsb2NhdGVNZWRpdW1CdW1wUmFuZ2Uoc2l6ZV90IHNpemVDbGFzcyk7
CiAgICAgCiAgICAgRGVhbGxvY2F0b3ImIG1fZGVhbGxvY2F0b3I7CiAKLSAgICBzdGQ6OmFycmF5
PEJ1bXBBbGxvY2F0b3IsIHNtYWxsTWF4IC8gYWxpZ25tZW50PiBtX3NtYWxsQWxsb2NhdG9yczsK
LSAgICBzdGQ6OmFycmF5PEJ1bXBBbGxvY2F0b3IsIG1lZGl1bU1heCAvIGFsaWdubWVudD4gbV9t
ZWRpdW1BbGxvY2F0b3JzOworICAgIHN0ZDo6YXJyYXk8QnVtcEFsbG9jYXRvciwgbWVkaXVtTWF4
IC8gYWxpZ25tZW50PiBtX2J1bXBBbGxvY2F0b3JzOwogCi0gICAgc3RkOjphcnJheTxTbWFsbExp
bmVDYWNoZSwgc21hbGxNYXggLyBhbGlnbm1lbnQ+IG1fc21hbGxMaW5lQ2FjaGVzOwotICAgIE1l
ZGl1bUxpbmVDYWNoZSBtX21lZGl1bUxpbmVDYWNoZTsKKyAgICBzdGQ6OmFycmF5PFNtYWxsQnVt
cFJhbmdlQ2FjaGUsIHNtYWxsTWF4IC8gYWxpZ25tZW50PiBtX3NtYWxsQnVtcFJhbmdlQ2FjaGVz
OworICAgIHN0ZDo6YXJyYXk8TWVkaXVtQnVtcFJhbmdlQ2FjaGUsIG1lZGl1bU1heCAvIGFsaWdu
bWVudD4gbV9tZWRpdW1CdW1wUmFuZ2VDYWNoZXM7CiB9OwogCiBpbmxpbmUgYm9vbCBBbGxvY2F0
b3I6OmFsbG9jYXRlRmFzdENhc2Uoc2l6ZV90IHNpemUsIHZvaWQqJiBvYmplY3QpCiB7Ci0gICAg
aWYgKHNpemUgPiBzbWFsbE1heCkKKyAgICBpZiAoc2l6ZSA+IG1lZGl1bU1heCkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgQnVtcEFsbG9jYXRvciYgYWxsb2NhdG9yID0gbV9zbWFsbEFs
bG9jYXRvcnNbc21hbGxTaXplQ2xhc3NGb3Ioc2l6ZSldOworICAgIEJ1bXBBbGxvY2F0b3ImIGFs
bG9jYXRvciA9IG1fYnVtcEFsbG9jYXRvcnNbc2l6ZUNsYXNzKHNpemUpXTsKICAgICBpZiAoIWFs
bG9jYXRvci5jYW5BbGxvY2F0ZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKSW5kZXg6IFNv
dXJjZS9ibWFsbG9jL2JtYWxsb2MvQnVtcEFsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9ibWFsbG9jL2JtYWxsb2MvQnVtcEFsbG9jYXRvci5oCShyZXZpc2lvbiAxNzM4NTYpCisrKyBT
b3VyY2UvYm1hbGxvYy9ibWFsbG9jL0J1bXBBbGxvY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAt
MjcsNiArMjcsNyBAQAogI2RlZmluZSBCdW1wQWxsb2NhdG9yX2gKIAogI2luY2x1ZGUgIkJBc3Nl
cnQuaCIKKyNpbmNsdWRlICJCdW1wUmFuZ2UuaCIKICNpbmNsdWRlICJPYmplY3RUeXBlLmgiCiAK
IG5hbWVzcGFjZSBibWFsbG9jIHsKQEAgLTM2LDQ5ICszNywzOCBAQCBuYW1lc3BhY2UgYm1hbGxv
YyB7CiBjbGFzcyBCdW1wQWxsb2NhdG9yIHsKIHB1YmxpYzoKICAgICBCdW1wQWxsb2NhdG9yKCk7
Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgTGluZT4gdm9pZCBpbml0KHNpemVfdCk7CisgICAgdm9p
ZCBpbml0KHNpemVfdCk7CisgICAgCisgICAgc2l6ZV90IHNpemUoKSB7IHJldHVybiBtX3NpemU7
IH0KICAgICAKICAgICBib29sIGlzTnVsbCgpIHsgcmV0dXJuICFtX3B0cjsgfQotICAgIHRlbXBs
YXRlPHR5cGVuYW1lIExpbmU+IExpbmUqIGxpbmUoKTsKKyAgICB2b2lkIGNsZWFyKCk7CiAKICAg
ICBib29sIGNhbkFsbG9jYXRlKCkgeyByZXR1cm4gISFtX3JlbWFpbmluZzsgfQogICAgIHZvaWQq
IGFsbG9jYXRlKCk7CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBMaW5lPiB2b2lkIHJlZmlsbChM
aW5lKik7Ci0gICAgdm9pZCBjbGVhcigpOworICAgIHZvaWQgcmVmaWxsKGNvbnN0IEJ1bXBSYW5n
ZSYpOwogCiBwcml2YXRlOgogICAgIHZvaWQgdmFsaWRhdGUodm9pZCopOwogCiAgICAgY2hhciog
bV9wdHI7CiAgICAgdW5zaWduZWQgc2hvcnQgbV9zaXplOwotICAgIHVuc2lnbmVkIGNoYXIgbV9y
ZW1haW5pbmc7Ci0gICAgdW5zaWduZWQgY2hhciBtX21heE9iamVjdENvdW50OworICAgIHVuc2ln
bmVkIHNob3J0IG1fcmVtYWluaW5nOwogfTsKIAogaW5saW5lIEJ1bXBBbGxvY2F0b3I6OkJ1bXBB
bGxvY2F0b3IoKQogICAgIDogbV9wdHIoKQogICAgICwgbV9zaXplKCkKICAgICAsIG1fcmVtYWlu
aW5nKCkKLSAgICAsIG1fbWF4T2JqZWN0Q291bnQoKQogewogfQogCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBMaW5lPgogaW5saW5lIHZvaWQgQnVtcEFsbG9jYXRvcjo6aW5pdChzaXplX3Qgc2l6ZSkKIHsK
LSAgICBCQVNTRVJUKHNpemUgPj0gTGluZTo6bWluaW11bU9iamVjdFNpemUpOwotCiAgICAgbV9w
dHIgPSBudWxscHRyOwogICAgIG1fc2l6ZSA9IHNpemU7CiAgICAgbV9yZW1haW5pbmcgPSAwOwot
ICAgIG1fbWF4T2JqZWN0Q291bnQgPSBMaW5lOjpsaW5lU2l6ZSAvIHNpemU7Ci19Ci0KLXRlbXBs
YXRlPHR5cGVuYW1lIExpbmU+Ci1pbmxpbmUgTGluZSogQnVtcEFsbG9jYXRvcjo6bGluZSgpCi17
Ci0gICAgcmV0dXJuIExpbmU6OmdldChjYW5BbGxvY2F0ZSgpID8gbV9wdHIgOiBtX3B0ciAtIDEp
OwogfQogCiBpbmxpbmUgdm9pZCBCdW1wQWxsb2NhdG9yOjp2YWxpZGF0ZSh2b2lkKiBwdHIpCkBA
IC0xMDQsMTMgKzk0LDExIEBAIGlubGluZSB2b2lkKiBCdW1wQWxsb2NhdG9yOjphbGxvY2F0ZSgp
CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgTGluZT4KLWlubGlu
ZSB2b2lkIEJ1bXBBbGxvY2F0b3I6OnJlZmlsbChMaW5lKiBsaW5lKQoraW5saW5lIHZvaWQgQnVt
cEFsbG9jYXRvcjo6cmVmaWxsKGNvbnN0IEJ1bXBSYW5nZSYgYnVtcFJhbmdlKQogewogICAgIEJB
U1NFUlQoIWNhbkFsbG9jYXRlKCkpOwotICAgIGxpbmUtPmNvbmN1cnJlbnRSZWYobV9tYXhPYmpl
Y3RDb3VudCk7Ci0gICAgbV9wdHIgPSBsaW5lLT5iZWdpbigpOwotICAgIG1fcmVtYWluaW5nID0g
bV9tYXhPYmplY3RDb3VudDsKKyAgICBtX3B0ciA9IGJ1bXBSYW5nZS5iZWdpbjsKKyAgICBtX3Jl
bWFpbmluZyA9IGJ1bXBSYW5nZS5vYmplY3RDb3VudDsKIH0KIAogaW5saW5lIHZvaWQgQnVtcEFs
bG9jYXRvcjo6Y2xlYXIoKQpJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9CdW1wUmFuZ2Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0J1bXBSYW5nZS5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9CdW1wUmFuZ2UuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgQnVtcFJhbmdlX2gKKyNkZWZpbmUgQnVtcFJhbmdlX2gKKwor
I2luY2x1ZGUgIkZpeGVkVmVjdG9yLmgiCisjaW5jbHVkZSAiUmFuZ2UuaCIKKyNpbmNsdWRlICJT
aXplcy5oIgorCituYW1lc3BhY2UgYm1hbGxvYyB7CisKK3N0cnVjdCBCdW1wUmFuZ2UgeworICAg
IGNoYXIqIGJlZ2luOworICAgIHVuc2lnbmVkIHNob3J0IG9iamVjdENvdW50OworfTsKKwordHlw
ZWRlZiBGaXhlZFZlY3RvcjxCdW1wUmFuZ2UsIHNtYWxsUmFuZ2VDYWNoZUNhcGFjaXR5PiBTbWFs
bEJ1bXBSYW5nZUNhY2hlOwordHlwZWRlZiBGaXhlZFZlY3RvcjxCdW1wUmFuZ2UsIG1lZGl1bVJh
bmdlQ2FjaGVDYXBhY2l0eT4gTWVkaXVtQnVtcFJhbmdlQ2FjaGU7CisKK30gLy8gbmFtZXNwYWNl
IGJtYWxsb2MKKworI2VuZGlmIC8vIEJ1bXBSYW5nZV9oCkluZGV4OiBTb3VyY2UvYm1hbGxvYy9i
bWFsbG9jL0RlYWxsb2NhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFs
bG9jL0RlYWxsb2NhdG9yLmNwcAkocmV2aXNpb24gMTczODU2KQorKysgU291cmNlL2JtYWxsb2Mv
Ym1hbGxvYy9EZWFsbG9jYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcyLDE1ICs3MiwxMSBA
QCB2b2lkIERlYWxsb2NhdG9yOjpwcm9jZXNzT2JqZWN0TG9nKCkKICAgICBmb3IgKGF1dG8gb2Jq
ZWN0IDogbV9vYmplY3RMb2cpIHsKICAgICAgICAgaWYgKGlzU21hbGwob2JqZWN0KSkgewogICAg
ICAgICAgICAgU21hbGxMaW5lKiBsaW5lID0gU21hbGxMaW5lOjpnZXQob2JqZWN0KTsKLSAgICAg
ICAgICAgIGlmICghbGluZS0+ZGVyZWYobG9jaykpCi0gICAgICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgICAgICBoZWFwLT5kZWFsbG9jYXRlU21hbGxMaW5lKGxvY2ssIGxpbmUpOworICAg
ICAgICAgICAgaGVhcC0+ZGVyZWZTbWFsbExpbmUobG9jaywgbGluZSk7CiAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICBCQVNTRVJUKGlzU21hbGxPck1lZGl1bShvYmplY3QpKTsKKyAgICAg
ICAgICAgIEJBU1NFUlQoaXNNZWRpdW0ob2JqZWN0KSk7CiAgICAgICAgICAgICBNZWRpdW1MaW5l
KiBsaW5lID0gTWVkaXVtTGluZTo6Z2V0KG9iamVjdCk7Ci0gICAgICAgICAgICBpZiAoIWxpbmUt
PmRlcmVmKGxvY2spKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaGVh
cC0+ZGVhbGxvY2F0ZU1lZGl1bUxpbmUobG9jaywgbGluZSk7CisgICAgICAgICAgICBoZWFwLT5k
ZXJlZk1lZGl1bUxpbmUobG9jaywgbGluZSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgCkluZGV4
OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0hlYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9i
bWFsbG9jL2JtYWxsb2MvSGVhcC5jcHAJKHJldmlzaW9uIDE3Mzg1NikKKysrIFNvdXJjZS9ibWFs
bG9jL2JtYWxsb2MvSGVhcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDYgKzUwLDQyIEBAIEhl
YXA6OkhlYXAoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYKICAgICA6IG1faXNBbGxvY2F0
aW5nUGFnZXMoZmFsc2UpCiAgICAgLCBtX3NjYXZlbmdlcigqdGhpcywgJkhlYXA6OmNvbmN1cnJl
bnRTY2F2ZW5nZSkKIHsKKyAgICBpbml0aWFsaXplTGluZU1ldGFkYXRhKCk7Cit9CisKK3ZvaWQg
SGVhcDo6aW5pdGlhbGl6ZUxpbmVNZXRhZGF0YSgpCit7CisgICAgZm9yICh1bnNpZ25lZCBzaG9y
dCBzaXplID0gYWxpZ25tZW50OyBzaXplIDw9IHNtYWxsTWF4OyBzaXplICs9IGFsaWdubWVudCkg
eworICAgICAgICB1bnNpZ25lZCBzaG9ydCBzdGFydE9mZnNldCA9IDA7CisgICAgICAgIGZvciAo
c2l6ZV90IGxpbmVOdW1iZXIgPSAwOyBsaW5lTnVtYmVyIDwgU21hbGxQYWdlOjpsaW5lQ291bnQg
LSAxOyArK2xpbmVOdW1iZXIpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IG9iamVjdENv
dW50OworICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgcmVtYWluZGVyOworICAgICAgICAgICAg
ZGl2aWRlUm91bmRpbmdVcChzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oU21hbGxQYWdlOjps
aW5lU2l6ZSAtIHN0YXJ0T2Zmc2V0KSwgc2l6ZSwgb2JqZWN0Q291bnQsIHJlbWFpbmRlcik7Cisg
ICAgICAgICAgICBCQVNTRVJUKG9iamVjdENvdW50KTsKKyAgICAgICAgICAgIG1fc21hbGxMaW5l
TWV0YWRhdGFbc2l6ZUNsYXNzKHNpemUpXVtsaW5lTnVtYmVyXSA9IHsgc3RhcnRPZmZzZXQsIG9i
amVjdENvdW50IH07CisgICAgICAgICAgICBzdGFydE9mZnNldCA9IHJlbWFpbmRlciA/IHNpemUg
LSByZW1haW5kZXIgOiAwOworICAgICAgICB9CisKKyAgICAgICAgLy8gVGhlIGxhc3QgbGluZSBp
biB0aGUgcGFnZSByb3VuZHMgZG93biBpbnN0ZWFkIG9mIHVwIGJlY2F1c2UgaXQncyBub3QgYWxs
b3dlZCB0byBvdmVybGFwIGludG8gaXRzIG5laWdoYm9yLgorICAgICAgICB1bnNpZ25lZCBzaG9y
dCBvYmplY3RDb3VudCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PigoU21hbGxQYWdlOjps
aW5lU2l6ZSAtIHN0YXJ0T2Zmc2V0KSAvIHNpemUpOworICAgICAgICBtX3NtYWxsTGluZU1ldGFk
YXRhW3NpemVDbGFzcyhzaXplKV1bU21hbGxQYWdlOjpsaW5lQ291bnQgLSAxXSA9IHsgc3RhcnRP
ZmZzZXQsIG9iamVjdENvdW50IH07CisgICAgfQorCisgICAgZm9yICh1bnNpZ25lZCBzaG9ydCBz
aXplID0gc21hbGxNYXggKyBhbGlnbm1lbnQ7IHNpemUgPD0gbWVkaXVtTWF4OyBzaXplICs9IGFs
aWdubWVudCkgeworICAgICAgICB1bnNpZ25lZCBzaG9ydCBzdGFydE9mZnNldCA9IDA7CisgICAg
ICAgIGZvciAoc2l6ZV90IGxpbmVOdW1iZXIgPSAwOyBsaW5lTnVtYmVyIDwgTWVkaXVtUGFnZTo6
bGluZUNvdW50IC0gMTsgKytsaW5lTnVtYmVyKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBzaG9y
dCBvYmplY3RDb3VudDsKKyAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHJlbWFpbmRlcjsKKyAg
ICAgICAgICAgIGRpdmlkZVJvdW5kaW5nVXAoc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KE1l
ZGl1bVBhZ2U6OmxpbmVTaXplIC0gc3RhcnRPZmZzZXQpLCBzaXplLCBvYmplY3RDb3VudCwgcmVt
YWluZGVyKTsKKyAgICAgICAgICAgIEJBU1NFUlQob2JqZWN0Q291bnQpOworICAgICAgICAgICAg
bV9tZWRpdW1MaW5lTWV0YWRhdGFbc2l6ZUNsYXNzKHNpemUpXVtsaW5lTnVtYmVyXSA9IHsgc3Rh
cnRPZmZzZXQsIG9iamVjdENvdW50IH07CisgICAgICAgICAgICBzdGFydE9mZnNldCA9IHJlbWFp
bmRlciA/IHNpemUgLSByZW1haW5kZXIgOiAwOworICAgICAgICB9CisKKyAgICAgICAgLy8gVGhl
IGxhc3QgbGluZSBpbiB0aGUgcGFnZSByb3VuZHMgZG93biBpbnN0ZWFkIG9mIHVwIGJlY2F1c2Ug
aXQncyBub3QgYWxsb3dlZCB0byBvdmVybGFwIGludG8gaXRzIG5laWdoYm9yLgorICAgICAgICB1
bnNpZ25lZCBzaG9ydCBvYmplY3RDb3VudCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0Pigo
TWVkaXVtUGFnZTo6bGluZVNpemUgLSBzdGFydE9mZnNldCkgLyBzaXplKTsKKyAgICAgICAgbV9t
ZWRpdW1MaW5lTWV0YWRhdGFbc2l6ZUNsYXNzKHNpemUpXVtNZWRpdW1QYWdlOjpsaW5lQ291bnQg
LSAxXSA9IHsgc3RhcnRPZmZzZXQsIG9iamVjdENvdW50IH07CisgICAgfQogfQogCiB2b2lkIEhl
YXA6OmNvbmN1cnJlbnRTY2F2ZW5nZSgpCkBAIC0xMTYsMTEgKzE1Miw4OSBAQCB2b2lkIEhlYXA6
OnNjYXZlbmdlTGFyZ2VSYW5nZXMoc3RkOjp1bmlxCiAgICAgfQogfQogCi1TbWFsbExpbmUqIEhl
YXA6OmFsbG9jYXRlU21hbGxMaW5lU2xvd0Nhc2Uoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4
PiYgbG9jaywgc2l6ZV90IHNtYWxsU2l6ZUNsYXNzKQordm9pZCBIZWFwOjpyZWZpbGxTbWFsbEJ1
bXBSYW5nZUNhY2hlKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mIGxvY2ssIHNpemVfdCBz
aXplQ2xhc3MsIFNtYWxsQnVtcFJhbmdlQ2FjaGUmIHJhbmdlQ2FjaGUpCit7CisgICAgQkFTU0VS
VCghcmFuZ2VDYWNoZS5zaXplKCkpOworICAgIFNtYWxsUGFnZSogcGFnZSA9IGFsbG9jYXRlU21h
bGxQYWdlKGxvY2ssIHNpemVDbGFzcyk7CisgICAgU21hbGxMaW5lKiBsaW5lcyA9IHBhZ2UtPmJl
Z2luKCk7CisKKyAgICAvLyBEdWUgdG8gb3ZlcmxhcCBmcm9tIHRoZSBwcmV2aW91cyBsaW5lLCB0
aGUgbGFzdCBsaW5lIGluIHRoZSBwYWdlIG1heSBub3QgYmUgYWJsZSB0byBmaXQgYW55IG9iamVj
dHMuCisgICAgc2l6ZV90IGVuZCA9IFNtYWxsUGFnZTo6bGluZUNvdW50OworICAgIGlmICghbV9z
bWFsbExpbmVNZXRhZGF0YVtzaXplQ2xhc3NdW1NtYWxsUGFnZTo6bGluZUNvdW50IC0gMV0ub2Jq
ZWN0Q291bnQpCisgICAgICAgIC0tZW5kOworCisgICAgZm9yIChzaXplX3QgbGluZU51bWJlciA9
IDA7IGxpbmVOdW1iZXIgPCBlbmQ7ICsrbGluZU51bWJlcikgeworICAgICAgICBpZiAobGluZXNb
bGluZU51bWJlcl0ucmVmQ291bnQobG9jaykpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAg
ICAgICBMaW5lTWV0YWRhdGEmIGxpbmVNZXRhZGF0YSA9IG1fc21hbGxMaW5lTWV0YWRhdGFbc2l6
ZUNsYXNzXVtsaW5lTnVtYmVyXTsKKyAgICAgICAgY2hhciogYmVnaW4gPSBsaW5lc1tsaW5lTnVt
YmVyXS5iZWdpbigpICsgbGluZU1ldGFkYXRhLnN0YXJ0T2Zmc2V0OworICAgICAgICB1bnNpZ25l
ZCBzaG9ydCBvYmplY3RDb3VudCA9IGxpbmVNZXRhZGF0YS5vYmplY3RDb3VudDsKKyAgICAgICAg
bGluZXNbbGluZU51bWJlcl0ucmVmKGxvY2ssIGxpbmVNZXRhZGF0YS5vYmplY3RDb3VudCk7Cisg
ICAgICAgIHBhZ2UtPnJlZihsb2NrKTsKKworICAgICAgICB3aGlsZSAoKytsaW5lTnVtYmVyIDwg
ZW5kKSB7CisgICAgICAgICAgICBpZiAobGluZXNbbGluZU51bWJlcl0ucmVmQ291bnQobG9jaykp
CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIExpbmVNZXRhZGF0YSYgbGlu
ZU1ldGFkYXRhID0gbV9zbWFsbExpbmVNZXRhZGF0YVtzaXplQ2xhc3NdW2xpbmVOdW1iZXJdOwor
ICAgICAgICAgICAgb2JqZWN0Q291bnQgKz0gbGluZU1ldGFkYXRhLm9iamVjdENvdW50OworICAg
ICAgICAgICAgbGluZXNbbGluZU51bWJlcl0ucmVmKGxvY2ssIGxpbmVNZXRhZGF0YS5vYmplY3RD
b3VudCk7CisgICAgICAgICAgICBwYWdlLT5yZWYobG9jayk7CisgICAgICAgIH0KKworICAgICAg
ICByYW5nZUNhY2hlLnB1c2goeyBiZWdpbiwgb2JqZWN0Q291bnQgfSk7CisgICAgfQorfQorCit2
b2lkIEhlYXA6OnJlZmlsbE1lZGl1bUJ1bXBSYW5nZUNhY2hlKHN0ZDo6bG9ja19ndWFyZDxTdGF0
aWNNdXRleD4mIGxvY2ssIHNpemVfdCBzaXplQ2xhc3MsIE1lZGl1bUJ1bXBSYW5nZUNhY2hlJiBy
YW5nZUNhY2hlKQoreworICAgIEJBU1NFUlQoIXJhbmdlQ2FjaGUuc2l6ZSgpKTsKKyAgICBNZWRp
dW1QYWdlKiBwYWdlID0gYWxsb2NhdGVNZWRpdW1QYWdlKGxvY2ssIHNpemVDbGFzcyk7CisgICAg
TWVkaXVtTGluZSogbGluZXMgPSBwYWdlLT5iZWdpbigpOworCisgICAgLy8gRHVlIHRvIG92ZXJs
YXAgZnJvbSB0aGUgcHJldmlvdXMgbGluZSwgdGhlIGxhc3QgbGluZSBpbiB0aGUgcGFnZSBtYXkg
bm90IGJlIGFibGUgdG8gZml0IGFueSBvYmplY3RzLgorICAgIHNpemVfdCBlbmQgPSBNZWRpdW1Q
YWdlOjpsaW5lQ291bnQ7CisgICAgaWYgKCFtX21lZGl1bUxpbmVNZXRhZGF0YVtzaXplQ2xhc3Nd
W01lZGl1bVBhZ2U6OmxpbmVDb3VudCAtIDFdLm9iamVjdENvdW50KQorICAgICAgICAtLWVuZDsK
KworICAgIGZvciAoc2l6ZV90IGxpbmVOdW1iZXIgPSAwOyBsaW5lTnVtYmVyIDwgZW5kOyArK2xp
bmVOdW1iZXIpIHsKKyAgICAgICAgaWYgKGxpbmVzW2xpbmVOdW1iZXJdLnJlZkNvdW50KGxvY2sp
KQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgTGluZU1ldGFkYXRhJiBsaW5lTWV0
YWRhdGEgPSBtX21lZGl1bUxpbmVNZXRhZGF0YVtzaXplQ2xhc3NdW2xpbmVOdW1iZXJdOworICAg
ICAgICBjaGFyKiBiZWdpbiA9IGxpbmVzW2xpbmVOdW1iZXJdLmJlZ2luKCkgKyBsaW5lTWV0YWRh
dGEuc3RhcnRPZmZzZXQ7CisgICAgICAgIHVuc2lnbmVkIHNob3J0IG9iamVjdENvdW50ID0gbGlu
ZU1ldGFkYXRhLm9iamVjdENvdW50OworICAgICAgICBsaW5lc1tsaW5lTnVtYmVyXS5yZWYobG9j
aywgbGluZU1ldGFkYXRhLm9iamVjdENvdW50KTsKKyAgICAgICAgcGFnZS0+cmVmKGxvY2spOwor
ICAgICAgICAKKyAgICAgICAgd2hpbGUgKCsrbGluZU51bWJlciA8IGVuZCkgeworICAgICAgICAg
ICAgaWYgKGxpbmVzW2xpbmVOdW1iZXJdLnJlZkNvdW50KGxvY2spKQorICAgICAgICAgICAgICAg
IGJyZWFrOworCisgICAgICAgICAgICBMaW5lTWV0YWRhdGEmIGxpbmVNZXRhZGF0YSA9IG1fbWVk
aXVtTGluZU1ldGFkYXRhW3NpemVDbGFzc11bbGluZU51bWJlcl07CisgICAgICAgICAgICBvYmpl
Y3RDb3VudCArPSBsaW5lTWV0YWRhdGEub2JqZWN0Q291bnQ7CisgICAgICAgICAgICBsaW5lc1ts
aW5lTnVtYmVyXS5yZWYobG9jaywgbGluZU1ldGFkYXRhLm9iamVjdENvdW50KTsKKyAgICAgICAg
ICAgIHBhZ2UtPnJlZihsb2NrKTsKKyAgICAgICAgfQorCisgICAgICAgIHJhbmdlQ2FjaGUucHVz
aCh7IGJlZ2luLCBvYmplY3RDb3VudCB9KTsKKyAgICB9Cit9CisKK1NtYWxsUGFnZSogSGVhcDo6
YWxsb2NhdGVTbWFsbFBhZ2Uoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYgbG9jaywgc2l6
ZV90IHNpemVDbGFzcykKIHsKKyAgICBWZWN0b3I8U21hbGxQYWdlKj4mIHNtYWxsUGFnZXNXaXRo
RnJlZUxpbmVzID0gbV9zbWFsbFBhZ2VzV2l0aEZyZWVMaW5lc1tzaXplQ2xhc3NdOworICAgIHdo
aWxlIChzbWFsbFBhZ2VzV2l0aEZyZWVMaW5lcy5zaXplKCkpIHsKKyAgICAgICAgU21hbGxQYWdl
KiBwYWdlID0gc21hbGxQYWdlc1dpdGhGcmVlTGluZXMucG9wKCk7CisgICAgICAgIGlmICghcGFn
ZS0+cmVmQ291bnQobG9jaykgfHwgcGFnZS0+c2l6ZUNsYXNzKCkgIT0gc2l6ZUNsYXNzKSAvLyBQ
YWdlIHdhcyBwcm9tb3RlZCB0byB0aGUgcGFnZXMgbGlzdC4KKyAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICByZXR1cm4gcGFnZTsKKyAgICB9CisgICAgCiAgICAgbV9pc0FsbG9jYXRpbmdQ
YWdlcyA9IHRydWU7CiAKLSAgICBTbWFsbFBhZ2UqIHBhZ2UgPSBbdGhpc10oKSB7CisgICAgU21h
bGxQYWdlKiBwYWdlID0gW3RoaXMsIHNpemVDbGFzc10oKSB7CiAgICAgICAgIGlmIChtX3NtYWxs
UGFnZXMuc2l6ZSgpKQogICAgICAgICAgICAgcmV0dXJuIG1fc21hbGxQYWdlcy5wb3AoKTsKICAg
ICAgICAgCkBAIC0xMjksMjIgKzI0MywyMyBAQCBTbWFsbExpbmUqIEhlYXA6OmFsbG9jYXRlU21h
bGxMaW5lU2xvd0NhCiAgICAgICAgIHJldHVybiBwYWdlOwogICAgIH0oKTsKIAotICAgIFNtYWxs
TGluZSogbGluZSA9IHBhZ2UtPmJlZ2luKCk7Ci0gICAgVmVjdG9yPFNtYWxsTGluZSo+JiBzbWFs
bExpbmVzID0gbV9zbWFsbExpbmVzW3NtYWxsU2l6ZUNsYXNzXTsKLSAgICBmb3IgKGF1dG8gaXQg
PSBsaW5lICsgMTsgaXQgIT0gcGFnZS0+ZW5kKCk7ICsraXQpCi0gICAgICAgIHNtYWxsTGluZXMu
cHVzaChpdCk7Ci0KLSAgICBCQVNTRVJUKCFsaW5lLT5yZWZDb3VudChsb2NrKSk7Ci0gICAgcGFn
ZS0+c2V0U21hbGxTaXplQ2xhc3Moc21hbGxTaXplQ2xhc3MpOwotICAgIHBhZ2UtPnJlZihsb2Nr
KTsKLSAgICByZXR1cm4gbGluZTsKKyAgICBwYWdlLT5zZXRTaXplQ2xhc3Moc2l6ZUNsYXNzKTsK
KyAgICByZXR1cm4gcGFnZTsKIH0KIAotTWVkaXVtTGluZSogSGVhcDo6YWxsb2NhdGVNZWRpdW1M
aW5lU2xvd0Nhc2Uoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYgbG9jaykKK01lZGl1bVBh
Z2UqIEhlYXA6OmFsbG9jYXRlTWVkaXVtUGFnZShzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+
JiBsb2NrLCBzaXplX3Qgc2l6ZUNsYXNzKQogeworICAgIFZlY3RvcjxNZWRpdW1QYWdlKj4mIG1l
ZGl1bVBhZ2VzV2l0aEZyZWVMaW5lcyA9IG1fbWVkaXVtUGFnZXNXaXRoRnJlZUxpbmVzW3NpemVD
bGFzc107CisgICAgd2hpbGUgKG1lZGl1bVBhZ2VzV2l0aEZyZWVMaW5lcy5zaXplKCkpIHsKKyAg
ICAgICAgTWVkaXVtUGFnZSogcGFnZSA9IG1lZGl1bVBhZ2VzV2l0aEZyZWVMaW5lcy5wb3AoKTsK
KyAgICAgICAgaWYgKCFwYWdlLT5yZWZDb3VudChsb2NrKSB8fCBwYWdlLT5zaXplQ2xhc3MoKSAh
PSBzaXplQ2xhc3MpIC8vIFBhZ2Ugd2FzIHByb21vdGVkIHRvIHRoZSBwYWdlcyBsaXN0LgorICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgIHJldHVybiBwYWdlOworICAgIH0KKyAgICAKICAg
ICBtX2lzQWxsb2NhdGluZ1BhZ2VzID0gdHJ1ZTsKIAotICAgIE1lZGl1bVBhZ2UqIHBhZ2UgPSBb
dGhpc10oKSB7CisgICAgTWVkaXVtUGFnZSogcGFnZSA9IFt0aGlzLCBzaXplQ2xhc3NdKCkgewog
ICAgICAgICBpZiAobV9tZWRpdW1QYWdlcy5zaXplKCkpCiAgICAgICAgICAgICByZXR1cm4gbV9t
ZWRpdW1QYWdlcy5wb3AoKTsKICAgICAgICAgCkBAIC0xNTMsMTIgKzI2OCw1MiBAQCBNZWRpdW1M
aW5lKiBIZWFwOjphbGxvY2F0ZU1lZGl1bUxpbmVTbG93CiAgICAgICAgIHJldHVybiBwYWdlOwog
ICAgIH0oKTsKIAotICAgIE1lZGl1bUxpbmUqIGxpbmUgPSBwYWdlLT5iZWdpbigpOwotICAgIGZv
ciAoYXV0byBpdCA9IGxpbmUgKyAxOyBpdCAhPSBwYWdlLT5lbmQoKTsgKytpdCkKLSAgICAgICAg
bV9tZWRpdW1MaW5lcy5wdXNoKGl0KTsKKyAgICBwYWdlLT5zZXRTaXplQ2xhc3Moc2l6ZUNsYXNz
KTsKKyAgICByZXR1cm4gcGFnZTsKK30KIAotICAgIHBhZ2UtPnJlZihsb2NrKTsKLSAgICByZXR1
cm4gbGluZTsKK3ZvaWQgSGVhcDo6ZGVhbGxvY2F0ZVNtYWxsTGluZShzdGQ6OmxvY2tfZ3VhcmQ8
U3RhdGljTXV0ZXg+JiBsb2NrLCBTbWFsbExpbmUqIGxpbmUpCit7CisgICAgQkFTU0VSVCghbGlu
ZS0+cmVmQ291bnQobG9jaykpOworICAgIFNtYWxsUGFnZSogcGFnZSA9IFNtYWxsUGFnZTo6Z2V0
KGxpbmUpOworICAgIHNpemVfdCByZWZDb3VudCA9IHBhZ2UtPnJlZkNvdW50KGxvY2spOworICAg
IHBhZ2UtPmRlcmVmKGxvY2spOworCisgICAgc3dpdGNoIChyZWZDb3VudCkgeworICAgIGNhc2Ug
U21hbGxQYWdlOjpsaW5lQ291bnQ6IHsKKyAgICAgICAgLy8gRmlyc3QgZnJlZSBsaW5lIGluIHRo
ZSBwYWdlLgorICAgICAgICBtX3NtYWxsUGFnZXNXaXRoRnJlZUxpbmVzW3BhZ2UtPnNpemVDbGFz
cygpXS5wdXNoKHBhZ2UpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSAxOiB7Cisg
ICAgICAgIC8vIExhc3QgZnJlZSBsaW5lIGluIHRoZSBwYWdlLgorICAgICAgICBtX3NtYWxsUGFn
ZXMucHVzaChwYWdlKTsKKyAgICAgICAgbV9zY2F2ZW5nZXIucnVuKCk7CisgICAgICAgIGJyZWFr
OworICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgSGVhcDo6ZGVhbGxvY2F0ZU1lZGl1bUxpbmUoc3Rk
Ojpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYgbG9jaywgTWVkaXVtTGluZSogbGluZSkKK3sKKyAg
ICBCQVNTRVJUKCFsaW5lLT5yZWZDb3VudChsb2NrKSk7CisgICAgTWVkaXVtUGFnZSogcGFnZSA9
IE1lZGl1bVBhZ2U6OmdldChsaW5lKTsKKyAgICBzaXplX3QgcmVmQ291bnQgPSBwYWdlLT5yZWZD
b3VudChsb2NrKTsKKyAgICBwYWdlLT5kZXJlZihsb2NrKTsKKworICAgIHN3aXRjaCAocmVmQ291
bnQpIHsKKyAgICBjYXNlIE1lZGl1bVBhZ2U6OmxpbmVDb3VudDogeworICAgICAgICAvLyBGaXJz
dCBmcmVlIGxpbmUgaW4gdGhlIHBhZ2UuCisgICAgICAgIG1fbWVkaXVtUGFnZXNXaXRoRnJlZUxp
bmVzW3BhZ2UtPnNpemVDbGFzcygpXS5wdXNoKHBhZ2UpOworICAgICAgICBicmVhazsKKyAgICB9
CisgICAgY2FzZSAxOiB7CisgICAgICAgIC8vIExhc3QgZnJlZSBsaW5lIGluIHRoZSBwYWdlLgor
ICAgICAgICBtX21lZGl1bVBhZ2VzLnB1c2gocGFnZSk7CisgICAgICAgIG1fc2NhdmVuZ2VyLnJ1
bigpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgfQogfQogCiB2b2lkKiBIZWFwOjphbGxv
Y2F0ZVhMYXJnZShzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+Jiwgc2l6ZV90IHNpemUpCklu
ZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0hlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
Ym1hbGxvYy9ibWFsbG9jL0hlYXAuaAkocmV2aXNpb24gMTczODU2KQorKysgU291cmNlL2JtYWxs
b2MvYm1hbGxvYy9IZWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDE2ICsyNiwxNyBAQAogI2lm
bmRlZiBIZWFwX2gKICNkZWZpbmUgSGVhcF9oCiAKLSNpbmNsdWRlICJGaXhlZFZlY3Rvci5oIgot
I2luY2x1ZGUgIlZNSGVhcC5oIgotI2luY2x1ZGUgIk1lZGl1bUxpbmUuaCIKLSNpbmNsdWRlICJN
dXRleC5oIgotI2luY2x1ZGUgIlNtYWxsUGFnZS5oIgorI2luY2x1ZGUgIkJ1bXBSYW5nZS5oIgor
I2luY2x1ZGUgIkxpbmVNZXRhZGF0YS5oIgogI2luY2x1ZGUgIk1lZGl1bUNodW5rLmgiCisjaW5j
bHVkZSAiTWVkaXVtTGluZS5oIgogI2luY2x1ZGUgIk1lZGl1bVBhZ2UuaCIKKyNpbmNsdWRlICJN
dXRleC5oIgogI2luY2x1ZGUgIlNlZ3JlZ2F0ZWRGcmVlTGlzdC5oIgogI2luY2x1ZGUgIlNtYWxs
Q2h1bmsuaCIKICNpbmNsdWRlICJTbWFsbExpbmUuaCIKKyNpbmNsdWRlICJTbWFsbFBhZ2UuaCIK
KyNpbmNsdWRlICJWTUhlYXAuaCIKICNpbmNsdWRlICJWZWN0b3IuaCIKICNpbmNsdWRlIDxhcnJh
eT4KICNpbmNsdWRlIDxtdXRleD4KQEAgLTQ5LDEyICs1MCwxMiBAQCBjbGFzcyBIZWFwIHsKIHB1
YmxpYzoKICAgICBIZWFwKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mKTsKIAotICAgIFNt
YWxsTGluZSogYWxsb2NhdGVTbWFsbExpbmUoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYs
IHNpemVfdCBzbWFsbFNpemVDbGFzcyk7Ci0gICAgdm9pZCBkZWFsbG9jYXRlU21hbGxMaW5lKHN0
ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mLCBTbWFsbExpbmUqKTsKKyAgICB2b2lkIHJlZmls
bFNtYWxsQnVtcFJhbmdlQ2FjaGUoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYsIHNpemVf
dCBzaXplQ2xhc3MsIFNtYWxsQnVtcFJhbmdlQ2FjaGUmKTsKKyAgICB2b2lkIGRlcmVmU21hbGxM
aW5lKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mLCBTbWFsbExpbmUqKTsKKworICAgIHZv
aWQgcmVmaWxsTWVkaXVtQnVtcFJhbmdlQ2FjaGUoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4
PiYsIHNpemVfdCBzaXplQ2xhc3MsIE1lZGl1bUJ1bXBSYW5nZUNhY2hlJik7CisgICAgdm9pZCBk
ZXJlZk1lZGl1bUxpbmUoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYsIE1lZGl1bUxpbmUq
KTsKIAotICAgIE1lZGl1bUxpbmUqIGFsbG9jYXRlTWVkaXVtTGluZShzdGQ6OmxvY2tfZ3VhcmQ8
U3RhdGljTXV0ZXg+Jik7Ci0gICAgdm9pZCBkZWFsbG9jYXRlTWVkaXVtTGluZShzdGQ6OmxvY2tf
Z3VhcmQ8U3RhdGljTXV0ZXg+JiwgTWVkaXVtTGluZSopOwotICAgIAogICAgIHZvaWQqIGFsbG9j
YXRlTGFyZ2Uoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYsIHNpemVfdCk7CiAgICAgdm9p
ZCBkZWFsbG9jYXRlTGFyZ2Uoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYsIHZvaWQqKTsK
IApAQCAtNjgsOSArNjksMTQgQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIH5IZWFwKCkgPSBk
ZWxldGU7CisgICAgCisgICAgdm9pZCBpbml0aWFsaXplTGluZU1ldGFkYXRhKCk7CiAKLSAgICBT
bWFsbExpbmUqIGFsbG9jYXRlU21hbGxMaW5lU2xvd0Nhc2Uoc3RkOjpsb2NrX2d1YXJkPFN0YXRp
Y011dGV4PiYsIHNpemVfdCBzbWFsbFNpemVDbGFzcyk7Ci0gICAgTWVkaXVtTGluZSogYWxsb2Nh
dGVNZWRpdW1MaW5lU2xvd0Nhc2Uoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYpOworICAg
IFNtYWxsUGFnZSogYWxsb2NhdGVTbWFsbFBhZ2Uoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4
PiYsIHNpemVfdCBzaXplQ2xhc3MpOworICAgIE1lZGl1bVBhZ2UqIGFsbG9jYXRlTWVkaXVtUGFn
ZShzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+Jiwgc2l6ZV90IHNpemVDbGFzcyk7CisKKyAg
ICB2b2lkIGRlYWxsb2NhdGVTbWFsbExpbmUoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYs
IFNtYWxsTGluZSopOworICAgIHZvaWQgZGVhbGxvY2F0ZU1lZGl1bUxpbmUoc3RkOjpsb2NrX2d1
YXJkPFN0YXRpY011dGV4PiYsIE1lZGl1bUxpbmUqKTsKIAogICAgIHZvaWQqIGFsbG9jYXRlTGFy
Z2UoUmFuZ2UsIHNpemVfdCk7CiAgICAgUmFuZ2UgYWxsb2NhdGVMYXJnZUNodW5rKCk7CkBAIC04
NSw4ICs5MSwxMSBAQCBwcml2YXRlOgogICAgIHZvaWQgc2NhdmVuZ2VNZWRpdW1QYWdlcyhzdGQ6
OnVuaXF1ZV9sb2NrPFN0YXRpY011dGV4PiYsIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMpOwog
ICAgIHZvaWQgc2NhdmVuZ2VMYXJnZVJhbmdlcyhzdGQ6OnVuaXF1ZV9sb2NrPFN0YXRpY011dGV4
PiYsIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMpOwogCi0gICAgc3RkOjphcnJheTxWZWN0b3I8
U21hbGxMaW5lKj4sIHNtYWxsTWF4IC8gYWxpZ25tZW50PiBtX3NtYWxsTGluZXM7Ci0gICAgVmVj
dG9yPE1lZGl1bUxpbmUqPiBtX21lZGl1bUxpbmVzOworICAgIHN0ZDo6YXJyYXk8c3RkOjphcnJh
eTxMaW5lTWV0YWRhdGEsIFNtYWxsUGFnZTo6bGluZUNvdW50Piwgc21hbGxNYXggLyBhbGlnbm1l
bnQ+IG1fc21hbGxMaW5lTWV0YWRhdGE7CisgICAgc3RkOjphcnJheTxzdGQ6OmFycmF5PExpbmVN
ZXRhZGF0YSwgTWVkaXVtUGFnZTo6bGluZUNvdW50PiwgbWVkaXVtTWF4IC8gYWxpZ25tZW50PiBt
X21lZGl1bUxpbmVNZXRhZGF0YTsKKworICAgIHN0ZDo6YXJyYXk8VmVjdG9yPFNtYWxsUGFnZSo+
LCBzbWFsbE1heCAvIGFsaWdubWVudD4gbV9zbWFsbFBhZ2VzV2l0aEZyZWVMaW5lczsKKyAgICBz
dGQ6OmFycmF5PFZlY3RvcjxNZWRpdW1QYWdlKj4sIG1lZGl1bU1heCAvIGFsaWdubWVudD4gbV9t
ZWRpdW1QYWdlc1dpdGhGcmVlTGluZXM7CiAKICAgICBWZWN0b3I8U21hbGxQYWdlKj4gbV9zbWFs
bFBhZ2VzOwogICAgIFZlY3RvcjxNZWRpdW1QYWdlKj4gbV9tZWRpdW1QYWdlczsKQEAgLTk5LDU5
ICsxMDgsMTggQEAgcHJpdmF0ZToKICAgICBBc3luY1Rhc2s8SGVhcCwgZGVjbHR5cGUoJkhlYXA6
OmNvbmN1cnJlbnRTY2F2ZW5nZSk+IG1fc2NhdmVuZ2VyOwogfTsKIAotaW5saW5lIHZvaWQgSGVh
cDo6ZGVhbGxvY2F0ZVNtYWxsTGluZShzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+JiBsb2Nr
LCBTbWFsbExpbmUqIGxpbmUpCitpbmxpbmUgdm9pZCBIZWFwOjpkZXJlZlNtYWxsTGluZShzdGQ6
OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+JiBsb2NrLCBTbWFsbExpbmUqIGxpbmUpCiB7Ci0gICAg
QkFTU0VSVCghbGluZS0+cmVmQ291bnQobG9jaykpOwotICAgIFNtYWxsUGFnZSogcGFnZSA9IFNt
YWxsUGFnZTo6Z2V0KGxpbmUpOwotICAgIGlmIChwYWdlLT5kZXJlZihsb2NrKSkgewotICAgICAg
ICBtX3NtYWxsUGFnZXMucHVzaChwYWdlKTsKLSAgICAgICAgbV9zY2F2ZW5nZXIucnVuKCk7Cisg
ICAgaWYgKCFsaW5lLT5kZXJlZihsb2NrKSkKICAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBt
X3NtYWxsTGluZXNbcGFnZS0+c21hbGxTaXplQ2xhc3MoKV0ucHVzaChsaW5lKTsKLX0KLQotaW5s
aW5lIFNtYWxsTGluZSogSGVhcDo6YWxsb2NhdGVTbWFsbExpbmUoc3RkOjpsb2NrX2d1YXJkPFN0
YXRpY011dGV4PiYgbG9jaywgc2l6ZV90IHNtYWxsU2l6ZUNsYXNzKQotewotICAgIFZlY3RvcjxT
bWFsbExpbmUqPiYgc21hbGxMaW5lcyA9IG1fc21hbGxMaW5lc1tzbWFsbFNpemVDbGFzc107Ci0g
ICAgd2hpbGUgKHNtYWxsTGluZXMuc2l6ZSgpKSB7Ci0gICAgICAgIFNtYWxsTGluZSogbGluZSA9
IHNtYWxsTGluZXMucG9wKCk7Ci0gICAgICAgIFNtYWxsUGFnZSogcGFnZSA9IFNtYWxsUGFnZTo6
Z2V0KGxpbmUpOwotICAgICAgICBpZiAoIXBhZ2UtPnJlZkNvdW50KGxvY2spIHx8IHBhZ2UtPnNt
YWxsU2l6ZUNsYXNzKCkgIT0gc21hbGxTaXplQ2xhc3MpIC8vIFRoZSBsaW5lIHdhcyBwcm9tb3Rl
ZCB0byB0aGUgc21hbGwgcGFnZXMgbGlzdC4KLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICBCQVNTRVJUKCFsaW5lLT5yZWZDb3VudChsb2NrKSk7Ci0gICAgICAgIHBhZ2UtPnJlZihsb2Nr
KTsKLSAgICAgICAgcmV0dXJuIGxpbmU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGFsbG9jYXRlU21h
bGxMaW5lU2xvd0Nhc2UobG9jaywgc21hbGxTaXplQ2xhc3MpOworICAgIGRlYWxsb2NhdGVTbWFs
bExpbmUobG9jaywgbGluZSk7CiB9CiAKLWlubGluZSB2b2lkIEhlYXA6OmRlYWxsb2NhdGVNZWRp
dW1MaW5lKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mIGxvY2ssIE1lZGl1bUxpbmUqIGxp
bmUpCitpbmxpbmUgdm9pZCBIZWFwOjpkZXJlZk1lZGl1bUxpbmUoc3RkOjpsb2NrX2d1YXJkPFN0
YXRpY011dGV4PiYgbG9jaywgTWVkaXVtTGluZSogbGluZSkKIHsKLSAgICBCQVNTRVJUKCFsaW5l
LT5yZWZDb3VudChsb2NrKSk7Ci0gICAgTWVkaXVtUGFnZSogcGFnZSA9IE1lZGl1bVBhZ2U6Omdl
dChsaW5lKTsKLSAgICBpZiAocGFnZS0+ZGVyZWYobG9jaykpIHsKLSAgICAgICAgbV9tZWRpdW1Q
YWdlcy5wdXNoKHBhZ2UpOwotICAgICAgICBtX3NjYXZlbmdlci5ydW4oKTsKKyAgICBpZiAoIWxp
bmUtPmRlcmVmKGxvY2spKQogICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIG1fbWVkaXVtTGlu
ZXMucHVzaChsaW5lKTsKLX0KLQotaW5saW5lIE1lZGl1bUxpbmUqIEhlYXA6OmFsbG9jYXRlTWVk
aXVtTGluZShzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+JiBsb2NrKQotewotICAgIHdoaWxl
IChtX21lZGl1bUxpbmVzLnNpemUoKSkgewotICAgICAgICBNZWRpdW1MaW5lKiBsaW5lID0gbV9t
ZWRpdW1MaW5lcy5wb3AoKTsKLSAgICAgICAgTWVkaXVtUGFnZSogcGFnZSA9IE1lZGl1bVBhZ2U6
OmdldChsaW5lKTsKLSAgICAgICAgaWYgKCFwYWdlLT5yZWZDb3VudChsb2NrKSkgLy8gVGhlIGxp
bmUgd2FzIHByb21vdGVkIHRvIHRoZSBtZWRpdW0gcGFnZXMgbGlzdC4KLSAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICBCQVNTRVJUKCFsaW5lLT5yZWZDb3VudChsb2NrKSk7Ci0gICAgICAg
IHBhZ2UtPnJlZihsb2NrKTsKLSAgICAgICAgcmV0dXJuIGxpbmU7Ci0gICAgfQotCi0gICAgcmV0
dXJuIGFsbG9jYXRlTWVkaXVtTGluZVNsb3dDYXNlKGxvY2spOworICAgIGRlYWxsb2NhdGVNZWRp
dW1MaW5lKGxvY2ssIGxpbmUpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBibWFsbG9jCkluZGV4OiBT
b3VyY2UvYm1hbGxvYy9ibWFsbG9jL0xpbmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxv
Yy9ibWFsbG9jL0xpbmUuaAkocmV2aXNpb24gMTczODU2KQorKysgU291cmNlL2JtYWxsb2MvYm1h
bGxvYy9MaW5lLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDggKzQ1LDggQEAgcHVibGljOgogCiAg
ICAgc3RhdGljIExpbmUqIGdldCh2b2lkKik7CiAKLSAgICB2b2lkIGNvbmN1cnJlbnRSZWYodW5z
aWduZWQgY2hhciA9IDEpOwotICAgIGJvb2wgZGVyZWYoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011
dGV4PiYsIHVuc2lnbmVkIGNoYXIgPSAxKTsKKyAgICB2b2lkIHJlZihzdGQ6OmxvY2tfZ3VhcmQ8
U3RhdGljTXV0ZXg+JiwgdW5zaWduZWQgY2hhcik7CisgICAgYm9vbCBkZXJlZihzdGQ6OmxvY2tf
Z3VhcmQ8U3RhdGljTXV0ZXg+Jik7CiAgICAgdW5zaWduZWQgcmVmQ291bnQoc3RkOjpsb2NrX2d1
YXJkPFN0YXRpY011dGV4PiYpIHsgcmV0dXJuIG1fcmVmQ291bnQ7IH0KICAgICAKICAgICBjaGFy
KiBiZWdpbigpOwpAQCAtODEsMTggKzgxLDE4IEBAIGlubGluZSBjaGFyKiBMaW5lPFRyYWl0cz46
OmVuZCgpCiB9CiAKIHRlbXBsYXRlPGNsYXNzIFRyYWl0cz4KLWlubGluZSB2b2lkIExpbmU8VHJh
aXRzPjo6Y29uY3VycmVudFJlZih1bnNpZ25lZCBjaGFyIGNvdW50KQoraW5saW5lIHZvaWQgTGlu
ZTxUcmFpdHM+OjpyZWYoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYsIHVuc2lnbmVkIGNo
YXIgcmVmQ291bnQpCiB7Ci0gICAgQkFTU0VSVCghbV9yZWZDb3VudCk7IC8vIFVwLXJlZiBmcm9t
IHplcm8gY2FuIGJlIGxvY2stZnJlZSBiZWNhdXNlIHRoZXJlIGFyZSBubyBvdGhlciBjbGllbnRz
LgotICAgIEJBU1NFUlQoY291bnQgPD0gbWF4UmVmQ291bnQpOwotICAgIG1fcmVmQ291bnQgPSBj
b3VudDsKKyAgICBCQVNTRVJUKCFtX3JlZkNvdW50KTsKKyAgICBCQVNTRVJUKHJlZkNvdW50IDw9
IG1heFJlZkNvdW50KTsKKyAgICBtX3JlZkNvdW50ID0gcmVmQ291bnQ7CiB9CiAKIHRlbXBsYXRl
PGNsYXNzIFRyYWl0cz4KLWlubGluZSBib29sIExpbmU8VHJhaXRzPjo6ZGVyZWYoc3RkOjpsb2Nr
X2d1YXJkPFN0YXRpY011dGV4PiYsIHVuc2lnbmVkIGNoYXIgY291bnQpCitpbmxpbmUgYm9vbCBM
aW5lPFRyYWl0cz46OmRlcmVmKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mKQogewotICAg
IEJBU1NFUlQoY291bnQgPD0gbV9yZWZDb3VudCk7Ci0gICAgbV9yZWZDb3VudCAtPSBjb3VudDsK
KyAgICBCQVNTRVJUKG1fcmVmQ291bnQpOworICAgIC0tbV9yZWZDb3VudDsKICAgICByZXR1cm4g
IW1fcmVmQ291bnQ7CiB9CiAKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvTGluZU1ldGFk
YXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9MaW5lTWV0YWRhdGEu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvTGluZU1ldGFkYXRhLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIExpbmVNZXRhZGF0YV9oCisjZGVmaW5lIExp
bmVNZXRhZGF0YV9oCisKK25hbWVzcGFjZSBibWFsbG9jIHsKKworc3RydWN0IExpbmVNZXRhZGF0
YSB7CisgICAgdW5zaWduZWQgc2hvcnQgc3RhcnRPZmZzZXQ7CisgICAgdW5zaWduZWQgc2hvcnQg
b2JqZWN0Q291bnQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBibWFsbG9jCisKKyNlbmRpZiAvLyBM
aW5lTWV0YWRhdGFfaApJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9NZWRpdW1BbGxvY2F0
b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL01lZGl1bUFsbG9jYXRv
ci5oCShyZXZpc2lvbiAxNzM4NTYpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL01lZGl1bUFs
bG9jYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDExNSArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgTWVkaXVtQWxsb2NhdG9y
X2gKLSNkZWZpbmUgTWVkaXVtQWxsb2NhdG9yX2gKLQotI2luY2x1ZGUgIkJBc3NlcnQuaCIKLSNp
bmNsdWRlICJNZWRpdW1DaHVuay5oIgotI2luY2x1ZGUgIk1lZGl1bUxpbmUuaCIKLQotbmFtZXNw
YWNlIGJtYWxsb2MgewotCi0vLyBIZWxwZXIgb2JqZWN0IGZvciBhbGxvY2F0aW5nIG1lZGl1bSBv
YmplY3RzLgotCi1jbGFzcyBNZWRpdW1BbGxvY2F0b3IgewotcHVibGljOgotICAgIE1lZGl1bUFs
bG9jYXRvcigpOwotCi0gICAgYm9vbCBpc051bGwoKSB7IHJldHVybiAhbV9lbmQ7IH0KLSAgICBN
ZWRpdW1MaW5lKiBsaW5lKCk7Ci0KLSAgICB2b2lkKiBhbGxvY2F0ZShzaXplX3QpOwotICAgIGJv
b2wgYWxsb2NhdGUoc2l6ZV90LCB2b2lkKiYpOwotCi0gICAgdW5zaWduZWQgY2hhciBkZXJlZkNv
dW50KCk7Ci0KLSAgICB2b2lkIHJlZmlsbChNZWRpdW1MaW5lKik7Ci0gICAgdm9pZCBjbGVhcigp
OwotCi1wcml2YXRlOgotICAgIGNoYXIqIG1fZW5kOwotICAgIHNpemVfdCBtX3JlbWFpbmluZzsK
LSAgICBzaXplX3QgbV9vYmplY3RDb3VudDsKLX07Ci0KLWlubGluZSBNZWRpdW1BbGxvY2F0b3I6
Ok1lZGl1bUFsbG9jYXRvcigpCi0gICAgOiBtX2VuZCgpCi0gICAgLCBtX3JlbWFpbmluZygpCi0g
ICAgLCBtX29iamVjdENvdW50KCkKLXsKLX0KLQotaW5saW5lIE1lZGl1bUxpbmUqIE1lZGl1bUFs
bG9jYXRvcjo6bGluZSgpCi17Ci0gICAgcmV0dXJuIE1lZGl1bUxpbmU6OmdldChtX2VuZCAtIDEp
OwotfQotCi1pbmxpbmUgdm9pZCogTWVkaXVtQWxsb2NhdG9yOjphbGxvY2F0ZShzaXplX3Qgc2l6
ZSkKLXsKLSAgICBCQVNTRVJUKHNpemUgPD0gbV9yZW1haW5pbmcpOwotICAgIEJBU1NFUlQoc2l6
ZSA9PSByb3VuZFVwVG9NdWx0aXBsZU9mPGFsaWdubWVudD4oc2l6ZSkpOwotICAgIEJBU1NFUlQo
c2l6ZSA+PSBNZWRpdW1MaW5lOjptaW5pbXVtT2JqZWN0U2l6ZSk7Ci0KLSAgICBtX3JlbWFpbmlu
ZyAtPSBzaXplOwotICAgIHZvaWQqIG9iamVjdCA9IG1fZW5kIC0gbV9yZW1haW5pbmcgLSBzaXpl
OwotICAgIEJBU1NFUlQoaXNTbWFsbE9yTWVkaXVtKG9iamVjdCkgJiYgIWlzU21hbGwob2JqZWN0
KSk7Ci0KLSAgICArK21fb2JqZWN0Q291bnQ7Ci0gICAgcmV0dXJuIG9iamVjdDsKLX0KLQotaW5s
aW5lIGJvb2wgTWVkaXVtQWxsb2NhdG9yOjphbGxvY2F0ZShzaXplX3Qgc2l6ZSwgdm9pZComIG9i
amVjdCkKLXsKLSAgICBpZiAoc2l6ZSA+IG1fcmVtYWluaW5nKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBvYmplY3QgPSBhbGxvY2F0ZShzaXplKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotaW5saW5lIHVuc2lnbmVkIGNoYXIgTWVkaXVtQWxsb2NhdG9yOjpkZXJlZkNvdW50KCkKLXsK
LSAgICByZXR1cm4gTWVkaXVtTGluZTo6bWF4UmVmQ291bnQgLSBtX29iamVjdENvdW50OwotfQot
Ci1pbmxpbmUgdm9pZCBNZWRpdW1BbGxvY2F0b3I6OnJlZmlsbChNZWRpdW1MaW5lKiBsaW5lKQot
ewotICAgIGxpbmUtPmNvbmN1cnJlbnRSZWYoTWVkaXVtTGluZTo6bWF4UmVmQ291bnQpOwotICAg
IG1fZW5kID0gbGluZS0+ZW5kKCk7Ci0gICAgbV9yZW1haW5pbmcgPSBtZWRpdW1MaW5lU2l6ZTsK
LSAgICBtX29iamVjdENvdW50ID0gMDsKLX0KLQotaW5saW5lIHZvaWQgTWVkaXVtQWxsb2NhdG9y
OjpjbGVhcigpCi17Ci0gICAgbV9lbmQgPSBudWxscHRyOwotICAgIG1fcmVtYWluaW5nID0gMDsK
LSAgICBtX29iamVjdENvdW50ID0gMDsKLX0KLQotfSAvLyBuYW1lc3BhY2UgYm1hbGxvYwotCi0j
ZW5kaWYgLy8gTWVkaXVtQWxsb2NhdG9yX2gKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2Mv
UGFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvUGFnZS5oCShyZXZp
c2lvbiAxNzM4NTYpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1BhZ2UuaAkod29ya2luZyBj
b3B5KQpAQCAtMzksOSArMzksMTAgQEAgcHVibGljOgogICAgIHR5cGVkZWYgdHlwZW5hbWUgVHJh
aXRzOjpDaHVuayBDaHVuazsKICAgICB0eXBlZGVmIHR5cGVuYW1lIFRyYWl0czo6TGluZSBMaW5l
OwogICAgIHN0YXRpYyBjb25zdCBzaXplX3QgbGluZVNpemUgPSBUcmFpdHM6OmxpbmVTaXplOwor
ICAgIHN0YXRpYyBjb25zdCBzaXplX3QgbGluZUNvdW50ID0gdm1QYWdlU2l6ZSAvIGxpbmVTaXpl
OwogCiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgbWF4UmVmQ291bnQgPSBzdGQ6Om51
bWVyaWNfbGltaXRzPHVuc2lnbmVkIGNoYXI+OjptYXgoKTsKLSAgICBzdGF0aWNfYXNzZXJ0KHZt
UGFnZVNpemUgLyBsaW5lU2l6ZSA8IG1heFJlZkNvdW50LCAibWF4aW11bSBsaW5lIGNvdW50IG11
c3QgZml0IGluIFBhZ2UiKTsKKyAgICBzdGF0aWNfYXNzZXJ0KGxpbmVDb3VudCA8IG1heFJlZkNv
dW50LCAibWF4aW11bSBsaW5lIGNvdW50IG11c3QgZml0IGluIFBhZ2UiKTsKICAgICAKICAgICBz
dGF0aWMgUGFnZSogZ2V0KExpbmUqKTsKIApAQCAtNDksMTUgKzUwLDE1IEBAIHB1YmxpYzoKICAg
ICBib29sIGRlcmVmKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mKTsKICAgICB1bnNpZ25l
ZCByZWZDb3VudChzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+JikgeyByZXR1cm4gbV9yZWZD
b3VudDsgfQogICAgIAotICAgIHNpemVfdCBzbWFsbFNpemVDbGFzcygpIHsgcmV0dXJuIG1fc21h
bGxTaXplQ2xhc3M7IH0KLSAgICB2b2lkIHNldFNtYWxsU2l6ZUNsYXNzKHNpemVfdCBzbWFsbFNp
emVDbGFzcykgeyBtX3NtYWxsU2l6ZUNsYXNzID0gc21hbGxTaXplQ2xhc3M7IH0KKyAgICBzaXpl
X3Qgc2l6ZUNsYXNzKCkgeyByZXR1cm4gbV9zaXplQ2xhc3M7IH0KKyAgICB2b2lkIHNldFNpemVD
bGFzcyhzaXplX3Qgc2l6ZUNsYXNzKSB7IG1fc2l6ZUNsYXNzID0gc2l6ZUNsYXNzOyB9CiAgICAg
CiAgICAgTGluZSogYmVnaW4oKTsKICAgICBMaW5lKiBlbmQoKTsKIAogcHJpdmF0ZToKICAgICB1
bnNpZ25lZCBjaGFyIG1fcmVmQ291bnQ7Ci0gICAgdW5zaWduZWQgY2hhciBtX3NtYWxsU2l6ZUNs
YXNzOworICAgIHVuc2lnbmVkIGNoYXIgbV9zaXplQ2xhc3M7CiB9OwogCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBUcmFpdHM+CkBAIC04OSwxNCArOTAsMTQgQEAgaW5saW5lIGF1dG8gUGFnZTxUcmFpdHM+
OjpiZWdpbigpIC0+IExpbgogewogICAgIENodW5rKiBjaHVuayA9IENodW5rOjpnZXQodGhpcyk7
CiAgICAgc2l6ZV90IHBhZ2VOdW1iZXIgPSB0aGlzIC0gY2h1bmstPnBhZ2VzKCk7Ci0gICAgc2l6
ZV90IGxpbmVOdW1iZXIgPSBwYWdlTnVtYmVyICogdm1QYWdlU2l6ZSAvIGxpbmVTaXplOworICAg
IHNpemVfdCBsaW5lTnVtYmVyID0gcGFnZU51bWJlciAqIGxpbmVDb3VudDsKICAgICByZXR1cm4g
JmNodW5rLT5saW5lcygpW2xpbmVOdW1iZXJdOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUcmFp
dHM+CiBpbmxpbmUgYXV0byBQYWdlPFRyYWl0cz46OmVuZCgpIC0+IExpbmUqCiB7Ci0gICAgcmV0
dXJuIGJlZ2luKCkgKyB2bVBhZ2VTaXplIC8gbGluZVNpemU7CisgICAgcmV0dXJuIGJlZ2luKCkg
KyBsaW5lQ291bnQ7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIGJtYWxsb2MKSW5kZXg6IFNvdXJjZS9i
bWFsbG9jL2JtYWxsb2MvU2l6ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFs
bG9jL1NpemVzLmgJKHJldmlzaW9uIDE3Mzg1NikKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2Mv
U2l6ZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNTYsNyArNTYsNyBAQCBuYW1lc3BhY2UgU2l6ZXMg
ewogICAgIHN0YXRpYyBjb25zdCBzaXplX3Qgc3VwZXJDaHVua1NpemUgPSAzMiAqIE1COwogCiAg
ICAgc3RhdGljIGNvbnN0IHNpemVfdCBzbWFsbE1heCA9IDI1NjsKLSAgICBzdGF0aWMgY29uc3Qg
c2l6ZV90IHNtYWxsTGluZVNpemUgPSA1MTI7CisgICAgc3RhdGljIGNvbnN0IHNpemVfdCBzbWFs
bExpbmVTaXplID0gMjU2OwogICAgIHN0YXRpYyBjb25zdCBzaXplX3Qgc21hbGxMaW5lTWFzayA9
IH4oc21hbGxMaW5lU2l6ZSAtIDF1bCk7CiAKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IHNtYWxs
Q2h1bmtTaXplID0gc3VwZXJDaHVua1NpemUgLyA0OwpAQCAtNjQsNyArNjQsNyBAQCBuYW1lc3Bh
Y2UgU2l6ZXMgewogICAgIHN0YXRpYyBjb25zdCBzaXplX3Qgc21hbGxDaHVua01hc2sgPSB+KHNt
YWxsQ2h1bmtTaXplIC0gMXVsKTsKIAogICAgIHN0YXRpYyBjb25zdCBzaXplX3QgbWVkaXVtTWF4
ID0gMTAyNDsKLSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IG1lZGl1bUxpbmVTaXplID0gMjA0ODsK
KyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IG1lZGl1bUxpbmVTaXplID0gMTAyNDsKICAgICBzdGF0
aWMgY29uc3Qgc2l6ZV90IG1lZGl1bUxpbmVNYXNrID0gfihtZWRpdW1MaW5lU2l6ZSAtIDF1bCk7
CiAKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IG1lZGl1bUNodW5rU2l6ZSA9IHN1cGVyQ2h1bmtT
aXplIC8gNDsKQEAgLTkyLDIxICs5MiwyMCBAQCBuYW1lc3BhY2UgU2l6ZXMgewogCiAgICAgc3Rh
dGljIGNvbnN0IHNpemVfdCBkZWFsbG9jYXRvckxvZ0NhcGFjaXR5ID0gMjU2OwogCi0gICAgc3Rh
dGljIGNvbnN0IHNpemVfdCBzbWFsbExpbmVDYWNoZUNhcGFjaXR5ID0gdm1QYWdlU2l6ZSAvIHNt
YWxsTGluZVNpemU7Ci0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBtZWRpdW1MaW5lQ2FjaGVDYXBh
Y2l0eSA9IHZtUGFnZVNpemUgLyBtZWRpdW1MaW5lU2l6ZTsKKyAgICBzdGF0aWMgY29uc3Qgc2l6
ZV90IHNtYWxsUmFuZ2VDYWNoZUNhcGFjaXR5ID0gdm1QYWdlU2l6ZSAvIHNtYWxsTGluZVNpemU7
CisgICAgc3RhdGljIGNvbnN0IHNpemVfdCBtZWRpdW1SYW5nZUNhY2hlQ2FwYWNpdHkgPSB2bVBh
Z2VTaXplIC8gbWVkaXVtTGluZVNpemU7CiAgICAgCiAgICAgc3RhdGljIGNvbnN0IHN0ZDo6Y2hy
b25vOjptaWxsaXNlY29uZHMgc2NhdmVuZ2VTbGVlcER1cmF0aW9uID0gc3RkOjpjaHJvbm86Om1p
bGxpc2Vjb25kcyg1MTIpOwogCi0gICAgaW5saW5lIHNpemVfdCBzbWFsbFNpemVDbGFzc0Zvcihz
aXplX3Qgc2l6ZSkKKyAgICBpbmxpbmUgc2l6ZV90IHNpemVDbGFzcyhzaXplX3Qgc2l6ZSkKICAg
ICB7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBzaXplX3Qgc21hbGxTaXplQ2xhc3NNYXNrID0gKHNt
YWxsTWF4IC8gYWxpZ25tZW50KSAtIDE7Ci0gICAgICAgIHJldHVybiBtYXNrKChzaXplIC0gMXVs
KSAvIGFsaWdubWVudCwgc21hbGxTaXplQ2xhc3NNYXNrKTsKKyAgICAgICAgc3RhdGljIGNvbnN0
IHNpemVfdCBzaXplQ2xhc3NNYXNrID0gKG1lZGl1bU1heCAvIGFsaWdubWVudCkgLSAxOworICAg
ICAgICByZXR1cm4gbWFzaygoc2l6ZSAtIDF1bCkgLyBhbGlnbm1lbnQsIHNpemVDbGFzc01hc2sp
OwogICAgIH0KIAotICAgIGlubGluZSBzaXplX3QgbWVkaXVtU2l6ZUNsYXNzRm9yKHNpemVfdCBz
aXplKQorICAgIGlubGluZSBzaXplX3Qgb2JqZWN0U2l6ZShzaXplX3Qgc2l6ZUNsYXNzKQogICAg
IHsKLSAgICAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBtZWRpdW1TaXplQ2xhc3NNYXNrID0gKG1l
ZGl1bU1heCAvIGFsaWdubWVudCkgLSAxOwotICAgICAgICByZXR1cm4gbWFzaygoc2l6ZSAtIDF1
bCkgLyBhbGlnbm1lbnQsIG1lZGl1bVNpemVDbGFzc01hc2spOworICAgICAgICByZXR1cm4gKHNp
emVDbGFzcyArIDEpICogYWxpZ25tZW50OwogICAgIH0KIH07CiAKSW5kZXg6IFNvdXJjZS9ibWFs
bG9jL2JtYWxsb2MvYm1hbGxvYy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxs
b2MvYm1hbGxvYy5oCShyZXZpc2lvbiAxNzM4NTYpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9j
L2JtYWxsb2MuaAkod29ya2luZyBjb3B5KQpAQCAtNTIsMTUgKzUyLDEzIEBAIGlubGluZSB2b2lk
KiByZWFsbG9jKHZvaWQqIG9iamVjdCwgc2l6ZV8KICAgICBzaXplX3Qgb2xkU2l6ZSA9IDA7CiAg
ICAgc3dpdGNoKG9iamVjdFR5cGUob2JqZWN0KSkgewogICAgIGNhc2UgU21hbGw6IHsKLSAgICAg
ICAgLy8gV2UgZG9uJ3QgaGF2ZSBhbiBleGFjdCBzaXplLCBidXQgd2UgY2FuIGNhbGN1bGF0ZSBh
IG1heGltdW0uCi0gICAgICAgIHZvaWQqIGVuZCA9IHJvdW5kVXBUb011bHRpcGxlT2Y8c21hbGxM
aW5lU2l6ZT4oc3RhdGljX2Nhc3Q8Y2hhcio+KG9iamVjdCkgKyAxKTsKLSAgICAgICAgb2xkU2l6
ZSA9IHN0YXRpY19jYXN0PGNoYXIqPihlbmQpIC0gc3RhdGljX2Nhc3Q8Y2hhcio+KG9iamVjdCk7
CisgICAgICAgIFNtYWxsUGFnZSogcGFnZSA9IFNtYWxsUGFnZTo6Z2V0KFNtYWxsTGluZTo6Z2V0
KG9iamVjdCkpOworICAgICAgICBvbGRTaXplID0gb2JqZWN0U2l6ZShwYWdlLT5zaXplQ2xhc3Mo
KSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIE1lZGl1bTogewotICAgICAgICAv
LyBXZSBkb24ndCBoYXZlIGFuIGV4YWN0IHNpemUsIGJ1dCB3ZSBjYW4gY2FsY3VsYXRlIGEgbWF4
aW11bS4KLSAgICAgICAgdm9pZCogZW5kID0gcm91bmRVcFRvTXVsdGlwbGVPZjxtZWRpdW1MaW5l
U2l6ZT4oc3RhdGljX2Nhc3Q8Y2hhcio+KG9iamVjdCkgKyAxKTsKLSAgICAgICAgb2xkU2l6ZSA9
IHN0YXRpY19jYXN0PGNoYXIqPihlbmQpIC0gc3RhdGljX2Nhc3Q8Y2hhcio+KG9iamVjdCk7Cisg
ICAgICAgIE1lZGl1bVBhZ2UqIHBhZ2UgPSBNZWRpdW1QYWdlOjpnZXQoTWVkaXVtTGluZTo6Z2V0
KG9iamVjdCkpOworICAgICAgICBvbGRTaXplID0gb2JqZWN0U2l6ZShwYWdlLT5zaXplQ2xhc3Mo
KSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIExhcmdlOiB7Cg==
</data>
<flag name="review"
          id="263247"
          type_id="1"
          status="+"
          setter="barraclough"
    />
          </attachment>
      

    </bug>

</bugzilla>