<?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>134324</bug_id>
          
          <creation_ts>2014-06-25 19:23:31 -0700</creation_ts>
          <short_desc>Add HID-based gamepad implementation for Mac</short_desc>
          <delta_ts>2014-06-25 22:31:33 -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>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>134076</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Brady Eidson">beidson</reporter>
          <assigned_to name="Brady Eidson">beidson</assigned_to>
          <cc>bunhere</cc>
    
    <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dino</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>rniwa</cc>
    
    <cc>sergio</cc>
    
    <cc>syoichi</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1018485</commentid>
    <comment_count>0</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2014-06-25 19:23:31 -0700</bug_when>
    <thetext>Add HID-based gamepad implementation for Mac

This also hooks up the platform abstractions to the actual Gamepad mechanisms.

This gets the gamepad API working in WK1, and the pieces for WK2 support are also there for later use.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1018499</commentid>
    <comment_count>1</comment_count>
      <attachid>233867</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2014-06-25 19:54:13 -0700</bug_when>
    <thetext>Created attachment 233867
Patch v1

I don&apos;t expect this to pass EWS yet because it relies on the patch in bug 134325 landing first.

But it&apos;s ready for review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1018502</commentid>
    <comment_count>2</comment_count>
      <attachid>233867</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2014-06-25 20:07:49 -0700</bug_when>
    <thetext>Comment on attachment 233867
Patch v1

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

&gt; Source/WebCore/Modules/gamepad/Gamepad.cpp:45
&gt; +    for (unsigned i = 0; i &lt; platformGamepad.buttonValues().size(); ++i)
&gt; +        m_buttons.append(GamepadButton::create());

Can this be a C++11 for loop?

&gt; Source/WebCore/Modules/gamepad/GamepadManager.cpp:71
&gt; +    // connectect/disconnected event listeners.

Nit: typo connected

&gt; Source/WebCore/Modules/gamepad/GamepadManager.cpp:83
&gt; +    // connectect/disconnected event listeners.

Ditto</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1018503</commentid>
    <comment_count>3</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2014-06-25 20:09:42 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 233867 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=233867&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/Modules/gamepad/Gamepad.cpp:45
&gt; &gt; +    for (unsigned i = 0; i &lt; platformGamepad.buttonValues().size(); ++i)
&gt; &gt; +        m_buttons.append(GamepadButton::create());
&gt; 
&gt; Can this be a C++11 for loop?

Yes.

&gt; 
&gt; &gt; Source/WebCore/Modules/gamepad/GamepadManager.cpp:71
&gt; &gt; +    // connectect/disconnected event listeners.
&gt; 
&gt; Nit: typo connected
&gt; 
&gt; &gt; Source/WebCore/Modules/gamepad/GamepadManager.cpp:83
&gt; &gt; +    // connectect/disconnected event listeners.
&gt; 
&gt; Ditto

Got it.

Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1018522</commentid>
    <comment_count>4</comment_count>
      <attachid>233875</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2014-06-25 21:02:00 -0700</bug_when>
    <thetext>Created attachment 233875
Patch for landing v1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1018523</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-06-25 21:04:22 -0700</bug_when>
    <thetext>Attachment 233875 did not pass style-queue:


ERROR: Source/WebCore/Modules/gamepad/Gamepad.h:60:  The parameter name &quot;platformGamepad&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/platform/mac/HIDGamepad.cpp:64:  Use 0 instead of NULL.  [readability/null] [5]
Total errors found: 2 in 20 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>1018536</commentid>
    <comment_count>6</comment_count>
      <attachid>233878</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2014-06-25 21:17:49 -0700</bug_when>
    <thetext>Created attachment 233878
Patch for landing v2 - Fix *one* style complaint, remove stale #include that will fix the build</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1018538</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-06-25 21:19:13 -0700</bug_when>
    <thetext>Attachment 233878 did not pass style-queue:


ERROR: Source/WebCore/platform/mac/HIDGamepad.cpp:64:  Use 0 instead of NULL.  [readability/null] [5]
Total errors found: 1 in 20 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>1018543</commentid>
    <comment_count>8</comment_count>
      <attachid>233878</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-06-25 21:49:58 -0700</bug_when>
    <thetext>Comment on attachment 233878
Patch for landing v2 - Fix *one* style complaint, remove stale #include that will fix the build

Clearing flags on attachment: 233878

Committed r170465: &lt;http://trac.webkit.org/changeset/170465&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1018544</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-06-25 21:50:03 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1018558</commentid>
    <comment_count>10</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2014-06-25 22:31:33 -0700</bug_when>
    <thetext>Build fix attempt landed in http://trac.webkit.org/changeset/170468.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>233867</attachid>
            <date>2014-06-25 19:54:13 -0700</date>
            <delta_ts>2014-06-25 21:02:00 -0700</delta_ts>
            <desc>Patch v1</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>62294</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA3MjNmZGJkLi4xYjVhMzllIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsODYg
QEAKIDIwMTQtMDYtMjUgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgogCisgICAg
ICAgIEFkZCBISUQtYmFzZWQgZ2FtZXBhZCBpbXBsZW1lbnRhdGlvbiBmb3IgTWFjCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzQzMjQKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMgKE5v
dCB5ZXQgYSB0ZXN0ZWQgY29uZmlnKQorCisgICAgICAgICogTW9kdWxlcy9nYW1lcGFkL0dhbWVw
YWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R2FtZXBhZDo6R2FtZXBhZCk6CisgICAgICAgIChX
ZWJDb3JlOjpHYW1lcGFkOjp1cGRhdGVGcm9tUGxhdGZvcm1HYW1lcGFkKTogVXBkYXRlIHRoZSBH
YW1lcGFk4oCZcyBkYXRhIGZyb20gdGhlIHBhc3NlZC1pbiBQbGF0Zm9ybUdhbWVwYWQuCisgICAg
ICAgICogTW9kdWxlcy9nYW1lcGFkL0dhbWVwYWQuaDoKKworICAgICAgICAqIE1vZHVsZXMvZ2Ft
ZXBhZC9HYW1lcGFkQnV0dG9uLmg6CisgICAgICAgIChXZWJDb3JlOjpHYW1lcGFkQnV0dG9uOjpj
cmVhdGUpOiBDaGFuZ2UgdG8gdXNlIFJlZiBpbnN0ZWFkIG9mIFJlZlB0ci4KKworICAgICAgICBH
YW1lcGFkTWFuYWdlciBpcyBhIEdhbWVwYWRTdHJhdGVneUNsaWVudCB0aGF0IHJlY2VpdmVzIG5v
dGlmaWNhdGlvbnMgZnJvbSB0aGUgcGxhdGZvcm0gZ2FtZXBhZCBpbXBsZW1lbnRhdGlvbgorICAg
ICAgICBhbmQgZm9yd2FyZHMgdGhlbSB0byBOYXZpZ2F0b3JHYW1lcGFkIG9iamVjdHMuIEluIHRo
ZSBmdXR1cmUgaXQgd2lsbCBhbHNvIGhhbmRsZSBldmVudCBkaXNwYXRjaCBhbmQgZXhwb3NpbmcK
KyAgICAgICAgZ2FtZXBhZHMgdG8gdGhlIEFQSSBsYXllciB3aGVuIGEgYnV0dG9uIGlzIHByZXNz
ZWQ6CisgICAgICAgICogTW9kdWxlcy9nYW1lcGFkL0dhbWVwYWRNYW5hZ2VyLmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpHYW1lcGFkTWFuYWdlcjo6c2hhcmVkKToKKyAgICAgICAgKFdl
YkNvcmU6OkdhbWVwYWRNYW5hZ2VyOjpHYW1lcGFkTWFuYWdlcik6CisgICAgICAgIChXZWJDb3Jl
OjpHYW1lcGFkTWFuYWdlcjo6cGxhdGZvcm1HYW1lcGFkQ29ubmVjdGVkKToKKyAgICAgICAgKFdl
YkNvcmU6OkdhbWVwYWRNYW5hZ2VyOjpwbGF0Zm9ybUdhbWVwYWREaXNjb25uZWN0ZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6R2FtZXBhZE1hbmFnZXI6OnJlZ2lzdGVyTmF2aWdhdG9yKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdhbWVwYWRNYW5hZ2VyOjp1bnJlZ2lzdGVyTmF2aWdhdG9yKToKKyAgICAg
ICAgKiBNb2R1bGVzL2dhbWVwYWQvR2FtZXBhZE1hbmFnZXIuaDoKKworICAgICAgICBUaGUgTmF2
aWdhdG9yR2FtZXBhZCBzdXBwbGVtZW50IGFjdHVhbGx5IG1hbmFnZXMgdmlzaWJpbGl0eSBvZiBH
YW1lcGFkcyBvbiBhIHBlci1ET01XaW5kb3cgYmFzaXM6CisgICAgICAgICogTW9kdWxlcy9nYW1l
cGFkL05hdmlnYXRvckdhbWVwYWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TmF2aWdhdG9yR2Ft
ZXBhZDo6TmF2aWdhdG9yR2FtZXBhZCk6CisgICAgICAgIChXZWJDb3JlOjpOYXZpZ2F0b3JHYW1l
cGFkOjp+TmF2aWdhdG9yR2FtZXBhZCk6CisgICAgICAgIChXZWJDb3JlOjpOYXZpZ2F0b3JHYW1l
cGFkOjpmcm9tKToKKyAgICAgICAgKFdlYkNvcmU6Ok5hdmlnYXRvckdhbWVwYWQ6OmdhbWVwYWRz
KToKKyAgICAgICAgKFdlYkNvcmU6Ok5hdmlnYXRvckdhbWVwYWQ6OmdhbWVwYWRzQmVjYW1lVmlz
aWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpOYXZpZ2F0b3JHYW1lcGFkOjpnYW1lcGFkQ29ubmVj
dGVkKToKKyAgICAgICAgKFdlYkNvcmU6Ok5hdmlnYXRvckdhbWVwYWQ6OmdhbWVwYWREaXNjb25u
ZWN0ZWQpOgorICAgICAgICAqIE1vZHVsZXMvZ2FtZXBhZC9OYXZpZ2F0b3JHYW1lcGFkLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpOYXZpZ2F0b3JHYW1lcGFkOjpuYXZpZ2F0aW9uU3RhcnQpOgorCisg
ICAgICAgIEhJREdhbWVwYWQgaXMgYSBQbGF0Zm9ybUdhbWVwYWQgdGhhdCB3cmFwcyBhbiBJT0hJ
RERldmljZVJlZiBhbmQga2VlcHMgaW5wdXQgdmFsdWVzIHVwZGF0ZWQ6CisgICAgICAgICogcGxh
dGZvcm0vbWFjL0hJREdhbWVwYWQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkhJREdh
bWVwYWQ6OkhJREdhbWVwYWQpOgorICAgICAgICAoV2ViQ29yZTo6SElER2FtZXBhZDo6aW5pdEVs
ZW1lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkhJREdhbWVwYWQ6OmluaXRFbGVtZW50c0Zyb21B
cnJheSk6CisgICAgICAgIChXZWJDb3JlOjpISURHYW1lcGFkOjptYXliZUFkZEJ1dHRvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpISURHYW1lcGFkOjptYXliZUFkZEF4aXMpOgorICAgICAgICAoV2Vi
Q29yZTo6SElER2FtZXBhZDo6dmFsdWVDaGFuZ2VkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMv
SElER2FtZXBhZC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkhJREdhbWVwYWRFbGVtZW50
OjpISURHYW1lcGFkRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpISURHYW1lcGFkRWxlbWVu
dDo6fkhJREdhbWVwYWRFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhJREdhbWVwYWRFbGVt
ZW50Ojppc0J1dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpISURHYW1lcGFkRWxlbWVudDo6aXNB
eGlzKToKKyAgICAgICAgKFdlYkNvcmU6OkhJREdhbWVwYWRCdXR0b246OkhJREdhbWVwYWRCdXR0
b24pOgorICAgICAgICAoV2ViQ29yZTo6SElER2FtZXBhZEF4aXM6OkhJREdhbWVwYWRBeGlzKToK
KyAgICAgICAgKFdlYkNvcmU6OkhJREdhbWVwYWQ6OmhpZERldmljZSk6CisKKyAgICAgICAgSElE
R2FtZXBhZExpc3RlbmVyIHdyYXBzIGFuIElPSElETWFuYWdlclJlZiBhbmQgY29udGludW91c2x5
IGxpc3RlbnMgZm9yIGNoYW5nZXMgdG8gR2FtZXBhZC10eXBlCisgICAgICAgIGRldmljZXMgcGx1
Z2dlZCBpbiB0byB0aGUgc3lzdGVtOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9ISURHYW1lcGFk
TGlzdGVuZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmRldmljZU1hdGNoaW5nRGlj
dGlvbmFyeSk6CisgICAgICAgIChXZWJDb3JlOjpkZXZpY2VBZGRlZENhbGxiYWNrKToKKyAgICAg
ICAgKFdlYkNvcmU6OmRldmljZVJlbW92ZWRDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpk
ZXZpY2VWYWx1ZXNDaGFuZ2VkQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6SElER2FtZXBh
ZExpc3RlbmVyOjpzaGFyZWQpOgorICAgICAgICAoV2ViQ29yZTo6SElER2FtZXBhZExpc3RlbmVy
OjpISURHYW1lcGFkTGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6SElER2FtZXBhZExpc3Rl
bmVyOjppbmRleEZvck5ld2x5Q29ubmVjdGVkRGV2aWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkhJ
REdhbWVwYWRMaXN0ZW5lcjo6ZGV2aWNlQWRkZWQpOgorICAgICAgICAoV2ViQ29yZTo6SElER2Ft
ZXBhZExpc3RlbmVyOjpkZXZpY2VSZW1vdmVkKToKKyAgICAgICAgKFdlYkNvcmU6OkhJREdhbWVw
YWRMaXN0ZW5lcjo6dmFsdWVzQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpISURHYW1lcGFk
TGlzdGVuZXI6OnJlbW92ZUdhbWVwYWRGb3JEZXZpY2UpOgorICAgICAgICAqIHBsYXRmb3JtL21h
Yy9ISURHYW1lcGFkTGlzdGVuZXIuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9nYW1lcGFkL05hdmlnYXRvckdhbWVwYWQuY3BwLgorICAgICAgICAoV2ViQ29yZTo6SElER2Ft
ZXBhZExpc3RlbmVyQ2xpZW50Ojp+SElER2FtZXBhZExpc3RlbmVyQ2xpZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkhJREdhbWVwYWRMaXN0ZW5lcjo6c2V0Q2xpZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkhJREdhbWVwYWRMaXN0ZW5lcjo6cGxhdGZvcm1HYW1lcGFkcyk6CisgICAgICAgIChXZWJD
b3JlOjpISURHYW1lcGFkTGlzdGVuZXI6OnNldFNob3VsZERpc3BhdGNoQ2FsbGJhY2tzKToKKwor
ICAgICAgICAqIFdlYkNvcmUuZXhwLmluOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvajoKKworMjAxNC0wNi0yNSAgQnJhZHkgRWlkc29uICA8YmVpZHNvbkBhcHBs
ZS5jb20+CisKICAgICAgICAgQWRkIG5ldyBwbGF0Zm9ybSBnYW1lcGFkIGFic3RyYWN0aW9ucwog
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM0MzI1CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkLmNwcAppbmRleCAyMGEwZjI5
ZS4uNzM3YWE0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nYW1lcGFkL0dh
bWVwYWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkLmNw
cApAQCAtMjgsMTUgKzI4LDIxIEBACiAKICNpZiBFTkFCTEUoR0FNRVBBRCkKIAorI2luY2x1ZGUg
IkdhbWVwYWRCdXR0b24uaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUdhbWVwYWQuaCIKICNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1HYW1lcGFk
OjpHYW1lcGFkKCkKLSAgICA6IG1faW5kZXgoMCkKK0dhbWVwYWQ6OkdhbWVwYWQoY29uc3QgUGxh
dGZvcm1HYW1lcGFkJiBwbGF0Zm9ybUdhbWVwYWQsIHVuc2lnbmVkIGluZGV4KQorICAgIDogbV9p
ZChwbGF0Zm9ybUdhbWVwYWQuaWQoKSkKKyAgICAsIG1faW5kZXgoaW5kZXgpCiAgICAgLCBtX2Nv
bm5lY3RlZCh0cnVlKQotICAgICwgbV90aW1lc3RhbXAoMC4wKQorICAgICwgbV90aW1lc3RhbXAo
cGxhdGZvcm1HYW1lcGFkLmxhc3RVcGRhdGVUaW1lKCkpCiB7CisgICAgbV9heGVzLnJlc2l6ZShw
bGF0Zm9ybUdhbWVwYWQuYXhpc1ZhbHVlcygpLnNpemUoKSk7CisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IHBsYXRmb3JtR2FtZXBhZC5idXR0b25WYWx1ZXMoKS5zaXplKCk7ICsraSkKKyAg
ICAgICAgbV9idXR0b25zLmFwcGVuZChHYW1lcGFkQnV0dG9uOjpjcmVhdGUoKSk7CiB9CiAKIEdh
bWVwYWQ6On5HYW1lcGFkKCkKQEAgLTUzLDYgKzU5LDE2IEBAIGNvbnN0IFZlY3RvcjxSZWY8R2Ft
ZXBhZEJ1dHRvbj4+JiBHYW1lcGFkOjpidXR0b25zKCkgY29uc3QKICAgICByZXR1cm4gbV9idXR0
b25zOwogfQogCit2b2lkIEdhbWVwYWQ6OnVwZGF0ZUZyb21QbGF0Zm9ybUdhbWVwYWQoY29uc3Qg
UGxhdGZvcm1HYW1lcGFkJiBwbGF0Zm9ybUdhbWVwYWQpCit7CisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG1fYXhlcy5zaXplKCk7ICsraSkKKyAgICAgICAgbV9heGVzW2ldID0gcGxhdGZv
cm1HYW1lcGFkLmF4aXNWYWx1ZXMoKVtpXTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bV9idXR0b25zLnNpemUoKTsgKytpKQorICAgICAgICBtX2J1dHRvbnNbaV0tPnNldFZhbHVlKHBs
YXRmb3JtR2FtZXBhZC5idXR0b25WYWx1ZXMoKVtpXSk7CisKKyAgICBtX3RpbWVzdGFtcCA9IHBs
YXRmb3JtR2FtZXBhZC5sYXN0VXBkYXRlVGltZSgpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoR0FNRVBBRCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dh
bWVwYWQvR2FtZXBhZC5oCmluZGV4IDI4ZWJlMWEuLjllNzAyM2UgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9nYW1lcGFkL0dhbWVwYWQuaApAQCAtMjgsMTggKzI4LDIwIEBACiAKICNpZiBFTkFC
TEUoR0FNRVBBRCkKIAotI2luY2x1ZGUgIkdhbWVwYWRCdXR0b24uaCIKLSNpbmNsdWRlIDx3dGYv
UmVmLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAorY2xhc3MgR2FtZXBhZEJ1dHRvbjsKK2NsYXNzIFBsYXRmb3JtR2FtZXBhZDsKKwogY2xh
c3MgR2FtZXBhZDogcHVibGljIFJlZkNvdW50ZWQ8R2FtZXBhZD4gewogcHVibGljOgotICAgIHN0
YXRpYyBQYXNzUmVmUHRyPEdhbWVwYWQ+IGNyZWF0ZSgpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8
R2FtZXBhZD4gY3JlYXRlKGNvbnN0IFBsYXRmb3JtR2FtZXBhZCYgcGxhdGZvcm1HYW1lcGFkLCB1
bnNpZ25lZCBpbmRleCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgR2FtZXBh
ZCk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgR2FtZXBhZChwbGF0Zm9ybUdhbWVwYWQs
IGluZGV4KSk7CiAgICAgfQogICAgIH5HYW1lcGFkKCk7CiAKQEAgLTUyLDggKzU0LDEwIEBAIHB1
YmxpYzoKICAgICBjb25zdCBWZWN0b3I8ZG91YmxlPiYgYXhlcygpIGNvbnN0OwogICAgIGNvbnN0
IFZlY3RvcjxSZWY8R2FtZXBhZEJ1dHRvbj4+JiBidXR0b25zKCkgY29uc3Q7CiAKKyAgICB2b2lk
IHVwZGF0ZUZyb21QbGF0Zm9ybUdhbWVwYWQoY29uc3QgUGxhdGZvcm1HYW1lcGFkJik7CisKIHBy
aXZhdGU6Ci0gICAgR2FtZXBhZCgpOworICAgIEdhbWVwYWQoY29uc3QgUGxhdGZvcm1HYW1lcGFk
JiBwbGF0Zm9ybUdhbWVwYWQsIHVuc2lnbmVkIGluZGV4KTsKICAgICBTdHJpbmcgbV9pZDsKICAg
ICB1bnNpZ25lZCBtX2luZGV4OwogICAgIGJvb2wgbV9jb25uZWN0ZWQ7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dhbWVwYWQvR2FtZXBhZEJ1dHRvbi5oIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9nYW1lcGFkL0dhbWVwYWRCdXR0b24uaAppbmRleCAyZDI1OGQ3Li4xMGNm
MGY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dhbWVwYWQvR2FtZXBhZEJ1
dHRvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkQnV0dG9u
LmgKQEAgLTI4LDE2ICsyOCwxNiBAQAogCiAjaWYgRU5BQkxFKEdBTUVQQUQpCiAKLSNpbmNsdWRl
IDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmLmg+CiAjaW5jbHVkZSA8
d3RmL1JlZkNvdW50ZWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBHYW1lcGFk
QnV0dG9uIDogcHVibGljIFJlZkNvdW50ZWQ8R2FtZXBhZEJ1dHRvbj4gewogcHVibGljOgotICAg
IHN0YXRpYyBQYXNzUmVmUHRyPEdhbWVwYWRCdXR0b24+IGNyZWF0ZSgpCisgICAgc3RhdGljIFBh
c3NSZWY8R2FtZXBhZEJ1dHRvbj4gY3JlYXRlKCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9w
dFJlZihuZXcgR2FtZXBhZEJ1dHRvbik7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEdh
bWVwYWRCdXR0b24pOwogICAgIH0KIAogICAgIGJvb2wgcHJlc3NlZCgpIGNvbnN0OwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nYW1lcGFkL0dhbWVwYWRNYW5hZ2VyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkTWFuYWdlci5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGY5ZDcwOQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkTWFuYWdlci5jcHAKQEAgLTAs
MCArMSw5MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR2Ft
ZXBhZE1hbmFnZXIuaCIKKworI2lmIEVOQUJMRShHQU1FUEFEKQorCisjaW5jbHVkZSAiR2FtZXBh
ZC5oIgorI2luY2x1ZGUgIkdhbWVwYWRTdHJhdGVneS5oIgorI2luY2x1ZGUgIk5hdmlnYXRvckdh
bWVwYWQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUdhbWVwYWQuaCIKKyNpbmNsdWRlICJQbGF0Zm9y
bVN0cmF0ZWdpZXMuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitHYW1lcGFkTWFuYWdlciYg
R2FtZXBhZE1hbmFnZXI6OnNoYXJlZCgpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEdh
bWVwYWRNYW5hZ2VyPiBzaGFyZWRNYW5hZ2VyOworICAgIHJldHVybiBzaGFyZWRNYW5hZ2VyOwor
fQorCitHYW1lcGFkTWFuYWdlcjo6R2FtZXBhZE1hbmFnZXIoKQoreworICAgIHBsYXRmb3JtU3Ry
YXRlZ2llcygpLT5nYW1lcGFkU3RyYXRlZ3koKS0+c3RvcE1vbml0b3JpbmdHYW1lcGFkcyh0aGlz
KTsKK30KKwordm9pZCBHYW1lcGFkTWFuYWdlcjo6cGxhdGZvcm1HYW1lcGFkQ29ubmVjdGVkKHVu
c2lnbmVkIGluZGV4KQoreworICAgIGZvciAoYXV0byYgbmF2aWdhdG9yIDogbV9uYXZpZ2F0b3Jz
KQorICAgICAgICBuYXZpZ2F0b3ItPmdhbWVwYWRDb25uZWN0ZWQoaW5kZXgpOworCisgICAgLy8g
RklYTUU6IEZpcmUgY29ubmVjdGVkIGV2ZW50IHRvIGFsbCBwYWdlcyB3aXRoIGxpc3RlbmVycy4K
K30KKwordm9pZCBHYW1lcGFkTWFuYWdlcjo6cGxhdGZvcm1HYW1lcGFkRGlzY29ubmVjdGVkKHVu
c2lnbmVkIGluZGV4KQoreworICAgIC8vIEZJWE1FOiBGaXJlIGRpc2Nvbm5lY3RlZCBldmVudCB0
byBhbGwgcGFnZXMgd2l0aCBsaXN0ZW5lcnMuCisKKyAgICBmb3IgKGF1dG8mIG5hdmlnYXRvciA6
IG1fbmF2aWdhdG9ycykKKyAgICAgICAgbmF2aWdhdG9yLT5nYW1lcGFkRGlzY29ubmVjdGVkKGlu
ZGV4KTsKK30KKwordm9pZCBHYW1lcGFkTWFuYWdlcjo6cmVnaXN0ZXJOYXZpZ2F0b3IoTmF2aWdh
dG9yR2FtZXBhZCogbmF2aWdhdG9yKQoreworICAgIEFTU0VSVCghbV9uYXZpZ2F0b3JzLmNvbnRh
aW5zKG5hdmlnYXRvcikpOworICAgIG1fbmF2aWdhdG9ycy5hZGQobmF2aWdhdG9yKTsKKworICAg
IC8vIEZJWE1FOiBNb25pdG9yaW5nIGdhbWVwYWRzIHdpbGwgYWxzbyBiZSByZWxpYW50IG9uIHdo
ZXRoZXIgb3Igbm90IHRoZXJlIGFyZSBhbnkKKyAgICAvLyBjb25uZWN0ZWN0L2Rpc2Nvbm5lY3Rl
ZCBldmVudCBsaXN0ZW5lcnMuCisgICAgLy8gVGhvc2UgZXZlbnQgbGlzdGVuZXJzIHdpbGwgYWxz
byBuZWVkIHRvIHJlZ2lzdGVyIHdpdGggdGhlIEdhbWVwYWRNYW5hZ2VyLgorICAgIGlmIChtX25h
dmlnYXRvcnMuc2l6ZSgpID09IDEpCisgICAgICAgIHBsYXRmb3JtU3RyYXRlZ2llcygpLT5nYW1l
cGFkU3RyYXRlZ3koKS0+c3RhcnRNb25pdG9yaW5nR2FtZXBhZHModGhpcyk7Cit9CisKK3ZvaWQg
R2FtZXBhZE1hbmFnZXI6OnVucmVnaXN0ZXJOYXZpZ2F0b3IoTmF2aWdhdG9yR2FtZXBhZCogbmF2
aWdhdG9yKQoreworICAgIEFTU0VSVChtX25hdmlnYXRvcnMuY29udGFpbnMobmF2aWdhdG9yKSk7
CisgICAgbV9uYXZpZ2F0b3JzLnJlbW92ZShuYXZpZ2F0b3IpOworCisgICAgLy8gRklYTUU6IE1v
bml0b3JpbmcgZ2FtZXBhZHMgd2lsbCBhbHNvIGJlIHJlbGlhbnQgb24gd2hldGhlciBvciBub3Qg
dGhlcmUgYXJlIGFueQorICAgIC8vIGNvbm5lY3RlY3QvZGlzY29ubmVjdGVkIGV2ZW50IGxpc3Rl
bmVycy4KKyAgICAvLyBUaG9zZSBldmVudCBsaXN0ZW5lcnMgd2lsbCBhbHNvIG5lZWQgdG8gcmVn
aXN0ZXIgd2l0aCB0aGUgR2FtZXBhZE1hbmFnZXIuCisgICAgaWYgKG1fbmF2aWdhdG9ycy5pc0Vt
cHR5KCkpCisgICAgICAgIHBsYXRmb3JtU3RyYXRlZ2llcygpLT5nYW1lcGFkU3RyYXRlZ3koKS0+
c3RvcE1vbml0b3JpbmdHYW1lcGFkcyh0aGlzKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gRU5BQkxFKEdBTUVQQUQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2dhbWVwYWQvR2FtZXBhZE1hbmFnZXIuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvZ2FtZXBhZC9HYW1lcGFkTWFuYWdlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjdmOGM3OWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2dhbWVwYWQvR2FtZXBhZE1hbmFnZXIuaApAQCAtMCwwICsxLDYyIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBHYW1lcGFkTWFuYWdlcl9oCisjZGVmaW5lIEdhbWVwYWRNYW5hZ2VyX2gKKworI2lm
IEVOQUJMRShHQU1FUEFEKQorCisjaW5jbHVkZSAiR2FtZXBhZFN0cmF0ZWd5Q2xpZW50LmgiCisj
aW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4K
KyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
R2FtZXBhZDsKK2NsYXNzIE5hdmlnYXRvckdhbWVwYWQ7CisKK2NsYXNzIEdhbWVwYWRNYW5hZ2Vy
IDogcHVibGljIEdhbWVwYWRTdHJhdGVneUNsaWVudCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoR2FtZXBhZE1hbmFnZXIpOworICAgIGZyaWVuZCBjbGFzcyBOZXZlckRlc3Ryb3llZDxHYW1l
cGFkTWFuYWdlcj47CitwdWJsaWM6CisgICAgc3RhdGljIEdhbWVwYWRNYW5hZ2VyJiBzaGFyZWQo
KTsKKworICAgIHZpcnR1YWwgdm9pZCBwbGF0Zm9ybUdhbWVwYWRDb25uZWN0ZWQodW5zaWduZWQg
aW5kZXgpIG92ZXJyaWRlIGZpbmFsOworICAgIHZpcnR1YWwgdm9pZCBwbGF0Zm9ybUdhbWVwYWRE
aXNjb25uZWN0ZWQodW5zaWduZWQgaW5kZXgpIG92ZXJyaWRlIGZpbmFsOworCisgICAgdm9pZCBy
ZWdpc3Rlck5hdmlnYXRvcihOYXZpZ2F0b3JHYW1lcGFkKik7CisgICAgdm9pZCB1bnJlZ2lzdGVy
TmF2aWdhdG9yKE5hdmlnYXRvckdhbWVwYWQqKTsKKworcHJpdmF0ZToKKyAgICBHYW1lcGFkTWFu
YWdlcigpOworCisgICAgSGFzaFNldDxOYXZpZ2F0b3JHYW1lcGFkKj4gbV9uYXZpZ2F0b3JzOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKEdBTUVQQUQp
CisjZW5kaWYgLy8gR2FtZXBhZE1hbmFnZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9nYW1lcGFkL05hdmlnYXRvckdhbWVwYWQuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9nYW1lcGFkL05hdmlnYXRvckdhbWVwYWQuY3BwCmluZGV4IDE0MmY3N2IuLjJiZjZjY2Eg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2FtZXBhZC9OYXZpZ2F0b3JHYW1l
cGFkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dhbWVwYWQvTmF2aWdhdG9yR2Ft
ZXBhZC5jcHAKQEAgLTI4LDE0ICsyOCwyOCBAQAogCiAjaWYgRU5BQkxFKEdBTUVQQUQpCiAKKyNp
bmNsdWRlICJEb2N1bWVudExvYWRlci5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAi
R2FtZXBhZC5oIgorI2luY2x1ZGUgIkdhbWVwYWRNYW5hZ2VyLmgiCisjaW5jbHVkZSAiR2FtZXBh
ZFN0cmF0ZWd5LmgiCiAjaW5jbHVkZSAiTmF2aWdhdG9yLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1H
YW1lcGFkLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJhdGVnaWVzLmgiCiAjaW5jbHVkZSA8d3Rm
L05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBOYXZpZ2F0b3JHYW1lcGFkOjpOYXZpZ2F0b3JHYW1lcGFkKCkKKyAgICA6
IG1fbmF2aWdhdGlvblN0YXJ0KHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6aW5maW5pdHko
KSkKIHsKKyAgICBHYW1lcGFkTWFuYWdlcjo6c2hhcmVkKCkucmVnaXN0ZXJOYXZpZ2F0b3IodGhp
cyk7Cit9CisKK05hdmlnYXRvckdhbWVwYWQ6On5OYXZpZ2F0b3JHYW1lcGFkKCkKK3sKKyAgICBH
YW1lcGFkTWFuYWdlcjo6c2hhcmVkKCkudW5yZWdpc3Rlck5hdmlnYXRvcih0aGlzKTsKIH0KIAog
Y29uc3QgY2hhciogTmF2aWdhdG9yR2FtZXBhZDo6c3VwcGxlbWVudE5hbWUoKQpAQCAtNTAsNiAr
NjQsMTEgQEAgTmF2aWdhdG9yR2FtZXBhZCogTmF2aWdhdG9yR2FtZXBhZDo6ZnJvbShOYXZpZ2F0
b3IqIG5hdmlnYXRvcikKICAgICAgICAgYXV0byBuZXdTdXBwbGVtZW50ID0gc3RkOjptYWtlX3Vu
aXF1ZTxOYXZpZ2F0b3JHYW1lcGFkPigpOwogICAgICAgICBzdXBwbGVtZW50ID0gbmV3U3VwcGxl
bWVudC5nZXQoKTsKICAgICAgICAgcHJvdmlkZVRvKG5hdmlnYXRvciwgc3VwcGxlbWVudE5hbWUo
KSwgc3RkOjptb3ZlKG5ld1N1cHBsZW1lbnQpKTsKKworICAgICAgICBpZiAoRnJhbWUqIGZyYW1l
ID0gbmF2aWdhdG9yLT5mcmFtZSgpKSB7CisgICAgICAgICAgICBpZiAoRG9jdW1lbnRMb2FkZXIq
IGRvY3VtZW50TG9hZGVyID0gZnJhbWUtPmxvYWRlcigpLmRvY3VtZW50TG9hZGVyKCkpCisgICAg
ICAgICAgICAgICAgc3VwcGxlbWVudC0+bV9uYXZpZ2F0aW9uU3RhcnQgPSBkb2N1bWVudExvYWRl
ci0+dGltaW5nKCktPm5hdmlnYXRpb25TdGFydCgpOworICAgICAgICB9CiAgICAgfQogICAgIHJl
dHVybiBzdXBwbGVtZW50OwogfQpAQCAtNjEsOSArODAsNzAgQEAgY29uc3QgVmVjdG9yPFJlZlB0
cjxHYW1lcGFkPj4mIE5hdmlnYXRvckdhbWVwYWQ6OmdldEdhbWVwYWRzKE5hdmlnYXRvciogbmF2
aWdhdG8KIAogY29uc3QgVmVjdG9yPFJlZlB0cjxHYW1lcGFkPj4mIE5hdmlnYXRvckdhbWVwYWQ6
OmdhbWVwYWRzKCkKIHsKKyAgICBpZiAobV9nYW1lcGFkcy5pc0VtcHR5KCkpCisgICAgICAgIHJl
dHVybiBtX2dhbWVwYWRzOworCisgICAgY29uc3QgVmVjdG9yPFBsYXRmb3JtR2FtZXBhZCo+JiBw
bGF0Zm9ybUdhbWVwYWRzID0gcGxhdGZvcm1TdHJhdGVnaWVzKCktPmdhbWVwYWRTdHJhdGVneSgp
LT5wbGF0Zm9ybUdhbWVwYWRzKCk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcGxh
dGZvcm1HYW1lcGFkcy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAoIXBsYXRmb3JtR2FtZXBh
ZHNbaV0pIHsKKyAgICAgICAgICAgIEFTU0VSVCghbV9nYW1lcGFkc1tpXSk7CisgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIEFTU0VSVChtX2dhbWVwYWRzW2ldKTsK
KyAgICAgICAgbV9nYW1lcGFkc1tpXS0+dXBkYXRlRnJvbVBsYXRmb3JtR2FtZXBhZCgqcGxhdGZv
cm1HYW1lcGFkc1tpXSk7CisgICAgfQorCiAgICAgcmV0dXJuIG1fZ2FtZXBhZHM7CiB9CiAKK3Zv
aWQgTmF2aWdhdG9yR2FtZXBhZDo6Z2FtZXBhZHNCZWNhbWVWaXNpYmxlKCkKK3sKKyAgICBjb25z
dCBWZWN0b3I8UGxhdGZvcm1HYW1lcGFkKj4mIHBsYXRmb3JtR2FtZXBhZHMgPSBwbGF0Zm9ybVN0
cmF0ZWdpZXMoKS0+Z2FtZXBhZFN0cmF0ZWd5KCktPnBsYXRmb3JtR2FtZXBhZHMoKTsKKyAgICBt
X2dhbWVwYWRzLnJlc2l6ZShwbGF0Zm9ybUdhbWVwYWRzLnNpemUoKSk7CisKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgcGxhdGZvcm1HYW1lcGFkcy5zaXplKCk7ICsraSkgeworICAgICAg
ICBpZiAoIXBsYXRmb3JtR2FtZXBhZHNbaV0pCisgICAgICAgICAgICBjb250aW51ZTsKKworICAg
ICAgICBtX2dhbWVwYWRzW2ldID0gR2FtZXBhZDo6Y3JlYXRlKCpwbGF0Zm9ybUdhbWVwYWRzW2ld
LCBpKTsKKyAgICB9Cit9CisKK3ZvaWQgTmF2aWdhdG9yR2FtZXBhZDo6Z2FtZXBhZENvbm5lY3Rl
ZCh1bnNpZ25lZCBpbmRleCkKK3sKKyAgICAvLyBJZiB0aGlzIGlzIHRoZSBmaXJzdCBnYW1lcGFk
IHRoaXMgTmF2aWdhdG9yIG9iamVjdCBoYXMgc2VlbiwgdGhlbiBhbGwgZ2FtZXBhZHMganVzdCBi
ZWNhbWUgdmlzaWJsZS4KKyAgICBpZiAobV9nYW1lcGFkcy5pc0VtcHR5KCkpIHsKKyAgICAgICAg
Z2FtZXBhZHNCZWNhbWVWaXNpYmxlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAv
LyBUaGUgbmV3IGluZGV4IHNob3VsZCBhbHJlYWR5IGZpdCBpbiB0aGUgZXhpc3RpbmcgYXJyYXks
IG9yIHNob3VsZCBiZSBleGFjdGx5IG9uZSBwYXN0LXRoZS1lbmQgb2YgdGhlIGV4aXN0aW5nIGFy
cmF5LgorICAgIEFTU0VSVChpbmRleCA8PSBtX2dhbWVwYWRzLnNpemUoKSk7CisKKyAgICBjb25z
dCBWZWN0b3I8UGxhdGZvcm1HYW1lcGFkKj4mIHBsYXRmb3JtR2FtZXBhZHMgPSBwbGF0Zm9ybVN0
cmF0ZWdpZXMoKS0+Z2FtZXBhZFN0cmF0ZWd5KCktPnBsYXRmb3JtR2FtZXBhZHMoKTsKKyAgICBB
U1NFUlQoaW5kZXggPCBwbGF0Zm9ybUdhbWVwYWRzLnNpemUoKSk7CisgICAgQVNTRVJUKHBsYXRm
b3JtR2FtZXBhZHNbaW5kZXhdKTsKKworICAgIGlmIChpbmRleCA8IG1fZ2FtZXBhZHMuc2l6ZSgp
KQorICAgICAgICBtX2dhbWVwYWRzW2luZGV4XSA9IEdhbWVwYWQ6OmNyZWF0ZSgqcGxhdGZvcm1H
YW1lcGFkc1tpbmRleF0sIGluZGV4KTsKKyAgICBlbHNlIGlmIChpbmRleCA9PSBtX2dhbWVwYWRz
LnNpemUoKSkKKyAgICAgICAgbV9nYW1lcGFkcy5hcHBlbmQoR2FtZXBhZDo6Y3JlYXRlKCpwbGF0
Zm9ybUdhbWVwYWRzW2luZGV4XSwgaW5kZXgpKTsKK30KKwordm9pZCBOYXZpZ2F0b3JHYW1lcGFk
OjpnYW1lcGFkRGlzY29ubmVjdGVkKHVuc2lnbmVkIGluZGV4KQoreworICAgIC8vIElmIHRoaXMg
TmF2aWdhdG9yIGhhc24ndCBzZWVuIGFueSBnYW1lcGFkcyB5ZXQgaXRzIFZlY3RvciB3aWxsIHN0
aWxsIGJlIGVtcHR5LgorICAgIGlmICghbV9nYW1lcGFkcy5zaXplKCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIEFTU0VSVChpbmRleCA8IG1fZ2FtZXBhZHMuc2l6ZSgpKTsKKyAgICBBU1NFUlQo
bV9nYW1lcGFkc1tpbmRleF0pOworCisgICAgbV9nYW1lcGFkc1tpbmRleF0gPSBudWxscHRyOwor
fQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoR0FNRVBBRCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2FtZXBhZC9OYXZpZ2F0b3JHYW1l
cGFkLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dhbWVwYWQvTmF2aWdhdG9yR2FtZXBhZC5o
CmluZGV4IDU1NzkwYTQuLjQ2Zjc0MTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvZ2FtZXBhZC9OYXZpZ2F0b3JHYW1lcGFkLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9nYW1lcGFkL05hdmlnYXRvckdhbWVwYWQuaApAQCAtMzksMTYgKzM5LDI3IEBAIGNsYXNzIE5h
dmlnYXRvcjsKIGNsYXNzIE5hdmlnYXRvckdhbWVwYWQgOiBwdWJsaWMgU3VwcGxlbWVudDxOYXZp
Z2F0b3I+IHsKIHB1YmxpYzoKICAgICBOYXZpZ2F0b3JHYW1lcGFkKCk7CisgICAgdmlydHVhbCB+
TmF2aWdhdG9yR2FtZXBhZCgpOwogCiAgICAgc3RhdGljIE5hdmlnYXRvckdhbWVwYWQqIGZyb20o
TmF2aWdhdG9yKik7CiAKKyAgICAvLyBUaGUgYXJyYXkgb2YgR2FtZXBhZHMgbWlnaHQgYmUgc3Bh
cnNlLgorICAgIC8vIE51bGwgY2hlY2tpbmcgZWFjaCBlbnRyeSBpcyBuZWNlc3NhcnkuCiAgICAg
c3RhdGljIGNvbnN0IFZlY3RvcjxSZWZQdHI8R2FtZXBhZD4+JiBnZXRHYW1lcGFkcyhOYXZpZ2F0
b3IqKTsKIAorICAgIGRvdWJsZSBuYXZpZ2F0aW9uU3RhcnQoKSBjb25zdCB7IHJldHVybiBtX25h
dmlnYXRpb25TdGFydDsgfQorCisgICAgdm9pZCBnYW1lcGFkQ29ubmVjdGVkKHVuc2lnbmVkIGlu
ZGV4KTsKKyAgICB2b2lkIGdhbWVwYWREaXNjb25uZWN0ZWQodW5zaWduZWQgaW5kZXgpOworCiBw
cml2YXRlOgogICAgIHN0YXRpYyBjb25zdCBjaGFyKiBzdXBwbGVtZW50TmFtZSgpOwogCisgICAg
dm9pZCBnYW1lcGFkc0JlY2FtZVZpc2libGUoKTsKKwogICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8
R2FtZXBhZD4+JiBnYW1lcGFkcygpOwogCisgICAgZG91YmxlIG1fbmF2aWdhdGlvblN0YXJ0Owog
ICAgIFZlY3RvcjxSZWZQdHI8R2FtZXBhZD4+IG1fZ2FtZXBhZHM7CiB9OwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
ZXhwLmluCmluZGV4IGZkZWUyOTEuLmFhZjdhNTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUuZXhwLmluCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCkBAIC0z
NDM5LDMgKzM0MzksNyBAQCBfX1pON1dlYkNvcmU0UGFnZTExc2V0Vmlld01vZGVFTlMwXzhWaWV3
TW9kZUUKICNpZiBFTkFCTEUoV0VCX1RJTUlORykKIF9fWk5LN1dlYkNvcmUyMFJlc291cmNlUmVz
cG9uc2VCYXNlMThyZXNvdXJjZUxvYWRUaW1pbmdFdgogI2VuZGlmCisKKyNpZiBFTkFCTEUoR0FN
RVBBRCkKK19fWk43V2ViQ29yZTE4SElER2FtZXBhZExpc3RlbmVyNnNoYXJlZEV2CisjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpp
bmRleCBiZWVkMTBmLi40ZTE1ZDcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xOTIzLDYgKzE5MjMsMTIgQEAKIAkJNTFBNEJC
MEExOTU0RDYxNjAwRkE1QzJFIC8qIEdhbWVwYWQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFBNEJCMDcxOTU0RDYxNjAwRkE1QzJFIC8qIEdhbWVw
YWQuY3BwICovOyB9OwogCQk1MUE0QkIxMDE5NTRENjI3MDBGQTVDMkUgLyogTmF2aWdhdG9yR2Ft
ZXBhZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
MUE0QkIwRDE5NTRENjI3MDBGQTVDMkUgLyogTmF2aWdhdG9yR2FtZXBhZC5jcHAgKi87IH07CiAJ
CTUxQTlEOUU2MTk1QjhGNDcwMDFCMkI1QyAvKiBHYW1lcGFkU3RyYXRlZ3lDbGllbnQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxQTlEOUU1MTk1QjhG
NDcwMDFCMkI1QyAvKiBHYW1lcGFkU3RyYXRlZ3lDbGllbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk1MUE5RDlFOTE5NUI5MzFGMDAxQjJCNUMg
LyogR2FtZXBhZE1hbmFnZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTFBOUQ5RTcxOTVCOTMxRjAwMUIyQjVDIC8qIEdhbWVwYWRNYW5hZ2VyLmNw
cCAqLzsgfTsKKwkJNTFBOUQ5RUExOTVCOTMxRjAwMUIyQjVDIC8qIEdhbWVwYWRNYW5hZ2VyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUE5RDlFODE5
NUI5MzFGMDAxQjJCNUMgLyogR2FtZXBhZE1hbmFnZXIuaCAqLzsgfTsKKwkJNTFBOUQ5RjMxOTVC
OTUwMzAwMUIyQjVDIC8qIEhJREdhbWVwYWQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTFBOUQ5RUYxOTVCOTUwMzAwMUIyQjVDIC8qIEhJREdhbWVw
YWQuY3BwICovOyB9OworCQk1MUE5RDlGNDE5NUI5NTAzMDAxQjJCNUMgLyogSElER2FtZXBhZC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFBOUQ5RjAx
OTVCOTUwMzAwMUIyQjVDIC8qIEhJREdhbWVwYWQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQk1MUE5RDlGNTE5NUI5NTAzMDAxQjJCNUMgLyogSElE
R2FtZXBhZExpc3RlbmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUxQTlEOUYxMTk1Qjk1MDMwMDFCMkI1QyAvKiBISURHYW1lcGFkTGlzdGVuZXIu
Y3BwICovOyB9OworCQk1MUE5RDlGNjE5NUI5NTAzMDAxQjJCNUMgLyogSElER2FtZXBhZExpc3Rl
bmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUE5
RDlGMjE5NUI5NTAzMDAxQjJCNUMgLyogSElER2FtZXBhZExpc3RlbmVyLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTFBQTNGNkYwQkQ1QUE5RTAw
ODkyOTcxIC8qIFJlc291cmNlTG9hZGVyTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTFBQTNGNkUwQkQ1QUE5RTAwODkyOTcxIC8qIFJlc291cmNl
TG9hZGVyTWFjLm1tICovOyB9OwogCQk1MUFCQUUxQjEwM0MxOEZGMDA4QzUyNjAgLyogU29ja2V0
U3RyZWFtRXJyb3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUxQUJBRTFBMTAzQzE4RkYwMDhDNTI2MCAvKiBTb2NrZXRTdHJlYW1FcnJvci5oICovOyB9
OwogCQk1MUFCQUUxRTEwM0MxOTEzMDA4QzUyNjAgLyogU29ja2V0U3RyZWFtSGFuZGxlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUFCQUUxQzEwM0Mx
OTEzMDA4QzUyNjAgLyogU29ja2V0U3RyZWFtSGFuZGxlLmggKi87IH07CkBAIC05MDAxLDYgKzkw
MDcsMTIgQEAKIAkJNTFBNEJCMEUxOTU0RDYyNzAwRkE1QzJFIC8qIE5hdmlnYXRvckdhbWVwYWQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTmF2aWdhdG9yR2FtZXBhZC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MUE0QkIwRjE5NTRENjI3MDBGQTVDMkUgLyog
TmF2aWdhdG9yR2FtZXBhZC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gTmF2aWdhdG9yR2Ft
ZXBhZC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxQTlEOUU1MTk1QjhGNDcw
MDFCMkI1QyAvKiBHYW1lcGFkU3RyYXRlZ3lDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gR2FtZXBhZFN0cmF0ZWd5Q2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTUxQTlEOUU3MTk1QjkzMUYwMDFCMkI1QyAvKiBHYW1lcGFkTWFuYWdlci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHYW1lcGFkTWFuYWdlci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxQTlEOUU4MTk1QjkzMUYwMDFCMkI1QyAv
KiBHYW1lcGFkTWFuYWdlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHYW1l
cGFkTWFuYWdlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MUE5RDlFRjE5NUI5
NTAzMDAxQjJCNUMgLyogSElER2FtZXBhZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBISURHYW1lcGFkLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NTFBOUQ5RjAxOTVCOTUwMzAwMUIyQjVDIC8qIEhJREdhbWVwYWQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSElER2FtZXBhZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk1MUE5RDlGMTE5NUI5NTAzMDAxQjJCNUMgLyogSElER2FtZXBhZExpc3RlbmVyLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEhJREdhbWVwYWRMaXN0ZW5lci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxQTlEOUYyMTk1Qjk1MDMwMDFCMkI1
QyAvKiBISURHYW1lcGFkTGlzdGVuZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSElER2FtZXBhZExpc3RlbmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUx
QUEzRjZFMEJENUFBOUUwMDg5Mjk3MSAvKiBSZXNvdXJjZUxvYWRlck1hYy5tbSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFJlc291cmNlTG9hZGVyTWFjLm1tOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MUFCQUUxQTEwM0MxOEZGMDA4QzUyNjAgLyogU29j
a2V0U3RyZWFtRXJyb3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU29ja2V0
U3RyZWFtRXJyb3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFBQkFFMUMxMDND
MTkxMzAwOEM1MjYwIC8qIFNvY2tldFN0cmVhbUhhbmRsZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBTb2NrZXRTdHJlYW1IYW5kbGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTE2MDcwLDYgKzE2MDgyLDggQEAKIAkJCQk1MTZDNjIxRDE5NTBENDg3MDAzMzdF
NzUgLyogR2FtZXBhZEV2ZW50LmNwcCAqLywKIAkJCQk1MTZDNjIxRTE5NTBENDg3MDAzMzdFNzUg
LyogR2FtZXBhZEV2ZW50LmggKi8sCiAJCQkJNTE2QzYyMUYxOTUwRDQ4NzAwMzM3RTc1IC8qIEdh
bWVwYWRFdmVudC5pZGwgKi8sCisJCQkJNTFBOUQ5RTcxOTVCOTMxRjAwMUIyQjVDIC8qIEdhbWVw
YWRNYW5hZ2VyLmNwcCAqLywKKwkJCQk1MUE5RDlFODE5NUI5MzFGMDAxQjJCNUMgLyogR2FtZXBh
ZE1hbmFnZXIuaCAqLywKIAkJCQk1MUE0QkIwRDE5NTRENjI3MDBGQTVDMkUgLyogTmF2aWdhdG9y
R2FtZXBhZC5jcHAgKi8sCiAJCQkJNTFBNEJCMEUxOTU0RDYyNzAwRkE1QzJFIC8qIE5hdmlnYXRv
ckdhbWVwYWQuaCAqLywKIAkJCQk1MUE0QkIwRjE5NTRENjI3MDBGQTVDMkUgLyogTmF2aWdhdG9y
R2FtZXBhZC5pZGwgKi8sCkBAIC0xNjM3MSw2ICsxNjM4NSwxMCBAQAogCQkJCUUxQkE2NkYwMTc0
MkJEODYwMEMyMDI1MSAvKiBEeW5hbWljTGlua2VySW50ZXJwb3NpbmcuaCAqLywKIAkJCQkxQ0Ex
OUUwMzBEQzI1NTk1MDA2NUE5OTQgLyogRXZlbnRMb29wTWFjLm1tICovLAogCQkJCTUxNEIzRjc1
MEM3MjIwNTUwMDA1MzBERiAvKiBGaWxlU3lzdGVtTWFjLm1tICovLAorCQkJCTUxQTlEOUVGMTk1
Qjk1MDMwMDFCMkI1QyAvKiBISURHYW1lcGFkLmNwcCAqLywKKwkJCQk1MUE5RDlGMDE5NUI5NTAz
MDAxQjJCNUMgLyogSElER2FtZXBhZC5oICovLAorCQkJCTUxQTlEOUYxMTk1Qjk1MDMwMDFCMkI1
QyAvKiBISURHYW1lcGFkTGlzdGVuZXIuY3BwICovLAorCQkJCTUxQTlEOUYyMTk1Qjk1MDMwMDFC
MkI1QyAvKiBISURHYW1lcGFkTGlzdGVuZXIuaCAqLywKIAkJCQk5MzVDNDc2RTA5QUM0RDczMDBB
NkFBQjQgLyogS2V5RXZlbnRNYWMubW0gKi8sCiAJCQkJNTIxRDQ2RjUxMUFFQzk4MTAwNTE0NjEz
IC8qIEtpbGxSaW5nTWFjLm1tICovLAogCQkJCTkzNTIwODQ0MDlCRDQzQjkwMEYyMDM4RCAvKiBM
YW5ndWFnZS5tbSAqLywKQEAgLTI0ODE1LDYgKzI0ODMzLDcgQEAKIAkJCQlCQzNDMzlCNzBDMEQz
RDhEMDA1RjREN0EgLyogSlNNZWRpYUxpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUQzQTk0QTQ3
MTIyREM0MEYwMEEzN0JCQyAvKiBKU01lZGlhUXVlcnlMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJ
CQk3QzUzNDNGRDE3Qjc0QjYzMDA0MjMyRjAgLyogSlNNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmgg
aW4gSGVhZGVycyAqLywKKwkJCQk1MUE5RDlGNjE5NUI5NTAzMDAxQjJCNUMgLyogSElER2FtZXBh
ZExpc3RlbmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlDRDlERTE3NTE3QUFDNzRDMDBFQTM4NkQg
LyogSlNNZWRpYVNvdXJjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDdDNTlCNzIxN0Y3OUM3QzAw
MEZCQ0JCIC8qIEpTTWVkaWFTb3VyY2VTdGF0ZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTA3Mjc3
RTREMTdEMDE4Q0MwMDE1NTM0RCAvKiBKU01lZGlhU3RyZWFtLmggaW4gSGVhZGVycyAqLywKQEAg
LTI1NTkzLDYgKzI1NjEyLDcgQEAKIAkJCQk0MzkwNDZEQzEyREEyNUU4MDBBRjgwQTIgLyogUmVu
ZGVyTWF0aE1MRnJhY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTA3QUI5OTZGMThEQTNDNzQw
MDE4NzcxRSAvKiBSVENDb25maWd1cmF0aW9uUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NDM5MDQ2REUxMkRBMjVFODAwQUY4MEEyIC8qIFJlbmRlck1hdGhNTE1hdGguaCBpbiBIZWFkZXJz
ICovLAorCQkJCTUxQTlEOUY0MTk1Qjk1MDMwMDFCMkI1QyAvKiBISURHYW1lcGFkLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk0MzkwNDZFMDEyREEyNUU4MDBBRjgwQTIgLyogUmVuZGVyTWF0aE1MT3Bl
cmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTQzOTA0NkUwMTJEQTI1RTgwMEJGODBBMyAvKiBS
ZW5kZXJNYXRoTUxSYWRpY2FsT3BlcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTQzOTA0NkUy
MTJEQTI1RTgwMEFGODBBMiAvKiBSZW5kZXJNYXRoTUxSb290LmggaW4gSGVhZGVycyAqLywKQEAg
LTI2NTU5LDYgKzI2NTc5LDcgQEAKIAkJCQk4NTAzMUI1MTBBNDRFRkM3MDBGOTkyRTAgLyogV2hl
ZWxFdmVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTNFQzQ0QTIxODhGNEJCODAwNjYxREYxIC8q
IFdoZWVsRXZlbnREZWx0YVRyYWNrZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzODBGNDc0MDlB
MTFBQjQwMDFGREIzNCAvKiBXaWRnZXQuaCBpbiBIZWFkZXJzICovLAorCQkJCTUxQTlEOUVBMTk1
QjkzMUYwMDFCMkI1QyAvKiBHYW1lcGFkTWFuYWdlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQx
MURDQjExNjRDMzlBODAwRDQ5QkMxIC8qIFdpZHRoQ2FjaGUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTkzOUIwMkVGMEVBMkRCQzQwMEM1NDU3MCAvKiBXaWR0aEl0ZXJhdG9yLmggaW4gSGVhZGVycyAq
LywKIAkJCQlCQzgyNDNFOTBEMENGRDc1MDA0NjBDOEYgLyogV2luZG93RmVhdHVyZXMuaCBpbiBI
ZWFkZXJzICovLApAQCAtMjg0NjksNiArMjg0OTAsNyBAQAogCQkJCUIyRkEzRDNFMEFCNzVBNkYw
MDBFNUFDNCAvKiBKU1NWR0FuaW1hdGVkSW50ZWdlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlC
MkZBM0Q0MDBBQjc1QTZGMDAwRTVBQzQgLyogSlNTVkdBbmltYXRlZExlbmd0aC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlCMkZBM0Q0MjBBQjc1QTZGMDAwRTVBQzQgLyogSlNTVkdBbmltYXRlZExl
bmd0aExpc3QuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNTFBOUQ5RjMxOTVCOTUwMzAwMUIyQjVD
IC8qIEhJREdhbWVwYWQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjJGQTNENDQwQUI3NUE2RjAw
MEU1QUM0IC8qIEpTU1ZHQW5pbWF0ZWROdW1iZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjJG
QTNENDYwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHQW5pbWF0ZWROdW1iZXJMaXN0LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUIyRkEzRDRBMEFCNzVBNkYwMDBFNUFDNCAvKiBKU1NWR0FuaW1hdGVk
UHJlc2VydmVBc3BlY3RSYXRpby5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI5NDY5LDYgKzI5NDkx
LDcgQEAKIAkJCQlCMjU1OTk4NDBEMDBEOEJBMDBCQjgyNUMgLyogU1ZHRkVJbWFnZS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlCMjIyNzlFRTBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHRkVJbWFnZUVs
ZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjIyMjc5RjEwRDAwQkYyMjAwNzFCNzgyIC8q
IFNWR0ZFTGlnaHRFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTUxQTlEOUY1MTk1Qjk1
MDMwMDFCMkI1QyAvKiBISURHYW1lcGFkTGlzdGVuZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QjIyMjc5RjMwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0ZFTWVyZ2VFbGVtZW50LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUIyMjI3OUY2MEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdGRU1lcmdlTm9kZUVs
ZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODQyMjQxOTMxMDdFNzhBNzAwNzY2QTg3IC8q
IFNWR0ZFTW9ycGhvbG9neUVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yOTg3MSw2ICsy
OTg5NCw3IEBACiAJCQkJN0FGOUIyMDIxOENGQjJERjAwQzY0QkVGIC8qIFZUVFJlZ2lvbi5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlFMTVBMzZEOTExMDQ1NzI3MDBCN0I2MzkgLyogWE1MTlNOYW1l
cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQUNFNTNFQTBBOEQxOEU3MDAyMjk0N0QgLyogWE1M
U2VyaWFsaXplci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1MUE5RDlFOTE5NUI5MzFGMDAxQjJC
NUMgLyogR2FtZXBhZE1hbmFnZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTkwNUFEQkYxMzAy
RjNDRTAwRjExNkRGIC8qIFhNTFRyZWVWaWV3ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFC
N0ZDNjgwQThCOTJFQzAwRDlEMzdCIC8qIFhQYXRoRXZhbHVhdG9yLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTk3OEQwN0NDMTQ1QTEwMkUwMDk2OTA4RCAvKiBYUGF0aEV4Y2VwdGlvbi5jcHAgaW4g
U291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9ISURH
YW1lcGFkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9ISURHYW1lcGFkLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTVhODI1Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0hJREdhbWVwYWQuY3BwCkBAIC0wLDAg
KzEsMTc1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkhJ
REdhbWVwYWQuaCIKKworI2lmIEVOQUJMRShHQU1FUEFEKQorCisjaW5jbHVkZSA8SU9LaXQvaGlk
L0lPSElERWxlbWVudC5oPgorI2luY2x1ZGUgPElPS2l0L2hpZC9JT0hJRFVzYWdlVGFibGVzLmg+
CisjaW5jbHVkZSA8SU9LaXQvaGlkL0lPSElEVmFsdWUuaD4KKyNpbmNsdWRlIDx3dGYvQ3VycmVu
dFRpbWUuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworSElER2FtZXBhZDo6SElE
R2FtZXBhZChJT0hJRERldmljZVJlZiBoaWREZXZpY2UpCisgICAgOiBtX2hpZERldmljZShoaWRE
ZXZpY2UpCit7CisgICAgbV9jb25uZWN0VGltZSA9IG1fbGFzdFVwZGF0ZVRpbWUgPSBtb25vdG9u
aWNhbGx5SW5jcmVhc2luZ1RpbWUoKTsKKworICAgIENGTnVtYmVyUmVmIGNmVmVuZG9ySUQgPSAo
Q0ZOdW1iZXJSZWYpSU9ISUREZXZpY2VHZXRQcm9wZXJ0eShoaWREZXZpY2UsIENGU1RSKGtJT0hJ
RFZlbmRvcklES2V5KSk7CisgICAgQ0ZOdW1iZXJSZWYgY2ZQcm9kdWN0SUQgPSAoQ0ZOdW1iZXJS
ZWYpSU9ISUREZXZpY2VHZXRQcm9wZXJ0eShoaWREZXZpY2UsIENGU1RSKGtJT0hJRFByb2R1Y3RJ
REtleSkpOworCisgICAgaW50IHZlbmRvcklELCBwcm9kdWN0SUQ7CisgICAgQ0ZOdW1iZXJHZXRW
YWx1ZShjZlZlbmRvcklELCBrQ0ZOdW1iZXJJbnRUeXBlLCAmdmVuZG9ySUQpOworICAgIENGTnVt
YmVyR2V0VmFsdWUoY2ZQcm9kdWN0SUQsIGtDRk51bWJlckludFR5cGUsICZwcm9kdWN0SUQpOwor
CisgICAgQ0ZTdHJpbmdSZWYgY2ZQcm9kdWN0TmFtZSA9IChDRlN0cmluZ1JlZilJT0hJRERldmlj
ZUdldFByb3BlcnR5KGhpZERldmljZSwgQ0ZTVFIoa0lPSElEUHJvZHVjdEtleSkpOworICAgIFN0
cmluZyBwcm9kdWN0TmFtZShjZlByb2R1Y3ROYW1lKTsKKworICAgIC8vIEN1cnJlbnRseSB0aGUg
c3BlYyBoYXMgbm8gZm9ybWF0dGluZyBmb3IgdGhlIGlkIHN0cmluZy4KKyAgICAvLyBUaGlzIHN0
cmluZyBmb3JtYXR0aW5nIG1hdGNoZXMgRmlyZWZveC4KKyAgICBtX2lkID0gU3RyaW5nOjpmb3Jt
YXQoIiV4LSV4LSVzIiwgdmVuZG9ySUQsIHByb2R1Y3RJRCwgcHJvZHVjdE5hbWUudXRmOCgpLmRh
dGEoKSk7CisKKyAgICBpbml0RWxlbWVudHMoKTsKK30KKwordm9pZCBISURHYW1lcGFkOjppbml0
RWxlbWVudHMoKQoreworICAgIFJldGFpblB0cjxDRkFycmF5UmVmPiBlbGVtZW50cyA9IGFkb3B0
Q0YoSU9ISUREZXZpY2VDb3B5TWF0Y2hpbmdFbGVtZW50cyhtX2hpZERldmljZS5nZXQoKSwgTlVM
TCwga0lPSElET3B0aW9uc1R5cGVOb25lKSk7CisgICAgaW5pdEVsZW1lbnRzRnJvbUFycmF5KGVs
ZW1lbnRzLmdldCgpKTsKKworICAgIC8vIEJ1dHRvbnMgYXJlIHNwZWNpZmllZCB0byBhcHBlYXIg
aGlnaGVzdCBwcmlvcml0eSBmaXJzdCBpbiB0aGUgYXJyYXkuCisgICAgc3RkOjpzb3J0KG1fYnV0
dG9ucy5iZWdpbigpLCBtX2J1dHRvbnMuZW5kKCksIFtdKGNvbnN0IHN0ZDo6dW5pcXVlX3B0cjxI
SURHYW1lcGFkQnV0dG9uPiYgYSwgY29uc3Qgc3RkOjp1bmlxdWVfcHRyPEhJREdhbWVwYWRCdXR0
b24+JiBiKSB7CisgICAgICAgIHJldHVybiBhLT5wcmlvcml0eSA8IGItPnByaW9yaXR5OworICAg
IH0pOworCisgICAgbV9heGlzVmFsdWVzLnJlc2l6ZShtX2F4ZXMuc2l6ZSgpKTsKKyAgICBtX2J1
dHRvblZhbHVlcy5yZXNpemUobV9idXR0b25zLnNpemUoKSk7Cit9CisKK3ZvaWQgSElER2FtZXBh
ZDo6aW5pdEVsZW1lbnRzRnJvbUFycmF5KENGQXJyYXlSZWYgZWxlbWVudHMpCit7CisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IENGQXJyYXlHZXRDb3VudChlbGVtZW50cyk7ICsraSkgewor
ICAgICAgICBJT0hJREVsZW1lbnRSZWYgZWxlbWVudCA9IChJT0hJREVsZW1lbnRSZWYpQ0ZBcnJh
eUdldFZhbHVlQXRJbmRleChlbGVtZW50cywgaSk7CisgICAgICAgIGlmIChDRkdldFR5cGVJRChl
bGVtZW50KSAhPSBJT0hJREVsZW1lbnRHZXRUeXBlSUQoKSkKKyAgICAgICAgICAgIGNvbnRpbnVl
OworCisgICAgICAgIC8vIEFzIGEgcGh5c2ljYWwgZWxlbWVudCBjYW4gYXBwZWFyIGluIHRoZSBk
ZXZpY2UgdHdpY2UgKGluIGRpZmZlcmVudCBjb2xsZWN0aW9ucykgYW5kIGNhbiBiZQorICAgICAg
ICAvLyByZXByZXNlbnRlZCBieSBkaWZmZXJlbnQgSU9ISURFbGVtZW50UmVmIG9iamVjdHMsIHdl
IGxvb2sgYXQgdGhlIElPSElERWxlbWVudENvb2tpZSB3aGljaAorICAgICAgICAvLyBpcyBtZWFu
dCB0byBiZSB1bmlxdWUgZm9yIGVhY2ggcGh5c2ljYWwgZWxlbWVudC4KKyAgICAgICAgSU9ISURF
bGVtZW50Q29va2llIGNvb2tpZSA9IElPSElERWxlbWVudEdldENvb2tpZShlbGVtZW50KTsKKyAg
ICAgICAgaWYgKG1fZWxlbWVudE1hcC5jb250YWlucyhjb29raWUpKQorICAgICAgICAgICAgY29u
dGludWU7CisKKyAgICAgICAgSU9ISURFbGVtZW50VHlwZSB0eXBlID0gSU9ISURFbGVtZW50R2V0
VHlwZShlbGVtZW50KTsKKworICAgICAgICBpZiAoKHR5cGUgPT0ga0lPSElERWxlbWVudFR5cGVJ
bnB1dF9NaXNjIHx8IHR5cGUgPT0ga0lPSElERWxlbWVudFR5cGVJbnB1dF9CdXR0b24pICYmIG1h
eWJlQWRkQnV0dG9uKGVsZW1lbnQpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAg
aWYgKCh0eXBlID09IGtJT0hJREVsZW1lbnRUeXBlSW5wdXRfTWlzYyB8fCB0eXBlID09IGtJT0hJ
REVsZW1lbnRUeXBlSW5wdXRfQXhpcykgJiYgbWF5YmVBZGRBeGlzKGVsZW1lbnQpKQorICAgICAg
ICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYgKHR5cGUgPT0ga0lPSElERWxlbWVudFR5cGVD
b2xsZWN0aW9uKQorICAgICAgICAgICAgaW5pdEVsZW1lbnRzRnJvbUFycmF5KElPSElERWxlbWVu
dEdldENoaWxkcmVuKGVsZW1lbnQpKTsKKyAgICB9Cit9CisKK2Jvb2wgSElER2FtZXBhZDo6bWF5
YmVBZGRCdXR0b24oSU9ISURFbGVtZW50UmVmIGVsZW1lbnQpCit7CisgICAgdWludDMyX3QgdXNh
Z2VQYWdlID0gSU9ISURFbGVtZW50R2V0VXNhZ2VQYWdlKGVsZW1lbnQpOworICAgIGlmICh1c2Fn
ZVBhZ2UgIT0ga0hJRFBhZ2VfQnV0dG9uKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICB1
aW50MzJfdCB1c2FnZSA9IElPSElERWxlbWVudEdldFVzYWdlKGVsZW1lbnQpOworICAgIGlmICgh
dXNhZ2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIENGSW5kZXggbWluID0gSU9ISURF
bGVtZW50R2V0TG9naWNhbE1pbihlbGVtZW50KTsKKyAgICBDRkluZGV4IG1heCA9IElPSElERWxl
bWVudEdldExvZ2ljYWxNYXgoZWxlbWVudCk7CisKKyAgICBtX2J1dHRvbnMuYXBwZW5kKHN0ZDo6
bWFrZV91bmlxdWU8SElER2FtZXBhZEJ1dHRvbj4odXNhZ2UsIG1pbiwgbWF4KSk7CisKKyAgICBJ
T0hJREVsZW1lbnRDb29raWUgY29va2llID0gSU9ISURFbGVtZW50R2V0Q29va2llKGVsZW1lbnQp
OworICAgIG1fZWxlbWVudE1hcC5zZXQoY29va2llLCBtX2J1dHRvbnMubGFzdCgpLmdldCgpKTsK
KworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEhJREdhbWVwYWQ6Om1heWJlQWRkQXhpcyhJ
T0hJREVsZW1lbnRSZWYgZWxlbWVudCkKK3sKKyAgICB1aW50MzJfdCB1c2FnZVBhZ2UgPSBJT0hJ
REVsZW1lbnRHZXRVc2FnZVBhZ2UoZWxlbWVudCk7CisgICAgaWYgKHVzYWdlUGFnZSAhPSBrSElE
UGFnZV9HZW5lcmljRGVza3RvcCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgdWludDMy
X3QgdXNhZ2UgPSBJT0hJREVsZW1lbnRHZXRVc2FnZShlbGVtZW50KTsKKyAgICAvLyBUaGlzIHJh
bmdlIGNvdmVycyB0aGUgc3RhbmRhcmQgYXhpcyB1c2FnZXMuCisgICAgaWYgKHVzYWdlIDwga0hJ
RFVzYWdlX0dEX1ggfHwgdXNhZ2UgPiBrSElEVXNhZ2VfR0RfUnopCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIENGSW5kZXggbWluID0gSU9ISURFbGVtZW50R2V0UGh5c2ljYWxNaW4oZWxl
bWVudCk7CisgICAgQ0ZJbmRleCBtYXggPSBJT0hJREVsZW1lbnRHZXRQaHlzaWNhbE1heChlbGVt
ZW50KTsKKworICAgIG1fYXhlcy5hcHBlbmQoc3RkOjptYWtlX3VuaXF1ZTxISURHYW1lcGFkQXhp
cz4obWluLCBtYXgpKTsKKworICAgIElPSElERWxlbWVudENvb2tpZSBjb29raWUgPSBJT0hJREVs
ZW1lbnRHZXRDb29raWUoZWxlbWVudCk7CisgICAgbV9lbGVtZW50TWFwLnNldChjb29raWUsIG1f
YXhlcy5sYXN0KCkuZ2V0KCkpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgSElER2Ft
ZXBhZDo6dmFsdWVDaGFuZ2VkKElPSElEVmFsdWVSZWYgdmFsdWUpCit7CisgICAgSU9ISURFbGVt
ZW50Q29va2llIGNvb2tpZSA9IElPSElERWxlbWVudEdldENvb2tpZShJT0hJRFZhbHVlR2V0RWxl
bWVudCh2YWx1ZSkpOworICAgIEhJREdhbWVwYWRFbGVtZW50KiBlbGVtZW50ID0gbV9lbGVtZW50
TWFwLmdldChjb29raWUpOworCisgICAgLy8gVGhpcyBtaWdodCBiZSBhbiBlbGVtZW50IHdlIGRv
bid0IGN1cnJlbnRseSBoYW5kbGUgYXMgaW5wdXQgc28gd2UgY2FuIHNraXAgaXQuCisgICAgaWYg
KCFlbGVtZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBlbGVtZW50LT5yYXdWYWx1ZSA9IElP
SElEVmFsdWVHZXRTY2FsZWRWYWx1ZSh2YWx1ZSwga0lPSElEVmFsdWVTY2FsZVR5cGVQaHlzaWNh
bCk7CisKKyAgICBpZiAoZWxlbWVudC0+aXNCdXR0b24oKSkgeworICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbV9idXR0b25zLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBpZiAo
bV9idXR0b25zW2ldLmdldCgpID09IGVsZW1lbnQpCisgICAgICAgICAgICAgICAgbV9idXR0b25W
YWx1ZXNbaV0gPSBlbGVtZW50LT5ub3JtYWxpemVkVmFsdWUoKTsKKyAgICAgICAgfQorICAgIH0g
ZWxzZSBpZiAoZWxlbWVudC0+aXNBeGlzKCkpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IG1fYXhlcy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgaWYgKG1fYXhlc1tpXS5n
ZXQoKSA9PSBlbGVtZW50KQorICAgICAgICAgICAgICAgIG1fYXhpc1ZhbHVlc1tpXSA9IGVsZW1l
bnQtPm5vcm1hbGl6ZWRWYWx1ZSgpOworICAgICAgICB9CisgICAgfSBlbHNlCisgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworCisgICAgbV9sYXN0VXBkYXRlVGltZSA9IG1vbm90b25pY2Fs
bHlJbmNyZWFzaW5nVGltZSgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZiAvLyBFTkFCTEUoR0FNRVBBRCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21hYy9ISURHYW1lcGFkLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvSElER2FtZXBh
ZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlNTFiOGUKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvSElER2FtZXBhZC5oCkBAIC0w
LDAgKzEsMTI0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBISURHYW1lcGFkX2gKKyNkZWZpbmUg
SElER2FtZXBhZF9oCisKKyNpZiBFTkFCTEUoR0FNRVBBRCkKKworI2luY2x1ZGUgIlBsYXRmb3Jt
R2FtZXBhZC5oIgorI2luY2x1ZGUgPElPS2l0L2hpZC9JT0hJRERldmljZS5oPgorI2luY2x1ZGUg
PHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK3N0cnVjdCBISURHYW1lcGFkRWxlbWVudCB7CisgICAgSElER2FtZXBhZEVs
ZW1lbnQoZG91YmxlIHRoZU1pbiwgZG91YmxlIHRoZU1heCkKKyAgICAgICAgOiBtaW4odGhlTWlu
KQorICAgICAgICAsIG1heCh0aGVNYXgpCisgICAgICAgICwgcmF3VmFsdWUodGhlTWluKQorICAg
IHsKKyAgICB9CisgICAgCisgICAgdmlydHVhbCB+SElER2FtZXBhZEVsZW1lbnQoKQorICAgIHsK
KyAgICB9CisKKyAgICBkb3VibGUgbWluOworICAgIGRvdWJsZSBtYXg7CisgICAgZG91YmxlIHJh
d1ZhbHVlOworCisgICAgdmlydHVhbCBib29sIGlzQnV0dG9uKCkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNBeGlzKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0K
KworICAgIHZpcnR1YWwgZG91YmxlIG5vcm1hbGl6ZWRWYWx1ZSgpID0gMDsKK307CisKK3N0cnVj
dCBISURHYW1lcGFkQnV0dG9uIDogcHVibGljIEhJREdhbWVwYWRFbGVtZW50IHsKKyAgICBISURH
YW1lcGFkQnV0dG9uKHVpbnQzMl90IHRoZVByaW9yaXR5LCBkb3VibGUgbWluLCBkb3VibGUgbWF4
KQorICAgICAgICA6IEhJREdhbWVwYWRFbGVtZW50KG1pbiwgbWF4KQorICAgICAgICAsIHByaW9y
aXR5KHRoZVByaW9yaXR5KQorICAgIHsKKyAgICB9CisKKyAgICB1aW50MzJfdCBwcmlvcml0eTsK
KworICAgIHZpcnR1YWwgYm9vbCBpc0J1dHRvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRy
dWU7IH0KKworICAgIC8vIEJ1dHRvbnMgbm9ybWFsaXplIHRvIHRoZSByYW5nZSAoMC4wKSAtICgx
LjApCisgICAgdmlydHVhbCBkb3VibGUgbm9ybWFsaXplZFZhbHVlKCkgb3ZlcnJpZGUKKyAgICB7
CisgICAgICAgIHJldHVybiAocmF3VmFsdWUgLSBtaW4pIC8gKG1heCAtIG1pbik7CisgICAgfQor
fTsKKworc3RydWN0IEhJREdhbWVwYWRBeGlzIDogcHVibGljIEhJREdhbWVwYWRFbGVtZW50IHsK
KyAgICBISURHYW1lcGFkQXhpcyhkb3VibGUgbWluLCBkb3VibGUgbWF4KQorICAgICAgICA6IEhJ
REdhbWVwYWRFbGVtZW50KG1pbiwgbWF4KQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIGJv
b2wgaXNBeGlzKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgLy8gQXhl
cyBub3JtYWxpemUgdG8gdGhlIHJhbmdlICgtMS4wKSAtICgxLjApCisgICAgdmlydHVhbCBkb3Vi
bGUgbm9ybWFsaXplZFZhbHVlKCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIHJldHVybiAoKChy
YXdWYWx1ZSAtIG1pbikgLyAobWF4IC0gbWluKSkgKiAyKSAtIDE7CisgICAgfQorfTsKKworY2xh
c3MgSElER2FtZXBhZCA6IHB1YmxpYyBQbGF0Zm9ybUdhbWVwYWQgeworcHVibGljOgorICAgIEhJ
REdhbWVwYWQoSU9ISUREZXZpY2VSZWYpOworCisgICAgSU9ISUREZXZpY2VSZWYgaGlkRGV2aWNl
KCkgY29uc3QgeyByZXR1cm4gbV9oaWREZXZpY2UuZ2V0KCk7IH0KKworICAgIHZvaWQgdmFsdWVD
aGFuZ2VkKElPSElEVmFsdWVSZWYpOworCisgICAgdmlydHVhbCBjb25zdCBWZWN0b3I8ZG91Ymxl
PiYgYXhpc1ZhbHVlcygpIGNvbnN0IG92ZXJyaWRlIGZpbmFsIHsgcmV0dXJuIG1fYXhpc1ZhbHVl
czsgfQorICAgIHZpcnR1YWwgY29uc3QgVmVjdG9yPGRvdWJsZT4mIGJ1dHRvblZhbHVlcygpIGNv
bnN0IG92ZXJyaWRlIGZpbmFsIHsgcmV0dXJuIG1fYnV0dG9uVmFsdWVzOyB9CisKK3ByaXZhdGU6
CisgICAgdm9pZCBpbml0RWxlbWVudHMoKTsKKyAgICB2b2lkIGluaXRFbGVtZW50c0Zyb21BcnJh
eShDRkFycmF5UmVmKTsKKworICAgIGJvb2wgbWF5YmVBZGRCdXR0b24oSU9ISURFbGVtZW50UmVm
KTsKKyAgICBib29sIG1heWJlQWRkQXhpcyhJT0hJREVsZW1lbnRSZWYpOworCisgICAgUmV0YWlu
UHRyPElPSElERGV2aWNlUmVmPiBtX2hpZERldmljZTsKKworICAgIEhhc2hNYXA8SU9ISURFbGVt
ZW50Q29va2llLCBISURHYW1lcGFkRWxlbWVudCo+IG1fZWxlbWVudE1hcDsKKworICAgIFZlY3Rv
cjxzdGQ6OnVuaXF1ZV9wdHI8SElER2FtZXBhZEJ1dHRvbj4+IG1fYnV0dG9uczsKKyAgICBWZWN0
b3I8c3RkOjp1bmlxdWVfcHRyPEhJREdhbWVwYWRBeGlzPj4gbV9heGVzOworICAgIFZlY3Rvcjxk
b3VibGU+IG1fYnV0dG9uVmFsdWVzOworICAgIFZlY3Rvcjxkb3VibGU+IG1fYXhpc1ZhbHVlczsK
K307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShHQU1FUEFE
KQorI2VuZGlmIC8vIEhJREdhbWVwYWRMaXN0ZW5lcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tYWMvSElER2FtZXBhZExpc3RlbmVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21hYy9ISURHYW1lcGFkTGlzdGVuZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjgwZGM1YzUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tYWMvSElER2FtZXBhZExpc3RlbmVyLmNwcApAQCAtMCwwICsxLDE3NCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJISURHYW1lcGFkTGlz
dGVuZXIuaCIKKworI2lmIEVOQUJMRShHQU1FUEFEKQorCisjaW5jbHVkZSAiUGxhdGZvcm1HYW1l
cGFkLmgiCisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitzdGF0aWMgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gZGV2aWNlTWF0Y2hpbmdEaWN0
aW9uYXJ5KHVpbnQzMl90IHVzYWdlUGFnZSwgdWludDMyX3QgdXNhZ2UpCit7CisgICAgQVNTRVJU
KHVzYWdlUGFnZSk7CisgICAgQVNTRVJUKHVzYWdlKTsKKworICAgIFJldGFpblB0cjxDRk51bWJl
clJlZj4gcGFnZU51bWJlciA9IGFkb3B0Q0YoQ0ZOdW1iZXJDcmVhdGUoa0NGQWxsb2NhdG9yRGVm
YXVsdCwga0NGTnVtYmVySW50VHlwZSwgJnVzYWdlUGFnZSkpOworICAgIFJldGFpblB0cjxDRk51
bWJlclJlZj4gdXNhZ2VOdW1iZXIgPSBhZG9wdENGKENGTnVtYmVyQ3JlYXRlKGtDRkFsbG9jYXRv
ckRlZmF1bHQsIGtDRk51bWJlckludFR5cGUsICZ1c2FnZSkpOworCisgICAgQ0ZTdHJpbmdSZWYg
a2V5c1tdID0geyBDRlNUUihrSU9ISUREZXZpY2VVc2FnZVBhZ2VLZXkpLCBDRlNUUihrSU9ISURE
ZXZpY2VVc2FnZUtleSkgfTsKKyAgICBDRk51bWJlclJlZiB2YWx1ZXNbXSA9IHsgcGFnZU51bWJl
ci5nZXQoKSwgdXNhZ2VOdW1iZXIuZ2V0KCkgfTsKKworICAgIHJldHVybiBhZG9wdENGKENGRGlj
dGlvbmFyeUNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAoY29uc3Qgdm9pZCoqKWtleXMsIChj
b25zdCB2b2lkKiopdmFsdWVzLCAyLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZr
Q0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7Cit9CisKK3N0YXRpYyB2b2lkIGRldmlj
ZUFkZGVkQ2FsbGJhY2sodm9pZCogY29udGV4dCwgSU9SZXR1cm4sIHZvaWQqLCBJT0hJRERldmlj
ZVJlZiBkZXZpY2UpCit7CisgICAgSElER2FtZXBhZExpc3RlbmVyKiBsaXN0ZW5lciA9IHN0YXRp
Y19jYXN0PEhJREdhbWVwYWRMaXN0ZW5lcio+KGNvbnRleHQpOworICAgIGxpc3RlbmVyLT5kZXZp
Y2VBZGRlZChkZXZpY2UpOworfQorCitzdGF0aWMgdm9pZCBkZXZpY2VSZW1vdmVkQ2FsbGJhY2so
dm9pZCogY29udGV4dCwgSU9SZXR1cm4sIHZvaWQqLCBJT0hJRERldmljZVJlZiBkZXZpY2UpCit7
CisgICAgSElER2FtZXBhZExpc3RlbmVyKiBsaXN0ZW5lciA9IHN0YXRpY19jYXN0PEhJREdhbWVw
YWRMaXN0ZW5lcio+KGNvbnRleHQpOworICAgIGxpc3RlbmVyLT5kZXZpY2VSZW1vdmVkKGRldmlj
ZSk7Cit9CisKK3N0YXRpYyB2b2lkIGRldmljZVZhbHVlc0NoYW5nZWRDYWxsYmFjayh2b2lkKiBj
b250ZXh0LCBJT1JldHVybiByZXN1bHQsIHZvaWQqLCBJT0hJRFZhbHVlUmVmIHZhbHVlKQorewor
ICAgIC8vIEEgbm9uLXplcm8gcmVzdWx0IHZhbHVlIGluZGljYXRlcyBhbiBlcnJvciB0aGF0IHdl
IGNhbiBkbyBub3RoaW5nIGFib3V0IGZvciBpbnB1dCB2YWx1ZXMuCisgICAgaWYgKHJlc3VsdCkK
KyAgICAgICAgcmV0dXJuOworCisgICAgSElER2FtZXBhZExpc3RlbmVyKiBsaXN0ZW5lciA9IHN0
YXRpY19jYXN0PEhJREdhbWVwYWRMaXN0ZW5lcio+KGNvbnRleHQpOworICAgIGxpc3RlbmVyLT52
YWx1ZXNDaGFuZ2VkKHZhbHVlKTsKK30KKworSElER2FtZXBhZExpc3RlbmVyJiBISURHYW1lcGFk
TGlzdGVuZXI6OnNoYXJlZCgpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhJREdhbWVw
YWRMaXN0ZW5lcj4gc2hhcmVkTGlzdGVuZXI7CisgICAgcmV0dXJuIHNoYXJlZExpc3RlbmVyOwor
fQorCitISURHYW1lcGFkTGlzdGVuZXI6OkhJREdhbWVwYWRMaXN0ZW5lcigpCisgICAgOiBtX2Ns
aWVudChudWxscHRyKQorICAgICwgbV9zaG91bGREaXNwYXRjaENhbGxiYWNrcyhmYWxzZSkKK3sK
KyAgICBtX21hbmFnZXIgPSBhZG9wdENGKElPSElETWFuYWdlckNyZWF0ZShrQ0ZBbGxvY2F0b3JE
ZWZhdWx0LCBrSU9ISURPcHRpb25zVHlwZU5vbmUpKTsKKworICAgIFJldGFpblB0cjxDRkRpY3Rp
b25hcnlSZWY+IGpveXN0aWNrRGljdGlvbmFyeSA9IGRldmljZU1hdGNoaW5nRGljdGlvbmFyeShr
SElEUGFnZV9HZW5lcmljRGVza3RvcCwga0hJRFVzYWdlX0dEX0pveXN0aWNrKTsKKyAgICBSZXRh
aW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBnYW1lcGFkRGljdGlvbmFyeSA9IGRldmljZU1hdGNoaW5n
RGljdGlvbmFyeShrSElEUGFnZV9HZW5lcmljRGVza3RvcCwga0hJRFVzYWdlX0dEX0dhbWVQYWQp
OworCisgICAgQ0ZEaWN0aW9uYXJ5UmVmIGRldmljZXNbXSA9IHsgam95c3RpY2tEaWN0aW9uYXJ5
LmdldCgpLCBnYW1lcGFkRGljdGlvbmFyeS5nZXQoKSB9OworCisgICAgUmV0YWluUHRyPENGQXJy
YXlSZWY+IG1hdGNoaW5nQXJyYXkgPSBhZG9wdENGKENGQXJyYXlDcmVhdGUoa0NGQWxsb2NhdG9y
RGVmYXVsdCwgKGNvbnN0IHZvaWQqKilkZXZpY2VzLCAyLCAma0NGVHlwZUFycmF5Q2FsbEJhY2tz
KSk7CisKKyAgICBJT0hJRE1hbmFnZXJTZXREZXZpY2VNYXRjaGluZ011bHRpcGxlKG1fbWFuYWdl
ci5nZXQoKSwgbWF0Y2hpbmdBcnJheS5nZXQoKSk7CisgICAgSU9ISURNYW5hZ2VyUmVnaXN0ZXJE
ZXZpY2VNYXRjaGluZ0NhbGxiYWNrKG1fbWFuYWdlci5nZXQoKSwgZGV2aWNlQWRkZWRDYWxsYmFj
aywgdGhpcyk7CisgICAgSU9ISURNYW5hZ2VyUmVnaXN0ZXJEZXZpY2VSZW1vdmFsQ2FsbGJhY2so
bV9tYW5hZ2VyLmdldCgpLCBkZXZpY2VSZW1vdmVkQ2FsbGJhY2ssIHRoaXMpOworICAgIElPSElE
TWFuYWdlclNjaGVkdWxlV2l0aFJ1bkxvb3AobV9tYW5hZ2VyLmdldCgpLCBDRlJ1bkxvb3BHZXRD
dXJyZW50KCksIGtDRlJ1bkxvb3BEZWZhdWx0TW9kZSk7CisgICAgSU9ISURNYW5hZ2VyT3Blbiht
X21hbmFnZXIuZ2V0KCksIGtJT0hJRE9wdGlvbnNUeXBlTm9uZSk7CisKKyAgICBJT0hJRE1hbmFn
ZXJSZWdpc3RlcklucHV0VmFsdWVDYWxsYmFjayhtX21hbmFnZXIuZ2V0KCksIGRldmljZVZhbHVl
c0NoYW5nZWRDYWxsYmFjaywgdGhpcyk7CisKKyAgICAvLyBXZSdsbCBpbW1lZGlhdGVseSBnZXQg
YSBzZXJpZXMgb2YgY29ubmVjdGlvbiBhbmQgdmFsdWUgY2FsbGJhY2tzIGZvciBhbHJlYWR5LWNv
bm5lY3RlZCBnYW1lcGFkcworICAgIC8vIGJ1dCB3ZSBkb24ndCB3YW50IHRvIG5vdGlmeSBXZWJD
b3JlIG9mIHRob3NlIGV2ZW50cy4KKyAgICAvLyBUaGlzIGNhbGxPbk1haW5UaHJlYWQgY2FsbCBy
ZS1lbmFibGVzIHRob3NlIGNhbGxiYWNrcyBhZnRlciB0aGUgcnVubG9vcCBlbXB0aWVzIG91dC4K
KyAgICBjYWxsT25NYWluVGhyZWFkKFtdKCkgeworICAgICAgICBISURHYW1lcGFkTGlzdGVuZXI6
OnNoYXJlZCgpLnNldFNob3VsZERpc3BhdGNoQ2FsbGJhY2tzKHRydWUpOworICAgIH0pOworfQor
Cit1bnNpZ25lZCBISURHYW1lcGFkTGlzdGVuZXI6OmluZGV4Rm9yTmV3bHlDb25uZWN0ZWREZXZp
Y2UoKQoreworICAgIHVuc2lnbmVkIGluZGV4ID0gMDsKKyAgICB3aGlsZSAoaW5kZXggPCBtX2dh
bWVwYWRWZWN0b3Iuc2l6ZSgpICYmIG1fZ2FtZXBhZFZlY3RvcltpbmRleF0pCisgICAgICAgICsr
aW5kZXg7CisKKyAgICByZXR1cm4gaW5kZXg7Cit9CisKK3ZvaWQgSElER2FtZXBhZExpc3RlbmVy
OjpkZXZpY2VBZGRlZChJT0hJRERldmljZVJlZiBkZXZpY2UpCit7CisgICAgQVNTRVJUKCFtX2dh
bWVwYWRNYXAuZ2V0KGRldmljZSkpOworCisgICAgc3RkOjp1bmlxdWVfcHRyPEhJREdhbWVwYWQ+
IGdhbWVwYWQgPSBzdGQ6Om1ha2VfdW5pcXVlPEhJREdhbWVwYWQ+KGRldmljZSk7CisgICAgdW5z
aWduZWQgaW5kZXggPSBpbmRleEZvck5ld2x5Q29ubmVjdGVkRGV2aWNlKCk7CisKKyAgICBpZiAo
bV9nYW1lcGFkVmVjdG9yLnNpemUoKSA8PSBpbmRleCkKKyAgICAgICAgbV9nYW1lcGFkVmVjdG9y
LnJlc2l6ZShpbmRleCArIDEpOworCisgICAgbV9nYW1lcGFkVmVjdG9yW2luZGV4XSA9IGdhbWVw
YWQuZ2V0KCk7CisgICAgbV9nYW1lcGFkTWFwLnNldChkZXZpY2UsIHN0ZDo6bW92ZShnYW1lcGFk
KSk7CisKKyAgICBpZiAobV9jbGllbnQgJiYgbV9zaG91bGREaXNwYXRjaENhbGxiYWNrcykKKyAg
ICAgICAgbV9jbGllbnQtPmdhbWVwYWRDb25uZWN0ZWQoaW5kZXgpOworfQorCit2b2lkIEhJREdh
bWVwYWRMaXN0ZW5lcjo6ZGV2aWNlUmVtb3ZlZChJT0hJRERldmljZVJlZiBkZXZpY2UpCit7Cisg
ICAgc3RkOjpwYWlyPHN0ZDo6dW5pcXVlX3B0cjxISURHYW1lcGFkPiwgdW5zaWduZWQ+IHJlbW92
ZWRHYW1lcGFkID0gcmVtb3ZlR2FtZXBhZEZvckRldmljZShkZXZpY2UpOworICAgIEFTU0VSVChy
ZW1vdmVkR2FtZXBhZC5maXJzdCk7CisKKyAgICBpZiAobV9jbGllbnQgJiYgbV9zaG91bGREaXNw
YXRjaENhbGxiYWNrcykKKyAgICAgICAgbV9jbGllbnQtPmdhbWVwYWREaXNjb25uZWN0ZWQocmVt
b3ZlZEdhbWVwYWQuc2Vjb25kKTsKK30KKwordm9pZCBISURHYW1lcGFkTGlzdGVuZXI6OnZhbHVl
c0NoYW5nZWQoSU9ISURWYWx1ZVJlZiB2YWx1ZSkKK3sKKyAgICBJT0hJRERldmljZVJlZiBkZXZp
Y2UgPSBJT0hJREVsZW1lbnRHZXREZXZpY2UoSU9ISURWYWx1ZUdldEVsZW1lbnQodmFsdWUpKTsK
KworICAgIEhJREdhbWVwYWQqIGdhbWVwYWQgPSBtX2dhbWVwYWRNYXAuZ2V0KGRldmljZSk7CisK
KyAgICAvLyBXaGVuIHN0YXJ0aW5nIG1vbml0b3Jpbmcgd2UgbWlnaHQgZ2V0IGEgdmFsdWUgY2hh
bmdlZCBjYWxsYmFjayBiZWZvcmUgd2UgZXZlbiBrbm93IHRoZSBkZXZpY2UgaXMgY29ubmVjdGVk
LgorICAgIGlmICghZ2FtZXBhZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgZ2FtZXBhZC0+dmFs
dWVDaGFuZ2VkKHZhbHVlKTsKK30KKworc3RkOjpwYWlyPHN0ZDo6dW5pcXVlX3B0cjxISURHYW1l
cGFkPiwgdW5zaWduZWQ+ICBISURHYW1lcGFkTGlzdGVuZXI6OnJlbW92ZUdhbWVwYWRGb3JEZXZp
Y2UoSU9ISUREZXZpY2VSZWYgZGV2aWNlKQoreworICAgIHN0ZDo6cGFpcjxzdGQ6OnVuaXF1ZV9w
dHI8SElER2FtZXBhZD4sIHVuc2lnbmVkPiByZXN1bHQ7CisgICAgcmVzdWx0LmZpcnN0ID0gbV9n
YW1lcGFkTWFwLnRha2UoZGV2aWNlKTsKKyAgICBBU1NFUlQocmVzdWx0LmZpcnN0KTsKKworICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2dhbWVwYWRWZWN0b3Iuc2l6ZSgpOyArK2kpIHsK
KyAgICAgICAgaWYgKG1fZ2FtZXBhZFZlY3RvcltpXSA9PSByZXN1bHQuZmlyc3QuZ2V0KCkpIHsK
KyAgICAgICAgICAgIHJlc3VsdC5zZWNvbmQgPSBpOworICAgICAgICAgICAgbV9nYW1lcGFkVmVj
dG9yW2ldID0gbnVsbHB0cjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQor
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYgLy8gRU5BQkxFKEdBTUVQQUQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tYWMvSElER2FtZXBhZExpc3RlbmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMv
SElER2FtZXBhZExpc3RlbmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
ZWI0YTJlMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9I
SURHYW1lcGFkTGlzdGVuZXIuaApAQCAtMCwwICsxLDgzIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBISURHYW1lcGFkTGlzdGVuZXJfaAorI2RlZmluZSBISURHYW1lcGFkTGlzdGVuZXJfaAorCisj
aWYgRU5BQkxFKEdBTUVQQUQpCisKKyNpbmNsdWRlICJISURHYW1lcGFkLmgiCisjaW5jbHVkZSA8
SU9LaXQvaGlkL0lPSElETWFuYWdlci5oPgorI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgorI2luY2x1
ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5j
bHVkZSA8d3RmL1JldGFpblB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEhJ
REdhbWVwYWRMaXN0ZW5lckNsaWVudCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+SElER2FtZXBh
ZExpc3RlbmVyQ2xpZW50KCkgeyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgZ2FtZXBhZENvbm5lY3Rl
ZCh1bnNpZ25lZCBpbmRleCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBnYW1lcGFkRGlzY29ubmVj
dGVkKHVuc2lnbmVkIGluZGV4KSA9IDA7Cit9OworCitjbGFzcyBISURHYW1lcGFkTGlzdGVuZXIg
eworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEhJREdhbWVwYWRMaXN0ZW5lcik7CisgICAgZnJp
ZW5kIGNsYXNzIE5ldmVyRGVzdHJveWVkPEhJREdhbWVwYWRMaXN0ZW5lcj47CitwdWJsaWM6Cisg
ICAgc3RhdGljIEhJREdhbWVwYWRMaXN0ZW5lciYgc2hhcmVkKCk7CisKKyAgICB2b2lkIHNldENs
aWVudChISURHYW1lcGFkTGlzdGVuZXJDbGllbnQqIGNsaWVudCkgeyBtX2NsaWVudCA9IGNsaWVu
dDsgfQorCisgICAgdm9pZCBkZXZpY2VBZGRlZChJT0hJRERldmljZVJlZik7CisgICAgdm9pZCBk
ZXZpY2VSZW1vdmVkKElPSElERGV2aWNlUmVmKTsKKyAgICB2b2lkIHZhbHVlc0NoYW5nZWQoSU9I
SURWYWx1ZVJlZik7CisKKyAgICBjb25zdCBWZWN0b3I8UGxhdGZvcm1HYW1lcGFkKj4mIHBsYXRm
b3JtR2FtZXBhZHMoKSBjb25zdCB7IHJldHVybiBtX2dhbWVwYWRWZWN0b3I7IH0KKworICAgIHZv
aWQgc2V0U2hvdWxkRGlzcGF0Y2hDYWxsYmFja3MoYm9vbCBzaG91bGREaXNwYXRjaENhbGxiYWNr
cykgeyBtX3Nob3VsZERpc3BhdGNoQ2FsbGJhY2tzID0gc2hvdWxkRGlzcGF0Y2hDYWxsYmFja3M7
IH0KKworcHJpdmF0ZToKKyAgICBISURHYW1lcGFkTGlzdGVuZXIoKTsKKworICAgIHN0ZDo6cGFp
cjxzdGQ6OnVuaXF1ZV9wdHI8SElER2FtZXBhZD4sIHVuc2lnbmVkPiByZW1vdmVHYW1lcGFkRm9y
RGV2aWNlKElPSElERGV2aWNlUmVmKTsKKworICAgIHVuc2lnbmVkIGluZGV4Rm9yTmV3bHlDb25u
ZWN0ZWREZXZpY2UoKTsKKworICAgIFZlY3RvcjxQbGF0Zm9ybUdhbWVwYWQqPiBtX2dhbWVwYWRW
ZWN0b3I7CisgICAgSGFzaE1hcDxJT0hJRERldmljZVJlZiwgc3RkOjp1bmlxdWVfcHRyPEhJREdh
bWVwYWQ+PiBtX2dhbWVwYWRNYXA7CisKKyAgICBSZXRhaW5QdHI8SU9ISURNYW5hZ2VyUmVmPiBt
X21hbmFnZXI7CisKKyAgICBISURHYW1lcGFkTGlzdGVuZXJDbGllbnQqIG1fY2xpZW50OworICAg
IGJvb2wgbV9zaG91bGREaXNwYXRjaENhbGxiYWNrczsKK307CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShHQU1FUEFEKQorI2VuZGlmIC8vIEhJREdhbWVwYWRM
aXN0ZW5lcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9X
ZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDhlM2Q3OTEuLmEzY2RmZDggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMTIgQEAKKzIwMTQtMDYtMjUgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgor
CisgICAgICAgIEFkZCBISUQtYmFzZWQgZ2FtZXBhZCBpbXBsZW1lbnRhdGlvbiBmb3IgTWFjCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzQzMjQKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYktpdC54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorCiAyMDE0LTA2LTIzICBSeXVhbiBDaG9pICA8cnl1
YW4uY2hvaUBzYW1zdW5nLmNvbT4KIAogICAgICAgICBbRUZMXSBSZW1vdmUgdGhlIFdlYktpdDEg
RUZMIGNvZGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCmluZGV4IDFmZGU3YWMuLmI1N2YwYjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2Vi
S2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYktpdC9XZWJLaXQu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTEzLDYgKzExMyw4IEBACiAJCTUxNThGNkVG
MTA2RDg2MkEwMEFGNDU3QyAvKiBXZWJIaXN0b3J5RGVsZWdhdGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNThGNkVFMTA2RDg2MkEwMEFGNDU3QyAv
KiBXZWJIaXN0b3J5RGVsZWdhdGUuaCAqLzsgfTsKIAkJNTE4NUY2MjYxMDcxMkI4MDAwN0FBMzkz
IC8qIFdlYk5hdmlnYXRpb25EYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MTg1RjYyNTEwNzEyQjgwMDA3QUEzOTMgLyogV2ViTmF2aWdhdGlvbkRh
dGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1
MTg1RjYyODEwNzEyQjk3MDA3QUEzOTMgLyogV2ViTmF2aWdhdGlvbkRhdGEubW0gaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTg1RjYyNzEwNzEyQjk3MDA3
QUEzOTMgLyogV2ViTmF2aWdhdGlvbkRhdGEubW0gKi87IH07CisJCTUxQTlEOUVEMTk1Qjk0OUYw
MDFCMkI1QyAvKiBXZWJISURHYW1lcGFkQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFBOUQ5RUIxOTVCOTQ5RjAwMUIyQjVDIC8qIFdl
YkhJREdhbWVwYWRDb250cm9sbGVyLmggKi87IH07CisJCTUxQTlEOUVFMTk1Qjk0OUYwMDFCMkI1
QyAvKiBXZWJISURHYW1lcGFkQ29udHJvbGxlci5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxQTlEOUVDMTk1Qjk0OUYwMDFCMkI1QyAvKiBXZWJISURH
YW1lcGFkQ29udHJvbGxlci5tbSAqLzsgfTsKIAkJNTFBRURFRjEwQ0VDRjQ1NzAwODU0MzI4IC8q
IFdlYkRhdGFiYXNlTWFuYWdlckludGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1MUFFREVGMDBDRUNGNDU3MDA4NTQzMjggLyogV2ViRGF0YWJh
c2VNYW5hZ2VySW50ZXJuYWwuaCAqLzsgfTsKIAkJNTFCMkExMDAwQURCMTVEMDAwMkE5QkVFIC8q
IFdlYkljb25EYXRhYmFzZURlbGVnYXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1MUIyQTBGRjBBREIxNUQwMDAyQTlCRUUgLyogV2ViSWNvbkRhdGFi
YXNlRGVsZWdhdGUuaCAqLzsgfTsKIAkJNTFDNzE0RkIwQjIwRjc5RjAwRTVFMzNDIC8qIFdlYkJh
Y2tGb3J3YXJkTGlzdEludGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MUM3MTRGQTBCMjBGNzlGMDBFNUUzM0MgLyogV2ViQmFja0ZvcndhcmRM
aXN0SW50ZXJuYWwuaCAqLzsgfTsKQEAgLTU5OSw2ICs2MDEsOCBAQAogCQk1MUE4QjU3OTA0Mjgz
NEY3MDBDQTJEM0EgLyogV2ViVmlldy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBXZWJWaWV3Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRh
YldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQk1MUE4QjU3QTA0MjgzNEY3MDBDQTJEM0Eg
LyogV2ViVmlldy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
Lm9iamNwcDsgcGF0aCA9IFdlYlZpZXcubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldp
ZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQk1MUE4QjU3RDA0MjgzNTNBMDBDQTJEM0EgLyog
V2ViVmlld1ByaXZhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gV2ViVmlld1ByaXZhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFi
V2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CisJCTUxQTlEOUVCMTk1Qjk0OUYwMDFCMkI1QyAv
KiBXZWJISURHYW1lcGFkQ29udHJvbGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBXZWJISURHYW1lcGFkQ29udHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk1MUE5RDlFQzE5NUI5NDlGMDAxQjJCNUMgLyogV2ViSElER2FtZXBhZENvbnRyb2xsZXIu
bW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJISURHYW1lcGFk
Q29udHJvbGxlci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFBRURFRjAwQ0VD
RjQ1NzAwODU0MzI4IC8qIFdlYkRhdGFiYXNlTWFuYWdlckludGVybmFsLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkRhdGFiYXNlTWFuYWdlckludGVybmFsLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxQjJBMEZGMEFEQjE1RDAwMDJBOUJFRSAvKiBXZWJJ
Y29uRGF0YWJhc2VEZWxlZ2F0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBX
ZWJJY29uRGF0YWJhc2VEZWxlZ2F0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1
MUM3MTRGQTBCMjBGNzlGMDBFNUUzM0MgLyogV2ViQmFja0ZvcndhcmRMaXN0SW50ZXJuYWwuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViQmFja0ZvcndhcmRMaXN0SW50ZXJu
YWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE1NDcsNiArMTU1MSw4IEBACiAJ
CQkJOTM5MUYyNzQxMjFCMzhCRDAwRUJGN0U4IC8qIFdlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQu
bW0gKi8sCiAJCQkJQkM3Rjg4NDkxMEM4Nzc1QTAwRDYxMzNEIC8qIFdlYkdlb2xvY2F0aW9uQ2xp
ZW50LmggKi8sCiAJCQkJQkM3Rjg4NEExMEM4Nzc1QTAwRDYxMzNEIC8qIFdlYkdlb2xvY2F0aW9u
Q2xpZW50Lm1tICovLAorCQkJCTUxQTlEOUVCMTk1Qjk0OUYwMDFCMkI1QyAvKiBXZWJISURHYW1l
cGFkQ29udHJvbGxlci5oICovLAorCQkJCTUxQTlEOUVDMTk1Qjk0OUYwMDFCMkI1QyAvKiBXZWJI
SURHYW1lcGFkQ29udHJvbGxlci5tbSAqLywKIAkJCQk1MTQ5NENENDBDN0VCREUwMDA0MTc4QzUg
LyogV2ViSWNvbkRhdGFiYXNlQ2xpZW50LmggKi8sCiAJCQkJNTE0OTRDRDUwQzdFQkRFMDAwNDE3
OEM1IC8qIFdlYkljb25EYXRhYmFzZUNsaWVudC5tbSAqLywKIAkJCQkwNjY5M0REQTBCRkJBODUy
MDAyMTYwNzIgLyogV2ViSW5zcGVjdG9yQ2xpZW50LmggKi8sCkBAIC0xNzU5LDYgKzE3NjUsNyBA
QAogCQkJCUExMEMxRDQyMTgyMDJGRUYwMDM2ODgzQSAvKiBXZWJTUUxpdGVEYXRhYmFzZVRyYWNr
ZXJDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzOTgxMDU0MDgyNEJGMDEwMDhERjAzOCAv
KiBXZWJGcmFtZVByaXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUExMEMxRDYyMTgyMDMwMEUw
MDM2ODgzQSAvKiBTZWFyY2hQb3B1cE1lbnVJT1MuaCBpbiBIZWFkZXJzICovLAorCQkJCTUxQTlE
OUVEMTk1Qjk0OUYwMDFCMkI1QyAvKiBXZWJISURHYW1lcGFkQ29udHJvbGxlci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJOTM5ODEwNkUwODI0QkYwMTAwOERGMDM4IC8qIFdlYkZyYW1lVmlldy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJOTM5ODEwNkYwODI0QkYwMTAwOERGMDM4IC8qIFdlYkZyYW1lVmll
d0ludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQk5Mzk4MTBBRjA4MjRCRjAxMDA4REYwMzgg
LyogV2ViRnJhbWVWaWV3UHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0yMTM3LDYgKzIxNDQs
NyBAQAogCQkJCTA3MEY1NDlDMTdGMUU0MkIwMDE2OUUwNCAvKiBXZWJVc2VyTWVkaWFDbGllbnQu
bW0gaW4gU291cmNlcyAqLywKIAkJCQlFMTY5ODM2QzExMzQ2RDU2MDA4OTQxMTUgLyogUHJveHlS
dW50aW1lT2JqZWN0Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJN0MwMUNCODgxNzM0MzVDOTAwQzVE
ODA3IC8qIFNlYXJjaFBvcHVwTWVudU1hYy5tbSBpbiBTb3VyY2VzICovLAorCQkJCTUxQTlEOUVF
MTk1Qjk0OUYwMDFCMkI1QyAvKiBXZWJISURHYW1lcGFkQ29udHJvbGxlci5tbSBpbiBTb3VyY2Vz
ICovLAogCQkJCUNFREExMkRCMTUyQ0JFNjgwMEQ5RTA4RCAvKiBXZWJBbHRlcm5hdGl2ZVRleHRD
bGllbnQubW0gaW4gU291cmNlcyAqLywKIAkJCQlBMTBDMUQ2MDE4MjAzMDBFMDAzNjg4M0EgLyog
UG9wdXBNZW51SU9TLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQjZDRTVDMjQxMDBCQzVDRTAwMjE5
OTM2IC8qIFdlYkFwcGxpY2F0aW9uQ2FjaGUubW0gaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxv
ZwppbmRleCBlMjM1NGZjLi4yNmQ3NGRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMjkg
QEAKIDIwMTQtMDYtMjUgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgogCisgICAg
ICAgIEFkZCBISUQtYmFzZWQgZ2FtZXBhZCBpbXBsZW1lbnRhdGlvbiBmb3IgTWFjCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzQzMjQKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgYSBjbGFzcyB0aGF0
IGFjdHMgYXMgYW4gaW50ZXJtZWRpYXJ5IGJldHdlZW4gdGhlIEdhbWVwYWRTdHJhdGVneUNsaWVu
dAorICAgICAgICBhbmQgdGhlIEhJREdhbWVwYWRMaXN0ZW5lcjoKKyAgICAgICAgKiBXZWJDb3Jl
U3VwcG9ydC9XZWJISURHYW1lcGFkQ29udHJvbGxlci5oOgorICAgICAgICAqIFdlYkNvcmVTdXBw
b3J0L1dlYkhJREdhbWVwYWRDb250cm9sbGVyLm1tOgorICAgICAgICAoV2ViSElER2FtZXBhZENv
bnRyb2xsZXI6OnNoYXJlZCk6CisgICAgICAgIChXZWJISURHYW1lcGFkQ29udHJvbGxlcjo6V2Vi
SElER2FtZXBhZENvbnRyb2xsZXIpOgorICAgICAgICAoV2ViSElER2FtZXBhZENvbnRyb2xsZXI6
OmdhbWVwYWRDb25uZWN0ZWQpOgorICAgICAgICAoV2ViSElER2FtZXBhZENvbnRyb2xsZXI6Omdh
bWVwYWREaXNjb25uZWN0ZWQpOgorICAgICAgICAoV2ViSElER2FtZXBhZENvbnRyb2xsZXI6OnJl
Z2lzdGVyR2FtZXBhZFN0cmF0ZWd5Q2xpZW50KToKKyAgICAgICAgKFdlYkhJREdhbWVwYWRDb250
cm9sbGVyOjp1bnJlZ2lzdGVyR2FtZXBhZFN0cmF0ZWd5Q2xpZW50KToKKworICAgICAgICBJbXBs
ZW1lbnQgdGhlIHN0cmF0ZWdpZXMgYnkgdXNpbmcgdGhlIEhJREdhbWVwYWRMaXN0ZW5lcjoKKyAg
ICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMubW06CisgICAgICAg
IChXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OnN0YXJ0TW9uaXRvcmluZ0dhbWVwYWRzKToKKyAgICAg
ICAgKFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6c3RvcE1vbml0b3JpbmdHYW1lcGFkcyk6CisgICAg
ICAgIChXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OnBsYXRmb3JtR2FtZXBhZHMpOgorCisyMDE0LTA2
LTI1ICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KKwogICAgICAgICBBZGQgbmV3
IHBsYXRmb3JtIGdhbWVwYWQgYWJzdHJhY3Rpb25zCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzQzMjUKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViSElER2FtZXBhZENvbnRyb2xsZXIuaCBiL1NvdXJjZS9X
ZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkhJREdhbWVwYWRDb250cm9sbGVyLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQ4MzEzNwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkhJREdhbWVwYWRDb250cm9sbGVy
LmgKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViSElER2FtZXBhZENv
bnRyb2xsZXJfaAorI2RlZmluZSBXZWJISURHYW1lcGFkQ29udHJvbGxlcl9oCisKKyNpZiBFTkFC
TEUoR0FNRVBBRCkKKworI2luY2x1ZGUgPFdlYkNvcmUvSElER2FtZXBhZExpc3RlbmVyLmg+Cisj
aW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgR2Ft
ZXBhZFN0cmF0ZWd5Q2xpZW50OworfQorCitjbGFzcyBXZWJISURHYW1lcGFkQ29udHJvbGxlciA6
IHB1YmxpYyBXZWJDb3JlOjpISURHYW1lcGFkTGlzdGVuZXJDbGllbnQgeworcHVibGljOgorICAg
IHN0YXRpYyBXZWJISURHYW1lcGFkQ29udHJvbGxlciYgc2hhcmVkKCk7CisKKyAgICB2aXJ0dWFs
IHZvaWQgZ2FtZXBhZENvbm5lY3RlZCh1bnNpZ25lZCBpbmRleCkgb3ZlcnJpZGUgZmluYWw7Cisg
ICAgdmlydHVhbCB2b2lkIGdhbWVwYWREaXNjb25uZWN0ZWQodW5zaWduZWQgaW5kZXgpIG92ZXJy
aWRlIGZpbmFsOworCisgICAgdm9pZCByZWdpc3RlckdhbWVwYWRTdHJhdGVneUNsaWVudChXZWJD
b3JlOjpHYW1lcGFkU3RyYXRlZ3lDbGllbnQqKTsKKyAgICB2b2lkIHVucmVnaXN0ZXJHYW1lcGFk
U3RyYXRlZ3lDbGllbnQoV2ViQ29yZTo6R2FtZXBhZFN0cmF0ZWd5Q2xpZW50Kik7CisKK3ByaXZh
dGU6CisgICAgZnJpZW5kIE5ldmVyRGVzdHJveWVkPFdlYkhJREdhbWVwYWRDb250cm9sbGVyPjsK
KworICAgIFdlYkhJREdhbWVwYWRDb250cm9sbGVyKCk7CisKKyAgICBIYXNoU2V0PFdlYkNvcmU6
OkdhbWVwYWRTdHJhdGVneUNsaWVudCo+IG1fY2xpZW50czsKK307CisKKyNlbmRpZiAvLyBFTkFC
TEUoR0FNRVBBRCkKKyNlbmRpZiAvLyBXZWJISURHYW1lcGFkQ29udHJvbGxlcl9oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJISURHYW1lcGFkQ29udHJv
bGxlci5tbSBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkhJREdhbWVwYWRD
b250cm9sbGVyLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxMTQ2OWUK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJI
SURHYW1lcGFkQ29udHJvbGxlci5tbQpAQCAtMCwwICsxLDY4IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
IEVOQUJMRShHQU1FUEFEKQorCisjaW1wb3J0ICJXZWJISURHYW1lcGFkQ29udHJvbGxlci5oIgor
I2ltcG9ydCA8V2ViQ29yZS9HYW1lcGFkU3RyYXRlZ3lDbGllbnQuaD4KKyNpbXBvcnQgPFdlYkNv
cmUvSElER2FtZXBhZExpc3RlbmVyLmg+CisjaW1wb3J0IDxXZWJDb3JlL1BsYXRmb3JtR2FtZXBh
ZENsaWVudC5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworV2ViSElER2FtZXBhZENv
bnRyb2xsZXImIFdlYkhJREdhbWVwYWRDb250cm9sbGVyOjpzaGFyZWQoKQoreworICAgIHN0YXRp
YyBOZXZlckRlc3Ryb3llZDxXZWJISURHYW1lcGFkQ29udHJvbGxlcj4gc2hhcmVkQ2xpZW50Owor
ICAgIHJldHVybiBzaGFyZWRDbGllbnQ7Cit9CisKK1dlYkhJREdhbWVwYWRDb250cm9sbGVyOjpX
ZWJISURHYW1lcGFkQ29udHJvbGxlcigpCit7CisgICAgSElER2FtZXBhZExpc3RlbmVyOjpzaGFy
ZWQoKS5zZXRDbGllbnQodGhpcyk7Cit9CisKK3ZvaWQgV2ViSElER2FtZXBhZENvbnRyb2xsZXI6
OmdhbWVwYWRDb25uZWN0ZWQodW5zaWduZWQgaW5kZXgpCit7CisgICAgZm9yIChhdXRvJiBjbGll
bnQgOiBtX2NsaWVudHMpCisgICAgICAgIGNsaWVudC0+cGxhdGZvcm1HYW1lcGFkQ29ubmVjdGVk
KGluZGV4KTsKK30KKwordm9pZCBXZWJISURHYW1lcGFkQ29udHJvbGxlcjo6Z2FtZXBhZERpc2Nv
bm5lY3RlZCh1bnNpZ25lZCBpbmRleCkKK3sKKyAgICBmb3IgKGF1dG8mIGNsaWVudCA6IG1fY2xp
ZW50cykKKyAgICAgICAgY2xpZW50LT5wbGF0Zm9ybUdhbWVwYWREaXNjb25uZWN0ZWQoaW5kZXgp
OworfQorCit2b2lkIFdlYkhJREdhbWVwYWRDb250cm9sbGVyOjpyZWdpc3RlckdhbWVwYWRTdHJh
dGVneUNsaWVudChHYW1lcGFkU3RyYXRlZ3lDbGllbnQqIGNsaWVudCkKK3sKKyAgICBtX2NsaWVu
dHMuYWRkKGNsaWVudCk7Cit9CisKK3ZvaWQgV2ViSElER2FtZXBhZENvbnRyb2xsZXI6OnVucmVn
aXN0ZXJHYW1lcGFkU3RyYXRlZ3lDbGllbnQoR2FtZXBhZFN0cmF0ZWd5Q2xpZW50KiBjbGllbnQp
Cit7CisgICAgbV9jbGllbnRzLnJlbW92ZShjbGllbnQpOworfQorCisjZW5kaWYgLy8gRU5BQkxF
KEdBTUVQQUQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9X
ZWJQbGF0Zm9ybVN0cmF0ZWdpZXMubW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9y
dC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMubW0KaW5kZXggMjJiNzZhNS4uZjQwZTE4OSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVn
aWVzLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3Jt
U3RyYXRlZ2llcy5tbQpAQCAtNDAsNiArNDAsMTAgQEAKICNpbXBvcnQgPFdlYktpdFN5c3RlbUlu
dGVyZmFjZS5oPgogI2ltcG9ydCA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAKKyNpZiBFTkFCTEUo
R0FNRVBBRCkKKyNpbXBvcnQgIldlYkhJREdhbWVwYWRDb250cm9sbGVyLmgiCisjZW5kaWYKKwog
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIHZvaWQgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpp
bml0aWFsaXplSWZOZWNlc3NhcnkoKQpAQCAtMjIxLDE4ICsyMjUsMTkgQEAgbG9uZyBXZWJQbGF0
Zm9ybVN0cmF0ZWdpZXM6OnNldFN0cmluZ0ZvclR5cGUoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGNv
bnN0IFN0cmluZyYKIH0KIAogI2lmIEVOQUJMRShHQU1FUEFEKQotdm9pZCBXZWJQbGF0Zm9ybVN0
cmF0ZWdpZXM6OnN0YXJ0TW9uaXRvcmluZ0dhbWVwYWRzKEdhbWVwYWRTdHJhdGVneUNsaWVudCop
Cit2b2lkIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6c3RhcnRNb25pdG9yaW5nR2FtZXBhZHMoR2Ft
ZXBhZFN0cmF0ZWd5Q2xpZW50KiBjbGllbnQpCiB7CisgICAgV2ViSElER2FtZXBhZENvbnRyb2xs
ZXI6OnNoYXJlZCgpLnJlZ2lzdGVyR2FtZXBhZFN0cmF0ZWd5Q2xpZW50KGNsaWVudCk7CiB9CiAK
LXZvaWQgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpzdG9wTW9uaXRvcmluZ0dhbWVwYWRzKEdhbWVw
YWRTdHJhdGVneUNsaWVudCopCit2b2lkIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6c3RvcE1vbml0
b3JpbmdHYW1lcGFkcyhHYW1lcGFkU3RyYXRlZ3lDbGllbnQqIGNsaWVudCkKIHsKKyAgICBXZWJI
SURHYW1lcGFkQ29udHJvbGxlcjo6c2hhcmVkKCkudW5yZWdpc3RlckdhbWVwYWRTdHJhdGVneUNs
aWVudChjbGllbnQpOwogfQogCiBjb25zdCBWZWN0b3I8UGxhdGZvcm1HYW1lcGFkKj4mIFdlYlBs
YXRmb3JtU3RyYXRlZ2llczo6cGxhdGZvcm1HYW1lcGFkcygpCiB7Ci0gICAgTmV2ZXJEZXN0cm95
ZWQ8VmVjdG9yPFBsYXRmb3JtR2FtZXBhZCo+PiBkdW1teUdhbWVwYWRzOwotICAgIHJldHVybiBk
dW1teUdhbWVwYWRzOworICAgIHJldHVybiBISURHYW1lcGFkTGlzdGVuZXI6OnNoYXJlZCgpLnBs
YXRmb3JtR2FtZXBhZHMoKTsKIH0KICNlbmRpZiAvLyBFTkFCTEUoR0FNRVBBRCkKIAo=
</data>
<flag name="review"
          id="258378"
          type_id="1"
          status="+"
          setter="dino"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>233875</attachid>
            <date>2014-06-25 21:02:00 -0700</date>
            <delta_ts>2014-06-25 21:17:49 -0700</delta_ts>
            <desc>Patch for landing v1</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>62327</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBlNDY5MWUyLi42NGZhMGUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsODYg
QEAKIDIwMTQtMDYtMjUgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgogCisgICAg
ICAgIEFkZCBISUQtYmFzZWQgZ2FtZXBhZCBpbXBsZW1lbnRhdGlvbiBmb3IgTWFjCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzQzMjQKKworICAgICAg
ICBSZXZpZXdlZCBieSBEZWFuIEphY2tzb24uCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIChOb3Qg
eWV0IGEgdGVzdGVkIGNvbmZpZykKKworICAgICAgICAqIE1vZHVsZXMvZ2FtZXBhZC9HYW1lcGFk
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdhbWVwYWQ6OkdhbWVwYWQpOgorICAgICAgICAoV2Vi
Q29yZTo6R2FtZXBhZDo6dXBkYXRlRnJvbVBsYXRmb3JtR2FtZXBhZCk6IFVwZGF0ZSB0aGUgR2Ft
ZXBhZOKAmXMgZGF0YSBmcm9tIHRoZSBwYXNzZWQtaW4gUGxhdGZvcm1HYW1lcGFkLgorICAgICAg
ICAqIE1vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkLmg6CisKKyAgICAgICAgKiBNb2R1bGVzL2dhbWVw
YWQvR2FtZXBhZEJ1dHRvbi5oOgorICAgICAgICAoV2ViQ29yZTo6R2FtZXBhZEJ1dHRvbjo6Y3Jl
YXRlKTogQ2hhbmdlIHRvIHVzZSBSZWYgaW5zdGVhZCBvZiBSZWZQdHIuCisKKyAgICAgICAgR2Ft
ZXBhZE1hbmFnZXIgaXMgYSBHYW1lcGFkU3RyYXRlZ3lDbGllbnQgdGhhdCByZWNlaXZlcyBub3Rp
ZmljYXRpb25zIGZyb20gdGhlIHBsYXRmb3JtIGdhbWVwYWQgaW1wbGVtZW50YXRpb24KKyAgICAg
ICAgYW5kIGZvcndhcmRzIHRoZW0gdG8gTmF2aWdhdG9yR2FtZXBhZCBvYmplY3RzLiBJbiB0aGUg
ZnV0dXJlIGl0IHdpbGwgYWxzbyBoYW5kbGUgZXZlbnQgZGlzcGF0Y2ggYW5kIGV4cG9zaW5nCisg
ICAgICAgIGdhbWVwYWRzIHRvIHRoZSBBUEkgbGF5ZXIgd2hlbiBhIGJ1dHRvbiBpcyBwcmVzc2Vk
OgorICAgICAgICAqIE1vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkTWFuYWdlci5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R2FtZXBhZE1hbmFnZXI6OnNoYXJlZCk6CisgICAgICAgIChXZWJD
b3JlOjpHYW1lcGFkTWFuYWdlcjo6R2FtZXBhZE1hbmFnZXIpOgorICAgICAgICAoV2ViQ29yZTo6
R2FtZXBhZE1hbmFnZXI6OnBsYXRmb3JtR2FtZXBhZENvbm5lY3RlZCk6CisgICAgICAgIChXZWJD
b3JlOjpHYW1lcGFkTWFuYWdlcjo6cGxhdGZvcm1HYW1lcGFkRGlzY29ubmVjdGVkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdhbWVwYWRNYW5hZ2VyOjpyZWdpc3Rlck5hdmlnYXRvcik6CisgICAgICAg
IChXZWJDb3JlOjpHYW1lcGFkTWFuYWdlcjo6dW5yZWdpc3Rlck5hdmlnYXRvcik6CisgICAgICAg
ICogTW9kdWxlcy9nYW1lcGFkL0dhbWVwYWRNYW5hZ2VyLmg6CisKKyAgICAgICAgVGhlIE5hdmln
YXRvckdhbWVwYWQgc3VwcGxlbWVudCBhY3R1YWxseSBtYW5hZ2VzIHZpc2liaWxpdHkgb2YgR2Ft
ZXBhZHMgb24gYSBwZXItRE9NV2luZG93IGJhc2lzOgorICAgICAgICAqIE1vZHVsZXMvZ2FtZXBh
ZC9OYXZpZ2F0b3JHYW1lcGFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5hdmlnYXRvckdhbWVw
YWQ6Ok5hdmlnYXRvckdhbWVwYWQpOgorICAgICAgICAoV2ViQ29yZTo6TmF2aWdhdG9yR2FtZXBh
ZDo6fk5hdmlnYXRvckdhbWVwYWQpOgorICAgICAgICAoV2ViQ29yZTo6TmF2aWdhdG9yR2FtZXBh
ZDo6ZnJvbSk6CisgICAgICAgIChXZWJDb3JlOjpOYXZpZ2F0b3JHYW1lcGFkOjpnYW1lcGFkcyk6
CisgICAgICAgIChXZWJDb3JlOjpOYXZpZ2F0b3JHYW1lcGFkOjpnYW1lcGFkc0JlY2FtZVZpc2li
bGUpOgorICAgICAgICAoV2ViQ29yZTo6TmF2aWdhdG9yR2FtZXBhZDo6Z2FtZXBhZENvbm5lY3Rl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpOYXZpZ2F0b3JHYW1lcGFkOjpnYW1lcGFkRGlzY29ubmVj
dGVkKToKKyAgICAgICAgKiBNb2R1bGVzL2dhbWVwYWQvTmF2aWdhdG9yR2FtZXBhZC5oOgorICAg
ICAgICAoV2ViQ29yZTo6TmF2aWdhdG9yR2FtZXBhZDo6bmF2aWdhdGlvblN0YXJ0KToKKworICAg
ICAgICBISURHYW1lcGFkIGlzIGEgUGxhdGZvcm1HYW1lcGFkIHRoYXQgd3JhcHMgYW4gSU9ISURE
ZXZpY2VSZWYgYW5kIGtlZXBzIGlucHV0IHZhbHVlcyB1cGRhdGVkOgorICAgICAgICAqIHBsYXRm
b3JtL21hYy9ISURHYW1lcGFkLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpISURHYW1l
cGFkOjpISURHYW1lcGFkKToKKyAgICAgICAgKFdlYkNvcmU6OkhJREdhbWVwYWQ6OmluaXRFbGVt
ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpISURHYW1lcGFkOjppbml0RWxlbWVudHNGcm9tQXJy
YXkpOgorICAgICAgICAoV2ViQ29yZTo6SElER2FtZXBhZDo6bWF5YmVBZGRCdXR0b24pOgorICAg
ICAgICAoV2ViQ29yZTo6SElER2FtZXBhZDo6bWF5YmVBZGRBeGlzKToKKyAgICAgICAgKFdlYkNv
cmU6OkhJREdhbWVwYWQ6OnZhbHVlQ2hhbmdlZCk6CisgICAgICAgICogcGxhdGZvcm0vbWFjL0hJ
REdhbWVwYWQuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpISURHYW1lcGFkRWxlbWVudDo6
SElER2FtZXBhZEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SElER2FtZXBhZEVsZW1lbnQ6
On5ISURHYW1lcGFkRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpISURHYW1lcGFkRWxlbWVu
dDo6aXNCdXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6SElER2FtZXBhZEVsZW1lbnQ6OmlzQXhp
cyk6CisgICAgICAgIChXZWJDb3JlOjpISURHYW1lcGFkQnV0dG9uOjpISURHYW1lcGFkQnV0dG9u
KToKKyAgICAgICAgKFdlYkNvcmU6OkhJREdhbWVwYWRBeGlzOjpISURHYW1lcGFkQXhpcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpISURHYW1lcGFkOjpoaWREZXZpY2UpOgorCisgICAgICAgIEhJREdh
bWVwYWRMaXN0ZW5lciB3cmFwcyBhbiBJT0hJRE1hbmFnZXJSZWYgYW5kIGNvbnRpbnVvdXNseSBs
aXN0ZW5zIGZvciBjaGFuZ2VzIHRvIEdhbWVwYWQtdHlwZQorICAgICAgICBkZXZpY2VzIHBsdWdn
ZWQgaW4gdG8gdGhlIHN5c3RlbToKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvSElER2FtZXBhZExp
c3RlbmVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpkZXZpY2VNYXRjaGluZ0RpY3Rp
b25hcnkpOgorICAgICAgICAoV2ViQ29yZTo6ZGV2aWNlQWRkZWRDYWxsYmFjayk6CisgICAgICAg
IChXZWJDb3JlOjpkZXZpY2VSZW1vdmVkQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6ZGV2
aWNlVmFsdWVzQ2hhbmdlZENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkhJREdhbWVwYWRM
aXN0ZW5lcjo6c2hhcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OkhJREdhbWVwYWRMaXN0ZW5lcjo6
SElER2FtZXBhZExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkhJREdhbWVwYWRMaXN0ZW5l
cjo6aW5kZXhGb3JOZXdseUNvbm5lY3RlZERldmljZSk6CisgICAgICAgIChXZWJDb3JlOjpISURH
YW1lcGFkTGlzdGVuZXI6OmRldmljZUFkZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkhJREdhbWVw
YWRMaXN0ZW5lcjo6ZGV2aWNlUmVtb3ZlZCk6CisgICAgICAgIChXZWJDb3JlOjpISURHYW1lcGFk
TGlzdGVuZXI6OnZhbHVlc0NoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6SElER2FtZXBhZExp
c3RlbmVyOjpyZW1vdmVHYW1lcGFkRm9yRGV2aWNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMv
SElER2FtZXBhZExpc3RlbmVyLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
Z2FtZXBhZC9OYXZpZ2F0b3JHYW1lcGFkLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OkhJREdhbWVw
YWRMaXN0ZW5lckNsaWVudDo6fkhJREdhbWVwYWRMaXN0ZW5lckNsaWVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpISURHYW1lcGFkTGlzdGVuZXI6OnNldENsaWVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpISURHYW1lcGFkTGlzdGVuZXI6OnBsYXRmb3JtR2FtZXBhZHMpOgorICAgICAgICAoV2ViQ29y
ZTo6SElER2FtZXBhZExpc3RlbmVyOjpzZXRTaG91bGREaXNwYXRjaENhbGxiYWNrcyk6CisKKyAg
ICAgICAgKiBXZWJDb3JlLmV4cC5pbjoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisKKzIwMTQtMDYtMjUgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUu
Y29tPgorCiAgICAgICAgIEFkZCBuZXcgcGxhdGZvcm0gZ2FtZXBhZCBhYnN0cmFjdGlvbnMKICAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNDMyNQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dhbWVwYWQvR2FtZXBhZC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dhbWVwYWQvR2FtZXBhZC5jcHAKaW5kZXggMjBhMGYyOWUu
LjVhZDQwNWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2FtZXBhZC9HYW1l
cGFkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dhbWVwYWQvR2FtZXBhZC5jcHAK
QEAgLTI4LDE1ICsyOCwyMiBAQAogCiAjaWYgRU5BQkxFKEdBTUVQQUQpCiAKKyNpbmNsdWRlICJH
YW1lcGFkQnV0dG9uLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1HYW1lcGFkLmgiCiAjaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotR2FtZXBhZDo6
R2FtZXBhZCgpCi0gICAgOiBtX2luZGV4KDApCitHYW1lcGFkOjpHYW1lcGFkKGNvbnN0IFBsYXRm
b3JtR2FtZXBhZCYgcGxhdGZvcm1HYW1lcGFkLCB1bnNpZ25lZCBpbmRleCkKKyAgICA6IG1faWQo
cGxhdGZvcm1HYW1lcGFkLmlkKCkpCisgICAgLCBtX2luZGV4KGluZGV4KQogICAgICwgbV9jb25u
ZWN0ZWQodHJ1ZSkKLSAgICAsIG1fdGltZXN0YW1wKDAuMCkKKyAgICAsIG1fdGltZXN0YW1wKHBs
YXRmb3JtR2FtZXBhZC5sYXN0VXBkYXRlVGltZSgpKQogeworICAgIG1fYXhlcy5yZXNpemUocGxh
dGZvcm1HYW1lcGFkLmF4aXNWYWx1ZXMoKS5zaXplKCkpOworICAgIHVuc2lnbmVkIGJ1dHRvbkNv
dW50ID0gcGxhdGZvcm1HYW1lcGFkLmJ1dHRvblZhbHVlcygpLnNpemUoKTsKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgYnV0dG9uQ291bnQ7ICsraSkKKyAgICAgICAgbV9idXR0b25zLmFw
cGVuZChHYW1lcGFkQnV0dG9uOjpjcmVhdGUoKSk7CiB9CiAKIEdhbWVwYWQ6On5HYW1lcGFkKCkK
QEAgLTUzLDYgKzYwLDE2IEBAIGNvbnN0IFZlY3RvcjxSZWY8R2FtZXBhZEJ1dHRvbj4+JiBHYW1l
cGFkOjpidXR0b25zKCkgY29uc3QKICAgICByZXR1cm4gbV9idXR0b25zOwogfQogCit2b2lkIEdh
bWVwYWQ6OnVwZGF0ZUZyb21QbGF0Zm9ybUdhbWVwYWQoY29uc3QgUGxhdGZvcm1HYW1lcGFkJiBw
bGF0Zm9ybUdhbWVwYWQpCit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fYXhlcy5z
aXplKCk7ICsraSkKKyAgICAgICAgbV9heGVzW2ldID0gcGxhdGZvcm1HYW1lcGFkLmF4aXNWYWx1
ZXMoKVtpXTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9idXR0b25zLnNpemUoKTsg
KytpKQorICAgICAgICBtX2J1dHRvbnNbaV0tPnNldFZhbHVlKHBsYXRmb3JtR2FtZXBhZC5idXR0
b25WYWx1ZXMoKVtpXSk7CisKKyAgICBtX3RpbWVzdGFtcCA9IHBsYXRmb3JtR2FtZXBhZC5sYXN0
VXBkYXRlVGltZSgpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBF
TkFCTEUoR0FNRVBBRCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2FtZXBh
ZC9HYW1lcGFkLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dhbWVwYWQvR2FtZXBhZC5oCmlu
ZGV4IDI4ZWJlMWEuLjllNzAyM2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
Z2FtZXBhZC9HYW1lcGFkLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nYW1lcGFkL0dh
bWVwYWQuaApAQCAtMjgsMTggKzI4LDIwIEBACiAKICNpZiBFTkFCTEUoR0FNRVBBRCkKIAotI2lu
Y2x1ZGUgIkdhbWVwYWRCdXR0b24uaCIKLSNpbmNsdWRlIDx3dGYvUmVmLmg+CisjaW5jbHVkZSA8
d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgR2FtZXBh
ZEJ1dHRvbjsKK2NsYXNzIFBsYXRmb3JtR2FtZXBhZDsKKwogY2xhc3MgR2FtZXBhZDogcHVibGlj
IFJlZkNvdW50ZWQ8R2FtZXBhZD4gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEdh
bWVwYWQ+IGNyZWF0ZSgpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8R2FtZXBhZD4gY3JlYXRlKGNv
bnN0IFBsYXRmb3JtR2FtZXBhZCYgcGxhdGZvcm1HYW1lcGFkLCB1bnNpZ25lZCBpbmRleCkKICAg
ICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgR2FtZXBhZCk7CisgICAgICAgIHJldHVy
biBhZG9wdFJlZihuZXcgR2FtZXBhZChwbGF0Zm9ybUdhbWVwYWQsIGluZGV4KSk7CiAgICAgfQog
ICAgIH5HYW1lcGFkKCk7CiAKQEAgLTUyLDggKzU0LDEwIEBAIHB1YmxpYzoKICAgICBjb25zdCBW
ZWN0b3I8ZG91YmxlPiYgYXhlcygpIGNvbnN0OwogICAgIGNvbnN0IFZlY3RvcjxSZWY8R2FtZXBh
ZEJ1dHRvbj4+JiBidXR0b25zKCkgY29uc3Q7CiAKKyAgICB2b2lkIHVwZGF0ZUZyb21QbGF0Zm9y
bUdhbWVwYWQoY29uc3QgUGxhdGZvcm1HYW1lcGFkJik7CisKIHByaXZhdGU6Ci0gICAgR2FtZXBh
ZCgpOworICAgIEdhbWVwYWQoY29uc3QgUGxhdGZvcm1HYW1lcGFkJiBwbGF0Zm9ybUdhbWVwYWQs
IHVuc2lnbmVkIGluZGV4KTsKICAgICBTdHJpbmcgbV9pZDsKICAgICB1bnNpZ25lZCBtX2luZGV4
OwogICAgIGJvb2wgbV9jb25uZWN0ZWQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2dhbWVwYWQvR2FtZXBhZEJ1dHRvbi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nYW1l
cGFkL0dhbWVwYWRCdXR0b24uaAppbmRleCAyZDI1OGQ3Li4xMGNmMGY3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dhbWVwYWQvR2FtZXBhZEJ1dHRvbi5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkQnV0dG9uLmgKQEAgLTI4LDE2ICsyOCwx
NiBAQAogCiAjaWYgRU5BQkxFKEdBTUVQQUQpCiAKLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5o
PgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBHYW1lcGFkQnV0dG9uIDogcHVibGljIFJl
ZkNvdW50ZWQ8R2FtZXBhZEJ1dHRvbj4gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRy
PEdhbWVwYWRCdXR0b24+IGNyZWF0ZSgpCisgICAgc3RhdGljIFBhc3NSZWY8R2FtZXBhZEJ1dHRv
bj4gY3JlYXRlKCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgR2FtZXBhZEJ1
dHRvbik7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEdhbWVwYWRCdXR0b24pOwogICAg
IH0KIAogICAgIGJvb2wgcHJlc3NlZCgpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9nYW1lcGFkL0dhbWVwYWRNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvZ2FtZXBhZC9HYW1lcGFkTWFuYWdlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uMWFkMDE5MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvZ2FtZXBhZC9HYW1lcGFkTWFuYWdlci5jcHAKQEAgLTAsMCArMSw5MSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR2FtZXBhZE1hbmFnZXIuaCIKKwor
I2lmIEVOQUJMRShHQU1FUEFEKQorCisjaW5jbHVkZSAiR2FtZXBhZC5oIgorI2luY2x1ZGUgIkdh
bWVwYWRTdHJhdGVneS5oIgorI2luY2x1ZGUgIk5hdmlnYXRvckdhbWVwYWQuaCIKKyNpbmNsdWRl
ICJQbGF0Zm9ybUdhbWVwYWQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmF0ZWdpZXMuaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitHYW1lcGFkTWFuYWdlciYgR2FtZXBhZE1hbmFnZXI6OnNo
YXJlZCgpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEdhbWVwYWRNYW5hZ2VyPiBzaGFy
ZWRNYW5hZ2VyOworICAgIHJldHVybiBzaGFyZWRNYW5hZ2VyOworfQorCitHYW1lcGFkTWFuYWdl
cjo6R2FtZXBhZE1hbmFnZXIoKQoreworICAgIHBsYXRmb3JtU3RyYXRlZ2llcygpLT5nYW1lcGFk
U3RyYXRlZ3koKS0+c3RvcE1vbml0b3JpbmdHYW1lcGFkcyh0aGlzKTsKK30KKwordm9pZCBHYW1l
cGFkTWFuYWdlcjo6cGxhdGZvcm1HYW1lcGFkQ29ubmVjdGVkKHVuc2lnbmVkIGluZGV4KQorewor
ICAgIGZvciAoYXV0byYgbmF2aWdhdG9yIDogbV9uYXZpZ2F0b3JzKQorICAgICAgICBuYXZpZ2F0
b3ItPmdhbWVwYWRDb25uZWN0ZWQoaW5kZXgpOworCisgICAgLy8gRklYTUU6IEZpcmUgY29ubmVj
dGVkIGV2ZW50IHRvIGFsbCBwYWdlcyB3aXRoIGxpc3RlbmVycy4KK30KKwordm9pZCBHYW1lcGFk
TWFuYWdlcjo6cGxhdGZvcm1HYW1lcGFkRGlzY29ubmVjdGVkKHVuc2lnbmVkIGluZGV4KQorewor
ICAgIC8vIEZJWE1FOiBGaXJlIGRpc2Nvbm5lY3RlZCBldmVudCB0byBhbGwgcGFnZXMgd2l0aCBs
aXN0ZW5lcnMuCisKKyAgICBmb3IgKGF1dG8mIG5hdmlnYXRvciA6IG1fbmF2aWdhdG9ycykKKyAg
ICAgICAgbmF2aWdhdG9yLT5nYW1lcGFkRGlzY29ubmVjdGVkKGluZGV4KTsKK30KKwordm9pZCBH
YW1lcGFkTWFuYWdlcjo6cmVnaXN0ZXJOYXZpZ2F0b3IoTmF2aWdhdG9yR2FtZXBhZCogbmF2aWdh
dG9yKQoreworICAgIEFTU0VSVCghbV9uYXZpZ2F0b3JzLmNvbnRhaW5zKG5hdmlnYXRvcikpOwor
ICAgIG1fbmF2aWdhdG9ycy5hZGQobmF2aWdhdG9yKTsKKworICAgIC8vIEZJWE1FOiBNb25pdG9y
aW5nIGdhbWVwYWRzIHdpbGwgYWxzbyBiZSByZWxpYW50IG9uIHdoZXRoZXIgb3Igbm90IHRoZXJl
IGFyZSBhbnkKKyAgICAvLyBjb25uZWN0ZWQvZGlzY29ubmVjdGVkIGV2ZW50IGxpc3RlbmVycy4K
KyAgICAvLyBUaG9zZSBldmVudCBsaXN0ZW5lcnMgd2lsbCBhbHNvIG5lZWQgdG8gcmVnaXN0ZXIg
d2l0aCB0aGUgR2FtZXBhZE1hbmFnZXIuCisgICAgaWYgKG1fbmF2aWdhdG9ycy5zaXplKCkgPT0g
MSkKKyAgICAgICAgcGxhdGZvcm1TdHJhdGVnaWVzKCktPmdhbWVwYWRTdHJhdGVneSgpLT5zdGFy
dE1vbml0b3JpbmdHYW1lcGFkcyh0aGlzKTsKK30KKwordm9pZCBHYW1lcGFkTWFuYWdlcjo6dW5y
ZWdpc3Rlck5hdmlnYXRvcihOYXZpZ2F0b3JHYW1lcGFkKiBuYXZpZ2F0b3IpCit7CisgICAgQVNT
RVJUKG1fbmF2aWdhdG9ycy5jb250YWlucyhuYXZpZ2F0b3IpKTsKKyAgICBtX25hdmlnYXRvcnMu
cmVtb3ZlKG5hdmlnYXRvcik7CisKKyAgICAvLyBGSVhNRTogTW9uaXRvcmluZyBnYW1lcGFkcyB3
aWxsIGFsc28gYmUgcmVsaWFudCBvbiB3aGV0aGVyIG9yIG5vdCB0aGVyZSBhcmUgYW55CisgICAg
Ly8gY29ubmVjdGVkL2Rpc2Nvbm5lY3RlZCBldmVudCBsaXN0ZW5lcnMuCisgICAgLy8gVGhvc2Ug
ZXZlbnQgbGlzdGVuZXJzIHdpbGwgYWxzbyBuZWVkIHRvIHJlZ2lzdGVyIHdpdGggdGhlIEdhbWVw
YWRNYW5hZ2VyLgorICAgIGlmIChtX25hdmlnYXRvcnMuaXNFbXB0eSgpKQorICAgICAgICBwbGF0
Zm9ybVN0cmF0ZWdpZXMoKS0+Z2FtZXBhZFN0cmF0ZWd5KCktPnN0b3BNb25pdG9yaW5nR2FtZXBh
ZHModGhpcyk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJM
RShHQU1FUEFEKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nYW1lcGFkL0dh
bWVwYWRNYW5hZ2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dhbWVwYWQvR2FtZXBhZE1h
bmFnZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZjhjNzllCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nYW1lcGFkL0dhbWVwYWRNYW5h
Z2VyLmgKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgR2FtZXBhZE1hbmFn
ZXJfaAorI2RlZmluZSBHYW1lcGFkTWFuYWdlcl9oCisKKyNpZiBFTkFCTEUoR0FNRVBBRCkKKwor
I2luY2x1ZGUgIkdhbWVwYWRTdHJhdGVneUNsaWVudC5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0
Lmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0
ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEdhbWVwYWQ7CitjbGFzcyBOYXZp
Z2F0b3JHYW1lcGFkOworCitjbGFzcyBHYW1lcGFkTWFuYWdlciA6IHB1YmxpYyBHYW1lcGFkU3Ry
YXRlZ3lDbGllbnQgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEdhbWVwYWRNYW5hZ2VyKTsK
KyAgICBmcmllbmQgY2xhc3MgTmV2ZXJEZXN0cm95ZWQ8R2FtZXBhZE1hbmFnZXI+OworcHVibGlj
OgorICAgIHN0YXRpYyBHYW1lcGFkTWFuYWdlciYgc2hhcmVkKCk7CisKKyAgICB2aXJ0dWFsIHZv
aWQgcGxhdGZvcm1HYW1lcGFkQ29ubmVjdGVkKHVuc2lnbmVkIGluZGV4KSBvdmVycmlkZSBmaW5h
bDsKKyAgICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1HYW1lcGFkRGlzY29ubmVjdGVkKHVuc2lnbmVk
IGluZGV4KSBvdmVycmlkZSBmaW5hbDsKKworICAgIHZvaWQgcmVnaXN0ZXJOYXZpZ2F0b3IoTmF2
aWdhdG9yR2FtZXBhZCopOworICAgIHZvaWQgdW5yZWdpc3Rlck5hdmlnYXRvcihOYXZpZ2F0b3JH
YW1lcGFkKik7CisKK3ByaXZhdGU6CisgICAgR2FtZXBhZE1hbmFnZXIoKTsKKworICAgIEhhc2hT
ZXQ8TmF2aWdhdG9yR2FtZXBhZCo+IG1fbmF2aWdhdG9yczsKK307CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShHQU1FUEFEKQorI2VuZGlmIC8vIEdhbWVwYWRN
YW5hZ2VyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2FtZXBhZC9OYXZp
Z2F0b3JHYW1lcGFkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2FtZXBhZC9OYXZpZ2F0
b3JHYW1lcGFkLmNwcAppbmRleCAxNDJmNzdiLi4yYmY2Y2NhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2dhbWVwYWQvTmF2aWdhdG9yR2FtZXBhZC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9nYW1lcGFkL05hdmlnYXRvckdhbWVwYWQuY3BwCkBAIC0yOCwxNCAr
MjgsMjggQEAKIAogI2lmIEVOQUJMRShHQU1FUEFEKQogCisjaW5jbHVkZSAiRG9jdW1lbnRMb2Fk
ZXIuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkdhbWVwYWQuaCIKKyNpbmNsdWRl
ICJHYW1lcGFkTWFuYWdlci5oIgorI2luY2x1ZGUgIkdhbWVwYWRTdHJhdGVneS5oIgogI2luY2x1
ZGUgIk5hdmlnYXRvci5oIgorI2luY2x1ZGUgIlBsYXRmb3JtR2FtZXBhZC5oIgorI2luY2x1ZGUg
IlBsYXRmb3JtU3RyYXRlZ2llcy5oIgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgor
I2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogTmF2aWdh
dG9yR2FtZXBhZDo6TmF2aWdhdG9yR2FtZXBhZCgpCisgICAgOiBtX25hdmlnYXRpb25TdGFydChz
dGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OmluZmluaXR5KCkpCiB7CisgICAgR2FtZXBhZE1h
bmFnZXI6OnNoYXJlZCgpLnJlZ2lzdGVyTmF2aWdhdG9yKHRoaXMpOworfQorCitOYXZpZ2F0b3JH
YW1lcGFkOjp+TmF2aWdhdG9yR2FtZXBhZCgpCit7CisgICAgR2FtZXBhZE1hbmFnZXI6OnNoYXJl
ZCgpLnVucmVnaXN0ZXJOYXZpZ2F0b3IodGhpcyk7CiB9CiAKIGNvbnN0IGNoYXIqIE5hdmlnYXRv
ckdhbWVwYWQ6OnN1cHBsZW1lbnROYW1lKCkKQEAgLTUwLDYgKzY0LDExIEBAIE5hdmlnYXRvckdh
bWVwYWQqIE5hdmlnYXRvckdhbWVwYWQ6OmZyb20oTmF2aWdhdG9yKiBuYXZpZ2F0b3IpCiAgICAg
ICAgIGF1dG8gbmV3U3VwcGxlbWVudCA9IHN0ZDo6bWFrZV91bmlxdWU8TmF2aWdhdG9yR2FtZXBh
ZD4oKTsKICAgICAgICAgc3VwcGxlbWVudCA9IG5ld1N1cHBsZW1lbnQuZ2V0KCk7CiAgICAgICAg
IHByb3ZpZGVUbyhuYXZpZ2F0b3IsIHN1cHBsZW1lbnROYW1lKCksIHN0ZDo6bW92ZShuZXdTdXBw
bGVtZW50KSk7CisKKyAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IG5hdmlnYXRvci0+ZnJhbWUo
KSkgeworICAgICAgICAgICAgaWYgKERvY3VtZW50TG9hZGVyKiBkb2N1bWVudExvYWRlciA9IGZy
YW1lLT5sb2FkZXIoKS5kb2N1bWVudExvYWRlcigpKQorICAgICAgICAgICAgICAgIHN1cHBsZW1l
bnQtPm1fbmF2aWdhdGlvblN0YXJ0ID0gZG9jdW1lbnRMb2FkZXItPnRpbWluZygpLT5uYXZpZ2F0
aW9uU3RhcnQoKTsKKyAgICAgICAgfQogICAgIH0KICAgICByZXR1cm4gc3VwcGxlbWVudDsKIH0K
QEAgLTYxLDkgKzgwLDcwIEBAIGNvbnN0IFZlY3RvcjxSZWZQdHI8R2FtZXBhZD4+JiBOYXZpZ2F0
b3JHYW1lcGFkOjpnZXRHYW1lcGFkcyhOYXZpZ2F0b3IqIG5hdmlnYXRvCiAKIGNvbnN0IFZlY3Rv
cjxSZWZQdHI8R2FtZXBhZD4+JiBOYXZpZ2F0b3JHYW1lcGFkOjpnYW1lcGFkcygpCiB7CisgICAg
aWYgKG1fZ2FtZXBhZHMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gbV9nYW1lcGFkczsKKwor
ICAgIGNvbnN0IFZlY3RvcjxQbGF0Zm9ybUdhbWVwYWQqPiYgcGxhdGZvcm1HYW1lcGFkcyA9IHBs
YXRmb3JtU3RyYXRlZ2llcygpLT5nYW1lcGFkU3RyYXRlZ3koKS0+cGxhdGZvcm1HYW1lcGFkcygp
OworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBsYXRmb3JtR2FtZXBhZHMuc2l6ZSgp
OyArK2kpIHsKKyAgICAgICAgaWYgKCFwbGF0Zm9ybUdhbWVwYWRzW2ldKSB7CisgICAgICAgICAg
ICBBU1NFUlQoIW1fZ2FtZXBhZHNbaV0pOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
IH0KKworICAgICAgICBBU1NFUlQobV9nYW1lcGFkc1tpXSk7CisgICAgICAgIG1fZ2FtZXBhZHNb
aV0tPnVwZGF0ZUZyb21QbGF0Zm9ybUdhbWVwYWQoKnBsYXRmb3JtR2FtZXBhZHNbaV0pOworICAg
IH0KKwogICAgIHJldHVybiBtX2dhbWVwYWRzOwogfQogCit2b2lkIE5hdmlnYXRvckdhbWVwYWQ6
OmdhbWVwYWRzQmVjYW1lVmlzaWJsZSgpCit7CisgICAgY29uc3QgVmVjdG9yPFBsYXRmb3JtR2Ft
ZXBhZCo+JiBwbGF0Zm9ybUdhbWVwYWRzID0gcGxhdGZvcm1TdHJhdGVnaWVzKCktPmdhbWVwYWRT
dHJhdGVneSgpLT5wbGF0Zm9ybUdhbWVwYWRzKCk7CisgICAgbV9nYW1lcGFkcy5yZXNpemUocGxh
dGZvcm1HYW1lcGFkcy5zaXplKCkpOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBs
YXRmb3JtR2FtZXBhZHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKCFwbGF0Zm9ybUdhbWVw
YWRzW2ldKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgbV9nYW1lcGFkc1tpXSA9
IEdhbWVwYWQ6OmNyZWF0ZSgqcGxhdGZvcm1HYW1lcGFkc1tpXSwgaSk7CisgICAgfQorfQorCit2
b2lkIE5hdmlnYXRvckdhbWVwYWQ6OmdhbWVwYWRDb25uZWN0ZWQodW5zaWduZWQgaW5kZXgpCit7
CisgICAgLy8gSWYgdGhpcyBpcyB0aGUgZmlyc3QgZ2FtZXBhZCB0aGlzIE5hdmlnYXRvciBvYmpl
Y3QgaGFzIHNlZW4sIHRoZW4gYWxsIGdhbWVwYWRzIGp1c3QgYmVjYW1lIHZpc2libGUuCisgICAg
aWYgKG1fZ2FtZXBhZHMuaXNFbXB0eSgpKSB7CisgICAgICAgIGdhbWVwYWRzQmVjYW1lVmlzaWJs
ZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gVGhlIG5ldyBpbmRleCBzaG91
bGQgYWxyZWFkeSBmaXQgaW4gdGhlIGV4aXN0aW5nIGFycmF5LCBvciBzaG91bGQgYmUgZXhhY3Rs
eSBvbmUgcGFzdC10aGUtZW5kIG9mIHRoZSBleGlzdGluZyBhcnJheS4KKyAgICBBU1NFUlQoaW5k
ZXggPD0gbV9nYW1lcGFkcy5zaXplKCkpOworCisgICAgY29uc3QgVmVjdG9yPFBsYXRmb3JtR2Ft
ZXBhZCo+JiBwbGF0Zm9ybUdhbWVwYWRzID0gcGxhdGZvcm1TdHJhdGVnaWVzKCktPmdhbWVwYWRT
dHJhdGVneSgpLT5wbGF0Zm9ybUdhbWVwYWRzKCk7CisgICAgQVNTRVJUKGluZGV4IDwgcGxhdGZv
cm1HYW1lcGFkcy5zaXplKCkpOworICAgIEFTU0VSVChwbGF0Zm9ybUdhbWVwYWRzW2luZGV4XSk7
CisKKyAgICBpZiAoaW5kZXggPCBtX2dhbWVwYWRzLnNpemUoKSkKKyAgICAgICAgbV9nYW1lcGFk
c1tpbmRleF0gPSBHYW1lcGFkOjpjcmVhdGUoKnBsYXRmb3JtR2FtZXBhZHNbaW5kZXhdLCBpbmRl
eCk7CisgICAgZWxzZSBpZiAoaW5kZXggPT0gbV9nYW1lcGFkcy5zaXplKCkpCisgICAgICAgIG1f
Z2FtZXBhZHMuYXBwZW5kKEdhbWVwYWQ6OmNyZWF0ZSgqcGxhdGZvcm1HYW1lcGFkc1tpbmRleF0s
IGluZGV4KSk7Cit9CisKK3ZvaWQgTmF2aWdhdG9yR2FtZXBhZDo6Z2FtZXBhZERpc2Nvbm5lY3Rl
ZCh1bnNpZ25lZCBpbmRleCkKK3sKKyAgICAvLyBJZiB0aGlzIE5hdmlnYXRvciBoYXNuJ3Qgc2Vl
biBhbnkgZ2FtZXBhZHMgeWV0IGl0cyBWZWN0b3Igd2lsbCBzdGlsbCBiZSBlbXB0eS4KKyAgICBp
ZiAoIW1fZ2FtZXBhZHMuc2l6ZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQoaW5k
ZXggPCBtX2dhbWVwYWRzLnNpemUoKSk7CisgICAgQVNTRVJUKG1fZ2FtZXBhZHNbaW5kZXhdKTsK
KworICAgIG1fZ2FtZXBhZHNbaW5kZXhdID0gbnVsbHB0cjsKK30KKwogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKEdBTUVQQUQpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2dhbWVwYWQvTmF2aWdhdG9yR2FtZXBhZC5oIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9nYW1lcGFkL05hdmlnYXRvckdhbWVwYWQuaAppbmRleCA1NTc5MGE0Li40NmY3
NDE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dhbWVwYWQvTmF2aWdhdG9y
R2FtZXBhZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2FtZXBhZC9OYXZpZ2F0b3JH
YW1lcGFkLmgKQEAgLTM5LDE2ICszOSwyNyBAQCBjbGFzcyBOYXZpZ2F0b3I7CiBjbGFzcyBOYXZp
Z2F0b3JHYW1lcGFkIDogcHVibGljIFN1cHBsZW1lbnQ8TmF2aWdhdG9yPiB7CiBwdWJsaWM6CiAg
ICAgTmF2aWdhdG9yR2FtZXBhZCgpOworICAgIHZpcnR1YWwgfk5hdmlnYXRvckdhbWVwYWQoKTsK
IAogICAgIHN0YXRpYyBOYXZpZ2F0b3JHYW1lcGFkKiBmcm9tKE5hdmlnYXRvciopOwogCisgICAg
Ly8gVGhlIGFycmF5IG9mIEdhbWVwYWRzIG1pZ2h0IGJlIHNwYXJzZS4KKyAgICAvLyBOdWxsIGNo
ZWNraW5nIGVhY2ggZW50cnkgaXMgbmVjZXNzYXJ5LgogICAgIHN0YXRpYyBjb25zdCBWZWN0b3I8
UmVmUHRyPEdhbWVwYWQ+PiYgZ2V0R2FtZXBhZHMoTmF2aWdhdG9yKik7CiAKKyAgICBkb3VibGUg
bmF2aWdhdGlvblN0YXJ0KCkgY29uc3QgeyByZXR1cm4gbV9uYXZpZ2F0aW9uU3RhcnQ7IH0KKwor
ICAgIHZvaWQgZ2FtZXBhZENvbm5lY3RlZCh1bnNpZ25lZCBpbmRleCk7CisgICAgdm9pZCBnYW1l
cGFkRGlzY29ubmVjdGVkKHVuc2lnbmVkIGluZGV4KTsKKwogcHJpdmF0ZToKICAgICBzdGF0aWMg
Y29uc3QgY2hhciogc3VwcGxlbWVudE5hbWUoKTsKIAorICAgIHZvaWQgZ2FtZXBhZHNCZWNhbWVW
aXNpYmxlKCk7CisKICAgICBjb25zdCBWZWN0b3I8UmVmUHRyPEdhbWVwYWQ+PiYgZ2FtZXBhZHMo
KTsKIAorICAgIGRvdWJsZSBtX25hdmlnYXRpb25TdGFydDsKICAgICBWZWN0b3I8UmVmUHRyPEdh
bWVwYWQ+PiBtX2dhbWVwYWRzOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5leHAuaW4gYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgppbmRleCBmZGVlMjkx
Li5hYWY3YTU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgpAQCAtMzQzOSwzICszNDM5LDcgQEAgX19a
TjdXZWJDb3JlNFBhZ2UxMXNldFZpZXdNb2RlRU5TMF84Vmlld01vZGVFCiAjaWYgRU5BQkxFKFdF
Ql9USU1JTkcpCiBfX1pOSzdXZWJDb3JlMjBSZXNvdXJjZVJlc3BvbnNlQmFzZTE4cmVzb3VyY2VM
b2FkVGltaW5nRXYKICNlbmRpZgorCisjaWYgRU5BQkxFKEdBTUVQQUQpCitfX1pON1dlYkNvcmUx
OEhJREdhbWVwYWRMaXN0ZW5lcjZzaGFyZWRFdgorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggYmVlZDEwZi4uNGUxNWQ3
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagpAQCAtMTkyMyw2ICsxOTIzLDEyIEBACiAJCTUxQTRCQjBBMTk1NEQ2MTYwMEZBNUMyRSAv
KiBHYW1lcGFkLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUxQTRCQjA3MTk1NEQ2MTYwMEZBNUMyRSAvKiBHYW1lcGFkLmNwcCAqLzsgfTsKIAkJNTFB
NEJCMTAxOTU0RDYyNzAwRkE1QzJFIC8qIE5hdmlnYXRvckdhbWVwYWQuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFBNEJCMEQxOTU0RDYyNzAwRkE1
QzJFIC8qIE5hdmlnYXRvckdhbWVwYWQuY3BwICovOyB9OwogCQk1MUE5RDlFNjE5NUI4RjQ3MDAx
QjJCNUMgLyogR2FtZXBhZFN0cmF0ZWd5Q2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUE5RDlFNTE5NUI4RjQ3MDAxQjJCNUMgLyogR2FtZXBh
ZFN0cmF0ZWd5Q2xpZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJNTFBOUQ5RTkxOTVCOTMxRjAwMUIyQjVDIC8qIEdhbWVwYWRNYW5hZ2VyLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxQTlEOUU3
MTk1QjkzMUYwMDFCMkI1QyAvKiBHYW1lcGFkTWFuYWdlci5jcHAgKi87IH07CisJCTUxQTlEOUVB
MTk1QjkzMUYwMDFCMkI1QyAvKiBHYW1lcGFkTWFuYWdlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFBOUQ5RTgxOTVCOTMxRjAwMUIyQjVDIC8qIEdh
bWVwYWRNYW5hZ2VyLmggKi87IH07CisJCTUxQTlEOUYzMTk1Qjk1MDMwMDFCMkI1QyAvKiBISURH
YW1lcGFkLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDUxQTlEOUVGMTk1Qjk1MDMwMDFCMkI1QyAvKiBISURHYW1lcGFkLmNwcCAqLzsgfTsKKwkJNTFB
OUQ5RjQxOTVCOTUwMzAwMUIyQjVDIC8qIEhJREdhbWVwYWQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxQTlEOUYwMTk1Qjk1MDMwMDFCMkI1QyAvKiBI
SURHYW1lcGFkLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJNTFBOUQ5RjUxOTVCOTUwMzAwMUIyQjVDIC8qIEhJREdhbWVwYWRMaXN0ZW5lci5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUE5RDlGMTE5
NUI5NTAzMDAxQjJCNUMgLyogSElER2FtZXBhZExpc3RlbmVyLmNwcCAqLzsgfTsKKwkJNTFBOUQ5
RjYxOTVCOTUwMzAwMUIyQjVDIC8qIEhJREdhbWVwYWRMaXN0ZW5lci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFBOUQ5RjIxOTVCOTUwMzAwMUIyQjVD
IC8qIEhJREdhbWVwYWRMaXN0ZW5lci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTUxQUEzRjZGMEJENUFBOUUwMDg5Mjk3MSAvKiBSZXNvdXJjZUxv
YWRlck1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDUxQUEzRjZFMEJENUFBOUUwMDg5Mjk3MSAvKiBSZXNvdXJjZUxvYWRlck1hYy5tbSAqLzsgfTsK
IAkJNTFBQkFFMUIxMDNDMThGRjAwOEM1MjYwIC8qIFNvY2tldFN0cmVhbUVycm9yLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUFCQUUxQTEwM0MxOEZG
MDA4QzUyNjAgLyogU29ja2V0U3RyZWFtRXJyb3IuaCAqLzsgfTsKIAkJNTFBQkFFMUUxMDNDMTkx
MzAwOEM1MjYwIC8qIFNvY2tldFN0cmVhbUhhbmRsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFBQkFFMUMxMDNDMTkxMzAwOEM1MjYwIC8qIFNvY2tl
dFN0cmVhbUhhbmRsZS5oICovOyB9OwpAQCAtOTAwMSw2ICs5MDA3LDEyIEBACiAJCTUxQTRCQjBF
MTk1NEQ2MjcwMEZBNUMyRSAvKiBOYXZpZ2F0b3JHYW1lcGFkLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IE5hdmlnYXRvckdhbWVwYWQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNTFBNEJCMEYxOTU0RDYyNzAwRkE1QzJFIC8qIE5hdmlnYXRvckdhbWVwYWQuaWRs
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IE5hdmlnYXRvckdhbWVwYWQuaWRsOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk1MUE5RDlFNTE5NUI4RjQ3MDAxQjJCNUMgLyogR2FtZXBhZFN0
cmF0ZWd5Q2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdhbWVwYWRT
dHJhdGVneUNsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MUE5RDlFNzE5
NUI5MzFGMDAxQjJCNUMgLyogR2FtZXBhZE1hbmFnZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gR2FtZXBhZE1hbmFnZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk1MUE5RDlFODE5NUI5MzFGMDAxQjJCNUMgLyogR2FtZXBhZE1hbmFnZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR2FtZXBhZE1hbmFnZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTFBOUQ5RUYxOTVCOTUwMzAwMUIyQjVDIC8qIEhJREdh
bWVwYWQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSElER2FtZXBh
ZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxQTlEOUYwMTk1Qjk1MDMwMDFC
MkI1QyAvKiBISURHYW1lcGFkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhJ
REdhbWVwYWQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTFBOUQ5RjExOTVCOTUw
MzAwMUIyQjVDIC8qIEhJREdhbWVwYWRMaXN0ZW5lci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBISURHYW1lcGFkTGlzdGVuZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk1MUE5RDlGMjE5NUI5NTAzMDAxQjJCNUMgLyogSElER2FtZXBhZExpc3Rl
bmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhJREdhbWVwYWRMaXN0ZW5l
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MUFBM0Y2RTBCRDVBQTlFMDA4OTI5
NzEgLyogUmVzb3VyY2VMb2FkZXJNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpj
cHA7IHBhdGggPSBSZXNvdXJjZUxvYWRlck1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNTFBQkFFMUExMDNDMThGRjAwOEM1MjYwIC8qIFNvY2tldFN0cmVhbUVycm9yLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNvY2tldFN0cmVhbUVycm9yLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxQUJBRTFDMTAzQzE5MTMwMDhDNTI2MCAvKiBTb2Nr
ZXRTdHJlYW1IYW5kbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU29ja2V0
U3RyZWFtSGFuZGxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNjA3MCw2ICsx
NjA4Miw4IEBACiAJCQkJNTE2QzYyMUQxOTUwRDQ4NzAwMzM3RTc1IC8qIEdhbWVwYWRFdmVudC5j
cHAgKi8sCiAJCQkJNTE2QzYyMUUxOTUwRDQ4NzAwMzM3RTc1IC8qIEdhbWVwYWRFdmVudC5oICov
LAogCQkJCTUxNkM2MjFGMTk1MEQ0ODcwMDMzN0U3NSAvKiBHYW1lcGFkRXZlbnQuaWRsICovLAor
CQkJCTUxQTlEOUU3MTk1QjkzMUYwMDFCMkI1QyAvKiBHYW1lcGFkTWFuYWdlci5jcHAgKi8sCisJ
CQkJNTFBOUQ5RTgxOTVCOTMxRjAwMUIyQjVDIC8qIEdhbWVwYWRNYW5hZ2VyLmggKi8sCiAJCQkJ
NTFBNEJCMEQxOTU0RDYyNzAwRkE1QzJFIC8qIE5hdmlnYXRvckdhbWVwYWQuY3BwICovLAogCQkJ
CTUxQTRCQjBFMTk1NEQ2MjcwMEZBNUMyRSAvKiBOYXZpZ2F0b3JHYW1lcGFkLmggKi8sCiAJCQkJ
NTFBNEJCMEYxOTU0RDYyNzAwRkE1QzJFIC8qIE5hdmlnYXRvckdhbWVwYWQuaWRsICovLApAQCAt
MTYzNzEsNiArMTYzODUsMTAgQEAKIAkJCQlFMUJBNjZGMDE3NDJCRDg2MDBDMjAyNTEgLyogRHlu
YW1pY0xpbmtlckludGVycG9zaW5nLmggKi8sCiAJCQkJMUNBMTlFMDMwREMyNTU5NTAwNjVBOTk0
IC8qIEV2ZW50TG9vcE1hYy5tbSAqLywKIAkJCQk1MTRCM0Y3NTBDNzIyMDU1MDAwNTMwREYgLyog
RmlsZVN5c3RlbU1hYy5tbSAqLywKKwkJCQk1MUE5RDlFRjE5NUI5NTAzMDAxQjJCNUMgLyogSElE
R2FtZXBhZC5jcHAgKi8sCisJCQkJNTFBOUQ5RjAxOTVCOTUwMzAwMUIyQjVDIC8qIEhJREdhbWVw
YWQuaCAqLywKKwkJCQk1MUE5RDlGMTE5NUI5NTAzMDAxQjJCNUMgLyogSElER2FtZXBhZExpc3Rl
bmVyLmNwcCAqLywKKwkJCQk1MUE5RDlGMjE5NUI5NTAzMDAxQjJCNUMgLyogSElER2FtZXBhZExp
c3RlbmVyLmggKi8sCiAJCQkJOTM1QzQ3NkUwOUFDNEQ3MzAwQTZBQUI0IC8qIEtleUV2ZW50TWFj
Lm1tICovLAogCQkJCTUyMUQ0NkY1MTFBRUM5ODEwMDUxNDYxMyAvKiBLaWxsUmluZ01hYy5tbSAq
LywKIAkJCQk5MzUyMDg0NDA5QkQ0M0I5MDBGMjAzOEQgLyogTGFuZ3VhZ2UubW0gKi8sCkBAIC0y
NDgxNSw2ICsyNDgzMyw3IEBACiAJCQkJQkMzQzM5QjcwQzBEM0Q4RDAwNUY0RDdBIC8qIEpTTWVk
aWFMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlEM0E5NEE0NzEyMkRDNDBGMDBBMzdCQkMgLyog
SlNNZWRpYVF1ZXJ5TGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0M1MzQzRkQxN0I3NEI2MzAw
NDIzMkYwIC8qIEpTTWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
NTFBOUQ5RjYxOTVCOTUwMzAwMUIyQjVDIC8qIEhJREdhbWVwYWRMaXN0ZW5lci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQ0Q5REUxNzUxN0FBQzc0QzAwRUEzODZEIC8qIEpTTWVkaWFTb3VyY2UuaCBp
biBIZWFkZXJzICovLAogCQkJCTA3QzU5QjcyMTdGNzlDN0MwMDBGQkNCQiAvKiBKU01lZGlhU291
cmNlU3RhdGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwNzI3N0U0RDE3RDAxOENDMDAxNTUzNEQg
LyogSlNNZWRpYVN0cmVhbS5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNTU5Myw2ICsyNTYxMiw3IEBA
CiAJCQkJNDM5MDQ2REMxMkRBMjVFODAwQUY4MEEyIC8qIFJlbmRlck1hdGhNTEZyYWN0aW9uLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwN0FCOTk2RjE4REEzQzc0MDAxODc3MUUgLyogUlRDQ29uZmln
dXJhdGlvblByaXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTQzOTA0NkRFMTJEQTI1RTgwMEFG
ODBBMiAvKiBSZW5kZXJNYXRoTUxNYXRoLmggaW4gSGVhZGVycyAqLywKKwkJCQk1MUE5RDlGNDE5
NUI5NTAzMDAxQjJCNUMgLyogSElER2FtZXBhZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDM5MDQ2
RTAxMkRBMjVFODAwQUY4MEEyIC8qIFJlbmRlck1hdGhNTE9wZXJhdG9yLmggaW4gSGVhZGVycyAq
LywKIAkJCQk0MzkwNDZFMDEyREEyNUU4MDBCRjgwQTMgLyogUmVuZGVyTWF0aE1MUmFkaWNhbE9w
ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk0MzkwNDZFMjEyREEyNUU4MDBBRjgwQTIgLyog
UmVuZGVyTWF0aE1MUm9vdC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNjU1OSw2ICsyNjU3OSw3IEBA
CiAJCQkJODUwMzFCNTEwQTQ0RUZDNzAwRjk5MkUwIC8qIFdoZWVsRXZlbnQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTkzRUM0NEEyMTg4RjRCQjgwMDY2MURGMSAvKiBXaGVlbEV2ZW50RGVsdGFUcmFj
a2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzgwRjQ3NDA5QTExQUI0MDAxRkRCMzQgLyogV2lk
Z2V0LmggaW4gSGVhZGVycyAqLywKKwkJCQk1MUE5RDlFQTE5NUI5MzFGMDAxQjJCNUMgLyogR2Ft
ZXBhZE1hbmFnZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0MTFEQ0IxMTY0QzM5QTgwMEQ0OUJD
MSAvKiBXaWR0aENhY2hlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzlCMDJFRjBFQTJEQkM0MDBD
NTQ1NzAgLyogV2lkdGhJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM4MjQzRTkwRDBD
RkQ3NTAwNDYwQzhGIC8qIFdpbmRvd0ZlYXR1cmVzLmggaW4gSGVhZGVycyAqLywKQEAgLTI4NDY5
LDYgKzI4NDkwLDcgQEAKIAkJCQlCMkZBM0QzRTBBQjc1QTZGMDAwRTVBQzQgLyogSlNTVkdBbmlt
YXRlZEludGVnZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjJGQTNENDAwQUI3NUE2RjAwMEU1
QUM0IC8qIEpTU1ZHQW5pbWF0ZWRMZW5ndGguY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjJGQTNE
NDIwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHQW5pbWF0ZWRMZW5ndGhMaXN0LmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTUxQTlEOUYzMTk1Qjk1MDMwMDFCMkI1QyAvKiBISURHYW1lcGFkLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUIyRkEzRDQ0MEFCNzVBNkYwMDBFNUFDNCAvKiBKU1NWR0FuaW1h
dGVkTnVtYmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyRkEzRDQ2MEFCNzVBNkYwMDBFNUFD
NCAvKiBKU1NWR0FuaW1hdGVkTnVtYmVyTGlzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMkZB
M0Q0QTBBQjc1QTZGMDAwRTVBQzQgLyogSlNTVkdBbmltYXRlZFByZXNlcnZlQXNwZWN0UmF0aW8u
Y3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yOTQ2OSw2ICsyOTQ5MSw3IEBACiAJCQkJQjI1NTk5ODQw
RDAwRDhCQTAwQkI4MjVDIC8qIFNWR0ZFSW1hZ2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjIy
Mjc5RUUwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0ZFSW1hZ2VFbGVtZW50LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUIyMjI3OUYxMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdGRUxpZ2h0RWxlbWVudC5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQk1MUE5RDlGNTE5NUI5NTAzMDAxQjJCNUMgLyogSElER2Ft
ZXBhZExpc3RlbmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyMjI3OUYzMEQwMEJGMjIwMDcx
Qjc4MiAvKiBTVkdGRU1lcmdlRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMjIyNzlG
NjBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHRkVNZXJnZU5vZGVFbGVtZW50LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTg0MjI0MTkzMTA3RTc4QTcwMDc2NkE4NyAvKiBTVkdGRU1vcnBob2xvZ3lFbGVt
ZW50LmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjk4NzEsNiArMjk4OTQsNyBAQAogCQkJCTdBRjlC
MjAyMThDRkIyREYwMEM2NEJFRiAvKiBWVFRSZWdpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
RTE1QTM2RDkxMTA0NTcyNzAwQjdCNjM5IC8qIFhNTE5TTmFtZXMuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMUFDRTUzRUEwQThEMThFNzAwMjI5NDdEIC8qIFhNTFNlcmlhbGl6ZXIuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJNTFBOUQ5RTkxOTVCOTMxRjAwMUIyQjVDIC8qIEdhbWVwYWRNYW5hZ2Vy
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTU5MDVBREJGMTMwMkYzQ0UwMEYxMTZERiAvKiBYTUxU
cmVlVmlld2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBQjdGQzY4MEE4QjkyRUMwMEQ5RDM3
QiAvKiBYUGF0aEV2YWx1YXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5NzhEMDdDQzE0NUEx
MDJFMDA5NjkwOEQgLyogWFBhdGhFeGNlcHRpb24uY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvSElER2FtZXBhZC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tYWMvSElER2FtZXBhZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uMGU1YTgyNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21hYy9ISURHYW1lcGFkLmNwcApAQCAtMCwwICsxLDE3NSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJISURHYW1lcGFkLmgiCisKKyNpZiBF
TkFCTEUoR0FNRVBBRCkKKworI2luY2x1ZGUgPElPS2l0L2hpZC9JT0hJREVsZW1lbnQuaD4KKyNp
bmNsdWRlIDxJT0tpdC9oaWQvSU9ISURVc2FnZVRhYmxlcy5oPgorI2luY2x1ZGUgPElPS2l0L2hp
ZC9JT0hJRFZhbHVlLmg+CisjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CisjaW5jbHVkZSA8
d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK0hJREdhbWVwYWQ6OkhJREdhbWVwYWQoSU9ISUREZXZpY2VS
ZWYgaGlkRGV2aWNlKQorICAgIDogbV9oaWREZXZpY2UoaGlkRGV2aWNlKQoreworICAgIG1fY29u
bmVjdFRpbWUgPSBtX2xhc3RVcGRhdGVUaW1lID0gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1l
KCk7CisKKyAgICBDRk51bWJlclJlZiBjZlZlbmRvcklEID0gKENGTnVtYmVyUmVmKUlPSElERGV2
aWNlR2V0UHJvcGVydHkoaGlkRGV2aWNlLCBDRlNUUihrSU9ISURWZW5kb3JJREtleSkpOworICAg
IENGTnVtYmVyUmVmIGNmUHJvZHVjdElEID0gKENGTnVtYmVyUmVmKUlPSElERGV2aWNlR2V0UHJv
cGVydHkoaGlkRGV2aWNlLCBDRlNUUihrSU9ISURQcm9kdWN0SURLZXkpKTsKKworICAgIGludCB2
ZW5kb3JJRCwgcHJvZHVjdElEOworICAgIENGTnVtYmVyR2V0VmFsdWUoY2ZWZW5kb3JJRCwga0NG
TnVtYmVySW50VHlwZSwgJnZlbmRvcklEKTsKKyAgICBDRk51bWJlckdldFZhbHVlKGNmUHJvZHVj
dElELCBrQ0ZOdW1iZXJJbnRUeXBlLCAmcHJvZHVjdElEKTsKKworICAgIENGU3RyaW5nUmVmIGNm
UHJvZHVjdE5hbWUgPSAoQ0ZTdHJpbmdSZWYpSU9ISUREZXZpY2VHZXRQcm9wZXJ0eShoaWREZXZp
Y2UsIENGU1RSKGtJT0hJRFByb2R1Y3RLZXkpKTsKKyAgICBTdHJpbmcgcHJvZHVjdE5hbWUoY2ZQ
cm9kdWN0TmFtZSk7CisKKyAgICAvLyBDdXJyZW50bHkgdGhlIHNwZWMgaGFzIG5vIGZvcm1hdHRp
bmcgZm9yIHRoZSBpZCBzdHJpbmcuCisgICAgLy8gVGhpcyBzdHJpbmcgZm9ybWF0dGluZyBtYXRj
aGVzIEZpcmVmb3guCisgICAgbV9pZCA9IFN0cmluZzo6Zm9ybWF0KCIleC0leC0lcyIsIHZlbmRv
cklELCBwcm9kdWN0SUQsIHByb2R1Y3ROYW1lLnV0ZjgoKS5kYXRhKCkpOworCisgICAgaW5pdEVs
ZW1lbnRzKCk7Cit9CisKK3ZvaWQgSElER2FtZXBhZDo6aW5pdEVsZW1lbnRzKCkKK3sKKyAgICBS
ZXRhaW5QdHI8Q0ZBcnJheVJlZj4gZWxlbWVudHMgPSBhZG9wdENGKElPSElERGV2aWNlQ29weU1h
dGNoaW5nRWxlbWVudHMobV9oaWREZXZpY2UuZ2V0KCksIE5VTEwsIGtJT0hJRE9wdGlvbnNUeXBl
Tm9uZSkpOworICAgIGluaXRFbGVtZW50c0Zyb21BcnJheShlbGVtZW50cy5nZXQoKSk7CisKKyAg
ICAvLyBCdXR0b25zIGFyZSBzcGVjaWZpZWQgdG8gYXBwZWFyIGhpZ2hlc3QgcHJpb3JpdHkgZmly
c3QgaW4gdGhlIGFycmF5LgorICAgIHN0ZDo6c29ydChtX2J1dHRvbnMuYmVnaW4oKSwgbV9idXR0
b25zLmVuZCgpLCBbXShjb25zdCBzdGQ6OnVuaXF1ZV9wdHI8SElER2FtZXBhZEJ1dHRvbj4mIGEs
IGNvbnN0IHN0ZDo6dW5pcXVlX3B0cjxISURHYW1lcGFkQnV0dG9uPiYgYikgeworICAgICAgICBy
ZXR1cm4gYS0+cHJpb3JpdHkgPCBiLT5wcmlvcml0eTsKKyAgICB9KTsKKworICAgIG1fYXhpc1Zh
bHVlcy5yZXNpemUobV9heGVzLnNpemUoKSk7CisgICAgbV9idXR0b25WYWx1ZXMucmVzaXplKG1f
YnV0dG9ucy5zaXplKCkpOworfQorCit2b2lkIEhJREdhbWVwYWQ6OmluaXRFbGVtZW50c0Zyb21B
cnJheShDRkFycmF5UmVmIGVsZW1lbnRzKQoreworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBDRkFycmF5R2V0Q291bnQoZWxlbWVudHMpOyArK2kpIHsKKyAgICAgICAgSU9ISURFbGVtZW50
UmVmIGVsZW1lbnQgPSAoSU9ISURFbGVtZW50UmVmKUNGQXJyYXlHZXRWYWx1ZUF0SW5kZXgoZWxl
bWVudHMsIGkpOworICAgICAgICBpZiAoQ0ZHZXRUeXBlSUQoZWxlbWVudCkgIT0gSU9ISURFbGVt
ZW50R2V0VHlwZUlEKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAvLyBBcyBh
IHBoeXNpY2FsIGVsZW1lbnQgY2FuIGFwcGVhciBpbiB0aGUgZGV2aWNlIHR3aWNlIChpbiBkaWZm
ZXJlbnQgY29sbGVjdGlvbnMpIGFuZCBjYW4gYmUKKyAgICAgICAgLy8gcmVwcmVzZW50ZWQgYnkg
ZGlmZmVyZW50IElPSElERWxlbWVudFJlZiBvYmplY3RzLCB3ZSBsb29rIGF0IHRoZSBJT0hJREVs
ZW1lbnRDb29raWUgd2hpY2gKKyAgICAgICAgLy8gaXMgbWVhbnQgdG8gYmUgdW5pcXVlIGZvciBl
YWNoIHBoeXNpY2FsIGVsZW1lbnQuCisgICAgICAgIElPSElERWxlbWVudENvb2tpZSBjb29raWUg
PSBJT0hJREVsZW1lbnRHZXRDb29raWUoZWxlbWVudCk7CisgICAgICAgIGlmIChtX2VsZW1lbnRN
YXAuY29udGFpbnMoY29va2llKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIElP
SElERWxlbWVudFR5cGUgdHlwZSA9IElPSElERWxlbWVudEdldFR5cGUoZWxlbWVudCk7CisKKyAg
ICAgICAgaWYgKCh0eXBlID09IGtJT0hJREVsZW1lbnRUeXBlSW5wdXRfTWlzYyB8fCB0eXBlID09
IGtJT0hJREVsZW1lbnRUeXBlSW5wdXRfQnV0dG9uKSAmJiBtYXliZUFkZEJ1dHRvbihlbGVtZW50
KSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmICgodHlwZSA9PSBrSU9ISURF
bGVtZW50VHlwZUlucHV0X01pc2MgfHwgdHlwZSA9PSBrSU9ISURFbGVtZW50VHlwZUlucHV0X0F4
aXMpICYmIG1heWJlQWRkQXhpcyhlbGVtZW50KSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisg
ICAgICAgIGlmICh0eXBlID09IGtJT0hJREVsZW1lbnRUeXBlQ29sbGVjdGlvbikKKyAgICAgICAg
ICAgIGluaXRFbGVtZW50c0Zyb21BcnJheShJT0hJREVsZW1lbnRHZXRDaGlsZHJlbihlbGVtZW50
KSk7CisgICAgfQorfQorCitib29sIEhJREdhbWVwYWQ6Om1heWJlQWRkQnV0dG9uKElPSElERWxl
bWVudFJlZiBlbGVtZW50KQoreworICAgIHVpbnQzMl90IHVzYWdlUGFnZSA9IElPSElERWxlbWVu
dEdldFVzYWdlUGFnZShlbGVtZW50KTsKKyAgICBpZiAodXNhZ2VQYWdlICE9IGtISURQYWdlX0J1
dHRvbikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgdWludDMyX3QgdXNhZ2UgPSBJT0hJ
REVsZW1lbnRHZXRVc2FnZShlbGVtZW50KTsKKyAgICBpZiAoIXVzYWdlKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBDRkluZGV4IG1pbiA9IElPSElERWxlbWVudEdldExvZ2ljYWxNaW4o
ZWxlbWVudCk7CisgICAgQ0ZJbmRleCBtYXggPSBJT0hJREVsZW1lbnRHZXRMb2dpY2FsTWF4KGVs
ZW1lbnQpOworCisgICAgbV9idXR0b25zLmFwcGVuZChzdGQ6Om1ha2VfdW5pcXVlPEhJREdhbWVw
YWRCdXR0b24+KHVzYWdlLCBtaW4sIG1heCkpOworCisgICAgSU9ISURFbGVtZW50Q29va2llIGNv
b2tpZSA9IElPSElERWxlbWVudEdldENvb2tpZShlbGVtZW50KTsKKyAgICBtX2VsZW1lbnRNYXAu
c2V0KGNvb2tpZSwgbV9idXR0b25zLmxhc3QoKS5nZXQoKSk7CisKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworYm9vbCBISURHYW1lcGFkOjptYXliZUFkZEF4aXMoSU9ISURFbGVtZW50UmVmIGVsZW1l
bnQpCit7CisgICAgdWludDMyX3QgdXNhZ2VQYWdlID0gSU9ISURFbGVtZW50R2V0VXNhZ2VQYWdl
KGVsZW1lbnQpOworICAgIGlmICh1c2FnZVBhZ2UgIT0ga0hJRFBhZ2VfR2VuZXJpY0Rlc2t0b3Ap
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHVpbnQzMl90IHVzYWdlID0gSU9ISURFbGVt
ZW50R2V0VXNhZ2UoZWxlbWVudCk7CisgICAgLy8gVGhpcyByYW5nZSBjb3ZlcnMgdGhlIHN0YW5k
YXJkIGF4aXMgdXNhZ2VzLgorICAgIGlmICh1c2FnZSA8IGtISURVc2FnZV9HRF9YIHx8IHVzYWdl
ID4ga0hJRFVzYWdlX0dEX1J6KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBDRkluZGV4
IG1pbiA9IElPSElERWxlbWVudEdldFBoeXNpY2FsTWluKGVsZW1lbnQpOworICAgIENGSW5kZXgg
bWF4ID0gSU9ISURFbGVtZW50R2V0UGh5c2ljYWxNYXgoZWxlbWVudCk7CisKKyAgICBtX2F4ZXMu
YXBwZW5kKHN0ZDo6bWFrZV91bmlxdWU8SElER2FtZXBhZEF4aXM+KG1pbiwgbWF4KSk7CisKKyAg
ICBJT0hJREVsZW1lbnRDb29raWUgY29va2llID0gSU9ISURFbGVtZW50R2V0Q29va2llKGVsZW1l
bnQpOworICAgIG1fZWxlbWVudE1hcC5zZXQoY29va2llLCBtX2F4ZXMubGFzdCgpLmdldCgpKTsK
KworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIEhJREdhbWVwYWQ6OnZhbHVlQ2hhbmdlZChJ
T0hJRFZhbHVlUmVmIHZhbHVlKQoreworICAgIElPSElERWxlbWVudENvb2tpZSBjb29raWUgPSBJ
T0hJREVsZW1lbnRHZXRDb29raWUoSU9ISURWYWx1ZUdldEVsZW1lbnQodmFsdWUpKTsKKyAgICBI
SURHYW1lcGFkRWxlbWVudCogZWxlbWVudCA9IG1fZWxlbWVudE1hcC5nZXQoY29va2llKTsKKwor
ICAgIC8vIFRoaXMgbWlnaHQgYmUgYW4gZWxlbWVudCB3ZSBkb24ndCBjdXJyZW50bHkgaGFuZGxl
IGFzIGlucHV0IHNvIHdlIGNhbiBza2lwIGl0LgorICAgIGlmICghZWxlbWVudCkKKyAgICAgICAg
cmV0dXJuOworCisgICAgZWxlbWVudC0+cmF3VmFsdWUgPSBJT0hJRFZhbHVlR2V0U2NhbGVkVmFs
dWUodmFsdWUsIGtJT0hJRFZhbHVlU2NhbGVUeXBlUGh5c2ljYWwpOworCisgICAgaWYgKGVsZW1l
bnQtPmlzQnV0dG9uKCkpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fYnV0
dG9ucy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgaWYgKG1fYnV0dG9uc1tpXS5nZXQoKSA9
PSBlbGVtZW50KQorICAgICAgICAgICAgICAgIG1fYnV0dG9uVmFsdWVzW2ldID0gZWxlbWVudC0+
bm9ybWFsaXplZFZhbHVlKCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKGVsZW1lbnQtPmlz
QXhpcygpKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2F4ZXMuc2l6ZSgp
OyArK2kpIHsKKyAgICAgICAgICAgIGlmIChtX2F4ZXNbaV0uZ2V0KCkgPT0gZWxlbWVudCkKKyAg
ICAgICAgICAgICAgICBtX2F4aXNWYWx1ZXNbaV0gPSBlbGVtZW50LT5ub3JtYWxpemVkVmFsdWUo
KTsKKyAgICAgICAgfQorICAgIH0gZWxzZQorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KworICAgIG1fbGFzdFVwZGF0ZVRpbWUgPSBtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKEdBTUVQQUQp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvSElER2FtZXBhZC5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0hJREdhbWVwYWQuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi43ZTUxYjhlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWFjL0hJREdhbWVwYWQuaApAQCAtMCwwICsxLDEyNCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgSElER2FtZXBhZF9oCisjZGVmaW5lIEhJREdhbWVwYWRfaAorCisjaWYg
RU5BQkxFKEdBTUVQQUQpCisKKyNpbmNsdWRlICJQbGF0Zm9ybUdhbWVwYWQuaCIKKyNpbmNsdWRl
IDxJT0tpdC9oaWQvSU9ISUREZXZpY2UuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2lu
Y2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdHJ1Y3Qg
SElER2FtZXBhZEVsZW1lbnQgeworICAgIEhJREdhbWVwYWRFbGVtZW50KGRvdWJsZSB0aGVNaW4s
IGRvdWJsZSB0aGVNYXgpCisgICAgICAgIDogbWluKHRoZU1pbikKKyAgICAgICAgLCBtYXgodGhl
TWF4KQorICAgICAgICAsIHJhd1ZhbHVlKHRoZU1pbikKKyAgICB7CisgICAgfQorICAgIAorICAg
IHZpcnR1YWwgfkhJREdhbWVwYWRFbGVtZW50KCkKKyAgICB7CisgICAgfQorCisgICAgZG91Ymxl
IG1pbjsKKyAgICBkb3VibGUgbWF4OworICAgIGRvdWJsZSByYXdWYWx1ZTsKKworICAgIHZpcnR1
YWwgYm9vbCBpc0J1dHRvbigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBi
b29sIGlzQXhpcygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgICB2aXJ0dWFsIGRvdWJs
ZSBub3JtYWxpemVkVmFsdWUoKSA9IDA7Cit9OworCitzdHJ1Y3QgSElER2FtZXBhZEJ1dHRvbiA6
IHB1YmxpYyBISURHYW1lcGFkRWxlbWVudCB7CisgICAgSElER2FtZXBhZEJ1dHRvbih1aW50MzJf
dCB0aGVQcmlvcml0eSwgZG91YmxlIG1pbiwgZG91YmxlIG1heCkKKyAgICAgICAgOiBISURHYW1l
cGFkRWxlbWVudChtaW4sIG1heCkKKyAgICAgICAgLCBwcmlvcml0eSh0aGVQcmlvcml0eSkKKyAg
ICB7CisgICAgfQorCisgICAgdWludDMyX3QgcHJpb3JpdHk7CisKKyAgICB2aXJ0dWFsIGJvb2wg
aXNCdXR0b24oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisKKyAgICAvLyBCdXR0
b25zIG5vcm1hbGl6ZSB0byB0aGUgcmFuZ2UgKDAuMCkgLSAoMS4wKQorICAgIHZpcnR1YWwgZG91
YmxlIG5vcm1hbGl6ZWRWYWx1ZSgpIG92ZXJyaWRlCisgICAgeworICAgICAgICByZXR1cm4gKHJh
d1ZhbHVlIC0gbWluKSAvIChtYXggLSBtaW4pOworICAgIH0KK307CisKK3N0cnVjdCBISURHYW1l
cGFkQXhpcyA6IHB1YmxpYyBISURHYW1lcGFkRWxlbWVudCB7CisgICAgSElER2FtZXBhZEF4aXMo
ZG91YmxlIG1pbiwgZG91YmxlIG1heCkKKyAgICAgICAgOiBISURHYW1lcGFkRWxlbWVudChtaW4s
IG1heCkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCBib29sIGlzQXhpcygpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKworICAgIC8vIEF4ZXMgbm9ybWFsaXplIHRvIHRoZSBy
YW5nZSAoLTEuMCkgLSAoMS4wKQorICAgIHZpcnR1YWwgZG91YmxlIG5vcm1hbGl6ZWRWYWx1ZSgp
IG92ZXJyaWRlCisgICAgeworICAgICAgICByZXR1cm4gKCgocmF3VmFsdWUgLSBtaW4pIC8gKG1h
eCAtIG1pbikpICogMikgLSAxOworICAgIH0KK307CisKK2NsYXNzIEhJREdhbWVwYWQgOiBwdWJs
aWMgUGxhdGZvcm1HYW1lcGFkIHsKK3B1YmxpYzoKKyAgICBISURHYW1lcGFkKElPSElERGV2aWNl
UmVmKTsKKworICAgIElPSElERGV2aWNlUmVmIGhpZERldmljZSgpIGNvbnN0IHsgcmV0dXJuIG1f
aGlkRGV2aWNlLmdldCgpOyB9CisKKyAgICB2b2lkIHZhbHVlQ2hhbmdlZChJT0hJRFZhbHVlUmVm
KTsKKworICAgIHZpcnR1YWwgY29uc3QgVmVjdG9yPGRvdWJsZT4mIGF4aXNWYWx1ZXMoKSBjb25z
dCBvdmVycmlkZSBmaW5hbCB7IHJldHVybiBtX2F4aXNWYWx1ZXM7IH0KKyAgICB2aXJ0dWFsIGNv
bnN0IFZlY3Rvcjxkb3VibGU+JiBidXR0b25WYWx1ZXMoKSBjb25zdCBvdmVycmlkZSBmaW5hbCB7
IHJldHVybiBtX2J1dHRvblZhbHVlczsgfQorCitwcml2YXRlOgorICAgIHZvaWQgaW5pdEVsZW1l
bnRzKCk7CisgICAgdm9pZCBpbml0RWxlbWVudHNGcm9tQXJyYXkoQ0ZBcnJheVJlZik7CisKKyAg
ICBib29sIG1heWJlQWRkQnV0dG9uKElPSElERWxlbWVudFJlZik7CisgICAgYm9vbCBtYXliZUFk
ZEF4aXMoSU9ISURFbGVtZW50UmVmKTsKKworICAgIFJldGFpblB0cjxJT0hJRERldmljZVJlZj4g
bV9oaWREZXZpY2U7CisKKyAgICBIYXNoTWFwPElPSElERWxlbWVudENvb2tpZSwgSElER2FtZXBh
ZEVsZW1lbnQqPiBtX2VsZW1lbnRNYXA7CisKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEhJ
REdhbWVwYWRCdXR0b24+PiBtX2J1dHRvbnM7CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxI
SURHYW1lcGFkQXhpcz4+IG1fYXhlczsKKyAgICBWZWN0b3I8ZG91YmxlPiBtX2J1dHRvblZhbHVl
czsKKyAgICBWZWN0b3I8ZG91YmxlPiBtX2F4aXNWYWx1ZXM7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoR0FNRVBBRCkKKyNlbmRpZiAvLyBISURHYW1l
cGFkTGlzdGVuZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0hJ
REdhbWVwYWRMaXN0ZW5lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvSElER2Ft
ZXBhZExpc3RlbmVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MGRj
NWM1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0hJREdh
bWVwYWRMaXN0ZW5lci5jcHAKQEAgLTAsMCArMSwxNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSElER2FtZXBhZExpc3RlbmVyLmgiCisKKyNpZiBFTkFC
TEUoR0FNRVBBRCkKKworI2luY2x1ZGUgIlBsYXRmb3JtR2FtZXBhZC5oIgorI2luY2x1ZGUgPHd0
Zi9NYWluVGhyZWFkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIFJldGFpblB0
cjxDRkRpY3Rpb25hcnlSZWY+IGRldmljZU1hdGNoaW5nRGljdGlvbmFyeSh1aW50MzJfdCB1c2Fn
ZVBhZ2UsIHVpbnQzMl90IHVzYWdlKQoreworICAgIEFTU0VSVCh1c2FnZVBhZ2UpOworICAgIEFT
U0VSVCh1c2FnZSk7CisKKyAgICBSZXRhaW5QdHI8Q0ZOdW1iZXJSZWY+IHBhZ2VOdW1iZXIgPSBh
ZG9wdENGKENGTnVtYmVyQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGtDRk51bWJlckludFR5
cGUsICZ1c2FnZVBhZ2UpKTsKKyAgICBSZXRhaW5QdHI8Q0ZOdW1iZXJSZWY+IHVzYWdlTnVtYmVy
ID0gYWRvcHRDRihDRk51bWJlckNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBrQ0ZOdW1iZXJJ
bnRUeXBlLCAmdXNhZ2UpKTsKKworICAgIENGU3RyaW5nUmVmIGtleXNbXSA9IHsgQ0ZTVFIoa0lP
SElERGV2aWNlVXNhZ2VQYWdlS2V5KSwgQ0ZTVFIoa0lPSElERGV2aWNlVXNhZ2VLZXkpIH07Cisg
ICAgQ0ZOdW1iZXJSZWYgdmFsdWVzW10gPSB7IHBhZ2VOdW1iZXIuZ2V0KCksIHVzYWdlTnVtYmVy
LmdldCgpIH07CisKKyAgICByZXR1cm4gYWRvcHRDRihDRkRpY3Rpb25hcnlDcmVhdGUoa0NGQWxs
b2NhdG9yRGVmYXVsdCwgKGNvbnN0IHZvaWQqKilrZXlzLCAoY29uc3Qgdm9pZCoqKXZhbHVlcywg
MiwgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1
ZUNhbGxCYWNrcykpOworfQorCitzdGF0aWMgdm9pZCBkZXZpY2VBZGRlZENhbGxiYWNrKHZvaWQq
IGNvbnRleHQsIElPUmV0dXJuLCB2b2lkKiwgSU9ISUREZXZpY2VSZWYgZGV2aWNlKQoreworICAg
IEhJREdhbWVwYWRMaXN0ZW5lciogbGlzdGVuZXIgPSBzdGF0aWNfY2FzdDxISURHYW1lcGFkTGlz
dGVuZXIqPihjb250ZXh0KTsKKyAgICBsaXN0ZW5lci0+ZGV2aWNlQWRkZWQoZGV2aWNlKTsKK30K
Kworc3RhdGljIHZvaWQgZGV2aWNlUmVtb3ZlZENhbGxiYWNrKHZvaWQqIGNvbnRleHQsIElPUmV0
dXJuLCB2b2lkKiwgSU9ISUREZXZpY2VSZWYgZGV2aWNlKQoreworICAgIEhJREdhbWVwYWRMaXN0
ZW5lciogbGlzdGVuZXIgPSBzdGF0aWNfY2FzdDxISURHYW1lcGFkTGlzdGVuZXIqPihjb250ZXh0
KTsKKyAgICBsaXN0ZW5lci0+ZGV2aWNlUmVtb3ZlZChkZXZpY2UpOworfQorCitzdGF0aWMgdm9p
ZCBkZXZpY2VWYWx1ZXNDaGFuZ2VkQ2FsbGJhY2sodm9pZCogY29udGV4dCwgSU9SZXR1cm4gcmVz
dWx0LCB2b2lkKiwgSU9ISURWYWx1ZVJlZiB2YWx1ZSkKK3sKKyAgICAvLyBBIG5vbi16ZXJvIHJl
c3VsdCB2YWx1ZSBpbmRpY2F0ZXMgYW4gZXJyb3IgdGhhdCB3ZSBjYW4gZG8gbm90aGluZyBhYm91
dCBmb3IgaW5wdXQgdmFsdWVzLgorICAgIGlmIChyZXN1bHQpCisgICAgICAgIHJldHVybjsKKwor
ICAgIEhJREdhbWVwYWRMaXN0ZW5lciogbGlzdGVuZXIgPSBzdGF0aWNfY2FzdDxISURHYW1lcGFk
TGlzdGVuZXIqPihjb250ZXh0KTsKKyAgICBsaXN0ZW5lci0+dmFsdWVzQ2hhbmdlZCh2YWx1ZSk7
Cit9CisKK0hJREdhbWVwYWRMaXN0ZW5lciYgSElER2FtZXBhZExpc3RlbmVyOjpzaGFyZWQoKQor
eworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxISURHYW1lcGFkTGlzdGVuZXI+IHNoYXJlZExp
c3RlbmVyOworICAgIHJldHVybiBzaGFyZWRMaXN0ZW5lcjsKK30KKworSElER2FtZXBhZExpc3Rl
bmVyOjpISURHYW1lcGFkTGlzdGVuZXIoKQorICAgIDogbV9jbGllbnQobnVsbHB0cikKKyAgICAs
IG1fc2hvdWxkRGlzcGF0Y2hDYWxsYmFja3MoZmFsc2UpCit7CisgICAgbV9tYW5hZ2VyID0gYWRv
cHRDRihJT0hJRE1hbmFnZXJDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwga0lPSElET3B0aW9u
c1R5cGVOb25lKSk7CisKKyAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBqb3lzdGlja0Rp
Y3Rpb25hcnkgPSBkZXZpY2VNYXRjaGluZ0RpY3Rpb25hcnkoa0hJRFBhZ2VfR2VuZXJpY0Rlc2t0
b3AsIGtISURVc2FnZV9HRF9Kb3lzdGljayk7CisgICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJl
Zj4gZ2FtZXBhZERpY3Rpb25hcnkgPSBkZXZpY2VNYXRjaGluZ0RpY3Rpb25hcnkoa0hJRFBhZ2Vf
R2VuZXJpY0Rlc2t0b3AsIGtISURVc2FnZV9HRF9HYW1lUGFkKTsKKworICAgIENGRGljdGlvbmFy
eVJlZiBkZXZpY2VzW10gPSB7IGpveXN0aWNrRGljdGlvbmFyeS5nZXQoKSwgZ2FtZXBhZERpY3Rp
b25hcnkuZ2V0KCkgfTsKKworICAgIFJldGFpblB0cjxDRkFycmF5UmVmPiBtYXRjaGluZ0FycmF5
ID0gYWRvcHRDRihDRkFycmF5Q3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIChjb25zdCB2b2lk
KiopZGV2aWNlcywgMiwgJmtDRlR5cGVBcnJheUNhbGxCYWNrcykpOworCisgICAgSU9ISURNYW5h
Z2VyU2V0RGV2aWNlTWF0Y2hpbmdNdWx0aXBsZShtX21hbmFnZXIuZ2V0KCksIG1hdGNoaW5nQXJy
YXkuZ2V0KCkpOworICAgIElPSElETWFuYWdlclJlZ2lzdGVyRGV2aWNlTWF0Y2hpbmdDYWxsYmFj
ayhtX21hbmFnZXIuZ2V0KCksIGRldmljZUFkZGVkQ2FsbGJhY2ssIHRoaXMpOworICAgIElPSElE
TWFuYWdlclJlZ2lzdGVyRGV2aWNlUmVtb3ZhbENhbGxiYWNrKG1fbWFuYWdlci5nZXQoKSwgZGV2
aWNlUmVtb3ZlZENhbGxiYWNrLCB0aGlzKTsKKyAgICBJT0hJRE1hbmFnZXJTY2hlZHVsZVdpdGhS
dW5Mb29wKG1fbWFuYWdlci5nZXQoKSwgQ0ZSdW5Mb29wR2V0Q3VycmVudCgpLCBrQ0ZSdW5Mb29w
RGVmYXVsdE1vZGUpOworICAgIElPSElETWFuYWdlck9wZW4obV9tYW5hZ2VyLmdldCgpLCBrSU9I
SURPcHRpb25zVHlwZU5vbmUpOworCisgICAgSU9ISURNYW5hZ2VyUmVnaXN0ZXJJbnB1dFZhbHVl
Q2FsbGJhY2sobV9tYW5hZ2VyLmdldCgpLCBkZXZpY2VWYWx1ZXNDaGFuZ2VkQ2FsbGJhY2ssIHRo
aXMpOworCisgICAgLy8gV2UnbGwgaW1tZWRpYXRlbHkgZ2V0IGEgc2VyaWVzIG9mIGNvbm5lY3Rp
b24gYW5kIHZhbHVlIGNhbGxiYWNrcyBmb3IgYWxyZWFkeS1jb25uZWN0ZWQgZ2FtZXBhZHMKKyAg
ICAvLyBidXQgd2UgZG9uJ3Qgd2FudCB0byBub3RpZnkgV2ViQ29yZSBvZiB0aG9zZSBldmVudHMu
CisgICAgLy8gVGhpcyBjYWxsT25NYWluVGhyZWFkIGNhbGwgcmUtZW5hYmxlcyB0aG9zZSBjYWxs
YmFja3MgYWZ0ZXIgdGhlIHJ1bmxvb3AgZW1wdGllcyBvdXQuCisgICAgY2FsbE9uTWFpblRocmVh
ZChbXSgpIHsKKyAgICAgICAgSElER2FtZXBhZExpc3RlbmVyOjpzaGFyZWQoKS5zZXRTaG91bGRE
aXNwYXRjaENhbGxiYWNrcyh0cnVlKTsKKyAgICB9KTsKK30KKwordW5zaWduZWQgSElER2FtZXBh
ZExpc3RlbmVyOjppbmRleEZvck5ld2x5Q29ubmVjdGVkRGV2aWNlKCkKK3sKKyAgICB1bnNpZ25l
ZCBpbmRleCA9IDA7CisgICAgd2hpbGUgKGluZGV4IDwgbV9nYW1lcGFkVmVjdG9yLnNpemUoKSAm
JiBtX2dhbWVwYWRWZWN0b3JbaW5kZXhdKQorICAgICAgICArK2luZGV4OworCisgICAgcmV0dXJu
IGluZGV4OworfQorCit2b2lkIEhJREdhbWVwYWRMaXN0ZW5lcjo6ZGV2aWNlQWRkZWQoSU9ISURE
ZXZpY2VSZWYgZGV2aWNlKQoreworICAgIEFTU0VSVCghbV9nYW1lcGFkTWFwLmdldChkZXZpY2Up
KTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxISURHYW1lcGFkPiBnYW1lcGFkID0gc3RkOjptYWtl
X3VuaXF1ZTxISURHYW1lcGFkPihkZXZpY2UpOworICAgIHVuc2lnbmVkIGluZGV4ID0gaW5kZXhG
b3JOZXdseUNvbm5lY3RlZERldmljZSgpOworCisgICAgaWYgKG1fZ2FtZXBhZFZlY3Rvci5zaXpl
KCkgPD0gaW5kZXgpCisgICAgICAgIG1fZ2FtZXBhZFZlY3Rvci5yZXNpemUoaW5kZXggKyAxKTsK
KworICAgIG1fZ2FtZXBhZFZlY3RvcltpbmRleF0gPSBnYW1lcGFkLmdldCgpOworICAgIG1fZ2Ft
ZXBhZE1hcC5zZXQoZGV2aWNlLCBzdGQ6Om1vdmUoZ2FtZXBhZCkpOworCisgICAgaWYgKG1fY2xp
ZW50ICYmIG1fc2hvdWxkRGlzcGF0Y2hDYWxsYmFja3MpCisgICAgICAgIG1fY2xpZW50LT5nYW1l
cGFkQ29ubmVjdGVkKGluZGV4KTsKK30KKwordm9pZCBISURHYW1lcGFkTGlzdGVuZXI6OmRldmlj
ZVJlbW92ZWQoSU9ISUREZXZpY2VSZWYgZGV2aWNlKQoreworICAgIHN0ZDo6cGFpcjxzdGQ6OnVu
aXF1ZV9wdHI8SElER2FtZXBhZD4sIHVuc2lnbmVkPiByZW1vdmVkR2FtZXBhZCA9IHJlbW92ZUdh
bWVwYWRGb3JEZXZpY2UoZGV2aWNlKTsKKyAgICBBU1NFUlQocmVtb3ZlZEdhbWVwYWQuZmlyc3Qp
OworCisgICAgaWYgKG1fY2xpZW50ICYmIG1fc2hvdWxkRGlzcGF0Y2hDYWxsYmFja3MpCisgICAg
ICAgIG1fY2xpZW50LT5nYW1lcGFkRGlzY29ubmVjdGVkKHJlbW92ZWRHYW1lcGFkLnNlY29uZCk7
Cit9CisKK3ZvaWQgSElER2FtZXBhZExpc3RlbmVyOjp2YWx1ZXNDaGFuZ2VkKElPSElEVmFsdWVS
ZWYgdmFsdWUpCit7CisgICAgSU9ISUREZXZpY2VSZWYgZGV2aWNlID0gSU9ISURFbGVtZW50R2V0
RGV2aWNlKElPSElEVmFsdWVHZXRFbGVtZW50KHZhbHVlKSk7CisKKyAgICBISURHYW1lcGFkKiBn
YW1lcGFkID0gbV9nYW1lcGFkTWFwLmdldChkZXZpY2UpOworCisgICAgLy8gV2hlbiBzdGFydGlu
ZyBtb25pdG9yaW5nIHdlIG1pZ2h0IGdldCBhIHZhbHVlIGNoYW5nZWQgY2FsbGJhY2sgYmVmb3Jl
IHdlIGV2ZW4ga25vdyB0aGUgZGV2aWNlIGlzIGNvbm5lY3RlZC4KKyAgICBpZiAoIWdhbWVwYWQp
CisgICAgICAgIHJldHVybjsKKworICAgIGdhbWVwYWQtPnZhbHVlQ2hhbmdlZCh2YWx1ZSk7Cit9
CisKK3N0ZDo6cGFpcjxzdGQ6OnVuaXF1ZV9wdHI8SElER2FtZXBhZD4sIHVuc2lnbmVkPiAgSElE
R2FtZXBhZExpc3RlbmVyOjpyZW1vdmVHYW1lcGFkRm9yRGV2aWNlKElPSElERGV2aWNlUmVmIGRl
dmljZSkKK3sKKyAgICBzdGQ6OnBhaXI8c3RkOjp1bmlxdWVfcHRyPEhJREdhbWVwYWQ+LCB1bnNp
Z25lZD4gcmVzdWx0OworICAgIHJlc3VsdC5maXJzdCA9IG1fZ2FtZXBhZE1hcC50YWtlKGRldmlj
ZSk7CisgICAgQVNTRVJUKHJlc3VsdC5maXJzdCk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbV9nYW1lcGFkVmVjdG9yLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChtX2dhbWVw
YWRWZWN0b3JbaV0gPT0gcmVzdWx0LmZpcnN0LmdldCgpKSB7CisgICAgICAgICAgICByZXN1bHQu
c2Vjb25kID0gaTsKKyAgICAgICAgICAgIG1fZ2FtZXBhZFZlY3RvcltpXSA9IG51bGxwdHI7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShHQU1FUEFE
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0hJREdhbWVwYWRMaXN0
ZW5lci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0hJREdhbWVwYWRMaXN0ZW5lci5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViNGEyZTIKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvSElER2FtZXBhZExpc3RlbmVyLmgK
QEAgLTAsMCArMSw4MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSElER2FtZXBhZExpc3RlbmVy
X2gKKyNkZWZpbmUgSElER2FtZXBhZExpc3RlbmVyX2gKKworI2lmIEVOQUJMRShHQU1FUEFEKQor
CisjaW5jbHVkZSAiSElER2FtZXBhZC5oIgorI2luY2x1ZGUgPElPS2l0L2hpZC9JT0hJRE1hbmFn
ZXIuaD4KKyNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgor
I2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBISURHYW1lcGFkTGlzdGVuZXJDbGll
bnQgeworcHVibGljOgorICAgIHZpcnR1YWwgfkhJREdhbWVwYWRMaXN0ZW5lckNsaWVudCgpIHsg
fQorCisgICAgdmlydHVhbCB2b2lkIGdhbWVwYWRDb25uZWN0ZWQodW5zaWduZWQgaW5kZXgpID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgZ2FtZXBhZERpc2Nvbm5lY3RlZCh1bnNpZ25lZCBpbmRleCkg
PSAwOworfTsKKworY2xhc3MgSElER2FtZXBhZExpc3RlbmVyIHsKKyAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShISURHYW1lcGFkTGlzdGVuZXIpOworICAgIGZyaWVuZCBjbGFzcyBOZXZlckRlc3Ry
b3llZDxISURHYW1lcGFkTGlzdGVuZXI+OworcHVibGljOgorICAgIHN0YXRpYyBISURHYW1lcGFk
TGlzdGVuZXImIHNoYXJlZCgpOworCisgICAgdm9pZCBzZXRDbGllbnQoSElER2FtZXBhZExpc3Rl
bmVyQ2xpZW50KiBjbGllbnQpIHsgbV9jbGllbnQgPSBjbGllbnQ7IH0KKworICAgIHZvaWQgZGV2
aWNlQWRkZWQoSU9ISUREZXZpY2VSZWYpOworICAgIHZvaWQgZGV2aWNlUmVtb3ZlZChJT0hJRERl
dmljZVJlZik7CisgICAgdm9pZCB2YWx1ZXNDaGFuZ2VkKElPSElEVmFsdWVSZWYpOworCisgICAg
Y29uc3QgVmVjdG9yPFBsYXRmb3JtR2FtZXBhZCo+JiBwbGF0Zm9ybUdhbWVwYWRzKCkgY29uc3Qg
eyByZXR1cm4gbV9nYW1lcGFkVmVjdG9yOyB9CisKKyAgICB2b2lkIHNldFNob3VsZERpc3BhdGNo
Q2FsbGJhY2tzKGJvb2wgc2hvdWxkRGlzcGF0Y2hDYWxsYmFja3MpIHsgbV9zaG91bGREaXNwYXRj
aENhbGxiYWNrcyA9IHNob3VsZERpc3BhdGNoQ2FsbGJhY2tzOyB9CisKK3ByaXZhdGU6CisgICAg
SElER2FtZXBhZExpc3RlbmVyKCk7CisKKyAgICBzdGQ6OnBhaXI8c3RkOjp1bmlxdWVfcHRyPEhJ
REdhbWVwYWQ+LCB1bnNpZ25lZD4gcmVtb3ZlR2FtZXBhZEZvckRldmljZShJT0hJRERldmljZVJl
Zik7CisKKyAgICB1bnNpZ25lZCBpbmRleEZvck5ld2x5Q29ubmVjdGVkRGV2aWNlKCk7CisKKyAg
ICBWZWN0b3I8UGxhdGZvcm1HYW1lcGFkKj4gbV9nYW1lcGFkVmVjdG9yOworICAgIEhhc2hNYXA8
SU9ISUREZXZpY2VSZWYsIHN0ZDo6dW5pcXVlX3B0cjxISURHYW1lcGFkPj4gbV9nYW1lcGFkTWFw
OworCisgICAgUmV0YWluUHRyPElPSElETWFuYWdlclJlZj4gbV9tYW5hZ2VyOworCisgICAgSElE
R2FtZXBhZExpc3RlbmVyQ2xpZW50KiBtX2NsaWVudDsKKyAgICBib29sIG1fc2hvdWxkRGlzcGF0
Y2hDYWxsYmFja3M7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBF
TkFCTEUoR0FNRVBBRCkKKyNlbmRpZiAvLyBISURHYW1lcGFkTGlzdGVuZXJfaApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRl
eCA4ZTNkNzkxLi4zZjgzZTllIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyIEBACisyMDE0LTA2LTI1
ICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgSElELWJh
c2VkIGdhbWVwYWQgaW1wbGVtZW50YXRpb24gZm9yIE1hYworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM0MzI0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
RGVhbiBKYWNrc29uLgorCisgICAgICAgICogV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisKIDIwMTQtMDYtMjMgIFJ5dWFuIENob2kgIDxyeXVhbi5jaG9pQHNhbXN1bmcuY29tPgog
CiAgICAgICAgIFtFRkxdIFJlbW92ZSB0aGUgV2ViS2l0MSBFRkwgY29kZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9X
ZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMWZkZTdhYy4uYjU3
ZjBiNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCkBAIC0xMTMsNiArMTEzLDggQEAKIAkJNTE1OEY2RUYxMDZEODYyQTAwQUY0NTdDIC8qIFdl
Ykhpc3RvcnlEZWxlZ2F0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTE1OEY2RUUxMDZEODYyQTAwQUY0NTdDIC8qIFdlYkhpc3RvcnlEZWxlZ2F0ZS5o
ICovOyB9OwogCQk1MTg1RjYyNjEwNzEyQjgwMDA3QUEzOTMgLyogV2ViTmF2aWdhdGlvbkRhdGEu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxODVGNjI1
MTA3MTJCODAwMDdBQTM5MyAvKiBXZWJOYXZpZ2F0aW9uRGF0YS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUxODVGNjI4MTA3MTJCOTcwMDdBQTM5
MyAvKiBXZWJOYXZpZ2F0aW9uRGF0YS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUxODVGNjI3MTA3MTJCOTcwMDdBQTM5MyAvKiBXZWJOYXZpZ2F0aW9u
RGF0YS5tbSAqLzsgfTsKKwkJNTFBOUQ5RUQxOTVCOTQ5RjAwMUIyQjVDIC8qIFdlYkhJREdhbWVw
YWRDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1MUE5RDlFQjE5NUI5NDlGMDAxQjJCNUMgLyogV2ViSElER2FtZXBhZENvbnRyb2xsZXIu
aCAqLzsgfTsKKwkJNTFBOUQ5RUUxOTVCOTQ5RjAwMUIyQjVDIC8qIFdlYkhJREdhbWVwYWRDb250
cm9sbGVyLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTFBOUQ5RUMxOTVCOTQ5RjAwMUIyQjVDIC8qIFdlYkhJREdhbWVwYWRDb250cm9sbGVyLm1tICov
OyB9OwogCQk1MUFFREVGMTBDRUNGNDU3MDA4NTQzMjggLyogV2ViRGF0YWJhc2VNYW5hZ2VySW50
ZXJuYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUx
QUVERUYwMENFQ0Y0NTcwMDg1NDMyOCAvKiBXZWJEYXRhYmFzZU1hbmFnZXJJbnRlcm5hbC5oICov
OyB9OwogCQk1MUIyQTEwMDBBREIxNUQwMDAyQTlCRUUgLyogV2ViSWNvbkRhdGFiYXNlRGVsZWdh
dGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxQjJB
MEZGMEFEQjE1RDAwMDJBOUJFRSAvKiBXZWJJY29uRGF0YWJhc2VEZWxlZ2F0ZS5oICovOyB9Owog
CQk1MUM3MTRGQjBCMjBGNzlGMDBFNUUzM0MgLyogV2ViQmFja0ZvcndhcmRMaXN0SW50ZXJuYWwu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxQzcxNEZB
MEIyMEY3OUYwMEU1RTMzQyAvKiBXZWJCYWNrRm9yd2FyZExpc3RJbnRlcm5hbC5oICovOyB9OwpA
QCAtNTk5LDYgKzYwMSw4IEBACiAJCTUxQThCNTc5MDQyODM0RjcwMENBMkQzQSAvKiBXZWJWaWV3
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVu
dFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdl
YlZpZXcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9
IDA7IH07CiAJCTUxQThCNTdBMDQyODM0RjcwMENBMkQzQSAvKiBXZWJWaWV3Lm1tICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViVmll
dy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7
IH07CiAJCTUxQThCNTdEMDQyODM1M0EwMENBMkQzQSAvKiBXZWJWaWV3UHJpdmF0ZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJWaWV3UHJp
dmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0g
MDsgfTsKKwkJNTFBOUQ5RUIxOTVCOTQ5RjAwMUIyQjVDIC8qIFdlYkhJREdhbWVwYWRDb250cm9s
bGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkhJREdhbWVwYWRDb250
cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxQTlEOUVDMTk1Qjk0OUYw
MDFCMkI1QyAvKiBXZWJISURHYW1lcGFkQ29udHJvbGxlci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkhJREdhbWVwYWRDb250cm9sbGVyLm1tOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk1MUFFREVGMDBDRUNGNDU3MDA4NTQzMjggLyogV2ViRGF0
YWJhc2VNYW5hZ2VySW50ZXJuYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
V2ViRGF0YWJhc2VNYW5hZ2VySW50ZXJuYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNTFCMkEwRkYwQURCMTVEMDAwMkE5QkVFIC8qIFdlYkljb25EYXRhYmFzZURlbGVnYXRlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkljb25EYXRhYmFzZURlbGVnYXRl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxQzcxNEZBMEIyMEY3OUYwMEU1RTMz
QyAvKiBXZWJCYWNrRm9yd2FyZExpc3RJbnRlcm5hbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBXZWJCYWNrRm9yd2FyZExpc3RJbnRlcm5hbC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtMTU0Nyw2ICsxNTUxLDggQEAKIAkJCQk5MzkxRjI3NDEyMUIzOEJEMDBF
QkY3RTggLyogV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5tbSAqLywKIAkJCQlCQzdGODg0OTEw
Qzg3NzVBMDBENjEzM0QgLyogV2ViR2VvbG9jYXRpb25DbGllbnQuaCAqLywKIAkJCQlCQzdGODg0
QTEwQzg3NzVBMDBENjEzM0QgLyogV2ViR2VvbG9jYXRpb25DbGllbnQubW0gKi8sCisJCQkJNTFB
OUQ5RUIxOTVCOTQ5RjAwMUIyQjVDIC8qIFdlYkhJREdhbWVwYWRDb250cm9sbGVyLmggKi8sCisJ
CQkJNTFBOUQ5RUMxOTVCOTQ5RjAwMUIyQjVDIC8qIFdlYkhJREdhbWVwYWRDb250cm9sbGVyLm1t
ICovLAogCQkJCTUxNDk0Q0Q0MEM3RUJERTAwMDQxNzhDNSAvKiBXZWJJY29uRGF0YWJhc2VDbGll
bnQuaCAqLywKIAkJCQk1MTQ5NENENTBDN0VCREUwMDA0MTc4QzUgLyogV2ViSWNvbkRhdGFiYXNl
Q2xpZW50Lm1tICovLAogCQkJCTA2NjkzRERBMEJGQkE4NTIwMDIxNjA3MiAvKiBXZWJJbnNwZWN0
b3JDbGllbnQuaCAqLywKQEAgLTE3NTksNiArMTc2NSw3IEBACiAJCQkJQTEwQzFENDIxODIwMkZF
RjAwMzY4ODNBIC8qIFdlYlNRTGl0ZURhdGFiYXNlVHJhY2tlckNsaWVudC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJOTM5ODEwNTQwODI0QkYwMTAwOERGMDM4IC8qIFdlYkZyYW1lUHJpdmF0ZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTEwQzFENjIxODIwMzAwRTAwMzY4ODNBIC8qIFNlYXJjaFBvcHVw
TWVudUlPUy5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTFBOUQ5RUQxOTVCOTQ5RjAwMUIyQjVDIC8q
IFdlYkhJREdhbWVwYWRDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk5Mzk4MTA2RTA4
MjRCRjAxMDA4REYwMzggLyogV2ViRnJhbWVWaWV3LmggaW4gSGVhZGVycyAqLywKIAkJCQk5Mzk4
MTA2RjA4MjRCRjAxMDA4REYwMzggLyogV2ViRnJhbWVWaWV3SW50ZXJuYWwuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTkzOTgxMEFGMDgyNEJGMDEwMDhERjAzOCAvKiBXZWJGcmFtZVZpZXdQcml2YXRl
LmggaW4gSGVhZGVycyAqLywKQEAgLTIxMzcsNiArMjE0NCw3IEBACiAJCQkJMDcwRjU0OUMxN0Yx
RTQyQjAwMTY5RTA0IC8qIFdlYlVzZXJNZWRpYUNsaWVudC5tbSBpbiBTb3VyY2VzICovLAogCQkJ
CUUxNjk4MzZDMTEzNDZENTYwMDg5NDExNSAvKiBQcm94eVJ1bnRpbWVPYmplY3QubW0gaW4gU291
cmNlcyAqLywKIAkJCQk3QzAxQ0I4ODE3MzQzNUM5MDBDNUQ4MDcgLyogU2VhcmNoUG9wdXBNZW51
TWFjLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJNTFBOUQ5RUUxOTVCOTQ5RjAwMUIyQjVDIC8qIFdl
YkhJREdhbWVwYWRDb250cm9sbGVyLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQ0VEQTEyREIxNTJD
QkU2ODAwRDlFMDhEIC8qIFdlYkFsdGVybmF0aXZlVGV4dENsaWVudC5tbSBpbiBTb3VyY2VzICov
LAogCQkJCUExMEMxRDYwMTgyMDMwMEUwMDM2ODgzQSAvKiBQb3B1cE1lbnVJT1MubW0gaW4gU291
cmNlcyAqLywKIAkJCQlCNkNFNUMyNDEwMEJDNUNFMDAyMTk5MzYgLyogV2ViQXBwbGljYXRpb25D
YWNoZS5tbSBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvQ2hh
bmdlTG9nIGIvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCmluZGV4IDkwNDM4ZjEuLjk0YjA2
ODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZworKysgYi9Tb3VyY2Uv
V2ViS2l0L21hYy9DaGFuZ2VMb2cKQEAgLTEsNSArMSwyOSBAQAogMjAxNC0wNi0yNSAgQnJhZHkg
RWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+CiAKKyAgICAgICAgQWRkIEhJRC1iYXNlZCBnYW1l
cGFkIGltcGxlbWVudGF0aW9uIGZvciBNYWMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTEzNDMyNAorCisgICAgICAgIFJldmlld2VkIGJ5IERlYW4gSmFj
a3Nvbi4KKworICAgICAgICBBZGQgYSBjbGFzcyB0aGF0IGFjdHMgYXMgYW4gaW50ZXJtZWRpYXJ5
IGJldHdlZW4gdGhlIEdhbWVwYWRTdHJhdGVneUNsaWVudAorICAgICAgICBhbmQgdGhlIEhJREdh
bWVwYWRMaXN0ZW5lcjoKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJISURHYW1lcGFkQ29u
dHJvbGxlci5oOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkhJREdhbWVwYWRDb250cm9s
bGVyLm1tOgorICAgICAgICAoV2ViSElER2FtZXBhZENvbnRyb2xsZXI6OnNoYXJlZCk6CisgICAg
ICAgIChXZWJISURHYW1lcGFkQ29udHJvbGxlcjo6V2ViSElER2FtZXBhZENvbnRyb2xsZXIpOgor
ICAgICAgICAoV2ViSElER2FtZXBhZENvbnRyb2xsZXI6OmdhbWVwYWRDb25uZWN0ZWQpOgorICAg
ICAgICAoV2ViSElER2FtZXBhZENvbnRyb2xsZXI6OmdhbWVwYWREaXNjb25uZWN0ZWQpOgorICAg
ICAgICAoV2ViSElER2FtZXBhZENvbnRyb2xsZXI6OnJlZ2lzdGVyR2FtZXBhZFN0cmF0ZWd5Q2xp
ZW50KToKKyAgICAgICAgKFdlYkhJREdhbWVwYWRDb250cm9sbGVyOjp1bnJlZ2lzdGVyR2FtZXBh
ZFN0cmF0ZWd5Q2xpZW50KToKKworICAgICAgICBJbXBsZW1lbnQgdGhlIHN0cmF0ZWdpZXMgYnkg
dXNpbmcgdGhlIEhJREdhbWVwYWRMaXN0ZW5lcjoKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9X
ZWJQbGF0Zm9ybVN0cmF0ZWdpZXMubW06CisgICAgICAgIChXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6
OnN0YXJ0TW9uaXRvcmluZ0dhbWVwYWRzKToKKyAgICAgICAgKFdlYlBsYXRmb3JtU3RyYXRlZ2ll
czo6c3RvcE1vbml0b3JpbmdHYW1lcGFkcyk6CisgICAgICAgIChXZWJQbGF0Zm9ybVN0cmF0ZWdp
ZXM6OnBsYXRmb3JtR2FtZXBhZHMpOgorCisyMDE0LTA2LTI1ICBCcmFkeSBFaWRzb24gIDxiZWlk
c29uQGFwcGxlLmNvbT4KKwogICAgICAgICBBZGQgbmV3IHBsYXRmb3JtIGdhbWVwYWQgYWJzdHJh
Y3Rpb25zCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
MzQzMjUKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2Vi
SElER2FtZXBhZENvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0
L1dlYkhJREdhbWVwYWRDb250cm9sbGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uYjQ4MzEzNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNv
cmVTdXBwb3J0L1dlYkhJREdhbWVwYWRDb250cm9sbGVyLmgKQEAgLTAsMCArMSw1NyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZm5kZWYgV2ViSElER2FtZXBhZENvbnRyb2xsZXJfaAorI2RlZmluZSBXZWJI
SURHYW1lcGFkQ29udHJvbGxlcl9oCisKKyNpZiBFTkFCTEUoR0FNRVBBRCkKKworI2luY2x1ZGUg
PFdlYkNvcmUvSElER2FtZXBhZExpc3RlbmVyLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgR2FtZXBhZFN0cmF0ZWd5Q2xpZW50OworfQor
CitjbGFzcyBXZWJISURHYW1lcGFkQ29udHJvbGxlciA6IHB1YmxpYyBXZWJDb3JlOjpISURHYW1l
cGFkTGlzdGVuZXJDbGllbnQgeworcHVibGljOgorICAgIHN0YXRpYyBXZWJISURHYW1lcGFkQ29u
dHJvbGxlciYgc2hhcmVkKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgZ2FtZXBhZENvbm5lY3RlZCh1
bnNpZ25lZCBpbmRleCkgb3ZlcnJpZGUgZmluYWw7CisgICAgdmlydHVhbCB2b2lkIGdhbWVwYWRE
aXNjb25uZWN0ZWQodW5zaWduZWQgaW5kZXgpIG92ZXJyaWRlIGZpbmFsOworCisgICAgdm9pZCBy
ZWdpc3RlckdhbWVwYWRTdHJhdGVneUNsaWVudChXZWJDb3JlOjpHYW1lcGFkU3RyYXRlZ3lDbGll
bnQqKTsKKyAgICB2b2lkIHVucmVnaXN0ZXJHYW1lcGFkU3RyYXRlZ3lDbGllbnQoV2ViQ29yZTo6
R2FtZXBhZFN0cmF0ZWd5Q2xpZW50Kik7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIE5ldmVyRGVz
dHJveWVkPFdlYkhJREdhbWVwYWRDb250cm9sbGVyPjsKKworICAgIFdlYkhJREdhbWVwYWRDb250
cm9sbGVyKCk7CisKKyAgICBIYXNoU2V0PFdlYkNvcmU6OkdhbWVwYWRTdHJhdGVneUNsaWVudCo+
IG1fY2xpZW50czsKK307CisKKyNlbmRpZiAvLyBFTkFCTEUoR0FNRVBBRCkKKyNlbmRpZiAvLyBX
ZWJISURHYW1lcGFkQ29udHJvbGxlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9X
ZWJDb3JlU3VwcG9ydC9XZWJISURHYW1lcGFkQ29udHJvbGxlci5tbSBiL1NvdXJjZS9XZWJLaXQv
bWFjL1dlYkNvcmVTdXBwb3J0L1dlYkhJREdhbWVwYWRDb250cm9sbGVyLm1tCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxMTQ2OWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJISURHYW1lcGFkQ29udHJvbGxlci5tbQpA
QCAtMCwwICsxLDY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmIEVOQUJMRShHQU1FUEFEKQorCisjaW1w
b3J0ICJXZWJISURHYW1lcGFkQ29udHJvbGxlci5oIgorI2ltcG9ydCA8V2ViQ29yZS9HYW1lcGFk
U3RyYXRlZ3lDbGllbnQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvSElER2FtZXBhZExpc3RlbmVyLmg+
CisjaW1wb3J0IDxXZWJDb3JlL1BsYXRmb3JtR2FtZXBhZENsaWVudC5oPgorCit1c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKKworV2ViSElER2FtZXBhZENvbnRyb2xsZXImIFdlYkhJREdhbWVwYWRD
b250cm9sbGVyOjpzaGFyZWQoKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxXZWJISURH
YW1lcGFkQ29udHJvbGxlcj4gc2hhcmVkQ2xpZW50OworICAgIHJldHVybiBzaGFyZWRDbGllbnQ7
Cit9CisKK1dlYkhJREdhbWVwYWRDb250cm9sbGVyOjpXZWJISURHYW1lcGFkQ29udHJvbGxlcigp
Cit7CisgICAgSElER2FtZXBhZExpc3RlbmVyOjpzaGFyZWQoKS5zZXRDbGllbnQodGhpcyk7Cit9
CisKK3ZvaWQgV2ViSElER2FtZXBhZENvbnRyb2xsZXI6OmdhbWVwYWRDb25uZWN0ZWQodW5zaWdu
ZWQgaW5kZXgpCit7CisgICAgZm9yIChhdXRvJiBjbGllbnQgOiBtX2NsaWVudHMpCisgICAgICAg
IGNsaWVudC0+cGxhdGZvcm1HYW1lcGFkQ29ubmVjdGVkKGluZGV4KTsKK30KKwordm9pZCBXZWJI
SURHYW1lcGFkQ29udHJvbGxlcjo6Z2FtZXBhZERpc2Nvbm5lY3RlZCh1bnNpZ25lZCBpbmRleCkK
K3sKKyAgICBmb3IgKGF1dG8mIGNsaWVudCA6IG1fY2xpZW50cykKKyAgICAgICAgY2xpZW50LT5w
bGF0Zm9ybUdhbWVwYWREaXNjb25uZWN0ZWQoaW5kZXgpOworfQorCit2b2lkIFdlYkhJREdhbWVw
YWRDb250cm9sbGVyOjpyZWdpc3RlckdhbWVwYWRTdHJhdGVneUNsaWVudChHYW1lcGFkU3RyYXRl
Z3lDbGllbnQqIGNsaWVudCkKK3sKKyAgICBtX2NsaWVudHMuYWRkKGNsaWVudCk7Cit9CisKK3Zv
aWQgV2ViSElER2FtZXBhZENvbnRyb2xsZXI6OnVucmVnaXN0ZXJHYW1lcGFkU3RyYXRlZ3lDbGll
bnQoR2FtZXBhZFN0cmF0ZWd5Q2xpZW50KiBjbGllbnQpCit7CisgICAgbV9jbGllbnRzLnJlbW92
ZShjbGllbnQpOworfQorCisjZW5kaWYgLy8gRU5BQkxFKEdBTUVQQUQpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMubW0g
Yi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMu
bW0KaW5kZXggMjJiNzZhNS4uZjQwZTE4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMv
V2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLm1tCisrKyBiL1NvdXJjZS9XZWJL
aXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5tbQpAQCAtNDAsNiAr
NDAsMTAgQEAKICNpbXBvcnQgPFdlYktpdFN5c3RlbUludGVyZmFjZS5oPgogI2ltcG9ydCA8d3Rm
L05ldmVyRGVzdHJveWVkLmg+CiAKKyNpZiBFTkFCTEUoR0FNRVBBRCkKKyNpbXBvcnQgIldlYkhJ
REdhbWVwYWRDb250cm9sbGVyLmgiCisjZW5kaWYKKwogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7
CiAKIHZvaWQgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjppbml0aWFsaXplSWZOZWNlc3NhcnkoKQpA
QCAtMjIxLDE4ICsyMjUsMTkgQEAgbG9uZyBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OnNldFN0cmlu
Z0ZvclR5cGUoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGNvbnN0IFN0cmluZyYKIH0KIAogI2lmIEVO
QUJMRShHQU1FUEFEKQotdm9pZCBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OnN0YXJ0TW9uaXRvcmlu
Z0dhbWVwYWRzKEdhbWVwYWRTdHJhdGVneUNsaWVudCopCit2b2lkIFdlYlBsYXRmb3JtU3RyYXRl
Z2llczo6c3RhcnRNb25pdG9yaW5nR2FtZXBhZHMoR2FtZXBhZFN0cmF0ZWd5Q2xpZW50KiBjbGll
bnQpCiB7CisgICAgV2ViSElER2FtZXBhZENvbnRyb2xsZXI6OnNoYXJlZCgpLnJlZ2lzdGVyR2Ft
ZXBhZFN0cmF0ZWd5Q2xpZW50KGNsaWVudCk7CiB9CiAKLXZvaWQgV2ViUGxhdGZvcm1TdHJhdGVn
aWVzOjpzdG9wTW9uaXRvcmluZ0dhbWVwYWRzKEdhbWVwYWRTdHJhdGVneUNsaWVudCopCit2b2lk
IFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6c3RvcE1vbml0b3JpbmdHYW1lcGFkcyhHYW1lcGFkU3Ry
YXRlZ3lDbGllbnQqIGNsaWVudCkKIHsKKyAgICBXZWJISURHYW1lcGFkQ29udHJvbGxlcjo6c2hh
cmVkKCkudW5yZWdpc3RlckdhbWVwYWRTdHJhdGVneUNsaWVudChjbGllbnQpOwogfQogCiBjb25z
dCBWZWN0b3I8UGxhdGZvcm1HYW1lcGFkKj4mIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6cGxhdGZv
cm1HYW1lcGFkcygpCiB7Ci0gICAgTmV2ZXJEZXN0cm95ZWQ8VmVjdG9yPFBsYXRmb3JtR2FtZXBh
ZCo+PiBkdW1teUdhbWVwYWRzOwotICAgIHJldHVybiBkdW1teUdhbWVwYWRzOworICAgIHJldHVy
biBISURHYW1lcGFkTGlzdGVuZXI6OnNoYXJlZCgpLnBsYXRmb3JtR2FtZXBhZHMoKTsKIH0KICNl
bmRpZiAvLyBFTkFCTEUoR0FNRVBBRCkKIAo=
</data>
<flag name="commit-queue"
          id="258385"
          type_id="3"
          status="+"
          setter="beidson"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>233878</attachid>
            <date>2014-06-25 21:17:49 -0700</date>
            <delta_ts>2014-06-25 21:49:58 -0700</delta_ts>
            <desc>Patch for landing v2 - Fix *one* style complaint, remove stale #include that will fix the build</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>62268</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBlNDY5MWUyLi42NGZhMGUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsODYg
QEAKIDIwMTQtMDYtMjUgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgogCisgICAg
ICAgIEFkZCBISUQtYmFzZWQgZ2FtZXBhZCBpbXBsZW1lbnRhdGlvbiBmb3IgTWFjCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzQzMjQKKworICAgICAg
ICBSZXZpZXdlZCBieSBEZWFuIEphY2tzb24uCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIChOb3Qg
eWV0IGEgdGVzdGVkIGNvbmZpZykKKworICAgICAgICAqIE1vZHVsZXMvZ2FtZXBhZC9HYW1lcGFk
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdhbWVwYWQ6OkdhbWVwYWQpOgorICAgICAgICAoV2Vi
Q29yZTo6R2FtZXBhZDo6dXBkYXRlRnJvbVBsYXRmb3JtR2FtZXBhZCk6IFVwZGF0ZSB0aGUgR2Ft
ZXBhZOKAmXMgZGF0YSBmcm9tIHRoZSBwYXNzZWQtaW4gUGxhdGZvcm1HYW1lcGFkLgorICAgICAg
ICAqIE1vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkLmg6CisKKyAgICAgICAgKiBNb2R1bGVzL2dhbWVw
YWQvR2FtZXBhZEJ1dHRvbi5oOgorICAgICAgICAoV2ViQ29yZTo6R2FtZXBhZEJ1dHRvbjo6Y3Jl
YXRlKTogQ2hhbmdlIHRvIHVzZSBSZWYgaW5zdGVhZCBvZiBSZWZQdHIuCisKKyAgICAgICAgR2Ft
ZXBhZE1hbmFnZXIgaXMgYSBHYW1lcGFkU3RyYXRlZ3lDbGllbnQgdGhhdCByZWNlaXZlcyBub3Rp
ZmljYXRpb25zIGZyb20gdGhlIHBsYXRmb3JtIGdhbWVwYWQgaW1wbGVtZW50YXRpb24KKyAgICAg
ICAgYW5kIGZvcndhcmRzIHRoZW0gdG8gTmF2aWdhdG9yR2FtZXBhZCBvYmplY3RzLiBJbiB0aGUg
ZnV0dXJlIGl0IHdpbGwgYWxzbyBoYW5kbGUgZXZlbnQgZGlzcGF0Y2ggYW5kIGV4cG9zaW5nCisg
ICAgICAgIGdhbWVwYWRzIHRvIHRoZSBBUEkgbGF5ZXIgd2hlbiBhIGJ1dHRvbiBpcyBwcmVzc2Vk
OgorICAgICAgICAqIE1vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkTWFuYWdlci5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R2FtZXBhZE1hbmFnZXI6OnNoYXJlZCk6CisgICAgICAgIChXZWJD
b3JlOjpHYW1lcGFkTWFuYWdlcjo6R2FtZXBhZE1hbmFnZXIpOgorICAgICAgICAoV2ViQ29yZTo6
R2FtZXBhZE1hbmFnZXI6OnBsYXRmb3JtR2FtZXBhZENvbm5lY3RlZCk6CisgICAgICAgIChXZWJD
b3JlOjpHYW1lcGFkTWFuYWdlcjo6cGxhdGZvcm1HYW1lcGFkRGlzY29ubmVjdGVkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdhbWVwYWRNYW5hZ2VyOjpyZWdpc3Rlck5hdmlnYXRvcik6CisgICAgICAg
IChXZWJDb3JlOjpHYW1lcGFkTWFuYWdlcjo6dW5yZWdpc3Rlck5hdmlnYXRvcik6CisgICAgICAg
ICogTW9kdWxlcy9nYW1lcGFkL0dhbWVwYWRNYW5hZ2VyLmg6CisKKyAgICAgICAgVGhlIE5hdmln
YXRvckdhbWVwYWQgc3VwcGxlbWVudCBhY3R1YWxseSBtYW5hZ2VzIHZpc2liaWxpdHkgb2YgR2Ft
ZXBhZHMgb24gYSBwZXItRE9NV2luZG93IGJhc2lzOgorICAgICAgICAqIE1vZHVsZXMvZ2FtZXBh
ZC9OYXZpZ2F0b3JHYW1lcGFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5hdmlnYXRvckdhbWVw
YWQ6Ok5hdmlnYXRvckdhbWVwYWQpOgorICAgICAgICAoV2ViQ29yZTo6TmF2aWdhdG9yR2FtZXBh
ZDo6fk5hdmlnYXRvckdhbWVwYWQpOgorICAgICAgICAoV2ViQ29yZTo6TmF2aWdhdG9yR2FtZXBh
ZDo6ZnJvbSk6CisgICAgICAgIChXZWJDb3JlOjpOYXZpZ2F0b3JHYW1lcGFkOjpnYW1lcGFkcyk6
CisgICAgICAgIChXZWJDb3JlOjpOYXZpZ2F0b3JHYW1lcGFkOjpnYW1lcGFkc0JlY2FtZVZpc2li
bGUpOgorICAgICAgICAoV2ViQ29yZTo6TmF2aWdhdG9yR2FtZXBhZDo6Z2FtZXBhZENvbm5lY3Rl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpOYXZpZ2F0b3JHYW1lcGFkOjpnYW1lcGFkRGlzY29ubmVj
dGVkKToKKyAgICAgICAgKiBNb2R1bGVzL2dhbWVwYWQvTmF2aWdhdG9yR2FtZXBhZC5oOgorICAg
ICAgICAoV2ViQ29yZTo6TmF2aWdhdG9yR2FtZXBhZDo6bmF2aWdhdGlvblN0YXJ0KToKKworICAg
ICAgICBISURHYW1lcGFkIGlzIGEgUGxhdGZvcm1HYW1lcGFkIHRoYXQgd3JhcHMgYW4gSU9ISURE
ZXZpY2VSZWYgYW5kIGtlZXBzIGlucHV0IHZhbHVlcyB1cGRhdGVkOgorICAgICAgICAqIHBsYXRm
b3JtL21hYy9ISURHYW1lcGFkLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpISURHYW1l
cGFkOjpISURHYW1lcGFkKToKKyAgICAgICAgKFdlYkNvcmU6OkhJREdhbWVwYWQ6OmluaXRFbGVt
ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpISURHYW1lcGFkOjppbml0RWxlbWVudHNGcm9tQXJy
YXkpOgorICAgICAgICAoV2ViQ29yZTo6SElER2FtZXBhZDo6bWF5YmVBZGRCdXR0b24pOgorICAg
ICAgICAoV2ViQ29yZTo6SElER2FtZXBhZDo6bWF5YmVBZGRBeGlzKToKKyAgICAgICAgKFdlYkNv
cmU6OkhJREdhbWVwYWQ6OnZhbHVlQ2hhbmdlZCk6CisgICAgICAgICogcGxhdGZvcm0vbWFjL0hJ
REdhbWVwYWQuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpISURHYW1lcGFkRWxlbWVudDo6
SElER2FtZXBhZEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SElER2FtZXBhZEVsZW1lbnQ6
On5ISURHYW1lcGFkRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpISURHYW1lcGFkRWxlbWVu
dDo6aXNCdXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6SElER2FtZXBhZEVsZW1lbnQ6OmlzQXhp
cyk6CisgICAgICAgIChXZWJDb3JlOjpISURHYW1lcGFkQnV0dG9uOjpISURHYW1lcGFkQnV0dG9u
KToKKyAgICAgICAgKFdlYkNvcmU6OkhJREdhbWVwYWRBeGlzOjpISURHYW1lcGFkQXhpcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpISURHYW1lcGFkOjpoaWREZXZpY2UpOgorCisgICAgICAgIEhJREdh
bWVwYWRMaXN0ZW5lciB3cmFwcyBhbiBJT0hJRE1hbmFnZXJSZWYgYW5kIGNvbnRpbnVvdXNseSBs
aXN0ZW5zIGZvciBjaGFuZ2VzIHRvIEdhbWVwYWQtdHlwZQorICAgICAgICBkZXZpY2VzIHBsdWdn
ZWQgaW4gdG8gdGhlIHN5c3RlbToKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvSElER2FtZXBhZExp
c3RlbmVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpkZXZpY2VNYXRjaGluZ0RpY3Rp
b25hcnkpOgorICAgICAgICAoV2ViQ29yZTo6ZGV2aWNlQWRkZWRDYWxsYmFjayk6CisgICAgICAg
IChXZWJDb3JlOjpkZXZpY2VSZW1vdmVkQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6ZGV2
aWNlVmFsdWVzQ2hhbmdlZENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkhJREdhbWVwYWRM
aXN0ZW5lcjo6c2hhcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OkhJREdhbWVwYWRMaXN0ZW5lcjo6
SElER2FtZXBhZExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkhJREdhbWVwYWRMaXN0ZW5l
cjo6aW5kZXhGb3JOZXdseUNvbm5lY3RlZERldmljZSk6CisgICAgICAgIChXZWJDb3JlOjpISURH
YW1lcGFkTGlzdGVuZXI6OmRldmljZUFkZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkhJREdhbWVw
YWRMaXN0ZW5lcjo6ZGV2aWNlUmVtb3ZlZCk6CisgICAgICAgIChXZWJDb3JlOjpISURHYW1lcGFk
TGlzdGVuZXI6OnZhbHVlc0NoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6SElER2FtZXBhZExp
c3RlbmVyOjpyZW1vdmVHYW1lcGFkRm9yRGV2aWNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMv
SElER2FtZXBhZExpc3RlbmVyLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
Z2FtZXBhZC9OYXZpZ2F0b3JHYW1lcGFkLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OkhJREdhbWVw
YWRMaXN0ZW5lckNsaWVudDo6fkhJREdhbWVwYWRMaXN0ZW5lckNsaWVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpISURHYW1lcGFkTGlzdGVuZXI6OnNldENsaWVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpISURHYW1lcGFkTGlzdGVuZXI6OnBsYXRmb3JtR2FtZXBhZHMpOgorICAgICAgICAoV2ViQ29y
ZTo6SElER2FtZXBhZExpc3RlbmVyOjpzZXRTaG91bGREaXNwYXRjaENhbGxiYWNrcyk6CisKKyAg
ICAgICAgKiBXZWJDb3JlLmV4cC5pbjoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisKKzIwMTQtMDYtMjUgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUu
Y29tPgorCiAgICAgICAgIEFkZCBuZXcgcGxhdGZvcm0gZ2FtZXBhZCBhYnN0cmFjdGlvbnMKICAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNDMyNQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dhbWVwYWQvR2FtZXBhZC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dhbWVwYWQvR2FtZXBhZC5jcHAKaW5kZXggMjBhMGYyOWUu
LjVhZDQwNWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2FtZXBhZC9HYW1l
cGFkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dhbWVwYWQvR2FtZXBhZC5jcHAK
QEAgLTI4LDE1ICsyOCwyMiBAQAogCiAjaWYgRU5BQkxFKEdBTUVQQUQpCiAKKyNpbmNsdWRlICJH
YW1lcGFkQnV0dG9uLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1HYW1lcGFkLmgiCiAjaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotR2FtZXBhZDo6
R2FtZXBhZCgpCi0gICAgOiBtX2luZGV4KDApCitHYW1lcGFkOjpHYW1lcGFkKGNvbnN0IFBsYXRm
b3JtR2FtZXBhZCYgcGxhdGZvcm1HYW1lcGFkLCB1bnNpZ25lZCBpbmRleCkKKyAgICA6IG1faWQo
cGxhdGZvcm1HYW1lcGFkLmlkKCkpCisgICAgLCBtX2luZGV4KGluZGV4KQogICAgICwgbV9jb25u
ZWN0ZWQodHJ1ZSkKLSAgICAsIG1fdGltZXN0YW1wKDAuMCkKKyAgICAsIG1fdGltZXN0YW1wKHBs
YXRmb3JtR2FtZXBhZC5sYXN0VXBkYXRlVGltZSgpKQogeworICAgIG1fYXhlcy5yZXNpemUocGxh
dGZvcm1HYW1lcGFkLmF4aXNWYWx1ZXMoKS5zaXplKCkpOworICAgIHVuc2lnbmVkIGJ1dHRvbkNv
dW50ID0gcGxhdGZvcm1HYW1lcGFkLmJ1dHRvblZhbHVlcygpLnNpemUoKTsKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgYnV0dG9uQ291bnQ7ICsraSkKKyAgICAgICAgbV9idXR0b25zLmFw
cGVuZChHYW1lcGFkQnV0dG9uOjpjcmVhdGUoKSk7CiB9CiAKIEdhbWVwYWQ6On5HYW1lcGFkKCkK
QEAgLTUzLDYgKzYwLDE2IEBAIGNvbnN0IFZlY3RvcjxSZWY8R2FtZXBhZEJ1dHRvbj4+JiBHYW1l
cGFkOjpidXR0b25zKCkgY29uc3QKICAgICByZXR1cm4gbV9idXR0b25zOwogfQogCit2b2lkIEdh
bWVwYWQ6OnVwZGF0ZUZyb21QbGF0Zm9ybUdhbWVwYWQoY29uc3QgUGxhdGZvcm1HYW1lcGFkJiBw
bGF0Zm9ybUdhbWVwYWQpCit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fYXhlcy5z
aXplKCk7ICsraSkKKyAgICAgICAgbV9heGVzW2ldID0gcGxhdGZvcm1HYW1lcGFkLmF4aXNWYWx1
ZXMoKVtpXTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9idXR0b25zLnNpemUoKTsg
KytpKQorICAgICAgICBtX2J1dHRvbnNbaV0tPnNldFZhbHVlKHBsYXRmb3JtR2FtZXBhZC5idXR0
b25WYWx1ZXMoKVtpXSk7CisKKyAgICBtX3RpbWVzdGFtcCA9IHBsYXRmb3JtR2FtZXBhZC5sYXN0
VXBkYXRlVGltZSgpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBF
TkFCTEUoR0FNRVBBRCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2FtZXBh
ZC9HYW1lcGFkLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dhbWVwYWQvR2FtZXBhZC5oCmlu
ZGV4IDI4ZWJlMWEuLmU4MmNlOWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
Z2FtZXBhZC9HYW1lcGFkLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nYW1lcGFkL0dh
bWVwYWQuaApAQCAtMjgsMTggKzI4LDIwIEBACiAKICNpZiBFTkFCTEUoR0FNRVBBRCkKIAotI2lu
Y2x1ZGUgIkdhbWVwYWRCdXR0b24uaCIKLSNpbmNsdWRlIDx3dGYvUmVmLmg+CisjaW5jbHVkZSA8
d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgR2FtZXBh
ZEJ1dHRvbjsKK2NsYXNzIFBsYXRmb3JtR2FtZXBhZDsKKwogY2xhc3MgR2FtZXBhZDogcHVibGlj
IFJlZkNvdW50ZWQ8R2FtZXBhZD4gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEdh
bWVwYWQ+IGNyZWF0ZSgpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8R2FtZXBhZD4gY3JlYXRlKGNv
bnN0IFBsYXRmb3JtR2FtZXBhZCYgcGxhdGZvcm1HYW1lcGFkLCB1bnNpZ25lZCBpbmRleCkKICAg
ICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgR2FtZXBhZCk7CisgICAgICAgIHJldHVy
biBhZG9wdFJlZihuZXcgR2FtZXBhZChwbGF0Zm9ybUdhbWVwYWQsIGluZGV4KSk7CiAgICAgfQog
ICAgIH5HYW1lcGFkKCk7CiAKQEAgLTUyLDggKzU0LDEwIEBAIHB1YmxpYzoKICAgICBjb25zdCBW
ZWN0b3I8ZG91YmxlPiYgYXhlcygpIGNvbnN0OwogICAgIGNvbnN0IFZlY3RvcjxSZWY8R2FtZXBh
ZEJ1dHRvbj4+JiBidXR0b25zKCkgY29uc3Q7CiAKKyAgICB2b2lkIHVwZGF0ZUZyb21QbGF0Zm9y
bUdhbWVwYWQoY29uc3QgUGxhdGZvcm1HYW1lcGFkJik7CisKIHByaXZhdGU6Ci0gICAgR2FtZXBh
ZCgpOworICAgIEdhbWVwYWQoY29uc3QgUGxhdGZvcm1HYW1lcGFkJiwgdW5zaWduZWQgaW5kZXgp
OwogICAgIFN0cmluZyBtX2lkOwogICAgIHVuc2lnbmVkIG1faW5kZXg7CiAgICAgYm9vbCBtX2Nv
bm5lY3RlZDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2FtZXBhZC9HYW1l
cGFkQnV0dG9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dhbWVwYWQvR2FtZXBhZEJ1dHRv
bi5oCmluZGV4IDJkMjU4ZDcuLjEwY2YwZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvZ2FtZXBhZC9HYW1lcGFkQnV0dG9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9nYW1lcGFkL0dhbWVwYWRCdXR0b24uaApAQCAtMjgsMTYgKzI4LDE2IEBACiAKICNpZiBFTkFC
TEUoR0FNRVBBRCkKIAotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3Rm
L1Bhc3NSZWYuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIGNsYXNzIEdhbWVwYWRCdXR0b24gOiBwdWJsaWMgUmVmQ291bnRlZDxHYW1lcGFk
QnV0dG9uPiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8R2FtZXBhZEJ1dHRvbj4g
Y3JlYXRlKCkKKyAgICBzdGF0aWMgUGFzc1JlZjxHYW1lcGFkQnV0dG9uPiBjcmVhdGUoKQogICAg
IHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBHYW1lcGFkQnV0dG9uKTsKKyAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgR2FtZXBhZEJ1dHRvbik7CiAgICAgfQogCiAgICAgYm9vbCBw
cmVzc2VkKCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dhbWVw
YWQvR2FtZXBhZE1hbmFnZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nYW1lcGFkL0dh
bWVwYWRNYW5hZ2VyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYWQw
MTkzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nYW1lcGFkL0dh
bWVwYWRNYW5hZ2VyLmNwcApAQCAtMCwwICsxLDkxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJHYW1lcGFkTWFuYWdlci5oIgorCisjaWYgRU5BQkxFKEdBTUVQ
QUQpCisKKyNpbmNsdWRlICJHYW1lcGFkLmgiCisjaW5jbHVkZSAiR2FtZXBhZFN0cmF0ZWd5Lmgi
CisjaW5jbHVkZSAiTmF2aWdhdG9yR2FtZXBhZC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtR2FtZXBh
ZC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyYXRlZ2llcy5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK0dhbWVwYWRNYW5hZ2VyJiBHYW1lcGFkTWFuYWdlcjo6c2hhcmVkKCkKK3sKKyAgICBz
dGF0aWMgTmV2ZXJEZXN0cm95ZWQ8R2FtZXBhZE1hbmFnZXI+IHNoYXJlZE1hbmFnZXI7CisgICAg
cmV0dXJuIHNoYXJlZE1hbmFnZXI7Cit9CisKK0dhbWVwYWRNYW5hZ2VyOjpHYW1lcGFkTWFuYWdl
cigpCit7CisgICAgcGxhdGZvcm1TdHJhdGVnaWVzKCktPmdhbWVwYWRTdHJhdGVneSgpLT5zdG9w
TW9uaXRvcmluZ0dhbWVwYWRzKHRoaXMpOworfQorCit2b2lkIEdhbWVwYWRNYW5hZ2VyOjpwbGF0
Zm9ybUdhbWVwYWRDb25uZWN0ZWQodW5zaWduZWQgaW5kZXgpCit7CisgICAgZm9yIChhdXRvJiBu
YXZpZ2F0b3IgOiBtX25hdmlnYXRvcnMpCisgICAgICAgIG5hdmlnYXRvci0+Z2FtZXBhZENvbm5l
Y3RlZChpbmRleCk7CisKKyAgICAvLyBGSVhNRTogRmlyZSBjb25uZWN0ZWQgZXZlbnQgdG8gYWxs
IHBhZ2VzIHdpdGggbGlzdGVuZXJzLgorfQorCit2b2lkIEdhbWVwYWRNYW5hZ2VyOjpwbGF0Zm9y
bUdhbWVwYWREaXNjb25uZWN0ZWQodW5zaWduZWQgaW5kZXgpCit7CisgICAgLy8gRklYTUU6IEZp
cmUgZGlzY29ubmVjdGVkIGV2ZW50IHRvIGFsbCBwYWdlcyB3aXRoIGxpc3RlbmVycy4KKworICAg
IGZvciAoYXV0byYgbmF2aWdhdG9yIDogbV9uYXZpZ2F0b3JzKQorICAgICAgICBuYXZpZ2F0b3It
PmdhbWVwYWREaXNjb25uZWN0ZWQoaW5kZXgpOworfQorCit2b2lkIEdhbWVwYWRNYW5hZ2VyOjpy
ZWdpc3Rlck5hdmlnYXRvcihOYXZpZ2F0b3JHYW1lcGFkKiBuYXZpZ2F0b3IpCit7CisgICAgQVNT
RVJUKCFtX25hdmlnYXRvcnMuY29udGFpbnMobmF2aWdhdG9yKSk7CisgICAgbV9uYXZpZ2F0b3Jz
LmFkZChuYXZpZ2F0b3IpOworCisgICAgLy8gRklYTUU6IE1vbml0b3JpbmcgZ2FtZXBhZHMgd2ls
bCBhbHNvIGJlIHJlbGlhbnQgb24gd2hldGhlciBvciBub3QgdGhlcmUgYXJlIGFueQorICAgIC8v
IGNvbm5lY3RlZC9kaXNjb25uZWN0ZWQgZXZlbnQgbGlzdGVuZXJzLgorICAgIC8vIFRob3NlIGV2
ZW50IGxpc3RlbmVycyB3aWxsIGFsc28gbmVlZCB0byByZWdpc3RlciB3aXRoIHRoZSBHYW1lcGFk
TWFuYWdlci4KKyAgICBpZiAobV9uYXZpZ2F0b3JzLnNpemUoKSA9PSAxKQorICAgICAgICBwbGF0
Zm9ybVN0cmF0ZWdpZXMoKS0+Z2FtZXBhZFN0cmF0ZWd5KCktPnN0YXJ0TW9uaXRvcmluZ0dhbWVw
YWRzKHRoaXMpOworfQorCit2b2lkIEdhbWVwYWRNYW5hZ2VyOjp1bnJlZ2lzdGVyTmF2aWdhdG9y
KE5hdmlnYXRvckdhbWVwYWQqIG5hdmlnYXRvcikKK3sKKyAgICBBU1NFUlQobV9uYXZpZ2F0b3Jz
LmNvbnRhaW5zKG5hdmlnYXRvcikpOworICAgIG1fbmF2aWdhdG9ycy5yZW1vdmUobmF2aWdhdG9y
KTsKKworICAgIC8vIEZJWE1FOiBNb25pdG9yaW5nIGdhbWVwYWRzIHdpbGwgYWxzbyBiZSByZWxp
YW50IG9uIHdoZXRoZXIgb3Igbm90IHRoZXJlIGFyZSBhbnkKKyAgICAvLyBjb25uZWN0ZWQvZGlz
Y29ubmVjdGVkIGV2ZW50IGxpc3RlbmVycy4KKyAgICAvLyBUaG9zZSBldmVudCBsaXN0ZW5lcnMg
d2lsbCBhbHNvIG5lZWQgdG8gcmVnaXN0ZXIgd2l0aCB0aGUgR2FtZXBhZE1hbmFnZXIuCisgICAg
aWYgKG1fbmF2aWdhdG9ycy5pc0VtcHR5KCkpCisgICAgICAgIHBsYXRmb3JtU3RyYXRlZ2llcygp
LT5nYW1lcGFkU3RyYXRlZ3koKS0+c3RvcE1vbml0b3JpbmdHYW1lcGFkcyh0aGlzKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKEdBTUVQQUQpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dhbWVwYWQvR2FtZXBhZE1hbmFnZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkTWFuYWdlci5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmOGM3OWUKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dhbWVwYWQvR2FtZXBhZE1hbmFnZXIuaApAQCAtMCwwICsx
LDYyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBHYW1lcGFkTWFuYWdlcl9oCisjZGVmaW5lIEdh
bWVwYWRNYW5hZ2VyX2gKKworI2lmIEVOQUJMRShHQU1FUEFEKQorCisjaW5jbHVkZSAiR2FtZXBh
ZFN0cmF0ZWd5Q2xpZW50LmgiCisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3
dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY2xhc3MgR2FtZXBhZDsKK2NsYXNzIE5hdmlnYXRvckdhbWVwYWQ7CisK
K2NsYXNzIEdhbWVwYWRNYW5hZ2VyIDogcHVibGljIEdhbWVwYWRTdHJhdGVneUNsaWVudCB7Cisg
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoR2FtZXBhZE1hbmFnZXIpOworICAgIGZyaWVuZCBjbGFz
cyBOZXZlckRlc3Ryb3llZDxHYW1lcGFkTWFuYWdlcj47CitwdWJsaWM6CisgICAgc3RhdGljIEdh
bWVwYWRNYW5hZ2VyJiBzaGFyZWQoKTsKKworICAgIHZpcnR1YWwgdm9pZCBwbGF0Zm9ybUdhbWVw
YWRDb25uZWN0ZWQodW5zaWduZWQgaW5kZXgpIG92ZXJyaWRlIGZpbmFsOworICAgIHZpcnR1YWwg
dm9pZCBwbGF0Zm9ybUdhbWVwYWREaXNjb25uZWN0ZWQodW5zaWduZWQgaW5kZXgpIG92ZXJyaWRl
IGZpbmFsOworCisgICAgdm9pZCByZWdpc3Rlck5hdmlnYXRvcihOYXZpZ2F0b3JHYW1lcGFkKik7
CisgICAgdm9pZCB1bnJlZ2lzdGVyTmF2aWdhdG9yKE5hdmlnYXRvckdhbWVwYWQqKTsKKworcHJp
dmF0ZToKKyAgICBHYW1lcGFkTWFuYWdlcigpOworCisgICAgSGFzaFNldDxOYXZpZ2F0b3JHYW1l
cGFkKj4gbV9uYXZpZ2F0b3JzOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYgLy8gRU5BQkxFKEdBTUVQQUQpCisjZW5kaWYgLy8gR2FtZXBhZE1hbmFnZXJfaApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nYW1lcGFkL05hdmlnYXRvckdhbWVwYWQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nYW1lcGFkL05hdmlnYXRvckdhbWVwYWQuY3BwCmlu
ZGV4IDE0MmY3N2IuLjJiZjZjY2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
Z2FtZXBhZC9OYXZpZ2F0b3JHYW1lcGFkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2dhbWVwYWQvTmF2aWdhdG9yR2FtZXBhZC5jcHAKQEAgLTI4LDE0ICsyOCwyOCBAQAogCiAjaWYg
RU5BQkxFKEdBTUVQQUQpCiAKKyNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgorI2luY2x1ZGUg
IkZyYW1lLmgiCiAjaW5jbHVkZSAiR2FtZXBhZC5oIgorI2luY2x1ZGUgIkdhbWVwYWRNYW5hZ2Vy
LmgiCisjaW5jbHVkZSAiR2FtZXBhZFN0cmF0ZWd5LmgiCiAjaW5jbHVkZSAiTmF2aWdhdG9yLmgi
CisjaW5jbHVkZSAiUGxhdGZvcm1HYW1lcGFkLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJhdGVn
aWVzLmgiCiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL1J1
bkxvb3AuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBOYXZpZ2F0b3JHYW1lcGFkOjpOYXZp
Z2F0b3JHYW1lcGFkKCkKKyAgICA6IG1fbmF2aWdhdGlvblN0YXJ0KHN0ZDo6bnVtZXJpY19saW1p
dHM8ZG91YmxlPjo6aW5maW5pdHkoKSkKIHsKKyAgICBHYW1lcGFkTWFuYWdlcjo6c2hhcmVkKCku
cmVnaXN0ZXJOYXZpZ2F0b3IodGhpcyk7Cit9CisKK05hdmlnYXRvckdhbWVwYWQ6On5OYXZpZ2F0
b3JHYW1lcGFkKCkKK3sKKyAgICBHYW1lcGFkTWFuYWdlcjo6c2hhcmVkKCkudW5yZWdpc3Rlck5h
dmlnYXRvcih0aGlzKTsKIH0KIAogY29uc3QgY2hhciogTmF2aWdhdG9yR2FtZXBhZDo6c3VwcGxl
bWVudE5hbWUoKQpAQCAtNTAsNiArNjQsMTEgQEAgTmF2aWdhdG9yR2FtZXBhZCogTmF2aWdhdG9y
R2FtZXBhZDo6ZnJvbShOYXZpZ2F0b3IqIG5hdmlnYXRvcikKICAgICAgICAgYXV0byBuZXdTdXBw
bGVtZW50ID0gc3RkOjptYWtlX3VuaXF1ZTxOYXZpZ2F0b3JHYW1lcGFkPigpOwogICAgICAgICBz
dXBwbGVtZW50ID0gbmV3U3VwcGxlbWVudC5nZXQoKTsKICAgICAgICAgcHJvdmlkZVRvKG5hdmln
YXRvciwgc3VwcGxlbWVudE5hbWUoKSwgc3RkOjptb3ZlKG5ld1N1cHBsZW1lbnQpKTsKKworICAg
ICAgICBpZiAoRnJhbWUqIGZyYW1lID0gbmF2aWdhdG9yLT5mcmFtZSgpKSB7CisgICAgICAgICAg
ICBpZiAoRG9jdW1lbnRMb2FkZXIqIGRvY3VtZW50TG9hZGVyID0gZnJhbWUtPmxvYWRlcigpLmRv
Y3VtZW50TG9hZGVyKCkpCisgICAgICAgICAgICAgICAgc3VwcGxlbWVudC0+bV9uYXZpZ2F0aW9u
U3RhcnQgPSBkb2N1bWVudExvYWRlci0+dGltaW5nKCktPm5hdmlnYXRpb25TdGFydCgpOworICAg
ICAgICB9CiAgICAgfQogICAgIHJldHVybiBzdXBwbGVtZW50OwogfQpAQCAtNjEsOSArODAsNzAg
QEAgY29uc3QgVmVjdG9yPFJlZlB0cjxHYW1lcGFkPj4mIE5hdmlnYXRvckdhbWVwYWQ6OmdldEdh
bWVwYWRzKE5hdmlnYXRvciogbmF2aWdhdG8KIAogY29uc3QgVmVjdG9yPFJlZlB0cjxHYW1lcGFk
Pj4mIE5hdmlnYXRvckdhbWVwYWQ6OmdhbWVwYWRzKCkKIHsKKyAgICBpZiAobV9nYW1lcGFkcy5p
c0VtcHR5KCkpCisgICAgICAgIHJldHVybiBtX2dhbWVwYWRzOworCisgICAgY29uc3QgVmVjdG9y
PFBsYXRmb3JtR2FtZXBhZCo+JiBwbGF0Zm9ybUdhbWVwYWRzID0gcGxhdGZvcm1TdHJhdGVnaWVz
KCktPmdhbWVwYWRTdHJhdGVneSgpLT5wbGF0Zm9ybUdhbWVwYWRzKCk7CisKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgcGxhdGZvcm1HYW1lcGFkcy5zaXplKCk7ICsraSkgeworICAgICAg
ICBpZiAoIXBsYXRmb3JtR2FtZXBhZHNbaV0pIHsKKyAgICAgICAgICAgIEFTU0VSVCghbV9nYW1l
cGFkc1tpXSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIEFT
U0VSVChtX2dhbWVwYWRzW2ldKTsKKyAgICAgICAgbV9nYW1lcGFkc1tpXS0+dXBkYXRlRnJvbVBs
YXRmb3JtR2FtZXBhZCgqcGxhdGZvcm1HYW1lcGFkc1tpXSk7CisgICAgfQorCiAgICAgcmV0dXJu
IG1fZ2FtZXBhZHM7CiB9CiAKK3ZvaWQgTmF2aWdhdG9yR2FtZXBhZDo6Z2FtZXBhZHNCZWNhbWVW
aXNpYmxlKCkKK3sKKyAgICBjb25zdCBWZWN0b3I8UGxhdGZvcm1HYW1lcGFkKj4mIHBsYXRmb3Jt
R2FtZXBhZHMgPSBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+Z2FtZXBhZFN0cmF0ZWd5KCktPnBsYXRm
b3JtR2FtZXBhZHMoKTsKKyAgICBtX2dhbWVwYWRzLnJlc2l6ZShwbGF0Zm9ybUdhbWVwYWRzLnNp
emUoKSk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcGxhdGZvcm1HYW1lcGFkcy5z
aXplKCk7ICsraSkgeworICAgICAgICBpZiAoIXBsYXRmb3JtR2FtZXBhZHNbaV0pCisgICAgICAg
ICAgICBjb250aW51ZTsKKworICAgICAgICBtX2dhbWVwYWRzW2ldID0gR2FtZXBhZDo6Y3JlYXRl
KCpwbGF0Zm9ybUdhbWVwYWRzW2ldLCBpKTsKKyAgICB9Cit9CisKK3ZvaWQgTmF2aWdhdG9yR2Ft
ZXBhZDo6Z2FtZXBhZENvbm5lY3RlZCh1bnNpZ25lZCBpbmRleCkKK3sKKyAgICAvLyBJZiB0aGlz
IGlzIHRoZSBmaXJzdCBnYW1lcGFkIHRoaXMgTmF2aWdhdG9yIG9iamVjdCBoYXMgc2VlbiwgdGhl
biBhbGwgZ2FtZXBhZHMganVzdCBiZWNhbWUgdmlzaWJsZS4KKyAgICBpZiAobV9nYW1lcGFkcy5p
c0VtcHR5KCkpIHsKKyAgICAgICAgZ2FtZXBhZHNCZWNhbWVWaXNpYmxlKCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICAvLyBUaGUgbmV3IGluZGV4IHNob3VsZCBhbHJlYWR5IGZpdCBp
biB0aGUgZXhpc3RpbmcgYXJyYXksIG9yIHNob3VsZCBiZSBleGFjdGx5IG9uZSBwYXN0LXRoZS1l
bmQgb2YgdGhlIGV4aXN0aW5nIGFycmF5LgorICAgIEFTU0VSVChpbmRleCA8PSBtX2dhbWVwYWRz
LnNpemUoKSk7CisKKyAgICBjb25zdCBWZWN0b3I8UGxhdGZvcm1HYW1lcGFkKj4mIHBsYXRmb3Jt
R2FtZXBhZHMgPSBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+Z2FtZXBhZFN0cmF0ZWd5KCktPnBsYXRm
b3JtR2FtZXBhZHMoKTsKKyAgICBBU1NFUlQoaW5kZXggPCBwbGF0Zm9ybUdhbWVwYWRzLnNpemUo
KSk7CisgICAgQVNTRVJUKHBsYXRmb3JtR2FtZXBhZHNbaW5kZXhdKTsKKworICAgIGlmIChpbmRl
eCA8IG1fZ2FtZXBhZHMuc2l6ZSgpKQorICAgICAgICBtX2dhbWVwYWRzW2luZGV4XSA9IEdhbWVw
YWQ6OmNyZWF0ZSgqcGxhdGZvcm1HYW1lcGFkc1tpbmRleF0sIGluZGV4KTsKKyAgICBlbHNlIGlm
IChpbmRleCA9PSBtX2dhbWVwYWRzLnNpemUoKSkKKyAgICAgICAgbV9nYW1lcGFkcy5hcHBlbmQo
R2FtZXBhZDo6Y3JlYXRlKCpwbGF0Zm9ybUdhbWVwYWRzW2luZGV4XSwgaW5kZXgpKTsKK30KKwor
dm9pZCBOYXZpZ2F0b3JHYW1lcGFkOjpnYW1lcGFkRGlzY29ubmVjdGVkKHVuc2lnbmVkIGluZGV4
KQoreworICAgIC8vIElmIHRoaXMgTmF2aWdhdG9yIGhhc24ndCBzZWVuIGFueSBnYW1lcGFkcyB5
ZXQgaXRzIFZlY3RvciB3aWxsIHN0aWxsIGJlIGVtcHR5LgorICAgIGlmICghbV9nYW1lcGFkcy5z
aXplKCkpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVChpbmRleCA8IG1fZ2FtZXBhZHMu
c2l6ZSgpKTsKKyAgICBBU1NFUlQobV9nYW1lcGFkc1tpbmRleF0pOworCisgICAgbV9nYW1lcGFk
c1tpbmRleF0gPSBudWxscHRyOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRp
ZiAvLyBFTkFCTEUoR0FNRVBBRCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
Z2FtZXBhZC9OYXZpZ2F0b3JHYW1lcGFkLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dhbWVw
YWQvTmF2aWdhdG9yR2FtZXBhZC5oCmluZGV4IDU1NzkwYTQuLjQ2Zjc0MTkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2FtZXBhZC9OYXZpZ2F0b3JHYW1lcGFkLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9nYW1lcGFkL05hdmlnYXRvckdhbWVwYWQuaApAQCAtMzks
MTYgKzM5LDI3IEBAIGNsYXNzIE5hdmlnYXRvcjsKIGNsYXNzIE5hdmlnYXRvckdhbWVwYWQgOiBw
dWJsaWMgU3VwcGxlbWVudDxOYXZpZ2F0b3I+IHsKIHB1YmxpYzoKICAgICBOYXZpZ2F0b3JHYW1l
cGFkKCk7CisgICAgdmlydHVhbCB+TmF2aWdhdG9yR2FtZXBhZCgpOwogCiAgICAgc3RhdGljIE5h
dmlnYXRvckdhbWVwYWQqIGZyb20oTmF2aWdhdG9yKik7CiAKKyAgICAvLyBUaGUgYXJyYXkgb2Yg
R2FtZXBhZHMgbWlnaHQgYmUgc3BhcnNlLgorICAgIC8vIE51bGwgY2hlY2tpbmcgZWFjaCBlbnRy
eSBpcyBuZWNlc3NhcnkuCiAgICAgc3RhdGljIGNvbnN0IFZlY3RvcjxSZWZQdHI8R2FtZXBhZD4+
JiBnZXRHYW1lcGFkcyhOYXZpZ2F0b3IqKTsKIAorICAgIGRvdWJsZSBuYXZpZ2F0aW9uU3RhcnQo
KSBjb25zdCB7IHJldHVybiBtX25hdmlnYXRpb25TdGFydDsgfQorCisgICAgdm9pZCBnYW1lcGFk
Q29ubmVjdGVkKHVuc2lnbmVkIGluZGV4KTsKKyAgICB2b2lkIGdhbWVwYWREaXNjb25uZWN0ZWQo
dW5zaWduZWQgaW5kZXgpOworCiBwcml2YXRlOgogICAgIHN0YXRpYyBjb25zdCBjaGFyKiBzdXBw
bGVtZW50TmFtZSgpOwogCisgICAgdm9pZCBnYW1lcGFkc0JlY2FtZVZpc2libGUoKTsKKwogICAg
IGNvbnN0IFZlY3RvcjxSZWZQdHI8R2FtZXBhZD4+JiBnYW1lcGFkcygpOwogCisgICAgZG91Ymxl
IG1fbmF2aWdhdGlvblN0YXJ0OwogICAgIFZlY3RvcjxSZWZQdHI8R2FtZXBhZD4+IG1fZ2FtZXBh
ZHM7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbiBiL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCmluZGV4IGZkZWUyOTEuLmFhZjdhNTkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUuZXhwLmluCkBAIC0zNDM5LDMgKzM0MzksNyBAQCBfX1pON1dlYkNvcmU0UGFnZTEx
c2V0Vmlld01vZGVFTlMwXzhWaWV3TW9kZUUKICNpZiBFTkFCTEUoV0VCX1RJTUlORykKIF9fWk5L
N1dlYkNvcmUyMFJlc291cmNlUmVzcG9uc2VCYXNlMThyZXNvdXJjZUxvYWRUaW1pbmdFdgogI2Vu
ZGlmCisKKyNpZiBFTkFCTEUoR0FNRVBBRCkKK19fWk43V2ViQ29yZTE4SElER2FtZXBhZExpc3Rl
bmVyNnNoYXJlZEV2CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBiZWVkMTBmLi40ZTE1ZDcxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xOTIzLDYg
KzE5MjMsMTIgQEAKIAkJNTFBNEJCMEExOTU0RDYxNjAwRkE1QzJFIC8qIEdhbWVwYWQuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFBNEJCMDcxOTU0
RDYxNjAwRkE1QzJFIC8qIEdhbWVwYWQuY3BwICovOyB9OwogCQk1MUE0QkIxMDE5NTRENjI3MDBG
QTVDMkUgLyogTmF2aWdhdG9yR2FtZXBhZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1MUE0QkIwRDE5NTRENjI3MDBGQTVDMkUgLyogTmF2aWdhdG9y
R2FtZXBhZC5jcHAgKi87IH07CiAJCTUxQTlEOUU2MTk1QjhGNDcwMDFCMkI1QyAvKiBHYW1lcGFk
U3RyYXRlZ3lDbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDUxQTlEOUU1MTk1QjhGNDcwMDFCMkI1QyAvKiBHYW1lcGFkU3RyYXRlZ3lDbGllbnQu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk1MUE5
RDlFOTE5NUI5MzFGMDAxQjJCNUMgLyogR2FtZXBhZE1hbmFnZXIuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFBOUQ5RTcxOTVCOTMxRjAwMUIyQjVD
IC8qIEdhbWVwYWRNYW5hZ2VyLmNwcCAqLzsgfTsKKwkJNTFBOUQ5RUExOTVCOTMxRjAwMUIyQjVD
IC8qIEdhbWVwYWRNYW5hZ2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1MUE5RDlFODE5NUI5MzFGMDAxQjJCNUMgLyogR2FtZXBhZE1hbmFnZXIuaCAq
LzsgfTsKKwkJNTFBOUQ5RjMxOTVCOTUwMzAwMUIyQjVDIC8qIEhJREdhbWVwYWQuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFBOUQ5RUYxOTVCOTUw
MzAwMUIyQjVDIC8qIEhJREdhbWVwYWQuY3BwICovOyB9OworCQk1MUE5RDlGNDE5NUI5NTAzMDAx
QjJCNUMgLyogSElER2FtZXBhZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTFBOUQ5RjAxOTVCOTUwMzAwMUIyQjVDIC8qIEhJREdhbWVwYWQuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk1MUE5RDlGNTE5
NUI5NTAzMDAxQjJCNUMgLyogSElER2FtZXBhZExpc3RlbmVyLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxQTlEOUYxMTk1Qjk1MDMwMDFCMkI1QyAv
KiBISURHYW1lcGFkTGlzdGVuZXIuY3BwICovOyB9OworCQk1MUE5RDlGNjE5NUI5NTAzMDAxQjJC
NUMgLyogSElER2FtZXBhZExpc3RlbmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1MUE5RDlGMjE5NUI5NTAzMDAxQjJCNUMgLyogSElER2FtZXBhZExp
c3RlbmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJNTFBQTNGNkYwQkQ1QUE5RTAwODkyOTcxIC8qIFJlc291cmNlTG9hZGVyTWFjLm1tIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFBQTNGNkUwQkQ1QUE5
RTAwODkyOTcxIC8qIFJlc291cmNlTG9hZGVyTWFjLm1tICovOyB9OwogCQk1MUFCQUUxQjEwM0Mx
OEZGMDA4QzUyNjAgLyogU29ja2V0U3RyZWFtRXJyb3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxQUJBRTFBMTAzQzE4RkYwMDhDNTI2MCAvKiBTb2Nr
ZXRTdHJlYW1FcnJvci5oICovOyB9OwogCQk1MUFCQUUxRTEwM0MxOTEzMDA4QzUyNjAgLyogU29j
a2V0U3RyZWFtSGFuZGxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1MUFCQUUxQzEwM0MxOTEzMDA4QzUyNjAgLyogU29ja2V0U3RyZWFtSGFuZGxlLmgg
Ki87IH07CkBAIC05MDAxLDYgKzkwMDcsMTIgQEAKIAkJNTFBNEJCMEUxOTU0RDYyNzAwRkE1QzJF
IC8qIE5hdmlnYXRvckdhbWVwYWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
TmF2aWdhdG9yR2FtZXBhZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MUE0QkIw
RjE5NTRENjI3MDBGQTVDMkUgLyogTmF2aWdhdG9yR2FtZXBhZC5pZGwgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0
OyBwYXRoID0gTmF2aWdhdG9yR2FtZXBhZC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTUxQTlEOUU1MTk1QjhGNDcwMDFCMkI1QyAvKiBHYW1lcGFkU3RyYXRlZ3lDbGllbnQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR2FtZXBhZFN0cmF0ZWd5Q2xpZW50Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxQTlEOUU3MTk1QjkzMUYwMDFCMkI1QyAv
KiBHYW1lcGFkTWFuYWdlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBHYW1lcGFkTWFuYWdlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxQTlE
OUU4MTk1QjkzMUYwMDFCMkI1QyAvKiBHYW1lcGFkTWFuYWdlci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBHYW1lcGFkTWFuYWdlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk1MUE5RDlFRjE5NUI5NTAzMDAxQjJCNUMgLyogSElER2FtZXBhZC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBISURHYW1lcGFkLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTFBOUQ5RjAxOTVCOTUwMzAwMUIyQjVDIC8qIEhJREdhbWVw
YWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSElER2FtZXBhZC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MUE5RDlGMTE5NUI5NTAzMDAxQjJCNUMgLyogSElE
R2FtZXBhZExpc3RlbmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEhJREdhbWVwYWRMaXN0ZW5lci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUx
QTlEOUYyMTk1Qjk1MDMwMDFCMkI1QyAvKiBISURHYW1lcGFkTGlzdGVuZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSElER2FtZXBhZExpc3RlbmVyLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTUxQUEzRjZFMEJENUFBOUUwMDg5Mjk3MSAvKiBSZXNvdXJjZUxv
YWRlck1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFJlc291
cmNlTG9hZGVyTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MUFCQUUxQTEw
M0MxOEZGMDA4QzUyNjAgLyogU29ja2V0U3RyZWFtRXJyb3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gU29ja2V0U3RyZWFtRXJyb3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNTFBQkFFMUMxMDNDMTkxMzAwOEM1MjYwIC8qIFNvY2tldFN0cmVhbUhhbmRsZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTb2NrZXRTdHJlYW1IYW5kbGUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE2MDcwLDYgKzE2MDgyLDggQEAKIAkJCQk1
MTZDNjIxRDE5NTBENDg3MDAzMzdFNzUgLyogR2FtZXBhZEV2ZW50LmNwcCAqLywKIAkJCQk1MTZD
NjIxRTE5NTBENDg3MDAzMzdFNzUgLyogR2FtZXBhZEV2ZW50LmggKi8sCiAJCQkJNTE2QzYyMUYx
OTUwRDQ4NzAwMzM3RTc1IC8qIEdhbWVwYWRFdmVudC5pZGwgKi8sCisJCQkJNTFBOUQ5RTcxOTVC
OTMxRjAwMUIyQjVDIC8qIEdhbWVwYWRNYW5hZ2VyLmNwcCAqLywKKwkJCQk1MUE5RDlFODE5NUI5
MzFGMDAxQjJCNUMgLyogR2FtZXBhZE1hbmFnZXIuaCAqLywKIAkJCQk1MUE0QkIwRDE5NTRENjI3
MDBGQTVDMkUgLyogTmF2aWdhdG9yR2FtZXBhZC5jcHAgKi8sCiAJCQkJNTFBNEJCMEUxOTU0RDYy
NzAwRkE1QzJFIC8qIE5hdmlnYXRvckdhbWVwYWQuaCAqLywKIAkJCQk1MUE0QkIwRjE5NTRENjI3
MDBGQTVDMkUgLyogTmF2aWdhdG9yR2FtZXBhZC5pZGwgKi8sCkBAIC0xNjM3MSw2ICsxNjM4NSwx
MCBAQAogCQkJCUUxQkE2NkYwMTc0MkJEODYwMEMyMDI1MSAvKiBEeW5hbWljTGlua2VySW50ZXJw
b3NpbmcuaCAqLywKIAkJCQkxQ0ExOUUwMzBEQzI1NTk1MDA2NUE5OTQgLyogRXZlbnRMb29wTWFj
Lm1tICovLAogCQkJCTUxNEIzRjc1MEM3MjIwNTUwMDA1MzBERiAvKiBGaWxlU3lzdGVtTWFjLm1t
ICovLAorCQkJCTUxQTlEOUVGMTk1Qjk1MDMwMDFCMkI1QyAvKiBISURHYW1lcGFkLmNwcCAqLywK
KwkJCQk1MUE5RDlGMDE5NUI5NTAzMDAxQjJCNUMgLyogSElER2FtZXBhZC5oICovLAorCQkJCTUx
QTlEOUYxMTk1Qjk1MDMwMDFCMkI1QyAvKiBISURHYW1lcGFkTGlzdGVuZXIuY3BwICovLAorCQkJ
CTUxQTlEOUYyMTk1Qjk1MDMwMDFCMkI1QyAvKiBISURHYW1lcGFkTGlzdGVuZXIuaCAqLywKIAkJ
CQk5MzVDNDc2RTA5QUM0RDczMDBBNkFBQjQgLyogS2V5RXZlbnRNYWMubW0gKi8sCiAJCQkJNTIx
RDQ2RjUxMUFFQzk4MTAwNTE0NjEzIC8qIEtpbGxSaW5nTWFjLm1tICovLAogCQkJCTkzNTIwODQ0
MDlCRDQzQjkwMEYyMDM4RCAvKiBMYW5ndWFnZS5tbSAqLywKQEAgLTI0ODE1LDYgKzI0ODMzLDcg
QEAKIAkJCQlCQzNDMzlCNzBDMEQzRDhEMDA1RjREN0EgLyogSlNNZWRpYUxpc3QuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUQzQTk0QTQ3MTIyREM0MEYwMEEzN0JCQyAvKiBKU01lZGlhUXVlcnlMaXN0
LmggaW4gSGVhZGVycyAqLywKIAkJCQk3QzUzNDNGRDE3Qjc0QjYzMDA0MjMyRjAgLyogSlNNZWRp
YVF1ZXJ5TGlzdExpc3RlbmVyLmggaW4gSGVhZGVycyAqLywKKwkJCQk1MUE5RDlGNjE5NUI5NTAz
MDAxQjJCNUMgLyogSElER2FtZXBhZExpc3RlbmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlDRDlE
RTE3NTE3QUFDNzRDMDBFQTM4NkQgLyogSlNNZWRpYVNvdXJjZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMDdDNTlCNzIxN0Y3OUM3QzAwMEZCQ0JCIC8qIEpTTWVkaWFTb3VyY2VTdGF0ZXMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTA3Mjc3RTREMTdEMDE4Q0MwMDE1NTM0RCAvKiBKU01lZGlhU3RyZWFt
LmggaW4gSGVhZGVycyAqLywKQEAgLTI1NTkzLDYgKzI1NjEyLDcgQEAKIAkJCQk0MzkwNDZEQzEy
REEyNUU4MDBBRjgwQTIgLyogUmVuZGVyTWF0aE1MRnJhY3Rpb24uaCBpbiBIZWFkZXJzICovLAog
CQkJCTA3QUI5OTZGMThEQTNDNzQwMDE4NzcxRSAvKiBSVENDb25maWd1cmF0aW9uUHJpdmF0ZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNDM5MDQ2REUxMkRBMjVFODAwQUY4MEEyIC8qIFJlbmRlck1h
dGhNTE1hdGguaCBpbiBIZWFkZXJzICovLAorCQkJCTUxQTlEOUY0MTk1Qjk1MDMwMDFCMkI1QyAv
KiBISURHYW1lcGFkLmggaW4gSGVhZGVycyAqLywKIAkJCQk0MzkwNDZFMDEyREEyNUU4MDBBRjgw
QTIgLyogUmVuZGVyTWF0aE1MT3BlcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTQzOTA0NkUw
MTJEQTI1RTgwMEJGODBBMyAvKiBSZW5kZXJNYXRoTUxSYWRpY2FsT3BlcmF0b3IuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTQzOTA0NkUyMTJEQTI1RTgwMEFGODBBMiAvKiBSZW5kZXJNYXRoTUxSb290
LmggaW4gSGVhZGVycyAqLywKQEAgLTI2NTU5LDYgKzI2NTc5LDcgQEAKIAkJCQk4NTAzMUI1MTBB
NDRFRkM3MDBGOTkyRTAgLyogV2hlZWxFdmVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTNFQzQ0
QTIxODhGNEJCODAwNjYxREYxIC8qIFdoZWVsRXZlbnREZWx0YVRyYWNrZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTkzODBGNDc0MDlBMTFBQjQwMDFGREIzNCAvKiBXaWRnZXQuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTUxQTlEOUVBMTk1QjkzMUYwMDFCMkI1QyAvKiBHYW1lcGFkTWFuYWdlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMTQxMURDQjExNjRDMzlBODAwRDQ5QkMxIC8qIFdpZHRoQ2FjaGUu
aCBpbiBIZWFkZXJzICovLAogCQkJCTkzOUIwMkVGMEVBMkRCQzQwMEM1NDU3MCAvKiBXaWR0aEl0
ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzgyNDNFOTBEMENGRDc1MDA0NjBDOEYgLyog
V2luZG93RmVhdHVyZXMuaCBpbiBIZWFkZXJzICovLApAQCAtMjg0NjksNiArMjg0OTAsNyBAQAog
CQkJCUIyRkEzRDNFMEFCNzVBNkYwMDBFNUFDNCAvKiBKU1NWR0FuaW1hdGVkSW50ZWdlci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlCMkZBM0Q0MDBBQjc1QTZGMDAwRTVBQzQgLyogSlNTVkdBbmlt
YXRlZExlbmd0aC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMkZBM0Q0MjBBQjc1QTZGMDAwRTVB
QzQgLyogSlNTVkdBbmltYXRlZExlbmd0aExpc3QuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNTFB
OUQ5RjMxOTVCOTUwMzAwMUIyQjVDIC8qIEhJREdhbWVwYWQuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQjJGQTNENDQwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHQW5pbWF0ZWROdW1iZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQjJGQTNENDYwQUI3NUE2RjAwMEU1QUM0IC8qIEpTU1ZHQW5pbWF0
ZWROdW1iZXJMaXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyRkEzRDRBMEFCNzVBNkYwMDBF
NUFDNCAvKiBKU1NWR0FuaW1hdGVkUHJlc2VydmVBc3BlY3RSYXRpby5jcHAgaW4gU291cmNlcyAq
LywKQEAgLTI5NDY5LDYgKzI5NDkxLDcgQEAKIAkJCQlCMjU1OTk4NDBEMDBEOEJBMDBCQjgyNUMg
LyogU1ZHRkVJbWFnZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMjIyNzlFRTBEMDBCRjIyMDA3
MUI3ODIgLyogU1ZHRkVJbWFnZUVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjIyMjc5
RjEwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0ZFTGlnaHRFbGVtZW50LmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCTUxQTlEOUY1MTk1Qjk1MDMwMDFCMkI1QyAvKiBISURHYW1lcGFkTGlzdGVuZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQjIyMjc5RjMwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0ZFTWVy
Z2VFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyMjI3OUY2MEQwMEJGMjIwMDcxQjc4
MiAvKiBTVkdGRU1lcmdlTm9kZUVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODQyMjQx
OTMxMDdFNzhBNzAwNzY2QTg3IC8qIFNWR0ZFTW9ycGhvbG9neUVsZW1lbnQuY3BwIGluIFNvdXJj
ZXMgKi8sCkBAIC0yOTg3MSw2ICsyOTg5NCw3IEBACiAJCQkJN0FGOUIyMDIxOENGQjJERjAwQzY0
QkVGIC8qIFZUVFJlZ2lvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMTVBMzZEOTExMDQ1NzI3
MDBCN0I2MzkgLyogWE1MTlNOYW1lcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQUNFNTNFQTBB
OEQxOEU3MDAyMjk0N0QgLyogWE1MU2VyaWFsaXplci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1
MUE5RDlFOTE5NUI5MzFGMDAxQjJCNUMgLyogR2FtZXBhZE1hbmFnZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJNTkwNUFEQkYxMzAyRjNDRTAwRjExNkRGIC8qIFhNTFRyZWVWaWV3ZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMUFCN0ZDNjgwQThCOTJFQzAwRDlEMzdCIC8qIFhQYXRoRXZhbHVh
dG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk3OEQwN0NDMTQ1QTEwMkUwMDk2OTA4RCAvKiBY
UGF0aEV4Y2VwdGlvbi5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21hYy9ISURHYW1lcGFkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21hYy9ISURHYW1lcGFkLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4w
ZTVhODI1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0hJ
REdhbWVwYWQuY3BwCkBAIC0wLDAgKzEsMTc1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkhJREdhbWVwYWQuaCIKKworI2lmIEVOQUJMRShHQU1FUEFEKQor
CisjaW5jbHVkZSA8SU9LaXQvaGlkL0lPSElERWxlbWVudC5oPgorI2luY2x1ZGUgPElPS2l0L2hp
ZC9JT0hJRFVzYWdlVGFibGVzLmg+CisjaW5jbHVkZSA8SU9LaXQvaGlkL0lPSElEVmFsdWUuaD4K
KyNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5n
Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworSElER2FtZXBhZDo6SElER2FtZXBhZChJT0hJRERldmljZVJlZiBoaWREZXZpY2UpCisg
ICAgOiBtX2hpZERldmljZShoaWREZXZpY2UpCit7CisgICAgbV9jb25uZWN0VGltZSA9IG1fbGFz
dFVwZGF0ZVRpbWUgPSBtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKTsKKworICAgIENGTnVt
YmVyUmVmIGNmVmVuZG9ySUQgPSAoQ0ZOdW1iZXJSZWYpSU9ISUREZXZpY2VHZXRQcm9wZXJ0eSho
aWREZXZpY2UsIENGU1RSKGtJT0hJRFZlbmRvcklES2V5KSk7CisgICAgQ0ZOdW1iZXJSZWYgY2ZQ
cm9kdWN0SUQgPSAoQ0ZOdW1iZXJSZWYpSU9ISUREZXZpY2VHZXRQcm9wZXJ0eShoaWREZXZpY2Us
IENGU1RSKGtJT0hJRFByb2R1Y3RJREtleSkpOworCisgICAgaW50IHZlbmRvcklELCBwcm9kdWN0
SUQ7CisgICAgQ0ZOdW1iZXJHZXRWYWx1ZShjZlZlbmRvcklELCBrQ0ZOdW1iZXJJbnRUeXBlLCAm
dmVuZG9ySUQpOworICAgIENGTnVtYmVyR2V0VmFsdWUoY2ZQcm9kdWN0SUQsIGtDRk51bWJlcklu
dFR5cGUsICZwcm9kdWN0SUQpOworCisgICAgQ0ZTdHJpbmdSZWYgY2ZQcm9kdWN0TmFtZSA9IChD
RlN0cmluZ1JlZilJT0hJRERldmljZUdldFByb3BlcnR5KGhpZERldmljZSwgQ0ZTVFIoa0lPSElE
UHJvZHVjdEtleSkpOworICAgIFN0cmluZyBwcm9kdWN0TmFtZShjZlByb2R1Y3ROYW1lKTsKKwor
ICAgIC8vIEN1cnJlbnRseSB0aGUgc3BlYyBoYXMgbm8gZm9ybWF0dGluZyBmb3IgdGhlIGlkIHN0
cmluZy4KKyAgICAvLyBUaGlzIHN0cmluZyBmb3JtYXR0aW5nIG1hdGNoZXMgRmlyZWZveC4KKyAg
ICBtX2lkID0gU3RyaW5nOjpmb3JtYXQoIiV4LSV4LSVzIiwgdmVuZG9ySUQsIHByb2R1Y3RJRCwg
cHJvZHVjdE5hbWUudXRmOCgpLmRhdGEoKSk7CisKKyAgICBpbml0RWxlbWVudHMoKTsKK30KKwor
dm9pZCBISURHYW1lcGFkOjppbml0RWxlbWVudHMoKQoreworICAgIFJldGFpblB0cjxDRkFycmF5
UmVmPiBlbGVtZW50cyA9IGFkb3B0Q0YoSU9ISUREZXZpY2VDb3B5TWF0Y2hpbmdFbGVtZW50cyht
X2hpZERldmljZS5nZXQoKSwgTlVMTCwga0lPSElET3B0aW9uc1R5cGVOb25lKSk7CisgICAgaW5p
dEVsZW1lbnRzRnJvbUFycmF5KGVsZW1lbnRzLmdldCgpKTsKKworICAgIC8vIEJ1dHRvbnMgYXJl
IHNwZWNpZmllZCB0byBhcHBlYXIgaGlnaGVzdCBwcmlvcml0eSBmaXJzdCBpbiB0aGUgYXJyYXku
CisgICAgc3RkOjpzb3J0KG1fYnV0dG9ucy5iZWdpbigpLCBtX2J1dHRvbnMuZW5kKCksIFtdKGNv
bnN0IHN0ZDo6dW5pcXVlX3B0cjxISURHYW1lcGFkQnV0dG9uPiYgYSwgY29uc3Qgc3RkOjp1bmlx
dWVfcHRyPEhJREdhbWVwYWRCdXR0b24+JiBiKSB7CisgICAgICAgIHJldHVybiBhLT5wcmlvcml0
eSA8IGItPnByaW9yaXR5OworICAgIH0pOworCisgICAgbV9heGlzVmFsdWVzLnJlc2l6ZShtX2F4
ZXMuc2l6ZSgpKTsKKyAgICBtX2J1dHRvblZhbHVlcy5yZXNpemUobV9idXR0b25zLnNpemUoKSk7
Cit9CisKK3ZvaWQgSElER2FtZXBhZDo6aW5pdEVsZW1lbnRzRnJvbUFycmF5KENGQXJyYXlSZWYg
ZWxlbWVudHMpCit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IENGQXJyYXlHZXRDb3Vu
dChlbGVtZW50cyk7ICsraSkgeworICAgICAgICBJT0hJREVsZW1lbnRSZWYgZWxlbWVudCA9IChJ
T0hJREVsZW1lbnRSZWYpQ0ZBcnJheUdldFZhbHVlQXRJbmRleChlbGVtZW50cywgaSk7CisgICAg
ICAgIGlmIChDRkdldFR5cGVJRChlbGVtZW50KSAhPSBJT0hJREVsZW1lbnRHZXRUeXBlSUQoKSkK
KyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIC8vIEFzIGEgcGh5c2ljYWwgZWxlbWVu
dCBjYW4gYXBwZWFyIGluIHRoZSBkZXZpY2UgdHdpY2UgKGluIGRpZmZlcmVudCBjb2xsZWN0aW9u
cykgYW5kIGNhbiBiZQorICAgICAgICAvLyByZXByZXNlbnRlZCBieSBkaWZmZXJlbnQgSU9ISURF
bGVtZW50UmVmIG9iamVjdHMsIHdlIGxvb2sgYXQgdGhlIElPSElERWxlbWVudENvb2tpZSB3aGlj
aAorICAgICAgICAvLyBpcyBtZWFudCB0byBiZSB1bmlxdWUgZm9yIGVhY2ggcGh5c2ljYWwgZWxl
bWVudC4KKyAgICAgICAgSU9ISURFbGVtZW50Q29va2llIGNvb2tpZSA9IElPSElERWxlbWVudEdl
dENvb2tpZShlbGVtZW50KTsKKyAgICAgICAgaWYgKG1fZWxlbWVudE1hcC5jb250YWlucyhjb29r
aWUpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgSU9ISURFbGVtZW50VHlwZSB0
eXBlID0gSU9ISURFbGVtZW50R2V0VHlwZShlbGVtZW50KTsKKworICAgICAgICBpZiAoKHR5cGUg
PT0ga0lPSElERWxlbWVudFR5cGVJbnB1dF9NaXNjIHx8IHR5cGUgPT0ga0lPSElERWxlbWVudFR5
cGVJbnB1dF9CdXR0b24pICYmIG1heWJlQWRkQnV0dG9uKGVsZW1lbnQpKQorICAgICAgICAgICAg
Y29udGludWU7CisKKyAgICAgICAgaWYgKCh0eXBlID09IGtJT0hJREVsZW1lbnRUeXBlSW5wdXRf
TWlzYyB8fCB0eXBlID09IGtJT0hJREVsZW1lbnRUeXBlSW5wdXRfQXhpcykgJiYgbWF5YmVBZGRB
eGlzKGVsZW1lbnQpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYgKHR5cGUg
PT0ga0lPSElERWxlbWVudFR5cGVDb2xsZWN0aW9uKQorICAgICAgICAgICAgaW5pdEVsZW1lbnRz
RnJvbUFycmF5KElPSElERWxlbWVudEdldENoaWxkcmVuKGVsZW1lbnQpKTsKKyAgICB9Cit9CisK
K2Jvb2wgSElER2FtZXBhZDo6bWF5YmVBZGRCdXR0b24oSU9ISURFbGVtZW50UmVmIGVsZW1lbnQp
Cit7CisgICAgdWludDMyX3QgdXNhZ2VQYWdlID0gSU9ISURFbGVtZW50R2V0VXNhZ2VQYWdlKGVs
ZW1lbnQpOworICAgIGlmICh1c2FnZVBhZ2UgIT0ga0hJRFBhZ2VfQnV0dG9uKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICB1aW50MzJfdCB1c2FnZSA9IElPSElERWxlbWVudEdldFVzYWdl
KGVsZW1lbnQpOworICAgIGlmICghdXNhZ2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IENGSW5kZXggbWluID0gSU9ISURFbGVtZW50R2V0TG9naWNhbE1pbihlbGVtZW50KTsKKyAgICBD
RkluZGV4IG1heCA9IElPSElERWxlbWVudEdldExvZ2ljYWxNYXgoZWxlbWVudCk7CisKKyAgICBt
X2J1dHRvbnMuYXBwZW5kKHN0ZDo6bWFrZV91bmlxdWU8SElER2FtZXBhZEJ1dHRvbj4odXNhZ2Us
IG1pbiwgbWF4KSk7CisKKyAgICBJT0hJREVsZW1lbnRDb29raWUgY29va2llID0gSU9ISURFbGVt
ZW50R2V0Q29va2llKGVsZW1lbnQpOworICAgIG1fZWxlbWVudE1hcC5zZXQoY29va2llLCBtX2J1
dHRvbnMubGFzdCgpLmdldCgpKTsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEhJREdh
bWVwYWQ6Om1heWJlQWRkQXhpcyhJT0hJREVsZW1lbnRSZWYgZWxlbWVudCkKK3sKKyAgICB1aW50
MzJfdCB1c2FnZVBhZ2UgPSBJT0hJREVsZW1lbnRHZXRVc2FnZVBhZ2UoZWxlbWVudCk7CisgICAg
aWYgKHVzYWdlUGFnZSAhPSBrSElEUGFnZV9HZW5lcmljRGVza3RvcCkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgdWludDMyX3QgdXNhZ2UgPSBJT0hJREVsZW1lbnRHZXRVc2FnZShlbGVt
ZW50KTsKKyAgICAvLyBUaGlzIHJhbmdlIGNvdmVycyB0aGUgc3RhbmRhcmQgYXhpcyB1c2FnZXMu
CisgICAgaWYgKHVzYWdlIDwga0hJRFVzYWdlX0dEX1ggfHwgdXNhZ2UgPiBrSElEVXNhZ2VfR0Rf
UnopCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIENGSW5kZXggbWluID0gSU9ISURFbGVt
ZW50R2V0UGh5c2ljYWxNaW4oZWxlbWVudCk7CisgICAgQ0ZJbmRleCBtYXggPSBJT0hJREVsZW1l
bnRHZXRQaHlzaWNhbE1heChlbGVtZW50KTsKKworICAgIG1fYXhlcy5hcHBlbmQoc3RkOjptYWtl
X3VuaXF1ZTxISURHYW1lcGFkQXhpcz4obWluLCBtYXgpKTsKKworICAgIElPSElERWxlbWVudENv
b2tpZSBjb29raWUgPSBJT0hJREVsZW1lbnRHZXRDb29raWUoZWxlbWVudCk7CisgICAgbV9lbGVt
ZW50TWFwLnNldChjb29raWUsIG1fYXhlcy5sYXN0KCkuZ2V0KCkpOworCisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK3ZvaWQgSElER2FtZXBhZDo6dmFsdWVDaGFuZ2VkKElPSElEVmFsdWVSZWYgdmFs
dWUpCit7CisgICAgSU9ISURFbGVtZW50Q29va2llIGNvb2tpZSA9IElPSElERWxlbWVudEdldENv
b2tpZShJT0hJRFZhbHVlR2V0RWxlbWVudCh2YWx1ZSkpOworICAgIEhJREdhbWVwYWRFbGVtZW50
KiBlbGVtZW50ID0gbV9lbGVtZW50TWFwLmdldChjb29raWUpOworCisgICAgLy8gVGhpcyBtaWdo
dCBiZSBhbiBlbGVtZW50IHdlIGRvbid0IGN1cnJlbnRseSBoYW5kbGUgYXMgaW5wdXQgc28gd2Ug
Y2FuIHNraXAgaXQuCisgICAgaWYgKCFlbGVtZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBl
bGVtZW50LT5yYXdWYWx1ZSA9IElPSElEVmFsdWVHZXRTY2FsZWRWYWx1ZSh2YWx1ZSwga0lPSElE
VmFsdWVTY2FsZVR5cGVQaHlzaWNhbCk7CisKKyAgICBpZiAoZWxlbWVudC0+aXNCdXR0b24oKSkg
eworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9idXR0b25zLnNpemUoKTsgKytp
KSB7CisgICAgICAgICAgICBpZiAobV9idXR0b25zW2ldLmdldCgpID09IGVsZW1lbnQpCisgICAg
ICAgICAgICAgICAgbV9idXR0b25WYWx1ZXNbaV0gPSBlbGVtZW50LT5ub3JtYWxpemVkVmFsdWUo
KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoZWxlbWVudC0+aXNBeGlzKCkpIHsKKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fYXhlcy5zaXplKCk7ICsraSkgeworICAgICAg
ICAgICAgaWYgKG1fYXhlc1tpXS5nZXQoKSA9PSBlbGVtZW50KQorICAgICAgICAgICAgICAgIG1f
YXhpc1ZhbHVlc1tpXSA9IGVsZW1lbnQtPm5vcm1hbGl6ZWRWYWx1ZSgpOworICAgICAgICB9Cisg
ICAgfSBlbHNlCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworCisgICAgbV9sYXN0VXBk
YXRlVGltZSA9IG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoR0FNRVBBRCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9ISURHYW1lcGFkLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tYWMvSElER2FtZXBhZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjdlNTFiOGUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
YWMvSElER2FtZXBhZC5oCkBAIC0wLDAgKzEsMTI0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBI
SURHYW1lcGFkX2gKKyNkZWZpbmUgSElER2FtZXBhZF9oCisKKyNpZiBFTkFCTEUoR0FNRVBBRCkK
KworI2luY2x1ZGUgIlBsYXRmb3JtR2FtZXBhZC5oIgorI2luY2x1ZGUgPElPS2l0L2hpZC9JT0hJ
RERldmljZS5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL1JldGFp
blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0cnVjdCBISURHYW1lcGFkRWxlbWVu
dCB7CisgICAgSElER2FtZXBhZEVsZW1lbnQoZG91YmxlIHRoZU1pbiwgZG91YmxlIHRoZU1heCkK
KyAgICAgICAgOiBtaW4odGhlTWluKQorICAgICAgICAsIG1heCh0aGVNYXgpCisgICAgICAgICwg
cmF3VmFsdWUodGhlTWluKQorICAgIHsKKyAgICB9CisgICAgCisgICAgdmlydHVhbCB+SElER2Ft
ZXBhZEVsZW1lbnQoKQorICAgIHsKKyAgICB9CisKKyAgICBkb3VibGUgbWluOworICAgIGRvdWJs
ZSBtYXg7CisgICAgZG91YmxlIHJhd1ZhbHVlOworCisgICAgdmlydHVhbCBib29sIGlzQnV0dG9u
KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNBeGlzKCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KKworICAgIHZpcnR1YWwgZG91YmxlIG5vcm1hbGl6ZWRWYWx1
ZSgpID0gMDsKK307CisKK3N0cnVjdCBISURHYW1lcGFkQnV0dG9uIDogcHVibGljIEhJREdhbWVw
YWRFbGVtZW50IHsKKyAgICBISURHYW1lcGFkQnV0dG9uKHVpbnQzMl90IHRoZVByaW9yaXR5LCBk
b3VibGUgbWluLCBkb3VibGUgbWF4KQorICAgICAgICA6IEhJREdhbWVwYWRFbGVtZW50KG1pbiwg
bWF4KQorICAgICAgICAsIHByaW9yaXR5KHRoZVByaW9yaXR5KQorICAgIHsKKyAgICB9CisKKyAg
ICB1aW50MzJfdCBwcmlvcml0eTsKKworICAgIHZpcnR1YWwgYm9vbCBpc0J1dHRvbigpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKworICAgIC8vIEJ1dHRvbnMgbm9ybWFsaXplIHRv
IHRoZSByYW5nZSAoMC4wKSAtICgxLjApCisgICAgdmlydHVhbCBkb3VibGUgbm9ybWFsaXplZFZh
bHVlKCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIHJldHVybiAocmF3VmFsdWUgLSBtaW4pIC8g
KG1heCAtIG1pbik7CisgICAgfQorfTsKKworc3RydWN0IEhJREdhbWVwYWRBeGlzIDogcHVibGlj
IEhJREdhbWVwYWRFbGVtZW50IHsKKyAgICBISURHYW1lcGFkQXhpcyhkb3VibGUgbWluLCBkb3Vi
bGUgbWF4KQorICAgICAgICA6IEhJREdhbWVwYWRFbGVtZW50KG1pbiwgbWF4KQorICAgIHsKKyAg
ICB9CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNBeGlzKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
dHJ1ZTsgfQorCisgICAgLy8gQXhlcyBub3JtYWxpemUgdG8gdGhlIHJhbmdlICgtMS4wKSAtICgx
LjApCisgICAgdmlydHVhbCBkb3VibGUgbm9ybWFsaXplZFZhbHVlKCkgb3ZlcnJpZGUKKyAgICB7
CisgICAgICAgIHJldHVybiAoKChyYXdWYWx1ZSAtIG1pbikgLyAobWF4IC0gbWluKSkgKiAyKSAt
IDE7CisgICAgfQorfTsKKworY2xhc3MgSElER2FtZXBhZCA6IHB1YmxpYyBQbGF0Zm9ybUdhbWVw
YWQgeworcHVibGljOgorICAgIEhJREdhbWVwYWQoSU9ISUREZXZpY2VSZWYpOworCisgICAgSU9I
SUREZXZpY2VSZWYgaGlkRGV2aWNlKCkgY29uc3QgeyByZXR1cm4gbV9oaWREZXZpY2UuZ2V0KCk7
IH0KKworICAgIHZvaWQgdmFsdWVDaGFuZ2VkKElPSElEVmFsdWVSZWYpOworCisgICAgdmlydHVh
bCBjb25zdCBWZWN0b3I8ZG91YmxlPiYgYXhpc1ZhbHVlcygpIGNvbnN0IG92ZXJyaWRlIGZpbmFs
IHsgcmV0dXJuIG1fYXhpc1ZhbHVlczsgfQorICAgIHZpcnR1YWwgY29uc3QgVmVjdG9yPGRvdWJs
ZT4mIGJ1dHRvblZhbHVlcygpIGNvbnN0IG92ZXJyaWRlIGZpbmFsIHsgcmV0dXJuIG1fYnV0dG9u
VmFsdWVzOyB9CisKK3ByaXZhdGU6CisgICAgdm9pZCBpbml0RWxlbWVudHMoKTsKKyAgICB2b2lk
IGluaXRFbGVtZW50c0Zyb21BcnJheShDRkFycmF5UmVmKTsKKworICAgIGJvb2wgbWF5YmVBZGRC
dXR0b24oSU9ISURFbGVtZW50UmVmKTsKKyAgICBib29sIG1heWJlQWRkQXhpcyhJT0hJREVsZW1l
bnRSZWYpOworCisgICAgUmV0YWluUHRyPElPSElERGV2aWNlUmVmPiBtX2hpZERldmljZTsKKwor
ICAgIEhhc2hNYXA8SU9ISURFbGVtZW50Q29va2llLCBISURHYW1lcGFkRWxlbWVudCo+IG1fZWxl
bWVudE1hcDsKKworICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8SElER2FtZXBhZEJ1dHRvbj4+
IG1fYnV0dG9uczsKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEhJREdhbWVwYWRBeGlzPj4g
bV9heGVzOworICAgIFZlY3Rvcjxkb3VibGU+IG1fYnV0dG9uVmFsdWVzOworICAgIFZlY3Rvcjxk
b3VibGU+IG1fYXhpc1ZhbHVlczsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIEVOQUJMRShHQU1FUEFEKQorI2VuZGlmIC8vIEhJREdhbWVwYWRMaXN0ZW5lcl9oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvSElER2FtZXBhZExpc3RlbmVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9ISURHYW1lcGFkTGlzdGVuZXIuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwZGM1YzUKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvSElER2FtZXBhZExpc3RlbmVyLmNw
cApAQCAtMCwwICsxLDE3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJISURHYW1lcGFkTGlzdGVuZXIuaCIKKworI2lmIEVOQUJMRShHQU1FUEFEKQorCisj
aW5jbHVkZSAiUGxhdGZvcm1HYW1lcGFkLmgiCisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgUmV0YWluUHRyPENGRGljdGlvbmFyeVJl
Zj4gZGV2aWNlTWF0Y2hpbmdEaWN0aW9uYXJ5KHVpbnQzMl90IHVzYWdlUGFnZSwgdWludDMyX3Qg
dXNhZ2UpCit7CisgICAgQVNTRVJUKHVzYWdlUGFnZSk7CisgICAgQVNTRVJUKHVzYWdlKTsKKwor
ICAgIFJldGFpblB0cjxDRk51bWJlclJlZj4gcGFnZU51bWJlciA9IGFkb3B0Q0YoQ0ZOdW1iZXJD
cmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwga0NGTnVtYmVySW50VHlwZSwgJnVzYWdlUGFnZSkp
OworICAgIFJldGFpblB0cjxDRk51bWJlclJlZj4gdXNhZ2VOdW1iZXIgPSBhZG9wdENGKENGTnVt
YmVyQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGtDRk51bWJlckludFR5cGUsICZ1c2FnZSkp
OworCisgICAgQ0ZTdHJpbmdSZWYga2V5c1tdID0geyBDRlNUUihrSU9ISUREZXZpY2VVc2FnZVBh
Z2VLZXkpLCBDRlNUUihrSU9ISUREZXZpY2VVc2FnZUtleSkgfTsKKyAgICBDRk51bWJlclJlZiB2
YWx1ZXNbXSA9IHsgcGFnZU51bWJlci5nZXQoKSwgdXNhZ2VOdW1iZXIuZ2V0KCkgfTsKKworICAg
IHJldHVybiBhZG9wdENGKENGRGljdGlvbmFyeUNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAo
Y29uc3Qgdm9pZCoqKWtleXMsIChjb25zdCB2b2lkKiopdmFsdWVzLCAyLCAma0NGVHlwZURpY3Rp
b25hcnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7Cit9
CisKK3N0YXRpYyB2b2lkIGRldmljZUFkZGVkQ2FsbGJhY2sodm9pZCogY29udGV4dCwgSU9SZXR1
cm4sIHZvaWQqLCBJT0hJRERldmljZVJlZiBkZXZpY2UpCit7CisgICAgSElER2FtZXBhZExpc3Rl
bmVyKiBsaXN0ZW5lciA9IHN0YXRpY19jYXN0PEhJREdhbWVwYWRMaXN0ZW5lcio+KGNvbnRleHQp
OworICAgIGxpc3RlbmVyLT5kZXZpY2VBZGRlZChkZXZpY2UpOworfQorCitzdGF0aWMgdm9pZCBk
ZXZpY2VSZW1vdmVkQ2FsbGJhY2sodm9pZCogY29udGV4dCwgSU9SZXR1cm4sIHZvaWQqLCBJT0hJ
RERldmljZVJlZiBkZXZpY2UpCit7CisgICAgSElER2FtZXBhZExpc3RlbmVyKiBsaXN0ZW5lciA9
IHN0YXRpY19jYXN0PEhJREdhbWVwYWRMaXN0ZW5lcio+KGNvbnRleHQpOworICAgIGxpc3RlbmVy
LT5kZXZpY2VSZW1vdmVkKGRldmljZSk7Cit9CisKK3N0YXRpYyB2b2lkIGRldmljZVZhbHVlc0No
YW5nZWRDYWxsYmFjayh2b2lkKiBjb250ZXh0LCBJT1JldHVybiByZXN1bHQsIHZvaWQqLCBJT0hJ
RFZhbHVlUmVmIHZhbHVlKQoreworICAgIC8vIEEgbm9uLXplcm8gcmVzdWx0IHZhbHVlIGluZGlj
YXRlcyBhbiBlcnJvciB0aGF0IHdlIGNhbiBkbyBub3RoaW5nIGFib3V0IGZvciBpbnB1dCB2YWx1
ZXMuCisgICAgaWYgKHJlc3VsdCkKKyAgICAgICAgcmV0dXJuOworCisgICAgSElER2FtZXBhZExp
c3RlbmVyKiBsaXN0ZW5lciA9IHN0YXRpY19jYXN0PEhJREdhbWVwYWRMaXN0ZW5lcio+KGNvbnRl
eHQpOworICAgIGxpc3RlbmVyLT52YWx1ZXNDaGFuZ2VkKHZhbHVlKTsKK30KKworSElER2FtZXBh
ZExpc3RlbmVyJiBISURHYW1lcGFkTGlzdGVuZXI6OnNoYXJlZCgpCit7CisgICAgc3RhdGljIE5l
dmVyRGVzdHJveWVkPEhJREdhbWVwYWRMaXN0ZW5lcj4gc2hhcmVkTGlzdGVuZXI7CisgICAgcmV0
dXJuIHNoYXJlZExpc3RlbmVyOworfQorCitISURHYW1lcGFkTGlzdGVuZXI6OkhJREdhbWVwYWRM
aXN0ZW5lcigpCisgICAgOiBtX2NsaWVudChudWxscHRyKQorICAgICwgbV9zaG91bGREaXNwYXRj
aENhbGxiYWNrcyhmYWxzZSkKK3sKKyAgICBtX21hbmFnZXIgPSBhZG9wdENGKElPSElETWFuYWdl
ckNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBrSU9ISURPcHRpb25zVHlwZU5vbmUpKTsKKwor
ICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IGpveXN0aWNrRGljdGlvbmFyeSA9IGRldmlj
ZU1hdGNoaW5nRGljdGlvbmFyeShrSElEUGFnZV9HZW5lcmljRGVza3RvcCwga0hJRFVzYWdlX0dE
X0pveXN0aWNrKTsKKyAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBnYW1lcGFkRGljdGlv
bmFyeSA9IGRldmljZU1hdGNoaW5nRGljdGlvbmFyeShrSElEUGFnZV9HZW5lcmljRGVza3RvcCwg
a0hJRFVzYWdlX0dEX0dhbWVQYWQpOworCisgICAgQ0ZEaWN0aW9uYXJ5UmVmIGRldmljZXNbXSA9
IHsgam95c3RpY2tEaWN0aW9uYXJ5LmdldCgpLCBnYW1lcGFkRGljdGlvbmFyeS5nZXQoKSB9Owor
CisgICAgUmV0YWluUHRyPENGQXJyYXlSZWY+IG1hdGNoaW5nQXJyYXkgPSBhZG9wdENGKENGQXJy
YXlDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgKGNvbnN0IHZvaWQqKilkZXZpY2VzLCAyLCAm
a0NGVHlwZUFycmF5Q2FsbEJhY2tzKSk7CisKKyAgICBJT0hJRE1hbmFnZXJTZXREZXZpY2VNYXRj
aGluZ011bHRpcGxlKG1fbWFuYWdlci5nZXQoKSwgbWF0Y2hpbmdBcnJheS5nZXQoKSk7CisgICAg
SU9ISURNYW5hZ2VyUmVnaXN0ZXJEZXZpY2VNYXRjaGluZ0NhbGxiYWNrKG1fbWFuYWdlci5nZXQo
KSwgZGV2aWNlQWRkZWRDYWxsYmFjaywgdGhpcyk7CisgICAgSU9ISURNYW5hZ2VyUmVnaXN0ZXJE
ZXZpY2VSZW1vdmFsQ2FsbGJhY2sobV9tYW5hZ2VyLmdldCgpLCBkZXZpY2VSZW1vdmVkQ2FsbGJh
Y2ssIHRoaXMpOworICAgIElPSElETWFuYWdlclNjaGVkdWxlV2l0aFJ1bkxvb3AobV9tYW5hZ2Vy
LmdldCgpLCBDRlJ1bkxvb3BHZXRDdXJyZW50KCksIGtDRlJ1bkxvb3BEZWZhdWx0TW9kZSk7Cisg
ICAgSU9ISURNYW5hZ2VyT3BlbihtX21hbmFnZXIuZ2V0KCksIGtJT0hJRE9wdGlvbnNUeXBlTm9u
ZSk7CisKKyAgICBJT0hJRE1hbmFnZXJSZWdpc3RlcklucHV0VmFsdWVDYWxsYmFjayhtX21hbmFn
ZXIuZ2V0KCksIGRldmljZVZhbHVlc0NoYW5nZWRDYWxsYmFjaywgdGhpcyk7CisKKyAgICAvLyBX
ZSdsbCBpbW1lZGlhdGVseSBnZXQgYSBzZXJpZXMgb2YgY29ubmVjdGlvbiBhbmQgdmFsdWUgY2Fs
bGJhY2tzIGZvciBhbHJlYWR5LWNvbm5lY3RlZCBnYW1lcGFkcworICAgIC8vIGJ1dCB3ZSBkb24n
dCB3YW50IHRvIG5vdGlmeSBXZWJDb3JlIG9mIHRob3NlIGV2ZW50cy4KKyAgICAvLyBUaGlzIGNh
bGxPbk1haW5UaHJlYWQgY2FsbCByZS1lbmFibGVzIHRob3NlIGNhbGxiYWNrcyBhZnRlciB0aGUg
cnVubG9vcCBlbXB0aWVzIG91dC4KKyAgICBjYWxsT25NYWluVGhyZWFkKFtdKCkgeworICAgICAg
ICBISURHYW1lcGFkTGlzdGVuZXI6OnNoYXJlZCgpLnNldFNob3VsZERpc3BhdGNoQ2FsbGJhY2tz
KHRydWUpOworICAgIH0pOworfQorCit1bnNpZ25lZCBISURHYW1lcGFkTGlzdGVuZXI6OmluZGV4
Rm9yTmV3bHlDb25uZWN0ZWREZXZpY2UoKQoreworICAgIHVuc2lnbmVkIGluZGV4ID0gMDsKKyAg
ICB3aGlsZSAoaW5kZXggPCBtX2dhbWVwYWRWZWN0b3Iuc2l6ZSgpICYmIG1fZ2FtZXBhZFZlY3Rv
cltpbmRleF0pCisgICAgICAgICsraW5kZXg7CisKKyAgICByZXR1cm4gaW5kZXg7Cit9CisKK3Zv
aWQgSElER2FtZXBhZExpc3RlbmVyOjpkZXZpY2VBZGRlZChJT0hJRERldmljZVJlZiBkZXZpY2Up
Cit7CisgICAgQVNTRVJUKCFtX2dhbWVwYWRNYXAuZ2V0KGRldmljZSkpOworCisgICAgc3RkOjp1
bmlxdWVfcHRyPEhJREdhbWVwYWQ+IGdhbWVwYWQgPSBzdGQ6Om1ha2VfdW5pcXVlPEhJREdhbWVw
YWQ+KGRldmljZSk7CisgICAgdW5zaWduZWQgaW5kZXggPSBpbmRleEZvck5ld2x5Q29ubmVjdGVk
RGV2aWNlKCk7CisKKyAgICBpZiAobV9nYW1lcGFkVmVjdG9yLnNpemUoKSA8PSBpbmRleCkKKyAg
ICAgICAgbV9nYW1lcGFkVmVjdG9yLnJlc2l6ZShpbmRleCArIDEpOworCisgICAgbV9nYW1lcGFk
VmVjdG9yW2luZGV4XSA9IGdhbWVwYWQuZ2V0KCk7CisgICAgbV9nYW1lcGFkTWFwLnNldChkZXZp
Y2UsIHN0ZDo6bW92ZShnYW1lcGFkKSk7CisKKyAgICBpZiAobV9jbGllbnQgJiYgbV9zaG91bGRE
aXNwYXRjaENhbGxiYWNrcykKKyAgICAgICAgbV9jbGllbnQtPmdhbWVwYWRDb25uZWN0ZWQoaW5k
ZXgpOworfQorCit2b2lkIEhJREdhbWVwYWRMaXN0ZW5lcjo6ZGV2aWNlUmVtb3ZlZChJT0hJRERl
dmljZVJlZiBkZXZpY2UpCit7CisgICAgc3RkOjpwYWlyPHN0ZDo6dW5pcXVlX3B0cjxISURHYW1l
cGFkPiwgdW5zaWduZWQ+IHJlbW92ZWRHYW1lcGFkID0gcmVtb3ZlR2FtZXBhZEZvckRldmljZShk
ZXZpY2UpOworICAgIEFTU0VSVChyZW1vdmVkR2FtZXBhZC5maXJzdCk7CisKKyAgICBpZiAobV9j
bGllbnQgJiYgbV9zaG91bGREaXNwYXRjaENhbGxiYWNrcykKKyAgICAgICAgbV9jbGllbnQtPmdh
bWVwYWREaXNjb25uZWN0ZWQocmVtb3ZlZEdhbWVwYWQuc2Vjb25kKTsKK30KKwordm9pZCBISURH
YW1lcGFkTGlzdGVuZXI6OnZhbHVlc0NoYW5nZWQoSU9ISURWYWx1ZVJlZiB2YWx1ZSkKK3sKKyAg
ICBJT0hJRERldmljZVJlZiBkZXZpY2UgPSBJT0hJREVsZW1lbnRHZXREZXZpY2UoSU9ISURWYWx1
ZUdldEVsZW1lbnQodmFsdWUpKTsKKworICAgIEhJREdhbWVwYWQqIGdhbWVwYWQgPSBtX2dhbWVw
YWRNYXAuZ2V0KGRldmljZSk7CisKKyAgICAvLyBXaGVuIHN0YXJ0aW5nIG1vbml0b3Jpbmcgd2Ug
bWlnaHQgZ2V0IGEgdmFsdWUgY2hhbmdlZCBjYWxsYmFjayBiZWZvcmUgd2UgZXZlbiBrbm93IHRo
ZSBkZXZpY2UgaXMgY29ubmVjdGVkLgorICAgIGlmICghZ2FtZXBhZCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgZ2FtZXBhZC0+dmFsdWVDaGFuZ2VkKHZhbHVlKTsKK30KKworc3RkOjpwYWlyPHN0
ZDo6dW5pcXVlX3B0cjxISURHYW1lcGFkPiwgdW5zaWduZWQ+ICBISURHYW1lcGFkTGlzdGVuZXI6
OnJlbW92ZUdhbWVwYWRGb3JEZXZpY2UoSU9ISUREZXZpY2VSZWYgZGV2aWNlKQoreworICAgIHN0
ZDo6cGFpcjxzdGQ6OnVuaXF1ZV9wdHI8SElER2FtZXBhZD4sIHVuc2lnbmVkPiByZXN1bHQ7Cisg
ICAgcmVzdWx0LmZpcnN0ID0gbV9nYW1lcGFkTWFwLnRha2UoZGV2aWNlKTsKKyAgICBBU1NFUlQo
cmVzdWx0LmZpcnN0KTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2dhbWVwYWRW
ZWN0b3Iuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKG1fZ2FtZXBhZFZlY3RvcltpXSA9PSBy
ZXN1bHQuZmlyc3QuZ2V0KCkpIHsKKyAgICAgICAgICAgIHJlc3VsdC5zZWNvbmQgPSBpOworICAg
ICAgICAgICAgbV9nYW1lcGFkVmVjdG9yW2ldID0gbnVsbHB0cjsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKEdBTUVQQUQpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvSElER2FtZXBhZExpc3RlbmVyLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tYWMvSElER2FtZXBhZExpc3RlbmVyLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uZWI0YTJlMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21hYy9ISURHYW1lcGFkTGlzdGVuZXIuaApAQCAtMCwwICsxLDgzIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmbmRlZiBISURHYW1lcGFkTGlzdGVuZXJfaAorI2RlZmluZSBISURH
YW1lcGFkTGlzdGVuZXJfaAorCisjaWYgRU5BQkxFKEdBTUVQQUQpCisKKyNpbmNsdWRlICJISURH
YW1lcGFkLmgiCisjaW5jbHVkZSA8SU9LaXQvaGlkL0lPSElETWFuYWdlci5oPgorI2luY2x1ZGUg
PHd0Zi9EZXF1ZS5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL05l
dmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIEhJREdhbWVwYWRMaXN0ZW5lckNsaWVudCB7CitwdWJsaWM6Cisg
ICAgdmlydHVhbCB+SElER2FtZXBhZExpc3RlbmVyQ2xpZW50KCkgeyB9CisKKyAgICB2aXJ0dWFs
IHZvaWQgZ2FtZXBhZENvbm5lY3RlZCh1bnNpZ25lZCBpbmRleCkgPSAwOworICAgIHZpcnR1YWwg
dm9pZCBnYW1lcGFkRGlzY29ubmVjdGVkKHVuc2lnbmVkIGluZGV4KSA9IDA7Cit9OworCitjbGFz
cyBISURHYW1lcGFkTGlzdGVuZXIgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEhJREdhbWVw
YWRMaXN0ZW5lcik7CisgICAgZnJpZW5kIGNsYXNzIE5ldmVyRGVzdHJveWVkPEhJREdhbWVwYWRM
aXN0ZW5lcj47CitwdWJsaWM6CisgICAgc3RhdGljIEhJREdhbWVwYWRMaXN0ZW5lciYgc2hhcmVk
KCk7CisKKyAgICB2b2lkIHNldENsaWVudChISURHYW1lcGFkTGlzdGVuZXJDbGllbnQqIGNsaWVu
dCkgeyBtX2NsaWVudCA9IGNsaWVudDsgfQorCisgICAgdm9pZCBkZXZpY2VBZGRlZChJT0hJRERl
dmljZVJlZik7CisgICAgdm9pZCBkZXZpY2VSZW1vdmVkKElPSElERGV2aWNlUmVmKTsKKyAgICB2
b2lkIHZhbHVlc0NoYW5nZWQoSU9ISURWYWx1ZVJlZik7CisKKyAgICBjb25zdCBWZWN0b3I8UGxh
dGZvcm1HYW1lcGFkKj4mIHBsYXRmb3JtR2FtZXBhZHMoKSBjb25zdCB7IHJldHVybiBtX2dhbWVw
YWRWZWN0b3I7IH0KKworICAgIHZvaWQgc2V0U2hvdWxkRGlzcGF0Y2hDYWxsYmFja3MoYm9vbCBz
aG91bGREaXNwYXRjaENhbGxiYWNrcykgeyBtX3Nob3VsZERpc3BhdGNoQ2FsbGJhY2tzID0gc2hv
dWxkRGlzcGF0Y2hDYWxsYmFja3M7IH0KKworcHJpdmF0ZToKKyAgICBISURHYW1lcGFkTGlzdGVu
ZXIoKTsKKworICAgIHN0ZDo6cGFpcjxzdGQ6OnVuaXF1ZV9wdHI8SElER2FtZXBhZD4sIHVuc2ln
bmVkPiByZW1vdmVHYW1lcGFkRm9yRGV2aWNlKElPSElERGV2aWNlUmVmKTsKKworICAgIHVuc2ln
bmVkIGluZGV4Rm9yTmV3bHlDb25uZWN0ZWREZXZpY2UoKTsKKworICAgIFZlY3RvcjxQbGF0Zm9y
bUdhbWVwYWQqPiBtX2dhbWVwYWRWZWN0b3I7CisgICAgSGFzaE1hcDxJT0hJRERldmljZVJlZiwg
c3RkOjp1bmlxdWVfcHRyPEhJREdhbWVwYWQ+PiBtX2dhbWVwYWRNYXA7CisKKyAgICBSZXRhaW5Q
dHI8SU9ISURNYW5hZ2VyUmVmPiBtX21hbmFnZXI7CisKKyAgICBISURHYW1lcGFkTGlzdGVuZXJD
bGllbnQqIG1fY2xpZW50OworICAgIGJvb2wgbV9zaG91bGREaXNwYXRjaENhbGxiYWNrczsKK307
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShHQU1FUEFEKQor
I2VuZGlmIC8vIEhJREdhbWVwYWRMaXN0ZW5lcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDhlM2Q3OTEuLjNmODNl
OWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTQtMDYtMjUgIEJyYWR5IEVpZHNvbiAg
PGJlaWRzb25AYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBISUQtYmFzZWQgZ2FtZXBhZCBpbXBs
ZW1lbnRhdGlvbiBmb3IgTWFjCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMzQzMjQKKworICAgICAgICBSZXZpZXdlZCBieSBEZWFuIEphY2tzb24uCisK
KyAgICAgICAgKiBXZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKwogMjAxNC0wNi0y
MyAgUnl1YW4gQ2hvaSAgPHJ5dWFuLmNob2lAc2Ftc3VuZy5jb20+CiAKICAgICAgICAgW0VGTF0g
UmVtb3ZlIHRoZSBXZWJLaXQxIEVGTCBjb2RlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dl
YktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAxZmRlN2FjLi5iNTdmMGI3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1Nv
dXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTExMyw2ICsx
MTMsOCBAQAogCQk1MTU4RjZFRjEwNkQ4NjJBMDBBRjQ1N0MgLyogV2ViSGlzdG9yeURlbGVnYXRl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTU4RjZF
RTEwNkQ4NjJBMDBBRjQ1N0MgLyogV2ViSGlzdG9yeURlbGVnYXRlLmggKi87IH07CiAJCTUxODVG
NjI2MTA3MTJCODAwMDdBQTM5MyAvKiBXZWJOYXZpZ2F0aW9uRGF0YS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE4NUY2MjUxMDcxMkI4MDAwN0FBMzkz
IC8qIFdlYk5hdmlnYXRpb25EYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJNTE4NUY2MjgxMDcxMkI5NzAwN0FBMzkzIC8qIFdlYk5hdmlnYXRp
b25EYXRhLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTE4NUY2MjcxMDcxMkI5NzAwN0FBMzkzIC8qIFdlYk5hdmlnYXRpb25EYXRhLm1tICovOyB9Owor
CQk1MUE5RDlFRDE5NUI5NDlGMDAxQjJCNUMgLyogV2ViSElER2FtZXBhZENvbnRyb2xsZXIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxQTlEOUVCMTk1
Qjk0OUYwMDFCMkI1QyAvKiBXZWJISURHYW1lcGFkQ29udHJvbGxlci5oICovOyB9OworCQk1MUE5
RDlFRTE5NUI5NDlGMDAxQjJCNUMgLyogV2ViSElER2FtZXBhZENvbnRyb2xsZXIubW0gaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUE5RDlFQzE5NUI5NDlG
MDAxQjJCNUMgLyogV2ViSElER2FtZXBhZENvbnRyb2xsZXIubW0gKi87IH07CiAJCTUxQUVERUYx
MENFQ0Y0NTcwMDg1NDMyOCAvKiBXZWJEYXRhYmFzZU1hbmFnZXJJbnRlcm5hbC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFBRURFRjAwQ0VDRjQ1NzAw
ODU0MzI4IC8qIFdlYkRhdGFiYXNlTWFuYWdlckludGVybmFsLmggKi87IH07CiAJCTUxQjJBMTAw
MEFEQjE1RDAwMDJBOUJFRSAvKiBXZWJJY29uRGF0YWJhc2VEZWxlZ2F0ZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFCMkEwRkYwQURCMTVEMDAwMkE5
QkVFIC8qIFdlYkljb25EYXRhYmFzZURlbGVnYXRlLmggKi87IH07CiAJCTUxQzcxNEZCMEIyMEY3
OUYwMEU1RTMzQyAvKiBXZWJCYWNrRm9yd2FyZExpc3RJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFDNzE0RkEwQjIwRjc5RjAwRTVFMzND
IC8qIFdlYkJhY2tGb3J3YXJkTGlzdEludGVybmFsLmggKi87IH07CkBAIC01OTksNiArNjAxLDgg
QEAKIAkJNTFBOEI1NzkwNDI4MzRGNzAwQ0EyRDNBIC8qIFdlYlZpZXcuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViVmlldy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJNTFBOEI1
N0EwNDI4MzRGNzAwQ0EyRDNBIC8qIFdlYlZpZXcubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJWaWV3Lm1tOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJNTFBOEI1N0Qw
NDI4MzUzQTAwQ0EyRDNBIC8qIFdlYlZpZXdQcml2YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlZpZXdQcml2YXRlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OworCQk1MUE5RDlF
QjE5NUI5NDlGMDAxQjJCNUMgLyogV2ViSElER2FtZXBhZENvbnRyb2xsZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViSElER2FtZXBhZENvbnRyb2xsZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTFBOUQ5RUMxOTVCOTQ5RjAwMUIyQjVDIC8qIFdlYkhJ
REdhbWVwYWRDb250cm9sbGVyLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBw
YXRoID0gV2ViSElER2FtZXBhZENvbnRyb2xsZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTUxQUVERUYwMENFQ0Y0NTcwMDg1NDMyOCAvKiBXZWJEYXRhYmFzZU1hbmFnZXJJbnRl
cm5hbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJEYXRhYmFzZU1hbmFn
ZXJJbnRlcm5hbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MUIyQTBGRjBBREIx
NUQwMDAyQTlCRUUgLyogV2ViSWNvbkRhdGFiYXNlRGVsZWdhdGUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gV2ViSWNvbkRhdGFiYXNlRGVsZWdhdGUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNTFDNzE0RkEwQjIwRjc5RjAwRTVFMzNDIC8qIFdlYkJhY2tGb3J3
YXJkTGlzdEludGVybmFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkJh
Y2tGb3J3YXJkTGlzdEludGVybmFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0x
NTQ3LDYgKzE1NTEsOCBAQAogCQkJCTkzOTFGMjc0MTIxQjM4QkQwMEVCRjdFOCAvKiBXZWJGcmFt
ZU5ldHdvcmtpbmdDb250ZXh0Lm1tICovLAogCQkJCUJDN0Y4ODQ5MTBDODc3NUEwMEQ2MTMzRCAv
KiBXZWJHZW9sb2NhdGlvbkNsaWVudC5oICovLAogCQkJCUJDN0Y4ODRBMTBDODc3NUEwMEQ2MTMz
RCAvKiBXZWJHZW9sb2NhdGlvbkNsaWVudC5tbSAqLywKKwkJCQk1MUE5RDlFQjE5NUI5NDlGMDAx
QjJCNUMgLyogV2ViSElER2FtZXBhZENvbnRyb2xsZXIuaCAqLywKKwkJCQk1MUE5RDlFQzE5NUI5
NDlGMDAxQjJCNUMgLyogV2ViSElER2FtZXBhZENvbnRyb2xsZXIubW0gKi8sCiAJCQkJNTE0OTRD
RDQwQzdFQkRFMDAwNDE3OEM1IC8qIFdlYkljb25EYXRhYmFzZUNsaWVudC5oICovLAogCQkJCTUx
NDk0Q0Q1MEM3RUJERTAwMDQxNzhDNSAvKiBXZWJJY29uRGF0YWJhc2VDbGllbnQubW0gKi8sCiAJ
CQkJMDY2OTNEREEwQkZCQTg1MjAwMjE2MDcyIC8qIFdlYkluc3BlY3RvckNsaWVudC5oICovLApA
QCAtMTc1OSw2ICsxNzY1LDcgQEAKIAkJCQlBMTBDMUQ0MjE4MjAyRkVGMDAzNjg4M0EgLyogV2Vi
U1FMaXRlRGF0YWJhc2VUcmFja2VyQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk5Mzk4MTA1
NDA4MjRCRjAxMDA4REYwMzggLyogV2ViRnJhbWVQcml2YXRlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBMTBDMUQ2MjE4MjAzMDBFMDAzNjg4M0EgLyogU2VhcmNoUG9wdXBNZW51SU9TLmggaW4gSGVh
ZGVycyAqLywKKwkJCQk1MUE5RDlFRDE5NUI5NDlGMDAxQjJCNUMgLyogV2ViSElER2FtZXBhZENv
bnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzOTgxMDZFMDgyNEJGMDEwMDhERjAzOCAv
KiBXZWJGcmFtZVZpZXcuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzOTgxMDZGMDgyNEJGMDEwMDhE
RjAzOCAvKiBXZWJGcmFtZVZpZXdJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTM5ODEw
QUYwODI0QkYwMTAwOERGMDM4IC8qIFdlYkZyYW1lVmlld1ByaXZhdGUuaCBpbiBIZWFkZXJzICov
LApAQCAtMjEzNyw2ICsyMTQ0LDcgQEAKIAkJCQkwNzBGNTQ5QzE3RjFFNDJCMDAxNjlFMDQgLyog
V2ViVXNlck1lZGlhQ2xpZW50Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJRTE2OTgzNkMxMTM0NkQ1
NjAwODk0MTE1IC8qIFByb3h5UnVudGltZU9iamVjdC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTdD
MDFDQjg4MTczNDM1QzkwMEM1RDgwNyAvKiBTZWFyY2hQb3B1cE1lbnVNYWMubW0gaW4gU291cmNl
cyAqLywKKwkJCQk1MUE5RDlFRTE5NUI5NDlGMDAxQjJCNUMgLyogV2ViSElER2FtZXBhZENvbnRy
b2xsZXIubW0gaW4gU291cmNlcyAqLywKIAkJCQlDRURBMTJEQjE1MkNCRTY4MDBEOUUwOEQgLyog
V2ViQWx0ZXJuYXRpdmVUZXh0Q2xpZW50Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQTEwQzFENjAx
ODIwMzAwRTAwMzY4ODNBIC8qIFBvcHVwTWVudUlPUy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUI2
Q0U1QzI0MTAwQkM1Q0UwMDIxOTkzNiAvKiBXZWJBcHBsaWNhdGlvbkNhY2hlLm1tIGluIFNvdXJj
ZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V2ViS2l0L21hYy9DaGFuZ2VMb2cKaW5kZXggOTA0MzhmMS4uOTRiMDY4NiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5n
ZUxvZwpAQCAtMSw1ICsxLDI5IEBACiAyMDE0LTA2LTI1ICBCcmFkeSBFaWRzb24gIDxiZWlkc29u
QGFwcGxlLmNvbT4KIAorICAgICAgICBBZGQgSElELWJhc2VkIGdhbWVwYWQgaW1wbGVtZW50YXRp
b24gZm9yIE1hYworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTM0MzI0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGVhbiBKYWNrc29uLgorCisgICAgICAg
IEFkZCBhIGNsYXNzIHRoYXQgYWN0cyBhcyBhbiBpbnRlcm1lZGlhcnkgYmV0d2VlbiB0aGUgR2Ft
ZXBhZFN0cmF0ZWd5Q2xpZW50CisgICAgICAgIGFuZCB0aGUgSElER2FtZXBhZExpc3RlbmVyOgor
ICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkhJREdhbWVwYWRDb250cm9sbGVyLmg6CisgICAg
ICAgICogV2ViQ29yZVN1cHBvcnQvV2ViSElER2FtZXBhZENvbnRyb2xsZXIubW06CisgICAgICAg
IChXZWJISURHYW1lcGFkQ29udHJvbGxlcjo6c2hhcmVkKToKKyAgICAgICAgKFdlYkhJREdhbWVw
YWRDb250cm9sbGVyOjpXZWJISURHYW1lcGFkQ29udHJvbGxlcik6CisgICAgICAgIChXZWJISURH
YW1lcGFkQ29udHJvbGxlcjo6Z2FtZXBhZENvbm5lY3RlZCk6CisgICAgICAgIChXZWJISURHYW1l
cGFkQ29udHJvbGxlcjo6Z2FtZXBhZERpc2Nvbm5lY3RlZCk6CisgICAgICAgIChXZWJISURHYW1l
cGFkQ29udHJvbGxlcjo6cmVnaXN0ZXJHYW1lcGFkU3RyYXRlZ3lDbGllbnQpOgorICAgICAgICAo
V2ViSElER2FtZXBhZENvbnRyb2xsZXI6OnVucmVnaXN0ZXJHYW1lcGFkU3RyYXRlZ3lDbGllbnQp
OgorCisgICAgICAgIEltcGxlbWVudCB0aGUgc3RyYXRlZ2llcyBieSB1c2luZyB0aGUgSElER2Ft
ZXBhZExpc3RlbmVyOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRl
Z2llcy5tbToKKyAgICAgICAgKFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6c3RhcnRNb25pdG9yaW5n
R2FtZXBhZHMpOgorICAgICAgICAoV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpzdG9wTW9uaXRvcmlu
Z0dhbWVwYWRzKToKKyAgICAgICAgKFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6cGxhdGZvcm1HYW1l
cGFkcyk6CisKKzIwMTQtMDYtMjUgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgor
CiAgICAgICAgIEFkZCBuZXcgcGxhdGZvcm0gZ2FtZXBhZCBhYnN0cmFjdGlvbnMKICAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNDMyNQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJISURHYW1lcGFkQ29udHJv
bGxlci5oIGIvU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViSElER2FtZXBhZENv
bnRyb2xsZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDgzMTM3Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViSElE
R2FtZXBhZENvbnRyb2xsZXIuaApAQCAtMCwwICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBXZWJISURHYW1lcGFkQ29udHJvbGxlcl9oCisjZGVmaW5lIFdlYkhJREdhbWVwYWRDb250cm9s
bGVyX2gKKworI2lmIEVOQUJMRShHQU1FUEFEKQorCisjaW5jbHVkZSA8V2ViQ29yZS9ISURHYW1l
cGFkTGlzdGVuZXIuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CitjbGFzcyBHYW1lcGFkU3RyYXRlZ3lDbGllbnQ7Cit9CisKK2NsYXNzIFdlYkhJREdh
bWVwYWRDb250cm9sbGVyIDogcHVibGljIFdlYkNvcmU6OkhJREdhbWVwYWRMaXN0ZW5lckNsaWVu
dCB7CitwdWJsaWM6CisgICAgc3RhdGljIFdlYkhJREdhbWVwYWRDb250cm9sbGVyJiBzaGFyZWQo
KTsKKworICAgIHZpcnR1YWwgdm9pZCBnYW1lcGFkQ29ubmVjdGVkKHVuc2lnbmVkIGluZGV4KSBv
dmVycmlkZSBmaW5hbDsKKyAgICB2aXJ0dWFsIHZvaWQgZ2FtZXBhZERpc2Nvbm5lY3RlZCh1bnNp
Z25lZCBpbmRleCkgb3ZlcnJpZGUgZmluYWw7CisKKyAgICB2b2lkIHJlZ2lzdGVyR2FtZXBhZFN0
cmF0ZWd5Q2xpZW50KFdlYkNvcmU6OkdhbWVwYWRTdHJhdGVneUNsaWVudCopOworICAgIHZvaWQg
dW5yZWdpc3RlckdhbWVwYWRTdHJhdGVneUNsaWVudChXZWJDb3JlOjpHYW1lcGFkU3RyYXRlZ3lD
bGllbnQqKTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgTmV2ZXJEZXN0cm95ZWQ8V2ViSElER2Ft
ZXBhZENvbnRyb2xsZXI+OworCisgICAgV2ViSElER2FtZXBhZENvbnRyb2xsZXIoKTsKKworICAg
IEhhc2hTZXQ8V2ViQ29yZTo6R2FtZXBhZFN0cmF0ZWd5Q2xpZW50Kj4gbV9jbGllbnRzOworfTsK
KworI2VuZGlmIC8vIEVOQUJMRShHQU1FUEFEKQorI2VuZGlmIC8vIFdlYkhJREdhbWVwYWRDb250
cm9sbGVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dl
YkhJREdhbWVwYWRDb250cm9sbGVyLm1tIGIvU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBv
cnQvV2ViSElER2FtZXBhZENvbnRyb2xsZXIubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uZWU3ZTU4MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL1dl
YkNvcmVTdXBwb3J0L1dlYkhJREdhbWVwYWRDb250cm9sbGVyLm1tCkBAIC0wLDAgKzEsNjcgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWYgRU5BQkxFKEdBTUVQQUQpCisKKyNpbXBvcnQgIldlYkhJREdhbWVw
YWRDb250cm9sbGVyLmgiCisjaW1wb3J0IDxXZWJDb3JlL0dhbWVwYWRTdHJhdGVneUNsaWVudC5o
PgorI2ltcG9ydCA8V2ViQ29yZS9ISURHYW1lcGFkTGlzdGVuZXIuaD4KKwordXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7CisKK1dlYkhJREdhbWVwYWRDb250cm9sbGVyJiBXZWJISURHYW1lcGFkQ29u
dHJvbGxlcjo6c2hhcmVkKCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8V2ViSElER2Ft
ZXBhZENvbnRyb2xsZXI+IHNoYXJlZENsaWVudDsKKyAgICByZXR1cm4gc2hhcmVkQ2xpZW50Owor
fQorCitXZWJISURHYW1lcGFkQ29udHJvbGxlcjo6V2ViSElER2FtZXBhZENvbnRyb2xsZXIoKQor
eworICAgIEhJREdhbWVwYWRMaXN0ZW5lcjo6c2hhcmVkKCkuc2V0Q2xpZW50KHRoaXMpOworfQor
Cit2b2lkIFdlYkhJREdhbWVwYWRDb250cm9sbGVyOjpnYW1lcGFkQ29ubmVjdGVkKHVuc2lnbmVk
IGluZGV4KQoreworICAgIGZvciAoYXV0byYgY2xpZW50IDogbV9jbGllbnRzKQorICAgICAgICBj
bGllbnQtPnBsYXRmb3JtR2FtZXBhZENvbm5lY3RlZChpbmRleCk7Cit9CisKK3ZvaWQgV2ViSElE
R2FtZXBhZENvbnRyb2xsZXI6OmdhbWVwYWREaXNjb25uZWN0ZWQodW5zaWduZWQgaW5kZXgpCit7
CisgICAgZm9yIChhdXRvJiBjbGllbnQgOiBtX2NsaWVudHMpCisgICAgICAgIGNsaWVudC0+cGxh
dGZvcm1HYW1lcGFkRGlzY29ubmVjdGVkKGluZGV4KTsKK30KKwordm9pZCBXZWJISURHYW1lcGFk
Q29udHJvbGxlcjo6cmVnaXN0ZXJHYW1lcGFkU3RyYXRlZ3lDbGllbnQoR2FtZXBhZFN0cmF0ZWd5
Q2xpZW50KiBjbGllbnQpCit7CisgICAgbV9jbGllbnRzLmFkZChjbGllbnQpOworfQorCit2b2lk
IFdlYkhJREdhbWVwYWRDb250cm9sbGVyOjp1bnJlZ2lzdGVyR2FtZXBhZFN0cmF0ZWd5Q2xpZW50
KEdhbWVwYWRTdHJhdGVneUNsaWVudCogY2xpZW50KQoreworICAgIG1fY2xpZW50cy5yZW1vdmUo
Y2xpZW50KTsKK30KKworI2VuZGlmIC8vIEVOQUJMRShHQU1FUEFEKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLm1tIGIv
U291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLm1t
CmluZGV4IDIyYjc2YTUuLmY0MGUxODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL1dl
YkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0
L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMubW0KQEAgLTQwLDYgKzQw
LDEwIEBACiAjaW1wb3J0IDxXZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaD4KICNpbXBvcnQgPHd0Zi9O
ZXZlckRlc3Ryb3llZC5oPgogCisjaWYgRU5BQkxFKEdBTUVQQUQpCisjaW1wb3J0ICJXZWJISURH
YW1lcGFkQ29udHJvbGxlci5oIgorI2VuZGlmCisKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwog
CiB2b2lkIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6aW5pdGlhbGl6ZUlmTmVjZXNzYXJ5KCkKQEAg
LTIyMSwxOCArMjI1LDE5IEBAIGxvbmcgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpzZXRTdHJpbmdG
b3JUeXBlKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBjb25zdCBTdHJpbmcmCiB9CiAKICNpZiBFTkFC
TEUoR0FNRVBBRCkKLXZvaWQgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpzdGFydE1vbml0b3JpbmdH
YW1lcGFkcyhHYW1lcGFkU3RyYXRlZ3lDbGllbnQqKQordm9pZCBXZWJQbGF0Zm9ybVN0cmF0ZWdp
ZXM6OnN0YXJ0TW9uaXRvcmluZ0dhbWVwYWRzKEdhbWVwYWRTdHJhdGVneUNsaWVudCogY2xpZW50
KQogeworICAgIFdlYkhJREdhbWVwYWRDb250cm9sbGVyOjpzaGFyZWQoKS5yZWdpc3RlckdhbWVw
YWRTdHJhdGVneUNsaWVudChjbGllbnQpOwogfQogCi12b2lkIFdlYlBsYXRmb3JtU3RyYXRlZ2ll
czo6c3RvcE1vbml0b3JpbmdHYW1lcGFkcyhHYW1lcGFkU3RyYXRlZ3lDbGllbnQqKQordm9pZCBX
ZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OnN0b3BNb25pdG9yaW5nR2FtZXBhZHMoR2FtZXBhZFN0cmF0
ZWd5Q2xpZW50KiBjbGllbnQpCiB7CisgICAgV2ViSElER2FtZXBhZENvbnRyb2xsZXI6OnNoYXJl
ZCgpLnVucmVnaXN0ZXJHYW1lcGFkU3RyYXRlZ3lDbGllbnQoY2xpZW50KTsKIH0KIAogY29uc3Qg
VmVjdG9yPFBsYXRmb3JtR2FtZXBhZCo+JiBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OnBsYXRmb3Jt
R2FtZXBhZHMoKQogewotICAgIE5ldmVyRGVzdHJveWVkPFZlY3RvcjxQbGF0Zm9ybUdhbWVwYWQq
Pj4gZHVtbXlHYW1lcGFkczsKLSAgICByZXR1cm4gZHVtbXlHYW1lcGFkczsKKyAgICByZXR1cm4g
SElER2FtZXBhZExpc3RlbmVyOjpzaGFyZWQoKS5wbGF0Zm9ybUdhbWVwYWRzKCk7CiB9CiAjZW5k
aWYgLy8gRU5BQkxFKEdBTUVQQUQpCiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>